summaryrefslogtreecommitdiff
path: root/Build/source
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2009-03-20 07:35:59 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2009-03-20 07:35:59 +0000
commit70a2688732ce8e027c0bbf4cbdc55621c9ca5b57 (patch)
tree0a618c7df46f5a6c6334bcc5b2264cc23ebdbc89 /Build/source
parent200cfaafaed3d870382579503f73a3838b427d51 (diff)
new build system
git-svn-id: svn://tug.org/texlive/trunk@12443 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source')
-rw-r--r--Build/source/libs/freetype2/ChangeLog3528
-rw-r--r--Build/source/libs/freetype2/ChangeLog.202613
-rw-r--r--Build/source/libs/freetype2/ChangeLog.219439
-rw-r--r--Build/source/libs/freetype2/ChangeLog.222837
-rw-r--r--Build/source/libs/freetype2/Jamfile203
-rw-r--r--Build/source/libs/freetype2/Jamrules71
-rw-r--r--Build/source/libs/freetype2/Makefile34
-rw-r--r--Build/source/libs/freetype2/README64
-rw-r--r--Build/source/libs/freetype2/README.CVS50
-rw-r--r--Build/source/libs/freetype2/ac/freetype2.ac3
-rw-r--r--Build/source/libs/freetype2/ac/withenable.ac3
-rwxr-xr-xBuild/source/libs/freetype2/autogen.sh61
-rw-r--r--Build/source/libs/freetype2/builds/amiga/README110
-rw-r--r--Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftconfig.h55
-rw-r--r--Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftmodule.h160
-rw-r--r--Build/source/libs/freetype2/builds/amiga/makefile284
-rw-r--r--Build/source/libs/freetype2/builds/amiga/makefile.os4287
-rw-r--r--Build/source/libs/freetype2/builds/amiga/smakefile291
-rw-r--r--Build/source/libs/freetype2/builds/amiga/src/base/ftdebug.c279
-rw-r--r--Build/source/libs/freetype2/builds/amiga/src/base/ftsystem.c522
-rw-r--r--Build/source/libs/freetype2/builds/ansi/ansi-def.mk74
-rw-r--r--Build/source/libs/freetype2/builds/ansi/ansi.mk21
-rw-r--r--Build/source/libs/freetype2/builds/atari/ATARI.H16
-rw-r--r--Build/source/libs/freetype2/builds/atari/FNames.SIC37
-rw-r--r--Build/source/libs/freetype2/builds/atari/FREETYPE.PRJ32
-rw-r--r--Build/source/libs/freetype2/builds/atari/README.TXT51
-rw-r--r--Build/source/libs/freetype2/builds/beos/beos-def.mk76
-rw-r--r--Build/source/libs/freetype2/builds/beos/beos.mk19
-rw-r--r--Build/source/libs/freetype2/builds/beos/detect.mk41
-rw-r--r--Build/source/libs/freetype2/builds/compiler/ansi-cc.mk80
-rw-r--r--Build/source/libs/freetype2/builds/compiler/bcc-dev.mk78
-rw-r--r--Build/source/libs/freetype2/builds/compiler/bcc.mk78
-rw-r--r--Build/source/libs/freetype2/builds/compiler/emx.mk77
-rw-r--r--Build/source/libs/freetype2/builds/compiler/gcc-dev.mk95
-rw-r--r--Build/source/libs/freetype2/builds/compiler/gcc.mk77
-rw-r--r--Build/source/libs/freetype2/builds/compiler/intelc.mk85
-rw-r--r--Build/source/libs/freetype2/builds/compiler/unix-lcc.mk83
-rw-r--r--Build/source/libs/freetype2/builds/compiler/visualage.mk76
-rw-r--r--Build/source/libs/freetype2/builds/compiler/visualc.mk82
-rw-r--r--Build/source/libs/freetype2/builds/compiler/watcom.mk81
-rw-r--r--Build/source/libs/freetype2/builds/compiler/win-lcc.mk81
-rw-r--r--Build/source/libs/freetype2/builds/detect.mk154
-rw-r--r--Build/source/libs/freetype2/builds/dos/detect.mk142
-rw-r--r--Build/source/libs/freetype2/builds/dos/dos-def.mk45
-rw-r--r--Build/source/libs/freetype2/builds/dos/dos-emx.mk21
-rw-r--r--Build/source/libs/freetype2/builds/dos/dos-gcc.mk21
-rw-r--r--Build/source/libs/freetype2/builds/dos/dos-wat.mk20
-rw-r--r--Build/source/libs/freetype2/builds/exports.mk76
-rw-r--r--Build/source/libs/freetype2/builds/freetype.mk361
-rw-r--r--Build/source/libs/freetype2/builds/link_dos.mk42
-rw-r--r--Build/source/libs/freetype2/builds/link_std.mk42
-rw-r--r--Build/source/libs/freetype2/builds/mac/FreeType.m68k_cfm.make.txt202
-rw-r--r--Build/source/libs/freetype2/builds/mac/FreeType.m68k_far.make.txt201
-rw-r--r--Build/source/libs/freetype2/builds/mac/FreeType.ppc_carbon.make.txt202
-rw-r--r--Build/source/libs/freetype2/builds/mac/FreeType.ppc_classic.make.txt203
-rw-r--r--Build/source/libs/freetype2/builds/mac/README403
-rwxr-xr-xBuild/source/libs/freetype2/builds/mac/ascii2mpw.py24
-rw-r--r--Build/source/libs/freetype2/builds/mac/ftlib.prj.xml1194
-rw-r--r--Build/source/libs/freetype2/builds/mac/ftmac.c1600
-rw-r--r--Build/source/libs/freetype2/builds/modules.mk79
-rw-r--r--Build/source/libs/freetype2/builds/newline1
-rw-r--r--Build/source/libs/freetype2/builds/os2/detect.mk73
-rw-r--r--Build/source/libs/freetype2/builds/os2/os2-def.mk44
-rw-r--r--Build/source/libs/freetype2/builds/os2/os2-dev.mk30
-rw-r--r--Build/source/libs/freetype2/builds/os2/os2-gcc.mk26
-rw-r--r--Build/source/libs/freetype2/builds/symbian/bld.inf66
-rw-r--r--Build/source/libs/freetype2/builds/symbian/freetype.mmp136
-rw-r--r--Build/source/libs/freetype2/builds/toplevel.mk245
-rw-r--r--Build/source/libs/freetype2/builds/unix/aclocal.m47912
-rw-r--r--Build/source/libs/freetype2/builds/unix/config.guess1555
-rw-r--r--Build/source/libs/freetype2/builds/unix/config.sub1685
-rwxr-xr-xBuild/source/libs/freetype2/builds/unix/configure15878
-rw-r--r--Build/source/libs/freetype2/builds/unix/configure.ac595
-rw-r--r--Build/source/libs/freetype2/builds/unix/configure.raw595
-rw-r--r--Build/source/libs/freetype2/builds/unix/detect.mk91
-rw-r--r--Build/source/libs/freetype2/builds/unix/freetype-config.in157
-rw-r--r--Build/source/libs/freetype2/builds/unix/freetype2.in11
-rw-r--r--Build/source/libs/freetype2/builds/unix/freetype2.m4192
-rw-r--r--Build/source/libs/freetype2/builds/unix/ft-munmap.m432
-rw-r--r--Build/source/libs/freetype2/builds/unix/ft2unix.h61
-rw-r--r--Build/source/libs/freetype2/builds/unix/ftconfig.in349
-rw-r--r--Build/source/libs/freetype2/builds/unix/ftsystem.c414
-rw-r--r--Build/source/libs/freetype2/builds/unix/install-sh519
-rw-r--r--Build/source/libs/freetype2/builds/unix/install.mk97
-rwxr-xr-xBuild/source/libs/freetype2/builds/unix/ltmain.sh7874
-rw-r--r--Build/source/libs/freetype2/builds/unix/mkinstalldirs161
-rw-r--r--Build/source/libs/freetype2/builds/unix/unix-cc.in113
-rw-r--r--Build/source/libs/freetype2/builds/unix/unix-def.in81
-rw-r--r--Build/source/libs/freetype2/builds/unix/unix-dev.mk26
-rw-r--r--Build/source/libs/freetype2/builds/unix/unix-lcc.mk24
-rw-r--r--Build/source/libs/freetype2/builds/unix/unix.mk62
-rw-r--r--Build/source/libs/freetype2/builds/unix/unixddef.mk45
-rw-r--r--Build/source/libs/freetype2/builds/vms/ftconfig.h338
-rw-r--r--Build/source/libs/freetype2/builds/vms/ftsystem.c321
-rw-r--r--Build/source/libs/freetype2/builds/win32/detect.mk183
-rw-r--r--Build/source/libs/freetype2/builds/win32/ftdebug.c248
-rw-r--r--Build/source/libs/freetype2/builds/win32/visualc/freetype.dsp396
-rw-r--r--Build/source/libs/freetype2/builds/win32/visualc/freetype.sln31
-rw-r--r--Build/source/libs/freetype2/builds/win32/visualc/freetype.vcproj2155
-rw-r--r--Build/source/libs/freetype2/builds/win32/visualc/index.html37
-rw-r--r--Build/source/libs/freetype2/builds/win32/visualce/freetype.dsp396
-rw-r--r--Build/source/libs/freetype2/builds/win32/visualce/freetype.vcproj13861
-rw-r--r--Build/source/libs/freetype2/builds/win32/visualce/index.html47
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-bcc.mk28
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-bccd.mk26
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-dev.mk32
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-gcc.mk31
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-icc.mk28
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-intl.mk28
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-lcc.mk24
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-mingw32.mk33
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-vcc.mk28
-rw-r--r--Build/source/libs/freetype2/builds/win32/w32-wat.mk28
-rw-r--r--Build/source/libs/freetype2/builds/win32/win32-def.mk46
-rwxr-xr-xBuild/source/libs/freetype2/configure100
-rw-r--r--Build/source/libs/freetype2/devel/ft2build.h41
-rw-r--r--Build/source/libs/freetype2/devel/ftoption.h672
-rw-r--r--Build/source/libs/freetype2/docs/CHANGES3185
-rw-r--r--Build/source/libs/freetype2/docs/CUSTOMIZE150
-rw-r--r--Build/source/libs/freetype2/docs/DEBUG199
-rw-r--r--Build/source/libs/freetype2/docs/FTL.TXT169
-rw-r--r--Build/source/libs/freetype2/docs/GPL.TXT340
-rw-r--r--Build/source/libs/freetype2/docs/INSTALL89
-rw-r--r--Build/source/libs/freetype2/docs/INSTALL.ANY139
-rw-r--r--Build/source/libs/freetype2/docs/INSTALL.CROSS135
-rw-r--r--Build/source/libs/freetype2/docs/INSTALL.GNU159
-rw-r--r--Build/source/libs/freetype2/docs/INSTALL.MAC32
-rw-r--r--Build/source/libs/freetype2/docs/INSTALL.UNIX96
-rw-r--r--Build/source/libs/freetype2/docs/INSTALL.VMS62
-rw-r--r--Build/source/libs/freetype2/docs/LICENSE.TXT28
-rw-r--r--Build/source/libs/freetype2/docs/MAKEPP5
-rw-r--r--Build/source/libs/freetype2/docs/PATENTS27
-rw-r--r--Build/source/libs/freetype2/docs/PROBLEMS77
-rw-r--r--Build/source/libs/freetype2/docs/TODO40
-rw-r--r--Build/source/libs/freetype2/docs/TRUETYPE40
-rw-r--r--Build/source/libs/freetype2/docs/UPGRADE.UNIX137
-rw-r--r--Build/source/libs/freetype2/docs/VERSION.DLL133
-rw-r--r--Build/source/libs/freetype2/docs/formats.txt154
-rw-r--r--Build/source/libs/freetype2/docs/raster.txt635
-rw-r--r--Build/source/libs/freetype2/docs/reference/README5
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-base_interface.html3432
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-basic_types.html1164
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-bdf_fonts.html258
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-bitmap_handling.html268
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-cache_subsystem.html1169
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-cid_fonts.html106
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-computations.html832
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-font_formats.html83
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-gasp_table.html141
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-glyph_management.html637
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-glyph_stroker.html928
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-glyph_variants.html267
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-gx_validation.html356
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-gzip.html94
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-header_file_macros.html820
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-incremental.html397
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-index.html284
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-lcd_filtering.html149
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-list_processing.html483
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-lzw.html94
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-mac_specific.html368
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-module_management.html626
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-multiple_masters.html511
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-ot_validation.html208
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-outline_processing.html1105
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-pfr_fonts.html206
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-raster.html606
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-sfnt_names.html190
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-sizes_management.html164
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-system_interface.html415
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-toc.html211
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-truetype_engine.html132
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-truetype_tables.html1217
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-type1_tables.html522
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-user_allocation.html47
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-version.html213
-rw-r--r--Build/source/libs/freetype2/docs/reference/ft2-winfnt_fonts.html278
-rw-r--r--Build/source/libs/freetype2/docs/release166
-rw-r--r--Build/source/libs/freetype2/freetype2.ac58
-rw-r--r--Build/source/libs/freetype2/include/freetype/config/ftconfig.h415
-rw-r--r--Build/source/libs/freetype2/include/freetype/config/ftheader.h768
-rw-r--r--Build/source/libs/freetype2/include/freetype/config/ftmodule.h32
-rw-r--r--Build/source/libs/freetype2/include/freetype/config/ftoption.h671
-rw-r--r--Build/source/libs/freetype2/include/freetype/config/ftstdlib.h180
-rw-r--r--Build/source/libs/freetype2/include/freetype/freetype.h3716
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftbbox.h94
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftbdf.h201
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftbitmap.h206
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftcache.h1121
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftchapters.h102
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftcid.h98
-rw-r--r--Build/source/libs/freetype2/include/freetype/fterrdef.h239
-rw-r--r--Build/source/libs/freetype2/include/freetype/fterrors.h206
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftgasp.h113
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftglyph.h575
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftgxval.h358
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftgzip.h102
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftimage.h1253
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftincrem.h349
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftlcdfil.h166
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftlist.h273
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftlzw.h99
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftmac.h274
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftmm.h378
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftmodapi.h441
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftmoderr.h155
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftotval.h203
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftoutln.h536
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftpfr.h172
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftrender.h234
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftsizes.h159
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftsnames.h170
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftstroke.h716
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftsynth.h73
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftsystem.h346
-rw-r--r--Build/source/libs/freetype2/include/freetype/fttrigon.h350
-rw-r--r--Build/source/libs/freetype2/include/freetype/fttypes.h587
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftwinfnt.h274
-rw-r--r--Build/source/libs/freetype2/include/freetype/ftxf86.h80
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/autohint.h205
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftcalc.h178
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftdebug.h250
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftdriver.h248
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftgloadr.h168
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftmemory.h368
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftobjs.h875
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftrfork.h196
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftserv.h328
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftstream.h539
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/fttrace.h134
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/ftvalid.h150
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/internal.h50
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/pcftypes.h56
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/psaux.h871
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/pshints.h687
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svbdf.h57
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svcid.h49
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svgldict.h60
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svgxval.h72
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svkern.h51
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svmm.h79
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svotval.h55
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svpfr.h66
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svpostnm.h58
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svpscmap.h129
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svpsinfo.h60
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svsfnt.h80
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svttcmap.h78
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svtteng.h53
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svttglyf.h48
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svwinfnt.h50
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/services/svxf86nm.h55
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/sfnt.h762
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/t1types.h252
-rw-r--r--Build/source/libs/freetype2/include/freetype/internal/tttypes.h1543
-rw-r--r--Build/source/libs/freetype2/include/freetype/t1tables.h504
-rw-r--r--Build/source/libs/freetype2/include/freetype/ttnameid.h1146
-rw-r--r--Build/source/libs/freetype2/include/freetype/tttables.h756
-rw-r--r--Build/source/libs/freetype2/include/freetype/tttags.h100
-rw-r--r--Build/source/libs/freetype2/include/freetype/ttunpat.h59
-rw-r--r--Build/source/libs/freetype2/include/ft2build.h39
-rw-r--r--Build/source/libs/freetype2/modules.cfg245
-rw-r--r--Build/source/libs/freetype2/objs/README2
-rw-r--r--Build/source/libs/freetype2/src/Jamfile25
-rw-r--r--Build/source/libs/freetype2/src/autofit/Jamfile39
-rw-r--r--Build/source/libs/freetype2/src/autofit/afangles.c292
-rw-r--r--Build/source/libs/freetype2/src/autofit/afangles.h7
-rw-r--r--Build/source/libs/freetype2/src/autofit/afcjk.c1508
-rw-r--r--Build/source/libs/freetype2/src/autofit/afcjk.h58
-rw-r--r--Build/source/libs/freetype2/src/autofit/afdummy.c62
-rw-r--r--Build/source/libs/freetype2/src/autofit/afdummy.h43
-rw-r--r--Build/source/libs/freetype2/src/autofit/aferrors.h40
-rw-r--r--Build/source/libs/freetype2/src/autofit/afglobal.c289
-rw-r--r--Build/source/libs/freetype2/src/autofit/afglobal.h67
-rw-r--r--Build/source/libs/freetype2/src/autofit/afhints.c1264
-rw-r--r--Build/source/libs/freetype2/src/autofit/afhints.h333
-rw-r--r--Build/source/libs/freetype2/src/autofit/afindic.c134
-rw-r--r--Build/source/libs/freetype2/src/autofit/afindic.h41
-rw-r--r--Build/source/libs/freetype2/src/autofit/aflatin.c2168
-rw-r--r--Build/source/libs/freetype2/src/autofit/aflatin.h209
-rw-r--r--Build/source/libs/freetype2/src/autofit/aflatin2.c2286
-rw-r--r--Build/source/libs/freetype2/src/autofit/aflatin2.h40
-rw-r--r--Build/source/libs/freetype2/src/autofit/afloader.c535
-rw-r--r--Build/source/libs/freetype2/src/autofit/afloader.h73
-rw-r--r--Build/source/libs/freetype2/src/autofit/afmodule.c97
-rw-r--r--Build/source/libs/freetype2/src/autofit/afmodule.h37
-rw-r--r--Build/source/libs/freetype2/src/autofit/aftypes.h349
-rw-r--r--Build/source/libs/freetype2/src/autofit/afwarp.c338
-rw-r--r--Build/source/libs/freetype2/src/autofit/afwarp.h64
-rw-r--r--Build/source/libs/freetype2/src/autofit/autofit.c40
-rw-r--r--Build/source/libs/freetype2/src/autofit/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/autofit/rules.mk78
-rw-r--r--Build/source/libs/freetype2/src/base/Jamfile50
-rw-r--r--Build/source/libs/freetype2/src/base/ftapi.c121
-rw-r--r--Build/source/libs/freetype2/src/base/ftbase.c38
-rw-r--r--Build/source/libs/freetype2/src/base/ftbbox.c659
-rw-r--r--Build/source/libs/freetype2/src/base/ftbdf.c88
-rw-r--r--Build/source/libs/freetype2/src/base/ftbitmap.c630
-rw-r--r--Build/source/libs/freetype2/src/base/ftcalc.c927
-rw-r--r--Build/source/libs/freetype2/src/base/ftcid.c63
-rw-r--r--Build/source/libs/freetype2/src/base/ftdbgmem.c998
-rw-r--r--Build/source/libs/freetype2/src/base/ftdebug.c246
-rw-r--r--Build/source/libs/freetype2/src/base/ftgasp.c61
-rw-r--r--Build/source/libs/freetype2/src/base/ftgloadr.c394
-rw-r--r--Build/source/libs/freetype2/src/base/ftglyph.c626
-rw-r--r--Build/source/libs/freetype2/src/base/ftgxval.c129
-rw-r--r--Build/source/libs/freetype2/src/base/ftinit.c163
-rw-r--r--Build/source/libs/freetype2/src/base/ftlcdfil.c351
-rw-r--r--Build/source/libs/freetype2/src/base/ftmac.c1130
-rw-r--r--Build/source/libs/freetype2/src/base/ftmm.c202
-rw-r--r--Build/source/libs/freetype2/src/base/ftnames.c94
-rw-r--r--Build/source/libs/freetype2/src/base/ftobjs.c4198
-rw-r--r--Build/source/libs/freetype2/src/base/ftotval.c83
-rw-r--r--Build/source/libs/freetype2/src/base/ftoutln.c1090
-rw-r--r--Build/source/libs/freetype2/src/base/ftpatent.c281
-rw-r--r--Build/source/libs/freetype2/src/base/ftpfr.c132
-rw-r--r--Build/source/libs/freetype2/src/base/ftrfork.c811
-rw-r--r--Build/source/libs/freetype2/src/base/ftstream.c845
-rw-r--r--Build/source/libs/freetype2/src/base/ftstroke.c2010
-rw-r--r--Build/source/libs/freetype2/src/base/ftsynth.c159
-rw-r--r--Build/source/libs/freetype2/src/base/ftsystem.c301
-rw-r--r--Build/source/libs/freetype2/src/base/fttrigon.c546
-rw-r--r--Build/source/libs/freetype2/src/base/fttype1.c94
-rw-r--r--Build/source/libs/freetype2/src/base/ftutil.c501
-rw-r--r--Build/source/libs/freetype2/src/base/ftwinfnt.c51
-rw-r--r--Build/source/libs/freetype2/src/base/ftxf86.c40
-rw-r--r--Build/source/libs/freetype2/src/base/rules.mk90
-rw-r--r--Build/source/libs/freetype2/src/bdf/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/bdf/README148
-rw-r--r--Build/source/libs/freetype2/src/bdf/bdf.c34
-rw-r--r--Build/source/libs/freetype2/src/bdf/bdf.h295
-rw-r--r--Build/source/libs/freetype2/src/bdf/bdfdrivr.c850
-rw-r--r--Build/source/libs/freetype2/src/bdf/bdfdrivr.h76
-rw-r--r--Build/source/libs/freetype2/src/bdf/bdferror.h44
-rw-r--r--Build/source/libs/freetype2/src/bdf/bdflib.c2472
-rw-r--r--Build/source/libs/freetype2/src/bdf/module.mk34
-rw-r--r--Build/source/libs/freetype2/src/bdf/rules.mk80
-rw-r--r--Build/source/libs/freetype2/src/cache/Jamfile43
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcache.c31
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcbasic.c811
-rw-r--r--Build/source/libs/freetype2/src/cache/ftccache.c592
-rw-r--r--Build/source/libs/freetype2/src/cache/ftccache.h317
-rw-r--r--Build/source/libs/freetype2/src/cache/ftccback.h90
-rw-r--r--Build/source/libs/freetype2/src/cache/ftccmap.c413
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcerror.h40
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcglyph.c211
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcglyph.h322
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcimage.c163
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcimage.h107
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcmanag.c732
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcmanag.h175
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcmru.c357
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcmru.h247
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcsbits.c401
-rw-r--r--Build/source/libs/freetype2/src/cache/ftcsbits.h98
-rw-r--r--Build/source/libs/freetype2/src/cache/rules.mk78
-rw-r--r--Build/source/libs/freetype2/src/cff/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/cff/cff.c29
-rw-r--r--Build/source/libs/freetype2/src/cff/cffcmap.c224
-rw-r--r--Build/source/libs/freetype2/src/cff/cffcmap.h69
-rw-r--r--Build/source/libs/freetype2/src/cff/cffdrivr.c585
-rw-r--r--Build/source/libs/freetype2/src/cff/cffdrivr.h39
-rw-r--r--Build/source/libs/freetype2/src/cff/cfferrs.h41
-rw-r--r--Build/source/libs/freetype2/src/cff/cffgload.c2701
-rw-r--r--Build/source/libs/freetype2/src/cff/cffgload.h202
-rw-r--r--Build/source/libs/freetype2/src/cff/cffload.c1605
-rw-r--r--Build/source/libs/freetype2/src/cff/cffload.h79
-rw-r--r--Build/source/libs/freetype2/src/cff/cffobjs.c959
-rw-r--r--Build/source/libs/freetype2/src/cff/cffobjs.h181
-rw-r--r--Build/source/libs/freetype2/src/cff/cffparse.c843
-rw-r--r--Build/source/libs/freetype2/src/cff/cffparse.h69
-rw-r--r--Build/source/libs/freetype2/src/cff/cfftoken.h97
-rw-r--r--Build/source/libs/freetype2/src/cff/cfftypes.h274
-rw-r--r--Build/source/libs/freetype2/src/cff/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/cff/rules.mk72
-rw-r--r--Build/source/libs/freetype2/src/cid/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/cid/ciderrs.h40
-rw-r--r--Build/source/libs/freetype2/src/cid/cidgload.c433
-rw-r--r--Build/source/libs/freetype2/src/cid/cidgload.h51
-rw-r--r--Build/source/libs/freetype2/src/cid/cidload.c644
-rw-r--r--Build/source/libs/freetype2/src/cid/cidload.h53
-rw-r--r--Build/source/libs/freetype2/src/cid/cidobjs.c480
-rw-r--r--Build/source/libs/freetype2/src/cid/cidobjs.h154
-rw-r--r--Build/source/libs/freetype2/src/cid/cidparse.c226
-rw-r--r--Build/source/libs/freetype2/src/cid/cidparse.h123
-rw-r--r--Build/source/libs/freetype2/src/cid/cidriver.c198
-rw-r--r--Build/source/libs/freetype2/src/cid/cidriver.h39
-rw-r--r--Build/source/libs/freetype2/src/cid/cidtoken.h103
-rw-r--r--Build/source/libs/freetype2/src/cid/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/cid/rules.mk70
-rw-r--r--Build/source/libs/freetype2/src/cid/type1cid.c29
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/Jamfile33
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/README532
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvalid.c46
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvalid.h107
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvbsln.c333
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvcommn.c1758
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvcommn.h560
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxverror.h51
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvfeat.c344
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvfeat.h172
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvfgen.c482
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvjust.c630
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvkern.c876
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvlcar.c223
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmod.c285
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmod.h46
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmort.c285
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmort.h93
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmort0.c137
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmort1.c258
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmort2.c282
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmort4.c125
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmort5.c226
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmorx.c183
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmorx.h67
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmorx0.c103
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmorx1.c274
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmorx2.c285
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmorx4.c55
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvmorx5.c217
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvopbd.c217
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvprop.c301
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/gxvtrak.c277
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/gxvalid/rules.mk94
-rw-r--r--Build/source/libs/freetype2/src/gzip/Jamfile16
-rw-r--r--Build/source/libs/freetype2/src/gzip/adler32.c48
-rw-r--r--Build/source/libs/freetype2/src/gzip/ftgzip.c682
-rw-r--r--Build/source/libs/freetype2/src/gzip/infblock.c387
-rw-r--r--Build/source/libs/freetype2/src/gzip/infblock.h36
-rw-r--r--Build/source/libs/freetype2/src/gzip/infcodes.c250
-rw-r--r--Build/source/libs/freetype2/src/gzip/infcodes.h31
-rw-r--r--Build/source/libs/freetype2/src/gzip/inffixed.h151
-rw-r--r--Build/source/libs/freetype2/src/gzip/inflate.c273
-rw-r--r--Build/source/libs/freetype2/src/gzip/inftrees.c465
-rw-r--r--Build/source/libs/freetype2/src/gzip/inftrees.h63
-rw-r--r--Build/source/libs/freetype2/src/gzip/infutil.c86
-rw-r--r--Build/source/libs/freetype2/src/gzip/infutil.h98
-rw-r--r--Build/source/libs/freetype2/src/gzip/rules.mk75
-rw-r--r--Build/source/libs/freetype2/src/gzip/zconf.h278
-rw-r--r--Build/source/libs/freetype2/src/gzip/zlib.h830
-rw-r--r--Build/source/libs/freetype2/src/gzip/zutil.c181
-rw-r--r--Build/source/libs/freetype2/src/gzip/zutil.h215
-rw-r--r--Build/source/libs/freetype2/src/lzw/Jamfile16
-rw-r--r--Build/source/libs/freetype2/src/lzw/ftlzw.c413
-rw-r--r--Build/source/libs/freetype2/src/lzw/ftzopen.c398
-rw-r--r--Build/source/libs/freetype2/src/lzw/ftzopen.h171
-rw-r--r--Build/source/libs/freetype2/src/lzw/rules.mk70
-rw-r--r--Build/source/libs/freetype2/src/otvalid/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/otvalid/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvalid.c31
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvalid.h77
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvbase.c318
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvcommn.c1086
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvcommn.h437
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otverror.h43
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvgdef.c219
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvgpos.c1016
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvgpos.h36
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvgsub.c584
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvjstf.c258
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvmath.c450
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvmod.c267
-rw-r--r--Build/source/libs/freetype2/src/otvalid/otvmod.h39
-rw-r--r--Build/source/libs/freetype2/src/otvalid/rules.mk78
-rw-r--r--Build/source/libs/freetype2/src/pcf/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/pcf/README114
-rw-r--r--Build/source/libs/freetype2/src/pcf/module.mk34
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcf.c36
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcf.h237
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcfdrivr.c674
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcfdrivr.h44
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcferror.h40
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcfread.c1267
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcfread.h45
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcfutil.c104
-rw-r--r--Build/source/libs/freetype2/src/pcf/pcfutil.h55
-rw-r--r--Build/source/libs/freetype2/src/pcf/rules.mk80
-rw-r--r--Build/source/libs/freetype2/src/pfr/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/pfr/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfr.c29
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrcmap.c167
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrcmap.h46
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrdrivr.c207
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrdrivr.h39
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrerror.h40
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrgload.c828
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrgload.h49
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrload.c938
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrload.h118
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrobjs.c576
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrobjs.h96
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrsbit.c680
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrsbit.h36
-rw-r--r--Build/source/libs/freetype2/src/pfr/pfrtypes.h362
-rw-r--r--Build/source/libs/freetype2/src/pfr/rules.mk73
-rw-r--r--Build/source/libs/freetype2/src/psaux/Jamfile31
-rw-r--r--Build/source/libs/freetype2/src/psaux/afmparse.c960
-rw-r--r--Build/source/libs/freetype2/src/psaux/afmparse.h87
-rw-r--r--Build/source/libs/freetype2/src/psaux/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/psaux/psaux.c34
-rw-r--r--Build/source/libs/freetype2/src/psaux/psauxerr.h41
-rw-r--r--Build/source/libs/freetype2/src/psaux/psauxmod.c139
-rw-r--r--Build/source/libs/freetype2/src/psaux/psauxmod.h38
-rw-r--r--Build/source/libs/freetype2/src/psaux/psconv.c474
-rw-r--r--Build/source/libs/freetype2/src/psaux/psconv.h71
-rw-r--r--Build/source/libs/freetype2/src/psaux/psobjs.c1699
-rw-r--r--Build/source/libs/freetype2/src/psaux/psobjs.h212
-rw-r--r--Build/source/libs/freetype2/src/psaux/rules.mk73
-rw-r--r--Build/source/libs/freetype2/src/psaux/t1cmap.c341
-rw-r--r--Build/source/libs/freetype2/src/psaux/t1cmap.h105
-rw-r--r--Build/source/libs/freetype2/src/psaux/t1decode.c1475
-rw-r--r--Build/source/libs/freetype2/src/psaux/t1decode.h64
-rw-r--r--Build/source/libs/freetype2/src/pshinter/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/pshinter/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshalgo.c2302
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshalgo.h255
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshglob.c750
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshglob.h196
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshinter.c28
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshmod.c121
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshmod.h39
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshnterr.h40
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshrec.c1215
-rw-r--r--Build/source/libs/freetype2/src/pshinter/pshrec.h176
-rw-r--r--Build/source/libs/freetype2/src/pshinter/rules.mk72
-rw-r--r--Build/source/libs/freetype2/src/psnames/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/psnames/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/psnames/psmodule.c565
-rw-r--r--Build/source/libs/freetype2/src/psnames/psmodule.h38
-rw-r--r--Build/source/libs/freetype2/src/psnames/psnamerr.h41
-rw-r--r--Build/source/libs/freetype2/src/psnames/psnames.c25
-rw-r--r--Build/source/libs/freetype2/src/psnames/pstables.h4090
-rw-r--r--Build/source/libs/freetype2/src/psnames/rules.mk70
-rw-r--r--Build/source/libs/freetype2/src/raster/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/raster/ftmisc.h83
-rw-r--r--Build/source/libs/freetype2/src/raster/ftraster.c3432
-rw-r--r--Build/source/libs/freetype2/src/raster/ftraster.h46
-rw-r--r--Build/source/libs/freetype2/src/raster/ftrend1.c273
-rw-r--r--Build/source/libs/freetype2/src/raster/ftrend1.h44
-rw-r--r--Build/source/libs/freetype2/src/raster/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/raster/raster.c26
-rw-r--r--Build/source/libs/freetype2/src/raster/rasterrs.h41
-rw-r--r--Build/source/libs/freetype2/src/raster/rules.mk69
-rw-r--r--Build/source/libs/freetype2/src/sfnt/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/sfnt/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/sfnt/rules.mk76
-rw-r--r--Build/source/libs/freetype2/src/sfnt/sfdriver.c618
-rw-r--r--Build/source/libs/freetype2/src/sfnt/sfdriver.h38
-rw-r--r--Build/source/libs/freetype2/src/sfnt/sferrors.h41
-rw-r--r--Build/source/libs/freetype2/src/sfnt/sfnt.c41
-rw-r--r--Build/source/libs/freetype2/src/sfnt/sfobjs.c1116
-rw-r--r--Build/source/libs/freetype2/src/sfnt/sfobjs.h54
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttbdf.c250
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttbdf.h46
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttcmap.c3123
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttcmap.h85
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttkern.c292
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttkern.h52
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttload.c1185
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttload.h112
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttmtx.c466
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttmtx.h55
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttpost.c521
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttpost.h46
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttsbit.c1502
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttsbit.h79
-rw-r--r--Build/source/libs/freetype2/src/sfnt/ttsbit0.c996
-rw-r--r--Build/source/libs/freetype2/src/smooth/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/smooth/ftgrays.c1987
-rw-r--r--Build/source/libs/freetype2/src/smooth/ftgrays.h57
-rw-r--r--Build/source/libs/freetype2/src/smooth/ftsmerrs.h41
-rw-r--r--Build/source/libs/freetype2/src/smooth/ftsmooth.c467
-rw-r--r--Build/source/libs/freetype2/src/smooth/ftsmooth.h49
-rw-r--r--Build/source/libs/freetype2/src/smooth/module.mk27
-rw-r--r--Build/source/libs/freetype2/src/smooth/rules.mk69
-rw-r--r--Build/source/libs/freetype2/src/smooth/smooth.c26
-rw-r--r--Build/source/libs/freetype2/src/tools/Jamfile5
-rw-r--r--Build/source/libs/freetype2/src/tools/apinames.c443
-rw-r--r--Build/source/libs/freetype2/src/tools/cordic.py79
-rw-r--r--Build/source/libs/freetype2/src/tools/docmaker/content.py582
-rw-r--r--Build/source/libs/freetype2/src/tools/docmaker/docbeauty.py113
-rw-r--r--Build/source/libs/freetype2/src/tools/docmaker/docmaker.py106
-rw-r--r--Build/source/libs/freetype2/src/tools/docmaker/formatter.py188
-rw-r--r--Build/source/libs/freetype2/src/tools/docmaker/sources.py347
-rw-r--r--Build/source/libs/freetype2/src/tools/docmaker/tohtml.py593
-rw-r--r--Build/source/libs/freetype2/src/tools/docmaker/utils.py132
-rw-r--r--Build/source/libs/freetype2/src/tools/ftrandom/Makefile35
-rw-r--r--Build/source/libs/freetype2/src/tools/ftrandom/README48
-rw-r--r--Build/source/libs/freetype2/src/tools/ftrandom/ftrandom.c659
-rw-r--r--Build/source/libs/freetype2/src/tools/glnames.py5282
-rw-r--r--Build/source/libs/freetype2/src/tools/test_afm.c157
-rw-r--r--Build/source/libs/freetype2/src/tools/test_bbox.c160
-rw-r--r--Build/source/libs/freetype2/src/tools/test_trig.c236
-rw-r--r--Build/source/libs/freetype2/src/truetype/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/truetype/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/truetype/rules.mk72
-rw-r--r--Build/source/libs/freetype2/src/truetype/truetype.c36
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttdriver.c418
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttdriver.h38
-rw-r--r--Build/source/libs/freetype2/src/truetype/tterrors.h40
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttgload.c2010
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttgload.h49
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttgxvar.c1539
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttgxvar.h182
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttinterp.c7823
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttinterp.h311
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttobjs.c943
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttobjs.h459
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttpload.c523
-rw-r--r--Build/source/libs/freetype2/src/truetype/ttpload.h75
-rw-r--r--Build/source/libs/freetype2/src/type1/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/type1/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/type1/rules.mk73
-rw-r--r--Build/source/libs/freetype2/src/type1/t1afm.c385
-rw-r--r--Build/source/libs/freetype2/src/type1/t1afm.h54
-rw-r--r--Build/source/libs/freetype2/src/type1/t1driver.c313
-rw-r--r--Build/source/libs/freetype2/src/type1/t1driver.h38
-rw-r--r--Build/source/libs/freetype2/src/type1/t1errors.h40
-rw-r--r--Build/source/libs/freetype2/src/type1/t1gload.c422
-rw-r--r--Build/source/libs/freetype2/src/type1/t1gload.h46
-rw-r--r--Build/source/libs/freetype2/src/type1/t1load.c2233
-rw-r--r--Build/source/libs/freetype2/src/type1/t1load.h102
-rw-r--r--Build/source/libs/freetype2/src/type1/t1objs.c589
-rw-r--r--Build/source/libs/freetype2/src/type1/t1objs.h171
-rw-r--r--Build/source/libs/freetype2/src/type1/t1parse.c484
-rw-r--r--Build/source/libs/freetype2/src/type1/t1parse.h135
-rw-r--r--Build/source/libs/freetype2/src/type1/t1tokens.h134
-rw-r--r--Build/source/libs/freetype2/src/type1/type1.c33
-rw-r--r--Build/source/libs/freetype2/src/type42/Jamfile29
-rw-r--r--Build/source/libs/freetype2/src/type42/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/type42/rules.mk69
-rw-r--r--Build/source/libs/freetype2/src/type42/t42drivr.c232
-rw-r--r--Build/source/libs/freetype2/src/type42/t42drivr.h38
-rw-r--r--Build/source/libs/freetype2/src/type42/t42error.h40
-rw-r--r--Build/source/libs/freetype2/src/type42/t42objs.c647
-rw-r--r--Build/source/libs/freetype2/src/type42/t42objs.h124
-rw-r--r--Build/source/libs/freetype2/src/type42/t42parse.c1167
-rw-r--r--Build/source/libs/freetype2/src/type42/t42parse.h90
-rw-r--r--Build/source/libs/freetype2/src/type42/t42types.h54
-rw-r--r--Build/source/libs/freetype2/src/type42/type42.c25
-rw-r--r--Build/source/libs/freetype2/src/winfonts/Jamfile16
-rw-r--r--Build/source/libs/freetype2/src/winfonts/fnterrs.h41
-rw-r--r--Build/source/libs/freetype2/src/winfonts/module.mk23
-rw-r--r--Build/source/libs/freetype2/src/winfonts/rules.mk65
-rw-r--r--Build/source/libs/freetype2/src/winfonts/winfnt.c1130
-rw-r--r--Build/source/libs/freetype2/src/winfonts/winfnt.h167
-rw-r--r--Build/source/libs/freetype2/version.sed5
-rw-r--r--Build/source/libs/freetype2/vms_make.com1286
-rw-r--r--Build/source/libs/freetype2/withenable.ac11
-rw-r--r--Build/source/libs/graphite-engine/COPYING1
-rw-r--r--Build/source/libs/graphite-engine/INSTALL236
-rw-r--r--Build/source/libs/graphite-engine/Makefile.am62
-rw-r--r--Build/source/libs/graphite-engine/Makefile.in699
-rw-r--r--Build/source/libs/graphite-engine/README32
-rw-r--r--Build/source/libs/graphite-engine/TODO4
-rw-r--r--Build/source/libs/graphite-engine/aclocal.m47533
-rw-r--r--Build/source/libs/graphite-engine/build.bat1
-rw-r--r--Build/source/libs/graphite-engine/build_d.bat1
-rwxr-xr-xBuild/source/libs/graphite-engine/config/depcomp530
-rwxr-xr-xBuild/source/libs/graphite-engine/config/install-sh519
-rwxr-xr-xBuild/source/libs/graphite-engine/config/missing375
-rw-r--r--Build/source/libs/graphite-engine/configure.ac137
-rw-r--r--Build/source/libs/graphite-engine/debian/changelog174
-rw-r--r--Build/source/libs/graphite-engine/debian/compat1
-rw-r--r--Build/source/libs/graphite-engine/debian/control83
-rw-r--r--Build/source/libs/graphite-engine/debian/copyright259
-rw-r--r--Build/source/libs/graphite-engine/debian/libgraphite-dev.dirs4
-rw-r--r--Build/source/libs/graphite-engine/debian/libgraphite-dev.docs5
-rw-r--r--Build/source/libs/graphite-engine/debian/libgraphite-dev.install4
-rw-r--r--Build/source/libs/graphite-engine/debian/libgraphite3.dirs1
-rw-r--r--Build/source/libs/graphite-engine/debian/libgraphite3.install1
-rw-r--r--Build/source/libs/graphite-engine/debian/libgraphite3.shlibs1
-rwxr-xr-xBuild/source/libs/graphite-engine/debian/rules12
-rw-r--r--Build/source/libs/graphite-engine/doc/GTF_3_0.odtbin32225 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/doc/V2_Engine_Interface.odtbin25593 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/doc/V2_Segment_Interface.odtbin29845 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/doc/V2_TextSource_Interface.odtbin21265 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/doc/hungarian.txt126
-rw-r--r--Build/source/libs/graphite-engine/doc/policy.txt19
-rw-r--r--Build/source/libs/graphite-engine/graphite-engine.ac13
-rw-r--r--Build/source/libs/graphite-engine/include/Makefile.am29
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/BinTree.h71
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/FileFont.h260
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/Font.h416
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GenericResource.h86
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrAppData.h39
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrClient.h39
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrCommon.h145
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrConstants.h268
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrData.h226
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrDebug.h200
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrExt.h13
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrFeature.h203
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrMstypes.h40
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrPlatform.h189
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrResult.h171
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrStructs.h97
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GrWrappers.h13
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/GraphiteProcess.h45
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/HashMap.h328
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/IGrEngine.h36
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/IGrJustifier.h58
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/IGraphiteProcess.h44
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/ITextSource.h69
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/MemoryUsage.h156
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/Segment.h627
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/SegmentAux.h392
-rw-r--r--Build/source/libs/graphite-engine/include/graphite/SegmentPainter.h234
-rw-r--r--Build/source/libs/graphite-engine/installed-top.pc.in5
-rw-r--r--Build/source/libs/graphite-engine/license/LICENSING.txt43
-rw-r--r--Build/source/libs/graphite-engine/license/License_CPLv05.txt86
-rw-r--r--Build/source/libs/graphite-engine/license/License_GPLv2.txt342
-rw-r--r--Build/source/libs/graphite-engine/makefile.vc814
-rw-r--r--Build/source/libs/graphite-engine/silgraphite.pc.in7
-rw-r--r--Build/source/libs/graphite-engine/src/Makefile.am22
-rw-r--r--Build/source/libs/graphite-engine/src/Makefile.in767
-rw-r--r--Build/source/libs/graphite-engine/src/font/FileFont.cpp429
-rw-r--r--Build/source/libs/graphite-engine/src/font/Font.cpp950
-rw-r--r--Build/source/libs/graphite-engine/src/font/FontTableCache.h52
-rw-r--r--Build/source/libs/graphite-engine/src/font/Makefile.am7
-rw-r--r--Build/source/libs/graphite-engine/src/font/TtfTypes.h388
-rw-r--r--Build/source/libs/graphite-engine/src/font/TtfUtil.cpp1935
-rw-r--r--Build/source/libs/graphite-engine/src/font/TtfUtil.h147
-rw-r--r--Build/source/libs/graphite-engine/src/generic/BinTree.h71
-rw-r--r--Build/source/libs/graphite-engine/src/generic/BinTree_i.cpp225
-rw-r--r--Build/source/libs/graphite-engine/src/generic/Debug.cpp83
-rw-r--r--Build/source/libs/graphite-engine/src/generic/GenericResource.h86
-rw-r--r--Build/source/libs/graphite-engine/src/generic/HashMap.h328
-rw-r--r--Build/source/libs/graphite-engine/src/generic/HashMap_i.cpp561
-rw-r--r--Build/source/libs/graphite-engine/src/generic/Makefile.am8
-rw-r--r--Build/source/libs/graphite-engine/src/generic/Util.cpp261
-rw-r--r--Build/source/libs/graphite-engine/src/painter/Makefile.am5
-rw-r--r--Build/source/libs/graphite-engine/src/painter/SegmentPainter.cpp2986
-rw-r--r--Build/source/libs/graphite-engine/src/segment/FileInput.cpp266
-rw-r--r--Build/source/libs/graphite-engine/src/segment/FileInput.h104
-rw-r--r--Build/source/libs/graphite-engine/src/segment/FontCache.cpp308
-rw-r--r--Build/source/libs/graphite-engine/src/segment/FontCache.h105
-rw-r--r--Build/source/libs/graphite-engine/src/segment/FontFace.cpp598
-rw-r--r--Build/source/libs/graphite-engine/src/segment/FontFace.h246
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrCharStream.cpp652
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrCharStream.h183
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrClassTable.cpp382
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrClassTable.h188
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrEngine.cpp2030
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrEngine.h622
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrFSM.cpp526
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrFSM.h245
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrFeature.cpp321
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrFeatureValues.h71
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrGlyphTable.cpp650
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrGlyphTable.h429
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrPass.cpp1995
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrPass.h748
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrPassActionCode.cpp1492
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrPseudoMap.h48
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrSlotState.cpp1481
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrSlotState.h1287
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrSlotStream.cpp2368
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrSlotStream.h577
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrTableManager.cpp2691
-rw-r--r--Build/source/libs/graphite-engine/src/segment/GrTableManager.h583
-rw-r--r--Build/source/libs/graphite-engine/src/segment/Main.h181
-rw-r--r--Build/source/libs/graphite-engine/src/segment/Makefile.am26
-rw-r--r--Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp781
-rw-r--r--Build/source/libs/graphite-engine/src/segment/Platform.cpp113
-rw-r--r--Build/source/libs/graphite-engine/src/segment/Segment.cpp3547
-rw-r--r--Build/source/libs/graphite-engine/src/segment/SegmentAux.cpp256
-rw-r--r--Build/source/libs/graphite-engine/src/segment/TestFSM.cpp3416
-rw-r--r--Build/source/libs/graphite-engine/src/segment/TestPasses.cpp1005
-rw-r--r--Build/source/libs/graphite-engine/src/segment/TransductionLog.cpp2091
-rw-r--r--Build/source/libs/graphite-engine/src/segment/XmlTransductionLog.cpp1583
-rw-r--r--Build/source/libs/graphite-engine/src/segment/resource.h15
-rw-r--r--Build/source/libs/graphite-engine/test/Makefile.am2
-rw-r--r--Build/source/libs/graphite-engine/test/Makefile.in478
-rw-r--r--Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp310
-rw-r--r--Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.h146
-rw-r--r--Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.am14
-rw-r--r--Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.in447
-rw-r--r--Build/source/libs/graphite-engine/test/ProfileHarness/ProfileHarness.cpp476
-rw-r--r--Build/source/libs/graphite-engine/test/ProfileHarness/makefile.vc111
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.cpp566
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.h82
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/Makefile.am38
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/Makefile.in478
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/Makefile.vc121
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/RegressionTest.cpp748
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/RtTextSrc.h74
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.cpp93
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.h113
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/TestCase.cpp1974
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/TestCase.h245
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/arabicText.wpx137
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/bridgingStackingText.wpx158
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/burmeseText.wpx138
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/grtest_arabic.ttfbin304748 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/grtest_badCmap.ttfbin1013012 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/grtest_badVersion.ttfbin58160 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/grtest_burmese.ttfbin176660 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/grtest_roman.ttfbin1069592 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/grtest_taiviet.ttfbin115564 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/grtest_xline.ttfbin61132 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/main.h89
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/makedebug.bat2
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/readme.txt19
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/romanText.wpx206
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/stdafx.cpp8
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/stdafx.h12
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/taivietText.wpx162
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/xline.gdl146
-rw-r--r--Build/source/libs/graphite-engine/test/RegressionTest/xlineText.wpx132
-rw-r--r--Build/source/libs/graphite-engine/test/examples/burmese/Padauk.ttfbin232884 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/examples/burmese/bh1.utx4
-rwxr-xr-xBuild/source/libs/graphite-engine/test/examples/khmer/cloudsku2.txt29
-rwxr-xr-xBuild/source/libs/graphite-engine/test/examples/khmer/mond40gr6.ttfbin906948 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errBadGloc.ttfbin57988 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errBadGloc2.ttfbin57996 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errBadPass.ttfbin58132 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errBadStackMachine.ttfbin58216 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errBadSubs.ttfbin58132 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errBadVersion.ttfbin58160 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errGarbageFsm.ttfbin58160 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errGarbageGlat.ttfbin58144 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errGarbageSilf.ttfbin58144 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errSilfVerMismatch.ttfbin58252 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errSubsUnderflow.ttfbin58196 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/errTooManyClasses.ttfbin58200 -> 0 bytes
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/fonterrors.gdl43
-rw-r--r--Build/source/libs/graphite-engine/test/fonterrors/readme.txt43
-rw-r--r--Build/source/libs/graphite-engine/uninstalled-top.pc.in6
-rw-r--r--Build/source/libs/graphite-engine/withenable.ac4
-rw-r--r--Build/source/libs/libpng/ANNOUNCE61
-rw-r--r--Build/source/libs/libpng/CHANGES2173
-rw-r--r--Build/source/libs/libpng/INSTALL199
-rw-r--r--Build/source/libs/libpng/KNOWNBUG22
-rw-r--r--Build/source/libs/libpng/LICENSE109
-rw-r--r--Build/source/libs/libpng/Makefile.in55
-rw-r--r--Build/source/libs/libpng/README264
-rw-r--r--Build/source/libs/libpng/TODO24
-rw-r--r--Build/source/libs/libpng/Y2KINFO55
-rw-r--r--Build/source/libs/libpng/ac/libpng.ac3
-rw-r--r--Build/source/libs/libpng/ac/withenable.ac3
-rw-r--r--Build/source/libs/libpng/example.c814
-rw-r--r--Build/source/libs/libpng/libpng-1.2.29.txt2906
-rw-r--r--Build/source/libs/libpng/libpng.33680
-rw-r--r--Build/source/libs/libpng/libpng.ac54
-rw-r--r--Build/source/libs/libpng/libpng.txt2972
-rw-r--r--Build/source/libs/libpng/libpngpf.3274
-rw-r--r--Build/source/libs/libpng/png.574
-rw-r--r--Build/source/libs/libpng/png.c798
-rw-r--r--Build/source/libs/libpng/png.h3569
-rw-r--r--Build/source/libs/libpng/pngbar.jpgbin2498 -> 0 bytes
-rw-r--r--Build/source/libs/libpng/pngbar.pngbin2399 -> 0 bytes
-rw-r--r--Build/source/libs/libpng/pngconf.h1481
-rw-r--r--Build/source/libs/libpng/pngerror.c343
-rw-r--r--Build/source/libs/libpng/pnggccrd.c103
-rw-r--r--Build/source/libs/libpng/pngget.c901
-rw-r--r--Build/source/libs/libpng/pngmem.c608
-rw-r--r--Build/source/libs/libpng/pngnow.pngbin2069 -> 0 bytes
-rw-r--r--Build/source/libs/libpng/pngpread.c1598
-rw-r--r--Build/source/libs/libpng/pngread.c1479
-rw-r--r--Build/source/libs/libpng/pngrio.c167
-rw-r--r--Build/source/libs/libpng/pngrtran.c4292
-rw-r--r--Build/source/libs/libpng/pngrutil.c3183
-rw-r--r--Build/source/libs/libpng/pngset.c1268
-rw-r--r--Build/source/libs/libpng/pngtest.c1563
-rw-r--r--Build/source/libs/libpng/pngtest.pngbin8574 -> 0 bytes
-rw-r--r--Build/source/libs/libpng/pngtrans.c662
-rw-r--r--Build/source/libs/libpng/pngvcrd.c1
-rw-r--r--Build/source/libs/libpng/pngwio.c234
-rw-r--r--Build/source/libs/libpng/pngwrite.c1532
-rw-r--r--Build/source/libs/libpng/pngwtran.c572
-rw-r--r--Build/source/libs/libpng/pngwutil.c2802
-rw-r--r--Build/source/libs/libpng/withenable.ac11
-rw-r--r--Build/source/libs/libttf/arch/amigaos/Makefile.gcc69
-rw-r--r--Build/source/libs/libttf/arch/amigaos/freetype.c25
-rw-r--r--Build/source/libs/libttf/arch/amigaos/ft_conf.h220
-rw-r--r--Build/source/libs/libttf/arch/ansi/freetype.c32
-rw-r--r--Build/source/libs/libttf/arch/ansi/ft_conf.h227
-rw-r--r--Build/source/libs/libttf/arch/debugger/Makefile96
-rw-r--r--Build/source/libs/libttf/arch/debugger/freetype.c32
-rw-r--r--Build/source/libs/libttf/arch/debugger/ft_conf.h236
-rw-r--r--Build/source/libs/libttf/arch/mac/README47
-rw-r--r--Build/source/libs/libttf/arch/mac/freetype.c48
-rw-r--r--Build/source/libs/libttf/arch/mac/ft_conf.h211
-rw-r--r--Build/source/libs/libttf/arch/mac/ttmmap.c1069
-rw-r--r--Build/source/libs/libttf/arch/msdos/Makefile.BC132
-rw-r--r--Build/source/libs/libttf/arch/msdos/Makefile.MS117
-rw-r--r--Build/source/libs/libttf/arch/msdos/Makefile.TC86
-rw-r--r--Build/source/libs/libttf/arch/msdos/Makefile.VC117
-rw-r--r--Build/source/libs/libttf/arch/msdos/Makefile.dm84
-rw-r--r--Build/source/libs/libttf/arch/msdos/Makefile.gcc92
-rw-r--r--Build/source/libs/libttf/arch/msdos/Makefile.wat88
-rw-r--r--Build/source/libs/libttf/arch/msdos/depend.dos107
-rw-r--r--Build/source/libs/libttf/arch/msdos/freetype.c39
-rw-r--r--Build/source/libs/libttf/arch/msdos/ft_conf.h253
-rw-r--r--Build/source/libs/libttf/arch/msdos/hugefile.c84
-rw-r--r--Build/source/libs/libttf/arch/msdos/hugemem.c496
-rw-r--r--Build/source/libs/libttf/arch/msdos/makedep26
-rw-r--r--Build/source/libs/libttf/arch/os2/Makefile.dm84
-rw-r--r--Build/source/libs/libttf/arch/os2/Makefile.emx91
-rw-r--r--Build/source/libs/libttf/arch/os2/Makefile.icc73
-rw-r--r--Build/source/libs/libttf/arch/os2/Makefile.wat88
-rw-r--r--Build/source/libs/libttf/arch/os2/freetype.c32
-rw-r--r--Build/source/libs/libttf/arch/os2/ft_conf.h239
-rw-r--r--Build/source/libs/libttf/arch/os2/os2file.c1237
-rw-r--r--Build/source/libs/libttf/arch/unix/Makefile.in244
-rw-r--r--Build/source/libs/libttf/arch/unix/freetype.c27
-rw-r--r--Build/source/libs/libttf/arch/unix/ttmmap.c1027
-rw-r--r--Build/source/libs/libttf/arch/vms/README20
-rw-r--r--Build/source/libs/libttf/arch/vms/descrip.mms155
-rw-r--r--Build/source/libs/libttf/arch/vms/ft_conf.h215
-rw-r--r--Build/source/libs/libttf/arch/win16/Makefile.BC180
-rw-r--r--Build/source/libs/libttf/arch/win16/Makefile.MS106
-rw-r--r--Build/source/libs/libttf/arch/win16/Makefile.VC175
-rw-r--r--Build/source/libs/libttf/arch/win16/depend.win109
-rw-r--r--Build/source/libs/libttf/arch/win16/freetype.c39
-rw-r--r--Build/source/libs/libttf/arch/win16/ft_conf.h209
-rw-r--r--Build/source/libs/libttf/arch/win16/hugefile.c51
-rw-r--r--Build/source/libs/libttf/arch/win16/hugemem.c539
-rw-r--r--Build/source/libs/libttf/arch/win16/makedef24
-rw-r--r--Build/source/libs/libttf/arch/win16/makedep32
-rw-r--r--Build/source/libs/libttf/arch/win16/ttf.def130
-rw-r--r--Build/source/libs/libttf/arch/win32/Makefile.BC161
-rw-r--r--Build/source/libs/libttf/arch/win32/Makefile.CL165
-rw-r--r--Build/source/libs/libttf/arch/win32/Makefile.Min98
-rw-r--r--Build/source/libs/libttf/arch/win32/Makefile.VC195
-rw-r--r--Build/source/libs/libttf/arch/win32/Makefile.gcc96
-rw-r--r--Build/source/libs/libttf/arch/win32/depend.win103
-rw-r--r--Build/source/libs/libttf/arch/win32/freetype.c42
-rw-r--r--Build/source/libs/libttf/arch/win32/freetype.dsp208
-rw-r--r--Build/source/libs/libttf/arch/win32/freetype.dsw58
-rw-r--r--Build/source/libs/libttf/arch/win32/freetype.idebin35542 -> 0 bytes
-rw-r--r--Build/source/libs/libttf/arch/win32/freetype.mak353
-rw-r--r--Build/source/libs/libttf/arch/win32/freetype.mdpbin37376 -> 0 bytes
-rw-r--r--Build/source/libs/libttf/arch/win32/ft_conf.h210
-rw-r--r--Build/source/libs/libttf/arch/win32/makedef24
-rw-r--r--Build/source/libs/libttf/arch/win32/makedep29
-rw-r--r--Build/source/libs/libttf/arch/win32/ttf.def130
-rw-r--r--Build/source/libs/libttf/extend/ftxcmap.c348
-rw-r--r--Build/source/libs/libttf/extend/ftxcmap.h60
-rw-r--r--Build/source/libs/libttf/extend/ftxerr18.c241
-rw-r--r--Build/source/libs/libttf/extend/ftxerr18.h38
-rw-r--r--Build/source/libs/libttf/extend/ftxgasp.c70
-rw-r--r--Build/source/libs/libttf/extend/ftxgasp.h53
-rw-r--r--Build/source/libs/libttf/extend/ftxgdef.c1127
-rw-r--r--Build/source/libs/libttf/extend/ftxgdef.h216
-rw-r--r--Build/source/libs/libttf/extend/ftxgpos.c6169
-rw-r--r--Build/source/libs/libttf/extend/ftxgpos.h857
-rw-r--r--Build/source/libs/libttf/extend/ftxgsub.c4377
-rw-r--r--Build/source/libs/libttf/extend/ftxgsub.h592
-rw-r--r--Build/source/libs/libttf/extend/ftxkern.c603
-rw-r--r--Build/source/libs/libttf/extend/ftxkern.h181
-rw-r--r--Build/source/libs/libttf/extend/ftxopen.c1439
-rw-r--r--Build/source/libs/libttf/extend/ftxopen.h305
-rw-r--r--Build/source/libs/libttf/extend/ftxopenf.h143
-rw-r--r--Build/source/libs/libttf/extend/ftxpost.c523
-rw-r--r--Build/source/libs/libttf/extend/ftxpost.h107
-rw-r--r--Build/source/libs/libttf/extend/ftxsbit.c1391
-rw-r--r--Build/source/libs/libttf/extend/ftxsbit.h490
-rw-r--r--Build/source/libs/libttf/extend/ftxwidth.c186
-rw-r--r--Build/source/libs/libttf/extend/ftxwidth.h80
-rw-r--r--Build/source/libs/libttf/extend/readme.1st61
-rw-r--r--Build/source/libs/libttf/freetype.h1147
-rw-r--r--Build/source/libs/libttf/ft_conf.h210
-rw-r--r--Build/source/libs/libttf/fterrid.h161
-rw-r--r--Build/source/libs/libttf/ftnameid.h628
-rw-r--r--Build/source/libs/libttf/header.h49
-rw-r--r--Build/source/libs/libttf/ttapi.c2219
-rw-r--r--Build/source/libs/libttf/ttcache.c463
-rw-r--r--Build/source/libs/libttf/ttcache.h216
-rw-r--r--Build/source/libs/libttf/ttcalc.c403
-rw-r--r--Build/source/libs/libttf/ttcalc.h97
-rw-r--r--Build/source/libs/libttf/ttcmap.c503
-rw-r--r--Build/source/libs/libttf/ttcmap.h169
-rw-r--r--Build/source/libs/libttf/ttconfig.h298
-rw-r--r--Build/source/libs/libttf/ttdebug.c404
-rw-r--r--Build/source/libs/libttf/ttdebug.h170
-rw-r--r--Build/source/libs/libttf/ttengine.h115
-rw-r--r--Build/source/libs/libttf/ttextend.c212
-rw-r--r--Build/source/libs/libttf/ttextend.h168
-rw-r--r--Build/source/libs/libttf/ttfile.c1175
-rw-r--r--Build/source/libs/libttf/ttfile.h271
-rw-r--r--Build/source/libs/libttf/ttgload.c1351
-rw-r--r--Build/source/libs/libttf/ttgload.h51
-rw-r--r--Build/source/libs/libttf/ttinterp.c6654
-rw-r--r--Build/source/libs/libttf/ttinterp.h54
-rw-r--r--Build/source/libs/libttf/ttload.c1574
-rw-r--r--Build/source/libs/libttf/ttload.h217
-rw-r--r--Build/source/libs/libttf/ttmemory.c397
-rw-r--r--Build/source/libs/libttf/ttmemory.h125
-rw-r--r--Build/source/libs/libttf/ttmutex.c85
-rw-r--r--Build/source/libs/libttf/ttmutex.h59
-rw-r--r--Build/source/libs/libttf/ttobjs.c1495
-rw-r--r--Build/source/libs/libttf/ttobjs.h873
-rw-r--r--Build/source/libs/libttf/ttraster.c2729
-rw-r--r--Build/source/libs/libttf/ttraster.h127
-rw-r--r--Build/source/libs/libttf/tttables.h215
-rw-r--r--Build/source/libs/libttf/tttags.h61
-rw-r--r--Build/source/libs/libttf/tttypes.h150
-rw-r--r--Build/source/libs/t1lib/Makefile.am83
-rw-r--r--Build/source/libs/t1lib/Makefile.in1185
-rw-r--r--Build/source/libs/t1lib/README17
-rw-r--r--Build/source/libs/t1lib/aclocal.m4895
-rwxr-xr-xBuild/source/libs/t1lib/configure3304
-rw-r--r--Build/source/libs/t1lib/configure.ac136
-rw-r--r--Build/source/libs/t1lib/l047016t.pfa1356
-rw-r--r--Build/source/libs/t1lib/l047016t.xafm332
-rw-r--r--Build/source/libs/t1lib/lib/t1lib/sysconf.h.in87
-rw-r--r--Build/source/libs/t1lib/stamp-aclocal1
-rw-r--r--Build/source/libs/t1lib/stamp-configure1
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Changes905
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/README21
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchb.afm628
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchbi.afm645
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchr.afm538
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchri.afm547
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbx10.afm751
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbxti10.afm2341
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcr10.afm751
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcti10.afm2341
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/eufm10.afm114
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin1.enc283
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin2.enc265
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin9.enc259
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/PSLatin1.enc282
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dc.enc78
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dvips.enc75
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/README21
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchb.pfbbin0 -> 33799 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchbi.pfbbin0 -> 35229 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchr.pfbbin0 -> 34869 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchri.pfbbin0 -> 35118 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbx10.pfbbin0 -> 39707 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbxti10.pfbbin0 -> 49613 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcr10.pfbbin0 -> 40627 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcti10.pfbbin0 -> 47850 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/eufm10.pfbbin0 -> 23408 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/LGPL (renamed from Build/source/libs/graphite-engine/license/License_LGPLv21.txt)209
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/LICENSE (renamed from Build/source/libs/xpdf/COPYING)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/Makefile.in166
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/README.t1lib-5.1.2223
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/README.t1python18
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/README.win326
-rwxr-xr-xBuild/source/libs/t1lib/t1lib-5.1.2/ac-tools/config.guess (renamed from Build/source/libs/graphite-engine/config/config.guess)664
-rwxr-xr-xBuild/source/libs/t1lib/t1lib-5.1.2/ac-tools/config.sub (renamed from Build/source/libs/graphite-engine/config/config.sub)240
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/ice_find_athena.m4185
-rwxr-xr-xBuild/source/libs/t1lib/t1lib-5.1.2/ac-tools/install-sh322
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/ltmain.sh (renamed from Build/source/libs/graphite-engine/config/ltmain.sh)1216
-rwxr-xr-xBuild/source/libs/t1lib/t1lib-5.1.2/ac-tools/mkinstalldirs40
-rwxr-xr-xBuild/source/libs/t1lib/t1lib-5.1.2/configure (renamed from Build/source/libs/graphite-engine/configure)20386
-rwxr-xr-xBuild/source/libs/t1lib/t1lib-5.1.2/configure.com890
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/configure.in (renamed from Build/source/libs/t1lib/configure.in)180
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/Makefile.in108
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.eps97
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.pdf51
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.eps28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.pdfbin0 -> 1374 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.eps2251
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.pdfbin0 -> 73680 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.eps2251
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.pdfbin0 -> 73680 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.eps28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.pdfbin0 -> 1347 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.eps28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.pdfbin0 -> 1352 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/getstart.tex489
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/internals.tex679
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/intro.tex217
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.eps519
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.pdfbin0 -> 19487 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.eps28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.pdfbin0 -> 1329 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.eps28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.pdfbin0 -> 1329 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.eps6539
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.pdfbin0 -> 215201 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.eps6064
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.pdfbin0 -> 199522 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.eps5985
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.pdfbin0 -> 196910 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.eps6777
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.pdfbin0 -> 223040 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.eps6554
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.pdfbin0 -> 215693 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.eps255
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.fig60
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.pdfbin0 -> 7823 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.eps32
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.pdfbin0 -> 1349 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.eps28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.pdfbin0 -> 1343 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.eps28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.pdfbin0 -> 1344 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.eps745
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.fig349
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.pdfbin0 -> 44719 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath.eps327
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.eps850
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.pdfbin0 -> 2576 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.sk124
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.eps813
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.pdfbin0 -> 2445 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.eps708
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.pdfbin0 -> 1787 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.eps747
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.pdfbin0 -> 2344 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.eps799
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.pdfbin0 -> 1789 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.eps799
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.pdfbin0 -> 1778 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.pdf17329
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.tex98
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/type1afm.tex53
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/ut1lib.tex4083
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/xglyph.tex490
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/doc/xinterface.tex294
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/etc/README4
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/etc/charpath2.ps517
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/examples/.dependencies2
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/examples/FontDataBase10
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/examples/Makefile.in112
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/examples/subset.c236
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/examples/t1example1.c47
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/examples/t1lib.config6
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/Makefile.in186
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib.config8
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/.dependencies80
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/Makefile.in106
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/parseAFM.c (renamed from Build/source/libs/t1lib/parseAFM.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/parseAFM.h (renamed from Build/source/libs/t1lib/parseAFM.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/sysconf.h.in (renamed from Build/source/libs/t1lib/sysconf.h.in)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1aaset.c (renamed from Build/source/libs/t1lib/t1aaset.c)63
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1aaset.h (renamed from Build/source/libs/t1lib/t1aaset.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1afmtool.c (renamed from Build/source/libs/t1lib/t1afmtool.c)45
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1afmtool.h (renamed from Build/source/libs/t1lib/t1afmtool.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1base.c (renamed from Build/source/libs/t1lib/t1base.c)164
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1base.h (renamed from Build/source/libs/t1lib/t1base.h)6
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1delete.c (renamed from Build/source/libs/t1lib/t1delete.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1delete.h (renamed from Build/source/libs/t1lib/t1delete.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1enc.c (renamed from Build/source/libs/t1lib/t1enc.c)5
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1enc.h (renamed from Build/source/libs/t1lib/t1enc.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1env.c (renamed from Build/source/libs/t1lib/t1env.c)223
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1env.h (renamed from Build/source/libs/t1lib/t1env.h)8
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1extern.h (renamed from Build/source/libs/t1lib/t1extern.h)5
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1finfo.c (renamed from Build/source/libs/t1lib/t1finfo.c)5
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1finfo.h (renamed from Build/source/libs/t1lib/t1finfo.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1global.h (renamed from Build/source/libs/t1lib/t1global.h)3
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1lib.h.in (renamed from Build/source/libs/t1lib/t1lib.h)19
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1libx.h (renamed from Build/source/libs/t1lib/t1libx.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1load.c (renamed from Build/source/libs/t1lib/t1load.c)113
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1load.h (renamed from Build/source/libs/t1lib/t1load.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1misc.h (renamed from Build/source/libs/t1lib/t1misc.h)10
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1outline.c (renamed from Build/source/libs/t1lib/t1outline.c)6
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1outline.h (renamed from Build/source/libs/t1lib/t1outline.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1set.c (renamed from Build/source/libs/t1lib/t1set.c)14
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1set.h (renamed from Build/source/libs/t1lib/t1set.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1subset.c (renamed from Build/source/libs/t1lib/t1subset.c)230
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1subset.h (renamed from Build/source/libs/t1lib/t1subset.h)10
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1trans.c (renamed from Build/source/libs/t1lib/t1trans.c)5
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1trans.h (renamed from Build/source/libs/t1lib/t1trans.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1types.h (renamed from Build/source/libs/t1lib/t1types.h)11
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1x11.c (renamed from Build/source/libs/t1lib/t1x11.c)5
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1x11.h (renamed from Build/source/libs/t1lib/t1x11.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/.dependencies28
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/CHANGES (renamed from Build/source/libs/type1/CHANGES)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/Makefile.in106
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/README (renamed from Build/source/libs/type1/README)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/README.RMz (renamed from Build/source/libs/type1/README.RMz)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/Xstuff.h (renamed from Build/source/libs/type1/Xstuff.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/arith.c (renamed from Build/source/libs/type1/arith.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/arith.h (renamed from Build/source/libs/type1/arith.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/blues.h (renamed from Build/source/libs/type1/blues.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/bstring.c (renamed from Build/source/libs/type1/bstring.c)2
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/cluts.h (renamed from Build/source/libs/type1/cluts.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/curves.c (renamed from Build/source/libs/type1/curves.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/curves.h (renamed from Build/source/libs/type1/curves.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/digit.h (renamed from Build/source/libs/type1/digit.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/ffilest.h (renamed from Build/source/libs/type1/ffilest.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/font.h (renamed from Build/source/libs/type1/font.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfcn.c (renamed from Build/source/libs/type1/fontfcn.c)113
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfcn.h (renamed from Build/source/libs/type1/fontfcn.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfile.h (renamed from Build/source/libs/type1/fontfile.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontmisc.h (renamed from Build/source/libs/type1/fontmisc.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fonts.h (renamed from Build/source/libs/type1/fonts.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontstruct.h (renamed from Build/source/libs/type1/fontstruct.h)1
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontxlfd.h (renamed from Build/source/libs/type1/fontxlfd.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fsmasks.h (renamed from Build/source/libs/type1/fsmasks.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hdigit.h (renamed from Build/source/libs/type1/hdigit.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hints.c (renamed from Build/source/libs/type1/hints.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hints.h (renamed from Build/source/libs/type1/hints.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/lines.c (renamed from Build/source/libs/type1/lines.c)1
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/lines.h (renamed from Build/source/libs/type1/lines.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/objects.c (renamed from Build/source/libs/type1/objects.c)4
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/objects.h (renamed from Build/source/libs/type1/objects.h)2
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths.c (renamed from Build/source/libs/type1/paths.c)32
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths.h (renamed from Build/source/libs/type1/paths.h)74
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths_rmz.h (renamed from Build/source/libs/type1/paths_rmz.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/pictures.h (renamed from Build/source/libs/type1/pictures.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/regions.c (renamed from Build/source/libs/type1/regions.c)2
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/regions.h (renamed from Build/source/libs/type1/regions.h)2
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/scanfont.c (renamed from Build/source/libs/type1/scanfont.c)23
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces.c (renamed from Build/source/libs/type1/spaces.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces.h (renamed from Build/source/libs/type1/spaces.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces_rmz.h (renamed from Build/source/libs/type1/spaces_rmz.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/strokes.h (renamed from Build/source/libs/type1/strokes.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1chardump697
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1hdigit.h (renamed from Build/source/libs/type1/t1hdigit.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1imager.h (renamed from Build/source/libs/type1/t1imager.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1intf.h (renamed from Build/source/libs/type1/t1intf.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1io.c (renamed from Build/source/libs/type1/t1io.c)4
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1snap.c (renamed from Build/source/libs/type1/t1snap.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1stdio.h (renamed from Build/source/libs/type1/t1stdio.h)2
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1stub.c (renamed from Build/source/libs/type1/t1stub.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/token.c (renamed from Build/source/libs/type1/token.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/token.h (renamed from Build/source/libs/type1/token.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/tokst.h (renamed from Build/source/libs/type1/tokst.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/trig.h (renamed from Build/source/libs/type1/trig.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/type1.c (renamed from Build/source/libs/type1/type1.c)382
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/types.h (renamed from Build/source/libs/type1/types.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/util.c (renamed from Build/source/libs/type1/util.c)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/util.h (renamed from Build/source/libs/type1/util.h)0
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/README.RMz9
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/parseAFM.shar2059
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/type1afm/.dependencies1
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/type1afm/Makefile.in104
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/type1afm/type1afm.c140
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_DLL.dsp481
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_DLL.dsw (renamed from Build/source/libs/freetype2/builds/win32/visualc/freetype.dsw)58
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_Static.dsp458
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_Static.dsw (renamed from Build/source/libs/freetype2/builds/win32/visualce/freetype.dsw)58
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/win32/sysconf.h (renamed from Build/source/libs/t1lib/t1win32.h)51
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/win32/t1.def110
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/xglyph/.dependencies1
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/xglyph/FontDataBase10
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/xglyph/Makefile.in109
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/xglyph/bchr.pfbbin0 -> 34869 bytes
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/xglyph/t1lib.config6
-rw-r--r--Build/source/libs/t1lib/t1lib-5.1.2/xglyph/xglyph.c4736
-rw-r--r--Build/source/libs/t1lib/t1lib.ac99
-rw-r--r--Build/source/libs/t1lib/t1win32.c791
-rwxr-xr-xBuild/source/libs/t1lib/type1afm.test14
-rw-r--r--Build/source/libs/t1lib/withenable.ac10
-rw-r--r--Build/source/libs/type1/ChangeLog7
-rw-r--r--Build/source/libs/type1/Makefile.in24
-rw-r--r--Build/source/libs/type1/acconfig.h119
-rw-r--r--Build/source/libs/type1/aclocal.m415
-rw-r--r--Build/source/libs/type1/c-auto.in10
-rwxr-xr-xBuild/source/libs/type1/configure4744
-rw-r--r--Build/source/libs/type1/configure.in37
-rw-r--r--Build/source/libs/type1/stamp-aclocal1
-rw-r--r--Build/source/libs/type1/stamp-configure1
-rw-r--r--Build/source/libs/xpdf/ANNOUNCE34
-rw-r--r--Build/source/libs/xpdf/CHANGES1762
-rw-r--r--Build/source/libs/xpdf/ChangeLog10
-rw-r--r--Build/source/libs/xpdf/INSTALL248
-rw-r--r--Build/source/libs/xpdf/Makefile.in18
-rw-r--r--Build/source/libs/xpdf/README405
-rw-r--r--Build/source/libs/xpdf/ac/withenable.ac3
-rw-r--r--Build/source/libs/xpdf/acinclude.m4274
-rw-r--r--Build/source/libs/xpdf/aclocal.m415
-rw-r--r--Build/source/libs/xpdf/aconf-dj.h77
-rw-r--r--Build/source/libs/xpdf/aconf-win32.h120
-rw-r--r--Build/source/libs/xpdf/aconf.h.in115
-rw-r--r--Build/source/libs/xpdf/aconf2.h38
-rwxr-xr-xBuild/source/libs/xpdf/configure5576
-rw-r--r--Build/source/libs/xpdf/configure.in94
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiBase.cc156
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiBase.h57
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiEncodings.cc994
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiEncodings.h36
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiTrueType.cc2027
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiTrueType.h174
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiType1.cc252
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiType1.h59
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiType1C.cc2603
-rw-r--r--Build/source/libs/xpdf/fofi/FoFiType1C.h233
-rw-r--r--Build/source/libs/xpdf/fofi/Makefile.dep0
-rw-r--r--Build/source/libs/xpdf/fofi/Makefile.in91
-rw-r--r--Build/source/libs/xpdf/fofi/depend.mk32
-rw-r--r--Build/source/libs/xpdf/goo/FixedPoint.cc118
-rw-r--r--Build/source/libs/xpdf/goo/FixedPoint.h155
-rw-r--r--Build/source/libs/xpdf/goo/GHash.cc380
-rw-r--r--Build/source/libs/xpdf/goo/GHash.h78
-rw-r--r--Build/source/libs/xpdf/goo/GList.cc97
-rw-r--r--Build/source/libs/xpdf/goo/GList.h96
-rw-r--r--Build/source/libs/xpdf/goo/GMutex.h49
-rw-r--r--Build/source/libs/xpdf/goo/GString.cc759
-rw-r--r--Build/source/libs/xpdf/goo/GString.h136
-rw-r--r--Build/source/libs/xpdf/goo/Makefile.dep0
-rw-r--r--Build/source/libs/xpdf/goo/Makefile.in143
-rw-r--r--Build/source/libs/xpdf/goo/depend.mk31
-rw-r--r--Build/source/libs/xpdf/goo/gfile.cc769
-rw-r--r--Build/source/libs/xpdf/goo/gfile.h138
-rw-r--r--Build/source/libs/xpdf/goo/gmem.cc264
-rw-r--r--Build/source/libs/xpdf/goo/gmem.h79
-rw-r--r--Build/source/libs/xpdf/goo/gmempp.cc32
-rw-r--r--Build/source/libs/xpdf/goo/gtypes.h29
-rw-r--r--Build/source/libs/xpdf/goo/parseargs.c190
-rw-r--r--Build/source/libs/xpdf/goo/parseargs.h71
-rw-r--r--Build/source/libs/xpdf/libxpdf.ac13
-rw-r--r--Build/source/libs/xpdf/stamp-aclocal1
-rw-r--r--Build/source/libs/xpdf/stamp-configure1
-rw-r--r--Build/source/libs/xpdf/xpdf/Array.cc73
-rw-r--r--Build/source/libs/xpdf/xpdf/Array.h58
-rw-r--r--Build/source/libs/xpdf/xpdf/BuiltinFont.cc65
-rw-r--r--Build/source/libs/xpdf/xpdf/BuiltinFont.h57
-rw-r--r--Build/source/libs/xpdf/xpdf/BuiltinFontTables.cc4284
-rw-r--r--Build/source/libs/xpdf/xpdf/BuiltinFontTables.h23
-rw-r--r--Build/source/libs/xpdf/xpdf/CMap.cc408
-rw-r--r--Build/source/libs/xpdf/xpdf/CMap.h102
-rw-r--r--Build/source/libs/xpdf/xpdf/Catalog.cc374
-rw-r--r--Build/source/libs/xpdf/xpdf/Catalog.h97
-rw-r--r--Build/source/libs/xpdf/xpdf/CharCodeToUnicode.cc540
-rw-r--r--Build/source/libs/xpdf/xpdf/CharCodeToUnicode.h117
-rw-r--r--Build/source/libs/xpdf/xpdf/CharTypes.h24
-rw-r--r--Build/source/libs/xpdf/xpdf/Decrypt.cc776
-rw-r--r--Build/source/libs/xpdf/xpdf/Decrypt.h131
-rw-r--r--Build/source/libs/xpdf/xpdf/Dict.cc95
-rw-r--r--Build/source/libs/xpdf/xpdf/Dict.h77
-rw-r--r--Build/source/libs/xpdf/xpdf/Error.cc38
-rw-r--r--Build/source/libs/xpdf/xpdf/Error.h23
-rw-r--r--Build/source/libs/xpdf/xpdf/ErrorCodes.h36
-rw-r--r--Build/source/libs/xpdf/xpdf/FontEncodingTables.cc1824
-rw-r--r--Build/source/libs/xpdf/xpdf/FontEncodingTables.h20
-rw-r--r--Build/source/libs/xpdf/xpdf/Function.cc1573
-rw-r--r--Build/source/libs/xpdf/xpdf/Function.h229
-rw-r--r--Build/source/libs/xpdf/xpdf/GfxFont.cc1568
-rw-r--r--Build/source/libs/xpdf/xpdf/GfxFont.h320
-rw-r--r--Build/source/libs/xpdf/xpdf/GfxState.cc4137
-rw-r--r--Build/source/libs/xpdf/xpdf/GfxState.h1244
-rw-r--r--Build/source/libs/xpdf/xpdf/GlobalParams.cc3090
-rw-r--r--Build/source/libs/xpdf/xpdf/GlobalParams.h514
-rw-r--r--Build/source/libs/xpdf/xpdf/JArithmeticDecoder.cc322
-rw-r--r--Build/source/libs/xpdf/xpdf/JArithmeticDecoder.h109
-rw-r--r--Build/source/libs/xpdf/xpdf/JBIG2Stream.cc3413
-rw-r--r--Build/source/libs/xpdf/xpdf/JBIG2Stream.h145
-rw-r--r--Build/source/libs/xpdf/xpdf/JPXStream.cc3144
-rw-r--r--Build/source/libs/xpdf/xpdf/JPXStream.h351
-rw-r--r--Build/source/libs/xpdf/xpdf/Lexer.cc485
-rw-r--r--Build/source/libs/xpdf/xpdf/Lexer.h80
-rw-r--r--Build/source/libs/xpdf/xpdf/Link.cc784
-rw-r--r--Build/source/libs/xpdf/xpdf/Link.h369
-rw-r--r--Build/source/libs/xpdf/xpdf/Makefile.dep0
-rw-r--r--Build/source/libs/xpdf/xpdf/Makefile.in127
-rw-r--r--Build/source/libs/xpdf/xpdf/NameToCharCode.cc116
-rw-r--r--Build/source/libs/xpdf/xpdf/NameToCharCode.h42
-rw-r--r--Build/source/libs/xpdf/xpdf/NameToUnicodeTable.h1097
-rw-r--r--Build/source/libs/xpdf/xpdf/Object.cc231
-rw-r--r--Build/source/libs/xpdf/xpdf/Object.h303
-rw-r--r--Build/source/libs/xpdf/xpdf/Outline.cc151
-rw-r--r--Build/source/libs/xpdf/xpdf/Outline.h76
-rw-r--r--Build/source/libs/xpdf/xpdf/OutputDev.cc131
-rw-r--r--Build/source/libs/xpdf/xpdf/OutputDev.h250
-rw-r--r--Build/source/libs/xpdf/xpdf/PDFDoc.cc402
-rw-r--r--Build/source/libs/xpdf/xpdf/PDFDoc.h185
-rw-r--r--Build/source/libs/xpdf/xpdf/PDFDocEncoding.cc44
-rw-r--r--Build/source/libs/xpdf/xpdf/PDFDocEncoding.h16
-rw-r--r--Build/source/libs/xpdf/xpdf/PSTokenizer.cc135
-rw-r--r--Build/source/libs/xpdf/xpdf/PSTokenizer.h41
-rw-r--r--Build/source/libs/xpdf/xpdf/Page.cc479
-rw-r--r--Build/source/libs/xpdf/xpdf/Page.h225
-rw-r--r--Build/source/libs/xpdf/xpdf/Parser.cc227
-rw-r--r--Build/source/libs/xpdf/xpdf/Parser.h59
-rw-r--r--Build/source/libs/xpdf/xpdf/SecurityHandler.cc390
-rw-r--r--Build/source/libs/xpdf/xpdf/SecurityHandler.h160
-rw-r--r--Build/source/libs/xpdf/xpdf/Stream-CCITT.h459
-rw-r--r--Build/source/libs/xpdf/xpdf/Stream.cc4686
-rw-r--r--Build/source/libs/xpdf/xpdf/Stream.h913
-rw-r--r--Build/source/libs/xpdf/xpdf/UTF8.h56
-rw-r--r--Build/source/libs/xpdf/xpdf/UnicodeMap.cc293
-rw-r--r--Build/source/libs/xpdf/xpdf/UnicodeMap.h123
-rw-r--r--Build/source/libs/xpdf/xpdf/UnicodeMapTables.h361
-rw-r--r--Build/source/libs/xpdf/xpdf/XRef.cc925
-rw-r--r--Build/source/libs/xpdf/xpdf/XRef.h202
-rw-r--r--Build/source/libs/xpdf/xpdf/config.h164
-rw-r--r--Build/source/libs/xpdf/xpdf/depend.mk416
1378 files changed, 110364 insertions, 530220 deletions
diff --git a/Build/source/libs/freetype2/ChangeLog b/Build/source/libs/freetype2/ChangeLog
deleted file mode 100644
index b507fa84aa7..00000000000
--- a/Build/source/libs/freetype2/ChangeLog
+++ /dev/null
@@ -1,3528 +0,0 @@
-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. (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 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_LZ'. 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 Wermer 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 <Carbon/Carbon.h>
- and <ApplicationServices/ApplicationServices.h> instead of
- all-in-one header file <CoreServices/CoreServices.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/otvcmmn.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/otmath.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_SERVIVE_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_metric_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/ftobjcs.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 on 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/ftbasic.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/ftbimap.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/ttobs.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/bfd/bfddrivr.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/cffdriver.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/cffdrvr.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_ofset'.
- * 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 (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_Set_LcdFilter): 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: Optmize 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 inadvertedly 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.nongnu.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_LoaderRect): 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.nongnu.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/ftrfrk.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)
- [FT_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_ConvEexecDecode):
- 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, 2007, 2008 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.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/Build/source/libs/freetype2/ChangeLog.20 b/Build/source/libs/freetype2/ChangeLog.20
deleted file mode 100644
index 8fcc5e70ab4..00000000000
--- a/Build/source/libs/freetype2/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/pfc/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/psobjc.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_Round_Fix, 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/sfobcs.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/trutype/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/detekt.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_Encoding 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/detekt.mk, builds/win32/detekt.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.ogr>
-
- * 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, 2001, 2002, 2007 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.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/Build/source/libs/freetype2/ChangeLog.21 b/Build/source/libs/freetype2/ChangeLog.21
deleted file mode 100644
index 3a1bcf0c11d..00000000000
--- a/Build/source/libs/freetype2/ChangeLog.21
+++ /dev/null
@@ -1,9439 +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_CACE_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/ttcmac.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_Sizes): 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_metricsc_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/psobjc.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/ftchapter.s: 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_extrama, 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_FORK]: 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 specifing 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/truetyep/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
- T1Read_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_COMPOMENT): 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_GlyphMetrics): 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/ftbasic.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@gmx.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' und 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_string_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_fpopen.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 sythesized 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_GlyphStrokeBorder): 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: Inlude
- 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_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/ftclru.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/cif/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), srf/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: Dont' 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 strucures
- 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/prfload.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_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_Size): 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_BBIX_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_record): 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/cif/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_fil_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_stong_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: Udpated.
-
- * 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 (FT_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, pdc_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/ftcsbit.c (ftc_sbit_node_load): Fixed a small bug that
- caused problems with embedded bitmaps.
-
- * src/otlayout/otlayout.h, src/otlyaout/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 retrievel 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/pfrobks.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 seg fault 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/ftcsbit.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,SeteModeFunc}):
- 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_locd_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_GlyphLoad): 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_INCOREMENTAL]: 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.
- (t1_cid_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_Global_Funcs -> cff_size_get_global_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/prf/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 hapenning 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_farse): 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/Jamefile: 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 (pcf_get_accell): 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/cffdriver.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 backwards 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, stc/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/psglobals.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_Global_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; /* backwards-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_Decode_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, 2003, 2004, 2005, 2007 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.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/Build/source/libs/freetype2/ChangeLog.22 b/Build/source/libs/freetype2/ChangeLog.22
deleted file mode 100644
index c042f216274..00000000000
--- a/Build/source/libs/freetype2/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_MemTable_Rec) [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_PtrDiff 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_SybGlyph_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/ftmanag.c (FTC_Manager_Compress,
- FTC_Manager_RegisterCache, FTC_Manager_FlushN):
- s/FT_EXPORT/FT_LOCAL/.
- * src/cache/ftmanag.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_MruListFind, 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 backwards
- 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_OldImage_Desc, 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/sfobjc.s: Inckude 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_fiags 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/ttags.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/sfobjc.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 susuzki 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 functionaliy 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/ttags.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_UNKWOWN.
- 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/gxmort1.c (GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE),
- src/gxvalid/gxmort2.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
- backwards 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, 2006, 2007, 2008 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used, modified,
-and distributed under the terms of the FreeType project license,
-LICENSE.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/Build/source/libs/freetype2/Jamfile b/Build/source/libs/freetype2/Jamfile
deleted file mode 100644
index a345d242ee4..00000000000
--- a/Build/source/libs/freetype2/Jamfile
+++ /dev/null
@@ -1,203 +0,0 @@
-# FreeType 2 top Jamfile.
-#
-# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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
- cache # cache sub-system
- cff # CFF/CEF font driver
- cid # PostScript CID-keyed font driver
- gzip # support for gzip-compressed files
- lzw # support for LZW-compressed files
- 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
- smooth # anti-aliased rasterizer
- sfnt # SFNT-based format support routines
- 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 `freetype2/include' in the current include path in order to
-# compile any part of FreeType 2.
-#: updating documentation for upcoming release
-
-HDRS += $(FT2_INCLUDE) ;
-
-
-# We need to #define FT2_BUILD_LIBRARY so that our sources find the
-# internal headers
-#
-DEFINES += FT2_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 file <freetype/config/ftheader.h> is used to define macros that are
-# later used in #include statements. It needs to be parsed in order to
-# record these definitions.
-#
-HDRMACRO [ FT2_SubDir include freetype config ftheader.h ] ;
-HDRMACRO [ FT2_SubDir include freetype internal internal.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 contain 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 headers = [ Glob $(2) : *.h ] ;
-
- 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 include/freetype/cache ;
-
-# 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.3.7 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h
-}
-
-RefDoc refdoc ;
-
-
-# end of top Jamfile
diff --git a/Build/source/libs/freetype2/Jamrules b/Build/source/libs/freetype2/Jamrules
deleted file mode 100644
index d8d1c7e617b..00000000000
--- a/Build/source/libs/freetype2/Jamrules
+++ /dev/null
@@ -1,71 +0,0 @@
-# FreeType 2 JamRules.
-#
-# Copyright 2001, 2002, 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.
-
-
-# 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/Build/source/libs/freetype2/Makefile b/Build/source/libs/freetype2/Makefile
deleted file mode 100644
index c1fa16cee54..00000000000
--- a/Build/source/libs/freetype2/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# FreeType 2 build system -- top-level Makefile
-#
-
-
-# Copyright 1996-2000, 2002, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/README b/Build/source/libs/freetype2/README
deleted file mode 100644
index 5071f88b302..00000000000
--- a/Build/source/libs/freetype2/README
+++ /dev/null
@@ -1,64 +0,0 @@
- Special notes to Unix users
- ===========================
-
- Please read the file `docs/UPGRADE.UNIX'. It contains important
- information regarding the installation of FreeType on Unix systems,
- especially GNU based operating systems like GNU/Linux.
-
- FreeType 2's library is called `libfreetype', FreeType 1's library
- is called `libttf'. They are *not* compatible!
-
-
- FreeType 2.3.7
- ==============
-
- Please read the docs/CHANGES file, it contains IMPORTANT
- INFORMATION.
-
- Read the files `docs/INSTALL' for installation instructions.
-
- The FreeType 2 API reference is located in `docs/reference'; use the
- file `ft2-doc.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.3.7.tar.bz2
- freetype-doc-2.3.7.tar.gz
- ftdoc237.zip
-
-
- Bugs
- ====
-
- Please 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'.
-
- Alternatively, you may submit a bug report at
-
- https://savannah.nongnu.org/bugs/?group=freetype
-
-
- Enjoy!
-
-
- The FreeType Team
-
-----------------------------------------------------------------------
-
-Copyright 2006, 2007, 2008 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/README.CVS b/Build/source/libs/freetype2/README.CVS
deleted file mode 100644
index 2764ae95f5b..00000000000
--- a/Build/source/libs/freetype2/README.CVS
+++ /dev/null
@@ -1,50 +0,0 @@
-The CVS 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.
-
-A very common problem is that this script complains that the `aclocal'
-program doesn't accept a `--force' option:
-
- generating `configure.ac'
- running `aclocal -I . --force'
- aclocal: unrecognized option -- `--force'
- Try `aclocal --help' for more information.
- error while running `aclocal -I . --force'
-
-This means that your version of the automake package is too old.
-Please update it before trying to build FreeType.
-
-
-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).
-
-
-----------------------------------------------------------------------
-
-Copyright 2005, 2006, 2007, 2008 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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.CVS ---
diff --git a/Build/source/libs/freetype2/ac/freetype2.ac b/Build/source/libs/freetype2/ac/freetype2.ac
deleted file mode 100644
index c52d0078f42..00000000000
--- a/Build/source/libs/freetype2/ac/freetype2.ac
+++ /dev/null
@@ -1,3 +0,0 @@
-## libs/freetype2/ac/freetype2.ac
-## define required functions and headers from system freetype2
-KPSE_CHECK_LIB([freetype2], [FT_Init_FreeType], [ft2build.h])
diff --git a/Build/source/libs/freetype2/ac/withenable.ac b/Build/source/libs/freetype2/ac/withenable.ac
deleted file mode 100644
index 97d78f86a29..00000000000
--- a/Build/source/libs/freetype2/ac/withenable.ac
+++ /dev/null
@@ -1,3 +0,0 @@
-## libs/freetype2/ac/withenable.ac
-## configure options and TL libraries required for freetype2
-KPSE_WITH_LIB([freetype2], [zlib], , , [both -IDIR and -IDIR/freetype2])
diff --git a/Build/source/libs/freetype2/autogen.sh b/Build/source/libs/freetype2/autogen.sh
deleted file mode 100755
index 87f30a1caa7..00000000000
--- a/Build/source/libs/freetype2/autogen.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-
-# Copyright 2005, 2006, 2007, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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
-}
-
-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
-
-# 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
-
-# On MacOS X, the GNU libtool is named `glibtool'.
-HOSTOS=`uname`
-LIBTOOLIZE=libtoolize
-if test "$HOSTOS"x = Darwinx; then
- LIBTOOLIZE=glibtoolize
-fi
-
-run aclocal -I . --force
-run $LIBTOOLIZE --force --copy --install
-run autoconf --force
-
-chmod +x mkinstalldirs
-chmod +x install-sh
-
-cd ../..
-
-chmod +x ./configure
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/amiga/README b/Build/source/libs/freetype2/builds/amiga/README
deleted file mode 100644
index 2b8f8e87dbb..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/README
+++ /dev/null
@@ -1,110 +0,0 @@
-
-README for the builds/amiga subdirectory.
-
-Copyright 2005 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/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/Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftconfig.h b/Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftconfig.h
deleted file mode 100644
index c2c2ac8dbb6..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftconfig.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* Amiga-specific configuration file (specification only). */
-/* */
-/* Copyright 2005, 2006, 2007 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/Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftmodule.h b/Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftmodule.h
deleted file mode 100644
index c8a5bee2249..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/include/freetype/config/ftmodule.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmodule.h */
-/* */
-/* Amiga-specific FreeType module selection. */
-/* */
-/* Copyright 2005 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(autofit_module_class)
-#endif
-
-#ifdef FT_USE_TT
-FT_USE_MODULE(tt_driver_class)
-#endif
-
-#ifdef FT_USE_T1
-FT_USE_MODULE(t1_driver_class)
-#endif
-
-#ifdef FT_USE_CFF
-FT_USE_MODULE(cff_driver_class)
-#endif
-
-#ifdef FT_USE_T1CID
-FT_USE_MODULE(t1cid_driver_class)
-#endif
-
-#ifdef FT_USE_PFR
-FT_USE_MODULE(pfr_driver_class)
-#endif
-
-#ifdef FT_USE_T42
-FT_USE_MODULE(t42_driver_class)
-#endif
-
-#ifdef FT_USE_WINFNT
-FT_USE_MODULE(winfnt_driver_class)
-#endif
-
-#ifdef FT_USE_PCF
-FT_USE_MODULE(pcf_driver_class)
-#endif
-
-#ifdef FT_USE_PSAUX
-FT_USE_MODULE(psaux_module_class)
-#endif
-
-#ifdef FT_USE_PSNAMES
-FT_USE_MODULE(psnames_module_class)
-#endif
-
-#ifdef FT_USE_PSHINT
-FT_USE_MODULE(pshinter_module_class)
-#endif
-
-#ifdef FT_USE_RASTER
-FT_USE_MODULE(ft_raster1_renderer_class)
-#endif
-
-#ifdef FT_USE_SFNT
-FT_USE_MODULE(sfnt_module_class)
-#endif
-
-#ifdef FT_USE_SMOOTH
-FT_USE_MODULE(ft_smooth_renderer_class)
-FT_USE_MODULE(ft_smooth_lcd_renderer_class)
-FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
-#endif
-
-#ifdef FT_USE_OTV
-FT_USE_MODULE(otv_module_class)
-#endif
-
-#ifdef FT_USE_BDF
-FT_USE_MODULE(bdf_driver_class)
-#endif
-
-#ifdef FT_USE_GXV
-FT_USE_MODULE(gxv_module_class)
-#endif
-
-/*
-Local Variables:
-coding: latin-1
-End:
-*/
diff --git a/Build/source/libs/freetype2/builds/amiga/makefile b/Build/source/libs/freetype2/builds/amiga/makefile
deleted file mode 100644
index 24e8545d945..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/makefile
+++ /dev/null
@@ -1,284 +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, 2006, 2007 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 $@ $<
-
-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 $@ $<
-
-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 $@ $<
-
-ftxf86.ppc.o: $(FTSRC)/base/ftxf86.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 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 \
- ftgasp.ppc.o ftglyph.ppc.o ftgxvalid.ppc.o ftlcdfil.ppc.o \
- ftmm.ppc.o ftotval.ppc.o ftpfr.ppc.o ftstroke.ppc.o \
- ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o ftxf86.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 lzw.ppc.o
- $(AR) $@ $(BASEPPC) $(AFITPPC) $(GXVPPC) $(OTVPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) gzip.ppc.o lzw.ppc.o
- -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
-
-#Local Variables:
-#coding: latin-1
-#End:
diff --git a/Build/source/libs/freetype2/builds/amiga/makefile.os4 b/Build/source/libs/freetype2/builds/amiga/makefile.os4
deleted file mode 100644
index 6853c9f5987..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/makefile.os4
+++ /dev/null
@@ -1,287 +0,0 @@
-#
-# Makefile for FreeType2 link library using gcc 4.0.3 from the
-# AmigaOS4 SDK
-#
-
-
-# Copyright 2005, 2006, 2007 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
-
-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
-
-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
-
-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
-
-ftxf86.ppc.o: FT:src/base/ftxf86.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftxf86.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 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 \
- ftgasp.ppc.o ftglyph.ppc.o ftgxval.ppc.o ftlcdfil.ppc.o \
- ftmm.ppc.o ftotval.ppc.o ftpfr.ppc.o ftstroke.ppc.o \
- ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o ftxf86.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/Build/source/libs/freetype2/builds/amiga/smakefile b/Build/source/libs/freetype2/builds/amiga/smakefile
deleted file mode 100644
index c9209f7cfc5..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/smakefile
+++ /dev/null
@@ -1,291 +0,0 @@
-#
-# Makefile for FreeType2 link library using Amiga SAS/C 6.58
-#
-
-
-# Copyright 2005,2006, 2007 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 ftgasp.o ftglyph.o \
- ftgxval.o ftlcdfil.o ftmm.o ftotval.o ftpfr.o ftstroke.o \
- ftsynth.o fttype1.o ftwinfnt.o ftxf86.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
- oml $@ r $(OBJBASE) $(OBJAFIT) $(OBJOTV) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) lzw.o gzip.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=$@ $<
-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=$@ $<
-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=$@ $<
-ftxf86.o: $(CORE)base/ftxf86.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 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/Build/source/libs/freetype2/builds/amiga/src/base/ftdebug.c b/Build/source/libs/freetype2/builds/amiga/src/base/ftdebug.c
deleted file mode 100644
index 5284e697aec..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/src/base/ftdebug.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2005 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 );
-/* vprintf( fmt, ap ); */
- 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 );
-/* vprintf( fmt, ap ); */
- KVPrintF( fmt, ap );
- va_end( ap );
-
-/* exit( EXIT_FAILURE ); */
- }
-
-#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 == ':' && 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/Build/source/libs/freetype2/builds/amiga/src/base/ftsystem.c b/Build/source/libs/freetype2/builds/amiga/src/base/ftsystem.c
deleted file mode 100644
index 016f1e29e73..00000000000
--- a/Build/source/libs/freetype2/builds/amiga/src/base/ftsystem.c
+++ /dev/null
@@ -1,522 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* Amiga-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2005, 2006, 2007 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_Err_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_Err_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_Err_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_Err_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_Err_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;
-
- 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/Build/source/libs/freetype2/builds/ansi/ansi-def.mk b/Build/source/libs/freetype2/builds/ansi/ansi-def.mk
deleted file mode 100644
index 2c585729515..00000000000
--- a/Build/source/libs/freetype2/builds/ansi/ansi-def.mk
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# FreeType 2 configuration rules for a `normal' ANSI system
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/ansi/ansi.mk b/Build/source/libs/freetype2/builds/ansi/ansi.mk
deleted file mode 100644
index 32b3bac3e3a..00000000000
--- a/Build/source/libs/freetype2/builds/ansi/ansi.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# FreeType 2 configuration rules for a `normal' pseudo ANSI compiler/system
-#
-
-
-# Copyright 1996-2000 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/atari/ATARI.H b/Build/source/libs/freetype2/builds/atari/ATARI.H
deleted file mode 100644
index bb6913803cb..00000000000
--- a/Build/source/libs/freetype2/builds/atari/ATARI.H
+++ /dev/null
@@ -1,16 +0,0 @@
-#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/Build/source/libs/freetype2/builds/atari/FNames.SIC b/Build/source/libs/freetype2/builds/atari/FNames.SIC
deleted file mode 100644
index f3657179d91..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/builds/atari/FREETYPE.PRJ b/Build/source/libs/freetype2/builds/atari/FREETYPE.PRJ
deleted file mode 100644
index 4776a5bc690..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/builds/atari/README.TXT b/Build/source/libs/freetype2/builds/atari/README.TXT
deleted file mode 100644
index 04eec63519b..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/builds/beos/beos-def.mk b/Build/source/libs/freetype2/builds/beos/beos-def.mk
deleted file mode 100644
index 4371a30aa3c..00000000000
--- a/Build/source/libs/freetype2/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-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/beos/beos.mk b/Build/source/libs/freetype2/builds/beos/beos.mk
deleted file mode 100644
index b5c8bdabe32..00000000000
--- a/Build/source/libs/freetype2/builds/beos/beos.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# FreeType 2 configuration rules for a BeOS system
-#
-
-# Copyright 1996-2000, 2002, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/beos/detect.mk b/Build/source/libs/freetype2/builds/beos/detect.mk
deleted file mode 100644
index 24a0878862a..00000000000
--- a/Build/source/libs/freetype2/builds/beos/detect.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# FreeType 2 configuration file to detect an BeOS host platform.
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/ansi-cc.mk b/Build/source/libs/freetype2/builds/compiler/ansi-cc.mk
deleted file mode 100644
index 3b668e20102..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/ansi-cc.mk
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# FreeType 2 generic pseudo ANSI compiler
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/bcc-dev.mk b/Build/source/libs/freetype2/builds/compiler/bcc-dev.mk
deleted file mode 100644
index ba1a88a302f..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/bcc-dev.mk
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# FreeType 2 Borland C++-specific with NO OPTIMIZATIONS + DEBUGGING
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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
-
-
-# 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 $(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST:%=+%))
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/compiler/bcc.mk b/Build/source/libs/freetype2/builds/compiler/bcc.mk
deleted file mode 100644
index 509cb72483c..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/bcc.mk
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# FreeType 2 Borland C++-specific rules
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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
-
-
-# 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 $(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST:%=+%))
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/compiler/emx.mk b/Build/source/libs/freetype2/builds/compiler/emx.mk
deleted file mode 100644
index c237005cb1e..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/emx.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# FreeType 2 emx-specific definitions
-#
-
-
-# Copyright 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/gcc-dev.mk b/Build/source/libs/freetype2/builds/compiler/gcc-dev.mk
deleted file mode 100644
index c63e1262ebe..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/gcc-dev.mk
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# FreeType 2 gcc-specific with NO OPTIMIZATIONS + DEBUGGING
-#
-
-
-# Copyright 1996-2000, 2003, 2004, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/gcc.mk b/Build/source/libs/freetype2/builds/compiler/gcc.mk
deleted file mode 100644
index e941443a027..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/gcc.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# FreeType 2 gcc-specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 -O6 -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/Build/source/libs/freetype2/builds/compiler/intelc.mk b/Build/source/libs/freetype2/builds/compiler/intelc.mk
deleted file mode 100644
index 413ce5bacc7..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/intelc.mk
+++ /dev/null
@@ -1,85 +0,0 @@
-#
-# FreeType 2 Intel C/C++ definitions (VC++ compatibility mode)
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/unix-lcc.mk b/Build/source/libs/freetype2/builds/compiler/unix-lcc.mk
deleted file mode 100644
index d79f50846cb..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/unix-lcc.mk
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# FreeType 2 Unix LCC specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/visualage.mk b/Build/source/libs/freetype2/builds/compiler/visualage.mk
deleted file mode 100644
index c109659bf73..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/visualage.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 Visual Age C++ specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/visualc.mk b/Build/source/libs/freetype2/builds/compiler/visualc.mk
deleted file mode 100644
index 2e19ef86a31..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/visualc.mk
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-# FreeType 2 Visual C++ definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2005, 2006, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/watcom.mk b/Build/source/libs/freetype2/builds/compiler/watcom.mk
deleted file mode 100644
index 4db1e7fecea..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/watcom.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# FreeType 2 Watcom-specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/compiler/win-lcc.mk b/Build/source/libs/freetype2/builds/compiler/win-lcc.mk
deleted file mode 100644
index 5d02d82462e..00000000000
--- a/Build/source/libs/freetype2/builds/compiler/win-lcc.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# FreeType 2 Win32-LCC specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/detect.mk b/Build/source/libs/freetype2/builds/detect.mk
deleted file mode 100644
index 987ae51c41f..00000000000
--- a/Build/source/libs/freetype2/builds/detect.mk
+++ /dev/null
@@ -1,154 +0,0 @@
-#
-# FreeType 2 host platform detection rules
-#
-
-
-# Copyright 1996-2000, 2001, 2002, 2003, 2006, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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
-# `freetype/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 (the latter needs python)."
- @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 (the latter needs python).
- @type builds$(SEP)newline
- @$(COPY) $(subst /,$(SEP),$(CONFIG_RULES) $(CONFIG_MK)) > nul
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/dos/detect.mk b/Build/source/libs/freetype2/builds/dos/detect.mk
deleted file mode 100644
index 700a1226885..00000000000
--- a/Build/source/libs/freetype2/builds/dos/detect.mk
+++ /dev/null
@@ -1,142 +0,0 @@
-#
-# FreeType 2 configuration file to detect a DOS host platform.
-#
-
-
-# Copyright 1996-2000, 2003, 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/detect.mk for explanations about the logic.
- #
- ifeq ($(is_dos),)
- ifdef winbootdir
-#ifneq ($(OS),Windows_NT)
- # If win32 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/win32/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/Build/source/libs/freetype2/builds/dos/dos-def.mk b/Build/source/libs/freetype2/builds/dos/dos-def.mk
deleted file mode 100644
index 950f581a00b..00000000000
--- a/Build/source/libs/freetype2/builds/dos/dos-def.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# FreeType 2 DOS specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/dos/dos-emx.mk b/Build/source/libs/freetype2/builds/dos/dos-emx.mk
deleted file mode 100644
index 6ea8f6d872f..00000000000
--- a/Build/source/libs/freetype2/builds/dos/dos-emx.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# FreeType 2 configuration rules for the EMX gcc compiler
-#
-
-
-# Copyright 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.
-
-
-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/Build/source/libs/freetype2/builds/dos/dos-gcc.mk b/Build/source/libs/freetype2/builds/dos/dos-gcc.mk
deleted file mode 100644
index e14255c1f27..00000000000
--- a/Build/source/libs/freetype2/builds/dos/dos-gcc.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# FreeType 2 configuration rules for the DJGPP compiler
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-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/Build/source/libs/freetype2/builds/dos/dos-wat.mk b/Build/source/libs/freetype2/builds/dos/dos-wat.mk
deleted file mode 100644
index c763b163cd9..00000000000
--- a/Build/source/libs/freetype2/builds/dos/dos-wat.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# FreeType 2 configuration rules for the Watcom C/C++ compiler
-#
-
-
-# Copyright 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.
-
-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/Build/source/libs/freetype2/builds/exports.mk b/Build/source/libs/freetype2/builds/exports.mk
deleted file mode 100644
index 5452b35715d..00000000000
--- a/Build/source/libs/freetype2/builds/exports.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 exports sub-Makefile
-#
-
-
-# Copyright 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 := $(wildcard $(PUBLIC_DIR)/*.h)
-
- # 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 := $(TOP_DIR)/src/tools/apinames.c
- APINAMES_EXE := $(OBJ_DIR)/apinames$(E_BUILD)
-
- $(APINAMES_EXE): $(APINAMES_SRC)
- $(CCexe) $(TE)$@ $<
-
- .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/Build/source/libs/freetype2/builds/freetype.mk b/Build/source/libs/freetype2/builds/freetype.mk
deleted file mode 100644
index 877bda27cfe..00000000000
--- a/Build/source/libs/freetype2/builds/freetype.mk
+++ /dev/null
@@ -1,361 +0,0 @@
-#
-# FreeType 2 library sub-Makefile
-#
-
-
-# Copyright 1996-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 `freetype/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%)
-
-
-# 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
-
-FT_CFLAGS = $(CPPFLAGS) \
- $(INCLUDE_FLAGS) \
- $(CFLAGS) \
- $DFT2_BUILD_LIBRARY \
- $DFT_CONFIG_MODULES_H="<ftmodule.h>" \
- $(FTOPTION_FLAG)
-FT_CC = $(CC) $(FT_CFLAGS)
-FT_COMPILE = $(CC) $(ANSIFLAGS) $(FT_CFLAGS)
-
-
-# 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'. $(BASE_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)
-BASE_H := $(wildcard $(INTERNAL_DIR)/*.h) \
- $(wildcard $(SERVICES_DIR)/*.h)
-CONFIG_H := $(wildcard $(CONFIG_DIR)/*.h) \
- $(wildcard $(BUILD_DIR)/freetype/config/*.h) \
- $(FTMODULE_H) \
- $(FTOPTION_H)
-DEVEL_H := $(wildcard $(TOP_DIR)/devel/*.h)
-
-FREETYPE_H := $(PUBLIC_H) $(BASE_H) $(CONFIG_H) $(DEVEL_H)
-
-
-# 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)
-
-dll: $(PROJECT_LIBRARY) exported_symbols
-
-.c.$O:
- $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-ifneq ($(findstring refdoc,$(MAKECMDGOALS)),)
- # poor man's `sed' emulation with make's built-in string functions
- work := $(strip $(shell $(CAT) $(PUBLIC_DIR)/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))
-
- version := $(major).$(minor).$(patch)
-endif
-
-# We write-protect the docmaker directory to suppress generation
-# of .pyc files.
-#
-refdoc:
- -chmod -w $(SRC_DIR)/tools/docmaker
- python $(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
- -chmod +w $(SRC_DIR)/tools/docmaker
-
-
-.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/Build/source/libs/freetype2/builds/link_dos.mk b/Build/source/libs/freetype2/builds/link_dos.mk
deleted file mode 100644
index c37ac7e52c1..00000000000
--- a/Build/source/libs/freetype2/builds/link_dos.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Link instructions for Dos-like systems (Dos, Win32, OS/2)
-#
-
-
-# Copyright 1996-2000 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/link_std.mk b/Build/source/libs/freetype2/builds/link_std.mk
deleted file mode 100644
index 0bd2163bb19..00000000000
--- a/Build/source/libs/freetype2/builds/link_std.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Link instructions for standard systems
-#
-
-
-# Copyright 1996-2000 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/mac/FreeType.m68k_cfm.make.txt b/Build/source/libs/freetype2/builds/mac/FreeType.m68k_cfm.make.txt
deleted file mode 100644
index 78d65d249e1..00000000000
--- a/Build/source/libs/freetype2/builds/mac/FreeType.m68k_cfm.make.txt
+++ /dev/null
@@ -1,202 +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 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
- :builds:mac:ftmac.c \xB6
- :src:autofit:autofit.c \xB6
- :src:base: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: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:base:ftxf86.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: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}ftmac.c.o" \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}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}ftxf86.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}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 ###
-
-"{ObjDir}ftmac.c.o" \xC4\xC4 :builds:mac:ftmac.c
- {C} :builds:mac:ftmac.c -o "{ObjDir}ftmac.c.o" {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}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}ftmac.c.o" \xC4 :builds:mac:ftmac.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}ftxf86.c.o" \xC4 :src:base:ftxf86.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}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/Build/source/libs/freetype2/builds/mac/FreeType.m68k_far.make.txt b/Build/source/libs/freetype2/builds/mac/FreeType.m68k_far.make.txt
deleted file mode 100644
index c23dead87b8..00000000000
--- a/Build/source/libs/freetype2/builds/mac/FreeType.m68k_far.make.txt
+++ /dev/null
@@ -1,201 +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 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
- :builds:mac:ftmac.c \xB6
- :src:autofit:autofit.c \xB6
- :src:base: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: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:base:ftxf86.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: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}ftglyph.c.o" \xB6
- "{ObjDir}ftgxval.c.o" \xB6
- "{ObjDir}ftinit.c.o" \xB6
- "{ObjDir}ftmac.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}ftxf86.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}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 ###
-
-"{ObjDir}ftmac.c.o" \xC4\xC4 :builds:mac:ftmac.c
- {C} :builds:mac:ftmac.c -o "{ObjDir}ftmac.c.o" {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}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}ftmac.c.o" \xC4 :src:base:ftmac.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}ftxf86.c.o" \xC4 :src:base:ftxf86.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}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/Build/source/libs/freetype2/builds/mac/FreeType.ppc_carbon.make.txt b/Build/source/libs/freetype2/builds/mac/FreeType.ppc_carbon.make.txt
deleted file mode 100644
index f8e2d66f6a4..00000000000
--- a/Build/source/libs/freetype2/builds/mac/FreeType.ppc_carbon.make.txt
+++ /dev/null
@@ -1,202 +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 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
- :builds:mac:ftmac.c \xB6
- :src:autofit:autofit.c \xB6
- :src:base: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: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:base:ftxf86.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: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}ftglyph.c.x" \xB6
- "{ObjDir}ftgxval.c.x" \xB6
- "{ObjDir}ftinit.c.x" \xB6
- "{ObjDir}ftmac.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}ftxf86.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}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 ###
-
-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}ftmac.c.x" \xC4 :builds:mac:ftmac.c
-"{ObjDir}autofit.c.x" \xC4 :src:autofit:autofit.c
-"{ObjDir}ftbase.c.x" \xC4 :src:base: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}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}ftxf86.c.x" \xC4 :src:base:ftxf86.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}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/Build/source/libs/freetype2/builds/mac/FreeType.ppc_classic.make.txt b/Build/source/libs/freetype2/builds/mac/FreeType.ppc_classic.make.txt
deleted file mode 100644
index 5c743fd0856..00000000000
--- a/Build/source/libs/freetype2/builds/mac/FreeType.ppc_classic.make.txt
+++ /dev/null
@@ -1,203 +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 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
- :builds:mac:ftmac.c \xB6
- :src:autofit:autofit.c \xB6
- :src:base: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: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:base:ftxf86.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: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}ftglyph.c.x" \xB6
- "{ObjDir}ftgxval.c.x" \xB6
- "{ObjDir}ftinit.c.x" \xB6
- "{ObjDir}ftmac.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}ftxf86.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}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 ###
-
-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}ftmac.c.x" \xC4 :builds:mac:ftmac.c
-"{ObjDir}autofit.c.x" \xC4 :src:autofit:autofit.c
-"{ObjDir}ftbase.c.x" \xC4 :src:base: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}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}ftxf86.c.x" \xC4 :src:base:ftxf86.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}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/Build/source/libs/freetype2/builds/mac/README b/Build/source/libs/freetype2/builds/mac/README
deleted file mode 100644
index edd57b1da73..00000000000
--- a/Build/source/libs/freetype2/builds/mac/README
+++ /dev/null
@@ -1,403 +0,0 @@
-This folder contains
-
- * Makefile skeltons for Apple MPW (Macintosh's Programmers Workshop)
-
- * Python script to generate MPW makefile from skelton
-
- * 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
- skeltons. 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 CodeWarriror
- ----------------------------
-
- XML project file is generated and tested by
- CodeWarriror 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 skeltons
- ------------------------------------------------
-
- Here are 4 skeltons 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_classic.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 skeltons 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 skeltons 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 skelton 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: 2007-Feb-01, by Alexei Podtelezhnikov.
-
-Currently maintained by
- suzuki toshiya, <mpsuzuki@hiroshima-u.ac.jp>
-Originally prepared by
- Leonard Rosenthol, <leonardr@lazerware.com>
- Just van Rossum, <just@letterror.com>
-
-This directory is now actively maintained as part of the FreeType Project.
diff --git a/Build/source/libs/freetype2/builds/mac/ascii2mpw.py b/Build/source/libs/freetype2/builds/mac/ascii2mpw.py
deleted file mode 100755
index ad32b219772..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/builds/mac/ftlib.prj.xml b/Build/source/libs/freetype2/builds/mac/ftlib.prj.xml
deleted file mode 100644
index cbbc45ee55c..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/builds/mac/ftmac.c b/Build/source/libs/freetype2/builds/mac/ftmac.c
deleted file mode 100644
index 6e91a8f2922..00000000000
--- a/Build/source/libs/freetype2/builds/mac/ftmac.c
+++ /dev/null
@@ -1,1600 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmac.c */
-/* */
-/* Mac FOND support. Written by just@letterror.com. */
-/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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_INTERNAL_STREAM_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
-
- /* Some portable types are unavailable on legacy SDKs */
-#ifndef MAC_OS_X_VERSION_10_5
-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
-
-
-#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_Err_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;
-
-
- *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_Err_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_Err_Unknown_File_Format;
-
- if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
- return FT_Err_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_Err_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 ( FT_Err_Ok != err )
- return err;
-
- if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
- return FT_Err_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_Err_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 ( FT_Err_Ok != err )
- return err;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
- pathSpec, NULL ) )
- return FT_Err_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_Err_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_Err_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;
- FamRec* fond;
- short i, face, face_all;
-
-
- fond = (FamRec*)fond_data;
- 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_Err_Invalid_Argument;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, &par_ref ) )
- return FT_Err_Invalid_Argument;
-
- if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) )
- return FT_Err_Invalid_Argument;
-
- if ( ft_strlen( (char *)path_lwfn ) + 1 + base_lwfn[0] > path_size )
- return FT_Err_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_Err_Cannot_Open_Resource;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, NULL ) )
- return FT_Err_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_Err_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_Err_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_Err_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 ( FT_Err_Ok == 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( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
- 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( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
- 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;
- }
-
-
- /* Finalizer for a memory stream; gets called by FT_Done_Face().
- It frees the memory it uses. */
- static void
- memory_stream_close( FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
-
-
- FT_FREE( stream->base );
-
- stream->size = 0;
- stream->base = 0;
- stream->close = 0;
- }
-
-
- /* Create a new memory stream from a buffer and a size. */
- 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;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !base )
- return FT_Err_Invalid_Argument;
-
- *astream = 0;
- 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. */
- static FT_Error
- open_face_from_buffer( FT_Library library,
- FT_Byte* base,
- FT_ULong size,
- FT_Long face_index,
- char* driver_name,
- FT_Face* aface )
- {
- FT_Open_Args args;
- FT_Error error;
- FT_Stream stream;
- 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 );
- }
-
- /* At this point, 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 = 0;
-
- error = FT_Open_Face( library, &args, face_index, aface );
- if ( error == FT_Err_Ok )
- (*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
- else
- FT_Stream_Free( stream, 0 );
-
- 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_Err_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;
-
-
- sfnt = GetResource( FT_MAKE_TAG( 's', 'f', 'n', 't' ), sfnt_id );
- if ( sfnt == NULL )
- return FT_Err_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 && sfnt_data[0] == 'O' &&
- sfnt_data[1] == 'T' &&
- sfnt_data[2] == 'T' &&
- sfnt_data[3] == 'O';
-
- return open_face_from_buffer( library,
- sfnt_data,
- sfnt_size,
- face_index,
- is_cff ? "cff" : "truetype",
- aface );
- }
-
-
- /* 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, num_faces_in_fond;
-
-
- if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
- return FT_Err_Cannot_Open_Resource;
-
- UseResFile( res_ref );
- if ( ResError() )
- return FT_Err_Cannot_Open_Resource;
-
- num_faces_in_res = 0;
- for ( res_index = 1; ; ++res_index )
- {
- fond = Get1IndResource( FT_MAKE_TAG( 'F', 'O', 'N', 'D' ),
- 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 ( FT_Err_Ok == error && NULL != 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;
-
-
- GetResInfo( fond, &fond_id, &fond_type, fond_name );
- if ( ResError() != noErr ||
- fond_type != FT_MAKE_TAG( 'F', 'O', 'N', 'D' ) )
- return FT_Err_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 ( FT_Err_Ok == 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 ( FT_Err_Ok == 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 && FT_Err_Ok != 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 == FT_MAKE_TAG( 'L', 'W', 'F', 'N' ) )
- 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 == 0 )
- 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_Err_Invalid_Argument;
-
- error = FT_Err_Ok;
- *aface = NULL;
-
- /* try resourcefork based font: LWFN, FFIL */
- error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
- face_index, aface );
- if ( error != 0 || *aface != NULL )
- 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_Err_Unimplemented_Feature;
-
-#else
-
- FT_Error error;
- FT_Open_Args args;
- OSErr err;
- UInt8 pathname[PATH_MAX];
-
-
- if ( !ref )
- return FT_Err_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 != 0 || *aface != NULL )
- 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_Err_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_Err_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 != 0 || *aface != NULL )
- 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_Err_Unimplemented_Feature;
-
-#endif /* HAVE_FSREF, HAVE_FSSPEC */
-
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/builds/modules.mk b/Build/source/libs/freetype2/builds/modules.mk
deleted file mode 100644
index c4a882cbdb5..00000000000
--- a/Build/source/libs/freetype2/builds/modules.mk
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# FreeType 2 modules sub-Makefile
-#
-
-
-# Copyright 1996-2000, 2003, 2006, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 win32 win16 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/Build/source/libs/freetype2/builds/newline b/Build/source/libs/freetype2/builds/newline
deleted file mode 100644
index 8b137891791..00000000000
--- a/Build/source/libs/freetype2/builds/newline
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/Build/source/libs/freetype2/builds/os2/detect.mk b/Build/source/libs/freetype2/builds/os2/detect.mk
deleted file mode 100644
index 47a40a2f857..00000000000
--- a/Build/source/libs/freetype2/builds/os2/detect.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 configuration file to detect an OS/2 host platform.
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/os2/os2-def.mk b/Build/source/libs/freetype2/builds/os2/os2-def.mk
deleted file mode 100644
index 01cda9285af..00000000000
--- a/Build/source/libs/freetype2/builds/os2/os2-def.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# FreeType 2 OS/2 specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/os2/os2-dev.mk b/Build/source/libs/freetype2/builds/os2/os2-dev.mk
deleted file mode 100644
index 83da8dea33e..00000000000
--- a/Build/source/libs/freetype2/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-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/os2/os2-gcc.mk b/Build/source/libs/freetype2/builds/os2/os2-gcc.mk
deleted file mode 100644
index 446073e4f56..00000000000
--- a/Build/source/libs/freetype2/builds/os2/os2-gcc.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# FreeType 2 configuration rules for the OS/2 + gcc
-#
-
-
-# Copyright 1996-2000 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/symbian/bld.inf b/Build/source/libs/freetype2/builds/symbian/bld.inf
deleted file mode 100644
index e34b03cf675..00000000000
--- a/Build/source/libs/freetype2/builds/symbian/bld.inf
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// FreeType 2 project for the symbian platform
-//
-
-// Copyright 2008 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used, modified,
-// and distributed under the terms of the FreeType project license,
-// LICENSE.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/ft2build.h
-../../include/freetype/config/ftconfig.h freetype/config/ftconfig.h
-../../include/freetype/config/ftheader.h freetype/config/ftheader.h
-../../include/freetype/config/ftmodule.h freetype/config/ftmodule.h
-../../include/freetype/config/ftoption.h freetype/config/ftoption.h
-../../include/freetype/config/ftstdlib.h freetype/config/ftstdlib.h
-../../include/freetype/freetype.h freetype/freetype.h
-../../include/freetype/ftbbox.h freetype/ftbbox.h
-../../include/freetype/ftbdf.h freetype/ftbdf.h
-../../include/freetype/ftbitmap.h freetype/ftbitmap.h
-../../include/freetype/ftcache.h freetype/ftcache.h
-../../include/freetype/ftchapters.h freetype/ftchapters.h
-../../include/freetype/fterrdef.h freetype/fterrdef.h
-../../include/freetype/fterrors.h freetype/fterrors.h
-../../include/freetype/ftgasp.h freetype/ftgasp.h
-../../include/freetype/ftglyph.h freetype/ftglyph.h
-../../include/freetype/ftgxval.h freetype/ftgxval.h
-../../include/freetype/ftgzip.h freetype/ftgzip.h
-../../include/freetype/ftimage.h freetype/ftimage.h
-../../include/freetype/ftincrem.h freetype/ftincrem.h
-../../include/freetype/ftlcdfil.h freetype/ftlcdfil.h
-../../include/freetype/ftlist.h freetype/ftlist.h
-../../include/freetype/ftlzw.h freetype/ftlzw.h
-../../include/freetype/ftmac.h freetype/ftmac.h
-../../include/freetype/ftmm.h freetype/ftmm.h
-../../include/freetype/ftmodapi.h freetype/ftmodapi.h
-../../include/freetype/ftmoderr.h freetype/ftmoderr.h
-../../include/freetype/ftotval.h freetype/ftotval.h
-../../include/freetype/ftoutln.h freetype/ftoutln.h
-../../include/freetype/ftpfr.h freetype/ftpfr.h
-../../include/freetype/ftrender.h freetype/ftrender.h
-../../include/freetype/ftsizes.h freetype/ftsizes.h
-../../include/freetype/ftsnames.h freetype/ftsnames.h
-../../include/freetype/ftstroke.h freetype/ftstroke.h
-../../include/freetype/ftsynth.h freetype/ftsynth.h
-../../include/freetype/ftsystem.h freetype/ftsystem.h
-../../include/freetype/fttrigon.h freetype/fttrigon.h
-../../include/freetype/fttypes.h freetype/fttypes.h
-../../include/freetype/ftwinfnt.h freetype/ftwinfnt.h
-../../include/freetype/ftxf86.h freetype/ftxf86.h
-../../include/freetype/t1tables.h freetype/t1tables.h
-../../include/freetype/ttnameid.h freetype/ttnameid.h
-../../include/freetype/tttables.h freetype/tttables.h
-../../include/freetype/tttags.h freetype/tttags.h
-../../include/freetype/ttunpat.h freetype/ttunpat.h
-
diff --git a/Build/source/libs/freetype2/builds/symbian/freetype.mmp b/Build/source/libs/freetype2/builds/symbian/freetype.mmp
deleted file mode 100644
index 259ac872034..00000000000
--- a/Build/source/libs/freetype2/builds/symbian/freetype.mmp
+++ /dev/null
@@ -1,136 +0,0 @@
-//
-// FreeType 2 makefile for the symbian platform
-//
-
-// Copyright 2008 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used, modified,
-// and distributed under the terms of the FreeType project license,
-// LICENSE.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 ftgasp.c
-source ftglyph.c
-source ftinit.c
-source ftmm.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\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\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/Build/source/libs/freetype2/builds/toplevel.mk b/Build/source/libs/freetype2/builds/toplevel.mk
deleted file mode 100644
index 57b5ca56cde..00000000000
--- a/Build/source/libs/freetype2/builds/toplevel.mk
+++ /dev/null
@@ -1,245 +0,0 @@
-#
-# FreeType build system -- top-level sub-Makefile
-#
-
-
-# Copyright 1996-2000, 2001, 2003, 2006, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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.
-
-
-.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 win32' 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 /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
-
-
-# This target builds the tarballs.
-#
-# Not to be run by a normal user -- there are no attempts to make it
-# generic.
-
-# we check for `dist', not `distclean'
-ifneq ($(findstring distx,$(MAKECMDGOALS)x),)
- FT_H := include/freetype/freetype.h
-
- major := $(shell sed -n 's/.*FREETYPE_MAJOR.*\([0-9]\+\)/\1/p' < $(FT_H))
- minor := $(shell sed -n 's/.*FREETYPE_MINOR.*\([0-9]\+\)/\1/p' < $(FT_H))
- patch := $(shell sed -n 's/.*FREETYPE_PATCH.*\([0-9]\+\)/\1/p' < $(FT_H))
-
- version := $(major).$(minor).$(patch)
- winversion := $(major)$(minor)$(patch)
-endif
-
-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 '*/CVS' -prune \
- -o -type f \
- -o -print` ; do \
- mkdir -p tmp/$$d ; \
- done ;
-
- currdir=`pwd` ; \
- for f in `find . -wholename '*/CVS' -prune \
- -o -name .cvsignore \
- -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 cfh - freetype-$(version) \
- | gzip -c > freetype-$(version).tar.gz
- tar cfh - freetype-$(version) \
- | bzip2 -c > freetype-$(version).tar.bz2
-
- @# Use CR/LF for zip files.
- zip -lr ft$(winversion).zip freetype-$(version)
-
- rm -fr freetype-$(version)
-
-
-# The locations of the latest `config.guess' and `config.sub' versions (from
-# GNU `config' CVS), 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/Build/source/libs/freetype2/builds/unix/aclocal.m4 b/Build/source/libs/freetype2/builds/unix/aclocal.m4
deleted file mode 100644
index f68c66cf628..00000000000
--- a/Build/source/libs/freetype2/builds/unix/aclocal.m4
+++ /dev/null
@@ -1,7912 +0,0 @@
-# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gordon Matzigkeit, 1996
-#
-# This file is part of GNU Libtool.
-#
-# GNU Libtool 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.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
- [m4_default([$3],
- [m4_fatal([Libtool version $1 or higher is required],
- 63)])],
- [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
- *\ * | *\ *)
- AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
- case $cc_temp in
- compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
- distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- _LT_PATH_MAGIC
- fi
- ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
- [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
- [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
- [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
- [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
- [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME. Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
- [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
- [m4_ifval([$1], [$1], [$2])])
- lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
- m4_ifval([$4],
- [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
- lt_dict_add_subkey([lt_decl_dict], [$2],
- [tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
- [0], [m4_fatal([$0: too few arguments: $#])],
- [1], [m4_fatal([$0: too few arguments: $#: $1])],
- [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
- [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
- [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
- m4_quote(m4_if([$2], [],
- m4_quote(lt_decl_tag_varnames),
- m4_quote(m4_shift($@)))),
- m4_split(m4_normalize(m4_quote(_LT_TAGS))))])
-m4_define([_lt_decl_varnames_tagged], [lt_combine([$1], [$2], [_], $3)])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
- m4_if([$2], [],
- m4_quote(lt_decl_varnames),
- m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
- lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'. VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly. In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-# <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
- [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-# # Some comment about what VAR is for.
-# visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
- [description])))[]dnl
-m4_pushdef([_libtool_name],
- m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
- [0], [_libtool_name=[$]$1],
- [1], [_libtool_name=$lt_[]$1],
- [2], [_libtool_name=$lt_[]$1],
- [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
- m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
- [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
- [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'. Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
- dnl If the libtool generation code has been placed in $CONFIG_LT,
- dnl instead of duplicating it all over again into config.status,
- dnl then we will have config.status run $CONFIG_LT later, so it
- dnl needs to know what name is stored there:
- [AC_CONFIG_COMMANDS([libtool],
- [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
- dnl If the libtool generation code is destined for config.status,
- dnl expand the accumulated commands and init code now:
- [AC_CONFIG_COMMANDS([libtool],
- [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
- case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
- *[[\\\\\\\`\\"\\\$]]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
- case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
- *[[\\\\\\\`\\"\\\$]]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
- lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
- ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
- echo
- AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
- -h, --help print this help, then exit
- -V, --version print version number, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
-
-Report bugs to <bug-libtool@gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
- case $[1] in
- --version | --v* | -V )
- echo "$lt_cl_version"; exit 0 ;;
- --help | --h* | -h )
- echo "$lt_cl_help"; exit 0 ;;
- --debug | --d* | -d )
- debug=: ;;
- --quiet | --q* | --silent | --s* | -q )
- lt_cl_silent=: ;;
-
- -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
- *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
- esac
- shift
-done
-
-if $lt_cl_silent; then
- exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure. Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
- lt_cl_success=:
- test "$silent" = yes &&
- lt_config_lt_args="$lt_config_lt_args --quiet"
- exec AS_MESSAGE_LOG_FD>/dev/null
- $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
- exec AS_MESSAGE_LOG_FD>>config.log
- $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars. Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
- m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
- m4_if(_LT_TAG, [C], [
- # See if we are running on zsh, and set the options which allow our
- # commands through without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
-
- cfgfile="${ofile}T"
- trap "$RM \"$cfgfile\"; exit 1" 1 2 15
- $RM "$cfgfile"
-
- cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
- case $host_os in
- aix3*)
- cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-_LT_EOF
- ;;
- esac
-
- _LT_PROG_LTMAIN
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- _LT_PROG_XSI_SHELLFNS
-
- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
- PACKAGE='$PACKAGE'
- VERSION='$VERSION'
- TIMESTAMP='$TIMESTAMP'
- RM='$RM'
- ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-# autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
- [C], [_LT_LANG(C)],
- [C++], [_LT_LANG(CXX)],
- [Java], [_LT_LANG(GCJ)],
- [Fortran 77], [_LT_LANG(F77)],
- [Fortran], [_LT_LANG(FC)],
- [Windows Resource], [_LT_LANG(RC)],
- [m4_ifdef([_LT_LANG_]$1[_CONFIG],
- [_LT_LANG($1)],
- [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
- [LT_SUPPORTED_TAG([$1])dnl
- m4_append([_LT_TAGS], [$1 ])dnl
- m4_define([_LT_LANG_]$1[_enabled], [])dnl
- _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [LT_LANG(CXX)],
- [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
- [LT_LANG(F77)],
- [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
- [LT_LANG(FC)],
- [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
- [LT_LANG(GCJ)],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
- [LT_LANG(GCJ)],
- [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
- [LT_LANG(GCJ)],
- [m4_ifdef([AC_PROG_GCJ],
- [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
- m4_ifdef([A][M_PROG_GCJ],
- [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
- m4_ifdef([LT_PROG_GCJ],
- [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
- [LT_LANG(RC)],
- [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
- case $host_os in
- rhapsody* | darwin*)
- AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
- AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
- AC_CHECK_TOOL([LIPO], [lipo], [:])
- AC_CHECK_TOOL([OTOOL], [otool], [:])
- AC_CHECK_TOOL([OTOOL64], [otool64], [:])
- _LT_DECL([], [DSYMUTIL], [1],
- [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
- _LT_DECL([], [NMEDIT], [1],
- [Tool to change global to local symbols on Mac OS X])
- _LT_DECL([], [LIPO], [1],
- [Tool to manipulate fat objects and archives on Mac OS X])
- _LT_DECL([], [OTOOL], [1],
- [ldd/readelf like tool for Mach-O binaries on Mac OS X])
- _LT_DECL([], [OTOOL64], [1],
- [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
- AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
- [lt_cv_apple_cc_single_mod=no
- if test -z "${LT_MULTI_MODULE}"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- rm -rf libconftest.dylib*
- echo "int foo(void){return 1;}" > conftest.c
- echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
- _lt_result=$?
- if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
- lt_cv_apple_cc_single_mod=yes
- else
- cat conftest.err >&AS_MESSAGE_LOG_FD
- fi
- rm -rf libconftest.dylib*
- rm -f conftest.*
- fi])
- AC_CACHE_CHECK([for -exported_symbols_list linker flag],
- [lt_cv_ld_exported_symbols_list],
- [lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
- [lt_cv_ld_exported_symbols_list=yes],
- [lt_cv_ld_exported_symbols_list=no])
- LDFLAGS="$save_LDFLAGS"
- ])
- case $host_os in
- rhapsody* | darwin1.[[012]])
- _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- 10.[[012]]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test "$lt_cv_apple_cc_single_mod" = "yes"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
- _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
- else
- _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
- fi
- if test "$DSYMUTIL" != ":"; then
- _lt_dsymutil='~$DSYMUTIL $lib || :'
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
- m4_require([_LT_REQUIRED_DARWIN_CHECKS])
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_TAGVAR(hardcode_direct, $1)=no
- _LT_TAGVAR(hardcode_automatic, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
- if test "$GCC" = "yes"; then
- output_verbose_link_cmd=echo
- _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- m4_if([$1], [CXX],
-[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
- _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
-],[])
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
- [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
- [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
- ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X[$]1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
- # Yippee, $ECHO works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<_LT_EOF
-[$]*
-_LT_EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
- if test "X${echo_test_string+set}" != Xset; then
- # find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
- { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
- then
- break
- fi
- done
- fi
-
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
- else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$ECHO" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- ECHO='print -r'
- elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
- else
- # Try using printf.
- ECHO='printf %s\n'
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
- if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "[$]0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
- else
- # Oops. We lost completely, so just stick with echo.
- ECHO=echo
- fi
- fi
- fi
- fi
- fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
- lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
- [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
- [AS_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*|s390*-*tpf*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_LANG_PUSH(C)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
- AC_LANG_POP])
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-sparc*-*solaris*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
- [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
- [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$3"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- fi
- $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
- m4_if([$5], , :, [$5])
-else
- m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $3"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&AS_MESSAGE_LOG_FD
- $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- else
- $2=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
- m4_if([$4], , :, [$4])
-else
- m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- # Make teststring a little bigger before we do anything with it.
- # a 1K string should be a reasonable start.
- for i in 1 2 3 4 5 6 7 8 ; do
- teststring=$teststring$teststring
- done
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
- = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- # Only check the string length outside the loop.
- lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
- teststring=
- # Add a significant safety factor because C++ compilers can tack on
- # massive amounts of additional arguments before passing them to the
- # linker. It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
- AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
- AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
- [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
- [$4]
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}]
-_LT_EOF
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) $1 ;;
- x$lt_dlneed_uscore) $2 ;;
- x$lt_dlunknown|x*) $3 ;;
- esac
- else :
- # compilation failed
- $3
- fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ])
- ;;
-
- *)
- AC_CHECK_FUNC([shl_load],
- [lt_cv_dlopen="shl_load"],
- [AC_CHECK_LIB([dld], [shl_load],
- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
- [AC_CHECK_FUNC([dlopen],
- [lt_cv_dlopen="dlopen"],
- [AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
- [AC_CHECK_LIB([svld], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
- [AC_CHECK_LIB([dld], [dld_link],
- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
- ])
- ])
- ])
- ])
- ])
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- AC_CACHE_CHECK([whether a program can dlopen itself],
- lt_cv_dlopen_self, [dnl
- _LT_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
- lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
- ])
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
- lt_cv_dlopen_self_static, [dnl
- _LT_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
- lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
- ])
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
- [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
- [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
- [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
- [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
- [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
- $RM -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
- fi
- fi
- chmod u+w . 2>&AS_MESSAGE_LOG_FD
- $RM conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
- $RM out/* && rmdir out
- cd ..
- $RM -r conftest
- $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
- [Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- AC_MSG_CHECKING([if we can lock with hard links])
- hard_links=yes
- $RM conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- AC_MSG_RESULT([$hard_links])
- if test "$hard_links" = no; then
- AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
- [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
- [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
- test -n "$_LT_TAGVAR(runpath_var, $1)" ||
- test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
- # We can hardcode non-existent directories.
- if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
- test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
- # Linking always hardcodes the temporary library directory.
- _LT_TAGVAR(hardcode_action, $1)=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- _LT_TAGVAR(hardcode_action, $1)=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
- test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
- [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
- esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
- [], [
-if test "$GCC" = yes; then
- case $host_os in
- darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
- *) lt_awk_arg="/^libraries:/" ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
- else
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary.
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path/$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
- else
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
- lt_foo="";
- lt_count=0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo="/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[[lt_foo]]++; }
- if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
- sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[[4-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[[01]] | aix4.[[01]].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- case $host_cpu in
- powerpc)
- # Since July 2007 AmigaOS4 officially supports .so libraries.
- # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- ;;
- m68k)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
- esac
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[[45]]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname~
- if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
- eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
- fi'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[[123]]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[[01]]* | freebsdelf3.[[01]]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
- freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[[3-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # Some binutils ld are patched to set DT_RUNPATH
- save_LDFLAGS=$LDFLAGS
- save_libdir=$libdir
- eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
- LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
- AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
- [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
- [shlibpath_overrides_runpath=yes])])
- LDFLAGS=$save_LDFLAGS
- libdir=$save_libdir
-
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-*nto* | *qnx*)
- version_type=qnx
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='ldqnx.so'
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[[89]] | openbsd2.[[89]].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-tpf*)
- # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
- [Variables whose values should be saved in libtool wrapper scripts and
- restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
- [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
- [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
- [[List of archive names. First name is the real one, the rest are links.
- The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
- [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
- [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
- [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
- [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
- [[As "finish_cmds", except a single script fragment to be evaled but
- not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
- [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
- [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
- [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] | ?:[\\/]*])
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word. This closes a longstanding sh security hole.
- ac_dummy="m4_if([$2], , $PATH, [$2])"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$1; then
- lt_cv_path_MAGIC_CMD="$ac_dir/$1"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- AC_MSG_RESULT($MAGIC_CMD)
-else
- AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
- [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
- else
- MAGIC_CMD=:
- fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
- [AS_HELP_STRING([--with-gnu-ld],
- [assume the C compiler uses GNU ld @<:@default=no@:>@])],
- [test "$withval" = no || with_gnu_ld=yes],
- [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by $CC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]]* | ?:[[\\/]]*)
- re_direlt='/[[^/]][[^/]]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
- while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-# -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
- lt_cv_ld_reload_flag,
- [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-# -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[[45]]*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[[3-9]]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-*nto* | *qnx*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-tpf*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
- [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
- [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
- done
- : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
- NM="$lt_cv_path_NM"
-else
- # Didn't find any BSD compatible name lister, look for dumpbin.
- AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
- AC_SUBST([DUMPBIN])
- if test "$DUMPBIN" != ":"; then
- NM="$DUMPBIN"
- fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
- [lt_cv_nm_interface="BSD nm"
- echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$ac_compile" 2>conftest.err)
- cat conftest.err >&AS_MESSAGE_LOG_FD
- (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
- (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
- cat conftest.err >&AS_MESSAGE_LOG_FD
- (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
- cat conftest.out >&AS_MESSAGE_LOG_FD
- if $GREP 'External.*some_variable' conftest.out > /dev/null; then
- lt_cv_nm_interface="MS dumpbin"
- fi
- rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
- # These system don't have libm, or don't need it
- ;;
-*-ncr-sysv4.3*)
- AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
- ;;
-*)
- AC_CHECK_LIB(m, cos, LIBM="-lm")
- ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
- _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
- lt_cv_prog_compiler_rtti_exceptions,
- [-fno-rtti -fno-exceptions], [],
- [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
- [Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[[BCDT]]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[[ABCDGISTW]]'
- ;;
-hpux*)
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDEGRST]]'
- fi
- ;;
-irix* | nonstopux*)
- symcode='[[BCDEGRST]]'
- ;;
-osf*)
- symcode='[[BCDEGQRST]]'
- ;;
-solaris*)
- symcode='[[BDRT]]'
- ;;
-sco3.2v5*)
- symcode='[[DT]]'
- ;;
-sysv4.2uw2*)
- symcode='[[DT]]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[[ABDT]]'
- ;;
-sysv4)
- symcode='[[DFNSTU]]'
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Fake it for dumpbin and say T for any non-static function
- # and D for any global variable.
- # Also find C++ and __fastcall symbols from MSVC++,
- # which start with @ or ?.
- lt_cv_sys_global_symbol_pipe="$AWK ['"\
-" {last_section=section; section=\$ 3};"\
-" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-" \$ 0!~/External *\|/{next};"\
-" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-" {if(hide[section]) next};"\
-" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-" s[1]~/^[@?]/{print s[1], s[1]; next};"\
-" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-" ' prfx=^$ac_symprfx]"
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
- if AC_TRY_EVAL(ac_compile); then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
- cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- void *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
- { "@PROGRAM@", (void *) 0 },
-_LT_EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
- cat <<\_LT_EOF >> conftest.$ac_ext
- {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- AC_MSG_RESULT(failed)
-else
- AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
- [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
- [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
- [lt_cv_sys_global_symbol_to_c_name_address], [1],
- [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
- [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
- [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- m68k)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
- esac
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- mingw* | cygwin* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- _LT_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- ;;
- *)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
- *qnx* | *nto*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
- ;;
- *)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- case $host_os in
- aix[[4-9]]*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68*)
- # Green Hills C++ Compiler
- # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++*)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | dragonfly*)
- # FreeBSD uses GNU C++
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- if test "$host_cpu" != ia64; then
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
- ;;
- aCC*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- ;;
- *)
- ;;
- esac
- ;;
- interix*)
- # This is c89, which is MS Visual C++ (no shared libs)
- # Anyone wants to do a port?
- ;;
- irix5* | irix6* | nonstopux*)
- case $cc_basename in
- CC*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- # CC pic flag -KPIC is the default.
- ;;
- *)
- ;;
- esac
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # KAI C++ Compiler
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- icpc* | ecpc* )
- # Intel C++
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- cxx*)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- xlc* | xlC*)
- # IBM XL 8.0 on PPC
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- *qnx* | *nto*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- cxx*)
- # Digital/Compaq C++
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- lcc*)
- # Lucid
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- case $cc_basename in
- CC*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- vxworks*)
- ;;
- *)
- _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-],
-[
- if test "$GCC" = yes; then
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- m68k)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
- esac
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
-
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- enable_shared=no
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
-
- *)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- m4_if([$1], [GCJ], [],
- [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- hpux9* | hpux10* | hpux11*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC (with -KPIC) is the default.
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc* | ifort*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- ccc*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All Alpha code is PIC.
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- xl*)
- # IBM XL C 8.0/Fortran 10.1 on PPC
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
- ;;
- esac
- ;;
- esac
- ;;
-
- newsos6)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
- ;;
-
- osf3* | osf4* | osf5*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All OSF/1 code is PIC.
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- rdos*)
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- solaris*)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
- *)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
- esac
- ;;
-
- sunos4*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- unicos*)
- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
-
- uts4*)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- *)
- _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-])
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- *)
- _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
- ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
- [How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
- [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
- [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
- [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
- "" | " "*) ;;
- *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
- esac],
- [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
- [Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
- _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
- $lt_tmp_static_flag,
- [],
- [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
- [Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- case $host_os in
- aix[[4-9]]*)
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- fi
- ;;
- pw32*)
- _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
- ;;
- cygwin* | mingw*)
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- *)
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- esac
- _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
- runpath_var=
- _LT_TAGVAR(allow_undefined_flag, $1)=
- _LT_TAGVAR(always_export_symbols, $1)=no
- _LT_TAGVAR(archive_cmds, $1)=
- _LT_TAGVAR(archive_expsym_cmds, $1)=
- _LT_TAGVAR(compiler_needs_object, $1)=no
- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
- _LT_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- _LT_TAGVAR(hardcode_automatic, $1)=no
- _LT_TAGVAR(hardcode_direct, $1)=no
- _LT_TAGVAR(hardcode_direct_absolute, $1)=no
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
- _LT_TAGVAR(hardcode_libdir_separator, $1)=
- _LT_TAGVAR(hardcode_minus_L, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_TAGVAR(inherit_rpath, $1)=no
- _LT_TAGVAR(link_all_deplibs, $1)=unknown
- _LT_TAGVAR(module_cmds, $1)=
- _LT_TAGVAR(module_expsym_cmds, $1)=
- _LT_TAGVAR(old_archive_from_new_cmds, $1)=
- _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
- _LT_TAGVAR(thread_safe_flag_spec, $1)=
- _LT_TAGVAR(whole_archive_flag_spec, $1)=
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- _LT_TAGVAR(include_expsyms, $1)=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
- extract_expsyms_cmds=
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- _LT_TAGVAR(ld_shlibs, $1)=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
- _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>&1` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[[3-9]]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- _LT_TAGVAR(ld_shlibs, $1)=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)=''
- ;;
- m68k)
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- esac
- ;;
-
- beos*)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_TAGVAR(always_export_symbols, $1)=no
- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- interix[[3-9]]*)
- _LT_TAGVAR(hardcode_direct, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | tpf* | k*bsd*-gnu)
- tmp_diet=no
- if test "$host_os" = linux-dietlibc; then
- case $cc_basename in
- diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
- esac
- fi
- if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
- && test "$tmp_diet" = no
- then
- tmp_addflag=
- tmp_sharedflag='-shared'
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
- tmp_sharedflag='-qmkshrobj'
- tmp_addflag= ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- _LT_TAGVAR(compiler_needs_object, $1)=yes
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- esac
- _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test "x$supports_anon_versioning" = xyes; then
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
-
- case $cc_basename in
- xlf*)
- # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
- _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
- _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
- _LT_TAGVAR(ld_shlibs, $1)=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
- _LT_TAGVAR(ld_shlibs, $1)=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
-
- if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
- runpath_var=
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_TAGVAR(always_export_symbols, $1)=yes
- _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- _LT_TAGVAR(hardcode_direct, $1)=unsupported
- fi
- ;;
-
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_TAGVAR(archive_cmds, $1)=''
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
- _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" &&
- strings "$collect2name" | $GREP resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
- _LT_SYS_MODULE_PATH_AIX
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
- _LT_SYS_MODULE_PATH_AIX
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)=''
- ;;
- m68k)
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- esac
- ;;
-
- bsdi[[45]]*)
- _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
- # FIXME: Should let the user specify the lib program.
- _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
- _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- ;;
-
- darwin* | rhapsody*)
- _LT_DARWIN_LINKER_FEATURES($1)
- ;;
-
- dgux*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- freebsd1*)
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_TAGVAR(hardcode_direct, $1)=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_TAGVAR(hardcode_direct, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
- AC_LINK_IFELSE(int foo(void) {},
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
- )
- LDFLAGS="$save_LDFLAGS"
- else
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
- fi
- _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_TAGVAR(inherit_rpath, $1)=yes
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- newsos6)
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *nto* | *qnx*)
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- else
- case $host_os in
- openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- os2*)
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- else
- _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
- $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- fi
- _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- solaris*)
- _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
- wlarc=''
- _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
- ;;
- *)
- wlarc='${wl}'
- _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- ;;
- esac
- fi
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
- _LT_TAGVAR(hardcode_direct, $1)=no
- ;;
- motorola)
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4.3*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- _LT_TAGVAR(ld_shlibs, $1)=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
-
- if test x$host_vendor = xsni; then
- case $host in
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
- ;;
- esac
- fi
- fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
- [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
- # Assume -lc should be added
- _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $_LT_TAGVAR(archive_cmds, $1) in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- AC_MSG_CHECKING([whether -lc should be explicitly linked in])
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
- pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
- _LT_TAGVAR(allow_undefined_flag, $1)=
- if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
- then
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- else
- _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
- fi
- _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
- AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
- ;;
- esac
- fi
- ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
- [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
- [enable_shared_with_static_runtimes], [0],
- [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
- [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
- [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
- [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
- [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
- [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
- [Commands used to build a loadable module if different from building
- a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
- [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
- [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
- [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
- [Flag to hardcode $libdir into a binary during linking.
- This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
- [[If ld is used when linking, flag to hardcode $libdir into a binary
- during linking. This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
- [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
- [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
- DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
- [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
- DIR into the resulting binary and the resulting library dependency is
- "absolute", i.e impossible to change by setting ${shlibpath_var} if the
- library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
- [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
- into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
- [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
- into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
- [Set to "yes" if building a shared library automatically hardcodes DIR
- into the library and all subsequent libraries and executables linked
- against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
- [Set to yes if linker adds runtime paths of dependent libraries
- to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
- [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
- [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
- [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
- [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
- [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
- [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
- [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
- [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined. These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
- _LT_COMPILER_NO_RTTI($1)
- _LT_COMPILER_PIC($1)
- _LT_COMPILER_C_O($1)
- _LT_COMPILER_FILE_LOCKS($1)
- _LT_LINKER_SHLIBS($1)
- _LT_SYS_DYNAMIC_LINKER($1)
- _LT_LINKER_HARDCODE_LIBPATH($1)
- LT_SYS_DLOPEN_SELF
- _LT_CMD_STRIPLIB
-
- # Report which library types will actually be built
- AC_MSG_CHECKING([if libtool supports shared libraries])
- AC_MSG_RESULT([$can_build_shared])
-
- AC_MSG_CHECKING([whether to build shared libraries])
- test "$can_build_shared" = "no" && enable_shared=no
-
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case $host_os in
- aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
- aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
- esac
- AC_MSG_RESULT([$enable_shared])
-
- AC_MSG_CHECKING([whether to build static libraries])
- # Make sure either enable_shared or enable_static is yes.
- test "$enable_shared" = yes || enable_static=yes
- AC_MSG_RESULT([$enable_static])
-
- _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_PROG_CXXCPP
-else
- _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined. These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working. Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
- # Code to be used in simple compile tests
- lt_simple_compile_test_code="int some_variable = 0;"
-
- # Code to be used in simple link tests
- lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
- # ltmain only uses $CC for tagged configurations so make sure $CC is set.
- _LT_TAG_COMPILER
-
- # save warnings/boilerplate of simple test code
- _LT_COMPILER_BOILERPLATE
- _LT_LINKER_BOILERPLATE
-
- # Allow CC to be a program name with arguments.
- lt_save_CC=$CC
- lt_save_LD=$LD
- lt_save_GCC=$GCC
- GCC=$GXX
- lt_save_with_gnu_ld=$with_gnu_ld
- lt_save_path_LD=$lt_cv_path_LD
- if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
- else
- $as_unset lt_cv_prog_gnu_ld
- fi
- if test -n "${lt_cv_path_LDCXX+set}"; then
- lt_cv_path_LD=$lt_cv_path_LDCXX
- else
- $as_unset lt_cv_path_LD
- fi
- test -z "${LDCXX+set}" || LD=$LDCXX
- CC=${CXX-"c++"}
- compiler=$CC
- _LT_TAGVAR(compiler, $1)=$CC
- _LT_CC_BASENAME([$compiler])
-
- if test -n "$compiler"; then
- # We don't want -fno-exception when compiling C++ code, so set the
- # no_builtin_flag separately
- if test "$GXX" = yes; then
- _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
- else
- _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
- fi
-
- if test "$GXX" = yes; then
- # Set up default GNU C++ configuration
-
- LT_PATH_LD
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used.
- if test "$with_gnu_ld" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" |
- $GREP 'no-whole-archive' > /dev/null; then
- _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- with_gnu_ld=no
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
- else
- GXX=no
- with_gnu_ld=no
- wlarc=
- fi
-
- # PORTME: fill in a description of your system's C++ link characteristics
- AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
- _LT_TAGVAR(ld_shlibs, $1)=yes
- case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- case $ld_flag in
- *-brtl*)
- aix_use_runtimelinking=yes
- break
- ;;
- esac
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_TAGVAR(archive_cmds, $1)=''
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
- _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
- if test "$GXX" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" &&
- strings "$collect2name" | $GREP resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to
- # export.
- _LT_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty
- # executable.
- _LT_SYS_MODULE_PATH_AIX
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
- _LT_SYS_MODULE_PATH_AIX
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared
- # libraries.
- _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- beos*)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_TAGVAR(always_export_symbols, $1)=no
- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- darwin* | rhapsody*)
- _LT_DARWIN_LINKER_FEATURES($1)
- ;;
-
- dgux*)
- case $cc_basename in
- ec++*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- freebsd[[12]]*)
- # C++ shared libraries reported to be fairly broken before
- # switch to ELF
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- freebsd-elf*)
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- ;;
-
- freebsd* | dragonfly*)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- _LT_TAGVAR(ld_shlibs, $1)=yes
- ;;
-
- gnu*)
- ;;
-
- hpux9*)
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
- ;;
- *)
- if test "$GXX" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
-
- hpux10*|hpux11*)
- if test $with_gnu_ld = no; then
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- ;;
- *)
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
- esac
- fi
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_TAGVAR(hardcode_direct, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
- _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- esac
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- case $host_cpu in
- hppa*64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
- ;;
- *)
- if test "$GXX" = yes; then
- if test $with_gnu_ld = no; then
- case $host_cpu in
- hppa*64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
-
- interix[[3-9]]*)
- _LT_TAGVAR(hardcode_direct, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC*)
- # SGI C++
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
- fi
- fi
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- ;;
- esac
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_TAGVAR(inherit_rpath, $1)=yes
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- icpc* | ecpc* )
- # Intel C++
- with_gnu_ld=yes
- # version 8.0 and above of icpc choke on multiply defined symbols
- # if we add $predep_objects and $postdep_objects, however 7.1 and
- # earlier do not add the objects themselves.
- case `$CC -V 2>&1` in
- *"Version 7."*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- *) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- esac
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler
- case `$CC -V` in
- *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
- _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
- compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
- _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
- $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
- $RANLIB $oldlib'
- _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
- rm -rf $tpldir~
- $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
- ;;
- *) # Version 6 will use weak symbols
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
- ;;
- esac
-
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
- # Compaq C++
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
- ;;
- xl*)
- # IBM XL 8.0 on PPC, with GNU ld
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- _LT_TAGVAR(compiler_needs_object, $1)=yes
-
- # Not sure whether something based on
- # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
- # would be better.
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- esac
- ;;
- esac
- ;;
-
- lynxos*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- m88k*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- mvs*)
- case $cc_basename in
- cxx*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
- wlarc=
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- fi
- # Workaround some broken pre-1.5 toolchains
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
- ;;
-
- *nto* | *qnx*)
- _LT_TAGVAR(ld_shlibs, $1)=yes
- ;;
-
- openbsd2*)
- # C++ shared libraries are fairly broken
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd=echo
- else
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- case $host in
- osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
- *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
- esac
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- case $host in
- osf3*)
- _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- ;;
- *)
- _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
- $RM $lib.exp'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- ;;
- esac
-
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- case $host in
- osf3*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- ;;
- esac
-
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
-
- psos*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- lcc*)
- # Lucid
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
- _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- ;;
- esac
- _LT_TAGVAR(link_all_deplibs, $1)=yes
-
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
- if $CC --version | $GREP -v '^2\.7' > /dev/null; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
- fi
-
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- ;;
- esac
- fi
- ;;
- esac
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
- _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_TAGVAR(link_all_deplibs, $1)=yes
- _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
-
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- vxworks*)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- *)
- # FIXME: insert proper C++ library support
- _LT_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
-
- AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
- test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
- _LT_TAGVAR(GCC, $1)="$GXX"
- _LT_TAGVAR(LD, $1)="$LD"
-
- ## CAVEAT EMPTOR:
- ## There is no encapsulation within the following macros, do not change
- ## the running order or otherwise move them around unless you know exactly
- ## what you are doing...
- _LT_SYS_HIDDEN_LIBDEPS($1)
- _LT_COMPILER_PIC($1)
- _LT_COMPILER_C_O($1)
- _LT_COMPILER_FILE_LOCKS($1)
- _LT_LINKER_SHLIBS($1)
- _LT_SYS_DYNAMIC_LINKER($1)
- _LT_LINKER_HARDCODE_LIBPATH($1)
-
- _LT_CONFIG($1)
- fi # test -n "$compiler"
-
- CC=$lt_save_CC
- LDCXX=$LD
- LD=$lt_save_LD
- GCC=$lt_save_GCC
- with_gnu_ld=$lt_save_with_gnu_ld
- lt_cv_path_LDCXX=$lt_cv_path_LD
- lt_cv_path_LD=$lt_save_path_LD
- lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
- lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library. It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
- subroutine foo
- implicit none
- integer*4 a
- a=0
- return
- end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
- subroutine foo
- implicit none
- integer a
- a=0
- return
- end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
- private int a;
- public void bar (void) {
- a = 0;
- }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- for p in `eval "$output_verbose_link_cmd"`; do
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" ||
- test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
- else
- _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$_LT_TAGVAR(postdeps, $1)"; then
- _LT_TAGVAR(postdeps, $1)="${prev}${p}"
- else
- _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
- _LT_TAGVAR(predep_objects, $1)="$p"
- else
- _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
- fi
- else
- if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
- _LT_TAGVAR(postdep_objects, $1)="$p"
- else
- _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out a.exe
-else
- echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
- # Interix 3.5 installs completely hosed .la files for C++, so rather than
- # hack all around it, let's just trust "g++" to DTRT.
- _LT_TAGVAR(predep_objects,$1)=
- _LT_TAGVAR(postdep_objects,$1)=
- _LT_TAGVAR(postdeps,$1)=
- ;;
-
-linux*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
-
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- if test "$solaris_use_stlport4" != yes; then
- _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
-solaris*)
- case $cc_basename in
- CC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- # Adding this requires a known-good setup of shared libraries for
- # Sun compiler versions before 5.6, else PIC objects from an old
- # archive will be linked into the output, leading to subtle bugs.
- if test "$solaris_use_stlport4" != yes; then
- _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
- [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
- [Dependencies to place before and after the objects being linked to
- create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
- [The library search path used internally by the compiler when linking
- a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
- _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined. These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working. Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
- # Code to be used in simple compile tests
- lt_simple_compile_test_code="\
- subroutine t
- return
- end
-"
-
- # Code to be used in simple link tests
- lt_simple_link_test_code="\
- program t
- end
-"
-
- # ltmain only uses $CC for tagged configurations so make sure $CC is set.
- _LT_TAG_COMPILER
-
- # save warnings/boilerplate of simple test code
- _LT_COMPILER_BOILERPLATE
- _LT_LINKER_BOILERPLATE
-
- # Allow CC to be a program name with arguments.
- lt_save_CC="$CC"
- lt_save_GCC=$GCC
- CC=${F77-"f77"}
- compiler=$CC
- _LT_TAGVAR(compiler, $1)=$CC
- _LT_CC_BASENAME([$compiler])
- GCC=$G77
- if test -n "$compiler"; then
- AC_MSG_CHECKING([if libtool supports shared libraries])
- AC_MSG_RESULT([$can_build_shared])
-
- AC_MSG_CHECKING([whether to build shared libraries])
- test "$can_build_shared" = "no" && enable_shared=no
-
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case $host_os in
- aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
- aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
- esac
- AC_MSG_RESULT([$enable_shared])
-
- AC_MSG_CHECKING([whether to build static libraries])
- # Make sure either enable_shared or enable_static is yes.
- test "$enable_shared" = yes || enable_static=yes
- AC_MSG_RESULT([$enable_static])
-
- _LT_TAGVAR(GCC, $1)="$G77"
- _LT_TAGVAR(LD, $1)="$LD"
-
- ## CAVEAT EMPTOR:
- ## There is no encapsulation within the following macros, do not change
- ## the running order or otherwise move them around unless you know exactly
- ## what you are doing...
- _LT_COMPILER_PIC($1)
- _LT_COMPILER_C_O($1)
- _LT_COMPILER_FILE_LOCKS($1)
- _LT_LINKER_SHLIBS($1)
- _LT_SYS_DYNAMIC_LINKER($1)
- _LT_LINKER_HARDCODE_LIBPATH($1)
-
- _LT_CONFIG($1)
- fi # test -n "$compiler"
-
- GCC=$lt_save_GCC
- CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
- _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined. These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working. Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
- # Code to be used in simple compile tests
- lt_simple_compile_test_code="\
- subroutine t
- return
- end
-"
-
- # Code to be used in simple link tests
- lt_simple_link_test_code="\
- program t
- end
-"
-
- # ltmain only uses $CC for tagged configurations so make sure $CC is set.
- _LT_TAG_COMPILER
-
- # save warnings/boilerplate of simple test code
- _LT_COMPILER_BOILERPLATE
- _LT_LINKER_BOILERPLATE
-
- # Allow CC to be a program name with arguments.
- lt_save_CC="$CC"
- lt_save_GCC=$GCC
- CC=${FC-"f95"}
- compiler=$CC
- GCC=$ac_cv_fc_compiler_gnu
-
- _LT_TAGVAR(compiler, $1)=$CC
- _LT_CC_BASENAME([$compiler])
-
- if test -n "$compiler"; then
- AC_MSG_CHECKING([if libtool supports shared libraries])
- AC_MSG_RESULT([$can_build_shared])
-
- AC_MSG_CHECKING([whether to build shared libraries])
- test "$can_build_shared" = "no" && enable_shared=no
-
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case $host_os in
- aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
- aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
- esac
- AC_MSG_RESULT([$enable_shared])
-
- AC_MSG_CHECKING([whether to build static libraries])
- # Make sure either enable_shared or enable_static is yes.
- test "$enable_shared" = yes || enable_static=yes
- AC_MSG_RESULT([$enable_static])
-
- _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
- _LT_TAGVAR(LD, $1)="$LD"
-
- ## CAVEAT EMPTOR:
- ## There is no encapsulation within the following macros, do not change
- ## the running order or otherwise move them around unless you know exactly
- ## what you are doing...
- _LT_SYS_HIDDEN_LIBDEPS($1)
- _LT_COMPILER_PIC($1)
- _LT_COMPILER_C_O($1)
- _LT_COMPILER_FILE_LOCKS($1)
- _LT_LINKER_SHLIBS($1)
- _LT_SYS_DYNAMIC_LINKER($1)
- _LT_LINKER_HARDCODE_LIBPATH($1)
-
- _LT_CONFIG($1)
- fi # test -n "$compiler"
-
- GCC=$lt_save_GCC
- CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined. These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
- _LT_COMPILER_NO_RTTI($1)
- _LT_COMPILER_PIC($1)
- _LT_COMPILER_C_O($1)
- _LT_COMPILER_FILE_LOCKS($1)
- _LT_LINKER_SHLIBS($1)
- _LT_LINKER_HARDCODE_LIBPATH($1)
-
- _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined. These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
- :
- _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
- [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
- [AC_CHECK_TOOL(GCJ, gcj,)
- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
- AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible. Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
- [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into #
-# GNU Autoconf as AC_PROG_SED. When it is available in #
-# a released version of Autoconf we should remove this #
-# macro and use it instead. #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for lt_ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
- fi
- done
- done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
- cat /dev/null > conftest.in
- lt_ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
- # Check for GNU sed and select it if it is found.
- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
- lt_cv_path_SED=$lt_ac_sed
- break
- fi
- while true; do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo >>conftest.nl
- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
- cmp -s conftest.out conftest.nl || break
- # 10000 chars as input seems more than enough
- test $lt_ac_count -gt 10 && break
- lt_ac_count=`expr $lt_ac_count + 1`
- if test $lt_ac_count -gt $lt_ac_max; then
- lt_ac_max=$lt_ac_count
- lt_cv_path_SED=$lt_ac_sed
- fi
- done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
- = c,a/b,, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
- >/dev/null 2>&1 \
- && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- lt_unset=unset
-else
- lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- lt_SP2NL='tr \040 \012'
- lt_NL2SP='tr \015\012 \040\040'
- ;;
- *) # EBCDIC based system
- lt_SP2NL='tr \100 \n'
- lt_NL2SP='tr \r\n \100\100'
- ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
-}
-
-# func_basename file
-func_basename ()
-{
- func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-# dirname: Compute the dirname of FILE. If nonempty,
-# add APPEND to the result, otherwise set result
-# to NONDIR_REPLACEMENT.
-# value returned in "$func_dirname_result"
-# basename: Compute filename of FILE.
-# value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
- func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
- # positional parameters, so assign one to ordinary parameter first.
- func_stripname_result=${3}
- func_stripname_result=${func_stripname_result#"${1}"}
- func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=${1%%=*}
- func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- case ${1} in
- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
- *) func_lo2o_result=${1} ;;
- esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=${#1}
-}
-
-_LT_EOF
- ;;
- *) # Bourne compatible functions.
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
- # Extract subdirectory from the argument.
- func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
- if test "X$func_dirname_result" = "X${1}"; then
- func_dirname_result="${3}"
- else
- func_dirname_result="$func_dirname_result${2}"
- fi
-}
-
-# func_basename file
-func_basename ()
-{
- func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
- case ${2} in
- .*) func_stripname_result=`$ECHO "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
- *) func_stripname_result=`$ECHO "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
- esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
- func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$[1]+=\$[2]"
-}
-_LT_EOF
- ;;
- *)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
- ;;
- esac
-])
-
-# Helper functions for option handling. -*- Autoconf -*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it. Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
- _LT_MANGLE_DEFUN([$1], [$2]),
- [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
- [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
- [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME. If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
- [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
- dnl
- dnl Simply set some default values (i.e off) if boolean options were not
- dnl specified:
- _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
- ])
- _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
- ])
- dnl
- dnl If no reference was made to various pairs of opposing options, then
- dnl we run the default mode handler for the pair. For example, if neither
- dnl `shared' nor `disable-shared' was passed, we enable building of shared
- dnl archives by default:
- _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
- _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
- _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
- _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
- [_LT_ENABLE_FAST_INSTALL])
- ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
- ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS], [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
- [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
- [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
- _LT_DECL([build_libtool_libs], [enable_shared], [0],
- [Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
- [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
- [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
- _LT_DECL([build_old_libs], [enable_static], [0],
- [Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
- [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
- [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
- [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
- [AS_HELP_STRING([--with-pic],
- [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
- [pic_mode="$withval"],
- [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
- [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
- [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
- [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
- [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
- [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 5 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
- [$#], [2], [[$2]],
- [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
- [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
- [$#], 1, [],
- [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
- m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-m4_define([lt_combine],
-[m4_if([$2], [], [],
- [m4_if([$4], [], [],
- [lt_join(m4_quote(m4_default([$1], [[, ]])),
- lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_prefix, [$2],
- [m4_foreach(_Lt_suffix, lt_car([m4_shiftn(3, $@)]),
- [_Lt_prefix[]$3[]_Lt_suffix ])])))))])])dnl
-])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
- [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
- [lt_append([$1], [$2], [$3])$4],
- [$5])],
- [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
- m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
- m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
- [$5],
- [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
- [lt_join(m4_quote(m4_default([$4], [[, ]])),
- lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
- [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers -*- Autoconf -*-
-#
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 2976 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.4])
-m4_define([LT_PACKAGE_REVISION], [1.2976])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.4'
-macro_revision='1.2976'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-# Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else. This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
-m4_include([ft-munmap.m4])
diff --git a/Build/source/libs/freetype2/builds/unix/config.guess b/Build/source/libs/freetype2/builds/unix/config.guess
deleted file mode 100644
index e5716eea733..00000000000
--- a/Build/source/libs/freetype2/builds/unix/config.guess
+++ /dev/null
@@ -1,1555 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-
-timestamp='2009-02-03'
-
-# This file 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 Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval $set_cc_for_build
- SUN_ARCH="i386"
- # If there is a compiler, see if it is configured for 64-bit objects.
- # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- # This test works for both compilers.
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- SUN_ARCH="x86_64"
- fi
- fi
- echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[456])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:[3456]*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- EM64T | authenticamd | genuineintel)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- IA64)
- echo ia64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- arm*:Linux:*:*)
- eval $set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- or32:Linux:*:*)
- echo or32-unknown-linux-gnu
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo ${UNAME_MACHINE}-pc-aros
- exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/Build/source/libs/freetype2/builds/unix/config.sub b/Build/source/libs/freetype2/builds/unix/config.sub
deleted file mode 100644
index d546a94b951..00000000000
--- a/Build/source/libs/freetype2/builds/unix/config.sub
+++ /dev/null
@@ -1,1685 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-
-timestamp='2009-02-03'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file 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 Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
- kopensolaris*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | mt \
- | msp430 \
- | nios | nios2 \
- | ns16k | ns32k \
- | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nios-* | nios2-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rdos)
- basic_machine=i386-pc
- os=-rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tile*)
- basic_machine=tile-unknown
- os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- z80-*-coff)
- basic_machine=z80-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -kopensolaris* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* | -cegcc* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -dicos*)
- os=-dicos
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- score-*)
- os=-elf
- ;;
- spu-*)
- os=-elf
- ;;
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mep-*)
- os=-elf
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-haiku)
- os=-haiku
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/Build/source/libs/freetype2/builds/unix/configure b/Build/source/libs/freetype2/builds/unix/configure
deleted file mode 100755
index fdb639aae64..00000000000
--- a/Build/source/libs/freetype2/builds/unix/configure
+++ /dev/null
@@ -1,15878 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.62 for FreeType 2.3.7.
-#
-### MODIFIED (see below) for tex-live build, Jonathan Kew, 2008-06-29
-#
-# Report bugs to <freetype@nongnu.org>.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell bug-autoconf@gnu.org about your system,
- echo including any error possibly output before this message.
- echo This can help us improve future autoconf versions.
- echo Configuration will now proceed without shell functions.
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
- ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
- # Yippee, $ECHO works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<_LT_EOF
-$*
-_LT_EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
- if test "X${echo_test_string+set}" != Xset; then
- # find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
- { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
- then
- break
- fi
- done
- fi
-
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
- else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$ECHO" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- ECHO='print -r'
- elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
- else
- # Try using printf.
- ECHO='printf %s\n'
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- ECHO="$CONFIG_SHELL $0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$CONFIG_SHELL $0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "$0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
- else
- # Oops. We lost completely, so just stick with echo.
- ECHO=echo
- fi
- fi
- fi
- fi
- fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
- lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME='FreeType'
-PACKAGE_TARNAME='freetype'
-PACKAGE_VERSION='2.3.7'
-PACKAGE_STRING='FreeType 2.3.7'
-PACKAGE_BUGREPORT='freetype@nongnu.org'
-
-ac_unique_file="ftconfig.in"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-version_info
-ft_version
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-target
-target_cpu
-target_vendor
-target_os
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-CPP
-CC_BUILD
-EXEEXT_BUILD
-XX_CFLAGS
-XX_ANSIFLAGS
-RMF
-RMDIR
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-GREP
-EGREP
-FTSYS_SRC
-LIBZ
-FT2_EXTRA_LIBS
-SYSTEM_ZLIB
-AS
-DLLTOOL
-OBJDUMP
-LIBTOOL
-SED
-FGREP
-LD
-DUMPBIN
-ac_ct_DUMPBIN
-NM
-LN_S
-AR
-STRIP
-RANLIB
-lt_ECHO
-DSYMUTIL
-NMEDIT
-LIPO
-OTOOL
-OTOOL64
-hardcode_libdir_flag_spec
-wl
-build_libtool_libs
-LIBOBJS
-LTLIBOBJS'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_zlib
-with_old_mac_fonts
-with_fsspec
-with_fsref
-with_quickdraw_toolbox
-with_quickdraw_carbon
-with_ats
-enable_shared
-enable_static
-with_pic
-enable_fast_install
-with_gnu_ld
-enable_libtool_lock
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
- { (exit 1); exit 1; }; } ;;
- *) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { $as_echo "$as_me: error: Working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-### BEGIN MODIFICATION for tex-live build, Jonathan Kew, 2008-06-26
-### The --srcdir option passed from the tex-live/libs configure script confuses this one
-### so we delete it here and rely on the script to find the sources itself
-srcdir=
-### END MODIFICATION
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures FreeType 2.3.7 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/freetype]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of FreeType 2.3.7:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-shared[=PKGS] build shared libraries [default=yes]
- --enable-static[=PKGS] build static libraries [default=yes]
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --without-zlib use internal zlib instead of system-wide
- --with-old-mac-fonts allow Mac resource-based fonts to be used
- --with-fsspec use obsolete FSSpec API of MacOS, if available
- (default=yes)
- --with-fsref use Carbon FSRef API of MacOS, if available
- (default=yes)
- --with-quickdraw-toolbox
- use MacOS QuickDraw in ToolBox, if available
- (default=yes)
- --with-quickdraw-carbon use MacOS QuickDraw in Carbon, if available
- (default=yes)
- --with-ats use AppleTypeService, if available (default=yes)
- --with-pic try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <freetype@nongnu.org>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-FreeType configure 2.3.7
-generated by GNU Autoconf 2.62
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by FreeType $as_me 2.3.7, which was
-generated by GNU Autoconf 2.62. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-# Don't forget to update docs/VERSION.DLL!
-
-version_info='9:18:3'
-
-ft_version=`echo $version_info | tr : .`
-
-
-
-# checks for system type
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
- { (exit 1); exit 1; }; }
-
-{ $as_echo "$as_me:$LINENO: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-$as_echo "$as_me: error: invalid value of canonical build" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:$LINENO: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-$as_echo "$as_me: error: invalid value of canonical host" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:$LINENO: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if test "${ac_cv_target+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
-$as_echo "$as_me: error: invalid value of canonical target" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-# checks for programs
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:$LINENO: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-# checks for native programs to generate building tool
-
-if test ${cross_compiling} = yes; then
- # Extract the first word of "${build}-gcc", so it can be a program name with args.
-set dummy ${build}-gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC_BUILD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC_BUILD"; then
- ac_cv_prog_CC_BUILD="$CC_BUILD" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC_BUILD="${build}-gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC_BUILD=$ac_cv_prog_CC_BUILD
-if test -n "$CC_BUILD"; then
- { $as_echo "$as_me:$LINENO: result: $CC_BUILD" >&5
-$as_echo "$CC_BUILD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -z "${CC_BUILD}" && # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC_BUILD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC_BUILD"; then
- ac_cv_prog_CC_BUILD="$CC_BUILD" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC_BUILD="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC_BUILD=$ac_cv_prog_CC_BUILD
-if test -n "$CC_BUILD"; then
- { $as_echo "$as_me:$LINENO: result: $CC_BUILD" >&5
-$as_echo "$CC_BUILD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -z "${CC_BUILD}" && # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC_BUILD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC_BUILD"; then
- ac_cv_prog_CC_BUILD="$CC_BUILD" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC_BUILD="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC_BUILD
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC_BUILD to just the basename; use the full file name.
- shift
- ac_cv_prog_CC_BUILD="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC_BUILD=$ac_cv_prog_CC_BUILD
-if test -n "$CC_BUILD"; then
- { $as_echo "$as_me:$LINENO: result: $CC_BUILD" >&5
-$as_echo "$CC_BUILD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -z "${CC_BUILD}" && { { $as_echo "$as_me:$LINENO: error: cannot find native C compiler" >&5
-$as_echo "$as_me: error: cannot find native C compiler" >&2;}
- { (exit 1); exit 1; }; }
-
- { $as_echo "$as_me:$LINENO: checking for suffix of native executables" >&5
-$as_echo_n "checking for suffix of native executables... " >&6; }
- rm -f a.* b.* a_out.exe conftest.*
- echo > conftest.c "int main() { return 0;}"
- ${CC_BUILD} conftest.c || { { $as_echo "$as_me:$LINENO: error: native C compiler is not working" >&5
-$as_echo "$as_me: error: native C compiler is not working" >&2;}
- { (exit 1); exit 1; }; }
- 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/^.*\.//g'`
- fi
- { $as_echo "$as_me:$LINENO: result: $EXEEXT_BUILD" >&5
-$as_echo "$EXEEXT_BUILD" >&6; }
-else
- CC_BUILD=${CC}
- EXEEXT_BUILD=${EXEEXT}
-fi
-
-
-if test ! -z ${EXEEXT_BUILD}; then
- EXEEXT_BUILD=."${EXEEXT_BUILD}"
-fi
-
-
-
-
-
-# get compiler flags right
-
-if test "x$CC" = xgcc; then
- XX_CFLAGS="-Wall"
- XX_ANSIFLAGS="-pedantic -ansi"
-else
- case "$host" in
- *-dec-osf*)
- CFLAGS=
- XX_CFLAGS="-std1 -g3"
- XX_ANSIFLAGS=
- ;;
- *)
- XX_CFLAGS=
- XX_ANSIFLAGS=
- ;;
- esac
-fi
-
-
-
-
-# auxiliary programs
-
-# Extract the first word of "rm", so it can be a program name with args.
-set dummy rm; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RMF+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RMF"; then
- ac_cv_prog_RMF="$RMF" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RMF="rm -f"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RMF=$ac_cv_prog_RMF
-if test -n "$RMF"; then
- { $as_echo "$as_me:$LINENO: result: $RMF" >&5
-$as_echo "$RMF" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-# Extract the first word of "rmdir", so it can be a program name with args.
-set dummy rmdir; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RMDIR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RMDIR"; then
- ac_cv_prog_RMDIR="$RMDIR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RMDIR="rmdir"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RMDIR=$ac_cv_prog_RMDIR
-if test -n "$RMDIR"; then
- { $as_echo "$as_me:$LINENO: result: $RMDIR" >&5
-$as_echo "$RMDIR" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-
-# Since this file will be finally moved to another directory we make
-# the path of the install script absolute. This small code snippet has
-# been taken from automake's `ylwrap' script.
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
-done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-case "$INSTALL" in
-/*)
- ;;
-*/*)
- INSTALL="`pwd`/$INSTALL" ;;
-esac
-
-
-# checks for header files
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
-done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
-done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stdc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stdc=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-for ac_header in fcntl.h unistd.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------- ##
-## Report this to freetype@nongnu.org ##
-## ---------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-
-fi
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-# checks for typedefs, structures, and compiler characteristics
-
-{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this. */
- typedef int charset[2];
- const charset cs;
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *pcpcc;
- char **ppc;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- pcpcc = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++pcpcc;
- ppc = (char**) pcpcc;
- pcpcc = (char const *const *) ppc;
- { /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- if (s) return 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- if (!foo) return 0;
- }
- return !cs[0] && !zero.x;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_c_const=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_c_const=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-cat >>confdefs.h <<\_ACEOF
-#define const /**/
-_ACEOF
-
-fi
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:$LINENO: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if test "${ac_cv_sizeof_int+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (int))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_int=$ac_lo;;
-'') if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_int=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-static long int longval () { return (long int) (sizeof (int)); }
-static unsigned long int ulongval () { return (long int) (sizeof (int)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (int))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (int))))
- return 1;
- fprintf (f, "%ld", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (int))))
- return 1;
- fprintf (f, "%lu", i);
- }
- /* Do not output a trailing newline, as this causes \r\n confusion
- on some platforms. */
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_int=`cat conftest.val`
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_int=0
- fi
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:$LINENO: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if test "${ac_cv_sizeof_long+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (long))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long=$ac_lo;;
-'') if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-static long int longval () { return (long int) (sizeof (long)); }
-static unsigned long int ulongval () { return (long int) (sizeof (long)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (long))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (long))))
- return 1;
- fprintf (f, "%ld", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (long))))
- return 1;
- fprintf (f, "%lu", i);
- }
- /* Do not output a trailing newline, as this causes \r\n confusion
- on some platforms. */
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_long=`cat conftest.val`
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long=0
- fi
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
-
-
-
-
-# checks for library functions
-
-# Here we check whether we can use our mmap file component.
-
-
-
-for ac_header in stdlib.h unistd.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------- ##
-## Report this to freetype@nongnu.org ##
-## ---------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-
-fi
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_func in getpagesize
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- eval "$as_ac_var=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:$LINENO: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_mmap_fixed_mapped=no
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-/* malloc might have been renamed as rpl_malloc. */
-#undef malloc
-
-/* Thanks to Mike Haertel and Jim Avera for this test.
- Here is a matrix of mmap possibilities:
- mmap private not fixed
- mmap private fixed at somewhere currently unmapped
- mmap private fixed at somewhere already mapped
- mmap shared not fixed
- mmap shared fixed at somewhere currently unmapped
- mmap shared fixed at somewhere already mapped
- For private mappings, we should verify that changes cannot be read()
- back from the file, nor mmap's back from the file at a different
- address. (There have been systems where private was not correctly
- implemented like the infamous i386 svr4.0, and systems where the
- VM page cache was not coherent with the file system buffer cache
- like early versions of FreeBSD and possibly contemporary NetBSD.)
- For shared mappings, we should conversely verify that changes get
- propagated back to all the places they're supposed to be.
-
- Grep wants private fixed already mapped.
- The main things grep needs to know about mmap are:
- * does it exist and is it safe to write into the mmap'd area
- * how to use it (BSD variants) */
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
-/* This mess was copied from the GNU getpagesize.h. */
-#ifndef HAVE_GETPAGESIZE
-/* Assume that all systems that can run configure have sys/param.h. */
-# ifndef HAVE_SYS_PARAM_H
-# define HAVE_SYS_PARAM_H 1
-# endif
-
-# ifdef _SC_PAGESIZE
-# define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-# ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>
-# ifdef EXEC_PAGESIZE
-# define getpagesize() EXEC_PAGESIZE
-# else /* no EXEC_PAGESIZE */
-# ifdef NBPG
-# define getpagesize() NBPG * CLSIZE
-# ifndef CLSIZE
-# define CLSIZE 1
-# endif /* no CLSIZE */
-# else /* no NBPG */
-# ifdef NBPC
-# define getpagesize() NBPC
-# else /* no NBPC */
-# ifdef PAGESIZE
-# define getpagesize() PAGESIZE
-# endif /* PAGESIZE */
-# endif /* no NBPC */
-# endif /* no NBPG */
-# endif /* no EXEC_PAGESIZE */
-# else /* no HAVE_SYS_PARAM_H */
-# define getpagesize() 8192 /* punt totally */
-# endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-int
-main ()
-{
- char *data, *data2, *data3;
- int i, pagesize;
- int fd;
-
- pagesize = getpagesize ();
-
- /* First, make a file with some known garbage in it. */
- data = (char *) malloc (pagesize);
- if (!data)
- return 1;
- for (i = 0; i < pagesize; ++i)
- *(data + i) = rand ();
- umask (0);
- fd = creat ("conftest.mmap", 0600);
- if (fd < 0)
- return 1;
- if (write (fd, data, pagesize) != pagesize)
- return 1;
- close (fd);
-
- /* Next, try to mmap the file at a fixed address which already has
- something else allocated at it. If we can, also make sure that
- we see the same garbage. */
- fd = open ("conftest.mmap", O_RDWR);
- if (fd < 0)
- return 1;
- data2 = (char *) malloc (2 * pagesize);
- if (!data2)
- return 1;
- data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
- if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_FIXED, fd, 0L))
- return 1;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data2 + i))
- return 1;
-
- /* Finally, make sure that changes to the mapped area do not
- percolate back to the file as seen by read(). (This is a bug on
- some variants of i386 svr4.0.) */
- for (i = 0; i < pagesize; ++i)
- *(data2 + i) = *(data2 + i) + 1;
- data3 = (char *) malloc (pagesize);
- if (!data3)
- return 1;
- if (read (fd, data3, pagesize) != pagesize)
- return 1;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data3 + i))
- return 1;
- close (fd);
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_mmap_fixed_mapped=yes
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
-if test $ac_cv_func_mmap_fixed_mapped = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MMAP 1
-_ACEOF
-
-fi
-rm -f conftest.mmap
-
-if test "$ac_cv_func_mmap_fixed_mapped" != yes; then
- FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
-else
- FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
-
- { $as_echo "$as_me:$LINENO: checking whether munmap is declared" >&5
-$as_echo_n "checking whether munmap is declared... " >&6; }
-if test "${ac_cv_have_decl_munmap+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/mman.h>
-
-
-
-int
-main ()
-{
-#ifndef munmap
- (void) munmap;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_have_decl_munmap=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_have_decl_munmap=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_munmap" >&5
-$as_echo "$ac_cv_have_decl_munmap" >&6; }
-if test $ac_cv_have_decl_munmap = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MUNMAP 1
-_ACEOF
-
-
-else
- cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MUNMAP 0
-_ACEOF
-
-
-fi
-
-
-
- { $as_echo "$as_me:$LINENO: checking for munmap's first parameter type" >&5
-$as_echo_n "checking for munmap's first parameter type... " >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <unistd.h>
-#include <sys/mman.h>
-int munmap(void *, size_t);
-
-
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: void *" >&5
-$as_echo "void *" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define MUNMAP_USES_VOIDP /**/
-_ACEOF
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: char *" >&5
-$as_echo "char *" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-
-
-
-for ac_func in memcpy memmove
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- eval "$as_ac_var=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-# check for system zlib
-
-# don't quote AS_HELP_STRING!
-
-# Check whether --with-zlib was given.
-if test "${with_zlib+set}" = set; then
- withval=$with_zlib;
-fi
-
-if test x$with_zlib != xno && test -z "$LIBZ"; then
- { $as_echo "$as_me:$LINENO: checking for gzsetparams in -lz" >&5
-$as_echo_n "checking for gzsetparams in -lz... " >&6; }
-if test "${ac_cv_lib_z_gzsetparams+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gzsetparams ();
-int
-main ()
-{
-return gzsetparams ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_z_gzsetparams=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_z_gzsetparams=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzsetparams" >&5
-$as_echo "$ac_cv_lib_z_gzsetparams" >&6; }
-if test $ac_cv_lib_z_gzsetparams = yes; then
- if test "${ac_cv_header_zlib_h+set}" = set; then
- { $as_echo "$as_me:$LINENO: checking for zlib.h" >&5
-$as_echo_n "checking for zlib.h... " >&6; }
-if test "${ac_cv_header_zlib_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
-$as_echo "$ac_cv_header_zlib_h" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking zlib.h usability" >&5
-$as_echo_n "checking zlib.h usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <zlib.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking zlib.h presence" >&5
-$as_echo_n "checking zlib.h presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <zlib.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: zlib.h: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------- ##
-## Report this to freetype@nongnu.org ##
-## ---------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for zlib.h" >&5
-$as_echo_n "checking for zlib.h... " >&6; }
-if test "${ac_cv_header_zlib_h+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_header_zlib_h=$ac_header_preproc
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
-$as_echo "$ac_cv_header_zlib_h" >&6; }
-
-fi
-if test $ac_cv_header_zlib_h = yes; then
- LIBZ='-lz'
-fi
-
-
-fi
-
-fi
-if test x$with_zlib != xno && test -n "$LIBZ"; then
- CFLAGS="$CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
- LDFLAGS="$LDFLAGS $LIBZ"
- SYSTEM_ZLIB=yes
-fi
-
-
-# check Apple's `-isysroot' option and duplicate it to LDFLAGS if required --
-# Apple TechNote 2137 recommends to include it in CFLAGS but not in LDFLAGS
-
-{ $as_echo "$as_me:$LINENO: checking whether CFLAGS includes -isysroot option" >&5
-$as_echo_n "checking whether CFLAGS includes -isysroot option... " >&6; }
-case "$CFLAGS" in
-*sysroot* )
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- { $as_echo "$as_me:$LINENO: checking whether LDFLAGS includes -isysroot option" >&5
-$as_echo_n "checking whether LDFLAGS includes -isysroot option... " >&6; }
- case "$LDFLAGS" in
- *sysroot* )
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- ;;
- *)
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- isysroot_dir=`echo ${CFLAGS} | tr '\t' ' ' | sed 's/^.*-isysroot *//;s/ .*//'`
- { $as_echo "$as_me:$LINENO: WARNING: -isysroot ${isysroot_dir} is added to LDFLAGS" >&5
-$as_echo "$as_me: WARNING: -isysroot ${isysroot_dir} is added to LDFLAGS" >&2;}
- LDFLAGS="-isysroot ${isysroot_dir} ${LDFLAGS}"
- ;;
- esac
- ;;
-*)
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- ;;
-esac
-
-
-# Whether to use Mac OS resource-based fonts.
-
-# don't quote AS_HELP_STRING!
-
-# Check whether --with-old-mac-fonts was given.
-if test "${with_old_mac_fonts+set}" = set; then
- withval=$with_old_mac_fonts;
-fi
-
-if test x$with_old_mac_fonts = xyes; then
- orig_LDFLAGS="${LDFLAGS}"
- { $as_echo "$as_me:$LINENO: checking CoreServices & ApplicationServices of Mac OS X" >&5
-$as_echo_n "checking CoreServices & ApplicationServices of Mac OS X... " >&6; }
- FT2_EXTRA_LIBS="-Wl,-framework,CoreServices -Wl,-framework,ApplicationServices"
- LDFLAGS="$LDFLAGS $FT2_EXTRA_LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
-
-int
-main ()
-{
-
-
- short res = 0;
-
-
- UseResFile( res );
-
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- { $as_echo "$as_me:$LINENO: checking OS_INLINE macro is ANSI compatible" >&5
-$as_echo_n "checking OS_INLINE macro is ANSI compatible... " >&6; }
- orig_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
-
-int
-main ()
-{
-
-
- /* OSHostByteOrder() is typed as OS_INLINE */
- int32_t os_byte_order = OSHostByteOrder();
-
-
- if ( OSBigEndian != os_byte_order )
- return 1;
-
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_ANSI_OS_INLINE=1"
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no, ANSI incompatible" >&5
-$as_echo "no, ANSI incompatible" >&6; }
- CFLAGS="$orig_CFLAGS"
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- { $as_echo "$as_me:$LINENO: checking type ResourceIndex" >&5
-$as_echo_n "checking type ResourceIndex... " >&6; }
- orig_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-# include <Resources.h>
-#endif
-
-
-int
-main ()
-{
-
-
- ResourceIndex i = 0;
- return i;
-
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$orig_CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_TYPE_RESOURCE_INDEX"
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- CFLAGS="$orig_CFLAGS"
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: not found" >&5
-$as_echo "not found" >&6; }
- LDFLAGS="${orig_LDFLAGS}"
- CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-else
- case x$target_os in
- xdarwin*)
- CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
- ;;
- *) ;;
- esac
-fi
-
-
-# Whether to use FileManager which is deprecated since Mac OS X 10.4.
-
-
-# Check whether --with-fsspec was given.
-if test "${with_fsspec+set}" = set; then
- withval=$with_fsspec;
-fi
-
-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
- { $as_echo "$as_me:$LINENO: checking FSSpec-based FileManager" >&5
-$as_echo_n "checking FSSpec-based FileManager... " >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
-
-int
-main ()
-{
-
-
- 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 );
-
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-
-# Whether to use FileManager in Carbon since MacOS 9.x.
-
-
-# Check whether --with-fsref was given.
-if test "${with_fsref+set}" = set; then
- withval=$with_fsref;
-fi
-
-if test x$with_fsref = xno; then
- { $as_echo "$as_me:$LINENO: WARNING:
-*** WARNING
- FreeType2 built without FSRef API cannot load
- data-fork fonts on MacOS, except of XXX.dfont.
- " >&5
-$as_echo "$as_me: WARNING:
-*** WARNING
- FreeType2 built without FSRef API cannot load
- data-fork fonts on MacOS, except of XXX.dfont.
- " >&2;}
- CFLAGS="$CFLAGS -DHAVE_FSREF=0"
-elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
- { $as_echo "$as_me:$LINENO: checking FSRef-based FileManager" >&5
-$as_echo_n "checking FSRef-based FileManager... " >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
-
-int
-main ()
-{
-
-
- 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
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSREF=1"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_FSREF=0"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-
-# Whether to use QuickDraw API in ToolBox which is deprecated since
-# Mac OS X 10.4.
-
-
-# Check whether --with-quickdraw-toolbox was given.
-if test "${with_quickdraw_toolbox+set}" = set; then
- withval=$with_quickdraw_toolbox;
-fi
-
-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
- { $as_echo "$as_me:$LINENO: checking QuickDraw FontManager functions in ToolBox" >&5
-$as_echo_n "checking QuickDraw FontManager functions in ToolBox... " >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Fonts.h>
-#endif
-
-
-int
-main ()
-{
-
-
- Str255 familyName;
- SInt16 familyID = 0;
- FMInput* fmIn = NULL;
- FMOutput* fmOut = NULL;
-
-
- GetFontName( familyID, familyName );
- GetFNum( familyName, &familyID );
- fmOut = FMSwapFont( fmIn );
-
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-
-# Whether to use QuickDraw API in Carbon which is deprecated since
-# Mac OS X 10.4.
-
-
-# Check whether --with-quickdraw-carbon was given.
-if test "${with_quickdraw_carbon+set}" = set; then
- withval=$with_quickdraw_carbon;
-fi
-
-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
- { $as_echo "$as_me:$LINENO: checking QuickDraw FontManager functions in Carbon" >&5
-$as_echo_n "checking QuickDraw FontManager functions in Carbon... " >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Fonts.h>
-#endif
-
-
-int
-main ()
-{
-
-
- 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 );
-
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-
-# Whether to use AppleTypeService since Mac OS X.
-
-# don't quote AS_HELP_STRING!
-
-# Check whether --with-ats was given.
-if test "${with_ats+set}" = set; then
- withval=$with_ats;
-fi
-
-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
- { $as_echo "$as_me:$LINENO: checking AppleTypeService functions" >&5
-$as_echo_n "checking AppleTypeService functions... " >&6; }
- cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-#include <Carbon/Carbon.h>
-
-
-int
-main ()
-{
-
-
- FSSpec* pathSpec;
-
-
- ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
-#if HAVE_FSSPEC
- ATSFontGetFileSpecification( 0, pathSpec );
-#endif
-
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
- CFLAGS="$CFLAGS -DHAVE_ATS=1"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: not found" >&5
-$as_echo "not found" >&6; }
- CFLAGS="$CFLAGS -DHAVE_ATS=0"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-case "$CFLAGS" in
- *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
- { $as_echo "$as_me:$LINENO: WARNING:
-*** WARNING
- FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
- thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
- " >&5
-$as_echo "$as_me: WARNING:
-*** WARNING
- FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
- thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
- " >&2;}
- CFLAGS="$CFLAGS "'-I$(TOP_DIR)/builds/mac/'
- ;;
- *)
- ;;
-esac
-
-
-
-
-
-
-
-
-
-case `pwd` in
- *\ * | *\ *)
- { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
-esac
-
-
-
-macro_version='2.2.4'
-macro_revision='1.2976'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
- for ac_i in 1 2 3 4 5 6 7; do
- ac_script="$ac_script$as_nl$ac_script"
- done
- echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
- $as_unset ac_script || ac_script=
- if test -z "$SED"; then
- ac_path_SED_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
-# Check for GNU ac_path_SED and select it if it is found.
- # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
- ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo '' >> "conftest.nl"
- "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_SED_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_SED="$ac_path_SED"
- ac_path_SED_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_SED_found && break 3
- done
- done
-done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_SED"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
- fi
-else
- ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
- rm -f conftest.sed
-
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
- then ac_cv_path_FGREP="$GREP -F"
- else
- if test -z "$FGREP"; then
- ac_path_FGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in fgrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
-# Check for GNU ac_path_FGREP and select it if it is found.
- # Check for GNU $ac_path_FGREP
-case `"$ac_path_FGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'FGREP' >> "conftest.nl"
- "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_FGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_FGREP="$ac_path_FGREP"
- ac_path_FGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_FGREP_found && break 3
- done
- done
-done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_FGREP"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
- fi
-else
- ac_cv_path_FGREP=$FGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
- FGREP="$ac_cv_path_FGREP"
-
-
-test -z "$GREP" && GREP=grep
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | ?:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
- while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- { $as_echo "$as_me:$LINENO: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
- done
- : ${lt_cv_path_NM=no}
-fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test "$lt_cv_path_NM" != "no"; then
- NM="$lt_cv_path_NM"
-else
- # Didn't find any BSD compatible name lister, look for dumpbin.
- if test -n "$ac_tool_prefix"; then
- for ac_prog in "dumpbin -symbols" "link -dump -symbols"
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DUMPBIN"; then
- ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-DUMPBIN=$ac_cv_prog_DUMPBIN
-if test -n "$DUMPBIN"; then
- { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$DUMPBIN" && break
- done
-fi
-if test -z "$DUMPBIN"; then
- ac_ct_DUMPBIN=$DUMPBIN
- for ac_prog in "dumpbin -symbols" "link -dump -symbols"
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DUMPBIN"; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
-if test -n "$ac_ct_DUMPBIN"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_DUMPBIN" && break
-done
-
- if test "x$ac_ct_DUMPBIN" = x; then
- DUMPBIN=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- DUMPBIN=$ac_ct_DUMPBIN
- fi
-fi
-
-
- if test "$DUMPBIN" != ":"; then
- NM="$DUMPBIN"
- fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_nm_interface="BSD nm"
- echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:7276: $ac_compile\"" >&5)
- (eval "$ac_compile" 2>conftest.err)
- cat conftest.err >&5
- (eval echo "\"\$as_me:7279: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
- (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
- cat conftest.err >&5
- (eval echo "\"\$as_me:7282: output\"" >&5)
- cat conftest.out >&5
- if $GREP 'External.*some_variable' conftest.out > /dev/null; then
- lt_cv_nm_interface="MS dumpbin"
- fi
- rm -f conftest*
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- # Make teststring a little bigger before we do anything with it.
- # a 1K string should be a reasonable start.
- for i in 1 2 3 4 5 6 7 8 ; do
- teststring=$teststring$teststring
- done
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
- = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- # Only check the string length outside the loop.
- lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
- teststring=
- # Add a significant safety factor because C++ compilers can tack on
- # massive amounts of additional arguments before passing them to the
- # linker. It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-
-fi
-
-if test -n $lt_cv_sys_max_cmd_len ; then
- { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: none" >&5
-$as_echo "none" >&6; }
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-
-
-
-
-
-: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-
-{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
-$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
- = c,a/b,, \
- && eval 'test $(( 1 + 1 )) -eq 2 \
- && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
- && xsi_shell=yes
-{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
-$as_echo "$xsi_shell" >&6; }
-
-
-{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
-$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
- >/dev/null 2>&1 \
- && lt_shell_append=yes
-{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5
-$as_echo "$lt_shell_append" >&6; }
-
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- lt_unset=unset
-else
- lt_unset=false
-fi
-
-
-
-
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- lt_SP2NL='tr \040 \012'
- lt_NL2SP='tr \015\012 \040\040'
- ;;
- *) # EBCDIC based system
- lt_SP2NL='tr \100 \n'
- lt_NL2SP='tr \r\n \100\100'
- ;;
-esac
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[4-9]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[45]*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[3-9]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-*nto* | *qnx*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-tpf*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:$LINENO: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-fi
-
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
- ac_ct_STRIP=$STRIP
- # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_STRIP"; then
- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_STRIP" = x; then
- STRIP=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-test -z "$STRIP" && STRIP=:
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-test -z "$RANLIB" && RANLIB=:
-
-
-
-
-
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*)
- if test "$host_cpu" = ia64; then
- symcode='[ABCDEGRST]'
- fi
- ;;
-irix* | nonstopux*)
- symcode='[BCDEGRST]'
- ;;
-osf*)
- symcode='[BCDEGQRST]'
- ;;
-solaris*)
- symcode='[BDRT]'
- ;;
-sco3.2v5*)
- symcode='[DT]'
- ;;
-sysv4.2uw2*)
- symcode='[DT]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[ABDT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Fake it for dumpbin and say T for any non-static function
- # and D for any global variable.
- # Also find C++ and __fastcall symbols from MSVC++,
- # which start with @ or ?.
- lt_cv_sys_global_symbol_pipe="$AWK '"\
-" {last_section=section; section=\$ 3};"\
-" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-" \$ 0!~/External *\|/{next};"\
-" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-" {if(hide[section]) next};"\
-" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-" s[1]~/^[@?]/{print s[1], s[1]; next};"\
-" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-" ' prfx=^$ac_symprfx"
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
- (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
- cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- void *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
- { "@PROGRAM@", (void *) 0 },
-_LT_EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
- cat <<\_LT_EOF >> conftest.$ac_ext
- {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- { $as_echo "$as_me:$LINENO: result: failed" >&5
-$as_echo "failed" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
- enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '#line 8392 "configure"' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*|s390*-*tpf*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- lt_cv_cc_needs_belf=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- lt_cv_cc_needs_belf=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-sparc*-*solaris*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-esac
-
-need_locks="$enable_libtool_lock"
-
-
- case $host_os in
- rhapsody* | darwin*)
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DSYMUTIL"; then
- ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
- { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
- ac_ct_DSYMUTIL=$DSYMUTIL
- # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DSYMUTIL"; then
- ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DSYMUTIL" = x; then
- DSYMUTIL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- DSYMUTIL=$ac_ct_DSYMUTIL
- fi
-else
- DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NMEDIT"; then
- ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
- { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
- ac_ct_NMEDIT=$NMEDIT
- # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_NMEDIT"; then
- ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_NMEDIT="nmedit"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_NMEDIT" = x; then
- NMEDIT=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- NMEDIT=$ac_ct_NMEDIT
- fi
-else
- NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
-set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$LIPO"; then
- ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-LIPO=$ac_cv_prog_LIPO
-if test -n "$LIPO"; then
- { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LIPO"; then
- ac_ct_LIPO=$LIPO
- # Extract the first word of "lipo", so it can be a program name with args.
-set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_LIPO"; then
- ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_LIPO="lipo"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
-if test -n "$ac_ct_LIPO"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_LIPO" = x; then
- LIPO=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- LIPO=$ac_ct_LIPO
- fi
-else
- LIPO="$ac_cv_prog_LIPO"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OTOOL"; then
- ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL=$ac_cv_prog_OTOOL
-if test -n "$OTOOL"; then
- { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL"; then
- ac_ct_OTOOL=$OTOOL
- # Extract the first word of "otool", so it can be a program name with args.
-set dummy otool; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OTOOL"; then
- ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_OTOOL="otool"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
-if test -n "$ac_ct_OTOOL"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OTOOL" = x; then
- OTOOL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- OTOOL=$ac_ct_OTOOL
- fi
-else
- OTOOL="$ac_cv_prog_OTOOL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OTOOL64"; then
- ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL64=$ac_cv_prog_OTOOL64
-if test -n "$OTOOL64"; then
- { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL64"; then
- ac_ct_OTOOL64=$OTOOL64
- # Extract the first word of "otool64", so it can be a program name with args.
-set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OTOOL64"; then
- ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_OTOOL64="otool64"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
-if test -n "$ac_ct_OTOOL64"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OTOOL64" = x; then
- OTOOL64=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- OTOOL64=$ac_ct_OTOOL64
- fi
-else
- OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_apple_cc_single_mod=no
- if test -z "${LT_MULTI_MODULE}"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- rm -rf libconftest.dylib*
- echo "int foo(void){return 1;}" > conftest.c
- echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&5
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
- _lt_result=$?
- if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
- lt_cv_apple_cc_single_mod=yes
- else
- cat conftest.err >&5
- fi
- rm -rf libconftest.dylib*
- rm -f conftest.*
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
- { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- lt_cv_ld_exported_symbols_list=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- lt_cv_ld_exported_symbols_list=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
- case $host_os in
- rhapsody* | darwin1.[012])
- _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- 10.[012]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test "$lt_cv_apple_cc_single_mod" = "yes"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
- _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
- else
- _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
- fi
- if test "$DSYMUTIL" != ":"; then
- _lt_dsymutil='~$DSYMUTIL $lib || :'
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-
-
-for ac_header in dlfcn.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-# Set options
-enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
-set dummy ${ac_tool_prefix}as; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AS+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AS"; then
- ac_cv_prog_AS="$AS" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_AS="${ac_tool_prefix}as"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-AS=$ac_cv_prog_AS
-if test -n "$AS"; then
- { $as_echo "$as_me:$LINENO: result: $AS" >&5
-$as_echo "$AS" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AS"; then
- ac_ct_AS=$AS
- # Extract the first word of "as", so it can be a program name with args.
-set dummy as; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AS+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AS"; then
- ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_AS="as"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AS=$ac_cv_prog_ac_ct_AS
-if test -n "$ac_ct_AS"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AS" = x; then
- AS="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- AS=$ac_ct_AS
- fi
-else
- AS="$ac_cv_prog_AS"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DLLTOOL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DLLTOOL"; then
- ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
- { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
- ac_ct_DLLTOOL=$DLLTOOL
- # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DLLTOOL"; then
- ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DLLTOOL" = x; then
- DLLTOOL="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- DLLTOOL=$ac_ct_DLLTOOL
- fi
-else
- DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OBJDUMP"; then
- ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
- { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
- ac_ct_OBJDUMP=$OBJDUMP
- # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OBJDUMP"; then
- ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OBJDUMP" = x; then
- OBJDUMP="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- OBJDUMP=$ac_ct_OBJDUMP
- fi
-else
- OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
- ;;
-esac
-
-test -z "$AS" && AS=as
-
-
-
-
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-
- enable_dlopen=no
-
-
-
- # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
- enableval=$enable_shared; p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_shared=yes
-fi
-
-
-
-
-
-
-
-
-
- # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then
- enableval=$enable_static; p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_static=yes
-fi
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then
- withval=$with_pic; pic_mode="$withval"
-else
- pic_mode=default
-fi
-
-
-test -z "$pic_mode" && pic_mode=default
-
-
-
-
-
-
-
- # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
- enableval=$enable_fast_install; p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac
-else
- enable_fast_install=yes
-fi
-
-
-
-
-
-
-
-
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-test -z "$LN_S" && LN_S="ln -s"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
-fi
-
-{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/${ac_tool_prefix}file; then
- lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- { $as_echo "$as_me:$LINENO: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/file; then
- lt_cv_path_MAGIC_CMD="$ac_dir/file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- else
- MAGIC_CMD=:
- fi
-fi
-
- fi
- ;;
-esac
-
-# Use C for the default configuration in the libtool script
-
-lt_save_CC="$CC"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-if test -n "$compiler"; then
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
- lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-
- { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_rtti_exceptions=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="-fno-rtti -fno-exceptions"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:10086: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:10090: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_rtti_exceptions=yes
- fi
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
- lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
- :
-fi
-
-fi
-
-
-
-
-
-
- lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
- if test "$GCC" = yes; then
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- lt_prog_compiler_pic='-fPIC'
- ;;
- m68k)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
- esac
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- ;;
-
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared=no
- enable_shared=no
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- lt_prog_compiler_pic='-fPIC -shared'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic=-Kconform_pic
- fi
- ;;
-
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- else
- lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc* | ifort*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- ccc*)
- lt_prog_compiler_wl='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
- xl*)
- # IBM XL C 8.0/Fortran 10.1 on PPC
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-qpic'
- lt_prog_compiler_static='-qstaticlink'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl=''
- ;;
- esac
- ;;
- esac
- ;;
-
- newsos6)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- lt_prog_compiler_pic='-fPIC -shared'
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- rdos*)
- lt_prog_compiler_static='-non_shared'
- ;;
-
- solaris*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl='-Qoption ld '
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_prog_compiler_pic='-Kconform_pic'
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_can_build_shared=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic='-pic'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared=no
- ;;
- esac
- fi
-
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic=
- ;;
- *)
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
-
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
- { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic_works=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:10410: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:10414: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works=yes
- fi
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
- case $lt_prog_compiler_pic in
- "" | " "*) ;;
- *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
- esac
-else
- lt_prog_compiler_pic=
- lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-
-
-
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works=yes
- fi
- else
- lt_cv_prog_compiler_static_works=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o=no
- $RM -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:10515: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:10519: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w . 2>&5
- $RM conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
- $RM out/* && rmdir out
- cd ..
- $RM -r conftest
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o=no
- $RM -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:10570: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:10574: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w . 2>&5
- $RM conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
- $RM out/* && rmdir out
- cd ..
- $RM -r conftest
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
- hard_links=yes
- $RM conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- runpath_var=
- allow_undefined_flag=
- always_export_symbols=no
- archive_cmds=
- archive_expsym_cmds=
- compiler_needs_object=no
- enable_shared_with_static_runtimes=no
- export_dynamic_flag_spec=
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- hardcode_automatic=no
- hardcode_direct=no
- hardcode_direct_absolute=no
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld=
- hardcode_libdir_separator=
- hardcode_minus_L=no
- hardcode_shlibpath_var=unsupported
- inherit_rpath=no
- link_all_deplibs=unknown
- module_cmds=
- module_expsym_cmds=
- old_archive_from_new_cmds=
- old_archive_from_expsyms_cmds=
- thread_safe_flag_spec=
- whole_archive_flag_spec=
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
- extract_expsyms_cmds=
-
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[3-9]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds=''
- ;;
- m68k)
- archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
-
- beos*)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- interix[3-9]*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | tpf* | k*bsd*-gnu)
- tmp_diet=no
- if test "$host_os" = linux-dietlibc; then
- case $cc_basename in
- diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
- esac
- fi
- if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
- && test "$tmp_diet" = no
- then
- tmp_addflag=
- tmp_sharedflag='-shared'
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
- tmp_sharedflag='-qmkshrobj'
- tmp_addflag= ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
- compiler_needs_object=yes
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- esac
- archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
-
- case $cc_basename in
- xlf*)
- # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
- if test "x$supports_anon_versioning" = xyes; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
- else
- ld_shlibs=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = no; then
- runpath_var=
- hardcode_libdir_flag_spec=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix[4-9]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds=''
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- file_list_spec='${wl}-f,'
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" &&
- strings "$collect2name" | $GREP resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag=' ${wl}-bernotok'
- allow_undefined_flag=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
- archive_cmds_need_lc=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds=''
- ;;
- m68k)
- archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes=yes
- ;;
-
- darwin* | rhapsody*)
-
-
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
- hardcode_shlibpath_var=unsupported
- whole_archive_flag_spec=''
- link_all_deplibs=yes
- allow_undefined_flag="$_lt_dar_allow_undefined"
- if test "$GCC" = "yes"; then
- output_verbose_link_cmd=echo
- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
- else
- ld_shlibs=no
- fi
-
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- export_dynamic_flag_spec='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_flag_spec_ld='+b $libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- export_dynamic_flag_spec='${wl}-E'
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- ;;
- *)
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- export_dynamic_flag_spec='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
- cat >conftest.$ac_ext <<_ACEOF
-int foo(void) {}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS="$save_LDFLAGS"
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- inherit_rpath=yes
- link_all_deplibs=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- newsos6)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_shlibpath_var=no
- ;;
-
- *nto* | *qnx*)
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- hardcode_direct_absolute=yes
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
- $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_separator=:
- ;;
-
- solaris*)
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
- wlarc=''
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
- ;;
- *)
- wlarc='${wl}'
- archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- ;;
- esac
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds='$CC -r -o $output$reload_objs'
- hardcode_direct=no
- ;;
- motorola)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag='${wl}-z,text'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag='${wl}-z,text'
- allow_undefined_flag='${wl}-z,nodefs'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='${wl}-R,$libdir'
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- export_dynamic_flag_spec='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
-
- if test x$host_vendor = xsni; then
- case $host in
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- ;;
- esac
- fi
- fi
-
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
-
-with_gnu_ld=$with_gnu_ld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl
- pic_flag=$lt_prog_compiler_pic
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
- if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
- (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- then
- archive_cmds_need_lc=no
- else
- archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
- ;;
- esac
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test "$GCC" = yes; then
- case $host_os in
- darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
- *) lt_awk_arg="/^libraries:/" ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
- else
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary.
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path/$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
- else
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
- lt_foo="";
- lt_count=0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo="/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[lt_foo]++; }
- if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
- sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[4-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- case $host_cpu in
- powerpc)
- # Since July 2007 AmigaOS4 officially supports .so libraries.
- # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- ;;
- m68k)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
- esac
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname~
- if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
- eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
- fi'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # Some binutils ld are patched to set DT_RUNPATH
- save_LDFLAGS=$LDFLAGS
- save_libdir=$libdir
- eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
- LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
- shlibpath_overrides_runpath=yes
-fi
-
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
- libdir=$save_libdir
-
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-*nto* | *qnx*)
- version_type=qnx
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='ldqnx.so'
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[89] | openbsd2.[89].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-tpf*)
- # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" ||
- test -n "$runpath_var" ||
- test "X$hardcode_automatic" = "Xyes" ; then
-
- # We can hardcode non-existent directories.
- if test "$hardcode_direct" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
- test "$hardcode_minus_L" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test "$hardcode_action" = relink ||
- test "$inherit_rpath" = yes; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-
-
-
-
- if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dl_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dl_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
-
-fi
-
- ;;
-
- *)
- { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
-$as_echo_n "checking for shl_load... " >&6; }
-if test "${ac_cv_func_shl_load+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shl_load
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_shl_load || defined __stub___shl_load
-choke me
-#endif
-
-int
-main ()
-{
-return shl_load ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_shl_load=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_shl_load=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-$as_echo "$ac_cv_func_shl_load" >&6; }
-if test $ac_cv_func_shl_load = yes; then
- lt_cv_dlopen="shl_load"
-else
- { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dld_shl_load=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dld_shl_load=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test $ac_cv_lib_dld_shl_load = yes; then
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
- { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
-$as_echo_n "checking for dlopen... " >&6; }
-if test "${ac_cv_func_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef dlopen
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_dlopen || defined __stub___dlopen
-choke me
-#endif
-
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-$as_echo "$ac_cv_func_dlopen" >&6; }
-if test $ac_cv_func_dlopen = yes; then
- lt_cv_dlopen="dlopen"
-else
- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dl_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dl_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test $ac_cv_lib_dl_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_svld_dlopen=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_svld_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test $ac_cv_lib_svld_dlopen = yes; then
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
- { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link ();
-int
-main ()
-{
-return dld_link ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dld_dld_link=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dld_dld_link=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test $ac_cv_lib_dld_dld_link = yes; then
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
-#line 13362 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}
-_LT_EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- lt_cv_dlopen_self_static=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
-#line 13462 "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}
-_LT_EOF
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self_static=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-striplib=
-old_striplib=
-{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- fi
- ;;
- *)
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- ;;
- esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
- # Report which library types will actually be built
- { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
- { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
- { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
- test "$can_build_shared" = "no" && enable_shared=no
-
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case $host_os in
- aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
- aix[4-9]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
- esac
- { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
- { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
- # Make sure either enable_shared or enable_static is yes.
- test "$enable_shared" = yes || enable_static=yes
- { $as_echo "$as_me:$LINENO: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-
-
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
-
-
-
-
-
-
-
-
-
-
-
-
- ac_config_commands="$ac_config_commands libtool"
-
-
-
-
-# Only expand once:
-
-
-
-
-
-
-
-
-# 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="$ac_config_headers ftconfig.h:ftconfig.in"
-
-
-# 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="$ac_config_files unix-cc.mk:unix-cc.in unix-def.mk:unix-def.in freetype-config freetype2.pc:freetype2.in"
-
-
-# re-generate the Jamfile to use libtool now
-#
-# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# Save the log message, to keep $[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by FreeType $as_me 2.3.7, which was
-generated by GNU Autoconf 2.62. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-FreeType config.status 2.3.7
-configured by $0, generated by GNU Autoconf 2.62,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- { $as_echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in SED \
-GREP \
-EGREP \
-FGREP \
-LD \
-NM \
-LN_S \
-lt_SP2NL \
-lt_NL2SP \
-reload_flag \
-deplibs_check_method \
-file_magic_cmd \
-AR \
-AR_FLAGS \
-STRIP \
-RANLIB \
-CC \
-CFLAGS \
-compiler \
-lt_cv_sys_global_symbol_pipe \
-lt_cv_sys_global_symbol_to_cdecl \
-lt_cv_sys_global_symbol_to_c_name_address \
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
-lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
-lt_prog_compiler_pic \
-lt_prog_compiler_static \
-lt_cv_prog_compiler_c_o \
-need_locks \
-DSYMUTIL \
-NMEDIT \
-LIPO \
-OTOOL \
-OTOOL64 \
-shrext_cmds \
-export_dynamic_flag_spec \
-whole_archive_flag_spec \
-compiler_needs_object \
-with_gnu_ld \
-allow_undefined_flag \
-no_undefined_flag \
-hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
-hardcode_libdir_separator \
-fix_srcfile_path \
-exclude_expsyms \
-include_expsyms \
-file_list_spec \
-variables_saved_for_relink \
-libname_spec \
-library_names_spec \
-soname_spec \
-finish_eval \
-old_striplib \
-striplib; do
- case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-# Double-quote double-evaled strings.
-for var in reload_cmds \
-old_postinstall_cmds \
-old_postuninstall_cmds \
-old_archive_cmds \
-extract_expsyms_cmds \
-old_archive_from_new_cmds \
-old_archive_from_expsyms_cmds \
-archive_cmds \
-archive_expsym_cmds \
-module_cmds \
-module_expsym_cmds \
-export_symbols_cmds \
-prelink_cmds \
-postinstall_cmds \
-postuninstall_cmds \
-finish_cmds \
-sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec; do
- case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
- ;;
-esac
-
-ac_aux_dir='$ac_aux_dir'
-xsi_shell='$xsi_shell'
-lt_shell_append='$lt_shell_append'
-
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
-fi
-
-
- PACKAGE='$PACKAGE'
- VERSION='$VERSION'
- TIMESTAMP='$TIMESTAMP'
- RM='$RM'
- ofile='$ofile'
-
-
-
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
- "ftconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS ftconfig.h:ftconfig.in" ;;
- "unix-cc.mk") CONFIG_FILES="$CONFIG_FILES unix-cc.mk:unix-cc.in" ;;
- "unix-def.mk") CONFIG_FILES="$CONFIG_FILES unix-def.mk:unix-def.in" ;;
- "freetype-config") CONFIG_FILES="$CONFIG_FILES freetype-config" ;;
- "freetype2.pc") CONFIG_FILES="$CONFIG_FILES freetype2.pc:freetype2.in" ;;
-
- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $as_echo "$as_me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr='
-'
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
- { (exit 1); exit 1; }; }
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- prefix = substr(line, 1, index(line, defundef) - 1)
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", line, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
- { (exit 1); exit 1; }; }
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- ac_file_inputs="$ac_file_inputs '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; } ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
- esac \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$tmp/config.h" "$ac_file" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
-$as_echo "$as_me: error: could not create -" >&2;}
- { (exit 1); exit 1; }; }
- fi
- ;;
-
- :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
- esac
-
-
- case $ac_file$ac_mode in
- "libtool":C)
-
- # See if we are running on zsh, and set the options which allow our
- # commands through without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
-
- cfgfile="${ofile}T"
- trap "$RM \"$cfgfile\"; exit 1" 1 2 15
- $RM "$cfgfile"
-
- cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gordon Matzigkeit, 1996
-#
-# This file is part of GNU Libtool.
-#
-# GNU Libtool 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.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-# The names of the tagged configurations supported by this script.
-available_tags=""
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Which release of libtool.m4 was used?
-macro_version=$macro_version
-macro_revision=$macro_revision
-
-# Assembler program.
-AS=$AS
-
-# DLL creation program.
-DLLTOOL=$DLLTOOL
-
-# Object dumper program.
-OBJDUMP=$OBJDUMP
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# What type of objects to build.
-pic_mode=$pic_mode
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="\$SED -e 1s/^X//"
-
-# A grep program that handles long lines.
-GREP=$lt_GREP
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# A literal string matcher.
-FGREP=$lt_FGREP
-
-# A BSD- or MS-compatible name lister.
-NM=$lt_NM
-
-# Whether we need soft or hard links.
-LN_S=$lt_LN_S
-
-# What is the maximum length of a command?
-max_cmd_len=$max_cmd_len
-
-# Object file suffix (normally "o").
-objext=$ac_objext
-
-# Executable file suffix (normally "").
-exeext=$exeext
-
-# whether the shell understands "unset".
-lt_unset=$lt_unset
-
-# turn spaces into newlines.
-SP2NL=$lt_lt_SP2NL
-
-# turn newlines into spaces.
-NL2SP=$lt_lt_NL2SP
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == "file_magic".
-file_magic_cmd=$lt_file_magic_cmd
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A symbol stripping program.
-STRIP=$lt_STRIP
-
-# Commands used to install an old-style archive.
-RANLIB=$lt_RANLIB
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# A C compiler.
-LTCC=$lt_CC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_CFLAGS
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration.
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair.
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# Transform the output of nm in a C name address pair when lib prefix is needed.
-global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
-
-# Used to examine libraries when file_magic_cmd begins with "file".
-MAGIC_CMD=$MAGIC_CMD
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
-DSYMUTIL=$lt_DSYMUTIL
-
-# Tool to change global to local symbols on Mac OS X.
-NMEDIT=$lt_NMEDIT
-
-# Tool to manipulate fat objects and archives on Mac OS X.
-LIPO=$lt_LIPO
-
-# ldd/readelf like tool for Mach-O binaries on Mac OS X.
-OTOOL=$lt_OTOOL
-
-# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
-OTOOL64=$lt_OTOOL64
-
-# Old archive suffix (normally "a").
-libext=$libext
-
-# Shared library suffix (normally ".so").
-shrext_cmds=$lt_shrext_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at link time.
-variables_saved_for_relink=$lt_variables_saved_for_relink
-
-# Do we need the "lib" prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Library versioning type.
-version_type=$version_type
-
-# Shared library runtime path variable.
-runpath_var=$runpath_var
-
-# Shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Command to use after installation of a shared archive.
-postinstall_cmds=$lt_postinstall_cmds
-
-# Command to use after uninstallation of a shared archive.
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# As "finish_cmds", except a single script fragment to be evaled but
-# not shown.
-finish_eval=$lt_finish_eval
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Compile-time system search path for libraries.
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds
-
-# A language specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking. This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
-# library is relocated.
-hardcode_direct_absolute=$hardcode_direct_absolute
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Set to "yes" if building a shared library automatically hardcodes DIR
-# into the library and all subsequent libraries and executables linked
-# against it.
-hardcode_automatic=$hardcode_automatic
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
- case $host_os in
- aix3*)
- cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-_LT_EOF
- ;;
- esac
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- case $xsi_shell in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
-}
-
-# func_basename file
-func_basename ()
-{
- func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-# dirname: Compute the dirname of FILE. If nonempty,
-# add APPEND to the result, otherwise set result
-# to NONDIR_REPLACEMENT.
-# value returned in "$func_dirname_result"
-# basename: Compute filename of FILE.
-# value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
- func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
- # positional parameters, so assign one to ordinary parameter first.
- func_stripname_result=${3}
- func_stripname_result=${func_stripname_result#"${1}"}
- func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=${1%%=*}
- func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- case ${1} in
- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
- *) func_lo2o_result=${1} ;;
- esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=${#1}
-}
-
-_LT_EOF
- ;;
- *) # Bourne compatible functions.
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
- # Extract subdirectory from the argument.
- func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
- if test "X$func_dirname_result" = "X${1}"; then
- func_dirname_result="${3}"
- else
- func_dirname_result="$func_dirname_result${2}"
- fi
-}
-
-# func_basename file
-func_basename ()
-{
- func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
- case ${2} in
- .*) func_stripname_result=`$ECHO "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
- *) func_stripname_result=`$ECHO "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
- esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
- func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$1+=\$2"
-}
-_LT_EOF
- ;;
- *)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$1=\$$1\$2"
-}
-
-_LT_EOF
- ;;
- esac
-
-
- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
- ;;
- "ftconfig.h":H) mv ftconfig.h ftconfig.tmp
- sed 's|/undef|#undef|' < ftconfig.tmp > ftconfig.h
- rm ftconfig.tmp ;;
-
- esac
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-# end of configure.raw
diff --git a/Build/source/libs/freetype2/builds/unix/configure.ac b/Build/source/libs/freetype2/builds/unix/configure.ac
deleted file mode 100644
index 8de8e56fdae..00000000000
--- a/Build/source/libs/freetype2/builds/unix/configure.ac
+++ /dev/null
@@ -1,595 +0,0 @@
-# This file is part of the FreeType project.
-#
-# Process this file with autoconf to produce a configure script.
-#
-# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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], [2.3.7], [freetype@nongnu.org], [freetype])
-AC_CONFIG_SRCDIR([ftconfig.in])
-
-
-# Don't forget to update docs/VERSION.DLL!
-
-version_info='9:18:3'
-AC_SUBST([version_info])
-ft_version=`echo $version_info | tr : .`
-AC_SUBST([ft_version])
-
-
-# checks for system type
-
-AC_CANONICAL_BUILD
-AC_CANONICAL_HOST
-AC_CANONICAL_TARGET
-
-
-# checks for programs
-
-AC_PROG_CC
-AC_PROG_CPP
-AC_SUBST(EXEEXT)
-
-
-# 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/^.*\.//g'`
- fi
- AC_MSG_RESULT($EXEEXT_BUILD)
-else
- CC_BUILD=${CC}
- EXEEXT_BUILD=${EXEEXT}
-fi
-
-
-if test ! -z ${EXEEXT_BUILD}; then
- EXEEXT_BUILD=."${EXEEXT_BUILD}"
-fi
-AC_SUBST(CC_BUILD)
-AC_SUBST(EXEEXT_BUILD)
-
-
-
-# get compiler flags right
-
-if test "x$CC" = xgcc; then
- XX_CFLAGS="-Wall"
- XX_ANSIFLAGS="-pedantic -ansi"
-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])
-
-
-# auxiliary programs
-
-AC_CHECK_PROG([RMF], [rm], [rm -f])
-AC_CHECK_PROG([RMDIR], [rmdir], [rmdir])
-
-
-# Since this file will be finally moved to another directory we make
-# the path of the install script absolute. This small code snippet has
-# been taken from automake's `ylwrap' script.
-
-AC_PROG_INSTALL
-case "$INSTALL" in
-/*)
- ;;
-*/*)
- INSTALL="`pwd`/$INSTALL" ;;
-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])
-
-
-# checks for library functions
-
-# Here we check whether we can use our mmap file component.
-
-AC_FUNC_MMAP
-if test "$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])
-
-
-# check for system zlib
-
-# don't quote AS_HELP_STRING!
-AC_ARG_WITH([zlib],
- AS_HELP_STRING([--without-zlib],
- [use internal zlib instead of system-wide]))
-if test x$with_zlib != xno && test -z "$LIBZ"; then
- AC_CHECK_LIB([z], [gzsetparams], [AC_CHECK_HEADER([zlib.h], [LIBZ='-lz'])])
-fi
-if test x$with_zlib != xno && test -n "$LIBZ"; then
- CFLAGS="$CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
- LDFLAGS="$LDFLAGS $LIBZ"
- SYSTEM_ZLIB=yes
-fi
-
-
-# check Apple's `-isysroot' option and duplicate it to LDFLAGS if required --
-# Apple TechNote 2137 recommends to include it in CFLAGS but not in LDFLAGS
-
-AC_MSG_CHECKING([whether CFLAGS includes -isysroot option])
-case "$CFLAGS" in
-*sysroot* )
- AC_MSG_RESULT([yes])
- AC_MSG_CHECKING([whether LDFLAGS includes -isysroot option])
- case "$LDFLAGS" in
- *sysroot* )
- AC_MSG_RESULT([yes])
- ;;
- *)
- AC_MSG_RESULT([no])
- isysroot_dir=`echo ${CFLAGS} | tr '\t' ' ' | sed 's/^.*-isysroot *//;s/ .*//'`
- AC_MSG_WARN(-isysroot ${isysroot_dir} is added to LDFLAGS)
- LDFLAGS="-isysroot ${isysroot_dir} ${LDFLAGS}"
- ;;
- esac
- ;;
-*)
- AC_MSG_RESULT([no])
- ;;
-esac
-
-
-# Whether to use Mac OS resource-based fonts.
-
-# don't quote AS_HELP_STRING!
-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 <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
- ],
- [
-
- short res = 0;
-
-
- UseResFile( res );
-
- ])],
- [AC_MSG_RESULT([ok])
- AC_MSG_CHECKING([OS_INLINE macro is ANSI compatible])
- orig_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.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 <Carbon/Carbon.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"
- ],
- [AC_MSG_RESULT([no])
- CFLAGS="$orig_CFLAGS"
- ])],
- [AC_MSG_RESULT([not found])
- LDFLAGS="${orig_LDFLAGS}"
- CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"])
-else
- case x$target_os in
- xdarwin*)
- dnl AC_MSG_WARN([target 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 <Carbon/Carbon.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 <Carbon/Carbon.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 <Carbon/Carbon.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 <Carbon/Carbon.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.
-
-# don't quote AS_HELP_STRING!
-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([
-
-#include <Carbon/Carbon.h>
-
- ],
- [
-
- 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
-
-
-AC_SUBST([LIBZ])
-AC_SUBST([CFLAGS])
-AC_SUBST([LDFLAGS])
-AC_SUBST([FT2_EXTRA_LIBS])
-AC_SUBST([SYSTEM_ZLIB])
-
-
-LT_INIT(win32-dll)
-
-AC_SUBST([hardcode_libdir_flag_spec])
-AC_SUBST([wl])
-AC_SUBST([build_libtool_libs])
-
-
-# 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
- freetype-config
- freetype2.pc:freetype2.in])
-
-# re-generate the Jamfile to use libtool now
-#
-# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
-
-AC_OUTPUT
-
-# end of configure.raw
diff --git a/Build/source/libs/freetype2/builds/unix/configure.raw b/Build/source/libs/freetype2/builds/unix/configure.raw
deleted file mode 100644
index 0d67d3f3eb5..00000000000
--- a/Build/source/libs/freetype2/builds/unix/configure.raw
+++ /dev/null
@@ -1,595 +0,0 @@
-# This file is part of the FreeType project.
-#
-# Process this file with autoconf to produce a configure script.
-#
-# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/VERSION.DLL!
-
-version_info='9:18:3'
-AC_SUBST([version_info])
-ft_version=`echo $version_info | tr : .`
-AC_SUBST([ft_version])
-
-
-# checks for system type
-
-AC_CANONICAL_BUILD
-AC_CANONICAL_HOST
-AC_CANONICAL_TARGET
-
-
-# checks for programs
-
-AC_PROG_CC
-AC_PROG_CPP
-AC_SUBST(EXEEXT)
-
-
-# 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/^.*\.//g'`
- fi
- AC_MSG_RESULT($EXEEXT_BUILD)
-else
- CC_BUILD=${CC}
- EXEEXT_BUILD=${EXEEXT}
-fi
-
-
-if test ! -z ${EXEEXT_BUILD}; then
- EXEEXT_BUILD=."${EXEEXT_BUILD}"
-fi
-AC_SUBST(CC_BUILD)
-AC_SUBST(EXEEXT_BUILD)
-
-
-
-# get compiler flags right
-
-if test "x$CC" = xgcc; then
- XX_CFLAGS="-Wall"
- XX_ANSIFLAGS="-pedantic -ansi"
-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])
-
-
-# auxiliary programs
-
-AC_CHECK_PROG([RMF], [rm], [rm -f])
-AC_CHECK_PROG([RMDIR], [rmdir], [rmdir])
-
-
-# Since this file will be finally moved to another directory we make
-# the path of the install script absolute. This small code snippet has
-# been taken from automake's `ylwrap' script.
-
-AC_PROG_INSTALL
-case "$INSTALL" in
-/*)
- ;;
-*/*)
- INSTALL="`pwd`/$INSTALL" ;;
-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])
-
-
-# checks for library functions
-
-# Here we check whether we can use our mmap file component.
-
-AC_FUNC_MMAP
-if test "$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])
-
-
-# check for system zlib
-
-# don't quote AS_HELP_STRING!
-AC_ARG_WITH([zlib],
- AS_HELP_STRING([--without-zlib],
- [use internal zlib instead of system-wide]))
-if test x$with_zlib != xno && test -z "$LIBZ"; then
- AC_CHECK_LIB([z], [gzsetparams], [AC_CHECK_HEADER([zlib.h], [LIBZ='-lz'])])
-fi
-if test x$with_zlib != xno && test -n "$LIBZ"; then
- CFLAGS="$CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
- LDFLAGS="$LDFLAGS $LIBZ"
- SYSTEM_ZLIB=yes
-fi
-
-
-# check Apple's `-isysroot' option and duplicate it to LDFLAGS if required --
-# Apple TechNote 2137 recommends to include it in CFLAGS but not in LDFLAGS
-
-AC_MSG_CHECKING([whether CFLAGS includes -isysroot option])
-case "$CFLAGS" in
-*sysroot* )
- AC_MSG_RESULT([yes])
- AC_MSG_CHECKING([whether LDFLAGS includes -isysroot option])
- case "$LDFLAGS" in
- *sysroot* )
- AC_MSG_RESULT([yes])
- ;;
- *)
- AC_MSG_RESULT([no])
- isysroot_dir=`echo ${CFLAGS} | tr '\t' ' ' | sed 's/^.*-isysroot *//;s/ .*//'`
- AC_MSG_WARN(-isysroot ${isysroot_dir} is added to LDFLAGS)
- LDFLAGS="-isysroot ${isysroot_dir} ${LDFLAGS}"
- ;;
- esac
- ;;
-*)
- AC_MSG_RESULT([no])
- ;;
-esac
-
-
-# Whether to use Mac OS resource-based fonts.
-
-# don't quote AS_HELP_STRING!
-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 <Carbon/Carbon.h>
-# include <ApplicationServices/ApplicationServices.h>
-#else
-# include <ConditionalMacros.h>
-# include <Files.h>
-#endif
-
- ],
- [
-
- short res = 0;
-
-
- UseResFile( res );
-
- ])],
- [AC_MSG_RESULT([ok])
- AC_MSG_CHECKING([OS_INLINE macro is ANSI compatible])
- orig_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([
-
-#if defined(__GNUC__) && defined(__APPLE_CC__)
-# include <Carbon/Carbon.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 <Carbon/Carbon.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"
- ],
- [AC_MSG_RESULT([no])
- CFLAGS="$orig_CFLAGS"
- ])],
- [AC_MSG_RESULT([not found])
- LDFLAGS="${orig_LDFLAGS}"
- CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"])
-else
- case x$target_os in
- xdarwin*)
- dnl AC_MSG_WARN([target 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 <Carbon/Carbon.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 <Carbon/Carbon.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 <Carbon/Carbon.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 <Carbon/Carbon.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.
-
-# don't quote AS_HELP_STRING!
-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([
-
-#include <Carbon/Carbon.h>
-
- ],
- [
-
- 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
-
-
-AC_SUBST([LIBZ])
-AC_SUBST([CFLAGS])
-AC_SUBST([LDFLAGS])
-AC_SUBST([FT2_EXTRA_LIBS])
-AC_SUBST([SYSTEM_ZLIB])
-
-
-LT_INIT(win32-dll)
-
-AC_SUBST([hardcode_libdir_flag_spec])
-AC_SUBST([wl])
-AC_SUBST([build_libtool_libs])
-
-
-# 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
- freetype-config
- freetype2.pc:freetype2.in])
-
-# re-generate the Jamfile to use libtool now
-#
-# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
-
-AC_OUTPUT
-
-# end of configure.raw
diff --git a/Build/source/libs/freetype2/builds/unix/detect.mk b/Build/source/libs/freetype2/builds/unix/detect.mk
deleted file mode 100644
index e74af57308c..00000000000
--- a/Build/source/libs/freetype2/builds/unix/detect.mk
+++ /dev/null
@@ -1,91 +0,0 @@
-#
-# FreeType 2 configuration file to detect a UNIX host platform.
-#
-
-
-# Copyright 1996-2000, 2002, 2003, 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 /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/Build/source/libs/freetype2/builds/unix/freetype-config.in b/Build/source/libs/freetype2/builds/unix/freetype-config.in
deleted file mode 100644
index a3435222a4c..00000000000
--- a/Build/source/libs/freetype2/builds/unix/freetype-config.in
+++ /dev/null
@@ -1,157 +0,0 @@
-#! /bin/sh
-#
-# Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2008 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-exec_prefix_set=no
-includedir=@includedir@
-libdir=@libdir@
-enable_shared=@build_libtool_libs@
-wl=@wl@
-hardcode_libdir_flag_spec='@hardcode_libdir_flag_spec@'
-
-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
-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 @ft_version@
- exit 0
- ;;
- --ftversion)
- major=`grep define @prefix@/include/freetype2/freetype/freetype.h \
- | grep FREETYPE_MAJOR \
- | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- minor=`grep define @prefix@/include/freetype2/freetype/freetype.h \
- | grep FREETYPE_MINOR \
- | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- patch=`grep define @prefix@/include/freetype2/freetype/freetype.h \
- | grep FREETYPE_PATCH \
- | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- echo $major.$minor.$patch
- exit 0
- ;;
- --cflags)
- echo_cflags=yes
- ;;
- --libs)
- echo_libs=yes
- ;;
- --libtool)
- echo_libtool=yes
- ;;
- *)
- 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 "$echo_prefix" = "yes" ; then
- echo $prefix
-fi
-
-if test "$echo_exec_prefix" = "yes" ; then
- echo $exec_prefix
-fi
-
-if test "$exec_prefix_set" = "yes" ; then
- libdir=$exec_prefix/lib
-else
- if test "$local_prefix" = "yes" ; then
- includedir=$prefix/include
- libdir=$prefix/lib
- fi
-fi
-
-if test "$echo_cflags" = "yes" ; then
- cflags="-I$includedir/freetype2"
- if test "$includedir" != "/usr/include" ; then
- echo $cflags -I$includedir
- else
- echo $cflags
- fi
-fi
-
-if test "$echo_libs" = "yes" ; then
- rpath=
- if test "$enable_shared" = "yes" ; then
- eval "rpath=\"$hardcode_libdir_flag_spec\""
- fi
- libs="-lfreetype @LIBZ@ @FT2_EXTRA_LIBS@"
- if test "$libdir" != "/usr/lib" && test "$libdir" != "/usr/lib64"; then
- echo -L$libdir $rpath $libs
- else
- echo $libs
- fi
-fi
-
-if test "$echo_libtool" = "yes" ; then
- convlib="libfreetype.la"
- echo $libdir/$convlib
-fi
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/unix/freetype2.in b/Build/source/libs/freetype2/builds/unix/freetype2.in
deleted file mode 100644
index 0d7aefadedb..00000000000
--- a/Build/source/libs/freetype2/builds/unix/freetype2.in
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: FreeType 2
-Description: A free, high-quality, and portable font engine.
-Version: @ft_version@
-Requires:
-Libs: -L${libdir} -lfreetype @LIBZ@ @FT2_EXTRA_LIBS@
-Cflags: -I${includedir}/freetype2 -I${includedir}
diff --git a/Build/source/libs/freetype2/builds/unix/freetype2.m4 b/Build/source/libs/freetype2/builds/unix/freetype2.m4
deleted file mode 100644
index d1da07d9c11..00000000000
--- a/Build/source/libs/freetype2/builds/unix/freetype2.m4
+++ /dev/null
@@ -1,192 +0,0 @@
-# Configure paths for FreeType2
-# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
-#
-# Copyright 2001, 2003, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 2
-
-# 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
-
- AC_PATH_PROG([FT2_CONFIG], [freetype-config], [no])
-
- 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/Build/source/libs/freetype2/builds/unix/ft-munmap.m4 b/Build/source/libs/freetype2/builds/unix/ft-munmap.m4
deleted file mode 100644
index 68b3361e2b1..00000000000
--- a/Build/source/libs/freetype2/builds/unix/ft-munmap.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-## FreeType specific autoconf tests
-#
-# Copyright 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.
-
-# 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/Build/source/libs/freetype2/builds/unix/ft2unix.h b/Build/source/libs/freetype2/builds/unix/ft2unix.h
deleted file mode 100644
index 6a3b8d90e9c..00000000000
--- a/Build/source/libs/freetype2/builds/unix/ft2unix.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/***************************************************************************/
-/* */
-/* ft2build.h */
-/* */
-/* Build macros of the FreeType 2 library. */
-/* */
-/* Copyright 1996-2001, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 Unix-specific version of <ft2build.h> that should be used */
- /* exclusively *after* installation of the library. */
- /* */
- /* It assumes that `/usr/local/include/freetype2' (or whatever is */
- /* returned by the `freetype-config --cflags' or `pkg-config --cflags' */
- /* command) is in your compilation include path. */
- /* */
- /* We don't need to do anything special in this release. However, for */
- /* a future FreeType 2 release, the following installation changes will */
- /* be performed: */
- /* */
- /* - The contents of `freetype-2.x/include/freetype' will be installed */
- /* to `/usr/local/include/freetype2' instead of */
- /* `/usr/local/include/freetype2/freetype'. */
- /* */
- /* - This file will #include <freetype2/config/ftheader.h>, instead */
- /* of <freetype/config/ftheader.h>. */
- /* */
- /* - The contents of `ftheader.h' will be processed with `sed' to */
- /* replace all `<freetype/xxx>' with `<freetype2/xxx>'. */
- /* */
- /* - Adding `/usr/local/include/freetype2' to your compilation include */
- /* path will not be necessary anymore. */
- /* */
- /* These changes will be transparent to client applications which use */
- /* freetype-config (or pkg-config). No modifications will be necessary */
- /* to compile with the new scheme. */
- /* */
- /*************************************************************************/
-
-
-#ifndef __FT2_BUILD_UNIX_H__
-#define __FT2_BUILD_UNIX_H__
-
- /* `<prefix>/include/freetype2' must be in your current inclusion path */
-#include <freetype/config/ftheader.h>
-
-#endif /* __FT2_BUILD_UNIX_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/builds/unix/ftconfig.in b/Build/source/libs/freetype2/builds/unix/ftconfig.in
deleted file mode 100644
index 1a962646512..00000000000
--- a/Build/source/libs/freetype2/builds/unix/ftconfig.in
+++ /dev/null
@@ -1,349 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.in */
-/* */
-/* UNIX-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 `freetype/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 */
- /* `freetype/builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
-
-
-#undef HAVE_UNISTD_H
-#undef HAVE_FCNTL_H
-
-#undef SIZEOF_INT
-#undef SIZEOF_LONG
-
-
-#define FT_SIZEOF_INT SIZEOF_INT
-#define FT_SIZEOF_LONG SIZEOF_LONG
-
-#define FT_CHAR_BIT CHAR_BIT
-
- /* Preferred alignment of data */
-#define FT_ALIGNMENT 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( DARWIN_NO_CARBON ) ) || \
- ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
-#include "AvailabilityMacros.h"
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-#define DARWIN_NO_CARBON 1
-#else
-#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
-
-
- /*************************************************************************/
- /* */
- /* IntN types */
- /* */
- /* Used to guarantee the size of some specific integers. */
- /* */
- typedef signed short FT_Int16;
- typedef unsigned short FT_UInt16;
-
-#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 for platforms 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
-
-#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
-
-#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
-
-#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
-
-#elif defined( __GNUC__ )
-
- /* GCC provides the `long long' type */
-#define FT_LONG64
-#define FT_INT64 long long int
-
-#endif /* FT_SIZEOF_LONG == 8 */
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
- /*************************************************************************/
- /* */
- /* A 64-bit data type will create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable their use if */
- /* __STDC__ is defined. You can however ignore this rule by */
- /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
-#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#ifdef __STDC__
-
- /* Undefine the 64-bit macros in strict ANSI compilation mode. */
- /* Since `#undef' doesn't survive in configuration header files */
- /* we use the postprocessing facility of AC_CONFIG_HEADERS to */
- /* replace the leading `/' with `#'. */
-/undef FT_LONG64
-/undef FT_INT64
-
-#endif /* __STDC__ */
-
-#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
-
-
-#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 */
-
-
-#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/Build/source/libs/freetype2/builds/unix/ftsystem.c b/Build/source/libs/freetype2/builds/unix/ftsystem.c
deleted file mode 100644
index 3a740fd02d3..00000000000
--- a/Build/source/libs/freetype2/builds/unix/ftsystem.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* Unix-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Err_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_Err_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 */
- /* freetype/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" ));
- 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_Err_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/Build/source/libs/freetype2/builds/unix/install-sh b/Build/source/libs/freetype2/builds/unix/install-sh
deleted file mode 100644
index a5897de6ea7..00000000000
--- a/Build/source/libs/freetype2/builds/unix/install-sh
+++ /dev/null
@@ -1,519 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2006-12-25.00
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# 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
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" "" $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
- doit_exec=exec
-else
- doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
- test "$posix_glob" != "?" || {
- if (set -f) 2>/dev/null; then
- posix_glob=
- else
- posix_glob=:
- fi
- }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve the last data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -s $stripprog installed files.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -t) dst_arg=$2
- shift;;
-
- -T) no_target_directory=true;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- trap '(exit $?); exit' 1 2 13 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- # Prefer dirname, but fall back on a substitute if dirname fails.
- dstdir=`
- (dirname "$dst") 2>/dev/null ||
- expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$dst" : 'X\(//\)[^/]' \| \
- X"$dst" : 'X\(//\)$' \| \
- X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
- echo X"$dst" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'
- `
-
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/d" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
- fi
- trap '' 0;;
- esac;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # The umask is ridiculous, or mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- -*) prefix='./';;
- *) prefix='';;
- esac
-
- eval "$initialize_posix_glob"
-
- oIFS=$IFS
- IFS=/
- $posix_glob set -f
- set fnord $dstdir
- shift
- $posix_glob set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test -z "$d" && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
- eval "$initialize_posix_glob" &&
- $posix_glob set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- $posix_glob set +f &&
-
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/Build/source/libs/freetype2/builds/unix/install.mk b/Build/source/libs/freetype2/builds/unix/install.mk
deleted file mode 100644
index 2e5ef080e33..00000000000
--- a/Build/source/libs/freetype2/builds/unix/install.mk
+++ /dev/null
@@ -1,97 +0,0 @@
-#
-# FreeType 2 installation instructions for Unix systems
-#
-
-
-# Copyright 1996-2000, 2002, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 no longer install internal headers, and we remove any
-# `internal' subdirectory found in `$(includedir)/freetype2/freetype'.
-#
-install: $(PROJECT_LIBRARY)
- $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
- $(DESTDIR)$(libdir)/pkgconfig \
- $(DESTDIR)$(includedir)/freetype2/freetype/config \
- $(DESTDIR)$(includedir)/freetype2/freetype/cache \
- $(DESTDIR)$(bindir) \
- $(DESTDIR)$(datadir)/aclocal
- $(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
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/cache/*
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype/cache
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/internal/*
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype/internal
- $(INSTALL_DATA) $(BUILD_DIR)/ft2unix.h \
- $(DESTDIR)$(includedir)/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
-
-
-uninstall:
- -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(LIBRARY).$A
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/config/*
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype/config
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/*
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2
- -$(DELETE) $(DESTDIR)$(includedir)/ft2build.h
- -$(DELETE) $(DESTDIR)$(bindir)/freetype-config
- -$(DELETE) $(DESTDIR)$(datadir)/aclocal/freetype2.m4
- -$(DELETE) $(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
-
-
-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)
- -$(DELETE) $(OBJ_DIR)/.libs/*
- -$(DELDIR) $(OBJ_DIR)/.libs
- -$(DELETE) *.orig *~ core *.core $(DISTCLEAN)
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/unix/ltmain.sh b/Build/source/libs/freetype2/builds/unix/ltmain.sh
deleted file mode 100755
index 174e49238b5..00000000000
--- a/Build/source/libs/freetype2/builds/unix/ltmain.sh
+++ /dev/null
@@ -1,7874 +0,0 @@
-# Generated from ltmain.m4sh.
-
-# ltmain.sh (GNU libtool) 2.2.4
-# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
-# This is free software; see the source for copying conditions. There is NO
-# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-# GNU Libtool 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.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html,
-# or obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# Usage: $progname [OPTION]... [MODE-ARG]...
-#
-# Provide generalized library-building support services.
-#
-# --config show all configuration variables
-# --debug enable verbose shell tracing
-# -n, --dry-run display commands without modifying any files
-# --features display basic configuration information and exit
-# --mode=MODE use operation mode MODE
-# --preserve-dup-deps don't remove duplicate dependency libraries
-# --quiet, --silent don't print informational messages
-# --tag=TAG use configuration variables from tag TAG
-# -v, --verbose print informational messages (default)
-# --version print version information
-# -h, --help print short or long help message
-#
-# MODE must be one of the following:
-#
-# clean remove files from the build directory
-# compile compile a source file into a libtool object
-# execute automatically set library path, then run a program
-# finish complete the installation of libtool libraries
-# install install libraries or executables
-# link create a library or an executable
-# uninstall remove libraries from an installed directory
-#
-# MODE-ARGS vary depending on the MODE.
-# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
-#
-# When reporting a bug, please describe a test case to reproduce it and
-# include the following information:
-#
-# host-triplet: $host
-# shell: $SHELL
-# compiler: $LTCC
-# compiler flags: $LTCFLAGS
-# linker: $LD (gnu? $with_gnu_ld)
-# $progname: (GNU libtool) 2.2.4
-# automake: $automake_version
-# autoconf: $autoconf_version
-#
-# Report bugs to <bug-libtool@gnu.org>.
-
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=2.2.4
-TIMESTAMP=""
-package_revision=1.2976
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# NLS nuisances: We save the old values to restore during execute mode.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-lt_user_locale=
-lt_safe_locale=
-for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-do
- eval "if test \"\${$lt_var+set}\" = set; then
- save_$lt_var=\$$lt_var
- $lt_var=C
- export $lt_var
- lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
- lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
- fi"
-done
-
-$lt_unset CDPATH
-
-
-
-
-
-: ${CP="cp -f"}
-: ${ECHO="echo"}
-: ${EGREP="/usr/bin/grep -E"}
-: ${FGREP="/usr/bin/grep -F"}
-: ${GREP="/usr/bin/grep"}
-: ${LN_S="ln -s"}
-: ${MAKE="make"}
-: ${MKDIR="mkdir"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-: ${SED="/opt/local/bin/gsed"}
-: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
-: ${Xsed="$SED -e 1s/^X//"}
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
-EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
-
-exit_status=$EXIT_SUCCESS
-
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS=" $lt_nl"
-
-dirname="s,/[^/]*$,,"
-basename="s,^.*/,,"
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-# dirname: Compute the dirname of FILE. If nonempty,
-# add APPEND to the result, otherwise set result
-# to NONDIR_REPLACEMENT.
-# value returned in "$func_dirname_result"
-# basename: Compute filename of FILE.
-# value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
- # Extract subdirectory from the argument.
- func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
- if test "X$func_dirname_result" = "X${1}"; then
- func_dirname_result="${3}"
- else
- func_dirname_result="$func_dirname_result${2}"
- fi
- func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-# Generated shell functions inserted here.
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
-
-# The name of this program:
-# In the unlikely event $progname began with a '-', it would play havoc with
-# func_echo (imagine progname=-n), so we prepend ./ in that case:
-func_dirname_and_basename "$progpath"
-progname=$func_basename_result
-case $progname in
- -*) progname=./$progname ;;
-esac
-
-# Make sure we have an absolute path for reexecution:
-case $progpath in
- [\\/]*|[A-Za-z]:\\*) ;;
- *[\\/]*)
- progdir=$func_dirname_result
- progdir=`cd "$progdir" && pwd`
- progpath="$progdir/$progname"
- ;;
- *)
- save_IFS="$IFS"
- IFS=:
- for progdir in $PATH; do
- IFS="$save_IFS"
- test -x "$progdir/$progname" && break
- done
- IFS="$save_IFS"
- test -n "$progdir" || progdir=`pwd`
- progpath="$progdir/$progname"
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Re-`\' parameter expansions in output of double_quote_subst that were
-# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
-# in input to double_quote_subst, that '$' was protected from expansion.
-# Since each input `\' is now two `\'s, look for any number of runs of
-# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
-bs='\\'
-bs2='\\\\'
-bs4='\\\\\\\\'
-dollar='\$'
-sed_double_backslash="\
- s/$bs4/&\\
-/g
- s/^$bs2$dollar/$bs&/
- s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
- s/\n//g"
-
-# Standard options:
-opt_dry_run=false
-opt_help=false
-opt_quiet=false
-opt_verbose=false
-opt_warning=:
-
-# func_echo arg...
-# Echo program name prefixed message, along with the current mode
-# name if it has been set yet.
-func_echo ()
-{
- $ECHO "$progname${mode+: }$mode: $*"
-}
-
-# func_verbose arg...
-# Echo program name prefixed message in verbose mode only.
-func_verbose ()
-{
- $opt_verbose && func_echo ${1+"$@"}
-
- # A bug in bash halts the script if the last line of a function
- # fails when set -e is in force, so we need another command to
- # work around that:
- :
-}
-
-# func_error arg...
-# Echo program name prefixed message to standard error.
-func_error ()
-{
- $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
-}
-
-# func_warning arg...
-# Echo program name prefixed warning message to standard error.
-func_warning ()
-{
- $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
-
- # bash bug again:
- :
-}
-
-# func_fatal_error arg...
-# Echo program name prefixed message to standard error, and exit.
-func_fatal_error ()
-{
- func_error ${1+"$@"}
- exit $EXIT_FAILURE
-}
-
-# func_fatal_help arg...
-# Echo program name prefixed message to standard error, followed by
-# a help hint, and exit.
-func_fatal_help ()
-{
- func_error ${1+"$@"}
- func_fatal_error "$help"
-}
-help="Try \`$progname --help' for more information." ## default
-
-
-# func_grep expression filename
-# Check whether EXPRESSION matches any line of FILENAME, without output.
-func_grep ()
-{
- $GREP "$1" "$2" >/dev/null 2>&1
-}
-
-
-# func_mkdir_p directory-path
-# Make sure the entire path to DIRECTORY-PATH is available.
-func_mkdir_p ()
-{
- my_directory_path="$1"
- my_dir_list=
-
- if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
-
- # Protect directory names starting with `-'
- case $my_directory_path in
- -*) my_directory_path="./$my_directory_path" ;;
- esac
-
- # While some portion of DIR does not yet exist...
- while test ! -d "$my_directory_path"; do
- # ...make a list in topmost first order. Use a colon delimited
- # list incase some portion of path contains whitespace.
- my_dir_list="$my_directory_path:$my_dir_list"
-
- # If the last portion added has no slash in it, the list is done
- case $my_directory_path in */*) ;; *) break ;; esac
-
- # ...otherwise throw away the child directory and loop
- my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
- done
- my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
-
- save_mkdir_p_IFS="$IFS"; IFS=':'
- for my_dir in $my_dir_list; do
- IFS="$save_mkdir_p_IFS"
- # mkdir can fail with a `File exist' error if two processes
- # try to create one of the directories concurrently. Don't
- # stop in that case!
- $MKDIR "$my_dir" 2>/dev/null || :
- done
- IFS="$save_mkdir_p_IFS"
-
- # Bail out if we (or some other process) failed to create a directory.
- test -d "$my_directory_path" || \
- func_fatal_error "Failed to create \`$1'"
- fi
-}
-
-
-# func_mktempdir [string]
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible. If
-# given, STRING is the basename for that directory.
-func_mktempdir ()
-{
- my_template="${TMPDIR-/tmp}/${1-$progname}"
-
- if test "$opt_dry_run" = ":"; then
- # Return a directory name, but don't create it in dry-run mode
- my_tmpdir="${my_template}-$$"
- else
-
- # If mktemp works, use that first and foremost
- my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-
- if test ! -d "$my_tmpdir"; then
- # Failing that, at least try and use $RANDOM to avoid a race
- my_tmpdir="${my_template}-${RANDOM-0}$$"
-
- save_mktempdir_umask=`umask`
- umask 0077
- $MKDIR "$my_tmpdir"
- umask $save_mktempdir_umask
- fi
-
- # If we're not in dry-run mode, bomb out on failure
- test -d "$my_tmpdir" || \
- func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
- fi
-
- $ECHO "X$my_tmpdir" | $Xsed
-}
-
-
-# func_quote_for_eval arg
-# Aesthetically quote ARG to be evaled later.
-# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
-# is double-quoted, suitable for a subsequent eval, whereas
-# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
-# which are still active within double quotes backslashified.
-func_quote_for_eval ()
-{
- case $1 in
- *[\\\`\"\$]*)
- func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
- *)
- func_quote_for_eval_unquoted_result="$1" ;;
- esac
-
- case $func_quote_for_eval_unquoted_result in
- # Double-quote args containing shell metacharacters to delay
- # word splitting, command substitution and and variable
- # expansion for a subsequent eval.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
- ;;
- *)
- func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
- esac
-}
-
-
-# func_quote_for_expand arg
-# Aesthetically quote ARG to be evaled later; same as above,
-# but do not quote variable references.
-func_quote_for_expand ()
-{
- case $1 in
- *[\\\`\"]*)
- my_arg=`$ECHO "X$1" | $Xsed \
- -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
- *)
- my_arg="$1" ;;
- esac
-
- case $my_arg in
- # Double-quote args containing shell metacharacters to delay
- # word splitting and command substitution for a subsequent eval.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- my_arg="\"$my_arg\""
- ;;
- esac
-
- func_quote_for_expand_result="$my_arg"
-}
-
-
-# func_show_eval cmd [fail_exp]
-# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
-# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it.
-func_show_eval ()
-{
- my_cmd="$1"
- my_fail_exp="${2-:}"
-
- ${opt_silent-false} || {
- func_quote_for_expand "$my_cmd"
- eval "func_echo $func_quote_for_expand_result"
- }
-
- if ${opt_dry_run-false}; then :; else
- eval "$my_cmd"
- my_status=$?
- if test "$my_status" -eq 0; then :; else
- eval "(exit $my_status); $my_fail_exp"
- fi
- fi
-}
-
-
-# func_show_eval_locale cmd [fail_exp]
-# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
-# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it. Use the saved locale for evaluation.
-func_show_eval_locale ()
-{
- my_cmd="$1"
- my_fail_exp="${2-:}"
-
- ${opt_silent-false} || {
- func_quote_for_expand "$my_cmd"
- eval "func_echo $func_quote_for_expand_result"
- }
-
- if ${opt_dry_run-false}; then :; else
- eval "$lt_user_locale
- $my_cmd"
- my_status=$?
- eval "$lt_safe_locale"
- if test "$my_status" -eq 0; then :; else
- eval "(exit $my_status); $my_fail_exp"
- fi
- fi
-}
-
-
-
-
-
-# func_version
-# Echo version message to standard output and exit.
-func_version ()
-{
- $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
- s/^# //
- s/^# *$//
- s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
- p
- }' < "$progpath"
- exit $?
-}
-
-# func_usage
-# Echo short help message to standard output and exit.
-func_usage ()
-{
- $SED -n '/^# Usage:/,/# -h/ {
- s/^# //
- s/^# *$//
- s/\$progname/'$progname'/
- p
- }' < "$progpath"
- $ECHO
- $ECHO "run \`$progname --help | more' for full usage"
- exit $?
-}
-
-# func_help
-# Echo long help message to standard output and exit.
-func_help ()
-{
- $SED -n '/^# Usage:/,/# Report bugs to/ {
- s/^# //
- s/^# *$//
- s*\$progname*'$progname'*
- s*\$host*'"$host"'*
- s*\$SHELL*'"$SHELL"'*
- s*\$LTCC*'"$LTCC"'*
- s*\$LTCFLAGS*'"$LTCFLAGS"'*
- s*\$LD*'"$LD"'*
- s/\$with_gnu_ld/'"$with_gnu_ld"'/
- s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
- s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
- p
- }' < "$progpath"
- exit $?
-}
-
-# func_missing_arg argname
-# Echo program name prefixed message to standard error and set global
-# exit_cmd.
-func_missing_arg ()
-{
- func_error "missing argument for $1"
- exit_cmd=exit
-}
-
-exit_cmd=:
-
-
-
-
-
-# Check that we have a working $ECHO.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
- # Yippee, $ECHO works!
- :
-else
- # Restart under the correct shell, and then maybe $ECHO will work.
- exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit $EXIT_SUCCESS
-fi
-
-magic="%%%MAGIC variable%%%"
-magic_exe="%%%MAGIC EXE variable%%%"
-
-# Global variables.
-# $mode is unset
-nonopt=
-execute_dlfiles=
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
-
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end. This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-# func_fatal_configuration arg...
-# Echo program name prefixed message to standard error, followed by
-# a configuration failure hint, and exit.
-func_fatal_configuration ()
-{
- func_error ${1+"$@"}
- func_error "See the $PACKAGE documentation for more information."
- func_fatal_error "Fatal configuration error."
-}
-
-
-# func_config
-# Display the configuration for all the tags in this script.
-func_config ()
-{
- re_begincf='^# ### BEGIN LIBTOOL'
- re_endcf='^# ### END LIBTOOL'
-
- # Default configuration.
- $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
-
- # Now print the configurations for the tags.
- for tagname in $taglist; do
- $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
- done
-
- exit $?
-}
-
-# func_features
-# Display the features supported by this script.
-func_features ()
-{
- $ECHO "host: $host"
- if test "$build_libtool_libs" = yes; then
- $ECHO "enable shared libraries"
- else
- $ECHO "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- $ECHO "enable static libraries"
- else
- $ECHO "disable static libraries"
- fi
-
- exit $?
-}
-
-# func_enable_tag tagname
-# Verify that TAGNAME is valid, and either flag an error and exit, or
-# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
-# variable here.
-func_enable_tag ()
-{
- # Global variable:
- tagname="$1"
-
- re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
- re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
- sed_extractcf="/$re_begincf/,/$re_endcf/p"
-
- # Validate tagname.
- case $tagname in
- *[!-_A-Za-z0-9,/]*)
- func_fatal_error "invalid tag name: $tagname"
- ;;
- esac
-
- # Don't test for the "default" C tag, as we know it's
- # there but not specially marked.
- case $tagname in
- CC) ;;
- *)
- if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
- taglist="$taglist $tagname"
-
- # Evaluate the configuration. Be careful to quote the path
- # and the sed script, to avoid splitting on whitespace, but
- # also don't use non-portable quotes within backquotes within
- # quotes we have to do it in 2 steps:
- extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
- eval "$extractedcf"
- else
- func_error "ignoring unknown tag $tagname"
- fi
- ;;
- esac
-}
-
-# Parse options once, thoroughly. This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
-{
-
- # Shorthand for --mode=foo, only valid as the first argument
- case $1 in
- clean|clea|cle|cl)
- shift; set dummy --mode clean ${1+"$@"}; shift
- ;;
- compile|compil|compi|comp|com|co|c)
- shift; set dummy --mode compile ${1+"$@"}; shift
- ;;
- execute|execut|execu|exec|exe|ex|e)
- shift; set dummy --mode execute ${1+"$@"}; shift
- ;;
- finish|finis|fini|fin|fi|f)
- shift; set dummy --mode finish ${1+"$@"}; shift
- ;;
- install|instal|insta|inst|ins|in|i)
- shift; set dummy --mode install ${1+"$@"}; shift
- ;;
- link|lin|li|l)
- shift; set dummy --mode link ${1+"$@"}; shift
- ;;
- uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
- shift; set dummy --mode uninstall ${1+"$@"}; shift
- ;;
- esac
-
- # Parse non-mode specific arguments:
- while test "$#" -gt 0; do
- opt="$1"
- shift
-
- case $opt in
- --config) func_config ;;
-
- --debug) preserve_args="$preserve_args $opt"
- func_echo "enabling shell trace mode"
- opt_debug='set -x'
- $opt_debug
- ;;
-
- -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
- execute_dlfiles="$execute_dlfiles $1"
- shift
- ;;
-
- --dry-run | -n) opt_dry_run=: ;;
- --features) func_features ;;
- --finish) mode="finish" ;;
-
- --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
- case $1 in
- # Valid mode arguments:
- clean) ;;
- compile) ;;
- execute) ;;
- finish) ;;
- install) ;;
- link) ;;
- relink) ;;
- uninstall) ;;
-
- # Catch anything else as an error
- *) func_error "invalid argument for $opt"
- exit_cmd=exit
- break
- ;;
- esac
-
- mode="$1"
- shift
- ;;
-
- --preserve-dup-deps)
- opt_duplicate_deps=: ;;
-
- --quiet|--silent) preserve_args="$preserve_args $opt"
- opt_silent=:
- ;;
-
- --verbose| -v) preserve_args="$preserve_args $opt"
- opt_silent=false
- ;;
-
- --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
- preserve_args="$preserve_args $opt $1"
- func_enable_tag "$1" # tagname is set here
- shift
- ;;
-
- # Separate optargs to long options:
- -dlopen=*|--mode=*|--tag=*)
- func_opt_split "$opt"
- set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
- shift
- ;;
-
- -\?|-h) func_usage ;;
- --help) opt_help=: ;;
- --version) func_version ;;
-
- -*) func_fatal_help "unrecognized option \`$opt'" ;;
-
- *) nonopt="$opt"
- break
- ;;
- esac
- done
-
-
- case $host in
- *cygwin* | *mingw* | *pw32*)
- # don't eliminate duplications in $postdeps and $predeps
- opt_duplicate_compiler_generated_deps=:
- ;;
- *)
- opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
- ;;
- esac
-
- # Having warned about all mis-specified options, bail out if
- # anything was wrong.
- $exit_cmd $EXIT_FAILURE
-}
-
-# func_check_version_match
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
- if test "$package_revision" != "$macro_revision"; then
- if test "$VERSION" != "$macro_version"; then
- if test -z "$macro_version"; then
- cat >&2 <<_LT_EOF
-$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
- else
- cat >&2 <<_LT_EOF
-$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
- fi
- else
- cat >&2 <<_LT_EOF
-$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
- fi
-
- exit $EXIT_MISMATCH
- fi
-}
-
-
-## ----------- ##
-## Main. ##
-## ----------- ##
-
-$opt_help || {
- # Sanity checks first:
- func_check_version_match
-
- if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- func_fatal_configuration "not configured to build any kind of library"
- fi
-
- test -z "$mode" && func_fatal_error "error: you must specify a MODE."
-
-
- # Darwin sucks
- eval std_shrext=\"$shrext_cmds\"
-
-
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$mode" != execute; then
- func_error "unrecognized option \`-dlopen'"
- $ECHO "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$progname --help --mode=$mode' for more information."
-}
-
-
-# func_lalib_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_lalib_p ()
-{
- $SED -e 4q "$1" 2>/dev/null \
- | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
-}
-
-# func_lalib_unsafe_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
-# This function implements the same check as func_lalib_p without
-# resorting to external programs. To this end, it redirects stdin and
-# closes it afterwards, without saving the original file descriptor.
-# As a safety measure, use it only where a negative result would be
-# fatal anyway. Works if `file' does not exist.
-func_lalib_unsafe_p ()
-{
- lalib_p=no
- if test -r "$1" && exec 5<&0 <"$1"; then
- for lalib_p_l in 1 2 3 4
- do
- read lalib_p_line
- case "$lalib_p_line" in
- \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
- esac
- done
- exec 0<&5 5<&-
- fi
- test "$lalib_p" = yes
-}
-
-# func_ltwrapper_script_p file
-# True iff FILE is a libtool wrapper script
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_script_p ()
-{
- func_lalib_p "$1"
-}
-
-# func_ltwrapper_executable_p file
-# True iff FILE is a libtool wrapper executable
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_executable_p ()
-{
- func_ltwrapper_exec_suffix=
- case $1 in
- *.exe) ;;
- *) func_ltwrapper_exec_suffix=.exe ;;
- esac
- $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
-}
-
-# func_ltwrapper_scriptname file
-# Assumes file is an ltwrapper_executable
-# uses $file to determine the appropriate filename for a
-# temporary ltwrapper_script.
-func_ltwrapper_scriptname ()
-{
- func_ltwrapper_scriptname_result=""
- if func_ltwrapper_executable_p "$1"; then
- func_dirname_and_basename "$1" "" "."
- func_stripname '' '.exe' "$func_basename_result"
- func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
- fi
-}
-
-# func_ltwrapper_p file
-# True iff FILE is a libtool wrapper script or wrapper executable
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_p ()
-{
- func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
-}
-
-
-# func_execute_cmds commands fail_cmd
-# Execute tilde-delimited COMMANDS.
-# If FAIL_CMD is given, eval that upon failure.
-# FAIL_CMD may read-access the current command in variable CMD!
-func_execute_cmds ()
-{
- $opt_debug
- save_ifs=$IFS; IFS='~'
- for cmd in $1; do
- IFS=$save_ifs
- eval cmd=\"$cmd\"
- func_show_eval "$cmd" "${2-:}"
- done
- IFS=$save_ifs
-}
-
-
-# func_source file
-# Source FILE, adding directory component if necessary.
-# Note that it is not necessary on cygwin/mingw to append a dot to
-# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
-# behavior happens only for exec(3), not for open(2)! Also, sourcing
-# `FILE.' does not work on cygwin managed mounts.
-func_source ()
-{
- $opt_debug
- case $1 in
- */* | *\\*) . "$1" ;;
- *) . "./$1" ;;
- esac
-}
-
-
-# func_infer_tag arg
-# Infer tagged configuration to use if any are available and
-# if one wasn't chosen via the "--tag" command line option.
-# Only attempt this if the compiler in the base compile
-# command doesn't match the default compiler.
-# arg is usually of the form 'gcc ...'
-func_infer_tag ()
-{
- $opt_debug
- if test -n "$available_tags" && test -z "$tagname"; then
- CC_quoted=
- for arg in $CC; do
- func_quote_for_eval "$arg"
- CC_quoted="$CC_quoted $func_quote_for_eval_result"
- done
- case $@ in
- # Blanks in the command may have been stripped by the calling shell,
- # but not from the CC environment variable when configure was run.
- " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
- # Blanks at the start of $base_compile will cause this to fail
- # if we don't check for them as well.
- *)
- for z in $available_tags; do
- if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
- # Evaluate the configuration.
- eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
- CC_quoted=
- for arg in $CC; do
- # Double-quote args containing other shell metacharacters.
- func_quote_for_eval "$arg"
- CC_quoted="$CC_quoted $func_quote_for_eval_result"
- done
- case "$@ " in
- " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
- # The compiler in the base compile command matches
- # the one in the tagged configuration.
- # Assume this is the tagged configuration we want.
- tagname=$z
- break
- ;;
- esac
- fi
- done
- # If $tagname still isn't set, then no tagged configuration
- # was found and let the user know that the "--tag" command
- # line option must be used.
- if test -z "$tagname"; then
- func_echo "unable to infer tagged configuration"
- func_fatal_error "specify a tag with \`--tag'"
-# else
-# func_verbose "using $tagname tagged configuration"
- fi
- ;;
- esac
- fi
-}
-
-
-
-# func_write_libtool_object output_name pic_name nonpic_name
-# Create a libtool object file (analogous to a ".la" file),
-# but don't create it if we're doing a dry run.
-func_write_libtool_object ()
-{
- write_libobj=${1}
- if test "$build_libtool_libs" = yes; then
- write_lobj=\'${2}\'
- else
- write_lobj=none
- fi
-
- if test "$build_old_libs" = yes; then
- write_oldobj=\'${3}\'
- else
- write_oldobj=none
- fi
-
- $opt_dry_run || {
- cat >${write_libobj}T <<EOF
-# $write_libobj - a libtool object file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object=$write_lobj
-
-# Name of the non-PIC object
-non_pic_object=$write_oldobj
-
-EOF
- $MV "${write_libobj}T" "${write_libobj}"
- }
-}
-
-# func_mode_compile arg...
-func_mode_compile ()
-{
- $opt_debug
- # Get the compilation command and the source file.
- base_compile=
- srcfile="$nonopt" # always keep a non-empty value in "srcfile"
- suppress_opt=yes
- suppress_output=
- arg_mode=normal
- libobj=
- later=
- pie_flag=
-
- for arg
- do
- case $arg_mode in
- arg )
- # do not "continue". Instead, add this to base_compile
- lastarg="$arg"
- arg_mode=normal
- ;;
-
- target )
- libobj="$arg"
- arg_mode=normal
- continue
- ;;
-
- normal )
- # Accept any command-line options.
- case $arg in
- -o)
- test -n "$libobj" && \
- func_fatal_error "you cannot specify \`-o' more than once"
- arg_mode=target
- continue
- ;;
-
- -pie | -fpie | -fPIE)
- pie_flag="$pie_flag $arg"
- continue
- ;;
-
- -shared | -static | -prefer-pic | -prefer-non-pic)
- later="$later $arg"
- continue
- ;;
-
- -no-suppress)
- suppress_opt=no
- continue
- ;;
-
- -Xcompiler)
- arg_mode=arg # the next one goes into the "base_compile" arg list
- continue # The current "srcfile" will either be retained or
- ;; # replaced later. I would guess that would be a bug.
-
- -Wc,*)
- func_stripname '-Wc,' '' "$arg"
- args=$func_stripname_result
- lastarg=
- save_ifs="$IFS"; IFS=','
- for arg in $args; do
- IFS="$save_ifs"
- func_quote_for_eval "$arg"
- lastarg="$lastarg $func_quote_for_eval_result"
- done
- IFS="$save_ifs"
- func_stripname ' ' '' "$lastarg"
- lastarg=$func_stripname_result
-
- # Add the arguments to base_compile.
- base_compile="$base_compile $lastarg"
- continue
- ;;
-
- *)
- # Accept the current argument as the source file.
- # The previous "srcfile" becomes the current argument.
- #
- lastarg="$srcfile"
- srcfile="$arg"
- ;;
- esac # case $arg
- ;;
- esac # case $arg_mode
-
- # Aesthetically quote the previous argument.
- func_quote_for_eval "$lastarg"
- base_compile="$base_compile $func_quote_for_eval_result"
- done # for arg
-
- case $arg_mode in
- arg)
- func_fatal_error "you must specify an argument for -Xcompile"
- ;;
- target)
- func_fatal_error "you must specify a target with \`-o'"
- ;;
- *)
- # Get the name of the library object.
- test -z "$libobj" && {
- func_basename "$srcfile"
- libobj="$func_basename_result"
- }
- ;;
- esac
-
- # Recognize several different file suffixes.
- # If the user specifies -o file.o, it is replaced with file.lo
- case $libobj in
- *.[cCFSifmso] | \
- *.ada | *.adb | *.ads | *.asm | \
- *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
- *.[fF][09]? | *.for | *.java | *.obj | *.sx)
- func_xform "$libobj"
- libobj=$func_xform_result
- ;;
- esac
-
- case $libobj in
- *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
- *)
- func_fatal_error "cannot determine name of library object from \`$libobj'"
- ;;
- esac
-
- func_infer_tag $base_compile
-
- for arg in $later; do
- case $arg in
- -shared)
- test "$build_libtool_libs" != yes && \
- func_fatal_configuration "can not build a shared library"
- build_old_libs=no
- continue
- ;;
-
- -static)
- build_libtool_libs=no
- build_old_libs=yes
- continue
- ;;
-
- -prefer-pic)
- pic_mode=yes
- continue
- ;;
-
- -prefer-non-pic)
- pic_mode=no
- continue
- ;;
- esac
- done
-
- func_quote_for_eval "$libobj"
- test "X$libobj" != "X$func_quote_for_eval_result" \
- && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
- && func_warning "libobj name \`$libobj' may not contain shell special characters."
- func_dirname_and_basename "$obj" "/" ""
- objname="$func_basename_result"
- xdir="$func_dirname_result"
- lobj=${xdir}$objdir/$objname
-
- test -z "$base_compile" && \
- func_fatal_help "you must specify a compilation command"
-
- # Delete any leftover library objects.
- if test "$build_old_libs" = yes; then
- removelist="$obj $lobj $libobj ${libobj}T"
- else
- removelist="$lobj $libobj ${libobj}T"
- fi
-
- # On Cygwin there's no "real" PIC flag so we must build both object types
- case $host_os in
- cygwin* | mingw* | pw32* | os2*)
- pic_mode=default
- ;;
- esac
- if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
- # non-PIC code in shared libraries is not supported
- pic_mode=default
- fi
-
- # Calculate the filename of the output object if compiler does
- # not support -o with -c
- if test "$compiler_c_o" = no; then
- output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
- lockfile="$output_obj.lock"
- else
- output_obj=
- need_locks=no
- lockfile=
- fi
-
- # Lock this critical section if it is needed
- # We use this script file to make the link, it avoids creating a new file
- if test "$need_locks" = yes; then
- until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
- func_echo "Waiting for $lockfile to be removed"
- sleep 2
- done
- elif test "$need_locks" = warn; then
- if test -f "$lockfile"; then
- $ECHO "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $opt_dry_run || $RM $removelist
- exit $EXIT_FAILURE
- fi
- removelist="$removelist $output_obj"
- $ECHO "$srcfile" > "$lockfile"
- fi
-
- $opt_dry_run || $RM $removelist
- removelist="$removelist $lockfile"
- trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
-
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
- fi
- func_quote_for_eval "$srcfile"
- qsrcfile=$func_quote_for_eval_result
-
- # Only build a PIC object if we are building libtool libraries.
- if test "$build_libtool_libs" = yes; then
- # Without this assignment, base_compile gets emptied.
- fbsd_hideous_sh_bug=$base_compile
-
- if test "$pic_mode" != no; then
- command="$base_compile $qsrcfile $pic_flag"
- else
- # Don't build PIC code
- command="$base_compile $qsrcfile"
- fi
-
- func_mkdir_p "$xdir$objdir"
-
- if test -z "$output_obj"; then
- # Place PIC objects in $objdir
- command="$command -o $lobj"
- fi
-
- func_show_eval_locale "$command" \
- 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
-
- if test "$need_locks" = warn &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $ECHO "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $opt_dry_run || $RM $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed, then go on to compile the next one
- if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
- func_show_eval '$MV "$output_obj" "$lobj"' \
- 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
- fi
-
- # Allow error messages only from the first compilation.
- if test "$suppress_opt" = yes; then
- suppress_output=' >/dev/null 2>&1'
- fi
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test "$build_old_libs" = yes; then
- if test "$pic_mode" != yes; then
- # Don't build PIC code
- command="$base_compile $qsrcfile$pie_flag"
- else
- command="$base_compile $qsrcfile $pic_flag"
- fi
- if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
- func_show_eval_locale "$command" \
- '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
-
- if test "$need_locks" = warn &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $ECHO "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $opt_dry_run || $RM $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed
- if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
- func_show_eval '$MV "$output_obj" "$obj"' \
- 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
- fi
- fi
-
- $opt_dry_run || {
- func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
-
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- removelist=$lockfile
- $RM "$lockfile"
- fi
- }
-
- exit $EXIT_SUCCESS
-}
-
-$opt_help || {
-test "$mode" = compile && func_mode_compile ${1+"$@"}
-}
-
-func_mode_help ()
-{
- # We need to display help for each of the modes.
- case $mode in
- "")
- # Generic help is extracted from the usage comments
- # at the start of this file.
- func_help
- ;;
-
- clean)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
- compile)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -no-suppress do not suppress compiler output for multiple passes
- -prefer-pic try to building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
- -shared do not build a \`.o' file suitable for static linking
- -static only build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
- execute)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
- finish)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
- install)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The following components of INSTALL-COMMAND are treated specially:
-
- -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
- link)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -objectlist FILE Use a list of object files found in FILE to specify objects
- -precious-files-regex REGEX
- don't remove output files matching REGEX
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -shared only do dynamic linking of libtool libraries
- -shrext SUFFIX override the standard shared library file extension
- -static do not do any dynamic linking of uninstalled libtool libraries
- -static-libtool-libs
- do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
- -weak LIBNAME declare that the target provides the LIBNAME interface
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
- uninstall)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
- *)
- func_fatal_help "invalid operation mode \`$mode'"
- ;;
- esac
-
- $ECHO
- $ECHO "Try \`$progname --help' for more information about other modes."
-
- exit $?
-}
-
- # Now that we've collected a possible --mode arg, show help if necessary
- $opt_help && func_mode_help
-
-
-# func_mode_execute arg...
-func_mode_execute ()
-{
- $opt_debug
- # The first argument is the command name.
- cmd="$nonopt"
- test -z "$cmd" && \
- func_fatal_help "you must specify a COMMAND"
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- test -f "$file" \
- || func_fatal_help "\`$file' is not a file"
-
- dir=
- case $file in
- *.la)
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$file" \
- || func_fatal_help "\`$lib' is not a valid libtool archive"
-
- # Read the libtool library.
- dlname=
- library_names=
- func_source "$file"
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && \
- func_warning "\`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- func_dirname "$file" "" "."
- dir="$func_dirname_result"
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- if test ! -f "$dir/$dlname"; then
- func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
- fi
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- func_dirname "$file" "" "."
- dir="$func_dirname_result"
- ;;
-
- *)
- func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if func_ltwrapper_script_p "$file"; then
- func_source "$file"
- # Transform arg to wrapped name.
- file="$progdir/$program"
- elif func_ltwrapper_executable_p "$file"; then
- func_ltwrapper_scriptname "$file"
- func_source "$func_ltwrapper_scriptname_result"
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- func_quote_for_eval "$file"
- args="$args $func_quote_for_eval_result"
- done
-
- if test "X$opt_dry_run" = Xfalse; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved environment variables
- for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
- do
- eval "if test \"\${save_$lt_var+set}\" = set; then
- $lt_var=\$save_$lt_var; export $lt_var
- else
- $lt_unset $lt_var
- fi"
- done
-
- # Now prepare to actually exec the command.
- exec_cmd="\$cmd$args"
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
- $ECHO "export $shlibpath_var"
- fi
- $ECHO "$cmd$args"
- exit $EXIT_SUCCESS
- fi
-}
-
-test "$mode" = execute && func_mode_execute ${1+"$@"}
-
-
-# func_mode_finish arg...
-func_mode_finish ()
-{
- $opt_debug
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
-'"$cmd"'"'
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $opt_dry_run || eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- $opt_silent && exit $EXIT_SUCCESS
-
- $ECHO "X----------------------------------------------------------------------" | $Xsed
- $ECHO "Libraries have been installed in:"
- for libdir in $libdirs; do
- $ECHO " $libdir"
- done
- $ECHO
- $ECHO "If you ever happen to want to link against installed libraries"
- $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
- $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
- $ECHO "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
- $ECHO " during execution"
- fi
- if test -n "$runpath_var"; then
- $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
- $ECHO " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- $ECHO " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- $ECHO " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- $ECHO
-
- $ECHO "See any operating system documentation about shared libraries for"
- case $host in
- solaris2.[6789]|solaris2.1[0-9])
- $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
- $ECHO "pages."
- ;;
- *)
- $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
- ;;
- esac
- $ECHO "X----------------------------------------------------------------------" | $Xsed
- exit $EXIT_SUCCESS
-}
-
-test "$mode" = finish && func_mode_finish ${1+"$@"}
-
-
-# func_mode_install arg...
-func_mode_install ()
-{
- $opt_debug
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
- # Allow the use of GNU shtool's install command.
- $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
- # Aesthetically quote it.
- func_quote_for_eval "$nonopt"
- install_prog="$func_quote_for_eval_result "
- arg=$1
- shift
- else
- install_prog=
- arg=$nonopt
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- func_quote_for_eval "$arg"
- install_prog="$install_prog$func_quote_for_eval_result"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest=$arg
- continue
- fi
-
- case $arg in
- -d) isdir=yes ;;
- -f)
- case " $install_prog " in
- *[\\\ /]cp\ *) ;;
- *) prev=$arg ;;
- esac
- ;;
- -g | -m | -o)
- prev=$arg
- ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*)
- ;;
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest=$arg
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- func_quote_for_eval "$arg"
- install_prog="$install_prog $func_quote_for_eval_result"
- done
-
- test -z "$install_prog" && \
- func_fatal_help "you must specify an install program"
-
- test -n "$prev" && \
- func_fatal_help "the \`$prev' option requires an argument"
-
- if test -z "$files"; then
- if test -z "$dest"; then
- func_fatal_help "no file or destination specified"
- else
- func_fatal_help "you must specify a destination"
- fi
- fi
-
- # Strip any trailing slash from the destination.
- func_stripname '' '/' "$dest"
- dest=$func_stripname_result
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- func_dirname_and_basename "$dest" "" "."
- destdir="$func_dirname_result"
- destname="$func_basename_result"
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files; shift
- test "$#" -gt 1 && \
- func_fatal_help "\`$dest' is not a directory"
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- func_fatal_help "\`$destdir' must be an absolute directory name"
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$file" \
- || func_fatal_help "\`$file' is not a valid libtool archive"
-
- library_names=
- old_library=
- relink_command=
- func_source "$file"
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- func_dirname "$file" "/" ""
- dir="$func_dirname_result"
- dir="$dir$objdir"
-
- if test -n "$relink_command"; then
- # Determine the prefix the user has applied to our future dir.
- inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
-
- # Don't allow the user to place us outside of our expected
- # location b/c this prevents finding dependent libraries that
- # are installed to the same prefix.
- # At present, this check doesn't affect windows .dll's that
- # are installed into $libdir/../bin (currently, that works fine)
- # but it's something to keep an eye on.
- test "$inst_prefix_dir" = "$destdir" && \
- func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
-
- if test -n "$inst_prefix_dir"; then
- # Stick the inst_prefix_dir data into the link command.
- relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
- else
- relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
- fi
-
- func_warning "relinking \`$file'"
- func_show_eval "$relink_command" \
- 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
- fi
-
- # See the names of the shared library.
- set dummy $library_names; shift
- if test -n "$1"; then
- realname="$1"
- shift
-
- srcname="$realname"
- test -n "$relink_command" && srcname="$realname"T
-
- # Install the shared library and build the symlinks.
- func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
- 'exit $?'
- tstripme="$stripme"
- case $host_os in
- cygwin* | mingw* | pw32*)
- case $realname in
- *.dll.a)
- tstripme=""
- ;;
- esac
- ;;
- esac
- if test -n "$tstripme" && test -n "$striplib"; then
- func_show_eval "$striplib $destdir/$realname" 'exit $?'
- fi
-
- if test "$#" -gt 0; then
- # Delete the old symlinks, and create new ones.
- # Try `ln -sf' first, because the `ln' binary might depend on
- # the symlink we replace! Solaris /bin/ln does not understand -f,
- # so we also need to try rm && ln -s.
- for linkname
- do
- test "$linkname" != "$realname" \
- && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- func_execute_cmds "$postinstall_cmds" 'exit $?'
- fi
-
- # Install the pseudo-library for information purposes.
- func_basename "$file"
- name="$func_basename_result"
- instname="$dir/$name"i
- func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- func_basename "$file"
- destfile="$func_basename_result"
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- func_lo2o "$destfile"
- staticdest=$func_lo2o_result
- ;;
- *.$objext)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- func_fatal_help "cannot copy a libtool object to \`$destfile'"
- ;;
- esac
-
- # Install the libtool object if requested.
- test -n "$destfile" && \
- func_show_eval "$install_prog $file $destfile" 'exit $?'
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- func_lo2o "$file"
- staticobj=$func_lo2o_result
- func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
- fi
- exit $EXIT_SUCCESS
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- func_basename "$file"
- destfile="$func_basename_result"
- destfile="$destdir/$destfile"
- fi
-
- # If the file is missing, and there is a .exe on the end, strip it
- # because it is most likely a libtool script we actually want to
- # install
- stripped_ext=""
- case $file in
- *.exe)
- if test ! -f "$file"; then
- func_stripname '' '.exe' "$file"
- file=$func_stripname_result
- stripped_ext=".exe"
- fi
- ;;
- esac
-
- # Do a test to see if this is really a libtool program.
- case $host in
- *cygwin*|*mingw*)
- if func_ltwrapper_executable_p "$file"; then
- func_ltwrapper_scriptname "$file"
- wrapper=$func_ltwrapper_scriptname_result
- else
- func_stripname '' '.exe' "$file"
- wrapper=$func_stripname_result
- fi
- ;;
- *)
- wrapper=$file
- ;;
- esac
- if func_ltwrapper_script_p "$wrapper"; then
- notinst_deplibs=
- relink_command=
-
- func_source "$wrapper"
-
- # Check the variables that should have been set.
- test -z "$generated_by_libtool_version" && \
- func_fatal_error "invalid libtool wrapper script \`$wrapper'"
-
- finalize=yes
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- func_source "$lib"
- fi
- libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
- if test -n "$libdir" && test ! -f "$libfile"; then
- func_warning "\`$lib' has not been installed in \`$libdir'"
- finalize=no
- fi
- done
-
- relink_command=
- func_source "$wrapper"
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- $opt_dry_run || {
- if test "$finalize" = yes; then
- tmpdir=`func_mktempdir`
- func_basename "$file$stripped_ext"
- file="$func_basename_result"
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
- $opt_silent || {
- func_quote_for_expand "$relink_command"
- eval "func_echo $func_quote_for_expand_result"
- }
- if eval "$relink_command"; then :
- else
- func_error "error: relink \`$file' with the above command before installing it"
- $opt_dry_run || ${RM}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- func_warning "cannot relink \`$file'"
- fi
- }
- else
- # Install the binary that we compiled earlier.
- file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyway
- case $install_prog,$host in
- */usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- func_stripname '' '.exe' "$destfile"
- destfile=$func_stripname_result
- ;;
- esac
- ;;
- esac
- func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
- $opt_dry_run || if test -n "$outputname"; then
- ${RM}r "$tmpdir"
- fi
- ;;
- esac
- done
-
- for file in $staticlibs; do
- func_basename "$file"
- name="$func_basename_result"
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
-
- if test -n "$stripme" && test -n "$old_striplib"; then
- func_show_eval "$old_striplib $oldlib" 'exit $?'
- fi
-
- # Do each command in the postinstall commands.
- func_execute_cmds "$old_postinstall_cmds" 'exit $?'
- done
-
- test -n "$future_libdirs" && \
- func_warning "remember to run \`$progname --finish$future_libdirs'"
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- $opt_dry_run && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
- else
- exit $EXIT_SUCCESS
- fi
-}
-
-test "$mode" = install && func_mode_install ${1+"$@"}
-
-
-# func_generate_dlsyms outputname originator pic_p
-# Extract symbols from dlprefiles and create ${outputname}S.o with
-# a dlpreopen symbol table.
-func_generate_dlsyms ()
-{
- $opt_debug
- my_outputname="$1"
- my_originator="$2"
- my_pic_p="${3-no}"
- my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
- my_dlsyms=
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- my_dlsyms="${my_outputname}S.c"
- else
- func_error "not configured to extract global symbols from dlpreopened files"
- fi
- fi
-
- if test -n "$my_dlsyms"; then
- case $my_dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${my_outputname}.nm"
-
- func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
-
- # Parse the name list into a source file.
- func_verbose "creating $output_objdir/$my_dlsyms"
-
- $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
-/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
-/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- func_verbose "generating symbol list for \`$output'"
-
- $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- for progfile in $progfiles; do
- func_verbose "extracting global C symbols from \`$progfile'"
- $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $opt_dry_run || {
- eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- eval '$MV "$nlist"T "$nlist"'
- }
- fi
-
- if test -n "$export_symbols_regex"; then
- $opt_dry_run || {
- eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- eval '$MV "$nlist"T "$nlist"'
- }
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$outputname.exp"
- $opt_dry_run || {
- $RM $export_symbols
- eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- case $host in
- *cygwin* | *mingw* )
- eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- }
- else
- $opt_dry_run || {
- eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
- eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
- eval '$MV "$nlist"T "$nlist"'
- case $host in
- *cygwin | *mingw* )
- eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- }
- fi
- fi
-
- for dlprefile in $dlprefiles; do
- func_verbose "extracting global C symbols from \`$dlprefile'"
- func_basename "$dlprefile"
- name="$func_basename_result"
- $opt_dry_run || {
- eval '$ECHO ": $name " >> "$nlist"'
- eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
- }
- done
-
- $opt_dry_run || {
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $MV "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if $GREP -v "^: " < "$nlist" |
- if sort -k 3 </dev/null >/dev/null 2>&1; then
- sort -k 3
- else
- sort +2
- fi |
- uniq > "$nlist"S; then
- :
- else
- $GREP -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
- else
- $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
- fi
-
- $ECHO >> "$output_objdir/$my_dlsyms" "\
-
-/* The mapping between symbol names and symbols. */
-typedef struct {
- const char *name;
- void *address;
-} lt_dlsymlist;
-"
- case $host in
- *cygwin* | *mingw* )
- $ECHO >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
- runtime relocations are performed -- see ld's documentation
- on pseudo-relocs. */"
- lt_dlsym_const= ;;
- *osf5*)
- echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
- lt_dlsym_const= ;;
- *)
- lt_dlsym_const=const ;;
- esac
-
- $ECHO >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[] =
-{\
- { \"$my_originator\", (void *) 0 },"
-
- case $need_lib_prefix in
- no)
- eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
- ;;
- *)
- eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
- ;;
- esac
- $ECHO >> "$output_objdir/$my_dlsyms" "\
- {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_${my_prefix}_LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- } # !$opt_dry_run
-
- pic_flag_for_symtable=
- case "$compile_command " in
- *" -static "*) ;;
- *)
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
- *-*-hpux*)
- pic_flag_for_symtable=" $pic_flag" ;;
- *)
- if test "X$my_pic_p" != Xno; then
- pic_flag_for_symtable=" $pic_flag"
- fi
- ;;
- esac
- ;;
- esac
- symtab_cflags=
- for arg in $LTCFLAGS; do
- case $arg in
- -pie | -fpie | -fPIE) ;;
- *) symtab_cflags="$symtab_cflags $arg" ;;
- esac
- done
-
- # Now compile the dynamic symbol file.
- func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
-
- # Clean up the generated files.
- func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
-
- # Transform the symbol file into the correct name.
- symfileobj="$output_objdir/${my_outputname}S.$objext"
- case $host in
- *cygwin* | *mingw* )
- if test -f "$output_objdir/$my_outputname.def"; then
- compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
- else
- compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
- fi
- ;;
- *)
- compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
- ;;
- esac
- ;;
- *)
- func_fatal_error "unknown suffix for \`$my_dlsyms'"
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
- fi
-}
-
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-func_win32_libid ()
-{
- $opt_debug
- win32_libid_type="unknown"
- win32_fileres=`file -L $1 2>/dev/null`
- case $win32_fileres in
- *ar\ archive\ import\ library*) # definitely import
- win32_libid_type="x86 archive import"
- ;;
- *ar\ archive*) # could be an import, or static
- if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
- $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
- win32_nmres=`eval $NM -f posix -A $1 |
- $SED -n -e '
- 1,100{
- / I /{
- s,.*,import,
- p
- q
- }
- }'`
- case $win32_nmres in
- import*) win32_libid_type="x86 archive import";;
- *) win32_libid_type="x86 archive static";;
- esac
- fi
- ;;
- *DLL*)
- win32_libid_type="x86 DLL"
- ;;
- *executable*) # but shell scripts are "executable" too...
- case $win32_fileres in
- *MS\ Windows\ PE\ Intel*)
- win32_libid_type="x86 DLL"
- ;;
- esac
- ;;
- esac
- $ECHO "$win32_libid_type"
-}
-
-
-
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
- $opt_debug
- f_ex_an_ar_dir="$1"; shift
- f_ex_an_ar_oldlib="$1"
- func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
- if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
- fi
-}
-
-
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
- $opt_debug
- my_gentop="$1"; shift
- my_oldlibs=${1+"$@"}
- my_oldobjs=""
- my_xlib=""
- my_xabs=""
- my_xdir=""
-
- for my_xlib in $my_oldlibs; do
- # Extract the objects.
- case $my_xlib in
- [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
- *) my_xabs=`pwd`"/$my_xlib" ;;
- esac
- func_basename "$my_xlib"
- my_xlib="$func_basename_result"
- my_xlib_u=$my_xlib
- while :; do
- case " $extracted_archives " in
- *" $my_xlib_u "*)
- func_arith $extracted_serial + 1
- extracted_serial=$func_arith_result
- my_xlib_u=lt$extracted_serial-$my_xlib ;;
- *) break ;;
- esac
- done
- extracted_archives="$extracted_archives $my_xlib_u"
- my_xdir="$my_gentop/$my_xlib_u"
-
- func_mkdir_p "$my_xdir"
-
- case $host in
- *-darwin*)
- func_verbose "Extracting $my_xabs"
- # Do not bother doing anything if just a dry run
- $opt_dry_run || {
- darwin_orig_dir=`pwd`
- cd $my_xdir || exit $?
- darwin_archive=$my_xabs
- darwin_curdir=`pwd`
- darwin_base_archive=`basename "$darwin_archive"`
- darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
- if test -n "$darwin_arches"; then
- darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
- darwin_arch=
- func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
- for darwin_arch in $darwin_arches ; do
- func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
- cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- func_extract_an_archive "`pwd`" "${darwin_base_archive}"
- cd "$darwin_curdir"
- $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
- done # $darwin_arches
- ## Okay now we've a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
- darwin_file=
- darwin_files=
- for darwin_file in $darwin_filelist; do
- darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
- $LIPO -create -output "$darwin_file" $darwin_files
- done # $darwin_filelist
- $RM -rf unfat-$$
- cd "$darwin_orig_dir"
- else
- cd $darwin_orig_dir
- func_extract_an_archive "$my_xdir" "$my_xabs"
- fi # $darwin_arches
- } # !$opt_dry_run
- ;;
- *)
- func_extract_an_archive "$my_xdir" "$my_xabs"
- ;;
- esac
- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
- done
-
- func_extract_archives_result="$my_oldobjs"
-}
-
-
-
-# func_emit_wrapper arg
-#
-# emit a libtool wrapper script on stdout
-# don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable. Must ONLY be called from within
-# func_mode_link because it depends on a number of variable
-# set therein.
-#
-# arg is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take. If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the '.lib' directory. This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
- func_emit_wrapper_arg1=no
- if test -n "$1" ; then
- func_emit_wrapper_arg1=$1
- fi
-
- $ECHO "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# Be Bourne compatible
-if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variables:
- generated_by_libtool_version='$macro_version'
- notinst_deplibs='$notinst_deplibs'
-else
- # When we are sourced in execute mode, \$file and \$ECHO are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- ECHO=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$ECHO works!
- :
- else
- # Restart under the correct shell, and then maybe \$ECHO will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
-"
- $ECHO "\
-
- # Find the directory that this script lives in.
- thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
- done
-
- # Usually 'no', except on cygwin/mingw when embedded into
- # the cwrapper.
- WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
- if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
- # special case for '.'
- if test \"\$thisdir\" = \".\"; then
- thisdir=\`pwd\`
- fi
- # remove .libs from thisdir
- case \"\$thisdir\" in
- *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
- $objdir ) thisdir=. ;;
- esac
- fi
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test "$fast_install" = yes; then
- $ECHO "\
- program=lt-'$outputname'$exeext
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" ||
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $MKDIR \"\$progdir\"
- else
- $RM \"\$progdir/\$file\"
- fi"
-
- $ECHO "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if relink_command_output=\`eval \$relink_command 2>&1\`; then :
- else
- $ECHO \"\$relink_command_output\" >&2
- $RM \"\$progdir/\$file\"
- exit 1
- fi
- fi
-
- $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $RM \"\$progdir/\$program\";
- $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $RM \"\$progdir/\$file\"
- fi"
- else
- $ECHO "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- $ECHO "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $ECHO "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $ECHO "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
- $ECHO "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
-"
- case $host in
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2*)
- $ECHO "\
- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
- ;;
-
- *)
- $ECHO "\
- exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
- ;;
- esac
- $ECHO "\
- \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
- exit 1
- fi
- else
- # The program doesn't exist.
- \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
- \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
- $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
- exit 1
- fi
-fi\
-"
-}
-# end: func_emit_wrapper
-
-# func_emit_cwrapperexe_src
-# emit the source code for a wrapper executable on stdout
-# Must ONLY be called from within func_mode_link because
-# it depends on a number of variable set therein.
-func_emit_cwrapperexe_src ()
-{
- cat <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
- Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-
- The $output program cannot be directly executed until all the libtool
- libraries that it depends on are installed.
-
- This wrapper executable should never be moved out of the build directory.
- If it is, it will not operate correctly.
-
- Currently, it simply execs the wrapper *script* "$SHELL $output",
- but could eventually absorb all of the scripts functionality and
- exec $objdir/$outputname directly.
-*/
-EOF
- cat <<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef _MSC_VER
-# include <direct.h>
-# include <process.h>
-# include <io.h>
-# define setmode _setmode
-#else
-# include <unistd.h>
-# include <stdint.h>
-# ifdef __CYGWIN__
-# include <io.h>
-# endif
-#endif
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef S_IXOTH
-# define S_IXOTH 0
-#endif
-#ifndef S_IXGRP
-# define S_IXGRP 0
-#endif
-
-#ifdef _MSC_VER
-# define S_IXUSR _S_IEXEC
-# define stat _stat
-# ifndef _INTPTR_T_DEFINED
-# define intptr_t int
-# endif
-#endif
-
-#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-# define PATH_SEPARATOR ':'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
- defined (__OS2__)
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# define FOPEN_WB "wb"
-# ifndef DIR_SEPARATOR_2
-# define DIR_SEPARATOR_2 '\\'
-# endif
-# ifndef PATH_SEPARATOR_2
-# define PATH_SEPARATOR_2 ';'
-# endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#ifndef PATH_SEPARATOR_2
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-#else /* PATH_SEPARATOR_2 */
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-#endif /* PATH_SEPARATOR_2 */
-
-#ifdef __CYGWIN__
-# define FOPEN_WB "wb"
-#endif
-
-#ifndef FOPEN_WB
-# define FOPEN_WB "w"
-#endif
-#ifndef _O_BINARY
-# define _O_BINARY 0
-#endif
-
-#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
- if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-#undef LTWRAPPER_DEBUGPRINTF
-#if defined DEBUGWRAPPER
-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
-static void
-ltwrapper_debugprintf (const char *fmt, ...)
-{
- va_list args;
- va_start (args, fmt);
- (void) vfprintf (stderr, fmt, args);
- va_end (args);
-}
-#else
-# define LTWRAPPER_DEBUGPRINTF(args)
-#endif
-
-const char *program_name = NULL;
-
-void *xmalloc (size_t num);
-char *xstrdup (const char *string);
-const char *base_name (const char *name);
-char *find_executable (const char *wrapper);
-char *chase_symlinks (const char *pathspec);
-int make_executable (const char *path);
-int check_executable (const char *path);
-char *strendzap (char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-static const char *script_text =
-EOF
-
- func_emit_wrapper yes |
- $SED -e 's/\([\\"]\)/\\\1/g' \
- -e 's/^/ "/' -e 's/$/\\n"/'
- echo ";"
-
- cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
-
-int
-main (int argc, char *argv[])
-{
- char **newargz;
- char *tmp_pathspec;
- char *actual_cwrapper_path;
- char *shwrapper_name;
- intptr_t rval = 127;
- FILE *shwrapper;
-
- const char *dumpscript_opt = "--lt-dump-script";
- int i;
-
- program_name = (char *) xstrdup (base_name (argv[0]));
- LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
- LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
-
- /* very simple arg parsing; don't want to rely on getopt */
- for (i = 1; i < argc; i++)
- {
- if (strcmp (argv[i], dumpscript_opt) == 0)
- {
-EOF
- case "$host" in
- *mingw* | *cygwin* )
- # make stdout use "unix" line endings
- echo " setmode(1,_O_BINARY);"
- ;;
- esac
-
- cat <<EOF
- printf ("%s", script_text);
- return 0;
- }
- }
-
- newargz = XMALLOC (char *, argc + 2);
-EOF
-
- if test -n "$TARGETSHELL" ; then
- # no path translation at all
- lt_newargv0=$TARGETSHELL
- else
- case "$host" in
- *mingw* )
- # awkward: cmd appends spaces to result
- lt_sed_strip_trailing_spaces="s/[ ]*\$//"
- lt_newargv0=`( cmd //c echo $SHELL | $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo $SHELL`
- case $lt_newargv0 in
- *.exe | *.EXE) ;;
- *) lt_newargv0=$lt_newargv0.exe ;;
- esac
- ;;
- * ) lt_newargv0=$SHELL ;;
- esac
- fi
-
- cat <<EOF
- newargz[0] = (char *) xstrdup ("$lt_newargv0");
-EOF
-
- cat <<"EOF"
- tmp_pathspec = find_executable (argv[0]);
- if (tmp_pathspec == NULL)
- lt_fatal ("Couldn't find %s", argv[0]);
- LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
- tmp_pathspec));
-
- actual_cwrapper_path = chase_symlinks (tmp_pathspec);
- LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
- actual_cwrapper_path));
- XFREE (tmp_pathspec);
-
- shwrapper_name = (char *) xstrdup (base_name (actual_cwrapper_path));
- strendzap (actual_cwrapper_path, shwrapper_name);
-
- /* shwrapper_name transforms */
- strendzap (shwrapper_name, ".exe");
- tmp_pathspec = XMALLOC (char, (strlen (shwrapper_name) +
- strlen ("_ltshwrapperTMP") + 1));
- strcpy (tmp_pathspec, shwrapper_name);
- strcat (tmp_pathspec, "_ltshwrapperTMP");
- XFREE (shwrapper_name);
- shwrapper_name = tmp_pathspec;
- tmp_pathspec = 0;
- LTWRAPPER_DEBUGPRINTF (("(main) libtool shell wrapper name: %s\n",
- shwrapper_name));
-EOF
-
- cat <<EOF
- newargz[1] =
- XMALLOC (char, (strlen (actual_cwrapper_path) +
- strlen ("$objdir") + 1 + strlen (shwrapper_name) + 1));
- strcpy (newargz[1], actual_cwrapper_path);
- strcat (newargz[1], "$objdir");
- strcat (newargz[1], "/");
- strcat (newargz[1], shwrapper_name);
-EOF
-
-
- case $host_os in
- mingw*)
- cat <<"EOF"
- {
- char* p;
- while ((p = strchr (newargz[1], '\\')) != NULL)
- {
- *p = '/';
- }
- }
-EOF
- ;;
- esac
-
- cat <<"EOF"
- XFREE (shwrapper_name);
- XFREE (actual_cwrapper_path);
-
- /* always write in binary mode */
- if ((shwrapper = fopen (newargz[1], FOPEN_WB)) == 0)
- {
- lt_fatal ("Could not open %s for writing", newargz[1]);
- }
- fprintf (shwrapper, "%s", script_text);
- fclose (shwrapper);
-
- make_executable (newargz[1]);
-
- for (i = 1; i < argc; i++)
- newargz[i + 1] = xstrdup (argv[i]);
- newargz[argc + 1] = NULL;
-
- for (i = 0; i < argc + 1; i++)
- {
- LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, newargz[i]));
- }
-
-EOF
-
- case $host_os in
- mingw*)
- cat <<EOF
- /* execv doesn't actually work on mingw as expected on unix */
- rval = _spawnv (_P_WAIT, "$lt_newargv0", (const char * const *) newargz);
- if (rval == -1)
- {
- /* failed to start process */
- LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"$lt_newargv0\": errno = %d\n", errno));
- return 127;
- }
- return rval;
-}
-EOF
- ;;
- *)
- cat <<EOF
- execv ("$lt_newargv0", newargz);
- return rval; /* =127, but avoids unused variable warning */
-}
-EOF
- ;;
- esac
-
- cat <<"EOF"
-
-void *
-xmalloc (size_t num)
-{
- void *p = (void *) malloc (num);
- if (!p)
- lt_fatal ("Memory exhausted");
-
- return p;
-}
-
-char *
-xstrdup (const char *string)
-{
- return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
- string) : NULL;
-}
-
-const char *
-base_name (const char *name)
-{
- const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Skip over the disk name in MSDOS pathnames. */
- if (isalpha ((unsigned char) name[0]) && name[1] == ':')
- name += 2;
-#endif
-
- for (base = name; *name; name++)
- if (IS_DIR_SEPARATOR (*name))
- base = name + 1;
- return base;
-}
-
-int
-check_executable (const char *path)
-{
- struct stat st;
-
- LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
- path ? (*path ? path : "EMPTY!") : "NULL!"));
- if ((!path) || (!*path))
- return 0;
-
- if ((stat (path, &st) >= 0)
- && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
- return 1;
- else
- return 0;
-}
-
-int
-make_executable (const char *path)
-{
- int rval = 0;
- struct stat st;
-
- LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
- path ? (*path ? path : "EMPTY!") : "NULL!"));
- if ((!path) || (!*path))
- return 0;
-
- if (stat (path, &st) >= 0)
- {
- rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
- }
- return rval;
-}
-
-/* Searches for the full path of the wrapper. Returns
- newly allocated full path name if found, NULL otherwise
- Does not chase symlinks, even on platforms that support them.
-*/
-char *
-find_executable (const char *wrapper)
-{
- int has_slash = 0;
- const char *p;
- const char *p_next;
- /* static buffer for getcwd */
- char tmp[LT_PATHMAX + 1];
- int tmp_len;
- char *concat_name;
-
- LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
- wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
-
- if ((wrapper == NULL) || (*wrapper == '\0'))
- return NULL;
-
- /* Absolute path? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
- {
- concat_name = xstrdup (wrapper);
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- }
- else
- {
-#endif
- if (IS_DIR_SEPARATOR (wrapper[0]))
- {
- concat_name = xstrdup (wrapper);
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- }
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- }
-#endif
-
- for (p = wrapper; *p; p++)
- if (*p == '/')
- {
- has_slash = 1;
- break;
- }
- if (!has_slash)
- {
- /* no slashes; search PATH */
- const char *path = getenv ("PATH");
- if (path != NULL)
- {
- for (p = path; *p; p = p_next)
- {
- const char *q;
- size_t p_len;
- for (q = p; *q; q++)
- if (IS_PATH_SEPARATOR (*q))
- break;
- p_len = q - p;
- p_next = (*q == '\0' ? q : q + 1);
- if (p_len == 0)
- {
- /* empty path: current directory */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- tmp_len = strlen (tmp);
- concat_name =
- XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
- }
- else
- {
- concat_name =
- XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
- memcpy (concat_name, p, p_len);
- concat_name[p_len] = '/';
- strcpy (concat_name + p_len + 1, wrapper);
- }
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- }
- }
- /* not found in PATH; assume curdir */
- }
- /* Relative path | not found in path: prepend cwd */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- tmp_len = strlen (tmp);
- concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
-
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- return NULL;
-}
-
-char *
-chase_symlinks (const char *pathspec)
-{
-#ifndef S_ISLNK
- return xstrdup (pathspec);
-#else
- char buf[LT_PATHMAX];
- struct stat s;
- char *tmp_pathspec = xstrdup (pathspec);
- char *p;
- int has_symlinks = 0;
- while (strlen (tmp_pathspec) && !has_symlinks)
- {
- LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
- tmp_pathspec));
- if (lstat (tmp_pathspec, &s) == 0)
- {
- if (S_ISLNK (s.st_mode) != 0)
- {
- has_symlinks = 1;
- break;
- }
-
- /* search backwards for last DIR_SEPARATOR */
- p = tmp_pathspec + strlen (tmp_pathspec) - 1;
- while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
- p--;
- if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
- {
- /* no more DIR_SEPARATORS left */
- break;
- }
- *p = '\0';
- }
- else
- {
- char *errstr = strerror (errno);
- lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
- }
- }
- XFREE (tmp_pathspec);
-
- if (!has_symlinks)
- {
- return xstrdup (pathspec);
- }
-
- tmp_pathspec = realpath (pathspec, buf);
- if (tmp_pathspec == 0)
- {
- lt_fatal ("Could not follow symlinks for %s", pathspec);
- }
- return xstrdup (tmp_pathspec);
-#endif
-}
-
-char *
-strendzap (char *str, const char *pat)
-{
- size_t len, patlen;
-
- assert (str != NULL);
- assert (pat != NULL);
-
- len = strlen (str);
- patlen = strlen (pat);
-
- if (patlen <= len)
- {
- str += len - patlen;
- if (strcmp (str, pat) == 0)
- *str = '\0';
- }
- return str;
-}
-
-static void
-lt_error_core (int exit_status, const char *mode,
- const char *message, va_list ap)
-{
- fprintf (stderr, "%s: %s: ", program_name, mode);
- vfprintf (stderr, message, ap);
- fprintf (stderr, ".\n");
-
- if (exit_status >= 0)
- exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
- va_list ap;
- va_start (ap, message);
- lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
- va_end (ap);
-}
-EOF
-}
-# end: func_emit_cwrapperexe_src
-
-# func_mode_link arg...
-func_mode_link ()
-{
- $opt_debug
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # It is impossible to link a dll without this setting, and
- # we shouldn't force the makefile maintainer to figure out
- # which system we are compiling for in order to pass an extra
- # flag for every libtool invocation.
- # allow_undefined=no
-
- # FIXME: Unfortunately, there are problems with the above when trying
- # to make a dll which has undefined symbols, in which case not
- # even a static library is built. For now, we need to specify
- # -no-undefined on the libtool link line when we can be certain
- # that all symbols are satisfied, otherwise we get a static library.
- allow_undefined=yes
- ;;
- *)
- allow_undefined=yes
- ;;
- esac
- libtool_args=$nonopt
- base_compile="$nonopt $@"
- compile_command=$nonopt
- finalize_command=$nonopt
-
- compile_rpath=
- finalize_rpath=
- compile_shlibpath=
- finalize_shlibpath=
- convenience=
- old_convenience=
- deplibs=
- old_deplibs=
- compiler_flags=
- linker_flags=
- dllsearchpath=
- lib_search_path=`pwd`
- inst_prefix_dir=
- new_inherited_linker_flags=
-
- avoid_version=no
- dlfiles=
- dlprefiles=
- dlself=no
- export_dynamic=no
- export_symbols=
- export_symbols_regex=
- generated=
- libobjs=
- ltlibs=
- module=no
- no_install=no
- objs=
- non_pic_objects=
- precious_files_regex=
- prefer_static_libs=no
- preload=no
- prev=
- prevarg=
- release=
- rpath=
- xrpath=
- perm_rpath=
- temp_rpath=
- thread_safe=no
- vinfo=
- vinfo_number=no
- weak_libs=
- single_module="${wl}-single_module"
- func_infer_tag $base_compile
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case $arg in
- -shared)
- test "$build_libtool_libs" != yes && \
- func_fatal_configuration "can not build a shared library"
- build_old_libs=no
- break
- ;;
- -all-static | -static | -static-libtool-libs)
- case $arg in
- -all-static)
- if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- func_warning "complete static linking is impossible in this configuration"
- fi
- if test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=yes
- ;;
- -static)
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=built
- ;;
- -static-libtool-libs)
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=yes
- ;;
- esac
- build_libtool_libs=no
- build_old_libs=yes
- break
- ;;
- esac
- done
-
- # See if our shared archives depend on static archives.
- test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
- # Go through the arguments, transforming them on the way.
- while test "$#" -gt 0; do
- arg="$1"
- shift
- func_quote_for_eval "$arg"
- qarg=$func_quote_for_eval_unquoted_result
- func_append libtool_args " $func_quote_for_eval_result"
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- output)
- func_append compile_command " @OUTPUT@"
- func_append finalize_command " @OUTPUT@"
- ;;
- esac
-
- case $prev in
- dlfiles|dlprefiles)
- if test "$preload" = no; then
- # Add the symbol object into the linking commands.
- func_append compile_command " @SYMFILE@"
- func_append finalize_command " @SYMFILE@"
- preload=yes
- fi
- case $arg in
- *.la | *.lo) ;; # We handle these cases below.
- force)
- if test "$dlself" = no; then
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- self)
- if test "$prev" = dlprefiles; then
- dlself=yes
- elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- dlself=yes
- else
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- *)
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- else
- dlprefiles="$dlprefiles $arg"
- fi
- prev=
- continue
- ;;
- esac
- ;;
- expsyms)
- export_symbols="$arg"
- test -f "$arg" \
- || func_fatal_error "symbol file \`$arg' does not exist"
- prev=
- continue
- ;;
- expsyms_regex)
- export_symbols_regex="$arg"
- prev=
- continue
- ;;
- framework)
- case $host in
- *-*-darwin*)
- case "$deplibs " in
- *" $qarg.ltframework "*) ;;
- *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
- ;;
- esac
- ;;
- esac
- prev=
- continue
- ;;
- inst_prefix)
- inst_prefix_dir="$arg"
- prev=
- continue
- ;;
- objectlist)
- if test -f "$arg"; then
- save_arg=$arg
- moreargs=
- for fil in `cat "$save_arg"`
- do
-# moreargs="$moreargs $fil"
- arg=$fil
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if func_lalib_unsafe_p "$arg"; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- func_source "$arg"
-
- if test -z "$pic_object" ||
- test -z "$non_pic_object" ||
- test "$pic_object" = none &&
- test "$non_pic_object" = none; then
- func_fatal_error "cannot find name of object for \`$arg'"
- fi
-
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir="$func_dirname_result"
-
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- pic_object="$xdir$pic_object"
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
- prev=
- fi
-
- # A PIC object.
- func_append libobjs " $pic_object"
- arg="$pic_object"
- fi
-
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- non_pic_object="$xdir$non_pic_object"
-
- # A standard non-PIC object
- func_append non_pic_objects " $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object="$pic_object"
- func_append non_pic_objects " $non_pic_object"
- fi
- else
- # Only an error if not doing a dry-run.
- if $opt_dry_run; then
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir="$func_dirname_result"
-
- func_lo2o "$arg"
- pic_object=$xdir$objdir/$func_lo2o_result
- non_pic_object=$xdir$func_lo2o_result
- func_append libobjs " $pic_object"
- func_append non_pic_objects " $non_pic_object"
- else
- func_fatal_error "\`$arg' is not a valid libtool object"
- fi
- fi
- done
- else
- func_fatal_error "link input file \`$arg' does not exist"
- fi
- arg=$save_arg
- prev=
- continue
- ;;
- precious_regex)
- precious_files_regex="$arg"
- prev=
- continue
- ;;
- release)
- release="-$arg"
- prev=
- continue
- ;;
- rpath | xrpath)
- # We need an absolute path.
- case $arg in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- func_fatal_error "only absolute run-paths are allowed"
- ;;
- esac
- if test "$prev" = rpath; then
- case "$rpath " in
- *" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
- esac
- fi
- prev=
- continue
- ;;
- shrext)
- shrext_cmds="$arg"
- prev=
- continue
- ;;
- weak)
- weak_libs="$weak_libs $arg"
- prev=
- continue
- ;;
- xcclinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $qarg"
- prev=
- func_append compile_command " $qarg"
- func_append finalize_command " $qarg"
- continue
- ;;
- xcompiler)
- compiler_flags="$compiler_flags $qarg"
- prev=
- func_append compile_command " $qarg"
- func_append finalize_command " $qarg"
- continue
- ;;
- xlinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $wl$qarg"
- prev=
- func_append compile_command " $wl$qarg"
- func_append finalize_command " $wl$qarg"
- continue
- ;;
- *)
- eval "$prev=\"\$arg\""
- prev=
- continue
- ;;
- esac
- fi # test -n "$prev"
-
- prevarg="$arg"
-
- case $arg in
- -all-static)
- if test -n "$link_static_flag"; then
- # See comment for -static flag below, for more details.
- func_append compile_command " $link_static_flag"
- func_append finalize_command " $link_static_flag"
- fi
- continue
- ;;
-
- -allow-undefined)
- # FIXME: remove this flag sometime in the future.
- func_fatal_error "\`-allow-undefined' must not be used because it is the default"
- ;;
-
- -avoid-version)
- avoid_version=yes
- continue
- ;;
-
- -dlopen)
- prev=dlfiles
- continue
- ;;
-
- -dlpreopen)
- prev=dlprefiles
- continue
- ;;
-
- -export-dynamic)
- export_dynamic=yes
- continue
- ;;
-
- -export-symbols | -export-symbols-regex)
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- func_fatal_error "more than one -exported-symbols argument is not allowed"
- fi
- if test "X$arg" = "X-export-symbols"; then
- prev=expsyms
- else
- prev=expsyms_regex
- fi
- continue
- ;;
-
- -framework)
- prev=framework
- continue
- ;;
-
- -inst-prefix-dir)
- prev=inst_prefix
- continue
- ;;
-
- # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
- # so, if we see these flags be careful not to treat them like -L
- -L[A-Z][A-Z]*:*)
- case $with_gcc/$host in
- no/*-*-irix* | /*-*-irix*)
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- ;;
- esac
- continue
- ;;
-
- -L*)
- func_stripname '-L' '' "$arg"
- dir=$func_stripname_result
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- test -z "$absdir" && \
- func_fatal_error "cannot determine absolute directory name of \`$dir'"
- dir="$absdir"
- ;;
- esac
- case "$deplibs " in
- *" -L$dir "*) ;;
- *)
- deplibs="$deplibs -L$dir"
- lib_search_path="$lib_search_path $dir"
- ;;
- esac
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
- case :$dllsearchpath: in
- *":$dir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
- esac
- ;;
- esac
- continue
- ;;
-
- -l*)
- if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
- # These systems don't actually have a C or math library (as such)
- continue
- ;;
- *-*-os2*)
- # These systems don't actually have a C library (as such)
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc due to us having libc/libc_r.
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C and math libraries are in the System framework
- deplibs="$deplibs System.ltframework"
- continue
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
- test "X$arg" = "X-lc" && continue
- ;;
- esac
- elif test "X$arg" = "X-lc_r"; then
- case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc_r directly, use -pthread flag.
- continue
- ;;
- esac
- fi
- deplibs="$deplibs $arg"
- continue
- ;;
-
- -module)
- module=yes
- continue
- ;;
-
- # Tru64 UNIX uses -model [arg] to determine the layout of C++
- # classes, name mangling, and exception handling.
- # Darwin uses the -arch flag to determine output architecture.
- -model|-arch|-isysroot)
- compiler_flags="$compiler_flags $arg"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- prev=xcompiler
- continue
- ;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
- compiler_flags="$compiler_flags $arg"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- case "$new_inherited_linker_flags " in
- *" $arg "*) ;;
- * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
- esac
- continue
- ;;
-
- -multi_module)
- single_module="${wl}-multi_module"
- continue
- ;;
-
- -no-fast-install)
- fast_install=no
- continue
- ;;
-
- -no-install)
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
- # The PATH hackery in wrapper scripts is required on Windows
- # and Darwin in order for the loader to find any dlls it needs.
- func_warning "\`-no-install' is ignored for $host"
- func_warning "assuming \`-no-fast-install' instead"
- fast_install=no
- ;;
- *) no_install=yes ;;
- esac
- continue
- ;;
-
- -no-undefined)
- allow_undefined=no
- continue
- ;;
-
- -objectlist)
- prev=objectlist
- continue
- ;;
-
- -o) prev=output ;;
-
- -precious-files-regex)
- prev=precious_regex
- continue
- ;;
-
- -release)
- prev=release
- continue
- ;;
-
- -rpath)
- prev=rpath
- continue
- ;;
-
- -R)
- prev=xrpath
- continue
- ;;
-
- -R*)
- func_stripname '-R' '' "$arg"
- dir=$func_stripname_result
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- func_fatal_error "only absolute run-paths are allowed"
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- continue
- ;;
-
- -shared)
- # The effects of -shared are defined in a previous loop.
- continue
- ;;
-
- -shrext)
- prev=shrext
- continue
- ;;
-
- -static | -static-libtool-libs)
- # The effects of -static are defined in a previous loop.
- # We used to do the same as -all-static on platforms that
- # didn't have a PIC flag, but the assumption that the effects
- # would be equivalent was wrong. It would break on at least
- # Digital Unix and AIX.
- continue
- ;;
-
- -thread-safe)
- thread_safe=yes
- continue
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
-
- -version-number)
- prev=vinfo
- vinfo_number=yes
- continue
- ;;
-
- -weak)
- prev=weak
- continue
- ;;
-
- -Wc,*)
- func_stripname '-Wc,' '' "$arg"
- args=$func_stripname_result
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- func_quote_for_eval "$flag"
- arg="$arg $wl$func_quote_for_eval_result"
- compiler_flags="$compiler_flags $func_quote_for_eval_result"
- done
- IFS="$save_ifs"
- func_stripname ' ' '' "$arg"
- arg=$func_stripname_result
- ;;
-
- -Wl,*)
- func_stripname '-Wl,' '' "$arg"
- args=$func_stripname_result
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- func_quote_for_eval "$flag"
- arg="$arg $wl$func_quote_for_eval_result"
- compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
- linker_flags="$linker_flags $func_quote_for_eval_result"
- done
- IFS="$save_ifs"
- func_stripname ' ' '' "$arg"
- arg=$func_stripname_result
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Xlinker)
- prev=xlinker
- continue
- ;;
-
- -XCClinker)
- prev=xcclinker
- continue
- ;;
-
- # -msg_* for osf cc
- -msg_*)
- func_quote_for_eval "$arg"
- arg="$func_quote_for_eval_result"
- ;;
-
- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
- # -r[0-9][0-9]* specifies the processor on the SGI compiler
- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
- # +DA*, +DD* enable 64-bit mode on the HP compiler
- # -q* pass through compiler args for the IBM compiler
- # -m*, -t[45]*, -txscale* pass through architecture-specific
- # compiler args for GCC
- # -F/path gives path to uninstalled frameworks, gcc on darwin
- # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
- # @file GCC response files
- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
- func_quote_for_eval "$arg"
- arg="$func_quote_for_eval_result"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- compiler_flags="$compiler_flags $arg"
- continue
- ;;
-
- # Some other compiler flag.
- -* | +*)
- func_quote_for_eval "$arg"
- arg="$func_quote_for_eval_result"
- ;;
-
- *.$objext)
- # A standard object.
- objs="$objs $arg"
- ;;
-
- *.lo)
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if func_lalib_unsafe_p "$arg"; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- func_source "$arg"
-
- if test -z "$pic_object" ||
- test -z "$non_pic_object" ||
- test "$pic_object" = none &&
- test "$non_pic_object" = none; then
- func_fatal_error "cannot find name of object for \`$arg'"
- fi
-
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir="$func_dirname_result"
-
- if test "$pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- pic_object="$xdir$pic_object"
-
- if test "$prev" = dlfiles; then
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
- prev=
- fi
-
- # A PIC object.
- func_append libobjs " $pic_object"
- arg="$pic_object"
- fi
-
- # Non-PIC object.
- if test "$non_pic_object" != none; then
- # Prepend the subdirectory the object is found in.
- non_pic_object="$xdir$non_pic_object"
-
- # A standard non-PIC object
- func_append non_pic_objects " $non_pic_object"
- if test -z "$pic_object" || test "$pic_object" = none ; then
- arg="$non_pic_object"
- fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object="$pic_object"
- func_append non_pic_objects " $non_pic_object"
- fi
- else
- # Only an error if not doing a dry-run.
- if $opt_dry_run; then
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir="$func_dirname_result"
-
- func_lo2o "$arg"
- pic_object=$xdir$objdir/$func_lo2o_result
- non_pic_object=$xdir$func_lo2o_result
- func_append libobjs " $pic_object"
- func_append non_pic_objects " $non_pic_object"
- else
- func_fatal_error "\`$arg' is not a valid libtool object"
- fi
- fi
- ;;
-
- *.$libext)
- # An archive.
- deplibs="$deplibs $arg"
- old_deplibs="$old_deplibs $arg"
- continue
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- if test "$prev" = dlfiles; then
- # This library was specified with -dlopen.
- dlfiles="$dlfiles $arg"
- prev=
- elif test "$prev" = dlprefiles; then
- # The library was specified with -dlpreopen.
- dlprefiles="$dlprefiles $arg"
- prev=
- else
- deplibs="$deplibs $arg"
- fi
- continue
- ;;
-
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- func_quote_for_eval "$arg"
- arg="$func_quote_for_eval_result"
- ;;
- esac # arg
-
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- fi
- done # argument parsing loop
-
- test -n "$prev" && \
- func_fatal_help "the \`$prevarg' option requires an argument"
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- fi
-
- oldlibs=
- # calculate the name of the file, without its directory
- func_basename "$output"
- outputname="$func_basename_result"
- libobjs_save="$libobjs"
-
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- shlib_search_path=
- fi
- eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- func_dirname "$output" "/" ""
- output_objdir="$func_dirname_result$objdir"
- # Create the object directory.
- func_mkdir_p "$output_objdir"
-
- # Determine the type of output
- case $output in
- "")
- func_fatal_help "you must specify an output file"
- ;;
- *.$libext) linkmode=oldlib ;;
- *.lo | *.$objext) linkmode=obj ;;
- *.la) linkmode=lib ;;
- *) linkmode=prog ;; # Anything else should be a program.
- esac
-
- specialdeplibs=
-
- libs=
- # Find all interdependent deplibs by searching for libraries
- # that are linked more than once (e.g. -la -lb -la)
- for deplib in $deplibs; do
- if $opt_duplicate_deps ; then
- case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- libs="$libs $deplib"
- done
-
- if test "$linkmode" = lib; then
- libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
- # Compute libraries that are listed more than once in $predeps
- # $postdeps and mark them as special (i.e., whose duplicates are
- # not to be eliminated).
- pre_post_deps=
- if $opt_duplicate_compiler_generated_deps; then
- for pre_post_dep in $predeps $postdeps; do
- case "$pre_post_deps " in
- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
- esac
- pre_post_deps="$pre_post_deps $pre_post_dep"
- done
- fi
- pre_post_deps=
- fi
-
- deplibs=
- newdependency_libs=
- newlib_search_path=
- need_relink=no # whether we're linking any uninstalled libtool libraries
- notinst_deplibs= # not-installed libtool libraries
- notinst_path= # paths that contain not-installed libtool libraries
-
- case $linkmode in
- lib)
- passes="conv dlpreopen link"
- for file in $dlfiles $dlprefiles; do
- case $file in
- *.la) ;;
- *)
- func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
- ;;
- esac
- done
- ;;
- prog)
- compile_deplibs=
- finalize_deplibs=
- alldeplibs=no
- newdlfiles=
- newdlprefiles=
- passes="conv scan dlopen dlpreopen link"
- ;;
- *) passes="conv"
- ;;
- esac
-
- for pass in $passes; do
- # The preopen pass in lib mode reverses $deplibs; put it back here
- # so that -L comes before libs that need it for instance...
- if test "$linkmode,$pass" = "lib,link"; then
- ## FIXME: Find the place where the list is rebuilt in the wrong
- ## order, and fix it there properly
- tmp_deplibs=
- for deplib in $deplibs; do
- tmp_deplibs="$deplib $tmp_deplibs"
- done
- deplibs="$tmp_deplibs"
- fi
-
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan"; then
- libs="$deplibs"
- deplibs=
- fi
- if test "$linkmode" = prog; then
- case $pass in
- dlopen) libs="$dlfiles" ;;
- dlpreopen) libs="$dlprefiles" ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
- esac
- fi
- if test "$linkmode,$pass" = "lib,dlpreopen"; then
- # Collect and forward deplibs of preopened libtool libs
- for lib in $dlprefiles; do
- # Ignore non-libtool-libs
- dependency_libs=
- case $lib in
- *.la) func_source "$lib" ;;
- esac
-
- # Collect preopened libtool deplibs, except any this library
- # has declared as weak libs
- for deplib in $dependency_libs; do
- deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
- case " $weak_libs " in
- *" $deplib_base "*) ;;
- *) deplibs="$deplibs $deplib" ;;
- esac
- done
- done
- libs="$dlprefiles"
- fi
- if test "$pass" = dlopen; then
- # Collect dlpreopened libraries
- save_deplibs="$deplibs"
- deplibs=
- fi
-
- for deplib in $libs; do
- lib=
- found=no
- case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- compiler_flags="$compiler_flags $deplib"
- if test "$linkmode" = lib ; then
- case "$new_inherited_linker_flags " in
- *" $deplib "*) ;;
- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
- esac
- fi
- fi
- continue
- ;;
- -l*)
- if test "$linkmode" != lib && test "$linkmode" != prog; then
- func_warning "\`-l' is ignored for archives/objects"
- continue
- fi
- func_stripname '-l' '' "$deplib"
- name=$func_stripname_result
- if test "$linkmode" = lib; then
- searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
- else
- searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
- fi
- for searchdir in $searchdirs; do
- for search_ext in .la $std_shrext .so .a; do
- # Search the libtool library
- lib="$searchdir/lib${name}${search_ext}"
- if test -f "$lib"; then
- if test "$search_ext" = ".la"; then
- found=yes
- else
- found=no
- fi
- break 2
- fi
- done
- done
- if test "$found" != yes; then
- # deplib doesn't seem to be a libtool library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- else # deplib is a libtool library
- # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
- # We need to do some special things here, and not later.
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $deplib "*)
- if func_lalib_p "$lib"; then
- library_names=
- old_library=
- func_source "$lib"
- for l in $old_library $library_names; do
- ll="$l"
- done
- if test "X$ll" = "X$old_library" ; then # only static version available
- found=no
- func_dirname "$lib" "" "."
- ladir="$func_dirname_result"
- lib=$ladir/$old_library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- fi
- fi
- ;;
- *) ;;
- esac
- fi
- fi
- ;; # -l
- *.ltframework)
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- if test "$linkmode" = lib ; then
- case "$new_inherited_linker_flags " in
- *" $deplib "*) ;;
- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
- esac
- fi
- fi
- continue
- ;;
- -L*)
- case $linkmode in
- lib)
- deplibs="$deplib $deplibs"
- test "$pass" = conv && continue
- newdependency_libs="$deplib $newdependency_libs"
- func_stripname '-L' '' "$deplib"
- newlib_search_path="$newlib_search_path $func_stripname_result"
- ;;
- prog)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- if test "$pass" = scan; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- func_stripname '-L' '' "$deplib"
- newlib_search_path="$newlib_search_path $func_stripname_result"
- ;;
- *)
- func_warning "\`-L' is ignored for archives/objects"
- ;;
- esac # linkmode
- continue
- ;; # -L
- -R*)
- if test "$pass" = link; then
- func_stripname '-R' '' "$deplib"
- dir=$func_stripname_result
- # Make sure the xrpath contains only unique directories.
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- fi
- deplibs="$deplib $deplibs"
- continue
- ;;
- *.la) lib="$deplib" ;;
- *.$libext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- case $linkmode in
- lib)
- # Linking convenience modules into shared libraries is allowed,
- # but linking other static libraries is non-portable.
- case " $dlpreconveniencelibs " in
- *" $deplib "*) ;;
- *)
- valid_a_lib=no
- case $deplibs_check_method in
- match_pattern*)
- set dummy $deplibs_check_method; shift
- match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
- | $EGREP "$match_pattern_regex" > /dev/null; then
- valid_a_lib=yes
- fi
- ;;
- pass_all)
- valid_a_lib=yes
- ;;
- esac
- if test "$valid_a_lib" != yes; then
- $ECHO
- $ECHO "*** Warning: Trying to link with static lib archive $deplib."
- $ECHO "*** I have the capability to make that library automatically link in when"
- $ECHO "*** you link to this library. But I can only do this if you have a"
- $ECHO "*** shared version of the library, which you do not appear to have"
- $ECHO "*** because the file extensions .$libext of this argument makes me believe"
- $ECHO "*** that it is just a static archive that I should not use here."
- else
- $ECHO
- $ECHO "*** Warning: Linking the shared library $output against the"
- $ECHO "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- fi
- ;;
- esac
- continue
- ;;
- prog)
- if test "$pass" != link; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- continue
- ;;
- esac # linkmode
- ;; # *.$libext
- *.lo | *.$objext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
- elif test "$linkmode" = prog; then
- if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
- newdlprefiles="$newdlprefiles $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- newdlfiles="$newdlfiles $deplib"
- fi
- fi
- continue
- ;;
- %DEPLIBS%)
- alldeplibs=yes
- continue
- ;;
- esac # case $deplib
-
- if test "$found" = yes || test -f "$lib"; then :
- else
- func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
- fi
-
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$lib" \
- || func_fatal_error "\`$lib' is not a valid libtool archive"
-
- func_dirname "$lib" "" "."
- ladir="$func_dirname_result"
-
- dlname=
- dlopen=
- dlpreopen=
- libdir=
- library_names=
- old_library=
- inherited_linker_flags=
- # If the library was installed with an old release of libtool,
- # it will not redefine variables installed, or shouldnotlink
- installed=yes
- shouldnotlink=no
- avoidtemprpath=
-
-
- # Read the .la file
- func_source "$lib"
-
- # Convert "-framework foo" to "foo.ltframework"
- if test -n "$inherited_linker_flags"; then
- tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
- for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
- case " $new_inherited_linker_flags " in
- *" $tmp_inherited_linker_flag "*) ;;
- *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
- esac
- done
- fi
- dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan" ||
- { test "$linkmode" != prog && test "$linkmode" != lib; }; then
- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
- fi
-
- if test "$pass" = conv; then
- # Only check for convenience libraries
- deplibs="$lib $deplibs"
- if test -z "$libdir"; then
- if test -z "$old_library"; then
- func_fatal_error "cannot find name of link library for \`$lib'"
- fi
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $ladir/$objdir/$old_library"
- old_convenience="$old_convenience $ladir/$objdir/$old_library"
- elif test "$linkmode" != prog && test "$linkmode" != lib; then
- func_fatal_error "\`$lib' is not a convenience library"
- fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_duplicate_deps ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
- continue
- fi # $pass = conv
-
-
- # Get the name of the library we link against.
- linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
- if test -z "$linklib"; then
- func_fatal_error "cannot find name of link library for \`$lib'"
- fi
-
- # This library was specified with -dlopen.
- if test "$pass" = dlopen; then
- if test -z "$libdir"; then
- func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
- fi
- if test -z "$dlname" ||
- test "$dlopen_support" != yes ||
- test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking
- # statically, we need to preload. We also need to preload any
- # dependent libraries so libltdl's deplib preloader doesn't
- # bomb out in the load deplibs phase.
- dlprefiles="$dlprefiles $lib $dependency_libs"
- else
- newdlfiles="$newdlfiles $lib"
- fi
- continue
- fi # $pass = dlopen
-
- # We need an absolute path.
- case $ladir in
- [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
- *)
- abs_ladir=`cd "$ladir" && pwd`
- if test -z "$abs_ladir"; then
- func_warning "cannot determine absolute directory name of \`$ladir'"
- func_warning "passing it literally to the linker, although it might fail"
- abs_ladir="$ladir"
- fi
- ;;
- esac
- func_basename "$lib"
- laname="$func_basename_result"
-
- # Find the relevant object directory and library name.
- if test "X$installed" = Xyes; then
- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- func_warning "library \`$lib' was moved."
- dir="$ladir"
- absdir="$abs_ladir"
- libdir="$abs_ladir"
- else
- dir="$libdir"
- absdir="$libdir"
- fi
- test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
- else
- if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- dir="$ladir"
- absdir="$abs_ladir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- else
- dir="$ladir/$objdir"
- absdir="$abs_ladir/$objdir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- fi
- fi # $installed = yes
- func_stripname 'lib' '.la' "$laname"
- name=$func_stripname_result
-
- # This library was specified with -dlpreopen.
- if test "$pass" = dlpreopen; then
- if test -z "$libdir" && test "$linkmode" = prog; then
- func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
- fi
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- newdlprefiles="$newdlprefiles $dir/$old_library"
- # Keep a list of preopened convenience libraries to check
- # that they are being used correctly in the link pass.
- test -z "$libdir" && \
- dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- newdlprefiles="$newdlprefiles $dir/$dlname"
- else
- newdlprefiles="$newdlprefiles $dir/$linklib"
- fi
- fi # $pass = dlpreopen
-
- if test -z "$libdir"; then
- # Link the convenience library
- if test "$linkmode" = lib; then
- deplibs="$dir/$old_library $deplibs"
- elif test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$dir/$old_library $compile_deplibs"
- finalize_deplibs="$dir/$old_library $finalize_deplibs"
- else
- deplibs="$lib $deplibs" # used for prog,scan pass
- fi
- continue
- fi
-
-
- if test "$linkmode" = prog && test "$pass" != link; then
- newlib_search_path="$newlib_search_path $ladir"
- deplibs="$lib $deplibs"
-
- linkalldeplibs=no
- if test "$link_all_deplibs" != no || test -z "$library_names" ||
- test "$build_libtool_libs" = no; then
- linkalldeplibs=yes
- fi
-
- tmp_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) func_stripname '-L' '' "$deplib"
- newlib_search_path="$newlib_search_path $func_stripname_result"
- ;;
- esac
- # Need to link against all dependency_libs?
- if test "$linkalldeplibs" = yes; then
- deplibs="$deplib $deplibs"
- else
- # Need to hardcode shared library paths
- # or/and link against static libraries
- newdependency_libs="$deplib $newdependency_libs"
- fi
- if $opt_duplicate_deps ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done # for deplib
- continue
- fi # $linkmode = prog...
-
- if test "$linkmode,$pass" = "prog,link"; then
- if test -n "$library_names" &&
- { { test "$prefer_static_libs" = no ||
- test "$prefer_static_libs,$installed" = "built,yes"; } ||
- test -z "$old_library"; }; then
- # We need to hardcode the library path
- if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath:" in
- *"$absdir:"*) ;;
- *) temp_rpath="$temp_rpath$absdir:" ;;
- esac
- fi
-
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- fi # $linkmode,$pass = prog,link...
-
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
- fi
-
- link_static=no # Whether the deplib will be linked statically
- use_static_libs=$prefer_static_libs
- if test "$use_static_libs" = built && test "$installed" = yes; then
- use_static_libs=no
- fi
- if test -n "$library_names" &&
- { test "$use_static_libs" = no || test -z "$old_library"; }; then
- case $host in
- *cygwin* | *mingw*)
- # No point in relinking DLLs because paths are not encoded
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=no
- ;;
- *)
- if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
- fi
- ;;
- esac
- # This is a shared library
-
- # Warn about portability, can't link against -module's on some
- # systems (darwin). Don't bleat about dlopened modules though!
- dlopenmodule=""
- for dlpremoduletest in $dlprefiles; do
- if test "X$dlpremoduletest" = "X$lib"; then
- dlopenmodule="$dlpremoduletest"
- break
- fi
- done
- if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
- $ECHO
- if test "$linkmode" = prog; then
- $ECHO "*** Warning: Linking the executable $output against the loadable module"
- else
- $ECHO "*** Warning: Linking the shared library $output against the loadable module"
- fi
- $ECHO "*** $linklib is not portable!"
- fi
- if test "$linkmode" = lib &&
- test "$hardcode_into_libs" = yes; then
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- fi
-
- if test -n "$old_archive_from_expsyms_cmds"; then
- # figure out the soname
- set dummy $library_names
- shift
- realname="$1"
- shift
- libname=`eval "\\$ECHO \"$libname_spec\""`
- # use dlname if we got it. it's perfectly good, no?
- if test -n "$dlname"; then
- soname="$dlname"
- elif test -n "$soname_spec"; then
- # bleh windows
- case $host in
- *cygwin* | mingw*)
- func_arith $current - $age
- major=$func_arith_result
- versuffix="-$major"
- ;;
- esac
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-
- # Make a new name for the extract_expsyms_cmds to use
- soroot="$soname"
- func_basename "$soroot"
- soname="$func_basename_result"
- func_stripname 'lib' '.dll' "$soname"
- newlib=libimp-$func_stripname_result.a
-
- # If the library has no export list, then create one now
- if test -f "$output_objdir/$soname-def"; then :
- else
- func_verbose "extracting exported symbol list from \`$soname'"
- func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
- fi
-
- # Create $newlib
- if test -f "$output_objdir/$newlib"; then :; else
- func_verbose "generating import library for \`$soname'"
- func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
- fi
- # make sure the library variables are pointing to the new library
- dir=$output_objdir
- linklib=$newlib
- fi # test -n "$old_archive_from_expsyms_cmds"
-
- if test "$linkmode" = prog || test "$mode" != relink; then
- add_shlibpath=
- add_dir=
- add=
- lib_linked=yes
- case $hardcode_action in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- add="$dir/$linklib"
- case $host in
- *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
- *-*-sysv4*uw2*) add_dir="-L$dir" ;;
- *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
- *-*-unixware7*) add_dir="-L$dir" ;;
- *-*-darwin* )
- # if the lib is a (non-dlopened) module then we can not
- # link against it, someone is ignoring the earlier warnings
- if /usr/bin/file -L $add 2> /dev/null |
- $GREP ": [^:]* bundle" >/dev/null ; then
- if test "X$dlopenmodule" != "X$lib"; then
- $ECHO "*** Warning: lib $linklib is a module, not a shared library"
- if test -z "$old_library" ; then
- $ECHO
- $ECHO "*** And there doesn't seem to be a static archive available"
- $ECHO "*** The link will probably fail, sorry"
- else
- add="$dir/$old_library"
- fi
- elif test -n "$old_library"; then
- add="$dir/$old_library"
- fi
- fi
- esac
- elif test "$hardcode_minus_L" = no; then
- case $host in
- *-*-sunos*) add_shlibpath="$dir" ;;
- esac
- add_dir="-L$dir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- relink)
- if test "$hardcode_direct" = yes &&
- test "$hardcode_direct_absolute" = no; then
- add="$dir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- *) lib_linked=no ;;
- esac
-
- if test "$lib_linked" != yes; then
- func_fatal_configuration "unsupported hardcode properties"
- fi
-
- if test -n "$add_shlibpath"; then
- case :$compile_shlibpath: in
- *":$add_shlibpath:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
- esac
- fi
- if test "$linkmode" = prog; then
- test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
- test -n "$add" && compile_deplibs="$add $compile_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- if test "$hardcode_direct" != yes &&
- test "$hardcode_minus_L" != yes &&
- test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- fi
- fi
- fi
-
- if test "$linkmode" = prog || test "$mode" = relink; then
- add_shlibpath=
- add_dir=
- add=
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes &&
- test "$hardcode_direct_absolute" = no; then
- add="$libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$libdir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- add="-l$name"
- elif test "$hardcode_automatic" = yes; then
- if test -n "$inst_prefix_dir" &&
- test -f "$inst_prefix_dir$libdir/$linklib" ; then
- add="$inst_prefix_dir$libdir/$linklib"
- else
- add="$libdir/$linklib"
- fi
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- add_dir="-L$libdir"
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add="-l$name"
- fi
-
- if test "$linkmode" = prog; then
- test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
- test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- fi
- fi
- elif test "$linkmode" = prog; then
- # Here we assume that one of hardcode_direct or hardcode_minus_L
- # is not unsupported. This is valid on all known static and
- # shared platforms.
- if test "$hardcode_direct" != unsupported; then
- test -n "$old_library" && linklib="$old_library"
- compile_deplibs="$dir/$linklib $compile_deplibs"
- finalize_deplibs="$dir/$linklib $finalize_deplibs"
- else
- compile_deplibs="-l$name -L$dir $compile_deplibs"
- finalize_deplibs="-l$name -L$dir $finalize_deplibs"
- fi
- elif test "$build_libtool_libs" = yes; then
- # Not a shared library
- if test "$deplibs_check_method" != pass_all; then
- # We're trying link a shared library against a static one
- # but the system doesn't support it.
-
- # Just print a warning and add the library to dependency_libs so
- # that the program can be linked against the static library.
- $ECHO
- $ECHO "*** Warning: This system can not link to static lib archive $lib."
- $ECHO "*** I have the capability to make that library automatically link in when"
- $ECHO "*** you link to this library. But I can only do this if you have a"
- $ECHO "*** shared version of the library, which you do not appear to have."
- if test "$module" = yes; then
- $ECHO "*** But as you try to build a module library, libtool will still create "
- $ECHO "*** a static module, that should work as long as the dlopening application"
- $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
- if test -z "$global_symbol_pipe"; then
- $ECHO
- $ECHO "*** However, this would only work if libtool was able to extract symbol"
- $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $ECHO "*** not find such a program. So, this module is probably useless."
- $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- else
- deplibs="$dir/$old_library $deplibs"
- link_static=yes
- fi
- fi # link shared/static library?
-
- if test "$linkmode" = lib; then
- if test -n "$dependency_libs" &&
- { test "$hardcode_into_libs" != yes ||
- test "$build_old_libs" = yes ||
- test "$link_static" = yes; }; then
- # Extract -R from dependency_libs
- temp_deplibs=
- for libdir in $dependency_libs; do
- case $libdir in
- -R*) func_stripname '-R' '' "$libdir"
- temp_xrpath=$func_stripname_result
- case " $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- *) temp_deplibs="$temp_deplibs $libdir";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
- newlib_search_path="$newlib_search_path $absdir"
- # Link against this library
- test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- # ... and its dependency_libs
- tmp_libs=
- for deplib in $dependency_libs; do
- newdependency_libs="$deplib $newdependency_libs"
- if $opt_duplicate_deps ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
-
- if test "$link_all_deplibs" != no; then
- # Add the search paths of all dependency libraries
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) path="$deplib" ;;
- *.la)
- func_dirname "$deplib" "" "."
- dir="$func_dirname_result"
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- func_warning "cannot determine absolute directory name of \`$dir'"
- absdir="$dir"
- fi
- ;;
- esac
- if $GREP "^installed=no" $deplib > /dev/null; then
- case $host in
- *-*-darwin*)
- depdepl=
- eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
- if test -n "$deplibrary_names" ; then
- for tmp in $deplibrary_names ; do
- depdepl=$tmp
- done
- if test -f "$absdir/$objdir/$depdepl" ; then
- depdepl="$absdir/$objdir/$depdepl"
- darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
- if test -z "$darwin_install_name"; then
- darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
- fi
- compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
- linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
- path=
- fi
- fi
- ;;
- *)
- path="-L$absdir/$objdir"
- ;;
- esac
- else
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- test -z "$libdir" && \
- func_fatal_error "\`$deplib' is not a valid libtool archive"
- test "$absdir" != "$libdir" && \
- func_warning "\`$deplib' seems to be moved"
-
- path="-L$absdir"
- fi
- ;;
- esac
- case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$path $deplibs" ;;
- esac
- done
- fi # link_all_deplibs != no
- fi # linkmode = lib
- done # for deplib in $libs
- if test "$pass" = link; then
- if test "$linkmode" = "prog"; then
- compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
- finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
- else
- compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- fi
- fi
- dependency_libs="$newdependency_libs"
- if test "$pass" = dlpreopen; then
- # Link the dlpreopened libraries before other libraries
- for deplib in $save_deplibs; do
- deplibs="$deplib $deplibs"
- done
- fi
- if test "$pass" != dlopen; then
- if test "$pass" != conv; then
- # Make sure lib_search_path contains only unique directories.
- lib_search_path=
- for dir in $newlib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
- esac
- done
- newlib_search_path=
- fi
-
- if test "$linkmode,$pass" != "prog,link"; then
- vars="deplibs"
- else
- vars="compile_deplibs finalize_deplibs"
- fi
- for var in $vars dependency_libs; do
- # Add libraries to $var in reverse order
- eval tmp_libs=\"\$$var\"
- new_libs=
- for deplib in $tmp_libs; do
- # FIXME: Pedantically, this is the right thing to do, so
- # that some nasty dependency loop isn't accidentally
- # broken:
- #new_libs="$deplib $new_libs"
- # Pragmatically, this seems to cause very few problems in
- # practice:
- case $deplib in
- -L*) new_libs="$deplib $new_libs" ;;
- -R*) ;;
- *)
- # And here is the reason: when a library appears more
- # than once as an explicit dependence of a library, or
- # is implicitly linked in more than once by the
- # compiler, it is considered special, and multiple
- # occurrences thereof are not removed. Compare this
- # with having the same library being listed as a
- # dependency of multiple other libraries: in this case,
- # we know (pedantically, we assume) the library does not
- # need to be listed more than once, so we keep only the
- # last copy. This is not always right, but it is rare
- # enough that we require users that really mean to play
- # such unportable linking tricks to link the library
- # using -Wl,-lname, so that libtool does not consider it
- # for duplicate removal.
- case " $specialdeplibs " in
- *" $deplib "*) new_libs="$deplib $new_libs" ;;
- *)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$deplib $new_libs" ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- tmp_libs=
- for deplib in $new_libs; do
- case $deplib in
- -L*)
- case " $tmp_libs " in
- *" $deplib "*) ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- done
- eval $var=\"$tmp_libs\"
- done # for var
- fi
- # Last step: remove runtime libs from dependency_libs
- # (they stay in deplibs)
- tmp_libs=
- for i in $dependency_libs ; do
- case " $predeps $postdeps $compiler_lib_search_path " in
- *" $i "*)
- i=""
- ;;
- esac
- if test -n "$i" ; then
- tmp_libs="$tmp_libs $i"
- fi
- done
- dependency_libs=$tmp_libs
- done # for pass
- if test "$linkmode" = prog; then
- dlfiles="$newdlfiles"
- fi
- if test "$linkmode" = prog || test "$linkmode" = lib; then
- dlprefiles="$newdlprefiles"
- fi
-
- case $linkmode in
- oldlib)
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- func_warning "\`-dlopen' is ignored for archives"
- fi
-
- case " $deplibs" in
- *\ -l* | *\ -L*)
- func_warning "\`-l' and \`-L' are ignored for archives" ;;
- esac
-
- test -n "$rpath" && \
- func_warning "\`-rpath' is ignored for archives"
-
- test -n "$xrpath" && \
- func_warning "\`-R' is ignored for archives"
-
- test -n "$vinfo" && \
- func_warning "\`-version-info/-version-number' is ignored for archives"
-
- test -n "$release" && \
- func_warning "\`-release' is ignored for archives"
-
- test -n "$export_symbols$export_symbols_regex" && \
- func_warning "\`-export-symbols' is ignored for archives"
-
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs="$output"
- objs="$objs$old_deplibs"
- ;;
-
- lib)
- # Make sure we only generate libraries of the form `libNAME.la'.
- case $outputname in
- lib*)
- func_stripname 'lib' '.la' "$outputname"
- name=$func_stripname_result
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- ;;
- *)
- test "$module" = no && \
- func_fatal_help "libtool library \`$output' must begin with \`lib'"
-
- if test "$need_lib_prefix" != no; then
- # Add the "lib" prefix for modules if required
- func_stripname '' '.la' "$outputname"
- name=$func_stripname_result
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- else
- func_stripname '' '.la' "$outputname"
- libname=$func_stripname_result
- fi
- ;;
- esac
-
- if test -n "$objs"; then
- if test "$deplibs_check_method" != pass_all; then
- func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
- else
- $ECHO
- $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
- $ECHO "*** objects $objs is not portable!"
- libobjs="$libobjs $objs"
- fi
- fi
-
- test "$dlself" != no && \
- func_warning "\`-dlopen self' is ignored for libtool libraries"
-
- set dummy $rpath
- shift
- test "$#" -gt 1 && \
- func_warning "ignoring multiple \`-rpath's for a libtool library"
-
- install_libdir="$1"
-
- oldlibs=
- if test -z "$rpath"; then
- if test "$build_libtool_libs" = yes; then
- # Building a libtool convenience library.
- # Some compilers have problems with a `.al' extension so
- # convenience libraries should have the same extension an
- # archive normally would.
- oldlibs="$output_objdir/$libname.$libext $oldlibs"
- build_libtool_libs=convenience
- build_old_libs=yes
- fi
-
- test -n "$vinfo" && \
- func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
-
- test -n "$release" && \
- func_warning "\`-release' is ignored for convenience libraries"
- else
-
- # Parse the version information argument.
- save_ifs="$IFS"; IFS=':'
- set dummy $vinfo 0 0 0
- shift
- IFS="$save_ifs"
-
- test -n "$7" && \
- func_fatal_help "too many parameters to \`-version-info'"
-
- # convert absolute version numbers to libtool ages
- # this retains compatibility with .la files and attempts
- # to make the code below a bit more comprehensible
-
- case $vinfo_number in
- yes)
- number_major="$1"
- number_minor="$2"
- number_revision="$3"
- #
- # There are really only two kinds -- those that
- # use the current revision as the major version
- # and those that subtract age and use age as
- # a minor version. But, then there is irix
- # which has an extra 1 added just for fun
- #
- case $version_type in
- darwin|linux|osf|windows|none)
- func_arith $number_major + $number_minor
- current=$func_arith_result
- age="$number_minor"
- revision="$number_revision"
- ;;
- freebsd-aout|freebsd-elf|sunos)
- current="$number_major"
- revision="$number_minor"
- age="0"
- ;;
- irix|nonstopux)
- func_arith $number_major + $number_minor
- current=$func_arith_result
- age="$number_minor"
- revision="$number_minor"
- lt_irix_increment=no
- ;;
- esac
- ;;
- no)
- current="$1"
- revision="$2"
- age="$3"
- ;;
- esac
-
- # Check that each of the things are valid numbers.
- case $current in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- func_error "CURRENT \`$current' must be a nonnegative integer"
- func_fatal_error "\`$vinfo' is not valid version information"
- ;;
- esac
-
- case $revision in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- func_error "REVISION \`$revision' must be a nonnegative integer"
- func_fatal_error "\`$vinfo' is not valid version information"
- ;;
- esac
-
- case $age in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- func_error "AGE \`$age' must be a nonnegative integer"
- func_fatal_error "\`$vinfo' is not valid version information"
- ;;
- esac
-
- if test "$age" -gt "$current"; then
- func_error "AGE \`$age' is greater than the current interface number \`$current'"
- func_fatal_error "\`$vinfo' is not valid version information"
- fi
-
- # Calculate the version variables.
- major=
- versuffix=
- verstring=
- case $version_type in
- none) ;;
-
- darwin)
- # Like Linux, but with the current version available in
- # verstring for coding it into the library header
- func_arith $current - $age
- major=.$func_arith_result
- versuffix="$major.$age.$revision"
- # Darwin ld doesn't like 0 for these options...
- func_arith $current + 1
- minor_current=$func_arith_result
- xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
- verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
- ;;
-
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current"
- ;;
-
- irix | nonstopux)
- if test "X$lt_irix_increment" = "Xno"; then
- func_arith $current - $age
- else
- func_arith $current - $age + 1
- fi
- major=$func_arith_result
-
- case $version_type in
- nonstopux) verstring_prefix=nonstopux ;;
- *) verstring_prefix=sgi ;;
- esac
- verstring="$verstring_prefix$major.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$revision
- while test "$loop" -ne 0; do
- func_arith $revision - $loop
- iface=$func_arith_result
- func_arith $loop - 1
- loop=$func_arith_result
- verstring="$verstring_prefix$major.$iface:$verstring"
- done
-
- # Before this point, $major must not contain `.'.
- major=.$major
- versuffix="$major.$revision"
- ;;
-
- linux)
- func_arith $current - $age
- major=.$func_arith_result
- versuffix="$major.$age.$revision"
- ;;
-
- osf)
- func_arith $current - $age
- major=.$func_arith_result
- versuffix=".$current.$age.$revision"
- verstring="$current.$age.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test "$loop" -ne 0; do
- func_arith $current - $loop
- iface=$func_arith_result
- func_arith $loop - 1
- loop=$func_arith_result
- verstring="$verstring:${iface}.0"
- done
-
- # Make executables depend on our current version.
- verstring="$verstring:${current}.0"
- ;;
-
- qnx)
- major=".$current"
- versuffix=".$current"
- ;;
-
- sunos)
- major=".$current"
- versuffix=".$current.$revision"
- ;;
-
- windows)
- # Use '-' rather than '.', since we only want one
- # extension on DOS 8.3 filesystems.
- func_arith $current - $age
- major=$func_arith_result
- versuffix="-$major"
- ;;
-
- *)
- func_fatal_configuration "unknown library version type \`$version_type'"
- ;;
- esac
-
- # Clear the version info if we defaulted, and they specified a release.
- if test -z "$vinfo" && test -n "$release"; then
- major=
- case $version_type in
- darwin)
- # we can't check for "0.0" in archive_cmds due to quoting
- # problems, so we reset it completely
- verstring=
- ;;
- *)
- verstring="0.0"
- ;;
- esac
- if test "$need_version" = no; then
- versuffix=
- else
- versuffix=".0.0"
- fi
- fi
-
- # Remove version info from name if versioning should be avoided
- if test "$avoid_version" = yes && test "$need_version" = no; then
- major=
- versuffix=
- verstring=""
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test "$allow_undefined" = yes; then
- if test "$allow_undefined_flag" = unsupported; then
- func_warning "undefined symbols not allowed in $host shared libraries"
- build_libtool_libs=no
- build_old_libs=yes
- fi
- else
- # Don't allow undefined symbols.
- allow_undefined_flag="$no_undefined_flag"
- fi
-
- fi
-
- func_generate_dlsyms "$libname" "$libname" "yes"
- libobjs="$libobjs $symfileobj"
- test "X$libobjs" = "X " && libobjs=
-
- if test "$mode" != relink; then
- # Remove our outputs, but don't remove object files since they
- # may have been created when compiling PIC objects.
- removelist=
- tempremovelist=`$ECHO "$output_objdir/*"`
- for p in $tempremovelist; do
- case $p in
- *.$objext)
- ;;
- $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
- if test "X$precious_files_regex" != "X"; then
- if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
- then
- continue
- fi
- fi
- removelist="$removelist $p"
- ;;
- *) ;;
- esac
- done
- test -n "$removelist" && \
- func_show_eval "${RM}r \$removelist"
- fi
-
- # Now set the variables for building old libraries.
- if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
- fi
-
- # Eliminate all temporary directories.
- #for path in $notinst_path; do
- # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
- # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
- # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
- #done
-
- if test -n "$xrpath"; then
- # If the user specified any rpath flags, then add them.
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
- fi
-
- # Make sure dlfiles contains only unique files that won't be dlpreopened
- old_dlfiles="$dlfiles"
- dlfiles=
- for lib in $old_dlfiles; do
- case " $dlprefiles $dlfiles " in
- *" $lib "*) ;;
- *) dlfiles="$dlfiles $lib" ;;
- esac
- done
-
- # Make sure dlprefiles contains only unique files
- old_dlprefiles="$dlprefiles"
- dlprefiles=
- for lib in $old_dlprefiles; do
- case "$dlprefiles " in
- *" $lib "*) ;;
- *) dlprefiles="$dlprefiles $lib" ;;
- esac
- done
-
- if test "$build_libtool_libs" = yes; then
- if test -n "$rpath"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C library is in the System framework
- deplibs="$deplibs System.ltframework"
- ;;
- *-*-netbsd*)
- # Don't link with libc until the a.out ld.so is fixed.
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
- # Do not include libc due to us having libc/libc_r.
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
- ;;
- *)
- # Add libc to deplibs on all other systems if necessary.
- if test "$build_libtool_need_lc" = "yes"; then
- deplibs="$deplibs -lc"
- fi
- ;;
- esac
- fi
-
- # Transform deplibs into only deplibs that can be linked in shared.
- name_save=$name
- libname_save=$libname
- release_save=$release
- versuffix_save=$versuffix
- major_save=$major
- # I'm not sure if I'm treating the release correctly. I think
- # release should show up in the -l (ie -lgmp5) so we don't want to
- # add it in twice. Is that correct?
- release=""
- versuffix=""
- major=""
- newdeplibs=
- droppeddeps=no
- case $deplibs_check_method in
- pass_all)
- # Don't check for shared/static. Everything works.
- # This might be a little naive. We might want to check
- # whether the library exists or not. But this is on
- # osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behavior.
- newdeplibs=$deplibs
- ;;
- test_compile)
- # This code stresses the "libraries are programs" paradigm to its
- # limits. Maybe even breaks it. We compile a program, linking it
- # against the deplibs as a proxy for the library. Then we can check
- # whether they linked in statically or dynamically with ldd.
- $opt_dry_run || $RM conftest.c
- cat > conftest.c <<EOF
- int main() { return 0; }
-EOF
- $opt_dry_run || $RM conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
- ldd_output=`ldd conftest`
- for i in $deplibs; do
- case $i in
- -l*)
- func_stripname -l '' "$i"
- name=$func_stripname_result
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
- newdeplibs="$newdeplibs $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
- set dummy $deplib_matches; shift
- deplib_match=$1
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- $ECHO
- $ECHO "*** Warning: dynamic linker does not accept needed library $i."
- $ECHO "*** I have the capability to make that library automatically link in when"
- $ECHO "*** you link to this library. But I can only do this if you have a"
- $ECHO "*** shared version of the library, which I believe you do not have"
- $ECHO "*** because a test_compile did reveal that the linker did not use it for"
- $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
- fi
- fi
- ;;
- *)
- newdeplibs="$newdeplibs $i"
- ;;
- esac
- done
- else
- # Error occurred in the first compile. Let's try to salvage
- # the situation: Compile a separate program for each library.
- for i in $deplibs; do
- case $i in
- -l*)
- func_stripname -l '' "$i"
- name=$func_stripname_result
- $opt_dry_run || $RM conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
- ldd_output=`ldd conftest`
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $i "*)
- newdeplibs="$newdeplibs $i"
- i=""
- ;;
- esac
- fi
- if test -n "$i" ; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
- set dummy $deplib_matches; shift
- deplib_match=$1
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- $ECHO
- $ECHO "*** Warning: dynamic linker does not accept needed library $i."
- $ECHO "*** I have the capability to make that library automatically link in when"
- $ECHO "*** you link to this library. But I can only do this if you have a"
- $ECHO "*** shared version of the library, which you do not appear to have"
- $ECHO "*** because a test_compile did reveal that the linker did not use this one"
- $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
- fi
- fi
- else
- droppeddeps=yes
- $ECHO
- $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
- $ECHO "*** make it link in! You will probably need to install it or some"
- $ECHO "*** library that it depends on before this library will be fully"
- $ECHO "*** functional. Installing it before continuing would be even better."
- fi
- ;;
- *)
- newdeplibs="$newdeplibs $i"
- ;;
- esac
- done
- fi
- ;;
- file_magic*)
- set dummy $deplibs_check_method; shift
- file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- for a_deplib in $deplibs; do
- case $a_deplib in
- -l*)
- func_stripname -l '' "$a_deplib"
- name=$func_stripname_result
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null |
- $GREP " -> " >/dev/null; then
- continue
- fi
- # The statement above tries to avoid entering an
- # endless loop below, in case of cyclic links.
- # We might still enter an endless loop, since a link
- # loop can be closed while we follow links,
- # but so what?
- potlib="$potent_lib"
- while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
- case $potliblink in
- [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- esac
- done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
- $SED -e 10q |
- $EGREP "$file_magic_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- $ECHO
- $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
- $ECHO "*** I have the capability to make that library automatically link in when"
- $ECHO "*** you link to this library. But I can only do this if you have a"
- $ECHO "*** shared version of the library, which you do not appear to have"
- $ECHO "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
- else
- $ECHO "*** with $libname and none of the candidates passed a file format test"
- $ECHO "*** using a file magic. Last file checked: $potlib"
- fi
- fi
- ;;
- *)
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- ;;
- esac
- done # Gone through all deplibs.
- ;;
- match_pattern*)
- set dummy $deplibs_check_method; shift
- match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- for a_deplib in $deplibs; do
- case $a_deplib in
- -l*)
- func_stripname -l '' "$a_deplib"
- name=$func_stripname_result
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- ;;
- esac
- fi
- if test -n "$a_deplib" ; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- potlib="$potent_lib" # see symlink-check above in file_magic test
- if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
- $EGREP "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- $ECHO
- $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
- $ECHO "*** I have the capability to make that library automatically link in when"
- $ECHO "*** you link to this library. But I can only do this if you have a"
- $ECHO "*** shared version of the library, which you do not appear to have"
- $ECHO "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
- else
- $ECHO "*** with $libname and none of the candidates passed a file format test"
- $ECHO "*** using a regex pattern. Last file checked: $potlib"
- fi
- fi
- ;;
- *)
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- ;;
- esac
- done # Gone through all deplibs.
- ;;
- none | unknown | *)
- newdeplibs=""
- tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
- -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
- if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
- for i in $predeps $postdeps ; do
- # can't use Xsed below, because $i might contain '/'
- tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
- done
- fi
- if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
- $GREP . >/dev/null; then
- $ECHO
- if test "X$deplibs_check_method" = "Xnone"; then
- $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
- else
- $ECHO "*** Warning: inter-library dependencies are not known to be supported."
- fi
- $ECHO "*** All declared inter-library dependencies are being dropped."
- droppeddeps=yes
- fi
- ;;
- esac
- versuffix=$versuffix_save
- major=$major_save
- release=$release_save
- libname=$libname_save
- name=$name_save
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library with the System framework
- newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
- ;;
- esac
-
- if test "$droppeddeps" = yes; then
- if test "$module" = yes; then
- $ECHO
- $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
- $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
- $ECHO "*** a static module, that should work as long as the dlopening"
- $ECHO "*** application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- $ECHO
- $ECHO "*** However, this would only work if libtool was able to extract symbol"
- $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $ECHO "*** not find such a program. So, this module is probably useless."
- $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- else
- $ECHO "*** The inter-library dependencies that have been dropped here will be"
- $ECHO "*** automatically added whenever a program is linked with this library"
- $ECHO "*** or is declared to -dlopen it."
-
- if test "$allow_undefined" = no; then
- $ECHO
- $ECHO "*** Since this library must not contain undefined symbols,"
- $ECHO "*** because either the platform does not support them or"
- $ECHO "*** it was explicitly requested with -no-undefined,"
- $ECHO "*** libtool will only create a static version of it."
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- fi
- fi
- # Done checking deplibs!
- deplibs=$newdeplibs
- fi
- # Time to change all our "foo.ltframework" stuff back to "-framework foo"
- case $host in
- *-*-darwin*)
- newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- ;;
- esac
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $deplibs " in
- *" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- done
- deplibs="$new_libs"
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
-
- # Test again, we may have decided not to build it any more
- if test "$build_libtool_libs" = yes; then
- if test "$hardcode_into_libs" = yes; then
- # Hardcode the library paths
- hardcode_libdirs=
- dep_rpath=
- rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- dep_rpath="$dep_rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- if test -n "$hardcode_libdir_flag_spec_ld"; then
- eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
- else
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
- fi
- if test -n "$runpath_var" && test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- fi
- test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
- fi
-
- shlibpath="$finalize_shlibpath"
- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
- if test -n "$shlibpath"; then
- eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- fi
-
- # Get the real and link names of the library.
- eval shared_ext=\"$shrext_cmds\"
- eval library_names=\"$library_names_spec\"
- set dummy $library_names
- shift
- realname="$1"
- shift
-
- if test -n "$soname_spec"; then
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
- if test -z "$dlname"; then
- dlname=$soname
- fi
-
- lib="$output_objdir/$realname"
- linknames=
- for link
- do
- linknames="$linknames $link"
- done
-
- # Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- test "X$libobjs" = "X " && libobjs=
-
- delfiles=
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
- export_symbols="$output_objdir/$libname.uexp"
- delfiles="$delfiles $export_symbols"
- fi
-
- orig_export_symbols=
- case $host_os in
- cygwin* | mingw*)
- if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
- # exporting using user supplied symfile
- if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
- # and it's NOT already a .def file. Must figure out
- # which of the given symbols are data symbols and tag
- # them as such. So, trigger use of export_symbols_cmds.
- # export_symbols gets reassigned inside the "prepare
- # the list of exported symbols" if statement, so the
- # include_expsyms logic still works.
- orig_export_symbols="$export_symbols"
- export_symbols=
- always_export_symbols=yes
- fi
- fi
- ;;
- esac
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- func_verbose "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $opt_dry_run || $RM $export_symbols
- cmds=$export_symbols_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- func_len " $cmd"
- len=$func_len_result
- if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- func_show_eval "$cmd" 'exit $?'
- skipped_export=false
- else
- # The command line is too long to execute in one step.
- func_verbose "using reloadable object file for export list..."
- skipped_export=:
- # Break out early, otherwise skipped_export may be
- # set to false by a later but shorter cmd.
- break
- fi
- done
- IFS="$save_ifs"
- if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
- func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
- fi
- fi
- fi
-
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- tmp_export_symbols="$export_symbols"
- test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
- $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
- fi
-
- if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
- # The given exports_symbols file has to be filtered, so filter it.
- func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
- # FIXME: $output_objdir/$libname.filter potentially contains lots of
- # 's' commands which not all seds can handle. GNU sed should be fine
- # though. Also, the filter scales superlinearly with the number of
- # global variables. join(1) would be nice here, but unfortunately
- # isn't a blessed tool.
- $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
- delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
- export_symbols=$output_objdir/$libname.def
- $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
- fi
-
- tmp_deplibs=
- for test_deplib in $deplibs; do
- case " $convenience " in
- *" $test_deplib "*) ;;
- *)
- tmp_deplibs="$tmp_deplibs $test_deplib"
- ;;
- esac
- done
- deplibs="$tmp_deplibs"
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec" &&
- test "$compiler_needs_object" = yes &&
- test -z "$libobjs"; then
- # extract the archives, so we have objects to list.
- # TODO: could optimize this to just extract one archive.
- whole_archive_flag_spec=
- fi
- if test -n "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- test "X$libobjs" = "X " && libobjs=
- else
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $convenience
- libobjs="$libobjs $func_extract_archives_result"
- test "X$libobjs" = "X " && libobjs=
- fi
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- linker_flags="$linker_flags $flag"
- fi
-
- # Make a backup of the uninstalled library when relinking
- if test "$mode" = relink; then
- $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
- fi
-
- # Do each of the archive commands.
- if test "$module" = yes && test -n "$module_cmds" ; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- eval test_cmds=\"$module_expsym_cmds\"
- cmds=$module_expsym_cmds
- else
- eval test_cmds=\"$module_cmds\"
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval test_cmds=\"$archive_expsym_cmds\"
- cmds=$archive_expsym_cmds
- else
- eval test_cmds=\"$archive_cmds\"
- cmds=$archive_cmds
- fi
- fi
-
- if test "X$skipped_export" != "X:" &&
- func_len " $test_cmds" &&
- len=$func_len_result &&
- test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- :
- else
- # The command line is too long to link in one step, link piecewise
- # or, if using GNU ld and skipped_export is not :, use a linker
- # script.
-
- # Save the value of $output and $libobjs because we want to
- # use them later. If we have whole_archive_flag_spec, we
- # want to use save_libobjs as it was before
- # whole_archive_flag_spec was expanded, because we can't
- # assume the linker understands whole_archive_flag_spec.
- # This may have to be revisited, in case too many
- # convenience libraries get linked in and end up exceeding
- # the spec.
- if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- fi
- save_output=$output
- output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
-
- # Clear the reloadable object creation command queue and
- # initialize k to one.
- test_cmds=
- concat_cmds=
- objlist=
- last_robj=
- k=1
-
- if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
- output=${output_objdir}/${output_la}.lnkscript
- func_verbose "creating GNU ld script: $output"
- $ECHO 'INPUT (' > $output
- for obj in $save_libobjs
- do
- $ECHO "$obj" >> $output
- done
- $ECHO ')' >> $output
- delfiles="$delfiles $output"
- elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
- output=${output_objdir}/${output_la}.lnk
- func_verbose "creating linker input file list: $output"
- : > $output
- set x $save_libobjs
- shift
- firstobj=
- if test "$compiler_needs_object" = yes; then
- firstobj="$1 "
- shift
- fi
- for obj
- do
- $ECHO "$obj" >> $output
- done
- delfiles="$delfiles $output"
- output=$firstobj\"$file_list_spec$output\"
- else
- if test -n "$save_libobjs"; then
- func_verbose "creating reloadable object files..."
- output=$output_objdir/$output_la-${k}.$objext
- eval test_cmds=\"$reload_cmds\"
- func_len " $test_cmds"
- len0=$func_len_result
- len=$len0
-
- # Loop over the list of objects to be linked.
- for obj in $save_libobjs
- do
- func_len " $obj"
- func_arith $len + $func_len_result
- len=$func_arith_result
- if test "X$objlist" = X ||
- test "$len" -lt "$max_cmd_len"; then
- func_append objlist " $obj"
- else
- # The command $test_cmds is almost too long, add a
- # command to the queue.
- if test "$k" -eq 1 ; then
- # The first file doesn't have a previous command to add.
- eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
- else
- # All subsequent reloadable object files will link in
- # the last one created.
- eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
- fi
- last_robj=$output_objdir/$output_la-${k}.$objext
- func_arith $k + 1
- k=$func_arith_result
- output=$output_objdir/$output_la-${k}.$objext
- objlist=$obj
- func_len " $last_robj"
- func_arith $len0 + $func_len_result
- len=$func_arith_result
- fi
- done
- # Handle the remaining objects by creating one last
- # reloadable object file. All subsequent reloadable object
- # files will link in the last one created.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
- if test -n "$last_robj"; then
- eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
- fi
- delfiles="$delfiles $output"
-
- else
- output=
- fi
-
- if ${skipped_export-false}; then
- func_verbose "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $opt_dry_run || $RM $export_symbols
- libobjs=$output
- # Append the command to create the export file.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
- if test -n "$last_robj"; then
- eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
- fi
- fi
-
- test -n "$save_libobjs" &&
- func_verbose "creating a temporary reloadable object file: $output"
-
- # Loop through the commands generated above and execute them.
- save_ifs="$IFS"; IFS='~'
- for cmd in $concat_cmds; do
- IFS="$save_ifs"
- $opt_silent || {
- func_quote_for_expand "$cmd"
- eval "func_echo $func_quote_for_expand_result"
- }
- $opt_dry_run || eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- ( cd "$output_objdir" && \
- $RM "${realname}T" && \
- $MV "${realname}U" "$realname" )
- fi
-
- exit $lt_exit
- }
- done
- IFS="$save_ifs"
-
- if test -n "$export_symbols_regex" && ${skipped_export-false}; then
- func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
- fi
- fi
-
- if ${skipped_export-false}; then
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- tmp_export_symbols="$export_symbols"
- test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
- $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
- fi
-
- if test -n "$orig_export_symbols"; then
- # The given exports_symbols file has to be filtered, so filter it.
- func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
- # FIXME: $output_objdir/$libname.filter potentially contains lots of
- # 's' commands which not all seds can handle. GNU sed should be fine
- # though. Also, the filter scales superlinearly with the number of
- # global variables. join(1) would be nice here, but unfortunately
- # isn't a blessed tool.
- $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
- delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
- export_symbols=$output_objdir/$libname.def
- $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
- fi
- fi
-
- libobjs=$output
- # Restore the value of output.
- output=$save_output
-
- if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- test "X$libobjs" = "X " && libobjs=
- fi
- # Expand the library linking commands again to reset the
- # value of $libobjs for piecewise linking.
-
- # Do each of the archive commands.
- if test "$module" = yes && test -n "$module_cmds" ; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- cmds=$module_expsym_cmds
- else
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- cmds=$archive_expsym_cmds
- else
- cmds=$archive_cmds
- fi
- fi
- fi
-
- if test -n "$delfiles"; then
- # Append the command to remove temporary files to $cmds.
- eval cmds=\"\$cmds~\$RM $delfiles\"
- fi
-
- # Add any objects from preloaded convenience libraries
- if test -n "$dlprefiles"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $dlprefiles
- libobjs="$libobjs $func_extract_archives_result"
- test "X$libobjs" = "X " && libobjs=
- fi
-
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $opt_silent || {
- func_quote_for_expand "$cmd"
- eval "func_echo $func_quote_for_expand_result"
- }
- $opt_dry_run || eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- ( cd "$output_objdir" && \
- $RM "${realname}T" && \
- $MV "${realname}U" "$realname" )
- fi
-
- exit $lt_exit
- }
- done
- IFS="$save_ifs"
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
-
- if test -n "$convenience"; then
- if test -z "$whole_archive_flag_spec"; then
- func_show_eval '${RM}r "$gentop"'
- fi
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- # Create links to the real library.
- for linkname in $linknames; do
- if test "$realname" != "$linkname"; then
- func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
- fi
- done
-
- # If -module or -export-dynamic was specified, set the dlname.
- if test "$module" = yes || test "$export_dynamic" = yes; then
- # On all known operating systems, these are identical.
- dlname="$soname"
- fi
- fi
- ;;
-
- obj)
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- func_warning "\`-dlopen' is ignored for objects"
- fi
-
- case " $deplibs" in
- *\ -l* | *\ -L*)
- func_warning "\`-l' and \`-L' are ignored for objects" ;;
- esac
-
- test -n "$rpath" && \
- func_warning "\`-rpath' is ignored for objects"
-
- test -n "$xrpath" && \
- func_warning "\`-R' is ignored for objects"
-
- test -n "$vinfo" && \
- func_warning "\`-version-info' is ignored for objects"
-
- test -n "$release" && \
- func_warning "\`-release' is ignored for objects"
-
- case $output in
- *.lo)
- test -n "$objs$old_deplibs" && \
- func_fatal_error "cannot build library object \`$output' from non-libtool objects"
-
- libobj=$output
- func_lo2o "$libobj"
- obj=$func_lo2o_result
- ;;
- *)
- libobj=
- obj="$output"
- ;;
- esac
-
- # Delete the old objects.
- $opt_dry_run || $RM $obj $libobj
-
- # Objects from convenience libraries. This assumes
- # single-version convenience libraries. Whenever we create
- # different ones for PIC/non-PIC, this we'll have to duplicate
- # the extraction.
- reload_conv_objs=
- gentop=
- # reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec and hope we can get by with
- # turning comma into space..
- wl=
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
- reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
- else
- gentop="$output_objdir/${obj}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $convenience
- reload_conv_objs="$reload_objs $func_extract_archives_result"
- fi
- fi
-
- # Create the old-style object.
- reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
- output="$obj"
- func_execute_cmds "$reload_cmds" 'exit $?'
-
- # Exit if we aren't doing a library object file.
- if test -z "$libobj"; then
- if test -n "$gentop"; then
- func_show_eval '${RM}r "$gentop"'
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- if test "$build_libtool_libs" != yes; then
- if test -n "$gentop"; then
- func_show_eval '${RM}r "$gentop"'
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- # $show "echo timestamp > $libobj"
- # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
- exit $EXIT_SUCCESS
- fi
-
- if test -n "$pic_flag" || test "$pic_mode" != default; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs $reload_conv_objs"
- output="$libobj"
- func_execute_cmds "$reload_cmds" 'exit $?'
- fi
-
- if test -n "$gentop"; then
- func_show_eval '${RM}r "$gentop"'
- fi
-
- exit $EXIT_SUCCESS
- ;;
-
- prog)
- case $host in
- *cygwin*) func_stripname '' '.exe' "$output"
- output=$func_stripname_result.exe;;
- esac
- test -n "$vinfo" && \
- func_warning "\`-version-info' is ignored for programs"
-
- test -n "$release" && \
- func_warning "\`-release' is ignored for programs"
-
- test "$preload" = yes \
- && test "$dlopen_support" = unknown \
- && test "$dlopen_self" = unknown \
- && test "$dlopen_self_static" = unknown && \
- func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
- finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
- ;;
- esac
-
- case $host in
- *-*-darwin*)
- # Don't allow lazy linking, it breaks C++ global constructors
- # But is supposedly fixed on 10.4 or later (yay!).
- if test "$tagname" = CXX ; then
- case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
- 10.[0123])
- compile_command="$compile_command ${wl}-bind_at_load"
- finalize_command="$finalize_command ${wl}-bind_at_load"
- ;;
- esac
- fi
- # Time to change all our "foo.ltframework" stuff back to "-framework foo"
- compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- ;;
- esac
-
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $compile_deplibs " in
- *" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $compile_deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- done
- compile_deplibs="$new_libs"
-
-
- compile_command="$compile_command $compile_deplibs"
- finalize_command="$finalize_command $finalize_deplibs"
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
- for libdir in $rpath $xrpath; do
- # This is the magic to use -rpath.
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- fi
-
- # Now hardcode the library paths
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
- case :$dllsearchpath: in
- *":$libdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$libdir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
- esac
- ;;
- esac
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath="$rpath"
-
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath="$rpath"
-
- if test -n "$libobjs" && test "$build_old_libs" = yes; then
- # Transform all the library objects into standard objects.
- compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- fi
-
- func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
-
- # template prelinking step
- if test -n "$prelink_cmds"; then
- func_execute_cmds "$prelink_cmds" 'exit $?'
- fi
-
- wrappers_required=yes
- case $host in
- *cygwin* | *mingw* )
- if test "$build_libtool_libs" != yes; then
- wrappers_required=no
- fi
- ;;
- *)
- if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
- wrappers_required=no
- fi
- ;;
- esac
- if test "$wrappers_required" = no; then
- # Replace the output file specification.
- compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- link_command="$compile_command$compile_rpath"
-
- # We have no uninstalled library dependencies, so finalize right now.
- exit_status=0
- func_show_eval "$link_command" 'exit_status=$?'
-
- # Delete the generated files.
- if test -f "$output_objdir/${outputname}S.${objext}"; then
- func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
- fi
-
- exit $exit_status
- fi
-
- if test -n "$compile_shlibpath$finalize_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- compile_var=
- finalize_var=
- if test -n "$runpath_var"; then
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- if test -n "$finalize_perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- fi
-
- if test "$no_install" = yes; then
- # We don't need to create a wrapper script.
- link_command="$compile_var$compile_command$compile_rpath"
- # Replace the output file specification.
- link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- # Delete the old output file.
- $opt_dry_run || $RM $output
- # Link the executable and exit
- func_show_eval "$link_command" 'exit $?'
- exit $EXIT_SUCCESS
- fi
-
- if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
-
- func_warning "this platform does not like uninstalled shared libraries"
- func_warning "\`$output' will be relinked during installation"
- else
- if test "$fast_install" != no; then
- link_command="$finalize_var$compile_command$finalize_rpath"
- if test "$fast_install" = yes; then
- relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
- else
- # fast_install is set to needless
- relink_command=
- fi
- else
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
- fi
- fi
-
- # Replace the output file specification.
- link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
- # Delete the old output files.
- $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
- func_show_eval "$link_command" 'exit $?'
-
- # Now create the wrapper script.
- func_verbose "creating $output"
-
- # Quote the relink command for shipping.
- if test -n "$relink_command"; then
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- func_quote_for_eval "$var_value"
- relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
- fi
- done
- relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Quote $ECHO for shipping.
- if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
- case $progpath in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
- *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
- esac
- qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Only actually do things if not in dry run mode.
- $opt_dry_run || {
- # win32 will think the script is a binary if it has
- # a .exe suffix, so we strip it off here.
- case $output in
- *.exe) func_stripname '' '.exe' "$output"
- output=$func_stripname_result ;;
- esac
- # test for cygwin because mv fails w/o .exe extensions
- case $host in
- *cygwin*)
- exeext=.exe
- func_stripname '' '.exe' "$outputname"
- outputname=$func_stripname_result ;;
- *) exeext= ;;
- esac
- case $host in
- *cygwin* | *mingw* )
- func_dirname_and_basename "$output" "" "."
- output_name=$func_basename_result
- output_path=$func_dirname_result
- cwrappersource="$output_path/$objdir/lt-$output_name.c"
- cwrapper="$output_path/$output_name.exe"
- $RM $cwrappersource $cwrapper
- trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
- func_emit_cwrapperexe_src > $cwrappersource
-
- # we should really use a build-platform specific compiler
- # here, but OTOH, the wrappers (shell script and this C one)
- # are only useful if you want to execute the "real" binary.
- # Since the "real" binary is built for $host, then this
- # wrapper might as well be built for $host, too.
- $opt_dry_run || {
- $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
- $STRIP $cwrapper
- }
-
- # Now, create the wrapper script for func_source use:
- func_ltwrapper_scriptname $cwrapper
- $RM $func_ltwrapper_scriptname_result
- trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
- $opt_dry_run || {
- # note: this script will not be executed, so do not chmod.
- if test "x$build" = "x$host" ; then
- $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
- else
- func_emit_wrapper no > $func_ltwrapper_scriptname_result
- fi
- }
- ;;
- * )
- $RM $output
- trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
-
- func_emit_wrapper no > $output
- chmod +x $output
- ;;
- esac
- }
- exit $EXIT_SUCCESS
- ;;
- esac
-
- # See if we need to build an old-fashioned archive.
- for oldlib in $oldlibs; do
-
- if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save $symfileobj"
- addlibs="$convenience"
- build_libtool_libs=no
- else
- if test "$build_libtool_libs" = module; then
- oldobjs="$libobjs_save"
- build_libtool_libs=no
- else
- oldobjs="$old_deplibs $non_pic_objects"
- if test "$preload" = yes && test -f "$symfileobj"; then
- oldobjs="$oldobjs $symfileobj"
- fi
- fi
- addlibs="$old_convenience"
- fi
-
- if test -n "$addlibs"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $addlibs
- oldobjs="$oldobjs $func_extract_archives_result"
- fi
-
- # Do each command in the archive commands.
- if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- cmds=$old_archive_from_new_cmds
- else
-
- # Add any objects from preloaded convenience libraries
- if test -n "$dlprefiles"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- func_extract_archives $gentop $dlprefiles
- oldobjs="$oldobjs $func_extract_archives_result"
- fi
-
- # POSIX demands no paths to be encoded in archives. We have
- # to avoid creating archives with duplicate basenames if we
- # might have to extract them afterwards, e.g., when creating a
- # static archive out of a convenience library, or when linking
- # the entirety of a libtool archive into another (currently
- # not supported by libtool).
- if (for obj in $oldobjs
- do
- func_basename "$obj"
- $ECHO "$func_basename_result"
- done | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- $ECHO "copying selected object files to avoid basename conflicts..."
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
- func_mkdir_p "$gentop"
- save_oldobjs=$oldobjs
- oldobjs=
- counter=1
- for obj in $save_oldobjs
- do
- func_basename "$obj"
- objbase="$func_basename_result"
- case " $oldobjs " in
- " ") oldobjs=$obj ;;
- *[\ /]"$objbase "*)
- while :; do
- # Make sure we don't pick an alternate name that also
- # overlaps.
- newobj=lt$counter-$objbase
- func_arith $counter + 1
- counter=$func_arith_result
- case " $oldobjs " in
- *[\ /]"$newobj "*) ;;
- *) if test ! -f "$gentop/$newobj"; then break; fi ;;
- esac
- done
- func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- oldobjs="$oldobjs $gentop/$newobj"
- ;;
- *) oldobjs="$oldobjs $obj" ;;
- esac
- done
- fi
- eval cmds=\"$old_archive_cmds\"
-
- func_len " $cmds"
- len=$func_len_result
- if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- cmds=$old_archive_cmds
- else
- # the command line is too long to link in one step, link in parts
- func_verbose "using piecewise archive linking..."
- save_RANLIB=$RANLIB
- RANLIB=:
- objlist=
- concat_cmds=
- save_oldobjs=$oldobjs
- oldobjs=
- # Is there a better way of finding the last object in the list?
- for obj in $save_oldobjs
- do
- last_oldobj=$obj
- done
- eval test_cmds=\"$old_archive_cmds\"
- func_len " $test_cmds"
- len0=$func_len_result
- len=$len0
- for obj in $save_oldobjs
- do
- func_len " $obj"
- func_arith $len + $func_len_result
- len=$func_arith_result
- func_append objlist " $obj"
- if test "$len" -lt "$max_cmd_len"; then
- :
- else
- # the above command should be used before it gets too long
- oldobjs=$objlist
- if test "$obj" = "$last_oldobj" ; then
- RANLIB=$save_RANLIB
- fi
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
- objlist=
- len=$len0
- fi
- done
- RANLIB=$save_RANLIB
- oldobjs=$objlist
- if test "X$oldobjs" = "X" ; then
- eval cmds=\"\$concat_cmds\"
- else
- eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
- fi
- fi
- fi
- func_execute_cmds "$cmds" 'exit $?'
- done
-
- test -n "$generated" && \
- func_show_eval "${RM}r$generated"
-
- # Now create the libtool archive.
- case $output in
- *.la)
- old_library=
- test "$build_old_libs" = yes && old_library="$libname.$libext"
- func_verbose "creating $output"
-
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- func_quote_for_eval "$var_value"
- relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
- fi
- done
- # Quote the link command for shipping.
- relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- if test "$hardcode_automatic" = yes ; then
- relink_command=
- fi
-
- # Only create the output if not a dry run.
- $opt_dry_run || {
- for installed in no yes; do
- if test "$installed" = yes; then
- if test -z "$install_libdir"; then
- break
- fi
- output="$output_objdir/$outputname"i
- # Replace all uninstalled libtool libraries with the installed ones
- newdependency_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- *.la)
- func_basename "$deplib"
- name="$func_basename_result"
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- test -z "$libdir" && \
- func_fatal_error "\`$deplib' is not a valid libtool archive"
- newdependency_libs="$newdependency_libs $libdir/$name"
- ;;
- *) newdependency_libs="$newdependency_libs $deplib" ;;
- esac
- done
- dependency_libs="$newdependency_libs"
- newdlfiles=
-
- for lib in $dlfiles; do
- case $lib in
- *.la)
- func_basename "$lib"
- name="$func_basename_result"
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- test -z "$libdir" && \
- func_fatal_error "\`$lib' is not a valid libtool archive"
- newdlfiles="$newdlfiles $libdir/$name"
- ;;
- *) newdlfiles="$newdlfiles $lib" ;;
- esac
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- case $lib in
- *.la)
- # Only pass preopened files to the pseudo-archive (for
- # eventual linking with the app. that links it) if we
- # didn't already link the preopened objects directly into
- # the library:
- func_basename "$lib"
- name="$func_basename_result"
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- test -z "$libdir" && \
- func_fatal_error "\`$lib' is not a valid libtool archive"
- newdlprefiles="$newdlprefiles $libdir/$name"
- ;;
- esac
- done
- dlprefiles="$newdlprefiles"
- else
- newdlfiles=
- for lib in $dlfiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- newdlfiles="$newdlfiles $abs"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- newdlprefiles="$newdlprefiles $abs"
- done
- dlprefiles="$newdlprefiles"
- fi
- $RM $output
- # place dlname in correct position for cygwin
- tdlname=$dlname
- case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
- esac
- $ECHO > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags='$new_inherited_linker_flags'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Names of additional weak libraries provided by this library
-weak_library_names='$weak_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
- if test "$installed" = no && test "$need_relink" = yes; then
- $ECHO >> $output "\
-relink_command=\"$relink_command\""
- fi
- done
- }
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
- ;;
- esac
- exit $EXIT_SUCCESS
-}
-
-{ test "$mode" = link || test "$mode" = relink; } &&
- func_mode_link ${1+"$@"}
-
-
-# func_mode_uninstall arg...
-func_mode_uninstall ()
-{
- $opt_debug
- RM="$nonopt"
- files=
- rmforce=
- exit_status=0
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- for arg
- do
- case $arg in
- -f) RM="$RM $arg"; rmforce=yes ;;
- -*) RM="$RM $arg" ;;
- *) files="$files $arg" ;;
- esac
- done
-
- test -z "$RM" && \
- func_fatal_help "you must specify an RM program"
-
- rmdirs=
-
- origobjdir="$objdir"
- for file in $files; do
- func_dirname "$file" "" "."
- dir="$func_dirname_result"
- if test "X$dir" = X.; then
- objdir="$origobjdir"
- else
- objdir="$dir/$origobjdir"
- fi
- func_basename "$file"
- name="$func_basename_result"
- test "$mode" = uninstall && objdir="$dir"
-
- # Remember objdir for removal later, being careful to avoid duplicates
- if test "$mode" = clean; then
- case " $rmdirs " in
- *" $objdir "*) ;;
- *) rmdirs="$rmdirs $objdir" ;;
- esac
- fi
-
- # Don't error if the file doesn't exist and rm -f was used.
- if { test -L "$file"; } >/dev/null 2>&1 ||
- { test -h "$file"; } >/dev/null 2>&1 ||
- test -f "$file"; then
- :
- elif test -d "$file"; then
- exit_status=1
- continue
- elif test "$rmforce" = yes; then
- continue
- fi
-
- rmfiles="$file"
-
- case $name in
- *.la)
- # Possibly a libtool archive, so verify it.
- if func_lalib_p "$file"; then
- func_source $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- rmfiles="$rmfiles $objdir/$n"
- done
- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-
- case "$mode" in
- clean)
- case " $library_names " in
- # " " in the beginning catches empty $dlname
- *" $dlname "*) ;;
- *) rmfiles="$rmfiles $objdir/$dlname" ;;
- esac
- test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
- ;;
- uninstall)
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
- fi
-
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
- fi
- # FIXME: should reinstall the best remaining shared library.
- ;;
- esac
- fi
- ;;
-
- *.lo)
- # Possibly a libtool object, so verify it.
- if func_lalib_p "$file"; then
-
- # Read the .lo file
- func_source $dir/$name
-
- # Add PIC object to the list of files to remove.
- if test -n "$pic_object" &&
- test "$pic_object" != none; then
- rmfiles="$rmfiles $dir/$pic_object"
- fi
-
- # Add non-PIC object to the list of files to remove.
- if test -n "$non_pic_object" &&
- test "$non_pic_object" != none; then
- rmfiles="$rmfiles $dir/$non_pic_object"
- fi
- fi
- ;;
-
- *)
- if test "$mode" = clean ; then
- noexename=$name
- case $file in
- *.exe)
- func_stripname '' '.exe' "$file"
- file=$func_stripname_result
- func_stripname '' '.exe' "$name"
- noexename=$func_stripname_result
- # $file with .exe has already been added to rmfiles,
- # add $file without .exe
- rmfiles="$rmfiles $file"
- ;;
- esac
- # Do a test to see if this is a libtool program.
- if func_ltwrapper_p "$file"; then
- if func_ltwrapper_executable_p "$file"; then
- func_ltwrapper_scriptname "$file"
- relink_command=
- func_source $func_ltwrapper_scriptname_result
- rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
- else
- relink_command=
- func_source $dir/$noexename
- fi
-
- # note $name still contains .exe if it was in $file originally
- # as does the version of $file that was added into $rmfiles
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
- if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
- fi
- if test "X$noexename" != "X$name" ; then
- rmfiles="$rmfiles $objdir/lt-${noexename}.c"
- fi
- fi
- fi
- ;;
- esac
- func_show_eval "$RM $rmfiles" 'exit_status=1'
- done
- objdir="$origobjdir"
-
- # Try to remove the ${objdir}s in the directories where we deleted files
- for dir in $rmdirs; do
- if test -d "$dir"; then
- func_show_eval "rmdir $dir >/dev/null 2>&1"
- fi
- done
-
- exit $exit_status
-}
-
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
- func_mode_uninstall ${1+"$@"}
-
-test -z "$mode" && {
- help="$generic_help"
- func_fatal_help "you must specify a MODE"
-}
-
-test -z "$exec_cmd" && \
- func_fatal_help "invalid operation mode \`$mode'"
-
-if test -n "$exec_cmd"; then
- eval exec "$exec_cmd"
- exit $EXIT_FAILURE
-fi
-
-exit $exit_status
-
-
-# The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries. Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them. This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration. But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-build_libtool_libs=no
-build_old_libs=yes
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
-# vi:sw=2
-
diff --git a/Build/source/libs/freetype2/builds/unix/mkinstalldirs b/Build/source/libs/freetype2/builds/unix/mkinstalldirs
deleted file mode 100644
index ef7e16fdafe..00000000000
--- a/Build/source/libs/freetype2/builds/unix/mkinstalldirs
+++ /dev/null
@@ -1,161 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2006-05-11.19
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-IFS=" "" $nl"
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
- case $1 in
- -h | --help | --h*) # -h for help
- echo "$usage"
- exit $?
- ;;
- -m) # -m PERM arg
- shift
- test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
- dirmode=$1
- shift
- ;;
- --version)
- echo "$0 $scriptversion"
- exit $?
- ;;
- --) # stop option processing
- shift
- break
- ;;
- -*) # unknown option
- echo "$usage" 1>&2
- exit 1
- ;;
- *) # first non-opt arg
- break
- ;;
- esac
-done
-
-for file
-do
- if test -d "$file"; then
- shift
- else
- break
- fi
-done
-
-case $# in
- 0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error. This is a problem when calling mkinstalldirs
-# from a parallel make. We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
- '')
- if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
- echo "mkdir -p -- $*"
- exec mkdir -p -- "$@"
- else
- # On NextStep and OpenStep, the `mkdir' command does not
- # recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
- # exists.
- test -d ./-p && rmdir ./-p
- test -d ./--version && rmdir ./--version
- fi
- ;;
- *)
- if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
- test ! -d ./--version; then
- echo "mkdir -m $dirmode -p -- $*"
- exec mkdir -m "$dirmode" -p -- "$@"
- else
- # Clean up after NextStep and OpenStep mkdir.
- for d in ./-m ./-p ./--version "./$dirmode";
- do
- test -d $d && rmdir $d
- done
- fi
- ;;
-esac
-
-for file
-do
- case $file in
- /*) pathcomp=/ ;;
- *) pathcomp= ;;
- esac
- oIFS=$IFS
- IFS=/
- set fnord $file
- shift
- IFS=$oIFS
-
- for d
- do
- test "x$d" = x && continue
-
- pathcomp=$pathcomp$d
- case $pathcomp in
- -*) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- else
- if test ! -z "$dirmode"; then
- echo "chmod $dirmode $pathcomp"
- lasterr=
- chmod "$dirmode" "$pathcomp" || lasterr=$?
-
- if test ! -z "$lasterr"; then
- errstatus=$lasterr
- fi
- fi
- fi
- fi
-
- pathcomp=$pathcomp/
- done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/Build/source/libs/freetype2/builds/unix/unix-cc.in b/Build/source/libs/freetype2/builds/unix/unix-cc.in
deleted file mode 100644
index 9c6d5de6e54..00000000000
--- a/Build/source/libs/freetype2/builds/unix/unix-cc.in
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# FreeType 2 template for Unix-specific compiler definitions
-#
-
-# Copyright 1996-2000, 2002, 2003, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)
-
-LIBTOOL ?= $(BUILD_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 exexutable 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/Build/source/libs/freetype2/builds/unix/unix-def.in b/Build/source/libs/freetype2/builds/unix/unix-def.in
deleted file mode 100644
index b90ed0c4c55..00000000000
--- a/Build/source/libs/freetype2/builds/unix/unix-def.in
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# FreeType 2 configuration rules templates for Unix + configure
-#
-
-
-# Copyright 1996-2000, 2002, 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)
-
-DELETE := @RMF@
-DELDIR := @RMDIR@
-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 := $(BUILD_DIR)/mkinstalldirs
-
-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 \
- $(OBJ_BUILD)/freetype-config \
- $(OBJ_BUILD)/freetype2.pc \
- $(LIBTOOL) \
- $(OBJ_BUILD)/Makefile
-
-
-# Standard installation variables.
-#
-prefix := @prefix@
-exec_prefix := @exec_prefix@
-libdir := @libdir@
-bindir := @bindir@
-includedir := @includedir@
-datarootdir := @datarootdir@
-datadir := @datadir@
-
-version_info := @version_info@
-
-
-# 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 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
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/unix/unix-dev.mk b/Build/source/libs/freetype2/builds/unix/unix-dev.mk
deleted file mode 100644
index 76bae3862ae..00000000000
--- a/Build/source/libs/freetype2/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-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/unix/unix-lcc.mk b/Build/source/libs/freetype2/builds/unix/unix-lcc.mk
deleted file mode 100644
index 6038e523921..00000000000
--- a/Build/source/libs/freetype2/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-2000 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/unix/unix.mk b/Build/source/libs/freetype2/builds/unix/unix.mk
deleted file mode 100644
index 7f9d9a34fb9..00000000000
--- a/Build/source/libs/freetype2/builds/unix/unix.mk
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# FreeType 2 configuration rules for UNIX platforms
-#
-
-
-# Copyright 1996-2000, 2002, 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/unix/unixddef.mk b/Build/source/libs/freetype2/builds/unix/unixddef.mk
deleted file mode 100644
index 130d6b0f623..00000000000
--- a/Build/source/libs/freetype2/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-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/builds/vms/ftconfig.h b/Build/source/libs/freetype2/builds/vms/ftconfig.h
deleted file mode 100644
index 185c3348e03..00000000000
--- a/Build/source/libs/freetype2/builds/vms/ftconfig.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* VMS-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 `freetype/builds/<system>', and */
- /* contains system-specific files that are always included first when */
- /* building the library. */
- /* */
- /*************************************************************************/
-
-
-#ifndef __FTCONFIG_H__
-#define __FTCONFIG_H__
-
-
- /* Include the header file containing all developer build options */
-#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 */
- /* `freetype/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
-
-
- /* Preferred alignment of data */
-#define FT_ALIGNMENT 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( DARWIN_NO_CARBON ) ) || \
- ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
-#include "AvailabilityMacros.h"
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-#define DARWIN_NO_CARBON 1
-#else
-#define FT_MACINTOSH 1
-#endif
-#endif
-
-
- /*************************************************************************/
- /* */
- /* IntN types */
- /* */
- /* Used to guarantee the size of some specific integers. */
- /* */
- typedef signed short FT_Int16;
- typedef unsigned short FT_UInt16;
-
-#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 for platforms 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
-
-#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
-
-#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
-
-#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
-
-#elif defined( __GNUC__ )
-
- /* GCC provides the `long long' type */
-#define FT_LONG64
-#define FT_INT64 long long int
-
-#endif /* FT_SIZEOF_LONG == 8 */
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
- /*************************************************************************/
- /* */
- /* A 64-bit data type will create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable their use if */
- /* __STDC__ is defined. You can however ignore this rule by */
- /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
-#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#ifdef __STDC__
-
- /* undefine the 64-bit macros in strict ANSI compilation mode */
-#undef FT_LONG64
-#undef FT_INT64
-
-#endif /* __STDC__ */
-
-#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
-
-
-#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 */
-
-
-#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 ) extern "C" x
-#else
-#define FT_BASE_DEF( x ) extern 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/Build/source/libs/freetype2/builds/vms/ftsystem.c b/Build/source/libs/freetype2/builds/vms/ftsystem.c
deleted file mode 100644
index 76bfae9f404..00000000000
--- a/Build/source/libs/freetype2/builds/vms/ftsystem.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* VMS-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Err_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_Err_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;
- 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_Err_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/Build/source/libs/freetype2/builds/win32/detect.mk b/Build/source/libs/freetype2/builds/win32/detect.mk
deleted file mode 100644
index 19065396090..00000000000
--- a/Build/source/libs/freetype2/builds/win32/detect.mk
+++ /dev/null
@@ -1,183 +0,0 @@
-#
-# FreeType 2 configuration file to detect a Win32 host platform.
-#
-
-
-# Copyright 1996-2000, 2003, 2004, 2006, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 := win32
-
- 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 win32 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 := win32
-
- endif
- endif
-
- endif # test NT
-
-endif # test PLATFORM ansi
-
-ifeq ($(PLATFORM),win32)
-
- 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 win32
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/win32/ftdebug.c b/Build/source/libs/freetype2/builds/win32/ftdebug.c
deleted file mode 100644
index 8f7a9ab07d9..00000000000
--- a/Build/source/libs/freetype2/builds/win32/ftdebug.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component for Win32 (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2005, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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>
-
-
-#ifdef _WIN32_WCE
-
- 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 );
- }
-
-#else
-
-#define OutputDebugStringEx OutputDebugStringA
-
-#endif
-
-
- 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 );
- }
-
-
-#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 <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 )
- {
-#ifdef _WIN32_WCE
-
- /* Windows Mobile doesn't have environment API: */
- /* GetEnvironmentStrings, GetEnvironmentVariable, getenv. */
- /* */
- /* FIXME!!! How to set debug mode? */
- const char* ft2_debug = 0;
-
-#else
-
- const char* ft2_debug = getenv( "FT2_DEBUG" );
-
-#endif
-
- 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 == ':' && p > q )
- {
- int n, i, len = 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/Build/source/libs/freetype2/builds/win32/visualc/freetype.dsp b/Build/source/libs/freetype2/builds/win32/visualc/freetype.dsp
deleted file mode 100644
index 269bb24aa8a..00000000000
--- a/Build/source/libs/freetype2/builds/win32/visualc/freetype.dsp
+++ /dev/null
@@ -1,396 +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\freetype237.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\freetype237_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 "..\freetype\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\freetype237_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype237MT_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 "..\freetype\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\freetype237.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype237MT.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\freetype237.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype237ST.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\freetype237_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype237ST_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\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\base\ftxf86.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/Build/source/libs/freetype2/builds/win32/visualc/freetype.sln b/Build/source/libs/freetype2/builds/win32/visualc/freetype.sln
deleted file mode 100644
index 470d4fa3034..00000000000
--- a/Build/source/libs/freetype2/builds/win32/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/Build/source/libs/freetype2/builds/win32/visualc/freetype.vcproj b/Build/source/libs/freetype2/builds/win32/visualc/freetype.vcproj
deleted file mode 100644
index 036ccbf4e88..00000000000
--- a/Build/source/libs/freetype2/builds/win32/visualc/freetype.vcproj
+++ /dev/null
@@ -1,2155 +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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\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\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\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/Build/source/libs/freetype2/builds/win32/visualc/index.html b/Build/source/libs/freetype2/builds/win32/visualc/index.html
deleted file mode 100644
index 80260524a85..00000000000
--- a/Build/source/libs/freetype2/builds/win32/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.3.7 sources:</p>
-
-<ul>
- <pre>
- freetype237.lib - release build; single threaded
- freetype237_D.lib - debug build; single threaded
- freetype237MT.lib - release build; multi-threaded
- freetype237MT_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 <it>TAR
-file smart CR/LF Conversion</it> 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/Build/source/libs/freetype2/builds/win32/visualce/freetype.dsp b/Build/source/libs/freetype2/builds/win32/visualce/freetype.dsp
deleted file mode 100644
index 269bb24aa8a..00000000000
--- a/Build/source/libs/freetype2/builds/win32/visualce/freetype.dsp
+++ /dev/null
@@ -1,396 +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\freetype237.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\freetype237_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 "..\freetype\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\freetype237_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype237MT_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 "..\freetype\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\freetype237.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype237MT.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\freetype237.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype237ST.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\freetype237_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype237ST_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\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\base\ftxf86.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/Build/source/libs/freetype2/builds/win32/visualce/freetype.vcproj b/Build/source/libs/freetype2/builds/win32/visualce/freetype.vcproj
deleted file mode 100644
index bb3445fed75..00000000000
--- a/Build/source/libs/freetype2/builds/win32/visualce/freetype.vcproj
+++ /dev/null
@@ -1,13861 +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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\freetype237.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\freetype237MT.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\freetype237ST.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\freetype237_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\freetype237ST_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\freetype237MT_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\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\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\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/Build/source/libs/freetype2/builds/win32/visualce/index.html b/Build/source/libs/freetype2/builds/win32/visualce/index.html
deleted file mode 100644
index d24cb19834a..00000000000
--- a/Build/source/libs/freetype2/builds/win32/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.3.7 sources:</p>
-
-<ul>
- <pre>
- freetype237.lib - release build; single threaded
- freetype237_D.lib - debug build; single threaded
- freetype237MT.lib - release build; multi-threaded
- freetype237MT_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 <it>TAR
-file smart CR/LF Conversion</it> 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/Build/source/libs/freetype2/builds/win32/w32-bcc.mk b/Build/source/libs/freetype2/builds/win32/w32-bcc.mk
deleted file mode 100644
index a9f48fc60b0..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-bcc.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 Borland C++ on Win32
-#
-
-
-# Copyright 1996-2000, 2003, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/win32-def.mk
-include $(TOP_DIR)/builds/compiler/bcc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/win32/w32-bccd.mk b/Build/source/libs/freetype2/builds/win32/w32-bccd.mk
deleted file mode 100644
index 51b15d90324..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-bccd.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# FreeType 2 Borland C++ on Win32 + debugging
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/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/Build/source/libs/freetype2/builds/win32/w32-dev.mk b/Build/source/libs/freetype2/builds/win32/w32-dev.mk
deleted file mode 100644
index 00cacb0f675..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-dev.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + GCC
-#
-# Development version without optimizations.
-#
-
-
-# Copyright 1996-2000, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/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/Build/source/libs/freetype2/builds/win32/w32-gcc.mk b/Build/source/libs/freetype2/builds/win32/w32-gcc.mk
deleted file mode 100644
index 580afc5c94c..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-gcc.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + GCC
-#
-
-
-# Copyright 1996-2000, 2003, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/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/Build/source/libs/freetype2/builds/win32/w32-icc.mk b/Build/source/libs/freetype2/builds/win32/w32-icc.mk
deleted file mode 100644
index 8819a1f49fb..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-icc.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + IBM Visual Age C++
-#
-
-
-# Copyright 1996-2000, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/win32-def.mk
-include $(TOP_DIR)/builds/compiler/visualage.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/win32/w32-intl.mk b/Build/source/libs/freetype2/builds/win32/w32-intl.mk
deleted file mode 100644
index ae62e1bcdae..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-intl.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 configuration rules for Intel C/C++ on Win32
-#
-
-
-# Copyright 1996-2000, 2003, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/win32-def.mk
-include $(TOP_DIR)/builds/compiler/intelc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/win32/w32-lcc.mk b/Build/source/libs/freetype2/builds/win32/w32-lcc.mk
deleted file mode 100644
index a147c4cb617..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-lcc.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# FreeType 2 configuration rules for Win32 + LCC
-#
-
-
-# Copyright 1996-2000 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/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/Build/source/libs/freetype2/builds/win32/w32-mingw32.mk b/Build/source/libs/freetype2/builds/win32/w32-mingw32.mk
deleted file mode 100644
index 04e9e211c0c..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-mingw32.mk
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# FreeType 2 configuration rules for mingw32
-#
-
-
-# Copyright 1996-2000, 2003, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/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/Build/source/libs/freetype2/builds/win32/w32-vcc.mk b/Build/source/libs/freetype2/builds/win32/w32-vcc.mk
deleted file mode 100644
index 7fb87948652..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-vcc.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 Visual C++ on Win32
-#
-
-
-# Copyright 1996-2000, 2003, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/win32-def.mk
-include $(TOP_DIR)/builds/compiler/visualc.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/win32/w32-wat.mk b/Build/source/libs/freetype2/builds/win32/w32-wat.mk
deleted file mode 100644
index 820b817358f..00000000000
--- a/Build/source/libs/freetype2/builds/win32/w32-wat.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# FreeType 2 configuration rules for Watcom C/C++
-#
-
-
-# Copyright 1996-2000, 2003, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32/win32-def.mk
-include $(TOP_DIR)/builds/compiler/watcom.mk
-
-# include linking instructions
-include $(TOP_DIR)/builds/link_dos.mk
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/builds/win32/win32-def.mk b/Build/source/libs/freetype2/builds/win32/win32-def.mk
deleted file mode 100644
index a82b146bf92..00000000000
--- a/Build/source/libs/freetype2/builds/win32/win32-def.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# FreeType 2 Win32 specific definitions
-#
-
-
-# Copyright 1996-2000, 2003, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/win32
-PLATFORM := win32
-
-# The executable file extension (for tools). NOTE: WE INCLUDE THE DOT HERE !!
-#
-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/Build/source/libs/freetype2/configure b/Build/source/libs/freetype2/configure
deleted file mode 100755
index c72e44b7208..00000000000
--- a/Build/source/libs/freetype2/configure
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2002, 2003, 2004, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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
-
-if test "x$GNUMAKE" = x; then
- GNUMAKE=make
-fi
-
-if test -z "`$GNUMAKE -v 2>/dev/null | grep GNU`"; then
- if test -z "`$GNUMAKE -v 2>/dev/null | grep makepp`"; then
- echo "GNU make (>= 3.79.1) or makepp (>= 1.19) is required to build FreeType2." >&2
- echo "Please try" >&2
- echo " \`GNUMAKE=<GNU make command name> $0'." >&2
- echo "or >&2"
- echo " \`GNUMAKE=\"makepp --norc-substitution\" $0'." >&2
- exit 1
- fi
-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`
-
-# build a dummy Makefile if we are not building in the source tree
-
-if test "$abs_curr_dir" != "$abs_ft2_dir"; then
- mkdir reference
- echo "Copying \`modules.cfg'"
- cp $abs_ft2_dir/modules.cfg $abs_curr_dir
- 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 "LIBTOOL := \$(OBJ_DIR)/libtool" >> 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=
-for x in ${1+"$@"}; do
- CFG="$CFG '$x'"
-done
-CFG=$CFG $GNUMAKE setup unix
-
-# eof
diff --git a/Build/source/libs/freetype2/devel/ft2build.h b/Build/source/libs/freetype2/devel/ft2build.h
deleted file mode 100644
index c1d38c35ae8..00000000000
--- a/Build/source/libs/freetype2/devel/ft2build.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* ft2build.h */
-/* */
-/* FreeType 2 build and setup macros. */
-/* (Generic version) */
-/* */
-/* Copyright 1996-2001, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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> that is used
- * to build the library in debug mode. Its only difference with
- * the reference is that it forces the use of the local `ftoption.h'
- * which contains different settings for all configuration macros.
- *
- * To use it, you must define the environment variable FT2_BUILD_INCLUDE
- * to point to the directory containing these two files (`ft2build.h' and
- * `ftoption.h'), then invoke Jam as usual.
- */
-
-#ifndef __FT2_BUILD_DEVEL_H__
-#define __FT2_BUILD_DEVEL_H__
-
-#define FT_CONFIG_OPTIONS_H <ftoption.h>
-
-#include <freetype/config/ftheader.h>
-
-#endif /* __FT2_BUILD_DEVEL_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/devel/ftoption.h b/Build/source/libs/freetype2/devel/ftoption.h
deleted file mode 100644
index b3bace10642..00000000000
--- a/Build/source/libs/freetype2/devel/ftoption.h
+++ /dev/null
@@ -1,672 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoption.h (for development) */
-/* */
-/* User-selectable configuration macros (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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 larger than */
- /* the original size; the difference will be that 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
-
-
- /*************************************************************************/
- /* */
- /* 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 */
-
-
- /*************************************************************************/
- /* */
- /* 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 synthetize 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 */
- /* synthetize 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 synthetize 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 allows FreeType to be used with the PostScript language, using */
- /* the GhostScript interpreter. */
- /* */
-/* #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. */
- /* */
- /* This must be greater than 4KByte if you use FreeType to rasterize */
- /* glyphs; otherwise, you may set it to zero to avoid unnecessary */
- /* allocation of the render pool. */
- /* */
-#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
-
-
- /*************************************************************************/
- /* */
- /* 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
-
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** 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 */
- /* `freetype/ftnames.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_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. Note that there are */
- /* important patent issues related to the use of the interpreter. */
- /* */
- /* 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
-
-
- /*************************************************************************/
- /* */
- /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
- /* of the TrueType bytecode interpreter is used that doesn't implement */
- /* any of the patented opcodes and algorithms. Note that the */
- /* the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you */
- /* define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; with other words, */
- /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
- /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
- /* */
- /* This macro is only useful for a small number of font files (mostly */
- /* for Asian scripts) that require bytecode interpretation to properly */
- /* load glyphs. For all other fonts, this produces unpleasant results, */
- /* thus the unpatented interpreter is never used to load glyphs from */
- /* TrueType fonts unless one of the following two options is used. */
- /* */
- /* - The unpatented interpreter is explicitly activated by the user */
- /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
- /* when opening the FT_Face. */
- /* */
- /* - FreeType detects that the FT_Face corresponds to one of the */
- /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
- /* contains a hard-coded list of font names and other matching */
- /* parameters (see function `tt_face_init' in file */
- /* `src/truetype/ttobjs.c'). */
- /* */
- /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
- /* */
- /* { */
- /* FT_Parameter parameter; */
- /* FT_Open_Args open_args; */
- /* */
- /* */
- /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
- /* */
- /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
- /* open_args.pathname = my_font_pathname; */
- /* open_args.num_params = 1; */
- /* open_args.params = &parameter; */
- /* */
- /* error = FT_Open_Face( library, &open_args, index, &face ); */
- /* ... */
- /* } */
- /* */
-/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
- /* bytecode interpreter with a huge switch statement, rather than a call */
- /* table. This results in smaller and faster code for a number of */
- /* architectures. */
- /* */
- /* Note however that on some compiler/processor combinations, undefining */
- /* this macro will generate faster, though larger, code. */
- /* */
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
- /*************************************************************************/
- /* */
- /* 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://partners.adobe.com/asn/developer/opentype/glyf.html */
- /* http://fonts.apple.com/TTRefMan/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
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** 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 maximal 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
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** 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
-
- /* */
-
-
- /*
- * Define this variable if you want to keep the layout of internal
- * structures that was used prior to FreeType 2.2. This also compiles in
- * a few obsolete functions to avoid linking problems on typical Unix
- * distributions.
- *
- * For embedded systems or building a new distribution from scratch, it
- * is recommended to disable the macro since it reduces the library's code
- * size and activates a few memory-saving optimizations as well.
- */
-#undef FT_CONFIG_OPTION_OLD_INTERNALS
-
-
- /*
- * This variable is defined if either unpatented or native TrueType
- * hinting is requested by the definitions above.
- */
-#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-#define TT_USE_BYTECODE_INTERPRETER
-#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define TT_USE_BYTECODE_INTERPRETER
-#endif
-
-FT_END_HEADER
-
-
-#endif /* __FTOPTION_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/docs/CHANGES b/Build/source/libs/freetype2/docs/CHANGES
deleted file mode 100644
index cb662c7062e..00000000000
--- a/Build/source/libs/freetype2/docs/CHANGES
+++ /dev/null
@@ -1,3185 +0,0 @@
-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 embolded.
-
- - `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_FLAGS_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,GIB5,WANSONG,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/fttrig.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 redifinitions (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, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/CUSTOMIZE b/Build/source/libs/freetype2/docs/CUSTOMIZE
deleted file mode 100644
index 7d7d474ec0d..00000000000
--- a/Build/source/libs/freetype2/docs/CUSTOMIZE
+++ /dev/null
@@ -1,150 +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 found in `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 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'), 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/
- freetype/
- config/
- ftoption.h => custom options header
- ftmodule.h => custom modules list
-
- include/ => normal FreeType 2 include
- freetype/
- ...
-
- 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, 2005, 2006 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/DEBUG b/Build/source/libs/freetype2/docs/DEBUG
deleted file mode 100644
index 1fccc21c461..00000000000
--- a/Build/source/libs/freetype2/docs/DEBUG
+++ /dev/null
@@ -1,199 +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 `ftoptions.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 `freetype/internal/fttrace.h'.
-
- 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, 2003, 2004, 2005 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/FTL.TXT b/Build/source/libs/freetype2/docs/FTL.TXT
deleted file mode 100644
index bbaba33f47d..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/docs/GPL.TXT b/Build/source/libs/freetype2/docs/GPL.TXT
deleted file mode 100644
index b2fe7b6af35..00000000000
--- a/Build/source/libs/freetype2/docs/GPL.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/Build/source/libs/freetype2/docs/INSTALL b/Build/source/libs/freetype2/docs/INSTALL
deleted file mode 100644
index 585c4dbea2e..00000000000
--- a/Build/source/libs/freetype2/docs/INSTALL
+++ /dev/null
@@ -1,89 +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. Native TrueType Hinting
-
- Native TrueType hinting is disabled by default[1]. If you really
- need it, read the file `TRUETYPE' for information.
-
-
- 2. Unix Systems (including Mac OS X, Cygwin, and MSys on Windows)
-
- Please read *both* `UPGRADE.UNIX' and `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).
-
-
- 3. On VMS with the `mms' build tool
-
- See `INSTALL.VMS' for installation instructions on this platform.
-
-
- 4. 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*[2]!
- 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'.
-
-
- 5. 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.
-
-
- 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] More details on: http://www.freetype.org/patents.html
-
-[2] 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, 2001, 2002, 2003, 2004, 2005, 2006, 2007 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/INSTALL.ANY b/Build/source/libs/freetype2/docs/INSTALL.ANY
deleted file mode 100644
index 06f65d7c780..00000000000
--- a/Build/source/libs/freetype2/docs/INSTALL.ANY
+++ /dev/null
@@ -1,139 +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 directories `freetype2/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 <freetype/ftbbox.h>
- src/base/ftglyph.c -- recommended, see <freetype/ftglyph.h>
-
- src/base/ftbdf.c -- optional, see <freetype/ftbdf.h>
- src/base/ftbitmap.c -- optional, see <freetype/ftbitmap.h>
- src/base/ftgxval.c -- optional, see <freetype/ftgxval.h>
- src/base/ftmm.c -- optional, see <freetype/ftmm.h>
- src/base/ftotval.c -- optional, see <freetype/ftotval.h>
- src/base/ftpfr.c -- optional, see <freetype/ftpfr.h>
- src/base/ftstroke.c -- optional, see <freetype/ftstroke.h>
- src/base/ftsynth.c -- optional, see <freetype/ftsynth.h>
- src/base/fttype1.c -- optional, see <freetype/t1tables.h>
- src/base/ftwinfnt.c -- optional, see <freetype/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/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:
-
- `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'
-
-
- 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 -Ifreetype2/include ftsystem.c
- cc -c -Ifreetype2/include ftinit.c
- cc -c -Ifreetype2/include ftdebug.c
- cc -c -Ifreetype2/include 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, 2005, 2006 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/INSTALL.CROSS b/Build/source/libs/freetype2/docs/INSTALL.CROSS
deleted file mode 100644
index 1a0c00cddf3..00000000000
--- a/Build/source/libs/freetype2/docs/INSTALL.CROSS
+++ /dev/null
@@ -1,135 +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
-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.78.1 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.
- At present, using non-GNU cross compiler is not tested. 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
- that is executed during the building procedure. Non-GNU self
- compilers are acceptable, but such a setup is not tested yet.
-
-
- 2. Configuration
- ----------------
-
- 2.1. Building and target system
-
- To configure for cross-build, the options `--host=<system>' and
- `--build=<system>' must be passed to configure. For example, if
- your building 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
-
- or
-
- env CC=/usr/local/mips-ip22-linux/bin/gcc ./configure
-
- 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, configuration with
- `--prefix=/usr/local' installs binaries into the system wide
- `/usr/local' directory which then can't be executed. This
- causes confusion in configuration of all applications which 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 FreeType2 is used as a part of
- the target system, the prefix to install should reflect the file
- system structure of the target system.
-
-
- 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 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/Build/source/libs/freetype2/docs/INSTALL.GNU b/Build/source/libs/freetype2/docs/INSTALL.GNU
deleted file mode 100644
index 7b588cb870e..00000000000
--- a/Build/source/libs/freetype2/docs/INSTALL.GNU
+++ /dev/null
@@ -1,159 +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 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.78.1 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 win32
- compiler gcc
- configuration directory .\builds\win32
- configuration rules .\builds\win32\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 build system builds a statically linked library of the font
- engine in the `objs' directory. It does _not_ support the build
- of DLLs on Windows and OS/2. If you need these, you have to
- either use an IDE-specific project file, or follow the
- instructions in `INSTALL.ANY' to create your own Makefiles.
-
-----------------------------------------------------------------------
-
-Copyright 2003, 2004, 2005, 2006 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/INSTALL.MAC b/Build/source/libs/freetype2/docs/INSTALL.MAC
deleted file mode 100644
index 42bb0d8637c..00000000000
--- a/Build/source/libs/freetype2/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 cases in above, 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/Build/source/libs/freetype2/docs/INSTALL.UNIX b/Build/source/libs/freetype2/docs/INSTALL.UNIX
deleted file mode 100644
index 3ddfb8e4bb2..00000000000
--- a/Build/source/libs/freetype2/docs/INSTALL.UNIX
+++ /dev/null
@@ -1,96 +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.78.1 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 GNUMAKE variable as described below.
-
- As a special exception, 'makepp' can also be used to build
- FreeType 2. See the file docs/MAKEPP for details.
-
-
- 2. Regenerate the configure script if needed
- --------------------------------------------
-
- This only applies if you are building a CVS 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.CVS 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 GNUMAKE
- variable. For example, if `gmake' is the command to use on your
- system, do something like:
-
- GNUMAKE=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
-
-----------------------------------------------------------------------
-
-Copyright 2003, 2004, 2005, 2006, 2007 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/INSTALL.VMS b/Build/source/libs/freetype2/docs/INSTALL.VMS
deleted file mode 100644
index 994e566883f..00000000000
--- a/Build/source/libs/freetype2/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, 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.
-
-
---- end of INSTALL.VMS ---
diff --git a/Build/source/libs/freetype2/docs/LICENSE.TXT b/Build/source/libs/freetype2/docs/LICENSE.TXT
deleted file mode 100644
index 102a03d6510..00000000000
--- a/Build/source/libs/freetype2/docs/LICENSE.TXT
+++ /dev/null
@@ -1,28 +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.
-
- - The GNU General Public License version 2, found in `GPL.TXT' (any
- later version can be used also), for programs which already use the
- GPL. Note that the FTL is incompatible with the GPL due to its
- advertisement clause.
-
-The contributed PCF driver comes with a license similar to that of the X
-Window System. It is compatible to the above two licenses (see file
-src/pcf/readme).
-
-
---- end of LICENSE.TXT ---
diff --git a/Build/source/libs/freetype2/docs/MAKEPP b/Build/source/libs/freetype2/docs/MAKEPP
deleted file mode 100644
index 58eaf551df8..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/docs/PATENTS b/Build/source/libs/freetype2/docs/PATENTS
deleted file mode 100644
index f36778b5e95..00000000000
--- a/Build/source/libs/freetype2/docs/PATENTS
+++ /dev/null
@@ -1,27 +0,0 @@
-
- FreeType Patents Disclaimer
- August 1999
-
-
-
-WE HAVE DISCOVERED THAT APPLE OWNS SEVERAL PATENTS RELATED TO THE
-RENDERING OF TRUETYPE FONTS. THIS COULD MEAN THAT THE FREE USE OF
-FREETYPE MIGHT BE ILLEGAL IN THE USA, JAPAN, AND POSSIBLY OTHER
-COUNTRIES, BE IT IN PROPRIETARY OR FREE SOFTWARE PRODUCTS.
-
-FOR MORE DETAILS, WE STRONGLY ADVISE YOU TO GO TO THE FREETYPE
-PATENTS PAGE AT THE FOLLOWING WEB ADDRESS:
-
- http://www.freetype.org/patents.html
-
-WE WILL NOT PLACE INFORMATION IN THIS FILE AS THE SITUATION IS STILL
-UNDETERMINED FOR NOW. AT THE TIME THESE LINES ARE WRITTEN, WE HAVE
-CONTACTED APPLE'S LEGAL DEPARTMENT AND ARE STILL WAITING FOR THEIR
-ANSWER ON THE SUBJECT.
-
-PLEASE READ THE `INSTALL' FILE TO SEE HOW TO DISABLE THE ENGINE'S
-BYTECODE INTERPRETER IN ORDER TO BUILD A PATENT-FREE ENGINE, AT THE
-COST OF RENDERING QUALITY.
-
-
---- end of PATENTS ---
diff --git a/Build/source/libs/freetype2/docs/PROBLEMS b/Build/source/libs/freetype2/docs/PROBLEMS
deleted file mode 100644
index 9b598966a00..00000000000
--- a/Build/source/libs/freetype2/docs/PROBLEMS
+++ /dev/null
@@ -1,77 +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 behandled 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.
-
-----------------------------------------------------------------------
-
-
-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/Build/source/libs/freetype2/docs/TODO b/Build/source/libs/freetype2/docs/TODO
deleted file mode 100644
index be60d6f040a..00000000000
--- a/Build/source/libs/freetype2/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, 2002, 2003, 2004, 2005, 2006, 2007 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/TRUETYPE b/Build/source/libs/freetype2/docs/TRUETYPE
deleted file mode 100644
index 3e1614ad433..00000000000
--- a/Build/source/libs/freetype2/docs/TRUETYPE
+++ /dev/null
@@ -1,40 +0,0 @@
-How to enable the TrueType native hinter if you need it
--------------------------------------------------------
-
- The TrueType bytecode interpreter is disabled in all public releases
- of the FreeType packages for patents reasons; see
-
- http://www.freetype.org/patents.html
-
- for more details.
-
- However, many Linux distributions do enable the interpreter in the
- FreeType packages (DEB/RPM/etc.) they produce for their platforms. If
- you are using TrueType fonts on your system, you most probably want to
- enable it manually by doing the following:
-
- - open the file `include/freetype/config/ftoption.h'
-
- - locate a line that says:
-
- /* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
-
- - change it to:
-
- #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-
- These steps must be done _before_ compiling the library.
-
-------------------------------------------------------------------------
-
-Copyright 2003, 2005, 2006 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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 TRUETYPE ---
diff --git a/Build/source/libs/freetype2/docs/UPGRADE.UNIX b/Build/source/libs/freetype2/docs/UPGRADE.UNIX
deleted file mode 100644
index 48c746d703c..00000000000
--- a/Build/source/libs/freetype2/docs/UPGRADE.UNIX
+++ /dev/null
@@ -1,137 +0,0 @@
-
-SPECIAL NOTE FOR UNIX USERS
-===========================
-
- If you are installing this release of FreeType on a system that
- already uses release 2.0.5 (or even an older version), you have to
- perform a few special steps to ensure that everything goes well.
-
-
- 1. Enable the TrueType bytecode hinter if you need it
- -----------------------------------------------------
-
- See the instructions in the file `TRUETYPE' of this directory.
-
- Note that FreeType supports TrueType fonts without the bytecode
- interpreter through its auto-hinter, which now generates relatively
- good results with most fonts.
-
-
- 2. Determine the correct installation path
- ------------------------------------------
-
- By default, the configure script installs the library in
- `/usr/local'. However, many Unix distributions now install the
- library in `/usr', since FreeType is becoming a critical system
- component.
-
- If FreeType is already installed on your system, type
-
- freetype-config --prefix
-
- on the command line. This should return the installation path
- (e.g., `/usr' or `/usr/local'). To avoid problems of parallel
- FreeType versions, use this path for the --prefix option of the
- configure script.
-
- Otherwise, simply use `/usr' (or whatever you think is adequate for
- your installation).
-
-
- 3. Ensure that you are using GNU Make
- -------------------------------------
-
- The FreeType build system _exclusively_ works with GNU Make (as an
- exception you can use make++ which emulates GNU Make sufficiently;
- see http://makepp.sourceforge.net). You will not be able to compile
- the library with the instructions below using any other alternative
- (including BSD Make).
-
- Trying to compile the library with a different Make tool prints a
- message like:
-
- Sorry, GNU make is required to build FreeType2.
-
- and the build process is aborted. If this happens, install GNU Make
- on your system, and use the GNUMAKE environment variable to name it.
-
-
- 4. Build and install the library
- --------------------------------
-
- The following should work on all Unix systems where the `make'
- command invokes GNU Make:
-
- ./configure --prefix=<yourprefix>
- make
- make install (as root)
-
- where `<yourprefix>' must be replaced by the prefix returned by the
- `freetype-config' command.
-
- When using a different command to invoke GNU Make, use the GNUMAKE
- variable. For example, if `gmake' is the command to use on your
- system, do something like:
-
- GNUMAKE=gmake ./configure --prefix=<yourprefix>
- gmake
- gmake install (as root)
-
-
- 5. Take care of XFree86 version 4
- ---------------------------------
-
- Certain Linux distributions install _several_ versions of FreeType
- on your system. For example, on a fresh Mandrake 8.1 system, you
- can find the following files:
-
- /usr/lib/libfreetype.so which links to
- /usr/lib/libfreetype.6.1.0.so
-
- and
-
- /usr/X11R6/lib/libfreetype.so which links to
- /usr/X11R6/lib/libfreetype.6.0.so
-
- Note that these files correspond to two distinct versions of the
- library! It seems that this surprising issue is due to the install
- scripts of recent XFree86 servers (from 4.1.0) which install their
- own (dated) version of the library in `/usr/X11R6/lib'.
-
- In certain _rare_ cases you may experience minor problems if you
- install this release of the library in `/usr' only, namely, that
- certain applications do not benefit from the bug fixes and rendering
- improvements you would expect.
-
- There are two good ways to deal with this situation:
-
- - Install the library _twice_, in `/usr' and in `/usr/X11R6' (you
- have to do that each time you install a new FreeType release
- though).
-
- - Change the link in /usr/X11R6/lib/libfreetype.so to point to
-
- /usr/lib/libfreetype.so,
-
- and get rid of
-
- /usr/X11R6/lib/libfreetype.6.0.so
-
- The FreeType Team is not responsible for this problem, so please
- contact either the XFree86 development team or your Linux
- distributor to help clear this issue in case the information given
- here doesn't help.
-
-------------------------------------------------------------------------
-
-Copyright 2003, 2005 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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 UPGRADE.UNIX ---
diff --git a/Build/source/libs/freetype2/docs/VERSION.DLL b/Build/source/libs/freetype2/docs/VERSION.DLL
deleted file mode 100644
index ec9ff21c7db..00000000000
--- a/Build/source/libs/freetype2/docs/VERSION.DLL
+++ /dev/null
@@ -1,133 +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.0.9 or 2.1.3.
-
- * The libtool (and Unix) specific version number, like 9.2.3. 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.3.2'.
-
-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. Unfortunately, this one wasn't available or
-working correctly before the 2.1.3 official release.
-
-
-2. History
-----------
-
-The following table gives, for each official release, the corresponding
-libtool number, as well as the shared object number found on _most_
-systems, but not all of them:
-
-
- release libtool so
- -------------------------------
- 2.3.7 9.18.3 6.3.18
- 2.3.6 9.17.3 6.3.17
- 2.3.5 9.16.3 6.3.16
- 2.3.4 9.15.3 6.3.15
- 2.3.3 9.14.3 6.3.14
- 2.3.2 9.13.3 6.3.13
- 2.3.1 9.12.3 6.3.12
- 2.3.0 9.11.3 6.3.11
- 2.2.1 9.10.3 6.3.10
- 2.2.0 9.9.3 6.3.9
- 2.1.10 9.8.3 6.3.8
- 2.1.9 9.7.3 6.3.7
- 2.1.8 9.6.3 6.3.6
- 2.1.7 9.5.3 6.3.5
- 2.1.6 9.5.3 6.3.5
- 2.1.5 9.4.3 6.3.4
- 2.1.4 9.3.3 6.3.3
- 2.1.3 9.2.3 6.3.2
- 2.1.2 9.1.3 6.3.1
- 2.1.1 9.0.3 ?
- 2.1.0 8.0.2 ?
- 2.0.9 9.0.3 ?
- 2.0.8 8.0.2 ?
- 2.0.4 7.0.1 ?
- 2.0.1 6.1.0 ?
-
-The libtool numbers are a bit inconsistent due to the library's history:
-
- - 2.1.0 was created as a development branch from 2.0.8 (hence the same
- libtool numbers).
-
- - 2.0.9 was a bug-fix release of the `stable' branch, and we
- incorrectly increased its libtool number.
-
- - 2.1.4 was a development version, however it was stable enough to be
- the basis of the 2.2.0 release.
-
-
-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, 2003, 2004, 2005, 2006, 2007, 2008 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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 VERSION.DLL ---
diff --git a/Build/source/libs/freetype2/docs/formats.txt b/Build/source/libs/freetype2/docs/formats.txt
deleted file mode 100644
index 2f7c3d94e23..00000000000
--- a/Build/source/libs/freetype2/docs/formats.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-This file contains a list of various font formats. It gives the
-reference document and whether it is supported in FreeType 2.
-
-
- file type:
- The only special case is `MAC'; on older Mac OS versions, a `file'
- is stored as a data and a resource fork, this is, within two
- separate data chunks. In all other cases, the font data is stored
- in a single file.
-
- 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), `PS' (a text header, followed by binary or text data), and
- `LZW' (compressed with either `gzip' or `compress').
-
- 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.
-
- font type:
- Sub-formats of the font format. `SBIT' and `MACSBIT' are bitmap
- formats, `MM' and `VAR' support optical axes.
-
- glyph access:
- If not specified, the glyph access is `standard' to the font format.
- Values are `CID' for CID-keyed fonts, `SYNTHETIC' for fonts which
- are modified versions of other fonts by means of a transformation
- matrix, `COLLECTION' for collecting multiple fonts (sharing most of
- the data) into a single file, 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).
-
-
-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.
-
-
-file wrapper font font glyph FreeType reference
-type format format type access driver documents
-----------------------------------------------------------------------------
-
---- --- BDF --- --- bdf 5005.BDF_Spec.pdf, X11
-
-
---- SFNT PS TYPE_1 --- --- Type 1 GX Font Format
- (for the Mac)
-MAC SFNT PS TYPE_1 --- --- Type 1 GX Font Format
- (for the Mac)
---- SFNT PS TYPE_1 CID --- 5180.sfnt.pdf (for the Mac)
-MAC SFNT PS TYPE_1 CID --- 5180.sfnt.pdf (for the Mac)
---- SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
- (`OTTO' format)
-MAC SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
- (`OTTO' format)
---- SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
-MAC SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
---- SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
-MAC SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
---- SFNT TT SBIT --- sfnt XFree86 (bitmaps only;
- with `head' table)
---- SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
- bitmaps only; `bhed' table)
-MAC SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
- bitmaps only; `bhed' table)
---- SFNT TT --- --- truetype OT spec (`normal' TT font)
-MAC SFNT TT --- --- truetype OT spec (`normal' TT font)
-MAC SFNT TT VAR --- truetype GX spec (`?var' tables)
---- SFNT TT --- COLLECTION truetype OT spec (this can't be CFF)
-MAC SFNT TT --- COLLECTION truetype OT spec (this can't be CFF)
-
-
---- --- PS TYPE_1 --- type1 T1_SPEC.pdf
- (`normal' Type 1 font)
-MAC --- PS TYPE_1 --- type1 T1_SPEC.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 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 --- 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
---- LZW PCF --- --- pcf X11
-
-
---- --- PFR PFR0 --- pfr [2]
---- --- PFR PFR1 --- --- (undocumented, proprietary;
- probably never supported)
-
-
---- --- WINFNT --- --- winfonts MS Windows 3 Developer's Notes
---- --- WINFNT VECTOR --- --- MS Windows 3 Developer's Notes
-
-
-[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).
-
-------------------------------------------------------------------------
-
-Copyright 2004, 2005 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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 ---
diff --git a/Build/source/libs/freetype2/docs/raster.txt b/Build/source/libs/freetype2/docs/raster.txt
deleted file mode 100644
index 95d9e24010b..00000000000
--- a/Build/source/libs/freetype2/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, 2007 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/docs/reference/README b/Build/source/libs/freetype2/docs/reference/README
deleted file mode 100644
index 51b04d6f151..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/docs/reference/ft2-base_interface.html b/Build/source/libs/freetype2/docs/reference/ft2-base_interface.html
deleted file mode 100644
index e260e92dff4..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-base_interface.html
+++ /dev/null
@@ -1,3432 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Base Interface
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Library">FT_Library</a></td><td></td><td><a href="#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></td><td></td><td><a href="#FT_Load_Char">FT_Load_Char</a></td></tr>
-<tr><td></td><td><a href="#FT_Face">FT_Face</a></td><td></td><td><a href="#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></td><td></td><td><a href="#FT_LOAD_XXX">FT_LOAD_XXX</a></td></tr>
-<tr><td></td><td><a href="#FT_Size">FT_Size</a></td><td></td><td><a href="#FT_Size_Internal">FT_Size_Internal</a></td><td></td><td><a href="#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td></tr>
-<tr><td></td><td><a href="#FT_GlyphSlot">FT_GlyphSlot</a></td><td></td><td><a href="#FT_Size_Metrics">FT_Size_Metrics</a></td><td></td><td><a href="#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td></tr>
-<tr><td></td><td><a href="#FT_CharMap">FT_CharMap</a></td><td></td><td><a href="#FT_SizeRec">FT_SizeRec</a></td><td></td><td><a href="#FT_Set_Transform">FT_Set_Transform</a></td></tr>
-<tr><td></td><td><a href="#FT_Encoding">FT_Encoding</a></td><td></td><td><a href="#FT_SubGlyph">FT_SubGlyph</a></td><td></td><td><a href="#FT_Render_Mode">FT_Render_Mode</a></td></tr>
-<tr><td></td><td><a href="#FT_Glyph_Metrics">FT_Glyph_Metrics</a></td><td></td><td><a href="#FT_Slot_Internal">FT_Slot_Internal</a></td><td></td><td><a href="#ft_render_mode_xxx">ft_render_mode_xxx</a></td></tr>
-<tr><td></td><td><a href="#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td></td><td><a href="#FT_GlyphSlotRec">FT_GlyphSlotRec</a></td><td></td><td><a href="#FT_Render_Glyph">FT_Render_Glyph</a></td></tr>
-<tr><td></td><td><a href="#FT_Module">FT_Module</a></td><td></td><td><a href="#FT_Init_FreeType">FT_Init_FreeType</a></td><td></td><td><a href="#FT_Kerning_Mode">FT_Kerning_Mode</a></td></tr>
-<tr><td></td><td><a href="#FT_Driver">FT_Driver</a></td><td></td><td><a href="#FT_Done_FreeType">FT_Done_FreeType</a></td><td></td><td><a href="#ft_kerning_default">ft_kerning_default</a></td></tr>
-<tr><td></td><td><a href="#FT_Renderer">FT_Renderer</a></td><td></td><td><a href="#FT_OPEN_XXX">FT_OPEN_XXX</a></td><td></td><td><a href="#ft_kerning_unfitted">ft_kerning_unfitted</a></td></tr>
-<tr><td></td><td><a href="#FT_ENC_TAG">FT_ENC_TAG</a></td><td></td><td><a href="#FT_Parameter">FT_Parameter</a></td><td></td><td><a href="#ft_kerning_unscaled">ft_kerning_unscaled</a></td></tr>
-<tr><td></td><td><a href="#ft_encoding_xxx">ft_encoding_xxx</a></td><td></td><td><a href="#FT_Open_Args">FT_Open_Args</a></td><td></td><td><a href="#FT_Get_Kerning">FT_Get_Kerning</a></td></tr>
-<tr><td></td><td><a href="#FT_CharMapRec">FT_CharMapRec</a></td><td></td><td><a href="#FT_New_Face">FT_New_Face</a></td><td></td><td><a href="#FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></td></tr>
-<tr><td></td><td><a href="#FT_Face_Internal">FT_Face_Internal</a></td><td></td><td><a href="#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td></td><td><a href="#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></td></tr>
-<tr><td></td><td><a href="#FT_FaceRec">FT_FaceRec</a></td><td></td><td><a href="#FT_Open_Face">FT_Open_Face</a></td><td></td><td><a href="#FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></td></tr>
-<tr><td></td><td><a href="#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></td><td></td><td><a href="#FT_Attach_File">FT_Attach_File</a></td><td></td><td><a href="#FT_Select_Charmap">FT_Select_Charmap</a></td></tr>
-<tr><td></td><td><a href="#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td></td><td><a href="#FT_Attach_Stream">FT_Attach_Stream</a></td><td></td><td><a href="#FT_Set_Charmap">FT_Set_Charmap</a></td></tr>
-<tr><td></td><td><a href="#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></td><td></td><td><a href="#FT_Done_Face">FT_Done_Face</a></td><td></td><td><a href="#FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></td></tr>
-<tr><td></td><td><a href="#FT_HAS_KERNING">FT_HAS_KERNING</a></td><td></td><td><a href="#FT_Select_Size">FT_Select_Size</a></td><td></td><td><a href="#FT_Get_Char_Index">FT_Get_Char_Index</a></td></tr>
-<tr><td></td><td><a href="#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td></td><td><a href="#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td></td><td><a href="#FT_Get_First_Char">FT_Get_First_Char</a></td></tr>
-<tr><td></td><td><a href="#FT_IS_SFNT">FT_IS_SFNT</a></td><td></td><td><a href="#FT_Size_RequestRec">FT_Size_RequestRec</a></td><td></td><td><a href="#FT_Get_Next_Char">FT_Get_Next_Char</a></td></tr>
-<tr><td></td><td><a href="#FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></td><td></td><td><a href="#FT_Size_Request">FT_Size_Request</a></td><td></td><td><a href="#FT_Get_Name_Index">FT_Get_Name_Index</a></td></tr>
-<tr><td></td><td><a href="#FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></td><td></td><td><a href="#FT_Request_Size">FT_Request_Size</a></td><td></td><td><a href="#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></td></tr>
-<tr><td></td><td><a href="#FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></td><td></td><td><a href="#FT_Set_Char_Size">FT_Set_Char_Size</a></td><td></td><td><a href="#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></td></tr>
-<tr><td></td><td><a href="#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></td><td></td><td><a href="#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td></td><td></td></tr>
-<tr><td></td><td><a href="#FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></td><td></td><td><a href="#FT_Load_Glyph">FT_Load_Glyph</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section describes the public high-level API of FreeType&nbsp;2.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Library">FT_Library</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_LibraryRec_ *<b>FT_Library</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a FreeType library instance. Each &lsquo;library&rsquo; is completely independent from the others; it is the &lsquo;root&rsquo; of a set of objects like fonts, faces, sizes, etc.</p>
-<p>It also embeds a memory manager (see <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a>), as well as a scan-line converter object (see <a href="ft2-raster.html#FT_Raster">FT_Raster</a>).</p>
-<p>For multi-threading applications each thread should have its own FT_Library object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Library objects are normally created by <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a>, and destroyed with <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face">FT_Face</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_FaceRec_* <b>FT_Face</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a given typographic face object. A face object models a given typeface, in a given style.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Each face object also owns a single <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> object, as well as one or more <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects.</p>
-<p>Use <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to create a new face object from a given filepathname or a custom input stream.</p>
-<p>Use <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> to destroy it (along with its slot and sizes).</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
-<p>The <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> details the publicly accessible fields of a given face object.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Size">FT_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SizeRec_* <b>FT_Size</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an object used to model a face scaled to a given character size.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Each <a href="ft2-base_interface.html#FT_Face">FT_Face</a> has an <i>active</i> <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object that is used by functions like <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> to determine the scaling transformation which is used to load and hint glyphs and metrics.</p>
-<p>You can use <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a>, <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a>, <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> or even <a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a> to change the content (i.e., the scaling values) of the active <a href="ft2-base_interface.html#FT_Size">FT_Size</a>.</p>
-<p>You can use <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a> to create additional size objects for a given <a href="ft2-base_interface.html#FT_Face">FT_Face</a>, but they won't be used by other functions until you activate it through <a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a>. Only one size can be activated at any given time per face.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
-<p>The <a href="ft2-base_interface.html#FT_SizeRec">FT_SizeRec</a> structure details the publicly accessible fields of a given size object.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GlyphSlot">FT_GlyphSlot</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphSlotRec_* <b>FT_GlyphSlot</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a given &lsquo;glyph slot&rsquo;. A slot is a container where it is possible to load any one of the glyphs contained in its parent face.</p>
-<p>In other words, each time you call <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>, 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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
-<p><a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> details the publicly accessible glyph fields.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CharMap">FT_CharMap</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_CharMapRec_* <b>FT_CharMap</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a given character map. 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.</p>
-<p>Each face object owns zero or more charmaps, but only one of them can be &lsquo;active&rsquo; and used by <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>.</p>
-<p>The list of available charmaps in a face is available through the &lsquo;face-&gt;num_charmaps&rsquo; and &lsquo;face-&gt;charmaps&rsquo; fields of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
-<p>The currently active charmap is available as &lsquo;face-&gt;charmap&rsquo;. You should call <a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a> to change it.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>When a new face is created (either through <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>), the library looks for a Unicode charmap within the list and automatically activates it.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
-<p>The <a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a> details the publicly accessible fields of a given character map.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Encoding">FT_Encoding</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Encoding_
- {
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a>, 0, 0, 0, 0 ),
-
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a>, 's', 'y', 'm', 'b' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a>, 'u', 'n', 'i', 'c' ),
-
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>, 's', 'j', 'i', 's' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>, 'g', 'b', ' ', ' ' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>, 'b', 'i', 'g', '5' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>, 'w', 'a', 'n', 's' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>, 'j', 'o', 'h', 'a' ),
-
- /* for backwards compatibility */
- <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SJIS</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>,
- <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_GB2312</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>,
- <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_BIG5</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>,
- <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_WANSUNG</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>,
- <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_JOHAB</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>,
-
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a>, 'A', 'D', 'O', 'B' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a>, 'A', 'D', 'B', 'E' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a>, 'A', 'D', 'B', 'C' ),
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a>, 'l', 'a', 't', '1' ),
-
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a>, 'l', 'a', 't', '2' ),
-
- <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a>, 'a', 'r', 'm', 'n' )
-
- } <b>FT_Encoding</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An enumeration used to specify character sets supported by charmaps. Used in the <a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a> API function.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Despite the name, this enumeration lists specific character repertories (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16, GB2312_EUC, etc.).</p>
-<p>Because of 32-bit charcodes defined in Unicode (i.e., surrogates), all character codes must be expressed as FT_Longs.</p>
-<p>Other encodings might be defined in the future.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_ENCODING_NONE</b></td><td>
-<p>The encoding value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_UNICODE</b></td><td>
-<p>Corresponds to 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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_MS_SYMBOL</b></td><td>
-<p>Corresponds to the Microsoft Symbol encoding, used to encode mathematical symbols in the 32..255 character code range. For more information, see &lsquo;http://www.ceviz.net/symbol.htm&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_SJIS</b></td><td>
-<p>Corresponds to Japanese SJIS encoding. More info at at &lsquo;http://langsupport.japanreference.com/encoding.shtml&rsquo;. See note on multi-byte encodings below.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_GB2312</b></td><td>
-<p>Corresponds to an encoding system for Simplified Chinese as used used in mainland China.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_BIG5</b></td><td>
-<p>Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_WANSUNG</b></td><td>
-<p>Corresponds to the Korean encoding system known as Wansung. For more information see &lsquo;http://www.microsoft.com/typography/unicode/949.txt&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_JOHAB</b></td><td>
-<p>The Korean standard character set (KS&nbsp;C 5601-1992), which corresponds to MS Windows code page 1361. This character set includes all possible Hangeul character combinations.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_LATIN_1</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Corresponds to a Latin-1 encoding as defined in a Type&nbsp;1 PostScript font. It is limited to 256 character codes.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_STANDARD</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Corresponds to the Adobe Standard encoding, as found in Type&nbsp;1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_EXPERT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Corresponds to the Adobe Expert encoding, as found in Type&nbsp;1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_CUSTOM</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Corresponds to a custom encoding, as found in Type&nbsp;1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ENCODING_APPLE_ROMAN</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Corresponds to the 8-bit Apple roman encoding. Many TrueType and OpenType fonts contain a charmap for this encoding, since older versions of Mac OS are able to use it.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ENCODING_OLD_LATIN_2</b></td></tr>
-<tr valign=top><td></td><td>
-<p>This value is deprecated and was never used nor reported by FreeType. Don't use or test for it.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_MS_SJIS</b></td><td>
-<p>Same as FT_ENCODING_SJIS. Deprecated.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_MS_GB2312</b></td><td>
-<p>Same as FT_ENCODING_GB2312. Deprecated.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_MS_BIG5</b></td><td>
-<p>Same as FT_ENCODING_BIG5. Deprecated.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_MS_WANSUNG</b></td><td>
-<p>Same as FT_ENCODING_WANSUNG. Deprecated.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ENCODING_MS_JOHAB</b></td><td>
-<p>Same as FT_ENCODING_JOHAB. Deprecated.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>By default, FreeType automatically synthetizes a Unicode charmap for PostScript fonts, using their glyph names 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.</p>
-<p>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 <a href="ft2-bdf_fonts.html#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a> to find out which encoding is really present. If, for example, the &lsquo;cs_registry&rsquo; field is &lsquo;KOI8&rsquo; and the &lsquo;cs_encoding&rsquo; field is &lsquo;R&rsquo;, the font is encoded in KOI8-R.</p>
-<p>FT_ENCODING_NONE is always set (with a single exception) by the winfonts driver. Use <a href="ft2-winfnt_fonts.html#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a> and examine the &lsquo;charset&rsquo; field of the <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a> structure to find out which encoding is really present. For example, <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a> (204) means Windows code page 1251 (for Russian).</p>
-<p>FT_ENCODING_NONE is set if &lsquo;platform_id&rsquo; is <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a> and &lsquo;encoding_id&rsquo; is not <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a> (otherwise it is set to FT_ENCODING_APPLE_ROMAN).</p>
-<p>If &lsquo;platform_id&rsquo; is <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a>, use the function <a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a> to query the Mac language ID which may be needed to be able to distinguish Apple encoding variants. See</p>
-<p>http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT</p>
-<p>to get an idea how to do that. Basically, if the language ID is&nbsp;0, don't use it, otherwise subtract 1 from the language ID. Then examine &lsquo;encoding_id&rsquo;. If, for example, &lsquo;encoding_id&rsquo; is <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a> and the language ID (minus&nbsp;1) is &lsquo;TT_MAC_LANGID_GREEK&rsquo;, it is the Greek encoding, not Roman. <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a> with &lsquo;TT_MAC_LANGID_FARSI&rsquo; means the Farsi variant the Arabic encoding.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_Metrics">FT_Glyph_Metrics</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Glyph_Metrics_
- {
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> width;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> height;
-
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> horiBearingX;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> horiBearingY;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> horiAdvance;
-
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> vertBearingX;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> vertBearingY;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> vertAdvance;
-
- } <b>FT_Glyph_Metrics</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel format; if the flag <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> has been used while loading the glyph, values are expressed in font units instead.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>width</b></td><td>
-<p>The glyph's width.</p>
-</td></tr>
-<tr valign=top><td><b>height</b></td><td>
-<p>The glyph's height.</p>
-</td></tr>
-<tr valign=top><td><b>horiBearingX</b></td><td>
-<p>Left side bearing for horizontal layout.</p>
-</td></tr>
-<tr valign=top><td><b>horiBearingY</b></td><td>
-<p>Top side bearing for horizontal layout.</p>
-</td></tr>
-<tr valign=top><td><b>horiAdvance</b></td><td>
-<p>Advance width for horizontal layout.</p>
-</td></tr>
-<tr valign=top><td><b>vertBearingX</b></td><td>
-<p>Left side bearing for vertical layout.</p>
-</td></tr>
-<tr valign=top><td><b>vertBearingY</b></td><td>
-<p>Top side bearing for vertical layout.</p>
-</td></tr>
-<tr valign=top><td><b>vertAdvance</b></td><td>
-<p>Advance height for vertical layout.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bitmap_Size">FT_Bitmap_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Bitmap_Size_
- {
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> height;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> width;
-
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> size;
-
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> x_ppem;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> y_ppem;
-
- } <b>FT_Bitmap_Size</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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 &lsquo;available_sizes&rsquo; field of <a href="ft2-base_interface.html#FT_Face">FT_Face</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>height</b></td><td>
-<p>The vertical distance, in pixels, between two consecutive baselines. It is always positive.</p>
-</td></tr>
-<tr valign=top><td><b>width</b></td><td>
-<p>The average width, in pixels, of all glyphs in the strike.</p>
-</td></tr>
-<tr valign=top><td><b>size</b></td><td>
-<p>The nominal size of the strike in 26.6 fractional points. This field is not very useful.</p>
-</td></tr>
-<tr valign=top><td><b>x_ppem</b></td><td>
-<p>The horizontal ppem (nominal width) in 26.6 fractional pixels.</p>
-</td></tr>
-<tr valign=top><td><b>y_ppem</b></td><td>
-<p>The vertical ppem (nominal height) in 26.6 fractional pixels.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Windows FNT: The nominal size given in a FNT font is not reliable. Thus when the driver finds it incorrect, it sets &lsquo;size&rsquo; to some calculated values and sets &lsquo;x_ppem&rsquo; and &lsquo;y_ppem&rsquo; to the pixel width and height given in the font, respectively.</p>
-<p>TrueType embedded bitmaps: &lsquo;size&rsquo;, &lsquo;width&rsquo;, and &lsquo;height&rsquo; values are not contained in the bitmap strike itself. They are computed from the global font parameters.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Module">FT_Module</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ModuleRec_* <b>FT_Module</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a given FreeType module object. Each module can be a font driver, a renderer, or anything else that provides services to the formers.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Driver">FT_Driver</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_DriverRec_* <b>FT_Driver</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a given FreeType font driver object. Each font driver is a special module capable of creating faces from font files.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Renderer">FT_Renderer</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RendererRec_* <b>FT_Renderer</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a given FreeType renderer. A renderer is a special module in charge of converting a glyph image to a bitmap, when necessary. Each renderer supports a given glyph image format, and one or more target surface depths.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ENC_TAG">FT_ENC_TAG</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#ifndef <b>FT_ENC_TAG</b>
-#define <b>FT_ENC_TAG</b>( value, a, b, c, d ) \
- value = ( ( (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(a) &lt;&lt; 24 ) | \
- ( (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(b) &lt;&lt; 16 ) | \
- ( (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(c) &lt;&lt; 8 ) | \
- (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(d) )
-
-#endif /* <b>FT_ENC_TAG</b> */
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This macro converts four-letter tags into an unsigned long. It is used to define &lsquo;encoding&rsquo; identifiers (see <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a>).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Since many 16-bit compilers don't like 32-bit enumerations, you should redefine this macro in case of problems to something like this:</p>
-<pre class="colored">
- #define FT_ENC_TAG( value, a, b, c, d ) value
-</pre>
-<p>to get a simple enumeration without assigning special numbers.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_encoding_xxx">ft_encoding_xxx</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define ft_encoding_none <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a>
-#define ft_encoding_unicode <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a>
-#define ft_encoding_symbol <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a>
-#define ft_encoding_latin_1 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a>
-#define ft_encoding_latin_2 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a>
-#define ft_encoding_sjis <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>
-#define ft_encoding_gb2312 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>
-#define ft_encoding_big5 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>
-#define ft_encoding_wansung <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>
-#define ft_encoding_johab <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>
-
-#define ft_encoding_adobe_standard <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a>
-#define ft_encoding_adobe_expert <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a>
-#define ft_encoding_adobe_custom <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a>
-#define ft_encoding_apple_roman <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These constants are deprecated; use the corresponding <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> values instead.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CharMapRec">FT_CharMapRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_CharMapRec_
- {
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face;
- <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> encoding;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> platform_id;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> encoding_id;
-
- } <b>FT_CharMapRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The base charmap structure.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the parent face object.</p>
-</td></tr>
-<tr valign=top><td><b>encoding</b></td><td>
-<p>An <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> tag identifying the charmap. Use this with <a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a>.</p>
-</td></tr>
-<tr valign=top><td><b>platform_id</b></td><td>
-<p>An ID number describing the platform for the following encoding ID. This comes directly from the TrueType specification and should be emulated for other formats.</p>
-</td></tr>
-<tr valign=top><td><b>encoding_id</b></td><td>
-<p>A platform specific encoding number. This also comes from the TrueType specification and should be emulated similarly.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_Internal">FT_Face_Internal</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Face_InternalRec_* <b>FT_Face_Internal</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An opaque handle to an &lsquo;FT_Face_InternalRec&rsquo; structure, used to model private data of a given <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object.</p>
-<p>This structure might change between releases of FreeType&nbsp;2 and is not generally available to client applications.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_FaceRec">FT_FaceRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_FaceRec_
- {
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> num_faces;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index;
-
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_flags;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> style_flags;
-
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> num_glyphs;
-
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* family_name;
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* style_name;
-
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_fixed_sizes;
- <a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a>* available_sizes;
-
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_charmaps;
- <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a>* charmaps;
-
- <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> generic;
-
- /*# The following member variables (down to `underline_thickness') */
- /*# are only relevant to scalable outlines; cf. @<a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a> */
- /*# for bitmap fonts. */
- <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> bbox;
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> units_per_EM;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ascender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> descender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> height;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> max_advance_width;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> max_advance_height;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underline_position;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underline_thickness;
-
- <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> glyph;
- <a href="ft2-base_interface.html#FT_Size">FT_Size</a> size;
- <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap;
-
- /*@private begin */
-
- <a href="ft2-base_interface.html#FT_Driver">FT_Driver</a> driver;
- <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory;
- <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream;
-
- <a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a> sizes_list;
-
- <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> autohint;
- <span class="keyword">void</span>* extensions;
-
- <a href="ft2-base_interface.html#FT_Face_Internal">FT_Face_Internal</a> internal;
-
- /*@private end */
-
- } <b>FT_FaceRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>FreeType root face class structure. A face object models a typeface in a font file.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>num_faces</b></td><td>
-<p>The number of faces in the font file. Some font formats can have multiple faces in a font file.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>The index of the face in the font file. It is set to&nbsp;0 if there is only one face in the font file.</p>
-</td></tr>
-<tr valign=top><td><b>face_flags</b></td><td>
-<p>A set of bit flags that give important information about the face; see <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a> for the details.</p>
-</td></tr>
-<tr valign=top><td><b>style_flags</b></td><td>
-<p>A set of bit flags indicating the style of the face; see <a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a> for the details.</p>
-</td></tr>
-<tr valign=top><td><b>num_glyphs</b></td><td>
-<p>The number of glyphs in the face. If the face is scalable and has sbits (see &lsquo;num_fixed_sizes&rsquo;), it is set to the number of outline glyphs.</p>
-<p>For CID-keyed fonts, this value gives the highest CID used in the font.</p>
-</td></tr>
-<tr valign=top><td><b>family_name</b></td><td>
-<p>The face's family name. This is an ASCII string, usually in English, which describes the typeface's family (like &lsquo;Times New Roman&rsquo;, &lsquo;Bodoni&rsquo;, &lsquo;Garamond&rsquo;, etc). This is a least common denominator used to list fonts. Some formats (TrueType &amp; 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).</p>
-</td></tr>
-<tr valign=top><td><b>style_name</b></td><td>
-<p>The face's style name. This is an ASCII string, usually in English, which describes the typeface's style (like &lsquo;Italic&rsquo;, &lsquo;Bold&rsquo;, &lsquo;Condensed&rsquo;, etc). Not all font formats provide a style name, so this field is optional, and can be set to NULL. As for &lsquo;family_name&rsquo;, some formats provide localized and Unicode versions of this string. Applications should use the format specific interface to access them.</p>
-</td></tr>
-<tr valign=top><td><b>num_fixed_sizes</b></td><td>
-<p>The number of bitmap strikes in the face. Even if the face is scalable, there might still be bitmap strikes, which are called &lsquo;sbits&rsquo; in that case.</p>
-</td></tr>
-<tr valign=top><td><b>available_sizes</b></td><td>
-<p>An array of <a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a> for all bitmap strikes in the face. It is set to NULL if there is no bitmap strike.</p>
-</td></tr>
-<tr valign=top><td><b>num_charmaps</b></td><td>
-<p>The number of charmaps in the face.</p>
-</td></tr>
-<tr valign=top><td><b>charmaps</b></td><td>
-<p>An array of the charmaps of the face.</p>
-</td></tr>
-<tr valign=top><td><b>generic</b></td><td>
-<p>A field reserved for client uses. See the <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> type description.</p>
-</td></tr>
-<tr valign=top><td><b>bbox</b></td><td>
-<p>The font bounding box. Coordinates are expressed in font units (see &lsquo;units_per_EM&rsquo;). The box is large enough to contain any glyph from the font. Thus, &lsquo;bbox.yMax&rsquo; can be seen as the &lsquo;maximal ascender&rsquo;, and &lsquo;bbox.yMin&rsquo; as the &lsquo;minimal descender&rsquo;. Only relevant for scalable formats.</p>
-<p>Note that the bounding box might be off by (at least) one pixel for hinted fonts. See <a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a> for further discussion.</p>
-</td></tr>
-<tr valign=top><td><b>units_per_EM</b></td><td>
-<p>The number of font units per EM square for this face. This is typically 2048 for TrueType fonts, and 1000 for Type&nbsp;1 fonts. Only relevant for scalable formats.</p>
-</td></tr>
-<tr valign=top><td><b>ascender</b></td><td>
-<p>The typographic ascender of the face, expressed in font units. For font formats not having this information, it is set to &lsquo;bbox.yMax&rsquo;. Only relevant for scalable formats.</p>
-</td></tr>
-<tr valign=top><td><b>descender</b></td><td>
-<p>The typographic descender of the face, expressed in font units. For font formats not having this information, it is set to &lsquo;bbox.yMin&rsquo;. Note that this field is usually negative. Only relevant for scalable formats.</p>
-</td></tr>
-<tr valign=top><td><b>height</b></td><td>
-<p>The height is the vertical distance between two consecutive baselines, expressed in font units. It is always positive. Only relevant for scalable formats.</p>
-</td></tr>
-<tr valign=top><td><b>max_advance_width</b></td><td>
-<p>The maximal 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.</p>
-</td></tr>
-<tr valign=top><td><b>max_advance_height</b></td><td>
-<p>The maximal advance height, in font units, for all glyphs in this face. This is only relevant for vertical layouts, and is set to &lsquo;height&rsquo; for fonts that do not provide vertical metrics. Only relevant for scalable formats.</p>
-</td></tr>
-<tr valign=top><td><b>underline_position</b></td><td>
-<p>The position, in font units, of the underline line for this face. It's the center of the underlining stem. Only relevant for scalable formats.</p>
-</td></tr>
-<tr valign=top><td><b>underline_thickness</b></td><td>
-<p>The thickness, in font units, of the underline for this face. Only relevant for scalable formats.</p>
-</td></tr>
-<tr valign=top><td><b>glyph</b></td><td>
-<p>The face's associated glyph slot(s).</p>
-</td></tr>
-<tr valign=top><td><b>size</b></td><td>
-<p>The current active size for this face.</p>
-</td></tr>
-<tr valign=top><td><b>charmap</b></td><td>
-<p>The current active charmap for this face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Fields may be changed after a call to <a href="ft2-base_interface.html#FT_Attach_File">FT_Attach_File</a> or <a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a> ( 1L &lt;&lt; 0 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a> ( 1L &lt;&lt; 1 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a> ( 1L &lt;&lt; 2 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a> ( 1L &lt;&lt; 3 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a> ( 1L &lt;&lt; 4 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a> ( 1L &lt;&lt; 5 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a> ( 1L &lt;&lt; 6 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FAST_GLYPHS</a> ( 1L &lt;&lt; 7 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a> ( 1L &lt;&lt; 8 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a> ( 1L &lt;&lt; 9 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_EXTERNAL_STREAM</a> ( 1L &lt;&lt; 10 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a> ( 1L &lt;&lt; 11 )
-#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> ( 1L &lt;&lt; 12 )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit flags used in the &lsquo;face_flags&rsquo; field of the <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> structure. They inform client applications of properties of the corresponding face.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_FACE_FLAG_SCALABLE</b></td><td>
-<p>Indicates that the face contains outline glyphs. This doesn't prevent bitmap strikes, i.e., a face can have both this and and <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a> set.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_FACE_FLAG_FIXED_SIZES</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Indicates that the face contains bitmap strikes. See also the &lsquo;num_fixed_sizes&rsquo; and &lsquo;available_sizes&rsquo; fields of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_FACE_FLAG_FIXED_WIDTH</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Indicates that the face contains fixed-width characters (like Courier, Lucido, MonoType, etc.).</p>
-</td></tr>
-<tr valign=top><td><b>FT_FACE_FLAG_SFNT</b></td><td>
-<p>Indicates that the face uses the &lsquo;sfnt&rsquo; storage scheme. For now, this means TrueType and OpenType.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_FACE_FLAG_HORIZONTAL</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Indicates that the face contains horizontal glyph metrics. This should be set for all common formats.</p>
-</td></tr>
-<tr valign=top><td><b>FT_FACE_FLAG_VERTICAL</b></td><td>
-<p>Indicates that the face contains vertical glyph metrics. This is only available in some formats, not all of them.</p>
-</td></tr>
-<tr valign=top><td><b>FT_FACE_FLAG_KERNING</b></td><td>
-<p>Indicates that the face contains kerning information. If set, the kerning distance can be retrieved through the function <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>. Otherwise the function always return the vector (0,0). Note that FreeType doesn't handle kerning data from the &lsquo;GPOS&rsquo; table (as present in some OpenType fonts).</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_FACE_FLAG_FAST_GLYPHS</b></td></tr>
-<tr valign=top><td></td><td>
-<p>THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_FACE_FLAG_MULTIPLE_MASTERS</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Indicates that the font contains multiple masters and is capable of interpolating between them. See the multiple-masters specific API for details.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_FACE_FLAG_GLYPH_NAMES</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Indicates that the font contains glyph names that can be retrieved through <a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a>. Note that some TrueType fonts contain broken glyph name tables. Use the function <a href="ft2-type1_tables.html#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a> when needed.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_FACE_FLAG_EXTERNAL_STREAM</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Used internally by FreeType to indicate that a face's stream was provided by the client application and should not be destroyed when <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> is called. Don't read or test this flag.</p>
-</td></tr>
-<tr valign=top><td><b>FT_FACE_FLAG_HINTER</b></td><td>
-<p>Set if the font driver has a hinting machine of its own. For example, with TrueType fonts, it makes sense to use data from the SFNT &lsquo;gasp&rsquo; table only if the native TrueType hinting engine (with the bytecode interpreter) is available and active.</p>
-</td></tr>
-<tr valign=top><td><b>FT_FACE_FLAG_CID_KEYED</b></td><td>
-<p>Set if the font is CID-keyed. In that case, the font 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 &lsquo;FT_Err_Invalid_Argument&rsquo; error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_HAS_HORIZONTAL</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains horizontal metrics (this is true for all font formats though).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
-<p><a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a> can be used to check for vertical metrics.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_HAS_VERTICAL</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains vertical metrics.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_HAS_KERNING">FT_HAS_KERNING</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_HAS_KERNING</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains kerning data that can be accessed with <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_IS_SCALABLE">FT_IS_SCALABLE</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_IS_SCALABLE</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains a scalable font face (true for TrueType, Type&nbsp;1, Type&nbsp;42, CID, OpenType/CFF, and PFR font formats.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_IS_SFNT">FT_IS_SFNT</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_IS_SFNT</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-<p>If this macro is true, all functions defined in <a href="ft2-header_file_macros.html#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a> and <a href="ft2-header_file_macros.html#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a> are available.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_IS_FIXED_WIDTH</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains a font face that contains fixed-width (or &lsquo;monospace&rsquo;, &lsquo;fixed-pitch&rsquo;, etc.) glyphs.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_HAS_FIXED_SIZES</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains some embedded bitmaps. See the &lsquo;available_sizes&rsquo; field of the <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_HAS_FAST_GLYPHS</b>( face ) 0
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Deprecated.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_HAS_GLYPH_NAMES</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains some glyph names that can be accessed through <a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_HAS_MULTIPLE_MASTERS</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains some multiple masters. The functions provided by <a href="ft2-header_file_macros.html#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a> are then available to choose the exact design you want.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_IS_CID_KEYED</b>( face ) \
- ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro that returns true whenever a face object contains a CID-keyed font. See the discussion of <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> for more details.</p>
-<p>If this macro is true, all functions defined in <a href="ft2-header_file_macros.html#FT_CID_H">FT_CID_H</a> are available.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_ITALIC</a> ( 1 &lt;&lt; 0 )
-#define <a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_BOLD</a> ( 1 &lt;&lt; 1 )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit-flags used to indicate the style of a given face. These are used in the &lsquo;style_flags&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_STYLE_FLAG_ITALIC</b></td><td>
-<p>Indicates that a given face style is italic or oblique.</p>
-</td></tr>
-<tr valign=top><td><b>FT_STYLE_FLAG_BOLD</b></td><td>
-<p>Indicates that a given face is bold.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 &lsquo;OS/2&rsquo; table in SFNT based fonts).</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Size_Internal">FT_Size_Internal</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_InternalRec_* <b>FT_Size_Internal</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An opaque handle to an &lsquo;FT_Size_InternalRec&rsquo; structure, used to model private data of a given <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Size_Metrics">FT_Size_Metrics</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_Metrics_
- {
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> x_ppem; /* horizontal pixels per EM */
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> y_ppem; /* vertical pixels per EM */
-
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> x_scale; /* scaling values used to convert font */
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> y_scale; /* units to 26.6 fractional pixels */
-
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> ascender; /* ascender in 26.6 frac. pixels */
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> descender; /* descender in 26.6 frac. pixels */
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> height; /* text height in 26.6 frac. pixels */
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> max_advance; /* max horizontal advance, in 26.6 pixels */
-
- } <b>FT_Size_Metrics</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The size metrics structure gives the metrics of a size object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>x_ppem</b></td><td>
-<p>The width of the scaled EM square in pixels, hence the term &lsquo;ppem&rsquo; (pixels per EM). It is also referred to as &lsquo;nominal width&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>y_ppem</b></td><td>
-<p>The height of the scaled EM square in pixels, hence the term &lsquo;ppem&rsquo; (pixels per EM). It is also referred to as &lsquo;nominal height&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>x_scale</b></td><td>
-<p>A 16.16 fractional scaling value used to convert horizontal metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
-</td></tr>
-<tr valign=top><td><b>y_scale</b></td><td>
-<p>A 16.16 fractional scaling value used to convert vertical metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
-</td></tr>
-<tr valign=top><td><b>ascender</b></td><td>
-<p>The ascender in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-<tr valign=top><td><b>descender</b></td><td>
-<p>The descender in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-<tr valign=top><td><b>height</b></td><td>
-<p>The height in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-<tr valign=top><td><b>max_advance</b></td><td>
-<p>The maximal advance width in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
-<p>Note that due to glyph hinting, these values might not be exact for certain fonts. Thus they must be treated as unreliable with an error margin of at least one pixel!</p>
-<p>Indeed, the only way to get the exact metrics is to render <i>all</i> glyphs. As this would be a definite performance hit, it is up to client applications to perform such computations.</p>
-<p>The FT_Size_Metrics structure is valid for bitmap fonts also.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SizeRec">FT_SizeRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SizeRec_
- {
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face; /* parent face object */
- <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> generic; /* generic pointer for client uses */
- <a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a> metrics; /* size metrics */
- <a href="ft2-base_interface.html#FT_Size_Internal">FT_Size_Internal</a> internal;
-
- } <b>FT_SizeRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>FreeType root size class structure. A size object models a face object at a given size.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>Handle to the parent face object.</p>
-</td></tr>
-<tr valign=top><td><b>generic</b></td><td>
-<p>A typeless pointer, which is 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.</p>
-</td></tr>
-<tr valign=top><td><b>metrics</b></td><td>
-<p>Metrics for this size object. This field is read-only.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SubGlyph">FT_SubGlyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SubGlyphRec_* <b>FT_SubGlyph</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The subglyph structure is an internal object used to describe subglyphs (for example, in the case of composites).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The subglyph implementation is not part of the high-level API, hence the forward structure declaration.</p>
-<p>You can however retrieve subglyph information with <a href="ft2-base_interface.html#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Slot_Internal">FT_Slot_Internal</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Slot_InternalRec_* <b>FT_Slot_Internal</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An opaque handle to an &lsquo;FT_Slot_InternalRec&rsquo; structure, used to model private data of a given <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> object.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GlyphSlotRec">FT_GlyphSlotRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphSlotRec_
- {
- <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library;
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face;
- <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> next;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> reserved; /* retained for binary compatibility */
- <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> generic;
-
- <a href="ft2-base_interface.html#FT_Glyph_Metrics">FT_Glyph_Metrics</a> metrics;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> linearHoriAdvance;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> linearVertAdvance;
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> advance;
-
- <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> format;
-
- <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> bitmap;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> bitmap_left;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> bitmap_top;
-
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> outline;
-
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_subglyphs;
- <a href="ft2-base_interface.html#FT_SubGlyph">FT_SubGlyph</a> subglyphs;
-
- <span class="keyword">void</span>* control_data;
- <span class="keyword">long</span> control_len;
-
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> lsb_delta;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> rsb_delta;
-
- <span class="keyword">void</span>* other;
-
- <a href="ft2-base_interface.html#FT_Slot_Internal">FT_Slot_Internal</a> internal;
-
- } <b>FT_GlyphSlotRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the FreeType library instance this slot belongs to.</p>
-</td></tr>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the parent face object.</p>
-</td></tr>
-<tr valign=top><td><b>next</b></td><td>
-<p>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 &lsquo;next&rsquo; field.</p>
-</td></tr>
-<tr valign=top><td><b>generic</b></td><td>
-<p>A typeless pointer which is 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.</p>
-</td></tr>
-<tr valign=top><td><b>metrics</b></td><td>
-<p>The metrics of the last loaded glyph in the slot. The returned values depend on the last load flags (see the <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> API function) and can be expressed either in 26.6 fractional pixels or font units.</p>
-<p>Note that even when the glyph image is transformed, the metrics are not.</p>
-</td></tr>
-<tr valign=top><td><b>linearHoriAdvance</b></td><td>
-<p>The advance width of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a> is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs.</p>
-</td></tr>
-<tr valign=top><td><b>linearVertAdvance</b></td><td>
-<p>The advance height of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a> is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs.</p>
-</td></tr>
-<tr valign=top><td><b>advance</b></td><td>
-<p>This is the transformed advance width for the glyph.</p>
-</td></tr>
-<tr valign=top><td><b>format</b></td><td>
-<p>This field indicates the format of the image contained in the glyph slot. Typically <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>, <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>, or <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>, but others are possible.</p>
-</td></tr>
-<tr valign=top><td><b>bitmap</b></td><td>
-<p>This field is used as a bitmap descriptor when the slot format is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>. Note that the address and content of the bitmap buffer can change between calls of <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> and a few other functions.</p>
-</td></tr>
-<tr valign=top><td><b>bitmap_left</b></td><td>
-<p>This is the bitmap's left bearing expressed in integer pixels. Of course, this is only valid if the format is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>.</p>
-</td></tr>
-<tr valign=top><td><b>bitmap_top</b></td><td>
-<p>This is the bitmap's top bearing expressed in integer pixels. Remember that this is the distance from the baseline to the top-most glyph scanline, upwards y&nbsp;coordinates being <b>positive</b>.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>The outline descriptor for the current glyph image if its format is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>. Once a glyph is loaded, &lsquo;outline&rsquo; can be transformed, distorted, embolded, etc. However, it must not be freed.</p>
-</td></tr>
-<tr valign=top><td><b>num_subglyphs</b></td><td>
-<p>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 <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a> flag. For now this is internal to FreeType.</p>
-</td></tr>
-<tr valign=top><td><b>subglyphs</b></td><td>
-<p>An array of subglyph descriptors for composite glyphs. There are &lsquo;num_subglyphs&rsquo; elements in there. Currently internal to FreeType.</p>
-</td></tr>
-<tr valign=top><td><b>control_data</b></td><td>
-<p>Certain font drivers can also return the control data for a given glyph image (e.g. TrueType bytecode, Type&nbsp;1 charstrings, etc.). This field is a pointer to such data.</p>
-</td></tr>
-<tr valign=top><td><b>control_len</b></td><td>
-<p>This is the length in bytes of the control data.</p>
-</td></tr>
-<tr valign=top><td><b>other</b></td><td>
-<p>Really wicked formats can use this pointer to present their own glyph image to client applications. Note that the application needs to know about the image format.</p>
-</td></tr>
-<tr valign=top><td><b>lsb_delta</b></td><td>
-<p>The difference between hinted and unhinted left side bearing while autohinting is active. Zero otherwise.</p>
-</td></tr>
-<tr valign=top><td><b>rsb_delta</b></td><td>
-<p>The difference between hinted and unhinted right side bearing while autohinting is active. Zero otherwise.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> is called with default flags (see <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a>) the glyph image is loaded in the glyph slot in its native format (e.g., an outline glyph for TrueType and Type&nbsp;1 formats).</p>
-<p>This image can later be converted into a bitmap by calling <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>. This function finds the current renderer for the native image's format then invokes it.</p>
-<p>The renderer is in charge of transforming the native image through the slot's face transformation fields, then convert it into a bitmap that is returned in &lsquo;slot-&gt;bitmap&rsquo;.</p>
-<p>Note that &lsquo;slot-&gt;bitmap_left&rsquo; and &lsquo;slot-&gt;bitmap_top&rsquo; 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, &lsquo;slot-&gt;format&rsquo; is also changed to <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Here a small pseudo code fragment which shows how to use &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo;:</p>
-<pre class="colored">
- FT_Pos origin_x = 0;
- FT_Pos prev_rsb_delta = 0;
-
-
- for all glyphs do
- &lt;compute kern between current and previous glyph and add it to
- `origin_x'&gt;
-
- &lt;load glyph with `FT_Load_Glyph'&gt;
-
- if ( prev_rsb_delta - face-&gt;glyph-&gt;lsb_delta &gt;= 32 )
- origin_x -= 64;
- else if ( prev_rsb_delta - face-&gt;glyph-&gt;lsb_delta &lt; -32 )
- origin_x += 64;
-
- prev_rsb_delta = face-&gt;glyph-&gt;rsb_delta;
-
- &lt;save glyph image, or render glyph, or ...&gt;
-
- origin_x += face-&gt;glyph-&gt;advance.x;
- endfor
-</pre>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Init_FreeType">FT_Init_FreeType</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Init_FreeType</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> *alibrary );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Initialize a new FreeType library object. The set of modules that are registered by this function is determined at build time.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>alibrary</b></td><td>
-<p>A handle to a new library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Done_FreeType">FT_Done_FreeType</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Done_FreeType</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Destroy a given FreeType library object and all of its children, including resources, drivers, faces, sizes, etc.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the target library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OPEN_XXX">FT_OPEN_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a> 0x1
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a> 0x2
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a> 0x4
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a> 0x8
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a> 0x10
-
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_memory</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a> /* deprecated */
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_stream</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a> /* deprecated */
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_pathname</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a> /* deprecated */
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_driver</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a> /* deprecated */
-#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_params</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a> /* deprecated */
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit-field constants used within the &lsquo;flags&rsquo; field of the <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a> structure.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_OPEN_MEMORY</b></td><td>
-<p>This is a memory-based stream.</p>
-</td></tr>
-<tr valign=top><td><b>FT_OPEN_STREAM</b></td><td>
-<p>Copy the stream from the &lsquo;stream&rsquo; field.</p>
-</td></tr>
-<tr valign=top><td><b>FT_OPEN_PATHNAME</b></td><td>
-<p>Create a new input stream from a C&nbsp;path name.</p>
-</td></tr>
-<tr valign=top><td><b>FT_OPEN_DRIVER</b></td><td>
-<p>Use the &lsquo;driver&rsquo; field.</p>
-</td></tr>
-<tr valign=top><td><b>FT_OPEN_PARAMS</b></td><td>
-<p>Use the &lsquo;num_params&rsquo; and &lsquo;params&rsquo; fields.</p>
-</td></tr>
-<tr valign=top><td><b>ft_open_memory</b></td><td>
-<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a> instead.</p>
-</td></tr>
-<tr valign=top><td><b>ft_open_stream</b></td><td>
-<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a> instead.</p>
-</td></tr>
-<tr valign=top><td><b>ft_open_pathname</b></td><td>
-<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a> instead.</p>
-</td></tr>
-<tr valign=top><td><b>ft_open_driver</b></td><td>
-<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a> instead.</p>
-</td></tr>
-<tr valign=top><td><b>ft_open_params</b></td><td>
-<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a> instead.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The &lsquo;FT_OPEN_MEMORY&rsquo;, &lsquo;FT_OPEN_STREAM&rsquo;, and &lsquo;FT_OPEN_PATHNAME&rsquo; flags are mutually exclusive.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Parameter">FT_Parameter</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Parameter_
- {
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> tag;
- <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> data;
-
- } <b>FT_Parameter</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple structure used to pass more or less generic parameters to <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>tag</b></td><td>
-<p>A four-byte identification tag.</p>
-</td></tr>
-<tr valign=top><td><b>data</b></td><td>
-<p>A pointer to the parameter data.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The ID and function of parameters are driver-specific.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Open_Args">FT_Open_Args</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Open_Args_
- {
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> flags;
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* memory_base;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> memory_size;
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* pathname;
- <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream;
- <a href="ft2-base_interface.html#FT_Module">FT_Module</a> driver;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_params;
- <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a>* params;
-
- } <b>FT_Open_Args</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used 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 <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> and <a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>flags</b></td><td>
-<p>A set of bit flags indicating how to use the structure.</p>
-</td></tr>
-<tr valign=top><td><b>memory_base</b></td><td>
-<p>The first byte of the file in memory.</p>
-</td></tr>
-<tr valign=top><td><b>memory_size</b></td><td>
-<p>The size in bytes of the file in memory.</p>
-</td></tr>
-<tr valign=top><td><b>pathname</b></td><td>
-<p>A pointer to an 8-bit file pathname.</p>
-</td></tr>
-<tr valign=top><td><b>stream</b></td><td>
-<p>A handle to a source stream object.</p>
-</td></tr>
-<tr valign=top><td><b>driver</b></td><td>
-<p>This field is exclusively used by <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>; it simply specifies the font driver to use to open the face. If set to&nbsp;0, FreeType tries to load the face with each one of the drivers in its list.</p>
-</td></tr>
-<tr valign=top><td><b>num_params</b></td><td>
-<p>The number of extra parameters.</p>
-</td></tr>
-<tr valign=top><td><b>params</b></td><td>
-<p>Extra parameters passed to the font driver when opening a new face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The stream type is determined by the contents of &lsquo;flags&rsquo; which are tested in the following order by <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>:</p>
-<p>If the &lsquo;FT_OPEN_MEMORY&rsquo; bit is set, assume that this is a memory file of &lsquo;memory_size&rsquo; bytes, located at &lsquo;memory_address&rsquo;. The data are are not copied, and the client is responsible for releasing and destroying them <i>after</i> the corresponding call to <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
-<p>Otherwise, if the &lsquo;FT_OPEN_STREAM&rsquo; bit is set, assume that a custom input stream &lsquo;stream&rsquo; is used.</p>
-<p>Otherwise, if the &lsquo;FT_OPEN_PATHNAME&rsquo; bit is set, assume that this is a normal file and use &lsquo;pathname&rsquo; to open it.</p>
-<p>If the &lsquo;FT_OPEN_DRIVER&rsquo; bit is set, <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> only tries to open the file with the driver whose handler is in &lsquo;driver&rsquo;.</p>
-<p>If the &lsquo;FT_OPEN_PARAMS&rsquo; bit is set, the parameters given by &lsquo;num_params&rsquo; and &lsquo;params&rsquo; is used. They are ignored otherwise.</p>
-<p>Ideally, both the &lsquo;pathname&rsquo; and &lsquo;params&rsquo; fields should be tagged as &lsquo;const&rsquo;; this is missing for API backwards compatibility. With other words, applications should treat them as read-only.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_New_Face">FT_New_Face</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_New_Face</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> <span class="keyword">char</span>* filepathname,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function calls <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to open a font by its pathname.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>pathname</b></td><td>
-<p>A path to the font file.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>The index of the face within the font. The first face has index&nbsp;0.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A handle to a new face object. If &lsquo;face_index&rsquo; is greater than or equal to zero, it must be non-NULL. See <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> for more details.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_New_Memory_Face">FT_New_Memory_Face</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_New_Memory_Face</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* file_base,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> file_size,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function calls <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to open a font which has been loaded into memory.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>file_base</b></td><td>
-<p>A pointer to the beginning of the font data.</p>
-</td></tr>
-<tr valign=top><td><b>file_size</b></td><td>
-<p>The size of the memory chunk used by the font data.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>The index of the face within the font. The first face has index&nbsp;0.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A handle to a new face object. If &lsquo;face_index&rsquo; is greater than or equal to zero, it must be non-NULL. See <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> for more details.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You must not deallocate the memory before calling <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Open_Face">FT_Open_Face</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Open_Face</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a>* args,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a face object from a given resource described by <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>args</b></td><td>
-<p>A pointer to an &lsquo;FT_Open_Args&rsquo; structure which must be filled by the caller.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>The index of the face within the font. The first face has index&nbsp;0.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A handle to a new face object. If &lsquo;face_index&rsquo; is greater than or equal to zero, it must be non-NULL. See note below.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object which can be accessed directly through &lsquo;face-&gt;glyph&rsquo;.</p>
-<p>FT_Open_Face can be used to quickly check whether the font format of a given font resource is supported by FreeType. If the &lsquo;face_index&rsquo; field is negative, the function's return value is&nbsp;0 if the font format is recognized, or non-zero otherwise; the function returns a more or less empty face handle in &lsquo;*aface&rsquo; (if &lsquo;aface&rsquo; isn't NULL). The only useful field in this special case is &lsquo;face-&gt;num_faces&rsquo; which gives the number of faces within the font file. After examination, the returned <a href="ft2-base_interface.html#FT_Face">FT_Face</a> structure should be deallocated with a call to <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
-<p>Each new face object created with this function also owns a default <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object, accessible as &lsquo;face-&gt;size&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Attach_File">FT_Attach_File</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Attach_File</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <span class="keyword">const</span> <span class="keyword">char</span>* filepathname );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function calls <a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a> to attach a file.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>The target face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>filepathname</b></td><td>
-<p>The pathname.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Attach_Stream">FT_Attach_Stream</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Attach_Stream</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a>* parameters );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>&lsquo;Attach&rsquo; 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&nbsp;1 font to get the kerning values and other metrics.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>The target face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>parameters</b></td><td>
-<p>A pointer to <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a> which must be filled by the caller.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The meaning of the &lsquo;attach&rsquo; (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).</p>
-<p>Client applications are expected to know what they are doing when invoking this function. Most drivers simply do not implement file attachments.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Done_Face">FT_Done_Face</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Done_Face</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Discard a given face object, as well as all of its child slots and sizes.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Select_Size">FT_Select_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Select_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> strike_index );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Select a bitmap strike.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>strike_index</b></td><td>
-<p>The index of the bitmap strike in the &lsquo;available_sizes&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> structure.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Size_Request_Type">FT_Size_Request_Type</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Size_Request_Type_
- {
- <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_NOMINAL</a>,
- <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a>,
- <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_BBOX</a>,
- <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_CELL</a>,
- <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_SCALES</a>,
-
- FT_SIZE_REQUEST_TYPE_MAX
-
- } <b>FT_Size_Request_Type</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An enumeration type that lists the supported size request types.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_NOMINAL</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The nominal size. The &lsquo;units_per_EM&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> is used to determine both scaling values.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_REAL_DIM</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The real dimension. The sum of the the &lsquo;Ascender&rsquo; and (minus of) the &lsquo;Descender&rsquo; fields of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> are used to determine both scaling values.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_BBOX</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The font bounding box. The width and height of the &lsquo;bbox&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> are used to determine the horizontal and vertical scaling value, respectively.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_CELL</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The &lsquo;max_advance_width&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> is used to determine the horizontal scaling value; the vertical scaling value is determined the same way as <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a> 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.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_SCALES</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Specify the scaling values directly.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The above descriptions only apply to scalable formats. For bitmap formats, the behaviour is up to the driver.</p>
-<p>See the note section of <a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a> if you wonder how size requesting relates to scaling values.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Size_RequestRec">FT_Size_RequestRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_RequestRec_
- {
- <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a> type;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> width;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> height;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> horiResolution;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> vertResolution;
-
- } <b>FT_Size_RequestRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a size request.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>type</b></td><td>
-<p>See <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a>.</p>
-</td></tr>
-<tr valign=top><td><b>width</b></td><td>
-<p>The desired width.</p>
-</td></tr>
-<tr valign=top><td><b>height</b></td><td>
-<p>The desired height.</p>
-</td></tr>
-<tr valign=top><td><b>horiResolution</b></td><td>
-<p>The horizontal resolution. If set to zero, &lsquo;width&rsquo; is treated as a 26.6 fractional pixel value.</p>
-</td></tr>
-<tr valign=top><td><b>vertResolution</b></td><td>
-<p>The vertical resolution. If set to zero, &lsquo;height&rsquo; is treated as a 26.6 fractional pixel value.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If &lsquo;width&rsquo; is zero, then the horizontal scaling value is set equal to the vertical scaling value, and vice versa.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Size_Request">FT_Size_Request</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_RequestRec_ *<b>FT_Size_Request</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a size request structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Request_Size">FT_Request_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Request_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-base_interface.html#FT_Size_Request">FT_Size_Request</a> req );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Resize the scale of the active <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object in a face.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>req</b></td><td>
-<p>A pointer to a <a href="ft2-base_interface.html#FT_Size_RequestRec">FT_Size_RequestRec</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 <a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a> instead in that case.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Char_Size">FT_Set_Char_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_Char_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a> char_width,
- <a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a> char_height,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> horz_resolution,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> vert_resolution );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function calls <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> to request the nominal size (in points).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a target face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>char_width</b></td><td>
-<p>The nominal width, in 26.6 fractional points.</p>
-</td></tr>
-<tr valign=top><td><b>char_height</b></td><td>
-<p>The nominal height, in 26.6 fractional points.</p>
-</td></tr>
-<tr valign=top><td><b>horz_resolution</b></td><td>
-<p>The horizontal resolution in dpi.</p>
-</td></tr>
-<tr valign=top><td><b>vert_resolution</b></td><td>
-<p>The vertical resolution in dpi.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If either the character width or height is zero, it is set equal to the other value.</p>
-<p>If either the horizontal or vertical resolution is zero, it is set equal to the other value.</p>
-<p>A character width or height smaller than 1pt is set to 1pt; if both resolution values are zero, they are set to 72dpi.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_Pixel_Sizes</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> pixel_width,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> pixel_height );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function calls <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> to request the nominal size (in pixels).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the target face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>pixel_width</b></td><td>
-<p>The nominal width, in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>pixel_height</b></td><td>
-<p>The nominal height, in pixels.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Load_Glyph">FT_Load_Glyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Load_Glyph</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
- <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> load_flags );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to load a single glyph into the glyph slot of a face object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the target face object where the glyph is loaded.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>glyph_index</b></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>load_flags</b></td><td>
-<p>A flag indicating what to load for this glyph. The <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a> 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).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The loaded glyph may be transformed. See <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a> for the details.</p>
-<p>For subsetted CID-keyed fonts, &lsquo;FT_Err_Invalid_Argument&rsquo; is returned for invalid CID values (this is, for CID values which don't have a corresponding glyph in the font). See the discussion of the <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> flag for more details.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Load_Char">FT_Load_Char</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Load_Char</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> char_code,
- <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> load_flags );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to load a single glyph into the glyph slot of a face object, according to its character code.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a target face object where the glyph is loaded.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>char_code</b></td><td>
-<p>The glyph's character code, according to the current charmap used in the face.</p>
-</td></tr>
-<tr valign=top><td><b>load_flags</b></td><td>
-<p>A flag indicating what to load for this glyph. The <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a> 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).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function simply calls <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a> and <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_LOAD_XXX">FT_LOAD_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a> 0x0
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> 0x1
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> 0x2
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a> 0x4
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a> 0x8
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a> 0x10
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a> 0x20
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_CROP_BITMAP</a> 0x40
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_PEDANTIC</a> 0x80
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a> 0x200
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a> 0x400
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a> 0x800
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a> 0x1000
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a> 0x2000
-#define FT_LOAD_SBITS_ONLY 0x4000 /* temporary hack! */
-#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a> 0x8000U
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit-field constants used with <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> to indicate what kind of operations to perform during glyph loading.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_LOAD_DEFAULT</b></td><td>
-<p>Corresponding to&nbsp;0, this value is used as the default glyph load operation. In this case, the following happens:</p>
-<p>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).</p>
-<p>2. If no embedded bitmap is searched or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then &lsquo;hinted&rsquo; to the pixel grid in order to optimize it. The outline data can be accessed from the glyph slot (see note below).</p>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_NO_SCALE</b></td><td>
-<p>Don't scale the outline glyph loaded, but keep it in font units.</p>
-<p>This flag implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> and <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a>, and unsets <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a>.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_NO_HINTING</b></td><td>
-<p>Disable hinting. This generally generates &lsquo;blurrier&rsquo; bitmap glyph when the glyph is rendered in any of the anti-aliased modes. See also the note below.</p>
-<p>This flag is implied by <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_RENDER</b></td><td>
-<p>Call <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a> after the glyph is loaded. By default, the glyph is rendered in <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a> mode. This can be overridden by <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> or <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a>.</p>
-<p>This flag is unset by <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_NO_BITMAP</b></td><td>
-<p>Ignore bitmap strikes when loading. Bitmap-only fonts ignore this flag.</p>
-<p><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> always sets this flag.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_LOAD_VERTICAL_LAYOUT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Load the glyph for vertical text layout. <i>Don't</i> use it as it is problematic currently.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_FORCE_AUTOHINT</b></td><td>
-<p>Indicates that the auto-hinter is preferred over the font's native hinter. See also the note below.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_CROP_BITMAP</b></td><td>
-<p>Indicates that the font driver should crop the loaded bitmap glyph (i.e., remove all space around its black bits). Not all drivers implement this.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_PEDANTIC</b></td><td>
-<p>Indicates that the font driver should 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.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Indicates that the font driver should ignore the global advance width defined in the font. By default, that value is used as the advance width for all glyphs when the face has <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a> set.</p>
-<p>This flag exists for historical reasons (to support buggy CJK fonts).</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_NO_RECURSE</b></td><td>
-<p>This flag is only used internally. It merely indicates that the font driver should not load composite glyphs recursively. Instead, it should set the &lsquo;num_subglyph&rsquo; and &lsquo;subglyphs&rsquo; values of the glyph slot accordingly, and set &lsquo;glyph-&gt;format&rsquo; to <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>.</p>
-<p>The description of sub-glyphs is not available to client applications for now.</p>
-<p>This flag implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> and <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_LOAD_IGNORE_TRANSFORM</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Indicates that the transform matrix set by <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a> should be ignored.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_MONOCHROME</b></td><td>
-<p>This flag is used with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a> to indicate that you want to render an outline glyph to a 1-bit monochrome bitmap glyph, with 8&nbsp;pixels packed into each byte of the bitmap data.</p>
-<p>Note that this has no effect on the hinting algorithm used. You should use <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> instead so that the monochrome-optimized hinting algorithm is used.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_LINEAR_DESIGN</b></td><td>
-<p>Indicates that the &lsquo;linearHoriAdvance&rsquo; and &lsquo;linearVertAdvance&rsquo; fields of <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> should be kept in font units. See <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> for details.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_NO_AUTOHINT</b></td><td>
-<p>Disable auto-hinter. See also the note below.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>By default, hinting is enabled and the font's native hinter (see <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a>) is preferred over the auto-hinter. You can disable hinting by setting <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> or change the precedence by setting <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>. You can also set <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a> in case you don't want the auto-hinter to be used at all.</p>
-<p>Besides deciding which hinter to use, you can also decide which hinting algorithm to use. See <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> for details.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define FT_LOAD_TARGET_( x ) ( (<a href="ft2-basic_types.html#FT_Int32">FT_Int32</a>)( (x) &amp; 15 ) &lt;&lt; 16 )
-
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a> )
-#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD_V</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of values that are used to select a specific hinting algorithm to use by the hinter. You should OR one of these values to your &lsquo;load_flags&rsquo; when calling <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-<p>Note that font's native hinters may ignore the hinting algorithm you have specified (e.g., the TrueType bytecode interpreter). You can set <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a> to ensure that the auto-hinter is used.</p>
-<p>Also note that <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a> is an exception, in that it always implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_LOAD_TARGET_NORMAL</b></td><td>
-<p>This corresponds to the default hinting algorithm, optimized for standard gray-level rendering. For monochrome output, use <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> instead.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_TARGET_LIGHT</b></td><td>
-<p>A lighter hinting algorithm for non-monochrome modes. Many generated glyphs are more fuzzy but better resemble its original shape. A bit like rendering on Mac OS&nbsp;X.</p>
-<p>As a special exception, this target implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_TARGET_MONO</b></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_TARGET_LCD</b></td><td>
-<p>A variant of <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a> optimized for horizontally decimated LCD displays.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LOAD_TARGET_LCD_V</b></td><td>
-<p>A variant of <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a> optimized for vertically decimated LCD displays.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should use only <i>one</i> of the FT_LOAD_TARGET_XXX values in your &lsquo;load_flags&rsquo;. They can't be ORed.</p>
-<p>If <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a> is also set, the glyph is rendered in the corresponding mode (i.e., the mode which matches the used algorithm best) unless <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a> is set.</p>
-<p>You can use a hinting algorithm that doesn't correspond to the same rendering mode. As an example, it is possible to use the &lsquo;light&rsquo; hinting algorithm and have the results rendered in horizontal LCD pixel mode, with code like</p>
-<pre class="colored">
- FT_Load_Glyph( face, glyph_index,
- load_flags | FT_LOAD_TARGET_LIGHT );
-
- FT_Render_Glyph( face-&gt;glyph, FT_RENDER_MODE_LCD );
-</pre>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_LOAD_TARGET_MODE</b>( x ) ( (<a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a>)( ( (x) &gt;&gt; 16 ) &amp; 15 ) )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> corresponding to a given <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> value.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Transform">FT_Set_Transform</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Set_Transform</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* delta );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to set the transformation that is applied to glyph images when they are loaded into a glyph slot through <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>matrix</b></td><td>
-<p>A pointer to the transformation's 2x2 matrix. Use&nbsp;0 for the identity matrix.</p>
-</td></tr>
-<tr valign=top><td><b>delta</b></td><td>
-<p>A pointer to the translation vector. Use&nbsp;0 for the null vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a> or <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a>.</p>
-<p>Note that this also transforms the &lsquo;face.glyph.advance&rsquo; field, but <b>not</b> the values in &lsquo;face.glyph.metrics&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Render_Mode">FT_Render_Mode</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Render_Mode_
- {
- <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a> = 0,
- <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a>,
- <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a>,
- <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>,
- <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a>,
-
- FT_RENDER_MODE_MAX
-
- } <b>FT_Render_Mode</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An enumeration type that lists the render modes supported by FreeType&nbsp;2. Each mode corresponds to a specific type of scanline conversion performed on the outline.</p>
-<p>For bitmap fonts the &lsquo;bitmap-&gt;pixel_mode&rsquo; field in the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure gives the format of the returned bitmap.</p>
-<p>All modes except <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a> use 256 levels of opacity.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_RENDER_MODE_NORMAL</b></td><td>
-<p>This is the default render mode; it corresponds to 8-bit anti-aliased bitmaps.</p>
-</td></tr>
-<tr valign=top><td><b>FT_RENDER_MODE_LIGHT</b></td><td>
-<p>This is equivalent to <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a>. It is only defined as a separate value because render modes are also used indirectly to define hinting algorithm selectors. See <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> for details.</p>
-</td></tr>
-<tr valign=top><td><b>FT_RENDER_MODE_MONO</b></td><td>
-<p>This mode corresponds to 1-bit bitmaps (with 2&nbsp;levels of opacity).</p>
-</td></tr>
-<tr valign=top><td><b>FT_RENDER_MODE_LCD</b></td><td>
-<p>This mode corresponds to horizontal RGB and BGR sub-pixel displays, like LCD-screens. It produces 8-bit bitmaps that are 3&nbsp;times the width of the original glyph outline in pixels, and which use the <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a> mode.</p>
-</td></tr>
-<tr valign=top><td><b>FT_RENDER_MODE_LCD_V</b></td><td>
-<p>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&nbsp;times the height of the original glyph outline in pixels and use the <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a> mode.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be filtered to reduce color-fringes by using <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> (not active in the default builds). It is up to the caller to either call <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> (if available) or do the filtering itself.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_render_mode_xxx">ft_render_mode_xxx</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_normal</a> <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a>
-#define <a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_mono</a> <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These constants are deprecated. Use the corresponding <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> values instead.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ft_render_mode_normal</b></td><td>
-<p>see <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a></p>
-</td></tr>
-<tr valign=top><td><b>ft_render_mode_mono</b></td><td>
-<p>see <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a></p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Render_Glyph">FT_Render_Glyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Render_Glyph</b>( <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> slot,
- <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> render_mode );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Convert a given glyph image to a bitmap. It does so by inspecting the glyph image format, finding the relevant renderer, and invoking it.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>slot</b></td><td>
-<p>A handle to the glyph slot containing the image to convert.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>render_mode</b></td><td>
-<p>This is the render mode used to render the glyph image into a bitmap. See <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> for a list of possible values.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Kerning_Mode">FT_Kerning_Mode</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Kerning_Mode_
- {
- <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a> = 0,
- <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a>,
- <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a>
-
- } <b>FT_Kerning_Mode</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An enumeration used to specify which kerning values to return in <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_KERNING_DEFAULT</b></td><td>
-<p>Return scaled and grid-fitted kerning distances (value is&nbsp;0).</p>
-</td></tr>
-<tr valign=top><td><b>FT_KERNING_UNFITTED</b></td><td>
-<p>Return scaled but un-grid-fitted kerning distances.</p>
-</td></tr>
-<tr valign=top><td><b>FT_KERNING_UNSCALED</b></td><td>
-<p>Return the kerning vector in original font units.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_kerning_default">ft_kerning_default</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>ft_kerning_default</b> <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This constant is deprecated. Please use <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a> instead.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_kerning_unfitted">ft_kerning_unfitted</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>ft_kerning_unfitted</b> <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This constant is deprecated. Please use <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a> instead.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_kerning_unscaled">ft_kerning_unscaled</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>ft_kerning_unscaled</b> <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This constant is deprecated. Please use <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a> instead.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Kerning">FT_Get_Kerning</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Kerning</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> left_glyph,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> right_glyph,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> kern_mode,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> *akerning );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the kerning vector between two glyphs of a same face.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a source face object.</p>
-</td></tr>
-<tr valign=top><td><b>left_glyph</b></td><td>
-<p>The index of the left glyph in the kern pair.</p>
-</td></tr>
-<tr valign=top><td><b>right_glyph</b></td><td>
-<p>The index of the right glyph in the kern pair.</p>
-</td></tr>
-<tr valign=top><td><b>kern_mode</b></td><td>
-<p>See <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_Kerning_Mode</a> for more information. Determines the scale and dimension of the returned kerning vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>akerning</b></td><td>
-<p>The kerning vector. This is either in font units or in pixels (26.6 format) for scalable formats, and in pixels for fixed-sizes formats.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Only horizontal layouts (left-to-right &amp; 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.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Track_Kerning</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> point_size,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> degree,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* akerning );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the track kerning for a given face object at a given size.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a source face object.</p>
-</td></tr>
-<tr valign=top><td><b>point_size</b></td><td>
-<p>The point size in 16.16 fractional points.</p>
-</td></tr>
-<tr valign=top><td><b>degree</b></td><td>
-<p>The degree of tightness.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>akerning</b></td><td>
-<p>The kerning in 16.16 fractional points.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Glyph_Name</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
- <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> buffer,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> buffer_max );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the ASCII name of a given glyph in a face. This only works for those faces where <a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a>(face) returns&nbsp;1.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a source face object.</p>
-</td></tr>
-<tr valign=top><td><b>glyph_index</b></td><td>
-<p>The glyph index.</p>
-</td></tr>
-<tr valign=top><td><b>buffer_max</b></td><td>
-<p>The maximal number of bytes available in the buffer.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>buffer</b></td><td>
-<p>A pointer to a target buffer where the name is copied to.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 &lsquo;buffer&rsquo; is set to&nbsp;0 to indicate an empty name.</p>
-<p>The glyph name is truncated to fit within the buffer if it is too long. The returned string is always zero-terminated.</p>
-<p>This function is not compiled within the library if the config macro &lsquo;FT_CONFIG_OPTION_NO_GLYPH_NAMES&rsquo; is defined in &lsquo;include/freetype/config/ftoptions.h&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
- <b>FT_Get_Postscript_Name</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the ASCII PostScript name of a given face, if available. This only works with PostScript and TrueType fonts.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A pointer to the face's PostScript name. NULL if unavailable.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The returned pointer is owned by the face and is destroyed with it.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Select_Charmap">FT_Select_Charmap</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Select_Charmap</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> encoding );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Select a given charmap by its encoding tag (as listed in &lsquo;freetype.h&rsquo;).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>encoding</b></td><td>
-<p>A handle to the selected encoding.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function returns an error if no charmap in the face corresponds to the encoding queried here.</p>
-<p>Because many fonts contain more than a single cmap for Unicode encoding, this function has some special code to select the one which covers Unicode best (&lsquo;best&rsquo; in the sense that a UCS-4 cmap is preferred to a UCS-2 cmap). It is thus preferable to <a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a> in this case.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Charmap">FT_Set_Charmap</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_Charmap</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Select a given charmap for character code to glyph index mapping.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>charmap</b></td><td>
-<p>A handle to the selected charmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function returns an error if the charmap is not part of the face (i.e., if it is not listed in the &lsquo;face-&gt;charmaps&rsquo; table).</p>
-<p>It also fails if a type&nbsp;14 charmap is selected.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
- <b>FT_Get_Charmap_Index</b>( <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve index of a given charmap.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>charmap</b></td><td>
-<p>A handle to a charmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The index into the array of character maps within the face to which &lsquo;charmap&rsquo; belongs.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Char_Index">FT_Get_Char_Index</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
- <b>FT_Get_Char_Index</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the glyph index of a given character code. This function uses a charmap object to do the mapping.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr valign=top><td><b>charcode</b></td><td>
-<p>The character code.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The glyph index. 0&nbsp;means &lsquo;undefined character code&rsquo;.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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&nbsp;0 always corresponds to the &lsquo;missing glyph&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_First_Char">FT_Get_First_Char</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> )
- <b>FT_Get_First_Char</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *agindex );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function is used to return the first character code in the current charmap of a given face. It also returns the corresponding glyph index.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>agindex</b></td><td>
-<p>Glyph index of first character code. 0&nbsp;if charmap is empty.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The charmap's first character code.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should use this function with <a href="ft2-base_interface.html#FT_Get_Next_Char">FT_Get_Next_Char</a> to be able to parse all character codes available in a given charmap. The code should look like this:</p>
-<pre class="colored">
- FT_ULong charcode;
- FT_UInt gindex;
-
-
- charcode = FT_Get_First_Char( face, &amp;gindex );
- while ( gindex != 0 )
- {
- ... do something with (charcode,gindex) pair ...
-
- charcode = FT_Get_Next_Char( face, charcode, &amp;gindex );
- }
-</pre>
-<p>Note that &lsquo;*agindex&rsquo; is set to&nbsp;0 if the charmap is empty. The result itself can be&nbsp;0 in two cases: if the charmap is empty or when the value&nbsp;0 is the first valid character code.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Next_Char">FT_Get_Next_Char</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> )
- <b>FT_Get_Next_Char</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> char_code,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *agindex );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function is used to return the next character code in the current charmap of a given face following the value &lsquo;char_code&rsquo;, as well as the corresponding glyph index.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr valign=top><td><b>char_code</b></td><td>
-<p>The starting character code.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>agindex</b></td><td>
-<p>Glyph index of first character code. 0&nbsp;if charmap is empty.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The charmap's next character code.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should use this function with <a href="ft2-base_interface.html#FT_Get_First_Char">FT_Get_First_Char</a> to walk over all character codes available in a given charmap. See the note for this function for a simple code example.</p>
-<p>Note that &lsquo;*agindex&rsquo; is set to&nbsp;0 when there are no more codes in the charmap.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Name_Index">FT_Get_Name_Index</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
- <b>FT_Get_Name_Index</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* glyph_name );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the glyph index of a given glyph name. This function uses driver specific objects to do the translation.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr valign=top><td><b>glyph_name</b></td><td>
-<p>The glyph name.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The glyph index. 0&nbsp;means &lsquo;undefined character code&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a> 1
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a> 2
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a> 4
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_SCALE</a> 8
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XY_SCALE</a> 0x40
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_2X2</a> 0x80
-#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a> 0x200
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of constants used to describe subglyphs. Please refer to the TrueType specification for the meaning of the various flags.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</b></td></tr>
-<tr valign=top><td></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</b></td></tr>
-<tr valign=top><td></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</b></td></tr>
-<tr valign=top><td></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>FT_SUBGLYPH_FLAG_SCALE</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_XY_SCALE</b></td></tr>
-<tr valign=top><td></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>FT_SUBGLYPH_FLAG_2X2</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_USE_MY_METRICS</b></td></tr>
-<tr valign=top><td></td><td>
-<p></p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_SubGlyph_Info</b>( <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> glyph,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> sub_index,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *p_index,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *p_flags,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *p_arg1,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *p_arg2,
- <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a> *p_transform );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve a description of a given subglyph. Only use it if &lsquo;glyph-&gt;format&rsquo; is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>, or an error is returned.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>glyph</b></td><td>
-<p>The source glyph slot.</p>
-</td></tr>
-<tr valign=top><td><b>sub_index</b></td><td>
-<p>The index of subglyph. Must be less than &lsquo;glyph-&gt;num_subglyphs&rsquo;.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>p_index</b></td><td>
-<p>The glyph index of the subglyph.</p>
-</td></tr>
-<tr valign=top><td><b>p_flags</b></td><td>
-<p>The subglyph flags, see <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a>.</p>
-</td></tr>
-<tr valign=top><td><b>p_arg1</b></td><td>
-<p>The subglyph's first argument (if any).</p>
-</td></tr>
-<tr valign=top><td><b>p_arg2</b></td><td>
-<p>The subglyph's second argument (if any).</p>
-</td></tr>
-<tr valign=top><td><b>p_transform</b></td><td>
-<p>The subglyph transformation (if any).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The values of &lsquo;*p_arg1&rsquo;, &lsquo;*p_arg2&rsquo;, and &lsquo;*p_transform&rsquo; must be interpreted depending on the flags returned in &lsquo;*p_flags&rsquo;. See the TrueType specification for details.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-basic_types.html b/Build/source/libs/freetype2/docs/reference/ft2-basic_types.html
deleted file mode 100644
index 259a7e45683..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-basic_types.html
+++ /dev/null
@@ -1,1164 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Basic Data Types
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Byte">FT_Byte</a></td><td></td><td><a href="#FT_Offset">FT_Offset</a></td><td></td><td><a href="#FT_UnitVector">FT_UnitVector</a></td></tr>
-<tr><td></td><td><a href="#FT_Bytes">FT_Bytes</a></td><td></td><td><a href="#FT_PtrDist">FT_PtrDist</a></td><td></td><td><a href="#FT_F26Dot6">FT_F26Dot6</a></td></tr>
-<tr><td></td><td><a href="#FT_Char">FT_Char</a></td><td></td><td><a href="#FT_String">FT_String</a></td><td></td><td><a href="#FT_Pixel_Mode">FT_Pixel_Mode</a></td></tr>
-<tr><td></td><td><a href="#FT_Int">FT_Int</a></td><td></td><td><a href="#FT_Tag">FT_Tag</a></td><td></td><td><a href="#ft_pixel_mode_xxx">ft_pixel_mode_xxx</a></td></tr>
-<tr><td></td><td><a href="#FT_UInt">FT_UInt</a></td><td></td><td><a href="#FT_Error">FT_Error</a></td><td></td><td><a href="#FT_Palette_Mode">FT_Palette_Mode</a></td></tr>
-<tr><td></td><td><a href="#FT_Int16">FT_Int16</a></td><td></td><td><a href="#FT_Fixed">FT_Fixed</a></td><td></td><td><a href="#FT_Bitmap">FT_Bitmap</a></td></tr>
-<tr><td></td><td><a href="#FT_UInt16">FT_UInt16</a></td><td></td><td><a href="#FT_Pointer">FT_Pointer</a></td><td></td><td><a href="#FT_IMAGE_TAG">FT_IMAGE_TAG</a></td></tr>
-<tr><td></td><td><a href="#FT_Int32">FT_Int32</a></td><td></td><td><a href="#FT_Pos">FT_Pos</a></td><td></td><td><a href="#FT_Glyph_Format">FT_Glyph_Format</a></td></tr>
-<tr><td></td><td><a href="#FT_UInt32">FT_UInt32</a></td><td></td><td><a href="#FT_Vector">FT_Vector</a></td><td></td><td><a href="#ft_glyph_format_xxx">ft_glyph_format_xxx</a></td></tr>
-<tr><td></td><td><a href="#FT_Short">FT_Short</a></td><td></td><td><a href="#FT_BBox">FT_BBox</a></td><td></td><td><a href="#FT_Data">FT_Data</a></td></tr>
-<tr><td></td><td><a href="#FT_UShort">FT_UShort</a></td><td></td><td><a href="#FT_Matrix">FT_Matrix</a></td><td></td><td><a href="#FT_Generic_Finalizer">FT_Generic_Finalizer</a></td></tr>
-<tr><td></td><td><a href="#FT_Long">FT_Long</a></td><td></td><td><a href="#FT_FWord">FT_FWord</a></td><td></td><td><a href="#FT_Generic">FT_Generic</a></td></tr>
-<tr><td></td><td><a href="#FT_ULong">FT_ULong</a></td><td></td><td><a href="#FT_UFWord">FT_UFWord</a></td><td></td><td><a href="#FT_MAKE_TAG">FT_MAKE_TAG</a></td></tr>
-<tr><td></td><td><a href="#FT_Bool">FT_Bool</a></td><td></td><td><a href="#FT_F2Dot14">FT_F2Dot14</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the basic data types defined by FreeType&nbsp;2, ranging from simple scalar types to bitmap descriptors. More font-specific structures are defined in a different section.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Byte">FT_Byte</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Byte</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple typedef for the <i>unsigned</i> char type.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bytes">FT_Bytes</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* <b>FT_Bytes</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for constant memory areas.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Char">FT_Char</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">char</span> <b>FT_Char</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple typedef for the <i>signed</i> char type.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Int">FT_Int</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">int</span> <b>FT_Int</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for the int type.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_UInt">FT_UInt</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <b>FT_UInt</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for the unsigned int type.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Int16">FT_Int16</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Int16</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for a 16bit signed integer type.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_UInt16">FT_UInt16</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UInt16</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for a 16bit unsigned integer type.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Int32">FT_Int32</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> XXX <b>FT_Int32</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for a 32bit signed integer type. The size depends on the configuration.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_UInt32">FT_UInt32</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> XXX <b>FT_UInt32</b>;
-
-</pre></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Short">FT_Short</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Short</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for signed short.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_UShort">FT_UShort</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UShort</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for unsigned short.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Long">FT_Long</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Long</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for signed long.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ULong">FT_ULong</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">long</span> <b>FT_ULong</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for unsigned long.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bool">FT_Bool</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Bool</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef of unsigned char, used for simple booleans. As usual, values 1 and&nbsp;0 represent true and false, respectively.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Offset">FT_Offset</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> size_t <b>FT_Offset</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This is equivalent to the ANSI&nbsp;C &lsquo;size_t&rsquo; type, i.e., the largest <i>unsigned</i> integer type used to express a file size or position, or a memory block size.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_PtrDist">FT_PtrDist</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> ft_ptrdiff_t <b>FT_PtrDist</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This is equivalent to the ANSI&nbsp;C &lsquo;ptrdiff_t&rsquo; type, i.e., the largest <i>signed</i> integer type used to express the distance between two pointers.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_String">FT_String</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">char</span> <b>FT_String</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple typedef for the char type, usually used for strings.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Tag">FT_Tag</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a> <b>FT_Tag</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A typedef for 32-bit tags (as used in the SFNT format).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Error">FT_Error</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span> <b>FT_Error</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The FreeType error code type. A value of&nbsp;0 is always interpreted as a successful operation.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Fixed">FT_Fixed</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Fixed</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This type is used to store 16.16 fixed float values, like scaling values or matrix coefficients.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Pointer">FT_Pointer</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>* <b>FT_Pointer</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple typedef for a typeless pointer.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Pos">FT_Pos</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Pos</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The type FT_Pos is a 32-bit integer used to store vectorial coordinates. Depending on the context, these can represent distances in integer font units, or 16.16, or 26.6 fixed float pixel coordinates.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Vector">FT_Vector</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Vector_
- {
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> x;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> y;
-
- } <b>FT_Vector</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple structure used to store a 2D vector; coordinates are of the FT_Pos type.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>x</b></td><td>
-<p>The horizontal coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>y</b></td><td>
-<p>The vertical coordinate.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_BBox">FT_BBox</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BBox_
- {
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xMin, yMin;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xMax, yMax;
-
- } <b>FT_BBox</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to hold an outline's bounding box, i.e., the coordinates of its extrema in the horizontal and vertical directions.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>xMin</b></td><td>
-<p>The horizontal minimum (left-most).</p>
-</td></tr>
-<tr valign=top><td><b>yMin</b></td><td>
-<p>The vertical minimum (bottom-most).</p>
-</td></tr>
-<tr valign=top><td><b>xMax</b></td><td>
-<p>The horizontal maximum (right-most).</p>
-</td></tr>
-<tr valign=top><td><b>yMax</b></td><td>
-<p>The vertical maximum (top-most).</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Matrix">FT_Matrix</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Matrix_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> xx, xy;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> yx, yy;
-
- } <b>FT_Matrix</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed float format. The computation performed is:</p>
-<pre class="colored">
- x' = x*xx + y*xy
- y' = x*yx + y*yy
-</pre>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>xx</b></td><td>
-<p>Matrix coefficient.</p>
-</td></tr>
-<tr valign=top><td><b>xy</b></td><td>
-<p>Matrix coefficient.</p>
-</td></tr>
-<tr valign=top><td><b>yx</b></td><td>
-<p>Matrix coefficient.</p>
-</td></tr>
-<tr valign=top><td><b>yy</b></td><td>
-<p>Matrix coefficient.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_FWord">FT_FWord</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_FWord</b>; /* distance in FUnits */
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A signed 16-bit integer used to store a distance in original font units.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_UFWord">FT_UFWord</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UFWord</b>; /* <span class="keyword">unsigned</span> distance */
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An unsigned 16-bit integer used to store a distance in original font units.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_F2Dot14">FT_F2Dot14</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_F2Dot14</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A signed 2.14 fixed float type used for unit vectors.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_UnitVector">FT_UnitVector</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_UnitVector_
- {
- <a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a> x;
- <a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a> y;
-
- } <b>FT_UnitVector</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14 types.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>x</b></td><td>
-<p>Horizontal coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>y</b></td><td>
-<p>Vertical coordinate.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_F26Dot6">FT_F26Dot6</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_F26Dot6</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A signed 26.6 fixed float type used for vectorial pixel coordinates.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Pixel_Mode">FT_Pixel_Mode</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Pixel_Mode_
- {
- <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a> = 0,
- <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>,
- <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>,
- <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a>,
- <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a>,
- <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a>,
- <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a>,
-
- FT_PIXEL_MODE_MAX /* do not remove */
-
- } <b>FT_Pixel_Mode</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An enumeration type used to describe the format of pixels in a given bitmap. Note that additional formats may be added in the future.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_PIXEL_MODE_NONE</b></td><td>
-<p>Value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr valign=top><td><b>FT_PIXEL_MODE_MONO</b></td><td>
-<p>A monochrome bitmap, using 1&nbsp;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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_PIXEL_MODE_GRAY</b></td><td>
-<p>An 8-bit bitmap, generally used to represent anti-aliased glyph images. Each pixel is stored in one byte. Note that the number of value &lsquo;gray&rsquo; levels is stored in the &lsquo;num_grays&rsquo; field of the <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> structure (it generally is 256).</p>
-</td></tr>
-<tr valign=top><td><b>FT_PIXEL_MODE_GRAY2</b></td><td>
-<p>A 2-bit/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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_PIXEL_MODE_GRAY4</b></td><td>
-<p>A 4-bit/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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_PIXEL_MODE_LCD</b></td><td>
-<p>An 8-bit bitmap, used to represent 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 <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>.</p>
-</td></tr>
-<tr valign=top><td><b>FT_PIXEL_MODE_LCD_V</b></td><td>
-<p>An 8-bit bitmap, used to represent 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 <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_pixel_mode_xxx">ft_pixel_mode_xxx</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_none</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a>
-#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_mono</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>
-#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_grays</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>
-#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal2</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a>
-#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal4</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of deprecated constants. Use the corresponding <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a> values instead.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ft_pixel_mode_none</b></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_pixel_mode_mono</b></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_pixel_mode_grays</b></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_pixel_mode_pal2</b></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_pixel_mode_pal4</b></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Palette_Mode">FT_Palette_Mode</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Palette_Mode_
- {
- <a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgb</a> = 0,
- <a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgba</a>,
-
- ft_palette_mode_max /* do not remove */
-
- } <b>FT_Palette_Mode</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>THIS TYPE IS DEPRECATED. DO NOT USE IT!</p>
-<p>An enumeration type to describe the format of a bitmap palette, used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ft_palette_mode_rgb</b></td><td>
-<p>The palette is an array of 3-byte RGB records.</p>
-</td></tr>
-<tr valign=top><td><b>ft_palette_mode_rgba</b></td><td>
-<p>The palette is an array of 4-byte RGBA records.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by FreeType, these types are not handled by the library itself.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bitmap">FT_Bitmap</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Bitmap_
- {
- <span class="keyword">int</span> rows;
- <span class="keyword">int</span> width;
- <span class="keyword">int</span> pitch;
- <span class="keyword">unsigned</span> <span class="keyword">char</span>* buffer;
- <span class="keyword">short</span> num_grays;
- <span class="keyword">char</span> pixel_mode;
- <span class="keyword">char</span> palette_mode;
- <span class="keyword">void</span>* palette;
-
- } <b>FT_Bitmap</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to describe a bitmap or pixmap to the raster. Note that we now manage pixmaps of various depths through the &lsquo;pixel_mode&rsquo; field.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>rows</b></td><td>
-<p>The number of bitmap rows.</p>
-</td></tr>
-<tr valign=top><td><b>width</b></td><td>
-<p>The number of pixels in bitmap row.</p>
-</td></tr>
-<tr valign=top><td><b>pitch</b></td><td>
-<p>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 &lsquo;down&rsquo; flow, and negative when it has an &lsquo;up&rsquo; flow. In all cases, the pitch is an offset to add to a bitmap pointer in order to go down one row.</p>
-</td></tr>
-<tr valign=top><td><b>buffer</b></td><td>
-<p>A typeless pointer to the bitmap buffer. This value should be aligned on 32-bit boundaries in most cases.</p>
-</td></tr>
-<tr valign=top><td><b>num_grays</b></td><td>
-<p>This field is only used with <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>; it gives the number of gray levels used in the bitmap.</p>
-</td></tr>
-<tr valign=top><td><b>pixel_mode</b></td><td>
-<p>The pixel mode, i.e., how pixel bits are stored. See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a> for possible values.</p>
-</td></tr>
-<tr valign=top><td><b>palette_mode</b></td><td>
-<p>This field is intended for paletted pixel modes; it indicates how the palette is stored. Not used currently.</p>
-</td></tr>
-<tr valign=top><td><b>palette</b></td><td>
-<p>A typeless pointer to the bitmap palette; this field is intended for paletted pixel modes. Not used currently.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>For now, the only pixel modes supported by FreeType are mono and grays. However, drivers might be added in the future to support more &lsquo;colorful&rsquo; options.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_IMAGE_TAG">FT_IMAGE_TAG</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#ifndef <b>FT_IMAGE_TAG</b>
-#define <b>FT_IMAGE_TAG</b>( value, _x1, _x2, _x3, _x4 ) \
- value = ( ( (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x1 &lt;&lt; 24 ) | \
- ( (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x2 &lt;&lt; 16 ) | \
- ( (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x3 &lt;&lt; 8 ) | \
- (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x4 )
-#endif /* <b>FT_IMAGE_TAG</b> */
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This macro converts four-letter tags to an unsigned long type.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Since many 16-bit compilers don't like 32-bit enumerations, you should redefine this macro in case of problems to something like this:</p>
-<pre class="colored">
- #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value
-</pre>
-<p>to get a simple enumeration without assigning special numbers.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_Format">FT_Glyph_Format</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Glyph_Format_
- {
- <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a>, 0, 0, 0, 0 ),
-
- <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>, 'c', 'o', 'm', 'p' ),
- <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>, 'b', 'i', 't', 's' ),
- <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>, 'o', 'u', 't', 'l' ),
- <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a>, 'p', 'l', 'o', 't' )
-
- } <b>FT_Glyph_Format</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_GLYPH_FORMAT_NONE</b></td><td>
-<p>The value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_GLYPH_FORMAT_COMPOSITE</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The glyph image is a composite of several other images. This format is <i>only</i> used with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a>, and is used to report compound glyphs (like accented characters).</p>
-</td></tr>
-<tr valign=top><td><b>FT_GLYPH_FORMAT_BITMAP</b></td><td>
-<p>The glyph image is a bitmap, and can be described as an <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a>. You generally need to access the &lsquo;bitmap&rsquo; field of the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure to read it.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_GLYPH_FORMAT_OUTLINE</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The glyph image is a vectorial outline made of line segments and Bézier arcs; it can be described as an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>; you generally want to access the &lsquo;outline&rsquo; field of the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure to read it.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_GLYPH_FORMAT_PLOTTER</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The glyph image is a vectorial path with no inside and outside contours. Some Type&nbsp;1 fonts, like those in the Hershey family, contain glyphs in this format. These are described as <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>, but FreeType isn't currently capable of rendering them correctly.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_glyph_format_xxx">ft_glyph_format_xxx</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_none</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a>
-#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_composite</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>
-#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_bitmap</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>
-#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_outline</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>
-#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_plotter</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of deprecated constants. Use the corresponding <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> values instead.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ft_glyph_format_none</b></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_glyph_format_composite</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_glyph_format_bitmap</b></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_glyph_format_outline</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_glyph_format_plotter</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Data">FT_Data</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Data_
- {
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* pointer;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> length;
-
- } <b>FT_Data</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Read-only binary data represented as a pointer and a length.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>pointer</b></td><td>
-<p>The data.</p>
-</td></tr>
-<tr valign=top><td><b>length</b></td><td>
-<p>The length of the data in bytes.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Generic_Finalizer">FT_Generic_Finalizer</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span> (*<b>FT_Generic_Finalizer</b>)(<span class="keyword">void</span>* object);
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Describe a function used to destroy the &lsquo;client&rsquo; data of any FreeType object. See the description of the <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> type for details of usage.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p>The address of the FreeType object which is under finalization. Its client data is accessed through its &lsquo;generic&rsquo; field.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Generic">FT_Generic</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Generic_
- {
- <span class="keyword">void</span>* data;
- <a href="ft2-basic_types.html#FT_Generic_Finalizer">FT_Generic_Finalizer</a> finalizer;
-
- } <b>FT_Generic</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-<p>Most FreeType object contains a &lsquo;generic&rsquo; field, of type FT_Generic, which usage is left to client applications and font servers.</p>
-<p>It can be used to store a pointer to client-specific data, as well as the address of a &lsquo;finalizer&rsquo; 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 &lsquo;finalizer&rsquo; field).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>data</b></td><td>
-<p>A typeless pointer to any client-specified data. This field is completely ignored by the FreeType library.</p>
-</td></tr>
-<tr valign=top><td><b>finalizer</b></td><td>
-<p>A pointer to a &lsquo;generic finalizer&rsquo; function, which will be called when the object is destroyed. If this field is set to NULL, no code will be called.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MAKE_TAG">FT_MAKE_TAG</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_MAKE_TAG</b>( _x1, _x2, _x3, _x4 ) \
- ( ( (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x1 &lt;&lt; 24 ) | \
- ( (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x2 &lt;&lt; 16 ) | \
- ( (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x3 &lt;&lt; 8 ) | \
- (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x4 )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This macro converts four-letter tags which are used to label TrueType tables into an unsigned long to be used within FreeType.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The produced values <b>must</b> be 32-bit integers. Don't redefine this macro.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-bdf_fonts.html b/Build/source/libs/freetype2/docs/reference/ft2-bdf_fonts.html
deleted file mode 100644
index 8c0a4f9ea54..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-bdf_fonts.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-BDF and PCF Files
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_PropertyType">FT_PropertyType</a></td><td></td><td><a href="#BDF_PropertyRec">BDF_PropertyRec</a></td><td></td><td><a href="#FT_Get_BDF_Property">FT_Get_BDF_Property</a></td></tr>
-<tr><td></td><td><a href="#BDF_Property">BDF_Property</a></td><td></td><td><a href="#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of functions specific to BDF and PCF fonts.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_PropertyType">FT_PropertyType</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BDF_H (freetype/ftbdf.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> BDF_PropertyType_
- {
- <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_NONE</a> = 0,
- <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_ATOM</a> = 1,
- <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a> = 2,
- <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a> = 3
-
- } BDF_PropertyType;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of BDF property types.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>BDF_PROPERTY_TYPE_NONE</b></td><td>
-<p>Value&nbsp;0 is used to indicate a missing property.</p>
-</td></tr>
-<tr valign=top><td><b>BDF_PROPERTY_TYPE_ATOM</b></td><td>
-<p>Property is a string atom.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>BDF_PROPERTY_TYPE_INTEGER</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Property is a 32-bit signed integer.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>BDF_PROPERTY_TYPE_CARDINAL</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Property is a 32-bit unsigned integer.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="BDF_Property">BDF_Property</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BDF_H (freetype/ftbdf.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_* <b>BDF_Property</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a <a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a> structure to model a given BDF/PCF property.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="BDF_PropertyRec">BDF_PropertyRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BDF_H (freetype/ftbdf.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_
- {
- BDF_PropertyType type;
- <span class="keyword">union</span> {
- <span class="keyword">const</span> <span class="keyword">char</span>* atom;
- <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> integer;
- <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a> cardinal;
-
- } u;
-
- } <b>BDF_PropertyRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This structure models a given BDF/PCF property.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>type</b></td><td>
-<p>The property type.</p>
-</td></tr>
-<tr valign=top><td><b>u.atom</b></td><td>
-<p>The atom string, if type is <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_ATOM</a>.</p>
-</td></tr>
-<tr valign=top><td><b>u.integer</b></td><td>
-<p>A signed integer, if type is <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a>.</p>
-</td></tr>
-<tr valign=top><td><b>u.cardinal</b></td><td>
-<p>An unsigned integer, if type is <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BDF_H (freetype/ftbdf.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_BDF_Charset_ID</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <span class="keyword">const</span> <span class="keyword">char</span>* *acharset_encoding,
- <span class="keyword">const</span> <span class="keyword">char</span>* *acharset_registry );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve a BDF font character set identity, according to the BDF specification.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>acharset_encoding</b></td><td>
-<p>Charset encoding, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-<tr valign=top><td><b>acharset_registry</b></td><td>
-<p>Charset registry, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function only works with BDF faces, returning an error otherwise.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_BDF_Property">FT_Get_BDF_Property</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BDF_H (freetype/ftbdf.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_BDF_Property</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <span class="keyword">const</span> <span class="keyword">char</span>* prop_name,
- <a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a> *aproperty );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve a BDF property from a BDF or PCF font file.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>name</b></td><td>
-<p>The property name.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aproperty</b></td><td>
-<p>The property.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function works with BDF <i>and</i> PCF fonts. It returns an error otherwise. It also returns an error if the property is not in the font.</p>
-<p>In case of error, &lsquo;aproperty-&gt;type&rsquo; is always set to <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_NONE</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-bitmap_handling.html b/Build/source/libs/freetype2/docs/reference/ft2-bitmap_handling.html
deleted file mode 100644
index 1258df40d20..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-bitmap_handling.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Bitmap Handling
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Bitmap_New">FT_Bitmap_New</a></td><td></td><td><a href="#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td></td><td><a href="#FT_Bitmap_Done">FT_Bitmap_Done</a></td></tr>
-<tr><td></td><td><a href="#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td></td><td><a href="#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains functions for converting FT_Bitmap objects.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bitmap_New">FT_Bitmap_New</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BITMAP_H (freetype/ftbitmap.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Bitmap_New</b>( <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Initialize a pointer to an <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> structure.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>abitmap</b></td><td>
-<p>A pointer to the bitmap structure.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bitmap_Copy">FT_Bitmap_Copy</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BITMAP_H (freetype/ftbitmap.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Bitmap_Copy</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *source,
- <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *target);
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Copy a bitmap into another one.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a library object.</p>
-</td></tr>
-<tr valign=top><td><b>source</b></td><td>
-<p>A handle to the source bitmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>target</b></td><td>
-<p>A handle to the target bitmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BITMAP_H (freetype/ftbitmap.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Bitmap_Embolden</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a>* bitmap,
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xStrength,
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> yStrength );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Embolden a bitmap. The new bitmap will be about &lsquo;xStrength&rsquo; pixels wider and &lsquo;yStrength&rsquo; pixels higher. The left and bottom borders are kept unchanged.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a library object.</p>
-</td></tr>
-<tr valign=top><td><b>xStrength</b></td><td>
-<p>How strong the glyph is emboldened horizontally. Expressed in 26.6 pixel format.</p>
-</td></tr>
-<tr valign=top><td><b>yStrength</b></td><td>
-<p>How strong the glyph is emboldened vertically. Expressed in 26.6 pixel format.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>bitmap</b></td><td>
-<p>A handle to the target bitmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The current implementation restricts &lsquo;xStrength&rsquo; to be less than or equal to&nbsp;8 if bitmap is of pixel_mode <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>.</p>
-<p>If you want to embolden the bitmap owned by a <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a>, you should call &lsquo;FT_GlyphSlot_Own_Bitmap&rsquo; on the slot first.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bitmap_Convert">FT_Bitmap_Convert</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BITMAP_H (freetype/ftbitmap.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Bitmap_Convert</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *source,
- <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *target,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> alignment );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a bitmap object with depth 8bpp, making the number of used bytes per line (a.k.a. the &lsquo;pitch&rsquo;) a multiple of &lsquo;alignment&rsquo;.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a library object.</p>
-</td></tr>
-<tr valign=top><td><b>source</b></td><td>
-<p>The source bitmap.</p>
-</td></tr>
-<tr valign=top><td><b>alignment</b></td><td>
-<p>The pitch of the bitmap is a multiple of this parameter. Common values are 1, 2, or 4.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>target</b></td><td>
-<p>The target bitmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>It is possible to call <a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a> multiple times without calling <a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a> (the memory is simply reallocated).</p>
-<p>Use <a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a> to finally remove the bitmap object.</p>
-<p>The &lsquo;library&rsquo; argument is taken to have access to FreeType's memory handling functions.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Bitmap_Done">FT_Bitmap_Done</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BITMAP_H (freetype/ftbitmap.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Bitmap_Done</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *bitmap );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Destroy a bitmap object created with <a href="ft2-bitmap_handling.html#FT_Bitmap_New">FT_Bitmap_New</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a library object.</p>
-</td></tr>
-<tr valign=top><td><b>bitmap</b></td><td>
-<p>The bitmap object to be freed.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The &lsquo;library&rsquo; argument is taken to have access to FreeType's memory handling functions.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-cache_subsystem.html b/Build/source/libs/freetype2/docs/reference/ft2-cache_subsystem.html
deleted file mode 100644
index bcd595e2c5d..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-cache_subsystem.html
+++ /dev/null
@@ -1,1169 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Cache Sub-System
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FTC_Manager">FTC_Manager</a></td><td></td><td><a href="#FTC_CMapCache_New">FTC_CMapCache_New</a></td></tr>
-<tr><td></td><td><a href="#FTC_FaceID">FTC_FaceID</a></td><td></td><td><a href="#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></td></tr>
-<tr><td></td><td><a href="#FTC_Face_Requester">FTC_Face_Requester</a></td><td></td><td><a href="#FTC_ImageTypeRec">FTC_ImageTypeRec</a></td></tr>
-<tr><td></td><td><a href="#FTC_Node">FTC_Node</a></td><td></td><td><a href="#FTC_ImageType">FTC_ImageType</a></td></tr>
-<tr><td></td><td><a href="#FTC_Manager_New">FTC_Manager_New</a></td><td></td><td><a href="#FTC_ImageCache">FTC_ImageCache</a></td></tr>
-<tr><td></td><td><a href="#FTC_Manager_Reset">FTC_Manager_Reset</a></td><td></td><td><a href="#FTC_ImageCache_New">FTC_ImageCache_New</a></td></tr>
-<tr><td></td><td><a href="#FTC_Manager_Done">FTC_Manager_Done</a></td><td></td><td><a href="#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></td></tr>
-<tr><td></td><td><a href="#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></td><td></td><td><a href="#FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></td></tr>
-<tr><td></td><td><a href="#FTC_ScalerRec">FTC_ScalerRec</a></td><td></td><td><a href="#FTC_SBit">FTC_SBit</a></td></tr>
-<tr><td></td><td><a href="#FTC_Scaler">FTC_Scaler</a></td><td></td><td><a href="#FTC_SBitRec">FTC_SBitRec</a></td></tr>
-<tr><td></td><td><a href="#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></td><td></td><td><a href="#FTC_SBitCache">FTC_SBitCache</a></td></tr>
-<tr><td></td><td><a href="#FTC_Node_Unref">FTC_Node_Unref</a></td><td></td><td><a href="#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
-<tr><td></td><td><a href="#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></td><td></td><td><a href="#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
-<tr><td></td><td><a href="#FTC_CMapCache">FTC_CMapCache</a></td><td></td><td><a href="#FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section describes the FreeType&nbsp;2 cache sub-system, which is used to limit the number of concurrently opened <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects, as well as caching information like character maps and glyph images while limiting their maximum memory usage.</p>
-<p>Note that all types and functions begin with the &lsquo;FTC_&rsquo; prefix.</p>
-<p>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:</p>
-<p>First, available or installed font faces are uniquely identified by <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> 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.</p>
-<p>Second, the cache calls, only when needed, a client-provided function to convert a <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> into a new <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object. The latter is then completely managed by the cache, including its termination through <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
-<p>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 <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>. However, more complex schemes are also possible.</p>
-<p>Note that for the cache to work correctly, the face ID values must be <b>persistent</b>, which means that the contents they point to should not change at runtime, or that their value should not become invalid.</p>
-<p>If this is unavoidable (e.g., when a font is uninstalled at runtime), you should call <a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a> as soon as possible, to let the cache get rid of any references to the old <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> it may keep internally. Failure to do so will lead to incorrect behaviour or even crashes.</p>
-<p>To use the cache, start with calling <a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a> to create a new <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> object, which models a single cache instance. You can then look up <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects with <a href="ft2-cache_subsystem.html#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a> and <a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a>, respectively.</p>
-<p>If you want to use the charmap caching, call <a href="ft2-cache_subsystem.html#FTC_CMapCache_New">FTC_CMapCache_New</a>, then later use <a href="ft2-cache_subsystem.html#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a> to perform the equivalent of <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a>, only much faster.</p>
-<p>If you want to use the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> caching, call <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a>, then later use <a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a> to retrieve the corresponding <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> objects from the cache.</p>
-<p>If you need lots of small bitmaps, it is much more memory efficient to call <a href="ft2-cache_subsystem.html#FTC_SBitCache_New">FTC_SBitCache_New</a> followed by <a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a>. This returns <a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a> structures, which are used to store small bitmaps directly. (A small bitmap is one whose metrics and dimensions all fit into 8-bit integers).</p>
-<p>We hope to also provide a kerning cache in the near future.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Manager">FTC_Manager</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ManagerRec_* <b>FTC_Manager</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This object corresponds to one instance of the cache-subsystem. It is used to cache one or more <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects, along with corresponding <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects.</p>
-<p>The manager intentionally limits the total number of opened <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects to control memory usage. See the &lsquo;max_faces&rsquo; and &lsquo;max_sizes&rsquo; parameters of <a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a>.</p>
-<p>The manager is also used to cache &lsquo;nodes&rsquo; of various types while limiting their total memory usage.</p>
-<p>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.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_FaceID">FTC_FaceID</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> <b>FTC_FaceID</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An opaque pointer type that is used to identity face objects. The contents of such objects is application-dependent.</p>
-<p>These pointers are typically used to point to a user-defined structure containing a font file path, and face index.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Never use NULL as a valid <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a>.</p>
-<p>Face IDs are passed by the client to the cache manager, which calls, when needed, the <a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a> to translate them into new <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects.</p>
-<p>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 <a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a> before any other cache function.</p>
-<p>Failure to do so will result in incorrect behaviour or even memory leaks and crashes.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Face_Requester">FTC_Face_Requester</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
- (*<b>FTC_Face_Requester</b>)( <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id,
- <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> request_data,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a>* aface );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A callback function provided by client applications. It is used by the cache manager to translate a given <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> into a new valid <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object, on demand.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face_id</b></td><td>
-<p>The face ID to resolve.</p>
-</td></tr>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a FreeType library object.</p>
-</td></tr>
-<tr valign=top><td><b>req_data</b></td><td>
-<p>Application-provided request data (see note below).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A new <a href="ft2-base_interface.html#FT_Face">FT_Face</a> handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The third parameter &lsquo;req_data&rsquo; is the same as the one passed by the client when <a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a> is called.</p>
-<p>The face requester should not perform funny things on the returned face object, like creating a new <a href="ft2-base_interface.html#FT_Size">FT_Size</a> for it, or setting a transformation through <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a>!</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Node">FTC_Node</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_NodeRec_* <b>FTC_Node</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An opaque handle to a cache node object. Each cache node is reference-counted. A node with a count of&nbsp;0 might be flushed out of a full cache whenever a lookup request is performed.</p>
-<p>If you lookup nodes, you have the ability to &lsquo;acquire&rsquo; them, i.e., to increment their reference count. This will prevent the node from being flushed out of the cache until you explicitly &lsquo;release&rsquo; it (see <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a>).</p>
-<p>See also <a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a> and <a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Manager_New">FTC_Manager_New</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_Manager_New</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> max_faces,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> max_sizes,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> max_bytes,
- <a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a> requester,
- <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> req_data,
- <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> *amanager );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new cache manager.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>The parent FreeType library handle to use.</p>
-</td></tr>
-<tr valign=top><td><b>max_faces</b></td><td>
-<p>Maximum number of opened <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects managed by this cache instance. Use&nbsp;0 for defaults.</p>
-</td></tr>
-<tr valign=top><td><b>max_sizes</b></td><td>
-<p>Maximum number of opened <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects managed by this cache instance. Use&nbsp;0 for defaults.</p>
-</td></tr>
-<tr valign=top><td><b>max_bytes</b></td><td>
-<p>Maximum number of bytes to use for cached data nodes. Use&nbsp;0 for defaults. Note that this value does not account for managed <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects.</p>
-</td></tr>
-<tr valign=top><td><b>requester</b></td><td>
-<p>An application-provided callback used to translate face IDs into real <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects.</p>
-</td></tr>
-<tr valign=top><td><b>req_data</b></td><td>
-<p>A generic pointer that is passed to the requester each time it is called (see <a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a>).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>amanager</b></td><td>
-<p>A handle to a new manager object. 0&nbsp;in case of failure.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Manager_Reset">FTC_Manager_Reset</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FTC_Manager_Reset</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Empty a given cache manager. This simply gets rid of all the currently cached <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects within the manager.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>A handle to the manager.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Manager_Done">FTC_Manager_Done</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FTC_Manager_Done</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Destroy a given manager after emptying it.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>A handle to the target cache manager object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_Manager_LookupFace</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
- <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object that corresponds to a given face ID through a cache manager.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>A handle to the cache manager.</p>
-</td></tr>
-<tr valign=top><td><b>face_id</b></td><td>
-<p>The ID of the face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A handle to the face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The returned <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object is always owned by the manager. You should never try to discard it yourself.</p>
-<p>The <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object doesn't necessarily have a current size object (i.e., face-&gt;size can be 0). If you need a specific &lsquo;font size&rsquo;, use <a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a> instead.</p>
-<p>Never change the face's transformation matrix (i.e., never call the <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a> function) on a returned face! If you need to transform glyphs, do it yourself after glyph loading.</p>
-<p>When you perform a lookup, out-of-memory errors are detected <i>within</i> the lookup and force incremental flushes of the cache until enough memory is released for the lookup to succeed.</p>
-<p>If a lookup fails with &lsquo;FT_Err_Out_Of_Memory&rsquo; the cache has already been completely flushed, and still no memory was available for the operation.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_ScalerRec">FTC_ScalerRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ScalerRec_
- {
- <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> width;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> height;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> pixel;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> x_res;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> y_res;
-
- } <b>FTC_ScalerRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to describe a given character size in either pixels or points to the cache manager. See <a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face_id</b></td><td>
-<p>The source face ID.</p>
-</td></tr>
-<tr valign=top><td><b>width</b></td><td>
-<p>The character width.</p>
-</td></tr>
-<tr valign=top><td><b>height</b></td><td>
-<p>The character height.</p>
-</td></tr>
-<tr valign=top><td><b>pixel</b></td><td>
-<p>A Boolean. If 1, the &lsquo;width&rsquo; and &lsquo;height&rsquo; fields are interpreted as integer pixel character sizes. Otherwise, they are expressed as 1/64th of points.</p>
-</td></tr>
-<tr valign=top><td><b>x_res</b></td><td>
-<p>Only used when &lsquo;pixel&rsquo; is value&nbsp;0 to indicate the horizontal resolution in dpi.</p>
-</td></tr>
-<tr valign=top><td><b>y_res</b></td><td>
-<p>Only used when &lsquo;pixel&rsquo; is value&nbsp;0 to indicate the vertical resolution in dpi.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This type is mainly used to retrieve <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects through the cache manager.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Scaler">FTC_Scaler</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ScalerRec_* <b>FTC_Scaler</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_Manager_LookupSize</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
- <a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a> scaler,
- <a href="ft2-base_interface.html#FT_Size">FT_Size</a> *asize );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object that corresponds to a given <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> pointer through a cache manager.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>A handle to the cache manager.</p>
-</td></tr>
-<tr valign=top><td><b>scaler</b></td><td>
-<p>A scaler handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>asize</b></td><td>
-<p>A handle to the size object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The returned <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object is always owned by the manager. You should never try to discard it by yourself.</p>
-<p>You can access the parent <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object simply as &lsquo;size-&gt;face&rsquo; if you need it. Note that this object is also owned by the manager.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>When you perform a lookup, out-of-memory errors are detected <i>within</i> the lookup and force incremental flushes of the cache until enough memory is released for the lookup to succeed.</p>
-<p>If a lookup fails with &lsquo;FT_Err_Out_Of_Memory&rsquo; the cache has already been completely flushed, and still no memory is available for the operation.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Node_Unref">FTC_Node_Unref</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FTC_Node_Unref</b>( <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> node,
- <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Decrement a cache node's internal reference count. When the count reaches 0, it is not destroyed but becomes eligible for subsequent cache flushes.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>node</b></td><td>
-<p>The cache node handle.</p>
-</td></tr>
-<tr valign=top><td><b>manager</b></td><td>
-<p>The cache manager handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FTC_Manager_RemoveFaceID</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
- <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A special function used to indicate to the cache manager that a given <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> is no longer valid, either because its content changed, or because it was deallocated or uninstalled.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>The cache manager handle.</p>
-</td></tr>
-<tr valign=top><td><b>face_id</b></td><td>
-<p>The <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> to be removed.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function flushes all nodes from the cache corresponding to this &lsquo;face_id&rsquo;, with the exception of nodes with a non-null reference count.</p>
-<p>Such nodes are however modified internally so as to never appear in later lookups with the same &lsquo;face_id&rsquo; value, and to be immediately destroyed when released by all their users.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_CMapCache">FTC_CMapCache</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_CMapCacheRec_* <b>FTC_CMapCache</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An opaque handle used to model a charmap cache. This cache is to hold character codes -&gt; glyph indices mappings.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_CMapCache_New">FTC_CMapCache_New</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_CMapCache_New</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
- <a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a> *acache );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new charmap cache.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>A handle to the cache manager.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>acache</b></td><td>
-<p>A new cache handle. NULL in case of error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Like all other caches, this one will be destroyed with the cache manager.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
- <b>FTC_CMapCache_Lookup</b>( <a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a> cache,
- <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> cmap_index,
- <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a> char_code );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Translate a character code into a glyph index, using the charmap cache.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>cache</b></td><td>
-<p>A charmap cache handle.</p>
-</td></tr>
-<tr valign=top><td><b>face_id</b></td><td>
-<p>The source face ID.</p>
-</td></tr>
-<tr valign=top><td><b>cmap_index</b></td><td>
-<p>The index of the charmap in the source face.</p>
-</td></tr>
-<tr valign=top><td><b>char_code</b></td><td>
-<p>The character code (in the corresponding charmap).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Glyph index. 0&nbsp;means &lsquo;no glyph&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_ImageTypeRec">FTC_ImageTypeRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageTypeRec_
- {
- <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> width;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> height;
- <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> flags;
-
- } <b>FTC_ImageTypeRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model the type of images in a glyph cache.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face_id</b></td><td>
-<p>The face ID.</p>
-</td></tr>
-<tr valign=top><td><b>width</b></td><td>
-<p>The width in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>height</b></td><td>
-<p>The height in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>flags</b></td><td>
-<p>The load flags, as in <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_ImageType">FTC_ImageType</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageTypeRec_* <b>FTC_ImageType</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an <a href="ft2-cache_subsystem.html#FTC_ImageTypeRec">FTC_ImageTypeRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_ImageCache">FTC_ImageCache</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageCacheRec_* <b>FTC_ImageCache</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_ImageCache_New">FTC_ImageCache_New</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_ImageCache_New</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
- <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a> *acache );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new glyph image cache.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>The parent manager for the image cache.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>acache</b></td><td>
-<p>A handle to the new glyph image cache object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_ImageCache_Lookup</b>( <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a> cache,
- <a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a> type,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
- <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *aglyph,
- <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve a given glyph image from a glyph image cache.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>cache</b></td><td>
-<p>A handle to the source glyph image cache.</p>
-</td></tr>
-<tr valign=top><td><b>type</b></td><td>
-<p>A pointer to a glyph image type descriptor.</p>
-</td></tr>
-<tr valign=top><td><b>gindex</b></td><td>
-<p>The glyph index to retrieve.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aglyph</b></td><td>
-<p>The corresponding <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> object. 0&nbsp;in case of failure.</p>
-</td></tr>
-<tr valign=top><td><b>anode</b></td><td>
-<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 <a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a> and modify the new one.</p>
-<p>If &lsquo;anode&rsquo; is <i>not</i> 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 <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>) will always be kept in the cache until you call <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
-<p>If &lsquo;anode&rsquo; is NULL, the cache node is left unchanged, which means that the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> 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!</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_ImageCache_LookupScaler</b>( <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a> cache,
- <a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a> scaler,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> load_flags,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
- <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *aglyph,
- <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A variant of <a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a> that uses an <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> to specify the face ID and its size.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>cache</b></td><td>
-<p>A handle to the source glyph image cache.</p>
-</td></tr>
-<tr valign=top><td><b>scaler</b></td><td>
-<p>A pointer to a scaler descriptor.</p>
-</td></tr>
-<tr valign=top><td><b>load_flags</b></td><td>
-<p>The corresponding load flags.</p>
-</td></tr>
-<tr valign=top><td><b>gindex</b></td><td>
-<p>The glyph index to retrieve.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aglyph</b></td><td>
-<p>The corresponding <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> object. 0&nbsp;in case of failure.</p>
-</td></tr>
-<tr valign=top><td><b>anode</b></td><td>
-<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 <a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a> and modify the new one.</p>
-<p>If &lsquo;anode&rsquo; is <i>not</i> 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 <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>) will always be kept in the cache until you call <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
-<p>If &lsquo;anode&rsquo; is NULL, the cache node is left unchanged, which means that the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> 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!</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_SBit">FTC_SBit</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitRec_* <b>FTC_SBit</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a small bitmap descriptor. See the <a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a> structure for details.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_SBitRec">FTC_SBitRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitRec_
- {
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> width;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> height;
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> left;
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> top;
-
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> format;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> max_grays;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> pitch;
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> xadvance;
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> yadvance;
-
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* buffer;
-
- } <b>FTC_SBitRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A very compact structure used to describe a small glyph bitmap.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>width</b></td><td>
-<p>The bitmap width in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>height</b></td><td>
-<p>The bitmap height in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>left</b></td><td>
-<p>The horizontal distance from the pen position to the left bitmap border (a.k.a. &lsquo;left side bearing&rsquo;, or &lsquo;lsb&rsquo;).</p>
-</td></tr>
-<tr valign=top><td><b>top</b></td><td>
-<p>The vertical distance from the pen position (on the baseline) to the upper bitmap border (a.k.a. &lsquo;top side bearing&rsquo;). The distance is positive for upwards y&nbsp;coordinates.</p>
-</td></tr>
-<tr valign=top><td><b>format</b></td><td>
-<p>The format of the glyph bitmap (monochrome or gray).</p>
-</td></tr>
-<tr valign=top><td><b>max_grays</b></td><td>
-<p>Maximum gray level value (in the range 1 to&nbsp;255).</p>
-</td></tr>
-<tr valign=top><td><b>pitch</b></td><td>
-<p>The number of bytes per bitmap line. May be positive or negative.</p>
-</td></tr>
-<tr valign=top><td><b>xadvance</b></td><td>
-<p>The horizontal advance width in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>yadvance</b></td><td>
-<p>The vertical advance height in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>buffer</b></td><td>
-<p>A pointer to the bitmap pixels.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_SBitCache">FTC_SBitCache</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitCacheRec_* <b>FTC_SBitCache</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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 <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_SBitCache_New">FTC_SBitCache_New</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_SBitCache_New</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
- <a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a> *acache );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new cache to store small glyph bitmaps.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>manager</b></td><td>
-<p>A handle to the source cache manager.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>acache</b></td><td>
-<p>A handle to the new sbit cache. NULL in case of error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_SBitCache_Lookup</b>( <a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a> cache,
- <a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a> type,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
- <a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a> *sbit,
- <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Look up a given small glyph bitmap in a given sbit cache and &lsquo;lock&rsquo; it to prevent its flushing from the cache until needed.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>cache</b></td><td>
-<p>A handle to the source sbit cache.</p>
-</td></tr>
-<tr valign=top><td><b>type</b></td><td>
-<p>A pointer to the glyph image type descriptor.</p>
-</td></tr>
-<tr valign=top><td><b>gindex</b></td><td>
-<p>The glyph index.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>sbit</b></td><td>
-<p>A handle to a small bitmap descriptor.</p>
-</td></tr>
-<tr valign=top><td><b>anode</b></td><td>
-<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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.</p>
-<p>The descriptor's &lsquo;buffer&rsquo; field is set to&nbsp;0 to indicate a missing glyph bitmap.</p>
-<p>If &lsquo;anode&rsquo; is <i>not</i> 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 <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
-<p>If &lsquo;anode&rsquo; 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!</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CACHE_H (freetype/ftcache.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FTC_SBitCache_LookupScaler</b>( <a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a> cache,
- <a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a> scaler,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> load_flags,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
- <a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a> *sbit,
- <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A variant of <a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a> that uses an <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> to specify the face ID and its size.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>cache</b></td><td>
-<p>A handle to the source sbit cache.</p>
-</td></tr>
-<tr valign=top><td><b>scaler</b></td><td>
-<p>A pointer to the scaler descriptor.</p>
-</td></tr>
-<tr valign=top><td><b>load_flags</b></td><td>
-<p>The corresponding load flags.</p>
-</td></tr>
-<tr valign=top><td><b>gindex</b></td><td>
-<p>The glyph index.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>sbit</b></td><td>
-<p>A handle to a small bitmap descriptor.</p>
-</td></tr>
-<tr valign=top><td><b>anode</b></td><td>
-<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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.</p>
-<p>The descriptor's &lsquo;buffer&rsquo; field is set to&nbsp;0 to indicate a missing glyph bitmap.</p>
-<p>If &lsquo;anode&rsquo; is <i>not</i> 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 <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
-<p>If &lsquo;anode&rsquo; 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!</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-cid_fonts.html b/Build/source/libs/freetype2/docs/reference/ft2-cid_fonts.html
deleted file mode 100644
index 392e66aa936..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-cid_fonts.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-CID Fonts
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of CID-keyed font specific functions.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_CID_H (freetype/ftcid.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_CID_Registry_Ordering_Supplement</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <span class="keyword">const</span> <span class="keyword">char</span>* *registry,
- <span class="keyword">const</span> <span class="keyword">char</span>* *ordering,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *supplement);
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the Registry/Ordering/Supplement triple (also known as the "R/O/S") from a CID-keyed font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>registry</b></td><td>
-<p>The registry, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-<tr valign=top><td><b>ordering</b></td><td>
-<p>The ordering, as a C&nbsp;string, owned by the face.</p>
-</td></tr>
-<tr valign=top><td><b>supplement</b></td><td>
-<p>The supplement.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function only works with CID faces, returning an error otherwise.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.6</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-computations.html b/Build/source/libs/freetype2/docs/reference/ft2-computations.html
deleted file mode 100644
index 62e3c1d6cf5..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-computations.html
+++ /dev/null
@@ -1,832 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Computations
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_MulDiv">FT_MulDiv</a></td><td></td><td><a href="#FT_Matrix_Invert">FT_Matrix_Invert</a></td><td></td><td><a href="#FT_Tan">FT_Tan</a></td></tr>
-<tr><td></td><td><a href="#FT_MulFix">FT_MulFix</a></td><td></td><td><a href="#FT_Angle">FT_Angle</a></td><td></td><td><a href="#FT_Atan2">FT_Atan2</a></td></tr>
-<tr><td></td><td><a href="#FT_DivFix">FT_DivFix</a></td><td></td><td><a href="#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td></td><td><a href="#FT_Angle_Diff">FT_Angle_Diff</a></td></tr>
-<tr><td></td><td><a href="#FT_RoundFix">FT_RoundFix</a></td><td></td><td><a href="#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td></td><td><a href="#FT_Vector_Unit">FT_Vector_Unit</a></td></tr>
-<tr><td></td><td><a href="#FT_CeilFix">FT_CeilFix</a></td><td></td><td><a href="#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td></td><td><a href="#FT_Vector_Rotate">FT_Vector_Rotate</a></td></tr>
-<tr><td></td><td><a href="#FT_FloorFix">FT_FloorFix</a></td><td></td><td><a href="#FT_ANGLE_PI4">FT_ANGLE_PI4</a></td><td></td><td><a href="#FT_Vector_Length">FT_Vector_Length</a></td></tr>
-<tr><td></td><td><a href="#FT_Vector_Transform">FT_Vector_Transform</a></td><td></td><td><a href="#FT_Sin">FT_Sin</a></td><td></td><td><a href="#FT_Vector_Polarize">FT_Vector_Polarize</a></td></tr>
-<tr><td></td><td><a href="#FT_Matrix_Multiply">FT_Matrix_Multiply</a></td><td></td><td><a href="#FT_Cos">FT_Cos</a></td><td></td><td><a href="#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains various functions used to perform computations on 16.16 fixed-float numbers or 2d vectors.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MulDiv">FT_MulDiv</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
- <b>FT_MulDiv</b>( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> a,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> b,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> c );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A very simple function used to perform the computation &lsquo;(a*b)/c&rsquo; with maximal accuracy (it uses a 64-bit intermediate integer whenever necessary).</p>
-<p>This function isn't necessarily as fast as some processor specific operations, but is at least completely portable.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>a</b></td><td>
-<p>The first multiplier.</p>
-</td></tr>
-<tr valign=top><td><b>b</b></td><td>
-<p>The second multiplier.</p>
-</td></tr>
-<tr valign=top><td><b>c</b></td><td>
-<p>The divisor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The result of &lsquo;(a*b)/c&rsquo;. This function never traps when trying to divide by zero; it simply returns &lsquo;MaxInt&rsquo; or &lsquo;MinInt&rsquo; depending on the signs of &lsquo;a&rsquo; and &lsquo;b&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MulFix">FT_MulFix</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
- <b>FT_MulFix</b>( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> a,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> b );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A very simple function used to perform the computation &lsquo;(a*b)/0x10000&rsquo; with maximal accuracy. Most of the time this is used to multiply a given value by a 16.16 fixed float factor.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>a</b></td><td>
-<p>The first multiplier.</p>
-</td></tr>
-<tr valign=top><td><b>b</b></td><td>
-<p>The second multiplier. Use a 16.16 factor here whenever possible (see note below).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The result of &lsquo;(a*b)/0x10000&rsquo;.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function has been optimized for the case where the absolute value of &lsquo;a&rsquo; is less than 2048, and &lsquo;b&rsquo; 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.</p>
-<p>As a conclusion, always try to place a 16.16 factor as the <i>second</i> argument of this function; this can make a great difference.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_DivFix">FT_DivFix</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
- <b>FT_DivFix</b>( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> a,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> b );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A very simple function used to perform the computation &lsquo;(a*0x10000)/b&rsquo; with maximal accuracy. Most of the time, this is used to divide a given value by a 16.16 fixed float factor.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>a</b></td><td>
-<p>The first multiplier.</p>
-</td></tr>
-<tr valign=top><td><b>b</b></td><td>
-<p>The second multiplier. Use a 16.16 factor here whenever possible (see note below).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The result of &lsquo;(a*0x10000)/b&rsquo;.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The optimization for FT_DivFix() is simple: If (a&nbsp;&lt;&lt;&nbsp;16) fits in 32&nbsp;bits, then the division is computed directly. Otherwise, we use a specialized version of <a href="ft2-computations.html#FT_MulDiv">FT_MulDiv</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_RoundFix">FT_RoundFix</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
- <b>FT_RoundFix</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> a );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A very simple function used to round a 16.16 fixed number.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>a</b></td><td>
-<p>The number to be rounded.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The result of &lsquo;(a + 0x8000) &amp; -0x10000&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CeilFix">FT_CeilFix</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
- <b>FT_CeilFix</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> a );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A very simple function used to compute the ceiling function of a 16.16 fixed number.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>a</b></td><td>
-<p>The number for which the ceiling function is to be computed.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The result of &lsquo;(a + 0x10000 - 1) &amp; -0x10000&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_FloorFix">FT_FloorFix</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
- <b>FT_FloorFix</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> a );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A very simple function used to compute the floor function of a 16.16 fixed number.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>a</b></td><td>
-<p>The number for which the floor function is to be computed.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The result of &lsquo;a &amp; -0x10000&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Vector_Transform">FT_Vector_Transform</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Vector_Transform</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Transform a single vector through a 2x2 matrix.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>vector</b></td><td>
-<p>The target vector to transform.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>matrix</b></td><td>
-<p>A pointer to the source 2x2 matrix.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The result is undefined if either &lsquo;vector&rsquo; or &lsquo;matrix&rsquo; is invalid.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Matrix_Multiply">FT_Matrix_Multiply</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Matrix_Multiply</b>( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* a,
- <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* b );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Perform the matrix operation &lsquo;b = a*b&rsquo;.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>a</b></td><td>
-<p>A pointer to matrix &lsquo;a&rsquo;.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>b</b></td><td>
-<p>A pointer to matrix &lsquo;b&rsquo;.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The result is undefined if either &lsquo;a&rsquo; or &lsquo;b&rsquo; is zero.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Matrix_Invert">FT_Matrix_Invert</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Matrix_Invert</b>( <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Invert a 2x2 matrix. Return an error if it can't be inverted.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>matrix</b></td><td>
-<p>A pointer to the target matrix. Remains untouched in case of error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Angle">FT_Angle</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> <b>FT_Angle</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This type is used to model angle values in FreeType. Note that the angle is a 16.16 fixed float value expressed in degrees.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ANGLE_PI">FT_ANGLE_PI</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_ANGLE_PI</b> ( 180L &lt;&lt; 16 )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The angle pi expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ANGLE_2PI">FT_ANGLE_2PI</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_ANGLE_2PI</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> * 2 )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The angle 2*pi expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ANGLE_PI2">FT_ANGLE_PI2</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_ANGLE_PI2</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> / 2 )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The angle pi/2 expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ANGLE_PI4">FT_ANGLE_PI4</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_ANGLE_PI4</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> / 4 )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The angle pi/4 expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Sin">FT_Sin</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
- <b>FT_Sin</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the sinus of a given angle in fixed point format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>angle</b></td><td>
-<p>The input angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The sinus value.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If you need both the sinus and cosinus for a given angle, use the function <a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Cos">FT_Cos</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
- <b>FT_Cos</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the cosinus of a given angle in fixed point format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>angle</b></td><td>
-<p>The input angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The cosinus value.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If you need both the sinus and cosinus for a given angle, use the function <a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Tan">FT_Tan</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
- <b>FT_Tan</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the tangent of a given angle in fixed point format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>angle</b></td><td>
-<p>The input angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The tangent value.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Atan2">FT_Atan2</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> )
- <b>FT_Atan2</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> x,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> y );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the arc-tangent corresponding to a given vector (x,y) in the 2d plane.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>x</b></td><td>
-<p>The horizontal vector coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>y</b></td><td>
-<p>The vertical vector coordinate.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The arc-tangent value (i.e. angle).</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Angle_Diff">FT_Angle_Diff</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> )
- <b>FT_Angle_Diff</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle1,
- <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle2 );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the difference between two angles. The result is always constrained to the ]-PI..PI] interval.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>angle1</b></td><td>
-<p>First angle.</p>
-</td></tr>
-<tr valign=top><td><b>angle2</b></td><td>
-<p>Second angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Constrained value of &lsquo;value2-value1&rsquo;.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Vector_Unit">FT_Vector_Unit</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Vector_Unit</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
- <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the unit vector corresponding to a given angle. After the call, the value of &lsquo;vec.x&rsquo; will be &lsquo;sin(angle)&rsquo;, and the value of &lsquo;vec.y&rsquo; will be &lsquo;cos(angle)&rsquo;.</p>
-<p>This function is useful to retrieve both the sinus and cosinus of a given angle quickly.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>vec</b></td><td>
-<p>The address of target vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>angle</b></td><td>
-<p>The address of angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Vector_Rotate">FT_Vector_Rotate</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Vector_Rotate</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
- <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Rotate a vector by a given angle.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>vec</b></td><td>
-<p>The address of target vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>angle</b></td><td>
-<p>The address of angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Vector_Length">FT_Vector_Length</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
- <b>FT_Vector_Length</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the length of a given vector.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>vec</b></td><td>
-<p>The address of target vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The vector length, expressed in the same units that the original vector coordinates.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Vector_Polarize">FT_Vector_Polarize</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Vector_Polarize</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *length,
- <a href="ft2-computations.html#FT_Angle">FT_Angle</a> *angle );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Compute both the length and angle of a given vector.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>vec</b></td><td>
-<p>The address of source vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>length</b></td><td>
-<p>The vector length.</p>
-</td></tr>
-<tr valign=top><td><b>angle</b></td><td>
-<p>The vector angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Vector_From_Polar">FT_Vector_From_Polar</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Vector_From_Polar</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> length,
- <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Compute vector coordinates from a length and angle.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>vec</b></td><td>
-<p>The address of source vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>length</b></td><td>
-<p>The vector length.</p>
-</td></tr>
-<tr valign=top><td><b>angle</b></td><td>
-<p>The vector angle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-font_formats.html b/Build/source/libs/freetype2/docs/reference/ft2-font_formats.html
deleted file mode 100644
index 150eb8f7fc4..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-font_formats.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Font Formats
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></td><td></td><td></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_XFREE86_H (freetype/ftxf86.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
- <b>FT_Get_X11_Font_Format</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a string describing the format of a given face, using values which can be used as an X11 FONT_PROPERTY. Possible values are &lsquo;TrueType&rsquo;, &lsquo;Type&nbsp;1&rsquo;, &lsquo;BDF&rsquo;, &lsquo;PCF&rsquo;, &lsquo;Type&nbsp;42&rsquo;, &lsquo;CID&nbsp;Type&nbsp;1&rsquo;, &lsquo;CFF&rsquo;, &lsquo;PFR&rsquo;, and &lsquo;Windows&nbsp;FNT&rsquo;.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>Input face handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Font format string. NULL in case of error.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-gasp_table.html b/Build/source/libs/freetype2/docs/reference/ft2-gasp_table.html
deleted file mode 100644
index 8229e0b5414..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-gasp_table.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Gasp Table
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_GASP_XXX">FT_GASP_XXX</a></td><td></td><td><a href="#FT_Get_Gasp">FT_Get_Gasp</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>The function <a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a> can be used to query a TrueType or OpenType font for specific entries in its &lsquo;gasp&rsquo; table, if any. This is mainly useful when implementing native TrueType hinting with the bytecode interpreter to duplicate the Windows text rendering results.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GASP_XXX">FT_GASP_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GASP_H (freetype/ftgasp.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a> -1
-#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRIDFIT</a> 0x01
-#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRAY</a> 0x02
-#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_SMOOTHING</a> 0x08
-#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_GRIDFIT</a> 0x10
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of values and/or bit-flags returned by the <a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a> function.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_GASP_NO_TABLE</b></td><td>
-<p>This special value means that there is no GASP table in this face. It is up to the client to decide what to do.</p>
-</td></tr>
-<tr valign=top><td><b>FT_GASP_DO_GRIDFIT</b></td><td>
-<p>Grid-fitting and hinting should be performed at the specified ppem. This <b>really</b> means TrueType bytecode interpretation.</p>
-</td></tr>
-<tr valign=top><td><b>FT_GASP_DO_GRAY</b></td><td>
-<p>Anti-aliased rendering should be performed at the specified ppem.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_GASP_SYMMETRIC_SMOOTHING</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Smoothing along multiple axes must be used with ClearType.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_GASP_SYMMETRIC_GRIDFIT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Grid-fitting must be used with ClearType's symmetric smoothing.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>&lsquo;ClearType&rsquo; is Microsoft's implementation of LCD rendering, partly protected by patents.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.0</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Gasp">FT_Get_Gasp</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GASP_H (freetype/ftgasp.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
- <b>FT_Get_Gasp</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> ppem );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Read the &lsquo;gasp&rsquo; table from a TrueType or OpenType font file and return the entry corresponding to a given character pixel size.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>The source face handle.</p>
-</td></tr>
-<tr valign=top><td><b>ppem</b></td><td>
-<p>The vertical character pixel size.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Bit flags (see <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_XXX</a>), or <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a> if there is no &lsquo;gasp&rsquo; table in the face.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.0</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-glyph_management.html b/Build/source/libs/freetype2/docs/reference/ft2-glyph_management.html
deleted file mode 100644
index 8890429a49f..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-glyph_management.html
+++ /dev/null
@@ -1,637 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Glyph Management
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Glyph">FT_Glyph</a></td><td></td><td><a href="#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td></td><td><a href="#ft_glyph_bbox_xxx">ft_glyph_bbox_xxx</a></td></tr>
-<tr><td></td><td><a href="#FT_GlyphRec">FT_GlyphRec</a></td><td></td><td><a href="#FT_Get_Glyph">FT_Get_Glyph</a></td><td></td><td><a href="#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td></tr>
-<tr><td></td><td><a href="#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td></td><td><a href="#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td></td><td><a href="#FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></td></tr>
-<tr><td></td><td><a href="#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></td><td></td><td><a href="#FT_Glyph_Transform">FT_Glyph_Transform</a></td><td></td><td><a href="#FT_Done_Glyph">FT_Done_Glyph</a></td></tr>
-<tr><td></td><td><a href="#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td></td><td><a href="#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph">FT_Glyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphRec_* <b>FT_Glyph</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Handle to an object used to model generic glyph images. It is a pointer to the <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a> structure and can contain a glyph bitmap or pointer.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Glyph objects are not owned by the library. You must thus release them manually (through <a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a>) <i>before</i> calling <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GlyphRec">FT_GlyphRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphRec_
- {
- <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library;
- <span class="keyword">const</span> FT_Glyph_Class* clazz;
- <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> format;
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> advance;
-
- } <b>FT_GlyphRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed float format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the FreeType library object.</p>
-</td></tr>
-<tr valign=top><td><b>clazz</b></td><td>
-<p>A pointer to the glyph's class. Private.</p>
-</td></tr>
-<tr valign=top><td><b>format</b></td><td>
-<p>The format of the glyph's image.</p>
-</td></tr>
-<tr valign=top><td><b>advance</b></td><td>
-<p>A 16.16 vector that gives the glyph's advance width.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_BitmapGlyph">FT_BitmapGlyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BitmapGlyphRec_* <b>FT_BitmapGlyph</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an object used to model a bitmap glyph image. This is a sub-class of <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>, and a pointer to <a href="ft2-glyph_management.html#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BitmapGlyphRec_
- {
- <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a> root;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> left;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> top;
- <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> bitmap;
-
- } <b>FT_BitmapGlyphRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used for bitmap glyph images. This really is a &lsquo;sub-class&rsquo; of <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>root</b></td><td>
-<p>The root <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> fields.</p>
-</td></tr>
-<tr valign=top><td><b>left</b></td><td>
-<p>The left-side bearing, i.e., the horizontal distance from the current pen position to the left border of the glyph bitmap.</p>
-</td></tr>
-<tr valign=top><td><b>top</b></td><td>
-<p>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&nbsp;y!</p>
-</td></tr>
-<tr valign=top><td><b>bitmap</b></td><td>
-<p>A descriptor for the bitmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You can typecast an <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> to <a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a> if you have &lsquo;glyph-&gt;format == FT_GLYPH_FORMAT_BITMAP&rsquo;. This lets you access the bitmap's contents easily.</p>
-<p>The corresponding pixel buffer is always owned by <a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a> and is thus created and destroyed with it.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OutlineGlyph">FT_OutlineGlyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_OutlineGlyphRec_* <b>FT_OutlineGlyph</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an object used to model an outline glyph image. This is a sub-class of <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>, and a pointer to <a href="ft2-glyph_management.html#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_OutlineGlyphRec_
- {
- <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a> root;
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> outline;
-
- } <b>FT_OutlineGlyphRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used for outline (vectorial) glyph images. This really is a &lsquo;sub-class&rsquo; of <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>root</b></td><td>
-<p>The root <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> fields.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A descriptor for the outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You can typecast a <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> to <a href="ft2-glyph_management.html#FT_OutlineGlyph">FT_OutlineGlyph</a> if you have &lsquo;glyph-&gt;format == FT_GLYPH_FORMAT_OUTLINE&rsquo;. This lets you access the outline's content easily.</p>
-<p>As the outline is extracted from a glyph slot, its coordinates are expressed normally in 26.6 pixels, unless the flag <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> was used in <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>() or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>().</p>
-<p>The outline's tables are always owned by the object and are destroyed with it.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Glyph">FT_Get_Glyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Glyph</b>( <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> slot,
- <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *aglyph );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to extract a glyph image from a slot.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>slot</b></td><td>
-<p>A handle to the source glyph slot.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aglyph</b></td><td>
-<p>A handle to the glyph object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_Copy">FT_Glyph_Copy</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Glyph_Copy</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> source,
- <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *target );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to copy a glyph image. Note that the created <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> object must be released with <a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>source</b></td><td>
-<p>A handle to the source glyph object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>target</b></td><td>
-<p>A handle to the target glyph object. 0&nbsp;in case of error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_Transform">FT_Glyph_Transform</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Glyph_Transform</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> glyph,
- <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* delta );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Transform a glyph image if its format is scalable.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>glyph</b></td><td>
-<p>A handle to the target glyph object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>matrix</b></td><td>
-<p>A pointer to a 2x2 matrix to apply.</p>
-</td></tr>
-<tr valign=top><td><b>delta</b></td><td>
-<p>A pointer to a 2d vector to apply. Coordinates are expressed in 1/64th of a pixel.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code (if not 0, the glyph format is not scalable).</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The 2x2 transformation matrix is also applied to the glyph's advance vector.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Glyph_BBox_Mode_
- {
- <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a> = 0,
- <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a> = 0,
- <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a> = 1,
- <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a> = 2,
- <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a> = 3
-
- } <b>FT_Glyph_BBox_Mode</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The mode how the values of <a href="ft2-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a> are returned.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_GLYPH_BBOX_UNSCALED</b></td><td>
-<p>Return unscaled font units.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_GLYPH_BBOX_SUBPIXELS</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Return unfitted 26.6 coordinates.</p>
-</td></tr>
-<tr valign=top><td><b>FT_GLYPH_BBOX_GRIDFIT</b></td><td>
-<p>Return grid-fitted 26.6 coordinates.</p>
-</td></tr>
-<tr valign=top><td><b>FT_GLYPH_BBOX_TRUNCATE</b></td><td>
-<p>Return coordinates in integer pixels.</p>
-</td></tr>
-<tr valign=top><td><b>FT_GLYPH_BBOX_PIXELS</b></td><td>
-<p>Return grid-fitted pixel coordinates.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_glyph_bbox_xxx">ft_glyph_bbox_xxx</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_unscaled</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a>
-#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_subpixels</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a>
-#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_gridfit</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a>
-#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_truncate</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a>
-#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_pixels</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These constants are deprecated. Use the corresponding <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a> values instead.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ft_glyph_bbox_unscaled</b></td><td>
-<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_glyph_bbox_subpixels</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_glyph_bbox_gridfit</b></td><td>
-<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_glyph_bbox_truncate</b></td><td>
-<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_glyph_bbox_pixels</b></td><td>
-<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Glyph_Get_CBox</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> glyph,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> bbox_mode,
- <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> *acbox );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a glyph's &lsquo;control box&rsquo;. 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 which contains Bézier outside arcs).</p>
-<p>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 &lsquo;ftbbox&rsquo; component which is dedicated to this single task.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>glyph</b></td><td>
-<p>A handle to the source glyph object.</p>
-</td></tr>
-<tr valign=top><td><b>mode</b></td><td>
-<p>The mode which indicates how to interpret the returned bounding box values.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>acbox</b></td><td>
-<p>The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Coordinates are relative to the glyph origin, using the y&nbsp;upwards convention.</p>
-<p>If the glyph has been loaded with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>, &lsquo;bbox_mode&rsquo; must be set to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a> to get unscaled font units in 26.6 pixel format. The value <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a> is another name for this constant.</p>
-<p>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:</p>
-<pre class="colored">
- width = bbox.xMax - bbox.xMin;
- height = bbox.yMax - bbox.yMin;
-</pre>
-<p>Note also that for 26.6 coordinates, if &lsquo;bbox_mode&rsquo; is set to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a>, the coordinates will also be grid-fitted, which corresponds to:</p>
-<pre class="colored">
- bbox.xMin = FLOOR(bbox.xMin);
- bbox.yMin = FLOOR(bbox.yMin);
- bbox.xMax = CEILING(bbox.xMax);
- bbox.yMax = CEILING(bbox.yMax);
-</pre>
-<p>To get the bbox in pixel coordinates, set &lsquo;bbox_mode&rsquo; to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a>.</p>
-<p>To get the bbox in grid-fitted pixel coordinates, set &lsquo;bbox_mode&rsquo; to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Glyph_To_Bitmap</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>* the_glyph,
- <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> render_mode,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* origin,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> destroy );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Convert a given glyph object to a bitmap glyph object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>the_glyph</b></td><td>
-<p>A pointer to a handle to the target glyph.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>render_mode</b></td><td>
-<p>An enumeration that describe how the data is rendered.</p>
-</td></tr>
-<tr valign=top><td><b>origin</b></td><td>
-<p>A pointer to a vector used to translate the glyph image before rendering. Can be&nbsp;0 (if no translation). The origin is expressed in 26.6 pixels.</p>
-</td></tr>
-<tr valign=top><td><b>destroy</b></td><td>
-<p>A boolean that indicates that the original glyph image should be destroyed by this function. It is never destroyed in case of error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The glyph image is translated with the &lsquo;origin&rsquo; vector before rendering.</p>
-<p>The first parameter is a pointer to an <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> handle, that will be replaced by this function. Typically, you would use (omitting error handling):</p>
-<p></p>
-<pre class="colored">
- FT_Glyph glyph;
- FT_BitmapGlyph glyph_bitmap;
-
-
- // load glyph
- error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT );
-
- // extract glyph image
- error = FT_Get_Glyph( face-&gt;glyph, &amp;glyph );
-
- // convert to a bitmap (default render mode + destroy old)
- if ( glyph-&gt;format != FT_GLYPH_FORMAT_BITMAP )
- {
- error = FT_Glyph_To_Bitmap( &amp;glyph, FT_RENDER_MODE_DEFAULT,
- 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 );
-</pre>
-<p></p>
-<p>This function does nothing if the glyph format isn't scalable.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Done_Glyph">FT_Done_Glyph</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GLYPH_H (freetype/ftglyph.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Done_Glyph</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> glyph );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Destroy a given glyph.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>glyph</b></td><td>
-<p>A handle to the target glyph object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-glyph_stroker.html b/Build/source/libs/freetype2/docs/reference/ft2-glyph_stroker.html
deleted file mode 100644
index 98c799861aa..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-glyph_stroker.html
+++ /dev/null
@@ -1,928 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Glyph Stroker
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Stroker">FT_Stroker</a></td><td></td><td><a href="#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></td></tr>
-<tr><td></td><td><a href="#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td><td></td><td><a href="#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td></tr>
-<tr><td></td><td><a href="#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td><td></td><td><a href="#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td></tr>
-<tr><td></td><td><a href="#FT_StrokerBorder">FT_StrokerBorder</a></td><td></td><td><a href="#FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></td><td></td><td><a href="#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></td><td></td><td><a href="#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></td></tr>
-<tr><td></td><td><a href="#FT_Stroker_New">FT_Stroker_New</a></td><td></td><td><a href="#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></td></tr>
-<tr><td></td><td><a href="#FT_Stroker_Set">FT_Stroker_Set</a></td><td></td><td><a href="#FT_Stroker_Export">FT_Stroker_Export</a></td></tr>
-<tr><td></td><td><a href="#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td><td></td><td><a href="#FT_Stroker_Done">FT_Stroker_Done</a></td></tr>
-<tr><td></td><td><a href="#FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></td><td></td><td><a href="#FT_Glyph_Stroke">FT_Glyph_Stroke</a></td></tr>
-<tr><td></td><td><a href="#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></td><td></td><td><a href="#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This component generates stroked outlines of a given vectorial glyph. It also allows you to retrieve the &lsquo;outside&rsquo; and/or the &lsquo;inside&rsquo; borders of the stroke.</p>
-<p>This can be useful to generate &lsquo;bordered&rsquo; glyph, i.e., glyphs displayed with a coloured (and anti-aliased) border around their shape.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker">FT_Stroker</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StrokerRec_* <b>FT_Stroker</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Opaque handler to a path stroker object.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineJoin_
- {
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_ROUND</a> = 0,
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_BEVEL</a>,
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER</a>
-
- } <b>FT_Stroker_LineJoin</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These values determine how two joining lines are rendered in a stroker.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td colspan=0><b>FT_STROKER_LINEJOIN_ROUND</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Used to render rounded line joins. Circular arcs are used to join two lines smoothly.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_STROKER_LINEJOIN_BEVEL</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Used to render beveled line joins; i.e., the two joining lines are extended until they intersect.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_STROKER_LINEJOIN_MITER</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Same as beveled rendering, except that an additional line break is added if the angle between the two joining lines is too closed (this is useful to avoid unpleasant spikes in beveled rendering).</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_LineCap">FT_Stroker_LineCap</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineCap_
- {
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_BUTT</a> = 0,
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_ROUND</a>,
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_SQUARE</a>
-
- } <b>FT_Stroker_LineCap</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These values determine how the end of opened sub-paths are rendered in a stroke.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td colspan=0><b>FT_STROKER_LINECAP_BUTT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The end of lines is rendered as a full stop on the last point itself.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_STROKER_LINECAP_ROUND</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The end of lines is rendered as a half-circle around the last point.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_STROKER_LINECAP_SQUARE</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The end of lines is rendered as a square around the last point.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_StrokerBorder">FT_StrokerBorder</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_StrokerBorder_
- {
- <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a> = 0,
- <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_RIGHT</a>
-
- } <b>FT_StrokerBorder</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These values are used to select a given stroke border in <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_STROKER_BORDER_LEFT</b></td><td>
-<p>Select the left border, relative to the drawing direction.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_STROKER_BORDER_RIGHT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Select the right border, relative to the drawing direction.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Applications are generally interested in the &lsquo;inside&rsquo; and &lsquo;outside&rsquo; borders. However, there is no direct mapping between these and the &lsquo;left&rsquo; and &lsquo;right&rsquo; ones, since this really depends on the glyph's drawing orientation, which varies between font formats.</p>
-<p>You can however use <a href="ft2-glyph_stroker.html#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a> and <a href="ft2-glyph_stroker.html#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a> to get these.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> )
- <b>FT_Outline_GetInsideBorder</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> value corresponding to the &lsquo;inside&rsquo; borders of a given outline.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>The source outline handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The border index. <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a> for empty or invalid outlines.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> )
- <b>FT_Outline_GetOutsideBorder</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> value corresponding to the &lsquo;outside&rsquo; borders of a given outline.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>The source outline handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The border index. <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a> for empty or invalid outlines.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_New">FT_Stroker_New</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_New</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> *astroker );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new stroker object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>FreeType library handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>astroker</b></td><td>
-<p>A new stroker object handle. NULL in case of error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_Set">FT_Stroker_Set</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Stroker_Set</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> radius,
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_Stroker_LineCap</a> line_cap,
- <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a> line_join,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> miter_limit );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Reset a stroker object's attributes.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>radius</b></td><td>
-<p>The border radius.</p>
-</td></tr>
-<tr valign=top><td><b>line_cap</b></td><td>
-<p>The line cap style.</p>
-</td></tr>
-<tr valign=top><td><b>line_join</b></td><td>
-<p>The line join style.</p>
-</td></tr>
-<tr valign=top><td><b>miter_limit</b></td><td>
-<p>The miter limit for the FT_STROKER_LINEJOIN_MITER style, expressed as 16.16 fixed point value.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The radius is expressed in the same units that the outline coordinates.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_Rewind">FT_Stroker_Rewind</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Stroker_Rewind</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Reset a stroker object without changing its attributes. You should call this function before beginning a new series of calls to <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> or <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_ParseOutline</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> opened );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A convenience function used to parse a whole outline with the stroker. The resulting outline(s) can be retrieved later by functions like <a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>The source outline.</p>
-</td></tr>
-<tr valign=top><td><b>opened</b></td><td>
-<p>A boolean. If&nbsp;1, the outline is treated as an open path instead of a closed one.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If &lsquo;opened&rsquo; is&nbsp;0 (the default), the outline is treated as a closed path, and the stroker will generate two distinct &lsquo;border&rsquo; outlines.</p>
-<p>If &lsquo;opened&rsquo; is&nbsp;1, the outline is processed as an open path, and the stroker will generate a single &lsquo;stroke&rsquo; outline.</p>
-<p>This function calls <a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a> automatically.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_BeginSubPath</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> open );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Start a new sub-path in the stroker.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the start vector.</p>
-</td></tr>
-<tr valign=top><td><b>open</b></td><td>
-<p>A boolean. If&nbsp;1, the sub-path is treated as an open one.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function is useful when you need to stroke a path that is not stored as an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> object.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_EndSubPath</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Close the current sub-path in the stroker.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a>. If the subpath was not &lsquo;opened&rsquo;, this function will &lsquo;draw&rsquo; a single line segment to the start position when needed.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_LineTo">FT_Stroker_LineTo</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_LineTo</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>&lsquo;Draw&rsquo; a single line segment in the stroker's current sub-path, from the last position.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the destination point.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should call this function between <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_ConicTo</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>&lsquo;Draw&rsquo; a single quadratic Bézier in the stroker's current sub-path, from the last position.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>control</b></td><td>
-<p>A pointer to a Bézier control point.</p>
-</td></tr>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the destination point.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should call this function between <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_CubicTo</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control1,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control2,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>&lsquo;Draw&rsquo; a single cubic Bézier in the stroker's current sub-path, from the last position.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>control1</b></td><td>
-<p>A pointer to the first Bézier control point.</p>
-</td></tr>
-<tr valign=top><td><b>control2</b></td><td>
-<p>A pointer to second Bézier control point.</p>
-</td></tr>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the destination point.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should call this function between <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_GetBorderCounts</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> border,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_points,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_contours );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Call this function once you have finished parsing your paths with the stroker. It will return the number of points and contours necessary to export one of the &lsquo;border&rsquo; or &lsquo;stroke&rsquo; outlines generated by the stroker.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>border</b></td><td>
-<p>The border index.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>anum_points</b></td><td>
-<p>The number of points.</p>
-</td></tr>
-<tr valign=top><td><b>anum_contours</b></td><td>
-<p>The number of contours.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>When an outline, or a sub-path, is &lsquo;closed&rsquo;, the stroker generates two independent &lsquo;border&rsquo; outlines, named &lsquo;left&rsquo; and &lsquo;right&rsquo;.</p>
-<p>When the outline, or a sub-path, is &lsquo;opened&rsquo;, the stroker merges the &lsquo;border&rsquo; outlines with caps. The &lsquo;left&rsquo; border receives all points, while the &lsquo;right&rsquo; border becomes empty.</p>
-<p>Use the function <a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a> instead if you want to retrieve the counts associated to both borders.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Stroker_ExportBorder</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> border,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> to export the corresponding border to your own <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> structure.</p>
-<p>Note that this function will append the border points and contours to your outline, but will not try to resize its arrays.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>border</b></td><td>
-<p>The border index.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>The target outline handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Always call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> to get sure that there is enough room in your <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> object to receive all new data.</p>
-<p>When an outline, or a sub-path, is &lsquo;closed&rsquo;, the stroker generates two independent &lsquo;border&rsquo; outlines, named &lsquo;left&rsquo; and &lsquo;right&rsquo;</p>
-<p>When the outline, or a sub-path, is &lsquo;opened&rsquo;, the stroker merges the &lsquo;border&rsquo; outlines with caps. The &lsquo;left&rsquo; border receives all points, while the &lsquo;right&rsquo; border becomes empty.</p>
-<p>Use the function <a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a> instead if you want to retrieve all borders at once.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stroker_GetCounts</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_points,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_contours );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>anum_points</b></td><td>
-<p>The number of points.</p>
-</td></tr>
-<tr valign=top><td><b>anum_contours</b></td><td>
-<p>The number of contours.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_Export">FT_Stroker_Export</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Stroker_Export</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> to export the all borders to your own <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> structure.</p>
-<p>Note that this function will append the border points and contours to your outline, but will not try to resize its arrays.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>The target stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>The target outline handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stroker_Done">FT_Stroker_Done</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Stroker_Done</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Destroy a stroker object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>A stroker handle. Can be NULL.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_Stroke">FT_Glyph_Stroke</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Glyph_Stroke</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *pglyph,
- <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> destroy );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Stroke a given outline glyph object with a given stroker.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>pglyph</b></td><td>
-<p>Source glyph handle on input, new glyph handle on output.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>A stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>destroy</b></td><td>
-<p>A Boolean. If&nbsp;1, the source glyph object is destroyed on success.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The source glyph is untouched in case of error.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_STROKER_H (freetype/ftstroke.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Glyph_StrokeBorder</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *pglyph,
- <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> inside,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> destroy );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Stroke a given outline glyph object with a given stroker, but only return either its inside or outside border.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>pglyph</b></td><td>
-<p>Source glyph handle on input, new glyph handle on output.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stroker</b></td><td>
-<p>A stroker handle.</p>
-</td></tr>
-<tr valign=top><td><b>inside</b></td><td>
-<p>A Boolean. If&nbsp;1, return the inside border, otherwise the outside border.</p>
-</td></tr>
-<tr valign=top><td><b>destroy</b></td><td>
-<p>A Boolean. If&nbsp;1, the source glyph object is destroyed on success.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The source glyph is untouched in case of error.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-glyph_variants.html b/Build/source/libs/freetype2/docs/reference/ft2-glyph_variants.html
deleted file mode 100644
index 0a2c932e2cf..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-glyph_variants.html
+++ /dev/null
@@ -1,267 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Glyph Variants
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></td><td></td><td><a href="#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></td></tr>
-<tr><td></td><td><a href="#FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></td><td></td><td><a href="#FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></td></tr>
-<tr><td></td><td><a href="#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>Many CJK characters 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 Ideographic Variation Sequences (IVS), consisting of a Unicode base character and one of 240 variant selectors (U+E0100-U+E01EF), instead of further extending the already huge code range for CJK characters.</p>
-<p>An IVS is registered and unique; for further details please refer to Unicode Technical Report #37, the Ideographic Variation Database. To date (October 2007), the character with the most variants is U+908A, having 8&nbsp;such IVS.</p>
-<p>Adobe and MS decided to support IVS with a new cmap subtable (format&nbsp;14). It is an odd subtable because it is not a mapping of input code points to glyphs, but contains lists of all variants supported by the font.</p>
-<p>A variant may be either &lsquo;default&rsquo; or &lsquo;non-default&rsquo;. A default variant is the one you will get for that code point if you look it up in the standard Unicode cmap. A non-default variant is a different glyph.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
- <b>FT_Face_GetCharVariantIndex</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> variantSelector );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the glyph index of a given character code as modified by the variation selector.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr valign=top><td><b>charcode</b></td><td>
-<p>The character code point in Unicode.</p>
-</td></tr>
-<tr valign=top><td><b>variantSelector</b></td><td>
-<p>The Unicode code point of the variation selector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The glyph index. 0&nbsp;means either &lsquo;undefined character code&rsquo;, or &lsquo;undefined selector code&rsquo;, or &lsquo;no variation selector cmap subtable&rsquo;, or &lsquo;current CharMap is not Unicode&rsquo;.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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&nbsp;0 always corresponds to the &lsquo;missing glyph&rsquo;.</p>
-<p>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.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.6</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
- <b>FT_Face_GetCharVariantIsDefault</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> variantSelector );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Check whether this variant of this Unicode character is the one to be found in the &lsquo;cmap&rsquo;.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr valign=top><td><b>charcode</b></td><td>
-<p>The character codepoint in Unicode.</p>
-</td></tr>
-<tr valign=top><td><b>variantSelector</b></td><td>
-<p>The Unicode codepoint of the variation selector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>1&nbsp;if found in the standard (Unicode) cmap, 0&nbsp;if found in the variation selector cmap, or -1 if it is not a variant.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function is only meaningful if the font has a variation selector cmap subtable.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.6</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>* )
- <b>FT_Face_GetVariantSelectors</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a zero-terminated list of Unicode variant selectors found in the font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A pointer to an array of selector code points, or NULL if there is no valid variant selector cmap subtable.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The last item in the array is&nbsp;0; the array is owned by the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object but can be overwritten or released on the next call to a FreeType function.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.6</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>* )
- <b>FT_Face_GetVariantsOfChar</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a zero-terminated list of Unicode variant selectors found for the specified character code.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr valign=top><td><b>charcode</b></td><td>
-<p>The character codepoint in Unicode.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A pointer to an array of variant selector code points which are active for the given character, or NULL if the corresponding list is empty.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The last item in the array is&nbsp;0; the array is owned by the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object but can be overwritten or released on the next call to a FreeType function.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.6</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>* )
- <b>FT_Face_GetCharsOfVariant</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> variantSelector );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a zero-terminated list of Unicode character codes found for the specified variant selector.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face object.</p>
-</td></tr>
-<tr valign=top><td><b>variantSelector</b></td><td>
-<p>The variant selector code point in Unicode.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A list of all the code points which are specified by this selector (both default and non-default codes are returned) or NULL if there is no valid cmap or the variant selector is invalid.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The last item in the array is&nbsp;0; the array is owned by the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object but can be overwritten or released on the next call to a FreeType function.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.6</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-gx_validation.html b/Build/source/libs/freetype2/docs/reference/ft2-gx_validation.html
deleted file mode 100644
index e65bda08502..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-gx_validation.html
+++ /dev/null
@@ -1,356 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-TrueTypeGX/AAT Validation
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></td><td></td><td><a href="#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td><td></td><td><a href="#FT_ClassicKern_Free">FT_ClassicKern_Free</a></td></tr>
-<tr><td></td><td><a href="#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></td><td></td><td><a href="#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></td><td></td><td></td></tr>
-<tr><td></td><td><a href="#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td><td></td><td><a href="#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of functions to validate some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop, lcar).</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_VALIDATE_GX_LENGTH</b> (FT_VALIDATE_GX_LAST_INDEX + 1)
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The number of tables checked in this module. Use it as a parameter for the &lsquo;table-length&rsquo; argument of function <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a> FT_VALIDATE_GX_BITFIELD( feat )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a> FT_VALIDATE_GX_BITFIELD( mort )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a> FT_VALIDATE_GX_BITFIELD( morx )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a> FT_VALIDATE_GX_BITFIELD( bsln )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a> FT_VALIDATE_GX_BITFIELD( just )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a> FT_VALIDATE_GX_BITFIELD( kern )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a> FT_VALIDATE_GX_BITFIELD( opbd )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a> FT_VALIDATE_GX_BITFIELD( trak )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a> FT_VALIDATE_GX_BITFIELD( prop )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a> FT_VALIDATE_GX_BITFIELD( lcar )
-
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GX</a> ( <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a> | \
- <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit-field constants used with <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a> to indicate which TrueTypeGX/AAT Type tables should be validated.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_VALIDATE_feat</b></td><td>
-<p>Validate &lsquo;feat&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_mort</b></td><td>
-<p>Validate &lsquo;mort&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_morx</b></td><td>
-<p>Validate &lsquo;morx&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_bsln</b></td><td>
-<p>Validate &lsquo;bsln&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_just</b></td><td>
-<p>Validate &lsquo;just&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_kern</b></td><td>
-<p>Validate &lsquo;kern&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_opbd</b></td><td>
-<p>Validate &lsquo;opbd&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_trak</b></td><td>
-<p>Validate &lsquo;trak&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_prop</b></td><td>
-<p>Validate &lsquo;prop&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_lcar</b></td><td>
-<p>Validate &lsquo;lcar&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_GX</b></td><td>
-<p>Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop and lcar).</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_TrueTypeGX_Validate</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> validation_flags,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> tables[<a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a>],
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> table_length );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>validation_flags</b></td><td>
-<p>A bit field which specifies the tables to be validated. See <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a> for possible values.</p>
-</td></tr>
-<tr valign=top><td><b>table_length</b></td><td>
-<p>The size of the &lsquo;tables&rsquo; array. Normally, <a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a> should be passed.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>tables</b></td><td>
-<p>The array where all validated sfnt tables are stored. The array itself must be allocated by a client.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function only works with TrueTypeGX fonts, returning an error otherwise.</p>
-<p>After use, the application should deallocate the buffers pointed to by each &lsquo;tables&rsquo; element, by calling <a href="ft2-gx_validation.html#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a>. 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.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_TrueTypeGX_Free</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> table );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Free the buffer allocated by TrueTypeGX validator.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>table</b></td><td>
-<p>The pointer to the buffer allocated by <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function must be used to free the buffer allocated by <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a> only.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a> ( FT_VALIDATE_GX_START &lt;&lt; 0 )
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a> ( FT_VALIDATE_GX_START &lt;&lt; 1 )
-
-#define <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERN</a> ( <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a> | <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a> )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit-field constants used with <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a> to indicate the classic kern dialect or dialects. If the selected type doesn't fit, <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a> regards the table as invalid.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_VALIDATE_MS</b></td><td>
-<p>Handle the &lsquo;kern&rsquo; table as a classic Microsoft kern table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_APPLE</b></td><td>
-<p>Handle the &lsquo;kern&rsquo; table as a classic Apple kern table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_CKERN</b></td><td>
-<p>Handle the &lsquo;kern&rsquo; as either classic Apple or Microsoft kern table.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_ClassicKern_Validate</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> validation_flags,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *ckern_table );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Validate classic (16-bit format) kern table to assure that the offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
-<p>The &lsquo;kern&rsquo; table validator in <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a> 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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>validation_flags</b></td><td>
-<p>A bit field which specifies the dialect to be validated. See <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a> for possible values.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ckern_table</b></td><td>
-<p>A pointer to the kern table.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>After use, the application should deallocate the buffers pointed to by &lsquo;ckern_table&rsquo;, by calling <a href="ft2-gx_validation.html#FT_ClassicKern_Free">FT_ClassicKern_Free</a>. A NULL value indicates that the table doesn't exist in the font.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ClassicKern_Free">FT_ClassicKern_Free</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_ClassicKern_Free</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> table );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Free the buffer allocated by classic Kern validator.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>table</b></td><td>
-<p>The pointer to the buffer that is allocated by <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function must be used to free the buffer allocated by <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a> only.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-gzip.html b/Build/source/libs/freetype2/docs/reference/ft2-gzip.html
deleted file mode 100644
index 142aff79c4c..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-gzip.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-GZIP Streams
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td></td><td></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of Gzip-specific functions.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_GZIP_H (freetype/ftgzip.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stream_OpenGzip</b>( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream,
- <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> source );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Open a new stream to parse gzip-compressed font files. This is mainly used to support the compressed &lsquo;*.pcf.gz&rsquo; fonts that come with XFree86.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stream</b></td><td>
-<p>The target embedding stream.</p>
-</td></tr>
-<tr valign=top><td><b>source</b></td><td>
-<p>The source stream.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The source stream must be opened <i>before</i> calling this function.</p>
-<p>Calling the internal function &lsquo;FT_Stream_Close&rsquo; on the new stream will <b>not</b> call &lsquo;FT_Stream_Close&rsquo; on the source stream. None of the stream objects will be released to the heap.</p>
-<p>The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream.</p>
-<p>In certain builds of the library, gzip compression recognition is automatically handled when calling <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>. 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.</p>
-<p>This function may return &lsquo;FT_Err_Unimplemented_Feature&rsquo; if your build of FreeType was not compiled with zlib support.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-header_file_macros.html b/Build/source/libs/freetype2/docs/reference/ft2-header_file_macros.html
deleted file mode 100644
index d6fadbf21da..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-header_file_macros.html
+++ /dev/null
@@ -1,820 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Header File Macros
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></td><td></td><td><a href="#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
-<tr><td></td><td><a href="#FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></td><td></td><td><a href="#FT_GLYPH_H">FT_GLYPH_H</a></td></tr>
-<tr><td></td><td><a href="#FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></td><td></td><td><a href="#FT_BITMAP_H">FT_BITMAP_H</a></td></tr>
-<tr><td></td><td><a href="#FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></td><td></td><td><a href="#FT_BBOX_H">FT_BBOX_H</a></td></tr>
-<tr><td></td><td><a href="#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td></td><td><a href="#FT_CACHE_H">FT_CACHE_H</a></td></tr>
-<tr><td></td><td><a href="#FT_ERRORS_H">FT_ERRORS_H</a></td><td></td><td><a href="#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></td></tr>
-<tr><td></td><td><a href="#FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></td><td></td><td><a href="#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></td></tr>
-<tr><td></td><td><a href="#FT_SYSTEM_H">FT_SYSTEM_H</a></td><td></td><td><a href="#FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></td></tr>
-<tr><td></td><td><a href="#FT_IMAGE_H">FT_IMAGE_H</a></td><td></td><td><a href="#FT_MAC_H">FT_MAC_H</a></td></tr>
-<tr><td></td><td><a href="#FT_TYPES_H">FT_TYPES_H</a></td><td></td><td><a href="#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td></tr>
-<tr><td></td><td><a href="#FT_LIST_H">FT_LIST_H</a></td><td></td><td><a href="#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td></tr>
-<tr><td></td><td><a href="#FT_OUTLINE_H">FT_OUTLINE_H</a></td><td></td><td><a href="#FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></td></tr>
-<tr><td></td><td><a href="#FT_SIZES_H">FT_SIZES_H</a></td><td></td><td><a href="#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></td></tr>
-<tr><td></td><td><a href="#FT_MODULE_H">FT_MODULE_H</a></td><td></td><td><a href="#FT_PFR_H">FT_PFR_H</a></td></tr>
-<tr><td></td><td><a href="#FT_RENDER_H">FT_RENDER_H</a></td><td></td><td><a href="#FT_STROKER_H">FT_STROKER_H</a></td></tr>
-<tr><td></td><td><a href="#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td><td></td><td><a href="#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
-<tr><td></td><td><a href="#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td><td></td><td><a href="#FT_XFREE86_H">FT_XFREE86_H</a></td></tr>
-<tr><td></td><td><a href="#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td><td></td><td><a href="#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
-<tr><td></td><td><a href="#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td><td></td><td><a href="#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td></tr>
-<tr><td></td><td><a href="#FT_BDF_H">FT_BDF_H</a></td><td></td><td><a href="#FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></td></tr>
-<tr><td></td><td><a href="#FT_CID_H">FT_CID_H</a></td><td></td><td><a href="#FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></td></tr>
-<tr><td></td><td><a href="#FT_GZIP_H">FT_GZIP_H</a></td><td></td><td><a href="#FT_GASP_H">FT_GASP_H</a></td></tr>
-<tr><td></td><td><a href="#FT_LZW_H">FT_LZW_H</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>The following macros are defined to the name of specific FreeType&nbsp;2 header files. They can be used directly in #include statements as in:</p>
-<pre class="colored">
- #include FT_FREETYPE_H
- #include FT_MULTIPLE_MASTERS_H
- #include FT_GLYPH_H
-</pre>
-<p>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&nbsp;naming rule required by DOS (and &lsquo;FT_MULTIPLE_MASTERS_H&rsquo; is a lot more meaningful than &lsquo;ftmm.h&rsquo;).</p>
-<p>The second reason is that it allows for more flexibility in the way FreeType&nbsp;2 is installed on a given system.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#ifndef <b>FT_CONFIG_CONFIG_H</b>
-#define <b>FT_CONFIG_CONFIG_H</b> &lt;freetype/config/ftconfig.h&gt;
-#endif
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing FreeType&nbsp;2 configuration data.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#ifndef <b>FT_CONFIG_STANDARD_LIBRARY_H</b>
-#define <b>FT_CONFIG_STANDARD_LIBRARY_H</b> &lt;freetype/config/ftstdlib.h&gt;
-#endif
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing FreeType&nbsp;2 interface to the standard C library functions.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#ifndef <b>FT_CONFIG_OPTIONS_H</b>
-#define <b>FT_CONFIG_OPTIONS_H</b> &lt;freetype/config/ftoption.h&gt;
-#endif
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing FreeType&nbsp;2 project-specific configuration options.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#ifndef <b>FT_CONFIG_MODULES_H</b>
-#define <b>FT_CONFIG_MODULES_H</b> &lt;freetype/config/ftmodule.h&gt;
-#endif
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the list of FreeType&nbsp;2 modules that are statically linked to new library instances in <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_FREETYPE_H">FT_FREETYPE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_FREETYPE_H</b> &lt;freetype/freetype.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the base FreeType&nbsp;2 API.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ERRORS_H">FT_ERRORS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_ERRORS_H</b> &lt;freetype/fterrors.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the list of FreeType&nbsp;2 error codes (and messages).</p>
-<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_MODULE_ERRORS_H</b> &lt;freetype/ftmoderr.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the list of FreeType&nbsp;2 module error offsets (and messages).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SYSTEM_H">FT_SYSTEM_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_SYSTEM_H</b> &lt;freetype/ftsystem.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 interface to low-level operations (i.e., memory management and stream i/o).</p>
-<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_IMAGE_H">FT_IMAGE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_IMAGE_H</b> &lt;freetype/ftimage.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing type definitions related to glyph images (i.e., bitmaps, outlines, scan-converter parameters).</p>
-<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TYPES_H">FT_TYPES_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_TYPES_H</b> &lt;freetype/fttypes.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the basic data types defined by FreeType&nbsp;2.</p>
-<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_LIST_H">FT_LIST_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_LIST_H</b> &lt;freetype/ftlist.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the list management API of FreeType&nbsp;2.</p>
-<p>(Most applications will never need to include this file.)</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OUTLINE_H">FT_OUTLINE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_OUTLINE_H</b> &lt;freetype/ftoutln.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the scalable outline management API of FreeType&nbsp;2.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SIZES_H">FT_SIZES_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_SIZES_H</b> &lt;freetype/ftsizes.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the API which manages multiple <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects per face.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MODULE_H">FT_MODULE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_MODULE_H</b> &lt;freetype/ftmodapi.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the module management API of FreeType&nbsp;2.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_RENDER_H">FT_RENDER_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_RENDER_H</b> &lt;freetype/ftrender.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the renderer module management API of FreeType&nbsp;2.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_TYPE1_TABLES_H</b> &lt;freetype/t1tables.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the types and API specific to the Type&nbsp;1 format.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_TRUETYPE_IDS_H</b> &lt;freetype/ttnameid.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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 <i>large</i> set of constant macro definitions, taken from the TrueType and OpenType specifications.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_TRUETYPE_TABLES_H</b> &lt;freetype/tttables.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the types and API specific to the TrueType (as well as OpenType) format.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_TRUETYPE_TAGS_H</b> &lt;freetype/tttags.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the definitions of TrueType four-byte &lsquo;tags&rsquo; which identify blocks in SFNT-based font formats (i.e., TrueType and OpenType).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_BDF_H">FT_BDF_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_BDF_H</b> &lt;freetype/ftbdf.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the definitions of an API which accesses BDF-specific strings from a face.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CID_H">FT_CID_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_CID_H</b> &lt;freetype/ftcid.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the definitions of an API which access CID font information from a face.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GZIP_H">FT_GZIP_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_GZIP_H</b> &lt;freetype/ftgzip.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the definitions of an API which supports gzip-compressed files.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_LZW_H">FT_LZW_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_LZW_H</b> &lt;freetype/ftlzw.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the definitions of an API which supports LZW-compressed files.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_WINFONTS_H">FT_WINFONTS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_WINFONTS_H</b> &lt;freetype/ftwinfnt.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the definitions of an API which supports Windows FNT files.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GLYPH_H">FT_GLYPH_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_GLYPH_H</b> &lt;freetype/ftglyph.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the API of the optional glyph management component.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_BITMAP_H">FT_BITMAP_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_BITMAP_H</b> &lt;freetype/ftbitmap.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the API of the optional bitmap conversion component.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_BBOX_H">FT_BBOX_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_BBOX_H</b> &lt;freetype/ftbbox.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the API of the optional exact bounding box computation routines.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CACHE_H">FT_CACHE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_CACHE_H</b> &lt;freetype/ftcache.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the API of the optional FreeType&nbsp;2 cache sub-system.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_CACHE_IMAGE_H</b> <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the &lsquo;glyph image&rsquo; API of the FreeType&nbsp;2 cache sub-system.</p>
-<p>It is used to define a cache for <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> elements. You can also use the API defined in <a href="ft2-header_file_macros.html#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a> if you only need to store small glyph bitmaps, as it will use less memory.</p>
-<p>This macro is deprecated. Simply include <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a> to have all glyph image-related cache declarations.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_CACHE_SMALL_BITMAPS_H</b> <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the &lsquo;small bitmaps&rsquo; API of the FreeType&nbsp;2 cache sub-system.</p>
-<p>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 <a href="ft2-header_file_macros.html#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a> if you want to cache arbitrary glyph images, including scalable outlines.</p>
-<p>This macro is deprecated. Simply include <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a> to have all small bitmaps-related cache declarations.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_CACHE_CHARMAP_H</b> <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the &lsquo;charmap&rsquo; API of the FreeType&nbsp;2 cache sub-system.</p>
-<p>This macro is deprecated. Simply include <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a> to have all charmap-based cache declarations.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MAC_H">FT_MAC_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_MAC_H</b> &lt;freetype/ftmac.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the Macintosh-specific FreeType&nbsp;2 API. The latter is used to access fonts embedded in resource forks.</p>
-<p>This header file must be explicitly included by client applications compiled on the Mac (note that the base API still works though).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_MULTIPLE_MASTERS_H</b> &lt;freetype/ftmm.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the optional multiple-masters management API of FreeType&nbsp;2.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_SFNT_NAMES_H</b> &lt;freetype/ftsnames.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the optional FreeType&nbsp;2 API which accesses embedded &lsquo;name&rsquo; strings in SFNT-based font formats (i.e., TrueType and OpenType).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_OPENTYPE_VALIDATE_H</b> &lt;freetype/ftotval.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the optional FreeType&nbsp;2 API which validates OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_GX_VALIDATE_H</b> &lt;freetype/ftgxval.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the optional FreeType&nbsp;2 API which validates TrueTypeGX/AAT tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_PFR_H">FT_PFR_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_PFR_H</b> &lt;freetype/ftpfr.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which accesses PFR-specific data.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_STROKER_H">FT_STROKER_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_STROKER_H</b> &lt;freetype/ftstroke.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which provides functions to stroke outline paths.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_SYNTHESIS_H</b> &lt;freetype/ftsynth.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which performs artificial obliquing and emboldening.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_XFREE86_H">FT_XFREE86_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_XFREE86_H</b> &lt;freetype/ftxf86.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which provides functions specific to the XFree86 and X.Org X11 servers.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_TRIGONOMETRY_H</b> &lt;freetype/fttrigon.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which performs trigonometric computations (e.g., cosines and arc tangents).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_LCD_FILTER_H</b> &lt;freetype/ftlcdfil.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which performs color filtering for subpixel rendering.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_UNPATENTED_HINTING_H</b> &lt;freetype/ttunpat.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which performs color filtering for subpixel rendering.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_INCREMENTAL_H</b> &lt;freetype/ftincrem.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which performs color filtering for subpixel rendering.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GASP_H">FT_GASP_H</a></h4>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_GASP_H</b> &lt;freetype/ftgasp.h&gt;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which returns entries from the TrueType GASP table.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-incremental.html b/Build/source/libs/freetype2/docs/reference/ft2-incremental.html
deleted file mode 100644
index 2116a2d8796..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-incremental.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Incremental Loading
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Incremental">FT_Incremental</a></td><td></td><td><a href="#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></td><td></td><td><a href="#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></td></tr>
-<tr><td></td><td><a href="#FT_Incremental_Metrics">FT_Incremental_Metrics</a></td><td></td><td><a href="#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></td></tr>
-<tr><td></td><td><a href="#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td></td><td><a href="#FT_Incremental_Interface">FT_Incremental_Interface</a></td></tr>
-<tr><td></td><td><a href="#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></td><td></td><td><a href="#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains various functions used to perform so-called &lsquo;incremental&rsquo; glyph loading. This is a mode where all glyphs loaded from a given <a href="ft2-base_interface.html#FT_Face">FT_Face</a> are provided by the client application,</p>
-<p>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.</p>
-<p>To enable this mode, you must use <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>, passing an <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> with the <a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a> tag and an <a href="ft2-incremental.html#FT_Incremental_Interface">FT_Incremental_Interface</a> value. See the comments for <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a> for an example.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental">FT_Incremental</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_IncrementalRec_* <b>FT_Incremental</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An opaque type describing a user-provided object used to implement &lsquo;incremental&rsquo; 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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>It is up to client applications to create and implement <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> objects, as long as they provide implementations for the methods <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a>, <a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a> and <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a>.</p>
-<p>See the description of <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a> to understand how to use incremental objects with FreeType.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_MetricsRec_
- {
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> bearing_x;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> bearing_y;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> advance;
-
- } <b>FT_Incremental_MetricsRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A small structure used to contain the basic glyph metrics returned by the <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a> method.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>bearing_x</b></td><td>
-<p>Left bearing, in font units.</p>
-</td></tr>
-<tr valign=top><td><b>bearing_y</b></td><td>
-<p>Top bearing, in font units.</p>
-</td></tr>
-<tr valign=top><td><b>advance</b></td><td>
-<p>Glyph advance, in font units.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>These correspond to horizontal or vertical metrics depending on the value of the &lsquo;vertical&rsquo; argument to the function <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_Metrics">FT_Incremental_Metrics</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_MetricsRec_* <b>FT_Incremental_Metrics</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an <a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
- (*<b>FT_Incremental_GetGlyphDataFunc</b>)( <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> incremental,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
- <a href="ft2-basic_types.html#FT_Data">FT_Data</a>* adata );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function called by FreeType to access a given glyph's data bytes during <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a> if incremental loading is enabled.</p>
-<p>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 &lsquo;glyf&rsquo; table. For PostScript formats, it must correspond to the <b>unencrypted</b> charstring bytes, without any &lsquo;lenIV&rsquo; header. It is undefined for any other format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>incremental</b></td><td>
-<p>Handle to an opaque <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> handle provided by the client application.</p>
-</td></tr>
-<tr valign=top><td><b>glyph_index</b></td><td>
-<p>Index of relevant glyph.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>adata</b></td><td>
-<p>A structure describing the returned glyph data bytes (which will be accessed as a read-only byte block).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If this function returns successfully the method <a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a> will be called later to release the data bytes.</p>
-<p>Nested calls to <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a> can happen for compound glyphs.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Incremental_FreeGlyphDataFunc</b>)( <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> incremental,
- <a href="ft2-basic_types.html#FT_Data">FT_Data</a>* data );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to release the glyph data bytes returned by a successful call to <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>incremental</b></td><td>
-<p>A handle to an opaque <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> handle provided by the client application.</p>
-</td></tr>
-<tr valign=top><td><b>data</b></td><td>
-<p>A structure describing the glyph data bytes (which will be accessed as a read-only byte block).</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
- (*<b>FT_Incremental_GetGlyphMetricsFunc</b>)
- ( <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> incremental,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> vertical,
- <a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a> *ametrics );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>incremental</b></td><td>
-<p>A handle to an opaque <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> handle provided by the client application.</p>
-</td></tr>
-<tr valign=top><td><b>glyph_index</b></td><td>
-<p>Index of relevant glyph.</p>
-</td></tr>
-<tr valign=top><td><b>vertical</b></td><td>
-<p>If true, return vertical metrics.</p>
-</td></tr>
-<tr valign=top><td><b>ametrics</b></td><td>
-<p>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.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ametrics</b></td><td>
-<p>The replacement glyph metrics in font units.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_FuncsRec_
- {
- <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a> get_glyph_data;
- <a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a> free_glyph_data;
- <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a> get_glyph_metrics;
-
- } <b>FT_Incremental_FuncsRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A table of functions for accessing fonts that load data incrementally. Used in <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>get_glyph_data</b></td><td>
-<p>The function to get glyph data. Must not be null.</p>
-</td></tr>
-<tr valign=top><td><b>free_glyph_data</b></td><td>
-<p>The function to release glyph data. Must not be null.</p>
-</td></tr>
-<tr valign=top><td><b>get_glyph_metrics</b></td><td>
-<p>The function to get glyph metrics. May be null if the font does not provide overriding glyph metrics.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_InterfaceRec_
- {
- <span class="keyword">const</span> <a href="ft2-incremental.html#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a>* funcs;
- <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> object;
-
- } <b>FT_Incremental_InterfaceRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure to be used with <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to indicate that the user wants to support incremental glyph loading. You should use it with <a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a> as in the following example:</p>
-<pre class="colored">
- 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 = &amp;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 = &amp;parameter; // we use one optional argument
-
- // open the font
- error = FT_Open_Face( library, &amp;open_args, index, &amp;face );
- ...
-</pre>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Incremental_Interface">FT_Incremental_Interface</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a>* <b>FT_Incremental_Interface</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A pointer to an <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_PARAM_TAG_INCREMENTAL</b> <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'i', 'n', 'c', 'r' )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A constant used as the tag of <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> structures to indicate an incremental loading object to be used by FreeType.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-index.html b/Build/source/libs/freetype2/docs/reference/ft2-index.html
deleted file mode 100644
index ce600c54cda..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-index.html
+++ /dev/null
@@ -1,284 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<table align=center border=0 cellpadding=0 cellspacing=0>
-<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_ATOM</a></td><td><a href="ft2-list_processing.html#FT_List_Find">FT_List_Find</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a></td><td><a href="ft2-list_processing.html#FT_List_Insert">FT_List_Insert</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_SCALE</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a></td><td><a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_NONE</a></td><td><a href="ft2-list_processing.html#FT_List_Iterator">FT_List_Iterator</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_Property">BDF_Property</a></td><td><a href="ft2-list_processing.html#FT_List_Remove">FT_List_Remove</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XY_SCALE</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a></td><td><a href="ft2-list_processing.html#FT_List_Up">FT_List_Up</a></td><td><a href="ft2-base_interface.html#FT_SubGlyph">FT_SubGlyph</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceDict">CID_FaceDict</a></td><td><a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a></td><td><a href="ft2-header_file_macros.html#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a></td><td><a href="ft2-list_processing.html#FT_ListNodeRec">FT_ListNodeRec</a></td><td><a href="ft2-header_file_macros.html#FT_SYSTEM_H">FT_SYSTEM_H</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceInfo">CID_FaceInfo</a></td><td><a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a></td><td><a href="ft2-basic_types.html#FT_Tag">FT_Tag</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_CROP_BITMAP</a></td><td><a href="ft2-computations.html#FT_Tan">FT_Tan</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_Info">CID_Info</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a></td><td><a href="ft2-header_file_macros.html#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_NONE</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_XXX</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td></tr>
-<tr><td><a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></td></tr>
-<tr><td><a href="ft2-system_interface.html#FT_Alloc_Func">FT_Alloc_Func</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a></td><td><a href="ft2-header_file_macros.html#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_PEDANTIC</a></td><td><a href="ft2-header_file_macros.html#FT_TYPES_H">FT_TYPES_H</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI4">FT_ANGLE_PI4</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a></td><td><a href="ft2-basic_types.html#FT_UFWord">FT_UFWord</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Angle">FT_Angle</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD</a></td><td><a href="ft2-basic_types.html#FT_UInt">FT_UInt</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Angle_Diff">FT_Angle_Diff</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD_V</a></td><td><a href="ft2-basic_types.html#FT_UInt16">FT_UInt16</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Atan2">FT_Atan2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a></td><td><a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Attach_File">FT_Attach_File</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td><td><a href="ft2-basic_types.html#FT_ULong">FT_ULong</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a></td><td><a href="ft2-header_file_macros.html#FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BBOX_H">FT_BBOX_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a></td><td><a href="ft2-basic_types.html#FT_UnitVector">FT_UnitVector</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_BBox">FT_BBox</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td><td><a href="ft2-basic_types.html#FT_UShort">FT_UShort</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BDF_H">FT_BDF_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BITMAP_H">FT_BITMAP_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a></td><td><a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td><a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERN</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td><a href="ft2-truetype_tables.html#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a></td><td><a href="ft2-basic_types.html#FT_Long">FT_Long</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="ft2-header_file_macros.html#FT_LZW_H">FT_LZW_H</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_New">FT_Bitmap_New</a></td><td><a href="ft2-header_file_macros.html#FT_MAC_H">FT_MAC_H</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td><a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td><a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GX</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></td><td><a href="ft2-computations.html#FT_Matrix_Invert">FT_Matrix_Invert</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bool">FT_Bool</a></td><td><a href="ft2-computations.html#FT_Matrix_Multiply">FT_Matrix_Multiply</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Byte">FT_Byte</a></td><td><a href="ft2-system_interface.html#FT_Memory">FT_Memory</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a></td><td><a href="ft2-system_interface.html#FT_MemoryRec">FT_MemoryRec</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Axis">FT_MM_Axis</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_H">FT_MODULE_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_CeilFix">FT_CeilFix</a></td><td><a href="ft2-base_interface.html#FT_Module">FT_Module</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Char">FT_Char</a></td><td><a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a></td><td><a href="ft2-module_management.html#FT_Module_Constructor">FT_Module_Constructor</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OT</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a></td><td><a href="ft2-module_management.html#FT_Module_Destructor">FT_Module_Destructor</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CID_H">FT_CID_H</a></td><td><a href="ft2-module_management.html#FT_Module_Requester">FT_Module_Requester</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a></td></tr>
-<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Free">FT_ClassicKern_Free</a></td><td><a href="ft2-header_file_macros.html#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a></td></tr>
-<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td><a href="ft2-computations.html#FT_MulDiv">FT_MulDiv</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></td><td><a href="ft2-computations.html#FT_MulFix">FT_MulFix</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Axis">FT_Var_Axis</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></td><td><a href="ft2-multiple_masters.html#FT_Multi_Master">FT_Multi_Master</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Named_Style">FT_Var_Named_Style</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></td><td><a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a></td><td><a href="ft2-basic_types.html#FT_Vector">FT_Vector</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></td><td><a href="ft2-computations.html#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Cos">FT_Cos</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></td><td><a href="ft2-computations.html#FT_Vector_Length">FT_Vector_Length</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Data">FT_Data</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></td><td><a href="ft2-computations.html#FT_Vector_Polarize">FT_Vector_Polarize</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_DivFix">FT_DivFix</a></td><td><a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a></td><td><a href="ft2-computations.html#FT_Vector_Rotate">FT_Vector_Rotate</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a></td><td><a href="ft2-base_interface.html#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td><a href="ft2-computations.html#FT_Vector_Transform">FT_Vector_Transform</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a></td><td><a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a></td><td><a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a></td><td><a href="ft2-basic_types.html#FT_Offset">FT_Offset</a></td><td><a href="ft2-header_file_macros.html#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_Header">FT_WinFNT_Header</a></td></tr>
-<tr><td><a href="ft2-sizes_management.html#FT_Done_Size">FT_Done_Size</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Driver">FT_Driver</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1250</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1252</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_XXX</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1253</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a></td><td><a href="ft2-header_file_macros.html#FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1254</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a></td><td><a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1255</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a></td><td><a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1256</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Free">FT_OpenType_Free</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1257</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1258</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_LEFT</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1361</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_BIG5</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_RIGHT</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP874</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_GB2312</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_NONE</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP932</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_JOHAB</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP936</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SJIS</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP949</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP950</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_DEFAULT</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_MAC</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a></td><td><a href="ft2-header_file_macros.html#FT_OUTLINE_H">FT_OUTLINE_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_OEM</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_SYMBOL</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_INCLUDE_STUBS</a></td><td><a href="ft2-header_file_macros.html#FT_XFREE86_H">FT_XFREE86_H</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_ERRORS_H">FT_ERRORS_H</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Error">FT_Error</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_New">FTC_CMapCache_New</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a></td><td><a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SMART_DROPOUTS</a></td><td><a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a></td><td><a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_EXTERNAL_STREAM</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Check">FT_Outline_Check</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FAST_GLYPHS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Copy">FT_Outline_Copy</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_New">FTC_ImageCache_New</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a></td><td><a href="ft2-outline_processing.html#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Decompose">FT_Outline_Decompose</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageTypeRec">FTC_ImageTypeRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Done">FT_Outline_Done</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Embolden">FT_Outline_Embolden</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Done">FTC_Manager_Done</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Funcs">FT_Outline_Funcs</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Reset">FTC_Manager_Reset</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Face">FT_Face</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a></td></tr>
-<tr><td><a href="ft2-version.html#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></td><td><a href="ft2-outline_processing.html#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></td><td><a href="ft2-outline_processing.html#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></td><td><a href="ft2-outline_processing.html#FT_Outline_New">FT_Outline_New</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Render">FT_Outline_Render</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Transform">FT_Outline_Transform</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Face_Internal">FT_Face_Internal</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Translate">FT_Outline_Translate</a></td><td><a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a></td></tr>
-<tr><td><a href="ft2-version.html#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td><a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td><a href="ft2-base_interface.html#ft_encoding_xxx">ft_encoding_xxx</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a></td><td><a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_gridfit</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_FloorFix">FT_FloorFix</a></td><td><a href="ft2-truetype_tables.html#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_pixels</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td><a href="ft2-basic_types.html#FT_Palette_Mode">FT_Palette_Mode</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_subpixels</a></td></tr>
-<tr><td><a href="ft2-system_interface.html#FT_Free_Func">FT_Free_Func</a></td><td><a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_truncate</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_FWord">FT_FWord</a></td><td><a href="ft2-header_file_macros.html#FT_PFR_H">FT_PFR_H</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_unscaled</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRAY</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_xxx</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRIDFIT</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_bitmap</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GASP_H">FT_GASP_H</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_composite</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_none</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_GRIDFIT</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_outline</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_SMOOTHING</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_plotter</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_XXX</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_xxx</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Generic">FT_Generic</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a></td><td><a href="ft2-base_interface.html#ft_kerning_default">ft_kerning_default</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Generic_Finalizer">FT_Generic_Finalizer</a></td><td><a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a></td><td><a href="ft2-base_interface.html#ft_kerning_unfitted">ft_kerning_unfitted</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></td><td><a href="ft2-basic_types.html#FT_Pos">FT_Pos</a></td><td><a href="ft2-base_interface.html#ft_kerning_unscaled">ft_kerning_unscaled</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Property">FT_Get_BDF_Property</a></td><td><a href="ft2-bdf_fonts.html#FT_PropertyType">FT_PropertyType</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_driver</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a></td><td><a href="ft2-basic_types.html#FT_PtrDist">FT_PtrDist</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_memory</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_params</a></td></tr>
-<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_pathname</a></td></tr>
-<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Format">FT_Get_CMap_Format</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_stream</a></td></tr>
-<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_even_odd_fill</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_First_Char">FT_Get_First_Char</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_flags</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a></td><td><a href="ft2-raster.html#FT_Raster">FT_Raster</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_high_precision</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Get_Glyph">FT_Get_Glyph</a></td><td><a href="ft2-raster.html#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_ignore_dropouts</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></td><td><a href="ft2-raster.html#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_none</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a></td><td><a href="ft2-raster.html#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_owner</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_MM_Var">FT_Get_MM_Var</a></td><td><a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_reverse_fill</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Get_Module">FT_Get_Module</a></td><td><a href="ft2-raster.html#FT_Raster_NewFunc">FT_Raster_NewFunc</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_single_pass</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_Multi_Master">FT_Get_Multi_Master</a></td><td><a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a></td><td><a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgb</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Name_Index">FT_Get_Name_Index</a></td><td><a href="ft2-raster.html#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></td><td><a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgba</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Next_Char">FT_Get_Next_Char</a></td><td><a href="ft2-raster.html#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_grays</a></td></tr>
-<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></td><td><a href="ft2-raster.html#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_mono</a></td></tr>
-<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></td><td><a href="ft2-header_file_macros.html#FT_RENDER_H">FT_RENDER_H</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_none</a></td></tr>
-<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal2</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal4</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_xxx</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a></td><td><a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_mono</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Get_Renderer">FT_Get_Renderer</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a></td><td><a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_normal</a></td></tr>
-<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></td><td><a href="ft2-system_interface.html#FT_Realloc_Func">FT_Realloc_Func</a></td><td><a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_xxx</a></td></tr>
-<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></td><td><a href="ft2-module_management.html#FT_Remove_Module">FT_Remove_Module</a></td><td><a href="ft2-type1_tables.html#PS_FontInfo">PS_FontInfo</a></td></tr>
-<tr><td><a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></td><td><a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a></td><td><a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a></td><td><a href="ft2-type1_tables.html#PS_Private">PS_Private</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></td><td><a href="ft2-base_interface.html#FT_Renderer">FT_Renderer</a></td><td><a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a></td></tr>
-<tr><td><a href="ft2-truetype_engine.html#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></td><td><a href="ft2-module_management.html#FT_Renderer_Class">FT_Renderer_Class</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_Blend_Flags</a></td></tr>
-<tr><td><a href="ft2-winfnt_fonts.html#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></td><td><a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a></td><td><a href="ft2-type1_tables.html#T1_FontInfo">T1_FontInfo</a></td></tr>
-<tr><td><a href="ft2-font_formats.html#FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></td><td><a href="ft2-computations.html#FT_RoundFix">FT_RoundFix</a></td><td><a href="ft2-type1_tables.html#T1_Private">T1_Private</a></td></tr>
-<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></td><td><a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_CUSTOM</a></td></tr>
-<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></td><td><a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_EXPERT</a></td></tr>
-<tr><td><a href="ft2-mac_specific.html#FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></td><td><a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_LATIN_1</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a></td><td><a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_STANDARD</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a></td><td><a href="ft2-module_management.html#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_DEFAULT</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_ISO_10646</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a></td><td><a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_1_1</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a></td><td><a href="ft2-module_management.html#FT_Set_Renderer">FT_Set_Renderer</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_2_0</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a></td><td><a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_32</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_VARIANT_SELECTOR</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a></td><td><a href="ft2-header_file_macros.html#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td><td><a href="ft2-truetype_tables.html#TT_Header">TT_Header</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GLYPH_H">FT_GLYPH_H</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></td><td><a href="ft2-truetype_tables.html#TT_HoriHeader">TT_HoriHeader</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_10646</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></td><td><a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_7BIT_ASCII</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td><a href="ft2-basic_types.html#FT_Short">FT_Short</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_8859_1</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_BBOX</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_CELL</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Glyph_Metrics">FT_Glyph_Metrics</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_NOMINAL</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARMENIAN</a></td></tr>
-<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_Stroke">FT_Glyph_Stroke</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BENGALI</a></td></tr>
-<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_SCALES</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BURMESE</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></td><td><a href="ft2-header_file_macros.html#FT_SIZES_H">FT_SIZES_H</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_DEVANAGARI</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Transform">FT_Glyph_Transform</a></td><td><a href="ft2-computations.html#FT_Sin">FT_Sin</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEEZ</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a></td><td><a href="ft2-base_interface.html#FT_Size">FT_Size</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEORGIAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a></td><td><a href="ft2-base_interface.html#FT_Size_Internal">FT_Size_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GREEK</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a></td><td><a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GUJARATI</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></td><td><a href="ft2-base_interface.html#FT_Size_Request">FT_Size_Request</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GURMUKHI</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GZIP_H">FT_GZIP_H</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_HEBREW</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></td><td><a href="ft2-base_interface.html#FT_Size_RequestRec">FT_Size_RequestRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_JAPANESE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></td><td><a href="ft2-base_interface.html#FT_SizeRec">FT_SizeRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KANNADA</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></td><td><a href="ft2-base_interface.html#FT_Slot_Internal">FT_Slot_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KHMER</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td><a href="ft2-raster.html#FT_Span">FT_Span</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KOREAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_KERNING">FT_HAS_KERNING</a></td><td><a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_LAOTIAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALAYALAM</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_RIGHT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALDIVIAN</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></td><td><a href="ft2-header_file_macros.html#FT_STROKER_H">FT_STROKER_H</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MONGOLIAN</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_IMAGE_H">FT_IMAGE_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_BUTT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ORIYA</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_SQUARE</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RSYMBOL</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_BEVEL</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RUSSIAN</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SIMPLIFIED_CHINESE</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINDHI</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_BOLD</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINHALESE</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_ITALIC</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SLAVIC</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_Interface">FT_Incremental_Interface</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TAMIL</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></td><td><a href="ft2-system_interface.html#FT_Stream">FT_Stream</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TELUGU</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_Metrics">FT_Incremental_Metrics</a></td><td><a href="ft2-system_interface.html#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_THAI</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></td><td><a href="ft2-system_interface.html#FT_Stream_IoFunc">FT_Stream_IoFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TIBETAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a></td><td><a href="ft2-gzip.html#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TRADITIONAL_CHINESE</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int">FT_Int</a></td><td><a href="ft2-lzw.html#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_UNINTERP</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int16">FT_Int16</a></td><td><a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_VIETNAMESE</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int32">FT_Int32</a></td><td><a href="ft2-system_interface.html#FT_StreamRec">FT_StreamRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></td><td><a href="ft2-basic_types.html#FT_String">FT_String</a></td><td><a href="ft2-truetype_tables.html#TT_MaxProfile">TT_MaxProfile</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_BIG_5</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_GB2312</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_SFNT">FT_IS_SFNT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_JOHAB</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SJIS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Done">FT_Stroker_Done</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SYMBOL_CS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UCS_4</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_Kerning_Mode</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_WANSUNG</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LEGACY</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></td><td><a href="ft2-truetype_tables.html#TT_OS2">TT_OS2</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LIGHT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td><td><a href="ft2-truetype_tables.html#TT_PCLT">TT_PCLT</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LcdFilter</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_LIST_H">FT_LIST_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_New">FT_Stroker_New</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_CUSTOM</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Library">FT_Library</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a></td></tr>
-<tr><td><a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Set">FT_Stroker_Set</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a></td></tr>
-<tr><td><a href="ft2-list_processing.html#FT_List">FT_List</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td></tr>
-<tr><td><a href="ft2-list_processing.html#FT_List_Add">FT_List_Add</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_2X2</a></td><td><a href="ft2-truetype_tables.html#TT_Postscript">TT_Postscript</a></td></tr>
-<tr><td><a href="ft2-list_processing.html#FT_List_Destructor">FT_List_Destructor</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a></td><td><a href="ft2-truetype_tables.html#TT_VertHeader">TT_VertHeader</a></td></tr>
-<tr><td><a href="ft2-list_processing.html#FT_List_Finalize">FT_List_Finalize</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a></td><td></td></tr>
-</table>
-<hr>
-<table><tr><td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<center><font size=-2>generated on Sun Jun 29 09:46:25 2008</font></center></body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-lcd_filtering.html b/Build/source/libs/freetype2/docs/reference/ft2-lcd_filtering.html
deleted file mode 100644
index 5a45e189e44..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-lcd_filtering.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-LCD Filtering
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_LcdFilter">FT_LcdFilter</a></td><td></td><td><a href="#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>The <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> API can be used to specify a low-pass filter which is then applied to LCD-optimized bitmaps generated through <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>. This is useful to reduce color fringes which would occur with unfiltered rendering.</p>
-<p>Note that no filter is active by default, and that this function is <b>not</b> implemented in default builds of the library. You need to #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your &lsquo;ftoption.h&rsquo; file in order to activate it.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_LcdFilter">FT_LcdFilter</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_LcdFilter_
- {
- <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a> = 0,
- <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a> = 1,
- <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LIGHT</a> = 2,
- <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LEGACY</a> = 16,
-
- FT_LCD_FILTER_MAX /* do not remove */
-
- } <b>FT_LcdFilter</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of values to identify various types of LCD filters.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_LCD_FILTER_NONE</b></td><td>
-<p>Do not perform filtering. When used with subpixel rendering, this results in sometimes severe color fringes.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LCD_FILTER_DEFAULT</b></td><td>
-<p>The default filter reduces color fringes considerably, at the cost of a slight blurriness in the output.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LCD_FILTER_LIGHT</b></td><td>
-<p>The light filter is a variant that produces less blurriness at the cost of slightly more color fringes than the default one. It might be better, depending on taste, your monitor, or your personal vision.</p>
-</td></tr>
-<tr valign=top><td><b>FT_LCD_FILTER_LEGACY</b></td><td>
-<p>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 <b>and</b> high-quality hinted fonts are used.</p>
-<p>This filter is only provided for comparison purposes, and might be disabled or stay unsupported in the future.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.0</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Library_SetLcdFilter</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LcdFilter</a> filter );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function is used to apply color filtering to LCD decimated bitmaps, like the ones used when calling <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a> with <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a> or <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the target library instance.</p>
-</td></tr>
-<tr valign=top><td><b>filter</b></td><td>
-<p>The filter type.</p>
-<p>You can use <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a> here to disable this feature, or <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a> to use a default filter that should work well on most LCD screens.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This feature is always disabled by default. Clients must make an explicit call to this function with a &lsquo;filter&rsquo; value other than <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a> in order to enable it.</p>
-<p>Due to <b>PATENTS</b> covering subpixel rendering, this function doesn't do anything except returning &lsquo;FT_Err_Unimplemented_Feature&rsquo; 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.</p>
-<p>The filter affects glyph bitmaps rendered through <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>, <a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a>, <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>, and <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>.</p>
-<p>It does <i>not</i> affect the output of <a href="ft2-outline_processing.html#FT_Outline_Render">FT_Outline_Render</a> and <a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a>.</p>
-<p>If this feature is activated, the dimensions of LCD glyph bitmaps are either larger or taller than the dimensions of the corresponding outline with regards to the pixel grid. For example, for <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>, the filter adds up to 3&nbsp;pixels to the left, and up to 3&nbsp;pixels to the right.</p>
-<p>The bitmap offset values are adjusted correctly, so clients shouldn't need to modify their layout and glyph positioning code when enabling the filter.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.0</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-list_processing.html b/Build/source/libs/freetype2/docs/reference/ft2-list_processing.html
deleted file mode 100644
index 91aabf68519..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-list_processing.html
+++ /dev/null
@@ -1,483 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-List Processing
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_List">FT_List</a></td><td></td><td><a href="#FT_List_Add">FT_List_Add</a></td><td></td><td><a href="#FT_List_Iterate">FT_List_Iterate</a></td></tr>
-<tr><td></td><td><a href="#FT_ListNode">FT_ListNode</a></td><td></td><td><a href="#FT_List_Insert">FT_List_Insert</a></td><td></td><td><a href="#FT_List_Destructor">FT_List_Destructor</a></td></tr>
-<tr><td></td><td><a href="#FT_ListRec">FT_ListRec</a></td><td></td><td><a href="#FT_List_Remove">FT_List_Remove</a></td><td></td><td><a href="#FT_List_Finalize">FT_List_Finalize</a></td></tr>
-<tr><td></td><td><a href="#FT_ListNodeRec">FT_ListNodeRec</a></td><td></td><td><a href="#FT_List_Up">FT_List_Up</a></td><td></td><td></td></tr>
-<tr><td></td><td><a href="#FT_List_Find">FT_List_Find</a></td><td></td><td><a href="#FT_List_Iterator">FT_List_Iterator</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains various definitions related to list processing using doubly-linked nodes.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List">FT_List</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListRec_* <b>FT_List</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a list record (see <a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a>).</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ListNode">FT_ListNode</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListNodeRec_* <b>FT_ListNode</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Many elements and objects in FreeType are listed through an <a href="ft2-list_processing.html#FT_List">FT_List</a> record (see <a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a>). As its name suggests, an FT_ListNode is a handle to a single list element.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ListRec">FT_ListRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListRec_
- {
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> head;
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> tail;
-
- } <b>FT_ListRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>head</b></td><td>
-<p>The head (first element) of doubly-linked list.</p>
-</td></tr>
-<tr valign=top><td><b>tail</b></td><td>
-<p>The tail (last element) of doubly-linked list.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_ListNodeRec">FT_ListNodeRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPES_H (freetype/fttypes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListNodeRec_
- {
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> prev;
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> next;
- <span class="keyword">void</span>* data;
-
- } <b>FT_ListNodeRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to hold a single list element.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>prev</b></td><td>
-<p>The previous element in the list. NULL if first.</p>
-</td></tr>
-<tr valign=top><td><b>next</b></td><td>
-<p>The next element in the list. NULL if last.</p>
-</td></tr>
-<tr valign=top><td><b>data</b></td><td>
-<p>A typeless pointer to the listed object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Find">FT_List_Find</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> )
- <b>FT_List_Find</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
- <span class="keyword">void</span>* data );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Find the list node for a given listed object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>list</b></td><td>
-<p>A pointer to the parent list.</p>
-</td></tr>
-<tr valign=top><td><b>data</b></td><td>
-<p>The address of the listed object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>List node. NULL if it wasn't found.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Add">FT_List_Add</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_List_Add</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Append an element to the end of a list.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>list</b></td><td>
-<p>A pointer to the parent list.</p>
-</td></tr>
-<tr valign=top><td><b>node</b></td><td>
-<p>The node to append.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Insert">FT_List_Insert</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_List_Insert</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Insert an element at the head of a list.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>list</b></td><td>
-<p>A pointer to parent list.</p>
-</td></tr>
-<tr valign=top><td><b>node</b></td><td>
-<p>The node to insert.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Remove">FT_List_Remove</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_List_Remove</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Remove a node from a list. This function doesn't check whether the node is in the list!</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>node</b></td><td>
-<p>The node to remove.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>list</b></td><td>
-<p>A pointer to the parent list.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Up">FT_List_Up</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_List_Up</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
- <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Move a node to the head/top of a list. Used to maintain LRU lists.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>list</b></td><td>
-<p>A pointer to the parent list.</p>
-</td></tr>
-<tr valign=top><td><b>node</b></td><td>
-<p>The node to move.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Iterator">FT_List_Iterator</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
- (*<b>FT_List_Iterator</b>)( <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node,
- <span class="keyword">void</span>* user );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An FT_List iterator function which is called during a list parse by <a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>node</b></td><td>
-<p>The current iteration list node.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A typeless pointer passed to <a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a>. Can be used to point to the iteration's state.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Iterate">FT_List_Iterate</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_List_Iterate</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
- <a href="ft2-list_processing.html#FT_List_Iterator">FT_List_Iterator</a> iterator,
- <span class="keyword">void</span>* user );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>list</b></td><td>
-<p>A handle to the list.</p>
-</td></tr>
-<tr valign=top><td><b>iterator</b></td><td>
-<p>An iterator function, called on each node of the list.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A user-supplied field which is passed as the second argument to the iterator.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The result (a FreeType error code) of the last iterator call.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Destructor">FT_List_Destructor</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_List_Destructor</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <span class="keyword">void</span>* data,
- <span class="keyword">void</span>* user );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An <a href="ft2-list_processing.html#FT_List">FT_List</a> iterator function which is called during a list finalization by <a href="ft2-list_processing.html#FT_List_Finalize">FT_List_Finalize</a> to destroy all elements in a given list.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>system</b></td><td>
-<p>The current system object.</p>
-</td></tr>
-<tr valign=top><td><b>data</b></td><td>
-<p>The current object to destroy.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A typeless pointer passed to <a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a>. It can be used to point to the iteration's state.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_List_Finalize">FT_List_Finalize</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LIST_H (freetype/ftlist.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_List_Finalize</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
- <a href="ft2-list_processing.html#FT_List_Destructor">FT_List_Destructor</a> destroy,
- <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <span class="keyword">void</span>* user );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Destroy all elements in the list as well as the list itself.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>list</b></td><td>
-<p>A handle to the list.</p>
-</td></tr>
-<tr valign=top><td><b>destroy</b></td><td>
-<p>A list destructor that will be applied to each element of the list.</p>
-</td></tr>
-<tr valign=top><td><b>memory</b></td><td>
-<p>The current memory object which handles deallocation.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A user-supplied field which is passed as the last argument to the destructor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-lzw.html b/Build/source/libs/freetype2/docs/reference/ft2-lzw.html
deleted file mode 100644
index a601fd2f4cd..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-lzw.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-LZW Streams
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of LZW-specific functions.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_LZW_H (freetype/ftlzw.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Stream_OpenLZW</b>( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream,
- <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> source );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Open a new stream to parse LZW-compressed font files. This is mainly used to support the compressed &lsquo;*.pcf.Z&rsquo; fonts that come with XFree86.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stream</b></td><td>
-<p>The target embedding stream.</p>
-</td></tr>
-<tr valign=top><td><b>source</b></td><td>
-<p>The source stream.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The source stream must be opened <i>before</i> calling this function.</p>
-<p>Calling the internal function &lsquo;FT_Stream_Close&rsquo; on the new stream will <b>not</b> call &lsquo;FT_Stream_Close&rsquo; on the source stream. None of the stream objects will be released to the heap.</p>
-<p>The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream</p>
-<p>In certain builds of the library, LZW compression recognition is automatically handled when calling <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>. 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.</p>
-<p>This function may return &lsquo;FT_Err_Unimplemented_Feature&rsquo; if your build of FreeType was not compiled with LZW support.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-mac_specific.html b/Build/source/libs/freetype2/docs/reference/ft2-mac_specific.html
deleted file mode 100644
index dca7d110ec0..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-mac_specific.html
+++ /dev/null
@@ -1,368 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Mac Specific Interface
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></td><td></td><td><a href="#FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></td></tr>
-<tr><td></td><td><a href="#FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></td><td></td><td><a href="#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></td></tr>
-<tr><td></td><td><a href="#FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></td><td></td><td><a href="#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>The following definitions are only available if FreeType is compiled on a Macintosh.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MAC_H (freetype/ftmac.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_New_Face_From_FOND</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- Handle fond,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface )
- FT_DEPRECATED_ATTRIBUTE;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new face object from a FOND resource.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>fond</b></td><td>
-<p>A FOND resource.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>Only supported for the -1 &lsquo;sanity check&rsquo; special case.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A handle to a new face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>notes</b></em></td></tr><tr><td>
-<p>This function can be used to create <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects from fonts that are installed in the system as follows.</p>
-<pre class="colored">
- fond = GetResource( 'FOND', fontName );
- error = FT_New_Face_From_FOND( library, fond, 0, &amp;face );
-</pre>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MAC_H (freetype/ftmac.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_GetFile_From_Mac_Name</b>( <span class="keyword">const</span> <span class="keyword">char</span>* fontName,
- FSSpec* pathSpec,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* face_index )
- FT_DEPRECATED_ATTRIBUTE;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return an FSSpec for the disk file containing the named font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>fontName</b></td><td>
-<p>Mac OS name of the font (e.g., Times New Roman Bold).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>pathSpec</b></td><td>
-<p>FSSpec to the file. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>Index of the face. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MAC_H (freetype/ftmac.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_GetFile_From_Mac_ATS_Name</b>( <span class="keyword">const</span> <span class="keyword">char</span>* fontName,
- FSSpec* pathSpec,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* face_index )
- FT_DEPRECATED_ATTRIBUTE;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return an FSSpec for the disk file containing the named font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>fontName</b></td><td>
-<p>Mac OS name of the font in ATS framework.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>pathSpec</b></td><td>
-<p>FSSpec to the file. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>Index of the face. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MAC_H (freetype/ftmac.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_GetFilePath_From_Mac_ATS_Name</b>( <span class="keyword">const</span> <span class="keyword">char</span>* fontName,
- UInt8* path,
- UInt32 maxPathSize,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* face_index )
- FT_DEPRECATED_ATTRIBUTE;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a pathname of the disk file and face index for given font name which is handled by ATS framework.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>fontName</b></td><td>
-<p>Mac OS name of the font in ATS framework.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>path</b></td><td>
-<p>Buffer to store pathname of the file. For passing to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>. The client must allocate this buffer before calling this function.</p>
-</td></tr>
-<tr valign=top><td><b>maxPathSize</b></td><td>
-<p>Lengths of the buffer &lsquo;path&rsquo; that client allocated.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>Index of the face. For passing to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MAC_H (freetype/ftmac.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_New_Face_From_FSSpec</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> FSSpec *spec,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface )
- FT_DEPRECATED_ATTRIBUTE;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new face object from a given resource and typeface index using an FSSpec to the font file.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>spec</b></td><td>
-<p>FSSpec to the font file.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>The index of the face within the resource. The first face has index&nbsp;0.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A handle to a new face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p><a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a> is identical to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> except it accepts an FSSpec instead of a path.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MAC_H (freetype/ftmac.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_New_Face_From_FSRef</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> FSRef *ref,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
- <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface )
- FT_DEPRECATED_ATTRIBUTE;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new face object from a given resource and typeface index using an FSRef to the font file.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library resource.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>spec</b></td><td>
-<p>FSRef to the font file.</p>
-</td></tr>
-<tr valign=top><td><b>face_index</b></td><td>
-<p>The index of the face within the resource. The first face has index&nbsp;0.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aface</b></td><td>
-<p>A handle to a new face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p><a href="ft2-mac_specific.html#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a> is identical to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> except it accepts an FSRef instead of a path.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-module_management.html b/Build/source/libs/freetype2/docs/reference/ft2-module_management.html
deleted file mode 100644
index ab553dfe5f3..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-module_management.html
+++ /dev/null
@@ -1,626 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Module Management
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Module_Constructor">FT_Module_Constructor</a></td><td></td><td><a href="#FT_Get_Module">FT_Get_Module</a></td><td></td><td><a href="#FT_Add_Default_Modules">FT_Add_Default_Modules</a></td></tr>
-<tr><td></td><td><a href="#FT_Module_Destructor">FT_Module_Destructor</a></td><td></td><td><a href="#FT_Remove_Module">FT_Remove_Module</a></td><td></td><td><a href="#FT_Renderer_Class">FT_Renderer_Class</a></td></tr>
-<tr><td></td><td><a href="#FT_Module_Requester">FT_Module_Requester</a></td><td></td><td><a href="#FT_New_Library">FT_New_Library</a></td><td></td><td><a href="#FT_Get_Renderer">FT_Get_Renderer</a></td></tr>
-<tr><td></td><td><a href="#FT_Module_Class">FT_Module_Class</a></td><td></td><td><a href="#FT_Done_Library">FT_Done_Library</a></td><td></td><td><a href="#FT_Set_Renderer">FT_Set_Renderer</a></td></tr>
-<tr><td></td><td><a href="#FT_Add_Module">FT_Add_Module</a></td><td></td><td><a href="#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>The definitions below are used to manage modules within FreeType. Modules can be added, upgraded, and removed at runtime.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Module_Constructor">FT_Module_Constructor</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
- (*<b>FT_Module_Constructor</b>)( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to initialize (not create) a new module object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>module</b></td><td>
-<p>The module to initialize.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Module_Destructor">FT_Module_Destructor</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Module_Destructor</b>)( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to finalize (not destroy) a given module object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>module</b></td><td>
-<p>The module to finalize.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Module_Requester">FT_Module_Requester</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> FT_Module_Interface
- (*<b>FT_Module_Requester</b>)( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module,
- <span class="keyword">const</span> <span class="keyword">char</span>* name );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to query a given module for a specific interface.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>module</b></td><td>
-<p>The module to finalize.</p>
-</td></tr>
-<tr valign=top><td><b>name</b></td><td>
-<p>The name of the interface in the module.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Module_Class">FT_Module_Class</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Module_Class_
- {
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> module_flags;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> module_size;
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_String">FT_String</a>* module_name;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> module_version;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> module_requires;
-
- <span class="keyword">const</span> <span class="keyword">void</span>* module_interface;
-
- <a href="ft2-module_management.html#FT_Module_Constructor">FT_Module_Constructor</a> module_init;
- <a href="ft2-module_management.html#FT_Module_Destructor">FT_Module_Destructor</a> module_done;
- <a href="ft2-module_management.html#FT_Module_Requester">FT_Module_Requester</a> get_interface;
-
- } <b>FT_Module_Class</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The module class descriptor.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>module_flags</b></td><td>
-<p>Bit flags describing the module.</p>
-</td></tr>
-<tr valign=top><td><b>module_size</b></td><td>
-<p>The size of one module object/instance in bytes.</p>
-</td></tr>
-<tr valign=top><td><b>module_name</b></td><td>
-<p>The name of the module.</p>
-</td></tr>
-<tr valign=top><td><b>module_version</b></td><td>
-<p>The version, as a 16.16 fixed number (major.minor).</p>
-</td></tr>
-<tr valign=top><td><b>module_requires</b></td><td>
-<p>The version of FreeType this module requires, as a 16.16 fixed number (major.minor). Starts at version 2.0, i.e., 0x20000.</p>
-</td></tr>
-<tr valign=top><td><b>module_init</b></td><td>
-<p>The initializing function.</p>
-</td></tr>
-<tr valign=top><td><b>module_done</b></td><td>
-<p>The finalizing function.</p>
-</td></tr>
-<tr valign=top><td><b>get_interface</b></td><td>
-<p>The interface requesting function.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Add_Module">FT_Add_Module</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Add_Module</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a>* clazz );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Add a new module to a given library instance.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>clazz</b></td><td>
-<p>A pointer to class descriptor for the module.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Module">FT_Get_Module</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> )
- <b>FT_Get_Module</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <span class="keyword">const</span> <span class="keyword">char</span>* module_name );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Find a module by its name.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library object.</p>
-</td></tr>
-<tr valign=top><td><b>module_name</b></td><td>
-<p>The module's name (as an ASCII string).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A module handle. 0&nbsp;if none was found.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>FreeType's internal modules aren't documented very well, and you should look up the source code for details.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Remove_Module">FT_Remove_Module</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Remove_Module</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Remove a given module from a library instance.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>module</b></td><td>
-<p>A handle to a module object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The module object is destroyed by the function in case of success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_New_Library">FT_New_Library</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_New_Library</b>( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <a href="ft2-base_interface.html#FT_Library">FT_Library</a> *alibrary );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>memory</b></td><td>
-<p>A handle to the original memory object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>alibrary</b></td><td>
-<p>A pointer to handle of a new library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Done_Library">FT_Done_Library</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Done_Library</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Discard a given library object. This closes all drivers and discards all resource objects.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the target library.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Set_Debug_Hook</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> hook_index,
- FT_DebugHook_Func debug_hook );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Set a debug hook function for debugging the interpreter of a font format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>hook_index</b></td><td>
-<p>The index of the debug hook. You should use the values defined in &lsquo;ftobjs.h&rsquo;, e.g., &lsquo;FT_DEBUG_HOOK_TRUETYPE&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>debug_hook</b></td><td>
-<p>The function used to debug the interpreter.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Currently, four debug hook slots are available, but only two (for the TrueType and the Type&nbsp;1 interpreter) are defined.</p>
-<p>Since the internal headers of FreeType are no longer installed, the symbol &lsquo;FT_DEBUG_HOOK_TRUETYPE&rsquo; isn't available publicly. This is a bug and will be fixed in a forthcoming release.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Add_Default_Modules">FT_Add_Default_Modules</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Add_Default_Modules</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Add the set of default drivers to a given library object. This is only useful when you create a library object with <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> (usually to plug a custom memory manager).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a new library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Renderer_Class">FT_Renderer_Class</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_RENDER_H (freetype/ftrender.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Renderer_Class_
- {
- <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a> root;
-
- <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> glyph_format;
-
- FT_Renderer_RenderFunc render_glyph;
- FT_Renderer_TransformFunc transform_glyph;
- FT_Renderer_GetCBoxFunc get_glyph_cbox;
- FT_Renderer_SetModeFunc set_mode;
-
- <a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a>* raster_class;
-
- } <b>FT_Renderer_Class</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The renderer module class descriptor.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>root</b></td><td>
-<p>The root <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a> fields.</p>
-</td></tr>
-<tr valign=top><td><b>glyph_format</b></td><td>
-<p>The glyph image format this renderer handles.</p>
-</td></tr>
-<tr valign=top><td><b>render_glyph</b></td><td>
-<p>A method used to render the image that is in a given glyph slot into a bitmap.</p>
-</td></tr>
-<tr valign=top><td><b>transform_glyph</b></td><td>
-<p>A method used to transform the image that is in a given glyph slot.</p>
-</td></tr>
-<tr valign=top><td><b>get_glyph_cbox</b></td><td>
-<p>A method used to access the glyph's cbox.</p>
-</td></tr>
-<tr valign=top><td><b>set_mode</b></td><td>
-<p>A method used to pass additional parameters.</p>
-</td></tr>
-<tr valign=top><td><b>raster_class</b></td><td>
-<p>For <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a> renderers only. This is a pointer to its raster's class.</p>
-</td></tr>
-<tr valign=top><td><b>raster</b></td><td>
-<p>For <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a> renderers only. This is a pointer to the corresponding raster object, if any.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Renderer">FT_Get_Renderer</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_RENDER_H (freetype/ftrender.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-base_interface.html#FT_Renderer">FT_Renderer</a> )
- <b>FT_Get_Renderer</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> format );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the current renderer for a given glyph format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library object.</p>
-</td></tr>
-<tr valign=top><td><b>format</b></td><td>
-<p>The glyph format.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A renderer handle. 0&nbsp;if none found.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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.</p>
-<p>To add a new renderer, simply use <a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a>. To retrieve a renderer by its name, use <a href="ft2-module_management.html#FT_Get_Module">FT_Get_Module</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Renderer">FT_Set_Renderer</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_RENDER_H (freetype/ftrender.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_Renderer</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-base_interface.html#FT_Renderer">FT_Renderer</a> renderer,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_params,
- <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a>* parameters );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Set the current renderer to use, and set additional mode.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>renderer</b></td><td>
-<p>A handle to the renderer object.</p>
-</td></tr>
-<tr valign=top><td><b>num_params</b></td><td>
-<p>The number of additional parameters.</p>
-</td></tr>
-<tr valign=top><td><b>parameters</b></td><td>
-<p>Additional parameters.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>In case of success, the renderer will be used to convert glyph images in the renderer's known format into bitmaps.</p>
-<p>This doesn't change the current renderer for other formats.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-multiple_masters.html b/Build/source/libs/freetype2/docs/reference/ft2-multiple_masters.html
deleted file mode 100644
index 48c57d7fa6c..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-multiple_masters.html
+++ /dev/null
@@ -1,511 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Multiple Masters
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_MM_Axis">FT_MM_Axis</a></td><td></td><td><a href="#FT_Get_MM_Var">FT_Get_MM_Var</a></td></tr>
-<tr><td></td><td><a href="#FT_Multi_Master">FT_Multi_Master</a></td><td></td><td><a href="#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td></tr>
-<tr><td></td><td><a href="#FT_Var_Axis">FT_Var_Axis</a></td><td></td><td><a href="#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td></tr>
-<tr><td></td><td><a href="#FT_Var_Named_Style">FT_Var_Named_Style</a></td><td></td><td><a href="#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td></tr>
-<tr><td></td><td><a href="#FT_MM_Var">FT_MM_Var</a></td><td></td><td><a href="#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></td></tr>
-<tr><td></td><td><a href="#FT_Get_Multi_Master">FT_Get_Multi_Master</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-<p>George Williams has extended this interface to make it work with both Type&nbsp;1 Multiple Masters fonts and GX distortable (var) fonts. Some of these routines only work with MM fonts, others will work with both types. They are similar enough that a consistent interface makes sense.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MM_Axis">FT_MM_Axis</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MM_Axis_
- {
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* name;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> minimum;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> maximum;
-
- } <b>FT_MM_Axis</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple structure used to model a given axis in design space for Multiple Masters fonts.</p>
-<p>This structure can't be used for GX var fonts.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>name</b></td><td>
-<p>The axis's name.</p>
-</td></tr>
-<tr valign=top><td><b>minimum</b></td><td>
-<p>The axis's minimum design coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>maximum</b></td><td>
-<p>The axis's maximum design coordinate.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Multi_Master">FT_Multi_Master</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Multi_Master_
- {
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_axis;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_designs;
- <a href="ft2-multiple_masters.html#FT_MM_Axis">FT_MM_Axis</a> axis[T1_MAX_MM_AXIS];
-
- } <b>FT_Multi_Master</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model the axes and space of a Multiple Masters font.</p>
-<p>This structure can't be used for GX var fonts.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>num_axis</b></td><td>
-<p>Number of axes. Cannot exceed&nbsp;4.</p>
-</td></tr>
-<tr valign=top><td><b>num_designs</b></td><td>
-<p>Number of designs; should be normally 2^num_axis even though the Type&nbsp;1 specification strangely allows for intermediate designs to be present. This number cannot exceed&nbsp;16.</p>
-</td></tr>
-<tr valign=top><td><b>axis</b></td><td>
-<p>A table of axis descriptors.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Var_Axis">FT_Var_Axis</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Var_Axis_
- {
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* name;
-
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> minimum;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> def;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> maximum;
-
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> tag;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> strid;
-
- } <b>FT_Var_Axis</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple structure used to model a given axis in design space for Multiple Masters and GX var fonts.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>name</b></td><td>
-<p>The axis's name. Not always meaningful for GX.</p>
-</td></tr>
-<tr valign=top><td><b>minimum</b></td><td>
-<p>The axis's minimum design coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>def</b></td><td>
-<p>The axis's default design coordinate. FreeType computes meaningful default values for MM; it is then an integer value, not in 16.16 format.</p>
-</td></tr>
-<tr valign=top><td><b>maximum</b></td><td>
-<p>The axis's maximum design coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>tag</b></td><td>
-<p>The axis's tag (the GX equivalent to &lsquo;name&rsquo;). FreeType provides default values for MM if possible.</p>
-</td></tr>
-<tr valign=top><td><b>strid</b></td><td>
-<p>The entry in &lsquo;name&rsquo; table (another GX version of &lsquo;name&rsquo;). Not meaningful for MM.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Var_Named_Style">FT_Var_Named_Style</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Var_Named_Style_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> strid;
-
- } <b>FT_Var_Named_Style</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A simple structure used to model a named style in a GX var font.</p>
-<p>This structure can't be used for MM fonts.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>coords</b></td><td>
-<p>The design coordinates for this style. This is an array with one entry for each axis.</p>
-</td></tr>
-<tr valign=top><td><b>strid</b></td><td>
-<p>The entry in &lsquo;name&rsquo; table identifying this style.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MM_Var">FT_MM_Var</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MM_Var_
- {
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_axis;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_designs;
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_namedstyles;
- <a href="ft2-multiple_masters.html#FT_Var_Axis">FT_Var_Axis</a>* axis;
- <a href="ft2-multiple_masters.html#FT_Var_Named_Style">FT_Var_Named_Style</a>* namedstyle;
-
- } <b>FT_MM_Var</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model the axes and space of a Multiple Masters or GX var distortable font.</p>
-<p>Some fields are specific to one format and not to the other.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>num_axis</b></td><td>
-<p>The number of axes. The maximum value is&nbsp;4 for MM; no limit in GX.</p>
-</td></tr>
-<tr valign=top><td><b>num_designs</b></td><td>
-<p>The number of designs; should be normally 2^num_axis for MM fonts. Not meaningful for GX (where every glyph could have a different number of designs).</p>
-</td></tr>
-<tr valign=top><td><b>num_namedstyles</b></td><td>
-<p>The number of named styles; only meaningful for GX which allows certain design coordinates to have a string ID (in the &lsquo;name&rsquo; table) associated with them. The font can tell the user that, for example, Weight=1.5 is &lsquo;Bold&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>axis</b></td><td>
-<p>A table of axis descriptors. GX fonts contain slightly more data than MM.</p>
-</td></tr>
-<tr valign=top><td><b>namedstyles</b></td><td>
-<p>A table of named styles. Only meaningful with GX.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Multi_Master">FT_Get_Multi_Master</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Multi_Master</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-multiple_masters.html#FT_Multi_Master">FT_Multi_Master</a> *amaster );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the Multiple Master descriptor of a given font.</p>
-<p>This function can't be used with GX fonts.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>amaster</b></td><td>
-<p>The Multiple Masters descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_MM_Var">FT_Get_MM_Var</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_MM_Var</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a>* *amaster );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the Multiple Master/GX var descriptor of a given font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>amaster</b></td><td>
-<p>The Multiple Masters descriptor. Allocates a data structure, which the user must free (a single call to FT_FREE will do it).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_MM_Design_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* coords );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>For Multiple Masters fonts, choose an interpolated font design through design coordinates.</p>
-<p>This function can't be used with GX fonts.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>num_coords</b></td><td>
-<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
-</td></tr>
-<tr valign=top><td><b>coords</b></td><td>
-<p>An array of design coordinates.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_Var_Design_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>For Multiple Master or GX Var fonts, choose an interpolated font design through design coordinates.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>num_coords</b></td><td>
-<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
-</td></tr>
-<tr valign=top><td><b>coords</b></td><td>
-<p>An array of design coordinates.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_MM_Blend_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>For Multiple Masters and GX var fonts, choose an interpolated font design through normalized blend coordinates.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>num_coords</b></td><td>
-<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
-</td></tr>
-<tr valign=top><td><b>coords</b></td><td>
-<p>The design coordinates array (each element must be between 0 and 1.0).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Set_Var_Blend_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This is another name of <a href="ft2-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-ot_validation.html b/Build/source/libs/freetype2/docs/reference/ft2-ot_validation.html
deleted file mode 100644
index a02b83494aa..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-ot_validation.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-OpenType Validation
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td><td></td><td><a href="#FT_OpenType_Validate">FT_OpenType_Validate</a></td><td></td><td><a href="#FT_OpenType_Free">FT_OpenType_Free</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of functions to validate some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a> 0x0100
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a> 0x0200
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a> 0x0400
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a> 0x0800
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a> 0x1000
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a> 0x2000
-
-#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OT</a> <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a> | \
- <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit-field constants used with <a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a> to indicate which OpenType tables should be validated.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_VALIDATE_BASE</b></td><td>
-<p>Validate BASE table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_GDEF</b></td><td>
-<p>Validate GDEF table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_GPOS</b></td><td>
-<p>Validate GPOS table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_GSUB</b></td><td>
-<p>Validate GSUB table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_JSTF</b></td><td>
-<p>Validate JSTF table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_MATH</b></td><td>
-<p>Validate MATH table.</p>
-</td></tr>
-<tr valign=top><td><b>FT_VALIDATE_OT</b></td><td>
-<p>Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OpenType_Validate">FT_OpenType_Validate</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_OpenType_Validate</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> validation_flags,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *BASE_table,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *GDEF_table,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *GPOS_table,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *GSUB_table,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *JSTF_table );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>validation_flags</b></td><td>
-<p>A bit field which specifies the tables to be validated. See <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a> for possible values.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>BASE_table</b></td><td>
-<p>A pointer to the BASE table.</p>
-</td></tr>
-<tr valign=top><td><b>GDEF_table</b></td><td>
-<p>A pointer to the GDEF table.</p>
-</td></tr>
-<tr valign=top><td><b>GPOS_table</b></td><td>
-<p>A pointer to the GPOS table.</p>
-</td></tr>
-<tr valign=top><td><b>GSUB_table</b></td><td>
-<p>A pointer to the GSUB table.</p>
-</td></tr>
-<tr valign=top><td><b>JSTF_table</b></td><td>
-<p>A pointer to the JSTF table.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function only works with OpenType fonts, returning an error otherwise.</p>
-<p>After use, the application should deallocate the five tables with <a href="ft2-ot_validation.html#FT_OpenType_Free">FT_OpenType_Free</a>. A NULL value indicates that the table either doesn't exist in the font, or the application hasn't asked for validation.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OpenType_Free">FT_OpenType_Free</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_OpenType_Free</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> table );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Free the buffer allocated by OpenType validator.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>table</b></td><td>
-<p>The pointer to the buffer that is allocated by <a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function must be used to free the buffer allocated by <a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a> only.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-outline_processing.html b/Build/source/libs/freetype2/docs/reference/ft2-outline_processing.html
deleted file mode 100644
index 91763f6d43a..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-outline_processing.html
+++ /dev/null
@@ -1,1105 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Outline Processing
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Outline">FT_Outline</a></td><td></td><td><a href="#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a></td><td></td><td><a href="#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_New">FT_Outline_New</a></td><td></td><td><a href="#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Done">FT_Outline_Done</a></td><td></td><td><a href="#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Copy">FT_Outline_Copy</a></td><td></td><td><a href="#FT_Outline_Funcs">FT_Outline_Funcs</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Translate">FT_Outline_Translate</a></td><td></td><td><a href="#FT_Outline_Decompose">FT_Outline_Decompose</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Transform">FT_Outline_Transform</a></td><td></td><td><a href="#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Embolden">FT_Outline_Embolden</a></td><td></td><td><a href="#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td></td><td><a href="#FT_Outline_Render">FT_Outline_Render</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Check">FT_Outline_Check</a></td><td></td><td><a href="#FT_Orientation">FT_Orientation</a></td></tr>
-<tr><td></td><td><a href="#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></td><td></td><td><a href="#FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></td></tr>
-<tr><td></td><td><a href="#ft_outline_flags">ft_outline_flags</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains routines used to create and destroy scalable glyph images known as &lsquo;outlines&rsquo;. These can also be measured, transformed, and converted into bitmaps and pixmaps.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline">FT_Outline</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Outline_
- {
- <span class="keyword">short</span> n_contours; /* number of contours in glyph */
- <span class="keyword">short</span> n_points; /* number of points in the glyph */
-
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* points; /* the outline's points */
- <span class="keyword">char</span>* tags; /* the points flags */
- <span class="keyword">short</span>* contours; /* the contour end points */
-
- <span class="keyword">int</span> flags; /* outline masks */
-
- } <b>FT_Outline</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This structure is used to describe an outline to the scan-line converter.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>n_contours</b></td><td>
-<p>The number of contours in the outline.</p>
-</td></tr>
-<tr valign=top><td><b>n_points</b></td><td>
-<p>The number of points in the outline.</p>
-</td></tr>
-<tr valign=top><td><b>points</b></td><td>
-<p>A pointer to an array of &lsquo;n_points&rsquo; <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> elements, giving the outline's point coordinates.</p>
-</td></tr>
-<tr valign=top><td><b>tags</b></td><td>
-<p>A pointer to an array of &lsquo;n_points&rsquo; chars, giving each outline point's type. If bit&nbsp;0 is unset, the point is &lsquo;off&rsquo; the curve, i.e., a Bézier control point, while it is &lsquo;on&rsquo; when set.</p>
-<p>Bit&nbsp;1 is meaningful for &lsquo;off&rsquo; points only. If set, it indicates a third-order Bézier arc control point; and a second-order control point if unset.</p>
-</td></tr>
-<tr valign=top><td><b>contours</b></td><td>
-<p>An array of &lsquo;n_contours&rsquo; shorts, giving the end point of each contour within the outline. For example, the first contour is defined by the points &lsquo;0&rsquo; to &lsquo;contours[0]&rsquo;, the second one is defined by the points &lsquo;contours[0]+1&rsquo; to &lsquo;contours[1]&rsquo;, etc.</p>
-</td></tr>
-<tr valign=top><td><b>flags</b></td><td>
-<p>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 <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a> 0x0
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a> 0x1
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a> 0x2
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a> 0x4
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a> 0x8
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SMART_DROPOUTS</a> 0x10
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_INCLUDE_STUBS</a> 0x20
-
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a> 0x100
-#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a> 0x200
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit-field constants use for the flags in an outline's &lsquo;flags&rsquo; field.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_OUTLINE_NONE</b></td><td>
-<p>Value&nbsp;0 is reserved.</p>
-</td></tr>
-<tr valign=top><td><b>FT_OUTLINE_OWNER</b></td><td>
-<p>If set, this flag indicates that the outline's field arrays (i.e., &lsquo;points&rsquo;, &lsquo;flags&rsquo;, and &lsquo;contours&rsquo;) are &lsquo;owned&rsquo; by the outline object, and should thus be freed when it is destroyed.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_OUTLINE_EVEN_ODD_FILL</b></td></tr>
-<tr valign=top><td></td><td>
-<p>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 raster).</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_OUTLINE_REVERSE_FILL</b></td></tr>
-<tr valign=top><td></td><td>
-<p>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&nbsp;1 fonts). This flag is ignored by the scan converter.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_OUTLINE_IGNORE_DROPOUTS</b></td></tr>
-<tr valign=top><td></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_OUTLINE_SMART_DROPOUTS</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Select smart dropout control. If unset, use simple dropout control. Ignored if <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a> is set.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_OUTLINE_INCLUDE_STUBS</b></td></tr>
-<tr valign=top><td></td><td>
-<p>If set, turn pixels on for &lsquo;stubs&rsquo;, otherwise exclude them. Ignored if <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a> is set.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_OUTLINE_HIGH_PRECISION</b></td></tr>
-<tr valign=top><td></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_OUTLINE_SINGLE_PASS</b></td><td>
-<p>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.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Please refer to the description of the &lsquo;SCANTYPE&rsquo; instruction in the OpenType specification (in file &lsquo;ttinst1.doc&rsquo;) how simple drop-outs, smart drop-outs, and stubs are defined.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_New">FT_Outline_New</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_New</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> numPoints,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> numContours,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> *anoutline );
-
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- FT_Outline_New_Internal( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> numPoints,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> numContours,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> *anoutline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new outline of a given size.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to the library object from where the outline is allocated. Note however that the new outline will <b>not</b> necessarily be <b>freed</b>, when destroying the library, by <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a>.</p>
-</td></tr>
-<tr valign=top><td><b>numPoints</b></td><td>
-<p>The maximal number of points within the outline.</p>
-</td></tr>
-<tr valign=top><td><b>numContours</b></td><td>
-<p>The maximal number of contours within the outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>anoutline</b></td><td>
-<p>A handle to the new outline. NULL in case of error.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The reason why this function takes a &lsquo;library&rsquo; parameter is simply to use the library's memory allocator.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Done">FT_Outline_Done</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Done</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- FT_Outline_Done_Internal( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Destroy an outline created with <a href="ft2-outline_processing.html#FT_Outline_New">FT_Outline_New</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle of the library object used to allocate the outline.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the outline object to be discarded.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If the outline's &lsquo;owner&rsquo; field is not set, only the outline descriptor will be released.</p>
-<p>The reason why this function takes an &lsquo;library&rsquo; parameter is simply to use ft_mem_free().</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Copy">FT_Outline_Copy</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Copy</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* source,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> *target );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Copy an outline into another one. Both objects must have the same sizes (number of points &amp; number of contours) when this function is called.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>source</b></td><td>
-<p>A handle to the source outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>target</b></td><td>
-<p>A handle to the target outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Translate">FT_Outline_Translate</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Outline_Translate</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xOffset,
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> yOffset );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Apply a simple translation to the points of an outline.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the target outline descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>xOffset</b></td><td>
-<p>The horizontal offset.</p>
-</td></tr>
-<tr valign=top><td><b>yOffset</b></td><td>
-<p>The vertical offset.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Transform">FT_Outline_Transform</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Outline_Transform</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Apply a simple 2x2 matrix to all of an outline's points. Useful for applying rotations, slanting, flipping, etc.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the target outline descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>matrix</b></td><td>
-<p>A pointer to the transformation matrix.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You can use <a href="ft2-outline_processing.html#FT_Outline_Translate">FT_Outline_Translate</a> if you need to translate the outline's points.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Embolden">FT_Outline_Embolden</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Embolden</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> strength );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Embolden an outline. The new outline will be at most 4&nbsp;times &lsquo;strength&rsquo; pixels wider and higher. You may think of the left and bottom borders as unchanged.</p>
-<p>Negative &lsquo;strength&rsquo; values to reduce the outline thickness are possible also.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A handle to the target outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>strength</b></td><td>
-<p>How strong the glyph is emboldened. Expressed in 26.6 pixel format.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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.</p>
-<p>Example call:</p>
-<pre class="colored">
- FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );
- if ( face-&gt;slot-&gt;format == FT_GLYPH_FORMAT_OUTLINE )
- FT_Outline_Embolden( &amp;face-&gt;slot-&gt;outline, strength );
-</pre>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Reverse">FT_Outline_Reverse</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Outline_Reverse</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Reverse the drawing direction of an outline. This is used to ensure consistent fill conventions for mirrored glyphs.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the target outline descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This functions toggles the bit flag <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a> in the outline's &lsquo;flags&rsquo; field.</p>
-<p>It shouldn't be used by a normal client application, unless it knows what it is doing.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Check">FT_Outline_Check</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Check</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Check the contents of an outline descriptor.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A handle to a source outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_BBOX_H (freetype/ftbbox.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Get_BBox</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> *abbox );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Compute the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm which returns <i>very</i> quickly when the two boxes coincide. Otherwise, the outline Bézier arcs are traversed to extract their extrema.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the source outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>abbox</b></td><td>
-<p>The outline's exact bounding box.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="ft_outline_flags">ft_outline_flags</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_none</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a>
-#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_owner</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a>
-#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_even_odd_fill</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a>
-#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_reverse_fill</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a>
-#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_ignore_dropouts</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a>
-#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_high_precision</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a>
-#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_single_pass</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These constants are deprecated. Please use the corresponding <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a> values.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>ft_outline_none</b></td><td>
-<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_outline_owner</b></td><td>
-<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_outline_even_odd_fill</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_outline_reverse_fill</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_outline_ignore_dropouts</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a>.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>ft_outline_high_precision</b></td></tr>
-<tr valign=top><td></td><td>
-<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a>.</p>
-</td></tr>
-<tr valign=top><td><b>ft_outline_single_pass</b></td><td>
-<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Outline_MoveToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
- <span class="keyword">void</span>* user );
-
-#define FT_Outline_MoveTo_Func <b>FT_Outline_MoveToFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function pointer type used to describe the signature of a &lsquo;move to&rsquo; function during outline walking/decomposition.</p>
-<p>A &lsquo;move to&rsquo; is emitted to start a new contour in an outline.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the target point of the &lsquo;move to&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Outline_LineToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
- <span class="keyword">void</span>* user );
-
-#define FT_Outline_LineTo_Func <b>FT_Outline_LineToFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function pointer type used to describe the signature of a &lsquo;line to&rsquo; function during outline walking/decomposition.</p>
-<p>A &lsquo;line to&rsquo; is emitted to indicate a segment in the outline.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the target point of the &lsquo;line to&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Outline_ConicToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
- <span class="keyword">void</span>* user );
-
-#define FT_Outline_ConicTo_Func <b>FT_Outline_ConicToFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function pointer type use to describe the signature of a &lsquo;conic to&rsquo; function during outline walking/decomposition.</p>
-<p>A &lsquo;conic to&rsquo; is emitted to indicate a second-order Bézier arc in the outline.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>control</b></td><td>
-<p>An intermediate control point between the last position and the new target in &lsquo;to&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the target end point of the conic arc.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Outline_CubicToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control1,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control2,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
- <span class="keyword">void</span>* user );
-
-#define FT_Outline_CubicTo_Func <b>FT_Outline_CubicToFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function pointer type used to describe the signature of a &lsquo;cubic to&rsquo; function during outline walking/decomposition.</p>
-<p>A &lsquo;cubic to&rsquo; is emitted to indicate a third-order Bézier arc.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>control1</b></td><td>
-<p>A pointer to the first Bézier control point.</p>
-</td></tr>
-<tr valign=top><td><b>control2</b></td><td>
-<p>A pointer to the second Bézier control point.</p>
-</td></tr>
-<tr valign=top><td><b>to</b></td><td>
-<p>A pointer to the target end point.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Funcs">FT_Outline_Funcs</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Outline_Funcs_
- {
- <a href="ft2-outline_processing.html#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a> move_to;
- <a href="ft2-outline_processing.html#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a> line_to;
- <a href="ft2-outline_processing.html#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a> conic_to;
- <a href="ft2-outline_processing.html#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a> cubic_to;
-
- <span class="keyword">int</span> shift;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> delta;
-
- } <b>FT_Outline_Funcs</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Béziers, as well as &lsquo;move to&rsquo; and &lsquo;close to&rsquo; operations.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>move_to</b></td><td>
-<p>The &lsquo;move to&rsquo; emitter.</p>
-</td></tr>
-<tr valign=top><td><b>line_to</b></td><td>
-<p>The segment emitter.</p>
-</td></tr>
-<tr valign=top><td><b>conic_to</b></td><td>
-<p>The second-order Bézier arc emitter.</p>
-</td></tr>
-<tr valign=top><td><b>cubic_to</b></td><td>
-<p>The third-order Bézier arc emitter.</p>
-</td></tr>
-<tr valign=top><td><b>shift</b></td><td>
-<p>The shift that is applied to coordinates before they are sent to the emitter.</p>
-</td></tr>
-<tr valign=top><td><b>delta</b></td><td>
-<p>The delta that is applied to coordinates before they are sent to the emitter, but after the shift.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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:</p>
-<pre class="colored">
- x' = (x &lt;&lt; shift) - delta
- y' = (x &lt;&lt; shift) - delta
-</pre>
-<p>Set the value of &lsquo;shift&rsquo; and &lsquo;delta&rsquo; to&nbsp;0 to get the original point coordinates.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Decompose">FT_Outline_Decompose</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Decompose</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline_Funcs">FT_Outline_Funcs</a>* func_interface,
- <span class="keyword">void</span>* user );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Walk over an outline's structure to decompose it into individual segments and Bézier arcs. This function is also able to emit &lsquo;move to&rsquo; and &lsquo;close to&rsquo; operations to indicate the start and end of new contours in the outline.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the source target.</p>
-</td></tr>
-<tr valign=top><td><b>func_interface</b></td><td>
-<p>A table of &lsquo;emitters&rsquo;, i.e,. function pointers called during decomposition to indicate path operations.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>user</b></td><td>
-<p>A typeless pointer which is passed to each emitter during the decomposition. It can be used to store the state during the decomposition.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Outline_Get_CBox</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> *acbox );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return an outline's &lsquo;control box&rsquo;. 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 which contains Bézier outside arcs).</p>
-<p>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 &lsquo;ftbbox&rsquo; component which is dedicated to this single task.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the source outline descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>acbox</b></td><td>
-<p>The outline's control box.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Get_Bitmap</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a FreeType library object.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the source outline descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>abitmap</b></td><td>
-<p>A pointer to the target bitmap descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>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 &lsquo;abitmap&rsquo; should be set accordingly.</p>
-<p>It will use the raster corresponding to the default glyph format.</p>
-<p>The value of the &lsquo;num_grays&rsquo; field in &lsquo;abitmap&rsquo; is ignored. If you select the gray-level rasterizer, and you want less than 256 gray levels, you have to use <a href="ft2-outline_processing.html#FT_Outline_Render">FT_Outline_Render</a> directly.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Render">FT_Outline_Render</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Outline_Render</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
- <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a>* params );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Render an outline within a bitmap using the current scan-convert. This functions uses an <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure as an argument, allowing advanced features like direct composition, translucency, etc.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A handle to a FreeType library object.</p>
-</td></tr>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A pointer to the source outline descriptor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>params</b></td><td>
-<p>A pointer to an <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure used to describe the rendering operation.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You should know what you are doing and how <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> works to use this function.</p>
-<p>The field &lsquo;params.source&rsquo; will be set to &lsquo;outline&rsquo; before the scan converter is called, which means that the value you give to it is actually ignored.</p>
-<p>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 <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a> value of the &lsquo;flags&rsquo; field in the <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure for more details.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Orientation">FT_Orientation</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Orientation_
- {
- <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a> = 0,
- <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a> = 1,
- <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_RIGHT</a> = <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a>,
- <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_LEFT</a> = <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a>,
- <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_NONE</a>
-
- } <b>FT_Orientation</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of values used to describe an outline's contour orientation.</p>
-<p>The TrueType and PostScript specifications use different conventions to determine whether outline contours should be filled or unfilled.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td colspan=0><b>FT_ORIENTATION_TRUETYPE</b></td></tr>
-<tr valign=top><td></td><td>
-<p>According to the TrueType specification, clockwise contours must be filled, and counter-clockwise ones must be unfilled.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ORIENTATION_POSTSCRIPT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>According to the PostScript specification, counter-clockwise contours must be filled, and clockwise ones must be unfilled.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ORIENTATION_FILL_RIGHT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>This is identical to <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a>, but is used to remember that in TrueType, everything that is to the right of the drawing direction of a contour must be filled.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_ORIENTATION_FILL_LEFT</b></td></tr>
-<tr valign=top><td></td><td>
-<p>This is identical to <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a>, but is used to remember that in PostScript, everything that is to the left of the drawing direction of a contour must be filled.</p>
-</td></tr>
-<tr valign=top><td><b>FT_ORIENTATION_NONE</b></td><td>
-<p>The orientation cannot be determined. That is, different parts of the glyph have different orientation.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_OUTLINE_H (freetype/ftoutln.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a> )
- <b>FT_Outline_Get_Orientation</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This function analyzes a glyph outline and tries to compute its fill orientation (see <a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a>). This is done by computing the direction of each global horizontal and/or vertical extrema within the outline.</p>
-<p>Note that this will return <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a> for empty outlines.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>outline</b></td><td>
-<p>A handle to the source outline.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The orientation.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-pfr_fonts.html b/Build/source/libs/freetype2/docs/reference/ft2-pfr_fonts.html
deleted file mode 100644
index b69b8f1a3c8..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-pfr_fonts.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-PFR Fonts
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></td><td></td><td><a href="#FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></td><td></td><td><a href="#FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of PFR-specific functions.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_PFR_H (freetype/ftpfr.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_PFR_Metrics</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *aoutline_resolution,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *ametrics_resolution,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *ametrics_x_scale,
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *ametrics_y_scale );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the outline and metrics resolutions of a given PFR face.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>Handle to the input face. It can be a non-PFR face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aoutline_resolution</b></td><td>
-<p>Outline resolution. This is equivalent to &lsquo;face-&gt;units_per_EM&rsquo;. Optional (parameter can be NULL).</p>
-</td></tr>
-<tr valign=top><td><b>ametrics_resolution</b></td><td>
-<p>Metrics resolution. This is equivalent to &lsquo;outline_resolution&rsquo; for non-PFR fonts. Optional (parameter can be NULL).</p>
-</td></tr>
-<tr valign=top><td><b>ametrics_x_scale</b></td><td>
-<p>A 16.16 fixed-point number used to scale distance expressed in metrics units to device sub-pixels. This is equivalent to &lsquo;face-&gt;size-&gt;x_scale&rsquo;, but for metrics only. Optional (parameter can be NULL)</p>
-</td></tr>
-<tr valign=top><td><b>ametrics_y_scale</b></td><td>
-<p>Same as &lsquo;ametrics_x_scale&rsquo; but for the vertical direction. optional (parameter can be NULL)</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If the input face is not a PFR, this function will return an error. However, in all cases, it will return valid values.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_PFR_H (freetype/ftpfr.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_PFR_Kerning</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> left,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> right,
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> *avector );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the kerning pair corresponding to two glyphs in a PFR face. The distance is expressed in metrics units, unlike the result of <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>left</b></td><td>
-<p>Index of the left glyph.</p>
-</td></tr>
-<tr valign=top><td><b>right</b></td><td>
-<p>Index of the right glyph.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>avector</b></td><td>
-<p>A kerning vector.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function always return distances in original PFR metrics units. This is unlike <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a> with the <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a> mode, which always returns distances converted to outline units.</p>
-<p>You can use the value of the &lsquo;x_scale&rsquo; and &lsquo;y_scale&rsquo; parameters returned by <a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a> to scale these to device sub-pixels.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_PFR_H (freetype/ftpfr.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_PFR_Advance</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> *aadvance );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a given glyph advance, expressed in original metrics units, from a PFR font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-<tr valign=top><td><b>gindex</b></td><td>
-<p>The glyph index.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aadvance</b></td><td>
-<p>The glyph advance in metrics units.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You can use the &lsquo;x_scale&rsquo; or &lsquo;y_scale&rsquo; results of <a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a> to convert the advance to device sub-pixels (i.e., 1/64th of pixels).</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-raster.html b/Build/source/libs/freetype2/docs/reference/ft2-raster.html
deleted file mode 100644
index 7f34007c6be..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-raster.html
+++ /dev/null
@@ -1,606 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Scanline Converter
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Raster">FT_Raster</a></td><td></td><td><a href="#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td></td><td><a href="#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_Span">FT_Span</a></td><td></td><td><a href="#FT_Raster_Params">FT_Raster_Params</a></td><td></td><td><a href="#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_SpanFunc">FT_SpanFunc</a></td><td></td><td><a href="#FT_Raster_NewFunc">FT_Raster_NewFunc</a></td><td></td><td><a href="#FT_Raster_Funcs">FT_Raster_Funcs</a></td></tr>
-<tr><td></td><td><a href="#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></td><td></td><td><a href="#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></td><td></td><td></td></tr>
-<tr><td></td><td><a href="#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></td><td></td><td><a href="#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains technical definitions.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster">FT_Raster</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RasterRec_* <b>FT_Raster</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Span">FT_Span</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Span_
- {
- <span class="keyword">short</span> x;
- <span class="keyword">unsigned</span> <span class="keyword">short</span> len;
- <span class="keyword">unsigned</span> <span class="keyword">char</span> coverage;
-
- } <b>FT_Span</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a single span of gray (or black) pixels when rendering a monochrome or anti-aliased bitmap.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>x</b></td><td>
-<p>The span's horizontal start position.</p>
-</td></tr>
-<tr valign=top><td><b>len</b></td><td>
-<p>The span's length in pixels.</p>
-</td></tr>
-<tr valign=top><td><b>coverage</b></td><td>
-<p>The span color/coverage, ranging from 0 (background) to 255 (foreground). Only used for anti-aliased rendering.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This structure is used by the span drawing callback type named <a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a> which takes the y&nbsp;coordinate of the span as a a parameter.</p>
-<p>The coverage value is always between 0 and 255. If you want less gray values, the callback function has to reduce them.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SpanFunc">FT_SpanFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_SpanFunc</b>)( <span class="keyword">int</span> y,
- <span class="keyword">int</span> count,
- <span class="keyword">const</span> <a href="ft2-raster.html#FT_Span">FT_Span</a>* spans,
- <span class="keyword">void</span>* user );
-
-#define FT_Raster_Span_Func <b>FT_SpanFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>y</b></td><td>
-<p>The scanline's y&nbsp;coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>count</b></td><td>
-<p>The number of spans to draw on this scanline.</p>
-</td></tr>
-<tr valign=top><td><b>spans</b></td><td>
-<p>A table of &lsquo;count&rsquo; spans to draw on the scanline.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>User-supplied data that is passed to the callback.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This callback allows client applications to directly render the gray spans of the anti-aliased bitmap to any kind of surfaces.</p>
-<p>This can be used to write anti-aliased outlines directly to a given background bitmap, and even perform translucency.</p>
-<p>Note that the &lsquo;count&rsquo; field cannot be greater than a fixed value defined by the &lsquo;FT_MAX_GRAY_SPANS&rsquo; configuration macro in &lsquo;ftoption.h&rsquo;. By default, this value is set to&nbsp;32, which means that if there are more than 32&nbsp;spans on a given scanline, the callback is called several times with the same &lsquo;y&rsquo; parameter in order to draw all callbacks.</p>
-<p>Otherwise, the callback is only called once per scan-line, and only for those scanlines that do have &lsquo;gray&rsquo; pixels on them.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Raster_BitTest_Func</b>)( <span class="keyword">int</span> y,
- <span class="keyword">int</span> x,
- <span class="keyword">void</span>* user );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>THIS TYPE IS DEPRECATED. DO NOT USE IT.</p>
-<p>A function used as a call-back by the monochrome scan-converter to test whether a given target pixel is already set to the drawing &lsquo;color&rsquo;. These tests are crucial to implement drop-out control per-se the TrueType spec.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>y</b></td><td>
-<p>The pixel's y&nbsp;coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>x</b></td><td>
-<p>The pixel's x&nbsp;coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>User-supplied data that is passed to the callback.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>1&nbsp;if the pixel is &lsquo;set&rsquo;, 0&nbsp;otherwise.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Raster_BitSet_Func</b>)( <span class="keyword">int</span> y,
- <span class="keyword">int</span> x,
- <span class="keyword">void</span>* user );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>THIS TYPE IS DEPRECATED. DO NOT USE IT.</p>
-<p>A function used as a call-back by the monochrome scan-converter to set an individual target pixel. This is crucial to implement drop-out control according to the TrueType specification.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>y</b></td><td>
-<p>The pixel's y&nbsp;coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>x</b></td><td>
-<p>The pixel's x&nbsp;coordinate.</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>User-supplied data that is passed to the callback.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>1&nbsp;if the pixel is &lsquo;set&rsquo;, 0&nbsp;otherwise.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a> 0x0
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a> 0x1
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a> 0x2
-#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a> 0x4
-
- /* deprecated */
-#define ft_raster_flag_default <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a>
-#define ft_raster_flag_aa <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a>
-#define ft_raster_flag_direct <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a>
-#define ft_raster_flag_clip <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of bit flag constants as used in the &lsquo;flags&rsquo; field of a <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_RASTER_FLAG_DEFAULT</b></td><td>
-<p>This value is 0.</p>
-</td></tr>
-<tr valign=top><td><b>FT_RASTER_FLAG_AA</b></td><td>
-<p>This flag is set to indicate that an anti-aliased glyph image should be generated. Otherwise, it will be monochrome (1-bit).</p>
-</td></tr>
-<tr valign=top><td><b>FT_RASTER_FLAG_DIRECT</b></td><td>
-<p>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 <i>must</i> be zeroed before rendering.</p>
-<p>Note that for now, direct rendering is only possible with anti-aliased glyphs.</p>
-</td></tr>
-<tr valign=top><td><b>FT_RASTER_FLAG_CLIP</b></td><td>
-<p>This flag is only used in direct rendering mode. If set, the output will be clipped to a box specified in the &lsquo;clip_box&rsquo; field of the <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure.</p>
-<p>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.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_Params">FT_Raster_Params</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Raster_Params_
- {
- <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a>* target;
- <span class="keyword">const</span> <span class="keyword">void</span>* source;
- <span class="keyword">int</span> flags;
- <a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a> gray_spans;
- <a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a> black_spans;
- <a href="ft2-raster.html#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a> bit_test; /* doesn't work! */
- <a href="ft2-raster.html#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a> bit_set; /* doesn't work! */
- <span class="keyword">void</span>* user;
- <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> clip_box;
-
- } <b>FT_Raster_Params</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure to hold the arguments used by a raster's render function.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>target</b></td><td>
-<p>The target bitmap.</p>
-</td></tr>
-<tr valign=top><td><b>source</b></td><td>
-<p>A pointer to the source glyph image (e.g., an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>).</p>
-</td></tr>
-<tr valign=top><td><b>flags</b></td><td>
-<p>The rendering flags.</p>
-</td></tr>
-<tr valign=top><td><b>gray_spans</b></td><td>
-<p>The gray span drawing callback.</p>
-</td></tr>
-<tr valign=top><td><b>black_spans</b></td><td>
-<p>The black span drawing callback.</p>
-</td></tr>
-<tr valign=top><td><b>bit_test</b></td><td>
-<p>The bit test callback. UNIMPLEMENTED!</p>
-</td></tr>
-<tr valign=top><td><b>bit_set</b></td><td>
-<p>The bit set callback. UNIMPLEMENTED!</p>
-</td></tr>
-<tr valign=top><td><b>user</b></td><td>
-<p>User-supplied data that is passed to each drawing callback.</p>
-</td></tr>
-<tr valign=top><td><b>clip_box</b></td><td>
-<p>An optional clipping box. It is only used in direct rendering mode. Note that coordinates here should be expressed in <i>integer</i> pixels (and not in 26.6 fixed-point units).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>An anti-aliased glyph bitmap is drawn if the <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a> bit flag is set in the &lsquo;flags&rsquo; field, otherwise a monochrome bitmap is generated.</p>
-<p>If the <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a> bit flag is set in &lsquo;flags&rsquo;, the raster will call the &lsquo;gray_spans&rsquo; callback to draw gray pixel spans, in the case of an aa glyph bitmap, it will call &lsquo;black_spans&rsquo;, and &lsquo;bit_test&rsquo; and &lsquo;bit_set&rsquo; in the case of a monochrome bitmap. This allows direct composition over a pre-existing bitmap through user-provided callbacks to perform the span drawing/composition.</p>
-<p>Note that the &lsquo;bit_test&rsquo; and &lsquo;bit_set&rsquo; callbacks are required when rendering a monochrome bitmap, as they are crucial to implement correct drop-out control as defined in the TrueType specification.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_NewFunc">FT_Raster_NewFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Raster_NewFunc</b>)( <span class="keyword">void</span>* memory,
- <a href="ft2-raster.html#FT_Raster">FT_Raster</a>* raster );
-
-#define FT_Raster_New_Func <b>FT_Raster_NewFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to create a new raster object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>memory</b></td><td>
-<p>A handle to the memory allocator.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>raster</b></td><td>
-<p>A handle to the new raster object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The &lsquo;memory&rsquo; parameter is a typeless pointer in order to avoid un-wanted dependencies on the rest of the FreeType code. In practice, it is an <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> object, i.e., a handle to the standard FreeType memory allocator. However, this field can be completely ignored by a given raster implementation.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Raster_DoneFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster );
-
-#define FT_Raster_Done_Func <b>FT_Raster_DoneFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to destroy a given raster object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>raster</b></td><td>
-<p>A handle to the raster object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Raster_ResetFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster,
- <span class="keyword">unsigned</span> <span class="keyword">char</span>* pool_base,
- <span class="keyword">unsigned</span> <span class="keyword">long</span> pool_size );
-
-#define FT_Raster_Reset_Func <b>FT_Raster_ResetFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>FreeType provides an area of memory called the &lsquo;render pool&rsquo;, available to all registered rasters. This pool can be freely used during a given scan-conversion but is shared by all rasters. Its content is thus transient.</p>
-<p>This function is called each time the render pool changes, or just after a new raster object is created.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>raster</b></td><td>
-<p>A handle to the new raster object.</p>
-</td></tr>
-<tr valign=top><td><b>pool_base</b></td><td>
-<p>The address in memory of the render pool.</p>
-</td></tr>
-<tr valign=top><td><b>pool_size</b></td><td>
-<p>The size in bytes of the render pool.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Rasters can ignore the render pool and rely on dynamic memory allocation if they want to (a handle to the memory allocator is passed to the raster constructor). However, this is not recommended for efficiency purposes.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Raster_SetModeFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster,
- <span class="keyword">unsigned</span> <span class="keyword">long</span> mode,
- <span class="keyword">void</span>* args );
-
-#define FT_Raster_Set_Mode_Func <b>FT_Raster_SetModeFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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 &lsquo;features&rsquo; in a given raster module.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>raster</b></td><td>
-<p>A handle to the new raster object.</p>
-</td></tr>
-<tr valign=top><td><b>mode</b></td><td>
-<p>A 4-byte tag used to name the mode or property.</p>
-</td></tr>
-<tr valign=top><td><b>args</b></td><td>
-<p>A pointer to the new mode/property to use.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">int</span>
- (*<b>FT_Raster_RenderFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster,
- <span class="keyword">const</span> <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a>* params );
-
-#define FT_Raster_Render_Func <b>FT_Raster_RenderFunc</b>
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Invoke a given raster to scan-convert a given glyph image into a target bitmap.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>raster</b></td><td>
-<p>A handle to the raster object.</p>
-</td></tr>
-<tr valign=top><td><b>params</b></td><td>
-<p>A pointer to an <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure used to store the rendering parameters.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The exact format of the source image depends on the raster's glyph format defined in its <a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a> structure. It can be an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> or anything else in order to support a large array of glyph formats.</p>
-<p>Note also that the render function can fail and return a &lsquo;FT_Err_Unimplemented_Feature&rsquo; error code if the raster used does not support direct composition.</p>
-<p>XXX: For now, the standard raster doesn't support direct composition but this should change for the final release (see the files &lsquo;demos/src/ftgrays.c&rsquo; and &lsquo;demos/src/ftgrays2.c&rsquo; for examples of distinct implementations which support direct composition).</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Raster_Funcs">FT_Raster_Funcs</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_IMAGE_H (freetype/ftimage.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Raster_Funcs_
- {
- <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> glyph_format;
- <a href="ft2-raster.html#FT_Raster_NewFunc">FT_Raster_NewFunc</a> raster_new;
- <a href="ft2-raster.html#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a> raster_reset;
- <a href="ft2-raster.html#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a> raster_set_mode;
- <a href="ft2-raster.html#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a> raster_render;
- <a href="ft2-raster.html#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a> raster_done;
-
- } <b>FT_Raster_Funcs</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to describe a given raster class to the library.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>glyph_format</b></td><td>
-<p>The supported glyph format for this raster.</p>
-</td></tr>
-<tr valign=top><td><b>raster_new</b></td><td>
-<p>The raster constructor.</p>
-</td></tr>
-<tr valign=top><td><b>raster_reset</b></td><td>
-<p>Used to reset the render pool within the raster.</p>
-</td></tr>
-<tr valign=top><td><b>raster_render</b></td><td>
-<p>A function to render a glyph into a given bitmap.</p>
-</td></tr>
-<tr valign=top><td><b>raster_done</b></td><td>
-<p>The raster destructor.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-sfnt_names.html b/Build/source/libs/freetype2/docs/reference/ft2-sfnt_names.html
deleted file mode 100644
index 5a08a1fc158..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-sfnt_names.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-SFNT Names
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_SfntName">FT_SfntName</a></td><td></td><td><a href="#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></td><td></td><td><a href="#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>The TrueType and OpenType specifications allow the inclusion of a special &lsquo;names table&rsquo; in font files. This table contains textual (and internationalized) information regarding the font, like family name, copyright, version, etc.</p>
-<p>The definitions below are used to access them if available.</p>
-<p>Note that this has nothing to do with glyph names!</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_SfntName">FT_SfntName</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SfntName_
- {
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> platform_id;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> encoding_id;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> language_id;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> name_id;
-
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* string; /* this string is *not* null-terminated! */
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> string_len; /* in bytes */
-
- } <b>FT_SfntName</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model an SFNT &lsquo;name&rsquo; table entry.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>platform_id</b></td><td>
-<p>The platform ID for &lsquo;string&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>encoding_id</b></td><td>
-<p>The encoding ID for &lsquo;string&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>language_id</b></td><td>
-<p>The language ID for &lsquo;string&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>name_id</b></td><td>
-<p>An identifier for &lsquo;string&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>string</b></td><td>
-<p>The &lsquo;name&rsquo; string. Note that its format differs depending on the (platform,encoding) pair. It can be a Pascal String, a UTF-16 one, etc.</p>
-<p>Generally speaking, the string is not zero-terminated. Please refer to the TrueType specification for details.</p>
-</td></tr>
-<tr valign=top><td><b>string_len</b></td><td>
-<p>The length of &lsquo;string&rsquo; in bytes.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>Possible values for &lsquo;platform_id&rsquo;, &lsquo;encoding_id&rsquo;, &lsquo;language_id&rsquo;, and &lsquo;name_id&rsquo; are given in the file &lsquo;ttnameid.h&rsquo;. For details please refer to the TrueType or OpenType specification.</p>
-<p>See also <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a>, <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a>, <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a>, <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a>, and <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a>.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
- <b>FT_Get_Sfnt_Name_Count</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the number of name strings in the SFNT &lsquo;name&rsquo; table.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The number of strings in the &lsquo;name&rsquo; table.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_Sfnt_Name</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> idx,
- <a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a> *aname );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve a string of the SFNT &lsquo;name&rsquo; table for a given index.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-<tr valign=top><td><b>idx</b></td><td>
-<p>The index of the &lsquo;name&rsquo; string.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aname</b></td><td>
-<p>The indexed <a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a> structure.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The &lsquo;string&rsquo; array returned in the &lsquo;aname&rsquo; structure is not null-terminated.</p>
-<p>Use <a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a> to get the total number of available &lsquo;name&rsquo; table entries, then do a loop until you get the right platform, encoding, and name ID.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-sizes_management.html b/Build/source/libs/freetype2/docs/reference/ft2-sizes_management.html
deleted file mode 100644
index a05b8a94fa4..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-sizes_management.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Size Management
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_New_Size">FT_New_Size</a></td><td></td><td><a href="#FT_Done_Size">FT_Done_Size</a></td><td></td><td><a href="#FT_Activate_Size">FT_Activate_Size</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>When creating a new face object (e.g., with <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>), an <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object is automatically created and used to store all pixel-size dependent information, available in the &lsquo;face-&gt;size&rsquo; field.</p>
-<p>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 <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a> and <a href="ft2-sizes_management.html#FT_Done_Size">FT_Done_Size</a>.</p>
-<p>Note that <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a> and <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a> only modify the contents of the current &lsquo;active&rsquo; size; you thus need to use <a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a> to change it.</p>
-<p>99% of applications won't need the functions provided here, especially if they use the caching sub-system, so be cautious when using these.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_New_Size">FT_New_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SIZES_H (freetype/ftsizes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_New_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-base_interface.html#FT_Size">FT_Size</a>* size );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Create a new size object from a given face object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to a parent face object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>asize</b></td><td>
-<p>A handle to a new size object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>You need to call <a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a> in order to select the new size for upcoming calls to <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a>, <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a>, <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>, <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>, etc.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Done_Size">FT_Done_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SIZES_H (freetype/ftsizes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Done_Size</b>( <a href="ft2-base_interface.html#FT_Size">FT_Size</a> size );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Discard a given size object. Note that <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> automatically discards all size objects allocated with <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>size</b></td><td>
-<p>A handle to a target size object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Activate_Size">FT_Activate_Size</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SIZES_H (freetype/ftsizes.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Activate_Size</b>( <a href="ft2-base_interface.html#FT_Size">FT_Size</a> size );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Even though it is possible to create several size objects for a given face (see <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a> for details), functions like <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a> only use the last-created one to determine the &lsquo;current character pixel size&rsquo;.</p>
-<p>This function can be used to &lsquo;activate&rsquo; a previously created size object.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>size</b></td><td>
-<p>A handle to a target size object.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If &lsquo;face&rsquo; is the size's parent face object, this function changes the value of &lsquo;face-&gt;size&rsquo; to the input size handle.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-system_interface.html b/Build/source/libs/freetype2/docs/reference/ft2-system_interface.html
deleted file mode 100644
index d9db0a69f10..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-system_interface.html
+++ /dev/null
@@ -1,415 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-System Interface
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_Memory">FT_Memory</a></td><td></td><td><a href="#FT_MemoryRec">FT_MemoryRec</a></td><td></td><td><a href="#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></td></tr>
-<tr><td></td><td><a href="#FT_Alloc_Func">FT_Alloc_Func</a></td><td></td><td><a href="#FT_Stream">FT_Stream</a></td><td></td><td><a href="#FT_StreamRec">FT_StreamRec</a></td></tr>
-<tr><td></td><td><a href="#FT_Free_Func">FT_Free_Func</a></td><td></td><td><a href="#FT_StreamDesc">FT_StreamDesc</a></td><td></td><td></td></tr>
-<tr><td></td><td><a href="#FT_Realloc_Func">FT_Realloc_Func</a></td><td></td><td><a href="#FT_Stream_IoFunc">FT_Stream_IoFunc</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Memory">FT_Memory</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MemoryRec_* <b>FT_Memory</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a given memory manager object, defined with an <a href="ft2-system_interface.html#FT_MemoryRec">FT_MemoryRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Alloc_Func">FT_Alloc_Func</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>*
- (*<b>FT_Alloc_Func</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <span class="keyword">long</span> size );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to allocate &lsquo;size&rsquo; bytes from &lsquo;memory&rsquo;.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>memory</b></td><td>
-<p>A handle to the source memory manager.</p>
-</td></tr>
-<tr valign=top><td><b>size</b></td><td>
-<p>The size in bytes to allocate.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Address of new memory block. 0&nbsp;in case of failure.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Free_Func">FT_Free_Func</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Free_Func</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <span class="keyword">void</span>* block );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to release a given block of memory.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>memory</b></td><td>
-<p>A handle to the source memory manager.</p>
-</td></tr>
-<tr valign=top><td><b>block</b></td><td>
-<p>The address of the target memory block.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Realloc_Func">FT_Realloc_Func</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>*
- (*<b>FT_Realloc_Func</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
- <span class="keyword">long</span> cur_size,
- <span class="keyword">long</span> new_size,
- <span class="keyword">void</span>* block );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to re-allocate a given block of memory.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>memory</b></td><td>
-<p>A handle to the source memory manager.</p>
-</td></tr>
-<tr valign=top><td><b>cur_size</b></td><td>
-<p>The block's current size in bytes.</p>
-</td></tr>
-<tr valign=top><td><b>new_size</b></td><td>
-<p>The block's requested new size.</p>
-</td></tr>
-<tr valign=top><td><b>block</b></td><td>
-<p>The block's current address.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>New block address. 0&nbsp;in case of memory shortage.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>In case of error, the old block must still be available.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_MemoryRec">FT_MemoryRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">struct</span> FT_MemoryRec_
- {
- <span class="keyword">void</span>* user;
- <a href="ft2-system_interface.html#FT_Alloc_Func">FT_Alloc_Func</a> alloc;
- <a href="ft2-system_interface.html#FT_Free_Func">FT_Free_Func</a> free;
- <a href="ft2-system_interface.html#FT_Realloc_Func">FT_Realloc_Func</a> realloc;
- };
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to describe a given memory manager to FreeType&nbsp;2.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>user</b></td><td>
-<p>A generic typeless pointer for user data.</p>
-</td></tr>
-<tr valign=top><td><b>alloc</b></td><td>
-<p>A pointer type to an allocation function.</p>
-</td></tr>
-<tr valign=top><td><b>free</b></td><td>
-<p>A pointer type to an memory freeing function.</p>
-</td></tr>
-<tr valign=top><td><b>realloc</b></td><td>
-<p>A pointer type to a reallocation function.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stream">FT_Stream</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StreamRec_* <b>FT_Stream</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an input stream.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_StreamDesc">FT_StreamDesc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">union</span> FT_StreamDesc_
- {
- <span class="keyword">long</span> value;
- <span class="keyword">void</span>* pointer;
-
- } <b>FT_StreamDesc</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A union type used to store either a long or a pointer. This is used to store a file descriptor or a &lsquo;FILE*&rsquo; in an input stream.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stream_IoFunc">FT_Stream_IoFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">long</span>
- (*<b>FT_Stream_IoFunc</b>)( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream,
- <span class="keyword">unsigned</span> <span class="keyword">long</span> offset,
- <span class="keyword">unsigned</span> <span class="keyword">char</span>* buffer,
- <span class="keyword">unsigned</span> <span class="keyword">long</span> count );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to seek and read data from a given input stream.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stream</b></td><td>
-<p>A handle to the source stream.</p>
-</td></tr>
-<tr valign=top><td><b>offset</b></td><td>
-<p>The offset of read in stream (always from start).</p>
-</td></tr>
-<tr valign=top><td><b>buffer</b></td><td>
-<p>The address of the read buffer.</p>
-</td></tr>
-<tr valign=top><td><b>count</b></td><td>
-<p>The number of bytes to read from the stream.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The number of bytes effectively read by the stream.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function might be called to perform a seek or skip operation with a &lsquo;count&rsquo; of&nbsp;0.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">void</span>
- (*<b>FT_Stream_CloseFunc</b>)( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A function used to close a given input stream.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>stream</b></td><td>
-<p>A handle to the target stream.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_StreamRec">FT_StreamRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_SYSTEM_H (freetype/ftsystem.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StreamRec_
- {
- <span class="keyword">unsigned</span> <span class="keyword">char</span>* base;
- <span class="keyword">unsigned</span> <span class="keyword">long</span> size;
- <span class="keyword">unsigned</span> <span class="keyword">long</span> pos;
-
- <a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a> descriptor;
- <a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a> pathname;
- <a href="ft2-system_interface.html#FT_Stream_IoFunc">FT_Stream_IoFunc</a> read;
- <a href="ft2-system_interface.html#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a> close;
-
- <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory;
- <span class="keyword">unsigned</span> <span class="keyword">char</span>* cursor;
- <span class="keyword">unsigned</span> <span class="keyword">char</span>* limit;
-
- } <b>FT_StreamRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to describe an input stream.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>base</b></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>size</b></td><td>
-<p>The stream size in bytes.</p>
-</td></tr>
-<tr valign=top><td><b>pos</b></td><td>
-<p>The current position within the stream.</p>
-</td></tr>
-<tr valign=top><td><b>descriptor</b></td><td>
-<p>This field is a union that can hold an integer or a pointer. It is used by stream implementations to store file descriptors or &lsquo;FILE*&rsquo; pointers.</p>
-</td></tr>
-<tr valign=top><td><b>pathname</b></td><td>
-<p>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).</p>
-</td></tr>
-<tr valign=top><td><b>read</b></td><td>
-<p>The stream's input function.</p>
-</td></tr>
-<tr valign=top><td><b>close</b></td><td>
-<p>The stream;s close function.</p>
-</td></tr>
-<tr valign=top><td><b>memory</b></td><td>
-<p>The memory manager to use to preload frames. This is set internally by FreeType and shouldn't be touched by stream implementations.</p>
-</td></tr>
-<tr valign=top><td><b>cursor</b></td><td>
-<p>This field is set and used internally by FreeType when parsing frames.</p>
-</td></tr>
-<tr valign=top><td><b>limit</b></td><td>
-<p>This field is set and used internally by FreeType when parsing frames.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-toc.html b/Build/source/libs/freetype2/docs/reference/ft2-toc.html
deleted file mode 100644
index 5e1863466f2..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-toc.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>Table of Contents</h1></center>
-<br><table align=center width="75%"><tr><td><h2>General Remarks</h2><ul class="empty"><li>
-<table cellpadding=5>
-<tr valign=top><td class="left">
-<a href="ft2-user_allocation.html">User allocation</a></td><td>
-<p>How client applications should allocate FreeType data structures.</p>
-</td></tr>
-</table>
-</li></ul></td></tr></table>
-<br><table align=center width="75%"><tr><td><h2>Core API</h2><ul class="empty"><li>
-<table cellpadding=5>
-<tr valign=top><td class="left">
-<a href="ft2-version.html">FreeType Version</a></td><td>
-<p>Functions and macros related to FreeType versions.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-basic_types.html">Basic Data Types</a></td><td>
-<p>The basic data types defined by the library.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-base_interface.html">Base Interface</a></td><td>
-<p>The FreeType&nbsp;2 base font interface.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-glyph_variants.html">Glyph Variants</a></td><td>
-<p>The FreeType&nbsp;2 interface to Unicode Ideographic Variation Sequences (IVS), using the SFNT cmap format&nbsp;14.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-glyph_management.html">Glyph Management</a></td><td>
-<p>Generic interface to manage individual glyph data.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-mac_specific.html">Mac Specific Interface</a></td><td>
-<p>Only available on the Macintosh.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-sizes_management.html">Size Management</a></td><td>
-<p>Managing multiple sizes per face.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-header_file_macros.html">Header File Macros</a></td><td>
-<p>Macro definitions used to #include specific header files.</p>
-</td></tr>
-</table>
-</li></ul></td></tr></table>
-<br><table align=center width="75%"><tr><td><h2>Format-Specific API</h2><ul class="empty"><li>
-<table cellpadding=5>
-<tr valign=top><td class="left">
-<a href="ft2-multiple_masters.html">Multiple Masters</a></td><td>
-<p>How to manage Multiple Masters fonts.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-truetype_tables.html">TrueType Tables</a></td><td>
-<p>TrueType specific table types and functions.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-type1_tables.html">Type 1 Tables</a></td><td>
-<p>Type&nbsp;1 (PostScript) specific font tables.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-sfnt_names.html">SFNT Names</a></td><td>
-<p>Access the names embedded in TrueType and OpenType files.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-bdf_fonts.html">BDF and PCF Files</a></td><td>
-<p>BDF and PCF specific API.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-cid_fonts.html">CID Fonts</a></td><td>
-<p>CID-keyed font specific API.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-pfr_fonts.html">PFR Fonts</a></td><td>
-<p>PFR/TrueDoc specific API.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-winfnt_fonts.html">Window FNT Files</a></td><td>
-<p>Windows FNT specific API.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-font_formats.html">Font Formats</a></td><td>
-<p>Getting the font format.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-gasp_table.html">Gasp Table</a></td><td>
-<p>Retrieving TrueType &lsquo;gasp&rsquo; table entries.</p>
-</td></tr>
-</table>
-</li></ul></td></tr></table>
-<br><table align=center width="75%"><tr><td><h2>Cache Sub-System</h2><ul class="empty"><li>
-<table cellpadding=5>
-<tr valign=top><td class="left">
-<a href="ft2-cache_subsystem.html">Cache Sub-System</a></td><td>
-<p>How to cache face, size, and glyph data with FreeType&nbsp;2.</p>
-</td></tr>
-</table>
-</li></ul></td></tr></table>
-<br><table align=center width="75%"><tr><td><h2>Support API</h2><ul class="empty"><li>
-<table cellpadding=5>
-<tr valign=top><td class="left">
-<a href="ft2-computations.html">Computations</a></td><td>
-<p>Crunching fixed numbers and vectors.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-list_processing.html">List Processing</a></td><td>
-<p>Simple management of lists.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-outline_processing.html">Outline Processing</a></td><td>
-<p>Functions to create, transform, and render vectorial glyph images.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-bitmap_handling.html">Bitmap Handling</a></td><td>
-<p>Handling FT_Bitmap objects.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-raster.html">Scanline Converter</a></td><td>
-<p>How vectorial outlines are converted into bitmaps and pixmaps.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-glyph_stroker.html">Glyph Stroker</a></td><td>
-<p>Generating bordered and stroked glyphs.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-system_interface.html">System Interface</a></td><td>
-<p>How FreeType manages memory and i/o.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-module_management.html">Module Management</a></td><td>
-<p>How to add, upgrade, and remove modules from FreeType.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-gzip.html">GZIP Streams</a></td><td>
-<p>Using gzip-compressed font files.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-lzw.html">LZW Streams</a></td><td>
-<p>Using LZW-compressed font files.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-lcd_filtering.html">LCD Filtering</a></td><td>
-<p>Reduce color fringes of LCD-optimized bitmaps.</p>
-</td></tr>
-</table>
-</li></ul></td></tr></table>
-<br><table align=center width="75%"><tr><td><h2>Miscellaneous</h2><ul class="empty"><li>
-<table cellpadding=5>
-<tr valign=top><td class="left">
-<a href="ft2-ot_validation.html">OpenType Validation</a></td><td>
-<p>An API to validate OpenType tables.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-incremental.html">Incremental Loading</a></td><td>
-<p>Custom Glyph Loading.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-truetype_engine.html">The TrueType Engine</a></td><td>
-<p>TrueType bytecode support.</p>
-</td></tr>
-<tr valign=top><td class="left">
-<a href="ft2-gx_validation.html">TrueTypeGX/AAT Validation</a></td><td>
-<p>An API to validate TrueTypeGX/AAT tables.</p>
-</td></tr>
-</table>
-</li></ul></td></tr></table>
-<br><table align=center width="75%"><tr><td><h2><a href="ft2-index.html">Global Index</a></h2><ul class="empty"><li></li></ul></td></tr></table>
-<hr>
-<table><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-</tr></table>
-
-<center><font size=-2>generated on Sun Jun 29 09:46:25 2008</font></center></body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-truetype_engine.html b/Build/source/libs/freetype2/docs/reference/ft2-truetype_engine.html
deleted file mode 100644
index bb73b9b33f1..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-truetype_engine.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-The TrueType Engine
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></td><td></td><td><a href="#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains a function used to query the level of TrueType bytecode support compiled in this version of the library.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_TrueTypeEngineType_
- {
- <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_NONE</a> = 0,
- <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a>,
- <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a>
-
- } <b>FT_TrueTypeEngineType</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of values describing which kind of TrueType bytecode engine is implemented in a given FT_Library instance. It is used by the <a href="ft2-truetype_engine.html#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a> function.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td colspan=0><b>FT_TRUETYPE_ENGINE_TYPE_NONE</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The library doesn't implement any kind of bytecode interpreter.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The library implements a bytecode interpreter that doesn't support the patented operations of the TrueType virtual machine.</p>
-<p>Its main use is to load certain Asian fonts which position and scale glyph components with bytecode instructions. It produces bad output for most other fonts.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>FT_TRUETYPE_ENGINE_TYPE_PATENTED</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The library implements a bytecode interpreter that covers the full instruction set of the TrueType virtual machine. See the file &lsquo;docs/PATENTS&rsquo; for legal aspects.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.2</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_MODULE_H (freetype/ftmodapi.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a> )
- <b>FT_Get_TrueType_Engine_Type</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a> value to indicate which level of the TrueType virtual machine a given library instance supports.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A library instance.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A value indicating which level is supported.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.2</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-truetype_tables.html b/Build/source/libs/freetype2/docs/reference/ft2-truetype_tables.html
deleted file mode 100644
index 5f2969494e2..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-truetype_tables.html
+++ /dev/null
@@ -1,1217 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-TrueType Tables
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td><td></td><td><a href="#TT_Postscript">TT_Postscript</a></td></tr>
-<tr><td></td><td><a href="#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td><td></td><td><a href="#TT_PCLT">TT_PCLT</a></td></tr>
-<tr><td></td><td><a href="#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></td><td></td><td><a href="#TT_MaxProfile">TT_MaxProfile</a></td></tr>
-<tr><td></td><td><a href="#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></td><td></td><td><a href="#FT_Sfnt_Tag">FT_Sfnt_Tag</a></td></tr>
-<tr><td></td><td><a href="#TT_MS_ID_XXX">TT_MS_ID_XXX</a></td><td></td><td><a href="#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></td></tr>
-<tr><td></td><td><a href="#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></td><td></td><td><a href="#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td></tr>
-<tr><td></td><td><a href="#TT_Header">TT_Header</a></td><td></td><td><a href="#FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></td></tr>
-<tr><td></td><td><a href="#TT_HoriHeader">TT_HoriHeader</a></td><td></td><td><a href="#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></td></tr>
-<tr><td></td><td><a href="#TT_VertHeader">TT_VertHeader</a></td><td></td><td><a href="#FT_Get_CMap_Format">FT_Get_CMap_Format</a></td></tr>
-<tr><td></td><td><a href="#TT_OS2">TT_OS2</a></td><td></td><td><a href="#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the definition of TrueType-specific tables as well as some routines used to access and process them.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a> 0
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a> 1
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a> 2 /* deprecated */
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a> 3
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_CUSTOM</a> 4
-#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a> 7 /* artificial */
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of valid values for the &lsquo;platform_id&rsquo; identifier code in <a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a> and <a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a> structures.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td colspan=0><b>TT_PLATFORM_APPLE_UNICODE</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Used by Apple to indicate a Unicode character map and/or name entry. See <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a> for corresponding &lsquo;encoding_id&rsquo; values. Note that name entries in this format are coded as big-endian UCS-2 character codes <i>only</i>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_PLATFORM_MACINTOSH</b></td><td>
-<p>Used by Apple to indicate a MacOS-specific charmap and/or name entry. See <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a> for corresponding &lsquo;encoding_id&rsquo; 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).</p>
-</td></tr>
-<tr valign=top><td><b>TT_PLATFORM_ISO</b></td><td>
-<p>This value was used to specify Unicode charmaps. It is however now deprecated. See <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a> for a list of corresponding &lsquo;encoding_id&rsquo; values.</p>
-</td></tr>
-<tr valign=top><td><b>TT_PLATFORM_MICROSOFT</b></td><td>
-<p>Used by Microsoft to indicate Windows-specific charmaps. See <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a> for a list of corresponding &lsquo;encoding_id&rsquo; values. Note that most fonts contain a Unicode charmap using (TT_PLATFORM_MICROSOFT, <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a>).</p>
-</td></tr>
-<tr valign=top><td><b>TT_PLATFORM_CUSTOM</b></td><td>
-<p>Used to indicate application-specific charmaps.</p>
-</td></tr>
-<tr valign=top><td><b>TT_PLATFORM_ADOBE</b></td><td>
-<p>This value isn't part of any font format specification, but is used by FreeType to report Adobe-specific charmaps in an <a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a> structure. See <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a>.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_DEFAULT</a> 0 /* Unicode 1.0 */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_1_1</a> 1 /* specify Hangul at U+34xx */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_ISO_10646</a> 2 /* deprecated */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_2_0</a> 3 /* or later */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_32</a> 4 /* 2.0 or later, full repertoire */
-#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_VARIANT_SELECTOR</a> 5 /* variation selector data */
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a> charmaps and name entries.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>TT_APPLE_ID_DEFAULT</b></td><td>
-<p>Unicode version 1.0.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>TT_APPLE_ID_UNICODE_1_1</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Unicode 1.1; specifies Hangul characters starting at U+34xx.</p>
-</td></tr>
-<tr valign=top><td><b>TT_APPLE_ID_ISO_10646</b></td><td>
-<p>Deprecated (identical to preceding).</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>TT_APPLE_ID_UNICODE_2_0</b></td></tr>
-<tr valign=top><td></td><td>
-<p>Unicode 2.0 and beyond (UTF-16 BMP only).</p>
-</td></tr>
-<tr valign=top><td><b>TT_APPLE_ID_UNICODE_32</b></td><td>
-<p>Unicode 3.1 and beyond, using UTF-32.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>TT_APPLE_ID_VARIANT_SELECTOR</b></td></tr>
-<tr valign=top><td></td><td>
-<p>From Adobe, not Apple. Not a normal cmap. Specifies variations on a real cmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a> 0
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_JAPANESE</a> 1
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TRADITIONAL_CHINESE</a> 2
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KOREAN</a> 3
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a> 4
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_HEBREW</a> 5
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GREEK</a> 6
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RUSSIAN</a> 7
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RSYMBOL</a> 8
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_DEVANAGARI</a> 9
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GURMUKHI</a> 10
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GUJARATI</a> 11
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ORIYA</a> 12
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BENGALI</a> 13
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TAMIL</a> 14
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TELUGU</a> 15
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KANNADA</a> 16
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALAYALAM</a> 17
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINHALESE</a> 18
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BURMESE</a> 19
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KHMER</a> 20
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_THAI</a> 21
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_LAOTIAN</a> 22
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEORGIAN</a> 23
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARMENIAN</a> 24
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALDIVIAN</a> 25
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SIMPLIFIED_CHINESE</a> 25
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TIBETAN</a> 26
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MONGOLIAN</a> 27
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEEZ</a> 28
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SLAVIC</a> 29
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_VIETNAMESE</a> 30
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINDHI</a> 31
-#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_UNINTERP</a> 32
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a> charmaps and name entries.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>TT_MAC_ID_ROMAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_JAPANESE</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td colspan=0><b>TT_MAC_ID_TRADITIONAL_CHINESE</b></td></tr>
-<tr valign=top><td></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_KOREAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_ARABIC</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_HEBREW</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_GREEK</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_RUSSIAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_RSYMBOL</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_DEVANAGARI</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_GURMUKHI</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_GUJARATI</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_ORIYA</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_BENGALI</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_TAMIL</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_TELUGU</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_KANNADA</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_MALAYALAM</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_SINHALESE</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_BURMESE</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_KHMER</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_THAI</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_LAOTIAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_GEORGIAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_ARMENIAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_MALDIVIAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td colspan=0><b>TT_MAC_ID_SIMPLIFIED_CHINESE</b></td></tr>
-<tr valign=top><td></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_TIBETAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_MONGOLIAN</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_GEEZ</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_SLAVIC</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_VIETNAMESE</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_SINDHI</b></td><td>
-<p></p>
-</td></tr>
-<tr valign=top><td><b>TT_MAC_ID_UNINTERP</b></td><td>
-<p></p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_7BIT_ASCII</a> 0
-#define <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_10646</a> 1
-#define <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_8859_1</a> 2
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a> charmaps and name entries.</p>
-<p>Their use is now deprecated.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>TT_ISO_ID_7BIT_ASCII</b></td><td>
-<p>ASCII.</p>
-</td></tr>
-<tr valign=top><td><b>TT_ISO_ID_10646</b></td><td>
-<p>ISO/10646.</p>
-</td></tr>
-<tr valign=top><td><b>TT_ISO_ID_8859_1</b></td><td>
-<p>Also known as Latin-1.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_MS_ID_XXX">TT_MS_ID_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SYMBOL_CS</a> 0
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a> 1
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SJIS</a> 2
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_GB2312</a> 3
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_BIG_5</a> 4
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_WANSUNG</a> 5
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_JOHAB</a> 6
-#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UCS_4</a> 10
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a> charmaps and name entries.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>TT_MS_ID_SYMBOL_CS</b></td><td>
-<p>Corresponds to Microsoft symbol encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_MS_ID_UNICODE_CS</b></td><td>
-<p>Corresponds to a Microsoft WGL4 charmap, matching Unicode. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_MS_ID_SJIS</b></td><td>
-<p>Corresponds to SJIS Japanese encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_MS_ID_GB2312</b></td><td>
-<p>Corresponds to Simplified Chinese as used in Mainland China. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_MS_ID_BIG_5</b></td><td>
-<p>Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_MS_ID_WANSUNG</b></td><td>
-<p>Corresponds to Korean Wansung encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_MS_ID_JOHAB</b></td><td>
-<p>Corresponds to Johab encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>.</p>
-</td></tr>
-<tr valign=top><td><b>TT_MS_ID_UCS_4</b></td><td>
-<p>Corresponds to UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4 (mid-2001.)</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_STANDARD</a> 0
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_EXPERT</a> 1
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_CUSTOM</a> 2
-#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_LATIN_1</a> 3
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a> charmaps. This is a FreeType-specific extension!</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>TT_ADOBE_ID_STANDARD</b></td><td>
-<p>Adobe standard encoding.</p>
-</td></tr>
-<tr valign=top><td><b>TT_ADOBE_ID_EXPERT</b></td><td>
-<p>Adobe expert encoding.</p>
-</td></tr>
-<tr valign=top><td><b>TT_ADOBE_ID_CUSTOM</b></td><td>
-<p>Adobe custom encoding.</p>
-</td></tr>
-<tr valign=top><td><b>TT_ADOBE_ID_LATIN_1</b></td><td>
-<p>Adobe Latin&nbsp;1 encoding.</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_Header">TT_Header</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_Header_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Table_Version;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Font_Revision;
-
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> CheckSum_Adjust;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> Magic_Number;
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Flags;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Units_Per_EM;
-
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> Created [2];
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> Modified[2];
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xMin;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yMin;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xMax;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yMax;
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Mac_Style;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Lowest_Rec_PPEM;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Font_Direction;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Index_To_Loc_Format;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Glyph_Data_Format;
-
- } <b>TT_Header</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a TrueType font header table. All fields follow the TrueType specification.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_HoriHeader">TT_HoriHeader</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_HoriHeader_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Version;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Ascender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Descender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Line_Gap;
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> advance_Width_Max; /* advance width maximum */
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Left_Side_Bearing; /* minimum left-sb */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Right_Side_Bearing; /* minimum right-sb */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xMax_Extent; /* xmax extents */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Rise;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Run;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Offset;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Reserved[4];
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> metric_Data_Format;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> number_Of_HMetrics;
-
- /* The following fields are not defined by the TrueType specification */
- /* but they are used to connect the metrics header to the relevant */
- /* `HMTX' table. */
-
- <span class="keyword">void</span>* long_metrics;
- <span class="keyword">void</span>* short_metrics;
-
- } <b>TT_HoriHeader</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a TrueType horizontal header, the &lsquo;hhea&rsquo; table, as well as the corresponding horizontal metrics table, i.e., the &lsquo;hmtx&rsquo; table.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>Version</b></td><td>
-<p>The table version.</p>
-</td></tr>
-<tr valign=top><td><b>Ascender</b></td><td>
-<p>The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font.</p>
-<p>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).</p>
-<p>You should use the &lsquo;sTypoAscender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
-</td></tr>
-<tr valign=top><td><b>Descender</b></td><td>
-<p>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.</p>
-<p>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).</p>
-<p>You should use the &lsquo;sTypoDescender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
-</td></tr>
-<tr valign=top><td><b>Line_Gap</b></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>advance_Width_Max</b></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>min_Left_Side_Bearing</b></td><td>
-<p>The minimum left side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr valign=top><td><b>min_Right_Side_Bearing</b></td><td>
-<p>The minimum right side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr valign=top><td><b>xMax_Extent</b></td><td>
-<p>The maximum horizontal extent (i.e., the &lsquo;width&rsquo; of a glyph's bounding box) for all glyphs in the font.</p>
-</td></tr>
-<tr valign=top><td><b>caret_Slope_Rise</b></td><td>
-<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
-</td></tr>
-<tr valign=top><td><b>caret_Slope_Run</b></td><td>
-<p>The run coefficient of the cursor's slope.</p>
-</td></tr>
-<tr valign=top><td><b>Reserved</b></td><td>
-<p>8&nbsp;reserved bytes.</p>
-</td></tr>
-<tr valign=top><td><b>metric_Data_Format</b></td><td>
-<p>Always&nbsp;0.</p>
-</td></tr>
-<tr valign=top><td><b>number_Of_HMetrics</b></td><td>
-<p>Number of HMetrics entries in the &lsquo;hmtx&rsquo; table -- this value can be smaller than the total number of glyphs in the font.</p>
-</td></tr>
-<tr valign=top><td><b>long_metrics</b></td><td>
-<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>short_metrics</b></td><td>
-<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should be identical except for the names of their fields which are different.</p>
-<p>This ensures that a single function in the &lsquo;ttload&rsquo; module is able to read both the horizontal and vertical headers.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_VertHeader">TT_VertHeader</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_VertHeader_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Version;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Ascender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Descender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Line_Gap;
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> advance_Height_Max; /* advance height maximum */
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Top_Side_Bearing; /* minimum left-sb or top-sb */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yMax_Extent; /* xmax or ymax extents */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Rise;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Run;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Offset;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Reserved[4];
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> metric_Data_Format;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> number_Of_VMetrics;
-
- /* The following fields are not defined by the TrueType specification */
- /* but they're used to connect the metrics header to the relevant */
- /* `HMTX' or `VMTX' table. */
-
- <span class="keyword">void</span>* long_metrics;
- <span class="keyword">void</span>* short_metrics;
-
- } <b>TT_VertHeader</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a TrueType vertical header, the &lsquo;vhea&rsquo; table, as well as the corresponding vertical metrics table, i.e., the &lsquo;vmtx&rsquo; table.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>Version</b></td><td>
-<p>The table version.</p>
-</td></tr>
-<tr valign=top><td><b>Ascender</b></td><td>
-<p>The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font.</p>
-<p>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).</p>
-<p>You should use the &lsquo;sTypoAscender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
-</td></tr>
-<tr valign=top><td><b>Descender</b></td><td>
-<p>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.</p>
-<p>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).</p>
-<p>You should use the &lsquo;sTypoDescender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
-</td></tr>
-<tr valign=top><td><b>Line_Gap</b></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>advance_Height_Max</b></td><td>
-<p>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.</p>
-</td></tr>
-<tr valign=top><td><b>min_Top_Side_Bearing</b></td><td>
-<p>The minimum top side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr valign=top><td colspan=0><b>min_Bottom_Side_Bearing</b></td></tr>
-<tr valign=top><td></td><td>
-<p>The minimum bottom side bearing of all glyphs within the font.</p>
-</td></tr>
-<tr valign=top><td><b>yMax_Extent</b></td><td>
-<p>The maximum vertical extent (i.e., the &lsquo;height&rsquo; of a glyph's bounding box) for all glyphs in the font.</p>
-</td></tr>
-<tr valign=top><td><b>caret_Slope_Rise</b></td><td>
-<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
-</td></tr>
-<tr valign=top><td><b>caret_Slope_Run</b></td><td>
-<p>The run coefficient of the cursor's slope.</p>
-</td></tr>
-<tr valign=top><td><b>caret_Offset</b></td><td>
-<p>The cursor's offset for slanted fonts. This value is &lsquo;reserved&rsquo; in vmtx version 1.0.</p>
-</td></tr>
-<tr valign=top><td><b>Reserved</b></td><td>
-<p>8&nbsp;reserved bytes.</p>
-</td></tr>
-<tr valign=top><td><b>metric_Data_Format</b></td><td>
-<p>Always&nbsp;0.</p>
-</td></tr>
-<tr valign=top><td><b>number_Of_HMetrics</b></td><td>
-<p>Number of VMetrics entries in the &lsquo;vmtx&rsquo; table -- this value can be smaller than the total number of glyphs in the font.</p>
-</td></tr>
-<tr valign=top><td><b>long_metrics</b></td><td>
-<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
-</td></tr>
-<tr valign=top><td><b>short_metrics</b></td><td>
-<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should be identical except for the names of their fields which are different.</p>
-<p>This ensures that a single function in the &lsquo;ttload&rsquo; module is able to read both the horizontal and vertical headers.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_OS2">TT_OS2</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_OS2_
- {
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> version; /* 0x0001 - more or 0xFFFF */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xAvgCharWidth;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWeightClass;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWidthClass;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> fsType;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptXSize;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptYSize;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptXOffset;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptYOffset;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptXSize;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptYSize;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptXOffset;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptYOffset;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yStrikeoutSize;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yStrikeoutPosition;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sFamilyClass;
-
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> panose[10];
-
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange1; /* Bits 0-31 */
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange2; /* Bits 32-63 */
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange3; /* Bits 64-95 */
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange4; /* Bits 96-127 */
-
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> achVendID[4];
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> fsSelection;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usFirstCharIndex;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usLastCharIndex;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sTypoAscender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sTypoDescender;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sTypoLineGap;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWinAscent;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWinDescent;
-
- /* only version 1 tables: */
-
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulCodePageRange1; /* Bits 0-31 */
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulCodePageRange2; /* Bits 32-63 */
-
- /* only version 2 tables: */
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sxHeight;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sCapHeight;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usDefaultChar;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usBreakChar;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usMaxContext;
-
- } <b>TT_OS2</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a TrueType OS/2 table. This is the long table version. All fields comply to the TrueType specification.</p>
-<p>Note that we now support old Mac fonts which do not include an OS/2 table. In this case, the &lsquo;version&rsquo; field is always set to 0xFFFF.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_Postscript">TT_Postscript</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_Postscript_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> FormatType;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> italicAngle;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underlinePosition;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underlineThickness;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> isFixedPitch;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> minMemType42;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> maxMemType42;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> minMemType1;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> maxMemType1;
-
- /* Glyph names follow in the file, but we don't */
- /* load them by default. See the ttpost.c file. */
-
- } <b>TT_Postscript</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a TrueType PostScript table. All fields comply to the TrueType specification. This structure does not reference the PostScript glyph names, which can be nevertheless accessed with the &lsquo;ttpost&rsquo; module.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_PCLT">TT_PCLT</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_PCLT_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Version;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> FontNumber;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Pitch;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> xHeight;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Style;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> TypeFamily;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> CapHeight;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> SymbolSet;
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> TypeFace[16];
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> CharacterComplement[8];
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> FileName[6];
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> StrokeWeight;
- <a href="ft2-basic_types.html#FT_Char">FT_Char</a> WidthType;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> SerifStyle;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> Reserved;
-
- } <b>TT_PCLT</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a TrueType PCLT table. All fields comply to the TrueType specification.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="TT_MaxProfile">TT_MaxProfile</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_MaxProfile_
- {
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> version;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> numGlyphs;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxPoints;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxContours;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxCompositePoints;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxCompositeContours;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxZones;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxTwilightPoints;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxStorage;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxFunctionDefs;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxInstructionDefs;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxStackElements;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxSizeOfInstructions;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxComponentElements;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxComponentDepth;
-
- } <b>TT_MaxProfile</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>The maximum profile is a table containing many max values which can be used to pre-allocate arrays. This ensures that no memory allocation occurs during a glyph load.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>version</b></td><td>
-<p>The version number.</p>
-</td></tr>
-<tr valign=top><td><b>numGlyphs</b></td><td>
-<p>The number of glyphs in this TrueType font.</p>
-</td></tr>
-<tr valign=top><td><b>maxPoints</b></td><td>
-<p>The maximum number of points in a non-composite TrueType glyph. See also the structure element &lsquo;maxCompositePoints&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>maxContours</b></td><td>
-<p>The maximum number of contours in a non-composite TrueType glyph. See also the structure element &lsquo;maxCompositeContours&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>maxCompositePoints</b></td><td>
-<p>The maximum number of points in a composite TrueType glyph. See also the structure element &lsquo;maxPoints&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>maxCompositeContours</b></td><td>
-<p>The maximum number of contours in a composite TrueType glyph. See also the structure element &lsquo;maxContours&rsquo;.</p>
-</td></tr>
-<tr valign=top><td><b>maxZones</b></td><td>
-<p>The maximum number of zones used for glyph hinting.</p>
-</td></tr>
-<tr valign=top><td><b>maxTwilightPoints</b></td><td>
-<p>The maximum number of points in the twilight zone used for glyph hinting.</p>
-</td></tr>
-<tr valign=top><td><b>maxStorage</b></td><td>
-<p>The maximum number of elements in the storage area used for glyph hinting.</p>
-</td></tr>
-<tr valign=top><td><b>maxFunctionDefs</b></td><td>
-<p>The maximum number of function definitions in the TrueType bytecode for this font.</p>
-</td></tr>
-<tr valign=top><td><b>maxInstructionDefs</b></td><td>
-<p>The maximum number of instruction definitions in the TrueType bytecode for this font.</p>
-</td></tr>
-<tr valign=top><td><b>maxStackElements</b></td><td>
-<p>The maximum number of stack elements used during bytecode interpretation.</p>
-</td></tr>
-<tr valign=top><td><b>maxSizeOfInstructions</b></td><td>
-<p>The maximum number of TrueType opcodes used for glyph hinting.</p>
-</td></tr>
-<tr valign=top><td><b>maxComponentElements</b></td><td>
-<p>The maximum number of simple (i.e., non- composite) glyphs in a composite glyph.</p>
-</td></tr>
-<tr valign=top><td><b>maxComponentDepth</b></td><td>
-<p>The maximum nesting depth of composite glyphs.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This structure is only used during font loading.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Sfnt_Tag">FT_Sfnt_Tag</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Sfnt_Tag_
- {
- ft_sfnt_head = 0,
- ft_sfnt_maxp = 1,
- ft_sfnt_os2 = 2,
- ft_sfnt_hhea = 3,
- ft_sfnt_vhea = 4,
- ft_sfnt_post = 5,
- ft_sfnt_pclt = 6,
-
- sfnt_max /* internal end mark */
-
- } <b>FT_Sfnt_Tag</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>An enumeration used to specify the index of an SFNT table. Used in the <a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a> API function.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span>* )
- <b>FT_Get_Sfnt_Table</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a> tag );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return a pointer to a given SFNT table within a face.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source.</p>
-</td></tr>
-<tr valign=top><td><b>tag</b></td><td>
-<p>The index of the SFNT table.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>A type-less pointer to the table. This will be&nbsp;0 in case of error, or if the corresponding table was not found <b>OR</b> loaded from the file.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The table is owned by the face object and disappears with it.</p>
-<p>This function is only useful to access SFNT tables that are loaded by the sfnt, truetype, and opentype drivers. See <a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a> for a list.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Load_Sfnt_Table</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> tag,
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> offset,
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* buffer,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>* length );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Load any font table into client memory.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-<tr valign=top><td><b>tag</b></td><td>
-<p>The four-byte tag of the table to load. Use the value&nbsp;0 if you want to access the whole font file. Otherwise, you can use one of the definitions found in the <a href="ft2-header_file_macros.html#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a> file, or forge a new one with <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>.</p>
-</td></tr>
-<tr valign=top><td><b>offset</b></td><td>
-<p>The starting offset in the table (or file if tag == 0).</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>buffer</b></td><td>
-<p>The target buffer address. The client must ensure that the memory array is big enough to hold the data.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>length</b></td><td>
-<p>If the &lsquo;length&rsquo; parameter is NULL, then try to load the whole table. Return an error code if it fails.</p>
-<p>Else, if &lsquo;*length&rsquo; is&nbsp;0, exit immediately while returning the table's (or file) full size in it.</p>
-<p>Else the number of bytes to read from the table or file, from the starting offset.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>If you need to determine the table's length you should first call this function with &lsquo;*length&rsquo; set to&nbsp;0, as in the following example:</p>
-<pre class="colored">
- FT_ULong length = 0;
-
-
- error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &amp;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, &amp;length );
- if ( error ) { ... could not load table ... }
-</pre>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Sfnt_Table_Info</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> table_index,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> *tag,
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> *length );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return information on an SFNT table.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the source face.</p>
-</td></tr>
-<tr valign=top><td><b>table_index</b></td><td>
-<p>The index of an SFNT table. The function returns FT_Err_Table_Missing for an invalid value.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>tag</b></td><td>
-<p>The name tag of the SFNT table.</p>
-</td></tr>
-<tr valign=top><td><b>length</b></td><td>
-<p>The length of the SFNT table.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>SFNT tables with length zero are treated as missing by Windows.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> )
- <b>FT_Get_CMap_Language_ID</b>( <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return TrueType/sfnt specific cmap language ID. Definitions of language ID values are in &lsquo;freetype/ttnameid.h&rsquo;.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>charmap</b></td><td>
-<p>The target charmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The language ID of &lsquo;charmap&rsquo;. If &lsquo;charmap&rsquo; doesn't belong to a TrueType/sfnt face, just return&nbsp;0 as the default value.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_CMap_Format">FT_Get_CMap_Format</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
- <b>FT_Get_CMap_Format</b>( <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return TrueType/sfnt specific cmap format.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>charmap</b></td><td>
-<p>The target charmap.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The format of &lsquo;charmap&rsquo;. If &lsquo;charmap&rsquo; doesn't belong to a TrueType/sfnt face, return -1.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_UNPATENTED_HINTING_H (freetype/ttunpat.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <b>FT_PARAM_TAG_UNPATENTED_HINTING</b> <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'u', 'n', 'p', 'a' )
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A constant used as the tag of an <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-type1_tables.html b/Build/source/libs/freetype2/docs/reference/ft2-type1_tables.html
deleted file mode 100644
index d42e986bf99..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-type1_tables.html
+++ /dev/null
@@ -1,522 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Type 1 Tables
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#PS_FontInfoRec">PS_FontInfoRec</a></td><td></td><td><a href="#T1_Private">T1_Private</a></td><td></td><td><a href="#CID_FaceInfo">CID_FaceInfo</a></td></tr>
-<tr><td></td><td><a href="#PS_FontInfo">PS_FontInfo</a></td><td></td><td><a href="#T1_Blend_Flags">T1_Blend_Flags</a></td><td></td><td><a href="#CID_Info">CID_Info</a></td></tr>
-<tr><td></td><td><a href="#T1_FontInfo">T1_FontInfo</a></td><td></td><td><a href="#CID_FaceDictRec">CID_FaceDictRec</a></td><td></td><td><a href="#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></td></tr>
-<tr><td></td><td><a href="#PS_PrivateRec">PS_PrivateRec</a></td><td></td><td><a href="#CID_FaceDict">CID_FaceDict</a></td><td></td><td><a href="#FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></td></tr>
-<tr><td></td><td><a href="#PS_Private">PS_Private</a></td><td></td><td><a href="#CID_FaceInfoRec">CID_FaceInfoRec</a></td><td></td><td><a href="#FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the definition of Type 1-specific tables, including structures related to other PostScript font formats.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="PS_FontInfoRec">PS_FontInfoRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_FontInfoRec_
- {
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* version;
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* notice;
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* full_name;
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* family_name;
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* weight;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> italic_angle;
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> is_fixed_pitch;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underline_position;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> underline_thickness;
-
- } <b>PS_FontInfoRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a Type&nbsp;1 or Type&nbsp;2 FontInfo dictionary. Note that for Multiple Master fonts, each instance has its own FontInfo dictionary.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="PS_FontInfo">PS_FontInfo</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_FontInfoRec_* <b>PS_FontInfo</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="T1_FontInfo">T1_FontInfo</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> <b>T1_FontInfo</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This type is equivalent to <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="PS_PrivateRec">PS_PrivateRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_PrivateRec_
- {
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> unique_id;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> lenIV;
-
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_blue_values;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_other_blues;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_family_blues;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_family_other_blues;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> blue_values[14];
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> other_blues[10];
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> family_blues [14];
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> family_other_blues[10];
-
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> blue_scale;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> blue_shift;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> blue_fuzz;
-
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> standard_width[1];
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> standard_height[1];
-
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_snap_widths;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_snap_heights;
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> force_bold;
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> round_stem_up;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> snap_widths [13]; /* including std width */
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> snap_heights[13]; /* including std height */
-
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> expansion_factor;
-
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> language_group;
- <a href="ft2-basic_types.html#FT_Long">FT_Long</a> password;
-
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_feature[2];
-
- } <b>PS_PrivateRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to model a Type&nbsp;1 or Type&nbsp;2 private dictionary. Note that for Multiple Master fonts, each instance has its own Private dictionary.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="PS_Private">PS_Private</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_PrivateRec_* <b>PS_Private</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="T1_Private">T1_Private</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> <b>T1_Private</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This type is equivalent to <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="T1_Blend_Flags">T1_Blend_Flags</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">enum</span> 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,
-
- /*# never remove */
- T1_BLEND_MAX
-
- } <b>T1_Blend_Flags</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="CID_FaceDictRec">CID_FaceDictRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceDictRec_
- {
- <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> private_dict;
-
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> len_buildchar;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> forcebold_threshold;
- <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> stroke_width;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> expansion_factor;
-
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> paint_type;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> font_type;
- <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a> font_matrix;
- <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> font_offset;
-
- <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_subrs;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> subrmap_offset;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> sd_bytes;
-
- } <b>CID_FaceDictRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to represent data in a CID top-level dictionary.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="CID_FaceDict">CID_FaceDict</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceDictRec_* <b>CID_FaceDict</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a <a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="CID_FaceInfoRec">CID_FaceInfoRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceInfoRec_
- {
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* cid_font_name;
- <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> cid_version;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> cid_font_type;
-
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* registry;
- <a href="ft2-basic_types.html#FT_String">FT_String</a>* ordering;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> supplement;
-
- <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> font_info;
- <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> font_bbox;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> uid_base;
-
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_xuid;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> xuid[16];
-
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> cidmap_offset;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> fd_bytes;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> gd_bytes;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> cid_count;
-
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_dicts;
- <a href="ft2-type1_tables.html#CID_FaceDict">CID_FaceDict</a> font_dicts;
-
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> data_offset;
-
- } <b>CID_FaceInfoRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A structure used to represent CID Face information.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="CID_FaceInfo">CID_FaceInfo</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceInfoRec_* <b>CID_FaceInfo</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to a <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="CID_Info">CID_Info</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a> <b>CID_Info</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>This type is equivalent to <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
- <b>FT_Has_PS_Glyph_Names</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return true if a given face provides reliable PostScript glyph names. This is similar to using the <a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a> macro, except that certain fonts (mostly TrueType) contain incorrect glyph name tables.</p>
-<p>When this function returns true, the caller is sure that the glyph names returned by <a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a> are reliable.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>face handle</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>Boolean. True if glyph names are reliable.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_PS_Font_Info</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-type1_tables.html#PS_FontInfo">PS_FontInfo</a> afont_info );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure corresponding to a given PostScript font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>PostScript face handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>afont_info</b></td><td>
-<p>Output font info structure pointer.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The string pointers within the font info structure are owned by the face and don't need to be freed by the caller.</p>
-<p>If the font's format is not PostScript-based, this function will return the &lsquo;FT_Err_Invalid_Argument&rsquo; error code.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_PS_Font_Private</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-type1_tables.html#PS_Private">PS_Private</a> afont_private );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve the <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> structure corresponding to a given PostScript font.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>PostScript face handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>afont_private</b></td><td>
-<p>Output private dictionary structure pointer.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The string pointers within the font info structure are owned by the face and don't need to be freed by the caller.</p>
-<p>If the font's format is not PostScript-based, this function will return the &lsquo;FT_Err_Invalid_Argument&rsquo; error code.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-user_allocation.html b/Build/source/libs/freetype2/docs/reference/ft2-user_allocation.html
deleted file mode 100644
index 2b050dff90b..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-user_allocation.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-User allocation
-</h1></center>
-<table align=center width="87%"><tr><td>
-<p>FreeType assumes that structures allocated by the user and passed as arguments are zeroed out except for the actual data. With other words, it is recommended to use &lsquo;calloc&rsquo; (or variants of it) instead of &lsquo;malloc&rsquo; for allocation.</p>
-</td></tr></table><br>
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-version.html b/Build/source/libs/freetype2/docs/reference/ft2-version.html
deleted file mode 100644
index af74e04bf7b..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-version.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-FreeType Version
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FREETYPE_XXX">FREETYPE_XXX</a></td><td></td><td><a href="#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></td></tr>
-<tr><td></td><td><a href="#FT_Library_Version">FT_Library_Version</a></td><td></td><td><a href="#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>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.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FREETYPE_XXX">FREETYPE_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a> 2
-#define <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a> 3
-#define <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a> 7
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>These three macros identify the FreeType source code version. Use <a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a> to access them at runtime.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FREETYPE_MAJOR</b></td><td>
-<p>The major version number.</p>
-</td></tr>
-<tr valign=top><td><b>FREETYPE_MINOR</b></td><td>
-<p>The minor version number.</p>
-</td></tr>
-<tr valign=top><td><b>FREETYPE_PATCH</b></td><td>
-<p>The patch level.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The version number of FreeType if built as a dynamic link library with the &lsquo;libtool&rsquo; package is <i>not</i> controlled by these three macros.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Library_Version">FT_Library_Version</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Library_Version</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *amajor,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *aminor,
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *apatch );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Return the version of the FreeType library being used. This is useful when dynamically linking to the library, since one cannot use the macros <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a>, <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a>, and <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a>.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>library</b></td><td>
-<p>A source library handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>amajor</b></td><td>
-<p>The major version number.</p>
-</td></tr>
-<tr valign=top><td><b>aminor</b></td><td>
-<p>The minor version number.</p>
-</td></tr>
-<tr valign=top><td><b>apatch</b></td><td>
-<p>The patch version number.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>The reason why this function takes a &lsquo;library&rsquo; argument is because certain programs implement library initialization in a custom way that doesn't use <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a>.</p>
-<p>In such cases, the library version might not be available before the library object has been created.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> )
- <b>FT_Face_CheckTrueTypePatents</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Parse all bytecode instructions of a TrueType font file to check whether any of the patented opcodes are used. This is only useful if you want to be able to use the unpatented hinter with fonts that do <b>not</b> use these opcodes.</p>
-<p>Note that this function parses <b>all</b> glyph instructions in the font file, which may be slow.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A face handle.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>1&nbsp;if this is a TrueType font that uses one of the patented opcodes, 0&nbsp;otherwise.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.5</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_FREETYPE_H (freetype/freetype.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> )
- <b>FT_Face_SetUnpatentedHinting</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> value );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Enable or disable the unpatented hinter for a given face. Only enable it if you have determined that the face doesn't use any patented opcodes (see <a href="ft2-version.html#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a>).</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A face handle.</p>
-</td></tr>
-<tr valign=top><td><b>value</b></td><td>
-<p>New boolean setting.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>The old setting value. This will always be false if this is not a SFNT font, or if the unpatented hinter is not compiled in this instance of the library.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
-<p>2.3.5</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/reference/ft2-winfnt_fonts.html b/Build/source/libs/freetype2/docs/reference/ft2-winfnt_fonts.html
deleted file mode 100644
index 301a22c5514..00000000000
--- a/Build/source/libs/freetype2/docs/reference/ft2-winfnt_fonts.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<!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>FreeType-2.3.7 API Reference</title>
-<style type="text/css">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-
-<table align=center><tr><td><font size=-1>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-<center><h1>FreeType-2.3.7 API Reference</h1></center>
-
-<center><h1>
-Window FNT Files
-</h1></center>
-<h2>Synopsis</h2>
-<table align=center cellspacing=5 cellpadding=0 border=0>
-<tr><td></td><td><a href="#FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></td><td></td><td><a href="#FT_WinFNT_Header">FT_WinFNT_Header</a></td><td></td><td></td></tr>
-<tr><td></td><td><a href="#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></td><td></td><td><a href="#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></td><td></td><td></td></tr>
-</table><br><br>
-
-<table align=center width="87%"><tr><td>
-<p>This section contains the declaration of Windows FNT specific functions.</p>
-</td></tr></table><br>
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1252</a> 0
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_DEFAULT</a> 1
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_SYMBOL</a> 2
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_MAC</a> 77
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP932</a> 128
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP949</a> 129
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1361</a> 130
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP936</a> 134
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP950</a> 136
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1253</a> 161
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1254</a> 162
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1258</a> 163
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1255</a> 177
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1256</a> 178
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1257</a> 186
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a> 204
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP874</a> 222
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1250</a> 238
-#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_OEM</a> 255
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A list of valid values for the &lsquo;charset&rsquo; byte in <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a>. Exact mapping tables for the various cpXXXX encodings (except for cp1361) can be found at ftp://ftp.unicode.org in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>FT_WinFNT_ID_DEFAULT</b></td><td>
-<p>This is used for font enumeration and font creation as a &lsquo;don't care&rsquo; 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.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_SYMBOL</b></td><td>
-<p>There is no known mapping table available.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_MAC</b></td><td>
-<p>Mac Roman encoding.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_OEM</b></td><td>
-<p>From Michael Pöttgen &lt;michael@poettgen.de&gt;:</p>
-<p>The &lsquo;Windows Font Mapping&rsquo; article says that FT_WinFNT_ID_OEM is used for the charset of vector fonts, like &lsquo;modern.fon&rsquo;, &lsquo;roman.fon&rsquo;, and &lsquo;script.fon&rsquo; on Windows.</p>
-<p>The &lsquo;CreateFont&rsquo; documentation says: The FT_WinFNT_ID_OEM value specifies a character set that is operating-system dependent.</p>
-<p>The &lsquo;IFIMETRICS&rsquo; documentation from the &lsquo;Windows Driver Development Kit&rsquo; says: This font supports an OEM-specific character set. The OEM character set is system dependent.</p>
-<p>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</p>
-<p>http://www.microsoft.com/globaldev/reference/cphome.mspx,</p>
-<p>and is used for the &lsquo;DOS boxes&rsquo;, to support legacy applications. A German Windows version for example usually uses ANSI codepage 1252 and OEM codepage 850.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP874</b></td><td>
-<p>A superset of Thai TIS 620 and ISO 8859-11.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP932</b></td><td>
-<p>A superset of Japanese Shift-JIS (with minor deviations).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP936</b></td><td>
-<p>A superset of simplified Chinese GB 2312-1980 (with different ordering and minor deviations).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP949</b></td><td>
-<p>A superset of Korean Hangul KS&nbsp;C 5601-1987 (with different ordering and minor deviations).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP950</b></td><td>
-<p>A superset of traditional Chinese Big&nbsp;5 ETen (with different ordering and minor deviations).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1250</b></td><td>
-<p>A superset of East European ISO 8859-2 (with slightly different ordering).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1251</b></td><td>
-<p>A superset of Russian ISO 8859-5 (with different ordering).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1252</b></td><td>
-<p>ANSI encoding. A superset of ISO 8859-1.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1253</b></td><td>
-<p>A superset of Greek ISO 8859-7 (with minor modifications).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1254</b></td><td>
-<p>A superset of Turkish ISO 8859-9.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1255</b></td><td>
-<p>A superset of Hebrew ISO 8859-8 (with some modifications).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1256</b></td><td>
-<p>A superset of Arabic ISO 8859-6 (with different ordering).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1257</b></td><td>
-<p>A superset of Baltic ISO 8859-13 (with some deviations).</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1258</b></td><td>
-<p>For Vietnamese. This encoding doesn't cover all necessary characters.</p>
-</td></tr>
-<tr valign=top><td><b>FT_WinFNT_ID_CP1361</b></td><td>
-<p>Korean (Johab).</p>
-</td></tr>
-</table>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_WinFNT_HeaderRec_
- {
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> version;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> file_size;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> copyright[60];
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> file_type;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> nominal_point_size;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> vertical_resolution;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> horizontal_resolution;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> ascent;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> internal_leading;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> external_leading;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> italic;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> underline;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> strike_out;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> weight;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> charset;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> pixel_width;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> pixel_height;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> pitch_and_family;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> avg_width;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> max_width;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> first_char;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> last_char;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> default_char;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> break_char;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> bytes_per_row;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> device_offset;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> face_name_offset;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> bits_pointer;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> bits_offset;
- <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> reserved;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> flags;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> A_space;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> B_space;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> C_space;
- <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> color_table_offset;
- <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> reserved1[4];
-
- } <b>FT_WinFNT_HeaderRec</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Windows FNT Header info.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_WinFNT_Header">FT_WinFNT_Header</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_WinFNT_HeaderRec_* <b>FT_WinFNT_Header</b>;
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>A handle to an <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a> structure.</p>
-</td></tr></table><br>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-<table align=center width="75%"><tr><td>
-<h4><a name="FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></h4>
-<table align=center width="87%"><tr><td>
-Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
-</td></tr></table><br>
-<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
-
- FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
- <b>FT_Get_WinFNT_Header</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
- <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a> *aheader );
-
-</pre></table><br>
-<table align=center width="87%"><tr><td>
-<p>Retrieve a Windows FNT font info header.</p>
-</td></tr></table><br>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>face</b></td><td>
-<p>A handle to the input face.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
-<p></p>
-<table cellpadding=3 border=0>
-<tr valign=top><td><b>aheader</b></td><td>
-<p>The WinFNT header.</p>
-</td></tr>
-</table>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
-<p>FreeType error code. 0&nbsp;means success.</p>
-</td></tr></table>
-<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
-<p>This function only works with Windows FNT faces, returning an error otherwise.</p>
-</td></tr></table>
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
-
-</body>
-</html>
diff --git a/Build/source/libs/freetype2/docs/release b/Build/source/libs/freetype2/docs/release
deleted file mode 100644
index e93f430df87..00000000000
--- a/Build/source/libs/freetype2/docs/release
+++ /dev/null
@@ -1,166 +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/VERSION.DLL: Document changed `version_info'.
-
-. ChangeLog: Announce new release (both in freetype2 and ft2demos
- modules).
-
-. Copy the CVS archive to another directory 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
-
- to test compilation with both gcc and g++.
-
-. Test C++ compilation for ft2demos too.
-
-. Tag the CVS (freetype2, ft2demos).
-
- TODO: Tag the home page CVS on savannah.nongnu.org.
-
-. Say `make dist' in both the freetype2 and ft2demos 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 below
-
- freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/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.3.7
- SAVANNAH_USER=wl
- SOURCEFORGE_USER=wlemb
-
- #####################################################################
-
- GPG='/usr/bin/gpg --batch --no-tty'
-
- version=`echo $VERSION | sed "s/\\.//g"`
-
- UNIX_PACKAGES="freetype ft2demos freetype-doc"
- WINDOWS_PACKAGES="ft ftdmo ftdoc"
- UNIX_ZIP="tar.gz tar.bz2"
- WINDOWS_ZIP="zip"
-
- PACKAGE_LIST=
- for i in $UNIX_PACKAGES; do
- for j in $UNIX_ZIP; do
- PACKAGE_LIST="$PACKAGE_LIST $i-$VERSION.$j"
- done
- done
- for i in $WINDOWS_PACKAGES; do
- for j in $WINDOWS_ZIP; do
- PACKAGE_LIST="$PACKAGE_LIST $i$version.$j"
- done
- done
-
- 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
-
- SIGNATURE_LIST=
- for i in $PACKAGE_LIST; do
- SIGNATURE_LIST="$SIGNATURE_LIST $i.sig"
- done
-
- scp $PACKAGE_LIST $SIGNATURE_LIST \
- $SAVANNAH_USER@dl.sv.nongnu.org:/releases/freetype/
-
- rsync -avP -e ssh $PACKAGE_LIST $SIGNATURE_LIST \
- $SOURCEFORGE_USER@frs.sf.net:uploads/
-
- # EOF
-
-. While files on savannah.gnu.org are automatically moved to the right
- directory, it must be done manually on SourceForge. Do that now.
-
-. Update the FreeType release notes on SourceForge.
-
-. Copy the reference files (generated by `make dist') to
-
- freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/freetype2/docs/reference
-
- and
-
- shell.sf.net:/home/groups/f/fr/freetype/htdocs/freetype2/docs/reference
-
- TODO: Create FreeType home page CVS on savannah.nongnu.org and
- update it accordingly.
-
- Write script to automatically do this.
-
- Mirror FreeType's savannah home page everywhere.
-
-. Update
-
- freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/index2.html
-
- and copy it to
-
- shell.sf.net:/home/groups/f/fr/freetype/htdocs/index2.html
-
-. Announce new release on freetype-announce@nongnu.org and to relevant
- newsgroups.
-
-----------------------------------------------------------------------
-
-Copyright 2003, 2005, 2006, 2007 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.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/Build/source/libs/freetype2/freetype2.ac b/Build/source/libs/freetype2/freetype2.ac
deleted file mode 100644
index 0fc3780c07e..00000000000
--- a/Build/source/libs/freetype2/freetype2.ac
+++ /dev/null
@@ -1,58 +0,0 @@
-if test "$needs_freetype2" = no; then
- FREETYPE2CPPFLAGS=
- LDFREETYPE2=
- FREETYPE2DEP=
-else
- EXTRA_FREETYPE2_INCLUDE=
- EXTRA_FREETYPE2_LIBDIR=
-
- if test "$with_system_freetype2" = yes; then
- if test "x$with_freetype2_libdir" != x; then
- EXTRA_FREETYPE2_LIBDIR="-L$with_freetype2_libdir"
- fi
- if test "x$with_freetype2_include" != x; then
- EXTRA_FREETYPE2_INCLUDE="-I$with_freetype2_include -I$with_freetype2_include/freetype2"
- fi
- fi
-
- OLD_LDFLAGS=$LDFLAGS
- OLD_CPPFLAGS=$CPPFLAGS
- OLD_LIBS=$LIBS
-
- LDFLAGS="$LDFLAGS $EXTRA_FREETYPE2_LIBDIR"
- CPPFLAGS="$CPPFLAGS $EXTRA_FREETYPE2_INCLUDE"
-
- if test "$with_system_freetype2" = yes; then
- AC_CHECK_LIB(freetype, FT_Init_FreeType,,
- AC_MSG_WARN(Standard FreeType2 library not found. Compiling my own.)
- with_system_freetype2=no)
- fi
-
- if test "$with_system_freetype2" = yes; then
- AC_CHECK_HEADERS(ft2build.h)
- if test "$ac_cv_header_ft2build_h" != yes; then
- AC_MSG_WARN(ft2build.h not found. Using my own freetype2 sources.)
- with_system_freetype2=no
- fi
- fi
-
- LDFLAGS=$OLD_LDFLAGS
- CPPFLAGS=$OLD_CPPFLAGS
- LIBS=$OLD_LIBS
-
- if test "$with_system_freetype2" != yes; then
- FREETYPE2CPPFLAGS='-I$(FREETYPE2SRCDIR)/include'
- LDFREETYPE2='$(FREETYPE2DIR)/.libs/libfreetype.a'
- FREETYPE2DEP='$(FREETYPE2DIR)/.libs/libfreetype.a'
- using_system_freetype2=no
- else
- FREETYPE2CPPFLAGS="$EXTRA_FREETYPE2_INCLUDE"
- LDFREETYPE2="$EXTRA_FREETYPE2_LIBDIR -lfreetype"
- FREETYPE2DEP=
- using_system_freetype2=yes
- fi
-fi
-
-AC_SUBST(FREETYPE2CPPFLAGS)
-AC_SUBST(LDFREETYPE2)
-AC_SUBST(FREETYPE2DEP)
diff --git a/Build/source/libs/freetype2/include/freetype/config/ftconfig.h b/Build/source/libs/freetype2/include/freetype/config/ftconfig.h
deleted file mode 100644
index 09b2cf951c1..00000000000
--- a/Build/source/libs/freetype2/include/freetype/config/ftconfig.h
+++ /dev/null
@@ -1,415 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftconfig.h */
-/* */
-/* ANSI-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 `freetype/builds/<system>', and */
- /* contains system-specific files that are always included first when */
- /* building the library. */
- /* */
- /* This ANSI version should stay in `include/freetype/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 */
- /* `freetype/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
-
-
- /* Preferred alignment of data */
-#define FT_ALIGNMENT 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( DARWIN_NO_CARBON ) ) || \
- ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
-#include "AvailabilityMacros.h"
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-#define DARWIN_NO_CARBON 1
-#else
-#define FT_MACINTOSH 1
-#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;
-
- /* */
-
-#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
-
-#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
-
-#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
-
-#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
-
-#elif defined( __GNUC__ )
-
- /* GCC provides the `long long' type */
-#define FT_LONG64
-#define FT_INT64 long long int
-
-#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
- /*************************************************************************/
- /* */
- /* A 64-bit data type will create compilation problems if you compile */
- /* in strict ANSI mode. To avoid them, we disable their use if */
- /* __STDC__ is defined. You can however ignore this rule by */
- /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
- /* */
-#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#ifdef __STDC__
-
- /* undefine the 64-bit macros in strict ANSI compilation mode */
-#undef FT_LONG64
-#undef FT_INT64
-
-#endif /* __STDC__ */
-
-#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
-
-
-#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 */
-
-
-#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/Build/source/libs/freetype2/include/freetype/config/ftheader.h b/Build/source/libs/freetype2/include/freetype/config/ftheader.h
deleted file mode 100644
index dc5ad3fde9a..00000000000
--- a/Build/source/libs/freetype2/include/freetype/config/ftheader.h
+++ /dev/null
@@ -1,768 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftheader.h */
-/* */
-/* Build macros of the FreeType 2 library. */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 __FT_HEADER_H__
-#define __FT_HEADER_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_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_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_XFREE86_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which provides functions specific to the XFree86 and
- * X.Org X11 servers.
- */
-#define FT_XFREE86_H <freetype/ftxf86.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:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which performs color filtering for subpixel rendering.
- */
-#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 color filtering for subpixel rendering.
- */
-#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>
-
-
- /* */
-
-#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 <freetype/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 /* __FT2_BUILD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/config/ftmodule.h b/Build/source/libs/freetype2/include/freetype/config/ftmodule.h
deleted file mode 100644
index d92b0ee6a1a..00000000000
--- a/Build/source/libs/freetype2/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(autofit_module_class)
-FT_USE_MODULE(tt_driver_class)
-FT_USE_MODULE(t1_driver_class)
-FT_USE_MODULE(cff_driver_class)
-FT_USE_MODULE(t1cid_driver_class)
-FT_USE_MODULE(pfr_driver_class)
-FT_USE_MODULE(t42_driver_class)
-FT_USE_MODULE(winfnt_driver_class)
-FT_USE_MODULE(pcf_driver_class)
-FT_USE_MODULE(psaux_module_class)
-FT_USE_MODULE(psnames_module_class)
-FT_USE_MODULE(pshinter_module_class)
-FT_USE_MODULE(ft_raster1_renderer_class)
-FT_USE_MODULE(sfnt_module_class)
-FT_USE_MODULE(ft_smooth_renderer_class)
-FT_USE_MODULE(ft_smooth_lcd_renderer_class)
-FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
-FT_USE_MODULE(bdf_driver_class)
-
-/* EOF */
diff --git a/Build/source/libs/freetype2/include/freetype/config/ftoption.h b/Build/source/libs/freetype2/include/freetype/config/ftoption.h
deleted file mode 100644
index a2d61f906bb..00000000000
--- a/Build/source/libs/freetype2/include/freetype/config/ftoption.h
+++ /dev/null
@@ -1,671 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoption.h */
-/* */
-/* User-selectable configuration macros (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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 larger than */
- /* the original size; the difference will be that 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
-
-
- /*************************************************************************/
- /* */
- /* 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 */
-
-
- /*************************************************************************/
- /* */
- /* 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 synthetize 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 */
- /* synthetize 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 synthetize 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 allows FreeType to be used with the PostScript language, using */
- /* the GhostScript interpreter. */
- /* */
-/* #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. */
- /* */
- /* This must be greater than 4KByte if you use FreeType to rasterize */
- /* glyphs; otherwise, you may set it to zero to avoid unnecessary */
- /* allocation of the render pool. */
- /* */
-#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 */
-
-
- /*************************************************************************/
- /* */
- /* 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
-
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** 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 */
- /* `freetype/ftnames.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_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. Note that there are */
- /* important patent issues related to the use of the interpreter. */
- /* */
- /* 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 */
-
-
- /*************************************************************************/
- /* */
- /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
- /* of the TrueType bytecode interpreter is used that doesn't implement */
- /* any of the patented opcodes and algorithms. Note that the */
- /* the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you */
- /* define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; with other words, */
- /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
- /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
- /* */
- /* This macro is only useful for a small number of font files (mostly */
- /* for Asian scripts) that require bytecode interpretation to properly */
- /* load glyphs. For all other fonts, this produces unpleasant results, */
- /* thus the unpatented interpreter is never used to load glyphs from */
- /* TrueType fonts unless one of the following two options is used. */
- /* */
- /* - The unpatented interpreter is explicitly activated by the user */
- /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
- /* when opening the FT_Face. */
- /* */
- /* - FreeType detects that the FT_Face corresponds to one of the */
- /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
- /* contains a hard-coded list of font names and other matching */
- /* parameters (see function `tt_face_init' in file */
- /* `src/truetype/ttobjs.c'). */
- /* */
- /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
- /* */
- /* { */
- /* FT_Parameter parameter; */
- /* FT_Open_Args open_args; */
- /* */
- /* */
- /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
- /* */
- /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
- /* open_args.pathname = my_font_pathname; */
- /* open_args.num_params = 1; */
- /* open_args.params = &parameter; */
- /* */
- /* error = FT_Open_Face( library, &open_args, index, &face ); */
- /* ... */
- /* } */
- /* */
-#define TT_CONFIG_OPTION_UNPATENTED_HINTING
-
-
- /*************************************************************************/
- /* */
- /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
- /* bytecode interpreter with a huge switch statement, rather than a call */
- /* table. This results in smaller and faster code for a number of */
- /* architectures. */
- /* */
- /* Note however that on some compiler/processor combinations, undefining */
- /* this macro will generate faster, though larger, code. */
- /* */
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
- /*************************************************************************/
- /* */
- /* 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://partners.adobe.com/asn/developer/opentype/glyf.html */
- /* http://fonts.apple.com/TTRefMan/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
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** 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 maximal 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
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** 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
-
- /* */
-
-
- /*
- * Define this variable if you want to keep the layout of internal
- * structures that was used prior to FreeType 2.2. This also compiles in
- * a few obsolete functions to avoid linking problems on typical Unix
- * distributions.
- *
- * For embedded systems or building a new distribution from scratch, it
- * is recommended to disable the macro since it reduces the library's code
- * size and activates a few memory-saving optimizations as well.
- */
-#define FT_CONFIG_OPTION_OLD_INTERNALS
-
-
- /*
- * This variable is defined if either unpatented or native TrueType
- * hinting is requested by the definitions above.
- */
-#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-#define TT_USE_BYTECODE_INTERPRETER
-#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define TT_USE_BYTECODE_INTERPRETER
-#endif
-
-FT_END_HEADER
-
-
-#endif /* __FTOPTION_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/config/ftstdlib.h b/Build/source/libs/freetype2/include/freetype/config/ftstdlib.h
deleted file mode 100644
index f923f3e4cf8..00000000000
--- a/Build/source/libs/freetype2/include/freetype/config/ftstdlib.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstdlib.h */
-/* */
-/* ANSI-specific library and header configuration file (specification */
-/* only). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /* IMPORTANT NOTE: We do not define aliases for heap management and */
- /* i/o routines (i.e. malloc/free/fopen/fread/...) */
- /* since these functions should all be encapsulated */
- /* by platform-specific implementations of */
- /* `ftsystem.c'. */
- /* */
- /**********************************************************************/
-
-
-#include <limits.h>
-
-#define FT_CHAR_BIT CHAR_BIT
-#define FT_INT_MAX INT_MAX
-#define FT_UINT_MAX UINT_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
-
-#define ft_exit exit /* only used to exit from unhandled exceptions */
-
-
- /**********************************************************************/
- /* */
- /* memory allocation */
- /* */
- /**********************************************************************/
-
-
-#define ft_scalloc calloc
-#define ft_sfree free
-#define ft_smalloc malloc
-#define ft_srealloc realloc
-
-
- /**********************************************************************/
- /* */
- /* miscellaneous */
- /* */
- /**********************************************************************/
-
-
-#define ft_atol atol
-#define ft_labs labs
-
-
- /**********************************************************************/
- /* */
- /* 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( *(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/Build/source/libs/freetype2/include/freetype/freetype.h b/Build/source/libs/freetype2/include/freetype/freetype.h
deleted file mode 100644
index 68dd3ff395a..00000000000
--- a/Build/source/libs/freetype2/include/freetype/freetype.h
+++ /dev/null
@@ -1,3716 +0,0 @@
-/***************************************************************************/
-/* */
-/* freetype.h */
-/* */
-/* FreeType high-level API and common types (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 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
-
-
- /*************************************************************************/
- /* */
- /* The `raster' component duplicates some of the declarations in */
- /* freetype.h for stand-alone use if _FREETYPE_ isn't defined. */
- /* */
- /*************************************************************************/
-
-
-#ifndef __FREETYPE_H__
-#define __FREETYPE_H__
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
-
-
-FT_BEGIN_HEADER
-
-
-
- /*************************************************************************/
- /* */
- /* <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. With */
- /* 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 public high-level API of FreeType~2. */
- /* */
- /* <Order> */
- /* FT_Library */
- /* FT_Face */
- /* FT_Size */
- /* FT_GlyphSlot */
- /* FT_CharMap */
- /* FT_Encoding */
- /* */
- /* 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_SFNT */
- /* FT_FACE_FLAG_KERNING */
- /* FT_FACE_FLAG_MULTIPLE_MASTERS */
- /* FT_FACE_FLAG_GLYPH_NAMES */
- /* FT_FACE_FLAG_EXTERNAL_STREAM */
- /* FT_FACE_FLAG_FAST_GLYPHS */
- /* FT_FACE_FLAG_HINTER */
- /* */
- /* 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_New_Memory_Face */
- /* 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_Request */
- /* FT_Set_Transform */
- /* FT_Load_Glyph */
- /* FT_Get_Char_Index */
- /* 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_CROP_BITMAP */
- /* */
- /* FT_LOAD_VERTICAL_LAYOUT */
- /* FT_LOAD_IGNORE_TRANSFORM */
- /* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */
- /* 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_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 */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Glyph_Metrics */
- /* */
- /* <Description> */
- /* A structure used 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. */
- /* */
- /* vertAdvance :: */
- /* Advance height for vertical layout. */
- /* */
- 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. Thus when */
- /* the driver finds it incorrect, it sets `size' to some calculated */
- /* values and sets `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). */
- /* */
- /* For multi-threading applications each thread should have its own */
- /* FT_Library object. */
- /* */
- /* <Note> */
- /* Library objects are normally created by @FT_Init_FreeType, and */
- /* destroyed with @FT_Done_FreeType. */
- /* */
- typedef struct FT_LibraryRec_ *FT_Library;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Module */
- /* */
- /* <Description> */
- /* A handle to a given FreeType module object. Each module can be a */
- /* font driver, a renderer, or anything else that provides services */
- /* to the formers. */
- /* */
- typedef struct FT_ModuleRec_* FT_Module;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Driver */
- /* */
- /* <Description> */
- /* A handle to a given FreeType font driver object. Each font driver */
- /* is a special 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 special */
- /* module in charge of converting a glyph image to a bitmap, when */
- /* necessary. Each renderer supports a given glyph image format, and */
- /* one or more target surface depths. */
- /* */
- typedef struct FT_RendererRec_* FT_Renderer;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Face */
- /* */
- /* <Description> */
- /* A handle to a given typographic face object. A face object models */
- /* a given typeface, in a given style. */
- /* */
- /* <Note> */
- /* Each 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 filepathname or a custom input stream. */
- /* */
- /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */
- /* */
- /* <Also> */
- /* The @FT_FaceRec details the publicly accessible fields of a given */
- /* face object. */
- /* */
- typedef struct FT_FaceRec_* FT_Face;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Size */
- /* */
- /* <Description> */
- /* A handle to an object used to model a face scaled to a given */
- /* character size. */
- /* */
- /* <Note> */
- /* Each @FT_Face has an _active_ @FT_Size object that is used by */
- /* functions like @FT_Load_Glyph to determine the scaling */
- /* transformation which 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> */
- /* The @FT_SizeRec structure details 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 where it */
- /* is possible to load any one 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> */
- /* @FT_GlyphSlotRec details the publicly accessible glyph fields. */
- /* */
- typedef struct FT_GlyphSlotRec_* FT_GlyphSlot;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_CharMap */
- /* */
- /* <Description> */
- /* A handle to a given character map. 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' and 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. */
- /* */
- /* <Also> */
- /* The @FT_CharMapRec details 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 used 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, GB2312_EUC, etc.). */
- /* */
- /* Because of 32-bit charcodes defined in Unicode (i.e., surrogates), */
- /* all character codes must be expressed as FT_Longs. */
- /* */
- /* Other encodings might be defined in the future. */
- /* */
- /* <Values> */
- /* FT_ENCODING_NONE :: */
- /* The encoding value~0 is reserved. */
- /* */
- /* FT_ENCODING_UNICODE :: */
- /* Corresponds to 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. */
- /* */
- /* FT_ENCODING_MS_SYMBOL :: */
- /* Corresponds to the Microsoft Symbol encoding, used to encode */
- /* mathematical symbols in the 32..255 character code range. For */
- /* more information, see `http://www.ceviz.net/symbol.htm'. */
- /* */
- /* FT_ENCODING_SJIS :: */
- /* Corresponds to Japanese SJIS encoding. More info at */
- /* at `http://langsupport.japanreference.com/encoding.shtml'. */
- /* See note on multi-byte encodings below. */
- /* */
- /* FT_ENCODING_GB2312 :: */
- /* Corresponds to an encoding system for Simplified Chinese as used */
- /* used in mainland China. */
- /* */
- /* 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 Wansung. */
- /* For more information see */
- /* `http://www.microsoft.com/typography/unicode/949.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 Hangeul 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 :: */
- /* Corresponds to the Adobe Standard encoding, as found in Type~1, */
- /* CFF, and OpenType/CFF fonts. It is limited to 256 character */
- /* codes. */
- /* */
- /* FT_ENCODING_ADOBE_EXPERT :: */
- /* Corresponds to the 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 :: */
- /* Corresponds to the 8-bit Apple roman encoding. Many TrueType and */
- /* OpenType fonts contain a charmap for this encoding, since older */
- /* versions of Mac OS are able to use it. */
- /* */
- /* FT_ENCODING_OLD_LATIN_2 :: */
- /* This value is deprecated and was never 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_GB2312. 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 synthetizes a Unicode charmap */
- /* for PostScript fonts, using their glyph names 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 which 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_GB2312, '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 backwards compatibility */
- FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS,
- FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312,
- 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;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* ft_encoding_xxx */
- /* */
- /* <Description> */
- /* 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_GB2312
-#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 should be emulated */
- /* for other formats. */
- /* */
- /* encoding_id :: A platform specific encoding number. This also */
- /* comes from the TrueType specification and should be */
- /* 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, used to */
- /* model 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 font file. */
- /* */
- /* face_index :: The index of the face in the font file. It */
- /* is set to~0 if there is only one face in */
- /* the font file. */
- /* */
- /* face_flags :: A set of bit flags that give important */
- /* information about the face; see */
- /* @FT_FACE_FLAG_XXX for the details. */
- /* */
- /* style_flags :: A set of bit flags indicating the style of */
- /* the face; see @FT_STYLE_FLAG_XXX for the */
- /* details. */
- /* */
- /* 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, 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, which 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). */
- /* */
- /* style_name :: The face's style name. This is an ASCII */
- /* string, usually in English, which 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. */
- /* */
- /* 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 `maximal */
- /* ascender', and `bbox.yMin' as the `minimal */
- /* 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 */
- /* usually negative. Only relevant for */
- /* scalable formats. */
- /* */
- /* height :: The height is the vertical distance */
- /* between two consecutive baselines, */
- /* expressed in font units. It is always */
- /* positive. Only relevant for scalable */
- /* formats. */
- /* */
- /* max_advance_width :: The maximal 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 maximal 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's 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. */
- /* */
- 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;
- void* extensions;
-
- 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 :: */
- /* Indicates that the face contains outline glyphs. This doesn't */
- /* prevent bitmap strikes, i.e., a face can have both this and */
- /* and @FT_FACE_FLAG_FIXED_SIZES set. */
- /* */
- /* FT_FACE_FLAG_FIXED_SIZES :: */
- /* Indicates that the face contains bitmap strikes. See also the */
- /* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */
- /* */
- /* FT_FACE_FLAG_FIXED_WIDTH :: */
- /* Indicates that the face contains fixed-width characters (like */
- /* Courier, Lucido, MonoType, etc.). */
- /* */
- /* FT_FACE_FLAG_SFNT :: */
- /* Indicates that the face uses the `sfnt' storage scheme. For */
- /* now, this means TrueType and OpenType. */
- /* */
- /* FT_FACE_FLAG_HORIZONTAL :: */
- /* Indicates that the face contains horizontal glyph metrics. This */
- /* should be set for all common formats. */
- /* */
- /* FT_FACE_FLAG_VERTICAL :: */
- /* Indicates that the face contains vertical glyph metrics. This */
- /* is only available in some formats, not all of them. */
- /* */
- /* FT_FACE_FLAG_KERNING :: */
- /* Indicates that the face contains kerning information. If set, */
- /* the kerning distance can be retrieved through the function */
- /* @FT_Get_Kerning. Otherwise the function always return the */
- /* vector (0,0). Note that FreeType doesn't handle kerning data */
- /* from the `GPOS' table (as present in some OpenType fonts). */
- /* */
- /* FT_FACE_FLAG_FAST_GLYPHS :: */
- /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */
- /* */
- /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */
- /* Indicates that the font contains multiple masters and is capable */
- /* of interpolating between them. See the multiple-masters */
- /* specific API for details. */
- /* */
- /* FT_FACE_FLAG_GLYPH_NAMES :: */
- /* Indicates that the font contains glyph names that can be */
- /* retrieved through @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 :: */
- /* Set if 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 :: */
- /* Set if the font is CID-keyed. In that case, the font 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. */
- /* */
-#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 )
-
- /* */
-
-
- /*************************************************************************
- *
- * @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 vertical
- * metrics.
- *
- */
-#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_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 )
-
-
- /*************************************************************************/
- /* */
- /* <Constant> */
- /* FT_STYLE_FLAG_XXX */
- /* */
- /* <Description> */
- /* A list of bit-flags used to indicate the style of a given face. */
- /* These are used in the `style_flags' field of @FT_FaceRec. */
- /* */
- /* <Values> */
- /* FT_STYLE_FLAG_ITALIC :: */
- /* Indicates that a given face style is italic or oblique. */
- /* */
- /* FT_STYLE_FLAG_BOLD :: */
- /* Indicates that a given 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 used 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 used 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. See */
- /* @FT_FaceRec for the details. */
- /* */
- /* descender :: The descender in 26.6 fractional pixels. See */
- /* @FT_FaceRec for the details. */
- /* */
- /* height :: The height in 26.6 fractional pixels. See */
- /* @FT_FaceRec for the details. */
- /* */
- /* max_advance :: The maximal advance width in 26.6 fractional */
- /* pixels. 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. */
- /* */
- /* Note that due to glyph hinting, these values might not be exact */
- /* for certain fonts. Thus 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, which is 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 which is 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 is the transformed advance width for the */
- /* glyph. */
- /* */
- /* 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 others 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 :: This is the bitmap's left bearing expressed */
- /* in integer pixels. Of course, this is only */
- /* valid if the format is */
- /* @FT_GLYPH_FORMAT_BITMAP. */
- /* */
- /* bitmap_top :: This is the bitmap's top bearing expressed in */
- /* integer pixels. Remember that 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, embolded, 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. */
- /* For now this is internal to FreeType. */
- /* */
- /* 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. */
- /* */
- /* control_len :: This is the length in bytes of the control */
- /* data. */
- /* */
- /* other :: Really wicked formats can use this pointer to */
- /* present their own glyph image to client */
- /* applications. Note that the application */
- /* needs to know about the image format. */
- /* */
- /* lsb_delta :: The difference between hinted and unhinted */
- /* left side bearing while autohinting is */
- /* active. Zero otherwise. */
- /* */
- /* rsb_delta :: The difference between hinted and unhinted */
- /* right side bearing while autohinting 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 finds 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 convert 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. */
- /* */
- /* <Note> */
- /* Here a small pseudo code fragment which shows how to use */
- /* `lsb_delta' and `rsb_delta': */
- /* */
- /* { */
- /* 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 - face->glyph->lsb_delta >= 32 ) */
- /* origin_x -= 64; */
- /* else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) */
- /* origin_x += 64; */
- /* */
- /* prev_rsb_delta = face->glyph->rsb_delta; */
- /* */
- /* <save glyph image, or render glyph, or ...> */
- /* */
- /* origin_x += face->glyph->advance.x; */
- /* endfor */
- /* } */
- /* */
- 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. */
- /* */
- 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. */
- /* */
- /* ft_open_memory :: Deprecated; use @FT_OPEN_MEMORY instead. */
- /* */
- /* ft_open_stream :: Deprecated; use @FT_OPEN_STREAM instead. */
- /* */
- /* ft_open_pathname :: Deprecated; use @FT_OPEN_PATHNAME instead. */
- /* */
- /* ft_open_driver :: Deprecated; use @FT_OPEN_DRIVER instead. */
- /* */
- /* ft_open_params :: Deprecated; use @FT_OPEN_PARAMS instead. */
- /* */
- /* <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
-
-#define ft_open_memory FT_OPEN_MEMORY /* deprecated */
-#define ft_open_stream FT_OPEN_STREAM /* deprecated */
-#define ft_open_pathname FT_OPEN_PATHNAME /* deprecated */
-#define ft_open_driver FT_OPEN_DRIVER /* deprecated */
-#define ft_open_params FT_OPEN_PARAMS /* deprecated */
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Parameter */
- /* */
- /* <Description> */
- /* A simple structure used to pass more or less generic parameters */
- /* to @FT_Open_Face. */
- /* */
- /* <Fields> */
- /* tag :: A four-byte identification tag. */
- /* */
- /* data :: A pointer to the parameter data. */
- /* */
- /* <Note> */
- /* The ID and function of parameters are driver-specific. */
- /* */
- typedef struct FT_Parameter_
- {
- FT_ULong tag;
- FT_Pointer data;
-
- } FT_Parameter;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Open_Args */
- /* */
- /* <Description> */
- /* A structure used 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 to open */
- /* the face. If set to~0, 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' which */
- /* 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 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 backwards compatibility. With */
- /* 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> */
- /* This function calls @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 :: The index of the face within the font. The first */
- /* face has index~0. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* See @FT_Open_Face for more details. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- 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> */
- /* This function calls @FT_Open_Face to open a font which 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 :: The index of the face within the font. The first */
- /* face has index~0. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* See @FT_Open_Face for more details. */
- /* */
- /* <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 which must */
- /* be filled by the caller. */
- /* */
- /* face_index :: The index of the face within the font. The first */
- /* face has index~0. */
- /* */
- /* <Output> */
- /* aface :: A handle to a new face object. If `face_index' is */
- /* greater than or equal to zero, it must be non-NULL. */
- /* See note below. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* Unlike FreeType 1.x, this function automatically creates a glyph */
- /* slot for the face object which can be accessed directly through */
- /* `face->glyph'. */
- /* */
- /* FT_Open_Face can be used to quickly check whether the font */
- /* format of a given font resource is supported by FreeType. If the */
- /* `face_index' field is negative, the function's return value is~0 */
- /* if the font format is recognized, or non-zero otherwise; */
- /* the function returns a more or less empty face handle in `*aface' */
- /* (if `aface' isn't NULL). The only useful field in this special */
- /* case is `face->num_faces' which gives the number of faces within */
- /* the font file. After examination, the returned @FT_Face structure */
- /* should be deallocated with a call to @FT_Done_Face. */
- /* */
- /* Each new face object created with this function also owns a */
- /* default @FT_Size object, accessible as `face->size'. */
- /* */
- 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> */
- /* This function calls @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 which 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 attachments. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Attach_Stream( FT_Face face,
- FT_Open_Args* parameters );
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Done_Face( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Select_Size */
- /* */
- /* <Description> */
- /* Select a bitmap strike. */
- /* */
- /* <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. */
- /* */
- 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. */
- /* */
- /* <Values> */
- /* FT_SIZE_REQUEST_TYPE_NOMINAL :: */
- /* The nominal size. The `units_per_EM' field of @FT_FaceRec is */
- /* used to determine both scaling values. */
- /* */
- /* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */
- /* The real dimension. The sum of the the `Ascender' and (minus */
- /* of) the `Descender' fields of @FT_FaceRec are 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 used to model a size request. */
- /* */
- /* <Fields> */
- /* type :: See @FT_Size_Request_Type. */
- /* */
- /* width :: The desired width. */
- /* */
- /* height :: The desired height. */
- /* */
- /* horiResolution :: The horizontal resolution. If set to zero, */
- /* `width' is treated as a 26.6 fractional pixel */
- /* value. */
- /* */
- /* vertResolution :: The vertical resolution. If set to zero, */
- /* `height' is treated as a 26.6 fractional pixel */
- /* value. */
- /* */
- /* <Note> */
- /* If `width' is zero, then the horizontal scaling value is set */
- /* equal to the vertical scaling value, and vice versa. */
- /* */
- 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. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Request_Size( FT_Face face,
- FT_Size_Request req );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Char_Size */
- /* */
- /* <Description> */
- /* This function calls @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> */
- /* 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. */
- /* */
-
- 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> */
- /* This function calls @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. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Pixel_Sizes( FT_Face face,
- FT_UInt pixel_width,
- FT_UInt pixel_height );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Load_Glyph */
- /* */
- /* <Description> */
- /* A function used to load a single 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 which */
- /* don't have a corresponding glyph in the font). See the discussion */
- /* of the @FT_FACE_FLAG_CID_KEYED flag for more details. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Load_Glyph( FT_Face face,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Load_Char */
- /* */
- /* <Description> */
- /* A function used to load a single glyph into the glyph slot of a */
- /* face object, according to 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. */
- /* */
- 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 used with @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 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 outline glyph loaded, but keep it in font units.
- *
- * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
- * unsets @FT_LOAD_RENDER.
- *
- * FT_LOAD_NO_HINTING ::
- * Disable hinting. This generally generates `blurrier' bitmap glyph
- * when the glyph is 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. _Don't_ use it as it is
- * problematic currently.
- *
- * FT_LOAD_FORCE_AUTOHINT ::
- * Indicates that the auto-hinter is preferred over the font's native
- * hinter. See also the note below.
- *
- * FT_LOAD_CROP_BITMAP ::
- * Indicates that the font driver should crop the loaded bitmap glyph
- * (i.e., remove all space around its black bits). Not all drivers
- * implement this.
- *
- * FT_LOAD_PEDANTIC ::
- * Indicates that the font driver should 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.
- *
- * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::
- * Indicates that the font driver should ignore the global advance
- * width defined in the font. By default, that value is used as the
- * advance width for all glyphs when the face has
- * @FT_FACE_FLAG_FIXED_WIDTH set.
- *
- * This flag exists for historical reasons (to support buggy CJK
- * fonts).
- *
- * FT_LOAD_NO_RECURSE ::
- * This flag is only used internally. It merely indicates that the
- * font driver should not load composite glyphs recursively. Instead,
- * it 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 sub-glyphs is not available to client
- * applications for now.
- *
- * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.
- *
- * FT_LOAD_IGNORE_TRANSFORM ::
- * Indicates that the transform matrix set by @FT_Set_Transform should
- * be ignored.
- *
- * 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 use @FT_LOAD_TARGET_MONO instead so that the
- * monochrome-optimized hinting algorithm is used.
- *
- * FT_LOAD_LINEAR_DESIGN ::
- * Indicates that the `linearHoriAdvance' and `linearVertAdvance'
- * fields of @FT_GlyphSlotRec should be kept in font units. See
- * @FT_GlyphSlotRec for details.
- *
- * FT_LOAD_NO_AUTOHINT ::
- * Disable auto-hinter. See also the note below.
- *
- * @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.
- *
- * Besides deciding which hinter to use, you can also decide which
- * hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details.
- */
-#define FT_LOAD_DEFAULT 0x0
-#define FT_LOAD_NO_SCALE 0x1
-#define FT_LOAD_NO_HINTING 0x2
-#define FT_LOAD_RENDER 0x4
-#define FT_LOAD_NO_BITMAP 0x8
-#define FT_LOAD_VERTICAL_LAYOUT 0x10
-#define FT_LOAD_FORCE_AUTOHINT 0x20
-#define FT_LOAD_CROP_BITMAP 0x40
-#define FT_LOAD_PEDANTIC 0x80
-#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 0x200
-#define FT_LOAD_NO_RECURSE 0x400
-#define FT_LOAD_IGNORE_TRANSFORM 0x800
-#define FT_LOAD_MONOCHROME 0x1000
-#define FT_LOAD_LINEAR_DESIGN 0x2000
-#define FT_LOAD_SBITS_ONLY 0x4000 /* temporary hack! */
-#define FT_LOAD_NO_AUTOHINT 0x8000U
-
- /* */
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_LOAD_TARGET_XXX
- *
- * @description:
- * A list of values that are used to select a specific hinting algorithm
- * to use by the hinter. You should OR one of these values to your
- * `load_flags' when calling @FT_Load_Glyph.
- *
- * Note that 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.
- *
- * Also note that @FT_LOAD_TARGET_LIGHT is an exception, in that it
- * always implies @FT_LOAD_FORCE_AUTOHINT.
- *
- * @values:
- * FT_LOAD_TARGET_NORMAL ::
- * This corresponds to 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 non-monochrome modes. Many
- * generated glyphs are more fuzzy but better resemble its original
- * shape. A bit like rendering on Mac OS~X.
- *
- * As a special exception, this target implies @FT_LOAD_FORCE_AUTOHINT.
- *
- * 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_NORMAL 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 which matches the used algorithm
- * best) unless @FT_LOAD_MONOCHROME is set.
- *
- * 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 );
- * }
- */
-
-#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> */
- /* A function used to 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~0 for */
- /* the identity matrix. */
- /* delta :: A pointer to the translation vector. Use~0 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> */
- /* An enumeration type that lists the render modes supported by */
- /* FreeType~2. Each mode corresponds to a specific type of scanline */
- /* conversion performed on the outline. */
- /* */
- /* For bitmap fonts 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. */
- /* */
- /* <Values> */
- /* FT_RENDER_MODE_NORMAL :: */
- /* This is the 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. */
- /* */
- 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;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* ft_render_mode_xxx */
- /* */
- /* <Description> */
- /* These constants are deprecated. Use the corresponding */
- /* @FT_Render_Mode values instead. */
- /* */
- /* <Values> */
- /* ft_render_mode_normal :: see @FT_RENDER_MODE_NORMAL */
- /* ft_render_mode_mono :: see @FT_RENDER_MODE_MONO */
- /* */
-#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 :: This is 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. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Render_Glyph( FT_GlyphSlot slot,
- FT_Render_Mode render_mode );
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Kerning_Mode */
- /* */
- /* <Description> */
- /* An enumeration used to specify which kerning values to return in */
- /* @FT_Get_Kerning. */
- /* */
- /* <Values> */
- /* FT_KERNING_DEFAULT :: Return scaled and grid-fitted kerning */
- /* distances (value is~0). */
- /* */
- /* FT_KERNING_UNFITTED :: Return scaled but un-grid-fitted kerning */
- /* distances. */
- /* */
- /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */
- /* units. */
- /* */
- typedef enum FT_Kerning_Mode_
- {
- FT_KERNING_DEFAULT = 0,
- FT_KERNING_UNFITTED,
- FT_KERNING_UNSCALED
-
- } FT_Kerning_Mode;
-
-
- /*************************************************************************/
- /* */
- /* <Const> */
- /* ft_kerning_default */
- /* */
- /* <Description> */
- /* This constant is deprecated. Please use @FT_KERNING_DEFAULT */
- /* instead. */
- /* */
-#define ft_kerning_default FT_KERNING_DEFAULT
-
-
- /*************************************************************************/
- /* */
- /* <Const> */
- /* ft_kerning_unfitted */
- /* */
- /* <Description> */
- /* This constant is deprecated. Please use @FT_KERNING_UNFITTED */
- /* instead. */
- /* */
-#define ft_kerning_unfitted FT_KERNING_UNFITTED
-
-
- /*************************************************************************/
- /* */
- /* <Const> */
- /* ft_kerning_unscaled */
- /* */
- /* <Description> */
- /* This constant is deprecated. Please use @FT_KERNING_UNSCALED */
- /* instead. */
- /* */
-#define ft_kerning_unscaled FT_KERNING_UNSCALED
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Kerning */
- /* */
- /* <Description> */
- /* Return the kerning vector between two glyphs of a 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 */
- /* or in pixels (26.6 format) 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. */
- /* */
- 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. */
- /* */
- /* <Output> */
- /* akerning :: The kerning in 16.16 fractional points. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- 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 maximal 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. */
- /* */
- /* This function is not compiled within the library if the config */
- /* macro `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is defined in */
- /* `include/freetype/config/ftoptions.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 and TrueType 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. */
- /* */
- 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 */
- /* which 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 a type~14 charmap is selected. */
- /* */
- 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.
- *
- */
- 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 a charmap object 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'. */
- /* */
- FT_EXPORT( FT_UInt )
- FT_Get_Char_Index( FT_Face face,
- FT_ULong charcode );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_First_Char */
- /* */
- /* <Description> */
- /* This function is used to return the first character code in the */
- /* current charmap of a given face. It also returns the */
- /* 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 with @FT_Get_Next_Char to be able 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 ); */
- /* } */
- /* } */
- /* */
- /* 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 */
- /* when 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> */
- /* This function is used to 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 first 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 this 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_Get_Name_Index */
- /* */
- /* <Description> */
- /* Return the glyph index of a given glyph name. This function uses */
- /* driver specific objects to do the translation. */
- /* */
- /* <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 used to describe subglyphs. Please refer to the
- * TrueType specification for the meaning of the various flags.
- *
- * @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, or an error is
- * returned.
- *
- * @input:
- * glyph ::
- * The source glyph slot.
- *
- * sub_index ::
- * The index of 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
- * TrueType 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 );
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* glyph_variants */
- /* */
- /* <Title> */
- /* Glyph Variants */
- /* */
- /* <Abstract> */
- /* The FreeType~2 interface to Unicode Ideographic Variation */
- /* Sequences (IVS), using the SFNT cmap format~14. */
- /* */
- /* <Description> */
- /* Many CJK characters 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 Ideographic Variation Sequences (IVS), consisting of a */
- /* Unicode base character and one of 240 variant selectors */
- /* (U+E0100-U+E01EF), instead of further extending the already huge */
- /* code range for CJK characters. */
- /* */
- /* An IVS is registered and unique; for further details please refer */
- /* to Unicode Technical Report #37, the Ideographic Variation */
- /* Database. To date (October 2007), the character with the most */
- /* variants is U+908A, having 8~such IVS. */
- /* */
- /* Adobe and MS decided to support IVS 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 variants */
- /* supported by the font. */
- /* */
- /* A variant may be either `default' or `non-default'. A default */
- /* variant is the one you will get for that code point if you look it */
- /* up in the standard Unicode cmap. A non-default variant 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 variant 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 variant. */
- /* */
- /* <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 variant 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 variant 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 variant 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 variant selector code points which 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 variant selector. */
- /* */
- /* <Input> */
- /* face :: */
- /* A handle to the source face object. */
- /* */
- /* variantSelector :: */
- /* The variant selector code point in Unicode. */
- /* */
- /* <Return> */
- /* A list of all the code points which are specified by this selector */
- /* (both default and non-default codes are returned) or NULL if there */
- /* is no valid cmap or the variant 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> */
- /* A very simple function used to perform the computation `(a*b)/c' */
- /* with maximal 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_EXPORT( FT_Long )
- FT_MulDiv( FT_Long a,
- FT_Long b,
- FT_Long c );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulFix */
- /* */
- /* <Description> */
- /* A very simple function used to perform the computation */
- /* `(a*b)/0x10000' with maximal accuracy. Most of the time this is */
- /* used to multiply a given value by a 16.16 fixed float 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> */
- /* A very simple function used to perform the computation */
- /* `(a*0x10000)/b' with maximal accuracy. Most of the time, this is */
- /* used to divide a given value by a 16.16 fixed float 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*0x10000)/b'. */
- /* */
- /* <Note> */
- /* The optimization for FT_DivFix() is simple: If (a~<<~16) fits in */
- /* 32~bits, then the division is computed directly. Otherwise, we */
- /* use a specialized version of @FT_MulDiv. */
- /* */
- FT_EXPORT( FT_Long )
- FT_DivFix( FT_Long a,
- FT_Long b );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_RoundFix */
- /* */
- /* <Description> */
- /* A very simple function used to round a 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number to be rounded. */
- /* */
- /* <Return> */
- /* The result of `(a + 0x8000) & -0x10000'. */
- /* */
- FT_EXPORT( FT_Fixed )
- FT_RoundFix( FT_Fixed a );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_CeilFix */
- /* */
- /* <Description> */
- /* A very simple function used to compute the ceiling function of a */
- /* 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number for which the ceiling function is to be computed. */
- /* */
- /* <Return> */
- /* The result of `(a + 0x10000 - 1) & -0x10000'. */
- /* */
- FT_EXPORT( FT_Fixed )
- FT_CeilFix( FT_Fixed a );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_FloorFix */
- /* */
- /* <Description> */
- /* A very simple function used to compute the floor function of a */
- /* 16.16 fixed number. */
- /* */
- /* <Input> */
- /* a :: The number for which the floor function is to be computed. */
- /* */
- /* <Return> */
- /* The result of `a & -0x10000'. */
- /* */
- 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. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************
- *
- * @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 3
-#define FREETYPE_PATCH 7
-
-
- /*************************************************************************/
- /* */
- /* <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> */
- /* Parse all bytecode instructions of a TrueType font file to check */
- /* whether any of the patented opcodes are used. This is only useful */
- /* if you want to be able to use the unpatented hinter with */
- /* fonts that do *not* use these opcodes. */
- /* */
- /* Note that this function parses *all* glyph instructions in the */
- /* font file, which may be slow. */
- /* */
- /* <Input> */
- /* face :: A face handle. */
- /* */
- /* <Return> */
- /* 1~if this is a TrueType font that uses one of the patented */
- /* opcodes, 0~otherwise. */
- /* */
- /* <Since> */
- /* 2.3.5 */
- /* */
- FT_EXPORT( FT_Bool )
- FT_Face_CheckTrueTypePatents( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Face_SetUnpatentedHinting */
- /* */
- /* <Description> */
- /* Enable or disable the unpatented hinter for a given face. */
- /* Only enable it if you have determined that the face doesn't */
- /* use any patented opcodes (see @FT_Face_CheckTrueTypePatents). */
- /* */
- /* <Input> */
- /* face :: A face handle. */
- /* */
- /* value :: New boolean setting. */
- /* */
- /* <Return> */
- /* The old setting value. This will always be false if this is not */
- /* a SFNT font, or if the unpatented hinter is not compiled in this */
- /* instance of the library. */
- /* */
- /* <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/Build/source/libs/freetype2/include/freetype/ftbbox.h b/Build/source/libs/freetype2/include/freetype/ftbbox.h
deleted file mode 100644
index 01fe3fb0d10..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftbbox.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbbox.h */
-/* */
-/* FreeType exact bbox computation (specification). */
-/* */
-/* Copyright 1996-2001, 2003, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 which 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. */
- /* */
- 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/Build/source/libs/freetype2/include/freetype/ftbdf.h b/Build/source/libs/freetype2/include/freetype/ftbdf.h
deleted file mode 100644
index a8cf6a51452..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftbdf.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbdf.h */
-/* */
-/* FreeType API for accessing BDF-specific strings (specification). */
-/* */
-/* Copyright 2002, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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:
- * FT_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.
- *
- * 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.
- *
- * 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/Build/source/libs/freetype2/include/freetype/ftbitmap.h b/Build/source/libs/freetype2/include/freetype/ftbitmap.h
deleted file mode 100644
index 982b6aed2b2..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftbitmap.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbitmap.h */
-/* */
-/* FreeType utility functions for converting 1bpp, 2bpp, 4bpp, and 8bpp */
-/* bitmaps into 8bpp format (specification). */
-/* */
-/* Copyright 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 converting FT_Bitmap objects. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Bitmap_New */
- /* */
- /* <Description> */
- /* Initialize a pointer to an @FT_Bitmap structure. */
- /* */
- /* <InOut> */
- /* abitmap :: A pointer to the bitmap structure. */
- /* */
- 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. */
- /* */
- 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, or 8bpp to a */
- /* bitmap object with depth 8bpp, making the number of used bytes per */
- /* 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_Bitmap_Done */
- /* */
- /* <Description> */
- /* Destroy a bitmap object created with @FT_Bitmap_New. */
- /* */
- /* <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/Build/source/libs/freetype2/include/freetype/ftcache.h b/Build/source/libs/freetype2/include/freetype/ftcache.h
deleted file mode 100644
index bb03b311791..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftcache.h
+++ /dev/null
@@ -1,1121 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcache.h */
-/* */
-/* FreeType Cache subsystem (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 a @FTC_FaceID into a new @FT_Face object. The latter is
- * then completely managed by the cache, including its termination
- * through @FT_Done_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, which 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 request_data,
- FT_Face* aface );
-
- /* */
-
-#define FT_POINTER_TO_ULONG( p ) ( (FT_ULong)(FT_Pointer)(p) )
-
-#define FTC_FACE_ID_HASH( i ) \
- ((FT_UInt32)(( FT_POINTER_TO_ULONG( i ) >> 3 ) ^ \
- ( FT_POINTER_TO_ULONG( i ) << 7 ) ) )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 lookup 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.
- *
- * 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_Int width;
- FT_Int 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 )
-
-#define FTC_IMAGE_TYPE_HASH( d ) \
- (FT_UFast)( FTC_FACE_ID_HASH( (d)->face_id ) ^ \
- ( (d)->width << 8 ) ^ (d)->height ^ \
- ( (d)->flags << 4 ) )
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FTC_ImageCache */
- /* */
- /* <Description> */
- /* A handle to an 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 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 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_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 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 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 );
-
-
- /* */
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*@***********************************************************************/
- /* */
- /* <Struct> */
- /* FTC_FontRec */
- /* */
- /* <Description> */
- /* A simple structure used to describe a given `font' to the cache */
- /* manager. Note that a `font' is the combination of a given face */
- /* with a given character size. */
- /* */
- /* <Fields> */
- /* face_id :: The ID of the face to use. */
- /* */
- /* pix_width :: The character width in integer pixels. */
- /* */
- /* pix_height :: The character height in integer pixels. */
- /* */
- typedef struct FTC_FontRec_
- {
- FTC_FaceID face_id;
- FT_UShort pix_width;
- FT_UShort pix_height;
-
- } FTC_FontRec;
-
-
- /* */
-
-
-#define FTC_FONT_COMPARE( f1, f2 ) \
- ( (f1)->face_id == (f2)->face_id && \
- (f1)->pix_width == (f2)->pix_width && \
- (f1)->pix_height == (f2)->pix_height )
-
-#define FTC_FONT_HASH( f ) \
- (FT_UInt32)( FTC_FACE_ID_HASH((f)->face_id) ^ \
- ((f)->pix_width << 8) ^ \
- ((f)->pix_height) )
-
- typedef FTC_FontRec* FTC_Font;
-
-
- FT_EXPORT( FT_Error )
- FTC_Manager_Lookup_Face( FTC_Manager manager,
- FTC_FaceID face_id,
- FT_Face *aface );
-
- FT_EXPORT( FT_Error )
- FTC_Manager_Lookup_Size( FTC_Manager manager,
- FTC_Font font,
- FT_Face *aface,
- FT_Size *asize );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __FTCACHE_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftchapters.h b/Build/source/libs/freetype2/include/freetype/ftchapters.h
deleted file mode 100644
index 4c618242ef0..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftchapters.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************/
-/* */
-/* This file defines the structure of the FreeType reference. */
-/* It is used by the python script which generates the HTML files. */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* general_remarks */
-/* */
-/* <Title> */
-/* General Remarks */
-/* */
-/* <Sections> */
-/* 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> */
-/* cache_subsystem */
-/* */
-/* <Title> */
-/* Cache Sub-System */
-/* */
-/* <Sections> */
-/* cache_subsystem */
-/* */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/* */
-/* <Chapter> */
-/* support_api */
-/* */
-/* <Title> */
-/* Support API */
-/* */
-/* <Sections> */
-/* computations */
-/* list_processing */
-/* outline_processing */
-/* bitmap_handling */
-/* raster */
-/* glyph_stroker */
-/* system_interface */
-/* module_management */
-/* gzip */
-/* lzw */
-/* lcd_filtering */
-/* */
-/***************************************************************************/
diff --git a/Build/source/libs/freetype2/include/freetype/ftcid.h b/Build/source/libs/freetype2/include/freetype/ftcid.h
deleted file mode 100644
index 02df2a03522..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftcid.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcid.h */
-/* */
-/* FreeType API for accessing CID font information (specification). */
-/* */
-/* Copyright 2007 by Dereg Clegg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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);
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __FTCID_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/fterrdef.h b/Build/source/libs/freetype2/include/freetype/fterrdef.h
deleted file mode 100644
index d7ad256bdb0..00000000000
--- a/Build/source/libs/freetype2/include/freetype/fterrdef.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/***************************************************************************/
-/* */
-/* fterrdef.h */
-/* */
-/* FreeType error codes (specification). */
-/* */
-/* Copyright 2002, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** LIST OF ERROR CODES/MESSAGES *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-
- /* You need to define both FT_ERRORDEF_ and FT_NOERRORDEF_ before */
- /* including this file. */
-
-
- /* 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" )
-
- /* 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" )
-
- /* 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" )
-
- /* 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_Chars_Field, 0xB3, \
- "`CHARS' field missing" )
- FT_ERRORDEF_( Missing_Startchar_Field, 0xB4, \
- "`STARTCHAR' field missing" )
- FT_ERRORDEF_( Missing_Encoding_Field, 0xB5, \
- "`ENCODING' field missing" )
- FT_ERRORDEF_( Missing_Bbx_Field, 0xB6, \
- "`BBX' field missing" )
- FT_ERRORDEF_( Bbx_Too_Big, 0xB7, \
- "`BBX' too big" )
- FT_ERRORDEF_( Corrupted_Font_Header, 0xB8, \
- "Font header corrupted or missing fields" )
- FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xB9, \
- "Font glyphs corrupted or missing fields" )
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/fterrors.h b/Build/source/libs/freetype2/include/freetype/fterrors.h
deleted file mode 100644
index 6600dadd0df..00000000000
--- a/Build/source/libs/freetype2/include/freetype/fterrors.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/***************************************************************************/
-/* */
-/* fterrors.h */
-/* */
-/* FreeType error code handling (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 special header file is used to define the handling of FT2 */
- /* enumeration constants. It can also be used to generate error message */
- /* strings with a small macro trick explained below. */
- /* */
- /* I - 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 2). You can then use the macro */
- /* FT_ERROR_BASE macro to extract the generic error code from an */
- /* FT_Error value. */
- /* */
- /* */
- /* II - Error Message strings */
- /* -------------------------- */
- /* */
- /* The error definitions below are made through special macros that */
- /* allow client applications to build a table of error message strings */
- /* if they need it. The strings are not included in a normal build of */
- /* FreeType 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 */
- /* (see below). */
- /* */
- /* FT_ERROR_DEF( e, v, s ) :: */
- /* This macro is called to define one single error. */
- /* `e' is the error code identifier (e.g. FT_Err_Invalid_Argument). */
- /* `v' is the error numerical value. */
- /* `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, 0 } }; */
- /* */
- /* const struct */
- /* { */
- /* int err_code; */
- /* const char* err_msg; */
- /* } ft_errors[] = */
- /* */
- /* #include FT_ERRORS_H */
- /* } */
- /* */
- /*************************************************************************/
-
-
-#ifndef __FTERRORS_H__
-#define __FTERRORS_H__
-
-
- /* include module base error codes */
-#include FT_MODULE_ERRORS_H
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** SETUP MACROS *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-
-#undef FT_NEED_EXTERN_C
-
-#undef FT_ERR_XCAT
-#undef FT_ERR_CAT
-
-#define FT_ERR_XCAT( x, y ) x ## y
-#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
-
-
- /* 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_CONCAT
-#undef FT_ERR_BASE
-
- /* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */
-#ifndef FT_KEEP_ERR_PREFIX
-#undef FT_ERR_PREFIX
-#endif
-
-#endif /* __FTERRORS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftgasp.h b/Build/source/libs/freetype2/include/freetype/ftgasp.h
deleted file mode 100644
index 6355bae1066..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftgasp.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgasp.h */
-/* */
-/* Access of TrueType's `gasp' table (specification). */
-/* */
-/* Copyright 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 _FT_GASP_H_
-#define _FT_GASP_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
- /***************************************************************************
- *
- * @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.
- *
- * FT_GASP_DO_GRAY ::
- * Anti-aliased rendering should be performed at the specified ppem.
- *
- * FT_GASP_SYMMETRIC_SMOOTHING ::
- * Smoothing along multiple axes must be used with ClearType.
- *
- * FT_GASP_SYMMETRIC_GRIDFIT ::
- * Grid-fitting must be used with ClearType's symmetric smoothing.
- *
- * @note:
- * `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_SMOOTHING 0x08
-#define FT_GASP_SYMMETRIC_GRIDFIT 0x10
-
-
- /*************************************************************************
- *
- * @func:
- * FT_Get_Gasp
- *
- * @description:
- * Read the `gasp' table from a TrueType or OpenType font file and
- * return the entry 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.
- *
- * @since:
- * 2.3.0
- */
- FT_EXPORT( FT_Int )
- FT_Get_Gasp( FT_Face face,
- FT_UInt ppem );
-
-/* */
-
-#endif /* _FT_GASP_H_ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftglyph.h b/Build/source/libs/freetype2/include/freetype/ftglyph.h
deleted file mode 100644
index 2c6249ca751..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftglyph.h
+++ /dev/null
@@ -1,575 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftglyph.h */
-/* */
-/* FreeType convenience functions to handle glyphs (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 float 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 a @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. */
- /* */
- /* <Input> */
- /* slot :: A handle to the source glyph slot. */
- /* */
- /* <Output> */
- /* aglyph :: A handle to the glyph object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- 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;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* ft_glyph_bbox_xxx */
- /* */
- /* <Description> */
- /* These constants are deprecated. Use the corresponding */
- /* @FT_Glyph_BBox_Mode values instead. */
- /* */
- /* <Values> */
- /* ft_glyph_bbox_unscaled :: See @FT_GLYPH_BBOX_UNSCALED. */
- /* ft_glyph_bbox_subpixels :: See @FT_GLYPH_BBOX_SUBPIXELS. */
- /* ft_glyph_bbox_gridfit :: See @FT_GLYPH_BBOX_GRIDFIT. */
- /* ft_glyph_bbox_truncate :: See @FT_GLYPH_BBOX_TRUNCATE. */
- /* ft_glyph_bbox_pixels :: See @FT_GLYPH_BBOX_PIXELS. */
- /* */
-#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 */
- /* which 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 which 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. */
- /* */
- /* 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 describe 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> */
- /* 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. 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_DEFAUT ); */
- /* */
- /* // extract glyph image */
- /* error = FT_Get_Glyph( face->glyph, &glyph ); */
- /* */
- /* // convert to a bitmap (default render mode + destroy old) */
- /* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */
- /* { */
- /* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_DEFAULT, */
- /* 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 ); */
- /* } */
- /* */
- /* */
- /* This function does nothing if the glyph format isn't scalable. */
- /* */
- 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. */
- /* */
- 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/Build/source/libs/freetype2/include/freetype/ftgxval.h b/Build/source/libs/freetype2/include/freetype/ftgxval.h
deleted file mode 100644
index 497015c1011..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftgxval.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgxval.h */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
-/* */
-/* Copyright 2004, 2005, 2006 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). */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* */
- /* 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 which
- * 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 which 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 which
- * 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 which 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/Build/source/libs/freetype2/include/freetype/ftgzip.h b/Build/source/libs/freetype2/include/freetype/ftgzip.h
deleted file mode 100644
index acbc4f0327b..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftgzip.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgzip.h */
-/* */
-/* Gzip-compressed stream support. */
-/* */
-/* Copyright 2002, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FTGZIP_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftimage.h b/Build/source/libs/freetype2/include/freetype/ftimage.h
deleted file mode 100644
index 0a1960afc8a..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftimage.h
+++ /dev/null
@@ -1,1253 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftimage.h */
-/* */
-/* FreeType glyph image formats and default raster interface */
-/* (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 a 32-bit integer used to store vectorial */
- /* coordinates. Depending on the context, these can represent */
- /* distances in integer font units, or 16.16, or 26.6 fixed float */
- /* 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). */
- /* */
- 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 value `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/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/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_LCD :: */
- /* An 8-bit bitmap, used to represent 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, used to represent 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. */
- /* */
- 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_MAX /* do not remove */
-
- } FT_Pixel_Mode;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* ft_pixel_mode_xxx */
- /* */
- /* <Description> */
- /* A list of deprecated constants. Use the corresponding */
- /* @FT_Pixel_Mode values instead. */
- /* */
- /* <Values> */
- /* ft_pixel_mode_none :: See @FT_PIXEL_MODE_NONE. */
- /* ft_pixel_mode_mono :: See @FT_PIXEL_MODE_MONO. */
- /* ft_pixel_mode_grays :: See @FT_PIXEL_MODE_GRAY. */
- /* ft_pixel_mode_pal2 :: See @FT_PIXEL_MODE_GRAY2. */
- /* ft_pixel_mode_pal4 :: See @FT_PIXEL_MODE_GRAY4. */
- /* */
-#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
-
- /* */
-
-#if 0
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_Palette_Mode */
- /* */
- /* <Description> */
- /* THIS TYPE IS DEPRECATED. DO NOT USE IT! */
- /* */
- /* An enumeration type to describe the format of a bitmap palette, */
- /* used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8. */
- /* */
- /* <Values> */
- /* ft_palette_mode_rgb :: The palette is an array of 3-byte RGB */
- /* records. */
- /* */
- /* ft_palette_mode_rgba :: The palette is an array of 4-byte RGBA */
- /* records. */
- /* */
- /* <Note> */
- /* As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by */
- /* FreeType, these types are not handled by the library itself. */
- /* */
- typedef enum FT_Palette_Mode_
- {
- ft_palette_mode_rgb = 0,
- ft_palette_mode_rgba,
-
- ft_palette_mode_max /* do not remove */
-
- } FT_Palette_Mode;
-
- /* */
-
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* 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. */
- /* */
- /* <Note> */
- /* For now, the only pixel modes supported by FreeType are mono and */
- /* grays. However, drivers might be added in the future to support */
- /* more `colorful' options. */
- /* */
- typedef struct FT_Bitmap_
- {
- int rows;
- int width;
- int pitch;
- unsigned char* buffer;
- short num_grays;
- char pixel_mode;
- 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' when 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. */
- /* */
- /* 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_FLAGS. */
- /* */
- 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;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* FT_OUTLINE_FLAGS */
- /* */
- /* <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 raster). */
- /* */
- /* 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. */
- /* */
- /* FT_OUTLINE_SMART_DROPOUTS :: */
- /* Select smart dropout control. If unset, use simple dropout */
- /* control. Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. */
- /* */
- /* FT_OUTLINE_INCLUDE_STUBS :: */
- /* If set, turn pixels on for `stubs', otherwise exclude them. */
- /* Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. */
- /* */
- /* 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> */
- /* 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
-
-
- /*************************************************************************
- *
- * @enum:
- * ft_outline_flags
- *
- * @description:
- * These constants are deprecated. Please use the corresponding
- * @FT_OUTLINE_FLAGS values.
- *
- * @values:
- * ft_outline_none :: See @FT_OUTLINE_NONE.
- * ft_outline_owner :: See @FT_OUTLINE_OWNER.
- * ft_outline_even_odd_fill :: See @FT_OUTLINE_EVEN_ODD_FILL.
- * ft_outline_reverse_fill :: See @FT_OUTLINE_REVERSE_FILL.
- * ft_outline_ignore_dropouts :: See @FT_OUTLINE_IGNORE_DROPOUTS.
- * ft_outline_high_precision :: See @FT_OUTLINE_HIGH_PRECISION.
- * ft_outline_single_pass :: See @FT_OUTLINE_SINGLE_PASS.
- */
-#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_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 use to describe the signature of a `conic */
- /* to' function during outline walking/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/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, */
- /* as well as `move to' and `close to' operations. */
- /* */
- /* <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' = (x << shift) - delta */
- /* } */
- /* */
- /* Set the value 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;
-
-
- /*************************************************************************/
- /* */
- /* <Enum> */
- /* ft_glyph_format_xxx */
- /* */
- /* <Description> */
- /* A list of deprecated constants. Use the corresponding */
- /* @FT_Glyph_Format values instead. */
- /* */
- /* <Values> */
- /* ft_glyph_format_none :: See @FT_GLYPH_FORMAT_NONE. */
- /* ft_glyph_format_composite :: See @FT_GLYPH_FORMAT_COMPOSITE. */
- /* ft_glyph_format_bitmap :: See @FT_GLYPH_FORMAT_BITMAP. */
- /* ft_glyph_format_outline :: See @FT_GLYPH_FORMAT_OUTLINE. */
- /* ft_glyph_format_plotter :: See @FT_GLYPH_FORMAT_PLOTTER. */
- /* */
-#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 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 `freetype/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. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Raster */
- /* */
- /* <Description> */
- /* A 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 (or black) pixels */
- /* when rendering a monochrome or 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). Only used for anti-aliased */
- /* rendering. */
- /* */
- /* <Note> */
- /* This structure is used by the span drawing callback type named */
- /* @FT_SpanFunc which takes the y~coordinate of the span as a */
- /* 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. */
- /* */
- /* Note that the `count' field cannot be greater than a fixed value */
- /* defined by the `FT_MAX_GRAY_SPANS' configuration macro in */
- /* `ftoption.h'. By default, this value is set to~32, which means */
- /* that if there are more than 32~spans on a given scanline, the */
- /* callback is called several times with the same `y' parameter in */
- /* order to draw all callbacks. */
- /* */
- /* Otherwise, the callback is only called once per scan-line, and */
- /* only for those scanlines that do have `gray' pixels on them. */
- /* */
- 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> */
- /* THIS TYPE IS DEPRECATED. DO NOT USE IT. */
- /* */
- /* A function used as a call-back by the monochrome scan-converter */
- /* to test whether a given target pixel is already set to the drawing */
- /* `color'. These tests are crucial to implement drop-out control */
- /* per-se the TrueType spec. */
- /* */
- /* <Input> */
- /* y :: The pixel's y~coordinate. */
- /* */
- /* x :: The pixel's x~coordinate. */
- /* */
- /* user :: User-supplied data that is passed to the callback. */
- /* */
- /* <Return> */
- /* 1~if the pixel is `set', 0~otherwise. */
- /* */
- typedef int
- (*FT_Raster_BitTest_Func)( int y,
- int x,
- void* user );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* FT_Raster_BitSet_Func */
- /* */
- /* <Description> */
- /* THIS TYPE IS DEPRECATED. DO NOT USE IT. */
- /* */
- /* A function used as a call-back by the monochrome scan-converter */
- /* to set an individual target pixel. This is crucial to implement */
- /* drop-out control according to the TrueType specification. */
- /* */
- /* <Input> */
- /* y :: The pixel's y~coordinate. */
- /* */
- /* x :: The pixel's x~coordinate. */
- /* */
- /* user :: User-supplied data that is passed to the callback. */
- /* */
- /* <Return> */
- /* 1~if the pixel is `set', 0~otherwise. */
- /* */
- 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. */
- /* */
- /* Note that for now, 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
-
- /* deprecated */
-#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 :: The black span drawing callback. */
- /* */
- /* bit_test :: The bit test callback. UNIMPLEMENTED! */
- /* */
- /* bit_set :: The bit set callback. UNIMPLEMENTED! */
- /* */
- /* 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, in the case of an aa glyph bitmap, it will call */
- /* `black_spans', and `bit_test' and `bit_set' in the case of a */
- /* monochrome bitmap. This allows direct composition over a */
- /* pre-existing bitmap through user-provided callbacks to perform the */
- /* span drawing/composition. */
- /* */
- /* Note that the `bit_test' and `bit_set' callbacks are required when */
- /* rendering a monochrome bitmap, as they are crucial to implement */
- /* correct drop-out control as defined in the TrueType specification. */
- /* */
- typedef struct FT_Raster_Params_
- {
- const FT_Bitmap* target;
- const void* source;
- int flags;
- FT_SpanFunc gray_spans;
- FT_SpanFunc black_spans;
- FT_Raster_BitTest_Func bit_test; /* doesn't work! */
- FT_Raster_BitSet_Func bit_set; /* doesn't work! */
- 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 provides an area of memory called the `render pool', */
- /* available to all registered rasters. This pool can be freely used */
- /* during a given scan-conversion but is shared by all rasters. Its */
- /* content is thus transient. */
- /* */
- /* This function is called each time the render pool changes, or just */
- /* after a new raster object is created. */
- /* */
- /* <Input> */
- /* raster :: A handle to the new raster object. */
- /* */
- /* pool_base :: The address in memory of the render pool. */
- /* */
- /* pool_size :: The size in bytes of the render pool. */
- /* */
- /* <Note> */
- /* Rasters can ignore the render pool and rely on dynamic memory */
- /* allocation if they want to (a handle to the memory allocator is */
- /* passed to the raster constructor). However, this is not */
- /* recommended for efficiency purposes. */
- /* */
- 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 which 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/Build/source/libs/freetype2/include/freetype/ftincrem.h b/Build/source/libs/freetype2/include/freetype/ftincrem.h
deleted file mode 100644
index 96abedea7b6..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftincrem.h
+++ /dev/null
@@ -1,349 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftincrem.h */
-/* */
-/* FreeType incremental loading (specification). */
-/* */
-/* Copyright 2002, 2003, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 ::
- * 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_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/Build/source/libs/freetype2/include/freetype/ftlcdfil.h b/Build/source/libs/freetype2/include/freetype/ftlcdfil.h
deleted file mode 100644
index 1e38fe7fb25..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftlcdfil.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlcdfil.h */
-/* */
-/* FreeType API for color filtering of subpixel bitmap glyphs */
-/* (specification). */
-/* */
-/* Copyright 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 __FT_LCD_FILTER_H__
-#define __FT_LCD_FILTER_H__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
- /***************************************************************************
- *
- * @section:
- * lcd_filtering
- *
- * @title:
- * LCD Filtering
- *
- * @abstract:
- * Reduce color fringes of LCD-optimized bitmaps.
- *
- * @description:
- * The @FT_Library_SetLcdFilter API can be used to specify a low-pass
- * filter which is then applied to LCD-optimized bitmaps generated
- * through @FT_Render_Glyph. This is useful to reduce color fringes
- * which would occur with unfiltered rendering.
- *
- * 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.
- */
-
-
- /****************************************************************************
- *
- * @func:
- * 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.
- *
- * FT_LCD_FILTER_LIGHT ::
- * The light filter is a variant that produces less blurriness at the
- * cost of slightly more color fringes than the default one. It might
- * be better, depending on taste, your monitor, or your personal vision.
- *
- * 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.
- *
- * @since:
- * 2.3.0
- */
- typedef enum FT_LcdFilter_
- {
- FT_LCD_FILTER_NONE = 0,
- FT_LCD_FILTER_DEFAULT = 1,
- FT_LCD_FILTER_LIGHT = 2,
- 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.
- *
- * The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
- * @FT_Outline_Get_Bitmap, @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 larger or taller than the dimensions of the corresponding
- * outline with regards to the pixel grid. For example, for
- * @FT_RENDER_MODE_LCD, the filter adds up to 3~pixels to the left, and
- * up to 3~pixels to the right.
- *
- * The bitmap offset values are adjusted correctly, so clients shouldn't
- * need to modify their layout and glyph positioning code when enabling
- * the filter.
- *
- * @since:
- * 2.3.0
- */
- FT_EXPORT( FT_Error )
- FT_Library_SetLcdFilter( FT_Library library,
- FT_LcdFilter filter );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FT_LCD_FILTER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftlist.h b/Build/source/libs/freetype2/include/freetype/ftlist.h
deleted file mode 100644
index 93b05fc0d62..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftlist.h
+++ /dev/null
@@ -1,273 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlist.h */
-/* */
-/* Generic list support for FreeType (specification). */
-/* */
-/* Copyright 1996-2001, 2003, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 which 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 which 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 which 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. */
- /* */
- /* memory :: The current memory object which handles deallocation. */
- /* */
- /* user :: A user-supplied field which is passed as the last */
- /* argument to the destructor. */
- /* */
- 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/Build/source/libs/freetype2/include/freetype/ftlzw.h b/Build/source/libs/freetype2/include/freetype/ftlzw.h
deleted file mode 100644
index 00d40169a75..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftlzw.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlzw.h */
-/* */
-/* LZW-compressed stream support. */
-/* */
-/* Copyright 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/include/freetype/ftmac.h b/Build/source/libs/freetype2/include/freetype/ftmac.h
deleted file mode 100644
index ab5bab5170c..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftmac.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmac.h */
-/* */
-/* Additional Mac-specific API. */
-/* */
-/* Copyright 1996-2001, 2004, 2006, 2007 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 <freetype/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 which 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/Build/source/libs/freetype2/include/freetype/ftmm.h b/Build/source/libs/freetype2/include/freetype/ftmm.h
deleted file mode 100644
index 6261fa87b14..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftmm.h
+++ /dev/null
@@ -1,378 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmm.h */
-/* */
-/* FreeType Multiple Master font interface (specification). */
-/* */
-/* Copyright 1996-2001, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /* George Williams has extended this interface to make it work with */
- /* both Type~1 Multiple Masters fonts and GX distortable (var) */
- /* fonts. Some of these routines only work with MM fonts, others */
- /* will work with both types. They are similar enough that a */
- /* consistent interface makes sense. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Axis */
- /* */
- /* <Description> */
- /* A simple structure used to model a given axis in design space for */
- /* Multiple Masters fonts. */
- /* */
- /* This structure can't be used for GX var 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 used to model the axes and space of a Multiple Masters */
- /* font. */
- /* */
- /* This structure can't be used for GX var 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 simple structure used to model a given axis in design space for */
- /* Multiple Masters and GX var fonts. */
- /* */
- /* <Fields> */
- /* name :: The axis's name. */
- /* Not always meaningful for GX. */
- /* */
- /* minimum :: The axis's minimum design coordinate. */
- /* */
- /* def :: The axis's default design coordinate. */
- /* FreeType computes meaningful default values for MM; it */
- /* is then an integer value, not in 16.16 format. */
- /* */
- /* maximum :: The axis's maximum design coordinate. */
- /* */
- /* tag :: The axis's tag (the GX equivalent to `name'). */
- /* FreeType provides default values for MM if possible. */
- /* */
- /* strid :: The entry in `name' table (another GX version of */
- /* `name'). */
- /* Not meaningful for MM. */
- /* */
- 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 simple structure used to model a named style in a GX var font. */
- /* */
- /* This structure can't be used for MM fonts. */
- /* */
- /* <Fields> */
- /* coords :: The design coordinates for this style. */
- /* This is an array with one entry for each axis. */
- /* */
- /* strid :: The entry in `name' table identifying this style. */
- /* */
- typedef struct FT_Var_Named_Style_
- {
- FT_Fixed* coords;
- FT_UInt strid;
-
- } FT_Var_Named_Style;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Var */
- /* */
- /* <Description> */
- /* A structure used to model the axes and space of a Multiple Masters */
- /* or GX var distortable font. */
- /* */
- /* Some fields are specific to one format and not to the other. */
- /* */
- /* <Fields> */
- /* num_axis :: The number of axes. The maximum value is~4 for */
- /* MM; no limit in GX. */
- /* */
- /* num_designs :: The number of designs; should be normally */
- /* 2^num_axis for MM fonts. Not meaningful for GX */
- /* (where every glyph could have a different */
- /* number of designs). */
- /* */
- /* num_namedstyles :: The number of named styles; only meaningful for */
- /* GX which allows certain design coordinates to */
- /* have a string ID (in the `name' table) */
- /* associated with them. The font can tell the */
- /* user that, for example, Weight=1.5 is `Bold'. */
- /* */
- /* axis :: A table of axis descriptors. */
- /* GX fonts contain slightly more data than MM. */
- /* */
- /* namedstyles :: A table of named styles. */
- /* Only meaningful with GX. */
- /* */
- 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 the Multiple Master descriptor of a given font. */
- /* */
- /* This function can't be used with GX 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 the Multiple Master/GX var descriptor of a given font. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Output> */
- /* amaster :: The Multiple Masters descriptor. */
- /* Allocates a data structure, which the user must free */
- /* (a single call to FT_FREE will do it). */
- /* */
- /* <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 Multiple Masters fonts, choose an interpolated font design */
- /* through design coordinates. */
- /* */
- /* This function can't be used with GX fonts. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of design coordinates (must be equal to */
- /* the number of axes in the font). */
- /* */
- /* 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> */
- /* For Multiple Master or GX Var fonts, choose an interpolated font */
- /* design through design coordinates. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of design coordinates (must be equal to */
- /* the number of axes in the font). */
- /* */
- /* 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_Set_MM_Blend_Coordinates */
- /* */
- /* <Description> */
- /* For Multiple Masters and GX var fonts, choose an interpolated font */
- /* design through normalized blend coordinates. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of design coordinates (must be equal to */
- /* the number of axes in the font). */
- /* */
- /* coords :: The design coordinates array (each element must be */
- /* between 0 and 1.0). */
- /* */
- /* <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_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 );
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FTMM_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftmodapi.h b/Build/source/libs/freetype2/include/freetype/ftmodapi.h
deleted file mode 100644
index 899812ad4ec..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftmodapi.h
+++ /dev/null
@@ -1,441 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmodapi.h */
-/* */
-/* FreeType modules public interface (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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, and remove modules from FreeType. */
- /* */
- /* <Description> */
- /* The definitions below are used to manage modules within FreeType. */
- /* Modules can be added, upgraded, and removed at runtime. */
- /* */
- /*************************************************************************/
-
-
- /* 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 */
-
-
- /* 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
-
-
- 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 finalize. */
- /* */
- /* 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_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. */
- /* */
- /* <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. */
- /* */
- 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. */
- /* */
- 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 ::
- * The library implements a bytecode interpreter that doesn't
- * support the patented operations of the TrueType virtual machine.
- *
- * Its main use is to load certain Asian fonts which position and
- * scale glyph components with bytecode instructions. It produces
- * bad output for most other fonts.
- *
- * FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
- * The library implements a bytecode interpreter that covers
- * the full instruction set of the TrueType virtual machine.
- * See the file `docs/PATENTS' for legal aspects.
- *
- * @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 a @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/Build/source/libs/freetype2/include/freetype/ftmoderr.h b/Build/source/libs/freetype2/include/freetype/ftmoderr.h
deleted file mode 100644
index b0115dd0dd3..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftmoderr.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmoderr.h */
-/* */
-/* FreeType module error offsets (specification). */
-/* */
-/* Copyright 2001, 2002, 2003, 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 offsets. */
- /* */
- /* The lower byte gives the error code, the higher byte gives the */
- /* module. The base module has error offset 0. For example, the error */
- /* `FT_Err_Invalid_File_Format' has value 0x003, the error */
- /* `TT_Err_Invalid_File_Format' has value 0x1103, the error */
- /* `T1_Err_Invalid_File_Format' has value 0x1203, etc. */
- /* */
- /* Undefine the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in ftoption.h */
- /* to make the higher byte always zero (disabling the module error */
- /* mechanism). */
- /* */
- /* 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 */
- /* } */
- /* */
- /* To use such a table, all errors must be ANDed with 0xFF00 to remove */
- /* the error code. */
- /* */
- /*************************************************************************/
-
-
-#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( Cache, 0x300, "cache module" )
- FT_MODERRDEF( CFF, 0x400, "CFF module" )
- FT_MODERRDEF( CID, 0x500, "CID module" )
- FT_MODERRDEF( Gzip, 0x600, "Gzip module" )
- FT_MODERRDEF( LZW, 0x700, "LZW module" )
- FT_MODERRDEF( OTvalid, 0x800, "OpenType validation module" )
- FT_MODERRDEF( PCF, 0x900, "PCF module" )
- FT_MODERRDEF( PFR, 0xA00, "PFR module" )
- FT_MODERRDEF( PSaux, 0xB00, "PS auxiliary module" )
- FT_MODERRDEF( PShinter, 0xC00, "PS hinter module" )
- FT_MODERRDEF( PSnames, 0xD00, "PS names module" )
- FT_MODERRDEF( Raster, 0xE00, "raster module" )
- FT_MODERRDEF( SFNT, 0xF00, "SFNT module" )
- FT_MODERRDEF( Smooth, 0x1000, "smooth raster module" )
- FT_MODERRDEF( TrueType, 0x1100, "TrueType module" )
- FT_MODERRDEF( Type1, 0x1200, "Type 1 module" )
- FT_MODERRDEF( Type42, 0x1300, "Type 42 module" )
- FT_MODERRDEF( Winfonts, 0x1400, "Windows FON/FNT 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/Build/source/libs/freetype2/include/freetype/ftotval.h b/Build/source/libs/freetype2/include/freetype/ftotval.h
deleted file mode 100644
index 027f2e88657..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftotval.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftotval.h */
-/* */
-/* FreeType API for validating OpenType tables (specification). */
-/* */
-/* Copyright 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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). */
- /* */
- /*************************************************************************/
-
-
- /**********************************************************************
- *
- * @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 which
- * 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 which 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/Build/source/libs/freetype2/include/freetype/ftoutln.h b/Build/source/libs/freetype2/include/freetype/ftoutln.h
deleted file mode 100644
index 6a0f95b9145..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftoutln.h
+++ /dev/null
@@ -1,536 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoutln.h */
-/* */
-/* Support for the FT_Outline type used to store glyph shapes of */
-/* most scalable font formats (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_FLAGS */
- /* FT_Outline_New */
- /* FT_Outline_Done */
- /* FT_Outline_Copy */
- /* FT_Outline_Translate */
- /* FT_Outline_Transform */
- /* FT_Outline_Embolden */
- /* 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_MoveTo_Func */
- /* FT_Outline_LineTo_Func */
- /* FT_Outline_ConicTo_Func */
- /* FT_Outline_CubicTo_Func */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <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> */
- /* FreeType error code. 0~means success. */
- /* */
- 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 maximal number of points within the outline. */
- /* */
- /* numContours :: The maximal number of contours within the outline. */
- /* */
- /* <Output> */
- /* anoutline :: A handle to the new outline. NULL in case of */
- /* error. */
- /* */
- /* <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. */
- /* */
- 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 */
- /* which 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. */
- /* */
- 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. */
- /* */
- /* Example call: */
- /* */
- /* { */
- /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */
- /* if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE ) */
- /* FT_Outline_Embolden( &face->slot->outline, strength ); */
- /* } */
- /* */
- FT_EXPORT( FT_Error )
- FT_Outline_Embolden( FT_Outline* outline,
- FT_Pos strength );
-
-
- /*************************************************************************/
- /* */
- /* <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 functions 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 functions 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 computing
- * the direction of each global horizontal and/or vertical extrema
- * within the outline.
- *
- * 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/Build/source/libs/freetype2/include/freetype/ftpfr.h b/Build/source/libs/freetype2/include/freetype/ftpfr.h
deleted file mode 100644
index 8e79a794f1e..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftpfr.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpfr.h */
-/* */
-/* FreeType API for accessing PFR-specific data (specification only). */
-/* */
-/* Copyright 2002, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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'.
- * 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/Build/source/libs/freetype2/include/freetype/ftrender.h b/Build/source/libs/freetype2/include/freetype/ftrender.h
deleted file mode 100644
index 41c31eac48c..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftrender.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrender.h */
-/* */
-/* FreeType renderer modules public interface (specification). */
-/* */
-/* Copyright 1996-2001, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /* raster :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */
- /* This is a pointer to the corresponding raster */
- /* object, if any. */
- /* */
- 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. */
- /* */
- 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/Build/source/libs/freetype2/include/freetype/ftsizes.h b/Build/source/libs/freetype2/include/freetype/ftsizes.h
deleted file mode 100644
index 05636c7ae35..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftsizes.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsizes.h */
-/* */
-/* FreeType size objects management (specification). */
-/* */
-/* Copyright 1996-2001, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 last-created one 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/Build/source/libs/freetype2/include/freetype/ftsnames.h b/Build/source/libs/freetype2/include/freetype/ftsnames.h
deleted file mode 100644
index 477e1e3ce81..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftsnames.h
+++ /dev/null
@@ -1,170 +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-2001, 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 __FT_SFNT_NAMES_H__
-#define __FT_SFNT_NAMES_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' 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'. */
- /* */
- /* encoding_id :: The encoding ID for `string'. */
- /* */
- /* language_id :: The language ID for `string'. */
- /* */
- /* name_id :: An identifier for `string'. */
- /* */
- /* string :: The `name' string. Note that its format differs */
- /* depending on the (platform,encoding) pair. It can */
- /* be a Pascal String, a UTF-16 one, etc. */
- /* */
- /* Generally speaking, the string is not */
- /* zero-terminated. Please refer to the TrueType */
- /* specification for details. */
- /* */
- /* string_len :: The length of `string' in bytes. */
- /* */
- /* <Note> */
- /* Possible values for `platform_id', `encoding_id', `language_id', */
- /* and `name_id' are given in the file `ttnameid.h'. For details */
- /* please refer to the TrueType or OpenType specification. */
- /* */
- /* See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */
- /* @TT_ISO_ID_XXX, and @TT_MS_ID_XXX. */
- /* */
- 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. */
- /* */
- /* 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. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Sfnt_Name( FT_Face face,
- FT_UInt idx,
- FT_SfntName *aname );
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FT_SFNT_NAMES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftstroke.h b/Build/source/libs/freetype2/include/freetype/ftstroke.h
deleted file mode 100644
index 38d20553ea0..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftstroke.h
+++ /dev/null
@@ -1,716 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstroke.h */
-/* */
-/* FreeType path stroker (specification). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 __FT_STROKE_H__
-#define __FT_STROKE_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.
- */
-
-
- /**************************************************************
- *
- * @type:
- * FT_Stroker
- *
- * @description:
- * Opaque handler 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; i.e., the two joining lines
- * are extended until they intersect.
- *
- * FT_STROKER_LINEJOIN_MITER ::
- * Same as beveled rendering, except that an additional line
- * break is added if the angle between the two joining lines
- * is too closed (this is useful to avoid unpleasant spikes
- * in beveled rendering).
- */
- typedef enum FT_Stroker_LineJoin_
- {
- FT_STROKER_LINEJOIN_ROUND = 0,
- FT_STROKER_LINEJOIN_BEVEL,
- FT_STROKER_LINEJOIN_MITER
-
- } 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_LEFT 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 style,
- * expressed as 16.16 fixed point value.
- *
- * @note:
- * The radius is expressed in the same units that the outline
- * coordinates.
- */
- 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 will generate two distinct `border' outlines.
- *
- * If `opened' is~1, the outline is processed as an open path, and the
- * stroker will generate 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 will `draw' 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 will return 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 will append the border points and
- * contours to your outline, but will 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 the all borders to your own @FT_Outline structure.
- *
- * Note that this function will append the border points and
- * contours to your outline, but will 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.
- */
- 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.
- */
- FT_EXPORT( FT_Error )
- FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
- FT_Stroker stroker,
- FT_Bool inside,
- FT_Bool destroy );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __FT_STROKE_H__ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8 */
-/* End: */
diff --git a/Build/source/libs/freetype2/include/freetype/ftsynth.h b/Build/source/libs/freetype2/include/freetype/ftsynth.h
deleted file mode 100644
index 36984bf1a7b..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftsynth.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsynth.h */
-/* */
-/* FreeType synthesizing code for emboldening and slanting */
-/* (specification). */
-/* */
-/* Copyright 2000-2001, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 *********/
- /********* *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#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
-
- /* Make sure slot owns slot->bitmap. */
- FT_EXPORT( FT_Error )
- FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot );
-
- /* Do not use this function directly! Copy the code to */
- /* your application and modify it to suit your need. */
- FT_EXPORT( void )
- FT_GlyphSlot_Embolden( FT_GlyphSlot slot );
-
-
- FT_EXPORT( void )
- FT_GlyphSlot_Oblique( FT_GlyphSlot slot );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __FTSYNTH_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftsystem.h b/Build/source/libs/freetype2/include/freetype/ftsystem.h
deleted file mode 100644
index a95b2c76b61..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftsystem.h
+++ /dev/null
@@ -1,346 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.h */
-/* */
-/* FreeType low-level system interface definition (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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.
- *
- */
- 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.
- *
- */
- 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.
- *
- * 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/Build/source/libs/freetype2/include/freetype/fttrigon.h b/Build/source/libs/freetype2/include/freetype/fttrigon.h
deleted file mode 100644
index 6b77d2ee54c..00000000000
--- a/Build/source/libs/freetype2/include/freetype/fttrigon.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttrigon.h */
-/* */
-/* FreeType trigonometric functions (specification). */
-/* */
-/* Copyright 2001, 2003, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 float 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 `sin(angle)', and the value of
- * `vec.y' will be `cos(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 address of 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 address of 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/Build/source/libs/freetype2/include/freetype/fttypes.h b/Build/source/libs/freetype2/include/freetype/fttypes.h
deleted file mode 100644
index 54f08e3e5a2..00000000000
--- a/Build/source/libs/freetype2/include/freetype/fttypes.h
+++ /dev/null
@@ -1,587 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttypes.h */
-/* */
-/* FreeType simple types definitions (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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_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 float type used for unit vectors. */
- /* */
- typedef signed short FT_F2Dot14;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_F26Dot6 */
- /* */
- /* <Description> */
- /* A signed 26.6 fixed float type used for vectorial pixel */
- /* coordinates. */
- /* */
- typedef signed long FT_F26Dot6;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Fixed */
- /* */
- /* <Description> */
- /* This type is used to store 16.16 fixed float 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 float 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 which 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. */
- /* */
- /* Most 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 which 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_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 )
-
- /* return base error code (without module-specific prefix) */
-#define FT_ERROR_BASE( x ) ( (x) & 0xFF )
-
- /* return module error code */
-#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U )
-
-#define FT_BOOL( x ) ( (FT_Bool)( x ) )
-
-FT_END_HEADER
-
-#endif /* __FTTYPES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ftwinfnt.h b/Build/source/libs/freetype2/include/freetype/ftwinfnt.h
deleted file mode 100644
index ea33353536e..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftwinfnt.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftwinfnt.h */
-/* */
-/* FreeType API for accessing Windows fnt-specific data. */
-/* */
-/* Copyright 2003, 2004, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
- * 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
- *
- * http://www.microsoft.com/globaldev/reference/cphome.mspx,
- *
- * 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/Build/source/libs/freetype2/include/freetype/ftxf86.h b/Build/source/libs/freetype2/include/freetype/ftxf86.h
deleted file mode 100644
index ae9ff076fab..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ftxf86.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftxf86.h */
-/* */
-/* Support functions for X11. */
-/* */
-/* Copyright 2002, 2003, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 __FTXF86_H__
-#define __FTXF86_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_X11_Font_Format */
- /* */
- /* <Description> */
- /* Return a string describing the format of a given face, using values */
- /* which can be used as an X11 FONT_PROPERTY. Possible values are */
- /* `TrueType', `Type~1', `BDF', `PCF', `Type~42', `CID~Type~1', `CFF', */
- /* `PFR', and `Windows~FNT'. */
- /* */
- /* <Input> */
- /* face :: */
- /* Input face handle. */
- /* */
- /* <Return> */
- /* Font format string. NULL in case of error. */
- /* */
- FT_EXPORT( const char* )
- FT_Get_X11_Font_Format( FT_Face face );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __FTXF86_H__ */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/autohint.h b/Build/source/libs/freetype2/include/freetype/internal/autohint.h
deleted file mode 100644
index ee004022f9d..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/autohint.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/***************************************************************************/
-/* */
-/* autohint.h */
-/* */
-/* High-level `autohint' module-specific interface (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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> */
- /* Retrieves 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> */
- /* Discards 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_ServiceRec */
- /* */
- /* <Description> */
- /* The auto-hinter module's interface. */
- /* */
- typedef struct FT_AutoHinter_ServiceRec_
- {
- FT_AutoHinter_GlobalResetFunc reset_face;
- FT_AutoHinter_GlobalGetFunc get_global_hints;
- FT_AutoHinter_GlobalDoneFunc done_global_hints;
- FT_AutoHinter_GlyphLoadFunc load_glyph;
-
- } FT_AutoHinter_ServiceRec, *FT_AutoHinter_Service;
-
-
-FT_END_HEADER
-
-#endif /* __AUTOHINT_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftcalc.h b/Build/source/libs/freetype2/include/freetype/internal/ftcalc.h
deleted file mode 100644
index 58def34cab2..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftcalc.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcalc.h */
-/* */
-/* Arithmetic computations (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_FixedSqrt */
- /* */
- /* <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 );
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Sqrt32 */
- /* */
- /* <Description> */
- /* Computes the square root of an Int32 integer (which will be */
- /* handled as an unsigned long value). */
- /* */
- /* <Input> */
- /* x :: The value to compute the root for. */
- /* */
- /* <Return> */
- /* The result of `sqrt(x)'. */
- /* */
- FT_EXPORT( FT_Int32 )
- FT_Sqrt32( FT_Int32 x );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*************************************************************************/
- /* */
- /* FT_MulDiv() and FT_MulFix() are declared in freetype.h. */
- /* */
- /*************************************************************************/
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_MulDiv_No_Round */
- /* */
- /* <Description> */
- /* A very simple function used to perform the computation `(a*b)/c' */
- /* (without rounding) with maximal 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 );
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
- /*
- * 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 );
-
-
- /*
- * 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 angle difference between the `in' and `out' vectors is
- * very small.
- */
- FT_BASE( FT_Int )
- ft_corner_is_flat( FT_Pos in_x,
- FT_Pos in_y,
- FT_Pos out_x,
- FT_Pos out_y );
-
-
-#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) << 6 )
-#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) << 14 )
-#define INT_TO_FIXED( x ) ( (FT_Long)(x) << 16 )
-#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) << 2 )
-#define FLOAT_TO_FIXED( x ) ( (FT_Long)( x * 65536.0 ) )
-
-#define ROUND_F26DOT6( x ) ( x >= 0 ? ( ( (x) + 32 ) & -64 ) \
- : ( -( ( 32 - (x) ) & -64 ) ) )
-
-
-FT_END_HEADER
-
-#endif /* __FTCALC_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftdebug.h b/Build/source/libs/freetype2/include/freetype/internal/ftdebug.h
deleted file mode 100644
index d40af4fe1e5..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftdebug.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.h */
-/* */
-/* Debugging and logging component (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 macro. */
- /* */
- /*************************************************************************/
-
-#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 )
-
-#else /* !FT_DEBUG_LEVEL_ERROR */
-
-#define FT_ASSERT( condition ) do ; while ( 0 )
-
-#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,
- ... );
-
-#endif /* FT_DEBUG_LEVEL_ERROR */
-
-
- FT_BASE( void )
- ft_debug_init( void );
-
-
-#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. */
-#pragma warning( disable : 4127 )
-
-#endif /* _MSC_VER */
-
-
-FT_END_HEADER
-
-#endif /* __FTDEBUG_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftdriver.h b/Build/source/libs/freetype2/include/freetype/internal/ftdriver.h
deleted file mode 100644
index e433e78da06..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftdriver.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdriver.h */
-/* */
-/* FreeType font driver interface (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 );
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- typedef FT_Error
- (*FT_Size_ResetPointsFunc)( FT_Size size,
- FT_F26Dot6 char_width,
- FT_F26Dot6 char_height,
- FT_UInt horz_resolution,
- FT_UInt vert_resolution );
-
- typedef FT_Error
- (*FT_Size_ResetPixelsFunc)( FT_Size size,
- FT_UInt pixel_width,
- FT_UInt pixel_height );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
- typedef FT_Error
- (*FT_Slot_LoadFunc)( FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
- typedef FT_UInt
- (*FT_CharMap_CharIndexFunc)( FT_CharMap charmap,
- FT_Long charcode );
-
- typedef FT_Long
- (*FT_CharMap_CharNextFunc)( FT_CharMap charmap,
- FT_Long charcode );
-
- 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_Bool vertical,
- FT_UShort* 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. */
- /* Currently not implemented. 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;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_Size_ResetPointsFunc set_char_sizes;
- FT_Size_ResetPixelsFunc set_pixel_sizes;
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
- 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;
-
-
- /*
- * The following functions are used as stubs for `set_char_sizes' and
- * `set_pixel_sizes'; the code uses `request_size' and `select_size'
- * functions instead.
- *
- * Implementation is in `src/base/ftobjs.c'.
- */
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_BASE( FT_Error )
- ft_stub_set_char_sizes( FT_Size size,
- FT_F26Dot6 width,
- FT_F26Dot6 height,
- FT_UInt horz_res,
- FT_UInt vert_res );
-
- FT_BASE( FT_Error )
- ft_stub_set_pixel_sizes( FT_Size size,
- FT_UInt width,
- FT_UInt height );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
-FT_END_HEADER
-
-#endif /* __FTDRIVER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftgloadr.h b/Build/source/libs/freetype2/include/freetype/internal/ftgloadr.h
deleted file mode 100644
index 548481ac800..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftgloadr.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgloadr.h */
-/* */
-/* The FreeType glyph loader (specification). */
-/* */
-/* Copyright 2002, 2003, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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). */
- /* */
- /* <Note> */
- /* The glyph loader implementation is not part of the high-level API, */
- /* hence the forward structure declaration. */
- /* */
- typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ;
-
-
-#if 0 /* moved to freetype.h in version 2.2 */
-#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
-#endif
-
-
- 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;
-
-
- /* 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 || (int)((_loader)->base.outline.n_points + \
- (_loader)->current.outline.n_points + \
- (_count)) <= (int)(_loader)->max_points )
-
-#define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \
- ( (_count) == 0 || (int)((_loader)->base.outline.n_contours + \
- (_loader)->current.outline.n_contours + \
- (_count)) <= (int)(_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), (_points), (_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/Build/source/libs/freetype2/include/freetype/internal/ftmemory.h b/Build/source/libs/freetype2/include/freetype/internal/ftmemory.h
deleted file mode 100644
index 2010ca90d7e..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftmemory.h
+++ /dev/null
@@ -1,368 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmemory.h */
-/* */
-/* The FreeType memory management macros (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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; where `p'
- * is a typed pointer. Since we don't have a `typeof' operator in
- * standard C++, we have to use ugly casts.
- */
-
-#ifdef __cplusplus
-#define FT_ASSIGNP( p, val ) *((void**)&(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. See below for
- * for documentation.
- */
-
- 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 );
-
-
-#define FT_MEM_ALLOC( ptr, size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, (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, \
- (cursz), (newsz), \
- (ptr), &error ) )
-
-#define FT_MEM_QALLOC( ptr, size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qalloc( memory, (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, \
- (cursz), (newsz), \
- (ptr), &error ) )
-
-#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
- (cursz), (newsz), \
- (ptr), &error ) )
-
-#define FT_MEM_ALLOC_MULT( ptr, count, item_size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, (item_size), \
- 0, (count), \
- NULL, &error ) )
-
-#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, (itmsz), \
- (oldcnt), (newcnt), \
- (ptr), &error ) )
-
-#define FT_MEM_QALLOC_MULT( ptr, count, item_size ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, (item_size), \
- 0, (count), \
- NULL, &error ) )
-
-#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, (itmsz), \
- (oldcnt), (newcnt), \
- (ptr), &error ) )
-
-
-#define FT_MEM_SET_ERROR( cond ) ( (cond), error != 0 )
-
-
-#define FT_MEM_SET( dest, byte, count ) ft_memset( dest, byte, count )
-
-#define FT_MEM_COPY( dest, source, count ) ft_memcpy( dest, source, count )
-
-#define FT_MEM_MOVE( dest, source, count ) ft_memmove( dest, source, 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, (count) * sizeof ( *(dest) ) )
-
-#define FT_ARRAY_COPY( dest, source, count ) \
- FT_MEM_COPY( dest, source, (count) * sizeof ( *(dest) ) )
-
-#define FT_ARRAY_MOVE( dest, source, count ) \
- FT_MEM_MOVE( dest, source, (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, (count), \
- NULL, &error ) )
-
-#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, sizeof ( *(ptr) ), \
- (cursz), (newsz), \
- (ptr), &error ) )
-
-#define FT_MEM_QNEW_ARRAY( ptr, count ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
- 0, (count), \
- NULL, &error ) )
-
-#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
- FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
- (cursz), (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 ) )
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_BASE( FT_Error )
- FT_Alloc( FT_Memory memory,
- FT_Long size,
- void* *P );
-
- FT_BASE( FT_Error )
- FT_QAlloc( FT_Memory memory,
- FT_Long size,
- void* *p );
-
- FT_BASE( FT_Error )
- FT_Realloc( FT_Memory memory,
- FT_Long current,
- FT_Long size,
- void* *P );
-
- FT_BASE( FT_Error )
- FT_QRealloc( FT_Memory memory,
- FT_Long current,
- FT_Long size,
- void* *p );
-
- FT_BASE( void )
- FT_Free( FT_Memory memory,
- void* *P );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- 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/Build/source/libs/freetype2/include/freetype/internal/ftobjs.h b/Build/source/libs/freetype2/include/freetype/internal/ftobjs.h
deleted file mode 100644
index 1f22343a59c..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftobjs.h
+++ /dev/null
@@ -1,875 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftobjs.h */
-/* */
-/* The FreeType private base classes (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-#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) )
-
-
-#define FT_PAD_FLOOR( x, n ) ( (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) & ~63 )
-#define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 )
-#define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 )
-
-
- /*
- * Return the highest power of 2 that is <= value; this correspond to
- * the highest bit in a given 32-bit value.
- */
- FT_BASE( FT_UInt32 )
- ft_highpow2( FT_UInt32 value );
-
-
- /*
- * 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;
-
-
- /* 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 maximal 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 maximal 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. */
- /* */
- /* ignore_unpatented_hinter :: */
- /* This boolean flag instructs the glyph loader to ignore the */
- /* native font hinter, if one is found. This is exclusively used */
- /* in the case when the unpatented hinter is compiled within the */
- /* library. */
- /* */
- typedef struct FT_Face_InternalRec_
- {
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- FT_UShort reserved1;
- FT_Short reserved2;
-#endif
- 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_Bool ignore_unpatented_hinter;
-
- } 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 0x1
-
- 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;
-
-
-#if 0
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Size_InternalRec */
- /* */
- /* <Description> */
- /* This structure contains the internal fields of each FT_Size */
- /* object. Currently, it's empty. */
- /* */
- /*************************************************************************/
-
- typedef struct FT_Size_InternalRec_
- {
- /* empty */
-
- } FT_Size_InternalRec;
-
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** 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. */
- /* */
- /* generic :: A generic structure for user-level extensibility (?). */
- /* */
- typedef struct FT_ModuleRec_
- {
- FT_Module_Class* clazz;
- FT_Library library;
- FT_Memory memory;
- FT_Generic generic;
-
- } FT_ModuleRec;
-
-
- /* typecast an object to a 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 )
-
-
- /*************************************************************************/
- /* */
- /* <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 );
-
- /* */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** FACE, SIZE & GLYPH SLOT OBJECTS ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* 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 \
- ? (FT_Pos)( (req)->width * (req)->horiResolution + 36 ) / 72 \
- : (req)->width )
-
-#define FT_REQUEST_HEIGHT( req ) \
- ( (req)->vertResolution \
- ? (FT_Pos)( (req)->height * (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. */
- /* */
- /* extensions :: A typeless pointer to the driver's extensions */
- /* registry, if they are supported through the */
- /* configuration macro FT_CONFIG_OPTION_EXTENSIONS. */
- /* */
- /* glyph_loader :: The glyph loader for all faces managed by this */
- /* driver. This object isn't defined for unscalable */
- /* formats. */
- /* */
- typedef struct FT_DriverRec_
- {
- FT_ModuleRec root;
- FT_Driver_Class clazz;
-
- FT_ListRec faces_list;
- void* extensions;
-
- 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
-
-
- /* Set this debug hook to a non-null pointer to force unpatented hinting */
- /* for all faces when both TT_USE_BYTECODE_INTERPRETER and */
- /* TT_CONFIG_OPTION_UNPATENTED_HINTING are defined. This is only used */
- /* during debugging. */
-#define FT_DEBUG_HOOK_UNPATENTED_HINTING 1
-
-
- typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
- FT_Render_Mode render_mode,
- FT_Library library );
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* generic :: Client data variable. Used to extend the */
- /* Library class by higher levels and clients. */
- /* */
- /* 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 :: XXX */
- /* */
- /* raster_pool :: The raster object's render pool. This can */
- /* ideally be changed dynamically at run-time. */
- /* */
- /* raster_pool_size :: The size of the render pool in bytes. */
- /* */
- /* debug_hooks :: XXX */
- /* */
- typedef struct FT_LibraryRec_
- {
- FT_Memory memory; /* library's memory manager */
-
- FT_Generic generic;
-
- 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_Byte* raster_pool; /* scan-line conversion */
- /* render pool */
- FT_ULong raster_pool_size; /* size of render pool in bytes */
-
- FT_DebugHook_Func debug_hooks[4];
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- FT_LcdFilter lcd_filter;
- FT_Int lcd_extra; /* number of extra pixels */
- FT_Byte lcd_weights[7]; /* filter weights, if any */
- FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */
-#endif
-
- } 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
-
-
-FT_END_HEADER
-
-#endif /* __FTOBJS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftrfork.h b/Build/source/libs/freetype2/include/freetype/internal/ftrfork.h
deleted file mode 100644
index aa573c87054..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftrfork.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrfork.h */
-/* */
-/* Embedded resource forks accessor (specification). */
-/* */
-/* Copyright 2004, 2006, 2007 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_UShort res_id;
- FT_ULong offset;
-
- } FT_RFork_Ref;
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* <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_Long **offsets,
- FT_Long *count );
-
-
-FT_END_HEADER
-
-#endif /* __FTRFORK_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftserv.h b/Build/source/libs/freetype2/include/freetype/internal/ftserv.h
deleted file mode 100644
index 2db3e8790dd..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftserv.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftserv.h */
-/* */
-/* The FreeType services (specification only). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-#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 */
-#pragma warning( disable : 4127 )
-
-#endif /* _MSC_VER */
-
- /*
- * @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 ); \
- *_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 ); \
- 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;
-
-
- /*
- * 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_GLYPH_DICT;
- FT_Pointer service_PFR_METRICS;
- FT_Pointer service_WINFNT;
-
- } FT_ServiceCacheRec, *FT_ServiceCache;
-
-
- /*
- * A magic number used within the services cache.
- */
-#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)-2) /* magic number */
-
-
- /*
- * @macro:
- * FT_FACE_LOOKUP_SERVICE
- *
- * @description:
- * This macro is used to lookup 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_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_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_XFREE86_NAME_H <freetype/internal/services/svxf86nm.h>
-#define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h>
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __FTSERV_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftstream.h b/Build/source/libs/freetype2/include/freetype/internal/ftstream.h
deleted file mode 100644
index a91eb72d968..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftstream.h
+++ /dev/null
@@ -1,539 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstream.h */
-/* */
-/* Stream handling (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_INT8_( p, i ) ( ((const FT_Char*)(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_I16( p, i, s ) ( FT_INT16( FT_BYTE_( p, i ) ) << (s) )
-#define FT_BYTE_U16( p, i, s ) ( FT_UINT16( FT_BYTE_( p, i ) ) << (s) )
-#define FT_BYTE_I32( p, i, s ) ( FT_INT32( FT_BYTE_( p, i ) ) << (s) )
-#define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
-
-#define FT_INT8_I16( p, i, s ) ( FT_INT16( FT_INT8_( p, i ) ) << (s) )
-#define FT_INT8_U16( p, i, s ) ( FT_UINT16( FT_INT8_( p, i ) ) << (s) )
-#define FT_INT8_I32( p, i, s ) ( FT_INT32( FT_INT8_( p, i ) ) << (s) )
-#define FT_INT8_U32( p, i, s ) ( FT_UINT32( FT_INT8_( p, i ) ) << (s) )
-
-
-#define FT_PEEK_SHORT( p ) FT_INT16( FT_INT8_I16( p, 0, 8) | \
- FT_BYTE_I16( 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_INT8_I32( p, 0, 24 ) | \
- FT_BYTE_I32( p, 1, 16 ) | \
- FT_BYTE_I32( p, 2, 8 ) | \
- FT_BYTE_I32( 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_INT8_I32( p, 0, 16 ) | \
- FT_BYTE_I32( p, 1, 8 ) | \
- FT_BYTE_I32( 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_INT8_I16( p, 1, 8 ) | \
- FT_BYTE_I16( 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_INT8_I32( p, 3, 24 ) | \
- FT_BYTE_I32( p, 2, 16 ) | \
- FT_BYTE_I32( p, 1, 8 ) | \
- FT_BYTE_I32( 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_INT8_I32( p, 2, 16 ) | \
- FT_BYTE_I32( p, 1, 8 ) | \
- FT_BYTE_I32( 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_GetShort, FT_Short )
-#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetShort, FT_UShort )
-#define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_Long )
-#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_ULong )
-#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetLong, FT_Long )
-#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
-#define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
-
-#define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_Short )
-#define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_UShort )
-#define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, FT_Long )
-#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, 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_ReadShort, FT_Short, var )
-#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadShort, FT_UShort, var )
-#define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_Long, var )
-#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_ULong, var )
-#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_Long, var )
-#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_ULong, var )
-
-#define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_Short, var )
-#define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_UShort, var )
-#define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, FT_Long, var )
-#define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, 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_Long )
- 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 integer from an entered frame */
- FT_BASE( FT_Short )
- FT_Stream_GetShort( FT_Stream stream );
-
- /* read a 24-bit big-endian integer from an entered frame */
- FT_BASE( FT_Long )
- FT_Stream_GetOffset( FT_Stream stream );
-
- /* read a 32-bit big-endian integer from an entered frame */
- FT_BASE( FT_Long )
- FT_Stream_GetLong( FT_Stream stream );
-
- /* read a 16-bit little-endian integer from an entered frame */
- FT_BASE( FT_Short )
- FT_Stream_GetShortLE( FT_Stream stream );
-
- /* read a 32-bit little-endian integer from an entered frame */
- FT_BASE( FT_Long )
- FT_Stream_GetLongLE( 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 integer from a stream */
- FT_BASE( FT_Short )
- FT_Stream_ReadShort( FT_Stream stream,
- FT_Error* error );
-
- /* read a 24-bit big-endian integer from a stream */
- FT_BASE( FT_Long )
- FT_Stream_ReadOffset( FT_Stream stream,
- FT_Error* error );
-
- /* read a 32-bit big-endian integer from a stream */
- FT_BASE( FT_Long )
- FT_Stream_ReadLong( FT_Stream stream,
- FT_Error* error );
-
- /* read a 16-bit little-endian integer from a stream */
- FT_BASE( FT_Short )
- FT_Stream_ReadShortLE( FT_Stream stream,
- FT_Error* error );
-
- /* read a 32-bit little-endian integer from a stream */
- FT_BASE( FT_Long )
- FT_Stream_ReadLongLE( 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, position ) )
-
-#define FT_STREAM_SKIP( distance ) \
- FT_SET_ERROR( FT_Stream_Skip( stream, distance ) )
-
-#define FT_STREAM_READ( buffer, count ) \
- FT_SET_ERROR( FT_Stream_Read( stream, \
- (FT_Byte*)buffer, \
- count ) )
-
-#define FT_STREAM_READ_AT( position, buffer, count ) \
- FT_SET_ERROR( FT_Stream_ReadAt( stream, \
- position, \
- (FT_Byte*)buffer, \
- 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, 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, 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/Build/source/libs/freetype2/include/freetype/internal/fttrace.h b/Build/source/libs/freetype2/include/freetype/internal/fttrace.h
deleted file mode 100644
index 4d38a4628a7..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/fttrace.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttrace.h */
-/* */
-/* Tracing handling (specification only). */
-/* */
-/* Copyright 2002, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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( 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) */
-
- /* Cache sub-system */
-FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
-
- /* SFNT driver components */
-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) */
-
- /* 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( 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 )
-
- /* 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 )
-
- /* 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 )
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/ftvalid.h b/Build/source/libs/freetype2/include/freetype/internal/ftvalid.h
deleted file mode 100644
index 00cd85e7bb6..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/ftvalid.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftvalid.h */
-/* */
-/* FreeType validation support (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#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;
-
-
- /* validator structure */
- typedef struct FT_ValidatorRec_
- {
- 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_jmp_buf jump_buffer; /* used for exception handling */
-
- } FT_ValidatorRec;
-
-
-#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. */
- /* */
- /* Use preprocessor prescan to pass FT_ERR_PREFIX. */
- /* */
-#define FT_INVALID( _prefix, _error ) FT_INVALID_( _prefix, _error )
-#define FT_INVALID_( _prefix, _error ) \
- ft_validator_error( valid, _prefix ## _error )
-
- /* called when a broken table is detected */
-#define FT_INVALID_TOO_SHORT \
- FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
-
- /* called when an invalid offset is detected */
-#define FT_INVALID_OFFSET \
- FT_INVALID( FT_ERR_PREFIX, Invalid_Offset )
-
- /* called when an invalid format/value is detected */
-#define FT_INVALID_FORMAT \
- FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
-
- /* called when an invalid glyph index is detected */
-#define FT_INVALID_GLYPH_ID \
- FT_INVALID( FT_ERR_PREFIX, Invalid_Glyph_Index )
-
- /* called when an invalid field value is detected */
-#define FT_INVALID_DATA \
- FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
-
-
-FT_END_HEADER
-
-#endif /* __FTVALID_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/internal.h b/Build/source/libs/freetype2/include/freetype/internal/internal.h
deleted file mode 100644
index 27d5dc585d3..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/internal.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/***************************************************************************/
-/* */
-/* internal.h */
-/* */
-/* Internal header files (specification only). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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_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_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_POSTSCRIPT_GLOBALS_H <freetype/internal/psglobal.h>
-
-#define FT_INTERNAL_AUTOHINT_H <freetype/internal/autohint.h>
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/pcftypes.h b/Build/source/libs/freetype2/include/freetype/internal/pcftypes.h
deleted file mode 100644
index 382796ffb48..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/pcftypes.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* pcftypes.h
-
- FreeType font driver for pcf fonts
-
- Copyright (C) 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 __PCFTYPES_H__
-#define __PCFTYPES_H__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- typedef struct PCF_Public_FaceRec_
- {
- FT_FaceRec root;
- FT_StreamRec gzip_stream;
- FT_Stream gzip_source;
-
- char* charset_encoding;
- char* charset_registry;
-
- } PCF_Public_FaceRec, *PCF_Public_Face;
-
-
-FT_END_HEADER
-
-#endif /* __PCFTYPES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/psaux.h b/Build/source/libs/freetype2/include/freetype/internal/psaux.h
deleted file mode 100644
index 67b7a420cb2..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/psaux.h
+++ /dev/null
@@ -1,871 +0,0 @@
-/***************************************************************************/
-/* */
-/* psaux.h */
-/* */
-/* Auxiliary functions and data structures related to PostScript fonts */
-/* (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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_PtrDist 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. */
- /* */
- /* 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_Long init;
-
- FT_Int max_elems;
- FT_Int num_elems;
- FT_Byte** elements; /* addresses of table elements */
- FT_PtrDist* 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_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_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; /* maximal number of elements for */
- /* array */
- FT_UInt count_offset; /* offset of element count for */
- /* arrays */
- 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_Long max_bytes,
- FT_Long* 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 :: Maximal number of contours in builder outline. */
- /* */
- /* last :: The last point position. */
- /* */
- /* 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_Vector last;
-
- 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 shift;
-
- 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_UInt num_subrs;
- FT_Byte** subrs;
- FT_PtrDist* subrs_len; /* array of subrs length (optional) */
-
- 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_Int* buildchar;
- FT_UInt len_buildchar;
-
- } 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_UInt 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;
-
- /* backwards-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/Build/source/libs/freetype2/include/freetype/internal/pshints.h b/Build/source/libs/freetype2/include/freetype/internal/pshints.h
deleted file mode 100644
index 48452c0cf3e..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/pshints.h
+++ /dev/null
@@ -1,687 +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, 2002, 2003, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 FT_Error
- (*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 integers, 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_Long* 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 integers, 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_Long* 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.
- *
- * @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_UInt 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;
-
-
-FT_END_HEADER
-
-#endif /* __PSHINTS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svbdf.h b/Build/source/libs/freetype2/include/freetype/internal/services/svbdf.h
deleted file mode 100644
index 0f7fc6115d6..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svbdf.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/***************************************************************************/
-/* */
-/* svbdf.h */
-/* */
-/* The FreeType BDF services (specification). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#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;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVBDF_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svcid.h b/Build/source/libs/freetype2/include/freetype/internal/services/svcid.h
deleted file mode 100644
index 47fef62ed2d..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svcid.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************************/
-/* */
-/* svcid.h */
-/* */
-/* The FreeType CID font services (specification). */
-/* */
-/* Copyright 2007 by Derek Clegg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 );
-
- FT_DEFINE_SERVICE( CID )
- {
- FT_CID_GetRegistryOrderingSupplementFunc get_ros;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVCID_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svgldict.h b/Build/source/libs/freetype2/include/freetype/internal/services/svgldict.h
deleted file mode 100644
index e5e56b253c1..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svgldict.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/***************************************************************************/
-/* */
-/* svgldict.h */
-/* */
-/* The FreeType glyph dictionary services (specification). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#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 */
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVGLDICT_H__ */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svgxval.h b/Build/source/libs/freetype2/include/freetype/internal/services/svgxval.h
deleted file mode 100644
index 2cdab506551..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svgxval.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/***************************************************************************/
-/* */
-/* svgxval.h */
-/* */
-/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
-/* */
-/* Copyright 2004, 2005 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/Build/source/libs/freetype2/include/freetype/internal/services/svkern.h b/Build/source/libs/freetype2/include/freetype/internal/services/svkern.h
deleted file mode 100644
index 1488adf493b..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svkern.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* svkern.h */
-/* */
-/* The FreeType Kerning service (specification). */
-/* */
-/* Copyright 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/include/freetype/internal/services/svmm.h b/Build/source/libs/freetype2/include/freetype/internal/services/svmm.h
deleted file mode 100644
index 8a99ec4b1a7..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svmm.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/***************************************************************************/
-/* */
-/* svmm.h */
-/* */
-/* The FreeType Multiple Masters and GX var services (specification). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#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 );
-
-
- 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_Var_Func get_mm_var;
- FT_Set_Var_Design_Func set_var_design;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __SVMM_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svotval.h b/Build/source/libs/freetype2/include/freetype/internal/services/svotval.h
deleted file mode 100644
index 970bbd57593..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svotval.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* svotval.h */
-/* */
-/* The FreeType OpenType validation service (specification). */
-/* */
-/* Copyright 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/include/freetype/internal/services/svpfr.h b/Build/source/libs/freetype2/include/freetype/internal/services/svpfr.h
deleted file mode 100644
index 462786f9ce9..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svpfr.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpfr.h */
-/* */
-/* Internal PFR service functions (specification). */
-/* */
-/* Copyright 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/include/freetype/internal/services/svpostnm.h b/Build/source/libs/freetype2/include/freetype/internal/services/svpostnm.h
deleted file mode 100644
index 282da68d13e..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svpostnm.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpostnm.h */
-/* */
-/* The FreeType PostScript name services (specification). */
-/* */
-/* Copyright 2003, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVPOSTNM_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svpscmap.h b/Build/source/libs/freetype2/include/freetype/internal/services/svpscmap.h
deleted file mode 100644
index c4e25ed635f..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svpscmap.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpscmap.h */
-/* */
-/* The FreeType PostScript charmap service (specification). */
-/* */
-/* Copyright 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_ULong
- (*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;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVPSCMAP_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svpsinfo.h b/Build/source/libs/freetype2/include/freetype/internal/services/svpsinfo.h
deleted file mode 100644
index 63f5db9c19a..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svpsinfo.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/***************************************************************************/
-/* */
-/* svpsinfo.h */
-/* */
-/* The FreeType PostScript info service (specification). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#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_Int
- (*PS_HasGlyphNamesFunc)( FT_Face face );
-
- typedef FT_Error
- (*PS_GetFontPrivateFunc)( FT_Face face,
- PS_PrivateRec* afont_private );
-
-
- FT_DEFINE_SERVICE( PsInfo )
- {
- PS_GetFontInfoFunc ps_get_font_info;
- PS_HasGlyphNamesFunc ps_has_glyph_names;
- PS_GetFontPrivateFunc ps_get_font_private;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVPSINFO_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svsfnt.h b/Build/source/libs/freetype2/include/freetype/internal/services/svsfnt.h
deleted file mode 100644
index b4a85d97ec7..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svsfnt.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/***************************************************************************/
-/* */
-/* svsfnt.h */
-/* */
-/* The FreeType SFNT table loading service (specification). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#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 *length );
-
-
- FT_DEFINE_SERVICE( SFNT_Table )
- {
- FT_SFNT_TableLoadFunc load_table;
- FT_SFNT_TableGetFunc get_table;
- FT_SFNT_TableInfoFunc table_info;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVSFNT_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svttcmap.h b/Build/source/libs/freetype2/include/freetype/internal/services/svttcmap.h
deleted file mode 100644
index 1e02d15506d..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svttcmap.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/***************************************************************************/
-/* */
-/* svsttcmap.h */
-/* */
-/* The FreeType TrueType/sfnt cmap extra information service. */
-/* */
-/* Copyright 2003 by */
-/* Masatake YAMATO, Redhat K.K. */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-/* 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 */
- /* freetype/ttnameid.h. */
- /* */
- 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;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __SVTTCMAP_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svtteng.h b/Build/source/libs/freetype2/include/freetype/internal/services/svtteng.h
deleted file mode 100644
index 58e02a6f9dd..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svtteng.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************/
-/* */
-/* svtteng.h */
-/* */
-/* The FreeType TrueType engine query service (specification). */
-/* */
-/* Copyright 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/include/freetype/internal/services/svttglyf.h b/Build/source/libs/freetype2/include/freetype/internal/services/svttglyf.h
deleted file mode 100644
index e57d484b7e2..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svttglyf.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/***************************************************************************/
-/* */
-/* svttglyf.h */
-/* */
-/* The FreeType TrueType glyph service. */
-/* */
-/* Copyright 2007 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;
- };
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __SVTTGLYF_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/services/svwinfnt.h b/Build/source/libs/freetype2/include/freetype/internal/services/svwinfnt.h
deleted file mode 100644
index 57f7765d92f..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svwinfnt.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/***************************************************************************/
-/* */
-/* svwinfnt.h */
-/* */
-/* The FreeType Windows FNT/FONT service (specification). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/include/freetype/internal/services/svxf86nm.h b/Build/source/libs/freetype2/include/freetype/internal/services/svxf86nm.h
deleted file mode 100644
index ca5d884a83c..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/services/svxf86nm.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* svxf86nm.h */
-/* */
-/* The FreeType XFree86 services (specification only). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __SVXF86NM_H__
-#define __SVXF86NM_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_XF86_NAME "xf86-driver-name"
-
-#define FT_XF86_FORMAT_TRUETYPE "TrueType"
-#define FT_XF86_FORMAT_TYPE_1 "Type 1"
-#define FT_XF86_FORMAT_BDF "BDF"
-#define FT_XF86_FORMAT_PCF "PCF"
-#define FT_XF86_FORMAT_TYPE_42 "Type 42"
-#define FT_XF86_FORMAT_CID "CID Type 1"
-#define FT_XF86_FORMAT_CFF "CFF"
-#define FT_XF86_FORMAT_PFR "PFR"
-#define FT_XF86_FORMAT_WINFNT "Windows FNT"
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __SVXF86NM_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/sfnt.h b/Build/source/libs/freetype2/include/freetype/internal/sfnt.h
deleted file mode 100644
index 7e8f6847c98..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/sfnt.h
+++ /dev/null
@@ -1,762 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfnt.h */
-/* */
-/* High-level `sfnt' driver interface (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /* 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. */
- /* */
- /* 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 );
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_SFNT_HeaderRec_Func */
- /* */
- /* <Description> */
- /* Loads the header of a SFNT font file. Supports collections. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* face_index :: The index of the TrueType font, if we are opening a */
- /* collection. */
- /* */
- /* <Output> */
- /* sfnt :: The SFNT header. */
- /* */
- /* <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'. */
- /* */
- /* This function checks that the header is valid by looking at the */
- /* values of `search_range', `entry_selector', and `range_shift'. */
- /* */
- typedef FT_Error
- (*TT_Load_SFNT_HeaderRec_Func)( TT_Face face,
- FT_Stream stream,
- FT_Long face_index,
- SFNT_Header sfnt );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Load_Directory_Func */
- /* */
- /* <Description> */
- /* Loads the table directory into a face object. */
- /* */
- /* <Input> */
- /* face :: A handle to the target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* sfnt :: The SFNT header. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The stream cursor must be on the first byte after the 4-byte font */
- /* format tag. This is the case just after a call to */
- /* TT_Load_Format_Tag(). */
- /* */
- typedef FT_Error
- (*TT_Load_Directory_Func)( TT_Face face,
- FT_Stream stream,
- SFNT_Header sfnt );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*************************************************************************/
- /* */
- /* <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 );
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_Set_SBit_Strike_OldFunc */
- /* */
- /* <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_OldFunc)( TT_Face face,
- FT_UInt x_ppem,
- FT_UInt y_ppem,
- FT_ULong* astrike_index );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_CharMap_Load_Func */
- /* */
- /* <Description> */
- /* Loads a given TrueType character map into memory. */
- /* */
- /* <Input> */
- /* face :: A handle to the parent face object. */
- /* */
- /* stream :: A handle to the current stream object. */
- /* */
- /* <InOut> */
- /* cmap :: A pointer to a cmap object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* The function assumes that the stream is already in use (i.e., */
- /* opened). In case of error, all partially allocated tables are */
- /* released. */
- /* */
- typedef FT_Error
- (*TT_CharMap_Load_Func)( TT_Face face,
- void* cmap,
- FT_Stream input );
-
-
- /*************************************************************************/
- /* */
- /* <FuncType> */
- /* TT_CharMap_Free_Func */
- /* */
- /* <Description> */
- /* Destroys a character mapping table. */
- /* */
- /* <Input> */
- /* face :: A handle to the parent face object. */
- /* */
- /* cmap :: A handle to a cmap object. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- typedef FT_Error
- (*TT_CharMap_Free_Func)( TT_Face face,
- void* cmap );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* vertical :: A boolean flag. If set, load vertical metrics. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- typedef FT_Error
- (*TT_Get_Metrics_Func)( TT_Face face,
- FT_Bool vertical,
- FT_UInt gindex,
- FT_Short* abearing,
- FT_UShort* aadvance );
-
-
- /*************************************************************************/
- /* */
- /* <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;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- TT_Load_SFNT_HeaderRec_Func load_sfnt_header;
- TT_Load_Directory_Func load_directory;
-#endif
-
- /* 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;
-
- /* optional tables */
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- TT_Load_Table_Func load_hdmx_stub;
- TT_Free_Table_Func free_hdmx_stub;
-#endif
-
- /* 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;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /* see `ttsbit.h' */
- TT_Set_SBit_Strike_OldFunc set_sbit_strike_stub;
- TT_Load_Table_Func load_sbits_stub;
-
- /*
- * The following two fields appeared in version 2.1.8, and were placed
- * between `load_sbits' and `load_sbit_image'. We support them as a
- * special exception since they are used by Xfont library within the
- * X.Org xserver, and because the probability that other rogue clients
- * use the other version 2.1.7 fields below is _extremely_ low.
- *
- * Note that this forces us to disable an interesting memory-saving
- * optimization though...
- */
-
- TT_Find_SBit_Image_Func find_sbit_image;
- TT_Load_SBit_Metrics_Func load_sbit_metrics;
-
-#endif
-
- TT_Load_SBit_Image_Func load_sbit_image;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- TT_Free_Table_Func free_sbits_stub;
-#endif
-
- /* see `ttpost.h' */
- TT_Get_PS_Name_Func get_psname;
- TT_Free_Table_Func free_psnames;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- TT_CharMap_Load_Func load_charmap_stub;
- TT_CharMap_Free_Func free_charmap_stub;
-#endif
-
- /* 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;
-
- } SFNT_Interface;
-
-
- /* transitional */
- typedef SFNT_Interface* SFNT_Service;
-
-
-FT_END_HEADER
-
-#endif /* __SFNT_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/internal/t1types.h b/Build/source/libs/freetype2/include/freetype/internal/t1types.h
deleted file mode 100644
index 047c6d59df0..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/t1types.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1types.h */
-/* */
-/* Basic Type1/Type2 type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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. */
- /* */
- /* 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;
-
-
- 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;
-
-
- typedef struct T1_FontRec_
- {
- PS_FontInfoRec font_info; /* font info dictionary */
- 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_PtrDist* subrs_len;
-
- FT_Int num_glyphs;
- FT_String** glyph_names; /* array of glyph names */
- FT_Byte** charstrings; /* array of glyph charstrings */
- FT_PtrDist* 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_UInt 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_Int index1;
- FT_Int 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_Int NumTrackKern;
- AFM_KernPair KernPairs; /* free if non-NULL */
- FT_Int 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];
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- PS_Unicodes unicode_map;
-#endif
-
- /* 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_Int* 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;
- void* afm_data;
- 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/Build/source/libs/freetype2/include/freetype/internal/tttypes.h b/Build/source/libs/freetype2/include/freetype/internal/tttypes.h
deleted file mode 100644
index 85fc27f74ee..00000000000
--- a/Build/source/libs/freetype2/include/freetype/internal/tttypes.h
+++ /dev/null
@@ -1,1543 +0,0 @@
-/***************************************************************************/
-/* */
-/* tttypes.h */
-/* */
-/* Basic SFNT/TrueType type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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> */
- /* 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_NameEntryRec */
- /* */
- /* <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_NameEntryRec_
- {
- 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_NameEntryRec, *TT_NameEntry;
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* stream :: the file's input stream. */
- /* */
- typedef struct TT_NameTableRec_
- {
- FT_UShort format;
- FT_UInt numNameRecords;
- FT_UInt storageOffset;
- TT_NameEntryRec* names;
- 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;
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_HdmxEntryRec */
- /* */
- /* <Description> */
- /* A small structure used to model the pre-computed widths of a given */
- /* size. They are found in the `hdmx' table. */
- /* */
- /* <Fields> */
- /* ppem :: The pixels per EM value at which these metrics apply. */
- /* */
- /* max_width :: The maximum advance width for this metric. */
- /* */
- /* widths :: An array of widths. Note: These are 8-bit bytes. */
- /* */
- typedef struct TT_HdmxEntryRec_
- {
- FT_Byte ppem;
- FT_Byte max_width;
- FT_Byte* widths;
-
- } TT_HdmxEntryRec, *TT_HdmxEntry;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_HdmxRec */
- /* */
- /* <Description> */
- /* A structure used to model the `hdmx' table, which contains */
- /* pre-computed widths for a set of given sizes/dimensions. */
- /* */
- /* <Fields> */
- /* version :: The version number. */
- /* */
- /* num_records :: The number of hdmx records. */
- /* */
- /* records :: An array of hdmx records. */
- /* */
- typedef struct TT_HdmxRec_
- {
- FT_UShort version;
- FT_Short num_records;
- TT_HdmxEntry records;
-
- } TT_HdmxRec, *TT_Hdmx;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Kern0_PairRec */
- /* */
- /* <Description> */
- /* A structure used to model a kerning pair for the kerning table */
- /* format 0. The engine now loads this table if it finds one in the */
- /* font file. */
- /* */
- /* <Fields> */
- /* left :: The index of the left glyph in pair. */
- /* */
- /* right :: The index of the right glyph in pair. */
- /* */
- /* value :: The kerning distance. A positive value spaces the */
- /* glyphs, a negative one makes them closer. */
- /* */
- typedef struct TT_Kern0_PairRec_
- {
- FT_UShort left; /* index of left glyph in pair */
- FT_UShort right; /* index of right glyph in pair */
- FT_FWord value; /* kerning value */
-
- } TT_Kern0_PairRec, *TT_Kern0_Pair;
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** ***/
- /*** 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_Byte height;
- FT_Byte width;
-
- FT_Char horiBearingX;
- FT_Char horiBearingY;
- FT_Byte horiAdvance;
-
- FT_Char vertBearingX;
- FT_Char vertBearingY;
- FT_Byte 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 */
- /* */
- /* http://fonts.apple.com/ */
- /* TTRefMan/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 */
- /* */
- /* http://fonts.apple.com/ */
- /* TTRefMan/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_UInt32 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 );
-
-
- /*************************************************************************/
- /* */
- /* 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 `verticalInfo' 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. */
- /* */
- /* 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_strikes :: The number of sbit strikes, i.e., bitmap */
- /* sizes, embedded in this font. */
- /* */
- /* sbit_strikes :: An array of sbit strikes embedded in this */
- /* font. This table is optional in a */
- /* TrueType/OpenType font. */
- /* */
- /* 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. */
- /* */
- /* 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. */
- /* */
- /* glyf_len :: The length of the `glyf' table. Needed */
- /* for malformed `loca' tables. */
- /* */
- /* 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. */
- /* */
- /* num_kern_pairs :: The number of kerning pairs present in the */
- /* font file. The engine only loads the */
- /* first horizontal format 0 kern table it */
- /* finds in the font file. Ignored for */
- /* Type 2 fonts. */
- /* */
- /* kern_table_index :: The index of the kerning table in the font */
- /* kerning directory. Ignored for Type 2 */
- /* fonts. */
- /* */
- /* interpreter :: A pointer to the TrueType bytecode */
- /* interpreters field is also used to hook */
- /* the debugger in `ttdebug'. */
- /* */
- /* unpatented_hinting :: If true, use only unpatented methods in */
- /* the bytecode interpreter. */
- /* */
- /* 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). */
- /* */
- /* extra :: Reserved for third-party font drivers. */
- /* */
- /* postscript_name :: The PS name of the font. Used by the */
- /* postscript name service. */
- /* */
- 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;
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- FT_ULong max_components; /* stubbed to 0 */
-#endif
-
- 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;
-
-
- /***********************************************************************/
- /* */
- /* Optional TrueType/OpenType tables */
- /* */
- /***********************************************************************/
-
- /* horizontal device metrics */
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- TT_HdmxRec hdmx;
-#endif
-
- /* grid-fitting and scaling table */
- TT_GaspRec gasp; /* the `gasp' table */
-
- /* PCL 5 table */
- TT_PCLT pclt;
-
- /* embedded bitmaps support */
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- FT_ULong num_sbit_strikes;
- TT_SBit_Strike sbit_strikes;
-#endif
-
- FT_ULong num_sbit_scales;
- TT_SBit_Scale sbit_scales;
-
- /* postscript names table */
- TT_Post_NamesRec postscript_names;
-
-
- /***********************************************************************/
- /* */
- /* TrueType-specific fields (ignored by the OTF-Type2 driver) */
- /* */
- /***********************************************************************/
-
- /* the glyph locations */
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- FT_UShort num_locations_stub;
- FT_Long* glyph_locations_stub;
-#endif
-
- /* 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;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- /* the format 0 kerning table, if any */
- FT_Int num_kern_pairs;
- FT_Int kern_table_index;
- TT_Kern0_Pair kern_pairs;
-#endif
-
- /* A pointer to the bytecode interpreter to use. This is also */
- /* used to hook the debugger for the `ttdebug' utility. */
- TT_Interpreter interpreter;
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- /* Use unpatented hinting only. */
- FT_Bool unpatented_hinting;
-#endif
-
- /***********************************************************************/
- /* */
- /* Other tables or fields. This is used by derivative formats like */
- /* OpenType. */
- /* */
- /***********************************************************************/
-
- FT_Generic extra;
-
- const char* postscript_name;
-
- /* since version 2.1.8, but was originally placed after */
- /* `glyph_locations_stub' */
- FT_ULong glyf_len;
-
- /* since version 2.1.8, but was originally placed before `extra' */
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Bool doblend;
- GX_Blend blend;
-#endif
-
- /* since version 2.2 */
-
- FT_Byte* horz_metrics;
- FT_ULong horz_metrics_size;
-
- FT_Byte* vert_metrics;
- FT_ULong vert_metrics_size;
-
- FT_UInt num_locations;
- 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;
- FT_UInt sbit_num_strikes;
-
- 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;
-
- } 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 maximal 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_UShort 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;
-
- /* glyph loader structure */
- typedef struct TT_LoaderRec_
- {
- FT_Face face;
- FT_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_Bool preserve_pps;
- FT_Vector pp1;
- FT_Vector pp2;
-
- FT_ULong glyf_offset;
-
- /* 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;
-
- } TT_LoaderRec;
-
-
-FT_END_HEADER
-
-#endif /* __TTTYPES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/t1tables.h b/Build/source/libs/freetype2/include/freetype/t1tables.h
deleted file mode 100644
index 204d7a71b3f..00000000000
--- a/Build/source/libs/freetype2/include/freetype/t1tables.h
+++ /dev/null
@@ -1,504 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1tables.h */
-/* */
-/* Basic Type 1/Type 2 tables definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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. */
- /* */
- /*************************************************************************/
-
-
- /* 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. */
- /* */
- 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,
-
- /*# never remove */
- T1_BLEND_MAX
-
- } T1_Blend_Flags;
-
- /* */
-
-
- /*# backwards compatible definitions */
-#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;
-
- /* backwards-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;
-
-
- /* backwards-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;
-
- /* */
-
-
- /* backwards-compatible definition */
- 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:
- * The string pointers within the font info 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 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 font info 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 will
- * return the `FT_Err_Invalid_Argument' error code.
- *
- */
- FT_EXPORT( FT_Error )
- FT_Get_PS_Font_Private( FT_Face face,
- PS_Private afont_private );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __T1TABLES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ttnameid.h b/Build/source/libs/freetype2/include/freetype/ttnameid.h
deleted file mode 100644
index b8010ccd6c4..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ttnameid.h
+++ /dev/null
@@ -1,1146 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttnameid.h */
-/* */
-/* TrueType name ID definitions (specification only). */
-/* */
-/* Copyright 1996-2002, 2003, 2004, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 the TTF `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 Unicode 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.
- */
-
-#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 */
-
-
- /***********************************************************************
- *
- * @enum:
- * TT_MAC_ID_XXX
- *
- * @description:
- * A list of valid values for the `encoding_id' for
- * @TT_PLATFORM_MACINTOSH charmaps and name entries.
- *
- * @values:
- * TT_MAC_ID_ROMAN ::
- * TT_MAC_ID_JAPANESE ::
- * TT_MAC_ID_TRADITIONAL_CHINESE ::
- * TT_MAC_ID_KOREAN ::
- * TT_MAC_ID_ARABIC ::
- * TT_MAC_ID_HEBREW ::
- * TT_MAC_ID_GREEK ::
- * TT_MAC_ID_RUSSIAN ::
- * TT_MAC_ID_RSYMBOL ::
- * TT_MAC_ID_DEVANAGARI ::
- * TT_MAC_ID_GURMUKHI ::
- * TT_MAC_ID_GUJARATI ::
- * TT_MAC_ID_ORIYA ::
- * TT_MAC_ID_BENGALI ::
- * TT_MAC_ID_TAMIL ::
- * TT_MAC_ID_TELUGU ::
- * TT_MAC_ID_KANNADA ::
- * TT_MAC_ID_MALAYALAM ::
- * TT_MAC_ID_SINHALESE ::
- * TT_MAC_ID_BURMESE ::
- * TT_MAC_ID_KHMER ::
- * TT_MAC_ID_THAI ::
- * TT_MAC_ID_LAOTIAN ::
- * TT_MAC_ID_GEORGIAN ::
- * TT_MAC_ID_ARMENIAN ::
- * TT_MAC_ID_MALDIVIAN ::
- * TT_MAC_ID_SIMPLIFIED_CHINESE ::
- * TT_MAC_ID_TIBETAN ::
- * TT_MAC_ID_MONGOLIAN ::
- * TT_MAC_ID_GEEZ ::
- * TT_MAC_ID_SLAVIC ::
- * TT_MAC_ID_VIETNAMESE ::
- * TT_MAC_ID_SINDHI ::
- * TT_MAC_ID_UNINTERP ::
- */
-
-#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 ::
- * Corresponds to Microsoft symbol encoding. See
- * @FT_ENCODING_MS_SYMBOL.
- *
- * TT_MS_ID_UNICODE_CS ::
- * Corresponds to a Microsoft WGL4 charmap, matching Unicode. See
- * @FT_ENCODING_UNICODE.
- *
- * TT_MS_ID_SJIS ::
- * Corresponds to SJIS Japanese encoding. See @FT_ENCODING_SJIS.
- *
- * TT_MS_ID_GB2312 ::
- * Corresponds to Simplified Chinese as used in Mainland China. See
- * @FT_ENCODING_GB2312.
- *
- * TT_MS_ID_BIG_5 ::
- * Corresponds to Traditional Chinese as used in Taiwan and Hong Kong.
- * See @FT_ENCODING_BIG5.
- *
- * TT_MS_ID_WANSUNG ::
- * Corresponds to Korean Wansung encoding. See @FT_ENCODING_WANSUNG.
- *
- * TT_MS_ID_JOHAB ::
- * Corresponds to Johab encoding. See @FT_ENCODING_JOHAB.
- *
- * TT_MS_ID_UCS_4 ::
- * Corresponds to 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_GB2312 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
-
-
- /***********************************************************************
- *
- * @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
-
-
- /*************************************************************************/
- /* */
- /* Possible values of the language identifier field in the name records */
- /* of the TTF `name' table if the `platform' identifier code is */
- /* TT_PLATFORM_MACINTOSH. */
- /* */
- /* The canonical source for the Apple assigned Language ID's is at */
- /* */
- /* http://fonts.apple.com/TTRefMan/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
-
-
-#if 0 /* these seem to be errors that have been dropped */
-
-#define TT_MAC_LANGID_SCOTTISH_GAELIC 140
-#define TT_MAC_LANGID_IRISH_GAELIC 141
-
-#endif
-
-
- /* 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
-
-
- /*************************************************************************/
- /* */
- /* Possible values of the language identifier field in the name records */
- /* of the TTF `name' table if the `platform' identifier code is */
- /* TT_PLATFORM_MICROSOFT. */
- /* */
- /* The canonical source for the MS assigned LCID's (seems to) be at */
- /* */
- /* http://www.microsoft.com/globaldev/reference/lcid-all.mspx */
- /* */
- /* It used to be at various places, among them */
- /* */
- /* http://www.microsoft.com/typography/OTSPEC/lcid-cp.txt */
- /* http://www.microsoft.com/globaldev/reference/loclanghome.asp */
- /* http://support.microsoft.com/support/kb/articles/Q224/8/04.ASP */
- /* http://msdn.microsoft.com/library/en-us/passport25/ */
- /* NET_Passport_VBScript_Documentation/Single_Sign_In/ */
- /* Advanced_Single_Sign_In/Localization_and_LCIDs.asp */
- /* */
- /* Hopefully, it seems now that the Globaldev site prevails... */
- /* (updated by Antoine, 2004-02-17) */
-
-#define TT_MS_LANGID_ARABIC_GENERAL 0x0001
-#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_SPAIN 0x0403
-#define TT_MS_LANGID_CHINESE_GENERAL 0x0004
-#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
-
-#if 1 /* this looks like the correct value */
-#define TT_MS_LANGID_CHINESE_MACAU 0x1404
-#else /* but beware, Microsoft may change its mind...
- the most recent Word reference has the following: */
-#define TT_MS_LANGID_CHINESE_MACAU TT_MS_LANGID_CHINESE_HONG_KONG
-#endif
-
-#if 0 /* used only with .NET `cultures'; commented out */
-#define TT_MS_LANGID_CHINESE_TRADITIONAL 0x7C04
-#endif
-
-#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_LIECHTENSTEI 0x1407
-#define TT_MS_LANGID_GREEK_GREECE 0x0408
-
- /* don't ask what this one means... It is commented out currently. */
-#if 0
-#define TT_MS_LANGID_GREEK_GREECE2 0x2008
-#endif
-
-#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009
-#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_INDONESIA 0x3809
-#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3c09
-#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_INTERNATIONAL_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
- /* The following ID blatantly violate MS specs by using a */
- /* sublanguage > 0x1F. */
-#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40aU
-#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_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
- /* and another violation of the spec (see 0xE40aU) */
-#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40cU
-#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_EXTENDED_WANSUNG_KOREA 0x0412
-#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812
-#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_RHAETO_ROMANIC_SWITZERLAND 0x0417
-#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418
-#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818
-#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419
-#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819
-#define TT_MS_LANGID_CROATIAN_CROATIA 0x041a
-#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081a
-#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0c1a
-
-#if 0 /* this used to be this value, but it looks like we were wrong */
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x101a
-#else /* current sources say */
-#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101a
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141a
- /* and XPsp2 Platform SDK added (2004-07-26) */
- /* Names are shortened to be significant within 40 chars. */
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181a
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x181a
-#endif
-
-#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_URDU_INDIA 0x0820
-#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_SLOVENE_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_CLASSIC_LITHUANIAN_LITHUANIA 0x0827
-#define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428
-#define TT_MS_LANGID_FARSI_IRAN 0x0429
-#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_SPAIN 0x042d
-#define TT_MS_LANGID_SORBIAN_GERMANY 0x042e
-#define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042f
-#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430
-#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431
-#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA 0x0432
-#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433
-#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA 0x0434
-#define TT_MS_LANGID_ZULU_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
- /* Added by XPsp2 Platform SDK (2004-07-26) */
-#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
- /* ... and we also keep our old identifier... */
-#define TT_MS_LANGID_SAAMI_LAPONIA 0x043b
-
-#if 0 /* this seems to be a previous inversion */
-#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043c
-#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083c
-#else
-#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083c
-#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043c
-#endif
-
-#define TT_MS_LANGID_YIDDISH_GERMANY 0x043d
-#define TT_MS_LANGID_MALAY_MALAYSIA 0x043e
-#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083e
-#define TT_MS_LANGID_KAZAK_KAZAKSTAN 0x043f
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN /* Cyrillic*/ 0x0440
- /* alias declared in Windows 2000 */
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \
- TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN
-
-#define TT_MS_LANGID_SWAHILI_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_TATARSTAN 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_PUNJABI_ARABIC_PAKISTAN 0x0846
-#define TT_MS_LANGID_GUJARATI_INDIA 0x0447
-#define TT_MS_LANGID_ORIYA_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_MONGOLIA_MONGOLIAN 0x0850
-#define TT_MS_LANGID_TIBETAN_CHINA 0x0451
- /* Don't use the next constant! It has */
- /* (1) the wrong spelling (Dzonghka) */
- /* (2) Microsoft doesn't officially define it -- */
- /* at least it is not in the List of Local */
- /* ID Values. */
- /* (3) Dzongkha is not the same language as */
- /* Tibetan, so merging it is wrong anyway. */
- /* */
- /* TT_MS_LANGID_TIBETAN_BHUTAN is correct, BTW. */
-#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851
-
-#if 0
- /* the following used to be defined */
-#define TT_MS_LANGID_TIBETAN_BHUTAN 0x0451
- /* ... but it was changed; */
-#else
- /* So we will continue to #define it, but with the correct value */
-#define TT_MS_LANGID_TIBETAN_BHUTAN TT_MS_LANGID_DZONGHKA_BHUTAN
-#endif
-
-#define TT_MS_LANGID_WELSH_WALES 0x0452
-#define TT_MS_LANGID_KHMER_CAMBODIA 0x0453
-#define TT_MS_LANGID_LAO_LAOS 0x0454
-#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455
-#define TT_MS_LANGID_GALICIAN_SPAIN 0x0456
-#define TT_MS_LANGID_KONKANI_INDIA 0x0457
-#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458
-#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459
-#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859
- /* Missing a LCID for Sindhi in Devanagari script */
-#define TT_MS_LANGID_SYRIAC_SYRIA 0x045a
-#define TT_MS_LANGID_SINHALESE_SRI_LANKA 0x045b
-#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045c
-#define TT_MS_LANGID_INUKTITUT_CANADA 0x045d
-#define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045e
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045f
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN 0x085f
- /* Missing a LCID for Tifinagh script */
-#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460
- /* Spelled this way by XPsp2 Platform SDK (2004-07-26) */
- /* script is yet unclear... might be Arabic, Nagari or Sharada */
-#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860
- /* ... and aliased (by MS) for compatibility reasons. */
-#define TT_MS_LANGID_KASHMIRI_INDIA TT_MS_LANGID_KASHMIRI_SASIA
-#define TT_MS_LANGID_NEPALI_NEPAL 0x0461
-#define TT_MS_LANGID_NEPALI_INDIA 0x0861
-#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
- /* alias declared in Windows 2000 */
-#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_HAUSA_NIGERIA 0x0468
-#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469
-#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_SEPEDI_SOUTH_AFRICA 0x046c
- /* Also spelled by XPsp2 Platform SDK (2004-07-26) */
-#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \
- TT_MS_LANGID_SEPEDI_SOUTH_AFRICA
- /* language codes 0x046d, 0x046e and 0x046f are (still) unknown. */
-#define TT_MS_LANGID_IGBO_NIGERIA 0x0470
-#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
- /* also spelled in the `Passport SDK' list as: */
-#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
- /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */
- /* not written (but OTOH the peculiar writing system is worth */
- /* studying). */
-#define TT_MS_LANGID_YI_CHINA 0x0478
-#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479
- /* language codes from 0x047a to 0x047f are (still) unknown. */
-#define TT_MS_LANGID_UIGHUR_CHINA 0x0480
-#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481
-
-#if 0 /* not deemed useful for fonts */
-#define TT_MS_LANGID_HUMAN_INTERFACE_DEVICE 0x04ff
-#endif
-
-
- /*************************************************************************/
- /* */
- /* Possible values of the `name' identifier field in the name records of */
- /* the TTF `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_PREFERRED_FAMILY 16
-#define TT_NAME_ID_PREFERRED_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
-
-
- /*************************************************************************/
- /* */
- /* Bit mask values for the Unicode Ranges from the TTF `OS2 ' table. */
- /* */
- /* Updated 02-Jul-2000. */
- /* */
-
- /* General Scripts Area */
-
- /* 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 */
-#define TT_UCR_IPA_EXTENSIONS (1L << 4) /* U+0250-U+02AF */
- /* Bit 5 Spacing Modifier Letters */
-#define TT_UCR_SPACING_MODIFIER (1L << 5) /* U+02B0-U+02FF */
- /* Bit 6 Combining Diacritical Marks */
-#define TT_UCR_COMBINING_DIACRITICS (1L << 6) /* U+0300-U+036F */
- /* Bit 7 Greek and Coptic */
-#define TT_UCR_GREEK (1L << 7) /* U+0370-U+03FF */
- /* Bit 8 is reserved (was: Greek Symbols and Coptic) */
- /* Bit 9 Cyrillic + */
- /* Cyrillic Supplementary */
-#define TT_UCR_CYRILLIC (1L << 9) /* U+0400-U+04FF */
- /* U+0500-U+052F */
- /* 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 is reserved (was: Hebrew Extended) */
- /* Bit 13 Arabic */
-#define TT_UCR_ARABIC (1L << 13) /* U+0600-U+06FF */
- /* Bit 14 is reserved (was: Arabic Extended) */
- /* 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 */
-#define TT_UCR_GEORGIAN (1L << 26) /* U+10A0-U+10FF */
- /* Bit 27 is reserved (was Georgian Extended) */
- /* Bit 28 Hangul Jamo */
-#define TT_UCR_HANGUL_JAMO (1L << 28) /* U+1100-U+11FF */
- /* Bit 29 Latin Extended Additional */
-#define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L << 29) /* U+1E00-U+1EFF */
- /* Bit 30 Greek Extended */
-#define TT_UCR_GREEK_EXTENDED (1L << 30) /* U+1F00-U+1FFF */
-
- /* Symbols Area */
-
- /* Bit 31 General Punctuation */
-#define TT_UCR_GENERAL_PUNCTUATION (1L << 31) /* U+2000-U+206F */
- /* 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_DIACRITICS_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 */
-#define TT_UCR_ARROWS (1L << 5) /* U+2190-U+21FF */
- /* U+27F0-U+27FF */
- /* U+2900-U+297F */
- /* 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 */
-
- /* CJK Phonetics and Symbols Area */
-
- /* 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 Kanbun */
-#define TT_UCR_CJK_MISC (1L << 21) /* U+3190-U+319F */
-#define TT_UCR_KANBUN TT_UCR_CJK_MISC
- /* 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 */
-
- /* Hangul Syllables Area */
-
- /* Bit 56 Hangul */
-#define TT_UCR_HANGUL (1L << 24) /* U+AC00-U+D7A3 */
-
- /* Surrogates Area */
-
- /* Bit 57 High Surrogates + */
- /* High Private Use Surrogates + */
- /* Low Surrogates */
-#define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DB7F */
- /* U+DB80-U+DBFF */
- /* U+DC00-U+DFFF */
- /* 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 */
-
- /* Bit 58 is reserved for Unicode SubRanges */
-
- /* CJK Ideographs Area */
-
- /* Bit 59 CJK Unified Ideographs + */
- /* CJK Radicals Supplement + */
- /* Kangxi Radicals + */
- /* Ideographic Description Characters + */
- /* CJK Unified Ideographs Extension A */
- /* 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 */
-
- /* Private Use Area */
-
- /* Bit 60 Private Use */
-#define TT_UCR_PRIVATE_USE (1L << 28) /* U+E000-U+F8FF */
-
- /* Compatibility Area and Specials */
-
- /* Bit 61 CJK Compatibility Ideographs + */
- /* CJK Compatibility Ideographs Supplement */
-#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L << 29) /* 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_PRESENTATIONS_A (1L << 31) /* U+FB50-U+FDFF */
- /* Bit 64 Combining Half Marks */
-#define TT_UCR_COMBINING_HALF_MARKS (1L << 0) /* U+FE20-U+FE2F */
- /* Bit 65 CJK Compatibility Forms */
-#define TT_UCR_CJK_COMPATIBILITY_FORMS (1L << 1) /* 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_PRESENTATIONS_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 */
-#define TT_UCR_ETHIOPIC (1L << 11) /* U+1200-U+137F */
- /* 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 */
-#define TT_UCR_KHMER (1L << 16) /* U+1780-U+17FF */
- /* 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 */
-#define TT_UCR_MUSICAL_SYMBOLS (1L << 24) /*U+1D000-U+1D0FF*/
- /*U+1D100-U+1D1FF*/
- /* 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 */
-#define TT_UCR_VARIATION_SELECTORS (1L << 27) /* U+FE00-U+FE0F */
- /* Bit 92 Tags */
-#define TT_UCR_TAGS (1L << 28) /*U+E0000-U+E007F*/
-
-
- /*************************************************************************/
- /* */
- /* Some compilers have a very limited length of identifiers. */
- /* */
-#if defined( __TURBOC__ ) && __TURBOC__ < 0x0410 || defined( __PACIFIC__ )
-#define HAVE_LIMIT_ON_IDENTS
-#endif
-
-
-#ifndef HAVE_LIMIT_ON_IDENTS
-
-
- /*************************************************************************/
- /* */
- /* Here some alias #defines in order to be clearer. */
- /* */
- /* These are not always #defined to stay within the 31~character limit */
- /* which some compilers have. */
- /* */
- /* Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern */
- /* Borland compilers (read: from BC++ 3.1 on) can increase this limit. */
- /* If you get a warning with such a compiler, use the -i40 switch. */
- /* */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_A \
- TT_UCR_ARABIC_PRESENTATIONS_A
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_B \
- TT_UCR_ARABIC_PRESENTATIONS_B
-
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS \
- TT_UCR_COMBINING_DIACRITICS
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
- TT_UCR_COMBINING_DIACRITICS_SYMB
-
-
-#endif /* !HAVE_LIMIT_ON_IDENTS */
-
-
-FT_END_HEADER
-
-#endif /* __TTNAMEID_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/tttables.h b/Build/source/libs/freetype2/include/freetype/tttables.h
deleted file mode 100644
index 72d8e4f291c..00000000000
--- a/Build/source/libs/freetype2/include/freetype/tttables.h
+++ /dev/null
@@ -1,756 +0,0 @@
-/***************************************************************************/
-/* */
-/* tttables.h */
-/* */
-/* Basic SFNT/TrueType tables definitions and interface */
-/* (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 the definition of TrueType-specific tables */
- /* as well as some routines used to access and process them. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Header */
- /* */
- /* <Description> */
- /* A structure used to model a TrueType font header table. All */
- /* fields follow the TrueType 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 used to model a TrueType horizontal header, the `hhea' */
- /* table, as well as the corresponding horizontal metrics table, */
- /* i.e., the `hmtx' table. */
- /* */
- /* <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. */
- /* */
- /* 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> */
- /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
- /* be identical except for the names of their fields which */
- /* are different. */
- /* */
- /* This ensures that a single function in the `ttload' */
- /* module is able to read both the horizontal and vertical */
- /* headers. */
- /* */
- 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 TrueType 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, i.e., */
- /* the `vmtx' table. */
- /* */
- /* <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. */
- /* This value is `reserved' in vmtx */
- /* version 1.0. */
- /* */
- /* Reserved :: 8~reserved bytes. */
- /* */
- /* metric_Data_Format :: Always~0. */
- /* */
- /* number_Of_HMetrics :: 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> */
- /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
- /* be identical except for the names of their fields which */
- /* are different. */
- /* */
- /* This ensures that a single function in the `ttload' */
- /* module is able to read both the horizontal and vertical */
- /* headers. */
- /* */
- 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 left-sb or top-sb */
- FT_Short min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */
- FT_Short yMax_Extent; /* xmax or 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 TrueType specification */
- /* but they're used to connect the metrics header to the relevant */
- /* `HMTX' or `VMTX' table. */
-
- void* long_metrics;
- void* short_metrics;
-
- } TT_VertHeader;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_OS2 */
- /* */
- /* <Description> */
- /* A structure used to model a TrueType OS/2 table. This is the long */
- /* table version. All fields comply to the TrueType specification. */
- /* */
- /* Note that we now support old Mac fonts which do not include an */
- /* OS/2 table. In this case, the `version' field is always set to */
- /* 0xFFFF. */
- /* */
- typedef struct TT_OS2_
- {
- FT_UShort version; /* 0x0001 - more or 0xFFFF */
- FT_Short xAvgCharWidth;
- FT_UShort usWeightClass;
- FT_UShort usWidthClass;
- FT_Short 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 tables: */
-
- FT_ULong ulCodePageRange1; /* Bits 0-31 */
- FT_ULong ulCodePageRange2; /* Bits 32-63 */
-
- /* only version 2 tables: */
-
- FT_Short sxHeight;
- FT_Short sCapHeight;
- FT_UShort usDefaultChar;
- FT_UShort usBreakChar;
- FT_UShort usMaxContext;
-
- } TT_OS2;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_Postscript */
- /* */
- /* <Description> */
- /* A structure used to model a TrueType PostScript table. All fields */
- /* comply to the TrueType specification. This structure does not */
- /* reference the PostScript glyph names, which can be nevertheless */
- /* accessed with the `ttpost' module. */
- /* */
- 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 file, but we don't */
- /* load them by default. See the ttpost.c file. */
-
- } TT_Postscript;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* TT_PCLT */
- /* */
- /* <Description> */
- /* A structure used to model a TrueType PCLT table. All fields */
- /* comply to the TrueType 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 is a table containing many max values which */
- /* can be used to pre-allocate arrays. This ensures that no memory */
- /* allocation occurs during a glyph load. */
- /* */
- /* <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 */
- /* the structure element */
- /* `maxCompositePoints'. */
- /* */
- /* maxContours :: The maximum number of contours in a */
- /* non-composite TrueType glyph. See also */
- /* the structure element */
- /* `maxCompositeContours'. */
- /* */
- /* maxCompositePoints :: The maximum number of points in a */
- /* composite TrueType glyph. See also the */
- /* structure element `maxPoints'. */
- /* */
- /* maxCompositeContours :: The maximum number of contours in a */
- /* composite TrueType glyph. See also the */
- /* structure element `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 used to specify the index of an SFNT table. */
- /* Used in the @FT_Get_Sfnt_Table API function. */
- /* */
- typedef enum FT_Sfnt_Tag_
- {
- ft_sfnt_head = 0,
- ft_sfnt_maxp = 1,
- ft_sfnt_os2 = 2,
- ft_sfnt_hhea = 3,
- ft_sfnt_vhea = 4,
- ft_sfnt_post = 5,
- ft_sfnt_pclt = 6,
-
- sfnt_max /* internal end mark */
-
- } FT_Sfnt_Tag;
-
- /* */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Table */
- /* */
- /* <Description> */
- /* Return a pointer to a given SFNT table 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~0 in case of */
- /* error, or if the corresponding table was not found *OR* loaded */
- /* from the file. */
- /* */
- /* <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. */
- /* */
- FT_EXPORT( void* )
- FT_Get_Sfnt_Table( FT_Face face,
- FT_Sfnt_Tag tag );
-
-
- /**************************************************************************
- *
- * @function:
- * FT_Load_Sfnt_Table
- *
- * @description:
- * Load any font table into client memory.
- *
- * @input:
- * face ::
- * A handle to the source face.
- *
- * tag ::
- * The four-byte tag of the table to load. Use the 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, then 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 ... }
- * }
- */
- 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.
- *
- * @output:
- * tag ::
- * The name tag of the SFNT table.
- *
- * length ::
- * The length of the SFNT table.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * SFNT tables with length zero are treated as missing by Windows.
- *
- */
- 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 TrueType/sfnt specific cmap language ID. Definitions of */
- /* language ID values are in `freetype/ttnameid.h'. */
- /* */
- /* <Input> */
- /* charmap :: */
- /* The target charmap. */
- /* */
- /* <Return> */
- /* The language ID of `charmap'. If `charmap' doesn't belong to a */
- /* TrueType/sfnt face, just return~0 as the default value. */
- /* */
- FT_EXPORT( FT_ULong )
- FT_Get_CMap_Language_ID( FT_CharMap charmap );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_CMap_Format */
- /* */
- /* <Description> */
- /* Return TrueType/sfnt specific cmap format. */
- /* */
- /* <Input> */
- /* charmap :: */
- /* The target charmap. */
- /* */
- /* <Return> */
- /* The format of `charmap'. If `charmap' doesn't belong to a */
- /* TrueType/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/Build/source/libs/freetype2/include/freetype/tttags.h b/Build/source/libs/freetype2/include/freetype/tttags.h
deleted file mode 100644
index 5a79008209d..00000000000
--- a/Build/source/libs/freetype2/include/freetype/tttags.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/***************************************************************************/
-/* */
-/* tttags.h */
-/* */
-/* Tags for TrueType and OpenType tables (specification only). */
-/* */
-/* Copyright 1996-2001, 2004, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' )
-#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_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_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_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_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_prep FT_MAKE_TAG( 'p', 'r', 'e', 'p' )
-#define TTAG_prop FT_MAKE_TAG( 'p', 'r', 'o', 'p' )
-#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_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' )
-
-
-FT_END_HEADER
-
-#endif /* __TTAGS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/include/freetype/ttunpat.h b/Build/source/libs/freetype2/include/freetype/ttunpat.h
deleted file mode 100644
index a0162759b78..00000000000
--- a/Build/source/libs/freetype2/include/freetype/ttunpat.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttunpat.h */
-/* */
-/* Definitions for the unpatented TrueType hinting system */
-/* */
-/* Copyright 2003, 2006 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:
- * 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/Build/source/libs/freetype2/include/ft2build.h b/Build/source/libs/freetype2/include/ft2build.h
deleted file mode 100644
index 923d887df6f..00000000000
--- a/Build/source/libs/freetype2/include/ft2build.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* ft2build.h */
-/* */
-/* FreeType 2 build and setup macros. */
-/* (Generic version) */
-/* */
-/* Copyright 1996-2001, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 corresponds to the default `ft2build.h' file for */
- /* FreeType 2. It uses the `freetype' include root. */
- /* */
- /* Note that specific platforms might use a different configuration. */
- /* See builds/unix/ft2unix.h for an example. */
- /* */
- /*************************************************************************/
-
-
-#ifndef __FT2_BUILD_GENERIC_H__
-#define __FT2_BUILD_GENERIC_H__
-
-#include <freetype/config/ftheader.h>
-
-#endif /* __FT2_BUILD_GENERIC_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/modules.cfg b/Build/source/libs/freetype2/modules.cfg
deleted file mode 100644
index 525866adb99..00000000000
--- a/Build/source/libs/freetype2/modules.cfg
+++ /dev/null
@@ -1,245 +0,0 @@
-# modules.cfg
-#
-# Copyright 2005, 2006, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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.
-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.
-FONT_MODULES += cid
-
-# PFR/TrueDoc font driver. See optional extension ftpfr.c below also.
-FONT_MODULES += pfr
-
-# PostScript Type 42 font driver.
-#
-# This driver needs the `truetype' module.
-FONT_MODULES += type42
-
-# Windows FONT/FNT font driver. See optional extension ftwinfnt.c below
-# also.
-FONT_MODULES += winfonts
-
-# PCF font driver.
-FONT_MODULES += pcf
-
-# BDF font driver. See optional extension ftbdf.c below also.
-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.
-AUX_MODULES += cache
-
-# TrueType GX/AAT table validation. Needs ftgxval.c below.
-# AUX_MODULES += gxvalid
-
-# Support for streams compressed with gzip (files with suffix .gz).
-#
-# See include/freetype/ftgzip.h for the API.
-AUX_MODULES += gzip
-
-# Support for streams compressed with LZW (files with suffix .Z).
-#
-# See include/freetype/ftlzw.h for the API.
-AUX_MODULES += lzw
-
-# OpenType table validation. Needs ftotval.c below.
-#
-# AUX_MODULES += otvalid
-
-# Auxiliary PostScript driver component to share common code.
-#
-# This module depends on `psnames'.
-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
-
-# Access CID font information.
-#
-# See include/freetype/ftcid.h for the API.
-BASE_EXTENSIONS += ftcid.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
-
-# Convenience functions to handle glyphs.
-#
-# See include/freetype/ftglyph.h for the API.
-BASE_EXTENSIONS += ftglyph.c
-
-# Interface for gxvalid module (which is required).
-#
-# See include/freetype/ftgxval.h for the API.
-BASE_EXTENSIONS += ftgxval.c
-
-# Multiple Master font interface.
-#
-# See include/freetype/ftmm.h for the API.
-BASE_EXTENSIONS += ftmm.c
-
-# Interface for otvalid module (which is required).
-#
-# See include/freetype/ftotval.h for the API.
-BASE_EXTENSIONS += ftotval.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.
-#
-# See include/freetype/ftstroke.h for the API.
-BASE_EXTENSIONS += ftstroke.c
-
-# Support for synthetic embolding and slanting of fonts.
-#
-# 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
-
-# Support functions for X11.
-#
-# See include/freetype/ftxf86.h for the API.
-BASE_EXTENSIONS += ftxf86.c
-
-# Support for LCD color filtering of subpixel bitmaps.
-#
-# See include/freetype/ftlcdfil.h for the API.
-BASE_EXTENSIONS += ftlcdfil.c
-
-# Support for GASP table queries.
-#
-# See include/freetype/ftgasp.h for the API.
-BASE_EXTENSIONS += ftgasp.c
-
-# Support for FT_Face_CheckTrueTypePatents.
-#
-# See include/freetype.h for the API.
-BASE_EXTENSIONS += ftpatent.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/Build/source/libs/freetype2/objs/README b/Build/source/libs/freetype2/objs/README
deleted file mode 100644
index befb63e0492..00000000000
--- a/Build/source/libs/freetype2/objs/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains all the object files created when building the
-library.
diff --git a/Build/source/libs/freetype2/src/Jamfile b/Build/source/libs/freetype2/src/Jamfile
deleted file mode 100644
index 76ee0f46e6d..00000000000
--- a/Build/source/libs/freetype2/src/Jamfile
+++ /dev/null
@@ -1,25 +0,0 @@
-# FreeType 2 src Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) ;
-
-# The file <freetype/internal/internal.h> is used to define macros that are
-# later used in #include statements. It needs to be parsed in order to
-# record these definitions.
-#
-HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) internal internal.h ] ;
-
-for xx in $(FT2_COMPONENTS)
-{
- SubInclude FT2_TOP $(FT2_SRC_DIR) $(xx) ;
-}
-
-# end of src Jamfile
diff --git a/Build/source/libs/freetype2/src/autofit/Jamfile b/Build/source/libs/freetype2/src/autofit/Jamfile
deleted file mode 100644
index acee8bf2cbf..00000000000
--- a/Build/source/libs/freetype2/src/autofit/Jamfile
+++ /dev/null
@@ -1,39 +0,0 @@
-# FreeType 2 src/autofit Jamfile
-#
-# Copyright 2003, 2004, 2005, 2006, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 do enable to experimental latin hinter replacement
- if $(FT2_AUTOFIT2)
- {
- DEFINES += FT_OPTION_AUTOFIT2 ;
- }
- if $(FT2_MULTI)
- {
- _sources = afangles afglobal afhints aflatin afcjk afindic afloader afmodule afdummy afwarp ;
-
- if $(FT2_AUTOFIT2)
- {
- _sources += aflatin2 ;
- }
- }
- else
- {
- _sources = autofit ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/autofit Jamfile
diff --git a/Build/source/libs/freetype2/src/autofit/afangles.c b/Build/source/libs/freetype2/src/autofit/afangles.c
deleted file mode 100644
index e2360d157de..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afangles.c
+++ /dev/null
@@ -1,292 +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, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
-#if 0
-
- FT_LOCAL_DEF( FT_Int )
- af_corner_is_flat( FT_Pos x_in,
- FT_Pos y_in,
- FT_Pos x_out,
- FT_Pos y_out )
- {
- FT_Pos ax = x_in;
- FT_Pos ay = y_in;
-
- FT_Pos d_in, d_out, d_corner;
-
-
- if ( ax < 0 )
- ax = -ax;
- if ( ay < 0 )
- ay = -ay;
- d_in = ax + ay;
-
- ax = x_out;
- if ( ax < 0 )
- ax = -ax;
- ay = y_out;
- if ( ay < 0 )
- ay = -ay;
- d_out = ax + ay;
-
- ax = x_out + x_in;
- if ( ax < 0 )
- ax = -ax;
- ay = y_out + y_in;
- if ( ay < 0 )
- ay = -ay;
- d_corner = ax + ay;
-
- return ( d_in + d_out - d_corner ) < ( d_corner >> 4 );
- }
-
-
- FT_LOCAL_DEF( FT_Int )
- af_corner_orientation( FT_Pos x_in,
- FT_Pos y_in,
- FT_Pos x_out,
- FT_Pos y_out )
- {
- FT_Pos delta;
-
-
- delta = x_in * y_out - y_in * x_out;
-
- if ( delta == 0 )
- return 0;
- else
- return 1 - 2 * ( delta < 0 );
- }
-
-#endif
-
-
- /*
- * 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_widths( FT_UInt count,
- AF_Width table )
- {
- FT_UInt i, j;
- AF_WidthRec swap;
-
-
- 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;
- }
- }
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afangles.h b/Build/source/libs/freetype2/src/autofit/afangles.h
deleted file mode 100644
index f33f9e108e3..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/autofit/afcjk.c b/Build/source/libs/freetype2/src/autofit/afcjk.c
deleted file mode 100644
index 7e9438b2284..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afcjk.c
+++ /dev/null
@@ -1,1508 +0,0 @@
-/***************************************************************************/
-/* */
-/* afcjk.c */
-/* */
-/* Auto-fitter hinting routines for CJK script (body). */
-/* */
-/* Copyright 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "aftypes.h"
-#include "aflatin.h"
-
-
-#ifdef AF_CONFIG_OPTION_CJK
-
-#include "afcjk.h"
-#include "aferrors.h"
-
-
-#ifdef AF_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( FT_Error )
- af_cjk_metrics_init( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_CharMap oldmap = face->charmap;
-
-
- metrics->units_per_em = face->units_per_EM;
-
- /* TODO are there blues? */
-
- if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
- face->charmap = NULL;
-
- /* latin's version would suffice */
- af_latin_metrics_init_widths( metrics, face, 0x7530 );
-
- FT_Set_Charmap( face, oldmap );
-
- return AF_Err_Ok;
- }
-
-
- static void
- af_cjk_metrics_scale_dim( AF_LatinMetrics metrics,
- AF_Scaler scaler,
- AF_Dimension dim )
- {
- AF_LatinAxis axis;
-
-
- axis = &metrics->axis[dim];
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- axis->scale = scaler->x_scale;
- axis->delta = scaler->x_delta;
- }
- else
- {
- axis->scale = scaler->y_scale;
- axis->delta = scaler->y_delta;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- af_cjk_metrics_scale( AF_LatinMetrics metrics,
- AF_Scaler scaler )
- {
- metrics->root.scaler = *scaler;
-
- af_cjk_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
- af_cjk_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- 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;
- AF_Flags f0 = (AF_Flags)(pt->flags & AF_FLAG_CONTROL);
- AF_Flags f1;
-
-
- seg->flags &= ~AF_EDGE_ROUND;
-
- for ( ; pt != last; f0 = f1 )
- {
- pt = pt->next;
- f1 = (AF_Flags)(pt->flags & AF_FLAG_CONTROL);
-
- if ( !f0 && !f1 )
- break;
-
- if ( pt == last )
- seg->flags |= AF_EDGE_ROUND;
- }
- }
-
- return AF_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++ )
- {
- /* the fake segments are for metrics hinting only */
- if ( seg1->first == seg1->last )
- continue;
-
- 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 = 0;
- seg->serif = link1;
- }
- else if ( link == link2 )
- {
- seg->link = 0;
- seg->serif = seg1;
- }
- }
- }
- else
- {
- seg1->link = link1->link = 0;
-
- break;
- }
- }
- }
- }
-
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- seg2 = seg1->link;
-
- if ( seg2 )
- {
- seg2->num_linked++;
- if ( seg2->link != seg1 )
- {
- seg1->link = 0;
-
- if ( seg2->score < dist_threshold || seg1->score < seg2->score * 4 )
- seg1->serif = seg2->link;
- else
- seg2->num_linked--;
- }
- }
- }
- }
-
-
- static FT_Error
- af_cjk_hints_compute_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Error error = AF_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;
-
- 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 = 0;
- 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;
- AF_Segment link1;
- FT_Pos dist2 = 0;
-
-
- do
- {
- 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,
- 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->fpos = seg->pos;
- edge->opos = edge->pos = FT_MulFix( seg->pos, scale );
- seg->edge_next = seg;
- edge->dir = seg->dir;
- }
- 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 segments */
- /* found on its position. Basically, these are as follows. */
- /* */
- /* - 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 = 0;
- }
- }
-
- Exit:
- return error;
- }
-
-
- 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;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_cjk_hints_init( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- FT_Render_Mode mode;
- FT_UInt32 scaler_flags, other_flags;
-
-
- af_glyph_hints_rescale( hints, (AF_ScriptMetrics)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;
-
-#ifdef AF_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 only if we don't use the `light' mode.
- */
- if ( mode != FT_RENDER_MODE_LIGHT )
- 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;
-
- hints->scaler_flags = scaler_flags;
- hints->other_flags = other_flags;
-
- return 0;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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_Int count,
- FT_Pos width )
- {
- int 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_cjk_compute_stem_width( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Pos width,
- AF_Edge_Flags base_flags,
- AF_Edge_Flags 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 );
- 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,
- (AF_Edge_Flags)base_edge->flags,
- (AF_Edge_Flags)stem_edge->flags );
-
-
- stem_edge->pos = base_edge->pos + fitted_width;
- }
-
-
- 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,
- (AF_Edge_Flags)edge->flags,
- (AF_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 % 64;
-
- 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;
- }
-
-
- 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_Int n_edges;
- AF_Edge edge;
- AF_Edge anchor = 0;
- FT_Pos delta = 0;
- FT_Int skipped = 0;
-
-
- /* 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;
- }
-
- /* now align the stem */
-
- if ( edge2 < edge )
- {
- af_cjk_align_linked_edge( hints, dim, edge2, edge );
- edge->flags |= AF_EDGE_DONE;
- 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;
- }
-
- /* 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 )
- return;
-
- /*
- * 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 )
- return;
-
- 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
- edge->pos = before->pos +
- FT_MulDiv( edge->fpos - before->fpos,
- after->pos - before->pos,
- after->fpos - before->fpos );
- }
- }
- }
-
-
- 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 );
- }
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_cjk_hints_apply( AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics )
- {
- FT_Error error;
- int dim;
-
- FT_UNUSED( metrics );
-
-
- error = af_glyph_hints_reload( hints, outline, 0 );
- 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;
- }
-
- if ( AF_HINTS_DO_VERTICAL( hints ) )
- {
- error = af_cjk_hints_detect_features( hints, AF_DIMENSION_VERT );
- if ( error )
- goto Exit;
- }
-
- /* 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_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL )
- {
- 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_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 );
- }
- }
-
-#if 0
- af_glyph_hints_dump_points( hints );
- af_glyph_hints_dump_segments( hints );
- af_glyph_hints_dump_edges( hints );
-#endif
-
- af_glyph_hints_save( hints, outline );
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** C J K S C R I P T C L A S S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static const AF_Script_UniRangeRec af_cjk_uniranges[] =
- {
-#if 0
- { 0x0100, 0xFFFF }, /* why this? */
-#endif
- { 0x2E80, 0x2EFF }, /* CJK Radicals Supplement */
- { 0x2F00, 0x2FDF }, /* Kangxi Radicals */
- { 0x3000, 0x303F }, /* CJK Symbols and Punctuation */
- { 0x3040, 0x309F }, /* Hiragana */
- { 0x30A0, 0x30FF }, /* Katakana */
- { 0x3100, 0x312F }, /* Bopomofo */
- { 0x3130, 0x318F }, /* Hangul Compatibility Jamo */
- { 0x31A0, 0x31BF }, /* Bopomofo Extended */
- { 0x31C0, 0x31EF }, /* CJK Strokes */
- { 0x31F0, 0x31FF }, /* Katakana Phonetic Extensions */
- { 0x3200, 0x32FF }, /* Enclosed CJK Letters and Months */
- { 0x3300, 0x33FF }, /* CJK Compatibility */
- { 0x3400, 0x4DBF }, /* CJK Unified Ideographs Extension A */
- { 0x4DC0, 0x4DFF }, /* Yijing Hexagram Symbols */
- { 0x4E00, 0x9FFF }, /* CJK Unified Ideographs */
- { 0xF900, 0xFAFF }, /* CJK Compatibility Ideographs */
- { 0xFE30, 0xFE4F }, /* CJK Compatibility Forms */
- { 0xFF00, 0xFFEF }, /* Halfwidth and Fullwidth Forms */
- { 0x20000, 0x2A6DF }, /* CJK Unified Ideographs Extension B */
- { 0x2F800, 0x2FA1F }, /* CJK Compatibility Ideographs Supplement */
- { 0, 0 }
- };
-
-
- FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
- af_cjk_script_class =
- {
- AF_SCRIPT_CJK,
- af_cjk_uniranges,
-
- sizeof( AF_LatinMetricsRec ),
-
- (AF_Script_InitMetricsFunc) af_cjk_metrics_init,
- (AF_Script_ScaleMetricsFunc)af_cjk_metrics_scale,
- (AF_Script_DoneMetricsFunc) NULL,
-
- (AF_Script_InitHintsFunc) af_cjk_hints_init,
- (AF_Script_ApplyHintsFunc) af_cjk_hints_apply
- };
-
-#else /* !AF_CONFIG_OPTION_CJK */
-
- static const AF_Script_UniRangeRec af_cjk_uniranges[] =
- {
- { 0, 0 }
- };
-
-
- FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
- af_cjk_script_class =
- {
- AF_SCRIPT_CJK,
- af_cjk_uniranges,
-
- sizeof( AF_LatinMetricsRec ),
-
- (AF_Script_InitMetricsFunc) NULL,
- (AF_Script_ScaleMetricsFunc)NULL,
- (AF_Script_DoneMetricsFunc) NULL,
-
- (AF_Script_InitHintsFunc) NULL,
- (AF_Script_ApplyHintsFunc) NULL
- };
-
-#endif /* !AF_CONFIG_OPTION_CJK */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afcjk.h b/Build/source/libs/freetype2/src/autofit/afcjk.h
deleted file mode 100644
index 9f77fda1430..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afcjk.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/***************************************************************************/
-/* */
-/* afcjk.h */
-/* */
-/* Auto-fitter hinting routines for CJK script (specification). */
-/* */
-/* Copyright 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
-FT_BEGIN_HEADER
-
-
- /* the CJK-specific script class */
-
- FT_CALLBACK_TABLE const AF_ScriptClassRec
- af_cjk_script_class;
-
-
- FT_LOCAL( FT_Error )
- af_cjk_metrics_init( AF_LatinMetrics metrics,
- FT_Face face );
-
- FT_LOCAL( void )
- af_cjk_metrics_scale( AF_LatinMetrics metrics,
- AF_Scaler scaler );
-
- FT_LOCAL( FT_Error )
- af_cjk_hints_init( AF_GlyphHints hints,
- AF_LatinMetrics metrics );
-
- FT_LOCAL( FT_Error )
- af_cjk_hints_apply( AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics );
-
-/* */
-
-FT_END_HEADER
-
-#endif /* __AFCJK_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afdummy.c b/Build/source/libs/freetype2/src/autofit/afdummy.c
deleted file mode 100644
index ed96e96410d..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afdummy.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/***************************************************************************/
-/* */
-/* afdummy.c */
-/* */
-/* Auto-fitter dummy routines to be used if no hinting should be */
-/* performed (body). */
-/* */
-/* Copyright 2003, 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
- static FT_Error
- af_dummy_hints_init( AF_GlyphHints hints,
- AF_ScriptMetrics metrics )
- {
- af_glyph_hints_rescale( hints,
- metrics );
- return 0;
- }
-
-
- static FT_Error
- af_dummy_hints_apply( AF_GlyphHints hints,
- FT_Outline* outline )
- {
- FT_UNUSED( hints );
- FT_UNUSED( outline );
-
- return 0;
- }
-
-
- FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
- af_dummy_script_class =
- {
- AF_SCRIPT_NONE,
- NULL,
-
- sizeof( AF_ScriptMetricsRec ),
-
- (AF_Script_InitMetricsFunc) NULL,
- (AF_Script_ScaleMetricsFunc)NULL,
- (AF_Script_DoneMetricsFunc) NULL,
-
- (AF_Script_InitHintsFunc) af_dummy_hints_init,
- (AF_Script_ApplyHintsFunc) af_dummy_hints_apply
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afdummy.h b/Build/source/libs/freetype2/src/autofit/afdummy.h
deleted file mode 100644
index 2a5faf8f851..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afdummy.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/***************************************************************************/
-/* */
-/* afdummy.h */
-/* */
-/* Auto-fitter dummy routines to be used if no hinting should be */
-/* performed (specification). */
-/* */
-/* Copyright 2003, 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 script metrics class used when no hinting should
- * be performed. This is the default for non-latin glyphs!
- */
-
- FT_CALLBACK_TABLE const AF_ScriptClassRec
- af_dummy_script_class;
-
-/* */
-
-FT_END_HEADER
-
-
-#endif /* __AFDUMMY_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/aferrors.h b/Build/source/libs/freetype2/src/autofit/aferrors.h
deleted file mode 100644
index c2ed5fe2abe..00000000000
--- a/Build/source/libs/freetype2/src/autofit/aferrors.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* aferrors.h */
-/* */
-/* Autofitter error codes (specification only). */
-/* */
-/* Copyright 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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__
-
-#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/Build/source/libs/freetype2/src/autofit/afglobal.c b/Build/source/libs/freetype2/src/autofit/afglobal.c
deleted file mode 100644
index bfb9091bfdc..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afglobal.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/***************************************************************************/
-/* */
-/* afglobal.c */
-/* */
-/* Auto-fitter routines to compute global hinting values (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "afdummy.h"
-#include "aflatin.h"
-#include "afcjk.h"
-#include "afindic.h"
-
-#include "aferrors.h"
-
-#ifdef FT_OPTION_AUTOFIT2
-#include "aflatin2.h"
-#endif
-
- /* populate this list when you add new scripts */
- static AF_ScriptClass const af_script_classes[] =
- {
- &af_dummy_script_class,
-#ifdef FT_OPTION_AUTOFIT2
- &af_latin2_script_class,
-#endif
- &af_latin_script_class,
- &af_cjk_script_class,
- &af_indic_script_class,
- NULL /* do not remove */
- };
-
- /* index of default script in `af_script_classes' */
-#define AF_SCRIPT_LIST_DEFAULT 2
- /* indicates an uncovered glyph */
-#define AF_SCRIPT_LIST_NONE 255
-
-
- /*
- * Note that glyph_scripts[] is used to map each glyph into
- * an index into the `af_script_classes' array.
- *
- */
- typedef struct AF_FaceGlobalsRec_
- {
- FT_Face face;
- FT_UInt glyph_count; /* same as face->num_glyphs */
- FT_Byte* glyph_scripts;
-
- AF_ScriptMetrics metrics[AF_SCRIPT_MAX];
-
- } AF_FaceGlobalsRec;
-
-
- /* Compute the script index of each glyph within a given face. */
-
- static FT_Error
- af_face_globals_compute_script_coverage( AF_FaceGlobals globals )
- {
- FT_Error error = AF_Err_Ok;
- FT_Face face = globals->face;
- FT_CharMap old_charmap = face->charmap;
- FT_Byte* gscripts = globals->glyph_scripts;
- FT_UInt ss;
-
-
- /* the value 255 means `uncovered glyph' */
- FT_MEM_SET( globals->glyph_scripts,
- AF_SCRIPT_LIST_NONE,
- globals->glyph_count );
-
- error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
- if ( error )
- {
- /*
- * Ignore this error; we simply use the default script.
- * XXX: Shouldn't we rather disable hinting?
- */
- error = AF_Err_Ok;
- goto Exit;
- }
-
- /* scan each script in a Unicode charmap */
- for ( ss = 0; af_script_classes[ss]; ss++ )
- {
- AF_ScriptClass clazz = af_script_classes[ss];
- AF_Script_UniRange range;
-
-
- if ( clazz->script_uni_ranges == NULL )
- continue;
-
- /*
- * Scan all unicode points in the range and set the corresponding
- * glyph script index.
- */
- for ( range = clazz->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 < globals->glyph_count &&
- gscripts[gindex] == AF_SCRIPT_LIST_NONE )
- {
- gscripts[gindex] = (FT_Byte)ss;
- }
-
- for (;;)
- {
- charcode = FT_Get_Next_Char( face, charcode, &gindex );
-
- if ( gindex == 0 || charcode > range->last )
- break;
-
- if ( gindex < globals->glyph_count &&
- gscripts[gindex] == AF_SCRIPT_LIST_NONE )
- {
- gscripts[gindex] = (FT_Byte)ss;
- }
- }
- }
- }
-
- Exit:
- /*
- * By default, all uncovered glyphs are set to the latin script.
- * XXX: Shouldn't we disable hinting or do something similar?
- */
- {
- FT_UInt nn;
-
-
- for ( nn = 0; nn < globals->glyph_count; nn++ )
- {
- if ( gscripts[nn] == AF_SCRIPT_LIST_NONE )
- gscripts[nn] = AF_SCRIPT_LIST_DEFAULT;
- }
- }
-
- FT_Set_Charmap( face, old_charmap );
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_face_globals_new( FT_Face face,
- AF_FaceGlobals *aglobals )
- {
- FT_Error error;
- FT_Memory memory;
- AF_FaceGlobals globals;
-
-
- memory = face->memory;
-
- if ( !FT_ALLOC( globals, sizeof ( *globals ) +
- face->num_glyphs * sizeof ( FT_Byte ) ) )
- {
- globals->face = face;
- globals->glyph_count = face->num_glyphs;
- globals->glyph_scripts = (FT_Byte*)( globals + 1 );
-
- error = af_face_globals_compute_script_coverage( globals );
- if ( error )
- {
- af_face_globals_free( globals );
- globals = NULL;
- }
- }
-
- *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_SCRIPT_MAX; nn++ )
- {
- if ( globals->metrics[nn] )
- {
- AF_ScriptClass clazz = af_script_classes[nn];
-
-
- FT_ASSERT( globals->metrics[nn]->clazz == clazz );
-
- if ( clazz->script_metrics_done )
- clazz->script_metrics_done( globals->metrics[nn] );
-
- FT_FREE( globals->metrics[nn] );
- }
- }
-
- globals->glyph_count = 0;
- globals->glyph_scripts = NULL; /* no need to free this one! */
- globals->face = NULL;
-
- FT_FREE( globals );
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_face_globals_get_metrics( AF_FaceGlobals globals,
- FT_UInt gindex,
- FT_UInt options,
- AF_ScriptMetrics *ametrics )
- {
- AF_ScriptMetrics metrics = NULL;
- FT_UInt gidx;
- AF_ScriptClass clazz;
- FT_UInt script = options & 15;
- const FT_UInt script_max = sizeof ( af_script_classes ) /
- sizeof ( af_script_classes[0] );
- FT_Error error = AF_Err_Ok;
-
-
- if ( gindex >= globals->glyph_count )
- {
- error = AF_Err_Invalid_Argument;
- goto Exit;
- }
-
- gidx = script;
- if ( gidx == 0 || gidx + 1 >= script_max )
- gidx = globals->glyph_scripts[gindex];
-
- clazz = af_script_classes[gidx];
- if ( script == 0 )
- script = clazz->script;
-
- metrics = globals->metrics[clazz->script];
- if ( metrics == NULL )
- {
- /* create the global metrics object when needed */
- FT_Memory memory = globals->face->memory;
-
-
- if ( FT_ALLOC( metrics, clazz->script_metrics_size ) )
- goto Exit;
-
- metrics->clazz = clazz;
-
- if ( clazz->script_metrics_init )
- {
- error = clazz->script_metrics_init( metrics, globals->face );
- if ( error )
- {
- if ( clazz->script_metrics_done )
- clazz->script_metrics_done( metrics );
-
- FT_FREE( metrics );
- goto Exit;
- }
- }
-
- globals->metrics[clazz->script] = metrics;
- }
-
- Exit:
- *ametrics = metrics;
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afglobal.h b/Build/source/libs/freetype2/src/autofit/afglobal.h
deleted file mode 100644
index cf52c087560..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afglobal.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/***************************************************************************/
-/* */
-/* afglobal.h */
-/* */
-/* Auto-fitter routines to compute global hinting values */
-/* (specification). */
-/* */
-/* Copyright 2003, 2004, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 __AF_GLOBAL_H__
-#define __AF_GLOBAL_H__
-
-
-#include "aftypes.h"
-
-
-FT_BEGIN_HEADER
-
-
- /************************************************************************/
- /************************************************************************/
- /***** *****/
- /***** F A C E G L O B A L S *****/
- /***** *****/
- /************************************************************************/
- /************************************************************************/
-
-
- /*
- * model the global hints data for a given face, decomposed into
- * script-specific items
- */
- typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals;
-
-
- FT_LOCAL( FT_Error )
- af_face_globals_new( FT_Face face,
- AF_FaceGlobals *aglobals );
-
- FT_LOCAL( FT_Error )
- af_face_globals_get_metrics( AF_FaceGlobals globals,
- FT_UInt gindex,
- FT_UInt options,
- AF_ScriptMetrics *ametrics );
-
- FT_LOCAL( void )
- af_face_globals_free( AF_FaceGlobals globals );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __AF_GLOBALS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afhints.c b/Build/source/libs/freetype2/src/autofit/afhints.c
deleted file mode 100644
index 482870686d5..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afhints.c
+++ /dev/null
@@ -1,1264 +0,0 @@
-/***************************************************************************/
-/* */
-/* afhints.c */
-/* */
-/* Auto-fitter hinting routines (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
- FT_LOCAL_DEF( FT_Error )
- af_axis_hints_new_segment( AF_AxisHints axis,
- FT_Memory memory,
- AF_Segment *asegment )
- {
- FT_Error error = AF_Err_Ok;
- AF_Segment segment = NULL;
-
-
- 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_MAX / sizeof ( *segment );
-
-
- if ( old_max >= big_max )
- {
- error = AF_Err_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 ( 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;
- }
-
-
- FT_LOCAL( FT_Error )
- af_axis_hints_new_edge( AF_AxisHints axis,
- FT_Int fpos,
- AF_Direction dir,
- FT_Memory memory,
- AF_Edge *aedge )
- {
- FT_Error error = AF_Err_Ok;
- AF_Edge edge = NULL;
- AF_Edge edges;
-
-
- 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_MAX / sizeof ( *edge );
-
-
- if ( old_max >= big_max )
- {
- error = AF_Err_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 ( 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 ( 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++;
-
- FT_ZERO( edge );
- edge->fpos = (FT_Short)fpos;
- edge->dir = (FT_Char)dir;
-
- Exit:
- *aedge = edge;
- return error;
- }
-
-
-#ifdef AF_DEBUG
-
-#include <stdio.h>
-
- 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 ) ( (ptr) ? ( (ptr) - (base) ) : -1 )
-
-
- void
- af_glyph_hints_dump_points( AF_GlyphHints hints )
- {
- AF_Point points = hints->points;
- AF_Point limit = points + hints->num_points;
- AF_Point point;
-
-
- printf( "Table of points:\n" );
- printf( " [ index | xorg | yorg | xscale | yscale "
- "| xfit | yfit | flags ]\n" );
-
- for ( point = points; point < limit; point++ )
- {
- printf( " [ %5d | %5d | %5d | %-5.2f | %-5.2f "
- "| %-5.2f | %-5.2f | %c%c%c%c%c%c ]\n",
- point - points,
- point->fx,
- point->fy,
- point->ox/64.0,
- point->oy/64.0,
- point->x/64.0,
- point->y/64.0,
- ( point->flags & AF_FLAG_WEAK_INTERPOLATION ) ? 'w' : ' ',
- ( point->flags & AF_FLAG_INFLECTION ) ? 'i' : ' ',
- ( point->flags & AF_FLAG_EXTREMA_X ) ? '<' : ' ',
- ( point->flags & AF_FLAG_EXTREMA_Y ) ? 'v' : ' ',
- ( point->flags & AF_FLAG_ROUND_X ) ? '(' : ' ',
- ( point->flags & AF_FLAG_ROUND_Y ) ? 'u' : ' ');
- }
- printf( "\n" );
- }
-
-
- static const char*
- af_edge_flags_to_string( AF_Edge_Flags flags )
- {
- static char temp[32];
- int pos = 0;
-
-
- if ( flags & AF_EDGE_ROUND )
- {
- memcpy( temp + pos, "round", 5 );
- pos += 5;
- }
- if ( flags & AF_EDGE_SERIF )
- {
- if ( pos > 0 )
- temp[pos++] = ' ';
- memcpy( temp + pos, "serif", 5 );
- pos += 5;
- }
- if ( pos == 0 )
- return "normal";
-
- temp[pos] = 0;
-
- return temp;
- }
-
-
- /* A function to dump the array of linked segments. */
- void
- af_glyph_hints_dump_segments( AF_GlyphHints hints )
- {
- FT_Int dimension;
-
-
- for ( dimension = 1; dimension >= 0; dimension-- )
- {
- AF_AxisHints axis = &hints->axis[dimension];
- AF_Segment segments = axis->segments;
- AF_Segment limit = segments + axis->num_segments;
- AF_Segment seg;
-
-
- printf ( "Table of %s segments:\n",
- dimension == AF_DIMENSION_HORZ ? "vertical" : "horizontal" );
- printf ( " [ index | pos | dir | link | serif |"
- " height | extra | flags ]\n" );
-
- for ( seg = segments; seg < limit; seg++ )
- {
- printf ( " [ %5d | %5.2g | %5s | %4d | %5d | %5d | %5d | %s ]\n",
- seg - segments,
- dimension == AF_DIMENSION_HORZ ? (int)seg->first->ox / 64.0
- : (int)seg->first->oy / 64.0,
- af_dir_str( (AF_Direction)seg->dir ),
- AF_INDEX_NUM( seg->link, segments ),
- AF_INDEX_NUM( seg->serif, segments ),
- seg->height,
- seg->height - ( seg->max_coord - seg->min_coord ),
- af_edge_flags_to_string( seg->flags ) );
- }
- printf( "\n" );
- }
- }
-
-
- void
- af_glyph_hints_dump_edges( AF_GlyphHints hints )
- {
- 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;
-
-
- /*
- * note: AF_DIMENSION_HORZ corresponds to _vertical_ edges
- * since they have constant a X coordinate.
- */
- printf ( "Table of %s edges:\n",
- dimension == AF_DIMENSION_HORZ ? "vertical" : "horizontal" );
- printf ( " [ index | pos | dir | link |"
- " serif | blue | opos | pos | flags ]\n" );
-
- for ( edge = edges; edge < limit; edge++ )
- {
- printf ( " [ %5d | %5.2g | %5s | %4d |"
- " %5d | %c | %5.2f | %5.2f | %s ]\n",
- edge - edges,
- (int)edge->opos / 64.0,
- af_dir_str( (AF_Direction)edge->dir ),
- AF_INDEX_NUM( edge->link, edges ),
- 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 ) );
- }
- printf( "\n" );
- }
- }
-
-#else /* !AF_DEBUG */
-
- /* these empty stubs are only used to link the `ftgrid' test program */
- /* when debugging is disabled */
-
- void
- af_glyph_hints_dump_points( AF_GlyphHints hints )
- {
- FT_UNUSED( hints );
- }
-
-
- void
- af_glyph_hints_dump_segments( AF_GlyphHints hints )
- {
- FT_UNUSED( hints );
- }
-
-
- void
- af_glyph_hints_dump_edges( AF_GlyphHints hints )
- {
- FT_UNUSED( hints );
- }
-
-#endif /* !AF_DEBUG */
-
-
- /* 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;
- }
- }
-
- ss *= 14;
- if ( FT_ABS( ll ) <= FT_ABS( ss ) )
- dir = AF_DIR_NONE;
-
- return dir;
- }
-
-
- /* compute all inflex points in a given glyph */
-
- static void
- af_glyph_hints_compute_inflections( AF_GlyphHints hints )
- {
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
-
-
- /* do each contour separately */
- for ( ; contour < contour_limit; contour++ )
- {
- AF_Point point = contour[0];
- AF_Point first = point;
- AF_Point start = point;
- AF_Point end = point;
- AF_Point before;
- AF_Point after;
- FT_Pos in_x, in_y, out_x, out_y;
- AF_Angle orient_prev, orient_cur;
- FT_Int finished = 0;
-
-
- /* compute first segment in contour */
- first = point;
-
- start = end = first;
- do
- {
- end = end->next;
- if ( end == first )
- goto Skip;
-
- in_x = end->fx - start->fx;
- in_y = end->fy - start->fy;
-
- } 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->fx - before->fx;
- out_y = start->fy - before->fy;
-
- } while ( out_x == 0 && out_y == 0 );
-
- orient_prev = ft_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->fx - end->fx;
- out_y = after->fy - end->fy;
-
- } while ( out_x == 0 && out_y == 0 );
-
- orient_cur = ft_corner_orientation( in_x, in_y, out_x, out_y );
-
- } while ( orient_cur == 0 );
-
- if ( ( orient_prev + orient_cur ) == 0 )
- {
- /* we have an inflection point here */
- do
- {
- start->flags |= AF_FLAG_INFLECTION;
- start = start->next;
-
- } while ( start != end );
-
- start->flags |= AF_FLAG_INFLECTION;
- }
-
- start = end;
- end = after;
-
- orient_prev = orient_cur;
- in_x = out_x;
- in_y = out_y;
-
- } while ( !finished );
-
- Skip:
- ;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_init( AF_GlyphHints hints,
- FT_Memory memory )
- {
- FT_ZERO( hints );
- hints->memory = memory;
- }
-
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_done( AF_GlyphHints hints )
- {
- if ( hints && hints->memory )
- {
- FT_Memory memory = hints->memory;
- int dim;
-
-
- /*
- * 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;
- FT_FREE( axis->segments );
-
- axis->num_edges = 0;
- axis->max_edges = 0;
- FT_FREE( axis->edges );
- }
-
- FT_FREE( hints->contours );
- hints->max_contours = 0;
- hints->num_contours = 0;
-
- FT_FREE( hints->points );
- hints->num_points = 0;
- hints->max_points = 0;
-
- hints->memory = NULL;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- af_glyph_hints_rescale( AF_GlyphHints hints,
- AF_ScriptMetrics metrics )
- {
- hints->metrics = metrics;
- hints->scaler_flags = metrics->scaler.flags;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_glyph_hints_reload( AF_GlyphHints hints,
- FT_Outline* outline,
- FT_Bool get_inflections )
- {
- FT_Error error = AF_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 when necessary */
- new_max = (FT_UInt)outline->n_contours;
- old_max = hints->max_contours;
- if ( new_max > old_max )
- {
- new_max = ( new_max + 3 ) & ~3;
-
- if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) )
- goto Exit;
-
- hints->max_contours = 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 = hints->max_points;
- if ( new_max > old_max )
- {
- new_max = ( new_max + 2 + 7 ) & ~7;
-
- if ( FT_RENEW_ARRAY( hints->points, old_max, new_max ) )
- goto Exit;
-
- hints->max_points = 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;
-
-
- /* compute coordinates & Bezier flags, next and prev */
- {
- FT_Vector* vec = outline->points;
- char* tag = outline->tags;
- AF_Point first = points;
- AF_Point end = points + outline->contours[0];
- AF_Point prev = end;
- FT_Int contour_index = 0;
-
-
- for ( point = points; point < point_limit; point++, vec++, tag++ )
- {
- 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;
-
- 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 = 0;
- }
-
- point->prev = prev;
- prev->next = point;
- prev = point;
-
- if ( point == end )
- {
- if ( ++contour_index < outline->n_contours )
- {
- first = point + 1;
- end = points + outline->contours[contour_index];
- 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 & out vectors */
- {
- AF_Point first = points;
- AF_Point prev = NULL;
- FT_Pos in_x = 0;
- FT_Pos in_y = 0;
- AF_Direction in_dir = AF_DIR_NONE;
-
-
- for ( point = points; point < point_limit; point++ )
- {
- AF_Point next;
- FT_Pos out_x, out_y;
-
-
- if ( point == first )
- {
- prev = first->prev;
- in_x = first->fx - prev->fx;
- in_y = first->fy - prev->fy;
- in_dir = af_direction_compute( in_x, in_y );
- first = prev + 1;
- }
-
- point->in_dir = (FT_Char)in_dir;
-
- next = point->next;
- out_x = next->fx - point->fx;
- out_y = next->fy - point->fy;
-
- in_dir = af_direction_compute( out_x, out_y );
- point->out_dir = (FT_Char)in_dir;
-
- if ( point->flags & ( AF_FLAG_CONIC | AF_FLAG_CUBIC ) )
- {
- Is_Weak_Point:
- point->flags |= AF_FLAG_WEAK_INTERPOLATION;
- }
- else if ( point->out_dir == point->in_dir )
- {
- if ( point->out_dir != AF_DIR_NONE )
- goto Is_Weak_Point;
-
- if ( ft_corner_is_flat( in_x, in_y, out_x, out_y ) )
- goto Is_Weak_Point;
- }
- else if ( point->in_dir == -point->out_dir )
- goto Is_Weak_Point;
-
- in_x = out_x;
- in_y = out_y;
- prev = point;
- }
- }
- }
-
- /* compute inflection points -- */
- /* disabled due to no longer perceived benefits */
- if ( 0 && get_inflections )
- af_glyph_hints_compute_inflections( hints );
-
- Exit:
- return error;
- }
-
-
- 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
- *
- ****************************************************************/
-
-
- 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 == NULL )
- 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 == NULL )
- 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;
- AF_Flags 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 ) &&
- !( point->flags & AF_FLAG_INFLECTION ) )
- 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_UInt min, max, mid;
- FT_Pos fpos;
-
-
- /* find enclosing edges */
- min = 0;
- max = edge_limit - edges;
-
-#if 1
- /* for small edge counts, a linear search is better */
- if ( max <= 8 )
- {
- FT_UInt 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;
- }
- }
-
- {
- 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
- *
- ****************************************************************/
-
-
- 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;
- }
-
-
- static void
- af_iup_interp( AF_Point p1,
- AF_Point p2,
- AF_Point ref1,
- AF_Point ref2 )
- {
- AF_Point p;
- FT_Pos u;
- FT_Pos v1 = ref1->v;
- FT_Pos v2 = ref2->v;
- FT_Pos d1 = ref1->u - v1;
- FT_Pos d2 = ref2->u - v2;
-
-
- if ( p1 > p2 )
- return;
-
- if ( v1 == v2 )
- {
- for ( p = p1; p <= p2; p++ )
- {
- u = p->v;
-
- if ( u <= v1 )
- u += d1;
- else
- u += d2;
-
- p->u = u;
- }
- return;
- }
-
- if ( v1 < v2 )
- {
- for ( p = p1; p <= p2; p++ )
- {
- u = p->v;
-
- if ( u <= v1 )
- u += d1;
- else if ( u >= v2 )
- u += d2;
- else
- u = ref1->u + FT_MulDiv( u - v1, ref2->u - ref1->u, v2 - v1 );
-
- p->u = u;
- }
- }
- else
- {
- for ( p = p1; p <= p2; p++ )
- {
- u = p->v;
-
- if ( u <= v2 )
- u += d2;
- else if ( u >= v1 )
- u += d1;
- else
- u = ref1->u + FT_MulDiv( u - v1, ref2->u - ref1->u, v2 - v1 );
-
- p->u = u;
- }
- }
- }
-
-
- 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;
- AF_Flags 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;
- }
- }
-
- point = points;
-
- 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;
- last_touched = point;
-
- for (;;)
- {
- FT_ASSERT( point <= end_point &&
- ( point->flags & touch_flag ) != 0 );
-
- /* skip any touched neighbhours */
- 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_USE_WARPER
-
- 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_USE_WARPER */
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afhints.h b/Build/source/libs/freetype2/src/autofit/afhints.h
deleted file mode 100644
index 675826835ae..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afhints.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/***************************************************************************/
-/* */
-/* afhints.h */
-/* */
-/* Auto-fitter hinting routines (specification). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
- * script 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;
-
-
- /* point hint flags */
- typedef enum AF_Flags_
- {
- AF_FLAG_NONE = 0,
-
- /* point type flags */
- AF_FLAG_CONIC = 1 << 0,
- AF_FLAG_CUBIC = 1 << 1,
- AF_FLAG_CONTROL = AF_FLAG_CONIC | AF_FLAG_CUBIC,
-
- /* point extremum flags */
- AF_FLAG_EXTREMA_X = 1 << 2,
- AF_FLAG_EXTREMA_Y = 1 << 3,
-
- /* point roundness flags */
- AF_FLAG_ROUND_X = 1 << 4,
- AF_FLAG_ROUND_Y = 1 << 5,
-
- /* point touch flags */
- AF_FLAG_TOUCH_X = 1 << 6,
- AF_FLAG_TOUCH_Y = 1 << 7,
-
- /* candidates for weak interpolation have this flag set */
- AF_FLAG_WEAK_INTERPOLATION = 1 << 8,
-
- /* all inflection points in the outline have this flag set */
- AF_FLAG_INFLECTION = 1 << 9
-
- } AF_Flags;
-
-
- /* edge hint flags */
- typedef enum AF_Edge_Flags_
- {
- AF_EDGE_NORMAL = 0,
- AF_EDGE_ROUND = 1 << 0,
- AF_EDGE_SERIF = 1 << 1,
- AF_EDGE_DONE = 1 << 2
-
- } AF_Edge_Flags;
-
-
- 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 (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 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 num_linked; /* number of linked segments */
- 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_Point* contour; /* ptr to first point of segment's contour */
-
- } AF_SegmentRec;
-
-
- typedef struct AF_EdgeRec_
- {
- FT_Short fpos; /* original, unscaled position (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;
- AF_Edge serif;
- FT_Short num_linked;
-
- FT_Int score;
-
- AF_Segment first;
- AF_Segment last;
-
- } AF_EdgeRec;
-
-
- typedef struct AF_AxisHintsRec_
- {
- FT_Int num_segments;
- FT_Int max_segments;
- AF_Segment segments;
-#ifdef AF_SORT_SEGMENTS
- FT_Int mid_segments;
-#endif
-
- FT_Int num_edges;
- FT_Int max_edges;
- AF_Edge edges;
-
- AF_Direction major_dir;
-
- } AF_AxisHintsRec, *AF_AxisHints;
-
-
- typedef struct AF_GlyphHintsRec_
- {
- FT_Memory memory;
-
- FT_Fixed x_scale;
- FT_Pos x_delta;
-
- FT_Fixed y_scale;
- FT_Pos y_delta;
-
- FT_Pos edge_distance_threshold;
-
- FT_Int max_points;
- FT_Int num_points;
- AF_Point points;
-
- FT_Int max_contours;
- FT_Int num_contours;
- AF_Point* contours;
-
- AF_AxisHintsRec axis[AF_DIMENSION_MAX];
-
- FT_UInt32 scaler_flags; /* copy of scaler flags */
- FT_UInt32 other_flags; /* free for script-specific */
- /* implementations */
- AF_ScriptMetrics metrics;
-
- FT_Pos xmin_delta; /* used for warping */
- FT_Pos xmax_delta;
-
- } 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 AF_DEBUG
-
-#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_ADVANCE( h ) \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_ADVANCE )
-
-#define AF_HINTS_DO_BLUES( h ) ( !_af_debug_disable_blue_hints )
-
-#else /* !AF_DEBUG */
-
-#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_ADVANCE( h ) \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_ADVANCE )
-
-#define AF_HINTS_DO_BLUES( h ) 1
-
-#endif /* !AF_DEBUG */
-
-
- 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_Memory memory,
- AF_Edge *edge );
-
- FT_LOCAL( void )
- af_glyph_hints_init( AF_GlyphHints hints,
- FT_Memory memory );
-
-
-
- /*
- * recompute all AF_Point in a AF_GlyphHints from the definitions
- * in a source outline
- */
- FT_LOCAL( void )
- af_glyph_hints_rescale( AF_GlyphHints hints,
- AF_ScriptMetrics metrics );
-
- FT_LOCAL( FT_Error )
- af_glyph_hints_reload( AF_GlyphHints hints,
- FT_Outline* outline,
- FT_Bool get_inflections );
-
- 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_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/Build/source/libs/freetype2/src/autofit/afindic.c b/Build/source/libs/freetype2/src/autofit/afindic.c
deleted file mode 100644
index 3d27f521b61..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afindic.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/***************************************************************************/
-/* */
-/* afindic.c */
-/* */
-/* Auto-fitter hinting routines for Indic scripts (body). */
-/* */
-/* Copyright 2007 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"
-
-
-#ifdef AF_CONFIG_OPTION_INDIC
-
-#include "afindic.h"
-#include "aferrors.h"
-#include "afcjk.h"
-
-
-#ifdef AF_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- static FT_Error
- af_indic_metrics_init( AF_LatinMetrics metrics,
- FT_Face face )
- {
- /* use CJK routines */
- return af_cjk_metrics_init( metrics, face );
- }
-
-
- static void
- af_indic_metrics_scale( AF_LatinMetrics metrics,
- AF_Scaler scaler )
- {
- /* use CJK routines */
- af_cjk_metrics_scale( metrics, scaler );
- }
-
-
- static FT_Error
- af_indic_hints_init( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- /* use CJK routines */
- return af_cjk_hints_init( hints, metrics );
- }
-
-
- static FT_Error
- af_indic_hints_apply( AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics)
- {
- /* use CJK routines */
- return af_cjk_hints_apply( hints, outline, metrics );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** I N D I C S C R I P T C L A S S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static const AF_Script_UniRangeRec af_indic_uniranges[] =
- {
-#if 0
- { 0x0100, 0xFFFF }, /* why this? */
-#endif
- { 0x0900, 0x0DFF}, /* Indic Range */
- { 0, 0 }
- };
-
-
- FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
- af_indic_script_class =
- {
- AF_SCRIPT_INDIC,
- af_indic_uniranges,
-
- sizeof( AF_LatinMetricsRec ),
-
- (AF_Script_InitMetricsFunc) af_indic_metrics_init,
- (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
- (AF_Script_DoneMetricsFunc) NULL,
-
- (AF_Script_InitHintsFunc) af_indic_hints_init,
- (AF_Script_ApplyHintsFunc) af_indic_hints_apply
- };
-
-#else /* !AF_CONFIG_OPTION_INDIC */
-
- static const AF_Script_UniRangeRec af_indic_uniranges[] =
- {
- { 0, 0 }
- };
-
-
- FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
- af_indic_script_class =
- {
- AF_SCRIPT_INDIC,
- af_indic_uniranges,
-
- sizeof( AF_LatinMetricsRec ),
-
- (AF_Script_InitMetricsFunc) NULL,
- (AF_Script_ScaleMetricsFunc)NULL,
- (AF_Script_DoneMetricsFunc) NULL,
-
- (AF_Script_InitHintsFunc) NULL,
- (AF_Script_ApplyHintsFunc) NULL
- };
-
-#endif /* !AF_CONFIG_OPTION_INDIC */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afindic.h b/Build/source/libs/freetype2/src/autofit/afindic.h
deleted file mode 100644
index b242b261443..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afindic.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* afindic.h */
-/* */
-/* Auto-fitter hinting routines for Indic scripts (specification). */
-/* */
-/* Copyright 2007 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-specific script class */
-
- FT_CALLBACK_TABLE const AF_ScriptClassRec
- af_indic_script_class;
-
-
-/* */
-
-FT_END_HEADER
-
-#endif /* __AFINDIC_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/aflatin.c b/Build/source/libs/freetype2/src/autofit/aflatin.c
deleted file mode 100644
index b70da068afa..00000000000
--- a/Build/source/libs/freetype2/src/autofit/aflatin.c
+++ /dev/null
@@ -1,2168 +0,0 @@
-/***************************************************************************/
-/* */
-/* aflatin.c */
-/* */
-/* Auto-fitter hinting routines for latin script (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "aflatin.h"
-#include "aferrors.h"
-
-
-#ifdef AF_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- af_latin_metrics_init_widths( AF_LatinMetrics metrics,
- FT_Face face,
- FT_ULong charcode )
- {
- /* 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, charcode );
- 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_ScriptMetrics)dummy );
-
- error = af_glyph_hints_reload( hints, &face->glyph->outline, 0 );
- 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;
-
- af_latin_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* const af_latin_blue_chars[AF_LATIN_MAX_BLUES] =
- {
- "THEZOCQS",
- "HEZLOCUS",
- "fijkdbh",
- "xzroesc",
- "xzroesc",
- "pqgjy"
- };
-
-
- static void
- af_latin_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_latin_blue_chars[blues]' string, then compute its top-most or */
- /* bottom-most points (depending on `AF_IS_TOP_BLUE') */
-
- AF_LOG(( "blue zones computation\n" ));
- AF_LOG(( "------------------------------------------------\n" ));
-
- for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
- {
- const char* p = af_latin_blue_chars[bb];
- const char* limit = p + AF_LATIN_MAX_TEST_CHARACTERS;
- FT_Pos* blue_ref;
- FT_Pos* blue_shoot;
-
-
- AF_LOG(( "blue %3d: ", 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 = 0;
-
-
- AF_LOG(( "'%c'", *p ));
-
- /* 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;
- }
- }
- AF_LOG(( "%5d", 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 */
- if ( best_point >= 0 )
- {
- FT_Int prev, next;
- FT_Pos dist;
-
-
- /* now look for the previous and next points that are not on the */
- /* same Y coordinate. Threshold the `closeness'... */
- prev = best_point;
- next = prev;
-
- do
- {
- if ( prev > best_first )
- prev--;
- else
- prev = best_last;
-
- dist = points[prev].y - best_y;
- if ( dist < -5 || dist > 5 )
- break;
-
- } while ( prev != best_point );
-
- do
- {
- if ( next < best_last )
- next++;
- else
- next = best_first;
-
- dist = points[next].y - best_y;
- if ( dist < -5 || dist > 5 )
- break;
-
- } while ( next != best_point );
-
- /* now, set the `round' flag depending on the segment's kind */
- round = FT_BOOL(
- FT_CURVE_TAG( glyph->outline.tags[prev] ) != FT_CURVE_TAG_ON ||
- FT_CURVE_TAG( glyph->outline.tags[next] ) != FT_CURVE_TAG_ON );
-
- AF_LOG(( "%c ", round ? 'r' : 'f' ));
- }
-
- if ( round )
- rounds[num_rounds++] = best_y;
- else
- flats[num_flats++] = best_y;
- }
-
- AF_LOG(( "\n" ));
-
- 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
- */
- AF_LOG(( "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_shoot = *blue_ref = ( shoot + ref ) / 2;
- }
-
- blue->flags = 0;
- if ( AF_LATIN_IS_TOP_BLUE( bb ) )
- blue->flags |= AF_LATIN_BLUE_TOP;
-
- /*
- * The following flags 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 ( bb == AF_LATIN_BLUE_SMALL_TOP )
- blue->flags |= AF_LATIN_BLUE_ADJUSTMENT;
-
- AF_LOG(( "-- ref = %ld, shoot = %ld\n", *blue_ref, *blue_shoot ));
- }
-
- return;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin_metrics_init( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Error error = AF_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 )
- {
- /* For now, compute the standard width and height from the `o'. */
- af_latin_metrics_init_widths( metrics, face, 'o' );
- af_latin_metrics_init_blues( metrics, face );
- }
-
- FT_Set_Charmap( face, oldmap );
- return AF_Err_Ok;
- }
-
-
- 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_MulFix( blue->shoot.org, scaler->y_scale );
- FT_Pos fitted = ( scaled + 40 ) & ~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 )
- {
- scale = FT_MulDiv( scale, fitted, scaled );
- }
- }
- }
- }
-
- 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 0.75 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;
-
- blue->flags |= AF_LATIN_BLUE_ACTIVE;
- }
- }
- }
- }
-
-
- 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;
-
- af_latin_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
- af_latin_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( FT_Error )
- af_latin_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Memory memory = hints->memory;
- FT_Error error = AF_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 last = point->prev;
- int on_edge = 0;
- FT_Pos min_pos = 32000; /* minimum segment pos != min_coord */
- FT_Pos max_pos = -32000; /* maximum segment pos != max_coord */
- FT_Bool passed;
-
-
- if ( point == last ) /* skip singletons -- just in case */
- continue;
-
- 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 )
- {
- u = point->u;
- if ( u < min_pos )
- min_pos = u;
- if ( u > max_pos )
- max_pos = u;
-
- if ( point->out_dir != segment_dir || point == last )
- {
- /* we are just leaving an edge; record a new segment! */
- segment->last = point;
- segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 );
-
- /* a segment is round if either its first or last point */
- /* is a control point */
- if ( ( segment->first->flags | point->flags ) &
- AF_FLAG_CONTROL )
- segment->flags |= AF_EDGE_ROUND;
-
- /* compute segment size */
- min_pos = max_pos = point->v;
-
- v = segment->first->v;
- if ( v < min_pos )
- min_pos = v;
- if ( v > max_pos )
- max_pos = v;
-
- segment->min_coord = (FT_Short)min_pos;
- segment->max_coord = (FT_Short)max_pos;
- segment->height = (FT_Short)( segment->max_coord -
- segment->min_coord );
-
- on_edge = 0;
- segment = NULL;
- /* fallthrough */
- }
- }
-
- /* now exit if we are at the start/end point */
- if ( point == last )
- {
- if ( passed )
- break;
- passed = 1;
- }
-
- if ( !on_edge && FT_ABS( point->out_dir ) == major_dir )
- {
- /* this is the start of a new segment! */
- segment_dir = (AF_Direction)point->out_dir;
-
- /* clear all segment fields */
- error = af_axis_hints_new_segment( axis, memory, &segment );
- if ( error )
- goto Exit;
-
- segment[0] = seg0;
- segment->dir = (FT_Char)segment_dir;
- min_pos = max_pos = point->u;
- segment->first = point;
- segment->last = point;
- segment->contour = contour;
- on_edge = 1;
- }
-
- point = point->next;
- }
-
- } /* 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;
- FT_Pos first_v = first->v;
- FT_Pos last_v = last->v;
-
-
- if ( first == last )
- continue;
-
- 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;
- }
-
-
- FT_LOCAL_DEF( void )
- af_latin_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;
- 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 );
-
- /* now compare each segment to the others */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- /* the fake segments are introduced to hint the metrics -- */
- /* we must never link them to anything */
- if ( seg1->dir != axis->major_dir || seg1->first == seg1->last )
- continue;
-
- for ( seg2 = segments; seg2 < segment_limit; seg2++ )
- if ( seg1->dir + seg2->dir == 0 && seg2->pos > seg1->pos )
- {
- FT_Pos pos1 = seg1->pos;
- FT_Pos pos2 = seg2->pos;
- FT_Pos dist = pos2 - pos1;
-
-
- if ( dist < 0 )
- dist = -dist;
-
- {
- 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;
- }
- }
- }
- }
- }
-
- /* now, compute the `serif' segments */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- seg2 = seg1->link;
-
- if ( seg2 )
- {
- if ( seg2->link != seg1 )
- {
- seg1->link = 0;
- seg1->serif = seg2->link;
- }
- }
- }
- }
-
-
- 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 = AF_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 ignore all segments that are less than 1 pixels 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;
-
- /*********************************************************************/
- /* */
- /* 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 = 0;
- 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 &&
- 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,
- 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->fpos = seg->pos;
- edge->dir = seg->dir;
- edge->opos = edge->pos = FT_MulFix( seg->pos, scale );
- 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? */
- FT_Pos ups = 0; /* number of upwards segments */
- FT_Pos downs = 0; /* number of downwards 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 segment direction */
- if ( seg->dir == up_dir )
- ups += seg->max_coord-seg->min_coord;
- else
- downs += seg->max_coord-seg->min_coord;
-
- /* 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 != NULL ) || 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 = 0;
- }
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin_hints_detect_features( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- FT_Error error;
-
-
- error = af_latin_hints_compute_segments( hints, dim );
- if ( !error )
- {
- af_latin_hints_link_segments( hints, dim );
-
- error = af_latin_hints_compute_edges( hints, dim );
- }
- return error;
- }
-
-
- FT_LOCAL_DEF( 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_Int bb;
- AF_Width best_blue = NULL;
- FT_Pos best_dist; /* initial threshold */
-
-
- /* compute the initial threshold as a fraction of the EM size */
- best_dist = FT_MulFix( metrics->units_per_em / 40, scale );
-
- if ( best_dist > 64 / 2 )
- best_dist = 64 / 2;
-
- 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;
-
-
- /* 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;
- }
-
- /* 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;
- }
- }
- }
- }
- }
-
- if ( best_blue )
- edge->blue_edge = best_blue;
- }
- }
-
-
- 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_ScriptMetrics)metrics );
-
- /*
- * correct x_scale and y_scale if needed, since they may have
- * been modified `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_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 only if we don't use the `light' mode.
- */
- if ( mode != FT_RENDER_MODE_LIGHT )
- other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
-
- if ( mode == FT_RENDER_MODE_MONO )
- other_flags |= AF_LATIN_HINTS_MONO;
-
- /*
- * In `light' hinting mode we disable horizontal hinting completely.
- * We also do it if the face is italic.
- */
- if ( mode == FT_RENDER_MODE_LIGHT ||
- (face->style_flags & FT_STYLE_FLAG_ITALIC) != 0 )
- scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
-
- 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_latin_snap_width( AF_Width widths,
- FT_Int count,
- FT_Pos width )
- {
- int 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_latin_compute_stem_width( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Pos width,
- AF_Edge_Flags base_flags,
- AF_Edge_Flags 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 */
- 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_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_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_latin_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_latin_compute_stem_width(
- hints, dim, dist,
- (AF_Edge_Flags)base_edge->flags,
- (AF_Edge_Flags)stem_edge->flags );
-
-
- stem_edge->pos = base_edge->pos + fitted_width;
-
- AF_LOG(( "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_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 ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( 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_Int n_edges;
- AF_Edge edge;
- AF_Edge anchor = 0;
- FT_Int has_serifs = 0;
-
-
- /* 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;
-
- AF_LOG(( "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_latin_align_linked_edge( hints, dim, edge1, edge2 );
- edge2->flags |= AF_EDGE_DONE;
- }
-
- if ( !anchor )
- anchor = edge;
- }
- }
-
- /* 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 )
- {
- AF_LOG(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
-
- af_latin_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_latin_compute_stem_width(
- hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_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 );
-
- AF_LOG(( "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_latin_align_linked_edge( hints, dim, edge, edge2 );
- }
- 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,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
-
- if ( edge2->flags & AF_EDGE_DONE )
- 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 = 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;
-
- AF_LOG(( "STEM: %d (opos=%.2f) 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,
- (AF_Edge_Flags)edge->flags,
- (AF_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;
-
- AF_LOG(( "STEM: %d (opos=%.2f) 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 ));
- }
-
- edge->flags |= AF_EDGE_DONE;
- edge2->flags |= AF_EDGE_DONE;
-
- if ( edge > edges && edge->pos < edge[-1].pos )
- {
- AF_LOG(( "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. */
-
- 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 );
- AF_LOG(( "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 )
- {
- AF_LOG(( "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 )
- {
- edge->pos = before->pos +
- FT_MulDiv( edge->opos - before->opos,
- after->pos - before->pos,
- after->opos - before->opos );
- AF_LOG(( "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 );
- AF_LOG(( "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_latin_hints_apply( AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics )
- {
- FT_Error error;
- int dim;
-
-
- error = af_glyph_hints_reload( hints, outline, 1 );
- if ( error )
- goto Exit;
-
- /* analyze glyph outline */
-#ifdef AF_USE_WARPER
- if ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
-#else
- if ( AF_HINTS_DO_HORIZONTAL( hints ) )
-#endif
- {
- error = af_latin_hints_detect_features( hints, AF_DIMENSION_HORZ );
- if ( error )
- goto Exit;
- }
-
- if ( AF_HINTS_DO_VERTICAL( hints ) )
- {
- error = af_latin_hints_detect_features( hints, AF_DIMENSION_VERT );
- if ( error )
- goto Exit;
-
- af_latin_hints_compute_blue_edges( hints, metrics );
- }
-
- /* grid-fit the outline */
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
-#ifdef AF_USE_WARPER
- if ( ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ) )
- {
- 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
-
- 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 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* XXX: this should probably fine tuned to differentiate better between */
- /* scripts... */
-
- static const AF_Script_UniRangeRec af_latin_uniranges[] =
- {
- { 0x0020, 0x007F }, /* Basic Latin (no control characters) */
- { 0x00A0, 0x00FF }, /* Latin-1 Supplement (no control characters) */
- { 0x0100, 0x017F }, /* Latin Extended-A */
- { 0x0180, 0x024F }, /* Latin Extended-B */
- { 0x0250, 0x02AF }, /* IPA Extensions */
- { 0x02B0, 0x02FF }, /* Spacing Modifier Letters */
- { 0x0300, 0x036F }, /* Combining Diacritical Marks */
- { 0x0370, 0x03FF }, /* Greek and Coptic */
- { 0x0400, 0x04FF }, /* Cyrillic */
- { 0x0500, 0x052F }, /* Cyrillic Supplement */
- { 0x1D00, 0x1D7F }, /* Phonetic Extensions */
- { 0x1D80, 0x1DBF }, /* Phonetic Extensions Supplement */
- { 0x1DC0, 0x1DFF }, /* Combining Diacritical Marks Supplement */
- { 0x1E00, 0x1EFF }, /* Latin Extended Additional */
- { 0x1F00, 0x1FFF }, /* Greek Extended */
- { 0x2000, 0x206F }, /* General Punctuation */
- { 0x2070, 0x209F }, /* Superscripts and Subscripts */
- { 0x20A0, 0x20CF }, /* Currency Symbols */
- { 0x2150, 0x218F }, /* Number Forms */
- { 0x2460, 0x24FF }, /* Enclosed Alphanumerics */
- { 0 , 0 }
- };
-
-
- FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
- af_latin_script_class =
- {
- AF_SCRIPT_LATIN,
- af_latin_uniranges,
-
- sizeof( AF_LatinMetricsRec ),
-
- (AF_Script_InitMetricsFunc) af_latin_metrics_init,
- (AF_Script_ScaleMetricsFunc)af_latin_metrics_scale,
- (AF_Script_DoneMetricsFunc) NULL,
-
- (AF_Script_InitHintsFunc) af_latin_hints_init,
- (AF_Script_ApplyHintsFunc) af_latin_hints_apply
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/aflatin.h b/Build/source/libs/freetype2/src/autofit/aflatin.h
deleted file mode 100644
index 3251d3783f3..00000000000
--- a/Build/source/libs/freetype2/src/autofit/aflatin.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/***************************************************************************/
-/* */
-/* aflatin.h */
-/* */
-/* Auto-fitter hinting routines for latin script (specification). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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-specific script class */
-
- FT_CALLBACK_TABLE const AF_ScriptClassRec
- af_latin_script_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 script hinters to
- * re-use some of them.
- */
-
-
- /* Latin (global) metrics management */
-
- enum
- {
- AF_LATIN_BLUE_CAPITAL_TOP,
- AF_LATIN_BLUE_CAPITAL_BOTTOM,
- AF_LATIN_BLUE_SMALL_F_TOP,
- AF_LATIN_BLUE_SMALL_TOP,
- AF_LATIN_BLUE_SMALL_BOTTOM,
- AF_LATIN_BLUE_SMALL_MINOR,
-
- AF_LATIN_BLUE_MAX
- };
-
-
-#define AF_LATIN_IS_TOP_BLUE( b ) ( (b) == AF_LATIN_BLUE_CAPITAL_TOP || \
- (b) == AF_LATIN_BLUE_SMALL_F_TOP || \
- (b) == AF_LATIN_BLUE_SMALL_TOP )
-
-#define AF_LATIN_MAX_WIDTHS 16
-#define AF_LATIN_MAX_BLUES AF_LATIN_BLUE_MAX
-
-
- enum
- {
- AF_LATIN_BLUE_ACTIVE = 1 << 0,
- AF_LATIN_BLUE_TOP = 1 << 1,
- AF_LATIN_BLUE_ADJUSTMENT = 1 << 2, /* used for scale adjustment */
- /* optimization */
- AF_LATIN_BLUE_FLAG_MAX
- };
-
-
- typedef struct AF_LatinBlueRec_
- {
- AF_WidthRec ref;
- AF_WidthRec shoot;
- FT_UInt flags;
-
- } AF_LatinBlueRec, *AF_LatinBlue;
-
-
- typedef struct AF_LatinAxisRec_
- {
- FT_Fixed scale;
- FT_Pos delta;
-
- FT_UInt width_count;
- AF_WidthRec widths[AF_LATIN_MAX_WIDTHS];
- FT_Pos edge_distance_threshold;
- FT_Pos standard_width;
- FT_Bool extra_light;
-
- /* ignored for horizontal metrics */
- FT_Bool control_overshoot;
- FT_UInt blue_count;
- AF_LatinBlueRec blues[AF_LATIN_BLUE_MAX];
-
- FT_Fixed org_scale;
- FT_Pos org_delta;
-
- } AF_LatinAxisRec, *AF_LatinAxis;
-
-
- typedef struct AF_LatinMetricsRec_
- {
- AF_ScriptMetricsRec 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_ULong charcode );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- enum
- {
- AF_LATIN_HINTS_HORZ_SNAP = 1 << 0, /* enable stem width snapping */
- AF_LATIN_HINTS_VERT_SNAP = 1 << 1, /* enable stem height snapping */
- AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height */
- /* adjustment */
- AF_LATIN_HINTS_MONO = 1 << 3 /* indicate 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 )
-
-
- /*
- * This shouldn't normally be exported. However, other scripts might
- * like to use this function as-is.
- */
- FT_LOCAL( FT_Error )
- af_latin_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim );
-
- /*
- * This shouldn't normally be exported. However, other scripts might
- * want to use this function as-is.
- */
- FT_LOCAL( void )
- af_latin_hints_link_segments( AF_GlyphHints hints,
- AF_Dimension dim );
-
- /*
- * This shouldn't normally be exported. However, other scripts might
- * want to use this function as-is.
- */
- 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,
- AF_Dimension dim );
-
-/* */
-
-FT_END_HEADER
-
-#endif /* __AFLATIN_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/aflatin2.c b/Build/source/libs/freetype2/src/autofit/aflatin2.c
deleted file mode 100644
index 0b4177414c1..00000000000
--- a/Build/source/libs/freetype2/src/autofit/aflatin2.c
+++ /dev/null
@@ -1,2286 +0,0 @@
-/***************************************************************************/
-/* */
-/* aflatin.c */
-/* */
-/* Auto-fitter hinting routines for latin script (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "aflatin.h"
-#include "aflatin2.h"
-#include "aferrors.h"
-
-
-#ifdef AF_USE_WARPER
-#include "afwarp.h"
-#endif
-
- 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,
- FT_ULong charcode )
- {
- /* 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, charcode );
- 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_ScriptMetrics)dummy );
-
- error = af_glyph_hints_reload( hints, &face->glyph->outline, 0 );
- 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* const af_latin2_blue_chars[AF_LATIN_MAX_BLUES] =
- {
- "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') */
-
- AF_LOG(( "blue zones computation\n" ));
- AF_LOG(( "------------------------------------------------\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;
-
-
- AF_LOG(( "blue %3d: ", 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;
-
-
- AF_LOG(( "'%c'", *p ));
-
- /* 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;
- }
- }
- AF_LOG(( "%5d", 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_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 = points[prev].y - best_y;
- if ( dist < -5 || dist > 5 )
- break;
-
- start = prev;
-
- } while ( start != best_point );
-
- do
- {
- next = end+1;
- if ( next > best_last )
- next = best_first;
-
- dist = points[next].y - best_y;
- if ( dist < -5 || dist > 5 )
- 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 );
-
- AF_LOG(( "%c ", round ? 'r' : 'f' ));
- }
-
- if ( round )
- rounds[num_rounds++] = best_y;
- else
- flats[num_flats++] = best_y;
- }
-
- AF_LOG(( "\n" ));
-
- 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
- */
- AF_LOG(( "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_shoot = *blue_ref = ( shoot + ref ) / 2;
- }
-
- blue->flags = 0;
- if ( AF_LATIN_IS_TOP_BLUE( bb ) )
- blue->flags |= AF_LATIN_BLUE_TOP;
-
- /*
- * The following flags 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 ( bb == AF_LATIN_BLUE_SMALL_TOP )
- blue->flags |= AF_LATIN_BLUE_ADJUSTMENT;
-
- AF_LOG(( "-- ref = %ld, shoot = %ld\n", *blue_ref, *blue_shoot ));
- }
-
- return;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_metrics_init( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Error error = AF_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 )
- {
- /* For now, compute the standard width and height from the `o'. */
- af_latin2_metrics_init_widths( metrics, face, 'o' );
- af_latin2_metrics_init_blues( metrics, face );
- }
-
- FT_Set_Charmap( face, oldmap );
- return AF_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_MulFix( blue->shoot.org, scaler->y_scale );
- FT_Pos fitted = ( scaled + 40 ) & ~63;
-
-#if 1
- if ( scaled != fitted ) {
- scale = FT_MulDiv( scale, fitted, scaled );
- AF_LOG(( "== 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 0.75 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;
-
- AF_LOG(( ">> 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;
-
- af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
- af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 = AF_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->contour = contour;
- 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;
- AF_Flags f0 = (AF_Flags)(pt->flags & AF_FLAG_CONTROL);
- AF_Flags f1;
-
-
- segment->flags &= ~AF_EDGE_ROUND;
-
- for ( ; pt != last; f0 = f1 )
- {
- pt = pt->next;
- f1 = (AF_Flags)(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 == last )
- continue;
-
- 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 || seg1->first == seg1->last )
- continue;
-
- for ( seg2 = segment_mid; seg2 < segment_limit; seg2++ )
-#else
- /* now compare each segment to the others */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- /* the fake segments are introduced to hint the metrics -- */
- /* we must never link them to anything */
- if ( seg1->dir != axis->major_dir || seg1->first == seg1->last )
- 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;
- }
- }
- }
- }
- }
-
- /* now, compute the `serif' segments */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- seg2 = seg1->link;
-
- if ( seg2 )
- {
- if ( seg2->link != seg1 )
- {
- seg1->link = 0;
- 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 = AF_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 = 0;
- 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, 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->fpos = seg->pos;
- edge->dir = seg->dir;
- edge->opos = edge->pos = FT_MulFix( seg->pos, scale );
- 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? */
- FT_Pos ups = 0; /* number of upwards segments */
- FT_Pos downs = 0; /* number of downwards 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 segment direction */
- if ( seg->dir == up_dir )
- ups += seg->max_coord-seg->min_coord;
- else
- downs += seg->max_coord-seg->min_coord;
-
- /* 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 != NULL ) || 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 = 0;
- }
- }
-
- 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;
- }
-
-
- FT_LOCAL_DEF( 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_ScriptMetrics)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_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 only if we don't use the `light' mode.
- */
- if ( mode != FT_RENDER_MODE_LIGHT )
- other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
-
- if ( mode == FT_RENDER_MODE_MONO )
- other_flags |= AF_LATIN_HINTS_MONO;
-
- /*
- * In `light' hinting mode we disable horizontal hinting completely.
- * We also do it if the face is italic.
- */
- if ( mode == FT_RENDER_MODE_LIGHT ||
- (face->style_flags & FT_STYLE_FLAG_ITALIC) != 0 )
- scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
-
- 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_Int count,
- FT_Pos width )
- {
- int 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,
- AF_Edge_Flags base_flags,
- AF_Edge_Flags 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,
- (AF_Edge_Flags)base_edge->flags,
- (AF_Edge_Flags)stem_edge->flags );
-
-
- stem_edge->pos = base_edge->pos + fitted_width;
-
- AF_LOG(( "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 ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( 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;
- FT_Int n_edges;
- AF_Edge edge;
- AF_Edge anchor = 0;
- FT_Int has_serifs = 0;
- FT_Pos anchor_drift = 0;
-
-
-
- AF_LOG(( "==== 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;
-
- AF_LOG(( "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 )
- {
- AF_LOG(( "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,
- (AF_Edge_Flags)edge->flags,
- (AF_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 );
-
- AF_LOG(( "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;
-
- AF_LOG(( "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,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
-
- org_left = org_pos + ((org_len - cur_len) >> 1);
- org_right = org_pos + ((org_len + cur_len) >> 1);
-
- AF_LOG(( "ALIGN: left=%.2f right=%.2f ", org_left/64.0, org_right/64.0 ));
- cur_center = org_center;
-
- if ( edge2->flags & AF_EDGE_DONE )
- {
- AF_LOG(( "\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 )
- {
- AF_LOG(( "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) )
- {
- AF_LOG(( "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;
- AF_LOG(( "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;
- AF_LOG(( "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;
- AF_LOG(( "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;
- AF_LOG(( "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;
- }
- AF_LOG(( "\n" ));
- }
-
- AlignStem:
- edge->pos = cur_center - (cur_len >> 1);
- edge2->pos = edge->pos + cur_len;
-
- AF_LOG(( "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 )
- {
- AF_LOG(( "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
- 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 );
- AF_LOG(( "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 )
- {
- AF_LOG(( "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 )
- {
- edge->pos = before->pos +
- FT_MulDiv( edge->opos - before->opos,
- after->pos - before->pos,
- after->opos - before->opos );
- AF_LOG(( "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);
-
- AF_LOG(( "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( AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics )
- {
- FT_Error error;
- int dim;
-
-
- error = af_glyph_hints_reload( hints, outline, 1 );
- if ( error )
- goto Exit;
-
- /* analyze glyph outline */
-#ifdef AF_USE_WARPER
- if ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
-#else
- if ( AF_HINTS_DO_HORIZONTAL( hints ) )
-#endif
- {
- 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_USE_WARPER
- if ( ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ) )
- {
- 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
-
- 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 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static const AF_Script_UniRangeRec af_latin2_uniranges[] =
- {
- { 32, 127 }, /* XXX: TODO: Add new Unicode ranges here! */
- { 160, 255 },
- { 0, 0 }
- };
-
-
- FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec
- af_latin2_script_class =
- {
- AF_SCRIPT_LATIN2,
- af_latin2_uniranges,
-
- sizeof( AF_LatinMetricsRec ),
-
- (AF_Script_InitMetricsFunc) af_latin2_metrics_init,
- (AF_Script_ScaleMetricsFunc)af_latin2_metrics_scale,
- (AF_Script_DoneMetricsFunc) NULL,
-
- (AF_Script_InitHintsFunc) af_latin2_hints_init,
- (AF_Script_ApplyHintsFunc) af_latin2_hints_apply
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/aflatin2.h b/Build/source/libs/freetype2/src/autofit/aflatin2.h
deleted file mode 100644
index 34eda058229..00000000000
--- a/Build/source/libs/freetype2/src/autofit/aflatin2.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* aflatin2.h */
-/* */
-/* Auto-fitter hinting routines for latin script (specification). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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-specific script class */
-
- FT_CALLBACK_TABLE const AF_ScriptClassRec
- af_latin2_script_class;
-
-/* */
-
-FT_END_HEADER
-
-#endif /* __AFLATIN_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afloader.c b/Build/source/libs/freetype2/src/autofit/afloader.c
deleted file mode 100644
index 4e48c2fe975..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afloader.c
+++ /dev/null
@@ -1,535 +0,0 @@
-/***************************************************************************/
-/* */
-/* afloader.c */
-/* */
-/* Auto-fitter glyph loading routines (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "afloader.h"
-#include "afhints.h"
-#include "afglobal.h"
-#include "aflatin.h"
-#include "aferrors.h"
-
-
- FT_LOCAL_DEF( FT_Error )
- af_loader_init( AF_Loader loader,
- FT_Memory memory )
- {
- FT_ZERO( loader );
-
- af_glyph_hints_init( &loader->hints, memory );
-#ifdef AF_DEBUG
- _af_debug_hints = &loader->hints;
-#endif
- return FT_GlyphLoader_New( memory, &loader->gloader );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_loader_reset( AF_Loader loader,
- FT_Face face )
- {
- FT_Error error = AF_Err_Ok;
-
-
- loader->face = face;
- loader->globals = (AF_FaceGlobals)face->autohint.data;
-
- FT_GlyphLoader_Rewind( loader->gloader );
-
- if ( loader->globals == NULL )
- {
- error = af_face_globals_new( face, &loader->globals );
- if ( !error )
- {
- face->autohint.data =
- (FT_Pointer)loader->globals;
- face->autohint.finalizer =
- (FT_Generic_Finalizer)af_face_globals_free;
- }
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- af_loader_done( AF_Loader loader )
- {
- af_glyph_hints_done( &loader->hints );
-
- loader->face = NULL;
- loader->globals = NULL;
-
-#ifdef AF_DEBUG
- _af_debug_hints = NULL;
-#endif
- FT_GlyphLoader_Done( loader->gloader );
- loader->gloader = NULL;
- }
-
-
- static FT_Error
- af_loader_load_g( AF_Loader loader,
- AF_Scaler scaler,
- FT_UInt glyph_index,
- FT_Int32 load_flags,
- FT_UInt depth )
- {
- FT_Error error;
- FT_Face face = loader->face;
- FT_GlyphLoader gloader = loader->gloader;
- AF_ScriptMetrics metrics = loader->metrics;
- AF_GlyphHints hints = &loader->hints;
- FT_GlyphSlot slot = face->glyph;
- FT_Slot_Internal internal = slot->internal;
-
-
- error = FT_Load_Glyph( face, glyph_index, load_flags );
- if ( error )
- goto Exit;
-
- loader->transformed = internal->glyph_transformed;
- if ( loader->transformed )
- {
- FT_Matrix inverse;
-
-
- loader->trans_matrix = internal->glyph_matrix;
- loader->trans_delta = internal->glyph_delta;
-
- inverse = loader->trans_matrix;
- FT_Matrix_Invert( &inverse );
- FT_Vector_Transform( &loader->trans_delta, &inverse );
- }
-
- /* set linear metrics */
- slot->linearHoriAdvance = slot->metrics.horiAdvance;
- slot->linearVertAdvance = slot->metrics.vertAdvance;
-
- 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 );
-
- /* copy the outline points in the loader's current */
- /* extra points which is used to keep original glyph coordinates */
- error = FT_GLYPHLOADER_CHECK_POINTS( gloader,
- slot->outline.n_points + 4,
- slot->outline.n_contours );
- if ( error )
- goto Exit;
-
- FT_ARRAY_COPY( gloader->current.outline.points,
- slot->outline.points,
- slot->outline.n_points );
-
- FT_ARRAY_COPY( gloader->current.outline.contours,
- slot->outline.contours,
- slot->outline.n_contours );
-
- FT_ARRAY_COPY( gloader->current.outline.tags,
- slot->outline.tags,
- slot->outline.n_points );
-
- gloader->current.outline.n_points = slot->outline.n_points;
- gloader->current.outline.n_contours = slot->outline.n_contours;
-
- /* 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 ( metrics->clazz->script_hints_apply )
- metrics->clazz->script_hints_apply( hints,
- &gloader->current.outline,
- metrics );
-
- /* we now need to hint 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;
- old_lsb = edge1->opos;
- 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 );
- loader->pp2.x = FT_PIX_ROUND( pp2x );
-
- slot->lsb_delta = loader->pp1.x - pp1x;
- slot->rsb_delta = loader->pp2.x - pp2x;
- }
- }
- 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;
- }
-
- /* good, we simply add the glyph to our loader's base */
- FT_GlyphLoader_Add( gloader );
- break;
-
- case FT_GLYPH_FORMAT_COMPOSITE:
- {
- FT_UInt nn, num_subglyphs = slot->num_subglyphs;
- FT_UInt num_base_subgs, start_point;
- FT_SubGlyph subglyph;
-
-
- start_point = gloader->base.outline.n_points;
-
- /* first of all, copy the subglyph descriptors in the glyph loader */
- error = FT_GlyphLoader_CheckSubGlyphs( gloader, num_subglyphs );
- if ( error )
- goto Exit;
-
- FT_ARRAY_COPY( gloader->current.subglyphs,
- slot->subglyphs,
- num_subglyphs );
-
- gloader->current.num_subglyphs = num_subglyphs;
- num_base_subgs = gloader->base.num_subglyphs;
-
- /* now, read each subglyph independently */
- for ( nn = 0; nn < num_subglyphs; nn++ )
- {
- FT_Vector pp1, pp2;
- FT_Pos x, y;
- FT_UInt num_points, num_new_points, num_base_points;
-
-
- /* gloader.current.subglyphs can change during glyph loading due */
- /* to re-allocation -- we must recompute the current subglyph on */
- /* each iteration */
- subglyph = gloader->base.subglyphs + num_base_subgs + nn;
-
- pp1 = loader->pp1;
- pp2 = loader->pp2;
-
- num_base_points = gloader->base.outline.n_points;
-
- error = af_loader_load_g( loader, scaler, subglyph->index,
- load_flags, depth + 1 );
- if ( error )
- goto Exit;
-
- /* recompute subglyph pointer */
- subglyph = gloader->base.subglyphs + num_base_subgs + nn;
-
- if ( subglyph->flags & FT_SUBGLYPH_FLAG_USE_MY_METRICS )
- {
- pp1 = loader->pp1;
- pp2 = loader->pp2;
- }
- else
- {
- loader->pp1 = pp1;
- loader->pp2 = pp2;
- }
-
- num_points = gloader->base.outline.n_points;
- num_new_points = num_points - num_base_points;
-
- /* now perform the transform required for this subglyph */
-
- if ( subglyph->flags & ( FT_SUBGLYPH_FLAG_SCALE |
- FT_SUBGLYPH_FLAG_XY_SCALE |
- FT_SUBGLYPH_FLAG_2X2 ) )
- {
- FT_Vector* cur = gloader->base.outline.points +
- num_base_points;
- FT_Vector* limit = cur + num_new_points;
-
-
- for ( ; cur < limit; cur++ )
- FT_Vector_Transform( cur, &subglyph->transform );
- }
-
- /* apply offset */
-
- if ( !( subglyph->flags & FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES ) )
- {
- FT_Int k = subglyph->arg1;
- FT_UInt l = subglyph->arg2;
- FT_Vector* p1;
- FT_Vector* p2;
-
-
- if ( start_point + k >= num_base_points ||
- l >= (FT_UInt)num_new_points )
- {
- error = AF_Err_Invalid_Composite;
- goto Exit;
- }
-
- l += num_base_points;
-
- /* for now, only use the current point coordinates; */
- /* we may consider another approach in the near future */
- p1 = gloader->base.outline.points + start_point + k;
- p2 = gloader->base.outline.points + start_point + l;
-
- x = p1->x - p2->x;
- y = p1->y - p2->y;
- }
- else
- {
- x = FT_MulFix( subglyph->arg1, hints->x_scale ) + hints->x_delta;
- y = FT_MulFix( subglyph->arg2, hints->y_scale ) + hints->y_delta;
-
- x = FT_PIX_ROUND( x );
- y = FT_PIX_ROUND( y );
- }
-
- {
- FT_Outline dummy = gloader->base.outline;
-
-
- dummy.points += num_base_points;
- dummy.n_points = (short)num_new_points;
-
- FT_Outline_Translate( &dummy, x, y );
- }
- }
- }
- break;
-
- default:
- /* we don't support other formats (yet?) */
- error = AF_Err_Unimplemented_Feature;
- }
-
- Hint_Metrics:
- if ( depth == 0 )
- {
- 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, metrics->scaler.x_scale );
- vvector.y = FT_MulFix( vvector.y, 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 );
- }
-#if 1
- /* 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 );
-#endif
- 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 */
-#if 0
- if ( !FT_IS_FIXED_WIDTH( slot->face ) )
- slot->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
- else
- slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
- x_scale );
-#else
- if ( !FT_IS_FIXED_WIDTH( slot->face ) )
- {
- /* non-spacing glyphs must stay as-is */
- if ( slot->metrics.horiAdvance )
- slot->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
- }
- else
- {
- slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
- 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;
- }
-#endif
-
- slot->metrics.vertAdvance = FT_MulFix( slot->metrics.vertAdvance,
- metrics->scaler.y_scale );
-
- slot->metrics.horiAdvance = FT_PIX_ROUND( slot->metrics.horiAdvance );
- slot->metrics.vertAdvance = FT_PIX_ROUND( slot->metrics.vertAdvance );
-
- /* now copy outline into glyph slot */
- FT_GlyphLoader_Rewind( internal->loader );
- error = FT_GlyphLoader_CopyPoints( internal->loader, gloader );
- if ( error )
- goto Exit;
-
- slot->outline = internal->loader->base.outline;
- slot->format = FT_GLYPH_FORMAT_OUTLINE;
- }
-
-#ifdef DEBUG_HINTER
- af_debug_hinter = hinter;
-#endif
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_loader_load_glyph( AF_Loader loader,
- FT_Face face,
- FT_UInt gindex,
- FT_UInt32 load_flags )
- {
- FT_Error error;
- FT_Size size = face->size;
- AF_ScalerRec scaler;
-
-
- if ( !size )
- return AF_Err_Invalid_Argument;
-
- FT_ZERO( &scaler );
-
- scaler.face = face;
- scaler.x_scale = size->metrics.x_scale;
- scaler.x_delta = 0; /* XXX: TODO: add support for sub-pixel hinting */
- scaler.y_scale = size->metrics.y_scale;
- scaler.y_delta = 0; /* XXX: TODO: add support for sub-pixel hinting */
-
- scaler.render_mode = FT_LOAD_TARGET_MODE( load_flags );
- scaler.flags = 0; /* XXX: fix this */
-
- error = af_loader_reset( loader, face );
- if ( !error )
- {
- AF_ScriptMetrics metrics;
- FT_UInt options = 0;
-
-
-#ifdef FT_OPTION_AUTOFIT2
- /* XXX: undocumented hook to activate the latin2 hinter */
- if ( load_flags & ( 1UL << 20 ) )
- options = 2;
-#endif
-
- error = af_face_globals_get_metrics( loader->globals, gindex,
- options, &metrics );
- if ( !error )
- {
- loader->metrics = metrics;
-
- if ( metrics->clazz->script_metrics_scale )
- metrics->clazz->script_metrics_scale( metrics, &scaler );
- else
- metrics->scaler = scaler;
-
- load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_TRANSFORM;
- load_flags &= ~FT_LOAD_RENDER;
-
- if ( metrics->clazz->script_hints_init )
- {
- error = metrics->clazz->script_hints_init( &loader->hints,
- metrics );
- if ( error )
- goto Exit;
- }
-
- error = af_loader_load_g( loader, &scaler, gindex, load_flags, 0 );
- }
- }
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afloader.h b/Build/source/libs/freetype2/src/autofit/afloader.h
deleted file mode 100644
index fa67c10ffec..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afloader.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/***************************************************************************/
-/* */
-/* afloader.h */
-/* */
-/* Auto-fitter glyph loading routines (specification). */
-/* */
-/* Copyright 2003, 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 __AF_LOADER_H__
-#define __AF_LOADER_H__
-
-#include "afhints.h"
-#include "afglobal.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct AF_LoaderRec_
- {
- FT_Face face; /* current face */
- AF_FaceGlobals globals; /* current face globals */
- FT_GlyphLoader gloader; /* glyph loader */
- AF_GlyphHintsRec hints;
- AF_ScriptMetrics 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( FT_Error )
- af_loader_init( AF_Loader loader,
- FT_Memory memory );
-
-
- FT_LOCAL( FT_Error )
- af_loader_reset( AF_Loader loader,
- FT_Face face );
-
-
- FT_LOCAL( void )
- af_loader_done( AF_Loader loader );
-
-
- FT_LOCAL( FT_Error )
- af_loader_load_glyph( AF_Loader loader,
- FT_Face face,
- FT_UInt gindex,
- FT_UInt32 load_flags );
-
-/* */
-
-
-FT_END_HEADER
-
-#endif /* __AF_LOADER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afmodule.c b/Build/source/libs/freetype2/src/autofit/afmodule.c
deleted file mode 100644
index cd5e1cc218b..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afmodule.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmodule.c */
-/* */
-/* Auto-fitter module implementation (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "afmodule.h"
-#include "afloader.h"
-
-#ifdef AF_DEBUG
- int _af_debug;
- int _af_debug_disable_horz_hints;
- int _af_debug_disable_vert_hints;
- int _af_debug_disable_blue_hints;
- void* _af_debug_hints;
-#endif
-
-#include FT_INTERNAL_OBJECTS_H
-
-
- typedef struct FT_AutofitterRec_
- {
- FT_ModuleRec root;
- AF_LoaderRec loader[1];
-
- } FT_AutofitterRec, *FT_Autofitter;
-
-
- FT_CALLBACK_DEF( FT_Error )
- af_autofitter_init( FT_Autofitter module )
- {
- return af_loader_init( module->loader, module->root.library->memory );
- }
-
-
- FT_CALLBACK_DEF( void )
- af_autofitter_done( FT_Autofitter module )
- {
- af_loader_done( module->loader );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- af_autofitter_load_glyph( FT_Autofitter module,
- FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_UNUSED( size );
-
- return af_loader_load_glyph( module->loader, slot->face,
- glyph_index, load_flags );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_AutoHinter_ServiceRec af_autofitter_service =
- {
- NULL,
- NULL,
- NULL,
- (FT_AutoHinter_GlyphLoadFunc)af_autofitter_load_glyph
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class autofit_module_class =
- {
- FT_MODULE_HINTER,
- sizeof ( FT_AutofitterRec ),
-
- "autofitter",
- 0x10000L, /* version 1.0 of the autofitter */
- 0x20000L, /* requires FreeType 2.0 or above */
-
- (const void*)&af_autofitter_service,
-
- (FT_Module_Constructor)af_autofitter_init,
- (FT_Module_Destructor) af_autofitter_done,
- (FT_Module_Requester) NULL
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afmodule.h b/Build/source/libs/freetype2/src/autofit/afmodule.h
deleted file mode 100644
index 36268a0890a..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afmodule.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmodule.h */
-/* */
-/* Auto-fitter module implementation (specification). */
-/* */
-/* Copyright 2003, 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_MODULE_H
-
-
-FT_BEGIN_HEADER
-
- FT_CALLBACK_TABLE
- const FT_Module_Class autofit_module_class;
-
-
-FT_END_HEADER
-
-#endif /* __AFMODULE_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/aftypes.h b/Build/source/libs/freetype2/src/autofit/aftypes.h
deleted file mode 100644
index 56811f0e42f..00000000000
--- a/Build/source/libs/freetype2/src/autofit/aftypes.h
+++ /dev/null
@@ -1,349 +0,0 @@
-/***************************************************************************/
-/* */
-/* aftypes.h */
-/* */
-/* Auto-fitter types (specification only). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
- * scripts in order to apply language-specific rules.
- *
- * The code has also been compartmentized into several entities that
- * should make algorithmic experimentation easier than with the old
- * code.
- *
- * Finally, we get rid of the Catharon license, since this code is
- * released under the FreeType one.
- *
- *************************************************************************/
-
-
-#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
-
-
-FT_BEGIN_HEADER
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** D E B U G G I N G *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define xxAF_USE_WARPER /* only define to use warp hinting */
-#define xxAF_DEBUG
-
-#ifdef AF_DEBUG
-
-#include <stdio.h>
-#define AF_LOG( x ) do { if ( _af_debug ) printf x; } while ( 0 )
-
-extern int _af_debug;
-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;
-
-#else /* !AF_DEBUG */
-
-#define AF_LOG( x ) do ; while ( 0 ) /* nothing */
-
-#endif /* !AF_DEBUG */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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_widths( FT_UInt count,
- AF_Width widths );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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); \
- \
- \
- _delta %= AF_ANGLE_2PI; \
- if ( _delta < 0 ) \
- _delta += AF_ANGLE_2PI; \
- \
- if ( _delta > AF_ANGLE_PI ) \
- _delta -= AF_ANGLE_2PI; \
- \
- result = _delta; \
- FT_END_STMNT
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** O U T L I N E S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* opaque handle to glyph-specific hints -- see `afhints.h' for more
- * details
- */
- typedef struct AF_GlyphHintsRec_* AF_GlyphHints;
-
- /* This structure is used to model an input glyph outline to
- * the auto-hinter. The latter will set the `hints' field
- * depending on the glyph's script.
- */
- typedef struct AF_OutlineRec_
- {
- FT_Face face;
- FT_Outline outline;
- FT_UInt outline_resolution;
-
- FT_Int advance;
- FT_UInt metrics_resolution;
-
- AF_GlyphHints hints;
-
- } AF_OutlineRec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S C A L E R S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * A scaler models the target pixel device that will receive the
- * auto-hinted glyph image.
- */
-
- typedef enum AF_ScalerFlags_
- {
- AF_SCALER_FLAG_NO_HORIZONTAL = 1, /* disable horizontal hinting */
- AF_SCALER_FLAG_NO_VERTICAL = 2, /* disable vertical hinting */
- AF_SCALER_FLAG_NO_ADVANCE = 4 /* disable advance hinting */
-
- } AF_ScalerFlags;
-
-
- 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 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** S C R I P T S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*
- * The list of know scripts. Each different script corresponds to the
- * following information:
- *
- * - A set of Unicode ranges to test whether the face supports the
- * script.
- *
- * - A specific global analyzer that will compute global metrics
- * specific to the script.
- *
- * - A specific glyph analyzer that will compute segments and
- * edges for each glyph covered by the script.
- *
- * - A specific grid-fitting algorithm that will distort the
- * scaled glyph outline according to the results of the glyph
- * analyzer.
- *
- * Note that a given analyzer and/or grid-fitting algorithm can be
- * used by more than one script.
- */
-
- typedef enum AF_Script_
- {
- AF_SCRIPT_NONE = 0,
- AF_SCRIPT_LATIN = 1,
- AF_SCRIPT_CJK = 2,
- AF_SCRIPT_INDIC = 3,
-#ifdef FT_OPTION_AUTOFIT2
- AF_SCRIPT_LATIN2,
-#endif
-
- /* add new scripts here. Don't forget to update the list in */
- /* `afglobal.c'. */
-
- AF_SCRIPT_MAX /* do not remove */
-
- } AF_Script;
-
-
- typedef struct AF_ScriptClassRec_ const* AF_ScriptClass;
-
- typedef struct AF_ScriptMetricsRec_
- {
- AF_ScriptClass clazz;
- AF_ScalerRec scaler;
-
- } AF_ScriptMetricsRec, *AF_ScriptMetrics;
-
-
- /* This function parses an FT_Face to compute global metrics for
- * a specific script.
- */
- typedef FT_Error
- (*AF_Script_InitMetricsFunc)( AF_ScriptMetrics metrics,
- FT_Face face );
-
- typedef void
- (*AF_Script_ScaleMetricsFunc)( AF_ScriptMetrics metrics,
- AF_Scaler scaler );
-
- typedef void
- (*AF_Script_DoneMetricsFunc)( AF_ScriptMetrics metrics );
-
-
- typedef FT_Error
- (*AF_Script_InitHintsFunc)( AF_GlyphHints hints,
- AF_ScriptMetrics metrics );
-
- typedef void
- (*AF_Script_ApplyHintsFunc)( AF_GlyphHints hints,
- FT_Outline* outline,
- AF_ScriptMetrics metrics );
-
-
- typedef struct AF_Script_UniRangeRec_
- {
- FT_UInt32 first;
- FT_UInt32 last;
-
- } AF_Script_UniRangeRec;
-
- typedef const AF_Script_UniRangeRec *AF_Script_UniRange;
-
-
- typedef struct AF_ScriptClassRec_
- {
- AF_Script script;
- AF_Script_UniRange script_uni_ranges; /* last must be { 0, 0 } */
-
- FT_UInt script_metrics_size;
- AF_Script_InitMetricsFunc script_metrics_init;
- AF_Script_ScaleMetricsFunc script_metrics_scale;
- AF_Script_DoneMetricsFunc script_metrics_done;
-
- AF_Script_InitHintsFunc script_hints_init;
- AF_Script_ApplyHintsFunc script_hints_apply;
-
- } AF_ScriptClassRec;
-
-
-/* */
-
-FT_END_HEADER
-
-#endif /* __AFTYPES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afwarp.c b/Build/source/libs/freetype2/src/autofit/afwarp.c
deleted file mode 100644
index f5bb9b18ad9..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afwarp.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/***************************************************************************/
-/* */
-/* afwarp.c */
-/* */
-/* Auto-fitter warping algorithm (body). */
-/* */
-/* Copyright 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "afwarp.h"
-
-#ifdef AF_USE_WARPER
-
-#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
-
-
- 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_UInt num_segments )
- {
- FT_Int idx_min, idx_max, idx0;
- FT_UInt 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;
-
- xx1max = warper->x1max;
- 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 )
- {
- AF_LOG(( "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;
-
-
- 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 );
- }
- }
- }
- }
-
-
- 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_UInt 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 = 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 );
-
- 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;
- }
-
- warper->wmin = warper->x2min - warper->x1max;
- warper->wmax = warper->x2max - warper->x1min;
-
-#if 1
- {
- 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;
-
-
- 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;
-
- 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_USE_WARPER */
-
-char af_warper_dummy = 0; /* make compiler happy */
-
-#endif /* !AF_USE_WARPER */
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/afwarp.h b/Build/source/libs/freetype2/src/autofit/afwarp.h
deleted file mode 100644
index 7343fdd5ef5..00000000000
--- a/Build/source/libs/freetype2/src/autofit/afwarp.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/***************************************************************************/
-/* */
-/* afwarp.h */
-/* */
-/* Auto-fitter warping algorithm (specification). */
-/* */
-/* Copyright 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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) & ~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/Build/source/libs/freetype2/src/autofit/autofit.c b/Build/source/libs/freetype2/src/autofit/autofit.c
deleted file mode 100644
index 2fe66a990ec..00000000000
--- a/Build/source/libs/freetype2/src/autofit/autofit.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* autofit.c */
-/* */
-/* Auto-fitter module (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "afglobal.c"
-#include "afhints.c"
-
-#include "afdummy.c"
-#include "aflatin.c"
-#ifdef FT_OPTION_AUTOFIT2
-#include "aflatin2.c"
-#endif
-#include "afcjk.c"
-#include "afindic.c"
-
-#include "afloader.c"
-#include "afmodule.c"
-
-#ifdef AF_USE_WARPER
-#include "afwarp.c"
-#endif
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/autofit/module.mk b/Build/source/libs/freetype2/src/autofit/module.mk
deleted file mode 100644
index 4a386ce66cc..00000000000
--- a/Build/source/libs/freetype2/src/autofit/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 auto-fitter module definition
-#
-
-
-# Copyright 2003, 2004, 2005, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)autofit_module_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)autofit $(ECHO_DRIVER_DESC)automatic hinting module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/autofit/rules.mk b/Build/source/libs/freetype2/src/autofit/rules.mk
deleted file mode 100644
index 017489d9e0a..00000000000
--- a/Build/source/libs/freetype2/src/autofit/rules.mk
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# FreeType 2 auto-fitter module configuration rules
-#
-
-
-# Copyright 2003, 2004, 2005, 2006, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(AUTOF_DIR))
-
-
-# AUTOF driver sources (i.e., C files)
-#
-AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.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)/afwarp.c
-
-# AUTOF driver headers
-#
-AUTOF_DRV_H := $(AUTOF_DRV_SRC:%c=%h) \
- $(AUTOF_DIR)/aftypes.h \
- $(AUTOF_DIR)/aferrors.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/Build/source/libs/freetype2/src/base/Jamfile b/Build/source/libs/freetype2/src/base/Jamfile
deleted file mode 100644
index aeffe388e58..00000000000
--- a/Build/source/libs/freetype2/src/base/Jamfile
+++ /dev/null
@@ -1,50 +0,0 @@
-# FreeType 2 src/base Jamfile
-#
-# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 = ftutil ftdbgmem ftstream ftcalc fttrigon ftgloadr ftoutln
- ftobjs ftnames ftrfork ;
- }
- else
- {
- _sources = ftbase ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# Add the optional/replaceable files.
-#
-{
- local _sources = system init glyph mm bdf
- bbox debug xf86 type1 pfr
- stroke winfnt otval bitmap synth
- gxval lcdfil gasp patent
- ;
-
- Library $(FT2_LIB) : ft$(_sources).c ;
-}
-
-# Add Macintosh-specific file to the library when necessary.
-#
-if $(MAC)
-{
- Library $(FT2_LIB) : ftmac.c ;
-}
-
-# end of src/base Jamfile
diff --git a/Build/source/libs/freetype2/src/base/ftapi.c b/Build/source/libs/freetype2/src/base/ftapi.c
deleted file mode 100644
index 8914d1f4e99..00000000000
--- a/Build/source/libs/freetype2/src/base/ftapi.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftapi.c */
-/* */
-/* The FreeType compatibility functions (body). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#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 ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* backwards 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/Build/source/libs/freetype2/src/base/ftbase.c b/Build/source/libs/freetype2/src/base/ftbase.c
deleted file mode 100644
index 300e02d154e..00000000000
--- a/Build/source/libs/freetype2/src/base/ftbase.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbase.c */
-/* */
-/* Single object library component (body only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "ftcalc.c"
-#include "ftdbgmem.c"
-#include "ftgloadr.c"
-#include "ftnames.c"
-#include "ftobjs.c"
-#include "ftoutln.c"
-#include "ftrfork.c"
-#include "ftstream.c"
-#include "fttrigon.c"
-#include "ftutil.c"
-
-#if defined( __APPLE__ ) && !defined ( DARWIN_NO_CARBON )
-#include "ftmac.c"
-#endif
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftbbox.c b/Build/source/libs/freetype2/src/base/ftbbox.c
deleted file mode 100644
index 532ab135791..00000000000
--- a/Build/source/libs/freetype2/src/base/ftbbox.c
+++ /dev/null
@@ -1,659 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbbox.c */
-/* */
-/* FreeType bbox computation (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_BBOX_H
-#include FT_IMAGE_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_CALC_H
-
-
- typedef struct TBBox_Rec_
- {
- FT_Vector last;
- FT_BBox bbox;
-
- } TBBox_Rec;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Move_To */
- /* */
- /* <Description> */
- /* This function is used as a `move_to' and `line_to' emitter during */
- /* FT_Outline_Decompose(). It simply records the destination point */
- /* in `user->last'; no further computations are necessary since we */
- /* use the cbox as the starting bbox which must be refined. */
- /* */
- /* <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 )
- {
- user->last = *to;
-
- return 0;
- }
-
-
-#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_Conic_Check */
- /* */
- /* <Description> */
- /* Finds 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 )
- {
- if ( y1 <= y3 && y2 == y1 ) /* flat arc */
- goto Suite;
-
- if ( y1 < y3 )
- {
- if ( y2 >= y1 && y2 <= y3 ) /* ascending arc */
- goto Suite;
- }
- else
- {
- if ( y2 >= y3 && y2 <= y1 ) /* descending arc */
- {
- y2 = y1;
- y1 = y3;
- y3 = y2;
- goto Suite;
- }
- }
-
- y1 = y3 = y1 - FT_MulDiv( y2 - y1, y2 - y1, y1 - 2*y2 + y3 );
-
- Suite:
- if ( y1 < *min ) *min = y1;
- if ( y3 > *max ) *max = y3;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Conic_To */
- /* */
- /* <Description> */
- /* This function is used as a `conic_to' emitter during */
- /* FT_Raster_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 )
- {
- /* we don't need to check `to' since it is always an `on' point, thus */
- /* within the 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> */
- /* Finds the extrema of a 1-dimensional cubic Bezier curve and */
- /* updates a bounding range. This version uses splitting because we */
- /* don't want to use square roots and extra accuracy. */
- /* */
- /* <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. */
- /* */
-
-#if 0
-
- static void
- BBox_Cubic_Check( FT_Pos p1,
- FT_Pos p2,
- FT_Pos p3,
- FT_Pos p4,
- FT_Pos* min,
- FT_Pos* max )
- {
- FT_Pos stack[32*3 + 1], *arc;
-
-
- arc = stack;
-
- arc[0] = p1;
- arc[1] = p2;
- arc[2] = p3;
- arc[3] = p4;
-
- do
- {
- FT_Pos y1 = arc[0];
- FT_Pos y2 = arc[1];
- FT_Pos y3 = arc[2];
- FT_Pos y4 = arc[3];
-
-
- if ( y1 == y4 )
- {
- if ( y1 == y2 && y1 == y3 ) /* flat */
- goto Test;
- }
- else if ( y1 < y4 )
- {
- if ( y2 >= y1 && y2 <= y4 && y3 >= y1 && y3 <= y4 ) /* ascending */
- goto Test;
- }
- else
- {
- if ( y2 >= y4 && y2 <= y1 && y3 >= y4 && y3 <= y1 ) /* descending */
- {
- y2 = y1;
- y1 = y4;
- y4 = y2;
- goto Test;
- }
- }
-
- /* unknown direction -- split the arc in two */
- arc[6] = y4;
- arc[1] = y1 = ( y1 + y2 ) / 2;
- arc[5] = y4 = ( y4 + y3 ) / 2;
- y2 = ( y2 + y3 ) / 2;
- arc[2] = y1 = ( y1 + y2 ) / 2;
- arc[4] = y4 = ( y4 + y2 ) / 2;
- arc[3] = ( y1 + y4 ) / 2;
-
- arc += 3;
- goto Suite;
-
- Test:
- if ( y1 < *min ) *min = y1;
- if ( y4 > *max ) *max = y4;
- arc -= 3;
-
- Suite:
- ;
- } while ( arc >= stack );
- }
-
-#else
-
- static void
- test_cubic_extrema( FT_Pos y1,
- FT_Pos y2,
- FT_Pos y3,
- FT_Pos y4,
- FT_Fixed u,
- FT_Pos* min,
- FT_Pos* max )
- {
- /* FT_Pos a = y4 - 3*y3 + 3*y2 - y1; */
- FT_Pos b = y3 - 2*y2 + y1;
- FT_Pos c = y2 - y1;
- FT_Pos d = y1;
- FT_Pos y;
- FT_Fixed uu;
-
- FT_UNUSED ( y4 );
-
-
- /* The polynomial is */
- /* */
- /* P(x) = a*x^3 + 3b*x^2 + 3c*x + d , */
- /* */
- /* dP/dx = 3a*x^2 + 6b*x + 3c . */
- /* */
- /* However, we also have */
- /* */
- /* dP/dx(u) = 0 , */
- /* */
- /* which implies by subtraction that */
- /* */
- /* P(u) = b*u^2 + 2c*u + d . */
-
- if ( u > 0 && u < 0x10000L )
- {
- uu = FT_MulFix( u, u );
- y = d + FT_MulFix( c, 2*u ) + FT_MulFix( b, uu );
-
- if ( y < *min ) *min = y;
- if ( y > *max ) *max = y;
- }
- }
-
-
- static void
- BBox_Cubic_Check( FT_Pos y1,
- FT_Pos y2,
- FT_Pos y3,
- FT_Pos y4,
- FT_Pos* min,
- FT_Pos* max )
- {
- /* always compare first and last points */
- if ( y1 < *min ) *min = y1;
- else if ( y1 > *max ) *max = y1;
-
- if ( y4 < *min ) *min = y4;
- else if ( y4 > *max ) *max = y4;
-
- /* now, try to see if there are split points here */
- if ( y1 <= y4 )
- {
- /* flat or ascending arc test */
- if ( y1 <= y2 && y2 <= y4 && y1 <= y3 && y3 <= y4 )
- return;
- }
- else /* y1 > y4 */
- {
- /* descending arc test */
- if ( y1 >= y2 && y2 >= y4 && y1 >= y3 && y3 >= y4 )
- return;
- }
-
- /* There are some split points. Find them. */
- {
- FT_Pos a = y4 - 3*y3 + 3*y2 - y1;
- FT_Pos b = y3 - 2*y2 + y1;
- FT_Pos c = y2 - y1;
- FT_Pos d;
- FT_Fixed t;
-
-
- /* We need to solve `ax^2+2bx+c' here, without floating points! */
- /* The trick is to normalize to a different representation in order */
- /* to use our 16.16 fixed point routines. */
- /* */
- /* We compute FT_MulFix(b,b) and FT_MulFix(a,c) after normalization. */
- /* These values must fit into a single 16.16 value. */
- /* */
- /* We normalize a, b, and c to `8.16' fixed float values to ensure */
- /* that its product is held in a `16.16' value. */
-
- {
- FT_ULong t1, t2;
- int shift = 0;
-
-
- /* The following computation is based on the fact that for */
- /* any value `y', if `n' is the position of the most */
- /* significant bit of `abs(y)' (starting from 0 for the */
- /* least significant bit), then `y' is in the range */
- /* */
- /* -2^n..2^n-1 */
- /* */
- /* We want to shift `a', `b', and `c' concurrently in order */
- /* to ensure that they all fit in 8.16 values, which maps */
- /* to the integer range `-2^23..2^23-1'. */
- /* */
- /* Necessarily, we need to shift `a', `b', and `c' so that */
- /* the most significant bit of its absolute values is at */
- /* _most_ at position 23. */
- /* */
- /* We begin by computing `t1' as the bitwise `OR' of the */
- /* absolute values of `a', `b', `c'. */
-
- t1 = (FT_ULong)( ( a >= 0 ) ? a : -a );
- t2 = (FT_ULong)( ( b >= 0 ) ? b : -b );
- t1 |= t2;
- t2 = (FT_ULong)( ( c >= 0 ) ? c : -c );
- t1 |= t2;
-
- /* Now we can be sure that the most significant bit of `t1' */
- /* is the most significant bit of either `a', `b', or `c', */
- /* depending on the greatest integer range of the particular */
- /* variable. */
- /* */
- /* Next, we compute the `shift', by shifting `t1' as many */
- /* times as necessary to move its MSB to position 23. This */
- /* corresponds to a value of `t1' that is in the range */
- /* 0x40_0000..0x7F_FFFF. */
- /* */
- /* Finally, we shift `a', `b', and `c' by the same amount. */
- /* This ensures that all values are now in the range */
- /* -2^23..2^23, i.e., they are now expressed as 8.16 */
- /* fixed-float numbers. This also means that we are using */
- /* 24 bits of precision to compute the zeros, independently */
- /* of the range of the original polynomial coefficients. */
- /* */
- /* This algorithm should ensure reasonably accurate values */
- /* for the zeros. Note that they are only expressed with */
- /* 16 bits when computing the extrema (the zeros need to */
- /* be in 0..1 exclusive to be considered part of the arc). */
-
- if ( t1 == 0 ) /* all coefficients are 0! */
- return;
-
- if ( t1 > 0x7FFFFFUL )
- {
- do
- {
- shift++;
- t1 >>= 1;
-
- } while ( t1 > 0x7FFFFFUL );
-
- /* this loses some bits of precision, but we use 24 of them */
- /* for the computation anyway */
- a >>= shift;
- b >>= shift;
- c >>= shift;
- }
- else if ( t1 < 0x400000UL )
- {
- do
- {
- shift++;
- t1 <<= 1;
-
- } while ( t1 < 0x400000UL );
-
- a <<= shift;
- b <<= shift;
- c <<= shift;
- }
- }
-
- /* handle a == 0 */
- if ( a == 0 )
- {
- if ( b != 0 )
- {
- t = - FT_DivFix( c, b ) / 2;
- test_cubic_extrema( y1, y2, y3, y4, t, min, max );
- }
- }
- else
- {
- /* solve the equation now */
- d = FT_MulFix( b, b ) - FT_MulFix( a, c );
- if ( d < 0 )
- return;
-
- if ( d == 0 )
- {
- /* there is a single split point at -b/a */
- t = - FT_DivFix( b, a );
- test_cubic_extrema( y1, y2, y3, y4, t, min, max );
- }
- else
- {
- /* there are two solutions; we need to filter them */
- d = FT_SqrtFixed( (FT_Int32)d );
- t = - FT_DivFix( b - d, a );
- test_cubic_extrema( y1, y2, y3, y4, t, min, max );
-
- t = - FT_DivFix( b + d, a );
- test_cubic_extrema( y1, y2, y3, y4, t, min, max );
- }
- }
- }
- }
-
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* BBox_Cubic_To */
- /* */
- /* <Description> */
- /* This function is used as a `cubic_to' emitter during */
- /* FT_Raster_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 */
-
- 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;
- }
-
-
- /* documentation is in ftbbox.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Outline_Get_BBox( FT_Outline* outline,
- FT_BBox *abbox )
- {
- FT_BBox cbox;
- FT_BBox bbox;
- FT_Vector* vec;
- FT_UShort n;
-
-
- if ( !abbox )
- return FT_Err_Invalid_Argument;
-
- if ( !outline )
- return FT_Err_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;
- bbox.xMin = bbox.xMax = cbox.xMin = cbox.xMax = vec->x;
- bbox.yMin = bbox.yMax = cbox.yMin = cbox.yMax = vec->y;
- vec++;
-
- for ( n = 1; n < outline->n_points; n++ )
- {
- FT_Pos x = vec->x;
- FT_Pos y = vec->y;
-
-
- /* update control box */
- if ( x < cbox.xMin ) cbox.xMin = x;
- if ( x > cbox.xMax ) cbox.xMax = x;
-
- if ( y < cbox.yMin ) cbox.yMin = y;
- if ( y > cbox.yMax ) cbox.yMax = y;
-
- if ( FT_CURVE_TAG( outline->tags[n] ) == FT_CURVE_TAG_ON )
- {
- /* update bbox for `on' points only */
- if ( x < bbox.xMin ) bbox.xMin = x;
- if ( x > bbox.xMax ) bbox.xMax = x;
-
- if ( y < bbox.yMin ) bbox.yMin = y;
- if ( y > bbox.yMax ) bbox.yMax = y;
- }
-
- 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. */
-
- static const FT_Outline_Funcs bbox_interface =
- {
- (FT_Outline_MoveTo_Func) BBox_Move_To,
- (FT_Outline_LineTo_Func) BBox_Move_To,
- (FT_Outline_ConicTo_Func)BBox_Conic_To,
- (FT_Outline_CubicTo_Func)BBox_Cubic_To,
- 0, 0
- };
-
- FT_Error error;
- TBBox_Rec user;
-
-
- 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/Build/source/libs/freetype2/src/base/ftbdf.c b/Build/source/libs/freetype2/src/base/ftbdf.c
deleted file mode 100644
index d29adf09dd3..00000000000
--- a/Build/source/libs/freetype2/src/base/ftbdf.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbdf.c */
-/* */
-/* FreeType API for accessing BDF-specific strings (body). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.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;
-
-
- error = FT_Err_Invalid_Argument;
-
- if ( face )
- {
- FT_Service_BDF service;
-
-
- FT_FACE_FIND_SERVICE( face, service, BDF );
-
- if ( service && service->get_charset_id )
- error = service->get_charset_id( face, &encoding, &registry );
- }
-
- 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;
-
-
- error = FT_Err_Invalid_Argument;
-
- aproperty->type = BDF_PROPERTY_TYPE_NONE;
-
- if ( face )
- {
- FT_Service_BDF service;
-
-
- FT_FACE_FIND_SERVICE( face, service, BDF );
-
- if ( service && service->get_property )
- error = service->get_property( face, prop_name, aproperty );
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftbitmap.c b/Build/source/libs/freetype2/src/base/ftbitmap.c
deleted file mode 100644
index 4c1cdf21888..00000000000
--- a/Build/source/libs/freetype2/src/base/ftbitmap.c
+++ /dev/null
@@ -1,630 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftbitmap.c */
-/* */
-/* FreeType utility functions for converting 1bpp, 2bpp, 4bpp, and 8bpp */
-/* bitmaps into 8bpp format (body). */
-/* */
-/* Copyright 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_BITMAP_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_New( FT_Bitmap *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 = library->memory;
- FT_Error error = FT_Err_Ok;
- FT_Int pitch = source->pitch;
- FT_ULong size;
-
-
- if ( source == target )
- return FT_Err_Ok;
-
- if ( source->buffer == NULL )
- {
- *target = *source;
-
- return FT_Err_Ok;
- }
-
- 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;
-
- FT_MEM_COPY( target->buffer, source->buffer, size );
- }
-
- return error;
- }
-
-
- 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_Int i, width, height;
- unsigned char* buffer;
-
-
- 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 = ( width + xpixels + 7 ) >> 3;
- break;
- case FT_PIXEL_MODE_GRAY2:
- bpp = 2;
- new_pitch = ( width + xpixels + 3 ) >> 2;
- break;
- case FT_PIXEL_MODE_GRAY4:
- bpp = 4;
- new_pitch = ( 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 = ( width + xpixels );
- break;
- default:
- return FT_Err_Invalid_Glyph_Format;
- }
-
- /* if no need to allocate memory */
- if ( ypixels == 0 && new_pitch <= pitch )
- {
- /* zero the padding */
- FT_Int bit_width = pitch * 8;
- FT_Int 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_Int shift = bit_last & 7;
- FT_UInt mask = 0xFF00U >> shift;
- FT_Int 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;
- }
-
- if ( FT_QALLOC_MULT( buffer, new_pitch, bitmap->rows + ypixels ) )
- return error;
-
- if ( bitmap->pitch > 0 )
- {
- FT_Int len = ( width * bpp + 7 ) >> 3;
-
-
- for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + new_pitch * ( ypixels + i ),
- bitmap->buffer + pitch * i, len );
- }
- else
- {
- FT_Int len = ( width * bpp + 7 ) >> 3;
-
-
- for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + new_pitch * i,
- bitmap->buffer + 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, y, pitch;
- FT_Int xstr, ystr;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !bitmap || !bitmap->buffer )
- return FT_Err_Invalid_Argument;
-
- xstr = FT_PIX_ROUND( xStrength ) >> 6;
- ystr = FT_PIX_ROUND( yStrength ) >> 6;
-
- if ( xstr == 0 && ystr == 0 )
- return FT_Err_Ok;
- else if ( xstr < 0 || ystr < 0 )
- return FT_Err_Invalid_Argument;
-
- switch ( bitmap->pixel_mode )
- {
- case FT_PIXEL_MODE_GRAY2:
- case FT_PIXEL_MODE_GRAY4:
- {
- FT_Bitmap tmp;
- FT_Int align;
-
-
- if ( bitmap->pixel_mode == FT_PIXEL_MODE_GRAY2 )
- align = ( bitmap->width + xstr + 3 ) / 4;
- else
- align = ( bitmap->width + xstr + 1 ) / 2;
-
- FT_Bitmap_New( &tmp );
-
- error = FT_Bitmap_Convert( library, bitmap, &tmp, align );
- 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;
- }
-
- error = ft_bitmap_assure_buffer( library->memory, bitmap, xstr, ystr );
- if ( error )
- return error;
-
- pitch = bitmap->pitch;
- if ( pitch > 0 )
- p = bitmap->buffer + pitch * ystr;
- else
- {
- pitch = -pitch;
- p = bitmap->buffer + 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 += xstr;
- bitmap->rows += ystr;
-
- return FT_Err_Ok;
- }
-
-
- /* 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;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- 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:
- {
- FT_Int pad;
- FT_Long old_size;
-
-
- old_size = target->rows * target->pitch;
- if ( old_size < 0 )
- old_size = -old_size;
-
- target->pixel_mode = FT_PIXEL_MODE_GRAY;
- target->rows = source->rows;
- target->width = source->width;
-
- pad = 0;
- if ( alignment > 0 )
- {
- pad = source->width % alignment;
- if ( pad != 0 )
- pad = alignment - pad;
- }
-
- target->pitch = source->width + pad;
-
- if ( target->rows * target->pitch > old_size &&
- FT_QREALLOC( target->buffer,
- old_size, target->rows * target->pitch ) )
- return error;
- }
- break;
-
- default:
- error = FT_Err_Invalid_Argument;
- }
-
- switch ( source->pixel_mode )
- {
- case FT_PIXEL_MODE_MONO:
- {
- FT_Byte* s = source->buffer;
- FT_Byte* t = target->buffer;
- FT_Int i;
-
-
- target->num_grays = 2;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_Byte* ss = s;
- FT_Byte* tt = t;
- FT_Int 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:
- {
- FT_Int width = source->width;
- FT_Byte* s = source->buffer;
- FT_Byte* t = target->buffer;
- FT_Int s_pitch = source->pitch;
- FT_Int t_pitch = target->pitch;
- FT_Int i;
-
-
- target->num_grays = 256;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_ARRAY_COPY( t, s, width );
-
- s += s_pitch;
- t += t_pitch;
- }
- }
- break;
-
-
- case FT_PIXEL_MODE_GRAY2:
- {
- FT_Byte* s = source->buffer;
- FT_Byte* t = target->buffer;
- FT_Int i;
-
-
- target->num_grays = 4;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_Byte* ss = s;
- FT_Byte* tt = t;
- FT_Int 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_Byte* s = source->buffer;
- FT_Byte* t = target->buffer;
- FT_Int i;
-
-
- target->num_grays = 16;
-
- for ( i = source->rows; i > 0; i-- )
- {
- FT_Byte* ss = s;
- FT_Byte* tt = t;
- FT_Int 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;
-
-
- default:
- ;
- }
-
- return error;
- }
-
-
- /* 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_Err_Invalid_Library_Handle;
-
- if ( !bitmap )
- return FT_Err_Invalid_Argument;
-
- memory = library->memory;
-
- FT_FREE( bitmap->buffer );
- *bitmap = null_bitmap;
-
- return FT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftcalc.c b/Build/source/libs/freetype2/src/base/ftcalc.c
deleted file mode 100644
index 549427a863c..00000000000
--- a/Build/source/libs/freetype2/src/base/ftcalc.c
+++ /dev/null
@@ -1,927 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcalc.c */
-/* */
-/* Arithmetic computations (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-
-
-/* we need to define a 64-bits data type here */
-
-#ifdef FT_LONG64
-
- typedef FT_INT64 FT_Int64;
-
-#else
-
- 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
-
-
- /* 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 ( a >= 0 ) ? ( a + 0x8000L ) & ~0xFFFFL
- : -((-a + 0x8000L ) & ~0xFFFFL );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_CeilFix( FT_Fixed a )
- {
- return ( a >= 0 ) ? ( a + 0xFFFFL ) & ~0xFFFFL
- : -((-a + 0xFFFFL ) & ~0xFFFFL );
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_FloorFix( FT_Fixed a )
- {
- return ( a >= 0 ) ? a & ~0xFFFFL
- : -((-a) & ~0xFFFFL );
- }
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /* documentation is in ftcalc.h */
-
- FT_EXPORT_DEF( FT_Int32 )
- FT_Sqrt32( FT_Int32 x )
- {
- FT_ULong val, root, newroot, mask;
-
-
- root = 0;
- mask = 0x40000000L;
- val = (FT_ULong)x;
-
- do
- {
- newroot = root + mask;
- if ( newroot <= val )
- {
- val -= newroot;
- root = newroot + mask;
- }
-
- root >>= 1;
- mask >>= 2;
-
- } while ( mask != 0 );
-
- return root;
- }
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
-#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;
- 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;
- }
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- /* 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;
- 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 /* TT_USE_BYTECODE_INTERPRETER */
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_MulFix( FT_Long a,
- FT_Long b )
- {
- FT_Int s = 1;
- FT_Long c;
-
-
- if ( a < 0 ) { a = -a; s = -1; }
- if ( b < 0 ) { b = -b; s = -s; }
-
- c = (FT_Long)( ( (FT_Int64)a * b + 0x8000L ) >> 16 );
- return ( s > 0 ) ? c : -c ;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_DivFix( FT_Long a,
- FT_Long b )
- {
- FT_Int32 s;
- FT_UInt32 q;
-
- s = 1;
- if ( a < 0 ) { a = -a; s = -1; }
- if ( b < 0 ) { b = -b; s = -s; }
-
- if ( b == 0 )
- /* check for division by 0 */
- q = 0x7FFFFFFFL;
- else
- /* compute result directly */
- q = (FT_UInt32)( ( ( (FT_Int64)a << 16 ) + ( b >> 1 ) ) / b );
-
- return ( s < 0 ? -(FT_Long)q : (FT_Long)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;
-
-
- q = 0;
- r = hi;
-
- if ( r >= y )
- return (FT_UInt32)0x7FFFFFFFL;
-
- i = 32;
- do
- {
- r <<= 1;
- q <<= 1;
- r |= lo >> 31;
-
- if ( r >= (FT_UInt32)y )
- {
- r -= y;
- q |= 1;
- }
- lo <<= 1;
- } while ( --i );
-
- return q;
- }
-
-
- static void
- FT_Add64( FT_Int64* x,
- FT_Int64* y,
- FT_Int64 *z )
- {
- register FT_UInt32 lo, hi;
-
-
- lo = x->lo + y->lo;
- hi = x->hi + y->hi + ( lo < x->lo );
-
- z->lo = lo;
- z->hi = hi;
- }
-
-
- /* documentation is in freetype.h */
-
- /* The FT_MulDiv function has been optimized thanks to ideas from */
- /* Graham Asher. The trick is to optimize computation when everything */
- /* fits within 32-bits (a rather common case). */
- /* */
- /* we compute 'a*b+c/2', then divide it by 'c'. (positive values) */
- /* */
- /* 46340 is FLOOR(SQRT(2^31-1)). */
- /* */
- /* if ( a <= 46340 && b <= 46340 ) then ( a*b <= 0x7FFEA810 ) */
- /* */
- /* 0x7FFFFFFF - 0x7FFEA810 = 0x157F0 */
- /* */
- /* if ( c < 0x157F0*2 ) then ( a*b+c/2 <= 0x7FFFFFFF ) */
- /* */
- /* and 2*0x157F0 = 176096 */
- /* */
-
- FT_EXPORT_DEF( FT_Long )
- FT_MulDiv( FT_Long a,
- FT_Long b,
- FT_Long c )
- {
- long s;
-
-
- if ( a == 0 || b == c )
- return a;
-
- s = a; a = FT_ABS( a );
- s ^= b; b = FT_ABS( b );
- s ^= c; c = FT_ABS( c );
-
- if ( a <= 46340L && b <= 46340L && c <= 176095L && c > 0 )
- a = ( a * b + ( c >> 1 ) ) / c;
-
- else if ( c > 0 )
- {
- FT_Int64 temp, temp2;
-
-
- ft_multo64( a, b, &temp );
-
- temp2.hi = 0;
- temp2.lo = (FT_UInt32)(c >> 1);
- FT_Add64( &temp, &temp2, &temp );
- a = ft_div64by32( temp.hi, temp.lo, c );
- }
- else
- a = 0x7FFFFFFFL;
-
- return ( s < 0 ? -a : a );
- }
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- FT_BASE_DEF( FT_Long )
- FT_MulDiv_No_Round( FT_Long a,
- FT_Long b,
- FT_Long c )
- {
- long s;
-
-
- if ( a == 0 || b == c )
- return a;
-
- s = a; a = FT_ABS( a );
- s ^= b; b = FT_ABS( b );
- s ^= c; c = FT_ABS( c );
-
- if ( a <= 46340L && b <= 46340L && c > 0 )
- a = a * b / c;
-
- else if ( c > 0 )
- {
- FT_Int64 temp;
-
-
- ft_multo64( a, b, &temp );
- a = ft_div64by32( temp.hi, temp.lo, c );
- }
- else
- a = 0x7FFFFFFFL;
-
- return ( s < 0 ? -a : a );
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_MulFix( FT_Long a,
- FT_Long b )
- {
- /* use inline assembly to speed up things a bit */
-
-#if defined( __GNUC__ ) && defined( i386 )
-
- FT_Long 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"
- "mov %%eax, %0\n"
- : "=a"(result), "+d"(b)
- : "a"(a)
- : "%ecx"
- );
- return result;
-
-#elif 1
-
- FT_Long sa, sb;
- FT_ULong ua, ub;
-
-
- if ( a == 0 || b == 0x10000L )
- return a;
-
- sa = ( a >> ( sizeof ( a ) * 8 - 1 ) );
- a = ( a ^ sa ) - sa;
- sb = ( b >> ( sizeof ( b ) * 8 - 1 ) );
- b = ( b ^ sb ) - sb;
-
- ua = (FT_ULong)a;
- ub = (FT_ULong)b;
-
- if ( ua <= 2048 && ub <= 1048576L )
- ua = ( ua * ub + 0x8000U ) >> 16;
- else
- {
- FT_ULong al = ua & 0xFFFFU;
-
-
- ua = ( ua >> 16 ) * ub + al * ( ub >> 16 ) +
- ( ( al * ( ub & 0xFFFFU ) + 0x8000U ) >> 16 );
- }
-
- sa ^= sb,
- ua = (FT_ULong)(( ua ^ sa ) - sa);
-
- return (FT_Long)ua;
-
-#else /* 0 */
-
- FT_Long s;
- FT_ULong ua, ub;
-
-
- if ( a == 0 || b == 0x10000L )
- return a;
-
- s = a; a = FT_ABS( a );
- s ^= b; b = FT_ABS( b );
-
- ua = (FT_ULong)a;
- ub = (FT_ULong)b;
-
- if ( ua <= 2048 && ub <= 1048576L )
- ua = ( ua * ub + 0x8000UL ) >> 16;
- else
- {
- FT_ULong al = ua & 0xFFFFUL;
-
-
- ua = ( ua >> 16 ) * ub + al * ( ub >> 16 ) +
- ( ( al * ( ub & 0xFFFFUL ) + 0x8000UL ) >> 16 );
- }
-
- return ( s < 0 ? -(FT_Long)ua : (FT_Long)ua );
-
-#endif /* 0 */
-
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Long )
- FT_DivFix( FT_Long a,
- FT_Long b )
- {
- FT_Int32 s;
- FT_UInt32 q;
-
-
- s = a; a = FT_ABS( a );
- s ^= b; b = FT_ABS( b );
-
- if ( b == 0 )
- {
- /* check for division by 0 */
- q = 0x7FFFFFFFL;
- }
- else if ( ( a >> 16 ) == 0 )
- {
- /* compute result directly */
- q = (FT_UInt32)( (a << 16) + (b >> 1) ) / (FT_UInt32)b;
- }
- else
- {
- /* we need more bits; we have to do it by hand */
- FT_Int64 temp, temp2;
-
- temp.hi = (FT_Int32) (a >> 16);
- temp.lo = (FT_UInt32)(a << 16);
- temp2.hi = 0;
- temp2.lo = (FT_UInt32)( b >> 1 );
- FT_Add64( &temp, &temp2, &temp );
- q = ft_div64by32( temp.hi, temp.lo, b );
- }
-
- return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
- }
-
-
-#if 0
-
- /* documentation is in ftcalc.h */
-
- FT_EXPORT_DEF( void )
- FT_MulTo64( FT_Int32 x,
- FT_Int32 y,
- FT_Int64 *z )
- {
- FT_Int32 s;
-
-
- s = x; x = FT_ABS( x );
- s ^= y; y = FT_ABS( y );
-
- ft_multo64( x, y, z );
-
- if ( s < 0 )
- {
- z->lo = (FT_UInt32)-(FT_Int32)z->lo;
- z->hi = ~z->hi + !( z->lo );
- }
- }
-
-
- /* apparently, the second version of this code is not compiled correctly */
- /* on Mac machines with the MPW C compiler.. tsk, tsk, tsk... */
-
-#if 1
-
- FT_EXPORT_DEF( FT_Int32 )
- FT_Div64by32( FT_Int64* x,
- FT_Int32 y )
- {
- FT_Int32 s;
- FT_UInt32 q, r, i, lo;
-
-
- s = x->hi;
- if ( s < 0 )
- {
- x->lo = (FT_UInt32)-(FT_Int32)x->lo;
- x->hi = ~x->hi + !x->lo;
- }
- s ^= y; y = FT_ABS( y );
-
- /* Shortcut */
- if ( x->hi == 0 )
- {
- if ( y > 0 )
- q = x->lo / y;
- else
- q = 0x7FFFFFFFL;
-
- return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
- }
-
- r = x->hi;
- lo = x->lo;
-
- if ( r >= (FT_UInt32)y ) /* we know y is to be treated as unsigned here */
- return ( s < 0 ? 0x80000001UL : 0x7FFFFFFFUL );
- /* Return Max/Min Int32 if division overflow. */
- /* This includes division by zero! */
- q = 0;
- for ( i = 0; i < 32; i++ )
- {
- r <<= 1;
- q <<= 1;
- r |= lo >> 31;
-
- if ( r >= (FT_UInt32)y )
- {
- r -= y;
- q |= 1;
- }
- lo <<= 1;
- }
-
- return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
- }
-
-#else /* 0 */
-
- FT_EXPORT_DEF( FT_Int32 )
- FT_Div64by32( FT_Int64* x,
- FT_Int32 y )
- {
- FT_Int32 s;
- FT_UInt32 q;
-
-
- s = x->hi;
- if ( s < 0 )
- {
- x->lo = (FT_UInt32)-(FT_Int32)x->lo;
- x->hi = ~x->hi + !x->lo;
- }
- s ^= y; y = FT_ABS( y );
-
- /* Shortcut */
- if ( x->hi == 0 )
- {
- if ( y > 0 )
- q = ( x->lo + ( y >> 1 ) ) / y;
- else
- q = 0x7FFFFFFFL;
-
- return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
- }
-
- q = ft_div64by32( x->hi, x->lo, y );
-
- return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
- }
-
-#endif /* 0 */
-
-#endif /* 0 */
-
-
-#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 = FT_MulFix( a->xx, b->xx ) + FT_MulFix( a->xy, b->yx );
- xy = FT_MulFix( a->xx, b->xy ) + FT_MulFix( a->xy, b->yy );
- yx = FT_MulFix( a->yx, b->xx ) + FT_MulFix( a->yy, b->yx );
- yy = 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_Err_Invalid_Argument;
-
- /* compute discriminant */
- delta = FT_MulFix( matrix->xx, matrix->yy ) -
- FT_MulFix( matrix->xy, matrix->yx );
-
- if ( !delta )
- return FT_Err_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 = FT_MulDiv( a->xx, b->xx, val ) + FT_MulDiv( a->xy, b->yx, val );
- xy = FT_MulDiv( a->xx, b->xy, val ) + FT_MulDiv( a->xy, b->yy, val );
- yx = FT_MulDiv( a->yx, b->xx, val ) + FT_MulDiv( a->yy, b->yx, val );
- yy = 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 = FT_MulDiv( vector->x, matrix->xx, val ) +
- FT_MulDiv( vector->y, matrix->xy, val );
-
- yz = 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_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 = 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;
- }
-
-
- /* 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 )
- {
- FT_Int result;
-
-
- /* deal with the trivial cases quickly */
- if ( in_y == 0 )
- {
- if ( in_x >= 0 )
- result = out_y;
- else
- result = -out_y;
- }
- else if ( in_x == 0 )
- {
- if ( in_y >= 0 )
- result = -out_x;
- else
- result = out_x;
- }
- else if ( out_y == 0 )
- {
- if ( out_x >= 0 )
- result = in_y;
- else
- result = -in_y;
- }
- else if ( out_x == 0 )
- {
- if ( out_y >= 0 )
- result = -in_x;
- else
- result = in_x;
- }
- else /* general case */
- {
-#ifdef FT_LONG64
-
- FT_Int64 delta = (FT_Int64)in_x * out_y - (FT_Int64)in_y * out_x;
-
-
- if ( delta == 0 )
- result = 0;
- else
- result = 1 - 2 * ( delta < 0 );
-
-#else
-
- FT_Int64 z1, z2;
-
-
- ft_multo64( in_x, out_y, &z1 );
- ft_multo64( in_y, 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;
-
-#endif
- }
-
- return result;
- }
-
-
- /* 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;
- FT_Pos ay = in_y;
-
- FT_Pos d_in, d_out, d_corner;
-
-
- if ( ax < 0 )
- ax = -ax;
- if ( ay < 0 )
- ay = -ay;
- d_in = ax + ay;
-
- ax = out_x;
- if ( ax < 0 )
- ax = -ax;
- ay = out_y;
- if ( ay < 0 )
- ay = -ay;
- d_out = ax + ay;
-
- ax = out_x + in_x;
- if ( ax < 0 )
- ax = -ax;
- ay = out_y + in_y;
- if ( ay < 0 )
- ay = -ay;
- d_corner = ax + ay;
-
- return ( d_in + d_out - d_corner ) < ( d_corner >> 4 );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftcid.c b/Build/source/libs/freetype2/src/base/ftcid.c
deleted file mode 100644
index 5a8b50ff2c3..00000000000
--- a/Build/source/libs/freetype2/src/base/ftcid.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcid.c */
-/* */
-/* FreeType API for accessing CID font information. */
-/* */
-/* Copyright 2007 by Derek Clegg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftdbgmem.c b/Build/source/libs/freetype2/src/base/ftdbgmem.c
deleted file mode 100644
index 52a5c2057f8..00000000000
--- a/Build/source/libs/freetype2/src/base/ftdbgmem.c
+++ /dev/null
@@ -1,998 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdbgmem.c */
-/* */
-/* Memory debugger (body). */
-/* */
-/* Copyright 2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 <stdio.h>
-#include <stdlib.h>
-
- FT_BASE_DEF( const char* ) _ft_debug_file = 0;
- 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_ULong)(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 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_ULong size;
- FT_ULong nodes;
- FT_MemNode* buckets;
-
- FT_ULong alloc_total;
- FT_ULong alloc_current;
- FT_ULong alloc_max;
- FT_ULong alloc_count;
-
- FT_Bool bound_total;
- FT_ULong alloc_total_max;
-
- FT_Bool bound_count;
- FT_ULong 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_UInt 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_ULong
- ft_mem_closest_prime( FT_ULong num )
- {
- FT_UInt 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;
- }
-
-
- extern 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_ULong new_size;
-
-
- new_size = ft_mem_closest_prime( table->nodes );
- if ( new_size != table->size )
- {
- FT_MemNode* new_buckets;
- FT_ULong i;
-
-
- new_buckets = (FT_MemNode *)
- ft_mem_table_alloc( table,
- new_size * sizeof ( FT_MemNode ) );
- if ( new_buckets == NULL )
- return;
-
- FT_ARRAY_ZERO( new_buckets, new_size );
-
- for ( i = 0; i < table->size; i++ )
- {
- FT_MemNode node, next, *pnode;
- FT_ULong hash;
-
-
- node = table->buckets[i];
- while ( node )
- {
- next = node->link;
- hash = FT_MEM_VAL( node->address ) % 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 == NULL )
- 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 * 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_ULong i;
-
-
- FT_DumpMemory( table->memory );
-
- if ( table )
- {
- FT_Long leak_count = 0;
- FT_ULong leaks = 0;
-
-
- /* 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 = 0;
-
- if ( node->size > 0 )
- {
- printf(
- "leaked memory block at address %p, size %8ld in (%s:%ld)\n",
- 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] = 0;
- }
-
- 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_ULong hash;
- FT_MemNode *pnode, node;
-
-
- hash = FT_MEM_VAL( address );
- pnode = table->buckets + ( hash % 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 == NULL )
- 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 == NULL )
- 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_ULong 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 == NULL )
- 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 > (FT_ULong)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 );
- }
- }
-
-
- extern 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 > (FT_ULong)size )
- return NULL;
-
- block = (FT_Byte *)ft_mem_table_alloc( table, size );
- if ( block )
- {
- ft_mem_table_set( table, block, (FT_ULong)size, 0 );
-
- table->alloc_count++;
- }
-
- _ft_debug_file = "<unknown>";
- _ft_debug_lineno = 0;
-
- return (FT_Pointer)block;
- }
-
-
- extern void
- ft_mem_debug_free( FT_Memory memory,
- FT_Pointer block )
- {
- FT_MemTable table = (FT_MemTable)memory->user;
-
-
- if ( block == NULL )
- 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;
- }
-
-
- extern 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 == NULL || cur_size == 0 )
- 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 = (FT_Long)( new_size - cur_size );
-
- /* return NULL if this allocation would overflow the maximum heap size */
- if ( delta > 0 &&
- table->bound_total &&
- table->alloc_current + (FT_ULong)delta > table->alloc_total_max )
- return NULL;
-
- new_block = (FT_Byte *)ft_mem_table_alloc( table, new_size );
- if ( new_block == NULL )
- return NULL;
-
- ft_mem_table_set( table, (FT_Byte*)new_block, new_size, delta );
-
- ft_memcpy( new_block, block, cur_size < new_size ? cur_size : 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 != NULL )
- {
- FT_Long total_max = ft_atol( p );
-
-
- if ( total_max > 0 )
- {
- table->bound_total = 1;
- table->alloc_total_max = (FT_ULong)total_max;
- }
- }
-
- p = getenv( "FT2_ALLOC_COUNT_MAX" );
- if ( p != NULL )
- {
- FT_Long total_count = ft_atol( p );
-
-
- if ( total_count > 0 )
- {
- table->bound_count = 1;
- table->alloc_count_max = (FT_ULong)total_count;
- }
- }
-
- p = getenv( "FT2_KEEP_ALIVE" );
- if ( p != NULL )
- {
- FT_Long keep_alive = ft_atol( p );
-
-
- 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_UInt 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, sizeof ( *sources ) * count );
-
- count = 0;
- for ( bucket = table->sources; bucket < limit; bucket++ )
- {
- FT_MemSource source = *bucket;
-
-
- for ( ; source; source = source->link )
- sources[count++] = source;
- }
-
- ft_qsort( sources, 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 */
- const FT_Byte _debug_mem_dummy = 0;
-
-#endif /* !FT_DEBUG_MEMORY */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftdebug.c b/Build/source/libs/freetype2/src/base/ftdebug.c
deleted file mode 100644
index 356c8c2b19e..00000000000
--- a/Build/source/libs/freetype2/src/base/ftdebug.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdebug.c */
-/* */
-/* Debugging and logging component (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
-#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 );
- 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 );
- }
-
-#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 == ':' && 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/Build/source/libs/freetype2/src/base/ftgasp.c b/Build/source/libs/freetype2/src/base/ftgasp.c
deleted file mode 100644
index 8485d29259e..00000000000
--- a/Build/source/libs/freetype2/src/base/ftgasp.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgasp.c */
-/* */
-/* Access of TrueType's `gasp' table (body). */
-/* */
-/* Copyright 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/base/ftgloadr.c b/Build/source/libs/freetype2/src/base/ftgloadr.c
deleted file mode 100644
index ab52621ea67..00000000000
--- a/Build/source/libs/freetype2/src/base/ftgloadr.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgloadr.c */
-/* */
-/* The FreeType glyph loader (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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;
- 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 = base->n_points + current->n_points + n_points;
- old_max = loader->max_points;
-
- if ( new_max > old_max )
- {
- new_max = FT_PAD_CEIL( new_max, 8 );
-
- 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 = base->n_contours + current->n_contours +
- n_contours;
- if ( new_max > old_max )
- {
- new_max = FT_PAD_CEIL( new_max, 4 );
- 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:
- 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_UInt n_curr_contours;
- FT_UInt n_base_points;
- FT_UInt 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 = source->base.outline.n_points;
- FT_UInt num_contours = 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/Build/source/libs/freetype2/src/base/ftglyph.c b/Build/source/libs/freetype2/src/base/ftglyph.c
deleted file mode 100644
index 4130cb11028..00000000000
--- a/Build/source/libs/freetype2/src/base/ftglyph.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftglyph.c */
-/* */
-/* FreeType convenience functions to handle glyphs (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_GLYPH_H
-#include FT_OUTLINE_H
-#include FT_BITMAP_H
-#include FT_INTERNAL_OBJECTS_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_Err_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_New( &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 << 6;
- cbox->xMax = cbox->xMin + ( glyph->bitmap.width << 6 );
- cbox->yMax = glyph->top << 6;
- cbox->yMin = cbox->yMax - ( glyph->bitmap.rows << 6 );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Glyph_Class ft_bitmap_glyph_class =
- {
- sizeof ( FT_BitmapGlyphRec ),
- FT_GLYPH_FORMAT_BITMAP,
-
- ft_bitmap_glyph_init,
- ft_bitmap_glyph_done,
- ft_bitmap_glyph_copy,
- 0, /* FT_Glyph_TransformFunc */
- ft_bitmap_glyph_bbox,
- 0 /* FT_Glyph_PrepareFunc */
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** 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_Err_Invalid_Glyph_Format;
- goto Exit;
- }
-
- /* allocate new outline */
- error = FT_Outline_New( library, 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, 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_CALLBACK_TABLE_DEF
- const FT_Glyph_Class ft_outline_glyph_class =
- {
- sizeof ( FT_OutlineGlyphRec ),
- FT_GLYPH_FORMAT_OUTLINE,
-
- ft_outline_glyph_init,
- ft_outline_glyph_done,
- ft_outline_glyph_copy,
- ft_outline_glyph_transform,
- ft_outline_glyph_bbox,
- ft_outline_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;
-
-
- *aglyph = 0;
-
- 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 )
- {
- error = FT_Err_Invalid_Argument;
- goto Exit;
- }
-
- *target = 0;
-
- if ( !source || !source->clazz )
- {
- error = FT_Err_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 = 0;
-
-
- if ( !slot )
- return FT_Err_Invalid_Slot_Handle;
-
- library = slot->library;
-
- if ( !aglyph )
- return FT_Err_Invalid_Argument;
-
- /* if it is a bitmap, that's easy :-) */
- if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
- clazz = &ft_bitmap_glyph_class;
-
- /* it it is an outline too */
- else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
- clazz = &ft_outline_glyph_class;
-
- 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_Err_Invalid_Glyph_Format;
- goto Exit;
- }
-
- /* create FT_Glyph object */
- error = ft_new_glyph( library, clazz, &glyph );
- if ( error )
- goto Exit;
-
- /* copy advance while converting it to 16.16 format */
- glyph->advance.x = slot->advance.x << 10;
- glyph->advance.y = slot->advance.y << 10;
-
- /* 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 )
- {
- const FT_Glyph_Class* clazz;
- FT_Error error = FT_Err_Ok;
-
-
- if ( !glyph || !glyph->clazz )
- error = FT_Err_Invalid_Argument;
- else
- {
- 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_Err_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;
- else
- {
- clazz = glyph->clazz;
- if ( !clazz->glyph_bbox )
- return;
- else
- {
- /* 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;
- }
- }
- }
- return;
- }
-
-
- /* 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 glyph;
- FT_BitmapGlyph bitmap = NULL;
-
- const FT_Glyph_Class* clazz;
-
-
- /* check argument */
- if ( !the_glyph )
- goto Bad;
-
- /* we render the glyph into a glyph bitmap using a `dummy' glyph slot */
- /* then calling FT_Render_Glyph_Internal() */
-
- glyph = *the_glyph;
- if ( !glyph )
- goto Bad;
-
- clazz = glyph->clazz;
-
- /* when called with a bitmap glyph, do nothing and return successfully */
- if ( clazz == &ft_bitmap_glyph_class )
- goto Exit;
-
- if ( !clazz || !clazz->glyph_prepare )
- goto Bad;
-
- FT_MEM_ZERO( &dummy, sizeof ( dummy ) );
- FT_MEM_ZERO( &dummy_internal, sizeof ( dummy_internal ) );
- dummy.internal = &dummy_internal;
- dummy.library = glyph->library;
- dummy.format = clazz->glyph_format;
-
- /* create result bitmap glyph */
- error = ft_new_glyph( glyph->library, &ft_bitmap_glyph_class,
- (FT_Glyph*)(void*)&bitmap );
- if ( error )
- goto Exit;
-
-#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_Err_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/Build/source/libs/freetype2/src/base/ftgxval.c b/Build/source/libs/freetype2/src/base/ftgxval.c
deleted file mode 100644
index 32662bed872..00000000000
--- a/Build/source/libs/freetype2/src/base/ftgxval.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgxval.c */
-/* */
-/* FreeType API for validating TrueTyepGX/AAT tables (body). */
-/* */
-/* Copyright 2004, 2005, 2006 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_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_Err_Invalid_Face_Handle;
- goto Exit;
- }
-
- if ( tables == NULL )
- {
- error = FT_Err_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_Err_Unimplemented_Feature;
-
- Exit:
- return error;
- }
-
-
- FT_EXPORT_DEF( void )
- FT_TrueTypeGX_Free( FT_Face face,
- FT_Bytes table )
- {
- FT_Memory 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_Err_Invalid_Face_Handle;
- goto Exit;
- }
-
- if ( ckern_table == NULL )
- {
- error = FT_Err_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_Err_Unimplemented_Feature;
-
- Exit:
- return error;
- }
-
-
- FT_EXPORT_DEF( void )
- FT_ClassicKern_Free( FT_Face face,
- FT_Bytes table )
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( table );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftinit.c b/Build/source/libs/freetype2/src/base/ftinit.c
deleted file mode 100644
index 7af19c3d80f..00000000000
--- a/Build/source/libs/freetype2/src/base/ftinit.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftinit.c */
-/* */
-/* FreeType initialization layer (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
- /*************************************************************************/
- /* */
- /* 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
-
-#undef FT_USE_MODULE
-#ifdef __cplusplus
-#define FT_USE_MODULE( x ) extern "C" const FT_Module_Class x;
-#else
-#define FT_USE_MODULE( x ) extern const FT_Module_Class x;
-#endif
-
-
-#include FT_CONFIG_MODULES_H
-
-
-#undef FT_USE_MODULE
-#define FT_USE_MODULE( x ) (const FT_Module_Class*)&(x),
-
- static
- const FT_Module_Class* const ft_default_modules[] =
- {
-#include FT_CONFIG_MODULES_H
- 0
- };
-
-
- /* 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;
-
-
- /* test for valid `library' delayed to FT_Add_Module() */
-
- cur = ft_default_modules;
- while ( *cur )
- {
- error = FT_Add_Module( library, *cur );
- /* notify errors, but don't stop */
- if ( error )
- {
- FT_ERROR(( "FT_Add_Default_Module: Cannot install `%s', error = 0x%x\n",
- (*cur)->module_name, error ));
- }
- cur++;
- }
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Init_FreeType( FT_Library *alibrary )
- {
- FT_Error error;
- FT_Memory memory;
-
-
- /* 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_Err_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
- {
- (*alibrary)->version_major = FREETYPE_MAJOR;
- (*alibrary)->version_minor = FREETYPE_MINOR;
- (*alibrary)->version_patch = FREETYPE_PATCH;
-
- FT_Add_Default_Modules( *alibrary );
- }
-
- return error;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Done_FreeType( FT_Library library )
- {
- if ( library )
- {
- FT_Memory 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/Build/source/libs/freetype2/src/base/ftlcdfil.c b/Build/source/libs/freetype2/src/base/ftlcdfil.c
deleted file mode 100644
index 5f1fa0bdb3f..00000000000
--- a/Build/source/libs/freetype2/src/base/ftlcdfil.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlcdfil.c */
-/* */
-/* FreeType API for color filtering of subpixel bitmap glyphs (body). */
-/* */
-/* Copyright 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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 */
- static void
- _ft_lcd_filter_fir( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
- FT_Library library )
- {
- FT_Byte* weights = library->lcd_weights;
- FT_UInt width = (FT_UInt)bitmap->width;
- FT_UInt height = (FT_UInt)bitmap->rows;
-
-
- /* horizontal in-place FIR filter */
- if ( mode == FT_RENDER_MODE_LCD && width >= 4 )
- {
- FT_Byte* line = bitmap->buffer;
-
-
- for ( ; height > 0; height--, line += bitmap->pitch )
- {
- FT_UInt fir[5];
- FT_UInt val1, xx;
-
-
- val1 = line[0];
- fir[0] = weights[2] * val1;
- fir[1] = weights[3] * val1;
- fir[2] = weights[4] * val1;
- fir[3] = 0;
- fir[4] = 0;
-
- val1 = line[1];
- fir[0] += weights[1] * val1;
- fir[1] += weights[2] * val1;
- fir[2] += weights[3] * val1;
- fir[3] += weights[4] * val1;
-
- for ( xx = 2; xx < width; xx++ )
- {
- FT_UInt val, pix;
-
-
- val = line[xx];
- pix = fir[0] + weights[0] * val;
- fir[0] = fir[1] + weights[1] * val;
- fir[1] = fir[2] + weights[2] * val;
- fir[2] = fir[3] + weights[3] * val;
- fir[3] = weights[4] * val;
-
- pix >>= 8;
- pix |= -( pix >> 8 );
- line[xx - 2] = (FT_Byte)pix;
- }
-
- {
- FT_UInt pix;
-
-
- pix = fir[0] >> 8;
- pix |= -( pix >> 8 );
- line[xx - 2] = (FT_Byte)pix;
-
- pix = fir[1] >> 8;
- pix |= -( pix >> 8 );
- line[xx - 1] = (FT_Byte)pix;
- }
- }
- }
-
- /* vertical in-place FIR filter */
- else if ( mode == FT_RENDER_MODE_LCD_V && height >= 4 )
- {
- FT_Byte* column = bitmap->buffer;
- FT_Int pitch = bitmap->pitch;
-
-
- for ( ; width > 0; width--, column++ )
- {
- FT_Byte* col = column;
- FT_UInt fir[5];
- FT_UInt val1, yy;
-
-
- val1 = col[0];
- fir[0] = weights[2] * val1;
- fir[1] = weights[3] * val1;
- fir[2] = weights[4] * val1;
- fir[3] = 0;
- fir[4] = 0;
- col += pitch;
-
- val1 = col[0];
- fir[0] += weights[1] * val1;
- fir[1] += weights[2] * val1;
- fir[2] += weights[3] * val1;
- fir[3] += weights[4] * val1;
- col += pitch;
-
- for ( yy = 2; yy < height; yy++ )
- {
- FT_UInt val, pix;
-
-
- val = col[0];
- pix = fir[0] + weights[0] * val;
- fir[0] = fir[1] + weights[1] * val;
- fir[1] = fir[2] + weights[2] * val;
- fir[2] = fir[3] + weights[3] * val;
- fir[3] = weights[4] * val;
-
- pix >>= 8;
- pix |= -( pix >> 8 );
- col[-2 * pitch] = (FT_Byte)pix;
- col += pitch;
- }
-
- {
- FT_UInt pix;
-
-
- pix = fir[0] >> 8;
- pix |= -( pix >> 8 );
- col[-2 * pitch] = (FT_Byte)pix;
-
- pix = fir[1] >> 8;
- pix |= -( pix >> 8 );
- col[-pitch] = (FT_Byte)pix;
- }
- }
- }
- }
-
-
-#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_Library library )
- {
- FT_UInt width = (FT_UInt)bitmap->width;
- FT_UInt height = (FT_UInt)bitmap->rows;
- FT_Int pitch = bitmap->pitch;
-
- static const 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( library );
-
-
- /* horizontal in-place intra-pixel filter */
- if ( mode == FT_RENDER_MODE_LCD && width >= 3 )
- {
- FT_Byte* line = bitmap->buffer;
-
-
- for ( ; height > 0; height--, line += pitch )
- {
- FT_UInt xx;
-
-
- for ( xx = 0; xx < width; xx += 3 )
- {
- FT_UInt r = 0;
- FT_UInt g = 0;
- FT_UInt b = 0;
- 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 = bitmap->buffer;
-
-
- for ( ; width > 0; width--, column++ )
- {
- FT_Byte* col = column;
- FT_Byte* col_end = col + height * pitch;
-
-
- for ( ; col < col_end; col += 3 * pitch )
- {
- FT_UInt r = 0;
- FT_UInt g = 0;
- FT_UInt b = 0;
- 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[2 * pitch] = (FT_Byte)( b / 65536 );
- }
- }
- }
- }
-
-#endif /* USE_LEGACY */
-
-
- FT_EXPORT( FT_Error )
- FT_Library_SetLcdFilter( FT_Library library,
- FT_LcdFilter filter )
- {
- static const FT_Byte light_filter[5] =
- { 0, 85, 86, 85, 0 };
- /* the values here sum up to a value larger than 256, */
- /* providing a cheap gamma correction */
- static const FT_Byte default_filter[5] =
- { 0x10, 0x40, 0x70, 0x40, 0x10 };
-
-
- if ( library == NULL )
- return FT_Err_Invalid_Argument;
-
- switch ( filter )
- {
- case FT_LCD_FILTER_NONE:
- library->lcd_filter_func = NULL;
- library->lcd_extra = 0;
- break;
-
- case FT_LCD_FILTER_DEFAULT:
-#if defined( FT_FORCE_LEGACY_LCD_FILTER )
-
- library->lcd_filter_func = _ft_lcd_filter_legacy;
- library->lcd_extra = 0;
-
-#elif defined( FT_FORCE_LIGHT_LCD_FILTER )
-
- memcpy( library->lcd_weights, light_filter, 5 );
- library->lcd_filter_func = _ft_lcd_filter_fir;
- library->lcd_extra = 2;
-
-#else
-
- memcpy( library->lcd_weights, default_filter, 5 );
- library->lcd_filter_func = _ft_lcd_filter_fir;
- library->lcd_extra = 2;
-
-#endif
-
- break;
-
- case FT_LCD_FILTER_LIGHT:
- memcpy( library->lcd_weights, light_filter, 5 );
- library->lcd_filter_func = _ft_lcd_filter_fir;
- library->lcd_extra = 2;
- break;
-
-#ifdef USE_LEGACY
-
- case FT_LCD_FILTER_LEGACY:
- library->lcd_filter_func = _ft_lcd_filter_legacy;
- library->lcd_extra = 0;
- break;
-
-#endif
-
- default:
- return FT_Err_Invalid_Argument;
- }
-
- library->lcd_filter = filter;
- return 0;
- }
-
-#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
- FT_EXPORT( FT_Error )
- FT_Library_SetLcdFilter( FT_Library library,
- FT_LcdFilter filter )
- {
- FT_UNUSED( library );
- FT_UNUSED( filter );
-
- return FT_Err_Unimplemented_Feature;
- }
-
-#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftmac.c b/Build/source/libs/freetype2/src/base/ftmac.c
deleted file mode 100644
index 4f4ab9d8ee7..00000000000
--- a/Build/source/libs/freetype2/src/base/ftmac.c
+++ /dev/null
@@ -1,1130 +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-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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_INTERNAL_STREAM_H
-
- /* 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
-
- /* The ResourceIndex type was available SDKs on 10.5 */
-#ifndef HAVE_TYPE_RESOURCE_INDEX
-typedef short ResourceIndex;
-#endif
-
-#include <CoreServices/CoreServices.h>
-#include <ApplicationServices/ApplicationServices.h>
-#include <sys/syslimits.h> /* PATH_MAX */
-
-#define FT_DEPRECATED_ATTRIBUTE
-
-#include FT_MAC_H
-
- /* undefine blocking-macros in ftmac.h */
-#undef FT_GetFile_From_Mac_Name( a, b, c )
-#undef FT_GetFile_From_Mac_ATS_Name( a, b, c )
-#undef FT_New_Face_From_FOND( a, b, c, d )
-#undef FT_New_Face_From_FSSpec( a, b, c, d )
-#undef FT_New_Face_From_FSRef( a, b, c, d )
-
-#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_Err_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_Err_Unknown_File_Format;
-
- if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
- return FT_Err_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;
-
-
- err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
- if ( FT_Err_Ok != err )
- return err;
-
- if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
- return FT_Err_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_Err_Unimplemented_Feature;
-#else
- FSRef ref;
- FT_Error err;
-
-
- err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
- if ( FT_Err_Ok != err )
- return err;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
- pathSpec, NULL ) )
- return FT_Err_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_Err_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;
- FamRec* fond;
- short i, face, face_all;
-
-
- fond = (FamRec*)fond_data;
- 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,
- 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_Err_Invalid_Argument;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, &par_ref ) )
- return FT_Err_Invalid_Argument;
-
- if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) )
- return FT_Err_Invalid_Argument;
-
- if ( ft_strlen( (char *)path_lwfn ) + 1 + base_lwfn[0] > path_size )
- return FT_Err_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_Err_Cannot_Open_Resource;
-
- if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
- NULL, NULL, NULL, NULL ) )
- return FT_Err_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 ( FT_Err_Ok == 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( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
- 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( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
- 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;
- }
-
-
- /* Finalizer for a memory stream; gets called by FT_Done_Face().
- It frees the memory it uses. */
- static void
- memory_stream_close( FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
-
-
- FT_FREE( stream->base );
-
- stream->size = 0;
- stream->base = 0;
- stream->close = 0;
- }
-
-
- /* Create a new memory stream from a buffer and a size. */
- 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;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !base )
- return FT_Err_Invalid_Argument;
-
- *astream = 0;
- 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. */
- static 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;
- 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 );
- }
-
- /* At this point, 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 = 0;
-
- error = FT_Open_Face( library, &args, face_index, aface );
- if ( error == FT_Err_Ok )
- (*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
- else
- FT_Stream_Free( stream, 0 );
-
- 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_Err_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;
-
-
- sfnt = GetResource( FT_MAKE_TAG( 's', 'f', 'n', 't' ), sfnt_id );
- if ( sfnt == NULL )
- return FT_Err_Invalid_Handle;
-
- sfnt_size = (FT_ULong)GetHandleSize( sfnt );
- 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 && sfnt_data[0] == 'O' &&
- sfnt_data[1] == 'T' &&
- sfnt_data[2] == 'T' &&
- sfnt_data[3] == 'O';
-
- return open_face_from_buffer( library,
- sfnt_data,
- sfnt_size,
- face_index,
- is_cff ? "cff" : "truetype",
- aface );
- }
-
-
- /* 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, num_faces_in_fond;
-
-
- if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
- return FT_Err_Cannot_Open_Resource;
-
- UseResFile( res_ref );
- if ( ResError() )
- return FT_Err_Cannot_Open_Resource;
-
- num_faces_in_res = 0;
- for ( res_index = 1; ; ++res_index )
- {
- fond = Get1IndResource( FT_MAKE_TAG( 'F', 'O', 'N', 'D' ),
- 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 ( FT_Err_Ok == error && NULL != aface && NULL != *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;
-
-
- GetResInfo( fond, &fond_id, &fond_type, fond_name );
- if ( ResError() != noErr || fond_type != FT_MAKE_TAG( 'F', 'O', 'N', 'D' ) )
- return FT_Err_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 ( FT_Err_Ok == 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_Err_Unknown_File_Format;
-
- found_no_lwfn_file:
- if ( have_sfnt && FT_Err_Ok != 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 == FT_MAKE_TAG( 'L', 'W', 'F', 'N' ) )
- 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 == 0 )
- 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_Err_Invalid_Argument;
-
- error = FT_Err_Ok;
- *aface = NULL;
-
- /* try resourcefork based font: LWFN, FFIL */
- error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
- face_index, aface );
- if ( error != 0 || *aface != NULL )
- 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];
-
-
- if ( !ref )
- return FT_Err_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 != 0 || *aface != NULL )
- 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_Err_Unimplemented_Feature;
-#else
- FSRef ref;
-
-
- if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr )
- return FT_Err_Invalid_Argument;
- else
- return FT_New_Face_From_FSRef( library, &ref, face_index, aface );
-#endif
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftmm.c b/Build/source/libs/freetype2/src/base/ftmm.c
deleted file mode 100644
index 586d5e84db1..00000000000
--- a/Build/source/libs/freetype2/src/base/ftmm.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmm.c */
-/* */
-/* Multiple Master font support (body). */
-/* */
-/* Copyright 1996-2001, 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. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_MULTIPLE_MASTERS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_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_Err_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;
- }
-
-
- /* 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;
-
-
- 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;
-
-
- 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;
-
-
- 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 );
- }
-
- 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;
-
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_Err_Invalid_Argument;
- if ( service->set_var_design )
- error = service->set_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;
-
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_Err_Invalid_Argument;
- if ( service->set_mm_blend )
- error = service->set_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_Set_Var_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords )
- {
- FT_Error error;
- FT_Service_MultiMasters service;
-
-
- error = ft_face_get_mm_service( face, &service );
- if ( !error )
- {
- error = FT_Err_Invalid_Argument;
- if ( service->set_mm_blend )
- error = service->set_mm_blend( face, num_coords, coords );
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftnames.c b/Build/source/libs/freetype2/src/base/ftnames.c
deleted file mode 100644
index 7fde5c40bf6..00000000000
--- a/Build/source/libs/freetype2/src/base/ftnames.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftnames.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-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. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.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 ftnames.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 ftnames.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_NameEntryRec* entry = ttface->name_table.names + idx;
-
-
- /* load name on demand */
- if ( entry->stringLength > 0 && entry->string == NULL )
- {
- 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;
- }
-
-
-#endif /* TT_CONFIG_OPTION_SFNT_NAMES */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftobjs.c b/Build/source/libs/freetype2/src/base/ftobjs.c
deleted file mode 100644
index 8208e2a451d..00000000000
--- a/Build/source/libs/freetype2/src/base/ftobjs.c
+++ /dev/null
@@ -1,4198 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftobjs.c */
-/* */
-/* The FreeType private base classes (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_IDS_H
-#include FT_OUTLINE_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
-
-#define GRID_FIT_METRICS
-
- 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;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !args )
- return FT_Err_Invalid_Argument;
-
- *astream = 0;
- 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,
- args->memory_size );
- }
- 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;
- }
- else
- error = FT_Err_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 );
- }
- }
-
-
-#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;
-
-
- 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->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 = 0;
- slot->control_data = 0;
- slot->control_len = 0;
- slot->other = 0;
- 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 );
-
- /* free glyph loader */
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- {
- FT_GlyphLoader_Done( slot->internal->loader );
- slot->internal->loader = 0;
- }
-
- 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;
-
-
- if ( !face || !face->driver )
- return FT_Err_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 = 0;
-
-
- Exit:
- FT_TRACE4(( "FT_New_GlyphSlot: Return %d\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;
-
- 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( metrics->vertBearingX + metrics->width );
- bottom = FT_PIX_CEIL( metrics->vertBearingY + metrics->height );
-
- metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
- metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
-
- metrics->width = right - metrics->vertBearingX;
- metrics->height = bottom - metrics->vertBearingY;
- }
- else
- {
- metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
- metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
-
- right = FT_PIX_CEIL ( metrics->horiBearingX + metrics->width );
- bottom = FT_PIX_FLOOR( metrics->horiBearingY - metrics->height );
-
- metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX );
- metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY );
-
- metrics->width = right - metrics->horiBearingX;
- metrics->height = 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 = 0;
- FT_Module hinter;
-
-
- if ( !face || !face->size || !face->glyph )
- return FT_Err_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;
- }
-
- /*
- * 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.
- *
- * - Then, autohint if FT_LOAD_FORCE_AUTOHINT is set
- * or if we don't have a native font hinter.
- *
- * - Otherwise, auto-hint for LIGHT hinting mode.
- *
- * - Exception: The font requires the unpatented
- * bytecode interpreter to load properly.
- */
-
- autohint = 0;
- if ( hinter &&
- ( load_flags & FT_LOAD_NO_HINTING ) == 0 &&
- ( load_flags & FT_LOAD_NO_AUTOHINT ) == 0 &&
- FT_DRIVER_IS_SCALABLE( driver ) &&
- FT_DRIVER_USES_OUTLINES( driver ) &&
- face->internal->transform_matrix.yy > 0 &&
- face->internal->transform_matrix.yx == 0 )
- {
- if ( ( load_flags & FT_LOAD_FORCE_AUTOHINT ) != 0 ||
- !FT_DRIVER_HAS_HINTER( driver ) )
- autohint = 1;
- else
- {
- FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags );
-
-
- if ( mode == FT_RENDER_MODE_LIGHT ||
- face->internal->ignore_unpatented_hinter )
- autohint = 1;
- }
- }
-
- if ( autohint )
- {
- FT_AutoHinter_Service 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_Service)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 &&
- ( face->face_flags & FT_FACE_FLAG_SCALABLE ) )
- {
- 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 );
- /* transform advance */
- FT_Vector_Transform( &slot->advance, &internal->transform_matrix );
- }
- }
-
- /* 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_Err_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 = 0;
-
- /* 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 = 0;
-
- /* 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 );
-
- /* check whether we need to drop the driver's glyph loader */
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- FT_GlyphLoader_Done( driver->glyph_loader );
- }
-
-
- /*************************************************************************/
- /* */
- /* <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_Err_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_Err_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 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 = 0;
- FT_Error error, error2;
- FT_Face_Internal internal = NULL;
-
-
- 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;
-
- if ( FT_NEW( internal ) )
- goto Fail;
-
- face->internal = internal;
-
- face->driver = driver;
- face->memory = memory;
- face->stream = stream;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- {
- int i;
-
-
- face->internal->incremental_interface = 0;
- 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
-
- if ( clazz->init_face )
- error = clazz->init_face( stream,
- face,
- (FT_Int)face_index,
- num_params,
- params );
- 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 && error2 != FT_Err_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 = 0;
- }
-
- 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_Err_Invalid_Argument;
-
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (char*)pathname;
-
- return FT_Open_Face( library, &args, face_index, aface );
- }
-
-#endif /* !FT_MACINTOSH */
-
-
- /* 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_Err_Invalid_Argument;
-
- args.flags = FT_OPEN_MEMORY;
- args.memory_base = file_base;
- args.memory_size = file_size;
-
- return FT_Open_Face( library, &args, face_index, aface );
- }
-
-
-#if !defined( FT_MACINTOSH ) && defined( 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 = 0;
- stream->close = 0;
- }
-
-
- /* 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;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !base )
- return FT_Err_Invalid_Argument;
-
- *astream = 0;
- 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 */
- static 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 );
- }
-
- error = FT_Open_Face( library, &args, face_index, aface );
-
- if ( error == FT_Err_Ok )
- (*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
- else
- {
- FT_Stream_Close( stream );
- FT_FREE( stream );
- }
-
- return error;
- }
-
-
- /* 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;
- int i, type, flags;
- FT_Long len;
- FT_Long pfb_len, pfb_pos, pfb_lenpos;
- FT_Long 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, offsets[i] );
- if ( error )
- goto Exit;
- if ( FT_READ_LONG( temp ) )
- goto Exit;
- pfb_len += temp + 6;
- }
-
- 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, offsets[i] );
- if ( error )
- goto Exit2;
- if ( FT_READ_LONG( rlen ) )
- goto Exit;
- if ( FT_READ_USHORT( flags ) )
- goto Exit;
- rlen -= 2; /* the flags are part of the resource */
- if ( ( flags >> 8 ) == type )
- len += rlen;
- else
- {
- 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;
-
- 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;
- }
-
- error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen );
- pfb_pos += rlen;
- }
-
- pfb_data[pfb_pos++] = 0x80;
- pfb_data[pfb_pos++] = 3;
-
- 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:
- 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 the 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;
- FT_Error error;
- FT_Long flag_offset;
- FT_Long rlen;
- int is_cff;
- FT_Long face_index_in_resource = 0;
-
-
- if ( face_index == -1 )
- face_index = 0;
- if ( face_index >= resource_cnt )
- return FT_Err_Cannot_Open_Resource;
-
- flag_offset = 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_Err_Cannot_Open_Resource;
-
- if ( FT_ALLOC( sfnt_data, (FT_Long)rlen ) )
- return error;
- error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, rlen );
- if ( error )
- goto Exit;
-
- is_cff = rlen > 4 && sfnt_data[0] == 'O' &&
- sfnt_data[1] == 'T' &&
- sfnt_data[2] == 'T' &&
- sfnt_data[3] == 'O';
-
- error = open_face_from_buffer( library,
- sfnt_data,
- 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, rdara_pos;
- FT_Long *data_offsets;
- FT_Long count;
-
-
- error = FT_Raccess_Get_HeaderInfo( library, stream, resource_offset,
- &map_offset, &rdara_pos );
- if ( error )
- return error;
-
- error = FT_Raccess_Get_DataOffsets( library, stream,
- map_offset, rdara_pos,
- FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
- &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;
- }
-
- error = FT_Raccess_Get_DataOffsets( library, stream,
- map_offset, rdara_pos,
- FT_MAKE_TAG( 's', 'f', 'n', 't' ),
- &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 ( NULL == stream )
- return FT_Err_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 )
- return FT_Err_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;
- int i;
-
- char * file_names[FT_RACCESS_N_RULES];
- FT_Long offsets[FT_RACCESS_N_RULES];
- FT_Error errors[FT_RACCESS_N_RULES];
-
- FT_Open_Args args2;
- FT_Stream stream2;
-
-
- FT_Raccess_Guess( library, stream,
- args->pathname, file_names, offsets, errors );
-
- for ( i = 0; i < FT_RACCESS_N_RULES; i++ )
- {
- if ( errors[i] )
- {
- FT_TRACE3(( "Error[%d] 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 ( 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;
- }
-
- 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. */
- /* 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_ERROR_BASE( error ) == FT_Err_Unknown_File_Format )
- {
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_raccess
-
- FT_TRACE3(( "Try as dfont: %s ...", args->pathname ));
-
- 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_ERROR_BASE( error ) == FT_Err_Unknown_File_Format ||
- FT_ERROR_BASE( error ) == FT_Err_Invalid_Stream_Operation ) &&
- ( args->flags & FT_OPEN_PATHNAME ) )
- error = load_face_in_embedded_rfork( library, stream,
- face_index, aface, args );
- return error;
- }
-
-#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 )
- {
- FT_Error error;
- FT_Driver driver;
- FT_Memory memory;
- FT_Stream stream;
- FT_Face face = 0;
- FT_ListNode node = 0;
- FT_Bool external_stream;
- FT_Module* cur;
- FT_Module* limit;
-
-
- /* test for valid `library' delayed to */
- /* FT_Stream_New() */
-
- if ( ( !aface && face_index >= 0 ) || !args )
- return FT_Err_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 = 0;
-
-
- if ( args->flags & FT_OPEN_PARAMS )
- {
- num_params = args->num_params;
- params = args->params;
- }
-
- error = open_face( driver, stream, face_index,
- num_params, params, &face );
- if ( !error )
- goto Success;
- }
- else
- error = FT_Err_Invalid_Handle;
-
- FT_Stream_Free( stream, external_stream );
- goto Fail;
- }
- else
- {
- /* 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 = 0;
-
-
- driver = FT_DRIVER( cur[0] );
-
- if ( args->flags & FT_OPEN_PARAMS )
- {
- num_params = args->num_params;
- params = args->params;
- }
-
- error = open_face( driver, stream, face_index,
- num_params, params, &face );
- if ( !error )
- goto Success;
-
- if ( FT_ERROR_BASE( error ) != FT_Err_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_ERROR_BASE( error ) != FT_Err_Cannot_Open_Stream &&
- FT_ERROR_BASE( error ) != FT_Err_Unknown_File_Format &&
- FT_ERROR_BASE( error ) != FT_Err_Invalid_Stream_Operation )
- goto Fail2;
-
-#if !defined( FT_MACINTOSH ) && defined( FT_CONFIG_OPTION_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_ERROR_BASE( error ) != FT_Err_Unknown_File_Format )
- goto Fail2;
-#endif /* !FT_MACINTOSH && FT_CONFIG_OPTION_MAC_FONTS */
-
- /* no driver is able to handle this format */
- error = FT_Err_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" ));
-
- /* set the FT_FACE_FLAG_EXTERNAL_STREAM bit for FT_Done_Face */
- if ( external_stream )
- face->face_flags |= FT_FACE_FLAG_EXTERNAL_STREAM;
-
- /* 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 = (FT_Short)-bsize->height;
- if ( bsize->x_ppem < 0 )
- bsize->x_ppem = (FT_Short)-bsize->x_ppem;
- if ( bsize->y_ppem < 0 )
- bsize->y_ppem = -bsize->y_ppem;
- }
- }
-
- /* 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;
- }
-
- if ( aface )
- *aface = face;
- else
- FT_Done_Face( face );
-
- goto Exit;
-
- Fail:
- FT_Done_Face( face );
-
- Exit:
- FT_TRACE4(( "FT_Open_Face: Return %d\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_Err_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_Err_Invalid_Face_Handle;
-
- driver = face->driver;
- if ( !driver )
- return FT_Err_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_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 )
- {
- 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 = 0;
- FT_ListNode node = 0;
-
-
- if ( !face )
- return FT_Err_Invalid_Face_Handle;
-
- if ( !asize )
- return FT_Err_Invalid_Size_Handle;
-
- if ( !face->driver )
- return FT_Err_Invalid_Driver_Handle;
-
- *asize = 0;
-
- 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;
-
- /* for now, do not use any internal fields in size objects */
- size->internal = 0;
-
- 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_Err_Invalid_Size_Handle;
-
- face = size->face;
- if ( !face )
- return FT_Err_Invalid_Face_Handle;
-
- driver = face->driver;
- if ( !driver )
- return FT_Err_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 = 0;
- if ( face->sizes_list.head )
- face->size = (FT_Size)(face->sizes_list.head->data);
- }
-
- destroy_size( memory, size, driver );
- }
- else
- error = FT_Err_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_Err_Invalid_Face_Handle;
-
- /* FT_Bitmap_Size doesn't provide enough info... */
- if ( req->type != FT_SIZE_REQUEST_TYPE_NOMINAL )
- return FT_Err_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 );
-
- 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 )
- {
- if ( size_index )
- *size_index = (FT_ULong)i;
-
- return FT_Err_Ok;
- }
- }
-
- return FT_Err_Invalid_Pixel_Size;
- }
-
-
- /* documentation is in ftobjs.h */
-
- FT_BASE_DEF( void )
- ft_synthesize_vertical_metrics( FT_Glyph_Metrics* metrics,
- FT_Pos advance )
- {
- /* the factor 1.2 is a heuristical value */
- if ( !advance )
- advance = metrics->height * 12 / 10;
-
- metrics->vertBearingX = -( metrics->width / 2 );
- metrics->vertBearingY = ( advance - metrics->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 << 22;
- metrics->y_scale = 1L << 22;
- metrics->ascender = bsize->y_ppem;
- metrics->descender = 0;
- metrics->height = bsize->height << 6;
- metrics->max_advance = bsize->x_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 << 22;
- metrics->y_scale = 1L << 22;
- }
- }
-
-
- /* 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_Err_Invalid_Face_Handle;
-
- if ( strike_index < 0 || strike_index >= face->num_fixed_sizes )
- return FT_Err_Invalid_Argument;
-
- clazz = face->driver->clazz;
-
- if ( clazz->select_size )
- return clazz->select_size( face->size, (FT_ULong)strike_index );
-
- 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_Err_Invalid_Face_Handle;
-
- if ( !req || req->width < 0 || req->height < 0 ||
- req->type >= FT_SIZE_REQUEST_TYPE_MAX )
- return FT_Err_Invalid_Argument;
-
- clazz = face->driver->clazz;
-
- if ( clazz->request_size )
- return clazz->request_size( face->size, req );
-
- /*
- * 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;
-
- FT_TRACE3(( "FT_Request_Size: bitmap strike %lu matched\n",
- strike_index ));
-
- 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;
-
-
- 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;
-
-
- 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 = pixel_width << 6;
- req.height = 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_Err_Invalid_Face_Handle;
-
- if ( !akerning )
- return FT_Err_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 )
- {
- /* 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( akerning->x,
- face->size->metrics.x_ppem, 25 );
- if ( face->size->metrics.y_ppem < 25 )
- akerning->y = FT_MulDiv( akerning->y,
- face->size->metrics.y_ppem, 25 );
-
- akerning->x = FT_PIX_ROUND( akerning->x );
- akerning->y = FT_PIX_ROUND( akerning->y );
- }
- }
- }
- }
-
- 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_Err_Invalid_Face_Handle;
-
- if ( !akerning )
- return FT_Err_Invalid_Argument;
-
- FT_FACE_FIND_SERVICE( face, service, KERNING );
- if ( !service )
- return FT_Err_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_Err_Invalid_Face_Handle;
-
- if ( encoding == FT_ENCODING_NONE )
- return FT_Err_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_Err_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_Err_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_Err_Invalid_Face_Handle;
-
- cur = face->charmaps;
- if ( !cur )
- return FT_Err_Invalid_CharMap_Handle;
- if ( FT_Get_CMap_Format( charmap ) == 14 )
- return FT_Err_Invalid_Argument;
-
- limit = cur + face->num_charmaps;
-
- for ( ; cur < limit; cur++ )
- {
- if ( cur[0] == charmap )
- {
- face->charmap = cur[0];
- return 0;
- }
- }
- return FT_Err_Invalid_Argument;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Int )
- FT_Get_Charmap_Index( FT_CharMap charmap )
- {
- FT_Int i;
-
-
- 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;
-
-
- if ( clazz == NULL || charmap == NULL || charmap->face == NULL )
- return FT_Err_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 );
-
-
- result = cmap->clazz->char_index( cmap, charcode );
- }
- 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;
-
-
- if ( face && face->charmap )
- {
- 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 )
- {
- FT_UInt32 code = (FT_UInt32)charcode;
- FT_CMap cmap = FT_CMAP( face->charmap );
-
-
- gindex = cmap->clazz->char_next( cmap, &code );
- result = ( gindex == 0 ) ? 0 : code;
- }
-
- if ( agindex )
- *agindex = gindex;
-
- return result;
- }
-
-
- /* 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 != NULL )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
-
-
- result = vcmap->clazz->char_var_index( vcmap, ucmap, charcode,
- 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 != NULL )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
-
-
- result = vcmap->clazz->char_var_default( vcmap, charcode,
- 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 != NULL )
- {
- 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 != NULL )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- result = vcmap->clazz->charvariant_list( vcmap, memory, 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 != NULL )
- {
- FT_CMap vcmap = FT_CMAP( charmap );
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- result = vcmap->clazz->variantchar_list( vcmap, memory,
- 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 ) )
- {
- 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_Err_Invalid_Argument;
-
-
- /* clean up buffer */
- if ( buffer && buffer_max > 0 )
- ((FT_Byte*)buffer)[0] = 0;
-
- if ( face &&
- glyph_index <= (FT_UInt)face->num_glyphs &&
- FT_HAS_GLYPH_NAMES( face ) )
- {
- FT_Service_GlyphDict service;
-
-
- FT_FACE_LOOKUP_SERVICE( face,
- service,
- GLYPH_DICT );
-
- if ( service && service->get_name )
- error = service->get_name( face, glyph_index, buffer, buffer_max );
- }
-
- 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 = 0;
- FT_Service_SFNT_Table service;
-
-
- if ( face && FT_IS_SFNT( face ) )
- {
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( service != NULL )
- 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_Err_Invalid_Face_Handle;
-
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( service == NULL )
- return FT_Err_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;
-
-
- if ( !face || !FT_IS_SFNT( face ) )
- return FT_Err_Invalid_Face_Handle;
-
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( service == NULL )
- return FT_Err_Unimplemented_Feature;
-
- return service->table_info( face, table_index, tag, 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 == NULL )
- 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 == NULL )
- 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 == NULL )
- return FT_Err_Bad_Argument;
-
- face = size->face;
- if ( face == NULL || face->driver == NULL )
- return FT_Err_Bad_Argument;
-
- /* 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 = 0;
-
-
- if ( !library )
- goto Exit;
-
- cur = library->renderers.head;
-
- if ( node )
- {
- if ( *node )
- cur = (*node)->next;
- *node = 0;
- }
-
- 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;
-
-
- 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 = module->library;
- FT_Memory memory = library->memory;
- FT_ListNode node;
-
-
- node = FT_List_Find( &library->renderers, module );
- if ( node )
- {
- FT_Renderer render = FT_RENDERER( module );
-
-
- /* release raster object, if any */
- if ( 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;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !renderer )
- return FT_Err_Invalid_Argument;
-
- node = FT_List_Find( &library->renderers, renderer );
- if ( !node )
- {
- error = FT_Err_Invalid_Argument;
- goto Exit;
- }
-
- FT_List_Up( &library->renderers, node );
-
- if ( renderer->glyph_format == FT_GLYPH_FORMAT_OUTLINE )
- library->cur_renderer = renderer;
-
- if ( num_params > 0 )
- {
- FT_Renderer_SetModeFunc set_mode = renderer->clazz->set_mode;
-
-
- for ( ; num_params > 0; num_params-- )
- {
- error = set_mode( renderer, parameters->tag, parameters->data );
- if ( error )
- break;
- }
- }
-
- 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 = 0;
- FT_Bool update = 0;
-
-
- /* 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_ERROR_BASE( error ) != FT_Err_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 );
- update = 1;
- }
-
- /* if we changed the current renderer for the glyph image format */
- /* we need to select it as the next current one */
- if ( !error && update && renderer )
- FT_Set_Renderer( library, renderer, 0, 0 );
- }
- }
-
- 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 )
- return FT_Err_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;
-
-
- /* finalize client-data - before anything else */
- if ( module->generic.finalizer )
- module->generic.finalizer( module );
-
- if ( library && library->auto_hinter == module )
- library->auto_hinter = 0;
-
- /* 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;
- FT_UInt nn;
-
-
-#define FREETYPE_VER_FIXED ( ( (FT_Long)FREETYPE_MAJOR << 16 ) | \
- FREETYPE_MINOR )
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !clazz )
- return FT_Err_Invalid_Argument;
-
- /* check freetype version */
- if ( clazz->module_requires > FREETYPE_VER_FIXED )
- return FT_Err_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_Err_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_Err_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 ) )
- {
- /* allocate glyph loader if needed */
- FT_Driver driver = FT_DRIVER( module );
-
-
- driver->clazz = (FT_Driver_Class)module->clazz;
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- {
- error = FT_GlyphLoader_New( memory, &driver->glyph_loader );
- if ( error )
- goto Fail;
- }
- }
-
- 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_DRIVER( module ) )
- {
- FT_Driver driver = FT_DRIVER( module );
-
-
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- FT_GlyphLoader_Done( driver->glyph_loader );
- }
-
- if ( FT_MODULE_IS_RENDERER( module ) )
- {
- FT_Renderer renderer = FT_RENDERER( module );
-
-
- if ( 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 = 0;
- 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_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 ( result == NULL )
- {
- /* 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 != NULL )
- 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_Err_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] = 0;
-
- /* destroy the module */
- Destroy_Module( module );
-
- return FT_Err_Ok;
- }
- }
- }
- return FT_Err_Invalid_Driver_Handle;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** L I B R A R Y ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* documentation is in ftmodapi.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_New_Library( FT_Memory memory,
- FT_Library *alibrary )
- {
- FT_Library library = 0;
- FT_Error error;
-
-
- if ( !memory )
- return FT_Err_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;
-
- /* allocate the render pool */
- library->raster_pool_size = FT_RENDER_POOL_SIZE;
-#if FT_RENDER_POOL_SIZE > 0
- if ( FT_ALLOC( library->raster_pool, FT_RENDER_POOL_SIZE ) )
- goto Fail;
-#endif
-
- /* That's ok now */
- *alibrary = library;
-
- return FT_Err_Ok;
-
- Fail:
- 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_Err_Invalid_Library_Handle;
-
- memory = library->memory;
-
- /* Discard client-data */
- if ( library->generic.finalizer )
- library->generic.finalizer( library );
-
- /* 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
- */
- {
- FT_UInt n;
-
-
- for ( n = 0; n < library->num_modules; n++ )
- {
- FT_Module module = library->modules[n];
- FT_List faces;
-
-
- if ( ( module->clazz->module_flags & FT_MODULE_FONT_DRIVER ) == 0 )
- continue;
-
- faces = &FT_DRIVER(module)->faces_list;
- while ( faces->head )
- FT_Done_Face( FT_FACE( faces->head->data ) );
- }
- }
-
- /* 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] = 0;
- }
- }
- }
-#endif
-
- /* Destroy raster objects */
- FT_FREE( library->raster_pool );
- library->raster_pool_size = 0;
-
- FT_FREE( library );
- 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 );
- if ( service )
- result = service->engine_type;
- }
- }
-
- return result;
- }
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_BASE_DEF( FT_Error )
- ft_stub_set_char_sizes( FT_Size size,
- FT_F26Dot6 width,
- FT_F26Dot6 height,
- FT_UInt horz_res,
- FT_UInt vert_res )
- {
- FT_Size_RequestRec req;
- FT_Driver driver = size->face->driver;
-
-
- if ( driver->clazz->request_size )
- {
- req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
- req.width = width;
- req.height = height;
-
- if ( horz_res == 0 )
- horz_res = vert_res;
-
- if ( vert_res == 0 )
- vert_res = horz_res;
-
- if ( horz_res == 0 )
- horz_res = vert_res = 72;
-
- req.horiResolution = horz_res;
- req.vertResolution = vert_res;
-
- return driver->clazz->request_size( size, &req );
- }
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_Error )
- ft_stub_set_pixel_sizes( FT_Size size,
- FT_UInt width,
- FT_UInt height )
- {
- FT_Size_RequestRec req;
- FT_Driver driver = size->face->driver;
-
-
- if ( driver->clazz->request_size )
- {
- req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
- req.width = width << 6;
- req.height = height << 6;
- req.horiResolution = 0;
- req.vertResolution = 0;
-
- return driver->clazz->request_size( size, &req );
- }
-
- return 0;
- }
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- 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 != NULL &&
- 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;
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftotval.c b/Build/source/libs/freetype2/src/base/ftotval.c
deleted file mode 100644
index b6de6db85d1..00000000000
--- a/Build/source/libs/freetype2/src/base/ftotval.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftotval.c */
-/* */
-/* FreeType API for validating OpenType tables (body). */
-/* */
-/* Copyright 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_SERVICE_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_Err_Invalid_Face_Handle;
- goto Exit;
- }
-
- if ( !( BASE_table &&
- GDEF_table &&
- GPOS_table &&
- GSUB_table &&
- JSTF_table ) )
- {
- error = FT_Err_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_Err_Unimplemented_Feature;
-
- Exit:
- return error;
- }
-
-
- FT_EXPORT_DEF( void )
- FT_OpenType_Free( FT_Face face,
- FT_Bytes table )
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( table );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftoutln.c b/Build/source/libs/freetype2/src/base/ftoutln.c
deleted file mode 100644
index 2bae8573f40..00000000000
--- a/Build/source/libs/freetype2/src/base/ftoutln.c
+++ /dev/null
@@ -1,1090 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftoutln.c */
-/* */
-/* FreeType outline management (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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, 0, 0, 0, 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) << 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 || !func_interface )
- return FT_Err_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 */
-
-
- last = outline->contours[n];
- if ( last < 0 )
- goto Invalid_Outline;
- limit = outline->points + last;
-
- v_start = outline->points[first];
- v_last = outline->points[last];
-
- v_start.x = SCALED( v_start.x ); v_start.y = SCALED( v_start.y );
- 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--;
- }
-
- 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 );
-
- 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 )
- {
- 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;
-
- error = func_interface->conic_to( &v_control, &v_middle, user );
- if ( error )
- goto Exit;
-
- v_control = vec;
- goto Do_Conic;
- }
-
- 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 );
-
- error = func_interface->cubic_to( &vec1, &vec2, &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- error = func_interface->cubic_to( &vec1, &vec2, &v_start, user );
- goto Close;
- }
- }
- }
-
- /* close the contour with a line segment */
- error = func_interface->line_to( &v_start, user );
-
- Close:
- if ( error )
- goto Exit;
-
- first = last + 1;
- }
-
- return 0;
-
- Exit:
- return error;
-
- Invalid_Outline:
- return FT_Err_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_Err_Invalid_Argument;
-
- *anoutline = null_outline;
-
- if ( FT_NEW_ARRAY( anoutline->points, numPoints * 2L ) ||
- FT_NEW_ARRAY( anoutline->tags, numPoints ) ||
- FT_NEW_ARRAY( anoutline->contours, numContours ) )
- goto Fail;
-
- anoutline->n_points = (FT_UShort)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_Err_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 0;
-
- /* 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 0;
- }
-
- Bad:
- return FT_Err_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 ||
- source->n_points != target->n_points ||
- source->n_contours != target->n_contours )
- return FT_Err_Invalid_Argument;
-
- if ( source == target )
- return FT_Err_Ok;
-
- FT_ARRAY_COPY( target->points, source->points, source->n_points );
-
- FT_ARRAY_COPY( target->tags, source->tags, source->n_points );
-
- 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 ( memory && outline )
- {
- 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;
- }
- else
- return FT_Err_Invalid_Argument;
- }
-
-
- /* 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_Err_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;
- char swap;
-
-
- while ( p < q )
- {
- 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_Bool update = 0;
- FT_Renderer renderer;
- FT_ListNode node;
-
-
- if ( !library )
- return FT_Err_Invalid_Library_Handle;
-
- if ( !outline || !params )
- return FT_Err_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_ERROR_BASE( error ) != FT_Err_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 );
- update = 1;
- }
-
- /* if we changed the current renderer for the glyph image format */
- /* we need to select it as the next current one */
- if ( !error && update && renderer )
- FT_Set_Renderer( library, renderer, 0, 0 );
-
- 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_Err_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 % 2 );
- }
-
-
- 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 )
- {
- FT_Vector* points;
- FT_Vector v_prev, v_first, v_next, v_cur;
- FT_Angle rotate, angle_in, angle_out;
- FT_Int c, n, first;
- FT_Int orientation;
-
-
- if ( !outline )
- return FT_Err_Invalid_Argument;
-
- strength /= 2;
- if ( strength == 0 )
- return FT_Err_Ok;
-
- orientation = FT_Outline_Get_Orientation( outline );
- if ( orientation == FT_ORIENTATION_NONE )
- {
- if ( outline->n_contours )
- return FT_Err_Invalid_Argument;
- else
- return FT_Err_Ok;
- }
-
- if ( orientation == FT_ORIENTATION_TRUETYPE )
- rotate = -FT_ANGLE_PI2;
- else
- rotate = FT_ANGLE_PI2;
-
- points = outline->points;
-
- first = 0;
- for ( c = 0; c < outline->n_contours; c++ )
- {
- int last = outline->contours[c];
-
-
- v_first = points[first];
- v_prev = points[last];
- v_cur = v_first;
-
- for ( n = first; n <= last; n++ )
- {
- FT_Vector in, out;
- FT_Angle angle_diff;
- FT_Pos d;
- FT_Fixed scale;
-
-
- if ( n < last )
- v_next = points[n + 1];
- else
- v_next = v_first;
-
- /* compute the in and out vectors */
- in.x = v_cur.x - v_prev.x;
- in.y = v_cur.y - v_prev.y;
-
- out.x = v_next.x - v_cur.x;
- out.y = v_next.y - v_cur.y;
-
- angle_in = FT_Atan2( in.x, in.y );
- angle_out = FT_Atan2( out.x, out.y );
- angle_diff = FT_Angle_Diff( angle_in, angle_out );
- scale = FT_Cos( angle_diff / 2 );
-
- if ( scale < 0x4000L && scale > -0x4000L )
- in.x = in.y = 0;
- else
- {
- d = FT_DivFix( strength, scale );
-
- FT_Vector_From_Polar( &in, d, angle_in + angle_diff / 2 - rotate );
- }
-
- outline->points[n].x = v_cur.x + strength + in.x;
- outline->points[n].y = v_cur.y + strength + in.y;
-
- v_prev = v_cur;
- v_cur = v_next;
- }
-
- 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_Pos xmin = 32768L;
- FT_Pos xmin_ymin = 32768L;
- FT_Pos xmin_ymax = -32768L;
- FT_Vector* xmin_first = NULL;
- FT_Vector* xmin_last = NULL;
-
- short* contour;
-
- FT_Vector* first;
- FT_Vector* last;
- FT_Vector* prev;
- FT_Vector* point;
-
- int i;
- FT_Pos ray_y[3];
- FT_Orientation result[3];
-
-
- 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 which is spanned up by the control points. */
-
- first = outline->points;
- for ( contour = outline->contours;
- contour < outline->contours + outline->n_contours;
- contour++, first = last + 1 )
- {
- FT_Pos contour_xmin = 32768L;
- FT_Pos contour_xmax = -32768L;
- FT_Pos contour_ymin = 32768L;
- FT_Pos contour_ymax = -32768L;
-
-
- last = outline->points + *contour;
-
- /* skip degenerate contours */
- if ( last < first + 2 )
- continue;
-
- for ( point = first; point <= last; ++point )
- {
- if ( point->x < contour_xmin )
- contour_xmin = point->x;
-
- if ( point->x > contour_xmax )
- contour_xmax = point->x;
-
- if ( point->y < contour_ymin )
- contour_ymin = point->y;
-
- if ( point->y > contour_ymax )
- contour_ymax = point->y;
- }
-
- if ( contour_xmin < xmin &&
- contour_xmin != contour_xmax &&
- contour_ymin != contour_ymax )
- {
- xmin = contour_xmin;
- xmin_ymin = contour_ymin;
- xmin_ymax = contour_ymax;
- xmin_first = first;
- xmin_last = last;
- }
- }
-
- if ( xmin == 32768 )
- return FT_ORIENTATION_TRUETYPE;
-
- ray_y[0] = ( xmin_ymin * 3 + xmin_ymax ) >> 2;
- ray_y[1] = ( xmin_ymin + xmin_ymax ) >> 1;
- ray_y[2] = ( xmin_ymin + xmin_ymax * 3 ) >> 2;
-
- for ( i = 0; i < 3; i++ )
- {
- FT_Pos left_x;
- FT_Pos right_x;
- FT_Vector* left1;
- FT_Vector* left2;
- FT_Vector* right1;
- FT_Vector* right2;
-
-
- RedoRay:
- left_x = 32768L;
- right_x = -32768L;
-
- left1 = left2 = right1 = right2 = NULL;
-
- prev = xmin_last;
- for ( point = xmin_first; point <= xmin_last; prev = point, ++point )
- {
- FT_Pos tmp_x;
-
-
- if ( point->y == ray_y[i] || prev->y == ray_y[i] )
- {
- ray_y[i]++;
- goto RedoRay;
- }
-
- if ( ( point->y < ray_y[i] && prev->y < ray_y[i] ) ||
- ( point->y > ray_y[i] && prev->y > ray_y[i] ) )
- continue;
-
- tmp_x = FT_MulDiv( point->x - prev->x,
- ray_y[i] - prev->y,
- point->y - prev->y ) + prev->x;
-
- if ( tmp_x < left_x )
- {
- left_x = tmp_x;
- left1 = prev;
- left2 = point;
- }
-
- if ( tmp_x > right_x )
- {
- right_x = tmp_x;
- right1 = prev;
- right2 = point;
- }
- }
-
- if ( left1 && right1 )
- {
- if ( left1->y < left2->y && right1->y > right2->y )
- result[i] = FT_ORIENTATION_TRUETYPE;
- else if ( left1->y > left2->y && right1->y < right2->y )
- result[i] = FT_ORIENTATION_POSTSCRIPT;
- else
- result[i] = FT_ORIENTATION_NONE;
- }
- }
-
- if ( result[0] != FT_ORIENTATION_NONE &&
- ( result[0] == result[1] || result[0] == result[2] ) )
- return result[0];
-
- if ( result[1] != FT_ORIENTATION_NONE && result[1] == result[2] )
- return result[1];
-
- return FT_ORIENTATION_TRUETYPE;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftpatent.c b/Build/source/libs/freetype2/src/base/ftpatent.c
deleted file mode 100644
index d63f191c3ea..00000000000
--- a/Build/source/libs/freetype2/src/base/ftpatent.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpatent.c */
-/* */
-/* FreeType API for checking patented TrueType bytecode instructions */
-/* (body). */
-/* */
-/* Copyright 2007 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
-
-
- static FT_Bool
- _tt_check_patents_in_range( FT_Stream stream,
- FT_ULong size )
- {
- FT_Bool result = FALSE;
- FT_Error error;
- FT_Bytes p, end;
-
-
- if ( FT_FRAME_ENTER( size ) )
- return 0;
-
- p = stream->cursor;
- end = p + size;
-
- while ( p < end )
- {
- switch (p[0])
- {
- case 0x06: /* SPvTL // */
- case 0x07: /* SPvTL + */
- case 0x08: /* SFvTL // */
- case 0x09: /* SFvTL + */
- case 0x0A: /* SPvFS */
- case 0x0B: /* SFvFS */
- result = TRUE;
- goto Exit;
-
- case 0x40:
- if ( p + 1 >= end )
- goto Exit;
-
- p += p[1] + 2;
- break;
-
- case 0x41:
- if ( p + 1 >= end )
- goto Exit;
-
- p += p[1] * 2 + 2;
- break;
-
- case 0x71: /* DELTAP2 */
- case 0x72: /* DELTAP3 */
- case 0x73: /* DELTAC0 */
- case 0x74: /* DELTAC1 */
- case 0x75: /* DELTAC2 */
- result = TRUE;
- goto Exit;
-
- case 0xB0:
- case 0xB1:
- case 0xB2:
- case 0xB3:
- case 0xB4:
- case 0xB5:
- case 0xB6:
- case 0xB7:
- p += ( p[0] - 0xB0 ) + 2;
- break;
-
- case 0xB8:
- case 0xB9:
- case 0xBA:
- case 0xBB:
- case 0xBC:
- case 0xBD:
- case 0xBE:
- case 0xBF:
- p += ( p[0] - 0xB8 ) * 2 + 3;
- break;
-
- default:
- p += 1;
- break;
- }
- }
-
- Exit:
- FT_FRAME_EXIT();
- return result;
- }
-
-
- static FT_Bool
- _tt_check_patents_in_table( FT_Face face,
- FT_ULong tag )
- {
- FT_Stream stream = face->stream;
- FT_Error error;
- FT_Service_SFNT_Table service;
- FT_Bool result = FALSE;
-
-
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
-
- if ( service )
- {
- FT_ULong offset, size;
-
-
- error = service->table_info( face, tag, &offset, &size );
- if ( error ||
- FT_STREAM_SEEK( offset ) )
- goto Exit;
-
- result = _tt_check_patents_in_range( stream, size );
- }
-
- Exit:
- return result;
- }
-
-
- static FT_Bool
- _tt_face_check_patents( FT_Face face )
- {
- FT_Stream stream = face->stream;
- FT_UInt gindex;
- FT_Error error;
- FT_Bool result;
-
- FT_Service_TTGlyf service;
-
-
- result = _tt_check_patents_in_table( face, TTAG_fpgm );
- if ( result )
- goto Exit;
-
- result = _tt_check_patents_in_table( face, TTAG_prep );
- if ( result )
- goto Exit;
-
- FT_FACE_FIND_SERVICE( face, service, TT_GLYF );
- if ( service == NULL )
- goto Exit;
-
- for ( gindex = 0; gindex < (FT_UInt)face->num_glyphs; gindex++ )
- {
- FT_ULong offset, num_ins, size;
- FT_Int num_contours;
-
-
- offset = service->get_location( face, gindex, &size );
- if ( size == 0 )
- continue;
-
- if ( FT_STREAM_SEEK( offset ) ||
- FT_READ_SHORT( num_contours ) )
- continue;
-
- if ( num_contours >= 0 ) /* simple glyph */
- {
- if ( FT_STREAM_SKIP( 8 + num_contours * 2 ) )
- continue;
- }
- else /* compound glyph */
- {
- FT_Bool has_instr = 0;
-
-
- if ( FT_STREAM_SKIP( 8 ) )
- continue;
-
- /* now read each component */
- for (;;)
- {
- FT_UInt flags, toskip;
-
-
- if( FT_READ_USHORT( flags ) )
- break;
-
- toskip = 2 + 1 + 1;
-
- if ( ( flags & ( 1 << 0 ) ) != 0 ) /* ARGS_ARE_WORDS */
- toskip += 2;
-
- if ( ( flags & ( 1 << 3 ) ) != 0 ) /* WE_HAVE_A_SCALE */
- toskip += 2;
- else if ( ( flags & ( 1 << 6 ) ) != 0 ) /* WE_HAVE_X_Y_SCALE */
- toskip += 4;
- else if ( ( flags & ( 1 << 7 ) ) != 0 ) /* WE_HAVE_A_2x2 */
- toskip += 8;
-
- if ( ( flags & ( 1 << 8 ) ) != 0 ) /* WE_HAVE_INSTRUCTIONS */
- has_instr = 1;
-
- if ( FT_STREAM_SKIP( toskip ) )
- goto NextGlyph;
-
- if ( ( flags & ( 1 << 5 ) ) == 0 ) /* MORE_COMPONENTS */
- break;
- }
-
- if ( !has_instr )
- goto NextGlyph;
- }
-
- if ( FT_READ_USHORT( num_ins ) )
- continue;
-
- result = _tt_check_patents_in_range( stream, num_ins );
- if ( result )
- goto Exit;
-
- NextGlyph:
- ;
- }
-
- Exit:
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Bool )
- FT_Face_CheckTrueTypePatents( FT_Face face )
- {
- FT_Bool result = FALSE;
-
-
- if ( face && FT_IS_SFNT( face ) )
- result = _tt_face_check_patents( face );
-
- return result;
- }
-
-
- /* documentation is in freetype.h */
-
- FT_EXPORT_DEF( FT_Bool )
- FT_Face_SetUnpatentedHinting( FT_Face face,
- FT_Bool value )
- {
- FT_Bool result = 0;
-
-
-#if defined( TT_CONFIG_OPTION_UNPATENTED_HINTING ) && \
- !defined( TT_CONFIG_OPTION_BYTECODE_INTEPRETER )
- if ( face && FT_IS_SFNT( face ) )
- {
- result = !face->internal->ignore_unpatented_hinter;
- face->internal->ignore_unpatented_hinter = !value;
- }
-#else
- FT_UNUSED( face );
- FT_UNUSED( value );
-#endif
-
- return result;
- }
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftpfr.c b/Build/source/libs/freetype2/src/base/ftpfr.c
deleted file mode 100644
index 9e930ddf7e3..00000000000
--- a/Build/source/libs/freetype2/src/base/ftpfr.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpfr.c */
-/* */
-/* FreeType API for accessing PFR-specific data (body). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.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;
-
-
- 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;
-
-
- service = ft_pfr_check( face );
- if ( service )
- {
- error = service->get_metrics( face,
- aoutline_resolution,
- ametrics_resolution,
- ametrics_x_scale,
- ametrics_y_scale );
- }
- else if ( face )
- {
- FT_Fixed x_scale, y_scale;
-
-
- /* this is not a PFR font */
- *aoutline_resolution = face->units_per_EM;
- *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;
- }
- *ametrics_x_scale = x_scale;
- *ametrics_y_scale = y_scale;
- }
- else
- error = FT_Err_Invalid_Argument;
-
- 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;
-
-
- service = ft_pfr_check( face );
- if ( service )
- error = service->get_kerning( face, left, right, avector );
- else if ( face )
- error = FT_Get_Kerning( face, left, right,
- FT_KERNING_UNSCALED, avector );
- else
- error = FT_Err_Invalid_Argument;
-
- 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;
-
-
- 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_Err_Invalid_Argument;
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftrfork.c b/Build/source/libs/freetype2/src/base/ftrfork.c
deleted file mode 100644
index 5a835ee6389..00000000000
--- a/Build/source/libs/freetype2/src/base/ftrfork.c
+++ /dev/null
@@ -1,811 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrfork.c */
-/* */
-/* Embedded resource forks accessor (body). */
-/* */
-/* Copyright 2004, 2005, 2006, 2007 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
-
-
-#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, rdata_len;
- int allzeros, allmatch, i;
- FT_Long type_list;
-
- FT_UNUSED( library );
-
-
- error = FT_Stream_Seek( stream, rfork_offset );
- if ( error )
- return error;
-
- error = FT_Stream_Read( stream, (FT_Byte *)head, 16 );
- if ( error )
- return error;
-
- *rdata_pos = rfork_offset + ( ( head[0] << 24 ) |
- ( head[1] << 16 ) |
- ( head[2] << 8 ) |
- head[3] );
- map_pos = rfork_offset + ( ( 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] .. head[15] */
-
- if ( *rdata_pos + rdata_len != map_pos || map_pos == rfork_offset )
- return FT_Err_Unknown_File_Format;
-
- error = FT_Stream_Seek( stream, 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_Err_Unknown_File_Format;
-
- /* If we have reached this point then it is probably a mac resource */
- /* file. Now, does it contain any interesting resources? */
- /* Skip handle to next resource map, the file resource number, and */
- /* attributes. */
- (void)FT_STREAM_SKIP( 4 /* skip handle to next resource map */
- + 2 /* skip file resource number */
- + 2 ); /* skip attributes */
-
- if ( FT_READ_USHORT( type_list ) )
- return error;
- if ( type_list == -1 )
- return FT_Err_Unknown_File_Format;
-
- error = FT_Stream_Seek( stream, 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_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;
- FT_RFork_Ref *ref;
-
-
- error = FT_Stream_Seek( stream, map_offset );
- if ( error )
- return error;
-
- if ( FT_READ_USHORT( cnt ) )
- return error;
- cnt++;
-
- for ( i = 0; i < cnt; ++i )
- {
- if ( FT_READ_LONG( tag_internal ) ||
- FT_READ_USHORT( subcnt ) ||
- FT_READ_USHORT( 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 ) ) ));
-
- if ( tag_internal == tag )
- {
- *count = subcnt + 1;
- rpos += map_offset;
-
- error = FT_Stream_Seek( stream, rpos );
- if ( error )
- return error;
-
- if ( FT_NEW_ARRAY( ref, *count ) )
- return error;
-
- for ( j = 0; j < *count; ++j )
- {
- if ( FT_READ_USHORT( ref[j].res_id ) )
- goto Exit;
- if ( FT_STREAM_SKIP( 2 ) ) /* resource name */
- goto Exit;
- if ( FT_READ_LONG( temp ) )
- goto Exit;
- if ( FT_STREAM_SKIP( 4 ) ) /* mbz */
- goto Exit;
-
- ref[j].offset = temp & 0xFFFFFFL;
- }
-
- ft_qsort( ref, *count, sizeof ( FT_RFork_Ref ),
- ( int(*)(const void*, const void*) )
- ft_raccess_sort_ref_by_id );
-
- 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_Err_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. ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef FT_Error
- (*raccess_guess_func)( FT_Library library,
- FT_Stream stream,
- char *base_file_name,
- char **result_file_name,
- FT_Long *result_offset );
-
-
- 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 );
-
-
- /*************************************************************************/
- /**** ****/
- /**** 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_Long i;
-
-
- raccess_guess_func funcs[FT_RACCESS_N_RULES] =
- {
- raccess_guess_apple_double,
- raccess_guess_apple_single,
- raccess_guess_darwin_ufs_export,
- raccess_guess_darwin_newvfs,
- raccess_guess_darwin_hfsplus,
- raccess_guess_vfat,
- raccess_guess_linux_cap,
- raccess_guess_linux_double,
- raccess_guess_linux_netatalk,
- };
-
- 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] = (funcs[i])( library, stream, base_name,
- &(new_names[i]), &(offsets[i]) );
- }
-
- return;
- }
-
-
- 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_Err_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_Err_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_Err_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;
- FT_Memory memory;
- FT_Long base_file_len = ft_strlen( base_file_name );
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- if ( base_file_len + 6 > FT_INT_MAX )
- return FT_Err_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;
- FT_Memory memory;
- FT_Long base_file_len = ft_strlen( base_file_name );
-
- FT_UNUSED( stream );
-
-
- memory = library->memory;
-
- if ( base_file_len + 18 > FT_INT_MAX )
- return FT_Err_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_Err_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_Err_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_Err_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_Err_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_UInt32 entry_id, entry_offset, entry_length = 0;
-
- const FT_UInt32 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_Err_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_Err_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
- FT_Stream_Skip( stream, 4 + 4 ); /* offset + length */
- }
-
- return FT_Err_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;
- char* tmp;
- const char* slash;
- unsigned 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, 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 )
- {
- 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/Build/source/libs/freetype2/src/base/ftstream.c b/Build/source/libs/freetype2/src/base/ftstream.c
deleted file mode 100644
index 569e46c79bf..00000000000
--- a/Build/source/libs/freetype2/src/base/ftstream.c
+++ /dev/null
@@ -1,845 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstream.c */
-/* */
-/* I/O stream support (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2004, 2005, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 = 0;
- stream->read = 0;
- stream->close = 0;
- }
-
-
- 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;
-
-
- stream->pos = pos;
-
- 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_Err_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_Err_Invalid_Stream_Operation;
- }
-
- return error;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Stream_Skip( FT_Stream stream,
- FT_Long distance )
- {
- if ( distance < 0 )
- return FT_Err_Invalid_Stream_Operation;
-
- return FT_Stream_Seek( stream, (FT_ULong)( stream->pos + distance ) );
- }
-
-
- FT_BASE_DEF( FT_Long )
- 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_Err_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:" ));
- FT_ERROR(( " invalid read; expected %lu bytes, got %lu\n",
- count, read_bytes ));
-
- error = FT_Err_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 = 0;
- stream->limit = 0;
- }
-
- return error;
- }
-
-
- FT_BASE_DEF( void )
- FT_Stream_ReleaseFrame( FT_Stream stream,
- FT_Byte** pbytes )
- {
- if ( stream->read )
- {
- FT_Memory memory = stream->memory;
-
-#ifdef FT_DEBUG_MEMORY
- ft_mem_free( memory, *pbytes );
- *pbytes = NULL;
-#else
- FT_FREE( *pbytes );
-#endif
- }
- *pbytes = 0;
- }
-
-
- 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;
-
-#ifdef FT_DEBUG_MEMORY
- /* assume _ft_debug_file and _ft_debug_lineno are already set */
- stream->base = (unsigned char*)ft_mem_qalloc( memory, 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:" ));
- FT_ERROR(( " invalid read; expected %lu bytes, got %lu\n",
- count, read_bytes ));
-
- FT_FREE( stream->base );
- error = FT_Err_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->pos + count > stream->size )
- {
- FT_ERROR(( "FT_Stream_EnterFrame:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, count = %lu, size = 0x%lx\n",
- stream->pos, count, stream->size ));
-
- error = FT_Err_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 = 0;
- stream->limit = 0;
- }
-
-
- 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 = *stream->cursor++;
-
- return result;
- }
-
-
- FT_BASE_DEF( FT_Short )
- FT_Stream_GetShort( FT_Stream stream )
- {
- FT_Byte* p;
- FT_Short result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 1 < stream->limit )
- result = FT_NEXT_SHORT( p );
- stream->cursor = p;
-
- return result;
- }
-
-
- FT_BASE_DEF( FT_Short )
- FT_Stream_GetShortLE( FT_Stream stream )
- {
- FT_Byte* p;
- FT_Short result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 1 < stream->limit )
- result = FT_NEXT_SHORT_LE( p );
- stream->cursor = p;
-
- return result;
- }
-
-
- FT_BASE_DEF( FT_Long )
- FT_Stream_GetOffset( FT_Stream stream )
- {
- FT_Byte* p;
- FT_Long result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 2 < stream->limit )
- result = FT_NEXT_OFF3( p );
- stream->cursor = p;
- return result;
- }
-
-
- FT_BASE_DEF( FT_Long )
- FT_Stream_GetLong( FT_Stream stream )
- {
- FT_Byte* p;
- FT_Long result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 3 < stream->limit )
- result = FT_NEXT_LONG( p );
- stream->cursor = p;
- return result;
- }
-
-
- FT_BASE_DEF( FT_Long )
- FT_Stream_GetLongLE( FT_Stream stream )
- {
- FT_Byte* p;
- FT_Long result;
-
-
- FT_ASSERT( stream && stream->cursor );
-
- result = 0;
- p = stream->cursor;
- if ( p + 3 < stream->limit )
- result = FT_NEXT_LONG_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 result;
-
- Fail:
- *error = FT_Err_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_Short )
- FT_Stream_ReadShort( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[2];
- FT_Byte* p = 0;
- FT_Short 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_SHORT( p );
- }
- else
- goto Fail;
-
- stream->pos += 2;
-
- return result;
-
- Fail:
- *error = FT_Err_Invalid_Stream_Operation;
- FT_ERROR(( "FT_Stream_ReadShort:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_Short )
- FT_Stream_ReadShortLE( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[2];
- FT_Byte* p = 0;
- FT_Short 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_SHORT_LE( p );
- }
- else
- goto Fail;
-
- stream->pos += 2;
-
- return result;
-
- Fail:
- *error = FT_Err_Invalid_Stream_Operation;
- FT_ERROR(( "FT_Stream_ReadShortLE:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_Long )
- FT_Stream_ReadOffset( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[3];
- FT_Byte* p = 0;
- FT_Long 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_OFF3( p );
- }
- else
- goto Fail;
-
- stream->pos += 3;
-
- return result;
-
- Fail:
- *error = FT_Err_Invalid_Stream_Operation;
- FT_ERROR(( "FT_Stream_ReadOffset:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_Long )
- FT_Stream_ReadLong( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[4];
- FT_Byte* p = 0;
- FT_Long 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_LONG( p );
- }
- else
- goto Fail;
-
- stream->pos += 4;
-
- return result;
-
- Fail:
- FT_ERROR(( "FT_Stream_ReadLong: invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
- *error = FT_Err_Invalid_Stream_Operation;
-
- return 0;
- }
-
-
- FT_BASE_DEF( FT_Long )
- FT_Stream_ReadLongLE( FT_Stream stream,
- FT_Error* error )
- {
- FT_Byte reads[4];
- FT_Byte* p = 0;
- FT_Long 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_LONG_LE( p );
- }
- else
- goto Fail;
-
- stream->pos += 4;
-
- return result;
-
- Fail:
- FT_ERROR(( "FT_Stream_ReadLongLE:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
- stream->pos, stream->size ));
- *error = FT_Err_Invalid_Stream_Operation;
-
- 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 = stream->cursor;
-
-
- if ( !fields || !stream )
- return FT_Err_Invalid_Argument;
-
- 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_Err_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/Build/source/libs/freetype2/src/base/ftstroke.c b/Build/source/libs/freetype2/src/base/ftstroke.c
deleted file mode 100644
index 5dfee8ba3d9..00000000000
--- a/Build/source/libs/freetype2/src/base/ftstroke.c
+++ /dev/null
@@ -1,2010 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftstroke.c */
-/* */
-/* FreeType path stroker (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
- /* 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 / 6 )
-#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 )
- *angle_in = *angle_out = 0;
- else
- *angle_in = *angle_out = FT_Atan2( d2.x, d2.y );
- }
- else 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;
- }
-
-
- 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 || close3 )
- {
- if ( close2 )
- {
- /* basically a point */
- *angle_in = *angle_out = *angle_mid = 0;
- }
- else if ( close1 )
- {
- *angle_in = *angle_mid = FT_Atan2( d2.x, d2.y );
- *angle_out = FT_Atan2( d3.x, d3.y );
- }
- else /* close2 */
- {
- *angle_in = FT_Atan2( d1.x, d1.y );
- *angle_mid = *angle_out = FT_Atan2( d2.x, d2.y );
- }
- }
- else if ( close2 )
- {
- *angle_in = *angle_mid = FT_Atan2( d1.x, d1.y );
- *angle_out = FT_Atan2( d3.x, d3.y );
- }
- else
- {
- *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;
- 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 = 0;
-
-
- 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 = 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 = 0;
- }
-
-
- static FT_Error
- ft_stroke_border_lineto( FT_StrokeBorder border,
- FT_Vector* to,
- FT_Bool movable )
- {
- FT_Error error = 0;
-
-
- FT_ASSERT( border->start >= 0 );
-
- if ( border->movable )
- {
- /* move last point */
- border->points[border->num_points - 1] = *to;
- }
- else
- {
- /* 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 = 0;
- 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 = 0;
- 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 = 0;
-
-
- /* 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, 0 );
-
- border->start = border->num_points;
- border->movable = 0;
-
- return ft_stroke_border_lineto( border, to, 0 );
- }
-
-
- 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 = 0;
- }
-
-
- static void
- ft_stroke_border_reset( FT_StrokeBorder border )
- {
- border->num_points = 0;
- border->start = -1;
- border->valid = 0;
- }
-
-
- 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 = 0;
- }
-
-
- static FT_Error
- ft_stroke_border_get_counts( FT_StrokeBorder border,
- FT_UInt *anum_points,
- FT_UInt *anum_contours )
- {
- FT_Error error = 0;
- 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 )
- {
- if ( in_contour == 0 )
- goto Fail;
-
- in_contour = 0;
- num_contours++;
- }
- }
-
- if ( in_contour != 0 )
- goto Fail;
-
- border->valid = 1;
-
- 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 */
- 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)( outline->n_points + 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;
- FT_Angle angle_out;
- FT_Vector center;
- FT_Bool first_point;
- FT_Bool subpath_open;
- FT_Angle subpath_angle;
- FT_Vector subpath_start;
-
- FT_Stroker_LineCap line_cap;
- FT_Stroker_LineJoin line_join;
- FT_Fixed miter_limit;
- FT_Fixed radius;
-
- FT_Bool valid;
- FT_StrokeBorderRec borders[2];
- FT_Memory memory;
-
- } FT_StrokerRec;
-
-
- /* documentation is in ftstroke.h */
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stroker_New( FT_Library library,
- FT_Stroker *astroker )
- {
- FT_Error error;
- FT_Memory memory;
- FT_Stroker stroker;
-
-
- if ( !library )
- return FT_Err_Invalid_Argument;
-
- memory = library->memory;
-
- if ( !FT_NEW( stroker ) )
- {
- stroker->memory = memory;
-
- 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 )
- {
- stroker->radius = radius;
- stroker->line_cap = line_cap;
- stroker->line_join = line_join;
- stroker->miter_limit = miter_limit;
-
- 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->memory;
-
-
- ft_stroke_border_done( &stroker->borders[0] );
- ft_stroke_border_done( &stroker->borders[1] );
-
- stroker->memory = NULL;
- FT_FREE( stroker );
- }
- }
-
-
- /* creates 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 = 0;
- 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 = 0;
- return error;
- }
-
-
- /* adds 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 = 0;
-
-
- 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, 0 );
- 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, 0 );
- }
-
- Exit:
- return error;
- }
-
-
- /* process an inside corner, i.e. compute intersection */
- static FT_Error
- ft_stroker_inside( FT_Stroker stroker,
- FT_Int side)
- {
- FT_StrokeBorder border = stroker->borders + side;
- FT_Angle phi, theta, rotate;
- FT_Fixed length, thcos, sigma;
- FT_Vector delta;
- FT_Error error = 0;
-
-
- rotate = FT_SIDE_TO_ROTATE( side );
-
- /* compute median angle */
- theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
- if ( theta == FT_ANGLE_PI )
- theta = rotate;
- else
- theta = theta / 2;
-
- phi = stroker->angle_in + theta;
-
- thcos = FT_Cos( theta );
- sigma = FT_MulFix( stroker->miter_limit, thcos );
-
- /* TODO: find better criterion to switch off the optimization */
- if ( sigma < 0x10000L )
- {
- FT_Vector_From_Polar( &delta, stroker->radius,
- stroker->angle_out + rotate );
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
- border->movable = 0;
- }
- else
- {
- 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, 0 );
-
- 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_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 or beveled corner */
- FT_Fixed sigma, radius = stroker->radius;
- FT_Angle theta, phi;
- FT_Fixed thcos;
- FT_Bool miter;
-
-
- rotate = FT_SIDE_TO_ROTATE( side );
- miter = FT_BOOL( stroker->line_join == FT_STROKER_LINEJOIN_MITER );
-
- theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
- if ( theta == FT_ANGLE_PI )
- {
- theta = rotate;
- phi = stroker->angle_in;
- }
- else
- {
- theta = theta / 2;
- phi = stroker->angle_in + theta + rotate;
- }
-
- thcos = FT_Cos( theta );
- sigma = FT_MulFix( stroker->miter_limit, thcos );
-
- if ( sigma >= 0x10000L )
- miter = 0;
-
- if ( miter ) /* this is a miter (broken angle) */
- {
- 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_MulFix( radius,
- FT_DivFix( 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, 0 );
- 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, 0 );
- if ( error )
- goto Exit;
-
- /* finally, add a movable end point */
- 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, 1 );
- }
-
- else /* this is a bevel (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, 0 );
- if (error) goto Exit;
-
- /* now add end point */
- 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, 1 );
- }
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- ft_stroker_process_corner( FT_Stroker stroker )
- {
- FT_Error error = 0;
- 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 */
- inside_side = 0;
-
- /* otherwise, the inside side is 1 */
- if ( turn < 0 )
- inside_side = 1;
-
- /* process the inside side */
- error = ft_stroker_inside( stroker, inside_side );
- if ( error )
- goto Exit;
-
- /* process the outside side */
- error = ft_stroker_outside( stroker, 1 - inside_side );
-
- 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_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 for last cap */
- stroker->subpath_angle = start_angle;
- stroker->first_point = 0;
-
- 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 = 0;
- FT_StrokeBorder border;
- FT_Vector delta;
- FT_Angle angle;
- FT_Int side;
-
- delta.x = to->x - stroker->center.x;
- delta.y = to->y - stroker->center.y;
-
- 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 );
- if ( error )
- goto Exit;
- }
- else
- {
- /* process the current corner */
- stroker->angle_out = angle;
- error = ft_stroker_process_corner( stroker );
- 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;
-
- error = ft_stroke_border_lineto( border, &point, 1 );
- if ( error )
- goto Exit;
-
- delta.x = -delta.x;
- delta.y = -delta.y;
- }
-
- stroker->angle_in = angle;
- stroker->center = *to;
-
- 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 = 0;
- FT_Vector bez_stack[34];
- FT_Vector* arc;
- FT_Vector* limit = bez_stack + 30;
- FT_Angle start_angle;
- FT_Bool first_arc = 1;
-
-
- arc = bez_stack;
- arc[0] = *to;
- arc[1] = *control;
- arc[2] = stroker->center;
-
- while ( arc >= bez_stack )
- {
- FT_Angle angle_in, angle_out;
-
-
- angle_in = angle_out = 0; /* remove compiler warnings */
-
- if ( arc < limit &&
- !ft_conic_is_small_enough( arc, &angle_in, &angle_out ) )
- {
- ft_conic_split( arc );
- arc += 2;
- continue;
- }
-
- if ( first_arc )
- {
- first_arc = 0;
-
- start_angle = angle_in;
-
- /* process corner if necessary */
- if ( stroker->first_point )
- error = ft_stroker_subpath_start( stroker, start_angle );
- else
- {
- stroker->angle_out = start_angle;
- error = ft_stroker_process_corner( stroker );
- }
- }
-
- /* the arc's angle is small enough; we can add it directly to each */
- /* border */
- {
- FT_Vector ctrl, end;
- FT_Angle theta, phi, rotate;
- FT_Fixed length;
- FT_Int side;
-
-
- theta = FT_Angle_Diff( angle_in, angle_out ) / 2;
- phi = angle_in + theta;
- length = FT_DivFix( stroker->radius, FT_Cos( theta ) );
-
- for ( side = 0; side <= 1; side++ )
- {
- 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;
-
- error = ft_stroke_border_conicto( stroker->borders + side,
- &ctrl, &end );
- if ( error )
- goto Exit;
- }
- }
-
- arc -= 2;
-
- if ( arc < bez_stack )
- 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 = 0;
- FT_Vector bez_stack[37];
- FT_Vector* arc;
- FT_Vector* limit = bez_stack + 32;
- FT_Angle start_angle;
- FT_Bool first_arc = 1;
-
-
- 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;
-
-
- /* remove compiler warnings */
- angle_in = angle_out = angle_mid = 0;
-
- if ( arc < limit &&
- !ft_cubic_is_small_enough( arc, &angle_in,
- &angle_mid, &angle_out ) )
- {
- ft_cubic_split( arc );
- arc += 3;
- continue;
- }
-
- if ( first_arc )
- {
- first_arc = 0;
-
- /* process corner if necessary */
- start_angle = angle_in;
-
- if ( stroker->first_point )
- error = ft_stroker_subpath_start( stroker, start_angle );
- else
- {
- stroker->angle_out = start_angle;
- error = ft_stroker_process_corner( stroker );
- }
- 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;
- FT_Fixed length1, length2;
- FT_Int side;
-
-
- theta1 = ft_pos_abs( angle_mid - angle_in ) / 2;
- theta2 = ft_pos_abs( angle_out - angle_mid ) / 2;
- phi1 = (angle_mid + angle_in ) / 2;
- phi2 = (angle_mid + angle_out ) / 2;
- length1 = FT_DivFix( stroker->radius, FT_Cos( theta1 ) );
- length2 = FT_DivFix( stroker->radius, FT_Cos(theta2) );
-
- for ( side = 0; side <= 1; side++ )
- {
- 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;
-
- error = ft_stroke_border_cubicto( stroker->borders + side,
- &ctrl1, &ctrl2, &end );
- if ( error )
- goto Exit;
- }
- }
-
- arc -= 3;
- if ( arc < bez_stack )
- 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 )
- {
- /* We cannot process the first point, because there is not enough */
- /* information regarding its corner/cap. The latter will be processed */
- /* in the "end_subpath" routine. */
- /* */
- stroker->first_point = 1;
- stroker->center = *to;
- stroker->subpath_open = open;
-
- /* record the subpath start point index for each border */
- stroker->subpath_start = *to;
- return 0;
- }
-
-
- 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 = 0;
-
-
- FT_ASSERT( left->start >= 0 );
-
- new_points = 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 = left->start;
- right->num_points += new_points;
-
- right->movable = 0;
- left->movable = 0;
- }
-
- 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 = 0;
-
- 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, 1 );
- 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, 0 );
- }
- 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 */
- inside_side = 0;
-
- /* otherwise, the inside side is 1 */
- if ( turn < 0 )
- inside_side = 1;
-
- error = ft_stroker_inside( stroker, inside_side );
- if ( error )
- goto Exit;
-
- /* process the outside side */
- error = ft_stroker_outside( stroker, 1 - inside_side );
- if ( error )
- goto Exit;
- }
-
- /* then end our two subpaths */
- ft_stroke_border_close( stroker->borders + 0, 1 );
- ft_stroke_border_close( stroker->borders + 1, 0 );
- }
-
- 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_Err_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;
-
-
- 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:
- *anum_points = num_points;
- *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 ( 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 || !stroker )
- return FT_Err_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 = 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 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--;
- }
-
- 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;
-
- error = FT_Stroker_EndSubPath( stroker );
- if ( error )
- goto Exit;
-
- first = last + 1;
- }
-
- return 0;
-
- Exit:
- return error;
-
- Invalid_Outline:
- return FT_Err_Invalid_Outline;
- }
-
-
- extern const FT_Glyph_Class ft_outline_glyph_class;
-
-
- /* 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;
-
-
- if ( pglyph == NULL )
- goto Exit;
-
- glyph = *pglyph;
- if ( glyph == NULL || glyph->clazz != &ft_outline_glyph_class )
- 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, 0 );
- if ( error )
- goto Fail;
-
- (void)FT_Stroker_GetCounts( stroker, &num_points, &num_contours );
-
- FT_Outline_Done( glyph->library, outline );
-
- error = FT_Outline_New( glyph->library,
- num_points, 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;
-
-
- if ( pglyph == NULL )
- goto Exit;
-
- glyph = *pglyph;
- if ( glyph == NULL || glyph->clazz != &ft_outline_glyph_class )
- 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, 0 );
- if ( error )
- goto Fail;
-
- (void)FT_Stroker_GetBorderCounts( stroker, border,
- &num_points, &num_contours );
-
- FT_Outline_Done( glyph->library, outline );
-
- error = FT_Outline_New( glyph->library,
- num_points,
- 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/Build/source/libs/freetype2/src/base/ftsynth.c b/Build/source/libs/freetype2/src/base/ftsynth.c
deleted file mode 100644
index ff88ce96c5b..00000000000
--- a/Build/source/libs/freetype2/src/base/ftsynth.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsynth.c */
-/* */
-/* FreeType synthesizing code for emboldening and slanting (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_OBJECTS_H
-#include FT_OUTLINE_H
-#include FT_BITMAP_H
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** EXPERIMENTAL OBLIQUING SUPPORT ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* documentation is in ftsynth.h */
-
- FT_EXPORT_DEF( void )
- FT_GlyphSlot_Oblique( FT_GlyphSlot slot )
- {
- FT_Matrix transform;
- FT_Outline* 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 = 0x06000L;
- transform.yy = 0x10000L;
-
- FT_Outline_Transform( outline, &transform );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** EXPERIMENTAL EMBOLDENING/OUTLINING SUPPORT ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- 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_New( &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 ftsynth.h */
-
- FT_EXPORT_DEF( void )
- FT_GlyphSlot_Embolden( FT_GlyphSlot slot )
- {
- FT_Library library = slot->library;
- FT_Face face = FT_SLOT_FACE( slot );
- FT_Error error;
- FT_Pos xstr, ystr;
-
-
- 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 )
- {
- error = FT_Outline_Embolden( &slot->outline, xstr );
- /* ignore error */
-
- /* this is more than enough for most glyphs; if you need accurate */
- /* values, you have to call FT_Outline_Get_CBox */
- xstr = xstr * 2;
- ystr = xstr;
- }
- else if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
- {
- xstr = FT_PIX_FLOOR( xstr );
- if ( xstr == 0 )
- xstr = 1 << 6;
- ystr = FT_PIX_FLOOR( ystr );
-
- 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.horiBearingY += ystr;
- slot->metrics.horiAdvance += xstr;
- slot->metrics.vertBearingX -= xstr / 2;
- slot->metrics.vertBearingY += ystr;
- slot->metrics.vertAdvance += ystr;
-
- if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
- slot->bitmap_top += ystr >> 6;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftsystem.c b/Build/source/libs/freetype2/src/base/ftsystem.c
deleted file mode 100644
index f61a3edfb6b..00000000000
--- a/Build/source/libs/freetype2/src/base/ftsystem.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsystem.c */
-/* */
-/* ANSI-specific FreeType low-level system interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 );
- }
-
-
- /*************************************************************************/
- /* */
- /* <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, 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 */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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 = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- FT_CALLBACK_DEF( unsigned long )
- ft_ansi_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 );
- }
-
-
- /* 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_Err_Invalid_Stream_Handle;
-
- file = ft_fopen( filepathname, "rb" );
- if ( !file )
- {
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
-
- return FT_Err_Cannot_Open_Resource;
- }
-
- ft_fseek( file, 0, SEEK_END );
- stream->size = ft_ftell( file );
- ft_fseek( file, 0, SEEK_SET );
-
- stream->descriptor.pointer = file;
- stream->pathname.pointer = (char*)filepathname;
- stream->pos = 0;
-
- 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;
- }
-
-
-#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 = 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/Build/source/libs/freetype2/src/base/fttrigon.c b/Build/source/libs/freetype2/src/base/fttrigon.c
deleted file mode 100644
index 9f513946b83..00000000000
--- a/Build/source/libs/freetype2/src/base/fttrigon.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttrigon.c */
-/* */
-/* FreeType trigonometric functions (body). */
-/* */
-/* Copyright 2001, 2002, 2003, 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_TRIGONOMETRY_H
-
-
- /* the following is 0.2715717684432231 * 2^30 */
-#define FT_TRIG_COSCALE 0x11616E8EUL
-
- /* this table was generated for FT_PI = 180L << 16, i.e. degrees */
-#define FT_TRIG_MAX_ITERS 23
-
- static const FT_Fixed
- ft_trig_arctan_table[24] =
- {
- 4157273L, 2949120L, 1740967L, 919879L, 466945L, 234379L, 117304L,
- 58666L, 29335L, 14668L, 7334L, 3667L, 1833L, 917L, 458L, 229L, 115L,
- 57L, 29L, 14L, 7L, 4L, 2L, 1L
- };
-
- /* the Cordic shrink factor, multiplied by 2^32 */
-#define FT_TRIG_SCALE 1166391785UL /* 0x4585BA38UL */
-
-
-#ifdef FT_CONFIG_HAS_INT64
-
- /* multiply a given value by the CORDIC shrink factor */
- static FT_Fixed
- ft_trig_downscale( FT_Fixed val )
- {
- FT_Fixed s;
- FT_Int64 v;
-
-
- s = val;
- val = ( val >= 0 ) ? val : -val;
-
- v = ( val * (FT_Int64)FT_TRIG_SCALE ) + 0x100000000UL;
- val = (FT_Fixed)( v >> 32 );
-
- return ( s >= 0 ) ? val : -val;
- }
-
-#else /* !FT_CONFIG_HAS_INT64 */
-
- /* multiply a given value by the CORDIC shrink factor */
- static FT_Fixed
- ft_trig_downscale( FT_Fixed val )
- {
- FT_Fixed s;
- FT_UInt32 v1, v2, k1, k2, hi, lo1, lo2, lo3;
-
-
- s = val;
- val = ( val >= 0 ) ? val : -val;
-
- v1 = (FT_UInt32)val >> 16;
- v2 = (FT_UInt32)val & 0xFFFFL;
-
- k1 = FT_TRIG_SCALE >> 16; /* constant */
- k2 = FT_TRIG_SCALE & 0xFFFFL; /* constant */
-
- hi = k1 * v1;
- lo1 = k1 * v2 + k2 * v1; /* can't overflow */
-
- lo2 = ( k2 * v2 ) >> 16;
- lo3 = ( lo1 >= lo2 ) ? lo1 : lo2;
- lo1 += lo2;
-
- hi += lo1 >> 16;
- if ( lo1 < lo3 )
- hi += 0x10000UL;
-
- val = (FT_Fixed)hi;
-
- return ( s >= 0 ) ? val : -val;
- }
-
-#endif /* !FT_CONFIG_HAS_INT64 */
-
-
- static FT_Int
- ft_trig_prenorm( FT_Vector* vec )
- {
- FT_Fixed x, y, z;
- FT_Int shift;
-
-
- x = vec->x;
- y = vec->y;
-
- z = ( ( x >= 0 ) ? x : - x ) | ( (y >= 0) ? y : -y );
- shift = 0;
-
-#if 1
- /* determine msb bit index in `shift' */
- if ( z >= ( 1L << 16 ) )
- {
- z >>= 16;
- shift += 16;
- }
- if ( z >= ( 1L << 8 ) )
- {
- z >>= 8;
- shift += 8;
- }
- if ( z >= ( 1L << 4 ) )
- {
- z >>= 4;
- shift += 4;
- }
- if ( z >= ( 1L << 2 ) )
- {
- z >>= 2;
- shift += 2;
- }
- if ( z >= ( 1L << 1 ) )
- {
- z >>= 1;
- shift += 1;
- }
-
- if ( shift <= 27 )
- {
- shift = 27 - shift;
- vec->x = x << shift;
- vec->y = y << shift;
- }
- else
- {
- shift -= 27;
- vec->x = x >> shift;
- vec->y = y >> shift;
- shift = -shift;
- }
-
-#else /* 0 */
-
- if ( z < ( 1L << 27 ) )
- {
- do
- {
- shift++;
- z <<= 1;
- } while ( z < ( 1L << 27 ) );
- vec->x = x << shift;
- vec->y = y << shift;
- }
- else if ( z > ( 1L << 28 ) )
- {
- do
- {
- shift++;
- z >>= 1;
- } while ( z > ( 1L << 28 ) );
-
- vec->x = x >> shift;
- vec->y = y >> shift;
- shift = -shift;
- }
-
-#endif /* 0 */
-
- return shift;
- }
-
-
- static void
- ft_trig_pseudo_rotate( FT_Vector* vec,
- FT_Angle theta )
- {
- FT_Int i;
- FT_Fixed x, y, xtemp;
- const FT_Fixed *arctanptr;
-
-
- x = vec->x;
- y = vec->y;
-
- /* Get angle between -90 and 90 degrees */
- while ( theta <= -FT_ANGLE_PI2 )
- {
- x = -x;
- y = -y;
- theta += FT_ANGLE_PI;
- }
-
- while ( theta > FT_ANGLE_PI2 )
- {
- x = -x;
- y = -y;
- theta -= FT_ANGLE_PI;
- }
-
- /* Initial pseudorotation, with left shift */
- arctanptr = ft_trig_arctan_table;
-
- if ( theta < 0 )
- {
- xtemp = x + ( y << 1 );
- y = y - ( x << 1 );
- x = xtemp;
- theta += *arctanptr++;
- }
- else
- {
- xtemp = x - ( y << 1 );
- y = y + ( x << 1 );
- x = xtemp;
- theta -= *arctanptr++;
- }
-
- /* Subsequent pseudorotations, with right shifts */
- i = 0;
- do
- {
- if ( theta < 0 )
- {
- xtemp = x + ( y >> i );
- y = y - ( x >> i );
- x = xtemp;
- theta += *arctanptr++;
- }
- else
- {
- xtemp = x - ( y >> i );
- y = y + ( x >> i );
- x = xtemp;
- theta -= *arctanptr++;
- }
- } while ( ++i < FT_TRIG_MAX_ITERS );
-
- vec->x = x;
- vec->y = y;
- }
-
-
- static void
- ft_trig_pseudo_polarize( FT_Vector* vec )
- {
- FT_Fixed theta;
- FT_Fixed yi, i;
- FT_Fixed x, y;
- const FT_Fixed *arctanptr;
-
-
- x = vec->x;
- y = vec->y;
-
- /* Get the vector into the right half plane */
- theta = 0;
- if ( x < 0 )
- {
- x = -x;
- y = -y;
- theta = 2 * FT_ANGLE_PI2;
- }
-
- if ( y > 0 )
- theta = - theta;
-
- arctanptr = ft_trig_arctan_table;
-
- if ( y < 0 )
- {
- /* Rotate positive */
- yi = y + ( x << 1 );
- x = x - ( y << 1 );
- y = yi;
- theta -= *arctanptr++; /* Subtract angle */
- }
- else
- {
- /* Rotate negative */
- yi = y - ( x << 1 );
- x = x + ( y << 1 );
- y = yi;
- theta += *arctanptr++; /* Add angle */
- }
-
- i = 0;
- do
- {
- if ( y < 0 )
- {
- /* Rotate positive */
- yi = y + ( x >> i );
- x = x - ( y >> i );
- y = yi;
- theta -= *arctanptr++;
- }
- else
- {
- /* Rotate negative */
- yi = y - ( x >> i );
- x = x + ( y >> i );
- y = yi;
- theta += *arctanptr++;
- }
- } while ( ++i < FT_TRIG_MAX_ITERS );
-
- /* round theta */
- if ( theta >= 0 )
- theta = FT_PAD_ROUND( theta, 32 );
- else
- theta = -FT_PAD_ROUND( -theta, 32 );
-
- vec->x = x;
- vec->y = theta;
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_Cos( FT_Angle angle )
- {
- FT_Vector v;
-
-
- v.x = FT_TRIG_COSCALE >> 2;
- v.y = 0;
- ft_trig_pseudo_rotate( &v, angle );
-
- return v.x / ( 1 << 12 );
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_Sin( FT_Angle angle )
- {
- return FT_Cos( FT_ANGLE_PI2 - angle );
- }
-
-
- /* documentation is in fttrigon.h */
-
- FT_EXPORT_DEF( FT_Fixed )
- FT_Tan( FT_Angle angle )
- {
- FT_Vector v;
-
-
- v.x = FT_TRIG_COSCALE >> 2;
- v.y = 0;
- ft_trig_pseudo_rotate( &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 )
- {
- vec->x = FT_TRIG_COSCALE >> 2;
- vec->y = 0;
- ft_trig_pseudo_rotate( vec, angle );
- vec->x >>= 12;
- vec->y >>= 12;
- }
-
-
- /* 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;
-
-
- v.x = vec->x;
- v.y = vec->y;
-
- if ( angle && ( v.x != 0 || v.y != 0 ) )
- {
- 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 = 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 = v.x << shift;
- vec->y = 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;
-
-
- v = *vec;
-
- /* handle trivial cases */
- if ( v.x == 0 )
- {
- return ( v.y >= 0 ) ? v.y : -v.y;
- }
- else if ( v.y == 0 )
- {
- return ( v.x >= 0 ) ? v.x : -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 + ( 1 << ( shift - 1 ) ) ) >> shift;
-
- return 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;
-
-
- 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 ) : ( 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 )
- {
- 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;
-
-
- delta %= FT_ANGLE_2PI;
- if ( delta < 0 )
- delta += FT_ANGLE_2PI;
-
- if ( delta > FT_ANGLE_PI )
- delta -= FT_ANGLE_2PI;
-
- return delta;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/fttype1.c b/Build/source/libs/freetype2/src/base/fttype1.c
deleted file mode 100644
index 3975584db89..00000000000
--- a/Build/source/libs/freetype2/src/base/fttype1.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/***************************************************************************/
-/* */
-/* fttype1.c */
-/* */
-/* FreeType utility file for PS names support (body). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.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_Err_Invalid_Argument;
-
-
- if ( face )
- {
- FT_Service_PsInfo service = NULL;
-
-
- FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
-
- if ( service && service->ps_get_font_info )
- error = service->ps_get_font_info( face, afont_info );
- }
-
- 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 = NULL;
-
-
- 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_Err_Invalid_Argument;
-
-
- if ( face )
- {
- FT_Service_PsInfo service = NULL;
-
-
- FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
-
- if ( service && service->ps_get_font_private )
- error = service->ps_get_font_private( face, afont_private );
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftutil.c b/Build/source/libs/freetype2/src/base/ftutil.c
deleted file mode 100644
index 5f77be557ad..00000000000
--- a/Build/source/libs/freetype2/src/base/ftutil.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftutil.c */
-/* */
-/* FreeType utility file for memory and list management (body). */
-/* */
-/* Copyright 2002, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 == NULL )
- error = FT_Err_Out_Of_Memory;
- }
- else if ( size < 0 )
- {
- /* may help catch/prevent security issues */
- error = FT_Err_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_Err_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_Err_Array_Too_Large;
- }
- else if ( cur_count == 0 )
- {
- FT_ASSERT( block == NULL );
-
- 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 == NULL )
- error = FT_Err_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, 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;
-
-
- cur = list->head;
- while ( cur )
- {
- if ( cur->data == data )
- return cur;
-
- cur = cur->next;
- }
-
- return (FT_ListNode)0;
- }
-
-
- /* documentation is in ftlist.h */
-
- FT_EXPORT_DEF( void )
- FT_List_Add( FT_List list,
- FT_ListNode node )
- {
- FT_ListNode before = list->tail;
-
-
- node->next = 0;
- 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 = list->head;
-
-
- node->next = after;
- node->prev = 0;
-
- 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;
-
-
- 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;
-
-
- 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 = 0;
- 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 = list->head;
- FT_Error error = FT_Err_Ok;
-
-
- 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;
-
-
- 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 = 0;
- list->tail = 0;
- }
-
-
- FT_BASE_DEF( FT_UInt32 )
- ft_highpow2( FT_UInt32 value )
- {
- FT_UInt32 value2;
-
-
- /*
- * We simply clear the lowest bit in each iteration. When
- * we reach 0, we know that the previous value was our result.
- */
- for ( ;; )
- {
- value2 = value & (value - 1); /* clear lowest bit */
- if ( value2 == 0 )
- break;
-
- value = value2;
- }
- return value;
- }
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_BASE_DEF( FT_Error )
- FT_Alloc( FT_Memory memory,
- FT_Long size,
- void* *P )
- {
- FT_Error error;
-
-
- (void)FT_ALLOC( *P, size );
- return error;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_QAlloc( FT_Memory memory,
- FT_Long size,
- void* *p )
- {
- FT_Error error;
-
-
- (void)FT_QALLOC( *p, size );
- return error;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Realloc( FT_Memory memory,
- FT_Long current,
- FT_Long size,
- void* *P )
- {
- FT_Error error;
-
-
- (void)FT_REALLOC( *P, current, size );
- return error;
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_QRealloc( FT_Memory memory,
- FT_Long current,
- FT_Long size,
- void* *p )
- {
- FT_Error error;
-
-
- (void)FT_QREALLOC( *p, current, size );
- return error;
- }
-
-
- FT_BASE_DEF( void )
- FT_Free( FT_Memory memory,
- void* *P )
- {
- if ( *P )
- FT_MEM_FREE( *P );
- }
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftwinfnt.c b/Build/source/libs/freetype2/src/base/ftwinfnt.c
deleted file mode 100644
index bc2e90e1f6b..00000000000
--- a/Build/source/libs/freetype2/src/base/ftwinfnt.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftwinfnt.c */
-/* */
-/* FreeType API for accessing Windows FNT specific info (body). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.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;
-
-
- error = FT_Err_Invalid_Argument;
-
- if ( face != NULL )
- {
- FT_FACE_LOOKUP_SERVICE( face, service, WINFNT );
-
- if ( service != NULL )
- {
- error = service->get_header( face, header );
- }
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/ftxf86.c b/Build/source/libs/freetype2/src/base/ftxf86.c
deleted file mode 100644
index a4bf767dfa2..00000000000
--- a/Build/source/libs/freetype2/src/base/ftxf86.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftxf86.c */
-/* */
-/* FreeType utility file for X11 support (body). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_XFREE86_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_XFREE86_NAME_H
-
-
- /* documentation is in ftxf86.h */
-
- 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, XF86_NAME );
-
- return result;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/base/rules.mk b/Build/source/libs/freetype2/src/base/rules.mk
deleted file mode 100644
index d6e441254b7..00000000000
--- a/Build/source/libs/freetype2/src/base/rules.mk
+++ /dev/null
@@ -1,90 +0,0 @@
-#
-# FreeType 2 base layer configuration rules
-#
-
-
-# Copyright 1996-2000, 2002, 2003, 2004, 2005, 2006, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 `freetype/src/base' which are not compiled within the
-# base layer proper.
-#
-# BASE_H is defined in freetype.mk to simplify the dependency rules.
-
-
-BASE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SRC_DIR)/base)
-
-
-# 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)/ftcalc.c \
- $(BASE_DIR)/ftdbgmem.c \
- $(BASE_DIR)/ftgloadr.c \
- $(BASE_DIR)/ftnames.c \
- $(BASE_DIR)/ftobjs.c \
- $(BASE_DIR)/ftoutln.c \
- $(BASE_DIR)/ftrfork.c \
- $(BASE_DIR)/ftstream.c \
- $(BASE_DIR)/fttrigon.c \
- $(BASE_DIR)/ftutil.c
-
-# 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_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BASE_SRC_S))
-
-
-# Multiple objects build + extensions
-#
-$(OBJ_DIR)/%.$O: $(BASE_DIR)/%.c $(FREETYPE_H)
- $(BASE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/bdf/Jamfile b/Build/source/libs/freetype2/src/bdf/Jamfile
deleted file mode 100644
index da23ccd0add..00000000000
--- a/Build/source/libs/freetype2/src/bdf/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/bdf Jamfile
-#
-# 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.
-
-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/Build/source/libs/freetype2/src/bdf/README b/Build/source/libs/freetype2/src/bdf/README
deleted file mode 100644
index e3f2ae3861f..00000000000
--- a/Build/source/libs/freetype2/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/asn/developer/PDFS/TN/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 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/Build/source/libs/freetype2/src/bdf/bdf.c b/Build/source/libs/freetype2/src/bdf/bdf.c
deleted file mode 100644
index f95fb76225f..00000000000
--- a/Build/source/libs/freetype2/src/bdf/bdf.c
+++ /dev/null
@@ -1,34 +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/Build/source/libs/freetype2/src/bdf/bdf.h b/Build/source/libs/freetype2/src/bdf/bdf.h
deleted file mode 100644
index 1b64426aad6..00000000000
--- a/Build/source/libs/freetype2/src/bdf/bdf.h
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2000 Computing Research Labs, New Mexico State University
- * Copyright 2001, 2002, 2003, 2004 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
-
-
-FT_BEGIN_HEADER
-
-
-/* Imported from bdfP.h */
-
-#define _bdf_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] & ( 1 << ( (e) & 31 ) ) )
-#define _bdf_set_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] |= ( 1 << ( (e) & 31 ) ) )
-#define _bdf_clear_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] &= ~( 1 << ( (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 int32;
- unsigned long card32;
-
- } 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 _hashnode_
- {
- const char* key;
- void* data;
-
- } _hashnode, *hashnode;
-
-
- typedef struct hashtable_
- {
- int limit;
- int size;
- int used;
- hashnode* table;
-
- } hashtable;
-
-
- 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. */
-
- 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. */
-
- unsigned long nmod[2048]; /* Bitmap indicating modified glyphs. */
- unsigned long umod[2048]; /* 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;
- hashtable 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/Build/source/libs/freetype2/src/bdf/bdfdrivr.c b/Build/source/libs/freetype2/src/bdf/bdfdrivr.c
deleted file mode 100644
index 2a5767e2f0e..00000000000
--- a/Build/source/libs/freetype2/src/bdf/bdfdrivr.c
+++ /dev/null
@@ -1,850 +0,0 @@
-/* bdfdrivr.c
-
- FreeType font driver for bdf files
-
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 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_SERVICE_BDF_H
-#include FT_SERVICE_XFREE86_NAME_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_UInt num_encodings;
- 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 BDF_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_UInt min, max, mid;
- FT_UInt result = 0;
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_UInt32 code;
-
-
- mid = ( min + max ) >> 1;
- code = 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_UInt min, max, mid;
- FT_UInt32 charcode = *acharcode + 1;
- FT_UInt result = 0;
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_UInt32 code;
-
-
- mid = ( min + max ) >> 1;
- code = 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 = encodings[min].enc;
- result = encodings[min].glyph + 1;
- }
-
- Exit:
- *acharcode = charcode;
- return result;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- 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 = BDF_Err_Ok;
- FT_Face face = FT_FACE( bdf );
- FT_Memory memory = face->memory;
- bdf_font_t* font = bdf->bdffont;
- bdf_property_t* prop;
-
- int nn, len;
- char* strings[4] = { NULL, NULL, NULL, NULL };
- int 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);
-
- len = 0;
-
- 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 == NULL )
- 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 )
- {
- int 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 = 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_TRACE4(( "BDF_Face_Done: done face\n" ));
- }
-
-
- 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 = BDF_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_UNUSED( face_index );
-
-
- 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 ( error == BDF_Err_Missing_Startfont_Field )
- {
- FT_TRACE2(( "[not a valid 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_property_t* prop = NULL;
-
-
- FT_TRACE4(( "number of glyphs: %d (%d)\n",
- font->glyphs_size,
- font->glyphs_used ));
- FT_TRACE4(( "number of unencoded glyphs: %d (%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 = 0;
-
- if ( ( error = bdf_interpret_style( face ) ) != 0 )
- goto Exit;
-
- /* the number of glyphs (with one slot for the undefined glyph */
- /* at position 0 and all unencoded glyphs) */
- bdfface->num_glyphs = 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_MEM_ZERO( bsize, sizeof ( FT_Bitmap_Size ) );
-
- bsize->height = (FT_Short)( font->font_ascent + font->font_descent );
-
- prop = bdf_get_font_property( font, "AVERAGE_WIDTH" );
- if ( prop )
- bsize->width = (FT_Short)( ( prop->value.int32 + 5 ) / 10 );
- else
- bsize->width = (FT_Short)( bsize->height * 2/3 );
-
- prop = bdf_get_font_property( font, "POINT_SIZE" );
- if ( prop )
- /* convert from 722.7 decipoints to 72 points per inch */
- bsize->size =
- (FT_Pos)( ( prop->value.int32 * 64 * 7200 + 36135L ) / 72270L );
- else
- bsize->size = bsize->width << 6;
-
- prop = bdf_get_font_property( font, "PIXEL_SIZE" );
- if ( prop )
- bsize->y_ppem = (FT_Short)prop->value.int32 << 6;
-
- prop = bdf_get_font_property( font, "RESOLUTION_X" );
- if ( prop )
- resolution_x = (FT_Short)prop->value.int32;
-
- prop = bdf_get_font_property( font, "RESOLUTION_Y" );
- if ( prop )
- resolution_y = (FT_Short)prop->value.int32;
-
- if ( bsize->y_ppem == 0 )
- {
- bsize->y_ppem = bsize->size;
- if ( resolution_y )
- bsize->y_ppem = bsize->y_ppem * resolution_y / 72;
- }
- if ( resolution_x && resolution_y )
- bsize->x_ppem = 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_Short)n;
-
- if ( cur[n].encoding == font->default_char )
- face->default_glyph = n;
- }
- }
-
- /* charmaps */
- {
- bdf_property_t *charset_registry = 0, *charset_encoding = 0;
- 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;
- }
-
- {
- FT_CharMapRec charmap;
-
-
- charmap.face = FT_FACE( face );
- charmap.encoding = FT_ENCODING_NONE;
- charmap.platform_id = 0;
- charmap.encoding_id = 0;
-
- if ( unicode_charmap )
- {
- charmap.encoding = FT_ENCODING_UNICODE;
- charmap.platform_id = 3;
- charmap.encoding_id = 1;
- }
-
- error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( bdfface->num_charmaps )
- bdfface->charmap = bdfface->charmaps[0];
-#endif
- }
-
- goto Exit;
- }
- }
-
- /* otherwise assume Adobe standard encoding */
-
- {
- FT_CharMapRec charmap;
-
-
- charmap.face = FT_FACE( face );
- charmap.encoding = FT_ENCODING_ADOBE_STANDARD;
- charmap.platform_id = 7;
- charmap.encoding_id = 0;
-
- 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 BDF_Err_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 << 6;
- size->metrics.descender = -bdffont->font_descent << 6;
- size->metrics.max_advance = bdffont->bbx.width << 6;
-
- return BDF_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 = BDF_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 = BDF_Err_Ok;
- break;
-
- case FT_SIZE_REQUEST_TYPE_REAL_DIM:
- if ( height == ( bdffont->font_ascent +
- bdffont->font_descent ) )
- error = BDF_Err_Ok;
- break;
-
- default:
- error = BDF_Err_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 = BDF_Err_Ok;
- FT_Bitmap* bitmap = &slot->bitmap;
- bdf_glyph_t glyph;
- int bpp = bdf->bdffont->bpp;
-
- FT_UNUSED( load_flags );
-
-
- if ( !face || glyph_index >= (FT_UInt)face->num_glyphs )
- {
- error = BDF_Err_Invalid_Argument;
- goto Exit;
- }
-
- /* 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;
- bitmap->pitch = glyph.bpr;
-
- /* 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 = glyph.dwidth << 6;
- slot->metrics.horiBearingX = glyph.bbx.x_offset << 6;
- slot->metrics.horiBearingY = glyph.bbx.ascent << 6;
- slot->metrics.width = bitmap->width << 6;
- slot->metrics.height = bitmap->rows << 6;
-
- /*
- * 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 << 6 );
-
- 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:
- aproperty->type = BDF_PROPERTY_TYPE_INTEGER;
- aproperty->u.integer = prop->value.int32;
- break;
-
- case BDF_CARDINAL:
- aproperty->type = BDF_PROPERTY_TYPE_CARDINAL;
- aproperty->u.cardinal = prop->value.card32;
- break;
-
- default:
- goto Fail;
- }
- return 0;
- }
-
- Fail:
- return BDF_Err_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,
- (FT_BDF_GetPropertyFunc) bdf_get_bdf_property
- };
-
-
- /*
- *
- * SERVICES LIST
- *
- */
-
- static const FT_ServiceDescRec bdf_services[] =
- {
- { FT_SERVICE_ID_BDF, &bdf_service_bdf },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_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,
-
- 0,
-
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) bdf_driver_requester
- },
-
- sizeof ( BDF_FaceRec ),
- sizeof ( FT_SizeRec ),
- sizeof ( FT_GlyphSlotRec ),
-
- BDF_Face_Init,
- BDF_Face_Done,
- 0, /* FT_Size_InitFunc */
- 0, /* FT_Size_DoneFunc */
- 0, /* FT_Slot_InitFunc */
- 0, /* FT_Slot_DoneFunc */
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
- BDF_Glyph_Load,
-
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
-
- BDF_Size_Request,
- BDF_Size_Select
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/bdf/bdfdrivr.h b/Build/source/libs/freetype2/src/bdf/bdfdrivr.h
deleted file mode 100644
index 86f40ee4af5..00000000000
--- a/Build/source/libs/freetype2/src/bdf/bdfdrivr.h
+++ /dev/null
@@ -1,76 +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
-
-
- typedef struct BDF_encoding_el_
- {
- FT_ULong 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/Build/source/libs/freetype2/src/bdf/bdferror.h b/Build/source/libs/freetype2/src/bdf/bdferror.h
deleted file mode 100644
index b27fa333bbc..00000000000
--- a/Build/source/libs/freetype2/src/bdf/bdferror.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2001, 2002 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__
-
-#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/Build/source/libs/freetype2/src/bdf/bdflib.c b/Build/source/libs/freetype2/src/bdf/bdflib.c
deleted file mode 100644
index 512cd62c3ec..00000000000
--- a/Build/source/libs/freetype2/src/bdf/bdflib.c
+++ /dev/null
@@ -1,2472 +0,0 @@
-/*
- * Copyright 2000 Computing Research Labs, New Mexico State University
- * Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
- * 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] );
-
-
- /*************************************************************************/
- /* */
- /* Hash table utilities for the properties. */
- /* */
- /*************************************************************************/
-
- /* XXX: Replace this with FreeType's hash functions */
-
-
-#define INITIAL_HT_SIZE 241
-
- typedef void
- (*hash_free_func)( hashnode node );
-
- static hashnode*
- hash_bucket( const char* key,
- hashtable* ht )
- {
- const char* kp = key;
- unsigned long res = 0;
- hashnode* bp = ht->table, *ndp;
-
-
- /* Mocklisp hash function. */
- while ( *kp )
- res = ( res << 5 ) - res + *kp++;
-
- ndp = bp + ( res % ht->size );
- while ( *ndp )
- {
- kp = (*ndp)->key;
- if ( kp[0] == key[0] && ft_strcmp( kp, key ) == 0 )
- break;
- ndp--;
- if ( ndp < bp )
- ndp = bp + ( ht->size - 1 );
- }
-
- return ndp;
- }
-
-
- static FT_Error
- hash_rehash( hashtable* ht,
- FT_Memory memory )
- {
- hashnode* obp = ht->table, *bp, *nbp;
- int i, sz = ht->size;
- FT_Error error = BDF_Err_Ok;
-
-
- ht->size <<= 1;
- ht->limit = ht->size / 3;
-
- if ( FT_NEW_ARRAY( ht->table, ht->size ) )
- goto Exit;
-
- for ( i = 0, bp = obp; i < sz; i++, bp++ )
- {
- if ( *bp )
- {
- nbp = hash_bucket( (*bp)->key, ht );
- *nbp = *bp;
- }
- }
- FT_FREE( obp );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- hash_init( hashtable* ht,
- FT_Memory memory )
- {
- int sz = INITIAL_HT_SIZE;
- FT_Error error = BDF_Err_Ok;
-
-
- ht->size = sz;
- ht->limit = sz / 3;
- ht->used = 0;
-
- if ( FT_NEW_ARRAY( ht->table, sz ) )
- goto Exit;
-
- Exit:
- return error;
- }
-
-
- static void
- hash_free( hashtable* ht,
- FT_Memory memory )
- {
- if ( ht != 0 )
- {
- int i, sz = ht->size;
- hashnode* bp = ht->table;
-
-
- for ( i = 0; i < sz; i++, bp++ )
- FT_FREE( *bp );
-
- FT_FREE( ht->table );
- }
- }
-
-
- static FT_Error
- hash_insert( char* key,
- void* data,
- hashtable* ht,
- FT_Memory memory )
- {
- hashnode nn, *bp = hash_bucket( key, ht );
- FT_Error error = BDF_Err_Ok;
-
-
- nn = *bp;
- if ( !nn )
- {
- if ( FT_NEW( nn ) )
- goto Exit;
- *bp = nn;
-
- nn->key = key;
- nn->data = data;
-
- if ( ht->used >= ht->limit )
- {
- error = hash_rehash( ht, memory );
- if ( error )
- goto Exit;
- }
- ht->used++;
- }
- else
- nn->data = data;
-
- Exit:
- return error;
- }
-
-
- static hashnode
- hash_lookup( const char* key,
- hashtable* ht )
- {
- hashnode *np = hash_bucket( key, ht );
-
-
- return *np;
- }
-
-
- /*************************************************************************/
- /* */
- /* 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[2048];
- _bdf_list_t list;
-
- FT_Memory memory;
-
- } _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,
- int num_items )
- {
- FT_Error error = BDF_Err_Ok;
-
-
- if ( num_items > (int)list->size )
- {
- int oldsize = list->size;
- int newsize = oldsize + ( oldsize >> 1 ) + 4;
- int bigsize = FT_INT_MAX / sizeof ( char* );
- FT_Memory memory = list->memory;
-
-
- if ( oldsize == bigsize )
- {
- error = BDF_Err_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;
- }
-
-
- static char *
- _bdf_list_join( _bdf_list_t* list,
- int c,
- unsigned long *alen )
- {
- unsigned long i, j;
- char *fp, *dp;
-
-
- *alen = 0;
-
- if ( list == 0 || list->used == 0 )
- return 0;
-
- dp = list->field[0];
- for ( i = j = 0; i < list->used; i++ )
- {
- fp = list->field[i];
- while ( *fp )
- dp[j++] = *fp++;
-
- if ( i + 1 < list->used )
- dp[j++] = (char)c;
- }
- dp[j] = 0;
-
- *alen = j;
- return dp;
- }
-
-
- /* An empty string for empty fields. */
-
- static const char empty[1] = { 0 }; /* XXX eliminate this */
-
-
- static FT_Error
- _bdf_list_split( _bdf_list_t* list,
- char* separators,
- char* line,
- unsigned long linelen )
- {
- int mult, final_empty;
- char *sp, *ep, *end;
- char seps[32];
- FT_Error error = BDF_Err_Ok;
-
-
- /* Initialize the list. */
- list->used = 0;
-
- /* 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 = BDF_Err_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, bytes, hold, to_skip;
- int start, end, cursor, avail;
- char* buf = 0;
- FT_Memory memory = stream->memory;
- FT_Error error = BDF_Err_Ok;
-
-
- if ( callback == 0 )
- {
- error = BDF_Err_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;
- end = 0;
- avail = 0;
- cursor = 0;
- refill = 1;
- to_skip = NO_SKIP;
- bytes = 0; /* make compiler happy */
-
- for (;;)
- {
- if ( refill )
- {
- bytes = (int)FT_Stream_TryRead( stream, (FT_Byte*)buf + cursor,
- (FT_ULong)(buf_size - 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 */
- {
- error = BDF_Err_Invalid_Argument;
- goto Exit;
- }
-
- new_size = buf_size * 2;
- if ( FT_RENEW_ARRAY( buf, buf_size, new_size ) )
- goto Exit;
-
- cursor = buf_size;
- buf_size = new_size;
- }
- else
- {
- bytes = avail - start;
-
- FT_MEM_COPY( 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, 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 odigits[32] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 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,
- };
-
- 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,
- };
-
-
-#define isdigok( m, d ) (m[(d) >> 3] & ( 1 << ( (d) & 7 ) ) )
-
-
- /* Routine to convert an ASCII string into an unsigned long integer. */
- static unsigned long
- _bdf_atoul( char* s,
- char** end,
- int base )
- {
- unsigned long v;
- const unsigned char* dmap;
-
-
- if ( s == 0 || *s == 0 )
- return 0;
-
- /* Make sure the radix is something recognizable. Default to 10. */
- switch ( base )
- {
- case 8:
- dmap = odigits;
- break;
- case 16:
- dmap = hdigits;
- break;
- default:
- base = 10;
- dmap = ddigits;
- break;
- }
-
- /* Check for the special hex prefix. */
- if ( *s == '0' &&
- ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
- {
- base = 16;
- dmap = hdigits;
- s += 2;
- }
-
- for ( v = 0; isdigok( dmap, *s ); s++ )
- v = v * base + a2i[(int)*s];
-
- if ( end != 0 )
- *end = s;
-
- return v;
- }
-
-
- /* Routine to convert an ASCII string into an signed long integer. */
- static long
- _bdf_atol( char* s,
- char** end,
- int base )
- {
- long v, neg;
- const unsigned char* dmap;
-
-
- if ( s == 0 || *s == 0 )
- return 0;
-
- /* Make sure the radix is something recognizable. Default to 10. */
- switch ( base )
- {
- case 8:
- dmap = odigits;
- break;
- case 16:
- dmap = hdigits;
- break;
- default:
- base = 10;
- dmap = ddigits;
- break;
- }
-
- /* Check for a minus sign. */
- neg = 0;
- if ( *s == '-' )
- {
- s++;
- neg = 1;
- }
-
- /* Check for the special hex prefix. */
- if ( *s == '0' &&
- ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
- {
- base = 16;
- dmap = hdigits;
- s += 2;
- }
-
- for ( v = 0; isdigok( dmap, *s ); s++ )
- v = v * base + a2i[(int)*s];
-
- if ( end != 0 )
- *end = s;
-
- return ( !neg ) ? v : -v;
- }
-
-
- /* Routine to convert an ASCII string into an signed short integer. */
- static short
- _bdf_atos( char* s,
- char** end,
- int base )
- {
- short v, neg;
- const unsigned char* dmap;
-
-
- if ( s == 0 || *s == 0 )
- return 0;
-
- /* Make sure the radix is something recognizable. Default to 10. */
- switch ( base )
- {
- case 8:
- dmap = odigits;
- break;
- case 16:
- dmap = hdigits;
- break;
- default:
- base = 10;
- dmap = ddigits;
- break;
- }
-
- /* Check for a minus. */
- neg = 0;
- if ( *s == '-' )
- {
- s++;
- neg = 1;
- }
-
- /* Check for the special hex prefix. */
- if ( *s == '0' &&
- ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
- {
- base = 16;
- dmap = hdigits;
- s += 2;
- }
-
- for ( v = 0; isdigok( dmap, *s ); s++ )
- v = (short)( v * base + a2i[(int)*s] );
-
- if ( end != 0 )
- *end = s;
-
- 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 )
- {
- unsigned long n;
- bdf_property_t* p;
- FT_Memory memory = font->memory;
- FT_Error error = BDF_Err_Ok;
-
-
- /* First check to see if the property has */
- /* already been added or not. If it has, then */
- /* simply ignore it. */
- if ( hash_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 = (unsigned long)( ft_strlen( name ) + 1 );
-
- 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 = hash_insert( p->name, (void *)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 )
- {
- hashnode hn;
- unsigned long propid;
-
-
- if ( name == 0 || *name == 0 )
- return 0;
-
- if ( ( hn = hash_lookup( name, &(font->proptbl) ) ) == 0 )
- return 0;
-
- propid = (unsigned long)hn->data;
- 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 0x0001
-#define _BDF_FONT_NAME 0x0002
-#define _BDF_SIZE 0x0004
-#define _BDF_FONT_BBX 0x0008
-#define _BDF_PROPS 0x0010
-#define _BDF_GLYPHS 0x0020
-#define _BDF_GLYPH 0x0040
-#define _BDF_ENCODING 0x0080
-#define _BDF_SWIDTH 0x0100
-#define _BDF_DWIDTH 0x0200
-#define _BDF_BBX 0x0400
-#define _BDF_BITMAP 0x0800
-
-#define _BDF_SWIDTH_ADJ 0x1000
-
-#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
-
-
- /* 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"
-
- /* 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"
-
-
- 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 = BDF_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 len;
- char name[256];
- _bdf_list_t list;
- FT_Memory memory;
- FT_Error error = BDF_Err_Ok;
-
-
- if ( font == 0 || font->name == 0 || font->name[0] == 0 )
- {
- error = BDF_Err_Invalid_Argument;
- goto Exit;
- }
-
- memory = font->memory;
-
- _bdf_list_init( &list, memory );
-
- font->spacing = opts->font_spacing;
-
- len = (unsigned long)( ft_strlen( font->name ) + 1 );
- /* Limit ourselves to 256 characters in the font name. */
- if ( len >= 256 )
- {
- error = BDF_Err_Invalid_Argument;
- goto Exit;
- }
-
- FT_MEM_COPY( name, font->name, len );
-
- error = _bdf_list_split( &list, (char *)"-", name, 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. */
- *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 propid;
- hashnode hn;
- bdf_property_t *prop, *fp;
- FT_Memory memory = font->memory;
- FT_Error error = BDF_Err_Ok;
-
-
- /* First, check to see if the property already exists in the font. */
- if ( ( hn = hash_lookup( name, (hashtable *)font->internal ) ) != 0 )
- {
- /* The property already exists in the font, so simply replace */
- /* the value of the property with the current value. */
- fp = font->props + (unsigned long)hn->data;
-
- 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.int32 = _bdf_atol( value, 0, 10 );
- break;
-
- case BDF_CARDINAL:
- fp->value.card32 = _bdf_atoul( value, 0, 10 );
- break;
-
- default:
- ;
- }
-
- goto Exit;
- }
-
- /* See whether this property type exists yet or not. */
- /* If not, create it. */
- hn = hash_lookup( name, &(font->proptbl) );
- if ( hn == 0 )
- {
- error = bdf_create_property( name, BDF_ATOM, font );
- if ( error )
- goto Exit;
- hn = hash_lookup( name, &(font->proptbl) );
- }
-
- /* Allocate another property if this is overflow. */
- 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_MEM_ZERO( fp, sizeof ( bdf_property_t ) );
- font->props_size++;
- }
-
- propid = (unsigned long)hn->data;
- 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.int32 = _bdf_atol( value, 0, 10 );
- break;
-
- case BDF_CARDINAL:
- fp->value.card32 = _bdf_atoul( value, 0, 10 );
- break;
- }
-
- /* If the property happens to be a comment, then it doesn't need */
- /* to be added to the internal hash table. */
- if ( ft_memcmp( name, "COMMENT", 7 ) != 0 ) {
- /* Add the property to the font property table. */
- error = hash_insert( fp->name,
- (void *)font->props_used,
- (hashtable *)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 ( ft_memcmp( name, "DEFAULT_CHAR", 12 ) == 0 )
- font->default_char = fp->value.int32;
- else if ( ft_memcmp( name, "FONT_ASCENT", 11 ) == 0 )
- font->font_ascent = fp->value.int32;
- else if ( ft_memcmp( name, "FONT_DESCENT", 12 ) == 0 )
- font->font_descent = fp->value.int32;
- else if ( ft_memcmp( name, "SPACING", 7 ) == 0 )
- {
- 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 = BDF_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 ( ft_memcmp( 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 ( ft_memcmp( line, "CHARS", 5 ) != 0 )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "CHARS" ));
- error = BDF_Err_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], 0, 10 );
-
- /* 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 >= 1114112UL )
- {
- error = BDF_Err_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 ( ft_memcmp( line, "ENDFONT", 7 ) == 0 )
- {
- /* 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 ( ft_memcmp( line, "ENDCHAR", 7 ) == 0 )
- {
- p->glyph_enc = 0;
- p->flags &= ~_BDF_GLYPH_BITS;
-
- goto Exit;
- }
-
- /* Check to see 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 ( ft_memcmp( line, "STARTCHAR", 9 ) == 0 )
- {
- /* 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 )
- {
- error = BDF_Err_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;
-
- goto Exit;
- }
-
- /* Check for the ENCODING field. */
- if ( ft_memcmp( line, "ENCODING", 8 ) == 0 )
- {
- if ( !( p->flags & _BDF_GLYPH ) )
- {
- /* Missing STARTCHAR field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "STARTCHAR" ));
- error = BDF_Err_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], 0, 10 );
-
- /* Check that the encoding is in the range [0,65536] because */
- /* otherwise p->have (a bitmap with static size) overflows. */
- if ( (size_t)p->glyph_enc >= sizeof ( p->have ) * 8 )
- {
- error = BDF_Err_Invalid_File_Format;
- goto Exit;
- }
-
- /* Check to see 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 = 0;
- }
- else
- {
- /* Unencoded glyph. Check to see 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 = font->unencoded_used++;
- }
- else
- /* Free up the glyph name if the unencoded shouldn't be */
- /* kept. */
- FT_FREE( p->glyph_name );
-
- p->glyph_name = 0;
- }
-
- /* 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 to see 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];
- *bp = (FT_Byte)( ( *bp << 4 ) + a2i[c] );
- if ( i + 1 < nibbles && ( i & 1 ) )
- *++bp = 0;
- }
-
- /* 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 ( ( line[nibbles] == '0' || a2i[(int)line[nibbles]] != 0 ) &&
- !( 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 ( ft_memcmp( line, "SWIDTH", 6 ) == 0 )
- {
- if ( !( p->flags & _BDF_ENCODING ) )
- {
- /* Missing ENCODING field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENCODING" ));
- error = BDF_Err_Missing_Encoding_Field;
- goto Exit;
- }
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- glyph->swidth = (unsigned short)_bdf_atoul( p->list.field[1], 0, 10 );
- p->flags |= _BDF_SWIDTH;
-
- goto Exit;
- }
-
- /* Expect the DWIDTH (scalable width) field next. */
- if ( ft_memcmp( line, "DWIDTH", 6 ) == 0 )
- {
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- glyph->dwidth = (unsigned short)_bdf_atoul( p->list.field[1], 0, 10 );
-
- 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 ( ft_memcmp( line, "BBX", 3 ) == 0 )
- {
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- glyph->bbx.width = _bdf_atos( p->list.field[1], 0, 10 );
- glyph->bbx.height = _bdf_atos( p->list.field[2], 0, 10 );
- glyph->bbx.x_offset = _bdf_atos( p->list.field[3], 0, 10 );
- glyph->bbx.y_offset = _bdf_atos( p->list.field[4], 0, 10 );
-
- /* 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 ( ft_memcmp( 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 = BDF_Err_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 ( bitmap_size > 0xFFFFU )
- {
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG4, lineno ));
- error = BDF_Err_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;
- }
-
- error = BDF_Err_Invalid_File_Format;
-
- Exit:
- 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 = BDF_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 ( ft_memcmp( 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 );
- 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 );
- 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 ( ft_memcmp( line, "_XFREE86_GLYPH_RANGES", 21 ) == 0 )
- goto Exit;
-
- /* Handle COMMENT fields and properties in a special way to preserve */
- /* the spacing. */
- if ( ft_memcmp( line, "COMMENT", 7 ) == 0 )
- {
- name = value = line;
- value += 7;
- if ( *value )
- *value++ = 0;
- error = _bdf_add_property( p->font, name, value );
- if ( error )
- goto Exit;
- }
- else if ( _bdf_is_atom( line, linelen, &name, &value, p->font ) )
- {
- error = _bdf_add_property( p->font, name, value );
- 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 );
- 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 = BDF_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 ( ft_memcmp( 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 ( ft_memcmp( line, "STARTFONT", 9 ) != 0 )
- {
- /* No STARTFONT field is a good indication of a problem. */
- error = BDF_Err_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 */
- unsigned long i;
- bdf_property_t* prop;
-
-
- error = hash_init( &(font->proptbl), memory );
- if ( error )
- goto Exit;
- for ( i = 0, prop = (bdf_property_t*)_bdf_properties;
- i < _num_bdf_properties; i++, prop++ )
- {
- error = hash_insert( prop->name, (void *)i,
- &(font->proptbl), memory );
- if ( error )
- goto Exit;
- }
- }
-
- if ( FT_ALLOC( p->font->internal, sizeof ( hashtable ) ) )
- goto Exit;
- error = hash_init( (hashtable *)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 ( ft_memcmp( line, "STARTPROPERTIES", 15 ) == 0 )
- {
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
- p->cnt = p->font->props_size = _bdf_atoul( p->list.field[1], 0, 10 );
-
- if ( FT_NEW_ARRAY( p->font->props, p->cnt ) )
- goto Exit;
-
- p->flags |= _BDF_PROPS;
- *next = _bdf_parse_properties;
-
- goto Exit;
- }
-
- /* Check for the FONTBOUNDINGBOX field. */
- if ( ft_memcmp( line, "FONTBOUNDINGBOX", 15 ) == 0 )
- {
- if ( !(p->flags & _BDF_SIZE ) )
- {
- /* Missing the SIZE field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "SIZE" ));
- error = BDF_Err_Missing_Size_Field;
- goto Exit;
- }
-
- error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
- if ( error )
- goto Exit;
-
- p->font->bbx.width = _bdf_atos( p->list.field[1], 0, 10 );
- p->font->bbx.height = _bdf_atos( p->list.field[2], 0, 10 );
-
- p->font->bbx.x_offset = _bdf_atos( p->list.field[3], 0, 10 );
- p->font->bbx.y_offset = _bdf_atos( p->list.field[4], 0, 10 );
-
- 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 ( ft_memcmp( 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 )
- {
- error = BDF_Err_Invalid_File_Format;
- goto Exit;
- }
-
- 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 );
- if ( error )
- goto Exit;
-
- p->flags |= _BDF_FONT_NAME;
-
- goto Exit;
- }
-
- /* Check for the SIZE field. */
- if ( ft_memcmp( line, "SIZE", 4 ) == 0 )
- {
- if ( !( p->flags & _BDF_FONT_NAME ) )
- {
- /* Missing the FONT field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONT" ));
- error = BDF_Err_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], 0, 10 );
- p->font->resolution_x = _bdf_atoul( p->list.field[2], 0, 10 );
- p->font->resolution_y = _bdf_atoul( p->list.field[3], 0, 10 );
-
- /* Check for the bits per pixel field. */
- if ( p->list.used == 5 )
- {
- unsigned short bitcount, i, shift;
-
-
- p->font->bpp = (unsigned short)_bdf_atos( p->list.field[4], 0, 10 );
-
- /* Only values 1, 2, 4, 8 are allowed. */
- shift = p->font->bpp;
- bitcount = 0;
- for ( i = 0; shift > 0; i++ )
- {
- if ( shift & 1 )
- bitcount = i;
- shift >>= 1;
- }
-
- shift = (short)( ( bitcount > 3 ) ? 8 : ( 1 << bitcount ) );
-
- if ( p->font->bpp > shift || p->font->bpp != shift )
- {
- /* select next higher value */
- p->font->bpp = (unsigned short)( shift << 1 );
- FT_TRACE2(( "_bdf_parse_start: " ACMSG11, p->font->bpp ));
- }
- }
- else
- p->font->bpp = 1;
-
- p->flags |= _BDF_SIZE;
-
- goto Exit;
- }
-
- error = BDF_Err_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;
-
- FT_Memory memory = extmemory;
- FT_Error error = BDF_Err_Ok;
-
-
- if ( FT_NEW( p ) )
- goto Exit;
-
- memory = NULL;
- p->opts = (bdf_options_t*)( ( opts != 0 ) ? opts : &_bdf_opts );
- p->minlb = 32767;
- 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. */
- memory = p->font->memory;
-
- 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 = BDF_Err_Corrupted_Font_Header;
- goto Exit;
- }
- else
- {
- /* Error happened when parsing glyphs. */
- FT_ERROR(( "bdf_load_font: " ERRMSG3, lineno ));
- error = BDF_Err_Corrupted_Font_Glyphs;
- goto Exit;
- }
- }
- }
-
- 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 == BDF_Err_Ok )
- error = BDF_Err_Invalid_File_Format;
-
- *font = p->font;
-
- Exit:
- if ( p )
- {
- _bdf_list_done( &p->list );
-
- memory = extmemory;
-
- 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 )
- {
- hash_free( (hashtable *)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 */
- hash_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 )
- {
- hashnode hn;
-
-
- if ( font == 0 || font->props_size == 0 || name == 0 || *name == 0 )
- return 0;
-
- hn = hash_lookup( name, (hashtable *)font->internal );
-
- return hn ? ( font->props + (unsigned long)hn->data ) : 0;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/bdf/module.mk b/Build/source/libs/freetype2/src/bdf/module.mk
deleted file mode 100644
index dfaa2744ebe..00000000000
--- a/Build/source/libs/freetype2/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)bdf_driver_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)bdf $(ECHO_DRIVER_DESC)bdf bitmap fonts$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/bdf/rules.mk b/Build/source/libs/freetype2/src/bdf/rules.mk
deleted file mode 100644
index 25d98e55b07..00000000000
--- a/Build/source/libs/freetype2/src/bdf/rules.mk
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# FreeType 2 bdf driver configuration rules
-#
-
-
-# Copyright (C) 2001, 2002, 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.
-
-
-
-
-# bdf driver directory
-#
-BDF_DIR := $(SRC_DIR)/bdf
-
-
-BDF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(BDF_DIR))
-
-
-# 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 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/Build/source/libs/freetype2/src/cache/Jamfile b/Build/source/libs/freetype2/src/cache/Jamfile
deleted file mode 100644
index 340cff77423..00000000000
--- a/Build/source/libs/freetype2/src/cache/Jamfile
+++ /dev/null
@@ -1,43 +0,0 @@
-# FreeType 2 src/cache Jamfile
-#
-# Copyright 2001, 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cache ;
-
-# The file <freetype/ftcache.h> contains some macro definitions that are
-# later used in #include statements related to the cache sub-system. It
-# needs to be parsed through a HDRMACRO rule for macro definitions.
-#
-HDRMACRO [ FT2_SubDir include ftcache.h ] ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftcmru
- ftcmanag
- ftccache
- ftcglyph
- ftcsbits
- ftcimage
- ftcbasic
- ftccmap
- ;
- }
- else
- {
- _sources = ftcache ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cache Jamfile
diff --git a/Build/source/libs/freetype2/src/cache/ftcache.c b/Build/source/libs/freetype2/src/cache/ftcache.c
deleted file mode 100644
index d41e91e5ec1..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcache.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcache.c */
-/* */
-/* The FreeType Caching sub-system (body only). */
-/* */
-/* Copyright 2000-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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "ftcmru.c"
-#include "ftcmanag.c"
-#include "ftccache.c"
-#include "ftccmap.c"
-#include "ftcglyph.c"
-#include "ftcimage.c"
-#include "ftcsbits.c"
-#include "ftcbasic.c"
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftcbasic.c b/Build/source/libs/freetype2/src/cache/ftcbasic.c
deleted file mode 100644
index a568b975bb1..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcbasic.c
+++ /dev/null
@@ -1,811 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcbasic.c */
-/* */
-/* The FreeType basic cache interface (body). */
-/* */
-/* Copyright 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "ftcglyph.h"
-#include "ftcimage.h"
-#include "ftcsbits.h"
-#include FT_INTERNAL_MEMORY_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*
- * These structures correspond to the FTC_Font and FTC_ImageDesc types
- * that were defined in version 2.1.7.
- */
- typedef struct FTC_OldFontRec_
- {
- FTC_FaceID face_id;
- FT_UShort pix_width;
- FT_UShort pix_height;
-
- } FTC_OldFontRec, *FTC_OldFont;
-
-
- typedef struct FTC_OldImageDescRec_
- {
- FTC_OldFontRec font;
- FT_UInt32 flags;
-
- } FTC_OldImageDescRec, *FTC_OldImageDesc;
-
-
- /*
- * Notice that FTC_OldImageDescRec and FTC_ImageTypeRec are nearly
- * identical, bit-wise. The only difference is that the `width' and
- * `height' fields are expressed as 16-bit integers in the old structure,
- * and as normal `int' in the new one.
- *
- * We are going to perform a weird hack to detect which structure is
- * being passed to the image and sbit caches. If the new structure's
- * `width' is larger than 0x10000, we assume that we are really receiving
- * an FTC_OldImageDesc.
- */
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*
- * 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 )
- result = 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,
- 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, 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 = FTC_Err_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 )
- {
- FTC_GNode gnode = (FTC_GNode)ftcgnode;
- FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
- FTC_BasicFamily family = (FTC_BasicFamily)gnode->family;
- FT_Bool result;
-
-
- 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
- *
- */
-
- FT_CALLBACK_TABLE_DEF
- const FTC_IFamilyClassRec ftc_basic_image_family_class =
- {
- {
- sizeof ( FTC_BasicFamilyRec ),
- ftc_basic_family_compare,
- ftc_basic_family_init,
- 0, /* FTC_MruNode_ResetFunc */
- 0 /* FTC_MruNode_DoneFunc */
- },
- ftc_basic_family_load_glyph
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const FTC_GCacheClassRec ftc_basic_image_cache_class =
- {
- {
- ftc_inode_new,
- ftc_inode_weight,
- ftc_gnode_compare,
- ftc_basic_gnode_compare_faceid,
- ftc_inode_free,
-
- sizeof ( FTC_GCacheRec ),
- ftc_gcache_init,
- ftc_gcache_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_INode node = 0; /* make compiler happy */
- FT_Error error;
- FT_UInt32 hash;
-
-
- /* some argument checks are delayed to FTC_Cache_Lookup */
- if ( !aglyph )
- {
- error = FTC_Err_Invalid_Argument;
- goto Exit;
- }
-
- *aglyph = NULL;
- if ( anode )
- *anode = NULL;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*
- * This one is a major hack used to detect whether we are passed a
- * regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
- */
- if ( type->width >= 0x10000 )
- {
- FTC_OldImageDesc desc = (FTC_OldImageDesc)type;
-
-
- query.attrs.scaler.face_id = desc->font.face_id;
- query.attrs.scaler.width = desc->font.pix_width;
- query.attrs.scaler.height = desc->font.pix_height;
- query.attrs.load_flags = desc->flags;
- }
- else
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
- {
- query.attrs.scaler.face_id = type->face_id;
- query.attrs.scaler.width = type->width;
- query.attrs.scaler.height = type->height;
- query.attrs.load_flags = 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 ),
- (FTC_Node*) &node );
-#endif
- if ( !error )
- {
- *aglyph = FTC_INODE( node )->glyph;
-
- if ( anode )
- {
- *anode = FTC_NODE( node );
- FTC_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_INode node = 0; /* make compiler happy */
- FT_Error error;
- FT_UInt32 hash;
-
-
- /* some argument checks are delayed to FTC_Cache_Lookup */
- if ( !aglyph || !scaler )
- {
- error = FTC_Err_Invalid_Argument;
- goto Exit;
- }
-
- *aglyph = NULL;
- if ( anode )
- *anode = NULL;
-
- query.attrs.scaler = scaler[0];
- query.attrs.load_flags = 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 = FTC_NODE( node );
- FTC_NODE( node )->ref_count++;
- }
- }
-
- Exit:
- return error;
- }
-
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /* yet another backwards-legacy structure */
- typedef struct FTC_OldImage_Desc_
- {
- FTC_FontRec font;
- FT_UInt image_type;
-
- } FTC_OldImage_Desc;
-
-
-#define FTC_OLD_IMAGE_FORMAT( x ) ( (x) & 7 )
-
-
-#define ftc_old_image_format_bitmap 0x0000
-#define ftc_old_image_format_outline 0x0001
-
-#define ftc_old_image_format_mask 0x000F
-
-#define ftc_old_image_flag_monochrome 0x0010
-#define ftc_old_image_flag_unhinted 0x0020
-#define ftc_old_image_flag_autohinted 0x0040
-#define ftc_old_image_flag_unscaled 0x0080
-#define ftc_old_image_flag_no_sbits 0x0100
-
- /* monochrome bitmap */
-#define ftc_old_image_mono ftc_old_image_format_bitmap | \
- ftc_old_image_flag_monochrome
-
- /* anti-aliased bitmap */
-#define ftc_old_image_grays ftc_old_image_format_bitmap
-
- /* scaled outline */
-#define ftc_old_image_outline ftc_old_image_format_outline
-
-
- static void
- ftc_image_type_from_old_desc( FTC_ImageType typ,
- FTC_OldImage_Desc* desc )
- {
- typ->face_id = desc->font.face_id;
- typ->width = desc->font.pix_width;
- typ->height = desc->font.pix_height;
-
- /* convert image type flags to load flags */
- {
- FT_UInt load_flags = FT_LOAD_DEFAULT;
- FT_UInt type = desc->image_type;
-
-
- /* determine load flags, depending on the font description's */
- /* image type */
-
- if ( FTC_OLD_IMAGE_FORMAT( type ) == ftc_old_image_format_bitmap )
- {
- if ( type & ftc_old_image_flag_monochrome )
- load_flags |= FT_LOAD_MONOCHROME;
-
- /* disable embedded bitmaps loading if necessary */
- if ( type & ftc_old_image_flag_no_sbits )
- load_flags |= FT_LOAD_NO_BITMAP;
- }
- else
- {
- /* we want an outline, don't load embedded bitmaps */
- load_flags |= FT_LOAD_NO_BITMAP;
-
- if ( type & ftc_old_image_flag_unscaled )
- load_flags |= FT_LOAD_NO_SCALE;
- }
-
- /* always render glyphs to bitmaps */
- load_flags |= FT_LOAD_RENDER;
-
- if ( type & ftc_old_image_flag_unhinted )
- load_flags |= FT_LOAD_NO_HINTING;
-
- if ( type & ftc_old_image_flag_autohinted )
- load_flags |= FT_LOAD_FORCE_AUTOHINT;
-
- typ->flags = load_flags;
- }
- }
-
-
- FT_EXPORT( FT_Error )
- FTC_Image_Cache_New( FTC_Manager manager,
- FTC_ImageCache *acache );
-
- FT_EXPORT( FT_Error )
- FTC_Image_Cache_Lookup( FTC_ImageCache icache,
- FTC_OldImage_Desc* desc,
- FT_UInt gindex,
- FT_Glyph *aglyph );
-
-
- FT_EXPORT_DEF( FT_Error )
- FTC_Image_Cache_New( FTC_Manager manager,
- FTC_ImageCache *acache )
- {
- return FTC_ImageCache_New( manager, (FTC_ImageCache*)acache );
- }
-
-
-
- FT_EXPORT_DEF( FT_Error )
- FTC_Image_Cache_Lookup( FTC_ImageCache icache,
- FTC_OldImage_Desc* desc,
- FT_UInt gindex,
- FT_Glyph *aglyph )
- {
- FTC_ImageTypeRec type0;
-
-
- if ( !desc )
- return FTC_Err_Invalid_Argument;
-
- ftc_image_type_from_old_desc( &type0, desc );
-
- return FTC_ImageCache_Lookup( (FTC_ImageCache)icache,
- &type0,
- gindex,
- aglyph,
- NULL );
- }
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- /*
- *
- * basic small bitmap cache
- *
- */
-
-
- FT_CALLBACK_TABLE_DEF
- const FTC_SFamilyClassRec ftc_basic_sbit_family_class =
- {
- {
- sizeof( FTC_BasicFamilyRec ),
- ftc_basic_family_compare,
- ftc_basic_family_init,
- 0, /* FTC_MruNode_ResetFunc */
- 0 /* FTC_MruNode_DoneFunc */
- },
- ftc_basic_family_get_count,
- ftc_basic_family_load_bitmap
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const FTC_GCacheClassRec ftc_basic_sbit_cache_class =
- {
- {
- ftc_snode_new,
- ftc_snode_weight,
- ftc_snode_compare,
- ftc_basic_gnode_compare_faceid,
- ftc_snode_free,
-
- sizeof ( FTC_GCacheRec ),
- ftc_gcache_init,
- ftc_gcache_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_SNode node = 0; /* make compiler happy */
- FT_UInt32 hash;
-
-
- if ( anode )
- *anode = NULL;
-
- /* other argument checks delayed to FTC_Cache_Lookup */
- if ( !ansbit )
- return FTC_Err_Invalid_Argument;
-
- *ansbit = NULL;
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /* This one is a major hack used to detect whether we are passed a
- * regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
- */
- if ( type->width >= 0x10000 )
- {
- FTC_OldImageDesc desc = (FTC_OldImageDesc)type;
-
-
- query.attrs.scaler.face_id = desc->font.face_id;
- query.attrs.scaler.width = desc->font.pix_width;
- query.attrs.scaler.height = desc->font.pix_height;
- query.attrs.load_flags = desc->flags;
- }
- else
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
- {
- query.attrs.scaler.face_id = type->face_id;
- query.attrs.scaler.width = type->width;
- query.attrs.scaler.height = type->height;
- query.attrs.load_flags = 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 ),
- (FTC_Node*)&node );
-#endif
- if ( error )
- goto Exit;
-
- *ansbit = node->sbits + ( gindex - FTC_GNODE( node )->gindex );
-
- if ( anode )
- {
- *anode = FTC_NODE( node );
- FTC_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_SNode node = 0; /* make compiler happy */
- FT_UInt32 hash;
-
-
- if ( anode )
- *anode = NULL;
-
- /* other argument checks delayed to FTC_Cache_Lookup */
- if ( !ansbit || !scaler )
- return FTC_Err_Invalid_Argument;
-
- *ansbit = NULL;
-
- query.attrs.scaler = scaler[0];
- query.attrs.load_flags = 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 = node->sbits + ( gindex - FTC_GNODE( node )->gindex );
-
- if ( anode )
- {
- *anode = FTC_NODE( node );
- FTC_NODE( node )->ref_count++;
- }
-
- Exit:
- return error;
- }
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_EXPORT( FT_Error )
- FTC_SBit_Cache_New( FTC_Manager manager,
- FTC_SBitCache *acache );
-
- FT_EXPORT( FT_Error )
- FTC_SBit_Cache_Lookup( FTC_SBitCache cache,
- FTC_OldImage_Desc* desc,
- FT_UInt gindex,
- FTC_SBit *ansbit );
-
-
- FT_EXPORT_DEF( FT_Error )
- FTC_SBit_Cache_New( FTC_Manager manager,
- FTC_SBitCache *acache )
- {
- return FTC_SBitCache_New( manager, (FTC_SBitCache*)acache );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FTC_SBit_Cache_Lookup( FTC_SBitCache cache,
- FTC_OldImage_Desc* desc,
- FT_UInt gindex,
- FTC_SBit *ansbit )
- {
- FTC_ImageTypeRec type0;
-
-
- if ( !desc )
- return FT_Err_Invalid_Argument;
-
- ftc_image_type_from_old_desc( &type0, desc );
-
- return FTC_SBitCache_Lookup( (FTC_SBitCache)cache,
- &type0,
- gindex,
- ansbit,
- NULL );
- }
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftccache.c b/Build/source/libs/freetype2/src/cache/ftccache.c
deleted file mode 100644
index f3e699c3850..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftccache.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccache.c */
-/* */
-/* The FreeType internal cache interface (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
-#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 );
- }
-
-#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_UInt p = cache->p;
- FT_UInt mask = cache->mask;
- FT_UInt 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 == NULL )
- 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_UInt 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;
- }
- else /* the hash table is balanced */
- 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;
- FT_UInt idx;
-
-
- idx = (FT_UInt)( node0->hash & cache->mask );
- if ( idx < cache->p )
- idx = (FT_UInt)( node0->hash & ( 2 * cache->mask + 1 ) );
-
- pnode = cache->buckets + idx;
-
- for (;;)
- {
- FTC_Node node = *pnode;
-
-
- if ( node == NULL )
- {
- FT_ERROR(( "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;
- FT_UInt idx;
-
-
- idx = (FT_UInt)( node->hash & cache->mask );
- if ( idx < cache->p )
- idx = (FT_UInt)( node->hash & (2 * cache->mask + 1 ) );
-
- pnode = cache->buckets + idx;
-
- node->link = *pnode;
- *pnode = node;
-
- cache->slack--;
- ftc_cache_resize( cache );
- }
-
-
- /* remove a node from the cache manager */
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- FT_BASE_DEF( void )
-#else
- FT_LOCAL_DEF( void )
-#endif
- 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_ERROR(( "ftc_node_destroy: invalid node handle\n" ));
- return;
- }
-#endif
-
- cache = manager->caches[node->cache_index];
-
-#ifdef FT_DEBUG_ERROR
- if ( cache == NULL )
- {
- FT_ERROR(( "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_ERROR(( "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 )
- {
- FTC_Manager manager = cache->manager;
- FT_UFast i;
- FT_UInt 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_UInt32 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_UInt32 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();
-
- 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_UInt32 hash,
- FT_Pointer query,
- FTC_Node *anode )
- {
- FT_UFast idx;
- FTC_Node* bucket;
- FTC_Node* pnode;
- FTC_Node node;
- FT_Error error = 0;
-
- FTC_Node_CompareFunc compare = cache->clazz.node_compare;
-
-
- if ( cache == NULL || anode == NULL )
- return FT_Err_Invalid_Argument;
-
- idx = hash & cache->mask;
- if ( idx < cache->p )
- idx = hash & ( cache->mask * 2 + 1 );
-
- bucket = cache->buckets + idx;
- pnode = bucket;
- for (;;)
- {
- node = *pnode;
- if ( node == NULL )
- goto NewNode;
-
- if ( node->hash == hash && compare( node, query, cache ) )
- break;
-
- pnode = &node->link;
- }
-
- 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;
- for ( i = 0; i < count; i++ )
- {
- FTC_Node* bucket = cache->buckets + i;
- FTC_Node* pnode = bucket;
-
-
- for ( ;; )
- {
- FTC_Node node = *pnode;
-
-
- if ( node == NULL )
- break;
-
- if ( cache->clazz.node_remove_faceid( node, face_id, cache ) )
- {
- *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/Build/source/libs/freetype2/src/cache/ftccache.h b/Build/source/libs/freetype2/src/cache/ftccache.h
deleted file mode 100644
index 8c0a7c94fe6..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftccache.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccache.h */
-/* */
-/* FreeType internal cache interface (specification). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
- /* 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_UInt32 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 FT_CONFIG_OPTION_OLD_INTERNALS
- FT_BASE( void )
- ftc_node_destroy( FTC_Node node,
- FTC_Manager manager );
-#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_ULong
- (*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 );
-
-
- 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_UInt 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 lookup 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_UInt32 hash,
- FT_Pointer query,
- FTC_Node *anode );
-#endif
-
- FT_LOCAL( FT_Error )
- FTC_Cache_NewNode( FTC_Cache cache,
- FT_UInt32 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_UInt32 _hash = (FT_UInt32)(hash); \
- FTC_Node_CompareFunc _nodcomp = (FTC_Node_CompareFunc)(nodecmp); \
- FT_UInt _idx; \
- \
- \
- error = 0; \
- node = NULL; \
- _idx = _hash & _cache->mask; \
- if ( _idx < _cache->p ) \
- _idx = _hash & ( _cache->mask*2 + 1 ); \
- \
- _bucket = _pnode = _cache->buckets + _idx; \
- for (;;) \
- { \
- _node = *_pnode; \
- if ( _node == NULL ) \
- goto _NewNode; \
- \
- if ( _node->hash == _hash && _nodcomp( _node, query, _cache ) ) \
- break; \
- \
- _pnode = &_node->link; \
- } \
- \
- if ( _node != *_bucket ) \
- { \
- *_pnode = _node->link; \
- _node->link = *_bucket; \
- *_bucket = _node; \
- } \
- \
- { \
- 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: \
- _pnode = (FTC_Node*)(void*)&(node); \
- *_pnode = _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() \
- if ( !error || error != FT_Err_Out_Of_Memory ) \
- break; \
- \
- _try_done = FTC_Manager_FlushN( _try_manager, _try_count ); \
- 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/Build/source/libs/freetype2/src/cache/ftccback.h b/Build/source/libs/freetype2/src/cache/ftccback.h
deleted file mode 100644
index 86e72a7514f..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftccback.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccback.h */
-/* */
-/* Callback functions of the caching sub-system (specification only). */
-/* */
-/* Copyright 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_ULong )
- 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_ULong )
- 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_LOCAL( FT_Bool )
- ftc_gnode_compare( FTC_Node gnode,
- FT_Pointer gquery,
- FTC_Cache cache );
-
-
- 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 );
-
-#ifndef FT_CONFIG_OPTION_OLD_INTERNALS
- FT_LOCAL( void )
- ftc_node_destroy( FTC_Node node,
- FTC_Manager manager );
-#endif
-
-#endif /* __FTCCBACK_H__ */
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftccmap.c b/Build/source/libs/freetype2/src/cache/ftccmap.c
deleted file mode 100644
index aa59307f489..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftccmap.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftccmap.c */
-/* */
-/* FreeType CharMap cache (body) */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_DEBUG_H
-#include FT_TRUETYPE_IDS_H
-
-#include "ftccback.h"
-#include "ftcerror.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- typedef enum FTC_OldCMapType_
- {
- FTC_OLD_CMAP_BY_INDEX = 0,
- FTC_OLD_CMAP_BY_ENCODING = 1,
- FTC_OLD_CMAP_BY_ID = 2
-
- } FTC_OldCMapType;
-
-
- typedef struct FTC_OldCMapIdRec_
- {
- FT_UInt platform;
- FT_UInt encoding;
-
- } FTC_OldCMapIdRec, *FTC_OldCMapId;
-
-
- typedef struct FTC_OldCMapDescRec_
- {
- FTC_FaceID face_id;
- FTC_OldCMapType type;
-
- union
- {
- FT_UInt index;
- FT_Encoding encoding;
- FTC_OldCMapIdRec id;
-
- } u;
-
- } FTC_OldCMapDescRec, *FTC_OldCMapDesc;
-
-#endif /* FT_CONFIG_OLD_INTERNALS */
-
-
- /*************************************************************************/
- /* */
- /* 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 ) + \
- ( (char_code) / 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))
-#define FTC_CMAP_QUERY_HASH( x ) \
- FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->char_code )
-
- /* 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 ) )
-#define FTC_CMAP_NODE_HASH( x ) \
- FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->first )
-
- /* 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)-1 )
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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;
- 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_ULong )
- 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 )
- {
- FTC_CMapNode node = (FTC_CMapNode)ftcnode;
- FTC_CMapQuery query = (FTC_CMapQuery)ftcquery;
- FT_UNUSED( cache );
-
-
- 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 )
- {
- FTC_CMapNode node = (FTC_CMapNode)ftcnode;
- FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
- FT_UNUSED( cache );
-
- return FT_BOOL( node->face_id == face_id );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GLYPH IMAGE CACHE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_CALLBACK_TABLE_DEF
- const FTC_CacheClassRec ftc_cmap_cache_class =
- {
- ftc_cmap_node_new,
- ftc_cmap_node_weight,
- ftc_cmap_node_compare,
- ftc_cmap_node_remove_faceid,
- ftc_cmap_node_free,
-
- sizeof ( FTC_CacheRec ),
- ftc_cache_init,
- ftc_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 ) );
- }
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*
- * Unfortunately, it is not possible to support binary backwards
- * compatibility in the cmap cache. The FTC_CMapCache_Lookup signature
- * changes were too deep, and there is no clever hackish way to detect
- * what kind of structure we are being passed.
- *
- * On the other hand it seems that no production code is using this
- * function on Unix distributions.
- */
-
-#endif
-
-
- /* 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_CMapNode node;
- FT_Error error;
- FT_UInt gindex = 0;
- FT_UInt32 hash;
-
-
- if ( !cache )
- {
- FT_ERROR(( "FTC_CMapCache_Lookup: bad arguments, returning 0!\n" ));
- return 0;
- }
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- /*
- * Detect a call from a rogue client that thinks it is linking
- * to FreeType 2.1.7. This is possible because the third parameter
- * is then a character code, and we have never seen any font with
- * more than a few charmaps, so if the index is very large...
- *
- * It is also very unlikely that a rogue client is interested
- * in Unicode values 0 to 15.
- *
- * NOTE: The original threshold was 4, but we found a font from the
- * Adobe Acrobat Reader Pack, named `KozMinProVI-Regular.otf',
- * which contains more than 5 charmaps.
- */
- if ( cmap_index >= 16 )
- {
- FTC_OldCMapDesc desc = (FTC_OldCMapDesc) face_id;
-
-
- char_code = (FT_UInt32)cmap_index;
- query.face_id = desc->face_id;
-
-
- switch ( desc->type )
- {
- case FTC_OLD_CMAP_BY_INDEX:
- query.cmap_index = desc->u.index;
- query.char_code = (FT_UInt32)cmap_index;
- break;
-
- case FTC_OLD_CMAP_BY_ENCODING:
- {
- FT_Face face;
-
-
- error = FTC_Manager_LookupFace( cache->manager, desc->face_id,
- &face );
- if ( error )
- return 0;
-
- FT_Select_Charmap( face, desc->u.encoding );
-
- return FT_Get_Char_Index( face, char_code );
- }
-
- default:
- return 0;
- }
- }
- else
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
- {
- query.face_id = face_id;
- query.cmap_index = (FT_UInt)cmap_index;
- query.char_code = char_code;
- }
-
- hash = FTC_CMAP_HASH( face_id, 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, (FTC_Node*) &node );
-#endif
- if ( error )
- goto Exit;
-
- FT_ASSERT( (FT_UInt)( char_code - node->first ) < FTC_CMAP_INDICES_MAX );
-
- /* something rotten can happen with rogue clients */
- if ( (FT_UInt)( char_code - node->first >= FTC_CMAP_INDICES_MAX ) )
- return 0;
-
- gindex = node->indices[char_code - node->first];
- if ( gindex == FTC_CMAP_UNKNOWN )
- {
- FT_Face face;
-
-
- gindex = 0;
-
- error = FTC_Manager_LookupFace( cache->manager, 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 )
- FT_Set_Charmap( face, cmap );
-
- gindex = FT_Get_Char_Index( face, char_code );
-
- if ( old != cmap )
- FT_Set_Charmap( face, old );
- }
-
- node->indices[char_code - node->first] = (FT_UShort)gindex;
- }
-
- Exit:
- return gindex;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftcerror.h b/Build/source/libs/freetype2/src/cache/ftcerror.h
deleted file mode 100644
index 5998d42daf6..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcerror.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcerror.h */
-/* */
-/* Caching sub-system error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/cache/ftcglyph.c b/Build/source/libs/freetype2/src/cache/ftcglyph.c
deleted file mode 100644
index 5c03abe0552..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcglyph.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcglyph.c */
-/* */
-/* FreeType Glyph Image (FT_Glyph) cache (body). */
-/* */
-/* Copyright 2000-2001, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "ftcglyph.h"
-#include FT_ERRORS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_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 )
- {
- FTC_GNode gnode = (FTC_GNode)ftcgnode;
- FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
- FT_UNUSED( cache );
-
-
- return FT_BOOL( gnode->family == gquery->family &&
- gnode->gindex == gquery->gindex );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- FTC_GNode_Compare( FTC_GNode gnode,
- FTC_GQuery gquery )
- {
- return ftc_gnode_compare( FTC_NODE( gnode ), gquery, NULL );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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_UInt32 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/Build/source/libs/freetype2/src/cache/ftcglyph.h b/Build/source/libs/freetype2/src/cache/ftcglyph.h
deleted file mode 100644
index 87a4199bfd8..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcglyph.h
+++ /dev/null
@@ -1,322 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcglyph.h */
-/* */
-/* FreeType abstract glyph cache (specification). */
-/* */
-/* Copyright 2000-2001, 2003, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 );
-
- /* 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 );
-
- /* 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_UInt32 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); \
- \
- \
- _gquery->gindex = (gindex); \
- \
- FTC_MRULIST_LOOKUP_CMP( &_gcache->families, _gquery, _fcompare, \
- _gquery->family, error ); \
- 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 \
- void* _n = &(node); \
- \
- \
- error = FTC_GCache_Lookup( FTC_GCACHE( cache ), hash, gindex, \
- FTC_GQUERY( query ), (FTC_Node*)_n ); \
- FT_END_STMNT
-
-#endif /* !FTC_INLINE */
-
-
-FT_END_HEADER
-
-
-#endif /* __FTCGLYPH_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftcimage.c b/Build/source/libs/freetype2/src/cache/ftcimage.c
deleted file mode 100644
index 15d4e80c8c3..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcimage.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcimage.c */
-/* */
-/* FreeType Image cache (body). */
-/* */
-/* Copyright 2000-2001, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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;
-
-
- 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_ULong )
- ftc_inode_weight( FTC_Node ftcinode,
- FTC_Cache ftccache )
- {
- FTC_INode inode = (FTC_INode)ftcinode;
- FT_ULong 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_labs( bitg->bitmap.pitch ) +
- sizeof ( *bitg );
- }
- break;
-
- case FT_GLYPH_FORMAT_OUTLINE:
- {
- FT_OutlineGlyph outg;
-
-
- outg = (FT_OutlineGlyph)glyph;
- size = outg->outline.n_points *
- ( sizeof ( FT_Vector ) + sizeof ( FT_Byte ) ) +
- outg->outline.n_contours * sizeof ( FT_Short ) +
- sizeof ( *outg );
- }
- break;
-
- default:
- ;
- }
-
- size += sizeof ( *inode );
- return size;
- }
-
-
-#if 0
-
- FT_LOCAL_DEF( FT_ULong )
- FTC_INode_Weight( FTC_INode inode )
- {
- return ftc_inode_weight( FTC_NODE( inode ), NULL );
- }
-
-#endif /* 0 */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftcimage.h b/Build/source/libs/freetype2/src/cache/ftcimage.h
deleted file mode 100644
index 20d5d3e07df..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcimage.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcimage.h */
-/* */
-/* FreeType Generic Image cache (specification) */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/cache/ftcmanag.c b/Build/source/libs/freetype2/src/cache/ftcmanag.c
deleted file mode 100644
index 9d7347c3dfd..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcmanag.c
+++ /dev/null
@@ -1,732 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmanag.c */
-/* */
-/* FreeType Cache Manager (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cache
-
-#define FTC_LRU_GET_MANAGER( lru ) ( (FTC_Manager)(lru)->user_data )
-
-
- 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, scaler->width, 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;
-
-
- 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 );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FTC_MruListClassRec ftc_size_list_class =
- {
- sizeof ( FTC_SizeNodeRec ),
- ftc_size_node_compare,
- ftc_size_node_init,
- ftc_size_node_reset,
- ftc_size_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_SizeNode node;
-
-
- if ( asize == NULL )
- return FTC_Err_Bad_Argument;
-
- *asize = NULL;
-
- if ( !manager )
- return FTC_Err_Invalid_Cache_Handle;
-
-#ifdef FTC_INLINE
-
- FTC_MRULIST_LOOKUP_CMP( &manager->sizes, scaler, ftc_size_node_compare,
- node, error );
-
-#else
- error = FTC_MruList_Lookup( &manager->sizes, scaler, (FTC_MruNode*)&node );
-#endif
-
- if ( !error )
- *asize = node->size;
-
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FACE MRU IMPLEMENTATION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct FTC_FaceNodeRec_
- {
- FTC_MruNodeRec node;
- FTC_FaceID face_id;
- FT_Face face;
-
- } FTC_FaceNodeRec, *FTC_FaceNode;
-
-
- 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 );
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FTC_MruListClassRec ftc_face_list_class =
- {
- sizeof ( FTC_FaceNodeRec),
-
- ftc_face_node_compare,
- ftc_face_node_init,
- 0, /* FTC_MruNode_ResetFunc */
- ftc_face_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_FaceNode node;
-
-
- if ( aface == NULL )
- return FTC_Err_Bad_Argument;
-
- *aface = NULL;
-
- if ( !manager )
- return FTC_Err_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,
- node, error );
-
-#else
- error = FTC_MruList_Lookup( &manager->faces, face_id, (FTC_MruNode*)&node );
-#endif
-
- if ( !error )
- *aface = node->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 FTC_Err_Invalid_Library_Handle;
-
- 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 )
- {
- FTC_MruList_Reset( &manager->sizes );
- FTC_MruList_Reset( &manager->faces );
- }
- /* XXX: FIXME: flush the caches? */
- }
-
-
-#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_ULong weight = 0;
-
-
- node = first;
-
- do
- {
- FTC_Cache cache = manager->caches[node->cache_index];
-
-
- if ( (FT_UInt)node->cache_index >= manager->num_caches )
- FT_ERROR(( "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_ERROR(( "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_ERROR((
- "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_ERROR(( "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 == NULL )
- 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 = FTC_Err_Invalid_Argument;
- FTC_Cache cache = NULL;
-
-
- if ( manager && clazz && acache )
- {
- FT_Memory memory = manager->memory;
-
-
- if ( manager->num_caches >= FTC_MAX_CACHES )
- {
- error = FTC_Err_Too_Many_Caches;
- FT_ERROR(( "%s: too many registered caches\n",
- "FTC_Manager_Register_Cache" ));
- 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:
- *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 == NULL ) /* 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;
-
- /* this will remove all FTC_SizeNode that correspond to
- * the face_id as well
- */
- FTC_MruList_RemoveSelection( &manager->faces, NULL, 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 && (FT_UInt)node->cache_index < manager->num_caches )
- node->ref_count--;
- }
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_EXPORT_DEF( FT_Error )
- FTC_Manager_Lookup_Face( FTC_Manager manager,
- FTC_FaceID face_id,
- FT_Face *aface )
- {
- return FTC_Manager_LookupFace( manager, face_id, aface );
- }
-
-
- FT_EXPORT( FT_Error )
- FTC_Manager_Lookup_Size( FTC_Manager manager,
- FTC_Font font,
- FT_Face *aface,
- FT_Size *asize )
- {
- FTC_ScalerRec scaler;
- FT_Error error;
- FT_Size size;
- FT_Face face;
-
-
- scaler.face_id = font->face_id;
- scaler.width = font->pix_width;
- scaler.height = font->pix_height;
- scaler.pixel = TRUE;
- scaler.x_res = 0;
- scaler.y_res = 0;
-
- error = FTC_Manager_LookupSize( manager, &scaler, &size );
- if ( error )
- {
- face = NULL;
- size = NULL;
- }
- else
- face = size->face;
-
- if ( aface )
- *aface = face;
-
- if ( asize )
- *asize = size;
-
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftcmanag.h b/Build/source/libs/freetype2/src/cache/ftcmanag.h
deleted file mode 100644
index 3fdc2c773b4..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcmanag.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmanag.h */
-/* */
-/* FreeType Cache Manager (specification). */
-/* */
-/* Copyright 2000-2001, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_ULong max_weight;
- FT_ULong 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/Build/source/libs/freetype2/src/cache/ftcmru.c b/Build/source/libs/freetype2/src/cache/ftcmru.c
deleted file mode 100644
index 3a6c625afa5..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcmru.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmru.c */
-/* */
-/* FreeType MRU support (body). */
-/* */
-/* Copyright 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 != NULL );
-
- 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 != NULL );
-
-#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;
- 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 == NULL )
- 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 == NULL || 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/Build/source/libs/freetype2/src/cache/ftcmru.h b/Build/source/libs/freetype2/src/cache/ftcmru.h
deleted file mode 100644
index c8f0c6ef6e3..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcmru.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcmru.h */
-/* */
-/* Simple MRU list-cache (specification). */
-/* */
-/* Copyright 2000-2001, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_UInt 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, *_pnode; \
- \
- \
- error = 0; \
- _first = *(_pfirst); \
- _node = NULL; \
- \
- if ( _first ) \
- { \
- _node = _first; \
- do \
- { \
- if ( _compare( _node, (key) ) ) \
- { \
- if ( _node != _first ) \
- FTC_MruNode_Up( _pfirst, _node ); \
- \
- _pnode = (FTC_MruNode*)(void*)&(node); \
- *_pnode = _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/Build/source/libs/freetype2/src/cache/ftcsbits.c b/Build/source/libs/freetype2/src/cache/ftcsbits.c
deleted file mode 100644
index 72f139d565b..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcsbits.c
+++ /dev/null
@@ -1,401 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcsbits.c */
-/* */
-/* FreeType sbits manager (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 ( !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 FTC_Err_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_Int xadvance, yadvance;
-
-
- if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
- {
- FT_ERROR(( "%s: glyph loaded didn't return a bitmap!\n",
- "ftc_snode_load" ));
- goto BadGlyph;
- }
-
- /* Check that 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, temp == d )
-#define CHECK_BYTE( d ) ( temp = (FT_Byte)d, temp == 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 ) )
- 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_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 && error != FTC_Err_Out_Of_Memory )
- {
- BadGlyph:
- sbit->width = 255;
- sbit->height = 0;
- sbit->buffer = NULL;
- error = 0;
- 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;
-
-
- total = clazz->family_get_count( family, cache->manager );
- if ( total == 0 || gindex >= total )
- {
- error = FT_Err_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;
-
- 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_ULong )
- 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_ULong 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 += pitch * sbit->height;
- }
- }
-
- return size;
- }
-
-
-#if 0
-
- FT_LOCAL_DEF( FT_ULong )
- 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 )
- {
- 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;
-
-
- 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 == NULL && 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();
-
- ftcsnode->ref_count--; /* unlock the node */
-
- if ( error )
- result = 0;
- else
- cache->manager->cur_weight += size;
- }
- }
-
- return result;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- FTC_SNode_Compare( FTC_SNode snode,
- FTC_GQuery gquery,
- FTC_Cache cache )
- {
- return ftc_snode_compare( FTC_NODE( snode ), gquery, cache );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/ftcsbits.h b/Build/source/libs/freetype2/src/cache/ftcsbits.h
deleted file mode 100644
index 6261745f1e1..00000000000
--- a/Build/source/libs/freetype2/src/cache/ftcsbits.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcsbits.h */
-/* */
-/* A small-bitmap cache (specification). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
- FT_LOCAL( FT_Bool )
- FTC_SNode_Compare( FTC_SNode snode,
- FTC_GQuery gquery,
- FTC_Cache cache );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __FTCSBITS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cache/rules.mk b/Build/source/libs/freetype2/src/cache/rules.mk
deleted file mode 100644
index 457dec848df..00000000000
--- a/Build/source/libs/freetype2/src/cache/rules.mk
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# FreeType 2 Cache configuration rules
-#
-
-
-# Copyright 2000, 2001, 2003, 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CACHE_DIR))
-
-
-# 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)/ftccback.h \
- $(CACHE_DIR)/ftcerror.h \
- $(CACHE_DIR)/ftcglyph.h \
- $(CACHE_DIR)/ftcimage.h \
- $(CACHE_DIR)/ftcmanag.h \
- $(CACHE_DIR)/ftcmru.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/Build/source/libs/freetype2/src/cff/Jamfile b/Build/source/libs/freetype2/src/cff/Jamfile
deleted file mode 100644
index 6d0bb1b8679..00000000000
--- a/Build/source/libs/freetype2/src/cff/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/cff Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cff ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = cffdrivr cffgload cffload cffobjs cffparse cffcmap ;
- }
- else
- {
- _sources = cff ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cff Jamfile
diff --git a/Build/source/libs/freetype2/src/cff/cff.c b/Build/source/libs/freetype2/src/cff/cff.c
deleted file mode 100644
index e6d8954c9ab..00000000000
--- a/Build/source/libs/freetype2/src/cff/cff.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/***************************************************************************/
-/* */
-/* cff.c */
-/* */
-/* FreeType OpenType driver component (body only). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "cffdrivr.c"
-#include "cffparse.c"
-#include "cffload.c"
-#include "cffobjs.c"
-#include "cffgload.c"
-#include "cffcmap.c"
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffcmap.c b/Build/source/libs/freetype2/src/cff/cffcmap.c
deleted file mode 100644
index 578d048bedd..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffcmap.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffcmap.c */
-/* */
-/* CFF character mapping table (cmap) support (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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 )
- {
- TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
- CFF_Font cff = (CFF_Font)face->extra.data;
- CFF_Encoding encoding = &cff->encoding;
-
-
- 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_UInt )
- 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_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
- cff_cmap_encoding_class_rec =
- {
- sizeof ( CFF_CMapStdRec ),
-
- (FT_CMap_InitFunc) cff_cmap_encoding_init,
- (FT_CMap_DoneFunc) cff_cmap_encoding_done,
- (FT_CMap_CharIndexFunc)cff_cmap_encoding_char_index,
- (FT_CMap_CharNextFunc) cff_cmap_encoding_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
- FT_UInt sid = charset->sids[idx];
-
-
- return cff_index_get_sid_string( &cff->string_index, sid, psnames );
- }
-
-
- FT_CALLBACK_DEF( void )
- cff_sid_free_glyph_name( TT_Face face,
- const char* gname )
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- FT_FREE( gname );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- cff_cmap_unicode_init( PS_Unicodes unicodes )
- {
- 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;
-
-
- /* can't build Unicode map for CID-keyed font */
- if ( !charset->sids )
- return CFF_Err_Invalid_Argument;
-
- return psnames->unicodes_init( memory,
- unicodes,
- cff->num_glyphs,
- (PS_GetGlyphNameFunc)&cff_sid_to_glyph_name,
- (PS_FreeGlyphNameFunc)&cff_sid_free_glyph_name,
- (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_UInt )
- 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_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
- cff_cmap_unicode_class_rec =
- {
- sizeof ( PS_UnicodesRec ),
-
- (FT_CMap_InitFunc) cff_cmap_unicode_init,
- (FT_CMap_DoneFunc) cff_cmap_unicode_done,
- (FT_CMap_CharIndexFunc)cff_cmap_unicode_char_index,
- (FT_CMap_CharNextFunc) cff_cmap_unicode_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffcmap.h b/Build/source/libs/freetype2/src/cff/cffcmap.h
deleted file mode 100644
index 3809b85611f..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffcmap.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffcmap.h */
-/* */
-/* CFF character mapping table (cmap) support (specification). */
-/* */
-/* Copyright 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_CALLBACK_TABLE const FT_CMap_ClassRec
- cff_cmap_encoding_class_rec;
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* unicode (synthetic) cmaps */
-
- FT_CALLBACK_TABLE const FT_CMap_ClassRec
- cff_cmap_unicode_class_rec;
-
-
-FT_END_HEADER
-
-#endif /* __CFFCMAP_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffdrivr.c b/Build/source/libs/freetype2/src/cff/cffdrivr.c
deleted file mode 100644
index 6c3ff989fb0..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffdrivr.c
+++ /dev/null
@@ -1,585 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffdrivr.c */
-/* */
-/* OpenType font driver implementation (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_TRUETYPE_IDS_H
-#include FT_SERVICE_CID_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_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 "cfferrs.h"
-
-#include FT_SERVICE_XFREE86_NAME_H
-#include FT_SERVICE_GLYPH_DICT_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 ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#undef PAIR_TAG
-#define PAIR_TAG( left, right ) ( ( (FT_ULong)left << 16 ) | \
- (FT_ULong)right )
-
-
- /*************************************************************************/
- /* */
- /* <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 CFF_Err_Ok;
- }
-
-
-#undef PAIR_TAG
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Load_Glyph */
- /* */
- /* <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 )
- Load_Glyph( 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 CFF_Err_Invalid_Slot_Handle;
-
- /* 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 CFF_Err_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;
- }
-
-
- /*
- * 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_Memory memory = FT_FACE_MEMORY( face );
- FT_String* gname;
- FT_UShort sid;
- FT_Service_PsCMaps psnames;
- FT_Error error;
-
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
- if ( !psnames )
- {
- FT_ERROR(( "cff_get_glyph_name:" ));
- FT_ERROR(( " cannot get glyph name from CFF & CEF fonts\n" ));
- FT_ERROR(( " " ));
- FT_ERROR(( " without the `PSNames' module\n" ));
- error = CFF_Err_Unknown_File_Format;
- 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->string_index, sid, psnames );
-
- if ( gname )
- FT_STRCPYN( buffer, gname, buffer_max );
-
- FT_FREE( gname );
- error = CFF_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_Memory memory = FT_FACE_MEMORY( face );
- FT_String* name;
- FT_UShort sid;
- FT_UInt i;
- FT_Int result;
-
-
- cff = (CFF_FontRec *)face->extra.data;
- charset = &cff->charset;
-
- 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_name( &cff->string_index, sid - 391 );
- else
- name = (FT_String *)psnames->adobe_std_strings( sid );
-
- if ( !name )
- continue;
-
- result = ft_strcmp( glyph_name, name );
-
- if ( sid > 390 )
- FT_FREE( name );
-
- if ( !result )
- return i;
- }
-
- return 0;
- }
-
-
- static const FT_Service_GlyphDictRec cff_service_glyph_dict =
- {
- (FT_GlyphDict_GetNameFunc) cff_get_glyph_name,
- (FT_GlyphDict_NameIndexFunc)cff_get_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 == NULL )
- {
- CFF_FontRecDict dict = &cff->top_font.font_dict;
- PS_FontInfoRec *font_info;
- FT_Memory memory = face->root.memory;
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
-
-
- if ( FT_ALLOC( font_info, sizeof ( *font_info ) ) )
- goto Fail;
-
- font_info->version = cff_index_get_sid_string( &cff->string_index,
- dict->version,
- psnames );
- font_info->notice = cff_index_get_sid_string( &cff->string_index,
- dict->notice,
- psnames );
- font_info->full_name = cff_index_get_sid_string( &cff->string_index,
- dict->full_name,
- psnames );
- font_info->family_name = cff_index_get_sid_string( &cff->string_index,
- dict->family_name,
- psnames );
- font_info->weight = cff_index_get_sid_string( &cff->string_index,
- dict->weight,
- psnames );
- 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_Short)dict->underline_thickness;
-
- cff->font_info = font_info;
- }
-
- *afont_info = *cff->font_info;
-
- Fail:
- return error;
- }
-
-
- static const FT_Service_PsInfoRec cff_service_ps_info =
- {
- (PS_GetFontInfoFunc) cff_ps_get_font_info,
- (PS_HasGlyphNamesFunc) cff_ps_has_glyph_names,
- (PS_GetFontPrivateFunc)NULL /* unsupported with CFF fonts */
- };
-
-
- /*
- * POSTSCRIPT NAME SERVICE
- *
- */
-
- static const char*
- cff_get_ps_name( CFF_Face face )
- {
- CFF_Font cff = (CFF_Font)face->extra.data;
-
-
- return (const char*)cff->font_name;
- }
-
-
- static const FT_Service_PsFontNameRec cff_service_ps_name =
- {
- (FT_PsName_GetFunc)cff_get_ps_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 = CFF_Err_Ok;
-
-
- cmap_info->language = 0;
-
- if ( cmap->clazz != &cff_cmap_encoding_class_rec &&
- cmap->clazz != &cff_cmap_unicode_class_rec )
- {
- FT_Face face = FT_CMAP_FACE( cmap );
- FT_Library library = FT_FACE_LIBRARY( face );
- 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 );
-
-
- if ( service && service->get_cmap_info )
- error = service->get_cmap_info( charmap, cmap_info );
- }
-
- return error;
- }
-
-
- static const FT_Service_TTCMapsRec cff_service_get_cmap_info =
- {
- (TT_CMap_Info_GetFunc)cff_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 = CFF_Err_Ok;
- CFF_Font cff = (CFF_Font)face->extra.data;
-
-
- if ( cff )
- {
- CFF_FontRecDict dict = &cff->top_font.font_dict;
- FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
-
-
- if ( dict->cid_registry == 0xFFFFU )
- {
- error = CFF_Err_Invalid_Argument;
- goto Fail;
- }
-
- if ( registry )
- {
- if ( cff->registry == NULL )
- cff->registry = cff_index_get_sid_string( &cff->string_index,
- dict->cid_registry,
- psnames );
- *registry = cff->registry;
- }
-
- if ( ordering )
- {
- if ( cff->ordering == NULL )
- cff->ordering = cff_index_get_sid_string( &cff->string_index,
- dict->cid_ordering,
- psnames );
- *ordering = cff->ordering;
- }
-
- if ( supplement )
- *supplement = dict->cid_supplement;
- }
-
- Fail:
- return error;
- }
-
-
- static const FT_Service_CIDRec cff_service_cid_info =
- {
- (FT_CID_GetRegistryOrderingSupplementFunc)cff_get_ros
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** D R I V E R I N T E R F A C E ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- static const FT_ServiceDescRec cff_services[] =
- {
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CFF },
- { FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info },
- { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name },
-#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
- { FT_SERVICE_ID_GLYPH_DICT, &cff_service_glyph_dict },
-#endif
- { FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info },
- { FT_SERVICE_ID_CID, &cff_service_cid_info },
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- cff_get_interface( FT_Module driver, /* CFF_Driver */
- const char* module_interface )
- {
- FT_Module sfnt;
- FT_Module_Interface result;
-
-
- result = ft_service_list_lookup( cff_services, module_interface );
- if ( result != NULL )
- return result;
-
- /* we pass our request to the `sfnt' module */
- sfnt = FT_Get_Module( driver->library, "sfnt" );
-
- return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0;
- }
-
-
- /* The FT_DriverInterface structure is defined in ftdriver.h. */
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec cff_driver_class =
- {
- /* begin with the FT_Module_Class fields */
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
- FT_MODULE_DRIVER_HAS_HINTER,
-
- sizeof( CFF_DriverRec ),
- "cff",
- 0x10000L,
- 0x20000L,
-
- 0, /* module-specific interface */
-
- cff_driver_init,
- cff_driver_done,
- cff_get_interface,
- },
-
- /* now the specific driver fields */
- sizeof( TT_FaceRec ),
- sizeof( CFF_SizeRec ),
- sizeof( CFF_GlyphSlotRec ),
-
- cff_face_init,
- cff_face_done,
- cff_size_init,
- cff_size_done,
- cff_slot_init,
- cff_slot_done,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
-
- Load_Glyph,
-
- cff_get_kerning,
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
-
- cff_size_request,
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- cff_size_select
-#else
- 0 /* FT_Size_SelectFunc */
-#endif
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffdrivr.h b/Build/source/libs/freetype2/src/cff/cffdrivr.h
deleted file mode 100644
index 553848c0a9c..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffdrivr.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffdrivr.h */
-/* */
-/* High-level OpenType driver interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CFFDRIVER_H__
-#define __CFFDRIVER_H__
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_CALLBACK_TABLE
- const FT_Driver_ClassRec cff_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* __CFFDRIVER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cfferrs.h b/Build/source/libs/freetype2/src/cff/cfferrs.h
deleted file mode 100644
index 1b2a5c95c88..00000000000
--- a/Build/source/libs/freetype2/src/cff/cfferrs.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* cfferrs.h */
-/* */
-/* CFF error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/cff/cffgload.c b/Build/source/libs/freetype2/src/cff/cffgload.c
deleted file mode 100644
index 6553c8d1a56..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffgload.c
+++ /dev/null
@@ -1,2701 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffgload.c */
-/* */
-/* OpenType Glyph Loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_OUTLINE_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-#include "cffobjs.h"
-#include "cffload.h"
-#include "cffgload.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_cffgload
-
-
- 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,
-
- cff_op_hsbw, /* Type 1 opcode: invalid but seen in real life */
- cff_op_closepath, /* ditto */
-
- /* 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
-
-
- 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
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** *********/
- /********** 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 = 0;
- builder->hints_funcs = 0;
-
- if ( hinting && size )
- {
- CFF_Internal internal = (CFF_Internal)size->root.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> */
- /* num_subrs :: The number of glyph subroutines. */
- /* */
- /* <Return> */
- /* The bias value. */
- static FT_Int
- cff_compute_bias( FT_UInt num_subrs )
- {
- FT_Int result;
-
-
- 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_MEM_ZERO( decoder, sizeof ( *decoder ) );
-
- /* initialize builder */
- cff_builder_init( &decoder->builder, face, size, slot, hinting );
-
- /* initialize Type2 decoder */
- decoder->num_globals = cff->num_global_subrs;
- decoder->globals = cff->global_subrs;
- decoder->globals_bias = cff_compute_bias( 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 = CFF_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 = CFF_Err_Invalid_File_Format;
- goto Exit;
- }
-
- sub = cff->subfonts[fd_index];
-
- if ( builder->hints_funcs )
- {
- CFF_Internal internal = (CFF_Internal)size->root.internal;
-
-
- /* for CFFs without subfonts, this value has already been set */
- builder->hints_globals = (void *)internal->subfonts[fd_index];
- }
- }
-
- decoder->num_locals = sub->num_local_subrs;
- decoder->locals = sub->local_subrs;
- decoder->locals_bias = cff_compute_bias( decoder->num_locals );
-
- decoder->glyph_width = sub->private_dict.default_width;
- decoder->nominal_width = sub->private_dict.nominal_width;
-
- Exit:
- return error;
- }
-
-
- /* check that there is enough space for `count' more points */
- static FT_Error
- 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 */
- static 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;
-
-
- point->x = x >> 16;
- point->y = y >> 16;
- *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC );
-
- builder->last = *point;
- }
-
- outline->n_points++;
- }
-
-
- /* check space for a new on-curve point, then add it */
- static FT_Error
- cff_builder_add_point1( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error;
-
-
- error = 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 CFF_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 */
- static FT_Error
- cff_builder_start_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error = CFF_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 */
- static void
- cff_builder_close_contour( CFF_Builder* builder )
- {
- FT_Outline* outline = builder->current;
-
-
- if ( !outline )
- return;
-
- /* XXXX: We must not include the last point in the path if it */
- /* is located on the first point. */
- if ( outline->n_points > 1 )
- {
- FT_Int first = 0;
- 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;
-
-
- if ( outline->n_contours > 1 )
- {
- first = outline->contours[outline->n_contours - 2] + 1;
- p1 = outline->points + first;
- }
-
- /* `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 )
- outline->contours[outline->n_contours - 1] =
- (short)( outline->n_points - 1 );
- }
-
-
- static 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 n;
- }
-
- return -1;
- }
-
-
- static 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 = 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 );
- }
- }
-
-
- static 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 = 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 );
- }
- }
-
-
- static FT_Error
- cff_operator_seac( CFF_Decoder* decoder,
- 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;
-
-
-#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:" ));
- FT_ERROR(( " invalid seac character code arguments\n" ));
- return CFF_Err_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, bchar_index,
- &charstring, &charstring_len );
- if ( !error )
- {
- error = cff_decoder_parse_charstrings( decoder, charstring,
- charstring_len );
-
- if ( error )
- goto Exit;
-
- cff_free_glyph_data( face, &charstring, charstring_len );
- }
-
- /* Save the left bearing and width of the base character */
- /* as they will be erased by the next load. */
-
- left_bearing = builder->left_bearing;
- advance = builder->advance;
-
- builder->left_bearing.x = 0;
- builder->left_bearing.y = 0;
-
- builder->pos_x = adx;
- builder->pos_y = ady;
-
- /* Now load `achar' on top of the base outline. */
- error = cff_get_glyph_data( face, achar_index,
- &charstring, &charstring_len );
- if ( !error )
- {
- error = cff_decoder_parse_charstrings( decoder, charstring,
- charstring_len );
-
- if ( error )
- goto Exit;
-
- cff_free_glyph_data( face, &charstring, charstring_len );
- }
-
- /* Restore the left side bearing and advance width */
- /* of the base character. */
- builder->left_bearing = left_bearing;
- builder->advance = advance;
-
- 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. */
- /* */
- /* <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_Error error;
- CFF_Decoder_Zone* zone;
- FT_Byte* ip;
- FT_Byte* limit;
- CFF_Builder* builder = &decoder->builder;
- FT_Pos x, y;
- FT_Fixed seed;
- FT_Fixed* stack;
-
- T2_Hints_Funcs hinter;
-
-
- /* set default width */
- decoder->num_hints = 0;
- decoder->read_width = 1;
-
- /* compute random seed from stack address of parameter */
- seed = (FT_Fixed)(char*)&seed ^
- (FT_Fixed)(char*)&decoder ^
- (FT_Fixed)(char*)&charstring_base;
- seed = ( seed ^ ( seed >> 10 ) ^ ( seed >> 20 ) ) & 0xFFFFL;
- if ( seed == 0 )
- seed = 0x7384;
-
- /* 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 = CFF_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 ( v == 28 )
- {
- if ( ip + 1 >= limit )
- goto Syntax_Error;
- val = (FT_Short)( ( (FT_Short)ip[0] << 8 ) | ip[1] );
- ip += 2;
- }
- else if ( v < 247 )
- val = (FT_Long)v - 139;
- else if ( v < 251 )
- {
- if ( ip >= limit )
- goto Syntax_Error;
- val = ( (FT_Long)v - 247 ) * 256 + *ip++ + 108;
- }
- else if ( v < 255 )
- {
- if ( ip >= limit )
- goto Syntax_Error;
- val = -( (FT_Long)v - 251 ) * 256 - *ip++ - 108;
- }
- else
- {
- if ( ip + 3 >= limit )
- goto Syntax_Error;
- val = ( (FT_Int32)ip[0] << 24 ) |
- ( (FT_Int32)ip[1] << 16 ) |
- ( (FT_Int32)ip[2] << 8 ) |
- ip[3];
- ip += 4;
- shift = 0;
- }
- if ( decoder->top - stack >= CFF_MAX_OPERANDS )
- goto Stack_Overflow;
-
- val <<= shift;
- *decoder->top++ = val;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !( val & 0xFFFFL ) )
- FT_TRACE4(( " %ld", (FT_Int32)( val >> 16 ) ));
- else
- FT_TRACE4(( " %.2f", val / 65536.0 ));
-#endif
-
- }
- else
- {
- 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 3:
- op = cff_op_and;
- break;
- case 4:
- op = cff_op_or;
- break;
- case 5:
- op = cff_op_not;
- 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 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 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:
- /* decrement ip for syntax error message */
- ip--;
- }
- }
- 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:
- ;
- }
- if ( op == cff_op_unknown )
- goto Syntax_Error;
-
- /* check arguments */
- req_args = cff_argument_counts[op];
- if ( req_args & CFF_COUNT_CHECK_WIDTH )
- {
- args = stack;
-
- 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 = ( ( 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 );
-
- /* Consumed an argument. */
- num_args--;
- 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;
-
- 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" :
- ( op == cff_op_vstem ? " vstem" :
- ( op == cff_op_hstemhm ? " hstemhm" : " vstemhm" ) ) ));
-
- if ( hinter )
- hinter->stems( hinter->hints,
- ( op == cff_op_hstem || op == cff_op_hstemhm ),
- num_args / 2,
- args );
-
- 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 );
-
- decoder->num_hints += num_args / 2;
- }
-
- if ( hinter )
- {
- if ( op == cff_op_hintmask )
- hinter->hintmask( hinter->hints,
- builder->current->n_points,
- decoder->num_hints,
- ip );
- else
- hinter->counter( hinter->hints,
- decoder->num_hints,
- ip );
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_UInt maskbyte;
-
-
- FT_TRACE4(( " " ));
-
- for ( maskbyte = 0;
- maskbyte < (FT_UInt)(( decoder->num_hints + 7 ) >> 3);
- maskbyte++, ip++ )
- FT_TRACE4(( "0x%02X", *ip ));
- }
-#else
- ip += ( decoder->num_hints + 7 ) >> 3;
-#endif
- if ( ip >= limit )
- goto Syntax_Error;
- args = stack;
- break;
-
- case cff_op_rmoveto:
- FT_TRACE4(( " rmoveto" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- x += args[0];
- y += args[1];
- args = stack;
- break;
-
- case cff_op_vmoveto:
- FT_TRACE4(( " vmoveto" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- y += args[0];
- args = stack;
- break;
-
- case cff_op_hmoveto:
- FT_TRACE4(( " hmoveto" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- x += args[0];
- args = stack;
- break;
-
- case cff_op_rlineto:
- FT_TRACE4(( " rlineto" ));
-
- if ( cff_builder_start_point ( builder, x, y ) ||
- check_points( builder, num_args / 2 ) )
- goto Fail;
-
- if ( num_args < 2 || num_args & 1 )
- goto Stack_Underflow;
-
- args = stack;
- while ( args < decoder->top )
- {
- x += args[0];
- 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"
- : " vlineto" ));
-
- if ( cff_builder_start_point ( builder, x, y ) ||
- check_points( builder, num_args ) )
- goto Fail;
-
- args = stack;
- while ( args < decoder->top )
- {
- if ( phase )
- x += args[0];
- else
- y += args[0];
-
- if ( cff_builder_add_point1( builder, x, y ) )
- goto Fail;
-
- args++;
- phase ^= 1;
- }
- args = stack;
- }
- break;
-
- case cff_op_rrcurveto:
- FT_TRACE4(( " rrcurveto" ));
-
- /* check number of arguments; must be a multiple of 6 */
- if ( num_args % 6 != 0 )
- goto Stack_Underflow;
-
- if ( cff_builder_start_point ( builder, x, y ) ||
- check_points( builder, num_args / 2 ) )
- goto Fail;
-
- args = stack;
- while ( args < decoder->top )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[2];
- y += args[3];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[4];
- y += args[5];
- cff_builder_add_point( builder, x, y, 1 );
- args += 6;
- }
- args = stack;
- break;
-
- case cff_op_vvcurveto:
- FT_TRACE4(( " vvcurveto" ));
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- args = stack;
- if ( num_args & 1 )
- {
- x += args[0];
- args++;
- num_args--;
- }
-
- if ( num_args % 4 != 0 )
- goto Stack_Underflow;
-
- if ( check_points( builder, 3 * ( num_args / 4 ) ) )
- goto Fail;
-
- while ( args < decoder->top )
- {
- y += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- y += args[3];
- cff_builder_add_point( builder, x, y, 1 );
- args += 4;
- }
- args = stack;
- break;
-
- case cff_op_hhcurveto:
- FT_TRACE4(( " hhcurveto" ));
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- args = stack;
- if ( num_args & 1 )
- {
- y += args[0];
- args++;
- num_args--;
- }
-
- if ( num_args % 4 != 0 )
- goto Stack_Underflow;
-
- if ( check_points( builder, 3 * ( num_args / 4 ) ) )
- goto Fail;
-
- while ( args < decoder->top )
- {
- x += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- 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_TRACE4(( op == cff_op_vhcurveto ? " vhcurveto"
- : " hvcurveto" ));
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- args = stack;
- if ( num_args < 4 || ( num_args % 4 ) > 1 )
- goto Stack_Underflow;
-
- if ( check_points( builder, ( num_args / 4 ) * 3 ) )
- goto Stack_Underflow;
-
- phase = ( op == cff_op_hvcurveto );
-
- while ( num_args >= 4 )
- {
- num_args -= 4;
- if ( phase )
- {
- x += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- y += args[3];
- if ( num_args == 1 )
- x += args[4];
- cff_builder_add_point( builder, x, y, 1 );
- }
- else
- {
- y += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[3];
- if ( num_args == 1 )
- 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 = ( num_args - 6 ) / 2;
-
-
- FT_TRACE4(( " rlinecurve" ));
-
- if ( num_args < 8 || ( num_args - 6 ) & 1 )
- goto Stack_Underflow;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- check_points( builder, num_lines + 3 ) )
- goto Fail;
-
- args = stack;
-
- /* first, add the line segments */
- while ( num_lines > 0 )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 1 );
- args += 2;
- num_lines--;
- }
-
- /* then the curve */
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[2];
- y += args[3];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[4];
- y += args[5];
- cff_builder_add_point( builder, x, y, 1 );
- args = stack;
- }
- break;
-
- case cff_op_rcurveline:
- {
- FT_Int num_curves = ( num_args - 2 ) / 6;
-
-
- FT_TRACE4(( " rcurveline" ));
-
- if ( num_args < 8 || ( num_args - 2 ) % 6 )
- goto Stack_Underflow;
-
- if ( cff_builder_start_point ( builder, x, y ) ||
- check_points( builder, num_curves*3 + 2 ) )
- goto Fail;
-
- args = stack;
-
- /* first, add the curves */
- while ( num_curves > 0 )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[2];
- y += args[3];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[4];
- y += args[5];
- cff_builder_add_point( builder, x, y, 1 );
- args += 6;
- num_curves--;
- }
-
- /* then the final line */
- x += args[0];
- 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" ));
-
- args = stack;
-
- /* 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 ) ||
- check_points( builder, 6 ) )
- goto Fail;
-
- /* Record the starting point's y position for later use */
- start_y = y;
-
- /* first control point */
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* second control point */
- x += args[2];
- 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 += 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 += args[5];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* fourth control point */
- x += args[6];
- y += args[7];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* ending point, with y-value the same as the start */
- 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" ));
-
- args = stack;
-
- /* adding six more points; 4 control points, 2 on-curve points */
- if ( cff_builder_start_point( builder, x, y ) ||
- check_points( builder, 6 ) )
- goto Fail;
-
- /* record the starting point's y-position for later use */
- start_y = y;
-
- /* first control point */
- x += args[0];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* second control point */
- x += args[1];
- 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 += 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 += args[4];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* fourth control point */
- 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 += 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_TRACE4(( " flex1" ));
-
- /* adding six more points; 4 control points, 2 on-curve points */
- if ( cff_builder_start_point( builder, x, y ) ||
- 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... */
-
- args = stack;
-
- /* grab up to the last argument */
- for ( count = 5; count > 0; count-- )
- {
- dx += args[0];
- dy += args[1];
- args += 2;
- }
-
- /* rewind */
- args = stack;
-
- 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 += args[0];
- 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 += args[0];
- y = start_y;
- }
- else
- {
- x = start_x;
- y += args[0];
- }
-
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- break;
- }
-
- case cff_op_flex:
- {
- FT_UInt count;
-
-
- FT_TRACE4(( " flex" ));
-
- if ( cff_builder_start_point( builder, x, y ) ||
- check_points( builder, 6 ) )
- goto Fail;
-
- args = stack;
- for ( count = 6; count > 0; count-- )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y,
- (FT_Bool)( count == 4 || count == 1 ) );
- args += 2;
- }
-
- args = stack;
- }
- break;
-
- case cff_op_endchar:
- FT_TRACE4(( " endchar" ));
-
- /* 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,
- args[0],
- args[1],
- (FT_Int)( args[2] >> 16 ),
- (FT_Int)( args[3] >> 16 ) );
- args += 4;
-
- decoder->glyph_width = glyph_width;
- }
- else
- {
- if ( !error )
- error = CFF_Err_Ok;
-
- cff_builder_close_contour( builder );
-
- /* close hints recording session */
- if ( hinter )
- {
- if ( hinter->close( hinter->hints,
- builder->current->n_points ) )
- goto Syntax_Error;
-
- /* apply hints to the loaded glyph outline now */
- hinter->apply( hinter->hints,
- builder->current,
- (PSH_Globals)builder->hints_globals,
- decoder->hint_mode );
- }
-
- /* add current outline to the glyph slot */
- FT_GlyphLoader_Add( builder->loader );
- }
-
- /* return now! */
- FT_TRACE4(( "\n\n" ));
- return error;
-
- case cff_op_abs:
- FT_TRACE4(( " abs" ));
-
- if ( args[0] < 0 )
- args[0] = -args[0];
- args++;
- break;
-
- case cff_op_add:
- FT_TRACE4(( " add" ));
-
- args[0] += args[1];
- args++;
- break;
-
- case cff_op_sub:
- FT_TRACE4(( " sub" ));
-
- args[0] -= args[1];
- args++;
- break;
-
- case cff_op_div:
- FT_TRACE4(( " div" ));
-
- args[0] = FT_DivFix( args[0], args[1] );
- args++;
- break;
-
- case cff_op_neg:
- FT_TRACE4(( " neg" ));
-
- args[0] = -args[0];
- args++;
- break;
-
- case cff_op_random:
- {
- FT_Fixed Rand;
-
-
- FT_TRACE4(( " rand" ));
-
- Rand = seed;
- if ( Rand >= 0x8000L )
- Rand++;
-
- args[0] = Rand;
- seed = FT_MulFix( seed, 0x10000L - seed );
- if ( seed == 0 )
- seed += 0x2873;
- args++;
- }
- break;
-
- case cff_op_mul:
- FT_TRACE4(( " mul" ));
-
- args[0] = FT_MulFix( args[0], args[1] );
- args++;
- break;
-
- case cff_op_sqrt:
- FT_TRACE4(( " sqrt" ));
-
- if ( args[0] > 0 )
- {
- FT_Int count = 9;
- FT_Fixed root = args[0];
- FT_Fixed new_root;
-
-
- for (;;)
- {
- new_root = ( root + FT_DivFix( args[0], root ) + 1 ) >> 1;
- if ( new_root == root || count <= 0 )
- break;
- root = new_root;
- }
- args[0] = new_root;
- }
- else
- args[0] = 0;
- args++;
- break;
-
- case cff_op_drop:
- /* nothing */
- FT_TRACE4(( " drop" ));
-
- break;
-
- case cff_op_exch:
- {
- FT_Fixed tmp;
-
-
- FT_TRACE4(( " exch" ));
-
- 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" ));
-
- 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" ));
-
- 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" ));
-
- args[1] = args[0];
- args++;
- break;
-
- case cff_op_put:
- {
- FT_Fixed val = args[0];
- FT_Int idx = (FT_Int)( args[1] >> 16 );
-
-
- FT_TRACE4(( " put" ));
-
- if ( idx >= 0 && idx < decoder->len_buildchar )
- decoder->buildchar[idx] = val;
- }
- break;
-
- case cff_op_get:
- {
- FT_Int idx = (FT_Int)( args[0] >> 16 );
- FT_Fixed val = 0;
-
-
- FT_TRACE4(( " get" ));
-
- if ( idx >= 0 && idx < decoder->len_buildchar )
- val = decoder->buildchar[idx];
-
- args[0] = val;
- args++;
- }
- break;
-
- case cff_op_store:
- FT_TRACE4(( " store "));
-
- goto Unimplemented;
-
- case cff_op_load:
- FT_TRACE4(( " load" ));
-
- goto Unimplemented;
-
- case cff_op_dotsection:
- /* this operator is deprecated and ignored by the parser */
- FT_TRACE4(( " dotsection" ));
- 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)" ));
-
- 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)" ));
-
- decoder->glyph_width = decoder->nominal_width +
- (args[1] >> 16);
- x = args[0];
- y = 0;
- args = stack;
- break;
-
- case cff_op_and:
- {
- FT_Fixed cond = args[0] && args[1];
-
-
- FT_TRACE4(( " and" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_or:
- {
- FT_Fixed cond = args[0] || args[1];
-
-
- FT_TRACE4(( " or" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_eq:
- {
- FT_Fixed cond = !args[0];
-
-
- FT_TRACE4(( " eq" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_ifelse:
- {
- FT_Fixed cond = ( args[2] <= args[3] );
-
-
- FT_TRACE4(( " ifelse" ));
-
- 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(%d)", idx ));
-
- if ( idx >= decoder->num_locals )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:" ));
- FT_ERROR(( " 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(%d)", idx ));
-
- if ( idx >= decoder->num_globals )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:" ));
- FT_ERROR(( " 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" ));
-
- 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:
- Unimplemented:
- FT_ERROR(( "Unimplemented opcode: %d", ip[-1] ));
-
- if ( ip[-1] == 12 )
- FT_ERROR(( " %d", ip[0] ));
- FT_ERROR(( "\n" ));
-
- return CFF_Err_Unimplemented_Feature;
- }
-
- decoder->top = args;
-
- } /* general operator processing */
-
- } /* while ip < limit */
-
- FT_TRACE4(( "..end..\n\n" ));
-
- Fail:
- return error;
-
- Syntax_Error:
- FT_TRACE4(( "cff_decoder_parse_charstrings: syntax error!" ));
- return CFF_Err_Invalid_File_Format;
-
- Stack_Underflow:
- FT_TRACE4(( "cff_decoder_parse_charstrings: stack underflow!" ));
- return CFF_Err_Too_Few_Arguments;
-
- Stack_Overflow:
- FT_TRACE4(( "cff_decoder_parse_charstrings: stack overflow!" ));
- return CFF_Err_Stack_Overflow;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** *********/
- /********** 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 = CFF_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 );
-
- cff_free_glyph_data( face, &charstring, &charstring_len );
- }
-
- /* ignore the error if one has occurred -- skip to next glyph */
- error = CFF_Err_Ok;
- }
-
- *max_advance = decoder.builder.advance.x;
-
- return CFF_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, 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 )
- {
- glyph_index = cff_charset_cid_to_gindex( &cff->charset, glyph_index );
- if ( glyph_index == 0 )
- return CFF_Err_Invalid_Argument;
- }
- else if ( glyph_index >= cff->num_glyphs )
- return CFF_Err_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_Int)load_flags,
- stream,
- &glyph->root.bitmap,
- &metrics );
-
- if ( !error )
- {
- 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;
- }
- 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 CFF_Err_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_Byte fd_index = cff_fd_select_get( &cff->fd_select,
- glyph_index );
-
- FT_Int top_upm = cff->top_font.font_dict.units_per_em;
- FT_Int sub_upm = 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;
-
- hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
- ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
-
- glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; /* by default */
-
- {
- FT_Byte* charstring;
- FT_ULong charstring_len;
-
-
- cff_decoder_init( &decoder, face, size, glyph, hinting,
- FT_LOAD_TARGET_MODE( load_flags ) );
-
- decoder.builder.no_recurse =
- (FT_Bool)( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 );
-
- /* now 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 );
-
- cff_free_glyph_data( face, &charstring, charstring_len );
-
-
-#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 = 0;
- 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 = charstring_len;
- }
- }
- }
- }
-
- /* save new glyph tables */
- cff_builder_done( &decoder.builder );
- }
-
-#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 = decoder.builder.left_bearing.y;
- metrics.advance = decoder.builder.advance.x;
- 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.left_bearing.y = metrics.bearing_y;
- decoder.builder.advance.x = metrics.advance;
- decoder.builder.advance.y = 0;
- }
-
-#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_Vector advance;
- FT_Bool has_vertical_info;
-
-
- /* 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 &&
- face->vertical.long_metrics != 0 );
-
- /* get the vertical metrics from the vtmx 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 -- `xx' has already been normalized */
- if ( !( font_matrix.yy == 0x10000L &&
- font_matrix.xy == 0 &&
- font_matrix.yx == 0 ) )
- FT_Outline_Transform( &glyph->root.outline, &font_matrix );
-
- if ( !( font_offset.x == 0 &&
- font_offset.y == 0 ) )
- FT_Outline_Translate( &glyph->root.outline,
- font_offset.x, font_offset.y );
-
- advance.x = metrics->horiAdvance;
- advance.y = 0;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->horiAdvance = advance.x + font_offset.x;
-
- advance.x = 0;
- advance.y = metrics->vertAdvance;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->vertAdvance = advance.y + 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->width / 2;
- else
- ft_synthesize_vertical_metrics( metrics,
- metrics->vertAdvance );
- }
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffgload.h b/Build/source/libs/freetype2/src/cff/cffgload.h
deleted file mode 100644
index d661f9e7043..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffgload.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffgload.h */
-/* */
-/* OpenType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 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. */
- /* */
- /* last :: The last point position. */
- /* */
- /* 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_Vector last;
-
- 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;
-
-
- /* 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_Int num_hints;
- FT_Fixed* buildchar;
- FT_Int len_buildchar;
-
- 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;
-
- } 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 */
-
- FT_LOCAL( FT_Error )
- cff_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len );
-
- 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/Build/source/libs/freetype2/src/cff/cffload.c b/Build/source/libs/freetype2/src/cff/cffload.c
deleted file mode 100644
index 1e7dd143646..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffload.c
+++ /dev/null
@@ -1,1605 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffload.c */
-/* */
-/* OpenType and CFF data/program tables loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_TYPE1_TABLES_H
-
-#include "cffload.h"
-#include "cffparse.h"
-
-#include "cfferrs.h"
-
-
-#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_Error error;
- FT_Memory memory = stream->memory;
- FT_UShort count;
-
-
- FT_MEM_ZERO( idx, sizeof ( *idx ) );
-
- idx->stream = stream;
- idx->start = FT_STREAM_POS();
- if ( !FT_READ_USHORT( count ) &&
- 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_Err_Invalid_Table;
- goto Exit;
- }
-
- idx->count = count;
- idx->off_size = offsize;
- size = (FT_ULong)( count + 1 ) * offsize;
-
- idx->data_offset = idx->start + 3 + size;
-
- if ( FT_STREAM_SKIP( size - offsize ) )
- goto Exit;
-
- size = cff_index_read_offset( idx, &error );
- if ( error )
- goto Exit;
-
- if ( size == 0 )
- {
- error = CFF_Err_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_MEM_ZERO( idx, sizeof ( *idx ) );
- }
- }
-
-
- static FT_Error
- cff_index_load_offsets( CFF_Index idx )
- {
- FT_Error error = 0;
- FT_Stream stream = idx->stream;
- FT_Memory memory = stream->memory;
-
-
- if ( idx->count > 0 && idx->offsets == NULL )
- {
- 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 + 3 ) ||
- 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_OFF3( 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 */
- static FT_Error
- cff_index_get_pointers( CFF_Index idx,
- FT_Byte*** table )
- {
- FT_Error error = CFF_Err_Ok;
- FT_Memory memory = idx->stream->memory;
- FT_ULong n, offset, old_offset;
- FT_Byte** t;
-
-
- *table = 0;
-
- if ( idx->offsets == NULL )
- {
- error = cff_index_load_offsets( idx );
- if ( error )
- goto Exit;
- }
-
- if ( idx->count > 0 && !FT_NEW_ARRAY( t, idx->count + 1 ) )
- {
- old_offset = 1;
- for ( n = 0; n <= idx->count; n++ )
- {
- offset = idx->offsets[n];
- if ( !offset )
- offset = old_offset;
-
- /* two sanity checks for invalid offset tables */
- else if ( offset < old_offset )
- offset = old_offset;
-
- else if ( offset - 1 >= idx->data_size && n < idx->count )
- offset = old_offset;
-
- t[n] = idx->bytes + offset - 1;
-
- old_offset = offset;
- }
- *table = t;
- }
-
- 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 = CFF_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 + 3 + 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 );
- }
- }
-
- /* 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 = CFF_Err_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 );
- }
- }
-
-
- FT_LOCAL_DEF( FT_String* )
- cff_index_get_name( CFF_Index idx,
- FT_UInt element )
- {
- FT_Memory memory = idx->stream->memory;
- FT_Byte* bytes;
- FT_ULong byte_len;
- FT_Error error;
- FT_String* name = 0;
-
-
- error = cff_index_access_element( idx, element, &bytes, &byte_len );
- if ( error )
- goto Exit;
-
- if ( !FT_ALLOC( name, byte_len + 1 ) )
- {
- FT_MEM_COPY( name, bytes, byte_len );
- name[byte_len] = 0;
- }
- cff_index_forget_element( idx, &bytes );
-
- Exit:
- return name;
- }
-
-
- FT_LOCAL_DEF( FT_String* )
- cff_index_get_sid_string( CFF_Index idx,
- FT_UInt sid,
- FT_Service_PsCMaps psnames )
- {
- /* value 0xFFFFU indicates a missing dictionary entry */
- if ( sid == 0xFFFFU )
- return 0;
-
- /* if it is not a standard string, return it */
- if ( sid > 390 )
- return cff_index_get_name( idx, sid - 391 );
-
- /* CID-keyed CFF fonts don't have glyph names */
- if ( !psnames )
- return 0;
-
- /* that's a standard string, fetch a copy from the PSName module */
- {
- FT_String* name = 0;
- const char* adobe_name = psnames->adobe_std_strings( sid );
-
-
- if ( adobe_name )
- {
- FT_Memory memory = idx->stream->memory;
- FT_Error error;
-
-
- (void)FT_STRDUP( name, adobe_name );
-
- FT_UNUSED( error );
- }
-
- return name;
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*** ***/
- /*** 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;
-
- 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 = CFF_Err_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;
-
-
- switch ( fdselect->format )
- {
- case 0:
- fd = fdselect->data[glyph_index];
- break;
-
- case 3:
- /* first, compare to cache */
- if ( (FT_UInt)( glyph_index - fdselect->cache_first ) <
- fdselect->cache_count )
- {
- fd = fdselect->cache_fd;
- break;
- }
-
- /* then, lookup 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:
- ;
- }
-
- 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_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];
- max_cid++;
-
- if ( FT_NEW_ARRAY( charset->cids, max_cid ) )
- goto Exit;
-
- for ( i = 0; i < num_glyphs; i++ )
- charset->cids[charset->sids[i]] = (FT_UShort)i;
-
- 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 = CFF_Err_Ok;
- FT_UShort glyph_sid;
-
-
- /* If the 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;
- }
-
- /* 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 = CFF_Err_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 = CFF_Err_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 = CFF_Err_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 = CFF_Err_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 = CFF_Err_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_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 = CFF_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 = CFF_Err_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 = CFF_Err_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;
-
- if ( encoding->count < j + 1 )
- 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 = CFF_Err_Invalid_File_Format;
- goto Exit;
- }
- }
-
- Exit:
-
- /* Clean up if there was an error. */
- return error;
- }
-
-
- static FT_Error
- cff_subfont_load( CFF_SubFont font,
- CFF_Index idx,
- FT_UInt font_index,
- FT_Stream stream,
- FT_ULong base_offset )
- {
- FT_Error error;
- CFF_ParserRec parser;
- FT_Byte* dict = NULL;
- FT_ULong dict_len;
- CFF_FontRecDict top = &font->font_dict;
- CFF_Private priv = &font->private_dict;
-
-
- cff_parser_init( &parser, CFF_CODE_TOPDICT, &font->font_dict );
-
- /* set defaults */
- FT_MEM_ZERO( top, sizeof ( *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;
-
- error = cff_index_access_element( idx, font_index, &dict, &dict_len );
- if ( !error )
- error = cff_parser_run( &parser, dict, dict + dict_len );
-
- cff_index_forget_element( idx, &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 */
- if ( top->private_offset && top->private_size )
- {
- /* set defaults */
- FT_MEM_ZERO( priv, sizeof ( *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 );
-
- cff_parser_init( &parser, CFF_CODE_PRIVATE, priv );
-
- if ( FT_STREAM_SEEK( base_offset + font->font_dict.private_offset ) ||
- FT_FRAME_ENTER( font->font_dict.private_size ) )
- goto Exit;
-
- 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;
- }
-
- /* 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( &font->local_subrs_index, stream, 1 );
- if ( error )
- goto Exit;
-
- font->num_local_subrs = font->local_subrs_index.count;
- error = cff_index_get_pointers( &font->local_subrs_index,
- &font->local_subrs );
- if ( error )
- goto Exit;
- }
-
- Exit:
- 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_LOCAL_DEF( FT_Error )
- cff_font_load( FT_Stream stream,
- FT_Int face_index,
- CFF_Font font )
- {
- static const FT_Frame_Field cff_header_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_FontRec
-
- FT_FRAME_START( 4 ),
- FT_FRAME_BYTE( version_major ),
- FT_FRAME_BYTE( version_minor ),
- FT_FRAME_BYTE( header_size ),
- FT_FRAME_BYTE( absolute_offsize ),
- FT_FRAME_END
- };
-
- FT_Error error;
- FT_Memory memory = stream->memory;
- FT_ULong base_offset;
- CFF_FontRecDict dict;
-
-
- FT_ZERO( font );
-
- font->stream = stream;
- font->memory = memory;
- dict = &font->top_font.font_dict;
- base_offset = FT_STREAM_POS();
-
- /* read CFF font header */
- if ( FT_STREAM_READ_FIELDS( cff_header_fields, font ) )
- goto Exit;
-
- /* check format */
- if ( font->version_major != 1 ||
- font->header_size < 4 ||
- font->absolute_offsize > 4 )
- {
- FT_TRACE2(( "[not a CFF font header!]\n" ));
- error = CFF_Err_Unknown_File_Format;
- goto Exit;
- }
-
- /* skip the rest of the header */
- if ( FT_STREAM_SKIP( font->header_size - 4 ) )
- goto Exit;
-
- /* read the name, top dict, string and global subrs index */
- if ( FT_SET_ERROR( cff_index_init( &font->name_index,
- stream, 0 ) ) ||
- FT_SET_ERROR( cff_index_init( &font->font_dict_index,
- stream, 0 ) ) ||
- FT_SET_ERROR( cff_index_init( &font->string_index,
- stream, 0 ) ) ||
- FT_SET_ERROR( cff_index_init( &font->global_subrs_index,
- stream, 1 ) ) )
- goto Exit;
-
- /* well, we don't really forget the `disabled' fonts... */
- font->num_faces = font->name_index.count;
- if ( face_index >= (FT_Int)font->num_faces )
- {
- FT_ERROR(( "cff_font_load: incorrect face index = %d\n",
- face_index ));
- error = CFF_Err_Invalid_Argument;
- }
-
- /* in case of a font format check, simply exit now */
- if ( face_index < 0 )
- goto Exit;
-
- /* now, parse the top-level font dictionary */
- error = cff_subfont_load( &font->top_font,
- &font->font_dict_index,
- face_index,
- stream,
- base_offset );
- if ( error )
- goto Exit;
-
- if ( FT_STREAM_SEEK( base_offset + dict->charstrings_offset ) )
- goto Exit;
-
- error = cff_index_init( &font->charstrings_index, stream, 0 );
- if ( error )
- goto Exit;
-
- /* now, check for a CID font */
- if ( dict->cid_registry != 0xFFFFU )
- {
- CFF_IndexRec fd_index;
- CFF_SubFont sub;
- FT_UInt idx;
-
-
- /* 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 );
- if ( error )
- goto Exit;
-
- if ( fd_index.count > CFF_MAX_CID_FONTS )
- {
- FT_ERROR(( "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];
- error = cff_subfont_load( sub, &fd_index, idx,
- stream, base_offset );
- if ( error )
- goto Fail_CID;
- }
-
- /* now load the FD Select array */
- 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 = CFF_Err_Unknown_File_Format;
- goto Exit;
- }
-
- /* explicit the global subrs */
- font->num_global_subrs = font->global_subrs_index.count;
- font->num_glyphs = font->charstrings_index.count;
-
- error = cff_index_get_pointers( &font->global_subrs_index,
- &font->global_subrs ) ;
-
- if ( error )
- goto Exit;
-
- /* read the Charset and Encoding tables if available */
- if ( font->num_glyphs > 0 )
- {
- FT_Bool invert = FT_BOOL( dict->cid_registry != 0xFFFFU );
-
-
- 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;
- }
- else
- /* CID-keyed fonts only need CIDs */
- FT_FREE( font->charset.sids );
- }
-
- /* get the font name (/CIDFontName for CID-keyed fonts, */
- /* /FontName otherwise) */
- font->font_name = cff_index_get_name( &font->name_index, face_index );
-
- Exit:
- 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->string_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 */
- 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_subfont_done( memory, &font->top_font );
-
- CFF_Done_FD_Select( &font->fd_select, font->stream );
-
- if (font->font_info != NULL)
- {
- FT_FREE( font->font_info->version );
- FT_FREE( font->font_info->notice );
- FT_FREE( font->font_info->full_name );
- FT_FREE( font->font_info->family_name );
- FT_FREE( font->font_info->weight );
- FT_FREE( font->font_info );
- }
-
- FT_FREE( font->registry );
- FT_FREE( font->ordering );
-
- FT_FREE( font->global_subrs );
- FT_FREE( font->font_name );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffload.h b/Build/source/libs/freetype2/src/cff/cffload.h
deleted file mode 100644
index 068cbb58c23..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffload.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffload.h */
-/* */
-/* OpenType & CFF data/program tables loader (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-
-FT_BEGIN_HEADER
-
- FT_LOCAL( FT_UShort )
- cff_get_standard_encoding( FT_UInt charcode );
-
-
- FT_LOCAL( FT_String* )
- cff_index_get_name( CFF_Index idx,
- FT_UInt element );
-
- FT_LOCAL( FT_String* )
- cff_index_get_sid_string( CFF_Index idx,
- FT_UInt sid,
- FT_Service_PsCMaps psnames );
-
-
- 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_UInt )
- cff_charset_cid_to_gindex( CFF_Charset charset,
- FT_UInt cid );
-
-
- FT_LOCAL( FT_Error )
- cff_font_load( FT_Stream stream,
- FT_Int face_index,
- CFF_Font font );
-
- FT_LOCAL( void )
- cff_font_done( CFF_Font font );
-
-
- FT_LOCAL( FT_Byte )
- cff_fd_select_get( CFF_FDSelect fdselect,
- FT_UInt glyph_index );
-
-
-FT_END_HEADER
-
-#endif /* __CFFLOAD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffobjs.c b/Build/source/libs/freetype2/src/cff/cffobjs.c
deleted file mode 100644
index d575183275d..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffobjs.c
+++ /dev/null
@@ -1,959 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffobjs.c */
-/* */
-/* OpenType objects manager (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include "cffobjs.h"
-#include "cffload.h"
-#include "cffcmap.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 */
- /* */
- /* Note that we store the global hints in the size's `internal' root */
- /* field. */
- /* */
- /*************************************************************************/
-
-
- 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 = (PSHinter_Service)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 */
- {
- 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;
-
-
- 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] );
- }
-
- /* `internal' is freed by destroy_size (in ftobjs.c) */
- }
- }
-
-
- /* CFF and Type 1 private dictionaries have slightly different */
- /* structures; we need to synthetize 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_MEM_ZERO( priv, sizeof ( *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 = CFF_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;
-
- 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 = (FT_Size_Internal)(void*)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;
-
- FT_Int top_upm = 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_Int sub_upm = 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 CFF_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;
-
- FT_Int top_upm = 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_Int sub_upm = 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 CFF_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- cff_slot_done( FT_GlyphSlot slot )
- {
- slot->internal->glyph_hints = 0;
- }
-
-
- 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 = (PSHinter_Service)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 CFF_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;
- }
-
-
- 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 sfnt_format = 0;
-
-
-#if 0
- FT_FACE_FIND_GLOBAL_SERVICE( face, sfnt, SFNT );
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_NAMES );
- FT_FACE_FIND_GLOBAL_SERVICE( face, pshinter, POSTSCRIPT_HINTER );
-
- if ( !sfnt )
- goto Bad_Format;
-#else
- sfnt = (SFNT_Service)FT_Get_Module_Interface(
- cffface->driver->root.library, "sfnt" );
- if ( !sfnt )
- goto Bad_Format;
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
-
- pshinter = (PSHinter_Service)FT_Get_Module_Interface(
- cffface->driver->root.library, "pshinter" );
-#endif
-
- /* create input stream from resource */
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- /* check whether we have a valid OpenType file */
- error = sfnt->init_face( stream, face, face_index, num_params, params );
- if ( !error )
- {
- if ( face->format_tag != 0x4F54544FL ) /* `OTTO'; OpenType/CFF font */
- {
- FT_TRACE2(( "[not a valid OpenType/CFF font]\n" ));
- goto Bad_Format;
- }
-
- /* if we are performing a simple font format check, exit immediately */
- if ( face_index < 0 )
- return CFF_Err_Ok;
-
- /* UNDOCUMENTED! A CFF in an SFNT can have only a single font. */
- if ( face_index > 0 )
- {
- FT_ERROR(( "cff_face_init: invalid face index\n" ));
- error = CFF_Err_Invalid_Argument;
- goto Exit;
- }
-
- 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;
-
- /* XXX: we don't load the GPOS table, as OpenType Layout */
- /* support will be added later to a layout library on top of */
- /* FreeType 2 */
- }
-
- /* now load the CFF part of the file */
- 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 = CFF_Err_Ok;
- }
-
- /* now load and parse the CFF table in the file */
- {
- CFF_Font cff;
- 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( stream, face_index, cff );
- if ( error )
- goto Exit;
-
- cff->pshinter = pshinter;
- cff->psnames = (void*)psnames;
-
- /* 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 = 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:" ));
- FT_ERROR(( " cannot open CFF & CEF fonts\n" ));
- FT_ERROR(( " " ));
- FT_ERROR(( " without the `PSNames' module\n" ));
- goto Bad_Format;
- }
-
- if ( !dict->units_per_em )
- dict->units_per_em = pure_cff ? 1000 : face->root.units_per_EM;
-
- /* Normalize the font matrix so that `matrix->xx' is 1; 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 = FT_ABS( matrix->yy );
-
-
- if ( temp != 0x10000L )
- {
- *upm = FT_DivFix( *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->units_per_em )
- {
- FT_Int scaling;
-
-
- if ( top->units_per_em > 1 && sub->units_per_em > 1 )
- scaling = 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_MulDiv( sub->units_per_em,
- 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 = FT_ABS( matrix->yy );
-
- if ( temp != 0x10000L )
- {
- *upm = FT_DivFix( *upm, temp );
-
- /* if *upm is larger than 100*1000 we divide by 1000 -- */
- /* this can happen if e.g. there is no top-font FontMatrix */
- /* and the subfont FontMatrix already contains the complete */
- /* scaling for the subfont (see section 5.11 of the PLRM) */
-
- /* 100 is a heuristic value */
-
- if ( *upm > 100L * 1000L )
- *upm = ( *upm + 500 ) / 1000;
-
- 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 = cff->num_faces;
-
- /* compute number of glyphs */
- if ( dict->cid_registry != 0xFFFFU )
- cffface->num_glyphs = cff->charset.max_cid;
- else
- cffface->num_glyphs = 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;
- cffface->bbox.xMax = ( dict->font_bbox.xMax + 0xFFFFU ) >> 16;
- cffface->bbox.yMax = ( dict->font_bbox.yMax + 0xFFFFU ) >> 16;
-
-
- cffface->units_per_EM = 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->name_index,
- face_index );
-
- if ( cffface->family_name )
- {
- char* full = cff_index_get_sid_string( &cff->string_index,
- dict->full_name,
- psnames );
- char* fullp = full;
- char* family = cffface->family_name;
- char* family_name = 0;
-
-
- if ( dict->family_name )
- {
- family_name = cff_index_get_sid_string( &cff->string_index,
- dict->family_name,
- psnames);
- 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 );
- }
- break;
- }
-
- if ( family_name )
- FT_FREE( family_name );
- FT_FREE( full );
- }
- }
- else
- {
- char *cid_font_name =
- cff_index_get_sid_string( &cff->string_index,
- dict->cid_font_name,
- psnames );
-
-
- /* do we have a `/FontName' for a CID-keyed font? */
- if ( cid_font_name )
- cffface->family_name = 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->string_index,
- dict->weight,
- psnames );
-
-
- if ( weight )
- if ( !ft_strcmp( weight, "Bold" ) ||
- !ft_strcmp( weight, "Black" ) )
- flags |= FT_STYLE_FLAG_BOLD;
- FT_FREE( weight );
- }
-
- /* 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 )
- cffface->face_flags |= FT_FACE_FLAG_CID_KEYED;
-
-
- /*******************************************************************/
- /* */
- /* Compute char maps. */
- /* */
-
- /* Try to synthetize 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 (3,1)? */
- if ( cmap->platform_id == 3 && cmap->encoding_id == 1 )
- goto Skip_Unicode;
-
- /* Deprecated Unicode platform id? */
- if ( cmap->platform_id == 0 )
- goto Skip_Unicode; /* Standard Unicode (deprecated) */
- }
-
- /* 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 = 3;
- cmaprec.encoding_id = 1;
- cmaprec.encoding = FT_ENCODING_UNICODE;
-
- nn = (FT_UInt)cffface->num_charmaps;
-
- FT_CMap_New( &cff_cmap_unicode_class_rec, NULL, &cmaprec, NULL );
-
- /* if no Unicode charmap was previously selected, select this one */
- if ( cffface->charmap == NULL && 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 = 7; /* 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;
- }
- else if ( encoding->offset == 1 )
- {
- cmaprec.encoding_id = TT_ADOBE_ID_EXPERT;
- cmaprec.encoding = FT_ENCODING_ADOBE_EXPERT;
- clazz = &cff_cmap_encoding_class_rec;
- }
- else
- {
- cmaprec.encoding_id = TT_ADOBE_ID_CUSTOM;
- cmaprec.encoding = FT_ENCODING_ADOBE_CUSTOM;
- clazz = &cff_cmap_encoding_class_rec;
- }
-
- FT_CMap_New( clazz, NULL, &cmaprec, NULL );
- }
- }
- }
-
- Exit:
- return error;
-
- Bad_Format:
- error = CFF_Err_Unknown_File_Format;
- goto Exit;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_face_done( FT_Face cffface ) /* CFF_Face */
- {
- CFF_Face face = (CFF_Face)cffface;
- FT_Memory memory = cffface->memory;
- SFNT_Service 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 );
- }
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_driver_init( FT_Module module )
- {
- FT_UNUSED( module );
-
- return CFF_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( void )
- cff_driver_done( FT_Module module )
- {
- FT_UNUSED( module );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffobjs.h b/Build/source/libs/freetype2/src/cff/cffobjs.h
deleted file mode 100644
index 3c81cee0094..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffobjs.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffobjs.h */
-/* */
-/* OpenType objects manager (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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;
-
-
- /***********************************************************************/
- /* */
- /* TrueType driver class. */
- /* */
- typedef struct CFF_DriverRec_
- {
- FT_DriverRec root;
- void* extension_component;
-
- } 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 );
-
- FT_LOCAL( void )
- cff_driver_done( FT_Module module );
-
-
-FT_END_HEADER
-
-#endif /* __CFFOBJS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffparse.c b/Build/source/libs/freetype2/src/cff/cffparse.c
deleted file mode 100644
index d6d77dd08da..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffparse.c
+++ /dev/null
@@ -1,843 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffparse.c */
-/* */
-/* CFF token stream parser (body) */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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_cffparse
-
-
- 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_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;
-
- } CFF_Field_Handler;
-
-
- FT_LOCAL_DEF( void )
- cff_parser_init( CFF_Parser parser,
- FT_UInt code,
- void* object )
- {
- FT_MEM_ZERO( parser, sizeof ( *parser ) );
-
- parser->top = parser->stack;
- parser->object_code = code;
- parser->object = object;
- }
-
-
- /* 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_Int)p[0] << 8 ) | p[1] );
- p += 2;
- }
- else if ( v == 29 )
- {
- if ( p + 4 > limit )
- goto Bad;
-
- val = ( (FT_Long)p[0] << 24 ) |
- ( (FT_Long)p[1] << 16 ) |
- ( (FT_Long)p[2] << 8 ) |
- p[3];
- p += 4;
- }
- else if ( v < 247 )
- {
- val = v - 139;
- }
- else if ( v < 251 )
- {
- if ( p + 1 > limit )
- goto Bad;
-
- val = ( v - 247 ) * 256 + p[0] + 108;
- p++;
- }
- else
- {
- if ( p + 1 > limit )
- goto Bad;
-
- val = -( v - 251 ) * 256 - p[0] - 108;
- p++;
- }
-
- Exit:
- return val;
-
- Bad:
- val = 0;
- goto Exit;
- }
-
-
- static const FT_Long power_tens[] =
- {
- 1L,
- 10L,
- 100L,
- 1000L,
- 10000L,
- 100000L,
- 1000000L,
- 10000000L,
- 100000000L,
- 1000000000L
- };
-
-
- /* read a real */
- static FT_Fixed
- cff_parse_real( FT_Byte* start,
- FT_Byte* limit,
- FT_Int power_ten,
- FT_Int* scaling )
- {
- FT_Byte* p = start;
- FT_UInt nib;
- FT_UInt phase;
-
- FT_Long result, number, rest, exponent;
- FT_Int sign = 0, exponent_sign = 0;
- FT_Int exponent_add, integer_length, fraction_length;
-
-
- if ( scaling )
- *scaling = 0;
-
- result = 0;
-
- number = 0;
- rest = 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 Exit;
- }
-
- /* Get the nibble. */
- nib = ( 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 Exit;
- }
-
- /* 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++;
- 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 Exit;
- }
-
- /* Get the nibble. */
- nib = ( p[0] >> phase ) & 0xF;
- phase = 4 - phase;
- if ( nib >= 10 )
- break;
-
- exponent = exponent * 10 + nib;
-
- /* Arbitrarily limit exponent. */
- if ( exponent > 1000 )
- goto Exit;
- }
-
- if ( exponent_sign )
- exponent = -exponent;
- }
-
- /* 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_Int new_fraction_length, shift;
-
-
- /* Make `scaling' as small as possible. */
- new_fraction_length = FT_MIN( exponent, 5 );
- exponent -= new_fraction_length;
- shift = new_fraction_length - fraction_length;
-
- number *= power_tens[shift];
- if ( number > 0x7FFFL )
- {
- number /= 10;
- exponent += 1;
- }
- }
- else
- exponent -= fraction_length;
-
- result = 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;
-
- /* Check for overflow and underflow. */
- if ( FT_ABS( integer_length ) > 5 )
- goto Exit;
-
- /* 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 Exit;
-
- result = number << 16;
- }
- }
-
- if ( sign )
- result = -result;
-
- Exit:
- return result;
- }
-
-
- /* read a number, either integer or real */
- static FT_Long
- cff_parse_num( FT_Byte** d )
- {
- return **d == 30 ? ( cff_parse_real( d[0], d[1], 0, NULL ) >> 16 )
- : cff_parse_integer( d[0], d[1] );
- }
-
-
- /* read a floating point number, either integer or real */
- static FT_Fixed
- cff_parse_fixed( FT_Byte** d )
- {
- return **d == 30 ? cff_parse_real( d[0], d[1], 0, NULL )
- : cff_parse_integer( d[0], d[1] ) << 16;
- }
-
-
- /* 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( FT_Byte** d,
- FT_Int scaling )
- {
- return **d ==
- 30 ? cff_parse_real( d[0], d[1], scaling, NULL )
- : (FT_Fixed)FT_MulFix( cff_parse_integer( d[0], d[1] ) << 16,
- power_tens[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( FT_Byte** d,
- FT_Int* scaling )
- {
- FT_ASSERT( scaling );
-
- if ( **d == 30 )
- return cff_parse_real( d[0], d[1], 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 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 = CFF_Err_Stack_Underflow;
-
-
- if ( parser->top >= parser->stack + 6 )
- {
- FT_Int scaling;
-
-
- error = CFF_Err_Ok;
-
- /* 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 element `xx' to scale */
- /* all other elements. The scaling factor is then contained in the */
- /* `units_per_em' value. */
-
- matrix->xx = cff_parse_fixed_dynamic( data++, &scaling );
-
- scaling = -scaling;
-
- if ( scaling < 0 || scaling > 9 )
- {
- /* Return default matrix in case of unlikely values. */
- matrix->xx = 0x10000L;
- matrix->yx = 0;
- matrix->yx = 0;
- matrix->yy = 0x10000L;
- offset->x = 0;
- offset->y = 0;
- *upm = 1;
-
- goto Exit;
- }
-
- matrix->yx = cff_parse_fixed_scaled( data++, scaling );
- matrix->xy = cff_parse_fixed_scaled( data++, scaling );
- matrix->yy = cff_parse_fixed_scaled( data++, scaling );
- offset->x = cff_parse_fixed_scaled( data++, scaling );
- offset->y = cff_parse_fixed_scaled( data, scaling );
-
- *upm = power_tens[scaling];
- }
-
- 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 = CFF_Err_Stack_Underflow;
-
- if ( parser->top >= parser->stack + 4 )
- {
- bbox->xMin = FT_RoundFix( cff_parse_fixed( data++ ) );
- bbox->yMin = FT_RoundFix( cff_parse_fixed( data++ ) );
- bbox->xMax = FT_RoundFix( cff_parse_fixed( data++ ) );
- bbox->yMax = FT_RoundFix( cff_parse_fixed( data ) );
- error = CFF_Err_Ok;
- }
-
- 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 = CFF_Err_Stack_Underflow;
-
- if ( parser->top >= parser->stack + 2 )
- {
- dict->private_size = cff_parse_num( data++ );
- dict->private_offset = cff_parse_num( data );
- error = CFF_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 = CFF_Err_Stack_Underflow;
-
- if ( parser->top >= parser->stack + 3 )
- {
- dict->cid_registry = (FT_UInt)cff_parse_num ( data++ );
- dict->cid_ordering = (FT_UInt)cff_parse_num ( data++ );
- dict->cid_supplement = (FT_ULong)cff_parse_num( data );
- error = CFF_Err_Ok;
- }
-
- return error;
- }
-
-
-#define CFF_FIELD_NUM( code, name ) \
- CFF_FIELD( code, name, cff_kind_num )
-#define CFF_FIELD_FIXED( code, name ) \
- CFF_FIELD( code, name, cff_kind_fixed )
-#define CFF_FIELD_FIXED_1000( code, name ) \
- CFF_FIELD( code, name, cff_kind_fixed_thousand )
-#define CFF_FIELD_STRING( code, name ) \
- CFF_FIELD( code, name, cff_kind_string )
-#define CFF_FIELD_BOOL( code, name ) \
- CFF_FIELD( code, name, cff_kind_bool )
-#define CFF_FIELD_DELTA( code, name, max ) \
- CFF_FIELD( code, name, cff_kind_delta )
-
-#define CFF_FIELD_CALLBACK( code, name ) \
- { \
- cff_kind_callback, \
- code | CFFCODE, \
- 0, 0, \
- cff_parse_ ## name, \
- 0, 0 \
- },
-
-#undef CFF_FIELD
-#define CFF_FIELD( code, name, kind ) \
- { \
- kind, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE( name ), \
- 0, 0, 0 \
- },
-
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code, name, max ) \
- { \
- cff_kind_delta, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE_DELTA( name ), \
- 0, \
- max, \
- FT_FIELD_OFFSET( num_ ## name ) \
- },
-
-#define CFFCODE_TOPDICT 0x1000
-#define CFFCODE_PRIVATE 0x2000
-
- static const CFF_Field_Handler cff_field_handlers[] =
- {
-
-#include "cfftoken.h"
-
- { 0, 0, 0, 0, 0, 0, 0 }
- };
-
-
- FT_LOCAL_DEF( FT_Error )
- cff_parser_run( CFF_Parser parser,
- FT_Byte* start,
- FT_Byte* limit )
- {
- FT_Byte* p = start;
- FT_Error error = CFF_Err_Ok;
-
-
- parser->top = parser->stack;
- parser->start = start;
- parser->limit = limit;
- parser->cursor = start;
-
- while ( p < limit )
- {
- FT_UInt v = *p;
-
-
- if ( v >= 27 && v != 31 )
- {
- /* it's a number; we will push its position on the stack */
- if ( parser->top - parser->stack >= CFF_MAX_STACK_DEPTH )
- goto Stack_Overflow;
-
- *parser->top ++ = p;
-
- /* now, skip it */
- if ( v == 30 )
- {
- /* skip real number */
- p++;
- for (;;)
- {
- if ( p >= limit )
- goto Syntax_Error;
- 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;
- }
- 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 = (FT_UInt)
- ( parser->top - parser->stack );
- const CFF_Field_Handler* field;
-
-
- *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; 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;
-
-
- /* 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->stack );
- goto Store_Number;
-
- case cff_kind_fixed:
- val = cff_parse_fixed( parser->stack );
- goto Store_Number;
-
- case cff_kind_fixed_thousand:
- val = cff_parse_fixed_scaled( 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;
- }
- 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;
-
- /* store count */
- *qcount = (FT_Byte)num_args;
-
- val = 0;
- while ( num_args > 0 )
- {
- val += cff_parse_num( 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;
- }
-
- q += field->size;
- num_args--;
- }
- }
- break;
-
- default: /* callback */
- 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 */
- parser->top = parser->stack;
- }
- p++;
- }
-
- Exit:
- return error;
-
- Stack_Overflow:
- error = CFF_Err_Invalid_Argument;
- goto Exit;
-
- Stack_Underflow:
- error = CFF_Err_Invalid_Argument;
- goto Exit;
-
- Syntax_Error:
- error = CFF_Err_Invalid_Argument;
- goto Exit;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cffparse.h b/Build/source/libs/freetype2/src/cff/cffparse.h
deleted file mode 100644
index 8f3fa588592..00000000000
--- a/Build/source/libs/freetype2/src/cff/cffparse.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffparse.h */
-/* */
-/* CFF token stream parser (specification) */
-/* */
-/* Copyright 1996-2001, 2002, 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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CFF_PARSE_H__
-#define __CFF_PARSE_H__
-
-
-#include <ft2build.h>
-#include "cfftypes.h"
-#include FT_INTERNAL_OBJECTS_H
-
-
-FT_BEGIN_HEADER
-
-
-#define CFF_MAX_STACK_DEPTH 96
-
-#define CFF_CODE_TOPDICT 0x1000
-#define CFF_CODE_PRIVATE 0x2000
-
-
- typedef struct CFF_ParserRec_
- {
- FT_Byte* start;
- FT_Byte* limit;
- FT_Byte* cursor;
-
- FT_Byte* stack[CFF_MAX_STACK_DEPTH + 1];
- FT_Byte** top;
-
- FT_UInt object_code;
- void* object;
-
- } CFF_ParserRec, *CFF_Parser;
-
-
- FT_LOCAL( void )
- cff_parser_init( CFF_Parser parser,
- FT_UInt code,
- void* object );
-
- FT_LOCAL( FT_Error )
- cff_parser_run( CFF_Parser parser,
- FT_Byte* start,
- FT_Byte* limit );
-
-
-FT_END_HEADER
-
-
-#endif /* __CFF_PARSE_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cfftoken.h b/Build/source/libs/freetype2/src/cff/cfftoken.h
deleted file mode 100644
index 6bb27d5cafd..00000000000
--- a/Build/source/libs/freetype2/src/cff/cfftoken.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/***************************************************************************/
-/* */
-/* cfftoken.h */
-/* */
-/* CFF token definitions (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 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. */
-/* */
-/***************************************************************************/
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_FontRecDictRec
-
-#undef CFFCODE
-#define CFFCODE CFFCODE_TOPDICT
-
- CFF_FIELD_STRING ( 0, version )
- CFF_FIELD_STRING ( 1, notice )
- CFF_FIELD_STRING ( 0x100, copyright )
- CFF_FIELD_STRING ( 2, full_name )
- CFF_FIELD_STRING ( 3, family_name )
- CFF_FIELD_STRING ( 4, weight )
- CFF_FIELD_BOOL ( 0x101, is_fixed_pitch )
- CFF_FIELD_FIXED ( 0x102, italic_angle )
- CFF_FIELD_FIXED ( 0x103, underline_position )
- CFF_FIELD_FIXED ( 0x104, underline_thickness )
- CFF_FIELD_NUM ( 0x105, paint_type )
- CFF_FIELD_NUM ( 0x106, charstring_type )
- CFF_FIELD_CALLBACK( 0x107, font_matrix )
- CFF_FIELD_NUM ( 13, unique_id )
- CFF_FIELD_CALLBACK( 5, font_bbox )
- CFF_FIELD_NUM ( 0x108, stroke_width )
- CFF_FIELD_NUM ( 15, charset_offset )
- CFF_FIELD_NUM ( 16, encoding_offset )
- CFF_FIELD_NUM ( 17, charstrings_offset )
- CFF_FIELD_CALLBACK( 18, private_dict )
- CFF_FIELD_NUM ( 0x114, synthetic_base )
- CFF_FIELD_STRING ( 0x115, embedded_postscript )
-
-#if 0
- CFF_FIELD_STRING ( 0x116, base_font_name )
- CFF_FIELD_DELTA ( 0x117, base_font_blend, 16 )
- CFF_FIELD_CALLBACK( 0x118, multiple_master )
- CFF_FIELD_CALLBACK( 0x119, blend_axis_types )
-#endif
-
- CFF_FIELD_CALLBACK( 0x11E, cid_ros )
- CFF_FIELD_NUM ( 0x11F, cid_font_version )
- CFF_FIELD_NUM ( 0x120, cid_font_revision )
- CFF_FIELD_NUM ( 0x121, cid_font_type )
- CFF_FIELD_NUM ( 0x122, cid_count )
- CFF_FIELD_NUM ( 0x123, cid_uid_base )
- CFF_FIELD_NUM ( 0x124, cid_fd_array_offset )
- CFF_FIELD_NUM ( 0x125, cid_fd_select_offset )
- CFF_FIELD_STRING ( 0x126, cid_font_name )
-
-#if 0
- CFF_FIELD_NUM ( 0x127, chameleon )
-#endif
-
-
-#undef FT_STRUCTURE
-#define FT_STRUCTURE CFF_PrivateRec
-#undef CFFCODE
-#define CFFCODE CFFCODE_PRIVATE
-
- CFF_FIELD_DELTA ( 6, blue_values, 14 )
- CFF_FIELD_DELTA ( 7, other_blues, 10 )
- CFF_FIELD_DELTA ( 8, family_blues, 14 )
- CFF_FIELD_DELTA ( 9, family_other_blues, 10 )
- CFF_FIELD_FIXED_1000( 0x109, blue_scale )
- CFF_FIELD_NUM ( 0x10A, blue_shift )
- CFF_FIELD_NUM ( 0x10B, blue_fuzz )
- CFF_FIELD_NUM ( 10, standard_width )
- CFF_FIELD_NUM ( 11, standard_height )
- CFF_FIELD_DELTA ( 0x10C, snap_widths, 13 )
- CFF_FIELD_DELTA ( 0x10D, snap_heights, 13 )
- CFF_FIELD_BOOL ( 0x10E, force_bold )
- CFF_FIELD_FIXED ( 0x10F, force_bold_threshold )
- CFF_FIELD_NUM ( 0x110, lenIV )
- CFF_FIELD_NUM ( 0x111, language_group )
- CFF_FIELD_FIXED ( 0x112, expansion_factor )
- CFF_FIELD_NUM ( 0x113, initial_random_seed )
- CFF_FIELD_NUM ( 19, local_subrs_offset )
- CFF_FIELD_NUM ( 20, default_width )
- CFF_FIELD_NUM ( 21, nominal_width )
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/cfftypes.h b/Build/source/libs/freetype2/src/cff/cfftypes.h
deleted file mode 100644
index 546ea3b99d4..00000000000
--- a/Build/source/libs/freetype2/src/cff/cfftypes.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/***************************************************************************/
-/* */
-/* cfftypes.h */
-/* */
-/* Basic OpenType/CFF type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
-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 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;
-
-
- 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_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_ULong 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;
-
- } CFF_FontRecDictRec, *CFF_FontRecDict;
-
-
- 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;
-
- } 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;
-
- CFF_IndexRec local_subrs_index;
- FT_UInt num_local_subrs;
- FT_Byte** local_subrs;
-
- } CFF_SubFontRec, *CFF_SubFont;
-
-
- /* maximum number of sub-fonts in a CID-keyed file */
-#define CFF_MAX_CID_FONTS 32
-
-
- typedef struct CFF_FontRec_
- {
- FT_Stream stream;
- FT_Memory memory;
- FT_UInt num_faces;
- FT_UInt num_glyphs;
-
- FT_Byte version_major;
- FT_Byte version_minor;
- FT_Byte header_size;
- FT_Byte absolute_offsize;
-
-
- CFF_IndexRec name_index;
- CFF_IndexRec top_dict_index;
- CFF_IndexRec string_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;
- FT_UInt num_global_subrs;
- FT_Byte** global_subrs;
-
- CFF_SubFontRec top_font;
- FT_UInt num_subfonts;
- CFF_SubFont subfonts[CFF_MAX_CID_FONTS];
-
- CFF_FDSelectRec fd_select;
-
- /* interface to PostScript hinter */
- void* pshinter;
-
- /* interface to Postscript Names service */
- void* psnames;
-
- /* since version 2.3.0 */
- PS_FontInfoRec* font_info; /* font info dictionary */
-
- /* since version 2.3.6 */
- FT_String* registry;
- FT_String* ordering;
-
- } CFF_FontRec, *CFF_Font;
-
-
-FT_END_HEADER
-
-#endif /* __CFFTYPES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cff/module.mk b/Build/source/libs/freetype2/src/cff/module.mk
deleted file mode 100644
index 0474e37b69c..00000000000
--- a/Build/source/libs/freetype2/src/cff/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 CFF module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)cff_driver_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)cff $(ECHO_DRIVER_DESC)OpenType fonts with extension *.otf$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/cff/rules.mk b/Build/source/libs/freetype2/src/cff/rules.mk
deleted file mode 100644
index 4100c806875..00000000000
--- a/Build/source/libs/freetype2/src/cff/rules.mk
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# FreeType 2 OpenType/CFF driver configuration rules
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-# OpenType driver directory
-#
-CFF_DIR := $(SRC_DIR)/cff
-
-
-CFF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CFF_DIR))
-
-
-# CFF driver sources (i.e., C files)
-#
-CFF_DRV_SRC := $(CFF_DIR)/cffobjs.c \
- $(CFF_DIR)/cffload.c \
- $(CFF_DIR)/cffgload.c \
- $(CFF_DIR)/cffparse.c \
- $(CFF_DIR)/cffcmap.c \
- $(CFF_DIR)/cffdrivr.c
-
-# CFF driver headers
-#
-CFF_DRV_H := $(CFF_DRV_SRC:%.c=%.h) \
- $(CFF_DIR)/cfftoken.h \
- $(CFF_DIR)/cfftypes.h \
- $(CFF_DIR)/cfferrs.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/Build/source/libs/freetype2/src/cid/Jamfile b/Build/source/libs/freetype2/src/cid/Jamfile
deleted file mode 100644
index ebeaed54ea2..00000000000
--- a/Build/source/libs/freetype2/src/cid/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/cid Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cid ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = cidobjs cidload cidgload cidriver cidparse ;
- }
- else
- {
- _sources = type1cid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cid Jamfile
diff --git a/Build/source/libs/freetype2/src/cid/ciderrs.h b/Build/source/libs/freetype2/src/cid/ciderrs.h
deleted file mode 100644
index 01813e18986..00000000000
--- a/Build/source/libs/freetype2/src/cid/ciderrs.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* ciderrs.h */
-/* */
-/* CID error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/cid/cidgload.c b/Build/source/libs/freetype2/src/cid/cidgload.c
deleted file mode 100644
index 64994b44194..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidgload.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidgload.c */
-/* */
-/* CID-keyed Type1 Glyph Loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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_UInt fd_select;
- FT_Stream stream = face->cid_stream;
- FT_Error error = CID_Err_Ok;
- FT_Byte* charstring = 0;
- FT_Memory memory = face->root.memory;
- FT_ULong glyph_length = 0;
- PSAux_Service psaux = (PSAux_Service)face->psaux;
-
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* For incremental fonts get the character data using */
- /* the callback function. */
- if ( face->root.internal->incremental_interface )
- {
- FT_Data glyph_data;
-
-
- error = face->root.internal->incremental_interface->funcs->get_glyph_data(
- face->root.internal->incremental_interface->object,
- glyph_index,
- &glyph_data );
- if ( error )
- goto Exit;
-
- p = (FT_Byte*)glyph_data.pointer;
- fd_select = (FT_UInt)cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
-
- if ( glyph_data.length != 0 )
- {
- glyph_length = 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 );
- }
-
- face->root.internal->incremental_interface->funcs->free_glyph_data(
- face->root.internal->incremental_interface->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 = cid->fd_bytes + cid->gd_bytes;
- FT_ULong off1;
-
-
- 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 = (FT_UInt) cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
- off1 = (FT_ULong)cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
- p += cid->fd_bytes;
- glyph_length = cid_get_offset( &p, (FT_Byte)cid->gd_bytes ) - off1;
- FT_FRAME_EXIT();
-
- if ( fd_select >= (FT_UInt)cid->num_dicts )
- {
- error = CID_Err_Invalid_Offset;
- goto Exit;
- }
- 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_Int cs_offset;
-
-
- /* Set up subrs */
- decoder->num_subrs = cid_subrs->num_subrs;
- decoder->subrs = cid_subrs->code;
- decoder->subrs_len = 0;
-
- /* 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 ? decoder->lenIV : 0 );
-
- /* 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,
- (FT_Int)glyph_length - cs_offset );
- }
-
- FT_FREE( charstring );
-
-#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 = decoder->builder.left_bearing.y;
- metrics.advance = decoder->builder.advance.x;
- 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.left_bearing.y = metrics.bearing_y;
- decoder->builder.advance.x = metrics.advance;
- decoder->builder.advance.y = 0;
- }
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- Exit:
- 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 = decoder.builder.advance.x;
-
- psaux->t1_decoder_funcs->done( &decoder );
-
- return CID_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;
- CID_Size size = (CID_Size)cidsize;
- 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 = CID_Err_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 = decoder.builder.left_bearing.x;
- cidglyph->metrics.horiAdvance = 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;
- FT_Vector advance;
-
-
- /* copy the _unscaled_ advance width */
- metrics->horiAdvance = decoder.builder.advance.x;
- cidglyph->linearHoriAdvance = 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 ( size && cidsize->metrics.y_ppem < 24 )
- cidglyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
-
- /* apply the font matrix */
- FT_Outline_Transform( &cidglyph->outline, &font_matrix );
-
- FT_Outline_Translate( &cidglyph->outline,
- font_offset.x,
- font_offset.y );
-
- advance.x = metrics->horiAdvance;
- advance.y = 0;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->horiAdvance = advance.x + font_offset.x;
-
- advance.x = 0;
- advance.y = metrics->vertAdvance;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->vertAdvance = advance.y + 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;
-
- /* make up vertical ones */
- ft_synthesize_vertical_metrics( metrics,
- metrics->vertAdvance );
- }
-
- Exit:
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cid/cidgload.h b/Build/source/libs/freetype2/src/cid/cidgload.h
deleted file mode 100644
index a0a91bfea83..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidgload.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidgload.h */
-/* */
-/* OpenType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/cid/cidload.c b/Build/source/libs/freetype2/src/cid/cidload.c
deleted file mode 100644
index 9ed8cee46c7..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidload.c
+++ /dev/null
@@ -1,644 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidload.c */
-/* */
-/* CID-keyed Type1 font loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Long )
- cid_get_offset( FT_Byte* *start,
- FT_Byte offsize )
- {
- FT_Long 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_BBOX:
- object = (FT_Byte*)&cid->font_bbox;
- break;
-
- default:
- {
- CID_FaceDict dict;
-
-
- if ( parser->num_dict < 0 )
- {
- FT_ERROR(( "cid_load_keyword: invalid use of `%s'!\n",
- keyword->ident ));
- error = CID_Err_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 )
- parse_font_matrix( CID_Face face,
- CID_Parser* parser )
- {
- FT_Matrix* matrix;
- FT_Vector* offset;
- CID_FaceDict dict;
- FT_Face root = (FT_Face)&face->root;
- FT_Fixed temp[6];
- FT_Fixed temp_scale;
-
-
- if ( parser->num_dict >= 0 )
- {
- dict = face->cid.font_dicts + parser->num_dict;
- matrix = &dict->font_matrix;
- offset = &dict->font_offset;
-
- (void)cid_parser_to_fixed_array( parser, 6, temp, 3 );
-
- temp_scale = FT_ABS( temp[3] );
-
- /* Set units per EM based on FontMatrix values. We set the value to */
- /* `1000/temp_scale', because temp_scale was already multiplied by */
- /* 1000 (in `t1_tofixed', from psobjs.c). */
- root->units_per_EM = (FT_UShort)( FT_DivFix( 0x10000L,
- FT_DivFix( temp_scale, 1000 ) ) );
-
- /* we need to scale the values by 1.0/temp[3] */
- 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] = 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 CID_Err_Ok; /* this is a callback function; */
- /* we must return an error code */
- }
-
-
- 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_Error error = CID_Err_Ok;
- FT_Long num_dicts;
-
-
- num_dicts = cid_parser_to_int( parser );
-
- if ( !cid->font_dicts )
- {
- FT_Int n;
-
-
- if ( FT_NEW_ARRAY( cid->font_dicts, num_dicts ) )
- goto Exit;
-
- cid->num_dicts = (FT_UInt)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;
- }
-
-
- static
- const T1_FieldRec cid_field_records[] =
- {
-
-#include "cidtoken.h"
-
- T1_FIELD_CALLBACK( "FDArray", parse_fd_array, 0 )
- T1_FIELD_CALLBACK( "FontMatrix", parse_font_matrix, 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_Long size )
- {
- CID_Parser* parser = &loader->parser;
-
-
- parser->root.cursor = base;
- parser->root.limit = base + size;
- parser->root.error = CID_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_PtrDist len;
-
-
- cur++;
- len = 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_PtrDist)ft_strlen( (const char*)name ) )
- {
- FT_PtrDist 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;
- }
- }
- 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 = 0;
- 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;
-
-
- /* reallocate offsets array if needed */
- if ( num_subrs + 1 > max_offsets )
- {
- FT_UInt new_max = FT_PAD_CEIL( num_subrs + 1, 4 );
-
-
- 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 ) * 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();
-
- /* 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 = 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
- t1_init_loader( CID_Loader* loader,
- CID_Face face )
- {
- FT_UNUSED( face );
-
- FT_MEM_ZERO( loader, sizeof ( *loader ) );
- }
-
-
- static void
- t1_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_Long 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 = CID_Err_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 = CID_Err_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 = CID_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;
-
-
- t1_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 )
- {
- /* we must convert the data section from hexadecimal to binary */
- if ( FT_ALLOC( face->binary_data, parser->binary_length ) ||
- 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 );
- face->cid.data_offset = 0;
- }
- else
- {
- *face->cid_stream = *face->root.stream;
- face->cid.data_offset = loader.parser.data_offset;
- }
-
- error = cid_read_subrs( face );
-
- Exit:
- t1_done_loader( &loader );
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cid/cidload.h b/Build/source/libs/freetype2/src/cid/cidload.h
deleted file mode 100644
index 8c172ffee2d..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidload.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidload.h */
-/* */
-/* CID-keyed Type1 font loader (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#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_Long )
- 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/Build/source/libs/freetype2/src/cid/cidobjs.c b/Build/source/libs/freetype2/src/cid/cidobjs.c
deleted file mode 100644
index 1b3bfbf749a..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidobjs.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidobjs.c */
-/* */
-/* CID objects manager (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 = 0;
- }
-
-
- 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 )
- {
- PSH_Globals_Funcs funcs;
-
-
- funcs = cid_size_get_globals_funcs( size );
- if ( funcs )
- funcs->destroy( (PSH_Globals)cidsize->internal );
-
- cidsize->internal = 0;
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- cid_size_init( FT_Size cidsize ) /* CID_Size */
- {
- CID_Size size = (CID_Size)cidsize;
- FT_Error error = 0;
- 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 = (FT_Size_Internal)(void*)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,
- size->metrics.x_scale,
- size->metrics.y_scale,
- 0, 0 );
-
- return CID_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;
-
-
- if ( face )
- {
- CID_FaceInfo cid = &face->cid;
- PS_FontInfo 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 = 0;
- cidface->style_name = 0;
-
- 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" );
-
- 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;
- }
-
- /* 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 */
- if ( face_index != 0 )
- {
- FT_ERROR(( "cid_face_init: invalid face index\n" ));
- error = CID_Err_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 = cid->cid_count;
- cidface->num_charmaps = 0;
-
- cidface->face_index = face_index;
- 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 = 0;
-
- cidface->bbox.xMin = cid->font_bbox.xMin >> 16;
- cidface->bbox.yMin = cid->font_bbox.yMin >> 16;
- cidface->bbox.xMax = ( cid->font_bbox.xMax + 0xFFFFU ) >> 16;
- cidface->bbox.yMax = ( cid->font_bbox.yMax + 0xFFFFU ) >> 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 CID_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/Build/source/libs/freetype2/src/cid/cidobjs.h b/Build/source/libs/freetype2/src/cid/cidobjs.h
deleted file mode 100644
index aee346d1c88..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidobjs.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidobjs.h */
-/* */
-/* CID objects manager (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/cid/cidparse.c b/Build/source/libs/freetype2/src/cid/cidparse.c
deleted file mode 100644
index bb87afc5891..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidparse.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidparse.c */
-/* */
-/* CID-keyed Type1 parser (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- 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_MEM_ZERO( parser, sizeof ( *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 valid CID-keyed font]\n" ));
- error = CID_Err_Unknown_File_Format;
- }
-
- FT_FRAME_EXIT();
- if ( error )
- goto Exit;
-
- Again:
- /* now, read the rest of the file until we find */
- /* `StartData' or `/sfnts' */
- {
- FT_Byte buffer[256 + 10];
- FT_Int read_len = 256 + 10;
- FT_Byte* p = buffer;
-
-
- for ( offset = (FT_ULong)FT_STREAM_POS(); ; offset += 256 )
- {
- FT_Int stream_len;
-
-
- stream_len = stream->size - FT_STREAM_POS();
- if ( stream_len == 0 )
- {
- FT_TRACE2(( "cid_parser_new: no `StartData' keyword found\n" ));
- error = CID_Err_Unknown_File_Format;
- goto Exit;
- }
-
- read_len = FT_MIN( read_len, stream_len );
- if ( FT_STREAM_READ( p, read_len ) )
- goto Exit;
-
- if ( read_len < 256 )
- p[read_len] = '\0';
-
- limit = p + read_len - 10;
-
- for ( p = buffer; p < limit; p++ )
- {
- if ( p[0] == 'S' && ft_strncmp( (char*)p, "StartData", 9 ) == 0 )
- {
- /* save offset of binary data after `StartData' */
- offset += p - buffer + 10;
- goto Found;
- }
- else if ( p[1] == 's' && ft_strncmp( (char*)p, "/sfnts", 6 ) == 0 )
- {
- offset += p - buffer + 7;
- goto Found;
- }
- }
-
- FT_MEM_MOVE( buffer, p, 10 );
- read_len = 256;
- p = buffer + 10;
- }
- }
-
- 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 )
- {
- if ( parser->root.error )
- {
- error = parser->root.error;
- goto Exit;
- }
-
- if ( cur[0] == 'S' && ft_strncmp( (char*)cur, "StartData", 9 ) == 0 )
- {
- if ( ft_strncmp( (char*)arg1, "(Hex)", 5 ) == 0 )
- parser->binary_length = ft_atol( (const char *)arg2 );
-
- limit = parser->root.limit;
- cur = parser->root.cursor;
- goto Exit;
- }
- else if ( cur[1] == 's' && ft_strncmp( (char*)cur, "/sfnts", 6 ) == 0 )
- {
- FT_TRACE2(( "cid_parser_new: cannot handle Type 11 fonts\n" ));
- error = CID_Err_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;
- }
-
-
- 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/Build/source/libs/freetype2/src/cid/cidparse.h b/Build/source/libs/freetype2/src/cid/cidparse.h
deleted file mode 100644
index ca37deab936..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidparse.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidparse.h */
-/* */
-/* CID-keyed Type1 parser (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#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_Long postscript_len;
-
- FT_ULong data_offset;
-
- FT_Long 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/Build/source/libs/freetype2/src/cid/cidriver.c b/Build/source/libs/freetype2/src/cid/cidriver.c
deleted file mode 100644
index 85ee6cf1915..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidriver.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidriver.c */
-/* */
-/* CID driver interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 FT_INTERNAL_STREAM_H
-
-#include "ciderrs.h"
-
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_XFREE86_NAME_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
- };
-
-
- /*
- * 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 0;
- }
-
-
- static const FT_Service_PsInfoRec cid_service_ps_info =
- {
- (PS_GetFontInfoFunc) cid_ps_get_font_info,
- (PS_HasGlyphNamesFunc) NULL, /* unsupported with CID fonts */
- (PS_GetFontPrivateFunc)NULL /* unsupported */
- };
-
-
- /*
- * 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 CID_Err_Ok;
- }
-
-
- static const FT_Service_CIDRec cid_service_cid_info =
- {
- (FT_CID_GetRegistryOrderingSupplementFunc)cid_get_ros
- };
-
-
- /*
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec cid_services[] =
- {
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_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 =
- {
- /* first of all, the FT_Module_Class fields */
- {
- 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 */
-
- 0,
-
- cid_driver_init,
- cid_driver_done,
- cid_get_interface
- },
-
- /* then the other font drivers fields */
- sizeof( CID_FaceRec ),
- sizeof( CID_SizeRec ),
- sizeof( CID_GlyphSlotRec ),
-
- cid_face_init,
- cid_face_done,
-
- cid_size_init,
- cid_size_done,
- cid_slot_init,
- cid_slot_done,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
-
- cid_slot_load_glyph,
-
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
-
- 0, /* FT_Face_GetAdvancesFunc */
-
- cid_size_request,
- 0 /* FT_Size_SelectFunc */
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cid/cidriver.h b/Build/source/libs/freetype2/src/cid/cidriver.h
deleted file mode 100644
index d5a80f6f9fb..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidriver.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidriver.h */
-/* */
-/* High-level CID driver interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CIDRIVER_H__
-#define __CIDRIVER_H__
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_CALLBACK_TABLE
- const FT_Driver_ClassRec t1cid_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* __CIDRIVER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/cid/cidtoken.h b/Build/source/libs/freetype2/src/cid/cidtoken.h
deleted file mode 100644
index ad5bbb2eefd..00000000000
--- a/Build/source/libs/freetype2/src/cid/cidtoken.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/***************************************************************************/
-/* */
-/* cidtoken.h */
-/* */
-/* CID token definitions (specification only). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_NUM ( "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 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( "ExpansionFactor", expansion_factor, 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 )
-
-#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/Build/source/libs/freetype2/src/cid/module.mk b/Build/source/libs/freetype2/src/cid/module.mk
deleted file mode 100644
index 41e5a68e599..00000000000
--- a/Build/source/libs/freetype2/src/cid/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 CID module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/cid/rules.mk b/Build/source/libs/freetype2/src/cid/rules.mk
deleted file mode 100644
index f3627446126..00000000000
--- a/Build/source/libs/freetype2/src/cid/rules.mk
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# FreeType 2 CID driver configuration rules
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-# CID driver directory
-#
-CID_DIR := $(SRC_DIR)/cid
-
-
-CID_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CID_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/cid/type1cid.c b/Build/source/libs/freetype2/src/cid/type1cid.c
deleted file mode 100644
index 0b866e97c44..00000000000
--- a/Build/source/libs/freetype2/src/cid/type1cid.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/***************************************************************************/
-/* */
-/* type1cid.c */
-/* */
-/* FreeType OpenType driver component (body only). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "cidparse.c"
-#include "cidload.c"
-#include "cidobjs.c"
-#include "cidriver.c"
-#include "cidgload.c"
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/Jamfile b/Build/source/libs/freetype2/src/gxvalid/Jamfile
deleted file mode 100644
index 88049a625d3..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/Jamfile
+++ /dev/null
@@ -1,33 +0,0 @@
-# FreeType 2 src/gxvalid Jamfile
-#
-# Copyright 2005 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 = gxvcommn gxvfeat gxvbsln gxvtrak gxvopbd gxvprop
- gxvmort gxvmort0 gxvmort1 gxvmort2 gxvmort4 gxvmort5
- gxvmorx gxvmorx0 gxvmorx1 gxvmorx2 gxvmorx4 gxvmorx5
- gxvlcar gxvkern gxvmod gxvjust ;
- }
- else
- {
- _sources = gxvalid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/gxvalid Jamfile
diff --git a/Build/source/libs/freetype2/src/gxvalid/README b/Build/source/libs/freetype2/src/gxvalid/README
deleted file mode 100644
index 28e535b0bcc..00000000000
--- a/Build/source/libs/freetype2/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. Aubtable 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, 2005, 2007 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/Build/source/libs/freetype2/src/gxvalid/gxvalid.c b/Build/source/libs/freetype2/src/gxvalid/gxvalid.c
deleted file mode 100644
index bc36e675d14..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvalid.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvalid.c */
-/* */
-/* FreeType validator for TrueTypeGX/AAT tables (body only). */
-/* */
-/* Copyright 2005 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 "gxvfeat.c"
-#include "gxvcommn.c"
-#include "gxvbsln.c"
-#include "gxvtrak.c"
-#include "gxvjust.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 "gxvkern.c"
-#include "gxvopbd.c"
-#include "gxvprop.c"
-#include "gxvlcar.c"
-#include "gxvmod.c"
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvalid.h b/Build/source/libs/freetype2/src/gxvalid/gxvalid.h
deleted file mode 100644
index 27be9ecca85..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvalid.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvalid.h */
-/* */
-/* TrueTyeeGX/AAT table validation (specification only). */
-/* */
-/* Copyright 2005 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/Build/source/libs/freetype2/src/gxvalid/gxvbsln.c b/Build/source/libs/freetype2/src/gxvalid/gxvbsln.c
deleted file mode 100644
index 6cca65831e0..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvbsln.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvbsln.c */
-/* */
-/* TrueTypeGX/AAT bsln table validation (body). */
-/* */
-/* Copyright 2004, 2005 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_LookupValueDesc value,
- GXV_Validator valid )
- {
- FT_UShort v = value.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_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range ? */
- offset = (FT_UShort)( base_value.u +
- ( relative_gindex * sizeof ( FT_UShort ) ) );
-
- p = valid->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 valid )
- {
- FT_Bytes p = tables;
-
-
- GXV_NAME_ENTER( "parts format 0" );
-
- /* deltas */
- GXV_LIMIT_CHECK( 2 * GXV_BSLN_VALUE_COUNT );
-
- valid->table_data = NULL; /* No ctlPoints here. */
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_bsln_parts_fmt1_validate( FT_Bytes tables,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = tables;
-
-
- GXV_NAME_ENTER( "parts format 1" );
-
- /* deltas */
- gxv_bsln_parts_fmt0_validate( p, limit, valid );
-
- /* mappingData */
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_bsln_LookupValue_validate;
- valid->lookupfmt4_trans = gxv_bsln_LookupFmt4_transit;
- gxv_LookupTable_validate( p + 2 * GXV_BSLN_VALUE_COUNT,
- limit,
- valid );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_bsln_parts_fmt2_validate( FT_Bytes tables,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
-
- /* 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, (FT_Short)ctlPoint, valid );
- }
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_bsln_parts_fmt3_validate( FT_Bytes tables,
- FT_Bytes limit,
- GXV_Validator valid)
- {
- FT_Bytes p = tables;
-
-
- GXV_NAME_ENTER( "parts format 3" );
-
- /* stdGlyph + ctlPoints */
- gxv_bsln_parts_fmt2_validate( p, limit, valid );
-
- /* mappingData */
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_bsln_LookupValue_validate;
- valid->lookupfmt4_trans = gxv_bsln_LookupFmt4_transit;
- gxv_LookupTable_validate( p + ( 2 + 2 * GXV_BSLN_VALUE_COUNT ),
- limit,
- valid );
-
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** bsln TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_bsln_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec validrec;
- GXV_Validator valid = &validrec;
-
- 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,
- };
-
-
- valid->root = ftvalid;
- valid->table_data = bsln;
- valid->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, valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* arch-tag: ebe81143-fdaa-4c68-a4d1-b57227daa3bc
- (do not change this comment) */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvcommn.c b/Build/source/libs/freetype2/src/gxvalid/gxvcommn.c
deleted file mode 100644
index 82fd6b3a6d3..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvcommn.c
+++ /dev/null
@@ -1,1758 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvcommn.c */
-/* */
-/* TrueTypeGX/AAT common tables validation (body). */
-/* */
-/* Copyright 2004, 2005 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 valid )
- {
- 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 valid)
- {
- 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 valid )
- {
- 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 );
- }
-
- valid->subtable_length = p - table;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_array_getlimits_ushort( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort* min,
- FT_UShort* max,
- GXV_Validator valid )
- {
- 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 );
- }
-
- valid->subtable_length = 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 valid )
- {
- 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 ));
-
- if ( valid->root->level >= FT_VALIDATE_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 valid )
- {
- 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, valid );
-
- if ( *unitSize_p == 0 )
- *unitSize_p = binSrchHeader.unitSize;
-
- if ( *nUnits_p == 0 )
- *nUnits_p = binSrchHeader.nUnits;
-
- valid->subtable_length = 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", \
- 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 valid )
- {
- FT_Bytes p = table;
- FT_UShort i;
-
- GXV_LookupValueDesc value;
-
-
- GXV_NAME_ENTER( "LookupTable format 0" );
-
- GXV_LIMIT_CHECK( 2 * valid->face->num_glyphs );
-
- for ( i = 0; i < valid->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, valid->face->num_glyphs ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
- break;
- }
-
- value = GXV_LOOKUP_VALUE_LOAD( p, valid->lookupval_sign );
- valid->lookupval_func( i, value, valid );
- }
-
- valid->subtable_length = p - table;
- GXV_EXIT;
- }
-
-
- /* ================= Segment Single Format 2 Loolup 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 valid )
- {
- FT_Bytes p = table;
-
-
- while ( ( p + 4 ) < valid->root->limit )
- {
- if ( p[0] != 0xFF || p[1] != 0xFF || /* lastGlyph */
- p[2] != 0xFF || p[3] != 0xFF ) /* firstGlyph */
- break;
- p += unitSize;
- }
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_LookupTable_fmt2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- p += valid->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, valid->lookupval_sign );
-
- gxv_glyphid_validate( firstGlyph, valid );
- gxv_glyphid_validate( lastGlyph, valid );
-
- if ( lastGlyph < gid )
- {
- GXV_TRACE(( "reverse ordered segment specification:"
- " lastGlyph[%d]=%d < lastGlyph[%d]=%d\n",
- unit, lastGlyph, unit - 1 , gid ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
- }
-
- if ( lastGlyph < firstGlyph )
- {
- GXV_TRACE(( "reverse ordered range specification at unit %d:",
- " lastGlyph %d < firstGlyph %d ",
- unit, lastGlyph, firstGlyph ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
-
- if ( valid->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++ )
- valid->lookupval_func( gid, value, valid );
- }
-
- gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, valid );
- p += valid->subtable_length;
-
- valid->subtable_length = p - table;
- GXV_EXIT;
- }
-
-
- /* ================= Segment Array Format 4 Lookup Table =============== */
- static void
- gxv_LookupTable_fmt4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- p += valid->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, valid );
- gxv_glyphid_validate( lastGlyph, valid );
-
- if ( lastGlyph < gid )
- {
- GXV_TRACE(( "reverse ordered segment specification:"
- " lastGlyph[%d]=%d < lastGlyph[%d]=%d\n",
- unit, lastGlyph, unit - 1 , gid ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
- }
-
- if ( lastGlyph < firstGlyph )
- {
- GXV_TRACE(( "reverse ordered range specification at unit %d:",
- " lastGlyph %d < firstGlyph %d ",
- unit, lastGlyph, firstGlyph ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
-
- if ( valid->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 = valid->lookupfmt4_trans( (FT_UShort)( gid - firstGlyph ),
- base_value,
- limit,
- valid );
-
- valid->lookupval_func( gid, value, valid );
- }
- }
-
- gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, valid );
- p += valid->subtable_length;
-
- valid->subtable_length = 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 valid )
- {
- FT_Bytes p = table;
-
-
- while ( p < valid->root->limit )
- {
- if ( p[0] != 0xFF || p[1] != 0xFF )
- break;
- p += unitSize;
- }
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_LookupTable_fmt6_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- p += valid->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, valid->lookupval_sign );
-
- if ( gxv_glyphid_validate( glyph, valid ) )
- 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 ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
- }
- prev_glyph = glyph;
-
- valid->lookupval_func( glyph, value, valid );
- }
-
- gxv_LookupTable_fmt6_skip_endmarkers( p, unitSize, valid );
- p += valid->subtable_length;
-
- valid->subtable_length = p - table;
- GXV_EXIT;
- }
-
-
- /* ================= Trimmed Array Format 8 Lookup Table =============== */
- static void
- gxv_LookupTable_fmt8_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- gxv_glyphid_validate( (FT_UShort)( firstGlyph + glyphCount ), valid );
-
- /* valueArray */
- for ( i = 0; i < glyphCount; i++ )
- {
- GXV_LIMIT_CHECK( 2 );
- value = GXV_LOOKUP_VALUE_LOAD( p, valid->lookupval_sign );
- valid->lookupval_func( (FT_UShort)( firstGlyph + i ), value, valid );
- }
-
- valid->subtable_length = p - table;
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_LookupTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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. */
- valid->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 == NULL )
- FT_INVALID_FORMAT;
-
- func( p, limit, valid );
- p += valid->subtable_length;
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Glyph ID *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( FT_Int )
- gxv_glyphid_validate( FT_UShort gid,
- GXV_Validator valid )
- {
- FT_Face face;
-
-
- if ( gid == 0xFFFFU )
- {
- GXV_EXIT;
- return 1;
- }
-
- face = valid->face;
- if ( face->num_glyphs < gid )
- {
- GXV_TRACE(( " gxv_glyphid_check() gid overflow: num_glyphs %d < %d\n",
- face->num_glyphs, gid ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
- }
-
- return 0;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CONTROL POINT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- gxv_ctlPoint_validate( FT_UShort gid,
- FT_Short ctl_point,
- GXV_Validator valid )
- {
- FT_Face face;
- FT_Error error;
-
- FT_GlyphSlot glyph;
- FT_Outline outline;
- short n_points;
-
-
- face = valid->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 = 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 valid )
- {
- 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( valid->face );
- for ( i = 0; i < nnames; i++ )
- {
- if ( FT_Get_Sfnt_Name( valid->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 valid )
- {
- 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 ), valid );
-
- {
- FT_Byte nGlyphInClass[256];
- FT_Byte classID;
- FT_UShort i;
-
-
- ft_memset( nGlyphInClass, 0, 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 valid )
- {
- 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 valid )
- {
- 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 )
- {
- if ( valid->root->level >= FT_VALIDATE_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 ));
- if ( valid->root->level >= FT_VALIDATE_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 ));
- if ( valid->root->level >= FT_VALIDATE_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;
-
- default:
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_FORMAT;
- goto Exit;
- }
-
- if ( NULL != valid->statetable.entry_validate_func )
- valid->statetable.entry_validate_func( state,
- flags,
- glyphOffset,
- statetable_table,
- statetable_limit,
- valid );
- }
-
- Exit:
- *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 valid )
- {
- 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, valid );
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_StateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 ( valid->statetable.optdata_load_func != NULL )
- valid->statetable.optdata_load_func( p, limit, valid );
-
- if ( valid->statetable.subtable_setup_func != NULL)
- setup_func = valid->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,
- valid );
-
- GXV_TRACE(( "StateTable Subtables\n" ));
-
- if ( classTable != 0 )
- gxv_ClassTable_validate( table + classTable,
- &classTable_length,
- stateSize,
- &maxClassID,
- valid );
- else
- maxClassID = (FT_Byte)( stateSize - 1 );
-
- if ( stateArray != 0 )
- gxv_StateArray_validate( table + stateArray,
- &stateArray_length,
- maxClassID,
- stateSize,
- &maxState,
- &maxEntry,
- valid );
- else
- {
- maxState = 1; /* 0:start of text, 1:start of line are predefined */
- 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,
- valid );
-
- 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 valid )
- {
- 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, 4, table_size, valid );
- }
-
-
- static void
- gxv_XClassTable_lookupval_validate( FT_UShort glyph,
- GXV_LookupValueDesc value,
- GXV_Validator valid )
- {
- FT_UNUSED( glyph );
-
- if ( value.u >= valid->xstatetable.nClasses )
- FT_INVALID_DATA;
- if ( value.u > valid->xstatetable.maxClassID )
- valid->xstatetable.maxClassID = value.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_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value.u +
- relative_gindex * sizeof ( FT_UShort ) );
-
- p = valid->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 valid )
- {
- 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 = 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 valid )
- {
- 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 ));
- if ( valid->root->level >= FT_VALIDATE_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 ));
- if ( valid->root->level >= FT_VALIDATE_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:
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_FORMAT;
- goto Exit;
- }
-
- if ( NULL != valid->xstatetable.entry_validate_func )
- valid->xstatetable.entry_validate_func( state,
- flags,
- glyphOffset,
- xstatetable_table,
- xstatetable_limit,
- valid );
- }
-
- Exit:
- *length_p = p - table;
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_XStateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- /* 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 );
- valid->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", valid->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 ( valid->xstatetable.nClasses > 0xFFFFU )
- FT_INVALID_DATA;
-
- GXV_TRACE(( "StateTable Subtables\n" ));
-
- if ( valid->xstatetable.optdata_load_func != NULL )
- valid->xstatetable.optdata_load_func( p, limit, valid );
-
- if ( valid->xstatetable.subtable_setup_func != NULL )
- setup_func = valid->xstatetable.subtable_setup_func;
- else
- setup_func = gxv_XStateTable_subtable_setup;
-
- setup_func( limit - table,
- classTable,
- stateArray,
- entryTable,
- &classTable_length,
- &stateArray_length,
- &entryTable_length,
- valid );
-
- if ( classTable != 0 )
- {
- valid->xstatetable.maxClassID = 0;
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_XClassTable_lookupval_validate;
- valid->lookupfmt4_trans = gxv_XClassTable_lookupfmt4_transit;
- gxv_LookupTable_validate( table + classTable,
- table + classTable + classTable_length,
- valid );
- if ( valid->subtable_length < classTable_length )
- classTable_length = valid->subtable_length;
- }
- else
- {
- /* XXX: check range? */
- valid->xstatetable.maxClassID =
- (FT_UShort)( valid->xstatetable.nClasses - 1 );
- }
-
- if ( stateArray != 0 )
- gxv_XStateArray_validate( table + stateArray,
- &stateArray_length,
- valid->xstatetable.maxClassID,
- valid->xstatetable.nClasses,
- &maxState,
- &maxEntry,
- valid );
- else
- {
- maxState = 1; /* 0:start of text, 1:start of line are predefined */
- maxEntry = 0;
- }
-
- if ( maxEntry > 0 && entryTable == 0 )
- FT_INVALID_OFFSET;
-
- if ( entryTable != 0 )
- gxv_XEntryTable_validate( table + entryTable,
- &entryTable_length,
- maxEntry,
- stateArray_length,
- valid->xstatetable.maxClassID,
- table,
- limit,
- valid );
-
- 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 valid )
- {
- 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 ) )
- {
- 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 ));
- FT_INVALID_OFFSET;
- }
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvcommn.h b/Build/source/libs/freetype2/src/gxvalid/gxvcommn.h
deleted file mode 100644
index 0128eca79e3..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvcommn.h
+++ /dev/null
@@ -1,560 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvcommn.h */
-/* */
-/* TrueTypeGX/AAT common tables validation (specification). */
-/* */
-/* Copyright 2004, 2005 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
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** VALIDATION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- typedef struct GXV_ValidatorRec_* GXV_Validator;
-
-
-#define DUMMY_LIMIT 0
-
- typedef void
- (*GXV_Validate_Func)( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
-
- /* ====================== LookupTable Validator ======================== */
-
- typedef union GXV_LookupValueDesc_
- {
- FT_UShort u;
- FT_Short s;
-
- } GXV_LookupValueDesc;
-
- 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_LookupValueDesc value,
- GXV_Validator valid );
-
- typedef GXV_LookupValueDesc
- (*GXV_Lookup_Fmt4_Transit_Func)( FT_UShort relative_gindex,
- GXV_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid );
-
-
- /* ====================== 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 ) \
- ( valid->table.entry_glyphoffset_fmt )
-
-#define GXV_GLYPHOFFSET_SIZE( table ) \
- ( valid->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 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 valid );
-
- typedef void
- (*GXV_StateTable_Entry_Validate_Func)(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes statetable_table,
- FT_Bytes statetable_limit,
- GXV_Validator valid );
-
- typedef void
- (*GXV_StateTable_OptData_Load_Func)( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- 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 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 valid );
-
- typedef void
- (*GXV_XStateTable_Entry_Validate_Func)(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes xstatetable_table,
- FT_Bytes xstatetable_limit,
- GXV_Validator valid );
-
-
- 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;
-
- 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)valid->table_data )->field )
-
-#undef FT_INVALID_
-#define FT_INVALID_( _prefix, _error ) \
- ft_validator_error( valid->root, _prefix ## _error )
-
-#define GXV_LIMIT_CHECK( _count ) \
- FT_BEGIN_STMNT \
- if ( p + _count > ( limit? limit : valid->root->limit ) ) \
- FT_INVALID_TOO_SHORT; \
- FT_END_STMNT
-
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
-#define GXV_INIT valid->debug_indent = 0
-
-#define GXV_NAME_ENTER( name ) \
- FT_BEGIN_STMNT \
- valid->debug_indent += 2; \
- FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \
- FT_TRACE4(( "%s table\n", name )); \
- FT_END_STMNT
-
-#define GXV_EXIT valid->debug_indent -= 2
-
-#define GXV_TRACE( s ) \
- FT_BEGIN_STMNT \
- FT_TRACE4(( "%*.s", valid->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 ( 0 != ( (a) % 4 ) ) \
- 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 valid );
-
- FT_LOCAL( void )
- gxv_LookupTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** Glyph ID *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( FT_Int )
- gxv_glyphid_validate( FT_UShort gid,
- GXV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** CONTROL POINT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- gxv_ctlPoint_validate( FT_UShort gid,
- FT_Short ctl_point,
- GXV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SFNT NAME *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- gxv_sfntName_validate( FT_UShort name_index,
- FT_UShort min_index,
- FT_UShort max_index,
- GXV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 valid );
-
- 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 valid );
-
- FT_LOCAL( void )
- gxv_StateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_XStateTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 valid );
-
- FT_LOCAL( void )
- gxv_array_getlimits_ushort( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort* min,
- FT_UShort* max,
- GXV_Validator valid );
-
- 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 valid );
-
- 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 valid);
-
-
-#define GXV_SUBTABLE_OFFSET_CHECK( _offset ) \
- FT_BEGIN_STMNT \
- if ( (_offset) > valid->subtable_length ) \
- FT_INVALID_OFFSET; \
- FT_END_STMNT
-
-#define GXV_SUBTABLE_LIMIT_CHECK( _count ) \
- FT_BEGIN_STMNT \
- if ( ( p + (_count) - valid->subtable_start ) > \
- valid->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 valid );
-
-
-#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/Build/source/libs/freetype2/src/gxvalid/gxverror.h b/Build/source/libs/freetype2/src/gxvalid/gxverror.h
deleted file mode 100644
index 01961992273..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxverror.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxverror.h */
-/* */
-/* TrueTypeGX/AAT validation module error codes (specification only). */
-/* */
-/* Copyright 2004, 2005 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__
-
-#define FT_ERR_PREFIX GXV_Err_
-#define FT_ERR_BASE FT_Mod_Err_GXV
-
-#define FT_KEEP_ERR_PREFIX
-
-#include FT_ERRORS_H
-
-#endif /* __GXVERROR_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvfeat.c b/Build/source/libs/freetype2/src/gxvalid/gxvfeat.c
deleted file mode 100644
index ad30a764c64..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvfeat.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvfeat.c */
-/* */
-/* TrueTypeGX/AAT feat table validation (body). */
-/* */
-/* Copyright 2004, 2005, 2008 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 valid )
- {
- 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 ));
- if ( valid->root->level == FT_VALIDATE_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 ));
- if ( valid->root->level == FT_VALIDATE_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 ( valid->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 ( valid->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 ( valid->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 valid )
- {
- 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,
- valid );
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_feat_setting_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_Bool exclusive,
- GXV_Validator valid )
- {
- 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 % 2 ) == 0 )
- FT_INVALID_DATA;
-
- gxv_feat_name_index_validate( p, limit, valid );
-
- GXV_FEAT_DATA( setting ) = setting;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_feat_name_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_UInt reserved_size = GXV_FEAT_DATA( reserved_size );
-
- FT_UShort feature;
- FT_UShort nSettings;
- FT_UInt 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 ( valid->root->level == FT_VALIDATE_PARANOID &&
- ( featureFlags & GXV_FEAT_MASK_UNUSED ) == 0 )
- 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, valid );
-
- gxv_feat_name_index_validate( p, limit, valid );
-
- p = valid->root->base + settingTable;
- for ( last_setting = -1, i = 0; i < nSettings; i++ )
- {
- gxv_feat_setting_validate( p, limit, exclusive, valid );
-
- if ( valid->root->level == FT_VALIDATE_PARANOID &&
- (FT_Int)GXV_FEAT_DATA( setting ) <= last_setting )
- 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 validrec;
- GXV_Validator valid = &validrec;
-
- 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;
-
-
- valid->root = ftvalid;
- valid->table_data = feat;
- valid->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 ( valid->root->level != FT_VALIDATE_PARANOID )
- 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, valid );
-
- if ( valid->root->level == FT_VALIDATE_PARANOID &&
- (FT_Int)GXV_FEAT_DATA( feature ) <= last_feature )
- FT_INVALID_FORMAT;
-
- last_feature = GXV_FEAT_DATA( feature );
- p += 2 + 2 + 4 + 2 + 2;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvfeat.h b/Build/source/libs/freetype2/src/gxvalid/gxvfeat.h
deleted file mode 100644
index 049d23a0b92..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvfeat.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvfeat.h */
-/* */
-/* TrueTypeGX/AAT feat table validation (specification). */
-/* */
-/* Copyright 2004, 2005 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/Build/source/libs/freetype2/src/gxvalid/gxvfgen.c b/Build/source/libs/freetype2/src/gxvalid/gxvfgen.c
deleted file mode 100644
index e48778a2a15..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvfgen.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxfgen.c */
-/* */
-/* Generate feature registry data for gxv `feat' validator. */
-/* This program is derived from gxfeatreg.c in gxlayout. */
-/* */
-/* Copyright 2004, 2005, 2006 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/Build/source/libs/freetype2/src/gxvalid/gxvjust.c b/Build/source/libs/freetype2/src/gxvalid/gxvjust.c
deleted file mode 100644
index 29bf840b57a..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvjust.c
+++ /dev/null
@@ -1,630 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvjust.c */
-/* */
-/* TrueTypeGX/AAT just table validation (body). */
-/* */
-/* Copyright 2005 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:
- * http://developer.apple.com/fonts/TTRefMan/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 )
-
-
- static void
- gxv_just_wdp_entry_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_ULong justClass;
- FT_Fixed beforeGrowLimit;
- FT_Fixed beforeShrinkGrowLimit;
- FT_Fixed afterGrowLimit;
- FT_Fixed afterShrinkGrowLimit;
- FT_UShort growFlags;
- FT_UShort shrinkFlags;
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 + 4 + 2 + 2 );
- justClass = FT_NEXT_ULONG( p );
- 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 );
-
- /* TODO: decode flags for human readability */
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_just_wdc_entry_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- p += valid->subtable_length;
- }
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_just_widthDeltaClusters_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- p += valid->subtable_length;
- }
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_actSubrecord_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
-
- FT_Fixed lowerLimit;
- FT_Fixed upperLimit;
-
- FT_UShort order;
- FT_UShort decomposedCount;
-
- FT_UInt i;
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 );
- lowerLimit = FT_NEXT_ULONG( p );
- upperLimit = FT_NEXT_ULONG( p );
- order = FT_NEXT_USHORT( p );
- decomposedCount = FT_NEXT_USHORT( p );
-
- for ( i = 0; i < decomposedCount; i++ )
- {
- FT_UShort glyphs;
-
-
- GXV_LIMIT_CHECK( 2 );
- glyphs = FT_NEXT_USHORT( p );
- }
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_just_actSubrecord_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_UShort addGlyph;
-
-
- GXV_LIMIT_CHECK( 2 );
- addGlyph = FT_NEXT_USHORT( p );
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_just_actSubrecord_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_Fixed substThreshhold; /* Apple misspelled "Threshhold" */
- FT_UShort addGlyph;
- FT_UShort substGlyph;
-
-
- GXV_LIMIT_CHECK( 4 + 2 + 2 );
- substThreshhold = FT_NEXT_ULONG( p );
- addGlyph = FT_NEXT_USHORT( p );
- substGlyph = FT_NEXT_USHORT( p );
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_just_actSubrecord_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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_ULONG( p );
- noStretchValue = FT_NEXT_ULONG( p );
- maximumLimit = FT_NEXT_ULONG( p );
-
- valid->subtable_length = p - table;
- }
-
-
- static void
- gxv_just_actSubrecord_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 );
-
- valid->subtable_length = p - table;
- }
-
-
- /* parse single actSubrecord */
- static void
- gxv_just_actSubrecord_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 );
-
- if ( actionType == 0 )
- gxv_just_actSubrecord_type0_validate( p, limit, valid );
- else if ( actionType == 1 )
- gxv_just_actSubrecord_type1_validate( p, limit, valid );
- else if ( actionType == 2 )
- gxv_just_actSubrecord_type2_validate( p, limit, valid );
- else if ( actionType == 3 )
- ; /* Stretch glyph action: no actionData */
- else if ( actionType == 4 )
- gxv_just_actSubrecord_type4_validate( p, limit, valid );
- else if ( actionType == 5 )
- gxv_just_actSubrecord_type5_validate( p, limit, valid );
- else
- FT_INVALID_DATA;
-
- valid->subtable_length = actionLength;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_pcActionRecord_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- p += valid->subtable_length;
- }
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_pcTable_LookupValue_entry_validate( FT_UShort glyph,
- GXV_LookupValueDesc value,
- GXV_Validator valid )
- {
- FT_UNUSED( glyph );
-
- if ( value.u > GXV_JUST_DATA( pc_offset_max ) )
- GXV_JUST_DATA( pc_offset_max ) = value.u;
- if ( value.u < GXV_JUST_DATA( pc_offset_max ) )
- GXV_JUST_DATA( pc_offset_min ) = value.u;
- }
-
-
- static void
- gxv_just_pcLookupTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "just pcLookupTable" );
- GXV_JUST_DATA( pc_offset_max ) = 0x0000;
- GXV_JUST_DATA( pc_offset_min ) = 0xFFFFU;
-
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_just_pcTable_LookupValue_entry_validate;
-
- gxv_LookupTable_validate( p, limit, valid );
-
- /* subtable_length is set by gxv_LookupTable_validate() */
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_postcompTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "just postcompTable" );
-
- gxv_just_pcLookupTable_validate( p, limit, valid );
- p += valid->subtable_length;
-
- gxv_just_pcActionRecord_validate( p, limit, valid );
- p += valid->subtable_length;
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_classTable_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_UShort setMark;
- FT_UShort dontAdvance;
- FT_UShort markClass;
- FT_UShort currentClass;
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset );
- FT_UNUSED( table );
- FT_UNUSED( limit );
- FT_UNUSED( valid );
-
-
- setMark = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- markClass = (FT_UShort)( ( flags >> 7 ) & 0x7F );
- currentClass = (FT_UShort)( flags & 0x7F );
-
- /* TODO: validate markClass & currentClass */
- }
-
-
- static void
- gxv_just_justClassTable_validate ( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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,
- ( 0x4000 & coverage ) == 0 ? "ascending" : "descending" ));
-
- valid->statetable.optdata = NULL;
- valid->statetable.optdata_load_func = NULL;
- valid->statetable.subtable_setup_func = NULL;
- valid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
- valid->statetable.entry_validate_func =
- gxv_just_classTable_entry_validate;
-
- gxv_StateTable_validate( p, table + length, valid );
-
- /* subtable_length is set by gxv_LookupTable_validate() */
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_just_wdcTable_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueDesc value,
- GXV_Validator valid )
- {
- FT_UNUSED( glyph );
-
- if ( value.u > GXV_JUST_DATA( wdc_offset_max ) )
- GXV_JUST_DATA( wdc_offset_max ) = value.u;
- if ( value.u < GXV_JUST_DATA( wdc_offset_min ) )
- GXV_JUST_DATA( wdc_offset_min ) = value.u;
- }
-
-
- static void
- gxv_just_justData_lookuptable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
-
-
- GXV_JUST_DATA( wdc_offset_max ) = 0x0000;
- GXV_JUST_DATA( wdc_offset_min ) = 0xFFFFU;
-
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_just_wdcTable_LookupValue_validate;
-
- gxv_LookupTable_validate( p, limit, valid );
-
- /* 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 valid )
- {
- /*
- * 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, valid );
- gxv_odtect_add_range( p, valid->subtable_length,
- "just_LookupTable", odtect );
-
- if ( wdcTableOffset )
- {
- gxv_just_widthDeltaClusters_validate(
- valid->root->base + wdcTableOffset, limit, valid );
- gxv_odtect_add_range( valid->root->base + wdcTableOffset,
- valid->subtable_length, "just_wdcTable", odtect );
- }
-
- if ( pcTableOffset )
- {
- gxv_just_postcompTable_validate( valid->root->base + pcTableOffset,
- limit, valid );
- gxv_odtect_add_range( valid->root->base + pcTableOffset,
- valid->subtable_length, "just_pcTable", odtect );
- }
-
- if ( justClassTableOffset )
- {
- gxv_just_justClassTable_validate(
- valid->root->base + justClassTableOffset, limit, valid );
- gxv_odtect_add_range( valid->root->base + justClassTableOffset,
- valid->subtable_length, "just_justClassTable",
- odtect );
- }
-
- gxv_odtect_validate( odtect, valid );
-
- 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;
- FT_UInt table_size;
-
- GXV_ValidatorRec validrec;
- GXV_Validator valid = &validrec;
- 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 );
-
- valid->root = ftvalid;
- valid->table_data = just;
- valid->face = face;
-
- FT_TRACE3(( "validating `just' table\n" ));
- GXV_INIT;
-
- limit = valid->root->limit;
- table_size = limit - table;
-
- 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, 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, valid );
- gxv_odtect_add_range( table + horizOffset, valid->subtable_length,
- "horizJustData", odtect );
- }
-
- if ( 0 < vertOffset )
- {
- gxv_just_justData_validate( table + vertOffset, limit, valid );
- gxv_odtect_add_range( table + vertOffset, valid->subtable_length,
- "vertJustData", odtect );
- }
-
- gxv_odtect_validate( odtect, valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvkern.c b/Build/source/libs/freetype2/src/gxvalid/gxvkern.c
deleted file mode 100644
index bfb405f65ba..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvkern.c
+++ /dev/null
@@ -1,876 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvkern.c */
-/* */
-/* TrueTypeGX/AAT kern table validation (body). */
-/* */
-/* Copyright 2004, 2005, 2006, 2007 */
-/* 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( valid ) \
- ( KERN_VERSION_CLASSIC == GXV_KERN_DATA( version ) )
-#define KERN_IS_NEW( valid ) \
- ( KERN_VERSION_NEW == GXV_KERN_DATA( version ) )
-
-#define KERN_DIALECT( valid ) \
- GXV_KERN_DATA( dialect_request )
-#define KERN_ALLOWS_MS( valid ) \
- ( KERN_DIALECT( valid ) & KERN_DIALECT_MS )
-#define KERN_ALLOWS_APPLE( valid ) \
- ( KERN_DIALECT( valid ) & KERN_DIALECT_APPLE )
-
-#define GXV_KERN_HEADER_SIZE ( KERN_IS_NEW( valid ) ? 8 : 4 )
-#define GXV_KERN_SUBTABLE_HEADER_SIZE ( KERN_IS_NEW( valid ) ? 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 valid )
- {
- 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;
- FT_Short kernValue;
-
-
- /* left */
- gid_left = FT_NEXT_USHORT( p );
- gxv_glyphid_validate( gid_left, valid );
-
- /* right */
- gid_right = FT_NEXT_USHORT( p );
- gxv_glyphid_validate( gid_right, valid );
-
- /* 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 */
- kernValue = FT_NEXT_SHORT( p );
- }
-
- GXV_EXIT;
- }
-
- static void
- gxv_kern_subtable_fmt0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, valid );
- p += 2 + 2 + 2 + 2;
-
- gxv_kern_subtable_fmt0_pairs_validate( p, limit, nPairs, valid );
-
- 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 valid )
- {
- FT_Bytes p = table;
- GXV_kern_fmt1_StateOptRecData optdata =
- (GXV_kern_fmt1_StateOptRecData)valid->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 valid )
- {
- FT_UShort o[4];
- FT_UShort *l[4];
- FT_UShort buff[5];
-
- GXV_kern_fmt1_StateOptRecData optdata =
- (GXV_kern_fmt1_StateOptRecData)valid->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, valid );
- }
-
-
- /*
- * 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_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_UShort push;
- FT_UShort dontAdvance;
- FT_UShort valueOffset;
- FT_UShort kernAction;
- FT_UShort kernValue;
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset );
-
-
- push = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- valueOffset = (FT_UShort)( flags & 0x3FFF );
-
- {
- GXV_kern_fmt1_StateOptRecData vt_rec =
- (GXV_kern_fmt1_StateOptRecData)valid->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 );
- kernAction = FT_NEXT_USHORT( p );
- kernValue = FT_NEXT_USHORT( p );
- }
- }
-
-
- static void
- gxv_kern_subtable_fmt1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- GXV_kern_fmt1_StateOptRec vt_rec;
-
-
- GXV_NAME_ENTER( "kern subtable format 1" );
-
- valid->statetable.optdata =
- &vt_rec;
- valid->statetable.optdata_load_func =
- gxv_kern_subtable_fmt1_valueTable_load;
- valid->statetable.subtable_setup_func =
- gxv_kern_subtable_fmt1_subtable_setup;
- valid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_NONE;
- valid->statetable.entry_validate_func =
- gxv_kern_subtable_fmt1_entry_validate;
-
- gxv_StateTable_validate( p, limit, valid );
-
- 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 valid )
- {
- 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, valid );
- gxv_glyphid_validate( (FT_UShort)( firstGlyph + nGlyphs - 1 ), valid );
-
- gxv_array_getlimits_ushort( p, p + ( 2 * nGlyphs ),
- &( GXV_KERN_FMT2_DATA( offset_min[spec] ) ),
- &( GXV_KERN_FMT2_DATA( offset_max[spec] ) ),
- valid );
-
- 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 valid )
- {
- 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, valid );
-
- gxv_kern_subtable_fmt2_clstbl_validate( table + rightOffsetTable, limit,
- GXV_KERN_CLS_R, valid );
-
- 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, valid );
-
- GXV_EXIT;
- }
-
-
- /* ============================= format 3 ============================== */
-
- static void
- gxv_kern_subtable_fmt3_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 ( valid->face->num_glyphs != glyphCount )
- {
- GXV_TRACE(( "maxGID=%d, but glyphCount=%d\n",
- valid->face->num_glyphs, glyphCount ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_GLYPH_ID;
- }
-
- /*
- * 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, valid );
- p += valid->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, valid );
- p += valid->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;
- }
- }
- }
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
- static FT_Bool
- gxv_kern_coverage_new_apple_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator valid )
- {
- /* new Apple-dialect */
- FT_Bool kernVertical;
- FT_Bool kernCrossStream;
- FT_Bool kernVariation;
-
- FT_UNUSED( valid );
-
-
- /* reserved bits = 0 */
- if ( coverage & 0x1FFC )
- return 0;
-
- kernVertical = FT_BOOL( ( coverage >> 15 ) & 1 );
- kernCrossStream = FT_BOOL( ( coverage >> 14 ) & 1 );
- kernVariation = FT_BOOL( ( coverage >> 13 ) & 1 );
-
- *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 1;
- }
-
-
- static FT_Bool
- gxv_kern_coverage_classic_apple_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator valid )
- {
- /* classic Apple-dialect */
- FT_Bool horizontal;
- FT_Bool cross_stream;
-
-
- /* check expected flags, but don't check if MS-dialect is impossible */
- if ( !( coverage & 0xFD00 ) && KERN_ALLOWS_MS( valid ) )
- return 0;
-
- /* reserved bits = 0 */
- if ( coverage & 0x02FC )
- return 0;
-
- horizontal = FT_BOOL( ( coverage >> 15 ) & 1 );
- cross_stream = FT_BOOL( ( coverage >> 13 ) & 1 );
-
- *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 0;
-
- GXV_TRACE(( "kerning values in Apple format subtable are ignored\n" ));
-
- return 1;
- }
-
-
- static FT_Bool
- gxv_kern_coverage_classic_microsoft_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator valid )
- {
- /* classic Microsoft-dialect */
- FT_Bool horizontal;
- FT_Bool minimum;
- FT_Bool cross_stream;
- FT_Bool override;
-
- FT_UNUSED( valid );
-
-
- /* reserved bits = 0 */
- if ( coverage & 0xFDF0 )
- return 0;
-
- horizontal = FT_BOOL( coverage & 1 );
- minimum = FT_BOOL( ( coverage >> 1 ) & 1 );
- cross_stream = FT_BOOL( ( coverage >> 2 ) & 1 );
- override = FT_BOOL( ( coverage >> 3 ) & 1 );
-
- *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 1;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MAIN *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static GXV_kern_Dialect
- gxv_kern_coverage_validate( FT_UShort coverage,
- FT_UShort* format,
- GXV_Validator valid )
- {
- GXV_kern_Dialect result = KERN_DIALECT_UNKNOWN;
-
-
- GXV_NAME_ENTER( "validating coverage" );
-
- GXV_TRACE(( "interprete coverage 0x%04x by Apple style\n", coverage ));
-
- if ( KERN_IS_NEW( valid ) )
- {
- if ( gxv_kern_coverage_new_apple_validate( coverage,
- format,
- valid ) )
- {
- result = KERN_DIALECT_APPLE;
- goto Exit;
- }
- }
-
- if ( KERN_IS_CLASSIC( valid ) && KERN_ALLOWS_APPLE( valid ) )
- {
- if ( gxv_kern_coverage_classic_apple_validate( coverage,
- format,
- valid ) )
- {
- result = KERN_DIALECT_APPLE;
- goto Exit;
- }
- }
-
- if ( KERN_IS_CLASSIC( valid ) && KERN_ALLOWS_MS( valid ) )
- {
- if ( gxv_kern_coverage_classic_microsoft_validate( coverage,
- format,
- valid ) )
- {
- result = KERN_DIALECT_MS;
- goto Exit;
- }
- }
-
- GXV_TRACE(( "cannot interprete coverage, broken kern subtable\n" ));
-
- Exit:
- GXV_EXIT;
- return result;
- }
-
-
- static void
- gxv_kern_subtable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_UShort version = 0; /* MS only: subtable version, unused */
- FT_ULong length; /* MS: 16bit, Apple: 32bit*/
- FT_UShort coverage;
- FT_UShort tupleIndex = 0; /* Apple only */
- 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, valid ) )
- {
- case KERN_DIALECT_MS:
- version = u16[0];
- length = u16[1];
- tupleIndex = 0;
- GXV_TRACE(( "Subtable version = %d\n", version ));
- GXV_TRACE(( "Subtable length = %d\n", length ));
- break;
-
- case KERN_DIALECT_APPLE:
- version = 0;
- length = ( u16[0] << 16 ) + u16[1];
- tupleIndex = 0;
- GXV_TRACE(( "Subtable length = %d\n", length ));
-
- if ( KERN_IS_NEW( valid ) )
- {
- GXV_LIMIT_CHECK( 2 );
- tupleIndex = FT_NEXT_USHORT( p );
- 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, valid );
- else if ( format == 1 )
- gxv_kern_subtable_fmt1_validate( table, table + length, valid );
- else if ( format == 2 )
- gxv_kern_subtable_fmt2_validate( table, table + length, valid );
- else if ( format == 3 )
- gxv_kern_subtable_fmt3_validate( table, table + length, valid );
- else
- FT_INVALID_DATA;
-
- Exit:
- valid->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 validrec;
- GXV_Validator valid = &validrec;
-
- GXV_kern_DataRec kernrec;
- GXV_kern_Data kern = &kernrec;
-
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- FT_ULong nTables = 0;
- FT_UInt i;
-
-
- valid->root = ftvalid;
- valid->table_data = kern;
- valid->face = face;
-
- FT_TRACE3(( "validating `kern' table\n" ));
- GXV_INIT;
- KERN_DIALECT( valid ) = 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( valid ) )
- {
- GXV_LIMIT_CHECK( 2 );
- nTables = FT_NEXT_USHORT( p );
- }
- else if ( KERN_IS_NEW( valid ) )
- {
- 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, valid );
- p += valid->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/Build/source/libs/freetype2/src/gxvalid/gxvlcar.c b/Build/source/libs/freetype2/src/gxvalid/gxvlcar.c
deleted file mode 100644
index 48821ea8796..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvlcar.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvlcar.c */
-/* */
-/* TrueTypeGX/AAT lcar table validation (body). */
-/* */
-/* Copyright 2004, 2005 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_UShort partial,
- FT_UShort glyph,
- GXV_Validator valid )
- {
- GXV_NAME_ENTER( "partial" );
-
- if ( GXV_LCAR_DATA( format ) != 1 )
- goto Exit;
-
- gxv_ctlPoint_validate( glyph, partial, valid );
-
- Exit:
- GXV_EXIT;
- }
-
-
- static void
- gxv_lcar_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueDesc value,
- GXV_Validator valid )
- {
- FT_Bytes p = valid->root->base + value.u;
- FT_Bytes limit = valid->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, valid );
- }
-
- GXV_EXIT;
- }
-
-
- /*
- +------ lcar --------------------+
- | |
- | +===============+ |
- | | looup 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_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- FT_UNUSED( lookuptbl_limit );
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value.u +
- relative_gindex * sizeof ( FT_UShort ) );
- p = valid->root->base + offset;
- limit = valid->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 validrec;
- GXV_Validator valid = &validrec;
-
- GXV_lcar_DataRec lcarrec;
- GXV_lcar_Data lcar = &lcarrec;
-
- FT_Fixed version;
-
-
- valid->root = ftvalid;
- valid->table_data = lcar;
- valid->face = face;
-
- FT_TRACE3(( "validating `lcar' table\n" ));
- GXV_INIT;
-
- GXV_LIMIT_CHECK( 4 + 2 );
- version = FT_NEXT_ULONG( p );
- GXV_LCAR_DATA( format ) = FT_NEXT_USHORT( p );
-
- if ( version != 0x00010000UL)
- FT_INVALID_FORMAT;
-
- if ( GXV_LCAR_DATA( format ) > 1 )
- FT_INVALID_FORMAT;
-
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_lcar_LookupValue_validate;
- valid->lookupfmt4_trans = gxv_lcar_LookupFmt4_transit;
- gxv_LookupTable_validate( p, limit, valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmod.c b/Build/source/libs/freetype2/src/gxvalid/gxvmod.c
deleted file mode 100644
index b2b16b1ff38..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmod.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmod.c */
-/* */
-/* FreeType's TrueTypeGX/AAT validation module implementation (body). */
-/* */
-/* Copyright 2004, 2005, 2006 */
-/* 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 ( error == GXV_Err_Table_Missing )
- return GXV_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 = GXV_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 = GXV_Err_Ok;
- 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
- };
-
-
- static
- const FT_Service_CKERNvalidateRec ckernvalid_interface =
- {
- classic_kern_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,
-
- 0, /* module-specific interface */
-
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) gxvalid_get_service
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmod.h b/Build/source/libs/freetype2/src/gxvalid/gxvmod.h
deleted file mode 100644
index 466584ef4fd..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmod.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmod.h */
-/* */
-/* FreeType's TrueTypeGX/AAT validation module implementation */
-/* (specification). */
-/* */
-/* Copyright 2004, 2005 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
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) gxv_module_class;
-
-
-FT_END_HEADER
-
-#endif /* __GXVMOD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmort.c b/Build/source/libs/freetype2/src/gxvalid/gxvmort.c
deleted file mode 100644
index 6fb71b92be4..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmort.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort.c */
-/* */
-/* TrueTypeGX/AAT mort table validation (body). */
-/* */
-/* Copyright 2005 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 valid )
- {
- 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 ));
- if ( valid->root->level >= FT_VALIDATE_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 ));
- if ( valid->root->level >= FT_VALIDATE_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 ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_DATA;
- }
- GXV_TRACE(( "\n" ));
- }
-
- /* TODO: enableFlags must be unique value in specified chain? */
- }
-
-
- /*
- * nFeatureFlags is typed to FT_UInt 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_UInt nFeatureFlags,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_UInt 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, valid );
- }
-
- if ( !IS_GXV_MORT_FEATURE_OFF( f ) )
- FT_INVALID_DATA;
-
- valid->subtable_length = p - table;
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_coverage_validate( FT_UShort coverage,
- GXV_Validator valid )
- {
- FT_UNUSED( valid );
-
- 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" ));
- }
-
-
- static void
- gxv_mort_subtables_validate( FT_Bytes table,
- FT_Bytes limit,
- FT_UShort nSubtables,
- GXV_Validator valid )
- {
- 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 */
-
- };
-
- GXV_Validate_Func func;
- FT_UShort i;
-
-
- GXV_NAME_ENTER( "subtables in a chain" );
-
- for ( i = 0; i < nSubtables; i++ )
- {
- FT_UShort length;
- FT_UShort coverage;
- FT_ULong subFeatureFlags;
- FT_UInt type;
- FT_UInt rest;
-
-
- GXV_LIMIT_CHECK( 2 + 2 + 4 );
- length = FT_NEXT_USHORT( p );
- coverage = FT_NEXT_USHORT( p );
- subFeatureFlags = FT_NEXT_ULONG( p );
-
- 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, valid );
-
- if ( type > 5 )
- FT_INVALID_FORMAT;
-
- func = fmt_funcs_table[type];
- if ( func == NULL )
- GXV_TRACE(( "morx type %d is reserved\n", type ));
-
- func( p, p + rest, valid );
-
- p += rest;
- }
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_mort_chain_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_ULong defaultFlags;
- FT_ULong chainLength;
- FT_UShort nFeatureFlags;
- FT_UShort nSubtables;
-
-
- GXV_NAME_ENTER( "mort chain header" );
-
- GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 );
- defaultFlags = FT_NEXT_ULONG( p );
- chainLength = FT_NEXT_ULONG( p );
- nFeatureFlags = FT_NEXT_USHORT( p );
- nSubtables = FT_NEXT_USHORT( p );
-
- gxv_mort_featurearray_validate( p, table + chainLength,
- nFeatureFlags, valid );
- p += valid->subtable_length;
- gxv_mort_subtables_validate( p, table + chainLength, nSubtables, valid );
- valid->subtable_length = chainLength;
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec validrec;
- GXV_Validator valid = &validrec;
- FT_Bytes p = table;
- FT_Bytes limit = 0;
- FT_ULong version;
- FT_ULong nChains;
- FT_ULong i;
-
-
- valid->root = ftvalid;
- valid->face = face;
- limit = valid->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, valid );
- p += valid->subtable_length;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmort.h b/Build/source/libs/freetype2/src/gxvalid/gxvmort.h
deleted file mode 100644
index 1d64e69c475..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmort.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort.h */
-/* */
-/* TrueTypeGX/AAT common definition for mort table (specification). */
-/* */
-/* Copyright 2004, 2005 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_UInt nFeatureFlags,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_mort_coverage_validate( FT_UShort coverage,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_mort_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
-
-#endif /* __GXVMORT_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmort0.c b/Build/source/libs/freetype2/src/gxvalid/gxvmort0.c
deleted file mode 100644
index 0902056c628..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmort0.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort0.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type0 (Indic Script Rearrangement) subtable. */
-/* */
-/* Copyright 2005 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_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 ); /* 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.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 ( 0 < reserved )
- {
- GXV_TRACE(( " non-zero bits found in reserved range\n" ));
- FT_INVALID_DATA;
- }
- else
- GXV_TRACE(( "\n" ));
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type0_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER(
- "mort chain subtable type0 (Indic-Script Rearrangement)" );
-
- GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE );
-
- valid->statetable.optdata = NULL;
- valid->statetable.optdata_load_func = NULL;
- valid->statetable.subtable_setup_func = NULL;
- valid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
- valid->statetable.entry_validate_func =
- gxv_mort_subtable_type0_entry_validate;
-
- gxv_StateTable_validate( p, limit, valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmort1.c b/Build/source/libs/freetype2/src/gxvalid/gxvmort1.c
deleted file mode 100644
index 711bbd0baa6..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmort1.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort1.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type1 (Contextual Substitution) subtable. */
-/* */
-/* Copyright 2005, 2007 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 valid )
- {
- FT_Bytes p = table;
-
- GXV_mort_subtable_type1_StateOptRecData optdata =
- (GXV_mort_subtable_type1_StateOptRecData)valid->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 valid )
- {
- FT_UShort o[4];
- FT_UShort *l[4];
- FT_UShort buff[5];
-
- GXV_mort_subtable_type1_StateOptRecData optdata =
- (GXV_mort_subtable_type1_StateOptRecData)valid->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, valid );
- }
-
-
- static void
- gxv_mort_subtable_type1_offset_to_subst_validate(
- FT_Short wordOffset,
- const FT_String* tag,
- FT_Byte state,
- GXV_Validator valid )
- {
- FT_UShort substTable;
- FT_UShort substTable_limit;
- FT_UShort min_gid;
- FT_UShort max_gid;
-
- FT_UNUSED( tag );
- FT_UNUSED( state );
-
-
- substTable =
- ((GXV_mort_subtable_type1_StateOptRec *)
- (valid->statetable.optdata))->substitutionTable;
- substTable_limit =
- (FT_UShort)( substTable +
- ((GXV_mort_subtable_type1_StateOptRec *)
- (valid->statetable.optdata))->substitutionTable_length );
-
- min_gid = (FT_UShort)( ( substTable - wordOffset * 2 ) / 2 );
- max_gid = (FT_UShort)( ( substTable_limit - wordOffset * 2 ) / 2 );
- max_gid = (FT_UShort)( FT_MAX( max_gid, valid->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_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_UShort setMark;
- FT_UShort dontAdvance;
- FT_UShort reserved;
- FT_Short markOffset;
- FT_Short currentOffset;
-
- FT_UNUSED( table );
- FT_UNUSED( limit );
-
-
- setMark = (FT_UShort)( flags >> 15 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- reserved = (FT_Short)( flags & 0x3FFF );
-
- markOffset = (FT_Short)( glyphOffset.ul >> 16 );
- currentOffset = (FT_Short)( glyphOffset.ul );
-
- if ( 0 < reserved )
- {
- GXV_TRACE(( " non-zero bits found in reserved range\n" ));
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_DATA;
- }
-
- gxv_mort_subtable_type1_offset_to_subst_validate( markOffset,
- "markOffset",
- state,
- valid );
-
- gxv_mort_subtable_type1_offset_to_subst_validate( currentOffset,
- "currentOffset",
- state,
- valid );
- }
-
-
- static void
- gxv_mort_subtable_type1_substTable_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_UShort num_gids = (FT_UShort)(
- ((GXV_mort_subtable_type1_StateOptRec *)
- (valid->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 > valid->face->num_glyphs )
- {
- GXV_TRACE(( "substTable include too large gid[%d]=%d >"
- " max defined gid #%d\n",
- i, dst_gid, valid->face->num_glyphs ));
- if ( valid->root->level >= FT_VALIDATE_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 valid )
- {
- 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 );
-
- valid->statetable.optdata =
- &st_rec;
- valid->statetable.optdata_load_func =
- gxv_mort_subtable_type1_substitutionTable_load;
- valid->statetable.subtable_setup_func =
- gxv_mort_subtable_type1_subtable_setup;
- valid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- valid->statetable.entry_validate_func =
-
- gxv_mort_subtable_type1_entry_validate;
- gxv_StateTable_validate( p, limit, valid );
-
- gxv_mort_subtable_type1_substTable_validate(
- table + st_rec.substitutionTable,
- table + st_rec.substitutionTable + st_rec.substitutionTable_length,
- valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmort2.c b/Build/source/libs/freetype2/src/gxvalid/gxvmort2.c
deleted file mode 100644
index f19d15dab5d..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmort2.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort2.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type2 (Ligature Substitution) subtable. */
-/* */
-/* Copyright 2005 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 valid )
- {
- FT_Bytes p = table;
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)valid->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 valid )
- {
- FT_UShort o[6];
- FT_UShort *l[6];
- FT_UShort buff[7];
-
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)valid->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, valid );
-
- 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 valid )
- {
- /* access ligActionTable */
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)valid->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 */
- if ( valid->root->level >= FT_VALIDATE_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 */
- if ( valid->root->level >= FT_VALIDATE_PARANOID )
- FT_INVALID_OFFSET;
- }
- else
- {
- /* validate entry in ligActionTable */
- FT_ULong lig_action;
- FT_UShort last;
- FT_UShort store;
- FT_ULong offset;
-
-
- lig_action = FT_NEXT_ULONG( p );
- last = (FT_UShort)( ( lig_action >> 31 ) & 1 );
- store = (FT_UShort)( ( lig_action >> 30 ) & 1 );
-
- offset = lig_action & 0x3FFFFFFFUL;
- }
- }
-
-
- static void
- gxv_mort_subtable_type2_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_UShort setComponent;
- FT_UShort dontAdvance;
- FT_UShort offset;
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset );
- FT_UNUSED( limit );
-
-
- setComponent = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
-
- offset = (FT_UShort)( flags & 0x3FFFU );
-
- if ( 0 < offset )
- gxv_mort_subtable_type2_ligActionOffset_validate( table, offset,
- valid );
- }
-
-
- static void
- gxv_mort_subtable_type2_ligatureTable_validate( FT_Bytes table,
- GXV_Validator valid )
- {
- GXV_mort_subtable_type2_StateOptRecData optdata =
- (GXV_mort_subtable_type2_StateOptRecData)valid->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 );
- }
- }
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 );
-
- valid->statetable.optdata =
- &lig_rec;
- valid->statetable.optdata_load_func =
- gxv_mort_subtable_type2_opttable_load;
- valid->statetable.subtable_setup_func =
- gxv_mort_subtable_type2_subtable_setup;
- valid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_NONE;
- valid->statetable.entry_validate_func =
- gxv_mort_subtable_type2_entry_validate;
-
- gxv_StateTable_validate( p, limit, valid );
-
- p += valid->subtable_length;
- gxv_mort_subtable_type2_ligatureTable_validate( table, valid );
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmort4.c b/Build/source/libs/freetype2/src/gxvalid/gxvmort4.c
deleted file mode 100644
index a04bc1efaf4..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmort4.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort4.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type4 (Non-Contextual Glyph Substitution) subtable. */
-/* */
-/* Copyright 2005 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_LookupValueDesc value,
- GXV_Validator valid )
- {
- FT_UNUSED( glyph );
-
- gxv_glyphid_validate( value.u, valid );
- }
-
- /*
- +===============+ --------+
- | 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_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value.u +
- relative_gindex * sizeof ( FT_UShort ) );
-
- p = valid->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 valid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER( "mort chain subtable type4 "
- "(Non-Contextual Glyph Substitution)" );
-
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_mort_subtable_type4_lookupval_validate;
- valid->lookupfmt4_trans = gxv_mort_subtable_type4_lookupfmt4_transit;
-
- gxv_LookupTable_validate( p, limit, valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmort5.c b/Build/source/libs/freetype2/src/gxvalid/gxvmort5.c
deleted file mode 100644
index a7cabc359fc..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmort5.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmort5.c */
-/* */
-/* TrueTypeGX/AAT mort table validation */
-/* body for type5 (Contextual Glyph Insertion) subtable. */
-/* */
-/* Copyright 2005 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 valid )
- {
- GXV_mort_subtable_type5_StateOptRecData optdata =
- (GXV_mort_subtable_type5_StateOptRecData)valid->statetable.optdata;
-
-
- gxv_StateTable_subtable_setup( table_size,
- classTable,
- stateArray,
- entryTable,
- classTable_length_p,
- stateArray_length_p,
- entryTable_length_p,
- valid );
-
- 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 valid )
- {
- /*
- * 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)valid->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" ));
-
- 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" ));
- }
-
-
- static void
- gxv_mort_subtable_type5_entry_validate(
- FT_Byte state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bool setMark;
- FT_Bool dontAdvance;
- FT_Bool currentIsKashidaLike;
- FT_Bool markedIsKashidaLike;
- FT_Bool currentInsertBefore;
- FT_Bool markedInsertBefore;
- FT_Byte currentInsertCount;
- FT_Byte markedInsertCount;
- FT_UShort currentInsertList;
- FT_UShort markedInsertList;
-
- FT_UNUSED( state );
-
-
- 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 );
-
- 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,
- valid );
- }
-
- if ( 0 != markedInsertList && 0 != markedInsertCount )
- {
- gxv_mort_subtable_type5_InsertList_validate( markedInsertList,
- markedInsertCount,
- table,
- limit,
- valid );
- }
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_mort_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 );
-
- valid->statetable.optdata =
- et;
- valid->statetable.optdata_load_func =
- NULL;
- valid->statetable.subtable_setup_func =
- gxv_mort_subtable_type5_subtable_setup;
- valid->statetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- valid->statetable.entry_validate_func =
- gxv_mort_subtable_type5_entry_validate;
-
- gxv_StateTable_validate( p, limit, valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmorx.c b/Build/source/libs/freetype2/src/gxvalid/gxvmorx.c
deleted file mode 100644
index 849d5e942a5..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmorx.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx.c */
-/* */
-/* TrueTypeGX/AAT morx table validation (body). */
-/* */
-/* Copyright 2005 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 valid )
- {
- 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 */
-
- };
-
- GXV_Validate_Func func;
-
- FT_UShort i;
-
-
- GXV_NAME_ENTER( "subtables in a chain" );
-
- for ( i = 0; i < nSubtables; i++ )
- {
- FT_ULong length;
- FT_ULong coverage;
- FT_ULong subFeatureFlags;
- FT_UInt type;
- FT_UInt rest;
-
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 );
- length = FT_NEXT_ULONG( p );
- coverage = FT_NEXT_ULONG( p );
- subFeatureFlags = FT_NEXT_ULONG( p );
-
- 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 ),
- valid );
- if ( type > 5 )
- FT_INVALID_FORMAT;
-
- func = fmt_funcs_table[type];
- if ( func == NULL )
- GXV_TRACE(( "morx type %d is reserved\n", type ));
-
- func( p, p + rest, valid );
-
- p += rest;
- }
-
- valid->subtable_length = p - table;
-
- GXV_EXIT;
- }
-
-
- static void
- gxv_morx_chain_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table;
- FT_ULong defaultFlags;
- FT_ULong chainLength;
- FT_ULong nFeatureFlags;
- FT_ULong nSubtables;
-
-
- GXV_NAME_ENTER( "morx chain header" );
-
- GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 );
- defaultFlags = FT_NEXT_ULONG( p );
- 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, valid );
- p += valid->subtable_length;
-
- if ( nSubtables >= 0x10000 )
- FT_INVALID_DATA;
-
- gxv_morx_subtables_validate( p, table + chainLength,
- (FT_UShort)nSubtables, valid );
-
- valid->subtable_length = chainLength;
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_validate( FT_Bytes table,
- FT_Face face,
- FT_Validator ftvalid )
- {
- GXV_ValidatorRec validrec;
- GXV_Validator valid = &validrec;
- FT_Bytes p = table;
- FT_Bytes limit = 0;
- FT_ULong version;
- FT_ULong nChains;
- FT_ULong i;
-
-
- valid->root = ftvalid;
- valid->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, valid );
- p += valid->subtable_length;
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmorx.h b/Build/source/libs/freetype2/src/gxvalid/gxvmorx.h
deleted file mode 100644
index 28c1a44f6fb..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmorx.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx.h */
-/* */
-/* TrueTypeGX/AAT common definition for morx table (specification). */
-/* */
-/* Copyright 2005 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 valid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type1_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type4_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
- FT_LOCAL( void )
- gxv_morx_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid );
-
-
-#endif /* __GXVMORX_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmorx0.c b/Build/source/libs/freetype2/src/gxvalid/gxvmorx0.c
deleted file mode 100644
index ca92b6c3925..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmorx0.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx0.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type0 (Indic Script Rearrangement) subtable. */
-/* */
-/* Copyright 2005 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_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_UShort markFirst;
- FT_UShort dontAdvance;
- FT_UShort markLast;
- FT_UShort reserved;
- FT_UShort verb;
-
- FT_UNUSED( state );
- FT_UNUSED( glyphOffset );
- FT_UNUSED( table );
- FT_UNUSED( limit );
-
-
- 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 );
-
- 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 valid )
- {
- FT_Bytes p = table;
-
-
- GXV_NAME_ENTER(
- "morx chain subtable type0 (Indic-Script Rearrangement)" );
-
- GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE );
-
- valid->xstatetable.optdata = NULL;
- valid->xstatetable.optdata_load_func = NULL;
- valid->xstatetable.subtable_setup_func = NULL;
- valid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE;
- valid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type0_entry_validate;
-
- gxv_XStateTable_validate( p, limit, valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmorx1.c b/Build/source/libs/freetype2/src/gxvalid/gxvmorx1.c
deleted file mode 100644
index 331d4ccdab3..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmorx1.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx1.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type1 (Contextual Substitution) subtable. */
-/* */
-/* Copyright 2005, 2007 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 valid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)valid->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 valid )
- {
- FT_ULong o[4];
- FT_ULong *l[4];
- FT_ULong buff[5];
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)valid->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, valid );
- }
-
-
- static void
- gxv_morx_subtable_type1_entry_validate(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_UShort setMark;
- FT_UShort dontAdvance;
- FT_UShort reserved;
- FT_Short markIndex;
- FT_Short currentIndex;
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
-
- FT_UNUSED( state );
- FT_UNUSED( table );
- FT_UNUSED( limit );
-
-
- setMark = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
-
- reserved = (FT_UShort)( flags & 0x3FFF );
-
- markIndex = (FT_Short)( glyphOffset.ul >> 16 );
- currentIndex = (FT_Short)( glyphOffset.ul );
-
- GXV_TRACE(( " setMark=%01d dontAdvance=%01d\n",
- setMark, dontAdvance ));
-
- if ( 0 < reserved )
- {
- GXV_TRACE(( " non-zero bits found in reserved range\n" ));
- if ( valid->root->level >= FT_VALIDATE_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_Short)( markIndex + 1 );
-
- if ( optdata->substitutionTable_num_lookupTables < currentIndex + 1 )
- optdata->substitutionTable_num_lookupTables =
- (FT_Short)( currentIndex + 1 );
- }
-
-
- static void
- gxv_morx_subtable_type1_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueDesc value,
- GXV_Validator valid )
- {
- FT_UNUSED( glyph ); /* for the non-debugging case */
-
- GXV_TRACE(( "morx subtable type1 subst.: %d -> %d\n", glyph, value.u ));
-
- if ( value.u > valid->face->num_glyphs )
- FT_INVALID_GLYPH_ID;
- }
-
-
- static GXV_LookupValueDesc
- gxv_morx_subtable_type1_LookupFmt4_transit(
- FT_UShort relative_gindex,
- GXV_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value.u +
- relative_gindex * sizeof ( FT_UShort ) );
-
- p = valid->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 valid )
- {
- FT_Bytes p = table;
- FT_UShort i;
-
- GXV_morx_subtable_type1_StateOptRecData optdata =
- (GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
-
-
- /* TODO: calculate offset/length for each lookupTables */
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_morx_subtable_type1_LookupValue_validate;
- valid->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, valid );
- }
-
- /* 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 valid )
- {
- 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;
-
- valid->xstatetable.optdata =
- &st_rec;
- valid->xstatetable.optdata_load_func =
- gxv_morx_subtable_type1_substitutionTable_load;
- valid->xstatetable.subtable_setup_func =
- gxv_morx_subtable_type1_subtable_setup;
- valid->xstatetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- valid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type1_entry_validate;
-
- gxv_XStateTable_validate( p, limit, valid );
-
- gxv_morx_subtable_type1_substitutionTable_validate(
- table + st_rec.substitutionTable,
- table + st_rec.substitutionTable + st_rec.substitutionTable_length,
- valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmorx2.c b/Build/source/libs/freetype2/src/gxvalid/gxvmorx2.c
deleted file mode 100644
index 5cad5169c21..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmorx2.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx2.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type2 (Ligature Substitution) subtable. */
-/* */
-/* Copyright 2005 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 valid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)valid->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 valid )
- {
- FT_ULong o[6];
- FT_ULong* l[6];
- FT_ULong buff[7];
-
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)valid->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, valid );
-
- 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 valid )
- {
- /* access ligActionTable */
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)valid->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;
- FT_UShort last;
- FT_UShort store;
- FT_ULong offset;
-
-
- lig_action = FT_NEXT_ULONG( p );
- last = (FT_UShort)( ( lig_action >> 31 ) & 1 );
- store = (FT_UShort)( ( lig_action >> 30 ) & 1 );
-
- offset = lig_action & 0x3FFFFFFFUL;
- }
- }
-
-
- static void
- gxv_morx_subtable_type2_entry_validate(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_UShort setComponent;
- FT_UShort dontAdvance;
- FT_UShort performAction;
- FT_UShort reserved;
- FT_UShort ligActionIndex;
-
- FT_UNUSED( state );
- FT_UNUSED( limit );
-
-
- setComponent = (FT_UShort)( ( flags >> 15 ) & 1 );
- dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
- performAction = (FT_UShort)( ( flags >> 13 ) & 1 );
-
- reserved = (FT_UShort)( flags & 0x1FFF );
- ligActionIndex = glyphOffset.u;
-
- if ( reserved > 0 )
- GXV_TRACE(( " reserved 14bit is non-zero\n" ));
-
- if ( 0 < ligActionIndex )
- gxv_morx_subtable_type2_ligActionIndex_validate(
- table, ligActionIndex, valid );
- }
-
-
- static void
- gxv_morx_subtable_type2_ligatureTable_validate( FT_Bytes table,
- GXV_Validator valid )
- {
- GXV_morx_subtable_type2_StateOptRecData optdata =
- (GXV_morx_subtable_type2_StateOptRecData)valid->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 );
- }
- }
-
- GXV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_subtable_type2_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 );
-
- valid->xstatetable.optdata =
- &lig_rec;
- valid->xstatetable.optdata_load_func =
- gxv_morx_subtable_type2_opttable_load;
- valid->xstatetable.subtable_setup_func =
- gxv_morx_subtable_type2_subtable_setup;
- valid->xstatetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_USHORT;
- valid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type2_entry_validate;
-
- gxv_XStateTable_validate( p, limit, valid );
-
- p += valid->subtable_length;
- gxv_morx_subtable_type2_ligatureTable_validate( table, valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmorx4.c b/Build/source/libs/freetype2/src/gxvalid/gxvmorx4.c
deleted file mode 100644
index c0d2f78e397..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmorx4.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx4.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. */
-/* */
-/* Copyright 2005 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 valid )
- {
- GXV_NAME_ENTER( "morx chain subtable type4 "
- "(Non-Contextual Glyph Substitution)" );
-
- gxv_mort_subtable_type4_validate( table, limit, valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvmorx5.c b/Build/source/libs/freetype2/src/gxvalid/gxvmorx5.c
deleted file mode 100644
index d9115618c09..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvmorx5.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvmorx5.c */
-/* */
-/* TrueTypeGX/AAT morx table validation */
-/* body for type5 (Contextual Glyph Insertion) subtable. */
-/* */
-/* Copyright 2005, 2007 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 valid )
- {
- FT_Bytes p = table;
-
- GXV_morx_subtable_type5_StateOptRecData optdata =
- (GXV_morx_subtable_type5_StateOptRecData)valid->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 valid )
- {
- FT_ULong o[4];
- FT_ULong* l[4];
- FT_ULong buff[5];
-
- GXV_morx_subtable_type5_StateOptRecData optdata =
- (GXV_morx_subtable_type5_StateOptRecData)valid->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, valid );
- }
-
-
- static void
- gxv_morx_subtable_type5_InsertList_validate( FT_UShort table_index,
- FT_UShort count,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bytes p = table + table_index * 2;
-
-
- 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" ));
- }
-
-
- static void
- gxv_morx_subtable_type5_entry_validate(
- FT_UShort state,
- FT_UShort flags,
- GXV_StateTable_GlyphOffsetDesc glyphOffset,
- FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- FT_Bool setMark;
- FT_Bool dontAdvance;
- FT_Bool currentIsKashidaLike;
- FT_Bool markedIsKashidaLike;
- FT_Bool currentInsertBefore;
- FT_Bool markedInsertBefore;
- FT_Byte currentInsertCount;
- FT_Byte markedInsertCount;
- FT_Byte currentInsertList;
- FT_UShort markedInsertList;
-
- FT_UNUSED( state );
-
-
- 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 );
-
- currentInsertCount = (FT_Byte)( ( flags >> 5 ) & 0x1F );
- markedInsertCount = (FT_Byte)( flags & 0x001F );
-
- currentInsertList = (FT_Byte) ( glyphOffset.ul >> 16 );
- markedInsertList = (FT_UShort)( glyphOffset.ul );
-
- if ( currentInsertList && 0 != currentInsertCount )
- gxv_morx_subtable_type5_InsertList_validate( currentInsertList,
- currentInsertCount,
- table, limit,
- valid );
-
- if ( markedInsertList && 0 != markedInsertCount )
- gxv_morx_subtable_type5_InsertList_validate( markedInsertList,
- markedInsertCount,
- table, limit,
- valid );
- }
-
-
- FT_LOCAL_DEF( void )
- gxv_morx_subtable_type5_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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 );
-
- valid->xstatetable.optdata =
- et;
- valid->xstatetable.optdata_load_func =
- gxv_morx_subtable_type5_insertionGlyphList_load;
- valid->xstatetable.subtable_setup_func =
- gxv_morx_subtable_type5_subtable_setup;
- valid->xstatetable.entry_glyphoffset_fmt =
- GXV_GLYPHOFFSET_ULONG;
- valid->xstatetable.entry_validate_func =
- gxv_morx_subtable_type5_entry_validate;
-
- gxv_XStateTable_validate( p, limit, valid );
-
- GXV_EXIT;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvopbd.c b/Build/source/libs/freetype2/src/gxvalid/gxvopbd.c
deleted file mode 100644
index 8d6fe669f30..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvopbd.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvopbd.c */
-/* */
-/* TrueTypeGX/AAT opbd table validation (body). */
-/* */
-/* Copyright 2004, 2005 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_LookupValueDesc value,
- GXV_Validator valid )
- {
- /* offset in LookupTable is measured from the head of opbd table */
- FT_Bytes p = valid->root->base + value.u;
- FT_Bytes limit = valid->root->limit;
- FT_Short delta_value;
- int i;
-
-
- if ( value.u < GXV_OPBD_DATA( valueOffset_min ) )
- GXV_OPBD_DATA( valueOffset_min ) = value.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, delta_value, valid );
- }
- 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_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid )
- {
- GXV_LookupValueDesc value;
-
- FT_UNUSED( lookuptbl_limit );
- FT_UNUSED( valid );
-
- /* XXX: check range? */
- value.u = (FT_UShort)( base_value.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 validrec;
- GXV_Validator valid = &validrec;
- GXV_opbd_DataRec opbdrec;
- GXV_opbd_Data opbd = &opbdrec;
- FT_Bytes p = table;
- FT_Bytes limit = 0;
-
- FT_ULong version;
-
-
- valid->root = ftvalid;
- valid->table_data = opbd;
- valid->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;
-
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_opbd_LookupValue_validate;
- valid->lookupfmt4_trans = gxv_opbd_LookupFmt4_transit;
-
- gxv_LookupTable_validate( p, limit, valid );
- p += valid->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/Build/source/libs/freetype2/src/gxvalid/gxvprop.c b/Build/source/libs/freetype2/src/gxvalid/gxvprop.c
deleted file mode 100644
index 010eeda4266..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvprop.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvprop.c */
-/* */
-/* TrueTypeGX/AAT prop table validation (body). */
-/* */
-/* Copyright 2004, 2005 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 valid )
- {
- FT_Face face;
- FT_Error error;
- FT_GlyphSlot glyph;
-
-
- GXV_NAME_ENTER( "zero advance" );
-
- face = valid->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 )
- 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 valid )
- {
- if ( glyph != 0 && ( property & GXV_PROP_FLOATER ) )
- gxv_prop_zero_advance_validate( glyph, valid );
-
- if ( property & GXV_PROP_USE_COMPLEMENTARY_BRACKET )
- {
- FT_UShort offset;
- char complement;
-
-
- offset = (FT_UShort)( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET );
- if ( offset == 0 )
- FT_INVALID_DATA;
-
- 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 )
- FT_INVALID_DATA;
- }
- else
- {
- /* The gid for complement must be the face. */
- gxv_glyphid_validate( (FT_UShort)( glyph + complement ), valid );
- }
- }
- 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 )
- FT_INVALID_DATA;
- }
-
- if ( property & GXV_PROP_RESERVED )
- 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 )
- FT_INVALID_DATA;
- }
- }
-
-
- static void
- gxv_prop_LookupValue_validate( FT_UShort glyph,
- GXV_LookupValueDesc value,
- GXV_Validator valid )
- {
- gxv_prop_property_validate( value.u, glyph, valid );
- }
-
-
- /*
- +===============+ --------+
- | 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_LookupValueDesc base_value,
- FT_Bytes lookuptbl_limit,
- GXV_Validator valid )
- {
- FT_Bytes p;
- FT_Bytes limit;
- FT_UShort offset;
- GXV_LookupValueDesc value;
-
- /* XXX: check range? */
- offset = (FT_UShort)( base_value.u +
- relative_gindex * sizeof( FT_UShort ) );
- p = valid->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 validrec;
- GXV_Validator valid = &validrec;
-
- GXV_prop_DataRec proprec;
- GXV_prop_Data prop = &proprec;
-
- FT_Fixed version;
- FT_UShort format;
- FT_UShort defaultProp;
-
-
- valid->root = ftvalid;
- valid->table_data = prop;
- valid->face = face;
-
- FT_TRACE3(( "validating `prop' table\n" ));
- GXV_INIT;
-
- GXV_LIMIT_CHECK( 4 + 2 + 2 );
- version = FT_NEXT_ULONG( p );
- format = FT_NEXT_USHORT( p );
- defaultProp = FT_NEXT_USHORT( p );
-
- /* only versions 1.0, 2.0, 3.0 are defined (1996) */
- if ( version != 0x00010000UL &&
- version != 0x00020000UL &&
- version != 0x00030000UL )
- FT_INVALID_FORMAT;
-
-
- /* only formats 0x0000, 0x0001 are defined (1996) */
- if ( format > 1 )
- FT_INVALID_FORMAT;
-
- gxv_prop_property_validate( defaultProp, 0, valid );
-
- 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;
-
- valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
- valid->lookupval_func = gxv_prop_LookupValue_validate;
- valid->lookupfmt4_trans = gxv_prop_LookupFmt4_transit;
-
- gxv_LookupTable_validate( p, limit, valid );
-
- Exit:
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/gxvtrak.c b/Build/source/libs/freetype2/src/gxvalid/gxvtrak.c
deleted file mode 100644
index 432ee4e2719..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/gxvtrak.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/***************************************************************************/
-/* */
-/* gxvtrak.c */
-/* */
-/* TrueTypeGX/AAT trak table validation (body). */
-/* */
-/* Copyright 2004, 2005 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:
- * http://developer.apple.com/fonts/TTRefMan/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 valid )
- {
- FT_Bytes p = table;
-
- FT_Fixed track;
- FT_UShort nameIndex;
- FT_UShort offset;
- FT_UShort i;
-
-
- GXV_NAME_ENTER( "trackTable" );
-
- GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFFU;
- GXV_TRAK_DATA( trackValueOffset_max ) = 0x0000;
-
- for ( i = 0; i < nTracks; i ++ )
- {
- GXV_LIMIT_CHECK( 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, valid );
- }
-
- valid->subtable_length = p - table;
- GXV_EXIT;
- }
-
-
- static void
- gxv_trak_trackData_validate( FT_Bytes table,
- FT_Bytes limit,
- GXV_Validator valid )
- {
- 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, p - table, "trackData header", odtect );
-
- /* validate trackTable */
- gxv_trak_trackTable_validate( p, limit, nTracks, valid );
- gxv_odtect_add_range( p, valid->subtable_length,
- "trackTable", odtect );
-
- /* sizeTable is array of FT_Fixed, don't check contents */
- p = valid->root->base + sizeTableOffset;
- GXV_LIMIT_CHECK( nSizes * 4 );
- gxv_odtect_add_range( p, nSizes * 4, "sizeTable", odtect );
-
- /* validate trackValueOffet */
- p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_min );
- if ( limit - p < nTracks * nSizes * 2 )
- GXV_TRACE(( "too short trackValue array\n" ));
-
- p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_max );
- GXV_LIMIT_CHECK( nSizes * 2 );
-
- gxv_odtect_add_range( valid->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, valid );
-
- 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;
- FT_UInt table_size;
-
- GXV_ValidatorRec validrec;
- GXV_Validator valid = &validrec;
- 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 );
- valid->root = ftvalid;
- valid->table_data = trak;
- valid->face = face;
-
- limit = valid->root->limit;
- table_size = limit - table;
-
- 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, valid );
- gxv_odtect_add_range( table + horizOffset, valid->subtable_length,
- "horizJustData", odtect );
- }
-
- if ( 0 < vertOffset )
- {
- gxv_trak_trackData_validate( table + vertOffset, limit, valid );
- gxv_odtect_add_range( table + vertOffset, valid->subtable_length,
- "vertJustData", odtect );
- }
-
- gxv_odtect_validate( odtect, valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gxvalid/module.mk b/Build/source/libs/freetype2/src/gxvalid/module.mk
deleted file mode 100644
index 44ef94addfa..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 gxvalid module definition
-#
-
-# Copyright 2004, 2005, 2006
-# 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)gxv_module_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)gxvalid $(ECHO_DRIVER_DESC)TrueTypeGX/AAT validation module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/gxvalid/rules.mk b/Build/source/libs/freetype2/src/gxvalid/rules.mk
deleted file mode 100644
index 57bc0823db7..00000000000
--- a/Build/source/libs/freetype2/src/gxvalid/rules.mk
+++ /dev/null
@@ -1,94 +0,0 @@
-#
-# FreeType 2 TrueTypeGX/AAT validation driver configuration rules
-#
-
-
-# Copyright 2004, 2005 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 := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GXV_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/gzip/Jamfile b/Build/source/libs/freetype2/src/gzip/Jamfile
deleted file mode 100644
index a7aafa05180..00000000000
--- a/Build/source/libs/freetype2/src/gzip/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/gzip Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) gzip ;
-
-Library $(FT2_LIB) : ftgzip.c ;
-
-# end of src/pcf Jamfile
diff --git a/Build/source/libs/freetype2/src/gzip/adler32.c b/Build/source/libs/freetype2/src/gzip/adler32.c
deleted file mode 100644
index 36f6a432eaf..00000000000
--- a/Build/source/libs/freetype2/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: adler32.c,v 1.5 2007/06/01 06:56:17 wl Exp $ */
-
-#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/Build/source/libs/freetype2/src/gzip/ftgzip.c b/Build/source/libs/freetype2/src/gzip/ftgzip.c
deleted file mode 100644
index af2022d7f5a..00000000000
--- a/Build/source/libs/freetype2/src/gzip/ftgzip.c
+++ /dev/null
@@ -1,682 +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, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 <string.h>
-
-
-#include FT_MODULE_ERRORS_H
-
-#undef __FTERRORS_H__
-
-#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_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 "ftgzip" 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. */
-
-#define NO_DUMMY_DECL
-#define MY_ZCALLOC
-
-#include "zlib.h"
-
-#undef SLOW
-#define SLOW 1 /* we can't use asm-optimized sources here! */
-
- /* 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"
-
-#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;
-
-
- (void)FT_ALLOC( p, sz );
- return p;
- }
-
-
- static void
- ft_gzip_free( FT_Memory memory,
- voidpf address )
- {
- FT_MEM_FREE( address );
- }
-
-
-#ifndef FT_CONFIG_OPTION_SYSTEM_ZLIB
-
- 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 */
-
-
-/***************************************************************************/
-/***************************************************************************/
-/***** *****/
-/***** 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 = Gzip_Err_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 = Gzip_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 == NULL )
- error = Gzip_Err_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 )
- return Gzip_Err_Invalid_Stream_Operation;
- }
- else
- {
- size = stream->size - stream->pos;
- if ( size > FT_GZIP_BUFFER_SIZE )
- size = FT_GZIP_BUFFER_SIZE;
-
- if ( size == 0 )
- return Gzip_Err_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 Gzip_Err_Ok;
- }
-
-
- static FT_Error
- ft_gzip_file_fill_output( FT_GZipFile zip )
- {
- z_stream* zstream = &zip->zstream;
- FT_Error error = 0;
-
-
- 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 = Gzip_Err_Invalid_Stream_Operation;
- break;
- }
- else if ( err != Z_OK )
- {
- error = Gzip_Err_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 = Gzip_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;
- }
- }
-
-
- static FT_ULong
- ft_gzip_stream_io( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- FT_GZipFile zip = (FT_GZipFile)stream->descriptor.pointer;
-
-
- return ft_gzip_file_io( zip, pos, 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_ULong)FT_Stream_ReadLong( stream, &error );
- if ( error )
- result = 0;
-
- FT_Stream_Seek( stream, old_pos );
- }
-
- return result;
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenGzip( FT_Stream stream,
- FT_Stream source )
- {
- FT_Error error;
- FT_Memory memory = source->memory;
- FT_GZipFile zip;
-
-
- /*
- * 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;
-
-
- 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 = 0;
- }
- }
-
- stream->size = 0x7FFFFFFFL; /* don't know the real size! */
- stream->pos = 0;
- stream->base = 0;
- stream->read = ft_gzip_stream_io;
- stream->close = ft_gzip_stream_close;
-
- Exit:
- return error;
- }
-
-#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 Gzip_Err_Unimplemented_Feature;
- }
-
-#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/gzip/infblock.c b/Build/source/libs/freetype2/src/gzip/infblock.c
deleted file mode 100644
index d6e2dc297da..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/infblock.h b/Build/source/libs/freetype2/src/gzip/infblock.h
deleted file mode 100644
index c2535a1e452..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/infcodes.c b/Build/source/libs/freetype2/src/gzip/infcodes.c
deleted file mode 100644
index f7bfd58c4ff..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/infcodes.h b/Build/source/libs/freetype2/src/gzip/infcodes.h
deleted file mode 100644
index 154d7f896ca..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/inffixed.h b/Build/source/libs/freetype2/src/gzip/inffixed.h
deleted file mode 100644
index 4d4760ea00e..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/inflate.c b/Build/source/libs/freetype2/src/gzip/inflate.c
deleted file mode 100644
index 8877fa3eb2b..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/inftrees.c b/Build/source/libs/freetype2/src/gzip/inftrees.c
deleted file mode 100644
index 3c39aca6e3a..00000000000
--- a/Build/source/libs/freetype2/src/gzip/inftrees.c
+++ /dev/null
@@ -1,465 +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 */
- register uInt i; /* counter, current code */
- register uInt j; /* counter */
- register 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 */
- register 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 */
- register 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) {
-#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/Build/source/libs/freetype2/src/gzip/inftrees.h b/Build/source/libs/freetype2/src/gzip/inftrees.h
deleted file mode 100644
index 07bf2aa0bf8..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/infutil.c b/Build/source/libs/freetype2/src/gzip/infutil.c
deleted file mode 100644
index 6087b406473..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/infutil.h b/Build/source/libs/freetype2/src/gzip/infutil.h
deleted file mode 100644
index 7174b6dd0ff..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/gzip/rules.mk b/Build/source/libs/freetype2/src/gzip/rules.mk
deleted file mode 100644
index d2a43a6a890..00000000000
--- a/Build/source/libs/freetype2/src/gzip/rules.mk
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# FreeType 2 GZip support configuration rules
-#
-
-
-# Copyright 2002, 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.
-
-
-# gzip driver directory
-#
-GZIP_DIR := $(SRC_DIR)/gzip
-
-
-# compilation flags for the driver
-#
-ifeq ($(SYSTEM_ZLIB),)
- GZIP_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GZIP_DIR))
-else
- GZIP_COMPILE := $(FT_COMPILE)
-endif
-
-
-# gzip support sources (i.e., C files)
-#
-GZIP_DRV_SRC := $(GZIP_DIR)/ftgzip.c
-
-# gzip support headers
-#
-GZIP_DRV_H :=
-
-
-# gzip driver object(s)
-#
-# GZIP_DRV_OBJ_M is used during `multi' builds
-# GZIP_DRV_OBJ_S is used during `single' builds
-#
-ifeq ($(SYSTEM_ZLIB),)
- GZIP_DRV_OBJ_M := $(GZIP_DRV_SRC:$(GZIP_DIR)/%.c=$(OBJ_DIR)/%.$O)
-else
- GZIP_DRV_OBJ_M := $(OBJ_DIR)/ftgzip.$O
-endif
-GZIP_DRV_OBJ_S := $(OBJ_DIR)/ftgzip.$O
-
-# gzip support source file for single build
-#
-GZIP_DRV_SRC_S := $(GZIP_DIR)/ftgzip.c
-
-
-# gzip support - single object
-#
-$(GZIP_DRV_OBJ_S): $(GZIP_DRV_SRC_S) $(GZIP_DRV_SRC) $(FREETYPE_H) \
- $(GZIP_DRV_H)
- $(GZIP_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(GZIP_DRV_SRC_S))
-
-
-# gzip support - multiple objects
-#
-$(OBJ_DIR)/%.$O: $(GZIP_DIR)/%.c $(FREETYPE_H) $(GZIP_DRV_H)
- $(GZIP_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-# update main driver object lists
-#
-DRV_OBJS_S += $(GZIP_DRV_OBJ_S)
-DRV_OBJS_M += $(GZIP_DRV_OBJ_M)
-
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/gzip/zconf.h b/Build/source/libs/freetype2/src/gzip/zconf.h
deleted file mode 100644
index 3ccc3a66ab6..00000000000
--- a/Build/source/libs/freetype2/src/gzip/zconf.h
+++ /dev/null
@@ -1,278 +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: zconf.h,v 1.4 2007/06/01 06:56:17 wl Exp $ */
-
-#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
-
-/*
- * 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/Build/source/libs/freetype2/src/gzip/zlib.h b/Build/source/libs/freetype2/src/gzip/zlib.h
deleted file mode 100644
index 50d0d3f146d..00000000000
--- a/Build/source/libs/freetype2/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 "zconf.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 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/Build/source/libs/freetype2/src/gzip/zutil.c b/Build/source/libs/freetype2/src/gzip/zutil.c
deleted file mode 100644
index 5ed2da08713..00000000000
--- a/Build/source/libs/freetype2/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: zutil.c,v 1.3 2006/04/29 07:31:16 wl Exp $ */
-
-#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
-
-#ifdef __TURBOC__
-#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 /* __TURBOC__ */
-
-
-#if defined(M_I86) && !defined(__32BIT__)
-/* 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/Build/source/libs/freetype2/src/gzip/zutil.h b/Build/source/libs/freetype2/src/gzip/zutil.h
deleted file mode 100644
index 8e3c69a9f06..00000000000
--- a/Build/source/libs/freetype2/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: zutil.h,v 1.6 2007/06/01 06:56:17 wl Exp $ */
-
-#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/Build/source/libs/freetype2/src/lzw/Jamfile b/Build/source/libs/freetype2/src/lzw/Jamfile
deleted file mode 100644
index 6f1f516e7cf..00000000000
--- a/Build/source/libs/freetype2/src/lzw/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/lzw Jamfile
-#
-# Copyright 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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/Build/source/libs/freetype2/src/lzw/ftlzw.c b/Build/source/libs/freetype2/src/lzw/ftlzw.c
deleted file mode 100644
index 45fbf7b6ea1..00000000000
--- a/Build/source/libs/freetype2/src/lzw/ftlzw.c
+++ /dev/null
@@ -1,413 +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, 2005, 2006 by */
-/* Albert Chin-A-Young. */
-/* */
-/* Based on code in src/gzip/ftgzip.c, 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. */
-/* */
-/***************************************************************************/
-
-#include <ft2build.h>
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_LZW_H
-#include <string.h>
-#include <stdio.h>
-
-
-#include FT_MODULE_ERRORS_H
-
-#undef __FTERRORS_H__
-
-#define FT_ERR_PREFIX LZW_Err_
-#define FT_ERR_BASE FT_Mod_Err_LZW
-
-#include FT_ERRORS_H
-
-
-#ifdef FT_CONFIG_OPTION_USE_LZW
-
-#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 = LZW_Err_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 = LZW_Err_Ok;
-
-
- 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 */
- {
- stream = source;
-
- 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 = 0;
-
-
- zip->cursor = zip->buffer;
-
- count = ft_lzwstate_io( lzw, zip->buffer, FT_LZW_BUFFER_SIZE );
-
- zip->limit = zip->cursor + count;
-
- if ( count == 0 )
- error = LZW_Err_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 = LZW_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 = LZW_Err_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 FT_ULong
- ft_lzw_stream_io( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- FT_LZWFile zip = (FT_LZWFile)stream->descriptor.pointer;
-
-
- return ft_lzw_file_io( zip, pos, buffer, count );
- }
-
-
- FT_EXPORT_DEF( FT_Error )
- FT_Stream_OpenLZW( FT_Stream stream,
- FT_Stream source )
- {
- FT_Error error;
- FT_Memory memory = source->memory;
- FT_LZWFile zip;
-
-
- /*
- * 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 LZW_Err_Unimplemented_Feature;
- }
-
-
-#endif /* !FT_CONFIG_OPTION_USE_LZW */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/lzw/ftzopen.c b/Build/source/libs/freetype2/src/lzw/ftzopen.c
deleted file mode 100644
index fc7831510d1..00000000000
--- a/Build/source/libs/freetype2/src/lzw/ftzopen.c
+++ /dev/null
@@ -1,398 +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, 2006, 2007 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 = ( state->buf_size << 3 ) - ( state->num_bits - 1 );
-
- 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_Int 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;
- 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_UInt old_size = state->stack_size;
- FT_UInt new_size = old_size;
-
- new_size = new_size + ( new_size >> 1 ) + 4;
-
- if ( state->stack == state->stack_0 )
- {
- state->stack = NULL;
- old_size = 0;
- }
-
- 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 )
- 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;
- c = ft_lzwstate_get_code( state );
- if ( c < 0 )
- goto Eof;
-
- code = (FT_UInt)c;
- }
-
- in_code = code; /* save code for later */
-
- if ( code >= 256U )
- {
- /* special case for KwKwKwK */
- if ( code - 256U >= state->free_ent )
- {
- FTLZW_STACK_PUSH( old_char );
- code = old_code;
- }
-
- while ( code >= 256U )
- {
- 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/Build/source/libs/freetype2/src/lzw/ftzopen.h b/Build/source/libs/freetype2/src/lzw/ftzopen.h
deleted file mode 100644
index dd602402ac0..00000000000
--- a/Build/source/libs/freetype2/src/lzw/ftzopen.h
+++ /dev/null
@@ -1,171 +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, 2006, 2007, 2008 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 __FT_ZOPEN_H__
-#define __FT_ZOPEN_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_Int buf_offset;
- FT_Int buf_size;
- FT_Bool buf_clear;
- FT_Int 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_UInt 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 /* __FT_ZOPEN_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/lzw/rules.mk b/Build/source/libs/freetype2/src/lzw/rules.mk
deleted file mode 100644
index 5550a48d64b..00000000000
--- a/Build/source/libs/freetype2/src/lzw/rules.mk
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# FreeType 2 LZW support configuration rules
-#
-
-
-# Copyright 2004, 2005, 2006 by
-# Albert Chin-A-Young.
-#
-# Based on src/lzw/rules.mk, 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.
-
-
-# LZW driver directory
-#
-LZW_DIR := $(SRC_DIR)/lzw
-
-
-# compilation flags for the driver
-#
-LZW_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(LZW_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/otvalid/Jamfile b/Build/source/libs/freetype2/src/otvalid/Jamfile
deleted file mode 100644
index 35a14c6ab94..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/otvalid Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) otvalid ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = otvbase otvcommn otvgdef otvgpos otvgsub otvjstf otvmod ;
- }
- else
- {
- _sources = otvalid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/otvalid Jamfile
diff --git a/Build/source/libs/freetype2/src/otvalid/module.mk b/Build/source/libs/freetype2/src/otvalid/module.mk
deleted file mode 100644
index aa4db047d55..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 otvalid module definition
-#
-
-
-# Copyright 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)otv_module_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)otvalid $(ECHO_DRIVER_DESC)OpenType validation module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/otvalid/otvalid.c b/Build/source/libs/freetype2/src/otvalid/otvalid.c
deleted file mode 100644
index d5c2b75abb6..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvalid.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvalid.c */
-/* */
-/* FreeType validator for OpenType tables (body only). */
-/* */
-/* Copyright 2004, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/otvalid/otvalid.h b/Build/source/libs/freetype2/src/otvalid/otvalid.h
deleted file mode 100644
index 90255cdbad5..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvalid.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvalid.h */
-/* */
-/* OpenType table validation (specification only). */
-/* */
-/* Copyright 2004, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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/Build/source/libs/freetype2/src/otvalid/otvbase.c b/Build/source/libs/freetype2/src/otvalid/otvbase.c
deleted file mode 100644
index d742d2dc95f..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvbase.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvbase.c */
-/* */
-/* OpenType BASE table validation (body). */
-/* */
-/* Copyright 2004, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 valid )
- {
- 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 ), valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_BaseTagList_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 valid )
- {
- 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 ), valid );
-
- OTV_EXIT;
- }
-
-
- static void
- otv_MinMax_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid );
-
- OTV_SIZE_CHECK( MaxCoord );
- if ( MaxCoord )
- otv_BaseCoord_validate( table + MaxCoord, valid );
-
- 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, valid );
-
- OTV_SIZE_CHECK( MaxCoord );
- if ( MaxCoord )
- otv_BaseCoord_validate( table + MaxCoord, valid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_BaseScript_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid );
-
- OTV_SIZE_CHECK( DefaultMinMax );
- if ( DefaultMinMax )
- otv_MinMax_validate( table + DefaultMinMax, valid );
-
- OTV_LIMIT_CHECK( BaseLangSysCount * 6 );
-
- /* BaseLangSysRecord */
- for ( ; BaseLangSysCount > 0; BaseLangSysCount-- )
- {
- p += 4; /* skip BaseLangSysTag */
-
- otv_MinMax_validate( table + FT_NEXT_USHORT( p ), valid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_BaseScriptList_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ), valid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_Axis_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid );
-
- /* BaseScriptList */
- otv_BaseScriptList_validate( table + FT_NEXT_USHORT( p ), valid );
-
- OTV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- otv_BASE_validate( FT_Bytes table,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec validrec;
- OTV_Validator valid = &validrec;
- FT_Bytes p = table;
- FT_UInt table_size;
-
- OTV_OPTIONAL_TABLE( HorizAxis );
- OTV_OPTIONAL_TABLE( VertAxis );
-
-
- valid->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, valid );
-
- OTV_OPTIONAL_OFFSET( VertAxis );
- OTV_SIZE_CHECK( VertAxis );
- if ( VertAxis )
- otv_Axis_validate( table + VertAxis, valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvcommn.c b/Build/source/libs/freetype2/src/otvalid/otvcommn.c
deleted file mode 100644
index a4f885b51f8..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvcommn.c
+++ /dev/null
@@ -1,1086 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvcommn.c */
-/* */
-/* OpenType common tables validation (body). */
-/* */
-/* Copyright 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 valid,
- 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 >= valid->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 >= valid->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 valid )
- {
- 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 >= valid->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 >= valid->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 valid )
- {
- 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 valid->type_count */
- /* uses valid->type_funcs */
-
- FT_LOCAL_DEF( void )
- otv_Lookup_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 > valid->type_count )
- FT_INVALID_DATA;
-
- validate = valid->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 ), valid );
-
- OTV_EXIT;
- }
-
-
- /* uses valid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_LookupList_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 );
-
- valid->lookup_count = LookupCount;
-
- /* Lookup */
- for ( ; LookupCount > 0; LookupCount-- )
- otv_Lookup_validate( table + FT_NEXT_USHORT( p ), valid );
-
- OTV_EXIT;
- }
-
-
- static FT_UInt
- otv_LookupList_get_count( FT_Bytes table )
- {
- return FT_NEXT_USHORT( table );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FEATURES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses valid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_Feature_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ) >= valid->lookup_count )
- FT_INVALID_DATA;
-
- OTV_EXIT;
- }
-
-
- static FT_UInt
- otv_Feature_get_count( FT_Bytes table )
- {
- return FT_NEXT_USHORT( table );
- }
-
-
- /* sets valid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_FeatureList_validate( FT_Bytes table,
- FT_Bytes lookups,
- OTV_Validator valid )
- {
- 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 );
-
- valid->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 ), valid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LANGUAGE SYSTEM *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /* uses valid->extra1 (number of features) */
-
- FT_LOCAL_DEF( void )
- otv_LangSys_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 >= valid->extra1 )
- FT_INVALID_DATA;
-
- OTV_LIMIT_CHECK( FeatureCount * 2 );
-
- /* FeatureIndex */
- for ( ; FeatureCount > 0; FeatureCount-- )
- if ( FT_NEXT_USHORT( p ) >= valid->extra1 )
- FT_INVALID_DATA;
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SCRIPTS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- otv_Script_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid );
-
- OTV_LIMIT_CHECK( LangSysCount * 6 );
-
- /* LangSysRecord */
- for ( ; LangSysCount > 0; LangSysCount-- )
- {
- p += 4; /* skip LangSysTag */
-
- /* LangSys */
- otv_LangSys_validate( table + FT_NEXT_USHORT( p ), valid );
- }
-
- OTV_EXIT;
- }
-
-
- /* sets valid->extra1 (number of features) */
-
- FT_LOCAL_DEF( void )
- otv_ScriptList_validate( FT_Bytes table,
- FT_Bytes features,
- OTV_Validator valid )
- {
- 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 );
-
- valid->extra1 = otv_Feature_get_count( features );
-
- /* ScriptRecord */
- for ( ; ScriptCount > 0; ScriptCount-- )
- {
- p += 4; /* skip ScriptTag */
-
- otv_Script_validate( table + FT_NEXT_USHORT( p ), valid ); /* 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 valid )
- {
- 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 );
-
- valid->nesting_level++;
- func = valid->func[valid->nesting_level];
-
- for ( ; Count > 0; Count-- )
- func( table + FT_NEXT_USHORT( p ), valid );
-
- valid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- FT_LOCAL_DEF( void )
- otv_u_C_x_Ox( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, Count );
-
- OTV_LIMIT_CHECK( Count * 2 );
-
- valid->nesting_level++;
- func = valid->func[valid->nesting_level];
-
- for ( ; Count > 0; Count-- )
- func( table + FT_NEXT_USHORT( p ), valid );
-
- valid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /* uses valid->extra1 (if > 0: array value limit) */
-
- FT_LOCAL_DEF( void )
- otv_x_ux( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ( valid->extra1 )
- {
- for ( ; Count > 0; Count-- )
- if ( FT_NEXT_USHORT( p ) >= valid->extra1 )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* `ux' in the function's name is not really correct since only x-1 */
- /* elements are tested */
-
- /* uses valid->extra1 (array value limit) */
-
- FT_LOCAL_DEF( void )
- otv_x_y_ux_sy( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ) >= valid->extra1 )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* `uy' in the function's name is not really correct since only y-1 */
- /* elements are tested */
-
- /* uses valid->extra1 (array value limit) */
-
- FT_LOCAL_DEF( void )
- otv_x_ux_y_uy_z_uz_p_sp( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ) >= valid->extra1 )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* sets valid->extra1 (valid->lookup_count) */
-
- FT_LOCAL_DEF( void )
- otv_u_O_O_x_Onx( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, -1 );
- otv_ClassDef_validate( table + ClassDef, valid );
-
- OTV_LIMIT_CHECK( ClassSetCount * 2 );
-
- valid->nesting_level++;
- func = valid->func[valid->nesting_level];
- valid->extra1 = valid->lookup_count;
-
- for ( ; ClassSetCount > 0; ClassSetCount-- )
- {
- FT_UInt offset = FT_NEXT_USHORT( p );
-
-
- if ( offset )
- func( table + offset, valid );
- }
-
- valid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /* uses valid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_u_x_y_Ox_sy( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ), valid, -1 );
-
- for ( ; Count > 0; Count-- )
- {
- if ( FT_NEXT_USHORT( p ) >= GlyphCount )
- FT_INVALID_DATA;
-
- if ( FT_NEXT_USHORT( p ) >= valid->lookup_count )
- FT_INVALID_DATA;
- }
-
- OTV_EXIT;
- }
-
-
- /* sets valid->extra1 (valid->lookup_count) */
-
- FT_LOCAL_DEF( void )
- otv_u_O_O_O_O_x_Onx( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, -1 );
-
- otv_ClassDef_validate( table + BacktrackClassDef, valid );
- otv_ClassDef_validate( table + InputClassDef, valid );
- otv_ClassDef_validate( table + LookaheadClassDef, valid );
-
- OTV_LIMIT_CHECK( ChainClassSetCount * 2 );
-
- valid->nesting_level++;
- func = valid->func[valid->nesting_level];
- valid->extra1 = valid->lookup_count;
-
- for ( ; ChainClassSetCount > 0; ChainClassSetCount-- )
- {
- FT_UInt offset = FT_NEXT_USHORT( p );
-
-
- if ( offset )
- func( table + offset, valid );
- }
-
- valid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /* uses valid->lookup_count */
-
- FT_LOCAL_DEF( void )
- otv_u_x_Ox_y_Oy_z_Oz_p_sp( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ), valid, -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 ), valid, -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 ), valid, -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 ) >= valid->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/Build/source/libs/freetype2/src/otvalid/otvcommn.h b/Build/source/libs/freetype2/src/otvalid/otvcommn.h
deleted file mode 100644
index 7c06b16ffad..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvcommn.h
+++ /dev/null
@@ -1,437 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvcommn.h */
-/* */
-/* OpenType common tables validation (specification). */
-/* */
-/* Copyright 2004, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 valid );
-
- 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_( _prefix, _error ) \
- ft_validator_error( valid->root, _prefix ## _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) > valid->root->limit ) \
- FT_INVALID_TOO_SHORT; \
- FT_END_STMNT
-
-#define OTV_SIZE_CHECK( _size ) \
- FT_BEGIN_STMNT \
- if ( _size > 0 && _size < table_size ) \
- { \
- if ( valid->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'!\n" \
- "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 \
- valid->nesting_level = 0; \
- valid->func[0] = OTV_FUNC( x ); \
- valid->debug_function_name[0] = OTV_NAME( x ); \
- FT_END_STMNT
-
-#define OTV_NEST2( x, y ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = OTV_FUNC( x ); \
- valid->func[1] = OTV_FUNC( y ); \
- valid->debug_function_name[0] = OTV_NAME( x ); \
- valid->debug_function_name[1] = OTV_NAME( y ); \
- FT_END_STMNT
-
-#define OTV_NEST3( x, y, z ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = OTV_FUNC( x ); \
- valid->func[1] = OTV_FUNC( y ); \
- valid->func[2] = OTV_FUNC( z ); \
- valid->debug_function_name[0] = OTV_NAME( x ); \
- valid->debug_function_name[1] = OTV_NAME( y ); \
- valid->debug_function_name[2] = OTV_NAME( z ); \
- FT_END_STMNT
-
-#define OTV_INIT valid->debug_indent = 0
-
-#define OTV_ENTER \
- FT_BEGIN_STMNT \
- valid->debug_indent += 2; \
- FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \
- FT_TRACE4(( "%s table\n", \
- valid->debug_function_name[valid->nesting_level] )); \
- FT_END_STMNT
-
-#define OTV_NAME_ENTER( name ) \
- FT_BEGIN_STMNT \
- valid->debug_indent += 2; \
- FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \
- FT_TRACE4(( "%s table\n", name )); \
- FT_END_STMNT
-
-#define OTV_EXIT valid->debug_indent -= 2
-
-#define OTV_TRACE( s ) \
- FT_BEGIN_STMNT \
- FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \
- FT_TRACE4( s ); \
- FT_END_STMNT
-
-#else /* !FT_DEBUG_LEVEL_TRACE */
-
-#define OTV_NEST1( x ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = OTV_FUNC( x ); \
- FT_END_STMNT
-
-#define OTV_NEST2( x, y ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = OTV_FUNC( x ); \
- valid->func[1] = OTV_FUNC( y ); \
- FT_END_STMNT
-
-#define OTV_NEST3( x, y, z ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = OTV_FUNC( x ); \
- valid->func[1] = OTV_FUNC( y ); \
- valid->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 valid->func[0]
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** COVERAGE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Coverage_validate( FT_Bytes table,
- OTV_Validator valid,
- 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 valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** DEVICE TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Device_validate( FT_Bytes table,
- OTV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LOOKUPS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Lookup_validate( FT_Bytes table,
- OTV_Validator valid );
-
- FT_LOCAL( void )
- otv_LookupList_validate( FT_Bytes table,
- OTV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FEATURES *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Feature_validate( FT_Bytes table,
- OTV_Validator valid );
-
- /* lookups must already be validated */
- FT_LOCAL( void )
- otv_FeatureList_validate( FT_Bytes table,
- FT_Bytes lookups,
- OTV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LANGUAGE SYSTEM *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_LangSys_validate( FT_Bytes table,
- OTV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SCRIPTS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( void )
- otv_Script_validate( FT_Bytes table,
- OTV_Validator valid );
-
- /* features must already be validated */
- FT_LOCAL( void )
- otv_ScriptList_validate( FT_Bytes table,
- FT_Bytes features,
- OTV_Validator valid );
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 valid );
-
-#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 valid );
-
-#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 valid );
-
-#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 valid );
-
-#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 valid );
-
-#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 valid );
-
-#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 valid );
-
-#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 valid );
-
-#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 valid );
-
-
- 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/Build/source/libs/freetype2/src/otvalid/otverror.h b/Build/source/libs/freetype2/src/otvalid/otverror.h
deleted file mode 100644
index 041b538368c..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otverror.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/***************************************************************************/
-/* */
-/* otverror.h */
-/* */
-/* OpenType validation module error codes (specification only). */
-/* */
-/* Copyright 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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__
-
-#define FT_ERR_PREFIX OTV_Err_
-#define FT_ERR_BASE FT_Mod_Err_OTvalid
-
-#define FT_KEEP_ERR_PREFIX
-
-#include FT_ERRORS_H
-
-#endif /* __OTVERROR_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvgdef.c b/Build/source/libs/freetype2/src/otvalid/otvgdef.c
deleted file mode 100644
index 77bd651659c..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvgdef.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgdef.c */
-/* */
-/* OpenType GDEF table validation (body). */
-/* */
-/* Copyright 2004, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 valid )
- {
- 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, valid, GlyphCount );
- if ( GlyphCount != otv_Coverage_get_count( Coverage ) )
- FT_INVALID_DATA;
-
- OTV_LIMIT_CHECK( GlyphCount * 2 );
-
- valid->nesting_level++;
- func = valid->func[valid->nesting_level];
- valid->extra1 = 0;
-
- for ( ; GlyphCount > 0; GlyphCount-- )
- func( table + FT_NEXT_USHORT( p ), valid );
-
- valid->nesting_level--;
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** LIGATURE CARETS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define CaretValueFunc otv_CaretValue_validate
-
- static void
- otv_CaretValue_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ), valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GDEF TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- otv_GDEF_validate( FT_Bytes table,
- FT_Bytes gsub,
- FT_Bytes gpos,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec validrec;
- OTV_Validator valid = &validrec;
- 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 );
-
-
- valid->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 */
-
- OTV_OPTIONAL_OFFSET( GlyphClassDef );
- OTV_SIZE_CHECK( GlyphClassDef );
- if ( GlyphClassDef )
- otv_ClassDef_validate( table + GlyphClassDef, valid );
-
- OTV_OPTIONAL_OFFSET( AttachListOffset );
- OTV_SIZE_CHECK( AttachListOffset );
- if ( AttachListOffset )
- {
- OTV_NEST2( AttachList, AttachPoint );
- OTV_RUN( table + AttachListOffset, valid );
- }
-
- OTV_OPTIONAL_OFFSET( LigCaretListOffset );
- OTV_SIZE_CHECK( LigCaretListOffset );
- if ( LigCaretListOffset )
- {
- OTV_NEST3( LigCaretList, LigGlyph, CaretValue );
- OTV_RUN( table + LigCaretListOffset, valid );
- }
-
- if ( need_MarkAttachClassDef )
- {
- OTV_OPTIONAL_OFFSET( MarkAttachClassDef );
- OTV_SIZE_CHECK( MarkAttachClassDef );
- if ( MarkAttachClassDef )
- otv_ClassDef_validate( table + MarkAttachClassDef, valid );
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvgpos.c b/Build/source/libs/freetype2/src/otvalid/otvgpos.c
deleted file mode 100644
index 53025ec5e66..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvgpos.c
+++ /dev/null
@@ -1,1016 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgpos.c */
-/* */
-/* OpenType GPOS table validation (body). */
-/* */
-/* Copyright 2002, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 valid )
- {
- 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 * valid->extra1 * 2 );
-
- table_size = Count * valid->extra1 * 2 + 2;
-
- for ( ; Count > 0; Count-- )
- for ( count1 = valid->extra1; count1 > 0; count1-- )
- {
- OTV_OPTIONAL_TABLE( anchor_offset );
-
-
- OTV_OPTIONAL_OFFSET( anchor_offset );
-
- if ( valid->extra2 )
- {
- OTV_SIZE_CHECK( anchor_offset );
- if ( anchor_offset )
- otv_Anchor_validate( table + anchor_offset, valid );
- }
- else
- otv_Anchor_validate( table + anchor_offset, valid );
- }
-
- 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 valid->extra1 (class count) */
-
- static void
- otv_u_O_O_u_O_O( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, -1 );
- otv_Coverage_validate( table + Coverage2, valid, -1 );
-
- otv_MarkArray_validate( table + Array1, valid );
-
- valid->nesting_level++;
- func = valid->func[valid->nesting_level];
- valid->extra1 = ClassCount;
-
- func( table + Array2, valid );
-
- valid->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 valid->extra3 (pointer to base table) */
-
- static void
- otv_ValueRecord_validate( FT_Bytes table,
- FT_UInt format,
- OTV_Validator valid )
- {
- 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_UInt 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 - valid->extra3;
-
- OTV_SIZE_CHECK( device );
- if ( device )
- otv_Device_validate( valid->extra3 + device, valid );
- }
- format >>= 1;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** ANCHORS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_Anchor_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid );
-
- OTV_SIZE_CHECK( YDeviceTable );
- if ( YDeviceTable )
- otv_Device_validate( table + YDeviceTable, valid );
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MARK ARRAYS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MarkArray_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ), valid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 1 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra3 (pointer to base table) */
-
- static void
- otv_SinglePos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ));
-
- valid->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, valid, -1 );
- otv_ValueRecord_validate( p, ValueFormat, valid ); /* 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, valid, ValueCount );
-
- OTV_LIMIT_CHECK( ValueCount * len_value );
-
- /* Value */
- for ( ; ValueCount > 0; ValueCount-- )
- {
- otv_ValueRecord_validate( p, ValueFormat, valid );
- 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 valid )
- {
- 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, valid ); /* Value1 */
- p += value_len1;
-
- if ( format2 )
- otv_ValueRecord_validate( p, format2, valid ); /* Value2 */
- p += value_len2;
- }
-
- OTV_EXIT;
- }
-
-
- /* sets valid->extra3 (pointer to base table) */
-
- static void
- otv_PairPos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 ));
-
- valid->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, valid, -1 );
-
- OTV_LIMIT_CHECK( PairSetCount * 2 );
-
- /* PairSetOffset */
- for ( ; PairSetCount > 0; PairSetCount-- )
- otv_PairSet_validate( table + FT_NEXT_USHORT( p ),
- ValueFormat1, ValueFormat2, valid );
- }
- 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, valid, -1 );
- otv_ClassDef_validate( table + ClassDef1, valid );
- otv_ClassDef_validate( table + ClassDef2, valid );
-
- 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, valid );
- p += len_value1;
-
- if ( ValueFormat2 )
- /* Value2 */
- otv_ValueRecord_validate( p, ValueFormat2, valid );
- p += len_value2;
- }
- }
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 3 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_CursivePos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, 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, valid );
-
- OTV_SIZE_CHECK( ExitAnchor );
- if ( ExitAnchor )
- otv_Anchor_validate( table + ExitAnchor, valid );
- }
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 4 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* UNDOCUMENTED (in OpenType 1.5): */
- /* BaseRecord tables can contain NULL pointers. */
-
- /* sets valid->extra2 (1) */
-
- static void
- otv_MarkBasePos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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:
- valid->extra2 = 1;
- OTV_NEST2( MarkBasePosFormat1, BaseArray );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 5 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra2 (1) */
-
- static void
- otv_MarkLigPos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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:
- valid->extra2 = 1;
- OTV_NEST3( MarkLigPosFormat1, LigatureArray, LigatureAttach );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 6 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra2 (0) */
-
- static void
- otv_MarkMarkPos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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:
- valid->extra2 = 0;
- OTV_NEST2( MarkMarkPosFormat1, Mark2Array );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 7 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra1 (lookup count) */
-
- static void
- otv_ContextPos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 */
-
- valid->extra1 = valid->lookup_count;
- OTV_NEST3( ContextPosFormat1, PosRuleSet, PosRule );
- OTV_RUN( table, valid );
- 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, valid );
- break;
-
- case 3:
- OTV_NEST1( ContextPosFormat3 );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 8 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra1 (lookup count) */
-
- static void
- otv_ChainContextPos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 */
-
- valid->extra1 = valid->lookup_count;
- OTV_NEST3( ChainContextPosFormat1,
- ChainPosRuleSet, ChainPosRule );
- OTV_RUN( table, valid );
- 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, valid );
- break;
-
- case 3:
- OTV_NEST1( ChainContextPosFormat3 );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS LOOKUP TYPE 9 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses valid->type_funcs */
-
- static void
- otv_ExtensionPos_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, 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 = valid->type_funcs[ExtensionLookupType - 1];
- validate( table + ExtensionOffset, valid );
- }
- 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 valid->type_count */
- /* sets valid->type_funcs */
-
- FT_LOCAL_DEF( void )
- otv_GPOS_subtable_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- valid->type_count = 9;
- valid->type_funcs = (OTV_Validate_Func*)otv_gpos_validate_funcs;
-
- otv_Lookup_validate( table, valid );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GPOS TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_GPOS_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec validrec;
- OTV_Validator valid = &validrec;
- FT_Bytes p = table;
- FT_UInt ScriptList, FeatureList, LookupList;
-
-
- valid->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 );
-
- valid->type_count = 9;
- valid->type_funcs = (OTV_Validate_Func*)otv_gpos_validate_funcs;
- valid->glyph_count = glyph_count;
-
- otv_LookupList_validate( table + LookupList,
- valid );
- otv_FeatureList_validate( table + FeatureList, table + LookupList,
- valid );
- otv_ScriptList_validate( table + ScriptList, table + FeatureList,
- valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvgpos.h b/Build/source/libs/freetype2/src/otvalid/otvgpos.h
deleted file mode 100644
index 14ca408261d..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvgpos.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgpos.h */
-/* */
-/* OpenType GPOS table validator (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/otvalid/otvgsub.c b/Build/source/libs/freetype2/src/otvalid/otvgsub.c
deleted file mode 100644
index f01fca1e897..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvgsub.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvgsub.c */
-/* */
-/* OpenType GSUB table validation (body). */
-/* */
-/* Copyright 2004, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 valid->glyph_count */
-
- static void
- otv_SingleSubst_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, -1 );
-
- idx = otv_Coverage_get_first( Coverage ) + DeltaGlyphID;
- if ( idx < 0 )
- FT_INVALID_DATA;
-
- idx = otv_Coverage_get_last( Coverage ) + DeltaGlyphID;
- if ( (FT_UInt)idx >= valid->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, valid, GlyphCount );
-
- OTV_LIMIT_CHECK( GlyphCount * 2 );
-
- /* Substitute */
- for ( ; GlyphCount > 0; GlyphCount-- )
- if ( FT_NEXT_USHORT( p ) >= valid->glyph_count )
- FT_INVALID_GLYPH_ID;
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 2 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra1 (glyph count) */
-
- static void
- otv_MultipleSubst_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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:
- valid->extra1 = valid->glyph_count;
- OTV_NEST2( MultipleSubstFormat1, Sequence );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 3 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra1 (glyph count) */
-
- static void
- otv_AlternateSubst_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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:
- valid->extra1 = valid->glyph_count;
- OTV_NEST2( AlternateSubstFormat1, AlternateSet );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 4 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define LigatureFunc otv_Ligature_validate
-
- /* uses valid->glyph_count */
-
- static void
- otv_Ligature_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- FT_Bytes p = table;
- FT_UInt LigatureGlyph, CompCount;
-
-
- OTV_ENTER;
-
- OTV_LIMIT_CHECK( 4 );
- LigatureGlyph = FT_NEXT_USHORT( p );
- if ( LigatureGlyph >= valid->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 valid )
- {
- 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, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 5 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra1 (lookup count) */
-
- static void
- otv_ContextSubst_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 */
-
- valid->extra1 = valid->lookup_count;
- OTV_NEST3( ContextSubstFormat1, SubRuleSet, SubRule );
- OTV_RUN( table, valid );
- 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, valid );
- break;
-
- case 3:
- OTV_NEST1( ContextSubstFormat3 );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 6 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->extra1 (lookup count) */
-
- static void
- otv_ChainContextSubst_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 */
-
- valid->extra1 = valid->lookup_count;
- OTV_NEST3( ChainContextSubstFormat1,
- ChainSubRuleSet, ChainSubRule );
- OTV_RUN( table, valid );
- 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, valid );
- break;
-
- case 3:
- OTV_NEST1( ChainContextSubstFormat3 );
- OTV_RUN( table, valid );
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 7 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses valid->type_funcs */
-
- static void
- otv_ExtensionSubst_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, 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 = valid->type_funcs[ExtensionLookupType - 1];
- validate( table + ExtensionOffset, valid );
- }
- break;
-
- default:
- FT_INVALID_FORMAT;
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** GSUB LOOKUP TYPE 8 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* uses valid->glyph_count */
-
- static void
- otv_ReverseChainSingleSubst_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, -1 );
-
- OTV_LIMIT_CHECK( BacktrackGlyphCount * 2 + 2 );
-
- for ( ; BacktrackGlyphCount > 0; BacktrackGlyphCount-- )
- otv_Coverage_validate( table + FT_NEXT_USHORT( p ), valid, -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 ), valid, -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 ) >= valid->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 valid->type_count */
- /* sets valid->type_funcs */
- /* sets valid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_GSUB_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec validrec;
- OTV_Validator valid = &validrec;
- FT_Bytes p = table;
- FT_UInt ScriptList, FeatureList, LookupList;
-
-
- valid->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 );
-
- valid->type_count = 8;
- valid->type_funcs = (OTV_Validate_Func*)otv_gsub_validate_funcs;
- valid->glyph_count = glyph_count;
-
- otv_LookupList_validate( table + LookupList,
- valid );
- otv_FeatureList_validate( table + FeatureList, table + LookupList,
- valid );
- otv_ScriptList_validate( table + ScriptList, table + FeatureList,
- valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvjstf.c b/Build/source/libs/freetype2/src/otvalid/otvjstf.c
deleted file mode 100644
index a616a23432c..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvjstf.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvjstf.c */
-/* */
-/* OpenType JSTF table validation (body). */
-/* */
-/* Copyright 2004, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 valid->extra1 (GSUB lookup count) */
- /* uses valid->extra2 (GPOS lookup count) */
- /* sets valid->extra1 (counter) */
-
- static void
- otv_JstfPriority_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 = valid->extra1;
- gpos_lookup_count = valid->extra2;
-
- table_size = 20;
-
- valid->extra1 = gsub_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ShrinkageEnableGSUB );
- OTV_SIZE_CHECK( ShrinkageEnableGSUB );
- if ( ShrinkageEnableGSUB )
- otv_x_ux( table + ShrinkageEnableGSUB, valid );
-
- OTV_OPTIONAL_OFFSET( ShrinkageDisableGSUB );
- OTV_SIZE_CHECK( ShrinkageDisableGSUB );
- if ( ShrinkageDisableGSUB )
- otv_x_ux( table + ShrinkageDisableGSUB, valid );
-
- valid->extra1 = gpos_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ShrinkageEnableGPOS );
- OTV_SIZE_CHECK( ShrinkageEnableGPOS );
- if ( ShrinkageEnableGPOS )
- otv_x_ux( table + ShrinkageEnableGPOS, valid );
-
- OTV_OPTIONAL_OFFSET( ShrinkageDisableGPOS );
- OTV_SIZE_CHECK( ShrinkageDisableGPOS );
- if ( ShrinkageDisableGPOS )
- otv_x_ux( table + ShrinkageDisableGPOS, valid );
-
- OTV_OPTIONAL_OFFSET( ShrinkageJstfMax );
- OTV_SIZE_CHECK( ShrinkageJstfMax );
- if ( ShrinkageJstfMax )
- {
- /* XXX: check lookup types? */
- OTV_NEST2( JstfMax, JstfLookup );
- OTV_RUN( table + ShrinkageJstfMax, valid );
- }
-
- valid->extra1 = gsub_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ExtensionEnableGSUB );
- OTV_SIZE_CHECK( ExtensionEnableGSUB );
- if ( ExtensionEnableGSUB )
- otv_x_ux( table + ExtensionEnableGSUB, valid );
-
- OTV_OPTIONAL_OFFSET( ExtensionDisableGSUB );
- OTV_SIZE_CHECK( ExtensionDisableGSUB );
- if ( ExtensionDisableGSUB )
- otv_x_ux( table + ExtensionDisableGSUB, valid );
-
- valid->extra1 = gpos_lookup_count;
-
- OTV_OPTIONAL_OFFSET( ExtensionEnableGPOS );
- OTV_SIZE_CHECK( ExtensionEnableGPOS );
- if ( ExtensionEnableGPOS )
- otv_x_ux( table + ExtensionEnableGPOS, valid );
-
- OTV_OPTIONAL_OFFSET( ExtensionDisableGPOS );
- OTV_SIZE_CHECK( ExtensionDisableGPOS );
- if ( ExtensionDisableGPOS )
- otv_x_ux( table + ExtensionDisableGPOS, valid );
-
- OTV_OPTIONAL_OFFSET( ExtensionJstfMax );
- OTV_SIZE_CHECK( ExtensionJstfMax );
- if ( ExtensionJstfMax )
- {
- /* XXX: check lookup types? */
- OTV_NEST2( JstfMax, JstfLookup );
- OTV_RUN( table + ExtensionJstfMax, valid );
- }
-
- valid->extra1 = gsub_lookup_count;
- valid->extra2 = gpos_lookup_count;
-
- OTV_EXIT;
- }
-
-
- /* sets valid->extra (glyph count) */
- /* sets valid->func1 (otv_JstfPriority_validate) */
-
- static void
- otv_JstfScript_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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 )
- {
- valid->extra1 = valid->glyph_count;
- OTV_NEST1( ExtenderGlyph );
- OTV_RUN( table + ExtGlyph, valid );
- }
-
- OTV_SIZE_CHECK( DefJstfLangSys );
- if ( DefJstfLangSys )
- {
- OTV_NEST2( JstfLangSys, JstfPriority );
- OTV_RUN( table + DefJstfLangSys, valid );
- }
-
- 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 ), valid );
- }
-
- OTV_EXIT;
- }
-
-
- /* sets valid->extra1 (GSUB lookup count) */
- /* sets valid->extra2 (GPOS lookup count) */
- /* sets valid->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 validrec;
- OTV_Validator valid = &validrec;
- FT_Bytes p = table;
- FT_UInt JstfScriptCount;
-
-
- valid->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 )
- valid->extra1 = otv_GSUBGPOS_get_Lookup_count( gsub );
- else
- valid->extra1 = 0;
-
- if ( gpos )
- valid->extra2 = otv_GSUBGPOS_get_Lookup_count( gpos );
- else
- valid->extra2 = 0;
-
- valid->glyph_count = glyph_count;
-
- /* JstfScriptRecord */
- for ( ; JstfScriptCount > 0; JstfScriptCount-- )
- {
- p += 4; /* skip JstfScriptTag */
-
- /* JstfScript */
- otv_JstfScript_validate( table + FT_NEXT_USHORT( p ), valid );
- }
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvmath.c b/Build/source/libs/freetype2/src/otvalid/otvmath.c
deleted file mode 100644
index b777d6a0c9e..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvmath.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvmath.c */
-/* */
-/* OpenType MATH table validation (body). */
-/* */
-/* Copyright 2007 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 valid )
- {
- 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, valid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH ITALICS CORRECTION *****/
- /***** MATH TOP ACCENT ATTACHMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MathItalicsCorrectionInfo_validate( FT_Bytes table,
- OTV_Validator valid,
- FT_Int isItalic )
- {
- FT_Bytes p = table;
- FT_UInt i, cnt, table_size ;
-
- OTV_OPTIONAL_TABLE( Coverage );
- OTV_OPTIONAL_TABLE( DeviceTableOffset );
-
-
- 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, valid, 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, valid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH KERNING *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MathKern_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid );
- }
-
- /* 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, valid );
- }
-
- OTV_EXIT;
- }
-
-
- static void
- otv_MathKernInfo_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, 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, valid );
- }
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH GLYPH INFO *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_MathGlyphInfo_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, TRUE );
-
- /* Italic correction and Top Accent Attachment have the same format */
- if ( MathTopAccentAttachment )
- otv_MathItalicsCorrectionInfo_validate(
- table + MathTopAccentAttachment, valid, FALSE );
-
- if ( ExtendedShapeCoverage ) {
- OTV_NAME_ENTER( "ExtendedShapeCoverage" );
- otv_Coverage_validate( table + ExtendedShapeCoverage, valid, -1 );
- OTV_EXIT;
- }
-
- if ( MathKernInfo )
- otv_MathKernInfo_validate( table + MathKernInfo, valid );
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH GLYPH CONSTRUCTION *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- static void
- otv_GlyphAssembly_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid );
-
- for ( i = 0; i < pcnt; ++i )
- {
- FT_UInt gid;
-
-
- gid = FT_NEXT_USHORT( p );
- if ( gid >= valid->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 valid )
- {
- 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 >= valid->glyph_count )
- FT_INVALID_GLYPH_ID;
- p += 2; /* skip the size */
- }
-
- OTV_SIZE_CHECK( GlyphAssembly );
- if ( GlyphAssembly )
- otv_GlyphAssembly_validate( table+GlyphAssembly, valid );
-
- /* OTV_EXIT; */
- }
-
-
- static void
- otv_MathVariants_validate( FT_Bytes table,
- OTV_Validator valid )
- {
- 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, valid, vcnt );
-
- OTV_SIZE_CHECK( HCoverage );
- if ( HCoverage )
- otv_Coverage_validate( table + HCoverage, valid, hcnt );
-
- for ( i = 0; i < vcnt; ++i )
- {
- OTV_OPTIONAL_OFFSET( Offset );
- OTV_SIZE_CHECK( Offset );
- otv_MathGlyphConstruction_validate( table + Offset, valid );
- }
-
- for ( i = 0; i < hcnt; ++i )
- {
- OTV_OPTIONAL_OFFSET( Offset );
- OTV_SIZE_CHECK( Offset );
- otv_MathGlyphConstruction_validate( table + Offset, valid );
- }
-
- OTV_EXIT;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MATH TABLE *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* sets valid->glyph_count */
-
- FT_LOCAL_DEF( void )
- otv_MATH_validate( FT_Bytes table,
- FT_UInt glyph_count,
- FT_Validator ftvalid )
- {
- OTV_ValidatorRec validrec;
- OTV_Validator valid = &validrec;
- FT_Bytes p = table;
- FT_UInt MathConstants, MathGlyphInfo, MathVariants;
-
-
- valid->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 );
-
- valid->glyph_count = glyph_count;
-
- otv_MathConstants_validate( table + MathConstants,
- valid );
- otv_MathGlyphInfo_validate( table + MathGlyphInfo,
- valid );
- otv_MathVariants_validate ( table + MathVariants,
- valid );
-
- FT_TRACE4(( "\n" ));
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvmod.c b/Build/source/libs/freetype2/src/otvalid/otvmod.c
deleted file mode 100644
index c280299152c..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvmod.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvmod.c */
-/* */
-/* FreeType's OpenType validation module implementation (body). */
-/* */
-/* Copyright 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 ( error == OTV_Err_Table_Missing )
- return OTV_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 = OTV_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_ValidatorRec volatile valid;
-
-
- base = gdef = gpos = gsub = jstf = math = NULL;
- len_base = len_gdef = len_gpos = len_gsub = len_jstf = len_math = 0;
-
- /* 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, face->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, face->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, &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, face->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, face->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
- };
-
-
- 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,
-
- 0, /* module-specific interface */
-
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) otvalid_get_service
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/otvmod.h b/Build/source/libs/freetype2/src/otvalid/otvmod.h
deleted file mode 100644
index 1bfc1899fe3..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/otvmod.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* otvmod.h */
-/* */
-/* FreeType's OpenType validation module implementation */
-/* (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __OTVMOD_H__
-#define __OTVMOD_H__
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) otv_module_class;
-
-
-FT_END_HEADER
-
-#endif /* __OTVMOD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/otvalid/rules.mk b/Build/source/libs/freetype2/src/otvalid/rules.mk
deleted file mode 100644
index 53bd41e5e7d..00000000000
--- a/Build/source/libs/freetype2/src/otvalid/rules.mk
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# FreeType 2 OpenType validation driver configuration rules
-#
-
-
-# Copyright 2004, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(OTV_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/pcf/Jamfile b/Build/source/libs/freetype2/src/pcf/Jamfile
deleted file mode 100644
index 752fcac2a11..00000000000
--- a/Build/source/libs/freetype2/src/pcf/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/pcf Jamfile
-#
-# 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.
-
-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/Build/source/libs/freetype2/src/pcf/README b/Build/source/libs/freetype2/src/pcf/README
deleted file mode 100644
index cc1480b2d2b..00000000000
--- a/Build/source/libs/freetype2/src/pcf/README
+++ /dev/null
@@ -1,114 +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
-*********
-
-The variety of encodings that accompanies pcf fonts appears to encompass the
-small set defined in freetype.h. On the other hand, each pcf font defines
-two properties that specify encoding and registry.
-
-I decided to make these two properties directly accessible, leaving to the
-client application the work of interpreting them. For instance:
-
- #include "pcftypes.h" /* include/freetype/internal/pcftypes.h */
-
- FT_Face face;
- PCF_Public_Face pcfface;
-
- FT_New_Face( library,..., &face );
-
- pcfface = (PCF_Public_Face)face;
-
- if ((pcfface->charset_registry == "ISO10646") &&
- (pcfface->charset_encoding) == "1")) [..]
-
-Thus the driver always export `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/Build/source/libs/freetype2/src/pcf/module.mk b/Build/source/libs/freetype2/src/pcf/module.mk
deleted file mode 100644
index 0c51cd6fc42..00000000000
--- a/Build/source/libs/freetype2/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)pcf_driver_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)pcf $(ECHO_DRIVER_DESC)pcf bitmap fonts$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/pcf/pcf.c b/Build/source/libs/freetype2/src/pcf/pcf.c
deleted file mode 100644
index 11d5b7b2a06..00000000000
--- a/Build/source/libs/freetype2/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 "pcfutil.c"
-#include "pcfread.c"
-#include "pcfdrivr.c"
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pcf/pcf.h b/Build/source/libs/freetype2/src/pcf/pcf.h
deleted file mode 100644
index 9d2d8e0e429..00000000000
--- a/Build/source/libs/freetype2/src/pcf/pcf.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/* pcf.h
-
- FreeType font driver for pcf fonts
-
- Copyright (C) 2000, 2001, 2002, 2003, 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.
-*/
-
-
-#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 integer;
- FT_ULong cardinal;
-
- } 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 gzip_stream;
- FT_Stream gzip_source;
-
- char* charset_encoding;
- char* charset_registry;
-
- PCF_TocRec toc;
- PCF_AccelRec accel;
-
- int nprops;
- PCF_Property properties;
-
- FT_Long nmetrics;
- PCF_Metric metrics;
- FT_Long 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;
-
-
- /* 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,
- PCF_Face );
-
-FT_END_HEADER
-
-#endif /* __PCF_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pcf/pcfdrivr.c b/Build/source/libs/freetype2/src/pcf/pcfdrivr.c
deleted file mode 100644
index 0fea30e8cbc..00000000000
--- a/Build/source/libs/freetype2/src/pcf/pcfdrivr.c
+++ /dev/null
@@ -1,674 +0,0 @@
-/* pcfdrivr.c
-
- FreeType font driver for pcf files
-
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2007, 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.
-*/
-
-
-#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_ERRORS_H
-#include FT_BDF_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_XFREE86_NAME_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_UInt 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 = (FT_UInt)face->nencodings;
- cmap->encodings = face->encodings;
-
- return PCF_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_UInt min, max, mid;
- FT_UInt result = 0;
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_UInt32 code;
-
-
- mid = ( min + max ) >> 1;
- code = 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_UInt min, max, mid;
- FT_UInt32 charcode = *acharcode + 1;
- FT_UInt result = 0;
-
-
- min = 0;
- max = cmap->num_encodings;
-
- while ( min < max )
- {
- FT_UInt32 code;
-
-
- mid = ( min + max ) >> 1;
- code = 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 = encodings[min].enc;
- result = encodings[min].glyph + 1;
- }
-
- Exit:
- *acharcode = charcode;
- return result;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- 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 = FT_FACE_MEMORY( face );
-
-
- FT_FREE( face->encodings );
- FT_FREE( face->metrics );
-
- /* free properties */
- {
- PCF_Property prop;
- FT_Int i;
-
-
- if ( face->properties )
- {
- for ( i = 0; i < face->nprops; i++ )
- {
- 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 );
-
- FT_TRACE4(( "PCF_Face_Done: done face\n" ));
-
- /* close gzip/LZW stream if any */
- if ( pcfface->stream == &face->gzip_stream )
- {
- FT_Stream_Close( &face->gzip_stream );
- pcfface->stream = face->gzip_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 = PCF_Err_Ok;
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
- FT_UNUSED( face_index );
-
-
- error = pcf_load_font( stream, face );
- if ( error )
- {
- FT_Error error2;
-
-
- PCF_Face_Done( pcfface );
-
- /* this didn't work, try gzip support! */
- error2 = FT_Stream_OpenGzip( &face->gzip_stream, stream );
- if ( FT_ERROR_BASE( error2 ) == FT_Err_Unimplemented_Feature )
- goto Fail;
-
- error = error2;
- if ( error )
-#ifdef FT_CONFIG_OPTION_USE_LZW
- {
- FT_Error error3;
-
-
- /* this didn't work, try LZW support! */
- error3 = FT_Stream_OpenLZW( &face->gzip_stream, stream );
- if ( FT_ERROR_BASE( error3 ) == FT_Err_Unimplemented_Feature )
- goto Fail;
-
- error = error3;
- if ( error )
- goto Fail;
-
- face->gzip_source = stream;
- pcfface->stream = &face->gzip_stream;
-
- stream = pcfface->stream;
-
- error = pcf_load_font( stream, face );
- if ( error )
- goto Fail;
- }
-#else
- goto Fail;
-#endif
- else
- {
- face->gzip_source = stream;
- pcfface->stream = &face->gzip_stream;
-
- stream = pcfface->stream;
-
- error = pcf_load_font( stream, face );
- if ( error )
- goto Fail;
- }
- }
-
- /* 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;
- }
- }
-
- {
- FT_CharMapRec charmap;
-
-
- charmap.face = FT_FACE( face );
- charmap.encoding = FT_ENCODING_NONE;
- charmap.platform_id = 0;
- charmap.encoding_id = 0;
-
- if ( unicode_charmap )
- {
- charmap.encoding = FT_ENCODING_UNICODE;
- charmap.platform_id = 3;
- charmap.encoding_id = 1;
- }
-
- error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( pcfface->num_charmaps )
- pcfface->charmap = pcfface->charmaps[0];
-#endif
- }
- }
-
- Exit:
- return error;
-
- Fail:
- FT_TRACE2(( "[not a valid PCF file]\n" ));
- PCF_Face_Done( pcfface );
- error = PCF_Err_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 << 6;
- size->metrics.descender = -accel->fontDescent << 6;
- size->metrics.max_advance = accel->maxbounds.characterWidth << 6;
-
- return PCF_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 = PCF_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 = PCF_Err_Ok;
- break;
-
- case FT_SIZE_REQUEST_TYPE_REAL_DIM:
- if ( height == ( face->accel.fontAscent +
- face->accel.fontDescent ) )
- error = PCF_Err_Ok;
- break;
-
- default:
- error = PCF_Err_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 = face->root.stream;
- FT_Error error = PCF_Err_Ok;
- FT_Bitmap* bitmap = &slot->bitmap;
- PCF_Metric metric;
- int bytes;
-
- FT_UNUSED( load_flags );
-
-
- FT_TRACE4(( "load_glyph %d ---", glyph_index ));
-
- if ( !face || glyph_index >= (FT_UInt)face->root.num_glyphs )
- {
- error = PCF_Err_Invalid_Argument;
- goto Exit;
- }
-
- if ( glyph_index > 0 )
- glyph_index--;
-
- metric = face->metrics + glyph_index;
-
- bitmap->rows = metric->ascent + metric->descent;
- bitmap->width = metric->rightSideBearing - metric->leftSideBearing;
- bitmap->num_grays = 1;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
-
- FT_TRACE6(( "BIT_ORDER %d ; BYTE_ORDER %d ; GLYPH_PAD %d\n",
- PCF_BIT_ORDER( face->bitmapsFormat ),
- PCF_BYTE_ORDER( face->bitmapsFormat ),
- PCF_GLYPH_PAD( face->bitmapsFormat ) ));
-
- switch ( PCF_GLYPH_PAD( face->bitmapsFormat ) )
- {
- case 1:
- bitmap->pitch = ( bitmap->width + 7 ) >> 3;
- break;
-
- case 2:
- bitmap->pitch = ( ( bitmap->width + 15 ) >> 4 ) << 1;
- break;
-
- case 4:
- bitmap->pitch = ( ( bitmap->width + 31 ) >> 5 ) << 2;
- break;
-
- case 8:
- bitmap->pitch = ( ( bitmap->width + 63 ) >> 6 ) << 3;
- break;
-
- default:
- return PCF_Err_Invalid_File_Format;
- }
-
- /* XXX: to do: are there cases that need repadding the bitmap? */
- bytes = bitmap->pitch * bitmap->rows;
-
- error = ft_glyphslot_alloc_bitmap( slot, 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;
- }
- }
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = metric->leftSideBearing;
- slot->bitmap_top = metric->ascent;
-
- slot->metrics.horiAdvance = metric->characterWidth << 6;
- slot->metrics.horiBearingX = metric->leftSideBearing << 6;
- slot->metrics.horiBearingY = metric->ascent << 6;
- slot->metrics.width = ( metric->rightSideBearing -
- metric->leftSideBearing ) << 6;
- slot->metrics.height = bitmap->rows << 6;
-
- ft_synthesize_vertical_metrics( &slot->metrics,
- ( face->accel.fontAscent +
- face->accel.fontDescent ) << 6 );
-
- FT_TRACE4(( " --- ok\n" ));
-
- 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 != NULL )
- {
- if ( prop->isString )
- {
- aproperty->type = BDF_PROPERTY_TYPE_ATOM;
- aproperty->u.atom = prop->value.atom;
- }
- else
- {
- /* Apparently, 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 = prop->value.integer;
- }
- return 0;
- }
-
- return PCF_Err_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 0;
- }
-
-
- static const FT_Service_BDFRec pcf_service_bdf =
- {
- (FT_BDF_GetCharsetIdFunc)pcf_get_charset_id,
- (FT_BDF_GetPropertyFunc) pcf_get_bdf_property
- };
-
-
- /*
- *
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec pcf_services[] =
- {
- { FT_SERVICE_ID_BDF, &pcf_service_bdf },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_PCF },
- { 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_TABLE_DEF
- const FT_Driver_ClassRec pcf_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_NO_OUTLINES,
- sizeof ( FT_DriverRec ),
-
- "pcf",
- 0x10000L,
- 0x20000L,
-
- 0,
-
- 0,
- 0,
- pcf_driver_requester
- },
-
- sizeof ( PCF_FaceRec ),
- sizeof ( FT_SizeRec ),
- sizeof ( FT_GlyphSlotRec ),
-
- PCF_Face_Init,
- PCF_Face_Done,
- 0, /* FT_Size_InitFunc */
- 0, /* FT_Size_DoneFunc */
- 0, /* FT_Slot_InitFunc */
- 0, /* FT_Slot_DoneFunc */
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
- PCF_Glyph_Load,
-
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
-
- PCF_Size_Request,
- PCF_Size_Select
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pcf/pcfdrivr.h b/Build/source/libs/freetype2/src/pcf/pcfdrivr.h
deleted file mode 100644
index 7ddf697e164..00000000000
--- a/Build/source/libs/freetype2/src/pcf/pcfdrivr.h
+++ /dev/null
@@ -1,44 +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
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) pcf_driver_class;
-
-FT_END_HEADER
-
-
-#endif /* __PCFDRIVR_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pcf/pcferror.h b/Build/source/libs/freetype2/src/pcf/pcferror.h
deleted file mode 100644
index d75c067aa6a..00000000000
--- a/Build/source/libs/freetype2/src/pcf/pcferror.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* pcferror.h */
-/* */
-/* PCF error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/pcf/pcfread.c b/Build/source/libs/freetype2/src/pcf/pcfread.c
deleted file mode 100644
index b9123cf574f..00000000000
--- a/Build/source/libs/freetype2/src/pcf/pcfread.c
+++ /dev/null
@@ -1,1267 +0,0 @@
-/* pcfread.c
-
- FreeType font driver for pcf fonts
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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 "pcfdrivr.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
-
-
-#if defined( FT_DEBUG_LEVEL_TRACE )
- static const char* const tableNames[] =
- {
- "prop", "accl", "mtrcs", "bmps", "imtrcs",
- "enc", "swidth", "names", "accel"
- };
-#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 ),
- 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;
-
-
- if ( FT_STREAM_SEEK ( 0 ) ||
- FT_STREAM_READ_FIELDS ( pcf_toc_header, toc ) )
- return PCF_Err_Cannot_Open_Resource;
-
- if ( toc->version != PCF_FILE_VERSION ||
- toc->count > FT_ARRAY_MAX( face->toc.tables ) ||
- toc->count == 0 )
- return PCF_Err_Invalid_File_Format;
-
- if ( FT_NEW_ARRAY( face->toc.tables, toc->count ) )
- return PCF_Err_Out_Of_Memory;
-
- 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 ) )
- return PCF_Err_Invalid_Offset;
- }
-
- if ( !have_change )
- break;
- }
-
-#if defined( 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 PCF_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 = PCF_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;
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- pcf_seek_to_table_type( FT_Stream stream,
- PCF_Table tables,
- FT_Int ntables,
- FT_ULong type,
- FT_ULong *aformat,
- FT_ULong *asize )
- {
- FT_Error error = PCF_Err_Invalid_File_Format;
- FT_Int i;
-
-
- for ( i = 0; i < ntables; i++ )
- if ( tables[i].type == type )
- {
- if ( stream->pos > tables[i].offset )
- {
- error = PCF_Err_Invalid_Stream_Skip;
- goto Fail;
- }
-
- if ( FT_STREAM_SKIP( tables[i].offset - stream->pos ) )
- {
- error = PCF_Err_Invalid_Stream_Skip;
- goto Fail;
- }
-
- *asize = tables[i].size;
- *aformat = tables[i].format;
-
- return PCF_Err_Ok;
- }
-
- Fail:
- *asize = 0;
- return error;
- }
-
-
- static FT_Bool
- pcf_has_table_type( PCF_Table tables,
- FT_Int ntables,
- FT_ULong type )
- {
- FT_Int 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 = 0;
- PCF_Property properties;
- FT_UInt nprops, i;
- FT_ULong format, size;
- FT_Error error;
- FT_Memory memory = FT_FACE(face)->memory;
- FT_ULong string_size;
- FT_String* strings = 0;
-
-
- 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" ));
-
- FT_TRACE4(( " format = %ld\n", format ));
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- goto Bail;
-
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_ULONG( nprops );
- else
- (void)FT_READ_ULONG_LE( nprops );
- if ( error )
- goto Bail;
-
- FT_TRACE4(( " nprop = %d\n", nprops ));
-
- /* rough estimate */
- if ( nprops > size / PCF_PROPERTY_SIZE )
- {
- error = PCF_Err_Invalid_Table;
- goto Bail;
- }
-
- face->nprops = 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;
- }
- }
-
- /* 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 ( nprops & 3 )
- {
- i = 4 - ( nprops & 3 );
- FT_Stream_Skip( stream, i );
- }
-
- 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 - nprops * PCF_PROPERTY_SIZE )
- {
- error = PCF_Err_Invalid_Table;
- goto Bail;
- }
-
- if ( FT_NEW_ARRAY( strings, string_size ) )
- 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;
-
- for ( i = 0; i < nprops; i++ )
- {
- FT_Long name_offset = props[i].name;
-
-
- if ( ( name_offset < 0 ) ||
- ( (FT_ULong)name_offset > string_size ) )
- {
- error = PCF_Err_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 = PCF_Err_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.integer = props[i].value;
-
- FT_TRACE4(( " %d\n", properties[i].value.integer ));
- }
- }
-
- error = PCF_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 = PCF_Err_Ok;
- FT_Memory memory = FT_FACE(face)->memory;
- FT_ULong format, size;
- PCF_Metric metrics = 0;
- FT_ULong 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;
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) &&
- !PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) )
- return PCF_Err_Invalid_File_Format;
-
- if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_ULONG( nmetrics );
- else
- (void)FT_READ_ULONG_LE( nmetrics );
- }
- else
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_USHORT( nmetrics );
- else
- (void)FT_READ_USHORT_LE( nmetrics );
- }
- if ( error )
- return PCF_Err_Invalid_File_Format;
-
- face->nmetrics = nmetrics;
-
- FT_TRACE4(( "pcf_get_metrics:\n" ));
-
- FT_TRACE4(( " number of metrics: %d\n", nmetrics ));
-
- /* rough estimate */
- if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- {
- if ( nmetrics > size / PCF_METRIC_SIZE )
- return PCF_Err_Invalid_Table;
- }
- else
- {
- if ( nmetrics > size / PCF_COMPRESSED_METRIC_SIZE )
- return PCF_Err_Invalid_Table;
- }
-
- if ( FT_NEW_ARRAY( face->metrics, nmetrics ) )
- return PCF_Err_Out_Of_Memory;
-
- metrics = face->metrics;
- for ( i = 0; i < nmetrics; i++ )
- {
- pcf_get_metric( stream, format, metrics + i );
-
- metrics[i].bits = 0;
-
- FT_TRACE5(( " idx %d: width=%d, "
- "lsb=%d, rsb=%d, ascent=%d, descent=%d, swidth=%d\n",
- i,
- ( metrics + i )->characterWidth,
- ( metrics + i )->leftSideBearing,
- ( metrics + i )->rightSideBearing,
- ( metrics + i )->ascent,
- ( metrics + i )->descent,
- ( metrics + i )->attributes ));
-
- if ( error )
- break;
- }
-
- if ( error )
- FT_FREE( face->metrics );
-
- Bail:
- return error;
- }
-
-
- static FT_Error
- pcf_get_bitmaps( FT_Stream stream,
- PCF_Face face )
- {
- FT_Error error = PCF_Err_Ok;
- FT_Memory memory = FT_FACE(face)->memory;
- FT_Long* offsets;
- FT_Long bitmapSizes[GLYPHPADOPTIONS];
- FT_ULong format, size;
- int 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 )
- nbitmaps = FT_GET_ULONG();
- else
- nbitmaps = FT_GET_ULONG_LE();
-
- FT_Stream_ExitFrame( stream );
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- return PCF_Err_Invalid_File_Format;
-
- FT_TRACE4(( "pcf_get_bitmaps:\n" ));
-
- FT_TRACE4(( " number of bitmaps: %d\n", nbitmaps ));
-
- if ( nbitmaps != face->nmetrics )
- return PCF_Err_Invalid_File_Format;
-
- if ( FT_NEW_ARRAY( offsets, nbitmaps ) )
- return error;
-
- 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 %d: 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 = bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
-
- FT_TRACE4(( " padding %d implies a size of %ld\n", i, bitmapSizes[i] ));
- }
-
- FT_TRACE4(( " %d bitmaps, padding index %ld\n",
- nbitmaps,
- PCF_GLYPH_PAD_INDEX( format ) ));
- FT_TRACE4(( " bitmap size = %d\n", sizebitmaps ));
-
- FT_UNUSED( sizebitmaps ); /* only used for debugging */
-
- for ( i = 0; i < nbitmaps; i++ )
- {
- /* rough estimate */
- if ( ( offsets[i] < 0 ) ||
- ( (FT_ULong)offsets[i] > size ) )
- {
- FT_ERROR(( "pcf_get_bitmaps:"));
- FT_ERROR(( " invalid offset to bitmap data of glyph %d\n", i ));
- }
- else
- face->metrics[i].bits = stream->pos + 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 = PCF_Err_Ok;
- FT_Memory memory = FT_FACE(face)->memory;
- FT_ULong format, size;
- int firstCol, lastCol;
- int firstRow, lastRow;
- int nencoding, encodingOffset;
- int i, j;
- PCF_Encoding tmpEncoding, encoding = 0;
-
-
- 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 );
-
- if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
- return PCF_Err_Invalid_File_Format;
-
- FT_TRACE4(( "pdf_get_encodings:\n" ));
-
- FT_TRACE4(( " firstCol %d, lastCol %d, firstRow %d, lastRow %d\n",
- firstCol, lastCol, firstRow, lastRow ));
-
- nencoding = ( lastCol - firstCol + 1 ) * ( lastRow - firstRow + 1 );
-
- if ( FT_NEW_ARRAY( tmpEncoding, nencoding ) )
- return PCF_Err_Out_Of_Memory;
-
- error = FT_Stream_EnterFrame( stream, 2 * nencoding );
- if ( error )
- goto Bail;
-
- for ( i = 0, j = 0 ; i < nencoding; i++ )
- {
- if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- encodingOffset = FT_GET_SHORT();
- else
- encodingOffset = FT_GET_SHORT_LE();
-
- if ( encodingOffset != -1 )
- {
- tmpEncoding[j].enc = ( ( ( i / ( lastCol - firstCol + 1 ) ) +
- firstRow ) * 256 ) +
- ( ( i % ( lastCol - firstCol + 1 ) ) +
- firstCol );
-
- tmpEncoding[j].glyph = (FT_Short)encodingOffset;
-
- FT_TRACE5(( " code %d (0x%04X): idx %d\n",
- tmpEncoding[j].enc, tmpEncoding[j].enc,
- tmpEncoding[j].glyph ));
-
- j++;
- }
- }
- FT_Stream_ExitFrame( stream );
-
- if ( FT_NEW_ARRAY( encoding, j ) )
- goto Bail;
-
- for ( i = 0; i < j; i++ )
- {
- encoding[i].enc = tmpEncoding[i].enc;
- encoding[i].glyph = tmpEncoding[i].glyph;
- }
-
- face->nencodings = j;
- face->encodings = encoding;
- FT_FREE( tmpEncoding );
-
- return error;
-
- Bail:
- FT_FREE( encoding );
- FT_FREE( tmpEncoding );
- 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_Err_Ok;
- 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;
-
- 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;
- }
-
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->minbounds) );
- if ( error )
- goto Bail;
-
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->maxbounds) );
- if ( error )
- goto Bail;
-
- if ( PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) )
- {
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->ink_minbounds) );
- if ( error )
- goto Bail;
-
- error = pcf_get_metric( stream,
- format & ( ~PCF_FORMAT_MASK ),
- &(accel->ink_maxbounds) );
- if ( error )
- goto Bail;
- }
- else
- {
- accel->ink_minbounds = accel->minbounds; /* I'm not sure about this */
- accel->ink_maxbounds = accel->maxbounds;
- }
-
- Bail:
- return error;
- }
-
-
- static FT_Error
- pcf_interpret_style( PCF_Face pcf )
- {
- FT_Error error = PCF_Err_Ok;
- FT_Face face = FT_FACE( pcf );
- FT_Memory memory = face->memory;
-
- PCF_Property prop;
-
- int nn, len;
- char* strings[4] = { NULL, NULL, NULL, NULL };
- int 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 == NULL )
- 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 )
- {
- int 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_Error error = PCF_Err_Ok;
- FT_Memory memory = FT_FACE(face)->memory;
- FT_Bool hasBDFAccelerators;
-
-
- error = pcf_read_TOC( stream, face );
- if ( error )
- goto Exit;
-
- 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 */
- {
- FT_Face root = FT_FACE( face );
- PCF_Property prop;
-
-
- root->num_faces = 1;
- root->face_index = 0;
- 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 ( ( error = pcf_interpret_style( face ) ) != 0 )
- goto Exit;
-
- prop = pcf_find_property( face, "FAMILY_NAME" );
- if ( prop && prop->isString )
- {
- 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 = 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_MEM_ZERO( bsize, sizeof ( FT_Bitmap_Size ) );
-
-#if 0
- bsize->height = face->accel.maxbounds.ascent << 6;
-#endif
- bsize->height = (FT_Short)( face->accel.fontAscent +
- face->accel.fontDescent );
-
- prop = pcf_find_property( face, "AVERAGE_WIDTH" );
- if ( prop )
- bsize->width = (FT_Short)( ( prop->value.integer + 5 ) / 10 );
- else
- bsize->width = (FT_Short)( bsize->height * 2/3 );
-
- prop = pcf_find_property( face, "POINT_SIZE" );
- if ( prop )
- /* convert from 722.7 decipoints to 72 points per inch */
- bsize->size =
- (FT_Pos)( ( prop->value.integer * 64 * 7200 + 36135L ) / 72270L );
-
- prop = pcf_find_property( face, "PIXEL_SIZE" );
- if ( prop )
- bsize->y_ppem = (FT_Short)prop->value.integer << 6;
-
- prop = pcf_find_property( face, "RESOLUTION_X" );
- if ( prop )
- resolution_x = (FT_Short)prop->value.integer;
-
- prop = pcf_find_property( face, "RESOLUTION_Y" );
- if ( prop )
- resolution_y = (FT_Short)prop->value.integer;
-
- if ( bsize->y_ppem == 0 )
- {
- bsize->y_ppem = bsize->size;
- if ( resolution_y )
- bsize->y_ppem = bsize->y_ppem * resolution_y / 72;
- }
- if ( resolution_x && resolution_y )
- bsize->x_ppem = bsize->y_ppem * resolution_x / resolution_y;
- else
- bsize->x_ppem = bsize->y_ppem;
- }
-
- /* set up charset */
- {
- PCF_Property charset_registry = 0, charset_encoding = 0;
-
-
- 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 = PCF_Err_Invalid_File_Format;
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pcf/pcfread.h b/Build/source/libs/freetype2/src/pcf/pcfread.h
deleted file mode 100644
index c9524f13464..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/pcf/pcfutil.c b/Build/source/libs/freetype2/src/pcf/pcfutil.c
deleted file mode 100644
index 67ddbe8890b..00000000000
--- a/Build/source/libs/freetype2/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,
- int nbytes )
- {
- for ( ; --nbytes >= 0; 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,
- int nbytes )
- {
- unsigned char c;
-
-
- for ( ; nbytes >= 2; nbytes -= 2, buf += 2 )
- {
- 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,
- int nbytes )
- {
- unsigned char c;
-
-
- for ( ; nbytes >= 4; nbytes -= 4, buf += 4 )
- {
- c = buf[0];
- buf[0] = buf[3];
- buf[3] = c;
-
- c = buf[1];
- buf[1] = buf[2];
- buf[2] = c;
- }
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pcf/pcfutil.h b/Build/source/libs/freetype2/src/pcf/pcfutil.h
deleted file mode 100644
index 1557be3e800..00000000000
--- a/Build/source/libs/freetype2/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,
- int nbytes );
-
- FT_LOCAL( void )
- TwoByteSwap( unsigned char* buf,
- int nbytes );
-
- FT_LOCAL( void )
- FourByteSwap( unsigned char* buf,
- int nbytes );
-
-FT_END_HEADER
-
-#endif /* __PCFUTIL_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pcf/rules.mk b/Build/source/libs/freetype2/src/pcf/rules.mk
deleted file mode 100644
index 1ad4ba897a3..00000000000
--- a/Build/source/libs/freetype2/src/pcf/rules.mk
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# FreeType 2 pcf driver configuration rules
-#
-
-
-# Copyright (C) 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.
-
-
-# pcf driver directory
-#
-PCF_DIR := $(SRC_DIR)/pcf
-
-
-PCF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PCF_DIR))
-
-
-# pcf driver sources (i.e., C files)
-#
-PCF_DRV_SRC := $(PCF_DIR)/pcfread.c \
- $(PCF_DIR)/pcfdrivr.c \
- $(PCF_DIR)/pcfutil.c
-
-# pcf driver headers
-#
-PCF_DRV_H := $(PCF_DIR)/pcf.h \
- $(PCF_DIR)/pcfdrivr.h \
- $(PCF_DIR)/pcfutil.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/Build/source/libs/freetype2/src/pfr/Jamfile b/Build/source/libs/freetype2/src/pfr/Jamfile
deleted file mode 100644
index 9e2f2b8d050..00000000000
--- a/Build/source/libs/freetype2/src/pfr/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/pfr Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pfr ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pfrdrivr pfrgload pfrload pfrobjs pfrcmap pfrsbit ;
- }
- else
- {
- _sources = pfr ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pfr Jamfile
diff --git a/Build/source/libs/freetype2/src/pfr/module.mk b/Build/source/libs/freetype2/src/pfr/module.mk
deleted file mode 100644
index 53ab34aa9fe..00000000000
--- a/Build/source/libs/freetype2/src/pfr/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PFR module definition
-#
-
-
-# Copyright 2002, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/pfr/pfr.c b/Build/source/libs/freetype2/src/pfr/pfr.c
deleted file mode 100644
index eb2c4edb7ec..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfr.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfr.c */
-/* */
-/* FreeType PFR driver component. */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-
-#include "pfrload.c"
-#include "pfrgload.c"
-#include "pfrcmap.c"
-#include "pfrobjs.c"
-#include "pfrdrivr.c"
-#include "pfrsbit.c"
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pfr/pfrcmap.c b/Build/source/libs/freetype2/src/pfr/pfrcmap.c
deleted file mode 100644
index d4656d1b5e9..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrcmap.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrcmap.c */
-/* */
-/* FreeType PFR cmap handling (body). */
-/* */
-/* Copyright 2002, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "pfrcmap.h"
-#include "pfrobjs.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "pfrerror.h"
-
-
- FT_CALLBACK_DEF( FT_Error )
- pfr_cmap_init( PFR_CMap cmap )
- {
- FT_Error error = PFR_Err_Ok;
- PFR_Face face = (PFR_Face)FT_CMAP_FACE( cmap );
-
-
- 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 = PFR_Err_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;
- FT_UInt mid;
- PFR_Char gchar;
-
-
- while ( min < max )
- {
- 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_UInt )
- 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,
- (FT_CMap_DoneFunc) pfr_cmap_done,
- (FT_CMap_CharIndexFunc)pfr_cmap_char_index,
- (FT_CMap_CharNextFunc) pfr_cmap_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pfr/pfrcmap.h b/Build/source/libs/freetype2/src/pfr/pfrcmap.h
deleted file mode 100644
index a6269530543..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrcmap.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrcmap.h */
-/* */
-/* FreeType PFR cmap handling (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/pfr/pfrdrivr.c b/Build/source/libs/freetype2/src/pfr/pfrdrivr.c
deleted file mode 100644
index 40206720efb..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrdrivr.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrdrivr.c */
-/* */
-/* FreeType PFR driver interface (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_XFREE86_NAME_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;
-
-
- 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, phys->outline_resolution,
- phys->metrics_resolution );
-
- if ( avector->y != 0 )
- avector->y = FT_MulDiv( avector->x, phys->outline_resolution,
- phys->metrics_resolution );
- }
-
- return PFR_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 = PFR_Err_Bad_Argument;
-
-
- *anadvance = 0;
- if ( face )
- {
- PFR_PhyFont phys = &face->phy_font;
-
-
- if ( gindex < phys->num_chars )
- {
- *anadvance = phys->chars[gindex].advance;
- error = 0;
- }
- }
-
- 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,
- phys->metrics_resolution );
-
- y_scale = FT_DivFix( size->metrics.y_ppem << 6,
- phys->metrics_resolution );
- }
-
- if ( ametrics_x_scale )
- *ametrics_x_scale = x_scale;
-
- if ( ametrics_y_scale )
- *ametrics_y_scale = y_scale;
-
- return PFR_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Service_PfrMetricsRec pfr_metrics_service_rec =
- {
- pfr_get_metrics,
- pfr_face_get_kerning,
- pfr_get_advance
- };
-
-
- /*
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec pfr_services[] =
- {
- { FT_SERVICE_ID_PFR_METRICS, &pfr_metrics_service_rec },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_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,
-
- 0,
- 0,
- pfr_get_service
- },
-
- sizeof( PFR_FaceRec ),
- sizeof( PFR_SizeRec ),
- sizeof( PFR_SlotRec ),
-
- pfr_face_init,
- pfr_face_done,
- 0, /* FT_Size_InitFunc */
- 0, /* FT_Size_DoneFunc */
- pfr_slot_init,
- pfr_slot_done,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
- pfr_slot_load,
-
- pfr_get_kerning,
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
- 0, /* FT_Size_RequestFunc */
- 0, /* FT_Size_SelectFunc */
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pfr/pfrdrivr.h b/Build/source/libs/freetype2/src/pfr/pfrdrivr.h
deleted file mode 100644
index 36f1205b772..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrdrivr.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrdrivr.h */
-/* */
-/* High-level Type PFR driver interface (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __PFRDRIVR_H__
-#define __PFRDRIVR_H__
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) pfr_driver_class;
-
-
-FT_END_HEADER
-
-
-#endif /* __PFRDRIVR_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pfr/pfrerror.h b/Build/source/libs/freetype2/src/pfr/pfrerror.h
deleted file mode 100644
index 2e1c401dd23..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrerror.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrerror.h */
-/* */
-/* PFR error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/pfr/pfrgload.c b/Build/source/libs/freetype2/src/pfr/pfrgload.c
deleted file mode 100644
index 6fe6e4225ab..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrgload.c
+++ /dev/null
@@ -1,828 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrgload.c */
-/* */
-/* FreeType PFR glyph loader (body). */
-/* */
-/* Copyright 2002, 2003, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 than 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 = PFR_Err_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_UInt 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 = PFR_Err_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 = 0;
- 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: for now we ignore the secondary stroke and edge definitions */
- /* since we don't want to support native PFR hinting */
- /* */
- if ( flags & PFR_GLYPH_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 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 = PFR_Err_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 = 0;
- 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_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;
-
-
- 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 ) << 4;
- }
-
- subglyph->y_scale = 0x10000L;
- if ( format & PFR_SUBGLYPH_YSCALE )
- {
- PFR_CHECK( 2 );
- subglyph->y_scale = PFR_NEXT_SHORT( p ) << 4;
- }
-
- /* 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_LONG( p );
- }
- else
- {
- PFR_CHECK( 2 );
- subglyph->gps_offset = PFR_NEXT_USHORT( p );
- }
-
- glyph->num_subs++;
- }
-
- Exit:
- return error;
-
- Failure:
- Too_Short:
- error = PFR_Err_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_Int 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;
-
- /* now, load each individual glyph */
- for ( n = 0; n < count; n++ )
- {
- FT_Int i, old_points, num_points;
- PFR_SubGlyph subglyph;
-
-
- 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 )
- goto Exit;
-
- /* 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 */
- }
- }
- else
- {
- /* 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/Build/source/libs/freetype2/src/pfr/pfrgload.h b/Build/source/libs/freetype2/src/pfr/pfrgload.h
deleted file mode 100644
index 7cc7a8702a4..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrgload.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrgload.h */
-/* */
-/* FreeType PFR glyph loader (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/pfr/pfrload.c b/Build/source/libs/freetype2/src/pfr/pfrload.c
deleted file mode 100644
index 1ee2c1f8c8b..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrload.c
+++ /dev/null
@@ -1,938 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrload.c */
-/* */
-/* FreeType PFR loader (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 = 0;
- 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 = PFR_Err_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_UInt *acount )
- {
- FT_Error error;
- FT_UInt count;
- FT_UInt result = 0;
-
-
- if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT( count ) )
- goto Exit;
-
- result = count;
-
- Exit:
- *acount = 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 PFR_Err_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 = PFR_Err_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 = 0;
-
-
- 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 = PFR_Err_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 = 0;
- FT_Memory memory = phy_font->memory;
- FT_PtrDist len = limit - p;
-
-
- if ( phy_font->font_id != NULL )
- 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;
- FT_Error error = 0;
- FT_Memory memory = phy_font->memory;
-
-
- if ( phy_font->vertical.stem_snaps != NULL )
- 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 = PFR_Err_Invalid_Table;
- FT_ERROR(( "pfr_exta_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;
- FT_Error error = 0;
- FT_Memory memory = phy_font->memory;
-
-
- FT_TRACE2(( "pfr_extra_item_load_kerning_pairs()\n" ));
-
- 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 + ( 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 = PFR_Err_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 }
- };
-
-
- /* Loads 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 = 0;
- FT_String* result = NULL;
- FT_UInt n, ok;
-
-
- 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, 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( 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 16-bits with one zero when necessary
- */
- 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 );
- q += 16;
- break;
-
- case 3:
- /* this seems to correspond to the font's style name,
- * padded to 16-bits with one zero when necessary
- */
- 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 + ( p - stream->cursor );
-
- if ( FT_NEW_ARRAY( phy_font->chars, count ) )
- goto Fail;
-
- 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( count * Size );
-
- 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 )
- : (FT_Int) 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 = PFR_Err_Invalid_Table;
- FT_ERROR(( "pfr_phy_font_load: invalid physical font table\n" ));
- goto Fail;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pfr/pfrload.h b/Build/source/libs/freetype2/src/pfr/pfrload.h
deleted file mode 100644
index ed010715d1c..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrload.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrload.h */
-/* */
-/* FreeType PFR loader (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __PFRLOAD_H__
-#define __PFRLOAD_H__
-
-#include "pfrobjs.h"
-#include FT_INTERNAL_STREAM_H
-
-
-FT_BEGIN_HEADER
-
-#ifdef PFR_CONFIG_NO_CHECKS
-#define PFR_CHECK( x ) do { } while ( 0 )
-#else
-#define PFR_CHECK( x ) do \
- { \
- if ( p + (x) > limit ) \
- goto Too_Short; \
- } while ( 0 )
-#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_UInt *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/Build/source/libs/freetype2/src/pfr/pfrobjs.c b/Build/source/libs/freetype2/src/pfr/pfrobjs.c
deleted file mode 100644
index 180446d737d..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrobjs.c
+++ /dev/null
@@ -1,576 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrobjs.c */
-/* */
-/* FreeType PFR object methods (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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 = 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 );
-
-
- /* load the header and check it */
- error = pfr_header_load( &face->header, stream );
- if ( error )
- goto Exit;
-
- if ( !pfr_header_check( &face->header ) )
- {
- FT_TRACE4(( "pfr_face_init: not a valid PFR font\n" ));
- error = PFR_Err_Unknown_File_Format;
- goto Exit;
- }
-
- /* check face index */
- {
- FT_UInt 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 >= pfrface->num_faces )
- {
- FT_ERROR(( "pfr_face_init: invalid face index\n" ));
- error = PFR_Err_Invalid_Argument;
- goto Exit;
- }
-
- /* load the face */
- error = pfr_log_font_load(
- &face->log_font, stream, face_index,
- 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;
- pfrface->num_glyphs = phy_font->num_chars + 1;
- pfrface->face_flags = FT_FACE_FLAG_SCALABLE;
-
- /* if all characters point to the same gps_offset 0, 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 )
- pfrface->face_flags = 0; /* not scalable */
- }
-
- 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 == NULL )
- 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 = 0;
-
- 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_UShort)strike->y_ppm;
- size->width = (FT_UShort)strike->x_ppm;
- size->size = strike->y_ppm << 6;
- size->x_ppem = strike->x_ppm << 6;
- size->y_ppem = strike->y_ppm << 6;
- }
- pfrface->num_fixed_sizes = 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 = 3;
- charmap.encoding_id = 1;
- charmap.encoding = FT_ENCODING_UNICODE;
-
- FT_CMap_New( &pfr_cmap_class_rec, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( pfrface->num_charmaps )
- pfrface->charmap = pfrface->charmaps[0];
-#endif
- }
-
- /* check whether we've 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;
-
-
- if ( gindex > 0 )
- gindex--;
-
- if ( !face || gindex >= face->phy_font.num_chars )
- {
- error = PFR_Err_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 );
- if ( error == 0 )
- goto Exit;
- }
-
- if ( load_flags & FT_LOAD_SBITS_ONLY )
- {
- error = PFR_Err_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_Int 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, em_outline, 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 = PFR_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 = (FT_UInt)ft_highpow2( (FT_UInt32)count );
- FT_UInt probe = power * size;
- FT_UInt extra = count - power;
- FT_Byte* base = stream->cursor;
- FT_Bool twobytes = FT_BOOL( item->flags & 1 );
- FT_Bool twobyte_adj = FT_BOOL( item->flags & 2 );
- 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/Build/source/libs/freetype2/src/pfr/pfrobjs.h b/Build/source/libs/freetype2/src/pfr/pfrobjs.h
deleted file mode 100644
index f6aa8b44cc6..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrobjs.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrobjs.h */
-/* */
-/* FreeType PFR object methods (specification). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/pfr/pfrsbit.c b/Build/source/libs/freetype2/src/pfr/pfrsbit.c
deleted file mode 100644
index 45ff6663b36..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrsbit.c
+++ /dev/null
@@ -1,680 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrsbit.c */
-/* */
-/* FreeType PFR bitmap loader (body). */
-/* */
-/* Copyright 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Int width; /* width in pixels/bits */
- FT_Int rows; /* number of remaining rows to scan */
- FT_Int 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 * ( target->rows-1 );
- writer->pitch = -writer->pitch;
- }
- }
-
-
- static void
- pfr_bitwriter_decode_bytes( PFR_BitWriter writer,
- FT_Byte* p,
- FT_Byte* limit )
- {
- FT_Int n, reload;
- FT_Int left = writer->width;
- FT_Byte* cur = writer->line;
- FT_UInt mask = 0x80;
- FT_UInt val = 0;
- FT_UInt c = 0;
-
-
- n = (FT_Int)( 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 n, phase, count, counts[2], reload;
- FT_Int 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 n, phase, count, reload;
- FT_Int 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 left, right, char_len;
- FT_Bool two = FT_BOOL( flags & 1 );
- FT_Byte* buff;
-
-
- char_len = 4;
- if ( two ) char_len += 1;
- if ( flags & 2 ) char_len += 1;
- if ( flags & 4 ) char_len += 1;
-
- left = 0;
- right = count;
-
- while ( left < right )
- {
- FT_UInt middle, code;
-
-
- middle = ( left + right ) >> 1;
- buff = base + middle * char_len;
-
- /* check that we are not outside of the table -- */
- /* this is possible with broken fonts... */
- if ( buff + char_len > limit )
- goto Fail;
-
- if ( two )
- code = PFR_NEXT_USHORT( buff );
- else
- code = PFR_NEXT_BYTE( buff );
-
- if ( code == char_code )
- goto Found_It;
-
- if ( code < char_code )
- left = middle;
- else
- right = middle;
- }
-
- Fail:
- /* Not found */
- *found_size = 0;
- *found_offset = 0;
- return;
-
- Found_It:
- if ( flags & 2 )
- *found_size = PFR_NEXT_USHORT( buff );
- else
- *found_size = PFR_NEXT_BYTE( buff );
-
- if ( flags & 4 )
- *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 = 0;
- FT_Byte flags;
- FT_Char 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_INT8( p );
- xpos = 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 ) << 8;
- 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 = PFR_Err_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 = 0;
- 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:
- FT_ERROR(( "pfr_read_bitmap_data: invalid image type\n" ));
- error = PFR_Err_Invalid_File_Format;
- }
- }
-
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** BITMAP LOADING *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL( FT_Error )
- pfr_slot_load_bitmap( PFR_Slot glyph,
- PFR_Size size,
- FT_UInt glyph_index )
- {
- 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 PFR_Err_Invalid_Argument;
- }
-
- Found_Strike:
-
- /* Now lookup the glyph's position within the file */
- {
- FT_UInt char_len;
-
-
- char_len = 4;
- if ( strike->flags & 1 ) char_len += 1;
- if ( strike->flags & 2 ) char_len += 1;
- if ( strike->flags & 4 ) 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 = PFR_Err_Invalid_Argument;
- goto Exit;
- }
- }
-
- /* get the bitmap metrics */
- {
- FT_Long xpos, ypos, advance;
- FT_UInt xsize, ysize, format;
- FT_Byte* p;
-
-
- /* compute linear advance */
- advance = character->advance;
- if ( phys->metrics_resolution != phys->outline_resolution )
- advance = FT_MulDiv( advance,
- phys->outline_resolution,
- 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,
- 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 )
- {
- glyph->root.format = FT_GLYPH_FORMAT_BITMAP;
-
- /* Set up glyph bitmap and metrics */
- glyph->root.bitmap.width = (FT_Int)xsize;
- glyph->root.bitmap.rows = (FT_Int)ysize;
- glyph->root.bitmap.pitch = (FT_Long)( xsize + 7 ) >> 3;
- glyph->root.bitmap.pixel_mode = FT_PIXEL_MODE_MONO;
-
- glyph->root.metrics.width = (FT_Long)xsize << 6;
- glyph->root.metrics.height = (FT_Long)ysize << 6;
- glyph->root.metrics.horiBearingX = xpos << 6;
- glyph->root.metrics.horiBearingY = ypos << 6;
- 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;
-
- glyph->root.bitmap_left = xpos;
- glyph->root.bitmap_top = ypos + ysize;
-
- /* Allocate and read bitmap data */
- {
- FT_ULong len = 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 & 2),
- &glyph->root.bitmap );
- }
- }
- }
-
- FT_FRAME_EXIT();
- }
-
- Exit:
- return error;
- }
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pfr/pfrsbit.h b/Build/source/libs/freetype2/src/pfr/pfrsbit.h
deleted file mode 100644
index 015e9e6dada..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrsbit.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrsbit.h */
-/* */
-/* FreeType PFR bitmap loader (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#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_END_HEADER
-
-#endif /* __PFR_SBIT_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pfr/pfrtypes.h b/Build/source/libs/freetype2/src/pfr/pfrtypes.h
deleted file mode 100644
index c0ae04253a2..00000000000
--- a/Build/source/libs/freetype2/src/pfr/pfrtypes.h
+++ /dev/null
@@ -1,362 +0,0 @@
-/***************************************************************************/
-/* */
-/* pfrtypes.h */
-/* */
-/* FreeType PFR data structures (specification only). */
-/* */
-/* Copyright 2002, 2003, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 */
- typedef enum PFR_HeaderFlags_
- {
- PFR_FLAG_BLACK_PIXEL = 1,
- PFR_FLAG_INVERT_BITMAP = 2
-
- } PFR_HeaderFlags;
-
-
- /************************************************************************/
-
- 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;
-
-
- typedef enum PFR_LogFlags_
- {
- PFR_LOG_EXTRA_ITEMS = 0x40,
- PFR_LOG_2BYTE_BOLD = 0x20,
- PFR_LOG_BOLD = 0x10,
- PFR_LOG_2BYTE_STROKE = 8,
- PFR_LOG_STROKE = 4,
- PFR_LINE_JOIN_MASK = 3
-
- } PFR_LogFlags;
-
-
- typedef enum PFR_LineJoinFlags_
- {
- PFR_LINE_JOIN_MITER = 0,
- PFR_LINE_JOIN_ROUND = 1,
- PFR_LINE_JOIN_BEVEL = 2
-
- } PFR_LineJoinFlags;
-
-
- /************************************************************************/
-
- typedef enum PFR_BitmapFlags_
- {
- PFR_BITMAP_3BYTE_OFFSET = 4,
- PFR_BITMAP_2BYTE_SIZE = 2,
- PFR_BITMAP_2BYTE_CHARCODE = 1
-
- } PFR_BitmapFlags;
-
-
- typedef struct PFR_BitmapCharRec_
- {
- FT_UInt char_code;
- FT_UInt gps_size;
- FT_UInt32 gps_offset;
-
- } PFR_BitmapCharRec, *PFR_BitmapChar;
-
-
- typedef enum PFR_StrikeFlags_
- {
- PFR_STRIKE_2BYTE_COUNT = 0x10,
- PFR_STRIKE_3BYTE_OFFSET = 0x08,
- PFR_STRIKE_3BYTE_SIZE = 0x04,
- PFR_STRIKE_2BYTE_YPPM = 0x02,
- PFR_STRIKE_2BYTE_XPPM = 0x01
-
- } PFR_StrikeFlags;
-
-
- 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_UInt32 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_UInt 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_UInt32 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_UInt32 bct_offset;
- FT_Byte* cursor;
-
- } PFR_PhyFontRec, *PFR_PhyFont;
-
-
- typedef enum PFR_PhyFlags_
- {
- PFR_PHY_EXTRA_ITEMS = 0x80,
- PFR_PHY_3BYTE_GPS_OFFSET = 0x20,
- PFR_PHY_2BYTE_GPS_SIZE = 0x10,
- PFR_PHY_ASCII_CODE = 0x08,
- PFR_PHY_PROPORTIONAL = 0x04,
- PFR_PHY_2BYTE_CHARCODE = 0x02,
- PFR_PHY_VERTICAL = 0x01
-
- } PFR_PhyFlags;
-
-
- typedef enum PFR_KernFlags_
- {
- PFR_KERN_2BYTE_CHAR = 0x01,
- PFR_KERN_2BYTE_ADJ = 0x02
-
- } PFR_KernFlags;
-
-
- /************************************************************************/
-
- typedef enum PFR_GlyphFlags_
- {
- PFR_GLYPH_IS_COMPOUND = 0x80,
- PFR_GLYPH_EXTRA_ITEMS = 0x08,
- PFR_GLYPH_1BYTE_XYCOUNT = 0x04,
- PFR_GLYPH_XCOUNT = 0x02,
- PFR_GLYPH_YCOUNT = 0x01
-
- } PFR_GlyphFlags;
-
-
- /* 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;
-
-
- typedef enum PFR_SubgGlyphFlags_
- {
- PFR_SUBGLYPH_3BYTE_OFFSET = 0x80,
- PFR_SUBGLYPH_2BYTE_SIZE = 0x40,
- PFR_SUBGLYPH_YSCALE = 0x20,
- PFR_SUBGLYPH_XSCALE = 0x10
-
- } PFR_SubGlyphFlags;
-
-
- 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/Build/source/libs/freetype2/src/pfr/rules.mk b/Build/source/libs/freetype2/src/pfr/rules.mk
deleted file mode 100644
index 60b96c74154..00000000000
--- a/Build/source/libs/freetype2/src/pfr/rules.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 PFR driver configuration rules
-#
-
-
-# Copyright 2002, 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.
-
-
-# pfr driver directory
-#
-PFR_DIR := $(SRC_DIR)/pfr
-
-
-# compilation flags for the driver
-#
-PFR_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PFR_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/psaux/Jamfile b/Build/source/libs/freetype2/src/psaux/Jamfile
deleted file mode 100644
index faeded90445..00000000000
--- a/Build/source/libs/freetype2/src/psaux/Jamfile
+++ /dev/null
@@ -1,31 +0,0 @@
-# FreeType 2 src/psaux Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) psaux ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = psauxmod psobjs t1decode t1cmap
- psconv afmparse
- ;
- }
- else
- {
- _sources = psaux ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/psaux Jamfile
diff --git a/Build/source/libs/freetype2/src/psaux/afmparse.c b/Build/source/libs/freetype2/src/psaux/afmparse.c
deleted file mode 100644
index 0528fe6ff4f..00000000000
--- a/Build/source/libs/freetype2/src/psaux/afmparse.c
+++ /dev/null
@@ -1,960 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmparse.c */
-/* */
-/* AFM parser (body). */
-/* */
-/* Copyright 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_DEBUG_H
-
-#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 ) \
- ( (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;
- int ch;
-
-
- afm_stream_skip_spaces( stream );
- if ( AFM_STATUS_EOC( stream ) )
- return NULL;
-
- str = AFM_STREAM_KEY_BEGIN( stream );
-
- while ( 1 )
- {
- 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;
- int ch;
-
-
- afm_stream_skip_spaces( stream );
- if ( AFM_STATUS_EOL( stream ) )
- return NULL;
-
- str = AFM_STREAM_KEY_BEGIN( stream );
-
- /* scan to eol */
- while ( 1 )
- {
- 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_UInt 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_UInt* len )
- {
- AFM_Stream stream = parser->stream;
- char* key = 0; /* 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 ) ? AFM_STREAM_KEY_LEN( stream, key )
- : 0;
-
- return key;
- }
-
-
- static AFM_Token
- afm_tokenize( const char* key,
- FT_UInt 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;
- 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 PSaux_Err_Ok;
- }
-
-
- FT_LOCAL( void )
- afm_parser_done( AFM_Parser parser )
- {
- FT_Memory memory = parser->memory;
-
-
- FT_FREE( parser->stream );
- }
-
-
- FT_LOCAL_DEF( 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 PSaux_Err_Ok;
- }
- else
- return PSaux_Err_Syntax_Error;
- }
-
-
- static FT_Error
- afm_parse_track_kern( AFM_Parser parser )
- {
- AFM_FontInfo fi = parser->FontInfo;
- AFM_TrackKern tk;
- char* key;
- FT_UInt len;
- int n = -1;
-
-
- if ( afm_parser_read_int( parser, &fi->NumTrackKern ) )
- goto Fail;
-
- 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 >= 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;
-
- /* is this correct? */
- if ( tk->degree < 0 && tk->min_kern > 0 )
- tk->min_kern = -tk->min_kern;
- break;
-
- case AFM_TOKEN_ENDTRACKKERN:
- case AFM_TOKEN_ENDKERNDATA:
- case AFM_TOKEN_ENDFONTMETRICS:
- fi->NumTrackKern = n + 1;
- return PSaux_Err_Ok;
-
- case AFM_TOKEN_UNKNOWN:
- break;
-
- default:
- goto Fail;
- }
- }
-
- Fail:
- return PSaux_Err_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 );
-
-
- return (int)( index1 - index2 );
- }
-
-
- static FT_Error
- afm_parse_kern_pairs( AFM_Parser parser )
- {
- AFM_FontInfo fi = parser->FontInfo;
- AFM_KernPair kp;
- char* key;
- FT_UInt len;
- int n = -1;
-
-
- if ( afm_parser_read_int( parser, &fi->NumKernPair ) )
- goto Fail;
-
- 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 >= 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;
-
- kp->index1 = shared_vals[0].u.i;
- kp->index2 = shared_vals[1].u.i;
- 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 = n + 1;
- ft_qsort( fi->KernPairs, fi->NumKernPair,
- sizeof( AFM_KernPairRec ),
- afm_compare_kern_pairs );
- return PSaux_Err_Ok;
-
- case AFM_TOKEN_UNKNOWN:
- break;
-
- default:
- goto Fail;
- }
- }
-
- Fail:
- return PSaux_Err_Syntax_Error;
- }
-
-
- static FT_Error
- afm_parse_kern_data( AFM_Parser parser )
- {
- FT_Error error;
- char* key;
- FT_UInt 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 PSaux_Err_Ok;
-
- case AFM_TOKEN_UNKNOWN:
- break;
-
- default:
- goto Fail;
- }
- }
-
- Fail:
- return PSaux_Err_Syntax_Error;
- }
-
-
- static FT_Error
- afm_parser_skip_section( AFM_Parser parser,
- FT_UInt n,
- AFM_Token end_section )
- {
- char* key;
- FT_UInt 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 PSaux_Err_Ok;
- }
-
- Fail:
- return PSaux_Err_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 = PSaux_Err_Syntax_Error;
- char* key;
- FT_UInt len;
- FT_Int metrics_sets = 0;
-
-
- if ( !fi )
- return PSaux_Err_Invalid_Argument;
-
- key = afm_parser_next_key( parser, 1, &len );
- if ( !key || len != 16 ||
- ft_strncmp( key, "StartFontMetrics", 16 ) != 0 )
- return PSaux_Err_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 = PSaux_Err_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 PSaux_Err_Ok;
-
- default:
- break;
- }
- }
-
- Fail:
- FT_FREE( fi->TrackKerns );
- fi->NumTrackKern = 0;
-
- FT_FREE( fi->KernPairs );
- fi->NumKernPair = 0;
-
- fi->IsCIDFont = 0;
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/afmparse.h b/Build/source/libs/freetype2/src/psaux/afmparse.h
deleted file mode 100644
index c2fce75c86e..00000000000
--- a/Build/source/libs/freetype2/src/psaux/afmparse.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/***************************************************************************/
-/* */
-/* afmparse.h */
-/* */
-/* AFM parser (specification). */
-/* */
-/* Copyright 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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_UInt* len );
-
-FT_END_HEADER
-
-#endif /* __AFMPARSE_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/module.mk b/Build/source/libs/freetype2/src/psaux/module.mk
deleted file mode 100644
index 5431522084f..00000000000
--- a/Build/source/libs/freetype2/src/psaux/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PSaux module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/psaux/psaux.c b/Build/source/libs/freetype2/src/psaux/psaux.c
deleted file mode 100644
index a4b9c5c6e45..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psaux.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/***************************************************************************/
-/* */
-/* psaux.c */
-/* */
-/* FreeType auxiliary PostScript driver component (body only). */
-/* */
-/* Copyright 1996-2001, 2002, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "psobjs.c"
-#include "psauxmod.c"
-#include "t1decode.c"
-#include "t1cmap.c"
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-#include "afmparse.c"
-#endif
-
-#include "psconv.c"
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/psauxerr.h b/Build/source/libs/freetype2/src/psaux/psauxerr.h
deleted file mode 100644
index d0baa3cbb9c..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psauxerr.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* psauxerr.h */
-/* */
-/* PS auxiliary module error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/psaux/psauxmod.c b/Build/source/libs/freetype2/src/psaux/psauxmod.c
deleted file mode 100644
index 4c3579f7b8e..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psauxmod.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/***************************************************************************/
-/* */
-/* psauxmod.c */
-/* */
-/* FreeType auxiliary PostScript module implementation (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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,
- ps_table_done,
- ps_table_add,
- ps_table_release
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const PS_Parser_FuncsRec ps_parser_funcs =
- {
- ps_parser_init,
- ps_parser_done,
- ps_parser_skip_spaces,
- ps_parser_skip_PS_token,
- ps_parser_to_int,
- ps_parser_to_fixed,
- ps_parser_to_bytes,
- ps_parser_to_coord_array,
- ps_parser_to_fixed_array,
- ps_parser_to_token,
- ps_parser_to_token_array,
- ps_parser_load_field,
- ps_parser_load_field_table
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const T1_Builder_FuncsRec t1_builder_funcs =
- {
- t1_builder_init,
- t1_builder_done,
- t1_builder_check_points,
- t1_builder_add_point,
- t1_builder_add_point1,
- t1_builder_add_contour,
- t1_builder_start_point,
- t1_builder_close_contour
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const T1_Decoder_FuncsRec t1_decoder_funcs =
- {
- t1_decoder_init,
- t1_decoder_done,
- t1_decoder_parse_charstrings
- };
-
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
- FT_CALLBACK_TABLE_DEF
- const AFM_Parser_FuncsRec afm_parser_funcs =
- {
- afm_parser_init,
- afm_parser_done,
- afm_parser_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)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/psauxmod.h b/Build/source/libs/freetype2/src/psaux/psauxmod.h
deleted file mode 100644
index 92ac0560484..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psauxmod.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* psauxmod.h */
-/* */
-/* FreeType auxiliary PostScript module implementation (specification). */
-/* */
-/* Copyright 2000-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __PSAUXMOD_H__
-#define __PSAUXMOD_H__
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) psaux_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* __PSAUXMOD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/psconv.c b/Build/source/libs/freetype2/src/psaux/psconv.c
deleted file mode 100644
index d824b59139c..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psconv.c
+++ /dev/null
@@ -1,474 +0,0 @@
-/***************************************************************************/
-/* */
-/* psconv.c */
-/* */
-/* Some convenience conversions (body). */
-/* */
-/* Copyright 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "psobjs.h"
-#include "psauxerr.h"
-
-
- /* 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_Int )
- PS_Conv_Strtol( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Int base )
- {
- FT_Byte* p = *cursor;
- FT_Int num = 0;
- FT_Bool sign = 0;
-
-
- if ( p == limit || base < 2 || base > 36 )
- return 0;
-
- if ( *p == '-' || *p == '+' )
- {
- sign = FT_BOOL( *p == '-' );
-
- p++;
- if ( p == limit )
- return 0;
- }
-
- 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;
-
- num = num * base + c;
- }
-
- if ( sign )
- num = -num;
-
- *cursor = p;
-
- return num;
- }
-
-
- FT_LOCAL_DEF( FT_Int )
- PS_Conv_ToInt( FT_Byte** cursor,
- FT_Byte* limit )
-
- {
- FT_Byte* p;
- FT_Int num;
-
-
- num = PS_Conv_Strtol( cursor, limit, 10 );
- p = *cursor;
-
- if ( p < limit && *p == '#' )
- {
- *cursor = p + 1;
-
- return PS_Conv_Strtol( cursor, limit, num );
- }
- else
- return num;
- }
-
-
- FT_LOCAL_DEF( FT_Fixed )
- PS_Conv_ToFixed( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Int power_ten )
- {
- FT_Byte* p = *cursor;
- FT_Fixed integral;
- FT_Long decimal = 0, divider = 1;
- FT_Bool sign = 0;
-
-
- if ( p == limit )
- return 0;
-
- if ( *p == '-' || *p == '+' )
- {
- sign = FT_BOOL( *p == '-' );
-
- p++;
- if ( p == limit )
- return 0;
- }
-
- if ( *p != '.' )
- integral = PS_Conv_ToInt( &p, limit ) << 16;
- else
- integral = 0;
-
- /* 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;
-
- if ( !integral && power_ten > 0 )
- {
- power_ten--;
- decimal = decimal * 10 + c;
- }
- else
- {
- if ( divider < 10000000L )
- {
- decimal = decimal * 10 + c;
- divider *= 10;
- }
- }
- }
- }
-
- /* read exponent, if any */
- if ( p + 1 < limit && ( *p == 'e' || *p == 'E' ) )
- {
- p++;
- power_ten += PS_Conv_ToInt( &p, limit );
- }
-
- while ( power_ten > 0 )
- {
- integral *= 10;
- decimal *= 10;
- power_ten--;
- }
-
- while ( power_ten < 0 )
- {
- integral /= 10;
- divider *= 10;
- power_ten++;
- }
-
- if ( decimal )
- integral += FT_DivFix( decimal, divider );
-
- if ( sign )
- integral = -integral;
-
- *cursor = p;
-
- return integral;
- }
-
-
-#if 0
- FT_LOCAL_DEF( FT_UInt )
- PS_Conv_StringDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_UInt 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_UInt n )
- {
- FT_Byte* p;
- FT_UInt r = 0;
- FT_UInt w = 0;
- FT_UInt pad = 0x01;
-
-
- n *= 2;
-
-#if 1
-
- p = *cursor;
- 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_char_table[c & 0x7F];
- if ( (unsigned)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_UInt n,
- FT_UShort* seed )
- {
- FT_Byte* p;
- FT_UInt r;
- FT_UInt s = *seed;
-
-
-#if 1
-
- p = *cursor;
- 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/Build/source/libs/freetype2/src/psaux/psconv.h b/Build/source/libs/freetype2/src/psaux/psconv.h
deleted file mode 100644
index e51124185d7..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psconv.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/***************************************************************************/
-/* */
-/* psconv.h */
-/* */
-/* Some convenience conversions (specification). */
-/* */
-/* Copyright 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Int )
- PS_Conv_Strtol( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Int base );
-
-
- FT_LOCAL( FT_Int )
- PS_Conv_ToInt( FT_Byte** cursor,
- FT_Byte* limit );
-
- FT_LOCAL( FT_Fixed )
- PS_Conv_ToFixed( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Int power_ten );
-
-#if 0
- FT_LOCAL( FT_UInt )
- PS_Conv_StringDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_UInt n );
-#endif
-
- FT_LOCAL( FT_UInt )
- PS_Conv_ASCIIHexDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_UInt n );
-
- FT_LOCAL( FT_UInt )
- PS_Conv_EexecDecode( FT_Byte** cursor,
- FT_Byte* limit,
- FT_Byte* buffer,
- FT_UInt n,
- FT_UShort* seed );
-
-
-FT_END_HEADER
-
-#endif /* __PSCONV_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/psobjs.c b/Build/source/libs/freetype2/src/psaux/psobjs.c
deleted file mode 100644
index f945b69c623..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psobjs.c
+++ /dev/null
@@ -1,1699 +0,0 @@
-/***************************************************************************/
-/* */
-/* psobjs.c */
-/* */
-/* Auxiliary functions for PostScript fonts (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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 = 0;
- 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_Long 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 PSaux_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_PtrDist length )
- {
- if ( idx < 0 || idx >= table->max_elems )
- {
- FT_ERROR(( "ps_table_add: invalid index\n" ));
- return PSaux_Err_Invalid_Argument;
- }
-
- /* grow the base block if needed */
- if ( table->cursor + length > table->capacity )
- {
- FT_Error error;
- FT_Offset new_size = table->capacity;
- FT_Long in_offset;
-
-
- in_offset = (FT_Long)((FT_Byte*)object - table->block);
- if ( (FT_ULong)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 PSaux_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 = PSaux_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 = PSaux_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 = PSaux_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 = PSaux_Err_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 = PSaux_Err_Ok;
-
-
- FT_ASSERT( **acur == '{' );
-
- for ( cur = *acur; cur < limit && error == PSaux_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 = PSaux_Err_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 = PSaux_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 = PSaux_Err_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 == parser->cursor )
- {
- FT_ERROR(( "ps_parser_skip_PS_token: "
- "current token is `%c', which is self-delimiting "
- "but invalid at this point\n",
- *cur ));
-
- error = PSaux_Err_Invalid_File_Format;
- }
-
- 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 = 0;
- token->limit = 0;
-
- /* 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 ) == PSaux_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 ) == PSaux_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 = 0;
- 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 != NULL && 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 != NULL && count >= max_coords )
- break;
-
- /* call PS_Conv_ToFixed() even if coords == NULL */
- /* to properly parse number at `cur' */
- *( coords != NULL ? &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' */
-
- 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 != NULL && count >= max_values )
- break;
-
- /* call PS_Conv_ToFixed() even if coords == NULL */
- /* to properly parse number at `cur' */
- *( values != NULL ? &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_PtrDist 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 = 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;
-
-
- /* 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;
-
- /* we must detect arrays in /FontBBox */
- if ( field->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 )
- goto FieldArray;
- }
- else if ( token.type == T1_TOKEN_TYPE_ARRAY )
- {
- FieldArray:
- /* if this is an array and we have no blend, an error occurs */
- if ( max_objects == 0 )
- goto Fail;
-
- count = max_objects;
- 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;
-
-
- skip_spaces( &cur, limit );
-
- switch ( field->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 "
- "but found token of type %d instead\n",
- token.type ));
- error = PSaux_Err_Invalid_File_Format;
- goto Exit;
- }
-
- /* for this to work (FT_String**)q must have been */
- /* initialized to NULL */
- if ( *(FT_String**)q != NULL )
- {
- 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 < 0 )
- {
- FT_ERROR(( "ps_parser_load_field: "
- "expected four integers in bounding box\n" ));
- error = PSaux_Err_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;
-
- 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 = PSaux_Err_Ok;
-
- Exit:
- return error;
-
- Fail:
- error = PSaux_Err_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 = PSaux_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 = PSaux_Err_Ignore;
- goto Exit;
- }
- if ( (FT_UInt)num_elements > field->array_max )
- num_elements = field->array_max;
-
- old_cursor = parser->cursor;
- old_limit = parser->limit;
-
- /* we store the elements count if necessary */
- if ( field->type != T1_FIELD_TYPE_BBOX )
- *(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;
- ps_parser_load_field( parser, &fieldrec, objects, max_objects, 0 );
- 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_Long max_bytes,
- FT_Long* pnum_bytes,
- FT_Bool delimiters )
- {
- FT_Error error = PSaux_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 = PSaux_Err_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 = PSaux_Err_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 = PSaux_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;
- builder->hints_funcs = 0;
-
- 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;
-
-
- if ( builder->shift )
- {
- x >>= 16;
- y >>= 16;
- }
- point->x = x;
- point->y = y;
- *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC );
-
- builder->last = *point;
- }
- 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;
-
-
- if ( !builder->load_points )
- {
- outline->n_contours++;
- return PSaux_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 = PSaux_Err_Invalid_File_Format;
-
-
- /* test whether we are building a new contour */
-
- if ( builder->parse_state == T1_Parse_Have_Path )
- error = PSaux_Err_Ok;
- else if ( builder->parse_state == T1_Parse_Have_Moveto )
- {
- 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;
-
- /* 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 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 );
- }
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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/Build/source/libs/freetype2/src/psaux/psobjs.h b/Build/source/libs/freetype2/src/psaux/psobjs.h
deleted file mode 100644
index c2cbf2c79b3..00000000000
--- a/Build/source/libs/freetype2/src/psaux/psobjs.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/***************************************************************************/
-/* */
-/* psobjs.h */
-/* */
-/* Auxiliary functions for PostScript fonts (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 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. */
-/* */
-/***************************************************************************/
-
-
-#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_PtrDist 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_Long max_bytes,
- FT_Long* 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/Build/source/libs/freetype2/src/psaux/rules.mk b/Build/source/libs/freetype2/src/psaux/rules.mk
deleted file mode 100644
index 7a1be37b692..00000000000
--- a/Build/source/libs/freetype2/src/psaux/rules.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 PSaux driver configuration rules
-#
-
-
-# Copyright 1996-2000, 2002, 2003, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSAUX_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/psaux/t1cmap.c b/Build/source/libs/freetype2/src/psaux/t1cmap.c
deleted file mode 100644
index 67a23db569f..00000000000
--- a/Build/source/libs/freetype2/src/psaux/t1cmap.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1cmap.c */
-/* */
-/* Type 1 character map support (body). */
-/* */
-/* Copyright 2002, 2003, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 = 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 != NULL );
- }
-
-
- 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_UInt )
- 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 )
- {
- 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,
- (FT_CMap_DoneFunc) t1_cmap_std_done,
- (FT_CMap_CharIndexFunc)t1_cmap_std_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_std_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
- FT_CALLBACK_DEF( FT_Error )
- t1_cmap_expert_init( T1_CMapStd cmap )
- {
- 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,
- (FT_CMap_DoneFunc) t1_cmap_std_done,
- (FT_CMap_CharIndexFunc)t1_cmap_std_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_std_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 CUSTOM ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_CALLBACK_DEF( FT_Error )
- t1_cmap_custom_init( T1_CMapCustom cmap )
- {
- T1_Face face = (T1_Face)FT_CMAP_FACE( cmap );
- T1_Encoding encoding = &face->type1.encoding;
-
-
- cmap->first = encoding->code_first;
- cmap->count = (FT_UInt)( encoding->code_last - cmap->first + 1 );
- cmap->indices = encoding->char_index;
-
- FT_ASSERT( cmap->indices != NULL );
- 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_UInt )
- 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,
- (FT_CMap_DoneFunc) t1_cmap_custom_done,
- (FT_CMap_CharIndexFunc)t1_cmap_custom_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_custom_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** TYPE1 SYNTHETIC UNICODE ENCODING CMAP *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_CALLBACK_DEF( const char * )
- t1_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 )
- {
- 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;
-
-
- return psnames->unicodes_init( memory,
- unicodes,
- face->type1.num_glyphs,
- (PS_GetGlyphNameFunc)&t1_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_UInt )
- 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,
- (FT_CMap_DoneFunc) t1_cmap_unicode_done,
- (FT_CMap_CharIndexFunc)t1_cmap_unicode_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_unicode_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/t1cmap.h b/Build/source/libs/freetype2/src/psaux/t1cmap.h
deleted file mode 100644
index 7ae65d2fa16..00000000000
--- a/Build/source/libs/freetype2/src/psaux/t1cmap.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1cmap.h */
-/* */
-/* Type 1 character map support (specification). */
-/* */
-/* Copyright 2002, 2003, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/psaux/t1decode.c b/Build/source/libs/freetype2/src/psaux/t1decode.c
deleted file mode 100644
index 550ba641429..00000000000
--- a/Build/source/libs/freetype2/src/psaux/t1decode.c
+++ /dev/null
@@ -1,1475 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1decode.c */
-/* */
-/* PostScript Type 1 decoding routines (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_POSTSCRIPT_HINTS_H
-#include FT_OUTLINE_H
-
-#include "t1decode.h"
-#include "psobjs.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_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 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;
-
-
- /* 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? */
- if ( decoder->glyph_names == 0 )
- {
- FT_ERROR(( "t1operator_seac:" ));
- FT_ERROR(( " glyph names table not available in this font!\n" ));
- return PSaux_Err_Syntax_Error;
- }
-
- 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:" ));
- FT_ERROR(( " invalid seac character code arguments\n" ));
- return PSaux_Err_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)( adx - asb );
- subg->arg2 = (FT_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 */
-
- error = t1_decoder_parse_glyph( decoder, bchar_index );
- 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 */
- error = t1_decoder_parse_glyph( decoder, achar_index );
- 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;
-
- T1_Hints_Funcs hinter;
-
-
- /* we don't want to touch the source code -- use macro trick */
-#define start_point t1_builder_start_point
-#define check_points t1_builder_check_points
-#define add_point t1_builder_add_point
-#define add_point1 t1_builder_add_point1
-#define add_contour t1_builder_add_contour
-#define close_contour t1_builder_close_contour
-
- /* 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->len_buildchar > 0 )
- memset( &decoder->buildchar[0],
- 0,
- sizeof( decoder->buildchar[0] ) *
- decoder->len_buildchar );
-
- FT_TRACE4(( "\nStart charstring\n" ));
-
- zone->base = charstring_base;
- limit = zone->limit = charstring_base + charstring_len;
- ip = zone->cursor = zone->base;
-
- error = PSaux_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 );
-
- /* now, execute loop */
- while ( ip < limit )
- {
- FT_Long* top = decoder->top;
- T1_Operator op = op_none;
- FT_Long value = 0;
-
-
- FT_ASSERT( known_othersubr_result_cnt == 0 ||
- unknown_othersubr_result_cnt == 0 );
-
- FT_TRACE5(( " (%d)", decoder->top - decoder->stack ));
-
- /*********************************************************************/
- /* */
- /* 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_Long)ip[0] << 24) |
- ((FT_Long)ip[1] << 16) |
- ((FT_Long)ip[2] << 8 ) |
- ip[3] );
- ip += 4;
- break;
-
- default:
- if ( ip[-1] >= 32 )
- {
- if ( ip[-1] < 247 )
- value = (FT_Long)ip[-1] - 139;
- else
- {
- if ( ++ip > limit )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings: " ));
- FT_ERROR(( "unexpected EOF in integer\n" ));
- goto Syntax_Error;
- }
-
- if ( ip[-2] < 251 )
- value = ( ( (FT_Long)ip[-2] - 247 ) << 8 ) + ip[-1] + 108;
- else
- value = -( ( ( (FT_Long)ip[-2] - 251 ) << 8 ) + ip[-1] + 108 );
- }
- }
- 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;
- }
- }
-
- /*********************************************************************/
- /* */
- /* 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;
- }
-
- FT_TRACE4(( " %ld", value ));
-
- *top++ = value;
- decoder->top = top;
- }
- else if ( op == op_callothersubr ) /* callothersubr */
- {
- FT_Int subr_no;
- FT_Int arg_cnt;
-
-
- FT_TRACE4(( " callothersubr" ));
-
- if ( top - decoder->stack < 2 )
- goto Stack_Underflow;
-
- top -= 2;
-
- subr_no = (FT_Int)top[1];
- arg_cnt = (FT_Int)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 1: /* start flex feature */
- if ( arg_cnt != 0 )
- goto Unexpected_OtherSubr;
-
- decoder->flex_state = 1;
- decoder->num_flex_vectors = 0;
- if ( start_point( builder, x, y ) ||
- check_points( builder, 6 ) )
- goto Fail;
- break;
-
- case 2: /* add flex vectors */
- {
- FT_Int idx;
-
-
- if ( arg_cnt != 0 )
- goto Unexpected_OtherSubr;
-
- /* 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 )
- add_point( builder,
- x,
- y,
- (FT_Byte)( idx == 3 || idx == 6 ) );
- }
- break;
-
- case 0: /* end flex feature */
- if ( arg_cnt != 3 )
- goto Unexpected_OtherSubr;
-
- if ( decoder->flex_state == 0 ||
- 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 */
- known_othersubr_result_cnt = 2;
- break;
-
- case 3: /* change hints */
- if ( arg_cnt != 1 )
- goto Unexpected_OtherSubr;
-
- known_othersubr_result_cnt = 1;
-
- if ( hinter )
- hinter->reset( hinter->hints, 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: " ));
- FT_ERROR(( "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: " ));
- FT_ERROR(( "incorrect number of mm arguments\n" ));
- goto Syntax_Error;
- }
-
- /* we want to compute: */
- /* */
- /* a0*w0 + a1*w1 + ... + ak*wk */
- /* */
- /* but we only have the 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 += FT_MulFix( *delta++, blend->weight_vector[mm] );
-
- *values++ = tmp;
- }
-
- known_othersubr_result_cnt = num_points;
- break;
- }
-
-#ifdef CAN_HANDLE_NON_INTEGRAL_T1_OPERANDS
-
- /* We cannot yet enable these since currently */
- /* our T1 stack stores integers which lack the */
- /* precision to express the values */
-
- 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 == NULL )
- goto Unexpected_OtherSubr;
-
- idx = top[0];
-
- if ( idx < 0 ||
- idx + blend->num_designs > decoder->face->len_buildchar )
- goto Unexpected_OtherSubr;
-
- 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] += top[1]; /* XXX (over|under)flow */
-
- 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] -= top[1]; /* XXX (over|under)flow */
-
- 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] *= top[1]; /* XXX (over|under)flow */
-
- 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] /= top[1]; /* XXX (over|under)flow */
-
- known_othersubr_result_cnt = 1;
- break;
-
-#endif /* CAN_HANDLE_NON_INTEGRAL_T1_OPERANDS */
-
- 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 == NULL )
- goto Unexpected_OtherSubr;
-
- idx = 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 == NULL )
- goto Unexpected_OtherSubr;
-
- idx = 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 who has left his 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;
-
-#ifdef CAN_HANDLE_NON_INTEGRAL_T1_OPERANDS
- case 28:
- /* 0 28 callothersubr pop */
- /* => push random value from interval [0, 1) onto stack */
- if ( arg_cnt != 0 )
- goto Unexpected_OtherSubr;
-
- top[0] = FT_rand();
- known_othersubr_result_cnt = 1;
- break;
-#endif
-
- default:
- 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;
-
- 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" ));
-
- close_contour( builder );
-
- /* close hints recording session */
- if ( hinter )
- {
- if (hinter->close( hinter->hints, builder->current->n_points ))
- goto Syntax_Error;
-
- /* apply hints to the loaded glyph outline now */
- hinter->apply( hinter->hints,
- builder->current,
- (PSH_Globals) builder->hints_globals,
- decoder->hint_mode );
- }
-
- /* add current outline to the glyph slot */
- FT_GlyphLoader_Add( builder->loader );
-
- FT_TRACE4(( "\n" ));
-
- /* 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 PSaux_Err_Ok;
-
- case op_hsbw:
- FT_TRACE4(( " hsbw" ));
-
- builder->parse_state = T1_Parse_Have_Width;
-
- builder->left_bearing.x += top[0];
- builder->advance.x = top[1];
- builder->advance.y = 0;
-
- orig_x = builder->last.x = x = builder->pos_x + top[0];
- orig_y = builder->last.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 PSaux_Err_Ok;
-
- break;
-
- case op_seac:
- /* return immediately after the processing */
- return t1operator_seac( decoder, top[0], top[1], top[2],
- (FT_Int)top[3], (FT_Int)top[4] );
-
- case op_sbw:
- FT_TRACE4(( " sbw" ));
-
- builder->parse_state = T1_Parse_Have_Width;
-
- builder->left_bearing.x += top[0];
- builder->left_bearing.y += top[1];
- builder->advance.x = top[2];
- builder->advance.y = top[3];
-
- builder->last.x = x = builder->pos_x + top[0];
- builder->last.y = y = 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 PSaux_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 )
- close_contour( builder );
-
- builder->parse_state = T1_Parse_Have_Width;
- break;
-
- case op_hlineto:
- FT_TRACE4(( " hlineto" ));
-
- if ( start_point( builder, x, y ) )
- goto Fail;
-
- x += top[0];
- goto Add_Line;
-
- case op_hmoveto:
- FT_TRACE4(( " hmoveto" ));
-
- 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 ( start_point( builder, x, y ) ||
- check_points( builder, 3 ) )
- goto Fail;
-
- x += top[0];
- add_point( builder, x, y, 0 );
- x += top[1];
- y += top[2];
- add_point( builder, x, y, 0 );
- y += top[3];
- add_point( builder, x, y, 1 );
- break;
-
- case op_rlineto:
- FT_TRACE4(( " rlineto" ));
-
- if ( start_point( builder, x, y ) )
- goto Fail;
-
- x += top[0];
- y += top[1];
-
- Add_Line:
- if ( add_point1( builder, x, y ) )
- goto Fail;
- break;
-
- case op_rmoveto:
- FT_TRACE4(( " rmoveto" ));
-
- x += top[0];
- 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(( " rcurveto" ));
-
- if ( start_point( builder, x, y ) ||
- check_points( builder, 3 ) )
- goto Fail;
-
- x += top[0];
- y += top[1];
- add_point( builder, x, y, 0 );
-
- x += top[2];
- y += top[3];
- add_point( builder, x, y, 0 );
-
- x += top[4];
- y += top[5];
- add_point( builder, x, y, 1 );
- break;
-
- case op_vhcurveto:
- FT_TRACE4(( " vhcurveto" ));
-
- if ( start_point( builder, x, y ) ||
- check_points( builder, 3 ) )
- goto Fail;
-
- y += top[0];
- add_point( builder, x, y, 0 );
- x += top[1];
- y += top[2];
- add_point( builder, x, y, 0 );
- x += top[3];
- add_point( builder, x, y, 1 );
- break;
-
- case op_vlineto:
- FT_TRACE4(( " vlineto" ));
-
- if ( start_point( builder, x, y ) )
- goto Fail;
-
- y += top[0];
- goto Add_Line;
-
- case op_vmoveto:
- FT_TRACE4(( " vmoveto" ));
-
- 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 ( top[1] )
- {
- *top = top[0] / top[1];
- ++top;
- }
- else
- {
- FT_ERROR(( "t1_decoder_parse_charstrings: division by 0\n" ));
- goto Syntax_Error;
- }
- break;
-
- case op_callsubr:
- {
- FT_Int idx;
-
-
- FT_TRACE4(( " callsubr" ));
-
- idx = (FT_Int)top[0];
- if ( idx < 0 || idx >= (FT_Int)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] += 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] += dx;
- top[2] += dx;
- top[4] += dx;
- hinter->stem3( hinter->hints, 0, top );
- }
- break;
-
- case op_setcurrentpoint:
- FT_TRACE4(( " setcurrentpoint" ));
-
- /* From the T1 specs, 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 */
- if ( decoder->flex_state != 1 )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings: " ));
- FT_ERROR(( "unexpected `setcurrentpoint'\n" ));
-
- goto Syntax_Error;
- }
- else
- 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;
-
- } /* general operator processing */
-
- } /* while ip < limit */
-
- FT_TRACE4(( "..end..\n\n" ));
-
- Fail:
- return error;
-
- Syntax_Error:
- return PSaux_Err_Syntax_Error;
-
- Stack_Underflow:
- return PSaux_Err_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_MEM_ZERO( decoder, sizeof ( *decoder ) );
-
- /* retrieve PSNames interface from list of current modules */
- {
- FT_Service_PsCMaps psnames = 0;
-
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
- if ( !psnames )
- {
- FT_ERROR(( "t1_decoder_init: " ));
- FT_ERROR(( "the `psnames' module is not available\n" ));
- return PSaux_Err_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 PSaux_Err_Ok;
- }
-
-
- /* finalize T1 decoder */
- FT_LOCAL_DEF( void )
- t1_decoder_done( T1_Decoder decoder )
- {
- t1_builder_done( &decoder->builder );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psaux/t1decode.h b/Build/source/libs/freetype2/src/psaux/t1decode.h
deleted file mode 100644
index 00728db501e..00000000000
--- a/Build/source/libs/freetype2/src/psaux/t1decode.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1decode.h */
-/* */
-/* PostScript Type 1 decoding routines (specification). */
-/* */
-/* Copyright 2000-2001, 2002, 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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/pshinter/Jamfile b/Build/source/libs/freetype2/src/pshinter/Jamfile
deleted file mode 100644
index 769dcc4b296..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/pshinter Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pshinter ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pshrec pshglob pshalgo pshmod ;
- }
- else
- {
- _sources = pshinter ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pshinter Jamfile
diff --git a/Build/source/libs/freetype2/src/pshinter/module.mk b/Build/source/libs/freetype2/src/pshinter/module.mk
deleted file mode 100644
index cd171d03552..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PSHinter module definition
-#
-
-
-# Copyright 1996-2001, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)pshinter_module_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)pshinter $(ECHO_DRIVER_DESC)Postscript hinter module$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/pshinter/pshalgo.c b/Build/source/libs/freetype2/src/pshinter/pshalgo.c
deleted file mode 100644
index 5d7e2f490d9..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshalgo.c
+++ /dev/null
@@ -1,2302 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshalgo.c */
-/* */
-/* PostScript hinting algorithm (body). */
-/* */
-/* Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 = 0;
- PSH_HintFunc ps_debug_hint_func = 0;
- PSH_Glyph ps_debug_glyph = 0;
-#endif
-
-
-#define COMPUTE_INFLEXS /* compute inflection points to optimize `S' */
- /* and similar glyphs */
-#define STRONGER /* slightly increase the contrast of smooth */
- /* hinting */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 = 0;
-
- FT_FREE( table->sort );
- FT_FREE( table->hints );
- table->num_hints = 0;
- table->max_hints = 0;
- table->sort_global = 0;
- }
-
-
- /* 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_ERROR(( "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 = 0;
- 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_ERROR(( "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 = 0;
-
- /* 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_ERROR(( "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_ERROR(( "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_ERROR(( "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 )
- {
- PSH_Hint hint;
- FT_UInt count;
-
-
- for ( count = 0; count < table->max_hints; count++ )
- {
- 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 minimal 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 possibile 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 fractinal 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 PSH_ZONE_MIN -3200000L
-#define PSH_ZONE_MAX +3200000L
-
-#define xxDEBUG_ZONES
-
-
-#ifdef DEBUG_ZONES
-
-#include <stdio.h>
-
- static void
- psh_print_zone( PSH_Zone zone )
- {
- printf( "zone [scale,delta,min,max] = [%.3f,%.3f,%d,%d]\n",
- zone->scale / 65536.0,
- zone->delta / 64.0,
- zone->min,
- zone->max );
- }
-
-#else
-
-#define psh_print_zone( x ) do { } while ( 0 )
-
-#endif /* DEBUG_ZONES */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** HINTER GLYPH MANAGEMENT *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#if 1
-
-#define psh_corner_is_flat ft_corner_is_flat
-#define psh_corner_orientation ft_corner_orientation
-
-#else
-
- FT_LOCAL_DEF( FT_Int )
- psh_corner_is_flat( FT_Pos x_in,
- FT_Pos y_in,
- FT_Pos x_out,
- FT_Pos y_out )
- {
- FT_Pos ax = x_in;
- FT_Pos ay = y_in;
-
- FT_Pos d_in, d_out, d_corner;
-
-
- if ( ax < 0 )
- ax = -ax;
- if ( ay < 0 )
- ay = -ay;
- d_in = ax + ay;
-
- ax = x_out;
- if ( ax < 0 )
- ax = -ax;
- ay = y_out;
- if ( ay < 0 )
- ay = -ay;
- d_out = ax + ay;
-
- ax = x_out + x_in;
- if ( ax < 0 )
- ax = -ax;
- ay = y_out + y_in;
- if ( ay < 0 )
- ay = -ay;
- d_corner = ax + ay;
-
- return ( d_in + d_out - d_corner ) < ( d_corner >> 4 );
- }
-
- static FT_Int
- psh_corner_orientation( FT_Pos in_x,
- FT_Pos in_y,
- FT_Pos out_x,
- FT_Pos out_y )
- {
- FT_Int result;
-
-
- /* deal with the trivial cases quickly */
- if ( in_y == 0 )
- {
- if ( in_x >= 0 )
- result = out_y;
- else
- result = -out_y;
- }
- else if ( in_x == 0 )
- {
- if ( in_y >= 0 )
- result = -out_x;
- else
- result = out_x;
- }
- else if ( out_y == 0 )
- {
- if ( out_x >= 0 )
- result = in_y;
- else
- result = -in_y;
- }
- else if ( out_x == 0 )
- {
- if ( out_y >= 0 )
- result = -in_x;
- else
- result = in_x;
- }
- else /* general case */
- {
- long long delta = (long long)in_x * out_y - (long long)in_y * out_x;
-
- if ( delta == 0 )
- result = 0;
- else
- result = 1 - 2 * ( delta < 0 );
- }
-
- return result;
- }
-
-#endif /* !1 */
-
-
-#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 = 0;
- }
-
-
- static int
- psh_compute_dir( FT_Pos dx,
- FT_Pos dy )
- {
- FT_Pos ax, ay;
- int result = PSH_DIR_NONE;
-
-
- ax = ( dx >= 0 ) ? dx : -dx;
- ay = ( dy >= 0 ) ? dy : -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_MEM_ZERO( glyph, sizeof ( *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 = outline->n_points;
- glyph->num_contours = 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_Int count;
- PSH_Point point;
-
-
- next = outline->contours[n] + 1;
- count = next - first;
-
- contour->start = points + first;
- contour->count = (FT_UInt)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;
- after = 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 == NULL )
- {
- 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 )
- {
- first = mask->end_point;
- mask++;
- for ( ; num_masks > 1; num_masks--, mask++ )
- {
- FT_UInt next;
- FT_Int count;
-
-
- next = mask->end_point;
- count = next - first;
- if ( count > 0 )
- {
- 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 if ( hint->org_len > 0 )
- point->cur_u = hint->cur_pos +
- FT_MulDiv( delta, hint->cur_len,
- hint->org_len );
- else
- point->cur_u = hint->cur_pos;
- }
- 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 = 0;
-
- 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
- {
- point = first;
-
- /* 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 PSH_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/Build/source/libs/freetype2/src/pshinter/pshalgo.h b/Build/source/libs/freetype2/src/pshinter/pshalgo.h
deleted file mode 100644
index 1a248a70524..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshalgo.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshalgo.h */
-/* */
-/* PostScript hinting algorithm (specification). */
-/* */
-/* Copyright 2001, 2002, 2003, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-#include FT_TRIGONOMETRY_H
-
-
-FT_BEGIN_HEADER
-
-
- /* handle to Hint structure */
- typedef struct PSH_HintRec_* PSH_Hint;
-
- /* hint bit-flags */
- typedef enum PSH_Hint_Flags_
- {
- PSH_HINT_GHOST = PS_HINT_FLAG_GHOST,
- PSH_HINT_BOTTOM = PS_HINT_FLAG_BOTTOM,
- PSH_HINT_ACTIVE = 4,
- PSH_HINT_FITTED = 8
-
- } PSH_Hint_Flags;
-
-
-#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 */
- enum
- {
- PSH_POINT_OFF = 1, /* point is off the curve */
- PSH_POINT_SMOOTH = 2, /* point is smooth */
- PSH_POINT_INFLEX = 4 /* 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 */
- enum
- {
- PSH_POINT_STRONG = 16, /* point is strong */
- PSH_POINT_FITTED = 32, /* point is already fitted */
- PSH_POINT_EXTREMUM = 64, /* point is local extremum */
- PSH_POINT_POSITIVE = 128, /* extremum has positive contour flow */
- PSH_POINT_NEGATIVE = 256, /* extremum has negative contour flow */
- PSH_POINT_EDGE_MIN = 512, /* point is aligned to left/bottom stem edge */
- PSH_POINT_EDGE_MAX = 1024 /* 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;
- FT_Angle angle_in;
- FT_Angle angle_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;
-
-
-#define PSH_POINT_EQUAL_ORG( a, b ) ( (a)->org_u == (b)->org_u && \
- (a)->org_v == (b)->org_v )
-
-#define PSH_POINT_ANGLE( a, b ) FT_Atan2( (b)->org_u - (a)->org_u, \
- (b)->org_v - (a)->org_v )
-
- 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/Build/source/libs/freetype2/src/pshinter/pshglob.c b/Build/source/libs/freetype2/src/pshinter/pshglob.c
deleted file mode 100644
index 8a69aa1e845..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshglob.c
+++ /dev/null
@@ -1,750 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshglob.c */
-/* */
-/* PostScript hinter global hinting management (body). */
-/* Inspired by the new auto-hinter module. */
-/* */
-/* Copyright 2001, 2002, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 = 0;
-#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 is 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_Int 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 = 0;
-
- /* */
- /* 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;
- }
- }
- }
- }
- }
-
-
- 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 = 0;
-#endif
- }
- }
-
-
- static FT_Error
- psh_globals_new( FT_Memory memory,
- T1_Private* priv,
- PSH_Globals *aglobals )
- {
- PSH_Globals globals;
- 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 );
-
- globals->blues.blue_scale = priv->blue_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( FT_Error )
- 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 = &globals->dimension[0];
-
-
- 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 );
- }
-
- return 0;
- }
-
-
- 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/Build/source/libs/freetype2/src/pshinter/pshglob.h b/Build/source/libs/freetype2/src/pshinter/pshglob.h
deleted file mode 100644
index c511626157a..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshglob.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshglob.h */
-/* */
-/* PostScript hinter global hinting management. */
-/* */
-/* Copyright 2001, 2002, 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. */
-/* */
-/***************************************************************************/
-
-
-#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( FT_Error )
- 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/Build/source/libs/freetype2/src/pshinter/pshinter.c b/Build/source/libs/freetype2/src/pshinter/pshinter.c
deleted file mode 100644
index 8e3f193093b..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshinter.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshinter.c */
-/* */
-/* FreeType PostScript Hinting module */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "pshrec.c"
-#include "pshglob.c"
-#include "pshalgo.c"
-#include "pshmod.c"
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pshinter/pshmod.c b/Build/source/libs/freetype2/src/pshinter/pshmod.c
deleted file mode 100644
index 4eb3d912729..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshmod.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshmod.c */
-/* */
-/* FreeType PostScript hinter module implementation (body). */
-/* */
-/* Copyright 2001, 2002, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
- /* 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;
- }
-
-
- static
- const PSHinter_Interface pshinter_interface =
- {
- pshinter_get_globals_funcs,
- pshinter_get_t1_funcs,
- pshinter_get_t2_funcs
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class pshinter_module_class =
- {
- 0,
- sizeof ( PS_Hinter_ModuleRec ),
- "pshinter",
- 0x10000L,
- 0x20000L,
-
- &pshinter_interface, /* module-specific interface */
-
- (FT_Module_Constructor)ps_hinter_init,
- (FT_Module_Destructor) ps_hinter_done,
- (FT_Module_Requester) 0 /* no additional interface for now */
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pshinter/pshmod.h b/Build/source/libs/freetype2/src/pshinter/pshmod.h
deleted file mode 100644
index 1a91025b260..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshmod.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshmod.h */
-/* */
-/* PostScript hinter module interface (specification). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __PSHMOD_H__
-#define __PSHMOD_H__
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) pshinter_module_class;
-
-
-FT_END_HEADER
-
-
-#endif /* __PSHMOD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pshinter/pshnterr.h b/Build/source/libs/freetype2/src/pshinter/pshnterr.h
deleted file mode 100644
index 3c0029fbf39..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshnterr.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshnterr.h */
-/* */
-/* PS Hinter error codes (specification only). */
-/* */
-/* Copyright 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/pshinter/pshrec.c b/Build/source/libs/freetype2/src/pshinter/pshrec.c
deleted file mode 100644
index 2a885ef2763..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshrec.c
+++ /dev/null
@@ -1,1215 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshrec.c */
-/* */
-/* FreeType PostScript hints recorder (body). */
-/* */
-/* Copyright 2001, 2002, 2003, 2004, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "pshrec.h"
-#include "pshalgo.h"
-
-#include "pshnterr.h"
-
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_pshrec
-
-#ifdef DEBUG_HINTER
- PS_Hints ps_debug_hints = 0;
- 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 = 0;
-
-
- 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 = 0;
- FT_UInt count;
- PS_Hint hint = 0;
-
-
- 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 = 0;
-
-
- 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_Int idx )
- {
- FT_Byte* p;
-
-
- if ( (FT_UInt)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_Int idx,
- FT_Memory memory )
- {
- FT_Error error = 0;
- FT_Byte* p;
-
-
- if ( idx < 0 )
- goto Exit;
-
- if ( (FT_UInt)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 = 0;
-
-
- 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 = 0;
- PS_Mask mask = 0;
-
-
- 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 = 0;
- 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 = 0;
- 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_Int index1,
- FT_Int 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 = ( count1 <= count2 ) ? 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_Int index1,
- FT_Int index2,
- FT_Memory memory )
- {
- FT_UInt temp;
- FT_Error error = 0;
-
-
- /* swap index1 and index2 so that index1 < index2 */
- if ( index1 > index2 )
- {
- temp = index1;
- index1 = index2;
- index2 = temp;
- }
-
- if ( index1 < index2 && index1 >= 0 && index2 < (FT_Int)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 = (FT_UInt)( ( 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;
-
- delta = table->num_masks - 1 - index2; /* number of masks to move */
- if ( delta > 0 )
- {
- /* move to end of table for reuse */
- PS_MaskRec dummy = *mask2;
-
-
- ft_memmove( mask2, mask2 + 1, delta * sizeof ( PS_MaskRec ) );
-
- mask2[delta] = dummy;
- }
-
- table->num_masks--;
- }
- else
- FT_ERROR(( "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 = 0;
-
-
- for ( index1 = table->num_masks - 1; index1 > 0; index1-- )
- {
- for ( index2 = index1 - 1; index2 >= 0; index2-- )
- {
- if ( ps_mask_table_test_intersect( table, index1, index2 ) )
- {
- error = ps_mask_table_merge( table, index2, 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 = 0;
-
-
- /* 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;
- PS_Mask mask;
-
-
- if ( count > 0 )
- {
- 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 = 0;
-
-
- /* 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 = 0;
- 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 = 0;
- 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 */
- error = ps_mask_set_bit( counter, hint1, memory );
- if ( error )
- goto Exit;
-
- error = ps_mask_set_bit( counter, hint2, memory );
- if ( error )
- goto Exit;
-
- error = ps_mask_set_bit( counter, 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 = 0;
- hints->memory = 0;
- }
-
-
- FT_LOCAL( FT_Error )
- ps_hints_init( PS_Hints hints,
- FT_Memory memory )
- {
- FT_MEM_ZERO( hints, sizeof ( *hints ) );
- hints->memory = memory;
- return 0;
- }
-
-
- /* initialize a hints for a new session */
- static void
- ps_hints_open( PS_Hints hints,
- PS_Hint_Type hint_type )
- {
- switch ( hint_type )
- {
- case PS_HINT_TYPE_1:
- case PS_HINT_TYPE_2:
- hints->error = 0;
- hints->hint_type = hint_type;
-
- ps_dimension_init( &hints->dimension[0] );
- ps_dimension_init( &hints->dimension[1] );
- break;
-
- default:
- hints->error = PSH_Err_Invalid_Argument;
- hints->hint_type = hint_type;
-
- FT_ERROR(( "ps_hints_open: invalid charstring type!\n" ));
- break;
- }
- }
-
-
- /* add one or more stems to the current hints table */
- static void
- ps_hints_stem( PS_Hints hints,
- FT_Int dimension,
- FT_UInt count,
- FT_Long* stems )
- {
- if ( !hints->error )
- {
- /* limit "dimension" to 0..1 */
- if ( dimension < 0 || dimension > 1 )
- {
- FT_ERROR(( "ps_hints_stem: invalid dimension (%d) used\n",
- dimension ));
- dimension = ( dimension != 0 );
- }
-
- /* record the stems in the current hints/masks table */
- switch ( hints->hint_type )
- {
- case PS_HINT_TYPE_1: /* Type 1 "hstem" or "vstem" operator */
- case PS_HINT_TYPE_2: /* Type 2 "hstem" or "vstem" operator */
- {
- PS_Dimension 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;
- }
- }
- break;
- }
-
- default:
- FT_ERROR(( "ps_hints_stem: called with invalid hint type (%d)\n",
- hints->hint_type ));
- break;
- }
- }
- }
-
-
- /* add one Type1 counter stem to the current hints table */
- static void
- ps_hints_t1stem3( PS_Hints hints,
- FT_Int dimension,
- FT_Long* stems )
- {
- FT_Error error = 0;
-
-
- 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 < 0 || dimension > 1 )
- {
- FT_ERROR(( "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)stems[0], (FT_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 = PSH_Err_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 = 0;
-
-
- 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 = PSH_Err_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_ERROR(( "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_ERROR(( "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_Int dimension,
- FT_Long* coords )
- {
- ps_hints_stem( (PS_Hints)hints, dimension, 1, coords );
- }
-
-
- FT_LOCAL_DEF( void )
- t1_hints_funcs_init( T1_Hints_FuncsRec* funcs )
- {
- FT_MEM_ZERO( (char*)funcs, sizeof ( *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_Int dimension,
- FT_Int count,
- FT_Fixed* coords )
- {
- FT_Pos stems[32], y, n;
- FT_Int total = count;
-
-
- 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] = ( y + 0x8000L ) >> 16;
- }
-
- /* 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_MEM_ZERO( funcs, sizeof ( *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/Build/source/libs/freetype2/src/pshinter/pshrec.h b/Build/source/libs/freetype2/src/pshinter/pshrec.h
deleted file mode 100644
index dcb3197f94d..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/pshrec.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshrec.h */
-/* */
-/* Postscript (Type1/Type2) hints recorder (specification). */
-/* */
-/* Copyright 2001, 2002, 2003, 2006, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 */
- typedef enum PS_Hint_Flags_
- {
- PS_HINT_FLAG_GHOST = 1,
- PS_HINT_FLAG_BOTTOM = 2
-
- } PS_Hint_Flags;
-
-
- /* 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( FT_Error )
- 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 /* __PS_HINTER_RECORD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/pshinter/rules.mk b/Build/source/libs/freetype2/src/pshinter/rules.mk
deleted file mode 100644
index 57773394ac6..00000000000
--- a/Build/source/libs/freetype2/src/pshinter/rules.mk
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# FreeType 2 PSHinter driver configuration rules
-#
-
-
-# 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.
-
-
-# PSHINTER driver directory
-#
-PSHINTER_DIR := $(SRC_DIR)/pshinter
-
-
-# compilation flags for the driver
-#
-PSHINTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSHINTER_DIR))
-
-
-# PSHINTER driver sources (i.e., C files)
-#
-PSHINTER_DRV_SRC := $(PSHINTER_DIR)/pshrec.c \
- $(PSHINTER_DIR)/pshglob.c \
- $(PSHINTER_DIR)/pshmod.c \
- $(PSHINTER_DIR)/pshalgo.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/Build/source/libs/freetype2/src/psnames/Jamfile b/Build/source/libs/freetype2/src/psnames/Jamfile
deleted file mode 100644
index d85c1e97de4..00000000000
--- a/Build/source/libs/freetype2/src/psnames/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/psnames Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) psnames ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = psmodule ;
- }
- else
- {
- _sources = psnames ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/psnames Jamfile
diff --git a/Build/source/libs/freetype2/src/psnames/module.mk b/Build/source/libs/freetype2/src/psnames/module.mk
deleted file mode 100644
index a93063b928d..00000000000
--- a/Build/source/libs/freetype2/src/psnames/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 PSnames module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)psnames_module_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)psnames $(ECHO_DRIVER_DESC)Postscript & Unicode Glyph name handling$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/psnames/psmodule.c b/Build/source/libs/freetype2/src/psnames/psmodule.c
deleted file mode 100644
index dbcfe44b196..00000000000
--- a/Build/source/libs/freetype2/src/psnames/psmodule.c
+++ /dev/null
@@ -1,565 +0,0 @@
-/***************************************************************************/
-/* */
-/* psmodule.c */
-/* */
-/* PSNames module implementation (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_SERVICE_POSTSCRIPT_CMAPS_H
-
-#include "psmodule.h"
-#include "pstables.h"
-
-#include "psnamerr.h"
-
-
-#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
-
-#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
-
-#define VARIANT_BIT 0x80000000UL
-#define BASE_GLYPH( code ) ( (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_ULong 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 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_ULong 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 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_get_adobe_glyph_index( glyph_name, p );
- else
- return 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 )
- return map1->unicode - map2->unicode;
- else
- return unicode1 - unicode2;
- }
-
-
- /* support for old WGL4 fonts */
-
-#define WGL_EXTRA_LIST_SIZE 8
-
- static const FT_UInt32 ft_wgl_extra_unicodes[WGL_EXTRA_LIST_SIZE] =
- {
- 0x0394,
- 0x03A9,
- 0x2215,
- 0x00AD,
- 0x02C9,
- 0x03BC,
- 0x2219,
- 0x00A0
- };
-
- static const char ft_wgl_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
- };
-
- static const FT_Int
- ft_wgl_extra_glyph_name_offsets[WGL_EXTRA_LIST_SIZE] =
- {
- 0,
- 6,
- 12,
- 21,
- 28,
- 35,
- 38,
- 53
- };
-
-
- static void
- ps_check_wgl_name( const char* gname,
- FT_UInt glyph,
- FT_UInt* wgl_glyphs,
- FT_UInt *states )
- {
- FT_UInt n;
-
-
- for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
- {
- if ( ft_strcmp( ft_wgl_extra_glyph_names +
- ft_wgl_extra_glyph_name_offsets[n], gname ) == 0 )
- {
- if ( states[n] == 0 )
- {
- /* mark this WGL extra glyph as a candidate for the cmap */
- states[n] = 1;
- wgl_glyphs[n] = glyph;
- }
-
- return;
- }
- }
- }
-
-
- static void
- ps_check_wgl_unicode( FT_UInt32 uni_char,
- FT_UInt *states )
- {
- FT_UInt n;
-
-
- for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
- {
- if ( uni_char == ft_wgl_extra_unicodes[n] )
- {
- /* disable this WGL 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 wgl_list_states[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- FT_UInt wgl_glyphs[WGL_EXTRA_LIST_SIZE];
-
-
- /* we first allocate the table */
- table->num_maps = 0;
- table->maps = 0;
-
- if ( !FT_NEW_ARRAY( table->maps, num_glyphs + WGL_EXTRA_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_wgl_name( gname, n, wgl_glyphs, wgl_list_states );
- uni_char = ps_unicode_value( gname );
-
- if ( BASE_GLYPH( uni_char ) != 0 )
- {
- ps_check_wgl_unicode( uni_char, wgl_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 < WGL_EXTRA_LIST_SIZE; n++ )
- {
- if ( wgl_list_states[n] == 1 )
- {
- /* This glyph name has an additional WGL4 representation. */
- /* Add it to the cmap. */
-
- map->unicode = ft_wgl_extra_unicodes[n];
- map->glyph_index = wgl_glyphs[n];
- map++;
- }
- }
-
- /* now compress the table a bit */
- count = (FT_UInt)( map - table->maps );
-
- if ( count == 0 )
- {
- FT_FREE( table->maps );
- if ( !error )
- error = PSnames_Err_Invalid_Argument; /* No unicode chars here! */
- }
- 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 = PSnames_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_ULong
- 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];
- }
-
-
- static
- const FT_Service_PsCMapsRec pscmaps_interface =
- {
-#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-
- (PS_Unicode_ValueFunc) ps_unicode_value,
- (PS_Unicodes_InitFunc) ps_unicodes_init,
- (PS_Unicodes_CharIndexFunc)ps_unicodes_char_index,
- (PS_Unicodes_CharNextFunc) ps_unicodes_char_next,
-
-#else
-
- 0,
- 0,
- 0,
- 0,
-
-#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
-
- (PS_Macintosh_NameFunc) ps_get_macintosh_name,
- (PS_Adobe_Std_StringsFunc) ps_get_standard_strings,
-
- t1_standard_encoding,
- t1_expert_encoding
- };
-
-
- static const FT_ServiceDescRec pscmaps_services[] =
- {
- { FT_SERVICE_ID_POSTSCRIPT_CMAPS, &pscmaps_interface },
- { NULL, NULL }
- };
-
-
- static FT_Pointer
- psnames_get_service( FT_Module module,
- const char* service_id )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( pscmaps_services, service_id );
- }
-
-#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class 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 */
-
-#ifndef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
- 0,
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
-#else
- (void*)&pscmaps_interface, /* module specific interface */
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) psnames_get_service
-#endif
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psnames/psmodule.h b/Build/source/libs/freetype2/src/psnames/psmodule.h
deleted file mode 100644
index 232fdfb9a90..00000000000
--- a/Build/source/libs/freetype2/src/psnames/psmodule.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* psmodule.h */
-/* */
-/* High-level PSNames module interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __PSMODULE_H__
-#define __PSMODULE_H__
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) psnames_module_class;
-
-
-FT_END_HEADER
-
-#endif /* __PSMODULE_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psnames/psnamerr.h b/Build/source/libs/freetype2/src/psnames/psnamerr.h
deleted file mode 100644
index ae1541d960a..00000000000
--- a/Build/source/libs/freetype2/src/psnames/psnamerr.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* psnamerr.h */
-/* */
-/* PS names module error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/psnames/psnames.c b/Build/source/libs/freetype2/src/psnames/psnames.c
deleted file mode 100644
index d6ed998bfb1..00000000000
--- a/Build/source/libs/freetype2/src/psnames/psnames.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/***************************************************************************/
-/* */
-/* psnames.c */
-/* */
-/* FreeType PSNames module component (body only). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "psmodule.c"
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psnames/pstables.h b/Build/source/libs/freetype2/src/psnames/pstables.h
deleted file mode 100644
index cc40ef735d6..00000000000
--- a/Build/source/libs/freetype2/src/psnames/pstables.h
+++ /dev/null
@@ -1,4090 +0,0 @@
-/***************************************************************************/
-/* */
-/* pstables.h */
-/* */
-/* PostScript glyph names. */
-/* */
-/* Copyright 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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! */
-
-
- static const char ft_standard_glyph_names[3696] =
- {
- '.','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,
- };
-
-
-#define FT_NUM_MAC_NAMES 258
-
- /* Values are offsets into the `ft_standard_glyph_names' table */
-
- static const short ft_mac_names[FT_NUM_MAC_NAMES] =
- {
- 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
- };
-
-
-#define FT_NUM_SID_NAMES 391
-
- /* Values are offsets into the `ft_standard_glyph_names' table */
-
- static const short ft_sid_names[FT_NUM_SID_NAMES] =
- {
- 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
- };
-
-
- /* the following are indices into the SID name table */
- static const unsigned short t1_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
- };
-
-
- /* the following are indices into the SID name table */
- static const unsigned short t1_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,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 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.
- */
- static const unsigned char ft_adobe_glyph_list[54791] =
- {
- 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, 53, 84, 59,196, 68, 6, 75,183,
- 83,178, 88,135, 93,242,101,165,109,185,111, 55,117,254,123, 73,
- 130,238,138,206,145, 31,153,182,156,189,163,249,178,221,193, 17,
- 197, 99,199,240,204, 27,204,155,210,100, 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,149, 0, 97, 36, 8,
- 36,144, 37, 35, 37,211, 38, 55, 38, 91, 45, 10, 45, 47, 45, 74,
- 46, 43, 46, 81, 47,170, 47,242, 48,197, 48,206, 49, 79, 51, 87,
- 52, 77, 52,124, 53, 19, 53, 33, 97, 7, 36, 24, 36, 34, 36, 41,
- 36, 48, 36, 73, 36, 89, 36,100,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, 36, 55, 36, 64,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, 36,116,
- 36,126, 36,133,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, 36,154, 36,195, 36,204, 36,214,226,242,229,246,233,225,
- 244,233,239,110, 2, 36,169, 36,184,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, 36,233, 36,
- 241, 36,252, 37, 7, 37, 15, 37, 27,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, 37, 45, 37, 52, 37,131, 37,201,225,242,239,
- 110,128, 1,206,233,242, 99, 2, 37, 60, 37, 65,236,101,128, 36,
- 208,245,237,230,236,229,120,133, 0,226, 37, 84, 37, 92, 37,103,
- 37,111, 37,123,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, 37,147, 37,158, 37,175, 37,
- 182, 37,191,226,229,236,239,247,227,237, 98,128, 3, 23, 99, 2,
- 37,164, 37,169,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, 37,223, 37,233, 37,247, 37,253, 38, 31,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, 38, 11, 38, 22,227,249,242,233,236,
- 236,233, 99,128, 4,211,237,225,227,242,239,110,128, 1,223,239,
- 116, 2, 38, 38, 38, 46,226,229,236,239,119,128, 30,161,237,225,
- 227,242,239,110,128, 1,225,101,131, 0,230, 38, 65, 38, 73, 38,
- 82,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, 38,
- 107, 38,127, 41, 64, 41, 70, 41, 85, 44,185, 48, 2, 38,113, 38,
- 120,176,178,176, 56,128, 32, 21,184,185,180, 49,128, 32,164,177,
- 48, 3, 38,136, 40,160, 41, 39, 48, 9, 38,156, 38,176, 38,238,
- 39, 44, 39,106, 39,168, 39,230, 40, 36, 40, 98, 49, 3, 38,164,
- 38,168, 38,172, 55,128, 4, 16, 56,128, 4, 17, 57,128, 4, 18,
- 50, 10, 38,198, 38,202, 38,206, 38,210, 38,214, 38,218, 38,222,
- 38,226, 38,230, 38,234, 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,
- 39, 4, 39, 8, 39, 12, 39, 16, 39, 20, 39, 24, 39, 28, 39, 32,
- 39, 36, 39, 40, 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, 39, 66,
- 39, 70, 39, 74, 39, 78, 39, 82, 39, 86, 39, 90, 39, 94, 39, 98,
- 39,102, 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, 39,128, 39,132,
- 39,136, 39,140, 39,144, 39,148, 39,152, 39,156, 39,160, 39,164,
- 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, 39,190, 39,194, 39,198,
- 39,202, 39,206, 39,210, 39,214, 39,218, 39,222, 39,226, 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, 39,252, 40, 0, 40, 4, 40, 8,
- 40, 12, 40, 16, 40, 20, 40, 24, 40, 28, 40, 32, 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, 40, 58, 40, 62, 40, 66, 40, 70, 40, 74,
- 40, 78, 40, 82, 40, 86, 40, 90, 40, 94, 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, 40,120, 40,124, 40,128, 40,132, 40,136, 40,140,
- 40,144, 40,148, 40,152, 40,156, 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, 40,170, 40,232, 40,237, 41, 7, 48, 10, 40,192, 40,196,
- 40,200, 40,204, 40,208, 40,212, 40,216, 40,220, 40,224, 40,228,
- 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, 40,
- 247, 40,251, 40,255, 41, 3, 53,128, 4, 15, 54,128, 4, 98, 55,
- 128, 4,114, 56,128, 4,116, 57, 5, 41, 19, 41, 23, 41, 27, 41,
- 31, 41, 35, 50,128,246,198, 51,128, 4, 95, 52,128, 4, 99, 53,
- 128, 4,115, 54,128, 4,117, 56, 2, 41, 45, 41, 59, 51, 2, 41,
- 51, 41, 55, 49,128,246,199, 50,128,246,200,180, 54,128, 4,217,
- 178,185, 57,128, 32, 14,179, 48, 2, 41, 77, 41, 81, 48,128, 32,
- 15, 49,128, 32, 13,181, 55, 7, 41,102, 41,172, 42,237, 43, 58,
- 44, 15, 44,108, 44,179, 51, 2, 41,108, 41,122, 56, 2, 41,114,
- 41,118, 49,128, 6,106, 56,128, 6, 12, 57, 8, 41,140, 41,144,
- 41,148, 41,152, 41,156, 41,160, 41,164, 41,168, 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, 41,188,
- 41,220, 42, 26, 42, 88, 42,120, 42,176, 42,232, 48, 5, 41,200,
- 41,204, 41,208, 41,212, 41,216, 48,128, 6,104, 49,128, 6,105,
- 51,128, 6, 27, 55,128, 6, 31, 57,128, 6, 33, 49, 10, 41,242,
- 41,246, 41,250, 41,254, 42, 2, 42, 6, 42, 10, 42, 14, 42, 18,
- 42, 22, 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, 42, 48, 42, 52,
- 42, 56, 42, 60, 42, 64, 42, 68, 42, 72, 42, 76, 42, 80, 42, 84,
- 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, 42,100, 42,104, 42,108,
- 42,112, 42,116, 48,128, 6, 54, 49,128, 6, 55, 50,128, 6, 56,
- 51,128, 6, 57, 52,128, 6, 58, 52, 9, 42,140, 42,144, 42,148,
- 42,152, 42,156, 42,160, 42,164, 42,168, 42,172, 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, 42,196, 42,200, 42,204, 42,208, 42,212, 42,216, 42,220,
- 42,224, 42,228, 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, 42,
- 245, 43, 21, 43, 53, 48, 5, 43, 1, 43, 5, 43, 9, 43, 13, 43,
- 17, 53,128, 6,164, 54,128, 6,126, 55,128, 6,134, 56,128, 6,
- 152, 57,128, 6,175, 49, 5, 43, 33, 43, 37, 43, 41, 43, 45, 43,
- 49, 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, 43, 74, 43, 79,
- 43, 84, 43, 89, 43,127, 43,189, 43,251,179, 54,128, 32,170,180,
- 53,128, 5,190,181, 56,128, 5,195, 54, 6, 43,103, 43,107, 43,
- 111, 43,115, 43,119, 43,123, 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, 43,149, 43,153, 43,157, 43,161, 43,165, 43,169, 43,173, 43,
- 177, 43,181, 43,185, 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, 43,
- 211, 43,215, 43,219, 43,223, 43,227, 43,231, 43,235, 43,239, 43,
- 243, 43,247, 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, 44, 3, 44,
- 7, 44, 11, 48,128, 5,234, 52,128,251, 42, 53,128,251, 43, 55,
- 4, 44, 25, 44, 39, 44, 59, 44, 64, 48, 2, 44, 31, 44, 35, 48,
- 128,251, 75, 53,128,251, 31, 49, 3, 44, 47, 44, 51, 44, 55, 54,
- 128, 5,240, 55,128, 5,241, 56,128, 5,242,178, 51,128,251, 53,
- 57, 7, 44, 80, 44, 84, 44, 88, 44, 92, 44, 96, 44,100, 44,104,
- 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, 44,116,
- 44,160, 44,165, 48, 7, 44,132, 44,136, 44,140, 44,144, 44,148,
- 44,152, 44,156, 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, 44,171, 44,175, 49,128, 5,191, 50,
- 128, 5,192,185,178, 57,128, 2,188, 54, 3, 44,193, 44,252, 45,
- 3, 49, 4, 44,203, 44,219, 44,225, 44,246, 50, 2, 44,209, 44,
- 214,180, 56,128, 33, 5,184, 57,128, 33, 19,179,181, 50,128, 33,
- 22,181, 55, 3, 44,234, 44,238, 44,242, 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, 45, 16, 45, 23,
- 242,225,246,101,128, 0,224,117, 2, 45, 29, 45, 38,234,225,242,
- 225,244,105,128, 10,133,242,237,245,235,232,105,128, 10, 5,104,
- 2, 45, 53, 45, 63,233,242,225,231,225,238, 97,128, 48, 66,239,
- 239,235,225,226,239,246,101,128, 30,163,105, 7, 45, 90, 45,115,
- 45,122, 45,134, 45,159, 45,175, 45,255, 98, 2, 45, 96, 45,105,
- 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, 45,141, 45,150,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, 45,187, 45,196, 45,210, 45,226, 45,241,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, 46, 15, 46, 25, 46, 32,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, 46, 49, 46,
- 73,225,244,225,235,225,238, 97,129, 48,162, 46, 61,232,225,236,
- 230,247,233,228,244,104,128,255,113,239,242,229,225,110,128, 49,
- 79,108, 3, 46, 89, 47,145, 47,154,101, 2, 46, 95, 47,140,102,
- 136, 5,208, 46,115, 46,124, 46,139, 46,153, 46,242, 47, 0, 47,
- 111, 47,125,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, 46,159, 46,234,225,
- 237,250, 97, 2, 46,168, 46,201,225,226,239,246,101, 2, 46,178,
- 46,187,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, 46,
- 211, 46,220,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, 47, 7, 47, 43,228,228,225,225,226,239,246,101, 2,
- 47, 20, 47, 29,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, 47, 57, 47, 66, 47, 80, 47, 96,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,
- 47,162,244,239,238,239,115,128, 3,172,109, 4, 47,180, 47,188,
- 47,199, 47,233,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, 47,213, 47,225,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, 47,252, 48, 7, 48,129, 48,139,226,239,240,239,
- 237,239,230,111,128, 49, 34,103, 4, 48, 17, 48, 28, 48, 42, 48,
- 121,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, 48,
- 53, 48,106, 48,113,226,242,225,227,235,229,116, 2, 48, 65, 48,
- 85,236,229,230,116,129, 48, 8, 48, 74,246,229,242,244,233,227,
- 225,108,128,254, 63,242,233,231,232,116,129, 48, 9, 48, 95,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, 48,145, 48,
- 157,228,225,244,244,225,228,229,246, 97,128, 9, 82,243,246,225,
- 242, 97, 3, 48,169, 48,179, 48,186,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,
- 48,214, 48,238, 49, 12, 97, 2, 48,220, 48,232,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, 48,251, 49, 6,225,242,237,229,238,
- 233,225,110,128, 5, 90,237,239,100,128, 2,188,112, 2, 49, 18,
- 49, 23,236,101,128,248,255,242,111, 2, 49, 30, 49, 38,225,227,
- 232,229,115,128, 34, 80,120, 2, 49, 44, 49, 64,229,241,245,225,
- 108,129, 34, 72, 49, 54,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, 49, 89, 49,116, 49,120, 49,165,225,229, 97, 2, 49, 97, 49,
- 107,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, 49,126, 49,140,231,232,
- 244,232,225,236,230,242,233,238,103,128, 30,154,238,103,130, 0,
- 229, 49,149, 49,157,225,227,245,244,101,128, 1,251,226,229,236,
- 239,119,128, 30, 1,242,239,119, 8, 49,185, 49,192, 50, 65, 50,
- 131, 50,181, 50,236, 51, 3, 51, 78,226,239,244,104,128, 33,148,
- 100, 3, 49,200, 49,239, 50, 30,225,243,104, 4, 49,212, 49,219,
- 49,226, 49,234,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, 49,252, 50, 3, 50, 10, 50, 17, 50, 25,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, 50, 42, 50, 49, 50, 57,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, 50, 71, 50,122,229,225,100, 4, 50, 83, 50, 93, 50,
- 103, 50,114,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, 50,144, 50,161, 50,173,
- 228,226,108,129, 33,208, 50,152,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, 50,197, 50,
- 209, 50,217, 50,228,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,
- 50,244, 50,251,236,229,230,116,128, 33,228,242,233,231,232,116,
- 128, 33,229,245,112,132, 33,145, 51, 16, 51, 44, 51, 62, 51, 70,
- 100, 2, 51, 22, 51, 34,110,129, 33,149, 51, 28,226,243,101,128,
- 33,168,239,247,238,226,225,243,101,128, 33,168,236,229,230,116,
- 129, 33,150, 51, 53,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, 51, 99, 51,175, 51,220, 52,
- 47, 52, 57, 99, 2, 51,105, 51,157,233,105, 2, 51,112, 51,135,
- 227,233,242,227,245,109,129, 0, 94, 51,123,237,239,238,239,243,
- 240,225,227,101,128,255, 62,244,233,236,228,101,129, 0,126, 51,
- 145,237,239,238,239,243,240,225,227,101,128,255, 94,242,233,240,
- 116,129, 2, 81, 51,166,244,245,242,238,229,100,128, 2, 82,237,
- 225,236,108, 2, 51,184, 51,195,232,233,242,225,231,225,238, 97,
- 128, 48, 65,235,225,244,225,235,225,238, 97,129, 48,161, 51,208,
- 232,225,236,230,247,233,228,244,104,128,255,103,244,229,242,233,
- 115, 2, 51,230, 52, 43,107,131, 0, 42, 51,240, 52, 12, 52, 35,
- 97, 2, 51,246, 52, 4,236,244,239,238,229,225,242,225,226,233,
- 99,128, 6,109,242,225,226,233, 99,128, 6,109,109, 2, 52, 18,
- 52, 24,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, 52, 89, 52, 96, 52,108, 52,116,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, 52,138,
- 52,163, 52,170, 52,195, 52,215, 52,231, 98, 2, 52,144, 52,153,
- 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, 52,177, 52,
- 186,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, 52,247, 53, 1, 53, 8,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, 53, 39, 53, 51,226,225,242,237,229,238,233,225,110,
- 128, 5, 97,233,110,130, 5,226, 53, 60, 53, 75,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, 53,120, 53,255, 54, 10, 54, 19,
- 54, 44, 55, 85, 55,147, 55,220, 57,146, 57,158, 57,201, 57,209,
- 57,219, 59, 89, 59,113, 59,122, 97, 7, 53,136, 53,146, 53,170,
- 53,177, 53,202, 53,226, 53,237,226,229,238,231,225,236,105,128,
- 9,172,227,235,243,236,225,243,104,129, 0, 92, 53,158,237,239,
- 238,239,243,240,225,227,101,128,255, 60,228,229,246, 97,128, 9,
- 44,231,117, 2, 53,184, 53,193,234,225,242,225,244,105,128, 10,
- 172,242,237,245,235,232,105,128, 10, 44,104, 2, 53,208, 53,218,
- 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, 53,243,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, 54, 27, 54, 36,225,227,227,229,238,
- 116,128, 30, 3,226,229,236,239,119,128, 30, 5,101, 6, 54, 58,
- 54, 79, 54,102, 54,244, 54,255, 55, 11,225,237,229,228,243,233,
- 248,244,229,229,238,244,232,238,239,244,229,115,128, 38,108, 99,
- 2, 54, 85, 54, 92,225,245,243,101,128, 34, 53,249,242,233,236,
- 236,233, 99,128, 4, 49,104, 5, 54,114, 54,123, 54,137, 54,167,
- 54,226,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, 54,143, 54,158,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, 54,174, 54,187,228,233,
- 225,236,225,242,225,226,233, 99,128,254,146,229,237,105, 2, 54,
- 195, 54,210,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, 55,
- 23, 55, 43, 55, 63, 55, 72, 97,129, 3,178, 55, 29,243,249,237,
- 226,239,236,231,242,229,229,107,128, 3,208,228,225,231,229,243,
- 104,129,251, 49, 55, 54,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, 55, 91, 55,141, 97, 3, 55, 99, 55,
- 109, 55,116,226,229,238,231,225,236,105,128, 9,173,228,229,246,
- 97,128, 9, 45,231,117, 2, 55,123, 55,132,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, 55,159, 55,170, 55,181, 55,195, 55,209,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, 55,228,
- 57,129, 57,140, 97, 2, 55,234, 57,124,227,107, 6, 55,249, 56,
- 2, 56, 39, 56,188, 56,243, 57, 39,227,233,242,227,236,101,128,
- 37,207,100, 2, 56, 8, 56, 17,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, 56, 45, 56,148,101, 2, 56,
- 51, 56, 87,230,244,240,239,233,238,244,233,238,103, 2, 56, 66,
- 56, 76,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, 56,107, 56,127,236,229,230,116,129,
- 48, 16, 56,116,246,229,242,244,233,227,225,108,128,254, 59,242,
- 233,231,232,116,129, 48, 17, 56,137,246,229,242,244,233,227,225,
- 108,128,254, 60,239,247,229,114, 2, 56,157, 56,172,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, 56,194,
- 56,205,229,227,244,225,238,231,236,101,128, 37,172,233,231,232,
- 244,240,239,233,238,244,233,238,103, 2, 56,222, 56,232,240,239,
- 233,238,244,229,114,128, 37,186,244,242,233,225,238,231,236,101,
- 128, 37,182,115, 3, 56,251, 57, 25, 57, 33,109, 2, 57, 1, 57,
- 13,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, 57, 47, 57, 85,229,
- 114, 2, 57, 54, 57, 69,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, 57, 97, 57,
- 113,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,
- 57,166, 57,179, 57,190,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, 57,229, 58,
- 223, 59, 40, 59, 79,225, 99, 2, 57,236, 58,130,101, 3, 57,244,
- 57,249, 58, 61,229,120,128,248,244,236,229,230,116,133, 0,123,
- 58, 10, 58, 15, 58, 37, 58, 45, 58, 50,226,116,128,248,243,109,
- 2, 58, 21, 58, 26,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, 58, 79, 58, 84, 58,106, 58,114, 58,119,226,
- 116,128,248,254,109, 2, 58, 90, 58, 95,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, 58,138, 58,180,236,229,230,116,132, 0,
- 91, 58,153, 58,158, 58,163, 58,175,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, 58,196, 58,201,
- 58,206, 58,218,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, 58,235, 58,246, 58,252,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, 59, 11, 59, 22, 59, 28,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, 59, 49, 59,
- 60,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, 59, 95, 59,103,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, 59,130, 59,141,
- 59,152,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, 59,159, 59,189,229,
- 116,130, 32, 34, 59,168, 59,178,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, 59,230, 60,179, 60,190, 60,254,
- 61, 29, 61,122, 63, 33, 64, 17, 64,117, 64,166, 67,158, 67,166,
- 67,176, 67,188, 67,221, 97, 9, 59,250, 60, 5, 60, 15, 60, 22,
- 60, 29, 60, 54, 60, 64, 60,116, 60,125,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,
- 60, 36, 60, 45,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, 60, 82, 60, 92, 60, 98,
- 60,105,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, 60,
- 133, 60,139, 60,165,229,239,102,128, 33, 5,239,110,130, 2,199,
- 60,148, 60,159,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,
- 60,200, 60,207, 60,226, 60,248,225,242,239,110,128, 1, 13,229,
- 228,233,236,236, 97,129, 0,231, 60,218,225,227,245,244,101,128,
- 30, 9,233,242, 99, 2, 60,234, 60,239,236,101,128, 36,210,245,
- 237,230,236,229,120,128, 1, 9,245,242,108,128, 2, 85,100, 2,
- 61, 4, 61, 20,239,116,129, 1, 11, 61, 11,225,227,227,229,238,
- 116,128, 1, 11,243,241,245,225,242,101,128, 51,197,101, 2, 61,
- 35, 61, 51,228,233,236,236, 97,129, 0,184, 61, 45,227,237, 98,
- 128, 3, 39,238,116,132, 0,162, 61, 64, 61, 88, 61,100, 61,111,
- 105, 2, 61, 70, 61, 78,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, 61,134, 61,197,
- 61,208, 62,136, 62,228, 97, 4, 61,144, 61,155, 61,165, 61,172,
- 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, 61,
- 179, 61,188,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, 61,222, 61,242, 62, 10, 62, 78, 62, 90, 62,111,225,226,
- 235,232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128,
- 4,189, 99, 2, 61,248, 62, 0,235,237,225,242,107,128, 39, 19,
- 249,242,233,236,236,233, 99,128, 4, 71,100, 2, 62, 16, 62, 60,
- 229,243,227,229,238,228,229,114, 2, 62, 29, 62, 49,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, 62,142,229,245,
- 227,104, 4, 62,155, 62,190, 62,205, 62,214, 97, 2, 62,161, 62,
- 176,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, 62,234, 63, 28,227,104, 3, 62,243, 63,
- 9, 63, 19,225,110, 2, 62,250, 63, 2,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, 63, 39, 63,141,229,245, 99, 5, 63, 53, 63, 88, 63,
- 103, 63,112, 63,126, 97, 2, 63, 59, 63, 74,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,
- 63,148, 63,243,236,101,132, 37,203, 63,161, 63,172, 63,177, 63,
- 201,237,245,236,244,233,240,236,121,128, 34,151,239,116,128, 34,
- 153,112, 2, 63,183, 63,189,236,245,115,128, 34,149,239,243,244,
- 225,236,237,225,242,107,128, 48, 54,247,233,244,104, 2, 63,210,
- 63,226,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, 64, 0, 64, 11,
- 226,229,236,239,247,227,237, 98,128, 3, 45,227,237, 98,128, 3,
- 2,108, 3, 64, 25, 64, 31, 64, 85,229,225,114,128, 35, 39,233,
- 227,107, 4, 64, 43, 64, 54, 64, 63, 64, 73,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, 64, 92,243,245,233,116,
- 2, 64,101, 64,109,226,236,225,227,107,128, 38, 99,247,232,233,
- 244,101,128, 38,103,109, 3, 64,125, 64,139, 64,150,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, 64,184, 64,195, 65, 26, 65,224,
- 66,253, 67, 28, 67,135, 67,144,225,242,237,229,238,233,225,110,
- 128, 5,129,236,239,110,131, 0, 58, 64,207, 64,232, 64,251,237,
- 239,110, 2, 64,215, 64,223,229,244,225,242,121,128, 32,161,239,
- 243,240,225,227,101,128,255, 26,115, 2, 64,238, 64,244,233,231,
- 110,128, 32,161,237,225,236,108,128,254, 85,244,242,233,225,238,
- 231,245,236,225,114, 2, 65, 10, 65, 20,232,225,236,230,237,239,
- 100,128, 2,209,237,239,100,128, 2,208,109, 2, 65, 32, 65,217,
- 237, 97,134, 0, 44, 65, 49, 65,113, 65,124, 65,136, 65,166, 65,
- 189, 97, 3, 65, 57, 65, 83, 65, 91,226,239,246,101, 2, 65, 66,
- 65, 72,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, 65, 97, 65,
- 104,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, 65,149, 65,160,225,226,239,246,229,227,237, 98,128, 3, 20,
- 237,239,100,128, 2,189,115, 2, 65,172, 65,179,237,225,236,108,
- 128,254, 80,245,240,229,242,233,239,114,128,246,226,244,245,242,
- 238,229,100, 2, 65,200, 65,211,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, 65,230, 65,239,231,242,245,229,238,116,128, 34, 69,116,
- 2, 65,245, 66, 3,239,245,242,233,238,244,229,231,242,225,108,
- 128, 34, 46,242,239,108,142, 35, 3, 66, 37, 66, 43, 66, 58, 66,
- 73, 66,117, 66,162, 66,176, 66,181, 66,186, 66,191, 66,197, 66,
- 202, 66,243, 66,248,193,195, 75,128, 0, 6, 66, 2, 66, 49, 66,
- 54,197, 76,128, 0, 7, 83,128, 0, 8, 67, 2, 66, 64, 66, 69,
- 193, 78,128, 0, 24, 82,128, 0, 13, 68, 3, 66, 81, 66,107, 66,
- 112, 67, 4, 66, 91, 66, 95, 66, 99, 66,103, 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, 66,129, 66,133, 66,138, 66,143, 66,
- 148, 77,128, 0, 25,206, 81,128, 0, 5,207, 84,128, 0, 4,211,
- 67,128, 0, 27, 84, 2, 66,154, 66,158, 66,128, 0, 23, 88,128,
- 0, 3, 70, 2, 66,168, 66,172, 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, 66,214, 66,218,
- 66,228, 66,233, 66,238, 73,128, 0, 15, 79,129, 0, 14, 66,224,
- 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, 67, 9,115, 2, 67, 15, 67, 21,225,
- 238,115,128,248,233,229,242,233,102,128,246,217,114, 2, 67, 34,
- 67,118,238,229,242,226,242,225,227,235,229,116, 2, 67, 49, 67,
- 83,236,229,230,116,130, 48, 12, 67, 60, 67, 72,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, 67, 95, 67,107,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, 67,
- 195, 67,213,236,121, 2, 67,202, 67,208,225,238,100,128, 34,207,
- 239,114,128, 34,206,242,229,238,227,121,128, 0,164,249,114, 4,
- 67,232, 67,240, 67,247, 67,255,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, 68, 46, 69,184, 70,208,
- 71, 12, 71,188, 72,142, 72,204, 73,133, 73,146, 73,155, 73,181,
- 73,206, 73,215, 75, 26, 75, 34, 75, 45, 75, 65, 75, 93, 97, 11,
- 68, 70, 68, 81, 68, 91, 68,163, 68,226, 68,237, 68,248, 69, 61,
- 69,123, 69,129, 69,159,225,242,237,229,238,233,225,110,128, 5,
- 100,226,229,238,231,225,236,105,128, 9,166,100, 5, 68,103, 68,
- 112, 68,118, 68,132, 68,148,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, 68,171, 68,188, 68,202,229,243,104,129, 5,
- 188, 68,179,232,229,226,242,229,119,128, 5,188,231,229,114,129,
- 32, 32, 68,196,228,226,108,128, 32, 33,117, 2, 68,208, 68,217,
- 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, 69, 0, 69, 9, 69, 47,
- 225,242,225,226,233, 99,128, 6, 47,229,116,130, 5,211, 69, 18,
- 69, 38,228,225,231,229,243,104,129,251, 51, 69, 29,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, 69, 71, 69, 80, 69, 92,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, 69,101, 69,115,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, 69,137, 69,146,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, 69,192, 70,189, 70,199,
- 108, 9, 69,212, 69,220, 70, 77, 70, 85, 70,101, 70,112, 70,130,
- 70,144, 70,155,199,242,225,246,101,128,246,211, 97, 2, 69,226,
- 70, 27,238,231,236,229,226,242,225,227,235,229,116, 2, 69,242,
- 70, 6,236,229,230,116,129, 48, 10, 69,251,246,229,242,244,233,
- 227,225,108,128,254, 61,242,233,231,232,116,129, 48, 11, 70, 16,
- 246,229,242,244,233,227,225,108,128,254, 62,114, 2, 70, 33, 70,
- 54,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, 70, 62, 70, 69,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, 70, 95,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, 70,124,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, 70,168, 70,174,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, 70,218, 70,225, 70,234, 71, 5,225,242,239,110,128, 1,
- 15,229,228,233,236,236, 97,128, 30, 17,233,242, 99, 2, 70,242,
- 70,247,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, 71, 22,
- 71,103, 71,113, 71,164, 97, 4, 71, 32, 71, 42, 71, 49, 71, 74,
- 226,229,238,231,225,236,105,128, 9,161,228,229,246, 97,128, 9,
- 33,231,117, 2, 71, 56, 71, 65,234,225,242,225,244,105,128, 10,
- 161,242,237,245,235,232,105,128, 10, 33,108, 2, 71, 80, 71, 89,
- 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, 71,122, 71,132, 71,139,226,229,238,231,225,236,
- 105,128, 9,162,228,229,246, 97,128, 9, 34,231,117, 2, 71,146,
- 71,155,234,225,242,225,244,105,128, 10,162,242,237,245,235,232,
- 105,128, 10, 34,239,116, 2, 71,171, 71,180,225,227,227,229,238,
- 116,128, 30, 11,226,229,236,239,119,128, 30, 13,101, 8, 71,206,
- 72, 3, 72, 10, 72, 35, 72, 45, 72, 56, 72,101, 72,137, 99, 2,
- 71,212, 71,249,233,237,225,236,243,229,240,225,242,225,244,239,
- 114, 2, 71,230, 71,239,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, 72, 17, 72,
- 26,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, 72, 62, 72, 85,229,244,
- 101, 2, 72, 70, 72, 77,236,229,230,116,128, 35, 43,242,233,231,
- 232,116,128, 35, 38,244, 97,129, 3,180, 72, 92,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,
- 72,148, 72,198, 97, 3, 72,156, 72,166, 72,173,226,229,238,231,
- 225,236,105,128, 9,167,228,229,246, 97,128, 9, 39,231,117, 2,
- 72,180, 72,189,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, 72,218,
- 73, 11, 73, 71, 73, 82, 73, 93, 73,103, 97, 2, 72,224, 72,246,
- 236,249,244,233,235,225,244,239,238,239,115,129, 3,133, 72,240,
- 227,237, 98,128, 3, 68,237,239,238,100,129, 38,102, 72,255,243,
- 245,233,244,247,232,233,244,101,128, 38, 98,229,242,229,243,233,
- 115,133, 0,168, 73, 30, 73, 38, 73, 49, 73, 55, 73, 63,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, 73,110, 73,121,228,101,
- 129, 0,247, 73,117,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, 73,161, 73,
- 172,233,238,229,226,229,236,239,119,128, 30, 15,243,241,245,225,
- 242,101,128, 51,151,109, 2, 73,187, 73,195,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, 73,237, 73,249, 74, 3, 74,
- 14, 74, 25, 74, 97, 74,102, 74,113, 74,228, 74,254,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,
- 74, 40, 74, 51, 74, 63, 74, 74,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, 74, 80, 74, 87,
- 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, 74,127, 74,144, 74,166, 74,177, 74,209, 74,216,225,
- 227,227,229,238,116,129, 2,217, 74,138,227,237, 98,128, 3, 7,
- 226,229,236,239,247, 99, 2, 74,155, 74,160,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, 74,186, 74,190,105,128, 1, 49,106,129,
- 246,190, 74,196,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, 74,245,232,229,226,242,229,119,128,251, 31,247,238,
- 244,225,227,107, 2, 75, 9, 75, 20,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, 75,
- 51, 75, 57,225,233,108,128, 2, 86,239,240,226,225,114,128, 1,
- 140,117, 2, 75, 71, 75, 82,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, 75,105, 75,114, 75,133, 75,170,225,236,244,239,238,101,128,
- 2,163, 99, 2, 75,120, 75,127,225,242,239,110,128, 1,198,245,
- 242,108,128, 2,165,101, 2, 75,139, 75,159,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, 75,233, 75,252, 76,
- 30, 77, 4, 77, 66, 77, 99, 77,111, 77,134, 77,187, 79, 43, 79,
- 101, 79,203, 80, 63, 80,198, 81, 17, 81, 48, 81,110, 81,163, 82,
- 98, 82,231, 82,251, 83, 39, 83,130, 97, 2, 75,239, 75,246,227,
- 245,244,101,128, 0,233,242,244,104,128, 38, 65, 98, 3, 76, 4,
- 76, 13, 76, 23,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,
- 76, 42, 76,115, 76,129, 76,161, 76,250, 97, 2, 76, 48, 76,109,
- 238,228,242, 97, 3, 76, 59, 76, 66, 76, 77,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, 76, 91, 76, 98,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, 76,135, 76,146,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, 76,169, 76,174,236,101,128, 36,212,245,237,
- 230,236,229,120,134, 0,234, 76,195, 76,203, 76,211, 76,222, 76,
- 230, 76,242,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, 77, 14, 77, 24, 77, 30, 77, 40,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, 77, 49, 77,
- 58,225,227,227,229,238,116,128, 1, 23,226,229,236,239,119,128,
- 30,185,101, 2, 77, 72, 77, 83,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, 77,117, 77,124,242,225,246,101,128, 0,232,245,234,225,242,
- 225,244,105,128, 10,143,104, 4, 77,144, 77,155, 77,166, 77,176,
- 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, 77,197, 77,
- 208, 79, 10, 79, 25,226,239,240,239,237,239,230,111,128, 49, 31,
- 231,232,116,142, 0, 56, 77,242, 77,251, 78, 5, 78, 35, 78, 42,
- 78, 80, 78,105, 78,150, 78,184, 78,196, 78,207, 78,240, 78,248,
- 79, 3,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, 78, 16,
- 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, 78, 50,
- 78, 59,227,233,242,227,236,101,128, 36,113,112, 2, 78, 65, 78,
- 72,225,242,229,110,128, 36,133,229,242,233,239,100,128, 36,153,
- 231,117, 2, 78, 87, 78, 96,234,225,242,225,244,105,128, 10,238,
- 242,237,245,235,232,105,128, 10,110,104, 2, 78,111, 78,137, 97,
- 2, 78,117, 78,128,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, 78,156, 78,174,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, 78,213, 78,220,225,242,229,110,128, 36,123,229,114, 2, 78,
- 227, 78,233,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, 79, 49, 79,
- 73,225,244,225,235,225,238, 97,129, 48,168, 79, 61,232,225,236,
- 230,247,233,228,244,104,128,255,116,111, 2, 79, 79, 79, 94,238,
- 235,225,242,231,245,242,237,245,235,232,105,128, 10,116,242,229,
- 225,110,128, 49, 84,108, 3, 79,109, 79,120, 79,181,227,249,242,
- 233,236,236,233, 99,128, 4, 59,101, 2, 79,126, 79,133,237,229,
- 238,116,128, 34, 8,246,229,110, 3, 79,143, 79,152, 79,173,227,
- 233,242,227,236,101,128, 36,106,112, 2, 79,158, 79,165,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, 79,192,
- 246,229,242,244,233,227,225,108,128, 34,238,109, 5, 79,215, 79,
- 243, 79,254, 80, 18, 80, 29,225,227,242,239,110,130, 1, 19, 79,
- 227, 79,235,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, 80, 7,246,229,242,244,233,227,225,108,128,
- 254, 49,239,238,239,243,240,225,227,101,128,255, 69,112, 2, 80,
- 35, 80, 55,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, 80, 77, 80, 88, 80, 99, 80,143, 80,175, 80,190,226,239,240,
- 239,237,239,230,111,128, 49, 35,227,249,242,233,236,236,233, 99,
- 128, 4, 61,100, 2, 80,105, 80,124,225,243,104,129, 32, 19, 80,
- 113,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, 80,151, 80,162,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, 80,206, 80,214, 80,223,231,239,
- 238,229,107,128, 1, 25,235,239,242,229,225,110,128, 49, 83,240,
- 229,110,130, 2, 91, 80,233, 80,242,227,236,239,243,229,100,128,
- 2,154,242,229,246,229,242,243,229,100,130, 2, 92, 81, 1, 81,
- 10,227,236,239,243,229,100,128, 2, 94,232,239,239,107,128, 2,
- 93,112, 2, 81, 23, 81, 30,225,242,229,110,128, 36,160,243,233,
- 236,239,110,129, 3,181, 81, 40,244,239,238,239,115,128, 3,173,
- 241,117, 2, 81, 55, 81, 99,225,108,130, 0, 61, 81, 64, 81, 76,
- 237,239,238,239,243,240,225,227,101,128,255, 29,115, 2, 81, 82,
- 81, 89,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,
- 81,118, 81,129, 81,140,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, 81,152,227,249,242,233,236,236,233, 99,
- 128, 4, 77,115, 6, 81,177, 81,188, 81,208, 82, 33, 82, 78, 82,
- 88,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, 81,220, 81,227, 82, 2, 82, 17,227,245,242,108,
- 128, 2,134,239,242,116, 2, 81,235, 81,242,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, 82, 42, 82, 53,232,233,242,225,231,225,
- 238, 97,128, 48, 71,235,225,244,225,235,225,238, 97,129, 48,167,
- 82, 66,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, 82,110, 82,136, 82,140, 82,157, 82,223, 97,130,
- 3,183, 82,118, 82,128,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, 82,149,226,229,236,239,119,128, 30, 27,238,225,232,
- 244, 97, 3, 82,169, 82,201, 82,210,230,239,245,235,104, 2, 82,
- 179, 82,188,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, 82,237, 82,246,235,239,242,
- 229,225,110,128, 49, 97,242,111,128, 32,172,246,239,247,229,236,
- 243,233,231,110, 3, 83, 11, 83, 21, 83, 28,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, 83, 45, 83,118,227,236,225,
- 109,132, 0, 33, 83, 60, 83, 71, 83, 98, 83,110,225,242,237,229,
- 238,233,225,110,128, 5, 92,100, 2, 83, 77, 83, 82,226,108,128,
- 32, 60,239,247,110,129, 0,161, 83, 90,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, 83,141, 83,160, 83,171, 99, 2, 83,
- 147, 83,154,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, 83,206, 84, 32, 84, 43, 84, 52, 84, 64,
- 84,167, 84,183, 86,191, 86,204, 86,230, 88,107, 88,115, 97, 4,
- 83,216, 83,223, 83,234, 83,245,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, 83,255, 84, 8, 84, 20,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, 84, 72, 84,150, 84,160,104, 4, 84, 82, 84,105, 84,119,
- 84,135,225,114, 2, 84, 89, 84, 96,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, 84,175, 84,179,105,
- 128,251, 3,108,128,251, 4,105,136,251, 1, 84,203, 84,243, 84,
- 254, 85, 20, 85,142, 85,159, 85,167, 85,180,230,244,229,229,110,
- 2, 84,213, 84,222,227,233,242,227,236,101,128, 36,110,112, 2,
- 84,228, 84,235,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, 85, 7, 85, 13,226,239,120,128, 37,160,242,229,227,
- 116,128, 37,172,238,225,108, 5, 85, 34, 85, 73, 85, 90, 85,107,
- 85,123,235,225,102,130, 5,218, 85, 44, 85, 64,228,225,231,229,
- 243,104,129,251, 58, 85, 55,232,229,226,242,229,119,128,251, 58,
- 232,229,226,242,229,119,128, 5,218,237,229,109,129, 5,221, 85,
- 81,232,229,226,242,229,119,128, 5,221,238,245,110,129, 5,223,
- 85, 98,232,229,226,242,229,119,128, 5,223,240,101,129, 5,227,
- 85,114,232,229,226,242,229,119,128, 5,227,244,243,225,228,105,
- 129, 5,229, 85,133,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, 85,213, 85,222, 85,232, 86,
- 6, 86, 13, 86, 23, 86, 48, 86, 75, 86,109, 86,121, 86,132, 86,
- 165, 86,173, 86,184,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, 85,243,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, 86, 30, 86, 39,234,225,
- 242,225,244,105,128, 10,235,242,237,245,235,232,105,128, 10,107,
- 232, 97, 2, 86, 55, 86, 66,227,235,225,242,225,226,233, 99,128,
- 6,101,238,231,250,232,239,117,128, 48, 37,105, 2, 86, 81, 86,
- 99,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, 86,138, 86,145,225,242,229,110,128, 36,
- 120,229,114, 2, 86,152, 86,158,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, 86,197,239,242,233,110,128, 1,146,109, 2, 86,210,
- 86,221,239,238,239,243,240,225,227,101,128,255, 70,243,241,245,
- 225,242,101,128, 51,153,111, 4, 86,240, 87, 6, 87, 18, 87, 25,
- 230, 97, 2, 86,247, 86,255,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, 87, 58,
- 87, 67, 87, 77, 87,107, 87,114, 87,139, 87,166, 87,200, 87,212,
- 87,231, 87,242, 88, 19, 88, 27, 88, 38,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, 87, 88,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, 87,121, 87,130,234,225,242,225,244,105,128,
- 10,234,242,237,245,235,232,105,128, 10,106,232, 97, 2, 87,146,
- 87,157,227,235,225,242,225,226,233, 99,128, 6,100,238,231,250,
- 232,239,117,128, 48, 36,105, 2, 87,172, 87,190,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, 87,248, 87,255,225,242,229,110,128, 36,119,229,
- 114, 2, 88, 6, 88, 12,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, 88, 44, 88, 82,229,229,110, 2,
- 88, 52, 88, 61,227,233,242,227,236,101,128, 36,109,112, 2, 88,
- 67, 88, 74,225,242,229,110,128, 36,129,229,242,233,239,100,128,
- 36,149,104, 2, 88, 88, 88, 93,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, 88,122, 88,130,227,244,233,239,110,128,
- 32, 68,238, 99,128, 32,163,103,144, 0,103, 88,171, 89,117, 89,
- 140, 89,201, 89,218, 90,139, 91,132, 91,217, 91,230, 92, 88, 92,
- 113, 92,141, 92,163, 93,108, 93,130, 93,232, 97, 9, 88,191, 88,
- 201, 88,208, 88,215, 89, 23, 89, 48, 89, 59, 89, 70, 89,104,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, 88,225, 88,234, 88,248, 89,
- 8,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, 89, 30, 89, 39,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, 89, 80, 89, 93,
- 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, 89,123, 89,133,239,240,239,237,239,
- 230,111,128, 49, 13,242,229,246,101,128, 1, 31, 99, 4, 89,150,
- 89,157, 89,166, 89,188,225,242,239,110,128, 1,231,229,228,233,
- 236,236, 97,128, 1, 35,233,242, 99, 2, 89,174, 89,179,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, 89,
- 209,225,227,227,229,238,116,128, 1, 33,101, 6, 89,232, 89,243,
- 89,254, 90, 9, 90, 28, 90,130,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, 90, 36,
- 90, 85, 90, 95,229,243,104, 3, 90, 46, 90, 61, 90, 70,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, 90,106, 90,121,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, 90,151, 91,
- 28, 91, 91, 91,116, 91,122, 97, 4, 90,161, 90,171, 90,194, 90,
- 219,226,229,238,231,225,236,105,128, 9,152,100, 2, 90,177, 90,
- 188,225,242,237,229,238,233,225,110,128, 5,114,229,246, 97,128,
- 9, 24,231,117, 2, 90,201, 90,210,234,225,242,225,244,105,128,
- 10,152,242,237,245,235,232,105,128, 10, 24,233,110, 4, 90,230,
- 90,239, 90,253, 91, 13,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, 91, 36,
- 91, 57, 91, 74,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, 91, 98,
- 91,105,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, 91,140, 91,151, 91,162,232,233,242,225,
- 231,225,238, 97,128, 48, 78,235,225,244,225,235,225,238, 97,128,
- 48,174,109, 2, 91,168, 91,179,225,242,237,229,238,233,225,110,
- 128, 5, 99,229,108,130, 5,210, 91,188, 91,208,228,225,231,229,
- 243,104,129,251, 50, 91,199,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, 91,241, 92,
- 2,233,238,246,229,242,244,229,228,243,244,242,239,235,101,128,
- 1,190,243,244,239,112,132, 2,148, 92, 17, 92, 28, 92, 34, 92,
- 66,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, 92, 49, 92,
- 55,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, 92, 77,242,229,246,
- 229,242,243,229,100,128, 2,162,109, 2, 92, 94, 92,102,225,227,
- 242,239,110,128, 30, 33,239,238,239,243,240,225,227,101,128,255,
- 71,111, 2, 92,119, 92,130,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,
- 92,148, 92,154,242,229,110,128, 36,162,243,241,245,225,242,101,
- 128, 51,172,114, 2, 92,169, 93, 10, 97, 2, 92,175, 92,183,228,
- 233,229,238,116,128, 34, 7,246,101,134, 0, 96, 92,200, 92,211,
- 92,228, 92,235, 92,244, 93, 0,226,229,236,239,247,227,237, 98,
- 128, 3, 22, 99, 2, 92,217, 92,222,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, 93, 26, 93, 45, 93, 57, 93,100,229,241,245,225,108,129,
- 34,101, 93, 36,239,242,236,229,243,115,128, 34,219,237,239,238,
- 239,243,240,225,227,101,128,255, 30,111, 2, 93, 63, 93, 89,114,
- 2, 93, 69, 93, 82,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, 93,114,
- 93,122,227,242,233,240,116,128, 2, 97,244,242,239,235,101,128,
- 1,229,117, 4, 93,140, 93,151, 93,208, 93,219,232,233,242,225,
- 231,225,238, 97,128, 48, 80,233,108, 2, 93,158, 93,183,236,229,
- 237,239,116, 2, 93,168, 93,175,236,229,230,116,128, 0,171,242,
- 233,231,232,116,128, 0,187,243,233,238,231,108, 2, 93,193, 93,
- 200,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, 94, 22, 96,164, 96,199, 96,236, 97, 20,
- 98,164, 98,184, 99,149, 99,161, 99,173,100,241,100,249,101, 4,
- 101, 13,101, 93,101, 97, 97, 13, 94, 50, 94, 89, 94, 99, 94,129,
- 94,154, 94,232, 94,244, 95, 13, 95, 28, 95, 57, 95, 70, 95,128,
- 95,137, 97, 2, 94, 56, 94, 75,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, 94,106, 94,124,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, 94,136, 94,145,234,225,242,225,244,105,128, 10,
- 185,242,237,245,235,232,105,128, 10, 57,104, 4, 94,164, 94,173,
- 94,187, 94,217,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, 94,193, 94,
- 208,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, 95,
- 1,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,
- 95, 36, 95, 45,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, 95, 76, 95, 92,228,243,233,231,
- 238,227,249,242,233,236,236,233, 99,128, 4, 74,240,239,239,110,
- 2, 95,101, 95,114,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, 95,147, 95,
- 239, 96, 74,240,225,244,225,104,134, 5,178, 95,167, 95,172, 95,
- 186, 95,195, 95,210, 95,226,177, 54,128, 5,178, 50, 2, 95,178,
- 95,182, 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, 96, 6, 96, 11, 96, 16, 96, 21,
- 96, 30, 96, 45, 96, 61,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, 96, 96, 96,101, 96,106, 96,111, 96,120, 96,135, 96,151,
- 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, 96,172, 96,177, 96,187,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, 96,205, 96,214,229,228,233,
- 236,236, 97,128, 30, 41,233,242, 99, 2, 96,222, 96,227,236,101,
- 128, 36,215,245,237,230,236,229,120,128, 1, 37,100, 2, 96,242,
- 96,252,233,229,242,229,243,233,115,128, 30, 39,239,116, 2, 97,
- 3, 97, 12,225,227,227,229,238,116,128, 30, 35,226,229,236,239,
- 119,128, 30, 37,101,136, 5,212, 97, 40, 97, 73, 97, 93, 98, 66,
- 98, 82, 98,127, 98,136, 98,149,225,242,116,129, 38,101, 97, 48,
- 243,245,233,116, 2, 97, 57, 97, 65,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, 97, 84,232,229,226,242,229,119,128,251, 52,104, 6, 97,
- 107, 97,135, 97,143, 97,193, 97,239, 98, 32, 97, 2, 97,113, 97,
- 127,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, 97,154, 97,185,236,116, 2, 97,161, 97,
- 173,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, 97,208, 97,222,
- 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, 97,245, 98, 23,238,233,244,233,225,236, 97, 2, 98, 1, 98,
- 15,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, 98, 44, 98, 58,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, 98, 88, 98,112,225,244,225,235,225,238, 97,129,
- 48,216, 98,100,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, 98,155,232,229,226,242,229,
- 119,128, 5,215,232,239,239,107,129, 2,102, 98,173,243,245,240,
- 229,242,233,239,114,128, 2,177,105, 4, 98,194, 99, 23, 99, 34,
- 99, 59,229,245,104, 4, 98,206, 98,241, 99, 0, 99, 9, 97, 2,
- 98,212, 98,227,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, 99, 47,232,
- 225,236,230,247,233,228,244,104,128,255,139,242,233,113,134, 5,
- 180, 99, 77, 99, 82, 99, 96, 99,105, 99,120, 99,136,177, 52,128,
- 5,180, 50, 2, 99, 88, 99, 92, 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, 99,
- 193, 99,204, 99,228, 99,253,100, 85,100, 98,100,184,100,224,100,
- 235,225,242,237,229,238,233,225,110,128, 5,112,232,105, 2, 99,
- 211, 99,219,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, 99,
- 241,232,225,236,230,247,233,228,244,104,128,255,142,236,225,109,
- 135, 5,185,100, 17,100, 22,100, 27,100, 32,100, 41,100, 56,100,
- 72,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,100,104,100,174,107, 4,100,114,100,126,100,132,
- 100,154,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,100,190,100,217,105, 2,
- 100,196,100,205,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,101,
- 23,101, 34,101, 47,101, 72,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,101, 60,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,101, 87,227,237, 98,128, 3, 11,118,128, 1,
- 149,249,240,232,229,110,132, 0, 45,101,113,101,124,101,136,101,
- 159,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,101,142,101,149,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,101,211,101,234,102, 12,102,
- 59,105,197,106, 61,106, 98,106,125,107, 31,107, 35,107, 73,107,
- 95,107,179,108, 88,108,163,108,171,108,184,109, 15,109, 72,109,
- 100,109,144,225, 99, 2,101,218,101,224,245,244,101,128, 0,237,
- 249,242,233,236,236,233, 99,128, 4, 79, 98, 3,101,242,101,251,
- 102, 5,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,102, 20,
- 102, 27,102, 49,225,242,239,110,128, 1,208,233,242, 99, 2,102,
- 35,102, 40,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,102, 69,102,
- 79,105,154,105,187,226,236,231,242,225,246,101,128, 2, 9,101,
- 2,102, 85,105,149,239,231,242,225,240,104, 7,102,106,102,120,
- 102,133,105, 62,105, 93,105,106,105,118,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,102,164,102,180,103, 23,103, 77,
- 103,143,103,172,103,188,103,245,104, 38,104, 50,104, 77,104,144,
- 105, 26,105, 55,225,236,236,233,225,238,227,229,240,225,242,229,
- 110,128, 50, 63, 99, 4,102,190,102,201,102,215,102,222,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,
- 102,230,102,245,103, 9,237,237, 97,129, 48, 1,102,238,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,103, 31,103, 43,103, 60,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,103,
- 83,103, 98,229,243,244,233,246,225,236,240,225,242,229,110,128,
- 50, 64,105, 2,103,104,103,133,238,225,238,227,233,225,108, 2,
- 103,116,103,125,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,103,149,103,160,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,103,196,
- 103,222,103,234,225,226,239,114, 2,103,205,103,214,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,103,251,104, 27,101, 2,104, 1,104,
- 16,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,104, 56,104, 64,229,242,233,239,100,128, 48, 2,
- 242,233,238,244,227,233,242,227,236,101,128, 50,158,114, 2,104,
- 83,104,131,101, 3,104, 91,104,102,104,117,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,104,156,104,185,104,199,104,224,104,252,101, 2,104,162,
- 104,175,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,104,205,104,211,225,227,101,
- 128, 48, 0,229,227,233,225,236,240,225,242,229,110,128, 50, 53,
- 116, 2,104,230,104,241,239,227,235,240,225,242,229,110,128, 50,
- 49,245,228,249,240,225,242,229,110,128, 50, 59,117, 2,105, 2,
- 105, 11,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,105, 32,105, 44,
- 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,
- 105, 68,105, 81,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,105,124,105,137,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,105,168,105,176,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,105,205,105,221,105,232,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,105,244,106, 23,
- 106, 38,106, 47, 97, 2,105,250,106, 9,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,106,
- 67,106, 74,242,225,246,101,128, 0,236,117, 2,106, 80,106, 89,
- 234,225,242,225,244,105,128, 10,135,242,237,245,235,232,105,128,
- 10, 7,104, 2,106,104,106,114,233,242,225,231,225,238, 97,128,
- 48, 68,239,239,235,225,226,239,246,101,128, 30,201,105, 8,106,
- 143,106,153,106,164,106,171,106,196,106,212,106,227,106,243,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,106,178,
- 106,187,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,107, 3,107,
- 13,107, 20,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,107, 41,107, 65,225,244,225,235,225,238, 97,
- 129, 48,164,107, 53,232,225,236,230,247,233,228,244,104,128,255,
- 114,239,242,229,225,110,128, 49, 99,108, 2,107, 79,107, 84,228,
- 101,128, 2,220,245,249,232,229,226,242,229,119,128, 5,172,109,
- 2,107,101,107,168, 97, 3,107,109,107,129,107,154,227,242,239,
- 110,129, 1, 43,107,118,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,107,191,107,201,107,210,107,222,108, 50,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,
- 107,228,108, 40,101, 2,107,234,108, 29,231,242,225,108,131, 34,
- 43,107,247,108, 9,108, 14, 98, 2,107,253,108, 5,239,244,244,
- 239,109,128, 35, 33,116,128, 35, 33,229,120,128,248,245,116, 2,
- 108, 20,108, 25,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,108, 58,108, 67,108, 76,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,108, 96,108,107,108,115,
- 227,249,242,233,236,236,233, 99,128, 4, 81,231,239,238,229,107,
- 128, 1, 47,244, 97,131, 3,185,108,126,108,147,108,155,228,233,
- 229,242,229,243,233,115,129, 3,202,108,139,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,108,194,108,239,108,253,
- 109, 5,237,225,236,108, 2,108,203,108,214,232,233,242,225,231,
- 225,238, 97,128, 48, 67,235,225,244,225,235,225,238, 97,129, 48,
- 163,108,227,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,109, 21,109, 55,229,242,225,244,233,239,110, 2,109, 33,109,
- 44,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,109, 64,
- 226,229,236,239,119,128, 30, 45,117, 2,109, 78,109, 89,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,109,116,
- 109,126,109,133,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,109,155,109,166,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,109,209,110,
- 16,110, 27,110, 77,110, 93,110,206,111, 19,111, 24,111, 36,111,
- 44, 97, 4,109,219,109,230,109,240,109,247,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,109,254,110, 7,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,110, 35,110,
- 42,110, 64,225,242,239,110,128, 1,240,233,242, 99, 2,110, 50,
- 110, 55,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,110,
- 101,110,112,110,177,227,249,242,233,236,236,233, 99,128, 4, 88,
- 229,109, 4,110,123,110,132,110,146,110,162,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,110,183,110,192,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,
- 110,212,111, 6, 97, 3,110,220,110,230,110,237,226,229,238,231,
- 225,236,105,128, 9,157,228,229,246, 97,128, 9, 29,231,117, 2,
- 110,244,110,253,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,111, 95,113,184,113,
- 195,114, 1,114, 12,114,102,114,116,115,224,116,164,116,177,116,
- 203,116,252,117,134,117,156,117,169,117,192,117,234,117,244, 97,
- 12,111,121,111,153,111,175,111,205,112, 63,112, 88,112,118,112,
- 143,112,249,113, 7,113,130,113,159, 98, 2,111,127,111,144,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,111,159,111,165,245,
- 244,101,128, 30, 49,249,242,233,236,236,233, 99,128, 4, 58,228,
- 101, 2,111,182,111,200,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,111,223,111,232,111,252,112, 10,112, 19,112, 35,112, 50,225,
- 242,225,226,233, 99,128, 6, 67,228,225,231,229,243,104,129,251,
- 59,111,243,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,112, 70,112, 79,234,225,242,225,244,105,128, 10,149,242,
- 237,245,235,232,105,128, 10, 21,104, 2,112, 94,112,104,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,112,131,232,225,236,230,247,233,228,244,104,128,255,118,112,
- 2,112,149,112,170,240, 97,129, 3,186,112,156,243,249,237,226,
- 239,236,231,242,229,229,107,128, 3,240,249,229,239,245,110, 3,
- 112,182,112,196,112,230,237,233,229,245,237,235,239,242,229,225,
- 110,128, 49,113,112, 2,112,202,112,217,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,113, 19,113, 63,113, 78,113,
- 86,113,114,232,233,228,225,225,245,244,111, 2,113, 32,113, 41,
- 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,113, 93,113,102,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,113,205,113,227,113,236,113,244, 97, 2,113,
- 211,113,221,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,114, 22,
- 114, 49,114, 74,114, 86,104, 2,114, 28,114, 39,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,114, 62,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,114,130,115, 3,115, 14,115, 39,115,126,
- 115,214, 97, 5,114,142,114,152,114,163,114,170,114,195,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,114,177,114,
- 186,234,225,242,225,244,105,128, 10,150,242,237,245,235,232,105,
- 128, 10, 22,104, 4,114,205,114,214,114,228,114,244,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,115, 21,115, 28,228,229,246, 97,128, 9, 89,231,245,242,237,
- 245,235,232,105,128, 10, 89,233,229,245,235,104, 4,115, 53,115,
- 88,115,103,115,112, 97, 2,115, 59,115, 74,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,
- 115,136,115,185,115,195,115,200,235,104, 4,115,147,115,156,115,
- 165,115,175,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,115,234,115,245,116, 14,116, 63,232,233,242,225,231,225,
- 238, 97,128, 48, 77,235,225,244,225,235,225,238, 97,129, 48,173,
- 116, 2,232,225,236,230,247,233,228,244,104,128,255,119,242,111,
- 3,116, 23,116, 38,116, 54,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,116, 78,116,113,116,128,116,137,116,151, 97, 2,
- 116, 84,116, 99,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,116,183,116,194,233,238,229,226,229,236,239,119,128,
- 30, 53,243,241,245,225,242,101,128, 51,152,109, 3,116,211,116,
- 225,116,236,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,117, 8,
- 117, 34,117, 72,117, 84,117, 98,104, 2,117, 14,117, 24,233,242,
- 225,231,225,238, 97,128, 48, 83,237,243,241,245,225,242,101,128,
- 51,192,235, 97, 2,117, 41,117, 49,233,244,232,225,105,128, 14,
- 1,244,225,235,225,238, 97,129, 48,179,117, 60,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,117,104,117,124,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,117,141,117,147,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,117,175,117,184,243,
- 241,245,225,242,101,128, 51,207,245,242,238,229,100,128, 2,158,
- 117, 2,117,198,117,209,232,233,242,225,231,225,238, 97,128, 48,
- 79,235,225,244,225,235,225,238, 97,129, 48,175,117,222,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,118, 38,120, 65,120, 94,120,160,120,198,121, 94,121,103,
- 121,119,121,143,121,161,122, 23,122, 64,122,199,122,207,122,240,
- 122,249,123, 1,123, 63, 97, 7,118, 54,118, 64,118, 71,118, 78,
- 118,103,118,119,120, 53,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,118, 85,118, 94,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,118,141,119, 80,119, 97,119,
- 135,119,149,119,168,119,184,119,204,119,224,119,247, 97, 2,118,
- 147,119, 72,236,229,102, 4,118,159,118,173,119, 9,119, 26,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,252,232,225,237,
- 250, 97, 2,118,183,118,224,225,226,239,246,101, 2,118,193,118,
- 207,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,118,234,118,248,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,119, 41,119, 55,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,119, 88,243,244,242,239,235,101,128, 1,
- 155,229,100,130, 5,220,119,106,119,126,228,225,231,229,243,104,
- 129,251, 60,119,117,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,119,254,120, 11,228,233,
- 225,236,225,242,225,226,233, 99,128,254,224,229,109, 2,120, 18,
- 120, 37,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,120, 73,120, 78,120, 84,225,114,128, 1,154,229,236,
- 116,128, 2,108,239,240,239,237,239,230,111,128, 49, 12, 99, 4,
- 120,104,120,111,120,120,120,147,225,242,239,110,128, 1, 62,229,
- 228,233,236,236, 97,128, 1, 60,233,242, 99, 2,120,128,120,133,
- 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,120,170,120,179,225,227,227,229,238,116,
- 128, 1, 64,226,229,236,239,119,129, 30, 55,120,189,237,225,227,
- 242,239,110,128, 30, 57,101, 3,120,206,120,244,121, 89,230,116,
- 2,120,213,120,229,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,121, 1,121, 23,121, 35,121,
- 81,229,241,245,225,108,129, 34,100,121, 11,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,121, 41,121, 70,114, 2,121, 47,121, 60,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,121,125,121,130,242, 97,128,
- 32,164,247,238,225,242,237,229,238,233,225,110,128, 5,108,106,
- 129, 1,201,121,149,229,227,249,242,233,236,236,233, 99,128, 4,
- 89,108,132,246,192,121,173,121,197,121,208,121,217, 97, 2,121,
- 179,121,186,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,121,231,121,241,121,248,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,122, 6,122, 16,226,229,238,231,225,236,105,128, 9,227,
- 228,229,246, 97,128, 9, 99,109, 3,122, 31,122, 44,122, 55,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,122, 78,122, 90,122,132,122,143,122,149,122,191,227,232,
- 245,236,225,244,232,225,105,128, 14, 44,231,233,227,225,108, 3,
- 122,102,122,108,122,127,225,238,100,128, 34, 39,238,239,116,129,
- 0,172,122,116,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,122,159,122,182, 99,
- 2,122,165,122,177,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,122,215,122,222,122,230,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,123, 15,123, 25,123, 32,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,123, 46,123, 56,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,123,109,125,
- 218,125,243,126, 14,126, 39,127, 92,127,114,128,169,128,199,128,
- 248,129, 99,129,121,129,146,129,155,130,182,130,210, 97, 12,123,
- 135,123,145,123,209,123,216,123,241,124, 33,125,125,125,150,125,
- 155,125,169,125,181,125,186,226,229,238,231,225,236,105,128, 9,
- 174, 99, 2,123,151,123,203,242,239,110,132, 0,175,123,165,123,
- 176,123,182,123,191,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,123,223,123,232,234,
- 225,242,225,244,105,128, 10,174,242,237,245,235,232,105,128, 10,
- 46,104, 2,123,247,124, 23,225,240,225,235,104, 2,124, 1,124,
- 10,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,124, 45,124,114,124,177,124,207,125,113,227,232,225,
- 244,244,225,247, 97, 3,124, 60,124, 91,124, 98,236,239,119, 2,
- 124, 68,124, 79,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,124,123,124,154,124,161,236,239,119, 2,124,
- 131,124,142,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,124,189,124,200,236,229,230,
- 244,244,232,225,105,128,248,132,244,232,225,105,128, 14, 49,116,
- 3,124,215,124,243,125, 50,225,233,235,232,117, 2,124,225,124,
- 236,236,229,230,244,244,232,225,105,128,248,137,244,232,225,105,
- 128, 14, 71,232,111, 3,124,252,125, 27,125, 34,236,239,119, 2,
- 125, 4,125, 15,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,125, 59,125, 90,125, 97,236,239,119, 2,125,
- 67,125, 78,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,125,138,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,125,192,125,210,
- 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,125,224,125,234,
- 239,240,239,237,239,230,111,128, 49, 7,243,241,245,225,242,101,
- 128, 51,212, 99, 2,125,249,126, 1,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,126, 22,126, 31,225,227,227,229,238,116,128, 30, 65,226,
- 229,236,239,119,128, 30, 67,101, 7,126, 55,126,182,126,193,126,
- 208,126,233,127, 14,127, 26,101, 2,126, 61,126,169,109, 4,126,
- 71,126, 80,126, 94,126,110,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,126,117,126,130,228,233,225,236,225,242,225,226,233, 99,128,
- 254,228,229,237,105, 2,126,138,126,153,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,126,221,232,225,236,
- 230,247,233,228,244,104,128,255,146,109,130, 5,222,126,241,127,
- 5,228,225,231,229,243,104,129,251, 62,126,252,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,127,
- 37,127, 46,127, 79,232,229,226,242,229,119,128, 5,165,235,229,
- 230,245,236, 97, 2,127, 57,127, 66,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,127, 98,
- 127,104,239,239,107,128, 2,113,250,243,241,245,225,242,101,128,
- 51,146,105, 6,127,128,127,165,128, 46,128, 57,128, 82,128,139,
- 228,100, 2,127,135,127,160,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,127,179,127,214,127,229,127,
- 238,128, 33, 97, 2,127,185,127,200,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,
- 127,244,128, 20, 97, 2,127,250,128, 8,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,128, 70,232,225,236,230,247,233,228,244,104,128,
- 255,144,238,117, 2,128, 89,128,134,115,132, 34, 18,128,101,128,
- 112,128,121,128,127,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,128,146,
- 128,160,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,128,175,128,190,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,128,207,128,221,128,232,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,129, 4,129, 30,129, 55,
- 129, 65,129, 74,104, 2,129, 10,129, 20,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,129, 43,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,129, 89,228,243,241,245,225,242,101,
- 128, 51,168,240, 97, 2,129,106,129,112,242,229,110,128, 36,168,
- 243,241,245,225,242,101,128, 51,171,115, 2,129,127,129,136,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,129,
- 185,129,189,129,199,129,223,129,233,129,255,130, 10,130, 35,130,
- 58,130, 68,130, 98,130,162,130,172, 49,128, 0,181,225,243,241,
- 245,225,242,101,128, 51,130,227,104, 2,129,206,129,216,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,129,239,129,246,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,130, 23,232,225,236,230,247,233,228,244,104,
- 128,255,145,108, 2,130, 41,130, 50,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,130, 76,130, 85,232,229,226,242,
- 229,119,128, 5,163,236,229,230,244,232,229,226,242,229,119,128,
- 5,163,115, 2,130,104,130,153,233, 99, 3,130,113,130,130,130,
- 141,225,236,238,239,244,101,129, 38,106,130,124,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,130,188,130,201,237,229,231,225,
- 243,241,245,225,242,101,128, 51,185,243,241,245,225,242,101,128,
- 51,183,119, 2,130,216,130,229,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,131, 30,131,164,131,188,131,254,132, 23,132, 81,132, 91,
- 132,158,132,201,134,235,134,253,135, 22,135, 53,135, 79,135,144,
- 137,126,137,134,137,159,137,167,138,135,138,145,138,155, 97, 8,
- 131, 48,131, 68,131, 75,131, 82,131,107,131,118,131,143,131,155,
- 98, 2,131, 54,131, 63,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,131, 89,131, 98,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,131,131,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,131,170,131,180,239,240,239,237,239,230,
- 111,128, 49, 11,243,240,225,227,101,128, 0,160, 99, 4,131,198,
- 131,205,131,214,131,241,225,242,239,110,128, 1, 72,229,228,233,
- 236,236, 97,128, 1, 70,233,242, 99, 2,131,222,131,227,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,132, 6,132, 15,225,227,227,229,238,116,128, 30, 69,226,
- 229,236,239,119,128, 30, 71,101, 3,132, 31,132, 42,132, 67,232,
- 233,242,225,231,225,238, 97,128, 48,109,235,225,244,225,235,225,
- 238, 97,129, 48,205,132, 55,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,132, 97,132,
- 147, 97, 3,132,105,132,115,132,122,226,229,238,231,225,236,105,
- 128, 9,153,228,229,246, 97,128, 9, 25,231,117, 2,132,129,132,
- 138,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,
- 132,164,132,174,233,242,225,231,225,238, 97,128, 48,147,239,239,
- 107, 2,132,182,132,189,236,229,230,116,128, 2,114,242,229,244,
- 242,239,230,236,229,120,128, 2,115,105, 4,132,211,133,124,133,
- 135,133,193,229,245,110, 7,132,229,133, 8,133, 40,133, 54,133,
- 63,133, 96,133,109, 97, 2,132,235,132,250,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,133, 15,133, 27,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,133, 70,133, 84,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,133,141,133,165,225,244,225,
- 235,225,238, 97,129, 48,203,133,153,232,225,236,230,247,233,228,
- 244,104,128,255,134,232,225,232,233,116, 2,133,175,133,186,236,
- 229,230,244,244,232,225,105,128,248,153,244,232,225,105,128, 14,
- 77,238,101,141, 0, 57,133,224,133,233,133,243,134, 17,134, 24,
- 134, 49,134, 76,134,110,134,122,134,133,134,166,134,174,134,185,
- 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,133,254,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,134, 31,134, 40,234,
- 225,242,225,244,105,128, 10,239,242,237,245,235,232,105,128, 10,
- 111,232, 97, 2,134, 56,134, 67,227,235,225,242,225,226,233, 99,
- 128, 6,105,238,231,250,232,239,117,128, 48, 41,105, 2,134, 82,
- 134,100,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,134,139,134,146,225,242,229,110,128,
- 36,124,229,114, 2,134,153,134,159,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,134,191,134,229,229,
- 229,110, 2,134,199,134,208,227,233,242,227,236,101,128, 36,114,
- 112, 2,134,214,134,221,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,134,
- 241,229,227,249,242,233,236,236,233, 99,128, 4, 90,235,225,244,
- 225,235,225,238, 97,129, 48,243,135, 10,232,225,236,230,247,233,
- 228,244,104,128,255,157,108, 2,135, 28,135, 42,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,135, 59,135, 70,239,238,239,243,240,
- 225,227,101,128,255, 78,243,241,245,225,242,101,128, 51,154,110,
- 2,135, 85,135,135, 97, 3,135, 93,135,103,135,110,226,229,238,
- 231,225,236,105,128, 9,163,228,229,246, 97,128, 9, 35,231,117,
- 2,135,117,135,126,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,135,158,135,169,135,194,135,235,136,187,137,114,232,233,
- 242,225,231,225,238, 97,128, 48,110,235,225,244,225,235,225,238,
- 97,129, 48,206,135,182,232,225,236,230,247,233,228,244,104,128,
- 255,137,110, 3,135,202,135,218,135,227,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,135,252,
- 136, 5,136, 19,136, 53,136, 69,136,110,136,169,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,136, 30,136, 39,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,136, 79,136, 94,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,136,117,136,130,228,233,225,236,225,242,225,226,233, 99,128,
- 254,232,229,237,105, 2,136,138,136,153,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,136,203,136,
- 214,136,243,137, 22,137, 34,137, 54,137, 80,227,239,238,244,225,
- 233,238,115,128, 34, 12,101, 2,136,220,136,236,236,229,237,229,
- 238,116,129, 34, 9,136,231,239,102,128, 34, 9,241,245,225,108,
- 128, 34, 96,231,242,229,225,244,229,114,129, 34,111,136,255,238,
- 239,114, 2,137, 7,137, 15,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,137, 43,238,239,242,229,241,
- 245,225,108,128, 34,112,112, 2,137, 60,137, 70,225,242,225,236,
- 236,229,108,128, 34, 38,242,229,227,229,228,229,115,128, 34,128,
- 243,117, 3,137, 89,137, 96,137,105,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,137,140,137,149,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,137,179,137,190,138,
- 15,138, 98,232,233,242,225,231,225,238, 97,128, 48,108,107, 2,
- 137,196,137,220,225,244,225,235,225,238, 97,129, 48,204,137,208,
- 232,225,236,230,247,233,228,244,104,128,255,135,244, 97, 3,137,
- 229,137,239,137,246,226,229,238,231,225,236,105,128, 9,188,228,
- 229,246, 97,128, 9, 60,231,117, 2,137,253,138, 6,234,225,242,
- 225,244,105,128, 10,188,242,237,245,235,232,105,128, 10, 60,109,
- 2,138, 21,138, 55,226,229,242,243,233,231,110,130, 0, 35,138,
- 35,138, 47,237,239,238,239,243,240,225,227,101,128,255, 3,243,
- 237,225,236,108,128,254, 95,229,114, 2,138, 62,138, 94,225,236,
- 243,233,231,110, 2,138, 73,138, 81,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,138,106,138,126,228,225,231,229,243,104,
- 129,251, 64,138,117,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,138,164,
- 138,174,138,181,226,229,238,231,225,236,105,128, 9,158,228,229,
- 246, 97,128, 9, 30,231,117, 2,138,188,138,197,234,225,242,225,
- 244,105,128, 10,158,242,237,245,235,232,105,128, 10, 30,111,147,
- 0,111,138,248,139, 14,139, 92,140, 6,140, 78,140, 93,140,133,
- 141, 0,141, 21,141, 59,141, 70,141,248,143, 82,143,146,143,179,
- 143,225,144, 98,144,145,144,157, 97, 2,138,254,139, 5,227,245,
- 244,101,128, 0,243,238,231,244,232,225,105,128, 14, 45, 98, 4,
- 139, 24,139, 66,139, 75,139, 85,225,242,242,229,100,130, 2,117,
- 139, 36,139, 47,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,139,100,
- 139,173,139,252, 97, 2,139,106,139,167,238,228,242, 97, 3,139,
- 117,139,124,139,135,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,139,149,139,156,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,139,181,139,186,236,101,128, 36,222,245,237,230,236,229,120,
- 133, 0,244,139,205,139,213,139,224,139,232,139,244,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,140, 16,140, 39,140, 45,140, 68,
- 226,108, 2,140, 23,140, 31,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,140, 57,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,140, 84,235,239,242,229,225,110,128, 49, 90,103, 3,140,
- 101,140,116,140,123,239,238,229,107,129, 2,219,140,110,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,140,143,140,154,140,164,140,242,225,
- 242,237,229,238,233,225,110,128, 5,133,233,242,225,231,225,238,
- 97,128, 48, 74,111, 2,140,170,140,180,239,235,225,226,239,246,
- 101,128, 30,207,242,110,133, 1,161,140,195,140,203,140,214,140,
- 222,140,234,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,141, 6,238,246,229,242,244,229,228,226,242,229,
- 246,101,128, 2, 15,107, 2,141, 27,141, 51,225,244,225,235,225,
- 238, 97,129, 48,170,141, 39,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,141, 84,141,112,141,119,141,208,
- 141,219,141,237,225,227,242,239,110,130, 1, 77,141, 96,141,104,
- 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,141,135,141,
- 139,141,150,141,164,141,180, 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,141,186,141,201,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,141,229,244,239,238,239,115,128, 3,204,239,238,239,
- 243,240,225,227,101,128,255, 79,238,101,145, 0, 49,142, 31,142,
- 40,142, 50,142, 80,142,105,142,114,142,123,142,148,142,182,142,
- 216,142,228,142,247,143, 2,143, 35,143, 45,143, 53,143, 64,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,142, 61,233,238,246,
- 229,242,243,229,243,225,238,243,243,229,242,233,102,128, 39,138,
- 100, 2,142, 86,142, 92,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,142,130,
- 142,139,234,225,242,225,244,105,128, 10,231,242,237,245,235,232,
- 105,128, 10,103,232, 97, 3,142,157,142,168,142,173,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,142,188,142,206,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,143, 8,143, 15,225,242,229,110,128, 36,116,229,
- 114, 2,143, 22,143, 28,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,143, 71,143, 76,225,105,128, 14, 81,233,242,100,128,
- 33, 83,111, 3,143, 90,143,124,143,140,103, 2,143, 96,143,114,
- 239,238,229,107,129, 1,235,143,105,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,143,154,143,161,143,172,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,143,185,143,214,100, 2,143,191,143,202,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,143,237,144, 13,144, 30,144, 75,144, 88,232,239,242,
- 116, 2,143,246,143,253,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,144, 22,225,227,245,244,101,128, 1,255,237,225,
- 236,108, 2,144, 39,144, 50,232,233,242,225,231,225,238, 97,128,
- 48, 73,235,225,244,225,235,225,238, 97,129, 48,169,144, 63,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,144,104,144,115,227,249,242,233,236,236,233, 99,
- 128, 4,127,233,236,228,101,130, 0,245,144,126,144,134,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,144,
- 163,144,244,229,114, 2,144,170,144,236,236,233,238,101,131, 32,
- 62,144,183,144,206,144,229, 99, 2,144,189,144,201,229,238,244,
- 229,242,236,233,238,101,128,254, 74,237, 98,128, 3, 5,100, 2,
- 144,212,144,220,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,145, 3,145,
- 13,145, 20,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,145, 69,147,197,147,208,147,217,147,229,149,154,149,
- 164,150,156,151,175,152, 9,152, 35,152,166,152,174,153, 76,153,
- 134,153,162,153,172, 97, 14,145, 99,145,131,145,141,145,148,145,
- 155,145,203,145,214,145,228,145,239,146, 30,146, 44,147, 56,147,
- 95,147,185, 97, 2,145,105,145,117,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,145,161,145,
- 179,101, 2,145,167,145,174,228,239,247,110,128, 33,223,245,112,
- 128, 33,222,117, 2,145,185,145,194,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,145,245,146, 14,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,146, 52,
- 146, 73,147, 45, 97, 2,146, 58,146, 66,231,242,225,240,104,128,
- 0,182,236,236,229,108,128, 34, 37,229,110, 2,146, 80,146,190,
- 236,229,230,116,136, 0, 40,146,103,146,118,146,123,146,128,146,
- 139,146,151,146,174,146,179,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,146,157,146,164,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,146,214,146,229,146,234,146,239,146,250,
- 147, 6,147, 29,147, 34,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,147, 12,147, 19,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,147, 64,147, 75,147, 87,
- 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,147,113,147,127,147,132,147,141,147,156,147,
- 172, 49, 2,147,119,147,123, 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,147,251,148, 6,148, 26,148,
- 38,148, 58,148,160,148,171,148,192,149,147,227,249,242,233,236,
- 236,233, 99,128, 4, 63,228,225,231,229,243,104,129,251, 68,148,
- 17,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,148, 70,148, 93,
- 148,101,148,115,148,145,225,114, 2,148, 77,148, 84,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,148,121,148,136,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,148,204,148,216,149, 2,149,123,149,136,225,230,229,232,
- 229,226,242,229,119,128,251, 78,227,229,238,116,131, 0, 37,148,
- 229,148,238,148,250,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,149, 8,149,105,239,100,134, 0, 46,149, 25,149,
- 36,149, 47,149, 59,149, 70,149, 82,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,149, 88,149, 95,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,149,172,149,222,150,103, 97, 3,149,180,
- 149,190,149,197,226,229,238,231,225,236,105,128, 9,171,228,229,
- 246, 97,128, 9, 43,231,117, 2,149,204,149,213,234,225,242,225,
- 244,105,128, 10,171,242,237,245,235,232,105,128, 10, 43,105,133,
- 3,198,149,236,149,240,150, 70,150, 78,150, 89, 49,128, 3,213,
- 229,245,240,104, 4,149,253,150, 32,150, 47,150, 56, 97, 2,150,
- 3,150, 18,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,150,111,150,116,150,142,239,
- 107,128, 1,165,240,104, 2,150,123,150,132,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,
- 150,170,151,126,151,137,151,148,151,162,229,245,112, 6,150,186,
- 150,221,150,253,151, 25,151, 39,151, 91, 97, 2,150,192,150,207,
- 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,
- 150,228,150,240,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,151,
- 3,151, 17,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,151, 48,151, 76,
- 107, 2,151, 54,151, 68,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,151, 97,151,
- 112,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,151,189,151,200,151,209,151,242,226,229,236,
- 239,247,227,237, 98,128, 3, 31,227,233,242,227,236,101,128, 34,
- 149,109, 2,151,215,151,222,233,238,245,115,128, 0,177,111, 2,
- 151,228,151,232,100,128, 2,214,238,239,243,240,225,227,101,128,
- 255, 11,115, 2,151,248,151,255,237,225,236,108,128,254, 98,245,
- 240,229,242,233,239,114,128, 32,122,109, 2,152, 15,152, 26,239,
- 238,239,243,240,225,227,101,128,255, 80,243,241,245,225,242,101,
- 128, 51,216,111, 5,152, 47,152, 58,152,125,152,136,152,146,232,
- 233,242,225,231,225,238, 97,128, 48,125,233,238,244,233,238,231,
- 233,238,228,229,120, 4,152, 78,152, 90,152,102,152,115,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,152,159,230,
- 225,227,101,128, 48, 32,240,225,242,229,110,128, 36,171,114, 3,
- 152,182,152,208,152,233,101, 2,152,188,152,196,227,229,228,229,
- 115,128, 34,122,243,227,242,233,240,244,233,239,110,128, 33, 30,
- 233,237,101, 2,152,216,152,222,237,239,100,128, 2,185,242,229,
- 246,229,242,243,229,100,128, 32, 53,111, 4,152,243,152,250,153,
- 4,153, 17,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,153, 23,153, 60,101, 2,153, 29,153, 36,236,236,239,
- 114,128, 35, 24,242,243,117, 2,153, 44,153, 51,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,153, 71,225,108,128, 34, 29,115, 2,153, 82,
- 153,125,105,130, 3,200,153, 90,153,101,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,153,140,153,151,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,153,202,154,251,155, 6,
- 155, 15,155, 22,155, 34,155, 72,155, 80, 97, 4,153,212,153,235,
- 154, 43,154,234,100, 2,153,218,153,224,229,246, 97,128, 9, 88,
- 237,225,232,229,226,242,229,119,128, 5,168,102, 4,153,245,153,
- 254,154, 12,154, 28,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,154, 66,154, 86,154,100,154,105,154,110,154,119,154,134,
- 154,221, 49, 3,154, 74,154, 78,154, 82, 48,128, 5,184, 97,128,
- 5,184, 99,128, 5,184, 50, 2,154, 92,154, 96, 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,154,140,154,206,225,244,225,110,
- 4,154,153,154,162,154,177,154,193,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,155, 43,155, 63,228,225,231,229,243,
- 104,129,251, 71,155, 54,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,155, 90,155,102,155,191,156, 22,225,242,244,229,242,238,
- 239,244,101,128, 38,105,226,245,244,115,135, 5,187,155,123,155,
- 128,155,133,155,138,155,147,155,162,155,178,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,155,210,155,233,155,250,156, 2,
- 156, 14,225,114, 2,155,217,155,224,225,226,233, 99,128, 6, 31,
- 237,229,238,233,225,110,128, 5, 94,228,239,247,110,129, 0,191,
- 155,242,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,156, 34,156,105,156,125,
- 156,154,228,226,108,133, 0, 34,156, 50,156, 57,156, 64,156, 76,
- 156, 97,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,156, 86,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,
- 156,114,242,229,246,229,242,243,229,100,128, 32, 27,114, 2,156,
- 131,156,141,229,246,229,242,243,229,100,128, 32, 27,233,231,232,
- 116,129, 32, 25,156,150,110,128, 1, 73,243,233,238,231,108, 2,
- 156,164,156,171,226,225,243,101,128, 32, 26,101,129, 0, 39,156,
- 177,237,239,238,239,243,240,225,227,101,128,255, 7,114,145, 0,
- 114,156,227,157,231,157,242,158, 33,158, 84,159,101,159,125,159,
- 220,161,254,162, 35,162, 47,162,101,162,109,163, 15,163, 26,163,
- 61,163,161, 97, 11,156,251,157, 6,157, 16,157, 23,157, 88,157,
- 104,157,129,157,140,157,165,157,188,157,225,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,157, 33,157, 39,157, 53,157,
- 79,229,246, 97,128, 9, 48,233,227,225,108,129, 34, 26,157, 48,
- 229,120,128,248,229,239,246,229,242,243,243,241,245,225,242,101,
- 129, 51,174,157, 69,228,243,241,245,225,242,101,128, 51,175,243,
- 241,245,225,242,101,128, 51,173,230,101,129, 5,191,157, 95,232,
- 229,226,242,229,119,128, 5,191,231,117, 2,157,111,157,120,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,157,153,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,157,194,
- 157,217,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,157,252,158, 3,158, 12,158, 20,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,158, 39,158, 49,226,236,231,242,225,246,101,128, 2,
- 17,239,116, 2,158, 56,158, 65,225,227,227,229,238,116,128, 30,
- 89,226,229,236,239,119,129, 30, 91,158, 75,237,225,227,242,239,
- 110,128, 30, 93,101, 6,158, 98,158,143,158,178,158,233,159, 2,
- 159, 35,102, 2,158,104,158,117,229,242,229,238,227,229,237,225,
- 242,107,128, 32, 59,236,229,248,243,117, 2,158,127,158,134,226,
- 243,229,116,128, 34,134,240,229,242,243,229,116,128, 34,135,231,
- 233,243,244,229,114, 2,158,154,158,159,229,100,128, 0,174,115,
- 2,158,165,158,171,225,238,115,128,248,232,229,242,233,102,128,
- 246,218,104, 3,158,186,158,209,158,223,225,114, 2,158,193,158,
- 200,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,158,246,232,225,236,230,247,233,228,244,104,128,
- 255,154,243,104,130, 5,232,159, 11,159, 26,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,159, 43,159, 56,159, 88,229,242,243,229,228,
- 244,233,236,228,101,128, 34, 61,233, 97, 2,159, 63,159, 72,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,
- 159,114,242,229,246,229,242,243,229,100,128, 2,127,104, 2,159,
- 131,159,154, 97, 2,159,137,159,147,226,229,238,231,225,236,105,
- 128, 9,221,228,229,246, 97,128, 9, 93,111,131, 3,193,159,164,
- 159,193,159,207,239,107,129, 2,125,159,171,244,245,242,238,229,
- 100,129, 2,123,159,182,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,159,234,
- 161, 22,161, 68,161, 79,161,104,161,240,229,245,108, 9,160, 0,
- 160, 35,160, 50,160, 64,160,110,160,124,160,210,160,223,161, 2,
- 97, 2,160, 6,160, 21,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,160, 70,160,102,233,249,229,239,107, 2,160, 80,160, 89,
- 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,160,132,
- 160,164,160,179, 97, 2,160,138,160,152,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,160,188,160,197,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,160,229,160,244,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,161, 30,161, 38,225,238,
- 231,236,101,128, 34, 31,116, 2,161, 44,161, 58,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,161, 92,232,225,236,230,
- 247,233,228,244,104,128,255,152,110, 2,161,110,161,226,103,131,
- 2,218,161,120,161,131,161,137,226,229,236,239,247,227,237, 98,
- 128, 3, 37,227,237, 98,128, 3, 10,232,225,236,102, 2,161,146,
- 161,192,236,229,230,116,131, 2,191,161,159,161,170,161,181,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,161,204,161,215,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,
- 162, 4,162, 15,233,238,229,226,229,236,239,119,128, 30, 95,239,
- 238,231,236,229,103,129, 2,124,162, 26,244,245,242,238,229,100,
- 128, 2,122,237,239,238,239,243,240,225,227,101,128,255, 82,111,
- 3,162, 55,162, 66,162, 91,232,233,242,225,231,225,238, 97,128,
- 48,141,235,225,244,225,235,225,238, 97,129, 48,237,162, 79,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,162,
- 117,162,153,162,183, 97, 3,162,125,162,135,162,142,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,162,160,162,169,
- 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,162,
- 199,162,209,162,216,162,227,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,162,243,162,
- 253,163, 4,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,163, 32,163, 40,
- 226,236,239,227,107,128, 37,144,245,242,238,229,100,129, 2,121,
- 163, 50,243,245,240,229,242,233,239,114,128, 2,180,117, 4,163,
- 71,163, 82,163,107,163,154,232,233,242,225,231,225,238, 97,128,
- 48,139,235,225,244,225,235,225,238, 97,129, 48,235,163, 95,232,
- 225,236,230,247,233,228,244,104,128,255,153,112, 2,163,113,163,
- 148,229,101, 2,163,120,163,134,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,163,177,163,187,163,194,163,
- 205,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,163,221,163,231,163,238,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,164, 35,166,
- 5,166, 16,166,142,166,181,169,123,169,134,172, 21,174,159,174,
- 205,174,232,175,167,175,234,177, 11,177, 21,177,207,178, 24,178,
- 194,178,204, 97, 9,164, 55,164, 65,164, 86,164,158,164,183,164,
- 194,164,219,164,251,165, 35,226,229,238,231,225,236,105,128, 9,
- 184,227,245,244,101,129, 1, 91,164, 74,228,239,244,225,227,227,
- 229,238,116,128, 30,101,100, 5,164, 98,164,107,164,113,164,127,
- 164,143,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,164,165,164,174,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,164,207,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,165, 6,165, 26,228,225,231,229,243,104,129,251, 65,165,
- 17,232,229,226,242,229,119,128,251, 65,232,229,226,242,229,119,
- 128, 5,225,242, 97, 5,165, 48,165,122,165,130,165,180,165,188,
- 97, 5,165, 60,165, 68,165, 76,165,107,165,115,225,244,232,225,
- 105,128, 14, 50,229,244,232,225,105,128, 14, 65,233,237,225,233,
- 109, 2,165, 86,165, 97,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,165,138,165,162,165,173,105, 2,165,144,165,155,
- 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,165,196,
- 165,246,165,253,101, 3,165,204,165,228,165,239,101, 2,165,210,
- 165,221,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,166, 28,166, 49,166, 58,166,107,166,129,225,242,239,110,
- 129, 1, 97,166, 37,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,
- 166, 70,166, 81,166,100,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,166,
- 115,166,120,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,166,150,166,159,225,227,227,229,238,116,128, 30, 97,226,
- 229,236,239,119,129, 30, 99,166,169,228,239,244,225,227,227,229,
- 238,116,128, 30,105,101, 9,166,201,166,217,166,252,167, 61,167,
- 164,167,191,167,216,168, 41,168, 68,225,231,245,236,236,226,229,
- 236,239,247,227,237, 98,128, 3, 60, 99, 2,166,223,166,245,239,
- 238,100,129, 32, 51,166,231,244,239,238,229,227,232,233,238,229,
- 243,101,128, 2,202,244,233,239,110,128, 0,167,229,110, 4,167,
- 7,167, 16,167, 30,167, 46,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,167, 81,167, 95,167,100,167,109,167,124,167,140,167,
- 151, 49, 2,167, 87,167, 91, 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,167,170,167,181,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,167,204,232,225,236,230,
- 247,233,228,244,104,128,255,126,237,105, 2,167,223,168, 10,227,
- 239,236,239,110,131, 0, 59,167,237,167,246,168, 2,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,168, 29,232,225,236,
- 230,247,233,228,244,104,128,255,159,238,116, 2,168, 48,168, 58,
- 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,168,102,168,111,168,121,
- 168,151,168,158,168,168,168,193,168,220,168,254,169, 10,169, 21,
- 169, 54,169, 62,169, 73,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,168,132,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,168,175,168,184,234,
- 225,242,225,244,105,128, 10,237,242,237,245,235,232,105,128, 10,
- 109,232, 97, 2,168,200,168,211,227,235,225,242,225,226,233, 99,
- 128, 6,103,238,231,250,232,239,117,128, 48, 39,105, 2,168,226,
- 168,244,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,169, 27,169, 34,225,242,229,110,128,
- 36,122,229,114, 2,169, 41,169, 47,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,169, 79,169,117,229,
- 229,110, 2,169, 87,169, 96,227,233,242,227,236,101,128, 36,112,
- 112, 2,169,102,169,109,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,169,150,170,124,170,135,170,149,
- 171, 94,171,107,172, 15, 97, 6,169,164,169,175,169,185,169,196,
- 170, 83,170,108,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,169,202,170, 42,228, 97, 4,169,213,169,
- 222,169,253,170, 11,225,242,225,226,233, 99,128, 6, 81,228,225,
- 237,237, 97, 2,169,232,169,241,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,170, 21,170, 30,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,170, 54,
- 170, 61,170, 69,170, 78,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,170, 90,170, 99,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,170,159,170,224,170,234,170,251,229,
- 110, 4,170,170,170,179,170,193,170,209,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,
- 170,242,232,229,226,242,229,119,128, 32,170,246, 97,134, 5,176,
- 171, 12,171, 27,171, 41,171, 50,171, 65,171, 81, 49, 2,171, 18,
- 171, 23,177, 53,128, 5,176, 53,128, 5,176, 50, 2,171, 33,171,
- 37, 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,171,113,171,
- 124,237,225,227,239,240,244,233, 99,128, 3,237,110,131, 5,233,
- 171,134,171,217,171,226,100, 2,171,140,171,206,225,231,229,243,
- 104,130,251, 73,171,152,171,161,232,229,226,242,229,119,128,251,
- 73,115, 2,171,167,171,187,232,233,238,228,239,116,129,251, 44,
- 171,178,232,229,226,242,229,119,128,251, 44,233,238,228,239,116,
- 129,251, 45,171,197,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,171,232,171,252,232,233,238,228,239,116,129,251,
- 42,171,243,232,229,226,242,229,119,128,251, 42,233,238,228,239,
- 116,129,251, 43,172, 6,232,229,226,242,229,119,128,251, 43,239,
- 239,107,128, 2,130,105, 8,172, 39,172, 83,172, 94,172,119,172,
- 149,172,157,172,170,173, 85,231,237, 97,131, 3,195,172, 51,172,
- 55,172, 63, 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,172,107,232,225,236,230,247,
- 233,228,244,104,128,255,124,236,245,113, 2,172,127,172,136,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,172,185,172,
- 220,172,252,173, 24,173, 38,173, 70, 97, 2,172,191,172,206,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,172,
- 227,172,239,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,173, 2,
- 173, 16,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,173, 44,173, 57,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,173,115,173,124,173,134,173,
- 164,173,171,173,196,173,223,174, 1,174, 13,174, 24,174, 57,174,
- 65,174, 76,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,173,
- 145,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,173,178,
- 173,187,234,225,242,225,244,105,128, 10,236,242,237,245,235,232,
- 105,128, 10,108,232, 97, 2,173,203,173,214,227,235,225,242,225,
- 226,233, 99,128, 6,102,238,231,250,232,239,117,128, 48, 38,105,
- 2,173,229,173,247,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,174, 30,174, 37,225,242,
- 229,110,128, 36,121,229,114, 2,174, 44,174, 50,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,174, 82,
- 174,153,229,229,110, 2,174, 90,174,132, 99, 2,174, 96,174,104,
- 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,174,138,174,145,225,242,229,110,128, 36,
- 131,229,242,233,239,100,128, 36,151,232,225,105,128, 14, 86,108,
- 2,174,165,174,185,225,243,104,129, 0, 47,174,173,237,239,238,
- 239,243,240,225,227,101,128,255, 15,239,238,103,129, 1,127,174,
- 193,228,239,244,225,227,227,229,238,116,128, 30,155,109, 2,174,
- 211,174,221,233,236,229,230,225,227,101,128, 38, 58,239,238,239,
- 243,240,225,227,101,128,255, 83,111, 6,174,246,175, 40,175, 51,
- 175, 76,175,121,175,132,102, 2,174,252,175, 10,240,225,243,245,
- 241,232,229,226,242,229,119,128, 5,195,116, 2,175, 16,175, 25,
- 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,175, 64,
- 232,225,236,230,247,233,228,244,104,128,255,127,236,233,228,245,
- 115, 2,175, 86,175,103,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,175,140,175,150,175,158,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,175,176,175,196,175,228,
- 227,101,129, 0, 32,175,183,232,225,227,235,225,242,225,226,233,
- 99,128, 0, 32,228,101,129, 38, 96,175,203,243,245,233,116, 2,
- 175,212,175,220,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,
- 176, 6,176, 17,176, 31,176, 56,176, 73,176, 99,176,114,176,147,
- 176,174,176,230,176,245,226,229,236,239,247,227,237, 98,128, 3,
- 59, 99, 2,176, 23,176, 27, 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,176, 79,176, 83,103,
- 128, 51,143,109,129, 51,158,176, 89,227,225,240,233,244,225,108,
- 128, 51,206,108, 2,176,105,176,109,110,128, 51,209,239,103,128,
- 51,210,109, 4,176,124,176,128,176,133,176,137,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,176,184,176,207,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,177, 27,177,197, 97, 4,177, 37,177,
- 47,177, 54,177, 65,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,177, 84,177, 98,177,112,177,126,177,141,177,155,
- 177,169,177,182,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,177,213,177,236,229,242,236,233,238,103,129, 0,163,177,224,
- 237,239,238,239,243,240,225,227,101,128,255,225,242,239,235,101,
- 2,177,245,178, 6,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,178, 40,178, 72,178, 94,
- 178,105,178,146,178,156,178,160,226,243,229,116,130, 34,130,178,
- 51,178, 62,238,239,244,229,241,245,225,108,128, 34,138,239,242,
- 229,241,245,225,108,128, 34,134, 99, 2,178, 78,178, 86,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,178,111,178,135,225,
- 244,225,235,225,238, 97,129, 48,185,178,123,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,178,173,178,184,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,179, 1,180, 10,180, 31,180,174,180,214,183, 6,186,144,187,
- 219,187,231,187,243,189, 20,189, 45,189,131,190, 55,190,239,191,
- 73, 97, 10,179, 23,179, 33,179, 54,179, 61,179, 86,179,164,179,
- 181,179,206,179,220,179,224,226,229,238,231,225,236,105,128, 9,
- 164,227,107, 2,179, 40,179, 47,228,239,247,110,128, 34,164,236,
- 229,230,116,128, 34,163,228,229,246, 97,128, 9, 36,231,117, 2,
- 179, 68,179, 77,234,225,242,225,244,105,128, 10,164,242,237,245,
- 235,232,105,128, 10, 36,104, 4,179, 96,179,105,179,119,179,149,
- 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,179,125,179,140,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,
- 179,194,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,179,232,180, 1,228,225,231,229,115,129,251, 74,
- 179,242,104,129,251, 74,179,248,232,229,226,242,229,119,128,251,
- 74,232,229,226,242,229,119,128, 5,234, 98, 2,180, 16,180, 21,
- 225,114,128, 1,103,239,240,239,237,239,230,111,128, 49, 10, 99,
- 6,180, 45,180, 52,180, 59,180, 68,180,134,180,161,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,180, 80,180, 89,180,103,180,119,
- 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,180,142,180,147,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,
- 180,180,180,190,233,229,242,229,243,233,115,128, 30,151,239,116,
- 2,180,197,180,206,225,227,227,229,238,116,128, 30,107,226,229,
- 236,239,119,128, 30,109,101, 9,180,234,180,245,181, 9,182, 19,
- 182, 44,182,108,182,175,182,180,182,232,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,181, 25,181, 34,181,
- 48,181, 88,181,118,181,159,182, 1,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,181, 57,181, 72,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,181, 94,181,109,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,181,128,181,143,
- 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,181,165,181,199,225,242,226,245,244, 97, 2,181,176,181,185,
- 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,181,205,181,218,228,233,225,
- 236,225,242,225,226,233, 99,128,254,152,229,237,105, 2,181,226,
- 181,241,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,182, 32,
- 232,225,236,230,247,233,228,244,104,128,255,131,108, 2,182, 50,
- 182, 69,229,240,232,239,238,101,129, 33, 33,182, 61,226,236,225,
- 227,107,128, 38, 14,233,243,232, 97, 2,182, 78,182, 93,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,182,118,
- 182,127,182,146,182,167,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,182,152,182,159,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,182,190,182,210,182,219,228,225,
- 231,229,243,104,129,251, 56,182,201,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,182,240,182,249,
- 232,229,226,242,229,119,128, 5,155,236,229,230,244,232,229,226,
- 242,229,119,128, 5,155,104, 6,183, 20,183,172,184, 38,184,170,
- 185, 77,186,134, 97, 5,183, 32,183, 42,183, 49,183, 74,183,103,
- 226,229,238,231,225,236,105,128, 9,165,228,229,246, 97,128, 9,
- 37,231,117, 2,183, 56,183, 65,234,225,242,225,244,105,128, 10,
- 165,242,237,245,235,232,105,128, 10, 37,108, 2,183, 80,183, 89,
- 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,
- 183,118,183,149,183,156,236,239,119, 2,183,126,183,137,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,183,180,
- 183,244,184, 11,104, 4,183,190,183,199,183,213,183,229,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,183,251,184, 4,229,248,233,243,244,
- 115,128, 34, 3,230,239,242,101,128, 34, 52,244, 97,130, 3,184,
- 184, 20,184, 24, 49,128, 3,209,243,249,237,226,239,236,231,242,
- 229,229,107,128, 3,209,105, 2,184, 44,184,130,229,245,244,104,
- 4,184, 57,184, 92,184,107,184,116, 97, 2,184, 63,184, 78,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,184,140,184,149,227,233,242,227,
- 236,101,128, 36,108,112, 2,184,155,184,162,225,242,229,110,128,
- 36,128,229,242,233,239,100,128, 36,148,111, 6,184,184,184,201,
- 184,206,184,220,184,225,185, 22,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,184,234,185, 2,185, 12, 97, 2,184,240,184,250,
- 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,185, 32,185, 43,
- 227,249,242,233,236,236,233, 99,128, 4,130,243,243,229,240,225,
- 242,225,244,239,114, 2,185, 58,185, 67,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,185,115,185,124,185,134,185,164,185,171,185,181,185,
- 206,185,233,186, 11,186, 23,186, 42,186, 53,186, 86,186,108,186,
- 116,186,127,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,185,
- 145,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,185,188,185,197,234,225,242,225,
- 244,105,128, 10,233,242,237,245,235,232,105,128, 10,105,232, 97,
- 2,185,213,185,224,227,235,225,242,225,226,233, 99,128, 6, 99,
- 238,231,250,232,239,117,128, 48, 35,105, 2,185,239,186, 1,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,186, 59,186, 66,225,242,229,110,128,
- 36,118,229,114, 2,186, 73,186, 79,233,239,100,128, 36,138,243,
- 233,225,110,128, 6,243,241,245,225,242,244,229,242,115,129, 0,
- 190,186, 99,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,186,160,186,171,187, 30,187,128,187,140,187,189,187,206,
- 232,233,242,225,231,225,238, 97,128, 48, 97,107, 2,186,177,186,
- 201,225,244,225,235,225,238, 97,129, 48,193,186,189,232,225,236,
- 230,247,233,228,244,104,128,255,129,229,245,116, 4,186,213,186,
- 248,187, 7,187, 16, 97, 2,186,219,186,234,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,187, 46,187, 57,187, 74,187, 86,187,114,226,229,
- 236,239,247,227,237, 98,128, 3, 48, 99, 2,187, 63,187, 68,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,187, 92,187,102,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,187,146,
- 187,176,229,232, 97, 2,187,154,187,163,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,188, 3,188, 14,188, 25,188, 50,188,170,188,
- 182,189, 10,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,188, 38,232,225,236,230,247,233,228,244,104,128,
- 255,132,110, 3,188, 58,188,156,188,161,101, 4,188, 68,188,137,
- 188,144,188,150,226,225,114, 4,188, 80,188,109,188,119,188,128,
- 229,248,244,242, 97, 2,188, 90,188,100,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,188,205,188,235,236,229,230,
- 116,130, 48, 20,188,216,188,224,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,188,247,188,255,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,189, 27,189, 39,236,225,244,225,236,
- 232,239,239,107,128, 1,171,242,229,110,128, 36,175,114, 3,189,
- 53,189, 84,189, 99,225,228,229,237,225,242,107,129, 33, 34,189,
- 65,115, 2,189, 71,189, 77,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,189,111,189,116,189,121,189,126,228,
- 110,128, 37,188,236,102,128, 37,196,242,116,128, 37,186,245,112,
- 128, 37,178,115,132, 2,166,189,143,189,182,190, 32,190, 45,225,
- 228,105,130, 5,230,189,153,189,173,228,225,231,229,243,104,129,
- 251, 70,189,164,232,229,226,242,229,119,128,251, 70,232,229,226,
- 242,229,119,128, 5,230,101, 2,189,188,189,199,227,249,242,233,
- 236,236,233, 99,128, 4, 70,242,101,134, 5,181,189,216,189,230,
- 189,235,189,244,190, 3,190, 19, 49, 2,189,222,189,226, 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,190, 65,190,115,190,180,190,
- 231, 97, 3,190, 73,190, 83,190, 90,226,229,238,231,225,236,105,
- 128, 9,159,228,229,246, 97,128, 9, 31,231,117, 2,190, 97,190,
- 106,234,225,242,225,244,105,128, 10,159,242,237,245,235,232,105,
- 128, 10, 31,229,104, 4,190,126,190,135,190,149,190,165,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,190,189,190,199,190,206,226,229,238,
- 231,225,236,105,128, 9,160,228,229,246, 97,128, 9, 32,231,117,
- 2,190,213,190,222,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,190,247,191, 2,191, 27,232,233,242,225,231,225,238, 97,128,
- 48,100,235,225,244,225,235,225,238, 97,129, 48,196,191, 15,232,
- 225,236,230,247,233,228,244,104,128,255,130,243,237,225,236,108,
- 2,191, 37,191, 48,232,233,242,225,231,225,238, 97,128, 48, 99,
- 235,225,244,225,235,225,238, 97,129, 48,195,191, 61,232,225,236,
- 230,247,233,228,244,104,128,255,111,119, 2,191, 79,191,184,101,
- 2,191, 85,191,133,236,246,101, 3,191, 95,191,104,191,125,227,
- 233,242,227,236,101,128, 36,107,112, 2,191,110,191,117,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,191,143,191,152,191,163,227,
- 233,242,227,236,101,128, 36,115,232,225,238,231,250,232,239,117,
- 128, 83, 68,112, 2,191,169,191,176,225,242,229,110,128, 36,135,
- 229,242,233,239,100,128, 36,155,111,142, 0, 50,191,216,191,225,
- 191,235,192, 9,192, 61,192, 86,192,113,192,147,192,159,192,178,
- 192,189,192,222,192,230,192,254,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,191,246,233,238,246,229,242,243,229,243,225,238,
- 243,243,229,242,233,102,128, 39,139,100, 2,192, 15,192, 21,229,
- 246, 97,128, 9,104,239,116, 2,192, 28,192, 39,229,238,236,229,
- 225,228,229,114,128, 32, 37,236,229,225,228,229,114,129, 32, 37,
- 192, 50,246,229,242,244,233,227,225,108,128,254, 48,231,117, 2,
- 192, 68,192, 77,234,225,242,225,244,105,128, 10,232,242,237,245,
- 235,232,105,128, 10,104,232, 97, 2,192, 93,192,104,227,235,225,
- 242,225,226,233, 99,128, 6, 98,238,231,250,232,239,117,128, 48,
- 34,105, 2,192,119,192,137,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,192,
- 195,192,202,225,242,229,110,128, 36,117,229,114, 2,192,209,192,
- 215,233,239,100,128, 36,137,243,233,225,110,128, 6,242,242,239,
- 237,225,110,128, 33,113,115, 2,192,236,192,244,244,242,239,235,
- 101,128, 1,187,245,240,229,242,233,239,114,128, 0,178,244,104,
- 2,193, 5,193, 10,225,105,128, 14, 82,233,242,228,115,128, 33,
- 84,117,145, 0,117,193, 55,193, 63,193,104,193,161,194, 43,194,
- 80,194,203,194,219,195, 14,195, 84,195,165,195,174,196, 37,196,
- 61,196,169,196,197,197, 55,225,227,245,244,101,128, 0,250, 98,
- 4,193, 73,193, 78,193, 87,193, 97,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,193,112,193,119,193,151,
- 225,242,239,110,128, 1,212,233,242, 99, 2,193,127,193,132,236,
- 101,128, 36,228,245,237,230,236,229,120,129, 0,251,193,143,226,
- 229,236,239,119,128, 30,119,249,242,233,236,236,233, 99,128, 4,
- 67,100, 5,193,173,193,184,193,207,193,213,194, 33,225,244,244,
- 225,228,229,246, 97,128, 9, 81,226,108, 2,193,191,193,199,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,193,
- 233,193,241,193,249,194, 16,194, 24,225,227,245,244,101,128, 1,
- 216,226,229,236,239,119,128, 30,115, 99, 2,193,255,194, 6,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,194, 49,194,
- 56,242,225,246,101,128, 0,249,117, 2,194, 62,194, 71,234,225,
- 242,225,244,105,128, 10,137,242,237,245,235,232,105,128, 10, 9,
- 104, 3,194, 88,194, 98,194,176,233,242,225,231,225,238, 97,128,
- 48, 70,111, 2,194,104,194,114,239,235,225,226,239,246,101,128,
- 30,231,242,110,133, 1,176,194,129,194,137,194,148,194,156,194,
- 168,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,194,192,
- 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,194,227,194,
- 251,195, 6,225,244,225,235,225,238, 97,129, 48,166,194,239,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,
- 195, 20,195, 73, 97, 2,195, 26,195, 59,227,242,239,110,130, 1,
- 107,195, 37,195, 48,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,195, 90,195,145,228,229,242,243,227,239,
- 242,101,132, 0, 95,195,109,195,115,195,127,195,138,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,195,151,195,156,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,
- 195,186,195,193,195,201,195,216,196, 11,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,
- 195,230,195,251,196, 3,228,233,229,242,229,243,233,115,129, 3,
- 203,195,243,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,
- 196, 20,196, 31,226,229,236,239,247,227,237, 98,128, 3, 29,237,
- 239,100,128, 2,212,114, 2,196, 43,196, 55,225,231,245,242,237,
- 245,235,232,105,128, 10,115,233,238,103,128, 1,111,115, 3,196,
- 69,196, 84,196,129,232,239,242,244,227,249,242,233,236,236,233,
- 99,128, 4, 94,237,225,236,108, 2,196, 93,196,104,232,233,242,
- 225,231,225,238, 97,128, 48, 69,235,225,244,225,235,225,238, 97,
- 129, 48,165,196,117,232,225,236,230,247,233,228,244,104,128,255,
- 105,244,242,225,233,231,232,116, 2,196,141,196,152,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,196,181,196,189,225,227,245,244,101,128, 30,121,226,229,236,
- 239,119,128, 30,117,117, 5,196,209,196,219,196,226,196,251,197,
- 11,226,229,238,231,225,236,105,128, 9,138,228,229,246, 97,128,
- 9, 10,231,117, 2,196,233,196,242,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,197, 27,197, 37,197, 44,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,197, 71,197, 81,197, 88,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,197,125,198, 17,198, 26,198, 37,198,
- 222,198,229,199, 71,199, 83,199,183,199,191,199,212, 97, 4,197,
- 135,197,142,197,167,197,178,228,229,246, 97,128, 9, 53,231,117,
- 2,197,149,197,158,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,197,190,197,217,197,249,198, 5,228,225,
- 231,229,243,104,130,251, 53,197,203,197,208,182, 53,128,251, 53,
- 232,229,226,242,229,119,128,251, 53,104, 2,197,223,197,231,229,
- 226,242,229,119,128, 5,213,239,236,225,109,129,251, 75,197,240,
- 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,198, 51,198, 62,198,126,198,137,198,
- 143,198,210,227,249,242,233,236,236,233, 99,128, 4, 50,104, 4,
- 198, 72,198, 81,198, 95,198,111,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,198,154,198,160,226,225,114,128, 0,124,
- 236,233,238,101, 4,198,173,198,184,198,195,198,204,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,198,237,198,248,199, 31,235,225,244,
- 225,235,225,238, 97,128, 48,248,242,225,237, 97, 3,199, 3,199,
- 13,199, 20,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,199, 43,199, 53,199, 60,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,199, 91,199,102,199,172,225,242,237,229,238,
- 233,225,110,128, 5,120,233,227,229,100, 2,199,111,199,147,233,
- 244,229,242,225,244,233,239,110, 2,199,125,199,136,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,199,160,
- 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,199,197,199,204,233,236,228,101,128, 30,125,245,242,238,229,
- 100,128, 2,140,117, 2,199,218,199,229,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,200, 18,200,251,201, 5,201, 28,201, 68,201,135,
- 201,143,203,114,203,155,203,167,203,242,203,250,204, 1,204, 12,
- 204, 21, 97, 8,200, 36,200, 43,200, 53,200, 64,200,102,200,134,
- 200,146,200,182,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,200, 70,200, 94,225,244,225,235,225,238, 97,129, 48,239,
- 200, 82,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,200,112,200,123,
- 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,200,152,200,160,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,200,190,200,199,200,213,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,
- 200,228,200,237,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,201, 14,201, 19,236,101,
- 128, 36,230,245,237,230,236,229,120,128, 1,117,100, 2,201, 34,
- 201, 44,233,229,242,229,243,233,115,128, 30,133,239,116, 2,201,
- 51,201, 60,225,227,227,229,238,116,128, 30,135,226,229,236,239,
- 119,128, 30,137,101, 4,201, 78,201, 89,201,101,201,125,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,201,107,201,117,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,201,164,201,173,202, 1,202, 91,202,175,202,220,
- 203, 16,203, 72,226,245,236,236,229,116,128, 37,230, 99, 2,201,
- 179,201,199,233,242,227,236,101,129, 37,203,201,189,233,238,246,
- 229,242,243,101,128, 37,217,239,242,238,229,242,226,242,225,227,
- 235,229,116, 2,201,216,201,236,236,229,230,116,129, 48, 14,201,
- 225,246,229,242,244,233,227,225,108,128,254, 67,242,233,231,232,
- 116,129, 48, 15,201,246,246,229,242,244,233,227,225,108,128,254,
- 68,100, 2,202, 7,202, 48,233,225,237,239,238,100,129, 37,199,
- 202, 18,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,202, 64,202, 80,
- 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,202, 98,
- 202,140,230,244,240,239,233,238,244,233,238,103, 2,202,113,202,
- 129,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,202,160,202,167,
- 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,202,193,202,
- 209,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,202,228,
- 203, 2,203, 10,109, 2,202,234,202,246,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,203, 22,203, 33,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,203, 57,203, 64,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,203, 87,203,103,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,203,120,203,131,232,233,242,225,231,225,238, 97,
- 128, 48,144,107, 2,203,137,203,147,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,203,177,203,188,203,213,203,
- 231,232,233,242,225,231,225,238, 97,128, 48,146,235,225,244,225,
- 235,225,238, 97,129, 48,242,203,201,232,225,236,230,247,233,228,
- 244,104,128,255,102,110,129, 32,169,203,219,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,204,
- 49,204, 60,204, 71,204, 80,204,107,204,120,204,124,204,136,204,
- 144,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,204, 86,204, 96,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,204,
- 189,205,148,205,171,205,211,207,177,207,185,207,202,208, 10,208,
- 22,209, 19,209, 59,209, 71,209, 82,209,103,210, 76, 97, 11,204,
- 213,204,225,204,235,204,242,204,249,205, 3,205, 28,205, 39,205,
- 77,205, 90,205,136,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,205, 10,205, 19,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,205, 45,205, 69,225,244,225,
- 235,225,238, 97,129, 48,228,205, 57,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,
- 205,100,205,111,232,233,242,225,231,225,238, 97,128, 48,131,235,
- 225,244,225,235,225,238, 97,129, 48,227,205,124,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,205,157,205,162,236,101,128,
- 36,232,245,237,230,236,229,120,128, 1,119,100, 2,205,177,205,
- 187,233,229,242,229,243,233,115,128, 0,255,239,116, 2,205,194,
- 205,203,225,227,227,229,238,116,128, 30,143,226,229,236,239,119,
- 128, 30,245,101, 7,205,227,206,235,206,244,207, 6,207, 38,207,
- 114,207,165,104, 8,205,245,205,254,206, 32,206, 46,206,119,206,
- 135,206,194,206,212,225,242,225,226,233, 99,128, 6, 74,226,225,
- 242,242,229,101, 2,206, 9,206, 18,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,206, 65,206, 74,206, 88,206,
- 104,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,206,142,206,155,228,233,
- 225,236,225,242,225,226,233, 99,128,254,244,229,237,105, 2,206,
- 163,206,178,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,206,250,237,239,238,239,243,240,
- 225,227,101,128,255,229,111, 2,207, 12,207, 21,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,207, 46,207, 82,207, 94,225,232,
- 226,229,238,249,239,237,111, 2,207, 60,207, 69,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,207,127,207,136,207,152,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,
- 207,194,225,226,239,246,101,128, 30,247,105, 5,207,214,207,225,
- 207,236,207,245,207,253,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,208, 38,208,108,208,119,208,129,
- 208,167,208,213,208,222,100,131, 5,217,208, 48,208, 68,208, 77,
- 228,225,231,229,243,104,129,251, 57,208, 59,232,229,226,242,229,
- 119,128,251, 57,232,229,226,242,229,119,128, 5,217,249,239,100,
- 2,208, 85,208, 94,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,208,135,208,159,225,244,225,235,225,238, 97,129, 48,
- 232,208,147,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,208,177,208,
- 188,232,233,242,225,231,225,238, 97,128, 48,135,235,225,244,225,
- 235,225,238, 97,129, 48,231,208,201,232,225,236,230,247,233,228,
- 244,104,128,255,110,244,231,242,229,229,107,128, 3,243,121, 2,
- 208,228,209, 9, 97, 2,208,234,208,244,229,235,239,242,229,225,
- 110,128, 49,136,107, 2,208,250,209, 2,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,209, 25,209, 32,225,242,229,110,128, 36,180,
- 239,231,229,231,242,225,237,237,229,238,105,129, 3,122,209, 48,
- 231,242,229,229,235,227,237, 98,128, 3, 69,114,129, 1,166,209,
- 65,233,238,103,128, 30,153,243,245,240,229,242,233,239,114,128,
- 2,184,116, 2,209, 88,209, 95,233,236,228,101,128, 30,249,245,
- 242,238,229,100,128, 2,142,117, 5,209,115,209,126,209,136,209,
- 174,210, 50,232,233,242,225,231,225,238, 97,128, 48,134,233,235,
- 239,242,229,225,110,128, 49,140,107, 2,209,142,209,166,225,244,
- 225,235,225,238, 97,129, 48,230,209,154,232,225,236,230,247,233,
- 228,244,104,128,255,149,239,242,229,225,110,128, 49, 96,115, 3,
- 209,182,209,220,210, 5,226,233,103, 2,209,190,209,201,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,209,231,209,242,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,210, 14,210, 25,232,233,
- 242,225,231,225,238, 97,128, 48,133,235,225,244,225,235,225,238,
- 97,129, 48,229,210, 38,232,225,236,230,247,233,228,244,104,128,
- 255,109,249,101, 2,210, 57,210, 66,235,239,242,229,225,110,128,
- 49,139,239,235,239,242,229,225,110,128, 49,138,249, 97, 2,210,
- 83,210, 93,226,229,238,231,225,236,105,128, 9,223,228,229,246,
- 97,128, 9, 95,122,142, 0,122,210,132,211,140,211,151,211,194,
- 211,221,213, 0,213,108,213,150,213,162,213,174,213,202,213,210,
- 213,226,213,235, 97, 10,210,154,210,165,210,172,210,179,210,190,
- 211, 12,211, 42,211, 53,211, 89,211,101,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,
- 210,200,210,209,210,223,210,253,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,210,229,210,244,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,211,
- 19,211, 28,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,211, 61,211, 75,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,211,111,211,131,228,
- 225,231,229,243,104,129,251, 54,211,122,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,211,159,211,166,211,188,225,
- 242,239,110,128, 1,126,233,242, 99, 2,211,174,211,179,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,211,204,211,213,225,227,227,229,
- 238,116,128, 1,124,226,229,236,239,119,128, 30,147,101, 6,211,
- 235,211,246,212, 33,212, 44,212, 55,212,251,227,249,242,233,236,
- 236,233, 99,128, 4, 55,100, 2,211,252,212, 15,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,212, 84,212, 93,
- 212,103,212,110,212,135,212,148,212,159,212,171,212,182,212,192,
- 212,203,212,210,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,212,117,212,126,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,212,222,212,231,212,243,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,213, 6,213, 17,226,239,240,239,237,239,230,111,128, 49,
- 19,101, 4,213, 27,213, 38,213, 54,213, 65,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,213, 71,213, 90,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,213,116,
- 213,127,213,138,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,
- 213,180,213,191,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,213,241,213,
- 252,232,233,242,225,231,225,238, 97,128, 48, 90,235,225,244,225,
- 235,225,238, 97,128, 48,186
- };
-
-
- /*
- * 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;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/psnames/rules.mk b/Build/source/libs/freetype2/src/psnames/rules.mk
deleted file mode 100644
index 06bd161e341..00000000000
--- a/Build/source/libs/freetype2/src/psnames/rules.mk
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# FreeType 2 PSNames driver configuration rules
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-# PSNames driver directory
-#
-PSNAMES_DIR := $(SRC_DIR)/psnames
-
-
-# compilation flags for the driver
-#
-PSNAMES_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR))
-
-
-# PSNames driver sources (i.e., C files)
-#
-PSNAMES_DRV_SRC := $(PSNAMES_DIR)/psmodule.c
-
-
-# PSNames driver headers
-#
-PSNAMES_DRV_H := $(PSNAMES_DRV_SRC:%.c=%.h) \
- $(PSNAMES_DIR)/pstables.h \
- $(PSNAMES_DIR)/psnamerr.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)/psmodule.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/Build/source/libs/freetype2/src/raster/Jamfile b/Build/source/libs/freetype2/src/raster/Jamfile
deleted file mode 100644
index f6e4251cb8f..00000000000
--- a/Build/source/libs/freetype2/src/raster/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/raster Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) raster ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftraster ftrend1 ;
- }
- else
- {
- _sources = raster ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/raster Jamfile
diff --git a/Build/source/libs/freetype2/src/raster/ftmisc.h b/Build/source/libs/freetype2/src/raster/ftmisc.h
deleted file mode 100644
index c5dbd50d003..00000000000
--- a/Build/source/libs/freetype2/src/raster/ftmisc.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmisc.h */
-/* */
-/* Miscellaneous macros for stand-alone rasterizer (specification */
-/* only). */
-/* */
-/* Copyright 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used */
-/* modified and distributed under the terms of the FreeType project */
-/* license, LICENSE.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__
-
-#include <string.h> /* memset */
-
-#define FT_BEGIN_HEADER
-#define FT_END_HEADER
-
-#define FT_LOCAL_DEF( x ) static x
-
- /* from include/freetype2/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 src/ftcalc.c */
-
-#include <inttypes.h>
-
- typedef int64_t FT_Int64;
-
- 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;
- }
-
-#endif /* __FTMISC_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/raster/ftraster.c b/Build/source/libs/freetype2/src/raster/ftraster.c
deleted file mode 100644
index 8f014740bda..00000000000
--- a/Build/source/libs/freetype2/src/raster/ftraster.c
+++ /dev/null
@@ -1,3432 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftraster.c */
-/* */
-/* The FreeType glyph rasterizer (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2005, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 -D_STANDALONE_ 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_
-
-#include "ftmisc.h"
-#include "ftimage.h"
-
-#else /* !_STANDALONE_ */
-
-#include <ft2build.h>
-#include "ftraster.h"
-#include FT_INTERNAL_CALC_H /* for FT_MulDiv only */
-
-#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. */
- /* */
- /* 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 xxxDEBUG_RASTER
-
- /* undefine FT_RASTER_OPTION_ANTI_ALIASING if you do not want to support */
- /* 5-levels anti-aliasing */
-#undef FT_RASTER_OPTION_ANTI_ALIASING
-
- /* The size of the two-lines intermediate bitmap used */
- /* for anti-aliasing, in bytes. */
-#define RASTER_GRAY_LINES 2048
-
-
- /*************************************************************************/
- /*************************************************************************/
- /** **/
- /** 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_
-
-
- /* 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 two 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 */
-#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
-
-#else /* _STANDALONE_ */
-
-
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H /* for FT_TRACE() and FT_ERROR() */
-
-#include "rasterrs.h"
-
-#define Raster_Err_None Raster_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
-
- /* 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
-
- /* 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;
-
-
- typedef enum TFlow_
- {
- Flow_None = 0,
- Flow_Up = 1,
- Flow_Down = -1
-
- } TFlow;
-
-
- /* 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 purpose */
- PLong offset; /* start of profile's data in render pool */
- int flow; /* Profile orientation: Asc/Descending */
- long height; /* profile's height in scanlines */
- long start; /* profile's starting scanline */
-
- unsigned 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 TBand_
- {
- Short y_min; /* band's minimum */
- Short y_max; /* band's maximum */
-
- } TBand;
-
-
-#define AlignProfileSize \
- ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( long ) )
-
-
-#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 PWorker worker,
-#define RAS_ARG PWorker worker
-
-#define RAS_VARS worker,
-#define RAS_VAR worker
-
-#define FT_UNUSED_RASTER FT_UNUSED( worker )
-
-
-#endif /* FT_STATIC_RASTER */
-
-
- typedef struct TWorker_ TWorker, *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 */
-
-#define FLOOR( x ) ( (x) & -ras.precision )
-#define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision )
-#define TRUNC( x ) ( (signed long)(x) >> ras.precision_bits )
-#define FRAC( x ) ( (x) & ( ras.precision - 1 ) )
-#define SCALED( x ) ( ( (x) << ras.scale_shift ) - ras.precision_half )
-
- /* Note that I have moved the location of some fields in the */
- /* structure to ensure that the most used variables are used */
- /* at the top. Thus, their offset can be coded with less */
- /* opcodes, and it results in a smaller executable. */
-
- struct TWorker_
- {
- Int precision_bits; /* precision related variables */
- Int precision;
- Int precision_half;
- Long precision_mask;
- 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, 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 */
-
- Short gray_min_x; /* current min x during gray rendering */
- Short gray_max_x; /* current max x during gray rendering */
-
- /* 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. Note that there is */
- /* no horizontal pass during gray */
- /* rendering. */
-
- TPoint arcs[3 * MaxBezier + 1]; /* The Bezier stack */
-
- TBand band_stack[16]; /* band stack used for sub-banding */
- Int band_top; /* band stack top */
-
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
- Byte* grays;
-
- Byte gray_lines[RASTER_GRAY_LINES];
- /* Intermediate table used to render the */
- /* graylevels pixmaps. */
- /* gray_lines is a buffer holding two */
- /* monochrome scanlines */
-
- Short gray_width; /* width in bytes of one monochrome */
- /* intermediate scanline of gray_lines. */
- /* Each gray pixel takes 2 bits long there */
-
- /* The gray_lines must hold 2 lines, thus with size */
- /* in bytes of at least `gray_width*2'. */
-
-#endif /* FT_RASTER_ANTI_ALIASING */
-
- };
-
-
- typedef struct TRaster_
- {
- char* buffer;
- long buffer_size;
- void* memory;
- PWorker worker;
- Byte grays[5];
- Short gray_width;
-
- } TRaster, *PRaster;
-
-#ifdef FT_STATIC_RASTER
-
- static TWorker cur_ras;
-#define ras cur_ras
-
-#else
-
-#define ras (*worker)
-
-#endif /* FT_STATIC_RASTER */
-
-
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
-static const char count_table[256] =
-{
- 0 , 1 , 1 , 2 , 1 , 2 , 2 , 3 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4,
- 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
- 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
- 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
- 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
- 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
- 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
- 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
- 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5,
- 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
- 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
- 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
- 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6,
- 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
- 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7,
- 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7 , 5 , 6 , 6 , 7 , 6 , 7 , 7 , 8 };
-
-#endif /* FT_RASTER_OPTION_ANTI_ALIASING */
-
-
-
- /*************************************************************************/
- /*************************************************************************/
- /** **/
- /** PROFILES COMPUTATION **/
- /** **/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Set_High_Precision */
- /* */
- /* <Description> */
- /* Sets precision variables according to param flag. */
- /* */
- /* <Input> */
- /* High :: Set to True for high precision (typically for ppem < 18), */
- /* false otherwise. */
- /* */
- static void
- Set_High_Precision( RAS_ARGS Int High )
- {
- if ( High )
- {
- ras.precision_bits = 10;
- ras.precision_step = 128;
- ras.precision_jitter = 24;
- }
- 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;
- ras.precision_mask = -ras.precision;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* New_Profile */
- /* */
- /* <Description> */
- /* Creates a new profile in the render pool. */
- /* */
- /* <Input> */
- /* aState :: The state/orientation of the new profile. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow or of incoherent */
- /* profile. */
- /* */
- static Bool
- New_Profile( RAS_ARGS TStates aState )
- {
- if ( !ras.fProfile )
- {
- ras.cProfile = (PProfile)ras.top;
- ras.fProfile = ras.cProfile;
- ras.top += AlignProfileSize;
- }
-
- if ( ras.top >= ras.maxBuff )
- {
- ras.error = Raster_Err_Overflow;
- return FAILURE;
- }
-
- switch ( aState )
- {
- case Ascending_State:
- ras.cProfile->flow = Flow_Up;
- FT_TRACE6(( "New ascending profile = %lx\n", (long)ras.cProfile ));
- break;
-
- case Descending_State:
- ras.cProfile->flow = Flow_Down;
- FT_TRACE6(( "New descending profile = %lx\n", (long)ras.cProfile ));
- break;
-
- default:
- FT_ERROR(( "New_Profile: invalid profile direction!\n" ));
- ras.error = Raster_Err_Invalid;
- return FAILURE;
- }
-
- ras.cProfile->start = 0;
- ras.cProfile->height = 0;
- ras.cProfile->offset = ras.top;
- ras.cProfile->link = (PProfile)0;
- ras.cProfile->next = (PProfile)0;
-
- if ( !ras.gProfile )
- ras.gProfile = ras.cProfile;
-
- ras.state = aState;
- ras.fresh = TRUE;
- ras.joint = FALSE;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* End_Profile */
- /* */
- /* <Description> */
- /* Finalizes the current profile. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow or incoherency. */
- /* */
- static Bool
- End_Profile( RAS_ARG )
- {
- Long h;
- PProfile oldProfile;
-
-
- h = (Long)( ras.top - ras.cProfile->offset );
-
- if ( h < 0 )
- {
- FT_ERROR(( "End_Profile: negative height encountered!\n" ));
- ras.error = Raster_Err_Neg_Height;
- return FAILURE;
- }
-
- if ( h > 0 )
- {
- FT_TRACE6(( "Ending profile %lx, start = %ld, height = %ld\n",
- (long)ras.cProfile, ras.cProfile->start, h ));
-
- oldProfile = ras.cProfile;
- ras.cProfile->height = h;
- 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 = Raster_Err_Overflow;
- return FAILURE;
- }
-
- ras.joint = FALSE;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Insert_Y_Turn */
- /* */
- /* <Description> */
- /* Inserts 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 y2, 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] )
- while ( n >= 0 )
- {
- y2 = (Int)y_turns[n];
- y_turns[n] = y;
- y = y2;
- n--;
- }
-
- if ( n < 0 )
- {
- ras.maxBuff--;
- if ( ras.maxBuff <= ras.top )
- {
- ras.error = Raster_Err_Overflow;
- return FAILURE;
- }
- ras.numTurns++;
- ras.sizeBuff[-ras.numTurns] = y;
- }
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Finalize_Profile_Table */
- /* */
- /* <Description> */
- /* Adjusts all links in the profiles list. */
- /* */
- /* <Return> */
- /* SUCCESS on success. FAILURE in case of overflow. */
- /* */
- static Bool
- Finalize_Profile_Table( RAS_ARG )
- {
- Int bottom, top;
- UShort n;
- PProfile p;
-
-
- n = ras.num_Profs;
-
- if ( n > 1 )
- {
- p = ras.fProfile;
- while ( n > 0 )
- {
- if ( n > 1 )
- p->link = (PProfile)( p->offset + p->height );
- else
- p->link = NULL;
-
- switch ( p->flow )
- {
- case Flow_Down:
- bottom = (Int)( p->start - p->height + 1 );
- top = (Int)p->start;
- p->start = bottom;
- p->offset += p->height - 1;
- break;
-
- case Flow_Up:
- default:
- bottom = (Int)p->start;
- top = (Int)( p->start + p->height - 1 );
- }
-
- if ( Insert_Y_Turn( RAS_VARS bottom ) ||
- Insert_Y_Turn( RAS_VARS top + 1 ) )
- return FAILURE;
-
- p = p->link;
- n--;
- }
- }
- else
- ras.fProfile = NULL;
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Split_Conic */
- /* */
- /* <Description> */
- /* Subdivides 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> */
- /* Subdivides 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> */
- /* Computes the x-coordinates of an ascending line segment and stores */
- /* 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 += FMulDiv( 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 = Raster_Err_Overflow;
- return FAILURE;
- }
-
- if ( Dx > 0 )
- {
- Ix = ( ras.precision * Dx ) / Dy;
- Rx = ( ras.precision * Dx ) % Dy;
- Dx = 1;
- }
- else
- {
- Ix = -( ( 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> */
- /* Computes the x-coordinates of an descending line segment and */
- /* stores 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> */
- /* Computes the x-coordinates of an ascending Bezier arc and stores */
- /* 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 = Raster_Err_Overflow;
- return FAILURE;
- }
-
- start_arc = arc;
-
- while ( arc >= start_arc && e <= e2 )
- {
- 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;
- }
- }
-
- Fin:
- ras.top = top;
- ras.arc -= degree;
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Bezier_Down */
- /* */
- /* <Description> */
- /* Computes the x-coordinates of an descending Bezier arc and stores */
- /* 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> */
- /* Injects a new line segment and adjusts 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 ) )
- return FAILURE;
- }
- else
- {
- if ( y < ras.lastY )
- if ( New_Profile( RAS_VARS Descending_State ) )
- return FAILURE;
- }
- break;
-
- case Ascending_State:
- if ( y < ras.lastY )
- {
- if ( End_Profile( RAS_VAR ) ||
- New_Profile( RAS_VARS Descending_State ) )
- return FAILURE;
- }
- break;
-
- case Descending_State:
- if ( y > ras.lastY )
- {
- if ( End_Profile( RAS_VAR ) ||
- New_Profile( RAS_VARS Ascending_State ) )
- 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> */
- /* Injects a new conic arc and adjusts 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 )
- {
- /* finalize current profile if any */
- if ( ras.state != Unknown_State &&
- End_Profile( RAS_VAR ) )
- goto Fail;
-
- /* create a new profile */
- if ( New_Profile( RAS_VARS state_bez ) )
- 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> */
- /* Injects a new cubic arc and adjusts 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 )
- {
- if ( ras.state != Unknown_State &&
- End_Profile( RAS_VAR ) )
- goto Fail;
-
- if ( New_Profile( RAS_VARS state_bez ) )
- 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> */
- /* Scans 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;
-
- unsigned 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;
- 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 );
- x3 = SCALED( point[ 0].x );
- y3 = SCALED( point[ 0].y );
-
- if ( flipped )
- {
- SWAP_( x1, y1 );
- SWAP_( x2, y2 );
- SWAP_( x3, y3 );
- }
-
- if ( point <= limit )
- {
- 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 = Raster_Err_Invalid;
-
- Fail:
- return FAILURE;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Convert_Glyph */
- /* */
- /* <Description> */
- /* Converts a glyph into a series of segments and arcs and makes 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;
- unsigned start;
-
- PProfile lastProfile;
-
-
- 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++ )
- {
- ras.state = Unknown_State;
- ras.gProfile = NULL;
-
- if ( Decompose_Curve( RAS_VARS (unsigned short)start,
- ras.outline.contours[i],
- flipped ) )
- return FAILURE;
-
- start = ras.outline.contours[i] + 1;
-
- /* We must now see 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->flow == ras.cProfile->flow )
- ras.top--;
- /* Note that ras.gProfile can be nil if the contour was too small */
- /* to be drawn. */
-
- lastProfile = ras.cProfile;
- if ( End_Profile( RAS_VAR ) )
- 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->flow;
- 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 += ( ras.target.rows - 1 ) * pitch;
-
- ras.gray_min_x = 0;
- ras.gray_max_x = 0;
- }
-
-
- static void
- Vertical_Sweep_Span( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- int c1, c2;
- Byte f1, f2;
- Byte* target;
-
- FT_UNUSED( y );
- FT_UNUSED( left );
- FT_UNUSED( right );
-
-
- /* Drop-out control */
-
- e1 = TRUNC( CEILING( x1 ) );
-
- if ( x2 - x1 - ras.precision <= ras.precision_jitter )
- e2 = e1;
- else
- e2 = TRUNC( FLOOR( x2 ) );
-
- if ( e2 >= 0 && e1 < ras.bWidth )
- {
- if ( e1 < 0 )
- e1 = 0;
- if ( e2 >= ras.bWidth )
- e2 = ras.bWidth - 1;
-
- c1 = (Short)( e1 >> 3 );
- c2 = (Short)( e2 >> 3 );
-
- f1 = (Byte) ( 0xFF >> ( e1 & 7 ) );
- f2 = (Byte) ~( 0x7F >> ( e2 & 7 ) );
-
- if ( ras.gray_min_x > c1 )
- ras.gray_min_x = (short)c1;
- if ( ras.gray_max_x < c2 )
- ras.gray_max_x = (short)c2;
-
- 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 );
- }
- }
-
-
- 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;
-
-
- /* 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 )
- {
- if ( e1 == e2 + ras.precision )
- {
- switch ( ras.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 spec is not very clear regarding those rules. It */
- /* presents a method that is way too costly to implement */
- /* while the general idea seems to get rid of `stubs'. */
- /* */
- /* Here, we only get rid of stubs recognized if: */
- /* */
- /* 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 */
- /* */
-
- /* FIXXXME: uncommenting this line solves the disappearing */
- /* bit problem in the `7' of verdana 10pts, but */
- /* makes a new one in the `C' of arial 14pts */
-#if 0
- if ( x2 - x1 < ras.precision_half )
-#endif
- {
- /* upper stub test */
- if ( left->next == right && left->height <= 0 )
- return;
-
- /* lower stub test */
- if ( right->next == left && left->start == y )
- return;
- }
-
- if ( ras.dropOutControl == 1 )
- pxl = e2;
- else
- pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half );
- break;
-
- default: /* modes 2, 3, 6, 7 */
- return; /* no drop-out control */
- }
-
- /* 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 ) )
- return;
- }
- else
- return;
- }
-
- e1 = TRUNC( pxl );
-
- if ( e1 >= 0 && e1 < ras.bWidth )
- {
- c1 = (Short)( e1 >> 3 );
- f1 = (Short)( e1 & 7 );
-
- if ( ras.gray_min_x > c1 )
- ras.gray_min_x = c1;
- if ( ras.gray_max_x < c1 )
- ras.gray_max_x = c1;
-
- ras.bTarget[ras.traceOfs + c1] |= (char)( 0x80 >> f1 );
- }
- }
-
-
- 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 )
- {
- Long e1, e2;
- PByte bits;
- Byte f1;
-
- FT_UNUSED( left );
- FT_UNUSED( right );
-
-
- if ( x2 - x1 < ras.precision )
- {
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 == e2 )
- {
- bits = ras.bTarget + ( y >> 3 );
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
-
- e1 = TRUNC( e1 );
-
- if ( e1 >= 0 && e1 < ras.target.rows )
- {
- PByte p;
-
-
- p = bits - e1*ras.target.pitch;
- if ( ras.target.pitch > 0 )
- p += ( ras.target.rows - 1 ) * ras.target.pitch;
-
- p[0] |= f1;
- }
- }
- }
- }
-
-
- 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;
-
-
- /* 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 )
- {
- if ( e1 == e2 + ras.precision )
- {
- switch ( ras.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 )
- return;
-
- /* leftmost stub test */
- if ( right->next == left && left->start == y )
- return;
-
- if ( ras.dropOutControl == 1 )
- pxl = e2;
- else
- pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half );
- break;
-
- default: /* modes 2, 3, 6, 7 */
- return; /* no drop-out control */
- }
-
- /* 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 += ( ras.target.rows - 1 ) * ras.target.pitch;
-
- if ( e1 >= 0 &&
- e1 < ras.target.rows &&
- *bits & f1 )
- return;
- }
- else
- return;
- }
-
- bits = ras.bTarget + ( y >> 3 );
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
-
- e1 = TRUNC( pxl );
-
- if ( e1 >= 0 && e1 < ras.target.rows )
- {
- bits -= e1 * ras.target.pitch;
- if ( ras.target.pitch > 0 )
- bits += ( ras.target.rows - 1 ) * ras.target.pitch;
-
- bits[0] |= f1;
- }
- }
-
-
- static void
- Horizontal_Sweep_Step( RAS_ARG )
- {
- /* Nothing, really */
- FT_UNUSED_RASTER;
- }
-
-
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
-
- /*************************************************************************/
- /* */
- /* Vertical Gray Sweep Procedure Set */
- /* */
- /* These two routines are used during the vertical gray-levels sweep */
- /* phase by the generic Draw_Sweep() function. */
- /* */
- /* NOTES */
- /* */
- /* - The target pixmap's width *must* be a multiple of 4. */
- /* */
- /* - You have to use the function Vertical_Sweep_Span() for the gray */
- /* span call. */
- /* */
- /*************************************************************************/
-
- static void
- Vertical_Gray_Sweep_Init( RAS_ARGS Short* min,
- Short* max )
- {
- Long pitch, byte_len;
-
-
- *min = *min & -2;
- *max = ( *max + 3 ) & -2;
-
- ras.traceOfs = 0;
- pitch = ras.target.pitch;
- byte_len = -pitch;
- ras.traceIncr = (Short)byte_len;
- ras.traceG = ( *min / 2 ) * byte_len;
-
- if ( pitch > 0 )
- {
- ras.traceG += ( ras.target.rows - 1 ) * pitch;
- byte_len = -byte_len;
- }
-
- ras.gray_min_x = (Short)byte_len;
- ras.gray_max_x = -(Short)byte_len;
- }
-
-
- static void
- Vertical_Gray_Sweep_Step( RAS_ARG )
- {
- Int c1, c2;
- PByte pix, bit, bit2;
- char* count = (char*)count_table;
- Byte* grays;
-
-
- ras.traceOfs += ras.gray_width;
-
- if ( ras.traceOfs > ras.gray_width )
- {
- pix = ras.gTarget + ras.traceG + ras.gray_min_x * 4;
- grays = ras.grays;
-
- if ( ras.gray_max_x >= 0 )
- {
- Long last_pixel = ras.target.width - 1;
- Int last_cell = last_pixel >> 2;
- Int last_bit = last_pixel & 3;
- Bool over = 0;
-
-
- if ( ras.gray_max_x >= last_cell && last_bit != 3 )
- {
- ras.gray_max_x = last_cell - 1;
- over = 1;
- }
-
- if ( ras.gray_min_x < 0 )
- ras.gray_min_x = 0;
-
- bit = ras.bTarget + ras.gray_min_x;
- bit2 = bit + ras.gray_width;
-
- c1 = ras.gray_max_x - ras.gray_min_x;
-
- while ( c1 >= 0 )
- {
- c2 = count[*bit] + count[*bit2];
-
- if ( c2 )
- {
- pix[0] = grays[(c2 >> 12) & 0x000F];
- pix[1] = grays[(c2 >> 8 ) & 0x000F];
- pix[2] = grays[(c2 >> 4 ) & 0x000F];
- pix[3] = grays[ c2 & 0x000F];
-
- *bit = 0;
- *bit2 = 0;
- }
-
- bit++;
- bit2++;
- pix += 4;
- c1--;
- }
-
- if ( over )
- {
- c2 = count[*bit] + count[*bit2];
- if ( c2 )
- {
- switch ( last_bit )
- {
- case 2:
- pix[2] = grays[(c2 >> 4 ) & 0x000F];
- case 1:
- pix[1] = grays[(c2 >> 8 ) & 0x000F];
- default:
- pix[0] = grays[(c2 >> 12) & 0x000F];
- }
-
- *bit = 0;
- *bit2 = 0;
- }
- }
- }
-
- ras.traceOfs = 0;
- ras.traceG += ras.traceIncr;
-
- ras.gray_min_x = 32000;
- ras.gray_max_x = -32000;
- }
- }
-
-
- static void
- Horizontal_Gray_Sweep_Span( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- /* nothing, really */
- FT_UNUSED_RASTER;
- FT_UNUSED( y );
- FT_UNUSED( x1 );
- FT_UNUSED( x2 );
- FT_UNUSED( left );
- FT_UNUSED( right );
- }
-
-
- static void
- Horizontal_Gray_Sweep_Drop( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- PByte pixel;
- Byte color;
-
-
- /* During the horizontal sweep, we only take care of drop-outs */
-
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 > e2 )
- {
- if ( e1 == e2 + ras.precision )
- {
- switch ( ras.dropOutControl )
- {
- case 0: /* simple drop-outs including stubs */
- e1 = e2;
- break;
-
- case 4: /* smart drop-outs including stubs */
- e1 = 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 )
- return;
-
- /* leftmost stub test */
- if ( right->next == left && left->start == y )
- return;
-
- if ( ras.dropOutControl == 1 )
- e1 = e2;
- else
- e1 = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half );
-
- break;
-
- default: /* modes 2, 3, 6, 7 */
- return; /* no drop-out control */
- }
- }
- else
- return;
- }
-
- if ( e1 >= 0 )
- {
- if ( x2 - x1 >= ras.precision_half )
- color = ras.grays[2];
- else
- color = ras.grays[1];
-
- e1 = TRUNC( e1 ) / 2;
- if ( e1 < ras.target.rows )
- {
- pixel = ras.gTarget - e1 * ras.target.pitch + y / 2;
- if ( ras.target.pitch > 0 )
- pixel += ( ras.target.rows - 1 ) * ras.target.pitch;
-
- if ( pixel[0] == ras.grays[0] )
- pixel[0] = color;
- }
- }
- }
-
-
-#endif /* FT_RASTER_OPTION_ANTI_ALIASING */
-
-
- /*************************************************************************/
- /* */
- /* 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;
-
-
- /* Init 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 = Raster_Err_Invalid;
- return FAILURE;
- }
-
- /* Now inits 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 = (UShort)( 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 )
- {
- /* look in the waiting list for new activations */
-
- P = waiting;
-
- while ( P )
- {
- Q = P->link;
- P->countL -= y_height;
- if ( P->countL == 0 )
- {
- DelOld( &waiting, P );
-
- switch ( P->flow )
- {
- case Flow_Up:
- InsNew( &draw_left, P );
- break;
-
- case Flow_Down:
- InsNew( &draw_right, P );
- break;
- }
- }
-
- 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;
- }
-
- if ( x2 - x1 <= ras.precision )
- {
- e1 = FLOOR( x1 );
- e2 = CEILING( x2 );
-
- if ( e1 > e2 || e2 == e1 + ras.precision )
- {
- if ( ras.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;
- }
-
- /* now perform the dropouts _after_ the span drawing -- */
- /* drop-outs 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 needs 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, flushes 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> */
- /* Performs 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 = Raster_Err_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> */
- /* Renders a glyph in a bitmap. Sub-banding if needed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( 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 = (FT_Byte)( !( ras.outline.flags &
- FT_OUTLINE_SINGLE_PASS ) );
-
- /* Vertical Sweep */
- 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 = (unsigned short)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 )
- {
- 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;
- }
-
-
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Render_Gray_Glyph */
- /* */
- /* <Description> */
- /* Renders a glyph with grayscaling. Sub-banding if needed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- Render_Gray_Glyph( RAS_ARG )
- {
- Long pixel_width;
- FT_Error error;
-
-
- Set_High_Precision( RAS_VARS ras.outline.flags &
- FT_OUTLINE_HIGH_PRECISION );
- ras.scale_shift = ras.precision_shift + 1;
-
- 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 = !( ras.outline.flags & FT_OUTLINE_SINGLE_PASS );
-
- /* Vertical Sweep */
-
- ras.band_top = 0;
- ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = 2 * ras.target.rows - 1;
-
- ras.bWidth = ras.gray_width;
- pixel_width = 2 * ( ( ras.target.width + 3 ) >> 2 );
-
- if ( ras.bWidth > pixel_width )
- ras.bWidth = pixel_width;
-
- ras.bWidth = ras.bWidth * 8;
- ras.bTarget = (Byte*)ras.gray_lines;
- ras.gTarget = (Byte*)ras.target.buffer;
-
- ras.Proc_Sweep_Init = Vertical_Gray_Sweep_Init;
- ras.Proc_Sweep_Span = Vertical_Sweep_Span;
- ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
- ras.Proc_Sweep_Step = Vertical_Gray_Sweep_Step;
-
- error = Render_Single_Pass( RAS_VARS 0 );
- if ( error )
- return error;
-
- /* Horizontal Sweep */
- if ( ras.second_pass && ras.dropOutControl != 2 )
- {
- ras.Proc_Sweep_Init = Horizontal_Sweep_Init;
- ras.Proc_Sweep_Span = Horizontal_Gray_Sweep_Span;
- ras.Proc_Sweep_Drop = Horizontal_Gray_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 = ras.target.width * 2 - 1;
-
- error = Render_Single_Pass( RAS_VARS 1 );
- if ( error )
- return error;
- }
-
- return Raster_Err_None;
- }
-
-#else /* !FT_RASTER_OPTION_ANTI_ALIASING */
-
- FT_LOCAL_DEF( FT_Error )
- Render_Gray_Glyph( RAS_ARG )
- {
- FT_UNUSED_RASTER;
-
- return Raster_Err_Unsupported;
- }
-
-#endif /* !FT_RASTER_OPTION_ANTI_ALIASING */
-
-
- static void
- ft_black_init( PRaster raster )
- {
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
- FT_UInt n;
-
-
- /* set default 5-levels gray palette */
- for ( n = 0; n < 5; n++ )
- raster->grays[n] = n * 255 / 4;
-
- raster->gray_width = RASTER_GRAY_LINES / 2;
-
-#else
- FT_UNUSED( raster );
-#endif
- }
-
-
- /**** 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 TRaster the_raster;
-
-
- *araster = (FT_Raster)&the_raster;
- FT_MEM_ZERO( &the_raster, sizeof ( 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,
- PRaster *araster )
- {
- FT_Error error;
- PRaster raster;
-
-
- *araster = 0;
- if ( !FT_NEW( raster ) )
- {
- raster->memory = memory;
- ft_black_init( raster );
-
- *araster = raster;
- }
-
- return error;
- }
-
-
- static void
- ft_black_done( PRaster raster )
- {
- FT_Memory memory = (FT_Memory)raster->memory;
- FT_FREE( raster );
- }
-
-
-#endif /* _STANDALONE_ */
-
-
- static void
- ft_black_reset( PRaster raster,
- char* pool_base,
- long pool_size )
- {
- if ( raster )
- {
- if ( pool_base && pool_size >= (long)sizeof(TWorker) + 2048 )
- {
- PWorker worker = (PWorker)pool_base;
-
-
- raster->buffer = pool_base + ( (sizeof ( *worker ) + 7 ) & ~7 );
- raster->buffer_size = ( ( pool_base + pool_size ) -
- (char*)raster->buffer ) / sizeof ( Long );
- raster->worker = worker;
- }
- else
- {
- raster->buffer = NULL;
- raster->buffer_size = 0;
- raster->worker = NULL;
- }
- }
- }
-
-
- static void
- ft_black_set_mode( PRaster raster,
- unsigned long mode,
- const char* palette )
- {
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
- if ( mode == FT_MAKE_TAG( 'p', 'a', 'l', '5' ) )
- {
- /* set 5-levels gray palette */
- raster->grays[0] = palette[0];
- raster->grays[1] = palette[1];
- raster->grays[2] = palette[2];
- raster->grays[3] = palette[3];
- raster->grays[4] = palette[4];
- }
-
-#else
-
- FT_UNUSED( raster );
- FT_UNUSED( mode );
- FT_UNUSED( palette );
-
-#endif
- }
-
-
- static int
- ft_black_render( PRaster raster,
- const FT_Raster_Params* params )
- {
- const FT_Outline* outline = (const FT_Outline*)params->source;
- const FT_Bitmap* target_map = params->target;
- PWorker worker;
-
-
- if ( !raster || !raster->buffer || !raster->buffer_size )
- return Raster_Err_Not_Ini;
-
- if ( !outline )
- return Raster_Err_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 Raster_Err_Invalid;
-
- if ( outline->n_points !=
- outline->contours[outline->n_contours - 1] + 1 )
- return Raster_Err_Invalid;
-
- worker = raster->worker;
-
- /* this version of the raster does not support direct rendering, sorry */
- if ( params->flags & FT_RASTER_FLAG_DIRECT )
- return Raster_Err_Unsupported;
-
- if ( !target_map )
- return Raster_Err_Invalid;
-
- /* nothing to do */
- if ( !target_map->width || !target_map->rows )
- return Raster_Err_None;
-
- if ( !target_map->buffer )
- return Raster_Err_Invalid;
-
- ras.outline = *outline;
- ras.target = *target_map;
-
- worker->buff = (PLong) raster->buffer;
- worker->sizeBuff = worker->buff +
- raster->buffer_size / sizeof ( Long );
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
- worker->grays = raster->grays;
- worker->gray_width = raster->gray_width;
-#endif
-
- return ( ( params->flags & FT_RASTER_FLAG_AA )
- ? Render_Gray_Glyph( RAS_VAR )
- : Render_Glyph( RAS_VAR ) );
- }
-
-
- const FT_Raster_Funcs ft_standard_raster =
- {
- FT_GLYPH_FORMAT_OUTLINE,
- (FT_Raster_New_Func) ft_black_new,
- (FT_Raster_Reset_Func) ft_black_reset,
- (FT_Raster_Set_Mode_Func)ft_black_set_mode,
- (FT_Raster_Render_Func) ft_black_render,
- (FT_Raster_Done_Func) ft_black_done
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/raster/ftraster.h b/Build/source/libs/freetype2/src/raster/ftraster.h
deleted file mode 100644
index 80fe46debaf..00000000000
--- a/Build/source/libs/freetype2/src/raster/ftraster.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftraster.h */
-/* */
-/* The FreeType glyph rasterizer (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/raster/ftrend1.c b/Build/source/libs/freetype2/src/raster/ftrend1.c
deleted file mode 100644
index 3cc8d07413b..00000000000
--- a/Build/source/libs/freetype2/src/raster/ftrend1.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrend1.c */
-/* */
-/* The FreeType glyph rasterizer interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_OUTLINE_H
-#include "ftrend1.h"
-#include "ftraster.h"
-
-#include "rasterrs.h"
-
-
- /* initialize renderer -- init its raster */
- static FT_Error
- ft_raster1_init( FT_Renderer render )
- {
- FT_Library library = FT_MODULE_LIBRARY( render );
-
-
- render->clazz->raster_class->raster_reset( render->raster,
- library->raster_pool,
- library->raster_pool_size );
-
- return Raster_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 = Raster_Err_Ok;
-
-
- if ( slot->format != render->glyph_format )
- {
- error = Raster_Err_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_MEM_ZERO( cbox, sizeof ( *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;
- 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 = Raster_Err_Invalid_Argument;
- goto Exit;
- }
-
- /* check rendering mode */
- if ( mode != FT_RENDER_MODE_MONO )
- {
- /* raster1 is only capable of producing monochrome bitmaps */
- if ( render->clazz == &ft_raster1_renderer_class )
- return Raster_Err_Cannot_Render_Glyph;
- }
- else
- {
- /* raster5 is only capable of producing 5-gray-levels bitmaps */
- if ( render->clazz == &ft_raster5_renderer_class )
- return Raster_Err_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, &cbox );
-
- 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 );
-
- width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
- height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
- 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;
- }
-
- /* allocate new one, depends on pixel format */
- if ( !( mode & FT_RENDER_MODE_MONO ) )
- {
- /* we pad to 32 bits, only for backwards compatibility with FT 1.x */
- pitch = FT_PAD_CEIL( width, 4 );
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->num_grays = 256;
- }
- else
- {
- pitch = ( ( width + 15 ) >> 4 ) << 1;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
- }
-
- bitmap->width = width;
- bitmap->rows = height;
- bitmap->pitch = 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;
-
- if ( bitmap->pixel_mode == FT_PIXEL_MODE_GRAY )
- params.flags |= FT_RASTER_FLAG_AA;
-
- /* 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_CALLBACK_TABLE_DEF
- const FT_Renderer_Class ft_raster1_renderer_class =
- {
- {
- FT_MODULE_RENDERER,
- sizeof( FT_RendererRec ),
-
- "raster1",
- 0x10000L,
- 0x20000L,
-
- 0, /* module specific interface */
-
- (FT_Module_Constructor)ft_raster1_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- },
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_raster1_render,
- (FT_Renderer_TransformFunc)ft_raster1_transform,
- (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox,
- (FT_Renderer_SetModeFunc) ft_raster1_set_mode,
-
- (FT_Raster_Funcs*) &ft_standard_raster
- };
-
-
- /* This renderer is _NOT_ part of the default modules; you will need */
- /* to register it by hand in your application. It should only be */
- /* used for backwards-compatibility with FT 1.x anyway. */
- /* */
- FT_CALLBACK_TABLE_DEF
- const FT_Renderer_Class ft_raster5_renderer_class =
- {
- {
- FT_MODULE_RENDERER,
- sizeof( FT_RendererRec ),
-
- "raster5",
- 0x10000L,
- 0x20000L,
-
- 0, /* module specific interface */
-
- (FT_Module_Constructor)ft_raster1_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- },
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_raster1_render,
- (FT_Renderer_TransformFunc)ft_raster1_transform,
- (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox,
- (FT_Renderer_SetModeFunc) ft_raster1_set_mode,
-
- (FT_Raster_Funcs*) &ft_standard_raster
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/raster/ftrend1.h b/Build/source/libs/freetype2/src/raster/ftrend1.h
deleted file mode 100644
index 76e9a5f581e..00000000000
--- a/Build/source/libs/freetype2/src/raster/ftrend1.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftrend1.h */
-/* */
-/* The FreeType glyph rasterizer interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTREND1_H__
-#define __FTREND1_H__
-
-
-#include <ft2build.h>
-#include FT_RENDER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Renderer_Class ) ft_raster1_renderer_class;
-
- /* this renderer is _NOT_ part of the default modules, you'll need */
- /* to register it by hand in your application. It should only be */
- /* used for backwards-compatibility with FT 1.x anyway. */
- /* */
- FT_EXPORT_VAR( const FT_Renderer_Class ) ft_raster5_renderer_class;
-
-
-FT_END_HEADER
-
-#endif /* __FTREND1_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/raster/module.mk b/Build/source/libs/freetype2/src/raster/module.mk
deleted file mode 100644
index 59c737b9303..00000000000
--- a/Build/source/libs/freetype2/src/raster/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 renderer module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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_raster1_renderer_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)raster $(ECHO_DRIVER_DESC)monochrome bitmap renderer$(ECHO_DRIVER_DONE)
-endef
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/raster/raster.c b/Build/source/libs/freetype2/src/raster/raster.c
deleted file mode 100644
index f13a67a209d..00000000000
--- a/Build/source/libs/freetype2/src/raster/raster.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/***************************************************************************/
-/* */
-/* raster.c */
-/* */
-/* FreeType monochrome rasterer module component (body only). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "ftraster.c"
-#include "ftrend1.c"
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/raster/rasterrs.h b/Build/source/libs/freetype2/src/raster/rasterrs.h
deleted file mode 100644
index 5df9a7ab1ed..00000000000
--- a/Build/source/libs/freetype2/src/raster/rasterrs.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* rasterrs.h */
-/* */
-/* monochrome renderer error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/raster/rules.mk b/Build/source/libs/freetype2/src/raster/rules.mk
deleted file mode 100644
index 0dc8782ea45..00000000000
--- a/Build/source/libs/freetype2/src/raster/rules.mk
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# FreeType 2 renderer module build rules
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-# raster driver directory
-#
-RASTER_DIR := $(SRC_DIR)/raster
-
-# compilation flags for the driver
-#
-RASTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(RASTER_DIR))
-
-
-# raster driver sources (i.e., C files)
-#
-RASTER_DRV_SRC := $(RASTER_DIR)/ftraster.c \
- $(RASTER_DIR)/ftrend1.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/Build/source/libs/freetype2/src/sfnt/Jamfile b/Build/source/libs/freetype2/src/sfnt/Jamfile
deleted file mode 100644
index 6b8a4018223..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/sfnt Jamfile
-#
-# Copyright 2001, 2002, 2004, 2005 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 = sfobjs sfdriver ttcmap ttpost ttload ttsbit ttkern ttbdf ;
- }
- else
- {
- _sources = sfnt ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/sfnt Jamfile
diff --git a/Build/source/libs/freetype2/src/sfnt/module.mk b/Build/source/libs/freetype2/src/sfnt/module.mk
deleted file mode 100644
index d33913809cc..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 SFNT module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/sfnt/rules.mk b/Build/source/libs/freetype2/src/sfnt/rules.mk
deleted file mode 100644
index ff7840e7fe3..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/rules.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# FreeType 2 SFNT driver configuration rules
-#
-
-
-# Copyright 1996-2000, 2002, 2003, 2004, 2005, 2006, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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 := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SFNT_DIR))
-
-
-# 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 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/Build/source/libs/freetype2/src/sfnt/sfdriver.c b/Build/source/libs/freetype2/src/sfnt/sfdriver.c
deleted file mode 100644
index 5ba22a6c51c..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/sfdriver.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfdriver.c */
-/* */
-/* High-level SFNT driver interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_SFNT_H
-#include FT_INTERNAL_OBJECTS_H
-
-#include "sfdriver.h"
-#include "ttload.h"
-#include "sfobjs.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
-
-
- /*
- * 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 : 0;
- break;
-
- case ft_sfnt_os2:
- table = face->os2.version == 0xFFFFU ? 0 : &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 : 0;
- break;
-
- default:
- table = 0;
- }
-
- return table;
- }
-
-
- static FT_Error
- sfnt_table_info( TT_Face face,
- FT_UInt idx,
- FT_ULong *tag,
- FT_ULong *length )
- {
- if ( !tag || !length )
- return SFNT_Err_Invalid_Argument;
-
- if ( idx >= face->num_tables )
- return SFNT_Err_Table_Missing;
-
- *tag = face->dir_tables[idx].Tag;
- *length = face->dir_tables[idx].Length;
-
- return SFNT_Err_Ok;
- }
-
-
- static const FT_Service_SFNT_TableRec sfnt_service_sfnt_table =
- {
- (FT_SFNT_TableLoadFunc)tt_face_load_any,
- (FT_SFNT_TableGetFunc) get_sfnt_table,
- (FT_SFNT_TableInfoFunc)sfnt_table_info
- };
-
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-
- /*
- * GLYPH DICT SERVICE
- *
- */
-
- static FT_Error
- sfnt_get_glyph_name( TT_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( face, glyph_index, &gname );
- if ( !error )
- FT_STRCPYN( buffer, gname, buffer_max );
-
- return error;
- }
-
-
- static const FT_Service_GlyphDictRec sfnt_service_glyph_dict =
- {
- (FT_GlyphDict_GetNameFunc) sfnt_get_glyph_name,
- (FT_GlyphDict_NameIndexFunc)NULL
- };
-
-#endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
- /*
- * POSTSCRIPT NAME SERVICE
- *
- */
-
- static const char*
- sfnt_get_ps_name( TT_Face face )
- {
- FT_Int n, found_win, found_apple;
- const char* result = NULL;
-
-
- /* shouldn't happen, but just in case to avoid memory leaks */
- if ( face->postscript_name )
- return face->postscript_name;
-
- /* scan the name table to see whether we have a Postscript name here, */
- /* either in Macintosh or Windows platform encodings */
- found_win = -1;
- found_apple = -1;
-
- for ( n = 0; n < face->num_names; n++ )
- {
- TT_NameEntryRec* name = face->name_table.names + n;
-
-
- if ( name->nameID == 6 && name->stringLength > 0 )
- {
- if ( name->platformID == 3 &&
- name->encodingID == 1 &&
- name->languageID == 0x409 )
- found_win = n;
-
- if ( name->platformID == 1 &&
- name->encodingID == 0 &&
- name->languageID == 0 )
- found_apple = n;
- }
- }
-
- if ( found_win != -1 )
- {
- FT_Memory memory = face->root.memory;
- TT_NameEntryRec* name = face->name_table.names + found_win;
- FT_UInt len = name->stringLength / 2;
- FT_Error error = SFNT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- if ( !FT_ALLOC( result, name->stringLength + 1 ) )
- {
- FT_Stream stream = face->name_table.stream;
- FT_String* r = (FT_String*)result;
- FT_Byte* p = (FT_Byte*)name->string;
-
-
- if ( FT_STREAM_SEEK( name->stringOffset ) ||
- FT_FRAME_ENTER( name->stringLength ) )
- {
- FT_FREE( result );
- name->stringLength = 0;
- name->stringOffset = 0;
- FT_FREE( name->string );
-
- goto Exit;
- }
-
- p = (FT_Byte*)stream->cursor;
-
- for ( ; len > 0; len--, p += 2 )
- {
- if ( p[0] == 0 && p[1] >= 32 && p[1] < 128 )
- *r++ = p[1];
- }
- *r = '\0';
-
- FT_FRAME_EXIT();
- }
- goto Exit;
- }
-
- if ( found_apple != -1 )
- {
- FT_Memory memory = face->root.memory;
- TT_NameEntryRec* name = face->name_table.names + found_apple;
- FT_UInt len = name->stringLength;
- FT_Error error = SFNT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- if ( !FT_ALLOC( result, len + 1 ) )
- {
- FT_Stream stream = face->name_table.stream;
-
-
- if ( FT_STREAM_SEEK( name->stringOffset ) ||
- FT_STREAM_READ( result, len ) )
- {
- name->stringOffset = 0;
- name->stringLength = 0;
- FT_FREE( name->string );
- FT_FREE( result );
- goto Exit;
- }
- ((char*)result)[len] = '\0';
- }
- }
-
- Exit:
- face->postscript_name = result;
- return result;
- }
-
- static const FT_Service_PsFontNameRec sfnt_service_ps_name =
- {
- (FT_PsName_GetFunc)sfnt_get_ps_name
- };
-
-
- /*
- * TT CMAP INFO
- */
- static const FT_Service_TTCMapsRec tt_service_get_cmap_info =
- {
- (TT_CMap_Info_GetFunc)tt_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_Err_Invalid_Argument;
- }
- }
-
- return error;
- }
-
-
- static const FT_Service_BDFRec sfnt_service_bdf =
- {
- (FT_BDF_GetCharsetIdFunc) sfnt_get_charset_id,
- (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop,
- };
-
-#endif /* TT_CONFIG_OPTION_BDF */
-
-
- /*
- * SERVICE LIST
- */
-
- static const FT_ServiceDescRec sfnt_services[] =
- {
- { FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table },
- { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name },
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- { FT_SERVICE_ID_GLYPH_DICT, &sfnt_service_glyph_dict },
-#endif
-#ifdef TT_CONFIG_OPTION_BDF
- { FT_SERVICE_ID_BDF, &sfnt_service_bdf },
-#endif
- { FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info },
-
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- sfnt_get_interface( FT_Module module,
- const char* module_interface )
- {
- FT_UNUSED( module );
-
- return ft_service_list_lookup( sfnt_services, module_interface );
- }
-
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_CALLBACK_DEF( FT_Error )
- tt_face_load_sfnt_header_stub( TT_Face face,
- FT_Stream stream,
- FT_Long face_index,
- SFNT_Header header )
- {
- FT_UNUSED( face );
- FT_UNUSED( stream );
- FT_UNUSED( face_index );
- FT_UNUSED( header );
-
- return FT_Err_Unimplemented_Feature;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_face_load_directory_stub( TT_Face face,
- FT_Stream stream,
- SFNT_Header header )
- {
- FT_UNUSED( face );
- FT_UNUSED( stream );
- FT_UNUSED( header );
-
- return FT_Err_Unimplemented_Feature;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_face_load_hdmx_stub( TT_Face face,
- FT_Stream stream )
- {
- FT_UNUSED( face );
- FT_UNUSED( stream );
-
- return FT_Err_Unimplemented_Feature;
- }
-
-
- FT_CALLBACK_DEF( void )
- tt_face_free_hdmx_stub( TT_Face face )
- {
- FT_UNUSED( face );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_face_set_sbit_strike_stub( TT_Face face,
- FT_UInt x_ppem,
- FT_UInt y_ppem,
- FT_ULong* astrike_index )
- {
- /*
- * We simply forge a FT_Size_Request and call the real function
- * that does all the work.
- *
- * This stub might be called by libXfont in the X.Org Xserver,
- * compiled against version 2.1.8 or newer.
- */
-
- FT_Size_RequestRec req;
-
-
- req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
- req.width = (FT_F26Dot6)x_ppem;
- req.height = (FT_F26Dot6)y_ppem;
- req.horiResolution = 0;
- req.vertResolution = 0;
-
- *astrike_index = 0x7FFFFFFFUL;
-
- return tt_face_set_sbit_strike( face, &req, astrike_index );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_face_load_sbit_stub( TT_Face face,
- FT_Stream stream )
- {
- FT_UNUSED( face );
- FT_UNUSED( stream );
-
- /*
- * This function was originally implemented to load the sbit table.
- * However, it has been replaced by `tt_face_load_eblc', and this stub
- * is only there for some rogue clients which would want to call it
- * directly (which doesn't make much sense).
- */
- return FT_Err_Unimplemented_Feature;
- }
-
-
- FT_CALLBACK_DEF( void )
- tt_face_free_sbit_stub( TT_Face face )
- {
- /* nothing to do in this stub */
- FT_UNUSED( face );
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_face_load_charmap_stub( TT_Face face,
- void* cmap,
- FT_Stream input )
- {
- FT_UNUSED( face );
- FT_UNUSED( cmap );
- FT_UNUSED( input );
-
- return FT_Err_Unimplemented_Feature;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_face_free_charmap_stub( TT_Face face,
- void* cmap )
- {
- FT_UNUSED( face );
- FT_UNUSED( cmap );
-
- return 0;
- }
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
- static
- const SFNT_Interface sfnt_interface =
- {
- tt_face_goto_table,
-
- sfnt_init_face,
- sfnt_load_face,
- sfnt_done_face,
- sfnt_get_interface,
-
- tt_face_load_any,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- tt_face_load_sfnt_header_stub,
- tt_face_load_directory_stub,
-#endif
-
- tt_face_load_head,
- tt_face_load_hhea,
- tt_face_load_cmap,
- tt_face_load_maxp,
- tt_face_load_os2,
- tt_face_load_post,
-
- tt_face_load_name,
- tt_face_free_name,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- tt_face_load_hdmx_stub,
- tt_face_free_hdmx_stub,
-#endif
-
- tt_face_load_kern,
- tt_face_load_gasp,
- tt_face_load_pclt,
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- /* see `ttload.h' */
- tt_face_load_bhed,
-#else
- 0,
-#endif
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- tt_face_set_sbit_strike_stub,
- tt_face_load_sbit_stub,
-
- tt_find_sbit_image,
- tt_load_sbit_metrics,
-#endif
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- tt_face_load_sbit_image,
-#else
- 0,
-#endif
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- tt_face_free_sbit_stub,
-#endif
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
- /* see `ttpost.h' */
- tt_face_get_ps_name,
- tt_face_free_ps_names,
-#else
- 0,
- 0,
-#endif
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- tt_face_load_charmap_stub,
- tt_face_free_charmap_stub,
-#endif
-
- /* since version 2.1.8 */
-
- tt_face_get_kerning,
-
- /* since version 2.2 */
-
- tt_face_load_font_dir,
- tt_face_load_hmtx,
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- /* see `ttsbit.h' and `sfnt.h' */
- tt_face_load_eblc,
- tt_face_free_eblc,
-
- tt_face_set_sbit_strike,
- tt_face_load_strike_metrics,
-#else
- 0,
- 0,
- 0,
- 0,
-#endif
-
- tt_face_get_metrics
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class 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, /* module specific interface */
-
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) sfnt_get_interface
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/sfdriver.h b/Build/source/libs/freetype2/src/sfnt/sfdriver.h
deleted file mode 100644
index 92db79694d0..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/sfdriver.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfdriver.h */
-/* */
-/* High-level SFNT driver interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __SFDRIVER_H__
-#define __SFDRIVER_H__
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Module_Class ) sfnt_module_class;
-
-
-FT_END_HEADER
-
-#endif /* __SFDRIVER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/sferrors.h b/Build/source/libs/freetype2/src/sfnt/sferrors.h
deleted file mode 100644
index 27f90de285f..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/sferrors.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* sferrors.h */
-/* */
-/* SFNT error codes (specification only). */
-/* */
-/* Copyright 2001, 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#define FT_ERR_PREFIX SFNT_Err_
-#define FT_ERR_BASE FT_Mod_Err_SFNT
-
-#define FT_KEEP_ERR_PREFIX
-
-#include FT_ERRORS_H
-
-#endif /* __SFERRORS_H__ */
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/sfnt.c b/Build/source/libs/freetype2/src/sfnt/sfnt.c
deleted file mode 100644
index 45a820b718d..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/sfnt.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfnt.c */
-/* */
-/* Single object library component. */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "ttload.c"
-#include "ttmtx.c"
-#include "ttcmap.c"
-#include "ttkern.c"
-#include "sfobjs.c"
-#include "sfdriver.c"
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-#include "ttsbit.c"
-#endif
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-#include "ttpost.c"
-#endif
-
-#ifdef TT_CONFIG_OPTION_BDF
-#include "ttbdf.c"
-#endif
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/sfobjs.c b/Build/source/libs/freetype2/src/sfnt/sfobjs.c
deleted file mode 100644
index c25b87d8dfd..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/sfobjs.c
+++ /dev/null
@@ -1,1116 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfobjs.c */
-/* */
-/* SFNT object management (base). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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_entry_ascii_from_utf16( TT_NameEntry entry,
- FT_Memory memory )
- {
- FT_String* string;
- 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 < 32 || code > 127 )
- code = '?';
-
- string[n] = (char)code;
- }
-
- string[len] = 0;
-
- return string;
- }
-
-
- /* convert an Apple Roman or symbol name entry to ASCII */
- static FT_String*
- tt_name_entry_ascii_from_other( TT_NameEntry entry,
- FT_Memory memory )
- {
- FT_String* string;
- 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 < 32 || code > 127 )
- code = '?';
-
- string[n] = (char)code;
- }
-
- string[len] = 0;
-
- return string;
- }
-
-
- typedef FT_String* (*TT_NameEntry_ConvertFunc)( TT_NameEntry entry,
- FT_Memory memory );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_get_name */
- /* */
- /* <Description> */
- /* Returns 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. */
- /* */
- /* <Return> */
- /* Character string. NULL if no name is present. */
- /* */
- static FT_String*
- tt_face_get_name( TT_Face face,
- FT_UShort nameid )
- {
- FT_Memory memory = face->root.memory;
- FT_String* result = NULL;
- FT_UShort n;
- TT_NameEntryRec* 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_NameEntry_ConvertFunc convert;
-
-
- 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_entry_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_entry_ascii_from_utf16;
- break;
-
- default:
- ;
- }
- }
- else if ( found_apple >= 0 )
- {
- rec = face->name_table.names + found_apple;
- convert = tt_name_entry_ascii_from_other;
- }
- else if ( found_unicode >= 0 )
- {
- rec = face->name_table.names + found_unicode;
- convert = tt_name_entry_ascii_from_utf16;
- }
-
- if ( rec && convert )
- {
- if ( rec->string == NULL )
- {
- FT_Error error = SFNT_Err_Ok;
- FT_Stream stream = face->name_table.stream;
-
- FT_UNUSED( error );
-
-
- 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:
- return result;
- }
-
-
- 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_GB2312, FT_ENCODING_GB2312 },
- { 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;
- }
-
-
- /* 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 ),
- FT_FRAME_END
- };
-
-
- face->ttc_header.tag = 0;
- face->ttc_header.version = 0;
- face->ttc_header.count = 0;
-
- offset = FT_STREAM_POS();
-
- if ( FT_READ_ULONG( tag ) )
- return error;
-
- if ( tag != 0x00010000UL &&
- tag != TTAG_ttcf &&
- tag != FT_MAKE_TAG( 'O', 'T', 'T', 'O' ) &&
- tag != TTAG_true &&
- tag != 0x00020000UL )
- return SFNT_Err_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;
-
- /* 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_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FT_Error error;
- FT_Library library = face->root.driver->root.library;
- SFNT_Service sfnt;
-
-
- /* 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 )
- return SFNT_Err_Invalid_File_Format;
-
- face->sfnt = sfnt;
- face->goto_table = sfnt->goto_table;
- }
-
- FT_FACE_FIND_GLOBAL_SERVICE( face, face->psnames, POSTSCRIPT_CMAPS );
-
- error = sfnt_open_font( stream, face );
- if ( error )
- return error;
-
- FT_TRACE2(( "sfnt_init_face: %08p, %ld\n", face, face_index ));
-
- if ( face_index < 0 )
- face_index = 0;
-
- if ( face_index >= face->ttc_header.count )
- return SFNT_Err_Bad_Argument;
-
- if ( FT_STREAM_SEEK( face->ttc_header.offsets[face_index] ) )
- return error;
-
- /* check that we have a valid TrueType file */
- error = sfnt->load_font_dir( face, stream );
- if ( error )
- return error;
-
- face->root.num_faces = face->ttc_header.count;
-
- return error;
- }
-
-
-#define LOAD_( x ) \
- do { \
- FT_TRACE2(( "`" #x "' " )); \
- FT_TRACE3(( "-->\n" )); \
- \
- error = sfnt->load_##x( face, stream ); \
- \
- FT_TRACE2(( "%s\n", ( !error ) \
- ? "loaded" \
- : ( error == SFNT_Err_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" \
- : ( error == SFNT_Err_Table_Missing ) \
- ? "missing" \
- : "failed to load" )); \
- FT_TRACE3(( "\n" )); \
- } while ( 0 )
-
-
- FT_LOCAL_DEF( FT_Error )
- sfnt_load_face( FT_Stream stream,
- TT_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FT_Error error, psnames_error;
- FT_Bool has_outline;
- FT_Bool is_apple_sbit;
-
- SFNT_Service sfnt = (SFNT_Service)face->sfnt;
-
- FT_UNUSED( face_index );
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- /* 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 != 0 ||
- tt_face_lookup_table( face, TTAG_glyf ) != 0 ||
- tt_face_lookup_table( face, TTAG_CFF ) != 0 );
-#else
- has_outline = FT_BOOL( tt_face_lookup_table( face, TTAG_glyf ) != 0 ||
- tt_face_lookup_table( face, TTAG_CFF ) != 0 );
-#endif
-
- is_apple_sbit = 0;
-
- /* 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 )
- {
- LOAD_( head );
- if ( error )
- goto Exit;
- }
-
- if ( face->header.Units_Per_EM == 0 )
- {
- error = SFNT_Err_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 );
- psnames_error = error;
-
- /* 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 ( error == SFNT_Err_Table_Missing )
- {
- error = SFNT_Err_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 = SFNT_Err_Ok;
- }
-#endif
- }
- }
- else if ( error == SFNT_Err_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 = SFNT_Err_Ok;
- }
- else
- {
- error = SFNT_Err_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 = SFNT_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 && error != SFNT_Err_Table_Missing )
- goto Exit;
-
- LOAD_( os2 );
- if ( error )
- {
- if ( error != SFNT_Err_Table_Missing )
- goto Exit;
-
- face->os2.version = 0xFFFFU;
- }
-
- }
-
- /* the optional tables */
-
- /* embedded bitmap support. */
- if ( sfnt->load_eblc )
- {
- LOAD_( eblc );
- if ( error )
- {
- /* return an error if this font file has no outlines */
- if ( error == SFNT_Err_Table_Missing && has_outline )
- error = SFNT_Err_Ok;
- else
- goto Exit;
- }
- }
-
- LOAD_( pclt );
- if ( error )
- {
- if ( error != SFNT_Err_Table_Missing )
- goto Exit;
-
- face->pclt.Version = 0;
- }
-
- /* consider the kerning and gasp tables as optional */
- LOAD_( gasp );
- LOAD_( kern );
-
- error = SFNT_Err_Ok;
-
- face->root.num_glyphs = face->max_profile.numGlyphs;
-
-#if 0
- /* 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 will be introduced in version */
- /* 1.5 of the OpenType specification (but is already in use). */
-
- if ( face->os2.version != 0xFFFFU && face->os2.fsSelection & 256 )
-#endif
- {
- face->root.family_name =
- tt_face_get_name( face, TT_NAME_ID_PREFERRED_FAMILY );
- if ( !face->root.family_name )
- face->root.family_name =
- tt_face_get_name( face, TT_NAME_ID_FONT_FAMILY );
-
- face->root.style_name =
- tt_face_get_name( face, TT_NAME_ID_PREFERRED_SUBFAMILY );
- if ( !face->root.style_name )
- face->root.style_name =
- tt_face_get_name( face, TT_NAME_ID_FONT_SUBFAMILY );
- }
-#if 0
- else
- {
- /* Support for `name' table ID 21 (WWS family) and 22 (WWS */
- /* subfamily) is still under consideration by Microsoft and */
- /* not implemented in the current version of WPF. */
-
- face->root.family_name =
- tt_face_get_name( face, TT_NAME_ID_WWS_FAMILY );
- if ( !face->root.family_name )
- face->root.family_name =
- tt_face_get_name( face, TT_NAME_ID_PREFERRED_FAMILY );
- if ( !face->root.family_name )
- face->root.family_name =
- tt_face_get_name( face, TT_NAME_ID_FONT_FAMILY );
-
- face->root.style_name =
- tt_face_get_name( face, TT_NAME_ID_WWS_SUBFAMILY );
- if ( !face->root.style_name )
- face->root.style_name =
- tt_face_get_name( face, TT_NAME_ID_PREFERRED_SUBFAMILY );
- if ( !face->root.style_name )
- face->root.style_name =
- tt_face_get_name( face, TT_NAME_ID_FONT_SUBFAMILY );
- }
-#endif
-
-
- /* now set up root fields */
- {
- FT_Face root = &face->root;
- FT_Int32 flags = root->face_flags;
-
-
- /*********************************************************************/
- /* */
- /* Compute face flags. */
- /* */
- 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 == SFNT_Err_Ok &&
- 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 ( tt_face_lookup_table( face, TTAG_glyf ) != 0 &&
- tt_face_lookup_table( face, TTAG_fvar ) != 0 &&
- tt_face_lookup_table( face, TTAG_gvar ) != 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 will be */
- /* introduced in version 1.5 of the OpenType specification (but */
- /* is already in use). */
-
- 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 );
-
-#if 0
- if ( root->charmap == NULL &&
- charmap->encoding == FT_ENCODING_UNICODE )
- {
- /* set 'root->charmap' to the first Unicode encoding we find */
- root->charmap = charmap;
- }
-#endif
- }
- }
-
-
- /*********************************************************************/
- /* */
- /* Set up metrics. */
- /* */
- if ( has_outline == TRUE )
- {
- /* 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/descender/height are computed from the OS/2 table */
- /* when found. Otherwise, they're taken from the horizontal */
- /* header. */
- /* */
-
- root->ascender = face->horizontal.Ascender;
- root->descender = face->horizontal.Descender;
-
- root->height = (FT_Short)( root->ascender - root->descender +
- face->horizontal.Line_Gap );
-
-#if 0
- /* if the line_gap is 0, we add an extra 15% to the text height -- */
- /* this computation is based on various versions of Times New Roman */
- if ( face->horizontal.Line_Gap == 0 )
- root->height = (FT_Short)( ( root->height * 115 + 50 ) / 100 );
-#endif
-
-#if 0
-
- /* some fonts have the OS/2 "sTypoAscender", "sTypoDescender" & */
- /* "sTypoLineGap" fields set to 0, like ARIALNB.TTF */
- if ( face->os2.version != 0xFFFFU && root->ascender )
- {
- FT_Int height;
-
-
- root->ascender = face->os2.sTypoAscender;
- root->descender = -face->os2.sTypoDescender;
-
- height = root->ascender + root->descender + face->os2.sTypoLineGap;
- if ( height > root->height )
- root->height = height;
- }
-
-#endif /* 0 */
-
- root->max_advance_width = face->horizontal.advance_Width_Max;
-
- root->max_advance_height = (FT_Short)( face->vertical_info
- ? face->vertical.advance_Height_Max
- : root->height );
-
- root->underline_position = face->postscript.underlinePosition;
- root->underline_thickness = face->postscript.underlineThickness;
- }
-
-#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 i, count;
-
-
-#if !defined FT_CONFIG_OPTION_OLD_INTERNALS
- count = face->sbit_num_strikes;
-#else
- count = (FT_UInt)face->num_sbit_strikes;
-#endif
-
- 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;
-
-
- if ( em_size == 0 || face->os2.version == 0xFFFFU )
- {
- avgwidth = 0;
- em_size = 1;
- }
-
- if ( FT_NEW_ARRAY( root->available_sizes, count ) )
- goto Exit;
-
- for ( i = 0; i < count; i++ )
- {
- FT_Bitmap_Size* bsize = root->available_sizes + i;
-
-
- error = sfnt->load_strike_metrics( face, i, &metrics );
- if ( error )
- goto Exit;
-
- 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;
- }
-
- root->face_flags |= FT_FACE_FLAG_FIXED_SIZES;
- root->num_fixed_sizes = (FT_Int)count;
- }
- }
-
-#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-
- }
-
- Exit:
- FT_TRACE2(( "sfnt_load_face: done\n" ));
-
- return error;
- }
-
-
-#undef LOAD_
-#undef LOADM_
-
-
- FT_LOCAL_DEF( void )
- sfnt_done_face( TT_Face face )
- {
- FT_Memory memory = face->root.memory;
- SFNT_Service 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;
- }
-
- /* freeing the horizontal metrics */
-#if !defined FT_CONFIG_OPTION_OLD_INTERNALS
- {
- FT_Stream stream = FT_FACE_STREAM( face );
-
-
- FT_FRAME_RELEASE( face->horz_metrics );
- FT_FRAME_RELEASE( face->vert_metrics );
- face->horz_metrics_size = 0;
- face->vert_metrics_size = 0;
- }
-#else
- FT_FREE( face->horizontal.long_metrics );
- FT_FREE( face->horizontal.short_metrics );
-#endif
-
- /* freeing the vertical ones, 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 );
- face->root.num_fixed_sizes = 0;
-
- FT_FREE( face->postscript_name );
-
- face->sfnt = 0;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/sfobjs.h b/Build/source/libs/freetype2/src/sfnt/sfobjs.h
deleted file mode 100644
index 6241c93b392..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/sfobjs.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfobjs.h */
-/* */
-/* SFNT object management (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#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_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( FT_Error )
- sfnt_load_face( FT_Stream stream,
- TT_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- sfnt_done_face( TT_Face face );
-
-
-FT_END_HEADER
-
-#endif /* __SFDRIVER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/ttbdf.c b/Build/source/libs/freetype2/src/sfnt/ttbdf.c
deleted file mode 100644
index 6c95387adb8..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttbdf.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttbdf.c */
-/* */
-/* TrueType and OpenType embedded BDF properties (body). */
-/* */
-/* Copyright 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 != NULL )
- 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_Err_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_UInt32 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_Err_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 = 0;
- FT_Byte* p;
- FT_UInt count;
- FT_Byte* strike;
- FT_UInt 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 == NULL || property_name == NULL )
- 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 = 0;
- goto Exit;
- }
- break;
-
- case 0x02:
- aprop->type = BDF_PROPERTY_TYPE_INTEGER;
- aprop->u.integer = (FT_Int32)value;
- error = 0;
- goto Exit;
-
- case 0x03:
- aprop->type = BDF_PROPERTY_TYPE_CARDINAL;
- aprop->u.cardinal = value;
- error = 0;
- goto Exit;
-
- default:
- ;
- }
- }
- }
- p += 10;
- }
-
- Exit:
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_BDF */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/ttbdf.h b/Build/source/libs/freetype2/src/sfnt/ttbdf.h
deleted file mode 100644
index 48a10d6e9b3..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttbdf.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttbdf.h */
-/* */
-/* TrueType and OpenType embedded BDF properties (specification). */
-/* */
-/* Copyright 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/sfnt/ttcmap.c b/Build/source/libs/freetype2/src/sfnt/ttcmap.c
deleted file mode 100644
index b70b64c1f74..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttcmap.c
+++ /dev/null
@@ -1,3123 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttcmap.c */
-/* */
-/* TrueType character mapping table (cmap) support (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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"
-
-
- /*************************************************************************/
- /* */
- /* 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
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap_init( TT_CMap cmap,
- FT_Byte* table )
- {
- cmap->data = table;
- return SFNT_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 = table + 2;
- FT_UInt 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 SFNT_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_UInt )
- 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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap0_class_rec =
- {
- {
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap0_char_index,
- (FT_CMap_CharNextFunc) tt_cmap0_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- },
- 0,
- (TT_CMap_ValidateFunc) tt_cmap0_validate,
- (TT_CMap_Info_GetFunc) tt_cmap0_get_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" correspond to 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 exactly: *****/
- /***** *****/
- /***** (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 check 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's 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 = table + 2; /* skip format */
- FT_UInt length = TT_PEEK_USHORT( p );
- FT_UInt n, max_subs;
- FT_Byte* keys; /* keys table */
- FT_Byte* subs; /* sub-headers */
- FT_Byte* glyph_ids; /* glyph id array */
-
-
- 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;
- FT_Byte* ids;
-
-
- first_code = TT_NEXT_USHORT( p );
- code_count = TT_NEXT_USHORT( p );
- delta = TT_NEXT_SHORT( p );
- offset = TT_NEXT_USHORT( p );
-
- /* 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 )
- {
- 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 = ( idx + delta ) & 0xFFFFU;
- if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
- }
- }
- }
- }
-
- return SFNT_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's 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)( idx + delta ) & 0xFFFFU;
- }
- }
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- 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 = ( 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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap2_class_rec =
- {
- {
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap2_char_index,
- (FT_CMap_CharNextFunc) tt_cmap2_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- },
- 2,
- (TT_CMap_ValidateFunc) tt_cmap2_validate,
- (TT_CMap_Info_GetFunc) tt_cmap2_get_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 be overlapping and the last segment should always contain the */
- /* `0xFFFF' 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 certain fonts contain invalid charmaps that */
- /* contain end=0xFFFF, start=0xFFFF, delta=0x0001, offset=0xFFFF at the */
- /* of their charmaps (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 = 0xFFFFFFFFUL;
- cmap->cur_gindex = 0;
-
- return SFNT_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 );
-
- 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 )
- {
- FT_UInt charcode;
-
-
- if ( cmap->cur_charcode >= 0xFFFFUL )
- goto Fail;
-
- charcode = 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 );
-
-
- do
- {
- FT_UInt gindex = FT_NEXT_USHORT( p );
-
-
- if ( gindex != 0 )
- {
- gindex = (FT_UInt)( ( gindex + delta ) & 0xFFFFU );
- if ( gindex != 0 )
- {
- cmap->cur_charcode = charcode;
- cmap->cur_gindex = gindex;
- return;
- }
- }
- } while ( ++charcode <= end );
- }
- else
- {
- do
- {
- FT_UInt gindex = (FT_UInt)( ( charcode + delta ) & 0xFFFFU );
-
-
- if ( gindex != 0 )
- {
- cmap->cur_charcode = charcode;
- cmap->cur_gindex = gindex;
- return;
- }
- } while ( ++charcode <= end );
- }
- }
-
- /* 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 = 0xFFFFFFFFUL;
- cmap->cur_gindex = 0;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap4_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p = table + 2; /* skip format */
- FT_UInt length = TT_NEXT_USHORT( p );
- FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids;
- FT_UInt num_segs;
- FT_Error error = SFNT_Err_Ok;
-
-
- if ( length < 16 )
- FT_INVALID_TOO_SHORT;
-
- /* 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 );
- }
-
- 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 must be FFFF */
- 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 present 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;
- }
- else
- {
- 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)( 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 && delta == 0x1U ) )
- FT_INVALID_DATA;
- }
-
- last_start = start;
- last_end = end;
- }
- }
-
- return error;
- }
-
-
- static FT_UInt
- tt_cmap4_char_map_linear( TT_CMap cmap,
- FT_UInt* pcharcode,
- FT_Bool next )
- {
- 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;
-
-
- 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++;
-
- /* linear search */
- for ( ; charcode <= 0xFFFFU; charcode++ )
- {
- FT_Byte* q;
-
-
- 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 && charcode <= end )
- {
- p = q - 2 + num_segs2;
- delta = TT_PEEK_SHORT( p );
- p += num_segs2;
- offset = TT_PEEK_USHORT( p );
-
- if ( offset == 0xFFFFU )
- continue;
-
- if ( offset )
- {
- p += offset + ( charcode - start ) * 2;
- gindex = TT_PEEK_USHORT( p );
- if ( gindex != 0 )
- gindex = (FT_UInt)( gindex + delta ) & 0xFFFFU;
- }
- else
- gindex = (FT_UInt)( charcode + delta ) & 0xFFFFU;
-
- break;
- }
- }
-
- if ( !next || gindex )
- break;
- }
-
- if ( next && gindex )
- *pcharcode = charcode;
-
- return gindex;
- }
-
-
- static FT_UInt
- tt_cmap4_char_map_binary( TT_CMap cmap,
- FT_UInt* pcharcode,
- FT_Bool next )
- {
- FT_UInt num_segs2, start, end, offset;
- FT_Int delta;
- FT_UInt max, min, mid, num_segs;
- FT_UInt charcode = *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 );
-
- /* 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;
- gindex = TT_PEEK_USHORT( p );
- if ( gindex != 0 )
- gindex = (FT_UInt)( gindex + delta ) & 0xFFFFU;
- }
- else
- gindex = (FT_UInt)( charcode + delta ) & 0xFFFFU;
-
- 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_UInt )
- 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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap4_class_rec =
- {
- {
- sizeof ( TT_CMap4Rec ),
- (FT_CMap_InitFunc) tt_cmap4_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap4_char_index,
- (FT_CMap_CharNextFunc) tt_cmap4_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- },
- 4,
- (TT_CMap_ValidateFunc) tt_cmap4_validate,
- (TT_CMap_Info_GetFunc) tt_cmap4_get_info
- };
-
-#endif /* TT_CONFIG_CMAP_FORMAT_4 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 6 *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* 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 */
- /* */
- /* 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 SFNT_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_UInt )
- 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 )
- goto Exit;
-
- 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;
- }
- char_code++;
- }
-
- Exit:
- *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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap6_class_rec =
- {
- {
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap6_char_index,
- (FT_CMap_CharNextFunc) tt_cmap6_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- },
- 6,
- (TT_CMap_ValidateFunc) tt_cmap6_validate,
- (TT_CMap_Info_GetFunc) tt_cmap6_get_info
- };
-
-#endif /* TT_CONFIG_CMAP_FORMAT_6 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FORMAT 8 *****/
- /***** *****/
- /***** It's 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 ( table + length > valid->limit || length < 8208 )
- FT_INVALID_TOO_SHORT;
-
- is32 = table + 12;
- p = is32 + 8192; /* skip `is32' array */
- num_groups = TT_NEXT_ULONG( p );
-
- if ( p + num_groups * 12 > valid->limit )
- 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 )
- {
- if ( start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) )
- 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 SFNT_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 )
- {
- result = (FT_UInt)( start_id + char_code - start );
- break;
- }
- }
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap8_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_UInt32 result = 0;
- FT_UInt32 char_code = *pchar_code + 1;
- 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;
-
-
- 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;
-
- if ( char_code <= end )
- {
- gindex = (FT_UInt)( char_code - start + start_id );
- if ( gindex != 0 )
- {
- result = char_code;
- goto Exit;
- }
- }
- }
-
- Exit:
- *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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap8_class_rec =
- {
- {
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap8_char_index,
- (FT_CMap_CharNextFunc) tt_cmap8_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- },
- 8,
- (TT_CMap_ValidateFunc) tt_cmap8_validate,
- (TT_CMap_Info_GetFunc) tt_cmap8_get_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 ( table + length > valid->limit || length < 20 + 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 SFNT_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 = (FT_ULong)( char_code - start );
-
-
- if ( idx < count )
- {
- p += 2 * idx;
- result = TT_PEEK_USHORT( p );
- }
- return result;
- }
-
-
- FT_CALLBACK_DEF( FT_UInt )
- tt_cmap10_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- FT_Byte* table = cmap->data;
- FT_UInt32 char_code = *pchar_code + 1;
- 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 ( char_code < start )
- char_code = start;
-
- idx = (FT_UInt32)( char_code - start );
- p += 2 * idx;
-
- for ( ; idx < count; idx++ )
- {
- gindex = TT_NEXT_USHORT( p );
- if ( gindex != 0 )
- break;
- 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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap10_class_rec =
- {
- {
- sizeof ( TT_CMapRec ),
-
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap10_char_index,
- (FT_CMap_CharNextFunc) tt_cmap10_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- },
- 10,
- (TT_CMap_ValidateFunc) tt_cmap10_validate,
- (TT_CMap_Info_GetFunc) tt_cmap10_get_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 SFNT_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 ( table + length > valid->limit || 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 )
- {
- if ( start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) )
- FT_INVALID_GLYPH_ID;
- }
-
- last = end;
- }
- }
-
- return SFNT_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_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;
-
- n = cmap->cur_group;
-
- 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;
-
- for ( ; char_code <= end; char_code++ )
- {
- gindex = (FT_UInt)( start_id + char_code - start );
-
- if ( gindex )
- {
- 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 )
- 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 );
- gindex = (FT_UInt)( start_id + char_code - start );
-
- break;
- }
- }
-
- if ( next )
- {
- 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 )
- {
- tt_cmap12_next( cmap12 );
-
- if ( cmap12->valid )
- gindex = cmap12->cur_gindex;
- }
- else
- cmap12->cur_gindex = gindex;
-
- if ( 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_UInt )
- tt_cmap12_char_next( TT_CMap cmap,
- FT_UInt32 *pchar_code )
- {
- TT_CMap12 cmap12 = (TT_CMap12)cmap;
- FT_ULong gindex;
-
-
- if ( cmap12->cur_charcode >= 0xFFFFFFFFUL )
- return 0;
-
- /* no need to search */
- if ( cmap12->valid && cmap12->cur_charcode == *pchar_code )
- {
- tt_cmap12_next( cmap12 );
- if ( cmap12->valid )
- {
- gindex = cmap12->cur_gindex;
- if ( gindex )
- *pchar_code = 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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap12_class_rec =
- {
- {
- sizeof ( TT_CMap12Rec ),
-
- (FT_CMap_InitFunc) tt_cmap12_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap12_char_index,
- (FT_CMap_CharNextFunc) tt_cmap12_char_next,
-
- NULL, NULL, NULL, NULL, NULL
- },
- 12,
- (TT_CMap_ValidateFunc) tt_cmap12_validate,
- (TT_CMap_Info_GetFunc) tt_cmap12_get_info
- };
-
-#endif /* TT_CONFIG_CMAP_FORMAT_12 */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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_UInt 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 != NULL && cmap->results != NULL )
- FT_FREE( cmap->results );
- }
-
-
- static FT_Error
- tt_cmap14_ensure( TT_CMap14 cmap,
- FT_UInt num_results,
- FT_Memory memory )
- {
- FT_UInt old_max = cmap->max_results;
- FT_Error error = 0;
-
-
- 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 SFNT_Err_Ok;
- }
-
-
- FT_CALLBACK_DEF( FT_Error )
- tt_cmap14_validate( FT_Byte* table,
- FT_Validator valid )
- {
- FT_Byte* p = table + 2;
- FT_ULong length = TT_NEXT_ULONG( p );
- FT_ULong num_selectors = TT_NEXT_ULONG( p );
-
-
- if ( table + length > valid->limit || 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 = TT_NEXT_ULONG( defp );
- FT_ULong i;
- FT_ULong lastBase = 0;
-
-
- if ( defp + numRanges * 4 > valid->limit )
- 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 = TT_NEXT_ULONG( ndp );
- FT_ULong i, lastUni = 0;
-
-
- if ( ndp + numMappings * 4 > valid->limit )
- 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 SFNT_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_UInt )
- 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 SFNT_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 = 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_ULong charcode,
- FT_ULong 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_ULong charcode,
- FT_ULong 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_UInt count = cmap14->num_selectors;
- FT_Byte* p = cmap->data + 10;
- FT_UInt32* result;
- FT_UInt i;
-
-
- if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) )
- return NULL;
-
- result = cmap14->results;
- for ( i = 0; i < count; ++i )
- {
- result[i] = 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_ULong charCode )
- {
- TT_CMap14 cmap14 = (TT_CMap14) cmap;
- FT_UInt 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 = 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 = TT_NEXT_ULONG( p );
-
- if ( tt_cmap14_ensure( cmap14, ( cnt + 1 ), memory ) )
- return NULL;
-
- for ( q = cmap14->results; numRanges > 0; --numRanges )
- {
- FT_UInt uni = 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_UInt*
- 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 = 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] = 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_ULong variantSelector )
- {
- FT_Byte *p = tt_cmap14_find_variant( cmap->data + 6,
- variantSelector );
- FT_UInt32 *ret;
- 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;
-
-
- p = cmap->data + nondefOff;
- dp = cmap->data + defOff;
-
- numMappings = TT_NEXT_ULONG( p );
- dcnt = tt_cmap14_def_char_count( dp );
- numRanges = 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 = TT_NEXT_UINT24( dp );
- dcnt = FT_NEXT_BYTE( dp );
- di = 1;
- nuni = 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 = 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 = 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++] = 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 = 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_CALLBACK_TABLE_DEF
- const TT_CMap_ClassRec tt_cmap14_class_rec =
- {
- {
- sizeof ( TT_CMap14Rec ),
-
- (FT_CMap_InitFunc) tt_cmap14_init,
- (FT_CMap_DoneFunc) tt_cmap14_done,
- (FT_CMap_CharIndexFunc)tt_cmap14_char_index,
- (FT_CMap_CharNextFunc) tt_cmap14_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,
- (TT_CMap_Info_GetFunc)tt_cmap14_get_info
- };
-
-#endif /* TT_CONFIG_CMAP_FORMAT_0 */
-
-
- static const TT_CMap_Class tt_cmap_classes[] =
- {
-#ifdef TT_CONFIG_CMAP_FORMAT_0
- &tt_cmap0_class_rec,
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_2
- &tt_cmap2_class_rec,
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_4
- &tt_cmap4_class_rec,
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_6
- &tt_cmap6_class_rec,
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_8
- &tt_cmap8_class_rec,
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_10
- &tt_cmap10_class_rec,
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_12
- &tt_cmap12_class_rec,
-#endif
-
-#ifdef TT_CONFIG_CMAP_FORMAT_14
- &tt_cmap14_class_rec,
-#endif
-
- NULL,
- };
-
-
- /* 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;
-
-
- if ( p + 4 > limit )
- return SFNT_Err_Invalid_Table;
-
- /* only recognize format 0 */
- if ( TT_NEXT_USHORT( p ) != 0 )
- {
- p -= 2;
- FT_ERROR(( "tt_face_build_cmaps: unsupported `cmap' table format = %d\n",
- TT_PEEK_USHORT( p ) ));
- return SFNT_Err_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;
- TT_CMap_Class volatile clazz;
-
-
- for ( ; *pclazz; pclazz++ )
- {
- clazz = *pclazz;
- if ( clazz->format == format )
- {
- volatile TT_ValidatorRec valid;
- volatile FT_Error error = SFNT_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_jmp_buf*)&FT_VALIDATOR( &valid )->jump_buffer) ) == 0 )
- {
- /* validate this cmap sub-table */
- error = clazz->validate( cmap, FT_VALIDATOR( &valid ) );
- }
-
- if ( valid.validator.error == 0 )
- {
- 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_ERROR(( "tt_face_build_cmaps:" ));
- FT_ERROR(( " broken cmap sub-table ignored!\n" ));
- }
- break;
- }
- }
-
- if ( *pclazz == NULL )
- {
- FT_ERROR(( "tt_face_build_cmaps:" ));
- FT_ERROR(( " unsupported cmap sub-table ignored!\n" ));
- }
- }
- }
-
- return SFNT_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/Build/source/libs/freetype2/src/sfnt/ttcmap.h b/Build/source/libs/freetype2/src/sfnt/ttcmap.h
deleted file mode 100644
index a10a3e2502c..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttcmap.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttcmap.h */
-/* */
-/* TrueType character mapping table (cmap) support (specification). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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;
-
-
- 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/Build/source/libs/freetype2/src/sfnt/ttkern.c b/Build/source/libs/freetype2/src/sfnt/ttkern.c
deleted file mode 100644
index 28e52c333e8..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttkern.c
+++ /dev/null
@@ -1,292 +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-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "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_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(( "kerning table is too small - ignored\n" ));
- error = SFNT_Err_Table_Missing;
- goto Exit;
- }
-
- if ( FT_FRAME_EXTRACT( table_size, face->kern_table ) )
- {
- FT_ERROR(( "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 = 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 )
- break;
-
- p_next += length;
-
- /* only use horizontal kerning tables */
- if ( ( coverage & ~8 ) != 0x0001 ||
- p + 8 > p_limit )
- goto NextTable;
-
- num_pairs = FT_NEXT_USHORT( p );
- p += 6;
-
- if ( p + 6 * num_pairs > p_limit )
- goto NextTable;
-
- avail |= mask;
-
- /*
- * Now check whether the pairs in this table are ordered.
- * We then can use binary search.
- */
- if ( num_pairs > 0 )
- {
- FT_UInt count;
- FT_UInt 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 = 1;
- FT_Byte* p = face->kern_table;
-
-
- p += 4;
- mask = 0x0001;
-
- for ( count = face->num_kern_tables; count > 0; count--, mask <<= 1 )
- {
- FT_Byte* base = p;
- FT_Byte* next = base;
- FT_UInt version = FT_NEXT_USHORT( p );
- FT_UInt length = FT_NEXT_USHORT( p );
- FT_UInt coverage = FT_NEXT_USHORT( p );
- FT_Int value = 0;
-
- FT_UNUSED( version );
-
-
- next = base + length;
-
- if ( ( face->kern_avail_bits & mask ) == 0 )
- goto NextTable;
-
- if ( p + 8 > next )
- goto NextTable;
-
- switch ( coverage >> 8 )
- {
- case 0:
- {
- FT_UInt num_pairs = FT_NEXT_USHORT( p );
- FT_ULong key0 = TT_KERN_INDEX( left_glyph, right_glyph );
-
-
- p += 6;
-
- 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/Build/source/libs/freetype2/src/sfnt/ttkern.h b/Build/source/libs/freetype2/src/sfnt/ttkern.h
deleted file mode 100644
index df1da9b273e..00000000000
--- a/Build/source/libs/freetype2/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-2001, 2002, 2005, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/sfnt/ttload.c b/Build/source/libs/freetype2/src/sfnt/ttload.c
deleted file mode 100644
index 6b7c3426285..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttload.c
+++ /dev/null
@@ -1,1185 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttload.c */
-/* */
-/* Load the basic TrueType tables, i.e., tables that can be either in */
-/* TTF or OTF fonts (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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;
-
-
- 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 0-length */
- /* tables the same as missing tables. */
- if ( entry->Tag == tag && entry->Length != 0 )
- {
- FT_TRACE4(( "found table.\n" ));
- return entry;
- }
- }
-
- FT_TRACE4(( "could not find table!\n" ));
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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 = SFNT_Err_Table_Missing;
-
- Exit:
- return error;
- }
-
-
- /* Here, we */
- /* */
- /* - check that `num_tables' is valid */
- /* - look for a `head' table, check its size, and parse it to check */
- /* whether its `magic' field is correctly set */
- /* */
- /* When checking directory entries, ignore the tables `glyx' and `locx' */
- /* which are hacked-out versions of `glyf' and `loca' in some PostScript */
- /* Type 42 fonts, and which are generally invalid. */
- /* */
- static FT_Error
- check_table_dir( SFNT_Header sfnt,
- FT_Stream stream )
- {
- FT_Error error;
- FT_UInt nn;
- FT_UInt has_head = 0, has_sing = 0, has_meta = 0;
- FT_ULong offset = sfnt->offset + 12;
-
- const FT_ULong glyx_tag = FT_MAKE_TAG( 'g', 'l', 'y', 'x' );
- const FT_ULong locx_tag = FT_MAKE_TAG( 'l', 'o', 'c', 'x' );
-
- 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 ( sfnt->num_tables == 0 ||
- offset + sfnt->num_tables * 16 > stream->size )
- return SFNT_Err_Unknown_File_Format;
-
- if ( FT_STREAM_SEEK( offset ) )
- return error;
-
- for ( nn = 0; nn < sfnt->num_tables; nn++ )
- {
- TT_TableRec table;
-
-
- if ( FT_STREAM_READ_FIELDS( table_dir_entry_fields, &table ) )
- return error;
-
- if ( table.Offset + table.Length > stream->size &&
- table.Tag != glyx_tag &&
- table.Tag != locx_tag )
- return SFNT_Err_Unknown_File_Format;
-
- 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 )
- return SFNT_Err_Unknown_File_Format;
-
- if ( FT_STREAM_SEEK( table.Offset + 12 ) ||
- FT_READ_ULONG( magic ) )
- return error;
-
- if ( magic != 0x5F0F3CF5UL )
- return SFNT_Err_Unknown_File_Format;
-
- if ( FT_STREAM_SEEK( offset + ( nn + 1 ) * 16 ) )
- return error;
- }
- else if ( table.Tag == TTAG_SING )
- has_sing = 1;
- else if ( table.Tag == TTAG_META )
- has_meta = 1;
- }
-
- /* if `sing' and `meta' tables are present, there is no `head' table */
- if ( has_head || ( has_sing && has_meta ) )
- return SFNT_Err_Ok;
- else
- return SFNT_Err_Unknown_File_Format;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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;
- TT_TableRec* entry;
- TT_TableRec* limit;
-
- 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 ) )
- return error;
-
- /* 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 SFNT_Err_Unknown_File_Format;
-#endif
-
- /* load the table directory */
-
- FT_TRACE2(( "-- Tables count: %12u\n", sfnt.num_tables ));
- FT_TRACE2(( "-- Format version: %08lx\n", sfnt.format_tag ));
-
- /* check first */
- error = check_table_dir( &sfnt, stream );
- if ( error )
- {
- FT_TRACE2(( "tt_face_load_font_dir: invalid table directory!\n" ));
-
- return error;
- }
-
- face->num_tables = sfnt.num_tables;
- face->format_tag = sfnt.format_tag;
-
- if ( FT_QNEW_ARRAY( face->dir_tables, face->num_tables ) )
- return error;
-
- if ( FT_STREAM_SEEK( sfnt.offset + 12 ) ||
- FT_FRAME_ENTER( face->num_tables * 16L ) )
- return error;
-
- entry = face->dir_tables;
- limit = entry + face->num_tables;
-
- for ( ; entry < limit; entry++ )
- {
- entry->Tag = FT_GET_TAG4();
- entry->CheckSum = FT_GET_ULONG();
- entry->Offset = FT_GET_LONG();
- entry->Length = FT_GET_LONG();
-
- FT_TRACE2(( " %c%c%c%c - %08lx - %08lx\n",
- (FT_Char)( entry->Tag >> 24 ),
- (FT_Char)( entry->Tag >> 16 ),
- (FT_Char)( entry->Tag >> 8 ),
- (FT_Char)( entry->Tag ),
- entry->Offset,
- entry->Length ));
- }
-
- FT_FRAME_EXIT();
-
- FT_TRACE2(( "table directory loaded\n\n" ));
-
- 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 = SFNT_Err_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 SFNT_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_max_profile */
- /* */
- /* <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;
-
- 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
- };
-
- 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 field is null. */
-
- if ( maxProfile->maxFunctionDefs == 0 )
- maxProfile->maxFunctionDefs = 64;
-
- /* we add 4 phantom points later */
- if ( maxProfile->maxTwilightPoints > ( 0xFFFFU - 4 ) )
- {
- FT_ERROR(( "Too much twilight points in `maxp' table;\n" ));
- FT_ERROR(( " 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_names */
- /* */
- /* <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;
- FT_UInt count;
- 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_NameEntryRec
-
- /* 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
- };
-
-
- 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*num_names"). 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(( "invalid `name' table\n" ));
- error = SFNT_Err_Name_Table_Missing;
- goto Exit;
- }
-
- /* Allocate the array of name records. */
- count = table->numNameRecords;
- table->numNameRecords = 0;
-
- if ( FT_NEW_ARRAY( table->names, count ) ||
- FT_FRAME_ENTER( count * 12 ) )
- goto Exit;
-
- /* Load the name records and determine how much storage is needed */
- /* to hold the strings themselves. */
- {
- TT_NameEntryRec* entry = table->names;
-
-
- 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 */
- entry->stringOffset = 0;
- entry->stringLength = 0;
- continue;
- }
-
- entry++;
- }
-
- table->numNameRecords = (FT_UInt)( entry - table->names );
- }
-
- FT_FRAME_EXIT();
-
- /* everything went well, update face->num_names */
- face->num_names = (FT_UShort) table->numNameRecords;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_free_names */
- /* */
- /* <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;
- TT_NameEntry entry = table->names;
- FT_UInt count = table->numNameRecords;
-
-
- if ( table->names )
- {
- for ( ; count > 0; count--, entry++ )
- {
- FT_FREE( entry->string );
- entry->stringLength = 0;
- }
-
- /* free strings table */
- FT_FREE( table->names );
- }
-
- table->numNameRecords = 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;
-
- 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
- };
-
- const FT_Frame_Field os2_fields_extra[] =
- {
- FT_FRAME_START( 8 ),
- FT_FRAME_ULONG( ulCodePageRange1 ),
- FT_FRAME_ULONG( ulCodePageRange2 ),
- FT_FRAME_END
- };
-
- 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
- };
-
-
- /* 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;
-
- if ( os2->version >= 0x0001 )
- {
- /* only version 1 tables */
- if ( FT_STREAM_READ_FIELDS( os2_fields_extra, os2 ) )
- goto Exit;
-
- if ( os2->version >= 0x0002 )
- {
- /* only version 2 tables */
- if ( FT_STREAM_READ_FIELDS( os2_fields_extra2, 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_ULONG( FormatType ),
- FT_FRAME_ULONG( 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 SFNT_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_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;
-
-
- /* 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 = SFNT_Err_Invalid_Table;
- goto Exit;
- }
-
- num_ranges = face->gasp.numRanges;
- FT_TRACE3(( "numRanges: %u\n", num_ranges ));
-
- if ( FT_QNEW_ARRAY( gaspranges, num_ranges ) ||
- FT_FRAME_ENTER( num_ranges * 4L ) )
- goto Exit;
-
- face->gasp.gaspRanges = 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/Build/source/libs/freetype2/src/sfnt/ttload.h b/Build/source/libs/freetype2/src/sfnt/ttload.h
deleted file mode 100644
index 49a1aee1633..00000000000
--- a/Build/source/libs/freetype2/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-2001, 2002, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/sfnt/ttmtx.c b/Build/source/libs/freetype2/src/sfnt/ttmtx.c
deleted file mode 100644
index 55f681abae1..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttmtx.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttmtx.c */
-/* */
-/* Load the metrics tables common to TTF and OTF fonts (body). */
-/* */
-/* Copyright 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "ttmtx.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_ttmtx
-
-
- /*
- * Unfortunately, we can't enable our memory optimizations if
- * FT_CONFIG_OPTION_OLD_INTERNALS is defined. This is because at least
- * one rogue client (libXfont in the X.Org XServer) is directly accessing
- * the metrics.
- */
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
-#if !defined FT_CONFIG_OPTION_OLD_INTERNALS
-
- 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;
- }
-
-#else /* !OPTIMIZE_MEMORY || OLD_INTERNALS */
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_hmtx( TT_Face face,
- FT_Stream stream,
- FT_Bool vertical )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
-
- FT_ULong table_len;
- FT_Long num_shorts, num_longs, num_shorts_checked;
-
- TT_LongMetrics* longs;
- TT_ShortMetrics** shorts;
- FT_Byte* p;
-
-
- if ( vertical )
- {
- void* lm = &face->vertical.long_metrics;
- void** sm = &face->vertical.short_metrics;
-
-
- error = face->goto_table( face, TTAG_vmtx, stream, &table_len );
- if ( error )
- goto Fail;
-
- num_longs = face->vertical.number_Of_VMetrics;
- if ( (FT_ULong)num_longs > table_len / 4 )
- num_longs = (FT_Long)( table_len / 4 );
-
- face->vertical.number_Of_VMetrics = 0;
-
- longs = (TT_LongMetrics*)lm;
- shorts = (TT_ShortMetrics**)sm;
- }
- else
- {
- void* lm = &face->horizontal.long_metrics;
- void** sm = &face->horizontal.short_metrics;
-
-
- error = face->goto_table( face, TTAG_hmtx, stream, &table_len );
- if ( error )
- goto Fail;
-
- num_longs = face->horizontal.number_Of_HMetrics;
- if ( (FT_ULong)num_longs > table_len / 4 )
- num_longs = (FT_Long)( table_len / 4 );
-
- face->horizontal.number_Of_HMetrics = 0;
-
- longs = (TT_LongMetrics*)lm;
- shorts = (TT_ShortMetrics**)sm;
- }
-
- /* never trust derived values */
-
- num_shorts = face->max_profile.numGlyphs - num_longs;
- num_shorts_checked = ( table_len - num_longs * 4L ) / 2;
-
- if ( num_shorts < 0 )
- {
- FT_ERROR(( "%cmtx has more metrics than glyphs.\n" ));
-
- /* Adobe simply ignores this problem. So we shall do the same. */
-#if 0
- error = vertical ? SFNT_Err_Invalid_Vert_Metrics
- : SFNT_Err_Invalid_Horiz_Metrics;
- goto Exit;
-#else
- num_shorts = 0;
-#endif
- }
-
- if ( FT_QNEW_ARRAY( *longs, num_longs ) ||
- FT_QNEW_ARRAY( *shorts, num_shorts ) )
- goto Fail;
-
- if ( FT_FRAME_ENTER( table_len ) )
- goto Fail;
-
- p = stream->cursor;
-
- {
- TT_LongMetrics cur = *longs;
- TT_LongMetrics limit = cur + num_longs;
-
-
- for ( ; cur < limit; cur++ )
- {
- cur->advance = FT_NEXT_USHORT( p );
- cur->bearing = FT_NEXT_SHORT( p );
- }
- }
-
- /* do we have an inconsistent number of metric values? */
- {
- TT_ShortMetrics* cur = *shorts;
- TT_ShortMetrics* limit = cur +
- FT_MIN( num_shorts, num_shorts_checked );
-
-
- for ( ; cur < limit; cur++ )
- *cur = FT_NEXT_SHORT( p );
-
- /* We fill up the missing left side bearings with the */
- /* last valid value. Since this will occur for buggy CJK */
- /* fonts usually only, nothing serious will happen. */
- if ( num_shorts > num_shorts_checked && num_shorts_checked > 0 )
- {
- FT_Short val = (*shorts)[num_shorts_checked - 1];
-
-
- limit = *shorts + num_shorts;
- for ( ; cur < limit; cur++ )
- *cur = val;
- }
- }
-
- FT_FRAME_EXIT();
-
- if ( vertical )
- face->vertical.number_Of_VMetrics = (FT_UShort)num_longs;
- else
- face->horizontal.number_Of_HMetrics = (FT_UShort)num_longs;
-
- Fail:
- return error;
- }
-
-#endif /* !OPTIMIZE_MEMORY || OLD_INTERNALS */
-
-
- /*************************************************************************/
- /* */
- /* <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;
-
- 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> */
- /* Returns the horizontal or vertical metrics in font units for a */
- /* given glyph. The metrics are the left side bearing (resp. top */
- /* side bearing) and advance width (resp. advance height). */
- /* */
- /* <Input> */
- /* header :: A pointer to either the horizontal or vertical metrics */
- /* structure. */
- /* */
- /* idx :: The glyph index. */
- /* */
- /* <Output> */
- /* bearing :: The bearing, either left side or top side. */
- /* */
- /* advance :: The advance width resp. advance height. */
- /* */
-#if !defined FT_CONFIG_OPTION_OLD_INTERNALS
-
- FT_LOCAL_DEF( FT_Error )
- 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;
-
-
- 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;
- }
-
- return SFNT_Err_Ok;
- }
-
-#else /* OLD_INTERNALS */
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_get_metrics( TT_Face face,
- FT_Bool vertical,
- FT_UInt gindex,
- FT_Short* abearing,
- FT_UShort* aadvance )
- {
- void* v = &face->vertical;
- void* h = &face->horizontal;
- TT_HoriHeader* header = vertical ? (TT_HoriHeader*)v
- : (TT_HoriHeader*)h;
- TT_LongMetrics longs_m;
- FT_UShort k = header->number_Of_HMetrics;
-
-
- if ( k == 0 ||
- !header->long_metrics ||
- gindex >= (FT_UInt)face->max_profile.numGlyphs )
- {
- *abearing = *aadvance = 0;
- return SFNT_Err_Ok;
- }
-
- if ( gindex < (FT_UInt)k )
- {
- longs_m = (TT_LongMetrics)header->long_metrics + gindex;
- *abearing = longs_m->bearing;
- *aadvance = longs_m->advance;
- }
- else
- {
- *abearing = ((TT_ShortMetrics*)header->short_metrics)[gindex - k];
- *aadvance = ((TT_LongMetrics)header->long_metrics)[k - 1].advance;
- }
-
- return SFNT_Err_Ok;
- }
-
-#endif /* !OPTIMIZE_MEMORY || OLD_INTERNALS */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/ttmtx.h b/Build/source/libs/freetype2/src/sfnt/ttmtx.h
deleted file mode 100644
index 8b91a113d85..00000000000
--- a/Build/source/libs/freetype2/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 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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( FT_Error )
- 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/Build/source/libs/freetype2/src/sfnt/ttpost.c b/Build/source/libs/freetype2/src/sfnt/ttpost.c
deleted file mode 100644
index 1e6163646dc..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttpost.c
+++ /dev/null
@@ -1,521 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpost.c */
-/* */
-/* Postcript name table processing for TrueType and OpenType fonts */
-/* (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include "ttpost.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_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( 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 ) tt_post_default_names[x]
-
- /* the 258 default Mac PS glyph names */
-
- static const FT_String* tt_post_default_names[258] =
- {
- /* 0 */
- ".notdef", ".null", "CR", "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", "nbspace", "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 */
- "Idot", "Scedilla", "scedilla", "Cacute", "cacute",
- "Ccaron", "ccaron", "dmacron",
- };
-
-
-#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
-
-
- static FT_Error
- load_format_20( TT_Face face,
- FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
- FT_Error error;
-
- FT_Int num_glyphs;
- FT_UShort num_names;
-
- FT_UShort* glyph_indices = 0;
- FT_Char** name_strings = 0;
-
-
- 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 = SFNT_Err_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_READ_BYTE ( len ) ||
- FT_NEW_ARRAY( name_strings[n], len + 1 ) ||
- FT_STREAM_READ ( name_strings[n], len ) )
- goto Fail1;
-
- name_strings[n][len] = '\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 SFNT_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_Memory memory = stream->memory;
- FT_Error error;
-
- FT_Int num_glyphs;
- FT_Char* offset_table = 0;
-
-
- /* UNDOCUMENTED! This value appears only in the Apple TT specs. */
- if ( FT_READ_USHORT( num_glyphs ) )
- goto Exit;
-
- /* check the number of glyphs */
- if ( num_glyphs > face->max_profile.numGlyphs || num_glyphs > 258 )
- {
- error = SFNT_Err_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 = SFNT_Err_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 SFNT_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;
-
-
- /* 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, 0 );
- if ( error )
- goto Exit;
-
- 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 );
- else if ( format == 0x00028000L )
- error = load_format_25( face, stream );
- else
- error = SFNT_Err_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> */
- /* Gets the PostScript glyph name of a glyph. */
- /* */
- /* <Input> */
- /* face :: A handle to the parent face. */
- /* */
- /* 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. */
- /* */
- 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 SFNT_Err_Invalid_Face_Handle;
-
- if ( idx >= (FT_UInt)face->max_profile.numGlyphs )
- return SFNT_Err_Invalid_Glyph_Index;
-
-#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
- psnames = (FT_Service_PsCMaps)face->psnames;
- if ( !psnames )
- return SFNT_Err_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 */
- {
- idx += table->offsets[idx];
- *PSname = MAC_NAME( idx );
- }
- }
-
- /* nothing to do for format == 0x00030000L */
-
- End:
- return SFNT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/ttpost.h b/Build/source/libs/freetype2/src/sfnt/ttpost.h
deleted file mode 100644
index 6f06d75a719..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttpost.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpost.h */
-/* */
-/* Postcript name table processing for TrueType and OpenType fonts */
-/* (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#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/Build/source/libs/freetype2/src/sfnt/ttsbit.c b/Build/source/libs/freetype2/src/sfnt/ttsbit.c
deleted file mode 100644
index 8261ba55350..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttsbit.c
+++ /dev/null
@@ -1,1502 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttsbit.c */
-/* */
-/* TrueType and OpenType embedded bitmap support (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
- /*
- * Alas, the memory-optimized sbit loader can't be used when implementing
- * the `old internals' hack
- */
-#if !defined FT_CONFIG_OPTION_OLD_INTERNALS
-
-#include "ttsbit0.c"
-
-#else /* !FT_CONFIG_OPTION_OLD_INTERNALS */
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include "ttsbit.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_ttsbit
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* blit_sbit */
- /* */
- /* <Description> */
- /* Blits a bitmap from an input stream into a given target. Supports */
- /* x and y offsets as well as byte padded lines. */
- /* */
- /* <Input> */
- /* target :: The target bitmap/pixmap. */
- /* */
- /* source :: The input packed bitmap data. */
- /* */
- /* line_bits :: The number of bits per line. */
- /* */
- /* byte_padded :: A flag which is true if lines are byte-padded. */
- /* */
- /* x_offset :: The horizontal offset. */
- /* */
- /* y_offset :: The vertical offset. */
- /* */
- /* <Note> */
- /* IMPORTANT: The x and y offsets are relative to the top corner of */
- /* the target bitmap (unlike the normal TrueType */
- /* convention). A positive y offset indicates a downwards */
- /* direction! */
- /* */
- static void
- blit_sbit( FT_Bitmap* target,
- FT_Byte* source,
- FT_Int line_bits,
- FT_Bool byte_padded,
- FT_Int x_offset,
- FT_Int y_offset )
- {
- FT_Byte* line_buff;
- FT_Int line_incr;
- FT_Int height;
-
- FT_UShort acc;
- FT_UInt loaded;
-
-
- /* first of all, compute starting write position */
- line_incr = target->pitch;
- line_buff = target->buffer;
-
- if ( line_incr < 0 )
- line_buff -= line_incr * ( target->rows - 1 );
-
- line_buff += ( x_offset >> 3 ) + y_offset * line_incr;
-
- /***********************************************************************/
- /* */
- /* We use the extra-classic `accumulator' trick to extract the bits */
- /* from the source byte stream. */
- /* */
- /* Namely, the variable `acc' is a 16-bit accumulator containing the */
- /* last `loaded' bits from the input stream. The bits are shifted to */
- /* the upmost position in `acc'. */
- /* */
- /***********************************************************************/
-
- acc = 0; /* clear accumulator */
- loaded = 0; /* no bits were loaded */
-
- for ( height = target->rows; height > 0; height-- )
- {
- FT_Byte* cur = line_buff; /* current write cursor */
- FT_Int count = line_bits; /* # of bits to extract per line */
- FT_Byte shift = (FT_Byte)( x_offset & 7 ); /* current write shift */
- FT_Byte space = (FT_Byte)( 8 - shift );
-
-
- /* first of all, read individual source bytes */
- if ( count >= 8 )
- {
- count -= 8;
- {
- do
- {
- FT_Byte val;
-
-
- /* ensure that there are at least 8 bits in the accumulator */
- if ( loaded < 8 )
- {
- acc |= (FT_UShort)((FT_UShort)*source++ << ( 8 - loaded ));
- loaded += 8;
- }
-
- /* now write one byte */
- val = (FT_Byte)( acc >> 8 );
- if ( shift )
- {
- cur[0] |= (FT_Byte)( val >> shift );
- cur[1] |= (FT_Byte)( val << space );
- }
- else
- cur[0] |= val;
-
- cur++;
- acc <<= 8; /* remove bits from accumulator */
- loaded -= 8;
- count -= 8;
-
- } while ( count >= 0 );
- }
-
- /* restore `count' to correct value */
- count += 8;
- }
-
- /* now write remaining bits (count < 8) */
- if ( count > 0 )
- {
- FT_Byte val;
-
-
- /* ensure that there are at least `count' bits in the accumulator */
- if ( (FT_Int)loaded < count )
- {
- acc |= (FT_UShort)((FT_UShort)*source++ << ( 8 - loaded ));
- loaded += 8;
- }
-
- /* now write remaining bits */
- val = (FT_Byte)( ( (FT_Byte)( acc >> 8 ) ) & ~( 0xFF >> count ) );
- cur[0] |= (FT_Byte)( val >> shift );
-
- if ( count > space )
- cur[1] |= (FT_Byte)( val << space );
-
- acc <<= count;
- loaded -= count;
- }
-
- /* now, skip to next line */
- if ( byte_padded )
- {
- acc = 0;
- loaded = 0; /* clear accumulator on byte-padded lines */
- }
-
- line_buff += line_incr;
- }
- }
-
-
- static const FT_Frame_Field sbit_metrics_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_SBit_MetricsRec
-
- FT_FRAME_START( 8 ),
- FT_FRAME_BYTE( height ),
- FT_FRAME_BYTE( width ),
-
- FT_FRAME_CHAR( horiBearingX ),
- FT_FRAME_CHAR( horiBearingY ),
- FT_FRAME_BYTE( horiAdvance ),
-
- FT_FRAME_CHAR( vertBearingX ),
- FT_FRAME_CHAR( vertBearingY ),
- FT_FRAME_BYTE( vertAdvance ),
- FT_FRAME_END
- };
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Load_SBit_Const_Metrics */
- /* */
- /* <Description> */
- /* Loads the metrics for `EBLC' index tables format 2 and 5. */
- /* */
- /* <Input> */
- /* range :: The target range. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- Load_SBit_Const_Metrics( TT_SBit_Range range,
- FT_Stream stream )
- {
- FT_Error error;
-
-
- if ( FT_READ_ULONG( range->image_size ) )
- return error;
-
- return FT_STREAM_READ_FIELDS( sbit_metrics_fields, &range->metrics );
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Load_SBit_Range_Codes */
- /* */
- /* <Description> */
- /* Loads the range codes for `EBLC' index tables format 4 and 5. */
- /* */
- /* <Input> */
- /* range :: The target range. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* load_offsets :: A flag whether to load the glyph offset table. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- Load_SBit_Range_Codes( TT_SBit_Range range,
- FT_Stream stream,
- FT_Bool load_offsets )
- {
- FT_Error error;
- FT_ULong count, n, size;
- FT_Memory memory = stream->memory;
-
-
- if ( FT_READ_ULONG( count ) )
- goto Exit;
-
- range->num_glyphs = count;
-
- /* Allocate glyph offsets table if needed */
- if ( load_offsets )
- {
- if ( FT_NEW_ARRAY( range->glyph_offsets, count ) )
- goto Exit;
-
- size = count * 4L;
- }
- else
- size = count * 2L;
-
- /* Allocate glyph codes table and access frame */
- if ( FT_NEW_ARRAY ( range->glyph_codes, count ) ||
- FT_FRAME_ENTER( size ) )
- goto Exit;
-
- for ( n = 0; n < count; n++ )
- {
- range->glyph_codes[n] = FT_GET_USHORT();
-
- if ( load_offsets )
- range->glyph_offsets[n] = (FT_ULong)range->image_offset +
- FT_GET_USHORT();
- }
-
- FT_FRAME_EXIT();
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Load_SBit_Range */
- /* */
- /* <Description> */
- /* Loads a given `EBLC' index/range table. */
- /* */
- /* <Input> */
- /* range :: The target range. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
- Load_SBit_Range( TT_SBit_Range range,
- FT_Stream stream )
- {
- FT_Error error;
- FT_Memory memory = stream->memory;
-
-
- switch( range->index_format )
- {
- case 1: /* variable metrics with 4-byte offsets */
- case 3: /* variable metrics with 2-byte offsets */
- {
- FT_ULong num_glyphs, n;
- FT_Int size_elem;
- FT_Bool large = FT_BOOL( range->index_format == 1 );
-
-
-
- if ( range->last_glyph < range->first_glyph )
- {
- error = SFNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- num_glyphs = range->last_glyph - range->first_glyph + 1L;
- range->num_glyphs = num_glyphs;
- num_glyphs++; /* XXX: BEWARE - see spec */
-
- size_elem = large ? 4 : 2;
-
- if ( FT_NEW_ARRAY( range->glyph_offsets, num_glyphs ) ||
- FT_FRAME_ENTER( num_glyphs * size_elem ) )
- goto Exit;
-
- for ( n = 0; n < num_glyphs; n++ )
- range->glyph_offsets[n] = (FT_ULong)( range->image_offset +
- ( large ? FT_GET_ULONG()
- : FT_GET_USHORT() ) );
- FT_FRAME_EXIT();
- }
- break;
-
- case 2: /* all glyphs have identical metrics */
- error = Load_SBit_Const_Metrics( range, stream );
- break;
-
- case 4:
- error = Load_SBit_Range_Codes( range, stream, 1 );
- break;
-
- case 5:
- error = Load_SBit_Const_Metrics( range, stream );
- if ( !error )
- error = Load_SBit_Range_Codes( range, stream, 0 );
- break;
-
- default:
- error = SFNT_Err_Invalid_File_Format;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_eblc */
- /* */
- /* <Description> */
- /* Loads the table of embedded bitmap sizes for this face. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_eblc( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error = 0;
- FT_Memory memory = stream->memory;
- FT_Fixed version;
- FT_ULong num_strikes;
- FT_ULong table_base;
-
- static const FT_Frame_Field sbit_line_metrics_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_SBit_LineMetricsRec
-
- /* no FT_FRAME_START */
- FT_FRAME_CHAR( ascender ),
- FT_FRAME_CHAR( descender ),
- FT_FRAME_BYTE( max_width ),
-
- FT_FRAME_CHAR( caret_slope_numerator ),
- FT_FRAME_CHAR( caret_slope_denominator ),
- FT_FRAME_CHAR( caret_offset ),
-
- FT_FRAME_CHAR( min_origin_SB ),
- FT_FRAME_CHAR( min_advance_SB ),
- FT_FRAME_CHAR( max_before_BL ),
- FT_FRAME_CHAR( min_after_BL ),
- FT_FRAME_CHAR( pads[0] ),
- FT_FRAME_CHAR( pads[1] ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field strike_start_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_SBit_StrikeRec
-
- /* no FT_FRAME_START */
- FT_FRAME_ULONG( ranges_offset ),
- FT_FRAME_SKIP_LONG,
- FT_FRAME_ULONG( num_ranges ),
- FT_FRAME_ULONG( color_ref ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field strike_end_fields[] =
- {
- /* no FT_FRAME_START */
- FT_FRAME_USHORT( start_glyph ),
- FT_FRAME_USHORT( end_glyph ),
- FT_FRAME_BYTE ( x_ppem ),
- FT_FRAME_BYTE ( y_ppem ),
- FT_FRAME_BYTE ( bit_depth ),
- FT_FRAME_CHAR ( flags ),
- FT_FRAME_END
- };
-
-
- face->num_sbit_strikes = 0;
-
- /* this table is optional */
- error = face->goto_table( face, TTAG_EBLC, stream, 0 );
- if ( error )
- error = face->goto_table( face, TTAG_bloc, stream, 0 );
- if ( error )
- goto Exit;
-
- table_base = FT_STREAM_POS();
- if ( FT_FRAME_ENTER( 8L ) )
- goto Exit;
-
- version = FT_GET_LONG();
- num_strikes = FT_GET_ULONG();
-
- FT_FRAME_EXIT();
-
- /* check version number and strike count */
- if ( version != 0x00020000L ||
- num_strikes >= 0x10000L )
- {
- FT_ERROR(( "tt_face_load_sbit_strikes: invalid table version!\n" ));
- error = SFNT_Err_Invalid_File_Format;
-
- goto Exit;
- }
-
- /* allocate the strikes table */
- if ( FT_NEW_ARRAY( face->sbit_strikes, num_strikes ) )
- goto Exit;
-
- face->num_sbit_strikes = num_strikes;
-
- /* now read each strike table separately */
- {
- TT_SBit_Strike strike = face->sbit_strikes;
- FT_ULong count = num_strikes;
-
-
- if ( FT_FRAME_ENTER( 48L * num_strikes ) )
- goto Exit;
-
- while ( count > 0 )
- {
- if ( FT_STREAM_READ_FIELDS( strike_start_fields, strike ) ||
- FT_STREAM_READ_FIELDS( sbit_line_metrics_fields, &strike->hori ) ||
- FT_STREAM_READ_FIELDS( sbit_line_metrics_fields, &strike->vert ) ||
- FT_STREAM_READ_FIELDS( strike_end_fields, strike ) )
- break;
-
- count--;
- strike++;
- }
-
- FT_FRAME_EXIT();
- }
-
- /* allocate the index ranges for each strike table */
- {
- TT_SBit_Strike strike = face->sbit_strikes;
- FT_ULong count = num_strikes;
-
-
- while ( count > 0 )
- {
- TT_SBit_Range range;
- FT_ULong count2 = strike->num_ranges;
-
-
- /* read each range */
- if ( FT_STREAM_SEEK( table_base + strike->ranges_offset ) ||
- FT_FRAME_ENTER( strike->num_ranges * 8L ) )
- goto Exit;
-
- if ( FT_NEW_ARRAY( strike->sbit_ranges, strike->num_ranges ) )
- goto Exit;
-
- range = strike->sbit_ranges;
- while ( count2 > 0 )
- {
- range->first_glyph = FT_GET_USHORT();
- range->last_glyph = FT_GET_USHORT();
- range->table_offset = table_base + strike->ranges_offset +
- FT_GET_ULONG();
- count2--;
- range++;
- }
-
- FT_FRAME_EXIT();
-
- /* Now, read each index table */
- count2 = strike->num_ranges;
- range = strike->sbit_ranges;
- while ( count2 > 0 )
- {
- /* Read the header */
- if ( FT_STREAM_SEEK( range->table_offset ) ||
- FT_FRAME_ENTER( 8L ) )
- goto Exit;
-
- range->index_format = FT_GET_USHORT();
- range->image_format = FT_GET_USHORT();
- range->image_offset = FT_GET_ULONG();
-
- FT_FRAME_EXIT();
-
- error = Load_SBit_Range( range, stream );
- if ( error )
- goto Exit;
-
- count2--;
- range++;
- }
-
- count--;
- strike++;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_free_eblc */
- /* */
- /* <Description> */
- /* Releases the embedded bitmap tables. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- FT_LOCAL_DEF( void )
- tt_face_free_eblc( TT_Face face )
- {
- FT_Memory memory = face->root.memory;
- TT_SBit_Strike strike = face->sbit_strikes;
- TT_SBit_Strike strike_limit = strike + face->num_sbit_strikes;
-
-
- if ( strike )
- {
- for ( ; strike < strike_limit; strike++ )
- {
- TT_SBit_Range range = strike->sbit_ranges;
- TT_SBit_Range range_limit = range + strike->num_ranges;
-
-
- if ( range )
- {
- for ( ; range < range_limit; range++ )
- {
- /* release the glyph offsets and codes tables */
- /* where appropriate */
- FT_FREE( range->glyph_offsets );
- FT_FREE( range->glyph_codes );
- }
- }
- FT_FREE( strike->sbit_ranges );
- strike->num_ranges = 0;
- }
- FT_FREE( face->sbit_strikes );
- }
- face->num_sbit_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 )
- {
- TT_SBit_Strike strike;
-
-
- if ( strike_index >= face->num_sbit_strikes )
- return SFNT_Err_Invalid_Argument;
-
- strike = face->sbit_strikes + strike_index;
-
- metrics->x_ppem = strike->x_ppem;
- metrics->y_ppem = strike->y_ppem;
-
- metrics->ascender = strike->hori.ascender << 6;
- metrics->descender = strike->hori.descender << 6;
-
- /* XXX: Is this correct? */
- metrics->max_advance = ( strike->hori.min_origin_SB +
- strike->hori.max_width +
- strike->hori.min_advance_SB ) << 6;
-
- metrics->height = metrics->ascender - metrics->descender;
-
- return SFNT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* find_sbit_range */
- /* */
- /* <Description> */
- /* Scans a given strike's ranges and return, for a given glyph */
- /* index, the corresponding sbit range, and `EBDT' offset. */
- /* */
- /* <Input> */
- /* glyph_index :: The glyph index. */
- /* */
- /* strike :: The source/current sbit strike. */
- /* */
- /* <Output> */
- /* arange :: The sbit range containing the glyph index. */
- /* */
- /* aglyph_offset :: The offset of the glyph data in `EBDT' table. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means the glyph index was found. */
- /* */
- static FT_Error
- find_sbit_range( FT_UInt glyph_index,
- TT_SBit_Strike strike,
- TT_SBit_Range *arange,
- FT_ULong *aglyph_offset )
- {
- TT_SBit_RangeRec *range, *range_limit;
-
-
- /* check whether the glyph index is within this strike's */
- /* glyph range */
- if ( glyph_index < (FT_UInt)strike->start_glyph ||
- glyph_index > (FT_UInt)strike->end_glyph )
- goto Fail;
-
- /* scan all ranges in strike */
- range = strike->sbit_ranges;
- range_limit = range + strike->num_ranges;
- if ( !range )
- goto Fail;
-
- for ( ; range < range_limit; range++ )
- {
- if ( glyph_index >= (FT_UInt)range->first_glyph &&
- glyph_index <= (FT_UInt)range->last_glyph )
- {
- FT_UShort delta = (FT_UShort)( glyph_index - range->first_glyph );
-
-
- switch ( range->index_format )
- {
- case 1:
- case 3:
- *aglyph_offset = range->glyph_offsets[delta];
- break;
-
- case 2:
- *aglyph_offset = range->image_offset +
- range->image_size * delta;
- break;
-
- case 4:
- case 5:
- {
- FT_ULong n;
-
-
- for ( n = 0; n < range->num_glyphs; n++ )
- {
- if ( (FT_UInt)range->glyph_codes[n] == glyph_index )
- {
- if ( range->index_format == 4 )
- *aglyph_offset = range->glyph_offsets[n];
- else
- *aglyph_offset = range->image_offset +
- n * range->image_size;
- goto Found;
- }
- }
- }
-
- /* fall-through */
- default:
- goto Fail;
- }
-
- Found:
- /* return successfully! */
- *arange = range;
- return 0;
- }
- }
-
- Fail:
- *arange = 0;
- *aglyph_offset = 0;
-
- return SFNT_Err_Invalid_Argument;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_find_sbit_image */
- /* */
- /* <Description> */
- /* Checks 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. */
- /* */
- FT_LOCAL( FT_Error )
- tt_find_sbit_image( TT_Face face,
- FT_UInt glyph_index,
- FT_ULong strike_index,
- TT_SBit_Range *arange,
- TT_SBit_Strike *astrike,
- FT_ULong *aglyph_offset )
- {
- FT_Error error;
- TT_SBit_Strike strike;
-
-
- if ( !face->sbit_strikes ||
- ( face->num_sbit_strikes <= strike_index ) )
- goto Fail;
-
- strike = &face->sbit_strikes[strike_index];
-
- error = find_sbit_range( glyph_index, strike,
- arange, aglyph_offset );
- if ( error )
- goto Fail;
-
- *astrike = strike;
-
- return SFNT_Err_Ok;
-
- Fail:
- /* no embedded bitmap for this glyph in face */
- *arange = 0;
- *astrike = 0;
- *aglyph_offset = 0;
-
- return SFNT_Err_Invalid_Argument;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_load_sbit_metrics */
- /* */
- /* <Description> */
- /* Gets the big metrics for a given SBit. */
- /* */
- /* <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. */
- /* */
- FT_LOCAL( FT_Error )
- tt_load_sbit_metrics( FT_Stream stream,
- TT_SBit_Range range,
- TT_SBit_Metrics metrics )
- {
- FT_Error error = SFNT_Err_Ok;
-
-
- switch ( range->image_format )
- {
- case 1:
- case 2:
- case 8:
- /* variable small metrics */
- {
- TT_SBit_SmallMetricsRec smetrics;
-
- static const FT_Frame_Field sbit_small_metrics_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_SBit_SmallMetricsRec
-
- FT_FRAME_START( 5 ),
- FT_FRAME_BYTE( height ),
- FT_FRAME_BYTE( width ),
- FT_FRAME_CHAR( bearingX ),
- FT_FRAME_CHAR( bearingY ),
- FT_FRAME_BYTE( advance ),
- FT_FRAME_END
- };
-
-
- /* read small metrics */
- if ( FT_STREAM_READ_FIELDS( sbit_small_metrics_fields, &smetrics ) )
- goto Exit;
-
- /* convert it to a big metrics */
- metrics->height = smetrics.height;
- metrics->width = smetrics.width;
- metrics->horiBearingX = smetrics.bearingX;
- metrics->horiBearingY = smetrics.bearingY;
- metrics->horiAdvance = smetrics.advance;
-
- /* these metrics are made up at a higher level when */
- /* needed. */
- metrics->vertBearingX = 0;
- metrics->vertBearingY = 0;
- metrics->vertAdvance = 0;
- }
- break;
-
- case 6:
- case 7:
- case 9:
- /* variable big metrics */
- if ( FT_STREAM_READ_FIELDS( sbit_metrics_fields, metrics ) )
- goto Exit;
- break;
-
- case 5:
- default: /* constant metrics */
- if ( range->index_format == 2 || range->index_format == 5 )
- *metrics = range->metrics;
- else
- return SFNT_Err_Invalid_File_Format;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* crop_bitmap */
- /* */
- /* <Description> */
- /* Crops a bitmap to its tightest bounding box, and adjusts its */
- /* metrics. */
- /* */
- /* <InOut> */
- /* map :: The bitmap. */
- /* */
- /* metrics :: The corresponding metrics structure. */
- /* */
- static void
- crop_bitmap( FT_Bitmap* map,
- TT_SBit_Metrics metrics )
- {
- /***********************************************************************/
- /* */
- /* In this situation, some bounding boxes of embedded bitmaps are too */
- /* large. We need to crop it to a reasonable size. */
- /* */
- /* --------- */
- /* | | ----- */
- /* | *** | |***| */
- /* | * | | * | */
- /* | * | ------> | * | */
- /* | * | | * | */
- /* | * | | * | */
- /* | *** | |***| */
- /* --------- ----- */
- /* */
- /***********************************************************************/
-
- FT_Int rows, count;
- FT_Long line_len;
- FT_Byte* line;
-
-
- /***********************************************************************/
- /* */
- /* first of all, check the top-most lines of the bitmap, and remove */
- /* them if they're empty. */
- /* */
- {
- line = (FT_Byte*)map->buffer;
- rows = map->rows;
- line_len = map->pitch;
-
-
- for ( count = 0; count < rows; count++ )
- {
- FT_Byte* cur = line;
- FT_Byte* limit = line + line_len;
-
-
- for ( ; cur < limit; cur++ )
- if ( cur[0] )
- goto Found_Top;
-
- /* the current line was empty - skip to next one */
- line = limit;
- }
-
- Found_Top:
- /* check that we have at least one filled line */
- if ( count >= rows )
- goto Empty_Bitmap;
-
- /* now, crop the empty upper lines */
- if ( count > 0 )
- {
- line = (FT_Byte*)map->buffer;
-
- FT_MEM_MOVE( line, line + count * line_len,
- ( rows - count ) * line_len );
-
- metrics->height = (FT_Byte)( metrics->height - count );
- metrics->horiBearingY = (FT_Char)( metrics->horiBearingY - count );
- metrics->vertBearingY = (FT_Char)( metrics->vertBearingY - count );
-
- map->rows -= count;
- rows -= count;
- }
- }
-
- /***********************************************************************/
- /* */
- /* second, crop the lower lines */
- /* */
- {
- line = (FT_Byte*)map->buffer + ( rows - 1 ) * line_len;
-
- for ( count = 0; count < rows; count++ )
- {
- FT_Byte* cur = line;
- FT_Byte* limit = line + line_len;
-
-
- for ( ; cur < limit; cur++ )
- if ( cur[0] )
- goto Found_Bottom;
-
- /* the current line was empty - skip to previous one */
- line -= line_len;
- }
-
- Found_Bottom:
- if ( count > 0 )
- {
- metrics->height = (FT_Byte)( metrics->height - count );
- rows -= count;
- map->rows -= count;
- }
- }
-
- /***********************************************************************/
- /* */
- /* third, get rid of the space on the left side of the glyph */
- /* */
- do
- {
- FT_Byte* limit;
-
-
- line = (FT_Byte*)map->buffer;
- limit = line + rows * line_len;
-
- for ( ; line < limit; line += line_len )
- if ( line[0] & 0x80 )
- goto Found_Left;
-
- /* shift the whole glyph one pixel to the left */
- line = (FT_Byte*)map->buffer;
- limit = line + rows * line_len;
-
- for ( ; line < limit; line += line_len )
- {
- FT_Int n, width = map->width;
- FT_Byte old;
- FT_Byte* cur = line;
-
-
- old = (FT_Byte)(cur[0] << 1);
- for ( n = 8; n < width; n += 8 )
- {
- FT_Byte val;
-
-
- val = cur[1];
- cur[0] = (FT_Byte)( old | ( val >> 7 ) );
- old = (FT_Byte)( val << 1 );
- cur++;
- }
- cur[0] = old;
- }
-
- map->width--;
- metrics->horiBearingX++;
- metrics->vertBearingX++;
- metrics->width--;
-
- } while ( map->width > 0 );
-
- Found_Left:
-
- /***********************************************************************/
- /* */
- /* finally, crop the bitmap width to get rid of the space on the right */
- /* side of the glyph. */
- /* */
- do
- {
- FT_Int right = map->width - 1;
- FT_Byte* limit;
- FT_Byte mask;
-
-
- line = (FT_Byte*)map->buffer + ( right >> 3 );
- limit = line + rows * line_len;
- mask = (FT_Byte)( 0x80 >> ( right & 7 ) );
-
- for ( ; line < limit; line += line_len )
- if ( line[0] & mask )
- goto Found_Right;
-
- /* crop the whole glyph to the right */
- map->width--;
- metrics->width--;
-
- } while ( map->width > 0 );
-
- Found_Right:
- /* all right, the bitmap was cropped */
- return;
-
- Empty_Bitmap:
- map->width = 0;
- map->rows = 0;
- map->pitch = 0;
- map->pixel_mode = FT_PIXEL_MODE_MONO;
- }
-
-
- static FT_Error
- Load_SBit_Single( FT_Bitmap* map,
- FT_Int x_offset,
- FT_Int y_offset,
- FT_Int pix_bits,
- FT_UShort image_format,
- TT_SBit_Metrics metrics,
- FT_Stream stream )
- {
- FT_Error error;
-
-
- /* check that the source bitmap fits into the target pixmap */
- if ( x_offset < 0 || x_offset + metrics->width > map->width ||
- y_offset < 0 || y_offset + metrics->height > map->rows )
- {
- error = SFNT_Err_Invalid_Argument;
-
- goto Exit;
- }
-
- {
- FT_Int glyph_width = metrics->width;
- FT_Int glyph_height = metrics->height;
- FT_Int glyph_size;
- FT_Int line_bits = pix_bits * glyph_width;
- FT_Bool pad_bytes = 0;
-
-
- /* compute size of glyph image */
- switch ( image_format )
- {
- case 1: /* byte-padded formats */
- case 6:
- {
- FT_Int line_length;
-
-
- switch ( pix_bits )
- {
- case 1:
- line_length = ( glyph_width + 7 ) >> 3;
- break;
- case 2:
- line_length = ( glyph_width + 3 ) >> 2;
- break;
- case 4:
- line_length = ( glyph_width + 1 ) >> 1;
- break;
- default:
- line_length = glyph_width;
- }
-
- glyph_size = glyph_height * line_length;
- pad_bytes = 1;
- }
- break;
-
- case 2:
- case 5:
- case 7:
- line_bits = glyph_width * pix_bits;
- glyph_size = ( glyph_height * line_bits + 7 ) >> 3;
- break;
-
- default: /* invalid format */
- return SFNT_Err_Invalid_File_Format;
- }
-
- /* Now read data and draw glyph into target pixmap */
- if ( FT_FRAME_ENTER( glyph_size ) )
- goto Exit;
-
- /* don't forget to multiply `x_offset' by `map->pix_bits' as */
- /* the sbit blitter doesn't make a difference between pixmap */
- /* depths. */
- blit_sbit( map, (FT_Byte*)stream->cursor, line_bits, pad_bytes,
- x_offset * pix_bits, y_offset );
-
- FT_FRAME_EXIT();
- }
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- Load_SBit_Image( TT_SBit_Strike strike,
- TT_SBit_Range range,
- FT_ULong ebdt_pos,
- FT_ULong glyph_offset,
- FT_GlyphSlot slot,
- FT_Int x_offset,
- FT_Int y_offset,
- FT_Stream stream,
- TT_SBit_Metrics metrics,
- FT_Int depth )
- {
- FT_Memory memory = stream->memory;
- FT_Bitmap* map = &slot->bitmap;
- FT_Error error;
-
-
- /* place stream at beginning of glyph data and read metrics */
- if ( FT_STREAM_SEEK( ebdt_pos + glyph_offset ) )
- goto Exit;
-
- error = tt_load_sbit_metrics( stream, range, metrics );
- if ( error )
- goto Exit;
-
- /* This function is recursive. At the top-level call, we */
- /* compute the dimensions of the higher-level glyph to */
- /* allocate the final pixmap buffer. */
- if ( depth == 0 )
- {
- FT_Long size;
-
-
- map->width = metrics->width;
- map->rows = metrics->height;
-
- switch ( strike->bit_depth )
- {
- case 1:
- map->pixel_mode = FT_PIXEL_MODE_MONO;
- map->pitch = ( map->width + 7 ) >> 3;
- break;
-
- case 2:
- map->pixel_mode = FT_PIXEL_MODE_GRAY2;
- map->pitch = ( map->width + 3 ) >> 2;
- break;
-
- case 4:
- map->pixel_mode = FT_PIXEL_MODE_GRAY4;
- map->pitch = ( map->width + 1 ) >> 1;
- break;
-
- case 8:
- map->pixel_mode = FT_PIXEL_MODE_GRAY;
- map->pitch = map->width;
- break;
-
- default:
- return SFNT_Err_Invalid_File_Format;
- }
-
- size = map->rows * map->pitch;
-
- /* check that there is no empty image */
- if ( size == 0 )
- goto Exit; /* exit successfully! */
-
- error = ft_glyphslot_alloc_bitmap( slot, size );
- if (error)
- goto Exit;
- }
-
- switch ( range->image_format )
- {
- case 1: /* single sbit image - load it */
- case 2:
- case 5:
- case 6:
- case 7:
- return Load_SBit_Single( map, x_offset, y_offset, strike->bit_depth,
- range->image_format, metrics, stream );
-
- case 8: /* compound format */
- FT_Stream_Skip( stream, 1L );
- /* fallthrough */
-
- case 9:
- break;
-
- default: /* invalid image format */
- return SFNT_Err_Invalid_File_Format;
- }
-
- /* All right, we have a compound format. First of all, read */
- /* the array of elements. */
- {
- TT_SBit_Component components;
- TT_SBit_Component comp;
- FT_UShort num_components, count;
-
-
- if ( FT_READ_USHORT( num_components ) ||
- FT_NEW_ARRAY( components, num_components ) )
- goto Exit;
-
- count = num_components;
-
- if ( FT_FRAME_ENTER( 4L * num_components ) )
- goto Fail_Memory;
-
- for ( comp = components; count > 0; count--, comp++ )
- {
- comp->glyph_code = FT_GET_USHORT();
- comp->x_offset = FT_GET_CHAR();
- comp->y_offset = FT_GET_CHAR();
- }
-
- FT_FRAME_EXIT();
-
- /* Now recursively load each element glyph */
- count = num_components;
- comp = components;
- for ( ; count > 0; count--, comp++ )
- {
- TT_SBit_Range elem_range;
- TT_SBit_MetricsRec elem_metrics;
- FT_ULong elem_offset;
-
-
- /* find the range for this element */
- error = find_sbit_range( comp->glyph_code,
- strike,
- &elem_range,
- &elem_offset );
- if ( error )
- goto Fail_Memory;
-
- /* now load the element, recursively */
- error = Load_SBit_Image( strike,
- elem_range,
- ebdt_pos,
- elem_offset,
- slot,
- x_offset + comp->x_offset,
- y_offset + comp->y_offset,
- stream,
- &elem_metrics,
- depth + 1 );
- if ( error )
- goto Fail_Memory;
- }
-
- Fail_Memory:
- FT_FREE( components );
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_load_sbit_image */
- /* */
- /* <Description> */
- /* Loads a given glyph sbit image from the font resource. This also */
- /* returns its metrics. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- /* strike_index :: The current strike index. */
- /* */
- /* glyph_index :: The current glyph index. */
- /* */
- /* load_flags :: The glyph load flags (the code checks for the flag */
- /* FT_LOAD_CROP_BITMAP). */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Output> */
- /* map :: The target pixmap. */
- /* */
- /* metrics :: 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. */
- /* */
- FT_LOCAL_DEF( 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_ULong ebdt_pos, glyph_offset;
-
- TT_SBit_Strike strike;
- TT_SBit_Range range;
-
-
- /* Check whether there is a glyph sbit for the current index */
- error = tt_find_sbit_image( face, glyph_index, strike_index,
- &range, &strike, &glyph_offset );
- if ( error )
- goto Exit;
-
- /* now, find the location of the `EBDT' table in */
- /* the font file */
- error = face->goto_table( face, TTAG_EBDT, stream, 0 );
- if ( error )
- error = face->goto_table( face, TTAG_bdat, stream, 0 );
- if ( error )
- goto Exit;
-
- ebdt_pos = FT_STREAM_POS();
-
- error = Load_SBit_Image( strike, range, ebdt_pos, glyph_offset,
- face->root.glyph, 0, 0, stream, metrics, 0 );
- if ( error )
- goto Exit;
-
- /* setup vertical metrics if needed */
- if ( strike->flags & 1 )
- {
- /* in case of a horizontal strike only */
- FT_Int advance;
-
-
- advance = strike->hori.ascender - strike->hori.descender;
-
- /* some heuristic values */
-
- metrics->vertBearingX = (FT_Char)(-metrics->width / 2 );
- metrics->vertBearingY = (FT_Char)( ( advance - metrics->height ) / 2 );
- metrics->vertAdvance = (FT_Char)( advance * 12 / 10 );
- }
-
- /* Crop the bitmap now, unless specified otherwise */
- if ( load_flags & FT_LOAD_CROP_BITMAP )
- crop_bitmap( map, metrics );
-
- Exit:
- return error;
- }
-
-#endif /* !FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/sfnt/ttsbit.h b/Build/source/libs/freetype2/src/sfnt/ttsbit.h
deleted file mode 100644
index c6067c0e3e6..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttsbit.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttsbit.h */
-/* */
-/* TrueType and OpenType embedded bitmap support (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_eblc( TT_Face face,
- FT_Stream stream );
-
- FT_LOCAL( void )
- tt_face_free_eblc( 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 );
-
-#if defined FT_CONFIG_OPTION_OLD_INTERNALS
- FT_LOCAL( FT_Error )
- tt_find_sbit_image( TT_Face face,
- FT_UInt glyph_index,
- FT_ULong strike_index,
- TT_SBit_Range *arange,
- TT_SBit_Strike *astrike,
- FT_ULong *aglyph_offset );
-
- FT_LOCAL( FT_Error )
- tt_load_sbit_metrics( FT_Stream stream,
- TT_SBit_Range range,
- TT_SBit_Metrics metrics );
-
-#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
-
- 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/Build/source/libs/freetype2/src/sfnt/ttsbit0.c b/Build/source/libs/freetype2/src/sfnt/ttsbit0.c
deleted file mode 100644
index 37c7a9bbefb..00000000000
--- a/Build/source/libs/freetype2/src/sfnt/ttsbit0.c
+++ /dev/null
@@ -1,996 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttsbit0.c */
-/* */
-/* TrueType and OpenType embedded bitmap support (body). */
-/* This is a heap-optimized version. */
-/* */
-/* Copyright 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 included by ttsbit.c */
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include "ttsbit.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_ttsbit
-
-
- static const FT_Frame_Field tt_sbit_line_metrics_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_SBit_LineMetricsRec
-
- /* no FT_FRAME_START */
- FT_FRAME_CHAR( ascender ),
- FT_FRAME_CHAR( descender ),
- FT_FRAME_BYTE( max_width ),
-
- FT_FRAME_CHAR( caret_slope_numerator ),
- FT_FRAME_CHAR( caret_slope_denominator ),
- FT_FRAME_CHAR( caret_offset ),
-
- FT_FRAME_CHAR( min_origin_SB ),
- FT_FRAME_CHAR( min_advance_SB ),
- FT_FRAME_CHAR( max_before_BL ),
- FT_FRAME_CHAR( min_after_BL ),
- FT_FRAME_CHAR( pads[0] ),
- FT_FRAME_CHAR( pads[1] ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field tt_strike_start_fields[] =
- {
-#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_SBit_StrikeRec
-
- /* no FT_FRAME_START */
- FT_FRAME_ULONG( ranges_offset ),
- FT_FRAME_SKIP_LONG,
- FT_FRAME_ULONG( num_ranges ),
- FT_FRAME_ULONG( color_ref ),
- FT_FRAME_END
- };
-
- static const FT_Frame_Field tt_strike_end_fields[] =
- {
- /* no FT_FRAME_START */
- FT_FRAME_USHORT( start_glyph ),
- FT_FRAME_USHORT( end_glyph ),
- FT_FRAME_BYTE ( x_ppem ),
- FT_FRAME_BYTE ( y_ppem ),
- FT_FRAME_BYTE ( bit_depth ),
- FT_FRAME_CHAR ( flags ),
- FT_FRAME_END
- };
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_face_load_eblc( TT_Face face,
- FT_Stream stream )
- {
- FT_Error error = SFNT_Err_Ok;
- FT_Fixed version;
- FT_ULong num_strikes, table_size;
- FT_Byte* p;
- FT_Byte* p_limit;
- FT_UInt count;
-
-
- face->sbit_num_strikes = 0;
-
- /* this table is optional */
- error = face->goto_table( face, TTAG_EBLC, stream, &table_size );
- if ( error )
- error = face->goto_table( face, TTAG_bloc, stream, &table_size );
- if ( error )
- goto Exit;
-
- if ( table_size < 8 )
- {
- FT_ERROR(( "%s: table too short!\n", "tt_face_load_sbit_strikes" ));
- error = SFNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- if ( FT_FRAME_EXTRACT( table_size, face->sbit_table ) )
- goto Exit;
-
- face->sbit_table_size = table_size;
-
- p = face->sbit_table;
- p_limit = p + table_size;
-
- version = FT_NEXT_ULONG( p );
- num_strikes = FT_NEXT_ULONG( p );
-
- if ( version != 0x00020000UL || num_strikes >= 0x10000UL )
- {
- FT_ERROR(( "%s: invalid table version!\n",
- "tt_face_load_sbit_strikes" ));
- error = SFNT_Err_Invalid_File_Format;
- goto Fail;
- }
-
- /*
- * 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)( ( p_limit - p ) / 48 );
-
- face->sbit_num_strikes = count;
-
- FT_TRACE3(( "sbit_num_strikes: %u\n", count ));
- Exit:
- return error;
-
- Fail:
- FT_FRAME_RELEASE( face->sbit_table );
- face->sbit_table_size = 0;
- goto Exit;
- }
-
-
- FT_LOCAL_DEF( void )
- tt_face_free_eblc( TT_Face face )
- {
- FT_Stream stream = face->root.stream;
-
-
- FT_FRAME_RELEASE( face->sbit_table );
- face->sbit_table_size = 0;
- 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 )
- {
- FT_Byte* strike;
-
-
- if ( strike_index >= (FT_ULong)face->sbit_num_strikes )
- return SFNT_Err_Invalid_Argument;
-
- 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] << 6; /* hori.ascender */
- metrics->descender = (FT_Char)strike[17] << 6; /* hori.descender */
- metrics->height = metrics->ascender - metrics->descender;
-
- /* XXX: Is this correct? */
- metrics->max_advance = ( (FT_Char)strike[22] + /* min_origin_SB */
- strike[18] + /* max_width */
- (FT_Char)strike[23] /* min_advance_SB */
- ) << 6;
-
- return SFNT_Err_Ok;
- }
-
-
- 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_Stream stream = face->root.stream;
- FT_ULong ebdt_size;
-
-
- error = face->goto_table( face, TTAG_EBDT, stream, &ebdt_size );
- if ( error )
- error = face->goto_table( face, TTAG_bdat, stream, &ebdt_size );
- if ( error )
- 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 = FT_STREAM_POS();
- decoder->ebdt_size = 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 = SFNT_Err_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;
-
- if ( decoder->strike_index_array > face->sbit_table_size ||
- decoder->strike_index_array + 8 * decoder->strike_index_count >
- face->sbit_table_size )
- error = SFNT_Err_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_Error error = SFNT_Err_Ok;
- FT_UInt width, height;
- FT_Bitmap* map = decoder->bitmap;
- FT_Long size;
-
-
- if ( !decoder->metrics_loaded )
- {
- error = SFNT_Err_Invalid_Argument;
- goto Exit;
- }
-
- width = decoder->metrics->width;
- height = decoder->metrics->height;
-
- map->width = (int)width;
- map->rows = (int)height;
-
- switch ( decoder->bit_depth )
- {
- case 1:
- map->pixel_mode = FT_PIXEL_MODE_MONO;
- map->pitch = ( map->width + 7 ) >> 3;
- break;
-
- case 2:
- map->pixel_mode = FT_PIXEL_MODE_GRAY2;
- map->pitch = ( map->width + 3 ) >> 2;
- break;
-
- case 4:
- map->pixel_mode = FT_PIXEL_MODE_GRAY4;
- map->pitch = ( map->width + 1 ) >> 1;
- break;
-
- case 8:
- map->pixel_mode = FT_PIXEL_MODE_GRAY;
- map->pitch = map->width;
- break;
-
- default:
- error = SFNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- size = map->rows * map->pitch;
-
- /* check that there is no empty image */
- if ( size == 0 )
- goto Exit; /* exit successfully! */
-
- 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;
-
- if ( !decoder->metrics_loaded )
- {
- 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;
-
- if ( !decoder->metrics_loaded )
- {
- metrics->vertBearingX = (FT_Char)p[0];
- metrics->vertBearingY = (FT_Char)p[1];
- metrics->vertAdvance = p[2];
- }
-
- p += 3;
- }
-
- decoder->metrics_loaded = 1;
- *pp = p;
- return 0;
-
- Fail:
- return SFNT_Err_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 );
-
- typedef FT_Error (*TT_SBitDecoder_LoadFunc)( TT_SBitDecoder decoder,
- FT_Byte* p,
- FT_Byte* plimit,
- FT_Int x_pos,
- FT_Int y_pos );
-
-
- 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_Error error = SFNT_Err_Ok;
- FT_Byte* line;
- FT_Int bit_height, bit_width, pitch, width, height, h;
- FT_Bitmap* bitmap;
-
-
- if ( !decoder->bitmap_allocated )
- {
- error = tt_sbit_decoder_alloc_bitmap( decoder );
- if ( error )
- goto Exit;
- }
-
- /* 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;
-
- if ( x_pos < 0 || x_pos + width > bit_width ||
- y_pos < 0 || y_pos + height > bit_height )
- {
- error = SFNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- if ( p + ( ( width + 7 ) >> 3 ) * height > limit )
- {
- error = SFNT_Err_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* write = line;
- FT_Int w;
-
-
- for ( w = width; w >= 8; w -= 8 )
- {
- write[0] = (FT_Byte)( write[0] | *p++ );
- write += 1;
- }
-
- if ( w > 0 )
- write[0] = (FT_Byte)( write[0] | ( *p++ & ( 0xFF00U >> w ) ) );
- }
- }
- else /* x_pos > 0 */
- {
- for ( h = height; h > 0; h--, line += pitch )
- {
- FT_Byte* write = line;
- FT_Int w;
- FT_UInt wval = 0;
-
-
- for ( w = width; w >= 8; w -= 8 )
- {
- wval = (FT_UInt)( wval | *p++ );
- write[0] = (FT_Byte)( write[0] | ( wval >> x_pos ) );
- write += 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 */
-
- write[0] = (FT_Byte)( write[0] | ( wval >> x_pos ) );
-
- if ( x_pos + w > 8 )
- {
- write++;
- wval <<= 8;
- write[0] = (FT_Byte)( write[0] | ( wval >> x_pos ) );
- }
- }
- }
-
- Exit:
- return error;
- }
-
-
- 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_Error error = SFNT_Err_Ok;
- FT_Byte* line;
- FT_Int bit_height, bit_width, pitch, width, height, h, nbits;
- FT_Bitmap* bitmap;
- FT_UShort rval;
-
-
- if ( !decoder->bitmap_allocated )
- {
- error = tt_sbit_decoder_alloc_bitmap( decoder );
- if ( error )
- goto Exit;
- }
-
- /* 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;
-
- if ( x_pos < 0 || x_pos + width > bit_width ||
- y_pos < 0 || y_pos + height > bit_height )
- {
- error = SFNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- if ( p + ( ( width * height + 7 ) >> 3 ) > limit )
- {
- error = SFNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- /* now do the blit */
- 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* write = line;
- FT_Int w = width;
-
-
- if ( x_pos )
- {
- w = ( width < 8 - x_pos ) ? width : 8 - x_pos;
-
- if ( nbits < w )
- {
- rval |= *p++;
- nbits += 8 - w;
- }
- else
- {
- rval >>= 8;
- nbits -= w;
- }
-
- *write++ |= ( ( rval >> nbits ) & 0xFF ) & ~( 0xFF << w );
- rval <<= 8;
-
- w = width - w;
- }
-
- for ( ; w >= 8; w -= 8 )
- {
- rval |= *p++;
- *write++ |= ( rval >> nbits ) & 0xFF;
-
- rval <<= 8;
- }
-
- if ( w > 0 )
- {
- if ( nbits < w )
- {
- rval |= *p++;
- *write |= ( ( rval >> nbits ) & 0xFF ) & ( 0xFF00U >> w );
- nbits += 8 - w;
-
- rval <<= 8;
- }
- else
- {
- *write |= ( ( rval >> nbits ) & 0xFF ) & ( 0xFF00U >> w );
- nbits -= w;
- }
- }
- }
-
- Exit:
- 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_Error error = SFNT_Err_Ok;
- FT_UInt num_components, nn;
-
-
- if ( p + 2 > limit )
- goto Fail;
-
- num_components = FT_NEXT_USHORT( p );
- if ( p + 4 * num_components > limit )
- goto Fail;
-
- 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 );
- if ( error )
- break;
- }
-
- Exit:
- return error;
-
- Fail:
- error = SFNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
-
- 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_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_start + glyph_size > decoder->ebdt_size )
- {
- error = SFNT_Err_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:
- error = tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 0 );
- break;
-
- case 6:
- case 7:
- case 9:
- error = tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 1 );
- break;
-
- default:
- error = SFNT_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 5:
- case 7:
- 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;
-
- default:
- goto Fail;
- }
-
- error = loader( decoder, p, p_limit, x_pos, y_pos );
- }
-
- 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 )
- {
- /*
- * First, we find the correct strike range that applies to this
- * glyph index.
- */
-
- 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;
-
-
- 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 */
- if ( decoder->eblc_base + decoder->strike_index_array + image_offset <
- decoder->eblc_base )
- goto Failure;
-
- p = decoder->eblc_base + decoder->strike_index_array + 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 */
- if ( p + ( num_glyphs + 1 ) * 4 < p )
- goto Failure;
-
- if ( p + ( num_glyphs + 1 ) * 4 > p_limit )
- 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 */
- {
- 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 */
- if ( p + 2 * num_glyphs < p )
- goto Failure;
-
- if ( p + 2 * num_glyphs > p_limit )
- 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;
-
- return tt_sbit_decoder_load_bitmap( decoder,
- image_format,
- image_start,
- image_end,
- x_pos,
- y_pos );
-
- Failure:
- return SFNT_Err_Invalid_Table;
-
- NoBitmap:
- return SFNT_Err_Invalid_Argument;
- }
-
-
- 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 )
- {
- TT_SBitDecoderRec decoder[1];
- FT_Error error;
-
- FT_UNUSED( load_flags );
- FT_UNUSED( stream );
- FT_UNUSED( map );
-
-
- error = tt_sbit_decoder_init( decoder, face, strike_index, metrics );
- if ( !error )
- {
- error = tt_sbit_decoder_load_image( decoder, glyph_index, 0, 0 );
- tt_sbit_decoder_done( decoder );
- }
-
- return error;
- }
-
-/* EOF */
diff --git a/Build/source/libs/freetype2/src/smooth/Jamfile b/Build/source/libs/freetype2/src/smooth/Jamfile
deleted file mode 100644
index 8a792df056c..00000000000
--- a/Build/source/libs/freetype2/src/smooth/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/smooth Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) smooth ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftgrays ftsmooth ;
- }
- else
- {
- _sources = smooth ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/smooth Jamfile
diff --git a/Build/source/libs/freetype2/src/smooth/ftgrays.c b/Build/source/libs/freetype2/src/smooth/ftgrays.c
deleted file mode 100644
index 320e5d830d4..00000000000
--- a/Build/source/libs/freetype2/src/smooth/ftgrays.c
+++ /dev/null
@@ -1,1987 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgrays.c */
-/* */
-/* A new `perfect' anti-aliasing renderer (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 -D_STANDALONE_ 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_
-
-#include <string.h> /* for ft_memcpy() */
-#include <setjmp.h>
-#include <limits.h>
-#define FT_UINT_MAX UINT_MAX
-
-#define ft_memset memset
-
-#define ft_setjmp setjmp
-#define ft_longjmp longjmp
-#define ft_jmp_buf jmp_buf
-
-
-#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)
-
- /* Disable the tracing mechanism for simplicity -- developers can */
- /* activate it easily by redefining these two macros. */
-#ifndef FT_ERROR
-#define FT_ERROR( x ) do ; while ( 0 ) /* nothing */
-#endif
-
-#ifndef FT_TRACE
-#define FT_TRACE( x ) do ; while ( 0 ) /* nothing */
-#endif
-
-#else /* !_STANDALONE_ */
-
-#include <ft2build.h>
-#include "ftgrays.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_OUTLINE_H
-
-#include "ftsmerrs.h"
-
-#define ErrRaster_Invalid_Mode Smooth_Err_Cannot_Render_Glyph
-#define ErrRaster_Invalid_Outline Smooth_Err_Invalid_Outline
-#define ErrRaster_Memory_Overflow Smooth_Err_Out_Of_Memory
-#define ErrRaster_Invalid_Argument Smooth_Err_Bad_Argument
-
-#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
-
- /* define this to dump debugging information */
-#define xxxDEBUG_GRAYS
-
-
- /* as usual, for the speed hungry :-) */
-
-#ifndef FT_STATIC_RASTER
-
-
-#define RAS_ARG PWorker worker
-#define RAS_ARG_ PWorker worker,
-
-#define RAS_VAR worker
-#define RAS_VAR_ worker,
-
-#define ras (*worker)
-
-
-#else /* FT_STATIC_RASTER */
-
-
-#define RAS_ARG /* empty */
-#define RAS_ARG_ /* empty */
-#define RAS_VAR /* empty */
-#define RAS_VAR_ /* empty */
-
- static TWorker ras;
-
-
-#endif /* FT_STATIC_RASTER */
-
-
- /* must be at least 6 bits! */
-#define PIXEL_BITS 8
-
-#define ONE_PIXEL ( 1L << PIXEL_BITS )
-#define PIXEL_MASK ( -1L << PIXEL_BITS )
-#define TRUNC( x ) ( (TCoord)( (x) >> PIXEL_BITS ) )
-#define SUBPIXELS( x ) ( (TPos)(x) << PIXEL_BITS )
-#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) << ( PIXEL_BITS - 6 ) )
-#define DOWNSCALE( x ) ( (x) >> ( PIXEL_BITS - 6 ) )
-#else
-#define UPSCALE( x ) ( (x) >> ( 6 - PIXEL_BITS ) )
-#define DOWNSCALE( x ) ( (x) << ( 6 - PIXEL_BITS ) )
-#endif
-
-
- /*************************************************************************/
- /* */
- /* 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 int TCoord; /* integer scanline/pixel coordinate */
- typedef long TPos; /* sub-pixel coordinate */
-
- /* determine the type used to store cell areas. This normally takes at */
- /* least PIXEL_BITS*2 + 1 bits. On 16-bit systems, we need to use */
- /* `long' instead of `int', otherwise bad things happen */
-
-#if PIXEL_BITS <= 7
-
- typedef int TArea;
-
-#else /* PIXEL_BITS >= 8 */
-
- /* approximately determine the size of integers using an ANSI-C header */
-#if FT_UINT_MAX == 0xFFFFU
- typedef long TArea;
-#else
- typedef int TArea;
-#endif
-
-#endif /* PIXEL_BITS >= 8 */
-
-
- /* maximal number of gray spans in a call to the span callback */
-#define FT_MAX_GRAY_SPANS 32
-
-
- typedef struct TCell_* PCell;
-
- typedef struct TCell_
- {
- int x;
- int cover;
- TArea area;
- PCell next;
-
- } TCell;
-
-
- typedef struct TWorker_
- {
- TCoord ex, ey;
- TPos min_ex, max_ex;
- TPos min_ey, max_ey;
- TPos count_ex, count_ey;
-
- TArea area;
- int cover;
- int invalid;
-
- PCell cells;
- int max_cells;
- int num_cells;
-
- TCoord cx, cy;
- TPos x, y;
-
- TPos last_ey;
-
- FT_Vector bez_stack[32 * 3 + 1];
- int lev_stack[32];
-
- FT_Outline outline;
- FT_Bitmap target;
- FT_BBox clip_box;
-
- FT_Span gray_spans[FT_MAX_GRAY_SPANS];
- int num_gray_spans;
-
- FT_Raster_Span_Func render_span;
- void* render_span_data;
- int span_y;
-
- int band_size;
- int band_shoot;
- int conic_level;
- int cubic_level;
-
- ft_jmp_buf jump_buffer;
-
- void* buffer;
- long buffer_size;
-
- PCell* ycells;
- int ycount;
-
- } TWorker, *PWorker;
-
-
- typedef struct TRaster_
- {
- void* buffer;
- long buffer_size;
- int band_size;
- void* memory;
- PWorker worker;
-
- } TRaster, *PRaster;
-
-
-
- /*************************************************************************/
- /* */
- /* Initialize the cells table. */
- /* */
- static void
- gray_init_cells( RAS_ARG_ void* buffer,
- long byte_size )
- {
- ras.buffer = buffer;
- ras.buffer_size = byte_size;
-
- ras.ycells = (PCell*) buffer;
- ras.cells = NULL;
- ras.max_cells = 0;
- ras.num_cells = 0;
- ras.area = 0;
- ras.cover = 0;
- ras.invalid = 1;
- }
-
-
- /*************************************************************************/
- /* */
- /* Compute the outline bounding box. */
- /* */
- static void
- gray_compute_cbox( RAS_ARG )
- {
- FT_Outline* outline = &ras.outline;
- FT_Vector* vec = outline->points;
- FT_Vector* limit = vec + outline->n_points;
-
-
- if ( outline->n_points <= 0 )
- {
- ras.min_ex = ras.max_ex = 0;
- ras.min_ey = ras.max_ey = 0;
- return;
- }
-
- ras.min_ex = ras.max_ex = vec->x;
- ras.min_ey = ras.max_ey = vec->y;
-
- vec++;
-
- for ( ; vec < limit; vec++ )
- {
- TPos x = vec->x;
- TPos y = vec->y;
-
-
- if ( x < ras.min_ex ) ras.min_ex = x;
- if ( x > ras.max_ex ) ras.max_ex = x;
- if ( y < ras.min_ey ) ras.min_ey = y;
- if ( y > ras.max_ey ) ras.max_ey = y;
- }
-
- /* truncate the bounding box to integer pixels */
- ras.min_ex = ras.min_ex >> 6;
- ras.min_ey = ras.min_ey >> 6;
- ras.max_ex = ( ras.max_ex + 63 ) >> 6;
- ras.max_ey = ( ras.max_ey + 63 ) >> 6;
- }
-
-
- /*************************************************************************/
- /* */
- /* Record the current cell in the table. */
- /* */
- static PCell
- gray_find_cell( RAS_ARG )
- {
- PCell *pcell, cell;
- int x = ras.ex;
-
-
- if ( x > ras.max_ex )
- x = ras.max_ex;
-
- pcell = &ras.ycells[ras.ey];
- for (;;)
- {
- cell = *pcell;
- if ( cell == NULL || cell->x > x )
- break;
-
- if ( cell->x == x )
- goto Exit;
-
- pcell = &cell->next;
- }
-
- if ( ras.num_cells >= ras.max_cells )
- ft_longjmp( ras.jump_buffer, 1 );
-
- cell = ras.cells + ras.num_cells++;
- cell->x = x;
- cell->area = 0;
- cell->cover = 0;
-
- cell->next = *pcell;
- *pcell = cell;
-
- Exit:
- return cell;
- }
-
-
- static void
- gray_record_cell( RAS_ARG )
- {
- if ( !ras.invalid && ( ras.area | ras.cover ) )
- {
- PCell cell = gray_find_cell( RAS_VAR );
-
-
- 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. */
-
- /* All cells that are on the left of the clipping region go to the */
- /* min_ex - 1 horizontal position. */
- ey -= ras.min_ey;
-
- if ( ex > ras.max_ex )
- ex = ras.max_ex;
-
- ex -= ras.min_ex;
- if ( ex < 0 )
- ex = -1;
-
- /* are we moving to a different cell ? */
- if ( ex != ras.ex || ey != ras.ey )
- {
- /* 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 = ( (unsigned)ey >= (unsigned)ras.count_ey ||
- ex >= ras.count_ex );
- }
-
-
- /*************************************************************************/
- /* */
- /* Start a new contour at a given cell. */
- /* */
- static void
- gray_start_cell( RAS_ARG_ TCoord ex,
- TCoord ey )
- {
- if ( ex > ras.max_ex )
- ex = (TCoord)( ras.max_ex );
-
- if ( ex < ras.min_ex )
- ex = (TCoord)( ras.min_ex - 1 );
-
- ras.area = 0;
- ras.cover = 0;
- ras.ex = ex - ras.min_ex;
- ras.ey = ey - ras.min_ey;
- ras.last_ey = SUBPIXELS( ey );
- ras.invalid = 0;
-
- gray_set_cell( RAS_VAR_ ex, ey );
- }
-
-
- /*************************************************************************/
- /* */
- /* 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, delta;
- long p, first, dx;
- int incr, lift, mod, rem;
-
-
- dx = x2 - x1;
-
- ex1 = TRUNC( x1 );
- ex2 = TRUNC( x2 );
- fx1 = (TCoord)( x1 - SUBPIXELS( ex1 ) );
- fx2 = (TCoord)( x2 - SUBPIXELS( ex2 ) );
-
- /* trivial case. Happens often */
- if ( y1 == y2 )
- {
- gray_set_cell( RAS_VAR_ ex2, ey );
- return;
- }
-
- /* everything is located in a single cell. That is easy! */
- /* */
- if ( ex1 == ex2 )
- {
- delta = y2 - y1;
- ras.area += (TArea)( fx1 + fx2 ) * delta;
- ras.cover += delta;
- return;
- }
-
- /* ok, we'll have to render a run of adjacent cells on the same */
- /* scanline... */
- /* */
- p = ( ONE_PIXEL - fx1 ) * ( y2 - y1 );
- first = ONE_PIXEL;
- incr = 1;
-
- if ( dx < 0 )
- {
- p = fx1 * ( y2 - y1 );
- first = 0;
- incr = -1;
- dx = -dx;
- }
-
- delta = (TCoord)( p / dx );
- mod = (TCoord)( p % dx );
- if ( mod < 0 )
- {
- delta--;
- mod += (TCoord)dx;
- }
-
- ras.area += (TArea)( fx1 + first ) * delta;
- ras.cover += delta;
-
- ex1 += incr;
- gray_set_cell( RAS_VAR_ ex1, ey );
- y1 += delta;
-
- if ( ex1 != ex2 )
- {
- p = ONE_PIXEL * ( y2 - y1 + delta );
- lift = (TCoord)( p / dx );
- rem = (TCoord)( p % dx );
- if ( rem < 0 )
- {
- lift--;
- rem += (TCoord)dx;
- }
-
- mod -= (int)dx;
-
- while ( ex1 != ex2 )
- {
- delta = lift;
- mod += rem;
- if ( mod >= 0 )
- {
- mod -= (TCoord)dx;
- delta++;
- }
-
- ras.area += (TArea)ONE_PIXEL * delta;
- ras.cover += delta;
- y1 += delta;
- ex1 += incr;
- gray_set_cell( RAS_VAR_ ex1, ey );
- }
- }
-
- delta = y2 - y1;
- ras.area += (TArea)( fx2 + ONE_PIXEL - first ) * delta;
- ras.cover += delta;
- }
-
-
- /*************************************************************************/
- /* */
- /* 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;
- TPos dx, dy, x, x2;
- long p, first;
- int delta, rem, mod, lift, incr;
-
-
- ey1 = TRUNC( ras.last_ey );
- ey2 = TRUNC( to_y ); /* if (ey2 >= ras.max_ey) ey2 = ras.max_ey-1; */
- fy1 = (TCoord)( ras.y - ras.last_ey );
- fy2 = (TCoord)( to_y - SUBPIXELS( ey2 ) );
-
- dx = to_x - ras.x;
- dy = to_y - ras.y;
-
- /* XXX: we should do something about the trivial case where dx == 0, */
- /* as it happens very often! */
-
- /* perform vertical clipping */
- {
- TCoord min, max;
-
-
- min = ey1;
- max = ey2;
- if ( ey1 > ey2 )
- {
- min = ey2;
- max = ey1;
- }
- if ( min >= ras.max_ey || max < ras.min_ey )
- goto End;
- }
-
- /* everything is on a single scanline */
- if ( ey1 == ey2 )
- {
- gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, to_x, fy2 );
- goto End;
- }
-
- /* vertical line - avoid calling gray_render_scanline */
- incr = 1;
-
- if ( dx == 0 )
- {
- TCoord ex = TRUNC( ras.x );
- TCoord two_fx = (TCoord)( ( ras.x - SUBPIXELS( ex ) ) << 1 );
- TPos area;
-
-
- first = ONE_PIXEL;
- if ( dy < 0 )
- {
- first = 0;
- incr = -1;
- }
-
- delta = (int)( first - fy1 );
- ras.area += (TArea)two_fx * delta;
- ras.cover += delta;
- ey1 += incr;
-
- gray_set_cell( &ras, ex, ey1 );
-
- delta = (int)( first + first - ONE_PIXEL );
- area = (TArea)two_fx * delta;
- while ( ey1 != ey2 )
- {
- ras.area += area;
- ras.cover += delta;
- ey1 += incr;
-
- gray_set_cell( &ras, ex, ey1 );
- }
-
- delta = (int)( fy2 - ONE_PIXEL + first );
- ras.area += (TArea)two_fx * delta;
- ras.cover += delta;
-
- goto End;
- }
-
- /* ok, we have to render several scanlines */
- p = ( ONE_PIXEL - fy1 ) * dx;
- first = ONE_PIXEL;
- incr = 1;
-
- if ( dy < 0 )
- {
- p = fy1 * dx;
- first = 0;
- incr = -1;
- dy = -dy;
- }
-
- delta = (int)( p / dy );
- mod = (int)( p % dy );
- if ( mod < 0 )
- {
- delta--;
- mod += (TCoord)dy;
- }
-
- x = ras.x + delta;
- gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, x, (TCoord)first );
-
- ey1 += incr;
- gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 );
-
- if ( ey1 != ey2 )
- {
- p = ONE_PIXEL * dx;
- lift = (int)( p / dy );
- rem = (int)( p % dy );
- if ( rem < 0 )
- {
- lift--;
- rem += (int)dy;
- }
- mod -= (int)dy;
-
- while ( ey1 != ey2 )
- {
- delta = lift;
- mod += rem;
- if ( mod >= 0 )
- {
- mod -= (int)dy;
- delta++;
- }
-
- x2 = x + delta;
- gray_render_scanline( RAS_VAR_ ey1, x,
- (TCoord)( ONE_PIXEL - first ), x2,
- (TCoord)first );
- x = x2;
-
- ey1 += incr;
- gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 );
- }
- }
-
- gray_render_scanline( RAS_VAR_ ey1, x,
- (TCoord)( ONE_PIXEL - first ), to_x,
- fy2 );
-
- End:
- ras.x = to_x;
- ras.y = to_y;
- ras.last_ey = SUBPIXELS( ey2 );
- }
-
-
- 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 )
- {
- TPos dx, dy;
- int top, level;
- int* levels;
- FT_Vector* arc;
-
-
- dx = DOWNSCALE( ras.x ) + to->x - ( control->x << 1 );
- if ( dx < 0 )
- dx = -dx;
- dy = DOWNSCALE( ras.y ) + to->y - ( control->y << 1 );
- if ( dy < 0 )
- dy = -dy;
- if ( dx < dy )
- dx = dy;
-
- level = 1;
- dx = dx / ras.conic_level;
- while ( dx > 0 )
- {
- dx >>= 2;
- level++;
- }
-
- /* a shortcut to speed things up */
- if ( level <= 1 )
- {
- /* we compute the mid-point directly in order to avoid */
- /* calling gray_split_conic() */
- TPos to_x, to_y, mid_x, mid_y;
-
-
- to_x = UPSCALE( to->x );
- to_y = UPSCALE( to->y );
- mid_x = ( ras.x + to_x + 2 * UPSCALE( control->x ) ) / 4;
- mid_y = ( ras.y + to_y + 2 * UPSCALE( control->y ) ) / 4;
-
- gray_render_line( RAS_VAR_ mid_x, mid_y );
- gray_render_line( RAS_VAR_ to_x, to_y );
-
- return;
- }
-
- arc = ras.bez_stack;
- levels = ras.lev_stack;
- top = 0;
- levels[0] = level;
-
- 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;
-
- while ( top >= 0 )
- {
- level = levels[top];
- if ( level > 1 )
- {
- /* check that the arc crosses the current band */
- TPos min, max, y;
-
-
- min = max = arc[0].y;
-
- y = arc[1].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
-
- y = arc[2].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
-
- if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
- goto Draw;
-
- gray_split_conic( arc );
- arc += 2;
- top++;
- levels[top] = levels[top - 1] = level - 1;
- continue;
- }
-
- Draw:
- {
- TPos to_x, to_y, mid_x, mid_y;
-
-
- to_x = arc[0].x;
- to_y = arc[0].y;
- mid_x = ( ras.x + to_x + 2 * arc[1].x ) / 4;
- mid_y = ( ras.y + to_y + 2 * arc[1].y ) / 4;
-
- gray_render_line( RAS_VAR_ mid_x, mid_y );
- gray_render_line( RAS_VAR_ to_x, to_y );
-
- top--;
- arc -= 2;
- }
- }
-
- return;
- }
-
-
- 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 )
- {
- TPos dx, dy, da, db;
- int top, level;
- int* levels;
- FT_Vector* arc;
-
-
- dx = DOWNSCALE( ras.x ) + to->x - ( control1->x << 1 );
- if ( dx < 0 )
- dx = -dx;
- dy = DOWNSCALE( ras.y ) + to->y - ( control1->y << 1 );
- if ( dy < 0 )
- dy = -dy;
- if ( dx < dy )
- dx = dy;
- da = dx;
-
- dx = DOWNSCALE( ras.x ) + to->x - 3 * ( control1->x + control2->x );
- if ( dx < 0 )
- dx = -dx;
- dy = DOWNSCALE( ras.y ) + to->y - 3 * ( control1->x + control2->y );
- if ( dy < 0 )
- dy = -dy;
- if ( dx < dy )
- dx = dy;
- db = dx;
-
- level = 1;
- da = da / ras.cubic_level;
- db = db / ras.conic_level;
- while ( da > 0 || db > 0 )
- {
- da >>= 2;
- db >>= 3;
- level++;
- }
-
- if ( level <= 1 )
- {
- TPos to_x, to_y, mid_x, mid_y;
-
-
- to_x = UPSCALE( to->x );
- to_y = UPSCALE( to->y );
- mid_x = ( ras.x + to_x +
- 3 * UPSCALE( control1->x + control2->x ) ) / 8;
- mid_y = ( ras.y + to_y +
- 3 * UPSCALE( control1->y + control2->y ) ) / 8;
-
- gray_render_line( RAS_VAR_ mid_x, mid_y );
- gray_render_line( RAS_VAR_ to_x, to_y );
- return;
- }
-
- arc = ras.bez_stack;
- 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;
-
- levels = ras.lev_stack;
- top = 0;
- levels[0] = level;
-
- while ( top >= 0 )
- {
- level = levels[top];
- if ( level > 1 )
- {
- /* check that the arc crosses the current band */
- TPos min, max, y;
-
-
- min = max = arc[0].y;
- y = arc[1].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
- y = arc[2].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
- y = arc[3].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
- if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < 0 )
- goto Draw;
- gray_split_cubic( arc );
- arc += 3;
- top ++;
- levels[top] = levels[top - 1] = level - 1;
- continue;
- }
-
- Draw:
- {
- TPos to_x, to_y, mid_x, mid_y;
-
-
- to_x = arc[0].x;
- to_y = arc[0].y;
- mid_x = ( ras.x + to_x + 3 * ( arc[1].x + arc[2].x ) ) / 8;
- mid_y = ( ras.y + to_y + 3 * ( arc[1].y + arc[2].y ) ) / 8;
-
- gray_render_line( RAS_VAR_ mid_x, mid_y );
- gray_render_line( RAS_VAR_ to_x, to_y );
- top --;
- arc -= 3;
- }
- }
-
- return;
- }
-
-
-
- static int
- gray_move_to( const FT_Vector* to,
- PWorker worker )
- {
- TPos x, y;
-
-
- /* record current cell, if any */
- gray_record_cell( worker );
-
- /* start to a new position */
- x = UPSCALE( to->x );
- y = UPSCALE( to->y );
-
- gray_start_cell( worker, TRUNC( x ), TRUNC( y ) );
-
- worker->x = x;
- worker->y = y;
- return 0;
- }
-
-
- static int
- gray_line_to( const FT_Vector* to,
- PWorker worker )
- {
- gray_render_line( worker, UPSCALE( to->x ), UPSCALE( to->y ) );
- return 0;
- }
-
-
- static int
- gray_conic_to( const FT_Vector* control,
- const FT_Vector* to,
- PWorker worker )
- {
- gray_render_conic( worker, control, to );
- return 0;
- }
-
-
- static int
- gray_cubic_to( const FT_Vector* control1,
- const FT_Vector* control2,
- const FT_Vector* to,
- PWorker worker )
- {
- gray_render_cubic( worker, control1, control2, to );
- return 0;
- }
-
-
- static void
- gray_render_span( int y,
- int count,
- const FT_Span* spans,
- PWorker worker )
- {
- unsigned char* p;
- FT_Bitmap* map = &worker->target;
-
-
- /* first of all, compute the scanline offset */
- p = (unsigned char*)map->buffer - y * map->pitch;
- if ( map->pitch >= 0 )
- p += ( map->rows - 1 ) * map->pitch;
-
- for ( ; count > 0; count--, spans++ )
- {
- unsigned char coverage = spans->coverage;
-
-
- if ( 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.
- */
- if ( spans->len >= 8 )
- FT_MEM_SET( p + spans->x, (unsigned char)coverage, spans->len );
- else
- {
- unsigned char* q = p + spans->x;
-
-
- switch ( spans->len )
- {
- case 7: *q++ = (unsigned char)coverage;
- case 6: *q++ = (unsigned char)coverage;
- case 5: *q++ = (unsigned char)coverage;
- case 4: *q++ = (unsigned char)coverage;
- case 3: *q++ = (unsigned char)coverage;
- case 2: *q++ = (unsigned char)coverage;
- case 1: *q = (unsigned char)coverage;
- default:
- ;
- }
- }
- }
- }
- }
-
-
- static void
- gray_hline( RAS_ARG_ TCoord x,
- TCoord y,
- TPos area,
- int acount )
- {
- FT_Span* span;
- int count;
- int coverage;
-
-
- /* compute the coverage line's coverage, depending on the */
- /* outline fill rule */
- /* */
- /* the coverage percentage is area/(PIXEL_BITS*PIXEL_BITS*2) */
- /* */
- coverage = (int)( area >> ( PIXEL_BITS * 2 + 1 - 8 ) );
- /* use range 0..256 */
- if ( coverage < 0 )
- coverage = -coverage;
-
- if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
- {
- coverage &= 511;
-
- if ( coverage > 256 )
- coverage = 512 - coverage;
- else if ( coverage == 256 )
- coverage = 255;
- }
- else
- {
- /* normal non-zero winding rule */
- if ( coverage >= 256 )
- coverage = 255;
- }
-
- y += (TCoord)ras.min_ey;
- x += (TCoord)ras.min_ex;
-
- /* FT_Span.x is a 16-bit short, so limit our coordinates appropriately */
- if ( x >= 32768 )
- x = 32767;
-
- if ( coverage )
- {
- /* see whether we can add this span to the current list */
- count = ras.num_gray_spans;
- span = ras.gray_spans + count - 1;
- if ( count > 0 &&
- ras.span_y == y &&
- (int)span->x + span->len == (int)x &&
- span->coverage == coverage )
- {
- span->len = (unsigned short)( span->len + acount );
- return;
- }
-
- if ( ras.span_y != y || count >= FT_MAX_GRAY_SPANS )
- {
- if ( ras.render_span && count > 0 )
- ras.render_span( ras.span_y, count, ras.gray_spans,
- ras.render_span_data );
- /* ras.render_span( span->y, ras.gray_spans, count ); */
-
-#ifdef DEBUG_GRAYS
-
- if ( ras.span_y >= 0 )
- {
- int n;
-
-
- fprintf( stderr, "y=%3d ", ras.span_y );
- span = ras.gray_spans;
- for ( n = 0; n < count; n++, span++ )
- fprintf( stderr, "[%d..%d]:%02x ",
- span->x, span->x + span->len - 1, span->coverage );
- fprintf( stderr, "\n" );
- }
-
-#endif /* DEBUG_GRAYS */
-
- ras.num_gray_spans = 0;
- ras.span_y = y;
-
- count = 0;
- span = ras.gray_spans;
- }
- else
- span++;
-
- /* add a gray span to the current list */
- span->x = (short)x;
- span->len = (unsigned short)acount;
- span->coverage = (unsigned char)coverage;
-
- ras.num_gray_spans++;
- }
- }
-
-
-#ifdef DEBUG_GRAYS
-
- /* to be called while in the debugger */
- gray_dump_cells( RAS_ARG )
- {
- int yindex;
-
-
- for ( yindex = 0; yindex < ras.ycount; yindex++ )
- {
- PCell cell;
-
-
- printf( "%3d:", yindex );
-
- for ( cell = ras.ycells[yindex]; cell != NULL; cell = cell->next )
- printf( " (%3d, c:%4d, a:%6d)", cell->x, cell->cover, cell->area );
- printf( "\n" );
- }
- }
-
-#endif /* DEBUG_GRAYS */
-
-
- static void
- gray_sweep( RAS_ARG_ const FT_Bitmap* target )
- {
- int yindex;
-
- FT_UNUSED( target );
-
-
- if ( ras.num_cells == 0 )
- return;
-
- ras.num_gray_spans = 0;
-
- for ( yindex = 0; yindex < ras.ycount; yindex++ )
- {
- PCell cell = ras.ycells[yindex];
- TCoord cover = 0;
- TCoord x = 0;
-
-
- for ( ; cell != NULL; cell = cell->next )
- {
- TArea area;
-
-
- if ( cell->x > x && cover != 0 )
- gray_hline( RAS_VAR_ x, yindex, cover * ( ONE_PIXEL * 2 ),
- cell->x - x );
-
- cover += cell->cover;
- area = cover * ( ONE_PIXEL * 2 ) - cell->area;
-
- if ( area != 0 && cell->x >= 0 )
- gray_hline( RAS_VAR_ cell->x, yindex, area, 1 );
-
- x = cell->x + 1;
- }
-
- if ( cover != 0 )
- gray_hline( RAS_VAR_ x, yindex, cover * ( ONE_PIXEL * 2 ),
- ras.count_ex - x );
- }
-
- if ( ras.render_span && ras.num_gray_spans > 0 )
- ras.render_span( ras.span_y, ras.num_gray_spans,
- ras.gray_spans, ras.render_span_data );
- }
-
-
-#ifdef _STANDALONE_
-
- /*************************************************************************/
- /* */
- /* The following function should only compile in stand_alone mode, */
- /* i.e., when building this component without the rest of FreeType. */
- /* */
- /*************************************************************************/
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Outline_Decompose */
- /* */
- /* <Description> */
- /* Walks over an outline's structure to decompose it into individual */
- /* segments and Bezier 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. */
- /* */
- /* 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
-#if 0
-#define SCALED( x ) ( ( (x) << shift ) - delta )
-#else
-#define SCALED( x ) (x)
-#endif
-
- FT_Vector v_last;
- FT_Vector v_control;
- FT_Vector v_start;
-
- FT_Vector* point;
- FT_Vector* limit;
- char* tags;
-
- int n; /* index of contour in outline */
- int first; /* index of first point in contour */
- int error;
- char tag; /* current point's state */
-
-#if 0
- int shift = func_interface->shift;
- TPos delta = func_interface->delta;
-#endif
-
-
- first = 0;
-
- for ( n = 0; n < outline->n_contours; n++ )
- {
- int last; /* index of last point in contour */
-
-
- last = outline->contours[n];
- limit = outline->points + last;
-
- v_start = outline->points[first];
- v_last = outline->points[last];
-
- v_start.x = SCALED( v_start.x );
- v_start.y = SCALED( v_start.y );
-
- 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--;
- }
-
- 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 );
-
- 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 )
- {
- 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;
-
- error = func_interface->conic_to( &v_control, &v_middle,
- user );
- if ( error )
- goto Exit;
-
- v_control = vec;
- goto Do_Conic;
- }
-
- 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 );
-
- error = func_interface->cubic_to( &vec1, &vec2, &vec, user );
- if ( error )
- goto Exit;
- continue;
- }
-
- error = func_interface->cubic_to( &vec1, &vec2, &v_start, user );
- goto Close;
- }
- }
- }
-
- /* close the contour with a line segment */
- error = func_interface->line_to( &v_start, user );
-
- Close:
- if ( error )
- goto Exit;
-
- first = last + 1;
- }
-
- return 0;
-
- Exit:
- return error;
-
- Invalid_Outline:
- return ErrRaster_Invalid_Outline;
- }
-
-#endif /* _STANDALONE_ */
-
-
- typedef struct TBand_
- {
- TPos min, max;
-
- } TBand;
-
-
- static int
- gray_convert_glyph_inner( RAS_ARG )
- {
- static
- const FT_Outline_Funcs func_interface =
- {
- (FT_Outline_MoveTo_Func) gray_move_to,
- (FT_Outline_LineTo_Func) gray_line_to,
- (FT_Outline_ConicTo_Func)gray_conic_to,
- (FT_Outline_CubicTo_Func)gray_cubic_to,
- 0,
- 0
- };
-
- volatile int error = 0;
-
-
- if ( ft_setjmp( ras.jump_buffer ) == 0 )
- {
- error = FT_Outline_Decompose( &ras.outline, &func_interface, &ras );
- gray_record_cell( RAS_VAR );
- }
- else
- error = ErrRaster_Memory_Overflow;
-
- return error;
- }
-
-
- static int
- gray_convert_glyph( RAS_ARG )
- {
- TBand bands[40];
- TBand* volatile band;
- int volatile n, num_bands;
- TPos volatile min, max, max_y;
- FT_BBox* clip;
-
-
- /* Set up state in the raster object */
- gray_compute_cbox( RAS_VAR );
-
- /* clip to target bitmap, exit if nothing to do */
- clip = &ras.clip_box;
-
- if ( ras.max_ex <= clip->xMin || ras.min_ex >= clip->xMax ||
- ras.max_ey <= clip->yMin || ras.min_ey >= clip->yMax )
- return 0;
-
- if ( ras.min_ex < clip->xMin ) ras.min_ex = clip->xMin;
- if ( ras.min_ey < clip->yMin ) ras.min_ey = clip->yMin;
-
- if ( ras.max_ex > clip->xMax ) ras.max_ex = clip->xMax;
- if ( ras.max_ey > clip->yMax ) ras.max_ey = clip->yMax;
-
- ras.count_ex = ras.max_ex - ras.min_ex;
- ras.count_ey = ras.max_ey - ras.min_ey;
-
- /* simple heuristic used to speed up the bezier decomposition -- see */
- /* the code in gray_render_conic() and gray_render_cubic() for more */
- /* details */
- ras.conic_level = 32;
- ras.cubic_level = 16;
-
- {
- int level = 0;
-
-
- if ( ras.count_ex > 24 || ras.count_ey > 24 )
- level++;
- if ( ras.count_ex > 120 || ras.count_ey > 120 )
- level++;
-
- ras.conic_level <<= level;
- ras.cubic_level <<= level;
- }
-
- /* set up vertical bands */
- num_bands = (int)( ( ras.max_ey - ras.min_ey ) / ras.band_size );
- if ( num_bands == 0 )
- num_bands = 1;
- if ( num_bands >= 39 )
- num_bands = 39;
-
- ras.band_shoot = 0;
-
- min = ras.min_ey;
- max_y = ras.max_ey;
-
- for ( n = 0; n < num_bands; n++, min = max )
- {
- max = min + ras.band_size;
- if ( n == num_bands - 1 || max > max_y )
- max = max_y;
-
- bands[0].min = min;
- bands[0].max = max;
- band = bands;
-
- while ( band >= bands )
- {
- TPos bottom, top, middle;
- int error;
-
- {
- PCell cells_max;
- int yindex;
- long cell_start, cell_end, cell_mod;
-
-
- ras.ycells = (PCell*)ras.buffer;
- ras.ycount = band->max - band->min;
-
- cell_start = sizeof ( PCell ) * ras.ycount;
- cell_mod = cell_start % sizeof ( TCell );
- if ( cell_mod > 0 )
- cell_start += sizeof ( TCell ) - cell_mod;
-
- cell_end = ras.buffer_size;
- cell_end -= cell_end % sizeof( TCell );
-
- cells_max = (PCell)( (char*)ras.buffer + cell_end );
- ras.cells = (PCell)( (char*)ras.buffer + cell_start );
- if ( ras.cells >= cells_max )
- goto ReduceBands;
-
- ras.max_cells = cells_max - ras.cells;
- if ( ras.max_cells < 2 )
- goto ReduceBands;
-
- for ( yindex = 0; yindex < ras.ycount; yindex++ )
- ras.ycells[yindex] = NULL;
- }
-
- ras.num_cells = 0;
- ras.invalid = 1;
- ras.min_ey = band->min;
- ras.max_ey = band->max;
- ras.count_ey = band->max - band->min;
-
- error = gray_convert_glyph_inner( RAS_VAR );
-
- if ( !error )
- {
- gray_sweep( RAS_VAR_ &ras.target );
- band--;
- continue;
- }
- else if ( error != ErrRaster_Memory_Overflow )
- return 1;
-
- ReduceBands:
- /* render pool overflow; we will reduce the render band by half */
- bottom = band->min;
- top = band->max;
- middle = bottom + ( ( top - bottom ) >> 1 );
-
- /* This is too complex for a single scanline; there must */
- /* be some problems. */
- if ( middle == bottom )
- {
-#ifdef DEBUG_GRAYS
- fprintf( stderr, "Rotten glyph!\n" );
-#endif
- return 1;
- }
-
- if ( bottom-top >= ras.band_size )
- ras.band_shoot++;
-
- band[1].min = bottom;
- band[1].max = middle;
- band[0].min = middle;
- band[0].max = top;
- band++;
- }
- }
-
- if ( ras.band_shoot > 8 && ras.band_size > 16 )
- ras.band_size = ras.band_size / 2;
-
- return 0;
- }
-
-
- static int
- gray_raster_render( PRaster raster,
- const FT_Raster_Params* params )
- {
- const FT_Outline* outline = (const FT_Outline*)params->source;
- const FT_Bitmap* target_map = params->target;
- PWorker worker;
-
-
- if ( !raster || !raster->buffer || !raster->buffer_size )
- return ErrRaster_Invalid_Argument;
-
- if ( !outline )
- return ErrRaster_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 ErrRaster_Invalid_Outline;
-
- if ( outline->n_points !=
- outline->contours[outline->n_contours - 1] + 1 )
- return ErrRaster_Invalid_Outline;
-
- worker = raster->worker;
-
- /* if direct mode is not set, we must have a target bitmap */
- if ( ( params->flags & FT_RASTER_FLAG_DIRECT ) == 0 )
- {
- if ( !target_map )
- return ErrRaster_Invalid_Argument;
-
- /* nothing to do */
- if ( !target_map->width || !target_map->rows )
- return 0;
-
- if ( !target_map->buffer )
- return ErrRaster_Invalid_Argument;
- }
-
- /* this version does not support monochrome rendering */
- if ( !( params->flags & FT_RASTER_FLAG_AA ) )
- return ErrRaster_Invalid_Mode;
-
- /* compute clipping box */
- if ( ( params->flags & FT_RASTER_FLAG_DIRECT ) == 0 )
- {
- /* compute clip box from target pixmap */
- ras.clip_box.xMin = 0;
- ras.clip_box.yMin = 0;
- ras.clip_box.xMax = target_map->width;
- ras.clip_box.yMax = target_map->rows;
- }
- else if ( params->flags & FT_RASTER_FLAG_CLIP )
- {
- ras.clip_box = params->clip_box;
- }
- else
- {
- ras.clip_box.xMin = -32768L;
- ras.clip_box.yMin = -32768L;
- ras.clip_box.xMax = 32767L;
- ras.clip_box.yMax = 32767L;
- }
-
- gray_init_cells( worker, raster->buffer, raster->buffer_size );
-
- ras.outline = *outline;
- ras.num_cells = 0;
- ras.invalid = 1;
- ras.band_size = raster->band_size;
- ras.num_gray_spans = 0;
-
- if ( target_map )
- ras.target = *target_map;
-
- ras.render_span = (FT_Raster_Span_Func)gray_render_span;
- ras.render_span_data = &ras;
-
- if ( params->flags & FT_RASTER_FLAG_DIRECT )
- {
- ras.render_span = (FT_Raster_Span_Func)params->gray_spans;
- ras.render_span_data = params->user;
- }
-
- return gray_convert_glyph( worker );
- }
-
-
- /**** RASTER OBJECT CREATION: In standalone mode, we simply use *****/
- /**** a static object. *****/
-
-#ifdef _STANDALONE_
-
- static int
- gray_raster_new( void* memory,
- FT_Raster* araster )
- {
- static TRaster the_raster;
-
- FT_UNUSED( memory );
-
-
- *araster = (FT_Raster)&the_raster;
- FT_MEM_ZERO( &the_raster, sizeof ( 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;
- PRaster raster;
-
-
- *araster = 0;
- if ( !FT_ALLOC( raster, sizeof ( TRaster ) ) )
- {
- raster->memory = memory;
- *araster = (FT_Raster)raster;
- }
-
- return error;
- }
-
-
- static void
- gray_raster_done( FT_Raster raster )
- {
- FT_Memory memory = (FT_Memory)((PRaster)raster)->memory;
-
-
- FT_FREE( raster );
- }
-
-#endif /* _STANDALONE_ */
-
-
- static void
- gray_raster_reset( FT_Raster raster,
- char* pool_base,
- long pool_size )
- {
- PRaster rast = (PRaster)raster;
-
-
- if ( raster )
- {
- if ( pool_base && pool_size >= (long)sizeof ( TWorker ) + 2048 )
- {
- PWorker worker = (PWorker)pool_base;
-
-
- rast->worker = worker;
- rast->buffer = pool_base +
- ( ( sizeof ( TWorker ) + sizeof ( TCell ) - 1 ) &
- ~( sizeof ( TCell ) - 1 ) );
- rast->buffer_size = (long)( ( pool_base + pool_size ) -
- (char*)rast->buffer ) &
- ~( sizeof ( TCell ) - 1 );
- rast->band_size = (int)( rast->buffer_size /
- ( sizeof ( TCell ) * 8 ) );
- }
- else
- {
- rast->buffer = NULL;
- rast->buffer_size = 0;
- rast->worker = NULL;
- }
- }
- }
-
-
- const FT_Raster_Funcs ft_grays_raster =
- {
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Raster_New_Func) gray_raster_new,
- (FT_Raster_Reset_Func) gray_raster_reset,
- (FT_Raster_Set_Mode_Func)0,
- (FT_Raster_Render_Func) gray_raster_render,
- (FT_Raster_Done_Func) gray_raster_done
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/smooth/ftgrays.h b/Build/source/libs/freetype2/src/smooth/ftgrays.h
deleted file mode 100644
index 2d409543dce..00000000000
--- a/Build/source/libs/freetype2/src/smooth/ftgrays.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftgrays.h */
-/* */
-/* FreeType smooth renderer declaration */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTGRAYS_H__
-#define __FTGRAYS_H__
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-#ifdef _STANDALONE_
-#include "ftimage.h"
-#else
-#include <ft2build.h>
-#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/Build/source/libs/freetype2/src/smooth/ftsmerrs.h b/Build/source/libs/freetype2/src/smooth/ftsmerrs.h
deleted file mode 100644
index 0c2a2ecd90b..00000000000
--- a/Build/source/libs/freetype2/src/smooth/ftsmerrs.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsmerrs.h */
-/* */
-/* smooth renderer error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/smooth/ftsmooth.c b/Build/source/libs/freetype2/src/smooth/ftsmooth.c
deleted file mode 100644
index 85d04eb458e..00000000000
--- a/Build/source/libs/freetype2/src/smooth/ftsmooth.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsmooth.c */
-/* */
-/* Anti-aliasing renderer interface (body). */
-/* */
-/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_OUTLINE_H
-#include "ftsmooth.h"
-#include "ftgrays.h"
-
-#include "ftsmerrs.h"
-
-
- /* initialize renderer -- init its raster */
- static FT_Error
- ft_smooth_init( FT_Renderer render )
- {
- FT_Library library = FT_MODULE_LIBRARY( render );
-
-
- render->clazz->raster_class->raster_reset( render->raster,
- library->raster_pool,
- library->raster_pool_size );
-
- 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 = Smooth_Err_Ok;
-
-
- if ( slot->format != render->glyph_format )
- {
- error = Smooth_Err_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_MEM_ZERO( cbox, sizeof ( *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 = NULL;
- FT_BBox cbox;
- FT_UInt width, height, height_org, width_org, pitch;
- FT_Bitmap* bitmap;
- FT_Memory memory;
- FT_Int hmul = mode == FT_RENDER_MODE_LCD;
- FT_Int vmul = mode == FT_RENDER_MODE_LCD_V;
- FT_Pos x_shift, y_shift, x_left, y_top;
-
- FT_Raster_Params params;
-
-
- /* check glyph image format */
- if ( slot->format != render->glyph_format )
- {
- error = Smooth_Err_Invalid_Argument;
- goto Exit;
- }
-
- /* check mode */
- if ( mode != required_mode )
- return Smooth_Err_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, &cbox );
-
- 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 );
-
- width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
- height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
- bitmap = &slot->bitmap;
- memory = render->root.memory;
-
- width_org = width;
- height_org = height;
-
- /* 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, depends on pixel format */
- pitch = width;
- if ( hmul )
- {
- width = width * 3;
- pitch = FT_PAD_CEIL( width, 4 );
- }
-
- if ( vmul )
- height *= 3;
-
- x_shift = (FT_Int) cbox.xMin;
- y_shift = (FT_Int) cbox.yMin;
- x_left = (FT_Int)( cbox.xMin >> 6 );
- y_top = (FT_Int)( cbox.yMax >> 6 );
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
- if ( slot->library->lcd_filter_func )
- {
- FT_Int extra = slot->library->lcd_extra;
-
-
- if ( hmul )
- {
- x_shift -= 64 * ( extra >> 1 );
- width += 3 * extra;
- pitch = FT_PAD_CEIL( width, 4 );
- x_left -= extra >> 1;
- }
-
- if ( vmul )
- {
- y_shift -= 64 * ( extra >> 1 );
- height += 3 * extra;
- y_top += extra >> 1;
- }
- }
-
-#endif
-
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->num_grays = 256;
- bitmap->width = width;
- bitmap->rows = height;
- bitmap->pitch = pitch;
-
- /* translate outline to render it into the bitmap */
- FT_Outline_Translate( outline, -x_shift, -y_shift );
-
- if ( FT_ALLOC( bitmap->buffer, (FT_ULong)pitch * height ) )
- goto Exit;
-
- slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
-
- /* 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 ( slot->library->lcd_filter_func )
- slot->library->lcd_filter_func( bitmap, mode, slot->library );
-
-#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
- /* render outline into bitmap */
- error = render->raster_render( render->raster, &params );
-
- /* 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-- )
- {
- memcpy( write, read, pitch );
- write += pitch;
-
- memcpy( write, read, pitch );
- write += pitch;
-
- memcpy( write, read, pitch );
- write += pitch;
- read += pitch;
- }
- }
-
-#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-
- FT_Outline_Translate( outline, x_shift, y_shift );
-
- if ( error )
- goto Exit;
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = x_left;
- slot->bitmap_top = y_top;
-
- Exit:
- if ( outline && origin )
- FT_Outline_Translate( outline, -origin->x, -origin->y );
-
- 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_CALLBACK_TABLE_DEF
- const FT_Renderer_Class ft_smooth_renderer_class =
- {
- {
- FT_MODULE_RENDERER,
- sizeof( FT_RendererRec ),
-
- "smooth",
- 0x10000L,
- 0x20000L,
-
- 0, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- },
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render,
- (FT_Renderer_TransformFunc)ft_smooth_transform,
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox,
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode,
-
- (FT_Raster_Funcs*) &ft_grays_raster
- };
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Renderer_Class ft_smooth_lcd_renderer_class =
- {
- {
- FT_MODULE_RENDERER,
- sizeof( FT_RendererRec ),
-
- "smooth-lcd",
- 0x10000L,
- 0x20000L,
-
- 0, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- },
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd,
- (FT_Renderer_TransformFunc)ft_smooth_transform,
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox,
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode,
-
- (FT_Raster_Funcs*) &ft_grays_raster
- };
-
-
-
- FT_CALLBACK_TABLE_DEF
- const FT_Renderer_Class ft_smooth_lcdv_renderer_class =
- {
- {
- FT_MODULE_RENDERER,
- sizeof( FT_RendererRec ),
-
- "smooth-lcdv",
- 0x10000L,
- 0x20000L,
-
- 0, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- },
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd_v,
- (FT_Renderer_TransformFunc)ft_smooth_transform,
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox,
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode,
-
- (FT_Raster_Funcs*) &ft_grays_raster
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/smooth/ftsmooth.h b/Build/source/libs/freetype2/src/smooth/ftsmooth.h
deleted file mode 100644
index 62cced44873..00000000000
--- a/Build/source/libs/freetype2/src/smooth/ftsmooth.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsmooth.h */
-/* */
-/* Anti-aliasing renderer interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTSMOOTH_H__
-#define __FTSMOOTH_H__
-
-
-#include <ft2build.h>
-#include FT_RENDER_H
-
-
-FT_BEGIN_HEADER
-
-
-#ifndef FT_CONFIG_OPTION_NO_STD_RASTER
- FT_EXPORT_VAR( const FT_Renderer_Class ) ft_std_renderer_class;
-#endif
-
-#ifndef FT_CONFIG_OPTION_NO_SMOOTH_RASTER
- FT_EXPORT_VAR( const FT_Renderer_Class ) ft_smooth_renderer_class;
-
- FT_EXPORT_VAR( const FT_Renderer_Class ) ft_smooth_lcd_renderer_class;
-
- FT_EXPORT_VAR( const FT_Renderer_Class ) ft_smooth_lcd_v_renderer_class;
-#endif
-
-
-
-FT_END_HEADER
-
-#endif /* __FTSMOOTH_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/smooth/module.mk b/Build/source/libs/freetype2/src/smooth/module.mk
deleted file mode 100644
index 05ad4ba0a89..00000000000
--- a/Build/source/libs/freetype2/src/smooth/module.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# FreeType 2 smooth renderer module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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_smooth_renderer_class$(CLOSE_DRIVER)
-$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer$(ECHO_DRIVER_DONE)
-$(OPEN_DRIVER)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_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/Build/source/libs/freetype2/src/smooth/rules.mk b/Build/source/libs/freetype2/src/smooth/rules.mk
deleted file mode 100644
index 4f27f01dba7..00000000000
--- a/Build/source/libs/freetype2/src/smooth/rules.mk
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# FreeType 2 smooth renderer module build rules
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-# smooth driver directory
-#
-SMOOTH_DIR := $(SRC_DIR)/smooth
-
-# compilation flags for the driver
-#
-SMOOTH_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SMOOTH_DIR))
-
-
-# smooth driver sources (i.e., C files)
-#
-SMOOTH_DRV_SRC := $(SMOOTH_DIR)/ftgrays.c \
- $(SMOOTH_DIR)/ftsmooth.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/Build/source/libs/freetype2/src/smooth/smooth.c b/Build/source/libs/freetype2/src/smooth/smooth.c
deleted file mode 100644
index ff6be3e4007..00000000000
--- a/Build/source/libs/freetype2/src/smooth/smooth.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/***************************************************************************/
-/* */
-/* smooth.c */
-/* */
-/* FreeType anti-aliasing rasterer module component (body only). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "ftgrays.c"
-#include "ftsmooth.c"
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/tools/Jamfile b/Build/source/libs/freetype2/src/tools/Jamfile
deleted file mode 100644
index 475161e07fd..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/tools/apinames.c b/Build/source/libs/freetype2/src/tools/apinames.c
deleted file mode 100644
index 19aec500bf2..00000000000
--- a/Build/source/libs/freetype2/src/tools/apinames.c
+++ /dev/null
@@ -1,443 +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
- *
- * 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.1"
-
-#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 */
-
-} 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 )
-{
- int nn, len, h;
- 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 == NULL )
- panic( "not enough memory" );
- }
- nm = &the_names[num_names++];
-
- nm->hash = h;
- nm->name = (char*)malloc( len+1 );
- if ( nm->name == NULL )
- 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:
- {
- /* we must omit the .dll suffix from the library name */
- char temp[512];
- char* dot;
-
- if ( dll_name == NULL )
- {
- fprintf( stderr,
- "you must provide a DLL name with the -d option !!\n" );
- exit(4);
- }
-
- dot = strchr( dll_name, '.' );
- if ( dot != NULL )
- {
- 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;
-
- 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", 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"
- "\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 == NULL )
- {
- 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 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 == NULL )
- 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/Build/source/libs/freetype2/src/tools/cordic.py b/Build/source/libs/freetype2/src/tools/cordic.py
deleted file mode 100644
index 3f80c5f09a5..00000000000
--- a/Build/source/libs/freetype2/src/tools/cordic.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# compute arctangent table for CORDIC computations in fttrigon.c
-import sys, math
-
-#units = 64*65536.0 # don't change !!
-units = 256
-scale = units/math.pi
-shrink = 1.0
-comma = ""
-
-def calc_val( x ):
- global units, shrink
- angle = math.atan(x)
- shrink = shrink * math.cos(angle)
- return angle/math.pi * units
-
-def print_val( n, x ):
- global comma
-
- lo = int(x)
- hi = lo + 1
- alo = math.atan(lo)
- ahi = math.atan(hi)
- ax = math.atan(2.0**n)
-
- errlo = abs( alo - ax )
- errhi = abs( ahi - ax )
-
- if ( errlo < errhi ):
- hi = lo
-
- sys.stdout.write( comma + repr( int(hi) ) )
- comma = ", "
-
-
-print ""
-print "table of arctan( 1/2^n ) for PI = " + repr(units/65536.0) + " units"
-
-# compute range of "i"
-r = [-1]
-r = r + range(32)
-
-for n in r:
-
- if n >= 0:
- x = 1.0/(2.0**n) # tangent value
- else:
- x = 2.0**(-n)
-
- angle = math.atan(x) # arctangent
- angle2 = angle*scale # arctangent in FT_Angle units
-
- # determine which integer value for angle gives the best tangent
- lo = int(angle2)
- hi = lo + 1
- tlo = math.tan(lo/scale)
- thi = math.tan(hi/scale)
-
- errlo = abs( tlo - x )
- errhi = abs( thi - x )
-
- angle2 = hi
- if errlo < errhi:
- angle2 = lo
-
- if angle2 <= 0:
- break
-
- sys.stdout.write( comma + repr( int(angle2) ) )
- comma = ", "
-
- shrink = shrink * math.cos( angle2/scale)
-
-
-print
-print "shrink factor = " + repr( shrink )
-print "shrink factor 2 = " + repr( shrink * (2.0**32) )
-print "expansion factor = " + repr(1/shrink)
-print ""
-
diff --git a/Build/source/libs/freetype2/src/tools/docmaker/content.py b/Build/source/libs/freetype2/src/tools/docmaker/content.py
deleted file mode 100644
index c10a4edb852..00000000000
--- a/Build/source/libs/freetype2/src/tools/docmaker/content.py
+++ /dev/null
@@ -1,582 +0,0 @@
-# Content (c) 2002, 2004, 2006, 2007, 2008 David Turner <david@freetype.org>
-#
-# This file contains routines used to parse the content of documentation
-# comment blocks and build more structured objects out of them.
-#
-
-from sources import *
-from utils import *
-import string, re
-
-
-# this regular expression is used to detect code sequences. these
-# are simply code fragments embedded in '{' and '}' like in:
-#
-# {
-# x = y + z;
-# if ( zookoo == 2 )
-# {
-# foobar();
-# }
-# }
-#
-# note that indentation of the starting and ending accolades must be
-# exactly the same. the code sequence can contain accolades at greater
-# indentation
-#
-re_code_start = re.compile( r"(\s*){\s*$" )
-re_code_end = re.compile( r"(\s*)}\s*$" )
-
-
-# this regular expression is used to isolate identifiers from
-# other text
-#
-re_identifier = re.compile( r'(\w*)' )
-
-
-# we collect macros ending in `_H'; while outputting the object data, we use
-# this info together with the object's file location to emit the appropriate
-# header file macro and name before the object itself
-#
-re_header_macro = re.compile( r'^#define\s{1,}(\w{1,}_H)\s{1,}<(.*)>' )
-
-
-#############################################################################
-#
-# 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
-
-
-
-#############################################################################
-#
-# The DocPara class is used to store "normal" text paragraph.
-#
-# '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
-
-
-
-#############################################################################
-#
-# The DocField class is used to store a list containing either DocPara or
-# DocCode objects. Each DocField also has an optional "name" which 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 = []
-
- # now analyze the markup lines to see if 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 finised the code sequence
- code = DocCode( 0, cur_lines )
- self.items.append( code )
- margin = -1
- cur_lines = []
- mode = mode_none
- else:
- # nope, 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
-
-
-
-# this regular expression is used to detect field definitions
-#
-re_field = re.compile( r"\s*(\w*|\w(\w|\.)*\w)\s*::" )
-
-
-
-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 get_start( self ):
- try:
- result = ""
- for word in self.fields[0].items[0].words:
- result = result + " " + word
- return result[1:]
- except:
- return "ERROR"
-
- def dump( self, margin ):
- print " " * margin + "<" + self.tag + ">"
- for f in self.fields:
- f.dump( " " )
- print " " * margin + "</" + self.tag + ">"
-
-
-
-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 = []
-
-
-
-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 ):
- # lookup 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( "order" )
- return
-
- def reorder( self ):
- self.block_names = sort_order_list( self.block_names, self.order )
-
-
-
-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 self.sections.has_key( section_name ):
- 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 self.sections.has_key( sec ):
- 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:
- 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 )
-
-
-
-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
-
- source = source[start:end + 1]
-
- self.code = source
-
- 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_name( self, tag_name ):
- """return the name of a given primary markup in a block"""
- try:
- m = self.get_markup( tag_name )
- return m.get_name()
- except:
- 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_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/Build/source/libs/freetype2/src/tools/docmaker/docbeauty.py b/Build/source/libs/freetype2/src/tools/docmaker/docbeauty.py
deleted file mode 100644
index 3ddf4a94a15..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/src/tools/docmaker/docmaker.py b/Build/source/libs/freetype2/src/tools/docmaker/docmaker.py
deleted file mode 100644
index 1d9de9fbff2..00000000000
--- a/Build/source/libs/freetype2/src/tools/docmaker/docmaker.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-#
-# DocMaker (c) 2002, 2004, 2008 David Turner <david@freetype.org>
-#
-# This program is a re-write of the original DocMaker took used
-# to generate the API Reference of the FreeType font engine
-# by converting in-source comments into structured HTML.
-#
-# This new version is capable of outputting XML data, as well
-# as accepts more liberal formatting options.
-#
-# It also uses regular expression matching and substitution
-# to speed things 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/Build/source/libs/freetype2/src/tools/docmaker/formatter.py b/Build/source/libs/freetype2/src/tools/docmaker/formatter.py
deleted file mode 100644
index f62ce676c15..00000000000
--- a/Build/source/libs/freetype2/src/tools/docmaker/formatter.py
+++ /dev/null
@@ -1,188 +0,0 @@
-# Formatter (c) 2002, 2004, 2007, 2008 David Turner <david@freetype.org>
-#
-
-from sources import *
-from content import *
-from utils import *
-
-# 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
-# used to output -- you guessed it -- HTML.
-#
-
-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( index_sort )
-
- def add_identifier( self, name, block ):
- if self.identifiers.has_key( name ):
- # 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:
- block = self.identifiers[name]
- 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/Build/source/libs/freetype2/src/tools/docmaker/sources.py b/Build/source/libs/freetype2/src/tools/docmaker/sources.py
deleted file mode 100644
index dcfbf7dae65..00000000000
--- a/Build/source/libs/freetype2/src/tools/docmaker/sources.py
+++ /dev/null
@@ -1,347 +0,0 @@
-# Sources (c) 2002, 2003, 2004, 2006, 2007, 2008
-# David Turner <david@freetype.org>
-#
-#
-# this file contains definitions of classes needed to decompose
-# C sources 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 used to process the content of documentation blocks
-# are not contained here, but in "content.py"
-#
-# the classes and methods found here only deal with text parsing
-# and basic documentation block extraction
-#
-
-import fileinput, re, sys, os, string
-
-
-
-################################################################
-##
-## BLOCK FORMAT PATTERN
-##
-## A simple class containing compiled regular expressions used
-## to detect potential documentation format block comments within
-## C source code
-##
-## note that the 'column' pattern must contain a group that will
-## be used to "unbox" the content of documentation comment blocks
-##
-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 look like the following:
-#
-# /************************************/
-# /* */
-# /* */
-# /* */
-# /************************************/
-#
-# we define a few regular expressions here to detect them
-#
-
-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 look like the following:
-#
-# /************************************ (at least 2 asterisks)
-# *
-# *
-# *
-# *
-# **/ (1 or more asterisks at the end)
-#
-# we define a few regular expressions here to detect them
-#
-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
-# relatively easily
-#
-re_source_block_formats = [re_source_block_format1, re_source_block_format2]
-
-
-#
-# the following regular expressions corresponds to markup tags
-# within the documentation comment blocks. they're equivalent
-# despite their different syntax
-#
-# notice how each markup tag _must_ begin a new line
-#
-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 relatively
-# easily
-#
-re_markup_tags = [re_markup_tag1, re_markup_tag2]
-
-#
-# used to detect a cross-reference, after markup tags have been stripped
-#
-re_crossref = re.compile( r'@(\w*)(.*)' )
-
-#
-# used to detect italic and bold styles in paragraph text
-#
-re_italic = re.compile( r"_(\w(\w|')*)_(.*)" ) # _italic_
-re_bold = re.compile( r"\*(\w(\w|')*)\*(.*)" ) # *bold*
-
-#
-# used to detect the end of commented source lines
-#
-re_source_sep = re.compile( r'\s*/\*\s*\*/' )
-
-#
-# used to perform cross-reference within source output
-#
-re_source_crossref = re.compile( r'(\W*)(\w*)' )
-
-#
-# a list of reserved 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
-##
-## A SourceProcessor is in charge or reading a C source file
-## and decomposing it into a series of different "SourceBlocks".
-## each one of these blocks can be made of the following data:
-##
-## - A documentation comment block that starts with "/**" and
-## whose exact format will be discussed later
-##
-## - normal sources lines, include comments
-##
-## the important fields in a text block are the following ones:
-##
-## 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 or reading a C source file
-## and decomposing it into a series of different "SourceBlock"
-## objects.
-##
-## each one of these blocks can be made of the following data:
-##
-## - A documentation comment block that starts with "/**" and
-## whose exact format will be discussed later
-##
-## - normal sources lines, include 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, clean 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 ):
- # that's 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 ):
- # that's a normal column line, add it to 'lines'
- self.lines.append( line )
- else:
- # humm.. this is 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/Build/source/libs/freetype2/src/tools/docmaker/tohtml.py b/Build/source/libs/freetype2/src/tools/docmaker/tohtml.py
deleted file mode 100644
index fffa120973d..00000000000
--- a/Build/source/libs/freetype2/src/tools/docmaker/tohtml.py
+++ /dev/null
@@ -1,593 +0,0 @@
-# ToHTML (c) 2002, 2003, 2005, 2006, 2007, 2008
-# David Turner <david@freetype.org>
-
-from sources import *
-from content import *
-from formatter import *
-
-import time
-
-
-# The following defines 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">
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF; }
-
- p { text-align: justify; }
- h1 { text-align: center; }
- li { text-align: justify; }
- td { padding: 0 0.5em 0 0.5em; }
- td.left { padding: 0 0.5em 0 0.5em;
- text-align: left; }
-
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- pre.colored { color: blue; }
-
- ul.empty { list-style-type: none; }
-</style>
-</head>
-<body>
-"""
-
-html_header_3 = """
-<table align=center><tr><td><font size=-1>[<a href="\
-"""
-
-html_header_3i = """
-<table align=center><tr><td width="100%"></td>
-<td><font size=-1>[<a href="\
-"""
-
-html_header_4 = """\
-">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-1>[<a href="\
-"""
-
-html_header_5 = """\
-">TOC</a>]</font></td></tr></table>
-<center><h1>\
-"""
-
-html_header_5t = """\
-">Index</a>]</font></td>
-<td width="100%"></td></tr></table>
-<center><h1>\
-"""
-
-html_header_6 = """\
- API Reference</h1></center>
-"""
-
-
-# The HTML footer used by all generated pages.
-html_footer = """\
-</body>
-</html>\
-"""
-
-# The header and footer used for each section.
-section_title_header = "<center><h1>"
-section_title_footer = "</h1></center>"
-
-# 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 = '<table align=center width="75%"><tr><td>'
-block_footer_start = """\
-</td></tr></table>
-<hr width="75%">
-<table align=center width="75%"><tr><td><font size=-2>[<a href="\
-"""
-block_footer_middle = """\
-">Index</a>]</font></td>
-<td width="100%"></td>
-<td><font size=-2>[<a href="\
-"""
-block_footer_end = """\
-">TOC</a>]</font></td></tr></table>
-"""
-
-# Description header/footer.
-description_header = '<table align=center width="87%"><tr><td>'
-description_footer = "</td></tr></table><br>"
-
-# Marker header/inter/footer combination.
-marker_header = '<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>'
-marker_inter = "</b></em></td></tr><tr><td>"
-marker_footer = "</td></tr></table>"
-
-# Header location header/footer.
-header_location_header = '<table align=center width="87%"><tr><td>'
-header_location_footer = "</td></tr></table><br>"
-
-# Source code extracts header/footer.
-source_header = '<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>\n'
-source_footer = "\n</pre></table><br>"
-
-# Chapter header/inter/footer.
-chapter_header = '<br><table align=center width="75%"><tr><td><h2>'
-chapter_inter = '</h2><ul class="empty"><li>'
-chapter_footer = '</li></ul></td></tr></table>'
-
-# Index footer.
-index_footer_start = """\
-<hr>
-<table><tr><td width="100%"></td>
-<td><font size=-2>[<a href="\
-"""
-index_footer_end = """\
-">TOC</a>]</font></td></tr></table>
-"""
-
-# TOC footer.
-toc_footer_start = """\
-<hr>
-<table><tr><td><font size=-2>[<a href="\
-"""
-toc_footer_end = """\
-">Index</a>]</font></td>
-<td width="100%"></td>
-</tr></table>
-"""
-
-
-# source language keyword coloration/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 will convert
-# a "<" into "&lt.", ">" into "&gt.", etc.
-def html_quote( line ):
- result = string.replace( line, "&", "&amp;" )
- result = string.replace( result, "<", "&lt;" )
- result = string.replace( result, ">", "&gt;" )
- return result
-
-
-# same as 'html_quote', but ignores left and right brackets
-def html_quote0( line ):
- return string.replace( line, "&", "&amp;" )
-
-
-def dump_html_code( lines, prefix = "" ):
- # clean the last empty lines
- l = len( self.lines )
- while l > 0 and string.strip( self.lines[l - 1] ) == "":
- l = l - 1
-
- # The code footer should be directly appended to the last code
- # line to avoid an additional blank line.
- print prefix + code_header,
- for line in self.lines[0 : l + 1]:
- print '\n' + prefix + html_quote( line ),
- print prefix + code_footer,
-
-
-
-class HtmlFormatter( Formatter ):
-
- def __init__( self, processor, project_title, file_prefix ):
- Formatter.__init__( self, processor )
-
- global html_header_1, html_header_2, html_header_3
- global html_header_4, html_header_5, 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_3 + file_prefix + "index.html" + \
- html_header_4 + file_prefix + "toc.html" + \
- html_header_5 + project_title + \
- html_header_6
-
- self.html_index_header = html_header_1 + project_title + \
- html_header_2 + \
- html_header_3i + file_prefix + "toc.html" + \
- html_header_5 + project_title + \
- html_header_6
-
- self.html_toc_header = html_header_1 + project_title + \
- html_header_2 + \
- html_header_3 + file_prefix + "index.html" + \
- html_header_5t + project_title + \
- html_header_6
-
- self.html_footer = "<center><font size=""-2"">generated on " + \
- time.asctime( time.localtime( time.time() ) ) + \
- "</font></center>" + html_footer
-
- self.columns = 3
-
- def make_section_url( self, section ):
- return self.file_prefix + section.name + ".html"
-
- def make_block_url( self, block ):
- return self.make_section_url( block.section ) + "#" + block.name
-
- def make_html_words( self, words ):
- """ convert a series of simple words into some HTML text """
- line = ""
- if words:
- line = html_quote( words[0] )
- for w in words[1:]:
- line = line + " " + html_quote( w )
-
- return line
-
- def make_html_word( self, word ):
- """analyze a simple word to detect cross-references and styling"""
- # look for cross-references
- m = re_crossref.match( word )
- if m:
- try:
- name = m.group( 1 )
- rest = m.group( 2 )
- block = self.identifiers[name]
- url = self.make_block_url( block )
- return '<a href="' + url + '">' + name + '</a>' + rest
- except:
- # we detected a cross-reference to an unknown item
- sys.stderr.write( \
- "WARNING: undefined cross reference '" + name + "'.\n" )
- return '?' + name + '?' + rest
-
- # look for italics and bolds
- m = re_italic.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 3 )
- return '<i>' + name + '</i>' + rest
-
- m = re_bold.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 3 )
- return '<b>' + name + '</b>' + rest
-
- return html_quote( word )
-
- def make_html_para( self, words ):
- """ convert words of a paragraph into tagged HTML text, handle xrefs """
- line = ""
- if words:
- line = self.make_html_word( words[0] )
- for word in words[1:]:
- line = line + " " + self.make_html_word( word )
- # 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 ) + '\n'
-
- return line + code_footer
-
- def make_html_items( self, items ):
- """ convert a field's content into some valid 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 self.identifiers.has_key( name ):
- # this is a known identifier
- block = self.identifiers[name]
- result = result + prefix + '<a href="' + \
- self.make_block_url( block ) + '">' + name + '</a>'
- 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 "<p></p>"
- print "<table cellpadding=3 border=0>"
- for field in fields:
- if len( field.name ) > 22:
- print "<tr valign=top><td colspan=0><b>" + field.name + "</b></td></tr>"
- print "<tr valign=top><td></td><td>"
- else:
- print "<tr valign=top><td><b>" + field.name + "</b></td><td>"
-
- 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
- # will 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 align=center border=0 cellpadding=0 cellspacing=0>"
- 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]
- 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 content
- #
- def toc_enter( self ):
- print self.html_toc_header
- print "<center><h1>Table of Contents</h1></center>"
-
- def toc_chapter_enter( self, chapter ):
- print chapter_header + string.join( chapter.title ) + chapter_inter
- print "<table cellpadding=5>"
-
- def toc_section_enter( self, section ):
- print '<tr valign=top><td class="left">'
- print '<a href="' + self.make_section_url( section ) + '">' + \
- section.title + '</a></td><td>'
-
- 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_header
- print section.title
- print 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 align=center cellspacing=5 cellpadding=0 border=0>"
-
- columns = width / maxwidth
- if columns < 1:
- columns = 1
-
- count = len( section.block_names )
- rows = ( count + columns - 1 ) / columns
-
- for r in range( rows ):
- line = "<tr>"
- for c in range( columns ):
- i = r + c * rows
- line = line + '<td></td><td>'
- if i < count:
- name = section.block_names[i]
- line = line + '<a href="#' + name + '">' + name + '</a>'
-
- line = line + '</td>'
- line = line + "</tr>"
- print line
-
- print "</table><br><br>"
- 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:
- print '<h4><a name="' + block.name + '">' + block.name + '</a></h4>'
-
- # 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
- print 'Defined in ' + header + '.'
- print 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/Build/source/libs/freetype2/src/tools/docmaker/utils.py b/Build/source/libs/freetype2/src/tools/docmaker/utils.py
deleted file mode 100644
index 1d96658c7d5..00000000000
--- a/Build/source/libs/freetype2/src/tools/docmaker/utils.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# Utils (c) 2002, 2004, 2007, 2008 David Turner <david@freetype.org>
-#
-
-import string, sys, os, glob
-
-# current output directory
-#
-output_dir = None
-
-
-# This function is used to sort the index. It is a simple lexicographical
-# sort, except that it places capital letters before lowercase ones.
-#
-def index_sort( s1, s2 ):
- if not s1:
- return -1
-
- if not s2:
- return 1
-
- l1 = len( s1 )
- l2 = len( s2 )
- m1 = string.lower( s1 )
- m2 = string.lower( s2 )
-
- for i in range( l1 ):
- if i >= l2 or m1[i] > m2[i]:
- return 1
-
- if m1[i] < m2[i]:
- return -1
-
- if s1[i] < s2[i]:
- return -1
-
- if s1[i] > s2[i]:
- return 1
-
- if l2 > l1:
- return -1
-
- return 0
-
-
-# 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
-
-
-# Open the standard output to a given project documentation file. Use
-# "output_dir" to determine the filename location if necessary and save the
-# old stdout 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 "close_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" )
- sys.exit( 2 )
- else:
- output_dir = None
-
-
-def file_exists( pathname ):
- """checks 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 ):
- """builds 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/Build/source/libs/freetype2/src/tools/ftrandom/Makefile b/Build/source/libs/freetype2/src/tools/ftrandom/Makefile
deleted file mode 100644
index 2e619299cdf..00000000000
--- a/Build/source/libs/freetype2/src/tools/ftrandom/Makefile
+++ /dev/null
@@ -1,35 +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.
-
-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 \
- -I $(TOP_DIR)/include
-LIBS = -lm \
- -L $(OBJ_DIR) \
- -lfreetype \
- -lz
-
-all: $(OBJ_DIR)/ftrandom
-
-$(OBJ_DIR)/ftrandom: $(SRC_DIR)/ftrandom.c $(OBJ_DIR)/libfreetype.a
- $(CC) -o $(OBJ_DIR)/ftrandom $(CFLAGS) $(SRC_DIR)/ftrandom.c $(LIBS)
-
-# EOF
diff --git a/Build/source/libs/freetype2/src/tools/ftrandom/README b/Build/source/libs/freetype2/src/tools/ftrandom/README
deleted file mode 100644
index c093f15e811..00000000000
--- a/Build/source/libs/freetype2/src/tools/ftrandom/README
+++ /dev/null
@@ -1,48 +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 and error and then test it.
-
-The FreeType tests are quite basic:
-
- For each erroneous font it
- forks off a new tester;
- initializes the library;
- opens each font in the file;
- loads each glyph;
- (optionally reviewing the contours of the glyph)
- (optionally rasterizing)
- closes the face.
-
-If the tester exits with a signal, or takes longer than 20 seconds then
-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.
-
-Arguments are:
-
- --all Test every font in the directory(ies) no matter
- what its extension (some CID-keyed fonts have no
- extension).
- --check-outlines Call FT_Outline_Decompose on each glyph.
- --dir <dir> Append <dir> to the list of directories to search
- for good fonts.
- --error-count <cnt> Introduce <cnt> single-byte errors into the
- erroneous fonts.
- --error-fraction <frac> Multiply the file size of the font by <frac> and
- introduce that many errors into the erroneous
- font file.
- --ext <ext> Add <ext> to the set of font types tested. Known
- extensions are `ttf', `otf', `ttc', `cid', `pfb',
- `pfa', `bdf', `pcf', `pfr', `fon', `otb', and
- `cff'.
- --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.
- Done in the current process so it can be debugged
- more easily.
diff --git a/Build/source/libs/freetype2/src/tools/ftrandom/ftrandom.c b/Build/source/libs/freetype2/src/tools/ftrandom/ftrandom.c
deleted file mode 100644
index fcff27bc350..00000000000
--- a/Build/source/libs/freetype2/src/tools/ftrandom/ftrandom.c
+++ /dev/null
@@ -1,659 +0,0 @@
-/* Copyright (C) 2005 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 */
-
-
-#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 <math.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 "/home/wl/freetype-testfonts"
-
- 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 int error_count = 1;
- static int error_fraction = 0;
-
- static FT_F26Dot6 font_size = 12 * 64;
-
- static struct fontlist
- {
- char* name;
- int len;
- unsigned int isbinary: 1;
- unsigned int isascii: 1;
- unsigned int ishex: 1;
-
- } *fontlist;
-
- static int fcnt;
-
-
- static int
- FT_MoveTo( const FT_Vector *to,
- void *user )
- {
- return 0;
- }
-
-
- static int
- FT_LineTo( const FT_Vector *to,
- void *user )
- {
- return 0;
- }
-
-
- static int
- FT_ConicTo( const FT_Vector *_cp,
- const FT_Vector *to,
- void *user )
- {
- return 0;
- }
-
-
- static int
- FT_CubicTo( const FT_Vector *cp1,
- const FT_Vector *cp2,
- const FT_Vector *to,
- void *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 )
- {
- int gid;
- int load_flags = FT_LOAD_DEFAULT;
-
-
- if ( check_outlines &&
- ( face->face_flags & FT_FACE_FLAG_SCALABLE ) )
- 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 &&
- ( face->face_flags & FT_FACE_FLAG_SCALABLE ) )
- {
- 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;
- int i, num;
-
-
- 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
- {
- num = face->num_faces;
- FT_Done_Face( face );
-
- for ( i = 0; i < num; ++i )
- {
- if ( !FT_New_Face( context, testfont, i, &face ) )
- TestFace( face );
- }
- }
-
- exit( 0 );
- }
-
-
- static int
- extmatch( char* filename,
- char** extensions )
- {
- int i;
- char* pt;
-
-
- if ( extensions == NULL )
- return true;
-
- pt = strrchr( filename, '.' );
- if ( pt == NULL )
- 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 != NULL )
- {
- /* 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" ) != NULL ||
- strstr( item->name, ".PFA" ) != NULL )
- 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 )
- {
- DIR* examples;
- struct dirent* ent;
-
- int i, max;
- char buffer[1025];
- struct stat statb;
-
-
- max = 0;
- fcnt = 0;
-
- for ( i = 0; fontdirs[i] != NULL; ++i )
- {
- examples = opendir( fontdirs[i] );
- if ( examples == NULL )
- {
- 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 == NULL || extmatch( buffer, extensions ) )
- {
- if ( fcnt >= max )
- {
- max += 100;
- fontlist = realloc( fontlist, max * sizeof ( struct fontlist ) );
- if ( fontlist == NULL )
- {
- 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 int
- getErrorCnt( struct fontlist* item )
- {
- if ( error_count == 0 && error_fraction == 0 )
- return 0;
-
- return error_count + ceil( 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, *new;
- int len;
- int i, err_cnt;
-
-
- good = fopen( item->name, "r" );
- if ( good == NULL )
- {
- fprintf( stderr, "Can't open `%s'\n", item->name );
- return false;
- }
-
- new = fopen( newfont, "w+" );
- if ( new == NULL )
- {
- 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, new );
-
- fclose( good );
-
- err_cnt = getErrorCnt( item );
- for ( i = 0; i < err_cnt; ++i )
- {
- fseek( new, getRandom( 0, item->len - 1 ), SEEK_SET );
-
- if ( item->isbinary )
- putc( getRandom( 0, 0xff ), new );
- else if ( item->isascii )
- putc( getRandom( 0x20, 0x7e ), new );
- else
- {
- int hex = getRandom( 0, 15 );
-
-
- if ( hex < 10 )
- hex += '0';
- else
- hex += 'A' - 10;
-
- putc( hex, new );
- }
- }
-
- if ( ferror( new ) )
- {
- fclose( new );
- unlink( newfont );
- return false;
- }
-
- fclose( new );
-
- return true;
- }
-
-
- static int child_pid;
-
- static void
- abort_test( int 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, 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 )
- {
- 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" );
- fprintf( out, " --error-count <cnt> Introduce <cnt> single byte errors into each font.\n" );
- fprintf( out, " --error-fraction <frac> Introduce <frac>*filesize single byte errors\n"
- " into each font.\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 <dir> Directory in which to place the test fonts.\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" );
- }
-
-
- int
- main( int argc,
- char** argv )
- {
- char **dirs, **exts;
- char *pt, *end;
- int dcnt = 0, ecnt = 0, rset = false, allexts = false;
- int i;
- time_t now;
- char* testfile = NULL;
-
-
- dirs = calloc( argc + 1, sizeof ( char ** ) );
- exts = calloc( argc + 1, sizeof ( char ** ) );
-
- for ( i = 1; i < argc; ++i )
- {
- pt = argv[i];
- 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;
- rset = true;
- error_count = strtol( 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 );
- }
- }
- 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 )
- exts = NULL;
- else if ( ecnt == 0 )
- exts = default_ext_list;
-
- if ( dcnt == 0 )
- dirs = default_dir_list;
-
- if ( testfile != NULL )
- ExecuteTest( testfile ); /* This should never return */
-
- time( &now );
- srandom( now );
-
- FindFonts( dirs, exts );
- mkdir( results_dir, 0755 );
-
- forever
- do_test();
-
- return 0;
- }
-
-
-/* EOF */
diff --git a/Build/source/libs/freetype2/src/tools/glnames.py b/Build/source/libs/freetype2/src/tools/glnames.py
deleted file mode 100644
index 9a6da383172..00000000000
--- a/Build/source/libs/freetype2/src/tools/glnames.py
+++ /dev/null
@@ -1,5282 +0,0 @@
-#!/usr/bin/env python
-#
-
-#
-# FreeType 2 glyph name builder
-#
-
-
-# Copyright 1996-2000, 2003, 2005, 2007 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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
-#
-# http://fonts.apple.com/TTRefMan/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/asn/developer/pdfs/tn/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 file `glyphlist.txt',
-# version 2.0, 22 Sept 2002. It is available from
-#
-# http://partners.adobe.com/asn/developer/typeforum/unicodegn.html
-# http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt
-#
-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
-"""
-
-
-# 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( " static const char " + self.master_table +
- "[" + repr( self.total ) + "] =\n" )
- write( " {\n" )
-
- line = ""
- for name in self.names:
- line += " '"
- line += string.join( ( re.findall( ".", name ) ), "','" )
- line += "', 0,\n"
-
- write( line + " };\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( " static const short " + table_name +
- "[" + macro_name + "] =\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 + "\n };\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( " static const unsigned short " + encoding_name +
- "[" + repr( len( encoding_list ) ) + "] =\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 + "\n };\n\n\n" )
-
-
-def dump_array( the_array, write, array_name ):
- """dumps a given encoding"""
-
- write( " static const unsigned char " + array_name +
- "[" + repr( len( the_array ) ) + "] =\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 + "\n };\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 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.
- */
-""" )
-
- dump_array( dict_array, write, "ft_adobe_glyph_list" )
-
- # write the lookup routine now
- #
- write( """\
- /*
- * 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;
- }
-
-""" )
-
- 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/Build/source/libs/freetype2/src/tools/test_afm.c b/Build/source/libs/freetype2/src/tools/test_afm.c
deleted file mode 100644
index d53cb332562..00000000000
--- a/Build/source/libs/freetype2/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_Int 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_UInt 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/Build/source/libs/freetype2/src/tools/test_bbox.c b/Build/source/libs/freetype2/src/tools/test_bbox.c
deleted file mode 100644
index e085c5b3d6c..00000000000
--- a/Build/source/libs/freetype2/src/tools/test_bbox.c
+++ /dev/null
@@ -1,160 +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
- };
-
-
- 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 = %5.2f cbox = [%.2f %.2f %.2f %.2f]\n",
- ((double)time0/10000.0),
- XVAL( bbox.xMin ),
- XVAL( bbox.yMin ),
- XVAL( bbox.xMax ),
- XVAL( bbox.yMax ) );
-
-
- time0 = get_time();
- for ( count = repeat; count > 0; count-- )
- FT_Outline_Get_BBox( outline, &bbox );
-
- time0 = get_time() - time0;
- printf( "time = %5.2f bbox = [%.2f %.2f %.2f %.2f]\n",
- ((double)time0/10000.0),
- XVAL( bbox.xMin ),
- XVAL( bbox.yMin ),
- XVAL( bbox.xMax ),
- XVAL( bbox.yMax ) );
- }
-
-#define REPEAT 100000L
-
- 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 );
- return 0;
- }
-
diff --git a/Build/source/libs/freetype2/src/tools/test_trig.c b/Build/source/libs/freetype2/src/tools/test_trig.c
deleted file mode 100644
index 8c8a544aa9b..00000000000
--- a/Build/source/libs/freetype2/src/tools/test_trig.c
+++ /dev/null
@@ -1,236 +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 float points of the 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 )
- {
- FT_Fixed f1, f2;
- double d1, d2;
- int i;
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
- {
- f1 = FT_Cos(i);
- d1 = f1/65536.0;
- 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 )
- {
- FT_Fixed f1, f2;
- double d1, d2;
- int i;
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
- {
- f1 = FT_Sin(i);
- d1 = f1/65536.0;
- 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 )
- {
- FT_Fixed f1, f2;
- double d1, d2;
- int i;
-
- for ( i = 0; i < FT_ANGLE_PI2-0x2000000; i += 0x10000 )
- {
- f1 = FT_Tan(i);
- d1 = f1/65536.0;
- 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 )
- {
- FT_Fixed c2, s2;
- double l, a, c1, s1;
- int i, j;
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
- {
- 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 )
- {
- FT_Vector v;
- double a, c1, s1;
- FT_Fixed c2, s2;
- int i;
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
- {
- 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 )
- {
- FT_Vector v;
- FT_Fixed l, l2;
- int i;
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
- {
- 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 )
- {
- FT_Fixed c2, s2, c4, s4;
- FT_Vector v;
- double l, ra, a, c1, s1, cra, sra, c3, s3;
- int i, j, rotate;
-
- for ( rotate = 0; rotate < FT_ANGLE_2PI; rotate += 0x10000 )
- {
- ra = rotate*SPI;
- cra = cos( ra );
- sra = sin( ra );
-
- for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
- {
- 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/Build/source/libs/freetype2/src/truetype/Jamfile b/Build/source/libs/freetype2/src/truetype/Jamfile
deleted file mode 100644
index a166909f4cc..00000000000
--- a/Build/source/libs/freetype2/src/truetype/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/truetype Jamfile
-#
-# Copyright 2001, 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) truetype ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ttdriver ttobjs ttpload ttgload ttinterp ttgxvar ;
- }
- else
- {
- _sources = truetype ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/truetype Jamfile
diff --git a/Build/source/libs/freetype2/src/truetype/module.mk b/Build/source/libs/freetype2/src/truetype/module.mk
deleted file mode 100644
index 3b05afc7fda..00000000000
--- a/Build/source/libs/freetype2/src/truetype/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 TrueType module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/truetype/rules.mk b/Build/source/libs/freetype2/src/truetype/rules.mk
deleted file mode 100644
index 74684260ed4..00000000000
--- a/Build/source/libs/freetype2/src/truetype/rules.mk
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# FreeType 2 TrueType driver configuration rules
-#
-
-
-# Copyright 1996-2000, 2001, 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.
-
-
-# TrueType driver directory
-#
-TT_DIR := $(SRC_DIR)/truetype
-
-
-# compilation flags for the driver
-#
-TT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(TT_DIR))
-
-
-# TrueType driver sources (i.e., C files)
-#
-TT_DRV_SRC := $(TT_DIR)/ttobjs.c \
- $(TT_DIR)/ttpload.c \
- $(TT_DIR)/ttgload.c \
- $(TT_DIR)/ttinterp.c \
- $(TT_DIR)/ttgxvar.c \
- $(TT_DIR)/ttdriver.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/Build/source/libs/freetype2/src/truetype/truetype.c b/Build/source/libs/freetype2/src/truetype/truetype.c
deleted file mode 100644
index b36473a72df..00000000000
--- a/Build/source/libs/freetype2/src/truetype/truetype.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/***************************************************************************/
-/* */
-/* truetype.c */
-/* */
-/* FreeType TrueType driver component (body only). */
-/* */
-/* Copyright 1996-2001, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "ttpload.c" /* tables loader */
-#include "ttgload.c" /* glyph loader */
-#include "ttobjs.c" /* object manager */
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-#include "ttinterp.c"
-#endif
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include "ttgxvar.c" /* gx distortable font */
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/ttdriver.c b/Build/source/libs/freetype2/src/truetype/ttdriver.c
deleted file mode 100644
index c2cf45298a5..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttdriver.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttdriver.c */
-/* */
-/* TrueType font driver implementation (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_TRUETYPE_IDS_H
-#include FT_SERVICE_XFREE86_NAME_H
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#endif
-
-#include FT_SERVICE_TRUETYPE_ENGINE_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
-
-#include "ttdriver.h"
-#include "ttgload.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_ttdriver
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** F A C E S ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
-#undef PAIR_TAG
-#define PAIR_TAG( left, right ) ( ( (FT_ULong)left << 16 ) | \
- (FT_ULong)right )
-
-
- /*************************************************************************/
- /* */
- /* <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;
- }
-
-
-#undef PAIR_TAG
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** 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 = TT_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 );
- }
- else
- {
- SFNT_Service sfnt = (SFNT_Service) ttface->sfnt;
- FT_Size_Metrics* metrics = &size->metrics;
-
-
- error = sfnt->load_strike_metrics( ttface, strike_index, 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 = TT_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 );
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Load_Glyph */
- /* */
- /* <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 */
- /* FTLOAD_??? 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
- Load_Glyph( 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 TT_Err_Invalid_Slot_Handle;
-
- if ( !size )
- return TT_Err_Invalid_Size_Handle;
-
- if ( !face || glyph_index >= (FT_UInt)face->num_glyphs )
- return TT_Err_Invalid_Argument;
-
- if ( load_flags & ( FT_LOAD_NO_RECURSE | FT_LOAD_NO_SCALE ) )
- {
- load_flags |= FT_LOAD_NO_HINTING |
- FT_LOAD_NO_BITMAP |
- FT_LOAD_NO_SCALE;
- }
-
- /* 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
- static const FT_Service_MultiMastersRec tt_service_gx_multi_masters =
- {
- (FT_Get_MM_Func) NULL,
- (FT_Set_MM_Design_Func) NULL,
- (FT_Set_MM_Blend_Func) TT_Set_MM_Blend,
- (FT_Get_MM_Var_Func) TT_Get_MM_Var,
- (FT_Set_Var_Design_Func)TT_Set_Var_Design
- };
-#endif
-
- static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine =
- {
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_TRUETYPE_ENGINE_TYPE_UNPATENTED
-#else
- FT_TRUETYPE_ENGINE_TYPE_PATENTED
-#endif
-
-#else /* !TT_USE_BYTECODE_INTERPRETER */
-
- FT_TRUETYPE_ENGINE_TYPE_NONE
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
- };
-
- static const FT_Service_TTGlyfRec tt_service_truetype_glyf =
- {
- (TT_Glyf_GetLocationFunc)tt_face_get_location
- };
-
- static const FT_ServiceDescRec tt_services[] =
- {
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE },
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- { FT_SERVICE_ID_MULTI_MASTERS, &tt_service_gx_multi_masters },
-#endif
- { FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine },
- { FT_SERVICE_ID_TT_GLYF, &tt_service_truetype_glyf },
- { NULL, NULL }
- };
-
-
- FT_CALLBACK_DEF( FT_Module_Interface )
- tt_get_interface( FT_Module driver, /* TT_Driver */
- const char* tt_interface )
- {
- FT_Module_Interface result;
- FT_Module sfntd;
- SFNT_Service sfnt;
-
-
- result = ft_service_list_lookup( tt_services, tt_interface );
- if ( result != NULL )
- return result;
-
- /* only return the default interface from the SFNT module */
- sfntd = FT_Get_Module( driver->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. */
-
- FT_CALLBACK_TABLE_DEF
- const FT_Driver_ClassRec tt_driver_class =
- {
- {
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
-#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_MODULE_DRIVER_HAS_HINTER,
-#else
- 0,
-#endif
-
- sizeof ( TT_DriverRec ),
-
- "truetype", /* driver name */
- 0x10000L, /* driver version == 1.0 */
- 0x20000L, /* driver requires FreeType 2.0 or above */
-
- (void*)0, /* driver specific interface */
-
- tt_driver_init,
- tt_driver_done,
- tt_get_interface,
- },
-
- sizeof ( TT_FaceRec ),
- sizeof ( TT_SizeRec ),
- sizeof ( FT_GlyphSlotRec ),
-
- tt_face_init,
- tt_face_done,
- tt_size_init,
- tt_size_done,
- tt_slot_init,
- 0, /* FT_Slot_DoneFunc */
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
- Load_Glyph,
-
- tt_get_kerning,
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
-
- tt_size_request,
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- tt_size_select
-#else
- 0 /* FT_Size_SelectFunc */
-#endif
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/ttdriver.h b/Build/source/libs/freetype2/src/truetype/ttdriver.h
deleted file mode 100644
index f6f26e4b59a..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttdriver.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttdriver.h */
-/* */
-/* High-level TrueType driver interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __TTDRIVER_H__
-#define __TTDRIVER_H__
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) tt_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* __TTDRIVER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/tterrors.h b/Build/source/libs/freetype2/src/truetype/tterrors.h
deleted file mode 100644
index d317c70e0eb..00000000000
--- a/Build/source/libs/freetype2/src/truetype/tterrors.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* tterrors.h */
-/* */
-/* TrueType error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/truetype/ttgload.c b/Build/source/libs/freetype2/src/truetype/ttgload.c
deleted file mode 100644
index ed79b932cde..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttgload.c
+++ /dev/null
@@ -1,2010 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgload.c */
-/* */
-/* TrueType Glyph Loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "ttgload.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_ttgload
-
-
- /*************************************************************************/
- /* */
- /* Composite font 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
-
-
- /*************************************************************************/
- /* */
- /* Returns the horizontal metrics in font units for a given glyph. If */
- /* `check' is true, take care of monospaced fonts by returning the */
- /* advance width maximum. */
- /* */
- static void
- Get_HMetrics( TT_Face face,
- FT_UInt idx,
- FT_Bool check,
- FT_Short* lsb,
- FT_UShort* aw )
- {
- ( (SFNT_Service)face->sfnt )->get_metrics( face, 0, idx, lsb, aw );
-
- if ( check && face->postscript.isFixedPitch )
- *aw = face->horizontal.advance_Width_Max;
- }
-
-
- /*************************************************************************/
- /* */
- /* Returns the vertical metrics in font units for a given glyph. */
- /* Greg Hitchcock from Microsoft told us that if there were no `vmtx' */
- /* table, typoAscender/Descender from the `OS/2' table would be used */
- /* instead, and if there were no `OS/2' table, use ascender/descender */
- /* from the `hhea' table. But that is not what Microsoft's rasterizer */
- /* apparently does: It uses the ppem value as the advance height, and */
- /* sets the top side bearing to be zero. */
- /* */
- /* The monospace `check' is probably not meaningful here, but we leave */
- /* it in for a consistent interface. */
- /* */
- static void
- Get_VMetrics( TT_Face face,
- FT_UInt idx,
- FT_Bool check,
- FT_Short* tsb,
- FT_UShort* ah )
- {
- FT_UNUSED( check );
-
- if ( face->vertical_info )
- ( (SFNT_Service)face->sfnt )->get_metrics( face, 1, idx, tsb, ah );
-
-#if 1 /* Empirically determined, at variance with what MS said */
-
- else
- {
- *tsb = 0;
- *ah = face->root.units_per_EM;
- }
-
-#else /* This is what MS said to do. It isn't what they do, however. */
-
- else if ( face->os2.version != 0xFFFFU )
- {
- *tsb = face->os2.sTypoAscender;
- *ah = face->os2.sTypoAscender - face->os2.sTypoDescender;
- }
- else
- {
- *tsb = face->horizontal.Ascender;
- *ah = face->horizontal.Ascender - face->horizontal.Descender;
- }
-
-#endif
-
- }
-
-
- /*************************************************************************/
- /* */
- /* Translates an array of coordinates. */
- /* */
- static void
- translate_array( FT_UInt n,
- FT_Vector* coords,
- FT_Pos delta_x,
- FT_Pos delta_y )
- {
- FT_UInt k;
-
-
- if ( delta_x )
- for ( k = 0; k < n; k++ )
- coords[k].x += delta_x;
-
- if ( delta_y )
- for ( k = 0; k < n; k++ )
- coords[k].y += delta_y;
- }
-
-
-#undef IS_HINTED
-#define IS_HINTED( flags ) ( ( flags & FT_LOAD_NO_HINTING ) == 0 )
-
-
- /*************************************************************************/
- /* */
- /* 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_TRACE5(( "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 TT_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 TT_Err_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 TT_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;
- TT_Face face = (TT_Face)load->face;
- 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_USHORT( p );
-
- if ( n_contours > 0 )
- cont[0] = prev_cont;
-
- for ( cont++; cont < cont_limit; cont++ )
- {
- cont[0] = FT_NEXT_USHORT( p );
- if ( cont[0] <= prev_cont )
- {
- /* unordered contours: this is invalid */
- error = FT_Err_Invalid_Table;
- goto Fail;
- }
- 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;
-
- /* we'd better check the contours table right now */
- outline = &gloader->current.outline;
-
- for ( cont = outline->contours + 1; cont < cont_limit; cont++ )
- if ( cont[-1] >= cont[0] )
- goto Invalid_Outline;
-
- /* reading the bytecode instructions */
- load->glyph->control_len = 0;
- load->glyph->control_data = 0;
-
- if ( p + 2 > limit )
- goto Invalid_Outline;
-
- n_ins = FT_NEXT_USHORT( p );
-
- FT_TRACE5(( " Instructions size: %u\n", n_ins ));
-
- if ( n_ins > face->max_profile.maxSizeOfInstructions )
- {
- FT_TRACE0(( "TT_Load_Simple_Glyph: Too many instructions (%d)\n",
- n_ins ));
- error = TT_Err_Too_Many_Hints;
- goto Fail;
- }
-
- if ( ( limit - p ) < n_ins )
- {
- FT_TRACE0(( "TT_Load_Simple_Glyph: Instruction count mismatch!\n" ));
- error = TT_Err_Too_Many_Hints;
- goto Fail;
- }
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- if ( IS_HINTED( load->load_flags ) )
- {
- load->glyph->control_len = n_ins;
- load->glyph->control_data = load->exec->glyphIns;
-
- FT_MEM_COPY( load->exec->glyphIns, p, (FT_Long)n_ins );
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- p += n_ins;
-
- /* reading the point tags */
- flag = (FT_Byte*)outline->tags;
- flag_limit = flag + n_points;
-
- FT_ASSERT( flag != NULL );
-
- 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;
- *flag = 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;
- *flag = f & FT_CURVE_TAG_ON;
- }
-
- outline->n_points = (FT_UShort)n_points;
- outline->n_contours = (FT_Short) n_contours;
-
- load->cursor = p;
-
- Fail:
- return error;
-
- Invalid_Outline:
- error = TT_Err_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_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 );
- }
-
- /* read transform */
- xx = yy = 0x10000L;
- xy = yx = 0;
-
- if ( subglyph->flags & WE_HAVE_A_SCALE )
- {
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- yy = xx;
- }
- else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE )
- {
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- yy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- }
- else if ( subglyph->flags & WE_HAVE_A_2X2 )
- {
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- yx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- xy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- yy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- }
-
- 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;
-
-#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 = TT_Err_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 - start_point );
- zone->n_contours = (FT_Short) ( load->outline.n_contours -
- 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 )
- {
- TT_GlyphZone zone = &loader->zone;
- FT_Pos origin;
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_UInt n_ins;
-#else
- FT_UNUSED( is_composite );
-#endif
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- n_ins = loader->glyph->control_len;
-#endif
-
- origin = zone->cur[zone->n_points - 4].x;
- origin = FT_PIX_ROUND( origin ) - origin;
- if ( origin )
- translate_array( zone->n_points, zone->cur, origin, 0 );
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- /* 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 = ((TT_Size)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 =
- ((TT_Size)loader->size)->metrics.x_scale;
- loader->exec->metrics.y_scale =
- ((TT_Size)loader->size)->metrics.y_scale;
- }
-#endif
-
- /* round pp2 and pp4 */
- zone->cur[zone->n_points - 3].x =
- FT_PIX_ROUND( zone->cur[zone->n_points - 3].x );
- 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_Bool debug;
- FT_Error error;
-
-
- error = TT_Set_CodeRange( loader->exec, tt_coderange_glyph,
- loader->exec->glyphIns, n_ins );
- if ( error )
- return error;
-
- loader->exec->is_composite = is_composite;
- loader->exec->pts = *zone;
-
- debug = FT_BOOL( !( loader->load_flags & FT_LOAD_NO_SCALE ) &&
- ((TT_Size)loader->size)->debug );
-
- error = TT_Run_Context( loader->exec, debug );
- if ( error && loader->exec->pedantic_hinting )
- return error;
- }
-
-#endif
-
- /* save glyph phantom points */
- if ( !loader->preserve_pps )
- {
- 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];
- }
-
- return TT_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 = TT_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 ( ((TT_Face)loader->face)->doblend )
- {
- /* Deltas apply to the unscaled data. */
- FT_Vector* deltas;
- FT_Memory memory = loader->face->memory;
- FT_Int i;
-
-
- error = TT_Vary_Get_Glyph_Deltas( (TT_Face)(loader->face),
- loader->glyph_index,
- &deltas,
- n_points );
- if ( error )
- return error;
-
- for ( i = 0; i < n_points; ++i )
- {
- outline->points[i].x += deltas[i].x;
- outline->points[i].y += deltas[i].y;
- }
-
- FT_FREE( deltas );
- }
-
-#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 );
- }
-
- /* scale the glyph */
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- FT_Vector* vec = outline->points;
- FT_Vector* limit = outline->points + n_points;
- FT_Fixed x_scale = ((TT_Size)loader->size)->metrics.x_scale;
- FT_Fixed y_scale = ((TT_Size)loader->size)->metrics.y_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_Vector* base_vec = gloader->base.outline.points;
- FT_UInt num_points = gloader->base.outline.n_points;
- FT_Bool have_scale;
- FT_Pos x, y;
-
-
- 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_UInt i;
-
-
- for ( i = num_base_points; i < num_points; i++ )
- FT_Vector_Transform( base_vec + i, &subglyph->transform );
- }
-
- /* get offset */
- if ( !( subglyph->flags & ARGS_ARE_XY_VALUES ) )
- {
- FT_UInt k = subglyph->arg1;
- FT_UInt l = 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 TT_Err_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 TT_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 /* 0 */
-
- /*************************************************************************/
- /* */
- /* This algorithm is a guess and works much better than the above. */
- /* */
- FT_Fixed mac_xscale = FT_SqrtFixed(
- FT_MulFix( subglyph->transform.xx,
- subglyph->transform.xx ) +
- FT_MulFix( subglyph->transform.xy,
- subglyph->transform.xy ) );
- FT_Fixed mac_yscale = FT_SqrtFixed(
- FT_MulFix( subglyph->transform.yy,
- subglyph->transform.yy ) +
- FT_MulFix( subglyph->transform.yx,
- subglyph->transform.yx ) );
-
-
- x = FT_MulFix( x, mac_xscale );
- y = FT_MulFix( y, mac_yscale );
-
-#endif /* 0 */
-
- }
-
- if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )
- {
- FT_Fixed x_scale = ((TT_Size)loader->size)->metrics.x_scale;
- FT_Fixed y_scale = ((TT_Size)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 )
- translate_array( num_points - num_base_points,
- base_vec + num_base_points,
- x, y );
-
- return TT_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;
-
-
- /* 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 */
- if ( n_ins > ((TT_Face)loader->face)->max_profile.maxSizeOfInstructions )
- {
- FT_TRACE0(( "TT_Process_Composite_Glyph: Too many instructions (%d)\n",
- n_ins ));
-
- return TT_Err_Too_Many_Hints;
- }
- else if ( n_ins == 0 )
- return TT_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 = start_point; i < loader->zone.n_points; i++ )
- loader->zone.tags[i] &= ~( FT_CURVE_TAG_TOUCH_X |
- FT_CURVE_TAG_TOUCH_Y );
-
- loader->zone.n_points += 4;
-
- return TT_Hint_Glyph( loader, 1 );
- }
-
-
- /* Calculate the four phantom points. */
- /* The first two stand for horizontal origin and advance. */
- /* The last two stand for vertical origin and advance. */
-#define TT_LOADER_SET_PP( loader ) \
- do { \
- (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 = 0; \
- (loader)->pp3.y = (loader)->top_bearing + (loader)->bbox.yMax; \
- (loader)->pp4.x = 0; \
- (loader)->pp4.y = (loader)->pp3.y - (loader)->vadvance; \
- } while ( 0 )
-
-
- /*************************************************************************/
- /* */
- /* <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_Error error;
- FT_Fixed x_scale, y_scale;
- FT_ULong offset;
- TT_Face face = (TT_Face)loader->face;
- FT_GlyphLoader gloader = loader->gloader;
- FT_Bool opened_frame = 0;
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Vector* deltas = NULL;
-#endif
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- FT_StreamRec inc_stream;
- FT_Data glyph_data;
- FT_Bool glyph_data_loaded = 0;
-#endif
-
-
- /* some fonts have an incorrect value of `maxComponentDepth', */
- /* thus we allow depth 1 to catch the majority of them */
- if ( recurse_count > 1 &&
- recurse_count > face->max_profile.maxComponentDepth )
- {
- error = TT_Err_Invalid_Composite;
- goto Exit;
- }
-
- /* check glyph index */
- if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
- {
- error = TT_Err_Invalid_Glyph_Index;
- goto Exit;
- }
-
- loader->glyph_index = glyph_index;
-
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- {
- x_scale = ((TT_Size)loader->size)->metrics.x_scale;
- y_scale = ((TT_Size)loader->size)->metrics.y_scale;
- }
- else
- {
- x_scale = 0x10000L;
- y_scale = 0x10000L;
- }
-
- /* get metrics, horizontal and vertical */
- {
- FT_Short left_bearing = 0, top_bearing = 0;
- FT_UShort advance_width = 0, advance_height = 0;
-
-
- Get_HMetrics( face, glyph_index,
- (FT_Bool)!( loader->load_flags &
- FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ),
- &left_bearing,
- &advance_width );
- Get_VMetrics( face, glyph_index,
- (FT_Bool)!( loader->load_flags &
- FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ),
- &top_bearing,
- &advance_height );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- /* If this is an incrementally loaded font see if 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 metrics;
-
-
- metrics.bearing_x = left_bearing;
- metrics.bearing_y = 0;
- metrics.advance = advance_width;
- error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
- face->root.internal->incremental_interface->object,
- glyph_index, FALSE, &metrics );
- if ( error )
- goto Exit;
- left_bearing = (FT_Short)metrics.bearing_x;
- advance_width = (FT_UShort)metrics.advance;
-
-#if 0
-
- /* GWW: Do I do the same for vertical metrics? */
- metrics.bearing_x = 0;
- metrics.bearing_y = top_bearing;
- metrics.advance = advance_height;
- error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
- face->root.internal->incremental_interface->object,
- glyph_index, TRUE, &metrics );
- if ( error )
- goto Exit;
- top_bearing = (FT_Short)metrics.bearing_y;
- advance_height = (FT_UShort)metrics.advance;
-
-#endif /* 0 */
-
- }
-
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
-
- 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;
- }
- }
-
- /* 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_MEM_ZERO( &inc_stream, sizeof ( inc_stream ) );
- FT_Stream_OpenMemory( &inc_stream,
- glyph_data.pointer, 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 )
- {
- error = face->access_glyph_frame( loader, glyph_index,
- loader->glyf_offset + offset,
- loader->byte_len );
- if ( error )
- goto Exit;
-
- opened_frame = 1;
-
- /* read first glyph header */
- error = face->read_glyph_header( loader );
- if ( error )
- 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;
-
- TT_LOADER_SET_PP( loader );
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
- if ( ((TT_Face)(loader->face))->doblend )
- {
- /* this must be done before scaling */
- FT_Memory memory = loader->face->memory;
-
-
- error = TT_Vary_Get_Glyph_Deltas( (TT_Face)(loader->face),
- glyph_index, &deltas, 4 );
- if ( error )
- goto Exit;
-
- loader->pp1.x += deltas[0].x; loader->pp1.y += deltas[0].y;
- loader->pp2.x += deltas[1].x; loader->pp2.y += deltas[1].y;
- loader->pp3.x += deltas[2].x; loader->pp3.y += deltas[2].y;
- loader->pp4.x += deltas[3].x; loader->pp4.y += deltas[3].y;
-
- FT_FREE( deltas );
- }
-
-#endif
-
- 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 );
- loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
- loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
- }
-
- error = TT_Err_Ok;
- goto Exit;
- }
-
- TT_LOADER_SET_PP( loader );
-
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
-
- /* 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_UInt start_point;
- FT_UInt start_contour;
- FT_ULong ins_pos; /* position of composite instructions, if any */
-
-
- start_point = gloader->base.outline.n_points;
- start_contour = 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->doblend )
- {
- FT_Int i, limit;
- FT_SubGlyph subglyph;
- FT_Memory memory = face->root.memory;
-
-
- /* this provides additional offsets */
- /* for each component's translation */
-
- if ( ( error = TT_Vary_Get_Glyph_Deltas(
- face,
- glyph_index,
- &deltas,
- gloader->current.num_subglyphs + 4 )) != 0 )
- goto Exit;
-
- subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
- limit = gloader->current.num_subglyphs;
-
- for ( i = 0; i < limit; ++i, ++subglyph )
- {
- if ( subglyph->flags & ARGS_ARE_XY_VALUES )
- {
- subglyph->arg1 += deltas[i].x;
- subglyph->arg2 += deltas[i].y;
- }
- }
-
- loader->pp1.x += deltas[i + 0].x; loader->pp1.y += deltas[i + 0].y;
- loader->pp2.x += deltas[i + 1].x; loader->pp2.y += deltas[i + 1].y;
- loader->pp3.x += deltas[i + 2].x; loader->pp3.y += deltas[i + 2].y;
- loader->pp4.x += deltas[i + 3].x; loader->pp4.y += deltas[i + 3].y;
-
- FT_FREE( deltas );
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
- 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 );
- loader->pp3.y = FT_MulFix( loader->pp3.y, y_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 = 0;
-
- 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_GlyphLoader_Add( gloader );
-
- /* read each subglyph independently */
- for ( n = 0; n < num_subglyphs; n++ )
- {
- FT_Vector pp[4];
-
-
- /* 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;
-
- num_base_points = gloader->base.outline.n_points;
-
- error = load_truetype_glyph( loader, subglyph->index,
- recurse_count + 1 );
- if ( error )
- goto Exit;
-
- /* restore subglyph pointer */
- subglyph = gloader->base.subglyphs + num_base_subgs + n;
-
- if ( !( subglyph->flags & USE_MY_METRICS ) )
- {
- loader->pp1 = pp[0];
- loader->pp2 = pp[1];
- loader->pp3 = pp[2];
- loader->pp4 = pp[3];
- }
-
- num_points = 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 */
- TT_Process_Composite_Component( loader, subglyph, start_point,
- num_base_points );
- }
-
- loader->stream = old_stream;
-
- /* 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 )
- TT_Process_Composite_Glyph( loader, start_point, start_contour );
-
- }
- }
- else
- {
- /* invalid composite count (negative but not -1) */
- error = TT_Err_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 )
- {
- FT_BBox bbox;
- TT_Face face = (TT_Face)loader->face;
- FT_Fixed y_scale;
- TT_GlyphSlot glyph = loader->glyph;
- TT_Size size = (TT_Size)loader->size;
-
-
- y_scale = 0x10000L;
- if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- y_scale = size->root.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. */
- {
- FT_Pos advance = loader->linear;
-
-
- /* the flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH was introduced to */
- /* correctly support DynaLab fonts, which have an incorrect */
- /* `advance_Width_Max' field! It is used, to my knowledge, */
- /* exclusively in the X-TrueType font server. */
- /* */
- if ( face->postscript.isFixedPitch &&
- ( loader->load_flags & FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ) == 0 )
- advance = face->horizontal.advance_Width_Max;
-
- /* we need to return the advance in font units in linearHoriAdvance, */
- /* it will be scaled later by the base layer. */
- glyph->linearHoriAdvance = advance;
- }
-
- glyph->metrics.horiBearingX = bbox.xMin;
- glyph->metrics.horiBearingY = bbox.yMax;
- glyph->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
-
- /* Now take care of vertical metrics. In the case where there is */
- /* no vertical information within the font (relatively common), make */
- /* up some metrics by `hand'... */
-
- {
- 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( 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 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 )
- {
- metrics.bearing_x = 0;
- metrics.bearing_y = top;
- metrics.advance = advance;
-
- error = incr->funcs->get_glyph_metrics( incr->object,
- glyph_index,
- TRUE,
- &metrics );
- if ( error )
- return error;
-
- top = metrics.bearing_y;
- advance = 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 = ( bbox.xMin - bbox.xMax ) / 2;
- glyph->metrics.vertBearingY = top;
- glyph->metrics.vertAdvance = advance;
- }
-
- /* adjust advance width to the value contained in the hdmx table */
- if ( !face->postscript.isFixedPitch &&
- IS_HINTED( loader->load_flags ) )
- {
- FT_Byte* widthp;
-
-
- widthp = tt_face_get_device_metrics( face,
- size->root.metrics.x_ppem,
- glyph_index );
-
- if ( widthp )
- glyph->metrics.horiAdvance = *widthp << 6;
- }
-
- /* set glyph dimensions */
- glyph->metrics.width = bbox.xMax - bbox.xMin;
- glyph->metrics.height = bbox.yMax - bbox.yMin;
-
- 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 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_Int)load_flags,
- stream,
- &glyph->bitmap,
- &metrics );
- if ( !error )
- {
- glyph->outline.n_points = 0;
- glyph->outline.n_contours = 0;
-
- glyph->metrics.width = (FT_Pos)metrics.width << 6;
- glyph->metrics.height = (FT_Pos)metrics.height << 6;
-
- glyph->metrics.horiBearingX = (FT_Pos)metrics.horiBearingX << 6;
- glyph->metrics.horiBearingY = (FT_Pos)metrics.horiBearingY << 6;
- glyph->metrics.horiAdvance = (FT_Pos)metrics.horiAdvance << 6;
-
- glyph->metrics.vertBearingX = (FT_Pos)metrics.vertBearingX << 6;
- glyph->metrics.vertBearingY = (FT_Pos)metrics.vertBearingY << 6;
- glyph->metrics.vertAdvance = (FT_Pos)metrics.vertAdvance << 6;
-
- glyph->format = FT_GLYPH_FORMAT_BITMAP;
- if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
- {
- glyph->bitmap_left = metrics.vertBearingX;
- glyph->bitmap_top = metrics.vertBearingY;
- }
- else
- {
- glyph->bitmap_left = metrics.horiBearingX;
- glyph->bitmap_top = 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 )
- {
- TT_Face face;
- FT_Stream stream;
-
-
- face = (TT_Face)glyph->face;
- stream = face->root.stream;
-
- FT_MEM_ZERO( loader, sizeof ( TT_LoaderRec ) );
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- /* load execution context */
- if ( IS_HINTED( load_flags ) )
- {
- TT_ExecContext exec;
- FT_Bool grayscale;
-
-
- if ( !size->cvt_ready )
- {
- FT_Error error = tt_size_ready_bytecode( size );
- if ( error )
- return error;
- }
-
- /* query new execution context */
- exec = size->debug ? size->context
- : ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
- if ( !exec )
- return TT_Err_Could_Not_Find_Context;
-
- grayscale =
- FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) != FT_RENDER_MODE_MONO );
-
- TT_Load_Context( exec, face, size );
-
- /* a change from mono to grayscale rendering (and vice versa) */
- /* requires a re-execution of the CVT program */
- if ( grayscale != exec->grayscale )
- {
- FT_UInt i;
-
-
- exec->grayscale = grayscale;
-
- for ( i = 0; i < size->cvt_size; i++ )
- size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );
- tt_size_run_prep( size );
- }
-
- /* see 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;
-
- exec->pedantic_hinting = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
- loader->exec = exec;
- loader->instructions = exec->glyphIns;
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- /* seek to the beginning of the glyph table -- for Type 42 fonts */
- /* the table might be accessed from a Postscript stream or something */
- /* else... */
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- if ( face->root.internal->incremental_interface )
- loader->glyf_offset = 0;
- else
-
-#endif
-
- {
- FT_Error error = face->goto_table( face, TTAG_glyf, stream, 0 );
-
-
- if ( error )
- {
- FT_ERROR(( "TT_Load_Glyph: could not access glyph table\n" ));
- return error;
- }
- loader->glyf_offset = FT_STREAM_POS();
- }
-
- /* get face's glyph loader */
- {
- FT_GlyphLoader gloader = glyph->internal->loader;
-
-
- FT_GlyphLoader_Rewind( gloader );
- loader->gloader = gloader;
- }
-
- loader->load_flags = load_flags;
-
- loader->face = (FT_Face)face;
- loader->size = (FT_Size)size;
- loader->glyph = (FT_GlyphSlot)glyph;
- loader->stream = stream;
-
- return TT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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 )
- {
- TT_Face face;
- FT_Error error;
- TT_LoaderRec loader;
-
-
- face = (TT_Face)glyph->face;
- error = TT_Err_Ok;
-
-#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->strike_index != 0xFFFFFFFFUL &&
- ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
- {
- error = load_sbit_image( size, glyph, glyph_index, load_flags );
- if ( !error )
- return TT_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 )
- return TT_Err_Invalid_Size_Handle;
-
- if ( load_flags & FT_LOAD_SBITS_ONLY )
- return TT_Err_Invalid_Argument;
-
- error = tt_loader_init( &loader, size, glyph, load_flags );
- if ( error )
- return error;
-
- 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 );
- 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;
-
- /* In case bit 1 of the `flags' field in the `head' table isn't */
- /* set, translate array so that (0,0) is the glyph's origin. */
- if ( ( face->header.Flags & 2 ) == 0 && 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 */
-
- compute_glyph_metrics( &loader, glyph_index );
- }
-
- /* 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->root.metrics.y_ppem < 24 )
- glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/ttgload.h b/Build/source/libs/freetype2/src/truetype/ttgload.h
deleted file mode 100644
index b261e97dee0..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttgload.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgload.h */
-/* */
-/* TrueType Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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( 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/Build/source/libs/freetype2/src/truetype/ttgxvar.c b/Build/source/libs/freetype2/src/truetype/ttgxvar.c
deleted file mode 100644
index 0b3adbccf4b..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttgxvar.c
+++ /dev/null
@@ -1,1539 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgxvar.c */
-/* */
-/* TrueType GX Font Variation loader */
-/* */
-/* Copyright 2004, 2005, 2006, 2007, 2008 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 */
-/* */
-/* http://developer.apple.com/fonts/TTRefMan/RM06/Chap6[fgca]var.html */
-/* */
-/* The documentation for `fvar' is inconsistent. At one point it says */
-/* that `countSizePairs' should be 3, at another point 2. It should be 2. */
-/* */
-/* 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_IDS_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_MULTIPLE_MASTERS_H
-
-#include "ttdriver.h"
-#include "ttpload.h"
-#include "ttgxvar.h"
-
-#include "tterrors.h"
-
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-
-
-#define FT_Stream_FTell( stream ) \
- ( (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. */
- /* */
-#define ALL_POINTS (FT_UShort*)( -1 )
-
-
- enum
- {
- GX_PT_POINTS_ARE_WORDS = 0x80,
- GX_PT_POINT_RUN_COUNT_MASK = 0x7F
- };
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* <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_UInt *point_cnt )
- {
- FT_UShort *points;
- FT_Int n;
- FT_Int runcnt;
- FT_Int i;
- FT_Int j;
- FT_Int first;
- FT_Memory memory = stream->memory;
- FT_Error error = TT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- *point_cnt = n = FT_GET_BYTE();
- if ( n == 0 )
- return ALL_POINTS;
-
- if ( n & GX_PT_POINTS_ARE_WORDS )
- n = FT_GET_BYTE() | ( ( n & GX_PT_POINT_RUN_COUNT_MASK ) << 8 );
-
- if ( FT_NEW_ARRAY( points, n ) )
- return NULL;
-
- i = 0;
- while ( i < n )
- {
- runcnt = FT_GET_BYTE();
- if ( runcnt & GX_PT_POINTS_ARE_WORDS )
- {
- runcnt = runcnt & GX_PT_POINT_RUN_COUNT_MASK;
- first = points[i++] = FT_GET_USHORT();
-
- /* first point not included in runcount */
- for ( j = 0; j < runcnt; ++j )
- points[i++] = (FT_UShort)( first += FT_GET_USHORT() );
- }
- else
- {
- first = points[i++] = FT_GET_BYTE();
-
- for ( j = 0; j < runcnt; ++j )
- points[i++] = (FT_UShort)( first += FT_GET_BYTE() );
- }
- }
-
- return points;
- }
-
-
- enum
- {
- GX_DT_DELTAS_ARE_ZERO = 0x80,
- GX_DT_DELTAS_ARE_WORDS = 0x40,
- GX_DT_DELTA_RUN_COUNT_MASK = 0x3F
- };
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* delta_cnt :: The number of 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_Int delta_cnt )
- {
- FT_Short *deltas;
- FT_Int runcnt;
- FT_Int i;
- FT_Int j;
- FT_Memory memory = stream->memory;
- FT_Error error = TT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- if ( FT_NEW_ARRAY( deltas, delta_cnt ) )
- return NULL;
-
- i = 0;
- while ( i < delta_cnt )
- {
- runcnt = FT_GET_BYTE();
- if ( runcnt & GX_DT_DELTAS_ARE_ZERO )
- {
- /* runcnt zeroes get added */
- for ( j = 0;
- j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) && i < delta_cnt;
- ++j )
- deltas[i++] = 0;
- }
- else if ( runcnt & GX_DT_DELTAS_ARE_WORDS )
- {
- /* runcnt shorts from the stack */
- for ( j = 0;
- j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) && i < delta_cnt;
- ++j )
- deltas[i++] = FT_GET_SHORT();
- }
- else
- {
- /* runcnt signed bytes from the stack */
- for ( j = 0;
- j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) && i < delta_cnt;
- ++j )
- deltas[i++] = FT_GET_CHAR();
- }
-
- if ( j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) )
- {
- /* 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 = TT_Err_Ok;
- FT_ULong version;
- FT_Long axisCount;
- FT_Int i, j;
- FT_ULong table_len;
-
- FT_UNUSED( error );
-
-
- blend->avar_checked = TRUE;
- if ( (error = face->goto_table( face, TTAG_avar, stream, &table_len )) != 0 )
- return;
-
- if ( FT_FRAME_ENTER( table_len ) )
- return;
-
- version = FT_GET_LONG();
- axisCount = FT_GET_LONG();
-
- if ( version != 0x00010000L ||
- axisCount != (FT_Long)blend->mmvar->num_axis )
- goto Exit;
-
- if ( FT_NEW_ARRAY( blend->avar_segment, axisCount ) )
- goto Exit;
-
- segment = &blend->avar_segment[0];
- for ( i = 0; i < axisCount; ++i, ++segment )
- {
- segment->pairCount = FT_GET_USHORT();
- if ( 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 )
- {
- segment->correspondence[j].fromCoord =
- FT_GET_SHORT() << 2; /* convert to Fixed */
- segment->correspondence[j].toCoord =
- FT_GET_SHORT()<<2; /* convert to Fixed */
- }
- }
-
- Exit:
- FT_FRAME_EXIT();
- }
-
-
- 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> */
- /* Parses 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
- };
-
- if ( (error = face->goto_table( face, TTAG_gvar, stream, &table_len )) != 0 )
- goto Exit;
-
- gvar_start = FT_STREAM_POS( );
- if ( FT_STREAM_READ_FIELDS( gvar_fields, &gvar_head ) )
- goto Exit;
-
- blend->tuplecount = gvar_head.globalCoordCount;
- blend->gv_glyphcnt = gvar_head.glyphCount;
- offsetToData = gvar_start + gvar_head.offsetToData;
-
- if ( gvar_head.version != (FT_Long)0x00010000L ||
- gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis )
- {
- error = TT_Err_Invalid_Table;
- goto Exit;
- }
-
- 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_LONG();
-
- 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 )
- for ( j = 0 ; j < (FT_UInt)gvar_head.axisCount; ++j )
- blend->tuplecoords[i * gvar_head.axisCount + j] =
- FT_GET_SHORT() << 2; /* convert to FT_Fixed */
-
- 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;
- FT_Fixed temp;
-
-
- apply = 0x10000L;
- for ( i = 0; i < blend->num_axis; ++i )
- {
- if ( tuple_coords[i] == 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. */
- continue;
-
- else if ( blend->normalizedcoords[i] == 0 ||
- ( blend->normalizedcoords[i] < 0 && tuple_coords[i] > 0 ) ||
- ( blend->normalizedcoords[i] > 0 && tuple_coords[i] < 0 ) )
- {
- apply = 0;
- break;
- }
-
- else if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
- /* not an intermediate tuple */
- apply = FT_MulDiv( apply,
- blend->normalizedcoords[i] > 0
- ? blend->normalizedcoords[i]
- : -blend->normalizedcoords[i],
- 0x10000L );
-
- else if ( blend->normalizedcoords[i] <= im_start_coords[i] ||
- blend->normalizedcoords[i] >= im_end_coords[i] )
- {
- apply = 0;
- break;
- }
-
- else if ( blend->normalizedcoords[i] < tuple_coords[i] )
- {
- temp = FT_MulDiv( blend->normalizedcoords[i] - im_start_coords[i],
- 0x10000L,
- tuple_coords[i] - im_start_coords[i]);
- apply = FT_MulDiv( apply, temp, 0x10000L );
- }
-
- else
- {
- temp = FT_MulDiv( im_end_coords[i] - blend->normalizedcoords[i],
- 0x10000L,
- im_end_coords[i] - tuple_coords[i] );
- apply = FT_MulDiv( apply, temp, 0x10000L );
- }
- }
-
- return apply;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** MULTIPLE MASTERS SERVICE FUNCTIONS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- typedef struct GX_FVar_Head_
- {
- FT_Long version;
- FT_UShort offsetToData;
- FT_UShort countSizePairs;
- FT_UShort axisCount;
- FT_UShort axisSize;
- FT_UShort instanceCount;
- FT_UShort instanceSize;
-
- } GX_FVar_Head;
-
-
- typedef struct fvar_axis_
- {
- FT_ULong axisTag;
- FT_ULong minValue;
- FT_ULong defaultValue;
- FT_ULong 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. */
- /* */
- /* <InOut> */
- /* face :: The font face. */
- /* TT_Get_MM_Var initializes the blend structure. */
- /* */
- /* <Output> */
- /* master :: The `fvar' data (must be freed by caller). */
- /* */
- /* <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 = TT_Err_Ok;
- FT_ULong fvar_start;
- FT_Int i, j;
- FT_MM_Var* mmvar;
- FT_Fixed* next_coords;
- FT_String* next_name;
- FT_Var_Axis* a;
- FT_Var_Named_Style* ns;
- GX_FVar_Head fvar_head;
-
- 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_USHORT( countSizePairs ),
- 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_ULONG ( minValue ),
- FT_FRAME_ULONG ( defaultValue ),
- FT_FRAME_ULONG ( maxValue ),
- FT_FRAME_USHORT( flags ),
- FT_FRAME_USHORT( nameID ),
- FT_FRAME_END
- };
-
-
- if ( face->blend == NULL )
- {
- /* both `fvar' and `gvar' must be present */
- if ( (error = face->goto_table( face, TTAG_gvar,
- stream, &table_len )) != 0 )
- goto Exit;
-
- if ( (error = face->goto_table( face, TTAG_fvar,
- stream, &table_len )) != 0 )
- goto Exit;
-
- fvar_start = FT_STREAM_POS( );
-
- if ( FT_STREAM_READ_FIELDS( fvar_fields, &fvar_head ) )
- goto Exit;
-
- if ( fvar_head.version != (FT_Long)0x00010000L ||
- fvar_head.countSizePairs != 2 ||
- fvar_head.axisSize != 20 ||
- fvar_head.instanceSize != 4 + 4 * fvar_head.axisCount ||
- fvar_head.offsetToData + fvar_head.axisCount * 20U +
- fvar_head.instanceCount * fvar_head.instanceSize > table_len )
- {
- error = TT_Err_Invalid_Table;
- goto Exit;
- }
-
- if ( FT_NEW( face->blend ) )
- goto Exit;
-
- /* XXX: TODO - check for overflows */
- face->blend->mmvar_len =
- sizeof ( FT_MM_Var ) +
- fvar_head.axisCount * sizeof ( FT_Var_Axis ) +
- fvar_head.instanceCount * sizeof ( FT_Var_Named_Style ) +
- fvar_head.instanceCount * fvar_head.axisCount * sizeof ( FT_Fixed ) +
- 5 * fvar_head.axisCount;
-
- if ( FT_ALLOC( mmvar, face->blend->mmvar_len ) )
- goto Exit;
- face->blend->mmvar = mmvar;
-
- mmvar->num_axis =
- fvar_head.axisCount;
- mmvar->num_designs =
- (FT_UInt)-1; /* meaningless in this context; each glyph */
- /* may have a different number of designs */
- /* (or tuples, as called by Apple) */
- mmvar->num_namedstyles =
- fvar_head.instanceCount;
- mmvar->axis =
- (FT_Var_Axis*)&(mmvar[1]);
- mmvar->namedstyle =
- (FT_Var_Named_Style*)&(mmvar->axis[fvar_head.axisCount]);
-
- next_coords =
- (FT_Fixed*)&(mmvar->namedstyle[fvar_head.instanceCount]);
- for ( i = 0; i < fvar_head.instanceCount; ++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;
- }
-
- 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 Fixed */
- a->def = axis_rec.defaultValue; /* A Fixed */
- a->maximum = axis_rec.maxValue; /* A Fixed */
- 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;
-
- ++a;
- }
-
- ns = mmvar->namedstyle;
- for ( i = 0; i < fvar_head.instanceCount; ++i, ++ns )
- {
- if ( FT_FRAME_ENTER( 4L + 4L * fvar_head.axisCount ) )
- goto Exit;
-
- ns->strid = FT_GET_USHORT();
- (void) /* flags = */ FT_GET_USHORT();
-
- for ( j = 0; j < fvar_head.axisCount; ++j )
- ns->coords[j] = FT_GET_ULONG(); /* A Fixed */
-
- FT_FRAME_EXIT();
- }
- }
-
- if ( master != NULL )
- {
- 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;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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 :: Must be the axis count of the font. */
- /* */
- /* 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 )
- {
- FT_Error error = TT_Err_Ok;
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_UInt i;
- FT_Memory memory = face->root.memory;
-
- enum
- {
- mcvt_retain,
- mcvt_modify,
- mcvt_load
-
- } manageCvt;
-
-
- face->doblend = FALSE;
-
- if ( face->blend == NULL )
- {
- if ( (error = TT_Get_MM_Var( face, NULL)) != 0 )
- goto Exit;
- }
-
- blend = face->blend;
- mmvar = blend->mmvar;
-
- if ( num_coords != mmvar->num_axis )
- {
- error = TT_Err_Invalid_Argument;
- goto Exit;
- }
-
- for ( i = 0; i < num_coords; ++i )
- if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
- {
- error = TT_Err_Invalid_Argument;
- goto Exit;
- }
-
- if ( blend->glyphoffsets == NULL )
- if ( (error = ft_var_load_gvar( face )) != 0 )
- goto Exit;
-
- if ( blend->normalizedcoords == NULL )
- {
- if ( FT_NEW_ARRAY( blend->normalizedcoords, num_coords ) )
- 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
- {
- for ( i = 0;
- i < num_coords && blend->normalizedcoords[i] == coords[i];
- ++i );
- if ( i == num_coords )
- manageCvt = mcvt_retain;
- else
- manageCvt = mcvt_load;
-
- /* 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 = num_coords;
- FT_MEM_COPY( blend->normalizedcoords,
- coords,
- num_coords * sizeof ( FT_Fixed ) );
-
- face->doblend = TRUE;
-
- if ( face->cvt != NULL )
- {
- 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;
-
- 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). */
- tt_face_vary_cvt( face, face->root.stream );
- break;
-
- case mcvt_retain:
- /* The cvt table is correct for this set of coordinates. */
- break;
- }
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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 :: This must be the axis count of the font. */
- /* */
- /* 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 = TT_Err_Ok;
- FT_Fixed* normalized = NULL;
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_UInt i, j;
- FT_Var_Axis* a;
- GX_AVarSegment av;
- FT_Memory memory = face->root.memory;
-
-
- if ( face->blend == NULL )
- {
- if ( (error = TT_Get_MM_Var( face, NULL )) != 0 )
- goto Exit;
- }
-
- blend = face->blend;
- mmvar = blend->mmvar;
-
- if ( num_coords != mmvar->num_axis )
- {
- error = TT_Err_Invalid_Argument;
- goto Exit;
- }
-
- /* 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. */
-
- if ( FT_NEW_ARRAY( normalized, mmvar->num_axis ) )
- goto Exit;
-
- a = mmvar->axis;
- for ( i = 0; i < mmvar->num_axis; ++i, ++a )
- {
- if ( coords[i] > a->maximum || coords[i] < a->minimum )
- {
- error = TT_Err_Invalid_Argument;
- goto Exit;
- }
-
- if ( coords[i] < a->def )
- {
- normalized[i] = -FT_MulDiv( coords[i] - a->def,
- 0x10000L,
- a->minimum - a->def );
- }
- else if ( a->maximum == a->def )
- normalized[i] = 0;
- else
- {
- normalized[i] = FT_MulDiv( coords[i] - a->def,
- 0x10000L,
- a->maximum - a->def );
- }
- }
-
- if ( !blend->avar_checked )
- ft_var_load_avar( face );
-
- if ( blend->avar_segment != NULL )
- {
- 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 )
- {
- normalized[i] =
- FT_MulDiv(
- FT_MulDiv(
- normalized[i] - av->correspondence[j - 1].fromCoord,
- 0x10000L,
- av->correspondence[j].fromCoord -
- av->correspondence[j - 1].fromCoord ),
- av->correspondence[j].toCoord -
- av->correspondence[j - 1].toCoord,
- 0x10000L ) +
- av->correspondence[j - 1].toCoord;
- break;
- }
- }
- }
-
- error = TT_Set_MM_Blend( face, num_coords, normalized );
-
- Exit:
- FT_FREE( normalized );
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** 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 == NULL )
- {
- FT_TRACE2(( "no blend specified!\n" ));
-
- error = TT_Err_Ok;
- goto Exit;
- }
-
- if ( face->cvt == NULL )
- {
- FT_TRACE2(( "no `cvt ' table!\n" ));
-
- error = TT_Err_Ok;
- goto Exit;
- }
-
- error = face->goto_table( face, TTAG_cvar, stream, &table_len );
- if ( error )
- {
- FT_TRACE2(( "is missing!\n" ));
-
- error = TT_Err_Ok;
- goto Exit;
- }
-
- if ( FT_FRAME_ENTER( table_len ) )
- {
- error = TT_Err_Ok;
- goto Exit;
- }
-
- table_start = FT_Stream_FTell( stream );
- if ( FT_GET_LONG() != 0x00010000L )
- {
- FT_TRACE2(( "bad table version!\n" ));
-
- error = TT_Err_Ok;
- goto FExit;
- }
-
- 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 = table_start + FT_GET_USHORT();
-
- /* The documentation implies there are flags packed into the */
- /* tuplecount, but John Jenkins says that shared points don't apply */
- /* to `cvar', and no other flags are defined. */
-
- for ( i = 0; i < ( tupleCount & 0xFFF ); ++i )
- {
- FT_UInt tupleDataSize;
- FT_UInt tupleIndex;
- FT_Fixed apply;
-
-
- 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() << 2; /* 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() << 2;
- for ( j = 0; j < blend->num_axis; ++j )
- im_end_coords[j] = FT_GET_SHORT() << 2;
- }
-
- 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, &point_count );
- deltas = ft_var_readpackeddeltas( stream,
- point_count == 0 ? face->cvt_size
- : point_count );
- if ( localpoints == NULL || deltas == NULL )
- /* failure, ignore it */;
-
- else if ( localpoints == ALL_POINTS )
- {
- /* this means that there are deltas for every entry in cvt */
- for ( j = 0; j < face->cvt_size; ++j )
- face->cvt[j] = (FT_Short)( face->cvt[j] +
- FT_MulFix( deltas[j], apply ) );
- }
-
- else
- {
- for ( j = 0; j < point_count; ++j )
- {
- int pindex = localpoints[j];
-
- face->cvt[pindex] = (FT_Short)( face->cvt[pindex] +
- FT_MulFix( deltas[j], apply ) );
- }
- }
-
- if ( localpoints != ALL_POINTS )
- FT_FREE( localpoints );
- FT_FREE( deltas );
-
- offsetToData += tupleDataSize;
-
- FT_Stream_SeekSet( stream, here );
- }
-
- FExit:
- FT_FRAME_EXIT();
-
- Exit:
- FT_FREE( tuple_coords );
- FT_FREE( im_start_coords );
- FT_FREE( im_end_coords );
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Vary_Get_Glyph_Deltas */
- /* */
- /* <Description> */
- /* Load the appropriate deltas for 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. */
- /* */
- /* <Output> */
- /* deltas :: The array of points to change. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Vary_Get_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
- FT_Vector* *deltas,
- FT_UInt n_points )
- {
- FT_Stream stream = face->root.stream;
- FT_Memory memory = stream->memory;
- GX_Blend blend = face->blend;
- FT_Vector* delta_xy;
-
- 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 == NULL )
- return TT_Err_Invalid_Argument;
-
- /* to be freed by the caller */
- if ( FT_NEW_ARRAY( delta_xy, n_points ) )
- goto Exit;
- *deltas = delta_xy;
-
- if ( glyph_index >= blend->gv_glyphcnt ||
- blend->glyphoffsets[glyph_index] ==
- blend->glyphoffsets[glyph_index + 1] )
- return TT_Err_Ok; /* no variation data for this glyph */
-
- 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 = glyph_start + FT_GET_USHORT();
-
- if ( tupleCount & GX_TC_TUPLES_SHARE_POINT_NUMBERS )
- {
- here = FT_Stream_FTell( stream );
-
- FT_Stream_SeekSet( stream, offsetToData );
-
- sharedpoints = ft_var_readpackedpoints( stream, &spoint_count );
- offsetToData = FT_Stream_FTell( stream );
-
- FT_Stream_SeekSet( stream, here );
- }
-
- for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); ++i )
- {
- FT_UInt tupleDataSize;
- FT_UInt tupleIndex;
- FT_Fixed apply;
-
-
- 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() << 2; /* convert from */
- /* short frac to fixed */
- }
- else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
- {
- error = TT_Err_Invalid_Table;
- goto Fail3;
- }
- 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() << 2;
- for ( j = 0; j < blend->num_axis; ++j )
- im_end_coords[j] = FT_GET_SHORT() << 2;
- }
-
- 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 );
-
- if ( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS )
- {
- FT_Stream_SeekSet( stream, offsetToData );
-
- localpoints = ft_var_readpackedpoints( stream, &point_count );
- points = localpoints;
- }
- else
- {
- points = sharedpoints;
- point_count = spoint_count;
- }
-
- deltas_x = ft_var_readpackeddeltas( stream,
- point_count == 0 ? n_points
- : point_count );
- deltas_y = ft_var_readpackeddeltas( stream,
- point_count == 0 ? n_points
- : point_count );
-
- if ( points == NULL || deltas_y == NULL || deltas_x == NULL )
- ; /* failure, ignore it */
-
- else if ( points == ALL_POINTS )
- {
- /* this means that there are deltas for every point in the glyph */
- for ( j = 0; j < n_points; ++j )
- {
- delta_xy[j].x += FT_MulFix( deltas_x[j], apply );
- delta_xy[j].y += FT_MulFix( deltas_y[j], apply );
- }
- }
-
- else
- {
- for ( j = 0; j < point_count; ++j )
- {
- delta_xy[localpoints[j]].x += FT_MulFix( deltas_x[j], apply );
- delta_xy[localpoints[j]].y += FT_MulFix( deltas_y[j], apply );
- }
- }
-
- if ( localpoints != ALL_POINTS )
- FT_FREE( localpoints );
- FT_FREE( deltas_x );
- FT_FREE( deltas_y );
-
- offsetToData += tupleDataSize;
-
- FT_Stream_SeekSet( stream, here );
- }
-
- Fail3:
- FT_FREE( tuple_coords );
- FT_FREE( im_start_coords );
- FT_FREE( im_end_coords );
-
- Fail2:
- FT_FRAME_EXIT();
-
- Fail1:
- if ( error )
- {
- FT_FREE( delta_xy );
- *deltas = NULL;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_done_blend */
- /* */
- /* <Description> */
- /* Frees the blend internal data structure. */
- /* */
- FT_LOCAL_DEF( void )
- tt_done_blend( FT_Memory memory,
- GX_Blend blend )
- {
- if ( blend != NULL )
- {
- FT_UInt i;
-
-
- FT_FREE( blend->normalizedcoords );
- FT_FREE( blend->mmvar );
-
- if ( blend->avar_segment != NULL )
- {
- for ( i = 0; i < blend->num_axis; ++i )
- FT_FREE( blend->avar_segment[i].correspondence );
- FT_FREE( blend->avar_segment );
- }
-
- FT_FREE( blend->tuplecoords );
- FT_FREE( blend->glyphoffsets );
- FT_FREE( blend );
- }
- }
-
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/ttgxvar.h b/Build/source/libs/freetype2/src/truetype/ttgxvar.h
deleted file mode 100644
index 706cb4d369b..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttgxvar.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttgxvar.h */
-/* */
-/* TrueType GX Font Variation loader (specification) */
-/* */
-/* Copyright 2004 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;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* GX_BlendRec */
- /* */
- /* <Description> */
- /* Data for interpolating a font from a distortable font specified */
- /* by the GX *var tables ([fgca]var). */
- /* */
- /* <Fields> */
- /* num_axis :: The number of axes along which interpolation */
- /* may happen */
- /* */
- /* normalizedcoords :: A normalized value (between [-1,1]) indicating */
- /* the contribution along each axis to the final */
- /* interpolated font. */
- /* */
- typedef struct GX_BlendRec_
- {
- FT_UInt num_axis;
- FT_Fixed* normalizedcoords;
-
- FT_MM_Var* mmvar;
- FT_Int mmvar_len;
-
- FT_Bool avar_checked;
- GX_AVarSegment avar_segment;
-
- FT_UInt tuplecount; /* shared tuples in `gvar' */
- FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */
-
- FT_UInt gv_glyphcnt;
- FT_ULong* glyphoffsets;
-
- } 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_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_face_vary_cvt( TT_Face face,
- FT_Stream stream );
-
-
- FT_LOCAL( FT_Error )
- TT_Vary_Get_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
- FT_Vector* *deltas,
- FT_UInt n_points );
-
-
- FT_LOCAL( void )
- tt_done_blend( FT_Memory memory,
- GX_Blend blend );
-
-
-FT_END_HEADER
-
-
-#endif /* __TTGXVAR_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/ttinterp.c b/Build/source/libs/freetype2/src/truetype/ttinterp.c
deleted file mode 100644
index 2ab0c0940e3..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttinterp.c
+++ /dev/null
@@ -1,7823 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttinterp.c */
-/* */
-/* TrueType bytecode interpreter (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_TRIGONOMETRY_H
-#include FT_SYSTEM_H
-
-#include "ttinterp.h"
-
-#include "tterrors.h"
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
-
-#define TT_MULFIX FT_MulFix
-#define TT_MULDIV FT_MulDiv
-#define TT_MULDIV_NO_ROUND FT_MulDiv_No_Round
-
-
- /*************************************************************************/
- /* */
- /* 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
-
- /*************************************************************************/
- /* */
- /* In order to detect infinite loops in the code, we set up a counter */
- /* within the run loop. A single stroke of interpretation is now */
- /* limited to a maximal number of opcodes defined below. */
- /* */
-#define MAX_RUNNABLE_OPCODES 1000000L
-
-
- /*************************************************************************/
- /* */
- /* There are two kinds of implementations: */
- /* */
- /* a. static implementation */
- /* */
- /* The current execution context is a static variable, which fields */
- /* are accessed directly by the interpreter during execution. The */
- /* context is named `cur'. */
- /* */
- /* This version is non-reentrant, of course. */
- /* */
- /* b. indirect implementation */
- /* */
- /* The current execution context is passed to _each_ function as its */
- /* first argument, and each field is thus accessed indirectly. */
- /* */
- /* This version is fully re-entrant. */
- /* */
- /* The idea is that an indirect implementation may be slower to execute */
- /* on low-end processors that are used in some systems (like 386s or */
- /* even 486s). */
- /* */
- /* As a consequence, the indirect implementation is now the default, as */
- /* its performance costs can be considered negligible in our context. */
- /* Note, however, that we kept the same source with macros because: */
- /* */
- /* - The code is kept very close in design to the Pascal code used for */
- /* development. */
- /* */
- /* - It's much more readable that way! */
- /* */
- /* - It's still open to experimentation and tuning. */
- /* */
- /*************************************************************************/
-
-
-#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
-
-#define CUR (*exc) /* see ttobjs.h */
-
- /*************************************************************************/
- /* */
- /* This macro is used whenever `exec' is unused in a function, to avoid */
- /* stupid warnings from pedantic compilers. */
- /* */
-#define FT_UNUSED_EXEC FT_UNUSED( exc )
-
-#else /* static implementation */
-
-#define CUR cur
-
-#define FT_UNUSED_EXEC int __dummy = __dummy
-
- static
- TT_ExecContextRec cur; /* static exec. context variable */
-
- /* apparently, we have a _lot_ of direct indexing when accessing */
- /* the static `cur', which makes the code bigger (due to all the */
- /* four bytes addresses). */
-
-#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
-
-
- /*************************************************************************/
- /* */
- /* The instruction argument stack. */
- /* */
-#define INS_ARG EXEC_OP_ FT_Long* args /* see ttobjs.h for EXEC_OP_ */
-
-
- /*************************************************************************/
- /* */
- /* This macro is used whenever `args' is unused in a function, to avoid */
- /* stupid warnings from pedantic compilers. */
- /* */
-#define FT_UNUSED_ARG FT_UNUSED_EXEC; FT_UNUSED( args )
-
-
- /*************************************************************************/
- /* */
- /* The following macros hide the use of EXEC_ARG and EXEC_ARG_ to */
- /* increase readability of the code. */
- /* */
- /*************************************************************************/
-
-
-#define SKIP_Code() \
- SkipCode( EXEC_ARG )
-
-#define GET_ShortIns() \
- GetShortIns( EXEC_ARG )
-
-#define NORMalize( x, y, v ) \
- Normalize( EXEC_ARG_ x, y, v )
-
-#define SET_SuperRound( scale, flags ) \
- SetSuperRound( EXEC_ARG_ scale, flags )
-
-#define ROUND_None( d, c ) \
- Round_None( EXEC_ARG_ d, c )
-
-#define INS_Goto_CodeRange( range, ip ) \
- Ins_Goto_CodeRange( EXEC_ARG_ range, ip )
-
-#define CUR_Func_move( z, p, d ) \
- CUR.func_move( EXEC_ARG_ z, p, d )
-
-#define CUR_Func_move_orig( z, p, d ) \
- CUR.func_move_orig( EXEC_ARG_ z, p, d )
-
-#define CUR_Func_round( d, c ) \
- CUR.func_round( EXEC_ARG_ d, c )
-
-#define CUR_Func_read_cvt( index ) \
- CUR.func_read_cvt( EXEC_ARG_ index )
-
-#define CUR_Func_write_cvt( index, val ) \
- CUR.func_write_cvt( EXEC_ARG_ index, val )
-
-#define CUR_Func_move_cvt( index, val ) \
- CUR.func_move_cvt( EXEC_ARG_ index, val )
-
-#define CURRENT_Ratio() \
- Current_Ratio( EXEC_ARG )
-
-#define CURRENT_Ppem() \
- Current_Ppem( EXEC_ARG )
-
-#define CUR_Ppem() \
- Cur_PPEM( EXEC_ARG )
-
-#define INS_SxVTL( a, b, c, d ) \
- Ins_SxVTL( EXEC_ARG_ a, b, c, d )
-
-#define COMPUTE_Funcs() \
- Compute_Funcs( EXEC_ARG )
-
-#define COMPUTE_Round( a ) \
- Compute_Round( EXEC_ARG_ a )
-
-#define COMPUTE_Point_Displacement( a, b, c, d ) \
- Compute_Point_Displacement( EXEC_ARG_ a, b, c, d )
-
-#define MOVE_Zp2_Point( a, b, c, t ) \
- Move_Zp2_Point( EXEC_ARG_ a, b, c, t )
-
-
-#define CUR_Func_project( v1, v2 ) \
- CUR.func_project( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y )
-
-#define CUR_Func_dualproj( v1, v2 ) \
- CUR.func_dualproj( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y )
-
-#define CUR_fast_project( v ) \
- CUR.func_project( EXEC_ARG_ (v)->x, (v)->y )
-
-#define CUR_fast_dualproj( v ) \
- CUR.func_dualproj( EXEC_ARG_ (v)->x, (v)->y )
-
-
- /*************************************************************************/
- /* */
- /* Instruction dispatch function, as used by the interpreter. */
- /* */
- typedef void (*TInstruction_Function)( INS_ARG );
-
-
- /*************************************************************************/
- /* */
- /* A simple bounds-checking macro. */
- /* */
-#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
-
-#undef SUCCESS
-#define SUCCESS 0
-
-#undef FAILURE
-#define FAILURE 1
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define GUESS_VECTOR( V ) \
- if ( CUR.face->unpatented_hinting ) \
- { \
- CUR.GS.V.x = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0x4000 : 0 ); \
- CUR.GS.V.y = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0 : 0x4000 ); \
- }
-#else
-#define GUESS_VECTOR( V )
-#endif
-
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- 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 != NULL );
-
- /* 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( (FT_ULong)IP <= coderange->size );
-
- exec->code = coderange->base;
- exec->codeSize = coderange->size;
- exec->IP = IP;
- exec->curRange = range;
-
- return TT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- 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;
-
- return TT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Clear_CodeRange */
- /* */
- /* <Description> */
- /* Clears a code range. */
- /* */
- /* <Input> */
- /* range :: The code range index. */
- /* */
- /* <InOut> */
- /* exec :: The target execution context. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Does not set the Error variable. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- 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;
-
- return TT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- 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 );
-
- return TT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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 TT_Err_Ok;
-
- Fail_Memory:
- FT_ERROR(( "Init_Context: not enough memory for 0x%08lx\n",
- (FT_Long)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. */
- /* */
- static FT_Error
- Update_Max( FT_Memory memory,
- FT_ULong* size,
- FT_Long 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 TT_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->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;
- }
-
- /* XXX: We reserve a little more elements on the stack to deal safely */
- /* with broken fonts like arialbs, courbs, timesbs, etc. */
- tmp = exec->stackSize;
- error = Update_Max( exec->memory,
- &tmp,
- sizeof ( FT_F26Dot6 ),
- (void*)&exec->stack,
- maxp->maxStackElements + 32 );
- exec->stackSize = (FT_UInt)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 TT_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. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Save_Context( TT_ExecContext exec,
- TT_Size size )
- {
- FT_Int i;
-
-
- /* XXXX: 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];
-
- return TT_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- TT_Run_Context( TT_ExecContext exec,
- FT_Bool debug )
- {
- FT_Error error;
-
-
- if ( ( error = TT_Goto_CodeRange( exec, tt_coderange_glyph, 0 ) )
- != TT_Err_Ok )
- return error;
-
- 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;
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- exec->GS.both_x_axis = TRUE;
-#endif
-
- 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;
-
-#if 1
- FT_UNUSED( debug );
-
- return exec->face->interpreter( exec );
-#else
- if ( !debug )
- return TT_RunIns( exec );
- else
- return TT_Err_Ok;
-#endif
- }
-
-
- const TT_GraphicsState tt_default_graphics_state =
- {
- 0, 0, 0,
- { 0x4000, 0 },
- { 0x4000, 0 },
- { 0x4000, 0 },
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- TRUE,
-#endif
-
- 1, 64, 1,
- TRUE, 68, 0, 0, 9, 3,
- 0, FALSE, 2, 1, 1, 1
- };
-
-
- /* documentation is in ttinterp.h */
-
- FT_EXPORT_DEF( TT_ExecContext )
- TT_New_Context( TT_Driver driver )
- {
- TT_ExecContext exec;
- FT_Memory memory;
-
-
- memory = driver->root.root.memory;
- exec = driver->context;
-
- if ( !driver->context )
- {
- FT_Error error;
-
-
- /* allocate object */
- if ( FT_NEW( exec ) )
- goto Exit;
-
- /* initialize it */
- error = Init_Context( exec, memory );
- if ( error )
- goto Fail;
-
- /* store it into the driver */
- driver->context = exec;
- }
-
- Exit:
- return driver->context;
-
- Fail:
- FT_FREE( exec );
-
- return 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* 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 ),
- /* SHP[1] */ PACK( 0, 0 ),
- /* SHC[0] */ PACK( 1, 0 ),
- /* SHC[1] */ PACK( 1, 0 ),
- /* SHZ[0] */ PACK( 1, 0 ),
- /* SHZ[1] */ PACK( 1, 0 ),
- /* SHPIX */ PACK( 1, 0 ),
- /* IP */ PACK( 0, 0 ),
- /* MSIRP[0] */ PACK( 2, 0 ),
- /* MSIRP[1] */ PACK( 2, 0 ),
- /* AlignRP */ PACK( 0, 0 ),
- /* 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 ),
- /* FlipRgON */ PACK( 2, 0 ),
- /* FlipRgOFF */ PACK( 2, 0 ),
- /* INS_$83 */ PACK( 0, 0 ),
- /* INS_$84 */ PACK( 0, 0 ),
- /* ScanCTRL */ PACK( 1, 0 ),
- /* SDVPTL[0] */ PACK( 2, 0 ),
- /* SDVPTL[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 ),
- /* INS_$91 */ PACK( 0, 0 ),
- /* INS_$92 */ PACK( 0, 0 ),
- /* 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 )
- };
-
-
- 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
-
-#if 1
-
- 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;
- }
-
-#else
-
- /* compute (a*b)/2^14 with maximal accuracy and rounding */
- static FT_Int32
- TT_MulFix14( FT_Int32 a,
- FT_Int b )
- {
- FT_Int32 m, s, hi;
- FT_UInt32 l, lo;
-
-
- /* compute ax*bx as 64-bit value */
- l = (FT_UInt32)( ( a & 0xFFFFU ) * b );
- m = ( a >> 16 ) * b;
-
- lo = l + (FT_UInt32)( m << 16 );
- hi = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo < l );
-
- /* 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 ( hi << 18 ) | ( l >> 14 );
- }
-#endif
-
-
- /* compute (ax*bx+ay*by)/2^14 with maximal 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 ( hi << 18 ) | ( l >> 14 );
- }
-
-
- /* return length of given vector */
-
-#if 0
-
- static FT_Int32
- TT_VecLen( FT_Int32 x,
- FT_Int32 y )
- {
- FT_Int32 m, hi1, hi2, hi;
- FT_UInt32 l, lo1, lo2, lo;
-
-
- /* compute x*x as 64-bit value */
- lo = (FT_UInt32)( x & 0xFFFFU );
- hi = x >> 16;
-
- l = lo * lo;
- m = hi * lo;
- hi = hi * hi;
-
- lo1 = l + (FT_UInt32)( m << 17 );
- hi1 = hi + ( m >> 15 ) + ( lo1 < l );
-
- /* compute y*y as 64-bit value */
- lo = (FT_UInt32)( y & 0xFFFFU );
- hi = y >> 16;
-
- l = lo * lo;
- m = hi * lo;
- hi = hi * hi;
-
- lo2 = l + (FT_UInt32)( m << 17 );
- hi2 = hi + ( m >> 15 ) + ( lo2 < l );
-
- /* add them to get 'x*x+y*y' as 64-bit value */
- lo = lo1 + lo2;
- hi = hi1 + hi2 + ( lo < lo1 );
-
- /* compute the square root of this value */
- {
- FT_UInt32 root, rem, test_div;
- FT_Int count;
-
-
- root = 0;
-
- {
- rem = 0;
- count = 32;
- do
- {
- rem = ( rem << 2 ) | ( (FT_UInt32)hi >> 30 );
- hi = ( hi << 2 ) | ( lo >> 30 );
- lo <<= 2;
- root <<= 1;
- test_div = ( root << 1 ) + 1;
-
- if ( rem >= test_div )
- {
- rem -= test_div;
- root += 1;
- }
- } while ( --count );
- }
-
- return (FT_Int32)root;
- }
- }
-
-#else
-
- /* this version uses FT_Vector_Length which computes the same value */
- /* much, much faster.. */
- /* */
- static FT_F26Dot6
- TT_VecLen( FT_F26Dot6 X,
- FT_F26Dot6 Y )
- {
- FT_Vector v;
-
-
- v.x = X;
- v.y = Y;
-
- return FT_Vector_Length( &v );
- }
-
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <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( EXEC_OP )
- {
- if ( !CUR.tt_metrics.ratio )
- {
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
- {
- if ( CUR.GS.both_x_axis )
- CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio;
- else
- CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio;
- }
- else
-#endif
- {
- if ( CUR.GS.projVector.y == 0 )
- CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio;
-
- else if ( CUR.GS.projVector.x == 0 )
- CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio;
-
- else
- {
- FT_Long x, y;
-
-
- x = TT_MULDIV( CUR.GS.projVector.x,
- CUR.tt_metrics.x_ratio, 0x4000 );
- y = TT_MULDIV( CUR.GS.projVector.y,
- CUR.tt_metrics.y_ratio, 0x4000 );
- CUR.tt_metrics.ratio = TT_VecLen( x, y );
- }
- }
- }
- return CUR.tt_metrics.ratio;
- }
-
-
- static FT_Long
- Current_Ppem( EXEC_OP )
- {
- return TT_MULFIX( CUR.tt_metrics.ppem, CURRENT_Ratio() );
- }
-
-
- /*************************************************************************/
- /* */
- /* Functions related to the control value table (CVT). */
- /* */
- /*************************************************************************/
-
-
- FT_CALLBACK_DEF( FT_F26Dot6 )
- Read_CVT( EXEC_OP_ FT_ULong idx )
- {
- return CUR.cvt[idx];
- }
-
-
- FT_CALLBACK_DEF( FT_F26Dot6 )
- Read_CVT_Stretched( EXEC_OP_ FT_ULong idx )
- {
- return TT_MULFIX( CUR.cvt[idx], CURRENT_Ratio() );
- }
-
-
- FT_CALLBACK_DEF( void )
- Write_CVT( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
- {
- CUR.cvt[idx] = value;
- }
-
-
- FT_CALLBACK_DEF( void )
- Write_CVT_Stretched( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
- {
- CUR.cvt[idx] = FT_DivFix( value, CURRENT_Ratio() );
- }
-
-
- FT_CALLBACK_DEF( void )
- Move_CVT( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
- {
- CUR.cvt[idx] += value;
- }
-
-
- FT_CALLBACK_DEF( void )
- Move_CVT_Stretched( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
- {
- CUR.cvt[idx] += FT_DivFix( value, CURRENT_Ratio() );
- }
-
-
- /*************************************************************************/
- /* */
- /* <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( EXEC_OP )
- {
- /* Reading a byte stream so there is no endianess (DaveP) */
- CUR.IP += 2;
- return (FT_Short)( ( CUR.code[CUR.IP - 2] << 8 ) +
- CUR.code[CUR.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( EXEC_OP_ FT_Int aRange,
- FT_ULong aIP )
- {
- TT_CodeRange* range;
-
-
- if ( aRange < 1 || aRange > 3 )
- {
- CUR.error = TT_Err_Bad_Argument;
- return FAILURE;
- }
-
- range = &CUR.codeRangeTable[aRange - 1];
-
- if ( range->base == NULL ) /* invalid coderange */
- {
- CUR.error = TT_Err_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 )
- {
- CUR.error = TT_Err_Code_Overflow;
- return FAILURE;
- }
-
- CUR.code = range->base;
- CUR.codeSize = range->size;
- CUR.IP = aIP;
- CUR.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. */
- /* */
- static void
- Direct_Move( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_F26Dot6 v;
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !CUR.face->unpatented_hinting );
-#endif
-
- v = CUR.GS.freeVector.x;
-
- if ( v != 0 )
- {
- zone->cur[point].x += TT_MULDIV( distance,
- v * 0x10000L,
- CUR.F_dot_P );
-
- zone->tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
-
- v = CUR.GS.freeVector.y;
-
- if ( v != 0 )
- {
- zone->cur[point].y += TT_MULDIV( distance,
- v * 0x10000L,
- CUR.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( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_F26Dot6 v;
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !CUR.face->unpatented_hinting );
-#endif
-
- v = CUR.GS.freeVector.x;
-
- if ( v != 0 )
- zone->org[point].x += TT_MULDIV( distance,
- v * 0x10000L,
- CUR.F_dot_P );
-
- v = CUR.GS.freeVector.y;
-
- if ( v != 0 )
- zone->org[point].y += TT_MULDIV( distance,
- v * 0x10000L,
- CUR.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. */
- /* */
- /*************************************************************************/
-
-
- static void
- Direct_Move_X( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_UNUSED_EXEC;
-
- zone->cur[point].x += distance;
- zone->tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
-
-
- static void
- Direct_Move_Y( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_UNUSED_EXEC;
-
- 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( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_UNUSED_EXEC;
-
- zone->org[point].x += distance;
- }
-
-
- static void
- Direct_Move_Orig_Y( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
- {
- FT_UNUSED_EXEC;
-
- 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( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED_EXEC;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation;
- if ( distance && val < 0 )
- val = 0;
- }
- else {
- val = 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( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED_EXEC;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation + 32;
- if ( distance && val > 0 )
- val &= ~63;
- else
- val = 0;
- }
- else
- {
- val = -FT_PIX_ROUND( 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( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED_EXEC;
-
-
- if ( distance >= 0 )
- {
- val = FT_PIX_FLOOR( distance + compensation ) + 32;
- if ( distance && val < 0 )
- val = 0;
- }
- else
- {
- val = -( FT_PIX_FLOOR( compensation - distance ) + 32 );
- if ( val > 0 )
- val = 0;
- }
-
- 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( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED_EXEC;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation;
- if ( distance && val > 0 )
- val &= ~63;
- else
- val = 0;
- }
- else
- {
- val = -( ( compensation - distance ) & -64 );
- 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( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED_EXEC;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation + 63;
- if ( distance && val > 0 )
- val &= ~63;
- else
- val = 0;
- }
- else
- {
- val = - FT_PIX_CEIL( 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( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
- FT_UNUSED_EXEC;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation + 16;
- if ( distance && val > 0 )
- val &= ~31;
- else
- val = 0;
- }
- else
- {
- val = -FT_PAD_ROUND( 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 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_Super( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = ( distance - CUR.phase + CUR.threshold + compensation ) &
- -CUR.period;
- if ( distance && val < 0 )
- val = 0;
- val += CUR.phase;
- }
- else
- {
- val = -( ( CUR.threshold - CUR.phase - distance + compensation ) &
- -CUR.period );
- if ( val > 0 )
- val = 0;
- val -= CUR.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( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
- {
- FT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = ( ( distance - CUR.phase + CUR.threshold + compensation ) /
- CUR.period ) * CUR.period;
- if ( distance && val < 0 )
- val = 0;
- val += CUR.phase;
- }
- else
- {
- val = -( ( ( CUR.threshold - CUR.phase - distance + compensation ) /
- CUR.period ) * CUR.period );
- if ( val > 0 )
- val = 0;
- val -= CUR.phase;
- }
-
- return val;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Compute_Round */
- /* */
- /* <Description> */
- /* Sets the rounding mode. */
- /* */
- /* <Input> */
- /* round_mode :: The rounding mode to be used. */
- /* */
- static void
- Compute_Round( EXEC_OP_ FT_Byte round_mode )
- {
- switch ( round_mode )
- {
- case TT_Round_Off:
- CUR.func_round = (TT_Round_Func)Round_None;
- break;
-
- case TT_Round_To_Grid:
- CUR.func_round = (TT_Round_Func)Round_To_Grid;
- break;
-
- case TT_Round_Up_To_Grid:
- CUR.func_round = (TT_Round_Func)Round_Up_To_Grid;
- break;
-
- case TT_Round_Down_To_Grid:
- CUR.func_round = (TT_Round_Func)Round_Down_To_Grid;
- break;
-
- case TT_Round_To_Half_Grid:
- CUR.func_round = (TT_Round_Func)Round_To_Half_Grid;
- break;
-
- case TT_Round_To_Double_Grid:
- CUR.func_round = (TT_Round_Func)Round_To_Double_Grid;
- break;
-
- case TT_Round_Super:
- CUR.func_round = (TT_Round_Func)Round_Super;
- break;
-
- case TT_Round_Super_45:
- CUR.func_round = (TT_Round_Func)Round_Super_45;
- break;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* SetSuperRound */
- /* */
- /* <Description> */
- /* Sets Super Round parameters. */
- /* */
- /* <Input> */
- /* GridPeriod :: Grid period */
- /* selector :: SROUND opcode */
- /* */
- static void
- SetSuperRound( EXEC_OP_ FT_F26Dot6 GridPeriod,
- FT_Long selector )
- {
- switch ( (FT_Int)( selector & 0xC0 ) )
- {
- case 0:
- CUR.period = GridPeriod / 2;
- break;
-
- case 0x40:
- CUR.period = GridPeriod;
- break;
-
- case 0x80:
- CUR.period = GridPeriod * 2;
- break;
-
- /* This opcode is reserved, but... */
-
- case 0xC0:
- CUR.period = GridPeriod;
- break;
- }
-
- switch ( (FT_Int)( selector & 0x30 ) )
- {
- case 0:
- CUR.phase = 0;
- break;
-
- case 0x10:
- CUR.phase = CUR.period / 4;
- break;
-
- case 0x20:
- CUR.phase = CUR.period / 2;
- break;
-
- case 0x30:
- CUR.phase = CUR.period * 3 / 4;
- break;
- }
-
- if ( ( selector & 0x0F ) == 0 )
- CUR.threshold = CUR.period - 1;
- else
- CUR.threshold = ( (FT_Int)( selector & 0x0F ) - 4 ) * CUR.period / 8;
-
- CUR.period /= 256;
- CUR.phase /= 256;
- CUR.threshold /= 256;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
- {
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !CUR.face->unpatented_hinting );
-#endif
-
- return TT_DotFix14( dx, dy,
- CUR.GS.projVector.x,
- CUR.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( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
- {
- return TT_DotFix14( dx, dy,
- CUR.GS.dualVector.x,
- CUR.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( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
- {
- FT_UNUSED_EXEC;
- 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( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
- {
- FT_UNUSED_EXEC;
- 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( EXEC_OP )
- {
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
- {
- /* If both vectors point rightwards along the x axis, set */
- /* `both-x-axis' true, otherwise set it false. The x values only */
- /* need be tested because the vector has been normalised to a unit */
- /* vector of length 0x4000 = unity. */
- CUR.GS.both_x_axis = (FT_Bool)( CUR.GS.projVector.x == 0x4000 &&
- CUR.GS.freeVector.x == 0x4000 );
-
- /* Throw away projection and freedom vector information */
- /* because the patents don't allow them to be stored. */
- /* The relevant US Patents are 5155805 and 5325479. */
- CUR.GS.projVector.x = 0;
- CUR.GS.projVector.y = 0;
- CUR.GS.freeVector.x = 0;
- CUR.GS.freeVector.y = 0;
-
- if ( CUR.GS.both_x_axis )
- {
- CUR.func_project = Project_x;
- CUR.func_move = Direct_Move_X;
- CUR.func_move_orig = Direct_Move_Orig_X;
- }
- else
- {
- CUR.func_project = Project_y;
- CUR.func_move = Direct_Move_Y;
- CUR.func_move_orig = Direct_Move_Orig_Y;
- }
-
- if ( CUR.GS.dualVector.x == 0x4000 )
- CUR.func_dualproj = Project_x;
- else
- {
- if ( CUR.GS.dualVector.y == 0x4000 )
- CUR.func_dualproj = Project_y;
- else
- CUR.func_dualproj = Dual_Project;
- }
-
- /* Force recalculation of cached aspect ratio */
- CUR.tt_metrics.ratio = 0;
-
- return;
- }
-#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING */
-
- if ( CUR.GS.freeVector.x == 0x4000 )
- CUR.F_dot_P = CUR.GS.projVector.x * 0x10000L;
- else
- {
- if ( CUR.GS.freeVector.y == 0x4000 )
- CUR.F_dot_P = CUR.GS.projVector.y * 0x10000L;
- else
- CUR.F_dot_P = (FT_Long)CUR.GS.projVector.x * CUR.GS.freeVector.x * 4 +
- (FT_Long)CUR.GS.projVector.y * CUR.GS.freeVector.y * 4;
- }
-
- if ( CUR.GS.projVector.x == 0x4000 )
- CUR.func_project = (TT_Project_Func)Project_x;
- else
- {
- if ( CUR.GS.projVector.y == 0x4000 )
- CUR.func_project = (TT_Project_Func)Project_y;
- else
- CUR.func_project = (TT_Project_Func)Project;
- }
-
- if ( CUR.GS.dualVector.x == 0x4000 )
- CUR.func_dualproj = (TT_Project_Func)Project_x;
- else
- {
- if ( CUR.GS.dualVector.y == 0x4000 )
- CUR.func_dualproj = (TT_Project_Func)Project_y;
- else
- CUR.func_dualproj = (TT_Project_Func)Dual_Project;
- }
-
- CUR.func_move = (TT_Move_Func)Direct_Move;
- CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig;
-
- if ( CUR.F_dot_P == 0x40000000L )
- {
- if ( CUR.GS.freeVector.x == 0x4000 )
- {
- CUR.func_move = (TT_Move_Func)Direct_Move_X;
- CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig_X;
- }
- else
- {
- if ( CUR.GS.freeVector.y == 0x4000 )
- {
- CUR.func_move = (TT_Move_Func)Direct_Move_Y;
- CUR.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( CUR.F_dot_P ) < 0x4000000L )
- CUR.F_dot_P = 0x40000000L;
-
- /* Disable cached aspect ratio */
- CUR.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( EXEC_OP_ FT_F26Dot6 Vx,
- FT_F26Dot6 Vy,
- FT_UnitVector* R )
- {
- FT_F26Dot6 W;
- FT_Bool S1, S2;
-
- FT_UNUSED_EXEC;
-
-
- if ( FT_ABS( Vx ) < 0x10000L && FT_ABS( Vy ) < 0x10000L )
- {
- Vx *= 0x100;
- Vy *= 0x100;
-
- W = TT_VecLen( Vx, Vy );
-
- if ( W == 0 )
- {
- /* XXX: UNDOCUMENTED! It seems that it is possible to try */
- /* to normalize the vector (0,0). Return immediately. */
- return SUCCESS;
- }
-
- R->x = (FT_F2Dot14)FT_MulDiv( Vx, 0x4000L, W );
- R->y = (FT_F2Dot14)FT_MulDiv( Vy, 0x4000L, W );
-
- return SUCCESS;
- }
-
- W = TT_VecLen( Vx, Vy );
-
- Vx = FT_MulDiv( Vx, 0x4000L, W );
- Vy = FT_MulDiv( Vy, 0x4000L, W );
-
- W = Vx * Vx + Vy * Vy;
-
- /* Now, we want that Sqrt( W ) = 0x4000 */
- /* Or 0x10000000 <= W < 0x10004000 */
-
- if ( Vx < 0 )
- {
- Vx = -Vx;
- S1 = TRUE;
- }
- else
- S1 = FALSE;
-
- if ( Vy < 0 )
- {
- Vy = -Vy;
- S2 = TRUE;
- }
- else
- S2 = FALSE;
-
- while ( W < 0x10000000L )
- {
- /* We need to increase W by a minimal amount */
- if ( Vx < Vy )
- Vx++;
- else
- Vy++;
-
- W = Vx * Vx + Vy * Vy;
- }
-
- while ( W >= 0x10004000L )
- {
- /* We need to decrease W by a minimal amount */
- if ( Vx < Vy )
- Vx--;
- else
- Vy--;
-
- W = Vx * Vx + Vy * Vy;
- }
-
- /* Note that in various cases, we can only */
- /* compute a Sqrt(W) of 0x3FFF, eg. Vx = Vy */
-
- if ( S1 )
- Vx = -Vx;
-
- if ( S2 )
- Vy = -Vy;
-
- R->x = (FT_F2Dot14)Vx; /* Type conversion */
- R->y = (FT_F2Dot14)Vy; /* Type conversion */
-
- return SUCCESS;
- }
-
-
- /*************************************************************************/
- /* */
- /* Here we start with the implementation of the various opcodes. */
- /* */
- /*************************************************************************/
-
-
- static FT_Bool
- Ins_SxVTL( EXEC_OP_ FT_UShort aIdx1,
- FT_UShort aIdx2,
- FT_Int aOpc,
- FT_UnitVector* Vec )
- {
- FT_Long A, B, C;
- FT_Vector* p1;
- FT_Vector* p2;
-
-
- if ( BOUNDS( aIdx1, CUR.zp2.n_points ) ||
- BOUNDS( aIdx2, CUR.zp1.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return FAILURE;
- }
-
- p1 = CUR.zp1.cur + aIdx2;
- p2 = CUR.zp2.cur + aIdx1;
-
- A = p1->x - p2->x;
- B = p1->y - p2->y;
-
- if ( ( aOpc & 1 ) != 0 )
- {
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
- }
-
- NORMalize( A, B, Vec );
-
- return SUCCESS;
- }
-
-
- /* When not using the big switch statements, the interpreter uses a */
- /* call table defined later below in this source. Each opcode must */
- /* thus have a corresponding function, even trivial ones. */
- /* */
- /* They are all defined there. */
-
-#define DO_SVTCA \
- { \
- FT_Short A, B; \
- \
- \
- A = (FT_Short)( CUR.opcode & 1 ) << 14; \
- B = A ^ (FT_Short)0x4000; \
- \
- CUR.GS.freeVector.x = A; \
- CUR.GS.projVector.x = A; \
- CUR.GS.dualVector.x = A; \
- \
- CUR.GS.freeVector.y = B; \
- CUR.GS.projVector.y = B; \
- CUR.GS.dualVector.y = B; \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SPVTCA \
- { \
- FT_Short A, B; \
- \
- \
- A = (FT_Short)( CUR.opcode & 1 ) << 14; \
- B = A ^ (FT_Short)0x4000; \
- \
- CUR.GS.projVector.x = A; \
- CUR.GS.dualVector.x = A; \
- \
- CUR.GS.projVector.y = B; \
- CUR.GS.dualVector.y = B; \
- \
- GUESS_VECTOR( freeVector ); \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTCA \
- { \
- FT_Short A, B; \
- \
- \
- A = (FT_Short)( CUR.opcode & 1 ) << 14; \
- B = A ^ (FT_Short)0x4000; \
- \
- CUR.GS.freeVector.x = A; \
- CUR.GS.freeVector.y = B; \
- \
- GUESS_VECTOR( projVector ); \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SPVTL \
- if ( INS_SxVTL( (FT_UShort)args[1], \
- (FT_UShort)args[0], \
- CUR.opcode, \
- &CUR.GS.projVector ) == SUCCESS ) \
- { \
- CUR.GS.dualVector = CUR.GS.projVector; \
- GUESS_VECTOR( freeVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTL \
- if ( INS_SxVTL( (FT_UShort)args[1], \
- (FT_UShort)args[0], \
- CUR.opcode, \
- &CUR.GS.freeVector ) == SUCCESS ) \
- { \
- GUESS_VECTOR( projVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTPV \
- GUESS_VECTOR( projVector ); \
- CUR.GS.freeVector = CUR.GS.projVector; \
- COMPUTE_Funcs();
-
-
-#define DO_SPVFS \
- { \
- 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, &CUR.GS.projVector ); \
- \
- CUR.GS.dualVector = CUR.GS.projVector; \
- GUESS_VECTOR( freeVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVFS \
- { \
- 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, &CUR.GS.freeVector ); \
- GUESS_VECTOR( projVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define DO_GPV \
- if ( CUR.face->unpatented_hinting ) \
- { \
- args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \
- args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \
- } \
- else \
- { \
- args[0] = CUR.GS.projVector.x; \
- args[1] = CUR.GS.projVector.y; \
- }
-#else
-#define DO_GPV \
- args[0] = CUR.GS.projVector.x; \
- args[1] = CUR.GS.projVector.y;
-#endif
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define DO_GFV \
- if ( CUR.face->unpatented_hinting ) \
- { \
- args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \
- args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \
- } \
- else \
- { \
- args[0] = CUR.GS.freeVector.x; \
- args[1] = CUR.GS.freeVector.y; \
- }
-#else
-#define DO_GFV \
- args[0] = CUR.GS.freeVector.x; \
- args[1] = CUR.GS.freeVector.y;
-#endif
-
-
-#define DO_SRP0 \
- CUR.GS.rp0 = (FT_UShort)args[0];
-
-
-#define DO_SRP1 \
- CUR.GS.rp1 = (FT_UShort)args[0];
-
-
-#define DO_SRP2 \
- CUR.GS.rp2 = (FT_UShort)args[0];
-
-
-#define DO_RTHG \
- CUR.GS.round_state = TT_Round_To_Half_Grid; \
- CUR.func_round = (TT_Round_Func)Round_To_Half_Grid;
-
-
-#define DO_RTG \
- CUR.GS.round_state = TT_Round_To_Grid; \
- CUR.func_round = (TT_Round_Func)Round_To_Grid;
-
-
-#define DO_RTDG \
- CUR.GS.round_state = TT_Round_To_Double_Grid; \
- CUR.func_round = (TT_Round_Func)Round_To_Double_Grid;
-
-
-#define DO_RUTG \
- CUR.GS.round_state = TT_Round_Up_To_Grid; \
- CUR.func_round = (TT_Round_Func)Round_Up_To_Grid;
-
-
-#define DO_RDTG \
- CUR.GS.round_state = TT_Round_Down_To_Grid; \
- CUR.func_round = (TT_Round_Func)Round_Down_To_Grid;
-
-
-#define DO_ROFF \
- CUR.GS.round_state = TT_Round_Off; \
- CUR.func_round = (TT_Round_Func)Round_None;
-
-
-#define DO_SROUND \
- SET_SuperRound( 0x4000, args[0] ); \
- CUR.GS.round_state = TT_Round_Super; \
- CUR.func_round = (TT_Round_Func)Round_Super;
-
-
-#define DO_S45ROUND \
- SET_SuperRound( 0x2D41, args[0] ); \
- CUR.GS.round_state = TT_Round_Super_45; \
- CUR.func_round = (TT_Round_Func)Round_Super_45;
-
-
-#define DO_SLOOP \
- if ( args[0] < 0 ) \
- CUR.error = TT_Err_Bad_Argument; \
- else \
- CUR.GS.loop = args[0];
-
-
-#define DO_SMD \
- CUR.GS.minimum_distance = args[0];
-
-
-#define DO_SCVTCI \
- CUR.GS.control_value_cutin = (FT_F26Dot6)args[0];
-
-
-#define DO_SSWCI \
- CUR.GS.single_width_cutin = (FT_F26Dot6)args[0];
-
-
- /* XXX: UNDOCUMENTED! or bug in the Windows engine? */
- /* */
- /* It seems that the value that is read here is */
- /* expressed in 16.16 format rather than in font */
- /* units. */
- /* */
-#define DO_SSW \
- CUR.GS.single_width_value = (FT_F26Dot6)( args[0] >> 10 );
-
-
-#define DO_FLIPON \
- CUR.GS.auto_flip = TRUE;
-
-
-#define DO_FLIPOFF \
- CUR.GS.auto_flip = FALSE;
-
-
-#define DO_SDB \
- CUR.GS.delta_base = (FT_Short)args[0];
-
-
-#define DO_SDS \
- CUR.GS.delta_shift = (FT_Short)args[0];
-
-
-#define DO_MD /* nothing */
-
-
-#define DO_MPPEM \
- args[0] = CURRENT_Ppem();
-
-
- /* Note: The pointSize should be irrelevant in a given font program; */
- /* we thus decide to return only the ppem. */
-#if 0
-
-#define DO_MPS \
- args[0] = CUR.metrics.pointSize;
-
-#else
-
-#define DO_MPS \
- args[0] = CURRENT_Ppem();
-
-#endif /* 0 */
-
-
-#define DO_DUP \
- args[1] = args[0];
-
-
-#define DO_CLEAR \
- CUR.new_top = 0;
-
-
-#define DO_SWAP \
- { \
- FT_Long L; \
- \
- \
- L = args[0]; \
- args[0] = args[1]; \
- args[1] = L; \
- }
-
-
-#define DO_DEPTH \
- args[0] = CUR.top;
-
-
-#define DO_CINDEX \
- { \
- FT_Long L; \
- \
- \
- L = args[0]; \
- \
- if ( L <= 0 || L > CUR.args ) \
- CUR.error = TT_Err_Invalid_Reference; \
- else \
- args[0] = CUR.stack[CUR.args - L]; \
- }
-
-
-#define DO_JROT \
- if ( args[1] != 0 ) \
- { \
- CUR.IP += args[0]; \
- CUR.step_ins = FALSE; \
- }
-
-
-#define DO_JMPR \
- CUR.IP += args[0]; \
- CUR.step_ins = FALSE;
-
-
-#define DO_JROF \
- if ( args[1] == 0 ) \
- { \
- CUR.IP += args[0]; \
- CUR.step_ins = FALSE; \
- }
-
-
-#define DO_LT \
- args[0] = ( args[0] < args[1] );
-
-
-#define DO_LTEQ \
- args[0] = ( args[0] <= args[1] );
-
-
-#define DO_GT \
- args[0] = ( args[0] > args[1] );
-
-
-#define DO_GTEQ \
- args[0] = ( args[0] >= args[1] );
-
-
-#define DO_EQ \
- args[0] = ( args[0] == args[1] );
-
-
-#define DO_NEQ \
- args[0] = ( args[0] != args[1] );
-
-
-#define DO_ODD \
- args[0] = ( ( CUR_Func_round( args[0], 0 ) & 127 ) == 64 );
-
-
-#define DO_EVEN \
- args[0] = ( ( CUR_Func_round( args[0], 0 ) & 127 ) == 0 );
-
-
-#define DO_AND \
- args[0] = ( args[0] && args[1] );
-
-
-#define DO_OR \
- args[0] = ( args[0] || args[1] );
-
-
-#define DO_NOT \
- args[0] = !args[0];
-
-
-#define DO_ADD \
- args[0] += args[1];
-
-
-#define DO_SUB \
- args[0] -= args[1];
-
-
-#define DO_DIV \
- if ( args[1] == 0 ) \
- CUR.error = TT_Err_Divide_By_Zero; \
- else \
- args[0] = TT_MULDIV_NO_ROUND( args[0], 64L, args[1] );
-
-
-#define DO_MUL \
- args[0] = TT_MULDIV( args[0], args[1], 64L );
-
-
-#define DO_ABS \
- args[0] = FT_ABS( args[0] );
-
-
-#define DO_NEG \
- args[0] = -args[0];
-
-
-#define DO_FLOOR \
- args[0] = FT_PIX_FLOOR( args[0] );
-
-
-#define DO_CEILING \
- args[0] = FT_PIX_CEIL( args[0] );
-
-
-#define DO_RS \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDS( I, CUR.storeSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- else \
- args[0] = 0; \
- } \
- else \
- args[0] = CUR.storage[I]; \
- }
-
-
-#define DO_WS \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDS( I, CUR.storeSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR.storage[I] = args[1]; \
- }
-
-
-#define DO_RCVT \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDS( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- else \
- args[0] = 0; \
- } \
- else \
- args[0] = CUR_Func_read_cvt( I ); \
- }
-
-
-#define DO_WCVTP \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDS( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR_Func_write_cvt( I, args[1] ); \
- }
-
-
-#define DO_WCVTF \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDS( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR.cvt[I] = TT_MULFIX( args[1], CUR.tt_metrics.scale ); \
- }
-
-
-#define DO_DEBUG \
- CUR.error = TT_Err_Debug_OpCode;
-
-
-#define DO_ROUND \
- args[0] = CUR_Func_round( \
- args[0], \
- CUR.tt_metrics.compensations[CUR.opcode - 0x68] );
-
-
-#define DO_NROUND \
- args[0] = ROUND_None( args[0], \
- CUR.tt_metrics.compensations[CUR.opcode - 0x6C] );
-
-
-#define DO_MAX \
- if ( args[1] > args[0] ) \
- args[0] = args[1];
-
-
-#define DO_MIN \
- if ( args[1] < args[0] ) \
- args[0] = args[1];
-
-
-#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-#undef ARRAY_BOUND_ERROR
-#define ARRAY_BOUND_ERROR \
- { \
- CUR.error = TT_Err_Invalid_Reference; \
- return; \
- }
-
-
- /*************************************************************************/
- /* */
- /* SVTCA[a]: Set (F and P) Vectors to Coordinate Axis */
- /* Opcode range: 0x00-0x01 */
- /* Stack: --> */
- /* */
- static void
- Ins_SVTCA( INS_ARG )
- {
- DO_SVTCA
- }
-
-
- /*************************************************************************/
- /* */
- /* SPVTCA[a]: Set PVector to Coordinate Axis */
- /* Opcode range: 0x02-0x03 */
- /* Stack: --> */
- /* */
- static void
- Ins_SPVTCA( INS_ARG )
- {
- DO_SPVTCA
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVTCA[a]: Set FVector to Coordinate Axis */
- /* Opcode range: 0x04-0x05 */
- /* Stack: --> */
- /* */
- static void
- Ins_SFVTCA( INS_ARG )
- {
- DO_SFVTCA
- }
-
-
- /*************************************************************************/
- /* */
- /* SPVTL[a]: Set PVector To Line */
- /* Opcode range: 0x06-0x07 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SPVTL( INS_ARG )
- {
- DO_SPVTL
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVTL[a]: Set FVector To Line */
- /* Opcode range: 0x08-0x09 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SFVTL( INS_ARG )
- {
- DO_SFVTL
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVTPV[]: Set FVector To PVector */
- /* Opcode range: 0x0E */
- /* Stack: --> */
- /* */
- static void
- Ins_SFVTPV( INS_ARG )
- {
- DO_SFVTPV
- }
-
-
- /*************************************************************************/
- /* */
- /* SPVFS[]: Set PVector From Stack */
- /* Opcode range: 0x0A */
- /* Stack: f2.14 f2.14 --> */
- /* */
- static void
- Ins_SPVFS( INS_ARG )
- {
- DO_SPVFS
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVFS[]: Set FVector From Stack */
- /* Opcode range: 0x0B */
- /* Stack: f2.14 f2.14 --> */
- /* */
- static void
- Ins_SFVFS( INS_ARG )
- {
- DO_SFVFS
- }
-
-
- /*************************************************************************/
- /* */
- /* GPV[]: Get Projection Vector */
- /* Opcode range: 0x0C */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
- static void
- Ins_GPV( INS_ARG )
- {
- DO_GPV
- }
-
-
- /*************************************************************************/
- /* GFV[]: Get Freedom Vector */
- /* Opcode range: 0x0D */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
- static void
- Ins_GFV( INS_ARG )
- {
- DO_GFV
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP0[]: Set Reference Point 0 */
- /* Opcode range: 0x10 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP0( INS_ARG )
- {
- DO_SRP0
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP1[]: Set Reference Point 1 */
- /* Opcode range: 0x11 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP1( INS_ARG )
- {
- DO_SRP1
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP2[]: Set Reference Point 2 */
- /* Opcode range: 0x12 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP2( INS_ARG )
- {
- DO_SRP2
- }
-
-
- /*************************************************************************/
- /* */
- /* RTHG[]: Round To Half Grid */
- /* Opcode range: 0x19 */
- /* Stack: --> */
- /* */
- static void
- Ins_RTHG( INS_ARG )
- {
- DO_RTHG
- }
-
-
- /*************************************************************************/
- /* */
- /* RTG[]: Round To Grid */
- /* Opcode range: 0x18 */
- /* Stack: --> */
- /* */
- static void
- Ins_RTG( INS_ARG )
- {
- DO_RTG
- }
-
-
- /*************************************************************************/
- /* RTDG[]: Round To Double Grid */
- /* Opcode range: 0x3D */
- /* Stack: --> */
- /* */
- static void
- Ins_RTDG( INS_ARG )
- {
- DO_RTDG
- }
-
-
- /*************************************************************************/
- /* RUTG[]: Round Up To Grid */
- /* Opcode range: 0x7C */
- /* Stack: --> */
- /* */
- static void
- Ins_RUTG( INS_ARG )
- {
- DO_RUTG
- }
-
-
- /*************************************************************************/
- /* */
- /* RDTG[]: Round Down To Grid */
- /* Opcode range: 0x7D */
- /* Stack: --> */
- /* */
- static void
- Ins_RDTG( INS_ARG )
- {
- DO_RDTG
- }
-
-
- /*************************************************************************/
- /* */
- /* ROFF[]: Round OFF */
- /* Opcode range: 0x7A */
- /* Stack: --> */
- /* */
- static void
- Ins_ROFF( INS_ARG )
- {
- DO_ROFF
- }
-
-
- /*************************************************************************/
- /* */
- /* SROUND[]: Super ROUND */
- /* Opcode range: 0x76 */
- /* Stack: Eint8 --> */
- /* */
- static void
- Ins_SROUND( INS_ARG )
- {
- DO_SROUND
- }
-
-
- /*************************************************************************/
- /* */
- /* S45ROUND[]: Super ROUND 45 degrees */
- /* Opcode range: 0x77 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_S45ROUND( INS_ARG )
- {
- DO_S45ROUND
- }
-
-
- /*************************************************************************/
- /* */
- /* SLOOP[]: Set LOOP variable */
- /* Opcode range: 0x17 */
- /* Stack: int32? --> */
- /* */
- static void
- Ins_SLOOP( INS_ARG )
- {
- DO_SLOOP
- }
-
-
- /*************************************************************************/
- /* */
- /* SMD[]: Set Minimum Distance */
- /* Opcode range: 0x1A */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SMD( INS_ARG )
- {
- DO_SMD
- }
-
-
- /*************************************************************************/
- /* */
- /* SCVTCI[]: Set Control Value Table Cut In */
- /* Opcode range: 0x1D */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SCVTCI( INS_ARG )
- {
- DO_SCVTCI
- }
-
-
- /*************************************************************************/
- /* */
- /* SSWCI[]: Set Single Width Cut In */
- /* Opcode range: 0x1E */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SSWCI( INS_ARG )
- {
- DO_SSWCI
- }
-
-
- /*************************************************************************/
- /* */
- /* SSW[]: Set Single Width */
- /* Opcode range: 0x1F */
- /* Stack: int32? --> */
- /* */
- static void
- Ins_SSW( INS_ARG )
- {
- DO_SSW
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPON[]: Set auto-FLIP to ON */
- /* Opcode range: 0x4D */
- /* Stack: --> */
- /* */
- static void
- Ins_FLIPON( INS_ARG )
- {
- DO_FLIPON
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPOFF[]: Set auto-FLIP to OFF */
- /* Opcode range: 0x4E */
- /* Stack: --> */
- /* */
- static void
- Ins_FLIPOFF( INS_ARG )
- {
- DO_FLIPOFF
- }
-
-
- /*************************************************************************/
- /* */
- /* SANGW[]: Set ANGle Weight */
- /* Opcode range: 0x7E */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SANGW( INS_ARG )
- {
- /* instruction not supported anymore */
- }
-
-
- /*************************************************************************/
- /* */
- /* SDB[]: Set Delta Base */
- /* Opcode range: 0x5E */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SDB( INS_ARG )
- {
- DO_SDB
- }
-
-
- /*************************************************************************/
- /* */
- /* SDS[]: Set Delta Shift */
- /* Opcode range: 0x5F */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SDS( INS_ARG )
- {
- DO_SDS
- }
-
-
- /*************************************************************************/
- /* */
- /* MPPEM[]: Measure Pixel Per EM */
- /* Opcode range: 0x4B */
- /* Stack: --> Euint16 */
- /* */
- static void
- Ins_MPPEM( INS_ARG )
- {
- DO_MPPEM
- }
-
-
- /*************************************************************************/
- /* */
- /* MPS[]: Measure Point Size */
- /* Opcode range: 0x4C */
- /* Stack: --> Euint16 */
- /* */
- static void
- Ins_MPS( INS_ARG )
- {
- DO_MPS
- }
-
-
- /*************************************************************************/
- /* */
- /* DUP[]: DUPlicate the top stack's element */
- /* Opcode range: 0x20 */
- /* Stack: StkElt --> StkElt StkElt */
- /* */
- static void
- Ins_DUP( INS_ARG )
- {
- DO_DUP
- }
-
-
- /*************************************************************************/
- /* */
- /* POP[]: POP the stack's top element */
- /* Opcode range: 0x21 */
- /* Stack: StkElt --> */
- /* */
- static void
- Ins_POP( INS_ARG )
- {
- /* nothing to do */
- }
-
-
- /*************************************************************************/
- /* */
- /* CLEAR[]: CLEAR the entire stack */
- /* Opcode range: 0x22 */
- /* Stack: StkElt... --> */
- /* */
- static void
- Ins_CLEAR( INS_ARG )
- {
- DO_CLEAR
- }
-
-
- /*************************************************************************/
- /* */
- /* SWAP[]: SWAP the stack's top two elements */
- /* Opcode range: 0x23 */
- /* Stack: 2 * StkElt --> 2 * StkElt */
- /* */
- static void
- Ins_SWAP( INS_ARG )
- {
- DO_SWAP
- }
-
-
- /*************************************************************************/
- /* */
- /* DEPTH[]: return the stack DEPTH */
- /* Opcode range: 0x24 */
- /* Stack: --> uint32 */
- /* */
- static void
- Ins_DEPTH( INS_ARG )
- {
- DO_DEPTH
- }
-
-
- /*************************************************************************/
- /* */
- /* CINDEX[]: Copy INDEXed element */
- /* Opcode range: 0x25 */
- /* Stack: int32 --> StkElt */
- /* */
- static void
- Ins_CINDEX( INS_ARG )
- {
- DO_CINDEX
- }
-
-
- /*************************************************************************/
- /* */
- /* EIF[]: End IF */
- /* Opcode range: 0x59 */
- /* Stack: --> */
- /* */
- static void
- Ins_EIF( INS_ARG )
- {
- /* nothing to do */
- }
-
-
- /*************************************************************************/
- /* */
- /* JROT[]: Jump Relative On True */
- /* Opcode range: 0x78 */
- /* Stack: StkElt int32 --> */
- /* */
- static void
- Ins_JROT( INS_ARG )
- {
- DO_JROT
- }
-
-
- /*************************************************************************/
- /* */
- /* JMPR[]: JuMP Relative */
- /* Opcode range: 0x1C */
- /* Stack: int32 --> */
- /* */
- static void
- Ins_JMPR( INS_ARG )
- {
- DO_JMPR
- }
-
-
- /*************************************************************************/
- /* */
- /* JROF[]: Jump Relative On False */
- /* Opcode range: 0x79 */
- /* Stack: StkElt int32 --> */
- /* */
- static void
- Ins_JROF( INS_ARG )
- {
- DO_JROF
- }
-
-
- /*************************************************************************/
- /* */
- /* LT[]: Less Than */
- /* Opcode range: 0x50 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_LT( INS_ARG )
- {
- DO_LT
- }
-
-
- /*************************************************************************/
- /* */
- /* LTEQ[]: Less Than or EQual */
- /* Opcode range: 0x51 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_LTEQ( INS_ARG )
- {
- DO_LTEQ
- }
-
-
- /*************************************************************************/
- /* */
- /* GT[]: Greater Than */
- /* Opcode range: 0x52 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_GT( INS_ARG )
- {
- DO_GT
- }
-
-
- /*************************************************************************/
- /* */
- /* GTEQ[]: Greater Than or EQual */
- /* Opcode range: 0x53 */
- /* Stack: int32? int32? --> bool */
- /* */
- static void
- Ins_GTEQ( INS_ARG )
- {
- DO_GTEQ
- }
-
-
- /*************************************************************************/
- /* */
- /* EQ[]: EQual */
- /* Opcode range: 0x54 */
- /* Stack: StkElt StkElt --> bool */
- /* */
- static void
- Ins_EQ( INS_ARG )
- {
- DO_EQ
- }
-
-
- /*************************************************************************/
- /* */
- /* NEQ[]: Not EQual */
- /* Opcode range: 0x55 */
- /* Stack: StkElt StkElt --> bool */
- /* */
- static void
- Ins_NEQ( INS_ARG )
- {
- DO_NEQ
- }
-
-
- /*************************************************************************/
- /* */
- /* ODD[]: Is ODD */
- /* Opcode range: 0x56 */
- /* Stack: f26.6 --> bool */
- /* */
- static void
- Ins_ODD( INS_ARG )
- {
- DO_ODD
- }
-
-
- /*************************************************************************/
- /* */
- /* EVEN[]: Is EVEN */
- /* Opcode range: 0x57 */
- /* Stack: f26.6 --> bool */
- /* */
- static void
- Ins_EVEN( INS_ARG )
- {
- DO_EVEN
- }
-
-
- /*************************************************************************/
- /* */
- /* AND[]: logical AND */
- /* Opcode range: 0x5A */
- /* Stack: uint32 uint32 --> uint32 */
- /* */
- static void
- Ins_AND( INS_ARG )
- {
- DO_AND
- }
-
-
- /*************************************************************************/
- /* */
- /* OR[]: logical OR */
- /* Opcode range: 0x5B */
- /* Stack: uint32 uint32 --> uint32 */
- /* */
- static void
- Ins_OR( INS_ARG )
- {
- DO_OR
- }
-
-
- /*************************************************************************/
- /* */
- /* NOT[]: logical NOT */
- /* Opcode range: 0x5C */
- /* Stack: StkElt --> uint32 */
- /* */
- static void
- Ins_NOT( INS_ARG )
- {
- DO_NOT
- }
-
-
- /*************************************************************************/
- /* */
- /* ADD[]: ADD */
- /* Opcode range: 0x60 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_ADD( INS_ARG )
- {
- DO_ADD
- }
-
-
- /*************************************************************************/
- /* */
- /* SUB[]: SUBtract */
- /* Opcode range: 0x61 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_SUB( INS_ARG )
- {
- DO_SUB
- }
-
-
- /*************************************************************************/
- /* */
- /* DIV[]: DIVide */
- /* Opcode range: 0x62 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_DIV( INS_ARG )
- {
- DO_DIV
- }
-
-
- /*************************************************************************/
- /* */
- /* MUL[]: MULtiply */
- /* Opcode range: 0x63 */
- /* Stack: f26.6 f26.6 --> f26.6 */
- /* */
- static void
- Ins_MUL( INS_ARG )
- {
- DO_MUL
- }
-
-
- /*************************************************************************/
- /* */
- /* ABS[]: ABSolute value */
- /* Opcode range: 0x64 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_ABS( INS_ARG )
- {
- DO_ABS
- }
-
-
- /*************************************************************************/
- /* */
- /* NEG[]: NEGate */
- /* Opcode range: 0x65 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_NEG( INS_ARG )
- {
- DO_NEG
- }
-
-
- /*************************************************************************/
- /* */
- /* FLOOR[]: FLOOR */
- /* Opcode range: 0x66 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_FLOOR( INS_ARG )
- {
- DO_FLOOR
- }
-
-
- /*************************************************************************/
- /* */
- /* CEILING[]: CEILING */
- /* Opcode range: 0x67 */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_CEILING( INS_ARG )
- {
- DO_CEILING
- }
-
-
- /*************************************************************************/
- /* */
- /* RS[]: Read Store */
- /* Opcode range: 0x43 */
- /* Stack: uint32 --> uint32 */
- /* */
- static void
- Ins_RS( INS_ARG )
- {
- DO_RS
- }
-
-
- /*************************************************************************/
- /* */
- /* WS[]: Write Store */
- /* Opcode range: 0x42 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_WS( INS_ARG )
- {
- DO_WS
- }
-
-
- /*************************************************************************/
- /* */
- /* WCVTP[]: Write CVT in Pixel units */
- /* Opcode range: 0x44 */
- /* Stack: f26.6 uint32 --> */
- /* */
- static void
- Ins_WCVTP( INS_ARG )
- {
- DO_WCVTP
- }
-
-
- /*************************************************************************/
- /* */
- /* WCVTF[]: Write CVT in Funits */
- /* Opcode range: 0x70 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_WCVTF( INS_ARG )
- {
- DO_WCVTF
- }
-
-
- /*************************************************************************/
- /* */
- /* RCVT[]: Read CVT */
- /* Opcode range: 0x45 */
- /* Stack: uint32 --> f26.6 */
- /* */
- static void
- Ins_RCVT( INS_ARG )
- {
- DO_RCVT
- }
-
-
- /*************************************************************************/
- /* */
- /* AA[]: Adjust Angle */
- /* Opcode range: 0x7F */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_AA( INS_ARG )
- {
- /* 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( INS_ARG )
- {
- DO_DEBUG
- }
-
-
- /*************************************************************************/
- /* */
- /* ROUND[ab]: ROUND value */
- /* Opcode range: 0x68-0x6B */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_ROUND( INS_ARG )
- {
- DO_ROUND
- }
-
-
- /*************************************************************************/
- /* */
- /* NROUND[ab]: No ROUNDing of value */
- /* Opcode range: 0x6C-0x6F */
- /* Stack: f26.6 --> f26.6 */
- /* */
- static void
- Ins_NROUND( INS_ARG )
- {
- DO_NROUND
- }
-
-
- /*************************************************************************/
- /* */
- /* MAX[]: MAXimum */
- /* Opcode range: 0x68 */
- /* Stack: int32? int32? --> int32 */
- /* */
- static void
- Ins_MAX( INS_ARG )
- {
- DO_MAX
- }
-
-
- /*************************************************************************/
- /* */
- /* MIN[]: MINimum */
- /* Opcode range: 0x69 */
- /* Stack: int32? int32? --> int32 */
- /* */
- static void
- Ins_MIN( INS_ARG )
- {
- DO_MIN
- }
-
-
-#endif /* !TT_CONFIG_OPTION_INTERPRETER_SWITCH */
-
-
- /*************************************************************************/
- /* */
- /* The following functions are called as is within the switch statement. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* MINDEX[]: Move INDEXed element */
- /* Opcode range: 0x26 */
- /* Stack: int32? --> StkElt */
- /* */
- static void
- Ins_MINDEX( INS_ARG )
- {
- FT_Long L, K;
-
-
- L = args[0];
-
- if ( L <= 0 || L > CUR.args )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- K = CUR.stack[CUR.args - L];
-
- FT_ARRAY_MOVE( &CUR.stack[CUR.args - L ],
- &CUR.stack[CUR.args - L + 1],
- ( L - 1 ) );
-
- CUR.stack[CUR.args - 1] = K;
- }
-
-
- /*************************************************************************/
- /* */
- /* ROLL[]: ROLL top three elements */
- /* Opcode range: 0x8A */
- /* Stack: 3 * StkElt --> 3 * StkElt */
- /* */
- static void
- Ins_ROLL( INS_ARG )
- {
- FT_Long A, B, C;
-
- FT_UNUSED_EXEC;
-
-
- A = args[2];
- B = args[1];
- C = args[0];
-
- args[2] = C;
- args[1] = A;
- args[0] = B;
- }
-
-
- /*************************************************************************/
- /* */
- /* MANAGING THE FLOW OF CONTROL */
- /* */
- /* Instructions appear in the specification's order. */
- /* */
- /*************************************************************************/
-
-
- static FT_Bool
- SkipCode( EXEC_OP )
- {
- CUR.IP += CUR.length;
-
- if ( CUR.IP < CUR.codeSize )
- {
- CUR.opcode = CUR.code[CUR.IP];
-
- CUR.length = opcode_length[CUR.opcode];
- if ( CUR.length < 0 )
- {
- if ( CUR.IP + 1 > CUR.codeSize )
- goto Fail_Overflow;
- CUR.length = 2 - CUR.length * CUR.code[CUR.IP + 1];
- }
-
- if ( CUR.IP + CUR.length <= CUR.codeSize )
- return SUCCESS;
- }
-
- Fail_Overflow:
- CUR.error = TT_Err_Code_Overflow;
- return FAILURE;
- }
-
-
- /*************************************************************************/
- /* */
- /* IF[]: IF test */
- /* Opcode range: 0x58 */
- /* Stack: StkElt --> */
- /* */
- static void
- Ins_IF( INS_ARG )
- {
- FT_Int nIfs;
- FT_Bool Out;
-
-
- if ( args[0] != 0 )
- return;
-
- nIfs = 1;
- Out = 0;
-
- do
- {
- if ( SKIP_Code() == FAILURE )
- return;
-
- switch ( CUR.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( INS_ARG )
- {
- FT_Int nIfs;
-
- FT_UNUSED_ARG;
-
-
- nIfs = 1;
-
- do
- {
- if ( SKIP_Code() == FAILURE )
- return;
-
- switch ( CUR.opcode )
- {
- case 0x58: /* IF */
- nIfs++;
- break;
-
- case 0x59: /* EIF */
- nIfs--;
- break;
- }
- } while ( nIfs != 0 );
- }
-
-
- /*************************************************************************/
- /* */
- /* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */
- /* */
- /* Instructions appear in the specification's order. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* FDEF[]: Function DEFinition */
- /* Opcode range: 0x2C */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_FDEF( INS_ARG )
- {
- FT_ULong n;
- TT_DefRecord* rec;
- TT_DefRecord* limit;
-
-
- /* some font programs are broken enough to redefine functions! */
- /* We will then parse the current table. */
-
- rec = CUR.FDefs;
- limit = rec + CUR.numFDefs;
- n = args[0];
-
- for ( ; rec < limit; rec++ )
- {
- if ( rec->opc == n )
- break;
- }
-
- if ( rec == limit )
- {
- /* check that there is enough room for new functions */
- if ( CUR.numFDefs >= CUR.maxFDefs )
- {
- CUR.error = TT_Err_Too_Many_Function_Defs;
- return;
- }
- CUR.numFDefs++;
- }
-
- rec->range = CUR.curRange;
- rec->opc = n;
- rec->start = CUR.IP + 1;
- rec->active = TRUE;
-
- if ( n > CUR.maxFunc )
- CUR.maxFunc = n;
-
- /* Now skip the whole function definition. */
- /* We don't allow nested IDEFS & FDEFs. */
-
- while ( SKIP_Code() == SUCCESS )
- {
- switch ( CUR.opcode )
- {
- case 0x89: /* IDEF */
- case 0x2C: /* FDEF */
- CUR.error = TT_Err_Nested_DEFS;
- return;
-
- case 0x2D: /* ENDF */
- return;
- }
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* ENDF[]: END Function definition */
- /* Opcode range: 0x2D */
- /* Stack: --> */
- /* */
- static void
- Ins_ENDF( INS_ARG )
- {
- TT_CallRec* pRec;
-
- FT_UNUSED_ARG;
-
-
- if ( CUR.callTop <= 0 ) /* We encountered an ENDF without a call */
- {
- CUR.error = TT_Err_ENDF_In_Exec_Stream;
- return;
- }
-
- CUR.callTop--;
-
- pRec = &CUR.callStack[CUR.callTop];
-
- pRec->Cur_Count--;
-
- CUR.step_ins = FALSE;
-
- if ( pRec->Cur_Count > 0 )
- {
- CUR.callTop++;
- CUR.IP = pRec->Cur_Restart;
- }
- else
- /* Loop through the current function */
- INS_Goto_CodeRange( 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( INS_ARG )
- {
- FT_ULong F;
- TT_CallRec* pCrec;
- TT_DefRecord* def;
-
-
- /* first of all, check the index */
-
- F = args[0];
- if ( BOUNDS( F, CUR.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 */
- /* */
- /* CUR.maxFunc+1 == CUR.numFDefs */
- /* CUR.FDefs[n].opc == n for n in 0..CUR.maxFunc */
- /* */
- /* If this isn't true, we need to look up the function table. */
-
- def = CUR.FDefs + F;
- if ( CUR.maxFunc + 1 != CUR.numFDefs || def->opc != F )
- {
- /* look up the FDefs table */
- TT_DefRecord* limit;
-
-
- def = CUR.FDefs;
- limit = def + CUR.numFDefs;
-
- while ( def < limit && def->opc != F )
- def++;
-
- if ( def == limit )
- goto Fail;
- }
-
- /* check that the function is active */
- if ( !def->active )
- goto Fail;
-
- /* check the call stack */
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- pCrec = CUR.callStack + CUR.callTop;
-
- pCrec->Caller_Range = CUR.curRange;
- pCrec->Caller_IP = CUR.IP + 1;
- pCrec->Cur_Count = 1;
- pCrec->Cur_Restart = def->start;
-
- CUR.callTop++;
-
- INS_Goto_CodeRange( def->range,
- def->start );
-
- CUR.step_ins = FALSE;
- return;
-
- Fail:
- CUR.error = TT_Err_Invalid_Reference;
- }
-
-
- /*************************************************************************/
- /* */
- /* LOOPCALL[]: LOOP and CALL function */
- /* Opcode range: 0x2A */
- /* Stack: uint32? Eint16? --> */
- /* */
- static void
- Ins_LOOPCALL( INS_ARG )
- {
- FT_ULong F;
- TT_CallRec* pCrec;
- TT_DefRecord* def;
-
-
- /* first of all, check the index */
- F = args[1];
- if ( BOUNDS( F, CUR.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 */
- /* */
- /* CUR.maxFunc+1 == CUR.numFDefs */
- /* CUR.FDefs[n].opc == n for n in 0..CUR.maxFunc */
- /* */
- /* If this isn't true, we need to look up the function table. */
-
- def = CUR.FDefs + F;
- if ( CUR.maxFunc + 1 != CUR.numFDefs || def->opc != F )
- {
- /* look up the FDefs table */
- TT_DefRecord* limit;
-
-
- def = CUR.FDefs;
- limit = def + CUR.numFDefs;
-
- while ( def < limit && def->opc != F )
- def++;
-
- if ( def == limit )
- goto Fail;
- }
-
- /* check that the function is active */
- if ( !def->active )
- goto Fail;
-
- /* check stack */
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- if ( args[0] > 0 )
- {
- pCrec = CUR.callStack + CUR.callTop;
-
- pCrec->Caller_Range = CUR.curRange;
- pCrec->Caller_IP = CUR.IP + 1;
- pCrec->Cur_Count = (FT_Int)args[0];
- pCrec->Cur_Restart = def->start;
-
- CUR.callTop++;
-
- INS_Goto_CodeRange( def->range, def->start );
-
- CUR.step_ins = FALSE;
- }
- return;
-
- Fail:
- CUR.error = TT_Err_Invalid_Reference;
- }
-
-
- /*************************************************************************/
- /* */
- /* IDEF[]: Instruction DEFinition */
- /* Opcode range: 0x89 */
- /* Stack: Eint8 --> */
- /* */
- static void
- Ins_IDEF( INS_ARG )
- {
- TT_DefRecord* def;
- TT_DefRecord* limit;
-
-
- /* First of all, look for the same function in our table */
-
- def = CUR.IDefs;
- limit = def + CUR.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 ( CUR.numIDefs >= CUR.maxIDefs )
- {
- CUR.error = TT_Err_Too_Many_Instruction_Defs;
- return;
- }
- CUR.numIDefs++;
- }
-
- def->opc = args[0];
- def->start = CUR.IP+1;
- def->range = CUR.curRange;
- def->active = TRUE;
-
- if ( (FT_ULong)args[0] > CUR.maxIns )
- CUR.maxIns = args[0];
-
- /* Now skip the whole function definition. */
- /* We don't allow nested IDEFs & FDEFs. */
-
- while ( SKIP_Code() == SUCCESS )
- {
- switch ( CUR.opcode )
- {
- case 0x89: /* IDEF */
- case 0x2C: /* FDEF */
- CUR.error = TT_Err_Nested_DEFS;
- return;
- case 0x2D: /* ENDF */
- return;
- }
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* PUSHING DATA ONTO THE INTERPRETER STACK */
- /* */
- /* Instructions appear in the specification's order. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* NPUSHB[]: PUSH N Bytes */
- /* Opcode range: 0x40 */
- /* Stack: --> uint32... */
- /* */
- static void
- Ins_NPUSHB( INS_ARG )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)CUR.code[CUR.IP + 1];
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- for ( K = 1; K <= L; K++ )
- args[K - 1] = CUR.code[CUR.IP + K + 1];
-
- CUR.new_top += L;
- }
-
-
- /*************************************************************************/
- /* */
- /* NPUSHW[]: PUSH N Words */
- /* Opcode range: 0x41 */
- /* Stack: --> int32... */
- /* */
- static void
- Ins_NPUSHW( INS_ARG )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)CUR.code[CUR.IP + 1];
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- CUR.IP += 2;
-
- for ( K = 0; K < L; K++ )
- args[K] = GET_ShortIns();
-
- CUR.step_ins = FALSE;
- CUR.new_top += L;
- }
-
-
- /*************************************************************************/
- /* */
- /* PUSHB[abc]: PUSH Bytes */
- /* Opcode range: 0xB0-0xB7 */
- /* Stack: --> uint32... */
- /* */
- static void
- Ins_PUSHB( INS_ARG )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)( CUR.opcode - 0xB0 + 1 );
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- for ( K = 1; K <= L; K++ )
- args[K - 1] = CUR.code[CUR.IP + K];
- }
-
-
- /*************************************************************************/
- /* */
- /* PUSHW[abc]: PUSH Words */
- /* Opcode range: 0xB8-0xBF */
- /* Stack: --> int32... */
- /* */
- static void
- Ins_PUSHW( INS_ARG )
- {
- FT_UShort L, K;
-
-
- L = (FT_UShort)( CUR.opcode - 0xB8 + 1 );
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- CUR.IP++;
-
- for ( K = 0; K < L; K++ )
- args[K] = GET_ShortIns();
-
- CUR.step_ins = FALSE;
- }
-
-
- /*************************************************************************/
- /* */
- /* MANAGING THE GRAPHICS STATE */
- /* */
- /* Instructions appear in the specs' order. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* GC[a]: Get Coordinate projected onto */
- /* Opcode range: 0x46-0x47 */
- /* Stack: uint32 --> f26.6 */
- /* */
- /* BULLSHIT: Measures from the original glyph must be taken along the */
- /* dual projection vector! */
- /* */
- static void
- Ins_GC( INS_ARG )
- {
- FT_ULong L;
- FT_F26Dot6 R;
-
-
- L = (FT_ULong)args[0];
-
- if ( BOUNDS( L, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- else
- R = 0;
- }
- else
- {
- if ( CUR.opcode & 1 )
- R = CUR_fast_dualproj( &CUR.zp2.org[L] );
- else
- R = CUR_fast_project( &CUR.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( INS_ARG )
- {
- FT_Long K;
- FT_UShort L;
-
-
- L = (FT_UShort)args[0];
-
- if ( BOUNDS( L, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- K = CUR_fast_project( &CUR.zp2.cur[L] );
-
- CUR_Func_move( &CUR.zp2, L, args[1] - K );
-
- /* not part of the specs, but here for safety */
-
- if ( CUR.GS.gep2 == 0 )
- CUR.zp2.org[L] = CUR.zp2.cur[L];
- }
-
-
- /*************************************************************************/
- /* */
- /* MD[a]: Measure Distance */
- /* Opcode range: 0x49-0x4A */
- /* Stack: uint32 uint32 --> f26.6 */
- /* */
- /* BULLSHIT: Measure taken in the original glyph must be along the dual */
- /* projection vector. */
- /* */
- /* Second BULLSHIT: Flag attributes are inverted! */
- /* 0 => measure distance in original outline */
- /* 1 => measure distance in grid-fitted outline */
- /* */
- /* Third one: `zp0 - zp1', and not `zp2 - zp1! */
- /* */
- static void
- Ins_MD( INS_ARG )
- {
- FT_UShort K, L;
- FT_F26Dot6 D;
-
-
- K = (FT_UShort)args[1];
- L = (FT_UShort)args[0];
-
- if( BOUNDS( L, CUR.zp0.n_points ) ||
- BOUNDS( K, CUR.zp1.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- D = 0;
- }
- else
- {
- if ( CUR.opcode & 1 )
- D = CUR_Func_project( CUR.zp0.cur + L, CUR.zp1.cur + K );
- else
- {
- FT_Vector* vec1 = CUR.zp0.orus + L;
- FT_Vector* vec2 = CUR.zp1.orus + K;
-
-
- if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
- {
- /* this should be faster */
- D = CUR_Func_dualproj( vec1, vec2 );
- D = TT_MULFIX( D, CUR.metrics.x_scale );
- }
- else
- {
- FT_Vector vec;
-
-
- vec.x = TT_MULFIX( vec1->x - vec2->x, CUR.metrics.x_scale );
- vec.y = TT_MULFIX( vec1->y - vec2->y, CUR.metrics.y_scale );
-
- D = CUR_fast_dualproj( &vec );
- }
- }
- }
-
- args[0] = D;
- }
-
-
- /*************************************************************************/
- /* */
- /* SDPVTL[a]: Set Dual PVector to Line */
- /* Opcode range: 0x86-0x87 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SDPVTL( INS_ARG )
- {
- FT_Long A, B, C;
- FT_UShort p1, p2; /* was FT_Int in pas type ERROR */
-
-
- p1 = (FT_UShort)args[1];
- p2 = (FT_UShort)args[0];
-
- if ( BOUNDS( p2, CUR.zp1.n_points ) ||
- BOUNDS( p1, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- {
- FT_Vector* v1 = CUR.zp1.org + p2;
- FT_Vector* v2 = CUR.zp2.org + p1;
-
-
- A = v1->x - v2->x;
- B = v1->y - v2->y;
- }
-
- if ( ( CUR.opcode & 1 ) != 0 )
- {
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
- }
-
- NORMalize( A, B, &CUR.GS.dualVector );
-
- {
- FT_Vector* v1 = CUR.zp1.cur + p2;
- FT_Vector* v2 = CUR.zp2.cur + p1;
-
-
- A = v1->x - v2->x;
- B = v1->y - v2->y;
- }
-
- if ( ( CUR.opcode & 1 ) != 0 )
- {
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
- }
-
- NORMalize( A, B, &CUR.GS.projVector );
-
- GUESS_VECTOR( freeVector );
-
- COMPUTE_Funcs();
- }
-
-
- /*************************************************************************/
- /* */
- /* SZP0[]: Set Zone Pointer 0 */
- /* Opcode range: 0x13 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZP0( INS_ARG )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- CUR.zp0 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp0 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.GS.gep0 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SZP1[]: Set Zone Pointer 1 */
- /* Opcode range: 0x14 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZP1( INS_ARG )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- CUR.zp1 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp1 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.GS.gep1 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SZP2[]: Set Zone Pointer 2 */
- /* Opcode range: 0x15 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZP2( INS_ARG )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- CUR.zp2 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp2 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.GS.gep2 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* SZPS[]: Set Zone PointerS */
- /* Opcode range: 0x16 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SZPS( INS_ARG )
- {
- switch ( (FT_Int)args[0] )
- {
- case 0:
- CUR.zp0 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp0 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.zp1 = CUR.zp0;
- CUR.zp2 = CUR.zp0;
-
- CUR.GS.gep0 = (FT_UShort)args[0];
- CUR.GS.gep1 = (FT_UShort)args[0];
- CUR.GS.gep2 = (FT_UShort)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* INSTCTRL[]: INSTruction ConTRoL */
- /* Opcode range: 0x8e */
- /* Stack: int32 int32 --> */
- /* */
- static void
- Ins_INSTCTRL( INS_ARG )
- {
- FT_Long K, L;
-
-
- K = args[1];
- L = args[0];
-
- if ( K < 1 || K > 2 )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( L != 0 )
- L = K;
-
- CUR.GS.instruct_control = FT_BOOL(
- ( (FT_Byte)CUR.GS.instruct_control & ~(FT_Byte)K ) | (FT_Byte)L );
- }
-
-
- /*************************************************************************/
- /* */
- /* SCANCTRL[]: SCAN ConTRoL */
- /* Opcode range: 0x85 */
- /* Stack: uint32? --> */
- /* */
- static void
- Ins_SCANCTRL( INS_ARG )
- {
- FT_Int A;
-
-
- /* Get Threshold */
- A = (FT_Int)( args[0] & 0xFF );
-
- if ( A == 0xFF )
- {
- CUR.GS.scan_control = TRUE;
- return;
- }
- else if ( A == 0 )
- {
- CUR.GS.scan_control = FALSE;
- return;
- }
-
- if ( ( args[0] & 0x100 ) != 0 && CUR.tt_metrics.ppem < A )
- CUR.GS.scan_control = TRUE;
-
- if ( ( args[0] & 0x200 ) != 0 && CUR.tt_metrics.rotated )
- CUR.GS.scan_control = TRUE;
-
- if ( ( args[0] & 0x400 ) != 0 && CUR.tt_metrics.stretched )
- CUR.GS.scan_control = TRUE;
-
- if ( ( args[0] & 0x800 ) != 0 && CUR.tt_metrics.ppem >= A )
- CUR.GS.scan_control = FALSE;
-
- if ( ( args[0] & 0x1000 ) != 0 && CUR.tt_metrics.rotated )
- CUR.GS.scan_control = FALSE;
-
- if ( ( args[0] & 0x2000 ) != 0 && CUR.tt_metrics.stretched )
- CUR.GS.scan_control = FALSE;
- }
-
-
- /*************************************************************************/
- /* */
- /* SCANTYPE[]: SCAN TYPE */
- /* Opcode range: 0x8D */
- /* Stack: uint32? --> */
- /* */
- static void
- Ins_SCANTYPE( INS_ARG )
- {
- if ( args[0] >= 0 )
- CUR.GS.scan_type = (FT_Int)args[0];
- }
-
-
- /*************************************************************************/
- /* */
- /* MANAGING OUTLINES */
- /* */
- /* Instructions appear in the specification's order. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* FLIPPT[]: FLIP PoinT */
- /* Opcode range: 0x80 */
- /* Stack: uint32... --> */
- /* */
- static void
- Ins_FLIPPT( INS_ARG )
- {
- FT_UShort point;
-
- FT_UNUSED_ARG;
-
-
- if ( CUR.top < CUR.GS.loop )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
-
- point = (FT_UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.pts.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- CUR.pts.tags[point] ^= FT_CURVE_TAG_ON;
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPRGON[]: FLIP RanGe ON */
- /* Opcode range: 0x81 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_FLIPRGON( INS_ARG )
- {
- FT_UShort I, K, L;
-
-
- K = (FT_UShort)args[1];
- L = (FT_UShort)args[0];
-
- if ( BOUNDS( K, CUR.pts.n_points ) ||
- BOUNDS( L, CUR.pts.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- for ( I = L; I <= K; I++ )
- CUR.pts.tags[I] |= FT_CURVE_TAG_ON;
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPRGOFF: FLIP RanGe OFF */
- /* Opcode range: 0x82 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_FLIPRGOFF( INS_ARG )
- {
- FT_UShort I, K, L;
-
-
- K = (FT_UShort)args[1];
- L = (FT_UShort)args[0];
-
- if ( BOUNDS( K, CUR.pts.n_points ) ||
- BOUNDS( L, CUR.pts.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- for ( I = L; I <= K; I++ )
- CUR.pts.tags[I] &= ~FT_CURVE_TAG_ON;
- }
-
-
- static FT_Bool
- Compute_Point_Displacement( EXEC_OP_ FT_F26Dot6* x,
- FT_F26Dot6* y,
- TT_GlyphZone zone,
- FT_UShort* refp )
- {
- TT_GlyphZoneRec zp;
- FT_UShort p;
- FT_F26Dot6 d;
-
-
- if ( CUR.opcode & 1 )
- {
- zp = CUR.zp0;
- p = CUR.GS.rp1;
- }
- else
- {
- zp = CUR.zp1;
- p = CUR.GS.rp2;
- }
-
- if ( BOUNDS( p, zp.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- *refp = 0;
- return FAILURE;
- }
-
- *zone = zp;
- *refp = p;
-
- d = CUR_Func_project( zp.cur + p, zp.org + p );
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
- {
- if ( CUR.GS.both_x_axis )
- {
- *x = d;
- *y = 0;
- }
- else
- {
- *x = 0;
- *y = d;
- }
- }
- else
-#endif
- {
- *x = TT_MULDIV( d,
- (FT_Long)CUR.GS.freeVector.x * 0x10000L,
- CUR.F_dot_P );
- *y = TT_MULDIV( d,
- (FT_Long)CUR.GS.freeVector.y * 0x10000L,
- CUR.F_dot_P );
- }
-
- return SUCCESS;
- }
-
-
- static void
- Move_Zp2_Point( EXEC_OP_ FT_UShort point,
- FT_F26Dot6 dx,
- FT_F26Dot6 dy,
- FT_Bool touch )
- {
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
- {
- if ( CUR.GS.both_x_axis )
- {
- CUR.zp2.cur[point].x += dx;
- if ( touch )
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
- else
- {
- CUR.zp2.cur[point].y += dy;
- if ( touch )
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
- }
- return;
- }
-#endif
-
- if ( CUR.GS.freeVector.x != 0 )
- {
- CUR.zp2.cur[point].x += dx;
- if ( touch )
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
-
- if ( CUR.GS.freeVector.y != 0 )
- {
- CUR.zp2.cur[point].y += dy;
- if ( touch )
- CUR.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( INS_ARG )
- {
- TT_GlyphZoneRec zp;
- FT_UShort refp;
-
- FT_F26Dot6 dx,
- dy;
- FT_UShort point;
-
- FT_UNUSED_ARG;
-
-
- if ( CUR.top < CUR.GS.loop )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
- return;
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
- point = (FT_UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- /* XXX: UNDOCUMENTED! SHP touches the points */
- MOVE_Zp2_Point( point, dx, dy, TRUE );
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
- /*************************************************************************/
- /* */
- /* SHC[a]: SHift Contour */
- /* Opcode range: 0x34-35 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SHC( INS_ARG )
- {
- TT_GlyphZoneRec zp;
- FT_UShort refp;
- FT_F26Dot6 dx,
- dy;
-
- FT_Short contour;
- FT_UShort first_point, last_point, i;
-
-
- contour = (FT_UShort)args[0];
-
- if ( BOUNDS( contour, CUR.pts.n_contours ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
- return;
-
- if ( contour == 0 )
- first_point = 0;
- else
- first_point = (FT_UShort)( CUR.pts.contours[contour - 1] + 1 -
- CUR.pts.first_point );
-
- last_point = (FT_UShort)( CUR.pts.contours[contour] -
- CUR.pts.first_point );
-
- /* XXX: this is probably wrong... at least it prevents memory */
- /* corruption when zp2 is the twilight zone */
- if ( BOUNDS( last_point, CUR.zp2.n_points ) )
- {
- if ( CUR.zp2.n_points > 0 )
- last_point = (FT_UShort)(CUR.zp2.n_points - 1);
- else
- last_point = 0;
- }
-
- /* XXX: UNDOCUMENTED! SHC touches the points */
- for ( i = first_point; i <= last_point; i++ )
- {
- if ( zp.cur != CUR.zp2.cur || refp != i )
- MOVE_Zp2_Point( i, dx, dy, TRUE );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SHZ[a]: SHift Zone */
- /* Opcode range: 0x36-37 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SHZ( INS_ARG )
- {
- TT_GlyphZoneRec zp;
- FT_UShort refp;
- FT_F26Dot6 dx,
- dy;
-
- FT_UShort last_point, i;
-
-
- if ( BOUNDS( args[0], 2 ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
- return;
-
- /* XXX: UNDOCUMENTED! SHZ doesn't move the phantom points. */
- /* Twilight zone has no contours, so use `n_points'. */
- /* Normal zone's `n_points' includes phantoms, so must */
- /* use end of last contour. */
- if ( CUR.GS.gep2 == 0 && CUR.zp2.n_points > 0 )
- last_point = (FT_UShort)( CUR.zp2.n_points - 1 );
- else if ( CUR.GS.gep2 == 1 && CUR.zp2.n_contours > 0 )
- last_point = (FT_UShort)( CUR.zp2.contours[CUR.zp2.n_contours - 1] );
- else
- last_point = 0;
-
- /* XXX: UNDOCUMENTED! SHZ doesn't touch the points */
- for ( i = 0; i <= last_point; i++ )
- {
- if ( zp.cur != CUR.zp2.cur || refp != i )
- MOVE_Zp2_Point( i, dx, dy, FALSE );
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* SHPIX[]: SHift points by a PIXel amount */
- /* Opcode range: 0x38 */
- /* Stack: f26.6 uint32... --> */
- /* */
- static void
- Ins_SHPIX( INS_ARG )
- {
- FT_F26Dot6 dx, dy;
- FT_UShort point;
-
-
- if ( CUR.top < CUR.GS.loop + 1 )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
- {
- if ( CUR.GS.both_x_axis )
- {
- dx = TT_MulFix14( args[0], 0x4000 );
- dy = 0;
- }
- else
- {
- dx = 0;
- dy = TT_MulFix14( args[0], 0x4000 );
- }
- }
- else
-#endif
- {
- dx = TT_MulFix14( args[0], CUR.GS.freeVector.x );
- dy = TT_MulFix14( args[0], CUR.GS.freeVector.y );
- }
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
-
- point = (FT_UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- MOVE_Zp2_Point( point, dx, dy, TRUE );
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
- /*************************************************************************/
- /* */
- /* MSIRP[a]: Move Stack Indirect Relative Position */
- /* Opcode range: 0x3A-0x3B */
- /* Stack: f26.6 uint32 --> */
- /* */
- static void
- Ins_MSIRP( INS_ARG )
- {
- FT_UShort point;
- FT_F26Dot6 distance;
-
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* XXX: UNDOCUMENTED! behaviour */
- if ( CUR.GS.gep1 == 0 ) /* if the point that is to be moved */
- /* is in twilight zone */
- {
- CUR.zp1.org[point] = CUR.zp0.org[CUR.GS.rp0];
- CUR_Func_move_orig( &CUR.zp1, point, args[1] );
- CUR.zp1.cur[point] = CUR.zp1.org[point];
- }
-
- distance = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
-
- CUR_Func_move( &CUR.zp1, point, args[1] - distance );
-
- CUR.GS.rp1 = CUR.GS.rp0;
- CUR.GS.rp2 = point;
-
- if ( ( CUR.opcode & 1 ) != 0 )
- CUR.GS.rp0 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MDAP[a]: Move Direct Absolute Point */
- /* Opcode range: 0x2E-0x2F */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_MDAP( INS_ARG )
- {
- FT_UShort point;
- FT_F26Dot6 cur_dist,
- distance;
-
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* XXX: Is there some undocumented feature while in the */
- /* twilight zone? ? */
- if ( ( CUR.opcode & 1 ) != 0 )
- {
- cur_dist = CUR_fast_project( &CUR.zp0.cur[point] );
- distance = CUR_Func_round( cur_dist,
- CUR.tt_metrics.compensations[0] ) - cur_dist;
- }
- else
- distance = 0;
-
- CUR_Func_move( &CUR.zp0, point, distance );
-
- CUR.GS.rp0 = point;
- CUR.GS.rp1 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MIAP[a]: Move Indirect Absolute Point */
- /* Opcode range: 0x3E-0x3F */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_MIAP( INS_ARG )
- {
- FT_ULong cvtEntry;
- FT_UShort point;
- FT_F26Dot6 distance,
- org_dist;
-
-
- cvtEntry = (FT_ULong)args[1];
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp0.n_points ) ||
- BOUNDS( cvtEntry, CUR.cvtSize ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* XXX: 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 `illegal' 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. */
-
- distance = CUR_Func_read_cvt( cvtEntry );
-
- if ( CUR.GS.gep0 == 0 ) /* If in twilight zone */
- {
- CUR.zp0.org[point].x = TT_MulFix14( distance, CUR.GS.freeVector.x );
- CUR.zp0.org[point].y = TT_MulFix14( distance, CUR.GS.freeVector.y ),
- CUR.zp0.cur[point] = CUR.zp0.org[point];
- }
-
- org_dist = CUR_fast_project( &CUR.zp0.cur[point] );
-
- if ( ( CUR.opcode & 1 ) != 0 ) /* rounding and control cutin flag */
- {
- if ( FT_ABS( distance - org_dist ) > CUR.GS.control_value_cutin )
- distance = org_dist;
-
- distance = CUR_Func_round( distance, CUR.tt_metrics.compensations[0] );
- }
-
- CUR_Func_move( &CUR.zp0, point, distance - org_dist );
-
- CUR.GS.rp0 = point;
- CUR.GS.rp1 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MDRP[abcde]: Move Direct Relative Point */
- /* Opcode range: 0xC0-0xDF */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_MDRP( INS_ARG )
- {
- FT_UShort point;
- FT_F26Dot6 org_dist, distance;
-
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* XXX: Is there some undocumented feature while in the */
- /* twilight zone? */
-
- /* XXX: UNDOCUMENTED: twilight zone special case */
-
- if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 )
- {
- FT_Vector* vec1 = &CUR.zp1.org[point];
- FT_Vector* vec2 = &CUR.zp0.org[CUR.GS.rp0];
-
-
- org_dist = CUR_Func_dualproj( vec1, vec2 );
- }
- else
- {
- FT_Vector* vec1 = &CUR.zp1.orus[point];
- FT_Vector* vec2 = &CUR.zp0.orus[CUR.GS.rp0];
-
-
- if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
- {
- /* this should be faster */
- org_dist = CUR_Func_dualproj( vec1, vec2 );
- org_dist = TT_MULFIX( org_dist, CUR.metrics.x_scale );
- }
- else
- {
- FT_Vector vec;
-
-
- vec.x = TT_MULFIX( vec1->x - vec2->x, CUR.metrics.x_scale );
- vec.y = TT_MULFIX( vec1->y - vec2->y, CUR.metrics.y_scale );
-
- org_dist = CUR_fast_dualproj( &vec );
- }
- }
-
- /* single width cut-in test */
-
- if ( FT_ABS( org_dist - CUR.GS.single_width_value ) <
- CUR.GS.single_width_cutin )
- {
- if ( org_dist >= 0 )
- org_dist = CUR.GS.single_width_value;
- else
- org_dist = -CUR.GS.single_width_value;
- }
-
- /* round flag */
-
- if ( ( CUR.opcode & 4 ) != 0 )
- distance = CUR_Func_round(
- org_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
- else
- distance = ROUND_None(
- org_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
-
- /* minimum distance flag */
-
- if ( ( CUR.opcode & 8 ) != 0 )
- {
- if ( org_dist >= 0 )
- {
- if ( distance < CUR.GS.minimum_distance )
- distance = CUR.GS.minimum_distance;
- }
- else
- {
- if ( distance > -CUR.GS.minimum_distance )
- distance = -CUR.GS.minimum_distance;
- }
- }
-
- /* now move the point */
-
- org_dist = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
-
- CUR_Func_move( &CUR.zp1, point, distance - org_dist );
-
- CUR.GS.rp1 = CUR.GS.rp0;
- CUR.GS.rp2 = point;
-
- if ( ( CUR.opcode & 16 ) != 0 )
- CUR.GS.rp0 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* MIRP[abcde]: Move Indirect Relative Point */
- /* Opcode range: 0xE0-0xFF */
- /* Stack: int32? uint32 --> */
- /* */
- static void
- Ins_MIRP( INS_ARG )
- {
- FT_UShort point;
- FT_ULong cvtEntry;
-
- FT_F26Dot6 cvt_dist,
- distance,
- cur_dist,
- org_dist;
-
-
- point = (FT_UShort)args[0];
- cvtEntry = (FT_ULong)( args[1] + 1 );
-
- /* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
-
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( cvtEntry, CUR.cvtSize + 1 ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( !cvtEntry )
- cvt_dist = 0;
- else
- cvt_dist = CUR_Func_read_cvt( cvtEntry - 1 );
-
- /* single width test */
-
- if ( FT_ABS( cvt_dist - CUR.GS.single_width_value ) <
- CUR.GS.single_width_cutin )
- {
- if ( cvt_dist >= 0 )
- cvt_dist = CUR.GS.single_width_value;
- else
- cvt_dist = -CUR.GS.single_width_value;
- }
-
- /* XXX: UNDOCUMENTED! -- twilight zone */
-
- if ( CUR.GS.gep1 == 0 )
- {
- CUR.zp1.org[point].x = CUR.zp0.org[CUR.GS.rp0].x +
- TT_MulFix14( cvt_dist, CUR.GS.freeVector.x );
-
- CUR.zp1.org[point].y = CUR.zp0.org[CUR.GS.rp0].y +
- TT_MulFix14( cvt_dist, CUR.GS.freeVector.y );
-
- CUR.zp1.cur[point] = CUR.zp0.cur[point];
- }
-
- org_dist = CUR_Func_dualproj( &CUR.zp1.org[point],
- &CUR.zp0.org[CUR.GS.rp0] );
- cur_dist = CUR_Func_project ( &CUR.zp1.cur[point],
- &CUR.zp0.cur[CUR.GS.rp0] );
-
- /* auto-flip test */
-
- if ( CUR.GS.auto_flip )
- {
- if ( ( org_dist ^ cvt_dist ) < 0 )
- cvt_dist = -cvt_dist;
- }
-
- /* control value cutin and round */
-
- if ( ( CUR.opcode & 4 ) != 0 )
- {
- /* XXX: UNDOCUMENTED! Only perform cut-in test when both points */
- /* refer to the same zone. */
-
- if ( CUR.GS.gep0 == CUR.GS.gep1 )
- if ( FT_ABS( cvt_dist - org_dist ) >= CUR.GS.control_value_cutin )
- cvt_dist = org_dist;
-
- distance = CUR_Func_round(
- cvt_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
- }
- else
- distance = ROUND_None(
- cvt_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
-
- /* minimum distance test */
-
- if ( ( CUR.opcode & 8 ) != 0 )
- {
- if ( org_dist >= 0 )
- {
- if ( distance < CUR.GS.minimum_distance )
- distance = CUR.GS.minimum_distance;
- }
- else
- {
- if ( distance > -CUR.GS.minimum_distance )
- distance = -CUR.GS.minimum_distance;
- }
- }
-
- CUR_Func_move( &CUR.zp1, point, distance - cur_dist );
-
- CUR.GS.rp1 = CUR.GS.rp0;
-
- if ( ( CUR.opcode & 16 ) != 0 )
- CUR.GS.rp0 = point;
-
- /* XXX: UNDOCUMENTED! */
- CUR.GS.rp2 = point;
- }
-
-
- /*************************************************************************/
- /* */
- /* ALIGNRP[]: ALIGN Relative Point */
- /* Opcode range: 0x3C */
- /* Stack: uint32 uint32... --> */
- /* */
- static void
- Ins_ALIGNRP( INS_ARG )
- {
- FT_UShort point;
- FT_F26Dot6 distance;
-
- FT_UNUSED_ARG;
-
-
- if ( CUR.top < CUR.GS.loop ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
-
- point = (FT_UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.zp1.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- {
- distance = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
-
- CUR_Func_move( &CUR.zp1, point, -distance );
- }
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
- /*************************************************************************/
- /* */
- /* ISECT[]: moves point to InterSECTion */
- /* Opcode range: 0x0F */
- /* Stack: 5 * uint32 --> */
- /* */
- static void
- Ins_ISECT( INS_ARG )
- {
- FT_UShort point,
- a0, a1,
- b0, b1;
-
- FT_F26Dot6 discriminant;
-
- 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, CUR.zp0.n_points ) ||
- BOUNDS( b1, CUR.zp0.n_points ) ||
- BOUNDS( a0, CUR.zp1.n_points ) ||
- BOUNDS( a1, CUR.zp1.n_points ) ||
- BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- dbx = CUR.zp0.cur[b1].x - CUR.zp0.cur[b0].x;
- dby = CUR.zp0.cur[b1].y - CUR.zp0.cur[b0].y;
-
- dax = CUR.zp1.cur[a1].x - CUR.zp1.cur[a0].x;
- day = CUR.zp1.cur[a1].y - CUR.zp1.cur[a0].y;
-
- dx = CUR.zp0.cur[b0].x - CUR.zp1.cur[a0].x;
- dy = CUR.zp0.cur[b0].y - CUR.zp1.cur[a0].y;
-
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH;
-
- discriminant = TT_MULDIV( dax, -dby, 0x40 ) +
- TT_MULDIV( day, dbx, 0x40 );
-
- if ( FT_ABS( discriminant ) >= 0x40 )
- {
- val = TT_MULDIV( dx, -dby, 0x40 ) + TT_MULDIV( dy, dbx, 0x40 );
-
- R.x = TT_MULDIV( val, dax, discriminant );
- R.y = TT_MULDIV( val, day, discriminant );
-
- CUR.zp2.cur[point].x = CUR.zp1.cur[a0].x + R.x;
- CUR.zp2.cur[point].y = CUR.zp1.cur[a0].y + R.y;
- }
- else
- {
- /* else, take the middle of the middles of A and B */
-
- CUR.zp2.cur[point].x = ( CUR.zp1.cur[a0].x +
- CUR.zp1.cur[a1].x +
- CUR.zp0.cur[b0].x +
- CUR.zp0.cur[b1].x ) / 4;
- CUR.zp2.cur[point].y = ( CUR.zp1.cur[a0].y +
- CUR.zp1.cur[a1].y +
- CUR.zp0.cur[b0].y +
- CUR.zp0.cur[b1].y ) / 4;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* ALIGNPTS[]: ALIGN PoinTS */
- /* Opcode range: 0x27 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_ALIGNPTS( INS_ARG )
- {
- FT_UShort p1, p2;
- FT_F26Dot6 distance;
-
-
- p1 = (FT_UShort)args[0];
- p2 = (FT_UShort)args[1];
-
- if ( BOUNDS( args[0], CUR.zp1.n_points ) ||
- BOUNDS( args[1], CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- distance = CUR_Func_project( CUR.zp0.cur + p2,
- CUR.zp1.cur + p1 ) / 2;
-
- CUR_Func_move( &CUR.zp1, p1, distance );
- CUR_Func_move( &CUR.zp0, p2, -distance );
- }
-
-
- /*************************************************************************/
- /* */
- /* IP[]: Interpolate Point */
- /* Opcode range: 0x39 */
- /* Stack: uint32... --> */
- /* */
-
- /* SOMETIMES, DUMBER CODE IS BETTER CODE */
-
- static void
- Ins_IP( INS_ARG )
- {
- FT_F26Dot6 old_range, cur_range;
- FT_Vector* orus_base;
- FT_Vector* cur_base;
- FT_Int twilight;
-
- FT_UNUSED_ARG;
-
-
- if ( CUR.top < CUR.GS.loop )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /*
- * We need to deal in a special way with the twilight zone.
- * Otherwise, by definition, the value of CUR.twilight.orus[n] is (0,0),
- * for every n.
- */
- twilight = CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 || CUR.GS.gep2 == 0;
-
- if ( BOUNDS( CUR.GS.rp1, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( twilight )
- orus_base = &CUR.zp0.org[CUR.GS.rp1];
- else
- orus_base = &CUR.zp0.orus[CUR.GS.rp1];
-
- cur_base = &CUR.zp0.cur[CUR.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( CUR.GS.rp1, CUR.zp0.n_points ) ||
- BOUNDS( CUR.GS.rp2, CUR.zp1.n_points ) )
- {
- old_range = 0;
- cur_range = 0;
- }
- else
- {
- if ( twilight )
- old_range = CUR_Func_dualproj( &CUR.zp1.org[CUR.GS.rp2],
- orus_base );
- else
- old_range = CUR_Func_dualproj( &CUR.zp1.orus[CUR.GS.rp2],
- orus_base );
-
- cur_range = CUR_Func_project ( &CUR.zp1.cur[CUR.GS.rp2], cur_base );
- }
-
- for ( ; CUR.GS.loop > 0; --CUR.GS.loop )
- {
- FT_UInt point = (FT_UInt)CUR.stack[--CUR.args];
- FT_F26Dot6 org_dist, cur_dist, new_dist;
-
-
- /* check point bounds */
- if ( BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- continue;
- }
-
- if ( twilight )
- org_dist = CUR_Func_dualproj( &CUR.zp2.org[point], orus_base );
- else
- org_dist = CUR_Func_dualproj( &CUR.zp2.orus[point], orus_base );
-
- cur_dist = CUR_Func_project ( &CUR.zp2.cur[point], cur_base );
-
- if ( org_dist )
- new_dist = ( old_range != 0 )
- ? TT_MULDIV( org_dist, cur_range, old_range )
- : cur_dist;
- else
- new_dist = 0;
-
- CUR_Func_move( &CUR.zp2, (FT_UShort)point, new_dist - cur_dist );
- }
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
- /*************************************************************************/
- /* */
- /* UTP[a]: UnTouch Point */
- /* Opcode range: 0x29 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_UTP( INS_ARG )
- {
- FT_UShort point;
- FT_Byte mask;
-
-
- point = (FT_UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- mask = 0xFF;
-
- if ( CUR.GS.freeVector.x != 0 )
- mask &= ~FT_CURVE_TAG_TOUCH_X;
-
- if ( CUR.GS.freeVector.y != 0 )
- mask &= ~FT_CURVE_TAG_TOUCH_Y;
-
- CUR.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 = worker->curs[p].x - worker->orgs[p].x;
- if ( dx != 0 )
- {
- for ( i = p1; i < p; i++ )
- worker->curs[i].x += dx;
-
- for ( i = p + 1; i <= p2; i++ )
- 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, 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;
- delta1 = worker->curs[ref1].x - org1;
- delta2 = worker->curs[ref2].x - org2;
-
- if ( orus1 == orus2 )
- {
- /* simple shift of untouched points */
- for ( i = p1; i <= p2; i++ )
- {
- FT_F26Dot6 x = worker->orgs[i].x;
-
-
- if ( x <= org1 )
- x += delta1;
- else
- x += delta2;
-
- 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 += delta1;
-
- else if ( x >= org2 )
- x += delta2;
-
- else
- {
- if ( !scale_valid )
- {
- scale_valid = 1;
- scale = TT_MULDIV( org2 + delta2 - ( org1 + delta1 ),
- 0x10000, orus2 - orus1 );
- }
-
- x = ( org1 + delta1 ) +
- TT_MULFIX( 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( INS_ARG )
- {
- 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 */
-
- FT_UNUSED_ARG;
-
-
- /* ignore empty outlines */
- if ( CUR.pts.n_contours == 0 )
- return;
-
- if ( CUR.opcode & 1 )
- {
- mask = FT_CURVE_TAG_TOUCH_X;
- V.orgs = CUR.pts.org;
- V.curs = CUR.pts.cur;
- V.orus = CUR.pts.orus;
- }
- else
- {
- mask = FT_CURVE_TAG_TOUCH_Y;
- V.orgs = (FT_Vector*)( (FT_Pos*)CUR.pts.org + 1 );
- V.curs = (FT_Vector*)( (FT_Pos*)CUR.pts.cur + 1 );
- V.orus = (FT_Vector*)( (FT_Pos*)CUR.pts.orus + 1 );
- }
- V.max_points = CUR.pts.n_points;
-
- contour = 0;
- point = 0;
-
- do
- {
- end_point = CUR.pts.contours[contour] - CUR.pts.first_point;
- first_point = point;
-
- if ( CUR.pts.n_points <= end_point )
- end_point = CUR.pts.n_points;
-
- while ( point <= end_point && ( CUR.pts.tags[point] & mask ) == 0 )
- point++;
-
- if ( point <= end_point )
- {
- first_touched = point;
- cur_touched = point;
-
- point++;
-
- while ( point <= end_point )
- {
- if ( ( CUR.pts.tags[point] & mask ) != 0 )
- {
- if ( point > 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 < CUR.pts.n_contours );
- }
-
-
- /*************************************************************************/
- /* */
- /* DELTAPn[]: DELTA exceptions P1, P2, P3 */
- /* Opcode range: 0x5D,0x71,0x72 */
- /* Stack: uint32 (2 * uint32)... --> */
- /* */
- static void
- Ins_DELTAP( INS_ARG )
- {
- FT_ULong k, nump;
- FT_UShort A;
- FT_ULong C;
- FT_Long B;
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- /* Delta hinting is covered by US Patent 5159668. */
- if ( CUR.face->unpatented_hinting )
- {
- FT_Long n = args[0] * 2;
-
-
- if ( CUR.args < n )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- CUR.args -= n;
- CUR.new_top = CUR.args;
- return;
- }
-#endif
-
- 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 ( CUR.args < 2 )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- CUR.args -= 2;
-
- A = (FT_UShort)CUR.stack[CUR.args + 1];
- B = CUR.stack[CUR.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, CUR.zp0.n_points ) )
- {
- C = ( (FT_ULong)B & 0xF0 ) >> 4;
-
- switch ( CUR.opcode )
- {
- case 0x5D:
- break;
-
- case 0x71:
- C += 16;
- break;
-
- case 0x72:
- C += 32;
- break;
- }
-
- C += CUR.GS.delta_base;
-
- if ( CURRENT_Ppem() == (FT_Long)C )
- {
- B = ( (FT_ULong)B & 0xF ) - 8;
- if ( B >= 0 )
- B++;
- B = B * 64 / ( 1L << CUR.GS.delta_shift );
-
- CUR_Func_move( &CUR.zp0, A, B );
- }
- }
- else
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- }
-
- CUR.new_top = CUR.args;
- }
-
-
- /*************************************************************************/
- /* */
- /* DELTACn[]: DELTA exceptions C1, C2, C3 */
- /* Opcode range: 0x73,0x74,0x75 */
- /* Stack: uint32 (2 * uint32)... --> */
- /* */
- static void
- Ins_DELTAC( INS_ARG )
- {
- FT_ULong nump, k;
- FT_ULong A, C;
- FT_Long B;
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- /* Delta hinting is covered by US Patent 5159668. */
- if ( CUR.face->unpatented_hinting )
- {
- FT_Long n = args[0] * 2;
-
-
- if ( CUR.args < n )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- CUR.args -= n;
- CUR.new_top = CUR.args;
- return;
- }
-#endif
-
- nump = (FT_ULong)args[0];
-
- for ( k = 1; k <= nump; k++ )
- {
- if ( CUR.args < 2 )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- CUR.args -= 2;
-
- A = (FT_ULong)CUR.stack[CUR.args + 1];
- B = CUR.stack[CUR.args];
-
- if ( BOUNDS( A, CUR.cvtSize ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- {
- C = ( (FT_ULong)B & 0xF0 ) >> 4;
-
- switch ( CUR.opcode )
- {
- case 0x73:
- break;
-
- case 0x74:
- C += 16;
- break;
-
- case 0x75:
- C += 32;
- break;
- }
-
- C += CUR.GS.delta_base;
-
- if ( CURRENT_Ppem() == (FT_Long)C )
- {
- B = ( (FT_ULong)B & 0xF ) - 8;
- if ( B >= 0 )
- B++;
- B = B * 64 / ( 1L << CUR.GS.delta_shift );
-
- CUR_Func_move_cvt( A, B );
- }
- }
- }
-
- CUR.new_top = CUR.args;
- }
-
-
- /*************************************************************************/
- /* */
- /* MISC. INSTRUCTIONS */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* GETINFO[]: GET INFOrmation */
- /* Opcode range: 0x88 */
- /* Stack: uint32 --> uint32 */
- /* */
- static void
- Ins_GETINFO( INS_ARG )
- {
- FT_Long K;
-
-
- K = 0;
-
- /* We return MS rasterizer version 1.7 for the font scaler. */
- if ( ( args[0] & 1 ) != 0 )
- K = 35;
-
- /* Has the glyph been rotated? */
- if ( ( args[0] & 2 ) != 0 && CUR.tt_metrics.rotated )
- K |= 0x80;
-
- /* Has the glyph been stretched? */
- if ( ( args[0] & 4 ) != 0 && CUR.tt_metrics.stretched )
- K |= 1 << 8;
-
- /* Are we hinting for grayscale? */
- if ( ( args[0] & 32 ) != 0 && CUR.grayscale )
- K |= 1 << 12;
-
- args[0] = K;
- }
-
-
- static void
- Ins_UNKNOWN( INS_ARG )
- {
- TT_DefRecord* def = CUR.IDefs;
- TT_DefRecord* limit = def + CUR.numIDefs;
-
- FT_UNUSED_ARG;
-
-
- for ( ; def < limit; def++ )
- {
- if ( (FT_Byte)def->opc == CUR.opcode && def->active )
- {
- TT_CallRec* call;
-
-
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- call = CUR.callStack + CUR.callTop++;
-
- call->Caller_Range = CUR.curRange;
- call->Caller_IP = CUR.IP+1;
- call->Cur_Count = 1;
- call->Cur_Restart = def->start;
-
- INS_Goto_CodeRange( def->range, def->start );
-
- CUR.step_ins = FALSE;
- return;
- }
- }
-
- CUR.error = TT_Err_Invalid_Opcode;
- }
-
-
-#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
- static
- TInstruction_Function Instruct_Dispatch[256] =
- {
- /* Opcodes are gathered in groups of 16. */
- /* Please keep the spaces as they are. */
-
- /* SVTCA y */ Ins_SVTCA,
- /* SVTCA x */ Ins_SVTCA,
- /* SPvTCA y */ Ins_SPVTCA,
- /* SPvTCA x */ Ins_SPVTCA,
- /* SFvTCA y */ Ins_SFVTCA,
- /* SFvTCA x */ Ins_SFVTCA,
- /* SPvTL // */ Ins_SPVTL,
- /* SPvTL + */ Ins_SPVTL,
- /* SFvTL // */ Ins_SFVTL,
- /* SFvTL + */ Ins_SFVTL,
- /* SPvFS */ Ins_SPVFS,
- /* SFvFS */ Ins_SFVFS,
- /* GPV */ Ins_GPV,
- /* GFV */ Ins_GFV,
- /* SFvTPv */ Ins_SFVTPV,
- /* ISECT */ Ins_ISECT,
-
- /* SRP0 */ Ins_SRP0,
- /* SRP1 */ Ins_SRP1,
- /* SRP2 */ Ins_SRP2,
- /* SZP0 */ Ins_SZP0,
- /* SZP1 */ Ins_SZP1,
- /* SZP2 */ Ins_SZP2,
- /* SZPS */ Ins_SZPS,
- /* SLOOP */ Ins_SLOOP,
- /* RTG */ Ins_RTG,
- /* RTHG */ Ins_RTHG,
- /* SMD */ Ins_SMD,
- /* ELSE */ Ins_ELSE,
- /* JMPR */ Ins_JMPR,
- /* SCvTCi */ Ins_SCVTCI,
- /* SSwCi */ Ins_SSWCI,
- /* SSW */ Ins_SSW,
-
- /* DUP */ Ins_DUP,
- /* POP */ Ins_POP,
- /* CLEAR */ Ins_CLEAR,
- /* SWAP */ Ins_SWAP,
- /* DEPTH */ Ins_DEPTH,
- /* CINDEX */ Ins_CINDEX,
- /* MINDEX */ Ins_MINDEX,
- /* AlignPTS */ Ins_ALIGNPTS,
- /* INS_0x28 */ Ins_UNKNOWN,
- /* UTP */ Ins_UTP,
- /* LOOPCALL */ Ins_LOOPCALL,
- /* CALL */ Ins_CALL,
- /* FDEF */ Ins_FDEF,
- /* ENDF */ Ins_ENDF,
- /* MDAP[0] */ Ins_MDAP,
- /* MDAP[1] */ Ins_MDAP,
-
- /* IUP[0] */ Ins_IUP,
- /* IUP[1] */ Ins_IUP,
- /* SHP[0] */ Ins_SHP,
- /* SHP[1] */ Ins_SHP,
- /* SHC[0] */ Ins_SHC,
- /* SHC[1] */ Ins_SHC,
- /* SHZ[0] */ Ins_SHZ,
- /* SHZ[1] */ Ins_SHZ,
- /* SHPIX */ Ins_SHPIX,
- /* IP */ Ins_IP,
- /* MSIRP[0] */ Ins_MSIRP,
- /* MSIRP[1] */ Ins_MSIRP,
- /* AlignRP */ Ins_ALIGNRP,
- /* RTDG */ Ins_RTDG,
- /* MIAP[0] */ Ins_MIAP,
- /* MIAP[1] */ Ins_MIAP,
-
- /* NPushB */ Ins_NPUSHB,
- /* NPushW */ Ins_NPUSHW,
- /* WS */ Ins_WS,
- /* RS */ Ins_RS,
- /* WCvtP */ Ins_WCVTP,
- /* RCvt */ Ins_RCVT,
- /* GC[0] */ Ins_GC,
- /* GC[1] */ Ins_GC,
- /* SCFS */ Ins_SCFS,
- /* MD[0] */ Ins_MD,
- /* MD[1] */ Ins_MD,
- /* MPPEM */ Ins_MPPEM,
- /* MPS */ Ins_MPS,
- /* FlipON */ Ins_FLIPON,
- /* FlipOFF */ Ins_FLIPOFF,
- /* DEBUG */ Ins_DEBUG,
-
- /* LT */ Ins_LT,
- /* LTEQ */ Ins_LTEQ,
- /* GT */ Ins_GT,
- /* GTEQ */ Ins_GTEQ,
- /* EQ */ Ins_EQ,
- /* NEQ */ Ins_NEQ,
- /* ODD */ Ins_ODD,
- /* EVEN */ Ins_EVEN,
- /* IF */ Ins_IF,
- /* EIF */ Ins_EIF,
- /* AND */ Ins_AND,
- /* OR */ Ins_OR,
- /* NOT */ Ins_NOT,
- /* DeltaP1 */ Ins_DELTAP,
- /* SDB */ Ins_SDB,
- /* SDS */ Ins_SDS,
-
- /* ADD */ Ins_ADD,
- /* SUB */ Ins_SUB,
- /* DIV */ Ins_DIV,
- /* MUL */ Ins_MUL,
- /* ABS */ Ins_ABS,
- /* NEG */ Ins_NEG,
- /* FLOOR */ Ins_FLOOR,
- /* CEILING */ Ins_CEILING,
- /* ROUND[0] */ Ins_ROUND,
- /* ROUND[1] */ Ins_ROUND,
- /* ROUND[2] */ Ins_ROUND,
- /* ROUND[3] */ Ins_ROUND,
- /* NROUND[0] */ Ins_NROUND,
- /* NROUND[1] */ Ins_NROUND,
- /* NROUND[2] */ Ins_NROUND,
- /* NROUND[3] */ Ins_NROUND,
-
- /* WCvtF */ Ins_WCVTF,
- /* DeltaP2 */ Ins_DELTAP,
- /* DeltaP3 */ Ins_DELTAP,
- /* DeltaCn[0] */ Ins_DELTAC,
- /* DeltaCn[1] */ Ins_DELTAC,
- /* DeltaCn[2] */ Ins_DELTAC,
- /* SROUND */ Ins_SROUND,
- /* S45Round */ Ins_S45ROUND,
- /* JROT */ Ins_JROT,
- /* JROF */ Ins_JROF,
- /* ROFF */ Ins_ROFF,
- /* INS_0x7B */ Ins_UNKNOWN,
- /* RUTG */ Ins_RUTG,
- /* RDTG */ Ins_RDTG,
- /* SANGW */ Ins_SANGW,
- /* AA */ Ins_AA,
-
- /* FlipPT */ Ins_FLIPPT,
- /* FlipRgON */ Ins_FLIPRGON,
- /* FlipRgOFF */ Ins_FLIPRGOFF,
- /* INS_0x83 */ Ins_UNKNOWN,
- /* INS_0x84 */ Ins_UNKNOWN,
- /* ScanCTRL */ Ins_SCANCTRL,
- /* SDPVTL[0] */ Ins_SDPVTL,
- /* SDPVTL[1] */ Ins_SDPVTL,
- /* GetINFO */ Ins_GETINFO,
- /* IDEF */ Ins_IDEF,
- /* ROLL */ Ins_ROLL,
- /* MAX */ Ins_MAX,
- /* MIN */ Ins_MIN,
- /* ScanTYPE */ Ins_SCANTYPE,
- /* InstCTRL */ Ins_INSTCTRL,
- /* INS_0x8F */ Ins_UNKNOWN,
-
- /* INS_0x90 */ Ins_UNKNOWN,
- /* INS_0x91 */ Ins_UNKNOWN,
- /* INS_0x92 */ Ins_UNKNOWN,
- /* INS_0x93 */ Ins_UNKNOWN,
- /* INS_0x94 */ Ins_UNKNOWN,
- /* INS_0x95 */ Ins_UNKNOWN,
- /* INS_0x96 */ Ins_UNKNOWN,
- /* INS_0x97 */ Ins_UNKNOWN,
- /* INS_0x98 */ Ins_UNKNOWN,
- /* INS_0x99 */ Ins_UNKNOWN,
- /* INS_0x9A */ Ins_UNKNOWN,
- /* INS_0x9B */ Ins_UNKNOWN,
- /* INS_0x9C */ Ins_UNKNOWN,
- /* INS_0x9D */ Ins_UNKNOWN,
- /* INS_0x9E */ Ins_UNKNOWN,
- /* INS_0x9F */ Ins_UNKNOWN,
-
- /* INS_0xA0 */ Ins_UNKNOWN,
- /* INS_0xA1 */ Ins_UNKNOWN,
- /* INS_0xA2 */ Ins_UNKNOWN,
- /* INS_0xA3 */ Ins_UNKNOWN,
- /* INS_0xA4 */ Ins_UNKNOWN,
- /* INS_0xA5 */ Ins_UNKNOWN,
- /* INS_0xA6 */ Ins_UNKNOWN,
- /* INS_0xA7 */ Ins_UNKNOWN,
- /* INS_0xA8 */ Ins_UNKNOWN,
- /* INS_0xA9 */ Ins_UNKNOWN,
- /* INS_0xAA */ Ins_UNKNOWN,
- /* INS_0xAB */ Ins_UNKNOWN,
- /* INS_0xAC */ Ins_UNKNOWN,
- /* INS_0xAD */ Ins_UNKNOWN,
- /* INS_0xAE */ Ins_UNKNOWN,
- /* INS_0xAF */ Ins_UNKNOWN,
-
- /* PushB[0] */ Ins_PUSHB,
- /* PushB[1] */ Ins_PUSHB,
- /* PushB[2] */ Ins_PUSHB,
- /* PushB[3] */ Ins_PUSHB,
- /* PushB[4] */ Ins_PUSHB,
- /* PushB[5] */ Ins_PUSHB,
- /* PushB[6] */ Ins_PUSHB,
- /* PushB[7] */ Ins_PUSHB,
- /* PushW[0] */ Ins_PUSHW,
- /* PushW[1] */ Ins_PUSHW,
- /* PushW[2] */ Ins_PUSHW,
- /* PushW[3] */ Ins_PUSHW,
- /* PushW[4] */ Ins_PUSHW,
- /* PushW[5] */ Ins_PUSHW,
- /* PushW[6] */ Ins_PUSHW,
- /* PushW[7] */ Ins_PUSHW,
-
- /* MDRP[00] */ Ins_MDRP,
- /* MDRP[01] */ Ins_MDRP,
- /* MDRP[02] */ Ins_MDRP,
- /* MDRP[03] */ Ins_MDRP,
- /* MDRP[04] */ Ins_MDRP,
- /* MDRP[05] */ Ins_MDRP,
- /* MDRP[06] */ Ins_MDRP,
- /* MDRP[07] */ Ins_MDRP,
- /* MDRP[08] */ Ins_MDRP,
- /* MDRP[09] */ Ins_MDRP,
- /* MDRP[10] */ Ins_MDRP,
- /* MDRP[11] */ Ins_MDRP,
- /* MDRP[12] */ Ins_MDRP,
- /* MDRP[13] */ Ins_MDRP,
- /* MDRP[14] */ Ins_MDRP,
- /* MDRP[15] */ Ins_MDRP,
-
- /* MDRP[16] */ Ins_MDRP,
- /* MDRP[17] */ Ins_MDRP,
- /* MDRP[18] */ Ins_MDRP,
- /* MDRP[19] */ Ins_MDRP,
- /* MDRP[20] */ Ins_MDRP,
- /* MDRP[21] */ Ins_MDRP,
- /* MDRP[22] */ Ins_MDRP,
- /* MDRP[23] */ Ins_MDRP,
- /* MDRP[24] */ Ins_MDRP,
- /* MDRP[25] */ Ins_MDRP,
- /* MDRP[26] */ Ins_MDRP,
- /* MDRP[27] */ Ins_MDRP,
- /* MDRP[28] */ Ins_MDRP,
- /* MDRP[29] */ Ins_MDRP,
- /* MDRP[30] */ Ins_MDRP,
- /* MDRP[31] */ Ins_MDRP,
-
- /* MIRP[00] */ Ins_MIRP,
- /* MIRP[01] */ Ins_MIRP,
- /* MIRP[02] */ Ins_MIRP,
- /* MIRP[03] */ Ins_MIRP,
- /* MIRP[04] */ Ins_MIRP,
- /* MIRP[05] */ Ins_MIRP,
- /* MIRP[06] */ Ins_MIRP,
- /* MIRP[07] */ Ins_MIRP,
- /* MIRP[08] */ Ins_MIRP,
- /* MIRP[09] */ Ins_MIRP,
- /* MIRP[10] */ Ins_MIRP,
- /* MIRP[11] */ Ins_MIRP,
- /* MIRP[12] */ Ins_MIRP,
- /* MIRP[13] */ Ins_MIRP,
- /* MIRP[14] */ Ins_MIRP,
- /* MIRP[15] */ Ins_MIRP,
-
- /* MIRP[16] */ Ins_MIRP,
- /* MIRP[17] */ Ins_MIRP,
- /* MIRP[18] */ Ins_MIRP,
- /* MIRP[19] */ Ins_MIRP,
- /* MIRP[20] */ Ins_MIRP,
- /* MIRP[21] */ Ins_MIRP,
- /* MIRP[22] */ Ins_MIRP,
- /* MIRP[23] */ Ins_MIRP,
- /* MIRP[24] */ Ins_MIRP,
- /* MIRP[25] */ Ins_MIRP,
- /* MIRP[26] */ Ins_MIRP,
- /* MIRP[27] */ Ins_MIRP,
- /* MIRP[28] */ Ins_MIRP,
- /* MIRP[29] */ Ins_MIRP,
- /* MIRP[30] */ Ins_MIRP,
- /* MIRP[31] */ Ins_MIRP
- };
-
-
-#endif /* !TT_CONFIG_OPTION_INTERPRETER_SWITCH */
-
-
- /*************************************************************************/
- /* */
- /* 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. */
- /* */
- /* Instructions appear in the specification's order. */
- /* */
- /*************************************************************************/
-
-
- /* documentation is in ttinterp.h */
-
- FT_EXPORT_DEF( FT_Error )
- TT_RunIns( TT_ExecContext exc )
- {
- FT_Long ins_counter = 0; /* executed instructions counter */
-
-
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
- cur = *exc;
-#endif
-
- /* set CVT functions */
- CUR.tt_metrics.ratio = 0;
- if ( CUR.metrics.x_ppem != CUR.metrics.y_ppem )
- {
- /* non-square pixels, use the stretched routines */
- CUR.func_read_cvt = Read_CVT_Stretched;
- CUR.func_write_cvt = Write_CVT_Stretched;
- CUR.func_move_cvt = Move_CVT_Stretched;
- }
- else
- {
- /* square pixels, use normal routines */
- CUR.func_read_cvt = Read_CVT;
- CUR.func_write_cvt = Write_CVT;
- CUR.func_move_cvt = Move_CVT;
- }
-
- COMPUTE_Funcs();
- COMPUTE_Round( (FT_Byte)exc->GS.round_state );
-
- do
- {
- CUR.opcode = CUR.code[CUR.IP];
-
- if ( ( CUR.length = opcode_length[CUR.opcode] ) < 0 )
- {
- if ( CUR.IP + 1 > CUR.codeSize )
- goto LErrorCodeOverflow_;
-
- CUR.length = 2 - CUR.length * CUR.code[CUR.IP + 1];
- }
-
- if ( CUR.IP + CUR.length > CUR.codeSize )
- goto LErrorCodeOverflow_;
-
- /* First, let's check for empty stack and overflow */
- CUR.args = CUR.top - ( Pop_Push_Count[CUR.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 ( CUR.args < 0 )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- goto LErrorLabel_;
- }
-
- CUR.new_top = CUR.args + ( Pop_Push_Count[CUR.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 ( CUR.new_top > CUR.stackSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- goto LErrorLabel_;
- }
-
- CUR.step_ins = TRUE;
- CUR.error = TT_Err_Ok;
-
-#ifdef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
- {
- FT_Long* args = CUR.stack + CUR.args;
- FT_Byte opcode = CUR.opcode;
-
-
-#undef ARRAY_BOUND_ERROR
-#define ARRAY_BOUND_ERROR goto Set_Invalid_Ref
-
-
- 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 */
- {
- FT_Short AA, BB;
-
-
- AA = (FT_Short)( ( opcode & 1 ) << 14 );
- BB = (FT_Short)( AA ^ 0x4000 );
-
- if ( opcode < 4 )
- {
- CUR.GS.projVector.x = AA;
- CUR.GS.projVector.y = BB;
-
- CUR.GS.dualVector.x = AA;
- CUR.GS.dualVector.y = BB;
- }
- else
- {
- GUESS_VECTOR( projVector );
- }
-
- if ( ( opcode & 2 ) == 0 )
- {
- CUR.GS.freeVector.x = AA;
- CUR.GS.freeVector.y = BB;
- }
- else
- {
- GUESS_VECTOR( freeVector );
- }
-
- COMPUTE_Funcs();
- }
- break;
-
- case 0x06: /* SPvTL // */
- case 0x07: /* SPvTL + */
- DO_SPVTL
- break;
-
- case 0x08: /* SFvTL // */
- case 0x09: /* SFvTL + */
- DO_SFVTL
- break;
-
- case 0x0A: /* SPvFS */
- DO_SPVFS
- break;
-
- case 0x0B: /* SFvFS */
- DO_SFVFS
- break;
-
- case 0x0C: /* GPV */
- DO_GPV
- break;
-
- case 0x0D: /* GFV */
- DO_GFV
- break;
-
- case 0x0E: /* SFvTPv */
- DO_SFVTPV
- break;
-
- case 0x0F: /* ISECT */
- Ins_ISECT( EXEC_ARG_ args );
- break;
-
- case 0x10: /* SRP0 */
- DO_SRP0
- break;
-
- case 0x11: /* SRP1 */
- DO_SRP1
- break;
-
- case 0x12: /* SRP2 */
- DO_SRP2
- break;
-
- case 0x13: /* SZP0 */
- Ins_SZP0( EXEC_ARG_ args );
- break;
-
- case 0x14: /* SZP1 */
- Ins_SZP1( EXEC_ARG_ args );
- break;
-
- case 0x15: /* SZP2 */
- Ins_SZP2( EXEC_ARG_ args );
- break;
-
- case 0x16: /* SZPS */
- Ins_SZPS( EXEC_ARG_ args );
- break;
-
- case 0x17: /* SLOOP */
- DO_SLOOP
- break;
-
- case 0x18: /* RTG */
- DO_RTG
- break;
-
- case 0x19: /* RTHG */
- DO_RTHG
- break;
-
- case 0x1A: /* SMD */
- DO_SMD
- break;
-
- case 0x1B: /* ELSE */
- Ins_ELSE( EXEC_ARG_ args );
- break;
-
- case 0x1C: /* JMPR */
- DO_JMPR
- break;
-
- case 0x1D: /* SCVTCI */
- DO_SCVTCI
- break;
-
- case 0x1E: /* SSWCI */
- DO_SSWCI
- break;
-
- case 0x1F: /* SSW */
- DO_SSW
- break;
-
- case 0x20: /* DUP */
- DO_DUP
- break;
-
- case 0x21: /* POP */
- /* nothing :-) */
- break;
-
- case 0x22: /* CLEAR */
- DO_CLEAR
- break;
-
- case 0x23: /* SWAP */
- DO_SWAP
- break;
-
- case 0x24: /* DEPTH */
- DO_DEPTH
- break;
-
- case 0x25: /* CINDEX */
- DO_CINDEX
- break;
-
- case 0x26: /* MINDEX */
- Ins_MINDEX( EXEC_ARG_ args );
- break;
-
- case 0x27: /* ALIGNPTS */
- Ins_ALIGNPTS( EXEC_ARG_ args );
- break;
-
- case 0x28: /* ???? */
- Ins_UNKNOWN( EXEC_ARG_ args );
- break;
-
- case 0x29: /* UTP */
- Ins_UTP( EXEC_ARG_ args );
- break;
-
- case 0x2A: /* LOOPCALL */
- Ins_LOOPCALL( EXEC_ARG_ args );
- break;
-
- case 0x2B: /* CALL */
- Ins_CALL( EXEC_ARG_ args );
- break;
-
- case 0x2C: /* FDEF */
- Ins_FDEF( EXEC_ARG_ args );
- break;
-
- case 0x2D: /* ENDF */
- Ins_ENDF( EXEC_ARG_ args );
- break;
-
- case 0x2E: /* MDAP */
- case 0x2F: /* MDAP */
- Ins_MDAP( EXEC_ARG_ args );
- break;
-
-
- case 0x30: /* IUP */
- case 0x31: /* IUP */
- Ins_IUP( EXEC_ARG_ args );
- break;
-
- case 0x32: /* SHP */
- case 0x33: /* SHP */
- Ins_SHP( EXEC_ARG_ args );
- break;
-
- case 0x34: /* SHC */
- case 0x35: /* SHC */
- Ins_SHC( EXEC_ARG_ args );
- break;
-
- case 0x36: /* SHZ */
- case 0x37: /* SHZ */
- Ins_SHZ( EXEC_ARG_ args );
- break;
-
- case 0x38: /* SHPIX */
- Ins_SHPIX( EXEC_ARG_ args );
- break;
-
- case 0x39: /* IP */
- Ins_IP( EXEC_ARG_ args );
- break;
-
- case 0x3A: /* MSIRP */
- case 0x3B: /* MSIRP */
- Ins_MSIRP( EXEC_ARG_ args );
- break;
-
- case 0x3C: /* AlignRP */
- Ins_ALIGNRP( EXEC_ARG_ args );
- break;
-
- case 0x3D: /* RTDG */
- DO_RTDG
- break;
-
- case 0x3E: /* MIAP */
- case 0x3F: /* MIAP */
- Ins_MIAP( EXEC_ARG_ args );
- break;
-
- case 0x40: /* NPUSHB */
- Ins_NPUSHB( EXEC_ARG_ args );
- break;
-
- case 0x41: /* NPUSHW */
- Ins_NPUSHW( EXEC_ARG_ args );
- break;
-
- case 0x42: /* WS */
- DO_WS
- break;
-
- Set_Invalid_Ref:
- CUR.error = TT_Err_Invalid_Reference;
- break;
-
- case 0x43: /* RS */
- DO_RS
- break;
-
- case 0x44: /* WCVTP */
- DO_WCVTP
- break;
-
- case 0x45: /* RCVT */
- DO_RCVT
- break;
-
- case 0x46: /* GC */
- case 0x47: /* GC */
- Ins_GC( EXEC_ARG_ args );
- break;
-
- case 0x48: /* SCFS */
- Ins_SCFS( EXEC_ARG_ args );
- break;
-
- case 0x49: /* MD */
- case 0x4A: /* MD */
- Ins_MD( EXEC_ARG_ args );
- break;
-
- case 0x4B: /* MPPEM */
- DO_MPPEM
- break;
-
- case 0x4C: /* MPS */
- DO_MPS
- break;
-
- case 0x4D: /* FLIPON */
- DO_FLIPON
- break;
-
- case 0x4E: /* FLIPOFF */
- DO_FLIPOFF
- break;
-
- case 0x4F: /* DEBUG */
- DO_DEBUG
- break;
-
- case 0x50: /* LT */
- DO_LT
- break;
-
- case 0x51: /* LTEQ */
- DO_LTEQ
- break;
-
- case 0x52: /* GT */
- DO_GT
- break;
-
- case 0x53: /* GTEQ */
- DO_GTEQ
- break;
-
- case 0x54: /* EQ */
- DO_EQ
- break;
-
- case 0x55: /* NEQ */
- DO_NEQ
- break;
-
- case 0x56: /* ODD */
- DO_ODD
- break;
-
- case 0x57: /* EVEN */
- DO_EVEN
- break;
-
- case 0x58: /* IF */
- Ins_IF( EXEC_ARG_ args );
- break;
-
- case 0x59: /* EIF */
- /* do nothing */
- break;
-
- case 0x5A: /* AND */
- DO_AND
- break;
-
- case 0x5B: /* OR */
- DO_OR
- break;
-
- case 0x5C: /* NOT */
- DO_NOT
- break;
-
- case 0x5D: /* DELTAP1 */
- Ins_DELTAP( EXEC_ARG_ args );
- break;
-
- case 0x5E: /* SDB */
- DO_SDB
- break;
-
- case 0x5F: /* SDS */
- DO_SDS
- break;
-
- case 0x60: /* ADD */
- DO_ADD
- break;
-
- case 0x61: /* SUB */
- DO_SUB
- break;
-
- case 0x62: /* DIV */
- DO_DIV
- break;
-
- case 0x63: /* MUL */
- DO_MUL
- break;
-
- case 0x64: /* ABS */
- DO_ABS
- break;
-
- case 0x65: /* NEG */
- DO_NEG
- break;
-
- case 0x66: /* FLOOR */
- DO_FLOOR
- break;
-
- case 0x67: /* CEILING */
- DO_CEILING
- break;
-
- case 0x68: /* ROUND */
- case 0x69: /* ROUND */
- case 0x6A: /* ROUND */
- case 0x6B: /* ROUND */
- DO_ROUND
- break;
-
- case 0x6C: /* NROUND */
- case 0x6D: /* NROUND */
- case 0x6E: /* NRRUND */
- case 0x6F: /* NROUND */
- DO_NROUND
- break;
-
- case 0x70: /* WCVTF */
- DO_WCVTF
- break;
-
- case 0x71: /* DELTAP2 */
- case 0x72: /* DELTAP3 */
- Ins_DELTAP( EXEC_ARG_ args );
- break;
-
- case 0x73: /* DELTAC0 */
- case 0x74: /* DELTAC1 */
- case 0x75: /* DELTAC2 */
- Ins_DELTAC( EXEC_ARG_ args );
- break;
-
- case 0x76: /* SROUND */
- DO_SROUND
- break;
-
- case 0x77: /* S45Round */
- DO_S45ROUND
- break;
-
- case 0x78: /* JROT */
- DO_JROT
- break;
-
- case 0x79: /* JROF */
- DO_JROF
- break;
-
- case 0x7A: /* ROFF */
- DO_ROFF
- break;
-
- case 0x7B: /* ???? */
- Ins_UNKNOWN( EXEC_ARG_ args );
- break;
-
- case 0x7C: /* RUTG */
- DO_RUTG
- break;
-
- case 0x7D: /* RDTG */
- DO_RDTG
- break;
-
- case 0x7E: /* SANGW */
- case 0x7F: /* AA */
- /* nothing - obsolete */
- break;
-
- case 0x80: /* FLIPPT */
- Ins_FLIPPT( EXEC_ARG_ args );
- break;
-
- case 0x81: /* FLIPRGON */
- Ins_FLIPRGON( EXEC_ARG_ args );
- break;
-
- case 0x82: /* FLIPRGOFF */
- Ins_FLIPRGOFF( EXEC_ARG_ args );
- break;
-
- case 0x83: /* UNKNOWN */
- case 0x84: /* UNKNOWN */
- Ins_UNKNOWN( EXEC_ARG_ args );
- break;
-
- case 0x85: /* SCANCTRL */
- Ins_SCANCTRL( EXEC_ARG_ args );
- break;
-
- case 0x86: /* SDPVTL */
- case 0x87: /* SDPVTL */
- Ins_SDPVTL( EXEC_ARG_ args );
- break;
-
- case 0x88: /* GETINFO */
- Ins_GETINFO( EXEC_ARG_ args );
- break;
-
- case 0x89: /* IDEF */
- Ins_IDEF( EXEC_ARG_ args );
- break;
-
- case 0x8A: /* ROLL */
- Ins_ROLL( EXEC_ARG_ args );
- break;
-
- case 0x8B: /* MAX */
- DO_MAX
- break;
-
- case 0x8C: /* MIN */
- DO_MIN
- break;
-
- case 0x8D: /* SCANTYPE */
- Ins_SCANTYPE( EXEC_ARG_ args );
- break;
-
- case 0x8E: /* INSTCTRL */
- Ins_INSTCTRL( EXEC_ARG_ args );
- break;
-
- case 0x8F:
- Ins_UNKNOWN( EXEC_ARG_ args );
- break;
-
- default:
- if ( opcode >= 0xE0 )
- Ins_MIRP( EXEC_ARG_ args );
- else if ( opcode >= 0xC0 )
- Ins_MDRP( EXEC_ARG_ args );
- else if ( opcode >= 0xB8 )
- Ins_PUSHW( EXEC_ARG_ args );
- else if ( opcode >= 0xB0 )
- Ins_PUSHB( EXEC_ARG_ args );
- else
- Ins_UNKNOWN( EXEC_ARG_ args );
- }
-
- }
-
-#else
-
- Instruct_Dispatch[CUR.opcode]( EXEC_ARG_ &CUR.stack[CUR.args] );
-
-#endif /* TT_CONFIG_OPTION_INTERPRETER_SWITCH */
-
- if ( CUR.error != TT_Err_Ok )
- {
- switch ( CUR.error )
- {
- case TT_Err_Invalid_Opcode: /* looking for redefined instructions */
- {
- TT_DefRecord* def = CUR.IDefs;
- TT_DefRecord* limit = def + CUR.numIDefs;
-
-
- for ( ; def < limit; def++ )
- {
- if ( def->active && CUR.opcode == (FT_Byte)def->opc )
- {
- TT_CallRec* callrec;
-
-
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Invalid_Reference;
- goto LErrorLabel_;
- }
-
- callrec = &CUR.callStack[CUR.callTop];
-
- callrec->Caller_Range = CUR.curRange;
- callrec->Caller_IP = CUR.IP + 1;
- callrec->Cur_Count = 1;
- callrec->Cur_Restart = def->start;
-
- if ( INS_Goto_CodeRange( def->range, def->start ) == FAILURE )
- goto LErrorLabel_;
-
- goto LSuiteLabel_;
- }
- }
- }
-
- CUR.error = TT_Err_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
- }
- }
-
- CUR.top = CUR.new_top;
-
- if ( CUR.step_ins )
- CUR.IP += CUR.length;
-
- /* increment instruction counter and check if we didn't */
- /* run this program for too long (e.g. infinite loops). */
- if ( ++ins_counter > MAX_RUNNABLE_OPCODES )
- return TT_Err_Execution_Too_Long;
-
- LSuiteLabel_:
- if ( CUR.IP >= CUR.codeSize )
- {
- if ( CUR.callTop > 0 )
- {
- CUR.error = TT_Err_Code_Overflow;
- goto LErrorLabel_;
- }
- else
- goto LNo_Error_;
- }
- } while ( !CUR.instruction_trap );
-
- LNo_Error_:
-
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
- *exc = cur;
-#endif
-
- return TT_Err_Ok;
-
- LErrorCodeOverflow_:
- CUR.error = TT_Err_Code_Overflow;
-
- LErrorLabel_:
-
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
- *exc = cur;
-#endif
-
- return CUR.error;
- }
-
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/ttinterp.h b/Build/source/libs/freetype2/src/truetype/ttinterp.h
deleted file mode 100644
index 07a8972cb3d..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttinterp.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttinterp.h */
-/* */
-/* TrueType bytecode interpreter (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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
-
-
-#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
-
-#define EXEC_OP_ TT_ExecContext exc,
-#define EXEC_OP TT_ExecContext exc
-#define EXEC_ARG_ exc,
-#define EXEC_ARG exc
-
-#else /* static implementation */
-
-#define EXEC_OP_ /* void */
-#define EXEC_OP /* void */
-#define EXEC_ARG_ /* void */
-#define EXEC_ARG /* void */
-
-#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
-
-
- /*************************************************************************/
- /* */
- /* 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)( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation );
-
- /* Point displacement along the freedom vector routine */
- typedef void
- (*TT_Move_Func)( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance );
-
- /* Distance projection along one of the projection vectors */
- typedef FT_F26Dot6
- (*TT_Project_Func)( EXEC_OP_ FT_Pos dx,
- FT_Pos dy );
-
- /* reading a cvt value. Take care of non-square pixels if necessary */
- typedef FT_F26Dot6
- (*TT_Get_CVT_Func)( EXEC_OP_ FT_ULong idx );
-
- /* setting or moving a cvt value. Take care of non-square pixels */
- /* if necessary */
- typedef void
- (*TT_Set_CVT_Func)( EXEC_OP_ 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;
- FT_Long Cur_Restart;
-
- } TT_CallRec, *TT_CallStack;
-
-
- /*************************************************************************/
- /* */
- /* 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_UInt stackSize; /* size of exec. stack */
- FT_Long* stack; /* current exec. stack */
-
- FT_Long args;
- FT_UInt new_top; /* new top after exec. */
-
- TT_GlyphZoneRec zp0, /* zone records */
- zp1,
- zp2,
- pts,
- twilight;
-
- 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_Long 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;
-
-#if 0
- /* this seems to be unused */
- FT_Int cur_ppem; /* ppem along the current proj vector */
-#endif
-
- 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_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; /* are we hinting for grayscale? */
-
- } TT_ExecContextRec;
-
-
- extern const TT_GraphicsState tt_default_graphics_state;
-
-
- FT_LOCAL( FT_Error )
- TT_Goto_CodeRange( TT_ExecContext exec,
- FT_Int range,
- FT_Long IP );
-
- FT_LOCAL( FT_Error )
- TT_Set_CodeRange( TT_ExecContext exec,
- FT_Int range,
- void* base,
- FT_Long length );
-
- FT_LOCAL( FT_Error )
- TT_Clear_CodeRange( TT_ExecContext exec,
- FT_Int range );
-
-
- /*************************************************************************/
- /* */
- /* <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. */
- /* */
- FT_EXPORT( TT_ExecContext )
- TT_New_Context( TT_Driver driver );
-
- FT_LOCAL( FT_Error )
- TT_Done_Context( TT_ExecContext exec );
-
- FT_LOCAL( FT_Error )
- TT_Load_Context( TT_ExecContext exec,
- TT_Face face,
- TT_Size size );
-
- FT_LOCAL( FT_Error )
- TT_Save_Context( TT_ExecContext exec,
- TT_Size ins );
-
- FT_LOCAL( FT_Error )
- TT_Run_Context( TT_ExecContext exec,
- FT_Bool debug );
-
-
- /*************************************************************************/
- /* */
- /* <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/Build/source/libs/freetype2/src/truetype/ttobjs.c b/Build/source/libs/freetype2/src/truetype/ttobjs.c
deleted file mode 100644
index 801559fe499..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttobjs.c
+++ /dev/null
@@ -1,943 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttobjs.c */
-/* */
-/* Objects manager (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_TRUETYPE_IDS_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_SFNT_H
-
-#include "ttgload.h"
-#include "ttpload.h"
-
-#include "tterrors.h"
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-#include "ttinterp.h"
-#endif
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#include FT_TRUETYPE_UNPATENTED_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_MEM_ZERO( zone, sizeof ( *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 */
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_init */
- /* */
- /* <Description> */
- /* Initialize a given TrueType 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 )
- 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;
-
-
- library = face->root.driver->root.library;
- sfnt = (SFNT_Service)FT_Get_Module_Interface( library, "sfnt" );
- if ( !sfnt )
- goto Bad_Format;
-
- /* create input stream from resource */
- if ( FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- /* check that we have a valid TrueType file */
- error = sfnt->init_face( stream, face, face_index, num_params, params );
- 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 valid TTF font]\n" ));
- goto Bad_Format;
- }
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- face->root.face_flags |= FT_FACE_FLAG_HINTER;
-#endif
-
- /* If we are performing a simple font format check, exit immediately. */
- if ( face_index < 0 )
- return TT_Err_Ok;
-
- /* Load font directory */
- error = sfnt->load_face( stream, face, face_index, num_params, params );
- if ( error )
- goto Exit;
-
- error = tt_face_load_hdmx( face, stream );
- if ( error )
- goto Exit;
-
- if ( face->root.face_flags & FT_FACE_FLAG_SCALABLE )
- {
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
- if ( !face->root.internal->incremental_interface )
- error = tt_face_load_loca( face, stream );
- if ( !error )
- error = tt_face_load_cvt( face, stream );
- if ( !error )
- error = tt_face_load_fpgm( face, stream );
- if ( !error )
- error = tt_face_load_prep( face, stream );
-
-#else
-
- if ( !error )
- error = tt_face_load_loca( face, stream );
- if ( !error )
- error = tt_face_load_cvt( face, stream );
- if ( !error )
- error = tt_face_load_fpgm( face, stream );
- if ( !error )
- error = tt_face_load_prep( face, stream );
-
-#endif
-
- }
-
-#if defined( TT_CONFIG_OPTION_UNPATENTED_HINTING ) && \
- !defined( TT_CONFIG_OPTION_BYTECODE_INTERPRETER )
-
- {
- FT_Bool unpatented_hinting;
- int i;
-
-
- /* Determine whether unpatented hinting is to be used for this face. */
- unpatented_hinting = FT_BOOL
- ( library->debug_hooks[FT_DEBUG_HOOK_UNPATENTED_HINTING] != NULL );
-
- for ( i = 0; i < num_params && !face->unpatented_hinting; i++ )
- if ( params[i].tag == FT_PARAM_TAG_UNPATENTED_HINTING )
- unpatented_hinting = TRUE;
-
- /* Compare the face with a list of well-known `tricky' fonts. */
- /* This list shall be expanded as we find more of them. */
- if ( !unpatented_hinting )
- {
- static const char* const trick_names[] =
- {
- "DFKaiSho-SB", /* dfkaisb.ttf */
- "DFKai-SB", /* kaiu.ttf */
- "HuaTianSongTi?", /* htst3.ttf */
- "MingLiU", /* mingliu.ttf & mingliu.ttc */
- "PMingLiU", /* mingliu.ttc */
- "MingLi43", /* mingli.ttf */
- NULL
- };
- int nn;
-
-
- /* Note that we only check the face name at the moment; it might */
- /* be worth to do more checks for a few special cases. */
- for ( nn = 0; trick_names[nn] != NULL; nn++ )
- {
- if ( ttface->family_name &&
- ft_strstr( ttface->family_name, trick_names[nn] ) )
- {
- unpatented_hinting = 1;
- break;
- }
- }
- }
-
- ttface->internal->ignore_unpatented_hinter =
- FT_BOOL( !unpatented_hinting );
- }
-
-#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING &&
- !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
-
- /* initialize standard glyph loading routines */
- TT_Init_Glyph_Loading( face );
-
- Exit:
- return error;
-
- Bad_Format:
- error = TT_Err_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 = face->root.memory;
- FT_Stream stream = face->root.stream;
-
- SFNT_Service 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( memory, face->blend );
- 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. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_size_run_fpgm( TT_Size size )
- {
- TT_Face face = (TT_Face)size->root.face;
- TT_ExecContext exec;
- FT_Error error;
-
-
- /* debugging instances have their own context */
- if ( size->debug )
- exec = size->context;
- else
- exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
-
- if ( !exec )
- return TT_Err_Could_Not_Find_Context;
-
- TT_Load_Context( exec, face, size );
-
- exec->callTop = 0;
- exec->top = 0;
-
- exec->period = 64;
- exec->phase = 0;
- exec->threshold = 0;
-
- exec->instruction_trap = FALSE;
- exec->F_dot_P = 0x10000L;
-
- {
- FT_Size_Metrics* metrics = &exec->metrics;
- TT_Size_Metrics* tt_metrics = &exec->tt_metrics;
-
-
- metrics->x_ppem = 0;
- metrics->y_ppem = 0;
- metrics->x_scale = 0;
- 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,
- 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 )
- {
- error = TT_Goto_CodeRange( exec, tt_coderange_font, 0 );
-
- if ( !error )
- error = face->interpreter( exec );
- }
- else
- error = TT_Err_Ok;
-
- 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. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_size_run_prep( TT_Size size )
- {
- TT_Face face = (TT_Face)size->root.face;
- TT_ExecContext exec;
- FT_Error error;
-
-
- /* debugging instances have their own context */
- if ( size->debug )
- exec = size->context;
- else
- exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
-
- if ( !exec )
- return TT_Err_Could_Not_Find_Context;
-
- TT_Load_Context( exec, face, size );
-
- exec->callTop = 0;
- exec->top = 0;
-
- exec->instruction_trap = FALSE;
-
- TT_Set_CodeRange( exec,
- tt_coderange_cvt,
- face->cvt_program,
- face->cvt_program_size );
-
- TT_Clear_CodeRange( exec, tt_coderange_glyph );
-
- if ( face->cvt_program_size > 0 )
- {
- error = TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );
-
- if ( !error && !size->debug )
- error = face->interpreter( exec );
- }
- else
- error = TT_Err_Ok;
-
- /* save as default graphics state */
- size->GS = exec->GS;
-
- TT_Save_Context( exec, size );
-
- return error;
- }
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- 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->debug )
- {
- /* the debug context must be deleted by the debugger itself */
- size->context = NULL;
- size->debug = FALSE;
- }
-
- 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 = 0;
- size->cvt_ready = 0;
- }
-
-
- /* 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_Error error;
- TT_Size size = (TT_Size)ftsize;
- TT_Face face = (TT_Face)ftsize->face;
- FT_Memory memory = face->root.memory;
- FT_Int i;
-
- FT_UShort n_twilight;
- TT_MaxProfile* maxp = &face->max_profile;
-
-
- size->bytecode_ready = 1;
- size->cvt_ready = 0;
-
- 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 */
- {
- FT_Size_Metrics* metrics = &size->metrics;
- TT_Size_Metrics* metrics2 = &size->ttmetrics;
-
- metrics->x_ppem = 0;
- metrics->y_ppem = 0;
-
- metrics2->rotated = FALSE;
- metrics2->stretched = FALSE;
-
- /* set default compensation (all 0) */
- for ( i = 0; i < 4; i++ )
- metrics2->compensations[i] = 0;
- }
-
- /* 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! */
- error = tt_size_run_fpgm( size );
-
- Exit:
- if ( error )
- tt_size_done_bytecode( ftsize );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- tt_size_ready_bytecode( TT_Size size )
- {
- FT_Error error = TT_Err_Ok;
-
-
- if ( !size->bytecode_ready )
- {
- error = tt_size_init_bytecode( (FT_Size)size );
- if ( error )
- goto Exit;
- }
-
- /* rescale CVT when needed */
- if ( !size->cvt_ready )
- {
- 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 );
- if ( !error )
- size->cvt_ready = 1;
- }
-
- 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 = TT_Err_Ok;
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- size->bytecode_ready = 0;
- size->cvt_ready = 0;
-#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
- if ( size->bytecode_ready )
- 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. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- tt_size_reset( TT_Size size )
- {
- TT_Face face;
- FT_Error error = TT_Err_Ok;
- FT_Size_Metrics* metrics;
-
-
- size->ttmetrics.valid = FALSE;
-
- face = (TT_Face)size->root.face;
-
- metrics = &size->metrics;
-
- /* copy the result from base layer */
- *metrics = size->root.metrics;
-
- if ( metrics->x_ppem < 1 || metrics->y_ppem < 1 )
- return TT_Err_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 )
- {
- metrics->x_scale = FT_DivFix( metrics->x_ppem << 6,
- face->root.units_per_EM );
- metrics->y_scale = FT_DivFix( metrics->y_ppem << 6,
- face->root.units_per_EM );
-
- metrics->ascender =
- FT_PIX_ROUND( FT_MulFix( face->root.ascender, metrics->y_scale ) );
- metrics->descender =
- FT_PIX_ROUND( FT_MulFix( face->root.descender, metrics->y_scale ) );
- metrics->height =
- FT_PIX_ROUND( FT_MulFix( face->root.height, metrics->y_scale ) );
- metrics->max_advance =
- FT_PIX_ROUND( FT_MulFix( face->root.max_advance_width,
- metrics->x_scale ) );
- }
-
- /* compute new transformation */
- if ( metrics->x_ppem >= metrics->y_ppem )
- {
- size->ttmetrics.scale = metrics->x_scale;
- size->ttmetrics.ppem = metrics->x_ppem;
- size->ttmetrics.x_ratio = 0x10000L;
- size->ttmetrics.y_ratio = FT_MulDiv( metrics->y_ppem,
- 0x10000L,
- metrics->x_ppem );
- }
- else
- {
- size->ttmetrics.scale = metrics->y_scale;
- size->ttmetrics.ppem = metrics->y_ppem;
- size->ttmetrics.x_ratio = FT_MulDiv( metrics->x_ppem,
- 0x10000L,
- metrics->y_ppem );
- size->ttmetrics.y_ratio = 0x10000L;
- }
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
- size->cvt_ready = 0;
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- if ( !error )
- size->ttmetrics.valid = TRUE;
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <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;
-
-
- if ( !TT_New_Context( driver ) )
- return TT_Err_Could_Not_Find_Context;
-
-#else
-
- FT_UNUSED( ttdriver );
-
-#endif
-
- return TT_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 */
- {
-#ifdef TT_USE_BYTECODE_INTERPRETER
- TT_Driver driver = (TT_Driver)ttdriver;
-
-
- /* destroy the execution context */
- if ( driver->context )
- {
- TT_Done_Context( driver->context );
- driver->context = NULL;
- }
-#else
- FT_UNUSED( ttdriver );
-#endif
-
- }
-
-
- /*************************************************************************/
- /* */
- /* <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/Build/source/libs/freetype2/src/truetype/ttobjs.h b/Build/source/libs/freetype2/src/truetype/ttobjs.h
deleted file mode 100644
index 6971013af90..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttobjs.h
+++ /dev/null
@@ -1,459 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttobjs.h */
-/* */
-/* Objects manager (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Instance */
- /* */
- /* <Description> */
- /* A handle to a TrueType size object. */
- /* */
- typedef struct TT_SizeRec_* TT_Size;
-
-
- /*************************************************************************/
- /* */
- /* <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;
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_Bool both_x_axis;
-#endif
-
- 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_Short delta_base;
- FT_Short delta_shift;
-
- FT_Byte instruct_control;
- 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_ULong 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_UInt opc; /* function #, or instruction code */
- FT_Bool active; /* is it active? */
-
- } 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;
-
-
- /*************************************************************************/
- /* */
- /* Subglyph loading record. Used to load composite components. */
- /* */
- typedef struct TT_SubglyphRec_
- {
- FT_Long index; /* subglyph index; initialized with -1 */
- FT_Bool is_scaled; /* is the subglyph scaled? */
- FT_Bool is_hinted; /* should it be hinted? */
- FT_Bool preserve_pps; /* preserve phantom points? */
-
- FT_Long file_offset;
-
- FT_BBox bbox;
- FT_Pos left_bearing;
- FT_Pos advance;
-
- TT_GlyphZoneRec zone;
-
- FT_Long arg1; /* first argument */
- FT_Long arg2; /* second argument */
-
- FT_UShort element_flag; /* current load element flag */
-
- TT_Transform transform; /* transformation matrix */
-
- FT_Vector pp1, pp2; /* phantom points (horizontal) */
- FT_Vector pp3, pp4; /* phantom points (vertical) */
-
- } TT_SubGlyphRec, *TT_SubGlyph_Stack;
-
-
- /*************************************************************************/
- /* */
- /* 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 TIns_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;
-
- TT_Size_Metrics ttmetrics;
-
- FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-
- 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 */
-
- /* debugging variables */
-
- /* When using the debugger, we must keep the */
- /* execution context tied to the instance */
- /* object rather than asking it on demand. */
-
- FT_Bool debug;
- TT_ExecContext context;
-
- FT_Bool bytecode_ready;
- FT_Bool cvt_ready;
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- } TT_SizeRec;
-
-
- /*************************************************************************/
- /* */
- /* TrueType driver class. */
- /* */
- typedef struct TT_DriverRec_
- {
- FT_DriverRec root;
- TT_ExecContext context; /* execution context */
- TT_GlyphZoneRec zone; /* glyph loader points zone */
-
- void* extension_component;
-
- } 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_LOCAL( FT_Error )
- tt_size_run_prep( TT_Size size );
-
- FT_LOCAL( FT_Error )
- tt_size_ready_bytecode( TT_Size size );
-
-#endif /* TT_USE_BYTECODE_INTERPRETER */
-
- FT_LOCAL( FT_Error )
- tt_size_reset( TT_Size size );
-
-
- /*************************************************************************/
- /* */
- /* 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 );
-
-
-FT_END_HEADER
-
-#endif /* __TTOBJS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/truetype/ttpload.c b/Build/source/libs/freetype2/src/truetype/ttpload.c
deleted file mode 100644
index 9d3381bf056..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttpload.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpload.c */
-/* */
-/* TrueType-specific tables loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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;
-
-
- /* we need the size of the `glyf' table for malformed `loca' tables */
- error = face->goto_table( face, TTAG_glyf, stream, &face->glyf_len );
- if ( error )
- goto Exit;
-
- FT_TRACE2(( "Locations " ));
- error = face->goto_table( face, TTAG_loca, stream, &table_len );
- if ( error )
- {
- error = TT_Err_Locations_Missing;
- goto Exit;
- }
-
- if ( face->header.Index_To_Loc_Format != 0 )
- {
- if ( table_len >= 0x40000L )
- {
- FT_TRACE2(( "table too large!\n" ));
- error = TT_Err_Invalid_Table;
- goto Exit;
- }
- face->num_locations = (FT_UInt)( table_len >> 2 );
- }
- else
- {
- if ( table_len >= 0x20000L )
- {
- FT_TRACE2(( "table too large!\n" ));
- error = TT_Err_Invalid_Table;
- goto Exit;
- }
- face->num_locations = (FT_UInt)( table_len >> 1 );
- }
-
- /*
- * 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;
- }
- }
-
- /* It isn't mentioned explicitly that the `loca' table must be */
- /* ordered, but implicitly it refers to the length of an entry */
- /* as the difference between the current and the next position. */
- /* Anyway, there do exist (malformed) fonts which don't obey */
- /* this rule, so we are only able to provide an upper bound for */
- /* the size. */
- 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 = TT_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 TT_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 = TT_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 TT_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 = TT_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 TT_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 version, 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 TT_Err_Ok;
-
- if ( FT_FRAME_EXTRACT( table_size, face->hdmx_table ) )
- goto Exit;
-
- p = face->hdmx_table;
- limit = p + table_size;
-
- version = FT_NEXT_USHORT( p );
- 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; this is */
- /* the reason why `record_size' is a long (which we read as */
- /* unsigned long for convenience). In practice, two bytes */
- /* 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 ( version != 0 || num_records > 255 || record_size > 0x10001L )
- {
- error = TT_Err_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/Build/source/libs/freetype2/src/truetype/ttpload.h b/Build/source/libs/freetype2/src/truetype/ttpload.h
deleted file mode 100644
index f61ac079ce0..00000000000
--- a/Build/source/libs/freetype2/src/truetype/ttpload.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpload.h */
-/* */
-/* TrueType-specific tables loader (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/type1/Jamfile b/Build/source/libs/freetype2/src/type1/Jamfile
deleted file mode 100644
index 8e366baae51..00000000000
--- a/Build/source/libs/freetype2/src/type1/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/type1 Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) type1 ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = t1afm t1driver t1objs t1load t1gload t1parse ;
- }
- else
- {
- _sources = type1 ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/type1 Jamfile
diff --git a/Build/source/libs/freetype2/src/type1/module.mk b/Build/source/libs/freetype2/src/type1/module.mk
deleted file mode 100644
index baf98c00ea5..00000000000
--- a/Build/source/libs/freetype2/src/type1/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 Type1 module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/type1/rules.mk b/Build/source/libs/freetype2/src/type1/rules.mk
deleted file mode 100644
index 15087b03044..00000000000
--- a/Build/source/libs/freetype2/src/type1/rules.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# FreeType 2 Type1 driver configuration rules
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-# Type1 driver directory
-#
-T1_DIR := $(SRC_DIR)/type1
-
-
-# compilation flags for the driver
-#
-T1_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T1_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/type1/t1afm.c b/Build/source/libs/freetype2/src/type1/t1afm.c
deleted file mode 100644
index b81a8df83ab..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1afm.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1afm.c */
-/* */
-/* AFM support for Type 1 fonts (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "t1errors.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_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_UInt len,
- void* user_data )
- {
- T1_Font type1 = (T1_Font)user_data;
- FT_Int n;
-
-
- 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 );
-
-
- return (int)( index1 - index2 );
- }
-
-
- /* 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 = T1_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;
- p = start;
-
- /* 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 = T1_Err_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 = T1_Err_Unknown_File_Format;
- goto Exit;
- }
-
- fi->NumKernPair = FT_PEEK_USHORT_LE( p );
- p += 2;
- if ( p + 4 * fi->NumKernPair > limit )
- {
- error = T1_Err_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 != NULL )
- 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;
- FT_Error error = T1_Err_Unknown_File_Format;
- T1_Font t1_font = &( (T1_Face)t1_face )->type1;
-
-
- 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)( (T1_Face)t1_face )->psaux;
- if ( psaux && 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 ( error == T1_Err_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;
- t1_face->bbox.xMax = ( fi->FontBBox.xMax + 0xFFFFU ) >> 16;
- t1_face->bbox.yMax = ( fi->FontBBox.yMax + 0xFFFFU ) >> 16;
-
- t1_face->ascender = (FT_Short)( ( fi->Ascender + 0x8000U ) >> 16 );
- t1_face->descender = (FT_Short)( ( fi->Descender + 0x8000U ) >> 16 );
-
- if ( fi->NumKernPair )
- {
- t1_face->face_flags |= FT_FACE_FLAG_KERNING;
- ( (T1_Face)t1_face )->afm_data = fi;
- fi = NULL;
- }
- }
-
- FT_FRAME_EXIT();
-
- Exit:
- if ( fi != NULL )
- 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_Int i;
-
-
- if ( !fi )
- return T1_Err_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 T1_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type1/t1afm.h b/Build/source/libs/freetype2/src/type1/t1afm.h
deleted file mode 100644
index 8eb1764de70..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1afm.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1afm.h */
-/* */
-/* AFM support for Type 1 fonts (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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/Build/source/libs/freetype2/src/type1/t1driver.c b/Build/source/libs/freetype2/src/type1/t1driver.c
deleted file mode 100644
index 3ca21dc1783..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1driver.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1driver.c */
-/* */
-/* Type 1 driver interface (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_XFREE86_NAME_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 T1_Err_Ok;
- }
-
-
- static FT_UInt
- t1_get_name_index( T1_Face face,
- FT_String* glyph_name )
- {
- FT_Int i;
- FT_String* gname;
-
-
- for ( i = 0; i < face->type1.num_glyphs; i++ )
- {
- 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,
- (FT_GlyphDict_NameIndexFunc)t1_get_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
- };
-
-
- /*
- * 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,
- (FT_Set_MM_Design_Func) T1_Set_MM_Design,
- (FT_Set_MM_Blend_Func) T1_Set_MM_Blend,
- (FT_Get_MM_Var_Func) T1_Get_MM_Var,
- (FT_Set_Var_Design_Func)T1_Set_Var_Design
- };
-#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 0;
- }
-
-
- 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 0;
- }
-
-
- static const FT_Service_PsInfoRec t1_service_ps_info =
- {
- (PS_GetFontInfoFunc) t1_ps_get_font_info,
- (PS_HasGlyphNamesFunc) t1_ps_has_glyph_names,
- (PS_GetFontPrivateFunc)t1_ps_get_font_private,
- };
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
- static const FT_Service_KerningRec t1_service_kerning =
- {
- T1_Get_Track_Kerning,
- };
-#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_XF86_NAME, FT_XF86_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 }
- };
-
-
- static FT_Module_Interface
- Get_Interface( FT_Driver driver,
- const FT_String* t1_interface )
- {
- FT_UNUSED( driver );
-
- 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( T1_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_Vector* kerning )
- {
- kerning->x = 0;
- kerning->y = 0;
-
- if ( face->afm_data )
- T1_Get_Kerning( (AFM_FontInfo)face->afm_data,
- left_glyph,
- right_glyph,
- kerning );
-
- return T1_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,
-
- 0, /* format interface */
-
- (FT_Module_Constructor)T1_Driver_Init,
- (FT_Module_Destructor) T1_Driver_Done,
- (FT_Module_Requester) Get_Interface,
- },
-
- sizeof( T1_FaceRec ),
- sizeof( T1_SizeRec ),
- sizeof( T1_GlyphSlotRec ),
-
- (FT_Face_InitFunc) T1_Face_Init,
- (FT_Face_DoneFunc) T1_Face_Done,
- (FT_Size_InitFunc) T1_Size_Init,
- (FT_Size_DoneFunc) T1_Size_Done,
- (FT_Slot_InitFunc) T1_GlyphSlot_Init,
- (FT_Slot_DoneFunc) T1_GlyphSlot_Done,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
- (FT_Slot_LoadFunc) T1_Load_Glyph,
-
-#ifdef T1_CONFIG_OPTION_NO_AFM
- (FT_Face_GetKerningFunc) 0,
- (FT_Face_AttachFunc) 0,
-#else
- (FT_Face_GetKerningFunc) Get_Kerning,
- (FT_Face_AttachFunc) T1_Read_Metrics,
-#endif
- (FT_Face_GetAdvancesFunc) 0,
- (FT_Size_RequestFunc) T1_Size_Request,
- (FT_Size_SelectFunc) 0
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type1/t1driver.h b/Build/source/libs/freetype2/src/type1/t1driver.h
deleted file mode 100644
index ad429440de9..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1driver.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1driver.h */
-/* */
-/* High-level Type 1 driver interface (specification). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __T1DRIVER_H__
-#define __T1DRIVER_H__
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-
-
-FT_BEGIN_HEADER
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) t1_driver_class;
-
-
-FT_END_HEADER
-
-#endif /* __T1DRIVER_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type1/t1errors.h b/Build/source/libs/freetype2/src/type1/t1errors.h
deleted file mode 100644
index 81221c343d1..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1errors.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1errors.h */
-/* */
-/* Type 1 error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/type1/t1gload.c b/Build/source/libs/freetype2/src/type1/t1gload.c
deleted file mode 100644
index e08a4289742..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1gload.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1gload.c */
-/* */
-/* Type 1 Glyph Loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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. *********/
- /********** *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- FT_LOCAL_DEF( 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 = T1_Err_Ok;
-
-
- 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 ( face->root.internal->incremental_interface )
- error = face->root.internal->incremental_interface->funcs->get_glyph_data(
- face->root.internal->incremental_interface->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,
- char_string->length );
-
-#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 = decoder->builder.left_bearing.y;
- metrics.advance = decoder->builder.advance.x;
- 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.left_bearing.y = metrics.bearing_y;
- decoder->builder.advance.x = metrics.advance;
- decoder->builder.advance.y = 0;
- }
-
-#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.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 */
- error = T1_Parse_Glyph( &decoder, 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 T1_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Load_Glyph( T1_GlyphSlot glyph,
- T1_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
- {
- FT_Error error;
- T1_DecoderRec decoder;
- T1_Face face = (T1_Face)glyph->root.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
-
-
- if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
- {
- error = T1_Err_Invalid_Argument;
- goto Exit;
- }
-
- 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;
-
- glyph->x_scale = size->root.metrics.x_scale;
- glyph->y_scale = size->root.metrics.y_scale;
-
- glyph->root.outline.n_points = 0;
- glyph->root.outline.n_contours = 0;
-
- hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
- ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
-
- glyph->root.format = FT_GLYPH_FORMAT_OUTLINE;
-
- error = decoder_funcs->init( &decoder,
- (FT_Face)face,
- (FT_Size)size,
- (FT_GlyphSlot)glyph,
- (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.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 )
- {
- glyph->root.outline.flags &= FT_OUTLINE_OWNER;
- glyph->root.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 = glyph->root.internal;
-
-
- glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
- glyph->root.metrics.horiAdvance = 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 = &glyph->root.metrics;
- FT_Vector advance;
-
-
- /* copy the _unscaled_ advance width */
- metrics->horiAdvance = decoder.builder.advance.x;
- glyph->root.linearHoriAdvance = decoder.builder.advance.x;
- glyph->root.internal->glyph_transformed = 0;
-
- /* make up vertical ones */
- metrics->vertAdvance = ( face->type1.font_bbox.yMax -
- face->type1.font_bbox.yMin ) >> 16;
- glyph->root.linearVertAdvance = metrics->vertAdvance;
-
- glyph->root.format = FT_GLYPH_FORMAT_OUTLINE;
-
- if ( size && size->root.metrics.y_ppem < 24 )
- glyph->root.outline.flags |= FT_OUTLINE_HIGH_PRECISION;
-
-#if 1
- /* apply the font matrix, if any */
- if ( font_matrix.xx != 0x10000L || font_matrix.yy != font_matrix.xx ||
- font_matrix.xy != 0 || font_matrix.yx != 0 )
- FT_Outline_Transform( &glyph->root.outline, &font_matrix );
-
- if ( font_offset.x || font_offset.y )
- FT_Outline_Translate( &glyph->root.outline,
- font_offset.x,
- font_offset.y );
-
- advance.x = metrics->horiAdvance;
- advance.y = 0;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->horiAdvance = advance.x + font_offset.x;
- advance.x = 0;
- advance.y = metrics->vertAdvance;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->vertAdvance = advance.y + 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( &glyph->root.outline, &cbox );
-
- metrics->width = cbox.xMax - cbox.xMin;
- metrics->height = cbox.yMax - cbox.yMin;
-
- metrics->horiBearingX = cbox.xMin;
- metrics->horiBearingY = cbox.yMax;
-
- /* 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. */
- glyph->root.control_data = (FT_Byte*)glyph_data.pointer;
- glyph->root.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. */
- glyph->root.control_data = 0;
- glyph->root.control_len = 0;
- }
-#endif
-
- if ( must_finish_decoder )
- decoder_funcs->done( &decoder );
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type1/t1gload.h b/Build/source/libs/freetype2/src/type1/t1gload.h
deleted file mode 100644
index de87896dc0e..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1gload.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1gload.h */
-/* */
-/* Type 1 Glyph Loader (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 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. */
-/* */
-/***************************************************************************/
-
-
-#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_Load_Glyph( T1_GlyphSlot glyph,
- T1_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
-FT_END_HEADER
-
-#endif /* __T1GLOAD_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type1/t1load.c b/Build/source/libs/freetype2/src/type1/t1load.c
deleted file mode 100644
index 9d7c748b390..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1load.c
+++ /dev/null
@@ -1,2233 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1load.c */
-/* */
-/* Type 1 font loader (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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 "t1load.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_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 = T1_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->privates[nn] = blend->privates [nn - 1] + 1;
- blend->font_infos[nn] = blend->font_infos[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 = T1_Err_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 = T1_Err_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 = T1_Err_Ok;
- }
-
- return error;
- }
-
-
-#define FT_INT_TO_FIXED( a ) ( (a) << 16 )
-#define FT_FIXED_TO_INT( a ) ( FT_RoundFix( a ) >> 16 )
-
-
- /*************************************************************************/
- /* */
- /* Given a normalized (blend) coordinate, figure out the design */
- /* coordinate appropriate for that value. */
- /* */
- FT_LOCAL_DEF( FT_Fixed )
- mm_axis_unmap( PS_DesignMap axismap,
- FT_Fixed ncv )
- {
- int j;
-
-
- if ( ncv <= axismap->blend_points[0] )
- return axismap->design_points[0];
-
- for ( j = 1; j < axismap->num_points; ++j )
- {
- if ( ncv <= axismap->blend_points[j] )
- {
- FT_Fixed t = FT_MulDiv( ncv - axismap->blend_points[j - 1],
- 0x10000L,
- axismap->blend_points[j] -
- axismap->blend_points[j - 1] );
-
-
- return axismap->design_points[j - 1] +
- FT_MulDiv( t,
- axismap->design_points[j] -
- axismap->design_points[j - 1],
- 1L );
- }
- }
-
- return 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. */
- /* */
- FT_LOCAL_DEF( 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;
- 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 = (FT_UInt)-1; /* Does not apply */
- 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 = FT_INT_TO_FIXED( mmaster.axis[i].minimum);
- mmvar->axis[i].maximum = FT_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 = 0xFFFFFFFFUL; /* Does not apply */
- mmvar->axis[i].tag = 0xFFFFFFFFUL; /* Does not apply */
-
- 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 =
- FT_INT_TO_FIXED( 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_Error error;
- FT_UInt n, m;
-
-
- error = T1_Err_Invalid_Argument;
-
- if ( blend && blend->num_axis == num_coords )
- {
- /* recompute the weight vector from the blend coordinates */
- error = T1_Err_Ok;
-
- 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 */
- factor = coords[m];
- 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;
- }
-
- error = T1_Err_Ok;
- }
-
- return error;
- }
-
-
- 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_Error error;
- FT_UInt n, p;
-
-
- error = T1_Err_Invalid_Argument;
- if ( blend && blend->num_axis == num_coords )
- {
- /* compute the blend coordinates through the blend design map */
- FT_Fixed final_blends[T1_MAX_MM_DESIGNS];
-
-
- for ( n = 0; n < blend->num_axis; n++ )
- {
- FT_Long design = coords[n];
- 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;
-
-
- 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 = p;
- break;
- }
-
- before = 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;
- }
-
- error = T1_Set_MM_Blend( face, num_coords, final_blends );
- }
-
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* 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[4]; /* maximum axis count is 4 */
- FT_UInt i;
- FT_Error error;
-
-
- error = T1_Err_Invalid_Argument;
- if ( num_coords <= 4 && num_coords > 0 )
- {
- for ( i = 0; i < num_coords; ++i )
- lcoords[i] = FT_FIXED_TO_INT( coords[i] );
- error = T1_Set_MM_Design( face, num_coords, lcoords );
- }
-
- return error;
- }
-
-
- 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] = 0;
-
- /* 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] = 0;
- blend->font_infos[n] = 0;
- blend->bboxes [n] = 0;
- }
-
- /* release weight vectors */
- FT_FREE( blend->weight_vector );
- blend->default_weight_vector = 0;
-
- /* 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 = T1_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 = T1_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 = T1_Err_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_PtrDist len;
-
-
- /* skip first slash, if any */
- if ( token->start[0] == '/' )
- token->start++;
-
- len = token->limit - token->start;
- if ( len == 0 )
- {
- error = T1_Err_Invalid_File_Format;
- goto Exit;
- }
-
- 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 = T1_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 = T1_Err_Ignore;
- goto Exit;
- }
- if ( num_designs == 0 || num_designs > T1_MAX_MM_DESIGNS )
- {
- FT_ERROR(( "parse_blend_design_positions:" ));
- FT_ERROR(( " incorrect number of designs: %d\n",
- num_designs ));
- error = T1_Err_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:" ));
- FT_ERROR(( " invalid number of axes: %d\n",
- n_axis ));
- error = T1_Err_Invalid_File_Format;
- goto Exit;
- }
-
- num_axis = n_axis;
- error = t1_allocate_blend( face, num_designs, 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 = T1_Err_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 = T1_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 = T1_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 = T1_Err_Invalid_File_Format;
- goto Exit;
- }
-
- old_cursor = parser->root.cursor;
- old_limit = parser->root.limit;
-
- error = t1_allocate_blend( face, 0, 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 = T1_Err_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 = T1_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 = T1_Err_Ignore;
- goto Exit;
- }
- if ( num_designs == 0 || num_designs > T1_MAX_MM_DESIGNS )
- {
- FT_ERROR(( "parse_weight_vector:" ));
- FT_ERROR(( " incorrect number of designs: %d\n",
- num_designs ));
- error = T1_Err_Invalid_File_Format;
- goto Exit;
- }
-
- if ( !blend || !blend->num_designs )
- {
- error = t1_allocate_blend( face, 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" ));
- FT_ERROR(( " "
- " different number of elements!\n" ));
- error = T1_Err_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 = 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 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_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 ( 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;
- }
-
-
- static void
- parse_private( T1_Face face,
- T1_Loader loader )
- {
- FT_UNUSED( face );
-
- loader->keywords_encountered |= T1_PRIVATE;
- }
-
-
- static int
- read_binary_data( T1_Parser parser,
- FT_Long* size,
- FT_Byte** base )
- {
- 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 ) )
- {
- *size = 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;
-
- parser->root.cursor += *size + 1;
- return !parser->root.error;
- }
-
- FT_ERROR(( "read_binary_data: invalid size field\n" ));
- parser->root.error = T1_Err_Invalid_File_Format;
- return 0;
- }
-
-
- /* We now define the routines to handle the `/Encoding', `/Subrs', */
- /* and `/CharStrings' dictionaries. */
-
- static void
- 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;
-
-
- result = T1_ToFixedArray( parser, 6, temp, 3 );
-
- if ( result < 0 )
- {
- parser->root.error = T1_Err_Invalid_File_Format;
- return;
- }
-
- temp_scale = FT_ABS( temp[3] );
-
- if ( temp_scale == 0 )
- {
- FT_ERROR(( "parse_font_matrix: invalid font matrix\n" ));
- parser->root.error = T1_Err_Invalid_File_Format;
- return;
- }
-
- /* Set Units per EM based on FontMatrix values. We set the value to */
- /* 1000 / temp_scale, because temp_scale was already multiplied by */
- /* 1000 (in t1_tofixed, from psobjs.c). */
-
- root->units_per_EM = (FT_UShort)( FT_DivFix( 1000 * 0x10000L,
- temp_scale ) >> 16 );
-
- /* we need to scale the values by 1.0/temp_scale */
- 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] = 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 = T1_Err_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 );
-
- T1_Skip_Spaces( parser );
- if ( parser->root.cursor >= limit )
- return;
-
- /* 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";
-
-
- 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 );
- }
-
- cur = parser->root.cursor;
-
- if ( *cur == '/' && cur + 2 < limit && n < count )
- {
- FT_PtrDist len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- return;
-
- len = 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
- {
- 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 = T1_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 n, num_subrs;
-
- 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 = T1_Err_Invalid_File_Format;
- return;
- }
-
- num_subrs = (FT_Int)T1_ToInt( parser );
-
- /* 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 ( n = 0; n < num_subrs; n++ )
- {
- FT_Long idx, size;
- FT_Byte* base;
-
-
- /* If the next token isn't `dup', we are also done. This */
- /* happens when there are `holes' in the Subrs array. */
- if ( 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 ) )
- 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 ( ft_strncmp( (char*)parser->root.cursor, "put", 3 ) == 0 )
- {
- T1_Skip_PS_Token( parser ); /* skip `put' */
- T1_Skip_Spaces ( parser );
- }
-
- /* 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;
-
-
- /* 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 < face->type1.private_dict.lenIV )
- {
- error = T1_Err_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 -= 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;
- FT_Byte* limit = parser->root.limit;
- FT_Int n, num_glyphs;
- FT_UInt notdef_index = 0;
- FT_Byte notdef_found = 0;
-
-
- num_glyphs = (FT_Int)T1_ToInt( parser );
- /* 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_Long 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.error )
- return;
-
- if ( *cur == '/' )
- {
- FT_PtrDist len;
-
-
- if ( cur + 1 >= limit )
- {
- error = T1_Err_Invalid_File_Format;
- goto Fail;
- }
-
- cur++; /* skip `/' */
- len = parser->root.cursor - cur;
-
- if ( !read_binary_data( parser, &size, &base ) )
- 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;
-
-
- if ( size <= face->type1.private_dict.lenIV )
- {
- error = T1_Err_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 -= 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 ( loader->num_glyphs )
- return;
- else
- loader->num_glyphs = n;
-
- /* if /.notdef is found but does not occupy index 0, do our magic. */
- if ( ft_strcmp( (const char*)".notdef",
- (const char*)name_table->elements[0] ) &&
- notdef_found )
- {
- /* 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 = n + 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", 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 }
- };
-
-
-#define T1_FIELD_COUNT \
- ( sizeof ( t1_keywords ) / sizeof ( t1_keywords[0] ) )
-
-
- static FT_Error
- parse_dict( T1_Face face,
- T1_Loader loader,
- FT_Byte* base,
- FT_Long 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 = T1_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_Long s;
- FT_Byte* b;
-
-
- parser->root.cursor = start_binary;
- if ( !read_binary_data( parser, &s, &b ) )
- return T1_Err_Invalid_File_Format;
- have_integer = 0;
- }
-
- else if ( *cur == '-' && cur + 6 < limit && *(cur + 1) == '|' &&
- have_integer )
- {
- FT_Long s;
- FT_Byte* b;
-
-
- parser->root.cursor = start_binary;
- if ( !read_binary_data( parser, &s, &b ) )
- return T1_Err_Invalid_File_Format;
- have_integer = 0;
- }
-
- /* look for immediates */
- else if ( *cur == '/' && cur + 2 < limit )
- {
- FT_PtrDist len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
-
- len = 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_PtrDist)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 != T1_Err_Ok )
- {
- if ( FT_ERROR_BASE( parser->root.error ) == FT_Err_Ignore )
- parser->root.error = T1_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_MEM_ZERO( loader, sizeof ( *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;
- loader->subrs.init = 0;
- loader->swap_table.init = 0;
- loader->fontdata = 0;
- loader->keywords_encountered = 0;
- }
-
-
- static void
- t1_done_loader( T1_Loader loader )
- {
- T1_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 );
- T1_Release_Table( &loader->subrs );
-
- /* 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;
- }
- }
- }
-
-#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 )
- {
- loader.subrs.init = 0;
- type1->num_subrs = loader.num_subrs;
- type1->subrs_block = loader.subrs.block;
- type1->subrs = loader.subrs.elements;
- type1->subrs_len = loader.subrs.lengths;
- }
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- if ( !face->root.internal->incremental_interface )
-#endif
- if ( !loader.charstrings.init )
- {
- FT_ERROR(( "T1_Open_Face: no `/CharStrings' array in face!\n" ));
- error = T1_Err_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 = 0;
- loader.glyph_names.elements = 0;
-
- /* 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* char_name;
- 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 */
- /* a the name to type1.encoding.char_name */
-
- min_char = +32000;
- max_char = -32000;
-
- charcode = 0;
- for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
- {
- 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;
- }
- break;
- }
- }
- }
-
- /*
- * Yes, this happens: Certain PDF-embedded fonts have only a
- * `.notdef' glyph defined!
- */
-
- if ( min_char > max_char )
- {
- min_char = 0;
- max_char = loader.encoding_table.max_elems;
- }
-
- 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/Build/source/libs/freetype2/src/type1/t1load.h b/Build/source/libs/freetype2/src/type1/t1load.h
deleted file mode 100644
index 546fc33530b..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1load.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1load.h */
-/* */
-/* Type 1 font loader (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2004, 2006, 2007 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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_DEF( 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_Set_MM_Design( T1_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
- FT_LOCAL_DEF( 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/Build/source/libs/freetype2/src/type1/t1objs.c b/Build/source/libs/freetype2/src/type1/t1objs.c
deleted file mode 100644
index 9d00cf39652..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1objs.c
+++ /dev/null
@@ -1,589 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1objs.c */
-/* */
-/* Type 1 objects manager (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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 */
- /* */
- /* note that we store the global hints in the size's "internal" root */
- /* field */
- /* */
- /*************************************************************************/
-
-
- 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( T1_Size size )
- {
- if ( size->root.internal )
- {
- PSH_Globals_Funcs funcs;
-
-
- funcs = T1_Size_Get_Globals_Funcs( size );
- if ( funcs )
- funcs->destroy( (PSH_Globals)size->root.internal );
-
- size->root.internal = 0;
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Size_Init( T1_Size size )
- {
- FT_Error error = T1_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 )
- size->root.internal = (FT_Size_Internal)(void*)globals;
- }
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_Size_Request( T1_Size size,
- FT_Size_Request req )
- {
- PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size );
-
-
- FT_Request_Metrics( size->root.face, req );
-
- if ( funcs )
- funcs->set_scale( (PSH_Globals)size->root.internal,
- size->root.metrics.x_scale,
- size->root.metrics.y_scale,
- 0, 0 );
-
- return T1_Err_Ok;
- }
-
-
- /*************************************************************************/
- /* */
- /* SLOT FUNCTIONS */
- /* */
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- T1_GlyphSlot_Done( T1_GlyphSlot slot )
- {
- slot->root.internal->glyph_hints = 0;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T1_GlyphSlot_Init( T1_GlyphSlot slot )
- {
- T1_Face face;
- PSHinter_Service pshinter;
-
-
- face = (T1_Face)slot->root.face;
- pshinter = (PSHinter_Service)face->pshinter;
-
- if ( pshinter )
- {
- FT_Module module;
-
-
- module = FT_Get_Module( slot->root.face->driver->root.library, "pshinter" );
- if (module)
- {
- T1_Hints_Funcs funcs;
-
- funcs = pshinter->get_t1_funcs( module );
- slot->root.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( T1_Face face )
- {
- if ( face )
- {
- FT_Memory memory = face->root.memory;
- T1_Font 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 = 0;
-#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_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,
- T1_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- 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;
-
- face->pshinter = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ),
- "pshinter" );
-
- /* 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 != 0 )
- {
- FT_ERROR(( "T1_Face_Init: invalid face index\n" ));
- error = T1_Err_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 = face_index;
-
- 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;
-
- /* XXX: TODO -- add kerning with .afm support */
-
-
- /* 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 = 0;
-
- root->bbox.xMin = type1->font_bbox.xMin >> 16;
- root->bbox.yMin = type1->font_bbox.yMin >> 16;
- root->bbox.xMax = ( type1->font_bbox.xMax + 0xFFFFU ) >> 16;
- root->bbox.yMax = ( type1->font_bbox.yMax + 0xFFFFU ) >> 16;
-
- /* Set units_per_EM if we didn't set it in 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)max_advance;
- else
- error = T1_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 && psaux )
- {
- FT_CharMapRec charmap;
- T1_CMap_Classes cmap_classes = psaux->t1_cmap_classes;
- FT_CMap_Class clazz;
-
-
- charmap.face = root;
-
- /* first of all, try to synthetize a Unicode charmap */
- charmap.platform_id = 3;
- charmap.encoding_id = 1;
- charmap.encoding = FT_ENCODING_UNICODE;
-
- FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
-
- /* now, generate an Adobe Standard encoding when appropriate */
- charmap.platform_id = 7;
- 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 )
- FT_CMap_New( clazz, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if (root->num_charmaps)
- root->charmap = root->charmaps[0];
-#endif
- }
- }
-
- 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( T1_Driver driver )
- {
- FT_UNUSED( driver );
-
- return T1_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( T1_Driver driver )
- {
- FT_UNUSED( driver );
- }
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type1/t1objs.h b/Build/source/libs/freetype2/src/type1/t1objs.h
deleted file mode 100644
index e5e90293d7e..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1objs.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1objs.h */
-/* */
-/* Type 1 objects manager (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Driver */
- /* */
- /* <Description> */
- /* A handle to a Type 1 driver object. */
- /* */
- typedef struct T1_DriverRec_ *T1_Driver;
-
-
- /*************************************************************************/
- /* */
- /* <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( T1_Size size );
-
- FT_LOCAL( FT_Error )
- T1_Size_Request( T1_Size size,
- FT_Size_Request req );
-
- FT_LOCAL( FT_Error )
- T1_Size_Init( T1_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,
- T1_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
- FT_LOCAL( void )
- T1_Face_Done( T1_Face face );
-
- FT_LOCAL( FT_Error )
- T1_GlyphSlot_Init( T1_GlyphSlot slot );
-
- FT_LOCAL( void )
- T1_GlyphSlot_Done( T1_GlyphSlot slot );
-
- FT_LOCAL( FT_Error )
- T1_Driver_Init( T1_Driver driver );
-
- FT_LOCAL( void )
- T1_Driver_Done( T1_Driver driver );
-
-
-FT_END_HEADER
-
-#endif /* __T1OBJS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type1/t1parse.c b/Build/source/libs/freetype2/src/type1/t1parse.c
deleted file mode 100644
index 36f5c82c86f..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1parse.c
+++ /dev/null
@@ -1,484 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1parse.c */
-/* */
-/* Type 1 parser (body). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_CALC_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 = T1_Err_Ok;
-
- if ( ft_memcmp( stream->cursor, header_string, header_length ) != 0 )
- error = T1_Err_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, 0, 0, memory );
-
- parser->stream = stream;
- parser->base_len = 0;
- parser->base_dict = 0;
- parser->private_len = 0;
- parser->private_dict = 0;
- 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 ( error != T1_Err_Unknown_File_Format )
- goto Exit;
-
- error = check_type1_format( stream, "%!FontType", 10 );
- if ( error )
- {
- FT_TRACE2(( "[not a Type1 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 = T1_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_Long 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:" ));
- FT_ERROR(( " invalid private dictionary section\n" ));
- error = T1_Err_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 = T1_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_Byte c;
-
-
- Again:
- for (;;)
- {
- c = cur[0];
- if ( c == 'e' && cur + 9 < limit ) /* 9 = 5 letters for `eexec' + */
- /* newline + 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:" ));
- FT_ERROR(( " could not find `eexec' keyword\n" ));
- error = T1_Err_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;
- parser->root.limit = cur + 9;
-
- cur = parser->root.cursor;
- limit = parser->root.limit;
-
- while ( cur < limit )
- {
- if ( *cur == 'e' && ft_strncmp( (char*)cur, "eexec", 5 ) == 0 )
- 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;
- 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;
- if ( *cur == '\r' )
- {
- cur++;
- if ( *cur == '\n' )
- cur++;
- }
- else if ( *cur == '\n' )
- cur++;
- else
- {
- FT_ERROR(( "T1_Get_Private_Dict:" ));
- FT_ERROR(( " `eexec' not properly terminated\n" ));
- error = T1_Err_Invalid_File_Format;
- goto Exit;
- }
-
- size = parser->base_len - ( 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 = 0;
- 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 \r following */
- /* the `eexec' keyword); if they all are hexadecimal digits, then */
- /* we have a case of ASCII storage */
-
- if ( ft_isxdigit( cur[0] ) && ft_isxdigit( cur[1] ) &&
- ft_isxdigit( cur[2] ) && ft_isxdigit( cur[3] ) )
- {
- /* ASCII hexadecimal encoding */
- FT_Long 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 );
-
- /* 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/Build/source/libs/freetype2/src/type1/t1parse.h b/Build/source/libs/freetype2/src/type1/t1parse.h
deleted file mode 100644
index fb1c8a88308..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1parse.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1parse.h */
-/* */
-/* Type 1 parser (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2008 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_Done_Table( p ) \
- do \
- { \
- if ( (p)->funcs.done ) \
- (p)->funcs.done( p ); \
- } while ( 0 )
-#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/Build/source/libs/freetype2/src/type1/t1tokens.h b/Build/source/libs/freetype2/src/type1/t1tokens.h
deleted file mode 100644
index 788c811b049..00000000000
--- a/Build/source/libs/freetype2/src/type1/t1tokens.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/***************************************************************************/
-/* */
-/* t1tokens.h */
-/* */
-/* Type 1 tokenizer (specification). */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.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_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 )
-
-
-#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/Build/source/libs/freetype2/src/type1/type1.c b/Build/source/libs/freetype2/src/type1/type1.c
deleted file mode 100644
index ccc12be1038..00000000000
--- a/Build/source/libs/freetype2/src/type1/type1.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/***************************************************************************/
-/* */
-/* type1.c */
-/* */
-/* FreeType Type 1 driver component (body only). */
-/* */
-/* Copyright 1996-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. */
-/* */
-/***************************************************************************/
-
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "t1parse.c"
-#include "t1load.c"
-#include "t1objs.c"
-#include "t1driver.c"
-#include "t1gload.c"
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-#include "t1afm.c"
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type42/Jamfile b/Build/source/libs/freetype2/src/type42/Jamfile
deleted file mode 100644
index 00371d54f32..00000000000
--- a/Build/source/libs/freetype2/src/type42/Jamfile
+++ /dev/null
@@ -1,29 +0,0 @@
-# FreeType 2 src/type42 Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) type42 ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = t42objs t42parse t42drivr ;
- }
- else
- {
- _sources = type42 ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/type42 Jamfile
diff --git a/Build/source/libs/freetype2/src/type42/module.mk b/Build/source/libs/freetype2/src/type42/module.mk
deleted file mode 100644
index 8bd40a5cc49..00000000000
--- a/Build/source/libs/freetype2/src/type42/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 Type42 module definition
-#
-
-
-# Copyright 2002, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/type42/rules.mk b/Build/source/libs/freetype2/src/type42/rules.mk
deleted file mode 100644
index 55630619554..00000000000
--- a/Build/source/libs/freetype2/src/type42/rules.mk
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# FreeType 2 Type42 driver configuration rules
-#
-
-
-# Copyright 2002, 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.
-
-
-# Type42 driver directory
-#
-T42_DIR := $(SRC_DIR)/type42
-
-
-# compilation flags for the driver
-#
-T42_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T42_DIR))
-
-
-# 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
-
-
-# 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/Build/source/libs/freetype2/src/type42/t42drivr.c b/Build/source/libs/freetype2/src/type42/t42drivr.c
deleted file mode 100644
index a6e4cf4b651..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42drivr.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42drivr.c */
-/* */
-/* High-level Type 42 driver interface (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2006, 2007 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_XFREE86_NAME_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 T42_Err_Ok;
- }
-
-
- static FT_UInt
- t42_get_name_index( T42_Face face,
- FT_String* glyph_name )
- {
- FT_Int i;
- FT_String* gname;
-
-
- for ( i = 0; i < face->type1.num_glyphs; i++ )
- {
- gname = face->type1.glyph_names[i];
-
- if ( glyph_name[0] == gname[0] && !ft_strcmp( glyph_name, gname ) )
- return (FT_UInt)ft_atol( (const char *)face->type1.charstrings[i] );
- }
-
- return 0;
- }
-
-
- static const FT_Service_GlyphDictRec t42_service_glyph_dict =
- {
- (FT_GlyphDict_GetNameFunc) t42_get_glyph_name,
- (FT_GlyphDict_NameIndexFunc)t42_get_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
- };
-
-
- /*
- *
- * 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 T42_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 T42_Err_Ok;
- }
-
-
- static const FT_Service_PsInfoRec t42_service_ps_info =
- {
- (PS_GetFontInfoFunc) t42_ps_get_font_info,
- (PS_HasGlyphNamesFunc) t42_ps_has_glyph_names,
- (PS_GetFontPrivateFunc)t42_ps_get_font_private
- };
-
-
- /*
- *
- * 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_XF86_NAME, FT_XF86_FORMAT_TYPE_42 },
- { NULL, NULL }
- };
-
-
- static FT_Module_Interface
- T42_Get_Interface( FT_Driver driver,
- const FT_String* t42_interface )
- {
- FT_UNUSED( driver );
-
- 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,
-
- 0, /* format interface */
-
- (FT_Module_Constructor)T42_Driver_Init,
- (FT_Module_Destructor) T42_Driver_Done,
- (FT_Module_Requester) T42_Get_Interface,
- },
-
- sizeof ( T42_FaceRec ),
- sizeof ( T42_SizeRec ),
- sizeof ( T42_GlyphSlotRec ),
-
- (FT_Face_InitFunc) T42_Face_Init,
- (FT_Face_DoneFunc) T42_Face_Done,
- (FT_Size_InitFunc) T42_Size_Init,
- (FT_Size_DoneFunc) T42_Size_Done,
- (FT_Slot_InitFunc) T42_GlyphSlot_Init,
- (FT_Slot_DoneFunc) T42_GlyphSlot_Done,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
- (FT_Slot_LoadFunc) T42_GlyphSlot_Load,
-
- (FT_Face_GetKerningFunc) 0,
- (FT_Face_AttachFunc) 0,
-
- (FT_Face_GetAdvancesFunc) 0,
- (FT_Size_RequestFunc) T42_Size_Request,
- (FT_Size_SelectFunc) T42_Size_Select
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type42/t42drivr.h b/Build/source/libs/freetype2/src/type42/t42drivr.h
deleted file mode 100644
index 98b7410b670..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42drivr.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42drivr.h */
-/* */
-/* High-level Type 42 driver interface (specification). */
-/* */
-/* Copyright 2002 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
-
-
- FT_EXPORT_VAR( const FT_Driver_ClassRec ) t42_driver_class;
-
-
-FT_END_HEADER
-
-
-#endif /* __T42DRIVR_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type42/t42error.h b/Build/source/libs/freetype2/src/type42/t42error.h
deleted file mode 100644
index b230910012f..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42error.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42error.h */
-/* */
-/* Type 42 error codes (specification only). */
-/* */
-/* Copyright 2002, 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/type42/t42objs.c b/Build/source/libs/freetype2/src/type42/t42objs.c
deleted file mode 100644
index db04fde367a..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42objs.c
+++ /dev/null
@@ -1,647 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42objs.c */
-/* */
-/* Type 42 objects manager (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 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_INTERNAL_STREAM_H
-#include FT_LIST_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;
-
- 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 )
- {
- error = T42_Err_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 = T42_Err_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 = 0;
- loader.glyph_names.elements = 0;
-
- /* 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* char_name;
- 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 = +32000;
- max_char = -32000;
-
- charcode = 0;
- for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
- {
- 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;
- }
- 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,
- T42_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- 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( face_index );
- 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;
-
- /* 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 != 0 )
- {
- FT_ERROR(( "T42_Face_Init: invalid face index\n" ));
- error = T42_Err_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 = face_index;
-
- 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;
-
- /* We only set this flag if we have the patented bytecode interpreter. */
- /* There are no known `tricky' Type42 fonts that could be loaded with */
- /* the unpatented interpreter. */
-#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 = 0;
-
- /* Load the TTF font embedded in the T42 font */
- {
- FT_Open_Args args;
-
-
- args.flags = FT_OPEN_MEMORY;
- 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 && psaux )
- {
- FT_CharMapRec charmap;
- T1_CMap_Classes cmap_classes = psaux->t1_cmap_classes;
- FT_CMap_Class clazz;
-
-
- charmap.face = root;
-
- /* first of all, try to synthetize a Unicode charmap */
- charmap.platform_id = 3;
- charmap.encoding_id = 1;
- charmap.encoding = FT_ENCODING_UNICODE;
-
- FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
-
- /* now, generate an Adobe Standard encoding when appropriate */
- charmap.platform_id = 7;
- clazz = NULL;
-
- switch ( type1->encoding_type )
- {
- case T1_ENCODING_TYPE_STANDARD:
- charmap.encoding = FT_ENCODING_ADOBE_STANDARD;
- charmap.encoding_id = 0;
- clazz = cmap_classes->standard;
- break;
-
- case T1_ENCODING_TYPE_EXPERT:
- charmap.encoding = FT_ENCODING_ADOBE_EXPERT;
- charmap.encoding_id = 1;
- clazz = cmap_classes->expert;
- break;
-
- case T1_ENCODING_TYPE_ARRAY:
- charmap.encoding = FT_ENCODING_ADOBE_CUSTOM;
- charmap.encoding_id = 2;
- clazz = cmap_classes->custom;
- break;
-
- case T1_ENCODING_TYPE_ISOLATIN1:
- charmap.encoding = FT_ENCODING_ADOBE_LATIN_1;
- charmap.encoding_id = 3;
- clazz = cmap_classes->unicode;
- break;
-
- default:
- ;
- }
-
- if ( clazz )
- FT_CMap_New( clazz, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( root->num_charmaps )
- root->charmap = root->charmaps[0];
-#endif
- }
- }
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- T42_Face_Done( T42_Face face )
- {
- T1_Font type1;
- PS_FontInfo info;
- FT_Memory memory;
-
-
- if ( face )
- {
- 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 = 0;
- face->root.style_name = 0;
- }
- }
-
-
- /*************************************************************************/
- /* */
- /* <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( T42_Driver driver )
- {
- FT_Module ttmodule;
-
-
- ttmodule = FT_Get_Module( FT_MODULE(driver)->library, "truetype" );
- driver->ttclazz = (FT_Driver_Class)ttmodule->clazz;
-
- return T42_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( void )
- T42_Driver_Done( T42_Driver driver )
- {
- FT_UNUSED( driver );
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_Size_Init( T42_Size size )
- {
- FT_Face face = size->root.face;
- T42_Face t42face = (T42_Face)face;
- FT_Size ttsize;
- FT_Error error = T42_Err_Ok;
-
-
- error = FT_New_Size( t42face->ttf_face, &ttsize );
- size->ttsize = ttsize;
-
- FT_Activate_Size( ttsize );
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_Size_Request( T42_Size size,
- FT_Size_Request req )
- {
- T42_Face face = (T42_Face)size->root.face;
- FT_Error error;
-
-
- FT_Activate_Size( size->ttsize );
-
- error = FT_Request_Size( face->ttf_face, req );
- if ( !error )
- ( (FT_Size)size )->metrics = face->ttf_face->size->metrics;
-
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- T42_Size_Select( T42_Size size,
- FT_ULong strike_index )
- {
- T42_Face face = (T42_Face)size->root.face;
- FT_Error error;
-
-
- FT_Activate_Size( size->ttsize );
-
- error = FT_Select_Size( face->ttf_face, strike_index );
- if ( !error )
- ( (FT_Size)size )->metrics = face->ttf_face->size->metrics;
-
- return error;
-
- }
-
-
- FT_LOCAL_DEF( void )
- T42_Size_Done( T42_Size size )
- {
- FT_Face face = size->root.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( T42_GlyphSlot slot )
- {
- FT_Face face = slot->root.face;
- T42_Face t42face = (T42_Face)face;
- FT_GlyphSlot ttslot;
- FT_Error error = T42_Err_Ok;
-
-
- if ( face->glyph == NULL )
- {
- /* 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( T42_GlyphSlot slot )
- {
- 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 = 0;
- slot->control_data = 0;
- slot->control_len = 0;
- slot->other = 0;
- 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;
- FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
-
-
- 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/Build/source/libs/freetype2/src/type42/t42objs.h b/Build/source/libs/freetype2/src/type42/t42objs.h
deleted file mode 100644
index 289dedcc69b..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42objs.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42objs.h */
-/* */
-/* Type 42 objects manager (specification). */
-/* */
-/* Copyright 2002, 2003, 2006, 2007 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;
- void* extension_component;
-
- } T42_DriverRec, *T42_Driver;
-
-
- /* */
-
-
- FT_LOCAL( FT_Error )
- T42_Face_Init( FT_Stream stream,
- T42_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params );
-
-
- FT_LOCAL( void )
- T42_Face_Done( T42_Face face );
-
-
- FT_LOCAL( FT_Error )
- T42_Size_Init( T42_Size size );
-
-
- FT_LOCAL( FT_Error )
- T42_Size_Request( T42_Size size,
- FT_Size_Request req );
-
-
- FT_LOCAL( FT_Error )
- T42_Size_Select( T42_Size size,
- FT_ULong strike_index );
-
-
- FT_LOCAL( void )
- T42_Size_Done( T42_Size size );
-
-
- FT_LOCAL( FT_Error )
- T42_GlyphSlot_Init( T42_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( T42_GlyphSlot slot );
-
-
- FT_LOCAL( FT_Error )
- T42_Driver_Init( T42_Driver driver );
-
- FT_LOCAL( void )
- T42_Driver_Done( T42_Driver driver );
-
- /* */
-
-FT_END_HEADER
-
-
-#endif /* __T42OBJS_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type42/t42parse.c b/Build/source/libs/freetype2/src/type42/t42parse.c
deleted file mode 100644
index 7d8c267ced3..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42parse.c
+++ /dev/null
@@ -1,1167 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42parse.c */
-/* */
-/* Type 42 font parser (body). */
-/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 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_LIST_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 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_Done_Table( p ) \
- do \
- { \
- if ( (p)->funcs.done ) \
- (p)->funcs.done( p ); \
- } while ( 0 )
-#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 = T42_Err_Ok;
- FT_Long size;
-
-
- psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );
-
- parser->stream = stream;
- parser->base_len = 0;
- parser->base_dict = 0;
- 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 = T42_Err_Unknown_File_Format;
- }
-
- FT_FRAME_EXIT();
-
- if ( error || FT_STREAM_SEEK( 0 ) )
- goto Exit;
-
- size = 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_Face root = (FT_Face)&face->root;
- FT_Fixed temp[6];
- FT_Fixed temp_scale;
-
-
- (void)T1_ToFixedArray( parser, 6, temp, 3 );
-
- temp_scale = FT_ABS( temp[3] );
-
- /* Set Units per EM based on FontMatrix values. We set the value to */
- /* 1000 / temp_scale, because temp_scale was already multiplied by */
- /* 1000 (in t1_tofixed, from psobjs.c). */
-
- root->units_per_EM = (FT_UShort)( FT_DivFix( 1000 * 0x10000L,
- temp_scale ) >> 16 );
-
- /* we need to scale the values by 1.0/temp_scale */
- 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] = 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 = T42_Err_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_UInt 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_UInt)T1_ToInt( parser );
-
- T1_Skip_Spaces( parser );
- if ( parser->root.cursor >= limit )
- return;
-
- /* 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";
-
-
- 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 );
- }
-
- cur = parser->root.cursor;
-
- if ( *cur == '/' && cur + 2 < limit && n < count )
- {
- FT_PtrDist len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- return;
-
- len = 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
- {
- 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
- {
- FT_ERROR(( "t42_parse_encoding: invalid token!\n" ));
- parser->root.error = T42_Err_Invalid_File_Format;
- }
- }
- }
-
-
- 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_ULong count, ttf_size = 0;
-
- FT_Long 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 = T42_Err_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 )
- {
- 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_Long)( ( parser->root.cursor - cur - 2 + 1 ) / 2 );
- 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 ) )
- {
- if ( allocated )
- {
- FT_ERROR(( "t42_parse_sfnts: "
- "can't handle mixed binary and hex strings!\n" ));
- error = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- string_size = T1_ToInt( parser );
-
- T1_Skip_PS_Token( parser ); /* `RD' */
- if ( parser->root.error )
- return;
-
- string_buf = parser->root.cursor + 1; /* one space after `RD' */
-
- parser->root.cursor += string_size + 1;
- if ( parser->root.cursor >= limit )
- {
- FT_ERROR(( "t42_parse_sfnts: too many binary data!\n" ));
- error = T42_Err_Invalid_File_Format;
- goto Fail;
- }
- }
-
- if ( !string_buf )
- {
- FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array!\n" ));
- error = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- /* A string can have a trailing zero byte for padding. Ignore it. */
- if ( string_buf[string_size - 1] == 0 && ( string_size % 2 == 1 ) )
- string_size--;
-
- if ( !string_size )
- {
- FT_ERROR(( "t42_parse_sfnts: invalid string!\n" ));
- error = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- 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;
- ttf_size = 12 + 16 * num_tables;
-
- if ( FT_REALLOC( face->ttf_data, 12, ttf_size ) )
- goto Fail;
- }
- /* fall through */
-
- case BEFORE_TABLE_DIR:
- /* the offset table is read; read the table directory */
- if ( count < 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 );
-
- /* Pad to a 4-byte boundary length */
- ttf_size += ( len + 3 ) & ~3;
- }
-
- status = OTHER_TABLES;
- face->ttf_size = ttf_size;
-
- /* there are no more than 256 tables, so no size check here */
- if ( FT_REALLOC( face->ttf_data, 12 + 16 * num_tables,
- ttf_size + 1 ) )
- goto Fail;
- }
- /* fall through */
-
- case OTHER_TABLES:
- /* all other tables are just copied */
- if ( count >= ttf_size )
- {
- FT_ERROR(( "t42_parse_sfnts: too many binary data!\n" ));
- error = T42_Err_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 = T42_Err_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_UInt n;
- FT_UInt 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 = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- if ( ft_isdigit( *parser->root.cursor ) )
- {
- loader->num_glyphs = (FT_UInt)T1_ToInt( parser );
- if ( parser->root.error )
- return;
- }
- else if ( *parser->root.cursor == '<' )
- {
- /* We have `<< ... >>'. Count the number of `/' in the dictionary */
- /* to get its size. */
- FT_UInt 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 = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- if ( parser->root.cursor >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds!\n" ));
- error = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- /* initialize tables */
-
- 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 (;;)
- {
- /* The format is simple: */
- /* `/glyphname' + index [+ def] */
-
- 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.error )
- return;
-
- if ( *cur == '/' )
- {
- FT_PtrDist len;
-
-
- if ( cur + 1 >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds!\n" ));
- error = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- cur++; /* skip `/' */
- len = parser->root.cursor - cur;
-
- 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 );
-
- cur = parser->root.cursor;
-
- (void)T1_ToInt( parser );
- if ( parser->root.cursor >= limit )
- {
- FT_ERROR(( "t42_parse_charstrings: out of bounds!\n" ));
- error = T42_Err_Invalid_File_Format;
- goto Fail;
- }
-
- len = 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 = T42_Err_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_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 = T42_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_PtrDist len;
-
-
- cur++;
-
- parser->root.cursor = cur;
- T1_Skip_PS_Token( parser );
- if ( parser->root.error )
- goto Exit;
-
- len = 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_PtrDist)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_MEM_ZERO( loader, sizeof ( *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/Build/source/libs/freetype2/src/type42/t42parse.h b/Build/source/libs/freetype2/src/type42/t42parse.h
deleted file mode 100644
index f77ec4af4f4..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42parse.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42parse.h */
-/* */
-/* Type 42 font parser (specification). */
-/* */
-/* Copyright 2002, 2003 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_UInt num_chars; /* number of characters in encoding */
- PS_TableRec encoding_table; /* PS_Table used to store the */
- /* encoding character names */
-
- FT_UInt 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/Build/source/libs/freetype2/src/type42/t42types.h b/Build/source/libs/freetype2/src/type42/t42types.h
deleted file mode 100644
index 6626b04458a..00000000000
--- a/Build/source/libs/freetype2/src/type42/t42types.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************/
-/* */
-/* t42types.h */
-/* */
-/* Type 42 font data types (specification only). */
-/* */
-/* Copyright 2002, 2003, 2006 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;
- const void* afm_data;
- FT_Byte* ttf_data;
- FT_ULong 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 /* __T1TYPES_H__ */
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/type42/type42.c b/Build/source/libs/freetype2/src/type42/type42.c
deleted file mode 100644
index d13df56b10c..00000000000
--- a/Build/source/libs/freetype2/src/type42/type42.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/***************************************************************************/
-/* */
-/* type42.c */
-/* */
-/* FreeType Type 42 driver component. */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-#include <ft2build.h>
-#include "t42objs.c"
-#include "t42parse.c"
-#include "t42drivr.c"
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/winfonts/Jamfile b/Build/source/libs/freetype2/src/winfonts/Jamfile
deleted file mode 100644
index 71cf5678e8b..00000000000
--- a/Build/source/libs/freetype2/src/winfonts/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/winfonts Jamfile
-#
-# 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.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) winfonts ;
-
-Library $(FT2_LIB) : winfnt.c ;
-
-# end of src/winfonts Jamfile
diff --git a/Build/source/libs/freetype2/src/winfonts/fnterrs.h b/Build/source/libs/freetype2/src/winfonts/fnterrs.h
deleted file mode 100644
index ea80909715d..00000000000
--- a/Build/source/libs/freetype2/src/winfonts/fnterrs.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************/
-/* */
-/* fnterrs.h */
-/* */
-/* Win FNT/FON error codes (specification only). */
-/* */
-/* 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. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* 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__
-
-#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/Build/source/libs/freetype2/src/winfonts/module.mk b/Build/source/libs/freetype2/src/winfonts/module.mk
deleted file mode 100644
index 0ace3ae6de0..00000000000
--- a/Build/source/libs/freetype2/src/winfonts/module.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# FreeType 2 Windows FNT/FON module definition
-#
-
-
-# Copyright 1996-2000, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.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)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/Build/source/libs/freetype2/src/winfonts/rules.mk b/Build/source/libs/freetype2/src/winfonts/rules.mk
deleted file mode 100644
index 71a7df2d8ab..00000000000
--- a/Build/source/libs/freetype2/src/winfonts/rules.mk
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# FreeType 2 Windows FNT/FON driver configuration rules
-#
-
-
-# Copyright 1996-2000, 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.
-
-
-# Windows driver directory
-#
-FNT_DIR := $(SRC_DIR)/winfonts
-
-
-FNT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(FNT_DIR))
-
-
-# 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/Build/source/libs/freetype2/src/winfonts/winfnt.c b/Build/source/libs/freetype2/src/winfonts/winfnt.c
deleted file mode 100644
index 833fb888a2a..00000000000
--- a/Build/source/libs/freetype2/src/winfonts/winfnt.c
+++ /dev/null
@@ -1,1130 +0,0 @@
-/***************************************************************************/
-/* */
-/* winfnt.c */
-/* */
-/* FreeType font driver for Windows FNT/FON files */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008 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 "winfnt.h"
-#include "fnterrs.h"
-#include FT_SERVICE_WINFNT_H
-#include FT_SERVICE_XFREE86_NAME_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 = 0;
- }
-
-
- 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 valid FNT file]\n" ));
- error = FNT_Err_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 valid FNT file]\n" ));
- error = FNT_Err_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 = FNT_Err_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_index )
- {
- FT_Error error;
- FT_Stream stream = FT_FACE( face )->stream;
- FT_Memory memory = FT_FACE( face )->memory;
- WinMZ_HeaderRec mz_header;
-
-
- face->font = 0;
-
- /* does it begin with an MZ header? */
- if ( FT_STREAM_SEEK( 0 ) ||
- FT_STREAM_READ_FIELDS( winmz_header_fields, &mz_header ) )
- goto Exit;
-
- error = FNT_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 = FNT_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();
-
- 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_ULong)( FT_STREAM_POS() + 4 +
- ( 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 = FNT_Err_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 = FNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- face->root.num_faces = font_count;
-
- if ( face_index >= font_count )
- {
- error = FNT_Err_Bad_Argument;
- goto Exit;
- }
- else if ( face_index < 0 )
- goto Exit;
-
- if ( FT_NEW( face->font ) )
- goto Exit;
-
- if ( FT_STREAM_SEEK( font_offset + 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_Long 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 = FNT_Err_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 = FNT_Err_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 = FNT_Err_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 = FNT_Err_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 = FNT_Err_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 %d\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 = FNT_Err_Invalid_File_Format;
- goto Exit;
- }
-
- if ( face_index >= face->root.num_faces )
- {
- error = FNT_Err_Bad_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 )
- {
- FNT_Face face = (FNT_Face)FT_CMAP_FACE( cmap );
- FNT_Font font = face->font;
-
-
- 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 )
- gindex = char_code + 1; /* we artificially increase the glyph index; */
- /* FNT_Load_Glyph reverts to the right one */
- return gindex;
- }
-
-
- static FT_UInt
- 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 = 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( FNT_Face face )
- {
- if ( face )
- {
- FT_Memory memory = FT_FACE_MEMORY( face );
-
-
- fnt_font_done( face );
-
- FT_FREE( face->root.available_sizes );
- face->root.num_fixed_sizes = 0;
- }
- }
-
-
- static FT_Error
- FNT_Face_Init( FT_Stream stream,
- FNT_Face face,
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
- {
- FT_Error error;
- FT_Memory memory = FT_FACE_MEMORY( face );
-
- FT_UNUSED( num_params );
- FT_UNUSED( params );
-
-
- /* try to load font from a DLL */
- error = fnt_face_get_dll_font( face, face_index );
- if ( !error && face_index < 0 )
- goto Exit;
-
- if ( error == FNT_Err_Unknown_File_Format )
- {
- /* this didn't work; try to load a single FNT font */
- FNT_Font font;
-
- if ( FT_NEW( face->font ) )
- goto Exit;
-
- face->root.num_faces = 1;
-
- font = face->font;
- font->offset = 0;
- font->fnt_size = stream->size;
-
- error = fnt_font_load( font, stream );
-
- if ( !error )
- {
- if ( face_index > 0 )
- error = FNT_Err_Bad_Argument;
- else if ( face_index < 0 )
- goto Exit;
- }
- }
-
- if ( error )
- 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_PtrDist family_size;
-
-
- 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 = 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;
- charmap.platform_id = 0;
- charmap.encoding_id = 0;
- charmap.face = root;
-
- if ( font->header.charset == FT_WinFNT_ID_MAC )
- {
- charmap.encoding = FT_ENCODING_APPLE_ROMAN;
- charmap.platform_id = 1;
-/* charmap.encoding_id = 0; */
- }
-
- error = FT_CMap_New( fnt_cmap_class,
- NULL,
- &charmap,
- NULL );
- if ( error )
- goto Fail;
-
- /* Select default charmap */
- if ( root->num_charmaps )
- root->charmap = root->charmaps[0];
- }
-
- /* setup remaining flags */
-
- /* 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 = FNT_Err_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( face );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- FNT_Size_Select( FT_Size size )
- {
- FNT_Face face = (FNT_Face)size->face;
- FT_WinFNT_Header header = &face->font->header;
-
-
- 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 FNT_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 = FNT_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 = FNT_Err_Ok;
- break;
-
- case FT_SIZE_REQUEST_TYPE_REAL_DIM:
- if ( height == header->pixel_height )
- error = FNT_Err_Ok;
- break;
-
- default:
- error = FNT_Err_Unimplemented_Feature;
- break;
- }
-
- if ( error )
- return error;
- else
- return FNT_Size_Select( size );
- }
-
-
- 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 = face->font;
- FT_Error error = FNT_Err_Ok;
- FT_Byte* p;
- FT_Int len;
- FT_Bitmap* bitmap = &slot->bitmap;
- FT_ULong offset;
- FT_Bool new_format;
-
- FT_UNUSED( load_flags );
-
-
- if ( !face || !font ||
- glyph_index >= (FT_UInt)( FT_FACE( face )->num_glyphs ) )
- {
- error = FNT_Err_Invalid_Argument;
- goto Exit;
- }
-
- 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;
-
- /* jump to glyph entry */
- p = font->fnt_frame + ( new_format ? 148 : 118 ) + len * glyph_index;
-
- bitmap->width = FT_NEXT_SHORT_LE( p );
-
- 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 = FNT_Err_Invalid_File_Format;
- 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_Int pitch = ( bitmap->width + 7 ) >> 3;
- FT_Byte* column;
- FT_Byte* write;
-
-
- bitmap->pitch = pitch;
- bitmap->rows = font->header.pixel_height;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
-
- if ( offset + pitch * bitmap->rows >= font->header.file_size )
- {
- FT_TRACE2(( "invalid bitmap width\n" ));
- error = FNT_Err_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;
- slot->bitmap_left = 0;
- slot->bitmap_top = font->header.ascent;
- slot->format = FT_GLYPH_FORMAT_BITMAP;
-
- /* now set up metrics */
- slot->metrics.width = bitmap->width << 6;
- slot->metrics.height = bitmap->rows << 6;
- slot->metrics.horiAdvance = bitmap->width << 6;
- slot->metrics.horiBearingX = 0;
- slot->metrics.horiBearingY = slot->bitmap_top << 6;
-
- ft_synthesize_vertical_metrics( &slot->metrics,
- bitmap->rows << 6 );
-
- 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
- };
-
- /*
- * SERVICE LIST
- *
- */
-
- static const FT_ServiceDescRec winfnt_services[] =
- {
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_WINFNT },
- { FT_SERVICE_ID_WINFNT, &winfnt_service_rec },
- { NULL, NULL }
- };
-
-
- static FT_Module_Interface
- winfnt_get_service( FT_Driver driver,
- const FT_String* service_id )
- {
- FT_UNUSED( driver );
-
- 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,
-
- 0,
-
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) winfnt_get_service
- },
-
- sizeof( FNT_FaceRec ),
- sizeof( FT_SizeRec ),
- sizeof( FT_GlyphSlotRec ),
-
- (FT_Face_InitFunc) FNT_Face_Init,
- (FT_Face_DoneFunc) FNT_Face_Done,
- (FT_Size_InitFunc) 0,
- (FT_Size_DoneFunc) 0,
- (FT_Slot_InitFunc) 0,
- (FT_Slot_DoneFunc) 0,
-
-#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
- ft_stub_set_char_sizes,
- ft_stub_set_pixel_sizes,
-#endif
- (FT_Slot_LoadFunc) FNT_Load_Glyph,
-
- (FT_Face_GetKerningFunc) 0,
- (FT_Face_AttachFunc) 0,
- (FT_Face_GetAdvancesFunc) 0,
-
- (FT_Size_RequestFunc) FNT_Size_Request,
- (FT_Size_SelectFunc) FNT_Size_Select
- };
-
-
-/* END */
diff --git a/Build/source/libs/freetype2/src/winfonts/winfnt.h b/Build/source/libs/freetype2/src/winfonts/winfnt.h
deleted file mode 100644
index ca75c9501a2..00000000000
--- a/Build/source/libs/freetype2/src/winfonts/winfnt.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/***************************************************************************/
-/* */
-/* winfnt.h */
-/* */
-/* FreeType font driver for Windows FNT/FON files */
-/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2007 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
-
- 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/Build/source/libs/freetype2/version.sed b/Build/source/libs/freetype2/version.sed
deleted file mode 100644
index c281ff506b4..00000000000
--- a/Build/source/libs/freetype2/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/Build/source/libs/freetype2/vms_make.com b/Build/source/libs/freetype2/vms_make.com
deleted file mode 100644
index 1aa83e7e304..00000000000
--- a/Build/source/libs/freetype2/vms_make.com
+++ /dev/null
@@ -1,1286 +0,0 @@
-$! make Freetype2 under OpenVMS
-$!
-$! Copyright 2003, 2004, 2006, 2007 by
-$! David Turner, Robert Wilhelm, and Werner Lemberg.
-$!
-$! This file is part of the FreeType project, and may only be used, modified,
-$! and distributed under the terms of the FreeType project license,
-$! LICENSE.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.freetype]
- 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,ftxf86.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 libaries 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 libary 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@decus.de), 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
diff --git a/Build/source/libs/freetype2/withenable.ac b/Build/source/libs/freetype2/withenable.ac
deleted file mode 100644
index b28aa2d22b2..00000000000
--- a/Build/source/libs/freetype2/withenable.ac
+++ /dev/null
@@ -1,11 +0,0 @@
-AC_ARG_WITH(system_freetype2,
-[ --with-system-freetype2 use installed freetype2 library])
-
-AC_ARG_WITH(freetype2_libdir,
-[ --with-freetype2-libdir=DIR
- Specify directory where the freetype2 library resides.])
-
-AC_ARG_WITH(freetype2_include,
-[ --with-freetype2-include=DIR
- Specify the freetype2 header files location.
- (both DIR and DIR/freetype2 will be added to the include paths)])
diff --git a/Build/source/libs/graphite-engine/COPYING b/Build/source/libs/graphite-engine/COPYING
deleted file mode 100644
index 2e009b10e5a..00000000000
--- a/Build/source/libs/graphite-engine/COPYING
+++ /dev/null
@@ -1 +0,0 @@
-see license/LICENSING.txt
diff --git a/Build/source/libs/graphite-engine/INSTALL b/Build/source/libs/graphite-engine/INSTALL
deleted file mode 100644
index 23e5f25d0e5..00000000000
--- a/Build/source/libs/graphite-engine/INSTALL
+++ /dev/null
@@ -1,236 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about. Run `./configure --help' for
-details on some of the pertinent environment variables.
-
- You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here
-is an example:
-
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc. You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS KERNEL-OS
-
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script). Here is a another example:
-
- /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
- disable caching.
-
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
diff --git a/Build/source/libs/graphite-engine/Makefile.am b/Build/source/libs/graphite-engine/Makefile.am
deleted file mode 100644
index c819a9a33be..00000000000
--- a/Build/source/libs/graphite-engine/Makefile.am
+++ /dev/null
@@ -1,62 +0,0 @@
-AUTOMAKE_OPTIONS = 1.6
-
-SUBDIRS = src test
-
-EXTRA_DIST = doc license \
- build.bat build_d.bat makefile.vc \
- README
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = silgraphite.pc
-
-$(pkgconfig_DATA): config.status
-
-dist-hook:
- find $(distdir) -name .svn | xargs rm -rf
-
-# VC_VERSION is the last released version of the software
-VC_VERSION = 2.3
-# D_VERSION gets the number of the current svn revision
-D_VERSION = `svnversion ${top_srcdir}|sed -e "s/[0-9]*\://g"`
-SVNDEB_VERSION = $(VC_VERSION)+0$(D_VERSION)svn
-SVNDEBPACKAGE = silgraphite2.0-$(SVNDEB_VERSION)
-SVNORIGTAR = silgraphite2.0_$(SVNDEB_VERSION).orig.tar.gz
-SVNWITH_EPOCH = 1:$(SVNDEB_VERSION)-1
-
-DEB_VERSION = $(VC_VERSION)
-DEBPACKAGE = silgraphite2.0-$(DEB_VERSION)
-ORIGTAR = silgraphite2.0_$(DEB_VERSION).orig.tar.gz
-WITH_EPOCH = 1:$(DEB_VERSION)-1
-
-DISTRIB_CODENAME ?= ${REL_CODENAME}
-
-showcodename:
- echo "Codename: ${DISTRIB_CODENAME}"
-
-deb-base: dist
- rm -rf silgraphite2.0*
- mkdir -p ${SVNDEBPACKAGE}
- cp ${PACKAGE}-${VERSION}.tar.gz $(SVNDEBPACKAGE)
- tar cfz $(SVNORIGTAR) $(SVNDEBPACKAGE)
- cp -a ${top_srcdir}/debian $(SVNDEBPACKAGE)
- cd ${SVNDEBPACKAGE} && find . -name .svn | xargs rm -rf
-
-# make deb builds an interim deb from svn source for release
-deb: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${SVNWITH_EPOCH} -m -c${SVNDEBPACKAGE}/debian/changelog
- cd ${SVNDEBPACKAGE} && pdebuild
-
-# make deb-binary-only builds a binary only deb from svn source
-deb-binary-only: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${SVNWITH_EPOCH} -m -c${SVNDEBPACKAGE}/debian/changelog "This is build direct from svn"
- cd ${SVNDEBPACKAGE} && pdebuild --debbuildopts -i --debbuildopts -b
-
-# make deb-release builds a deb for a released version number
-deb-release: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${WITH_EPOCH} -c${DEBPACKAGE}/debian/changelog
- cd ${DEBPACKAGE} && pdebuild
-
-# make deb-local uses debuild to build a deb for local use only
-deb-local: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${SVNWITH_EPOCH} -m -c${SVNDEBPACKAGE}/debian/changelog "This is a debuild direct from svn"
- cd ${SVNDEBPACKAGE} && debuild -us -uc
diff --git a/Build/source/libs/graphite-engine/Makefile.in b/Build/source/libs/graphite-engine/Makefile.in
deleted file mode 100644
index a07fdc70a31..00000000000
--- a/Build/source/libs/graphite-engine/Makefile.in
+++ /dev/null
@@ -1,699 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = .
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(srcdir)/installed-top.pc.in \
- $(srcdir)/silgraphite.pc.in $(srcdir)/uninstalled-top.pc.in \
- $(top_srcdir)/configure COPYING INSTALL TODO \
- config/config.guess config/config.sub config/depcomp \
- config/install-sh config/ltmain.sh config/missing
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES = silgraphite.pc silgraphite-uninstalled.pc
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-recursive \
- install-exec-recursive install-info-recursive \
- install-recursive installcheck-recursive installdirs-recursive \
- pdf-recursive ps-recursive uninstall-info-recursive \
- uninstall-recursive
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
-pkgconfigDATA_INSTALL = $(INSTALL_DATA)
-DATA = $(pkgconfig_DATA)
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
- { test ! -d $(distdir) \
- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -fr $(distdir); }; }
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-GREP = @GREP@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LSB_RELEASE = @LSB_RELEASE@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-REL_CODENAME = @REL_CODENAME@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIZEOF_WCHAR_T = @SIZEOF_WCHAR_T@
-STRIP = @STRIP@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-AUTOMAKE_OPTIONS = 1.6
-SUBDIRS = src test
-EXTRA_DIST = doc license \
- build.bat build_d.bat makefile.vc \
- README
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = silgraphite.pc
-
-# VC_VERSION is the last released version of the software
-VC_VERSION = 2.2.1
-# D_VERSION gets the number of the current svn revision
-D_VERSION = `svnversion ${top_srcdir}|sed -e "s/[0-9]*\://g"`
-SVNDEB_VERSION = $(VC_VERSION)+0$(D_VERSION)svn
-SVNDEBPACKAGE = silgraphite2.0-$(SVNDEB_VERSION)
-SVNORIGTAR = silgraphite2.0_$(SVNDEB_VERSION).orig.tar.gz
-SVNWITH_EPOCH = 1:$(SVNDEB_VERSION)-1
-DEB_VERSION = $(VC_VERSION)
-DEBPACKAGE = silgraphite2.0-$(DEB_VERSION)
-ORIGTAR = silgraphite2.0_$(DEB_VERSION).orig.tar.gz
-WITH_EPOCH = 1:$(DEB_VERSION)-1
-all: all-recursive
-
-.SUFFIXES:
-am--refresh:
- @:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
- cd $(srcdir) && $(AUTOMAKE) --foreign \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- echo ' $(SHELL) ./config.status'; \
- $(SHELL) ./config.status;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- $(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-silgraphite.pc: $(top_builddir)/config.status $(srcdir)/installed-top.pc.in $(srcdir)/silgraphite.pc.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-silgraphite-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/uninstalled-top.pc.in $(srcdir)/silgraphite.pc.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
- -rm -f libtool
-uninstall-info-am:
-install-pkgconfigDATA: $(pkgconfig_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
- @list='$(pkgconfig_DATA)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
- $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
- done
-
-uninstall-pkgconfigDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(pkgconfig_DATA)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
- rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
- done
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
- @failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- $(am__remove_distdir)
- mkdir $(distdir)
- $(mkdir_p) $(distdir)/. $(distdir)/config
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
- if test -d $$d/$$file; then \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(mkdir_p) "$(distdir)/$$subdir" \
- || exit 1; \
- distdir=`$(am__cd) $(distdir) && pwd`; \
- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
- (cd $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$top_distdir" \
- distdir="$$distdir/$$subdir" \
- distdir) \
- || exit 1; \
- fi; \
- done
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$(top_distdir)" distdir="$(distdir)" \
- dist-hook
- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
- ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
- ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
- || chmod -R a+r $(distdir)
-dist-gzip: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-
-dist-bzip2: distdir
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
-
-dist-tarZ: distdir
- tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
- $(am__remove_distdir)
-
-dist-shar: distdir
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
- $(am__remove_distdir)
-
-dist-zip: distdir
- -rm -f $(distdir).zip
- zip -rq $(distdir).zip $(distdir)
- $(am__remove_distdir)
-
-dist dist-all: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration. Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
- case '$(DIST_ARCHIVES)' in \
- *.tar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
- *.tar.bz2*) \
- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
- *.tar.Z*) \
- uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
- *.shar.gz*) \
- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
- *.zip*) \
- unzip $(distdir).zip ;;\
- esac
- chmod -R a-w $(distdir); chmod a+w $(distdir)
- mkdir $(distdir)/_build
- mkdir $(distdir)/_inst
- chmod a-w $(distdir)
- dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
- && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
- && cd $(distdir)/_build \
- && ../configure --srcdir=.. --prefix="$$dc_install_base" \
- $(DISTCHECK_CONFIGURE_FLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) \
- && $(MAKE) $(AM_MAKEFLAGS) dvi \
- && $(MAKE) $(AM_MAKEFLAGS) check \
- && $(MAKE) $(AM_MAKEFLAGS) install \
- && $(MAKE) $(AM_MAKEFLAGS) installcheck \
- && $(MAKE) $(AM_MAKEFLAGS) uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
- distuninstallcheck \
- && chmod -R a-w "$$dc_install_base" \
- && ({ \
- (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
- distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
- } || { rm -rf "$$dc_destdir"; exit 1; }) \
- && rm -rf "$$dc_destdir" \
- && $(MAKE) $(AM_MAKEFLAGS) dist \
- && rm -rf $(DIST_ARCHIVES) \
- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
- $(am__remove_distdir)
- @(echo "$(distdir) archives ready for distribution: "; \
- list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
- sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
-distuninstallcheck:
- @cd $(distuninstallcheck_dir) \
- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
- || { echo "ERROR: files left after uninstall:" ; \
- if test -n "$(DESTDIR)"; then \
- echo " (check DESTDIR support)"; \
- fi ; \
- $(distuninstallcheck_listfiles) ; \
- exit 1; } >&2
-distcleancheck: distclean
- @if test '$(srcdir)' = . ; then \
- echo "ERROR: distcleancheck can only run from a VPATH build" ; \
- exit 1 ; \
- fi
- @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
- || { echo "ERROR: files left in build directory after distclean:" ; \
- $(distcleancheck_listfiles) ; \
- exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
- for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
- test -z "$$dir" || $(mkdir_p) "$$dir"; \
- done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-libtool \
- distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-pkgconfigDATA
-
-install-exec-am:
-
-install-info: install-info-recursive
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
- -rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf $(top_srcdir)/autom4te.cache
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-info-am uninstall-pkgconfigDATA
-
-uninstall-info: uninstall-info-recursive
-
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
- check-am clean clean-generic clean-libtool clean-recursive \
- ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
- dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
- distclean-generic distclean-libtool distclean-recursive \
- distclean-tags distcleancheck distdir distuninstallcheck dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-exec install-exec-am \
- install-info install-info-am install-man install-pkgconfigDATA \
- install-strip installcheck installcheck-am installdirs \
- installdirs-am maintainer-clean maintainer-clean-generic \
- maintainer-clean-recursive mostlyclean mostlyclean-generic \
- mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
- tags tags-recursive uninstall uninstall-am uninstall-info-am \
- uninstall-pkgconfigDATA
-
-
-$(pkgconfig_DATA): config.status
-
-dist-hook:
- find $(distdir) -name .svn | xargs rm -rf
-
-DISTRIB_CODENAME ?= ${REL_CODENAME}
-
-showcodename:
- echo "Codename: ${DISTRIB_CODENAME}"
-
-deb-base: dist
- rm -rf silgraphite2.0*
- mkdir -p ${SVNDEBPACKAGE}
- cp ${PACKAGE}-${VERSION}.tar.gz $(SVNDEBPACKAGE)
- tar cfz $(SVNORIGTAR) $(SVNDEBPACKAGE)
- cp -a ${top_srcdir}/debian $(SVNDEBPACKAGE)
- cd ${SVNDEBPACKAGE} && find . -name .svn | xargs rm -rf
-
-# make deb builds an interim deb from svn source for release
-deb: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${SVNWITH_EPOCH} -m -c${SVNDEBPACKAGE}/debian/changelog
- cd ${SVNDEBPACKAGE} && pdebuild
-
-# make deb-binary-only builds a binary only deb from svn source
-deb-binary-only: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${SVNWITH_EPOCH} -m -c${SVNDEBPACKAGE}/debian/changelog "This is build direct from svn"
- cd ${SVNDEBPACKAGE} && pdebuild --debbuildopts -i --debbuildopts -b
-
-# make deb-release builds a deb for a released version number
-deb-release: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${WITH_EPOCH} -c${DEBPACKAGE}/debian/changelog
- cd ${DEBPACKAGE} && pdebuild
-
-# make deb-local uses debuild to build a deb for local use only
-deb-local: deb-base
- dch -D ${DISTRIB_CODENAME} -v ${SVNWITH_EPOCH} -m -c${SVNDEBPACKAGE}/debian/changelog "This is a debuild direct from svn"
- cd ${SVNDEBPACKAGE} && debuild -us -uc
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Build/source/libs/graphite-engine/README b/Build/source/libs/graphite-engine/README
deleted file mode 100644
index 41c9cc02b5e..00000000000
--- a/Build/source/libs/graphite-engine/README
+++ /dev/null
@@ -1,32 +0,0 @@
- GRAPHITE ENGINE
-
-The Graphite smart-font engine is the bit that takes a Unicode string, font
-formatting information (features, size, etc.) and a font and returns a set
-of positioned glyphs. Graphite also does more than this, in that it can
-handle cursor tracking and interaction with the application for string
-selection, etc.
-
-In order to interact with the application or system, Graphite is embedded in
-an application. You may want to write a custom font and render backend or use one
-of the provided backends in the wrappers project.
-
-The *nix build system uses autoconf and automake including all the
-conventions of those tools. This includes extended support for debug,
-maintenance mode, etc. See the GNU autotools info pages for the appropriate
-tools for help.
-
-If you have checked this source out of the Graphite Subversion repository or
-a similar version control system you will need to generate the autotools
-scripts and files (configure, Makefile.in etc) to do this run:
-
- autoreconf --install
-
-Please see INSTALL for information on building
-
-NOTE:
-If you modify any configure.in or Makefile.am file you will need rerun
-autoreconf like so:
-
- autoreconf
-
-For those changes to affect the configure script and makefiles.
diff --git a/Build/source/libs/graphite-engine/TODO b/Build/source/libs/graphite-engine/TODO
deleted file mode 100644
index 146eff85d26..00000000000
--- a/Build/source/libs/graphite-engine/TODO
+++ /dev/null
@@ -1,4 +0,0 @@
-
-Unprioritised
-
- * NFD/NFC Pre-processing
diff --git a/Build/source/libs/graphite-engine/aclocal.m4 b/Build/source/libs/graphite-engine/aclocal.m4
deleted file mode 100644
index 039674bb36f..00000000000
--- a/Build/source/libs/graphite-engine/aclocal.m4
+++ /dev/null
@@ -1,7533 +0,0 @@
-# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_AUTOCONF_VERSION],
- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(AC_AUTOCONF_VERSION, [2.61a],,
-[m4_warning([this file was generated for autoconf 2.61a.
-You have another version of autoconf. It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
-
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-
-# serial 52 AC_PROG_LIBTOOL
-
-
-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-# -----------------------------------------------------------
-# If this macro is not defined by Autoconf, define it here.
-m4_ifdef([AC_PROVIDE_IFELSE],
- [],
- [m4_define([AC_PROVIDE_IFELSE],
- [m4_ifdef([AC_PROVIDE_$1],
- [$2], [$3])])])
-
-
-# AC_PROG_LIBTOOL
-# ---------------
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
- AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [AC_LIBTOOL_CXX],
- [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
- ])])
-dnl And a similar setup for Fortran 77 support
- AC_PROVIDE_IFELSE([AC_PROG_F77],
- [AC_LIBTOOL_F77],
- [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
- AC_PROVIDE_IFELSE([AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [ifdef([AC_PROG_GCJ],
- [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([A][M_PROG_GCJ],
- [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([LT_AC_PROG_GCJ],
- [define([LT_AC_PROG_GCJ],
- defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-])])# AC_PROG_LIBTOOL
-
-
-# _AC_PROG_LIBTOOL
-# ----------------
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Prevent multiple expansion
-define([AC_PROG_LIBTOOL], [])
-])# _AC_PROG_LIBTOOL
-
-
-# AC_LIBTOOL_SETUP
-# ----------------
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-
-AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-AC_REQUIRE([AC_OBJEXT])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-dnl
-AC_LIBTOOL_SYS_MAX_CMD_LEN
-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-AC_LIBTOOL_OBJDIR
-
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
-
-# Same as above, but do not quote variable references.
-[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-AC_CHECK_TOOL(AR, ar, false)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- AC_PATH_MAGIC
- fi
- ;;
-esac
-
-_LT_REQUIRED_DARWIN_CHECKS
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-AC_ARG_WITH([pic],
- [AC_HELP_STRING([--with-pic],
- [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
- [pic_mode="$withval"],
- [pic_mode=default])
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-AC_LIBTOOL_LANG_C_CONFIG
-_LT_AC_TAGCONFIG
-])# AC_LIBTOOL_SETUP
-
-
-# _LT_AC_SYS_COMPILER
-# -------------------
-AC_DEFUN([_LT_AC_SYS_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_AC_SYS_COMPILER
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-AC_DEFUN([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
- case $cc_temp in
- compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
- distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# --------------------------
-# Check for some things on darwin
-AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
- case $host_os in
- rhapsody* | darwin*)
- AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
- AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-
- AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
- [lt_cv_apple_cc_single_mod=no
- if test -z "${LT_MULTI_MODULE}"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- echo "int foo(void){return 1;}" > conftest.c
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib ${wl}-single_module conftest.c
- if test -f libconftest.dylib; then
- lt_cv_apple_cc_single_mod=yes
- rm -rf libconftest.dylib*
- fi
- rm conftest.c
- fi])
- AC_CACHE_CHECK([for -exported_symbols_list linker flag],
- [lt_cv_ld_exported_symbols_list],
- [lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
- [lt_cv_ld_exported_symbols_list=yes],
- [lt_cv_ld_exported_symbols_list=no])
- LDFLAGS="$save_LDFLAGS"
- ])
- case $host_os in
- rhapsody* | darwin1.[[0123]])
- _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- darwin*)
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- 10.[[012]]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test "$lt_cv_apple_cc_single_mod" = "yes"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
- _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
- else
- _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
- fi
- if test "$DSYMUTIL" != ":"; then
- _lt_dsymutil="~$DSYMUTIL \$lib || :"
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-])
-
-# _LT_AC_SYS_LIBPATH_AIX
-# ----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_AC_SYS_LIBPATH_AIX
-
-
-# _LT_AC_SHELL_INIT(ARG)
-# ----------------------
-AC_DEFUN([_LT_AC_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
- [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
- [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_AC_SHELL_INIT
-
-
-# _LT_AC_PROG_ECHO_BACKSLASH
-# --------------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[_LT_AC_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
- ;;
-esac
-
-echo=${ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X[$]1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-[$]*
-EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string=`eval $cmd`) 2>/dev/null &&
- echo_test_string=`eval $cmd` &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
- then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
-else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
- else
- # Try using printf.
- echo='printf %s\n'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "[$]0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
- ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(ECHO)
-])])# _LT_AC_PROG_ECHO_BACKSLASH
-
-
-# _LT_AC_LOCK
-# -----------
-AC_DEFUN([_LT_AC_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_LANG_PUSH(C)
- AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
- AC_LANG_POP])
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-sparc*-*solaris*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
- ;;
- ])
-esac
-
-need_locks="$enable_libtool_lock"
-
-])# _LT_AC_LOCK
-
-
-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$3"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- fi
- $rm conftest*
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$5], , :, [$5])
-else
- ifelse([$6], , :, [$6])
-fi
-])# AC_LIBTOOL_COMPILER_OPTION
-
-
-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [ACTION-SUCCESS], [ACTION-FAILURE])
-# ------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $3"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&AS_MESSAGE_LOG_FD
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- else
- $2=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$4], , :, [$4])
-else
- ifelse([$5], , :, [$5])
-fi
-])# AC_LIBTOOL_LINKER_OPTION
-
-
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
- = "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
- AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
- AC_MSG_RESULT(none)
-fi
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# _LT_AC_CHECK_DLFCN
-# ------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)dnl
-])# _LT_AC_CHECK_DLFCN
-
-
-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ---------------------------------------------------------------------
-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
- [$4]
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}]
-EOF
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) $1 ;;
- x$lt_dlneed_uscore) $2 ;;
- x$lt_dlunknown|x*) $3 ;;
- esac
- else :
- # compilation failed
- $3
- fi
-fi
-rm -fr conftest*
-])# _LT_AC_TRY_DLOPEN_SELF
-
-
-# AC_LIBTOOL_DLOPEN_SELF
-# ----------------------
-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ])
- ;;
-
- *)
- AC_CHECK_FUNC([shl_load],
- [lt_cv_dlopen="shl_load"],
- [AC_CHECK_LIB([dld], [shl_load],
- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
- [AC_CHECK_FUNC([dlopen],
- [lt_cv_dlopen="dlopen"],
- [AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
- [AC_CHECK_LIB([svld], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
- [AC_CHECK_LIB([dld], [dld_link],
- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
- ])
- ])
- ])
- ])
- ])
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- AC_CACHE_CHECK([whether a program can dlopen itself],
- lt_cv_dlopen_self, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
- lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
- ])
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
- lt_cv_dlopen_self_static, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
- lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
- ])
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-])# AC_LIBTOOL_DLOPEN_SELF
-
-
-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-# ---------------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler
-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
- fi
- fi
- chmod u+w . 2>&AS_MESSAGE_LOG_FD
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-])
-])# AC_LIBTOOL_PROG_CC_C_O
-
-
-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-# -----------------------------------------
-# Check to see if we can do hard links to lock some files if needed
-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-[AC_REQUIRE([_LT_AC_LOCK])dnl
-
-hard_links="nottested"
-if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- AC_MSG_CHECKING([if we can lock with hard links])
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- AC_MSG_RESULT([$hard_links])
- if test "$hard_links" = no; then
- AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-
-
-# AC_LIBTOOL_OBJDIR
-# -----------------
-AC_DEFUN([AC_LIBTOOL_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-])# AC_LIBTOOL_OBJDIR
-
-
-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-# ----------------------------------------------
-# Check hardcoding attributes.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_AC_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
- test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
- test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
- test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
- # Linking always hardcodes the temporary library directory.
- _LT_AC_TAGVAR(hardcode_action, $1)=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- _LT_AC_TAGVAR(hardcode_action, $1)=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-
-
-# AC_LIBTOOL_SYS_LIB_STRIP
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-[striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
-fi
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
- esac
-fi
-])# AC_LIBTOOL_SYS_LIB_STRIP
-
-
-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-m4_if($1,[],[
-if test "$GCC" = yes; then
- case $host_os in
- darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
- *) lt_awk_arg="/^libraries:/" ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
- else
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary.
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path/$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
- else
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
- lt_foo="";
- lt_count=0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo="/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[[lt_foo]]++; }
- if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
- sys_lib_search_path_spec=`echo $lt_search_path_spec`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[[4-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[[01]] | aix4.[[01]].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[[45]]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
- m4_if([$1], [],[
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[[123]]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[[01]]* | freebsdelf3.[[01]]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
- freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[[3-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[[89]] | openbsd2.[[89]].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec],
-[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"])
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec],
-[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"])
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-
-
-# _LT_AC_TAGCONFIG
-# ----------------
-AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_ARG_WITH([tags],
- [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
- [include additional configurations @<:@automatic@:>@])],
- [tagnames="$withval"])
-
-if test -f "$ltmain" && test -n "$tagnames"; then
- if test ! -f "${ofile}"; then
- AC_MSG_WARN([output file `$ofile' does not exist])
- fi
-
- if test -z "$LTCC"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
- if test -z "$LTCC"; then
- AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
- else
- AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
- fi
- fi
- if test -z "$LTCFLAGS"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
- fi
-
- # Extract list of available tagged configurations in $ofile.
- # Note that this assumes the entire list is on one line.
- available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for tagname in $tagnames; do
- IFS="$lt_save_ifs"
- # Check whether tagname contains only valid characters
- case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
- "") ;;
- *) AC_MSG_ERROR([invalid tag name: $tagname])
- ;;
- esac
-
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
- then
- AC_MSG_ERROR([tag name \"$tagname\" already exists])
- fi
-
- # Update the list of available tags.
- if test -n "$tagname"; then
- echo appending configuration tag \"$tagname\" to $ofile
-
- case $tagname in
- CXX)
- if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_LIBTOOL_LANG_CXX_CONFIG
- else
- tagname=""
- fi
- ;;
-
- F77)
- if test -n "$F77" && test "X$F77" != "Xno"; then
- AC_LIBTOOL_LANG_F77_CONFIG
- else
- tagname=""
- fi
- ;;
-
- GCJ)
- if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
- AC_LIBTOOL_LANG_GCJ_CONFIG
- else
- tagname=""
- fi
- ;;
-
- RC)
- AC_LIBTOOL_LANG_RC_CONFIG
- ;;
-
- *)
- AC_MSG_ERROR([Unsupported tag name: $tagname])
- ;;
- esac
-
- # Append the new tag name to the list of available tags.
- if test -n "$tagname" ; then
- available_tags="$available_tags $tagname"
- fi
- fi
- done
- IFS="$lt_save_ifs"
-
- # Now substitute the updated list of available tags.
- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
- mv "${ofile}T" "$ofile"
- chmod +x "$ofile"
- else
- rm -f "${ofile}T"
- AC_MSG_ERROR([unable to update list of available tagged configurations.])
- fi
-fi
-])# _LT_AC_TAGCONFIG
-
-
-# AC_LIBTOOL_DLOPEN
-# -----------------
-# enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN],
- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_DLOPEN
-
-
-# AC_LIBTOOL_WIN32_DLL
-# --------------------
-# declare package support for building win32 DLLs
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_WIN32_DLL
-
-
-# AC_ENABLE_SHARED([DEFAULT])
-# ---------------------------
-# implement the --enable-shared flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([shared],
- [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
- [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
-])# AC_ENABLE_SHARED
-
-
-# AC_DISABLE_SHARED
-# -----------------
-# set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)
-])# AC_DISABLE_SHARED
-
-
-# AC_ENABLE_STATIC([DEFAULT])
-# ---------------------------
-# implement the --enable-static flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([static],
- [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
- [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_static=]AC_ENABLE_STATIC_DEFAULT)
-])# AC_ENABLE_STATIC
-
-
-# AC_DISABLE_STATIC
-# -----------------
-# set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)
-])# AC_DISABLE_STATIC
-
-
-# AC_ENABLE_FAST_INSTALL([DEFAULT])
-# ---------------------------------
-# implement the --enable-fast-install flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([fast-install],
- [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
- [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-])# AC_ENABLE_FAST_INSTALL
-
-
-# AC_DISABLE_FAST_INSTALL
-# -----------------------
-# set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)
-])# AC_DISABLE_FAST_INSTALL
-
-
-# AC_LIBTOOL_PICMODE([MODE])
-# --------------------------
-# implement the --with-pic flag
-# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)
-])# AC_LIBTOOL_PICMODE
-
-
-# AC_PROG_EGREP
-# -------------
-# This is predefined starting with Autoconf 2.54, so this conditional
-# definition can be removed once we require Autoconf 2.54 or later.
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
- [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])])
-
-
-# AC_PATH_TOOL_PREFIX
-# -------------------
-# find a file program which can recognize shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] | ?:[\\/]*])
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word. This closes a longstanding sh security hole.
- ac_dummy="ifelse([$2], , $PATH, [$2])"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$1; then
- lt_cv_path_MAGIC_CMD="$ac_dir/$1"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- AC_MSG_RESULT($MAGIC_CMD)
-else
- AC_MSG_RESULT(no)
-fi
-])# AC_PATH_TOOL_PREFIX
-
-
-# AC_PATH_MAGIC
-# -------------
-# find a file program which can recognize a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
- else
- MAGIC_CMD=:
- fi
-fi
-])# AC_PATH_MAGIC
-
-
-# AC_PROG_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
- [AC_HELP_STRING([--with-gnu-ld],
- [assume the C compiler uses GNU ld @<:@default=no@:>@])],
- [test "$withval" = no || with_gnu_ld=yes],
- [with_gnu_ld=no])
-AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by $CC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]]* | ?:[[\\/]]*)
- re_direlt='/[[^/]][[^/]]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
-])# AC_PROG_LD
-
-
-# AC_PROG_LD_GNU
-# --------------
-AC_DEFUN([AC_PROG_LD_GNU],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# AC_PROG_LD_GNU
-
-
-# AC_PROG_LD_RELOAD_FLAG
-# ----------------------
-# find reload flag for linker
-# -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[AC_CACHE_CHECK([for $LD option to reload object files],
- lt_cv_ld_reload_flag,
- [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-])# AC_PROG_LD_RELOAD_FLAG
-
-
-# AC_DEPLIBS_CHECK_METHOD
-# -----------------------
-# how to check for library dependencies
-# -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[[45]]*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[[3-9]]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-nto-qnx*)
- lt_cv_deplibs_check_method=unknown
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-])# AC_DEPLIBS_CHECK_METHOD
-
-
-# AC_PROG_NM
-# ----------
-# find the pathname to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
-[if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
- done
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi])
-NM="$lt_cv_path_NM"
-])# AC_PROG_NM
-
-
-# AC_CHECK_LIBM
-# -------------
-# check for math library
-AC_DEFUN([AC_CHECK_LIBM],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
- # These system don't have libm, or don't need it
- ;;
-*-ncr-sysv4.3*)
- AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
- ;;
-*)
- AC_CHECK_LIB(m, cos, LIBM="-lm")
- ;;
-esac
-])# AC_CHECK_LIBM
-
-
-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl convenience library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-convenience to the configure arguments. Note that
-# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
-# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
-# (note the single quotes!). If your package is not flat and you're not
-# using automake, define top_builddir and top_srcdir appropriately in
-# the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- case $enable_ltdl_convenience in
- no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
- "") enable_ltdl_convenience=yes
- ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
- esac
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_CONVENIENCE
-
-
-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl installable library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-install to the configure arguments. Note that
-# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-# and an installed libltdl is not found, it is assumed to be `libltdl'.
-# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
-# '${top_srcdir}/' (note the single quotes!). If your package is not
-# flat and you're not using automake, define top_builddir and top_srcdir
-# appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_CHECK_LIB(ltdl, lt_dlinit,
- [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
- [if test x"$enable_ltdl_install" = xno; then
- AC_MSG_WARN([libltdl not installed, but installation disabled])
- else
- enable_ltdl_install=yes
- fi
- ])
- if test x"$enable_ltdl_install" = x"yes"; then
- ac_configure_args="$ac_configure_args --enable-ltdl-install"
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- else
- ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
- LIBLTDL="-lltdl"
- LTDLINCL=
- fi
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_INSTALLABLE
-
-
-# AC_LIBTOOL_CXX
-# --------------
-# enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX],
-[AC_REQUIRE([_LT_AC_LANG_CXX])
-])# AC_LIBTOOL_CXX
-
-
-# _LT_AC_LANG_CXX
-# ---------------
-AC_DEFUN([_LT_AC_LANG_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-])# _LT_AC_LANG_CXX
-
-# _LT_AC_PROG_CXXCPP
-# ------------------
-AC_DEFUN([_LT_AC_PROG_CXXCPP],
-[
-AC_REQUIRE([AC_PROG_CXX])
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_PROG_CXXCPP
-fi
-])# _LT_AC_PROG_CXXCPP
-
-# AC_LIBTOOL_F77
-# --------------
-# enable support for Fortran 77 libraries
-AC_DEFUN([AC_LIBTOOL_F77],
-[AC_REQUIRE([_LT_AC_LANG_F77])
-])# AC_LIBTOOL_F77
-
-
-# _LT_AC_LANG_F77
-# ---------------
-AC_DEFUN([_LT_AC_LANG_F77],
-[AC_REQUIRE([AC_PROG_F77])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-])# _LT_AC_LANG_F77
-
-
-# AC_LIBTOOL_GCJ
-# --------------
-# enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],
-[AC_REQUIRE([_LT_AC_LANG_GCJ])
-])# AC_LIBTOOL_GCJ
-
-
-# _LT_AC_LANG_GCJ
-# ---------------
-AC_DEFUN([_LT_AC_LANG_GCJ],
-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
- [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
- [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
- [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-])# _LT_AC_LANG_GCJ
-
-
-# AC_LIBTOOL_RC
-# -------------
-# enable support for Windows resource files
-AC_DEFUN([AC_LIBTOOL_RC],
-[AC_REQUIRE([LT_AC_PROG_RC])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-])# AC_LIBTOOL_RC
-
-
-# AC_LIBTOOL_LANG_C_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-[lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF
-
-# Report which library types will actually be built
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_C_CONFIG
-
-
-# AC_LIBTOOL_LANG_CXX_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-[AC_LANG_PUSH(C++)
-AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Dependencies to place before and after the object being linked:
-_LT_AC_TAGVAR(predep_objects, $1)=
-_LT_AC_TAGVAR(postdep_objects, $1)=
-_LT_AC_TAGVAR(predeps, $1)=
-_LT_AC_TAGVAR(postdeps, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_LD=$LD
-lt_save_GCC=$GCC
-GCC=$GXX
-lt_save_with_gnu_ld=$with_gnu_ld
-lt_save_path_LD=$lt_cv_path_LD
-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-else
- $as_unset lt_cv_prog_gnu_ld
-fi
-if test -n "${lt_cv_path_LDCXX+set}"; then
- lt_cv_path_LD=$lt_cv_path_LDCXX
-else
- $as_unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-else
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-fi
-
-if test "$GXX" = yes; then
- # Set up default GNU C++ configuration
-
- AC_PROG_LD
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used.
- if test "$with_gnu_ld" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
- grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- with_gnu_ld=no
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-else
- GXX=no
- with_gnu_ld=no
- wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-_LT_AC_TAGVAR(ld_shlibs, $1)=yes
-case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- case $ld_flag in
- *-brtl*)
- aix_use_runtimelinking=yes
- break
- ;;
- esac
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GXX" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- darwin* | rhapsody*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
- if test "$GXX" = yes ; then
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- case $cc_basename in
- ec++*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- freebsd[[12]]*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- freebsd-elf*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- ;;
- freebsd* | dragonfly*)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- ;;
- gnu*)
- ;;
- hpux9*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- hpux10*|hpux11*)
- if test $with_gnu_ld = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*) ;;
- *)
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
- esac
- fi
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- esac
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- if test $with_gnu_ld = no; then
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- interix[[3-9]]*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC*)
- # SGI C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
- fi
- fi
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
- esac
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- icpc*)
- # Intel C++
- with_gnu_ld=yes
- # version 8.0 and above of icpc choke on multiply defined symbols
- # if we add $predep_objects and $postdep_objects, however 7.1 and
- # earlier do not add the objects themselves.
- case `$CC -V 2>&1` in
- *"Version 7."*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- *) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
- # Compaq C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-
- # Not sure whether something based on
- # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
- # would be better.
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- m88k*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- fi
- # Workaround some broken pre-1.5 toolchains
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
- ;;
- openbsd2*)
- # C++ shared libraries are fairly broken
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd='echo'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- osf3*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- osf4* | osf5*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
- $rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- psos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- lcc*)
- # Lucid
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
- if $CC --version | grep -v '^2\.7' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- fi
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- ;;
- esac
- fi
- ;;
- esac
- ;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- # So that behaviour is only enabled if SCOABSPATH is set to a
- # non-empty value in the environment. Most likely only useful for
- # creating official distributions of packages.
- # This is a hack until libtool officially supports absolute path
- # names for shared libraries.
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- vxworks*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-esac
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$GXX"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_POSTDEP_PREDEP($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-with_gnu_ld=$lt_save_with_gnu_ld
-lt_cv_path_LDCXX=$lt_cv_path_LD
-lt_cv_path_LD=$lt_save_path_LD
-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-])# AC_LIBTOOL_LANG_CXX_CONFIG
-
-# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
-# ------------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library. It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-int a;
-void foo (void) { a = 0; }
-EOF
-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-EOF
-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
- subroutine foo
- implicit none
- integer*4 a
- a=0
- return
- end
-EOF
-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-public class foo {
- private int a;
- public void bar (void) {
- a = 0;
- }
-};
-EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- # The `*' in the case matches for architectures that use `case' in
- # $output_verbose_cmd can trigger glob expansion during the loop
- # eval without this substitution.
- output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-
- for p in `eval $output_verbose_link_cmd`; do
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" \
- || test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
- _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
- _LT_AC_TAGVAR(predep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
- fi
- else
- if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
- _LT_AC_TAGVAR(postdep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out a.exe
-else
- echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$rm -f confest.$objext
-
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_AC_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-# PORTME: override above test on systems where it is broken
-ifelse([$1],[CXX],
-[case $host_os in
-interix[[3-9]]*)
- # Interix 3.5 installs completely hosed .la files for C++, so rather than
- # hack all around it, let's just trust "g++" to DTRT.
- _LT_AC_TAGVAR(predep_objects,$1)=
- _LT_AC_TAGVAR(postdep_objects,$1)=
- _LT_AC_TAGVAR(postdeps,$1)=
- ;;
-
-linux*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- #
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
- if test "$solaris_use_stlport4" != yes; then
- _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
-solaris*)
- case $cc_basename in
- CC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- # Adding this requires a known-good setup of shared libraries for
- # Sun compiler versions before 5.6, else PIC objects from an old
- # archive will be linked into the output, leading to subtle bugs.
- if test "$solaris_use_stlport4" != yes; then
- _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-esac
-])
-case " $_LT_AC_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
-])# AC_LIBTOOL_POSTDEP_PREDEP
-
-# AC_LIBTOOL_LANG_F77_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-[AC_REQUIRE([AC_PROG_F77])
-AC_LANG_PUSH(Fortran 77)
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="\
- subroutine t
- return
- end
-"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="\
- program t
- end
-"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-_LT_AC_TAGVAR(GCC, $1)="$G77"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_F77_CONFIG
-
-
-# AC_LIBTOOL_LANG_GCJ_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_GCJ_CONFIG
-
-
-# AC_LIBTOOL_LANG_RC_CONFIG
-# -------------------------
-# Ensure that the configuration vars for the Windows resource compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_RC_CONFIG
-
-
-# AC_LIBTOOL_CONFIG([TAGNAME])
-# ----------------------------
-# If TAGNAME is not passed, then create an initial libtool script
-# with a default configuration from the untagged config vars. Otherwise
-# add code to config.status for appending the configuration named by
-# TAGNAME from the matching tagged config vars.
-AC_DEFUN([AC_LIBTOOL_CONFIG],
-[# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- _LT_AC_TAGVAR(compiler, $1) \
- _LT_AC_TAGVAR(CC, $1) \
- _LT_AC_TAGVAR(LD, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
- _LT_AC_TAGVAR(old_archive_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
- _LT_AC_TAGVAR(predep_objects, $1) \
- _LT_AC_TAGVAR(postdep_objects, $1) \
- _LT_AC_TAGVAR(predeps, $1) \
- _LT_AC_TAGVAR(postdeps, $1) \
- _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
- _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \
- _LT_AC_TAGVAR(archive_cmds, $1) \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
- _LT_AC_TAGVAR(postinstall_cmds, $1) \
- _LT_AC_TAGVAR(postuninstall_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
- _LT_AC_TAGVAR(allow_undefined_flag, $1) \
- _LT_AC_TAGVAR(no_undefined_flag, $1) \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
- _LT_AC_TAGVAR(hardcode_automatic, $1) \
- _LT_AC_TAGVAR(module_cmds, $1) \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) \
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
- _LT_AC_TAGVAR(fix_srcfile_path, $1) \
- _LT_AC_TAGVAR(exclude_expsyms, $1) \
- _LT_AC_TAGVAR(include_expsyms, $1); do
-
- case $var in
- _LT_AC_TAGVAR(old_archive_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
- _LT_AC_TAGVAR(archive_cmds, $1) | \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(module_cmds, $1) | \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\[$]0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
- ;;
- esac
-
-ifelse([$1], [],
- [cfgfile="${ofile}T"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- $rm -f "$cfgfile"
- AC_MSG_NOTICE([creating $ofile])],
- [cfgfile="$ofile"])
-
- cat <<__EOF__ >> "$cfgfile"
-ifelse([$1], [],
-[#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e 1s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG],
-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-
-# Is the compiler the GNU C compiler?
-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-
-# Symbols that must always be exported.
-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-
-ifelse([$1],[],
-[# ### END LIBTOOL CONFIG],
-[# ### END LIBTOOL TAG CONFIG: $tagname])
-
-__EOF__
-
-ifelse([$1],[], [
- case $host_os in
- aix3*)
- cat <<\EOF >> "$cfgfile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" || \
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-])
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-])# AC_LIBTOOL_CONFIG
-
-
-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-
-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
- AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
- lt_cv_prog_compiler_rtti_exceptions,
- [-fno-rtti -fno-exceptions], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-
-
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([LT_AC_PROG_SED])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[[BCDT]]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[[ABCDGISTW]]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDEGRST]]'
- fi
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- ;;
-linux* | k*bsd*-gnu)
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDGIRSTW]]'
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- fi
- ;;
-irix* | nonstopux*)
- symcode='[[BCDEGRST]]'
- ;;
-osf*)
- symcode='[[BCDEGQRST]]'
- ;;
-solaris*)
- symcode='[[BDRT]]'
- ;;
-sco3.2v5*)
- symcode='[[DT]]'
- ;;
-sysv4.2uw2*)
- symcode='[[DT]]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[[ABDT]]'
- ;;
-sysv4)
- symcode='[[DFNSTU]]'
- ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- if AC_TRY_EVAL(ac_compile); then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if grep ' nm_test_var$' "$nlist" >/dev/null; then
- if grep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- AC_MSG_RESULT(failed)
-else
- AC_MSG_RESULT(ok)
-fi
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-
-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-# ---------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
- ifelse([$1],[CXX],[
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- mingw* | cygwin* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- case $host_os in
- aix[[4-9]]*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68*)
- # Green Hills C++ Compiler
- # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | dragonfly*)
- # FreeBSD uses GNU C++
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
- ;;
- aCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- ;;
- *)
- ;;
- esac
- ;;
- interix*)
- # This is c89, which is MS Visual C++ (no shared libs)
- # Anyone wants to do a port?
- ;;
- irix5* | irix6* | nonstopux*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- # CC pic flag -KPIC is the default.
- ;;
- *)
- ;;
- esac
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # KAI C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- icpc* | ecpc*)
- # Intel C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler.
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- cxx*)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- cxx*)
- # Digital/Compaq C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- lcc*)
- # Lucid
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- esac
- ;;
- vxworks*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-],
-[
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
-
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- hpux9* | hpux10* | hpux11*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC (with -KPIC) is the default.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- ccc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All Alpha code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=''
- ;;
- esac
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All OSF/1 code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- rdos*)
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
- esac
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- unicos*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
- _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
- [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
- [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
- "" | " "*) ;;
- *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
- esac],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
- ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
- _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
- $lt_tmp_static_flag,
- [],
- [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-])
-
-
-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-# ------------------------------------
-# See if the linker supports building shared libraries.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-ifelse([$1],[CXX],[
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- case $host_os in
- aix[[4-9]]*)
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- ;;
- pw32*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
- ;;
- cygwin* | mingw*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
- ;;
- *)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- esac
- _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-],[
- runpath_var=
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)=
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
- _LT_AC_TAGVAR(hardcode_automatic, $1)=no
- _LT_AC_TAGVAR(module_cmds, $1)=
- _LT_AC_TAGVAR(module_expsym_cmds, $1)=
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- _LT_AC_TAGVAR(include_expsyms, $1)=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- _LT_CC_BASENAME([$compiler])
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[[3-9]]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- interix[[3-9]]*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
-
- if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
- runpath_var=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- fi
- ;;
-
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- # see comment about different semantics on the GNU ld section
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- bsdi[[45]]*)
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
- # FIXME: Should let the user specify the lib program.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
- _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- ;;
-
- darwin* | rhapsody*)
- case $host_os in
- rhapsody* | darwin1.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- if test "$GCC" = yes ; then
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- freebsd1*)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- else
- case $host_os in
- openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- os2*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- ;;
- motorola)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4.3*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
- # Assume -lc should be added
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $_LT_AC_TAGVAR(archive_cmds, $1) in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- AC_MSG_CHECKING([whether -lc should be explicitly linked in])
- $rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
- pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
- then
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- else
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- fi
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
- ;;
- esac
- fi
- ;;
-esac
-])# AC_LIBTOOL_PROG_LD_SHLIBS
-
-
-# _LT_AC_FILE_LTDLL_C
-# -------------------
-# Be careful that the start marker always follows a newline.
-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
-])# _LT_AC_FILE_LTDLL_C
-
-
-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-# ---------------------------------
-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-
-
-# old names
-AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
-
-# This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
- AC_SUBST(GCJFLAGS)
-])
-
-AC_DEFUN([LT_AC_PROG_RC],
-[AC_CHECK_TOOL(RC, windres, no)
-])
-
-
-# Cheap backport of AS_EXECUTABLE_P and required macros
-# from Autoconf 2.59; we should not use $as_executable_p directly.
-
-# _AS_TEST_PREPARE
-# ----------------
-m4_ifndef([_AS_TEST_PREPARE],
-[m4_defun([_AS_TEST_PREPARE],
-[if test -x / >/dev/null 2>&1; then
- as_executable_p='test -x'
-else
- as_executable_p='test -f'
-fi
-])])# _AS_TEST_PREPARE
-
-# AS_EXECUTABLE_P
-# ---------------
-# Check whether a file is executable.
-m4_ifndef([AS_EXECUTABLE_P],
-[m4_defun([AS_EXECUTABLE_P],
-[AS_REQUIRE([_AS_TEST_PREPARE])dnl
-$as_executable_p $1[]dnl
-])])# AS_EXECUTABLE_P
-
-# NOTE: This macro has been submitted for inclusion into #
-# GNU Autoconf as AC_PROG_SED. When it is available in #
-# a released version of Autoconf we should remove this #
-# macro and use it instead. #
-# LT_AC_PROG_SED
-# --------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible. Prefer GNU sed if found.
-AC_DEFUN([LT_AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for lt_ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then
- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
- fi
- done
- done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
- cat /dev/null > conftest.in
- lt_ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
- # Check for GNU sed and select it if it is found.
- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
- lt_cv_path_SED=$lt_ac_sed
- break
- fi
- while true; do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo >>conftest.nl
- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
- cmp -s conftest.out conftest.nl || break
- # 10000 chars as input seems more than enough
- test $lt_ac_count -gt 10 && break
- lt_ac_count=`expr $lt_ac_count + 1`
- if test $lt_ac_count -gt $lt_ac_max; then
- lt_ac_max=$lt_ac_count
- lt_cv_path_SED=$lt_ac_sed
- fi
- done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.10'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.10.1], [],
- [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too. Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.10.1])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
-
-# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory. The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run. This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-# fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-# fails if $ac_aux_dir is absolute,
-# fails when called from a subdirectory in a VPATH build with
-# a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir. In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
-# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-# MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH. The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-if $2; then
- $1_TRUE=
- $1_FALSE='#'
-else
- $1_TRUE='#'
- $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
- AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 9
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery. Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
- [$1], CXX, [depcc="$CXX" am_compiler_list=],
- [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
- [$1], UPC, [depcc="$UPC" am_compiler_list=],
- [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
- [depcc="$$1" am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
- [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_$1_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_$1_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[ --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-])
-
-# Generate code to set up dependency tracking. -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 3
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; do
- # Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # Grep'ing the whole file is not good either: AIX grep has a line
- # limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
- dirpart=`AS_DIRNAME("$mf")`
- else
- continue
- fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running `make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`AS_DIRNAME(["$file"])`
- AS_MKDIR_P([$dirpart/$fdir])
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
-done
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled. FIXME. This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
- [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 13
-
-# This macro actually does too much. Some checks are only needed if
-# your package does certain things. But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out. PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition. After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.60])dnl
-dnl Autoconf wants to disallow AM_ names. We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
- # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
- # is not polluted with repeated "-I."
- AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
- # test to see if srcdir already configured
- if test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
- fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
- [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
- [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
- [_AM_DEPENDENCIES(CC)],
- [define([AC_PROG_CC],
- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [_AM_DEPENDENCIES(CXX)],
- [define([AC_PROG_CXX],
- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
- [_AM_DEPENDENCIES(OBJC)],
- [define([AC_PROG_OBJC],
- defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
-])
-])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated. The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $_am_arg | $_am_arg:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot. For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
-# From Jim Meyering
-
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-AC_DEFUN([AM_MAINTAINER_MODE],
-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
- dnl maintainer-mode is disabled by default
- AC_ARG_ENABLE(maintainer-mode,
-[ --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer],
- USE_MAINTAINER_MODE=$enableval,
- USE_MAINTAINER_MODE=no)
- AC_MSG_RESULT([$USE_MAINTAINER_MODE])
- AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
- MAINT=$MAINTAINER_MODE_TRUE
- AC_SUBST(MAINT)dnl
-]
-)
-
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-
-# Check to see how 'make' treats includes. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
- am__include=include
- am__quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- am__include=.include
- am__quote="\""
- _am_result=BSD
- fi
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
- [[\\/$]]* | ?:[[\\/]]*) ;;
- */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
-# Helper functions for option handling. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME. Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
- if test "$[*]" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftest.file`
- fi
- rm -f conftest.file
- if test "$[*]" != "X $srcdir/configure conftest.file" \
- && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "$[2]" = conftest.file
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries. This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
- AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# Check how to create a tarball. -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-# tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-# $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
- [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
- [m4_case([$1], [ustar],, [pax],,
- [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
- case $_am_tool in
- gnutar)
- for _am_tar in tar gnutar gtar;
- do
- AM_RUN_LOG([$_am_tar --version]) && break
- done
- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
- am__untar="$_am_tar -xf -"
- ;;
- plaintar)
- # Must skip GNU tar: if it does not support --format= it doesn't create
- # ustar tarball either.
- (tar --version) >/dev/null 2>&1 && continue
- am__tar='tar chf - "$$tardir"'
- am__tar_='tar chf - "$tardir"'
- am__untar='tar xf -'
- ;;
- pax)
- am__tar='pax -L -x $1 -w "$$tardir"'
- am__tar_='pax -L -x $1 -w "$tardir"'
- am__untar='pax -r'
- ;;
- cpio)
- am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
- am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
- am__untar='cpio -i -H $1 -d'
- ;;
- none)
- am__tar=false
- am__tar_=false
- am__untar=false
- ;;
- esac
-
- # If the value was cached, stop now. We just wanted to have am__tar
- # and am__untar set.
- test -n "${am_cv_prog_tar_$1}" && break
-
- # tar/untar a dummy directory, and stop if the command works
- rm -rf conftest.dir
- mkdir conftest.dir
- echo GrepMe > conftest.dir/file
- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
- rm -rf conftest.dir
- if test -s conftest.tar; then
- AM_RUN_LOG([$am__untar <conftest.tar])
- grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
- fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
diff --git a/Build/source/libs/graphite-engine/build.bat b/Build/source/libs/graphite-engine/build.bat
deleted file mode 100644
index 4c8f6d93999..00000000000
--- a/Build/source/libs/graphite-engine/build.bat
+++ /dev/null
@@ -1 +0,0 @@
-nmake -f makefile.vc %1 %2 %3 \ No newline at end of file
diff --git a/Build/source/libs/graphite-engine/build_d.bat b/Build/source/libs/graphite-engine/build_d.bat
deleted file mode 100644
index 1f10fb4a8f7..00000000000
--- a/Build/source/libs/graphite-engine/build_d.bat
+++ /dev/null
@@ -1 +0,0 @@
-nmake CFG=DEBUG -f makefile.vc %1 %2 %3 \ No newline at end of file
diff --git a/Build/source/libs/graphite-engine/config/depcomp b/Build/source/libs/graphite-engine/config/depcomp
deleted file mode 100755
index 04701da536f..00000000000
--- a/Build/source/libs/graphite-engine/config/depcomp
+++ /dev/null
@@ -1,530 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2005-07-09.11
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
-
-case $1 in
- '')
- echo "$0: No command. Try \`$0 --help' for more information." 1>&2
- exit 1;
- ;;
- -h | --h*)
- cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
- depmode Dependency tracking mode.
- source Source file read by `PROGRAMS ARGS'.
- object Object file output by `PROGRAMS ARGS'.
- DEPDIR directory where to store dependencies.
- depfile Dependency file to output.
- tmpdepfile Temporary file to use when outputing dependencies.
- libtool Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
- exit $?
- ;;
- -v | --v*)
- echo "depcomp $scriptversion"
- exit $?
- ;;
-esac
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
- echo "depcomp: Variables source, object and depmode must be set" 1>&2
- exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
- sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags. We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write. Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
- # HP compiler uses -M and no extra arg.
- gccflag=-M
- depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
- # This is just like dashmstdout with a different argument.
- dashmflag=-xM
- depmode=dashmstdout
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want. Yay! Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff. Hmm.
- "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- mv "$tmpdepfile" "$depfile"
- ;;
-
-gcc)
-## There are various ways to get dependency output from gcc. Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-## up in a subdir. Having to rename by hand is ugly.
-## (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-## -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-## than renaming).
- if test -z "$gccflag"; then
- gccflag=-MD,
- fi
- "$@" -Wp,"$gccflag$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
- sed -e 's/^[^:]*: / /' \
- -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header). We avoid this by adding
-## dummy dependencies for each header file. Too bad gcc doesn't do
-## this for us directly.
- tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'. On the theory
-## that the space means something, we add a space to the output as
-## well.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-hp)
- # This case exists only to let depend.m4 do its work. It works by
- # looking at the text of this script. This case will never be run,
- # since it is checked for above.
- exit 1
- ;;
-
-sgi)
- if test "$libtool" = yes; then
- "$@" "-Wp,-MDupdate,$tmpdepfile"
- else
- "$@" -MDupdate "$tmpdepfile"
- fi
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
-
- if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
- echo "$object : \\" > "$depfile"
-
- # Clip off the initial element (the dependent). Don't try to be
- # clever and replace this with sed code, as IRIX sed won't handle
- # lines with more than a fixed number of characters (4096 in
- # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
- # the IRIX cc adds comments like `#:fec' to the end of the
- # dependency line.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
- tr '
-' ' ' >> $depfile
- echo >> $depfile
-
- # The second pass generates a dummy entry for each header file.
- tr ' ' '
-' < "$tmpdepfile" \
- | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
- >> $depfile
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-aix)
- # The C for AIX Compiler uses -M and outputs the dependencies
- # in a .u file. In older versions, this file always lives in the
- # current directory. Also, the AIX compiler puts `$object:' at the
- # start of each line; $object doesn't have directory information.
- # Version 6 uses the directory in both cases.
- stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
- tmpdepfile="$stripped.u"
- if test "$libtool" = yes; then
- "$@" -Wc,-M
- else
- "$@" -M
- fi
- stat=$?
-
- if test -f "$tmpdepfile"; then :
- else
- stripped=`echo "$stripped" | sed 's,^.*/,,'`
- tmpdepfile="$stripped.u"
- fi
-
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
-
- if test -f "$tmpdepfile"; then
- outname="$stripped.o"
- # Each line is of the form `foo.o: dependent.h'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
- sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
- else
- # The sourcefile does not contain any dependencies, so just
- # store a dummy comment line, to avoid errors with the Makefile
- # "include basename.Plo" scheme.
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-icc)
- # Intel's C compiler understands `-MD -MF file'. However on
- # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
- # ICC 7.0 will fill foo.d with something like
- # foo.o: sub/foo.c
- # foo.o: sub/foo.h
- # which is wrong. We want:
- # sub/foo.o: sub/foo.c
- # sub/foo.o: sub/foo.h
- # sub/foo.c:
- # sub/foo.h:
- # ICC 7.1 will output
- # foo.o: sub/foo.c sub/foo.h
- # and will wrap long lines using \ :
- # foo.o: sub/foo.c ... \
- # sub/foo.h ... \
- # ...
-
- "$@" -MD -MF "$tmpdepfile"
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile"
- exit $stat
- fi
- rm -f "$depfile"
- # Each line is of the form `foo.o: dependent.h',
- # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
- # Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
- # Some versions of the HPUX 10.20 sed can't process this invocation
- # correctly. Breaking it into two sed invocations is a workaround.
- sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
- sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-tru64)
- # The Tru64 compiler uses -MD to generate dependencies as a side
- # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
- # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
- # dependencies in `foo.d' instead, so we check for that too.
- # Subdirectories are respected.
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
- if test "$libtool" = yes; then
- # With Tru64 cc, shared objects can also be used to make a
- # static library. This mecanism is used in libtool 1.4 series to
- # handle both shared and static libraries in a single compilation.
- # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
- #
- # With libtool 1.5 this exception was removed, and libtool now
- # generates 2 separate objects for the 2 libraries. These two
- # compilations output dependencies in in $dir.libs/$base.o.d and
- # in $dir$base.o.d. We have to check for both files, because
- # one of the two compilations can be disabled. We should prefer
- # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
- # automatically cleaned when .libs/ is deleted, while ignoring
- # the former would cause a distcleancheck panic.
- tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
- tmpdepfile2=$dir$base.o.d # libtool 1.5
- tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
- tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
- "$@" -Wc,-MD
- else
- tmpdepfile1=$dir$base.o.d
- tmpdepfile2=$dir$base.d
- tmpdepfile3=$dir$base.d
- tmpdepfile4=$dir$base.d
- "$@" -MD
- fi
-
- stat=$?
- if test $stat -eq 0; then :
- else
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- exit $stat
- fi
-
- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
- do
- test -f "$tmpdepfile" && break
- done
- if test -f "$tmpdepfile"; then
- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
- else
- echo "#dummy" > "$depfile"
- fi
- rm -f "$tmpdepfile"
- ;;
-
-#nosideeffect)
- # This comment above is used by automake to tell side-effect
- # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout, regardless of -o.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- test -z "$dashmflag" && dashmflag=-M
- # Require at least two characters before searching for `:'
- # in the target name. This is to cope with DOS-style filenames:
- # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
- "$@" $dashmflag |
- sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-dashXmstdout)
- # This case only exists to satisfy depend.m4. It is never actually
- # run, as this mode is specially recognized in the preamble.
- exit 1
- ;;
-
-makedepend)
- "$@" || exit $?
- # Remove any Libtool call
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
- # X makedepend
- shift
- cleared=no
- for arg in "$@"; do
- case $cleared in
- no)
- set ""; shift
- cleared=yes ;;
- esac
- case "$arg" in
- -D*|-I*)
- set fnord "$@" "$arg"; shift ;;
- # Strip any option that makedepend may not understand. Remove
- # the object too, otherwise makedepend will parse it as a source file.
- -*|$object)
- ;;
- *)
- set fnord "$@" "$arg"; shift ;;
- esac
- done
- obj_suffix="`echo $object | sed 's/^.*\././'`"
- touch "$tmpdepfile"
- ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
- rm -f "$depfile"
- cat < "$tmpdepfile" > "$depfile"
- sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly. Breaking it into two sed invocations is a workaround.
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile" "$tmpdepfile".bak
- ;;
-
-cpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout.
- "$@" || exit $?
-
- # Remove the call to Libtool.
- if test "$libtool" = yes; then
- while test $1 != '--mode=compile'; do
- shift
- done
- shift
- fi
-
- # Remove `-o $object'.
- IFS=" "
- for arg
- do
- case $arg in
- -o)
- shift
- ;;
- $object)
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift # fnord
- shift # $arg
- ;;
- esac
- done
-
- "$@" -E |
- sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
- -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
- sed '$ s: \\$::' > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- cat < "$tmpdepfile" >> "$depfile"
- sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-msvisualcpp)
- # Important note: in order to support this mode, a compiler *must*
- # always write the preprocessed file to stdout, regardless of -o,
- # because we must use -o when running libtool.
- "$@" || exit $?
- IFS=" "
- for arg
- do
- case "$arg" in
- "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
- set fnord "$@"
- shift
- shift
- ;;
- *)
- set fnord "$@" "$arg"
- shift
- shift
- ;;
- esac
- done
- "$@" -E |
- sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
- rm -f "$depfile"
- echo "$object : \\" > "$depfile"
- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
- echo " " >> "$depfile"
- . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
- rm -f "$tmpdepfile"
- ;;
-
-none)
- exec "$@"
- ;;
-
-*)
- echo "Unknown depmode $depmode" 1>&2
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/Build/source/libs/graphite-engine/config/install-sh b/Build/source/libs/graphite-engine/config/install-sh
deleted file mode 100755
index a5897de6ea7..00000000000
--- a/Build/source/libs/graphite-engine/config/install-sh
+++ /dev/null
@@ -1,519 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2006-12-25.00
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# 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
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" "" $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
- doit_exec=exec
-else
- doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
- test "$posix_glob" != "?" || {
- if (set -f) 2>/dev/null; then
- posix_glob=
- else
- posix_glob=:
- fi
- }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve the last data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -s $stripprog installed files.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -t) dst_arg=$2
- shift;;
-
- -T) no_target_directory=true;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- trap '(exit $?); exit' 1 2 13 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- # Prefer dirname, but fall back on a substitute if dirname fails.
- dstdir=`
- (dirname "$dst") 2>/dev/null ||
- expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$dst" : 'X\(//\)[^/]' \| \
- X"$dst" : 'X\(//\)$' \| \
- X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
- echo X"$dst" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'
- `
-
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/d" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
- fi
- trap '' 0;;
- esac;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # The umask is ridiculous, or mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- -*) prefix='./';;
- *) prefix='';;
- esac
-
- eval "$initialize_posix_glob"
-
- oIFS=$IFS
- IFS=/
- $posix_glob set -f
- set fnord $dstdir
- shift
- $posix_glob set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test -z "$d" && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
- eval "$initialize_posix_glob" &&
- $posix_glob set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- $posix_glob set +f &&
-
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/Build/source/libs/graphite-engine/config/missing b/Build/source/libs/graphite-engine/config/missing
deleted file mode 100755
index f359dae7a87..00000000000
--- a/Build/source/libs/graphite-engine/config/missing
+++ /dev/null
@@ -1,375 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2008-12-21.33
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# 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 3, 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, see <http://www.gnu.org/licenses/>.
-
-# 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.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
- configure_ac=configure.ac
-else
- configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case $1 in
---run)
- # Try to run requested program, and just exit if it succeeds.
- run=
- shift
- "$@" && exit 0
- # Exit code 63 means version mismatch. This often happens
- # when the user try to use an ancient version of a tool on
- # a file that requires a minimum version. In this case we
- # we should proceed has if the program had been absent, or
- # if --run hadn't been passed.
- if test $? = 63; then
- run=:
- msg="probably too old"
- fi
- ;;
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
- --run try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- autom4te touch the output file, or create a stub one
- automake touch all \`Makefile.in' files
- bison create \`y.tab.[ch]', if possible, from existing .[ch]
- flex create \`lex.yy.c', if possible, from existing .c
- help2man touch the output file
- lex create \`lex.yy.c', if possible, from existing .c
- makeinfo touch the output file
- tar try tar, gnutar, gtar, then tar without non-portable flags
- yacc create \`y.tab.[ch]', if possible, from existing .[ch]
-
-Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
-\`g' are ignored when checking the name.
-
-Send bug reports to <bug-automake@gnu.org>."
- exit $?
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing $scriptversion (GNU Automake)"
- exit $?
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
-esac
-
-# normalize program name to check for.
-program=`echo "$1" | sed '
- s/^gnu-//; t
- s/^gnu//; t
- s/^g//; t'`
-
-# Now exit if we have it, but it failed. Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program). This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
- lex*|yacc*)
- # Not GNU programs, they don't have --version.
- ;;
-
- tar*)
- if test -n "$run"; then
- echo 1>&2 "ERROR: \`tar' requires --run"
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- exit 1
- fi
- ;;
-
- *)
- if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
- # We have it, but it failed.
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- # Could not run --version or --help. This is probably someone
- # running `$TOOL --version' or `$TOOL --help' to check whether
- # $TOOL exists and not knowing $TOOL uses missing.
- exit 1
- fi
- ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
- aclocal*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acinclude.m4' or \`${configure_ac}'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`${configure_ac}'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acconfig.h' or \`${configure_ac}'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
- test -z "$files" && files="config.h"
- touch_files=
- for f in $files; do
- case $f in
- *:*) touch_files="$touch_files "`echo "$f" |
- sed -e 's/^[^:]*://' -e 's/:.*//'`;;
- *) touch_files="$touch_files $f.in";;
- esac
- done
- touch $touch_files
- ;;
-
- automake*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print |
- sed 's/\.am$/.in/' |
- while read f; do touch "$f"; done
- ;;
-
- autom4te*)
- echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
- You might have modified some files without having the
- proper tools for further handling them.
- You can get \`$1' as part of \`Autoconf' from any GNU
- archive site."
-
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -f "$file"; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo "#! /bin/sh"
- echo "# Created by GNU Automake missing as a replacement of"
- echo "# $ $@"
- echo "exit 0"
- chmod +x $file
- exit 1
- fi
- ;;
-
- bison*|yacc*)
- echo 1>&2 "\
-WARNING: \`$1' $msg. You should only need it if
- you modified a \`.y' file. You may need the \`Bison' package
- in order for those modifications to take effect. You can get
- \`Bison' from any GNU archive site."
- rm -f y.tab.c y.tab.h
- if test $# -ne 1; then
- eval LASTARG="\${$#}"
- case $LASTARG in
- *.y)
- SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" y.tab.c
- fi
- SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" y.tab.h
- fi
- ;;
- esac
- fi
- if test ! -f y.tab.h; then
- echo >y.tab.h
- fi
- if test ! -f y.tab.c; then
- echo 'main() { return 0; }' >y.tab.c
- fi
- ;;
-
- lex*|flex*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.l' file. You may need the \`Flex' package
- in order for those modifications to take effect. You can get
- \`Flex' from any GNU archive site."
- rm -f lex.yy.c
- if test $# -ne 1; then
- eval LASTARG="\${$#}"
- case $LASTARG in
- *.l)
- SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
- if test -f "$SRCFILE"; then
- cp "$SRCFILE" lex.yy.c
- fi
- ;;
- esac
- fi
- if test ! -f lex.yy.c; then
- echo 'main() { return 0; }' >lex.yy.c
- fi
- ;;
-
- help2man*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a dependency of a manual page. You may need the
- \`Help2man' package in order for those modifications to take
- effect. You can get \`Help2man' from any GNU archive site."
-
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -f "$file"; then
- touch $file
- else
- test -z "$file" || exec >$file
- echo ".ab help2man is required to generate this page"
- exit $?
- fi
- ;;
-
- makeinfo*)
- echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- # The file to touch is that specified with -o ...
- file=`echo "$*" | sed -n "$sed_output"`
- test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
- if test -z "$file"; then
- # ... or it is the one specified with @setfilename ...
- infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '
- /^@setfilename/{
- s/.* \([^ ]*\) *$/\1/
- p
- q
- }' $infile`
- # ... or it is derived from the source name (dir/f.texi becomes f.info)
- test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
- fi
- # If the file does not exist, the user really needs makeinfo;
- # let's fail without touching anything.
- test -f $file || exit 1
- touch $file
- ;;
-
- tar*)
- shift
-
- # We have already tried tar in the generic part.
- # Look for gnutar/gtar before invocation to avoid ugly error
- # messages.
- if (gnutar --version > /dev/null 2>&1); then
- gnutar "$@" && exit 0
- fi
- if (gtar --version > /dev/null 2>&1); then
- gtar "$@" && exit 0
- fi
- firstarg="$1"
- if shift; then
- case $firstarg in
- *o*)
- firstarg=`echo "$firstarg" | sed s/o//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- case $firstarg in
- *h*)
- firstarg=`echo "$firstarg" | sed s/h//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- fi
-
- echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
- You may want to install GNU tar or Free paxutils, or check the
- command line arguments."
- exit 1
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
- You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequisites for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/Build/source/libs/graphite-engine/configure.ac b/Build/source/libs/graphite-engine/configure.ac
deleted file mode 100644
index de30af569dc..00000000000
--- a/Build/source/libs/graphite-engine/configure.ac
+++ /dev/null
@@ -1,137 +0,0 @@
-AC_PREREQ(2.54)
-
-AC_INIT(silgraphite, 2.3, silgraphite-devel@lists.sourceforge.net)
-AC_CONFIG_SRCDIR(src/segment/GrEngine.cpp)
-AC_CONFIG_AUX_DIR(config)
-
-# setup automake
-AM_INIT_AUTOMAKE(foreign)
-AM_MAINTAINER_MODE
-
-# System checks.
-AC_CANONICAL_HOST
-AC_C_BIGENDIAN
-
-# Optional features
-AC_ARG_ENABLE(tracing,
- AC_HELP_STRING([--disable-tracing],
- [build without support for trace Graphite logs]))
- test "x$enable_tracing" != xno && enable_tracing=yes
-
-AC_ARG_ENABLE(debug,
- AC_HELP_STRING([--enable-debug],
- [build with debugging. (default=no)]))
-AC_ARG_ENABLE(final,
- AC_HELP_STRING([--disable-final],
- [build without optimizations and no debugging.]))
- test "x$enable_final" != xno && enable_final=yes
-AC_ARG_ENABLE(strict,
- AC_HELP_STRING([--enable-strict],
- [treat warnings as errors, check for as much as we can]))
-
-AC_ARG_ENABLE(profile,
- AC_HELP_STRING([--enable-profile],
- [allow profiling (default=no)]))
-AC_ARG_ENABLE(profilefn,
- AC_HELP_STRING([--enable-profilefn],
- [allow functioncheck profiling (default=no)]))
-
-# Checks for programs.
-AC_PROG_INSTALL
-AC_PROG_LIBTOOL
-AC_LANG_CPLUSPLUS
-
-AC_PATH_PROG(LSB_RELEASE, lsb_release, no)
-
-# Checks for libraries.
-
-# Checks for header files.
-AC_HEADER_STDC
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_TYPE_SIZE_T
-AC_CHECK_SIZEOF(wchar_t)
-AC_SUBST(SIZEOF_WCHAR_T)
-
-AC_CHECK_FUNCS(fabsf)
-
-# Checks for library functions.
-
-# Setup the build compiler flags and linker flags.
-# Enable debug
-# (note: the flags here are gcc-specific and may fail with other compilers)
-build_flags=""
-if test "$enable_debug" = yes; then
- build_flags="$build_flags -O0 -g -Wall -Wno-unknown-pragmas -Wparentheses -Werror"
-elif test "$enable_strict" = yes; then
- build_flags="$build_flags -DNDEBUG -Wall -Wno-unknown-pragmas -Wparentheses -Werror"
-else
- build_flags="$build_flags -DNDEBUG"
-fi
-
-# Enable Graphite Trace logs - these are only used if a
-# LayoutEnvironment has a valid ostream pointer
-if test "$enable_tracing" = yes; then
- build_flags="$build_flags -DTRACING"
-fi
-
-# Enable final
-if test "$enable_final" = yes; then
- build_flags="$build_flags -O3 -DNDEBUG"
-fi
-
-# Enable profile
-if test "$enable_profile" = yes; then
- build_flags="$build_flags -pg "
-fi
-if test "$enable_profilefn" = yes; then
- build_flags="$build_flags -g -finstrument-functions "
- LIBS="$LIBS -g -finstrument-functions -lfnccheck "
-fi
-
-# Find distrib codename
-
-AC_MSG_CHECKING(if already have REL_CODENAME)
-if test -z "${REL_CODENAME}"; then
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(if have lsb_release)
- if test "${LSB_RELEASE}" = "no"; then
- AC_MSG_RESULT(no)
- REL_CODENAME="unstable"
- else
- AC_MSG_RESULT(yes)
- AC_MSG_CHECKING(if LSB_RELEASE is empty)
- if test -z ${LSB_RELEASE}; then
- AC_MSG_RESULT(yes)
- REL_CODENAME="unstable"
- else
- AC_MSG_RESULT(no)
- CODENAME=`${LSB_RELEASE} -c | sed -e 's/^\S*\s*//'`
- AC_MSG_CHECKING(if release is sid)
- if test ${CODENAME} = 'sid'; then
- AC_MSG_RESULT(yes)
- REL_CODENAME="unstable"
- else
- AC_MSG_RESULT(no, ${CODENAME})
- REL_CODENAME=${CODENAME}
- fi
- fi
- fi
-else
- AC_MSG_RESULT(yes)
-fi
-
-AC_SUBST(REL_CODENAME)
-
-CFLAGS="$CFLAGS $build_flags"
-CXXFLAGS="$CXXFLAGS $build_flags"
-
-AC_CONFIG_FILES(Makefile \
- silgraphite.pc:installed-top.pc.in:silgraphite.pc.in \
- silgraphite-uninstalled.pc:uninstalled-top.pc.in:silgraphite.pc.in \
- src/Makefile \
- test/Makefile \
- test/RegressionTest/Makefile \
- test/ProfileHarness/Makefile)
-
-AC_OUTPUT
diff --git a/Build/source/libs/graphite-engine/debian/changelog b/Build/source/libs/graphite-engine/debian/changelog
deleted file mode 100644
index e77c628ef90..00000000000
--- a/Build/source/libs/graphite-engine/debian/changelog
+++ /dev/null
@@ -1,174 +0,0 @@
-silgraphite2.0 (1:2.3-1) gutsy; urgency=low
-
- * Smaller segment and glyphinfo foot prints
- * bug fixes
-
- -- Martin Hosken <martin_hosken@sil.org> Wed, 16 Jan 2008 16:54:26 +0700
-
-silgraphite2.0 (1:2.2.1-1) feisty; urgency=low
-
- * 30% speedup
- * various bug fixes
-
- -- Martin Hosken <martin_hosken@sil.org> Mon, 27 Aug 2007 16:47:26 +0100
-
-silgraphite2.0 (1:2.2.0-1.1) unstable; urgency=low
-
- * Non-maintainer upload.
- * Fix the broken graphite.pc file (Closes: #433225):
- - debian/rules:
- Added an include of cdbs's simple-patchsys.mk.
- - debian/patches/fix_cflags_in_graphite.pc.diff
- Added this patch to fix the graphite.pc file by appending the missing
- ``graphite'' directory to the Cflags in graphite.pc.in.
-
- -- Cyril Brulebois <cyril.brulebois@enst-bretagne.fr> Mon, 20 Aug 2007 01:20:35 +0000
-
-silgraphite2.0 (1:2.2.0-1) unstable; urgency=low
-
- * Release 2.2.0
-
- -- Daniel Glassey <wdg@debian.org> Thu, 28 Jun 2007 10:56:17 +0100
-
-silgraphite2.0 (1:2.1+0447svn-1) unstable; urgency=low
-
- * Update svn
- * Keep engine separate from wrappers
- * debian/control So don't need build dep on fontconfig or freetype
- * debian/docs Docs are not in odf format not rtf
-
- -- Daniel Glassey <wdg@debian.org> Fri, 25 May 2007 13:33:06 +0100
-
-silgraphite2.0 (1:2.1+0361svn-1) unstable; urgency=low
-
- * Build freetype wrapper
- * Update svn
- * depend on libfreetype6-dev instead of X and Xft dependencies
- * binary package is now libgraphite3 since library version has
- changed
- * so rename the debian/libgraphite2.* to libgraphite3.*
- * libgraphite-dev.install: install libgraphite-ft.a
-
- -- Daniel Glassey <wdg@debian.org> Mon, 12 Mar 2007 20:25:30 +0000
-
-silgraphite2.0 (1:2.1+0347svn-1) unstable; urgency=low
-
- * Package preparation for min-deps reorganisation
- * allow build from svn
- * debian/rules: not using tarball anymore
- * debian/control standards version 3.7.2 (no changes)
- * remove unneeded misc:Depends subsitution variable
-
- -- Daniel Glassey <wdg@debian.org> Fri, 9 Mar 2007 17:20:52 +0000
-
-silgraphite2.0 (1:2.1-1) unstable; urgency=low
-
- * New upstream release
- * debian/rules: fix shlibs
- * Use an epoch as 2.1 < 221svn
- if further svn releases are made they will be
- e.g. 1:2.1+0250svn-1
-
- -- Daniel Glassey <wdg@debian.org> Mon, 15 May 2006 19:48:23 -0500
-
-silgraphite2.0 (221svn-3) unstable; urgency=low
-
- * er, try that again
-
- -- Daniel Glassey <wdg@debian.org> Mon, 17 Apr 2006 15:51:32 +0100
-
-silgraphite2.0 (221svn-2) unstable; urgency=low
-
- * debian/libgraphite2.shlibs refer to new package name
-
- -- Daniel Glassey <wdg@debian.org> Mon, 17 Apr 2006 15:36:48 +0100
-
-silgraphite2.0 (221svn-1) unstable; urgency=low
-
- [ Daniel Glassey ]
- * update to current svn
- * include fix to build with gcc 4.1, Closes: #357711
- Thanks to Martin Michlmayr <tbm@cyrius.com> for the report
- and Michael Peters <mpeters@mac.com> for the initial one
- * fix shlibs to refer to libgraphite
- * rename the lib packages because lib is now libgraphite
- * now lintian and linda clean
- * debian/copyright: get location of public svn repo right
- * conflict with the old packages
- * don't compress the rtf docs
-
- [ Martin Hosken ]
- * build for dapper from trunk
- * build for dapper from trunk - with right email
-
- -- Martin Hosken <martin_hosken@sil.org> Fri, 16 Jun 2006 10:48:22 +0700
-
-silgraphite2.0 (190svn-2) unstable; urgency=low
-
- * fix shlibs
- * debian/copyright: update location of svn repo
-
- -- Daniel Glassey <wdg@debian.org> Fri, 10 Mar 2006 09:35:21 +0000
-
-silgraphite2.0 (190svn-1) unstable; urgency=low
-
- * update to current svn - 2.1.0 prerelease snapshot
- * not a native package - build it as such, Closes: #345154
- * Don't assume size_t is unsigned, Closes: #345155
- Thanks to Bastian Blank <waldi@debian.org> for the report and patch
- * Take more care with void*, Closes: #345369
- * debian/libsilgraphite-dev.docs: new file GTF_3_0.rtf
- build dir is now silgraphite-2.1.0
- * debian/control: compiler is grcompiler not gdlcomp
-
- -- Daniel Glassey <wdg@debian.org> Thu, 9 Mar 2006 12:49:53 +0000
-
-silgraphite2.0 (102svn-1) unstable; urgency=low
-
- * update to current svn
- * fix the build-deps line (rejection)
-
- -- Daniel Glassey <wdg@debian.org> Mon, 12 Dec 2005 09:39:31 +0000
-
-silgraphite2.0 (87svn-1) unstable; urgency=low
-
- * update to more recent svn
- * new naming scheme using svn revision
- * Don't autogenerate debian/control using cdbs (rejection)
- * Add section for source to debian/control
-
- -- Daniel Glassey <wdg@debian.org> Thu, 1 Dec 2005 11:24:13 +0000
-
-silgraphite2.0 (20051010svn-1) unstable; urgency=low
-
- * new upstream v2 API
- * this doesn't depend on libfont-ttf-perl as perl bindings are
- separate now
- * GDL font compiler will be a separate package
-
- -- Daniel Glassey <wdg@debian.org> Mon, 10 Oct 2005 05:32:32 +0100
-
-silgraphite1.0 (20050813cvs-1) unstable; urgency=low
-
- * New sync with cvs
- * Ready to upload to unstable
- * not sure which arch #279655 is for (guessing amd64), so uploading
- in case it has been fixed in cvs
- * let cdbs control its build deps in control.in
-
- -- Daniel Glassey <wdg@debian.org> Sat, 13 Aug 2005 00:12:12 +0100
-
-silgraphite1.0 (20041025cvs-1) experimental; urgency=low
-
- * update to current CVS
- * remember to sign this time :/
- * name package libsilgraphite-1.2 as that is the upcoming version
- * ITP completed, Closes: #205565
-
- -- Daniel Glassey <wdg@debian.org> Mon, 25 Oct 2004 20:53:50 +0100
-
-silgraphite1.0 (20041022cvs-1) experimental; urgency=low
-
- * Initial Release using current CVS.
-
- -- Daniel Glassey <wdg@debian.org> Fri, 22 Oct 2004 14:24:35 +0100
diff --git a/Build/source/libs/graphite-engine/debian/compat b/Build/source/libs/graphite-engine/debian/compat
deleted file mode 100644
index b8626c4cff2..00000000000
--- a/Build/source/libs/graphite-engine/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/Build/source/libs/graphite-engine/debian/control b/Build/source/libs/graphite-engine/debian/control
deleted file mode 100644
index fbcdb63a66a..00000000000
--- a/Build/source/libs/graphite-engine/debian/control
+++ /dev/null
@@ -1,83 +0,0 @@
-Source: silgraphite2.0
-Priority: optional
-Section: libs
-Maintainer: Daniel Glassey <wdg@debian.org>
-Build-Depends: cdbs (>= 0.4.23-1.1), autotools-dev, debhelper (>= 4.1.0)
-Standards-Version: 3.7.2
-
-Package: libgraphite-dev
-Section: libdevel
-Architecture: any
-Depends: libgraphite3 (= ${Source-Version})
-Conflicts: libsilgraphite-dev, libsilgraphite-2.0
-Description: Development files for SILGraphite
- SILGraphite is a system that can be used to create and use "smart fonts"
- capable of displaying writing systems with various complex behaviors, such
- as: contextual shaping, ligatures, reordering, split glyphs,
- bidirectionality, stacking diacritics and complex positioning.
- .
- This library was designed and developed by the NRSI (Non-Roman Script
- Initiative) within SIL International (www.sil.org) to act as a complement to
- other smart font rendering technologies with limited practical local
- extensability. Its purpose is to help meet the needs of a very large number
- of "minority language" communities for local extensibility of complex script
- behaviors.
- .
- The behavior of the SILGraphite rendering engine for a given writing system is
- specified through extra tables added to a TrueType font. These tables are
- generated by compiling a GDL (Graphite Description Language) source file into
- a font using grcompiler.
- .
- This package contains the headers and development libraries.
-
-Package: libgraphite3
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}
-Conflicts: libsilgraphite-dev, libsilgraphite-2.0
-Description: SILGraphite - a "smart font" rendering engine
- SILGraphite is a system that can be used to create and use "smart fonts"
- capable of displaying writing systems with various complex behaviors, such
- as: contextual shaping, ligatures, reordering, split glyphs,
- bidirectionality, stacking diacritics and complex positioning.
- .
- This library was designed and developed by the NRSI (Non-Roman Script
- Initiative) within SIL International (www.sil.org) to act as a complement to
- other smart font rendering technologies with limited practical local
- extensability. Its purpose is to help meet the needs of a very large number
- of "minority language" communities for local extensibility of complex script
- behaviors.
- .
- The behavior of the SILGraphite rendering engine for a given writing system is
- specified through extra tables added to a TrueType font. These tables are
- generated by compiling a GDL (Graphite Description Language) source file into
- a font using grcompiler.
- .
- This package contains the shared library.
-
-Package: libgraphite3-dbg
-Priority: extra
-Section: libdevel
-Architecture: any
-Depends: libgraphite3 (= ${Source-Version})
-Conflicts: libsilgraphite-dev, libsilgraphite-2.0
-Description: debugging symbols for SILGraphite
- SILGraphite is a system that can be used to create and use "smart fonts"
- capable of displaying writing systems with various complex behaviors, such
- as: contextual shaping, ligatures, reordering, split glyphs,
- bidirectionality, stacking diacritics and complex positioning.
- .
- This library was designed and developed by the NRSI (Non-Roman Script
- Initiative) within SIL International (www.sil.org) to act as a complement to
- other smart font rendering technologies with limited practical local
- extensability. Its purpose is to help meet the needs of a very large number
- of "minority language" communities for local extensibility of complex script
- behaviors.
- .
- The behavior of the SILGraphite rendering engine for a given writing system is
- specified through extra tables added to a TrueType font. These tables are
- generated by compiling a GDL (Graphite Description Language) source file into
- a font using grcompiler.
- .
- This package contains the debug library.
-
diff --git a/Build/source/libs/graphite-engine/debian/copyright b/Build/source/libs/graphite-engine/debian/copyright
deleted file mode 100644
index b1fe8899e1d..00000000000
--- a/Build/source/libs/graphite-engine/debian/copyright
+++ /dev/null
@@ -1,259 +0,0 @@
-This package was debianized by Daniel Glassey <wdg@debian.org> on
-Fri, 22 Oct 2004 14:24:35 +0100.
-
-It was oringally downloaded from http://www.sourceforge.net/projects/silgraphite
- SILGraphite cvs on sourceforge
-It is now in the subversion repository at
- http://scripts.sil.org/svn-public/graphite/graphite/trunk
-
-Upstream Authors:
- SIL International <silgraphite-devel@lists.sourceforge.net>
- http://www.sil.org
-
-Copyright:
-Copyright 1999-2006 SIL International
-
-Graphite is copyrighted under the SIL Dual License
-This can be found on http://fieldworks.sil.org/License/SIL_open_source_license_frame.htm
-
-Graphite, Version .9 Copyright 2001, SIL International, Inc. All rights reserved.
-This software is free; you can redistribute it and/or modify it under the terms of either:
-a) the GNU "GNU Lesser General Public License version 2.1" as published by the Free Software
-Foundation, or b) the "Common Public License Version 0.5".
-
-This software 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 either the GNU Lesser General Public License or the Common Public License for more details.
-
- On Debian systems, the complete text of the GNU Lesser General Public
- License, version 2.1, can be found in /usr/share/common-licenses/LGPL-2.1
-
-The IBM Common Public License follows:
-Common Public License Version 0.5
-
-Common Public License Version 0.5
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE
-("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S
-ACCEPTANCE OF THIS AGREEMENT.
-
-
-
-1. DEFINITIONS
-
-"Contribution" means:
-
- a) in the case of the initial Contributor, the initial code and documentation distributed
-under this Agreement, and
-
- b) in the case of each subsequent Contributor:
-
- i) changes to the Program, and
-
- ii) additions to the Program;
-
- where such changes and/or additions to the Program originate from and are distributed by
-that particular Contributor. A Contribution 'originates' from a Contributor if it was added to
-the Program by such Contributor itself or anyone acting on such Contributor's behalf.
-Contributions do not include additions to the Program which: (i) are separate modules of
-software distributed in conjunction with the Program under their own license agreement, and
-(ii) are not derivative works of the Program.
-
-
-
-"Contributor" means any person or entity that distributes the Program.
-
-
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily
-infringed by the use or sale of its Contribution alone or when combined with the Program.
-
-
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-
-
-"Recipient" means anyone who receives the Program under this Agreement, including all
-Contributors.
-
-
-
-2. GRANT OF RIGHTS
-
- a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a
-non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works
-of, publicly display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code form.
-
- b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a
-non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use,
-sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if
-any, in source code and object code form. This patent license shall apply to the combination of
-the Contribution and the Program if, at the time the Contribution is added by the Contributor,
-such addition of the Contribution causes such combination to be covered by the Licensed
-Patents. The patent license shall not apply to any other combinations which include the
-Contribution. No hardware per se is licensed hereunder.
-
- c) Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor that the Program
-does not infringe the patent or other intellectual property rights of any other entity. Each
-Contributor disclaims any liability to Recipient for claims brought by any other entity based
-on infringement of intellectual property rights or otherwise. As a condition to exercising the
-rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to
-secure any other intellectual property rights needed, if any. For example, if a third party
-patent license is required to allow Recipient to distribute the Program, it is Recipient's
-responsibility to acquire that license before distributing the Program.
-
- d) Each Contributor represents that to its knowledge it has sufficient copyright rights
-in its Contribution, if any, to grant the copyright license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license
-agreement, provided that:
-
- a) it complies with the terms and conditions of this Agreement; and
-
- b) its license agreement:
-
- i) effectively disclaims on behalf of all Contributors all warranties and conditions,
-express and implied, including warranties or conditions of title and non-infringement, and
-implied warranties or conditions of merchantability and fitness for a particular purpose;
-
- ii) effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such as lost
-profits;
-
- iii) states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and
-
- iv) states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a medium customarily
-used for software exchange.
-
-When the Program is made available in source code form:
-
- a) it must be made available under this Agreement; and
-
- b) a copy of this Agreement must be included with each copy of the Program.
-
-
-
-Contributors may not remove or alter any copyright notices contained within the Program.
-
-
-
-
-
-Each Contributor must identify itself as the originator of its Contribution, if any, in a
-manner that reasonably allows subsequent Recipients to identify the originator of the
-Contribution.
-
-
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with respect to end
-users, business partners and the like. While this license is intended to facilitate the
-commercial use of the Program, the Contributor who includes the Program in a commercial product
-offering should do so in a manner which does not create potential liability for other
-Contributors. Therefore, if a Contributor includes the Program in a commercial product
-offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
-every other Contributor ("Indemnified Contributor") against any losses, damages and costs
-(collectively "Losses") arising from claims, lawsuits and other legal actions brought by a
-third party against the Indemnified Contributor to the extent caused by the acts or omissions
-of such Commercial Contributor in connection with its distribution of the Program in a
-commercial product offering. The obligations in this section do not apply to any claims or
-Losses relating to any actual or alleged intellectual property infringement. In order to
-qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in
-writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with
-the Commercial Contributor in, the defense and any related settlement negotiations. The
-Indemnified Contributor may participate in any such claim at its own expense.
-
-
-
-For example, a Contributor might include the Program in a commercial product offering, Product
-X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes
-performance claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this section, the
-Commercial Contributor would have to defend claims against the other Contributors related to
-those performance claims and warranties, and if a court requires any other Contributor to pay
-any damages as a result, the Commercial Contributor must pay those damages.
-
-
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
-LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS
-FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
-appropriateness of using and distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement, including but not limited to the risks and costs of
-program errors, compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations.
-
-
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL
-HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
-GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall
-not affect the validity or enforceability of the remainder of the terms of this Agreement, and
-without further action by the parties hereto, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.
-
-
-
-If Recipient institutes patent litigation against a Contributor with respect to a patent
-applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent
-licenses granted by that Contributor to such Recipient under this Agreement shall terminate as
-of the date such litigation is filed. In addition, If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other software or hardware)
-infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b)
-shall terminate as of the date such litigation is filed.
-
-
-
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of
-the material terms or conditions of this Agreement and does not cure such failure in a
-reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights
-under this Agreement terminate, Recipient agrees to cease use and distribution of the Program
-as soon as reasonably practicable. However, Recipient's obligations under this Agreement and
-any licenses granted by Recipient relating to the Program shall continue and survive.
-
-
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid
-inconsistency the Agreement is copyrighted and may only be modified in the following manner.
-The Agreement Steward reserves the right to publish new versions (including revisions) of this
-Agreement from time to time. No one other than the Agreement Steward has the right to modify
-this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement
-will be given a distinguishing version number. The Program (including Contributions) may always
-be distributed subject to the version of the Agreement under which it was received. In
-addition, after a new version of the Agreement is published, Contributor may elect to
-distribute the Program (including its Contributions) under the new version. Except as expressly
-stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the
-intellectual property of any Contributor under this Agreement, whether expressly, by
-implication, estoppel or otherwise. All rights in the Program not expressly granted under this
-Agreement are reserved.
-
-
-
-This Agreement is governed by the laws of the State of New York and the intellectual property
-laws of the United States of America. No party to this Agreement will bring a legal action
-under this Agreement more than one year after the cause of action arose. Each party waives its
-rights to a jury trial in any resulting litigation.
diff --git a/Build/source/libs/graphite-engine/debian/libgraphite-dev.dirs b/Build/source/libs/graphite-engine/debian/libgraphite-dev.dirs
deleted file mode 100644
index c08dc81a2ef..00000000000
--- a/Build/source/libs/graphite-engine/debian/libgraphite-dev.dirs
+++ /dev/null
@@ -1,4 +0,0 @@
-usr/lib
-usr/lib/pkgconfig
-usr/include/silgraphite
-
diff --git a/Build/source/libs/graphite-engine/debian/libgraphite-dev.docs b/Build/source/libs/graphite-engine/debian/libgraphite-dev.docs
deleted file mode 100644
index 2a85e0b4b5b..00000000000
--- a/Build/source/libs/graphite-engine/debian/libgraphite-dev.docs
+++ /dev/null
@@ -1,5 +0,0 @@
-build-tree/silgraphite-2.2.1/doc/GTF_3_0.odt
-build-tree/silgraphite-2.2.1/doc/V2_Engine_Interface.odt
-build-tree/silgraphite-2.2.1/doc/V2_Segment_Interface.odt
-build-tree/silgraphite-2.2.1/doc/V2_TextSource_Interface.odt
-
diff --git a/Build/source/libs/graphite-engine/debian/libgraphite-dev.install b/Build/source/libs/graphite-engine/debian/libgraphite-dev.install
deleted file mode 100644
index e1c2c58c292..00000000000
--- a/Build/source/libs/graphite-engine/debian/libgraphite-dev.install
+++ /dev/null
@@ -1,4 +0,0 @@
-debian/tmp/usr/include
-debian/tmp/usr/lib/libgraphite.a
-debian/tmp/usr/lib/lib*.so
-debian/tmp/usr/lib/pkgconfig
diff --git a/Build/source/libs/graphite-engine/debian/libgraphite3.dirs b/Build/source/libs/graphite-engine/debian/libgraphite3.dirs
deleted file mode 100644
index 68457717bd8..00000000000
--- a/Build/source/libs/graphite-engine/debian/libgraphite3.dirs
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib
diff --git a/Build/source/libs/graphite-engine/debian/libgraphite3.install b/Build/source/libs/graphite-engine/debian/libgraphite3.install
deleted file mode 100644
index c45ebcf2a34..00000000000
--- a/Build/source/libs/graphite-engine/debian/libgraphite3.install
+++ /dev/null
@@ -1 +0,0 @@
-debian/tmp/usr/lib/lib*.so.*
diff --git a/Build/source/libs/graphite-engine/debian/libgraphite3.shlibs b/Build/source/libs/graphite-engine/debian/libgraphite3.shlibs
deleted file mode 100644
index 6c6ca9f718e..00000000000
--- a/Build/source/libs/graphite-engine/debian/libgraphite3.shlibs
+++ /dev/null
@@ -1 +0,0 @@
-libgraphite 3 libgraphite3 (>= 1:2.1+0361svn-1)
diff --git a/Build/source/libs/graphite-engine/debian/rules b/Build/source/libs/graphite-engine/debian/rules
deleted file mode 100755
index 7e5c672aad5..00000000000
--- a/Build/source/libs/graphite-engine/debian/rules
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/make -f
-#DEB_AUTO_UPDATE_DEBIAN_CONTROL:=yes
-
-DEB_TAR_SRCDIR := silgraphite-2.3
-include /usr/share/cdbs/1/rules/tarball.mk
-
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/class/autotools.mk
-#DEB_CONFIGURE_EXTRA_FLAGS := --enable-final
-DEB_DH_MAKESHLIBS_ARGS_libgraphite3 := -V"libgraphite3 (>= 2.1+0449svn-1)"
-DEB_COMPRESS_EXCLUDE := .rtf
-DEB_DH_STRIP_ARGS := --dbg-package=libgraphite3
diff --git a/Build/source/libs/graphite-engine/doc/GTF_3_0.odt b/Build/source/libs/graphite-engine/doc/GTF_3_0.odt
deleted file mode 100644
index 36b3e136dd9..00000000000
--- a/Build/source/libs/graphite-engine/doc/GTF_3_0.odt
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/doc/V2_Engine_Interface.odt b/Build/source/libs/graphite-engine/doc/V2_Engine_Interface.odt
deleted file mode 100644
index c69511535a6..00000000000
--- a/Build/source/libs/graphite-engine/doc/V2_Engine_Interface.odt
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/doc/V2_Segment_Interface.odt b/Build/source/libs/graphite-engine/doc/V2_Segment_Interface.odt
deleted file mode 100644
index b9028cfb379..00000000000
--- a/Build/source/libs/graphite-engine/doc/V2_Segment_Interface.odt
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/doc/V2_TextSource_Interface.odt b/Build/source/libs/graphite-engine/doc/V2_TextSource_Interface.odt
deleted file mode 100644
index c2f183a1629..00000000000
--- a/Build/source/libs/graphite-engine/doc/V2_TextSource_Interface.odt
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/doc/hungarian.txt b/Build/source/libs/graphite-engine/doc/hungarian.txt
deleted file mode 100644
index 946c9a4bc97..00000000000
--- a/Build/source/libs/graphite-engine/doc/hungarian.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-GRAPHITE HUNGARIAN NOTATION
-
-General rules for variable names:
-
-* Syntax is:
- scope indicator (if any)
- combining prefix (zero or more)
- type/class indicator (required)
- usage labels (optional)
-
-* The only places underscores are used are after the scoping prefixes. Uppercase is used to separate the prefixes from the main label, if any; eg: strName, m_psegNew.
-
-* If you are creating a new class, make up a short indicator for it and use it consistently. Class indicators should be 3-6 characters long.
-
-* An appropriate way to indicate method arguments where necessary is with an "Arg" usage label, eg: nValueArg. Generally method arguments have no special indication.
-
-* Usage labels can be made up arbitrarily, but the ones listed below should be used if they apply.
-
-
-*** Scope indicators:
-
-m_ member variable
-s_ static (global) variable
-
-
-*** Combining prefixes:
-
-i index
-c counter
-p pointer
-pp double pointer
-rg range (array, especially stack-allocated)
-prg pointer to the start of an array (often used for method arguments)
-v vector
-d delta or difference
-k constant (combines with an enumeration identifier: eg, klb, kest, kgmet, etc)
-
-
-*** Basic type indicators:
-
-f boolean (flag)
-n integer (simple numerical value--not a counter, index, glyph id, char, measurement, etc.)
-b byte
-l long integer (whatever that means)
-ch character (width irrelevant)
-chs short character (8-bit)
-chw wide character (16-bit)
-chl long (32-bit) character
-str string (char-width irrelevant)
-sta ANSI string (8-bit)
-stu Unicode string (16-bit)
-fxd fixed-field integer
-v void (yes, this duplicates vector)
-
-Graphite specific integer types:
-
-gid glyph id
-m em-units
-xs logical units, x-coordinates (source)
-ys logical units, y-coordinates (source)
-xys logical units, x- or y-coordinates (source)
-xd display units, x-coordinates
-yd display units, y-coordinates
-xyd display units, x- or y-coordinates
-
-
-*** Common Graphite-specific class prefixes (not a complete list)
-
-seg Segment
-font Font
-txsrc TextSource
-fface FontFace
-pass GrPass
-greng GrEngine
-tman GrTableManager
-sstrm GrSlotStream
-slot GrSlotState
-slout GrSlotOutput
-chstrm GrCharStream
-gbb glyph bounding box
-
-
-*** Enumeration prefixes (see the GrConstants.h and GrData.h files for a more complete list)
-
-lb line break (breakweight)
-twsh trailing whitespace handling
-est end-segment type (why the segment was terminated)
-dm draw mode (for insertion points)
-dirc directionality code
-slat slot attribute name
-clr color
-op operator in Graphite's stack machine
-
-
-*** Usage labels (somewhat optional, depending on context)
-
-Min first in a sequence or array (used with Lim); minimum (used with Max)
-Lim 1 + last in a sequence or array
-Max maximum
-First first in a sequence (used with Last)
-Last last in a sequence
-Prev previous
-Next next
-Ret return value
-In input
-Out output
-New newly created object
-Arg method argument
-
------------------
-
-EXAMPLES
-
-pf pointer to boolean
-cch character count
-ipassPrev index of previous pass
-pppass pointer to a pointer to a pass
-iislot index to an index to a GrSlotState
-vich vector of character indices
-prgchw pointer to the start of a wide-char buffer
-dislot delta to apply to an index of a GrSlotState
-m_ipass index of pass (member variable)
-ppassNew pointer to a newly created pass
-clrBack background color
-m_igbbFirst index to the first glyph bounding box (member variable)
-islotLim 1 + index of the last slot \ No newline at end of file
diff --git a/Build/source/libs/graphite-engine/doc/policy.txt b/Build/source/libs/graphite-engine/doc/policy.txt
deleted file mode 100644
index e3acbb4bcec..00000000000
--- a/Build/source/libs/graphite-engine/doc/policy.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-POLICIES
-
-This document keeps a dated list of policy changes that we may come up with
-or recind or generally do whatever we want with. There's no carefully worked
-out framework in which these policies sit, they are just rules we intend
-to keep and break when we need to!
-
-2007-04-02
-
-API Changes Policy
-
-Any changes to the public API will be documented on the developers' list along
-with a branch into which the corresponding code changes will be placed.
-Following the announcement, the branch will not be merged into the trunk for
-at least 1 week. After which, depending on how the development has gone and
-the comments or otherwise, the merge may: take place unannounced, be delayed
-unannounced or be dropped and not take place, in which case an announcement
-will be made on the developers' list.
-
diff --git a/Build/source/libs/graphite-engine/graphite-engine.ac b/Build/source/libs/graphite-engine/graphite-engine.ac
deleted file mode 100644
index dddbe63cb82..00000000000
--- a/Build/source/libs/graphite-engine/graphite-engine.ac
+++ /dev/null
@@ -1,13 +0,0 @@
-if test "$needs_graphite" = no; then
- GRAPHITECPPFLAGS=
- LDGRAPHITE=
- GRAPHITEDEP=
-else
- GRAPHITECPPFLAGS='-I$(GRAPHITESRCDIR)/include'
- LDGRAPHITE='$(GRAPHITEDIR)/src/.libs/libgraphite.a'
- GRAPHITEDEP='$(GRAPHITEDIR)/src/.libs/libgraphite.a'
-fi
-
-AC_SUBST(GRAPHITECPPFLAGS)
-AC_SUBST(LDGRAPHITE)
-AC_SUBST(GRAPHITEDEP)
diff --git a/Build/source/libs/graphite-engine/include/Makefile.am b/Build/source/libs/graphite-engine/include/Makefile.am
deleted file mode 100644
index 83286118d8d..00000000000
--- a/Build/source/libs/graphite-engine/include/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/FileFont.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/Font.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GraphiteProcess.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrAppData.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrClient.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrCommon.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrConstants.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrData.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrDebug.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrExt.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrFeature.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrMstypes.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrPlatform.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrResult.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrStructs.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/GrWrappers.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/IGraphiteProcess.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/IGrEngine.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/IGrJustifier.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/ITextSource.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/MemoryUsage.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/SegmentAux.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/Segment.h
-graphiteinclude_HEADERS += $(top_srcdir)/include/graphite/SegmentPainter.h
-
-EXTRA_DIST += $(top_srcdir)/include/graphite/BinTree.h
-EXTRA_DIST += $(top_srcdir)/include/graphite/GenericResource.h
-EXTRA_DIST += $(top_srcdir)/include/graphite/HashMap.h
-
diff --git a/Build/source/libs/graphite-engine/include/graphite/BinTree.h b/Build/source/libs/graphite-engine/include/graphite/BinTree.h
deleted file mode 100644
index a487df03770..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/BinTree.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: BinTree.h
-Responsibility: Darrell Zook
-Last reviewed: 9/8/99
-
-Description:
- This file provides declarations of binary tree class(es).
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef BINTREE_H_INCLUDED
-#define BINTREE_H_INCLUDED
-
-/*----------------------------------------------------------------------------------------------
- This template class implements a balanced tree, which is a binary tree where the height of
- the two children of any node in the tree can only be different by +/- 1 or 0.
-
- The class of objects to be stored in the tree should be derived from BalTreeBase, because
- the constructor of BalTreeBase adds an object to the tree in sorted order without
- allocating any memory.
-
- Classes that derive from BalTreeBase must have a CompareKey member function that compares
- a given key with this->key to determine which should be first when sorting the tree.
- The declaration of CompareKey should be as follows:
- int CompareKey(const Key & key);
- and it should return:
- <0 if key is less than the key in the current node (this->key)
- 0 if key is equal to the key in the current node (this->key)
- >0 if key is greater than the key in the current node (this->key)
-
- CAUTION: Classes that use this template should never be dynamically instantiated (by using
- local variables or new/NewObj). This class is meant to be used only for global
- instances of a class. The reason for this restriction is that the tree is never
- destroyed, so using dynamic instantiations of objects would result in stale pointers
- in the tree.
-
- Hungarian: btb
-----------------------------------------------------------------------------------------------*/
-
-template<typename Obj, typename Key> class BalTreeBase
-{
-protected:
- // Pointers to the left and right subtrees.
- Obj * m_rgpobj[2];
-
- // The difference between the height of the right sub tree and the height of the left
- // sub tree. This should be -1, 0, or +1. Insert may temporarily set it to -2 or +2.
- short m_dht;
-
- // Which way we went from this node when inserting the new node.
- short m_ipobj;
-
- // Inserts this in the balanced tree.
- BalTreeBase(Obj ** ppobjRoot, const Key & key);
-
- // Returns a node with the given key from the tree rooted at pobjRoot.
- static Obj * Find(Obj * pobjRoot, const Key & key);
-
-private:
- // Inserts a node in the tree rooted at *ppobjRoot, sorting it based on key.
- void Insert(Obj ** ppobjRoot, const Key & key);
-};
-
-#endif // !BINTREE_H_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/include/graphite/FileFont.h b/Build/source/libs/graphite-engine/include/graphite/FileFont.h
deleted file mode 100644
index bbb26266c71..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/FileFont.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001, 2005 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: XftFont.h
-Responsibility: Keith Stribley
-Last reviewed: Not yet.
-
-Description:
- A Font is an object that represents a font-family + bold + italic setting, that contains
- Graphite tables.
-----------------------------------------------------------------------------------------------*/
-#ifndef FILEFONT_INCLUDED
-#define FILEFONT_INCLUDED
-#include "Font.h"
-
-
-//:End Ignore
-
-
-namespace gr
-{
-
-class FontTableCache;
-class GrEngine;
-/*-----------------------------------------------------------------------------
- Stock implementation of an Xft font class.
-------------------------------------------------------------------------------*/
-/**
-* An implementation of the Graphite gr::Font class for Xft fonts for use on
-* systems using X. Freetype is used to retrieve font information.
-* If you are using Freetype directly, without Xft, you can pass in a FT_Face
-* directly.
-*/
-class FileFont : public Font
-{
-public:
- /**
- * The main user constructor. Constructs the font from the supplied FILE pointer.
- * @param file the FILE pointer to initialise from (must not be null)
- */
- FileFont(FILE * file, float pointSize, unsigned int DPIx, unsigned int DPIy = 0);
-
- /**
- * Alternative user constructor. Constructs the font from the supplied filename.
- * @param filename character array
- */
- FileFont(char * filename, float pointSize, unsigned int DPIx, unsigned int DPIy = 0);
-
- /**
- * Alternative user constructor. Constructs the font from the supplied filename.
- * @param filename as a string
- */
- FileFont(std::string filename, float pointSize,
- unsigned int DPIx, unsigned int DPIy = 0);
-
-
- /**
- * Destructor - cleans up the tables that it has allocated if all other copies
- * of this font have been deleted.
- */
- virtual ~FileFont();
-
- /**
- * Returns a copy of the recipient. Specifically needed to store the Font
- * in a segment.
- * @internal
- */
- virtual Font * copyThis();
-
- /**
- * Copy constructor - note the tables are shared between the copy and the
- * original font for efficiency reasons.
- * The last copy to be deleted will delete the tables.
- * @param font the XftGrFont object to copy from.
- * @internal
- */
- FileFont(const FileFont & font, float pointSize = 0, unsigned int DPIx = 0, unsigned int DPIy = 0);
-
- //virtual FontErrorCode isValidForGraphite(int * pnVersion = NULL, int * pnSubVersion = NULL);
- /**
- * Returns a pointer to the start of a table in the font. The ftblid32 type
- * is a 32-bit unsigned integer.
- * If the Font class cannot easily determine the length of the table, it may
- * set 0 as the length (while returning a non-NULL pointer to the table). This
- * means that certain kinds of error checking cannot be done by the Graphite
- * engine.
- * Throws an exception if there is some other error in reading the table, or if
- * the table asked for is not one of the expected ones (cmap, head, name, Sile,
- * Silf, Feat, Gloc, Glat). [If we want to be able to read “non-standardâ€
- * tables, then the caller needs to be responsible for freeing the memory.]
- */
- virtual const void * getTable(fontTableId32 tableID, size_t * pcbSize);
-
- /**
- * Returns the basic metrics of the font. It corresponds to the current
- * GrGraphics::get_FontAscent, get_FontDescent and GetFontEmSquare methods.
- * @param pAscent pointer to hold font ascent
- * @param pDescent pointer to hold font descent
- * @param pEmSquare pointer to hold font EM square
- */
- virtual void getFontMetrics(float * pAscent, float * pDescent = NULL,
- float * pEmSquare = NULL);
-
- /**
- * Returns true if the given arguments specify a font that contains Graphite
- * tables—specfically a “Silf†table.
- * @param xftFont XftFont pointer
- * @return true if this font has the silf table
- */
- bool fontHasGraphiteTables();
-
- /**
- * Returns true if the given arguments specify a font that contains Graphite
- * tables—specfically a “Silf†table.
- * @param xftFont XftFont pointer
- * @return true if this font has the silf table
- */
- static bool FontHasGraphiteTables(FILE * file);
-
- /**
- * Returns true if the given arguments specify a font that contains Graphite
- * tables—specfically a “Silf†table.
- * @param face FT_Face handle
- * @return true if this font has the silf table
- */
- static bool FontHasGraphiteTables(char * filename);
-
- // Temporary, until interface gets thoroughly reworked:
- GrEngine * GraphiteEngine();
-
- /**
- * Returns the font ascent in pixels. Using floating point allows us to
- * avoid rounding errors.
- * Value is the same as that returned by getFontMetrics()
- * @return the font ascent
- */
- virtual float ascent()
- {
- float pixAscent;
- getFontMetrics(&pixAscent);
- return pixAscent;
- }
- /**
- * Returns the font descent in pixels with a positive sign.
- * Value is the same as that returned by getFontMetrics()
- * @return the font descent in pixels.
- */
- virtual float descent()
- {
- float pixDescent;
- getFontMetrics(NULL, &pixDescent);
- return pixDescent;
- }
- /**
- * Returns the total height of the font.
- * Equivalent to ascent() + descent().
- * @return font height
- */
- virtual float height()
- {
- float pixAscent;
- float pixDescent;
- getFontMetrics(&pixAscent, &pixDescent);
- return (pixAscent + pixDescent);
- }
- /**
- * @return true if the font is a bold styled one.
- */
- virtual bool bold()
- {
- return m_fBold;
- }
- /**
- * @return true if the font is italic
- */
- virtual bool italic()
- {
- return m_fItalic;
- }
- /** @return the DPI for the x-axis.
- */
- virtual unsigned int getDPIx()
- {
- return m_dpiX;
- }
- /** @return Returns the DPI for the y-axis.
- */
- virtual unsigned int getDPIy()
- {
- return m_dpiY;
- }
- // Specific to XftGrFont:
-
- /** @return set the DPI for the x-axis.
- */
- virtual void setDPIx(unsigned int dpi)
- {
- m_dpiX = dpi;
- m_xScale = scaleFromDpi(dpi);
- }
- /** @return set the DPI for the y-axis.
- */
- virtual void setDPIy(unsigned int dpi)
- {
- m_dpiY = dpi;
- m_yScale = scaleFromDpi(dpi);
- }
-
- bool isValid() { return m_fIsValid; };
-protected:
- /** Default constructor is not used */
- FileFont();
- /**
- * Common initialisation between the XftFont and FT_Face constructors.
- */
- void initializeFromFace(void);
- // this uses an int to avoid having to include TtfUtil.h in the include
- // directory
- byte * readTable(int /*TableId*/ tableId, size_t & size);
-
- // pixels-per-em = dpi * point-size / 72
- // pixel-coord = design-coord * pixels-per-em / font-em-square
- float scaleFromDpi(int dpi)
- {
- return (dpi * m_pointSize) / (72.0f * m_mEmSquare);
- }
-
- // Member variables:
- FILE * m_pfile;
-
- unsigned long m_clrFore;
- unsigned long m_clrBack;
- bool m_fBold;
- bool m_fItalic;
- // font table caches:
- FontTableCache * m_pTableCache;
-
- // KRS: I think these should be cached otherwise Segment::LineContextSegment doesn't work
- float m_mAscent;
- float m_mDescent;
- float m_mEmSquare;
- float m_pointSize;
- int m_dpiX;
- int m_dpiY;
- bool m_fIsValid;
- std::wstring m_stuFaceName;
- byte * m_pHeader;
- byte * m_pTableDir;
- float m_xScale;
- float m_yScale;
-};
-
-
-} // namespace gr
-
-#endif
-
diff --git a/Build/source/libs/graphite-engine/include/graphite/Font.h b/Build/source/libs/graphite-engine/include/graphite/Font.h
deleted file mode 100644
index 64f62b3ff62..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/Font.h
+++ /dev/null
@@ -1,416 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: Font.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A Font is an object that represents a font-family + bold + italic setting, that contains
- Graphite tables. This file also includes related iterators: FeatureIterator,
- FeatureSettingIterator, FeatLabelLangIterator, LanguageIterator.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef FONT_INCLUDED
-#define FONT_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-class Font;
-class FontFace;
-class FeatureSettingIterator;
-class Segment;
-class LayoutEnvironment;
-class ITextSource;
-class FontMemoryUsage;
-
-typedef struct tagFontProps
-{
- unsigned long clrFore;
- unsigned long clrBack;
- bool fBold;
- bool fItalic;
- float pixHeight;
- wchar_t szFaceName[ 32 ];
-} FontProps;
-
-
-/*----------------------------------------------------------------------------------------------
- A FontError object is an exception that is thrown when there is an error in initializing
- a Graphite font.
-----------------------------------------------------------------------------------------------*/
-struct FontException
-{
- FontErrorCode errorCode;
- int version;
- int subVersion;
-};
-
-/*----------------------------------------------------------------------------------------------
- Iterator to provide access to a font's features.
-----------------------------------------------------------------------------------------------*/
-class FeatureIterator
-{
- friend class Font;
- friend class FeatureSettingIterator;
-
-public:
- FeatureIterator() // needed for creating std::pair of these, and for default FSI
- {
- m_pfont = NULL;
- m_ifeat = 0;
- m_cfeat = 0;
- }
-
-protected:
- FeatureIterator(Font * pfont, int ifeat, size_t cfeat)
- {
- m_pfont = pfont;
- m_ifeat = ifeat;
- m_cfeat = cfeat;
- }
-public:
- featid operator*();
- FeatureIterator operator++();
- FeatureIterator operator+=(int n);
- bool operator==(FeatureIterator &);
- bool operator!=(FeatureIterator &);
- int operator-(FeatureIterator &);
-
-protected:
- Font * m_pfont;
- size_t m_ifeat; // feature being pointed at
- size_t m_cfeat; // number of features for this font
-
- FeatureSettingIterator BeginSetting();
- FeatureSettingIterator EndSetting();
-};
-
-/*----------------------------------------------------------------------------------------------
- Iterator to provide access to the defined values for a single font feature.
-----------------------------------------------------------------------------------------------*/
-class FeatureSettingIterator
-{
- friend class Font;
- friend class FeatureIterator;
-
-public:
- FeatureSettingIterator() // needed for creating std::pair of these, I think
- {
- m_ifset = 0;
- m_cfset = 0;
- }
-protected:
- FeatureSettingIterator(FeatureIterator fit, int ifset, size_t cfset)
- {
- m_fit = fit;
- m_ifset = ifset;
- m_cfset = cfset;
- }
-public:
- int operator*();
- FeatureSettingIterator operator++();
- FeatureSettingIterator operator +=(int n);
- bool operator==(FeatureSettingIterator &);
- bool operator!=(FeatureSettingIterator &);
- int operator-(FeatureSettingIterator);
-
-protected:
- FeatureIterator m_fit;
- size_t m_ifset; // which setting being pointed at
- size_t m_cfset; // number of settings for this feature
-};
-
-/*----------------------------------------------------------------------------------------------
- Iterator to provide access to the languages available for the feature label strings.
-----------------------------------------------------------------------------------------------*/
-class FeatLabelLangIterator
-{
- friend class Font;
-
-public:
- FeatLabelLangIterator() // needed for creating std::pair of these, and for default FSI
- {
- m_pfont = NULL;
- m_ilang = 0;
- m_clang = 0;
- }
-
-protected:
- FeatLabelLangIterator(Font * pfont, int ilang, size_t clang)
- {
- m_pfont = pfont;
- m_ilang = ilang;
- m_clang = clang;
- }
-public:
- data16 operator*();
- FeatLabelLangIterator operator++();
- FeatLabelLangIterator operator+=(int n);
- bool operator==(FeatLabelLangIterator &);
- bool operator!=(FeatLabelLangIterator &);
- int operator-(FeatLabelLangIterator &);
-
-protected:
- Font * m_pfont;
- size_t m_ilang; // language being pointed at
- size_t m_clang; // number of languages for this font
-};
-
-/*----------------------------------------------------------------------------------------------
- Iterator to provide access to a font's defined languages--ie, those that have feature
- settings associated with them.
-----------------------------------------------------------------------------------------------*/
-class LanguageIterator
-{
- friend class Font;
-
-public:
- LanguageIterator() // needed for creating std::pair of these, and for default FSI
- {
- m_pfont = NULL;
- m_ilang = 0;
- m_clang = 0;
- }
-
-protected:
- LanguageIterator(Font * pfont, int ilang, size_t clang)
- {
- m_pfont = pfont;
- m_ilang = ilang;
- m_clang = clang;
- }
-public:
- isocode operator*(); // returns a 4-char array
- LanguageIterator operator++();
- LanguageIterator operator+=(int n);
- bool operator==(LanguageIterator &);
- bool operator!=(LanguageIterator &);
- int operator-(LanguageIterator &);
-
-protected:
- Font * m_pfont;
- size_t m_ilang; // language being pointed at
- size_t m_clang; // number of languages for this font
-};
-
-/*----------------------------------------------------------------------------------------------
- Abstract superclass for Graphite fonts. A font represents a face name, size, and bold and
- italic styles.
-----------------------------------------------------------------------------------------------*/
-class Font {
-
- friend class FeatureIterator;
- friend class FeatureSettingIterator;
- friend class FeatLabelLangIterator;
- friend class LanguageIterator;
- friend class FontMemoryUsage;
-
-public:
- virtual ~Font();
-
- /**
- * Returns a copy of the recipient. Specifically needed to store the
- * Font in a segment.
- * @internal
- * @return pointer to copy
- */
- virtual Font * copyThis() = 0;
-
- /**
- * Return wether the font is bold.
- * @return true when bold
- */
- virtual bool bold() = 0;
- /**
- * Return wether the font is italic.
- * @return true when italic
- */
- virtual bool italic() = 0;
-
- /**
- * Returns the slope of the italic (if the font is italic)
- * @return ratio of slope from the vertical
- */
- virtual float fakeItalicRatio() { return 0; } // no support for fake italic
-
- /**
- * Returns the font ascent.
- * Value is the same as that returned by getFontMetrics()
- * @return the font ascent in device co-ordinates
- */
- virtual float ascent() = 0;
-
- /**
- * Returns the font descent.
- * Value is the same as that returned by getFontMetrics()
- * @return the font descent in device co-ordinates
- */
- virtual float descent() = 0;
-
- /**
- * Returns the total height of the font.
- * @return font height in device co-ordinates
- */
- virtual float height() = 0;
-
- /**
- * Returns the x and y resolution of the device co-ordinate space.
- */
- virtual unsigned int getDPIx() = 0;
- virtual unsigned int getDPIy() = 0;
-
- /**
- * Returns a pointer to the start of a table in the font.
- * If the Font class cannot easily determine the length of the table,
- * it may set 0 as the length (while returning a non-NULL pointer to
- * the table). This means that certain kinds of error checking cannot
- * be done by the Graphite engine.
- * Throws an exception if there is some other error in reading the
- * table, or if the table asked for is not in the font.
- * @param tableID the TTF ID of the table as a 32-bit long in native machine byte order
- * @param pcbSize pointer to a size_t to hold the table size.
- * @return address of the buffer containing the table or 0
- */
- virtual const void * getTable(fontTableId32 tableID, size_t * pcbSize) = 0;
- /**
- * Fetches the basic metrics of the font in device co-ordinates
- * (normaly pixels).
- * @param pAscent pointer to hold font ascent.
- * @param pDescent pointer to hold font descent.
- * @param pEmSquare pointer to hold font EM square.
- */
- virtual void getFontMetrics(float * pAscent, float * pDescent = NULL,
- float * pEmSquare = NULL) = 0;
- /**
- * Converts the point number of a glyph’s on-curve point to a pair of
- * x/y coordinates in pixels. The default implementation will read the
- * curve information directly from the font and perform a simple
- * transformation to pixels. Some subclasses (e.g., WinFont) will use
- * a system-level API call to return hinted metrics.
- * Note that the coordinates returned are floating point values in the
- * device co-ordinate space (normaly pixels).
- * @param gid glyph id
- * @param pointNum within glyph
- * @param xyReturn reference to a Point object to hold the x,y result
- */
- virtual void getGlyphPoint(gid16 glyphID, unsigned int pointNum, gr::Point & pointReturn);
-
- /**
- * Returns the metrics of a glyph in the font. The default
- * implementation will read the information directly from the font and
- * perform a simple transformation to pixels. Some subclasses (e.g.,
- * WinFont) will use a system-level API call to return hinted metrics.
- * Note that the coordinates returned are floating point values in the
- * device co-ordinate space (normaly pixels).
- * @param glyphID
- * @param boundingBox reference to gr::Rect to hold bounding box of glyph
- * @param advances refererence to gr::Point to hold the horizontal / vertical advances
- */
- virtual void getGlyphMetrics(gid16 glyphID, gr::Rect & boundingBox, gr::Point & advances);
-
- static void SetFlushMode(int);
- static int GetFlushMode();
-
- // obsolete:
- //virtual FontErrorCode isValidForGraphite(int * pnVersion = NULL, int * pnSubVersion = NULL) = 0;
-
- // Features:
- std::pair<FeatureIterator, FeatureIterator> getFeatures();
- FeatureIterator featureWithID(featid id);
- bool getFeatureLabel(FeatureIterator, lgid language, utf16 * label);
- FeatureSettingIterator getDefaultFeatureValue(FeatureIterator);
- std::pair<FeatureSettingIterator, FeatureSettingIterator> getFeatureSettings(FeatureIterator);
- bool getFeatureSettingLabel(FeatureSettingIterator, lgid language, utf16 * label);
-
- std::pair<FeatLabelLangIterator, FeatLabelLangIterator> getFeatureLabelLanguages();
-
- // Languages:
- std::pair<LanguageIterator, LanguageIterator> getSupportedLanguages();
-
- // Script directions, Verticle, LTR, RTL etc see enum ScriptDirCode
- // the posibilities. This returns a bit set where more than one scripts may
- // be set, it's up to the app to decide which is the prefered direction to use.
- ScriptDirCode getSupportedScriptDirections() const throw();
-
- // Debugging:
- //static bool DbgCheckFontCache();
-
- static FontMemoryUsage calculateMemoryUsage();
- ///FontMemoryUsage calculateMemoryUsage(bool fBold = false, bool fItalic = false);
-
-public:
- // For use in segment creation:
- void RenderLineFillSegment(Segment * pseg, ITextSource * pts, LayoutEnvironment & layout,
- toffset ichStart, toffset ichStop, float xsMaxWidth, bool fBacktracking);
- void RenderRangeSegment(Segment * pseg, ITextSource * pts, LayoutEnvironment & layout,
- toffset ichStart, toffset ichEnd);
- void RenderJustifiedSegment(Segment * pseg, ITextSource * pts, LayoutEnvironment & layout,
- toffset ichStart, toffset ichEnd, float xsCurrentWidth, float xsDesiredWidth);
-
-protected:
- Font();
- Font(const Font &);
-
- FontFace & fontFace(bool fDumbFallback = false);
-
- // Feature access:
- FeatureIterator BeginFeature();
- FeatureIterator EndFeature();
-
- size_t NumberOfFeatures();
- featid FeatureID(size_t ifeat);
- size_t FeatureWithID(featid id);
- bool GetFeatureLabel(size_t ifeat, lgid language, utf16 * label);
- int GetFeatureDefault(size_t ifeat);
- size_t NumberOfSettings(size_t ifeat);
- int GetFeatureSettingValue(size_t ifeat, size_t ifset);
- bool GetFeatureSettingLabel(size_t ifeat, size_t ifset, lgid language, utf16 * label);
-
- // Feature-label languages:
- FeatLabelLangIterator BeginFeatLang();
- FeatLabelLangIterator EndFeatLang();
-
- size_t NumberOfFeatLangs();
- short FeatLabelLang(size_t ilang);
-
- // Language access:
- LanguageIterator BeginLanguage();
- LanguageIterator EndLanguage();
-
- size_t NumberOfLanguages();
- isocode LanguageCode(size_t ilang);
-
- virtual void UniqueCacheInfo(std::wstring & stuFace, bool & fBold, bool & fItalic);
-
-private:
- FontFace * m_pfface; // set up with Graphite tables
-
- // Cache of common tables:
- const void * m_pHead;
- const void * m_pHmtx;
- const void * m_pLoca;
- const void * m_pGlyf;
- size_t m_cbHmtxSize;
- size_t m_cbLocaSize;
- bool m_fTablesCached;
-
- void initialiseFontFace(bool fDumbFallback);
- void EnsureTablesCached();
-};
-
-inline Font::Font() : m_pfface(0), m_fTablesCached(false)
-{ }
-
-} // namespace gr
-
-
-#endif // !FONT_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/GenericResource.h b/Build/source/libs/graphite-engine/include/graphite/GenericResource.h
deleted file mode 100644
index 119c6317bcd..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GenericResource.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GenericResource.h
-Responsibility: John Thomson
-Last reviewed:
-
- Resources needed by certain generic components (but must be created in app's or AppCore's
- resource file).
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GenericResource_H
-#define GenericResource_H 1
-// Create suitable resources for these if your app uses StackDumper.
-// For example
-// STRINGTABLE DISCARDABLE
-// BEGIN
-// "A programming error (%s) has been detected in module %s.\n Please report this to the developers", kstidInternalError
-// "Out of memory. To attempt Save, close other apps and click OK. To quit without saving click Cancel", kstidOutOfMemory
-// END
-
-
-// Date qualifier string IDs:
-#define kstidDateQualBefore 24200
-#define kstidDateQualOn 24201
-#define kstidDateQualAbout 24202
-#define kstidDateQualAfter 24203
-#define kstidDateQualAbt 24204
-#define kstidDateQualBC 24205
-#define kstidDateQualAD 24206
-#define kstidDateBlank 24207
-#define kstidDateBlankM 24208
-#define kstidDateBlankD 24209
-
-
-#define kstidInternalError 25900
-#define khcidHelpOutOfMemory 25901
-#define khcidNoHelpAvailable 25902 // default help module when there is no specific one.
-#define kstidOutOfMemory 25903
-#define kstidUndoFrame 25904
-#define kstidRedoFrame 25905
-
-#define kstidFileErrUnknown 25920
-#define kstidFileErrNotFound 25921
-#define kstidFileErrPathNotFound 25922
-#define kstidFileErrTooManyFiles 25923
-#define kstidFileErrAccDenied 25924
-#define kstidFileErrBadHandle 25925
-#define kstidFileErrBadDrive 25926
-#define kstidFileErrWriteProtect 25927
-#define kstidFileErrBadUnit 25928
-#define kstidFileErrNotReady 25929
-#define kstidFileErrSeek 25930
-#define kstidFileErrNotDosDisk 25931
-#define kstidFileErrBadSector 25932
-#define kstidFileErrWriteFault 25933
-#define kstidFileErrReadFault 25934
-#define kstidFileErrGeneral 25935
-#define kstidFileErrSharing 25936
-#define kstidFileErrLock 25937
-#define kstidFileErrEof 25938
-#define kstidFileErrHandleDiskFull 25939
-#define kstidFileErrBadNetPath 25940
-#define kstidFileErrNetworkBusy 25941
-#define kstidFileErrNoDevice 25942
-#define kstidFileErrNoNetAccess 25943
-#define kstidFileErrBadDevice 25944
-#define kstidFileErrBadNetName 25945
-#define kstidFileErrExists 25946
-#define kstidFileErrCantMake 25947
-#define kstidFileErrBadPassword 25948
-#define kstidFileErrNetWriteFault 25949
-#define kstidFileErrDriveLocked 25950
-#define kstidFileErrOpenFailed 25951
-#define kstidFileErrBufOverflow 25952
-#define kstidFileErrDiskFull 25953
-#define kstidFileErrBadName 25954
-#define kstidFileErrNoVolLabel 25955
-#define kstidFileErrAlreadyExists 25956
-
-#endif // !GenericResource_H
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrAppData.h b/Build/source/libs/graphite-engine/include/graphite/GrAppData.h
deleted file mode 100644
index 3a2024b8a10..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrAppData.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrAppData.h
-Responsibility: Sharon Correll
-Last reviewed: not yet
-
-Description:
- Data structures need by applications that use the Graphite engine.
-----------------------------------------------------------------------------------------------*/
-
-
-#ifndef GRAPPDATA_INCLUDED
-#define GRAPPDATA_INCLUDED
-
-#include "GrData.h"
-
-namespace gr
-{
-
-typedef unsigned int featid; // font feature IDs
-typedef unsigned int lgid; // language ID (for access feature UI strings)
-typedef unsigned int toffset; // text-source index
-
-typedef struct { // ISO-639-3 language code (for mapping onto features)
- char rgch[4];
-} isocode;
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // GRAPPDATA_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrClient.h b/Build/source/libs/graphite-engine/include/graphite/GrClient.h
deleted file mode 100644
index 0ef5127c81a..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrClient.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef GR_CLIENT_H
-#define GR_CLIENT_H
-
-#include "GrCommon.h"
-#include "GrConstants.h"
-
-#define __RPC_FAR
-
-namespace gr
-{
-
-// These are internal classes, whose forward declarations are needed to allow the public interfaces
-// to compile but are not intended for client use.
-class GrSlotState;
-class GrSlotStream;
-class GrGlyphTable;
-class GrClassTable;
-class GrTableManager;
-class GrPseudoMap;
-class GrFileIStream;
-class GrSlotOutput;
-class GrCharStream;
-class GrIStream;
-
-// Forward declarations of client APIs and classes.
-class Segment;
-}
-
-#include "GrAppData.h"
-#include "GrResult.h"
-#include "GrFeature.h"
-
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif //GR_CLIENT_H
-
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrCommon.h b/Build/source/libs/graphite-engine/include/graphite/GrCommon.h
deleted file mode 100644
index 8bb5728ecb3..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrCommon.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001, 2003 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrCommon.h
-Responsibility: Sharon Correll
-Last reviewed:
-
- Common generic header file.
-
- This header file checks for the following compile time switches:
-
- USING_MFC
-----------------------------------------------------------------------------------------------*/
-
-#ifndef GRCOMMON_INCLUDED
-#define GRCOMMON_INCLUDED
-
-
-// Standard Headers.
-
-#include <cstdlib>
-#include <cstdio>
-#include <cstdarg>
-#include <climits>
-//#include <exception>
-#include <new>
-
-#include <fstream>
-#include <iostream>
-#include <vector>
-#include <algorithm>
-#include <string>
-
-// Uncomment this to allow multiple versions of gr to coexist
-// in the same program e.g. pangographite with gtk uses namespace gr
-// mozilla graphite defines this to gr2moz incase the 2 libraries are
-// incompatible.
-// Provided the client includes GrClient.h first this #define is
-// picked up by all files.
-
-//#define gr gr2
-
-// Project headers
-#include "GrPlatform.h"
-
-#ifndef GrAssert
-#include <cassert>
-#define GrAssert(exp) assert(exp)
-#endif
-
-using std::max;
-using std::min;
-
-namespace gr
-{
-
-
-/***********************************************************************************************
- Simple types.
-***********************************************************************************************/
-typedef char schar;
-
-// TODO ShonK: Make generic use these where appropriate.
-#ifdef UNICODE
-typedef utf16 achar;
-#else // !UNICODE
-typedef schar achar;
-#endif // UNICODE
-
-typedef achar *Psz;
-//typedef const achar * Pcsz;
-
-
-
-// This is to make a signed isizeof operator, otherwise we get tons of warnings about
-// signed / unsigned mismatches.
-#define isizeof(T) (sizeof(T))
-
-#define SizeOfArray(rgt) (isizeof(rgt) / isizeof(rgt[0]))
-
-
-/***********************************************************************************************
- Tests for valid strings and pointers.
-***********************************************************************************************/
-inline bool ValidPsz(const data16 *pszw)
-{
- // TODO ShonK: Determine if IsBadStringPtrW is implemented on Win9x.
- return pszw != 0 && !GrIsBadStringPtrW(pszw, 0x10000000);
-}
-
-inline bool ValidPsz(const schar *pszs)
-{
- return pszs != 0 && !GrIsBadStringPtrA(pszs, 0x10000000);
-}
-
-template<typename T> inline bool ValidReadPtr(T *pt)
-{
- return pt != 0 && !GrIsBadReadPtr(pt, isizeof(T));
-}
-
-template<typename T> inline bool ValidWritePtr(T *pt)
-{
- return pt != 0 && !GrIsBadWritePtr(pt, isizeof(T));
-}
-
-inline bool ValidReadPtrSize(const void *pv, int cb)
-{
- if (cb < 0) return false;
- if (cb == 0) return true;
-
- return pv != 0 && !GrIsBadReadPtr(pv, cb);
-}
-
-inline bool ValidWritePtrSize(void *pv, int cb)
-{
-// if (!bstr || ::IsBadReadPtr((byte *)bstr - isizeof(int), isizeof(int) + isizeof(OLECHAR)))
-// return false;
-// int cb = ((int *)bstr)[-1];
-// if (::IsBadReadPtr((byte *)bstr - isizeof(int), isizeof(int) + isizeof(OLECHAR) + cb))
-// return false;
- if (cb < 0) return false;
- if (cb == 0) return true;
-
- return pv != 0 && !GrIsBadWritePtr(pv, cb);
-}
-
-
-} // namespace gr
-
-
-// TODO Remove these as soon as they are no longer needed by GrCompiler:
-//#include "UtilMem.h"
-//#include "UtilRect.h"
-//#include "UtilString.h"
-//#include "UtilVector.h"
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !GRCOMMON_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrConstants.h b/Build/source/libs/graphite-engine/include/graphite/GrConstants.h
deleted file mode 100644
index 61f79b88022..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrConstants.h
+++ /dev/null
@@ -1,268 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: constants.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Various global constants.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRCONSTANTS_INCLUDED
-#define GRCONSTANTS_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-// Maximum table versions handled by this engine:
-enum {
-
- kSilfVersion = 0x00030000,
- kRuleVersion = 0x00030000,
- kGlatVersion = 0x00010000,
- kGlocVersion = 0x00010000,
- kFeatVersion = 0x00020000,
- kSileVersion = 0x00010000,
- kSillVersion = 0x00010000
-
-};
-
-enum {
-
- kMaxFeatures = 64,
- kMaxComponentsPerGlyph = 32,
- kFieldsPerComponent = 4,
- kMaxSlotsPerRule = 64,
- kMaxSubTablesInFont = 256,
- kMaxUserDefinableSlotAttrs = 64,
- kMaxJLevels = 4
-
-};
-
-// Maxima permitted by the binary format of the TrueType tables.
-enum {
-
- kMaxSubTables = 256,
- kMaxRenderingBehavior = 65536, // ie, the maximum value allowed for an ID
- kMaxGlyphAttrs = 65536, // Gloc table
- kMinGlyphAttrValue =-32768,
- kMaxGlyphAttrValue = 32768,
- kMaxPasses = 128, // Sil_sub table allows 256
- kMaxPseudos = 65536,
- kMaxRendBehaviors = 256,
- kMaxReplcmtClasses = 65536, // Class map
- kMaxReplcmtClassesV1_2 = 256,
- kMaxComponents = 16383
-
-};
-
-
-enum {
-
- kPosInfinity = 0x3FFFFFF,
- kNegInfinity = kPosInfinity * -1,
-
- kInvalid = kNegInfinity
-
-};
-
-#define kPosInfFloat (float)kPosInfinity
-#define kNegInfFloat (float)kNegInfinity
-
-
-enum {
- kGpointZero = -2
-};
-
-
-// for stream processing
-enum {
- kBacktrack = -2,
- kNextPass = -1
-};
-
-
-// internal justification modes
-enum {
- kjmodiNormal = 0,
- kjmodiMeasure,
- kjmodiJustify,
- kjmodiCanShrink // like normal, but shrinking is possible
-};
-
-
-enum DirCode { // Hungarian: dirc
-
- kdircUnknown = -1,
- kdircNeutral = 0, // other neutrals (default) - ON
- kdircL = 1, // left-to-right, strong - L
- kdircR = 2, // right-to-left, strong - R
- kdircRArab = 3, // Arabic letter, right-to-left, strong, AR
- kdircEuroNum = 4, // European number, left-to-right, weak - EN
- kdircEuroSep = 5, // European separator, left-to-right, weak - ES
- kdircEuroTerm = 6, // European number terminator, left-to-right, weak - ET
- kdircArabNum = 7, // Arabic number, left-to-right, weak - AN
- kdircComSep = 8, // Common number separator, left-to-right, weak - CS
- kdircWhiteSpace = 9, // white space, neutral - WS
- kdircBndNeutral = 10, // boundary neutral - BN
-
- kdircLRO = 11, // LTR override
- kdircRLO = 12, // RTL override
- kdircLRE = 13, // LTR embedding
- kdircRLE = 14, // RTL embedding
- kdircPDF = 15, // pop directional format
-
- // I think we need this too:
- kdircNSM = 16, // non-space mark
-
- // Special values for internal use:
- kdircLlb = 32, // left-to-right line-break
- kdircRlb = 33, // right-to-left line-break
- kdircPdfL = 34, // PDF marker matching an LRO or LRE
- kdircPdfR = 35 // PDF marker matching an RLO or RLE
-
-};
-
-
-bool StrongDir(DirCode dirc);
-bool WeakDir(DirCode dirc);
-bool NeutralDir(DirCode dirc);
-bool RightToLeftDir(DirCode dirc);
-
-
-// Unicode characters with special treatments
-enum DefinedChars {
-
- knSpace = 0x0020, // space
- knHyphen = 0x002D, // hyphen
-
- knTab = 0x0009, // tab (horizontal)
- knLF = 0x000A, // line feed
- knCR = 0x000D, // carriage return
- knLineSep = 0x2028, // line separator (soft return)
- knParaSep = 0x2029, // paragraph separator
-
- knLRM = 0x200E, // left-to-right mark
- knRLM = 0x200F, // right-to-left mark
- knLRE = 0x202A, // left-to-right embedding
- knRLE = 0x202B, // right-to-left embedding
- knPDF = 0x202C, // pop directional format
- knLRO = 0x202D, // left-to-right override
- knRLO = 0x202E, // right-to-left override
-
- knORC = 0xFFFC // Object Replacement Character
-};
-
-bool BidiCode(int nUnicode);
-
-
-typedef enum SpecialSlots {
-
- kspslNone = 0,
-
- kspslLbInitial = 1,
- kspslLbFinal = 2,
-
- kspslLRM = 3,
- kspslRLM = 4,
- kspslLRO = 5,
- kspslRLO = 6,
- kspslLRE = 7,
- kspslRLE = 8,
- kspslPDF = 9
-
-} SpecialSlots;
-
-
-// version 1.0 breakweights
-enum BreakWeightsV1
-{
- klbv1WordBreak = 1,
- klbv1HyphenBreak = 2,
- klbv1LetterBreak = 3,
- klbv1ClipBreak = 4
-};
-
-
-typedef enum SlotAttrName {
-
- kslatAdvX = 0, kslatAdvY,
- kslatAttTo,
- kslatAttAtX, kslatAttAtY, kslatAttAtGpt,
- kslatAttAtXoff, kslatAttAtYoff,
- kslatAttWithX, kslatAttWithY, kslatAttWithGpt,
- kslatAttWithXoff, kslatAttWithYoff,
- kslatAttLevel,
- kslatBreak,
- kslatCompRef,
- kslatDir,
- kslatInsert,
- kslatPosX, kslatPosY,
- kslatShiftX, kslatShiftY,
- kslatUserDefnV1, // version 1.0 of the font tables
- kslatMeasureSol, kslatMeasureEol,
- kslatJStretch, kslatJShrink, kslatJStep, kslatJWeight, kslatJWidth,
- // this must be last:
- kslatUserDefn = kslatJStretch + 30,
- // I think 30 is somewhat arbitrary. We at least need to save 15 slots for more levels of
- // justification attributes.
-
- kslatMax,
-
- kslatNoEffect = kslatMax + 1 // for internal use
-} SlotAttrName;
-
-
-typedef enum GlyphMetric {
- kgmetLsb = 0, kgmetRsb,
- kgmetBbTop, kgmetBbBottom, kgmetBbLeft, kgmetBbRight,
- kgmetBbHeight, kgmetBbWidth,
- kgmetAdvWidth, kgmetAdvHeight,
- kgmetAscent, kgmetDescent
-} GlyphMetric;
-
-
-enum ProcessStates
-{
- kpstatJustifyMode = 1,
- kpstatJustifyLevel = 2
-};
-
-// user justification modes: these must match the values in stddef.gdh
-enum JustifyModes
-{
- kjmoduNormal = 0,
- kjmoduMeasure = 1,
- kjmoduJustify = 2
-};
-
-enum TruetypeTableId {
- kttiCmap = 0x636D6170,
- kttiFeat = 0x46656174,
- kttiGlat = 0x476C6174,
- kttiGloc = 0x476C6F63,
- kttiGlyf = 0x676C7966,
- kttiHead = 0x68656164,
- kttiHhea = 0x68686561,
- kttiHmtx = 0x686D7478,
- kttiLoca = 0x6C6F6361,
- kttiMaxp = 0x6D617870,
- kttiName = 0x6E616D65,
- kttiOs2 = 0x4F532F32,
- kttiPost = 0x706F7374,
- kttiSile = 0x53696C65,
- kttiSilf = 0x53696C66,
- kttiSill = 0x53696C6C
-};
-
-} // namespace gr
-
-#endif // CONSTANTS_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrData.h b/Build/source/libs/graphite-engine/include/graphite/GrData.h
deleted file mode 100644
index 3624ca9c271..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrData.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrData.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Data structures needed by the Graphite engine, particularly for argument passing.
- NOT to be used within FieldWorks.
-
-Special Note:
- This file needs to be used by C files. Please do not use C++ style comments; use
- ONLY C style comments in this file to make the C compiler happy.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRDATA_INCLUDED
-#define GRDATA_INCLUDED
-
-#include "GrCommon.h"
-
-/*
-//:End Ignore
- */
-
-#include "GrStructs.h"
-
-namespace gr
-{
-
-struct Point
-{
- float x;
- float y;
-
- Point()
- {
- x = y = 0;
- }
-
-#if defined(_WIN32)
- Point(POINT & p)
- {
- x = (float)p.x;
- y = (float)p.y;
- }
-#endif
-};
-
-
-struct Rect
-{
- float top;
- float bottom;
- float left;
- float right;
-
- Rect()
- {
- top = bottom = left = right = 0;
- };
-
-#if defined(_WIN32)
- Rect(RECT & r)
- {
- top = (float)r.top;
- bottom = (float)r.bottom;
- left = (float)r.left;
- right = (float)r.right;
- };
-#endif
-};
-
-enum {
- kttvOff = 0,
- kttvForceOn = 1,
- kttvInvert = 2
-};
-
-//typedef struct tagLgParaRenderProps
-//{
-// int dummy;
-//} LgParaRenderProps;
-
-typedef enum tagSegEnd
-{ kestNoMore = 0,
- kestMoreLines = kestNoMore + 1,
- kestHardBreak = kestMoreLines + 1,
- kestBadBreak = kestHardBreak + 1,
- kestOkayBreak = kestBadBreak + 1,
- kestWsBreak = kestOkayBreak + 1,
- kestMoreWhtsp = kestWsBreak + 1,
- kestNothingFit = kestMoreWhtsp + 1
-} SegEnd;
-
-typedef enum tagLgIPDrawMode // TODO: remove
-{ kdmNormal = 0,
- kdmSplitPrimary = kdmNormal + 1,
- kdmSplitSecondary = kdmSplitPrimary + 1
-} LgIPDrawMode;
-
-typedef enum tagLgIpValidResult
-{ kipvrOK = 0,
- kipvrBad = kipvrOK + 1,
- kipvrUnknown = kipvrBad + 1
-} LgIpValidResult;
-
-typedef enum tagLineBrk
-{ klbNoBreak = 0,
- klbWsBreak = 10,
- klbWordBreak = 15,
- klbHyphenBreak = 20,
- klbLetterBreak = 30,
- klbClipBreak = 40
-} LineBrk;
-
-typedef enum tagTrWsHandling
-{ ktwshAll = 0,
- ktwshNoWs = ktwshAll + 1,
- ktwshOnlyWs = ktwshNoWs + 1
-} TrWsHandling;
-
-typedef enum tagUtfType
-{
- kutf8 = 0,
- kutf16 = kutf8 + 1,
- kutf32 = kutf16 + 1
-} UtfType;
-
-enum tagFlushMode
-{
- kflushAuto = 0,
- kflushManual = kflushAuto + 1
-};
-
-typedef enum ScriptDirCode
-{ kfsdcNone = 0,
- kfsdcHorizLtr = 1,
- kfsdcHorizRtl = 2,
- kfsdcVertFromLeft = 4,
- kfsdcVertFromRight = 8
-} ScriptDirCode;
-
-typedef enum tagFwTextColor
-{ kclrWhite = 0xffffff,
- kclrBlack = 0,
- kclrRed = 0x0000ff,
- kclrGreen = 0x00ff00,
- kclrBlue = 0xff0000,
-/*
-// kclrYellow = 0x00ffff,
-// kclrMagenta = 0xff00ff,
-// kclrCyan = 0xffff00,
- */
- kclrReserved1 = 0x80000000,
- kclrReserved2 = 0x80000001,
- kclrTransparent = 0xc0000000
-} FwTextColor;
-
-
-typedef enum FwSuperscriptVal
-{ kssvOff = 0,
- kssvSuper = 1,
- kssvSub = 2
-} FwSuperscriptVal;
-
-
-// Glyph attributes for justification
-typedef enum tagJustGlyphAttr
-{
- kjgatStretch = 1,
- kjgatShrink,
- kjgatWeight,
- kjgatStep,
- kjgatChunk,
- kjgatWidth,
- kjgatBreak,
- // pseudo-attributes for handling steps:
- kjgatStretchInSteps,
- kjgatWidthInSteps,
- // also metrics:
- kjgatAdvWidth,
- kjgatAdvHeight,
- kjgatBbLeft,
- kjgatBbRight,
- kjgatBbTop,
- kjgatBbBottom
-} JustGlyphAttr; // Hungarian: jgat
-
-class GrSlotState;
-typedef union {
- int nValue;
- GrSlotState *pslot;
-} u_intslot;
-
-/*****
-#undef ATTACH_GUID_TO_CLASS
-#if defined(__cplusplus)
-#define ATTACH_GUID_TO_CLASS(type, guid, cls) \
- type __declspec(uuid(#guid)) cls;
-#else // !defined(__cplusplus)
-#define ATTACH_GUID_TO_CLASS(type, guid, cls)
-#endif // !defined(__cplusplus)
-
-#ifndef DEFINE_COM_PTR
-#define DEFINE_COM_PTR(cls)
-#endif
-
-#undef GENERIC_DECLARE_SMART_INTERFACE_PTR
-#define GENERIC_DECLARE_SMART_INTERFACE_PTR(cls, iid) \
- ATTACH_GUID_TO_CLASS(interface, iid, cls); \
- DEFINE_COM_PTR(cls);
-*****/
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif /* !GRDATA_INCLUDED */
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrDebug.h b/Build/source/libs/graphite-engine/include/graphite/GrDebug.h
deleted file mode 100644
index dc02fac0134..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrDebug.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: debug.h
-Responsibility:
-Last reviewed:
-
-Description:
- Assert and debug definitions.
-----------------------------------------------------------------------------------------------*/
-
-#ifndef __DEBUG_H__
-#define __DEBUG_H__
-
-#include <cassert>
-
-namespace gr
-{
-
-#ifdef _DEBUG
- #undef DEBUG
- #define DEBUG 1
- #undef NDEBUG
- #define DEFINE_THIS_FILE static char THIS_FILE[] = __FILE__;
- #undef THIS_FILE
- #define THIS_FILE __FILE__
-#else //!_DEBUG
- #undef DEBUG
- #define DEFINE_THIS_FILE
-
- //#define Debug(foo)
-#endif //!_DEBUG
-
-#if 0
-//#ifdef DEBUG
-
-//#include <windows.h>
-
- typedef void (WINAPI * Pfn_Assert)(const char * pszExp, const char * pszFile, int nLine,
- HMODULE hmod);
- typedef Pfn_Assert Pfn_Warn;
-
- /*__declspec(dllimport)*/ void WINAPI WarnProc(const char * pszExp, const char * pszFile,
- int nLine, bool fCritical, HMODULE hmod);
- /*__declspec(dllimport)*/ void WINAPI AssertProc(const char * pszExp, const char * pszFile,
- int nLine, bool fCritical, HMODULE hmod);
-
- __declspec(dllimport) Pfn_Assert WINAPI SetAssertProc(Pfn_Assert pfnAssert);
- __declspec(dllimport) Pfn_Warn WINAPI SetWarnProc(Pfn_Warn pfnWarn);
- __declspec(dllimport) int WINAPI HideWarnings(bool f);
- __declspec(dllimport) int WINAPI HideAsserts(bool f);
- __declspec(dllimport) int WINAPI HideErrors(bool f);
-
- void WINAPI WarnHrProc(HRESULT hr, const char * pszFile, int nLine, bool fCritical);
- void WINAPI WarnProcLocal(const char * pszExp, const char * pszFile, int nLine,
- bool fCritical);
- void WINAPI AssertProcLocal(const char * pszExp, const char * pszFile, int nLine,
- bool fCritical);
-
- #define Assert(exp) ((exp) || (AssertProcLocal(#exp, THIS_FILE, __LINE__, false), 0))
- #define AssertC(exp) ((exp) || (AssertProcLocal(#exp, THIS_FILE, __LINE__, true), 0))
- #define AssertMsg(exp, msg) ((exp) || (AssertProcLocal(msg, THIS_FILE, __LINE__, false), 0))
- #define AssertMsgC(exp, msg) ((exp) || (AssertProcLocal(msg, THIS_FILE, __LINE__, true), 0))
-
- #undef Warn
- #define Warn(psz) (void)(WarnProcLocal(psz, THIS_FILE, __LINE__, false))
- #define WarnC(psz) (void)(WarnProcLocal(psz, THIS_FILE, __LINE__, true))
-
- #undef WarnIf
- #define WarnIf(exp) (void)(!(exp) || (WarnProcLocal("(" #exp ") is true", THIS_FILE, \
- __LINE__, false), 0))
- #define WarnIfC(exp) (void)(!(exp) || (WarnProcLocal("(" #exp ") is true", THIS_FILE, \
- __LINE__, true), 0))
-
- #undef WarnUnless
- #define WarnUnless(exp) (void)((exp) || (WarnProcLocal("(" #exp ") is false", \
- THIS_FILE, __LINE__, false), 0))
- #define WarnUnlessC(exp) (void)((exp) || (WarnProcLocal("(" #exp ") is false", \
- THIS_FILE, __LINE__, true), 0))
-
- #undef WarnHr
- #define WarnHr(hr) ((SUCCEEDED(hr) || (WarnHrProc(hr, THIS_FILE, __LINE__, false), 0)), \
- (hr))
- #define WarnHrC(hr) ((SUCCEEDED(hr) || (WarnHrProc(hr, THIS_FILE, __LINE__, true), 0)), \
- (hr))
-
- class IgnoreWarnings
- {
- public:
- IgnoreWarnings()
- { HideWarnings(true); }
- ~IgnoreWarnings()
- { HideWarnings(false); }
- };
-
- class IgnoreAsserts
- {
- public:
- IgnoreAsserts()
- { HideAsserts(true); }
- ~IgnoreAsserts()
- { HideAsserts(false); }
- };
-
- class IgnoreErrors
- {
- private:
- IgnoreWarnings iw;
- IgnoreAsserts ia;
- };
-
- #define Debug(exp) exp
- #define DoAssert(exp) Assert(exp)
- #define DoAssertC(exp) AssertC(exp)
- #define DoAssertHr(hr) Assert(SUCCEEDED(hr))
- #define DoAssertHrC(hr) AssertC(SUCCEEDED(hr))
-#else
- #define Assert(exp) assert(exp)
- #define AssertC(exp)
- #define AssertMsg(exp, msg)
- #define AssertMsgC(exp, msg)
- #define Warn(psz)
- #define WarnC(psz)
- #define WarnIf(exp)
- #define WarnIfC(exp)
- #define WarnUnless(exp)
- #define WarnUnlessC(exp)
- #define WarnHr(hr) (hr)
- #define WarnHrC(hr) (hr)
- #define Debug(exp)
- #define DoAssert(exp) (exp)
- #define DoAssertC(exp) (exp)
- #define DoAssertHr(hr) (hr)
- #define DoAssertHrC(hr) (hr)
-#endif //DEBUG
-
-#define AssertPtr(pv) Assert(ValidReadPtr(pv))
-#define AssertPtrN(pv) Assert(!(pv) || ValidReadPtr(pv))
-#define AssertArray(pv, cv) Assert((cv) >= 0 && ValidReadPtrSize((pv), isizeof(*(pv)) * (cv)))
-#define AssertArrayN(pv, cv) Assert((cv) >= 0 && (!(pv) || ValidReadPtrSize((pv), isizeof(*(pv)) * (cv))))
-#define AssertPtrSize(pv, cb) Assert((cb) >= 0 && ValidReadPtrSize((pv), cb))
-
-#define AssertPfn(pfn) Assert(!IsBadCodePtr((FARPROC)(pfn)))
-#define AssertPfnN(pfn) Assert(!(pfn) || !IsBadCodePtr((FARPROC)(pfn)))
-
-#define AssertPsz(psz) Assert(ValidPsz(psz))
-#define AssertPszN(psz) Assert(!(psz) || ValidPsz(psz))
-
-#define AssertBstr(bstr) Assert(ValidBstr(bstr))
-#define AssertBstrN(bstr) Assert(!(bstr) || ValidBstr(bstr))
-
-#define AssertObj(pv) Assert(ValidReadPtr(pv) && (pv)->AssertValid())
-#define AssertObjN(pv) Assert(!(pv) || ValidReadPtr(pv) && (pv)->AssertValid())
-
-/*----------------------------------------------------------------------------------------------
- This class implements custom output to the debugger. The results of Watch() can be
- viewed on a line in the Watch window. Output() writes to the Debugger Output window.
- Calls to Output() should be included in the Watch() function as needed. Watch()
- is executed every time the debugger displays this class in the Watch window.
- To use it:
-
- 1) Put the following line in:
- \program files\Microsoft Visual Studio\Common\MSDev98\bin\AutoExp.dat
- in the [AutoExpand] section:
- DebugWatch=<WatchNV(),su>
-
- 2) In the class from which you want custom debug output, add the equivalent of:
- #ifdef DEBUG
- class Dbw1 : public DebugWatch { virtual OLECHAR * Watch(); ... };
- Dbw1 m_dbw1;
- #endif //DEBUG
-
- 3) Implement the Watch() function to display the data you want to see, bracketed by
- #ifdef DEBUG / #endif. Note that Output() is LIMITED to 10 pointer-sized arguments.
- If you must have more, then call _CrtDbgReport() directly. Note also that
- _CrtDbgReport() is not implemented for wide characters, so neither is Output().
-----------------------------------------------------------------------------------------------*/
-#if 0
-//#ifdef DEBUG
-class DebugWatch
-{
-public:
- int m_nSerial; // increment and display this for positive affirmation of refresh
- DebugWatch() { m_nSerial = 0; }
- OLECHAR * WatchNV(); // debugger won't find it if it is virtual or inline.
- virtual OLECHAR * Watch() { return L"No DebugWatch string implemented"; }
- void Output (char *fmt, ...); // LIMITED to 10 pointer-sized arguments
-};
-#endif //DEBUG
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrExt.h b/Build/source/libs/graphite-engine/include/graphite/GrExt.h
deleted file mode 100644
index 518683db29e..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrExt.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001, 2003 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrHelperClases.h
-Responsibility: Sharon Correll
-Last reviewed:
-
- External helper classes to be included in the open-source version of the Graphite DLL.
- Currently there are none.
-----------------------------------------------------------------------------------------------*/
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrFeature.h b/Build/source/libs/graphite-engine/include/graphite/GrFeature.h
deleted file mode 100644
index 4cc396a11d9..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrFeature.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrFeature.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
-
-Note:
- The body of methods not complete contained in this file are located in GrEngine.cpp.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_FEATURE_INCLUDED
-#define GR_FEATURE_INCLUDED
-
-//:End Ignore
-
-#include "GrAppData.h"
-
-namespace gr
-{
-
-
-/*----------------------------------------------------------------------------------------------
- A valid setting and its UI labels in potentially various languages.
-
- Hungarian: fset
-----------------------------------------------------------------------------------------------*/
-/****
-class GrFeatureSetting
-{
- friend class GrFeature;
-public:
- GrFeatureSetting()
- {
- m_hmnstuLabels.Clear();
- }
- GrFeatureSetting(GrFeatureSetting & fset)
- {
- m_hmnstuLabels.Clear();
- }
-protected:
- int m_nVal;
- HashMap<int, std::wstring> m_hmnstuLabels;
-};
-****/
-
-class GrEngine;
-
-/*----------------------------------------------------------------------------------------------
- Each Graphite feature defines a way to customize or parameterize the rendering processs.
-
- Hungarian: feat
-----------------------------------------------------------------------------------------------*/
-class GrFeature
-{
- //friend class GrFeatureSetting;
-public:
- enum {
- knLangFeatV2 = 1
- };
-
- GrFeature()
- {
- m_vnVal.clear();
- m_vnNameId.clear();
- }
-
- void Initialize(featid nID, int nNameId, int cfset, int nDefault = 0);
-
- featid ID()
- {
- return m_nID;
- }
-
- int DefaultValue()
- {
- return m_nDefault;
- }
-
- void SetDefault(int nDefault)
- {
- m_nDefault = nDefault;
- }
-
- int NameId()
- {
- return m_nNameId;
- }
-
- void SetNameId(int n)
- {
- m_nNameId = n;
- }
-
- int NumberOfSettings()
- {
- return (int)m_vnVal.size();
- }
-
- int Settings(int cMax, int * prgnVal);
- void AddSetting(int nVal, int nNameId);
- bool IsValidSetting(int nVal);
- std::wstring Label(GrEngine * pgreng, int nLang);
- std::wstring SettingLabel(GrEngine * pgreng, int nVal, int nLang);
- int NthSetting(int ifset);
- std::wstring NthSettingLabel(GrEngine * pgreng, int ifset, int nLang);
-// void SetSettingLabel(int nVal, std::wstring stuLabel, int nLang);
-
-protected:
- featid m_nID;
- int m_nDefault;
- int m_nNameId;
-// HashMap<int, std::wstrng> m_hmnstuLabels;
-
- // These are parallel arrays. The first gives the setting value for a given feature,
- // the second gives the index into the name table that is used to read UI strings.
- std::vector<int> m_vnVal;
- std::vector<int> m_vnNameId;
-};
-
-
-/*----------------------------------------------------------------------------------------------
- GrLangTable handles looking up language information.
- GrEngine has one instance of this class.
- Hungarian: langtbl
-----------------------------------------------------------------------------------------------*/
-class GrIStream;
-
-class GrLangTable
-{
- friend class FontMemoryUsage;
-
-public:
- GrLangTable()
- {
- m_prglang = NULL;
- m_clang = 0;
- m_prgfset = NULL;
- }
- ~GrLangTable()
- {
- delete[] m_prglang;
- delete[] m_prgfset;
- }
-
- bool ReadFromFont(GrIStream * pgrstrm, int fxdVersion);
- void CreateEmpty();
-
- size_t NumberOfLanguages()
- {
- return m_clang;
- }
- void LanguageFeatureSettings(isocode lgcode,
- std::vector<featid> & vnFeatId, std::vector<int> & vnValues);
- isocode LanguageCode(size_t ilang);
-
-protected:
- size_t m_clang;
- // constants for fast binary search of language list
- data16 m_dilangInit; // (max power of 2 <= m_clang);
- // size of initial range to consider
- data16 m_cLoop; // log2(max power of 2 <= m_clang);
- // indicates how many iterations are necessary
- data16 m_ilangStart; // m_clang - m_dilangInit;
- // where to start search
-
- struct LangEntry
- {
- char rgchCode[4];
- data16 cFeaturesBIG; // big endian
- data16 cbOffsetBIG; // big endian
- };
- LangEntry * m_prglang;
- int m_cbOffset0; // offset of first entry
-
- struct FeatSet
- {
- featid featidBIG; // big endian
- data16 valueBIG; // big endian
- data16 padBIG;
- };
- FeatSet * m_prgfset;
- int m_cfset; // needed for memory instrumentation only
-
- int FindIndex(isocode lgcode);
-};
-
-} // namespace gr
-
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-
-#endif // !GR_FEATURE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrMstypes.h b/Build/source/libs/graphite-engine/include/graphite/GrMstypes.h
deleted file mode 100644
index 2fc9f108009..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrMstypes.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef _MSTYPES_H
-#define _MSTYPES_H
-/********
-This header contains the MS Win32 specific types that are still used
-throughout the Graphite code.
-
-It is intended to allow Graphite to build on non-Win32 platforms.
-
- **Do NOT include this when building against WIN32**
-
- TSE - 15/07/2003
-********/
-
-#if defined(_WIN32)
- #error Do not include this header when building against Win32 APIs
-#else
-
-#if defined(GR_NAMESPACE)
-namespace gr
-{
-#endif
-
-typedef wchar_t OLECHAR;
-
-typedef signed long HRESULT;
-
-inline const long InterlockedIncrement(long *const intr_lck) {
- return ++*intr_lck;
-}
-
-inline const long InterlockedDecrement(long *const intr_lck) {
- return --*intr_lck;
-}
-
-#if defined(GR_NAMESPACE)
-}
-#endif
-
-#endif // defined(_WIN32)
-#endif // include guard
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrPlatform.h b/Build/source/libs/graphite-engine/include/graphite/GrPlatform.h
deleted file mode 100644
index d72abbc6412..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrPlatform.h
+++ /dev/null
@@ -1,189 +0,0 @@
-#ifndef _GR_PLATFORM_H
-#define _GR_PLATFORM_H
-
-/***********************************************************************************************
- Turn off the goofy warnings for MS VisualStudio.
-***********************************************************************************************/
-#ifdef _MSC_VER
-#pragma warning(disable: 4065) // Switch statement contains default but no case.
-#pragma warning(disable: 4097) // typedef-name 'xxx' used as synonym for class-name 'yyy'.
-#pragma warning(disable: 4100) // unreferenced formal parameter.
-#pragma warning(disable: 4127) // conditional expression is constant
-#pragma warning(disable: 4192) // automatically excluding while importing.
-#pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union.
-#pragma warning(disable: 4290) // exception specification ignored.
-#pragma warning(disable: 4310) // cast truncates constant value.
-#pragma warning(disable: 4355) // 'this' used in base member initializer list.
-#pragma warning(disable: 4505) // unreferenced local function has been removed.
-#pragma warning(disable: 4510) // default constructor could not be generated - caused by
- // applying ComSmartPtr to a non-interface class.
-#pragma warning(disable: 4511) // copy constructor could not be generated.
-#pragma warning(disable: 4512) // assignment operator could not be generated.
-#pragma warning(disable: 4610) // class 'xxx' can never be instantiated - user defined
- // constructor required - caused by applying ComSmartPtr to a non-interface class.
-#pragma warning(disable: 4660) // template-class specialization is already instantiated.
-#pragma warning(disable: 4701) // local variable 'xxx' may be used without being initialized.
- // We would like to keep this warning (4701) enabled but the compiler applies it in
- // places that are obviously OK.
-#pragma warning(disable: 4702) // unreachable code. We would like to keep this warning (4702)
- // enabled but the compiler applies it in places that are obviously OK.
-#pragma warning(disable: 4706) // assignment in conditional expression
-#pragma warning(disable: 4710) // not inlined.
-#pragma warning(disable: 4786) // identifier truncated in debug info.
-#pragma warning(disable: 4800) // forcing value to bool 'true' or 'false' (performance warning).
-#endif
-
-
-// Standard headers
-#include <stddef.h>
-
-// Platform headers
-//
-#if defined(_WIN32)
-#include <windows.h>
-#include <tchar.h>
-
-#ifdef SIZEOF_WCHAR_T
-#define SIZEOF_WCHAR_T 2
-#endif
-
-#endif
-
-// Project headers
-#if defined(_WIN32)
-#include <algorithm>
-#endif
-#include <iostream>
-
-
-#if defined(_WIN32)
-// TSE: We need to define std::max and std::min, because VC6.0 seems to omit
-// these from their version of <algorithm> and rely on the macro versions
-// to silently take their place. This breaks the use of the name max in any
-// other scope e.g. as in std::numeric_limits<..>::max().
-
-#undef min
-#undef max
-
-// SJC: Only do this for version 6, otherwise the definitions conflict with the
-// built-in STL definitions, and the compiler really struggles.
-#if _MSC_VER == 1200 // VC version 6
-namespace std
-{
- template<typename T> inline T max(const T a, const T b) { return a < b ? b : a; }
- template<typename T> inline T min(const T a, const T b) { return a > b ? b : a; }
-}
-#endif // _MSC_VER == 1200
-//////using std::max; // SJC moved to GrCommon.h
-//////using std::min;
-#endif // _WIN32
-
-
-namespace gr
-{
-
-// Typedefs
-// These are correct for the x86_64 architecture too.
-typedef unsigned char byte;
-typedef unsigned int utf32; // UTF32 encoded Unicode codepoints
-typedef unsigned short int utf16; // UTF16 encoded Unicode codepoints
-typedef unsigned char utf8; // UTF-8 encoded Unicode codepoints
-typedef unsigned short int gid16; // glyph ID
-typedef unsigned int fontTableId32; // ID to pass to getTable()
-
-typedef unsigned char data8;
-typedef unsigned short int data16; // generic 16-bit data
-typedef unsigned int data32; // generic 32-bit data
-typedef signed char sdata8;
-typedef signed short int sdata16; // generic 16-bit data
-typedef signed int sdata32; // generic 32-bit data
-
-#ifndef NO_ASM
-#define NO_ASM
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-// std::_Ios_Openmode isn't defined in the Windows compiler
-#if !defined(_WIN32)
- typedef std::ios_base::openmode openmode_t;
-#else
- typedef int openmode_t;
-#endif
-
-/*************************************************************************************
- Offsets and addresses. AddrOf is useful for taking the address of an object
- that overloads the & operator.
-*************************************************************************************/
-#if defined(_WIN32)
-#undef offsetof
-#define offsetof(cls,fld) ((int)&((cls *)0)->fld)
-#endif
-
-// #ifndef NO_ASM
-// #define addrsafe_offsetof(cls,fld) reinterpret_cast<int>(AddrOf(((cls *)0)->fld))
-//
-// template<typename T> inline T * AddrOf(T & x) {
-// T * pt;
-// __asm
-// {
-// mov eax,x
-// mov pt,eax
-// }
-// return pt;
-// }
-// #endif
-
-
-inline bool GrIsBadStringPtrW(const utf16 *const pszw, const long)
-{
- return !pszw;
-}
-
-inline bool GrIsBadStringPtrA(const char *const psza, const long)
-{
- return !psza;
-}
-
-inline bool GrIsBadReadPtr(const void *const, const unsigned int)
-{
- return false;
-}
-
-inline bool GrIsBadWritePtr(const void *const, const unsigned int)
-{
- return false;
-}
-
-
-size_t Platform_UnicodeToANSI(const utf16 * prgchwSrc, size_t cchwSrc, char * prgchsDst, size_t cchsDst);
-size_t Platform_AnsiToUnicode(const char * prgchsSrc, size_t cchsSrc, utf16 * prgchwDst, size_t cchwDst);
-//size_t Platform_UnicodeToANSI(const wchar * prgchwSrc, size_t cchwSrc, char * prgchsDst, size_t cchsDst);
-//size_t Platform_AnsiToUnicode(const char * prgchsSrc, size_t cchsSrc, wchar * prgchwDst, size_t cchwDst);
-size_t Platform_8bitToUnicode(int nCodePage, const char * prgchsSrc, int cchsSrc, utf16 * prgchwDst, int cchwDst);
-
-utf16 *utf16cpy(utf16 *dest, const utf16 *src);
-utf16 *utf16cpy(utf16 *dest, const char *src);
-utf16 *utf16cpy(utf16 *dest, const utf32 *src);
-
-utf16 *utf16ncpy(utf16 *dest, const utf16 *src, size_t n);
-utf16 *utf16ncpy(utf16 *dest, const char *src, size_t n);
-
-#ifdef UTF16DEBUG
-void utf16Output(const utf16 *input);
-#endif
-
-size_t utf16len(const utf16 *s);
-
-int utf16cmp(const utf16 *s1, const utf16 *s2);
-int utf16ncmp(const utf16 *s1, const utf16 *s2, size_t n);
-int utf16cmp(const utf16 *s1, const char *s2);
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrResult.h b/Build/source/libs/graphite-engine/include/graphite/GrResult.h
deleted file mode 100644
index d2c418dc9df..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrResult.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrResult.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Support for the GrResult and error handling in the Graphite engine. Also argument
- checking. Much of this is set up to parallel standard COM behavior.
-
-Special Note:
- This file needs to be used by C files. Please do not use C++ style comments; use
- ONLY C style comments in this file to make the C compiler happy.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRRESULT_INCLUDED
-#define GRRESULT_INCLUDED
-
-/*
-//:End Ignore
- */
-
-
-namespace gr
-{
-
-
-
-/*:>********************************************************************************************/
-/*:> Result flags */
-/*:>********************************************************************************************/
-
-/* These are return values for the main interface methods to indicate various kinds of */
-/* error conditions. To facilitate COM compatibiliy, they match the standard COM HRESULT codes. */
-enum GrResult
-{
- kresOk = 0, // S_OK
- kresFalse = 1, // S_FALSE
- kresFail = 0x80004005L, // E_FAIL
- kresOutOfMemory = 0x8007000EL, // E_OUTOFMEMORY
- kresInvalidArg = 0x80000002L, // E_INVALIDARG
- kresReadFault = 0x80000001L, // STG_E_READFAULT
- kresUnexpected = 0x80000003L, // E_UNEXPECTED
- kresNotImpl = 0x80000004L, // E_NOTIMPL
- kresPointer = 0x80004003L//, // E_POINTER
-};
-
-#define ResultFailed(res) (res != kresOk) /* && res != kresFalse */
-
-#define ResultSucceeded(res) (res == kresOk) /* || res == kresFalse */
-
-enum FontErrorCode
-{
- kferrOkay,
- kferrUninitialized,
- kferrUnknown,
- kferrFindHeadTable,
- kferrReadDesignUnits,
- kferrFindCmapTable,
- kferrLoadCmapSubtable,
- kferrCheckCmapSubtable,
- kferrFindNameTable,
- kferrLoadSilfTable,
- kferrLoadFeatTable,
- kferrLoadGlatTable,
- kferrLoadGlocTable,
- kferrReadSilfTable,
- kferrReadGlocGlatTable,
- kferrReadFeatTable,
- kferrBadVersion,
- kferrSileTableMismatch,
- kferrReadSillTable
-};
-
-/*:>********************************************************************************************/
-/*:> Error handling */
-/*:>********************************************************************************************/
-/* These are set up as #defines so we can easily adjust them once we know how errors should */
-/* be handled. */
-
-#define ReturnResult(res) return res
-
-#ifdef GR_FW
-#define THROW(res) ThrowInternalError(res)
-#else
-#define THROW(res) throw res
-#endif /* GR_FW */
-
-
-// #if !defined(NDEBUG)
-
-#if (0) // can't get E_POINTER to work so no debugging this way for now
-
-} // namespace gr
-
-#include <iostream>
-
-namespace gr
-{
-
-#define WARN(warning) (std::cerr << __FILE__ << ':' << __LINE__ << ": WARN: " << #warning, warning)
-
-/*:>********************************************************************************************/
-/*:> Argument checking */
-/*:>********************************************************************************************/
-
-#define ChkGrArgPtr(p) \
-{ \
- AssertPtrN(p); \
- if (!p) \
- THROW(E_POINTER); \
-} \
-
-#define ChkGrOutPtr(p) \
-{ \
- AssertPtrN(p); \
- if (!p) \
- THROW(E_POINTER); \
-} \
-
-#define ChkGrArgPtrN(p) \
- AssertPtrN(p); \
-
-#define ChkGrArrayArg(prgv, cv) \
-{ \
- AssertArray(prgv, cv); \
- if (cv && !prgv) \
- THROW(E_POINTER); \
-} \
-
-#define ChkGrBstrArg(bstr) \
- AssertBstr(bstr); \
-
-#define ChkGrBstrArgN(bstr) \
- AssertBstrN(bstr); \
-
-#else // debugging is off
-
-#define WARN(warning) (warning)
-
-/*:>********************************************************************************************/
-/*:> Argument checking */
-/*:>********************************************************************************************/
-
-#define ChkGrArgPtr(p) (static_cast<void>(0))
-
-#define ChkGrOutPtr(p) (static_cast<void>(0))
-
-#define ChkGrArgPtrN(p) (static_cast<void>(0))
-
-#define ChkGrArrayArg(prgv, cv) (static_cast<void>(0))
-
-#define ChkGrBstrArg(bstr) (static_cast<void>(0))
-
-#define ChkGrBstrArgN(bstr) (static_cast<void>(0))
-
-#endif // !defined(NDEBUG)
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif /* !GRRESULT_INCLUDED */
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrStructs.h b/Build/source/libs/graphite-engine/include/graphite/GrStructs.h
deleted file mode 100644
index a1c9debe238..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrStructs.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrStructs.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Copyright (C) 1999 by SIL International. All rights reserved.
-
-Description:
- Cross-platform structure definitions.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRSTRUCTS_INCLUDED
-#define GRSTRUCTS_INCLUDED
-#include "GrPlatform.h"
-
-namespace gr
-{
-
-//:End Ignore
-
-typedef struct tagGrCharProps
-{
- unsigned long clrFore;
- unsigned long clrBack;
- int dympOffset;
- int ws;
- int ows;
- byte fWsRtl;
- int nDirDepth;
- byte ssv;
- byte ttvBold;
- byte ttvItalic;
- int dympHeight;
- wchar_t szFaceName[ 32 ];
- wchar_t szFontVar[ 64 ];
-} GrCharProps;
-
-// Used to pass feature information among the Graphite engine and the application.
-typedef struct tagFeatureSetting
-{
- int id;
- int value;
-} FeatureSetting;
-
-/*****
-struct Point
-{
- float x;
- float y;
-
- Point()
- {
- x = y = 0;
- }
-
- Point(POINT & p)
- {
- x = (float)p.x;
- y = (float)p.y;
- }
-};
-
-
-struct Rect
-{
- float top;
- float bottom;
- float left;
- float right;
-
- Rect()
- {
- top = bottom = left = right = 0;
- };
-
- Rect(RECT & r)
- {
- top = (float)r.top;
- bottom = (float)r.bottom;
- left = (float)r.left;
- right = (float)r.right;
- };
-};
-****/
-
-} // namespace gr
-
-
-#endif // !STRUCTS_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/include/graphite/GrWrappers.h b/Build/source/libs/graphite-engine/include/graphite/GrWrappers.h
deleted file mode 100644
index 077b4695d80..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GrWrappers.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001, 2003 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrWrapperClases.h
-Responsibility: Sharon Correll
-Last reviewed:
-
- Wrapper classes to be included in the open-source version of the Graphite DLL.
- Currently there are none.
-----------------------------------------------------------------------------------------------*/
diff --git a/Build/source/libs/graphite-engine/include/graphite/GraphiteProcess.h b/Build/source/libs/graphite-engine/include/graphite/GraphiteProcess.h
deleted file mode 100644
index 60f81860c2e..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/GraphiteProcess.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GraphiteProcess.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- The interface that is needed for the Justifier object to call back to the Graphite engine.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRAPHITEPROCESS_INCLUDED
-#define GRAPHITEPROCESS_INCLUDED
-
-#include "GrResult.h"
-//:End Ignore
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
-
- Hungarian: fgje
-----------------------------------------------------------------------------------------------*/
-class GraphiteProcess
-{
-public:
- virtual ~GraphiteProcess() {};
- virtual GrResult getGlyphAttribute(int iGlyph, int jgat, int nLevel, float * pValueRet) = 0;
- virtual GrResult getGlyphAttribute(int iGlyph, int jgat, int nLevel, int * pValueRet) = 0;
- virtual GrResult setGlyphAttribute(int iGlyph, int jgat, int nLevel, float value) = 0;
- virtual GrResult setGlyphAttribute(int iGlyph, int jgat, int nLevel, int value) = 0;
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !IGR_JENGINE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/HashMap.h b/Build/source/libs/graphite-engine/include/graphite/HashMap.h
deleted file mode 100644
index aa925ac608d..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/HashMap.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: HashMap.h
-Responsibility: Steve McConnel
-Last reviewed: Not yet.
-
-Description:
- This provides a set of template collection classes to replace std::map. Their primary
- reason to exist is to allow explicit checking for internal memory allocation failures.
-----------------------------------------------------------------------------------------------*/
-#pragma once
-#ifndef HASHMAP_H_INCLUDED
-#define HASHMAP_H_INCLUDED
-//:End Ignore
-
-/*----------------------------------------------------------------------------------------------
- Functor class for computing a hash value from an arbitrary object.
-
- Hungarian: hsho
-----------------------------------------------------------------------------------------------*/
-class HashObj
-{
-public:
- int operator () (void * pKey, int cbKey);
-};
-
-/*----------------------------------------------------------------------------------------------
- Functor class for comparing two arbitrary objects (of the same class) for equality.
-
- Hungarian: eqlo
-----------------------------------------------------------------------------------------------*/
-class EqlObj
-{
-public:
- bool operator () (void * pKey1, void * pKey2, int cbKey);
-};
-
-/*----------------------------------------------------------------------------------------------
- Hash map template collection class whose keys are objects of an arbitrary class.
-
- Hungarian: hm[K][T]
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H = HashObj, class Eq = EqlObj> class HashMap
-{
-public:
- //:> Member classes
-
- /*------------------------------------------------------------------------------------------
- This is the basic data structure for storing one key-value pair in a hash map. In
- order to handle hash collisions, this structure is a member of a linked list.
- Hungarian: hsnd
- ------------------------------------------------------------------------------------------*/
- class HashNode
- {
- public:
- //:> Constructors/destructors/etc.
-
- HashNode(void)
- : m_key(K()), m_value(T()), m_nHash(0), m_ihsndNext(0)
- {
- }
- HashNode(K & key, T & value, int nHash, int ihsndNext = -1)
- : m_key(key), m_value(value), m_nHash(nHash), m_ihsndNext(ihsndNext)
- {
- }
- ~HashNode()
- {
- }
-
- //:> Member variable access
-
- void PutKey(K & key)
- {
- m_key = key;
- }
- K & GetKey()
- {
- return m_key;
- }
- void PutValue(T & value)
- {
- m_value = value;
- }
- T & GetValue()
- {
- return m_value;
- }
- void PutHash(int nHash)
- {
- m_nHash = nHash;
- }
- int GetHash()
- {
- return m_nHash;
- }
- void PutNext(int ihsndNext)
- {
- m_ihsndNext = ihsndNext;
- }
- int GetNext()
- {
- return m_ihsndNext;
- }
-
- /*--------------------------------------------------------------------------------------
- Check whether the given HashNode is being used.
- --------------------------------------------------------------------------------------*/
- bool InUse()
- {
- return m_ihsndNext >= -1;
- }
-
- protected:
- //:> Member variables
-
- K m_key;
- T m_value;
- int m_nHash;
- int m_ihsndNext; // -1 means end of list, -(ihsnd + 3) for free list members
- };
-
- /*------------------------------------------------------------------------------------------
- This provides an iterator for stepping through all HashNodes stored in the hash map.
- This is useful primarily for saving the contents of a hash map to a file.
-
- Hungarian: ithm[K][T]
- ------------------------------------------------------------------------------------------*/
- class iterator
- {
- public:
- // Constructors/destructors/etc.
-
- iterator() : m_phmParent(0), m_ihsnd(0)
- {
- }
- iterator(HashMap<K,T,H,Eq> * phm, int ihsnd) : m_phmParent(phm), m_ihsnd(ihsnd)
- {
- }
- iterator(const iterator & v) : m_phmParent(v.m_phmParent), m_ihsnd(v.m_ihsnd)
- {
- }
- ~iterator()
- {
- }
-
- // Other public methods
-
- iterator & operator = (const iterator & ithm)
- {
- m_phmParent = ithm.m_phmParent;
- m_ihsnd = ithm.m_ihsnd;
- return *this;
- }
- T & operator * (void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- return m_phmParent->m_prghsnd[m_ihsnd].GetValue();
- }
- HashNode * operator -> (void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- return &m_phmParent->m_prghsnd[m_ihsnd];
- }
- iterator & operator ++ (void)
- {
- Assert(m_phmParent);
- ++m_ihsnd;
- // make sure that this new HashNode is actually in use
- while (m_ihsnd < m_phmParent->m_ihsndLim)
- {
- if (m_phmParent->m_prghsnd[m_ihsnd].InUse())
- return *this;
- // skip to the next one and check it
- ++m_ihsnd;
- }
- if (m_ihsnd > m_phmParent->m_ihsndLim)
- m_ihsnd = m_phmParent->m_ihsndLim;
- return *this;
- }
- bool operator == (const iterator & ithm)
- {
- return (m_phmParent == ithm.m_phmParent) && (m_ihsnd == ithm.m_ihsnd);
- }
- bool operator != (const iterator & ithm)
- {
- return (m_phmParent != ithm.m_phmParent) || (m_ihsnd != ithm.m_ihsnd);
- }
- T & GetValue(void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_phmParent->m_prghsnd[m_ihsnd].GetValue();
- }
- K & GetKey(void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_phmParent->m_prghsnd[m_ihsnd].GetKey();
- }
- int GetHash()
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_phmParent->m_prghsnd[m_ihsnd].GetHash();
- }
- int GetIndex()
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_ihsnd;
- }
-
- protected:
- //:> Member variables
-
- HashMap<K,T,H,Eq> * m_phmParent;
- int m_ihsnd;
- };
- friend class iterator;
-
- //:> Constructors/destructors/etc.
-
- HashMap();
- ~HashMap();
- HashMap(HashMap<K,T,H,Eq> & hm);
-
- //:> Other public methods
-
- iterator Begin();
- iterator End();
- void Insert(K & key, T & value, bool fOverwrite = false, int * pihsndOut = 0);
- bool Retrieve(K & key, T * pvalueRet);
- bool Delete(K & key);
- void Clear();
- void CopyTo(HashMap<K,T,H,Eq> & hmKT);
- void CopyTo(HashMap<K,T,H,Eq> * phmKT);
-
- bool GetIndex(K & key, int * pihsndRet);
- bool IndexKey(int ihsnd, K * pkeyRet);
- bool IndexValue(int ihsnd, T * pvalueRet);
-
- int Size();
-
- /*------------------------------------------------------------------------------------------
- The assignment operator allows an entire hashmap to be assigned as the value of another
- hashmap. It throws an error if it runs out of memory.
-
- @return a reference to this hashmap. (That is how the assignment operator is defined!)
-
- @param hm is a reference to the other hashmap.
- ------------------------------------------------------------------------------------------*/
- HashMap<K,T,H,Eq> & operator = (HashMap<K,T,H,Eq> & hm)
- {
- hm.CopyTo(this);
- return *this;
- }
-
- //:Ignore
-#ifdef DEBUG
- int _BucketCount();
- int _EmptyBuckets();
- int _BucketsUsed();
- int _FullestBucket();
- bool AssertValid()
- {
- AssertPtrN(m_prgihsndBuckets);
- Assert(m_prgihsndBuckets || !m_cBuckets);
- Assert(!m_prgihsndBuckets || m_cBuckets);
- AssertArray(m_prgihsndBuckets, m_cBuckets);
- AssertPtrN(m_prghsnd);
- Assert(m_prghsnd || !m_ihsndMax);
- Assert(!m_prghsnd || m_ihsndMax);
- AssertArray(m_prghsnd, m_ihsndMax);
- Assert(0 <= m_ihsndLim && m_ihsndLim <= m_ihsndMax);
- Assert(-1 <= FreeListIdx(m_ihsndFirstFree));
- Assert(FreeListIdx(m_ihsndFirstFree) < m_ihsndLim);
- return true;
- }
-#endif
- //:End Ignore
-
-protected:
- //:> Member variables
-
- int * m_prgihsndBuckets;
- int m_cBuckets;
- HashNode * m_prghsnd;
- int m_ihsndLim;
- int m_ihsndMax;
- int m_ihsndFirstFree; // stores -(ihsnd + 3)
-
- //:> Protected methods
- //:Ignore
-
- /*------------------------------------------------------------------------------------------
- Map between real index and "free list" index. Note that this mapping is bidirectional.
- ------------------------------------------------------------------------------------------*/
- int FreeListIdx(int ihsnd)
- {
- return -(ihsnd + 3);
- }
- //:End Ignore
-};
-
-
-// Local Variables:
-// mode:C++
-// c-file-style:"cellar"
-// tab-width:4
-// End:
-
-#endif /*HASHMAP_H_INCLUDED*/
diff --git a/Build/source/libs/graphite-engine/include/graphite/IGrEngine.h b/Build/source/libs/graphite-engine/include/graphite/IGrEngine.h
deleted file mode 100644
index 481cb534b46..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/IGrEngine.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2003 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-NU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: IGrEngine.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A very minimal interface representing the Graphite engine, for passing to the
- GrJustifier.
--------------------------------------------------------------------------------*//*:End Ignore*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef IGRENG_INCLUDED
-#define IGRENG_INCLUDED
-
-namespace gr
-{
-/*----------------------------------------------------------------------------------------------
- Class: IGrEngine
-----------------------------------------------------------------------------------------------*/
-class IGrEngine
-{
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !IGRENG_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/IGrJustifier.h b/Build/source/libs/graphite-engine/include/graphite/IGrJustifier.h
deleted file mode 100644
index a9ba6e51c07..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/IGrJustifier.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2003 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: IGrJustifier.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- An interface for a justification agent that is used by the Graphite engine.
--------------------------------------------------------------------------------*//*:End Ignore*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef IGRJUSTIFIER_INCLUDED
-#define IGRJUSTIFIER_INCLUDED
-
-#include "GrResult.h"
-
-namespace gr
-{
-
-class GraphiteProcess;
-
-/*----------------------------------------------------------------------------------------------
- Class: IGrJustifier
- This class provides an interface for a justification agent for the Graphite engine.
-----------------------------------------------------------------------------------------------*/
-class IGrJustifier
-{
-public:
- virtual ~IGrJustifier() {};
- virtual GrResult adjustGlyphWidths(GraphiteProcess * pgje, int iGlyphMin, int iGlyphLim,
- float dxCurrWidth, float dxDesiredWidth) = 0;
-
- //virtual GrResult suggestShrinkAndBreak(GraphiteProcess * pfgjwe,
- // int iGlyphMin, int iGlyphLim, float dxsWidth, LgLineBreak lbPref, LgLineBreak lbMax,
- // float * pdxShrink, LgLineBreak * plbToTry) = 0;
-
- // Return a Graphite-compatible justifier that can be stored in a Graphite segment.
- // TODO: remove
- //virtual void JustifierObject(IGrJustifier ** ppgjus) = 0;
-
- // When a segment is being destroyed, delete this object, which is the wrapper for the
- // text source inside of it.
- // TODO: remove
- //virtual void DeleteJustifierPtr() = 0;
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !IGRJUSTIFIER_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/IGraphiteProcess.h b/Build/source/libs/graphite-engine/include/graphite/IGraphiteProcess.h
deleted file mode 100644
index ee84a94cdb1..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/IGraphiteProcess.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GraphiteProcess.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- The interface that is needed for the Justifier object to call back to the Graphite engine.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef IGRAPHITEPROCESS_INCLUDED
-#define IGRAPHITEPROCESS_INCLUDED
-
-#include "GrResult.h"
-//:End Ignore
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
-
- Hungarian: fgje
-----------------------------------------------------------------------------------------------*/
-class GraphiteProcess
-{
-public:
- virtual GrResult GetGlyphAttribute(int iGlyph, int jgat, int nLevel, float * pValueRet) = 0;
- virtual GrResult GetGlyphAttribute(int iGlyph, int jgat, int nLevel, int * pValueRet) = 0;
- virtual GrResult SetGlyphAttribute(int iGlyph, int jgat, int nLevel, float value) = 0;
- virtual GrResult SetGlyphAttribute(int iGlyph, int jgat, int nLevel, int value) = 0;
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !IGR_JENGINE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/ITextSource.h b/Build/source/libs/graphite-engine/include/graphite/ITextSource.h
deleted file mode 100644
index 154d80296e3..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/ITextSource.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: ITextSource.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- An interface for a text source that is used by the Graphite engine.
--------------------------------------------------------------------------------*//*:End Ignore*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef IGRTXTSRC_INCLUDED
-#define IGRTXTSRC_INCLUDED
-
-
-#include "GrAppData.h"
-#include "GrStructs.h"
-#include "GrResult.h"
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- Class: ITextSource
- This class provides an interface for a text source for the Graphite engine.
-----------------------------------------------------------------------------------------------*/
-class ITextSource
-{
-public:
- virtual ~ITextSource() {};
- virtual UtfType utfEncodingForm() = 0;
- virtual size_t getLength() = 0;
- virtual size_t fetch(toffset ichMin, size_t cch, utf32 * prgchBuffer) = 0;
- virtual size_t fetch(toffset ichMin, size_t cch, utf16 * prgchwBuffer) = 0;
- virtual size_t fetch(toffset ichMin, size_t cch, utf8 * prgchsBuffer) = 0;
- virtual bool getRightToLeft(toffset ich) = 0;
- virtual unsigned int getDirectionDepth(toffset ich) = 0;
- virtual float getVerticalOffset(toffset ich) = 0;
- virtual isocode getLanguage(toffset ich) = 0;
-
- virtual std::pair<toffset, toffset> propertyRange(toffset ich) = 0;
- virtual size_t getFontFeatures(toffset ich, FeatureSetting * prgfset) = 0;
- virtual bool sameSegment(toffset ich1, toffset ich2) = 0;
-};
-
-
-/*----------------------------------------------------------------------------------------------
- Class: IColorTextSource
- Defines a method to get the color informtion from the text source.
- It is needed for SegmentPainters that want to handle color.
-----------------------------------------------------------------------------------------------*/
-class IColorTextSource : public ITextSource
-{
-public:
- virtual void getColors(toffset ich, int * pclrFore, int * pclrBack) = 0;
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !IGRTXTSRC_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/MemoryUsage.h b/Build/source/libs/graphite-engine/include/graphite/MemoryUsage.h
deleted file mode 100644
index d59ff165f75..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/MemoryUsage.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2007 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: MemoryUsage.h
-Responsibility: Sharon Correll
-Last reviewed: not yet
-
-Description:
- Data structures to hold the calculations for memory usage.
-----------------------------------------------------------------------------------------------*/
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef MEMORYUSAGE_INCLUDED
-#define MEMORYUSAGE_INCLUDED
-
-//:End Ignore
-
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- A data structure that holds information about the memory usage for font/engine objects
-----------------------------------------------------------------------------------------------*/
-class FontMemoryUsage
-{
- friend class FontCache;
- friend class FontFace;
-
-public:
- FontMemoryUsage()
- {
- initialize();
- }
- void addEngine(GrEngine * pgreng);
- void prettyPrint(std::ostream & strm);
-
-protected:
- // member variables:
- std::vector<size_t> vFontTotalsReg;
- std::vector<size_t> vFontTotalsBold;
- std::vector<size_t> vFontTotalsItalic;
- std::vector<size_t> vFontTotalsBI;
- std::vector<std::string> vstrFontNames;
- std::vector<size_t> vFaceCount;
-
- size_t font;
- size_t fontCache;
- size_t fontFace;
-
- size_t eng_count;
- size_t eng_overhead;
- size_t eng_scalars;
- size_t eng_strings;
- size_t eng_pointers;
- size_t eng_cmap;
- size_t eng_nameTable;
-
- size_t pseudoMap;
-
- size_t clstbl_counters;
- size_t clstbl_offsets;
- size_t clstbl_glyphList;
-
- size_t glftbl_general;
- size_t glftbl_compDefns;
- size_t glftbl_attrTable;
- size_t glftbl_attrOffsets;
-
- size_t lngtbl_general;
- size_t lngtbl_entries;
- size_t lngtbl_featureSets;
-
- size_t tman_general;
-
- size_t pass_count;
- size_t pass_general;
- size_t pass_fsm;
- size_t pass_ruleExtras;
- size_t pass_constraintOffsets;
- size_t pass_constraintCode;
- size_t pass_actionOffsets;
- size_t pass_actionCode;
-
- size_t engst_general;
- size_t engst_passState;
-
- size_t sstrm_count;
- size_t sstrm_general;
- size_t sstrm_chunkMapsUsed;
- size_t sstrm_chunkMapsAlloc;
- size_t sstrm_reprocBuf;
-
- size_t slot_count;
- size_t slot_general;
- size_t slot_abstract;
- size_t slot_varLenBuf;
- size_t slot_assocsUsed;
- size_t slot_assocsAlloc;
- size_t slot_attachUsed;
- size_t slot_attachAlloc;
-
- // methods:
- void initialize();
- int total();
- void add(FontMemoryUsage & fmu);
-};
-
-/*----------------------------------------------------------------------------------------------
- A data structure that holds information about the memory usage for segment objects.
-----------------------------------------------------------------------------------------------*/
-class SegmentMemoryUsage
-{
-public:
- SegmentMemoryUsage()
- {
- initialize();
- }
- void addSegment(Segment & seg);
- void prettyPrint(std::ostream & strm);
-
-protected:
- // member variables:
- size_t seg_count;
- size_t overhead;
- size_t pointers;
- size_t scalars;
- size_t strings;
- size_t metrics;
- size_t associations;
- size_t init;
- size_t obsolete;
-
- size_t slot_count;
- size_t slot_abstract;
- size_t slot_varLenBuf;
- size_t slot_scalars;
- size_t slot_clusterMembers;
-
- size_t glyphInfo_count;
- size_t glyphInfo;
-
- size_t wastedVector; // allocated space that is not used in vectors
-
- // methods:
- void initialize();
-};
-
-} // namespace gr
-
-#endif // !MEMORYUSAGE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/Segment.h b/Build/source/libs/graphite-engine/include/graphite/Segment.h
deleted file mode 100644
index 41443c27f53..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/Segment.h
+++ /dev/null
@@ -1,627 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: Segment.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Defines the class for a Graphite text segment.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_SEGMENT_INCLUDED
-#define GR_SEGMENT_INCLUDED
-
-#include "Font.h"
-#include "GrConstants.h"
-#include "SegmentAux.h"
-
-// undo automagic DrawTextA DrawTextW stuff
-// #undef DrawText
-
-//:End Ignore
-
-namespace gr
-{
-class GrEngine;
-class SegmentMemoryUsage;
-
-class IGrJustifier;
-class GrTableManager;
-class GrSlotStream;
-class GrSlotOutput;
-
-/*----------------------------------------------------------------------------------------------
- A Graphite segment consists of a sequence of well-positioned glyphs all on one line,
- Each glyph understands its relationship to the underlying text that was used to generate
- the segment.
-
- Hungarian: seg
-----------------------------------------------------------------------------------------------*/
-class Segment
-{
- friend class GrEngine;
- friend class SegmentPainter;
- friend class GlyphInfo;
- friend class GlyphIterator;
- friend class GlyphSetIterator;
- friend class SegmentMemoryUsage;
-
-public:
- // Static methods
-
- // Constructors, destructors, etc.
- Segment();
-// Segment(ITextSource * pgts, int ichMin, int ichLim,
-// LineBrk lbStart, LineBrk lbEnd,
-// bool fStartLine, bool fEndLine, bool fWsRtl);
-
- virtual ~Segment();
-
- // Basic copy constructor:
- Segment(Segment & seg);
-
- // For making modified copies of segments:
- static Segment * LineContextSegment(Segment & seg, bool fStartLine, bool fEndLine);
- static Segment * JustifiedSegment(Segment & seg, float xsNewWidth);
- static Segment * WhiteSpaceSegment(Segment & seg, int newDirDepth);
-
- static int GetSegmentCount();
-
-public:
-
- long IncRefCount();
- long DecRefCount();
-
- Font & getFont();
- ITextSource & getText();
- float advanceWidth();
- Rect boundingRect();
-
- bool rightToLeft();
- bool paraRightToLeft() { return m_fParaRtl; }
- int directionDepth(bool * pfWeak = NULL);
- bool setDirectionDepth(int nNewDepth);
- int startCharacter();
- int stopCharacter();
- bool startOfLine();
- bool endOfLine();
- bool hasLineBoundaryContext();
- SegEnd segmentTermination();
- LineBrk startBreakWeight();
- LineBrk endBreakWeight();
- float stretch();
- float maxStretch();
- float maxShrink();
- void setTextSourceOffset(int ichMin)
- {
- m_ichwMin = ichMin;
- }
-
- //GrResult changeLineEnds(bool fNewStart, bool fNewEnd);
-
- std::pair<GlyphIterator, GlyphIterator> glyphs();
- std::pair<GlyphSetIterator, GlyphSetIterator> charToGlyphs(toffset ich);
-
- // OBSOLETE:
- GrResult GetCharData(int cchMax, utf16 * prgch, int * pcchRet);
- GrResult GlyphToChar(int iginf, bool fFirst, int * pich);
- GrResult GlyphToAllChars(int iginf, int cichMax, int * prgich, int *pcichRet);
- GrResult CharToGlyph(int ich, bool fFirst, int * pigbb);
-
- // Not part of FW interface:
-
- float getRangeWidth(int ichMin, int ichLim,
- bool fStartLine = true, bool fEndLine = true, bool fSkipSpace = true);
- int findNextBreakPoint(int ichStart,
- LineBrk lbPref, LineBrk lbWorst, float dxMaxWidth,
- float * pdxBreakWidth, bool fStartLine = true, bool fEndLine = true);
-
- GrResult getUniscribeClusters(
- int * prgigbb1stOfCluster, int cchMax, int * pcch,
- bool * pfClusterStart, int cfMax, int * pcf);
-
- //GrResult GetGlyphsAndPositions(
- // Rect rsArg, Rect rdArg, int cgidMax, int * pcgidRet, utf16 * prggid,
- // float * prgxd, float * prgyd, float * prgdxdAdv);
- //GrResult GetUniscribePositions(
- // Rect rs, Rect rd, int cgidMax, int * pcgidRet,
- // float * prgxd, float * prgyd, float * prgdxdAdv);
- //GrResult GetUniscribeGlyphsAndPositions(
- // Rect rsArg, Rect rdArg, int cgidMax, int * pcchRet, utf16 * prgchGlyphs,
- // float * prgxd, float * prgyd, float * prgdxdAdv);
-
- // Other public methods:
-
- void Initialize(ITextSource * pgts, int ichMin, int ichLim,
- LineBrk lbStart, LineBrk lbEnd, SegEnd est,
- bool fStartLine, bool fEndLine, bool fWsRtl);
- void DestroyContents();
- void SwapWith(Segment * pgrseg);
- void ClearAltEndLineSeg();
-
- ITextSource * GetString(); // client is responsible to Release()
-
- // The following three functions handle storing and retrieving information that
- // allows us to restart a new segment following a line break. This is necessary
- // in case there is some sort of contextualization across the line break.
- void StoreRestartInfo(int cslotRestartBackup, std::vector<int>& vnSkipOffsets)
- {
- m_cslotRestartBackup = cslotRestartBackup;
- m_vnSkipOffsets.resize(vnSkipOffsets.size());
- for (size_t i = 0; i < vnSkipOffsets.size(); i++)
- m_vnSkipOffsets[i] = sdata8(vnSkipOffsets[i]);
- }
- int NextRestartBackup()
- {
- return m_cslotRestartBackup;
- }
- int RestartBackup()
- {
- //return (m_psegPrev)? m_psegPrev->NextRestartBackup(): 0;
- return 0;
- }
- int SkipOffset(int ipass)
- {
- return int(m_vnSkipOffsets[ipass]);
- }
- DirCode PreviousStrongDir()
- {
- return m_dircPrevStrong;
- }
- void SetPreviousStrongDir(DirCode dirc)
- {
- m_dircPrevStrong = dirc;
- }
- DirCode PreviousTermDir()
- {
- return m_dircPrevTerm;
- }
- void SetPreviousTermDir(DirCode dirc)
- {
- m_dircPrevTerm = dirc;
- }
-
- int NextSegInitBuffer(byte ** ppbDat)
- {
- *ppbDat = m_prgbNextSegDat;
- return m_cbNextSegDat;
- }
- int ThisSegInitBuffer(byte ** ppbDat)
- {
- *ppbDat = m_prgInitDat;
- return m_cbInitDat;
- }
-
-// void SetNextSeg(Segment * psegNext)
-// {
-// m_psegNext = psegNext;
-// }
-
- void SetFaceName(std::wstring stu, std::wstring stuBase)
- {
-// m_stuFaceName = stu;
-// m_stuBaseFaceName = stuBase;
-// m_fUseSepBase = (m_stuBaseFaceName.size() > 0);
- }
-
- void SetEngine(GrEngine * pgreng);
- void SetFont(Font * pfont);
- void SwitchFont(Font * pfont);
- GrEngine * EngineImpl();
-
- void SetJustifier(IGrJustifier * pgjus);
- IGrJustifier * Justifier()
- {
- return m_pgjus;
- }
-
- void SetPreContext(int dich)
- {
- m_dichPreContext = dich;
- }
-
- //void SetToBaseFont(IGrGraphics * pgg);
- //void RestoreFont(IGrGraphics * pgg);
-
- void SetUpOutputArrays(Font * pfont, GrTableManager * ptm,
- GrSlotStream * psstrmFinal,
- int cchwUnderlying, int csloutSurface, gid16 chwLB,
- TrWsHandling twsh, bool fParaRtl, int nDirDepth,
- bool fEmpty = false);
- void RecordSurfaceAssoc(int ichw, int islot, int nDir);
- void RecordLigature(int ichwUnder, int islotSurface, int iComponent);
- void AdjustForOverlapsWithPrevSeg();
- void MarkSlotInPrevSeg(int ichw, int islot);
- void MarkSlotInNextSeg(int ichw, int islot);
-
- void CleanUpAssocsVectors()
- {
- for (int iv = 0; iv < m_ichwAssocsLim - m_ichwAssocsMin; iv++)
- {
- std::vector<int> * pvislout = m_prgpvisloutAssocs[iv];
- if (pvislout->size() <= 1)
- {
- delete pvislout;
- *(m_prgpvisloutAssocs + iv) = NULL;
- }
- }
- }
-
- GrSlotOutput * OutputSlot(int islout);
-
- void RecordInitializationForNextSeg(int cbNextSegDat, byte * pbNextSegDat)
- {
- m_cbNextSegDat = cbNextSegDat;
- m_prgbNextSegDat = new byte[m_cbNextSegDat];
- std::copy(pbNextSegDat, pbNextSegDat + cbNextSegDat, m_prgbNextSegDat);
- }
- void RecordInitializationForThisSeg(int cbDat, byte * pbDat)
- {
- m_cbInitDat = cbDat;
- if (cbDat == 0)
- m_prgInitDat = NULL;
- else
- {
- m_prgInitDat = new byte[m_cbInitDat];
- std::copy(pbDat, pbDat + cbDat, m_prgInitDat);
- }
- }
-
- void SetWidths(float dxsVisWidth, float dxsTotalWidth)
- {
- m_dxsVisibleWidth = dxsVisWidth;
- m_dxsTotalWidth = dxsTotalWidth;
- }
-
- void SetLayout(LayoutEnvironment & layout)
- {
- m_layout.setStartOfLine(layout.startOfLine());
- m_layout.setEndOfLine(layout.endOfLine());
- m_layout.setBestBreak(layout.bestBreak());
- m_layout.setWorstBreak(layout.worstBreak());
- m_layout.setRightToLeft(layout.rightToLeft());
- m_layout.setTrailingWs(layout.trailingWs());
- m_layout.setPrevSegment(layout.prevSegment());
- m_layout.setJustifier(layout.justifier());
- m_layout.setLoggingStream(layout.loggingStream());
- m_layout.setDumbFallback(layout.dumbFallback());
- }
- LayoutEnvironment & Layout()
- {
- return m_layout;
- }
-
- bool Erroneous()
- {
- return m_fErroneous;
- }
- void SetErroneous(bool f)
- {
- m_fErroneous = f;
- }
-
- void FixTermination(SegEnd est)
- {
- m_est = est;
- }
-
- // Convert from em-units to logical units.
- float EmToLogUnits(int m);
-
- Rect ComponentRect(GrSlotOutput * pslout, int icomp);
-
- void ClusterMembersForGlyph(int islout, int disloutCluster, std::vector<int> & visloutRet);
-
- // for transduction logging:
- // implementations are empty unless TRACING is defined
- void LogUnderlyingToSurface(GrTableManager * ptman, std::ostream & strmOut,
- GrCharStream * pchstrm);
- void LogSurfaceToUnderlying(GrTableManager * ptman, std::ostream & strmOut);
- void LogXmlUnderlyingToSurface(std::ostream & strmOut, GrTableManager * ptman,
- GrCharStream * pchstrm, int nIndent);
- void LogXmlSurfaceToUnderlying(std::ostream & strmOut, GrTableManager * ptman,
- GrCharStream * pchstrm, int nIndent);
-
- // calculate memory usage
- void calculateMemoryUsage(SegmentMemoryUsage & smu);
-
-protected:
- // Member variables:
- long m_cref; // standard COM ref count
-
- ITextSource * m_pgts; // the string we are a segment of
- int m_dichwLim; // number of characters officially in this segment
- int m_ichwMin; // first character relative to the text-source
-
- Font * m_pfont;
- GrEngine * m_preneng;
-
- bool m_fErroneous; // an error occurred in generating this segment
-
- IGrJustifier * m_pgjus;
-
- LayoutEnvironment m_layout;
-
- bool m_fWsRtl; // writing system direction
- bool m_fParaRtl; // paragraph direction; redundant with layout?
-
- TrWsHandling m_twsh; // // redundant with layout?
- int m_nDirDepth; // segment direction (white-space-only segments can switch)
-
- byte * m_prgbNextSegDat; // for initializing the following segment
- int m_cbNextSegDat; // length of above buffer
-
- byte * m_prgInitDat; // what was used to initialize this segment
- int m_cbInitDat;
-
- int m_dichPreContext; // what part of this segment affects the previous;
- // not really used for anything right now
-
-// Segment * m_psegPrev; // OBSOLETE
-// Segment * m_psegNext;
-
- // Font information:
-// std::wstring m_stuFaceName;
-// std::wstring m_stuBaseFaceName;
-// bool m_fUseSepBase;
-
-// float m_pixHeight; // character height of font in pixels (NOT = ascent + descent)
-// bool m_fBold;
-// bool m_fItalic;
-
- LineBrk m_lbStart;
- LineBrk m_lbEnd;
-
- bool m_fStartLine; // redundant with layout?
- bool m_fEndLine; // redundant with layout?
-
- SegEnd m_est;
-
- //Segment * m_psegAltEndLine; // segment having the alternate m_fEndLine value
-
- int m_mFontEmUnits;
- float m_dysFontAscent;
- float m_dysFontDescent;
- float m_xysEmSquare; // em-square of the font in display units
-// float m_xsDPI; // DPI of device on which segment was measured
-// float m_ysDPI;
-
- float m_dxsStretch; // difference between actual and natural width
- float m_dxsWidth; // width in absence of any stretch. -1 if not computed.
- float m_dysHeight;
- float m_dysAscent; // distance from common baseline to top of this segment,
- // including extra ascent
-
- float m_dysXAscent; // extra for this renderer, beyond what is standard for the font
- float m_dysXDescent;
-
- float m_dysAscentOverhang; // extra height above official top of segment; >= 0
- float m_dysDescentOverhang; // extra height below bottom of segment; <= 0;
- float m_dxsLeftOverhang; // <= 0
- float m_dxsRightOverhang;
-
- float m_dxsVisibleWidth; // not including trailing white space
- float m_dxsTotalWidth; // including trailing white space
-
- int m_isloutVisLim; // lim of visible stuff (to handle trailing ws underlines)
-
- float m_dysOffset;
-
- // Index of the first item in the before/after arrays and the ligature/component arrays,
- // relative to the start of the segment. Normally == 0, but will be some negative number
- // if there are slots "borrowed" from the previous segment (officially located in the
- // previous segment but rendered in this one).
- int m_ichwAssocsMin;
-
- // 1 + index of last item in the before/after arrays and the ligature/component arrays,
- // relative to the start of the segment. Normally == m_dichwLim, but will be
- // larger if there are slots "borrowed" from the following segment.
- int m_ichwAssocsLim;
-
- // Underlying-to-surface associations:
- int * m_prgisloutBefore; // logical first
- int * m_prgisloutAfter; // logical last
- std::vector<int> ** m_prgpvisloutAssocs; // all; used by range selections
-
- int * m_prgisloutLigature; // similar to above, index of associated ligature, or kNegInfinity
-
- sdata8 * m_prgiComponent; // component of the ligature that the corresponding character
- // represents; only meaningful if corresponding item in
- // m_prgisloutLigature is set
-
-// GrSlotStream * m_psstrm; // TODO: rework to remove this
- int m_cslout;
- GrSlotOutput * m_prgslout; // final output slots
- u_intslot * m_prgnSlotVarLenBuf; // var-length buffer for slots--one big buffer managed by the
- // segment, but pointed to by the slots
-
-// int m_cnUserDefn; // this information is not stored in the segment itself
- int m_cnCompPerLig;
-// int m_cnFeat; // this information is not stored in the segment itself
-
- int m_cginf;
- int m_isloutGinf0; // islout index for m_prgginf[0];
- GlyphInfo * m_prgginf;
-
- // Data structures to hold glyphs for rendering:
-////#include "GrSegmentPlatform.h"
-
- // For initializing the following segment:
- int m_cslotRestartBackup; // the number of slots in the underlying
- // input that need to be reprocessed when starting
- // the next segment
-
- std::vector<sdata8> m_vnSkipOffsets; // skip offset for each pass when restarting
-
- DirCode m_dircPrevStrong; // previous strong directionality code
- DirCode m_dircPrevTerm; // previous terminator code, if any
-
-
- // Other protected methods:
-
- void InitLineContextSegment(bool fStartLine, bool fEndLine);
- void InitWhiteSpaceSegment(int nNewDepth);
-
- void ComputeDimensions();
-
- void SetUpGlyphInfo(GrTableManager * ptman, GrSlotStream * psstrmFinal,
- gid16 chwLB, int nDirDepth, int islotMin, int cslot);
- void SetUpLigInfo(GrTableManager * ptman, GlyphInfo & ginf, GrSlotOutput * pslout);
-
- void InitBeforeArrayFromPrevSeg(); // obsolete
- void AdjustBeforeArrayFromPrevSeg();
- void AdjustAfterArrayFromNextSeg();
- void EnsureSpaceAtLineBoundaries(int ichwUnder);
-
- int LogicalSurfaceToUnderlying(int islout,
- float xsOffset, float ysOffset,
- float dxsGlyphWidth = 0, float dysGlyphHeight = 0, bool * pfAfter = NULL);
- int LogicalSurfaceToUnderlying(int islout, bool fBefore);
- int PhysicalSurfaceToUnderlying(int iginf,
- float xsOffset, float xyOffset,
- float dxsGlyphWidth = 0, float dysGlyphHeight = 0, bool * pfAfter = NULL);
- int PhysicalSurfaceToUnderlying(int iginf, bool fBefore);
- int UnderlyingToLogicalSurface(int ichw, bool fBefore);
- int UnderlyingToPhysicalSurface(int ichw, bool fBefore);
- int LogicalToPhysicalSurface(int islout);
- void UnderlyingToPhysicalAssocs(int ichw, std::vector<int> & viginf);
- std::vector<int> UnderlyingToLogicalAssocs(int ichw);
- int UnderlyingToLogicalInThisSeg(int ichw);
- bool SameSurfaceGlyphs(int ichw1, int ichw2);
-
- void ShiftGlyphs(float dxsShift);
-
- float GlyphLeftEdge(int iginf);
-
- int DirLevelOfChar(int ichw, bool fBefore);
- int CharIsRightToLeft(int ichw, bool fBefore);
- int SlotIsRightToLeft(GrSlotOutput * pslout);
- int TopDirLevel()
- {
- if (m_fWsRtl)
- return 1;
- else
- return 0;
- }
-
- void AssertValidClusters(GrSlotStream * psstrm);
-
- void MergeUniscribeCluster(
- std::vector<int> & visloutBefore, std::vector<int> & visloutAfter,
- int ich1, int ich2);
-
- int GlyphHit(float xsClick, float ysClick);
- int SelectBb(std::vector<int> & viginf, bool fRTL);
-
- int RightMostGlyph();
- int LeftMostGlyph();
-
- void ComputeOverhangs(float * pdysVisAscent, float * pdysNegVisDescent,
- float * pdxsVisLeft, float * pdxsVisRight);
-
-public:
- LineBrk getBreakWeight(int ich, bool fBreakBefore = false);
-
- // Platform-specific routines:
-protected:
- //void ShiftGlyphsPlatform(float dxsShift);
- //bool SetDirectionDepthPlatform(int nNewDepth);
-
- //void InitializePlatform();
- //void DestroyContentsPlatform();
- //GrResult GetGlyphsAndPositionsPlatform(float xs, float ys,
- // Rect rsArg, Rect rdArg,
- // utf16 * prgchGlyphs, float * prgxd, float * prgyd, float * prgdxdAdv);
- //void SetUpOutputArraysPlatform(GrTableManager * ptman, gid16 chwLB, int nDirDepth,
- // int islotMin, int cslot);
-
- // Temporary - for WinSegmentPainter
-public:
- int CSlout()
- {
- return m_cslout;
- }
- gid16 LBGlyphID();
- float AscentOffset()
- {
- if (m_dysAscent == -1)
- ComputeDimensions();
- return m_dysAscent - m_dysFontAscent;
- }
-};
-
-
-//:>********************************************************************************************
-//:> The purpose of these subclasses is simply to provide meaningful names for the
-//:> constructors. Instances of these classes are in every way equivalent to Segment.
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Creating a LineFillSegment fits as much of the text on the line as possible,
- finding a reasonable break point if necessary.
-----------------------------------------------------------------------------------------------*/
-class LineFillSegment : public Segment
-{
-public:
- LineFillSegment(
- Font * pfont,
- ITextSource * pts,
- LayoutEnvironment * playout,
- toffset ichStart,
- toffset ichStop,
- float maxWidth,
- bool fBacktracking = false);
-protected:
- // Default constructor:
- LineFillSegment() : Segment()
- {
- }
-};
-
-/*----------------------------------------------------------------------------------------------
- Creating a RangeSegment makes a segment representing the given range of characters, or
- the entire text-source.
-----------------------------------------------------------------------------------------------*/
-class RangeSegment : public Segment
-{
-public:
- RangeSegment(
- Font * pfont,
- ITextSource * pts,
- LayoutEnvironment * playout,
- toffset ichStart = 0,
- toffset ichStop = kPosInfinity,
- Segment * psegInitLike = NULL);
-};
-
-/*----------------------------------------------------------------------------------------------
- The JustSegmentAux class is used by the factory method that creates a justified segment.
- It is called JustSegmentAux to avoid conflicting with the factory method.
-----------------------------------------------------------------------------------------------*/
-class JustSegmentAux : public Segment
-{
-public:
- JustSegmentAux(
- Font * pfont,
- ITextSource * pts,
- LayoutEnvironment * playout,
- toffset ichStart,
- toffset ichStop,
- float xsNaturalWidth,
- float xsJustifiedWidth,
- Segment * psegInitLike = NULL);
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !GR_SEGMENT_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/SegmentAux.h b/Build/source/libs/graphite-engine/include/graphite/SegmentAux.h
deleted file mode 100644
index 293ba291436..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/SegmentAux.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2005 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: SegmentAux.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Auxiliary classes for the Segment class:
- - GlyphInfo
- - GlyphIterator
- - LayoutEnvironment
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef SEGMENTAUX_INCLUDED
-#define SEGMENTAUX_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-class Segment;
-class GrSlotOutput;
-class IGrJustifier;
-class GlyphInfo;
-class GlyphIterator;
-class GlyphSetIterator;
-
-
-/*----------------------------------------------------------------------------------------------
- The GlyphInfo class provides access to details about a single glyph within a segment.
-----------------------------------------------------------------------------------------------*/
-class GlyphInfo // hungarian: ginf
-{
- friend class Segment;
-
-public:
- // Default constructor:
- GlyphInfo()
- {
- m_pseg = NULL;
- m_pslout = NULL;
- m_islout = kInvalid;
- }
-
- gid16 glyphID();
- gid16 pseudoGlyphID();
-
- // Index of this glyph in the logical sequence; zero-based.
- size_t logicalIndex();
-
- // glyph's position relative to the left of the segment
- float origin();
- float advanceWidth(); // logical units
- float advanceHeight(); // logical units; zero for horizontal fonts
- float yOffset();
- gr::Rect bb(); // logical units
- bool isSpace();
-
- // first char associated with this glyph, relative to start of seg
- toffset firstChar();
- // last char associated with this glyph, relative to start of seg
- toffset lastChar();
-
- // Unicode bidi value
- unsigned int directionality();
- // Embedding depth
- unsigned int directionLevel();
- bool insertBefore();
- int breakweight();
-
- bool isAttached() const throw();
- gr::GlyphIterator attachedClusterBase() const throw();
- float attachedClusterAdvance() const throw();
- std::pair<gr::GlyphSetIterator, gr::GlyphSetIterator> attachedClusterGlyphs() const;
-
- float maxStretch(size_t level);
- float maxShrink(size_t level);
- float stretchStep(size_t level);
- byte justWeight(size_t level);
- float justWidth(size_t level);
- float measureStartOfLine();
- float measureEndOfLine();
-
- size_t numberOfComponents();
- gr::Rect componentBox(size_t icomp);
- toffset componentFirstChar(size_t icomp);
- toffset componentLastChar(size_t icomp);
-
- bool erroneous();
-
- const Segment & segment() const throw();
- Segment & segment() throw();
-
-protected:
- Segment * m_pseg;
- GrSlotOutput * m_pslout;
- int m_islout; // signed, so it can return kInvalid
-};
-
-inline Segment & GlyphInfo::segment() throw () {
- return * m_pseg;
-}
-
-inline const Segment & GlyphInfo::segment() const throw () {
- return * m_pseg;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- The GlyphIterator class allows the Graphite client to iterate over a contiguous
- range of glyphs for the segment.
-----------------------------------------------------------------------------------------------*/
-class GlyphIterator
-: public std::iterator<std::random_access_iterator_tag, gr::GlyphInfo>
-{
- friend class GlyphInfo;
- friend class Segment;
-
- // Pointers into the glyph info store
- GlyphInfo * m_pginf;
-
-protected:
- // Constructor
- GlyphIterator(Segment & seg, size_t iginf);
-
-public:
- // Default constructor.
- GlyphIterator() throw (): m_pginf(0) {}
-
- explicit GlyphIterator(const GlyphSetIterator &);
-
- // Forward iterator requirements.
- reference operator*() const { assert(m_pginf != 0); return *m_pginf; }
- pointer operator->() const { return m_pginf; }
- GlyphIterator & operator++() throw() { ++m_pginf; return *this; }
- GlyphIterator operator++(int) throw() { GlyphIterator tmp = *this; operator++(); return tmp; }
-
- // Bidirectional iterator requirements
- GlyphIterator & operator--() throw() { --m_pginf; return *this; }
- GlyphIterator operator--(int) throw() { GlyphIterator tmp = *this; operator--(); return tmp; }
-
- // Random access iterator requirements
- reference operator[](difference_type n) const { return m_pginf[n]; }
- GlyphIterator & operator+=(difference_type n) throw() { m_pginf += n; return *this; }
- GlyphIterator operator+(difference_type n) const throw() { GlyphIterator r = *this; return r += n; }
- GlyphIterator & operator-=(difference_type n) throw() { m_pginf -= n; return *this; }
- GlyphIterator operator-(difference_type n) const throw() { GlyphIterator r = *this; return r += -n; }
-
- // Relational operators.
- // Forward iterator requirements
- bool operator==(const GlyphIterator & rhs) const throw() { return m_pginf == rhs.m_pginf; }
- bool operator!=(const GlyphIterator & rhs) const throw() { return !(*this == rhs); }
-
- // Random access iterator requirements
- bool operator<(const GlyphIterator & rhs) const throw() { return m_pginf < rhs.m_pginf; }
- bool operator>(const GlyphIterator & rhs) const throw() { return m_pginf > rhs.m_pginf; }
- bool operator<=(const GlyphIterator & rhs) const throw() { return !(*this > rhs); }
- bool operator>=(const GlyphIterator & rhs) const throw() { return !(*this < rhs); }
-
- difference_type operator-(const GlyphIterator & rhs) const throw() { return m_pginf - rhs.m_pginf; }
-};
-
-inline GlyphIterator operator+(const GlyphIterator::difference_type n, const GlyphIterator & rhs)
-{
- return rhs + n;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- This reference-counted vector is used as the basis of GlyphSetIterator. This is because
- multiple iterators are based on the same vector, so it needs to hang around appropriately.
-----------------------------------------------------------------------------------------------*/
-class RcVector
-{
- friend class GlyphSetIterator;
-
-public:
- RcVector(std::vector<int> & vn)
- {
- m_vn = vn;
- m_cref = 0;
- }
-
-protected:
- void IncRefCount() const
- {
- m_cref++;
- }
- void DecRefCount() const
- {
- m_cref--;
- if (m_cref <= 0)
- delete this;
- }
-
- const std::vector<int> & Vector() const { return m_vn; };
-
- // member variables:
- mutable int m_cref;
- std::vector<int> m_vn;
-};
-
-/*----------------------------------------------------------------------------------------------
- The GlyphSetIterator class allows the Graphite client to iterate over a non-contiguous
- set of glyphs for the segment, this is almost always the set of glyphs for a character.
-----------------------------------------------------------------------------------------------*/
-class GlyphSetIterator
-: public std::iterator<std::random_access_iterator_tag, gr::GlyphInfo>
-{
- friend class GlyphInfo;
- friend class Segment;
-
- // Segment containing the glyphs being iterated over.
- const Segment * m_pseg;
-
- // Sometimes, in the case of character-to-glyph look-ups or attached
- // children, we need to represent a non-contiguous list; in these cases
- // we first map through a vector of output-slot objects into the actual
- // glyph-info store.
- std::vector<int>::const_iterator m_vit;
-
- // Store a reliable copy of the vector we are iterating over:
- const RcVector * m_qvislout;
-
-protected:
- // Constructor that includes output-slot mapping list, used for non-contiguous lists:
- GlyphSetIterator(Segment & seg, size_t islout, RcVector * qvislout)
- : m_pseg(&seg), m_vit(qvislout->Vector().begin() + islout)
- {
- m_qvislout = qvislout;
- m_qvislout->IncRefCount();
- }
-public:
- // Default constructor--no output-slot mapping:
- GlyphSetIterator() throw() : m_pseg(0), m_vit(std::vector<int>::const_iterator())
- {
- m_qvislout = NULL;
- }
-
- // Copy constructor:
- GlyphSetIterator(const GlyphSetIterator & sit) throw()
- {
- m_pseg = sit.m_pseg;
- m_vit = sit.m_vit;
- m_qvislout = sit.m_qvislout;
- if (m_qvislout)
- m_qvislout->IncRefCount();
- }
- // Assignment operator:
- GlyphSetIterator & operator=(const GlyphSetIterator & sit) throw()
- {
- m_pseg = sit.m_pseg;
- m_vit = sit.m_vit;
- m_qvislout = sit.m_qvislout;
- if (m_qvislout)
- m_qvislout->IncRefCount();
- return *this;
- }
- // Destructor:
- ~GlyphSetIterator()
- {
- if (m_qvislout)
- m_qvislout->DecRefCount();
- }
-
- // Forward iterator requirements.
- reference operator*() const;
- pointer operator->() const { return &(operator*()); }
- GlyphSetIterator & operator++() throw() { ++m_vit; return *this; }
- GlyphSetIterator operator++(int) throw() { GlyphSetIterator tmp = *this; operator++(); return tmp; }
-
- // Bidirectional iterator requirements
- GlyphSetIterator & operator--() throw() { --m_vit; return *this; }
- GlyphSetIterator operator--(int) throw() { GlyphSetIterator tmp = *this; operator--(); return tmp; }
-
- // Random access iterator requirements
- reference operator[](difference_type n) const { return *operator+(n); }
- GlyphSetIterator & operator+=(difference_type n) throw() { m_vit += n; return *this; }
- GlyphSetIterator operator+(difference_type n) const throw() { GlyphSetIterator r = *this; return r += n; }
- GlyphSetIterator & operator-=(difference_type n) throw() { operator+=(-n); return *this; }
- GlyphSetIterator operator-(difference_type n) const throw() { GlyphSetIterator r = *this; return r += -n; }
-
- // Relational operators.
- // Forward iterator requirements
- bool operator==(const GlyphSetIterator & rhs) const throw() { return m_vit == rhs.m_vit; }
- bool operator!=(const GlyphSetIterator & rhs) const throw() { return !(*this == rhs); }
-
- // Random access iterator requirements
- bool operator<(const GlyphSetIterator & rhs) const throw() { return m_vit < rhs.m_vit; }
- bool operator>(const GlyphSetIterator & rhs) const throw() { return m_vit > rhs.m_vit; }
- bool operator<=(const GlyphSetIterator & rhs) const throw() { return !(*this > rhs); }
- bool operator>=(const GlyphSetIterator & rhs) const throw() { return !(*this < rhs); }
-
- difference_type operator-(const GlyphSetIterator & rhs) const throw() { return m_vit - rhs.m_vit; }
-};
-
-inline GlyphSetIterator operator+(const GlyphSetIterator::difference_type n, const GlyphSetIterator & rhs)
-{
- return rhs + n;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- The GlyphInfo class provides access to details about a single glyph within a segment.
-----------------------------------------------------------------------------------------------*/
-class LayoutEnvironment
-{
-public:
- LayoutEnvironment()
- {
- // Defaults:
- m_fStartOfLine = true;
- m_fEndOfLine = true;
- m_lbBest = klbWordBreak;
- m_lbWorst = klbClipBreak;
- m_fRightToLeft = false;
- m_twsh = ktwshAll;
- m_pstrmLog = NULL;
- m_fDumbFallback = false;
- m_psegPrev = NULL;
- m_psegInit = NULL;
- m_pjust = NULL;
- }
- LayoutEnvironment(LayoutEnvironment & layout)
- {
- m_fStartOfLine = layout.m_fStartOfLine;
- m_fEndOfLine = layout.m_fEndOfLine;
- m_lbBest = layout.m_lbBest;
- m_lbWorst = layout.m_lbWorst;
- m_fRightToLeft = layout.m_fRightToLeft;
- m_twsh = layout.m_twsh;
- m_pstrmLog = layout.m_pstrmLog;
- m_fDumbFallback = layout.m_fDumbFallback;
- m_psegPrev = layout.m_psegPrev;
- m_psegInit = layout.m_psegInit;
- m_pjust = layout.m_pjust;
- }
-
- // Setters:
- inline void setStartOfLine(bool f) { m_fStartOfLine = f; }
- inline void setEndOfLine(bool f) { m_fEndOfLine = f; }
- inline void setBestBreak(LineBrk lb) { m_lbBest = lb; }
- inline void setWorstBreak(LineBrk lb) { m_lbWorst = lb; }
- inline void setRightToLeft(bool f) { m_fRightToLeft = f; }
- inline void setTrailingWs(TrWsHandling twsh) { m_twsh = twsh; }
- inline void setLoggingStream(std::ostream * pstrm) { m_pstrmLog = pstrm; }
- inline void setDumbFallback(bool f) { m_fDumbFallback = f; }
- inline void setPrevSegment(Segment * pseg) { m_psegPrev = pseg; }
- inline void setSegmentForInit(Segment * pseg) { m_psegInit = pseg; }
- inline void setJustifier(IGrJustifier * pjust) { m_pjust = pjust; }
-
- // Getters:
- inline bool startOfLine() { return m_fStartOfLine; }
- inline bool endOfLine() { return m_fEndOfLine; }
- inline LineBrk bestBreak() { return m_lbBest; }
- inline LineBrk worstBreak() { return m_lbWorst; }
- inline bool rightToLeft() { return m_fRightToLeft; }
- inline TrWsHandling trailingWs() { return m_twsh; }
- inline std::ostream * loggingStream() { return m_pstrmLog; }
- inline bool dumbFallback() { return m_fDumbFallback; }
- inline Segment * prevSegment() { return m_psegPrev; }
- inline Segment * segmentForInit() { return m_psegInit; }
- inline IGrJustifier * justifier() { return m_pjust; }
-
-protected:
- bool m_fStartOfLine;
- bool m_fEndOfLine;
- LineBrk m_lbBest;
- LineBrk m_lbWorst;
- bool m_fRightToLeft;
- TrWsHandling m_twsh;
- std::ostream * m_pstrmLog;
- bool m_fDumbFallback;
- Segment * m_psegPrev;
- Segment * m_psegInit;
- IGrJustifier * m_pjust;
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !SEGMENTAUX_INCLUDED
diff --git a/Build/source/libs/graphite-engine/include/graphite/SegmentPainter.h b/Build/source/libs/graphite-engine/include/graphite/SegmentPainter.h
deleted file mode 100644
index 29564a6c63d..00000000000
--- a/Build/source/libs/graphite-engine/include/graphite/SegmentPainter.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: SegmentPainter.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Defines the class for a Graphite text segment.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_SEGPAINTER_INCLUDED
-#define GR_SEGPAINTER_INCLUDED
-
-// undo automagic DrawTextA DrawTextW stuff
-// #undef DrawText
-
-//:End Ignore
-
-
-namespace gr
-{
-
-class Segment;
-
-/*----------------------------------------------------------------------------------------------
- A SegmentPainter handles the UI-related operations on for segment.
-
- This superclass does not know how to do any actual drawing, because it has no access
- to a device. Subclasses are needed to handle drawing on the various platforms. In addition,
- it is legitimate to make a subclass to override the behavior of a specific piece of
- functionality.
-
- Hungarian: segp
-----------------------------------------------------------------------------------------------*/
-class SegmentPainter
-{
-public:
- // Static methods
-
- // Constructors/destructors/etc.
- SegmentPainter(Segment * pseg, float xOrigin = 0, float yOrigin = 0);
- //SegmentPainter(Segment * pseg, float xOrigin, float yOrigin);
-
- virtual ~SegmentPainter();
-
- virtual void setOrigin(float xsOrigin, float ysOrigin);
- virtual void setPosition(float xdPosition, float ydPosition);
- virtual void setScalingFactors(float xFactor, float yFactor);
-
- virtual void setBuggyDisplayFormat(int strategy, long textColor, long backColor,
- long underlineColor)
- {
- // Currently not implemented to do anything useful.
- }
-
- // The paint method must be implemented by a concrete subclass:
- virtual void paint() = 0;
-
- virtual void drawInsertionPoint(int ichwIP, bool fAssocPrev, bool bOn, bool fForceSplit);
- virtual void positionsOfIP(int ichwIP, bool fAssocPrev, bool fForceSplit,
- Rect * prdPrimary, Rect * prdSecondary);
- virtual bool drawSelectionRange(int ichwMin, int ichwLim,
- float ydTop, float ydBottom, bool bOn);
- virtual bool positionsOfRange(int ichwMin, int ichwLim,
- float ydTop, float ydBottom, Rect * prsBounds);
- virtual size_t getUnderlinePlacement(int ichwMin, int ichwLim,
- bool fSkipSpace,
- size_t crgMax, // number of ranges allowed
- float * prgxdLefts, float * prgxdRights, float * prgydUnderline);
-
- virtual void pointToChar(Point zptdClickPosition, int * pichw, bool * pfAssocPrev);
- virtual LgIpValidResult isValidInsertionPoint(int ichwIP);
- virtual bool doBoundariesCoincide(bool fBoundaryEnd, bool fBoundaryRight);
- virtual int arrowKeyPosition(int ichwIP, bool * pfAssocPrev,
- bool fRight, bool * pfInThisSeg);
- virtual int extendSelectionPosition(
- int charIndex, bool assocPrevMatch, bool assocPrevNeeded,
- int anchorIndex, bool movingRight, bool * inThisSeg);
-
- // For calculating underlines:
- struct LineSeg { // hungarian: ls
- float left;
- float right;
- };
-
- static float ScaleX(float xs, Rect rs, Rect rd);
- static float ScaleY(float ys, Rect rs, Rect rd);
-
- float ScaleXToDest(float xs)
- {
- float xd = ((xs + m_xsOrigin) * m_xFactor) + m_xdPosition;
- return xd;
- }
- //int ScaleXToDest(int xs)
- //{
- // int xd = (((xs + m_xsOriginInt) * m_xFactor64) >> 6) + m_xdPositionInt;
- // return xd; // >> 6 means div by 64
- //}
- float ScaleYToDest(float ys)
- {
- float yd = ((ys + m_ysOrigin) * m_yFactor) + m_ydPosition;
- return yd;
- }
-
- float ScaleXToSource(float xd)
- {
- float xs = ((xd - m_xdPosition) / m_xFactor) - m_xsOrigin;
- return xs;
- }
- float ScaleYToSource(float yd)
- {
- float ys = ((yd - m_ydPosition) / m_yFactor) - m_ysOrigin;
- return ys;
- }
-
-protected:
- // Member variables:
-
- Segment * m_pseg;
-
- // transformation factors:
- float m_xsOrigin;
- float m_ysOrigin;
- float m_xdPosition;
- float m_ydPosition;
- float m_xFactor; // destination / source
- float m_yFactor; // destination / source
-
- // optimizations for when we need integer arithmetic (converting between int and float is
- // very slow) - DELETE these.
- //int m_xsOriginInt;
- //int m_xdPositionInt;
- //int m_xFactor64;
-
- //gr::Rect m_rectSrc;
-
- // Other methods:
-
- void CalcOrDrawInsertionPoint(
- int ich, bool fAssocPrev, bool bOn, bool fForceSplit,
- Rect * prectPrimary, Rect * prectSecondary);
- void InvertIBeam(float xs, float ysTop, float ysBottom, bool fAssocPrev,
- Rect * prdRet);
- void InvertSplitIP(float xs, float ysTop, float ysBottom,
- bool fTop, bool fAssocRight, bool fSecondary, float ysMinSplitHt,
- Rect * prdRet);
- void CalcIP(int ichw, bool fBefore,
- float * pxs, float * pysTop, float * pysBottom, bool * pfRtl);
- bool CloseIPPositions(
- float * pxsBefore, float ysBeforeTop, float ysBeforeBottom,
- float * pxsAfter, float ysAfterTop, float ysAfterBottom);
- bool AtEdgeOfCluster(GrSlotOutput * pslout, int islout, bool fBefore);
- bool AtEdgeOfCluster(GrSlotOutput * psloutBase, int isloutBase,
- GrSlotOutput * pslout, int islout, bool fBefore);
- bool CanInsertIntoCluster(GrSlotOutput * pslout, int islout);
-
- void CalcPartialLigatures(bool * prgfAllSelected,
- int ichwMinSeg, int ichwLimSeg,
- int ichwMinSel, int ichwLimSel);
- void CalcHighlightRect(int ichw,
- std::vector<Rect> & vrs, std::vector<bool> & vfEntireLineHt,
- bool fJustComponent, bool * rgfHighlighted, bool fSkipTrSpace);
- void CalcCompleteCluster(int islout,
- std::vector<Rect> & vrs, std::vector<bool> & vfEntireLineHt, bool * prgfHighlighted);
- void AddRectWithoutOverlaps(std::vector<Rect> & vrect, Rect rectToAdd);
- bool AnyArea(Rect * prect);
- bool AdjustRectsToNotOverlap(std::vector<Rect> & vrect, int irect, Rect * prect2,
- std::vector<Rect> & vrectMoreToAdd);
- void AssertNoOverlaps(std::vector<Rect> & vrect);
-
- void AddLineSegWithoutOverlaps(std::vector<LineSeg> & vls, LineSeg lsToAdd);
- bool AnyLength(LineSeg * pls);
- bool AdjustLineSegsToNotOverlap(std::vector<LineSeg> & vls, int ils, LineSeg * pls2,
- std::vector<LineSeg> & vlsMoreToAdd);
- void AssertNoOverlaps(std::vector<LineSeg> & vls);
-
- GrResult ArrowKeyPositionAux(int * pichwIP, bool * pfAssocPrev,
- bool fRight, bool fMovingIn,
- bool fAssocPrevMatch, bool fAssocPrevNeeded,
- bool * pfResult);
- bool ArrowKeyPositionInternal(int * pichw, bool * pfAssocPrev,
- bool fRight, bool fAssocPrevMatch, bool fAssocPrevNeeded, int * nNextOrPrevSeg);
- bool AdjacentLigComponent(int * pichw, bool * pfAssocPrev, bool fRight, bool fMove);
-
- int PointToCharAux(float xsTry, float ysTry,
- float * pxsGlyphOffset, float * pxsGlyphWidth);
-
- // Platform-specific routines:
-
- GrResult DrawSegmentPlatform(float xs, float ys);
-
- // Low-level routines--these must be implemented appropriate by subclasses:
-
- virtual void InvertRect(float xLeft, float yTop, float xRight, float yBottom)
- {
- GrAssert(false); // no device context
- }
-
- //void SetFontProps();
- virtual void SetFontProps(unsigned long clrFore, unsigned long clrBack);
-
-};
-
-/*----------------------------------------------------------------------------------------------
- This is a subclass of SegmentPainter for which the paint operation is unnecessary.
-----------------------------------------------------------------------------------------------*/
-class SegmentNonPainter : public SegmentPainter
-{
-public:
- SegmentNonPainter(Segment * pseg)
- : SegmentPainter(pseg)
- {
- }
-
- void paint()
- {
- GrAssert(false);
- throw;
- }
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !GR_SEGPAINTER_INCLUDED
diff --git a/Build/source/libs/graphite-engine/installed-top.pc.in b/Build/source/libs/graphite-engine/installed-top.pc.in
deleted file mode 100644
index 7609afda4e4..00000000000
--- a/Build/source/libs/graphite-engine/installed-top.pc.in
+++ /dev/null
@@ -1,5 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-version=@VERSION@
diff --git a/Build/source/libs/graphite-engine/license/LICENSING.txt b/Build/source/libs/graphite-engine/license/LICENSING.txt
deleted file mode 100644
index 33a150a94d6..00000000000
--- a/Build/source/libs/graphite-engine/license/LICENSING.txt
+++ /dev/null
@@ -1,43 +0,0 @@
- Graphite 2.1 Licensing
-
- Copyright 1999-2006, SIL International
- All rights reserved.
-
- This library is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- a) the Common Public License as published by the "Agreement
- Steward" for that license (currently IBM); either version 0.5
- of the License, or (at your option) any later version,
-
- or
-
- b) the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2.1 of 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 either
- the Common Public License or the GNU Lesser General Public License
- for more details.
-
- You should have received a plain text copy of the Common Public License
- Version 0.5 with this distribution in the file named "License_CPLv05.txt".
- That text came from http://www.opensource.org/licenses/cpl.html. The
- initial "Agreement Steward" for the CPL displays currently the license at
- http://www-124.ibm.com/developerworks/oss/license-cpl.html.
-
- You should also have received a copy of the GNU Lesser General Public
- License along with this library in the file named "License_LGPLv21.txt".
- If not, write to the Free Software Foundation, Inc., 59 Temple Place,
- Suite 330, Boston, MA 02111-1307, USA or visit their web page on the
- internet at http://www.fsf.org/licenses/lgpl.html.
-
- The GNU General Public License to which the GNU Lesser General Public
- License refers can be found at http://www.gnu.org/copyleft/gpl.html.
- For convenient reference, a text version has been included with this
- distribution in the file named "License_GPLv2.txt". All of the licenses
- mentioned above can also be found at http://www.opensource.org/licenses/.
-
---------------------------------------------------------------------------
diff --git a/Build/source/libs/graphite-engine/license/License_CPLv05.txt b/Build/source/libs/graphite-engine/license/License_CPLv05.txt
deleted file mode 100644
index 4cac5dfe069..00000000000
--- a/Build/source/libs/graphite-engine/license/License_CPLv05.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-Common Public License Version 0.5
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
-
-b) in the case of each subsequent Contributor:
-
-i) changes to the Program, and
-
-ii) additions to the Program;
-
-where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
-
-b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
-
-c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
-
-a) it complies with the terms and conditions of this Agreement; and
-
-b) its license agreement:
-
-i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
-
-ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
-
-iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
-
-iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
-a) it must be made available under this Agreement; and
-
-b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
diff --git a/Build/source/libs/graphite-engine/license/License_GPLv2.txt b/Build/source/libs/graphite-engine/license/License_GPLv2.txt
deleted file mode 100644
index 1bcc46f53a6..00000000000
--- a/Build/source/libs/graphite-engine/license/License_GPLv2.txt
+++ /dev/null
@@ -1,342 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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/Build/source/libs/graphite-engine/makefile.vc b/Build/source/libs/graphite-engine/makefile.vc
deleted file mode 100644
index 2c5c5a935ef..00000000000
--- a/Build/source/libs/graphite-engine/makefile.vc
+++ /dev/null
@@ -1,814 +0,0 @@
-
-TARGET=graphite
-
-CPP=cl.exe
-CPPFLAGS=/nologo /W4 /GR /GX /I "./src/font" /I "./src/painter" /I "./src/segment" /I "./src/textsource" /I "./src/generic" /I "./include/graphite" /I "../wrappers/win32" /D "GR_NAMESPACE" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "TRACING" /Fp"$(INTDIR)\graphite.pch" /YX /Fd"$(INTDIR)\\" /FD /c
-# /Wp62
-
-LINK=link.exe
-LINK_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /pdb:"$(OUTDIR)\\graphite.pdb" /machine:I386 /out:"$(OUTDIR)\\$(TARGET).dll" /implib:"$(OUTDIR)\\$(TARGET).lib"
-
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\\$(TARGET).bsc"
-
-AR=lib
-AR_FLAGS=/OUT:$@
-
-!IF "$(MLIB)" == "MD"
-MLIB=MD
-!ELSE
-MLIB=MT
-!ENDIF
-
-OBJEXT = .obj
-SBREXT = .sbr
-
-!IF "$(CFG)" == "DEBUG"
-CPP_DEBUG=/D "DEBUG" /Gm /GR /ZI /Od /GZ /FR"$(INTDIR)\\" /$(MLIB)d
-# CPP_DEBUG=/D "DEBUG" /Gm /GR /ZI /Od /GZ /FR"$(INTDIR)\\" /MDd
-
-OUTDIR=.\debug
-INTDIR=.\debug_temp
-LINK_DEBUG= MSVCRTD.lib /debug /incremental:yes #/pdbtype:sept
-
-all : lib lib_dll bsc
-
-!ELSE
-CPP_DEBUG=/D "NDEBUG" /O2 /$(MLIB)
-# CPP_DEBUG=/D "NDEBUG" /O2 /MD
-OUTDIR=.\release
-INTDIR=.\release_temp
-LINK_DEBUG= MSVCRT.lib /incremental:no /NODEFAULTLIB:libc
-
-all : lib lib_dll
-
-!ENDIF
-
-!IF "$(TRACING)" == "1"
-CPP_DEBUG=/D "TRACING" $(CPP_DEBUG)
-!ENDIF
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-
-clean :
- @- rd /s/q .\release_temp
- @- rd /s/q .\debug_temp
-
-realclean : clean
- @- rd /s/q .\release
- @- rd /s/q .\debug
-
-LINK_OBJS=\
-# "$(INTDIR)\BinTree_i$(OBJEXT)"\
-# "$(INTDIR)\HashMap_i$(OBJEXT)"\
- "$(INTDIR)\Debug$(OBJEXT)"\
- "$(INTDIR)\Util$(OBJEXT)"\
- "$(INTDIR)\Font$(OBJEXT)"\
- "$(INTDIR)\FileFont$(OBJEXT)"\
- "$(INTDIR)\FontCache$(OBJEXT)"\
- "$(INTDIR)\FontFace$(OBJEXT)"\
- "$(INTDIR)\FileInput$(OBJEXT)"\
- "$(INTDIR)\GrCharStream$(OBJEXT)"\
- "$(INTDIR)\GrClassTable$(OBJEXT)"\
- "$(INTDIR)\GrEngine$(OBJEXT)"\
- "$(INTDIR)\GrFeature$(OBJEXT)"\
- "$(INTDIR)\GrFSM$(OBJEXT)"\
- "$(INTDIR)\GrGlyphTable$(OBJEXT)"\
- "$(INTDIR)\GrPass$(OBJEXT)"\
- "$(INTDIR)\GrPassActionCode$(OBJEXT)"\
- "$(INTDIR)\GrSlotState$(OBJEXT)"\
- "$(INTDIR)\GrSlotStream$(OBJEXT)"\
- "$(INTDIR)\GrTableManager$(OBJEXT)"\
- "$(INTDIR)\MemoryUsage$(OBJEXT)"\
- "$(INTDIR)\Segment$(OBJEXT)"\
- "$(INTDIR)\SegmentAux$(OBJEXT)"\
- "$(INTDIR)\SegmentPainter$(OBJEXT)"\
-# "$(INTDIR)\TestFSM$(OBJEXT)"\
-# "$(INTDIR)\TestPasses$(OBJEXT)"\
- "$(INTDIR)\TransductionLog$(OBJEXT)"\
- "$(INTDIR)\XmlTransductionLog$(OBJEXT)"\
- "$(INTDIR)\Platform$(OBJEXT)"\
- "$(INTDIR)\TtfUtil$(OBJEXT)"\
- "$(INTDIR)\WinFont$(OBJEXT)"\
- "$(INTDIR)\WinSegmentPainter$(OBJEXT)"
-
-LINK_DLL_OBJS=\
-# "$(INTDIR)\BinTree_i_dll$(OBJEXT)"\
-# "$(INTDIR)\HashMap_i_dll$(OBJEXT)"\
- "$(INTDIR)\Debug_dll$(OBJEXT)"\
- "$(INTDIR)\Util_dll$(OBJEXT)"\
- "$(INTDIR)\Font_dll$(OBJEXT)"\
- "$(INTDIR)\WinFont_dll$(OBJEXT)"\
- "$(INTDIR)\FileFont_dll$(OBJEXT)"\
- "$(INTDIR)\FontCache_dll$(OBJEXT)"\
- "$(INTDIR)\FontFace_dll$(OBJEXT)"\
- "$(INTDIR)\FileInput_dll$(OBJEXT)"\
- "$(INTDIR)\GrCharStream_dll$(OBJEXT)"\
- "$(INTDIR)\GrClassTable_dll$(OBJEXT)"\
- "$(INTDIR)\GrEngine_dll$(OBJEXT)"\
- "$(INTDIR)\GrFeature_dll$(OBJEXT)"\
- "$(INTDIR)\GrFSM_dll$(OBJEXT)"\
- "$(INTDIR)\GrGlyphTable_dll$(OBJEXT)"\
- "$(INTDIR)\GrPass_dll$(OBJEXT)"\
- "$(INTDIR)\GrPassActionCode_dll$(OBJEXT)"\
- "$(INTDIR)\GrSlotState_dll$(OBJEXT)"\
- "$(INTDIR)\GrSlotStream_dll$(OBJEXT)"\
- "$(INTDIR)\GrTableManager_dll$(OBJEXT)"\
- "$(INTDIR)\MemoryUsage_dll$(OBJEXT)"\
- "$(INTDIR)\Segment_dll$(OBJEXT)"\
- "$(INTDIR)\SegmentAux_dll$(OBJEXT)"\
- "$(INTDIR)\SegmentPainter_dll$(OBJEXT)"\
-# "$(INTDIR)\TestFSM_dll$(OBJEXT)"\
-# "$(INTDIR)\TestPasses_dll$(OBJEXT)"\
- "$(INTDIR)\TransductionLog_dll$(OBJEXT)"\
- "$(INTDIR)\XmlTransductionLog_dll$(OBJEXT)"\
- "$(INTDIR)\WinSegmentPainter_dll$(OBJEXT)"\
- "$(INTDIR)\Platform_dll$(OBJEXT)"\
- "$(INTDIR)\TtfUtil_dll$(OBJEXT)"
-
-DLL_LINK_OBJS=\
- "$(INTDIR)\win32_dll_dll$(OBJEXT)"
-
-BSC32_SBRS=\
-# "$(INTDIR)\BinTree_i$(SBREXT)"\
-# "$(INTDIR)\HashMap_i$(SBREXT)"\
- "$(INTDIR)\Debug$(SBREXT)"\
- "$(INTDIR)\Util$(SBREXT)"\
- "$(INTDIR)\Font$(SBREXT)"\
- "$(INTDIR)\WinFont$(SBREXT)"\
- "$(INTDIR)\FileFont$(SBREXT)"\
- "$(INTDIR)\FontCache$(SBREXT)"\
- "$(INTDIR)\FontFace$(SBREXT)"\
- "$(INTDIR)\FileInput$(SBREXT)"\
- "$(INTDIR)\GrCharStream$(SBREXT)"\
- "$(INTDIR)\GrClassTable$(SBREXT)"\
- "$(INTDIR)\GrEngine$(SBREXT)"\
- "$(INTDIR)\GrFeature$(SBREXT)"\
- "$(INTDIR)\GrFSM$(SBREXT)"\
- "$(INTDIR)\GrGlyphTable$(SBREXT)"\
- "$(INTDIR)\GrPass$(SBREXT)"\
- "$(INTDIR)\GrPassActionCode$(SBREXT)"\
- "$(INTDIR)\GrSlotState$(SBREXT)"\
- "$(INTDIR)\GrSlotStream$(SBREXT)"\
- "$(INTDIR)\GrTableManager$(SBREXT)"\
- "$(INTDIR)\MemoryUsage$(SBREXT)"\
- "$(INTDIR)\Segment$(SBREXT)"\
- "$(INTDIR)\SegmentAux$(SBREXT)"\
- "$(INTDIR)\SegmentPainter$(SBREXT)"\
-# "$(INTDIR)\TestFSM$(SBREXT)"\
-# "$(INTDIR)\TestPasses$(SBREXT)"\
- "$(INTDIR)\TransductionLog$(SBREXT)"\
- "$(INTDIR)\XmlTransductionLog$(SBREXT)"\
- "$(INTDIR)\WinSegmentPainter$(SBREXT)"\
- "$(INTDIR)\Platform$(SBREXT)"\
- "$(INTDIR)\TtfUtil$(SBREXT)"\
- "$(INTDIR)\win32_dll$(SBREXT)"
-
-$(OUTDIR) :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-$(INTDIR) :
- if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
-
-lib : "$(OUTDIR)/$(TARGET).lib"
-
-lib_dll : "$(OUTDIR)/$(TARGET)_dll.lib"
-
-"$(OUTDIR)/$(TARGET).lib" : "$(OUTDIR)" "$(INTDIR)" $(LINK_OBJS)
- $(AR) @<<
- $(AR_FLAGS) $(LINK_OBJS)
-<<
-
-"$(OUTDIR)/$(TARGET)_dll.lib" : "$(OUTDIR)" "$(INTDIR)" $(LINK_DLL_OBJS)
- $(AR) @<<
- $(AR_FLAGS) $(LINK_DLL_OBJS)
-<<
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\BinTree_i$(OBJEXT)" "$(INTDIR)\BinTree_i$(SBREXT)" : "src/generic/BinTree_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\BinTree_i$(OBJEXT)" $?
-
-"$(INTDIR)\BinTree_i_dll$(OBJEXT)" "$(INTDIR)\BinTree_i_dll$(SBREXT)" : "src/generic/BinTree_i.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\BinTree_i_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\BinTree_i$(OBJEXT)" : "src/generic/BinTree_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\BinTree_i$(OBJEXT)" $?
-
-"$(INTDIR)\BinTree_i_dll$(OBJEXT)" : "src/generic/BinTree_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /D "_DLL" /Fo"$(INTDIR)\BinTree_i_dll$(OBJEXT)" $?
-
-!ENDIF
-
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\Debug$(OBJEXT)" "$(INTDIR)\Debug$(SBREXT)" : "src/generic/Debug.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Debug$(OBJEXT)" $?
-
-"$(INTDIR)\Debug_dll$(OBJEXT)" "$(INTDIR)\Debug_dll$(SBREXT)" : "src/generic/Debug.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\Debug_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\Debug$(OBJEXT)" : "src/generic/Debug.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Debug$(OBJEXT)" $?
-
-"$(INTDIR)\Debug_dll$(OBJEXT)" : "src/generic/Debug.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\Debug_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\HashMap$(OBJEXT)" "$(INTDIR)\HashMap$(SBREXT)" : "src/generic/HashMap.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\HashMap$(OBJEXT)" $?
-
-"$(INTDIR)\HashMap_dll$(OBJEXT)" "$(INTDIR)\HashMap_dll$(SBREXT)" : "src/generic/HashMap.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\HashMap_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\HashMap$(OBJEXT)" : "src/generic/HashMap.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\HashMap$(OBJEXT)" $?
-
-"$(INTDIR)\HashMap_dll$(OBJEXT)" : "src/generic/HashMap.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\HashMap_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\HashMap_i$(OBJEXT)" "$(INTDIR)\HashMap_i$(SBREXT)" : "src/generic/HashMap_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\HashMap_i$(OBJEXT)" $?
-
-"$(INTDIR)\HashMap_i_dll$(OBJEXT)" "$(INTDIR)\HashMap_i_dll$(SBREXT)" : "src/generic/HashMap_i.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\HashMap_i_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\HashMap_i$(OBJEXT)" : "src/generic/HashMap_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\HashMap_i$(OBJEXT)" $?
-
-"$(INTDIR)\HashMap_i_dll$(OBJEXT)" : "src/generic/HashMap_i.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\HashMap_i_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\Set_i$(OBJEXT)" "$(INTDIR)\Set_i$(SBREXT)" : "src/generic/Set_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Set_i$(OBJEXT)" $?
-
-"$(INTDIR)\Set_i_dll$(OBJEXT)" "$(INTDIR)\Set_i_dll$(SBREXT)" : "src/generic/Set_i.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\Set_i_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\Set_i$(OBJEXT)" : "src/generic/Set_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Set_i$(OBJEXT)" $?
-
-"$(INTDIR)\Set_i_dll$(OBJEXT)" : "src/generic/Set_i.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\Set_i_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\Util$(OBJEXT)" "$(INTDIR)\Util$(SBREXT)" : "src/generic/Util.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Util$(OBJEXT)" $?
-
-"$(INTDIR)\Util_dll$(OBJEXT)" "$(INTDIR)\Util_dll$(SBREXT)" : "src/generic/Util.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\Util_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\Util$(OBJEXT)" : "src/generic/Util.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Util$(OBJEXT)" $?
-
-"$(INTDIR)\Util_dll$(OBJEXT)" : "src/generic/Util.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\Util_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\UtilString$(OBJEXT)" "$(INTDIR)\UtilString$(SBREXT)" : "src/generic/UtilString.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\UtilString$(OBJEXT)" $?
-
-"$(INTDIR)\UtilString_dll$(OBJEXT)" "$(INTDIR)\UtilString_dll$(SBREXT)" : "src/generic/UtilString.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\UtilString_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\UtilString$(OBJEXT)" : "src/generic/UtilString.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\UtilString$(OBJEXT)" $?
-
-"$(INTDIR)\UtilString_dll$(OBJEXT)" : "src/generic/UtilString.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\UtilString_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\Vector_i$(OBJEXT)" "$(INTDIR)\Vector_i$(SBREXT)" : "src/generic/Vector_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Vector_i$(OBJEXT)" $?
-
-"$(INTDIR)\Vector_i_dll$(OBJEXT)" "$(INTDIR)\Vector_i_dll$(SBREXT)" : "src/generic/Vector_i.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\Vector_i_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\Vector_i$(OBJEXT)" : "src/generic/Vector_i.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Vector_i$(OBJEXT)" $?
-
-"$(INTDIR)\Vector_i_dll$(OBJEXT)" : "src/generic/Vector_i.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\Vector_i_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\Font$(OBJEXT)" "$(INTDIR)\Font$(SBREXT)" : "src/font/Font.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Font$(OBJEXT)" $?
-
-"$(INTDIR)\Font_dll$(OBJEXT)" "$(INTDIR)\Font_dll$(SBREXT)" : "src/font/Font.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\Font_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\Font$(OBJEXT)" : "src/font/Font.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Font$(OBJEXT)" $?
-
-"$(INTDIR)\Font_dll$(OBJEXT)" : "src/font/Font.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\Font_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrUtil$(OBJEXT)" "$(INTDIR)\GrUtil$(SBREXT)" : "src/font/GrUtil.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrUtil$(OBJEXT)" $?
-
-"$(INTDIR)\GrUtil_dll$(OBJEXT)" "$(INTDIR)\GrUtil_dll$(SBREXT)" : "src/font/GrUtil.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrUtil_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrUtil$(OBJEXT)" : "src/font/GrUtil.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrUtil$(OBJEXT)" $?
-
-"$(INTDIR)\GrUtil_dll$(OBJEXT)" : "src/font/GrUtil.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrUtil_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\TtfUtil$(OBJEXT)" "$(INTDIR)\TtfUtil$(SBREXT)" : "src/font/TtfUtil.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TtfUtil$(OBJEXT)" $?
-
-"$(INTDIR)\TtfUtil_dll$(OBJEXT)" "$(INTDIR)\TtfUtil_dll$(SBREXT)" : "src/font/TtfUtil.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\TtfUtil_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\TtfUtil$(OBJEXT)" : "src/font/TtfUtil.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TtfUtil$(OBJEXT)" $?
-
-"$(INTDIR)\TtfUtil_dll$(OBJEXT)" : "src/font/TtfUtil.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\TtfUtil_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\FontCache$(OBJEXT)" "$(INTDIR)\FontCache$(SBREXT)" : "src/segment/FontCache.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FontCache$(OBJEXT)" $?
-
-"$(INTDIR)\FontCache_dll$(OBJEXT)" "$(INTDIR)\FontCache_dll$(SBREXT)" : "src/segment/FontCache.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\FontCache_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\FontCache$(OBJEXT)" : "src/segment/FontCache.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FontCache$(OBJEXT)" $?
-
-"$(INTDIR)\FontCache_dll$(OBJEXT)" : "src/segment/FontCache.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\FontCache_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\FontFace$(OBJEXT)" "$(INTDIR)\FontFace$(SBREXT)" : "src/segment/FontFace.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FontFace$(OBJEXT)" $?
-
-"$(INTDIR)\FontFace_dll$(OBJEXT)" "$(INTDIR)\FontFace_dll$(SBREXT)" : "src/segment/FontFace.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\FontFace_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\FontFace$(OBJEXT)" : "src/segment/FontFace.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FontFace$(OBJEXT)" $?
-
-"$(INTDIR)\FontFace_dll$(OBJEXT)" : "src/segment/FontFace.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\FontFace_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\FileInput$(OBJEXT)" "$(INTDIR)\FileInput$(SBREXT)" : "src/segment/FileInput.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FileInput$(OBJEXT)" $?
-
-"$(INTDIR)\FileInput_dll$(OBJEXT)" "$(INTDIR)\FileInput_dll$(SBREXT)" : "src/segment/FileInput.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\FileInput_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\FileInput$(OBJEXT)" : "src/segment/FileInput.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FileInput$(OBJEXT)" $?
-
-"$(INTDIR)\FileInput_dll$(OBJEXT)" : "src/segment/FileInput.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\FileInput_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrCharStream$(OBJEXT)" "$(INTDIR)\GrCharStream$(SBREXT)" : "src/segment/GrCharStream.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrCharStream$(OBJEXT)" $?
-
-"$(INTDIR)\GrCharStream_dll$(OBJEXT)" "$(INTDIR)\GrCharStream_dll$(SBREXT)" : "src/segment/GrCharStream.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrCharStream_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrCharStream$(OBJEXT)" : "src/segment/GrCharStream.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrCharStream$(OBJEXT)" $?
-
-"$(INTDIR)\GrCharStream_dll$(OBJEXT)" : "src/segment/GrCharStream.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrCharStream_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrClassTable$(OBJEXT)" "$(INTDIR)\GrClassTable$(SBREXT)" : "src/segment/GrClassTable.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrClassTable$(OBJEXT)" $?
-
-"$(INTDIR)\GrClassTable_dll$(OBJEXT)" "$(INTDIR)\GrClassTable_dll$(SBREXT)" : "src/segment/GrClassTable.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrClassTable_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrClassTable$(OBJEXT)" : "src/segment/GrClassTable.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrClassTable$(OBJEXT)" $?
-
-"$(INTDIR)\GrClassTable_dll$(OBJEXT)" : "src/segment/GrClassTable.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrClassTable_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrEngine$(OBJEXT)" "$(INTDIR)\GrEngine$(SBREXT)" : "src/segment/GrEngine.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrEngine$(OBJEXT)" $?
-
-"$(INTDIR)\GrEngine_dll$(OBJEXT)" "$(INTDIR)\GrEngine_dll$(SBREXT)" : "src/segment/GrEngine.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrEngine_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrEngine$(OBJEXT)" : "src/segment/GrEngine.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrEngine$(OBJEXT)" $?
-
-"$(INTDIR)\GrEngine_dll$(OBJEXT)" : "src/segment/GrEngine.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrEngine_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrFeature$(OBJEXT)" "$(INTDIR)\GrFeature$(SBREXT)" : "src/segment/GrFeature.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrFeature$(OBJEXT)" $?
-
-"$(INTDIR)\GrFeature_dll$(OBJEXT)" "$(INTDIR)\GrFeature_dll$(SBREXT)" : "src/segment/GrFeature.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrFeature_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrFeature$(OBJEXT)" : "src/segment/GrFeature.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrFeature$(OBJEXT)" $?
-
-"$(INTDIR)\GrFeature_dll$(OBJEXT)" : "src/segment/GrFeature.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrFeature_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrFSM$(OBJEXT)" "$(INTDIR)\GrFSM$(SBREXT)" : "src/segment/GrFSM.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrFSM$(OBJEXT)" $?
-
-"$(INTDIR)\GrFSM_dll$(OBJEXT)" "$(INTDIR)\GrFSM_dll$(SBREXT)" : "src/segment/GrFSM.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrFSM_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrFSM$(OBJEXT)" : "src/segment/GrFSM.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrFSM$(OBJEXT)" $?
-
-"$(INTDIR)\GrFSM_dll$(OBJEXT)" : "src/segment/GrFSM.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrFSM_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrGlyphTable$(OBJEXT)" "$(INTDIR)\GrGlyphTable$(SBREXT)" : "src/segment/GrGlyphTable.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrGlyphTable$(OBJEXT)" $?
-
-"$(INTDIR)\GrGlyphTable_dll$(OBJEXT)" "$(INTDIR)\GrGlyphTable_dll$(SBREXT)" : "src/segment/GrGlyphTable.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrGlyphTable_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrGlyphTable$(OBJEXT)" : "src/segment/GrGlyphTable.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrGlyphTable$(OBJEXT)" $?
-
-"$(INTDIR)\GrGlyphTable_dll$(OBJEXT)" : "src/segment/GrGlyphTable.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrGlyphTable_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrPass$(OBJEXT)" "$(INTDIR)\GrPass$(SBREXT)" : "src/segment/GrPass.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrPass$(OBJEXT)" $?
-
-"$(INTDIR)\GrPass_dll$(OBJEXT)" "$(INTDIR)\GrPass_dll$(SBREXT)" : "src/segment/GrPass.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrPass_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrPass$(OBJEXT)" : "src/segment/GrPass.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrPass$(OBJEXT)" $?
-
-"$(INTDIR)\GrPass_dll$(OBJEXT)" : "src/segment/GrPass.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrPass_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrPassActionCode$(OBJEXT)" "$(INTDIR)\GrPassActionCode$(SBREXT)" : "src/segment/GrPassActionCode.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrPassActionCode$(OBJEXT)" $?
-
-"$(INTDIR)\GrPassActionCode_dll$(OBJEXT)" "$(INTDIR)\GrPassActionCode_dll$(SBREXT)" : "src/segment/GrPassActionCode.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrPassActionCode_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrPassActionCode$(OBJEXT)" : "src/segment/GrPassActionCode.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrPassActionCode$(OBJEXT)" $?
-
-"$(INTDIR)\GrPassActionCode_dll$(OBJEXT)" : "src/segment/GrPassActionCode.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrPassActionCode_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrSlotState$(OBJEXT)" "$(INTDIR)\GrSlotState$(SBREXT)" : "src/segment/GrSlotState.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrSlotState$(OBJEXT)" $?
-
-"$(INTDIR)\GrSlotState_dll$(OBJEXT)" "$(INTDIR)\GrSlotState_dll$(SBREXT)" : "src/segment/GrSlotState.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrSlotState_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrSlotState$(OBJEXT)" : "src/segment/GrSlotState.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrSlotState$(OBJEXT)" $?
-
-"$(INTDIR)\GrSlotState_dll$(OBJEXT)" : "src/segment/GrSlotState.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrSlotState_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrSlotStream$(OBJEXT)" "$(INTDIR)\GrSlotStream$(SBREXT)" : "src/segment/GrSlotStream.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrSlotStream$(OBJEXT)" $?
-
-"$(INTDIR)\GrSlotStream_dll$(OBJEXT)" "$(INTDIR)\GrSlotStream_dll$(SBREXT)" : "src/segment/GrSlotStream.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrSlotStream_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrSlotStream$(OBJEXT)" : "src/segment/GrSlotStream.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrSlotStream$(OBJEXT)" $?
-
-"$(INTDIR)\GrSlotStream_dll$(OBJEXT)" : "src/segment/GrSlotStream.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrSlotStream_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\GrTableManager$(OBJEXT)" "$(INTDIR)\GrTableManager$(SBREXT)" : "src/segment/GrTableManager.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrTableManager$(OBJEXT)" $?
-
-"$(INTDIR)\GrTableManager_dll$(OBJEXT)" "$(INTDIR)\GrTableManager_dll$(SBREXT)" : "src/segment/GrTableManager.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\GrTableManager_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\GrTableManager$(OBJEXT)" : "src/segment/GrTableManager.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\GrTableManager$(OBJEXT)" $?
-
-"$(INTDIR)\GrTableManager_dll$(OBJEXT)" : "src/segment/GrTableManager.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\GrTableManager_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\MemoryUsage$(OBJEXT)" "$(INTDIR)\MemoryUsage$(SBREXT)" : "src/segment/MemoryUsage.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\MemoryUsage$(OBJEXT)" $?
-
-"$(INTDIR)\MemoryUsage_dll$(OBJEXT)" "$(INTDIR)\MemoryUsage_dll$(SBREXT)" : "src/segment/MemoryUsage.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\MemoryUsage_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\MemoryUsage$(OBJEXT)" : "src/segment/MemoryUsage.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\MemoryUsage$(OBJEXT)" $?
-
-"$(INTDIR)\MemoryUsage_dll$(OBJEXT)" : "src/segment/MemoryUsage.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\MemoryUsage_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\Segment$(OBJEXT)" "$(INTDIR)\Segment$(SBREXT)" : "src/segment/Segment.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Segment$(OBJEXT)" $?
-
-"$(INTDIR)\Segment_dll$(OBJEXT)" "$(INTDIR)\Segment_dll$(SBREXT)" : "src/segment/Segment.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\Segment_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\Segment$(OBJEXT)" : "src/segment/Segment.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Segment$(OBJEXT)" $?
-
-"$(INTDIR)\Segment_dll$(OBJEXT)" : "src/segment/Segment.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\Segment_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\SegmentAux$(OBJEXT)" "$(INTDIR)\SegmentAux$(SBREXT)" : "src/segment/SegmentAux.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\SegmentAux$(OBJEXT)" $?
-
-"$(INTDIR)\SegmentAux_dll$(OBJEXT)" "$(INTDIR)\SegmentAux_dll$(SBREXT)" : "src/segment/SegmentAux.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\SegmentAux_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\SegmentAux$(OBJEXT)" : "src/segment/SegmentAux.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\SegmentAux$(OBJEXT)" $?
-
-"$(INTDIR)\SegmentAux_dll$(OBJEXT)" : "src/segment/SegmentAux.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\SegmentAux_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\TestFSM$(OBJEXT)" "$(INTDIR)\TestFSM$(SBREXT)" : "src/segment/TestFSM.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TestFSM$(OBJEXT)" $?
-
-"$(INTDIR)\TestFSM_dll$(OBJEXT)" "$(INTDIR)\TestFSM_dll$(SBREXT)" : "src/segment/TestFSM.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\TestFSM_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\TestFSM$(OBJEXT)" : "src/segment/TestFSM.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TestFSM$(OBJEXT)" $?
-
-"$(INTDIR)\TestFSM_dll$(OBJEXT)" : "src/segment/TestFSM.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\TestFSM_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\TestPasses$(OBJEXT)" "$(INTDIR)\TestPasses$(SBREXT)" : "src/segment/TestPasses.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TestPasses$(OBJEXT)" $?
-
-"$(INTDIR)\TestPasses_dll$(OBJEXT)" "$(INTDIR)\TestPasses_dll$(SBREXT)" : "src/segment/TestPasses.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\TestPasses_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\TestPasses$(OBJEXT)" : "src/segment/TestPasses.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TestPasses$(OBJEXT)" $?
-
-"$(INTDIR)\TestPasses_dll$(OBJEXT)" : "src/segment/TestPasses.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\TestPasses_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\TransductionLog$(OBJEXT)" "$(INTDIR)\TransductionLog$(SBREXT)" : "src/segment/TransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TransductionLog$(OBJEXT)" $?
-
-"$(INTDIR)\TransductionLog_dll$(OBJEXT)" "$(INTDIR)\TransductionLog_dll$(SBREXT)" : "src/segment/TransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\TransductionLog_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\TransductionLog$(OBJEXT)" : "src/segment/TransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\TransductionLog$(OBJEXT)" $?
-
-"$(INTDIR)\TransductionLog_dll$(OBJEXT)" : "src/segment/TransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\TransductionLog_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\XmlTransductionLog$(OBJEXT)" "$(INTDIR)\XmlTransductionLog$(SBREXT)" : "src/segment/XmlTransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\XmlTransductionLog$(OBJEXT)" $?
-
-"$(INTDIR)\XmlTransductionLog_dll$(OBJEXT)" "$(INTDIR)\XmlTransductionLog_dll$(SBREXT)" : "src/segment/XmlTransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\XmlTransductionLog_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\XmlTransductionLog$(OBJEXT)" : "src/segment/XmlTransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\XmlTransductionLog$(OBJEXT)" $?
-
-"$(INTDIR)\XmlTransductionLog_dll$(OBJEXT)" : "src/segment/XmlTransductionLog.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\XmlTransductionLog_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\Platform$(OBJEXT)" "$(INTDIR)\Platform$(SBREXT)" : "src/segment/Platform.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Platform$(OBJEXT)" $?
-
-"$(INTDIR)\Platform_dll$(OBJEXT)" "$(INTDIR)\Platform_dll$(SBREXT)" : "src/segment/Platform.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\Platform_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\Platform$(OBJEXT)" : "src/segment/Platform.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\Platform$(OBJEXT)" $?
-
-"$(INTDIR)\Platform_dll$(OBJEXT)" : "src/segment/Platform.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\Platform_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\SegmentPainter$(OBJEXT)" "$(INTDIR)\SegmentPainter$(SBREXT)" : "src/painter/SegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\SegmentPainter$(OBJEXT)" $?
-
-"$(INTDIR)\SegmentPainter_dll$(OBJEXT)" "$(INTDIR)\SegmentPainter_dll$(SBREXT)" : "src/painter/SegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\SegmentPainter_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\SegmentPainter$(OBJEXT)" : "src/painter/SegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\SegmentPainter$(OBJEXT)" $?
-
-"$(INTDIR)\SegmentPainter_dll$(OBJEXT)" : "src/painter/SegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\SegmentPainter_dll$(OBJEXT)" $?
-
-!ENDIF
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\WinSegmentPainter$(OBJEXT)" "$(INTDIR)\WinSegmentPainter$(SBREXT)" : "..\wrappers\win32\WinSegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\WinSegmentPainter$(OBJEXT)" $?
-
-"$(INTDIR)\WinSegmentPainter_dll$(OBJEXT)" "$(INTDIR)\WinSegmentPainter_dll$(SBREXT)" : "..\wrappers\win32\WinSegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\WinSegmentPainter_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\WinSegmentPainter$(OBJEXT)" : "..\wrappers\win32\WinSegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\WinSegmentPainter$(OBJEXT)" $?
-
-"$(INTDIR)\WinSegmentPainter_dll$(OBJEXT)" : "..\wrappers\win32\WinSegmentPainter.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\WinSegmentPainter_dll$(OBJEXT)" $?
-
-!ENDIF
-
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\WinFont$(OBJEXT)" "$(INTDIR)\WinFont$(SBREXT)" : "../wrappers/win32/WinFont.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\WinFont$(OBJEXT)" $?
-
-"$(INTDIR)\WinFont_dll$(OBJEXT)" "$(INTDIR)\WinFont_dll$(SBREXT)" : "../wrappers/win32/WinFont.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\WinFont_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\WinFont$(OBJEXT)" : "../wrappers/win32/WinFont.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\WinFont$(OBJEXT)" $?
-
-"$(INTDIR)\WinFont_dll$(OBJEXT)" : "../wrappers/win32/WinFont.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\WinFont_dll$(OBJEXT)" $?
-
-!ENDIF
-
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\FileFont$(OBJEXT)" "$(INTDIR)\FileFont$(SBREXT)" : "src/font/FileFont.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FileFont$(OBJEXT)" $?
-
-"$(INTDIR)\FileFont_dll$(OBJEXT)" "$(INTDIR)\FileFont_dll$(SBREXT)" : "src/font/FileFont.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\FileFont_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\FileFont$(OBJEXT)" : "src/font/FileFont.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\FileFont$(OBJEXT)" $?
-
-"$(INTDIR)\FileFont_dll$(OBJEXT)" : "src/font/FileFont.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\FileFont_dll$(OBJEXT)" $?
-
-!ENDIF
-
-
-!IF "$(CFG)" == "DEBUG"
-"$(INTDIR)\..\wrappers\win32\win32_dll$(OBJEXT)" "$(INTDIR)\win32_dll$(SBREXT)" : "..\wrappers\win32\win32_dll.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\win32_dll$(OBJEXT)" $?
-
-"$(INTDIR)\win32_dll_dll$(OBJEXT)" "$(INTDIR)\win32_dll_dll$(SBREXT)" : "..\wrappers\win32\win32_dll.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" $(CPP_DEBUG) /Fo"$(INTDIR)\win32_dll_dll$(OBJEXT)" $?
-
-!ELSE
-"$(INTDIR)\win32_dll$(OBJEXT)" : "..\wrappers\win32\win32_dll.cpp"
- @- $(CPP) $(CPPFLAGS) $(CPP_DEBUG) /Fo"$(INTDIR)\win32_dll$(OBJEXT)" $?
-
-"$(INTDIR)\win32_dll_dll$(OBJEXT)" : "..\wrappers\win32\win32_dll.cpp"
- @- $(CPP) $(CPPFLAGS) /D "_DLL" /Fo"$(INTDIR)\win32_dll_dll$(OBJEXT)" $?
-
-!ENDIF
-
-bsc : "$(OUTDIR)/$(TARGET).bsc"
-
-"$(OUTDIR)/$(TARGET).bsc" : "$(OUTDIR)" $(BSC32_SBRS)
- $(BSC32) @<<
- $(BSC32_FLAGS) $(BSC32_SBRS)
-<<
-
-dll : $(OUTDIR)/$(TARGET).dll
-
-"$(OUTDIR)/$(TARGET).dll" : "$(OUTDIR)" $(DEF_FILE) lib_dll $(DLL_LINK_OBJS)
- $(LINK) $(LINK_FLAGS) $(LINK_DEBUG) $(OUTDIR)/$(TARGET)_dll.lib $(DLL_LINK_OBJS)
-
diff --git a/Build/source/libs/graphite-engine/silgraphite.pc.in b/Build/source/libs/graphite-engine/silgraphite.pc.in
deleted file mode 100644
index 6a57ab7838b..00000000000
--- a/Build/source/libs/graphite-engine/silgraphite.pc.in
+++ /dev/null
@@ -1,7 +0,0 @@
-
-Name: SILGraphite
-Description: Script rendering engine
-Version: ${version}
-Libs: -L${libdir} -lgraphite
-Cflags: -I${includedir}
-
diff --git a/Build/source/libs/graphite-engine/src/Makefile.am b/Build/source/libs/graphite-engine/src/Makefile.am
deleted file mode 100644
index 7d55c002a23..00000000000
--- a/Build/source/libs/graphite-engine/src/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-AUTOMAKE_OPTIONS = 1.6
-
-AM_CPPFLAGS = -I$(top_srcdir)/include/graphite -I$(top_srcdir)/src/generic
-AM_CPPFLAGS += -I$(top_srcdir)/src/font -I$(top_srcdir)/src/segment
-#AM_CPPFLAGS += $(FT_CFLAGS) $(XFT_CFLAGS)
-#AM_CPPFLAGS += -D_UNICODE -DUNICODE -DNO_ASM
-
-lib_LTLIBRARIES = libgraphite.la
-
-libgraphite_la_LDFLAGS = -version-info 3:0:0
-
-#EXTRA_DIST=textsource
-EXTRA_DIST=
-graphiteinclude_HEADERS =
-graphiteincludedir = $(includedir)/graphite
-include ../include/Makefile.am
-
-libgraphite_la_SOURCES =
-include generic/Makefile.am
-include font/Makefile.am
-include segment/Makefile.am
-include painter/Makefile.am
diff --git a/Build/source/libs/graphite-engine/src/Makefile.in b/Build/source/libs/graphite-engine/src/Makefile.in
deleted file mode 100644
index e84ac5e7e29..00000000000
--- a/Build/source/libs/graphite-engine/src/Makefile.in
+++ /dev/null
@@ -1,767 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(graphiteinclude_HEADERS) \
- $(srcdir)/../include/Makefile.am $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(srcdir)/font/Makefile.am \
- $(srcdir)/generic/Makefile.am $(srcdir)/painter/Makefile.am \
- $(srcdir)/segment/Makefile.am
-subdir = src
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" \
- "$(DESTDIR)$(graphiteincludedir)"
-libLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(lib_LTLIBRARIES)
-libgraphite_la_LIBADD =
-am_libgraphite_la_OBJECTS = Debug.lo Util.lo Font.lo TtfUtil.lo \
- FileFont.lo FileInput.lo FontCache.lo FontFace.lo \
- GrCharStream.lo GrClassTable.lo GrEngine.lo GrFeature.lo \
- GrFSM.lo GrGlyphTable.lo GrPassActionCode.lo GrPass.lo \
- GrSlotState.lo GrSlotStream.lo GrTableManager.lo \
- MemoryUsage.lo Platform.lo SegmentAux.lo Segment.lo TestFSM.lo \
- TestPasses.lo TransductionLog.lo SegmentPainter.lo
-libgraphite_la_OBJECTS = $(am_libgraphite_la_OBJECTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libgraphite_la_SOURCES)
-DIST_SOURCES = $(libgraphite_la_SOURCES)
-graphiteincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(graphiteinclude_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-GREP = @GREP@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LSB_RELEASE = @LSB_RELEASE@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-REL_CODENAME = @REL_CODENAME@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIZEOF_WCHAR_T = @SIZEOF_WCHAR_T@
-STRIP = @STRIP@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-AUTOMAKE_OPTIONS = 1.6
-AM_CPPFLAGS = -I$(top_srcdir)/include/graphite \
- -I$(top_srcdir)/src/generic -I$(top_srcdir)/src/font \
- -I$(top_srcdir)/src/segment
-#AM_CPPFLAGS += $(FT_CFLAGS) $(XFT_CFLAGS)
-#AM_CPPFLAGS += -D_UNICODE -DUNICODE -DNO_ASM
-lib_LTLIBRARIES = libgraphite.la
-libgraphite_la_LDFLAGS = -version-info 3:0:0
-
-#EXTRA_DIST=textsource
-EXTRA_DIST = $(top_srcdir)/include/graphite/BinTree.h \
- $(top_srcdir)/include/graphite/GenericResource.h \
- $(top_srcdir)/include/graphite/HashMap.h $(genericdir)/*.h \
- $(genericdir)/BinTree_i.cpp $(genericdir)/HashMap_i.cpp \
- $(fontdir)/*.h $(segmentdir)/*.h
-graphiteinclude_HEADERS = $(top_srcdir)/include/graphite/FileFont.h \
- $(top_srcdir)/include/graphite/Font.h \
- $(top_srcdir)/include/graphite/GraphiteProcess.h \
- $(top_srcdir)/include/graphite/GrAppData.h \
- $(top_srcdir)/include/graphite/GrClient.h \
- $(top_srcdir)/include/graphite/GrCommon.h \
- $(top_srcdir)/include/graphite/GrConstants.h \
- $(top_srcdir)/include/graphite/GrData.h \
- $(top_srcdir)/include/graphite/GrDebug.h \
- $(top_srcdir)/include/graphite/GrExt.h \
- $(top_srcdir)/include/graphite/GrFeature.h \
- $(top_srcdir)/include/graphite/GrMstypes.h \
- $(top_srcdir)/include/graphite/GrPlatform.h \
- $(top_srcdir)/include/graphite/GrResult.h \
- $(top_srcdir)/include/graphite/GrStructs.h \
- $(top_srcdir)/include/graphite/GrWrappers.h \
- $(top_srcdir)/include/graphite/IGraphiteProcess.h \
- $(top_srcdir)/include/graphite/IGrEngine.h \
- $(top_srcdir)/include/graphite/IGrJustifier.h \
- $(top_srcdir)/include/graphite/ITextSource.h \
- $(top_srcdir)/include/graphite/MemoryUsage.h \
- $(top_srcdir)/include/graphite/SegmentAux.h \
- $(top_srcdir)/include/graphite/Segment.h \
- $(top_srcdir)/include/graphite/SegmentPainter.h
-graphiteincludedir = $(includedir)/graphite
-libgraphite_la_SOURCES = $(genericdir)/Debug.cpp \
- $(genericdir)/Util.cpp $(fontdir)/Font.cpp \
- $(fontdir)/TtfUtil.cpp $(fontdir)/FileFont.cpp \
- $(segmentdir)/FileInput.cpp $(segmentdir)/FontCache.cpp \
- $(segmentdir)/FontFace.cpp $(segmentdir)/GrCharStream.cpp \
- $(segmentdir)/GrClassTable.cpp $(segmentdir)/GrEngine.cpp \
- $(segmentdir)/GrFeature.cpp $(segmentdir)/GrFSM.cpp \
- $(segmentdir)/GrGlyphTable.cpp \
- $(segmentdir)/GrPassActionCode.cpp $(segmentdir)/GrPass.cpp \
- $(segmentdir)/GrSlotState.cpp $(segmentdir)/GrSlotStream.cpp \
- $(segmentdir)/GrTableManager.cpp $(segmentdir)/MemoryUsage.cpp \
- $(segmentdir)/Platform.cpp $(segmentdir)/SegmentAux.cpp \
- $(segmentdir)/Segment.cpp $(segmentdir)/TestFSM.cpp \
- $(segmentdir)/TestPasses.cpp $(segmentdir)/TransductionLog.cpp \
- $(painterdir)/SegmentPainter.cpp
-genericdir = $(top_srcdir)/src/generic
-fontdir = $(top_srcdir)/src/font
-segmentdir = $(top_srcdir)/src/segment
-painterdir = $(top_srcdir)/src/painter
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .cpp .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../include/Makefile.am $(srcdir)/generic/Makefile.am $(srcdir)/font/Makefile.am $(srcdir)/segment/Makefile.am $(srcdir)/painter/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign src/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- if test -f $$p; then \
- f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
- else :; fi; \
- done
-
-uninstall-libLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
- done
-
-clean-libLTLIBRARIES:
- -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- test "$$dir" != "$$p" || dir=.; \
- echo "rm -f \"$${dir}/so_locations\""; \
- rm -f "$${dir}/so_locations"; \
- done
-libgraphite.la: $(libgraphite_la_OBJECTS) $(libgraphite_la_DEPENDENCIES)
- $(CXXLINK) -rpath $(libdir) $(libgraphite_la_LDFLAGS) $(libgraphite_la_OBJECTS) $(libgraphite_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Debug.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileFont.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileInput.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Font.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontCache.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontFace.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrCharStream.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrClassTable.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrEngine.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrFSM.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrFeature.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrGlyphTable.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrPass.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrPassActionCode.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrSlotState.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrSlotStream.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrTableManager.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemoryUsage.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Platform.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Segment.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentAux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentPainter.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestFSM.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestPasses.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TransductionLog.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TtfUtil.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Util.Plo@am__quote@
-
-.cpp.o:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-
-Debug.lo: $(genericdir)/Debug.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Debug.lo -MD -MP -MF "$(DEPDIR)/Debug.Tpo" -c -o Debug.lo `test -f '$(genericdir)/Debug.cpp' || echo '$(srcdir)/'`$(genericdir)/Debug.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Debug.Tpo" "$(DEPDIR)/Debug.Plo"; else rm -f "$(DEPDIR)/Debug.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(genericdir)/Debug.cpp' object='Debug.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Debug.lo `test -f '$(genericdir)/Debug.cpp' || echo '$(srcdir)/'`$(genericdir)/Debug.cpp
-
-Util.lo: $(genericdir)/Util.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Util.lo -MD -MP -MF "$(DEPDIR)/Util.Tpo" -c -o Util.lo `test -f '$(genericdir)/Util.cpp' || echo '$(srcdir)/'`$(genericdir)/Util.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Util.Tpo" "$(DEPDIR)/Util.Plo"; else rm -f "$(DEPDIR)/Util.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(genericdir)/Util.cpp' object='Util.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Util.lo `test -f '$(genericdir)/Util.cpp' || echo '$(srcdir)/'`$(genericdir)/Util.cpp
-
-Font.lo: $(fontdir)/Font.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Font.lo -MD -MP -MF "$(DEPDIR)/Font.Tpo" -c -o Font.lo `test -f '$(fontdir)/Font.cpp' || echo '$(srcdir)/'`$(fontdir)/Font.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Font.Tpo" "$(DEPDIR)/Font.Plo"; else rm -f "$(DEPDIR)/Font.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(fontdir)/Font.cpp' object='Font.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Font.lo `test -f '$(fontdir)/Font.cpp' || echo '$(srcdir)/'`$(fontdir)/Font.cpp
-
-TtfUtil.lo: $(fontdir)/TtfUtil.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TtfUtil.lo -MD -MP -MF "$(DEPDIR)/TtfUtil.Tpo" -c -o TtfUtil.lo `test -f '$(fontdir)/TtfUtil.cpp' || echo '$(srcdir)/'`$(fontdir)/TtfUtil.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TtfUtil.Tpo" "$(DEPDIR)/TtfUtil.Plo"; else rm -f "$(DEPDIR)/TtfUtil.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(fontdir)/TtfUtil.cpp' object='TtfUtil.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TtfUtil.lo `test -f '$(fontdir)/TtfUtil.cpp' || echo '$(srcdir)/'`$(fontdir)/TtfUtil.cpp
-
-FileFont.lo: $(fontdir)/FileFont.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FileFont.lo -MD -MP -MF "$(DEPDIR)/FileFont.Tpo" -c -o FileFont.lo `test -f '$(fontdir)/FileFont.cpp' || echo '$(srcdir)/'`$(fontdir)/FileFont.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FileFont.Tpo" "$(DEPDIR)/FileFont.Plo"; else rm -f "$(DEPDIR)/FileFont.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(fontdir)/FileFont.cpp' object='FileFont.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FileFont.lo `test -f '$(fontdir)/FileFont.cpp' || echo '$(srcdir)/'`$(fontdir)/FileFont.cpp
-
-FileInput.lo: $(segmentdir)/FileInput.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FileInput.lo -MD -MP -MF "$(DEPDIR)/FileInput.Tpo" -c -o FileInput.lo `test -f '$(segmentdir)/FileInput.cpp' || echo '$(srcdir)/'`$(segmentdir)/FileInput.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FileInput.Tpo" "$(DEPDIR)/FileInput.Plo"; else rm -f "$(DEPDIR)/FileInput.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/FileInput.cpp' object='FileInput.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FileInput.lo `test -f '$(segmentdir)/FileInput.cpp' || echo '$(srcdir)/'`$(segmentdir)/FileInput.cpp
-
-FontCache.lo: $(segmentdir)/FontCache.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FontCache.lo -MD -MP -MF "$(DEPDIR)/FontCache.Tpo" -c -o FontCache.lo `test -f '$(segmentdir)/FontCache.cpp' || echo '$(srcdir)/'`$(segmentdir)/FontCache.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FontCache.Tpo" "$(DEPDIR)/FontCache.Plo"; else rm -f "$(DEPDIR)/FontCache.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/FontCache.cpp' object='FontCache.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FontCache.lo `test -f '$(segmentdir)/FontCache.cpp' || echo '$(srcdir)/'`$(segmentdir)/FontCache.cpp
-
-FontFace.lo: $(segmentdir)/FontFace.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FontFace.lo -MD -MP -MF "$(DEPDIR)/FontFace.Tpo" -c -o FontFace.lo `test -f '$(segmentdir)/FontFace.cpp' || echo '$(srcdir)/'`$(segmentdir)/FontFace.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FontFace.Tpo" "$(DEPDIR)/FontFace.Plo"; else rm -f "$(DEPDIR)/FontFace.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/FontFace.cpp' object='FontFace.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FontFace.lo `test -f '$(segmentdir)/FontFace.cpp' || echo '$(srcdir)/'`$(segmentdir)/FontFace.cpp
-
-GrCharStream.lo: $(segmentdir)/GrCharStream.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrCharStream.lo -MD -MP -MF "$(DEPDIR)/GrCharStream.Tpo" -c -o GrCharStream.lo `test -f '$(segmentdir)/GrCharStream.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrCharStream.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrCharStream.Tpo" "$(DEPDIR)/GrCharStream.Plo"; else rm -f "$(DEPDIR)/GrCharStream.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrCharStream.cpp' object='GrCharStream.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrCharStream.lo `test -f '$(segmentdir)/GrCharStream.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrCharStream.cpp
-
-GrClassTable.lo: $(segmentdir)/GrClassTable.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrClassTable.lo -MD -MP -MF "$(DEPDIR)/GrClassTable.Tpo" -c -o GrClassTable.lo `test -f '$(segmentdir)/GrClassTable.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrClassTable.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrClassTable.Tpo" "$(DEPDIR)/GrClassTable.Plo"; else rm -f "$(DEPDIR)/GrClassTable.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrClassTable.cpp' object='GrClassTable.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrClassTable.lo `test -f '$(segmentdir)/GrClassTable.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrClassTable.cpp
-
-GrEngine.lo: $(segmentdir)/GrEngine.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrEngine.lo -MD -MP -MF "$(DEPDIR)/GrEngine.Tpo" -c -o GrEngine.lo `test -f '$(segmentdir)/GrEngine.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrEngine.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrEngine.Tpo" "$(DEPDIR)/GrEngine.Plo"; else rm -f "$(DEPDIR)/GrEngine.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrEngine.cpp' object='GrEngine.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrEngine.lo `test -f '$(segmentdir)/GrEngine.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrEngine.cpp
-
-GrFeature.lo: $(segmentdir)/GrFeature.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrFeature.lo -MD -MP -MF "$(DEPDIR)/GrFeature.Tpo" -c -o GrFeature.lo `test -f '$(segmentdir)/GrFeature.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrFeature.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrFeature.Tpo" "$(DEPDIR)/GrFeature.Plo"; else rm -f "$(DEPDIR)/GrFeature.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrFeature.cpp' object='GrFeature.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrFeature.lo `test -f '$(segmentdir)/GrFeature.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrFeature.cpp
-
-GrFSM.lo: $(segmentdir)/GrFSM.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrFSM.lo -MD -MP -MF "$(DEPDIR)/GrFSM.Tpo" -c -o GrFSM.lo `test -f '$(segmentdir)/GrFSM.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrFSM.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrFSM.Tpo" "$(DEPDIR)/GrFSM.Plo"; else rm -f "$(DEPDIR)/GrFSM.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrFSM.cpp' object='GrFSM.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrFSM.lo `test -f '$(segmentdir)/GrFSM.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrFSM.cpp
-
-GrGlyphTable.lo: $(segmentdir)/GrGlyphTable.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrGlyphTable.lo -MD -MP -MF "$(DEPDIR)/GrGlyphTable.Tpo" -c -o GrGlyphTable.lo `test -f '$(segmentdir)/GrGlyphTable.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrGlyphTable.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrGlyphTable.Tpo" "$(DEPDIR)/GrGlyphTable.Plo"; else rm -f "$(DEPDIR)/GrGlyphTable.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrGlyphTable.cpp' object='GrGlyphTable.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrGlyphTable.lo `test -f '$(segmentdir)/GrGlyphTable.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrGlyphTable.cpp
-
-GrPassActionCode.lo: $(segmentdir)/GrPassActionCode.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrPassActionCode.lo -MD -MP -MF "$(DEPDIR)/GrPassActionCode.Tpo" -c -o GrPassActionCode.lo `test -f '$(segmentdir)/GrPassActionCode.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrPassActionCode.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrPassActionCode.Tpo" "$(DEPDIR)/GrPassActionCode.Plo"; else rm -f "$(DEPDIR)/GrPassActionCode.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrPassActionCode.cpp' object='GrPassActionCode.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrPassActionCode.lo `test -f '$(segmentdir)/GrPassActionCode.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrPassActionCode.cpp
-
-GrPass.lo: $(segmentdir)/GrPass.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrPass.lo -MD -MP -MF "$(DEPDIR)/GrPass.Tpo" -c -o GrPass.lo `test -f '$(segmentdir)/GrPass.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrPass.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrPass.Tpo" "$(DEPDIR)/GrPass.Plo"; else rm -f "$(DEPDIR)/GrPass.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrPass.cpp' object='GrPass.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrPass.lo `test -f '$(segmentdir)/GrPass.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrPass.cpp
-
-GrSlotState.lo: $(segmentdir)/GrSlotState.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrSlotState.lo -MD -MP -MF "$(DEPDIR)/GrSlotState.Tpo" -c -o GrSlotState.lo `test -f '$(segmentdir)/GrSlotState.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrSlotState.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrSlotState.Tpo" "$(DEPDIR)/GrSlotState.Plo"; else rm -f "$(DEPDIR)/GrSlotState.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrSlotState.cpp' object='GrSlotState.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrSlotState.lo `test -f '$(segmentdir)/GrSlotState.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrSlotState.cpp
-
-GrSlotStream.lo: $(segmentdir)/GrSlotStream.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrSlotStream.lo -MD -MP -MF "$(DEPDIR)/GrSlotStream.Tpo" -c -o GrSlotStream.lo `test -f '$(segmentdir)/GrSlotStream.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrSlotStream.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrSlotStream.Tpo" "$(DEPDIR)/GrSlotStream.Plo"; else rm -f "$(DEPDIR)/GrSlotStream.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrSlotStream.cpp' object='GrSlotStream.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrSlotStream.lo `test -f '$(segmentdir)/GrSlotStream.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrSlotStream.cpp
-
-GrTableManager.lo: $(segmentdir)/GrTableManager.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GrTableManager.lo -MD -MP -MF "$(DEPDIR)/GrTableManager.Tpo" -c -o GrTableManager.lo `test -f '$(segmentdir)/GrTableManager.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrTableManager.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/GrTableManager.Tpo" "$(DEPDIR)/GrTableManager.Plo"; else rm -f "$(DEPDIR)/GrTableManager.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/GrTableManager.cpp' object='GrTableManager.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GrTableManager.lo `test -f '$(segmentdir)/GrTableManager.cpp' || echo '$(srcdir)/'`$(segmentdir)/GrTableManager.cpp
-
-MemoryUsage.lo: $(segmentdir)/MemoryUsage.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MemoryUsage.lo -MD -MP -MF "$(DEPDIR)/MemoryUsage.Tpo" -c -o MemoryUsage.lo `test -f '$(segmentdir)/MemoryUsage.cpp' || echo '$(srcdir)/'`$(segmentdir)/MemoryUsage.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/MemoryUsage.Tpo" "$(DEPDIR)/MemoryUsage.Plo"; else rm -f "$(DEPDIR)/MemoryUsage.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/MemoryUsage.cpp' object='MemoryUsage.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MemoryUsage.lo `test -f '$(segmentdir)/MemoryUsage.cpp' || echo '$(srcdir)/'`$(segmentdir)/MemoryUsage.cpp
-
-Platform.lo: $(segmentdir)/Platform.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Platform.lo -MD -MP -MF "$(DEPDIR)/Platform.Tpo" -c -o Platform.lo `test -f '$(segmentdir)/Platform.cpp' || echo '$(srcdir)/'`$(segmentdir)/Platform.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Platform.Tpo" "$(DEPDIR)/Platform.Plo"; else rm -f "$(DEPDIR)/Platform.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/Platform.cpp' object='Platform.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Platform.lo `test -f '$(segmentdir)/Platform.cpp' || echo '$(srcdir)/'`$(segmentdir)/Platform.cpp
-
-SegmentAux.lo: $(segmentdir)/SegmentAux.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentAux.lo -MD -MP -MF "$(DEPDIR)/SegmentAux.Tpo" -c -o SegmentAux.lo `test -f '$(segmentdir)/SegmentAux.cpp' || echo '$(srcdir)/'`$(segmentdir)/SegmentAux.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentAux.Tpo" "$(DEPDIR)/SegmentAux.Plo"; else rm -f "$(DEPDIR)/SegmentAux.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/SegmentAux.cpp' object='SegmentAux.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentAux.lo `test -f '$(segmentdir)/SegmentAux.cpp' || echo '$(srcdir)/'`$(segmentdir)/SegmentAux.cpp
-
-Segment.lo: $(segmentdir)/Segment.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Segment.lo -MD -MP -MF "$(DEPDIR)/Segment.Tpo" -c -o Segment.lo `test -f '$(segmentdir)/Segment.cpp' || echo '$(srcdir)/'`$(segmentdir)/Segment.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Segment.Tpo" "$(DEPDIR)/Segment.Plo"; else rm -f "$(DEPDIR)/Segment.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/Segment.cpp' object='Segment.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Segment.lo `test -f '$(segmentdir)/Segment.cpp' || echo '$(srcdir)/'`$(segmentdir)/Segment.cpp
-
-TestFSM.lo: $(segmentdir)/TestFSM.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestFSM.lo -MD -MP -MF "$(DEPDIR)/TestFSM.Tpo" -c -o TestFSM.lo `test -f '$(segmentdir)/TestFSM.cpp' || echo '$(srcdir)/'`$(segmentdir)/TestFSM.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestFSM.Tpo" "$(DEPDIR)/TestFSM.Plo"; else rm -f "$(DEPDIR)/TestFSM.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/TestFSM.cpp' object='TestFSM.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestFSM.lo `test -f '$(segmentdir)/TestFSM.cpp' || echo '$(srcdir)/'`$(segmentdir)/TestFSM.cpp
-
-TestPasses.lo: $(segmentdir)/TestPasses.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestPasses.lo -MD -MP -MF "$(DEPDIR)/TestPasses.Tpo" -c -o TestPasses.lo `test -f '$(segmentdir)/TestPasses.cpp' || echo '$(srcdir)/'`$(segmentdir)/TestPasses.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestPasses.Tpo" "$(DEPDIR)/TestPasses.Plo"; else rm -f "$(DEPDIR)/TestPasses.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/TestPasses.cpp' object='TestPasses.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestPasses.lo `test -f '$(segmentdir)/TestPasses.cpp' || echo '$(srcdir)/'`$(segmentdir)/TestPasses.cpp
-
-TransductionLog.lo: $(segmentdir)/TransductionLog.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TransductionLog.lo -MD -MP -MF "$(DEPDIR)/TransductionLog.Tpo" -c -o TransductionLog.lo `test -f '$(segmentdir)/TransductionLog.cpp' || echo '$(srcdir)/'`$(segmentdir)/TransductionLog.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TransductionLog.Tpo" "$(DEPDIR)/TransductionLog.Plo"; else rm -f "$(DEPDIR)/TransductionLog.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(segmentdir)/TransductionLog.cpp' object='TransductionLog.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TransductionLog.lo `test -f '$(segmentdir)/TransductionLog.cpp' || echo '$(srcdir)/'`$(segmentdir)/TransductionLog.cpp
-
-SegmentPainter.lo: $(painterdir)/SegmentPainter.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentPainter.lo -MD -MP -MF "$(DEPDIR)/SegmentPainter.Tpo" -c -o SegmentPainter.lo `test -f '$(painterdir)/SegmentPainter.cpp' || echo '$(srcdir)/'`$(painterdir)/SegmentPainter.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentPainter.Tpo" "$(DEPDIR)/SegmentPainter.Plo"; else rm -f "$(DEPDIR)/SegmentPainter.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(painterdir)/SegmentPainter.cpp' object='SegmentPainter.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentPainter.lo `test -f '$(painterdir)/SegmentPainter.cpp' || echo '$(srcdir)/'`$(painterdir)/SegmentPainter.cpp
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
- -rm -f libtool
-uninstall-info-am:
-install-graphiteincludeHEADERS: $(graphiteinclude_HEADERS)
- @$(NORMAL_INSTALL)
- test -z "$(graphiteincludedir)" || $(mkdir_p) "$(DESTDIR)$(graphiteincludedir)"
- @list='$(graphiteinclude_HEADERS)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(am__strip_dir) \
- echo " $(graphiteincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(graphiteincludedir)/$$f'"; \
- $(graphiteincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(graphiteincludedir)/$$f"; \
- done
-
-uninstall-graphiteincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(graphiteinclude_HEADERS)'; for p in $$list; do \
- f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(graphiteincludedir)/$$f'"; \
- rm -f "$(DESTDIR)$(graphiteincludedir)/$$f"; \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- $(mkdir_p) $(distdir)/$(fontdir) $(distdir)/$(genericdir) $(distdir)/$(segmentdir) $(distdir)/$(top_srcdir)/include/graphite $(distdir)/../include $(distdir)/../include/graphite $(distdir)/font $(distdir)/generic $(distdir)/painter $(distdir)/segment
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
- if test -d $$d/$$file; then \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(graphiteincludedir)"; do \
- test -z "$$dir" || $(mkdir_p) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-libtool distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-graphiteincludeHEADERS
-
-install-exec-am: install-libLTLIBRARIES
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-graphiteincludeHEADERS uninstall-info-am \
- uninstall-libLTLIBRARIES
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libLTLIBRARIES clean-libtool ctags distclean \
- distclean-compile distclean-generic distclean-libtool \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-exec \
- install-exec-am install-graphiteincludeHEADERS install-info \
- install-info-am install-libLTLIBRARIES install-man \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
- pdf pdf-am ps ps-am tags uninstall uninstall-am \
- uninstall-graphiteincludeHEADERS uninstall-info-am \
- uninstall-libLTLIBRARIES
-
-
-#EXTRA_DIST += $(painterdir)/*.h
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Build/source/libs/graphite-engine/src/font/FileFont.cpp b/Build/source/libs/graphite-engine/src/font/FileFont.cpp
deleted file mode 100644
index 4600b788ed2..00000000000
--- a/Build/source/libs/graphite-engine/src/font/FileFont.cpp
+++ /dev/null
@@ -1,429 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: FileFont.cpp
-Responsibility: Keith Stribley
-Last reviewed: Not yet.
-
-Description:
- A Font is an object that represents a font-family + bold + italic setting, that contains
- Graphite tables.
-----------------------------------------------------------------------------------------------*/
-
-#include "Main.h"
-
-#include "FontTableCache.h"
-#include "FileFont.h"
-#include <stdio.h>
-
-
-// TBD do this properly
-#define FUDGE_FACTOR 72
-#define fix26_6(x) (x >> 6) + (x & 32 ? (x > 0 ? 1 : 0) : (x < 0 ? -1 : 0))
-
-namespace gr
-{
-
-
-FileFont::FileFont()
- : Font(),
- m_pfile(NULL),
- m_pTableCache(NULL),
- m_mAscent(0),
- m_mDescent(0),
- m_mEmSquare(0),
- m_pointSize(0),
- m_dpiX(FUDGE_FACTOR),
- m_dpiY(FUDGE_FACTOR),
- m_fIsValid(false),
- m_pHeader(NULL),
- m_pTableDir(NULL),
- m_xScale(1.0f),
- m_yScale(1.0f)
-{
- m_fItalic = false;
- m_fBold = false;
- // colors are not used
- m_clrFore = (unsigned long)kclrBlack;
- m_clrBack = (unsigned long)kclrTransparent;
-}
-
-FileFont::FileFont(FILE * pfile, float pointSize,
- unsigned int dpiX, unsigned int dpiY)
- : Font(),
- m_pfile(pfile),
- m_pTableCache(NULL),
- m_mAscent(0),
- m_mDescent(0),
- m_mEmSquare(0),
- m_pointSize(pointSize),
- m_dpiX(dpiX),
- m_dpiY(dpiY),
- m_fIsValid(false),
- m_pHeader(NULL),
- m_pTableDir(NULL),
- m_xScale(1.0f),
- m_yScale(1.0f)
-{
- Assert(m_pfile); // shouldn't be null
- initializeFromFace();
-
-}
-
-FileFont::FileFont(char * fileName, float pointSize,
- unsigned int dpiX, unsigned int dpiY)
- : Font(),
- m_pfile(NULL),
- m_pTableCache(NULL),
- m_mAscent(0),
- m_mDescent(0),
- m_mEmSquare(0),
- m_pointSize(pointSize),
- m_dpiX(dpiX),
- m_dpiY(dpiY),
- m_fIsValid(false),
- m_pHeader(NULL),
- m_pTableDir(NULL),
- m_xScale(1.0f),
- m_yScale(1.0f)
-{
- Assert(fileName); // shouldn't be null but we play safe anyway
- m_pfile = fopen(fileName, "rb");
-
- initializeFromFace();
-}
-
-FileFont::FileFont(std::string fileName, float pointSize,
- unsigned int dpiX, unsigned int dpiY)
- : Font(),
- m_pfile(NULL),
- m_pTableCache(NULL),
- m_mAscent(0),
- m_mDescent(0),
- m_mEmSquare(0),
- m_pointSize(pointSize),
- m_dpiX(dpiX),
- m_dpiY(dpiY),
- m_fIsValid(false),
- m_pHeader(NULL),
- m_pTableDir(NULL),
- m_xScale(1.0f),
- m_yScale(1.0f)
-{
- Assert(fileName.length()); // shouldn't be null but we play safe anyway
- m_pfile = fopen(fileName.c_str(), "rb");
-
- initializeFromFace();
-}
-
-
-void
-FileFont::initializeFromFace()
-{
- if (m_dpiY == 0) m_dpiY = m_dpiX;
- m_fItalic = false;
- m_fBold = false;
- // colors are not used
- m_clrFore = (unsigned long)kclrBlack;
- m_clrBack = (unsigned long)kclrTransparent;
-
- if (m_pfile)
- {
- size_t lOffset, lSize;
- TtfUtil::GetHeaderInfo(lOffset, lSize);
- m_pHeader = new byte [lSize];
- m_fIsValid = true;
- if (!m_pHeader)
- {
- m_fIsValid = false;
- return;
- }
- m_fIsValid = (fseek(m_pfile, lOffset, SEEK_SET) == 0);
- size_t bytesRead = fread(m_pHeader, 1, lSize, m_pfile);
- Assert(bytesRead == lSize);
- m_fIsValid = TtfUtil::CheckHeader(m_pHeader);
-
- if (!m_fIsValid) return;
- m_fIsValid = TtfUtil::GetTableDirInfo(m_pHeader, lOffset, lSize);
- m_pTableDir = new byte[lSize];
- if (!m_pTableDir)
- {
- m_fIsValid = false;
- return;
- }
- // if lOffset hasn't changed this isn't needed
- fseek(m_pfile, lOffset, SEEK_SET);
- bytesRead = fread(m_pTableDir, 1, lSize, m_pfile);
- Assert(bytesRead == lSize);
-
- // now read head tables
- m_fIsValid = TtfUtil::GetTableInfo(ktiOs2, m_pHeader, m_pTableDir,
- lOffset, lSize);
- if (!m_fIsValid)
- {
- return;
- }
- byte * pTable = readTable(ktiOs2, lSize);
- // get ascent, descent, style while we have the OS2 table loaded
- if (!m_fIsValid || !pTable)
- {
- return;
- }
- m_fIsValid = TtfUtil::FontOs2Style(pTable, m_fBold, m_fItalic);
- m_mAscent = static_cast<float>(TtfUtil::FontAscent(pTable));
- m_mDescent = static_cast<float>(TtfUtil::FontDescent(pTable));
-
- pTable = readTable(ktiName, lSize);
- if (!m_fIsValid || !pTable)
- {
- return;
- }
- if (!TtfUtil::Get31EngFamilyInfo(pTable, lOffset, lSize))
- {
- // not English name
- m_fIsValid = false;
- return;
- }
- Assert(lSize %2 == 0);// should be utf16
- utf16 rgchwFace[128];
- int cchw = (lSize / isizeof(utf16)) + 1;
- cchw = min(cchw, 128);
- utf16 * pTable16 = reinterpret_cast<utf16*>(pTable + lOffset);
- std::copy(pTable16, pTable16 + cchw - 1, rgchwFace);
- rgchwFace[cchw - 1] = 0; // zero terminate
- TtfUtil::SwapWString(rgchwFace, cchw - 1);
-// We could use something like "if (sizeof(std::wstring::value_type) == 4)" here,
-// but a compile-time switch is preferable.
-#if SIZEOF_WCHAR_T == 4
- for (int cch16 = 0; cch16 < cchw; )
- {
- int cch16Used = 0;
- utf32 ch32 = GrCharStream::Utf16ToUtf32(&(rgchwFace[cch16]),
- cchw - cch16, &cch16Used);
- m_stuFaceName.push_back(ch32);
- cch16 += cch16Used;
- }
-// }
-#else
- m_stuFaceName.assign(rgchwFace);
- // VS 2005 needs this:
- //for (int cch16 = 0; cch16 < cchw; cch16++)
- // m_stuFaceName.push_back(rgchwFace[cch16]);
-#endif
- pTable = readTable(ktiHead, lSize);
- if (!m_fIsValid || !pTable)
- {
- return;
- }
- m_mEmSquare = static_cast<float>(TtfUtil::DesignUnits(pTable));
- // can now set the scale
- m_xScale = scaleFromDpi(m_dpiX);
- m_yScale = scaleFromDpi(m_dpiY);
- }
- else
- {
- m_fIsValid = false;
- }
-}
-
-byte *
-FileFont::readTable(int /*TableId*/ tid, size_t & size)
-{
- const TableId tableId = TableId(tid);
- bool isValid = true;
- size_t lOffset = 0, lSize = 0;
- if (!m_pTableCache)
- {
- m_pTableCache = new FontTableCache();
- }
- if (!m_pTableCache) return NULL;
-
- byte * pTable = m_pTableCache->getTable(tableId);
- size = m_pTableCache->getTableSize(tableId);
- // check whether it is already in the cache
- if (pTable) return pTable;
- isValid &= TtfUtil::GetTableInfo(tableId, m_pHeader, m_pTableDir,
- lOffset, lSize);
- if (!isValid)
- return NULL;
- fseek(m_pfile, lOffset, SEEK_SET);
- // only allocate if needed
- pTable = m_pTableCache->allocateTable(tableId, lSize);
-
- if (!pTable)
- {
- isValid = false;
- return NULL;
- }
- size_t bytesRead = fread(pTable, 1, lSize, m_pfile);
- isValid = bytesRead == lSize;
- if (isValid)
- {
- isValid &= TtfUtil::CheckTable(tableId, pTable, lSize);
- }
- if (!isValid)
- {
- return 0;
- }
- size = lSize;
- return pTable;
-}
-
-
-FileFont::~FileFont()
-{
-
- // if this is the last copy of the font sharing these tables
- // delete them
- if (m_pTableCache)
- {
- m_pTableCache->decrementFontCount();
- if (m_pTableCache->getFontCount() == 0)
- {
- delete [] m_pHeader;
- delete [] m_pTableDir;
- delete m_pTableCache;
- m_pTableCache = NULL;
- if (m_pfile)
- fclose(m_pfile);
- }
- }
- else
- {
- delete [] m_pHeader;
- delete [] m_pTableDir;
- if (m_pfile)
- fclose(m_pfile);
- }
- // note the DecFontCount(); is done in the Font base class
-}
-
-Font * FileFont::copyThis()
-{
- FileFont * copy = new FileFont(*this);
- return copy;
-}
-
-/**
-* A copy constructor that allows a change of point size or dpi
-* The underlying table cache will be shared between the fonts, so
-* this should have a low overhead.
-*/
-FileFont::FileFont(const FileFont & font, float pointSize,
- unsigned int dpiX, unsigned int dpiY)
-: Font(font),
- m_pfile(font.m_pfile),
- m_mAscent(font.m_mAscent),
- m_mDescent(font.m_mDescent),
- m_mEmSquare(font.m_mEmSquare),
- m_pointSize(font.m_pointSize),
- m_dpiX(font.m_dpiX),
- m_dpiY(font.m_dpiY),
- m_fIsValid(font.m_fIsValid),
- m_pHeader(font.m_pHeader),
- m_pTableDir(font.m_pTableDir),
- m_xScale(font.m_xScale),
- m_yScale(font.m_yScale)
-{
- if (pointSize > 0)
- {
- m_pointSize = pointSize;
- if (dpiX > 0)
- {
- m_dpiX = dpiX;
- if (dpiY > 0) m_dpiY = dpiY;
- else dpiY = dpiX;
- }
- m_xScale = scaleFromDpi(m_dpiX);
- m_yScale = scaleFromDpi(m_dpiY);
- }
- m_fItalic = font.m_fItalic;
- m_fBold = font.m_fBold;
- // colors are not used
- m_clrFore = font.m_clrFore;
- m_clrBack = font.m_clrBack;
- m_stuFaceName.assign(font.m_stuFaceName);
-
- m_pTableCache = font.m_pTableCache;
- // use the same table cache between instances
- if (m_pTableCache)
- m_pTableCache->incrementFontCount();
-
-
- // I dont' see why we need to reget the face, but WinFont does
- //m_pfface = FontFace::GetFontFace(this, m_fpropDef.szFaceName,
- // m_fpropDef.fBold, m_fpropDef.fItalic);
-}
-
-
-
- //virtual FontErrorCode isValidForGraphite(int * pnVersion = NULL, int * pnSubVersion = NULL);
-
-/*----------------------------------------------------------------------------------------------
- Read a table from the font.
-----------------------------------------------------------------------------------------------*/
-const void *
-FileFont::getTable(fontTableId32 tableID, size_t * pcbSize)
-{
- *pcbSize = 0;
- // use a cache to reduce the number of times tables have to be reloaded
- if (m_pTableCache == NULL)
- {
- // constructor automatically sets the font count to 1
- m_pTableCache = new FontTableCache();
- }
- TableId tid;
- for (int i = 0; i<ktiLast; i++)
- {
- tid = static_cast<TableId>(i);
- if (tableID == TtfUtil::TableIdTag(tid))
- {
- if (m_pTableCache->getTable(tid))
- {
- *pcbSize = m_pTableCache->getTableSize(tid);
- return m_pTableCache->getTable(tid);
- }
- break;
- }
- }
- Assert(tid < ktiLast);
- size_t tableSize = 0;
- void * pTable = readTable(tid, tableSize);
- *pcbSize = static_cast<int>(tableSize);
- return pTable;
-}
-
-
-void FileFont::getFontMetrics(float * pAscent, float * pDescent,
- float * pEmSquare)
-{
- if (pEmSquare) *pEmSquare = m_mEmSquare * m_xScale;
- if (pAscent) *pAscent = m_mAscent * m_yScale;
- if (pDescent) *pDescent = m_mDescent * m_yScale;
-}
-
-
-bool FileFont::FontHasGraphiteTables(FILE * file)
-{
- FileFont testFont(file, 1.0f, FUDGE_FACTOR);
- return testFont.fontHasGraphiteTables();
-}
-
-bool FileFont::FontHasGraphiteTables(char * fileName)
-{
- FileFont testFont(fileName, 1.0f, FUDGE_FACTOR);
- return testFont.fontHasGraphiteTables();
-}
-
-bool FileFont::fontHasGraphiteTables()
-{
- size_t tableSize;
- bool isGraphiteFont = m_fIsValid;
- isGraphiteFont &= (readTable(ktiSilf, tableSize) != NULL);
- return isGraphiteFont;
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/font/Font.cpp b/Build/source/libs/graphite-engine/src/font/Font.cpp
deleted file mode 100644
index 95cf2cefd41..00000000000
--- a/Build/source/libs/graphite-engine/src/font/Font.cpp
+++ /dev/null
@@ -1,950 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: Font.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A font is an object that knows how to read tables from a (platform-specific) font resource.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Font methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Constructor.
-----------------------------------------------------------------------------------------------*/
-Font::Font(const Font & fontSrc) : m_pfface(fontSrc.m_pfface), m_fTablesCached(false)
-{
- if (m_pfface)
- m_pfface->IncFontCount();
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-Font::~Font()
-{
- if (m_pfface)
- m_pfface->DecFontCount();
-}
-
-/*----------------------------------------------------------------------------------------------
- Mark the font-cache as to whether it should be deleted when all the font instances go away.
-----------------------------------------------------------------------------------------------*/
-void Font::SetFlushMode(int flush)
-{
- FontFace::SetFlushMode(flush);
-}
-
-/*----------------------------------------------------------------------------------------------
- Cache the common tables if necessary.
-----------------------------------------------------------------------------------------------*/
-void Font::EnsureTablesCached()
-{
- if (m_fTablesCached)
- return;
-
- size_t cbBogus;
- m_pHead = getTable(TtfUtil::TableIdTag(ktiHead), &cbBogus);
- m_pHmtx = getTable(TtfUtil::TableIdTag(ktiHmtx), &m_cbHmtxSize);
- m_pGlyf = getTable(TtfUtil::TableIdTag(ktiGlyf), &cbBogus);
- m_pLoca = getTable(TtfUtil::TableIdTag(ktiLoca), &m_cbLocaSize);
-
- // getTable can return 0 for the lengths if it is hard to calculate them, but it should
- // never do that for hmtx or loca.
- Assert(m_cbHmtxSize > 0);
- Assert(m_cbLocaSize > 0);
-
- m_fTablesCached = true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the flush mode of the font-cache.
-----------------------------------------------------------------------------------------------*/
-int Font::GetFlushMode()
-{
- return FontFace::GetFlushMode();
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the internal object representing the font-face. This is the object that is stored
- in Graphite's internal cache.
-----------------------------------------------------------------------------------------------*/
-inline FontFace & Font::fontFace(bool fDumbFallback)
-{
- if (m_pfface == 0)
- initialiseFontFace(fDumbFallback);
- return *m_pfface;
-}
-
-void Font::initialiseFontFace(bool fDumbFallback)
-{
- std::wstring stuFaceName;
- bool fBold, fItalic;
-
- UniqueCacheInfo(stuFaceName, fBold, fItalic);
-
- m_pfface = FontFace::GetFontFace(this, stuFaceName, fBold, fItalic, fDumbFallback);
-
- Assert(m_pfface != 0);
-
- m_pfface->IncFontCount();
-
- FontException fexptn;
- fexptn.version = -1;
- fexptn.subVersion = -1;
- if (m_pfface->BadFont(&fexptn.errorCode)
- || (!fDumbFallback && m_pfface->DumbFallback(&fexptn.errorCode)))
- {
- throw fexptn;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return uniquely identifying information that will be used as the key for this font
- in the font cache. This includes the font face name and the bold and italic flags.
-----------------------------------------------------------------------------------------------*/
-void Font::UniqueCacheInfo(std::wstring & stuFace, bool & fBold, bool & fItalic)
-{
- size_t cbSize;
- const byte * pNameTbl = static_cast<const byte *>(getTable(TtfUtil::TableIdTag(ktiName), &cbSize));
- size_t lOffset, lSize;
- if (!TtfUtil::Get31EngFamilyInfo(pNameTbl, lOffset, lSize))
- {
- // TODO: try to find any name in any arbitrary language.
- Assert(false);
- return;
- }
- // byte * pvName = (byte *)pNameTbl + lOffset;
- utf16 rgchwFace[128];
- const size_t cchw = min(long(lSize / sizeof(utf16)), long((sizeof(rgchwFace) / sizeof(utf16)) - 1));
- // NOTE: there is a potential alignment problem in the following two lines, which can causes
- // crashes on architectures that require alignment to word boundaries.
- const utf16 * pchwNameStart = reinterpret_cast<const utf16 *>(pNameTbl+ lOffset);
- std::copy(pchwNameStart, pchwNameStart + cchw, rgchwFace);
- rgchwFace[cchw] = 0; // zero terminate
- TtfUtil::SwapWString(rgchwFace, cchw);
- for (size_t ich16 = 0; ich16 < cchw; ich16++) // equivalent to assign, but works in more situations
- stuFace.push_back(wchar_t(rgchwFace[ich16])); // where where wchar_t is 4 bytes
-
- const void * pOs2Tbl = getTable(TtfUtil::TableIdTag(ktiOs2), &cbSize);
- TtfUtil::FontOs2Style(pOs2Tbl, fBold, fItalic);
- // Do we need to compare the results from the OS2 table with the italic flag in the
- // head table? (There is no requirement that they be consistent!)
-}
-
-
-/*----------------------------------------------------------------------------------------------
- A default unhinted implmentation of getGlyphPoint(..)
-----------------------------------------------------------------------------------------------*/
-void Font::getGlyphPoint(gid16 glyphID, unsigned int pointNum, Point & pointReturn)
-{
- EnsureTablesCached();
-
- // Default values
- pointReturn.x = 0;
- pointReturn.y = 0;
-
- if (m_pGlyf == 0) return;
- if (m_pHead == 0) return;
- if (m_pLoca == 0) return;
-
- size_t cContours;
- size_t cPoints;
-
- const size_t CONTOUR_BUF_SIZE = 16;
- const size_t POINT_BUF_SIZE = 64;
- // Fixed-size buffers that will be used in most cases:
- bool rgfOnCurveFixedBuf[POINT_BUF_SIZE], *rgfOnCurveHeapBuf=0;
- int rgnEndPtFixedBuf[CONTOUR_BUF_SIZE], *rgnEndPtHeapBuf=0,
- rgnXFixedBuf[POINT_BUF_SIZE], *rgnXHeapBuf=0,
- rgnYFixedBuf[POINT_BUF_SIZE], *rgnYHeapBuf=0;
-
- if (!TtfUtil::GlyfContourCount(glyphID, m_pGlyf, m_pLoca, m_cbLocaSize, m_pHead, cContours))
- return; // can't figure it out
-
- int * prgnEndPt = (cContours > CONTOUR_BUF_SIZE) ?
- rgnEndPtHeapBuf = new int[cContours] :
- rgnEndPtFixedBuf;
-
- if (!TtfUtil::GlyfContourEndPoints(glyphID, m_pGlyf, m_pLoca, m_cbLocaSize, m_pHead,
- prgnEndPt, cContours))
- {
- return; // should have been caught above
- }
- cPoints = prgnEndPt[cContours - 1] + 1;
-
- bool* prgfOnCurve = (cPoints > POINT_BUF_SIZE) ? rgfOnCurveHeapBuf= new bool[cPoints] : rgfOnCurveFixedBuf;
- int * prgnX = (cPoints > POINT_BUF_SIZE) ? rgnXHeapBuf= new int[cPoints] : rgnXFixedBuf;
- int * prgnY = (cPoints > POINT_BUF_SIZE) ? rgnYHeapBuf= new int[cPoints] : rgnYFixedBuf;
-
- if (TtfUtil::GlyfPoints(glyphID, m_pGlyf, m_pLoca, m_cbLocaSize, m_pHead, 0, 0,
- prgnX, prgnY, prgfOnCurve, cPoints))
- {
- float nPixEmSquare;
- getFontMetrics(0, 0, &nPixEmSquare);
-
- const float nDesignUnitsPerPixel = float(TtfUtil::DesignUnits(m_pHead)) / nPixEmSquare;
- pointReturn.x = prgnX[pointNum] / nDesignUnitsPerPixel;
- pointReturn.y = prgnY[pointNum] / nDesignUnitsPerPixel;
- }
-
- delete[] rgnEndPtHeapBuf;
- delete[] rgfOnCurveHeapBuf;
- delete[] rgnXHeapBuf;
- delete[] rgnYHeapBuf;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- A default unhinted implmentation of getGlyphMetrics(..)
-----------------------------------------------------------------------------------------------*/
-void Font::getGlyphMetrics(gid16 glyphID, gr::Rect & boundingBox, gr::Point & advances)
-{
- EnsureTablesCached();
-
- // Setup default return values in case of failiure.
- boundingBox.left = 0;
- boundingBox.right = 0;
- boundingBox.bottom = 0;
- boundingBox.top = 0;
- advances.x = 0;
- advances.y = 0;
-
- if (m_pHead == 0) return;
-
- // Calculate the number of design units per pixel.
- float pixelEmSquare;
- getFontMetrics(0, 0, &pixelEmSquare);
- const float pixelsPerDesignUnit =
- pixelEmSquare / float(TtfUtil::DesignUnits(m_pHead));
-
- // getTable can return 0 for the lengths if it is hard to calculate them, but it should
- // never do that for hmtx or loca.
- Assert(m_cbHmtxSize > 0);
-
- // Use the Hmtx and Head tables to find the glyph advances.
- int lsb;
- unsigned int advance = 0;
- if (TtfUtil::HorMetrics(glyphID, m_pHmtx, m_cbHmtxSize, m_pHead,
- lsb, advance))
- {
- advances.x = (advance * pixelsPerDesignUnit);
- advances.y = 0.0f;
- }
-
- if (m_pGlyf == 0) return;
- if (m_pLoca == 0) return;
- Assert(m_cbLocaSize > 0);
-
- // Fetch the glyph bounding box. GlyphBox may return false for a whitespace glyph.
- // Note that using GlyfBox here allows attachment points (ie, points lying outside
- // the glyph's outline) to affect the bounding box, which might not be what we want.
- int xMin, xMax, yMin, yMax;
- if (TtfUtil::GlyfBox(glyphID, m_pGlyf, m_pLoca, m_cbLocaSize, m_pHead,
- xMin, yMin, xMax, yMax))
- {
- boundingBox.left = (xMin * pixelsPerDesignUnit);
- boundingBox.bottom = (yMin * pixelsPerDesignUnit);
- boundingBox.right = (xMax * pixelsPerDesignUnit);
- boundingBox.top = (yMax * pixelsPerDesignUnit);
- }
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Return a pair of iterators over a sequence of features defined for the font.
-----------------------------------------------------------------------------------------------*/
-std::pair<FeatureIterator, FeatureIterator> Font::getFeatures()
-{
- std::pair<FeatureIterator, FeatureIterator> pairRet;
- pairRet.first = BeginFeature();
- pairRet.second = EndFeature();
- return pairRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns an iterator indicating the feature with the given ID. If no such feature,
- returns the end iterator.
-----------------------------------------------------------------------------------------------*/
-FeatureIterator Font::featureWithID(featid id)
-{
- FeatureIterator fit = BeginFeature();
- FeatureIterator fitEnd = EndFeature();
- for ( ; fit != fitEnd ; ++fit)
- {
- if (*fit == id)
- return fit;
- }
- return fitEnd; // invalid
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns the UI label for the indicated feature. Return false if there is no label for the
- language, or it is empty.
-----------------------------------------------------------------------------------------------*/
-bool Font::getFeatureLabel(FeatureIterator fit, lgid nLanguage, utf16 * label)
-{
- return GetFeatureLabel(fit.m_ifeat, nLanguage, label);
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns an iterator pointing at the default value for the feature.
-----------------------------------------------------------------------------------------------*/
-FeatureSettingIterator Font::getDefaultFeatureValue(FeatureIterator fit)
-{
- size_t ifset = GetFeatureDefault(fit.m_ifeat);
- FeatureSettingIterator fsit = fit.BeginSetting();
- fsit += ifset;
- return fsit;
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns a pair of iterators spanning the defined settings for the feature.
-----------------------------------------------------------------------------------------------*/
-std::pair<FeatureSettingIterator, FeatureSettingIterator>
- Font::getFeatureSettings(FeatureIterator fit)
-{
- std::pair<FeatureSettingIterator, FeatureSettingIterator> pairRet;
- pairRet.first = fit.BeginSetting();
- pairRet.second = fit.EndSetting();
- return pairRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns the UI label for the indicated feature. Return false if there is no label for the
- language, or it is empty.
-----------------------------------------------------------------------------------------------*/
-bool Font::getFeatureSettingLabel(FeatureSettingIterator fsit, lgid nLanguage, utf16 * label)
-{
- //FeatureIterator * pfit = static_cast<FeatureIterator *>(fsit.m_pfit);
- return GetFeatureSettingLabel(fsit.m_fit.m_ifeat, fsit.m_ifset, nLanguage, label);
-}
-
-/*----------------------------------------------------------------------------------------------
- Private methods for feature and language access.
-----------------------------------------------------------------------------------------------*/
-size_t Font::NumberOfFeatures()
-{
- try {
- return fontFace().NumberOfFeatures();
- }
- catch (...) { return 0; }
-}
-featid Font::FeatureID(size_t ifeat)
-{
- try {
- return fontFace().FeatureID(ifeat);
- }
- catch (...) { return 0; }
-}
-size_t Font::FeatureWithID(featid id)
-{
- try {
- return fontFace().FeatureWithID(id);
- }
- catch (...) { return 0; }
-}
-bool Font::GetFeatureLabel(size_t ifeat, lgid language, utf16 * label)
-{
- try {
- return fontFace().GetFeatureLabel(ifeat, language, label);
- }
- catch (...)
- {
- *label = 0;
- return false;
- }
-}
-int Font::GetFeatureDefault(size_t ifeat) // index of default setting
-{
- try {
- return fontFace().GetFeatureDefault(ifeat);
- }
- catch (...) { return 0; }
-}
-size_t Font::NumberOfSettings(size_t ifeat)
-{
- try {
- return fontFace().NumberOfSettings(ifeat);
- }
- catch (...) { return 0; }
-}
-int Font::GetFeatureSettingValue(size_t ifeat, size_t ifset)
-{
- try {
- return fontFace().GetFeatureSettingValue(ifeat, ifset);
- }
- catch (...) { return 0; }
-}
-bool Font::GetFeatureSettingLabel(size_t ifeat, size_t ifset, lgid language, utf16 * label)
-{
- try {
- return fontFace().GetFeatureSettingLabel(ifeat, ifset, language, label);
- }
- catch (...)
- {
- *label = 0;
- return false;
- }
-}
-size_t Font::NumberOfFeatLangs()
-{
- try {
- return fontFace().NumberOfFeatLangs();
- }
- catch (...) { return 0; }
-}
-short Font::FeatLabelLang(size_t ilang)
-{
- try {
- return fontFace().FeatLabelLang(ilang);
- }
- catch (...) { return 0; }
-}
-size_t Font::NumberOfLanguages()
-{
- try {
- return fontFace().NumberOfLanguages();
- }
- catch (...) { return 0; }
-}
-isocode Font::LanguageCode(size_t ilang)
-{
- try {
- return fontFace().LanguageCode(ilang);
- }
- catch (...)
- {
- isocode ret;
- std::fill_n(ret.rgch, sizeof(ret.rgch), '\0');
- return ret;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a pair of iterators over a sequence of feature-label languages for this font.
-----------------------------------------------------------------------------------------------*/
-std::pair<FeatLabelLangIterator, FeatLabelLangIterator> Font::getFeatureLabelLanguages()
-{
- std::pair<FeatLabelLangIterator, FeatLabelLangIterator> pairRet;
- pairRet.first = BeginFeatLang();
- pairRet.second = EndFeatLang();
- return pairRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a pair of iterators over a sequence of languages defined for the font, that is,
- those that have features specified for them.
-----------------------------------------------------------------------------------------------*/
-std::pair<LanguageIterator, LanguageIterator> Font::getSupportedLanguages()
-{
- std::pair<LanguageIterator, LanguageIterator> pairRet;
- pairRet.first = BeginLanguage();
- pairRet.second = EndLanguage();
- return pairRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a bitmap indicating which directions are supported by the font.
-----------------------------------------------------------------------------------------------*/
-ScriptDirCode Font::getSupportedScriptDirections() const throw()
-{
- try {
- Font * pfontThis = const_cast<Font *>(this);
- FontFace & fface = pfontThis->fontFace();
- return fface.ScriptDirection();
- }
- catch (...) {
- return kfsdcHorizLtr;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- For segment creation.
-----------------------------------------------------------------------------------------------*/
-void Font::RenderLineFillSegment(Segment * pseg, ITextSource * pts, LayoutEnvironment & layout,
- toffset ichStart, toffset ichStop, float xsMaxWidth, bool fBacktracking)
-{
- fontFace(layout.dumbFallback()).RenderLineFillSegment(pseg, this, pts, layout,
- ichStart, ichStop, xsMaxWidth, fBacktracking);
-}
-
-void Font::RenderRangeSegment(Segment * pseg, ITextSource * pts, LayoutEnvironment & layout,
- toffset ichStart, toffset ichStop)
-{
- fontFace(layout.dumbFallback()).RenderRangeSegment(pseg, this, pts, layout, ichStart, ichStop);
-}
-
-void Font::RenderJustifiedSegment(Segment * pseg, ITextSource * pts,
- LayoutEnvironment & layout, toffset ichStart, toffset ichStop,
- float xsCurrentWidth, float xsDesiredWidth)
-{
- fontFace(layout.dumbFallback()).RenderJustifiedSegment(pseg, this, pts, layout,
- ichStart, ichStop, xsCurrentWidth, xsDesiredWidth);
-}
-
-/*----------------------------------------------------------------------------------------------
- Feature iterators.
-----------------------------------------------------------------------------------------------*/
-FeatureIterator Font::BeginFeature()
-{
- FeatureIterator fit(this, 0, NumberOfFeatures());
- return fit;
-}
-
-FeatureIterator Font::EndFeature()
-{
- int cfeat = NumberOfFeatures();
- FeatureIterator fit (this, cfeat, cfeat);
- return fit;
-}
-
-/*----------------------------------------------------------------------------------------------
- Feature-label language iterators.
-----------------------------------------------------------------------------------------------*/
-FeatLabelLangIterator Font::BeginFeatLang()
-{
- FeatLabelLangIterator lgit(this, 0, NumberOfFeatLangs());
- return lgit;
-}
-
-FeatLabelLangIterator Font::EndFeatLang()
-{
- int clang = NumberOfFeatLangs();
- FeatLabelLangIterator lgit(this, clang, clang);
- return lgit;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Language iterators.
-----------------------------------------------------------------------------------------------*/
-LanguageIterator Font::BeginLanguage()
-{
- LanguageIterator lgit(this, 0, NumberOfLanguages());
- return lgit;
-}
-
-LanguageIterator Font::EndLanguage()
-{
- int clang = NumberOfLanguages();
- LanguageIterator lgit(this, clang, clang);
- return lgit;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Debugging.
-----------------------------------------------------------------------------------------------*/
-//bool Font::DbgCheckFontCache()
-//{
-// return FontFace::DbgCheckFontCache();
-//}
-
-
-//:>********************************************************************************************
-//:> FeatureIterator methods
-//:>********************************************************************************************
-
-//FeatureIterator::FeatureIterator(FeatureIterator & fitToCopy)
-//{
-// m_pfont = fitToCopy.m_pfont;
-// m_ifeat = fitToCopy.m_ifeat;
-// m_cfeat = fitToCopy.m_cfeat;
-//}
-
-/*----------------------------------------------------------------------------------------------
- Dereference the iterator, returning a feature ID.
-----------------------------------------------------------------------------------------------*/
-featid FeatureIterator::operator*()
-{
- if (m_ifeat >= m_cfeat)
- {
- Assert(false);
- return (unsigned int)kInvalid;
- }
-
- return m_pfont->FeatureID(m_ifeat);
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator.
-----------------------------------------------------------------------------------------------*/
-FeatureIterator FeatureIterator::operator++()
-{
- if (m_ifeat >= m_cfeat)
- {
- // Can't increment.
- Assert(false);
- }
- else
- m_ifeat++;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator by the given value.
-----------------------------------------------------------------------------------------------*/
-FeatureIterator FeatureIterator::operator+=(int n)
-{
- if (m_ifeat + n >= m_cfeat)
- {
- // Can't increment.
- Assert(false);
- m_ifeat = m_cfeat;
- }
- else if (m_ifeat + n < 0)
- {
- // Can't decrement.
- Assert(false);
- m_ifeat = 0;
- }
- else
- m_ifeat += m_cfeat;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Test whether the two iterators are equal.
-----------------------------------------------------------------------------------------------*/
-bool FeatureIterator::operator==(FeatureIterator & fit)
-{
- return (fit.m_ifeat == m_ifeat && fit.m_pfont == m_pfont);
-}
-
-bool FeatureIterator::operator!=(FeatureIterator & fit)
-{
- return (fit.m_ifeat != m_ifeat || fit.m_pfont != m_pfont);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of items represented by the range of the two iterators.
-----------------------------------------------------------------------------------------------*/
-int FeatureIterator::operator-(FeatureIterator & fit)
-{
- if (m_pfont != fit.m_pfont)
- {
- throw;
- }
- return (m_ifeat - fit.m_ifeat);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Iterators.
-----------------------------------------------------------------------------------------------*/
-FeatureSettingIterator FeatureIterator::BeginSetting()
-{
- int cfset = m_pfont->NumberOfSettings(m_ifeat);
- FeatureSettingIterator fsit(*this, 0, cfset);
- return fsit;
-}
-
-FeatureSettingIterator FeatureIterator::EndSetting()
-{
- int cfset = m_pfont->NumberOfSettings(m_ifeat);
- FeatureSettingIterator fsit(*this, cfset, cfset);
- return fsit;
-}
-
-
-//:>********************************************************************************************
-//:> FeatureSettingIterator methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Dereference the iterator, returning a feature value.
-----------------------------------------------------------------------------------------------*/
-int FeatureSettingIterator::operator*()
-{
- if (m_ifset >= m_cfset)
- {
- Assert(false);
- return kInvalid;
- }
-
- return m_fit.m_pfont->GetFeatureSettingValue(m_fit.m_ifeat, m_ifset);
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator.
-----------------------------------------------------------------------------------------------*/
-FeatureSettingIterator FeatureSettingIterator::operator++()
-{
- if (m_ifset >= m_cfset)
- {
- // Can't increment.
- Assert(false);
- }
- else
- m_ifset++;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator by the given value.
-----------------------------------------------------------------------------------------------*/
-FeatureSettingIterator FeatureSettingIterator::operator+=(int n)
-{
- if (m_ifset + n >= m_cfset)
- {
- // Can't increment.
- Assert(false);
- m_ifset = m_cfset;
- }
- if (m_ifset + n < 0)
- {
- // Can't decrement.
- Assert(false);
- m_ifset = 0;
- }
- else
- m_ifset += n;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Test whether the two iterators are equal.
-----------------------------------------------------------------------------------------------*/
-bool FeatureSettingIterator::operator==(FeatureSettingIterator & fsit)
-{
- //FeatureIterator * pfit = static_cast<FeatureIterator *>(m_pfit);
- //FeatureIterator * pfitOther = static_cast<FeatureIterator *>(fsit.m_pfit);
- //return (m_ifset == fsit.m_ifset && pfit == pfitOther);
- return (m_ifset == fsit.m_ifset && m_fit == fsit.m_fit);
-}
-
-bool FeatureSettingIterator::operator!=(FeatureSettingIterator & fsit)
-{
- //FeatureIterator * pfit = static_cast<FeatureIterator *>(m_pfit);
- //FeatureIterator * pfitOther = static_cast<FeatureIterator *>(fsit.m_pfit);
- //return (m_ifset != fsit.m_ifset || pfit != pfitOther);
-
- return (m_ifset != fsit.m_ifset || m_fit != fsit.m_fit);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of items represented by the range of the two iterators.
-----------------------------------------------------------------------------------------------*/
-int FeatureSettingIterator::operator-(FeatureSettingIterator fsit)
-{
- //FeatureIterator * pfit = static_cast<FeatureIterator *>(m_pfit);
- //FeatureIterator * pfitOther = static_cast<FeatureIterator *>(fsit.m_pfit);
- //if (pfit != pfitOther)
-
- if (m_fit != fsit.m_fit)
- {
- throw;
- }
- return (m_ifset - fsit.m_ifset);
-}
-
-//:>********************************************************************************************
-//:> FeatLabelLangIterator methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Dereference the iterator, returning a language LCID.
-----------------------------------------------------------------------------------------------*/
-data16 FeatLabelLangIterator::operator*()
-{
- if (m_ilang >= m_clang)
- {
- Assert(false);
- return 0;
- }
-
- return m_pfont->FeatLabelLang(m_ilang);
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator.
-----------------------------------------------------------------------------------------------*/
-FeatLabelLangIterator FeatLabelLangIterator::operator++()
-{
- if (m_ilang >= m_clang)
- {
- // Can't increment.
- Assert(false);
- }
- else
- m_ilang++;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator by the given value.
-----------------------------------------------------------------------------------------------*/
-FeatLabelLangIterator FeatLabelLangIterator::operator+=(int n)
-{
- if (m_ilang + n >= m_clang)
- {
- // Can't increment.
- Assert(false);
- m_ilang = m_clang;
- }
- else if (m_ilang + n < 0)
- {
- // Can't decrement.
- Assert(false);
- m_ilang = 0;
- }
- else
- m_ilang += m_clang;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Test whether the two iterators are equal.
-----------------------------------------------------------------------------------------------*/
-bool FeatLabelLangIterator::operator==(FeatLabelLangIterator & fllit)
-{
- return (fllit.m_ilang == m_ilang && fllit.m_pfont == m_pfont);
-}
-
-bool FeatLabelLangIterator::operator!=(FeatLabelLangIterator & fllit)
-{
- return (fllit.m_ilang != m_ilang || fllit.m_pfont != m_pfont);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of items represented by the range of the two iterators.
-----------------------------------------------------------------------------------------------*/
-int FeatLabelLangIterator::operator-(FeatLabelLangIterator & fllit)
-{
- if (m_pfont != fllit.m_pfont)
- {
- throw;
- }
- return (m_ilang - fllit.m_ilang);
-}
-
-
-//:>********************************************************************************************
-//:> LanguageIterator methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Dereference the iterator, returning a language code.
-----------------------------------------------------------------------------------------------*/
-isocode LanguageIterator::operator*()
-{
- if (m_ilang >= m_clang)
- {
- Assert(false);
- isocode codeRet;
- codeRet.rgch[0] = '?'; codeRet.rgch[1] = '?';
- codeRet.rgch[2] = '?'; codeRet.rgch[3] = 0;
- return codeRet;
- }
-
- return m_pfont->LanguageCode(m_ilang);
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator.
-----------------------------------------------------------------------------------------------*/
-LanguageIterator LanguageIterator::operator++()
-{
- if (m_ilang >= m_clang)
- {
- // Can't increment.
- Assert(false);
- }
- else
- m_ilang++;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Increment the iterator by the given value.
-----------------------------------------------------------------------------------------------*/
-LanguageIterator LanguageIterator::operator+=(int n)
-{
- if (m_ilang + n >= m_clang)
- {
- // Can't increment.
- Assert(false);
- m_ilang = m_clang;
- }
- else if (m_ilang + n < 0)
- {
- // Can't decrement.
- Assert(false);
- m_ilang = 0;
- }
- else
- m_ilang += m_clang;
-
- return *this;
-}
-
-/*----------------------------------------------------------------------------------------------
- Test whether the two iterators are equal.
-----------------------------------------------------------------------------------------------*/
-bool LanguageIterator::operator==(LanguageIterator & lgit)
-{
- return (lgit.m_ilang == m_ilang && lgit.m_pfont == m_pfont);
-}
-
-bool LanguageIterator::operator!=(LanguageIterator & lgit)
-{
- return (lgit.m_ilang != m_ilang || lgit.m_pfont != m_pfont);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of items represented by the range of the two iterators.
-----------------------------------------------------------------------------------------------*/
-int LanguageIterator::operator-(LanguageIterator & lgit)
-{
- if (m_pfont != lgit.m_pfont)
- {
- throw;
- }
- return (m_ilang - lgit.m_ilang);
-}
-
-
-} // namespace gr
-
-
diff --git a/Build/source/libs/graphite-engine/src/font/FontTableCache.h b/Build/source/libs/graphite-engine/src/font/FontTableCache.h
deleted file mode 100644
index 461b00d745f..00000000000
--- a/Build/source/libs/graphite-engine/src/font/FontTableCache.h
+++ /dev/null
@@ -1,52 +0,0 @@
-
-#include "TtfUtil.h"
-
-namespace gr
-{
-
-
-// used to allow table sharing among font copies
-// TBD: should this be a real class or is it acceptable to
-// make the attributes public
-class FontTableCache
-{
-public:
- FontTableCache()
- : m_fontCount(1)
- {
- for (int i = 0; i<ktiLast; i++)
- {
- m_pTable[i] = NULL;
- }
- }
- ~FontTableCache()
- {
- Assert(m_fontCount == 0);
- for (int i = 0; i<ktiLast; i++)
- {
- if (m_pTable[i]) delete[] m_pTable[i];
- }
- }
- const int & getFontCount() { return m_fontCount; }
- void incrementFontCount() { m_fontCount++; }
- void decrementFontCount() { m_fontCount--; Assert(m_fontCount > -1); }
- byte * getTable(TableId id) const { Assert(id < ktiLast); return m_pTable[id]; }
- const long & getTableSize(TableId id) const
- {
- Assert(id < ktiLast);
- return m_tableSize[id];
- }
- byte * allocateTable(TableId id, long size)
- {
- m_pTable[id] = new byte[size];
- m_tableSize[id] = size;
- return m_pTable[id];
- }
-
-private:
- int m_fontCount;
- byte * m_pTable[ktiLast];
- long m_tableSize[ktiLast];
-};
-
-}
diff --git a/Build/source/libs/graphite-engine/src/font/Makefile.am b/Build/source/libs/graphite-engine/src/font/Makefile.am
deleted file mode 100644
index 461af621b49..00000000000
--- a/Build/source/libs/graphite-engine/src/font/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-fontdir = $(top_srcdir)/src/font
-
-libgraphite_la_SOURCES += $(fontdir)/Font.cpp
-libgraphite_la_SOURCES += $(fontdir)/TtfUtil.cpp
-libgraphite_la_SOURCES += $(fontdir)/FileFont.cpp
-
-EXTRA_DIST += $(fontdir)/*.h
diff --git a/Build/source/libs/graphite-engine/src/font/TtfTypes.h b/Build/source/libs/graphite-engine/src/font/TtfTypes.h
deleted file mode 100644
index da8d90f1f26..00000000000
--- a/Build/source/libs/graphite-engine/src/font/TtfTypes.h
+++ /dev/null
@@ -1,388 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2007 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TtfTypes.h
-Responsibility: Tim Eves
-Last reviewed: Not yet.
-
-Description:
-Provides types required to represent the TTF basic types.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-
-//**********************************************************************************************
-// Include files
-//**********************************************************************************************
-#include "GrPlatform.h"
-
-namespace TtfUtil
-{
-//**********************************************************************************************
-// Forward declarations
-//**********************************************************************************************
-
-
-//**********************************************************************************************
-// Type declarations
-//**********************************************************************************************
-typedef gr::data8 uint8;
-typedef gr::sdata8 int8;
-typedef gr::data16 uint16;
-typedef gr::sdata16 int16;
-typedef gr::data32 uint32;
-typedef gr::sdata32 int32;
-
-typedef int16 short_frac;
-typedef int32 fixed;
-typedef int16 fword;
-typedef uint16 ufword;
-typedef int16 f2dot14;
-typedef uint32 long_date_time[2];
-
-//**********************************************************************************************
-// Constants and enum types
-//**********************************************************************************************/
-enum
-{
- OneFix = 1<<16
-};
-
-//**********************************************************************************************
-// Table declarations
-//**********************************************************************************************
-namespace Sfnt
-{
-#pragma pack(1) // We need this or the structure members aren't alligned
- // correctly. Fortunately this form of pragma is supposed
- // to be recongnised by VS C++ too (at least according to
- // MSDN).
-
- struct OffsetSubTable
- {
- uint32 scaler_type;
- uint16 num_tables,
- search_range,
- entry_selector,
- range_shift;
- struct Entry
- {
- uint32 tag,
- checksum,
- offset,
- length;
- } table_directory[1];
-
- enum ScalerType
- {
- TrueTypeMac = 0x74727565U,
- TrueTypeWin = 0x00010000U,
- Type1 = 0x74797031U
- };
- };
-
-
-
-
- struct CharacterCodeMap
- {
- uint16 version,
- num_subtables;
- struct
- {
- uint16 platform_id,
- platform_specific_id;
- uint32 offset;
- } encoding[1];
- };
-
- struct CmapSubTable
- {
- uint16 format,
- length,
- language;
- };
-
- struct CmapSubTableFormat4 : CmapSubTable
- {
- uint16 seg_count_x2,
- search_range,
- entry_selector,
- range_shift,
- end_code[1];
- // There are arrarys after this which need their
- // start positions calculated since end_code is
- // seg_count uint16s long.
- };
-
- struct CmapSubTableFormat12
- {
- fixed format;
- uint32 length,
- language,
- num_groups;
- struct
- {
- uint32 start_char_code,
- end_char_code,
- start_glyph_id;
- } group[1];
- };
-
-
-
- struct FontHeader
- {
- fixed version,
- font_revision;
- uint32 check_sum_adjustment,
- magic_number;
- uint16 flags,
- units_per_em;
- long_date_time created,
- modified;
- fword x_min,
- y_min,
- x_max,
- y_max;
- uint16 mac_style,
- lowest_rec_ppem;
- int16 font_direction_hint,
- index_to_loc_format,
- glyph_data_format;
- enum
- {
- MagicNumber = 0x5F0F3CF5,
- GlypDataFormat = 0
- };
- enum {ShortIndexLocFormat, LongIndexLocFormat};
- };
-
-
-
-
- struct PostScriptGlyphName
- {
- fixed format,
- italic_angle;
- fword underline_position,
- underline_thickness;
- uint32 is_fixed_pitch,
- min_mem_type42,
- max_mem_type42,
- min_mem_type1,
- max_mem_type1;
- enum
- {
- Format1 = 0x10000,
- Format2 = 0x20000,
- Format25 = 0x28000,
- Format3 = 0x30000,
- Format4 = 0x40000
- };
- };
-
- struct PostScriptGlyphName2 : PostScriptGlyphName
- {
- uint16 number_of_glyphs,
- glyph_name_index[1];
- };
-
- struct PostScriptGlyphName25 : PostScriptGlyphName
- {
- uint16 number_of_glyphs;
- int8 offset[1];
- };
-
- struct PostScriptGlyphName3 : PostScriptGlyphName {};
-
- struct PostScriptGlyphName4 : PostScriptGlyphName
- {
- uint16 glyph_to_char_map[1];
- };
-
-
- struct HorizontalHeader
- {
- fixed version;
- fword ascent,
- descent,
- line_gap;
- ufword advance_width_max;
- fword min_left_side_bearing,
- max_left_side_bearing,
- x_max_element;
- int16 caret_slope_rise,
- caret_slope_run;
- fword caret_offset;
- int16 reserved[4],
- metric_data_format;
- uint16 num_long_hor_metrics;
- };
-
- struct MaximumProfile
- {
- fixed version;
- uint16 num_glyphs,
- max_points,
- max_contours,
- max_component_points,
- max_component_contours,
- max_zones,
- max_twilight_points,
- max_storage,
- max_function_defs,
- max_instruction_defs,
- max_stack_elements,
- max_size_of_instructions,
- max_component_elements,
- max_component_depth;
- };
-
-
- typedef gr::byte Panose[10];
-
- struct Compatibility0
- {
- uint16 version;
- int16 x_avg_char_width;
- uint16 weight_class,
- width_class;
- int16 fs_type,
- y_subscript_x_size,
- y_subscript_y_size,
- y_subscript_x_offset,
- y_subscript_y_offset,
- y_superscript_x_size,
- y_superscript_y_size,
- y_superscript_x_offset,
- y_superscript_y_offset,
- y_strikeout_size,
- y_strikeout_position,
- family_class;
- Panose panose;
- uint32 unicode_range[4];
- int8 ach_vend_id[4];
- uint16 fs_selection,
- fs_first_char_index,
- fs_last_char_index, // Acording to Apple's spec this is where v0 should end
- typo_ascender,
- typo_descender,
- type_linegap,
- win_ascent,
- win_descent;
-
- enum
- {
- Italic =0x01,
- Underscore=0x02,
- Negative =0x04,
- Outlined =0x08,
- StrikeOut =0x10,
- Bold =0x20
- };
- };
-
- struct Compatibility1 : Compatibility0
- {
- uint32 codepage_range[2];
- };
-
- struct Compatibility2 : Compatibility1
- {
- int16 x_height,
- cap_height;
- uint16 default_char,
- break_char,
- max_context;
- };
-
- struct Compatibility3 : Compatibility2 {};
-
- typedef Compatibility3 Compatibility;
-
-
- struct NameRecord
- {
- uint16 platform_id,
- platform_specific_id,
- language_id,
- name_id,
- length,
- offset;
- enum {Unicode, Mactintosh, Reserved, Microsoft};
- enum
- {
- Copyright, Family, Subfamily, UniqueSubfamily,
- Fullname, Version, PostScript
- };
- };
-
- struct FontNames
- {
- uint16 format,
- count,
- string_offset;
- NameRecord name_record[1];
- };
-
-
- struct HorizontalMetric
- {
- uint16 advance_width;
- int16 left_side_bearing;
- };
-
-
- struct Glyph
- {
- int16 number_of_contours;
- fword x_min,
- y_min,
- x_max,
- y_max;
- };
-
- struct SimpleGlyph : Glyph
- {
- uint16 end_pts_of_contours[1];
- enum
- {
- OnCurve = 0x01,
- XShort = 0x02,
- YShort = 0x04,
- Repeat = 0x08,
- XIsSame = 0x10,
- XIsPos = 0x10,
- YIsSame = 0x20,
- YIsPos = 0x20
- };
- };
-
- struct CompoundGlyph : Glyph
- {
- uint16 flags,
- glyph_index;
- enum
- {
- Arg1Arg2Words = 0x01,
- ArgsAreXYValues = 0x02,
- RoundXYToGrid = 0x04,
- HaveScale = 0x08,
- MoreComponents = 0x20,
- HaveXAndYScale = 0x40,
- HaveTwoByTwo = 0x80,
- HaveInstructions = 0x100,
- UseMyMetrics = 0x200,
- OverlapCompund = 0x400,
- ScaledOffset = 0x800,
- UnscaledOffset = 0x1000
- };
- };
-
-#pragma pack()
-} // end of namespace Sfnt
-
-} // end of namespace TtfUtil
diff --git a/Build/source/libs/graphite-engine/src/font/TtfUtil.cpp b/Build/source/libs/graphite-engine/src/font/TtfUtil.cpp
deleted file mode 100644
index 471b7eeca2c..00000000000
--- a/Build/source/libs/graphite-engine/src/font/TtfUtil.cpp
+++ /dev/null
@@ -1,1935 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2000, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TtfUtil.cpp
-Responsibility: Alan Ward
-Last reviewed: Not yet.
-
-Description:
- Implements the methods for TtfUtil class. This file should remain portable to any C++
- environment by only using standard C++ and the TTF structurs defined in Tt.h.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-
-/***********************************************************************************************
- Include files
-***********************************************************************************************/
-// Language headers
-#include <algorithm>
-#include <cassert>
-#include <cstddef>
-#include <cstring>
-#include <climits>
-#include <stdexcept>
-// Platform headers
-// Module headers
-#include "TtfUtil.h"
-#include "TtfTypes.h"
-
-/***********************************************************************************************
- Forward declarations
-***********************************************************************************************/
-
-/***********************************************************************************************
- Local Constants and static variables
-***********************************************************************************************/
-// max number of components allowed in composite glyphs
-namespace
-{
- const int kMaxGlyphComponents = 8;
-
- // These are basic byte order swapping functions
- template<typename T> inline T rev16(const T d) {
- T r = (d & 0xff) << 8; r |= (d & 0xff00) >> 8;
- return r;
- }
-
- template<typename T> inline T rev32(const T d) {
- T r = (d & 0xff) << 24; r |= (d & 0xff00) << 8;
- r |= (d & 0xff0000) >> 8; r |= (d & 0xff000000) >> 24;
- return r;
- }
-
- // This is the generic read function which does the swapping
- template<typename T> inline T read(const T d) {
- return d;
- }
-
-#if !defined WORDS_BIGENDIAN || defined PC_OS
- template<> inline TtfUtil::uint16 read(const TtfUtil::uint16 d) {
- return rev16(d);
- }
-
- template<> inline TtfUtil::int16 read(const TtfUtil::int16 d) {
- return rev16(d);
- }
-
- template<> inline TtfUtil::uint32 read(const TtfUtil::uint32 d) {
- return rev32(d);
- }
-
- template<> inline TtfUtil::int32 read(const TtfUtil::int32 d) {
- return rev32(d);
- }
-#endif
-
- template <int R, typename T>
- inline float fixed_to_float(const T f) {
- return float(f)/float(2^R);
- }
-
-#define MAKE_TAG(a,b,c,d) ((a << 24UL) + (b << 16UL) + (c << 8UL) + (d))
- const gr::fontTableId32 mapIdToTag[] = {
- MAKE_TAG('c','m','a','p'),
- MAKE_TAG('c','v','t',' '),
- MAKE_TAG('c','r','y','p'),
- MAKE_TAG('h','e','a','d'),
- MAKE_TAG('f','p','g','m'),
- MAKE_TAG('g','d','i','r'),
- MAKE_TAG('g','l','y','f'),
- MAKE_TAG('h','d','m','x'),
- MAKE_TAG('h','h','e','a'),
- MAKE_TAG('h','m','t','x'),
- MAKE_TAG('l','o','c','a'),
- MAKE_TAG('k','e','r','n'),
- MAKE_TAG('L','T','S','H'),
- MAKE_TAG('m','a','x','p'),
- MAKE_TAG('n','a','m','e'),
- MAKE_TAG('O','S','/','2'),
- MAKE_TAG('p','o','s','t'),
- MAKE_TAG('p','r','e','p'),
- MAKE_TAG('F','e','a','t'),
- MAKE_TAG('G','l','a','t'),
- MAKE_TAG('G','l','o','c'),
- MAKE_TAG('S','i','l','f'),
- MAKE_TAG('S','i','l','e'),
- MAKE_TAG('S','i','l','l')
- };
-
-
-/*----------------------------------------------------------------------------------------------
- Table of standard Postscript glyph names. From Martin Hosken. Disagress with ttfdump.exe
----------------------------------------------------------------------------------------------*/
- const int kcPostNames = 258;
-
- const char * rgPostName[kcPostNames] = {
- ".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign",
- "dollar", "percent", "ampersand", "quotesingle", "parenleft",
- "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash",
- "zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
- "nine", "colon", "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
- "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
- "bracketleft", "backslash", "bracketright", "asciicircum",
- "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i",
- "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
- "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde",
- "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis",
- "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde",
- "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis",
- "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute",
- "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave",
- "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling",
- "section", "bullet", "paragraph", "germandbls", "registered",
- "copyright", "trademark", "acute", "dieresis", "notequal", "AE",
- "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen",
- "mu", "partialdiff", "summation", "product", "pi", "integral",
- "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown",
- "exclamdown", "logicalnot", "radical", "florin", "approxequal",
- "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace",
- "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash",
- "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide",
- "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",
- "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered",
- "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex",
- "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",
- "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
- "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi",
- "circumflex", "tilde", "macron", "breve", "dotaccent", "ring",
- "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash",
- "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth",
- "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply",
- "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter",
- "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla",
- "scedilla", "Cacute", "cacute", "Ccaron", "ccaron",
- "dcroat" };
-
-}
-
-/***********************************************************************************************
- Methods
-***********************************************************************************************/
-
-/* Note on error processing: The code guards against bad glyph ids being used to look up data
-in open ended tables (loca, hmtx). If the glyph id comes from a cmap this shouldn't happen
-but it seems prudent to check for user errors here. The code does assume that data obtained
-from the TTF file is valid otherwise (though the CheckTable method seeks to check for
-obvious problems that might accompany a change in table versions). For example an invalid
-offset in the loca table which could exceed the size of the glyf table is NOT trapped.
-Likewise if numberOf_LongHorMetrics in the hhea table is wrong, this will NOT be trapped,
-which could cause a lookup in the hmtx table to exceed the table length. Of course, TTF tables
-that are completely corrupt will cause unpredictable results. */
-
-/* Note on composite glyphs: Glyphs that have components that are themselves composites
-are not supported. IsDeepComposite can be used to test for this. False is returned from many
-of the methods in this cases. It is unclear how to build composite glyphs in some cases,
-so this code represents my best guess until test cases can be found. See notes on the high-
-level GlyfPoints method. */
-
-namespace TtfUtil
-{
-
-
-/*----------------------------------------------------------------------------------------------
- Get offset and size of the offset table needed to find table directory
- Return true if success, false otherwise
- lSize excludes any table directory entries
-----------------------------------------------------------------------------------------------*/
-bool GetHeaderInfo(size_t & lOffset, size_t & lSize)
-{
- lOffset = 0;
- lSize = offsetof(Sfnt::OffsetSubTable, table_directory);
- assert(sizeof(uint32) + 4*sizeof (uint16) == lSize);
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Check the offset table for expected data
- Return true if success, false otherwise
-----------------------------------------------------------------------------------------------*/
-bool CheckHeader(const void * pHdr)
-{
- const Sfnt::OffsetSubTable * pOffsetTable
- = reinterpret_cast<const Sfnt::OffsetSubTable *>(pHdr);
-
- return read(pOffsetTable->scaler_type) == Sfnt::OffsetSubTable::TrueTypeWin;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get offset and size of the table directory
- Return true if successful, false otherwise
-----------------------------------------------------------------------------------------------*/
-bool GetTableDirInfo(const void * pHdr, size_t & lOffset, size_t & lSize)
-{
- const Sfnt::OffsetSubTable * pOffsetTable
- = reinterpret_cast<const Sfnt::OffsetSubTable *>(pHdr);
-
- lOffset = offsetof(Sfnt::OffsetSubTable, table_directory);
- lSize = read(pOffsetTable->num_tables)
- * sizeof(Sfnt::OffsetSubTable::Entry);
-
- return true;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Get offset and size of the specified table
- Return true if successful, false otherwise. On false, offset and size will be 0
-----------------------------------------------------------------------------------------------*/
-bool GetTableInfo(TableId ktiTableId, const void * pHdr, const void * pTableDir,
- size_t & lOffset, size_t & lSize)
-{
- gr::fontTableId32 lTableTag = TableIdTag(ktiTableId);
- if (!lTableTag)
- {
- lOffset = 0;
- lSize = 0;
- return false;
- }
-
- const Sfnt::OffsetSubTable * pOffsetTable
- = reinterpret_cast<const Sfnt::OffsetSubTable *>(pHdr);
- const Sfnt::OffsetSubTable::Entry
- * entry_itr = reinterpret_cast<const Sfnt::OffsetSubTable::Entry *>(
- pTableDir),
- * const dir_end = entry_itr + read(pOffsetTable->num_tables);
-
- assert(read(pOffsetTable->num_tables) < 40);
- if (read(pOffsetTable->num_tables) > 40)
- return false;
-
- for (;entry_itr != dir_end; ++entry_itr) // 40 - safe guard
- {
- if (read(entry_itr->tag) == lTableTag)
- {
- lOffset = read(entry_itr->offset);
- lSize = read(entry_itr->length);
- return true;
- }
- }
-
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Check the specified table. Tests depend on the table type.
- Return true if successful, false otherwise
-----------------------------------------------------------------------------------------------*/
-bool CheckTable(TableId ktiTableId, const void * pTable, size_t lTableSize)
-{
- using namespace Sfnt;
-
- switch(ktiTableId)
- {
- case ktiCmap: // cmap
- {
- const Sfnt::CharacterCodeMap * const pCmap
- = reinterpret_cast<const Sfnt::CharacterCodeMap *>(pTable);
- assert(read(pCmap->version) == 0);
- return read(pCmap->version) == 0;
- }
-
- case ktiHead: // head
- {
- const Sfnt::FontHeader * const pHead
- = reinterpret_cast<const Sfnt::FontHeader *>(pTable);
- bool r = read(pHead->version) == OneFix
- && read(pHead->magic_number) == FontHeader::MagicNumber
- && read(pHead->glyph_data_format)
- == FontHeader::GlypDataFormat
- && (read(pHead->index_to_loc_format)
- == FontHeader::ShortIndexLocFormat
- || read(pHead->index_to_loc_format)
- == FontHeader::LongIndexLocFormat)
- && sizeof(FontHeader) <= lTableSize;
- assert(r); return r;
- }
-
- case ktiPost: // post
- {
- const Sfnt::PostScriptGlyphName * const pPost
- = reinterpret_cast<const Sfnt::PostScriptGlyphName *>(pTable);
- const fixed format = read(pPost->format);
- bool r = format == PostScriptGlyphName::Format1
- || format == PostScriptGlyphName::Format2
- || format == PostScriptGlyphName::Format3
- || format == PostScriptGlyphName::Format25;
- assert(r); return r;
- }
-
- case ktiHhea: // hhea
- {
- const Sfnt::HorizontalHeader * pHhea =
- reinterpret_cast<const Sfnt::HorizontalHeader *>(pTable);
- bool r = read(pHhea->version) == OneFix
- && read(pHhea->metric_data_format) == 0
- && sizeof (Sfnt::HorizontalHeader) <= lTableSize;
- assert(r); return r;
- }
-
- case ktiMaxp: // maxp
- {
- const Sfnt::MaximumProfile * pMaxp =
- reinterpret_cast<const Sfnt::MaximumProfile *>(pTable);
- bool r = read(pMaxp->version) == OneFix
- && sizeof(Sfnt::MaximumProfile) <= lTableSize;
- assert(r); return r;
- }
-
- case ktiOs2: // OS/2
- {
- const Sfnt::Compatibility * pOs2
- = reinterpret_cast<const Sfnt::Compatibility *>(pTable);
- if (read(pOs2->version) == 0)
- { // OS/2 table version 1 size
-// if (sizeof(Sfnt::Compatibility)
-// - sizeof(uint32)*2 - sizeof(int16)*2
-// - sizeof(uint16)*3 <= lTableSize)
- if (sizeof(Sfnt::Compatibility0) <= lTableSize)
- return true;
- }
- else if (read(pOs2->version) == 1)
- { // OS/2 table version 2 size
-// if (sizeof(Sfnt::Compatibility)
-// - sizeof(int16) *2
-// - sizeof(uint16)*3 <= lTableSize)
- if (sizeof(Sfnt::Compatibility1) <= lTableSize)
- return true;
- }
- else if (read(pOs2->version) == 2)
- { // OS/2 table version 3 size
- if (sizeof(Sfnt::Compatibility2) <= lTableSize)
- return true;
- }
- else if (read(pOs2->version) == 3)
- { // OS/2 table version 4 size - version 4 changed the meaning of some fields which we don't use
- if (sizeof(Sfnt::Compatibility3) <= lTableSize)
- return true;
- }
- else
- return false;
- }
-
- case ktiName:
- {
- const Sfnt::FontNames * pName
- = reinterpret_cast<const Sfnt::FontNames *>(pTable);
- assert(read(pName->format) == 0);
- return read(pName->format) == 0;
- }
-
- default:
- break;
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of glyphs in the font. Should never be less than zero.
-----------------------------------------------------------------------------------------------*/
-size_t GlyphCount(const void * pMaxp)
-{
- const Sfnt::MaximumProfile * pTable =
- reinterpret_cast<const Sfnt::MaximumProfile *>(pMaxp);
- return read(pTable->num_glyphs);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the maximum number of components for any composite glyph in the font
-----------------------------------------------------------------------------------------------*/
-size_t MaxCompositeComponentCount(const void * pMaxp)
-{
- const Sfnt::MaximumProfile * pTable =
- reinterpret_cast<const Sfnt::MaximumProfile *>(pMaxp);
- return read(pTable->max_component_elements);
-}
-
-/*----------------------------------------------------------------------------------------------
- Composite glyphs can be composed of glyphs that are themselves composites.
- This method returns the maximum number of levels like this for any glyph in the font.
- A non-composite glyph has a level of 1
-----------------------------------------------------------------------------------------------*/
-size_t MaxCompositeLevelCount(const void * pMaxp)
-{
- const Sfnt::MaximumProfile * pTable =
- reinterpret_cast<const Sfnt::MaximumProfile *>(pMaxp);
- return read(pTable->max_component_depth);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of glyphs in the font according to a differt source.
- Should never be less than zero. Return -1 on failure.
-----------------------------------------------------------------------------------------------*/
-size_t LocaGlyphCount(size_t lLocaSize, const void * pHead) throw(std::domain_error)
-{
-
- const Sfnt::FontHeader * pTable
- = reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- if (read(pTable->index_to_loc_format)
- == Sfnt::FontHeader::ShortIndexLocFormat)
- // loca entries are two bytes and have been divided by two
- return (lLocaSize >> 1) - 1;
-
- if (read(pTable->index_to_loc_format)
- == Sfnt::FontHeader::LongIndexLocFormat)
- // loca entries are four bytes
- return (lLocaSize >> 2) - 1;
-
- //return -1;
- throw std::domain_error("head table in inconsistent state. The font may be corrupted");
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the design units the font is designed with
-----------------------------------------------------------------------------------------------*/
-int DesignUnits(const void * pHead)
-{
- const Sfnt::FontHeader * pTable =
- reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- return read(pTable->units_per_em);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the checksum from the head table, which serves as a unique identifer for the font.
-----------------------------------------------------------------------------------------------*/
-int HeadTableCheckSum(const void * pHead)
-{
- const Sfnt::FontHeader * pTable =
- reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- return read(pTable->check_sum_adjustment);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the create time from the head table. This consists of a 64-bit integer, which
- we return here as two 32-bit integers.
-----------------------------------------------------------------------------------------------*/
-void HeadTableCreateTime(const void * pHead,
- unsigned int * pnDateBC, unsigned int * pnDateAD)
-{
- const Sfnt::FontHeader * pTable =
- reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- *pnDateBC = read(pTable->created[0]);
- *pnDateAD = read(pTable->created[1]);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the modify time from the head table.This consists of a 64-bit integer, which
- we return here as two 32-bit integers.
-----------------------------------------------------------------------------------------------*/
-void HeadTableModifyTime(const void * pHead,
- unsigned int * pnDateBC, unsigned int *pnDateAD)
-{
- const Sfnt::FontHeader * pTable =
- reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- *pnDateBC = read(pTable->modified[0]);
- *pnDateAD = read(pTable->modified[1]);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the font is italic.
-----------------------------------------------------------------------------------------------*/
-bool IsItalic(const void * pHead)
-{
- const Sfnt::FontHeader * pTable =
- reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- return read(((pTable->mac_style) & 0x00000002) != 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the ascent for the font
-----------------------------------------------------------------------------------------------*/
-int FontAscent(const void * pOs2)
-{
- const Sfnt::Compatibility * pTable = reinterpret_cast<const Sfnt::Compatibility *>(pOs2);
-
- return read(pTable->win_ascent);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the descent for the font
-----------------------------------------------------------------------------------------------*/
-int FontDescent(const void * pOs2)
-{
- const Sfnt::Compatibility * pTable = reinterpret_cast<const Sfnt::Compatibility *>(pOs2);
-
- return read(pTable->win_descent);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the bold and italic style bits.
- Return true if successful. false otherwise.
- In addition to checking the OS/2 table, one could also check
- the head table's macStyle field (overridden by the OS/2 table on Win)
- the sub-family name in the name table (though this can contain oblique, dark, etc too)
-----------------------------------------------------------------------------------------------*/
-bool FontOs2Style(const void *pOs2, bool & fBold, bool & fItalic)
-{
- const Sfnt::Compatibility * pTable = reinterpret_cast<const Sfnt::Compatibility *>(pOs2);
-
- fBold = (read(pTable->fs_selection) & Sfnt::Compatibility::Bold) != 0;
- fItalic = (read(pTable->fs_selection) & Sfnt::Compatibility::Italic) != 0;
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Method for searching name table.
-----------------------------------------------------------------------------------------------*/
-bool GetNameInfo(const void * pName, int nPlatformId, int nEncodingId,
- int nLangId, int nNameId, size_t & lOffset, size_t & lSize)
-{
- lOffset = 0;
- lSize = 0;
-
- const Sfnt::FontNames * pTable = reinterpret_cast<const Sfnt::FontNames *>(pName);
- uint16 cRecord = read(pTable->count);
- uint16 nRecordOffset = read(pTable->string_offset);
- const Sfnt::NameRecord * pRecord = reinterpret_cast<const Sfnt::NameRecord *>(pTable + 1);
-
- for (int i = 0; i < cRecord; ++i)
- {
- if (read(pRecord->platform_id) == nPlatformId &&
- read(pRecord->platform_specific_id) == nEncodingId &&
- read(pRecord->language_id) == nLangId &&
- read(pRecord->name_id) == nNameId)
- {
- lOffset = read(pRecord->offset) + nRecordOffset;
- lSize = read(pRecord->length);
- return true;
- }
- pRecord++;
- }
-
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return all the lang-IDs that have data for the given name-IDs. Assume that there is room
- in the return array (langIdList) for 128 items. The purpose of this method is to return
- a list of all possible lang-IDs.
-----------------------------------------------------------------------------------------------*/
-int GetLangsForNames(const void * pName, int nPlatformId, int nEncodingId,
- int * nameIdList, int cNameIds, short * langIdList)
-{
- const Sfnt::FontNames * pTable = reinterpret_cast<const Sfnt::FontNames *>(pName);
- uint16 cRecord = read(pTable->count);
- //uint16 nRecordOffset = swapw(pTable->stringOffset);
- const Sfnt::NameRecord * pRecord = reinterpret_cast<const Sfnt::NameRecord *>(pTable + 1);
-
- int cLangIds = 0;
- for (int i = 0; i < cRecord; ++i)
- {
- if (read(pRecord->platform_id) == nPlatformId &&
- read(pRecord->platform_specific_id) == nEncodingId)
- {
- bool fNameFound = false;
- int nLangId = read(pRecord->language_id);
- int nNameId = read(pRecord->name_id);
- for (int i = 0; i < cNameIds; i++)
- {
- if (nNameId == nameIdList[i])
- {
- fNameFound = true;
- break;
- }
- }
- if (fNameFound)
- {
- // Add it if it's not there.
- int ilang;
- for (ilang = 0; ilang < cLangIds; ilang++)
- if (langIdList[ilang] == nLangId)
- break;
- if (ilang >= cLangIds)
- {
- langIdList[cLangIds] = short(nLangId);
- cLangIds++;
- }
- if (cLangIds == 128)
- return cLangIds;
- }
- }
- pRecord++;
- }
-
- return cLangIds;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the offset and size of the font family name in English for the MS Platform with Unicode
- writing system. The offset is within the pName data. The string is double byte with MSB first.
-----------------------------------------------------------------------------------------------*/
-bool Get31EngFamilyInfo(const void * pName, size_t & lOffset, size_t & lSize)
-{
- return GetNameInfo(pName, Sfnt::NameRecord::Microsoft, 1, 1033,
- Sfnt::NameRecord::Family, lOffset, lSize);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the offset and size of the full font name in English for the MS Platform with Unicode
- writing system. The offset is within the pName data. The string is double byte with MSB first.
-----------------------------------------------------------------------------------------------*/
-bool Get31EngFullFontInfo(const void * pName, size_t & lOffset, size_t & lSize)
-{
- return GetNameInfo(pName, Sfnt::NameRecord::Microsoft, 1, 1033,
- Sfnt::NameRecord::Fullname, lOffset, lSize);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the offset and size of the font family name in English for the MS Platform with Symbol
- writing system. The offset is within the pName data. The string is double byte with MSB first.
-----------------------------------------------------------------------------------------------*/
-bool Get30EngFamilyInfo(const void * pName, size_t & lOffset, size_t & lSize)
-{
- return GetNameInfo(pName, Sfnt::NameRecord::Microsoft, 0, 1033,
- Sfnt::NameRecord::Family, lOffset, lSize);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the offset and size of the full font name in English for the MS Platform with Symbol
- writing system. The offset is within the pName data. The string is double byte with MSB first.
-----------------------------------------------------------------------------------------------*/
-bool Get30EngFullFontInfo(const void * pName, size_t & lOffset, size_t & lSize)
-{
- return GetNameInfo(pName, Sfnt::NameRecord::Microsoft, 0, 1033,
- Sfnt::NameRecord::Fullname, lOffset, lSize);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the Glyph ID for a given Postscript name. This method finds the first glyph which
- matches the requested Postscript name. Ideally every glyph should have a unique Postscript
- name (except for special names such as .notdef), but this is not always true.
- On failure return value less than zero.
- -1 - table search failed
- -2 - format 3 table (no Postscript glyph info)
- -3 - other failures
-----------------------------------------------------------------------------------------------*/
-int PostLookup(const void * pPost, size_t lPostSize, const void * pMaxp,
- const char * pPostName)
-{
- using namespace Sfnt;
-
- const Sfnt::PostScriptGlyphName * pTable
- = reinterpret_cast<const Sfnt::PostScriptGlyphName *>(pPost);
- fixed format = read(pTable->format);
-
- if (format == PostScriptGlyphName::Format3)
- { // format 3 - no Postscript glyph info in font
- return -2;
- }
-
- // search for given Postscript name among the standard names
- int iPostName = -1; // index in standard names
- for (int i = 0; i < kcPostNames; i++)
- {
- if (!strcmp(pPostName, rgPostName[i]))
- {
- iPostName = i;
- break;
- }
- }
-
- if (format == PostScriptGlyphName::Format1)
- { // format 1 - use standard Postscript names
- return iPostName;
- }
-
- if (format == PostScriptGlyphName::Format25)
- {
- if (iPostName == -1)
- return -1;
-
- const PostScriptGlyphName25 * pTable25
- = static_cast<const PostScriptGlyphName25 *>(pTable);
- int cnGlyphs = GlyphCount(pMaxp);
- for (gr::gid16 nGlyphId = 0; nGlyphId < cnGlyphs && nGlyphId < kcPostNames;
- nGlyphId++)
- { // glyph_name_index25 contains bytes so no byte swapping needed
- // search for first glyph id that uses the standard name
- if (nGlyphId + pTable25->offset[nGlyphId] == iPostName)
- return nGlyphId;
- }
- }
-
- if (format == PostScriptGlyphName::Format2)
- { // format 2
- const PostScriptGlyphName2 * pTable2
- = static_cast<const PostScriptGlyphName2 *>(pTable);
-
- int cnGlyphs = read(pTable2->number_of_glyphs);
-
- if (iPostName != -1)
- { // did match a standard name, look for first glyph id mapped to that name
- for (gr::gid16 nGlyphId = 0; nGlyphId < cnGlyphs; nGlyphId++)
- {
- if (read(pTable2->glyph_name_index[nGlyphId]) == iPostName)
- return nGlyphId;
- }
- return -1; // no glyph with this standard name
- }
-
- else
- { // did not match a standard name, search font specific names
- size_t nStrSizeGoal = strlen(pPostName);
- const char * pFirstGlyphName = reinterpret_cast<const char *>(
- &pTable2->glyph_name_index[0] + cnGlyphs);
- const char * pGlyphName = pFirstGlyphName;
- int iInNames = 0; // index in font specific names
- bool fFound = false;
- const char * const endOfTable
- = reinterpret_cast<const char *>(pTable2) + lPostSize;
- while (pGlyphName < endOfTable && !fFound)
- { // search Pascal strings for first matching name
- size_t nStringSize = size_t(*pGlyphName);
- if (nStrSizeGoal != nStringSize ||
- strncmp(pGlyphName + 1, pPostName, nStringSize))
- { // did not match
- ++iInNames;
- pGlyphName += nStringSize + 1;
- }
- else
- { // did match
- fFound = true;
- }
- }
- if (!fFound)
- return -1; // no font specific name matches request
-
- iInNames += kcPostNames;
- for (gr::gid16 nGlyphId = 0; nGlyphId < cnGlyphs; nGlyphId++)
- { // search for first glyph id that maps to the found string index
- if (read(pTable2->glyph_name_index[nGlyphId]) == iInNames)
- return nGlyphId;
- }
- return -1; // no glyph mapped to this index (very strange)
- }
- }
-
- return -3;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert a Unicode character string from big endian (MSB first, Motorola) format to little
- endian (LSB first, Intel) format.
- nSize is the number of Unicode characters in the string. It should not include any
- terminating null. If nSize is 0, it is assumed the string is null terminated. nSize
- defaults to 0.
- Return true if successful, false otherwise.
-----------------------------------------------------------------------------------------------*/
-void SwapWString(void * pWStr, size_t nSize /* = 0 */) throw (std::invalid_argument)
-{
- if (pWStr == 0)
- throw std::invalid_argument("null pointer given");
-
- uint16 * pStr = reinterpret_cast<uint16 *>(pWStr);
- uint16 * const pStrEnd = pStr + (nSize == 0 ? gr::utf16len(pStr) : nSize);
-
- std::transform(pStr, pStrEnd, pStr, read<uint16>);
-
-// for (int i = 0; i < nSize; i++)
-// { // swap the wide characters in the string
-// pStr[i] = gr::utf16(read(uint16(pStr[i])));
-// }
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the left-side bearing and and advance width based on the given tables and Glyph ID
- Return true if successful, false otherwise. On false, one or both value could be INT_MIN
-----------------------------------------------------------------------------------------------*/
-bool HorMetrics(gr::gid16 nGlyphId, const void * pHmtx, size_t lHmtxSize, const void * pHhea,
- int & nLsb, unsigned int & nAdvWid)
-{
- const Sfnt::HorizontalMetric * phmtx =
- reinterpret_cast<const Sfnt::HorizontalMetric *>(pHmtx);
-
- const Sfnt::HorizontalHeader * phhea =
- reinterpret_cast<const Sfnt::HorizontalHeader *>(pHhea);
-
- size_t cLongHorMetrics = read(phhea->num_long_hor_metrics);
- if (nGlyphId < cLongHorMetrics)
- { // glyph id is acceptable
- nAdvWid = read(phmtx[nGlyphId].advance_width);
- nLsb = read(phmtx[nGlyphId].left_side_bearing);
- }
- else
- {
- nAdvWid = read(phmtx[cLongHorMetrics - 1].advance_width);
-
- // guard against bad glyph id
- size_t lLsbOffset = sizeof(Sfnt::HorizontalMetric) * cLongHorMetrics +
- sizeof(int16) * (nGlyphId - cLongHorMetrics); // offset in bytes
- if (lLsbOffset + 1 >= lHmtxSize) // + 1 because entries are two bytes wide
- {
- nLsb = 0;
- return false;
- }
- const int16 * pLsb = reinterpret_cast<const int16 *>(phmtx) +
- lLsbOffset / sizeof(int16);
- nLsb = read(*pLsb);
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a pointer to the requested cmap subtable. By default find the Microsoft Unicode
- subtable. Pass nEncoding as -1 to find first table that matches only nPlatformId.
- Return NULL if the subtable cannot be found.
-----------------------------------------------------------------------------------------------*/
-void * FindCmapSubtable(const void * pCmap,
- int nPlatformId, /* =3 */
- int nEncodingId) /* = 1 */
-{
- const Sfnt::CharacterCodeMap * pTable =
- reinterpret_cast<const Sfnt::CharacterCodeMap *>(pCmap);
-
- uint16 csuPlatforms = read(pTable->num_subtables);
- for (int i = 0; i < csuPlatforms; i++)
- {
- if (read(pTable->encoding[i].platform_id) == nPlatformId &&
- (nEncodingId == -1 || read(pTable->encoding[i].platform_specific_id) == nEncodingId))
- {
- const void * pRtn = reinterpret_cast<const uint8 *>(pCmap) +
- read(pTable->encoding[i].offset);
- return const_cast<void *>(pRtn);
- }
- }
-
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Check the Microsoft Unicode subtable for expected values
-----------------------------------------------------------------------------------------------*/
-bool CheckCmap31Subtable(const void * pCmap31)
-{
- const Sfnt::CmapSubTable * pTable = reinterpret_cast<const Sfnt::CmapSubTable *>(pCmap31);
- // Bob H says ome freeware TT fonts have version 1 (eg, CALIGULA.TTF)
- // so don't check subtable version. 21 Mar 2002 spec changes version to language.
-
- return read(pTable->format) == 4;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the Glyph ID for the given Unicode ID in the Microsoft Unicode subtable.
- (Actually this code only depends on subtable being format 4.)
- Return 0 if the Unicode ID is not in the subtable.
-----------------------------------------------------------------------------------------------*/
-gr::gid16 Cmap31Lookup(const void * pCmap31, int nUnicodeId)
-{
- const Sfnt::CmapSubTableFormat4 * pTable = reinterpret_cast<const Sfnt::CmapSubTableFormat4 *>(pCmap31);
-
- uint16 nSeg = read(pTable->seg_count_x2) >> 1;
-
- uint16 n;
- const uint16 * pLeft, * pMid;
- uint16 cMid, chStart, chEnd;
-
- // Binary search of the endCode[] array
- pLeft = &(pTable->end_code[0]);
- n = nSeg;
- while (n > 0)
- {
- cMid = n >> 1; // Pick an element in the middle
- pMid = pLeft + cMid;
- chEnd = read(*pMid);
- if (nUnicodeId <= chEnd)
- {
- if (cMid == 0 || nUnicodeId > read(pMid[-1]))
- break; // Must be this seg or none!
- n = cMid; // Continue on left side, omitting mid point
- }
- else
- {
- pLeft = pMid + 1; // Continue on right side, omitting mid point
- n -= (cMid + 1);
- }
- }
-
- if (!n)
- return 0;
-
- // Ok, we're down to one segment and pMid points to the endCode element
- // Either this is it or none is.
-
- chStart = read(*(pMid += nSeg + 1));
- if (chEnd >= nUnicodeId && nUnicodeId >= chStart)
- {
- // Found correct segment. Find Glyph Id
- int16 idDelta = read(*(pMid += nSeg));
- uint16 idRangeOffset = read(*(pMid += nSeg));
-
- if (idRangeOffset == 0)
- return (uint16)(idDelta + nUnicodeId); // must use modulus 2^16
-
- // Look up value in glyphIdArray
- gr::gid16 nGlyphId = read(*(pMid + (nUnicodeId - chStart) + (idRangeOffset >> 1)));
- // If this value is 0, return 0. Else add the idDelta
- return nGlyphId ? nGlyphId + idDelta : 0;
- }
-
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the next Unicode value in the cmap. Pass 0 to obtain the first item.
- Returns 0xFFFF as the last item.
- pRangeKey is an optional key that is used to optimize the search; its value is the range
- in which the character is found.
-----------------------------------------------------------------------------------------------*/
-unsigned int Cmap31NextCodepoint(const void *pCmap31, unsigned int nUnicodeId, int * pRangeKey)
-{
- const Sfnt::CmapSubTableFormat4 * pTable = reinterpret_cast<const Sfnt::CmapSubTableFormat4 *>(pCmap31);
-
- uint16 nRange = read(pTable->seg_count_x2) >> 1;
-
- uint32 nUnicodePrev = (uint32)nUnicodeId;
-
- const uint16 * pStartCode = &(pTable->end_code[0])
- + nRange // length of end code array
- + 1; // reserved word
-
- if (nUnicodePrev == 0)
- {
- // return the first codepoint.
- if (pRangeKey)
- *pRangeKey = 0;
- return read(pStartCode[0]);
- }
- else if (nUnicodePrev >= 0xFFFF)
- {
- if (pRangeKey)
- *pRangeKey = nRange - 1;
- return 0xFFFF;
- }
-
- int iRange = (pRangeKey) ? *pRangeKey : 0;
- // Just in case we have a bad key:
- while (iRange > 0 && read(pStartCode[iRange]) > nUnicodePrev)
- iRange--;
- while (read(pTable->end_code[iRange]) < nUnicodePrev)
- iRange++;
-
- // Now iRange is the range containing nUnicodePrev.
- unsigned int nStartCode = read(pStartCode[iRange]);
- unsigned int nEndCode = read(pTable->end_code[iRange]);
-
- if (nStartCode > nUnicodePrev)
- // Oops, nUnicodePrev is not in the cmap! Adjust so we get a reasonable
- // answer this time around.
- nUnicodePrev = nStartCode - 1;
-
- if (nEndCode > nUnicodePrev)
- {
- // Next is in the same range; it is the next successive codepoint.
- if (pRangeKey)
- *pRangeKey = iRange;
- return nUnicodePrev + 1;
- }
-
- // Otherwise the next codepoint is the first one in the next range.
- // There is guaranteed to be a next range because there must be one that
- // ends with 0xFFFF.
- if (pRangeKey)
- *pRangeKey = iRange + 1;
- return read(pStartCode[iRange + 1]);
-}
-
-/*----------------------------------------------------------------------------------------------
- Check the Microsoft UCS-4 subtable for expected values
-----------------------------------------------------------------------------------------------*/
-bool CheckCmap310Subtable(const void *pCmap310)
-{
- const Sfnt::CmapSubTable * pTable = reinterpret_cast<const Sfnt::CmapSubTable *>(pCmap310);
- return read(pTable->format) == 12;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the Glyph ID for the given Unicode ID in the Microsoft UCS-4 subtable.
- (Actually this code only depends on subtable being format 12.)
- Return 0 if the Unicode ID is not in the subtable.
-----------------------------------------------------------------------------------------------*/
-gr::gid16 Cmap310Lookup(const void * pCmap310, unsigned int uUnicodeId)
-{
- const Sfnt::CmapSubTableFormat12 * pTable = reinterpret_cast<const Sfnt::CmapSubTableFormat12 *>(pCmap310);
-
- //uint32 uLength = read(pTable->length); //could use to test for premature end of table
- uint32 ucGroups = read(pTable->num_groups);
-
- for (unsigned int i = 0; i < ucGroups; i++)
- {
- uint32 uStartCode = read(pTable->group[i].start_char_code);
- uint32 uEndCode = read(pTable->group[i].end_char_code);
- if (uUnicodeId >= uStartCode && uUnicodeId <= uEndCode)
- {
- uint32 uDiff = uUnicodeId - uStartCode;
- uint32 uStartGid = read(pTable->group[i].start_glyph_id);
- return static_cast<gr::gid16>(uStartGid + uDiff);
- }
- }
-
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the next Unicode value in the cmap. Pass 0 to obtain the first item.
- Returns 0x10FFFF as the last item.
- pRangeKey is an optional key that is used to optimize the search; its value is the range
- in which the character is found.
-----------------------------------------------------------------------------------------------*/
-unsigned int Cmap310NextCodepoint(const void *pCmap310, unsigned int nUnicodeId, int * pRangeKey)
-{
- const Sfnt::CmapSubTableFormat12 * pTable = reinterpret_cast<const Sfnt::CmapSubTableFormat12 *>(pCmap310);
-
- int nRange = read(pTable->num_groups);
-
- uint32 nUnicodePrev = (uint32)nUnicodeId;
-
- if (nUnicodePrev == 0)
- {
- // return the first codepoint.
- if (pRangeKey)
- *pRangeKey = 0;
- return read(pTable->group[0].start_char_code);
- }
- else if (nUnicodePrev >= 0x10FFFF)
- {
- if (pRangeKey)
- *pRangeKey = nRange;
- return 0x10FFFF;
- }
-
- int iRange = (pRangeKey) ? *pRangeKey : 0;
- // Just in case we have a bad key:
- while (iRange > 0 && read(pTable->group[iRange].start_char_code) > nUnicodePrev)
- iRange--;
- while (read(pTable->group[iRange].end_char_code) < nUnicodePrev)
- iRange++;
-
- // Now iRange is the range containing nUnicodePrev.
-
- unsigned int nStartCode = read(pTable->group[iRange].start_char_code);
- unsigned int nEndCode = read(pTable->group[iRange].end_char_code);
-
- if (nStartCode > nUnicodePrev)
- // Oops, nUnicodePrev is not in the cmap! Adjust so we get a reasonable
- // answer this time around.
- nUnicodePrev = nStartCode - 1;
-
- if (nEndCode > nUnicodePrev)
- {
- // Next is in the same range; it is the next successive codepoint.
- if (pRangeKey)
- *pRangeKey = iRange;
- return nUnicodePrev + 1;
- }
-
- // Otherwise the next codepoint is the first one in the next range, or 10FFFF if we're done.
- if (pRangeKey)
- *pRangeKey = iRange + 1;
- return (iRange + 1 >= nRange) ? 0x10FFFF : read(pTable->group[iRange + 1].start_char_code);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the offset stored in the loca table for the given Glyph ID.
- (This offset is into the glyf table.)
- Return -1 if the lookup failed.
- Technically this method should return an unsigned long but it is unlikely the offset will
- exceed 2^31.
-----------------------------------------------------------------------------------------------*/
-size_t LocaLookup(gr::gid16 nGlyphId,
- const void * pLoca, size_t lLocaSize,
- const void * pHead) throw (std::out_of_range)
-{
- const Sfnt::FontHeader * pTable = reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- // CheckTable verifies the index_to_loc_format is valid
- if (read(pTable->index_to_loc_format) == Sfnt::FontHeader::ShortIndexLocFormat)
- { // loca entries are two bytes and have been divided by two
- if (nGlyphId <= (lLocaSize >> 1) - 1) // allow sentinel value to be accessed
- {
- const uint16 * pTable = reinterpret_cast<const uint16 *>(pLoca);
- return (read(pTable[nGlyphId]) << 1);
- }
- }
-
- if (read(pTable->index_to_loc_format) == Sfnt::FontHeader::LongIndexLocFormat)
- { // loca entries are four bytes
- if (nGlyphId <= (lLocaSize >> 2) - 1)
- {
- const uint32 * pTable = reinterpret_cast<const uint32 *>(pLoca);
- return read(pTable[nGlyphId]);
- }
- }
-
- // only get here if glyph id was bad
- //return -1;
- throw std::out_of_range("glyph id out of range for font");
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a pointer into the glyf table based on the given offset (from LocaLookup).
- Return NULL on error.
-----------------------------------------------------------------------------------------------*/
-void * GlyfLookup(const void * pGlyf, size_t nGlyfOffset)
-{
- const uint8 * pByte = reinterpret_cast<const uint8 *>(pGlyf);
- return const_cast<uint8 *>(pByte + nGlyfOffset);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the bounding box coordinates for a simple glyf entry (non-composite)
- Return true if successful, false otherwise
-----------------------------------------------------------------------------------------------*/
-bool GlyfBox(const void * pSimpleGlyf, int & xMin, int & yMin,
- int & xMax, int & yMax)
-{
- const Sfnt::Glyph * pGlyph = reinterpret_cast<const Sfnt::Glyph *>(pSimpleGlyf);
-
- xMin = read(pGlyph->x_min);
- yMin = read(pGlyph->y_min);
- xMax = read(pGlyph->x_max);
- yMax = read(pGlyph->y_max);
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of contours for a simple glyf entry (non-composite)
- Returning -1 means this is a composite glyph
-----------------------------------------------------------------------------------------------*/
-int GlyfContourCount(const void * pSimpleGlyf)
-{
- const Sfnt::Glyph * pGlyph = reinterpret_cast<const Sfnt::Glyph *>(pSimpleGlyf);
- return read(pGlyph->number_of_contours); // -1 means composite glyph
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the point numbers for the end points of the glyph contours for a simple
- glyf entry (non-composite).
- cnPointsTotal - count of contours from GlyfContourCount(); (same as number of end points)
- prgnContourEndPoints - should point to a buffer large enough to hold cnPoints integers
- cnPoints - count of points placed in above range
- Return true if successful, false otherwise.
- False could indicate a multi-level composite glyphs.
-----------------------------------------------------------------------------------------------*/
-bool GlyfContourEndPoints(const void * pSimpleGlyf, int * prgnContourEndPoint,
- int cnPointsTotal, int & cnPoints)
-{
- const Sfnt::SimpleGlyph * pGlyph = reinterpret_cast<const Sfnt::SimpleGlyph *>(pSimpleGlyf);
-
- int cContours = read(pGlyph->number_of_contours);
- if (cContours < 0)
- return false; // this method isn't supposed handle composite glyphs
-
- for (int i = 0; i < cContours && i < cnPointsTotal; i++)
- {
- prgnContourEndPoint[i] = read(pGlyph->end_pts_of_contours[i]);
- }
-
- cnPoints = cContours;
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the points for a simple glyf entry (non-composite)
- cnPointsTotal - count of points from largest end point obtained from GlyfContourEndPoints
- prgnX & prgnY - should point to buffers large enough to hold cnPointsTotal integers
- The ranges are parallel so that coordinates for point(n) are found at offset n in both
- ranges. This is raw point data with relative coordinates.
- prgbFlag - should point to a buffer a large enough to hold cnPointsTotal bytes
- This range is parallel to the prgnX & prgnY
- cnPoints - count of points placed in above ranges
- Return true if successful, false otherwise.
- False could indicate a composite glyph
- TODO: implement
-----------------------------------------------------------------------------------------------*/
-bool GlyfPoints(const void * pSimpleGlyf, int * prgnX, int * prgnY,
- char * prgbFlag, int cnPointsTotal, int & cnPoints)
-{
- using namespace Sfnt;
-
- const Sfnt::SimpleGlyph * pGlyph = reinterpret_cast<const Sfnt::SimpleGlyph *>(pSimpleGlyf);
- int cContours = read(pGlyph->number_of_contours);
- // return false for composite glyph
- if (cContours <= 0)
- return false;
- int cPts = read(pGlyph->end_pts_of_contours[cContours - 1]) + 1;
- if (cPts > cnPointsTotal)
- return false;
-
- // skip over bounding box data & point to byte count of instructions (hints)
- const uint8 * pbGlyph = reinterpret_cast<const uint8 *>
- (&pGlyph->end_pts_of_contours[cContours]);
-
- // skip over hints & point to first flag
- int cbHints = read(*(uint16 *)pbGlyph);
- pbGlyph += sizeof(uint16);
- pbGlyph += cbHints;
-
- // load flags & point to first x coordinate
- int iFlag = 0;
- while (iFlag < cPts)
- {
- if (!(*pbGlyph & SimpleGlyph::Repeat))
- { // flag isn't repeated
- prgbFlag[iFlag] = (char)*pbGlyph;
- pbGlyph++;
- iFlag++;
- }
- else
- { // flag is repeated; count specified by next byte
- char chFlag = (char)*pbGlyph;
- pbGlyph++;
- int cFlags = (int)*pbGlyph;
- pbGlyph++;
- prgbFlag[iFlag] = chFlag;
- iFlag++;
- for (int i = 0; i < cFlags; i++)
- {
- prgbFlag[iFlag + i] = chFlag;
- }
- iFlag += cFlags;
- }
- }
- if (iFlag != cPts)
- return false;
-
- // load x coordinates
- iFlag = 0;
- while (iFlag < cPts)
- {
- if (prgbFlag[iFlag] & SimpleGlyph::XShort)
- {
- prgnX[iFlag] = *pbGlyph;
- if (!(prgbFlag[iFlag] & SimpleGlyph::XIsPos))
- {
- prgnX[iFlag] = -prgnX[iFlag];
- }
- pbGlyph++;
- }
- else
- {
- if (prgbFlag[iFlag] & SimpleGlyph::XIsSame)
- {
- prgnX[iFlag] = 0;
- // do NOT increment pbGlyph
- }
- else
- {
- prgnX[iFlag] = read(*(int16 *)pbGlyph);
- pbGlyph += sizeof(int16);
- }
- }
- iFlag++;
- }
-
- // load y coordinates
- iFlag = 0;
- while (iFlag < cPts)
- {
- if (prgbFlag[iFlag] & SimpleGlyph::YShort)
- {
- prgnY[iFlag] = *pbGlyph;
- if (!(prgbFlag[iFlag] & SimpleGlyph::YIsPos))
- {
- prgnY[iFlag] = -prgnY[iFlag];
- }
- pbGlyph++;
- }
- else
- {
- if (prgbFlag[iFlag] & SimpleGlyph::YIsSame)
- {
- prgnY[iFlag] = 0;
- // do NOT increment pbGlyph
- }
- else
- {
- prgnY[iFlag] = read(*(int16 *)pbGlyph);
- pbGlyph += sizeof(int16);
- }
- }
- iFlag++;
- }
-
- cnPoints = cPts;
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Fill prgnCompId with the component Glyph IDs from pSimpleGlyf.
- Client must allocate space before calling.
- pSimpleGlyf - assumed to point to a composite glyph
- cCompIdTotal - the number of elements in prgnCompId
- cCompId - the total number of Glyph IDs stored in prgnCompId
- Return true if successful, false otherwise
- False could indicate a non-composite glyph or the input array was not big enough
-----------------------------------------------------------------------------------------------*/
-bool GetComponentGlyphIds(const void * pSimpleGlyf, int * prgnCompId,
- size_t cnCompIdTotal, size_t & cnCompId)
-{
- using namespace Sfnt;
-
- if (GlyfContourCount(pSimpleGlyf) >= 0)
- return false;
-
- const Sfnt::SimpleGlyph * pGlyph = reinterpret_cast<const Sfnt::SimpleGlyph *>(pSimpleGlyf);
- // for a composite glyph, the special data begins here
- const uint8 * pbGlyph = reinterpret_cast<const uint8 *>(&pGlyph->end_pts_of_contours[0]);
-
- uint16 GlyphFlags;
- size_t iCurrentComp = 0;
- do
- {
- GlyphFlags = read(*((uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- prgnCompId[iCurrentComp++] = read(*((uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- if (iCurrentComp >= cnCompIdTotal)
- return false;
- int nOffset = 0;
- nOffset += GlyphFlags & CompoundGlyph::Arg1Arg2Words ? 4 : 2;
- nOffset += GlyphFlags & CompoundGlyph::HaveScale ? 2 : 0;
- nOffset += GlyphFlags & CompoundGlyph::HaveXAndYScale ? 4 : 0;
- nOffset += GlyphFlags & CompoundGlyph::HaveTwoByTwo ? 8 : 0;
- pbGlyph += nOffset;
- } while (GlyphFlags & CompoundGlyph::MoreComponents);
-
- cnCompId = iCurrentComp;
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return info on how a component glyph is to be placed
- pSimpleGlyph - assumed to point to a composite glyph
- nCompId - glyph id for component of interest
- bOffset - if true, a & b are the x & y offsets for this component
- if false, b is the point on this component that is attaching to point a on the
- preceding glyph
- Return true if successful, false otherwise
- False could indicate a non-composite glyph or that component wasn't found
-----------------------------------------------------------------------------------------------*/
-bool GetComponentPlacement(const void * pSimpleGlyf, int nCompId,
- bool fOffset, int & a, int & b)
-{
- using namespace Sfnt;
-
- if (GlyfContourCount(pSimpleGlyf) >= 0)
- return false;
-
- const Sfnt::SimpleGlyph * pGlyph = reinterpret_cast<const Sfnt::SimpleGlyph *>(pSimpleGlyf);
- // for a composite glyph, the special data begins here
- const uint8 * pbGlyph = reinterpret_cast<const uint8 *>(&pGlyph->end_pts_of_contours[0]);
-
- uint16 GlyphFlags;
- do
- {
- GlyphFlags = read(*((uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- if (read(*((uint16 *)pbGlyph)) == nCompId)
- {
- pbGlyph += sizeof(uint16); // skip over glyph id of component
- fOffset = (GlyphFlags & CompoundGlyph::ArgsAreXYValues) == CompoundGlyph::ArgsAreXYValues;
-
- if (GlyphFlags & CompoundGlyph::Arg1Arg2Words )
- {
- a = read(*(int16 *)pbGlyph);
- pbGlyph += sizeof(int16);
- b = read(*(int16 *)pbGlyph);
- pbGlyph += sizeof(int16);
- }
- else
- { // args are signed bytes
- a = *pbGlyph++;
- b = *pbGlyph++;
- }
- return true;
- }
- pbGlyph += sizeof(uint16); // skip over glyph id of component
- int nOffset = 0;
- nOffset += GlyphFlags & CompoundGlyph::Arg1Arg2Words ? 4 : 2;
- nOffset += GlyphFlags & CompoundGlyph::HaveScale ? 2 : 0;
- nOffset += GlyphFlags & CompoundGlyph::HaveXAndYScale ? 4 : 0;
- nOffset += GlyphFlags & CompoundGlyph::HaveTwoByTwo ? 8 : 0;
- pbGlyph += nOffset;
- } while (GlyphFlags & CompoundGlyph::MoreComponents);
-
- // didn't find requested component
- fOffset = true;
- a = 0;
- b = 0;
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return info on how a component glyph is to be transformed
- pSimpleGlyph - assumed to point to a composite glyph
- nCompId - glyph id for component of interest
- flt11, flt11, flt11, flt11 - a 2x2 matrix giving the transform
- bTransOffset - whether to transform the offset from above method
- The spec is unclear about the meaning of this flag
- Currently - initialize to true for MS rasterizer and false for Mac rasterizer, then
- on return it will indicate whether transform should apply to offset (MSDN CD 10/99)
- Return true if successful, false otherwise
- False could indicate a non-composite glyph or that component wasn't found
-----------------------------------------------------------------------------------------------*/
-bool GetComponentTransform(const void * pSimpleGlyf, int nCompId,
- float & flt11, float & flt12, float & flt21, float & flt22,
- bool & fTransOffset)
-{
- using namespace Sfnt;
-
- if (GlyfContourCount(pSimpleGlyf) >= 0)
- return false;
-
- const Sfnt::SimpleGlyph * pGlyph = reinterpret_cast<const Sfnt::SimpleGlyph *>(pSimpleGlyf);
- // for a composite glyph, the special data begins here
- const uint8 * pbGlyph = reinterpret_cast<const uint8 *>(&pGlyph->end_pts_of_contours[0]);
-
- uint16 GlyphFlags;
- do
- {
- GlyphFlags = read(*((uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- if (read(*((uint16 *)pbGlyph)) == nCompId)
- {
- pbGlyph += sizeof(uint16); // skip over glyph id of component
- pbGlyph += GlyphFlags & CompoundGlyph::Arg1Arg2Words ? 4 : 2; // skip over placement data
-
- if (fTransOffset) // MS rasterizer
- fTransOffset = !(GlyphFlags & CompoundGlyph::UnscaledOffset);
- else // Apple rasterizer
- fTransOffset = (GlyphFlags & CompoundGlyph::ScaledOffset) != 0;
-
- if (GlyphFlags & CompoundGlyph::HaveScale)
- {
- flt11 = fixed_to_float<14>(read(*(uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- flt12 = 0;
- flt21 = 0;
- flt22 = flt11;
- }
- else if (GlyphFlags & CompoundGlyph::HaveXAndYScale)
- {
- flt11 = fixed_to_float<14>(read(*(uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- flt12 = 0;
- flt21 = 0;
- flt22 = fixed_to_float<14>(read(*(uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- }
- else if (GlyphFlags & CompoundGlyph::HaveTwoByTwo)
- {
- flt11 = fixed_to_float<14>(read(*(uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- flt12 = fixed_to_float<14>(read(*(uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- flt21 = fixed_to_float<14>(read(*(uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- flt22 = fixed_to_float<14>(read(*(uint16 *)pbGlyph));
- pbGlyph += sizeof(uint16);
- }
- else
- { // identity transform
- flt11 = 1.0;
- flt12 = 0.0;
- flt21 = 0.0;
- flt22 = 1.0;
- }
- return true;
- }
- pbGlyph += sizeof(uint16); // skip over glyph id of component
- int nOffset = 0;
- nOffset += GlyphFlags & CompoundGlyph::Arg1Arg2Words ? 4 : 2;
- nOffset += GlyphFlags & CompoundGlyph::HaveScale ? 2 : 0;
- nOffset += GlyphFlags & CompoundGlyph::HaveXAndYScale ? 4 : 0;
- nOffset += GlyphFlags & CompoundGlyph::HaveTwoByTwo ? 8 : 0;
- pbGlyph += nOffset;
- } while (GlyphFlags & CompoundGlyph::MoreComponents);
-
- // didn't find requested component
- fTransOffset = false;
- flt11 = 1;
- flt12 = 0;
- flt21 = 0;
- flt22 = 1;
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a pointer into the glyf table based on the given tables and Glyph ID
- Since this method doesn't check for spaces, it is good to call IsSpace before using it.
- Return NULL on error
-----------------------------------------------------------------------------------------------*/
-void * GlyfLookup(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead)
-{
- // test for valid glyph id
- // CheckTable verifies the index_to_loc_format is valid
-
- const Sfnt::FontHeader * pTable
- = reinterpret_cast<const Sfnt::FontHeader *>(pHead);
-
- if (read(pTable->index_to_loc_format) == Sfnt::FontHeader::ShortIndexLocFormat)
- { // loca entries are two bytes (and have been divided by two)
- if (nGlyphId >= (lLocaSize >> 1) - 1) // don't allow nGlyphId to access sentinel
- throw std::out_of_range("glyph id out of range for font");
- }
- if (read(pTable->index_to_loc_format) == Sfnt::FontHeader::LongIndexLocFormat)
- { // loca entries are four bytes
- if (nGlyphId >= (lLocaSize >> 2) - 1)
- throw std::out_of_range("glyph id out of range for font");
- }
-
- long lGlyfOffset = LocaLookup(nGlyphId, pLoca, lLocaSize, pHead);
- void * pSimpleGlyf = GlyfLookup(pGlyf, lGlyfOffset); // invalid loca offset returns null
- return pSimpleGlyf;
-}
-
-/*----------------------------------------------------------------------------------------------
- Determine if a particular Glyph ID has any data in the glyf table. If it is white space,
- there will be no glyf data, though there will be metric data in hmtx, etc.
-----------------------------------------------------------------------------------------------*/
-bool IsSpace(gr::gid16 nGlyphId, const void * pLoca, size_t lLocaSize, const void * pHead)
-{
- size_t lGlyfOffset = LocaLookup(nGlyphId, pLoca, lLocaSize, pHead);
-
- // the +1 should always work because there is a sentinel value at the end of the loca table
- size_t lNextGlyfOffset = LocaLookup(nGlyphId + 1, pLoca, lLocaSize, pHead);
-
- return (lNextGlyfOffset - lGlyfOffset) == 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Determine if a particular Glyph ID is a multi-level composite.
-----------------------------------------------------------------------------------------------*/
-bool IsDeepComposite(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- long lLocaSize, const void * pHead)
-{
- if (IsSpace(nGlyphId, pLoca, lLocaSize, pHead)) {return false;}
-
- void * pSimpleGlyf = GlyfLookup(nGlyphId, pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == NULL)
- return false; // no way to really indicate an error occured here
-
- if (GlyfContourCount(pSimpleGlyf) >= 0)
- return false;
-
- int rgnCompId[kMaxGlyphComponents]; // assumes only a limited number of glyph components
- size_t cCompIdTotal = kMaxGlyphComponents;
- size_t cCompId = 0;
-
- if (!GetComponentGlyphIds(pSimpleGlyf, rgnCompId, cCompIdTotal, cCompId))
- return false;
-
- for (size_t i = 0; i < cCompId; i++)
- {
- void * pSimpleGlyf = GlyfLookup(static_cast<gr::gid16>(rgnCompId[i]),
- pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == NULL) {return false;}
-
- if (GlyfContourCount(pSimpleGlyf) < 0)
- return true;
- }
-
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the bounding box coordinates based on the given tables and Glyph ID
- Handles both simple and composite glyphs.
- Return true if successful, false otherwise. On false, all point values will be INT_MIN
- False may indicate a white space glyph
-----------------------------------------------------------------------------------------------*/
-bool GlyfBox(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead, int & xMin, int & yMin, int & xMax, int & yMax)
-{
- xMin = yMin = xMax = yMax = INT_MIN;
-
- if (IsSpace(nGlyphId, pLoca, lLocaSize, pHead)) {return false;}
-
- void * pSimpleGlyf = GlyfLookup(nGlyphId, pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == NULL) {return false;}
-
- return GlyfBox(pSimpleGlyf, xMin, yMin, xMax, yMax);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the number of contours based on the given tables and Glyph ID
- Handles both simple and composite glyphs.
- Return true if successful, false otherwise. On false, cnContours will be INT_MIN
- False may indicate a white space glyph or a multi-level composite glyph.
-----------------------------------------------------------------------------------------------*/
-bool GlyfContourCount(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead, size_t & cnContours)
-{
- cnContours = static_cast<size_t>(INT_MIN);
-
- if (IsSpace(nGlyphId, pLoca, lLocaSize, pHead)) {return false;}
-
- void * pSimpleGlyf = GlyfLookup(nGlyphId, pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == NULL) {return false;}
-
- int cRtnContours = GlyfContourCount(pSimpleGlyf);
- if (cRtnContours >= 0)
- {
- cnContours = size_t(cRtnContours);
- return true;
- }
-
- //handle composite glyphs
-
- int rgnCompId[kMaxGlyphComponents]; // assumes no glyph will be made of more than 8 components
- size_t cCompIdTotal = kMaxGlyphComponents;
- size_t cCompId = 0;
-
- if (!GetComponentGlyphIds(pSimpleGlyf, rgnCompId, cCompIdTotal, cCompId))
- return false;
-
- cRtnContours = 0;
- int cTmp = 0;
- for (size_t i = 0; i < cCompId; i++)
- {
- if (IsSpace(static_cast<gr::gid16>(rgnCompId[i]), pLoca, lLocaSize, pHead)) {return false;}
- pSimpleGlyf = GlyfLookup(static_cast<gr::gid16>(rgnCompId[i]),
- pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == 0) {return false;}
- // return false on multi-level composite
- if ((cTmp = GlyfContourCount(pSimpleGlyf)) < 0)
- return false;
- cRtnContours += cTmp;
- }
-
- cnContours = size_t(cRtnContours);
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the point numbers for the end points of the glyph contours based on the given tables
- and Glyph ID
- Handles both simple and composite glyphs.
- cnPoints - count of contours from GlyfContourCount (same as number of end points)
- prgnContourEndPoints - should point to a buffer large enough to hold cnPoints integers
- Return true if successful, false otherwise. On false, all end points are INT_MIN
- False may indicate a white space glyph or a multi-level composite glyph.
-----------------------------------------------------------------------------------------------*/
-bool GlyfContourEndPoints(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead,
- int * prgnContourEndPoint, size_t cnPoints)
-{
- std::fill_n(prgnContourEndPoint, cnPoints, INT_MIN);
-
- if (IsSpace(nGlyphId, pLoca, lLocaSize, pHead)) {return false;}
-
- void * pSimpleGlyf = GlyfLookup(nGlyphId, pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == NULL) {return false;}
-
- int cContours = GlyfContourCount(pSimpleGlyf);
- int cActualPts = 0;
- if (cContours > 0)
- return GlyfContourEndPoints(pSimpleGlyf, prgnContourEndPoint, cnPoints, cActualPts);
-
- // handle composite glyphs
-
- int rgnCompId[kMaxGlyphComponents]; // assumes no glyph will be made of more than 8 components
- size_t cCompIdTotal = kMaxGlyphComponents;
- size_t cCompId = 0;
-
- if (!GetComponentGlyphIds(pSimpleGlyf, rgnCompId, cCompIdTotal, cCompId))
- return false;
-
- int * prgnCurrentEndPoint = prgnContourEndPoint;
- int cCurrentPoints = cnPoints;
- int nPrevPt = 0;
- for (size_t i = 0; i < cCompId; i++)
- {
- if (IsSpace(static_cast<gr::gid16>(rgnCompId[i]), pLoca, lLocaSize, pHead)) {return false;}
- pSimpleGlyf = GlyfLookup(static_cast<gr::gid16>(rgnCompId[i]), pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == NULL) {return false;}
- // returns false on multi-level composite
- if (!GlyfContourEndPoints(pSimpleGlyf, prgnCurrentEndPoint, cCurrentPoints, cActualPts))
- return false;
- // points in composite are numbered sequentially as components are added
- // must adjust end point numbers for new point numbers
- for (int j = 0; j < cActualPts; j++)
- prgnCurrentEndPoint[j] += nPrevPt;
- nPrevPt = prgnCurrentEndPoint[cActualPts - 1] + 1;
-
- prgnCurrentEndPoint += cActualPts;
- cCurrentPoints -= cActualPts;
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the points for a glyph based on the given tables and Glyph ID
- Handles both simple and composite glyphs.
- cnPoints - count of points from largest end point obtained from GlyfContourEndPoints
- prgnX & prgnY - should point to buffers large enough to hold cnPoints integers
- The ranges are parallel so that coordinates for point(n) are found at offset n in
- both ranges. These points are in absolute coordinates.
- prgfOnCurve - should point to a buffer a large enough to hold cnPoints bytes (bool)
- This range is parallel to the prgnX & prgnY
- Return true if successful, false otherwise. On false, all points may be INT_MIN
- False may indicate a white space glyph, a multi-level composite, or a corrupt font
- // TODO: doesn't support composite glyphs whose components are themselves components
- It's not clear from the TTF spec when the transforms should be applied. Should the
- transform be done before or after attachment point calcs? (current code - before)
- Should the transform be applied to other offsets? (currently - no; however commented
- out code is in place so that if CompoundGlyph::UnscaledOffset on the MS rasterizer is
- clear (typical) then yes, and if CompoundGlyph::ScaledOffset on the Apple rasterizer is
- clear (typical?) then no). See GetComponentTransform.
- It's also unclear where point numbering with attachment poinst starts
- (currently - first point number is relative to whole glyph, second point number is
- relative to current glyph).
-----------------------------------------------------------------------------------------------*/
-bool GlyfPoints(gr::gid16 nGlyphId, const void * pGlyf,
- const void * pLoca, size_t lLocaSize, const void * pHead,
- const int * prgnContourEndPoint, size_t cnEndPoints,
- int * prgnX, int * prgnY, bool * prgfOnCurve, size_t cnPoints)
-{
- std::fill_n(prgnX, cnPoints, INT_MAX);
- std::fill_n(prgnY, cnPoints, INT_MAX);
-
- if (IsSpace(nGlyphId, pLoca, lLocaSize, pHead))
- return false;
-
- void * pSimpleGlyf = GlyfLookup(nGlyphId, pGlyf, pLoca, lLocaSize, pHead);
- if (pSimpleGlyf == NULL)
- return false;
-
- int cContours = GlyfContourCount(pSimpleGlyf);
- int cActualPts;
- if (cContours > 0)
- {
- if (!GlyfPoints(pSimpleGlyf, prgnX, prgnY, (char *)prgfOnCurve, cnPoints, cActualPts))
- return false;
- CalcAbsolutePoints(prgnX, prgnY, cnPoints);
- SimplifyFlags((char *)prgfOnCurve, cnPoints);
- return true;
- }
-
- // handle composite glyphs
- int rgnCompId[kMaxGlyphComponents]; // assumes no glyph will be made of more than 8 components
- size_t cCompIdTotal = kMaxGlyphComponents;
- size_t cCompId = 0;
-
- // this will fail if there are more components than there is room for
- if (!GetComponentGlyphIds(pSimpleGlyf, rgnCompId, cCompIdTotal, cCompId))
- return false;
-
- int * prgnCurrentX = prgnX;
- int * prgnCurrentY = prgnY;
- char * prgbCurrentFlag = (char *)prgfOnCurve; // converting bool to char should be safe
- int cCurrentPoints = cnPoints;
- bool fOffset = true, fTransOff = true;
- int a, b;
- float flt11, flt12, flt21, flt22;
- // int * prgnPrevX = prgnX; // in case first att pt number relative to preceding glyph
- // int * prgnPrevY = prgnY;
- for (size_t i = 0; i < cCompId; i++)
- {
- if (IsSpace(static_cast<gr::gid16>(rgnCompId[i]), pLoca, lLocaSize, pHead)) {return false;}
- void * pCompGlyf = GlyfLookup(static_cast<gr::gid16>(rgnCompId[i]), pGlyf, pLoca, lLocaSize, pHead);
- if (pCompGlyf == NULL) {return false;}
- // returns false on multi-level composite
- if (!GlyfPoints(pCompGlyf, prgnCurrentX, prgnCurrentY, prgbCurrentFlag,
- cCurrentPoints, cActualPts))
- return false;
- if (!GetComponentPlacement(pSimpleGlyf, rgnCompId[i], fOffset, a, b))
- return false;
- if (!GetComponentTransform(pSimpleGlyf, rgnCompId[i],
- flt11, flt12, flt21, flt22, fTransOff))
- return false;
- bool fIdTrans = flt11 == 1.0 && flt12 == 0.0 && flt21 == 0.0 && flt22 == 1.0;
-
- // convert points to absolute coordinates
- // do before transform and attachment point placement are applied
- CalcAbsolutePoints(prgnCurrentX, prgnCurrentY, cActualPts);
-
- // apply transform - see main method note above
- // do before attachment point calcs
- if (!fIdTrans)
- for (int j = 0; j < cActualPts; j++)
- {
- int x = prgnCurrentX[j]; // store before transform applied
- int y = prgnCurrentY[j];
- prgnCurrentX[j] = (int)(x * flt11 + y * flt12);
- prgnCurrentY[j] = (int)(x * flt21 + y * flt22);
- }
-
- // apply placement - see main method note above
- int nXOff, nYOff;
- if (fOffset) // explicit x & y offsets
- {
- /* ignore fTransOff for now
- if (fTransOff && !fIdTrans)
- { // transform x & y offsets
- nXOff = (int)(a * flt11 + b * flt12);
- nYOff = (int)(a * flt21 + b * flt22);
- }
- else */
- { // don't transform offset
- nXOff = a;
- nYOff = b;
- }
- }
- else // attachment points
- { // in case first point is relative to preceding glyph and second relative to current
- // nXOff = prgnPrevX[a] - prgnCurrentX[b];
- // nYOff = prgnPrevY[a] - prgnCurrentY[b];
- // first point number relative to whole composite, second relative to current glyph
- nXOff = prgnX[a] - prgnCurrentX[b];
- nYOff = prgnY[a] - prgnCurrentY[b];
- }
- for (int j = 0; j < cActualPts; j++)
- {
- prgnCurrentX[j] += nXOff;
- prgnCurrentY[j] += nYOff;
- }
-
- // prgnPrevX = prgnCurrentX;
- // prgnPrevY = prgnCurrentY;
- prgnCurrentX += cActualPts;
- prgnCurrentY += cActualPts;
- prgbCurrentFlag += cActualPts;
- cCurrentPoints -= cActualPts;
- }
-
- SimplifyFlags((char *)prgfOnCurve, cnPoints);
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Simplify the meaning of flags to just indicate whether point is on-curve or off-curve
----------------------------------------------------------------------------------------------*/
-bool SimplifyFlags(char * prgbFlags, int cnPoints)
-{
- for (int i = 0; i < cnPoints; i++)
- prgbFlags[i] = static_cast<char>(prgbFlags[i] & Sfnt::SimpleGlyph::OnCurve);
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert relative point coordinates to absolute coordinates
- Points are stored in the font such that they are offsets from one another except for the
- first point of a glyph.
----------------------------------------------------------------------------------------------*/
-bool CalcAbsolutePoints(int * prgnX, int * prgnY, int cnPoints)
-{
- int nX = prgnX[0];
- int nY = prgnY[0];
- for (int i = 1; i < cnPoints; i++)
- {
- prgnX[i] += nX;
- nX = prgnX[i];
- prgnY[i] += nY;
- nY = prgnY[i];
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert a numerical table ID to a string containing the actual name of the table.
- Returns native order unsigned long.
----------------------------------------------------------------------------------------------*/
-gr::fontTableId32 TableIdTag(const TableId tid)
-{
- assert(sizeof(mapIdToTag) == sizeof(gr::fontTableId32) * ktiLast);
- assert(tid < ktiLast);
-
- return mapIdToTag[tid];
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the length of the 'name' table in bytes.
- Currently used.
----------------------------------------------------------------------------------------------*/
-#if 0
-size_t NameTableLength(const gr::byte * pTable)
-{
- gr::byte * pb = (const_cast<gr::byte *>(pTable)) + 2; // skip format
- size_t cRecords = *pb++ << 8; cRecords += *pb++;
- int dbStringOffset0 = (*pb++) << 8; dbStringOffset0 += *pb++;
- int dbMaxStringOffset = 0;
- for (size_t irec = 0; irec < cRecords; irec++)
- {
- int nPlatform = (*pb++) << 8; nPlatform += *pb++;
- int nEncoding = (*pb++) << 8; nEncoding += *pb++;
- int nLanguage = (*pb++) << 8; nLanguage += *pb++;
- int nName = (*pb++) << 8; nName += *pb++;
- int cbStringLen = (*pb++) << 8; cbStringLen += *pb++;
- int dbStringOffset = (*pb++) << 8; dbStringOffset += *pb++;
- if (dbMaxStringOffset < dbStringOffset + cbStringLen)
- dbMaxStringOffset = dbStringOffset + cbStringLen;
- }
- return dbStringOffset0 + dbMaxStringOffset;
-}
-#endif
-
-} // end of namespace TtfUtil
diff --git a/Build/source/libs/graphite-engine/src/font/TtfUtil.h b/Build/source/libs/graphite-engine/src/font/TtfUtil.h
deleted file mode 100644
index bf437ff3475..00000000000
--- a/Build/source/libs/graphite-engine/src/font/TtfUtil.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2000, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TtfUtil.h
-Responsibility: Alan Ward
-Last reviewed: Not yet.
-
-Description:
- Utility class for handling TrueType font files.
-----------------------------------------------------------------------------------------------*/
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef TTFUTIL_H
-#define TTFUTIL_H
-
-#include <cstddef>
-#include <stdexcept>
-#include "GrPlatform.h"
-
-// Enumeration used to specify a table in a TTF file
-enum TableId
-{
- ktiCmap, ktiCvt, ktiCryp, ktiHead, ktiFpgm, ktiGdir, ktiGlyf,
- ktiHdmx, ktiHhea, ktiHmtx, ktiLoca, ktiKern, ktiLtsh, ktiMaxp,
- ktiName, ktiOs2, ktiPost, ktiPrep, ktiFeat, ktiGlat, ktiGloc,
- ktiSilf, ktiSile, ktiSill,
- ktiLast /*This gives the enum length - it is not a real table*/
-};
-
-/*----------------------------------------------------------------------------------------------
- Class providing utility methods to parse a TrueType font file (TTF).
- Callling application handles all file input and memory allocation.
- Assumes minimal knowledge of TTF file format.
-----------------------------------------------------------------------------------------------*/
-namespace TtfUtil
-{
- ////////////////////////////////// tools to find & check TTF tables
- bool GetHeaderInfo(size_t & lOffset, size_t & lSize);
- bool CheckHeader(const void * pHdr);
- bool GetTableDirInfo(const void * pHdr, size_t & lOffset, size_t & lSize);
- bool GetTableInfo(TableId ktiTableId, const void * pHdr, const void * pTableDir,
- size_t & lOffset, size_t & lSize);
- bool CheckTable(TableId ktiTableId, const void * pTable, size_t lTableSize);
-
- ////////////////////////////////// simple font wide info
- size_t GlyphCount(const void * pMaxp);
- size_t MaxCompositeComponentCount(const void * pMaxp);
- size_t MaxCompositeLevelCount(const void * pMaxp);
- size_t LocaGlyphCount(size_t lLocaSize, const void * pHead) throw (std::domain_error);
- int DesignUnits(const void * pHead);
- int HeadTableCheckSum(const void * pHead);
- void HeadTableCreateTime(const void * pHead, unsigned int * pnDateBC, unsigned int * pnDateAD);
- void HeadTableModifyTime(const void * pHead, unsigned int * pnDateBC, unsigned int * pnDateAD);
- bool IsItalic(const void * pHead);
- int FontAscent(const void * pOs2);
- int FontDescent(const void * pOs2);
- bool FontOs2Style(const void *pOs2, bool & fBold, bool & fItalic);
- bool Get31EngFamilyInfo(const void * pName, size_t & lOffset, size_t & lSize);
- bool Get31EngFullFontInfo(const void * pName, size_t & lOffset, size_t & lSize);
- bool Get30EngFamilyInfo(const void * pName, size_t & lOffset, size_t & lSize);
- bool Get30EngFullFontInfo(const void * pName, size_t & lOffset, size_t & lSize);
- int PostLookup(const void * pPost, size_t lPostSize, const void * pMaxp,
- const char * pPostName);
-
- ////////////////////////////////// utility methods helpful for name table
- bool GetNameInfo(const void * pName, int nPlatformId, int nEncodingId,
- int nLangId, int nNameId, size_t & lOffset, size_t & lSize);
- //size_t NameTableLength(const gr::byte * pTable);
- int GetLangsForNames(const void * pName, int nPlatformId, int nEncodingId,
- int *nameIdList, int cNameIds, short *langIdList);
- void SwapWString(void * pWStr, size_t nSize = 0) throw (std::invalid_argument);
-
- ////////////////////////////////// cmap lookup tools
- void * FindCmapSubtable(const void * pCmap, int nPlatformId = 3,
- int nEncodingId = 1);
- bool CheckCmap31Subtable(const void * pCmap31);
- gr::gid16 Cmap31Lookup(const void * pCmap31, int nUnicodeId);
- unsigned int Cmap31NextCodepoint(const void *pCmap31, unsigned int nUnicodeId,
- int * pRangeKey = 0);
- bool CheckCmap310Subtable(const void *pCmap310);
- gr::gid16 Cmap310Lookup(const void * pCmap310, unsigned int uUnicodeId);
- unsigned int Cmap310NextCodepoint(const void *pCmap310, unsigned int nUnicodeId,
- int * pRangeKey = 0);
-
- ///////////////////////////////// horizontal metric data for a glyph
- bool HorMetrics(gr::gid16 nGlyphId, const void * pHmtx, size_t lHmtxSize,
- const void * pHhea, int & nLsb, unsigned int & nAdvWid);
-
- ///////////////////////////////// convert our TableId enum to standard TTF tags
- gr::fontTableId32 TableIdTag(const TableId);
-
- ////////////////////////////////// primitives for loca and glyf lookup
- size_t LocaLookup(gr::gid16 nGlyphId, const void * pLoca, size_t lLocaSize,
- const void * pHead) throw (std::out_of_range);
- void * GlyfLookup(const void * pGlyf, size_t lGlyfOffset);
-
- ////////////////////////////////// primitves for simple glyph data
- bool GlyfBox(const void * pSimpleGlyf, int & xMin, int & yMin,
- int & xMax, int & yMax);
-
- int GlyfContourCount(const void * pSimpleGlyf);
- bool GlyfContourEndPoints(const void * pSimpleGlyf, int * prgnContourEndPoint,
- int cnPointsTotal, size_t & cnPoints);
- bool GlyfPoints(const void * pSimpleGlyf, int * prgnX, int * prgnY,
- char * prgbFlag, int cnPointsTotal, int & cnPoints);
-
- // primitive to find the glyph ids in a composite glyph
- bool GetComponentGlyphIds(const void * pSimpleGlyf, int * prgnCompId,
- size_t cnCompIdTotal, size_t & cnCompId);
- // primitive to find the placement data for a component in a composite glyph
- bool GetComponentPlacement(const void * pSimpleGlyf, int nCompId,
- bool fOffset, int & a, int & b);
- // primitive to find the transform data for a component in a composite glyph
- bool GetComponentTransform(const void * pSimpleGlyf, int nCompId,
- float & flt11, float & flt12, float & flt21, float & flt22, bool & fTransOffset);
-
- ////////////////////////////////// operate on composite or simple glyph (auto glyf lookup)
- void * GlyfLookup(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead); // primitive used by below methods
-
- // below are primary user methods for handling glyf data
- bool IsSpace(gr::gid16 nGlyphId, const void * pLoca, size_t lLocaSize, const void * pHead);
- bool IsDeepComposite(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead);
-
- bool GlyfBox(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca, size_t lLocaSize,
- const void * pHead, int & xMin, int & yMin, int & xMax, int & yMax);
- bool GlyfContourCount(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void *pHead, size_t & cnContours);
- bool GlyfContourEndPoints(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead, int * prgnContourEndPoint, size_t cnPoints);
- bool GlyfPoints(gr::gid16 nGlyphId, const void * pGlyf, const void * pLoca,
- size_t lLocaSize, const void * pHead, const int * prgnContourEndPoint, size_t cnEndPoints,
- int * prgnX, int * prgnY, bool * prgfOnCurve, size_t cnPoints);
-
- // utitily method used by high-level GlyfPoints
- bool SimplifyFlags(char * prgbFlags, int cnPoints);
- bool CalcAbsolutePoints(int * prgnX, int * prgnY, int cnPoints);
-
-} // end of namespace TtfUtil
-
-#endif
diff --git a/Build/source/libs/graphite-engine/src/generic/BinTree.h b/Build/source/libs/graphite-engine/src/generic/BinTree.h
deleted file mode 100644
index a487df03770..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/BinTree.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: BinTree.h
-Responsibility: Darrell Zook
-Last reviewed: 9/8/99
-
-Description:
- This file provides declarations of binary tree class(es).
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef BINTREE_H_INCLUDED
-#define BINTREE_H_INCLUDED
-
-/*----------------------------------------------------------------------------------------------
- This template class implements a balanced tree, which is a binary tree where the height of
- the two children of any node in the tree can only be different by +/- 1 or 0.
-
- The class of objects to be stored in the tree should be derived from BalTreeBase, because
- the constructor of BalTreeBase adds an object to the tree in sorted order without
- allocating any memory.
-
- Classes that derive from BalTreeBase must have a CompareKey member function that compares
- a given key with this->key to determine which should be first when sorting the tree.
- The declaration of CompareKey should be as follows:
- int CompareKey(const Key & key);
- and it should return:
- <0 if key is less than the key in the current node (this->key)
- 0 if key is equal to the key in the current node (this->key)
- >0 if key is greater than the key in the current node (this->key)
-
- CAUTION: Classes that use this template should never be dynamically instantiated (by using
- local variables or new/NewObj). This class is meant to be used only for global
- instances of a class. The reason for this restriction is that the tree is never
- destroyed, so using dynamic instantiations of objects would result in stale pointers
- in the tree.
-
- Hungarian: btb
-----------------------------------------------------------------------------------------------*/
-
-template<typename Obj, typename Key> class BalTreeBase
-{
-protected:
- // Pointers to the left and right subtrees.
- Obj * m_rgpobj[2];
-
- // The difference between the height of the right sub tree and the height of the left
- // sub tree. This should be -1, 0, or +1. Insert may temporarily set it to -2 or +2.
- short m_dht;
-
- // Which way we went from this node when inserting the new node.
- short m_ipobj;
-
- // Inserts this in the balanced tree.
- BalTreeBase(Obj ** ppobjRoot, const Key & key);
-
- // Returns a node with the given key from the tree rooted at pobjRoot.
- static Obj * Find(Obj * pobjRoot, const Key & key);
-
-private:
- // Inserts a node in the tree rooted at *ppobjRoot, sorting it based on key.
- void Insert(Obj ** ppobjRoot, const Key & key);
-};
-
-#endif // !BINTREE_H_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/src/generic/BinTree_i.cpp b/Build/source/libs/graphite-engine/src/generic/BinTree_i.cpp
deleted file mode 100644
index 5929bf0bab1..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/BinTree_i.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: BinTree_i.cpp
-Responsibility: Darrell Zook
-Last reviewed: 9/8/99
-
-Description:
- This file provides implementations of binary tree class(es).
- It is used as an #include file in any file which derives from one of the classes.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef BINTREE_I_CPP_INCLUDED
-#define BINTREE_I_CPP_INCLUDED
-
-#include "BinTree.h"
-////#include <algorithm>
-////#include "GrPlatform.h"
-#include "GrCommon.h"
-
-
-//using namespace gr;
-
-/***********************************************************************************************
- BalTreeBase<Obj, Key> methods
-***********************************************************************************************/
-
-/*----------------------------------------------------------------------------------------------
- Constructor.
- This calls Insert to add this node to the tree in the correct (sorted) position.
-
- Arguments:
- [in] ppobjRoot -> The address of the pointer to the root node of the tree.
- [in] key -> References the key of the node to insert.
-----------------------------------------------------------------------------------------------*/
-template<typename Obj, typename Key>
- BalTreeBase<Obj, Key>::BalTreeBase(Obj ** ppobjRoot, const Key & key)
-{
- AssertPtr(ppobjRoot);
- AssertPtrN(*ppobjRoot);
-
- m_rgpobj[0] = NULL;
- m_rgpobj[1] = NULL;
- m_dht = 0;
-
- Insert(ppobjRoot, key);
-}
-
-/*----------------------------------------------------------------------------------------------
- This method finds a node with the given key within the tree. If the key is not found in
- the tree, NULL is returned.
-
- Arguments:
- [in] pobjRoot -> Points to the root node of the tree.
- [in] key -> References the key of the node to search for.
-----------------------------------------------------------------------------------------------*/
-template<typename Obj, typename Key>
- Obj * BalTreeBase<Obj, Key>::Find(Obj * pobjRoot, const Key & key)
-{
- AssertPtrN(pobjRoot);
-
- for (Obj * pobj = pobjRoot; pobj; )
- {
- int nT = pobj->CompareKey(key);
- if (0 == nT)
- return pobj;
- pobj = pobj->m_rgpobj[nT > 0];
- }
- return NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- This method inserts a node within the tree, sorting it based on key. It does not allocate
- any memory.
-
- Arguments:
- [in] ppobjRoot -> The address of the pointer to the root node of the tree.
- [in] key -> References the key of the node to insert into the tree.
- Note: "this" is the node that is being inserted into the tree.
-----------------------------------------------------------------------------------------------*/
-template<typename Obj, typename Key>
- void BalTreeBase<Obj, Key>::Insert(Obj ** ppobjRoot, const Key & key)
-{
- AssertPtr(ppobjRoot);
- AssertPtrN(*ppobjRoot);
-
- Assert(m_dht == 0);
- Assert(!m_rgpobj[0]);
- Assert(!m_rgpobj[1]);
-
- Obj * pobjThis = static_cast<Obj *>(this);
-
- // If the tree is empty, set the root of the tree to this and return.
- if (!*ppobjRoot)
- {
- *ppobjRoot = pobjThis;
- return;
- }
-
- Obj ** ppobjRebal = ppobjRoot;
- Obj * pobjCur;
-
- // Place this in the tree. Mark each node indicating which branch we took.
- // Remember the lowest node with non-zero m_dht in ppobjRebal. If we have to do
- // rebalancing, this is where we'll do it.
- for (pobjCur = *ppobjRoot; ; )
- {
- AssertPtr(pobjCur);
-
- int nT = pobjCur->CompareKey(key);
- Assert(nT != 0);
-
- // if nT is positive go right, otherwise go left.
- pobjCur->m_ipobj = nT > 0;
-
- Obj ** ppobjNext = &pobjCur->m_rgpobj[pobjCur->m_ipobj];
- if (!*ppobjNext)
- {
- // Place the node and break.
- *ppobjNext = pobjThis;
- break;
- }
-
- // Remember this location if m_dht is non-zero.
- if ((*ppobjNext)->m_dht != 0)
- ppobjRebal = ppobjNext;
-
- // Move on down.
- pobjCur = *ppobjNext;
- }
-
- // Adjust m_dht from *ppobjRebal to pobjThis.
- for (pobjCur = *ppobjRebal; pobjCur != pobjThis; )
- {
- AssertPtr(pobjCur);
- Assert((unsigned int)pobjCur->m_ipobj < (unsigned int)2);
-
- // Recall that ppobjRebal is the lowest node on the path which has non-zero m_dht.
- Assert(pobjCur->m_dht == 0 || pobjCur == *ppobjRebal);
-
- // If we went left (m_ipobj == 0) we need to subtract one. If we went right
- // (m_ipobj == 1) we need to add one.
- pobjCur->m_dht = (short)(pobjCur->m_dht + (pobjCur->m_ipobj << 1) - 1);
- pobjCur = pobjCur->m_rgpobj[pobjCur->m_ipobj];
- }
-
- if ((unsigned int)((*ppobjRebal)->m_dht + 1) <= (unsigned int)2)
- {
- // No need to rebalance since the new m_dht for *ppobjRebal is within -1 to 1.
- return;
- }
-
- // We need to rebalance.
- Obj * pobjRebal = *ppobjRebal;
- Assert(pobjRebal->m_dht == -2 || pobjRebal->m_dht == 2);
-
- // Get the direction from pobjRebal and the next lower node.
- int ipobj = pobjRebal->m_ipobj;
- Obj * pobjChd = pobjRebal->m_rgpobj[ipobj];
-
- if (pobjChd->m_ipobj == ipobj)
- {
- // We branched the same way at pobjRebal and pobjChd.
- // Do a single rotation: make pobjChd the parent of pobjRebal.
- Assert(pobjChd->m_dht << 1 == pobjRebal->m_dht);
- pobjRebal->m_rgpobj[ipobj] = pobjChd->m_rgpobj[1 - ipobj];
- pobjChd->m_rgpobj[1 - ipobj] = pobjRebal;
- *ppobjRebal = pobjChd;
-
- // Fix the m_dht values.
- pobjChd->m_dht = 0;
- pobjRebal->m_dht = 0;
- return;
- }
-
- // We branched opposite ways at pobjRebal and pobjChd.
- // Do a double rotation.
- Assert(pobjChd->m_ipobj == 1 - ipobj);
- pobjCur = pobjChd->m_rgpobj[1 - ipobj];
- AssertPtr(pobjCur);
-
- // Let (A own[ipobj] B) mean that A->m_rgpobj[ipobj] == B.
- // Currently, (pobjRebal own[ipobj] pobjChd) and (pobjChd own[1 - ipobj] pobjCur).
- // Make (pobjCur own[ipobj] pobjChd) and (pobjCur own[1 - ipobj] pobjRebal).
-
- // Rotate pobjChd and pobjCur.
- Assert(pobjCur == pobjChd->m_rgpobj[1 - ipobj]);
- pobjChd->m_rgpobj[1 - ipobj] = pobjCur->m_rgpobj[ipobj];
- pobjCur->m_rgpobj[ipobj] = pobjChd;
-
- // Rotate pobjRebal and pobjCur.
- Assert(pobjRebal->m_rgpobj[ipobj] == pobjChd);
- pobjRebal->m_rgpobj[ipobj] = pobjCur->m_rgpobj[1 - ipobj];
- pobjCur->m_rgpobj[1 - ipobj] = pobjRebal;
-
- // Fix *ppobjRebal.
- *ppobjRebal = pobjCur;
-
- // Fix the m_dht values. Note that we don't compare with pobjRebal->m_dht since it
- // currently has absolute value 2.
- Assert(pobjChd->m_dht);
- if (pobjCur->m_dht == pobjChd->m_dht)
- {
- pobjRebal->m_dht = 0;
- pobjChd->m_dht = (short)-pobjChd->m_dht;
- }
- else if (pobjCur->m_dht == -pobjChd->m_dht)
- {
- pobjRebal->m_dht = pobjChd->m_dht;
- pobjChd->m_dht = 0;
- }
- else
- {
- pobjRebal->m_dht = 0;
- pobjChd->m_dht = 0;
- }
- pobjCur->m_dht = 0;
-}
-
-#endif // !BINTREE_I_CPP_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/generic/Debug.cpp b/Build/source/libs/graphite-engine/src/generic/Debug.cpp
deleted file mode 100644
index d1f2a67e364..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/Debug.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: Debug.cpp
-Responsibility: Darrell Zook
-Last reviewed: Not yet.
-
-Description:
- This file provides the standard debug error functions.
-----------------------------------------------------------------------------------------------*/
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-//#include "common.h"
-//#include "Main.h"
-#include "GrDebug.h"
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//#include "ModuleEntry.h"
-#include <stdio.h>
-#ifdef _MSC_VER
-#include <crtdbg.h>
-#endif
-
-
-#if 0
-//#ifdef DEBUG
-
-extern HMODULE Win32DllGetModuleHandle();
-
-void WINAPI AssertProcLocal(const char * pszExp, const char * pszFile, int nLine,
- bool fCritical)
-{
- AssertProc(pszExp, pszFile, nLine, fCritical, Win32DllGetModuleHandle());
-}
-
-void WINAPI WarnProcLocal(const char * pszExp, const char * pszFile, int nLine,
- bool fCritical)
-{
- WarnProc(pszExp, pszFile, nLine, fCritical, Win32DllGetModuleHandle());
-}
-
-void WINAPI WarnHrProc(HRESULT hr, const char * pszFile, int nLine, bool fCritical)
-{
- char szBuffer[MAX_PATH + 25];
- sprintf(szBuffer, "HRESULT[0x%08x]--", hr);
- int cch = lstrlen(szBuffer);
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, 0, szBuffer + cch,
- sizeof(szBuffer) - cch, NULL);
- szBuffer[max(lstrlen(szBuffer) - 2, 0)] = 0;
- WarnProcLocal(szBuffer, pszFile, nLine, fCritical);
-}
-
-
-OLECHAR * DebugWatch::WatchNV()
-{
- // JT: we need this, otherwise if dealing with a deleted object or null pointer
- // we may try to call a virtual function where there is no valid VTABLE pointer.
- // In the debugger we can't be sure of not dereferencing a bad pointer.
- if (!::_CrtIsValidPointer(this, isizeof(this), TRUE ))
- return L"A very bad object pointer";
- // We could also be referencing memory that is trashed (e.g., the object has
- // been deleted, or deleted and replaced by something else).
- if (!dynamic_cast<DebugWatch *>(this))
- return L"A bad object pointer";
- return Watch();
-}
-
-void DebugWatch::Output (char *fmt, ...) // LIMITED to 10 pointer-sized arguments
-{
- struct args { void * pv[10]; };
- _CrtDbgReport (_CRT_WARN, NULL, NULL, __FILE__, fmt, *(args*)(&fmt+1));
-}
-
-#endif // DEBUG
diff --git a/Build/source/libs/graphite-engine/src/generic/GenericResource.h b/Build/source/libs/graphite-engine/src/generic/GenericResource.h
deleted file mode 100644
index 119c6317bcd..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/GenericResource.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GenericResource.h
-Responsibility: John Thomson
-Last reviewed:
-
- Resources needed by certain generic components (but must be created in app's or AppCore's
- resource file).
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GenericResource_H
-#define GenericResource_H 1
-// Create suitable resources for these if your app uses StackDumper.
-// For example
-// STRINGTABLE DISCARDABLE
-// BEGIN
-// "A programming error (%s) has been detected in module %s.\n Please report this to the developers", kstidInternalError
-// "Out of memory. To attempt Save, close other apps and click OK. To quit without saving click Cancel", kstidOutOfMemory
-// END
-
-
-// Date qualifier string IDs:
-#define kstidDateQualBefore 24200
-#define kstidDateQualOn 24201
-#define kstidDateQualAbout 24202
-#define kstidDateQualAfter 24203
-#define kstidDateQualAbt 24204
-#define kstidDateQualBC 24205
-#define kstidDateQualAD 24206
-#define kstidDateBlank 24207
-#define kstidDateBlankM 24208
-#define kstidDateBlankD 24209
-
-
-#define kstidInternalError 25900
-#define khcidHelpOutOfMemory 25901
-#define khcidNoHelpAvailable 25902 // default help module when there is no specific one.
-#define kstidOutOfMemory 25903
-#define kstidUndoFrame 25904
-#define kstidRedoFrame 25905
-
-#define kstidFileErrUnknown 25920
-#define kstidFileErrNotFound 25921
-#define kstidFileErrPathNotFound 25922
-#define kstidFileErrTooManyFiles 25923
-#define kstidFileErrAccDenied 25924
-#define kstidFileErrBadHandle 25925
-#define kstidFileErrBadDrive 25926
-#define kstidFileErrWriteProtect 25927
-#define kstidFileErrBadUnit 25928
-#define kstidFileErrNotReady 25929
-#define kstidFileErrSeek 25930
-#define kstidFileErrNotDosDisk 25931
-#define kstidFileErrBadSector 25932
-#define kstidFileErrWriteFault 25933
-#define kstidFileErrReadFault 25934
-#define kstidFileErrGeneral 25935
-#define kstidFileErrSharing 25936
-#define kstidFileErrLock 25937
-#define kstidFileErrEof 25938
-#define kstidFileErrHandleDiskFull 25939
-#define kstidFileErrBadNetPath 25940
-#define kstidFileErrNetworkBusy 25941
-#define kstidFileErrNoDevice 25942
-#define kstidFileErrNoNetAccess 25943
-#define kstidFileErrBadDevice 25944
-#define kstidFileErrBadNetName 25945
-#define kstidFileErrExists 25946
-#define kstidFileErrCantMake 25947
-#define kstidFileErrBadPassword 25948
-#define kstidFileErrNetWriteFault 25949
-#define kstidFileErrDriveLocked 25950
-#define kstidFileErrOpenFailed 25951
-#define kstidFileErrBufOverflow 25952
-#define kstidFileErrDiskFull 25953
-#define kstidFileErrBadName 25954
-#define kstidFileErrNoVolLabel 25955
-#define kstidFileErrAlreadyExists 25956
-
-#endif // !GenericResource_H
diff --git a/Build/source/libs/graphite-engine/src/generic/HashMap.h b/Build/source/libs/graphite-engine/src/generic/HashMap.h
deleted file mode 100644
index dc2de9d0af7..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/HashMap.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: HashMap.h
-Responsibility: Steve McConnel
-Last reviewed: Not yet.
-
-Description:
- This provides a set of template collection classes to replace std::map. Their primary
- reason to exist is to allow explicit checking for internal memory allocation failures.
-----------------------------------------------------------------------------------------------*/
-#pragma once
-#ifndef HASHMAP_H_INCLUDED
-#define HASHMAP_H_INCLUDED
-//:End Ignore
-
-/*----------------------------------------------------------------------------------------------
- Functor class for computing a hash value from an arbitrary object.
-
- Hungarian: hsho
-----------------------------------------------------------------------------------------------*/
-class HashObj
-{
-public:
- int operator () (void * pKey, int cbKey);
-};
-
-/*----------------------------------------------------------------------------------------------
- Functor class for comparing two arbitrary objects (of the same class) for equality.
-
- Hungarian: eqlo
-----------------------------------------------------------------------------------------------*/
-class EqlObj
-{
-public:
- bool operator () (void * pKey1, void * pKey2, int cbKey);
-};
-
-/*----------------------------------------------------------------------------------------------
- Hash map template collection class whose keys are objects of an arbitrary class.
-
- Hungarian: hm[K][T]
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H = HashObj, class Eq = EqlObj> class HashMap
-{
-public:
- //:> Member classes
-
- /*------------------------------------------------------------------------------------------
- This is the basic data structure for storing one key-value pair in a hash map. In
- order to handle hash collisions, this structure is a member of a linked list.
- Hungarian: hsnd
- ------------------------------------------------------------------------------------------*/
- class HashNode
- {
- public:
- //:> Constructors/destructors/etc.
-
- HashNode(void)
- : m_key(K()), m_value(T()), m_nHash(0), m_ihsndNext(0)
- {
- }
- HashNode(K & key, T & value, int nHash, int ihsndNext = -1)
- : m_key(key), m_value(value), m_nHash(nHash), m_ihsndNext(ihsndNext)
- {
- }
- ~HashNode()
- {
- }
-
- //:> Member variable access
-
- void PutKey(K & key)
- {
- m_key = key;
- }
- K & GetKey()
- {
- return m_key;
- }
- void PutValue(T & value)
- {
- m_value = value;
- }
- T & GetValue()
- {
- return m_value;
- }
- void PutHash(int nHash)
- {
- m_nHash = nHash;
- }
- int GetHash()
- {
- return m_nHash;
- }
- void PutNext(int ihsndNext)
- {
- m_ihsndNext = ihsndNext;
- }
- int GetNext()
- {
- return m_ihsndNext;
- }
-
- /*--------------------------------------------------------------------------------------
- Check whether the given HashNode is being used.
- --------------------------------------------------------------------------------------*/
- bool InUse()
- {
- return m_ihsndNext >= -1;
- }
-
- protected:
- //:> Member variables
-
- K m_key;
- T m_value;
- int m_nHash;
- int m_ihsndNext; // -1 means end of list, -(ihsnd + 3) for free list members
- };
-
- /*------------------------------------------------------------------------------------------
- This provides an iterator for stepping through all HashNodes stored in the hash map.
- This is useful primarily for saving the contents of a hash map to a file.
-
- Hungarian: ithm[K][T]
- ------------------------------------------------------------------------------------------*/
- class iterator
- {
- public:
- // Constructors/destructors/etc.
-
- iterator() : m_phmParent(NULL), m_ihsnd(0)
- {
- }
- iterator(HashMap<K,T,H,Eq> * phm, int ihsnd) : m_phmParent(phm), m_ihsnd(ihsnd)
- {
- }
- iterator(const iterator & v) : m_phmParent(v.m_phmParent), m_ihsnd(v.m_ihsnd)
- {
- }
- ~iterator()
- {
- }
-
- // Other public methods
-
- iterator & operator = (const iterator & ithm)
- {
- m_phmParent = ithm.m_phmParent;
- m_ihsnd = ithm.m_ihsnd;
- return *this;
- }
- T & operator * (void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- return m_phmParent->m_prghsnd[m_ihsnd].GetValue();
- }
- HashNode * operator -> (void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- return &m_phmParent->m_prghsnd[m_ihsnd];
- }
- iterator & operator ++ (void)
- {
- Assert(m_phmParent);
- ++m_ihsnd;
- // make sure that this new HashNode is actually in use
- while (m_ihsnd < m_phmParent->m_ihsndLim)
- {
- if (m_phmParent->m_prghsnd[m_ihsnd].InUse())
- return *this;
- // skip to the next one and check it
- ++m_ihsnd;
- }
- if (m_ihsnd > m_phmParent->m_ihsndLim)
- m_ihsnd = m_phmParent->m_ihsndLim;
- return *this;
- }
- bool operator == (const iterator & ithm)
- {
- return (m_phmParent == ithm.m_phmParent) && (m_ihsnd == ithm.m_ihsnd);
- }
- bool operator != (const iterator & ithm)
- {
- return (m_phmParent != ithm.m_phmParent) || (m_ihsnd != ithm.m_ihsnd);
- }
- T & GetValue(void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_phmParent->m_prghsnd[m_ihsnd].GetValue();
- }
- K & GetKey(void)
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_phmParent->m_prghsnd[m_ihsnd].GetKey();
- }
- int GetHash()
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_phmParent->m_prghsnd[m_ihsnd].GetHash();
- }
- int GetIndex()
- {
- Assert(m_phmParent);
- Assert(m_phmParent->m_prghsnd);
- Assert(m_ihsnd < m_phmParent->m_ihsndLim);
- Assert(m_phmParent->m_prghsnd[m_ihsnd].InUse());
- return m_ihsnd;
- }
-
- protected:
- //:> Member variables
-
- HashMap<K,T,H,Eq> * m_phmParent;
- int m_ihsnd;
- };
- friend class iterator;
-
- //:> Constructors/destructors/etc.
-
- HashMap();
- ~HashMap();
- HashMap(HashMap<K,T,H,Eq> & hm);
-
- //:> Other public methods
-
- iterator Begin();
- iterator End();
- void Insert(K & key, T & value, bool fOverwrite = false, int * pihsndOut = NULL);
- bool Retrieve(K & key, T * pvalueRet);
- bool Delete(K & key);
- void Clear();
- void CopyTo(HashMap<K,T,H,Eq> & hmKT);
- void CopyTo(HashMap<K,T,H,Eq> * phmKT);
-
- bool GetIndex(K & key, int * pihsndRet);
- bool IndexKey(int ihsnd, K * pkeyRet);
- bool IndexValue(int ihsnd, T * pvalueRet);
-
- int Size();
-
- /*------------------------------------------------------------------------------------------
- The assignment operator allows an entire hashmap to be assigned as the value of another
- hashmap. It throws an error if it runs out of memory.
-
- @return a reference to this hashmap. (That is how the assignment operator is defined!)
-
- @param hm is a reference to the other hashmap.
- ------------------------------------------------------------------------------------------*/
- HashMap<K,T,H,Eq> & operator = (HashMap<K,T,H,Eq> & hm)
- {
- hm.CopyTo(this);
- return *this;
- }
-
- //:Ignore
-#ifdef DEBUG
- int _BucketCount();
- int _EmptyBuckets();
- int _BucketsUsed();
- int _FullestBucket();
- bool AssertValid()
- {
- AssertPtrN(m_prgihsndBuckets);
- Assert(m_prgihsndBuckets || !m_cBuckets);
- Assert(!m_prgihsndBuckets || m_cBuckets);
- AssertArray(m_prgihsndBuckets, m_cBuckets);
- AssertPtrN(m_prghsnd);
- Assert(m_prghsnd || !m_ihsndMax);
- Assert(!m_prghsnd || m_ihsndMax);
- AssertArray(m_prghsnd, m_ihsndMax);
- Assert(0 <= m_ihsndLim && m_ihsndLim <= m_ihsndMax);
- Assert(-1 <= FreeListIdx(m_ihsndFirstFree));
- Assert(FreeListIdx(m_ihsndFirstFree) < m_ihsndLim);
- return true;
- }
-#endif
- //:End Ignore
-
-protected:
- //:> Member variables
-
- int * m_prgihsndBuckets;
- int m_cBuckets;
- HashNode * m_prghsnd;
- int m_ihsndLim;
- int m_ihsndMax;
- int m_ihsndFirstFree; // stores -(ihsnd + 3)
-
- //:> Protected methods
- //:Ignore
-
- /*------------------------------------------------------------------------------------------
- Map between real index and "free list" index. Note that this mapping is bidirectional.
- ------------------------------------------------------------------------------------------*/
- int FreeListIdx(int ihsnd)
- {
- return -(ihsnd + 3);
- }
- //:End Ignore
-};
-
-
-// Local Variables:
-// mode:C++
-// c-file-style:"cellar"
-// tab-width:4
-// End:
-
-#endif /*HASHMAP_H_INCLUDED*/
diff --git a/Build/source/libs/graphite-engine/src/generic/HashMap_i.cpp b/Build/source/libs/graphite-engine/src/generic/HashMap_i.cpp
deleted file mode 100644
index baebe427a4e..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/HashMap_i.cpp
+++ /dev/null
@@ -1,561 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: HashMap_i.cpp
-Responsibility: Steve McConnel
-Last reviewed: Not yet.
-
-Description:
- This file provides the implementations of methods for the HashMap template collection
- classes. It is used as an #include file in any file which explicitly instantiates any
- particular type of HashMap<K,T>, HashMapStrUni<T>, or HashMapChars<T>.
-----------------------------------------------------------------------------------------------*/
-#pragma once
-#ifndef HASHMAP_I_C_INCLUDED
-#define HASHMAP_I_C_INCLUDED
-
-#include "HashMap.h"
-////#include <algorithm>
-////#include "GrPlatform.h"
-#include "GrCommon.h"
-
-/***********************************************************************************************
- Methods
-***********************************************************************************************/
-//:End Ignore
-
-/*----------------------------------------------------------------------------------------------
- Constructor.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- HashMap<K,T,H,Eq>::HashMap()
-{
- m_prgihsndBuckets = NULL;
- m_cBuckets = 0;
- m_prghsnd = NULL;
- m_ihsndLim = 0;
- m_ihsndMax = 0;
- m_ihsndFirstFree = FreeListIdx(-1);
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy constructor. It throws an error if it runs out of memory.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- HashMap<K,T,H,Eq>::HashMap(HashMap<K,T,H,Eq> & hm)
-{
- m_prgihsndBuckets = NULL;
- m_cBuckets= 0;
- m_prghsnd = NULL;
- m_ihsndLim = 0;
- m_ihsndMax = 0;
- m_ihsndFirstFree = FreeListIdx(-1);
- hm.CopyTo(this);
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- HashMap<K,T,H,Eq>::~HashMap()
-{
- Clear();
-}
-
-/*----------------------------------------------------------------------------------------------
- Return an iterator that references the first key and value stored in the HashMap.
- If the hash map is empty, Begin returns the same value as End.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- typename HashMap<K,T,H,Eq>::iterator HashMap<K,T,H,Eq>::Begin()
-{
- AssertObj(this);
- int ihsnd;
- for (ihsnd = 0; ihsnd < m_ihsndLim; ++ihsnd)
- {
- if (m_prghsnd[ihsnd].InUse())
- {
- iterator ithm(this, ihsnd);
- return ithm;
- }
- }
- return End();
-}
-
-/*----------------------------------------------------------------------------------------------
- Return an iterator that marks the end of the set of keys and values stored in the HashMap.
- If the HashMap is empty, End returns the same value as Begin.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- typename HashMap<K,T,H,Eq>::iterator HashMap<K,T,H,Eq>::End()
-{
- AssertObj(this);
- iterator ithm(this, m_ihsndLim);
- return ithm;
-}
-
-/*----------------------------------------------------------------------------------------------
- Add one key and value to the HashMap. Insert potentially invalidates existing iterators
- for this HashMap. An exception is thrown if there are any errors.
-
- @param key Reference to the key object. An internal copy is made of this object.
- @param value Reference to the object associated with the key. An internal copy is
- made of this object.
- @param fOverwrite Optional flag (defaults to false) to allow a value already associated
- with this key to be replaced by this value.
- @param pihsndOut Optional pointer to an integer for returning the internal index where the
- key-value pair is stored.
-
- @exception E_INVALIDARG if fOverwrite is not true and the key already is stored with a value
- in this HashMap.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- void HashMap<K,T,H,Eq>::Insert(K & key, T & value, bool fOverwrite, int * pihsndOut)
-{
- AssertObj(this);
- // Check for initial allocation of memory.
- if (!m_cBuckets)
- {
- int cBuckets = GetPrimeNear(10);
- m_prgihsndBuckets = (int *)malloc(cBuckets * isizeof(int));
- if (!m_prgihsndBuckets)
- ThrowHr(WarnHr(E_OUTOFMEMORY));
- std::fill_n(m_prgihsndBuckets, cBuckets, -1);
- m_cBuckets = cBuckets;
- }
- if (!m_ihsndMax)
- {
- int iMax = 32;
- m_prghsnd = (HashNode *)malloc(iMax * isizeof(HashNode));
- if (!m_prghsnd)
- ThrowHr(WarnHr(E_OUTOFMEMORY));
- std::fill_n(m_prghsnd, iMax, 0);
- m_ihsndLim = 0;
- m_ihsndMax = iMax;
- m_ihsndFirstFree = FreeListIdx(-1);
- }
- // Check whether this key is already used.
- // If it is, store the value if overwriting is allowed, otherwise return an error value.
- H hasher;
- Eq equal;
- int ihsnd;
- int nHash = hasher(&key, isizeof(K));
- int ie = (unsigned)nHash % m_cBuckets;
- for (ihsnd = m_prgihsndBuckets[ie]; ihsnd != -1; ihsnd = m_prghsnd[ihsnd].GetNext())
- {
- if ((nHash == m_prghsnd[ihsnd].GetHash()) &&
- equal(&key, &m_prghsnd[ihsnd].GetKey(), isizeof(K)))
- {
- if (fOverwrite)
- {
- m_prghsnd[ihsnd].PutValue(value);
- if (pihsndOut)
- *pihsndOut = ihsnd;
- AssertObj(this);
- return;
- }
- else
- {
- ThrowHr(WarnHr(E_INVALIDARG));
- }
- }
- }
- // Check whether to increase the number of buckets to redistribute the wealth.
- // Calculate the average depth of hash collection chains.
- // If greater than or equal to two, increase the number of buckets.
- int chsndFree = 0;
- int i;
- for (i = m_ihsndFirstFree; i != FreeListIdx(-1); i = m_prghsnd[FreeListIdx(i)].GetNext())
- ++chsndFree;
- int chsndAvgDepth = (m_ihsndLim - chsndFree) / m_cBuckets;
- if (chsndAvgDepth > 2)
- {
- int cNewBuckets = GetPrimeNear(4 * m_cBuckets);
- if (cNewBuckets && cNewBuckets > m_cBuckets)
- {
- int * pNewBuckets = (int *)realloc(m_prgihsndBuckets, cNewBuckets * isizeof(int));
- if (pNewBuckets)
- {
- std::fill_n(pNewBuckets, cNewBuckets, -1);
- m_cBuckets = cNewBuckets;
- m_prgihsndBuckets = pNewBuckets;
- for (ihsnd = 0; ihsnd < m_ihsndLim; ++ihsnd)
- {
- if (m_prghsnd[ihsnd].InUse())
- {
- ie = (unsigned)m_prghsnd[ihsnd].GetHash() % m_cBuckets;
- m_prghsnd[ihsnd].PutNext(m_prgihsndBuckets[ie]);
- m_prgihsndBuckets[ie] = ihsnd;
- }
- }
- // Recompute the new entry's slot so that it can be stored properly.
- ie = (unsigned)nHash % m_cBuckets;
- }
- }
- }
- if (m_ihsndLim < m_ihsndMax)
- {
- ihsnd = m_ihsndLim;
- ++m_ihsndLim;
- }
- else if (m_ihsndFirstFree != FreeListIdx(-1))
- {
- ihsnd = FreeListIdx(m_ihsndFirstFree);
- m_ihsndFirstFree = m_prghsnd[ihsnd].GetNext();
- }
- else
- {
- int iNewMax = (!m_ihsndMax) ? 32 : 2 * m_ihsndMax;
- HashNode * pNewNodes = (HashNode *)realloc(m_prghsnd, iNewMax * isizeof(HashNode));
- if (!pNewNodes && iNewMax > 32)
- {
- iNewMax = m_ihsndMax + (m_ihsndMax / 2);
- pNewNodes = (HashNode *)realloc(m_prghsnd, iNewMax * isizeof(HashNode));
- if (!pNewNodes)
- ThrowHr(WarnHr(E_OUTOFMEMORY));
- }
- m_prghsnd = pNewNodes;
- m_ihsndMax = iNewMax;
- Assert(m_ihsndLim < m_ihsndMax);
- ihsnd = m_ihsndLim;
- ++m_ihsndLim;
- }
- // Call constructor on previously allocated memory.
- new((void *)&m_prghsnd[ihsnd]) HashNode(key, value, nHash, m_prgihsndBuckets[ie]);
- m_prgihsndBuckets[ie] = ihsnd;
- if (pihsndOut)
- *pihsndOut = ihsnd;
- AssertObj(this);
-}
-
-/*----------------------------------------------------------------------------------------------
- Search the HashMap for the given key, and return true if the key is found or false if the
- key is not found. If the key is found and the given pointer is not NULL, copy the
- associated value to that memory location.
-
- @param key Reference to a key object.
- @param pvalueRet Pointer to an empty object for storing a copy of the value associated with
- the key, if one exists.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- bool HashMap<K,T,H,Eq>::Retrieve(K & key, T * pvalueRet)
-{
- AssertObj(this);
- if (!m_prgihsndBuckets)
- return false;
- H hasher;
- Eq equal;
- int nHash = hasher(&key, isizeof(K));
- int ie = (unsigned)nHash % m_cBuckets;
- int ihsnd;
- for (ihsnd = m_prgihsndBuckets[ie]; ihsnd != -1; ihsnd = m_prghsnd[ihsnd].GetNext())
- {
- if ((nHash == m_prghsnd[ihsnd].GetHash()) &&
- equal(&key, &m_prghsnd[ihsnd].GetKey(), isizeof(K)))
- {
- if (pvalueRet)
- *pvalueRet = m_prghsnd[ihsnd].GetValue();
- return true;
- }
- }
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Remove the element with the given key from the stored HashMap. This potentially
- invalidates existing iterators for this HashMap. If the key is not found in the
- HashMap, then nothing is deleted.
-
- @param key Reference to a key object.
-
- @return True if the key is found, and something is actually deleted; otherwise, false.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- bool HashMap<K,T,H,Eq>::Delete(K & key)
-{
- AssertObj(this);
- if (!m_prgihsndBuckets)
- return false;
- H hasher;
- Eq equal;
- int nHash = hasher(&key, isizeof(K));
- int ie = (unsigned)nHash % m_cBuckets;
- int ihsnd;
- int ihsndPrev = -1;
- for (ihsnd = m_prgihsndBuckets[ie]; ihsnd != -1; ihsnd = m_prghsnd[ihsnd].GetNext())
- {
- if ((nHash == m_prghsnd[ihsnd].GetHash()) &&
- equal(&key, &m_prghsnd[ihsnd].GetKey(), isizeof(K)))
- {
- if (ihsndPrev == -1)
- m_prgihsndBuckets[ie] = m_prghsnd[ihsnd].GetNext();
- else
- m_prghsnd[ihsndPrev].PutNext(m_prghsnd[ihsnd].GetNext());
- m_prghsnd[ihsnd].~HashNode(); // Ensure member destructors are called.
- memset(&m_prghsnd[ihsnd], 0, isizeof(HashNode));
- m_prghsnd[ihsnd].PutNext(m_ihsndFirstFree);
- m_ihsndFirstFree = FreeListIdx(ihsnd);
- AssertObj(this);
- return true;
- }
- ihsndPrev = ihsnd;
- }
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Free all the memory used by the HashMap. When done, only the minimum amount of
- bookkeeping memory is still taking up space, and any internal pointers all been set
- to NULL. The appropriate destructor is called for all key and value objects stored
- in the HashMap before the memory space is freed.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- void HashMap<K,T,H,Eq>::Clear()
-{
- AssertObj(this);
- if (!m_prgihsndBuckets)
- return;
- int ihsnd;
- for (ihsnd = 0; ihsnd < m_ihsndLim; ++ihsnd)
- {
- if (m_prghsnd[ihsnd].InUse())
- m_prghsnd[ihsnd].~HashNode(); // Ensure member destructors are called.
- }
- free(m_prgihsndBuckets);
- free(m_prghsnd);
- m_prgihsndBuckets = NULL;
- m_cBuckets = 0;
- m_prghsnd = NULL;
- m_ihsndLim = 0;
- m_ihsndMax = 0;
- m_ihsndFirstFree = FreeListIdx(-1);
- AssertObj(this);
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy the content of one HashMap to another. An exception is thrown if there are any errors.
-
- @param hmKT Reference to the other HashMap.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- void HashMap<K,T,H,Eq>::CopyTo(HashMap<K,T,H,Eq> & hmKT)
-{
- AssertObj(this);
- AssertObj(&hmKT);
- hmKT.Clear();
- iterator itmm;
- for (itmm = Begin(); itmm != End(); ++itmm)
- hmKT.Insert(itmm->GetKey(), itmm->GetValue());
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy the content of one HashMap to another. An exception is thrown if there are any errors.
-
- @param phmKT Pointer to the other HashMap.
-
- @exception E_POINTER if phmKT is NULL.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- void HashMap<K,T,H,Eq>::CopyTo(HashMap<K,T,H,Eq> * phmKT)
-{
- if (!phmKT)
- ThrowHr(WarnHr(E_POINTER));
- CopyTo(*phmKT);
-}
-
-/*----------------------------------------------------------------------------------------------
- If the given key is found in the HashMap, return true, and if the provided index pointer
- is not NULL, also store the internal index value in the indicated memory location.
- If the given key is NOT found in the HashMap, return false and ignore the provided index
- pointer.
-
- @param key Reference to a key object.
- @param pihsndRet Pointer to an integer for returning the internal index where the
- key-value pair is stored.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- bool HashMap<K,T,H,Eq>::GetIndex(K & key, int * pihsndRet)
-{
- AssertObj(this);
- if (!m_prgihsndBuckets)
- return false;
- H hasher;
- Eq equal;
- int nHash = hasher(&key, isizeof(K));
- int ie = (unsigned)nHash % m_cBuckets;
- int ihsnd;
- for (ihsnd = m_prgihsndBuckets[ie]; ihsnd != -1; ihsnd = m_prghsnd[ihsnd].GetNext())
- {
- if ((nHash == m_prghsnd[ihsnd].GetHash()) &&
- equal(&key, &m_prghsnd[ihsnd].GetKey(), isizeof(K)))
- {
- if (pihsndRet)
- *pihsndRet = ihsnd;
- return true;
- }
- }
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- If the given internal HashMap index is valid, return true, and if the provided pointer to a
- key object is not NULL, also copy the indexed key to the indicated memory location.
- If the given internal index is NOT valid, return false, and ignore the provided key
- object pointer.
-
- @param ihsnd Internal index value returned earlier by GetIndex or Insert.
- @param pkeyRet Pointer to an empty key object for storing a copy of the key found at the
- indexed location.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- bool HashMap<K,T,H,Eq>::IndexKey(int ihsnd, K * pkeyRet)
-{
- AssertObj(this);
- if ((ihsnd < 0) || (ihsnd >= m_ihsndLim))
- return false;
- if (m_prghsnd[ihsnd].InUse())
- {
- if (pkeyRet)
- *pkeyRet = m_prghsnd[ihsnd].GetKey();
- return true;
- }
- else
- {
- return false;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- If the given internal HashMap index is valid, return true, and if the provided pointer to an
- object is not NULL, also copy the indexed value to the indicated memory location.
- If the given internal index is NOT valid, return false, and ignore the provided
- object pointer.
-
- @param ihsnd Internal index value returned earlier by GetIndex or Insert.
- @param pvalueRet Pointer to an empty object for storing a copy of the value found at the
- indexed location.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- bool HashMap<K,T,H,Eq>::IndexValue(int ihsnd, T * pvalueRet)
-{
- AssertObj(this);
- if (ihsnd < 0 || ihsnd >= m_ihsndLim)
- return false;
- if (m_prghsnd[ihsnd].InUse())
- {
- if (pvalueRet)
- *pvalueRet = m_prghsnd[ihsnd].GetValue();
- return true;
- }
- else
- {
- return false;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of items (key-value pairs) stored in the HashMap.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- int HashMap<K,T,H,Eq>::Size()
-{
- AssertObj(this);
- if (!m_prgihsndBuckets)
- return 0;
- int chsndFree = 0;
- int ihsnd;
- for (ihsnd = m_ihsndFirstFree;
- ihsnd != FreeListIdx(-1);
- ihsnd = m_prghsnd[FreeListIdx(ihsnd)].GetNext())
- {
- ++chsndFree;
- }
- return m_ihsndLim - chsndFree;
-}
-
-//:Ignore
-#ifdef DEBUG
-/*----------------------------------------------------------------------------------------------
- Return the number of buckets (hash slots) currently allocated for the hash map. This is
- useful only for debugging the hash map mechanism itself.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- int HashMap<K,T,H,Eq>::_BucketCount()
-{
- AssertObj(this);
- return m_cBuckets;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of buckets (hash slots) that do not point to a list of HashNode objects.
- This is useful only for debugging the hash map mechanism itself.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- int HashMap<K,T,H,Eq>::_EmptyBuckets()
-{
- AssertObj(this);
- int ceUnused = 0;
- int ie;
- for (ie = 0; ie < m_cBuckets; ++ie)
- {
- if (m_prgihsndBuckets[ie] == -1)
- ++ceUnused;
- }
- return ceUnused;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of buckets (hash slots) that currently point to a list of HashNode
- objects in the hash map. This is useful only for debugging the hash map mechanism itself.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- int HashMap<K,T,H,Eq>::_BucketsUsed()
-{
- AssertObj(this);
- int ceUsed = 0;
- int ie;
- for (ie = 0; ie < m_cBuckets; ++ie)
- {
- if (m_prgihsndBuckets[ie] != -1)
- ++ceUsed;
- }
- return ceUsed;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the length of the longest list of HashNode objects stored in any bucket (hash slot)
- of the hash map. This is useful only for debugging the hash map mechanism itself.
-----------------------------------------------------------------------------------------------*/
-template<class K, class T, class H, class Eq>
- int HashMap<K,T,H,Eq>::_FullestBucket()
-{
- AssertObj(this);
- int chsndMax = 0;
- int chsnd;
- int ie;
- int ihsnd;
- for (ie = 0; ie < m_cBuckets; ++ie)
- {
- chsnd = 0;
- for (ihsnd = m_prgihsndBuckets[ie]; ihsnd != -1; ihsnd = m_prghsnd[ihsnd].GetNext())
- ++chsnd;
- if (chsndMax < chsnd)
- chsndMax = chsnd;
- }
- return chsndMax;
-}
-#endif
-//:End Ignore
-
-
-
-// Local Variables:
-// mode:C++
-// c-file-style:"cellar"
-// tab-width:4
-// End:
-
-#endif /*HASHMAP_I_C_INCLUDED*/
diff --git a/Build/source/libs/graphite-engine/src/generic/Makefile.am b/Build/source/libs/graphite-engine/src/generic/Makefile.am
deleted file mode 100644
index ec60b09be3a..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-genericdir = $(top_srcdir)/src/generic
-
-libgraphite_la_SOURCES += $(genericdir)/Debug.cpp
-libgraphite_la_SOURCES += $(genericdir)/Util.cpp
-
-EXTRA_DIST += $(genericdir)/*.h
-EXTRA_DIST += $(genericdir)/BinTree_i.cpp
-EXTRA_DIST += $(genericdir)/HashMap_i.cpp
diff --git a/Build/source/libs/graphite-engine/src/generic/Util.cpp b/Build/source/libs/graphite-engine/src/generic/Util.cpp
deleted file mode 100644
index aabd6563d3e..00000000000
--- a/Build/source/libs/graphite-engine/src/generic/Util.cpp
+++ /dev/null
@@ -1,261 +0,0 @@
-
-#include "GrCommon.h"
-#include "GrDebug.h"
-
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- Swap two blocks of size cb starting at pv1 and pv2. Doesn't handle overlapping blocks.
-----------------------------------------------------------------------------------------------*/
-void SwapBytes(void * pv1, void * pv2, int cb)
-{
- Assert((byte *)pv1 + cb <= (byte *)pv2 || (byte *)pv2 + cb <= (byte *)pv1);
- AssertPtrSize(pv1, cb);
- AssertPtrSize(pv2, cb);
-
-#ifdef NO_ASM
-
- byte *pb1 = (byte *)pv1;
- byte *pb2 = (byte *)pv2;
- byte b;
-
- while (--cb >= 0)
- {
- b = *pb1;
- *pb1++ = *pb2;
- *pb2++ = b;
- }
-
-#else // !NO_ASM
-
- __asm
- {
- // edi -> memory to swap, first pointer
- // esi -> memory to swap, second pointer
-
- mov edi,pv1
- mov esi,pv2
-
- mov ecx,cb
- shr ecx,2
- jz LBytes
-
-LIntLoop:
- mov eax,[edi]
- mov ebx,[esi]
- mov [edi],ebx
- mov [esi],eax
-
- add edi,4
- add esi,4
- dec ecx
- jnz LIntLoop;
-
-LBytes:
- mov ecx,cb
- and ecx,3
- jz LDone
-
-LByteLoop:
- mov al,[edi]
- mov bl,[esi]
- mov [edi],bl
- mov [esi],al
- inc edi
- inc esi
- dec ecx
- jnz LByteLoop
-
-LDone:
- }
-
-#endif //!NO_ASM
-}
-
-/*----------------------------------------------------------------------------------------------
- Fills a block of memory with the given short value.
-----------------------------------------------------------------------------------------------*/
-void FillShorts(void * pv, short sn, int csn)
-{
- AssertPtrSize(pv, csn * isizeof(short));
-
-#ifdef NO_ASM
-
- short * psn = (short *)pv;
- short * psnLim = psn + csn;
-
- while (psn < psnLim)
- *psn++ = sn;
-
-#else // !NO_ASM
-
- __asm
- {
- // Setup the registers for using REP STOS instruction to set memory.
- // NOTE: Alignment does not effect the speed of STOS.
- //
- // edi -> memory to set
- // eax = value to store in destination
- // direction flag is clear for auto-increment
-
- mov edi,pv
- mov ax,sn
- mov ecx,csn
-
- mov edx,ecx
- and edx,1
- jz LInts
-
- // set 1 short
- stosw
-
-LInts:
- shr ecx,1
- jz LDone
-
- mov ebx,eax
- shl eax,16
- mov ax,bx
-
- rep stosd
-LDone:
- }
-
-#endif //!NO_ASM
-}
-
-/***********************************************************************************************
- Integer utilities.
-***********************************************************************************************/
-
-/*
- * table of powers of 2, and largest prime smaller than each power of 2
- * n 2**n prime diff
- * --- ---------- ---------- ----
- * 2: 4 3 ( -1)
- * 3: 8 7 ( -1)
- * 4: 16 13 ( -3)
- * 5: 32 31 ( -1)
- * 6: 64 61 ( -3)
- * 7: 128 127 ( -1)
- * 8: 256 251 ( -5)
- * 9: 512 509 ( -3)
- * 10: 1024 1021 ( -3)
- * 11: 2048 2039 ( -9)
- * 12: 4096 4093 ( -3)
- * 13: 8192 8191 ( -1)
- * 14: 16384 16381 ( -3)
- * 15: 32768 32749 (-19)
- * 16: 65536 65521 (-15)
- * 17: 131072 131071 ( -1)
- * 18: 262144 262139 ( -5)
- * 19: 524288 524287 ( -1)
- * 20: 1048576 1048573 ( -3)
- * 21: 2097152 2097143 ( -9)
- * 22: 4194304 4194301 ( -3)
- * 23: 8388608 8388593 (-15)
- * 24: 16777216 16777213 ( -3)
- * 25: 33554432 33554393 (-39)
- * 26: 67108864 67108859 ( -5)
- * 27: 134217728 134217689 (-39)
- * 28: 268435456 268435399 (-57)
- * 29: 536870912 536870909 ( -3)
- * 30: 1073741824 1073741789 (-35)
- * 31: 2147483648 2147483647 ( -1)
- * 32: 4294967296 4294967291 ( -5)
- */
-const static unsigned int g_rguPrimes[] = {
- 3, 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071,
- 262139, 524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393, 67108859,
- 134217689, 268435399, 536870909, 1073741789, 2147483647, 4294967291U
-};
-
-
-/*----------------------------------------------------------------------------------------------
- Returns the prime in g_rguPrimes that is closest to u.
-----------------------------------------------------------------------------------------------*/
-unsigned int GetPrimeNear(unsigned int u)
-{
- int cu = isizeof(g_rguPrimes) / isizeof(unsigned int);
- int iuMin;
- int iuLim;
- int iu;
-
- for (iuMin = 0, iuLim = cu; iuMin < iuLim; )
- {
- iu = (iuMin + iuLim) / 2;
- if (u > g_rguPrimes[iu])
- iuMin = iu + 1;
- else
- iuLim = iu;
- }
- Assert(iuMin == cu || iuMin < cu && u <= g_rguPrimes[iuMin]);
- Assert(iuMin == 0 || iuMin > 0 && u > g_rguPrimes[iuMin - 1]);
-
- if (!iuMin)
- return g_rguPrimes[0];
- if (iuMin == cu)
- return g_rguPrimes[cu - 1];
- if (g_rguPrimes[iuMin] - u < u - g_rguPrimes[iuMin - 1])
- return g_rguPrimes[iuMin];
- return g_rguPrimes[iuMin - 1];
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Returns the prime in g_rguPrimes that is larger than u or is the largest in the list.
-----------------------------------------------------------------------------------------------*/
-unsigned int GetLargerPrime(unsigned int u)
-{
- int cu = isizeof(g_rguPrimes) / isizeof(unsigned int);
- int iuMin;
- int iuLim;
- int iu;
-
- for (iuMin = 0, iuLim = cu; iuMin < iuLim; )
- {
- iu = (iuMin + iuLim) / 2;
- if (u >= g_rguPrimes[iu])
- iuMin = iu + 1;
- else
- iuLim = iu;
- }
- Assert(iuMin == cu || iuMin < cu && u < g_rguPrimes[iuMin]);
- Assert(iuMin == 0 || iuMin > 0 && u >= g_rguPrimes[iuMin - 1]);
-
- if (iuMin == cu)
- return g_rguPrimes[cu - 1];
- return g_rguPrimes[iuMin];
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Returns the prime in g_rguPrimes that is smaller than u or is the smallest in the list.
-----------------------------------------------------------------------------------------------*/
-unsigned int GetSmallerPrime(unsigned int u)
-{
- int cu = isizeof(g_rguPrimes) / isizeof(unsigned int);
- int iuMin;
- int iuLim;
- int iu;
-
- for (iuMin = 0, iuLim = cu; iuMin < iuLim; )
- {
- iu = (iuMin + iuLim) / 2;
- if (u > g_rguPrimes[iu])
- iuMin = iu + 1;
- else
- iuLim = iu;
- }
- Assert(iuMin == cu || iuMin < cu && u <= g_rguPrimes[iuMin]);
- Assert(iuMin == 0 || iuMin > 0 && u > g_rguPrimes[iuMin - 1]);
-
- if (!iuMin)
- return g_rguPrimes[0];
- return g_rguPrimes[iuMin - 1];
-}
-
-}
-
diff --git a/Build/source/libs/graphite-engine/src/painter/Makefile.am b/Build/source/libs/graphite-engine/src/painter/Makefile.am
deleted file mode 100644
index 497d31bd018..00000000000
--- a/Build/source/libs/graphite-engine/src/painter/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-painterdir = $(top_srcdir)/src/painter
-
-libgraphite_la_SOURCES += $(painterdir)/SegmentPainter.cpp
-
-#EXTRA_DIST += $(painterdir)/*.h
diff --git a/Build/source/libs/graphite-engine/src/painter/SegmentPainter.cpp b/Build/source/libs/graphite-engine/src/painter/SegmentPainter.cpp
deleted file mode 100644
index ee92cbe8caf..00000000000
--- a/Build/source/libs/graphite-engine/src/painter/SegmentPainter.cpp
+++ /dev/null
@@ -1,2986 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: SegmentPainter.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements the object that handles drawing, mouse clicks, and other UI-related behavior
- for a Graphite segment.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-#include <math.h>
-#ifndef _WIN32
-#include <stdlib.h>
-#endif
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-namespace
-{
-
-static bool g_fDrawing;
-
-} // namespace
-
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Constructors.
-----------------------------------------------------------------------------------------------*/
-//SegmentPainter::SegmentPainter(Segment * pseg)
-//{
-// m_pseg = pseg;
-//
-// m_xsOrigin = 0;
-// m_ysOrigin = 0;
-// m_xdPosition = 0;
-// m_ydPosition = 0;
-// m_xFactor = 1.0;
-// m_yFactor = 1.0;
-//}
-
-SegmentPainter::SegmentPainter(Segment * pseg, float xsOrigin, float ysOrigin)
-{
- m_pseg = pseg;
-
- m_xsOrigin = xsOrigin;
- m_ysOrigin = ysOrigin;
- m_xdPosition = m_xsOrigin;
- m_ydPosition = m_ysOrigin;
- m_xFactor = 1.0;
- m_yFactor = 1.0;
-
- //m_xsOriginInt = GrEngine::RoundFloat(xsOrigin);
- //m_xdPositionInt = m_xsOriginInt;
- //m_xFactor64 = 64;
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-SegmentPainter::~SegmentPainter()
-{
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialization.
-
- The correspondence with the old rectangle approach is:
- m_xsOrigin = sourceRect.left;
- m_ysOrigin = sourceRect.top;
- m_xdPosition = destRect.left;
- m_ydPosition = destRect.top;
-
- m_xFactor = (destRect.right - destRect.left) / (sourceRect.right - sourceRect.left);
- m_yFactor = (destRect.top - destRect.bottom) / (sourceRect.top - sourceRect.bottom);
-
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::setOrigin(float xsOrigin, float ysOrigin)
-{
- m_xsOrigin = xsOrigin;
- m_ysOrigin = ysOrigin;
-
- //m_xsOriginInt = GrEngine::RoundFloat(xsOrigin);
-}
-
-void SegmentPainter::setPosition(float xdPosition, float ydPosition)
-{
- m_xdPosition = xdPosition;
- m_ydPosition = ydPosition;
-
- //m_xdPositionInt = GrEngine::RoundFloat(xdPosition);
-}
-
-void SegmentPainter::setScalingFactors(float xFactor, float yFactor)
-{
- m_xFactor = xFactor;
- m_yFactor = yFactor;
-
- //int temp = GrEngine::RoundFloat(xFactor);
- //m_xFactor64 = GrEngine::RoundFloat(xFactor * 64);
-}
-
-
-//:>********************************************************************************************
-//:> SegmentPainter interface methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Draw the text of the segment at the specified point in the graphics context.
- This method must be implemented by a concrete subclass for painters that really need
- to paint.
-----------------------------------------------------------------------------------------------*/
-//void SegmentPainter::paint()
-//{
-// Assert(false);
-//}
-
-/*----------------------------------------------------------------------------------------------
- Indicate if the character position is a valid place for an insertion point.
-
- @oaram ich - position to test
- @param pipvr - answer: kipvrOK = IP here is valid;
- kipvrBad = IP here no good;
- kipvrUnknown = this seg can't decide, ask the next
-----------------------------------------------------------------------------------------------*/
-LgIpValidResult SegmentPainter::isValidInsertionPoint(int ichw)
-{
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- int ichwSegOffset = ichw - m_pseg->m_ichwMin;
- if (ichwSegOffset < m_pseg->m_ichwAssocsMin || ichwSegOffset >= m_pseg->m_ichwAssocsLim)
- {
- // If we're pointing at a hard line break character (Unicode 2028), then we know
- // that it's a good insertion point in spite of missing the other conditions.
- utf16 ch;
- m_pseg->m_pgts->fetch(ichw, 1, &ch);
- if (ch != knLineSep)
- return kipvrUnknown; // Definitely in a different segment of the paragraph.
- return kipvrOK;
- }
-
- int isloutLig = m_pseg->m_prgisloutLigature[ichwSegOffset - m_pseg->m_ichwAssocsMin];
- if (isloutLig != kNegInfinity)
- {
- return kipvrOK;
- }
-
- // TODO: do we need to test ALL the associated glyphs? Here we just test the first.
-
- LgIpValidResult ipvrRet;
-
- int isloutBefore = m_pseg->UnderlyingToLogicalSurface(ichw, true);
- int isloutAfter = m_pseg->UnderlyingToLogicalSurface(ichw - 1, false);
- int isloutTest = m_pseg->UnderlyingToLogicalInThisSeg(ichw);
- if (isloutBefore == isloutAfter)
- // If inserting before this character yields the same visible result as
- // inserting after the previous, then this character is invisible, or has
- // been merged with the previous, and it doesn't make sense to put an insertion
- // point here.
- ipvrRet = kipvrBad;
- else if (isloutTest == kNegInfinity || isloutTest == kPosInfinity)
- ipvrRet = kipvrBad; // can't figure it out
- else if (!m_pseg->OutputSlot(isloutTest)->InsertBefore())
- ipvrRet = kipvrBad;
- else if (m_pseg->SameSurfaceGlyphs(ichw - 1, ichw))
- // The insertion point would be between two characters that map to the same
- // set of glyphs. Not a good place.
- ipvrRet = kipvrBad;
- else
- ipvrRet = kipvrOK;
-
- return ipvrRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Answer whether the logical and physical boundaries of the string coincide.
- This method is called by the application to handle writing system boundaries, and by
- other segments in a writing-system chain to handle line-breaks.
-
- @param fBoundaryEnd - asking about the logical end boundary?
- @param fBoundaryRight - asking about the physical right boundary?
- @param pfResult - return value
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::doBoundariesCoincide(bool fBoundaryEnd, bool fBoundaryRight)
-{
- float xsBefore, ysBeforeTop, ysBeforeBottom;
- float xsAfter, ysAfterTop, ysAfterBottom;
- bool fRtlBefore, fRtlAfter;
-
- if (m_pseg->m_cginf == 0)
- {
- // Empty segment.
- return true;
- }
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- if (fBoundaryEnd)
- {
- CalcIP(m_pseg->m_ichwMin + m_pseg->m_dichwLim, true,
- &xsBefore, &ysBeforeTop, &ysBeforeBottom, &fRtlBefore);
- CalcIP(m_pseg->m_ichwMin + m_pseg->m_dichwLim, false,
- &xsAfter, &ysAfterTop, &ysAfterBottom, &fRtlAfter);
- }
- else
- {
- CalcIP(m_pseg->m_ichwMin, true,
- &xsBefore, &ysBeforeTop, &ysBeforeBottom, &fRtlBefore);
- CalcIP(m_pseg->m_ichwMin, false,
- &xsAfter, &ysAfterTop, &ysAfterBottom, &fRtlAfter);
- }
-
- // We allow for rounding errors which might cause differences between the expected
- // and the actual values, hence the test for a difference of <= 1.
- bool fRet;
- if (fBoundaryRight)
- {
- // right edge
- if (fBoundaryEnd) // logical end
- fRet = (!fRtlAfter && fabsf(xsAfter - (m_pseg->m_dxsTotalWidth + m_pseg->m_dxsStretch)) <= 1);
- else // logical start
- fRet = (fRtlBefore && fabsf(xsBefore - (m_pseg->m_dxsTotalWidth + m_pseg->m_dxsStretch)) <= 1);
- }
- else
- {
- // left edge
- if (fBoundaryEnd) // logical end
- fRet = (fRtlAfter && fabsf(xsAfter) <= 1);
- else // logical start
- fRet = (!fRtlBefore && fabsf(xsBefore) <= 1);
- }
-
- return fRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Draw an insertion point at an appropriate position.
-
- @param twx, twy - same origin used to Draw segment
- @param ich - character position; must be valid
- @param fAssocPrev - associated with previous character?
- @param bOn - turning on or off? Caller should alternate, first turning on
- (ignored in this implementation)
- @param dm - draw mode:
- kdmNormal = draw complete insertion pt (I-beam or split cursor);
- kdmPrimary = only draw primary half of split cursor;
- kdmSecondary = only draw secondary half of split cursor
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::drawInsertionPoint(int ichwIP, bool fAssocPrev,
- bool bOn, bool fForceSplit) // LgIPDrawMode dm)
-{
- if (g_fDrawing)
- return;
-
- g_fDrawing = true;
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- CalcOrDrawInsertionPoint(ichwIP,
- fAssocPrev, bOn, fForceSplit,
- NULL, NULL); // passing NULLs here means we want to draw
-
- //RestoreFont(pgg);
-
- g_fDrawing = false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Fill in bounding rectangles for the (possibly 2-part) IP, in destination device coordinates.
- Return flags indicating which of the 2 parts where rendered here.
-
- @param rs,rd - source/destination coordinates, for scaling
- @param ichwIP - insertion point
- @param fAssocPrev - is the IP "leaning" backward?
- @param dm - draw mode:
- kdmNormal = draw complete insertion pt (I-beam or split cursor);
- kdmPrimary = only draw primary half of split cursor;
- kdmSecondary = only draw secondary half of split cursor
- @param prdPrimary - return location of primary selection, in dest coords
- @param prdSecondary - return location of secondary selection, in dest coords
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::positionsOfIP(
- int ichwIP, bool fAssocPrev, bool fForceSplit,
- Rect * prdPrimary, Rect * prdSecondary)
-{
- ChkGrArgPtr(prdPrimary);
- ChkGrArgPtr(prdSecondary);
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- CalcOrDrawInsertionPoint(ichwIP, fAssocPrev, true, fForceSplit,
- prdPrimary, prdSecondary);
-
- //RestoreFont(pgg);
-}
-
-/*----------------------------------------------------------------------------------------------
- Highlight a range of text.
-
- @param ichwAnchor/End - selected range
- @param ydLineTop/Bottom - top/bottom of area to highlight if whole line height;
- includes half of inter-line spacing.
- @param bOn - true if we are turning on (ignored in this implementation)
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::drawSelectionRange(int ichwAnchor, int ichwEnd,
- float ydLineTop, float ydLineBottom, bool bOn)
-{
- if (g_fDrawing)
- return true;
-
- g_fDrawing = true;
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- float xsSegLeft = 0;
- float ysSegTop = 0;
-
- float xdSegRight = ScaleXToDest(m_pseg->m_dxsTotalWidth);
-
- int ichwMinSel = min(ichwAnchor, ichwEnd);
- int ichwLimSel = max(ichwAnchor, ichwEnd);
-
- int ichwMinSeg = max(ichwMinSel, m_pseg->m_ichwMin + m_pseg->m_ichwAssocsMin);
- int ichwLimSeg = min(ichwLimSel, m_pseg->m_ichwMin + m_pseg->m_ichwAssocsLim);
-
- std::vector<Rect> vrs;
- std::vector<bool> vfEntireHt;
-
- bool * prgfAllCompsSelected = new bool[m_pseg->m_dichwLim];
- std::fill_n(prgfAllCompsSelected, m_pseg->m_dichwLim, false);
- CalcPartialLigatures(prgfAllCompsSelected, ichwMinSeg, ichwLimSeg,
- ichwMinSel, ichwLimSel);
-
- // Array to keep track of which glyphs were highlighted.
- int cginf = m_pseg->m_cginf;
- bool * prgfHighlighted = new bool[cginf];
- std::fill_n(prgfHighlighted, cginf, false);
-
- for (int ichwLp = ichwMinSeg; ichwLp < ichwLimSeg; ichwLp++)
- {
- CalcHighlightRect(ichwLp, vrs, vfEntireHt,
- !prgfAllCompsSelected[ichwLp - m_pseg->m_ichwMin], prgfHighlighted, false);
- }
-
- // If all the glyphs of a given cluster were highlighted, highlight the whole cluster
- // as a unit.
- for (int islout = 0; islout < m_pseg->m_cslout; islout++)
- {
- CalcCompleteCluster(islout, vrs, vfEntireHt, prgfHighlighted);
- }
-
- // Convert to destination coordinates; also extend full-line rectangles to the top
- // and bottom of the line height.
- std::vector<Rect> vrd;
- for (size_t irs = 0; irs < vrs.size(); irs++)
- {
- Rect rsTmp = vrs[irs];
- Rect rdTmp;
- if (vfEntireHt[irs])
- {
- rdTmp.top = ydLineTop;
- rdTmp.bottom = ydLineBottom;
- }
- else
- {
- float ydTmp = ScaleYToDest(rsTmp.top + ysSegTop);
- rdTmp.top = min(ydLineBottom, max(ydLineTop, ydTmp));
- ydTmp = ScaleYToDest(rsTmp.bottom + ysSegTop);
- rdTmp.bottom = max(ydLineTop, min(ydLineBottom, ydTmp));
- }
- float xdTmp = ScaleXToDest(rsTmp.left + xsSegLeft);
- rdTmp.left = min(xdSegRight, max(float(0), xdTmp));
- xdTmp = ScaleXToDest(rsTmp.right + xsSegLeft);
- rdTmp.right = max(float(0), min(xdSegRight, xdTmp));
- if (rdTmp.left > rdTmp.right)
- {
- // I think this can happen due to rounding errors.
- float tmp = rdTmp.left;
- rdTmp.left = rdTmp.right;
- rdTmp.right = tmp;
- }
- vrd.push_back(rdTmp);
- }
-
- // Create a list of rectangles with no overlaps, so the selection draws cleanly.
- std::vector<Rect> vrdNoOverlaps;
- size_t irect;
- for (irect = 0; irect < vrd.size(); irect++)
- AddRectWithoutOverlaps(vrdNoOverlaps, vrd[irect]);
-
- AssertNoOverlaps(vrdNoOverlaps);
-
- // Draw the hightlight.
- for (irect = 0; irect < vrdNoOverlaps.size(); irect++)
- {
- Rect rdTmp = vrdNoOverlaps[irect];
- InvertRect(rdTmp.left, rdTmp.top, rdTmp.right, rdTmp.bottom);
- }
-
- delete[] prgfAllCompsSelected;
- delete[] prgfHighlighted;
-
- //RestoreFont(pgg);
-
- g_fDrawing = false;
-
- return (vrdNoOverlaps.size() > 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get a bounding rectangle that will contain the area highlighted by this segment
- when drawing the specified range.
-
- @param ichwAnchor/End - selected range
- @param ydLineTop/Bottom - top/bottom of area to highlight if whole line height;
- includes half of inter-line spacing.
- @param prdBounds - return location of range
- @return - true if the return rectange has a meaningful value
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::positionsOfRange(int ichwAnchor, int ichwEnd,
- float ydLineTop, float ydLineBottom, Rect * prdBounds)
-{
- ChkGrArgPtr(prdBounds);
-
- std::vector<Rect> vrs;
- std::vector<bool> vfEntireHt;
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- int ichwMin = min(ichwAnchor, ichwEnd);
- int ichwLim = max(ichwAnchor, ichwEnd);
-
- for (int ichwLp = ichwMin; ichwLp < ichwLim; ichwLp++)
- {
- CalcHighlightRect(ichwLp, vrs, vfEntireHt, true, NULL, false);
- }
-
- if (vrs.size() == 0)
- {
- return false;
- }
-
- Rect * prsBounds = &(vrs[0]);
- for (size_t irect = 1; irect < vrs.size(); irect++)
- {
- Rect * prs = &(vrs[irect]);
- prsBounds->left = min(prsBounds->left, prs->left);
- prsBounds->right = max(prsBounds->right, prs->right);
- }
-
- prdBounds->top = ydLineTop;
- prdBounds->bottom = ydLineBottom;
- prdBounds->left = ScaleXToDest(prsBounds->left);
- prdBounds->right = ScaleXToDest(prsBounds->right);
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert a click position to a character position.
-
- @param zptdClickPosition - relative to the segment draw origin
- @param pichw - return character clicked before
- @param pfAssocPrev - return true if they clicked on the trailing half of
- the previous char, false if click was on the
- leading half of the following
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::pointToChar(Point zptdClickPosition, int * pichw, bool * pfAssocPrev)
-{
- ChkGrOutPtr(pichw);
- ChkGrOutPtr(pfAssocPrev);
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- bool fRtl = m_pseg->rightToLeft();
-
- if (m_pseg->m_dysAscent < 0 || m_pseg->m_dxsWidth < 0)
- m_pseg->ComputeDimensions();
-
- if (m_pseg->m_dichwLim == 0 || m_pseg->m_cginf == 0)
- {
- *pichw = m_pseg->m_ichwMin;
- *pfAssocPrev = false;
- //RestoreFont(pgg);
- return;
- }
-
- float xsClick = ScaleXToSource(zptdClickPosition.x);
- float ysClick = ScaleYToSource(zptdClickPosition.y);
- ysClick = m_pseg->m_dysAscent - ysClick; // make relative to common base line
-
- float xsTry = xsClick;
- float ysTry = ysClick;
-
- float xysInc = 1.0;
- //res = pgg->LogUnitsFromXPixels(1, &xysInc);
- //if (ResultFailed(res)) xysInc = 20;
- int cTries = 1;
- int nAdjustDir = 0;
-
- while (true)
- {
- float xsGlyphOffset;
- float xsGlyphWidth;
- int iginfLoc = PointToCharAux(xsTry, ysTry, &xsGlyphOffset, &xsGlyphWidth);
-
- bool fClickedAfter;
- int ichwCharClicked;
- if (xsTry < m_pseg->m_prgginf[m_pseg->LeftMostGlyph()].bb().left)
- {
- fClickedAfter = fRtl;
- ichwCharClicked = (fClickedAfter) ?
- m_pseg->m_ichwMin + m_pseg->m_ichwAssocsLim - 1 :
- m_pseg->m_ichwMin + m_pseg->m_ichwAssocsMin;
- }
- else if (xsTry > m_pseg->m_prgginf[m_pseg->RightMostGlyph()].bb().right)
- {
- fClickedAfter = !fRtl;
- ichwCharClicked = (fClickedAfter) ?
- m_pseg->m_ichwMin + m_pseg->m_ichwAssocsLim - 1 :
- m_pseg->m_ichwMin + m_pseg->m_ichwAssocsMin;
- }
- else
- {
- ichwCharClicked = m_pseg->PhysicalSurfaceToUnderlying(iginfLoc,
- xsTry - xsGlyphOffset, m_pseg->m_dysAscent - ysClick,
- xsGlyphWidth, m_pseg->m_dysHeight, &fClickedAfter); // handles ligature components
- }
-
- if (fClickedAfter)
- {
- *pichw = ichwCharClicked + 1;
- while (!GrCharStream::AtUnicodeCharBoundary(m_pseg->GetString(), *pichw))
- *pichw = *pichw + 1;
- *pfAssocPrev = true;
- }
- else
- {
- *pichw = ichwCharClicked;
- *pfAssocPrev = false;
- }
-
- if (*pichw < m_pseg->m_ichwMin + m_pseg->m_ichwAssocsMin)
- {
- //RestoreFont(pgg);
- return;
- }
- else if (*pichw >= m_pseg->m_ichwMin + m_pseg->m_ichwAssocsLim)
- {
- //RestoreFont(pgg);
- return;
- }
-
- //int islout = UnderlyingToLogicalInThisSeg(ichwBase, ichwCharClicked);
- int isloutBefore = m_pseg->UnderlyingToLogicalInThisSeg(*pichw);
- if (isloutBefore == kNegInfinity || isloutBefore == kPosInfinity)
- { }
- else
- {
- Assert(0 <= isloutBefore && isloutBefore < m_pseg->m_cslout);
- if (m_pseg->OutputSlot(isloutBefore)->InsertBefore())
- {
- // Legal insertion point
- //RestoreFont(pgg);
- return;
- }
- }
-
- // Gradually adjust the click position in various directions and try again
- // until we find a legal insertion point.
- switch (nAdjustDir)
- {
- case 0: // Adjust to the left
- case 4:
- xsTry = xsClick - (xysInc * cTries);
- ysTry = ysClick;
- nAdjustDir = 0;
- break;
- case 1: // Adjust to the right
- xsTry = xsClick + (xysInc * cTries);
- ysTry = ysClick;
- break;
- case 2: // Adjust up
- xsTry = xsClick;
- ysTry = ysClick - (xysInc * cTries);
- break;
- case 3: // Adjust down
- xsTry = xsClick;
- ysTry = ysClick + (xysInc * cTries);
- cTries++;
- break;
- default:
- Assert(false);
- nAdjustDir = 0;
- cTries++;
- }
- nAdjustDir++;
-
- if (cTries > 50)
- { // Safety net
- *pichw = 0;
- *pfAssocPrev = false;
- THROW(kresFail);
- }
- else if (cTries > 20)
- xysInc = xysInc * 2;
- }
-
- //RestoreFont(pgg);
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert a click position to a glyph bounding-box position.
-----------------------------------------------------------------------------------------------*/
-int SegmentPainter::PointToCharAux(float xsTry, float ysTry,
- float * pxsGlyphOffset, float * pxsGlyphWidth)
-{
- int iginfLoc = m_pseg->GlyphHit(xsTry, ysTry);
-
- GlyphInfo * pginf = m_pseg->m_prgginf + iginfLoc;
- *pxsGlyphOffset = pginf->bb().left;
- *pxsGlyphWidth = pginf->bb().right - *pxsGlyphOffset;
-
- return iginfLoc;
-}
-
-// Review: may need a way to do this and subsequent methods with one result per method?
-/*----------------------------------------------------------------------------------------------
- Returns a value what logical position an arrow key should move the IP to.
-
- @param ichwIP - initial position
- @param pfAssocPrev - is the IP "leaning" backwards? input and output
- @param fRight - direction of desired movement (physical or logical?)
- @param pfInThisSeg - initially true if ichwIP is in the current segment;
- return value is true if there is a legitimate output
-----------------------------------------------------------------------------------------------*/
-int SegmentPainter::arrowKeyPosition(int ichwIP, bool * pfAssocPrev,
- bool fRight, bool * pfInThisSeg)
-//GrResult SegmentPainter::arrowKeyPosition(
-// int * pichwIP, bool * pfAssocPrev,
-// bool fRight, bool fMovingIn,
-// bool * pfResult)
-{
- ChkGrArgPtr(pfAssocPrev);
- //ChkGrOutPtr(pfInThisSeg);
-
- bool fMovingIn = !*pfInThisSeg;
- int ichwTmp = ichwIP;
- bool fResult;
- ArrowKeyPositionAux(&ichwTmp, pfAssocPrev, fRight, fMovingIn, false, false, &fResult);
- *pfInThisSeg = fResult;
- return ichwTmp;
-
- //return ArrowKeyPositionAux(pichwIP, pfAssocPrev,
- // fRight, fMovingIn, false, false, pfResult);
-}
-
-/*----------------------------------------------------------------------------------------------
- Indicate what logical position a shift-arrow-key combination should move the
- end of the selection to.
-
- @param pichw - initial endpoint and also adjusted result
- @param fAssocPrevMatch - true if we need a certain orientation for the result;
- should be false when *pichw = 0 and we are moving within the
- same segment
- @param fAssocPrevNeeded - association of the end-point, ie, true if it follows the anchor
- @param ichAnchor - -1 if anchor is in a different segment
- @param fRight - direction of desired movement
- @param fMovingIn - true if we are moving in to this segment;
- if so, initial pichw meaningless
- @param pfRet - if false try next seg or string
-----------------------------------------------------------------------------------------------*/
-int SegmentPainter::extendSelectionPosition(int ichwEnd, bool fAssocPrevMatch, bool fAssocPrevNeeded,
- int ichwAnchor, bool fRight, bool * pfInThisSeg)
-//GrResult SegmentPainter::extendSelectionPosition(
-// int * pichw, bool fAssocPrevMatch, bool fAssocPrevNeeded, int ichwAnchor,
-// bool fRight, bool fMovingIn,
-// bool* pfRet)
-{
- //ChkGrArgPtr(pichw);
- //ChkGrOutPtr(pfRet);
-
- // Make the same adjustment as for an insertion point.
- bool fAssocPrevCopy = fAssocPrevMatch;
- bool fMovingIn = !*pfInThisSeg;
- int ichwOld = ichwEnd;
- int ichwNew = ichwEnd;
- bool fResult;
- ArrowKeyPositionAux(&ichwNew, &fAssocPrevCopy,
- fRight, fMovingIn, fAssocPrevMatch, fAssocPrevNeeded, &fResult);
- *pfInThisSeg = fResult;
-
- //int ichwNew = *pichw;
- //bool fAssocPrevCopy = fAssocPrevMatch;
- //// TODO: adjust fAssocPrevCopy based on assoc-prev value of IP
- //*pfRet = false;
- //int ichwOld = *pichw;
- //GrResult res = ArrowKeyPositionAux(&ichwNew, &fAssocPrevCopy,
- // fRight, fMovingIn,
- // fAssocPrevMatch, fAssocPrevNeeded,
- // pfRet);
-
-// if (*pfRet && ichwNew == *pichw)
-// {
-// // The selection wasn't actually moved, just switched the direction it leans.
-// // Try one more time.
-// res = ArrowKeyPositionAux(&ichwNew, &fAssocPrevCopy,
-// fRight, fMovingIn,
-// (ichwAnchor != *pichw && fAssocPrevNeeded), fAssocPrevNeeded,
-// pfRet);
-// }
- if (ichwAnchor != -1 && fResult &&
- ((ichwNew < ichwAnchor && ichwAnchor < ichwOld) ||
- (ichwOld < ichwAnchor && ichwAnchor < ichwNew)))
- {
- // Don't switch directions in one operation--force to an insertion point.
- ichwNew = ichwAnchor;
- }
- return ichwNew;
- //*pichw = ichwNew;
- //ReturnResult(res);
-}
-
-/*----------------------------------------------------------------------------------------------
- Handle arrow key movement for both plain and shifted arrows.
-
- @param pichw - initial endpoint and also adjusted result
- @param pfAssocPrev - association of the end-point, ie, true if it follows the anchor
- @param fRight - direction of desired movement
- @param fMovingIn - true if we are moving in to this segment;
- if so, initial pichw meaningless
- @param fAssocPrevMatch - true if the direction of the result should
- match the requested orientation, to avoid flipping around and
- infinite loops
- @param fAssocPrevNeeded - what is needed for the result, if fAssocPrevMatch == true
- @param pfRet - if false try next segment or string
-----------------------------------------------------------------------------------------------*/
-GrResult SegmentPainter::ArrowKeyPositionAux(
- int * pichwIP, bool * pfAssocPrev,
- bool fRight, bool fMovingIn,
- bool fAssocPrevMatch, bool fAssocPrevNeeded,
- bool * pfResult)
-{
- ChkGrArgPtr(pfResult);
-
- //bool fAssocPrevTmp = *pfAssocPrev;
-
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- int nNextOrPrevSeg;
- if (!fMovingIn)
- {
- *pfResult = ArrowKeyPositionInternal(pichwIP, pfAssocPrev, fRight,
- fAssocPrevMatch, fAssocPrevNeeded, &nNextOrPrevSeg);
- ReturnResult(kresOk);
- }
- else
- {
- int ichw;
- bool fAssocPrevNew;
- if (fRight)
- {
- // Moving right: make selection at left edge.
- int iginf = m_pseg->LeftMostGlyph();
- bool fBefore = !m_pseg->rightToLeft();
- ichw = m_pseg->PhysicalSurfaceToUnderlying(iginf, fBefore) +
- ((fBefore) ? 0 : 1);
- fAssocPrevNew = !fBefore; // Review: should it be based on the char dir?
- }
- else
- {
- // Moving left: make selection at right edge;
- int iginf = m_pseg->RightMostGlyph();
- bool fBefore = m_pseg->rightToLeft();
- ichw = m_pseg->PhysicalSurfaceToUnderlying(iginf, fBefore) +
- ((fBefore) ? 0 : 1);
- fAssocPrevNew = !fBefore; // Review: should it be based on the char dir?
- }
-
- // Okay, now we have a selection at the edge of the segment. Try moving inside by
- // one glyph.
- *pfResult = ArrowKeyPositionInternal(&ichw, &fAssocPrevNew, fRight,
- fAssocPrevMatch, fAssocPrevNeeded, &nNextOrPrevSeg);
- if (*pfResult)
- {
- *pichwIP = ichw;
- *pfAssocPrev = fAssocPrevNew;
- }
-
- }
-
- ReturnResult(kresOk);
-}
-
-/*----------------------------------------------------------------------------------------------
- Used to find out where underlines should be drawn.
-
- @param ichwMin/Lim - range of text of interest
- @param rs, rd - source/destination coordinates, for scaling
- @param fSkipSpace - true if white space should not be underlined; some renderers may
- ignore this
- @param cxdMax - number of ranges allowed
- @param prgxdLefts/Rights/UnderTops
- - arrays of corresponding values indicating where an underline
- should be drawn, in logical order
-
- TODO: fix the bug where if you have trailing spaces in different segments (eg,
- at different sizes), the spaces all but the last segment will be erroneously included
- in the underline result.
-----------------------------------------------------------------------------------------------*/
-size_t SegmentPainter::getUnderlinePlacement(int ichwMin, int ichwLim,
- bool fSkipSpace, size_t cxdMax,
- float * prgxdLefts, float * prgxdRights, float * prgydUnderTops)
-{
- ChkGrArrayArg(prgxdLefts, cxdMax);
- ChkGrArrayArg(prgxdRights, cxdMax);
- //ChkGrArrayArg(prgydUnderTops, cxdMax);
-
- GrResult res = kresOk;
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- Assert(m_pseg->m_dxsWidth >= 0);
- Assert(m_pseg->m_dysAscent >= 0);
-
- float xsSegLeft = m_pseg->m_dxsTotalWidth;
- for (int iginf = 0; iginf < m_pseg->m_cginf; iginf++)
- {
- xsSegLeft = min(xsSegLeft, m_pseg->GlyphLeftEdge(iginf));
- }
-
- float xdSegLeft = this->ScaleXToDest(xsSegLeft);
- float xdSegRight = xdSegLeft + m_pseg->m_dxsTotalWidth;
-
- int ichwMinSel = min(ichwMin, ichwLim);
- int ichwLimSel = max(ichwMin, ichwLim);
-
- int ichwMinSeg = max(ichwMinSel, m_pseg->m_ichwMin + m_pseg->m_ichwAssocsMin);
- int ichwLimSeg = min(ichwLimSel, m_pseg->m_ichwMin + m_pseg->m_ichwAssocsLim);
-
- std::vector<Rect> vrs;
- std::vector<bool> vfEntireHt;
-
- bool * prgfAllCompsSelected = new bool[m_pseg->m_dichwLim];
- std::fill_n(prgfAllCompsSelected, m_pseg->m_dichwLim, false);
- CalcPartialLigatures(prgfAllCompsSelected, ichwMinSeg, ichwLimSeg,
- ichwMinSel, ichwLimSel);
-
- // Array to keep track of which glyphs were highlighted:
- int cginf = m_pseg->m_cginf;
- bool * prgfHighlighted = new bool[cginf];
- std::fill_n(prgfHighlighted, cginf, false);
-
- for (int ichwLp = ichwMinSeg; ichwLp < ichwLimSeg; ichwLp++)
- {
- CalcHighlightRect(ichwLp, vrs, vfEntireHt,
- !prgfAllCompsSelected[ichwLp - m_pseg->m_ichwMin], prgfHighlighted,
- (m_pseg->m_fEndLine && fSkipSpace));
- }
-
- // If all the glyphs of a given cluster were highlighted, highlight the whole cluster
- // as a unit.
- for (int islout = 0; islout < m_pseg->m_cslout; islout++)
- {
- CalcCompleteCluster(islout, vrs, vfEntireHt, prgfHighlighted);
- }
-
- // Convert rectangles in source coordinates to line segments in destination
- // coordinates.
- std::vector<LineSeg> vlsd;
- for (size_t irs = 0; irs < vrs.size(); irs++)
- {
- Rect rsTmp = vrs[irs];
- LineSeg lsdTmp;
- lsdTmp.left = min(xdSegRight, max(xdSegLeft, ScaleXToDest(rsTmp.left)));
- lsdTmp.right = max(xdSegLeft, min(xdSegRight, ScaleXToDest(rsTmp.right)));
- vlsd.push_back(lsdTmp);
- }
-
- // Create a list of line segments with no overlaps.
- std::vector<LineSeg> vlsdNoOverlaps;
- size_t ils;
- for (ils = 0; ils < vlsd.size(); ils++)
- AddLineSegWithoutOverlaps(vlsdNoOverlaps, vlsd[ils]);
-
- AssertNoOverlaps(vlsdNoOverlaps);
-
- // The gap between the baseline and underlining is one pixel, on a normal screen
- // at standard magnification, and as near as we can get to the equivalent in any
- // special case.
- //float dydGap = rdHeight / 96;
- //float dydSubscript = max(float(0), (-1 * GrEngine::GrFloatMulDiv(m_pseg->m_dysOffset, rsHeight, rdHeight)));
- float dydGap = 1;
- float dydSubscript = max(float(0), (-1 * (m_pseg->m_dysOffset * m_yFactor)));
- float ydBottom = ScaleYToDest(m_pseg->m_dysAscent) + dydGap + dydSubscript;
-
- // Put the results in the output buffers.
- size_t cxdRet = vlsdNoOverlaps.size();
- for (ils = 0; ils < min(cxdRet, size_t(cxdMax)); ils++)
- {
- prgxdLefts[ils] = vlsdNoOverlaps[ils].left;
- prgxdRights[ils] = vlsdNoOverlaps[ils].right;
- if (prgydUnderTops)
- prgydUnderTops[ils] = ydBottom;
- }
- delete[] prgfAllCompsSelected;
- delete[] prgfHighlighted;
-
- //RestoreFont(pgg);
-
- if (vlsdNoOverlaps.size() > cxdMax)
- res = kresFail;
-
- return cxdRet;
-}
-
-
-//:>********************************************************************************************
-//:> Other methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Handle either drawing an insertion point or returning the position at which it
- would be drawn.
-
- @param ichwIP - character position
- @param fAssocPrev - true if selection is associated with previous character
- @param bOn - turning on or off? (ignored in this implementation)
- @param fForceSplit - force a split insertion point
- @param prdPrimary - if NULL, do drawing; otherwise, return location of primary IP
- in destination device coordinates
- @param prdSecondary - return location of secondary IP in dest device coordinates
- @param pfPrimaryHere - true if primary selection is rendered in this segment
- @param pfSecHere - true if (distinct) secondary selection is rendered in this segment;
- false if it is in a different segment, or we are rendering
- an I-beam (std selection)
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::CalcOrDrawInsertionPoint(
- int ichwIP, bool fAssocPrev, bool bOn, bool fForceSplit,
- Rect * prdPrimary, Rect * prdSecondary)
-{
- GrResult res = kresOk;
-
- float xsSegLeft = 0;
- float ysSegTop = 0;
-
- if (prdPrimary)
- {
- prdPrimary->top = 0;
- prdPrimary->bottom = 0;
- prdPrimary->left = 0;
- prdPrimary->right = 0;
- }
- if (prdSecondary)
- {
- prdSecondary->top = 0;
- prdSecondary->bottom = 0;
- prdSecondary->left = 0;
- prdSecondary->right = 0;
- }
-
- int ichwLim = m_pseg->m_ichwMin + m_pseg->m_dichwLim;
- bool fRtl = m_pseg->rightToLeft();
-
- if (m_pseg->m_dxsWidth < 0)
- m_pseg->ComputeDimensions();
-
- // Get the locations for the before and after selections.
-
- float xsBefore, ysBeforeTop, ysBeforeBottom;
- float xsAfter, ysAfterTop, ysAfterBottom;
- bool fRtlBefore, fRtlAfter;
- CalcIP(ichwIP, true, &xsBefore, &ysBeforeTop, &ysBeforeBottom, &fRtlBefore);
- CalcIP(ichwIP, false, &xsAfter, &ysAfterTop, &ysAfterBottom, &fRtlAfter);
-
- if (m_pseg->m_cginf == 0 && ichwIP == ichwLim)
- {
- Assert(kPosInfFloat == xsBefore && kPosInfFloat == xsAfter);
- xsBefore = 0;
- xsAfter = 0;
- }
- else if ((kPosInfFloat == xsBefore || kNegInfFloat == xsBefore) &&
- (kPosInfFloat == xsAfter || kNegInfFloat == xsAfter))
- {
- return; // quick exit for nothing-to-draw case
- }
-
- bool fPrimary = true;
- if (fForceSplit)
- {
- // Supposedly we can't find both halves of the IP in this segment.
- Assert(xsBefore == kPosInfFloat || xsBefore == kNegInfFloat
- || xsAfter == kPosInfFloat || xsAfter == kNegInfFloat);
- if (xsBefore == kPosInfFloat || xsBefore == kNegInfFloat)
- {
- // Can't find the char the IP is before.
- fPrimary = fAssocPrev;
- }
- else // if (xsAfter == kPosInfinity || xsAfter == kNegInfinity)
- {
- // Can't find the char the IP is after.
- fPrimary = !fAssocPrev;
- }
- ////Assert((dm == kdmSplitPrimary) == fPrimary);
- }
-
- if (xsBefore == kPosInfinity || xsBefore == kNegInfinity)
- {
- ysBeforeTop = ysSegTop;
- ysBeforeBottom = ysSegTop + m_pseg->m_dysHeight;
- }
- else
- {
- xsBefore += xsSegLeft;
- ysBeforeTop += ysSegTop;
- ysBeforeBottom += ysSegTop;
- }
- if (xsAfter == kNegInfinity || xsAfter == kPosInfinity)
- {
- ysAfterTop = ysSegTop;
- ysAfterBottom = ysSegTop + m_pseg->m_dysHeight;
- }
- else
- {
- xsAfter += xsSegLeft;
- ysAfterTop += ysSegTop;
- ysAfterBottom += ysSegTop;
- }
-
- float xsLeft = xsSegLeft
- + ((fRtl && m_pseg->m_fEndLine) ? (m_pseg->m_dxsVisibleWidth - m_pseg->m_dxsTotalWidth) :0);
- float xsRight = xsSegLeft
- + ((fRtl && m_pseg->m_fEndLine) ? m_pseg->m_dxsVisibleWidth : m_pseg->m_dxsTotalWidth)
- + m_pseg->m_dxsStretch;
- float dysMinSplitHeight = m_pseg->m_dysHeight / 4;
-
- if (!fForceSplit) // kdmNormal == dm)
- {
- // Standard I-beam, or both halves of split IP.
-
- bool fIBeam = false;
-
- if (xsBefore == xsAfter)
- // Positions coincide within this segment: make an I-beam.
- fIBeam = true;
-
- else if (fabsf(xsBefore - xsLeft) <= 1 && ichwIP == m_pseg->m_ichwMin)
- {
- // Logical start is at a left edge: allow I-beam if previous segment has one
- // at the end (or there is no previous segment).
- //Assert(!fRtlBefore);
- //if (m_pseg->m_psegPrev)
- //{
- // SegmentPainter segpPrev(m_pseg->m_psegPrev);
- // fIBeam = segpPrev.doBoundariesCoincide(true, true);
- //}
- //else
-
- fIBeam = true;
- }
- else if (fabsf(xsBefore - xsRight) <= 1 && ichwIP == m_pseg->m_ichwMin)
- {
- // Logical start is at a right edge: allow I-beam if previous segment has one
- // at the end (or there is no previous segment).
- //Assert(fRtlBefore);
- //if (m_pseg->m_psegPrev)
- //{
- // SegmentPainter segpPrev(m_pseg->m_psegPrev);
- // fIBeam = segpPrev.doBoundariesCoincide(true, false);
- //}
- //else
-
- fIBeam = true;
- }
- else if (fabsf(xsAfter - xsLeft) <= 1 && ichwIP == ichwLim)
- {
- // Logical end is at a left edge: allow I-beam if next segment has one
- // at the beginning (or there is no next segment).
- //Assert(fRtlAfter);
- //if (m_pseg->m_psegNext == NULL)
- //{
- // SegmentPainter segpPrev(m_pseg->m_psegPrev);
- // fIBeam = segpPrev.doBoundariesCoincide(false, true);
- //}
- //else
-
- fIBeam = true;
- }
- else if (fabsf(xsAfter - xsRight) <= 1 && ichwIP == ichwLim)
- {
- // Logical end is at a right edge: allow I-beam if next segment has one
- // at the beginning (or there is no next segment).
- //Assert(!fRtlAfter);
- //if (m_pseg->m_psegNext == NULL)
- //{
- // SegmentPainter segpPrev(m_pseg->m_psegPrev);
- // fIBeam = segpPrev.doBoundariesCoincide(false, false);
- //}
- //else
-
- fIBeam = true;
- }
- else
- {
- // If the horizontal positions of the two halves are sufficiently close,
- // make an I-beam.
- fIBeam = CloseIPPositions(
- &xsBefore, ysBeforeTop, ysBeforeBottom,
- &xsAfter, ysAfterTop, ysAfterBottom);
- }
- if (ResultFailed(res))
- THROW(WARN(res));
-
- if (fIBeam &&
- ((ichwIP == m_pseg->m_ichwMin && fAssocPrev) || (ichwIP == ichwLim && !fAssocPrev)))
- {
- // Adjacent segment will show the I-beam, so don't show it here.
- if (m_pseg->m_cginf == 0)
- {
- // Empty segment--assume no adjacent segment.
- }
- else
- return;
- }
-
- if (fIBeam)
- { // I-beam caret
-
- float ysTop = min(ysBeforeTop, ysAfterTop);
- float ysBottom = max(ysBeforeBottom, ysAfterBottom);
- float xsMid = (xsBefore == kPosInfFloat) ? xsAfter : xsBefore;
- InvertIBeam(xsMid, ysTop, ysBottom, fAssocPrev, prdPrimary);
- }
- else
- { // split caret
- if (fAssocPrev)
- { // xsAfter is primary, xsBefore is secondary
- if (xsAfter != kNegInfinity)
- {
- InvertSplitIP(xsAfter, ysAfterTop, ysAfterBottom,
- true, fRtlAfter, false, dysMinSplitHeight, prdPrimary);
- }
- if (xsBefore != kPosInfFloat)
- {
- InvertSplitIP(xsBefore, ysBeforeTop, ysBeforeBottom,
- false, !fRtlBefore, true, dysMinSplitHeight, prdSecondary);
- }
- }
- else
- { // xsBefore is primary, xsAfter is secondary
- if (xsBefore != kPosInfinity)
- {
- InvertSplitIP(xsBefore, ysBeforeTop, ysBeforeBottom,
- false, !fRtlBefore, false, dysMinSplitHeight, prdPrimary);
- }
- if (xsAfter != kNegInfinity)
- {
- InvertSplitIP(xsAfter, ysAfterTop, ysAfterBottom,
- true, fRtlAfter, true, dysMinSplitHeight, prdSecondary);
- }
- }
- //*pfSecHere = true;
- }
- //*pfPrimaryHere = true;
- }
- else if (fForceSplit && fPrimary) // kdmSplitPrimary == dm)
- {
- // Draw just the primary caret.
- if (fAssocPrev)
- { // xsAfter is primary
- if (xsAfter == kNegInfinity)
- {} // no primary
- else
- InvertSplitIP(xsAfter, ysAfterTop, ysAfterBottom,
- true, fRtlAfter, false, dysMinSplitHeight, prdPrimary);
- }
- else
- { // xsBefore is primary
- if (xsBefore == kPosInfinity)
- {} // no primary
- else
- InvertSplitIP(xsBefore, ysBeforeTop, ysBeforeBottom,
- false, !fRtlBefore, false, dysMinSplitHeight, prdPrimary);
- }
- }
- else // fForceSplit && !fPrimary
- {
- // Draw just the secondary caret.
- //Assert(kdmSplitSecondary == dm);
- if (fAssocPrev)
- { // xsBefore is secondary
- if (xsBefore == kPosInfinity)
- {} // no secondary
- else
- InvertSplitIP(xsBefore, ysBeforeTop, ysBeforeBottom,
- false, !fRtlBefore, true, dysMinSplitHeight, prdSecondary);
- }
- else
- { // xsAfter is secondary
- if (xsAfter == kNegInfinity)
- {} // no secondary
- else
- InvertSplitIP(xsAfter, ysAfterTop, ysAfterBottom,
- true, fRtlAfter, true, dysMinSplitHeight, prdSecondary);
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Draw an I-beam cursor, or return the location at which it would be drawn.
-
- Note that currently we do not draw a true I-beam, but rather just a vertical line.
-
- @param xs - horizontal center of IP
- @param ysTop - top of glyph (or ligature component) box
- @param ysBottom - bottom of glyph (or ligature component) box
- @param fAssocRight - true if the IP is associated with the text to the right
- @param rs, rd - source/destination device coordinates
- @param prdRet - return location to be drawn in dest device coords;
- if NULL, do the drawing
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::InvertIBeam(float xs, float ysTop, float ysBottom,
- bool fAssocPrev, Rect * prdRet)
-{
- float xd = ScaleXToDest(xs);
- float ydTop = ScaleYToDest(ysTop);
- float ydBottom = ScaleYToDest(ysBottom);
-
- // For now, assume that destination coordinates are in terms of pixels.
- float dxdTwoXPixels = 2;
-
- float dxdLeftAdjust = dxdTwoXPixels / 2;
- float dxdRightAdjust = dxdTwoXPixels - dxdLeftAdjust;
-
-// int dysFontAscent;
-// pgg->GetFontAscentSourceUnits(pgg, &dysFontAscent);
-// dysFontAscent += m_dysXAscent;
-// if (dysFontAscent < 20)
-// {
-// dxdRightAdjust--;
-// dxdRightHook = 1;
-// }
-
- if (prdRet)
- {
- prdRet->left = xd - dxdLeftAdjust;
- prdRet->right = xd + dxdRightAdjust;
- prdRet->top = ydTop;
- prdRet->bottom = ydBottom;
- }
- else
- {
- InvertRect(xd-dxdLeftAdjust, ydTop,
- xd+dxdRightAdjust, ydBottom);
-
- // To make a true I-beam:
-// InvertRect(xd-dxdTwoXPixels, ydTop-dydOneYPixel,
-// xd+dxdRightHook, ydTop);
-// InvertRect(xd-dxdTwoXPixels, ydBottom,
-// xd+dxdRightHook, ydBottom+dydOneYPixel);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Draw a split insertion point, or return the location at which it would be drawn.
-
- @param xs - horizontal center of IP
- @param ysTop - top of glyph (or ligature component) box
- @param ysBottom - bottom of glyph (or ligature component) box
- @param fTop - true if the IP is to be drawn at the top of the line of text
- @param fAssocRight - true if the IP is associated with the text to the right
- @param fSecondary - true if the IP is secondary, false if it is primary
- @param dysMinSplitHeight
- - minimum split cursor height
- @param rs, rd - source/destination device coordinates
- @param prdRet - return location to be drawn in dest device coords;
- if NULL, do the drawing
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::InvertSplitIP(float xs, float ysTop, float ysBottom,
- bool fTop, bool fAssocRight, bool fSecondary, float dysMinSplitHeight,
- Rect * prdRet)
-{
- if (prdRet == NULL && ysTop == ysBottom)
- return; // invisible IP
-
- float xd = ScaleXToDest(xs);
- float ydTop = ScaleYToDest(ysTop);
- float ydBottom = ScaleYToDest(ysBottom);
- float dydMinSplitHeight = dysMinSplitHeight;
-
- float ydMid = (ydTop + ydBottom) / 2;
-
- // For now, assume that destination coordinates are in terms of pixels.
- float dxdOneXPixel = 1;
- float dydOneYPixel = 1;
- float dxdTwoXPixels = 2;
-
- float xdLeft, xdRight, dxdHookLen;
- if (fSecondary)
- {
- xdLeft = xd - (dxdOneXPixel / 2);
- xdRight = xdLeft + 1;
- dxdHookLen = 2;
- }
- else
- {
- xdLeft = xd - (dxdTwoXPixels / 2);
- xdRight = xdLeft + 2;
- dxdHookLen = 3;
- }
-
- float yd1, yd2;
- if (fTop)
- {
- yd1 = ydTop;
- if (ydMid - ydTop < dydMinSplitHeight)
- ydMid = ydTop + dydMinSplitHeight;
- yd2 = (fSecondary) ? ydMid : ydMid + 3;
- }
- else
- {
- yd2 = ydBottom;
- if (ydBottom - ydMid < dydMinSplitHeight)
- ydMid = ydBottom - dydMinSplitHeight;
- yd1 = (fSecondary) ? ydMid : ydMid - 3;
- }
-
- if (prdRet)
- {
- prdRet->left = xdLeft;
- prdRet->right = xdRight;
- // The most common reason for returning the positions of the IP is to scroll it into
- // view, in which case we want to return the entire line height, not just the
- // height of the IP itself.
- prdRet->top = ydTop; // yd1;
- prdRet->bottom = ydBottom; // yd2;
- }
- else
- {
- InvertRect(xdLeft, yd1, xdRight, yd2);
- }
-
- if (fAssocRight)
- {
- if (prdRet)
- prdRet->right = xdRight + dxdHookLen;
- else
- {
- if (fTop)
- InvertRect(xdRight, ydTop,
- xdRight + dxdHookLen, ydTop + dydOneYPixel);
- else
- InvertRect(xdRight, ydBottom-dydOneYPixel,
- xdRight + dxdHookLen, ydBottom);
- }
- }
- else
- {
- if (prdRet)
- prdRet->left = xdLeft - dxdHookLen;
- else
- {
- if (fTop)
- InvertRect(xdLeft - dxdHookLen, ydTop,
- xdLeft, ydTop + dydOneYPixel);
- else
- InvertRect(xdLeft - dxdHookLen, ydBottom - dydOneYPixel,
- xdLeft, ydBottom);
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Given a character position (relative to the beginning of the string), return the
- position for the insertion point, relative to the top-left of the segment.
- Notice that these are before/after positions, not left/right positions.
- Return an infinity value to indicate no appropriate IP.
-
- @param ichwSel - selection position, relative to beginning of string
- @param fBefore - true if we are interested in the character the IP is before.
- @param pxs, pysTop, pysBottom
- - return locations for drawing the IP (top and bottom are not
- adjusted for half-selections)
- @param pfRtl - return true if the character is right-to-left
-
- Review: it might be useful to figure out if the two surface glyphs are physically adjacent
- in such a way that their IPs can be combined into one I-beam. For now we use a simple
- rule that assumes that any glyph or ligature component is at least 10% as wide as the
- height of the font (see CloseIPPositions).
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::CalcIP(int ichwSel, bool fBefore,
- float * pxs, float * pysTop, float * pysBottom, bool * pfRtl)
-{
- Font & font = this->m_pseg->getFont();
-
- int ichw = (fBefore) ? ichwSel : ichwSel - 1;
-
- int iginfOutput;
-
- *pfRtl = m_pseg->CharIsRightToLeft(ichw, fBefore);
-
- GrEngine * pgreng = m_pseg->EngineImpl();
- GrGlyphTable * pgtbl = (pgreng) ? pgreng->GlyphTable() : NULL;
-
- float dysFontAscent = m_pseg->m_dysFontAscent;
- ////GrResult res = GetFontAscentSourceUnits(pgg, &dysFontAscent);
- ////if (ResultFailed(res))
- //// THROW(WARN(res));
- dysFontAscent += m_pseg->m_dysXAscent;
-
- *pysTop = 0;
- *pysBottom = m_pseg->m_dysHeight;
-
- int ichwSegOffset = ichw - m_pseg->m_ichwMin;
- int isloutLig;
- if (ichwSegOffset < m_pseg->m_ichwAssocsMin || ichwSegOffset >= m_pseg->m_ichwAssocsLim)
- isloutLig = kNegInfinity;
- else
- isloutLig = m_pseg->m_prgisloutLigature[ichwSegOffset - m_pseg->m_ichwAssocsMin];
- bool fOkLig = (isloutLig != kNegInfinity);
- if (pgtbl && fOkLig)
- {
- // Ligature component; place the IP at the boundary
- // of the component box.
-
- GrSlotOutput * pslout = m_pseg->OutputSlot(isloutLig);
- int icomp = m_pseg->m_prgiComponent[ichwSegOffset - m_pseg->m_ichwAssocsMin];
-
- iginfOutput = m_pseg->LogicalToPhysicalSurface(isloutLig);
-
- float xsGlyphOffset = m_pseg->GlyphLeftEdge(iginfOutput);
-
- float xsLeft, xsRight, ysTop, ysBottom;
-
- // TODO: Rework ComponentIndexForGlyph to take slati rather than iForGlyph.
- int slati = pslout->ComponentId(icomp);
- int iForGlyph = pgtbl->ComponentIndexForGlyph(pslout->GlyphID(), slati);
- fOkLig = pgtbl->ComponentBoxLogUnits(m_pseg->m_xysEmSquare, pslout->GlyphID(), iForGlyph,
- m_pseg->m_mFontEmUnits, m_pseg->m_dysAscent,
- &xsLeft, &ysTop, &xsRight, &ysBottom);
- if (fOkLig)
- {
- if (fBefore == *pfRtl)
- // Position of interest is to the right.
- *pxs = xsGlyphOffset + xsRight;
- else
- // Position of interest is to the left.
- *pxs = xsGlyphOffset + xsLeft;
-
- GlyphInfo * pginf = m_pseg->m_prgginf + iginfOutput;
- float ysGlyph = pginf->yOffset();
-
- *pysTop = ysTop + (m_pseg->m_dysAscent - dysFontAscent) - ysGlyph;
- *pysBottom = ysBottom + (m_pseg->m_dysAscent - dysFontAscent) - ysGlyph;
- }
- }
-
- if (!fOkLig)
- {
- // Not a ligature component.
-
- int islout = m_pseg->UnderlyingToLogicalSurface(ichw, fBefore);
- GrSlotOutput * psloutTmp = m_pseg->OutputSlot(islout);
- iginfOutput = m_pseg->LogicalToPhysicalSurface(islout);
-
- if (kPosInfinity == iginfOutput || kNegInfinity == iginfOutput)
- *pxs = kPosInfFloat;
-
- else
- {
- bool fCluster = (psloutTmp->IsPartOfCluster());
- bool fHighlightBB = fCluster;
- // Test below should match the one in CalcHighlightRect:
- if ((psloutTmp->ClusterAdvance() == 0
- || psloutTmp->GlyphMetricLogUnits(&font, kgmetAdvWidth) == 0)
- && !psloutTmp->IsSpace())
- {
- fHighlightBB = true; // use bounding box for zero-advance glyph
- }
- if (fHighlightBB)
- {
- // Cluster member or zero-width glyph.
-
- if (fCluster && AtEdgeOfCluster(psloutTmp, islout, fBefore) &&
- !CanInsertIntoCluster(psloutTmp, islout))
- {
- // Place the IP at the edge of the whole cluster.
-
- int isloutBase = psloutTmp->ClusterBase();
- GrSlotOutput * psloutBase = m_pseg->OutputSlot(isloutBase);
- //int igbbBase = psloutBase->GlyphBbIndex();
- int iginfBase = m_pseg->LogicalToPhysicalSurface(isloutBase);
-
- float xsBase = m_pseg->GlyphLeftEdge(iginfBase);
-
- float xsLeft = xsBase + psloutBase->ClusterXOffset();
- float xsRight = xsBase + psloutBase->ClusterAdvance();
-
- if (fBefore == *pfRtl)
- // Position of interest is to the right
- *pxs = xsRight;
- else
- // Position of interest is to the left.
- *pxs = xsLeft;
- }
- else
- {
- // Place the IP on the perimeter of the bounding box of the cluster member.
-
- float xsGlyphStart = m_pseg->GlyphLeftEdge(iginfOutput);
-
-// float dysFontAscent;
-// res = GetFontAscentSourceUnits(pgg, &dysFontAscent);
-// if (ResultFailed(res)) THROW(WARN(res));
-// dysFontAscent += m_dysXAscent;
-
- float ysBbTop = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbTop);
- float ysBbBottom = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbBottom);
- float xsBbLeft = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbLeft);
- float xsBbRight = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbRight);
-
- int twoPixels = 2; // assume dest coords are in pixels
-
- if (fBefore == *pfRtl)
- // Position of interest is to the right
- *pxs = xsGlyphStart + xsBbRight + twoPixels;
- else
- // Position of interest is to the left.
- *pxs = xsGlyphStart + xsBbLeft - twoPixels;
-
- GlyphInfo * pginf = m_pseg->m_prgginf + iginfOutput;
- float ysGlyph = pginf->yOffset();
- float ysGlyphBaseline = m_pseg->m_dysAscent - ysGlyph; // relative to top
-
- *pysTop = ysGlyphBaseline - ysBbTop - twoPixels;
- *pysBottom = ysGlyphBaseline - ysBbBottom + twoPixels;
- }
- }
- else
- {
- // Insertion point goes at origin or advance width of glyph.
-
- *pxs = m_pseg->GlyphLeftEdge(iginfOutput);
- if (fBefore == *pfRtl)
- {
- // Position of interest is to the right
- //*pxs += psloutTmp->GlyphMetricLogUnits(&font, kgmetAdvWidth);
- *pxs += psloutTmp->ClusterAdvance();
- }
- // else position of interest is to the left
- }
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- If the two positions for the insertion point are close enough, merge them into
- one insertion point, and return true to indicate that we want an I-beam.
-
- @param pxsBefore, pxsAfter - for comparing, and also adjusted results
- @param ysBeforeTop/Bottom, ysAfterTop/Bottom - for comparing
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::CloseIPPositions(float * pxsBefore, float ysBeforeTop, float ysBeforeBottom,
- float * pxsAfter, float ysAfterTop, float ysAfterBottom)
-{
- // No adjustment if vertical positions are disjoint.
- if (ysBeforeBottom <= ysAfterTop)
- return false;
- if (ysAfterBottom <= ysBeforeTop)
- return false;
-
- float dysHt = max(ysBeforeBottom, ysAfterBottom) - min(ysBeforeTop, ysAfterTop);
- float dxsDiff = fabsf(*pxsBefore - *pxsAfter);
-
- // If the difference in the x positions is less than 10% of the height,
- // we want an I-beam--use the average.
- if (dxsDiff * 10 < dysHt)
- {
- *pxsBefore = (*pxsBefore + *pxsAfter) / 2;
- *pxsAfter = *pxsBefore;
- return true;
- }
-
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the slot in question is the first or last slot of its cluster,
- or if it is not part of a cluster at all. Return false if the specified side
- of the slot is interior to a cluster.
-
- @param fBefore - if true, we are examining the slot the insertion point is before,
- so we are interested in whether this slot is at the
- leading edge of the cluster.
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::AtEdgeOfCluster(GrSlotOutput * pslout, int islout, bool fBefore)
-{
- if (!pslout->IsPartOfCluster())
- return true;
-
- if (fBefore && (islout == 0))
- return true;
- if (!fBefore && (m_pseg->m_cslout == islout + 1))
- return true;
-
- // If the adjacent slot in whatever direction we're interested in has the same
- // cluster base, this slot is not on the edge of the cluster.
- // -- NO, because you could have an intervening glyph that is not part of the
- // cluster.
- //int isloutAdjacentBase = (fBefore) ?
- // m_pseg->OutputSlot(islout - 1)->ClusterBase() :
- // m_pseg->OutputSlot(islout + 1)->ClusterBase();
- //return (isloutAdjacentBase != m_pseg->OutputSlot(islout)->ClusterBase());
-
- // Ask the cluster base.
- return AtEdgeOfCluster(m_pseg->OutputSlot(pslout->ClusterBase()), pslout->ClusterBase(),
- pslout, islout, fBefore);
-}
-
-bool SegmentPainter::AtEdgeOfCluster(GrSlotOutput * psloutBase, int isloutBase,
- GrSlotOutput * pslout, int islout, bool fBefore)
-{
- // Compare pslout to all the members of the cluster. If it is the minimum or maximum, it
- // is at an edge.
- if (fBefore && isloutBase < islout)
- return false;
- if (!fBefore && isloutBase > islout)
- return false;
-
- std::vector<int> visloutCluster;
- m_pseg->ClusterMembersForGlyph(isloutBase, psloutBase->ClusterRange(), visloutCluster);
-
- for (size_t iislout = 0; iislout < visloutCluster.size(); iislout++)
- {
- int isloutMember = visloutCluster[iislout];
- if (fBefore && isloutMember < islout)
- return false;
- if (!fBefore && isloutMember > islout)
- return false;
- }
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if it is permitted to put an insertion point somewhere in the middle of
- the given slot's cluster.
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::CanInsertIntoCluster(GrSlotOutput * pslout, int islout)
-{
- if (!pslout->IsPartOfCluster())
- return false;
-
- int isloutBase = pslout->ClusterBase();
- if (islout != isloutBase)
- {
- // Ask the cluster base.
- Assert(pslout->ClusterRange() == 0);
- return CanInsertIntoCluster(m_pseg->OutputSlot(isloutBase), isloutBase);
- }
-
- if (!AtEdgeOfCluster(pslout, islout, true) && pslout->InsertBefore())
- return true;
-
- std::vector<int> visloutCluster;
- m_pseg->ClusterMembersForGlyph(isloutBase, pslout->ClusterRange(), visloutCluster);
-
- for (size_t iislout = 0; iislout < visloutCluster.size(); iislout++)
- {
- int isloutMember = visloutCluster[iislout];
- if (AtEdgeOfCluster(m_pseg->OutputSlot(isloutMember), isloutMember, true))
- // Inserting before the first member of the cluster doesn't count.
- continue;
-
- if (m_pseg->OutputSlot(isloutMember)->InsertBefore())
- return true;
- }
-
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Determine which characters in the selected range are part of ligatures that are fully
- selected vs. those that are only partially selected. Those that are only partially selected
- must have their components highlighted individually, but those that are fully selected
- should be highlighted fully, to avoid blank spots in the case that the components do not
- fully cover the surface of the glyph.
-
- @param prgfAllSelected - array of flags to fill in with results
- @param ichwMin/LimSeg - range of characters to examine
- @param ichwMin/LimSel - range of characters that are selected
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::CalcPartialLigatures(bool * prgfAllSelected,
- int ichwMinSeg, int ichwLimSeg,
- int ichwMinSel, int ichwLimSel)
-{
- GrEngine * pgreng = m_pseg->EngineImpl();
- GrGlyphTable * pgtbl = (pgreng) ? pgreng->GlyphTable() : NULL;
-
- for (int ichw = ichwMinSeg; ichw < ichwLimSeg; ichw++)
- {
- int ichwSegOffset = ichw - m_pseg->m_ichwMin;
- int isloutLig;
- if (ichwSegOffset < m_pseg->m_ichwAssocsMin || ichwSegOffset >= m_pseg->m_ichwAssocsLim)
- isloutLig = kNegInfinity;
- else
- isloutLig = m_pseg->m_prgisloutLigature[ichwSegOffset - m_pseg->m_ichwAssocsMin];
- bool fLigComp = (pgtbl && isloutLig != kNegInfinity);
- if (fLigComp && !prgfAllSelected[ichwSegOffset])
- {
- GrSlotOutput * pslout = m_pseg->OutputSlot(isloutLig);
- bool fAll = true;
- int icomp;
- for (icomp = 0; icomp < pslout->NumberOfComponents(); icomp++)
- {
- int ichwUnderlying = pslout->UnderlyingComponent(icomp);
- if (ichwUnderlying < ichwMinSel - m_pseg->m_ichwMin ||
- ichwUnderlying >= ichwLimSel - m_pseg->m_ichwMin)
- {
- fAll = false; // found a component that is not selected
- }
- }
- for (icomp = 0; icomp < pslout->NumberOfComponents(); icomp++)
- {
- int ichwUnderlying = pslout->UnderlyingComponent(icomp);
- prgfAllSelected[ichwUnderlying] = fAll;
- }
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- The given character is part of the selected range. Add to the vector a rectangle (or
- eventually, several) indicating the corresponding screen area(s) of the character.
- The rectangle is relative to the top left of the segment.
-
- @param ichw - selected char, relative to beginning of string
- @param vrs - list of rectangles to highlight, in source coords, relative to
- segment draw position (top-left)
- @param vfEntireHt - for each of the above rectangles, true if the rect should be
- extended to include the entire line
- @param fJustComponent - true if we want to highlight just the single ligature component
- this character maps to; false if the entire ligature is selected
- @param rgfHighlighted - for each glyph in this segment, whether it is being highlighted
- by this operation
- @param fSkipTrSpace - should we skip trailing white space?
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::CalcHighlightRect(int ichw,
- std::vector<Rect> & vrs, std::vector<bool> & vfEntireHt,
- bool fJustComponent, bool * rgfHighlighted, bool fSkipTrSpace)
-{
- GrResult res;
-
- GrEngine * pgreng = m_pseg->EngineImpl();
- GrGlyphTable * pgtbl = (pgreng) ? pgreng->GlyphTable() : NULL;
- //bool fRtl = m_pseg->rightToLeft();
-
- Font & font = m_pseg->getFont();
-
- if (!GrCharStream::AtUnicodeCharBoundary(m_pseg->GetString(), ichw))
- // Second half of a surrogate pair, or UTF-8: ignore.
- return;
-
- // Calculate the location for the glyph that this IP is before.
-
- int ichwSegOffset = ichw - m_pseg->m_ichwMin;
- int isloutLig;
- if (ichwSegOffset < m_pseg->m_ichwAssocsMin || ichwSegOffset >= m_pseg->m_ichwAssocsLim)
- isloutLig = kNegInfinity;
- else
- isloutLig = m_pseg->m_prgisloutLigature[ichwSegOffset - m_pseg->m_ichwAssocsMin];
- bool fLigComp = (pgtbl && isloutLig != kNegInfinity);
- if (fLigComp && fJustComponent)
- {
- // Character is a ligature component.
-
- GrSlotOutput * pslout = m_pseg->OutputSlot(isloutLig);
- int icomp = m_pseg->m_prgiComponent[ichwSegOffset - m_pseg->m_ichwAssocsMin];
- int iginfOutput = m_pseg->LogicalToPhysicalSurface(isloutLig);
-
- float xsGlyphStart = m_pseg->GlyphLeftEdge(iginfOutput);
-
- float xsLeft, xsRight, ysTop, ysBottom;
-
- // TODO: Rework ComponentIndexForGlyph to take slati rather than iForGlyph.
- int slati = pslout->ComponentId(icomp);
- int iForGlyph = pgtbl->ComponentIndexForGlyph(pslout->GlyphID(), slati);
- pgtbl->ComponentBoxLogUnits(m_pseg->m_xysEmSquare, pslout->GlyphID(), iForGlyph,
- m_pseg->m_mFontEmUnits, m_pseg->m_dysAscent,
- &xsLeft, &ysTop, &xsRight, &ysBottom);
-
- float dysFontAscent = m_pseg->m_dysFontAscent;
- ////GetFontAscentSourceUnits(pgg, &dysFontAscent);
- dysFontAscent += m_pseg->m_dysXAscent;
- GlyphInfo * pginf = m_pseg->m_prgginf + iginfOutput;
- float ysForGlyph = pginf->yOffset();
- float dysGlyphTop = (m_pseg->m_dysAscent - dysFontAscent) - ysForGlyph; // rel. to common baseline
-
- Rect rsNew;
- rsNew.top = ysTop + dysGlyphTop;
- rsNew.bottom = ysBottom + dysGlyphTop;
- rsNew.left = xsGlyphStart + xsLeft;
- rsNew.right = xsGlyphStart + xsRight;
- vrs.push_back(rsNew);
-
- vfEntireHt.push_back(false);
- }
- else
- {
- std::vector<int> vislout = m_pseg->UnderlyingToLogicalAssocs(ichw);
- if (vislout.size() == 0)
- return;
-
- float xsGlyphLeft, xsGlyphRight;
-
- res = kresOk;
-
- for (size_t iislout = 0; iislout < vislout.size(); iislout++)
- {
- int islout = vislout[iislout];
- if (islout == kNegInfinity || islout == kPosInfinity)
- continue;
- int iginfTmp = m_pseg->LogicalToPhysicalSurface(islout);
- Assert(iginfTmp != kNegInfinity);
- Assert(iginfTmp != kPosInfinity);
-
- if (fSkipTrSpace && islout >= m_pseg->m_isloutVisLim)
- continue;
-
- Rect rsNew;
- GrSlotOutput * psloutTmp = m_pseg->OutputSlot(islout);
- bool fHighlightBB = psloutTmp->IsPartOfCluster();
- // Test below should match the one in CalcIP--
- // If the glyph has no advance width but does have a real bounding box,
- // highlight the bounding box. Review: do we want this???
- if ((psloutTmp->ClusterAdvance() == 0
- || psloutTmp->GlyphMetricLogUnits(&font, kgmetAdvWidth) == 0)
- && !psloutTmp->IsSpace())
- {
- fHighlightBB = true;
- }
- xsGlyphLeft = m_pseg->GlyphLeftEdge(iginfTmp);
- if (fHighlightBB)
- {
- // For now, highlight just the bounding box of this glyph. After we finish
- // highlighting all glyphs individually, we'll go back and highlight
- // as one unit any clusters that are completely selected.
-
-// int dysFontAscent;
-// res = GetFontAscentSourceUnits(pgg, &dysFontAscent); // if we restore this code, add in ExtraAscent
-// if (ResultFailed(res)) THROW(WARN(res));
-// dysFontAscent += m_dysXAscent;
-
- GlyphInfo * pginf = m_pseg->m_prgginf + iginfTmp;
- float ysForGlyph = pginf->yOffset();
- float ysGlyphBaseline = m_pseg->m_dysAscent - ysForGlyph; // relative to top
-
- float ysBbTop = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbTop);
- float ysBbBottom = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbBottom);
- float xsBbLeft = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbLeft);
- float xsBbRight = psloutTmp->GlyphMetricLogUnits(&font, kgmetBbRight);
-
- rsNew.top = ysGlyphBaseline - ysBbTop - 2;
- rsNew.bottom = ysGlyphBaseline - ysBbBottom + 2;
- rsNew.left = xsGlyphLeft + xsBbLeft - 2;
- rsNew.right = xsGlyphLeft + xsBbRight + 2;
-
- vfEntireHt.push_back(false);
- }
- else
- {
- // Highlight entire width of the glyph from the top of the line to the bottom.
- // Horizontally, highlight from the origin of the glyph to the advance width.
-
- //xsGlyphRight = xsGlyphLeft + psloutTmp->GlyphMetricLogUnits(&font kgmetAdvWidth);
- xsGlyphRight = xsGlyphLeft + psloutTmp->ClusterAdvance();
-
- if (xsGlyphLeft > xsGlyphRight)
- std::swap(xsGlyphLeft, xsGlyphRight);
-
- rsNew.top = 0;
- rsNew.bottom = m_pseg->m_dysHeight;
- rsNew.left = xsGlyphLeft;
- rsNew.right = xsGlyphRight;
-
- vfEntireHt.push_back(true);
- }
- vrs.push_back(rsNew);
-
- if (rgfHighlighted)
- rgfHighlighted[iginfTmp] = true;
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- If the output slot is a cluster base and all the members of the cluster are highlighted,
- simply highlight the cluster as a single rectangle, to avoid unslightly gaps
- between glyphs. (Note that this does not remove the rectangles that were already included
- to handle the individual members.)
- The rectangles are relative to the top left of the segment.
-
- @param islout - output slot index
- @param vrect - list of rectangles to highlight; add result here
- @param prgfHighlighted - flags indicating which glyphs have been highlighted, indexed by
- physical surface position
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::CalcCompleteCluster(int islout,
- std::vector<Rect> & vrs, std::vector<bool> & vfEntireHt, bool * prgfHighlighted)
-{
- //GrEngine * pgreng = m_pseg->EngineImpl();
-
- GrSlotOutput * pslout = m_pseg->OutputSlot(islout);
- if (pslout->ClusterRange() == 0)
- return;
-
- int iginfDraw = m_pseg->LogicalToPhysicalSurface(islout);
- if (!prgfHighlighted[iginfDraw])
- return;
-
- bool fAllHighlighted = true;
-
- std::vector<int> visloutCluster;
- m_pseg->ClusterMembersForGlyph(islout, pslout->ClusterRange(), visloutCluster);
- for (size_t i = 0; i < visloutCluster.size(); i++)
- {
- int iginfMemberDraw = m_pseg->LogicalToPhysicalSurface(visloutCluster[i]);
- if (!prgfHighlighted[iginfMemberDraw])
- {
- fAllHighlighted = false;
- break;
- }
- }
-
- if (!fAllHighlighted)
- return;
-
- // All the members of this cluster are highlighted.
-
- float xsGlyphStart = m_pseg->GlyphLeftEdge(iginfDraw);
-
- Rect rsNew;
- rsNew.top = 0;
- rsNew.bottom = m_pseg->m_dysHeight;
- rsNew.left = xsGlyphStart + pslout->ClusterXOffset();
- rsNew.right = xsGlyphStart + pslout->ClusterAdvance();
- vrs.push_back(rsNew);
-
- vfEntireHt.push_back(true);
-}
-
-/*----------------------------------------------------------------------------------------------
- Add the given rectangle to the vector, eliminating any overlapping areas.
-
- Note this method can be recursive: if we have to break the current rectangle into
- two, we'll call the method again the for new
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::AddRectWithoutOverlaps(std::vector<Rect> & vrect, Rect rectToAdd)
-{
- std::vector<Rect> vrectMoreToAdd;
-
- bool fAnythingToAdd = AnyArea(&rectToAdd);
-
- size_t irect;
- for (irect = 0; irect < vrect.size(); irect++)
- {
- bool f = AdjustRectsToNotOverlap(vrect, irect, &rectToAdd, vrectMoreToAdd);
- if (!AnyArea(&vrect[irect]))
- {
- vrect.erase(vrect.begin() + irect);
- irect--;
- }
- if (!f)
- {
- fAnythingToAdd = false;
- break;
- }
- }
-
- // Now rectToAdd is in a state that it does not intersect with any other rectangles
- // in the list.
-
- if (fAnythingToAdd)
- vrect.push_back(rectToAdd);
-
- // Add in any extra rectangles that are needed to handle overlaps.
-
- for (irect = 0; irect < vrectMoreToAdd.size(); irect++)
- AddRectWithoutOverlaps(vrect, vrectMoreToAdd[irect]);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the rectangle has an area greater than 0.
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::AnyArea(Rect * prect)
-{
- Assert(prect->left <= prect->right);
- Assert(prect->top <= prect->bottom);
-
- return (prect->left < prect->right && prect->top < prect->bottom);
-}
-
-/*----------------------------------------------------------------------------------------------
- Adjust the rectangle prect2 to avoid overlaps with the given one in the vector.
- Return false if the rectangle does not need to be added after all.
-
- If we have to split this rectangle into two, add the second one to vrectMoreToAdd, so
- we can do the same process on it.
-
- If we can merge the two rectangles, add the result to vrectMoreToAdd (so it can be properly
- checked for further overlaps), and adjust the rectangle in the vector so it will be
- deleted.
-
- @param vrect - current list of valid rectangles
- @param irect - item in vrect we're comparing with prect2
- @param prect2 - rectangle to add
- @param vrectMoreToAdd - list of accumulated rectangles that need to be added
- (caused by splitting one into two)
-
- @return True if we want to add prect2 (possibly adjusted) to the list;
- false it it is completely subsumed by vrect[irect], or has been merged with it,
- or has no area.
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::AdjustRectsToNotOverlap(std::vector<Rect> & vrect, int irect, Rect * prect2,
- std::vector<Rect> & vrectMoreToAdd)
-{
- Rect * prect1 = &(vrect[irect]);
-
- float xLeft1 = prect1->left;
- float xRight1 = prect1->right;
- float yTop1 = prect1->top;
- float yBottom1 = prect1->bottom;
- Assert(xLeft1 < xRight1);
- Assert(yTop1 < yBottom1);
-
- float xLeft2 = prect2->left;
- float xRight2 = prect2->right;
- float yTop2 = prect2->top;
- float yBottom2 = prect2->bottom;
- Assert(xLeft2 <= xRight2);
- Assert(yTop2 <= yBottom2);
-
- if (!AnyArea(prect2))
- return false;
-
- // No overlap: keep both as they are.
- if (yBottom2 < yTop1 || yBottom1 < yTop2)
- return true;
- if (xRight2 < xLeft1 || xRight1 < xLeft2)
- return true;
-
- // Present rect subsumes new: ignore new
- if (xLeft1 <= xLeft2 && xRight2 <= xRight1 && yTop1 <= yTop2 && yBottom2 <= yBottom1)
- return false;
-
- // New rect subsumes present: replace.
- if (xLeft2 <= xLeft1 && xRight1 <= xRight2 && yTop2 <= yTop1 && yBottom1 <= yBottom2)
- {
- prect1->bottom = prect1->top; // delete
- return true; // keep this one
- }
-
- // Abutting rectangles of same height or width: merge.
- if (yTop1 == yTop2 && yBottom1 == yBottom2)
- {
- if (xRight1 == xLeft2)
- {
- // prect2 is to the right
- prect2->left = prect1->left;
- vrectMoreToAdd.push_back(*prect2);
- prect1->bottom = prect1->top; // delete previous
- return false;
- }
- else if (xRight2 == xLeft1)
- {
- // prect2 is to the left
- prect2->right = prect1->right;
- vrectMoreToAdd.push_back(*prect2);
- prect1->bottom = prect1->top; // delete
- return false;
- }
- }
- if (xLeft1 == xLeft2 && xRight1 == xRight2)
- {
- if (yBottom1 == yTop2)
- {
- // prect2 is below
- prect2->top = prect1->top;
- vrectMoreToAdd.push_back(*prect2);
- prect1->bottom = prect1->top; // delete
- return false;
- }
- else if (yBottom2 == yTop1)
- {
- // prect2 is above
- prect2->bottom = prect1->bottom;
- vrectMoreToAdd.push_back(*prect2);
- prect1->bottom = prect1->top; // delete
- return false;
- }
- }
-
- // Abutting rectangles of different heights or widths: leave as they are.
- if (xRight1 == xLeft2 || xRight2 == xLeft1)
- return true;
- if (yBottom1 == yTop2 || yBottom2 == yTop1)
- return true;
-
- // Overlapping on one axis: adjust smaller rectangle
- if (yTop1 <= yTop2 && yBottom2 <= yBottom1)
- {
- if (xLeft1 <= xLeft2 && xLeft2 < xRight1)
- {
- Assert(xRight1 < xRight2); // otherwise rect2 is subsumed
- prect2->left = prect1->right;
- return true;
- }
- else if (xLeft1 < xRight2 && xRight2 <= xRight1)
- {
- Assert(xLeft2 < xLeft1); // otherwise rect2 is subsumed
- prect2->right = prect1->left;
- return true;
- }
- }
- else if (yTop2 <= yTop1 && yBottom1 <= yBottom2)
- {
- if (xLeft2 <= xLeft1 && xLeft1 < xRight2)
- {
- Assert(xRight2 < xRight1); // otherwise rect1 is subsumed
- prect1->left = prect2->right;
- return true;
- }
- else if (xLeft2 < xRight1 && xRight1 <= xRight2)
- {
- Assert(xLeft1 < xLeft2); // otherwise rect1 is subsumed
- prect1->right = prect2->left;
- return true;
- }
- }
-
- if (xLeft1 <= xLeft2 && xRight2 <= xRight1)
- {
- if (yTop1 <= yTop2 && yTop2 < yBottom1)
- {
- Assert(yBottom1 < yBottom2); // otherwise rect2 is subsumed
- prect2->top = prect1->bottom;
- return true;
- }
- else if (yTop1 < yBottom2 && yBottom2 <= yBottom1)
- {
- Assert(yTop2 < yTop1); // otherwise rect2 is subsumed
- prect2->bottom = prect1->top;
- return true;
- }
- }
- else if (xLeft2 <= xLeft1 && xRight1 <= xRight2)
- {
- if (yTop2 <= yTop1 && yTop1 < yBottom2)
- {
- Assert(yBottom2 < yBottom1); // otherwise rect1 is subsumed
- prect1->top = prect2->bottom;
- return true;
- }
- else if (yTop2 < yBottom1 && yBottom1 <= yBottom2)
- {
- Assert(yTop1 < yTop2); // otherwise rect1 is subsumed
- prect1->bottom = prect2->top;
- return true;
- }
- }
-
- // Centers overlap: break prect2 into two disjoint rectangles.
- if (xLeft1 < xLeft2 && xRight2 < xRight1 && yTop2 < yTop1 && yBottom1 < yBottom2)
- {
- // create a new rectangle for the bottom of prect2 that is below prect1
- Rect rectNew = *prect2;
- rectNew.top = prect1->bottom;
- prect2->bottom = prect1->top;
- vrectMoreToAdd.push_back(rectNew);
- return true;
- }
- else if (xLeft2 < xLeft1 && xRight1 < xRight2 && yTop1 < yTop2 && yBottom2 < yBottom1)
- {
- // create a new rectangle for the right of prect2 that is to the right of prect1
- Rect rectNew = *prect2;
- rectNew.left = prect1->right;
- prect2->right = prect1->left;
- vrectMoreToAdd.push_back(rectNew);
- return true;
- }
-
- // Corners overlap: break prect2 into two adjacent rectangles.
- if (xLeft1 < xLeft2 && xRight1 < xRight2)
- {
- // prect2 is partially to the right
- if (yTop1 < yTop2 && yBottom1 < yBottom2)
- {
- // prect2 is partially below
- Rect rectNew = *prect2;
- rectNew.left = prect1->right;
- prect2->top = prect1->bottom;
- vrectMoreToAdd.push_back(rectNew);
- return true;
- }
- else if (yTop2 < yTop1 && yBottom2 < yBottom1)
- {
- // prect2 is partially above
- Rect rectNew = *prect2;
- rectNew.left = prect1->right;
- prect2->bottom = prect1->top;
- vrectMoreToAdd.push_back(rectNew);
- return true;
- }
- }
- else if (xLeft2 < xLeft1 && xRight2 < xRight1)
- {
- // prect2 is partially to the left
- if (yTop1 < yTop2 && yBottom1 < yBottom2)
- {
- // prect2 is partially below
- Rect rectNew = *prect2;
- rectNew.right = prect1->left;
- prect2->top = prect1->bottom;
- vrectMoreToAdd.push_back(rectNew);
- return true;
- }
- else if (yTop2 < yTop1 && yBottom2 < yBottom1)
- {
- // prect2 is partially above
- Rect rectNew = *prect2;
- rectNew.right = prect1->left;
- prect2->bottom = prect1->top;
- vrectMoreToAdd.push_back(rectNew);
- return true;
- }
- }
-
- // No overlap.
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Assert that there are no overlaps among all the rectangles in the array, which should
- be the case if AdjustRectsToNotOverlap is working properly.
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::AssertNoOverlaps(std::vector<Rect> & vrect)
-{
-#ifdef _DEBUG
- for (int irect1 = 0; irect1 < signed(vrect.size() - 1); irect1++)
- {
- for (int irect2 = irect1 + 1; irect2 < signed(vrect.size()); irect2++)
- {
- float xLeft1 = vrect[irect1].left;
- float xRight1 = vrect[irect1].right;
- float yTop1 = vrect[irect1].top;
- float yBottom1 = vrect[irect1].bottom;
- Assert(xLeft1 < xRight1);
- Assert(yTop1 < yBottom1);
-
- float xLeft2 = vrect[irect2].left;
- float xRight2 = vrect[irect2].right;
- float yTop2 = vrect[irect2].top;
- float yBottom2 = vrect[irect2].bottom;
- Assert(xLeft2 <= xRight2);
- Assert(yTop2 <= yBottom2);
-
- Assert(xRight1 <= xLeft2 || xRight2 <= xLeft1 ||
- yBottom1 <= yTop2 || yBottom2 <= yTop1);
- }
- }
-#endif
-}
-
-/*----------------------------------------------------------------------------------------------
- Add the given line segment to the vector, eliminating any overlapping areas.
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::AddLineSegWithoutOverlaps(std::vector<LineSeg> & vls, LineSeg lsToAdd)
-{
- std::vector<LineSeg> vlsMoreToAdd;
-
- bool fAnythingToAdd = AnyLength(&lsToAdd);
-
- size_t ils;
- for (ils = 0; ils < vls.size(); ils++)
- {
- bool f = AdjustLineSegsToNotOverlap(vls, ils, &lsToAdd, vlsMoreToAdd);
- if (!AnyLength(&vls[ils]))
- {
- vls.erase(vls.begin() + ils);
- ils--;
- }
- if (!f)
- {
- fAnythingToAdd = false;
- break;
- }
- }
-
- // Now lsToAdd is in a state that it does not overlap with any other line segments
- // in the list.
-
- if (fAnythingToAdd)
- vls.push_back(lsToAdd);
-
- // Add in any extra line segments that are needed to handle overlaps.
-
- for (ils = 0; ils < vlsMoreToAdd.size(); ils++)
- AddLineSegWithoutOverlaps(vls, vlsMoreToAdd[ils]);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the rectangle has an area greater than 0.
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::AnyLength(LineSeg * pls)
-{
- Assert(pls->left <= pls->right);
- return (pls->left < pls->right);
-}
-
-/*----------------------------------------------------------------------------------------------
- Adjust the line segment pls2 to avoid overlaps with the given one in the vector.
- Return false if the line segment does not need to be added after all.
-
- If we can merge the two line segments, add the result to vrectMoreToAdd (so it can be properly
- checked for further overlaps), and adjust the rectangle in the vector so it will be
- deleted.
-
- @param vls - current list of valid line segments
- @param ils - item in vrect we're comparing with pls2
- @param pls2 - line segment to add
- @param vlsMoreToAdd - list of accumulated line segments that need to be added
- (caused by splitting one into two)
-
- @return True if we want to add pls2 (possibly adjusted) to the list;
- false it it is completely subsumed by vls[ils], or has been merged with it,
- or has no length.
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::AdjustLineSegsToNotOverlap(std::vector<LineSeg> & vls, int ils, LineSeg * pls2,
- std::vector<LineSeg> & vlsMoreToAdd)
-{
- LineSeg * pls1 = &(vls[ils]);
-
- float xLeft1 = pls1->left;
- float xRight1 = pls1->right;
- Assert(xLeft1 < xRight1);
-
- float xLeft2 = pls2->left;
- float xRight2 = pls2->right;
- Assert(xLeft2 <= xRight2);
-
- if (!AnyLength(pls2))
- return false;
-
- // No overlap: keep both as they are.
- if (xRight2 < xLeft1 || xRight1 < xLeft2)
- return true;
-
- // Present line segment subsumes new: ignore new
- if (xLeft1 <= xLeft2 && xRight2 <= xRight1)
- return false;
-
- // New line segment subsumes present: replace.
- if (xLeft2 <= xLeft1 && xRight1 <= xRight2)
- {
- pls1->left = pls1->right; // delete previous
- return true; // keep this one
- }
-
- // Adjacent or partially overlapping line segments: merge.
- if (xLeft1 <= xLeft2 && xLeft2 <= xRight1 && xRight1 <= xRight2)
- {
- pls2->left = xLeft1;
- vlsMoreToAdd.push_back(*pls2);
- pls1->left = pls1->right; // delete previous
- return false;
- }
- else if (xLeft2 <= xLeft1 && xLeft1 <= xRight2 && xRight2 <= xRight1)
- {
- pls2->right = xRight1;
- vlsMoreToAdd.push_back(*pls2);
- pls1->left = pls1->right; // delete previous
- return false;
- }
- else
- Assert(false);
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Assert that there are no overlaps among all the rectangles in the array, which should
- be the case if AdjustRectsToNotOverlap is working properly.
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::AssertNoOverlaps(std::vector<LineSeg> & vls)
-{
-#ifdef _DEBUG
- for (int ils1 = 0; ils1 < (int)vls.size() - 1; ils1++)
- {
- for (int ils2 = ils1 + 1; ils2 < (int)vls.size(); ils2++)
- {
- float xLeft1 = vls[ils1].left;
- float xRight1 = vls[ils1].right;
- Assert(xLeft1 < xRight1);
-
- float xLeft2 = vls[ils2].left;
- float xRight2 = vls[ils2].right;
- Assert(xLeft2 <= xRight2);
-
- Assert(xRight1 <= xLeft2 || xRight2 <= xLeft1);
- }
- }
-#endif
-}
-
-/*----------------------------------------------------------------------------------------------
- Find the next physical location for the IP. Return true if we found one.
-
- @param pichw - current insertion point, and adjusted result to return
- @param pfAssocPrev - is the IP "leaning" backwards? adjust to return
- @param fRight - true if we are moving right
- @param fAssocPrevMatch - the assoc-prev of the result must match the original selection.
- This is used when extending range selections; the orientation
- of the resulting end-point must be the same as previously.
- This helps avoids circular loops when dealing with reordering.
- @param fAssocPrevNeeded - value needed for result; ignored if fAssocPrevMatch == false
- @param pnNextOrPrevSeg - return 1 if we need to try the following segment, -1 if we
- need to try the previous - CURRENTLY NOT USED for anything
- practical
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::ArrowKeyPositionInternal(
- int * pichw, bool * pfAssocPrev,
- bool fRight, bool fAssocPrevMatch, bool fAssocPrevNeeded, int * pnNextOrPrevSeg)
-{
- int kBefore = true;
- int kAfter = false;
-
- bool fResult = false;
-
- // Handle ligatures.
-
- fResult = AdjacentLigComponent(pichw, pfAssocPrev, fRight, true);
- if (fResult)
- return true;
-
- // Not within a ligature, or on the outside edge of one.
-
- int iginfStart;
- bool fCharRtl;
- if (*pfAssocPrev)
- {
- iginfStart = m_pseg->UnderlyingToPhysicalSurface(*pichw - 1, kAfter);
- fCharRtl = m_pseg->CharIsRightToLeft(*pichw - 1, kAfter);
- }
- else
- {
- iginfStart = m_pseg->UnderlyingToPhysicalSurface(*pichw, kBefore);
- fCharRtl = m_pseg->CharIsRightToLeft(*pichw, kBefore);
- }
- if (kNegInfinity == iginfStart || kPosInfinity == iginfStart)
- {
- *pnNextOrPrevSeg = 0;
- return false;
- }
-
- //if (*pfAssocPrev)
- // fCharRtl ? iginfStart : iginfStart++;
- //else
- // fCharRtl ? iginfStart++ : iginfStart;
-
- if (*pfAssocPrev)
- iginfStart++;
-
- // At this point iginfStart indicates the index of the glyph we are before.
-
- int ichwNewIndex;
- bool fAPNew;
-
- bool fRtl = m_pseg->rightToLeft();
- bool fForward = (fRtl) ? !fRight : fRight;
- int dir = (fForward) ? 1 : -1;
- int diginf = 0;
-
- // When moving forward, we first move to the opposite side of the current glyph,
- // so initially diginf should be zero.
- if (fForward)
- diginf = -1;
-
- while (true)
- {
- diginf++;
- int iginfTry = iginfStart + (dir * diginf);
-
- if (iginfTry < 0)
- {
- *pnNextOrPrevSeg = -1;
- return false;
- }
- if (iginfTry > m_pseg->m_cginf)
- {
- *pnNextOrPrevSeg = 1;
- return false;
- }
- if (iginfTry == m_pseg->m_cginf && fForward)
- {
- *pnNextOrPrevSeg = 1;
- return false;
- }
-
- bool fAfter;
- int ichwTryChar;
- if (iginfTry == m_pseg->m_cginf)
- {
- ichwTryChar = m_pseg->PhysicalSurfaceToUnderlying(iginfTry - 1,
- kPosInfFloat, kPosInfFloat, 0, 0, &fAfter);
- }
- else
- {
- ichwTryChar = m_pseg->PhysicalSurfaceToUnderlying(iginfTry,
- (fRight) ? kPosInfFloat : kNegInfFloat,
- (fRight) ? kPosInfFloat : kNegInfFloat,
- 0, 0, &fAfter);
- }
-
- if (fAfter)
- {
- ichwNewIndex = ichwTryChar + 1;
- fAPNew = true;
- }
- else
- {
- ichwNewIndex = ichwTryChar;
- fAPNew = false;
- }
-
- if (ichwNewIndex == *pichw)
- continue; // didn't make any progress
-
- LgIpValidResult ipvr = isValidInsertionPoint(ichwNewIndex);
- if (ipvr == kipvrBad)
- continue; // bad insertion point
-
- if (fAssocPrevMatch && (fAssocPrevNeeded != fAPNew))
- {
- // Try switching fAPNew and see if that gives the right result
- bool fAPAlt = !fAPNew;
- int iginfAlt = m_pseg->UnderlyingToPhysicalSurface(
- fAPAlt ? ichwTryChar - 1 : ichwTryChar + 1,
- fAPAlt ? kAfter : kBefore);
- fCharRtl = m_pseg->CharIsRightToLeft(
- fAPAlt ? ichwTryChar - 1 : ichwTryChar + 1,
- fAPAlt ? kAfter : kBefore);
-
- if (fAPAlt)
- fCharRtl ? iginfAlt : iginfAlt++;
- else
- fCharRtl ? iginfAlt++ : iginfAlt;
-
- if ((fForward && iginfAlt <= iginfStart)
- || (!fForward && iginfAlt >= iginfStart))
- {
- // Switching fAPNew would cause us to move in the opposite direction, so
- // that's not a good solution. Keep going.
- if ((iginfStart == 0 && !fForward) || (iginfStart == m_pseg->m_cginf && fForward))
- {
- // Can't go any further, so go with this even though AP is wrong.
- }
- else
- continue;
- }
- fAPNew = fAPAlt;
- }
- break;
- }
-
- // If we have a selection within a ligature, adjust to either the right-most or the
- // left-most.
- AdjacentLigComponent(&ichwNewIndex, &fAPNew, fRight, false);
-
- *pichw = ichwNewIndex;
- *pfAssocPrev = fAPNew;
- return true;
-}
-
-/****** OLD VERSION
-bool Segment::ArrowKeyPositionInternal(
- int * pichw, bool * pfAssocPrev,
- bool fRight, bool fAssocPrevMatch, bool fAssocPrevNeeded, int * pnNextOrPrevSeg)
-{
- int kBefore = true;
- int kAfter = false;
-
- bool fResult = false;
-
- // Handle ligatures.
-
- fResult = AdjacentLigComponent(pichw, pfAssocPrev, fRight, true);
- if (fResult)
- return true;
-
- // Not within a ligature, or on the outside edge of one.
-
- int igbbOutput;
- bool fCharRtl;
- if (*pfAssocPrev)
- {
- igbbOutput = UnderlyingToPhysicalSurface(*pichw - 1, kAfter);
- fCharRtl = CharIsRightToLeft(*pichw - 1, kAfter);
- }
- else
- {
- igbbOutput = UnderlyingToPhysicalSurface(*pichw, kBefore);
- fCharRtl = CharIsRightToLeft(*pichw, kBefore);
- }
- if (kNegInfinity == igbbOutput || kPosInfinity == igbbOutput)
- {
- *pnNextOrPrevSeg = 0;
- return false;
- }
-
- if (*pfAssocPrev)
- fCharRtl ? igbbOutput : igbbOutput++;
- else
- fCharRtl ? igbbOutput++ : igbbOutput;
-
- bool fBackward = (fRight == m_fWsRtl);
-
- // Try to find an underlying position that would produce an IP in the expected place.
- // First look in the same direction in the underlying text, then, if necessary, try the
- // opposite direction (which may be necessary when reordering occurred).
-
- int igbbNeed = (fRight) ? igbbOutput + 1 : igbbOutput - 1;
- int ichwNew;
- bool fAssocPrevNew;
-
- while (0 <= igbbNeed && igbbNeed <= NumGbb()) // include end-points--we may need to
- // be before or after them.
- {
- int dichwInc = fBackward ? -1 : 1;
- int dichwLim = m_ichwMin + (fBackward ? 0 : m_dichwLim);
-
- int nDirectionsTried = 0;
-// while (nDirectionsTried < 2) -- Nope, for now we are being very strict above moving
- while (nDirectionsTried < 1) // only in the desired direction
- {
- for (int ichwTry = *pichw;
- ((dichwInc == 1 && ichwTry <= dichwLim) ||
- (dichwInc == -1 && ichwTry >= dichwLim));
- ichwTry += dichwInc)
- {
- int igbbTry = UnderlyingToPhysicalSurface(ichwTry, kBefore);
- fCharRtl = CharIsRightToLeft(ichwTry, kBefore);
- igbbTry = fCharRtl ? igbbTry + 1 : igbbTry;
- if (igbbTry == igbbNeed &&
- (ichwTry != *pichw || *pfAssocPrev) &&
- (!fAssocPrevMatch || !fAssocPrevNeeded))
- {
- ichwNew = ichwTry;
- fAssocPrevNew = false;
- goto LFixLigatures;
- }
-
- igbbTry = UnderlyingToPhysicalSurface(ichwTry - 1, kAfter);
- fCharRtl = CharIsRightToLeft(ichwTry - 1, kAfter);
- igbbTry = fCharRtl ? igbbTry : igbbTry + 1;
- if (igbbTry == igbbNeed &&
- (ichwTry != *pichw || !*pfAssocPrev) &&
- (!fAssocPrevMatch || fAssocPrevNeeded))
- {
- ichwNew = ichwTry;
- fAssocPrevNew = true;
- goto LFixLigatures;
- }
- }
-
- nDirectionsTried++;
-
- // Didn't find an answer going the expected way; try the opposite direction.
- dichwInc = (fRight) ? -1 : 1;
- dichwLim = m_ichwMin + ((fRight) ? 0 : m_dichwLim);
- }
-
- // Didn't find an underlying position that would produce an IP in the next glyph;
- // try the glyph after that.
-
- igbbNeed = (fRight) ? igbbNeed + 1 : igbbNeed - 1;
- }
-
- if (igbbNeed >= NumGbb())
- *pnNextOrPrevSeg = 1; // try next segment
- else if (igbbNeed < 0)
- *pnNextOrPrevSeg = -1; // try previous segment
- else
- {
- Assert(false);
- *pnNextOrPrevSeg = 0;
- }
-
- return false;
-
-LFixLigatures:
-
- // If we have a selection within a ligature, adjust to either the right-most or the
- // left-most.
- AdjacentLigComponent(&ichwNew, &fAssocPrevNew, fRight, false);
-
- *pichw = ichwNew;
- *pfAssocPrev = fAssocPrevNew;
- return true;
-}
-******************/
-
-/*----------------------------------------------------------------------------------------------
- Return position for the physically next or previous ligature component, or the right-most
- or left-most. Return true if this routine handled it.
-
- @param pichw - starting underlying position
- @param pfAssocPrev - is selection leaning backwards?
- @param fMovingRight - true if right arrow key was pressed, false if left
- @param fMove - if true, we want to find the next one over from *pichw;
- if false, we want to find either the right-most
- (fMovingRight = false)
- or the left-most (fMovingRight = true)
-----------------------------------------------------------------------------------------------*/
-bool SegmentPainter::AdjacentLigComponent(int * pichw, bool * pfAssocPrev,
- bool fMovingRight, bool fMove)
-{
- int kBefore = true;
- int kAfter = false;
-
- GrEngine * pgreng = m_pseg->EngineImpl();
- GrGlyphTable * pgtbl = (pgreng) ? pgreng->GlyphTable() : NULL;
-
- if (!pgtbl)
- {
- return false;
- }
-
- // Find the slot containing the ligature glyph.
-
- int ichwSegOffset = *pichw - m_pseg->m_ichwMin;
- int isloutLig = kNegInfinity;
- if (*pfAssocPrev)
- {
- if (ichwSegOffset - 1 >= m_pseg->m_ichwAssocsMin && ichwSegOffset - 1 < m_pseg->m_ichwAssocsLim)
- isloutLig = m_pseg->m_prgisloutLigature[ichwSegOffset - 1 - m_pseg->m_ichwAssocsMin];
- }
- else
- {
- if (ichwSegOffset >= m_pseg->m_ichwAssocsMin && ichwSegOffset < m_pseg->m_ichwAssocsLim)
- isloutLig = m_pseg->m_prgisloutLigature[ichwSegOffset - m_pseg->m_ichwAssocsMin];
- }
-
- if (isloutLig == kNegInfinity)
- {
- return false;
- }
-
- if (*pfAssocPrev)
- ichwSegOffset--;
-
- bool fGlyphRtl = (*pfAssocPrev) ?
- m_pseg->CharIsRightToLeft(*pichw - 1, kAfter) :
- m_pseg->CharIsRightToLeft(*pichw, kBefore);
-
- // Comparing right-sides.
- bool fIPOnRight = (fGlyphRtl != *pfAssocPrev);
-
- // When two ligatures are horizontally equal, take vertical position into account.
- // In left-to-right writing systems, moving right means moving down.
- bool fMovingDown = (fMovingRight != m_pseg->m_fWsRtl);
-
- // Get the coordinates for all the ligatures.
-
- std::vector<float> vysTops;
- std::vector<float> vysBottoms;
- std::vector<float> vxsLefts;
- std::vector<float> vxsRights;
-
- float ysTopCurr, ysBottomCurr, xsLeftCurr, xsRightCurr;
- int icompCurr = -1;
- if (fMovingRight)
- ysTopCurr = ysBottomCurr = xsLeftCurr = xsRightCurr = kNegInfFloat;
- else
- ysTopCurr = ysBottomCurr = xsLeftCurr = xsRightCurr = kPosInfFloat;
-
- GrSlotOutput * pslout = m_pseg->OutputSlot(isloutLig);
- //int iginfOutput = m_pseg->LogicalToPhysicalSurface(isloutLig);
-
- int icomp;
- for (icomp = 0; icomp < pslout->NumberOfComponents(); icomp++)
- {
- float xsLeft, ysTop, xsRight, ysBottom;
-
- // TODO: Rework ComponentIndexForGlyph to take slati rather than iForGlyph.
- int slati = pslout->ComponentId(icomp);
- int iForGlyph = pgtbl->ComponentIndexForGlyph(pslout->GlyphID(), slati);
- pgtbl->ComponentBoxLogUnits(m_pseg->m_xysEmSquare, pslout->GlyphID(), iForGlyph,
- m_pseg->m_mFontEmUnits, m_pseg->m_dysAscent,
- &xsLeft, &ysTop, &xsRight, &ysBottom);
-
- vysTops.push_back(ysTop);
- vysBottoms.push_back(ysBottom);
- vxsLefts.push_back(xsLeft);
- vxsRights.push_back(xsRight);
-
- // If we're moving, record this component as the one we're moving relative to.
- if (fMove && icomp == m_pseg->m_prgiComponent[ichwSegOffset - m_pseg->m_ichwAssocsMin])
- {
- icompCurr = icomp;
- ysTopCurr = ysTop;
- ysBottomCurr = ysBottom;
- xsLeftCurr = xsLeft;
- xsRightCurr = xsRight;
- }
- }
-
- float xsHorizCurr = (fIPOnRight) ? xsRightCurr : xsLeftCurr;
- float xsHorizNext;
-
- // Find the first ligature that is in the proper direction.
- int icompNext;
- for (icompNext = 0; icompNext < pslout->NumberOfComponents(); icompNext++)
- {
- if (icompNext != icompCurr)
- {
- float xsHorizNext = (fIPOnRight) ? vxsRights[icompNext] : vxsLefts[icompNext];
- if (fMovingRight && xsHorizNext > xsHorizCurr)
- break;
- else if (!fMovingRight && xsHorizNext < xsHorizCurr)
- break;
- }
- }
- if (icompNext == pslout->NumberOfComponents())
- {
- bool fResult;
- // No component in the proper direction. Can we switch to the opposite edge of the
- // current component?
- if (fMovingRight && !fIPOnRight)
- {
- if (fGlyphRtl)
- --(*pichw);
- else
- ++(*pichw);
- *pfAssocPrev = !*pfAssocPrev;
- fResult = true;
- }
- else if (!fMovingRight && fIPOnRight)
- {
- if (fGlyphRtl)
- ++(*pichw);
- else
- --(*pichw);
-
- *pfAssocPrev = !*pfAssocPrev;
- fResult = true;
- }
- else
- fResult = false;
- return fResult;
- }
-
- xsHorizNext = (fIPOnRight) ? vxsRights[icompNext] : vxsLefts[icompNext];
-
- // Now find the closest one in the proper direction.
- for (icomp = icompNext + 1; icomp < pslout->NumberOfComponents(); icomp++)
- {
- if (icomp != icompCurr)
- {
- float xsHorizTry = (fIPOnRight) ? vxsRights[icomp] : vxsLefts[icomp];
-
- if (fMovingRight && xsHorizTry > xsHorizCurr &&
- (xsHorizTry < xsHorizNext ||
- (xsHorizTry == xsHorizNext &&
- (vysTops[icomp] > vysTops[icompNext]) == fMovingDown)))
- {
- icompNext = icomp;
- xsHorizNext = xsHorizTry;
- }
- else if (!fMovingRight && xsHorizTry < xsHorizCurr &&
- (xsHorizTry > xsHorizNext ||
- (xsHorizTry == xsHorizNext &&
- (vysTops[icomp] > vysTops[icompNext]) == fMovingDown)))
- {
- icompNext = icomp;
- xsHorizNext = xsHorizTry;
- }
- }
- }
-
- *pichw = pslout->UnderlyingComponent(icompNext) + m_pseg->m_ichwMin;
- if (*pfAssocPrev)
- ++(*pichw);
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Scale the x-coordinate by the scaling factors for this painter.
-----------------------------------------------------------------------------------------------*/
-float SegmentPainter::ScaleX(float xs, Rect rs, Rect rd)
-{
- //return rs.MapXTo(xs, rd);
-
- float dxs = rs.right - rs.left;
- float dxd = rd.right - rd.left;
- Assert(dxs > 0);
- if (dxs == dxd)
- return xs + rd.left - rs.left;
-
- float xd = rd.left + GrEngine::GrFloatMulDiv((xs - rs.left), dxd, dxs);
- return xd;
-}
-
-/*----------------------------------------------------------------------------------------------
- Scale the y-coordinate by the scaling factors for this painter.
-----------------------------------------------------------------------------------------------*/
-float SegmentPainter::ScaleY(float ys, Rect rs, Rect rd)
-{
- //return rs.MapYTo(ys, rd);
-
- float dys = rs.bottom - rs.top;
- float dyd = rd.bottom - rd.top;
- Assert(dys > 0);
- if (dys == dyd)
- return ys + rd.top - rs.top;
- float yd = rd.top + GrEngine::GrFloatMulDiv((ys - rs.top), dyd, dys);
- return yd;
-}
-
-
-//:>********************************************************************************************
-//:> Low-level platform-specific drawing methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Make sure the font is set to use the character properties required by this segment.
-----------------------------------------------------------------------------------------------*/
-void SegmentPainter::SetFontProps(unsigned long clrFore, unsigned long clrBack)
-{
- return;
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/FileInput.cpp b/Build/source/libs/graphite-engine/src/segment/FileInput.cpp
deleted file mode 100644
index 52969532cd3..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/FileInput.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: FileInput.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Contains the functions for reading from a TT file. (These are functions, not methods
- associated with a class.)
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-
-#include "GrCommon.h"
-#include "GrData.h"
-#ifndef _WIN32
-#include "GrMstypes.h"
-#endif
-#include "GrDebug.h"
-#include <fstream>
-#include <iostream>
-#include <string>
-#include "FileInput.h"
-#include "GrResult.h"
-
-//#ifndef _MSC_VER
-//#include "config.h"
-//#endif
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods of GrBufferIStream
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Constructor.
-----------------------------------------------------------------------------------------------*/
-GrBufferIStream::GrBufferIStream()
-{
- m_pbStart = NULL;
- m_pbNext = NULL;
- m_pbLim = NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-GrBufferIStream::~GrBufferIStream()
-{
- Close();
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the stream.
-----------------------------------------------------------------------------------------------*/
-#ifdef GR_FW
-bool GrBufferIStream::Open(std::wstring stuFileName, int kMode)
-#else
-bool GrBufferIStream::Open(const char * pcFileName, std::ios::openmode kMode)
-#endif
-{
- Assert(false); // use OpenBuffer
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the stream to a buffer.
-----------------------------------------------------------------------------------------------*/
-bool GrBufferIStream::OpenBuffer(byte * pbBuffer, int cb)
-{
- Assert(m_pbStart == NULL);
- Assert(m_pbNext == NULL);
- Assert(m_pbLim == NULL);
-
- m_pbStart = pbBuffer;
- m_pbNext = pbBuffer;
- if (cb > 0)
- m_pbLim = m_pbStart + cb;
- // otherwise we don't know the length
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Close the stream.
-----------------------------------------------------------------------------------------------*/
-void GrBufferIStream::Close()
-{
- m_pbStart = NULL;
- m_pbNext = NULL;
- m_pbLim = NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read a byte from the stream.
-----------------------------------------------------------------------------------------------*/
-byte GrBufferIStream::ReadByteFromFont()
-{
- byte bInput = *m_pbNext;
- m_pbNext += isizeof(byte);
- if (m_pbLim && m_pbNext > m_pbLim)
- THROW(kresReadFault);
- return bInput;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read a short (signed 16-bit) word from the stream. Switch the bytes from big-endian
- to little-endian format.
-----------------------------------------------------------------------------------------------*/
-short GrBufferIStream::ReadShortFromFont()
-{
- short snInput = *(short *)m_pbNext;
- m_pbNext += isizeof(short);
- if (m_pbLim && m_pbNext > m_pbLim)
- THROW(kresReadFault);
- snInput = lsbf(snInput);
- return snInput;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read a wide character (unsigned 16-bit word) from the stream.
- Switch the bytes from big-endian to little-endian format.
-----------------------------------------------------------------------------------------------*/
-utf16 GrBufferIStream::ReadUShortFromFont()
-{
- utf16 chwInput = *(utf16 *)m_pbNext;
- m_pbNext += isizeof(utf16);
- if (m_pbLim && m_pbNext > m_pbLim)
- THROW(kresReadFault);
- chwInput = lsbf(chwInput);
- return chwInput;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read a standard (32-bit) word from the stream. Switch the bytes from big-endian
- to little-endian format.
-----------------------------------------------------------------------------------------------*/
-int GrBufferIStream::ReadIntFromFont()
-{
- int nInput = *(int *)m_pbNext;
- m_pbNext += isizeof(int);
- if (m_pbLim && m_pbNext > m_pbLim)
- THROW(kresReadFault);
- nInput = lsbf(nInput);
- return nInput;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read a block of data from the stream. DON'T switch the bytes from big-endian
- to little-endian format.
-----------------------------------------------------------------------------------------------*/
-void GrBufferIStream::ReadBlockFromFont(void * pvInput, int cb)
-{
- std::copy(m_pbNext, m_pbNext + cb, reinterpret_cast<byte*>(pvInput));
- m_pbNext += cb;
- if (m_pbLim && m_pbNext > m_pbLim)
- THROW(kresReadFault);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the absolute position of the font-file stream (relative to the beginning of
- the file). For buffers, we just return the byte position in the buffer.
-----------------------------------------------------------------------------------------------*/
-void GrBufferIStream::GetPositionInFont(long * plPos)
-{
- *plPos = (m_pbNext - m_pbStart);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the position of the font-file stream to the given absolute position (relative
- to the beginning of the file). For buffers, assume the position is relative to the
- beginning of the buffer.
-----------------------------------------------------------------------------------------------*/
-void GrBufferIStream::SetPositionInFont(long lPos)
-{
- m_pbNext = m_pbStart + lPos;
- if (m_pbLim && m_pbNext > m_pbLim)
- THROW(kresReadFault);
-}
-
-
-//:>********************************************************************************************
-//:> Swap byte order.
-//:>********************************************************************************************
-int swapb(int nArg)
-{
-#if WORDS_BIGENDIAN
-return nArg;
-#else
- int b1, b2, b3, b4;
- b1 = ((nArg & 0xFF000000) >> 24) & 0x000000FF; // remove sign extension
- b2 = ((nArg & 0x00FF0000) >> 8); // & 0x0000FF00;
- b3 = ((nArg & 0x0000FF00) << 8); // & 0x00FF0000;
- b4 = ((nArg & 0x000000FF) << 24); // & 0xFF000000;
- int nRet = b1 | b2 | b3 | b4;
- return nRet;
-#endif
-}
-
-unsigned int swapb(unsigned int nArg)
-{
-#if WORDS_BIGENDIAN
-return nArg;
-#else
- int b1, b2, b3, b4;
- b1 = ((nArg & 0xFF000000) >> 24) & 0x000000FF; // remove sign extension
- b2 = ((nArg & 0x00FF0000) >> 8); // & 0x0000FF00;
- b3 = ((nArg & 0x0000FF00) << 8); // & 0x00FF0000;
- b4 = ((nArg & 0x000000FF) << 24); // & 0xFF000000;
- int nRet = b1 | b2 | b3 | b4;
- return nRet;
-#endif
-}
-
-utf16 swapb(utf16 chwArg)
-{
-#if WORDS_BIGENDIAN
-return chwArg;
-#else
- utf16 b1, b2;
- b1 = ((chwArg & 0xFF00) >> 8) & 0x00FF; // remove sign extension
- b2 = ((chwArg & 0x00FF) << 8); // & 0xFF00;
- utf16 chwRet = b1 | b2;
- return chwRet;
-#endif
-}
-
-short swapb(short snArg)
-{
-#if WORDS_BIGENDIAN
-return snArg;
-#else
- short b1, b2;
- b1 = ((snArg & 0xFF00) >> 8) & 0x00FF; // remove sign extension
- b2 = ((snArg & 0x00FF) << 8); // & 0xFF00;
- short snRet = b1 | b2;
- return snRet;
-#endif
-}
-
-} //namespace gr
-
diff --git a/Build/source/libs/graphite-engine/src/segment/FileInput.h b/Build/source/libs/graphite-engine/src/segment/FileInput.h
deleted file mode 100644
index f8c32b762eb..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/FileInput.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: FileInput.h
-Responsibility: Sharon Correll
-Last reviewed: not yet
-
-Description:
- Defines utility functions for reading from a font file.
-----------------------------------------------------------------------------------------------*/
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef FILEINPUT_INCLUDED
-#define FILEINPUT_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-int swapb(int nArg);
-unsigned int swapb(unsigned int nArg);
-utf16 swapb(utf16 chwArg);
-short swapb(short snArg);
-
-// Most significant byte first (converting from least-sig-first):
-inline int msbf(int nArg) { return swapb(nArg); }
-inline unsigned int msbf(unsigned int nArg) { return swapb(nArg); }
-inline utf16 msbf(utf16 chwArg) { return swapb(chwArg); }
-inline short msbf(short chwArg) { return swapb(chwArg); }
-
-// Least significant byte first (converting from most-sig first):
-inline int lsbf(int nArg) { return swapb(nArg); }
-inline unsigned int lsbf(unsigned int nArg) { return swapb(nArg); };
-inline utf16 lsbf(utf16 chwArg) { return swapb(chwArg); }
-inline short lsbf(short chwArg) { return swapb(chwArg); }
-
-class GrIStream
-{
-public:
- virtual void Close() = 0;
-
- virtual byte ReadByteFromFont() = 0;
- virtual short ReadShortFromFont() = 0;
- virtual utf16 ReadUShortFromFont() = 0;
- virtual int ReadIntFromFont() = 0;
- virtual void ReadBlockFromFont(void * pvInput, int cb) = 0;
-
- virtual void GetPositionInFont(long * plPos) = 0;
- virtual void SetPositionInFont(long lPos) = 0;
-
- virtual bool OpenBuffer(byte * pbBuffer, int cb) = 0;
- virtual void CloseBuffer() = 0;
-
-protected:
- virtual ~GrIStream() {}
-};
-
-
-/*----------------------------------------------------------------------------------------------
- A stream that reads from a buffer rather than a file.
-----------------------------------------------------------------------------------------------*/
-class GrBufferIStream : public GrIStream
-{
-public:
- GrBufferIStream();
- ~GrBufferIStream();
-
- #ifdef GR_FW
- virtual bool Open(std::wstring stuFileName, std::ios::openmode kMode);
- #else
- virtual bool Open(const char * pcFileName, std::ios::openmode kMode);
- #endif
- virtual void Close();
-
- virtual byte ReadByteFromFont();
- virtual short ReadShortFromFont();
- virtual utf16 ReadUShortFromFont();
- virtual int ReadIntFromFont();
- virtual void ReadBlockFromFont(void * pvInput, int cb);
-
- virtual void GetPositionInFont(long * plPos);
- virtual void SetPositionInFont(long lPos);
-
- virtual bool OpenBuffer(byte * pbBuffer, int cb);
- virtual void CloseBuffer()
- {
- Close();
- }
-
-protected:
- byte * m_pbStart;
- byte * m_pbNext;
- byte * m_pbLim;
-};
-
-} // namespace gr
-
-#endif // !FILEINPUT_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/FontCache.cpp b/Build/source/libs/graphite-engine/src/segment/FontCache.cpp
deleted file mode 100644
index f0540463e3b..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/FontCache.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: FontCache.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A cache of all the font-face objects.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- Store the given font-face in the cache. Overwrite whatever was there before.
- Return NULL if there is nothing appropriate there.
-----------------------------------------------------------------------------------------------*/
-void FontCache::GetFontFace(std::wstring strFaceName, bool fBold, bool fItalic,
- FontFace ** ppfface)
-{
- int ifci = FindCacheItem(strFaceName);
- if (ifci < 0) // no fonts of that family present
- {
- *ppfface = NULL;
- return;
- }
-
- CacheItem * pfci = m_prgfci + ifci;
- if (fBold)
- {
- if (fItalic)
- *ppfface = pfci->pffaceBI;
- else
- *ppfface = pfci->pffaceBold;
- }
- else
- {
- if (fItalic)
- *ppfface = pfci->pffaceItalic;
- else
- *ppfface = pfci->pffaceRegular;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Store the given font-face in the cache. Overwrite whatever was there before.
-----------------------------------------------------------------------------------------------*/
-void FontCache::CacheFontFace(std::wstring strFaceName, bool fBold, bool fItalic,
- FontFace * pfface)
-{
- if (m_prgfci == NULL)
- Initialize();
-
- int ifciIns = FindCacheItem(strFaceName);
- int ifci = ifciIns;
- if (ifciIns < 0)
- {
- ifci = (ifciIns + 1) * -1;
- InsertCacheItem(ifci);
- std::copy(strFaceName.c_str(), strFaceName.c_str() +
- (strFaceName.size() + 1), m_prgfci[ifci].szFaceName);
- }
-
- CacheItem * pfci = m_prgfci + ifci;
-
- bool fPrevNull;
- if (fBold)
- {
- if (fItalic)
- {
- fPrevNull = (pfci->pffaceBI == NULL);
- pfci->pffaceBI = pfface;
- }
- else
- {
- fPrevNull = (pfci->pffaceBold == NULL);
- pfci->pffaceBold = pfface;
- }
- }
- else
- {
- if (fItalic)
- {
- fPrevNull = (pfci->pffaceItalic == NULL);
- pfci->pffaceItalic = pfface;
- }
- else
- {
- fPrevNull = (pfci->pffaceRegular == NULL);
- pfci->pffaceRegular = pfface;
- }
- }
-
- if (fPrevNull && (pfface != NULL))
- m_cfface++;
-}
-
-/*----------------------------------------------------------------------------------------------
- Remove the given font-face from the cache. Return false if it couldn't be found.
-----------------------------------------------------------------------------------------------*/
-bool FontCache::RemoveFontFace(std::wstring strFaceName, bool fBold, bool fItalic,
- bool fZapCache)
-{
- int ifci = FindCacheItem(strFaceName);
- if (ifci < 0)
- {
- return false;
- }
-
- bool fPrevVal;
- CacheItem * pfci = m_prgfci + ifci;
- if (fBold)
- {
- if (fItalic)
- {
- fPrevVal = (pfci->pffaceBI != NULL);
- pfci->pffaceBI = NULL;
- }
- else
- {
- fPrevVal = (pfci->pffaceBold != NULL);
- pfci->pffaceBold = NULL;
- }
- }
- else
- {
- if (fItalic)
- {
- fPrevVal = (pfci->pffaceItalic != NULL);
- pfci->pffaceItalic = NULL;
- }
- else
- {
- fPrevVal = (pfci->pffaceRegular != NULL);
- pfci->pffaceRegular = NULL;
- }
- }
-
- if (fPrevVal)
- m_cfface--;
-
- Assert(m_cfface >= 0);
-
- if (m_flush == kflushAuto && fZapCache)
- {
- DeleteIfEmpty();
- }
-
- return fPrevVal;
-}
-
-/*----------------------------------------------------------------------------------------------
- Search for the font-family in the cache and return its index.
- If not present, return a negative number indicating where it was expected.
-----------------------------------------------------------------------------------------------*/
-int FontCache::FindCacheItem(std::wstring strFaceName)
-{
- if (m_cfci == 0)
- return -1;
-
- Assert(m_prgfci);
-
- // Use a binary-chop search.
-
- int ifciLow = 0;
- int ifciHigh = m_cfci;
- while (true)
- {
- int ifciMid = (ifciHigh + ifciLow) >> 1; // divide by 2
- CacheItem * pfci = m_prgfci + ifciMid;
- int tst = wcscmp(strFaceName.c_str(), (const wchar_t *)pfci->szFaceName);
- if (tst == 0)
- return ifciMid; // found it
- if (ifciLow + 1 == ifciHigh)
- {
- // not there; return where expected: 0 -> -1, 1 -> -2
- Assert(ifciMid == ifciLow);
- if (tst < 0)
- return (ifciLow * -1) - 1;
- else
- return (ifciHigh * -1) - 1;
- }
-
- // Keep looking.
- if (tst < 0)
- ifciHigh = ifciMid;
- else
- ifciLow = ifciMid;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Insert space in the cache at location ifci.
-----------------------------------------------------------------------------------------------*/
-void FontCache::InsertCacheItem(int ifci)
-{
- if (m_cfci == m_cfciMax)
- {
- // Cache is full; double the space.
- CacheItem * m_prgfciOld = m_prgfci;
- m_prgfci = new CacheItem[m_cfciMax * 2];
- std::copy(m_prgfciOld, m_prgfciOld + m_cfciMax, m_prgfci);
- delete[] m_prgfciOld;
- m_cfciMax *= 2;
- }
-
- // This copy involves overlapping ranges, so we need copy_backward not copy
- // to satisfy the preconditions
- std::copy_backward(m_prgfci + ifci, m_prgfci + m_cfci, m_prgfci + m_cfci + 1);
- m_cfci++;
-
- // Initialize inserted item.
- CacheItem * pfci = m_prgfci + ifci;
- pfci->pffaceRegular = NULL;
- pfci->pffaceBold = NULL;
- pfci->pffaceItalic = NULL;
- pfci->pffaceBI = NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Delete the cache if it is empty.
-----------------------------------------------------------------------------------------------*/
-void FontCache::DeleteIfEmpty()
-{
- if (m_cfface <= 0)
- // All items are NULL; delete this cache. Probably this is because
- // the program is exiting.
- FontFace::ZapFontCache();
-}
-
-/*----------------------------------------------------------------------------------------------
- Check that the cache is indeed empty.
-----------------------------------------------------------------------------------------------*/
-void FontCache::AssertEmpty()
-{
-#ifdef _DEBUG
- for (int ifci = 0; ifci < m_cfci; ifci++)
- {
- CacheItem * pfci = m_prgfci + ifci;
- Assert(pfci->pffaceRegular == NULL);
- Assert(pfci->pffaceBold == NULL);
- Assert(pfci->pffaceItalic == NULL);
- Assert(pfci->pffaceBI == NULL);
- }
-#endif // _DEBUG
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the flush mode on the cache to indicate whether or not it should be deleted when
- it becomes empty.
-----------------------------------------------------------------------------------------------*/
-void FontCache::SetFlushMode(int flush)
-{
- m_flush = flush;
-
- if (m_flush == kflushAuto)
- {
- // Delete any font faces that have no remaining corresponding fonts.
- // Work backwards so as we remove items the loop still works.
- for (int ifci = m_cfci; --ifci >= 0; )
- {
- CacheItem * pfci = m_prgfci + ifci;
- if (pfci->pffaceRegular && pfci->pffaceRegular->NoFonts())
- RemoveFontFace(pfci->szFaceName, false, false, false);
- if (pfci->pffaceBold && pfci->pffaceBold->NoFonts())
- RemoveFontFace(pfci->szFaceName, true, false, false);
- if (pfci->pffaceItalic && pfci->pffaceItalic->NoFonts())
- RemoveFontFace(pfci->szFaceName, false, true, false);
- if (pfci->pffaceBI && pfci->pffaceBI->NoFonts())
- RemoveFontFace(pfci->szFaceName, true, true, false);
- }
-
- if (m_cfface <= 0)
- FontFace::ZapFontCache();
- }
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/FontCache.h b/Build/source/libs/graphite-engine/src/segment/FontCache.h
deleted file mode 100644
index 56da5ab26b8..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/FontCache.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: FontCache.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A cache of all the font-face objects known to mankind. There is exactly one instance
- of a FontCache.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef FONTCACHE_INCLUDED
-#define FONTCACHE_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-class FontFace;
-class FontMemoryUsage;
-
-/*----------------------------------------------------------------------------------------------
- TODO: change from a sorted list to a hash table, if performance so requires.
-----------------------------------------------------------------------------------------------*/
-class FontCache {
- friend class FontMemoryUsage;
-
-public:
- FontCache()
- {
- m_cfci = 0;
- m_prgfci = NULL;
- m_cfciMax = 0;
- m_cfface = 0;
- m_flush = kflushAuto;
- }
-
- ~FontCache()
- {
- delete[] m_prgfci;
- m_prgfci = NULL;
- m_cfci = 0;
- m_cfciMax = 0;
- m_cfface = 0;
- }
-
- void Initialize()
- {
- m_cfci = 0;
- m_prgfci = new CacheItem[12];
- m_cfciMax = 12;
- m_cfface = 0;
- }
-
- struct CacheItem
- {
- wchar_t szFaceName[32]; // type should match std::wstring
- FontFace * pffaceRegular;
- FontFace * pffaceBold;
- FontFace * pffaceItalic;
- FontFace * pffaceBI;
- };
-
- void GetFontFace(std::wstring strFaceName, bool fBold, bool fItalic, FontFace ** ppfface);
- void CacheFontFace(std::wstring strFaceName, bool fBold, bool fItalic, FontFace * pfface);
- bool RemoveFontFace(std::wstring strFaceName, bool fBold, bool fItalic, bool fZapCache = true);
- void DeleteIfEmpty();
- void AssertEmpty();
-
- int GetFlushMode()
- {
- return m_flush;
- }
- void SetFlushMode(int);
-
- // Debugging:
- //bool DbgCheckFontCache();
-
- void calculateMemoryUsage(FontMemoryUsage & fmu);
-
-protected:
- int FindCacheItem(std::wstring strFaceName);
- void InsertCacheItem(int ifci);
-
-protected:
- // member variables;
- int m_cfci; // number of items (font-families)
- int m_cfciMax; // amount of space available
- int m_cfface; // number of font-faces
- CacheItem * m_prgfci;
-
- int m_flush;
-};
-
-} // namespace gr
-
-
-#endif // !FONTCACHE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/FontFace.cpp b/Build/source/libs/graphite-engine/src/segment/FontFace.cpp
deleted file mode 100644
index 45461fe63ac..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/FontFace.cpp
+++ /dev/null
@@ -1,598 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrEngine.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description: Contains the implementation of the FontFace class.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#include <functional>
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-FontCache * FontFace::s_pFontCache = 0;
-
-//:>********************************************************************************************
-//:> New interface
-//:>********************************************************************************************
-/*----------------------------------------------------------------------------------------------
- Return the appropriate FontFace, initialized with Graphite tables.
- Called from the font constructor.
-----------------------------------------------------------------------------------------------*/
-FontFace * FontFace::GetFontFace(Font * pfont,
- std::wstring strFaceName, bool fBold, bool fItalic,
- bool fDumbFallback)
-{
- if (s_pFontCache == NULL)
- s_pFontCache = new FontCache;
-
- FontFace * pfface;
- s_pFontCache->GetFontFace(strFaceName, fBold, fItalic, &pfface);
- if (pfface)
- return pfface;
-
- // Create a new font face.
- pfface = new FontFace();
- pfface->InitFontFace(pfont, strFaceName, fBold, fItalic, fDumbFallback);
- return pfface;
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the engine using the given Graphite font.
-----------------------------------------------------------------------------------------------*/
-GrResult FontFace::InitFontFace(Font * pfont,
- std::wstring stuFaceName, bool fBold, bool fItalic,
- bool fDumbFallback)
-{
- AssertPtrN(pfont);
-
- m_pgreng = new GrEngine;
- m_pgreng->m_pfface = this;
-
- m_pgreng->m_nScriptTag = 0; // not currently used, but set it to something
-
- std::wstring stuFeatures;
-
- //stuFeatures = stuFeaturesArg;
-
- if (wcscmp(stuFaceName.c_str(), m_pgreng->m_stuFaceName.c_str()) != 0)
- {
- s_pFontCache->RemoveFontFace(m_pgreng->FaceName(), m_pgreng->Bold(), m_pgreng->Italic());
-
- m_pgreng->DestroyEverything(); // nothing we've cached is safe or useful.
- m_pgreng->m_stuFaceName = stuFaceName; // if this is buggy, using assign might fix it
- }
-
- //GrResult res = kresFail;
-//#ifdef GR_FW
-// // Read from the control file indicated by the registry, if any.
-// std::wstring stuFaceNameTmp;
-// stuFaceNameTmp.assign(rgchFaceName, wcslen(rgchFaceName));
-// res = InitFromControlFile(pfont, stuFaceName.c_str(), fBold, fItalic);
-//#endif // GR_FW
-
- // Read directly from the font.
- m_pgreng->DestroyContents();
- GrResult res = kresUnexpected;
- try {
- res = m_pgreng->ReadFontTables(pfont, fItalic);
- }
- catch (...)
- {
- if (fDumbFallback && m_pgreng->DumbFallback() && !m_pgreng->BadFont())
- {
- // If we have a basically good font but can't do Graphite,
- // just go with empty tables, which should be set up.
- res = m_pgreng->m_resFontRead;
- }
- else
- {
- if (m_cfonts == 0)
- {
- //s_pFontCache->DeleteIfEmpty();
- //Assert(s_pFontCache == 0);
- delete this; // will also delete GrEngine
- }
- else
- {
- delete m_pgreng;
- }
- m_pgreng = NULL;
- throw; // throw original exception
- }
- }
-
- m_pgreng->m_resFontValid = res;
-
- m_pgreng->m_fBold = fBold;
- m_pgreng->m_fItalic = fItalic;
-
- s_pFontCache->CacheFontFace(m_pgreng->FaceName(), fBold, fItalic, this);
-
- return m_pgreng->m_resFontValid;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the cmap and Graphite tables from the font that is selected into the graphics
- device.
-
- @return A GrResult indicating whether we were successful in loading the Graphite font:
- - kresOk means success
- - kresFail means the Graphite font could not be found or the basic font tables
- (head, name, cmap) could not be loaded
- - kresUnexpected means the Graphite tables could not be loaded
- - kresFalse means it is not a Graphite font at all (has no Silf table).
-----------------------------------------------------------------------------------------------*/
-GrResult GrEngine::ReadFontTables(Font * pfont, bool fItalic)
-{
- GrResult res = kresOk;
- m_ferr = kferrOkay;
- GrBufferIStream grstrm;
-
- FontException fexptn;
- fexptn.version = -1;
- fexptn.subVersion = -1;
-
- bool fOk = false;
-
- const void * pHeadTbl; const void * pSileTbl; const void * pSilfTbl;
- const void * pFeatTbl; const void * pGlatTbl; const void * pGlocTbl; const void * pSillTbl;
- //const void * pCmapTbl; const void * pNameTbl;
- size_t cbHeadSz, cbSilfSz, cbFeatSz, cbGlatSz, cbGlocSz, cbSillSz;
- //size_t cbCmapSz, cbSileSz, cbNameSz;
-
- m_fFakeItalic = false;
-
- bool fBasicTables = false;
- bool fSilf = false; // does the font have some sort of Silf table?
- int nCheckSum = 0;
-
- bool fBadBase = false,
- fMismatchedBase = false,
- fFontIsItalic = false;
-
- // First read the head table. This gives us the checksum that we are using as a
- // unique identifer. If it is the same as the one stored, and things appear set up,
- // don't reload the tables.
- res = (pHeadTbl = pfont->getTable(TtfUtil::TableIdTag(ktiHead), &cbHeadSz)) ? kresOk : kresFail;
- fOk = pHeadTbl && (cbHeadSz == 0 || TtfUtil::CheckTable(ktiHead, pHeadTbl, cbHeadSz));
- if (res == kresFail)
- {
- m_stuInitError = L"could not locate head table for Graphite rendering";
- m_ferr = kferrFindHeadTable;
- goto LUnexpected;
- }
- if (!fOk)
- {
- m_stuInitError = L"could not read design units for Graphite rendering";
- m_ferr = kferrReadDesignUnits;
- goto LUnexpected;
- }
- m_mFontEmUnits = TtfUtil::DesignUnits(pHeadTbl);
- nCheckSum = TtfUtil::HeadTableCheckSum(pHeadTbl);
- fFontIsItalic = TtfUtil::IsItalic(pHeadTbl);
-
- if (m_nFontCheckSum == nCheckSum && m_ptman)
- return m_resFontRead; // already initialized in some form
-
- DestroyContents();
-
- Assert(!m_ptman);
- Assert(!m_pctbl);
- Assert(!m_pgtbl);
- Assert(!m_prgpsd);
- m_prgpsd = NULL;
- m_cpsd = 0;
-
- m_ptman = new GrTableManager(this);
-
- m_fFakeItalic = (fItalic && !fFontIsItalic);
-
- // Look for an Sile table. If there is one, this is an extension font containing only
- // the Graphite tables. Read the base font name out of the Sile table, and use it to
- // read the cmap. Then replace the original font name to read the Graphite tables.
-
- m_fUseSepBase = false;
- m_stuBaseFaceName.erase();
-
- // TODO: rework the handling of the Sile table.
- pSileTbl = NULL;
- //pSileTbl = pfont->getTable(TtfUtil::TableIdTag(ktiSile));
- //if (pSileTbl)
- //{
- // pgg->get_FontCharProperties(&chrpOriginal);
- // grstrm.OpenBuffer(pSileTbl, sile_tbl.size());
- // m_fUseSepBase = ReadSileTable(pgg, grstrm, 0, &m_mFontEmUnits, &fMismatchedBase);
- // grstrm.Close();
-
- // if (!m_fUseSepBase)
- // {
- // SwitchGraphicsFont(pgg, false); // back to Graphite table font
- // m_stuBaseFaceName.erase();
- // fBadBase = true;
- // m_fUseSepBase = false;
- // }
- // // Otherwise leave the GrGraphics in a state to read from the base font.
- //}
-
- // We don't need the offset table, and there's no way to get it anyway
- // without a font file.
-
- // cmap and name
- Assert(!m_fCmapTblCopy);
- Assert(!m_fNameTblCopy);
- fOk = SetCmapAndNameTables(pfont);
- if (!fOk)
- {
- goto LUnexpected;
- }
-
- fBasicTables = true;
-
- // If we have a bad base file, don't do Graphite stuff.
- if (fBadBase || fMismatchedBase)
- goto LUnexpected;
-
- /****
- Obtain font name from InitNew() now instead of reading from font file. InitNew should
- should have a correct font name passed to it since it should come from a font registered
- by GrFontInst.exe. This commented code could be use to verify name in font file matches.
- NOTE: if we ever use this code again, make sure we're using the base font name table,
- not the Graphite wrapper font name table.
- // find the font family name
- if (!TtfUtil::Get31EngFamilyInfo(vbName.Begin(), lnNameOff, lnNameSz))
- { // use Name table which is Symbol encode instead
- // this could cause problems if a real Symbol writing system is used in the name table
- // however normally real Unicode values are used instead a Symbol writing system
- if (!TtfUtil::Get30EngFamilyInfo(vbName.Begin(), lnNameOff, lnNameSz))
- {
- ReturnResult(kresFail);
- }
- // test for Symbol writing system. first byte of Unicode id should be 0xF0
- if (vbName[lnNameOff + 1] == (unsigned char)0xF0) // 1 - Unicode id is big endian
- ReturnResult(kresFail);
- }
- if (!TtfUtil::SwapWString(vbName.Begin() + lnNameOff, lnNameSz / isizeof(utf16)))
- ReturnResult(kresFail);
-
- m_stuFaceName = std::wstring((utf16 *)(vbName.begin() + lnNameOff), lnNameSz / isizeof(utf16));
- ****/
-
- // Silf
- res = (pSilfTbl = pfont->getTable(TtfUtil::TableIdTag(ktiSilf), &cbSilfSz)) ? kresOk : kresFail;
- fOk = pSilfTbl && (cbSilfSz == 0 || TtfUtil::CheckTable(ktiSilf, pSilfTbl, cbSilfSz));
- if (!fOk)
- {
- m_stuInitError = L"could not load Silf table for Graphite rendering";
- m_ferr = kferrLoadSilfTable;
- goto LUnexpected;
- }
-
- // Feat
- res = (pFeatTbl = pfont->getTable(TtfUtil::TableIdTag(ktiFeat), &cbFeatSz)) ? kresOk : kresFail;
- fOk = pFeatTbl && (cbFeatSz == 0 || TtfUtil::CheckTable(ktiFeat, pFeatTbl, cbFeatSz));
- if (!fOk)
- {
- // TODO: just create an empty set of features, since this is not disastrous.
- m_stuInitError = L"could not load Feat table for Graphite rendering";
- m_ferr = kferrLoadFeatTable;
- goto LUnexpected;
- }
-
- // Glat
- res = (pGlatTbl = pfont->getTable(TtfUtil::TableIdTag(ktiGlat), &cbGlatSz)) ? kresOk : kresFail;
- fOk = pGlatTbl && (cbGlatSz == 0 || TtfUtil::CheckTable(ktiGlat, pGlatTbl, cbGlatSz));
- if (!fOk)
- {
- m_stuInitError = L"could not load Glat table for Graphite rendering";
- m_ferr = kferrLoadGlatTable;
- goto LUnexpected;
- }
-
- // Gloc
- res = (pGlocTbl = pfont->getTable(TtfUtil::TableIdTag(ktiGloc), &cbGlocSz)) ? kresOk : kresFail;
- fOk = pGlocTbl && (cbGlocSz == 0 || TtfUtil::CheckTable(ktiGloc, pGlocTbl, cbGlocSz));
- if (!fOk)
- {
- m_stuInitError = L"could not load Gloc table for Graphite rendering";
- m_ferr = kferrLoadGlocTable;
- goto LUnexpected;
- }
-
- // Sill
- try {
- res = (pSillTbl = pfont->getTable(TtfUtil::TableIdTag(ktiSill), &cbSillSz)) ? kresOk : kresFail;
- fOk = pSillTbl && (cbSillSz == 0 || TtfUtil::CheckTable(ktiSill, pSillTbl, cbSillSz));
- }
- catch (...)
- {
- fOk = true;
- pSillTbl = NULL;
- }
- // if table couldn't be loaded, this is not disastrous.
-
-// ibGlocStart = cbGlatTbl;
- fOk = CheckTableVersions(&grstrm,
- (byte *)pSilfTbl, 0,
- (byte *)pGlocTbl, 0,
- (byte *)pFeatTbl, 0,
- &m_fxdBadVersion);
- if (!fOk)
- {
-// wchar_t rgch1[50];
-// wchar_t rgch2[50];
-//#if defined(_WIN32)
-// // This version does not work in Windows, in spite of being documented:
-// // swprintf(rgch, 50, L"%d", (m_fxdBadVersion >> 16));
-// // Removing the size argument make it work.
-// swprintf(rgch1, L"%d", (m_fxdBadVersion >> 16));
-// swprintf(rgch2, L"%d", (m_fxdBadVersion & 0x0000FFFF));
-//#else
-// swprintf(rgch1, 50, L"%d", (m_fxdBadVersion >> 16));
-// swprintf(rgch2, 50, L"%d", (m_fxdBadVersion & 0x0000FFFF));
-//#endif
- char rgch[50]; // more than enough space to print two 16-bit ints
- char *pch = &rgch[0];
- sprintf(rgch, "%d.%d", (m_fxdBadVersion >> 16), (m_fxdBadVersion & 0x0000FFFF));
- std::wstring stu = L"unsupported version (";
- //stu.append(rgch1);
- //stu.append(L".");
- //stu.append(rgch2);
- while (*pch != 0)
- stu.push_back((wchar_t)*pch++);
- stu.append(L") of Graphite tables");
- m_stuInitError.assign(stu.c_str());
- m_ferr = kferrBadVersion;
- goto LUnexpected;
- }
-
- try
- {
- // Parse the "Silf" table.
- grstrm.OpenBuffer((byte*)pSilfTbl, cbSilfSz);
- int chwGlyphIDMax, fxdVersion;
- bool f = ReadSilfTable(grstrm, 0, 0, &chwGlyphIDMax, &fxdVersion);
- grstrm.Close();
- if (!f)
- {
- m_ferr = kferrReadSilfTable;
- fexptn.errorCode = m_ferr;
- throw fexptn;
- }
-
- // Parse the "Gloc" and "Glat" tables.
- {
- GrBufferIStream grstrmGlat;
-
- grstrm.OpenBuffer((byte *)pGlocTbl, cbGlocSz);
- grstrmGlat.OpenBuffer((byte *)pGlatTbl, cbGlatSz);
- f = ReadGlocAndGlatTables(grstrm, 0, grstrmGlat, 0, chwGlyphIDMax, fxdVersion);
- grstrm.Close();
- grstrmGlat.Close();
- if (!f)
- {
- m_ferr = kferrReadGlocGlatTable;
- fexptn.errorCode = m_ferr;
- throw fexptn;
- }
- }
-
- // Parse the "Feat" table.
- grstrm.OpenBuffer((byte *)pFeatTbl, cbFeatSz);
- f = ReadFeatTable(grstrm, 0);
- grstrm.Close();
- if (!f)
- {
- m_ferr = kferrReadFeatTable;
- fexptn.errorCode = m_ferr;
- throw fexptn;
- }
-
- // Parse the "Sill" table.
- if (pSillTbl)
- {
- grstrm.OpenBuffer((byte *)pSillTbl, cbFeatSz);
- f = ReadSillTable(grstrm, 0);
- grstrm.Close();
- if (!f)
- {
- m_ferr = kferrReadSillTable;
- fexptn.errorCode = m_ferr;
- throw fexptn;
- }
- }
- else
- m_langtbl.CreateEmpty();
- }
- catch (...)
- {
- fSilf = false;
- m_resFontRead = kresUnexpected;
- try {
- DestroyContents(false);
- }
- catch (...)
- {}
- goto LUnexpected;
- }
-
- m_stuErrCtrlFile.erase();
- m_nFontCheckSum = nCheckSum;
- m_resFontRead = kresOk;
- m_ferr = kferrOkay;
- ReturnResult(kresOk);
-
-LUnexpected:
- // Don't do this, because it is possible to use a base font with an empty Graphite
- // engine:
- //if (m_fUseSepBase || m_stuBaseFaceName.Length() > 0)
- //{
- // SwitchGraphicsFont(pgg, false); // back to Graphite table font
- // m_stuBaseFaceName.erase();
- // m_fUseSepBase = false;
- //}
-
- CreateEmpty();
- m_nFontCheckSum = nCheckSum;
- if (!fBasicTables)
- m_resFontRead = kresFail; // bad font
- else if (!fSilf)
- m_resFontRead = kresFalse; // no Silf table--not a Graphite font
- else
- m_resFontRead = kresUnexpected; // couldn't read the Graphite tables
-
- fexptn.errorCode = m_ferr;
- fexptn.version = m_fxdBadVersion >> 16;
- fexptn.subVersion = m_fxdBadVersion & 0x0000FFFF;
- throw fexptn;
-
- ReturnResult(m_resFontRead);
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the cmap and name tables.
-
- This is called from two places. One is when we first initialize the engine. Also, if the
- font tables have not been actually copied from the font, they may have been deleted
- when the font was deleted. So when reusing the engine, set them to something valid based
- on the current font.
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::SetCmapAndNameTables(Font * pfont)
-{
- GrResult res = kresOk;
- bool fOk;
- const void * pCmapTbl;
- const void * pNameTbl;
- size_t cbCmapSz, cbNameSz;
-
- // cmap
- if (!m_fCmapTblCopy)
- {
- res = (pCmapTbl = pfont->getTable(TtfUtil::TableIdTag(ktiCmap), &cbCmapSz)) ? kresOk : kresFail;
- fOk = pCmapTbl && (cbCmapSz == 0 || TtfUtil::CheckTable(ktiCmap, pCmapTbl, cbCmapSz));
- if (!fOk)
- {
- m_stuInitError = L"could not locate cmap table";
- m_ferr = kferrFindCmapTable;
- return false;
- }
-
- if (pCmapTbl && cbCmapSz > 0)
- {
- // Make a private copy of the cmap for the engine's use.
- m_pCmapTbl = new byte[cbCmapSz];
- std::copy(reinterpret_cast<const byte*>(pCmapTbl),
- reinterpret_cast<const byte*>(pCmapTbl) + cbCmapSz, m_pCmapTbl);
- m_fCmapTblCopy = true;
- m_cbCmapTbl = cbCmapSz;
- }
- else
- {
- m_pCmapTbl = const_cast<byte*>(reinterpret_cast<const byte*>(pCmapTbl));
- m_fCmapTblCopy = false;
- }
-
- // MS Unicode cmap
- m_pCmap_3_1 = TtfUtil::FindCmapSubtable(m_pCmapTbl, 3, 1);
- m_pCmap_3_10 = TtfUtil::FindCmapSubtable(m_pCmapTbl, 3, 10);
- if (!m_pCmap_3_1)
- m_pCmap_3_1 = TtfUtil::FindCmapSubtable(m_pCmapTbl, 3, 0);
- if (!m_pCmap_3_1)
- {
- m_stuInitError = L"failure to load cmap subtable";
- m_ferr = kferrLoadCmapSubtable;
- return false;
- }
- if (!TtfUtil::CheckCmap31Subtable(m_pCmap_3_1))
- {
- m_stuInitError = L"checking cmap subtable failed";
- m_ferr = kferrCheckCmapSubtable;
- return false;
- }
- }
- else
- {
- Assert(m_pCmapTbl);
- }
-
- // name table - eventually need feature label strings
-
- // Currently the only stuff we're getting from the name table are our feature names,
- // so use the version from the Graphite font (not the base font if any).
- //////if (m_fUseSepBase)
- ////// pgg->SetupGraphics(&chrpOriginal);
-
- if (!m_fNameTblCopy)
- {
- res = (pNameTbl = (byte *)pfont->getTable(TtfUtil::TableIdTag(ktiName), &cbNameSz)) ? kresOk : kresFail;
- fOk = pNameTbl && (cbNameSz == 0 || TtfUtil::CheckTable(ktiName, pNameTbl, cbNameSz));
- if (!fOk)
- {
- m_stuInitError = L"could not locate name table";
- m_ferr = kferrFindNameTable;
- return false;
- }
-
- if (pNameTbl && cbNameSz > 0)
- {
- // Make a private copy of the name table for the engine's use.
- m_pNameTbl = new byte[cbNameSz];
- std::copy(reinterpret_cast<const byte*>(pNameTbl),
- reinterpret_cast<const byte*>(pNameTbl) + cbNameSz, m_pNameTbl);
- m_fNameTblCopy = true;
- m_cbNameTbl = cbNameSz;
- }
- else
- {
- m_pNameTbl = const_cast<byte*>(reinterpret_cast<const byte*>(pNameTbl));
- m_fNameTblCopy = false;
- }
- }
- else
- {
- Assert(m_pNameTbl);
- }
-
- return true;
-}
-
-
-//void FontFace::DbgCheckFontFace()
-//{
-// Assert(m_cfonts < 5000);
-// Assert(m_cfonts >= 0);
-// wchar_t chw0 = m_pgreng->m_stuFaceName[0];
-// Assert(chw0 >= 0x0040); // A
-// Assert(chw0 <= 0x007A); // z
-//}
-
-} // namespace gr
-
-//:End Ignore
diff --git a/Build/source/libs/graphite-engine/src/segment/FontFace.h b/Build/source/libs/graphite-engine/src/segment/FontFace.h
deleted file mode 100644
index 7f2684a5908..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/FontFace.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/*--------------------------------------------------------------------
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: FontFace.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Contains the definition of the FontFace class.
- TODO: Merge with GrEngine.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef FONTFACE_INCLUDED
-#define FONTFACE_INCLUDED
-#include <limits>
-
-#ifdef _MSC_VER
-#include <crtdbg.h>
-#endif
-
-namespace gr
-{
-
-class IGrJustifier;
-class Segment;
-
-
-/*----------------------------------------------------------------------------------------------
- The GrEngine serves as the top level object that knows how to run Graphite tables
- and generate Graphite segments.
-
- Primarily, this class implements IRenderEngine, which allows it to serve as a FW
- rendering engine. It also implements ISimpleInit, a general interface for initializing
- using a string. Finally, it implements ITraceControl, a very simple interface which
- allows a client to flip a flag indicating whether or not we want to output a log of
- the Graphite transduction process.
-
- Hungarian: greng
-----------------------------------------------------------------------------------------------*/
-class FontFace
-{
- friend class gr::FontMemoryUsage;
-
-public:
- FontFace()
- {
- m_cfonts = 0;
- }
-
- ~FontFace()
- {
- if (s_pFontCache)
- s_pFontCache->RemoveFontFace(m_pgreng->FaceName(), m_pgreng->Bold(), m_pgreng->Italic());
- delete m_pgreng;
- }
-
- void IncFontCount()
- {
- m_cfonts++;
- }
- void DecFontCount()
- {
- m_cfonts--;
- if (m_cfonts <= 0 && (s_pFontCache == NULL || s_pFontCache->GetFlushMode() == kflushAuto))
- delete this;
- }
-
- bool NoFonts()
- {
- return (m_cfonts <= 0);
- }
-
- static FontFace * GetFontFace(Font * pfont,
- std::wstring strFaceName, bool fBold, bool fItalic,
- bool fDumbFallback = false);
-
- GrResult InitFontFace(Font * pfont,
- std::wstring stuFaceName, bool fBold, bool fItalic,
- bool fDumbLayout);
-
- FontErrorCode IsValidForGraphite(int * pnVersion, int * pnSubVersion)
- {
- return m_pgreng->IsValidForGraphite(pnVersion, pnSubVersion);
- }
-
- static void ZapFontCache()
- {
- if (s_pFontCache)
- {
- s_pFontCache->AssertEmpty();
- delete s_pFontCache;
- }
- s_pFontCache = NULL;
- }
-
- static void SetFlushMode(int flush)
- {
- if (s_pFontCache == NULL)
- s_pFontCache = new FontCache;
- s_pFontCache->SetFlushMode(flush);
- }
- static int GetFlushMode()
- {
- if (s_pFontCache == NULL)
- s_pFontCache = new FontCache;
- return s_pFontCache->GetFlushMode();
- }
-
- // Temporary, until interface gets thoroughly reworked:
- GrEngine * GraphiteEngine()
- {
- return m_pgreng;
- }
-
- // Feature access:
- size_t NumberOfFeatures()
- {
- return m_pgreng->NumberOfFeatures_ff();
- }
- featid FeatureID(size_t ifeat)
- {
- return m_pgreng->FeatureID_ff(ifeat);
- }
- size_t FeatureWithID(featid id)
- {
- return m_pgreng->FeatureWithID_ff(id);
- }
- bool GetFeatureLabel(size_t ifeat, lgid language, utf16 * label)
- {
- return m_pgreng->GetFeatureLabel_ff(ifeat, language, label);
- }
- int GetFeatureDefault(size_t ifeat) // index of default setting
- {
- return m_pgreng->GetFeatureDefault_ff(ifeat);
- }
- size_t NumberOfSettings(size_t ifeat)
- {
- return m_pgreng->NumberOfSettings_ff(ifeat);
- }
- int GetFeatureSettingValue(size_t ifeat, size_t ifset)
- {
- return m_pgreng->GetFeatureSettingValue_ff(ifeat, ifset);
- }
- bool GetFeatureSettingLabel(size_t ifeat, size_t ifset, lgid language, utf16 * label)
- {
- return m_pgreng->GetFeatureSettingLabel_ff(ifeat, ifset, language, label);
- }
- // Feature-label language access:
- size_t NumberOfFeatLangs()
- {
- return m_pgreng->NumberOfFeatLangs_ff();
- }
- short FeatLabelLang(int ilang)
- {
- return m_pgreng->GetFeatLabelLang_ff(ilang);
- }
- // Language access:
- size_t NumberOfLanguages()
- {
- return m_pgreng->NumberOfLanguages_ff();
- }
- isocode LanguageCode(size_t ilang)
- {
- return m_pgreng->GetLanguageCode_ff(ilang);
- }
-
- // Script Direction access:
- ScriptDirCode ScriptDirection() const throw()
- {
- unsigned int script_dirs = 0;
- OLECHAR err_dummy = 0;
- m_pgreng->get_ScriptDirection(&script_dirs, &err_dummy, 1);
- return ScriptDirCode(script_dirs);
- }
-
- bool BadFont(FontErrorCode * pferr = NULL)
- {
- return m_pgreng->BadFont(pferr);
- }
- bool DumbFallback(FontErrorCode * pferr = NULL)
- {
- return m_pgreng->DumbFallback(pferr);
- }
-
-public:
- // For use in segment creation:
- void RenderLineFillSegment(Segment * pseg, Font * pfont, ITextSource * pts,
- LayoutEnvironment & layout,
- toffset ichStart, toffset ichStop, float xsMaxWidth, bool fBacktracking)
- {
- m_pgreng->MakeSegment(pseg, pfont, pts, NULL, layout,
- ichStart, ichStop, xsMaxWidth, fBacktracking, false, 0, kestMoreLines);
- }
- void RenderRangeSegment(Segment * pseg, Font * pfont,
- ITextSource * pts, LayoutEnvironment & layout,
- toffset ichStart, toffset ichStop)
- {
- m_pgreng->MakeSegment(pseg, pfont, pts, NULL, layout,
- ichStart, ichStop, kPosInfFloat, false, false, 0, kestMoreLines);
- }
- void RenderJustifiedSegment(Segment * pseg, Font * pfont,
- ITextSource * pts, LayoutEnvironment & layout,
- toffset ichStart, toffset ichStop, float xsCurrentWidth, float xsDesiredWidth)
- {
- m_pgreng->MakeSegment(pseg, pfont, pts, NULL, layout,
- ichStart, ichStop, xsCurrentWidth, false, true, xsDesiredWidth, kestMoreLines);
- }
-
- // Debugging.
- //static bool DbgCheckFontCache()
- //{
- // if (s_pFontCache)
- // return s_pFontCache->DbgCheckFontCache();
- // else
- // return true;
- //}
- //void DbgCheckFontFace();
-
- static void calculateAllMemoryUsage(FontMemoryUsage & fmu);
- void calculateMemoryUsage(FontMemoryUsage & fmu);
-
-protected:
- // Number of fonts in existence that use this face; when it goes to zero, delete.
- int m_cfonts;
-
- // Static variable:
- static FontCache * s_pFontCache;
-
- // Member variables:
- GrEngine * m_pgreng;
-};
-
-} // namespace gr
-
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-
-#endif // !FONTFACE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrCharStream.cpp b/Build/source/libs/graphite-engine/src/segment/GrCharStream.cpp
deleted file mode 100644
index 20b5a46ab76..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrCharStream.cpp
+++ /dev/null
@@ -1,652 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrCharStream.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements the GrCharStream class.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Constructor.
-----------------------------------------------------------------------------------------------*/
-GrCharStream::GrCharStream(ITextSource * pgts, int ichrMin, int ichrLim,
- bool fStartLine, bool fEndLine)
- : m_pgts(pgts),
- m_ichrMin(ichrMin),
- m_ichrLim(ichrLim),
- m_ichrPos(ichrMin),
- m_fStartLine(fStartLine),
- m_fEndLine(fEndLine),
- m_cchrBackedUp(0),
- m_ichrRunMin(0),
- m_ichrRunLim(0),
- m_ichlRunOffset(kPosInfinity),
- m_ichrRunOffset(kPosInfinity)
-{
- #if 0 // ??? surely m_cnRunMax and m_prgnRunText are undefined at this point
- if (m_cchlRunMax > -1)
- delete[] m_prgchlRunText;
- #endif
- m_cchlRunMax = -1;
- m_prgchlRunText = NULL;
-
- m_vislotNextChunkMap.clear();
-
- m_utf = m_pgts->utfEncodingForm();
-}
-
-/*----------------------------------------------------------------------------------------------
- Restart the stream when an error has a occurred and we need to fall back to dumb rendering.
-----------------------------------------------------------------------------------------------*/
-void GrCharStream::Restart()
-{
- if (m_cchlRunMax > -1)
- delete[] m_prgchlRunText;
-
- m_ichrPos = m_ichrMin;
- m_cchrBackedUp = 0;
- m_ichrRunMin = 0;
- m_ichrRunLim = 0;
- m_ichlRunOffset = kPosInfinity;
- m_ichrRunOffset = kPosInfinity;
-
- m_cchlRunMax = -1;
- m_prgchlRunText = NULL;
-
- m_vislotNextChunkMap.clear();
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the next character from the stream.
-
- @param pichwSegOffset - index of this character from the beginning of the segment
- @param pcchRaw - number of raw (UTF-16 or UTF-8) chars consumed to get one complete
- Unicode codepoint.
-----------------------------------------------------------------------------------------------*/
-int GrCharStream::NextGet(GrTableManager * ptman,
- GrFeatureValues * pfval, int * pichrSegOffset, int * pcchr)
-{
- if (AtEnd())
- {
- Assert(m_ichrPos == m_ichrLim);
- return 0;
- }
-
- int m_ichrMinBackedUp = m_ichrMin - m_cchrBackedUp;
-
- if ((m_ichrRunOffset + m_ichrRunMin) >= m_ichrRunLim)
- {
- // Get the next run of characters
-
- std::pair<toffset, toffset> pairRange = m_pgts->propertyRange(m_ichrPos);
- m_ichrRunMin = pairRange.first;
- m_ichrRunLim = pairRange.second;
-
- // The only time the run extends before what we want is on the first run.
- Assert((m_ichrRunMin == m_ichrPos) // m_ichwPos is beginning of run
- || (m_ichrPos == m_ichrMinBackedUp)); // first run
- // Pretend like the run starts where we need it:
- m_ichrRunMin = max(m_ichrRunMin, m_ichrMinBackedUp);
- Assert(m_ichrRunMin == m_ichrPos);
-
- if (m_cchlRunMax != -1 && m_cchlRunMax < m_ichrRunLim - m_ichrRunMin)
- {
- // Text buffer is too small: delete it and create a new one.
- delete[] m_prgchlRunText;
- m_cchlRunMax = -1;
- }
-
- if (m_cchlRunMax == -1)
- {
- // Note that combining surrogates or UTF-8 will always result in the same or fewer
- // number of characters needed in m_prgchlRunText, so the following is safe:
- m_cchlRunMax = m_ichrRunLim - m_ichrRunMin;
- m_prgchlRunText = new int[m_cchlRunMax];
- }
-
- utf32 * prgchlRunText32 = NULL;
- utf16 * prgchwRunText16 = NULL;
- utf8 * prgchsRunText8 = NULL;
-
- int cchGot;
- switch (m_utf)
- {
- case kutf8:
- prgchsRunText8 = new utf8[m_ichrRunLim - m_ichrRunMin];
- cchGot = m_pgts->fetch(m_ichrRunMin, m_ichrRunLim - m_ichrRunMin, prgchsRunText8);
- break;
- case kutf16:
- prgchwRunText16 = new utf16[m_ichrRunLim - m_ichrRunMin];
- cchGot = m_pgts->fetch(m_ichrRunMin, m_ichrRunLim - m_ichrRunMin, prgchwRunText16);
- break;
- default:
- Assert(false);
- // Assume UTF-32: fall through
- case kutf32:
- prgchlRunText32 = new utf32[m_ichrRunLim - m_ichrRunMin];
- cchGot = m_pgts->fetch(m_ichrRunMin, m_ichrRunLim - m_ichrRunMin, prgchlRunText32);
- break;
- }
-
- int ichlUtf32 = 0;
- for (int ichr = 0; ichr < m_ichrRunLim - m_ichrRunMin; ichr++)
- {
- if (ichr == m_ichrPos - m_ichrRunMin)
- {
- m_ichrRunOffset = ichr;
- m_ichlRunOffset = ichlUtf32;
- }
- Assert(m_ichrRunOffset != kPosInfinity || ichr < m_ichrPos - m_ichrRunMin);
-
- int cchrUsed;
- switch (m_utf)
- {
- case kutf8:
- m_prgchlRunText[ichlUtf32] = Utf8ToUtf32(prgchsRunText8 + ichr,
- m_ichrRunLim - m_ichrRunMin - ichr, &cchrUsed);
- break;
- case kutf16:
- m_prgchlRunText[ichlUtf32] = Utf16ToUtf32(prgchwRunText16 + ichr,
- m_ichrRunLim - m_ichrRunMin - ichr, &cchrUsed);
- break;
- default:
- Assert(false);
- // Assume UTF-32: fall through
- case kutf32:
- m_prgchlRunText[ichlUtf32] = prgchlRunText32[ichlUtf32];
- cchrUsed = 1;
- break;
- }
-
- m_vislotNextChunkMap.push_back(ichlUtf32);
- for (int i = 1; i < cchrUsed; i++)
- m_vislotNextChunkMap.push_back(-1);
- ichr += cchrUsed - 1;
- ichlUtf32++;
- }
- delete[] prgchlRunText32;
- delete[] prgchwRunText16;
- delete[] prgchsRunText8;
-
- while (m_ichrLim - m_ichrRunMin < signed(m_vislotNextChunkMap.size())
- && m_vislotNextChunkMap[m_ichrLim - m_ichrRunMin] == -1)
- {
- // Invalid surrogate boundary; this is really a bug in the application program,
- // but adjust here to avoid a crash!
- m_ichrLim--;
- }
-
- SetUpFeatureValues(ptman, m_ichrPos);
-
- Assert(m_ichrRunOffset >= 0);
- Assert(m_ichrRunOffset < m_ichrRunLim - m_ichrRunMin);
- Assert(m_vislotNextChunkMap.size() == (unsigned) m_ichrRunLim - m_ichrMinBackedUp);
- }
-
- int chlRet = m_prgchlRunText[m_ichlRunOffset];
- *pfval = m_fvalRunFeats;
- *pichrSegOffset = m_ichrPos - m_ichrMin; // offset from the official start of the segment
- // of the first 16-bit char
- int ichrPosPrev = m_ichrPos;
- ++m_ichlRunOffset;
- do {
- ++m_ichrPos;
- ++m_ichrRunOffset;
- } while (m_ichrPos - m_ichrMinBackedUp < signed(m_vislotNextChunkMap.size())
- && m_vislotNextChunkMap[m_ichrPos - m_ichrMinBackedUp] == -1);
-
- *pcchr = m_ichrPos - ichrPosPrev; // number of raw chars consumed
- Assert(m_utf != kutf8 || *pcchr <= 6);
- Assert(m_utf != kutf16 || *pcchr <= 2);
-
- Assert(m_ichrPos == (m_ichrRunMin + m_ichrRunOffset));
- Assert(m_ichrPos <= m_ichrLim);
-
- /* KLUDGE for debugging
- if (m_ichrPos == 1)
- nRet = 0x1018;
- else if (m_ichrPos == 2)
- nRet = 0x1039;
- else if (m_ichrPos == 3)
- nRet = 0x101b;
- else if (m_ichrPos == 4)
- nRet = 0x1032;
- else if (m_ichrPos == 5)
- nRet = 0x1037;
- else if (m_ichrPos == 6)
- nRet = 0x1037;
- */
-
- return chlRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert UTF-8 to UTF-32--a single character's worth. Also pass back the number of 8-bit
- items consumed.
-----------------------------------------------------------------------------------------------*/
-utf32 GrCharStream::Utf8ToUtf32(utf8 * prgchs, int cchs, int * pcchsUsed)
-{
- if (cchs <= 0)
- {
- *pcchsUsed = 0;
- return 0;
- }
-
- long chlRet = DecodeUtf8(prgchs, cchs, pcchsUsed);
- Assert(chlRet > 0);
- if (chlRet == -1)
- {
- // Some error occurred. Just treat the UTF-8 as UTF-32.
- *pcchsUsed = 1;
- return (utf32)prgchs[0];
- }
- else
- return chlRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert UTF-16 to UTF-32--a single character's worth. Also pass back the number of 16-bit
- items consumed.
-----------------------------------------------------------------------------------------------*/
-utf32 GrCharStream::Utf16ToUtf32(utf16 * prgchw, int cchw, int * pcchwUsed)
-{
- if (cchw <= 0)
- {
- *pcchwUsed = 0;
- return 0;
- }
-
- unsigned int nUtf32;
- bool fSurrogate = FromSurrogatePair(prgchw[0], ((cchw < 2) ? 0 : prgchw[1]), &nUtf32);
- *pcchwUsed = (fSurrogate) ? 2 : 1;
- return (int)nUtf32;
-
-/*
- // For testing:
- int nCharRet;
- if (cchw >= 2 && prgchw[0] == '^' && prgchw[1] == 'a')
- {
- nCharRet = 'A';
- *pcchwUsed = 2;
- }
- else if (cchw >= 3 && prgchw[0] == '#' && prgchw[1] == '#' &&
- prgchw[2] == 'B')
- {
- nCharRet = 'b';
- *pcchwUsed = 3;
- }
- else if (cchw >= 1)
- {
- nCharRet = prgchw[0];
- *pcchwUsed = 1;
- }
- else
- {
- nCharRet = 0;
- *pcchwUsed = 0;
- }
- return nCharRet;
-*/
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the given position is at the boundary of a Unicode character; return false
- if it is between two parts of pair of surrogates.
-----------------------------------------------------------------------------------------------*/
-bool GrCharStream::AtUnicodeCharBoundary(ITextSource * pgts, int ichr)
-{
- int cchr = pgts->getLength();
- if (ichr <= 0 || ichr >= cchr)
- return true;
-
- UtfType utf = pgts->utfEncodingForm();
-
- // Note that we never need more than a handful of characters.
- int ichrMinGet = max(0, ichr - 1);
- int ichrLimGet = ichr + 1;
- utf16 rgchwText16[3];
- utf8 rgchsText8[3];
- bool fRet;
- switch (utf)
- {
- case kutf8:
- pgts->fetch(ichrMinGet, ichrLimGet - ichrMinGet, rgchsText8);
- fRet = AtUnicodeCharBoundary(rgchsText8, ichrLimGet - ichrMinGet,
- ichr - ichrMinGet, utf);
- break;
- case kutf16:
- pgts->fetch(ichrMinGet, ichrLimGet - ichrMinGet, rgchwText16);
- fRet = AtUnicodeCharBoundary(rgchwText16, ichrLimGet - ichrMinGet,
- ichr - ichrMinGet, utf);
- break;
- default:
- Assert(false);
- case kutf32:
- fRet = true;
- break;
- }
-
- return fRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the given position is at the boundary of a Unicode character; return false
- if it is between two parts of pair of surrogates.
-----------------------------------------------------------------------------------------------*/
-bool GrCharStream::AtUnicodeCharBoundary(utf16 * prgchw, int cchw, int ichr, UtfType utf)
-{
- Assert(ichr >= 0);
- Assert(ichr <= cchw);
-
- if (ichr == 0)
- return true;
- if (ichr >= cchw)
- return true;
-
- switch (utf)
- {
- case kutf16:
- {
- unsigned int nUtf32;
- bool fMiddleOfPair = FromSurrogatePair(prgchw[ichr - 1], prgchw[ichr], &nUtf32);
- return !fMiddleOfPair;
- }
- case kutf8:
- {
- // 16-bit buffer being treated like UTF-8.
- utf8 rgchs[2];
- rgchs[1] = (utf8)prgchw[ichr];
- return AtUnicodeCharBoundary(rgchs, 2, 1, kutf8);
- }
- case kutf32:
- default:
- return true;
- }
-
-/*
- // temp stuff for debugging:
- if (ichr > 0 && cchw >= 1 && prgchw[ichr-1] == '^' && prgchw[ichr] == 'a')
- {
- return false;
- }
- if (ichr > 0 && cchw >= 2 && prgchw[ichr-1] == '#' && prgchw[ichr] == '#' &&
- prgchw[ichr+1] == 'B')
- {
- return false;
- }
- if (ichr > 1 && cchw >= 1 && prgchw[ichr-2] == '#' && prgchw[ichr-1] == '#' &&
- prgchw[ichr] == 'B')
- {
- return false;
- }
-
- return true;
-*/
-}
-
-bool GrCharStream::AtUnicodeCharBoundary(utf8 * prgchs, int cchs, int ichs, UtfType utf)
-{
- Assert(ichs >= 0);
- Assert(ichs <= cchs);
-
- Assert(utf == kutf8);
-
- if (ichs == 0)
- return true;
- if (ichs >= cchs)
- return true;
-
- if (cchs == 0)
- return true;
-
- // A bit pattern of 10xxxxxx indicates a continuation of a sequence
- // (11xxxxxx means the first byte of a sequence, 0xxxxxxx means a single character).
-
- utf8 chsTest = prgchs[ichs] & 0xC0;
- return (chsTest != 0x80);
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert the given pair of characters into a single 32-bit Unicode character. Return
- true if they are a legitimate surrogate pair. If not, just return the first of the
- two 16-bit characters.
-----------------------------------------------------------------------------------------------*/
-bool GrCharStream::FromSurrogatePair(utf16 chwIn1, utf16 chwIn2, unsigned int * pchlOut)
-{
- if ((chwIn1 < kzUtf16HighFirst) || (chwIn1 > kzUtf16HighLast)
- || (chwIn2 < kzUtf16LowFirst) || (chwIn2 > kzUtf16LowLast))
- {
- // Not a surrogate
- *pchlOut = (unsigned int)chwIn1;
- return false;
- }
- else
- {
- *pchlOut = ((chwIn1 - kzUtf16HighFirst) << kzUtf16Shift) + chwIn2 + kzUtf16Inc;
- return true;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Decode 1-6 bytes in the character string from UTF-8 format to Unicode (UCS-4).
- As a side-effect, cbOut is set to the number of UTF-8 bytes consumed.
-
- @param rgchUtf8 Pointer to a a character array containing UTF-8 data.
- @param cchUtf8 Number of characters in the array.
- @param cbOut Reference to an integer for holding the number of input (8-bit) characters
- consumed to produce the single output Unicode character.
-
- @return A single Unicode (UCS-4) character. If an error occurs, return -1.
-----------------------------------------------------------------------------------------------*/
-long GrCharStream::DecodeUtf8(const utf8 * rgchUtf8, int cchUtf8, int * pcbOut)
-{
- // check for valid input
- AssertArray(rgchUtf8, cchUtf8);
- if ((cchUtf8 == 0) || (rgchUtf8[0] == '\0'))
- {
- *pcbOut = (cchUtf8) ? 1 : 0;
- return 0;
- }
- //
- // decode the first byte of the UTF-8 sequence
- //
- long lnUnicode;
- int cbExtra;
- int chsUtf8 = *rgchUtf8++ & 0xFF;
- if (chsUtf8 >= kzUtf8Flag6) // 0xFC
- {
- lnUnicode = chsUtf8 & kzUtf8Mask6;
- cbExtra = 5;
- }
- else if (chsUtf8 >= kzUtf8Flag5) // 0xF8
- {
- lnUnicode = chsUtf8 & kzUtf8Mask5;
- cbExtra = 4;
- }
- else if (chsUtf8 >= kzUtf8Flag4) // 0xF0
- {
- lnUnicode = chsUtf8 & kzUtf8Mask4;
- cbExtra = 3;
- }
- else if (chsUtf8 >= kzUtf8Flag3) // 0xE0
- {
- lnUnicode = chsUtf8 & kzUtf8Mask3;
- cbExtra = 2;
- }
- else if (chsUtf8 >= kzUtf8Flag2) // 0xC0
- {
- lnUnicode = chsUtf8 & kzUtf8Mask2;
- cbExtra = 1;
- }
- else // 0x00
- {
- lnUnicode = chsUtf8;
- cbExtra = 0;
- }
- if (cbExtra >= cchUtf8)
- {
- return -1;
- }
-
- switch (cbExtra)
- {
- case 5:
- lnUnicode <<= kzUtf8ByteShift;
- chsUtf8 = *rgchUtf8++ & 0xFF;
- if ((chsUtf8 & ~kzByteMask) != 0x80)
- return -1;
- lnUnicode += chsUtf8 & kzByteMask;
- // fall through
- case 4:
- lnUnicode <<= kzUtf8ByteShift;
- chsUtf8 = *rgchUtf8++ & 0xFF;
- if ((chsUtf8 & ~kzByteMask) != 0x80)
- return -1;
- lnUnicode += chsUtf8 & kzByteMask;
- // fall through
- case 3:
- lnUnicode <<= kzUtf8ByteShift;
- chsUtf8 = *rgchUtf8++ & 0xFF;
- if ((chsUtf8 & ~kzByteMask) != 0x80)
- return -1;
- lnUnicode += chsUtf8 & kzByteMask;
- // fall through
- case 2:
- lnUnicode <<= kzUtf8ByteShift;
- chsUtf8 = *rgchUtf8++ & 0xFF;
- if ((chsUtf8 & ~kzByteMask) != 0x80)
- return -1;
- lnUnicode += chsUtf8 & kzByteMask;
- // fall through
- case 1:
- lnUnicode <<= kzUtf8ByteShift;
- chsUtf8 = *rgchUtf8++ & 0xFF;
- if ((chsUtf8 & ~kzByteMask) != 0x80)
- return -1;
- lnUnicode += chsUtf8 & kzByteMask;
- break;
- case 0:
- // already handled
- break;
- default:
- Assert(false);
- }
- if ((unsigned long)lnUnicode > kzUnicodeMax)
- {
- return -1;
- }
- *pcbOut = cbExtra + 1;
- return lnUnicode;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the current feature values and character properties from the stream.
-----------------------------------------------------------------------------------------------*/
-void GrCharStream::CurrentFeatures(GrTableManager * ptman, GrFeatureValues * pfval)
-{
- if (m_ichrRunOffset == kPosInfinity)
- {
- // Not yet set up.
- if (AtEnd())
- {
- // Empty stream; no valid values.
- Assert(false);
- return;
- }
-
- // Get the settings from the first character.
- int ichrSegOffset;
- int ichrPosSave = m_ichrPos;
- int ichrRunOffsetSave = m_ichrRunOffset;
- int ichlRunOffsetSave = m_ichlRunOffset;
- int cMapSize = m_vislotNextChunkMap.size();
- int cchrConsumed;
- NextGet(ptman, pfval, &ichrSegOffset, &cchrConsumed);
- // Put the character back.
- m_ichrPos = ichrPosSave;
- m_ichrRunOffset = ichrRunOffsetSave;
- m_ichlRunOffset = ichlRunOffsetSave;
- while (signed(m_vislotNextChunkMap.size()) > cMapSize)
- m_vislotNextChunkMap.pop_back();
- }
- else
- {
- *pfval = m_fvalRunFeats;
- //*ppchrp = &m_chrpRun;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the feature settings from the text properties.
-
- Eventually, handle style index here?
-----------------------------------------------------------------------------------------------*/
-void GrCharStream::SetUpFeatureValues(GrTableManager * ptman, int ichr)
-{
- // Set all the features to their default values.
- for (int i = 0; i < kMaxFeatures; ++i)
- {
- m_fvalRunFeats.m_rgnFValues[i] = ptman->DefaultForFeatureAt(i);
- }
- m_fvalRunFeats.m_nStyleIndex = 0;
-
- // Add in the defaults for the language of the text.
- std::vector<featid> vnFeats;
- std::vector<int> vnValues;
- isocode lgcode = m_pgts->getLanguage(ichr);
- ptman->DefaultsForLanguage(lgcode, vnFeats, vnValues);
- size_t ifeatLp;
- int ifeat;
- for (ifeatLp = 0; ifeatLp < vnFeats.size(); ifeatLp++)
- {
- ptman->FeatureWithID(vnFeats[ifeatLp], &ifeat);
- m_fvalRunFeats.m_rgnFValues[ifeat] = vnValues[ifeatLp];
- }
-
- // Add in the explicit feature settings.
- FeatureSetting rgfset[kMaxFeatures];
- int cfeat = m_pgts->getFontFeatures(ichr, rgfset);
-
- for (ifeatLp = 0; ifeatLp < (size_t)cfeat; ifeatLp++)
- {
- ptman->FeatureWithID(rgfset[ifeatLp].id, &ifeat);
- if (ifeat >= 0)
- m_fvalRunFeats.m_rgnFValues[ifeat] = rgfset[ifeatLp].value;
- }
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/GrCharStream.h b/Build/source/libs/graphite-engine/src/segment/GrCharStream.h
deleted file mode 100644
index 892435d376e..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrCharStream.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrCharStream.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
-
-
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_CHARSTREAM_INCLUDED
-#define GR_CHARSTREAM_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- Makes a stream out of a text string that is serving as input to the process.
-
- Hungarian: chstrm
-----------------------------------------------------------------------------------------------*/
-class GrCharStream
-{
-public:
- // Constructor and destructor:
- GrCharStream(ITextSource * pgts, int ichrMin, int ichrLim,
- bool fStartLine, bool fEndLine);
-
- ~GrCharStream()
- {
- if (m_cchlRunMax >= 0)
- delete[] m_prgchlRunText;
- }
-
- // Getters:
- ITextSource * TextSrc() { return m_pgts; }
- int Min() { return m_ichrMin; }
- int Pos() { return m_ichrPos; }
- int Lim() { return m_ichrLim; }
- bool StartLine() { return m_fStartLine; }
- bool EndLine() { return m_fEndLine; }
-
- // offset from the beginning of the segment
- int SegOffset() { return m_ichrPos - m_ichrMin; }
- int SegOffset(int ichr) { return ichr - m_ichrMin; }
-
- bool AtEnd()
- {
- return (m_ichrPos >= m_ichrLim);
- }
-
- // The input string is empty.
- bool IsEmpty()
- {
- return (m_ichrLim - m_ichrMin == 0);
- }
-
- // When we are restarting in order to create a segment other than the first,
- // back up the position in the stream slightly in order to reprocess a few characters
- // before the line-break.
- void Backup(int cchrToReprocess)
- {
- Assert(m_ichrPos >= cchrToReprocess);
- m_ichrPos -= cchrToReprocess;
- m_ichrRunOffset = kPosInfinity;
- m_cchrBackedUp = cchrToReprocess;
- }
-
- // When we found a hard-break in the input stream, we need to put it back, and since
- // we're done, we set the end of the stream to that position.
- void HitHardBreak()
- {
- m_ichrPos -= 1;
- m_ichrRunOffset -= 1;
- m_ichrLim = m_ichrPos;
- }
-
- void Restart();
-
- int NextGet(GrTableManager *, GrFeatureValues * pfval, int * ichrSegOffset, int * pcchr);
-
- void CurrentFeatures(GrTableManager * ptman, GrFeatureValues * pfval);
-
- // For transduction logging:
- int GetLogData(GrTableManager * ptman, int * rgnChars, bool * rgfNewRun,
- GrFeatureValues * rgfval, int cchwBackup,
- int * pcchwMaxRaw);
- void GetLogDataRaw(GrTableManager * ptman, int cchw, int cchwBackup,
- int cchwMax16bit, int * prgnChars,
- utf16 * prgchw2, utf16 * prgchw3, utf16 * prgchw4, utf16 * prgchw5, utf16 * prgchw6,
- int * prgichwRaw);
-
-protected:
- void SetUpFeatureValues(GrTableManager * ptman, int ichr);
-public:
- static utf32 Utf8ToUtf32(utf8 * prgchs8bit, int cchs, int * pcchsUsed);
- static utf32 Utf16ToUtf32(utf16 * prgchw16bit, int cchw, int * pcchwUsed);
- bool AtUnicodeCharBoundary(int cchr)
- {
- return AtUnicodeCharBoundary(m_pgts, cchr);
- }
- static bool AtUnicodeCharBoundary(ITextSource * pgts, int ichr);
- static bool AtUnicodeCharBoundary(utf8 * prgchs, int cchs, int ichs, UtfType utf);
- static bool AtUnicodeCharBoundary(utf16 * prgchw, int cchw, int ichr, UtfType utf);
- static bool FromSurrogatePair(utf16 chwIn1, utf16 chwIn2, unsigned int * pch32Out);
- static long DecodeUtf8(const utf8 * rgchUtf8, int cchUtf8, int * pcbOut);
-
-protected:
- // Instance variables:
- // Hungarian note: chr = raw characters, chl = long characters (UTF-32)
- // chs = short characters (UTF-8), chw = wide characters (UTF-16)
- ITextSource * m_pgts; // string to render
- UtfType m_utf; // what encoding form the text-source uses
- int m_ichrMin; // official start of segment relative to beginning of string
- int m_ichrLim; // end of stream (potential end of seg) relative to beginning of string
- int m_ichrPos; // stream position (0 = start of string)
- bool m_fStartLine; // true if a line-break character should be prepended
- bool m_fEndLine; // true if a line-break character should be appended
- int m_cchrBackedUp; // number of characters backed up before beginning of segment
-
- // We read a run's worth of data at a time and cache it in the following variables:
- int m_cchlRunMax; // size of buffer allocated
- int * m_prgchlRunText; // buffer containing current run
- int m_ichrRunMin; // start of run relative to beginning of string
- int m_ichrRunLim; // end of run relative to beginning of string
- int m_ichlRunOffset; // index into m_prgchlRunText; kPosInfinity if nothing set up
- int m_ichrRunOffset; // corresponding index into text source
- GrFeatureValues m_fvalRunFeats;
-
- std::vector<int> m_vislotNextChunkMap; // maps from 16-bit chars to 32-bit chars & glyphs
-
- enum
- {
- kzUtf8Mask1 = 0x7F,
- kzUtf8Mask2 = 0x1F,
- kzUtf8Mask3 = 0x0F,
- kzUtf8Mask4 = 0x07,
- kzUtf8Mask5 = 0x03,
- kzUtf8Mask6 = 0x01
- };
-
- enum
- {
- kzUtf8Flag1 = 0x00,
- kzUtf8Flag2 = 0xC0,
- kzUtf8Flag3 = 0xE0,
- kzUtf8Flag4 = 0xF0,
- kzUtf8Flag5 = 0xF8,
- kzUtf8Flag6 = 0xFC
- };
-
- enum
- {
- kzByteMask = 0x3F,
- kzByteMark = 0x80,
- kzUtf8ByteShift = 6,
- kzUnicodeMax = 0x7FFFFFFF
- };
-
- enum
- {
- kzUtf16Shift = 10,
- kzUtf16Inc = 0x2400,
- kzUtf16HighFirst = 0xD800,
- kzUtf16HighLast = 0xDBFF,
- kzUtf16LowFirst = 0xDC00,
- kzUtf16LowLast = 0xDFFF
- };
-};
-
-} // namespace gr
-
-#endif // !GR_CHARSTREAM_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/src/segment/GrClassTable.cpp b/Build/source/libs/graphite-engine/src/segment/GrClassTable.cpp
deleted file mode 100644
index 43316fdc04a..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrClassTable.cpp
+++ /dev/null
@@ -1,382 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrClassTable.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements the GrClassTable class and related classes.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Fill in by reading from the file stream.
-----------------------------------------------------------------------------------------------*/
-bool GrClassTable::ReadFromFont(GrIStream & grstrm, int fxdVersion)
-{
- long lClassMapStart;
- grstrm.GetPositionInFont(&lClassMapStart);
-
- // number of classes
- m_ccls = grstrm.ReadUShortFromFont();
- if (m_ccls >= kMaxReplcmtClasses)
- return false; // bad table
- if (fxdVersion < 0x00030000 && m_ccls > kMaxReplcmtClassesV1_2)
- return false; // bad table
-
- // number of linear classes
- m_cclsLinear = grstrm.ReadUShortFromFont();
- if (m_cclsLinear > m_ccls)
- return false; // bad table
-
- // class offsets
- m_prgichwOffsets = new data16[m_ccls + 1];
- gAssert(m_prgichwOffsets);
- if (!m_prgichwOffsets)
- return false; // bad table
-
- data16 * pchw = m_prgichwOffsets;
- int icls;
- for (icls = 0; icls <= m_ccls; icls++, pchw++)
- {
- *pchw = grstrm.ReadUShortFromFont();
- }
-
- // Offsets are relative to the start class map; make them relative to the class list
- // itself, and in terms of utf16s, not bytes.
- long lClassesPos;
- grstrm.GetPositionInFont(&lClassesPos);
- int cbDiff = lClassesPos - lClassMapStart;
- for (icls = 0; icls <= m_ccls; icls++)
- {
- m_prgichwOffsets[icls] = data16(int(m_prgichwOffsets[icls]) - cbDiff);
- gAssert((m_prgichwOffsets[icls] & 0x00000001) == 0);
- if ((m_prgichwOffsets[icls] & 0x00000001) != 0)
- return false; // bad table
- m_prgichwOffsets[icls] >>= 1; // divide by 2
- }
-
- // classes - slurp entire block (data remains in big-endian format)
- m_prgchwBIGGlyphList = new data16[m_prgichwOffsets[m_ccls]];
- gAssert(m_prgchwBIGGlyphList);
- if (!m_prgchwBIGGlyphList)
- return false; // bad table
- grstrm.ReadBlockFromFont(m_prgchwBIGGlyphList,
- m_prgichwOffsets[m_ccls] * isizeof(data16));
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up an empty class table.
-----------------------------------------------------------------------------------------------*/
-void GrClassTable::CreateEmpty()
-{
- // number of classes
- m_ccls = 0;
- // number of linear classes
- m_cclsLinear = 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Search for the glyph ID using a fast binary search, and return the matching index.
-----------------------------------------------------------------------------------------------*/
-int GrInputClass::FindIndex(gid16 gid)
-{
- int digixInit = InitialSearchRange();
- int igixStart = StartSearch();
-#ifdef _DEBUG
- int cgix = NumberOfGlyphs();
- int nPowerOf2 = 1;
- while (nPowerOf2 <= cgix)
- nPowerOf2 <<= 1;
- nPowerOf2 >>= 1;
- // Now nPowerOf2 is the max power of 2 <= cgix
- gAssert((1 << LoopCount()) == nPowerOf2); // LoopCount() == log2(nPowerOf2)
- gAssert(digixInit == nPowerOf2);
- gAssert(igixStart == cgix - digixInit);
-#endif // _DEBUG
-
- int digixCurr = digixInit;
-
- GrGlyphIndexPair * pgixCurr = m_pgixFirst + igixStart;
- while (digixCurr > 0)
- {
- int nTest;
- if (pgixCurr < m_pgixFirst)
- nTest = -1;
- else
- nTest = pgixCurr->GlyphID() - gid;
-
- if (nTest == 0)
- return pgixCurr->Index();
-
- digixCurr >>= 1; // divide by 2
- if (nTest < 0)
- pgixCurr += digixCurr;
- else // (nTest > 0)
- pgixCurr -= digixCurr;
- }
-
- return -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the selector index for the given glyph ID.
-----------------------------------------------------------------------------------------------*/
-int GrClassTable::FindIndex(int icls, gid16 chwGlyphID)
-{
- if (icls >= m_ccls)
- {
- gAssert(false); // bad compiler problem
- return 0;
- }
-
- if (icls < m_cclsLinear)
- {
- // The class is an output class--uses linear format--and is being used as an
- // input class. Shouldn't happen if the compiler is working right.
- gAssert(false); // comment out for test procedures
-
- // Do a slow linear search to find the glyph ID.
- int ichwMin = m_prgichwOffsets[icls];
- int ichwLim = m_prgichwOffsets[icls+1];
- int cchw = ichwLim - ichwMin;
-
- for (int ichw = 0; ichw < cchw; ichw++)
- {
- if (GlyphAt(ichwMin + ichw) == chwGlyphID)
- return ichw;
- }
- return -1;
- }
-
- // Slurp the class into an instance so we can see what's there.
- GrInputClass clsin;
- int ichwMin = m_prgichwOffsets[icls];
- int ichwLim = m_prgichwOffsets[icls+1];
- clsin.CopyFrom(GlyphListLoc(ichwMin), (ichwLim - ichwMin));
-
- // Do a fast binary search to find our glyph.
- int iRet = clsin.FindIndex(chwGlyphID);
- return iRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the glyph ID at the selector index.
-----------------------------------------------------------------------------------------------*/
-gid16 GrClassTable::GetGlyphID(int icls, int ichw)
-{
- if (ichw < 0)
- {
- gAssert(false);
- return 0;
- }
-
- if (icls >= m_cclsLinear)
- {
- // The class is an input class--sorted by glyph ID--and is being used as an
- // output class. Shouldn't happen if the compiler is working right.
- gAssert(false); // comment out for test procedures
-
- if (icls >= m_ccls) // bad compiler problem
- return 0;
-
- // Do a slow linear search to find the index and answer the matching glyph.
- // Slurp the class into an instance so we can see what's there.
- GrInputClass clsin;
- int ichwMin = m_prgichwOffsets[icls];
- int ichwLim = m_prgichwOffsets[icls+1];
- clsin.CopyFrom(GlyphListLoc(ichwMin), (ichwLim - ichwMin));
-
- int cgix = clsin.NumberOfGlyphs();
- for (int igix = 0; igix < cgix; igix++)
- {
- GrGlyphIndexPair * m_pgix = clsin.m_pgixFirst + igix;
- if (m_pgix->Index() == ichw)
- return m_pgix->GlyphID();
- }
- return 0;
- }
-
- int ichwMin = m_prgichwOffsets[icls];
- int ichwLim = m_prgichwOffsets[icls+1];
-
- if (ichw >= ichwLim - ichwMin)
- return 0;
- else
- return GlyphAt(ichwMin + ichw);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of glyphs in the class.
-----------------------------------------------------------------------------------------------*/
-int GrClassTable::NumberOfGlyphsInClass(int icls)
-{
- int ichwMin = m_prgichwOffsets[icls];
- int ichwLim = m_prgichwOffsets[icls+1];
-
- if (icls >= m_cclsLinear)
- {
- if (icls >= m_ccls) // bad compiler problem
- return 0;
-
- GrInputClass clsin;
- clsin.CopyFrom(GlyphListLoc(ichwMin), (ichwLim - ichwMin));
-
- int cgix = clsin.NumberOfGlyphs();
- return cgix;
- }
- else
- {
- gAssert(false); // this method should not be used for output classes.
- return ichwLim - ichwMin;
- }
-}
-
-//:>********************************************************************************************
-//:> For test procedures
-//:>********************************************************************************************
-
-//:Ignore
-
-#ifdef OLD_TEST_STUFF
-/*----------------------------------------------------------------------------------------------
- General test of class table.
-----------------------------------------------------------------------------------------------*/
-void GrClassTable::SetUpTestData()
-{
- m_ccls = 7; // number of classes
- m_cclsLinear = 4; // number of classes in linear format
-
- m_prgchwBIGGlyphList = new gid16[100];
-
- m_prgichwOffsets = new data16[7+1];
-
- gid16 * pchw = m_prgchwBIGGlyphList;
-
- // Output class 0: uppercase consonants B - H
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(gid16(66)); *pchw++ = msbf(utf16(67)); *pchw++ = msbf(utf16(68));
- *pchw++ = msbf(gid16(70)); *pchw++ = msbf(utf16(71)); *pchw++ = msbf(utf16(72));
-
- // Output class 1: grave vowels
- m_prgichwOffsets[1] = 6;
- *pchw++ = msbf(gid16(192)); // A
- *pchw++ = msbf(gid16(224)); // a
- *pchw++ = msbf(gid16(200)); // E
- *pchw++ = msbf(gid16(232)); // e
- *pchw++ = msbf(gid16(204)); // I
- *pchw++ = msbf(gid16(236)); // i
- *pchw++ = msbf(gid16(210)); // O
- *pchw++ = msbf(gid16(243)); // o
- *pchw++ = msbf(gid16(217)); // U
- *pchw++ = msbf(gid16(249)); // u
-
- // Output class 2: circumflex vowels
- m_prgichwOffsets[2] = 6 + 10;
- *pchw++ = msbf(gid16(194)); // A
- *pchw++ = msbf(gid16(226)); // a
- *pchw++ = msbf(gid16(202)); // E
- *pchw++ = msbf(gid16(234)); // e
- *pchw++ = msbf(gid16(206)); // I
- *pchw++ = msbf(gid16(238)); // i
- *pchw++ = msbf(gid16(212)); // O
- *pchw++ = msbf(gid16(244)); // o
- *pchw++ = msbf(gid16(219)); // U
- *pchw++ = msbf(gid16(251)); // u
-
- // Output class 3: diaeresis vowels, uppercase
- m_prgichwOffsets[3] = 16 + 10;
- *pchw++ = msbf(gid16(196)); // A
- *pchw++ = msbf(gid16(196)); // A
- *pchw++ = msbf(gid16(203)); // E
- *pchw++ = msbf(gid16(203)); // E
- *pchw++ = msbf(gid16(207)); // I
- *pchw++ = msbf(gid16(207)); // I
- *pchw++ = msbf(gid16(214)); // O
- *pchw++ = msbf(gid16(214)); // O
- *pchw++ = msbf(gid16(220)); // U
- *pchw++ = msbf(gid16(220)); // U
-
- // Input class 4: lowercase consonants b - h
- m_prgichwOffsets[4] = 26 + 10; // = 36
- *pchw++ = msbf(gid16(6));
- *pchw++ = msbf(gid16(4)); *pchw++ = msbf(gid16(2)); *pchw++ = msbf(gid16(6-4));
- *pchw++ = msbf(gid16(98)); *pchw++ = msbf(gid16(0));
- *pchw++ = msbf(gid16(99)); *pchw++ = msbf(gid16(1));
- *pchw++ = msbf(gid16(100)); *pchw++ = msbf(gid16(2));
- *pchw++ = msbf(gid16(102)); *pchw++ = msbf(gid16(3));
- *pchw++ = msbf(gid16(103)); *pchw++ = msbf(gid16(4));
- *pchw++ = msbf(gid16(104)); *pchw++ = msbf(gid16(5));
-
- // Input class 5: vowels
- m_prgichwOffsets[5] = 36 + 4 + 6*2; // = 52
- *pchw++ = msbf(gid16(10));
- *pchw++ = msbf(gid16(8)); *pchw++ = msbf(utf16(3)); *pchw++ = msbf(utf16(10-8));
- *pchw++ = msbf(gid16(65)); *pchw++ = msbf(gid16(0)); // A
- *pchw++ = msbf(gid16(69)); *pchw++ = msbf(gid16(2)); // E
- *pchw++ = msbf(gid16(73)); *pchw++ = msbf(gid16(4)); // I
- *pchw++ = msbf(gid16(79)); *pchw++ = msbf(gid16(6)); // O
- *pchw++ = msbf(gid16(85)); *pchw++ = msbf(gid16(8)); // U
- *pchw++ = msbf(gid16(97)); *pchw++ = msbf(gid16(1)); // a
- *pchw++ = msbf(gid16(101)); *pchw++ = msbf(gid16(3)); // e
- *pchw++ = msbf(gid16(105)); *pchw++ = msbf(gid16(5)); // i
- *pchw++ = msbf(gid16(111)); *pchw++ = msbf(gid16(7)); // o
- *pchw++ = msbf(gid16(117)); *pchw++ = msbf(gid16(9)); // u
-
- // Input class 6: acute vowels
- m_prgichwOffsets[6] = 52 + 4 + 10*2; // = 76
- *pchw++ = msbf(gid16(10));
- *pchw++ = msbf(gid16(8)); *pchw++ = msbf(gid16(3)); *pchw++ = msbf(gid16(10-8));
- *pchw++ = msbf(gid16(193)); *pchw++ = msbf(gid16(0)); // A
- *pchw++ = msbf(gid16(201)); *pchw++ = msbf(gid16(2)); // E
- *pchw++ = msbf(gid16(205)); *pchw++ = msbf(gid16(4)); // I
- *pchw++ = msbf(gid16(211)); *pchw++ = msbf(gid16(6)); // O
- *pchw++ = msbf(gid16(218)); *pchw++ = msbf(gid16(8)); // U
- *pchw++ = msbf(gid16(225)); *pchw++ = msbf(gid16(1)); // a
- *pchw++ = msbf(gid16(233)); *pchw++ = msbf(gid16(3)); // e
- *pchw++ = msbf(gid16(237)); *pchw++ = msbf(gid16(5)); // i
- *pchw++ = msbf(gid16(243)); *pchw++ = msbf(gid16(7)); // o
- *pchw++ = msbf(gid16(250)); *pchw++ = msbf(gid16(9)); // u
-
- m_prgichwOffsets[7] = 76 + 4 + 10*2; // = 100
-};
-
-#endif // OLD_TEST_STUFF
-
-} // namespace gr
-
-//:End Ignore
-
diff --git a/Build/source/libs/graphite-engine/src/segment/GrClassTable.h b/Build/source/libs/graphite-engine/src/segment/GrClassTable.h
deleted file mode 100644
index 67d6940862c..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrClassTable.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrClassTable.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- The GrClassTable and related classes that store the classes that are used in substitutions.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_CTABLE_INCLUDED
-#define GR_CTABLE_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- A glyph ID / index pair, a member of the GrInputClass where the items are sorted
- by glyph ID.
-
- Hungarian: gix
-----------------------------------------------------------------------------------------------*/
-class GrGlyphIndexPair
-{
- friend class GrInputClass;
- friend class GrClassTable;
-
- gid16 GlyphID() { return lsbf(m_gidBIG); }
- data16 Index() { return lsbf(m_nBIGIndex); }
-
- gid16 m_gidBIG;
- data16 m_nBIGIndex;
-};
-
-/*----------------------------------------------------------------------------------------------
- A class consisting of a mapping from glyph ID to index, used for classes that
- function as input classes (eg, occurrng in the left-hand side of a rule).
-
- Hungarian: clsin
-----------------------------------------------------------------------------------------------*/
-class GrInputClass
-{
- friend class GrClassTable;
-
-protected:
- /*------------------------------------------------------------------------------------------
- Copy the raw memory into the instance.
- ------------------------------------------------------------------------------------------*/
- void CopyFrom(data16 * pchwStart, int cchw)
- {
- m_cgixBIG = pchwStart[0];
- m_digixBIGInit = pchwStart[1];
- m_cBIGLoop = pchwStart[2];
- m_igixBIGStart = pchwStart[3];
-
- int cgix = NumberOfGlyphs();
- m_pgixFirst = m_prggixBuffer;
- if (cgix > 64)
- {
- m_vgix.resize(cgix);
- m_pgixFirst = &m_vgix[0];
- }
- gAssert((4 + (cgix * 2)) == cchw);
- #ifdef _DEBUG
- memset(m_pgixFirst, 0, cgix * isizeof(GrGlyphIndexPair));
- #endif
- Assert(sizeof(GrGlyphIndexPair) == sizeof(gid16) + sizeof(data16));
- GrGlyphIndexPair * pgixStart = reinterpret_cast<GrGlyphIndexPair*>(pchwStart + 4);
- std::copy(pgixStart, pgixStart + cgix, m_pgixFirst);
- }
-
- int NumberOfGlyphs() { return lsbf(m_cgixBIG); }
- int LoopCount() { return lsbf(m_cBIGLoop); }
- int InitialSearchRange() { return lsbf(m_digixBIGInit); }
- int StartSearch() { return lsbf(m_igixBIGStart); }
-
- int FindIndex(gid16 gid);
-
-protected:
- // Instance variables:
- data16 m_cgixBIG; // number of glyphs in the class
-
- // constants for fast binary search
- data16 m_digixBIGInit; // (max power of 2 <= m_cgix);
- // size of initial range to consider
- data16 m_cBIGLoop; // log2(max power of 2 <= m_cgix);
- // indicates how many iterations are necessary
- data16 m_igixBIGStart; // m_cgix - m_digixInit;
- // where to start search
-
- GrGlyphIndexPair m_prggixBuffer[64];
- std::vector<GrGlyphIndexPair> m_vgix;
- GrGlyphIndexPair * m_pgixFirst;
-};
-
-
-/*----------------------------------------------------------------------------------------------
- Contains all the classes used for substitution rules.
-
- Hungarian: ctbl
-----------------------------------------------------------------------------------------------*/
-
-class GrClassTable
-{
- friend class FontMemoryUsage;
-
-public:
- // Constructor & destructor:
- GrClassTable()
- : m_prgichwOffsets(NULL),
- m_prgchwBIGGlyphList(NULL)
- {
- }
-
- ~GrClassTable()
- {
- delete[] m_prgichwOffsets;
- delete[] m_prgchwBIGGlyphList;
- }
-
- int NumberOfClasses() { return m_ccls; }
- int NumberOfInputClasses() { return m_ccls - m_cclsLinear; }
- int NumberOfOutputClasses() { return m_cclsLinear; }
-
- bool ReadFromFont(GrIStream & grstrm, int fxdVersion);
- void CreateEmpty();
-
- int FindIndex(int icls, gid16 chwGlyphID);
- gid16 GetGlyphID(int icls, int ichw);
- int NumberOfGlyphsInClass(int icls);
-
- gid16 GlyphAt(int ichw)
- {
- return lsbf(m_prgchwBIGGlyphList[ichw]);
- }
- data16 * GlyphListLoc(int ichw)
- {
- return m_prgchwBIGGlyphList + ichw;
- }
-
-protected:
- // Instance variables:
- int m_ccls; // number of classes
- int m_cclsLinear; // number of classes in linear format
-
- data16 * m_prgichwOffsets;
-
- // Two formats are included in the following array: the first section consists of
- // flat ordered lists of glyphs, used for the "output" classes that use linear format.
- // This provides an index-to-glyph mapping.
- // The second section contains data in the format of GrInputClasses, used for "input"
- // classes that need a binary-search format. This provides a glyph-to-index mapping.
- // We don't create instances of GrInputClasses, because that would make reading
- // from the ECF file slow. Instead we just set up a single instance at the time
- // we're interested in it.
- // NOTE that all this data has been slurped directly from the ECF file and therefore
- // uses BIG-ENDIAN format.
- gid16 * m_prgchwBIGGlyphList;
-
-//:Ignore
-#ifdef OLD_TEST_STUFF
-public:
- // For test procedures:
- void SetUpTestData();
- void SetUpRuleActionTest();
- void SetUpRuleAction2Test();
- void SetUpAssocTest();
- void SetUpAssoc2Test();
- void SetUpDefaultAssocTest();
- void SetUpFeatureTest();
- void SetUpLigatureTest();
- void SetUpLigature2Test();
-#endif // OLD_TEST_STUFF
-//:End Ignore
-};
-
-} // namespace gr
-
-#endif // !GR_CTABLE_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/src/segment/GrEngine.cpp b/Build/source/libs/graphite-engine/src/segment/GrEngine.cpp
deleted file mode 100644
index 0fda68df880..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrEngine.cpp
+++ /dev/null
@@ -1,2030 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrEngine.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description: Contains the implementation of the GrEngine class.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#include <functional>
-#include <cstring>
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-
-//:>********************************************************************************************
-//:> General functions
-//:>********************************************************************************************
-
-bool compareCmap(const byte *lhs, const byte *rhs)
-{
- using namespace gr;
-
- typedef const struct index {data16 version; data16 numberSubtables;} *const IndexPtr;
- typedef const struct enc {data16 platID; data16 platSpecID; data32 offset;} *const EncPtr;
-
- // Calculate the size of the cmap.
-
- IndexPtr rhsIndex = IndexPtr(rhs);
- size_t numSubTbl = lsbf(rhsIndex->numberSubtables);
- size_t cbCmapSz = sizeof(index) + sizeof(enc) * numSubTbl;
- EncPtr encTbl = EncPtr(rhs + sizeof(index));
-
- for (size_t iSubTbl = 0; iSubTbl < numSubTbl; iSubTbl++)
- //for (int iSubTbl = numSubTbl - 1; iSubTbl >= 0; --iSubTbl)
- {
- const data16 *const mapTbl = reinterpret_cast<const data16 *>(rhs + lsbf((int)encTbl[iSubTbl].offset));
- int format = lsbf(*mapTbl);
- switch (format)
- {
- // 16-bit lengths
- case 0:
- case 2:
- case 4:
- case 6:
- cbCmapSz += lsbf((data16)unsigned(mapTbl[1]));
- break;
- // 32-bit lengths
- case 8:
- case 10:
- case 12:
- cbCmapSz += lsbf((int)unsigned(reinterpret_cast<const data32 *>(mapTbl)[1]));
- break;
- default:
- Assert(false);
- }
- }
-
- // Do the comparison.
- return (memcmp(lhs, rhs, cbCmapSz) ? false : true);
-}
-
-
-//:>********************************************************************************************
-//:> GrEngine class.
-//:>********************************************************************************************
-
-GrEngine::GrEngine()
-{
- /////////////_CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF); ////////////////
-
-
- m_cref = 1;
- BasicInit();
-}
-
-void GrEngine::BasicInit()
-{
- m_pfface = NULL;
-
- m_ptman = NULL;
- m_pctbl = NULL;
- m_pgtbl = NULL;
- m_prgpsd = NULL;
- m_cpsd = 0;
- m_cfeat = 0;
- m_mFontEmUnits = -1;
- m_dysOffset = 0;
-
- ////m_tbufCmap.reset();
- m_pCmap_3_1 = NULL;
- m_pCmap_3_10 = NULL;
- ////m_tbufNameTbl.reset();
- // new interface stuff:
- m_pCmapTbl = NULL;
- m_pNameTbl = NULL;
- m_fCmapTblCopy = false;
- m_fNameTblCopy = false;
-
- m_fLogXductn = false;
-
- m_resFontValid = kresInvalidArg; // not yet initialized
- m_ferr = kferrUninitialized;
- m_fxdBadVersion = 0;
-
- m_fSmartReg = false;
- m_fSmartBold = false;
- m_fSmartItalic = false;
- m_fSmartBI = false;
- m_fFakeItalicCache = false;
- m_fFakeBICache = false;
- m_strCtrlFileReg.erase();
- m_strCtrlFileBold.erase();
- m_strCtrlFileItalic.erase();
- m_strCtrlFileBI.erase();
- m_fFakeItalic = false;
- m_stuCtrlFile.erase();
- m_stuInitError.erase();
- m_stuErrCtrlFile.erase();
- m_stuFaceName.erase();
- m_stuBaseFaceName.erase();
- m_fUseSepBase = false;
- m_stuFeatures.erase();
-
- m_nFontCheckSum = 0;
-
- m_fInErrorState = false;
-
- m_rglcidFeatLabelLangs = NULL; // initialize lazily, when needed
- m_clcidFeatLabelLangs = 0;
-}
-
-GrEngine::~GrEngine()
-{
- DestroyEverything();
- #ifdef _MSC_VER
- if (!_CrtCheckMemory())
- {
- OutputDebugString(L"bad memory");
- }
- #endif
-}
-
-/*----------------------------------------------------------------------------------------------
- Clean everything out (destructor or reinitializing with a different face name).
-----------------------------------------------------------------------------------------------*/
-void GrEngine::DestroyEverything()
-{
- DestroyContents();
- #ifdef _MSC_VER
- if (!_CrtCheckMemory())
- {
- OutputDebugString(L"bad memory");
- }
- #endif
-
- m_strCtrlFileReg.erase();
- m_strCtrlFileBold.erase();
- m_strCtrlFileItalic.erase();
- m_strCtrlFileBI.erase();
- m_fSmartReg = false;
- m_fSmartBold = false;
- m_fSmartItalic = false;
- m_fSmartBI = false;
- m_fFakeItalicCache = false;
- m_fFakeBICache = false;
- m_stuBaseFaceName.erase();
-
- //m_stuFaceName.erase();
- //m_stuFaceName = L"this is not a usable or valid string";
- m_fUseSepBase = false;
- m_stuFeatures.erase();
-}
-
-void GrEngine::DestroyContents(bool fDestroyCmap)
-{
- if (fDestroyCmap)
- {
- ////m_tbufCmap.reset();
- m_pCmap_3_1 = NULL;
- m_pCmap_3_10 = NULL;
-
- if (m_fCmapTblCopy)
- delete[] m_pCmapTbl;
- if (m_fNameTblCopy)
- delete[] m_pNameTbl;
- m_pCmapTbl = NULL;
- m_pNameTbl = NULL;
- m_fCmapTblCopy = false;
- m_fNameTblCopy = false;
- }
-
- delete m_ptman;
- delete m_pctbl;
- delete m_pgtbl;
- delete[] m_prgpsd;
- m_ptman = NULL;
- m_pctbl = NULL;
- m_pgtbl = NULL;
- m_prgpsd = NULL;
-
- ////m_tbufNameTbl.reset();
-
- m_stuCtrlFile.erase();
- m_stuInitError.erase();
-
- m_resFontValid = kresInvalidArg;
- m_ferr = kferrUninitialized;
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the number of features.
-----------------------------------------------------------------------------------------------*/
-size_t GrEngine::NumberOfFeatures_ff()
-{
- return (size_t)m_cfeat;
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the feature ID for the ifeat-th feature.
-----------------------------------------------------------------------------------------------*/
-featid GrEngine::FeatureID_ff(size_t ifeat)
-{
- return (featid)m_rgfeat[ifeat].ID();
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the index of the feature with the given ID.
-----------------------------------------------------------------------------------------------*/
-size_t GrEngine::FeatureWithID_ff(featid fid)
-{
- int ifeatRet;
- /* GrFeature * pfeat = */
- FeatureWithID(fid, &ifeatRet);
- return (size_t)ifeatRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the label for the ifeat-th feature.
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::GetFeatureLabel_ff(size_t ifeat, lgid nLanguage, utf16 * rgchwLabel)
-{
- std::wstring stu = m_rgfeat[ifeat].Label(this, nLanguage);
-
- int cch = stu.size();
- cch = min(cch, 127); // 1 char for zero-termination
- std::copy(stu.data(), stu.data() + cch, rgchwLabel);
- rgchwLabel[cch] = 0;
-
- return (cch > 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the index of the default setting. Return -1 if it cannot be found.
-----------------------------------------------------------------------------------------------*/
-int GrEngine::GetFeatureDefault_ff(size_t ifeat)
-{
- GrFeature * pfeat = m_rgfeat + ifeat;
- int defaultValue = pfeat->DefaultValue();
- int cfset = pfeat->NumberOfSettings();
- int rgnSettings[100];
- pfeat->Settings(100, rgnSettings);
- Assert(cfset < 100); // TODO: improve this
- for (int ifset = 0; ifset < cfset; ifset++)
- {
- if (rgnSettings[ifset] == defaultValue)
- return ifset;
- }
- return -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the number of settings for the ifeat-th feature.
-----------------------------------------------------------------------------------------------*/
-size_t GrEngine::NumberOfSettings_ff(size_t ifeat)
-{
- return m_rgfeat[ifeat].NumberOfSettings();
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the value of the ifset-th setting for the ifeat-th feature.
-----------------------------------------------------------------------------------------------*/
-int GrEngine::GetFeatureSettingValue_ff(size_t ifeat, size_t ifset)
-{
- return m_rgfeat[ifeat].NthSetting(ifset);
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the UI label for the given feature setting.
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::GetFeatureSettingLabel_ff(size_t ifeat, size_t ifset, lgid language,
- utf16 * rgchwLabel)
-{
- std::wstring stu = m_rgfeat[ifeat].NthSettingLabel(this, ifset, language);
-
- int cch = stu.size();
- cch = min(cch, 127); // 1 char for zero-termination
- // Note: the wchar_t label was originally assigned from utf16 data, so although wchar_t is
- // utf32 on some platforms the conversion back to utf16 should still give correct results.
- std::copy(stu.data(), stu.data() + cch, rgchwLabel);
- rgchwLabel[cch] = 0;
-
- return (cch > 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the number of languages that are possible among the feature labels.
-----------------------------------------------------------------------------------------------*/
-size_t GrEngine::NumberOfFeatLangs_ff()
-{
- SetUpFeatLangList();
- return m_clcidFeatLabelLangs;
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the language LCID for the feature-label language with the given index.
-----------------------------------------------------------------------------------------------*/
-short GrEngine::GetFeatLabelLang_ff(size_t ilang)
-{
- SetUpFeatLangList();
- return m_rglcidFeatLabelLangs[ilang];
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the number of supported languages.
-----------------------------------------------------------------------------------------------*/
-size_t GrEngine::NumberOfLanguages_ff()
-{
- return (size_t)m_langtbl.NumberOfLanguages();
-}
-
-/*----------------------------------------------------------------------------------------------
- For FontFace: return the language code for the language with the given index.
-----------------------------------------------------------------------------------------------*/
-isocode GrEngine::GetLanguageCode_ff(size_t ilang)
-{
- return m_langtbl.LanguageCode(ilang);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up the list of all the languages that are present in the feature labels.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpFeatLangList()
-{
- if (m_rglcidFeatLabelLangs)
- return;
-
- int rgnNameIDs[kMaxFeatures];
- for (int ifeat = 0; ifeat < m_cfeat; ifeat++)
- rgnNameIDs[ifeat] = m_rgfeat[ifeat].NameId();
- short rglcid[128]; // 128 is the number expected by TtfUtil::GetLangsForNames
- m_clcidFeatLabelLangs = TtfUtil::GetLangsForNames(m_pNameTbl, 3, 1, rgnNameIDs, m_cfeat, rglcid);
- m_rglcidFeatLabelLangs = new short[m_clcidFeatLabelLangs];
- memcpy(m_rglcidFeatLabelLangs, rglcid, sizeof(short) * m_clcidFeatLabelLangs);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the maximum size needed for the block of data to pass between segments, that is,
- to reinitialize the engine based on the results of the previously generated segment.
- This value must match what is in GrTableManager::InitializeStreams() and
- InitializeForNextSeg(). 256 is an absolute maximum imposed by the interface.
-
- In Graphite, what this block of data will contain is information about cross-line
- contextualization and some directionality information.
-
- Assumes InitNew() has already been called to set the font name.
-----------------------------------------------------------------------------------------------*/
-GrResult GrEngine::get_SegDatMaxLength(int * pcb)
-{
- ChkGrOutPtr(pcb);
-
- if (m_resFontValid == kresInvalidArg)
- ReturnResult(kresUnexpected); // engine not initialized
-
- GrResult res = m_resFontValid;
- if (m_resFontValid == kresFail || m_resFontValid == kresUnexpected || m_resFontValid == kresFalse)
- res = kresOk; // invalid font
- if (ResultFailed(res))
- ReturnResult(res);
-
- Assert(m_ptman);
- if (!m_ptman)
- *pcb = 256;
- else
- *pcb = m_ptman->NumberOfPasses() + 4;
-
- ReturnResult(res);
-}
-
-/*----------------------------------------------------------------------------------------------
- @return The supported script direction(s). If more than one, the application is
- responsible for choosing the most appropriate.
-----------------------------------------------------------------------------------------------*/
-GrResult GrEngine::get_ScriptDirection(unsigned int * pgrfsdc, OLECHAR * prgchwErrMsg, int cchMaxErrMsg)
-{
- ChkGrOutPtr(pgrfsdc);
- ChkGrArrayArg(prgchwErrMsg, cchMaxErrMsg);
-
- if (m_resFontValid == kresInvalidArg)
- ReturnResult(kresUnexpected); // engine not initialized
-
- GrResult res = m_resFontValid;
-
- *pgrfsdc = m_grfsdc;
-
-// ClearFontError(prgchwErrMsg, cchMaxErrMsg);
-// try
-// {
-// if (m_resFontValid == kresFail || m_resFontValid == kresUnexpected || m_resFontValid == kresFalse)
-// {
-// RecordFontLoadError(prgchwErrMsg, cchMaxErrMsg);
-// res = kresOk;
-// }
-// *pgrfsdc = m_grfsdc;
-// }
-// catch (Throwable & thr)
-// {
-// res = (GrResult)thr.Error();
-// *pgrfsdc = kfsdcHorizLtr;
-// }
-// catch (...)
-// {
-// res = WARN(kresFail);
-// *pgrfsdc = kfsdcHorizLtr;
-// }
-
- ReturnResult(res);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get an glyph attribute from the engine that will help the GrJustifier in its work.
-----------------------------------------------------------------------------------------------*/
-GrResult GrEngine::getGlyphAttribute(int iGlyph, int jgat, int nLevel, float * pValueRet)
-{
- return m_ptman->State()->GetGlyphAttrForJustification(iGlyph, jgat, nLevel, pValueRet);
-}
-
-GrResult GrEngine::getGlyphAttribute(int iGlyph, int jgat, int nLevel, int * pValueRet)
-{
- return m_ptman->State()->GetGlyphAttrForJustification(iGlyph, jgat, nLevel, pValueRet);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set an glyph attribute in the engine as a result of the decisions made by the
- GrJustifier.
-----------------------------------------------------------------------------------------------*/
-GrResult GrEngine::setGlyphAttribute(int iGlyph, int jgat, int nLevel, float value)
-{
- return m_ptman->State()->SetGlyphAttrForJustification(iGlyph, jgat, nLevel, value);
-}
-
-GrResult GrEngine::setGlyphAttribute(int iGlyph, int jgat, int nLevel, int value)
-{
- return m_ptman->State()->SetGlyphAttrForJustification(iGlyph, jgat, nLevel, value);
-}
-
-//:>********************************************************************************************
-//:> Non-FieldWorks interface methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Make a complete segment that can be used to measure and do line-breaking.
-
- OBSOLETE - delete
-----------------------------------------------------------------------------------------------*/
-/*
-GrResult GrEngine::MakeMeasuredSegment(
- Font * pfont, ITextSource * pgts,
- int ichMin, int ichLim,
- bool fParaRtl,
- Segment ** ppsegRet, SegEnd * pest,
- std::ostream * pstrmLog,
- OLECHAR * prgchwErrMsg, int cchMaxErrMsg)
-{
- int dichContext, dichLimSeg;
- float dxWidth;
- return MakeSegment(ksegmodeMsfr,
- pfont, pgts, NULL, ichMin, ichLim, false, false,
- 100000, klbClipBreak, ktwshAll, // not used
- fParaRtl,
- ppsegRet, &dxWidth,
- 0, NULL, 0, NULL, NULL, &dichContext, // not used
- pstrmLog,
- prgchwErrMsg, cchMaxErrMsg,
- -1, false, false, klbClipBreak, // not used
- &dichLimSeg, pest,
- false, 100000, kestMoreLines); // not used
-}
-*/
-
-/*----------------------------------------------------------------------------------------------
- Make a segment from the given range, regardless of the kind of line-break that results.
-
- OBSOLETE - delete
-----------------------------------------------------------------------------------------------*/
-/*
-GrResult GrEngine::MakeSegmentFromRange(
- Font * pfont, ITextSource * pgts, IGrJustifier * pgj,
- int ichMin, int ichLim,
- bool fStartLine, bool fEndLine,
- TrWsHandling twsh, bool fParaRtl,
- Segment ** ppsegRet, float * pdxWidth, SegEnd * pest,
- int cbPrev, byte * pbPrevSegDat, int cbNextMax, byte * pbNextSegDat, int * pcbNextSegDat,
- int * pdichwContext,
- std::ostream * pstrmLog,
- OLECHAR * prgchwErrMsg, int cchwMaxErrMsg)
-{
- int dichLimSegBogus;
- return MakeSegment(ksegmodeMsfr, pfont, pgts, pgj,
- ichMin, ichLim,
- fStartLine, fEndLine,
- 10000, klbWordBreak, // not used
- twsh, fParaRtl,
- ppsegRet, pdxWidth,
- //cbPrev, pbPrevSegDat, cbNextMax, pbNextSegDat, pcbNextSegDat, pdichwContext,
- 0, NULL, 0, NULL, NULL, NULL,
- pstrmLog,
- prgchwErrMsg, cchwMaxErrMsg,
- ichLim, false, false, klbClipBreak, // not used
- &dichLimSegBogus, pest,
- 10000, kestMoreLines); // not used
-}
-*/
-
-
-//:>********************************************************************************************
-//:> Other methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Create a segment.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::MakeSegment(
- // Common parameters
- Segment * psegNew,
- Font * pfont, ITextSource * pgts, IGrJustifier * pjus,
- LayoutEnvironment & layout,
- int ichMin, int ichLim,
- // for finding a break point
- float dxMaxWidth,
- bool fBacktracking,
- // for justification
- bool fJust, float dxJustifiedWidthJ, SegEnd estJ)
-{
- ChkGrArgPtr(pgts);
- ChkGrArgPtrN(pjus);
- ChkGrOutPtr(psegNew);
- Assert(layout.bestBreak() <= layout.worstBreak());
-
- if (pjus == NULL)
- pjus = layout.justifier();
-
- if (m_resFontValid == kresInvalidArg)
- // Uninitialized.
- return; // ReturnResult(kresUnexpected);
-
- SetCmapAndNameTables(pfont);
-
- int segmode = ksegmodeRange; // segment from range
- if (fJust)
- segmode = ksegmodeJust; // justified segment
- else if (dxMaxWidth < kPosInfFloat)
- segmode = ksegmodeBreak; // find break point
-
- // Temporary:
- if (!this->m_ptman)
- {
- Warn("No Graphite tables");
- m_ptman = new GrTableManager(this);
- CreateEmpty();
- }
-
- // GrResult hr = kresOk;
- m_fInErrorState = false;
-
- bool fBold, fItalic;
- GetStyles(pfont, ichMin, &fBold, &fItalic);
-
- GetWritingSystemDirection(pgts, ichMin);
-
- // Find the end of the range to render with the current font.
- int nDirDepth = 0;
- int ichFontLim = FindFontLim(pgts, ichMin, &nDirDepth);
- int ichStrmLim = 0;
- int ichSegLim = 0;
- switch (segmode)
- {
- case ksegmodeBreak: // find break point
- // Here ichLim should be the end of the text-source, unless we're backtracking.
- ichStrmLim = min(ichFontLim, ichLim);
- ichSegLim = -1; // unknown
- break;
- case ksegmodeJust: // stretching an existing segment to achieve justification
- ichStrmLim = ichFontLim;
- ichSegLim = ichLim;
- break;
- //case ksegmodeMms: // MakeMeasuredSegment
- // ichLim = ichFontLim;
- // ichStrmLim = ichFontLim;
- // ichSegLim = -1; // process to the end of the stream
- // break;
- case ksegmodeRange: // segment from range
- ichLim = min(ichLim, ichFontLim);
- ichStrmLim = ichFontLim;
- ichSegLim = (ichLim == kPosInfinity) ? -1 : ichLim;
- break;
- default:
- Assert(false);
- }
-
- // Initialize the graphics object with the font and character properties.
- // SILE
- ////if (m_fUseSepBase)
- ////{
- //// Assert(m_stuBaseFaceName.size() > 0);
- //// SetUpGraphics(pgg, pgts, ichMin, m_stuBaseFaceName);
- ////}
- ////else
- //// SetUpGraphics(pgg, pgts, ichMin, m_stuFaceName);
-
- GrResult res = kresOk;
-
- Assert(m_ptman);
- m_ptman->State()->SetFont(pfont);
-
- // Create a character stream on the text source.
- GrCharStream * pchstrm = new GrCharStream(pgts, ichMin, ichStrmLim,
- layout.startOfLine(), layout.endOfLine());
-
- // TODO: change vertical offset to work on a character-by-character basis
- m_dysOffset = (pgts->getVerticalOffset(ichMin) * pfont->getDPIy()) / 72;
-
- // Run the tables and get back a segment.
-
- bool fMoreText = false;
- int ichCallerBtLim = -1;
- bool fInfiniteWidth = false;
- switch (segmode)
- {
- //case ksegmodeMms:
- case ksegmodeBreak:
- case ksegmodeRange:
- if (segmode == ksegmodeBreak)
- {
- fMoreText = ((ichFontLim < ichLim) || fBacktracking);
- ichCallerBtLim = (fBacktracking) ? ichLim : -1;
- fInfiniteWidth = false;
- }
- //else if (segmode == ksegmodeMms)
- //{
- // fMoreText = false;
- // ichCallerBtLim = -1;
- // fInfiniteWidth = true;
- // Assert(twsh == ktwshAll);
- //}
- else if (segmode == ksegmodeRange)
- {
- int ichTextLim;
- ichTextLim = pgts->getLength();
- fMoreText = (ichLim < ichTextLim);
- ichCallerBtLim = -1;
- fInfiniteWidth = true;
- }
- try {
- m_ptman->Run(psegNew, pfont, pchstrm, pjus,
- ((pjus) ? kjmodiCanShrink : kjmodiNormal),
- layout,
- ichSegLim, dxMaxWidth, 0,
- fBacktracking, fMoreText, ichFontLim, fInfiniteWidth, false,
- ichCallerBtLim,
- nDirDepth, estJ);
- }
- catch (...)
- {
- // Disastrous problem in rendering.
- if (!layout.dumbFallback())
- throw; // throws original exception
-
- // Try dumb rendering.
- if (m_fUseSepBase)
- SwitchGraphicsFont(true); // use the base font, which has real glyphs
-
- m_fInErrorState = true;
- res = RunUsingEmpty(psegNew, pfont, pchstrm, layout,
- ichSegLim,
- dxMaxWidth,
- fBacktracking, fMoreText, fInfiniteWidth,
- ichCallerBtLim,
- nDirDepth, estJ);
- }
- break;
-
- case ksegmodeJust: // justified segment
- {
- m_ptman->Run(psegNew, pfont, pchstrm, pjus, kjmodiJustify, layout,
- ichSegLim,
- dxJustifiedWidthJ, dxMaxWidth,
- false, false, // not used
- ichFontLim,
- true, // infinite width
- false, // kludge
- -1,
- nDirDepth, estJ);
- //&dxWidth, &est);
- Assert((ichLim - ichMin) == (psegNew->stopCharacter() - psegNew->startCharacter()));
- break;
- }
-
- default:
- Assert(false);
- }
-
- delete pchstrm;
-
- if (m_fUseSepBase)
- SwitchGraphicsFont(false);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return an indication of whether an error happened in trying to load Graphite tables.
-----------------------------------------------------------------------------------------------*/
-FontErrorCode GrEngine::IsValidForGraphite(int * pnVersion, int * pnSubVersion)
-{
- if (pnVersion)
- *pnVersion = m_fxdBadVersion >> 16;
- if (pnSubVersion)
- *pnSubVersion = m_fxdBadVersion & 0x0000FFFF;
-
- return m_ferr;
-}
-
-/*----------------------------------------------------------------------------------------------
- Record a system error indicating that the font could not be loaded properly.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void GrEngine::RecordFontLoadError(OLECHAR * prgchwErrMsg, int cchMax)
-{
- if (prgchwErrMsg == NULL || cchMax == 0)
- return;
-
- std::wstring stuMessage = L"Error in initializing Graphite font \"";
- stuMessage.append(m_stuFaceName);
- if (m_stuErrCtrlFile.size())
- {
- stuMessage.append(L"\" (");
- stuMessage.append(m_stuErrCtrlFile);
- stuMessage.append(L")");
- }
- else
- stuMessage.append(L"\"");
- if (m_stuInitError.size())
- {
- stuMessage.append(L"--\n");
- stuMessage.append(m_stuInitError);
- }
-
- std::fill_n(prgchwErrMsg, cchMax, 0);
- std::copy(stuMessage.data(), stuMessage.data() + min(cchMax - 1, signed(stuMessage.size())),
- prgchwErrMsg);
-}
-
-/*----------------------------------------------------------------------------------------------
- Record a system error indicating a bad error in rendering using a supposedly valid font.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void GrEngine::RecordFontRunError(OLECHAR * prgchwErrMsg, int cchMax, GrResult res)
-{
- if (prgchwErrMsg == NULL || cchMax == 0)
- return;
-
- std::wstring stuMessage = L"Error in rendering using Graphite font \"";
- stuMessage.append(m_stuFaceName);
- if (m_stuErrCtrlFile.size())
- {
- stuMessage.append(L"\" (");
- stuMessage.append(m_stuErrCtrlFile);
- stuMessage.append(L")");
- }
- else
- stuMessage.append(L"\"");
-
- std::fill_n(prgchwErrMsg, cchMax, 0);
- std::copy(stuMessage.data(), stuMessage.data() + min(cchMax - 1, signed(stuMessage.size())),
- prgchwErrMsg);
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the font error message buffer to zero. This way we can be sure to recognize
- an error condition by the fact that the buffer is non-zero.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void GrEngine::ClearFontError(OLECHAR * prgchwErrMsg, int cchMaxErrMsg)
-{
- std::fill_n(prgchwErrMsg, cchMaxErrMsg, 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the overall direction of the writing system based on the text properties.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::GetWritingSystemDirection(ITextSource * pgts, int ichwMin)
-{
-#ifdef OLD_TEST_STUFF
- // for test procedures:
- if (m_stuInitialize == "RightToLeftLayout")
- {
- m_fRightToLeft = true;
- return;
- }
-#endif // OLD_TEST_STUFF
-
- m_fRightToLeft = pgts->getRightToLeft(ichwMin);
-}
-
-/*----------------------------------------------------------------------------------------------
- Find the end of the range that uses the current font.
-
- @param pgts - contains text to render
- @param ichwMinFont - beginning of range to render with this font
- @param pnDirDepth - return direction depth: 0=LTR, 1=RTL
-
- @return The lim of the range that could be rendered by this font. Also the direction depth.
-----------------------------------------------------------------------------------------------*/
-int GrEngine::FindFontLim(ITextSource * pgts, int ichwMinFont, int * pnDirDepth)
-{
- int ichwTextLen = (int)pgts->getLength();
-
- int ichwLimRange; // range that can be rendered without breaking contextualization.
- int ichwMinNext = ichwMinFont;
-
- while (true)
- {
- std::pair<toffset, toffset> pairRange = pgts->propertyRange(ichwMinNext);
- // int ichwMinRun = pairRange.first;
- int ichwLimRun = pairRange.second;
- *pnDirDepth = pgts->getDirectionDepth(ichwMinNext);
-
- //if (ichwLim > -1 && ichwLim < ichwLimRun)
- //{
- // // Stopping in the middle of a run
- // return ichwLim;
- //}
-
- // We can at least go to the end of this run.
- ichwLimRange = ichwLimRun;
- if (ichwLimRun >= ichwTextLen)
- {
- // Hit the end of the text-source
- return ichwLimRange;
- }
- else
- {
- // If the following run is the same as this run except for color and underlining,
- // we don't have to break here.
- if (!pgts->sameSegment(ichwMinNext, ichwLimRun))
- return ichwLimRange;
- }
- ichwMinNext = ichwLimRun;
- }
-
- return ichwLimRange;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the version number from the tables, and return false if any are a version this
- implementation of the engine can't handle.
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::CheckTableVersions(GrIStream * pgrstrm,
- byte *pSilfTbl, int lSilfStart,
- byte *pGlobTbl, int lGlocStart,
- byte *pFeatTbl, int lFeatStart,
- int * pfxdBadVersion)
-{
- pgrstrm->OpenBuffer(pSilfTbl, isizeof(int));
- pgrstrm->SetPositionInFont(lSilfStart);
- *pfxdBadVersion = ReadVersion(*pgrstrm);
- pgrstrm->CloseBuffer();
- if (*pfxdBadVersion > kSilfVersion)
- return false;
-
- pgrstrm->OpenBuffer(pGlobTbl, lGlocStart + isizeof(int));
- pgrstrm->SetPositionInFont(lGlocStart);
- *pfxdBadVersion = ReadVersion(*pgrstrm);
- pgrstrm->CloseBuffer();
- if (*pfxdBadVersion > kGlocVersion)
- return false;
-
- pgrstrm->OpenBuffer(pFeatTbl, isizeof(int));
- pgrstrm->SetPositionInFont(lFeatStart);
- *pfxdBadVersion = ReadVersion(*pgrstrm);
- pgrstrm->CloseBuffer();
- if (*pfxdBadVersion > kFeatVersion)
- return false;
-
- *pfxdBadVersion = 0;
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Reinterpret the version number from a font table.
-----------------------------------------------------------------------------------------------*/
-int GrEngine::ReadVersion(GrIStream & grstrm)
-{
- int fxdVersion = grstrm.ReadIntFromFont();
-
- if (fxdVersion < 0x00010000)
- fxdVersion = 0x00010000; // kludge for bug with which some fonts were generated
-
- return fxdVersion;
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the engine from the test file. Used for test procedures.
-----------------------------------------------------------------------------------------------*/
-//:Ignore
-#ifdef OLD_TEST_STUFF
-void GrEngine::InitFromControlFileTest()
-{
- IStreamPtr qstrm;
- FileStream::Create(m_stuCtrlFile, STGM_READ, &qstrm);
-
- int nSilfOffset, nGlocOffset, nGlatOffset, nFeatOffset;
-
- nSilfOffset = ReadIntFromFont(qstrm);
- nGlocOffset = ReadIntFromFont(qstrm);
- nGlatOffset = ReadIntFromFont(qstrm);
- nFeatOffset = ReadIntFromFont(qstrm);
- nSill
-
- // Read the "Silf" table.
- int chwMaxGlyphID;
- int fxdVersion;
- ReadSilfTable(qstrm, nSilOffset, 0, &chwMaxGlyphID, &fxdVersion);
-
- // Read the "Gloc" and "Glat" tables.
- ReadGlocAndGlatTables(qstrm, nGlocOffset, qstrm, nGlatOffset, chwMaxGlyphID, fxdVersion);
-
- // Read the "Feat" table.
- ReadFeatTable(qstrm, nFeatOffset);
-}
-#endif // OLD_TEST_STUFF
-//:End Ignore
-
-
-/*----------------------------------------------------------------------------------------------
- Return whether the text is asking for bold and/or italic text.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::GetStyles(Font * pfont, int ichwMin, bool * pfBold, bool * pfItalic)
-{
- *pfBold = pfont->bold();
- *pfItalic = pfont->italic();
-}
-
-/*----------------------------------------------------------------------------------------------
- Switch the Graphics object between the Graphite table file and the base font.
- Should only be called when we know we are using a base font, or when we are reading
- the base font to see if it is valid.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SwitchGraphicsFont(bool fBase)
-{
- Assert(!fBase || m_stuBaseFaceName.size() > 0);
-
- //LgCharRenderProps chrp;
- //pgg->get_FontCharProperties(&chrp);
- //if (fBase)
- //{
- // wcsncpy(chrp.szFaceName, m_stuBaseFaceName.data(), m_stuBaseFaceName.size() + 1);
- // chrp.szFaceName[31] = 0;
- //}
- //else
- //{
- // wcsncpy(chrp.szFaceName, m_stuFaceName.data(), m_stuFaceName.size() + 1);
- // chrp.szFaceName[31] = 0;
- //}
- //pgg->SetupGraphics(&chrp);
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the contents of the "Silf" table from the stream, which is on an extended
- TrueType font file. Specifically, read the iSubTable-th sub-table (for now there is
- only one).
-
- WARNING: any changes to this method must be accompanied by equivalent changes to
- CreateEmpty().
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::ReadSilfTable(GrIStream & grstrm, long lTableStart, int iSubTable,
- int * pchwMaxGlyphID, int * pfxdSilfVersion)
-{
- grstrm.SetPositionInFont(lTableStart);
-
- // version
- *pfxdSilfVersion = ReadVersion(grstrm);
- if (*pfxdSilfVersion > kSilfVersion)
- // Version we don't know how to handle.
- return false;
-
- if (*pfxdSilfVersion >= 0x00030000)
- // compiler version
- grstrm.ReadIntFromFont();
-
- // number of tables
- unsigned short cSubTables = grstrm.ReadUShortFromFont();
- Assert(cSubTables == 1); // for now
- Assert(cSubTables <= kMaxSubTablesInFont);
- if (cSubTables != 1 || cSubTables > kMaxSubTablesInFont)
- return false;
-
- if (*pfxdSilfVersion >= 0x00020000)
- // reserved
- grstrm.ReadShortFromFont();
-
- // subtable offsets
- int nSubTableOffsets[kMaxSubTablesInFont];
- int i;
- for (i = 0; i < cSubTables; i++)
- {
- nSubTableOffsets[i] = grstrm.ReadIntFromFont();
- }
-
- grstrm.SetPositionInFont(lTableStart + nSubTableOffsets[iSubTable]);
-
- // Now we are at the beginning of the desired sub-table.
-
- // Get the position of the start of the table.
- long lSubTableStart;
- grstrm.GetPositionInFont(&lSubTableStart);
-
- // rule version
- int fxdRuleVersion = (*pfxdSilfVersion >= 0x00030000) ?
- ReadVersion(grstrm) :
- *pfxdSilfVersion;
-
- long lPassBlockPos = -1;
- long lPseudosPos = -1;
- if (*pfxdSilfVersion >= 0x00030000)
- {
- lPassBlockPos = grstrm.ReadUShortFromFont() + lSubTableStart;
- lPseudosPos = grstrm.ReadUShortFromFont() + lSubTableStart;
- }
-
- // maximum glyph ID
- data16 chwTmp;
- *pchwMaxGlyphID = grstrm.ReadUShortFromFont();
-
- // extra ascent and descent
- m_mXAscent = grstrm.ReadShortFromFont();
- m_mXDescent = grstrm.ReadShortFromFont();
-
- // TODO: decide whether we want these:
- m_mXAscent = 0;
- m_mXDescent = 0;
-
- // number of passes
- byte cPasses = grstrm.ReadByteFromFont();
- // index of first substitution pass
- byte ipassSub1 = grstrm.ReadByteFromFont();
- // index of first positioning pass
- byte ipassPos1 = grstrm.ReadByteFromFont();
- // index of first justification pass
- byte ipassJust1 = grstrm.ReadByteFromFont();
- // index of first reordered pass, or 0xFF if no reordering
- byte ipassReordered1 = grstrm.ReadByteFromFont();
- if (*pfxdSilfVersion < 0x00020000)
- {
- Assert(ipassJust1 == cPasses || ipassJust1 == ipassPos1);
- ipassJust1 = ipassPos1;
- }
-
- // Sanity checks.
- if (cPasses > kMaxPasses || ipassSub1 > cPasses || ipassPos1 > cPasses)
- return false; // bad table
-
- // line-break flag
- int nLineBreak = grstrm.ReadByteFromFont();
- if (nLineBreak != 0 && nLineBreak != 1)
- return false; // bad table
- m_fLineBreak = (bool)nLineBreak;
-
- // range of possible cross-line-boundary contextualization
- m_cchwPreXlbContext = grstrm.ReadByteFromFont();
- m_cchwPostXlbContext = grstrm.ReadByteFromFont();
-
- // actual glyph ID for pseudo-glyph (ID of bogus attribute)
- byte bTmp; // unsigned
- bTmp = grstrm.ReadByteFromFont();
- m_chwPseudoAttr = bTmp;
- // breakweight
- bTmp = grstrm.ReadByteFromFont();
- m_chwBWAttr = bTmp;
- // directionality
- bTmp = grstrm.ReadByteFromFont();
- m_chwDirAttr = bTmp;
-
- // Sanity checks--don't bother with these, I don't seem to be able to know what are reasonable values.
- //if (m_chwPseudoAttr > 200 || m_chwBWAttr > 200 || m_chwDirAttr > 200)
- // return false; // bad table
-
- if (*pfxdSilfVersion >= 0x00020000)
- {
- // reserved
- grstrm.ReadByteFromFont();
- grstrm.ReadByteFromFont();
-
- // justification levels
- m_cJLevels = grstrm.ReadByteFromFont();
- if (m_cJLevels > kMaxJLevels)
- return false; // bad table
- m_fBasicJust = (m_cJLevels == 0);
- m_chwJStretch0 = 0xffff; // if no justification
- m_chwJShrink0 = 0xffff;
- m_chwJStep0 = 0xffff;
- m_chwJWeight0 = 0xffff;
- for (int i = 0; i < m_cJLevels; i++)
- {
- // justification glyph attribute IDs
- bTmp = grstrm.ReadByteFromFont();
- if (i == 0)
- m_chwJStretch0 = bTmp;
- bTmp = grstrm.ReadByteFromFont();
- if (i == 0)
- m_chwJShrink0 = bTmp;
- bTmp = grstrm.ReadByteFromFont();
- if (i == 0)
- m_chwJStep0 = bTmp;
- bTmp = grstrm.ReadByteFromFont();
- if (i == 0)
- m_chwJWeight0 = bTmp;
- bTmp = grstrm.ReadByteFromFont(); // runto
- // reserved
- grstrm.ReadByteFromFont();
- grstrm.ReadByteFromFont();
- grstrm.ReadByteFromFont();
- }
- }
- else
- {
- m_cJLevels = 0;
- m_fBasicJust = true;
- m_chwJStretch0 = 0xffff;
- m_chwJShrink0 = 0xffff;
- m_chwJStep0 = 0xffff;
- m_chwJWeight0 = 0xffff;
- }
-
- // number of component attributes
- chwTmp = grstrm.ReadUShortFromFont();
- m_cComponents = chwTmp;
-
- // number of user-defined slot attributes
- m_cnUserDefn = grstrm.ReadByteFromFont();
- if (m_cnUserDefn > kMaxUserDefinableSlotAttrs)
- return false; // bad table
-
- // max number of ligature components per glyph
- m_cnCompPerLig = grstrm.ReadByteFromFont();
- if (m_cnCompPerLig > 16)
- return false; // bad table
-
- // directions supported
- bTmp = grstrm.ReadByteFromFont();
- m_grfsdc = bTmp;
- if (m_grfsdc > kfsdcHorizLtr + kfsdcHorizRtl + kfsdcVertFromLeft + kfsdcVertFromRight)
- return false; // bad table
-
- // reserved
- bTmp = grstrm.ReadByteFromFont();
- bTmp = grstrm.ReadByteFromFont();
- bTmp = grstrm.ReadByteFromFont();
-
- // critical features
- int cCriticalFeatures;
- if (*pfxdSilfVersion >= 0x00020000)
- {
- // reserved
- bTmp = grstrm.ReadByteFromFont();
-
- cCriticalFeatures = grstrm.ReadByteFromFont();
- Assert(cCriticalFeatures == 0);
- if (cCriticalFeatures != 0)
- return false; // bad table
-
- // reserved
- bTmp = grstrm.ReadByteFromFont();
- }
-
- // rendering behaviors--ignore for now
- byte cBehaviors = grstrm.ReadByteFromFont();
- data16 chwBehaviors[kMaxRenderingBehavior];
- for (i = 0; i < cBehaviors; i++)
- {
- chwBehaviors[i] = grstrm.ReadUShortFromFont();
- }
-
- // linebreak glyph ID
- m_chwLBGlyphID = grstrm.ReadUShortFromFont();
-
- // Jump to the beginning of the pass offset block, if we have this information.
- if (*pfxdSilfVersion >= 0x00030000)
- grstrm.SetPositionInFont(lPassBlockPos);
- else
- // Otherwise assume that's where we are!
- Assert(lPassBlockPos == -1);
-
- // offsets to passes, relative to the start of this subtable;
- // note that we read (cPasses + 1) of these
- int nPassOffsets[kMaxPasses];
- for (i = 0; i <= cPasses; i++)
- {
- nPassOffsets[i] = grstrm.ReadIntFromFont();
- }
-
- // Jump to the beginning of the pseudo-glyph info block, if we have this information.
- if (*pfxdSilfVersion >= 0x00030000)
- grstrm.SetPositionInFont(lPseudosPos);
- else
- // Otherwise assume that's where we are!
- Assert(lPseudosPos == -1);
-
- // number of pseudo-glyphs and search constants
- short snTmp;
- snTmp = grstrm.ReadShortFromFont();
- m_cpsd = snTmp;
- snTmp = grstrm.ReadShortFromFont();
- m_dipsdInit = snTmp;
- snTmp = grstrm.ReadShortFromFont();
- m_cPsdLoop = snTmp;
- snTmp = grstrm.ReadShortFromFont();
- m_ipsdStart = snTmp;
-
- // unicode-to-pseudo map
- m_prgpsd = new GrPseudoMap[m_cpsd];
- for (i = 0; i < m_cpsd; i++)
- {
- if (*pfxdSilfVersion <= 0x00010000)
- {
- utf16 chwUnicode = grstrm.ReadUShortFromFont();
- m_prgpsd[i].SetUnicode(chwUnicode);
- }
- else
- {
- int nUnicode = grstrm.ReadIntFromFont();
- m_prgpsd[i].SetUnicode(nUnicode);
- }
- gid16 chwPseudo = grstrm.ReadUShortFromFont();
- m_prgpsd[i].SetPseudoGlyph(chwPseudo);
- }
-
- // class table
- m_pctbl = new GrClassTable();
- if (!m_pctbl->ReadFromFont(grstrm, *pfxdSilfVersion))
- return false;
-
- // passes
- return m_ptman->CreateAndReadPasses(grstrm, *pfxdSilfVersion, fxdRuleVersion,
- cPasses, lSubTableStart, nPassOffsets,
- ipassSub1, ipassPos1, ipassJust1, ipassReordered1);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up the engine with no Graphite smarts at all, just dummy tables.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::CreateEmpty()
-{
- // Silf table
-
- m_mXAscent = 0;
- m_mXDescent = 0;
-
- m_fLineBreak = false;
-
- // range of possible cross-line-boundary contextualization
- m_cchwPreXlbContext = 0;
- m_cchwPostXlbContext = 0;
-
- // Bogus attribute IDs:
- m_chwPseudoAttr = 1; // actual glyph ID for pseudo-glyph (ID of bogus attribute)
- m_chwBWAttr = 2; // breakweight
- m_chwDirAttr = 3; // directionality
-
- m_cComponents = 0; // number of component attributes
-
- m_cnUserDefn = 0; // number of user-defined slot attributes
- m_cnCompPerLig = 0; // max number of ligature components
-
- m_grfsdc = kfsdcHorizLtr; // supported script direction
-
- // linebreak glyph ID
- m_chwLBGlyphID = 0xFFFE;
-
- // number of pseudo-glyphs and search constants
- m_cpsd = 0;
- m_dipsdInit = 0;
- m_cPsdLoop = 0;
- m_ipsdStart = 0;
-
- // class table
- m_pctbl = new GrClassTable();
- m_pctbl->CreateEmpty();
-
- // passes
- if (m_ptman != 0)
- m_ptman->CreateEmpty();
-
- // Gloc and Glat tables
- m_pgtbl = new GrGlyphTable();
- m_pgtbl->SetNumberOfGlyphs(0);
- m_pgtbl->SetNumberOfComponents(0);
- m_pgtbl->SetNumberOfStyles(1); // for now
-
- m_pgtbl->CreateEmpty();
-
- // Feat table
- m_cfeat = 0;
- m_rglcidFeatLabelLangs = NULL;
- m_clcidFeatLabelLangs = 0;
-
- // Language table
- m_langtbl.CreateEmpty();
-}
-
-/*----------------------------------------------------------------------------------------------
- Create the glyph table and fill it in from the font stream.
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::ReadGlocAndGlatTables(GrIStream & grstrmGloc, long lGlocStart,
- GrIStream & grstrmGlat, long lGlatStart,
- int chwGlyphIDMax, int fxdSilfVersion)
-{
- // Determine the highest used glyph ID number.
-// int chwGlyphIDMax = m_chwLBGlyphID;
-// for (int ipsd = 0; ipsd < m_cpsd; ipsd++)
-// {
-// if (m_prgpsd[ipsd].PseudoGlyph() > chwGlyphIDMax)
-// chwGlyphIDMax = m_prgpsd[ipsd].PseudoGlyph();
-// }
-
- // Create the glyph table.
- m_pgtbl = new GrGlyphTable();
- m_pgtbl->SetNumberOfGlyphs(chwGlyphIDMax + 1);
- m_pgtbl->SetNumberOfComponents(m_cComponents);
- m_pgtbl->SetNumberOfStyles(1); // for now
-
- return m_pgtbl->ReadFromFont(grstrmGloc, lGlocStart, grstrmGlat, lGlatStart,
- m_chwBWAttr, m_chwJStretch0, m_cJLevels, m_cnCompPerLig, fxdSilfVersion);
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the contents of the "Feat" table from the stream, which is on an extended
- TrueType font file.
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::ReadFeatTable(GrIStream & grstrm, long lTableStart)
-{
- short snTmp;
- data16 chwTmp;
- int nTmp;
-
- grstrm.SetPositionInFont(lTableStart);
-
- // version
- int fxdVersion = ReadVersion(grstrm);
- if (fxdVersion > kFeatVersion)
- return false;
-
- // number of features
- int cfeat;
- cfeat = grstrm.ReadUShortFromFont();
- if (cfeat > kMaxFeatures)
- return false; // bad table;
-
- // reserved
- chwTmp = grstrm.ReadUShortFromFont();
- nTmp = grstrm.ReadIntFromFont();
-
- std::vector<featid> vnIDs; // unsigned ints
- std::vector<int> vnOffsets;
- std::vector<int> vcfset;
-
- m_cfeat = 0;
- int ifeat;
- for (ifeat = 0; ifeat < cfeat; ifeat++)
- {
- // ID
- featid nID;
- if (fxdVersion >= 0x00020000)
- nID = (unsigned int)grstrm.ReadIntFromFont();
- else
- nID = grstrm.ReadUShortFromFont();
- vnIDs.push_back(nID);
- // number of settings
- data16 cfset = grstrm.ReadUShortFromFont();
- vcfset.push_back(cfset);
- if (fxdVersion >= 0x00020000)
- grstrm.ReadShortFromFont(); // pad bytes
- // offset to settings list
- nTmp = grstrm.ReadIntFromFont();
- vnOffsets.push_back(nTmp);
- // flags
- chwTmp = grstrm.ReadUShortFromFont();
- Assert(chwTmp == 0x8000); // mutually exclusive
- // index into name table of UI label
- int nNameId = grstrm.ReadShortFromFont();
-
- if (fxdVersion <= 0x00020000 && nID == GrFeature::knLangFeatV2)
- {
- // Ignore the obsolete "lang" feature which has ID = 1
- vnIDs.pop_back();
- vcfset.pop_back();
- vnOffsets.pop_back();
- continue;
- }
- AddFeature(nID, nNameId, cfset);
- }
-
- // default feature setting value and name strings;
- for (ifeat = 0; ifeat < m_cfeat; ifeat++)
- {
- GrFeature * pfeat = m_rgfeat + ifeat;
- Assert(pfeat->ID() == vnIDs[ifeat]);
-
- grstrm.SetPositionInFont(lTableStart + vnOffsets[ifeat]);
-
- // Each feature has been initialized with blank spots for the number of settings
- // it has.
- int cfset = vcfset[ifeat];
- Assert(pfeat->NumberOfSettings() == cfset);
- for (int ifset = 0; ifset < cfset; ifset++)
- {
- snTmp = grstrm.ReadShortFromFont(); // yes, signed (TT feat table spec says unsigned)
- short snTmp2 = grstrm.ReadShortFromFont();
- pfeat->AddSetting(snTmp, snTmp2);
-
- if (ifset == 0)
- {
- // default setting value--first in list
- pfeat->SetDefault(snTmp);
- }
- }
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the contents of the "Sill" table from the stream, which is on an extended
- TrueType font file.
-----------------------------------------------------------------------------------------------*/
-bool GrEngine::ReadSillTable(GrIStream & grstrm, long lTableStart)
-{
- grstrm.SetPositionInFont(lTableStart);
-
- // version
- int fxdVersion = ReadVersion(grstrm);
- if (fxdVersion > kSillVersion)
- return false;
-
- return m_langtbl.ReadFromFont(&grstrm, fxdVersion);
-}
-
-/*----------------------------------------------------------------------------------------------
- An error happened in running the tables. Set up temporary dummy tables, and try running
- with dumb rendering.
- Return kresUnexpected if even running the empty tables crashed, kresFail otherwise.
-----------------------------------------------------------------------------------------------*/
-GrResult GrEngine::RunUsingEmpty(Segment * psegNew, Font * pfont,
- GrCharStream * pchstrm, LayoutEnvironment & layout,
- int ichStop,
- float dxMaxWidth,
- bool fNeedFinalBreak, bool fMoreText, bool fInfiniteWidth,
- int ichwCallerBtLim,
- int nDirDepth, SegEnd estJ)
-{
- // Save the current state of the engine.
- int mXAscentSave = m_mXAscent;
- int mXDescentSave = m_mXDescent;
- bool fLineBreakSave = m_fLineBreak;
- int cchwPreXlbContextSave = m_cchwPreXlbContext;
- int cchwPostXlbContextSave = m_cchwPostXlbContext;
- data16 chwPseudoAttrSave = m_chwPseudoAttr;
- data16 chwBWAttrSave = m_chwBWAttr;
- data16 chwDirAttrSave = m_chwDirAttr;
- int cComponentsSave = m_cComponents;
- int cnUserDefnSave = m_cnUserDefn;
- int cnCompPerLigSave = m_cnCompPerLig;
- unsigned int grfsdcSave = m_grfsdc;
- gid16 chwLBGlyphIDSave = m_chwLBGlyphID;
- int cpsdSave = m_cpsd;
- int dipsdInitSave = m_dipsdInit;
- int cPsdLoopSave = m_cPsdLoop;
- int ipsdStartSave = m_ipsdStart;
- GrTableManager * ptmanSave = m_ptman;
- GrClassTable * pctblSave = m_pctbl;
- GrGlyphTable * pgtblSave = m_pgtbl;
- int cfeatSave = m_cfeat;
- GrResult resFontReadSave = m_resFontRead;
-
- GrResult res = kresFail;
-
- pchstrm->Restart();
-
- // Create dummy versions of the tables and run them.
- m_pctbl = NULL;
- m_pgtbl = NULL;
- m_ptman = new GrTableManager(this);
- m_ptman->State()->SetFont(pfont);
- CreateEmpty();
-
- try
- {
- m_ptman->Run(psegNew, pfont, pchstrm, NULL, kjmodiNormal, layout,
- ichStop, dxMaxWidth, 0,
- fNeedFinalBreak, fMoreText, -1, fInfiniteWidth, false,
- ichwCallerBtLim,
- nDirDepth, estJ);
- }
- catch(...)
- {
- // Still didn't work. Oh, well, not much we can do.
- res = kresUnexpected;
- }
-
- psegNew->SetErroneous(true);
-
- if (m_ptman)
- delete m_ptman;
- if (m_pctbl)
- delete m_pctbl;
- if (m_pgtbl)
- delete m_pgtbl;
-
- // Put everything back the way it was.
- m_mXAscent = mXAscentSave;
- m_mXDescent = mXDescentSave;
- m_fLineBreak = fLineBreakSave;
- m_cchwPreXlbContext = cchwPreXlbContextSave;
- m_cchwPostXlbContext = cchwPostXlbContextSave;
- m_chwPseudoAttr = chwPseudoAttrSave;
- m_chwBWAttr = chwBWAttrSave;
- m_chwDirAttr = chwDirAttrSave;
- m_cComponents = cComponentsSave;
- m_cnUserDefn = cnUserDefnSave;
- m_cnCompPerLig = cnCompPerLigSave;
- m_grfsdc = grfsdcSave;
- m_chwLBGlyphID = chwLBGlyphIDSave;
- m_cpsd = cpsdSave;
- m_dipsdInit = dipsdInitSave;
- m_cPsdLoop = cPsdLoopSave;
- m_ipsdStart = ipsdStartSave;
- m_ptman = ptmanSave;
- m_pctbl = pctblSave;
- m_pgtbl = pgtblSave;
- m_cfeat = cfeatSave;
- m_resFontRead = resFontReadSave;
-
- return res;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the glyph ID for the given Unicode value.
-----------------------------------------------------------------------------------------------*/
-gid16 GrEngine::GetGlyphIDFromUnicode(int nUnicode)
-{
- gid16 chwGlyphID = MapToPseudo(nUnicode);
- if (chwGlyphID != 0)
- return chwGlyphID; // return a pseudo-glyph
-
-#ifdef OLD_TEST_STUFF
- if (!m_pCmap31)
- // test procedures
- return chwUnicode;
-#endif // OLD_TEST_STUFF
-
- // Otherwise, get the glyph ID from the font's cmap.
-
- if (m_pCmap_3_10)
- return gid16(TtfUtil::Cmap310Lookup(m_pCmap_3_10, nUnicode));
- else if (m_pCmap_3_1)
- return gid16(TtfUtil::Cmap31Lookup(m_pCmap_3_1, nUnicode));
- else
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the pseudo-glyph corresponding to the given Unicode input, or 0 if none.
-----------------------------------------------------------------------------------------------*/
-gid16 GrEngine::MapToPseudo(int nUnicode)
-{
- if (m_cpsd == 0)
- return 0;
-
-#ifdef _DEBUG
- int nPowerOf2 = 1;
- while (nPowerOf2 <= m_cpsd)
- nPowerOf2 <<= 1;
- nPowerOf2 >>= 1;
- // Now nPowerOf2 is the max power of 2 <= m_cpds
- Assert((1 << m_cPsdLoop) == nPowerOf2); // m_cPsdLoop == log2(nPowerOf2)
- Assert(m_dipsdInit == nPowerOf2);
- Assert(m_ipsdStart == m_cpsd - m_dipsdInit);
-#endif // _DEBUG
-
- int dipsdCurr = m_dipsdInit;
-
- GrPseudoMap * ppsdCurr = m_prgpsd + m_ipsdStart;
- while (dipsdCurr > 0)
- {
- int nTest;
- if (ppsdCurr < m_prgpsd)
- nTest = -1;
- else
- nTest = ppsdCurr->Unicode() - nUnicode;
-
- if (nTest == 0)
- return ppsdCurr->PseudoGlyph();
-
- dipsdCurr >>= 1; // divide by 2
- if (nTest < 0)
- ppsdCurr += dipsdCurr;
- else // (nTest > 0)
- ppsdCurr -= dipsdCurr;
- }
-
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the actual glyph ID to use for glyph metrics and output. For most glyphs, this
- is just the glyph ID we're already working with, but for pseudo-glyphs it will something
- different.
-----------------------------------------------------------------------------------------------*/
-gid16 GrEngine::ActualGlyphForOutput(gid16 chwGlyphID)
-{
- gid16 chwActual = gid16(GlyphAttrValue(chwGlyphID, m_chwPseudoAttr));
- if (chwActual == 0)
- return chwGlyphID; // not a pseudo, we're already working with the actual glyph ID
- else
- return chwActual;
-}
-
-/*----------------------------------------------------------------------------------------------
- Look up name based on lang id and name id in name table.
- Currently used to look up feature names.
-----------------------------------------------------------------------------------------------*/
-std::wstring GrEngine::StringFromNameTable(int nLangID, int nNameID)
-{
- std::wstring stuName;
- stuName.erase();
- size_t lOffset = 0, lSize = 0;
-
- // The Graphite compiler stores our names in either
- // the MS (platform id = 3) Unicode (writing system id = 1) table
- // or the MS Symbol (writing system id = 0) table. Try MS Unicode first.
- // lOffset & lSize are in bytes.
- // new interface:
- if (!TtfUtil::GetNameInfo(m_pNameTbl, 3, 1, nLangID, nNameID, lOffset, lSize))
- {
- if (!TtfUtil::GetNameInfo(m_pNameTbl, 3, 0, nLangID, nNameID, lOffset, lSize))
- {
- return stuName;
- }
- }
-
- size_t cchw = (unsigned(lSize) / sizeof(utf16));
- utf16 * pchwName = new utf16[cchw+1]; // lSize - byte count for Uni str
- const utf16 *pchwSrcName = reinterpret_cast<const utf16*>(m_pNameTbl + lOffset);
- std::transform(pchwSrcName, pchwSrcName + cchw, pchwName, std::ptr_fun<utf16,utf16>(lsbf));
- pchwName[cchw] = 0; // zero terminate
- #ifdef _WIN32
- stuName.assign((const wchar_t*)pchwName, cchw);
- #else
- wchar_t * pchwName32 = new wchar_t[cchw+1]; // lSize - byte count for Uni str
- for (int i = 0; i <= signed(cchw); i++) {
- pchwName32[i] = pchwName[i];
- }
- stuName.assign(pchwName32, cchw);
- delete [] pchwName32;
- #endif
-
- delete [] pchwName;
- return stuName;
-}
-
-/*----------------------------------------------------------------------------------------------
- Add a feature (eg, when loading from the font).
-----------------------------------------------------------------------------------------------*/
-void GrEngine::AddFeature(featid nID, int nNameId, int cfset, int nDefault)
-{
- if (m_cfeat >= kMaxFeatures)
- return;
-
- int ifeat = m_cfeat;
- m_rgfeat[ifeat].Initialize(nID, nNameId, cfset, nDefault);
-// m_hmnifeat.Insert(nID, ifeat);
- m_cfeat++;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the feature with the given ID, or NULL if none.
-----------------------------------------------------------------------------------------------*/
-GrFeature * GrEngine::FeatureWithID(featid nID, int * pifeat)
-{
- for (int ifeat = 0; ifeat < m_cfeat; ifeat++)
- {
- if (m_rgfeat[ifeat].ID() == nID)
- {
- *pifeat = ifeat;
- return m_rgfeat + ifeat;
- }
- }
- *pifeat = -1;
- return NULL;
-
-
- // Alternate implementation if we end up with so many features that we need to use
- // a hash map:
-// int ifeat;
-// if (m_hmnifeat.Retrieve(nID, &ifeat))
-// {
-// Assert(ifeat < kMaxFeatures);
-// return m_rgfeat + ifeat; // may be NULL
-// }
-// else
-// return NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the default for the feature at the given index in the array.
-----------------------------------------------------------------------------------------------*/
-int GrEngine::DefaultForFeatureAt(int ifeat)
-{
- Assert(ifeat < kMaxFeatures);
- if (ifeat >= m_cfeat || ifeat < 0)
- return 0; // undefined feature
-
- return m_rgfeat[ifeat].DefaultValue();
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the default for the feature at the given index in the array.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetDefaultForFeatureAt(int ifeat, int nValue)
-{
- Assert(ifeat < kMaxFeatures);
- Assert(ifeat < m_cfeat);
- if (ifeat >= 0)
- m_rgfeat[ifeat].SetDefault(nValue);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the default feature settings for the given language.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::DefaultsForLanguage(isocode lgcode,
- std::vector<featid> & vnFeats, std::vector<int> & vnValues)
-{
- m_langtbl.LanguageFeatureSettings(lgcode, vnFeats, vnValues);
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the directionality and breakweight attributes of a new slot based on its
- glyph ID.
- REVIEW: we could optimize by not initializing from the glyph table right away,
- but waiting until we need the value.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::InitSlot(GrSlotState * pslot, int nUnicode)
-{
- gid16 chwGlyphID = pslot->GlyphID();
-
- if (m_ptman->InternalJustificationMode() != kjmodiNormal)
- {
- if (m_cJLevels > 0)
- {
- Assert(m_cJLevels == 1); // for now
- // TODO: do this at level 0.
- pslot->SetJStretch(m_pgtbl->GlyphAttrValue(chwGlyphID, m_chwJStretch0));
- pslot->SetJShrink( m_pgtbl->GlyphAttrValue(chwGlyphID, m_chwJShrink0));
- pslot->SetJStep( m_pgtbl->GlyphAttrValue(chwGlyphID, m_chwJStep0));
- pslot->SetJWeight( m_pgtbl->GlyphAttrValue(chwGlyphID, m_chwJWeight0));
- }
- else if (nUnicode == knSpace)
- {
- // Basic stretch/shrink for whitespace.
- // TODO: do this at level 0.
- Assert(m_fBasicJust);
- int mAdv = pslot->AdvanceX(m_ptman);
- pslot->SetJStretch(mAdv * 100); // stretch up to 100 times natural width
- pslot->SetJShrink(mAdv / 4); // shrink to 75%
- pslot->SetJWeight(1);
- }
- }
-
- if (m_pgtbl && !m_pgtbl->IsEmpty())
- {
- // Initialize from glyph table.
- pslot->SetBreakWeight(m_pgtbl->GlyphAttrValue(chwGlyphID, m_chwBWAttr));
-
- DirCode dirc = DirCode(m_pgtbl->GlyphAttrValue(chwGlyphID, m_chwDirAttr));
- if (BidiCode(nUnicode) && (chwGlyphID == 0 || dirc == kdircNeutral))
- // A built-in character for the bidi algorithm that is not defined in the font but
- // must be given a special directionality:
- goto LDefaults;
-
- pslot->SetDirectionality(dirc);
-
- return;
- }
-
-LDefaults:
- // Otherwise, in fill defaults for some basic values.
- if (pslot->BreakWeight() == GrSlotState::kNotYetSet8)
- {
- switch (nUnicode)
- {
- case knSpace:
- pslot->SetBreakWeight(klbWordBreak);
- break;
- case knHyphen:
- pslot->SetBreakWeight(klbHyphenBreak);
- break;
- default:
- pslot->SetBreakWeight(klbLetterBreak);
- }
- }
-
- if ((int)pslot->Directionality() == GrSlotState::kNotYetSet8)
- {
- switch (nUnicode)
- {
- case knSpace:
- pslot->SetDirectionality(kdircWhiteSpace);
- break;
- case knLRM:
- pslot->SetDirectionality(kdircL);
- break;
- case knRLM:
- pslot->SetDirectionality(kdircR);
- break;
- case knLRO:
- pslot->SetDirectionality(kdircLRO);
- break;
- case knRLO:
- pslot->SetDirectionality(kdircRLO);
- break;
- case knLRE:
- pslot->SetDirectionality(kdircLRE);
- break;
- case knRLE:
- pslot->SetDirectionality(kdircRLE);
- break;
- case knPDF:
- pslot->SetDirectionality(kdircPDF);
- break;
- default:
- if (chwGlyphID == LBGlyphID())
- pslot->SetDirectionality(kdircNeutral);
- else
- pslot->SetDirectionality(kdircL);
- }
- }
- else
- Assert(false); // currently no way to set directionality ahead of time
-}
-
-/*----------------------------------------------------------------------------------------------
- We have just changed this slot's glyph ID. Change the directionality and breakweight
- attributes of a new slot based on its glyph ID.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetSlotAttrsFromGlyphAttrs(GrSlotState * pslot)
-{
- InitSlot(pslot);
-}
-
-/*----------------------------------------------------------------------------------------------
- Create a new segment.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::NewSegment(Segment ** ppseg)
-{
- *ppseg = new Segment;
-}
-
-/*----------------------------------------------------------------------------------------------
- Methods to pass on to the tables.
-----------------------------------------------------------------------------------------------*/
-gid16 GrEngine::GetClassGlyphIDAt(int nClass, int nIndex)
-{
- if (nIndex < 0)
- return 0;
- if (nClass < 0)
- return 0;
-
- try {
- return m_pctbl->GetGlyphID(nClass, nIndex);
- }
- catch (...)
- {
- return 0;
- }
-}
-
-int GrEngine::GetIndexInGlyphClass(int nClass, gid16 chwGlyphID)
-{
- try {
- return m_pctbl->FindIndex(nClass, chwGlyphID);
- }
- catch (...)
- {
- return -1;
- }
-}
-
-size_t GrEngine::NumberOfGlyphsInClass(int nClass)
-{
- try {
- return m_pctbl->NumberOfGlyphsInClass(nClass);
- }
- catch (...)
- {
- return 0;
- }
-}
-
-int GrEngine::GlyphAttrValue(gid16 chwGlyphID, int nAttrID)
-{
-#ifdef OLD_TEST_STUFF
- if (!m_pgtbl) // test procedures
- return 0;
-#endif // OLD_TEST_STUFF
-
- return m_pgtbl->GlyphAttrValue(chwGlyphID, nAttrID);
-}
-
-int GrEngine::ComponentIndexForGlyph(gid16 chwGlyphID, int nCompID)
-{
-#ifdef OLD_TEST_STUFF
- if (!m_pgtbl) // test procedures
- return -1;
-#endif // OLD_TEST_STUFF
-
- return m_pgtbl->ComponentIndexForGlyph(chwGlyphID, nCompID);
-}
-
-
-//:>********************************************************************************************
-//:> For test procedures
-//:>********************************************************************************************
-
-//:Ignore
-
-#ifdef OLD_TEST_STUFF
-
-void GrEngine::SetUpPseudoGlyphTest()
-{
- m_cpsd = 5;
-
- m_prgpsd = new GrPseudoMap[m_cpsd];
-
- m_prgpsd[0].SetUnicode(65);
- m_prgpsd[0].SetPseudoGlyph(1065);
-
- m_prgpsd[1].SetUnicode(66);
- m_prgpsd[1].SetPseudoGlyph(1066);
-
- m_prgpsd[2].SetUnicode(67);
- m_prgpsd[2].SetPseudoGlyph(1067);
-
- m_prgpsd[3].SetUnicode(68);
- m_prgpsd[3].SetPseudoGlyph(1068);
-
- m_prgpsd[4].SetUnicode(69);
- m_prgpsd[4].SetPseudoGlyph(1069);
-
- m_dipsdInit = 4;
- m_cPsdLoop = 2;
- m_ipsdStart = 1;
-}
-
-#endif // OLD_TEST_STUFF
-
-
-//:>********************************************************************************************
-//:> New interface
-//:>********************************************************************************************
-/*----------------------------------------------------------------------------------------------
- Store the default features values as specified by the client.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::AssignDefaultFeatures(int cfeat, FeatureSetting * prgfset)
-{
- for (int ifeatIn = 0; ifeatIn < cfeat; ifeatIn++)
- {
- int ifeat;
- FeatureWithID(prgfset[ifeatIn].id, &ifeat);
- if (ifeat >= 0 )
- SetDefaultForFeatureAt(ifeat, prgfset[ifeatIn].value);
- }
-}
-
-bool GrEngine::LoggingTransduction()
-{
- Assert(false);
- //return m_pfface->getLogging();
- //return m_fLogXductn;
- return true;
-}
-
-} // namespace gr
-
-//:End Ignore
-
diff --git a/Build/source/libs/graphite-engine/src/segment/GrEngine.h b/Build/source/libs/graphite-engine/src/segment/GrEngine.h
deleted file mode 100644
index 81b54e805bc..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrEngine.h
+++ /dev/null
@@ -1,622 +0,0 @@
-/*--------------------------------------------------------------------
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrEngine.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Contains the definition of the GrEngine class.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_ENGINE_INCLUDED
-#define GR_ENGINE_INCLUDED
-#include <limits>
-
-#ifdef _MSC_VER
-#include <crtdbg.h>
-#endif
-
-namespace gr
-{
-class IGrJustifier;
-class Segment;
-
-
-/*----------------------------------------------------------------------------------------------
- The GrEngine serves as the top level object that knows how to run Graphite tables
- and generate Graphite segments.
-
- Primarily, this class implements IRenderEngine, which allows it to serve as a FW
- rendering engine. It also implements ISimpleInit, a general interface for initializing
- using a string. Finally, it implements ITraceControl, a very simple interface which
- allows a client to flip a flag indicating whether or not we want to output a log of
- the Graphite transduction process.
-
- Hungarian: greng
-----------------------------------------------------------------------------------------------*/
-class GrEngine : public GraphiteProcess
-{
- friend class FontFace;
- friend class FontMemoryUsage;
-
-public:
- // Constructors & destructors:
- GrEngine();
- void BasicInit();
- virtual ~GrEngine();
- void DestroyContents(bool fDestroyCmap = true);
-
- // ISimpleInit methods:
- ////GrResult InitNew(const byte * prgb, int cb); -- obsolete
- ////GrResult get_InitializationData(int cchMax, OLECHAR * rgchw, int * pcch); -- obsolete
-
- // ITraceControl methods:
- //GrResult SetTracing(int n);
- //GrResult GetTracing(int * pnOptions);
-
- // IRenderingFeatures methods:
- //GrResult GetFeatureIDs(int cMax, int * prgFids, int * pcfid);
- //GrResult GetFeatureLabel(int fid, int nLanguage, int cchMax, OLECHAR * rgchw, int * pcch);
- //GrResult GetFeatureValues(int fid, int cfvalMax,
- // int * prgfval, int * pcfval, int * pfvalDefault);
- //GrResult GetFeatureValueLabel(int fid, int fval, int nLanguage,
- // int cchMax, OLECHAR * rgchw, int * pcch);
-
- // IRenderEngine methods:
- ////GrResult InitRenderer(IGrGraphics * pgg, OLECHAR * prgchData, int cchData); -- obsolete
- ////GrResult FontIsValid(OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
-
- GrResult get_SegDatMaxLength(int * pcb);
-
- //GrResult FindBreakPoint(Font * pfont, ITextSource * pgts, DELETE
- // int ichMin, int ichLim, int ichLimBacktrack,
- // bool fNeedFinalBreak,
- // bool fStartLine,
- // float dxMaxWidth,
- // LineBrk lbPref, LineBrk lbMax,
- // TrWsHandling twsh, bool fParaRtoL,
- // Segment ** ppsegRet,
- // int * pdichwLimSeg, float * pdxWidth, SegEnd * pest,
- // int cbPrev, byte * pbPrevSegDat,
- // int cbNextMax, byte * pbNextSegDat, int * pcbNextSegDat,
- // int * pdichwContext,
- // std::ostream * pstrmLog,
- // OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
-
- //GrResult FindBreakPointWJust(Font * pfont, ITextSource * pgts, IGrJustifier * pgjus,
- // int ichMin, int ichLim, int ichLimBacktrack, DELETE
- // bool fNeedFinalBreak,
- // bool fStartLine,
- // float dxMaxWidth,
- // LineBrk lbPref, LineBrk lbMax,
- // TrWsHandling twsh, bool fParaRtoL,
- // Segment ** ppsegRet,
- // int * pdichwLimSeg, float * pdxWidth, SegEnd * pest,
- // int cbPrev, byte * pbPrevSegDat,
- // int cbNextMax, byte * pbNextSegDat, int * pcbNextSegDat,
- // int * pdichwContext,
- // std::ostream * pstrmLog,
- // OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
-
- GrResult get_ScriptDirection(unsigned int * pgrfsdc, OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
-
- // DELETE
- //GrResult MakeJustifiedSegment(Font * pfont, ITextSource * pgts, IGrJustifier * pgj,
- // int ichMin, int ichLim,
- // bool fStartLine, bool fEndLine,
- // float dxUnjustifiedWidth, float dxJustifiedWidth,
- // TrWsHandling twsh, SegEnd est, LineBrk lb,
- // bool fParaRtl,
- // Segment ** ppsegRet, float * pdxWidth,
- // //int cbPrev, byte * pbPrevSegDat, int cbNextMax, byte * pbNextSegDat, int * pcbNextSegDat, int * pdichwContext,
- // std::ostream * pstrmLog,
- // OLECHAR * prgchwErrMsg, int cchwMaxErrMsg);
-
- // IJustifyingRenderer methods:
- // These methods return kresInvalidArg if the attribute ID is invalid or inappropriate;
- // kresFail if the engine is not in an appropriate state to return the information.
- virtual GrResult getGlyphAttribute(int iGlyph, int jgat, int nLevel, float * pValueRet);
- virtual GrResult getGlyphAttribute(int iGlyph, int jgat, int nLevel, int * pValueRet);
- virtual GrResult setGlyphAttribute(int iGlyph, int jgat, int nLevel, float value);
- virtual GrResult setGlyphAttribute(int iGlyph, int jgat, int nLevel, int value);
-
- // Interface methods not used by FW:
-
- ////GrResult IsGraphiteFont(IGrGraphics * pgg); -- obsolete
-
- ////GrResult FontAscentAndDescent(IGrGraphics * pgg, int * pysAscent, int * pysDescent); -- obsolete
-
- //GrResult MakeMeasuredSegment(
- // Font * pfont, ITextSource * pgts,
- // int ichMin, int ichLim,
- // bool fParaRtl,
- // Segment ** ppsegRet, SegEnd * pest,
- // std::ostream * pstrmLog,
- // OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
-
- //GrResult MakeSegmentFromRange(Font * pfont, ITextSource * pgts, IGrJustifier * pgj,
- // int ichMin, int ichLim,
- // bool fStartLine, bool fEndLine,
- // TrWsHandling twsh, bool fParaRtl,
- // Segment ** ppsegRet, float * pdxWidth, SegEnd * pest,
- // int cbPrev, byte * pbPrevSegDat, int cbNextMax, byte * pbNextSegDat, int * pcbNextSegDat,
- // int * pdichwContext,
- // std::ostream * pstrmLog,
- // OLECHAR * prgchwErrMsg, int cchwMaxErrMsg);
-
- // NEW interface
-
- GrResult ReadFontTables(Font * pfont, bool fItalic);
-
- FontErrorCode IsValidForGraphite(int * pnVersion, int * pnSubVersion);
-
- // Other public methods
-
- GrResult FindBreakPointAux(Font * pfont, ITextSource * pgts, IGrJustifier * pgjus,
- int ichwMin, int ichwLim, int ichwLimBacktrack,
- bool fNeedFinalBreakArg, bool fStartLine, bool fEndLine,
- float dxMaxWidth, bool fWidthIsCharCount,
- LineBrk lbPref, LineBrk lbMax, TrWsHandling twsh, bool fParaRtl,
- Segment ** ppsegRet,
- int * pdichwLimSeg,
- float * pdxWidth, SegEnd * pest,
- int cbPrev, byte * pbPrevSegDat,
- int cbNextMax, byte * pbNextSegDat, int * pcbNextSegDat,
- int * pdichwContext,
- std::ostream * pstrmLog,
- OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
-
- gid16 GetGlyphIDFromUnicode(int nUnicode);
- gid16 ActualGlyphForOutput(utf16 chwGlyphID);
-
- int GetFontEmUnits()
- {
- return m_mFontEmUnits;
- }
-
- gid16 LBGlyphID()
- {
- return m_chwLBGlyphID;
- }
-
- gid16 GetClassGlyphIDAt(int nClass, int nIndex);
- int GetIndexInGlyphClass(int nClass, gid16 chwGlyphID);
- size_t NumberOfGlyphsInClass(int nClass);
- int GlyphAttrValue(gid16 chwGlyphID, int nAttrID);
- int ComponentIndexForGlyph(gid16 chwGlyphID, int nCompID);
-
- ////void InitFontName(std::wstring stuInitialize, std::wstring & stuFaceName, std::wstring & stuFeatures); -- obsolete
- void RecordFontLoadError(OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
- void RecordFontRunError(OLECHAR * prgchwErrMsg, int cchMaxErrMsg, GrResult res);
- void ClearFontError(OLECHAR * prgchwErrMsg, int cchMaxErrMsg);
- void GetWritingSystemDirection(ITextSource * pgts, int ichwMin);
- ////GrResult SetUp(IGrGraphics * pgg, std::wstring stuFeatures); -- obsolete
- ////GrResult SetUp(IGrGraphics * pgg, std::wstring stuFeaturesArg, bool fBold, bool fItalic); -- obsolete
-
- GrResult RunUsingEmpty(Segment * psegNew, Font * pfont,
- GrCharStream * pchstrm, LayoutEnvironment & layout,
- int ichStop,
- float dxMaxWidth,
- bool fNeedFinalBreak, bool fMoreText, bool fInfiniteWidth,
- int ichwCallerBtLim,
- int nDirDepth, SegEnd estJ);
- bool InErrorState()
- {
- return m_fInErrorState;
- }
-
- std::wstring FaceName()
- {
- return m_stuFaceName;
- }
- std::wstring BaseFaceName()
- {
- Assert(m_stuBaseFaceName.size() == 0 || m_fUseSepBase);
- return m_stuBaseFaceName; // empty if not using separate base font
- }
- bool Bold()
- {
- return m_fBold;
- }
- bool Italic()
- {
- return m_fItalic;
- }
-
- void GetStyles(Font * pfont, int ichwMin, bool * pfBold, bool * pfItalic);
- void SwitchGraphicsFont(bool fBase);
-
- void AddFeature(featid nID, int nNameId, int cfset, int nDefault = 0);
- GrFeature * FeatureWithID(featid nID, int * pifeat);
- int DefaultForFeatureAt(int ifeat);
- void SetDefaultForFeatureAt(int ifeat, int nValue);
- GrFeature * Feature(int ifeat)
- {
- if (ifeat >= kMaxFeatures)
- return NULL;
- return m_rgfeat + ifeat;
- }
- void DefaultsForLanguage(isocode lgcode,
- std::vector<featid> & vnFeats, std::vector<int> & vnValues);
- std::wstring StringFromNameTable(int nNameId, int nLang);
-
- void InitSlot(GrSlotState *, int nUnicode = -1);
- void SetSlotAttrsFromGlyphAttrs(GrSlotState *);
-
- bool RightToLeft()
- {
- return m_fRightToLeft;
- }
- int TopDirectionLevel()
- {
- return (m_fRightToLeft) ? 1 : 0;
- }
-
- GrGlyphTable * GlyphTable()
- {
- return m_pgtbl;
- }
-
- GrClassTable * ClassTable()
- {
- return m_pctbl;
- }
-
- int NumFeat()
- {
- return m_cfeat;
- }
-
- bool LineBreakFlag()
- {
- return m_fLineBreak;
- }
-
- int PreXlbContext()
- {
- return m_cchwPreXlbContext;
- }
-
- int PostXlbContext()
- {
- return m_cchwPostXlbContext;
- }
-
- int ExtraAscent()
- {
- return m_mXAscent;
- }
-
- int ExtraDescent()
- {
- return m_mXDescent;
- }
-
- float VerticalOffset()
- {
- return m_dysOffset;
- }
-
- int NumUserDefn()
- {
- return m_cnUserDefn;
- }
-
- int NumCompPerLig()
- {
- return m_cnCompPerLig;
- }
-
- bool BasicJustification()
- {
- return m_fBasicJust;
- }
-
- bool LoggingTransduction();
- //{
- // return m_pfface->getLogging();
- // //return m_fLogXductn;
- //}
-
- bool FakeItalic()
- {
- return m_fFakeItalic;
- }
-
- void NewSegment(Segment ** ppseg);
-
- static int ReadVersion(GrIStream & grstrm);
-
- /*----------------------------------------------------------------------------------------------
- Function to convert between coordinate systems.
- This is identical to the built-in MulDiv function except that it rounds with better
- precision.
-
- TODO: move these out of GrEngine to someplace more general.
- ----------------------------------------------------------------------------------------------*/
- inline static int GrIntMulDiv(const int v, const int n, const int d)
- {
- return int(n < 0 ?
- (double(v * n)/double(d)) - 0.5 :
- (double(v * n)/double(d)) + 0.5);
- }
- inline static float GrFloatMulDiv(const float v, const float n, const float d)
- {
- return v * n / d;
- }
- inline static float GrIFIMulDiv(const int v, const float n, const int d)
- {
- return float(double(v) * n / double(d));
- }
- inline static int GrFIFMulDiv(const float v, const int n, const float d)
- {
- return int(n < 0 ?
- (v * double(n) / double(d)) - 0.5 :
- (v * double(n) / double(d)) + 0.5);
- }
- inline static int RoundFloat(const float n)
- {
- return int(n < 0 ? n - 0.5 : n + 0.5);
- }
-
-protected:
- // Member variables:
-
- long m_cref;
-
- //////////// Font information ////////////
-
- bool m_fBold;
- bool m_fItalic;
-
- // do we have the capacity to perform smart rendering for the various styles?
- bool m_fSmartReg;
- bool m_fSmartBold;
- bool m_fSmartItalic;
- bool m_fSmartBI;
- // are the italics faked using a slant?
- bool m_fFakeItalicCache;
- bool m_fFakeBICache;
- // control files for styled text; empty means not yet determined
- std::wstring m_strCtrlFileReg; // regular
- std::wstring m_strCtrlFileBold; // bold
- std::wstring m_strCtrlFileItalic; // italic
- std::wstring m_strCtrlFileBI; // bold-italic
-
- bool m_fFakeItalic; // true if we are simulating an italic slant in positioning
-
- std::wstring m_stuCtrlFile; // control file (.ttf file) from which we got
- // currently loaded files
-
- std::wstring m_stuInitError; // description of any error that happened while initializing
- // the engine
- std::wstring m_stuErrCtrlFile; // file for which the error occurred
-
- std::wstring m_stuFaceName; // eg, "Times New Roman"
- std::wstring m_stuFeatures;
-
- bool m_fUseSepBase;
- std::wstring m_stuBaseFaceName; // from Sile table; empty if we are not using a separate
- // control file
-
- GrResult m_resFontRead; // kresOk if the Graphite font was loaded successfully;
- // kresFail if the font could not be found or basic tables couldn't be read;
- // kresFalse if the Silf table is not present;
- // kresUnexpected if the Graphite tables could not be loaded
-
- GrResult m_resFontValid; // kresInvalidArg if the engine is not yet initialized
- // Originally:
- // kresOk if Graphite font & dc font match cmaps
- // kresUnexpected/kresFalse if dumb rendering
- // kresFail if dumb rendering with no cmap
- // But now it is apparently just = to m_resFontRead otherwise.
- FontErrorCode m_ferr;
- int m_fxdBadVersion;
-
- int m_nFontCheckSum; // when loading a font using the GrGraphics, remember the
- // check sum as a unique identifer
-
- int m_nScriptTag; // from the pertinent writing system; currently not used
- unsigned int m_grfsdc; // supported script directions
-
- bool m_fRightToLeft; // overall writing-system direction
-
- int m_mXAscent; // extra ascent, in font's em-units
- int m_mXDescent; // extra descent, in font's em_units
-
- float m_dysOffset; // vertical offset, in logical units (eg, for super/subscript)
-
- bool m_fBasicJust; // true if there are no complex justification tables/rules in the
- // font, so we use basic whitespace justification
- int m_cJLevels; // number of justification levels
-
- GrTableManager * m_ptman;
- GrClassTable * m_pctbl;
- GrGlyphTable * m_pgtbl;
-
- FontFace * m_pfface;
-
- GrFeature m_rgfeat[kMaxFeatures];
-// HashMap<int, int> m_hmnifeat; // maps from feature IDs to indices in the array
-// // Review: do we need this, or is a linear search adequate?
- int m_cfeat; // number of features present
-
- short * m_rglcidFeatLabelLangs; // LCIDs (language IDs) for all the labels in the feature table
- size_t m_clcidFeatLabelLangs;
-
- GrLangTable m_langtbl;
-
- // are line-breaks relevant at all?
- bool m_fLineBreak;
- // ranges for possible cross-line-boundary contextualization
- int m_cchwPreXlbContext;
- int m_cchwPostXlbContext;
-
- // magic glyph attribute numbers
- data16 m_chwPseudoAttr; // actual-for-pseudo fake glyph attribute
- data16 m_chwBWAttr; // break-weight
- data16 m_chwDirAttr; // directionality
- data16 m_chwJStretch0; // justify.0.stretch
- data16 m_chwJShrink0; // justify.0.shrink
- data16 m_chwJStep0; // justify.0.step
- data16 m_chwJWeight0; // justify.0.weight
-
- gid16 m_chwLBGlyphID; // magic line-break glyph ID
-
- int m_cComponents; // number of glyph attributes at the beginning of the glyph table
- // that actually represent ligature components
-
- int m_cnUserDefn; // number of user-defined slot attributes
- int m_cnCompPerLig; // max number of components needed per ligature
-
- int m_mFontEmUnits; // number of design units in the Em square for the font
-
- // for pseudo-glyph mappings
- int m_cpsd; // number of psuedo-glyphs
- GrPseudoMap * m_prgpsd;
- int m_dipsdInit; // (max power of 2 <= m_cpsd);
- // size of initial range to consider
- int m_cPsdLoop; // log2(max power of 2 <= m_cpsd);
- // indicates how many iterations are necessary
- int m_ipsdStart; // m_cpsd - m_dipsdInit;
- // where to start search
-
- // for Unicode to glyph ID mapping
- ////TableBuffer m_tbufCmap; // hold the full cmap table
- void * m_pCmap_3_1; // point to the MS Unicode cmap subtable
- // uses platform 3 writing system 1 or 0, preferably 1
- // use for Unicode to Glyph ID conversion
- void * m_pCmap_3_10;
- byte * m_pCmapTbl;
- bool m_fCmapTblCopy;
- int m_cbCmapTbl; // needed only for memory instrumentation
-
- // for feature names and maybe other strings from font later
- ////TableBuffer m_tbufNameTbl; // hold full name table; use Name() method to access
- byte * m_pNameTbl;
- bool m_fNameTblCopy;
- int m_cbNameTbl; // needed only for memory instrumentation
-
- bool m_fLogXductn; // true if we want to log the transduction process
-
- bool m_fInErrorState; // true if we are handling a rendering error
-
- // Other protected methods:
-
- enum {
- ksegmodeBreak = 0, // FindBreakPoint
- ksegmodeJust, // MakeJustifiedSegment
- //ksegmodeMms, // MakeMeasuredSegment
- ksegmodeRange // MakeSegmentFromRange
- };
-
- void MakeSegment(
- // Common parameters
- Segment * psegRet,
- Font * pfont, ITextSource * pgts, IGrJustifier * pjus,
- LayoutEnvironment & layout,
- int ichMin, int ichLim,
- // for finding a line break
- float dxMaxWidth,
- bool fBacktracking,
- // for making a justified segment
- bool fJust, float dxJustifiedWidthJ, SegEnd estJ);
-
- int FindFontLim(ITextSource * pgts, int ichFontMin, int * pnDirDepth);
-
-#ifdef GR_FW
- ////GrResult InitFromControlFile(IGrGraphics * pgg, std::wstring stuFaceName,
- //// bool fBold, bool fItalic); -- obsolete
- ////GrResult ReadFromControlFile(std::wstring stuFontFile); -- obsolete
-// GrResult GetFallBackFont(std::wstring * pstu);
-#endif
-
- ////GrResult ReadFromGraphicsFont(IGrGraphics * pgg, bool fItalic); -- obsolete
- void DestroyEverything();
-
- bool CheckTableVersions(GrIStream * pgrstrm,
- byte *silf_tbl, int lSilfStart,
- byte *gloc_tbl, int lGlocStart,
- byte *feat_tbl, int lFeatStart,
- int * pfxdBadVersion);
- //bool ReadSileTable(GrIStream & grstrm, long lTableSTart,
- // int * pmFontEmUnits, bool * pfMismatchedBase);
- bool ReadSilfTable(GrIStream & grstrm, long lTableStart, int iSubTable,
- int * pchwMaxGlyphID, int * pfxdVersion);
- bool ReadGlocAndGlatTables(GrIStream & grstrm, long lGlocStart, GrIStream & glat_strm, long lGlatStart,
- int chwMaxGlyphID, int fxdSilfVersion);
- bool ReadFeatTable(GrIStream & grstrm, long lTableStart);
- bool ReadSillTable(GrIStream & grstrm, long lTableStart);
- bool SetCmapAndNameTables(Font * pfont);
-
- void CreateEmpty();
-
- bool BadFont(FontErrorCode * pferr = NULL)
- {
- if (pferr)
- *pferr = m_ferr;
- return (m_resFontValid == kresFail || m_resFontRead == kresFail);
- }
- bool DumbFallback(FontErrorCode * pferr = NULL)
- {
- if (pferr)
- *pferr = m_ferr;
- return (m_resFontValid != kresOk || m_resFontRead != kresOk);
- }
-
- gid16 MapToPseudo(int nUnicode);
-
- // NEW interface
- void AssignDefaultFeatures(int cfeat, FeatureSetting * prgfset);
-
- // Feature access for FontFace:
- size_t NumberOfFeatures_ff();
- featid FeatureID_ff(size_t ifeat);
- size_t FeatureWithID_ff(featid id);
- bool GetFeatureLabel_ff(size_t ifeat, lgid language, utf16 * label);
- int GetFeatureDefault_ff(size_t ifeat);
- size_t NumberOfSettings_ff(size_t ifeat);
- int GetFeatureSettingValue_ff(size_t ifeat, size_t ifset);
- bool GetFeatureSettingLabel_ff(size_t ifeat, size_t ifset, lgid language, utf16 * label);
- // Feature-label languages:
- size_t NumberOfFeatLangs_ff();
- short GetFeatLabelLang_ff(size_t ilang);
- // Language access for FontFace:
- size_t NumberOfLanguages_ff();
- isocode GetLanguageCode_ff(size_t ilang);
-
- void SetUpFeatLangList();
-
-//:Ignore
-#ifdef OLD_TEST_STUFF
- // For test procedures:
- void SetUpCrossLineContextTest();
- void SetUpPseudoGlyphTest();
- void SetUpRuleActionTest();
- void SetUpRuleAction2Test();
- void SetUpAssocTest();
- void SetUpAssoc2Test();
- void SetUpDefaultAssocTest();
- void SetUpFeatureTest();
- void SetUpLigatureTest();
- void SetUpLigature2Test();
-
- void InitFromControlFileTest();
-#endif // OLD_TEST_STUFF
-//:End Ignore
-};
-
-} // namespace gr
-
-#if defined(GR_NO_NAMESPACE)
-using namespace gr;
-#endif
-
-
-#endif // !GR_ENGINE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrFSM.cpp b/Build/source/libs/graphite-engine/src/segment/GrFSM.cpp
deleted file mode 100644
index 53182edab0d..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrFSM.cpp
+++ /dev/null
@@ -1,526 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrFSM.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements the finite state machine.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#include <cstring>
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Fill in the FSM by reading from the font stream.
- Assumes the stream is in the correct position.
-----------------------------------------------------------------------------------------------*/
-bool GrFSM::ReadFromFont(GrIStream & grstrm, int fxdVersion)
-{
- short snTmp;
-
- // number of FSM states
- snTmp = grstrm.ReadShortFromFont();
- m_crow = snTmp;
- // number of transitional states
- snTmp = grstrm.ReadShortFromFont();
- int crowTransitional = snTmp;
- // number of success states
- snTmp = grstrm.ReadShortFromFont();
- int crowSuccess = snTmp;
- m_crowFinal = m_crow - crowTransitional;
- m_crowNonAcpt = m_crow - crowSuccess;
- m_rowFinalMin = crowTransitional;
- // number of columns
- snTmp = grstrm.ReadShortFromFont();
- m_ccol = snTmp;
-
- // Sanity checks.
- if (crowTransitional > m_crow || crowSuccess > m_crow)
- return false; // bad table
- // TODO: add a sanity check for m_ccol.
-
- // number of FSM glyph ranges and search constants
- snTmp = grstrm.ReadShortFromFont();
- m_cmcr = snTmp;
- snTmp = grstrm.ReadShortFromFont();
- m_dimcrInit = snTmp;
- snTmp = grstrm.ReadShortFromFont();
- m_cLoop = snTmp;
- snTmp = grstrm.ReadShortFromFont();
- m_imcrStart = snTmp;
-
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- for (int imcr = 0; imcr < m_cmcr; imcr++)
- {
- m_prgmcr[imcr].m_chwFirst = grstrm.ReadUShortFromFont();
- m_prgmcr[imcr].m_chwLast = grstrm.ReadUShortFromFont();
- m_prgmcr[imcr].m_col = grstrm.ReadUShortFromFont();
- }
-
- // rule map and offsets (extra item at end gives final offset, ie, total)
- m_prgirulnMin = new data16[crowSuccess + 1];
- data16 * pchw = m_prgirulnMin;
- int i;
- for (i = 0; i < (crowSuccess + 1); i++, pchw++)
- {
- *pchw = grstrm.ReadUShortFromFont();
- }
-
- // Last offset functions as the total length of the rule list.
- // Note that the number of rules in the map is not necessarily equal to the number of
- // rules in the pass; some rules may be listed multiply, if they are matched by more
- // than one state.
- int crulInMap = m_prgirulnMin[crowSuccess];
- m_prgrulnMatched = new data16[crulInMap];
- m_crulnMatched = crulInMap;
- pchw = m_prgrulnMatched;
- for (i = 0; i < crulInMap; i++, pchw++)
- {
- *pchw = grstrm.ReadUShortFromFont();
- }
-
- // min rule pre-context number of items
- byte bTmp = grstrm.ReadByteFromFont();
- m_critMinRulePreContext = bTmp;
- // max rule pre-context number of items
- bTmp = grstrm.ReadByteFromFont();
- m_critMaxRulePreContext = bTmp;
-
- if (m_critMinRulePreContext > kMaxSlotsPerRule || m_critMaxRulePreContext > kMaxSlotsPerRule)
- return false; // bad table
-
- int cStartStates = m_critMaxRulePreContext - m_critMinRulePreContext + 1;
-
- // start states
- m_prgrowStartStates = new short[cStartStates];
- short * psn = m_prgrowStartStates;
- for (int ic = 0; ic < cStartStates; ic++, psn++)
- {
- *psn = grstrm.ReadShortFromFont();
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Fill in the FSM's state table by reading from the font stream.
- Assumes the stream is in the correct position.
-----------------------------------------------------------------------------------------------*/
-bool GrFSM::ReadStateTableFromFont(GrIStream & grstrm, int fxdVersion)
-{
- int cCells = ((m_crow - m_crowFinal) * m_ccol);
- m_prgrowTransitions = new short[cCells];
- short * psn = m_prgrowTransitions;
- for (int iCell = 0; iCell < cCells; iCell++, psn++)
- {
- *psn = grstrm.ReadShortFromFont();
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Use the transition table to find a rule or rules that match; then run the contraint
- code to see if the rule is active. Return the rule number of the rule to be applied.
-
- @param ppass - pass, which knows how to run constraint code
- @param psstrmIn - input stream
- @param psstrmOut - output stream (from which to get recently output slots)
-----------------------------------------------------------------------------------------------*/
-int GrFSM::GetRuleToApply(GrTableManager * ptman, GrPass * ppass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- // List of accepting states and corresponding count of slots that were
- // matched by each.
- int prgrowAccepting[kMaxSlotsPerRule];
- int prgcslotMatched[kMaxSlotsPerRule];
-
- // Run the transition table until it jams.
- int crowAccepting = RunTransitionTable(ppass, psstrmIn, psstrmOut,
- prgrowAccepting, prgcslotMatched);
-
- // Nothing matched; fail quickly.
- if (crowAccepting == 0)
- return -1;
-
- int * prow = prgrowAccepting + crowAccepting - 1;
- int * pcslot = prgcslotMatched + crowAccepting - 1; // # of slots matched AFTER the curr pos
-
- // Quick test for common case of exactly one rule matched.
- if (crowAccepting == 1 &&
- (m_prgirulnMin[*prow - m_crowNonAcpt + 1] - m_prgirulnMin[*prow - m_crowNonAcpt]) == 1)
- {
- int iruln = m_prgirulnMin[*prow - m_crowNonAcpt];
- int ruln = m_prgrulnMatched[iruln];
- if (RunConstraintAndRecordLog(ptman, ppass, ruln, psstrmIn, psstrmOut,
- ppass->PreModContextForRule(ruln), *pcslot))
- {
- return ruln;
- }
- else
- return -1;
- }
-
- // Several rules were matched. We need to sort them and then run the constraints
- // for each rule, accepting the first one whose constraints succeed.
-
- // Count up the number of rules that matched and allocate a buffer of the right size.
- int crulMatched = 0;
- while (prow >= prgrowAccepting)
- {
- crulMatched +=
- m_prgirulnMin[*prow - m_crowNonAcpt + 1] - m_prgirulnMin[*prow - m_crowNonAcpt];
- --prow;
- }
- MatchedRule * prgmr = new MatchedRule[crulMatched];
-
- prow = prgrowAccepting + crowAccepting - 1;
-
- // Do a dumb insertion sort, ordering primarily by sort key (largest first)
- // and secondarily by the order in the original file (rule number).
- // Review: is this kind of sort fast enough? We assuming that we usually only
- // have a handful of matched rules.
- int cmr = 0;
- while (prow >= prgrowAccepting)
- {
- int iruln = m_prgirulnMin[*prow - m_crowNonAcpt];
- // Get all the rules matches by a single state.
- while (iruln < m_prgirulnMin[*prow - m_crowNonAcpt + 1])
- {
- int ruln = m_prgrulnMatched[iruln];
- int nSortKey = ppass->SortKeyForRule(ruln);
- int cslot = *pcslot;
- int imr;
- for (imr = 0; imr < cmr; imr++)
- {
- if (nSortKey > prgmr[imr].nSortKey ||
- (nSortKey == prgmr[imr].nSortKey && ruln < prgmr[imr].ruln))
- {
- // Insert here.
- memmove(prgmr+imr+1, prgmr+imr, (isizeof(MatchedRule) * (cmr - imr)));
- prgmr[imr].ruln = ruln;
- prgmr[imr].nSortKey = nSortKey;
- prgmr[imr].cslot = cslot;
- break;
- }
- }
- if (imr >= cmr)
- {
- prgmr[cmr].ruln = ruln;
- prgmr[cmr].nSortKey = nSortKey;
- prgmr[cmr].cslot = cslot;
- }
- cmr++;
-
- iruln++;
- }
- --prow;
- --pcslot;
- }
-
-
- for (int imr = 0; imr < cmr; imr++)
- {
- int ruln = prgmr[imr].ruln;
- if (RunConstraintAndRecordLog(ptman, ppass, ruln, psstrmIn, psstrmOut,
- ppass->PreModContextForRule(ruln), prgmr[imr].cslot))
- {
- // Success!
- delete[] prgmr;
- return ruln;
- }
- }
-
- // No rule matched or the constraints failed.
- delete[] prgmr;
- return -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- Run the transition table, generating a list of rows corresponding to accepting states.
-
- @param psstrmIn - input stream
- @param prgrowAccepting - array to fill in with accepting rows
- @param prgcslotMatched - corresponding array with number of slots matched
-----------------------------------------------------------------------------------------------*/
-int GrFSM::RunTransitionTable(GrPass * ppass, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int * prgrowAccepting, int * prgcslotMatched)
-{
- int ipass = ppass->PassNumber();
-
- // Remember we're reading the pre-context items from the output stream, not the input.
- int cslotPreContextAvail = psstrmOut->WritePos();
-
- if (cslotPreContextAvail < m_critMinRulePreContext)
- return 0; // not enough input to match any rule
-
- // Look backwards by the number of pre-context items for this pass, but not earlier
- // than the beginning of the stream.
- int cslot = -1 * min(cslotPreContextAvail, m_critMaxRulePreContext);
-
- // Normally the start state is state 0. But if we are near the beginning of the stream,
- // we may need to adjust due to the fact that we don't have enough input yet to
- // match the pre-context items in all the rules. So in effect we skip some states
- // corresponding to the earlier items that aren't present.
- int row = m_prgrowStartStates[max(0, m_critMaxRulePreContext - cslotPreContextAvail)];
-
- int * prowTop = prgrowAccepting;
- int * pcslotTop = prgcslotMatched;
- while (true)
- {
- if (row >= m_rowFinalMin)
- // final state--jammed
- return (prowTop - prgrowAccepting);
-
- if (psstrmIn->SlotsPendingInContext() <= cslot)
- // no more input
- return (prowTop - prgrowAccepting);
-
- // Figure out what column the input glyph belong in.
- // Since this is a time-critical routine, we cache the results for the current pass.
- GrSlotState * pslot = (cslot < 0) ?
- psstrmOut->PeekBack(cslot) :
- psstrmIn->Peek(cslot);
- int col;
- if (pslot->PassNumberForColumn() == ipass)
- {
- col = pslot->FsmColumn();
- }
- else
- {
- gid16 chwGlyphID = (cslot < 0) ?
- psstrmOut->PeekBack(cslot)->GlyphID() :
- psstrmIn->Peek(cslot)->GlyphID();
- col = FindColumn(chwGlyphID);
- pslot->CacheFsmColumn(ipass, col);
- }
- int rowNext;
- if (col < 0)
- rowNext = 0;
- else
- rowNext = m_prgrowTransitions[(row * m_ccol) + col];
-
- if (rowNext == 0) // jammed
- return (prowTop - prgrowAccepting);
-
- cslot++;
- if (rowNext >= m_crowNonAcpt) // or (rowNext < 0)
- {
- // Accepting state--push it on the stack.
- //rowNext *= -1;
- gAssert((prowTop - prgrowAccepting) < kMaxSlotsPerRule);
- *prowTop++ = rowNext;
- *pcslotTop++ = cslot;
- }
- row = rowNext;
-
- gAssert((prowTop - prgrowAccepting) == (pcslotTop - prgcslotMatched));
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Run the transition table, generating a list of rows corresponding to accepting states.
- Optimized to avoid matrix arithmetic for non-accepting states.
-
- Review: do we need to use this version?
-
- @param psstrmIn - input stream
- @param prgrowAccepting - array to fill in with accepting rows
- @param prgcslotMatched - corresponding array with number of slots matched
-----------------------------------------------------------------------------------------------*/
-#if 0
-
-int GrFSM::RunTransitionTableOptimized(GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int * prgrowAccepting, int * prgcslotMatched)
-{
- int cslot = 0;
- int ichwRowOffset = 0;
- int ichwRowOffsetLim = m_crowFinal * m_ccol; // number of cells
- int * prowTop = prgrowAccepting;
- int * pcslotTop = prgcslotMatched;
- while (true)
- {
- if (ichwRowOffset >= ichwRowOffsetLim)
- // final state--jammed
- return (prowTop - prgrowAccepting);
-
- if (psstrmIn->SlotsPendingInContext() < cslot)
- // no more input
- return (prowTop - prgrowAccepting);
-
- gid16 chwGlyphID = psstrmIn->Peek(cslot)->GlyphID();
- int col = FindColumn(chwGlyphID);
- short cellValue = *(m_prgprgrowXitions + ichwRowOffset + col);
-
- if (cellValue == 0) // jammed
- return (prowTop - prgrowAccepting);
-
- cslot++;
- if (cellValue < 0)
- {
- // Accepting state--push it on the stack.
- int rowNext = cellValue * -1;
- gAssert((prowTop - prgrowAccepting) < kMaxSlotsPerRule);
- *prowTop++ = rowNext;
- *pcslotTop++ = cslot;
- ichwRowOffset = rowNext * m_ccol;
- }
- else
- ichwRowOffset = cellValue;
-
- gAssert((prowTop - prgrowAccepting) == (pcslotTop - prgcslotMatched));
- }
-}
-
-#endif // 0
-
-
-/*----------------------------------------------------------------------------------------------
- Run all the constraints for the rules matched by the state that we have reached.
- The rules are ordered as they were in the GDL file. When we hit a constraint that
- matches, return the corresponding rule number. Return -1 if no rule passed.
-
- @param ppass - pass, which knows how to actually run the constraints
- @param psstrmIn - input stream
- @param cslotMatched - number of slots matched; constraints must be run for each of these
-----------------------------------------------------------------------------------------------*/
-//:Ignore
-int GrFSM::RunConstraints_Obsolete(GrTableManager * ptman, GrPass * ppass, int row,
- GrSlotStream * psstrmIn, int cslotMatched)
-{
- int iruln = m_prgirulnMin[row - m_crowNonAcpt];
- while (iruln < m_prgirulnMin[row - m_crowNonAcpt + 1])
- {
- int ruln = m_prgrulnMatched[iruln];
- bool fSuccess = ppass->RunConstraint(ptman, ruln, psstrmIn, NULL, 0, cslotMatched);
- if (fSuccess)
- {
- if (ptman->LoggingTransduction())
- ppass->RecordRuleFired(psstrmIn->ReadPosForNextGet(), ruln);
- return ruln;
- }
- else
- {
- if (ptman->LoggingTransduction())
- ppass->RecordRuleFailed(psstrmIn->ReadPosForNextGet(), ruln);
- }
-
- iruln++;
- }
- return -1; // no rule succeeded
-}
-//:End Ignore
-
-/*----------------------------------------------------------------------------------------------
- Run the constraints for the given rule, and record whether it failed or succeeded in the
- transduction log.
-
- @param ppass - pass, which knows how to actually run the constraints
- @param psstrmIn - input stream
- @param cslotPreModContext - number of slots before the current position that must be tested
- @param islotLimMatched - number of slots matched AFTER the current position
-
- @return True if the constraints succeeded.
-----------------------------------------------------------------------------------------------*/
-bool GrFSM::RunConstraintAndRecordLog(GrTableManager * ptman, GrPass * ppass, int ruln,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int cslotPreModContext, int islotLimMatched)
-{
- bool fSuccess = ppass->RunConstraint(ptman, ruln, psstrmIn, psstrmOut,
- cslotPreModContext, islotLimMatched);
-
- if (ptman->LoggingTransduction())
- {
- if (fSuccess)
- ppass->RecordRuleFired(psstrmIn->ReadPosForNextGet(), ruln);
- else
- ppass->RecordRuleFailed(psstrmIn->ReadPosForNextGet(), ruln);
- }
-
- return fSuccess;
-}
-
-/*----------------------------------------------------------------------------------------------
- Search for the class range containing the glyph ID, and return the matching FSM column.
- Does a fast binary search that uses only shifts, no division.
-----------------------------------------------------------------------------------------------*/
-int GrFSM::FindColumn(gid16 chwGlyphID)
-{
- #ifdef _DEBUG
- // Check that the pre-calculated constants are correct.
- int nPowerOf2 = 1;
- while (nPowerOf2 <= m_cmcr)
- nPowerOf2 <<= 1;
- nPowerOf2 >>= 1;
- // Now nPowerOf2 is the max power of 2 <= m_cclsrg.
- // m_cLoop is not needed for our purposes, but it is included because it is part of
- // the TrueType standard.
- gAssert(1 << m_cLoop == nPowerOf2); // m_cloop == log2(nPowerOf2)
- gAssert(m_dimcrInit == nPowerOf2);
- gAssert(m_imcrStart == m_cmcr - m_dimcrInit);
- #endif
-
- int dimcrCurr = m_dimcrInit;
-
- GrFSMClassRange * pmcrCurr = m_prgmcr + m_imcrStart;
- while (dimcrCurr > 0)
- {
- int nTest;
- if (pmcrCurr < m_prgmcr)
- nTest = -1;
- else
- {
- nTest = pmcrCurr->m_chwFirst - chwGlyphID;
- if (nTest < 0 && chwGlyphID <= pmcrCurr->m_chwLast)
- //nTest = 0;
- // This is a tiny bit more efficient:
- return pmcrCurr->m_col;
- }
-
- if (nTest == 0)
- // found it
- return pmcrCurr->m_col;
-
- dimcrCurr >>= 1; // divide by 2
- if (nTest < 0)
- pmcrCurr += dimcrCurr;
- else // (nTest > 0)
- pmcrCurr -= dimcrCurr;
- }
-
- return -1;
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/GrFSM.h b/Build/source/libs/graphite-engine/src/segment/GrFSM.h
deleted file mode 100644
index b1909553daa..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrFSM.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrFSM.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- The GrFSM class, which is the mechanism that examines input in a glyph stream and
- determines which rule matches and should be run.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef FSM_INCLUDED
-#define FSM_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-class GrPass;
-
-/*----------------------------------------------------------------------------------------------
- A machine class range consists of a range of contiguous glyph IDs that map to
- a single column in the FSM (a machine class). (Note that there might be more than one
- range mapping to a given column.)
-
- Keep in mind that these "classes" are completely different from the classes that
- are used for substitution. These are used only for matching by the FSM.
-
- Hungarian: mcr
-----------------------------------------------------------------------------------------------*/
-class GrFSMClassRange
-{
- friend class GrFSM;
-
-protected:
- gid16 m_chwFirst; // first glyph ID in range
- gid16 m_chwLast; // last glyph ID in range
- data16 m_col; // column (machine class) to which this range maps
-};
-
-/*----------------------------------------------------------------------------------------------
- The finite state machine that is used to match sequences of glyphs and
- determine which rule to apply. There is one FSM per pass.
-
- The states in the FSM are grouped and ordered in the following way:
- - non-accepting states (no rule completely matched)
- - accepting non-final states (a rule matched, but a longer rule is possible)
- - final states (a rule matched and no longer rule is possible)
- In other words, we have:
- - transition, non-accepting
- - transition, accepting
- - non-transition, accepting
- The transition states have information about the next state to transition to;
- the accepting states have information about the rule(s) that matched.
-
- There are three main data structures that are part of the finite state machine:
-
- (1) the transition matrix: m_prgprgrowXitions. It contains a row for each transition
- state (non-accepting states plus accepting non-final states), and a column for each
- machine class. The cell values indicate the next state to transition to for the
- matched input. A positive number indicates that the next state is a non-accepting state;
- a negative value indicates an accepting state. Zero means there is no next state;
- no more matches are possible; machine has "jammed."
-
- (2) the matched-rule list: m_prgrulnMatched. This is a list of rule numbers,
- which are indices into the pass's action- and constraint-code arrays.
- It contains the numbers of the rules matched by the first accepting state,
- followed by those matched by the second accepting state, etc. For each state,
- the rules must be ordered using the same order of the rules in the RDL file.
-
- (3) the matched-rule-offsets list: m_prgirulnMin. This gives the starting index into
- the matched-rule list for each accepting state. (Non-accepting states are not included,
- so the first item is for state m_crowNonAcpt.)
-
- In addition, the FSM interacts with the action- and constraint-code lists in the pass
- itself. These lists are indexed by rule number (the values of m_prgrulnMatched).
- When some input matches the rule, the constraint-code is run; if it succeeds,
- the rule number is returned to the caller and that rule is applied (ie, the action-code
- is run).
-
- Hungarian: fsm
-
- Other hungarian:
- row - row (state)
- col - column (machine class)
- ruln - rule number
-
- REVIEW: This is quite a time-critical class, and there are two potential optimizations
- that have been proposed for the value of a cell:
-
- (1) use a negative cell number to indicate an accepting state and a positive number
- to indicate a non-accepting state. So this gives a comparison with zero rather than
- some arbitrary number
-
- (2) have the positive numbers--the most common case--be the actual byte offset into the
- table rather than the row number. This saves matrix multiplication at each step,
- ie, "m_prgsnTransitions[(row * m_ccol) + col]".
-
- The two versions are implemented in RunTransitionTable and RunTransitionTableOptimized.
- Do these seem to be worth the inconvenience of added complexity in understanding
- and debugging?
-----------------------------------------------------------------------------------------------*/
-class GrFSM
-{
- friend class FontMemoryUsage;
-
-public:
- GrFSM() :
- m_prgirulnMin(NULL),
- m_prgrulnMatched(NULL),
- m_prgrowTransitions(NULL),
- m_prgibStateDebug(NULL),
- m_prgmcr(NULL),
- m_prgrowStartStates(NULL)
- {
- }
-
- ~GrFSM()
- {
- delete[] m_prgirulnMin;
- delete[] m_prgrulnMatched;
-
- delete[] m_prgrowTransitions;
-
- delete[] m_prgibStateDebug;
-
- delete[] m_prgmcr;
-
- delete[] m_prgrowStartStates;
- }
-
- bool ReadFromFont(GrIStream & grstrm, int fxdVersion);
- bool ReadStateTableFromFont(GrIStream & grstrm, int fxdVersion);
-
- int GetRuleToApply(GrTableManager *, GrPass * ppass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
-
- int RunTransitionTable(GrPass * ppass, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int * prgrowAccepting, int * prgcslotMatched);
- int RunTransitionTableOptimized(GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int * prgrowAccepting, int * prgcslotMatched);
- bool RunConstraintAndRecordLog(GrTableManager *, GrPass * ppass, int ruln,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int cslotPreModContext, int cslotMatched);
-
- int RunConstraints_Obsolete(GrTableManager *, GrPass * ppass, int row, GrSlotStream * psstrmIn,
- int cslotMatched);
-
- // For sorting matched rules
- struct MatchedRule // mr
- {
- int ruln;
- int nSortKey;
- int cslot; // number of slots matched AFTER the current stream position
- };
-
- int MaxRulePreContext()
- {
- return m_critMaxRulePreContext;
- }
-
-protected:
- int FindColumn(gid16 chwGlyphID);
-protected:
- // Instance variables:
- int m_crow; // number of rows (states)
- int m_crowFinal; // number of final states; no transitions for these
- int m_rowFinalMin; // index of first final row
- int m_crowNonAcpt; // number of non-accepting states; no rule indices for these
-
- int m_ccol; // number of columns (machine classes)
-
- data16 * m_prgirulnMin; // m_crow-m_crowNonAcpt+1 of these;
- // index within m_prgrulnMatched, start of matched
- // rules for each accepting state
-
- data16 * m_prgrulnMatched; // long ordered list of rule indices matched by
- // subsequent states; total length is sum of number
- // of rules matched for each accepting state
- int m_crulnMatched; // needed only for memory instrumentation
-
- // Transition matrix--for optimized version:
-// short ** m_prgprgrowXitions; // ((m_crow-m_crowFinal) * m_ccol) of these;
- // positive number indicates
- // next state is non-accepting; negative number is
- // negative of accepting state.
-
- // Transition matrix--for current version:
- short * m_prgrowTransitions; // ((m_crow-m_crowFinal) * m_ccol) of these
-
- // debugger string offsets
- data16 * m_prgibStateDebug; // for transition states; (m_crow-m_crul+1) of these
-
- // constants for fast binary search; these are generated by the compiler so that the
- // engine doesn't have to take time to do it
- data16 m_dimcrInit; // (max power of 2 <= m_cmcr);
- // size of initial range to consider
- data16 m_cLoop; // log2(max power of 2 <= m_cmcr);
- // indicates how many iterations are necessary
- data16 m_imcrStart; // m_cmcr - m_dimcrInit;
- // where to start search
-
- int m_cmcr; // number of machine-class-ranges
- GrFSMClassRange * m_prgmcr; // array of class ranges; we search these to find the
- // mapping to the machine-class-column
-
- // minimum and maximum number of items in the rule contexts before the first modified
- // item.
- int m_critMinRulePreContext;
- int m_critMaxRulePreContext;
-
- // start states--row in the FSM to start on depending on how many bogus slots we
- // are skipping; (max rule-precontext - min rule-precontext + 1) of these;
- // first always = zero
- short * m_prgrowStartStates;
-
-//:Ignore
-#if OLD_TEST_STUFF
-public:
- // For test procedures:
- void SetUpSimpleFSMTest();
- void SetUpRuleActionTest();
- void SetUpRuleAction2Test(int);
- void SetUpAssocTest(int);
- void SetUpAssoc2Test(int);
- void SetUpDefaultAssocTest();
- void SetUpFeatureTest();
- void SetUpLigatureTest(int);
- void SetUpLigature2Test(int);
-#endif // OLD_TEST_STUFF
-//:End Ignore
-
-};
-
-} // namespace gr
-
-
-#endif // !FSM_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrFeature.cpp b/Build/source/libs/graphite-engine/src/segment/GrFeature.cpp
deleted file mode 100644
index 61970d56949..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrFeature.cpp
+++ /dev/null
@@ -1,321 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrFeature.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements the GrFeature class.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#include <cstring>
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> GrFeature Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Initialize the feature.
-----------------------------------------------------------------------------------------------*/
-void GrFeature::Initialize(featid nID, int nNameId, int cfset, int nDefault)
-{
- m_nID = nID;
- m_nNameId = nNameId;
- m_nDefault = nDefault;
-
- m_vnVal.resize(cfset);
- for (unsigned int ifset = 0; ifset < m_vnVal.size(); ifset++)
- m_vnVal[ifset] = INT_MAX;
- m_vnNameId.resize(cfset);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the feature settings.
-----------------------------------------------------------------------------------------------*/
-int GrFeature::Settings(int cMax, int * prgnVal)
-{
- int cRet = min(cMax, signed(m_vnVal.size()));
- for (int ifset = 0; ifset < cRet; ifset++)
- prgnVal[ifset] = m_vnVal[ifset];
- return cRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Add a feature setting.
-----------------------------------------------------------------------------------------------*/
-void GrFeature::AddSetting(int nVal, int nNameId)
-{
- Assert(nVal != INT_MAX);
- unsigned int ifset;
- for (ifset = 0; ifset < m_vnVal.size(); ifset++)
- {
- if (m_vnVal[ifset] == nVal)
- return; // already there
- }
- for (ifset = 0; ifset < m_vnVal.size(); ifset++)
- {
- if (m_vnVal[ifset] == INT_MAX)
- {
- m_vnVal[ifset] = nVal;
- m_vnNameId[ifset] = nNameId;
- return;
- }
- }
- m_vnVal.push_back(nVal);
- m_vnNameId.push_back(nNameId);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the given setting is valid according to the font's feature table.
-----------------------------------------------------------------------------------------------*/
-bool GrFeature::IsValidSetting(int nVal)
-{
- for (unsigned int ifset = 0; ifset < m_vnVal.size(); ifset++)
- {
- if (m_vnVal[ifset] == nVal)
- return true;
- }
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the feature label from the name table.
-----------------------------------------------------------------------------------------------*/
-std::wstring GrFeature::Label(GrEngine * pgreng, int nLang)
-{
- std::wstring stu = pgreng->StringFromNameTable(nLang, m_nNameId);
- if (stu == L"NoName")
- stu.erase();
- return stu;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the feature value label from the name table.
-----------------------------------------------------------------------------------------------*/
-std::wstring GrFeature::SettingLabel(GrEngine * pgreng, int nVal, int nLang)
-{
- for (unsigned int ifset = 0; ifset < m_vnVal.size(); ifset++)
- {
- if (m_vnVal[ifset] == nVal)
- {
- std::wstring stu = pgreng->StringFromNameTable(nLang, m_vnNameId[ifset]);
- if (stu == L"NoName")
- stu.erase();
- return stu;
- }
- }
- Assert(false); // setting is not valid
- return L"";
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the given setting value.
-----------------------------------------------------------------------------------------------*/
-int GrFeature::NthSetting(int ifset)
-{
- if (ifset >= (int)m_vnVal.size())
- return -1;
- else
- return m_vnVal[ifset];
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the feature value label for the given index.
-----------------------------------------------------------------------------------------------*/
-std::wstring GrFeature::NthSettingLabel(GrEngine * pgreng, int ifset, int nLang)
-{
- std::wstring stu;
-
- if (ifset >= (int)m_vnVal.size())
- stu.erase();
- else
- {
- stu = pgreng->StringFromNameTable(nLang, m_vnNameId[ifset]);
- if (stu == L"NoName")
- stu.erase();
- }
- return stu;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the feature setting label.
-----------------------------------------------------------------------------------------------*/
-// void GrFeature::SetSettingLabel(int nVal, std::wstring stuLabel, int nLang)
-// {
-// for (int ifset = 0; ifset < m_vfset.size(); ifset++)
-// {
-// if (m_vfset[ifset].m_nVal == nVal)
-// {
-// m_vfset[ifset].m_hmnstuLabels.Insert(nLang, stuLabel, true);
-// return;
-// }
-// }
-// Assert(false); // setting is not valid
-// }
-
-
-//:>********************************************************************************************
-//:> GrLangTable Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Read the languages from the font.
-----------------------------------------------------------------------------------------------*/
-bool GrLangTable::ReadFromFont(GrIStream * pgrstrm, int fxdVersion)
-{
- GrIStream & grstrm = *pgrstrm;
-
- // number of languages
- m_clang = (size_t)grstrm.ReadUShortFromFont();
-
- // search constants
- m_dilangInit = grstrm.ReadUShortFromFont();
- m_cLoop = grstrm.ReadUShortFromFont();
- m_ilangStart = grstrm.ReadUShortFromFont();
-
- // Slurp the data into the buffers. The "+1" represents a bogus ending entry that quickly
- // gives us the size of the feature list. Note that the resulting data is all big-endian.
- int cb = (m_clang + 1) * sizeof(LangEntry);
- m_prglang = new LangEntry[m_clang + 1];
- grstrm.ReadBlockFromFont(m_prglang, cb);
-
- m_cbOffset0 = (lsbf)(m_prglang[0].cbOffsetBIG);
-
- Assert((lsbf)(m_prglang[m_clang].cFeaturesBIG) == 0); // bogus entry has no settings
- cb = (lsbf)(m_prglang[m_clang].cbOffsetBIG) - m_cbOffset0;
- Assert(cb % sizeof(FeatSet) == 0); // # of bytes fits nicely into FeatSet class
- int cfset = cb / sizeof(FeatSet);
- m_prgfset = new FeatSet[cfset];
- m_cfset = cfset;
- grstrm.ReadBlockFromFont(m_prgfset, cb);
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Create an empty language table to use for dumb rendering, or when there is no valid
- Sill table.
-----------------------------------------------------------------------------------------------*/
-void GrLangTable::CreateEmpty()
-{
- m_prglang = NULL;
- m_prgfset = NULL;
- m_clang = 0;
- m_dilangInit = 0;
- m_cLoop = 0;
- m_ilangStart = 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return information about the language with the given ID by filling in the given vectors
- with the feature ids and values. Will wipe out any data in the vectors already.
-----------------------------------------------------------------------------------------------*/
-void GrLangTable::LanguageFeatureSettings(isocode lgcode,
- std::vector<featid> & vnFeatId, std::vector<int> & vnValues)
-{
- vnFeatId.clear();
- vnValues.clear();
-
- int ilang = FindIndex(lgcode);
- if (ilang == -1)
- return; // no such language: leave vectors empty
-
- LangEntry * plang = m_prglang + ilang;
- int cbOffset = lsbf(plang->cbOffsetBIG) - m_cbOffset0;
- Assert(cbOffset % sizeof(FeatSet) == 0);
- byte * pbFeatSet = reinterpret_cast<byte*>(m_prgfset) + cbOffset;
- FeatSet * pfset = reinterpret_cast<FeatSet*>(pbFeatSet);
- for (int ifset = 0; ifset < lsbf(plang->cFeaturesBIG); ifset++)
- {
- vnFeatId.push_back(lsbf(pfset[ifset].featidBIG));
- vnValues.push_back(lsbf(pfset[ifset].valueBIG));
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the code for the language at the given index.
-----------------------------------------------------------------------------------------------*/
-isocode GrLangTable::LanguageCode(size_t ilang)
-{
- isocode lgcodeRet;
- if (ilang > m_clang)
- {
- std::fill_n(lgcodeRet.rgch, 4, '\0');
- return lgcodeRet;
- }
- LangEntry * plang = m_prglang + ilang;
- std::copy(plang->rgchCode, plang->rgchCode + 4, lgcodeRet.rgch);
- return lgcodeRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the index of the language in the list.
-----------------------------------------------------------------------------------------------*/
-int GrLangTable::FindIndex(isocode lgcode)
-{
- if (m_clang == 0)
- return -1;
-#ifdef _DEBUG
- int nPowerOf2 = 1;
- while (nPowerOf2 <= signed(m_clang))
- nPowerOf2 <<= 1;
- nPowerOf2 >>= 1;
- // Now nPowerOf2 is the max power of 2 <= m_clang
- gAssert((1 << m_cLoop) == nPowerOf2); // m_cLoop == log2(nPowerOf2)
- gAssert(m_dilangInit == nPowerOf2);
- gAssert(m_ilangStart == m_clang - m_dilangInit);
-#endif // _DEBUG
-
- int dilangCurr = m_dilangInit;
-
- int ilangCurr = m_ilangStart; // may become < 0
- while (dilangCurr > 0)
- {
- int nTest;
- if (ilangCurr < 0)
- nTest = -1;
- else
- {
- LangEntry * plangCurr = m_prglang + ilangCurr;
- nTest = strcmp(plangCurr->rgchCode, lgcode.rgch);
- }
-
- if (nTest == 0)
- return ilangCurr;
-
- dilangCurr >>= 1; // divide by 2
- if (nTest < 0)
- ilangCurr += dilangCurr;
- else // (nTest > 0)
- ilangCurr -= dilangCurr;
- }
-
- return -1;
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/GrFeatureValues.h b/Build/source/libs/graphite-engine/src/segment/GrFeatureValues.h
deleted file mode 100644
index de9eda0f03f..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrFeatureValues.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrFeatureValues.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
-
-
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_FEATVAL_INCLUDED
-#define GR_FEATVAL_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- A convenient way to group together style and feature information that interacts
- with the rules.
-
- Hungarian: fval
-----------------------------------------------------------------------------------------------*/
-class GrFeatureValues
-{
- friend class GrCharStream;
- friend class GrSlotAbstract;
- friend class GrSlotState;
-
-public:
- // Standard constructor:
- GrFeatureValues()
- {
- m_nStyleIndex = 0;
- std::fill(m_rgnFValues, m_rgnFValues + kMaxFeatures, 0);
- }
-
- // Copy constructor:
- GrFeatureValues(const GrFeatureValues & fval)
- {
- m_nStyleIndex = fval.m_nStyleIndex;
- std::copy(fval.m_rgnFValues, fval.m_rgnFValues + kMaxFeatures, m_rgnFValues);
- }
-
- bool FeatureValue(size_t ifeat)
- {
- return m_rgnFValues[ifeat];
- }
-
- // For transduction logging:
-#ifdef TRACING
- void WriteXductnLog(GrTableManager * ptman, std::ostream &);
-#endif // TRACING
-
-protected:
- int m_nStyleIndex;
- int m_rgnFValues[kMaxFeatures];
-};
-
-} // namespace gr
-
-
-#endif // !GR_FEATVAL_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrGlyphTable.cpp b/Build/source/libs/graphite-engine/src/segment/GrGlyphTable.cpp
deleted file mode 100644
index 8643eae8cb8..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrGlyphTable.cpp
+++ /dev/null
@@ -1,650 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrGlyphTable.cpp
-Responsibility: Sharon Correll
-Last reviewed: 10Aug99, JT, quick look over
-
-Description:
- Implements the GrGlyphTable class and related classes.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Fill in the glyph table from the font stream.
-----------------------------------------------------------------------------------------------*/
-bool GrGlyphTable::ReadFromFont(GrIStream & grstrmGloc, long lGlocStart,
- GrIStream & grstrmGlat, long lGlatStart,
- data16 chwBWAttr, data16 chwJStrAttr, int cJLevels, int cnCompPerLig,
- int fxdSilfVersion)
-{
- // Create the glyph sub-table for the single style.
- GrGlyphSubTable * pgstbl = new GrGlyphSubTable();
-
- // Gloc table--offsets into Glat table
- grstrmGloc.SetPositionInFont(lGlocStart);
-
- // version
- int fxdGlocVersion = GrEngine::ReadVersion(grstrmGloc);
- if (fxdGlocVersion > kGlocVersion)
- return false;
-
- // flags
- short snFlags = grstrmGloc.ReadShortFromFont();
-
- // number of attributes
- unsigned short cAttrs = grstrmGloc.ReadUShortFromFont();
-
- // Create a single sub-table for the single style.
- pgstbl->Initialize(fxdSilfVersion, snFlags, chwBWAttr, chwJStrAttr, data16(chwJStrAttr + cJLevels),
- m_cglf, cAttrs, cnCompPerLig);
-
- SetSubTable(0, pgstbl);
-
- return pgstbl->ReadFromFont(grstrmGloc, m_cglf, grstrmGlat, lGlatStart);
-}
-
-bool GrGlyphSubTable::ReadFromFont(GrIStream & grstrmGloc, int cGlyphs,
- GrIStream & grstrmGlat, long lGlatStart)
-{
- // attribute value offsets--slurp
- if (m_fGlocShort)
- {
- grstrmGloc.ReadBlockFromFont(m_prgibBIGAttrValues, ((cGlyphs + 1) * sizeof(data16)));
- }
- else
- {
- grstrmGloc.ReadBlockFromFont(m_prgibBIGAttrValues, ((cGlyphs + 1) * sizeof(data32)));
- }
-
- // length of buffer needed for glyph attribute values:
- int cbBufLen = GlocLookup(data16(cGlyphs));
-
- // TODO: slurp debugger offsets: 'm_prgibBIGGlyphAttrDebug'
-
- m_pgatbl = new GrGlyphAttrTable();
- m_pgatbl->Initialize(m_fxdSilfVersion, cbBufLen);
-
- // Glat table
- grstrmGlat.SetPositionInFont(lGlatStart);
-
- // version
- int fxdGlatVersion = grstrmGlat.ReadIntFromFont();
- if (fxdGlatVersion > kGlatVersion)
- return false;
-
- // Back up over the version number and include it right in the attribute value entry
- // buffer, since the offsets take it into account.
- grstrmGlat.SetPositionInFont(lGlatStart);
-
- // Slurp the entire block of entries.
- grstrmGlat.ReadBlockFromFont(m_pgatbl->m_prgbBIGEntries, cbBufLen);
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Create an empty glyph table with no glyph attributes.
-----------------------------------------------------------------------------------------------*/
-void GrGlyphTable::CreateEmpty()
-{
- // Create the glyph sub-table for the single style.
- GrGlyphSubTable * pgstbl = new GrGlyphSubTable();
-
- // Create a single sub-table for the single style.
- pgstbl->Initialize(0, 0, 0, 0, 0, m_cglf, 0, 0);
-
- SetSubTable(0, pgstbl);
-
- pgstbl->CreateEmpty();
-}
-
-void GrGlyphSubTable::CreateEmpty()
-{
- m_pgatbl = new GrGlyphAttrTable();
- m_pgatbl->Initialize(0, 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialization.
-----------------------------------------------------------------------------------------------*/
-void GrGlyphSubTable::Initialize(int fxdSilfVersion, utf16 chwFlags,
- data16 chwBWAttr, data16 chwJStrAttr, data16 chwJStrHWAttr,
- int cGlyphs, int cAttrs, int cnCompPerLig)
-{
- m_fxdSilfVersion = fxdSilfVersion;
- m_fHasDebugStrings = HasAttrNames(chwFlags);
- m_nAttrIDLim = cAttrs;
- m_chwBWAttr = chwBWAttr;
- m_chwJStrAttr = chwJStrAttr;
- m_chwJStrHWAttr = chwJStrHWAttr;
- m_fGlocShort = !LongFormat(chwFlags);
-
- if (m_fGlocShort)
- { // item # cGlyphs holds length, which is convenient for dealing with last item
- m_prgibBIGAttrValues = new byte[(cGlyphs + 1) * sizeof(data16)];
- }
- else
- {
- m_prgibBIGAttrValues = new byte[(cGlyphs + 1) * sizeof(data32)];
- }
-
-
- if (m_fHasDebugStrings)
- {
- m_prgibBIGGlyphAttrDebug = new data16[cAttrs + 1];
- }
-
- // Make a cache to hold a list of defined components for each glyph. This is
- // calculated lazily, as needed, so we also include (as the first item) a flag to
- // indicate whether or not it has been calculated; hence the "+1".
- m_cnCompPerLig = cnCompPerLig;
- m_prgnDefinedComponents = new int[(m_cnCompPerLig + 1) * cGlyphs];
- std::fill_n(m_prgnDefinedComponents, (m_cnCompPerLig + 1) * cGlyphs, 0);
-
- // Now the instance is ready to have the locations and the debug strings
- // read from the file.
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the attribute value for the given glyph.
-----------------------------------------------------------------------------------------------*/
-int GrGlyphSubTable::GlyphAttrValue(gid16 chwGlyphID, int nAttrID)
-{
- if (m_nAttrIDLim == 0)
- {
- // No attributes defined (eg, invalid font)
- return 0;
- }
- if (nAttrID >= m_nAttrIDLim || nAttrID >= 0xFF)
- {
- gAssert(false);
- return 0;
- }
- int ibMin = GlocLookup(chwGlyphID); // where this glyph's attrs start
- int ibLim = GlocLookup(chwGlyphID + 1); // where next glyph starts
-
- int nRet = m_pgatbl->GlyphAttr16BitValue(ibMin, ibLim, byte(nAttrID));
- if ((data16)nAttrID == m_chwJStrAttr)
- {
- // For justify.stretch, which can be a 32-bit value, add on the high word.
- unsigned int nRetHW = m_pgatbl->GlyphAttr16BitValue(ibMin, ibLim, byte(m_chwJStrHWAttr));
- nRet = (nRetHW << 16) | nRet;
- }
- return ConvertValueForVersion(nRet, nAttrID);
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert the glyph attribute value from the version of the font table to what is
- expected by the engine.
-----------------------------------------------------------------------------------------------*/
-int GrGlyphSubTable::ConvertValueForVersion(int nValue, int nAttrID)
-{
- return ConvertValueForVersion(nValue, nAttrID, (int)m_chwBWAttr, m_fxdSilfVersion);
-}
-
-int GrGlyphSubTable::ConvertValueForVersion(int nValue, int nAttrID, int nBWAttr, int fxdVersion)
-{
- if ((nBWAttr >= 0 && nAttrID == (int)nBWAttr) ||
- (nBWAttr == -1 && nAttrID == (int)kslatBreak))
- {
- if (fxdVersion < 0x00020000)
- {
- //switch (nValue)
- //{
- //case klbv1WordBreak: return klbWordBreak;
- //case klbv1HyphenBreak: return klbHyphenBreak;
- //case klbv1LetterBreak: return klbLetterBreak;
- //case klbv1ClipBreak: return klbClipBreak;
- //default:
- // break;
- //}
- //switch (nValue * -1)
- //{
- //case klbv1WordBreak: return (klbWordBreak * -1);
- //case klbv1HyphenBreak: return (klbHyphenBreak * -1);
- //case klbv1LetterBreak: return (klbLetterBreak * -1);
- //case klbv1ClipBreak: return (klbClipBreak * -1);
- //default:
- // break;
- //}
-
- // Breakweight values in version 2 are 10 times what they were in version 1.
- if (abs(nValue) <= 7)
- return nValue * 10;
- }
- }
- return nValue;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the attribute value a glyph. Loop through the attribute runs, looking
- for the one containing the given attribute. Assume the value is 0 if not found.
-
- @param ibMin - byte offset of first run for the glyph of interest
- @param ibLim - byte offset of first run for the following glyph
- @param bAttrID - attribute to find
-----------------------------------------------------------------------------------------------*/
-int GrGlyphAttrTable::GlyphAttr16BitValue(int ibMin, int ibLim, byte bAttrID)
-{
- GrGlyphAttrRun gatrun;
- byte * pbBIGEnt = m_prgbBIGEntries + ibMin;
-
- while (pbBIGEnt < m_prgbBIGEntries + ibLim)
- {
- // Suck the run of attribute values into the instance, so we can see
- // what's there.
- gatrun.CopyFrom(pbBIGEnt);
-
- if (bAttrID < gatrun.m_bMinAttrID)
- // Attribute not found--assume value is 0.
- return 0;
- else if (gatrun.m_bMinAttrID + gatrun.m_cAttrs > bAttrID)
- {
- // Found the value in this run.
- data16 chw = lsbf(gatrun.m_rgchwBIGValues[bAttrID - gatrun.m_bMinAttrID]);
- if ((chw & 0x8000) == 0)
- return (int)chw;
- else
- return 0xFFFF0000 | chw; // sign extension
- }
- else
- // Go to next run.
- pbBIGEnt += gatrun.ByteCount();
- }
-
- // Attribute not found--assume value is 0;
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Given a point on the glyph, determine which component (if any) the point is in, and return
- its index relative to the components that are defined for this glyph; ie, the index within
- the compRef array.
- Return -1 if the click with not inside any component, or if there are no components
- defined for this glyph.
- CURRENTLY NOT USED - if ever used, need to incorporate floating point
-----------------------------------------------------------------------------------------------*/
-int GrGlyphSubTable::ComponentContainingPoint(gid16 chwGlyphID, int x, int y)
-{
- int i = CalculateDefinedComponents(chwGlyphID);
- for (int inComp = 0; inComp < m_cnCompPerLig; inComp++)
- {
- // The m_pnComponents list holds a list of the component attributes that are defined
- // for this glyph, padded with -1's.
- int nCompID = m_prgnDefinedComponents[i + inComp];
- if (nCompID == -1)
- break; // hit the end of the list
-
- // The value of the component attribute is actually the attribute ID for the
- // first of the component box fields--the top. There should a contiguous group of
- // four fields: top, bottom, left, right.
- int nFieldIDMin = GlyphAttrValue(chwGlyphID, nCompID);
- gAssert(nFieldIDMin != 0);
- int nTop = GlyphAttrValue(chwGlyphID, nFieldIDMin);
- int nBottom = GlyphAttrValue(chwGlyphID, nFieldIDMin + 1);
- int nLeft = GlyphAttrValue(chwGlyphID, nFieldIDMin + 2);
- int nRight = GlyphAttrValue(chwGlyphID, nFieldIDMin + 3);
-
- if (nLeft <= x && x < nRight &&
- nBottom <= y && y < nTop)
- {
- return inComp;
- }
- }
- return -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- Fill in the box with the source-device coordinates corresponding to the given component.
- The rectangle is relative to the top-left of the glyph.
- Return false if the component is not defined.
-
- @param xysEmSquare - of the font, in logical units
- @param chwGlyphID - the glyph of interest
- @param icomp - the component of interest (eg, for the "oe" ligature,
- the index for component.o would be 0,
- and the index for component.e would be 1);
- these is as defined by the glyph, not as used in the rules
- @param mFontEmUnits - the number of em-units in the font, for scaling
- @param dysFontAscent - ascent of the font, for adjusting coordinate systems
- @param pxsLeft, pxsRight, pysTop, pysBottom
- - return values, in source device coordinates
- @param fTopOrigin - convert values to a coordinate system where the origin is the
- top of the line, not the baseline
-----------------------------------------------------------------------------------------------*/
-bool GrGlyphSubTable::ComponentBoxLogUnits(float xysEmSquare,
- gid16 chwGlyphID, int icomp, int mFontEmUnits, float dysFontAscent,
- float * pxsLeft, float * pysTop, float * pxsRight, float * pysBottom,
- bool fTopOrigin)
-{
- int i = CalculateDefinedComponents(chwGlyphID);
-
- // The m_pnComponents list holds a list of the component attributes that are defined
- // for this glyph, padded with -1's.
- int nCompID = m_prgnDefinedComponents[i + icomp];
- if (nCompID == -1)
- {
- // Ooops, the component is undefined for this glyph.
- *pxsLeft = 0;
- *pxsRight = 0;
- *pysTop = 0;
- *pysBottom = 0;
- return false;
- }
-
- // The value of the component attribute is actually the attribute ID for the
- // first of the component box fields--the top. There should a contiguous group of
- // four fields: top, bottom, left, right.
- int nFieldIDMin = GlyphAttrValue(chwGlyphID, nCompID);
- if (nFieldIDMin == 0)
- {
- // Component inadequately defined. This can happen when we defined components
- // for a glyph and then substituted another glyph for it.
- *pxsLeft = 0;
- *pxsRight = 0;
- *pysTop = 0;
- *pysBottom = 0;
- return false;
- }
- int mTop = GlyphAttrValue(chwGlyphID, nFieldIDMin);
- int mBottom = GlyphAttrValue(chwGlyphID, nFieldIDMin + 1);
- int mLeft = GlyphAttrValue(chwGlyphID, nFieldIDMin + 2);
- int mRight = GlyphAttrValue(chwGlyphID, nFieldIDMin + 3);
-
- ////int xysFontEmUnits;
- ////// ysHeight should correspond to the pixels in the font's em square
- ////GrResult res = pgg->GetFontEmSquare(&xysFontEmUnits);
- ////if (ResultFailed(res))
- //// return false;
-
- *pxsLeft = GrEngine::GrIFIMulDiv(mLeft, xysEmSquare, mFontEmUnits);
- *pxsRight = GrEngine::GrIFIMulDiv(mRight, xysEmSquare, mFontEmUnits);
- *pysTop = GrEngine::GrIFIMulDiv(mTop, xysEmSquare, mFontEmUnits);
- *pysBottom = GrEngine::GrIFIMulDiv(mBottom, xysEmSquare, mFontEmUnits);
-
- if (*pxsLeft > *pxsRight)
- {
- float xsTmp = *pxsLeft;
- *pxsLeft = *pxsRight;
- *pxsRight = xsTmp;
- }
- if (*pysTop < *pysBottom)
- {
- float ysTmp = *pysTop;
- *pysTop = *pysBottom;
- *pysBottom = ysTmp;
- }
-
- if (fTopOrigin)
- {
- // Currently top and bottom coordinates are such that 0 is the baseline and positive is
- // upwards, while for the box we want to return, 0 is the top of the glyph and positive
- // is downwards. So switch systems.
- *pysTop = (dysFontAscent - *pysTop);
- *pysBottom = (dysFontAscent - *pysBottom);
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Calculate the list of defined components for the given glyph, if any.
- Return the index to the first relevant item in the array.
- Private.
- TODO: With the current implementation that stores the glyph ids in each slot, this
- mechanism is redundant and obsolete, and should be removed.
-----------------------------------------------------------------------------------------------*/
-int GrGlyphSubTable::CalculateDefinedComponents(gid16 chwGlyphID)
-{
- // The first item is a flag indicating whether the list has been calculated.
- int iFlag = chwGlyphID * (m_cnCompPerLig + 1); // index of has-been-calculated flag
- int iMin = iFlag + 1; // first actual value; +1 in order to skip the flag
- if (m_prgnDefinedComponents[iFlag] == 0)
- {
- int iTmp = iMin;
- for (int nCompID = 0; nCompID < m_cComponents; nCompID++)
- {
- if (ComponentIsDefined(chwGlyphID, nCompID))
- m_prgnDefinedComponents[iTmp++] = nCompID;
- if (iTmp - iMin >= m_cnCompPerLig)
- break; // ignore any components beyond the maximum allowed
- }
- // Fill in the rest of the list with -1.
- for( ; iTmp < iMin + m_cnCompPerLig; iTmp++)
- m_prgnDefinedComponents[iTmp] = -1;
-
- m_prgnDefinedComponents[iFlag] = 1; // has been calculated
- }
- return iMin;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the given attr ID, which is a component definition attribute, indicates
- that that component is defined for the given glyph.
-
- @param chwGlyphID - the glyph of interest
- @param nAttrID - the attribute of interest, assumed to be a component glyph
- attribute (eg. component.e.top)
-----------------------------------------------------------------------------------------------*/
-bool GrGlyphSubTable::ComponentIsDefined(gid16 chwGlyphID, int nAttrID)
-{
- gAssert(nAttrID < m_cComponents);
- if (nAttrID >= m_cComponents)
- return false;
-
- return (GlyphAttrValue(chwGlyphID, nAttrID) != 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the index of the given component as defined for the given glyph ID. that is,
- convert the global ID for the component to the one within this glyph. Return -1
- if the component is not defined for the given glyph.
- For instance, given the glyph ID "oe" (the oe ligature) and the attr ID for component.o,
- the result would be 0; for component.e the result would be 1.
-----------------------------------------------------------------------------------------------*/
-int GrGlyphSubTable::ComponentIndexForGlyph(gid16 chwGlyphID, int nCompID)
-{
- int i = CalculateDefinedComponents(chwGlyphID);
-
- for (int iLp = 0; iLp < m_cnCompPerLig; iLp++)
- {
- if (m_prgnDefinedComponents[i + iLp] == nCompID)
- return iLp;
- }
- return -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the ID of the nth defined component attribute for the given glyph.
-----------------------------------------------------------------------------------------------*/
-//int GrGlyphSubTable::NthComponentID(gid16 chwGlyphID, int n)
-//{
-// int i = CalculateDefinedComponents(chwGlyphID);
-// return m_pnComponents[i + 1 + n];
-//}
-
-
-//:>********************************************************************************************
-//:> For test procedures
-//:>********************************************************************************************
-
-//:Ignore
-#ifdef OLD_TEST_STUFF
-
-void GrGlyphTable::SetUpTestData()
-{
- SetNumberOfGlyphs(5);
- SetNumberOfStyles(1);
-
- GrGlyphSubTable * pgstbl = new GrGlyphSubTable();
- gAssert(pgstbl);
-
- pgstbl->Initialize(1, 0, 5, 10, 4);
- SetSubTable(0, pgstbl);
-
- pgstbl->SetUpTestData();
-}
-
-/***********************************************************************************************
- TODO: This method is BROKEN because m_prgibBIGAttrValues has been changed. It is no
- longer a utf16 *. The Gloc table can contain 16-bit or 32-bit entries and must be
- accessed accordingly.
-***********************************************************************************************/
-void GrGlyphSubTable::SetUpTestData()
-{
- m_pgatbl = new GrGlyphAttrTable();
- m_pgatbl->Initialize(0, 48);
-
- m_prgibBIGAttrValues[0] = byte(msbf(data16(0)));
- m_prgibBIGAttrValues[1] = byte(msbf(data16(6))));
- m_prgibBIGAttrValues[2] = byte(msbf(data16(20)));
- m_prgibBIGAttrValues[3] = byte(msbf(data16(20)));
- m_prgibBIGAttrValues[4] = byte(msbf(data16(40)));
- m_prgibBIGAttrValues[5] = byte(msbf(data16(48)));
-
- m_pgatbl->SetUpTestData();
-}
-
-void GrGlyphAttrTable::SetUpTestData()
-{
- // Glyph 0 (1 run; offset = 0):
- // 1 = 11 = 0x0B
- // 2 = 22 = 0x16
- // 0102 000B 0016
- //
- // Glyph 1 (2 runs; offset = 3*2 = 6):
- // 0 = 5
- // 1 = 6
- // 2 = 7
- // 8 = 8
- // 9 = 9
- // 0003 0005 0006 0007
- // 0802 0008 0009
- //
- // Glyph 2 (0 runs; offset = 6 + 7*2 = 20):
- // all values = 0
- //
- // Glyph 3 (5 runs; offset = 20):
- // 1 = 111 = 0x006F
- // 3 = 333 = 0x00DE
- // 5 = 555 = 0x022B
- // 7 = 777 = 0x0309
- // 9 = 999 = 0x03E7
- // 0101 006F
- // 0301 00DE
- // 0501 022B
- // 0701 0309
- // 0901 03E7
- //
- // Glyph 4 (1 run; offset = 20 + 10*2 = 40):
- // 5 = 4
- // 6 = 4
- // 7 = 4
- // 0503 0004 0004 0004
- //
- // Glyph 5 (offset = 40 + 4*2 = 48)
-
- byte * pbBIG = m_prgbBIGEntries;
-
- GrGlyphAttrRun gatrun;
-
- // Glyph 0
- gatrun.m_bMinAttrID = 1;
- gatrun.m_cAttrs = 2;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(11));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(22));
- memcpy(pbBIG, &gatrun, 6);
- pbBIG += 6;
-
- // Glyph 1
- gatrun.m_bMinAttrID = 0;
- gatrun.m_cAttrs = 3;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(5));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(6));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(7));
- memcpy(pbBIG, &gatrun, 8);
- pbBIG += 8;
- gatrun.m_bMinAttrID = 8;
- gatrun.m_cAttrs = 2;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(8));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(9));
- memcpy(pbBIG, &gatrun, 6);
- pbBIG += 6;
-
- // Glyph 2: no data
-
- // Glyph 3
- gatrun.m_bMinAttrID = 1;
- gatrun.m_cAttrs = 1;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(111));
- memcpy(pbBIG, &gatrun, 4);
- pbBIG += 4;
- gatrun.m_bMinAttrID = 3;
- gatrun.m_cAttrs = 1;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(333));
- memcpy(pbBIG, &gatrun, 4);
- pbBIG += 4;
- gatrun.m_bMinAttrID = 5;
- gatrun.m_cAttrs = 1;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(555));
- memcpy(pbBIG, &gatrun, 4);
- pbBIG += 4;
- gatrun.m_bMinAttrID = 7;
- gatrun.m_cAttrs = 1;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(777));
- memcpy(pbBIG, &gatrun, 4);
- pbBIG += 4;
- gatrun.m_bMinAttrID = 9;
- gatrun.m_cAttrs = 1;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(999));
- memcpy(pbBIG, &gatrun, 4);
- pbBIG += 4;
-
- // Glyph 4
- gatrun.m_bMinAttrID = 5;
- gatrun.m_cAttrs = 3;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(4));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(4));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(4));
- memcpy(pbBIG, &gatrun, 8);
- pbBIG += 8;
-
- gAssert(pbBIG == m_prgbBIGEntries + 48);
-}
-
-#endif // OLD_TEST_STUFF
-
-} // namespace gr
-
-//:End Ignore
diff --git a/Build/source/libs/graphite-engine/src/segment/GrGlyphTable.h b/Build/source/libs/graphite-engine/src/segment/GrGlyphTable.h
deleted file mode 100644
index bec0e518dee..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrGlyphTable.h
+++ /dev/null
@@ -1,429 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrGlyphTable.h
-Responsibility: Sharon Correll
-Last reviewed: 10Aug99, JT, quick look over
-
-Description:
- The GrGlyphTable and related classes that store the values of glyph attributes.
-
- For each glyph in a TrueType font, Graphite has a list of glyph attributes (which
- are defined in the GDL script file). Since most of the values will be zero, we save space
- by only storing the non-zero values.
-
- Eventually it may be possible to have more than one TrueType font compiled into a single
- glyph table, hence the need for multiple sub-tables. For now we assume that there is only
- one font file and only one sub-table.
-
- Note that BIG in a variable name means that the data is in big-endian format, or is a range
- of bytes that must be interpreted as a run of wide chars or ints in big-endian format.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:Ignore
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_GTABLE_INCLUDED
-#define GR_GTABLE_INCLUDED
-//:End Ignore
-
-namespace gr
-{
-
-class Font;
-
-/*----------------------------------------------------------------------------------------------
- A run of non-zero attribute values for a single glyph, where the attribute IDs
- are contiguous.
-
- NOTE: it is assumed that the format of this class matches the byte order of the data as it
- is read directly from the TTF/ECF file--that is, it is big-endian.
-
- Hungarian: gatrun
-----------------------------------------------------------------------------------------------*/
-
-class GrGlyphAttrRun
-{
- friend class GrGlyphTable;
- friend class GrGlyphSubTable;
- friend class GrGlyphAttrTable;
-
- enum {
- kMaxAttrsPerRun = 255
- };
-
- /*------------------------------------------------------------------------------------------
- Copy the raw memory (starting at the given byte) into the instance. This method must
- reflect the format of the "Glat_entry" as it is stored in the file and slurped into
- memory.
- ------------------------------------------------------------------------------------------*/
- void CopyFrom(byte * pbBIGEnt)
- {
- m_bMinAttrID = *pbBIGEnt;
- m_cAttrs = *(pbBIGEnt + 1);
- if (m_cAttrs >= kMaxAttrsPerRun)
- {
- gAssert(false);
- m_cAttrs = kMaxAttrsPerRun;
- }
- #ifdef _DEBUG
- // Probably not strictly necessary to zero the array, but convenient for debugging.
- // Removed from release build for optimization
- std::fill(m_rgchwBIGValues, m_rgchwBIGValues + kMaxAttrsPerRun, 0);
- #endif
- // this is mixing types of data16 and byte pointers!
- const data16 * prgchw = reinterpret_cast<const data16*>(pbBIGEnt + 2);
- std::copy(prgchw, prgchw + m_cAttrs, m_rgchwBIGValues);
- }
-
- int ByteCount()
- {
- return (2 + (m_cAttrs * isizeof(data16)));
- }
-
-protected:
- byte m_bMinAttrID; // ID of first attribute in the run
- byte m_cAttrs; // number of attributes in the run
- data16 m_rgchwBIGValues[kMaxAttrsPerRun];
-};
-
-/*----------------------------------------------------------------------------------------------
- Contains runs of attribute values for all the glyphs in the font; corresponds to
- the "Glat" table in the font.
-
- Hungarian: gatbl
-----------------------------------------------------------------------------------------------*/
-
-class GrGlyphAttrTable
-{
- friend class GrGlyphTable;
- friend class GrGlyphSubTable;
- friend class FontMemoryUsage;
-
-protected:
- // Constructor:
- GrGlyphAttrTable()
- {
- m_prgbBIGEntries = NULL;
- }
-
- // Destructor:
- ~GrGlyphAttrTable()
- {
- delete[] m_prgbBIGEntries;
- }
-
- // Initialization:
- void Initialize(int fxdSilfVersion, int cbBufLen)
- {
- m_fxdSilfVersion = fxdSilfVersion;
- m_cbEntryBufLen = cbBufLen;
- m_prgbBIGEntries = new byte[cbBufLen];
- // Now the instance is ready to have all the glyph attr entries slurped into
- // the byte array from the file.
- }
-
- int GlyphAttr16BitValue(int ibMin, int ibLim, byte bAttrID);
-
-protected:
- int m_fxdSilfVersion; // version number of the Silf table, which is used
- // to interpret the attribute values
-
- // Block of variable-length glyph attribute runs, matching the format of
- // GrGlyphAttrRun. We don't store instances of that class here because they
- // are variable length, and it would be too slow to read them individually from the
- // font. Instead, we set up a single instance in the method that accesses the values;
- // having this instance will help debugging. Eventually we may want to do without it,
- // if it would help efficiency.
- int m_cbEntryBufLen; // needed only for memory instrumentation
- byte * m_prgbBIGEntries;
-
-//:Ignore
-#ifdef OLD_TEST_STUFF
-public:
- // For test procedures:
- void SetUpTestData();
- void SetUpLigatureTest();
- void SetUpLigature2Test();
-#endif // OLD_TEST_STUFF
-
-//:End Ignore
-
-};
-
-/*----------------------------------------------------------------------------------------------
- One glyph table per font (style) file; corresponds to the "Gloc" table in the font.
- Currently there is only considered to be one style per file, so there is only one of
- these. It holds the (non-zero) glyph attribute values for every glyph in the font.
-
- Hungarian: gstbl
-
- Review: Eventually we may need to make a subclass that uses 32-bit values for the offsets,
- or just use a separate array pointer in this class. Which would be preferable?
-----------------------------------------------------------------------------------------------*/
-
-class GrGlyphSubTable
-{
- friend class GrGlyphTable;
- friend class FontMemoryUsage;
-
-public:
- // Constructor:
- GrGlyphSubTable() :
- m_pgatbl(NULL),
- m_prgibBIGAttrValues(NULL),
- m_prgibBIGGlyphAttrDebug(NULL),
- m_prgnDefinedComponents(NULL)
- {
- }
- // Destructor:
- ~GrGlyphSubTable()
- {
- delete m_pgatbl;
- delete[] m_prgibBIGAttrValues;
- if (m_fHasDebugStrings)
- delete[] m_prgibBIGGlyphAttrDebug;
- delete[] m_prgnDefinedComponents;
- }
-
- // Initialization:
- bool ReadFromFont(GrIStream & gloc_strm, int cGlyphs,
- GrIStream & glat_strm, long lGlatStart);
- void Initialize(int fxdSilfVersion, data16 chwFlags,
- data16 chwBWAttr, data16 chwJStrAttr, data16 chwJStrHWAttr,
- int cGlyphs, int cAttrs, int cnCompPerLig);
-
- void CreateEmpty();
-
- void SetNumberOfComponents(int c)
- {
- m_cComponents = c;
- }
-
- // General:
- int NumberOfGlyphAttrs() { return m_nAttrIDLim; } // 0..(m_nAttrIDLim-1)
-
- int GlyphAttrValue(gid16 chwGlyphID, int nAttrID);
-
- // Ligatures:
- int ComponentContainingPoint(gid16 chwGlyphID, int x, int y);
- bool ComponentBoxLogUnits(float xysEmSquare, gid16 chwGlyphID, int icomp,
- int mFontEmUnits, float dysAscent,
- float * pxsLeft, float * pysTop, float * pxsRight, float * pysBottom,
- bool fTopOrigin = true);
-protected:
- int CalculateDefinedComponents(gid16 chwGlyphID);
- bool ComponentIsDefined(gid16 chwGlyphID, int nAttrID);
- int ComponentIndexForGlyph(gid16 chwGlyphID, int nCompID);
-// int NthComponentID(gid16 chwGlyphID, int n);
- int ConvertValueForVersion(int nRet, int nAttrID);
-
-public:
- static int ConvertValueForVersion(int nRet, int nAttrID, int nBWAttr, int fxdVersion);
-
- // Flags:
- bool LongFormat(data16 chwFlags) // 32-bit values?
- {
- return ((chwFlags & 0x01) == 0x01); // bit 0
- }
- bool HasAttrNames(data16 chwFlags)
- {
- return ((chwFlags & 0x02) == 0x02); // bit 1
- }
- int GlocLookup(data16 chwGlyphId)
- {
- if (m_fGlocShort)
- {
- unsigned short su = ((unsigned short *)m_prgibBIGAttrValues)[chwGlyphId];
- return lsbf(su);
- }
- else
- { unsigned int u = ((unsigned int *)m_prgibBIGAttrValues)[chwGlyphId];
- return lsbf((int)u);
- }
- }
-
-protected:
- int m_fxdSilfVersion; // version number of the Silf table, which is used
- // to interpret the attribute values
- bool m_fHasDebugStrings; // are debugging strings loaded into memory?
-
- int m_nAttrIDLim; // number of glyph attributes
- int m_cComponents; // number of initial glyph attributes that
- // represent ligature components
- int m_cnCompPerLig;
-
- GrGlyphAttrTable * m_pgatbl;
- byte * m_prgibBIGAttrValues; // byte offsets for glyph attr values - BIG endian
- bool m_fGlocShort; // flag for Gloc table format
- data16 * m_prgibBIGGlyphAttrDebug; // byte offsets for glyph attr debug strings - BIG endian
-
- data16 m_chwBWAttr; // breakweight attr ID; needed for converting
- // between versions
-
- // Attr IDs for justify.0.stretch and justify.0.stretchHW; these must always be looked
- // up in tandem.
- data16 m_chwJStrAttr;
- data16 m_chwJStrHWAttr;
-
- int * m_prgnDefinedComponents; // for each glyph, cache list of component attributes that
- // are defined
-
-//:Ignore
-#ifdef OLD_TEST_STUFF
-public:
- // For test procedures:
- void SetUpTestData();
- void SetUpLigatureTest();
- void SetUpLigature2Test();
-#endif // OLD_TEST_STUFF
-
-//:End Ignore
-};
-
-/*----------------------------------------------------------------------------------------------
- Holds all the information about glyph attributes.
-
- Hungarian: gtbl
-----------------------------------------------------------------------------------------------*/
-
-class GrGlyphTable
-{
- friend class GrGlyphSubTable;
- friend class FontMemoryUsage;
-
-public:
- // Constructor:
- GrGlyphTable()
- {
- m_cglf = 0;
- m_cComponents = 0;
- m_cgstbl = 0;
- m_vpgstbl.clear();
- }
-
- // Destructor:
- ~GrGlyphTable()
- {
- for (int i = 0; i < m_cgstbl; ++i)
- delete m_vpgstbl[i];
- }
-
- bool ReadFromFont(GrIStream & gloc_strm, long lGlocStart,
- GrIStream & glat_strm, long lGlatStart,
- data16 chwBWAttr, data16 chwJStrAttr, int cJLevels, int cnCompPerLig,
- int fxdSilfVersion);
-
- void CreateEmpty();
-
- // Setters:
- void SetNumberOfGlyphs(int c)
- {
- m_cglf = c;
- }
- void SetNumberOfStyles(int c)
- {
- m_cgstbl = c;
- m_vpgstbl.resize(c);
- }
- void SetNumberOfComponents(int c)
- {
- m_cComponents = c;
- for (unsigned int ipgstbl = 0; ipgstbl < m_vpgstbl.size(); ipgstbl++)
- m_vpgstbl[ipgstbl]->SetNumberOfComponents(c);
- }
- void SetSubTable(int i, GrGlyphSubTable * pgstbl)
- {
- if (signed(m_vpgstbl.size()) <= i)
- {
- gAssert(false);
- m_vpgstbl.resize(i+1);
- }
- m_vpgstbl[i] = pgstbl;
- m_vpgstbl[i]->SetNumberOfComponents(m_cComponents);
- }
-
- // Getters:
- int NumberOfGlyphs() { return m_cglf; }
- int NumberOfStyles() { return m_cgstbl; }
-
- int NumberOfGlyphAttrs()
- {
- // All of the sub-tables should have the same number of glyph attributes,
- // so just ask the first.
- return m_vpgstbl[0]->NumberOfGlyphAttrs();
- }
-
- int GlyphAttrValue(gid16 chwGlyphID, int nAttrID)
- {
- gAssert(m_cgstbl == 1);
- return m_vpgstbl[0]->GlyphAttrValue(chwGlyphID, nAttrID);
- }
- // Eventually:
- //int GlyphAttrValue(gid16 chwGlyphID, int nAttrID, int nStyleIndex)
- //{
- // return m_vpgstbl[nStyleIndex]->GlyphAttrValue(chwGlyphID, nAttrID);
- //}
-
- int ComponentContainingPoint(gid16 chwGlyphID, int x, int y)
- {
- gAssert(m_cgstbl == 1);
- return m_vpgstbl[0]->ComponentContainingPoint(chwGlyphID, x, y);
- }
- // Eventually:
- //int ComponentContainingPoint(gid16 chwGlyphID, int nStyleIndex, int x, int y)
- //{
- // gAssert(m_cgstbl == 1);
- // return m_vpgstbl[nStyleIndex]->ComponentContainingPoint(chwGlyphID, nAttrID);
- //}
-
- bool ComponentBoxLogUnits(float xysEmSquare, gid16 chwGlyphID, int icomp,
- int mFontEmUnits, float dysAscent,
- float * pxsLeft, float * pysTop, float * pxsRight, float * pysBottom,
- bool fTopOrigin = true)
- {
- gAssert(m_cgstbl == 1);
- return m_vpgstbl[0]->ComponentBoxLogUnits(xysEmSquare,
- chwGlyphID, icomp, mFontEmUnits, dysAscent,
- pxsLeft, pysTop, pxsRight, pysBottom,
- fTopOrigin);
- }
-
- int ComponentIndexForGlyph(gid16 chwGlyphID, int nCompID)
- {
- gAssert(m_cgstbl == 1);
- return m_vpgstbl[0]->ComponentIndexForGlyph(chwGlyphID, nCompID);
- }
-
- bool IsEmpty()
- {
- return (m_cglf == 0);
- }
-
-protected:
- int m_cglf; // number of glyphs
- int m_cComponents; // number of defined components
- int m_cgstbl; // number of sub-tables, corresponding to font files;
- // for now there is only one
-
- std::vector<GrGlyphSubTable *> m_vpgstbl;
-
-//:Ignore
-#ifdef OLD_TEST_STUFF
-public:
- // For test procedures:
- void SetUpTestData();
- void SetUpLigatureTest();
- void SetUpLigature2Test();
-#endif // OLD_TEST_STUFF
-//:End Ignore
-
-};
-
-} // namespace gr
-
-#endif // !GR_GTABLE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrPass.cpp b/Build/source/libs/graphite-engine/src/segment/GrPass.cpp
deleted file mode 100644
index 26eb3a3deb6..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrPass.cpp
+++ /dev/null
@@ -1,1995 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrPass.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements the GrPass class and subclasses.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-/*----------------------------------------------------------------------------------------------
- Constructors and initializers
-----------------------------------------------------------------------------------------------*/
-GrPass::GrPass(int i)
- : m_ipass(i),
- m_fxdVersion(0),
- m_nMaxRuleContext(0),
- m_pfsm(NULL),
- m_nMaxRuleLoop(0),
- m_nMaxBackup(0),
- m_crul(0),
- m_prgchwRuleSortKeys(NULL),
- m_prgcritRulePreModContext(NULL),
- m_cbPassConstraint(0),
- m_prgibConstraintStart(NULL),
- m_prgibActionStart(NULL),
- m_prgbPConstraintBlock(NULL),
- m_prgbConstraintBlock(NULL),
- m_prgbActionBlock(NULL),
- m_cbConstraints(0),
- m_cbActions(0),
- m_prgibConstraintDebug(NULL),
- m_prgibRuleDebug(NULL),
- m_fCheckRules(false),
- m_prgfRuleOkay(NULL),
- m_vnStack(128),
- m_pzpst(NULL)
-{
-}
-
-void PassState::InitForNewSegment(int ipass, int nMaxChunk)
-{
- m_ipass = ipass;
- m_nRulesSinceAdvance = 0;
- m_nMaxChunk = nMaxChunk;
- m_cslotSkipToResync = 0;
- m_fDidResyncSkip = false;
- InitializeLogInfo();
-}
-
-void PassState::InitializeLogInfo()
-{
- m_crulrec = 0;
- std::fill_n(m_rgcslotDeletions, 128, 0);
- std::fill_n(m_rgfInsertion, 128, false);
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructors
-----------------------------------------------------------------------------------------------*/
-GrPass::~GrPass()
-{
- delete m_pfsm;
-
- delete[] m_prgchwRuleSortKeys;
-
- delete[] m_prgcritRulePreModContext;
-
- delete[] m_prgibConstraintStart;
- delete[] m_prgibActionStart;
-
- delete[] m_prgbPConstraintBlock;
- delete[] m_prgbConstraintBlock;
- delete[] m_prgbActionBlock;
-
- delete[] m_prgfRuleOkay;
-
- delete[] m_prgibConstraintDebug;
- delete[] m_prgibRuleDebug;
-}
-
-/*----------------------------------------------------------------------------------------------
- Fill in the pass by reading from the font stream.
-----------------------------------------------------------------------------------------------*/
-bool GrPass::ReadFromFont(GrIStream & grstrm, int fxdSilfVersion, int fxdRuleVersion,
- int nOffset)
-{
- long lPassInfoStart;
- grstrm.GetPositionInFont(&lPassInfoStart);
-
- m_fxdVersion = fxdSilfVersion;
-
- m_fCheckRules = (fxdRuleVersion > kRuleVersion);
-
-// Assert(nOffset == lPassInfoStart);
- if (lPassInfoStart != nOffset)
- {
- grstrm.SetPositionInFont(nOffset);
- }
-
- // flags - ignore for now
- //byte bTmp = grstrm.ReadByteFromFont();
- grstrm.ReadByteFromFont();
-
- // MaxRuleLoop
- m_nMaxRuleLoop = grstrm.ReadByteFromFont();
-
- // max rule context
- m_nMaxRuleContext = grstrm.ReadByteFromFont();
-
- // MaxBackup
- m_nMaxBackup = grstrm.ReadByteFromFont();
-
- // number of rules
- m_crul = grstrm.ReadShortFromFont();
- // TODO: add a sanity check for the number of rules.
-
- // offset to pass constraint code, relative to start of subtable
- int nPConstraintOffset = 0;
- long lFsmPos = -1;
- if (fxdSilfVersion >= 0x00020000)
- {
- if (fxdSilfVersion >= 0x00030000)
- lFsmPos = grstrm.ReadUShortFromFont() + nOffset; // offset to row info
- else
- grstrm.ReadShortFromFont(); // pad bytes
- nPConstraintOffset = grstrm.ReadIntFromFont();
- }
- // offset to rule constraint code, relative to start of subtable
- //int nConstraintOffset = grstrm.ReadIntFromFont();
- grstrm.ReadIntFromFont();
- // offset to action code, relative to start of subtable
- //int nActionOffset = grstrm.ReadIntFromFont();
- grstrm.ReadIntFromFont();
- // offset to debug strings; 0 if stripped
- //int nDebugOffset = grstrm.ReadIntFromFont();
- grstrm.ReadIntFromFont();
-
- // Jump to beginning of FSM, if we have this information.
- if (fxdSilfVersion >= 0x00030000)
- grstrm.SetPositionInFont(lFsmPos);
- else
- // Otherwise assume that's where we are!
- Assert(lFsmPos == -1);
-
- m_pfsm = new GrFSM();
-
- m_pfsm->ReadFromFont(grstrm, fxdSilfVersion);
-
- // rule sort keys
- m_prgchwRuleSortKeys = new data16[m_crul];
- data16 * pchw = m_prgchwRuleSortKeys;
- int irul;
- for (irul = 0; irul < m_crul; irul++, pchw++)
- {
- *pchw = grstrm.ReadUShortFromFont();
- }
-
- // rule pre-mod-context item counts
- m_prgcritRulePreModContext = new byte[m_crul];
- byte * pb = m_prgcritRulePreModContext;
- for (irul = 0; irul < m_crul; irul++, pb++)
- {
- *pb = grstrm.ReadByteFromFont();
- }
-
- // constraint offset for pass-level constraints
- if (fxdSilfVersion >= 0x00020000)
- {
- // reserved - pad byte
- grstrm.ReadByteFromFont();
- // Note: pass constraints have not been fully implemented.
- m_cbPassConstraint = grstrm.ReadUShortFromFont();
- }
- else
- m_cbPassConstraint = 0;
-
- // constraint and action offsets for rules
- m_prgibConstraintStart = new data16[m_crul + 1];
- pchw = m_prgibConstraintStart;
- for (irul = 0; irul <= m_crul; irul++, pchw++)
- {
- *pchw = grstrm.ReadUShortFromFont();
- }
-
- m_prgibActionStart = new data16[m_crul + 1];
- pchw = m_prgibActionStart;
- for (irul = 0; irul <= m_crul; irul++, pchw++)
- {
- *pchw = grstrm.ReadUShortFromFont();
- }
-
- // FSM state table
- m_pfsm->ReadStateTableFromFont(grstrm, fxdSilfVersion);
-
- if (fxdSilfVersion >= 0x00020000)
- // reserved - pad byte
- grstrm.ReadByteFromFont();
-
- // Constraint and action blocks
- int cb = m_cbPassConstraint;
- m_prgbPConstraintBlock = new byte[cb];
- grstrm.ReadBlockFromFont(m_prgbPConstraintBlock, cb);
- m_cbConstraints = cb;
-
- cb = m_prgibConstraintStart[m_crul];
- m_prgbConstraintBlock = new byte[cb];
- grstrm.ReadBlockFromFont(m_prgbConstraintBlock, cb);
- m_cbConstraints += cb;
-
- cb = m_prgibActionStart[m_crul];
- m_prgbActionBlock = new byte[cb];
- grstrm.ReadBlockFromFont(m_prgbActionBlock, cb);
- m_cbActions = cb;
-
- // Rule-validity flags
- m_prgfRuleOkay = new bool[m_crul];
- for (irul = 0; irul < m_crul; irul++)
- m_prgfRuleOkay[irul] = !m_fCheckRules;
-
- // TODO SharonC/AlanW: debuggers
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize a bogus pass with no rules. Currently this is used to make a single positioning
- pass if there was none in the font.
-----------------------------------------------------------------------------------------------*/
-void GrPass::InitializeWithNoRules()
-{
- m_crul = 0;
- m_nMaxRuleContext = 1;
- m_nMaxRuleLoop = 1;
- m_nMaxBackup = 0;
- m_pfsm = NULL;
- m_prgchwRuleSortKeys = NULL;
- m_prgcritRulePreModContext = NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Extend the output stream by the given number of characters.
- (Overridden by GrBidiPass.)
-
- @param ptman - table manager
- @param psstrmIn/Out - streams being processed
- @param cslotNeededByNext - the number of slots being requested by the following pass
- @param twsh - how we are handling trailing white-space
- @param pnRet - return value
- @param pcslotGot - return the number of slots gotten
- @param pislotFinalBreak - return the index of the final slot, when we are removing
- the trailing white-space and so the end of the segment
- will be before the any actual line-break slot
-
- @return kNextPass if we were able to generated the number requested, or processing is
- complete; otherwise return the number of slots needed from the previous pass.
-----------------------------------------------------------------------------------------------*/
-void GrPass::ExtendOutput(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int cslotNeededByNext, TrWsHandling twsh,
- int * pnRet, int * pcslotGot, int * pislotFinalBreak)
-{
- // Kludge to generate an error in rendering:
- //int z = 50;
- //int t = ((5 * 10) / z) - 1;
- //if (this->m_ipass == 4)
- //{
- // int x; x = z / t;
- //}
-
- int islotInitReadPos = psstrmIn->ReadPos();
- int islotInitWritePos = psstrmOut->WritePos();
-
- int cslotToGet = max(cslotNeededByNext,
- m_pzpst->NeededToResync() - psstrmOut->WritePos());
- int cslotGot = 0;
-
- gid16 chwLB = ptman->LBGlyphID();
-
- // While we haven't got the number of slot we've been asked for, and there is enough
- // available in the input, run rules, filling up the output.
-
- while ((cslotToGet > 0 && cslotGot < cslotToGet)
- // Don't leave this pass until we've got the index offset. This is especially
- // needed for input to the positioning pass, but it doesn't hurt to make it a
- // general rule.
- || !psstrmOut->GotIndexOffset()
- // Don't leave this pass until all the slots to reprocess have been
- // completely handled.
- || (psstrmIn->SlotsToReprocess() > 0)
- // Don't leave this pass until there is a complete cluster in the output
- || (islotInitWritePos == psstrmOut->WritePos())
- || (psstrmOut->MaxClusterSlot(islotInitWritePos, psstrmOut->WritePos()) > 0))
- {
- int cslotAvailable = psstrmIn->TotalSlotsPending();
- int cslotNeedMore = MaxRuleContext() - cslotAvailable + ptman->PrevPassMaxBackup(m_ipass);
-
- // This test should not be necessary, but just in case.
- if (psstrmIn->PastEndOfPositioning(false))
- cslotNeedMore = 0; // the input stream is done
-
- if (// Not enough available in the input:
- (cslotNeedMore > 0 && !psstrmIn->FullyWritten())
-
- // && psstrmIn->SegLimIfKnown() == -1) && -- no, because substitution passes may need
- // to consider slots beyond the seg limit
-
- // Positioning passes need to know where they are in relation to the initial
- // line-break.
- || (IsPosPass() && !psstrmIn->GotIndexOffset())
-
- // The following can happen on backtracking, when we undo stuff before the
- // beginning of the segment:
- || !ptman->Pass(m_ipass - 1)->DidResyncSkip())
- {
- // Ask previous pass for more input.
- *pnRet = max(cslotNeedMore, 1);
- *pnRet = max(*pnRet, cslotNeededByNext - cslotGot);
- *pcslotGot = cslotGot;
- return;
- }
-
- Assert(ptman->Pass(m_ipass - 1)->DidResyncSkip());
-
- bool fDoneThisPass = (cslotAvailable == 0);
- if (psstrmIn->SlotsToReprocess() == 0)
- {
- fDoneThisPass = fDoneThisPass ||
- psstrmIn->PastEndOfPositioning(false) ||
- psstrmOut->PastEndOfPositioning(true);
- }
-
- if (fDoneThisPass)
- {
- // No more input to process--this pass is done.
- Assert(psstrmIn->SlotsToReprocess() == 0);
- psstrmIn->ClearReprocBuffer();
-
- if (twsh == ktwshNoWs && m_ipass == ptman->NumberOfLbPasses())
- {
- *pnRet = RemoveTrailingWhiteSpace(ptman, psstrmOut, twsh, pislotFinalBreak);
- if (*pnRet == kBacktrack) // entire segment was white-space:
- return; // backtrack, which will fail
- }
- DoResyncSkip(psstrmOut);
- DoCleanUpSegMin(ptman, psstrmIn, islotInitReadPos, psstrmOut);
- psstrmOut->MarkFullyWritten();
- *pnRet = kNextPass;
- *pcslotGot = cslotGot;
- return;
- }
-
- if (twsh == ktwshOnlyWs && m_ipass == ptman->NumberOfLbPasses() + 1)
- {
- // Note that this is the first pass after the linebreak pass, so psstrmInput
- // is the output of the linebreak pass.
- GrSlotState * pslotNext = psstrmIn->Peek();
- if (!pslotNext->IsLineBreak(chwLB) &&
- pslotNext->Directionality() != kdircWhiteSpace &&
- psstrmIn->SegMin() > -1 && psstrmIn->SegMin() <= psstrmIn->ReadPos())
- {
- // We are only allowing white-space in this segment and we hit
- // something else. Don't process any further.
- if (psstrmIn->SegLimIfKnown() > -1 &&
- psstrmIn->SegLimIfKnown() <= psstrmIn->ReadPos())
- {
- // Already inserted a line-break; we're done.
- DoResyncSkip(psstrmOut);
- psstrmOut->MarkFullyWritten();
- *pnRet = kNextPass;
- *pcslotGot = cslotGot;
- return;
- }
- while (psstrmIn->SlotsToReprocess() > 0)
- {
- psstrmOut->CopyOneSlotFrom(psstrmIn);
- psstrmOut->SetPosForNextRule(0, psstrmIn, IsPosPass());
- }
- psstrmIn->ClearReprocBuffer();
- *pnRet = kBacktrack;
- return;
- }
- }
-
- // Otherwise, we have enough input to run a rule.
-
- psstrmIn->SetRuleStartReadPos();
- psstrmOut->SetRuleStartWritePos();
-
- int ruln = -1;
- if (m_pfsm)
- ruln = m_pfsm->GetRuleToApply(ptman, this, psstrmIn, psstrmOut);
- ruln = CheckRuleValidity(ruln);
- RunRule(ptman, ruln, psstrmIn, psstrmOut);
-
- cslotGot = psstrmOut->WritePos() - islotInitWritePos;
- psstrmOut->CalcIndexOffset(ptman);
- }
-
- DoResyncSkip(psstrmOut);
- DoCleanUpSegMin(ptman, psstrmIn, islotInitReadPos, psstrmOut);
-
- // We're past the point where we care about anything in the reprocessing buffer.
- Assert(psstrmIn->NoReproc());
- psstrmIn->ClearReprocBuffer();
-
- if (psstrmOut->PastEndOfPositioning(true))
- psstrmOut->MarkFullyWritten();
-
- *pnRet = kNextPass;
- *pcslotGot = cslotGot;
-}
-
-/*----------------------------------------------------------------------------------------------
- Extend the output stream by the given number of characters.
- For a GrBidiPass, if we are at a direction change, get the entire
- range of upstream glyphs, reverse them, and treat them as one chunk.
- Otherwise just pass one slot through.
-
- @param ptman - table manager
- @param psstrmInput/Output - streams being processed
- @param cslotNeededByNext - the number of slots being requested by the following pass
- @param twsh - how we are handling trailing white-space
- @param pnRet - return value
- @param pcslotGot - return the number of slots gotten
- @param pislotFinalBreak - not used in this version
-
- @return 1 if we need more glyphs from the previous pass
-----------------------------------------------------------------------------------------------*/
-void GrBidiPass::ExtendOutput(GrTableManager * ptman,
- GrSlotStream* psstrmIn, GrSlotStream* psstrmOut,
- int cslotNeededByNext, TrWsHandling twsh,
- int * pnRet, int * pcslotGot, int * pislotFinalBreak)
-{
- Assert(psstrmIn->SlotsToReprocess() == 0);
-
- int islotInitReadPos = psstrmIn->ReadPos();
- int islotInitWritePos = psstrmOut->WritePos();
-
- Assert(m_pzpst->NeededToResync() == 0);
-
- int cslotToGet = max(cslotNeededByNext,
- m_pzpst->NeededToResync() - psstrmOut->WritePos());
- int cslotGot = 0;
- int nTopDir;
- if (twsh == ktwshOnlyWs)
- nTopDir = (ptman->State()->ParaRightToLeft()) ? 1 : 0;
- else
- nTopDir = ptman->TopDirectionLevel();
-
- while (cslotToGet > 0 && cslotGot < cslotToGet)
- {
- int islotChunkO = psstrmOut->WritePos();
- int islotChunkI = psstrmIn->ReadPos();
-
- // Need at least one character to test.
- if (psstrmIn->SlotsPending() < 1 || !ptman->Pass(m_ipass-1)->DidResyncSkip())
- {
- if (!psstrmIn->FullyWritten())
- {
- // Ask previous pass for more input.
- *pnRet = max(cslotToGet - psstrmIn->SlotsPending(), 1);
- *pnRet = max(*pnRet, cslotNeededByNext - cslotGot);
- *pcslotGot = cslotGot;
- return;
- }
- else
- {
- Assert(ptman->Pass(m_ipass-1)->DidResyncSkip());
- Assert(psstrmIn->SlotsToReprocess() == 0);
- psstrmIn->ClearReprocBuffer();
- DoResyncSkip(psstrmOut);
- DoCleanUpSegMin(ptman, psstrmIn, islotInitReadPos, psstrmOut);
- psstrmOut->MarkFullyWritten();
- *pnRet = kNextPass;
- *pcslotGot = cslotGot;
- return;
- }
- }
-
- std::vector<int> vislotStarts;
- std::vector<int> vislotStops;
- int islotReverseLim = psstrmIn->DirLevelRange(ptman->State(),
- psstrmIn->ReadPos(), nTopDir,
- vislotStarts, vislotStops);
- //int islotReverseLim = psstrmIn->OldDirLevelRange(pengst, psstrmIn->ReadPos(), nTopDir);
- if (islotReverseLim == -1)
- {
- // We haven't got the full range of reversed text yet--
- // ask for more input.
- *pnRet = max(1, cslotNeededByNext - cslotGot);
- *pcslotGot = cslotGot;
- return;
- }
-
- // Okay, we have enough input to do the reversal, if any.
-
- int cslotToReverse = islotReverseLim - psstrmIn->ReadPos();
-
- // Never reverse the final linebreak; leave it at the end.
- if (cslotToReverse > 0 && islotReverseLim > 0)
- {
- GrSlotState * pslotLast = psstrmIn->SlotAt(islotReverseLim - 1);
- if (pslotLast->IsFinalLineBreak(ptman->LBGlyphID()))
- {
- for (size_t i = 0; i < vislotStops.size(); i++)
- if (vislotStops.back() == islotReverseLim - 1)
- vislotStops.back() = islotReverseLim - 2;
- islotReverseLim--;
- cslotToReverse--;
- }
- }
-
- psstrmIn->SetRuleStartReadPos();
- psstrmOut->SetRuleStartWritePos();
-
- if (cslotToReverse == 0)
- {
- psstrmOut->CopyOneSlotFrom(psstrmIn);
- }
- else
- {
- int islotNextWritePos = psstrmOut->WritePos() + cslotToReverse;
- int islotNextReadPos = psstrmIn->ReadPos() + cslotToReverse;
- if (vislotStarts.size() == 0)
- {
- Assert(false); // this should have been done by DirLevelRange
- vislotStarts.push_back(psstrmIn->ReadPos());
- vislotStops.push_back(islotNextReadPos - 1);
- }
- Assert(vislotStarts.back() == psstrmIn->ReadPos());
- Assert(vislotStops.back() == islotNextReadPos - 1);
- int cslotNotCopied = Reverse(ptman, psstrmIn, psstrmOut, vislotStarts, vislotStops);
- //Reverse(nTopDir + 1,
- // psstrmIn, psstrmIn->ReadPos(), islotReverseLim,
- // psstrmOut, psstrmOut->WritePos() + cslotToReverse - 1, psstrmOut->WritePos()-1);
-
- islotNextWritePos -= cslotNotCopied; // bidi markers that are not passed through
-
- psstrmIn->SetReadPos(islotNextReadPos);
- psstrmOut->SetWritePos(islotNextWritePos);
-
- // It's quite strange to have the segment start or end in the middle of stuff to
- // reverse (because the LB forms a natural terminator), but at any rate,
- // if that happens, record the segment lim at the corresponding place in the
- // output stream.
- int islotSegMinIn = psstrmIn->SegMin();
- if (islotSegMinIn > -1 &&
- psstrmIn->ReadPos() - cslotToReverse <= islotSegMinIn &&
- islotSegMinIn < psstrmIn->ReadPos())
- {
- Assert(islotSegMinIn == psstrmIn->ReadPos() - cslotToReverse); // normal situation
- psstrmOut->SetSegMin(
- psstrmOut->WritePos() - (psstrmIn->ReadPos() - islotSegMinIn));
- }
- int islotSegLimIn = psstrmIn->SegLimIfKnown();
- if (islotSegLimIn > -1 &&
- psstrmIn->ReadPos() - cslotToReverse <= islotSegLimIn &&
- islotSegLimIn < psstrmIn->ReadPos())
- {
- Assert(islotSegLimIn == psstrmIn->ReadPos() - cslotToReverse); // normal situation
- psstrmOut->SetSegLim(
- psstrmOut->WritePos() - (psstrmIn->ReadPos() - islotSegLimIn));
- }
- }
-
- psstrmOut->SetPosForNextRule(0, psstrmIn, false);
-
- // Record the chunk mappings:
- MapChunks(psstrmIn, psstrmOut, islotChunkI, islotChunkO, 0);
-
- cslotGot = psstrmOut->WritePos() - islotInitWritePos;
- psstrmOut->CalcIndexOffset(ptman);
- }
-
- DoResyncSkip(psstrmOut);
- DoCleanUpSegMin(ptman, psstrmIn, islotInitReadPos, psstrmOut);
-
- // We're past the point where we care about anything in the reprocessing buffer.
- Assert(psstrmIn->NoReproc());
- psstrmIn->ClearReprocBuffer();
-
- Assert(psstrmIn->SlotsToReprocess() == 0);
-
- if (psstrmOut->PastEndOfPositioning(true))
- psstrmOut->MarkFullyWritten();
-
- *pnRet = kNextPass;
- *pcslotGot = cslotGot;
-}
-
-/*----------------------------------------------------------------------------------------------
- Generate slots containing glyph IDs for the underlying character data,
- incrementing the input pointer as we go.
-
- @param ptman - table manager
- @param pchstrm - input character stream
- @param psstrmOutput - output slot stream
- @param ichSegLim - known end of segment, index into the text; or -1;
- the lim of the of char-stream itself represents
- the end of the text-source; this lim is the
- known desired end of the segment
- @param cchwPostXlbContext - number of characters that may be needed from the following line;
- valid when ichSegLim > -1
- @param lb - breakweight to use for inserted LB
- @param cslotToGet - the number of slots being requested by the following pass
- @param fNeedFinalBreak - true if the end of the segment needs to be a valid break point
- @param pislotFinalBreak - the end of this segment
-----------------------------------------------------------------------------------------------*/
-int GrPass::ExtendGlyphIDOutput(GrTableManager * ptman,
- GrCharStream * pchstrm, GrSlotStream * psstrmOut, int ichSegLim, int cchwPostXlbContext,
- LineBrk lb, int cslotToGet, bool fNeedFinalBreak, TrWsHandling twsh,
- int * pislotFinalBreak)
-{
- EngineState * pengst = ptman->State();
-
- // This pass should be the glyph-generation pass.
- Assert(dynamic_cast<GrGlyphGenPass*>(this));
- Assert(m_pzpst->m_cslotSkipToResync == 0);
- m_pzpst->m_fDidResyncSkip = true;
-
- for (int islot = 0; islot < cslotToGet; ++islot)
- {
- int islotChunkO = psstrmOut->WritePos();
- int islotChunkI = pchstrm->SegOffset();
-
- if (pchstrm->AtEnd()
- || (ichSegLim > -1 && pchstrm->Pos() == ichSegLim))
- {
- if (psstrmOut->SegLimIfKnown() > -1 &&
- psstrmOut->SegLimIfKnown() <= psstrmOut->WritePos())
- {
- // Already found the end of this stream.
- }
- else
- {
- if (pchstrm->EndLine() && !fNeedFinalBreak)
- // (if we need a good final break, don't just append an LB;
- // make it backtrack and find a valid break point)
- {
- // Only need to get a good break when we're backtracking; otherwise we
- // already know it.
- Assert(ichSegLim == -1 || !fNeedFinalBreak);
- // Notice that we're cheating here: we're putting the LB in the zeroth
- // stream instead of in the output of the linebreak table.
- psstrmOut->AppendLineBreak(ptman, pchstrm,
- (pchstrm->AtEnd() ? klbWordBreak : lb),
- ((ptman->RightToLeft()) ? kdircRlb : kdircLlb), -1, false,
- pchstrm->SegOffset());
- if (pchstrm->AtEnd())
- pengst->SetFinalLB();
- else
- pengst->SetInsertedLB(true);
- }
- else
- {
- // Don't actually insert a line-break glyph.
- psstrmOut->SetSegLimToWritePos();
- }
- *pislotFinalBreak = psstrmOut->WritePos() - 1;
- if (ptman->NumberOfLbPasses() > 0 && pengst->HasInitialLB())
- {
- // Because we cheated above: the output stream of the linekbreak table
- // has an initial LB, which this stream doesn't have. Adjust the position
- // of the final break to match what it will be in the output of the
- // lb table.
- *pislotFinalBreak += 1;
- }
- }
-
- if (twsh == ktwshNoWs && m_ipass == ptman->NumberOfLbPasses())
- {
- int nRet = RemoveTrailingWhiteSpace(ptman, psstrmOut, twsh, pislotFinalBreak);
- if (nRet == kBacktrack) // entire segment was white-space:
- return kBacktrack; // backtrack, which will fail
- }
- if (pchstrm->AtEnd())
- {
- psstrmOut->MarkFullyWritten();
- return kNextPass;
- }
- // otherwise we may need a few more characters for line-boundary contextualization.
- }
-
- int ichwSegOffset; // offset from the official start of the segment
- int cchw; // number of 16-bit chars consumed
- GrFeatureValues fval;
- int nUnicode = pchstrm->NextGet(ptman, &fval, &ichwSegOffset, &cchw);
- gid16 chwGlyphID = ptman->GetGlyphIDFromUnicode(nUnicode);
-
- if (nUnicode == knCR || nUnicode == knLF || nUnicode == knLineSep || nUnicode == knParaSep ||
- nUnicode == knORC)
- {
- // Hard line-break: we're done.
- // Note that we don't include the hard-break character in this segment.
- pchstrm->HitHardBreak();
- pengst->SetHitHardBreak();
- psstrmOut->MarkFullyWritten();
- return kNextPass;
- }
-
- GrSlotState * pslotNew;
- ptman->State()->NewSlot(chwGlyphID, fval, 0, ichwSegOffset, nUnicode, &pslotNew);
-
- psstrmOut->NextPut(pslotNew);
- psstrmOut->MapInputChunk(islotChunkI, islotChunkO, pchstrm->SegOffset(), false, false);
- // Mapping the output chunks of the char stream has already been handled by the
- // char stream.
-
- }
-
- psstrmOut->CalcIndexOffset(ptman);
-
- if (psstrmOut->PastEndOfPositioning(true)
- || (ichSegLim > -1 && pchstrm->Pos() > ichSegLim + cchwPostXlbContext))
- {
- // We have enough for this segment.
- psstrmOut->MarkFullyWritten();
- }
-
- return kNextPass;
-}
-
-/*----------------------------------------------------------------------------------------------
- Extend the output stream until it is using up the allotted amount of
- physical space. Return kNextPass when all data has been processed successfully.
- Return kBacktrack when space overflows, indicating that we need to backtrack
- and find a break point. Otherwise, return the number of slots we
- need from the previous pass.
-
- @param fWidthIsCharCount - kludge for test procedures
- @param fInfiniteWidth - don't test for more space
- @param fMustBacktrack - true if we need a good final break and haven't found one yet
- @param lbMax - max allowed for the final slot
- @param twsh - how we are handling trailing white-space
-----------------------------------------------------------------------------------------------*/
-int GrPass::ExtendFinalOutput(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput,
- float xsSpaceAllotted, bool fWidthIsCharCount, bool fInfiniteWidth,
- bool fHaveLineBreak, bool fMustBacktrack, LineBrk lbMax, TrWsHandling twsh,
- int * pislotLB, float * pxsWidth)
-{
- EngineState * pengst = ptman->State();
-
- // This pass should be the final positioning pass.
- Assert(dynamic_cast<GrPosPass*>(this));
-
- // It would be very strange to be positioning based on something that happened in
- // previous line. -- not true any more, since this will include the max-precontext-length.
-// Assert(m_cslotSkipToResync == 0);
-
- int islotOutputLB = -1;
- //int islotInitWritePos = psstrmOutput->WritePos();
- int islotNoLbUpTo = psstrmOutput->WritePos();;
-
- while (true)
- {
- // Do this right up front, so we are only measuring actual output.
- if (m_pzpst->CanResyncSkip(psstrmOutput))
- m_pzpst->DoResyncSkip(psstrmOutput);
-
- bool fMoreSpace;
- if (!m_pzpst->DidResyncSkip())
- fMoreSpace = true;
- else if (fInfiniteWidth)
- fMoreSpace = true;
- else
- fMoreSpace = psstrmOutput->MoreSpace(ptman,
- xsSpaceAllotted, fWidthIsCharCount,
- true, // always ignore trailing white space when we are first making the segment
- twsh,
- pxsWidth);
- if (!fMoreSpace)
- {
- // Overflowed available space; backtrack and find a line break.
- while (psstrmInput->SlotsToReprocess() > 0)
- {
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- psstrmOutput->SetPosForNextRule(0, psstrmInput, IsPosPass());
- }
- psstrmInput->ClearReprocBuffer();
-
- *pislotLB = -1;
- pengst->SetExceededSpace();
- pengst->SetHitHardBreak(false);
- return kBacktrack;
- }
-
- if (islotOutputLB != -1 && psstrmInput->SlotsToReprocess() == 0)
- {
- // Hit the inserted line break--we're done.
- psstrmInput->ClearReprocBuffer();
- *pislotLB = islotOutputLB;
- return kNextPass;
- }
-
- int nslotAvailable = psstrmInput->SlotsPending();
- if ((nslotAvailable - ptman->PrevPassMaxBackup(m_ipass)
- < MaxRuleContext() && !psstrmInput->FullyWritten())
- || !ptman->Pass(m_ipass-1)->DidResyncSkip())
- {
- // Not enough available in the input--ask previous pass for more input.
- // Ten is an arbitrary value--we ask for more that we really need to cut down
- // on the number of times we loop between passes.
- return max(MaxRuleContext() - (nslotAvailable - 10), 1);
- }
-
- Assert(ptman->Pass(m_ipass - 1)->DidResyncSkip());
-
- if (nslotAvailable == 0)
- {
- // No more input to process. If we have a valid line-break, or we don't care,
- // we're done. Otherwise backtrack to find a valid break point.
- Assert(psstrmInput->SlotsToReprocess() == 0);
- psstrmInput->ClearReprocBuffer();
- if (fMustBacktrack)
- {
- *pislotLB = -1;
- return kBacktrack;
- }
- else
- {
- psstrmOutput->MarkFullyWritten();
- return kNextPass;
- }
- }
-
- // Otherwise, we have enough input to run a rule.
-
- psstrmInput->SetRuleStartReadPos();
- psstrmOutput->SetRuleStartWritePos();
-
- int ruln = -1;
- if (m_pfsm)
- ruln = m_pfsm->GetRuleToApply(ptman, this, psstrmInput, psstrmOutput);
- ruln = CheckRuleValidity(ruln);
- RunRule(ptman, ruln, psstrmInput, psstrmOutput);
-
- if (fHaveLineBreak)
- {
- islotOutputLB =
- psstrmOutput->FindFinalLineBreak(ptman->LBGlyphID(),
- islotNoLbUpTo, psstrmOutput->WritePos());
- islotNoLbUpTo = psstrmOutput->WritePos();
- }
-
- psstrmOutput->CalcIndexOffset(ptman);
- }
-
- Assert(false);
-
- psstrmInput->ClearReprocBuffer();
- *pislotLB = -1;
- return kNextPass;
-}
-
-/*----------------------------------------------------------------------------------------------
- Remove undesirable trailing white-space.
-----------------------------------------------------------------------------------------------*/
-int GrPass::RemoveTrailingWhiteSpace(GrTableManager * ptman, GrSlotStream * psstrmOut,
- TrWsHandling twsh, int * pislotFinalBreak)
-{
- EngineState * pengst = ptman->State();
-
- Assert(twsh == ktwshNoWs);
- Assert(m_ipass == ptman->NumberOfLbPasses()); // output of (final) lb pass
-
- int islotTmp = psstrmOut->FinalSegLim();
- if (islotTmp <= 0)
- return kNextPass;
-
- GrSlotState * pslotLast = psstrmOut->SlotAt(islotTmp-1);
- if (islotTmp > 0 && pslotLast->IsFinalLineBreak(ptman->LBGlyphID()))
- {
- islotTmp--;
- pslotLast = (islotTmp > 0) ? psstrmOut->SlotAt(islotTmp-1) : NULL;
- }
- bool fRemovedWs = false;
- while (islotTmp > 0 && pslotLast->Directionality() == kdircWhiteSpace)
- {
- islotTmp--;
- pslotLast = (islotTmp > 0) ? psstrmOut->SlotAt(islotTmp-1) : NULL;
- fRemovedWs = true;
- }
- if (fRemovedWs)
- {
- if (islotTmp <= 0)
- {
- // Entire segment was white-space: backtrack, which will fail.
- return kBacktrack;
- }
- psstrmOut->SetSegLim(islotTmp);
- *pislotFinalBreak = islotTmp - 1;
- pengst->SetFinalLB(false);
- pengst->SetRemovedTrWhiteSpace();
- ptman->UnwindAndReinit(islotTmp - 1);
- }
-
- return kNextPass;
-}
-
-/*----------------------------------------------------------------------------------------------
- Keep track of whether we're advancing through the input satisfactorily;
- if not, forcibly advance. This is a safety net to avoid infinite loops; it
- should never be necessary if they've set up their tables right.
-----------------------------------------------------------------------------------------------*/
-void GrPass::CheckInputProgress(GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput,
- int islotOrigInput)
-{
- int islotInput = psstrmInput->ReadPosForNextGet();
-// Assert(islotInput >= islotOrigInput); -- no longer true now that we can back up
-
- if (islotInput <= psstrmInput->ReadPosMax())
- {
- // Didn't advance.
- if (m_pzpst->m_nRulesSinceAdvance >= m_nMaxRuleLoop)
- {
- bool fAdvanced = false;
- // Forcibly advance. First try to advance to where we backed up from.
- while (!psstrmInput->AtEnd() &&
- psstrmInput->ReadPosForNextGet() < psstrmInput->ReadPosMax())
- {
- RecordHitMaxRuleLoop(psstrmInput->ReadPosForNextGet());
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- fAdvanced = true;
- }
- // If that didn't do anything productive, just advance one slot.
- if (!fAdvanced && !psstrmInput->AtEndOfContext())
- {
- RecordHitMaxRuleLoop(psstrmInput->ReadPosForNextGet());
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- }
-
- m_pzpst->m_nRulesSinceAdvance = 0;
- }
- else m_pzpst->m_nRulesSinceAdvance++;
- }
- else m_pzpst->m_nRulesSinceAdvance = 0;
-
- psstrmInput->SetReadPosMax(islotInput);
-}
-
-/*----------------------------------------------------------------------------------------------
- Record the chunks in the streams' chunk maps.
-
- psstrmIn/Out - streams being processed
- islotChunkIn/Out - start of chunks
- cslotReprocessed - number of slots to reprocess before the rule was run
-----------------------------------------------------------------------------------------------*/
-void GrPass::MapChunks(GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int islotChunkIn, int islotChunkOut, int cslotReprocessed)
-{
- if (islotChunkOut > psstrmOut->WritePos())
- {
- // backing up
- int islotReadPosTmp = psstrmIn->ReadPosForNextGet();
-/// Assert((islotChunkIn - islotReadPosTmp) == (islotChunkOut - psstrmOut->WritePos()));
-// psstrmIn->MapOutputChunk(psstrmOut->WritePos() - 1, islotReadPosTmp - 1,
-// islotChunkOut, true, 0, true);
-// psstrmOut->MapInputChunk(islotReadPosTmp - 1, psstrmOut->WritePos() - 1,
-// islotChunkIn, true, true);
-
- // Resync.
- if (psstrmOut->WritePos() == 0)
- {
- // Clear all the chunks.
- psstrmIn->MapOutputChunk(-1, -1, 0, true, 0, true);
- psstrmOut->MapInputChunk(-1, -1, islotReadPosTmp, true, true);
- psstrmIn->AssertChunkMapsValid(psstrmOut);
- return;
- }
- else if (islotReadPosTmp == 0)
- {
- // Clear all the chunks.
- psstrmIn->MapOutputChunk(-1, -1, psstrmOut->WritePos(), true, 0, true);
- psstrmOut->MapInputChunk(-1, -1, 0, true, true);
- psstrmIn->AssertChunkMapsValid(psstrmOut);
- return;
- }
- // Find the beginning of the current chunk.
- int islotChunkOutAdj = min(islotChunkOut, psstrmOut->WritePos() - 1);
- int islotChunkInAdj = psstrmOut->ChunkInPrev(islotChunkOutAdj);
- while (islotChunkInAdj == -1 && islotChunkOutAdj > 0)
- islotChunkInAdj = psstrmOut->ChunkInPrev(--islotChunkOutAdj);
-
- if (islotChunkInAdj == -1)
- {
- // Couldn't find the beginning of any chunk; zap them all.
- psstrmIn->MapOutputChunk(-1, -1, psstrmOut->WritePos(), true, 0, true);
- psstrmOut->MapInputChunk(-1, -1, psstrmOut->ReadPos(), true, true);
- psstrmIn->AssertChunkMapsValid(psstrmOut);
- return;
- }
-
- if (psstrmIn->ChunkInNext(islotChunkInAdj) != islotChunkOutAdj)
- {
- islotChunkOutAdj = psstrmIn->ChunkInNext(islotChunkInAdj);
- while (islotChunkOutAdj == -1 && islotChunkInAdj > 0)
- islotChunkOutAdj = psstrmIn->ChunkInNext(--islotChunkInAdj);
- }
-
- psstrmIn->MapOutputChunk(islotChunkOutAdj, islotChunkInAdj,
- psstrmOut->WritePos(), false, 0, true);
- psstrmOut->MapInputChunk(islotChunkInAdj, islotChunkOutAdj,
- psstrmIn->ReadPos(), false, true);
- }
- else if (islotChunkOut == psstrmOut->WritePos())
- // no output generated--continue the previous chunk
- ;
- else if (islotChunkIn == psstrmIn->ReadPos())
- // no input consumed
- ;
- else
- {
- psstrmIn->MapOutputChunk(islotChunkOut, islotChunkIn, psstrmOut->WritePos(),
- (cslotReprocessed > 0), cslotReprocessed, false);
- psstrmOut->MapInputChunk(islotChunkIn, islotChunkOut, psstrmIn->ReadPos(),
- (cslotReprocessed > 0), false);
- }
-
- psstrmIn->AssertChunkMapsValid(psstrmOut);
-
- m_pzpst->m_nMaxChunk = max(m_pzpst->m_nMaxChunk, psstrmIn->LastNextChunkLength());
-}
-
-/*----------------------------------------------------------------------------------------------
- This method is something of a kludge. During the course of running the rules we try to
- keep track of the seg-min location, but sometimes that gets confused due to insertions
- and deletions at the segment boundaries.
-----------------------------------------------------------------------------------------------*/
-void GrSubPass::DoCleanUpSegMin(GrTableManager * ptman,
- GrSlotStream * psstrmIn, int islotInitReadPos, GrSlotStream * psstrmOut)
-{
- int islotSegMinIn = psstrmIn->SegMin();
- if (islotSegMinIn == -1)
- return; // input doesn't even know it
- if (islotInitReadPos > islotSegMinIn)
- return; // should already have figured it out
-
- // Otherwise this batch of processing likely set the seg-min on the output stream,
- // so check it out.
-
- // First, if the seg-min of the input stream is zero, it should be zero on the output.
- if (islotSegMinIn == 0)
- {
- psstrmOut->SetSegMin(0, true);
- return;
- }
-
- // If there is an initial line-break, the seg-min should be just before it.
- int islot;
- if (ptman->State()->HasInitialLB())
- {
- gid16 chwLB = ptman->LBGlyphID();
-
- // Unfortunately, the seg-min from the previous segment can get off, too. :-(
- // Fix it, while we're at it.
- if (!psstrmIn->SlotAt(islotSegMinIn)->IsInitialLineBreak(chwLB))
- {
- for (islot = 0; islot < psstrmIn->ReadPos(); islot++)
- if (psstrmIn->SlotAt(islot)->IsInitialLineBreak(chwLB))
- {
- psstrmIn->SetSegMin(islot, true);
- break;
- }
- }
- if (psstrmOut->SegMin() > -1
- && psstrmOut->SlotAt(psstrmOut->SegMin())->IsInitialLineBreak(chwLB))
- {
- return; // already okay
- }
- for (islot = 0; islot < psstrmOut->WritePos(); islot++)
- if (psstrmOut->SlotAt(islot)->IsInitialLineBreak(chwLB))
- {
- psstrmOut->SetSegMin(islot, true);
- return;
- }
- Assert(false); // couldn't find it
- }
-
- // Otherwise, figure it out using the associations. First observe that the seg-min
- // will be in the corresponding chunk to the seg-min of the previous pass.
- int islotChunkMinIn = psstrmIn->ChunkInNextMin(islotSegMinIn);
- int islotChunkLimIn = psstrmIn->ChunkInNextLim(islotSegMinIn);
- if (islotChunkMinIn == -1) islotChunkMinIn = 0;
- if (islotChunkLimIn == -1) islotChunkLimIn = 1;
-
- int islotChunkMinOut = psstrmIn->ChunkInNext(islotChunkMinIn);
- int islotChunkLimOut = psstrmIn->ChunkInNext(islotChunkLimIn);
- if (islotChunkMinOut == -1) islotChunkMinOut = 0;
- if (islotChunkLimOut == -1) islotChunkLimOut = 1;
-
- int islotSegMinOut = psstrmOut->SegMin();
- if (islotSegMinOut == -1)
- {
- // No reasonable guess; try to figure it out.
- for (islot = islotChunkMinOut; islot < islotChunkLimOut; islot++)
- {
-// GrSlotState * pslotOut = psstrmOut->SlotAt(islot);
- if (psstrmOut->SlotAt(islot)->BeforeAssoc() == 0)
- {
- islotSegMinOut = islot;
- break;
- }
- }
- if (islotSegMinOut == -1)
- {
- // Ick, couldn't figure it out. Let's hope we set it to something reasonable earlier.
- Assert(psstrmOut->SegMin() > -1);
- return;
- }
- }
- // else we have a reasonable guess
-
- // islotSegMinOut is the best or at leastfirst slot in the chunk that maps into the segment.
- // But if there is an adjacent slot inserted before it and it is in the chunk,
- // we want to include that also.
- while (islotSegMinOut > islotChunkMinOut
- && psstrmOut->SlotAt(islotSegMinOut-1)->BeforeAssoc() >= 0)
- {
- islotSegMinOut--;
- }
- psstrmOut->SetSegMin(islotSegMinOut, true);
-}
-
-/*----------------------------------------------------------------------------------------------
- If we are in a state where we are supposed to skip some of the initial output,
- do so. The purpose of this is to resync when restarting for a segment other than the
- first. Caller should ensure that there are enough slots to skip.
-----------------------------------------------------------------------------------------------*/
-int PassState::DoResyncSkip(GrSlotStream * psstrmOutput)
-{
- if (m_fDidResyncSkip)
- return 0;
-
- if (m_cslotSkipToResync == 0)
- {
- m_fDidResyncSkip = true;
- return 0;
- }
-
- if (!CanResyncSkip(psstrmOutput))
- {
- Assert(false); // caller makes sure this doesn't happen
- return (m_cslotSkipToResync - psstrmOutput->WritePos());
- }
-
- psstrmOutput->ResyncSkip(m_cslotSkipToResync);
- m_fDidResyncSkip = true;
-
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Run a constraint for a single rule.
-
- @param ruln - rule to test
- @param psstrmIn - input stream
- @param psstrmOut - for accessing items in the pre-context
- @param cslotPreModContext - the number of items that need to be tested prior to the
- current stream position
- @param cslotMatched - the number of items matched after the current stream position
-----------------------------------------------------------------------------------------------*/
-bool GrPass::RunConstraint(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int cslotPreModContext, int cslotMatched)
-{
- int nRet = 0;
-
- if (m_prgibConstraintStart == NULL)
- return true;
-
- int biStart = int(m_prgibConstraintStart[ruln]);
- if (biStart == 0)
- return true; // no constraints
-
- for (int islot = -cslotPreModContext; islot < cslotMatched; islot++)
- {
- nRet = RunCommandCode(ptman, m_prgbConstraintBlock + biStart, true,
- psstrmIn, psstrmOut, islot);
-
- if (nRet == 0) // one slot failed
- return false;
- }
-
- return (nRet != 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Check that we can interpret all the commands in the rule. If not, return -1 indicating
- that we don't want to run a rule after all. This can happen when the version of the compiler
- that generated the font is later than this engine.
-----------------------------------------------------------------------------------------------*/
-int GrPass::CheckRuleValidity(int ruln)
-{
- if (ruln == -1)
- return -1;
-
- if (m_prgfRuleOkay[ruln])
- return ruln;
-
- int biStart = m_prgibActionStart[ruln];
- byte * pbNext = m_prgbActionBlock + biStart;
-
- // General purpose variables:
-// int arg1, arg2, arg3, arg4;
- int nSlotRef;
- int nInputClass;
- int nOutputClass;
- int c;
- int islotArg;
- int nIndex;
- int nGlyphAttr;
- int nAttLevel;
- int nFeat;
- int nPState;
-// SlotAttrName slat;
-
- int i;
-
-// int nRet = 0;
-
- while (true) // exit by encountering PopRet or RetTrue or RetZero
- {
- ActionCommand op = ActionCommand(*pbNext++);
-
- switch (op)
- {
- case kopNop:
- break;
-
- case kopPushByte:
- pbNext++;
- break;
- case kopPushByteU:
- pbNext++;
- break;
- case kopPushShort:
- pbNext++;
- pbNext++;
- break;
- case kopPushShortU:
- pbNext++;
- pbNext++;
- break;
- case kopPushLong:
- pbNext++;
- pbNext++;
- pbNext++;
- pbNext++;
- break;
-
- case kopNeg:
- case kopTrunc8: case kopTrunc16:
- case kopNot:
- break;
-
- case kopAdd: case kopSub:
- case kopMul: case kopDiv:
- case kopMin: case kopMax:
- case kopAnd: case kopOr:
- case kopEqual: case kopNotEq:
- case kopLess: case kopGtr:
- case kopLessEq: case kopGtrEq:
- break;
-
- case kopCond:
- break;
-
- case kopNext:
- break;
- case kopNextN:
- c = *pbNext; pbNext++; // count
- break;
- case kopPutGlyph8bitObs:
- nOutputClass = *pbNext++;
- break;
- case kopPutGlyph:
- pbNext += 2;
- break;
- case kopPutCopy:
- nSlotRef = *pbNext++;
- break;
- case kopPutSubs8bitObs:
- nSlotRef = *pbNext++;
- nInputClass = *pbNext++;
- nOutputClass = *pbNext++;
- break;
- case kopPutSubs:
- nSlotRef = *pbNext++;
- pbNext += 4; // 2 bytes each for classes
- break;
- case kopCopyNext:
- break;
- case kopInsert:
- break;
- case kopDelete:
- break;
- case kopAssoc:
- c = *pbNext; pbNext++;
- for (i = 0; i < c; i++)
- pbNext++;
- break;
- case kopCntxtItem:
- islotArg = *pbNext++;
- c = *pbNext++;
- break;
-
- case kopAttrSet:
- case kopAttrAdd:
- case kopAttrSub:
- case kopAttrSetSlot:
- pbNext++; // slot attribute ID
- break;
- case kopIAttrSet:
- case kopIAttrAdd:
- case kopIAttrSub:
- case kopIAttrSetSlot:
- pbNext++; // slot attribute ID
- nIndex = *pbNext++; // index; eg, global ID for component
- break;
-
- case kopPushSlotAttr:
- pbNext++;
- nSlotRef = *pbNext++;
- break;
- case kopPushISlotAttr:
- pbNext++;
- nSlotRef = *pbNext++;
- nIndex = *pbNext++;
- break;
-
- case kopPushGlyphAttrObs:
- case kopPushAttToGAttrObs:
- nGlyphAttr = *pbNext++;
- nSlotRef = *pbNext++;
- break;
- case kopPushGlyphAttr:
- case kopPushAttToGlyphAttr:
- *pbNext += 3;
- break;
- case kopPushGlyphMetric:
- case kopPushAttToGlyphMetric:
- nGlyphAttr = *pbNext++;
- nSlotRef = *pbNext++;
- nAttLevel = *pbNext++;
- break;
- case kopPushFeat:
- nFeat = *pbNext++;
- nSlotRef = *pbNext++;
- break;
-
- case kopPushProcState:
- nPState = *pbNext++;
- break;
- case kopPushVersion:
- break;
-
- case kopPopRet:
- case kopRetZero:
- case kopRetTrue:
- m_prgfRuleOkay[ruln] = true;
- return ruln;
-
- default:
- // Uninterpretable command:
- return -1;
- }
- }
-
- return ruln; // to keep compiler from griping
-}
-
-/*----------------------------------------------------------------------------------------------
- Runs the rule, if any, otherwise just passes one character through.
- The rule does nothing but set the line-break weights for the slots.
-
- @param ptman - the table manager that allocates slots
- @param ruln - number of rule to run; -1 if none applies
- @param psstrmIn/Out - input/output stream
-----------------------------------------------------------------------------------------------*/
-void GrLineBreakPass::RunRule(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- // Remember the beginnings of the new chunk:
- int islotIn = psstrmIn->ReadPos();
- int islotOut = psstrmOut->WritePos();
- int cslotReprocessed = psstrmIn->SlotsToReprocess();
-
- if (ruln == -1)
- {
-#ifdef OLD_TEST_STUFF
- if (RunTestRules(ptman, ruln, psstrmIn, psstrmOut))
-#else
- if (false)
-#endif // OLD_TEST_STUFF
- {}
- else
- // Just pass one glyph through.
- {
- psstrmOut->CopyOneSlotFrom(psstrmIn);
- psstrmOut->SetPosForNextRule(0, psstrmIn, false);
- }
- }
- else
- {
- // Run the rule.
-#ifdef OLD_TEST_STUFF
- if (RunTestRules(ptman, ruln, psstrmIn, psstrmOut))
-#else
- if (false)
-#endif // OLD_TEST_STUFF
- {}
- else
- {
- int biStart = m_prgibActionStart[ruln];
- int iResult = RunCommandCode(ptman, m_prgbActionBlock + biStart, false,
- psstrmIn, psstrmOut, 0);
- psstrmOut->SetPosForNextRule(iResult, psstrmIn, false);
- }
- }
-
- CheckInputProgress(psstrmIn, psstrmOut, islotIn);
-
- MapChunks(psstrmIn, psstrmOut, islotIn, islotOut, cslotReprocessed);
-}
-
-/*----------------------------------------------------------------------------------------------
- Runs the rule, if any, otherwise just passes one character through.
- Keeps track of the association information in the slots and chunk
- mappings for backtracking.
-
- @param ptman - the table manager that allocates slots
- @param ruln - number of rule to run; -1 if none applies
- @param psstrmIn/Out - input / output streams
-----------------------------------------------------------------------------------------------*/
-void GrSubPass::RunRule(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- // Remember the beginnings of the new chunk:
- int islotIn = psstrmIn->ReadPosForNextGet();
- int islotOut = psstrmOut->WritePos();
- int cslotReprocessed = psstrmIn->SlotsToReprocess();
-
- if (ruln == -1)
- {
-#ifdef OLD_TEST_STUFF
- if (RunTestRules(ptman, ruln, psstrmIn, psstrmOut))
-#else
- if (false)
-#endif // OLD_TEST_STUFF
- {}
- else
- // Just pass one glyph through.
- {
- psstrmOut->CopyOneSlotFrom(psstrmIn);
- psstrmOut->SetPosForNextRule(0, psstrmIn, false);
- }
- }
- else
- {
- // Run the rule.
-#ifdef OLD_TEST_STUFF
- if (RunTestRules(ptman, ruln, psstrmIn, psstrmOut))
-#else
- if (false)
-#endif // OLD_TEST_STUFF
- {}
- else
- /****************************/
- {
- int biStart = m_prgibActionStart[ruln];
- int iResult = RunCommandCode(ptman, m_prgbActionBlock + biStart, false,
- psstrmIn, psstrmOut, 0);
- psstrmOut->SetPosForNextRule(iResult, psstrmIn, false);
-
- // Restore if we need line-boundary contextualization based on physical locations
- ////psstrmOut->SetLBContextFlag(ptman, islotOut);
- }
- }
-
- CheckInputProgress(psstrmIn, psstrmOut, islotIn);
-
- MapChunks(psstrmIn, psstrmOut, islotIn, islotOut, cslotReprocessed);
-}
-
-/*----------------------------------------------------------------------------------------------
- Runs the rule, if any, otherwise just positions one character in the standard way.
- Keeps track of (among other things) the overall physical size of the output
- and chunk mappings.
-
- @param ptman - the table manager that allocates slots
- @param ruln - number of rule to run; -1 if none applies
- @param psstrmIn / Out - input / output streams
-----------------------------------------------------------------------------------------------*/
-void GrPosPass::RunRule(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- // Remember the beginnings of the new chunk:
- int islotIn = psstrmIn->ReadPosForNextGet();
- int islotOut = psstrmOut->WritePos();
- int cslotReprocessed = psstrmIn->SlotsToReprocess();
-
- int iResult = 0;
-
- Assert(psstrmIn->GotIndexOffset());
- // Don't do any positioning in anything being processed from the previous line.
- if (psstrmIn->ReadPosForNextGet() < psstrmIn->IndexOffset())
- ruln = -1;
-
- if (ruln == -1)
- {
- // Just position one glyph in the standard way.
- psstrmOut->CopyOneSlotFrom(psstrmIn);
- iResult = 0;
- }
- else
- {
- // Run the rule.
-#ifdef OLD_TEST_STUFF
- if (RunTestRules(ptman, ruln, psstrmIn, psstrmOut))
-#else
- if (false)
-#endif // OLD_TEST_STUFF
- {}
- else
- {
- int biStart = m_prgibActionStart[ruln];
- iResult = RunCommandCode(ptman, m_prgbActionBlock + biStart, false,
- psstrmIn, psstrmOut, 0);
- }
- }
-
- // Make sure an entire cluster is present in the output stream. Actually there might be
- // interleaved clusters, which is the purpose for the loop.
- int dislotClusterMax = 0;
- do {
- dislotClusterMax = psstrmIn->MaxClusterSlot(islotIn, psstrmIn->ReadPos());
- Assert(dislotClusterMax >= 0);
- for (int islot = 0; islot < dislotClusterMax; islot++)
- psstrmOut->CopyOneSlotFrom(psstrmIn);
- iResult -= dislotClusterMax;
- } while (dislotClusterMax > 0);
-
- psstrmOut->SetPosForNextRule(iResult, psstrmIn, true);
-
- // Restore if we need line-boundary contextualization based on physical locations
- ////psstrmOut->SetLBContextFlag(ptman, islotOut);
-
- if (ruln > -1)
- {
- psstrmOut->CalcIndexOffset(ptman);
- // Update the attachment trees and cluster metrics for slots modified by this rule.
- // Note that this loop assumes that the reprocess buffer points to the identical
- // slot objects as the output stream (not copies of the slots).
- for (int islot = islotIn - psstrmIn->SlotsSkippedToResync();
- islot < psstrmOut->WritePos() + psstrmIn->SlotsToReprocess();
- islot++)
- {
- psstrmOut->SlotAt(islot)->HandleModifiedPosition(ptman, psstrmIn, psstrmOut, islot);
- }
- }
-
- CheckInputProgress(psstrmIn, psstrmOut, islotIn);
-
- MapChunks(psstrmIn, psstrmOut, islotIn, islotOut, cslotReprocessed);
-
- psstrmOut->AssertStreamIndicesValid(psstrmIn);
-}
-
-/*----------------------------------------------------------------------------------------------
- Perform the reversal for internal bidirectionality.
- Caller is responsible for updating the read- and write-positions.
- Private.
-
- OBSOLETE
-
- @param nCurrDirection - direction level of range of reverse
- @param psstrmIn, psstrmOut - streams
- @param islotInMin, islotInLim - range to reverse
- @param islotOutMin,islotOutLim - corresponding output positions; note that islotOutMin
- will be greater than islotOutLim if we are reversing
- reversing the slots (direction is odd)
-----------------------------------------------------------------------------------------------*/
-#if 0
-void GrBidiPass::OldReverse(int nCurrDirection,
- GrSlotStream * psstrmIn, int islotInMin, int islotInLim,
- GrSlotStream * psstrmOut, int islotOutMin, int islotOutLim)
-{
- int oInc = (islotOutLim > islotOutMin)? 1: -1; // which direction output is moving in
- // buffer (if dir is even, oInc == 1;
- // if odd, oInc == -1)
-
- int islotITmp = islotInMin;
- int islotOTmp = islotOutMin;
-
- while (islotITmp != islotInLim) {
- // Find end of sub-range at current level to reverse.
- int islotSubLim = psstrmIn->OldDirLevelRange(NULL, islotITmp, nCurrDirection);
- Assert(islotSubLim >= 0);
-
- if (islotSubLim == islotITmp) {
- // Current slot is at this level--just copy it.
- psstrmOut->SimpleCopyFrom(psstrmIn, islotITmp, islotOTmp);
- islotOTmp += oInc;
- islotITmp++;
- }
- else {
- // There is a sub-range that needs to be reversed.
- int islotONext = islotOTmp + ((islotSubLim-islotITmp) * oInc);
- OldReverse(nCurrDirection+1,
- psstrmIn, islotITmp, islotSubLim,
- psstrmOut, islotONext - oInc, islotOTmp - oInc);
- islotOTmp = islotONext;
- islotITmp = islotSubLim;
- }
- }
-}
-#endif
-
-/*----------------------------------------------------------------------------------------------
- Perform the reversal for internal bidirectionality.
- Caller is responsible for updating the read- and write-positions.
- Return the number of slots NOT copied because they were markers.
- Private.
-
- @param psstrmIn, psstrmOut - streams
- @param vislotStarts, vislotStops - indices of ranges to reverse, from inner to outer
-----------------------------------------------------------------------------------------------*/
-int GrBidiPass::Reverse(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- std::vector<int> & vislotStarts, std::vector<int> & vislotStops)
-{
- Assert(vislotStarts.size() == vislotStops.size());
-
- std::vector<int> vislotMap; // list of slot indices in the order they should be copied
- // into the output
-
- int islotOuterStart = vislotStarts.back();
- int islotOuterStop = vislotStops.back();
-
- // Initialize map as if nothing is reversed; eg for [2, 9]: (2 3 4 5 6 7 8 9)
- int islot;
- for (islot = 0; islot <= (islotOuterStop - islotOuterStart); islot++)
- vislotMap.push_back(islot + islotOuterStart);
-
- // Do the inner reversals first, followed by the outer reversals.
- size_t iislot;
- for (iislot = 0; iislot < vislotStarts.size(); iislot++)
- {
- // Reverse the run.
- int islotStart = vislotStarts[iislot] - islotOuterStart;
- int islotStop = vislotStops[iislot] - islotOuterStart;
- int islot1, islot2;
- for (islot1 = islotStart, islot2 = islotStop; islot1 < islot2; islot1++, islot2--)
- {
- int islotTmp = vislotMap[islot1];
- vislotMap[islot1] = vislotMap[islot2];
- vislotMap[islot2] = islotTmp;
- }
- }
-
- // With vislotStarts = [7, 5, 2] and vislotStops = [8, 8, 9], we get
- // first: (2 3 4 5 6 8 7 9)
- // then: (2 3 4 7 8 5 6 9)
- // and finally: (9 6 5 8 7 4 3 2)
-
- // Now copy the slots.
-
- int islotOutStart = psstrmOut->WritePos();
- int cslotNotCopied = 0;
- for (iislot = 0; iislot < vislotMap.size(); iislot++)
- {
- GrSlotState * pslot = psstrmIn->SlotAt(vislotMap[iislot]);
- // Don't copy bidi markers unless they have been set to use a specific glyph.
- if (pslot->IsBidiMarker() && pslot->ActualGlyphForOutput(ptman) == 0)
- cslotNotCopied++;
- else
- psstrmOut->SimpleCopyFrom(psstrmIn, vislotMap[iislot],
- iislot + islotOutStart - cslotNotCopied);
- }
- return cslotNotCopied;
-}
-
-/*----------------------------------------------------------------------------------------------
- Unwind the output for this pass, given that a change was assumed to have occurred
- in the input at the given position. Return the position to which we unwound.
-----------------------------------------------------------------------------------------------*/
-int GrPass::Unwind(GrTableManager * ptman,
- int islotChanged, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- bool fFirst)
-{
- // Back up the number of slots required for the longest rule context,
- // but if we land in the middle of a chunk, go forward to its boundary.
- int islotIn = max(islotChanged - m_pzpst->MaxChunk(), 0);
- if (!psstrmIn->NoReproc())
- islotIn = min(islotIn, psstrmIn->ReprocMin());
- psstrmIn->ClearReprocBuffer();
- int islotOut = 0;
- if (islotIn < psstrmIn->SlotsSkippedToResync() ||
- islotIn == 0 ||
- psstrmIn->ReadPos() == 0)
- {
- // The next-chunk-map is invalid. The beginning of the chunk is 0.
- islotIn = 0;
- islotOut = 0;
- }
- else if (islotIn >= psstrmIn->ReadPos())
- {
- // No need to unwind.
- Assert(psstrmIn->NoReproc());
- return psstrmOut->WritePos();
- }
- else
- {
- Assert(islotIn < psstrmIn->ReadPos());
- islotIn = min(islotIn, psstrmIn->ReadPos() - 1);
- while (islotIn < psstrmIn->ReadPos() &&
- (islotOut = psstrmIn->ChunkInNext(islotIn)) == -1)
- {
- ++islotIn;
- }
- if (islotIn == psstrmIn->ReadPos())
- islotOut = psstrmOut->WritePos();
- }
-
- Assert(islotOut != -2); // because the chunk size must be <= than the max-chunk,
- // so we should never hit the end of the output stream
-
- // Now we've found a chunk boundary.
-
-// if (fFirst)
-// Unattach(psstrmIn, islotIn, psstrmOut, islotOut, islotChanged);
-// else
-// Unattach(psstrmIn, islotIn, psstrmOut, islotOut, -1);
-
- psstrmIn->UnwindInput(islotIn, PreBidiPass());
- psstrmOut->UnwindOutput(islotOut, IsPosPass());
-
- if (psstrmIn->ReadPos() < psstrmIn->SlotsSkippedToResync())
- {
- ptman->Pass(m_ipass - 1)->UndoResyncSkip();
- psstrmIn->ClearSlotsSkippedToResync();
- }
- if (psstrmOut->WritePos() < psstrmOut->SlotsSkippedToResync())
- {
- Assert(psstrmOut->SlotsSkippedToResync() == m_pzpst->m_cslotSkipToResync);
- UndoResyncSkip();
- psstrmOut->ClearSlotsSkippedToResync();
- }
-
- if (ptman->LoggingTransduction())
- m_pzpst->UnwindLogInfo(islotIn, islotOut);
-
- return islotOut;
-}
-
-/*----------------------------------------------------------------------------------------------
- For a GrBidiPass, just unwind to the beginning of the reordered chunk.
-----------------------------------------------------------------------------------------------*/
-int GrBidiPass::Unwind(GrTableManager * ptman,
- int islotChanged, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- bool fFirst)
-{
- int islotIn;
- int islotOut;
-
- if (islotChanged == 0)
- {
- islotIn = 0;
- islotOut = 0;
- }
- else {
- islotIn = min(islotChanged, psstrmIn->ReadPos());
- islotIn = max(islotIn - 1, 0);
- while (islotIn > 0 && !StrongDir(psstrmIn->SlotAt(islotIn)->Directionality()))
- {
- psstrmIn->SlotAt(islotIn)->ZapDirLevel();
- islotIn--;
- }
- Assert(islotIn == 0 || psstrmIn->SlotAt(islotIn)->DirHasBeenProcessed());
- islotOut = 0;
- while (islotIn > 0 && (islotOut = psstrmIn->ChunkInNext(islotIn)) == -1)
- --islotIn;
- }
-
- if (islotOut == -1 || islotOut == -2)
- islotOut = 0;
-
- // Now we've found a chunk boundary; islotI and islotO are the positions in the
- // input and output streams, respectively.
-
- psstrmIn->UnwindInput(islotIn, false);
- psstrmOut->UnwindOutput(islotOut, false);
-
- if (psstrmOut->WritePos() < m_pzpst->m_cslotSkipToResync)
- {
- Assert(false); // shouldn't be any of this mess for the Bidi pass
- m_pzpst->m_fDidResyncSkip = false;
- }
-
- if (ptman->LoggingTransduction())
- m_pzpst->UnwindLogInfo(islotIn, islotOut);
-
- return islotOut;
-}
-
-/*----------------------------------------------------------------------------------------------
- Reinitialize part of the transduction logging information when we unwind the pass.
-----------------------------------------------------------------------------------------------*/
-void PassState::UnwindLogInfo(int islotIn, int islotOut)
-{
- while (m_crulrec > 0 && m_rgrulrec[m_crulrec-1].m_islot >= islotIn)
- {
- m_crulrec--;
- m_rgrulrec[m_crulrec].m_islot = 0;
- m_rgrulrec[m_crulrec].m_irul = 0;
- m_rgrulrec[m_crulrec].m_fFired = false;
- }
-
- for (int islot = islotOut; islot < 128; islot++)
- {
- m_rgcslotDeletions[islot] = 0;
- m_rgfInsertion[islot] = false;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Undo the side effects of attachments, ie, fix up the attachment trees as we unwind.
-
- @param islotLB the index of the line-break that was just inserted, or -1 if this is
- not the first pass to include line-breaks; we want to skip this slot
- in the processing in this method
-
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-//:Ignore
-void GrPosPass::Unattach(GrSlotStream * psstrmIn, int islotIn,
- GrSlotStream * psstrmOut, int islotOut, int islotLB)
-{
- // Because this is a positioning pass, there is a one-to-one correspondence between
- // the slots in the input and the slots in the output. Thus we can make simplifying
- // assumptions. Specifically, the chunk sizes are equal, except for the possiblity
- // of a LB slot that we just inserted in the input stream.
-#if 0
-
-#ifdef _DEBUG
- int islotDiff = (psstrmIn->ReadPos() - islotIn) - (psstrmOut->WritePos() - islotOut);
- if (islotLB == -1)
- Assert(islotDiff == 0);
- else
- Assert(islotDiff == 1);
-#endif // _DEBUG
-
- int islotInLp = psstrmIn->ReadPos();
- int islotOutLp = psstrmOut->WritePos();
- for ( ; islotInLp-- > islotIn && islotOutLp-- > islotOut; )
- {
- if (islotLB == islotInLp)
- {
- GrSlotState * pslotTmp = psstrmIn->SlotAt(islotInLp);
- islotInLp--;
- }
-
- GrSlotState * pslotIn = psstrmIn->SlotAt(islotInLp);
- GrSlotState * pslotOut = psstrmOut->SlotAt(islotOutLp);
-
- if (pslotIn != pslotOut)
- {
- GrSlotState * pslotInRoot = pslotIn->AttachRoot();
- GrSlotState * pslotOutRoot = pslotOut->AttachRoot();
-
- if (pslotOutRoot)
- pslotOutRoot->RemoveLeaf(pslotOut);
- if (pslotInRoot)
- pslotInRoot->AddLeaf(pslotIn);
- }
- }
-#endif // 0
-}
-//:End Ignore
-
-
-/*----------------------------------------------------------------------------------------------
- Record the fact that the given rule's constraint failed, for the purpose of logging
- the transduction process.
-----------------------------------------------------------------------------------------------*/
-void GrPass::RecordRuleFailed(int islot, int irul)
-{
- m_pzpst->RecordRule(islot, irul, false);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Record the fact that the given rule fired, for the purpose of logging
- the transduction process.
-----------------------------------------------------------------------------------------------*/
-void GrPass::RecordRuleFired(int islot, int irul)
-{
- m_pzpst->RecordRule(islot, irul, true);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Record the fact that we forcibly advanced due to the max-rule-loop.
-----------------------------------------------------------------------------------------------*/
-void GrPass::RecordHitMaxRuleLoop(int islot)
-{
- m_pzpst->RecordRule(islot, PassState::kHitMaxRuleLoop);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Record the fact that we forcibly advanced due to the max-backup.
-
- In theory it should be possible to call this, but in reality, it is pretty hard to be
- able to say that there is a rule that would have fired except it was prevent by
- MaxBackup. So currently this method is not called.
-----------------------------------------------------------------------------------------------*/
-void GrPass::RecordHitMaxBackup(int islot)
-{
- m_pzpst->RecordRule(islot, PassState::kHitMaxBackup);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Record some rule-related activity on a slot.
-----------------------------------------------------------------------------------------------*/
-void PassState::RecordRule(int islot, int irul, bool fFired)
-{
- if (m_crulrec >= 128)
- return;
-
- m_rgrulrec[m_crulrec].m_irul = irul;
- m_rgrulrec[m_crulrec].m_islot = islot;
- m_rgrulrec[m_crulrec].m_fFired = true;
- m_rgrulrec[m_crulrec].m_fFired = fFired;
- m_crulrec++;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Record the fact that a slot was deleted before the given slot (in the output).
-----------------------------------------------------------------------------------------------*/
-void PassState::RecordDeletionBefore(int islot)
-{
- if (islot >= 128)
- return;
-
- (m_rgcslotDeletions[islot])++;
-}
-
-/*----------------------------------------------------------------------------------------------
- Record the fact that the given slot was inserted into the output.
-----------------------------------------------------------------------------------------------*/
-void PassState::RecordInsertionAt(int islot)
-{
- if (islot >= 128)
- return;
-
- m_rgfInsertion[islot] = true;
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/GrPass.h b/Build/source/libs/graphite-engine/src/segment/GrPass.h
deleted file mode 100644
index d4d6a16a9dc..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrPass.h
+++ /dev/null
@@ -1,748 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrPass.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- The GrPass class and subclasses.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef PASS_INCLUDED
-#define PASS_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- This class stores the state of processing in a single pass.
-
- Hungarian: zpst
-----------------------------------------------------------------------------------------------*/
-
-class PassState {
- friend class GrPass;
- friend class GrGlyphGenPass;
- friend class GrLineBreakPass;
- friend class GrSubPass;
- friend class GrBidiPass;
- friend class GrPosPass;
- friend class FontMemoryUsage;
-
-public:
- PassState()
- {
- }
-
- void InitForNewSegment(int ipass, int nMaxChunk);
- void InitializeLogInfo();
-
- int MaxChunk()
- {
- return m_nMaxChunk;
- }
-
- void SetResyncSkip(int c)
- {
- m_cslotSkipToResync = c;
- m_fDidResyncSkip = false;
- }
- int NeededToResync()
- {
- if (m_fDidResyncSkip)
- return 0;
- return m_cslotSkipToResync;
- }
- bool DidResyncSkip()
- {
- return m_fDidResyncSkip;
- }
- bool CanResyncSkip(GrSlotStream * psstrmOutput)
- {
- if (m_fDidResyncSkip)
- return true; // already did it
- // Are we in the position to do the resync-skip?
- return m_cslotSkipToResync <= psstrmOutput->WritePos();
- }
- int DoResyncSkip(GrSlotStream * psstrmOutput);
- void UndoResyncSkip()
- {
- m_fDidResyncSkip = false;
- }
-
- void UnwindLogInfo(int islotIn, int islotOut);
- void RecordRule(int islot, int irul, bool fFired = false);
- void RecordDeletionBefore(int islot);
- void RecordInsertionAt(int islot);
-#ifdef TRACING
- void LogRulesFiredAndFailed(std::ostream & strmOut, GrSlotStream * psstrmIn);
- void LogInsertionsAndDeletions(std::ostream & strmOut, GrSlotStream * psstrmOut);
- void LogXmlRules(std::ostream & strmOut, GrTableManager *, GrSlotStream * psstrmIn, int nIndent);
- void LogXmlGlyphs(std::ostream & strmOut, GrTableManager * ptman, GrSlotStream * psstrmOut,
- int ipassJust1, bool fPreJust, bool fPostJust, bool fBidi, bool fBidiNext, int cslotsSkipped,
- int nIndent);
-#endif // TRACING
-
-protected:
- int m_ipass;
-
- // Used to avoid infinite loops. If m_nRulesSinceAdvance > m_nMaxRuleLoop,
- // and we have not passed the stream's ReadPosMax, forcibly advance.
- int m_nRulesSinceAdvance;
-
- // Maximum length of chunk, used when unwinding the streams during backtracking. This
- // must be initialized to m_nMaxRuleContext, but that is not always adequate, because
- // when there is reprocessing going on the chunks may be longer.
- int m_nMaxChunk;
-
- // Indicates how much of the pass's initial output should be automatically
- // skipped over in order to resync with a chunk boundary. This handles the situation
- // where we are reprocessing a little of the previous segment in order to handle
- // cross-line-boundary contextuals. The goal is to skip over the output until we hit
- // what we know (from processing the previous segment) is a chunk boundary.
- //
- // In most cases (and always when this is the first segment of the
- // writing system) this number is 0.
- int m_cslotSkipToResync;
- bool m_fDidResyncSkip;
-
- enum {
- kHitMaxBackup = -1,
- kHitMaxRuleLoop = -2
- };
-
- // For logging transduction process: record of one rule matched or fired
- struct RuleRecord
- {
- int m_irul; // rule index, or kHitMaxBackup or kHitMaxRuleLoop
- int m_islot; // slot index of input stream
- bool m_fFired;
- };
- RuleRecord m_rgrulrec[128];
- int m_crulrec;
-
- int m_rgcslotDeletions[128]; // number of deletions before slot i in output
- bool m_rgfInsertion[128]; // true if slot i in output was inserted
-};
-
-/*----------------------------------------------------------------------------------------------
- This class handles finding and applying rules from the pass and storing
- the results in the appropriate stream.
-
- Hungarian: pass
-----------------------------------------------------------------------------------------------*/
-class GrPass {
- friend class FontMemoryUsage;
-
-protected:
- // Action command codes; these MUST match the corresponding definitions in the compiler:
- enum ActionCommand {
- kopNop = 0,
-
- kopPushByte, kopPushByteU, kopPushShort, kopPushShortU, kopPushLong,
-
- kopAdd, kopSub, kopMul, kopDiv,
- kopMin, kopMax,
- kopNeg,
- kopTrunc8, kopTrunc16,
-
- kopCond,
-
- kopAnd, kopOr, kopNot,
- kopEqual, kopNotEq,
- kopLess, kopGtr, kopLessEq, kopGtrEq,
-
- kopNext, kopNextN, kopCopyNext,
- kopPutGlyph8bitObs, kopPutSubs8bitObs, kopPutCopy,
- kopInsert, kopDelete,
- kopAssoc,
- kopCntxtItem,
-
- kopAttrSet, kopAttrAdd, kopAttrSub,
- kopAttrSetSlot,
- kopIAttrSetSlot,
- kopPushSlotAttr, kopPushGlyphAttrObs,kopPushGlyphMetric, kopPushFeat,
- kopPushAttToGAttrObs, kopPushAttToGlyphMetric,
- kopPushISlotAttr,
-
- kopPushIGlyphAttr, // not implemented
-
- kopPopRet, kopRetZero, kopRetTrue,
- kopIAttrSet, kopIAttrAdd, kopIAttrSub,
- kopPushProcState, kopPushVersion,
- kopPutSubs, kopPutSubs2, kopPutSubs3,
- kopPutGlyph, kopPushGlyphAttr, kopPushAttToGlyphAttr
-
- };
-
- enum StackMachineFlag {
- ksmfDone = 0,
- ksmfContinue,
- ksmfUnderflow,
- ksmfStackNotEmptied
- };
-
-public:
- // Constructor:
- GrPass(int i);
- // Destructor:
- virtual ~GrPass();
-
- int PassNumber() { return m_ipass; }
-
- bool ReadFromFont(GrIStream & grstrm, int fxdSilfVersion, int fxdRuleVersion, int nOffset);
- void InitializeWithNoRules();
-
- virtual void SetTopDirLevel(int n)
- { // only GrBidiPass does anything interesting
- }
-
- void SetPassState(PassState * pzpst)
- {
- m_pzpst = pzpst;
- }
-
- virtual void ExtendOutput(GrTableManager *,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput, int nslotToGet,
- TrWsHandling twsh,
- int * pnRet, int * pcslotGot, int * pislotFinalBreak);
-
- int ExtendGlyphIDOutput(GrTableManager *, GrCharStream *,
- GrSlotStream *, int ichSegLim, int cchwPostXlbContext,
- LineBrk lb, int cslotToGet, bool fNeedFinalBreak,
- TrWsHandling twsh, int * pislotFinalBreak);
-
- int ExtendFinalOutput(GrTableManager *, GrSlotStream * psstrmInput,
- GrSlotStream * psstrmOutput,
- float xsSpaceAllotted, bool fWidthIsCharCount, bool fInfiniteWidth,
- bool fHaveLineBreak, bool fMustBacktrack,
- LineBrk lbMax, TrWsHandling twsh,
- int * pislotLB, float * pxsWidth);
-
- int RemoveTrailingWhiteSpace(GrTableManager * ptman, GrSlotStream * psstrmOut,
- TrWsHandling twsh, int * pislotFinalBreak);
-
- virtual int Unwind(GrTableManager * ptman,
- int islotChanged, GrSlotStream *psstrmInput, GrSlotStream * psstrmOutput,
- bool fFirst);
-
- int MaxBackup()
- {
- return m_nMaxBackup;
- }
-
- bool DidResyncSkip()
- {
- return m_pzpst->DidResyncSkip();
- }
- int DoResyncSkip(GrSlotStream * psstrmOutput)
- {
- return m_pzpst->DoResyncSkip(psstrmOutput);
- }
-
- void UndoResyncSkip()
- {
- m_pzpst->UndoResyncSkip();
- }
- void SetResyncSkip(int n)
- {
- m_pzpst->SetResyncSkip(n);
- }
-
- virtual void DoCleanUpSegMin(GrTableManager * ptman,
- GrSlotStream * psstrmIn, int islotInitReadPos, GrSlotStream * psstrmOut)
- {
- }
-
- virtual bool IsPosPass()
- {
- return false;
- }
-
- virtual bool PreBidiPass() = 0;
-
- bool RunConstraint(GrTableManager *, int ruln,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int cslotPreModContext, int cslotMatched);
-
- int RunCommandCode(GrTableManager * ptman,
- byte * pbStart, bool fConstraints,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islot);
-
-protected:
- int RunOneCommand(GrTableManager * ptman, bool fConstraints,
- ActionCommand op, byte ** ppbArg, bool * pfMustGet, bool * pfInserting,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islot,
- std::vector<int> & vnStack, StackMachineFlag * psmf);
- void DoStackArithmetic2Args(ActionCommand op, std::vector<int> & vnStack,
- StackMachineFlag * psmf);
- void DoStackArithmetic1Arg(ActionCommand op, std::vector<int> & vnStack,
- StackMachineFlag * psmf);
- void DoConditional(std::vector<int> & vnStack, StackMachineFlag * psmf);
- StackMachineFlag CheckStack(std::vector<int> & vnStack, int cn);
- void DoNext(GrTableManager * ptman,
- int cslot, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPutGlyph(GrTableManager * ptman, bool fInserting, int nReplacementClass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPutCopy(GrTableManager * ptman, bool fInserting, int cslotCopyFrom,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPutSubs(GrTableManager * ptman, bool fInserting,
- int cslotSel, int nSelClass, int nReplacementClass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPutSubs2(GrTableManager * ptman, bool fInserting,
- int cslotSel1, int nSelClass1, int cslotSel2, int nSelClass2, int nReplacementClass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPutSubs3(GrTableManager * ptman, bool fInserting,
- int cslotSel1, int nSelClass1, int cslotSel2, int nSelClass2, int cslotSel3, int nSelClass3,
- int nReplacementClass, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPutSubsInit(GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, bool fInserting,
- GrSlotState ** ppslotNextPut, bool * pfAtSegMin, bool * pfAtSegLim);
- void DoPutSubsAux(GrTableManager * ptman, bool fInserting, gid16 nGlyphReplacement,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, GrSlotState * pslotNextInput,
- bool fAtSegMin, bool fAtSegLim);
- void SetNeutralAssocs(GrSlotState * pslotNew, GrSlotStream * psstrmIn);
- void DoDelete(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoAssoc(int cnAssocs, std::vector<int> & vnAssocs, bool fInserting,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoSetAttr(GrTableManager * ptman,
- ActionCommand op, bool fInserrting,
- SlotAttrName slat, int slati, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPushSlotAttr(GrTableManager * ptman,
- int nSlotRef, bool fInserting,
- SlotAttrName slat, int slati, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPushGlyphAttr(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPushAttToGlyphAttr(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPushGlyphMetric(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr, int nAttLevel, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPushAttToGlyphMetric(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr, int nAttLevel, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPushFeatValue(GrTableManager * ptman, int islot, bool fInsering,
- int nFeat, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- void DoPushProcState(GrTableManager * ptman, int nPState, std::vector<int> & vnStack);
-protected:
- void DoPushGlyphMetricAux(GrTableManager * ptman,
- GrSlotState * pslot, int nGlyphAttr, int nAttLevel,
- std::vector<int> & vnStack, GrSlotStream * psstrmIn);
-public:
- int SortKeyForRule(int ruln)
- {
- Assert(ruln < m_crul);
- return m_prgchwRuleSortKeys[ruln];
- }
- int PreModContextForRule(int ruln)
- {
- Assert(ruln < m_crul);
- return m_prgcritRulePreModContext[ruln];
- }
-
- int MaxRulePreContext()
- {
- if (m_pfsm)
- return m_pfsm->MaxRulePreContext();
- else
- return 0;
- }
-
- void RecordRuleFailed(int islot, int irul);
- void RecordRuleFired(int islot, int irul);
- void RecordHitMaxRuleLoop(int islot);
- void RecordHitMaxBackup(int islot);
-#ifdef TRACING
- void LogRulesFiredAndFailed(std::ostream & strmOut, GrSlotStream * psstrmIn);
- void LogInsertionsAndDeletions(std::ostream & strmOut, GrSlotStream * psstrmOut);
- void LogXmlRules(std::ostream & strmOut, GrTableManager * ptman,
- GrSlotStream * psstrmIn, int nIndent);
- void LogXmlGlyphs(std::ostream & strmOut, GrTableManager * ptman, GrSlotStream * psstrmOut,
- int ipassJust1, bool fPreJust, bool fPostJust, int cslotsSkipped, int nIndent);
-#endif // TRACING
-
-protected:
- int CheckRuleValidity(int ruln);
-
- virtual void RunRule(GrTableManager *, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput) = 0;
-
- void CheckInputProgress(GrSlotStream* input, GrSlotStream* psstrmOutput,
- int islotOrigInput);
-
- void MapChunks(GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- int islotChunkI, int islotChunkO, int cslotReprocessed);
-
- virtual void Unattach(GrSlotStream * psstrmIn, int islotIn, // GrPosPass overrides
- GrSlotStream * psstrmOut, int islotOut, int islotLB)
- {
- }
-
- friend class EngineState; // let it call the method below
- virtual int MaxRuleContext() // GrBidiPass overrides
- {
- return m_nMaxRuleContext;
- }
-
-protected:
- // Instance variables:
-
- int m_ipass; // index of pass
-
- int m_fxdVersion;
-
- // number of items required from previous pass; don't access directly, use the getter
- // method, because GrBidiPass overrides to always use 1.
- int m_nMaxRuleContext;
-
- GrFSM * m_pfsm; // Finite State Machine to give next rule
-
- int m_nMaxRuleLoop; // maximum number of rules to process before forcibly
- // advancing input position
-
- int m_nMaxBackup;
-
- int m_crul; // number of rules
-
- // rule sort keys, indicating precedence of rules; m_crul of these
- data16 * m_prgchwRuleSortKeys;
-
- // for each rule, the number of items in the context before the first modified item
- // that the constraints need to be tested on
- byte * m_prgcritRulePreModContext;
-
- // offset for pass-level constraints; just 1 of these
- data16 m_cbPassConstraint;
- // offsets for constraint and action code; m_crul+1 of each of these (the last
- // indicates the total byte count)
- data16 * m_prgibConstraintStart;
- data16 * m_prgibActionStart;
-
- // blocks of constraint and action code
- byte * m_prgbPConstraintBlock; // pass-level constraints
- byte * m_prgbConstraintBlock; // rule constraints
- byte * m_prgbActionBlock;
-
- int m_cbConstraints; // needed for memory instrumentation only
- int m_cbActions; // needed for memory instrumentation only
-
- bool m_fHasDebugStrings;
- data16 * m_prgibConstraintDebug; // m_crul+1 of these
- data16 * m_prgibRuleDebug; // m_crul+1 of these
-
- bool m_fCheckRules;
- bool * m_prgfRuleOkay;
-
- std::vector<int> m_vnStack; // for stack machine processing (more efficient than creating the
- // vector each time)
-
- // state of process for this pass
- PassState * m_pzpst;
-
-public:
-#ifdef OLD_TEST_STUFF
- // For test procedures:
- StrAnsi m_staBehavior;
-
- virtual void SetUpTestData();
-
- // overridden on appropriate subclasses:
- virtual void SetUpReverseNumbersTest() { Assert(false); }
- virtual void SetUpBidiNumbersTest() { Assert(false); }
-
- virtual void SetUpCrossLineContextTest() { Assert(false); }
- virtual void SetUpReprocessTest() { Assert(false); }
- virtual void SetUpLineEdgeContextTest(int ipass) { Assert(false); }
- virtual void SetUpBidiAlgorithmTest() { Assert(false); }
- virtual void SetUpPseudoGlyphsTest() { Assert(false); }
- virtual void SetUpSimpleFSMTest() { Assert(false); }
- virtual void SetUpRuleActionTest() { Assert(false); }
- virtual void SetUpRuleAction2Test() { Assert(false); }
- virtual void SetUpAssocTest() { Assert(false); }
- virtual void SetUpAssoc2Test() { Assert(false); }
- virtual void SetUpDefaultAssocTest() { Assert(false); }
- virtual void SetUpFeatureTest() { Assert(false); }
- virtual void SetUpLigatureTest() { Assert(false); }
- virtual void SetUpLigature2Test() { Assert(false); }
-#endif // OLD_TEST_STUFF
-
-}; // end of class GrPass
-
-
-/*----------------------------------------------------------------------------------------------
- The initial pass that generates glyph IDs from Unicode input.
-
- Hungarian: pass
-----------------------------------------------------------------------------------------------*/
-class GrGlyphGenPass : public GrPass
-{
- friend class FontMemoryUsage;
-
-public:
- GrGlyphGenPass(int ipass) : GrPass(ipass)
- {
- }
-
- virtual bool PreBidiPass()
- {
- return true;
- }
-
-protected:
- // Irrelevant when generating glyphs.
- virtual void RunRule(GrTableManager *, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
- {
- Assert(false);
- }
-
-}; // end of class GrGlyphGenPass
-
-
-/*----------------------------------------------------------------------------------------------
- A pass containing rules that set the break weight values.
-
- Hungarian: pass
-----------------------------------------------------------------------------------------------*/
-class GrLineBreakPass : public GrPass
-{
- friend class FontMemoryUsage;
-
-public:
- GrLineBreakPass(int ipass) : GrPass(ipass)
- {
- }
-
- virtual bool PreBidiPass()
- {
- return true;
- }
-
-protected:
- virtual void RunRule(GrTableManager *, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput);
-
-public:
-#ifdef OLD_TEST_STUFF
- // For test procedures:
- bool RunTestRules(GrTableManager *, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
- bool RunTestRules(GrTableManager *, int ruln, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
-
- virtual void SetUpCrossLineContextTest();
- bool RunCrossLineContextTest(GrTableManager*, GrSlotStream* psstrmIn,
- GrSlotStream* psstrmOut);
-
- virtual void SetUpReprocessTest();
- bool RunReprocessTest(GrTableManager *, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut);
-
- virtual void SetUpAssocTest();
- virtual void SetUpLigatureTest();
-#endif // OLD_TEST_STUFF
-
-}; // end of class GrLineBreakPass
-
-
-/*----------------------------------------------------------------------------------------------
- A pass containing substitution rules.
-
- Hungarian: pass
-----------------------------------------------------------------------------------------------*/
-class GrSubPass : public GrPass
-{
- friend class FontMemoryUsage;
-
-public:
- GrSubPass(int ipass) : GrPass(ipass)
- {
- }
-
- virtual bool PreBidiPass()
- {
- return true;
- }
-
-protected:
- virtual void RunRule(GrTableManager *, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput);
-
- virtual void DoCleanUpSegMin(GrTableManager * ptman,
- GrSlotStream * psstrmIn, int islotInitReadPos, GrSlotStream * psstrmOut);
-
-public:
-#ifdef OLD_TEST_STUFF
- // For test procedures:
- bool RunTestRules(GrTableManager *, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
- bool RunTestRules(GrTableManager *, int ruln, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
-
- virtual void SetUpReverseNumbersTest();
- bool RunReverseNumbersTest(GrTableManager*, GrSlotStream* psstrmIn,
- GrSlotStream* psstrmOut);
-
- virtual void SetUpBidiNumbersTest();
- bool RunBidiNumbersTest(GrTableManager*, GrSlotStream* psstrmIn,
- GrSlotStream* psstrmOut);
-
- virtual void SetUpCrossLineContextTest();
- bool RunCrossLineContextTest(GrTableManager*, GrSlotStream* psstrmIn,
- GrSlotStream* psstrmOut);
-
- virtual void SetUpReprocessTest();
- bool RunReprocessTest(GrTableManager *, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
-
- virtual void SetUpLineEdgeContextTest(int ipass);
- bool RunLineEdgeContextTest(GrTableManager *, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
-
- virtual void SetUpBidiAlgorithmTest();
- bool RunBidiAlgorithmTest(GrTableManager *, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
-
- virtual void SetUpPseudoGlyphsTest();
- bool RunPseudoGlyphsTest(GrTableManager *, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
-
- virtual void SetUpSimpleFSMTest();
- bool RunSimpleFSMTest(GrTableManager *, int ruln, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
- virtual void SetUpRuleActionTest();
- virtual void SetUpRuleAction2Test();
- virtual void SetUpAssocTest();
- virtual void SetUpAssoc2Test();
- virtual void SetUpDefaultAssocTest();
- virtual void SetUpFeatureTest();
- virtual void SetUpLigatureTest();
- virtual void SetUpLigature2Test();
-#endif // OLD_TEST_STUFF
-
-}; // end of class GrSubPass
-
-
-/*----------------------------------------------------------------------------------------------
- This class is the one the knows how to handle bidi reordering, including backtracking.
-
- Hungarian: pass
-----------------------------------------------------------------------------------------------*/
-class GrBidiPass : public GrSubPass
-{
- friend class FontMemoryUsage;
-
-public:
- // Constructor:
- GrBidiPass(int ipass)
- : GrSubPass(ipass),
- m_nTopDirection(0)
- {
- }
-
- virtual void SetTopDirLevel(int n)
- {
- m_nTopDirection = n;
- }
-
- virtual bool PreBidiPass()
- {
- return false;
- }
-
- virtual void ExtendOutput(GrTableManager *,
- GrSlotStream * psstrmI, GrSlotStream * psstrmO, int nslotToGet,
- TrWsHandling twsh,
- int * pnRet, int * pcslotGot, int * pislotFinalBreak);
-
- virtual int Unwind(GrTableManager * ptman,
- int islotChanged, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- bool fFirst);
-protected:
- virtual int MaxRuleContext()
- {
- return 1;
- }
-
-private:
- //void OldReverse(int nCurrDirection,
- // GrSlotStream * psstrmI, int islotI1, int islotI2,
- // GrSlotStream * psstrmO, int islotO1, int islotO2);
-
- int Reverse(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut,
- std::vector<int> & vislotStarts, std::vector<int> & vislotStops);
-
-protected:
- // Instance variables:
- int m_nTopDirection; // 0 for LTR, 1 for RTL -- CURRENTLY NOT USED; need to
- // initialize it when we set the writing system direction
-
-#ifdef OLD_TEST_STUFF
-public:
- // For test procedures:
- ////virtual void SetUpTestData();
- virtual void SetUpBidiNumbersTest();
- virtual void SetUpBidiAlgorithmTest();
-#endif // OLD_TEST_STUFF
-
-}; // end of class GrBidiPass
-
-
-/*----------------------------------------------------------------------------------------------
- A pass containing positioning rules.
-
- Hungarian: pass
-----------------------------------------------------------------------------------------------*/
-class GrPosPass : public GrPass
-{
- friend class FontMemoryUsage;
-
-public:
- GrPosPass(int ipass) : GrPass(ipass)
- {
- }
-
- virtual bool IsPosPass()
- {
- return true;
- }
-
- virtual bool PreBidiPass()
- {
- return false;
- }
-
-protected:
- virtual void RunRule(GrTableManager *, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput);
-
- virtual void Unattach(GrSlotStream * psstrmIn, int islotIn,
- GrSlotStream * psstrmOut, int islotOut, int islotLB);
-
-public:
-#ifdef OLD_TEST_STUFF
- // For test procedures:
- bool RunTestRules(GrTableManager *, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
- bool RunTestRules(GrTableManager *, int ruln, GrSlotStream * psstrmIn,
- GrSlotStream * psstrmOut);
-#endif // OLD_TEST_STUFF
-
-}; // end of class GrPosPass
-
-} // namespace gr
-
-
-#endif // PASS_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrPassActionCode.cpp b/Build/source/libs/graphite-engine/src/segment/GrPassActionCode.cpp
deleted file mode 100644
index 83c58b27e48..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrPassActionCode.cpp
+++ /dev/null
@@ -1,1492 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrPassActionCode.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A continution of the GrPass file, including functions to run the action commands.
-
-This comment could create a merge conflict. It can be removed.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local type definitions
-//:>********************************************************************************************
-
-typedef signed char Int8; // signed value
-typedef unsigned char Uint8; // unsigned value
-
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- The main function to run a block of action or constraint code and return a result.
-
- @param ptman - table manager, for generating new slots; NULL when
- running constraints
- @param pbStart - address of the first command
- @param fConstraints - true if we are running constraint tests;
- false if we are running rule actions
- @param psstrmIn - input stream
- @param psstrmOut - output stream; when running constraints, used to access items
- in the precontext
- @param islot - slot being processed relative to the start of the rule;
- used only for constraints; must be 0 for rule actions
-----------------------------------------------------------------------------------------------*/
-int GrPass::RunCommandCode(GrTableManager * ptman,
- byte * pbStart, bool fConstraints,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islot)
-{
- byte * pbNext = pbStart;
-
-// std::vector<int> vnStack;
-// vnStack.EnsureSpace(128); // make it nice and big
- m_vnStack.clear();
-
- gAssert(fConstraints || islot == 0);
-
- // There are two states: fMustGet = true means we need to get a slot to work on from
- // the input; fMustGet = false means we have a slot and we need to do a Next before
- // we can get the next one.
- bool fMustGet = !fConstraints;
-
- bool fInserting = false; // set to true by an Insert command
-
- int nRet = 0;
-
- while (true)
- {
- ActionCommand op = ActionCommand(*pbNext++);
- StackMachineFlag smf;
- nRet = RunOneCommand(ptman, fConstraints, op,
- &pbNext, &fMustGet, &fInserting,
- psstrmIn, psstrmOut, islot,
- m_vnStack, &smf);
-
- if (smf == ksmfDone)
- return nRet;
-
- if (smf == ksmfUnderflow)
- {
- Warn("Underflow in Graphite stack machine");
- gAssert(false);
- FontException fexptn;
- fexptn.version = -1;
- fexptn.subVersion = -1;
- fexptn.errorCode = kferrUnknown;
- throw fexptn; // disastrous error in rendering; fall back to dumb rendering
- }
- }
- return nRet; // not needed, but to avoid compiler warning
-}
-
-/*----------------------------------------------------------------------------------------------
- Perform a single command. Specifically, read the arguments from the byte buffer and the
- run the appropriate functions.
-
- @param ptman - table manager, for generating new slots; or NULL
- @param fConstraints - true if we are running constraints; false if we are running
- rule actions
- @param op - command operator
- @param ppbArg - pointer to first argument
- @param pfMustGet - state: getting input or processing it; when running constraints,
- always false
- @param pfInserting - true if current item is to be inserted, or was inserted
- @param psstrmIn - input stream
- @param psstrmOut - output stream
- @param islot - the slot being processed relative to the beginning of the rule;
- only relevant for constraint testing, must be 0 for rule actions
- @param vnStack - the stack of values being manipulated
- @param psmf - error code, done flag, or continue flag
-----------------------------------------------------------------------------------------------*/
-int GrPass::RunOneCommand(GrTableManager * ptman, bool fConstraints,
- ActionCommand op, byte ** ppbArg, bool * pfMustGet, bool * pfInserting,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islot,
- std::vector<int> & vnStack, StackMachineFlag * psmf)
-{
- *psmf = ksmfContinue;
-
- // General purpose variables:
- int arg1, arg2, arg3, arg4;
- int nSlotRef;
- int nInputClass;
- int nOutputClass;
- int c;
- int islotArg;
- int nIndex;
- int nGlyphAttr;
- int nAttLevel;
- int nFeat;
- int nPState;
- SlotAttrName slat;
-
- int i;
- std::vector<int> vnTmp;
-
- byte * pbNext = *ppbArg;
-
- int nRet = 0;
-
- switch (op)
- {
- case kopNop:
- break;
-
- case kopPushByte:
- arg1 = Int8(*pbNext++);
- vnStack.push_back(arg1);
- break;
- case kopPushByteU:
- arg1 = Uint8(*pbNext++);
- vnStack.push_back(arg1);
- break;
- case kopPushShort:
- arg1 = Int8(*pbNext++);
- arg2 = Uint8(*pbNext++);
- vnStack.push_back((arg1 << 8) + arg2);
- break;
- case kopPushShortU:
- arg1 = Uint8(*pbNext++);
- arg2 = Uint8(*pbNext++);
- vnStack.push_back((arg1 << 8) + arg2);
- break;
- case kopPushLong:
- arg1 = Int8(*pbNext++);
- arg2 = Uint8(*pbNext++);
- arg3 = Uint8(*pbNext++);
- arg4 = Uint8(*pbNext++);
- vnStack.push_back((arg1 << 24) + (arg2 << 16) + (arg3 << 8) + arg4);
- break;
-
- case kopNeg:
- case kopTrunc8: case kopTrunc16:
- case kopNot:
- DoStackArithmetic1Arg(op, vnStack, psmf);
- if (*psmf != ksmfContinue)
- return 0;
- break;
-
- case kopAdd: case kopSub:
- case kopMul: case kopDiv:
- case kopMin: case kopMax:
- case kopAnd: case kopOr:
- case kopEqual: case kopNotEq:
- case kopLess: case kopGtr:
- case kopLessEq: case kopGtrEq:
- DoStackArithmetic2Args(op, vnStack, psmf);
- if (*psmf != ksmfContinue)
- return 0;
- break;
-
- case kopCond:
- DoConditional(vnStack, psmf);
- if (*psmf != ksmfContinue)
- return 0;
- break;
-
- case kopNext:
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(!*pfMustGet);
- DoNext(ptman, 1, psstrmIn, psstrmOut);
- *pfMustGet = true;
- *pfInserting = false;
- }
- break;
- case kopNextN:
- c = Int8(*pbNext++);
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(false); // for now we don't allow anything other than moving one slot
- gAssert(!*pfMustGet); // forward at a time
- DoNext(ptman, c, psstrmIn, psstrmOut);
- *pfMustGet = true;
- }
- break;
- case kopPutGlyph8bitObs:
- case kopPutGlyph:
- if (op == kopPutGlyph8bitObs)
- nOutputClass = Uint8(*pbNext++);
- else
- {
- nOutputClass = (Uint8(*pbNext++) << 8);
- nOutputClass += Uint8(*pbNext++);
- }
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(*pfMustGet);
- DoPutGlyph(ptman, *pfInserting, nOutputClass, psstrmIn, psstrmOut);
- *pfMustGet = false;
- }
- break;
- case kopPutCopy:
- nSlotRef = Int8(*pbNext++);
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(*pfMustGet);
- DoPutCopy(ptman, *pfInserting, nSlotRef, psstrmIn, psstrmOut);
- *pfMustGet = false;
- }
- break;
- case kopPutSubs8bitObs:
- case kopPutSubs:
- nSlotRef = Int8(*pbNext++);
- if (op == kopPutSubs8bitObs)
- {
- nInputClass = Uint8(*pbNext++);
- nOutputClass = Uint8(*pbNext++);
- }
- else
- {
- nInputClass = (Uint8(*pbNext++) << 8);
- nInputClass += Uint8(*pbNext++);
- nOutputClass = (Uint8(*pbNext++) << 8);
- nOutputClass += Uint8(*pbNext++);
- }
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(*pfMustGet);
- DoPutSubs(ptman, *pfInserting, nSlotRef, nInputClass, nOutputClass,
- psstrmIn, psstrmOut);
- *pfMustGet = false;
- }
- break;
- case kopCopyNext:
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(*pfMustGet);
- gAssert(!*pfInserting); // 0 means copy this slot
- DoPutCopy(ptman, *pfInserting, 0, psstrmIn, psstrmOut);
- DoNext(ptman, 1, psstrmIn, psstrmOut);
- // *pfMustGet still = true
- }
- break;
- case kopInsert:
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(*pfMustGet);
- *pfInserting = true;
- // *pfMustGet still = true
-
- if (ptman->LoggingTransduction())
- m_pzpst->RecordInsertionAt(psstrmOut->WritePos());
- }
- break;
- case kopDelete:
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(*pfMustGet);
- DoDelete(ptman, psstrmIn, psstrmOut);
- *pfMustGet = false;
- }
- break;
- case kopAssoc:
- c = Uint8(*pbNext++);
- // std::vector<int> vnTmp;
- for (i = 0; i < c; i++)
- vnTmp.push_back(Int8(*pbNext++));
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(!*pfMustGet);
- DoAssoc(c, vnTmp, *pfInserting, psstrmIn, psstrmOut);
- }
- break;
- case kopCntxtItem:
- islotArg = Int8(*pbNext++);
- c = Uint8(*pbNext++);
- if (fConstraints)
- {
- // Old approach:
- // If this is NOT the relevant item, push TRUE, which causes the subsequent tests
- // (which are eventually ORed with it) to become irrelevant.
- //vnStack.Push((int)(islotArg != islot));
-
- // If this is not the relevant item, skip the specified number of bytes.
- if (islotArg != islot)
- {
- pbNext += c;
- vnStack.push_back(1);
- }
- }
- else
- {
- gAssert(false);
- }
- break;
-
- case kopAttrSet:
- case kopAttrAdd:
- case kopAttrSub:
- case kopAttrSetSlot:
- slat = SlotAttrName(Uint8(*pbNext++)); // slot attribute ID
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(!*pfMustGet);
- DoSetAttr(ptman, op, *pfInserting, slat, -1, vnStack, psstrmIn, psstrmOut);
- if (*psmf != ksmfContinue)
- return 0;
- }
- break;
- case kopIAttrSet:
- case kopIAttrAdd:
- case kopIAttrSub:
- case kopIAttrSetSlot:
- slat = SlotAttrName(Uint8(*pbNext++)); // slot attribute ID
- nIndex = Uint8(*pbNext++); // index; eg, global ID for component
- if (fConstraints)
- {
- gAssert(false);
- }
- else
- {
- gAssert(!*pfMustGet);
- DoSetAttr(ptman, op, *pfInserting, slat, nIndex, vnStack,
- psstrmIn, psstrmOut);
- if (*psmf != ksmfContinue)
- return 0;
- }
- break;
-
- case kopPushSlotAttr:
- slat = SlotAttrName(Uint8(*pbNext++));
- nSlotRef = Int8(*pbNext++);
- if (fConstraints)
- nSlotRef += islot + 1; // +1 to peek ahead to a slot we haven't "got" yet
- DoPushSlotAttr(ptman, nSlotRef, *pfInserting, slat, -1, vnStack, psstrmIn, psstrmOut);
- if (*psmf != ksmfContinue)
- return 0;
- break;
- case kopPushISlotAttr:
- slat = SlotAttrName(Uint8(*pbNext++));
- nSlotRef = Int8(*pbNext++);
- nIndex = Uint8(*pbNext++);
- if (fConstraints)
- nSlotRef += islot + 1; // +1 to peek ahead to a slot we haven't "got" yet
- DoPushSlotAttr(ptman, nSlotRef, *pfInserting, slat, nIndex, vnStack, psstrmIn, psstrmOut);
- if (*psmf != ksmfContinue)
- return 0;
- break;
-
- case kopPushGlyphAttrObs:
- case kopPushAttToGAttrObs:
- case kopPushGlyphAttr:
- case kopPushAttToGlyphAttr:
- if (op == kopPushGlyphAttrObs || op == kopPushAttToGAttrObs)
- nGlyphAttr = Uint8(*pbNext++);
- else {
- nGlyphAttr = (Uint8(*pbNext++) << 8);
- nGlyphAttr += Uint8(*pbNext++);
- }
- nSlotRef = Int8(*pbNext++);
- if (fConstraints)
- nSlotRef += islot + 1; // +1 to peek ahead to a slot we haven't "got" yet
- if (op == kopPushAttToGlyphAttr || op == kopPushAttToGAttrObs)
- DoPushAttToGlyphAttr(ptman, nSlotRef, *pfInserting, nGlyphAttr,
- vnStack, psstrmIn, psstrmOut);
- else
- DoPushGlyphAttr(ptman, nSlotRef, *pfInserting, nGlyphAttr, vnStack,
- psstrmIn, psstrmOut);
- if (*psmf != ksmfContinue)
- return 0;
- break;
- case kopPushGlyphMetric:
- case kopPushAttToGlyphMetric:
- nGlyphAttr = Uint8(*pbNext++);
- nSlotRef = Int8(*pbNext++);
- nAttLevel = Int8(*pbNext++);
- if (fConstraints)
- nSlotRef += islot + 1; // +1 to peek ahead to a slot we haven't "got" yet
- if (op == kopPushAttToGlyphMetric)
- DoPushAttToGlyphMetric(ptman, nSlotRef, *pfInserting, nGlyphAttr, nAttLevel,
- vnStack, psstrmIn, psstrmOut);
- else
- DoPushGlyphMetric(ptman, nSlotRef, *pfInserting, nGlyphAttr, nAttLevel,
- vnStack, psstrmIn, psstrmOut);
- if (*psmf != ksmfContinue)
- return 0;
- break;
- case kopPushFeat:
- nFeat = Uint8(*pbNext++);
- nSlotRef = Int8(*pbNext++);
- if (fConstraints)
- nSlotRef += islot + 1; // +1 to peek ahead to a slot we haven't "got" yet
-// else
-// nSlotRef = 0;
- DoPushFeatValue(ptman, nSlotRef, *pfInserting, nFeat, vnStack, psstrmIn, psstrmOut);
- if (*psmf != ksmfContinue)
- return 0;
- break;
- case kopPushProcState:
- nPState = Uint8(*pbNext++);
- gAssert(fConstraints);
- DoPushProcState(ptman, nPState, vnStack);
- break;
- case kopPushVersion:
- vnStack.push_back(kRuleVersion);
- break;
- case kopPopRet:
- if ((*psmf = CheckStack(vnStack, 1)) != ksmfContinue)
- return 0;
- nRet = vnStack.back();
- vnStack.pop_back();
- if (vnStack.size() != 0)
- {
- gAssert(false);
- *psmf = ksmfStackNotEmptied;
- }
- else
- *psmf = ksmfDone;
- break;
- case kopRetZero:
- nRet = 0;
- if (vnStack.size() != 0)
- {
- gAssert(false);
- *psmf = ksmfStackNotEmptied;
- }
- else
- *psmf = ksmfDone;
- break;
- case kopRetTrue:
- nRet = 1;
- if (vnStack.size() != 0)
- {
- gAssert(false);
- *psmf = ksmfStackNotEmptied;
- }
- else
- *psmf = ksmfDone;
- break;
-
- default:
- gAssert(false);
- }
-
- *ppbArg = pbNext;
- return nRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Perform arithmetic functions that take two arguments.
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoStackArithmetic2Args(ActionCommand op, std::vector<int> & vnStack,
- StackMachineFlag * psmf)
-{
- if ((*psmf = CheckStack(vnStack, 2)) != ksmfContinue)
- return;
-
- int nArg2 = vnStack.back();
- vnStack.pop_back();
- int nArg1 = vnStack.back();
- vnStack.pop_back();
-
- int nResult;
-
- switch (op)
- {
- case kopAdd: nResult = nArg1 + nArg2; break;
- case kopSub: nResult = nArg1 - nArg2; break;
- case kopMul: nResult = nArg1 * nArg2; break;
- case kopDiv: nResult = nArg1 / nArg2; break;
- case kopMin: nResult = min(nArg1, nArg2); break;
- case kopMax: nResult = max(nArg1, nArg2); break;
- case kopAnd: nResult = (nArg1 != 0 && nArg2 != 0)? 1: 0; break;
- case kopOr: nResult = (nArg1 != 0 || nArg2 != 0)? 1: 0; break;
- case kopEqual: nResult = (nArg1 == nArg2)? 1: 0; break;
- case kopNotEq: nResult = (nArg1 != nArg2)? 1: 0; break;
- case kopLess: nResult = (nArg1 < nArg2)? 1: 0; break;
- case kopLessEq: nResult = (nArg1 <= nArg2)? 1: 0; break;
- case kopGtr: nResult = (nArg1 > nArg2)? 1: 0; break;
- case kopGtrEq: nResult = (nArg1 >= nArg2)? 1: 0; break;
- default:
- Assert(false);
- }
-
- vnStack.push_back(nResult);
-}
-
-/*----------------------------------------------------------------------------------------------
- Perform arithmetic functions that take one argument.
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoStackArithmetic1Arg(ActionCommand op, std::vector<int> & vnStack,
- StackMachineFlag * psmf)
-{
- if ((*psmf = CheckStack(vnStack, 1)) != ksmfContinue)
- return;
-
- int nArg = vnStack.back();
- vnStack.pop_back();
- int nResult;
-
- switch (op)
- {
- case kopNeg: nResult = nArg * -1; break;
- case kopTrunc8: nResult = nArg & 0xFF; break;
- case kopTrunc16: nResult = nArg & 0xFFFF; break;
- case kopNot: nResult = (nArg == 0)? 1: 0; break;
- default:
- Assert(false);
- }
-
- vnStack.push_back(nResult);
-}
-
-/*----------------------------------------------------------------------------------------------
- Perform the conditional statement.
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoConditional(std::vector<int> & vnStack, StackMachineFlag * psmf)
-{
- if ((*psmf = CheckStack(vnStack, 3)) != ksmfContinue)
- return;
-
- int nArg3 = vnStack.back();
- vnStack.pop_back();
- int nArg2 = vnStack.back();
- vnStack.pop_back();
- int nArg1 = vnStack.back();
- vnStack.pop_back();
-
- if (nArg1 == 0)
- vnStack.push_back(nArg3);
- else
- vnStack.push_back(nArg2);
-}
-
-/*----------------------------------------------------------------------------------------------
- Check to make sure the stack has the appropriate number of items on it; if not,
- return a stack error flag.
-----------------------------------------------------------------------------------------------*/
-GrPass::StackMachineFlag GrPass::CheckStack(std::vector<int> & vnStack, int cn)
-{
- if (signed(vnStack.size()) < cn)
- return ksmfUnderflow;
- else
- return ksmfContinue;
-}
-
-/*----------------------------------------------------------------------------------------------
- We are finished processing a slot; go on to the next slot, or possibly go backwards.
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoNext(GrTableManager * ptman,
- int cslot, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- gAssert(cslot == 1); // for now anyway
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the next glyph to be the given class. There should only be one member of the class,
- but if there happens to be more than one, just use the first member.
- All the slot attributes remain unchanged from the current input slot; associations are
- neutralized.
-
- @param ptman - table manager, for generating new slots
- @param fInserting - true if this slot is being inserted, not copied
- @param nReplacementClass - class from which to take replacement glyph (corresponding to
- selector slot's glyph's index in selector class)
- @param psstrmIn / Out - input/output streams
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPutGlyph(GrTableManager * ptman, bool fInserting, int nReplacementClass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- EngineState * pengst = ptman->State();
-
- // If we are exactly at the segment boundary, pass the information on to the output stream.
- // Note that inserted items always go outside the segment, if they are at the boundary
- // (you DON'T want them between the segment boundary and the LB slot!).
- bool fSetSegMin = psstrmIn->AtSegMin() && !fInserting;
- bool fSetSegLim = psstrmIn->AtSegLim();
-
- // Slot to copy features and text properties from:
- GrSlotState * pslotNextInput;
- if (psstrmIn->AtEndOfContext())
- {
- gAssert(fInserting);
- pslotNextInput = psstrmIn->RuleInputSlot(0, psstrmOut);
- }
- else
- pslotNextInput = (fInserting)? psstrmIn->Peek(): psstrmIn->NextGet();
-
- gid16 nGlyphReplacement = ptman->GetClassGlyphIDAt(nReplacementClass, 0);
-
- GrSlotState * pslotNew;
- if (fInserting)
- {
- pengst->NewSlot(nGlyphReplacement, pslotNextInput, m_ipass, &pslotNew);
- // leave associations empty; eventually they will be "neutralized"
- }
- else
- {
- pengst->NewSlotCopy(pslotNextInput, m_ipass, &pslotNew);
- pslotNew->SetGlyphID(nGlyphReplacement);
- ptman->SetSlotAttrsFromGlyphAttrs(pslotNew);
- }
-
- if (fSetSegMin)
- psstrmOut->SetSegMinToWritePos(false);
- if (fSetSegLim)
- psstrmOut->SetSegLimToWritePos(false);
- psstrmOut->NextPut(pslotNew);
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy a glyph from the given slot in the input to the output. All the associations and slot
- attributes are copied from the specified slot as well. Consume a slot from the input
- (which may or may not be the slot we're copying).
-
- @param ptman - table manager, for generating new slots
- @param fInserting - true if this slot is being inserted, not copied
- @param cslotCopyFrom - slot to copy from
- @param psstrmIn / Out - input/output streams
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPutCopy(GrTableManager * ptman, bool fInserting, int cslotCopyFrom,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- EngineState * pengst = ptman->State();
-
- // If we are exactly at the segment boundary, pass the information on to the output stream.
- // Note that inserted items always go outside the segment, if they are at the boundary.
- bool fSetSegMin = psstrmIn->AtSegMin() && !fInserting;
- bool fSetSegLim = psstrmIn->AtSegLim();
-
- if (!fInserting)
- {
- gAssert(!psstrmIn->AtEndOfContext());
- // Absorb next slot
- psstrmIn->NextGet();
- }
-
- GrSlotState * pslotCopyFrom = psstrmIn->RuleInputSlot(cslotCopyFrom, psstrmOut);
-
- GrSlotState * pslotNew;
- pengst->NewSlotCopy(pslotCopyFrom, m_ipass, &pslotNew);
-
- if (fSetSegMin)
- psstrmOut->SetSegMinToWritePos(false);
- if (fSetSegLim)
- psstrmOut->SetSegLimToWritePos(false);
- psstrmOut->NextPut(pslotNew);
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy the current slot from the input to the output, substituting the corresponding glyph
- in the output class. All the associations and slot attributes remain unchanged from the
- current input slot.
-
- @param ptman - table manager, for generating new slots
- @param fInserting - true if this slot is being inserted, not copied
- @param cslotSel - selector slot, relative to current slot
- @param nSelectorClass - class of selector slot
- @param nReplacementClass - class from which to take replacement glyph (corresponding to
- selector slot's glyph's index in selector class)
- @param psstrmIn / Out - input/output streams
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPutSubs(GrTableManager * ptman, bool fInserting,
- int cslotSel, int nSelClass, int nReplacementClass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- bool fAtSegMin, fAtSegLim;
- GrSlotState * pslotNextInput;
- DoPutSubsInit(psstrmIn, psstrmOut, fInserting, &pslotNextInput, &fAtSegMin, &fAtSegLim);
-
- GrSlotState * pslotInSelector = psstrmIn->RuleInputSlot(cslotSel, psstrmOut);
-
- gid16 gidSelector = pslotInSelector->GlyphID();
- int nSelIndex = ptman->GetIndexInGlyphClass(nSelClass, gidSelector);
- gAssert(nSelIndex != -1);
- gid16 gidReplacement = (nSelIndex == -1)?
- gidSelector:
- ptman->GetClassGlyphIDAt(nReplacementClass, nSelIndex);
-
- DoPutSubsAux(ptman, fInserting, gidReplacement, psstrmIn, psstrmOut, pslotNextInput,
- fAtSegMin, fAtSegLim);
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy the current slot from the input to the output, substituting the corresponding glyph
- in the output class based on 2 input classes. All the associations and slot attributes
- remain unchanged from the current input slot.
-
- @param ptman - table manager, for generating new slots
- @param fInserting - true if this slot is being inserted, not copied
- @param cslotSel - selector slot, relative to current slot
- @param nSelectorClass - class of selector slot
- @param nReplacementClass - class from which to take replacement glyph (corresponding to
- selector slot's glyph's index in selector class)
- @param psstrmIn / Out - input/output streams
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPutSubs2(GrTableManager * ptman, bool fInserting,
- int cslotSel1, int nSelClass1, int cslotSel2, int nSelClass2, int nReplacementClass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- bool fAtSegMin, fAtSegLim;
- GrSlotState * pslotNextInput;
- DoPutSubsInit(psstrmIn, psstrmOut, fInserting, &pslotNextInput, &fAtSegMin, &fAtSegLim);
-
- GrSlotState * pslotInSelector1 = psstrmIn->RuleInputSlot(cslotSel1, psstrmOut);
- gid16 gidSelector1 = pslotInSelector1->GlyphID();
- int nSelIndex1 = ptman->GetIndexInGlyphClass(nSelClass1, gidSelector1);
- gAssert(nSelIndex1 != -1);
- //size_t cClassLen1 = ptman->NumberOfGlyphsInClass(nSelClass1);
-
- GrSlotState * pslotInSelector2 = psstrmIn->RuleInputSlot(cslotSel2, psstrmOut);
- gid16 gidSelector2 = pslotInSelector2->GlyphID();
- int nSelIndex2 = ptman->GetIndexInGlyphClass(nSelClass2, gidSelector2);
- gAssert(nSelIndex2 != -1);
- size_t cClassLen2 = ptman->NumberOfGlyphsInClass(nSelClass2);
-
- int nSelIndex = (nSelIndex1 == -1 || nSelIndex2 == -1) ?
- -1 :
- (nSelIndex1 * static_cast<int>(cClassLen2)) + nSelIndex2;
-
- gid16 gidReplacement = (nSelIndex == -1)?
- gidSelector1:
- ptman->GetClassGlyphIDAt(nReplacementClass, nSelIndex);
-
- DoPutSubsAux(ptman, fInserting, gidReplacement, psstrmIn, psstrmOut, pslotNextInput,
- fAtSegMin, fAtSegLim);
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy the current slot from the input to the output, substituting the corresponding glyph
- in the output class based on 2 input classes. All the associations and slot attributes
- remain unchanged from the current input slot.
-
- @param ptman - table manager, for generating new slots
- @param fInserting - true if this slot is being inserted, not copied
- @param cslotSel - selector slot, relative to current slot
- @param nSelectorClass - class of selector slot
- @param nReplacementClass - class from which to take replacement glyph (corresponding to
- selector slot's glyph's index in selector class)
- @param psstrmIn / Out - input/output streams
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPutSubs3(GrTableManager * ptman, bool fInserting,
- int cslotSel1, int nSelClass1, int cslotSel2, int nSelClass2, int cslotSel3, int nSelClass3,
- int nReplacementClass,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- bool fAtSegMin, fAtSegLim;
- GrSlotState * pslotNextInput;
- DoPutSubsInit(psstrmIn, psstrmOut, fInserting, &pslotNextInput, &fAtSegMin, &fAtSegLim);
-
- GrSlotState * pslotInSelector1 = psstrmIn->RuleInputSlot(cslotSel1, psstrmOut);
- gid16 gidSelector1 = pslotInSelector1->GlyphID();
- int nSelIndex1 = ptman->GetIndexInGlyphClass(nSelClass1, gidSelector1);
- gAssert(nSelIndex1 != -1);
- //size_t cClassLen1 = ptman->NumberOfGlyphsInClass(nSelClass1);
-
- GrSlotState * pslotInSelector2 = psstrmIn->RuleInputSlot(cslotSel2, psstrmOut);
- gid16 gidSelector2 = pslotInSelector2->GlyphID();
- int nSelIndex2 = ptman->GetIndexInGlyphClass(nSelClass2, gidSelector2);
- gAssert(nSelIndex2 != -1);
- size_t cClassLen2 = ptman->NumberOfGlyphsInClass(nSelClass2);
-
-// GrSlotState * pslotInSelector3 = psstrmIn->RuleInputSlot(cslotSel3, psstrmOut);
-// gid16 gidSelector3 = pslotInSelector3->GlyphID();
- int nSelIndex3 = ptman->GetIndexInGlyphClass(nSelClass3, gidSelector2);
- gAssert(nSelIndex3 != -1);
- size_t cClassLen3 = ptman->NumberOfGlyphsInClass(nSelClass3);
-
- int nSelIndex = (nSelIndex1 == -1 || nSelIndex2 == -1 || nSelIndex3 == -1) ?
- -1 :
- (((nSelIndex1 * static_cast<int>(cClassLen2)) + nSelIndex2) * static_cast<int>(cClassLen3)) + nSelIndex3;
-
- gid16 gidReplacement = (nSelIndex == -1)?
- gidSelector1:
- ptman->GetClassGlyphIDAt(nReplacementClass, nSelIndex);
-
- DoPutSubsAux(ptman, fInserting, gidReplacement, psstrmIn, psstrmOut, pslotNextInput,
- fAtSegMin, fAtSegLim);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Initial common part of all the DoPutSubs... methods.
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPutSubsInit(GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, bool fInserting,
- GrSlotState ** ppslotNextInput, bool * pfAtSegMin, bool * pfAtSegLim)
-{
- // Do this before reading from stream.
- *pfAtSegMin = psstrmIn->AtSegMin();
- *pfAtSegLim = psstrmIn->AtSegLim();
-
- // Slot to copy features and text properties from:
- if (psstrmIn->AtEndOfContext())
- {
- gAssert(fInserting);
- *ppslotNextInput = psstrmIn->RuleInputSlot(0, psstrmOut);
- }
- else
- *ppslotNextInput = (fInserting)? psstrmIn->Peek(): psstrmIn->NextGet();
-}
-
-/*----------------------------------------------------------------------------------------------
- Common part of all the DoPutSubs... methods.
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPutSubsAux(GrTableManager * ptman, bool fInserting, gid16 nGlyphReplacement,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, GrSlotState * pslotNextInput,
- bool fAtSegMin, bool fAtSegLim)
-{
- EngineState * pengst = ptman->State();
-
- // If we are exactly at the segment boundary, pass the information on to the output stream.
- // Note that inserted items always go outside the segment, if they are at the boundary.
- bool fSetSegMin = fAtSegMin && !fInserting;
- bool fSetSegLim = fAtSegLim;
-
- GrSlotState * pslotNew;
- if (fInserting)
- {
- pengst->NewSlot(nGlyphReplacement, pslotNextInput, m_ipass, &pslotNew);
- // leave associations empty; eventually they will be "neutralized"
- }
- else
- {
- pengst->NewSlotCopy(pslotNextInput, m_ipass, &pslotNew);
- pslotNew->SetGlyphID(nGlyphReplacement);
- ptman->SetSlotAttrsFromGlyphAttrs(pslotNew);
- }
-
- if (fSetSegMin)
- psstrmOut->SetSegMinToWritePos(false);
- if (fSetSegLim)
- psstrmOut->SetSegLimToWritePos(false);
- psstrmOut->NextPut(pslotNew);
-}
-
-/*----------------------------------------------------------------------------------------------
- A slot has just been inserted. Clear all the associations; eventually (unless we go on
- to set the associations explicitly) we will set its before-assoc to the slot after it
- and its after-assoc to the slot before it. This makes it basically unselectable.
- OBSOLETE - handled by slot initialization code
-----------------------------------------------------------------------------------------------*/
-void GrPass::SetNeutralAssocs(GrSlotState * pslotNew, GrSlotStream * psstrmIn)
-{
- pslotNew->ClearAssocs();
-}
-
-/*----------------------------------------------------------------------------------------------
- Delete the next slot in the input.
-
- @param psstrmIn - input stream
- @param psstrmOut - output stream
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoDelete(GrTableManager * ptman, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- if (psstrmIn->AtSegMin())
- psstrmOut->SetSegMinToWritePos();
- if (psstrmIn->AtSegLim())
- psstrmOut->SetSegLimToWritePos();
-
- GrSlotState * pslot = psstrmIn->NextGet();
- pslot->MarkDeleted();
-
- if (ptman->LoggingTransduction())
- m_pzpst->RecordDeletionBefore(psstrmOut->WritePos());
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the associations for the current slot. Any previous associations will be overwritten.
-
- @param cn - number of associations
- @param vnAssoc - list of associations
- @param fInserting - whether current slot was inserted
- @param psstrmIn / Out - input/output streams
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoAssoc(int cnAssocs, std::vector<int> & vnAssocs, bool fInserting,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- gAssert((unsigned)cnAssocs == vnAssocs.size());
-
- // Sort the list of associations. It's okay to use a simple bubble sort
- // since we expect the list to be very short. Ideally we should remove duplicates
- // too but I don't think duplicates actually hurt anything.
- for (int i1 = 0; i1 < cnAssocs - 1; i1++)
- {
- for (int i2 = i1 + 1; i2 < cnAssocs; i2++)
- {
- if (vnAssocs[i2] < vnAssocs[i1])
- {
- int nTmp = vnAssocs[i2];
- vnAssocs[i2] = vnAssocs[i1];
- vnAssocs[i1] = nTmp;
- }
- }
- }
-
- std::vector<GrSlotState *> vpslotAssocs;
- vpslotAssocs.resize(cnAssocs);
- for (int i = 0; i < cnAssocs; i++)
- vpslotAssocs[i] = psstrmIn->RuleInputSlot(vnAssocs[i], psstrmOut);
-
- GrSlotState * pslot = psstrmOut->RuleOutputSlot();
- pslot->Associate(vpslotAssocs);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set a slot attribute for the current slot; the value is on the stack.
-
- @param op - command
- @param fInserting - whether current slot was inserted
- @param slat - slot attribute to set
- @param slati - slot attribute index, or -1 for non-indexed attribute
- @param vnStack - stack to read value from
- @param psstrmIn / Out - input/output streams
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoSetAttr(GrTableManager * ptman, ActionCommand op, bool fInserting,
- SlotAttrName slat, int slati, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- int nVal = vnStack.back();
- vnStack.pop_back();
-
- if (slat == kslatUserDefnV1)
- slat = kslatUserDefn;
-
- if (slati != -1 && slat != kslatCompRef && slat != kslatUserDefn)
- {
- // Invalid slot attribute index.
- gAssert(false);
- slati = -1;
- }
-
- if (slati == -1 && (slat == kslatCompRef || slat == kslatUserDefn))
- {
- // Missing slot attribute index.
- gAssert(false);
- slati = 0;
- }
-
- if (slat == kslatPosX || slat == kslatPosY)
- {
- // Doesn't make sense to set the pos attribute.
- gAssert(false);
- return;
- }
-
- GrSlotState * pslotIn = psstrmIn->RuleInputSlot(0, psstrmOut);
-
- GrSlotState * pslotComp;
-
- int nOldVal;
-
- if (op == kopAttrAdd || op == kopAttrSub || op == kopIAttrAdd || op == kopIAttrSub)
- {
- // Incrementing or decrementing.
-
- gAssert(!fInserting);
-
- switch (slat)
- {
- case kslatAdvX: nOldVal = pslotIn->AdvanceX(ptman); break;
- case kslatAdvY: nOldVal = pslotIn->AdvanceY(ptman); break;
- case kslatShiftX: nOldVal = pslotIn->ShiftX(); break;
- case kslatShiftY: nOldVal = pslotIn->ShiftY(); break;
-
- case kslatAttAtX: nOldVal = pslotIn->AttachAtX(ptman, psstrmIn); break;
- case kslatAttAtY: nOldVal = pslotIn->AttachAtY(); break;
- case kslatAttAtXoff: nOldVal = pslotIn->AttachAtXOffset(); break;
- case kslatAttAtYoff: nOldVal = pslotIn->AttachAtYOffset(); break;
-
- case kslatAttWithX: nOldVal = pslotIn->AttachWithX(ptman, psstrmIn); break;
- case kslatAttWithY: nOldVal = pslotIn->AttachWithY(); break;
- case kslatAttWithXoff: nOldVal = pslotIn->AttachWithXOffset(); break;
- case kslatAttWithYoff: nOldVal = pslotIn->AttachWithYOffset(); break;
-
- case kslatUserDefn: nOldVal = pslotIn->UserDefn(slati); break;
-
- case kslatMeasureSol: nOldVal = pslotIn->MeasureSol(); break;
- case kslatMeasureEol: nOldVal = pslotIn->MeasureEol(); break;
-
- case kslatJStretch: nOldVal = pslotIn->JStretch(); break;
- case kslatJShrink: nOldVal = pslotIn->JShrink(); break;
- case kslatJStep: nOldVal = pslotIn->JStep(); break;
- case kslatJWeight: nOldVal = pslotIn->JWeight(); break;
- case kslatJWidth: nOldVal = pslotIn->JWidth(); break;
-
- // These are kind of odd, but maybe.
- case kslatAttLevel: nOldVal = pslotIn->AttachLevel(); break;
- case kslatBreak: nOldVal = pslotIn->BreakWeight(); break;
- case kslatDir: nOldVal = pslotIn->Directionality(); break;
-
- default:
- // Kind of attribute that it makes no sense to increment.
- gAssert(false);
- return;
- }
-
- if (op == kopAttrAdd || op == kopIAttrAdd)
- nVal = nOldVal + nVal;
- else
- {
- gAssert(op == kopAttrSub || op == kopIAttrSub);
- nVal = nOldVal - nVal;
- }
- }
-
- GrSlotState * pslotOut = psstrmOut->RuleOutputSlot();
-
- if (pslotOut->IsLineBreak(ptman->LBGlyphID()))
- {
- switch (slat)
- {
- case kslatAdvX:
- case kslatAdvY:
- case kslatShiftX:
- case kslatShiftY:
-
- case kslatAttTo:
- case kslatAttLevel:
- case kslatAttAtX:
- case kslatAttAtY:
- case kslatAttAtGpt:
- case kslatAttAtXoff:
- case kslatAttAtYoff:
- case kslatAttWithX:
- case kslatAttWithY:
- case kslatAttWithGpt:
- case kslatAttWithXoff:
- case kslatAttWithYoff:
-
- case kslatMeasureSol:
- case kslatMeasureEol:
-
- case kslatJStretch:
- case kslatJShrink:
- case kslatJStep:
- case kslatJWeight:
- case kslatJWidth:
- slat = kslatNoEffect;
- break;
- default:
- ; // okay, do nothing
- }
- }
-
- nVal = GrGlyphSubTable::ConvertValueForVersion(nVal, slat, -1, m_fxdVersion);
-
- switch (slat)
- {
- case kslatAdvX: pslotOut->SetAdvanceX(nVal); break;
- case kslatAdvY: pslotOut->SetAdvanceY(nVal); break;
- case kslatShiftX: pslotOut->SetShiftX(nVal); break;
- case kslatShiftY: pslotOut->SetShiftY(nVal); break;
-
- case kslatAttTo: pslotOut->SetAttachTo(nVal); break;
- case kslatAttLevel: pslotOut->SetAttachLevel(nVal); break;
- case kslatAttAtX: pslotOut->SetAttachAtX(nVal); break;
- case kslatAttAtY: pslotOut->SetAttachAtY(nVal); break;
- case kslatAttAtGpt: pslotOut->SetAttachAtGpoint(nVal); break;
- case kslatAttAtXoff: pslotOut->SetAttachAtXOffset(nVal); break;
- case kslatAttAtYoff: pslotOut->SetAttachAtYOffset(nVal); break;
- case kslatAttWithX: pslotOut->SetAttachWithX(nVal); break;
- case kslatAttWithY: pslotOut->SetAttachWithY(nVal); break;
- case kslatAttWithGpt: pslotOut->SetAttachWithGpoint(nVal); break;
- case kslatAttWithXoff: pslotOut->SetAttachWithXOffset(nVal); break;
- case kslatAttWithYoff: pslotOut->SetAttachWithYOffset(nVal); break;
-
- case kslatUserDefn: pslotOut->SetUserDefn(slati, nVal); break;
-
- case kslatCompRef:
- gAssert(nVal - 1 >= psstrmIn->RuleStartReadPos() - psstrmIn->ReadPosForNextGet());
- pslotComp = psstrmIn->RuleInputSlot(nVal, psstrmOut);
- pslotOut->SetCompRefSlot(ptman, slati, pslotComp);
- break;
-
- case kslatMeasureSol: pslotOut->SetMeasureSol(nVal); break;
- case kslatMeasureEol: pslotOut->SetMeasureEol(nVal); break;
-
- case kslatJStretch: pslotOut->SetJStretch(nVal); break;
- case kslatJShrink: pslotOut->SetJShrink(nVal); break;
- case kslatJStep: pslotOut->SetJStep(nVal); break;
- case kslatJWeight: pslotOut->SetJWeight(nVal); break;
- case kslatJWidth: pslotOut->SetJWidth(nVal); break;
-
- case kslatBreak: pslotOut->SetBreakWeight(nVal); break;
- case kslatDir: pslotOut->SetDirectionality(DirCode(nVal)); break;
- case kslatInsert: pslotOut->SetInsertBefore(bool(nVal)); break;
-
- case kslatNoEffect:
- // Do nothing.
- break;
-
- default:
- // Kind of attribute that it makes no sense to set.
- gAssert(false);
- return;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Push value of a slot attribute onto the stack.
-
- @param nSlotRef - slot whose attribute we are interested in
- @param fInserting - whether current slot was inserted
- @param slat - slot attribute to get
- @param slati - slot attribute index, or -1 for non-indexed attribute
- @param vnStack - stack to push onto
- @param psstrmIn - input stream
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPushSlotAttr(GrTableManager * ptman,
- int nSlotRef, bool fInserting,
- SlotAttrName slat, int slati, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- GrSlotState * pslot = psstrmIn->RuleInputSlot(nSlotRef, psstrmOut, true);
- if (pslot == NULL)
- {
- // Non-existent pre-context item.
- vnStack.push_back(0);
- return;
- }
-
- int nVal;
- int xyBogus;
-
- if (slat == kslatUserDefnV1)
- slat = kslatUserDefn;
-
- if (slati != -1 && slat != kslatCompRef && slat != kslatUserDefn)
- {
- // Invalid slot attribute index.
- gAssert(false);
- slati = -1;
- }
-
- if (slati == -1 && (slat == kslatCompRef || slat == kslatUserDefn))
- {
- // Missing slot attribute index.
- gAssert(false);
- slati = 0;
- }
-
- switch (slat)
- {
- case kslatAdvX: nVal = pslot->AdvanceX(ptman); break;
- case kslatAdvY: nVal = pslot->AdvanceY(ptman); break;
- case kslatShiftX: nVal = pslot->ShiftX(); break;
- case kslatShiftY: nVal = pslot->ShiftY(); break;
-
- case kslatPosX: pslot->Position(ptman, psstrmIn, &nVal, &xyBogus); break;
- case kslatPosY: pslot->Position(ptman, psstrmIn, &xyBogus, &nVal); break;
-
- case kslatAttTo: nVal = pslot->AttachTo(); break;
- case kslatAttLevel: nVal = pslot->AttachLevel(); break;
- case kslatAttAtX: nVal = pslot->AttachAtX(ptman, psstrmIn); break;
- case kslatAttAtY: nVal = pslot->AttachAtY(); break;
- case kslatAttAtGpt: nVal = pslot->AttachAtGpoint(); break;
- case kslatAttAtXoff: nVal = pslot->AttachAtXOffset(); break;
- case kslatAttAtYoff: nVal = pslot->AttachAtYOffset(); break;
- case kslatAttWithX: nVal = pslot->AttachWithX(ptman, psstrmIn); break;
- case kslatAttWithY: nVal = pslot->AttachWithY(); break;
- case kslatAttWithGpt: nVal = pslot->AttachWithGpoint(); break;
- case kslatAttWithXoff: nVal = pslot->AttachWithXOffset(); break;
- case kslatAttWithYoff: nVal = pslot->AttachWithYOffset(); break;
-
- case kslatMeasureSol: nVal = pslot->MeasureSol(); break;
- case kslatMeasureEol: nVal = pslot->MeasureEol(); break;
-
- case kslatJStretch: nVal = pslot->JStretch(); break;
- case kslatJShrink: nVal = pslot->JShrink(); break;
- case kslatJStep: nVal = pslot->JStep(); break;
- case kslatJWeight: nVal = pslot->JWeight(); break;
- case kslatJWidth: nVal = pslot->JWidth(); break;
-
- case kslatBreak: nVal = pslot->BreakWeight(); break;
- case kslatDir: nVal = pslot->Directionality(); break;
- case kslatInsert: nVal = pslot->InsertBefore(); break;
-
- case kslatUserDefn: nVal = pslot->UserDefn(slati); break;
-
- // Currently no way to look up component.X.ref.
-
- default:
- // Invalid attribute.
- gAssert(false);
- nVal = 0;
- }
-
- vnStack.push_back(nVal);
-}
-
-/*----------------------------------------------------------------------------------------------
- Push value of a glyph attribute onto the stack.
-
- @param nSlotRef - slot whose attribute we are interested in
- @param fInserting - whether current slot was inserted
- @param nGlyphAttr - glyph attribute to get
- @param vnStack - stack to push onto
- @param psstrmIn - input stream
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPushGlyphAttr(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr,
- std::vector<int> & vnStack, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- GrSlotState * pslot = psstrmIn->RuleInputSlot(nSlotRef, psstrmOut, true);
- if (pslot == NULL)
- {
- // Non-existent pre-context item.
- vnStack.push_back(0);
- return;
- }
- int nVal = pslot->GlyphAttrValueEmUnits(ptman, nGlyphAttr);
- vnStack.push_back(nVal);
-}
-
-/*----------------------------------------------------------------------------------------------
- Push value of a glyph attribute onto the stack. The slot of interest is the slot to
- which the current slot is attached.
-
- @param nSlotRef - leaf slot
- @param fInserting - whether current slot was inserted
- @param nGlyphAttr - glyph attribute to get
- @param vnStack - stack to push onto
- @param psstrmIn - input stream
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPushAttToGlyphAttr(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr, std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- // Note that it is the slot in the output stream that has
- // the relevant attach.to attribute set.
- GrSlotState * pslotLeaf = psstrmOut->RuleOutputSlot(0);
- int srAttTo = pslotLeaf->AttachTo();
- if (srAttTo == 0)
- {
- gAssert(false);
- vnStack.push_back(0);
- return;
- }
-
- GrSlotState * pslotRoot = psstrmIn->RuleInputSlot(nSlotRef + srAttTo, psstrmOut);
- int nVal = pslotRoot->GlyphAttrValueEmUnits(ptman, nGlyphAttr);
- vnStack.push_back(nVal);
-}
-
-/*----------------------------------------------------------------------------------------------
- Push value of a glyph metric onto the stack.
-
- @param nSlotRef - slot whose attribute we are interested in
- @param fInserting - whether current slot was inserted
- @param nGlyphAttr - glyph attribute to get
- @param nAttLevel - for accessing composite metrics
- @param vnStack - stack to push onto
- @param psstrmIn - input stream
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPushGlyphMetric(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr, int nAttLevel,
- std::vector<int> & vnStack, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- GrSlotState * pslot = psstrmIn->RuleInputSlot(nSlotRef, psstrmOut, true);
- if (pslot == NULL)
- {
- // Non-existent pre-context item.
- vnStack.push_back(0);
- return;
- }
-
- DoPushGlyphMetricAux(ptman, pslot, nGlyphAttr, nAttLevel, vnStack, psstrmIn);
-}
-
-/*----------------------------------------------------------------------------------------------
- Push value of a glyph metric onto the stack. The slot of interest is the slot to
- which the current slot is attached.
-
- @param nSlotRef - slot whose attribute we are interested in
- @param fInserting - whether current slot was inserted
- @param nGlyphAttr - glyph attribute to get
- @param nAttLevel - for accessing composite metrics
- @param vnStack - stack to push onto
- @param psstrmIn - input stream
- @param psstrmOut - output stream
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPushAttToGlyphMetric(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nGlyphAttr, int nAttLevel,
- std::vector<int> & vnStack,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- // Note that it is the slot in the output stream that has
- // the relevant attach.to attribute set.
- GrSlotState * pslotLeaf = psstrmOut->RuleOutputSlot(0);
- int srAttTo = pslotLeaf->AttachTo();
- if (srAttTo == 0)
- {
- gAssert(false);
- vnStack.push_back(0);
- return;
- }
-
- GrSlotState * pslot = psstrmIn->RuleInputSlot(nSlotRef + srAttTo, psstrmOut);
-
- DoPushGlyphMetricAux(ptman, pslot, nGlyphAttr, nAttLevel, vnStack, psstrmIn);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-void GrPass::DoPushGlyphMetricAux(GrTableManager * ptman,
- GrSlotState * pslot, int nGlyphAttr, int nAttLevel,
- std::vector<int> & vnStack, GrSlotStream * psstrmIn)
-{
- int mVal;
- GlyphMetric gmet = GlyphMetric(nGlyphAttr);
- if (nAttLevel == 0 || gmet == kgmetAscent || gmet == kgmetDescent)
- {
- mVal = pslot->GlyphMetricEmUnits(ptman, nGlyphAttr);
- }
- else
- {
- pslot->CalcCompositeMetrics(ptman, psstrmIn, nAttLevel, true);
-
- float xy;
- switch (gmet)
- {
- case kgmetLsb: xy = pslot->ClusterLsb(psstrmIn); break;
- case kgmetRsb: xy = pslot->ClusterRsb(psstrmIn); break;
- case kgmetBbTop: xy = pslot->ClusterBbTop(psstrmIn); break;
- case kgmetBbBottom: xy = pslot->ClusterBbBottom(psstrmIn); break;
- case kgmetBbLeft: xy = pslot->ClusterBbLeft(psstrmIn); break;
- case kgmetBbRight: xy = pslot->ClusterBbRight(psstrmIn); break;
- case kgmetBbHeight: xy = pslot->ClusterBbHeight(psstrmIn); break;
- case kgmetBbWidth: xy = pslot->ClusterBbWidth(psstrmIn); break;
-// case kgmetAdvHeight: xy = pslot->ClusterAdvHeight(psstrmIn); break;
- case kgmetAdvWidth: xy = pslot->ClusterAdvWidth(psstrmIn); break;
- default:
- gAssert(false);
- xy = 0;
- }
- mVal = ptman->LogToEmUnits(xy);
- }
-
- vnStack.push_back(mVal);
-}
-
-/*----------------------------------------------------------------------------------------------
- Push a feature value onto the stack. For rule actions, the slot of interest is the
- current slot.
-
- @param nSlotRef - slot being examined
- @param fInserting - whether current slot was inserted
- @param nFeat - feature of interest
- @param vnStack - stack to push onto
- @param psstrmIn - input stream
- @param psstrmOut - output stream
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPushFeatValue(GrTableManager * ptman, int nSlotRef, bool fInserting,
- int nFeat, std::vector<int> & vnStack, GrSlotStream * psstrmIn, GrSlotStream * psstrmOut)
-{
- gAssert(!fInserting);
-
- GrSlotState * pslot = psstrmIn->RuleInputSlot(nSlotRef, psstrmOut, true);
- if (pslot == NULL)
- {
- // Non-existent pre-context item.
- vnStack.push_back(0);
- return;
- }
-
- int nVal = pslot->FeatureValue(nFeat);
- vnStack.push_back(nVal);
-}
-
-/*----------------------------------------------------------------------------------------------
- Push a processing-state value onto the stack.
-
- @param nFeat - feature of interest
- @param vnStack - stack to push onto
-----------------------------------------------------------------------------------------------*/
-void GrPass::DoPushProcState(GrTableManager * ptman, int nPState, std::vector<int> & vnStack)
-{
- int nValue;
- if (nPState == kpstatJustifyMode)
- {
- // Convert from internal modes to user modes.
- int jmodi = ptman->InternalJustificationMode();
- switch (jmodi)
- {
- case kjmodiNormal:
- case kjmodiCanShrink:
- nValue = kjmoduNormal;
- break;
- case kjmodiMeasure:
- nValue = kjmoduMeasure;
- break;
- case kjmodiJustify:
- nValue = kjmoduJustify;
- break;
- default:
- gAssert(false);
- nValue = kjmoduNormal;
- }
- }
- else if (nPState == kpstatJustifyLevel)
- nValue = 1; // TODO: get justify level from ptman
- vnStack.push_back(nValue);
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/GrPseudoMap.h b/Build/source/libs/graphite-engine/src/segment/GrPseudoMap.h
deleted file mode 100644
index c6fec210808..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrPseudoMap.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrPseudoMap.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- The GrPseudoMap class.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_PSEUDOMAP_INCLUDED
-#define GR_PSEUDOMAP_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-/*----------------------------------------------------------------------------------------------
- A mapping between a Unicode value and a pseudo-glyph.
-
- Hungarian: psd
-----------------------------------------------------------------------------------------------*/
-
-class GrPseudoMap
-{
-public:
- unsigned int Unicode() { return m_nUnicode; }
- gid16 PseudoGlyph() { return m_chwPseudo; }
-
- void SetUnicode(int n) { m_nUnicode = n; }
- void SetPseudoGlyph(gid16 chw) { m_chwPseudo = chw; }
-
-protected:
- // Instance variables:
- unsigned int m_nUnicode;
- gid16 m_chwPseudo;
-};
-
-} // namespace gr
-
-#endif // !GR_PSEUDOMAP_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrSlotState.cpp b/Build/source/libs/graphite-engine/src/segment/GrSlotState.cpp
deleted file mode 100644
index f2d61e45eed..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrSlotState.cpp
+++ /dev/null
@@ -1,1481 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrSlotState.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- GrSlotState class implementation.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Initialize slots.
-----------------------------------------------------------------------------------------------*/
-// standard for pass 0 slots
-void GrSlotState::Initialize(gid16 chw, GrEngine * pgreng,
- GrFeatureValues fval, int ipass, int ichwSegOffset, int nUnicode)
-{
- Assert(ipass == 0);
- m_chwGlyphID = chw;
- m_chwActual = kInvalidGlyph;
- m_xysGlyphWidth = -1;
- m_bStyleIndex = byte(fval.m_nStyleIndex);
- u_intslot nullSlot;
- nullSlot.pslot = NULL;
- std::fill_n(PUserDefnBuf(), m_cnUserDefn, nullSlot);
- std::fill_n(PCompRefBuf(), m_cnCompPerLig, nullSlot);
- std::fill_n(PSlatiBuf(), m_cnCompPerLig, nullSlot);
- u_intslot * pFeatBuf = PFeatureBuf();
- for (size_t i = 0; i < m_cnFeat; i++)
- pFeatBuf[i].nValue = fval.m_rgnFValues[i];
- m_ipassFsmCol = -1;
- m_colFsm = -1;
-
- m_ipassModified = ipass;
- m_ichwSegOffset = ichwSegOffset;
- m_nUnicode = nUnicode;
- m_vpslotAssoc.clear();
- pgreng->InitSlot(this, nUnicode);
-
- switch (nUnicode)
- {
- case knLRM: m_spsl = kspslLRM; break;
- case knRLM: m_spsl = kspslRLM; break;
- case knLRO: m_spsl = kspslLRO; break;
- case knRLO: m_spsl = kspslRLO; break;
- case knLRE: m_spsl = kspslLRE; break;
- case knRLE: m_spsl = kspslRLE; break;
- case knPDF: m_spsl = kspslPDF; break;
- default:
- Assert(m_spsl == kspslNone);
- m_spsl = kspslNone;
- break;
- }
-}
-
-// line-break slots
-void GrSlotState::Initialize(gid16 chw, GrEngine * pgreng,
- GrSlotState * pslotFeat, int ipass, int ichwSegOffset)
-{
- m_chwGlyphID = chw;
- m_chwActual = kInvalidGlyph;
- m_xysGlyphWidth = -1;
- u_intslot nullSlot;
- nullSlot.pslot = NULL;
- std::fill_n(PUserDefnBuf(), m_cnUserDefn, nullSlot);
- std::fill_n(PCompRefBuf(), m_cnCompPerLig, nullSlot);
- std::fill_n(PSlatiBuf(), m_cnCompPerLig, nullSlot);
- CopyFeaturesFrom(pslotFeat);
- m_ipassModified = ipass;
- m_ichwSegOffset = ichwSegOffset;
- m_nUnicode = -1;
- m_vpslotAssoc.clear();
- pgreng->InitSlot(this);
- // Caller is responsible for setting m_spsl.
- m_ipassFsmCol = -1;
- m_colFsm = -1;
-}
-
-// for inserting new slots after pass 0 (under-pos and unicode are irrelevant)
-void GrSlotState::Initialize(gid16 chw, GrEngine * pgreng,
- GrSlotState * pslotFeat, int ipass)
-{
- m_chwGlyphID = chw;
- m_chwActual = kInvalidGlyph;
- m_xysGlyphWidth = -1;
- u_intslot nullSlot;
- nullSlot.pslot = NULL;
- std::fill_n(PUserDefnBuf(), m_cnUserDefn, nullSlot);
- std::fill_n(PCompRefBuf(), m_cnCompPerLig, nullSlot);
- std::fill_n(PSlatiBuf(), m_cnCompPerLig, nullSlot);
- CopyFeaturesFrom(pslotFeat);
- m_ipassModified = ipass;
- m_ichwSegOffset = kInvalid;
- m_nUnicode = kInvalid;
- m_vpslotAssoc.clear();
- pgreng->InitSlot(this);
- m_spsl = kspslNone;
- m_ipassFsmCol = -1;
- m_colFsm = -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- The slot has been modified by the given pass and therefore is in a new state;
- make a new SlotState initialized from the old one.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::InitializeFrom(GrSlotState * pslotOld, int ipass)
-{
- CopyFrom(pslotOld, false);
-
- m_ipassModified = ipass;
- m_pslotPrevState = pslotOld;
- m_ichwSegOffset = kInvalid;
- m_vpslotAssoc.clear();
- m_vpslotAssoc.push_back(pslotOld);
-
- m_dircProc = pslotOld->m_dircProc;
- m_fDirProcessed = pslotOld->m_fDirProcessed;
-
- // Since we're going on to a new pass, no point in copying these:
- m_ipassFsmCol = -1;
- m_colFsm = -1;
-
- ////FixAttachmentTree(pslotOld);
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy the features and style information from the given slot.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::CopyFeaturesFrom(GrSlotState * pslotSrc)
-{
- m_bStyleIndex = pslotSrc->m_bStyleIndex;
- Assert(m_cnFeat == pslotSrc->m_cnFeat);
- std::copy(pslotSrc->PFeatureBuf(), pslotSrc->PFeatureBuf() + m_cnFeat, PFeatureBuf());
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy the basic information.
- Warning: the functions below will break if GrSlotState and subclasses are given virtual
- methods. In that case, we will need to copy from the address of the first variable in
- GrSlotAbstract.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::CopyFrom(GrSlotState * pslot, bool fCopyEverything)
-{
- GrSlotAbstract::CopyAbstractFrom(pslot);
- std::copy(pslot->m_prgnVarLenBuf, pslot->m_prgnVarLenBuf + CExtraSpace(), m_prgnVarLenBuf);
-
- if (fCopyEverything)
- {
- Assert(false);
- m_ipassModified = pslot->m_ipassModified;
- m_pslotPrevState = pslot->m_pslotPrevState;
- m_ichwSegOffset = pslot->m_ichwSegOffset;
- m_colFsm = pslot->m_colFsm;
- m_ipassFsmCol = pslot->m_ipassFsmCol;
- // TODO: copy m_vpslotAssocs.
- m_fNeutralAssocs = pslot->m_fNeutralAssocs;
- }
-
- m_dislotRootFixed = pslot->m_dislotRootFixed;
-
- m_vdislotAttLeaves.resize(pslot->m_vdislotAttLeaves.size());
- for (size_t i = 0; i < pslot->m_vdislotAttLeaves.size(); i++)
- m_vdislotAttLeaves[i] = pslot->m_vdislotAttLeaves[i];
-
- m_islotPosPass = pslot->m_islotPosPass;
- m_nUnicode = pslot->m_nUnicode;
- m_dircProc = pslot->m_dircProc;
- m_fDirProcessed = pslot->m_fDirProcessed;
- m_cnUserDefn = pslot->m_cnUserDefn;
- m_cnFeat = pslot->m_cnFeat;
- m_bStyleIndex = pslot->m_bStyleIndex;
- m_mAdvanceX = pslot->m_mAdvanceX;
- m_mAdvanceY = pslot->m_mAdvanceY;
- m_mShiftX = pslot->m_mShiftX;
- m_mShiftY = pslot->m_mShiftY;
- m_srAttachTo = pslot->m_srAttachTo;
- m_nAttachLevel = pslot->m_nAttachLevel;
- m_mAttachAtX = pslot->m_mAttachAtX;
- m_mAttachAtY = pslot->m_mAttachAtY;
- m_mAttachAtXOffset = pslot->m_mAttachAtXOffset;
- m_mAttachAtYOffset = pslot->m_mAttachAtYOffset;
- m_mAttachWithX = pslot->m_mAttachWithX;
- m_mAttachWithY = pslot->m_mAttachWithY;
- m_mAttachWithXOffset = pslot->m_mAttachWithXOffset;
- m_mAttachWithYOffset = pslot->m_mAttachWithYOffset;
- m_nAttachAtGpoint = pslot->m_nAttachAtGpoint;
- m_nAttachWithGpoint = pslot->m_nAttachWithGpoint;
- m_fAttachMod = pslot->m_fAttachMod;
- m_fShiftMod = pslot->m_fShiftMod;
- m_fIgnoreAdvance = pslot->m_fIgnoreAdvance;
-
- m_nCompositeLevel = kNegInfinity; // uncalculated, so don't need to copy the positions??
-}
-
-void GrSlotAbstract::CopyAbstractFrom(GrSlotState * pslot)
-{
- u_intslot * pnBufSave = m_prgnVarLenBuf;
- *this = *pslot;
- m_prgnVarLenBuf = pnBufSave;
- Assert(m_prgnVarLenBuf);
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the output slot from the one use within the passes, with the basic information.
- Warning: this function will break if GrSlotState and subclasses are given virtual
- methods. In that case, we will need to copy from the address of the first variable in
- GrSlotAbstract.
-----------------------------------------------------------------------------------------------*/
-void GrSlotOutput::InitializeOutputFrom(GrSlotState * pslot)
-{
- CopyAbstractFrom(pslot);
-
- // Copy just the component information, which is of length (m_cnCompPerLig * 2)
- //std::copy(pslot->PCompRefBuf(),
- // pslot->PCompRefBuf() + (m_cnCompPerLig * 2),
- // this->PCompRefBufSlout());
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the ID of the actual glyph that will be used for output and metrics. This is the
- same for most glyphs, but will be different for pseudo-glyphs.
-----------------------------------------------------------------------------------------------*/
-gid16 GrSlotAbstract::ActualGlyphForOutput(GrTableManager * ptman)
-{
- if (m_chwActual == kInvalidGlyph)
- m_chwActual = ptman->ActualGlyphForOutput(m_chwGlyphID);
- return m_chwActual;
-}
-/*----------------------------------------------------------------------------------------------
- We are replacing the old slot with the recipient. Replace the pointers in any attachment
- root or attached leaf slots.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::FixAttachmentTree(GrSlotState * pslotOld)
-{
-#if 0
- pslotOld->m_vpslotAttLeaves.CopyTo(m_vpslotAttLeaves);
- for (int islot = 0; islot < m_vpslotAttLeaves.Size(); islot++)
- {
- Assert(m_vpslotAttLeaves[islot]->m_pslotAttRoot == pslotOld);
- m_vpslotAttLeaves[islot]->m_pslotAttRoot = this;
- }
-
- m_pslotAttRoot = pslotOld->m_pslotAttRoot;
- if (m_pslotAttRoot)
- {
- for (int islot = 0; islot < m_pslotAttRoot->m_vpslotAttLeaves.Size(); islot++)
- {
- if (m_pslotAttRoot->m_vpslotAttLeaves[islot] == pslotOld)
- {
- m_pslotAttRoot->m_vpslotAttLeaves.Delete(islot);
- m_pslotAttRoot->m_vpslotAttLeaves.Push(this);
- return;
- }
- }
- Assert(false); // didn't find old slot in the list
- }
-#endif // 0
-}
-
-/*----------------------------------------------------------------------------------------------
- Make sure all the values are cached that are needed to be copied to the output slots
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::EnsureCacheForOutput(GrTableManager * ptman)
-{
- // Make sure the actual glyph ID is set.
- gid16 gidActual = ActualGlyphForOutput(ptman);
-
- // Make sure the glyph metrics are stored.
- Font * pfont = ptman->State()->GetFont();
- if (IsLineBreak(ptman->LBGlyphID()))
- {
- GetGlyphMetric(pfont, kgmetAscent, 0);
- GetGlyphMetric(pfont, kgmetDescent, 0);
- m_xysGlyphX = 0;
- m_xysGlyphY = 0;
- m_xysGlyphHeight = 0;
- m_xysGlyphWidth = 0;
- m_xysAdvX = 0;
- m_xysAdvY = 0;
- m_bIsSpace = true;
- }
- else
- {
- //IsSpace(ptman); // cache this flag--doing bb-top below will do it
-
- GetGlyphMetric(pfont, kgmetAscent, gidActual);
- GetGlyphMetric(pfont, kgmetDescent, gidActual);
- GetGlyphMetric(pfont, kgmetBbTop, gidActual);
- // call above will also cache all the values below
- //GetGlyphMetric(pfont, kgmetBbBottom, gidActual);
- //GetGlyphMetric(pfont, kgmetBbLeft, gidActual);
- //GetGlyphMetric(pfont, kgmetBbRight, gidActual);
- //GetGlyphMetric(pfont, kgmetAdvWidth, gidActual);
- //GetGlyphMetric(pfont, kgmetAdvHeight, gidActual);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the associations for the slot.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::Associate(GrSlotState * pslot)
-{
- m_vpslotAssoc.clear();
- m_vpslotAssoc.push_back(pslot);
-}
-
-void GrSlotState::Associate(GrSlotState * pslotBefore, GrSlotState * pslotAfter)
-{
- m_vpslotAssoc.clear();
- m_vpslotAssoc.push_back(pslotBefore);
- m_vpslotAssoc.push_back(pslotAfter);
-}
-
-void GrSlotState::Associate(std::vector<GrSlotState*> & vpslot)
-{
- m_vpslotAssoc.clear();
- ///vpslot.CopyTo(m_vpslotAssoc); -- bug in CopyTo, so we do it ourselves:
- for (size_t islot = 0; islot < vpslot.size(); ++islot)
- {
- m_vpslotAssoc.push_back(vpslot[islot]);
- }
-
- // Set its character styles and features from the associated slot.
- if (vpslot.size() > 0) // && !m_pslotPrevState
- {
- std::copy(m_vpslotAssoc[0]->PFeatureBuf(),
- m_vpslotAssoc[0]->PFeatureBuf() + m_cnFeat, PFeatureBuf());
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Clear the associations for the slot.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::ClearAssocs()
-{
- m_vpslotAssoc.clear();
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a list of (ie, add into the vector) all the underlying associations, relative
- to the official beginning of the segment.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::AllAssocs(std::vector<int> & vichw)
-{
- if (PassModified() == 0)
- {
- Assert(m_ichwSegOffset != kInvalid);
- vichw.push_back(m_ichwSegOffset);
- }
- else
- {
- for (size_t i = 0; i < m_vpslotAssoc.size(); ++i)
- m_vpslotAssoc[i]->AllAssocs(vichw);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the underlying position of the before-association, relative to the official
- beginning of the segment. May be -1, if this slot maps to a character in the previous
- segment, or >= the length of the segment, if it maps to a character in the following
- segment.
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::BeforeAssoc()
-{
- GrSlotState * pslot = this;
- while (pslot->PassModified() > 0)
- {
- pslot = pslot->RawBeforeAssocSlot();
- if (pslot == NULL)
- {
- return kPosInfinity;
- }
- }
- Assert(pslot->m_ichwSegOffset != kInvalid);
- return pslot->m_ichwSegOffset;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the underlying position of the after-association, relative to the official
- beginning of the segment. May be -1, if this slot maps to a character in the previous
- segment, or >= the length of the segment, if it maps to a character in the following
- segment.
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::AfterAssoc()
-{
- GrSlotState * pslot = this;
- while (pslot->PassModified() > 0)
- {
- pslot = pslot->RawAfterAssocSlot();
- if (pslot == NULL)
- {
- return kNegInfinity;
- }
- }
- Assert(pslot->m_ichwSegOffset != kInvalid);
- return pslot->m_ichwSegOffset;
-}
-
-/*----------------------------------------------------------------------------------------------
- It is possible to get into a state where we are associated with an invalid state.
- For instance, slot C may be associated with slots B1 and B2, but slot B1 is not associated
- with any earlier slot, in which case slot C should remove the association with B1 and just
- be associated with B2.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::CleanUpAssocs()
-{
- for (size_t i = 0; i < m_vpslotAssoc.size(); i++)
- m_vpslotAssoc[i]->CleanUpAssocs();
-
- GrSlotState * pslot;
-
- pslot = RawBeforeAssocSlot();
- while (pslot && BeforeAssoc() == kPosInfinity)
- {
- // The before association is bogus--delete it.
- m_vpslotAssoc.erase(m_vpslotAssoc.begin());
- pslot = RawBeforeAssocSlot();
- }
-
- pslot = RawAfterAssocSlot();
- while (pslot && AfterAssoc() == kNegInfinity)
- {
- // The after association is bogus--delete it.
- m_vpslotAssoc.pop_back();
- pslot = RawAfterAssocSlot();
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Fill in the array of the given output slot with the underlying positions of the
- ligature components, relative to the official beginning of the segment.
- Positions may be < 0, if this slot maps to a character in the previous segment,
- or >= the length of the segment, if it maps to a character in the following segment.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::SetComponentRefsFor(GrSlotOutput * pslout, int slatiArg)
-{
- if (PassModified() > 0)
- {
- GrSlotState * pslot;
- int slati;
- if (HasComponents())
- {
- for (int iComponent = 0; iComponent < m_cnCompPerLig; iComponent++)
- {
- pslot = CompRefSlot(iComponent);
- slati = Slati(iComponent);
- if (pslot)
- {
- Assert(slati != -1);
- Assert(PassModified() >= pslot->PassModified());
- pslot->SetComponentRefsFor(pslout, slati);
- }
- }
- }
- else
- {
- // Follow the chain back through the passes.
- pslot = RawBeforeAssocSlot();
- if (pslot)
- {
- Assert(PassModified() >= pslot->PassModified());
- // Passing slati here is definitely needed for our Arabic font: for instance when
- // you type something like "mla", so the l is transformed into a temporary glyph
- // before creating the ligature. However, this seems to have broken something,
- // which I will probably find eventually. :-(
- pslot->SetComponentRefsFor(pslout, slatiArg);
- //pslot->SetComponentRefsFor(pslout, -1);
- }
- }
- }
- else
- {
- Assert(m_ichwSegOffset != kInvalid);
- pslout->AddComponentReference(m_ichwSegOffset, slatiArg);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Fill in the vector with the underlying positions of the
- ligature components, relative to the official beginning of the segment.
- Positions may be < 0, if this slot maps to a character in the previous segment,
- or >= the length of the segment, if it maps to a character in the following segment.
- ENHANCE: merge with method above.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::AllComponentRefs(std::vector<int> & vichw)
-{
- if (PassModified() > 0)
- {
- GrSlotState * pslot;
- if (HasComponents())
- {
- for (int iComponent = 0; iComponent < m_cnCompPerLig; iComponent++)
- {
- pslot = CompRefSlot(iComponent);
- if (pslot)
- {
- Assert(PassModified() >= pslot->PassModified());
- pslot->AllComponentRefs(vichw);
- }
- }
- }
- else
- {
- // ENHANCE: Strictly speaking we should probably have separate before-
- // and after-lists for the components, but I think it would be pretty
- // rare to have both deletion and ligatures overlapping, so I'm not
- // going to bother with it for now.
- //for (int islot = 0; islot < AssocsSize(); islot++)
- for (int islot = 0; islot < 1; islot++)
- {
- m_vpslotAssoc[islot]->AllComponentRefs(vichw);
- }
- }
- }
- else
- {
- Assert(m_ichwSegOffset != kInvalid);
- vichw.push_back(m_ichwSegOffset);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the value of the component.???.ref attribute for the slot.
- Note that 'i' is the local index for the component as defined for this glyph.
-----------------------------------------------------------------------------------------------*/
-GrSlotState * GrSlotState::CompRefSlot(int i)
-{
- Assert(i < m_cnCompPerLig);
- if (i < m_cnCompPerLig)
- return CompRef(i);
- else
- return NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the value of the component.???.ref attribute for the slot.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::SetCompRefSlot(GrTableManager * ptman, int slati, GrSlotState * pslotComp)
-{
- // Convert the global identifer for the component to the index for this glyph.
- int icomp = ptman->ComponentIndexForGlyph(GlyphID(), slati);
- Assert(icomp != -1);
- if (icomp == -1)
- // Component not defined for this glyph--ignore.
- return;
- Assert(icomp < m_cnCompPerLig);
-
- if (m_fHasComponents == false)
- {
- // None have been set yet; initialize them.
- for (int iLoop = 0; iLoop < m_cnCompPerLig; iLoop++)
- {
- SetCompRef(iLoop, NULL);
- SetSlati(iLoop, -1);
- }
- }
-
- m_fHasComponents = true;
- int iLoop;
- for (iLoop = 0; iLoop < m_cnCompPerLig; iLoop++)
- {
- if (Slati(iLoop) == slati)
- break;
- if (Slati(iLoop) == -1)
- break;
- }
- //if (icomp < m_cnCompPerLig)
- if (iLoop < m_cnCompPerLig)
- {
- //SetCompRef(icomp, pslotComp);
- SetCompRef(iLoop, pslotComp);
- SetSlati(iLoop, slati);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the underlying position for the slot, relative to the official beginning of the
- segment.
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::SegOffset()
-{
- if (m_ichwSegOffset == kInvalid)
- {
- Assert(m_pslotPrevState);
- Assert(m_ipassModified > 0);
- return m_pslotPrevState->SegOffset();
- }
- else
- {
- Assert(m_pslotPrevState == NULL);
- Assert(m_ipassModified == 0);
- return m_ichwSegOffset;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the value of the glyph attribute (in design units, if this is a measurement).
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::GlyphAttrValueEmUnits(GrTableManager * ptman, int nAttrID)
-{
- return ptman->GlyphAttrValue(m_chwGlyphID, nAttrID);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the value of the glyph metric, in design coordinates (ie, based on the font's
- em-square).
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::GlyphMetricEmUnits(GrTableManager * ptman, int nMetricID)
-{
- int mValue;
- if (ptman->State()->GetFont())
- {
- // Get the actual metric, possibly adjusted for hinting, then convert back to
- // design units.
- float xysValue = GlyphMetricLogUnits(ptman, nMetricID);
- mValue = ptman->LogToEmUnits(xysValue);
- }
- else
- // Ask the font directly.
- ////mValue = ???
- mValue = 0;
-
- return mValue;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the value of the glyph attribute, converted to source device coordinates.
- The attribute is assumed to be one whose value is a measurement.
-----------------------------------------------------------------------------------------------*/
-float GrSlotState::GlyphAttrValueLogUnits(GrTableManager * ptman, int nAttrID)
-{
- int mValue = GlyphAttrValueEmUnits(ptman, nAttrID);
- float xysRet = ptman->EmToLogUnits(mValue);
- return xysRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the value of the glyph metric, in the source device's logical units.
-----------------------------------------------------------------------------------------------*/
-float GrSlotState::GlyphMetricLogUnits(GrTableManager * ptman, int nMetricID)
-{
-#ifdef OLD_TEST_STUFF
- if (ptman->GlyphTable() == NULL)
- return 0;
-#endif // OLD_TEST_STUFF
-
-#ifdef _DEBUG
- if (IsLineBreak(ptman->LBGlyphID()))
- {
- Warn("Getting metrics of line-break slot");
- }
-#endif // _DEBUG
- if (IsLineBreak(ptman->LBGlyphID()))
- {
- return 0;
- }
-
- return GetGlyphMetric(ptman->State()->GetFont(), nMetricID,
- ActualGlyphForOutput(ptman));
-}
-
-
-float GrSlotOutput::GlyphMetricLogUnits(Font * pfont, int nMetricID)
-{
- Assert(m_chwActual != kInvalidGlyph);
- if (m_chwActual == kInvalidGlyph)
- return 0;
-
- return GetGlyphMetric(pfont, nMetricID, m_chwActual);
-}
-
-//float GrSlotOutput::GlyphMetricLogUnits(int gmet) -- obsolete: no longer caching these values
-//{
-// // When the font is not passed as an argument, the values better be cached!
-//
-// switch (gmet)
-// { // There may be off by one errors below, depending on what width and height mean
-// case kgmetLsb:
-// return m_xysGlyphX;
-// case kgmetRsb:
-// return (m_xysAdvX - m_xysGlyphX - m_xysGlyphWidth);
-// case kgmetBbTop:
-// return m_xysGlyphY;
-// case kgmetBbBottom:
-// return (m_xysGlyphY - m_xysGlyphHeight);
-// case kgmetBbLeft:
-// return m_xysGlyphX;
-// case kgmetBbRight:
-// return (m_xysGlyphX + m_xysGlyphWidth);
-// case kgmetBbHeight:
-// return m_xysGlyphHeight;
-// case kgmetBbWidth:
-// return m_xysGlyphWidth;
-// case kgmetAdvWidth:
-// return m_xysAdvX;
-// case kgmetAdvHeight:
-// return m_xysAdvY;
-// default:
-// Warn("GetGlyphMetric was asked for an illegal metric.");
-// };
-//
-// return 0;
-//}
-
-
-float GrSlotAbstract::GetGlyphMetric(Font * pfont, int nMetricID, gid16 chwGlyphID)
-{
- GlyphMetric gmet = GlyphMetric(nMetricID);
-
- float yAscent, yDescent;
- gr::Point ptAdvances;
- gr::Rect rectBb;
-
- if (kgmetAscent == gmet)
- {
- //if (m_xysFontAscent != -1)
- // return m_xysFontAscent;
- pfont->getFontMetrics(&yAscent);
- //m_xysFontAscent = xysRet;
- //if (pfont)
- // m_xysFontAscent = yAscent;
- return yAscent;
- }
-
- if (kgmetDescent == gmet)
- {
- //if (m_xysFontDescent != -1)
- // return m_xysFontDescent;
- pfont->getFontMetrics(NULL, &yDescent);
- //m_xysFontDescent = xysRet;
- //if (pfont)
- // m_xysFontDescent = yDescent;
- return yDescent;
- }
-
- float xysGlyphX, xysGlyphY, xysGlyphWidth, xysGlyphHeight, xysAdvX, xysAdvY;
- //if (m_xysGlyphWidth == -1)
- //{
- pfont->getGlyphMetrics(chwGlyphID, rectBb, ptAdvances);
-
- xysGlyphX = rectBb.left;
- xysGlyphY = rectBb.top;
- xysGlyphWidth = (rectBb.right - rectBb.left);
- xysGlyphHeight = (rectBb.top - rectBb.bottom);
- xysAdvX = ptAdvances.x;
- xysAdvY = ptAdvances.y;
-
- m_bIsSpace = (0 == xysGlyphX && 0 == xysGlyphY); // should agree with test done in IsSpace() below
-
- if (m_bIsSpace == 1)
- {
- // White space glyph - only case where nGlyphX == nGlyphY == 0
- // nGlyphWidth & nGlyphHeight are always set to 16 for unknown reasons, so correct.
- xysGlyphWidth = xysGlyphHeight = 0;
- }
- //}
-
- switch (gmet)
- { // There may be off-by-one errors below, depending on what width and height mean
- case kgmetLsb:
- return xysGlyphX;
- case kgmetRsb:
- return (xysAdvX - xysGlyphX - xysGlyphWidth);
- case kgmetBbTop:
- return xysGlyphY;
- case kgmetBbBottom:
- return (xysGlyphY - xysGlyphHeight);
- case kgmetBbLeft:
- return xysGlyphX;
- case kgmetBbRight:
- return (xysGlyphX + xysGlyphWidth);
- case kgmetBbHeight:
- return xysGlyphHeight;
- case kgmetBbWidth:
- return xysGlyphWidth;
- case kgmetAdvWidth:
- return xysAdvX;
- case kgmetAdvHeight:
- return xysAdvY;
- default:
- Warn("GetGlyphMetric was asked for an illegal metric.");
- };
-
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Test the glyph id to see if it is a white space glyph.
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::IsSpace(GrTableManager * ptman)
-{
- gid16 gidActual = ActualGlyphForOutput(ptman);
-
- ////if (m_xysGlyphWidth == -1)
- ////{
- //// res = ptman->State()->GraphicsObject()->GetGlyphMetrics(gidActual,
- //// &m_xysGlyphWidth, &m_xysGlyphHeight,
- //// &m_xysGlyphX, &m_xysGlyphY, &m_xysAdvX, &m_xysAdvY);
- //// if (ResultFailed(res))
- //// {
- //// WARN(res);
- //// return 2; // will test as true but can be distinguished by separate value
- //// }
-
- //// gr::Point ptAdvances;
- //// gr::Rect rectBb;
- //// ptman->State()->Font()->getGlyphMetrics(gidActual, rectBb, ptAdvances);
- ////}
-
- if (m_bIsSpace == -1)
- GetGlyphMetric(ptman->State()->GetFont(), kgmetBbLeft, gidActual);
- // One call is enough to cache the information.
- //GetGlyphMetric(ptman->State()->Font(), kgmetBbBottom, gidActual);
-
- // should agree with test done in GetGlyphMetric() above
- //////m_bIsSpace = (0 == m_xysGlyphX && 0 == m_xysGlyphY);
-
- Assert(m_bIsSpace == 0 || m_bIsSpace == 1);
-
- return m_bIsSpace;
-}
-
-bool GrSlotOutput::IsSpace()
-{
- Assert(m_bIsSpace == 0 || m_bIsSpace == 1);
- return m_bIsSpace;
-}
-
-/*----------------------------------------------------------------------------------------------
- If any of the attach attributes have been modified, fix things up. Set up the attachment
- tree, and set any needed default positions. Zap the cached positions of any following
- glyphs in the stream.
-
- @param psstrm - the stream in which the modifications were made
- @param islotThis - the index of the attached (leaf) slot in the stream;
- -1 if we don't know
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::HandleModifiedPosition(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islotThis)
-{
- if (!m_fAttachMod && !m_fShiftMod)
- return;
-
- if (islotThis == -1)
- {
- for (int islot = 0; islot < psstrmOut->WritePos(); islot++)
- {
- if (psstrmOut->SlotAt(islot) == this)
- {
- islotThis = islot;
- break;
- }
- }
- Assert(islotThis > -1);
- }
-
- if (m_fAttachMod)
- {
- // Attachments.
-
- // Note that it doesn't make sense to attach a slot to itself, so if the value of
- // the attach.to attribute is 0, that means clear the attachment.
- GrSlotState * pslotNewRoot = AttachRoot(psstrmOut);
-
- AttachToRoot(ptman, psstrmOut, pslotNewRoot);
-
- if (pslotNewRoot)
- {
- // If this is an attachment with no positions, attach the two glyphs side by side
- // in the appropriate order.
- bool fRtl = ((pslotNewRoot->PostBidiDirLevel(ptman) % 2) != 0);
- if ((fRtl && m_srAttachTo < 0) || (!fRtl && m_srAttachTo > 0))
- {
- // The root is on the right, the leaf is on the left.
- if (m_mAttachAtX == kNotYetSet && m_nAttachAtGpoint == kNotYetSet)
- m_mAttachAtX = 0;
- if (m_mAttachWithX == kNotYetSet && m_nAttachWithGpoint == kNotYetSet)
- m_mAttachWithX = short(AdvanceX(ptman));
- }
- else
- {
- // The root is on the left, the leaf is on the right.
- if (m_mAttachAtX == kNotYetSet && m_nAttachAtGpoint == kNotYetSet)
- m_mAttachAtX = short(pslotNewRoot->AdvanceX(ptman));
- if (m_mAttachWithX == kNotYetSet && m_nAttachWithGpoint == kNotYetSet)
- m_mAttachWithX = 0;
- }
- }
- }
- else
- {
- // Shifting, or changing the advance width.
- Assert(m_fShiftMod);
- EnsureLocalAttachmentTree(ptman, psstrmIn, psstrmOut, islotThis);
- ZapMetricsAndPositionDownToBase(psstrmOut);
- ZapMetricsOfLeaves(psstrmOut);
- }
-
- if (psstrmOut->m_ipass == ptman->NumberOfPasses() - 1)
- ptman->InitPosCache(); // cached position is most likely no longer valid
-
- // Invalidate the positions of this and any following glyphs.
- for (int islot = islotThis + 1; islot < psstrmOut->WritePos(); islot++)
- psstrmOut->SlotAt(islot)->ZapPosition();
-
- m_fAttachMod = false;
- m_fShiftMod = false;
-}
-
-/*----------------------------------------------------------------------------------------------
- The shift attribute of a slot has been modified. Make sure any slots that are part of the
- same attachment cluster are local to this stream. The reason for this is so that the
- position calculations stay consistent within the stream.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::EnsureLocalAttachmentTree(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islotThis)
-{
- if (m_dislotRootFixed)
- {
- GrSlotState * pslotRoot = SlotAtOffset(psstrmOut, m_dislotRootFixed);
- psstrmOut->EnsureLocalCopy(ptman, pslotRoot, psstrmIn);
- pslotRoot = SlotAtOffset(psstrmOut, m_dislotRootFixed); // get the new one!
- pslotRoot->EnsureLocalAttachmentTree(ptman, psstrmIn, psstrmOut, islotThis + m_dislotRootFixed);
- }
- for (size_t islot = 0; islot < m_vdislotAttLeaves.size(); islot++)
- {
- GrSlotState * pslotLeaf = SlotAtOffset(psstrmOut, m_vdislotAttLeaves[islot]);
- psstrmOut->EnsureLocalCopy(ptman, pslotLeaf, psstrmIn);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- The recipient slot is being attached to the argument slot.
- NOTE: the caller is responsible to zap the cached positions of following glyphs
- in the stream.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::AttachToRoot(GrTableManager * ptman, GrSlotStream * psstrm,
- GrSlotState * pslotNewRoot)
-{
- GrSlotState * pslotOldRoot = (m_dislotRootFixed == 0) ?
- NULL :
- SlotAtOffset(psstrm, m_dislotRootFixed);
-
- if (pslotOldRoot)
- {
- if (pslotOldRoot != pslotNewRoot)
- pslotOldRoot->RemoveLeaf(m_dislotRootFixed);
- pslotOldRoot->ZapMetricsAndPositionDownToBase(psstrm);
- pslotOldRoot->ZapMetricsOfLeaves(psstrm);
- }
-
- ZapCompositeMetrics();
-
- if (pslotNewRoot && pslotNewRoot != pslotOldRoot)
- {
- pslotNewRoot->AddLeaf(m_srAttachTo);
- pslotNewRoot->ZapMetricsAndPositionDownToBase(psstrm);
- pslotNewRoot->ZapMetricsOfLeaves(psstrm);
- }
-
- m_dislotRootFixed = m_srAttachTo;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the absolute position of the glyph, relative to the start of the segment,
- in font design units.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::Position(GrTableManager * ptman,
- GrSlotStream * psstrmOut, int * pmXPos, int * pmYPos)
-{
- Assert(!m_fAttachMod); // the attachment tree should be set up
- Assert(!m_fShiftMod);
-
- float xsWidth, xsVisWidth;
- if (m_xsPositionX == kNegInfFloat || m_ysPositionY == kNegInfFloat)
- ptman->CalcPositionsUpTo(psstrmOut->m_ipass, this, &xsWidth, &xsVisWidth);
-
- *pmXPos = ptman->LogToEmUnits(m_xsPositionX);
- *pmYPos = ptman->LogToEmUnits(m_ysPositionY);
-}
-
-/*----------------------------------------------------------------------------------------------
- Recalculate the metrics for this slot, which has attachments on it (or possibly
- did in the past).
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::AdjustRootMetrics(GrTableManager * ptman, GrSlotStream * psstrm)
-{
- Assert(m_dislotRootFixed == m_srAttachTo);
- GrSlotState * pslotRoot = AttachRoot(psstrm);
- CalcRootMetrics(ptman, psstrm, kPosInfinity);
- if (pslotRoot)
- pslotRoot->AdjustRootMetrics(ptman, psstrm);
-}
-
-/*----------------------------------------------------------------------------------------------
- Calculate the composite metrics for this slot.
-
- @param psstrm - stream for which we are calculating it
- @param nLevel - attachment level we are asking for; kPosInifinity means all levels
- @param fThorough - true: do a thorough recalculation; false: don't recalculate
- metrics for leaves (are they assumed to be accurate???)
- --currently not used
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::CalcCompositeMetrics(GrTableManager * ptman, GrSlotStream * psstrm,
- int nLevel, bool fThorough)
-{
- if (m_nCompositeLevel == nLevel)
- return;
-
- if (fThorough)
- {
- Assert(m_dislotRootFixed == m_srAttachTo);
- GrSlotState * pslotRoot = AttachRoot(psstrm);
-
- InitMetrics(ptman, pslotRoot);
-
- for (size_t islot = 0; islot < m_vdislotAttLeaves.size(); islot++)
- {
- GrSlotState * pslotLeaf = SlotAtOffset(psstrm, m_vdislotAttLeaves[islot]);
- if (pslotLeaf->AttachLevel() <= nLevel)
- pslotLeaf->CalcCompositeMetrics(ptman, psstrm, nLevel, fThorough);
- else
- // this slot will be ignored in the composite metrics
- pslotLeaf->ZapRootMetrics();
- }
- CalcRootMetrics(ptman, psstrm, nLevel);
-
- m_nCompositeLevel = nLevel;
- }
- else
- {
- Assert(false); // for now
-
- // Don't bother with the leaves.
- InitRootMetrics(ptman);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Calculate the metrics for this node and all its leaf nodes.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::CalcRootMetrics(GrTableManager * ptman, GrSlotStream * psstrm, int nLevel)
-{
- for (size_t idislot = 0; idislot < m_vdislotAttLeaves.size(); idislot++)
- {
- GrSlotState * pslot = SlotAtOffset(psstrm, m_vdislotAttLeaves[idislot]);
- if (pslot->AttachLevel() > nLevel)
- continue;
-
- m_xsClusterXOffset = min(m_xsClusterXOffset, pslot->m_xsClusterXOffset);
- if (!pslot->m_fIgnoreAdvance)
- {
- m_xsClusterAdv = max(
- m_xsClusterAdv,
- pslot->m_xsClusterAdv + m_xsRootShiftX);
- }
- m_xsClusterBbLeft = min(m_xsClusterBbLeft, pslot->m_xsClusterBbLeft);
- m_xsClusterBbRight = max(m_xsClusterBbRight, pslot->m_xsClusterBbRight);
- m_ysClusterBbTop = max(m_ysClusterBbTop, pslot->m_ysClusterBbTop);
- m_ysClusterBbBottom = min(m_ysClusterBbBottom, pslot->m_ysClusterBbBottom);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Reset the cluster metrics of this slot.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::InitMetrics(GrTableManager * ptman, GrSlotState * pslotRoot)
-{
- InitLeafMetrics(ptman, pslotRoot);
- InitRootMetrics(ptman);
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the variables that store the offsets of just this node (ignoring any of its
- leaves) relative to the cluster base.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::InitLeafMetrics(GrTableManager * ptman, GrSlotState * pslotRoot)
-{
- float xsShiftX = ptman->EmToLogUnits(ShiftX());
- float ysShiftY = ptman->EmToLogUnits(ShiftY());
-
- if (ptman->RightToLeft())
- xsShiftX *= -1;
-
- if (IsBase())
- {
- // The x-value below has to be zero because the shift is incorporated into
- // m_xsRootShiftX. (m_ysRootShiftY, on the other hand, isn't used anywhere.)
- m_xsOffsetX = 0;
- m_ysOffsetY = ysShiftY;
-
- m_xsRootShiftX = xsShiftX;
- m_ysRootShiftY = ysShiftY;
- Assert(!IsLineBreak(ptman->LBGlyphID())
- || (m_xsRootShiftX == 0 && m_ysRootShiftY == 0));
- return;
- }
-
- Assert(!IsLineBreak(ptman->LBGlyphID()));
-
- // Hint-adjusted logical coordinates equivalent to attach.at and attach.with attributes.
- // If attach.at or attach.with attributes were unset, the defaults for a side-by-side
- // attachment should have been supplied in HandleModifiedPosition().
- float xsAttAtX, ysAttAtY, xsAttWithX, ysAttWithY;
- AttachLogUnits(ptman, pslotRoot, &xsAttAtX, &ysAttAtY, &xsAttWithX, &ysAttWithY);
-
- m_xsOffsetX = xsAttAtX - xsAttWithX;
- m_xsOffsetX += pslotRoot->m_xsOffsetX;
- m_xsOffsetX += xsShiftX;
-
- m_ysOffsetY = ysAttAtY - ysAttWithY;
- m_ysOffsetY += pslotRoot->m_ysOffsetY;
- m_ysOffsetY += ysShiftY;
-
- // Cumulative effect of shifts on this and all base nodes:
- m_xsRootShiftX = pslotRoot->m_xsRootShiftX + xsShiftX;
- m_ysRootShiftY = pslotRoot->m_ysRootShiftY + ysShiftY;
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize the variables that store the offsets of this node taking into account its
- leaves; these are relative to the cluster base.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::InitRootMetrics(GrTableManager * ptman)
-{
- if (IsLineBreak(ptman->LBGlyphID()))
- {
- m_fIgnoreAdvance = true;
- m_xsClusterXOffset = 0;
- m_xsClusterAdv = 0;
- m_xsClusterBbLeft = 0;
- m_xsClusterBbRight = 0;
- m_ysClusterBbTop = 0;
- m_ysClusterBbBottom = 0;
- return;
- }
-
- float xsAdvanceX = ptman->EmToLogUnits(AdvanceX(ptman));
-
- // If the glyph's advance width is zero, then we NEVER want it to have any affect,
- // even if the glyph is attached way out to the right of its base's advance.
- m_fIgnoreAdvance = (xsAdvanceX == 0);
-
- float xsBbLeft = GlyphMetricLogUnits(ptman, kgmetBbLeft);
- float xsBbRight = GlyphMetricLogUnits(ptman, kgmetBbRight);
- float ysBbTop = GlyphMetricLogUnits(ptman, kgmetBbTop);
- float ysBbBottom = GlyphMetricLogUnits(ptman, kgmetBbBottom);
-
- // Any shifts should be ignored for the sake of calculating actual position or width,
- // hence we subtract the cumulative effect of the shifts.
- m_xsClusterXOffset = m_xsOffsetX - m_xsRootShiftX;
- m_xsClusterAdv = m_xsOffsetX + xsAdvanceX - m_xsRootShiftX;
-
- m_xsClusterBbLeft = m_xsOffsetX + xsBbLeft;
- m_xsClusterBbRight = m_xsOffsetX + xsBbRight;
- m_ysClusterBbTop = m_ysOffsetY + ysBbTop;
- m_ysClusterBbBottom = m_ysOffsetY + ysBbBottom;
-}
-
-/*----------------------------------------------------------------------------------------------
- X-offset of a single glyph relative to the previous advance position.
-----------------------------------------------------------------------------------------------*/
-float GrSlotState::GlyphXOffset(GrSlotStream * psstrm, float fakeItalicRatio)
-{
- float xsRet = Base(psstrm)->ClusterRootOffset() + m_xsOffsetX;
-
- // fake an italic slant
- xsRet += m_ysOffsetY * fakeItalicRatio;
-
- return xsRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Y-offsets of a single glyph relative to the previous advance position.
-----------------------------------------------------------------------------------------------*/
-float GrSlotState::GlyphYOffset(GrSlotStream * psstrm)
-{
- return m_ysOffsetY;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the offset of the last leaf of the cluster, relative to this slot, which is
- the base. Return kNegInfinity if there are not enough slots in the stream to tell.
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::LastLeafOffset(GrSlotStream * psstrm)
-{
- int islotRet = 0;
- for (size_t idislot = 0; idislot < m_vdislotAttLeaves.size(); idislot++)
- {
- int dislot = m_vdislotAttLeaves[idislot];
- Assert(dislot != 0);
- if (!psstrm->HasSlotAtPosPassIndex(PosPassIndex() + dislot))
- return kNegInfinity;
- GrSlotState * pslotLeaf = SlotAtOffset(psstrm, dislot);
- int islotTmp = pslotLeaf->LastLeafOffset(psstrm);
- if (islotTmp == kNegInfinity)
- return kNegInfinity;
- islotRet = max(islotRet, (dislot + islotTmp));
- }
- return islotRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the attach positions in the device context's logical units,
- adjusted for hinting if possible.
-
- Note that m_nAttachAt/WithGpoint = 0 is always an invalid value (resulting from a
- glyph attribute that was defined in terms of x/y coordinates that didn't map to an
- actual on-curve point). Therefore the x/y coordinates should be used to do the
- attachment. In the case where we actually want point #0 on the curve,
- m_nAttachAt/WithGpoint will have the special value 'kGpointZero' (the glyph attribute
- is defined this way).
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::AttachLogUnits(GrTableManager * ptman, GrSlotState * pslotRoot,
- float * pxsAttAtX, float * pysAttAtY,
- float * pxsAttWithX, float * pysAttWithY)
-{
- if (m_nAttachAtGpoint == kNotYetSet || m_nAttachAtGpoint == 0)
- {
- // Use x- and y-coordinates; no adjustment for hinting is done.
- int mX = m_mAttachAtX + m_mAttachAtXOffset;
- int mY = m_mAttachAtY + m_mAttachAtYOffset;
-
- *pxsAttAtX = ptman->EmToLogUnits(mX);
- *pysAttAtY = ptman->EmToLogUnits(mY);
- }
- else
- {
- // Look up the actual on-curve point.
- int nGpoint = m_nAttachAtGpoint;
- if (nGpoint == kGpointZero)
- nGpoint = 0;
- bool fImpl = ptman->GPointToXY(pslotRoot->GlyphID(), nGpoint, pxsAttAtX, pysAttAtY);
-
- // Debuggers:
- //int mXTmpAt = m_mAttachAtX + m_mAttachAtXOffset;
- //int mYTmpAt = m_mAttachAtY + m_mAttachAtYOffset;
- //int xsAttAtXTmp = ptman->EmToLogUnits(mXTmpAt);
- //int ysAttAtYTmp = ptman->EmToLogUnits(mYTmpAt);
- //fImpl = false;
-
- if (!fImpl)
- {
- // Fall back to using x- and y-coordinates; no adjustment for hinting.
- int mX = m_mAttachAtX + m_mAttachAtXOffset;
- int mY = m_mAttachAtY + m_mAttachAtYOffset;
- *pxsAttAtX = ptman->EmToLogUnits(mX);
- *pysAttAtY = ptman->EmToLogUnits(mY);
- }
- else
- {
- // Adjust by offsets.
- *pxsAttAtX += ptman->EmToLogUnits(m_mAttachAtXOffset);
- *pysAttAtY += ptman->EmToLogUnits(m_mAttachAtYOffset);
- }
- }
-
- if (m_nAttachWithGpoint == kNotYetSet || m_nAttachWithGpoint == 0)
- {
- // Use x- and y-coordinates; no adjustment for hinting is done.
- int mX = m_mAttachWithX + m_mAttachWithXOffset;
- int mY = m_mAttachWithY + m_mAttachWithYOffset;
-
- *pxsAttWithX = ptman->EmToLogUnits(mX);
- *pysAttWithY = ptman->EmToLogUnits(mY);
- }
- else
- {
- // Look up the actual on-curve point.
- int nGpoint = m_nAttachWithGpoint;
- if (nGpoint == kGpointZero)
- nGpoint = 0;
- bool fImpl = ptman->GPointToXY(m_chwGlyphID, nGpoint, pxsAttWithX, pysAttWithY);
-
- // Debuggers:
- //int mXTmpWith = m_mAttachWithX + m_mAttachWithXOffset;
- //int mYTmpWith = m_mAttachWithY + m_mAttachWithYOffset;
- //int xsAttWithXTmp = ptman->EmToLogUnits(mXTmpWith);
- //int ysAttWithYTmp = ptman->EmToLogUnits(mYTmpWith);
- //fImpl = false;
-
- if (!fImpl)
- {
- // Fall back to using x- and y-coordinates; no adjustment for hinting.
- int mX = m_mAttachWithX + m_mAttachWithXOffset;
- int mY = m_mAttachWithY + m_mAttachWithYOffset;
- *pxsAttWithX = ptman->EmToLogUnits(mX);
- *pysAttWithY = ptman->EmToLogUnits(mY);
- }
- else
- {
- // Adjust by offsets.
- *pxsAttWithX += ptman->EmToLogUnits(m_mAttachWithXOffset);
- *pysAttWithY += ptman->EmToLogUnits(m_mAttachWithYOffset);
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the slot that is 'dislot' slots away from this slot in the given stream.
- Only valid for streams that are the input to or output of positioning passes.
-----------------------------------------------------------------------------------------------*/
-GrSlotState * GrSlotState::SlotAtOffset(GrSlotStream * psstrm, int dislot)
-{
- Assert(psstrm->m_fUsedByPosPass);
- return psstrm->SlotAtPosPassIndex(PosPassIndex() + dislot);
-}
-
-/*----------------------------------------------------------------------------------------------
- If the direction level has not been calculated at this point, assume it is the
- top direction. This should only happen if there was no bidi pass to set it.
- This method should only be called by the positioning passes; it assumes any bidi
- pass has been run.
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::PostBidiDirLevel(GrTableManager * ptman)
-{
- if (m_nDirLevel == -1)
- {
- Assert(!ptman->HasBidiPass());
- return ptman->TopDirectionLevel();
- }
- return m_nDirLevel;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if this glyph represents a LRM code.
-----------------------------------------------------------------------------------------------*/
-bool GrSlotState::IsLrm()
-{
- if (PassModified() == 0)
- return (m_nUnicode == knLRM);
- return m_pslotPrevState->IsLrm();
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if this glyph represents a RLM code.
-----------------------------------------------------------------------------------------------*/
-bool GrSlotState::IsRlm()
-{
- if (PassModified() == 0)
- return (m_nUnicode == knRLM);
- return m_pslotPrevState->IsRlm();
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Used by GlyphInfo
-----------------------------------------------------------------------------------------------*/
-//float GrSlotOutput::AdvanceX(Segment * pseg)
-//{
-// return pseg->EmToLogUnits(m_mAdvanceX);
-//}
-//float GrSlotOutput::AdvanceY(Segment * pseg)
-//{
-// return pseg->EmToLogUnits(m_mAdvanceY);
-//}
-float GrSlotOutput::MaxStretch(Segment * pseg, int level)
-{
- Assert(level == 0);
- return (level == 0) ? pseg->EmToLogUnits(m_mJStretch0) : 0;
-}
-float GrSlotOutput::MaxShrink(Segment * pseg, int level)
-{
- Assert(level == 0);
- return (level == 0) ? pseg->EmToLogUnits(m_mJShrink0) : 0;
-}
-float GrSlotOutput::StretchStep(Segment * pseg, int level)
-{
- Assert(level == 0);
- return (level == 0) ? pseg->EmToLogUnits(m_mJStep0) : 0;
-}
-int GrSlotOutput::JustWeight(int level)
-{
- Assert(level == 0);
- return (level == 0) ? m_nJWeight0 : 0;
-}
-float GrSlotOutput::JustWidth(Segment * pseg, int level)
-{
- Assert(level == 0);
- return (level == 0) ? pseg->EmToLogUnits(m_mJWidth0) : 0;
-}
-float GrSlotOutput::MeasureSolLogUnits(Segment * pseg)
-{
- return pseg->EmToLogUnits(m_mMeasureSol);
-}
-float GrSlotOutput::MeasureEolLogUnits(Segment * pseg)
-{
- return pseg->EmToLogUnits(m_mMeasureEol);
-}
-
-/*----------------------------------------------------------------------------------------------
- Make a copy of the GrSlotOutput. This is used in making an identical copy of the segment.
- Warning: this function will break if GrSlotState and subclasses are given virtual
- methods. In that case, we will need to copy from the address of the first variable in
- GrSlotAbstract.
-----------------------------------------------------------------------------------------------*/
-void GrSlotOutput::ExactCopyFrom(GrSlotOutput * pslout, u_intslot * pnVarLenBuf, int cnExtraPerSlot)
-{
- // The chunk of the object from GrSlotAbstract can be copied exactly,
- // except for the variable-length buffer.
- *this = *pslout;
- m_prgnVarLenBuf = pnVarLenBuf;
- std::copy(pslout->m_prgnVarLenBuf, pslout->m_prgnVarLenBuf + cnExtraPerSlot,
- m_prgnVarLenBuf);
-
- // Now copy the stuff specific to GrSlotOutput.
- m_ichwBeforeAssoc = pslout->m_ichwBeforeAssoc;
- m_ichwAfterAssoc = pslout->m_ichwAfterAssoc;
- m_cComponents = pslout->m_cComponents;
-
- m_isloutClusterBase = pslout->m_isloutClusterBase;
- m_disloutCluster = pslout->m_disloutCluster;
- m_xsClusterXOffset = pslout->m_xsClusterXOffset;
- m_xsClusterAdvance = pslout->m_xsClusterAdvance;
- m_igbb = pslout->m_igbb;
- m_xsAdvanceX = pslout->m_xsAdvanceX;
-// m_ysAdvanceY = pslout->m_ysAdvanceY;
-// m_rectBB = pslout->m_rectBB;
-}
-
-/*----------------------------------------------------------------------------------------------
- Shift the glyph to the opposite end of the segment. This is needed for white-space-only
- segments whose direction is being changed.
-----------------------------------------------------------------------------------------------*/
-void GrSlotOutput::ShiftForDirDepthChange(float dxsSegWidth)
-{
- float dxsShift = dxsSegWidth - m_xsAdvanceX - (2 * m_xsPositionX);
- int tmp; tmp = (int) dxsShift;
- m_xsPositionX += dxsShift;
-// m_rectBB.left += dxsShift;
-// m_rectBB.right += dxsShift;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the indices of all the glyphs attached to this cluster, in logical order.
- Return an empty vector if this glyph is not the base glyph or if there are no
- attached glyphs.
- This method return glyph indices, not slot indices.
-----------------------------------------------------------------------------------------------*/
-void GrSlotOutput::ClusterMembers(Segment * pseg, int isloutThis, std::vector<int> & visloutRet)
-{
- if (m_isloutClusterBase == -1 || m_isloutClusterBase == isloutThis) // yes, a base
- pseg->ClusterMembersForGlyph(isloutThis, m_disloutCluster, visloutRet);
- else
- {
- Assert(visloutRet.size() == 0);
- }
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/GrSlotState.h b/Build/source/libs/graphite-engine/src/segment/GrSlotState.h
deleted file mode 100644
index d000927d1a4..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrSlotState.h
+++ /dev/null
@@ -1,1287 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrSlotState.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Copyright (C) 1999 by SIL International. All rights reserved.
-
-Description:
- Classes GrSlotAbstract, GrSlotState, and GrSlotOutput
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef SLOTSTATE_INCLUDED
-#define SLOTSTATE_INCLUDED
-
-namespace gr
-{
-
-class GrSlotAbstract;
-class GrSlotState;
-class GrSlotOutput;
-class GrSlotStream;
-class Font;
-
-//:End Ignore
-
-
-/*----------------------------------------------------------------------------------------------
- Subsumes GrSlotState and GrSlotOutput, both of which represent a single glyph
- and its slot attributes and features.
-
- Hungarian: slab
-----------------------------------------------------------------------------------------------*/
-class GrSlotAbstract
-{
- friend class GrSlotStream;
- friend class GlyphInfo;
-
-public:
- // Constructor:
- GrSlotAbstract()
- {
- }
-
- ~GrSlotAbstract()
- {
- // the table manager is responsible for destroying the contents of m_prgnVarLenBuf
- }
-
- void BasicInitializeAbstract(int cnCompPerLig, u_intslot * pnBuf)
- {
- m_dirc = kNotYetSet8;
- m_lb = kNotYetSet8;
- m_fInsertBefore = true;
- m_nDirLevel = -1;
-
- m_bIsSpace = -1; // unknown
-
- m_fInsertBefore = true;
-
- m_mMeasureSol = 0;
- m_mMeasureEol = 0;
-
- m_mJStretch0 = 0;
- m_mJShrink0 = 0;
- m_mJStep0 = 0;
- m_nJWeight0 = 0;
- m_mJWidth0 = 0;
-
- m_cnCompPerLig = byte(cnCompPerLig);
- m_prgnVarLenBuf = pnBuf;
- }
-
- void CopyAbstractFrom(GrSlotState * pslot);
-
- void SetBufferPtr(u_intslot * pn)
- {
- m_prgnVarLenBuf = pn;
- }
-
- gid16 GlyphID() { return m_chwGlyphID; }
- gid16 RawActualGlyph() { return m_chwActual; }
- float GetGlyphMetric(Font * pfont, int nGlyphMetricID, gid16 chwGlyphID);
-
- //GrSlotState * CompRefSlot(int i);
-
- int BreakWeight()
- {
- return (int)m_lb;
- }
- DirCode Directionality()
- {
- return DirCode(int(m_dirc));
- }
- int InsertBefore()
- {
- return m_fInsertBefore;
- }
- int MeasureSol()
- {
- return m_mMeasureSol;
- }
- int MeasureEol()
- {
- return m_mMeasureEol;
- }
-
- int DirLevel()
- {
- return m_nDirLevel;
- }
-
- int SpecialSlotFlag()
- {
- return m_spsl;
- }
- void SetSpecialSlotFlag(int spsl)
- {
- m_spsl = sdata8(spsl);
- }
-
- enum {
- kNotYetSet = 0x7FFF,
- kNotYetSet8 = 0x7F,
- kInvalidGlyph = 0xFFFF
- };
-
- gid16 ActualGlyphForOutput(GrTableManager * ptman);
-
- // Needed for GlyphInfo:
- float XPosition()
- {
- return m_xsPositionX;
- }
- float YPosition()
- {
- return m_ysPositionY; // relative to baseline (positive is up)
- }
-
-protected:
- gid16 m_chwGlyphID;
- gid16 m_chwActual; // actual glyph to output (which is a different glyph for pseudos)
-
- sdata8 m_spsl; // special slot flag: LB, bidi marker
-
-// bool m_fInitialLB; // for LB slots: true if this is the initial LB;
- // false if it is the terminating LB
- // TODO: remove
-
- sdata8 m_dirc; // default = kNotYetSet8 (read from glyph attr)
- sdata8 m_lb; // default = kNotYetSet8 (read from glyph attr)
-
- sdata8 m_nDirLevel;
-
- // Slot attributes that are used by GrSlotOutput:
- short m_mMeasureSol;
- short m_mMeasureEol;
-
- unsigned short m_mJStretch0;
- unsigned short m_mJShrink0;
- unsigned short m_mJStep0;
- int m_mJWidth0;
- byte m_nJWeight0;
-
- bool m_fInsertBefore; // default = true
-
- sdata8 m_bIsSpace; // 0 = false, 1 = true, -1 = unknown
-
- byte m_cnCompPerLig;
- // There is a large block managed by either the GrTableManager (for GrSlotState)
- // or the segment (for GrSlotOutput); this variable points at the sub-buffer for this
- // particular slot:
- u_intslot * m_prgnVarLenBuf;
-
- float m_xsPositionX;
- float m_ysPositionY;
-
-}; // end of class GrSlotAbstract
-
-
-/*----------------------------------------------------------------------------------------------
- A GrSlotState represents one slot as modified by a pass in the table.
- Each time a slot state is modified, a new instance is created, copying the relevant
- information.
-
- Hungarian: slot
-
- Other hungarian:
- m - integer indicating glyph design units ("em-units")
- sr - integer indicating slot reference
-----------------------------------------------------------------------------------------------*/
-class GrSlotState : public GrSlotAbstract
-{
- friend class GrSlotStream;
- friend class FontMemoryUsage;
-
-public:
- enum { kNeutral = 99 };
-
- // Constructors:
- GrSlotState()
- : GrSlotAbstract(),
- m_pslotPrevState(NULL)
- {
- m_vpslotAssoc.clear();
- //m_fInitialLB = false; // TODO: remove
- m_spsl = kspslNone;
- m_fNeutralAssocs = false;
- m_dircProc = kdircUnknown;
- m_fDirProcessed = false;
-
- m_vdislotAttLeaves.clear();
- m_fAttachMod = false;
- m_fShiftMod = false;
- m_dislotRootFixed = 0;
- ZapCompositeMetrics();
- }
-
- ~GrSlotState()
- {
- }
-
- void BasicInitialize(int cnUserDefn, int cnCompPerLig, int cnFeat, u_intslot * pnBuf)
- {
- BasicInitializeAbstract(cnCompPerLig, pnBuf);
-
- m_xysGlyphWidth = -1;
- m_xysFontAscent = -1;
- m_xysFontDescent = -1;
-
- m_mAdvanceX = kNotYetSet;
- m_mAdvanceY = kNotYetSet;
- m_mShiftX = 0;
- m_mShiftY = 0;
-
- m_fAdvXSet = false; // for transduction logging
- m_fAdvYSet = false;
-
- m_srAttachTo = 0;
- m_nAttachLevel = 0;
-
- m_mAttachAtX = kNotYetSet;
- m_mAttachAtY = 0;
- m_nAttachAtGpoint = kNotYetSet;
- m_mAttachAtXOffset = 0;
- m_mAttachAtYOffset = 0;
- m_mAttachWithX = kNotYetSet;
- m_mAttachWithY = 0;
- m_nAttachWithGpoint = kNotYetSet;
- m_mAttachWithXOffset = 0;
- m_mAttachWithYOffset = 0;
-
- m_islotPosPass = kNotYetSet;
-
- m_cnUserDefn = byte(cnUserDefn);
- m_cnFeat = byte(cnFeat);
-
- m_fHasComponents = false;
- }
-
- void Initialize(gid16 chw, GrEngine *, GrFeatureValues fval,
- int ipass, int ichwSegOffset, int nUnicode = -1);
- void Initialize(gid16 chw, GrEngine *, GrSlotState * pslotFeat,
- int ipass, int ichwSegOffset);
- void Initialize(gid16 chw, GrEngine *, GrSlotState * pslotFeat,
- int ipass);
-
- void InitializeFrom(GrSlotState * pslot, int ipass);
- void CopyFeaturesFrom(GrSlotState * pslotSrc);
- void FixAttachmentTree(GrSlotState * pslotOld);
-
- void CopyFrom(GrSlotState * pslot, bool fCopyEverything = true);
-
- // General:
- int RawSegOffset() { return m_ichwSegOffset; }
-
- void SetGlyphID(gid16 chw)
- {
- m_chwGlyphID = chw;
- m_chwActual = kInvalidGlyph;
- m_xysGlyphWidth = -1; // indicate glyph metrics are invalid
- m_ipassFsmCol = -1;
- m_colFsm = -1;
- }
-
- int PosPassIndex()
- {
- return m_islotPosPass;
- }
- void SetPosPassIndex(int islot, bool fInputToPosPass1)
- {
- // If we're resetting it, it should be to the same value as before:
- Assert(fInputToPosPass1 || m_islotPosPass == kNotYetSet || m_islotPosPass == islot);
- m_islotPosPass = islot;
- }
- void IncPosPassIndex()
- {
- m_islotPosPass++;
- }
- void ZapPosPassIndex()
- {
- m_islotPosPass = kNotYetSet;
- }
-
- int StyleIndex() { return m_bStyleIndex; }
-
- int AttachTo() { return m_srAttachTo; }
- int AttachLevel() { return m_nAttachLevel; }
-
- int RawAttachAtX() { return m_mAttachAtX; }
- int AttachAtY() { return m_mAttachAtY; }
- int AttachAtGpoint() { return m_nAttachAtGpoint; }
- int AttachAtXOffset() { return m_mAttachAtXOffset; }
- int AttachAtYOffset() { return m_mAttachAtYOffset; }
-
- int RawAttachWithX() { return m_mAttachWithX; }
- int AttachWithY() { return m_mAttachWithY; }
- int AttachWithGpoint() { return m_nAttachWithGpoint; }
- int AttachWithXOffset() { return m_mAttachWithXOffset; }
- int AttachWithYOffset() { return m_mAttachWithYOffset; }
-
- void Associate(GrSlotState *);
- void Associate(GrSlotState *, GrSlotState *);
- void Associate(std::vector<GrSlotState*> &);
- void ClearAssocs();
-
- int AssocsSize() { return m_vpslotAssoc.size(); }
- GrSlotState * RawBeforeAssocSlot()
- {
- if (m_vpslotAssoc.size() == 0)
- return NULL;
- return m_vpslotAssoc[0];
- }
- GrSlotState * RawAfterAssocSlot()
- {
- if (m_vpslotAssoc.size() == 0)
- return NULL;
- return m_vpslotAssoc.back();
- }
- ////GrSlotState * AssocSlot(int i) { return m_vpslotAssoc[i]; }
-
- GrSlotState * AssocSlot(int i)
- {
- if (i < 0)
- return NULL;
- if (i >= signed(m_vpslotAssoc.size()))
- return NULL;
-
- GrSlotState * pslotAssoc = m_vpslotAssoc[i];
- // handle possible reprocessing
- while (pslotAssoc && pslotAssoc->PassModified() == m_ipassModified)
- pslotAssoc = pslotAssoc->m_pslotPrevState;
- return pslotAssoc;
- }
-
- void AllAssocs(std::vector<int> & vichw);
- int BeforeAssoc();
- int AfterAssoc();
-
- void CleanUpAssocs();
-
- void SetComponentRefsFor(GrSlotOutput *, int iComp = -1);
- void AllComponentRefs(std::vector<int> & vichw);
-
- int PassModified() { return m_ipassModified; }
- int SegOffset();
- int UnderlyingPos();
- GrSlotState * PrevState() { return m_pslotPrevState; }
-
- void MarkDeleted() // for now, do nothing
- {
- }
-
- int IsSpace(GrTableManager * ptman);
-
- // TODO: remove argument from these methods; it is no longer needed.
- bool IsLineBreak(gid16 chwLB)
- {
- return (IsInitialLineBreak(chwLB) || IsFinalLineBreak(chwLB));
- //return (m_chwGlyphID == chwLB); // TODO: remove
- }
- bool IsInitialLineBreak(gid16 chwLB)
- {
- return (m_spsl == kspslLbInitial);
- //return (IsLineBreak(chwLB) && m_fInitialLB == true); // TODO: remove
- }
- bool IsFinalLineBreak(gid16 chwLB)
- {
- return (m_spsl == kspslLbFinal);
- //return (IsLineBreak(chwLB) && m_fInitialLB == false); // TODO: remove
- }
-
- bool IsBidiMarker()
- {
- switch (m_spsl)
- {
- case kspslLRM:
- case kspslRLM:
- case kspslLRO:
- case kspslRLO:
- case kspslLRE:
- case kspslRLE:
- case kspslPDF:
- return true;
- default:
- return false;
- }
- return false;
- }
-
- bool HasComponents() { return m_fHasComponents; }
-
- // Directionality as determined by the bidi algorithm
- DirCode DirProcessed() // return the value
- {
- Assert(m_dirc != kNotYetSet8);
- if (m_dircProc == kdircUnknown)
- m_dircProc = DirCode(m_dirc);
- return m_dircProc;
- }
- void SetDirProcessed(DirCode dirc) // set the directionality
- {
- m_dircProc = dirc;
- }
- bool DirHasBeenProcessed() // has this slot been fully processed?
- {
- return m_fDirProcessed;
- }
- void MarkDirProcessed() // this slot has been fully processed
- {
- m_fDirProcessed = true;
- }
-
- int RawAdvanceX() { return m_mAdvanceX; }
- int RawAdvanceY() { return m_mAdvanceY; }
- int ShiftX() { return m_mShiftX; }
- int ShiftY() { return m_mShiftY; }
-
- // Slot attributes that must be calculated:
-
- int AdvanceX(GrTableManager * ptman)
- {
- if (m_mAdvanceX == kNotYetSet)
- // Initialize it from the glyph metric (adjusted for hinting).
- m_mAdvanceX = short(GlyphMetricEmUnits(ptman, kgmetAdvWidth));
- return m_mAdvanceX;
- }
-
- int AdvanceY(GrTableManager * ptman)
- {
- if (m_mAdvanceY == kNotYetSet)
- // Initialize it from the glyph metric (adjusted for hinting).
- m_mAdvanceY = short(GlyphMetricEmUnits(ptman, kgmetAdvHeight));
- return m_mAdvanceY;
- }
-
- int AttachAtX(GrTableManager * ptman, GrSlotStream * psstrm)
- {
- if (m_mAttachAtX == kNotYetSet)
- {
- Assert(false); // Should have already been set in HandleModifiedPosition,
- // but just in case...
- if (m_srAttachTo == 0)
- return 0;
- else
- m_mAttachAtX = short(AttachRoot(psstrm)->AdvanceX(ptman)); // attach on the right
- }
- return m_mAttachAtX;
- }
-
- int AttachWithX(GrTableManager * ptman, GrSlotStream * psstrm)
- {
- if (m_mAttachAtX == kNotYetSet)
- {
- Assert(false); // Should have already been set in HandleModifiedPosition,
- // but just in case.
- if (!m_srAttachTo == 0)
- return 0;
- else
- m_mAttachAtX = 0; // attach on the right
- }
- return m_mAttachAtX;
- }
-
- int JStretch()
- {
- return m_mJStretch0;
- }
- int JShrink()
- {
- return m_mJShrink0;
- }
- int JStep()
- {
- return m_mJStep0;
- }
- int JWeight()
- {
- return m_nJWeight0;
- }
- int JWidth()
- {
- return m_mJWidth0;
- }
-
- // Slot attribute setters:
-
- void SetAdvanceX(int mVal)
- {
- Assert(mVal < 0xFFFF); m_mAdvanceX = short(mVal & 0xFFFF); m_fShiftMod = true;
- m_fAdvXSet = true; // for transduction logging
- }
- void SetAdvanceY(int mVal)
- {
- Assert(mVal < 0xFFFF); m_mAdvanceY = short(mVal & 0xFFFF); m_fShiftMod = true;
- m_fAdvYSet = true; // for transduction logging
- }
- void SetShiftX(int mVal)
- {
- Assert(mVal < 0xFFFF); m_mShiftX = short(mVal & 0xFFFF);
- m_fShiftMod = true;
- }
- void SetShiftY(int mVal)
- {
- Assert(mVal < 0xFFFF); m_mShiftY = short(mVal & 0xFFFF);
- m_fShiftMod = true;
- }
-
- void SetAttachTo(int srVal)
- {
- Assert(srVal < 0xFFFF);
- m_srAttachTo = short(srVal & 0xFFFF);
- m_fAttachMod = true;
- }
- void SetAttachLevel(int nVal) {
- Assert(nVal < 0xFFFF); m_nAttachLevel = short(nVal & 0xFFFF); m_fAttachMod = true; }
-
- void SetAttachAtX(int mVal)
- {
- Assert(mVal < 0xFFFF);
- m_mAttachAtX = short(mVal) & 0xFFFF;
- m_fAttachMod = true;
- }
- void SetAttachAtY(int mVal) {
- Assert(mVal < 0xFFFF); m_mAttachAtY = short(mVal & 0xFFFF); m_fAttachMod = true; }
- void SetAttachAtGpoint(int nVal) {
- m_nAttachAtGpoint = short(nVal); m_fAttachMod = true; }
- void SetAttachAtXOffset(int mVal) {
- Assert(mVal < 0xFFFF); m_mAttachAtXOffset = short(mVal & 0xFFFF); m_fAttachMod = true; }
- void SetAttachAtYOffset(int mVal) {
- Assert(mVal < 0xFFFF); m_mAttachAtYOffset = short(mVal & 0xFFFF); m_fAttachMod = true; }
-
- void SetAttachWithX(int mVal) {
- Assert(mVal < 0xFFFF); m_mAttachWithX = short(mVal & 0xFFFF); m_fAttachMod = true; }
- void SetAttachWithY(int mVal) {
- Assert(mVal < 0xFFFF); m_mAttachWithY = short(mVal & 0xFFFF); m_fAttachMod = true; }
- void SetAttachWithGpoint(int nVal) {
- m_nAttachWithGpoint = short(nVal); m_fAttachMod = true; }
- void SetAttachWithXOffset(int mVal) {
- Assert(mVal < 0xFFFF); m_mAttachWithXOffset = short(mVal & 0xFFFF); m_fAttachMod = true; }
- void SetAttachWithYOffset(int mVal) {
- Assert(mVal < 0xFFFF); m_mAttachWithYOffset = short(mVal & 0xFFFF); m_fAttachMod = true; }
-
- void SetCompRefSlot(GrTableManager * ptman, int i, GrSlotState * pslotComp);
-
- void SetBreakWeight(int lb) { m_lb = sdata8(lb); }
- void SetInsertBefore(bool f) { m_fInsertBefore = f; }
-
- void SetDirectionality(DirCode dirc) { m_dirc = sdata8(dirc); }
- void SetDirLevel(int n) { m_nDirLevel = sdata8(n); }
-
- void SetMeasureSol(int mVal) { m_mMeasureSol = short(mVal); }
- void SetMeasureEol(int mVal) { m_mMeasureEol = short(mVal); }
-
- void SetJStretch(int mVal) { m_mJStretch0 = short(mVal); }
- void SetJShrink(int mVal) { m_mJShrink0 = short(mVal); }
- void SetJStep(int mVal) { m_mJStep0 = short(mVal); }
- void SetJWeight(int nVal) { m_nJWeight0 = byte(nVal); }
- void SetJWidth(int mVal) { m_mJWidth0 = mVal; }
- void AddJWidthToAdvance(GrTableManager * ptman)
- {
- // Don't change m_fShiftMod.
- m_mAdvanceX = short(m_mJWidth0 + AdvanceX(ptman)); // make sure it is calculated
- m_mJWidth0 = 0;
- m_fAdvXSet = true; // for transduction logging
- }
-
- int PostBidiDirLevel(GrTableManager * ptman);
-
- bool BaseEarlierInStream();
-
- void ZapDirLevel()
- {
- m_nDirLevel = -1;
- m_dircProc = kdircUnknown;
- m_fDirProcessed = false;
- }
-
- int GlyphAttrValueEmUnits(GrTableManager * ptman, int nAttrID);
- int GlyphMetricEmUnits(GrTableManager * ptman, int nGlyphMetricID);
-
- float GlyphAttrValueLogUnits(GrTableManager * ptman, int nAttrID);
- float GlyphMetricLogUnits(GrTableManager * ptman, int nGlyphMetricID);
-
-// void HandleModifiedCluster(GrTableManager * ptman,
-// GrSlotStream * psstrm, int islotThis);
- void HandleModifiedPosition(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islotThis);
-
- void CalcCompositeMetrics(GrTableManager * ptman, GrSlotStream * psstrm,
- int nLevel, bool fThorough = false);
-
- void Position(GrTableManager * ptman,
- GrSlotStream * psstrmOut, int * pmXPos, int * pmYPos);
-
- void ZapPosition()
- {
- m_xsPositionX = kNegInfFloat;
- m_ysPositionY = kNegInfFloat;
- }
-
- void SetXPos(float xs)
- {
- m_xsPositionX = xs;
- }
- void SetYPos(float ys)
- {
- m_ysPositionY = ys; // relative to baseline (positive is up)
- }
-
- float ClusterRootOffset() { return -m_xsClusterXOffset; } // the offset of the root
- // relative to the whole cluster
-
- float ClusterAdvWidthFrom(float xs) { return xs + m_xsClusterAdv; }
- float ClusterBbLeftFrom(float xs) { return xs + m_xsClusterBbLeft; }
- float ClusterBbRightFrom(float xs) { return xs + m_xsClusterBbRight; }
-
- float ClusterLsb(GrSlotStream * psstrm, float xs)
- {
- return ClusterBbLeft(psstrm) + xs;
- }
- float ClusterRsb(GrSlotStream * psstrm, float xs)
- {
- return ClusterAdvWidthFrom(xs) - ClusterBbRightFrom(xs);
- }
-
- float ClusterAdvWidth(GrSlotStream * psstrm)
- {
- return ClusterAdvWidthFrom(Base(psstrm)->ClusterRootOffset());
- }
-// int ClusterAdvHeight(GrSlotStream * psstrm)
-// {
-// Assert(m_mAdvanceY != kNotYetSet);
-// return EmUnitsToTwips(m_mAdvanceY);
-// }
- float ClusterBbLeft(GrSlotStream * psstrm)
- {
- return ClusterBbLeftFrom(Base(psstrm)->ClusterRootOffset());
- }
- float ClusterBbRight(GrSlotStream * psstrm)
- {
- return ClusterBbRightFrom(Base(psstrm)->ClusterRootOffset());
- }
- float ClusterBbTop(GrSlotStream * psstrm)
- {
- return m_ysClusterBbTop;
- }
- float ClusterBbBottom(GrSlotStream * psstrm)
- {
- return m_ysClusterBbBottom;
- }
- float ClusterBbWidth(GrSlotStream * psstrm)
- {
- return m_xsClusterBbRight - m_xsClusterBbLeft + 1;
- }
- float ClusterBbHeight(GrSlotStream * psstrm)
- {
- return m_ysClusterBbTop - m_ysClusterBbBottom + 1;
- }
- float ClusterLsb(GrSlotStream * psstrm)
- {
- return ClusterBbLeft(psstrm);
- }
- float ClusterRsb(GrSlotStream * psstrm)
- {
- return ClusterAdvWidth(psstrm) - ClusterBbRight(psstrm);
- }
-
- float GlyphXOffset(GrSlotStream * psstrm, float fakeItalicRatio = 0);
- float GlyphYOffset(GrSlotStream * psstrm = NULL);
-
- bool IsBase()
- {
- Assert(m_dislotRootFixed == m_srAttachTo);
- return (m_dislotRootFixed == 0);
- }
-
- bool HasClusterMembers()
- {
- return (m_vdislotAttLeaves.size() > 0);
- }
-
- GrSlotState * AttachRoot(GrSlotStream * psstrm)
- {
- if (m_srAttachTo == 0)
- return NULL;
- else
- return SlotAtOffset(psstrm, m_srAttachTo);
- }
-
- int AttachRootPosPassIndex()
- {
- return PosPassIndex() + m_srAttachTo;
- }
-
- GrSlotState * Base(GrSlotStream * psstrm)
- {
- GrSlotState * pslotRoot = AttachRoot(psstrm);
- if (!pslotRoot)
- return this;
- else
- return pslotRoot->Base(psstrm);
- }
-
- int LastLeafOffset(GrSlotStream * psstrm);
-
- void AddLeaf(int dislot)
- {
- m_vdislotAttLeaves.push_back(dislot * -1);
- }
- void RemoveLeaf(int dislot)
- {
- for (size_t iislot = 0; iislot < m_vdislotAttLeaves.size(); iislot++)
- {
- if (m_vdislotAttLeaves[iislot] == dislot * -1)
- {
- m_vdislotAttLeaves.erase(m_vdislotAttLeaves.begin() + iislot);
- return;
- }
- }
- Assert(false);
- }
-
- bool HasAsRoot(GrSlotStream * psstrm, GrSlotState * pslot)
- {
- GrSlotState * pslotRoot = AttachRoot(psstrm);
- if (pslotRoot == pslot)
- return true;
- else if (pslotRoot == NULL)
- return false;
- else
- return pslotRoot->HasAsRoot(psstrm, pslot);
- }
-
- bool HasAsPreviousState(GrSlotState * pslot)
- {
- if (this == pslot)
- return true;
- else
- return m_pslotPrevState->HasAsPreviousState(pslot);
- }
-
- void EnsureCacheForOutput(GrTableManager * ptman);
-
- bool IsLrm();
- bool IsRlm();
-
- // Cache of FSM column information for the most recent pass:
- int FsmColumn() { return m_colFsm; }
- int PassNumberForColumn() { return m_ipassFsmCol; }
- void CacheFsmColumn(int ipass, int col)
- {
- m_colFsm = col;
- m_ipassFsmCol = ipass;
- }
-
- // Variable-length buffer--includes four sub-buffers:
- // * user-defined variables
- // * component.???.ref assignments
- // * mapping from components used to global attribute IDs for components
- // * feature values
-
- // user-defined slot attributes
- int UserDefn(int slati)
- {
- Assert(slati < m_cnUserDefn);
- return m_prgnVarLenBuf[slati].nValue;
- }
- void SetUserDefn(int slati, int nVal)
- {
- Assert(slati < m_cnUserDefn);
- m_prgnVarLenBuf[slati].nValue = nVal;
- }
- u_intslot * PUserDefnBuf()
- {
- return m_prgnVarLenBuf;
- }
-
- // pointer to the associated slot which is the value of the comp.ref attribute
- GrSlotState * CompRef(int slati)
- {
- Assert(slati < m_cnCompPerLig);
- return m_prgnVarLenBuf[m_cnUserDefn + slati].pslot;
- }
- void SetCompRef(int slati, GrSlotState * pvSlot)
- {
- Assert(slati < m_cnCompPerLig);
- m_prgnVarLenBuf[m_cnUserDefn + slati].pslot = pvSlot;
- }
- u_intslot * PCompRefBuf()
- {
- return m_prgnVarLenBuf + m_cnUserDefn;
- }
-
- // global component identifier
- int Slati(int i)
- {
- Assert(i < m_cnCompPerLig);
- return m_prgnVarLenBuf[m_cnUserDefn + m_cnCompPerLig + i].nValue;
- }
- void SetSlati(int i, int n)
- {
- Assert(i < m_cnCompPerLig);
- m_prgnVarLenBuf[m_cnUserDefn + m_cnCompPerLig + i].nValue = n;
- }
- u_intslot * PSlatiBuf()
- {
- return m_prgnVarLenBuf + m_cnUserDefn + m_cnCompPerLig;
- }
-
- // feature settings
- int FeatureValue(int i)
- {
- Assert(i < m_cnFeat);
- return m_prgnVarLenBuf[m_cnUserDefn + (m_cnCompPerLig * 2) + i].nValue;
- }
-
- u_intslot * PFeatureBuf()
- {
- return m_prgnVarLenBuf + m_cnUserDefn + (m_cnCompPerLig * 2);
- }
-
- int CExtraSpace()
- {
- return m_cnUserDefn + (m_cnCompPerLig * 2) + m_cnFeat;
- }
-
- GrSlotState * CompRefSlot(int i);
-
- void GetFeatureValues(GrFeatureValues * pfval)
- {
- pfval->m_nStyleIndex = m_bStyleIndex;
- std::fill(pfval->m_rgnFValues, pfval->m_rgnFValues + kMaxFeatures, 0);
- for (size_t i = 0; i < m_cnFeat; i++)
- pfval->m_rgnFValues[i] = PFeatureBuf()[i].nValue;
- }
-
- // For transduction logging:
-#ifdef TRACING
- void SlotAttrsModified(bool * rgfMods, bool fPreJust, int * pccomp, int * pcassoc);
- void LogSlotAttributeValue(GrTableManager *, std::ostream &, int ipass, int slat, int icomp,
- bool fPreJust, bool fPostJust);
- void LogAssociation(GrTableManager * ptman,
- std::ostream & strmOut, int ipass, int iassoc, bool fBoth, bool fAfter);
- void LogXmlAttributes(std::ostream & strmOut, GrTableManager * ptman, GrSlotStream * psstrmOut,
- int ipass, int islot,
- bool fPreJust, bool fPostJust, bool fBidi, bool fBidiNext, int nIndent);
- int GetSlotAttrValue(std::ostream & strmOut, GrTableManager * ptman,
- int ipass, int slat, int iIndex, bool fPreJust, bool fPostJust);
- int m_islotTmpIn; // for use by transduction log; index of slot in input stream
- int m_islotTmpOut; // ditto; index of slot in output stream
-#endif // TRACING
-
-protected:
-
- // Instance variables:
- int m_ipassModified; // pass in which this slot was modified
-
- GrSlotState * m_pslotPrevState;
-
- int m_ichwSegOffset; // for original (pass 0) slot states: position in
- // underlying text relative to the official
- // beginning of the segment;
- // should == kInvalid for other slot states
- int m_islotPosPass; // index of slot in positioning streams, relative to first official
- // slot in the segment (possibly the LB slot)
-
- int m_colFsm; // which FSM column this glyph corresponds to...
- int m_ipassFsmCol; // ...for the most recent pass
-
- std::vector<GrSlotState*> m_vpslotAssoc; // association mappings
-
- bool m_fNeutralAssocs; // true if we've set the associations to some neutral
- // default, rather than them being set explicitly
- // within a rule
-
- int m_nUnicode; // for debugging
-
- DirCode m_dircProc; // directionality as processed in bidi algorithm
- bool m_fDirProcessed;
-
- // affects length of variable-length buffer
- byte m_cnUserDefn;
- byte m_cnFeat;
-
- byte m_bStyleIndex;
-
- // Slot attributes:
- short m_mAdvanceX;
- short m_mAdvanceY;
- short m_mShiftX;
- short m_mShiftY;
-
- short m_srAttachTo;
- short m_nAttachLevel;
-
- short m_mAttachAtX;
- short m_mAttachAtY;
- short m_mAttachAtXOffset;
- short m_mAttachAtYOffset;
- short m_mAttachWithX;
- short m_mAttachWithY;
- short m_mAttachWithXOffset;
- short m_mAttachWithYOffset;
-
- short m_nAttachAtGpoint;
- short m_nAttachWithGpoint;
-
- // Raw glyph metrics (directly from font)
- float m_xysFontAscent;
- float m_xysFontDescent;
- float m_xysGlyphWidth;
- float m_xysGlyphHeight;
- float m_xysGlyphX;
- float m_xysGlyphY;
- float m_xysAdvX;
- float m_xysAdvY;
-
- // Attachment and metrics
-
- // This is a flag that is set whenever we change the value of any of the attach
- // slot attributes. Then when we want to find out something about the attachments,
- // if it is set, we have some work to do in updating the pointers and metrics.
- bool m_fAttachMod;
-
- // This is a flag that is set whenever we change the value of any of the shift or
- // advance slot attributes. It forces us to zap the metrics.
- bool m_fShiftMod;
-
- // This glyph (and all its leaves, if any) have a zero advance width;
- // never allow it to affect the advance width of a cluster it is part of.
- bool m_fIgnoreAdvance;
-
- int m_dislotRootFixed; // the offset of the slot (relative to this one) that considers
- // this slot to be one of its leaves
- std::vector<int> m_vdislotAttLeaves;
-
- // The following are used by the CalcCompositeMetrics() method and depend on
- // the cluster level that was passed as an argument.
-
- int m_nCompositeLevel; // cluster level last used to calculate composite metrics;
- // kNegInfinity if uncalculated
-
- // offsets for this node only, relative to cluster base
- float m_xsOffsetX;
- float m_ysOffsetY; // relative to baseline (positive is up)
-
- // offsets for this node and its leaves, relative to cluster base (y-coords are
- // relative to baseline)
- float m_xsClusterXOffset;
- float m_xsClusterAdv;
- float m_xsClusterBbLeft;
- float m_xsClusterBbRight;
- float m_ysClusterBbTop;
- float m_ysClusterBbBottom;
-
- // cumulative total of shifts for this node and roots; advance needs to ignore these
- float m_xsRootShiftX;
- float m_ysRootShiftY;
-
- bool m_fHasComponents; // default = false
-
- // Private methods:
-
- void CopyAbstractFrom(GrSlotState * pslot);
-
- void AdjustRootMetrics(GrTableManager * ptman, GrSlotStream *);
- void InitMetrics(GrTableManager * ptman, GrSlotState * pslotRoot);
- void InitLeafMetrics(GrTableManager * ptman, GrSlotState * pslotRoot);
- void InitRootMetrics(GrTableManager * ptman);
- void CalcRootMetrics(GrTableManager * ptman, GrSlotStream *, int nLevel);
- void AttachToRoot(GrTableManager * ptman, GrSlotStream *, GrSlotState * pslotNewRoot);
- void AttachLogUnits(GrTableManager * ptman,
- GrSlotState * pslotRoot,
- float * pxsAttAtX, float * pysAttAtY,
- float * pxsAttWithX, float * pysAttWithY);
-
- GrSlotState * SlotAtOffset(GrSlotStream * psstrm, int dislot); // ENHANCE SharonC: inline?
-
- void EnsureLocalAttachmentTree(GrTableManager * ptman,
- GrSlotStream * psstrmIn, GrSlotStream * psstrmOut, int islotThis);
-
- void ZapCompositeMetrics()
- {
- m_nCompositeLevel = kNegInfinity;
- m_xsPositionX = kNegInfFloat;
- m_ysPositionY = kNegInfFloat;
- m_xsOffsetX = 0;
- m_ysOffsetY = 0;
- m_xsRootShiftX = 0;
- m_ysRootShiftY = 0;
- ZapRootMetrics();
- }
-
- void ZapRootMetrics()
- {
- m_xsClusterXOffset = 0;
- m_xsClusterAdv = 0;
- m_xsClusterBbLeft = 0;
- m_xsClusterBbRight = 0;
- m_ysClusterBbTop = 0;
- m_ysClusterBbBottom = 0;
- m_fIgnoreAdvance = false;
- }
-
- void ZapMetricsAndPositionDownToBase(GrSlotStream * psstrm)
- {
- ZapCompositeMetrics();
- if (m_dislotRootFixed)
- SlotAtOffset(psstrm, m_dislotRootFixed)->ZapMetricsAndPositionDownToBase(psstrm);
- }
-
- void ZapMetricsOfLeaves(GrSlotStream * psstrm, bool fThis = false)
- {
- if (fThis)
- ZapCompositeMetrics();
- for (size_t islot = 0; islot < m_vdislotAttLeaves.size(); islot++)
- {
- SlotAtOffset(psstrm, m_vdislotAttLeaves[islot])->ZapMetricsOfLeaves(psstrm, true);
- }
- }
-
-public: // for transduction logging
- bool m_fAdvXSet;
- bool m_fAdvYSet;
-
-}; // end of class GrSlotState
-
-
-/*----------------------------------------------------------------------------------------------
- A GrSlotOutput represents one slot as the final output of the final pass. These
- are recorded in the segment.
-
- Hungarian: slout
-----------------------------------------------------------------------------------------------*/
-class GrSlotOutput : public GrSlotAbstract
-{
- friend class GlyphInfo;
- friend class Segment;
- friend class SegmentMemoryUsage;
-
-public:
- GrSlotOutput()
- {
- m_cComponents = 0;
- m_isloutClusterBase = -1; // not part of any cluster
- m_disloutCluster = 0;
- m_igbb = -1;
- }
-
- void ExactCopyFrom(GrSlotOutput * pslout, u_intslot * pnVarLenBuf, int cnExtraPerSlot);
-
- void InitializeOutputFrom(GrSlotState * pslot);
-
- int BeforeAssoc()
- {
- return m_ichwBeforeAssoc; // relative to the official beginning of the segment
- }
- int AfterAssoc()
- {
- return m_ichwAfterAssoc; // relative to the official beginning of the segment
- }
-
- void SetBeforeAssoc(int ichw)
- {
- m_ichwBeforeAssoc = ichw;
- }
- void SetAfterAssoc(int ichw)
- {
- m_ichwAfterAssoc = ichw;
- }
- void AddComponentReference(int ichw, int slati)
- {
- if (m_cComponents >= m_cnCompPerLig)
- {
- Assert(false); // ignore the requested component ref
- }
- else
- {
- m_prgnVarLenBuf[m_cComponents].nValue
- = ichw;
-
- // OBSOLETE comment:
- // Maps the used components to the defined components. Normally this will be
- // one-to-one and the buffer will hold [0,1,2...]. But possibly we may
- // have defined components a, b, and c, but only mapped a and c to actual
- // characters. This buffer will then hold [0,2].
-
- m_prgnVarLenBuf[m_cnCompPerLig + m_cComponents].nValue
- = slati;
-
-// Assert(iComp >= m_cComponents); // because we process them in order they are defined
- // in, but we could have skipped some that are
- // defined
- m_cComponents++;
- }
- }
- int NumberOfComponents() // the number used by the rules
- {
- return m_cComponents;
- }
- // Index of ligature components, relative to the beginning of the segment.
- // iComp is index of components USED in this glyph.
- int UnderlyingComponent(int iComp)
- {
- Assert(iComp < m_cnCompPerLig);
- return m_prgnVarLenBuf[iComp].nValue;
- }
- int ComponentId(int iComp)
- {
- return m_prgnVarLenBuf[m_cnCompPerLig + iComp].nValue;
- }
-
- //u_intslot * PCompRefBufSlout()
- //{
- // return m_prgnVarLenBuf;
- //}
-
- int CExtraSpaceSlout()
- {
- return (m_cnCompPerLig * 2);
- }
-
- void SetClusterBase(int islout)
- {
- m_isloutClusterBase = islout;
- }
-
- int ClusterBase()
- {
- return m_isloutClusterBase;
- }
-
- bool IsPartOfCluster()
- {
- return (m_isloutClusterBase > -1);
- }
-
- //int NumClusterMembers()
- //{
- // return m_visloutClusterMembers.size();
- //}
- //int ClusterMember(int iislout)
- //{
- // return m_visloutClusterMembers[iislout];
- //}
-
- void AddClusterMember(int isloutThis, int isloutAttached)
- {
- m_disloutCluster = sdata8(max(int(m_disloutCluster), abs(isloutThis - isloutAttached)));
- }
-
- void ClusterMembers(Segment * pseg, int islout, std::vector<int> & visloutRet);
-
- int ClusterRange()
- {
- return m_disloutCluster;
- }
-
- float ClusterXOffset() { return m_xsClusterXOffset; }
- float ClusterAdvance() { return m_xsClusterAdvance; }
- void SetClusterXOffset(float xs) { m_xsClusterXOffset = xs; }
- void SetClusterAdvance(float xs) { m_xsClusterAdvance = xs; }
-
- float GlyphMetricLogUnits(Font * pfont, int nGlyphMetric);
- //float GlyphMetricLogUnits(int nMetricID);
-
- int GlyphBbIndex() { return m_igbb; }
- void SetGlyphBbIndex (int i) { m_igbb = i; }
-
- Rect BoundingBox(Font & font)
- {
- Rect rectBB;
- rectBB.left = m_xsPositionX + GlyphMetricLogUnits(&font, kgmetBbLeft);
- if (IsSpace())
- rectBB.right = m_xsPositionX + GlyphMetricLogUnits(&font, kgmetAdvWidth);
- else
- rectBB.right = m_xsPositionX + GlyphMetricLogUnits(&font, kgmetBbRight);
- rectBB.top = m_ysPositionY + GlyphMetricLogUnits(&font, kgmetBbTop);
- rectBB.bottom = m_ysPositionY + GlyphMetricLogUnits(&font, kgmetBbBottom);
- return rectBB;
- }
-
- bool IsLineBreak()
- {
- return (IsInitialLineBreak() || IsFinalLineBreak());
- }
- bool IsInitialLineBreak()
- {
- return (m_spsl == kspslLbInitial);
- }
- bool IsFinalLineBreak()
- {
- return (m_spsl == kspslLbFinal);
- }
-
- //float AdvanceXMetric()
- //{
- // return m_xysAdvX;
- //}
-
- bool IsSpace();
-
- void AdjustPosXBy(float dxs)
- {
- m_xsPositionX += dxs;
- //m_rectBB.left += dxs;
- //m_rectBB.right += dxs;
- }
-
- void ShiftForDirDepthChange(float dxsSegWidth);
-
- // Used by GlyphInfo
- int IndexAttachedTo();
- //inline float AdvanceX(Segment * pseg);
- //inline float AdvanceY(Segment * pseg);
- float MaxStretch(Segment * pseg, int level);
- float MaxShrink(Segment * pseg, int level);
- float StretchStep(Segment * pseg, int level);
- int JustWeight(int level);
- float JustWidth(Segment * pseg, int level);
- float MeasureSolLogUnits(Segment * pseg);
- float MeasureEolLogUnits(Segment * pseg);
- Rect ComponentRect(Segment * pseg, int icomp);
-
-protected:
- // Instance variables:
-
- sdata8 m_cComponents;
-
- data8 m_disloutCluster; // how far to search on either side of this glyph to find
- // other members of the cluster;
- // 0 means there are no cluster members or this glyph is
- // attached to some other base
-
- int m_isloutClusterBase; // the index of the slot that serves as the base for the
- // cluster this slot is a part of; -1 if not part of cluster
-
- int m_ichwBeforeAssoc; // index of associated character in the string
- int m_ichwAfterAssoc; // (relative to the official beginning of the segment)
- // char might possibly not be officially in this segment,
- // in which case value is infinity
-
- // Measurements for highlighting an entire cluster, relative to origin of this slot,
- // which is the cluster base.
- float m_xsClusterXOffset;
- float m_xsClusterAdvance; // for single non-cluster glyphs, advance width of positioned glyph
-
- // Index into m_prggbb in Segment; -1 indicates a line break slot that is not rendered:
- int m_igbb;
-
- float m_xsAdvanceX;
-// float m_ysAdvanceY; -- not used
-// Rect m_rectBB;
-
-}; // end of class GrSlotOutput
-
-} // namespace gr
-
-
-#endif // !SLOTSTATE_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrSlotStream.cpp b/Build/source/libs/graphite-engine/src/segment/GrSlotStream.cpp
deleted file mode 100644
index db6a5c8af7e..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrSlotStream.cpp
+++ /dev/null
@@ -1,2368 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrSlotStream.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- GrSlotStream class implementation.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#include "GrConstants.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Answer true if there is nothing valid available to read from the stream.
-----------------------------------------------------------------------------------------------*/
-bool GrSlotStream::AtEnd()
-{
- Assert(AssertValid());
-
- if (m_islotReprocPos > -1 && m_islotReprocPos < signed(m_vpslotReproc.size()))
- return false;
-
- if (m_islotSegLim > -1 && m_islotReadPos >= m_islotSegLim)
- // We've determined the segment limit, and we're at or past it.
- return true;
-
- return (m_islotReadPos == m_islotWritePos);
-}
-
-/*----------------------------------------------------------------------------------------------
- Answer true if there is nothing at all available to read from the stream.
- For substitution passes, we need to consider slots that may be beyond what we know
- will be the official end of the segment.
-----------------------------------------------------------------------------------------------*/
-bool GrSlotStream::AtEndOfContext()
-{
- if (m_fUsedByPosPass)
- return AtEnd();
-
- if (m_islotReprocPos > -1 && m_islotReprocPos < signed(m_vpslotReproc.size()))
- return false;
-
- return (m_islotReadPos == m_islotWritePos);
-}
-
-/*----------------------------------------------------------------------------------------------
- Append a slot to the end of the stream.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::NextPut(GrSlotState * pslot)
-{
- Assert(AssertValid());
-
- if (m_islotWritePos < signed(m_vpslot.size()))
- {
- m_vpslot[m_islotWritePos] = pslot;
- }
- else
- {
- m_vpslot.push_back(pslot);
- m_vislotPrevChunkMap.push_back(-1);
- m_vislotNextChunkMap.push_back(-1);
- }
-
- if (m_fUsedByPosPass && GotIndexOffset())
- pslot->SetPosPassIndex(m_islotWritePos - m_cslotPreSeg, m_fInputToPosPass1);
-
- m_islotWritePos++;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the next slot from the stream.
-----------------------------------------------------------------------------------------------*/
-GrSlotState * GrSlotStream::NextGet()
-{
- Assert(AssertValid());
- Assert(!AtEndOfContext());
-
- GrSlotState * pslotRet;
-
- if (m_islotReprocPos > -1)
- {
- if (m_islotReprocPos >= signed(m_vpslotReproc.size()))
- {
- // Finished reprocessing.
- Assert((unsigned)m_islotReprocPos == m_vpslotReproc.size());
- m_islotReprocPos = -1;
- // But leave the m_vpslotReproc array in place so that earlier slots can
- // be accessed by the rules.
- pslotRet = m_vpslot[m_islotReadPos];
- m_islotReadPos++;
- }
- else
- {
- // Read from the reprocess buffer.
- pslotRet = m_vpslotReproc[m_islotReprocPos];
- m_islotReprocPos++;
- }
- }
- else
- {
- // Read normally.
- pslotRet = m_vpslot[m_islotReadPos];
- m_islotReadPos++;
- }
-
- Assert(!m_fUsedByPosPass || pslotRet->PosPassIndex() != GrSlotAbstract::kNotYetSet);
-
- return pslotRet;
-}
-
-/*---------------------------------------------------------------------------------------------
- Peek at the next slot from the stream (dislot = 0 means the very next slot).
- Only used for peeking forward. RuleInputSlot is used for accessing any possible
- slot in the rule's context.
-----------------------------------------------------------------------------------------------*/
-GrSlotState * GrSlotStream::Peek(int dislot)
-{
- Assert(AssertValid());
- Assert(!AtEndOfContext());
- Assert(dislot >= 0);
-
- GrSlotState * pslotRet;
-
- if (m_islotReprocPos > -1)
- {
- int cslotReproc = m_vpslotReproc.size() - m_islotReprocPos; // num left in reproc buffer
- if (dislot >= cslotReproc)
- {
- // Not quite enough slots in the reprocess buffer.
- pslotRet = m_vpslot[m_islotReadPos + dislot - cslotReproc];
- }
- else if (m_islotReprocPos + dislot < 0)
- {
- // Reading prior to the reprocess buffer
- pslotRet = m_vpslot[m_islotReadPos + dislot - cslotReproc];
- }
- else
- {
- // Read from the reprocess buffer.
- pslotRet = m_vpslotReproc[m_islotReprocPos + dislot];
- }
- }
- else
- {
- // Read normally.
- Assert(m_islotWritePos - m_islotReadPos > dislot);
- pslotRet = m_vpslot[m_islotReadPos + dislot];
- }
-
- return pslotRet;
-}
-
-/*---------------------------------------------------------------------------------------------
- Treat the stream, which is really the output stream, as an input stream,
- retrieving a recently output slot. This happens when we are reading before the
- current stream position when the rule is being matched, or before the original
- stream position when the rule is being run.
-
- @param dislot - how far back to peek before the write position
- when the rule started; a negative number
- (NOTE: the current write position is irrelevant)
- @param fNullOkay - true if it's okay to return NULL in the situation where we're asking
- for something before the beginning of the stream
-----------------------------------------------------------------------------------------------*/
-GrSlotState * GrSlotStream::PeekBack(int dislot, bool fNullOkay)
-{
- Assert(dislot < 0);
- if (dislot < m_islotRuleStartWrite * -1)
- {
- Assert(fNullOkay);
- return NULL;
- }
- GrSlotState * pslotRet;
- if (m_islotReprocPos > -1)
- {
- if (dislot < m_islotReprocLim - m_islotRuleStartWrite &&
- dislot >= m_islotReprocLim - m_islotRuleStartWrite - signed(m_vpslotReproc.size()))
- {
- // Read from the reprocess buffer.
- // Review: this is weird; can it ever happen?
- pslotRet = m_vpslotReproc[m_vpslotReproc.size()
- - (m_islotReprocLim - m_islotRuleStartWrite) + dislot];
- }
- else
- pslotRet = m_vpslot[m_islotRuleStartWrite + dislot];
- }
- else
- pslotRet = m_vpslot[m_islotRuleStartWrite + dislot];
-
- return pslotRet;
-}
-
-/*---------------------------------------------------------------------------------------------
- Skip the given number of slots in the stream.
- ENHANCE: implement more efficiently
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::Skip(int dislot)
-{
- for (int islot = 0; islot < dislot; ++islot)
- NextGet();
-}
-
-/*----------------------------------------------------------------------------------------------
- Perform assertions to ensure that the stream is in a valid state.
-----------------------------------------------------------------------------------------------*/
-bool GrSlotStream::AssertValid()
-{
- Assert(m_islotWritePos <= signed(m_vpslot.size()));
- Assert(m_islotReadPos <= m_islotWritePos);
- // Streams used by the positioning passes (input or output) should not be working
- // with slots beyond the segment lim
- Assert(m_islotSegLim == -1 || !m_fUsedByPosPass || m_islotReadPos <= m_islotSegLim);
- Assert(m_vpslot.size() == m_vislotPrevChunkMap.size());
- Assert(m_vpslot.size() == m_vislotNextChunkMap.size());
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of slots that have been completely output by the previous pass but not
- yet processed by the following pass. ("Completely" output means that they do not need
- to be reprocessed by the same pass, only then are they available as valid input.)
- Include any slots that are present by virtue of needing to be reprocessed by the
- corresponding output stream.
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::SlotsPending()
-{
- Assert(AssertValid());
- if (m_islotSegLim > -1)
- return (m_islotSegLim - m_islotReadPos + SlotsToReprocess());
- else
- return (m_islotWritePos - m_islotReadPos + SlotsToReprocess());
-}
-
-int GrSlotStream::SlotsPendingInContext()
-{
- Assert(AssertValid());
- if (m_fUsedByPosPass)
- return SlotsPending();
- else
- return (m_islotWritePos - m_islotReadPos + SlotsToReprocess());
-}
-
-int GrSlotStream::TotalSlotsPending()
-{
- int cslot = SlotsPendingInContext();
- if (m_fUsedByPosPass && m_islotSegLim > -1)
- {
- int ctmp = m_islotWritePos - m_islotReadPos + SlotsToReprocess();
- if (ctmp > cslot)
- {
- int x; x = 3;
- }
- cslot = max(cslot, ctmp);
- }
- return cslot;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if this pass is input or output to a positioning pass and we're past the end
- of the segment. So this stream is virtually finished.
-----------------------------------------------------------------------------------------------*/
-bool GrSlotStream::PastEndOfPositioning(bool fOutput)
-{
- if (m_fUsedByPosPass && m_islotSegLim > -1)
- {
- if (fOutput) // this stream is functioning as an output stream
- return (m_islotWritePos >= m_islotSegLim);
- else // this stream is functioning as an input stream
- return (m_islotReadPos >= m_islotSegLim);
- }
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Mark the stream as fully written, so that the output pass doesn't keep trying to ask
- for more input.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::MarkFullyWritten()
-{
- m_fFullyWritten = true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the position of the first glyph at or following the given position
- that is in the top direction, or -1 if we do not have a complete range.
-
- @param ptman
- @param islotStart
- @nTopDirLevel - top direction: 0 = left-to-right, 1 = right-to-left
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::OldDirLevelRange(EngineState * pengst, int islotStart, int nTopDirLevel)
-{
- Assert(m_islotReadPos <= islotStart);
- Assert(islotStart < m_islotWritePos);
-
- int islot = islotStart;
- int nSlotDirLevel = GetSlotDirLevel(pengst, islot, nTopDirLevel, nTopDirLevel,
- kdircUnknown, kdircNeutral);
- if (nSlotDirLevel == -1)
- return -1;
- while (nSlotDirLevel > nTopDirLevel)
- {
- islot++;
- if (islot >= m_islotWritePos)
- {
- if (m_fFullyWritten)
- return islot;
- else
- return -1;
- }
- else if (m_islotSegLim > -1 && islot >= m_islotSegLim)
- {
- return islot;
- }
-
- nSlotDirLevel = GetSlotDirLevel(pengst, islot, nTopDirLevel, nTopDirLevel,
- kdircUnknown, kdircNeutral);
- if (nSlotDirLevel == -1)
- return -1;
- }
- return islot;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the position of the first glyph at or following the given position
- that is in the top direction, or -1 if we do not have a complete range.
-
- @param ptman
- @param islotStart
- @nTopDirLevel - top direction: 0 = left-to-right, 1 = right-to-left
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::DirLevelRange(EngineState * pengst, int islotStart, int nTopDirLevel,
- std::vector<int> & vislotStarts, std::vector<int> & vislotStops)
-{
- Assert(m_islotReadPos <= islotStart);
- Assert(islotStart < m_islotWritePos);
-
- std::vector<int> vislotStartStack; // indices of starts of ranges to reverse
-
- // Stack corresponding to embedding and override markers:
- std::vector<DirCode> vdircMarkerStack;
- std::vector<DirCode> vdircOverrideStack;
- std::vector<int> vnLevelStack;
-
- vislotStarts.clear();
- vislotStops.clear();
-
- //vislotStartStack.Push(islot);
-
- int islotSegLim = (FullyWritten() || m_islotSegLim > -1) ?
- FinalSegLim() :
- WritePos() + 100; // arbitrarily large number
-
- if (islotStart > islotSegLim)
- {
- // Don't do anything fancy with stuff beyond the end of the segment.
- return 0;
- }
-
- DirCode dircMarker = kdircNeutral; // none so far
- int nCurrLevel = nTopDirLevel;
- int nMarkerLevel = nTopDirLevel;
- //bool fHitMark = false;
- DirCode dircOverride = kdircNeutral;
- int islot = islotStart;
- Assert(islot <= m_islotWritePos);
-
- while (true)
- {
- GrSlotState * pslot = m_vpslot[islot];
- DirCode dirc = pslot->DirProcessed();
- bool fIncludeLast = false;
- int nSlotDirLevel;
- if (dirc == kdircLRO || dirc == kdircLRE) // steps X1, X3 in the Unicode bidi algorithm
- {
- vdircMarkerStack.push_back(dircMarker);
- vdircOverrideStack.push_back(dircOverride);
- vnLevelStack.push_back(nCurrLevel);
- dircMarker = dirc;
- dircOverride = (dirc == kdircLRO) ? kdircL : kdircNeutral;
- nSlotDirLevel = (nCurrLevel % 2) ?
- nCurrLevel + 1 : nCurrLevel + 2; // next highest LTR level
- nMarkerLevel = nSlotDirLevel;
-
- pslot->SetDirProcessed(dircMarker);
- pslot->SetDirLevel(nMarkerLevel);
- pslot->MarkDirProcessed();
- }
- else if (dirc == kdircRLO || dirc == kdircRLE) // steps X2, X4
- {
- vdircMarkerStack.push_back(dircMarker);
- vdircOverrideStack.push_back(dircOverride);
- vnLevelStack.push_back(nCurrLevel);
- dircMarker = dirc;
- dircOverride = (dirc == kdircRLO) ? kdircR : kdircNeutral;
- nSlotDirLevel = (nCurrLevel % 2) ?
- nCurrLevel + 2 : nCurrLevel + 1; // next highest RTL level
- nMarkerLevel = nSlotDirLevel;
-
- pslot->SetDirProcessed(dircMarker);
- pslot->SetDirLevel(nMarkerLevel);
- pslot->MarkDirProcessed();
- }
- else if (dirc == kdircPDF)
- {
- if (dircMarker == kdircNeutral)
- pslot->SetDirProcessed((nCurrLevel % 2) ? kdircR : kdircL);
- else
- pslot->SetDirProcessed(RightToLeftDir(dircMarker) ? kdircPdfR : kdircPdfL);
- pslot->SetDirLevel(nMarkerLevel);
- pslot->MarkDirProcessed();
-
- if (vnLevelStack.size())
- {
- dircMarker = vdircMarkerStack.back();
- vdircMarkerStack.pop_back();
- dircOverride = vdircOverrideStack.back();
- vdircOverrideStack.pop_back();
- nMarkerLevel = vnLevelStack.back();
- vnLevelStack.pop_back();
- nSlotDirLevel = nMarkerLevel;
- fIncludeLast = true;
- }
- else // ignore
- nSlotDirLevel = nCurrLevel;
- }
- else
- {
- nSlotDirLevel = GetSlotDirLevel(pengst, islot, nTopDirLevel, nMarkerLevel,
- dircMarker, dircOverride);
- if (nSlotDirLevel == -1)
- return -1; // not enough slots
- }
-
- Assert(pengst->WhiteSpaceOnly() || nCurrLevel >= nTopDirLevel);
- while (nSlotDirLevel > nCurrLevel)
- {
- vislotStartStack.push_back(islot);
- nCurrLevel++;
- }
- // otherwise...
- while (nTopDirLevel <= nCurrLevel && nSlotDirLevel < nCurrLevel)
- {
- if (vislotStartStack.size())
- {
- int islotStartTmp = vislotStartStack.back();
- vislotStartStack.pop_back();
- vislotStarts.push_back(islotStartTmp);
- vislotStops.push_back(islot - 1); // previous character was the end of the range
- }
- else
- Assert(pengst->WhiteSpaceOnly()); // the space is higher than the segment itself
- nCurrLevel--;
- }
- // In the case of white-space-only segments, the space may be bumped up to a level
- // higher than the segment itself.
- Assert(pengst->WhiteSpaceOnly() || vislotStartStack.size() + nTopDirLevel == (unsigned)nCurrLevel);
- Assert(pengst->WhiteSpaceOnly() || vnLevelStack.size() == vdircMarkerStack.size());
- Assert(pengst->WhiteSpaceOnly() || vdircOverrideStack.size() == vdircMarkerStack.size());
-
- if (nCurrLevel <= nTopDirLevel)
- {
- if (fIncludeLast)
- {
- // Include in the range to reverse the PDF or the char after the LRM/RLM.
- // (Note: don't use a size_t below: we are decrementing below zero.)
- for (int i = signed(vislotStops.size()) - 1; i >= 0 && vislotStops[i] == islot-1; i--)
- {
- vislotStops[i] = islot;
- }
- islot++;
- }
- break; // reached end of reversible range
- }
-
- islot++;
- if (islot >= m_islotWritePos)
- {
- if (m_fFullyWritten)
- break; // end of input
- else
- return -1; // not enough slots
- }
- else if (islot >= islotSegLim)
- {
- break; // end of input
- }
- }
-
- // Reached the end of a reversable range.
- while (vislotStartStack.size() > 0)
- {
- int islotStartTmp = vislotStartStack.back();
- vislotStartStack.pop_back();
- vislotStarts.push_back(islotStartTmp);
- //vislotStops.push_back(min(islot, ReadPos() - 1));
- //vislotStops.push_back(min(islot, max(ReadPos() - 1, islotStartTmp)));
- vislotStops.push_back(min(islot - 1, islotSegLim - 1));
- nCurrLevel--;
- }
- Assert(pengst->WhiteSpaceOnly() || nCurrLevel == nTopDirLevel);
- Assert(vislotStarts.size() == vislotStops.size());
-
- // The start- and stop-lists were generated in the order that we hit the stops, in other
- // words, from inner to outer. Which is the order in which we need to do the reversals, too.
-
- return islot;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Return the direction level of the glyph at the given position, according to the
- Unicode bidi algorithm. Return -1 if there aren't enough slots in the stream to
- figure it out.
-
- ???? How should this handle the reprocessing sub-stream????
-
- @param ptman
- @param islot - slot for which information is requested
- @param nOuterLevel - 0 = left-to-right, 1 = right-to-left
- @param nCurrLevel
- @param dircMarker - most recent override or embedding marker, if any
- (for interpreting PDF codes)
- @param dircOverride - override imposed by LRO or RLO
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::GetSlotDirLevel(EngineState * pengst, int islot,
- int nOuterLevel, int nCurrLevel, DirCode dircMarker, DirCode dircOverride)
-{
-// Assert(m_psstrmReprocess == NULL);
-
- GrSlotState * pslot = m_vpslot[islot];
-
- int nDirLevel = pslot->DirLevel();
- if (nDirLevel > -1)
- // already figured out
- return nDirLevel;
-
- if (pengst->WhiteSpaceOnly())
- {
- // White-space-only segments should not have any reordering.
- nDirLevel = pengst->ParaRightToLeft();
- pslot->SetDirLevel(nDirLevel);
- pslot->MarkDirProcessed();
- return nDirLevel;
- }
-
- DirCode dirc = pslot->DirProcessed();
-
- if (!pslot->DirHasBeenProcessed() && (WeakDir(dirc) || NeutralDir(dirc)) )
- {
- // Resolve weak and neutral types; process an entire run of weak types at once,
- // in several passes.
-
- int islotWeakRunLim = islot + 1;
- while (true)
- {
- if (islotWeakRunLim >= m_islotWritePos)
- {
- if (!m_fFullyWritten)
- return -1; // get more slots
- else
- break;
- }
- else if (m_islotSegLim > -1 && islotWeakRunLim >= SegLimIfKnown())
- {
- break;
- }
- if (StrongDir(m_vpslot[islotWeakRunLim]->DirProcessed()))
- // ignore the line-break; we need the next strong dir after that
- //// && !m_vpslot[islotWeakRunLim]->IsFinalLineBreak(ptman->LBGlyphID()))
- {
- break;
- }
- if (m_vpslot[islotWeakRunLim]->DirProcessed() == kdircPDF &&
- dircMarker != kdircUnknown)
- {
- // A valid PDF is a strong code. TODO: replace kdircPDF with kdircPdfL/R
- break;
- }
-
- islotWeakRunLim++;
- }
-
- int islotLp;
-
- // X6. Handle directional overrides: LRO, RLO.
- if (dircOverride != kdircNeutral)
- {
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- {
- m_vpslot[islotLp]->SetDirProcessed(dircOverride);
- m_vpslot[islotLp]->MarkDirProcessed();
- }
- goto LSetDir;
- }
-
- DirCode dircLp;
- //DirCode dircTmp;
-
- // W1. Non-spacing marks get the type of the previous slot.
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- {
- Assert(!m_vpslot[islotLp]->DirHasBeenProcessed());
-
- if (m_vpslot[islotLp]->DirProcessed() == kdircNSM)
- {
-#ifdef _DEBUG
- if (islotLp <= 0)
- {
- Warn("Pathological case in bidi algorithm");
- }
-#endif // _DEBUG
- dircLp = AdjacentNonBndNeutralCode(pengst, islotLp - 1, -1, dircMarker);
-
- m_vpslot[islotLp]->SetDirProcessed(dircLp);
- }
- }
-
- // W2. European numbers are changed to Arabic numbers if the previous strong type
- // was an Arabic letter.
- DirCode dircPrevStrong = AdjacentStrongCode(pengst, islot - 1, -1, dircMarker);
- if (dircPrevStrong == kdircRArab)
- {
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- {
- dircLp = m_vpslot[islotLp]->DirProcessed();
- if (dircLp == kdircEuroNum)
- m_vpslot[islotLp]->SetDirProcessed(kdircArabNum);
- }
- }
-
- // W4. A single European separator between two Latin numbers changes to a Latin number.
- // A single common separator between two numbers of the same type changes to that
- // type.
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- {
- dircLp = m_vpslot[islotLp]->DirProcessed();
- if ((dircLp == kdircEuroSep || dircLp == kdircComSep) &&
- islotLp + 1 < m_islotWritePos) // don't test last slot in stream
- {
- DirCode dircPrev = AdjacentNonBndNeutralCode(pengst, islotLp - 1, -1, dircMarker);
- DirCode dircNext = AdjacentNonBndNeutralCode(pengst, islotLp + 1, 1, dircMarker);
- if (dircPrev == dircNext)
- {
- if (dircLp == kdircEuroSep && dircPrev == kdircEuroNum)
- {
- m_vpslot[islotLp]->SetDirProcessed(kdircEuroNum);
- }
- else if (dircLp == kdircComSep &&
- (dircPrev == kdircEuroNum || dircPrev == kdircArabNum))
- {
- m_vpslot[islotLp]->SetDirProcessed(dircPrev);
- }
- }
- }
- }
-
- // W5, W6. A sequence of European number terminators adjacent to Latin numbers changes
- // to Latin numbers.
- // This appears to be an ambiguity in the official algorithm: do we search backward
- // first, or forward? For our purposes, it is easier to search backward first.
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- {
- dircLp = m_vpslot[islotLp]->DirProcessed();
- if (dircLp == kdircEuroTerm || dircLp == kdircBndNeutral)
- {
- if (TerminatorSequence(pengst, islotLp - 1, -1, dircMarker) == kdircEuroNum)
- dircLp = kdircEuroNum;
- else
- {
- if (TerminatorSequence(pengst, islotLp + 1, 1, dircMarker) == kdircEuroNum)
- dircLp = kdircEuroNum;
- // else could possibly be unknown if we are at the end of the stream
- }
- }
-
- // W6. Separators and terminators change to neutral. (Don't change
- // boundary neutrals at this point, because that would confuse step Pre-L1.)
- if (dircLp == kdircEuroSep || dircLp == kdircEuroTerm || dircLp == kdircComSep)
- {
- dircLp = kdircNeutral;
- }
- m_vpslot[islotLp]->SetDirProcessed(dircLp);
- }
-
- // W7. European numbers are changed to plain left-to-right if the previous strong type
- // was left-to-right.
- dircPrevStrong = AdjacentStrongCode(pengst, islot - 1, -1, dircMarker);
- if (dircPrevStrong == kdircL)
- {
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- {
- dircLp = (m_vpslot[islotLp]->DirProcessed());
- if (dircLp == kdircEuroNum)
- m_vpslot[islotLp]->SetDirProcessed(kdircL);
- }
- }
-
- // Pre-L1. Make a list of all the trailing whitespace characters that need to take
- // on the direction of the final line break (ie, the top direction). We can't actually
- // change them yet, because that would confuse the loop below. But we have to
- // record them now because they might get changed in the loop below.
- std::vector<int> vislotTrailingWS;
- int islotFinalLB = -1;
- for (islotLp = islotWeakRunLim; islotLp-- > islot; )
- {
- if (m_vpslot[islotLp]->IsFinalLineBreak(pengst->TableManager()->LBGlyphID()))
- {
- islotFinalLB = islotLp;
- for (int islotLp2 = islotLp; islotLp2-- > islot; )
- {
- dircLp = m_vpslot[islotLp2]->DirProcessed();
- if (dircLp == kdircWhiteSpace || dircLp == kdircBndNeutral)
- vislotTrailingWS.push_back(islotLp2);
- else
- break; // hit something other than whitespace or neutral
- }
- break;
- }
- }
-
- // N1. A sequence of neutrals takes the direction of the strong surrounding text if
- // the text on both sides has the same direction. Latin and Arabic numbers are treated
- // as if they are right-to-left.
- // (If they are not the same, leave the type as neutral.)
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- {
- dircLp = m_vpslot[islotLp]->DirProcessed();
-
- // Change Boundary Neutrals to plain neutrals (must happen after Pre-L1).
- if (dircLp == kdircBndNeutral)
- {
- m_vpslot[islotLp]->SetDirProcessed(kdircNeutral);
- dircLp = kdircNeutral;
- }
-
- if (NeutralDir(dircLp))
- {
- // First, look for either a strong code or a number. If we get at least
- // one strong code and a number with the same direction, use that strong
- // code.
- DirCode dircPrev = AdjacentStrongCode(pengst, islotLp - 1, -1, dircMarker, true);
- DirCode dircNext = AdjacentStrongCode(pengst, islotLp + 1, 1, dircMarker, true);
-
- if (dircNext == kdircUnknown)
- return -1;
-
- if (dircPrev == kdircUnknown)
- dircPrev = dircNext;
-
- DirCode dircResult = kdircUnknown;
- if (dircNext == kdircNeutral)
- {}
- else if (RightToLeftDir(dircPrev) == RightToLeftDir(dircNext) &&
- (StrongDir(dircNext) || StrongDir(dircPrev)))
- {
- // Got a strong matching direction.
- dircResult = (StrongDir(dircPrev)) ? dircPrev : dircNext;
- }
- else if (dircNext == kdircPdfL || dircNext == kdircPdfR)
- {
- // A following PDF flag wins, because it represents the edge of a run.
- dircResult = dircNext;
- }
- else if (StrongDir(dircNext) && StrongDir(dircPrev))
- { // We must have text in different directions.
- }
- else
- {
- // Try again, insisting on strong codes, no numbers.
- if (!StrongDir(dircPrev))
- dircPrev = AdjacentStrongCode(pengst, islotLp - 1, -1, dircMarker, false);
- if (!StrongDir(dircNext))
- dircNext = AdjacentStrongCode(pengst, islotLp + 1, 1, dircMarker, false);
- if (dircPrev == kdircUnknown)
- dircPrev = dircNext;
-
- if (RightToLeftDir(dircPrev) == RightToLeftDir(dircNext) &&
- (StrongDir(dircNext) || StrongDir(dircPrev)))
- {
- // Got a strong matching direction.
- dircResult = (StrongDir(dircPrev)) ? dircPrev : dircNext;
- }
- }
-
- if (dircResult != kdircUnknown)
- {
- dircResult = (RightToLeftDir(dircResult)) ? kdircR : kdircL;
- m_vpslot[islotLp]->SetDirProcessed(dircResult);
- }
- // else leave as neutral
- }
- }
-
- // L1. Now change trailing neutrals recorded above to the directionality of
- // the immediately following line-break, if any.
- if (islotFinalLB != -1)
- {
- DirCode dircLB = m_vpslot[islotFinalLB]->DirProcessed();
- dircLB = (dircLB == kdircLlb) ? kdircL : kdircR;
- for (int iislot = 0; iislot < signed(vislotTrailingWS.size()); iislot++)
- {
- int islotTmp = vislotTrailingWS[iislot];
- m_vpslot[islotTmp]->SetDirProcessed(dircLB);
- }
- }
-
- // Mark all the slots processed.
- for (islotLp = islot; islotLp < islotWeakRunLim; islotLp++)
- m_vpslot[islotLp]->MarkDirProcessed();
- }
- else
- m_vpslot[islot]->MarkDirProcessed();
-
-LSetDir:
-
- // Final resolution.
-
- dirc = pslot->DirProcessed();
-
- if (dirc != kdircLlb && dirc != kdircRlb && dircOverride != kdircNeutral)
- {
- // Enforce whatever is imposed by the override.
- m_vpslot[islot]->SetDirProcessed(dircOverride);
- nDirLevel = nCurrLevel;
- }
- else if ((nCurrLevel % 2) == 0) // current level is even (left-to-right)
- {
- switch (dirc)
- {
- case kdircNeutral:
- case kdircWhiteSpace:
- nDirLevel = nCurrLevel;
- break;
-
- case kdircL:
- nDirLevel = nCurrLevel;
- break;
-
- case kdircLlb:
- case kdircRlb: // all line-breaks have the direction of the paragraph
- nDirLevel = nOuterLevel;
- break;
-
- case kdircR:
- case kdircRArab:
- nDirLevel = nCurrLevel + 1;
- break;
-
- case kdircEuroNum:
- case kdircArabNum:
- nDirLevel = nCurrLevel + 2;
- break;
-
- default:
- Assert(false);
- nDirLevel = nCurrLevel;
- }
- }
- else // current level is odd (right-to-left)
- {
- switch (dirc)
- {
- case kdircNeutral:
- case kdircWhiteSpace:
- nDirLevel = nCurrLevel;
- break;
-
- case kdircR:
- //case kdircRlb:
- case kdircRArab:
- nDirLevel = nCurrLevel;
- break;
-
- case kdircL:
- //case kdircLlb:
- case kdircEuroNum:
- case kdircArabNum:
- nDirLevel = nCurrLevel + 1;
- break;
-
- case kdircLlb:
- case kdircRlb: // all line-breaks have the direction of the paragraph
- nDirLevel = nOuterLevel;
- break;
-
- default:
- Assert(false);
- nDirLevel = nCurrLevel;
- }
- }
- pslot->SetDirLevel(nDirLevel);
-
- return nDirLevel;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the next or previous strong code, kdircNeutral if we don't find one,
- or kdircUnknown if we need more slots to process.
-
- @param islot - index of slot of interest
- @param nInc - +1 to search forward, -1 to search backward
- @param fNumbersAreStrong - true if we want to treat numbers as having strong
- directionality
- @param dircPDF - how to interpret PDF codes (from corresponding RLO, etc)
-----------------------------------------------------------------------------------------------*/
-DirCode GrSlotStream::AdjacentStrongCode(EngineState * pengst, int islot, int nInc,
- DirCode dircPDF, bool fNumbersAreStrong)
-{
- if (islot < 0)
- return pengst->InitialStrongDir();
-
- else if (islot >= m_islotWritePos)
- {
- if (m_fFullyWritten || (m_islotSegLim > -1 && islot >= SegLimIfKnown()))
- return kdircNeutral;
- else
- return kdircUnknown;
- }
-
- DirCode dirc = m_vpslot[islot]->DirProcessed();
-
- if (dirc == kdircPDF && StrongDir(dircPDF))
- return (RightToLeftDir(dircPDF)) ? kdircPdfR : kdircPdfL;
- if (StrongDir(dirc))
- return dirc;
- if (fNumbersAreStrong && (dirc == kdircEuroNum || dirc == kdircArabNum))
- return dirc;
-
- return AdjacentStrongCode(pengst, islot + nInc, nInc, dircPDF, fNumbersAreStrong);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return kdircEuroNum if there is a terminator sequence starting or ending with a
- European number. Return kdircUnknown if we need more slots to process.
- Return kdircNeutral otherwise.
-
- @param islot - index of slot of interest
- @param nInc - +1 to search forward, -1 to search backward
- @param dircPDF - how to interpret PDF codes (from corresponding RLO, etc)
-----------------------------------------------------------------------------------------------*/
-DirCode GrSlotStream::TerminatorSequence(EngineState * pengst, int islot, int nInc,
- DirCode dircPDF)
-{
- if (islot < 0)
- return pengst->InitialTermDir();
-
- else if (islot >= m_islotWritePos)
- {
- if (m_fFullyWritten)
- return kdircNeutral;
- else
- return kdircUnknown;
- }
-
- DirCode dirc = m_vpslot[islot]->DirProcessed();
-
- if (dirc == kdircPDF)
- return (RightToLeftDir(dircPDF)) ? kdircPdfR : kdircPdfL;
- else if (dirc == kdircEuroNum)
- // number found at end of terminator sequence
- return kdircEuroNum;
- else if (dirc == kdircEuroTerm)
- // yes, this slot is a terminator; are there more?
- return TerminatorSequence(pengst, islot + nInc, nInc, dircPDF);
- else if (dirc == kdircLlb || dirc == kdircRlb)
- // line-break slot--ignore and keep going
- return TerminatorSequence(pengst, islot + nInc, nInc, dircPDF);
- else if (dirc == kdircBndNeutral)
- // boundary neutral--ignore and keep going
- return TerminatorSequence(pengst, islot + nInc, nInc, dircPDF);
- else
- // no number found
- return kdircNeutral;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the previous code that is not a Boundary Neutral. Return Other Neutral if there
- is no such.
-
- @param islot - index of slot of interest
- @param nInc - +1 to search forward, -1 to search backward
- @param dircPDF - how to interpret PDF codes (from corresponding RLO, etc)
-----------------------------------------------------------------------------------------------*/
-DirCode GrSlotStream::AdjacentNonBndNeutralCode(EngineState * pengst, int islot, int nInc,
- DirCode dircPDF)
-{
- Assert(islot < m_islotWritePos);
- if (islot < 0)
- return kdircNeutral; // or should we use: ptman->InitialStrongDir() ??
-
- else if (islot >= m_islotWritePos)
- {
- if (m_fFullyWritten)
- return kdircNeutral;
- else
- return kdircUnknown;
- }
-
- DirCode dirc = m_vpslot[islot]->DirProcessed();
-
- if (dirc == kdircBndNeutral)
- return AdjacentNonBndNeutralCode(pengst, islot + nInc, nInc, dircPDF);
- else if (dirc == kdircPDF)
- return (RightToLeftDir(dircPDF)) ? kdircPdfR : kdircPdfL;
- else
- return dirc;
-}
-
-/*----------------------------------------------------------------------------------------------
- Directionality type functions.
-----------------------------------------------------------------------------------------------*/
-bool StrongDir(DirCode dirc)
-{
- return (dirc == kdircL || dirc == kdircR || dirc == kdircRArab ||
- dirc == kdircLRO || dirc == kdircRLO || dirc == kdircLRE || dirc == kdircRLE ||
- dirc == kdircPdfL || dirc == kdircPdfR);
-}
-
-bool WeakDir(DirCode dirc)
-{
- return (dirc == kdircEuroNum || dirc == kdircEuroSep ||
- dirc == kdircEuroTerm || dirc == kdircArabNum ||
- dirc == kdircComSep || dirc == kdircBndNeutral || dirc == kdircNSM);
-}
-
-bool NeutralDir(DirCode dirc)
-{
- return (dirc == kdircWhiteSpace || dirc == kdircNeutral);
-}
-
-/*----------------------------------------------------------------------------------------------
- Special values used by the bidi algorithm.
-----------------------------------------------------------------------------------------------*/
-bool BidiCode(int nUnicode)
-{
- switch (nUnicode)
- {
- case knLRM:
- case knRLM:
- case knLRO:
- case knRLO:
- case knLRE:
- case knRLE:
- case knPDF:
- return true;
- default:
- break;
- }
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the directionality should be treated as right-to-left.
- Used for the step of resolving neutrals (N1).
-----------------------------------------------------------------------------------------------*/
-bool RightToLeftDir(DirCode dirc)
-{
- switch (dirc)
- {
- case kdircL:
- case kdircLRO:
- case kdircLRE:
- case kdircPdfL:
- return false;
-
- case kdircR:
- case kdircRArab:
- case kdircArabNum:
- case kdircEuroNum:
- case kdircRLO:
- case kdircRLE:
- case kdircPdfR:
- return true;
-
- case kdircNeutral:
- return false;
-
- default:
- Assert(false);
- return false;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy a slot from prevStream, incrementing the positions.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::CopyOneSlotFrom(GrSlotStream * psstrmPrev)
-{
-#ifdef _DEBUG
- gid16 chw; chw = psstrmPrev->Peek()->GlyphID();
-#endif
-
- // If we are exactly at the segment boundary, pass the information on to this stream.
- if (psstrmPrev->AtSegMin())
- SetSegMinToWritePos();
- if (psstrmPrev->AtSegLim())
- SetSegLimToWritePos();
-
- NextPut(psstrmPrev->NextGet());
-
- AssertValid();
- psstrmPrev->AssertValid();
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy one slot from the input stream to the recipient, which is the output stream.
- Used when reversing ranges of glyphs; caller is responsible for adjusting the read-
- and write-positions of the streams.
-
- REVIEW: How should this handle the reprocessing sub-stream? Currently this is not a problem
- because this function is only used by the bidi pass, which never has intra-pass
- reprocessing.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::SimpleCopyFrom(GrSlotStream * psstrmI, int islotInput, int islotOutput)
-{
- if (signed(m_vpslot.size()) < islotOutput + 1)
- {
- m_vpslot.resize(islotOutput + 1);
- m_vislotPrevChunkMap.resize(islotOutput + 1);
- m_vislotNextChunkMap.resize(islotOutput + 1);
- }
-
- m_vpslot[islotOutput] = psstrmI->m_vpslot[islotInput];
- m_vislotPrevChunkMap[islotOutput] = -1;
- m_vislotNextChunkMap[islotOutput] = -1;
-
- Assert(m_fUsedByPosPass);
- if (m_fUsedByPosPass && GotIndexOffset())
- m_vpslot[islotOutput]->SetPosPassIndex(islotOutput - m_cslotPreSeg, m_fInputToPosPass1);
-
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if there is physical space to add more glyphs, false if the positioning
- has caused them to use all the alotted space. Recipient is assumed to be output
- stream from the final pass.
-
- @param ptman - table manager, for handling the positioning
- @param pgg - graphics device
- @param xsSpaceAllotted - how much space is available
- @param fWidthIsCharCount - kludge for test procedures
- @param fIgnoreTrailingWS - true if we are ignoring trailing white-space (currently
- always true)
- @param twsh - how the segment is handling trailing white-space
- @param pxsWidth - return width of stuff so far
-----------------------------------------------------------------------------------------------*/
-bool GrSlotStream::MoreSpace(GrTableManager * ptman,
- float xsSpaceAllotted, bool fWidthIsCharCount,
- bool fIgnoreTrailingWS, TrWsHandling twsh,
- float * pxsWidth)
-{
- Assert(ptman->NumberOfPasses() - 1 == m_ipass);
-
- if (fWidthIsCharCount)
- {
- // Used in test procedures
- *pxsWidth = (float)m_islotWritePos;
- return (m_islotWritePos < xsSpaceAllotted);
- }
- else
- {
- *pxsWidth = -1;
- if (!GotIndexOffset())
- return true;
- if (WritePos() <= IndexOffset())
- return true;
- int dislot = MaxClusterSlot(WritePos());
- if (dislot == kNegInfinity || dislot > 0)
- // We're in the middle of processing a cluster--we have to keep processing,
- // so for now assume there is more space.
- return true;
-
- float xsWidth, xsVisWidth;
- ptman->CalcPositionsUpTo(m_ipass, NULL, &xsWidth, &xsVisWidth);
-
- *pxsWidth = (fIgnoreTrailingWS || twsh == ktwshOnlyWs) ? xsVisWidth : xsWidth;
- return (*pxsWidth < xsSpaceAllotted);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Work backwards from the prevLineBreak position (or if none, the readPos) to find the
- previous line-break of the given weight or less. Return the position of the inserted
- line-break slot, or -1 if no appropriate break point was found. Recipient should be
- the output of the final line break pass, or if none, the output of the
- glyph-generation pass.
-
- @param ptman - table manager, for supplying new slots
- @param islotPrevBreak - position of previous inserted line break
- @param fInsertedLB - did we actually insert a line-break glyph before?
- @param islotStartTry - where to start looking, or -1 for the end of the stream
- @param lb - (max) break weight to allow
- @param twsh - how we are handling trailing white-space
- @param islotMin - first slot that is officially part of the segment (after initial LB)
- @param plbNextToTry - the best we found
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::InsertLineBreak(GrTableManager * ptman,
- int islotPrevBreak, bool fInsertedLB, int islotStartTry,
- LineBrk lb, TrWsHandling twsh, int islotMin,
- LineBrk * plbNextToTry)
-{
- EngineState * pengst = ptman->State();
-
- Assert(!fInsertedLB || islotPrevBreak > -1);
-
- int ichwSegOffset;
- int islot;
- LineBrk lbFound;
- if (!FindSegmentEnd(ptman, islotStartTry, lb, twsh, islotMin,
- &islot, &ichwSegOffset, &lbFound, plbNextToTry))
- {
- return -1; // didn't find a legal break
- }
-
- GrSlotState * pslotCopyFeat = pengst->AnAdjacentSlot(m_ipass, islot + 1);
- Assert(pslotCopyFeat);
-
- if (islotPrevBreak > -1 && fInsertedLB)
- {
- //GrSlotState * pslotOld = m_vpslot[islotPrevBreak];
-
- m_vpslot.erase(m_vpslot.begin() + islotPrevBreak);
- m_vislotPrevChunkMap.erase(m_vislotPrevChunkMap.begin() + islotPrevBreak);
- m_vislotNextChunkMap.erase(m_vislotNextChunkMap.begin() + islotPrevBreak);
- AdjustPrevStreamNextChunkMap(ptman, islotPrevBreak + 1, -1);
- }
- else
- {
- m_islotReadPos++;
- m_islotWritePos++;
- }
-
- GrSlotState * pslotNew;
- pengst->NewSlot(ptman->LBGlyphID(), pslotCopyFeat, 0, ichwSegOffset, &pslotNew);
-
- pslotNew->SetSpecialSlotFlag(kspslLbFinal);
- pslotNew->SetBreakWeight(lbFound);
- pslotNew->SetDirectionality(ptman->RightToLeft() ? kdircRlb : kdircLlb);
-
- int islotLB = islot + 1;
- m_vpslot.insert(m_vpslot.begin() + islotLB, pslotNew);
- // Inserting -1 makes it part of a chunk with the previous char/glyph
- m_vislotPrevChunkMap.insert(m_vislotPrevChunkMap.begin() + islotLB, -1);
- m_vislotNextChunkMap.insert(m_vislotNextChunkMap.begin() + islotLB, -1);
- AdjustPrevStreamNextChunkMap(ptman, islotLB, 1);
- // We don't need to adjust the following stream because we are going to unwind it anyway.
-
- if (m_fUsedByPosPass && GotIndexOffset())
- {
- pslotNew->SetPosPassIndex(islot - m_cslotPreSeg, m_fInputToPosPass1);
- // Increment the stream index for the following slots.
- for (int islotTmp = islotLB;
- islotTmp < ((islotPrevBreak == -1) ? m_islotWritePos : islotPrevBreak + 1);
- islotTmp++)
- {
- SlotAt(islotTmp)->IncPosPassIndex();
- }
- }
-
- m_islotSegLim = islotLB + 1; // after the line-break glyph
-
- return islotLB;
-}
-
-/*----------------------------------------------------------------------------------------------
- Make a segment break that does not correspond to a line break; ie, don't insert
- a line-break glyph.
-
- Work backwards from the prevLineBreak position (or if none, the readPos) to find the
- previous line-break of the given weight or less. Return the position of the final slot
- in the segment, or -1 if no appropriate break point was found. Recipient should be
- the output of the final line break pass, if any, or the glyph-generation pass.
-
- @param ptman - table manager, for supplying new slots
- @param islotPrevBreak - position of previous inserted line break
- @param fInsertedLB - did we actually insert a line-break glyph previously; currently
- ignored
- @param islotStartTry - where to start looking, or -1 for the end of the stream
- @param lb - (max) break weight to allow
- @param twsh - how we are handling trailing white-space
- @param islotMin - first slot that is officially part of the segment (after initial LB)
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::MakeSegmentBreak(GrTableManager * ptman,
- int islotPrevBreak, bool fInsertedLB, int islotStartTry,
- LineBrk lb, TrWsHandling twsh, int islotMin,
- LineBrk * plbNextToTry)
-{
- int ichwSegOffset;
- int islot;
- LineBrk lbFound;
- if (!FindSegmentEnd(ptman, islotStartTry, lb, twsh, islotMin,
- &islot, &ichwSegOffset, &lbFound, plbNextToTry))
- {
- return -1; // didn't find a legal break
- }
-
- // Review: do we need to delete any previously-inserted line-break glyph from the stream?
- // Doesn't seem like this has been a problem so far.
-
- m_islotSegLim = islot + 1; // after the final glyph of this segment
-
- return islot;
-}
-
-/*----------------------------------------------------------------------------------------------
- Work backwards from the prev line break position (or if none, the readPos) to find an
- earlier line-break of the given weight or less.
- Recipient should be the output of the final line break pass, if any, or the output
- of the glyph-generation pass.
-
- @param ptman - table manager, for supplying new slots
- @param islotStartTry - where to start looking, or -1 for the end of the stream
- @param lb - (max) break weight to allow
- @param twsh - how we are handling trailing white-space
- @param islotMin - first slot that is officially part of the segment (after initial LB)
- @param pislot - slot AFTER which the break will go (not the lim of the segment)
- @param pichwSegOffset - offset relative to the segment
- @param plbFound - weight of break to be created
- @param plbNextToTry - best found, in case we didn't find one at the requested level
-
- @return Whether or not an appropriate break was found.
-----------------------------------------------------------------------------------------------*/
-bool GrSlotStream::FindSegmentEnd(GrTableManager * ptman,
- int islotStartTry, LineBrk lb, TrWsHandling twsh, int islotMin,
- int * pislot, int * pichwSegOffset, LineBrk * plbFound,
- LineBrk * plbNextToTry)
-{
- Assert(AssertValid());
- Assert(m_ipass == ptman->NumberOfLbPasses());
-
- if (islotStartTry < 0)
- return false;
-
- *pislot = islotStartTry;
- GrSlotState * pslot = m_vpslot[*pislot];
- *plbNextToTry = klbClipBreak; // worst break
-
- ptman->State()->SetRemovedTrWhiteSpace(false);
-
- while (twsh != ktwshOnlyWs) // in white-space only case, ignore lb values
- {
- if (*pislot < islotMin)
- {
- return false;
- }
- *plbFound = LineBrk(pslot->m_lb);
- // Sanity check
- if (abs(*plbFound) > klbClipBreak)
- {
-// Assert(false);
- Warn("Unusually large breakweight");
- *plbFound = (LineBrk)((*plbFound < 0) ? -klbClipBreak : klbClipBreak);
- }
- *plbNextToTry = (LineBrk)(min(static_cast<int>(*plbNextToTry), abs(*plbFound)));
- *pichwSegOffset = pslot->SegOffset();
-
- if (int(*plbFound) >= 0 && *plbFound <= lb)
- break;
-
- --(*pislot);
- if (*pislot < 0)
- {
- return false;
- }
- pslot = m_vpslot[*pislot];
-
- if (int(*plbFound) <= 0 && ((int)*plbFound * -1) <= lb)
- {
- *plbFound = LineBrk(int(*plbFound) * -1);
- break;
- }
- }
-
- // Found a good break.
-
- if (twsh == ktwshOnlyWs)
- {
- // white-space-only segment
- while (pslot->Directionality() != kdircWhiteSpace)
- {
- --(*pislot);
- if (*pislot < 0)
- return false;
- pslot = m_vpslot[*pislot];
- *pichwSegOffset = pslot->SegOffset();
- }
- }
- else if (twsh == ktwshNoWs)
- {
- // no trailing white-space: remove it
- while (pslot->Directionality() == kdircWhiteSpace)
- {
- --(*pislot);
- if (*pislot < 0)
- return false;
- pslot = m_vpslot[*pislot];
- *pichwSegOffset = pslot->SegOffset();
- ptman->State()->SetRemovedTrWhiteSpace(true);
- }
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the stream (which should be the output of the last linebreak pass) has
- a better break at some earlier point than the one we found.
-
- @param islotBreak - position of inserted or final break point in stream, or index
- of last valid slot
-----------------------------------------------------------------------------------------------*/
-bool GrSlotStream::HasEarlierBetterBreak(int islotBreak, LineBrk lbFound, gid16 chwLB)
-{
- Assert(AssertValid());
-
- int islot = islotBreak;
- if (SlotAt(islot)->IsFinalLineBreak(chwLB))
- islot--;
-
- if (lbFound == klbNoBreak)
- lbFound = (LineBrk)SlotAt(islot)->BreakWeight();
-
- while (islot >= 0)
- {
- if (SlotAt(islot)->IsInitialLineBreak(chwLB))
- return false;
- if (SlotAt(islot)->BreakWeight() < lbFound)
- return true;
- islot--;
- }
-
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Make sure the stream contains a local instance of the given slot, not a copy used by
- a previous pass.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::EnsureLocalCopy(GrTableManager * ptman, GrSlotState * pslot,
- GrSlotStream * psstrmIn)
-{
- //Assert(m_vpslot[islot + m_cslotPreSeg] == pslot);
- Assert(pslot->PassModified() <= m_ipass);
-
- if (pslot->PassModified() < m_ipass)
- {
- int islot = pslot->PosPassIndex();
- Assert(SlotAtPosPassIndex(islot) == pslot);
- GrSlotState * pslotNew;
- ptman->State()->NewSlotCopy(pslot, m_ipass, &pslotNew);
- m_vpslot[islot + m_cslotPreSeg] = pslotNew;
-
- psstrmIn->ReplaceSlotInReprocessBuffer(pslot, pslotNew);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- A slot has been replace within the coorsponding output stream. Make sure the reprocess
- buffer of this stream constains the same slot.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::ReplaceSlotInReprocessBuffer(GrSlotState * pslotOld, GrSlotState * pslotNew)
-{
- if (m_islotReprocPos > -1)
- {
- for (size_t islot = 0; islot < m_vpslotReproc.size(); islot++)
- {
- if (m_vpslotReproc[islot] == pslotOld)
- m_vpslotReproc[islot] = pslotNew;
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Inserting a line break can potentially alter the directionality of preceeding glyphs.
- Zap the information that has been calculated.
-
- @param islotLB - index of the inserted final line-break glyph
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::ZapCalculatedDirLevels(int islotLB)
-{
- int islot;
- for (islot = m_islotWritePos; islot-- > islotLB; )
- m_vpslot[islot]->ZapDirLevel();
-
- for (islot = islotLB; islot-- > 0; )
- {
- if (StrongDir(m_vpslot[islot]->Directionality()))
- // We've found a strong direction code; don't need to zap beyond this point.
- return;
-
- m_vpslot[islot]->ZapDirLevel();
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the slot index of the last slot in the cluster for the just-processed chunk,
- relative to the last slot in the chunk.
-
- Return kNegInfinity if there are not enough slots in the stream to tell. This can
- happen while we are in the middle of processing a cluster.
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::MaxClusterSlot(int islotChunkMin, int islotChunkLim)
-{
- Assert(islotChunkLim > islotChunkMin);
-
- if (!m_fUsedByPosPass)
- return 0; // no clusters yet
-
- int islotRet = SlotAt(islotChunkLim - 1)->PosPassIndex();
-
- for (int islot = islotChunkMin; islot < islotChunkLim; islot++)
- {
- GrSlotState * pslot = SlotAt(islot);
-
- if (m_cslotPreSeg == -1)
- return kNegInfinity;
- if (!HasSlotAtPosPassIndex(pslot->AttachRootPosPassIndex()))
- return kNegInfinity;
-
- GrSlotState * pslotBase = pslot->Base(this);
-
- int dislotOffset = pslotBase->LastLeafOffset(this);
- if (dislotOffset == kNegInfinity)
- return kNegInfinity;
- islotRet = max(islotRet, pslotBase->PosPassIndex() + dislotOffset);
- }
-
- // Make it relative to the last slot in the chunk.
- islotRet -= SlotAt(islotChunkLim - 1)->PosPassIndex();
-
- return islotRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the break weight of the given slot, which should be a line-break.
- OBSOLETE??
-----------------------------------------------------------------------------------------------*/
-LineBrk GrSlotStream::BreakWeightAt(gid16 chwLB, int islot)
-{
- GrSlotState * pslot = GetSlotAt(islot);
- Assert(pslot->IsLineBreak(chwLB));
- return LineBrk(pslot->m_lb);
-}
-
-/*----------------------------------------------------------------------------------------------
- Append an initial or final line break of the given weight to the stream.
-
- @param ptman - table manager, for generating new slot
- @param lb - break weight for the line-break glyph
- @param dirc - directionality code for the line-break glyph
- @param islotLB - where to insert, or -1 if at the end
- @param fInitial - is this an initial line-break, or a final break?
- @param ichwSegOffset - offset relative to the beginning of the segment
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::AppendLineBreak(GrTableManager * ptman, GrCharStream * pchstrm,
- LineBrk lb, DirCode dirc, int islotLB, bool fInitial, int ichwSegOffset)
-{
- EngineState * pengst = ptman->State();
-
- Assert(AssertValid());
-/// Assert(m_islotReprocPos == -1);
-
- Assert(islotLB == -1 || fInitial);
- if (islotLB == -1)
- islotLB = m_islotWritePos;
-
-// int islot = m_islotWritePos;
-
- GrSlotState * pslotCopyFeat = pengst->AnAdjacentSlot(m_ipass, islotLB);
- GrSlotState * pslotNew;
- if (pslotCopyFeat)
- pengst->NewSlot(ptman->LBGlyphID(), pslotCopyFeat, 0, ichwSegOffset, &pslotNew);
- else
- {
- GrFeatureValues fval;
- pchstrm->CurrentFeatures(ptman, &fval);
- pengst->NewSlot(ptman->LBGlyphID(), fval, 0, ichwSegOffset, -1, &pslotNew);
- }
-
- pslotNew->m_lb = sdata8(lb);
- pslotNew->SetSpecialSlotFlag(fInitial ? kspslLbInitial : kspslLbFinal);
- //pslotNew->m_fInitialLB = fInitial; // TODO: remove
- pslotNew->SetDirectionality(dirc);
-
- m_vpslot.insert(m_vpslot.begin() + islotLB, pslotNew);
- // Make it part of a chunk with previous char/glyph
- m_vislotPrevChunkMap.insert(m_vislotPrevChunkMap.begin() + islotLB, -1);
- m_vislotNextChunkMap.insert(m_vislotNextChunkMap.begin() + islotLB, -1);
- if (m_ipass > 0)
- AdjustPrevStreamNextChunkMap(ptman, islotLB, 1);
-
- m_islotWritePos++;
-
- if (m_fUsedByPosPass && GotIndexOffset())
- {
- pslotNew->SetPosPassIndex(islotLB - m_cslotPreSeg, m_fInputToPosPass1);
- // Increment the stream index for the following slots.
- for (int islotTmp = islotLB + 1; islotTmp < m_islotWritePos; islotTmp++)
- {
- SlotAt(islotTmp)->IncPosPassIndex();
- }
- }
-
- if (fInitial)
- m_islotSegMin = islotLB; // just before the LB
- else
- m_islotSegLim = islotLB + 1; // just after the LB
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the index of the line break glyph within the specified range, or -1 if none.
- Recipient is functioning as the output stream.
-
- @param chwLB - glyph ID being used for line-break glyphs
- @param islotMin/Lim - range to search
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::FindFinalLineBreak(gid16 chwLB, int islotMin, int islotLim)
-{
- for (int islot = islotMin; islot < islotLim; ++islot)
- {
- if (m_vpslot[islot]->IsFinalLineBreak(chwLB))
- return islot;
- }
- return -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- A slot has been inserted (nInc == 1) or deleted (nInc == -1). Adjust the next-chunk map
- of the previous stream to match.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::AdjustPrevStreamNextChunkMap(GrTableManager * ptman, int islotMod, int nInc)
-{
- if (m_ipass == 0)
- return; // no previous stream to adjust
-
- int islotTmp = max(islotMod - 5, 0);
- while (islotTmp > 0 && m_vislotPrevChunkMap[islotTmp] == -1)
- islotTmp--;
-
- ptman->InputStream(m_ipass)->AdjustNextChunkMap(
- ((islotTmp <= 0) ? 0 : m_vislotPrevChunkMap[islotTmp]),
- islotMod, nInc);
-}
-
-/*----------------------------------------------------------------------------------------------
- An insertion or deletion has occurred at the given location in the following stream
- (specifically of an line-break glyph). Adjust the next-chunk-map accordingly so
- the indices still match.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::AdjustNextChunkMap(int islotMin, int islotInsOrDel, int nInc)
-{
- for (int islot = islotMin; islot < m_islotWritePos; islot++)
- {
- if (m_vislotNextChunkMap[islot] != -1 && m_vislotNextChunkMap[islot] >= islotInsOrDel)
- m_vislotNextChunkMap[islot] += nInc;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Unwind the read position of the stream, so that the following pass will begin
- reading from the new position. The recipient is functioning as the input stream.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::UnwindInput(int islotNewPos, bool fPreBidiPass)
-{
- Assert(m_islotReprocPos == -1);
- Assert(islotNewPos <= m_islotReadPos);
-
- int islot;
- for (islot = islotNewPos; islot < m_islotReadPos; ++islot)
- m_vislotNextChunkMap[islot] = -1;
-
- m_islotReadPos = islotNewPos;
- m_islotReadPosMax = m_islotReadPos;
-
- Assert(m_islotReadPos <= m_islotWritePos);
- if (fPreBidiPass)
- {
- for (islot = m_islotReadPos; islot < m_islotWritePos; ++islot)
- SlotAt(islot)->ZapDirLevel();
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Unwind the write position of the stream, so that the pass will begin writing
- at the new position. The recipient is functioning as the output stream
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::UnwindOutput(int islotNewPos, bool fOutputOfPosPass)
-{
- Assert(islotNewPos <= m_islotWritePos);
-
- int islot;
- for (islot = islotNewPos; islot < m_islotWritePos; ++islot)
- {
- m_vislotPrevChunkMap[islot] = -1;
-
- if (!fOutputOfPosPass && m_fUsedByPosPass)
- // This stream is the input to the first positioning pass, ie, the output
- // of the last sub pass or the bidi pass. Zap the stream indices,
- // since unwinding this pass could cause them to be invalid due to a later
- // reordering.
- SlotAt(islot)->ZapPosPassIndex();
- }
-
- m_islotWritePos = islotNewPos;
-
- m_fFullyWritten = false;
-
- if (m_islotSegMin > m_islotWritePos)
- m_islotSegMin = -1;
- if (m_islotSegLim > m_islotWritePos)
- m_islotSegLim = -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- We've just created a new chunk, with the recipient as the output stream. The beginning
- of the chunk is passed as 'islotOutput' and the end of the chunk is assumed to be the
- write-position of the recipient. Store the mappings into the corresponding
- input position.
-
- @param islotInputMin - beginning of chunk in input stream
- @param islotOutputMin - beginning of chunk in output stream (recipient)
- @param islotInputLim - end of chunk in input stream (currently not used)
- @param fSkipChunkStart - if true, either we have reprocessed part of a
- previously created chunk,
- or there was no input consumed;
- in either case, don't record the beginning of the chunk,
- just make this chunk be part of the previous
- @param fBackingUp - this chunk results in the stream position moving backwards,
- so clear anything we're backing over
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::MapInputChunk(int islotInputMin, int islotOutputMin, int islotInputLim,
- bool fSkipChunkStart, bool fBackingUp)
-{
- Assert(AssertValid());
- Assert(islotOutputMin >= -1);
-
- if (!fSkipChunkStart)
- {
- Assert(islotOutputMin >= 0);
- if (islotOutputMin >= 0) // just in case an invalid value was passed
- m_vislotPrevChunkMap[islotOutputMin] = islotInputMin;
- }
-
- int islot;
- for (islot = max(0, islotOutputMin + 1); islot < m_islotWritePos; ++islot)
- m_vislotPrevChunkMap[islot] = -1; // not a chunk boundary
-
-// if (fBackingUp && m_islotWritePos < m_vislotPrevChunkMap.Size())
-// m_vislotPrevChunkMap[m_islotWritePos] = -1;
-
- if (fBackingUp)
- for (islot = m_islotWritePos; islot < signed(m_vislotPrevChunkMap.size()); islot++)
- m_vislotPrevChunkMap[islot] = -1;
-
-// m_vislotPrevChunkMap[m_islotWritePos] = islotInputLim;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the length of the final chunk, where the recipient is the input stream.
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::LastNextChunkLength()
-{
- int cslotRet = 1;
- for (int islot = m_islotReadPos; islot-- > 0; )
- {
- if (m_vislotNextChunkMap[islot] != -1)
- return cslotRet;
- cslotRet++;
- }
- return cslotRet + 1;
-}
-
-/*----------------------------------------------------------------------------------------------
- We've just created a new chunk, with the recipient as the input stream. The beginning of
- the chunk is passed as 'islotInputMin' and the end of the chunk is assumed to be the
- read-position of the recipient. Store the mappings into the corresponding
- output position.
-
- @param islotOutputMin - beginning of chunk in output stream
- @param islotInputMin - beginning of chunk in input stream (recipient)
- @param islotOutputLim - end of chunk in output stream (currently not used)
- @param fSkipChunkStart - if true, either we have reprocessed part of a
- previously created chunk,
- or there was no output generated;
- in either case, don't record the beginning of the chunk,
- just make this chunk be part of the previous
- @param fBackingUp - this chunk results in the stream position moving backwards,
- so clear anything we're backing over
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::MapOutputChunk(int islotOutputMin, int islotInputMin, int islotOutputLim,
- bool fSkipChunkStart, int cslotReprocess, bool fBackingUp)
-{
- Assert(AssertValid());
-
- // Note: islotInputMin can be less than -1 if there is a large reprocess buffer near the
- // beginning of the input stream. In which case, fSkipChunk start should be true and
- // cslotReprocess large enough to keep any of the stuff below from having any problems.
- //Assert(islotInputMin >= -1);
-
- if (!fSkipChunkStart)
- {
- Assert(islotInputMin >= 0);
- if (islotInputMin >= 0) // just in case an invalid value was passed
- m_vislotNextChunkMap[islotInputMin] = islotOutputMin;
- }
-
- int islot;
- for (islot = max(0, islotInputMin + 1 + cslotReprocess); islot < m_islotReadPos; ++islot)
- m_vislotNextChunkMap[islot] = -1; // not a chunk boundary
-
-// if (fBackingUp && m_islotReadPos < m_vislotNextChunkMap.Size())
-// m_vislotNextChunkMap[m_islotReadPos] = -1;
-
- if (fBackingUp)
- for (islot = m_islotReadPos; islot < signed(m_vislotNextChunkMap.size()); islot++)
- m_vislotNextChunkMap[islot] = -1;
-
-// m_vislotNextChunkMap[m_islotReadPos] = islotOutputLim;
-}
-
-/*----------------------------------------------------------------------------------------------
- Ensure that the chunk maps for a pair of streams match properly. The recipient is
- the input stream.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::AssertChunkMapsValid(GrSlotStream * psstrmOut)
-{
-#ifdef _DEBUG
- GrSlotStream * psstrmIn = this;
-
- Assert(m_ipass == 0 || (m_ipass + 1 == psstrmOut->m_ipass));
-
- int islotMapNext;
- int islotMapPrev;
- int islot;
- for (islot = 0; islot < m_islotReadPos; ++islot)
- {
- islotMapNext = psstrmIn->ChunkInNext(islot);
- Assert(islotMapNext != -2);
- if (islotMapNext != -1)
- {
- islotMapPrev = psstrmOut->ChunkInPrev(islotMapNext);
- if (islotMapPrev == -2)
- {
- Assert(islot == psstrmOut->WritePos());
- }
- else
- {
- Assert(islot == islotMapPrev);
- }
- }
- }
-
- for (islot = 0; islot < psstrmOut->m_islotWritePos; ++islot)
- {
- islotMapPrev = psstrmOut->ChunkInPrev(islot);
- Assert(islotMapPrev != -2);
- if (islotMapPrev != -1)
- {
- islotMapNext = psstrmIn->ChunkInNext(islotMapPrev);
- if (islotMapNext == -2)
- {
- Assert(islot == psstrmIn->ReadPos());
- }
- else
- {
- Assert(islot == islotMapNext);
- }
- }
- }
-#endif // _DEBUG
-}
-
-/*----------------------------------------------------------------------------------------------
- Ensure that corresponding items in the streams of a positioning pass have matching
- stream indices. The recipient is the output stream.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::AssertStreamIndicesValid(GrSlotStream * psstrmIn)
-{
-#ifdef _DEBUG
- if (!GotIndexOffset())
- return;
-
- Assert(m_fUsedByPosPass);
-
- for (int islot = 0; islot < WritePos(); islot++)
- {
- GrSlotState * pslotOut = SlotAt(islot);
- GrSlotState * pslotIn =
- psstrmIn->SlotAt(islot + psstrmIn->IndexOffset() - IndexOffset());
- Assert(pslotOut->PosPassIndex() == pslotIn->PosPassIndex());
- Assert(pslotOut->HasAsPreviousState(pslotIn));
- }
-#endif // _DEBUG
-}
-
-/*----------------------------------------------------------------------------------------------
- Ensure that the roots of all attachments made in this chunk are present
- in the output stream. (Currently the compiler ensures this by making it an error
- to write rules that don't do this.)
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::AssertAttachmentsInOutput(int islotMin, int islotLim)
-{
-#ifdef _DEBUG
- for (int islot = islotMin; islot < islotLim; islot++)
- {
- GrSlotState * pslotOut = SlotAt(islot);
- int dislot = pslotOut->AttachTo();
- Assert(islotMin <= islot + dislot);
- Assert(islot + dislot < islotLim);
- }
-#endif // _DEBUG
-}
-
-/*----------------------------------------------------------------------------------------------
- Answer the slot index corresponding to the start of the chunk (as mapped to the following
- stream).
- ENHANCE: make more robust.
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::ChunkInNextMin(int islot)
-{
- int islotRet = islot;
- while (m_vislotNextChunkMap[islotRet] == -1 && islotRet > 0)
- --islotRet;
- return islotRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Answer the slot index corresponding to the end of the chunk (as mapped to the following
- stream).
- ENHANCE: make more robust.
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::ChunkInNextLim(int islot)
-{
- int islotRet = islot + 1;
- if (islotRet == m_islotReadPos)
- return islot;
- while (m_vislotNextChunkMap[islotRet] == -1 && islotRet < m_islotReadPos)
- {
- ++islotRet;
- Assert(islotRet < signed(m_vislotNextChunkMap.size()));
- }
- return islotRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Skip over the given number slots. This is used to resync the streams when we
- are restarting a new segment. Specifically the output stream informs the
- input stream of the number of slots to skip to get the boundary for a chunk that
- the output finds interesting.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::ResyncSkip(int cslot)
-{
- Assert(AssertValid());
- m_islotReadPos += cslot;
- m_cslotSkippedForResync = cslot;
- // Should never skip past the beginning of the line.
- Assert(m_islotSegMin == -1 || m_islotReadPos <= m_islotSegMin);
-}
-
-/*----------------------------------------------------------------------------------------------
- Record the number of slots in the stream that are previous to the official start of the
- segment.
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::CalcIndexOffset(GrTableManager * ptman)
-{
- if (GotIndexOffset())
- return; // already figured it
-
- if (m_islotSegMin > -1)
- {
- m_cslotPreSeg = m_islotSegMin;
- if (m_fUsedByPosPass)
- {
- for (int islotPre = 0; islotPre < WritePos(); islotPre++)
- {
- SlotAt(islotPre)->SetPosPassIndex(islotPre - m_cslotPreSeg,
- m_fInputToPosPass1);
- }
- }
- }
- // else can't figure it out yet
-
- // Old code:
-#if 0
- gid16 chwLB = ptman->LBGlyphID();
-
- for (int islot = 0; islot < WritePos(); islot++)
- {
- if (SlotAt(islot)->IsLineBreak(chwLB))
- {
- if (SlotAt(islot)->IsInitialLineBreak(chwLB))
- {
- m_cslotPreSeg = islot;
- }
- else
- {
- // Otherwise, we hit the final line break, which is kind of strange, because
- // in this case there is no initial line break, and we should have set
- // m_cslotPreSeg to 0 immediately when it was initialized.
- Assert(false);
- m_cslotPreSeg = 0;
- }
-
- if (m_fUsedByPosPass)
- {
- for (int islotPre = 0; islotPre < WritePos(); islotPre++)
- {
- SlotAt(islotPre)->SetPosPassIndex(islotPre - m_cslotPreSeg,
- m_fInputToPosPass1);
- }
- }
- return;
- }
-
- }
- // No line breaks yet, so no way to tell.
-#endif
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the positions in the streams for the next rule. The recipient is the output stream.
- If we are moving backwards, copy part of the output stream back to (a temporary buffer
- in) the input stream, so that we can reprocess it.
-
- @param cslotArg - how far to skip forward or back; most commonly zero
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::SetPosForNextRule(int cslotArg, GrSlotStream * psstrmIn,
- bool fOutputOfPosPass)
-{
- Assert(AssertValid());
-
- int cslot = cslotArg;
- // Can't reprocess what has already been read by the next pass. MaxBackup should allow
- // the flexibility needed, but if not, we fix it here.
- if (m_islotWritePos + cslot < m_islotReadPos)
- cslot = m_islotReadPos - m_islotWritePos;
-
- Assert(psstrmIn->m_ipass == m_ipass-1);
-
- if (cslot >= 0)
- {
- // Skipping forward.
- Assert(cslot <= psstrmIn->SlotsPendingInContext());
- for (int islot = 0; islot < cslot; islot++)
- CopyOneSlotFrom(psstrmIn);
- }
- else
- {
- // Reprocessing.
-
- // Save corresponding positions before doing the back-up.
- int islotReadPosInSave = psstrmIn->ReadPosForNextGet();
- int islotWritePosOutSave = this->WritePos();
-
- std::vector<GrSlotState*> vpslotTmp;
- int islot;
- if (psstrmIn->SlotsToReprocess() > 0)
- {
- // Stick any slots still to reprocess in a temporary buffer.
- for (islot = psstrmIn->m_islotReprocPos;
- islot < signed(psstrmIn->m_vpslotReproc.size());
- islot++)
- {
- vpslotTmp.push_back(psstrmIn->m_vpslotReproc[islot]);
- }
- }
-
- psstrmIn->ClearReprocBuffer();
- psstrmIn->m_islotReprocLim = psstrmIn->m_islotReadPos;
-
- for (islot = cslot; islot < 0; islot++)
- psstrmIn->m_vpslotReproc.push_back(m_vpslot[m_islotWritePos+islot]);
- for (islot = 0; islot < signed(vpslotTmp.size()); islot++)
- psstrmIn->m_vpslotReproc.push_back(vpslotTmp[islot]);
- psstrmIn->m_islotReprocPos = 0;
-
- if (!fOutputOfPosPass && m_fUsedByPosPass)
- {
- // Last substitution pass; zap the stream indices, since they may
- // now be invalid.
- for (islot = 0; islot < signed(psstrmIn->m_vpslotReproc.size()); islot++)
- psstrmIn->m_vpslotReproc[islot]->ZapPosPassIndex();
- }
-
- // If either the min or lim is in the middle of the reprocess buffer,
- // adjust as necessary to match where it is in the output stream.
- int islotSegMinIn = psstrmIn->SegMin();
- if (islotSegMinIn > -1 &&
- psstrmIn->ReadPosForNextGet() <= islotSegMinIn &&
- islotSegMinIn < islotReadPosInSave)
- {
- Assert(this->SegMin() > -1);
- int dislotIn = islotReadPosInSave - islotSegMinIn;
- int dislotOut = islotWritePosOutSave - SegMin();
- psstrmIn->SetSegMin(islotSegMinIn + dislotIn - dislotOut, true);
- if (psstrmIn->m_cslotPreSeg > psstrmIn->SegMin())
- psstrmIn->m_cslotPreSeg = -1;
- }
- int islotSegLimIn = psstrmIn->SegLimIfKnown();
- if (islotSegLimIn > -1 &&
- psstrmIn->ReadPosForNextGet() <= islotSegLimIn &&
- islotSegLimIn < islotReadPosInSave)
- {
- int islotSegLimOut = this->SegLimIfKnown();
- Assert(islotSegLimOut > -1);
- int dislotIn = islotReadPosInSave - islotSegLimIn;
- int dislotOut = islotWritePosOutSave - islotSegLimOut;
- psstrmIn->SetSegLim(islotSegLimIn + dislotIn - dislotOut);
- }
-
- m_islotWritePos += cslot;
-
- if (m_islotSegMin >= m_islotWritePos)
- m_islotSegMin = -1;
- if (m_islotSegLim >= m_islotWritePos)
- m_islotSegLim = -1;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- If a rule was run over a LB glyph, set the appropriate flag in the table manager.
- CURRENTLY NOT USED
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::SetLBContextFlag(GrTableManager * ptman, int islotStart)
-{
- gid16 chwLB = ptman->LBGlyphID();
- for (int islot = islotStart; islot < WritePos(); islot++)
- {
- GrSlotState * pslot = SlotAt(islot);
- if (pslot->IsInitialLineBreak(chwLB))
- ptman->State()->SetStartLineContext(true);
- if (pslot->IsFinalLineBreak(chwLB))
- ptman->State()->SetEndLineContext(true);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the number of slots that have been output by the current pass but must be
- reprocessed by this same pass. The recipient is serving as the input stream.
-----------------------------------------------------------------------------------------------*/
-int GrSlotStream::SlotsToReprocess()
-{
- Assert(AssertValid());
-
- if (m_islotReprocPos == -1)
- return 0;
- return (m_vpslotReproc.size() - m_islotReprocPos);
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the input at the given slot, that is, the original input, ignoring the issue of
- reprocessing.
-----------------------------------------------------------------------------------------------*/
-GrSlotState * GrSlotStream::GetSlotAt(int islot)
-{
- return m_vpslot[islot];
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the "current" input item from the rule's perspective, ie, the last slot read.
- So dislotOffset = 0 means not the slot at the read position but one slot earlier.
-
- If dislotOffset is less the the original read position that was in effect at the
- beginning of the rule, we need to read from the output stream, which has the
- up-to-date values. See the class comment for more details.
-
- @param dislotOffset - offset from current stream position
- @param fNullOkay - true if it's okay to return NULL in the situation where we're asking
- for something before the beginning of the stream
-----------------------------------------------------------------------------------------------*/
-
-GrSlotState * GrSlotStream::RuleInputSlot(int dislotOffset, GrSlotStream * psstrmOutput,
- bool fNullOkay)
-{
- Assert(m_islotRuleStartRead <= m_islotReadPos);
-
- if (dislotOffset > 0)
- return Peek(dislotOffset - 1);
-
- int cslotOffsetBack = dislotOffset * -1;
-
- if (m_islotReprocLim > -1)
- {
- // There is a reprocess buffer.
-
- // Position when starting the rule should never be earlier than the
- // beginning of the reprocess buffer.
- Assert(m_islotRuleStartRead >= m_islotReprocLim - signed(m_vpslotReproc.size()));
-
- // number of items following the reprocess buffer:
- int cslotPostReproc = m_islotReadPos - m_islotReprocLim;
-
- if (cslotOffsetBack >= cslotPostReproc)
- {
- // number of items in the reprocess buffer that were valid when the rule
- // was started:
- int cslotValidReproc = m_islotReprocLim - m_islotRuleStartRead;
-
- if (cslotOffsetBack >= cslotPostReproc + cslotValidReproc)
- {
- // Read from the output stream.
- int dislotTmp = dislotOffset - 1 + cslotPostReproc + cslotValidReproc;
- Assert(dislotTmp < 0);
- return psstrmOutput->PeekBack(dislotTmp);
- }
- else
- {
- if (m_islotReprocPos > -1)
- {
- // Current read pos is inside reprocess buffer.
- Assert(cslotPostReproc == 0);
- int islotStartReadReprocBuf = m_vpslotReproc.size() - cslotValidReproc;
- Assert(islotStartReadReprocBuf >= 0);
- int islotInReprocBuf = m_islotReprocPos - cslotOffsetBack - 1;
- if (islotInReprocBuf < islotStartReadReprocBuf)
- {
- // Return a slot from before the reprocess buffer, from the
- // output stream (which is serving as our input stream for precontext
- // items).
- return psstrmOutput->PeekBack(islotInReprocBuf - islotStartReadReprocBuf);
- }
- else if (islotInReprocBuf < 0)
- {
- Assert(false);
- //int islotReprocMin = m_islotReprocLim - m_vpslotReproc.Size();
- //return m_vpslot[islotReprocMin + islotInReprocBuf];
- }
- else
- // Read from the reprocess buffer.
- return m_vpslotReproc[islotInReprocBuf];
- }
- else
- // Looking backwards into the reprocess buffer.
- return m_vpslotReproc[
- m_vpslotReproc.size() - cslotOffsetBack + cslotPostReproc - 1];
- }
- }
- }
-
- // There is no reprocess buffer, or it is not a factor.
-
- if (m_islotReadPos + dislotOffset - 1 < m_islotRuleStartRead)
- {
- // Read from the output stream.
- return psstrmOutput->PeekBack(m_islotReadPos + dislotOffset - 1 - m_islotRuleStartRead,
- fNullOkay);
- }
- else
- {
- // Read normally from the input stream.
- return m_vpslot[m_islotReadPos - cslotOffsetBack - 1];
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the "current" output item from the rule's perspective, ie, the last slot written.
- So dislotOffset = 0 means not the slot at the write position but one slot earlier.
-----------------------------------------------------------------------------------------------*/
-
-GrSlotState * GrSlotStream::RuleOutputSlot(int dislotOffset)
-{
- return m_vpslot[m_islotWritePos - 1 + dislotOffset];
-}
-
-/*----------------------------------------------------------------------------------------------
- For any slot in the final output that has no associations, set the "before" pointer to
- the following slot and the "after" pointer to the preceding slot. The idea of this is
- that it will make it impossible to select a the glyph separately.
-
- Note that if the slot is the first on the line, it will not be associated with
- a slot in the previous segment.
-
- @param chwLB - the glyph IB for the line-break glyphs
-----------------------------------------------------------------------------------------------*/
-void GrSlotStream::SetNeutralAssociations(gid16 chwLB)
-{
- for (int islot = 0; islot < m_islotWritePos; ++islot)
- {
- GrSlotState * pslot = SlotAt(islot);
- if (pslot->PassModified() > 0 &&
- (pslot->BeforeAssoc() == kPosInfinity || pslot->AfterAssoc() == kNegInfinity))
- {
- pslot->CleanUpAssocs();
- if (pslot->BeforeAssoc() != kPosInfinity && pslot->AfterAssoc() != kNegInfinity)
- continue;
-
- Assert(pslot->BeforeAssoc() == kPosInfinity && pslot->AfterAssoc() == kNegInfinity);
-
- GrSlotState * pslotBefore = FindAssociatedSlot(islot, 1, chwLB);
- GrSlotState * pslotAfter = FindAssociatedSlot(islot, -1, chwLB);
-
- if (pslotBefore && pslotAfter)
- pslot->Associate(pslotBefore, pslotAfter);
- else if (pslotBefore)
- pslot->Associate(pslotBefore);
- else if (pslotAfter)
- pslot->Associate(pslotAfter);
- else
- // Weird, but can happen with an empty segment.
- Warn("No assocations");
-
-// Assert(pslot->m_vpslotAssoc.Size() > 0);
- pslot->m_fNeutralAssocs = true;
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Find the next or previous slot in the final output that has explicit associations, or
- return NULL if none.
-
- @param islot - starting slot
- @param nInc - +1 if we want to find the next slot, -1 if we want the previous slot
- @param chwLB - the glyph IB for the line-break glyphs
-----------------------------------------------------------------------------------------------*/
-GrSlotState * GrSlotStream::FindAssociatedSlot(int islot, int nInc, gid16 chwLB)
-{
- int islotNext = islot + nInc;
-
- while (islotNext >= 0 && islotNext < m_islotWritePos)
- {
- GrSlotState * pslotRet = SlotAt(islotNext);
- if (pslotRet->IsLineBreak(chwLB))
- { }
- else if (pslotRet->PassModified() == 0 ||
- (pslotRet->m_vpslotAssoc.size() > 0 && pslotRet->m_fNeutralAssocs == false))
- {
- return pslotRet;
- }
- islotNext += nInc;
- }
- return NULL;
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/GrSlotStream.h b/Build/source/libs/graphite-engine/src/segment/GrSlotStream.h
deleted file mode 100644
index 006191252dc..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrSlotStream.h
+++ /dev/null
@@ -1,577 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrSlotStream.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Classes GrSlotStream and GrSlotState.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef SLOTSTREAM_INCLUDED
-#define SLOTSTREAM_INCLUDED
-
-//:End Ignore
-
-namespace gr
-{
-
-class EngineState;
-class Font;
-
-/*----------------------------------------------------------------------------------------------
- Each GrSlotStream represents the output of one pass, which also serves as the input
- of the following pass. Hence it has two positions, a write position for when it is
- serving as an output stream, and a read position for when it is serving as an input
- stream. The TableManager holds a list of the streams.
-
- The reading of slot streams is complicated by two factors. First, it may be necessary
- to access the "pre-context" items of a rule, which are the slots before the current
- stream position at the point when the rule is matched. These items will not be modified
- by the rule, but may have been modified by a previous rule in the same pass, Therefore
- we need to read these slots from the output stream, rather than the input stream,
- because the output stream has the current slot attribute values that we want to work with.
- In order make this happen, we keep track of the read and write positions of
- the streams at the time the current rule was matched (m_islotRuleStartRead and
- m_islotRuleStartWrite) and whenever we try to read a slot before m_islotRuleStartRead,
- we read the corresponding slot from the output stream instead.
-
- Second, a rule may explicitly set the advance position so that some items are
- actually reprocessed (and potentially modified) by the same pass. When this happens,
- we actually copy the slots to reprocess from the output stream back
- into a temporary buffer (m_vpslotReproc) in the input stream, and set up the stream so
- that the next read operations will read from the buffer.
-
- It gets tricky because these two mechanisms can overlap with each other, so care
- must be taken to read from the right place: the input stream in the normal way,
- the reprocess buffer, or the output stream. See the RuleInputSlot method.
-
- Another messy bit of code has to do with maintaining chunks. These are used for
- backtracking and unwinding after inserting a line-break. Adjacent streams have maps
- showing how many slots were processed by a single rule; the maps must be consisent
- between adjacent rules. The following is an example of a pair of valid chunk maps:
-
- Input stream Output stream
- Pos next-map prev-map
- 0 0 0
- 1 -1 -1
- 2 2 2
- 3 4 -1
- 4 -1 3
- 5 -1 -1
- 6 7 -1
- 7 -1 6
- 8 -1 -1
-
- A -1 means that slot is not at the beginning of a chunk. Otherwise, there must be a
- corresponding value in the parallel map of the adjacent stream--eg, the input stream's
- next-map(3) == 4 and the output stream's prev-map(4) == 3. Assertions are run
- regularly to ensure that the chunk maps stay valid.
-
- So above, the first chunk corresponds to slots 0-1 in the input and 0-1 in the output;
- two slots were processed by the rule. The second chunk corresponds to slot 2
- in the input and slots 2-3 in the output (a slot was inserted).
- The third corresponds to slots 3-5 in the input and 4-6 in the output (three slots
- processed). The fourth chunk covers slots 6-8 in the input and 7-8 in the output
- (one slot was deleted).
-
- ENHANCE SharonC: explain the effect of skipped slots on the chunk maps.
-
- Hungarian: sstrm
-----------------------------------------------------------------------------------------------*/
-class GrSlotStream {
-
- friend class GrSlotState;
- friend class FontMemoryUsage;
-
-public:
- // Constructor:
- GrSlotStream(int ipass)
- {
- m_ipass = ipass;
- m_vpslot.clear();
- m_vislotPrevChunkMap.clear();
- m_vislotNextChunkMap.clear();
- m_vpslotReproc.clear();
- }
-
- // Destructor:
- ~GrSlotStream()
- {
- ReleaseSlots(0, m_vpslot.size());
- }
-
- void ReleaseSlots(int islotMin, int islotLim)
- {
- // A slot stream is responsible for deleting the slot states that it created,
- // that is, the ones whose modified tag equals this stream's pass index.
- // NO LONGER TRUE - there is a master list of them managed by the GrTableManager.
-// for (int islot = islotMin; islot < islotLim; ++islot)
-// {
-// if (m_vpslot[islot]->m_ipassModified == m_ipass)
-// delete m_vpslot[islot];
-// }
- }
-
- // Getters:
- int WritePos() { return m_islotWritePos; }
- int ReadPos() { return m_islotReadPos; }
- bool FullyWritten() { return m_fFullyWritten; }
-
- int SlotsPresent() { return m_vpslot.size(); }
-
- // Setters:
- void SetWritePos(int islot)
- {
- m_islotWritePos = islot;
- }
- void SetReadPos(int islot)
- {
- m_islotReadPos = islot;
- }
-
- void Initialize(int ipassPos1, bool fAnythingPrevious)
- {
- m_islotWritePos = 0;
- m_islotReadPos = 0;
- m_islotReprocPos = -1;
- m_islotReprocLim = -1;
- m_islotRuleStartRead = 0;
- m_islotRuleStartWrite = 0;
- m_islotReadPosMax = 0;
- m_cslotSkippedForResync = 0;
- m_cslotPreSeg = (fAnythingPrevious) ? -1 : 0;
- m_fFullyWritten = false;
- m_islotSegMin = -1;
- m_islotSegLim = -1;
- m_fUsedByPosPass = (m_ipass + 1 >= ipassPos1);
- m_fInputToPosPass1 = (m_ipass + 1 == ipassPos1);
- m_vpslot.clear(); // not responsible for destroying the slots
- m_vislotPrevChunkMap.clear();
- m_vislotNextChunkMap.clear();
- }
-
-public:
- bool AtEnd();
- bool AtEndOfContext();
- void NextPut(GrSlotState* pslot);
- GrSlotState * NextGet();
- GrSlotState * Peek(int dislot = 0);
- GrSlotState * PeekBack(int dislot, bool fNullOkay = false);
- void Skip(int = 1);
- GrSlotState * SlotAt(int islot)
- {
- return m_vpslot[islot];
- }
-
- int OutputOfPass()
- {
- return m_ipass;
- }
-
- // This function is intended to be used within positioning passes where there is a
- // one-to-one correspondence beween the slots in consecutive streams.
- GrSlotState * OutputSlotAt(int islot)
- {
- return Peek(islot - ReadPosForNextGet());
- }
-
- int ReadPosForNextGet()
- {
- return ReadPos() - SlotsToReprocess();
- }
-
- // Only valid for streams that are the input or output to a positioning pass.
- GrSlotState * SlotAtPosPassIndex(int islot)
- {
- Assert(GotIndexOffset());
- Assert(m_fUsedByPosPass);
- return m_vpslot[islot + m_cslotPreSeg];
- }
-
- // Only valid for streams that are the input or output to a positioning pass.
- bool HasSlotAtPosPassIndex(int islot)
- {
- Assert(GotIndexOffset());
- Assert(m_fUsedByPosPass);
- return (signed(m_vpslot.size()) > (islot + m_cslotPreSeg));
- }
-
- bool AssertValid();
- void AssertChunkMapsValid(GrSlotStream * psstrmOut);
- void AssertStreamIndicesValid(GrSlotStream * psstrmIn);
- void AssertAttachmentsInOutput(int islotMin, int islotLim);
- bool NoReproc()
- {
- return (m_islotReprocPos == -1 || (m_islotReprocPos >= signed(m_vpslotReproc.size())));
- }
-
- int SlotsPending();
- int SlotsPendingInContext();
- int TotalSlotsPending();
- bool PastEndOfPositioning(bool fOutput);
-
- void ClearReprocBuffer()
- {
- m_islotReprocPos = -1;
- m_islotReprocLim = -1;
- m_vpslotReproc.clear();
- }
-
- int ReprocLim()
- {
- return m_islotReprocLim;
- }
-
- int ReprocMin()
- {
- Assert(m_islotReprocPos > -1);
- return m_islotReprocLim - m_vpslot.size();
- }
-
- int RuleStartReadPos()
- {
- return m_islotRuleStartRead;
- }
-
- void SetRuleStartReadPos()
- {
- if (m_islotReprocPos > -1)
- m_islotRuleStartRead = m_islotReprocLim - SlotsToReprocess();
- else
- m_islotRuleStartRead = m_islotReadPos;
- }
-
- int RuleStartWritePos()
- {
- return m_islotRuleStartWrite;
- }
-
- void SetRuleStartWritePos()
- {
- m_islotRuleStartWrite = m_islotWritePos;
- }
-
- void MarkFullyWritten();
-
- void SetSegMin(int islot, bool fAdjusting = false)
- {
- Assert(fAdjusting || m_islotSegMin == -1 || m_islotSegMin == islot);
- m_islotSegMin = islot;
- }
- void SetSegMinToWritePos(bool fMod = true)
- {
- if (m_islotSegMin == -1)
- m_islotSegMin = m_islotWritePos;
- else
- Assert(m_islotSegMin <= m_islotWritePos); // eg, already set to before the initial LB
- }
- int SegMin()
- {
- return m_islotSegMin;
- }
- void SetSegLim(int islot)
- {
- m_islotSegLim = islot;
- }
- void SetSegLimToWritePos(bool fMod = true)
- {
- if (m_islotSegLim > -1 && !fMod)
- {
- Assert(m_islotSegLim <= m_islotWritePos);
- return;
- }
- m_islotSegLim = m_islotWritePos;
- }
- int SegLimIfKnown()
- {
- return m_islotSegLim;
- }
- int FinalSegLim()
- {
- if (m_islotSegLim > -1)
- return m_islotSegLim;
- else
- return m_islotWritePos;
- }
-
- // Return true if we are exactly at the segment min.
- bool AtSegMin()
- {
- if (m_islotSegMin == -1)
- return false;
- return (m_islotSegMin == ReadPosForNextGet());
- }
-
- // Return true if we are exactly at the segment lim.
- bool AtSegLim()
- {
- if (m_islotSegLim == -1)
- return false;
- return (m_islotSegLim == ReadPosForNextGet());
- }
-
- int ReadPosMax()
- {
- return m_islotReadPosMax;
- }
- void SetReadPosMax(int islot)
- {
- m_islotReadPosMax = std::max(m_islotReadPosMax, islot);
- }
-
- int OldDirLevelRange(EngineState * pengst, int islotStart, int nTopDirection);
- int DirLevelRange(EngineState * pengst, int islotStart, int nTopDirection,
- std::vector<int> & vislotStarts, std::vector<int> & vislotStops);
- int GetSlotDirLevel(EngineState * pengst, int islot,
- int nOuterLevel, int nCurrLevel, DirCode dircMarker, DirCode dircOverride);
- DirCode AdjacentStrongCode(EngineState * pengst, int islot, int nInc,
- DirCode dircPDF, bool fNumbersAreStrong = false);
- DirCode TerminatorSequence(EngineState * pengst, int islot, int nInc, DirCode dircPDF);
- DirCode AdjacentNonBndNeutralCode(EngineState * pengst, int islot, int nInc,
- DirCode dircPDF);
-
- void CopyOneSlotFrom(GrSlotStream * psstrmPrev);
- void SimpleCopyFrom(GrSlotStream * psstrmI, int islotInput, int islotOutput);
-
- bool MoreSpace(GrTableManager * ptman,
- float xsSpaceAllotted, bool fWidthIsCharCount,
- bool fIgnoreTrailingWS, TrWsHandling twsh,
- float * pxsWidth);
-
- int InsertLineBreak(GrTableManager * ptman,
- int islotPrevBreak, bool fInsertedLB, int islotStartTry,
- LineBrk lb, TrWsHandling twsh, int islotMin, LineBrk * plbNextToTry);
- int MakeSegmentBreak(GrTableManager * ptman,
- int islotPrevBreak, bool fInsertedLB, int islotStartTry,
- LineBrk lb, TrWsHandling twsh, int islotMin, LineBrk * plbNextToTry);
- bool FindSegmentEnd(GrTableManager * ptman,
- int islotStartTry, LineBrk lb, TrWsHandling twsh, int islotMin,
- int * pislot, int * pichwSegOffset,
- LineBrk * plbFound, LineBrk * plbNextToTry);
- bool HasEarlierBetterBreak(int islotBreak, LineBrk lbFound, gid16 chwLB);
- LineBrk BreakWeightAt(gid16 chwLB, int islot);
- void AppendLineBreak(GrTableManager *, GrCharStream * pchstrm,
- LineBrk, DirCode dirc, int islot, bool fInitial, int ichwSegOffset);
- int FindFinalLineBreak(gid16 chwLB, int islotMin, int islotLim);
- void AdjustPrevStreamNextChunkMap(GrTableManager * ptman, int islotMod, int nInc);
- void AdjustNextChunkMap(int islotMin, int islotMod, int nInc);
-
- void EnsureLocalCopy(GrTableManager * ptman, GrSlotState * pslot, GrSlotStream * psstrmIn);
- void ReplaceSlotInReprocessBuffer(GrSlotState * pslotOld, GrSlotState * pslotNew);
-
- void ZapCalculatedDirLevels(int islotLB);
-
- int MaxClusterSlot(int islotChunkLim)
- {
- return MaxClusterSlot(islotChunkLim - 1, islotChunkLim);
- }
- int MaxClusterSlot(int islotChunkMin, int islotChunkLim);
-
- void UnwindInput( int islot, bool fPreBidiPass);
- void UnwindOutput(int islot, bool fOutputOfPosPass);
-
- void MapInputChunk( int islotIn, int islotOut, int islotInLim,
- bool fReprocessing, bool fBackingUp);
- void MapOutputChunk(int islotOut, int islotIn, int islotOutLim,
- bool fReprocessing, int cslotReprocess, bool fBackingUp);
-
- int LastNextChunkLength();
-
- int ChunkInPrev(int i)
- {
- Assert(i >= 0);
- Assert(i < signed(m_vislotPrevChunkMap.size()));
- Assert(i < m_islotWritePos);
- return m_vislotPrevChunkMap[i];
- }
- int ChunkInNext(int i)
- {
- Assert(i >= 0);
- Assert(i < signed(m_vislotNextChunkMap.size()));
- Assert(i < m_islotReadPos);
- return m_vislotNextChunkMap[i];
- }
-
- int ChunkInNextMin(int islot);
- int ChunkInNextLim(int islot);
-
- void ResyncSkip(int nslot);
- int SlotsSkippedToResync()
- {
- return m_cslotSkippedForResync;
- }
- void ClearSlotsSkippedToResync()
- {
- m_cslotSkippedForResync = 0;
- }
-
- int IndexOffset()
- {
- Assert(GotIndexOffset()); // should have been calculated
- return m_cslotPreSeg;
- }
- void SetIndexOffset(int c)
- {
- m_cslotPreSeg = c;
- }
- bool GotIndexOffset()
- {
- return (m_cslotPreSeg >= 0);
- }
- void CalcIndexOffset(GrTableManager * ptman);
-
- void SetPosForNextRule(int nslot, GrSlotStream * psstrmInput, bool fOutputOfPosPass);
- void SetLBContextFlag(GrTableManager * ptman, int islotStart);
- int SlotsToReprocess();
-
- void SetNeutralAssociations(gid16 chwLB);
-protected:
- GrSlotState * FindAssociatedSlot(int islot, int nInc, gid16 chwLB);
-
- GrSlotState * GetSlotAt(int islot);
-
-public:
- // Used by the action code:
- void BackupReadPos(int cslot = 1)
- {
- for (int islot = 0; islot < cslot; islot++)
- {
- if (m_islotReprocLim > -1 && m_islotReprocLim == m_islotReadPos)
- {
- if (m_islotReprocPos == -1)
- m_islotReprocPos = m_vpslotReproc.size() - 1;
- else
- --m_islotReprocPos;
- Assert(m_islotReprocPos >= 0);
- }
- else
- --m_islotReadPos;
- }
- }
-
- GrSlotState * RuleInputSlot(int dislot = 0, GrSlotStream * psstrmOut = NULL,
- bool fNullOkay = false);
- GrSlotState * RuleOutputSlot(int dislot = 0);
-
- void PutSlotAt(GrSlotState * pslot, int islot)
- {
- // Currently only used for the final pass, when applying justify.width to
- // the advance width.
- Assert(signed(m_vpslot.size()) > islot);
- Assert(WritePos() > islot);
- Assert(ReadPos() <= islot);
- Assert(SlotsToReprocess() == 0);
- m_vpslot[islot] = pslot;
- }
-
-protected:
- // Instance variables:
- int m_ipass; // which pass this stream is serving as OUTPUT of
-
- std::vector<GrSlotState*> m_vpslot; // the slots being processed
-
- // Chunking information:
- std::vector<int> m_vislotPrevChunkMap; // chunk mapping into previous stream;
- // -1 if not at a chunk boundary
- // (this information is needed for
- // reinitialization after inserting a line break)
-
- std::vector<int> m_vislotNextChunkMap; // chunk mapping into next stream, or -1
- // (this information is needed for backtracking)
-
- // Since most streams serve as both input and output, there are two positions.
- // Note that readPos <= writePos always.
- int m_islotWritePos; // where previous pass should put next output
- int m_islotReadPos; // where following pass should start processing from
-
- // When we are reprocessing some of the output from the next stream:
- std::vector<GrSlotState*> m_vpslotReproc; // temporary buffer
- int m_islotReprocLim; // the read position corresponding to the end of the reprocess
- // buffer; -1 if buffer is invalid
- int m_islotReprocPos; // index into m_vpslotReproc from where we should read next;
- // -1 if we are not reprocessing
-
- int m_islotRuleStartRead; // read position when the rule was started; any requests before
- // this point should access the output stream, because it has
- // the most up-to-date values.
- int m_islotRuleStartWrite; // write position when the rule started
-
- bool m_fFullyWritten; // set to true when we can't get any more from the
- // previous pass; initially false.
-
- int m_islotSegMin; // the official min of the segment; -1 if not yet set
- int m_islotSegLim; // the official lim of the segment; -1 if not yet set
- // (only set for the output of the final line-break pass
- // and those beyond)
-
- int m_cslotSkippedForResync; // number of slots skipped to resync;
- // specifically, the number of slots' worth of the
- // next-chunk-map that are invalid, not mapped
- // to any slots in the following stream
-
- int m_cslotPreSeg; // number of slots previous to the official beginning of the segment;
- // -1 if we haven't figured it out yet. Used for keeping streams
- // in the positioning pass in sync; not particularly useful for
- // substitution passes, and will possibly be left uncalculated.
-
- bool m_fUsedByPosPass; // true if this is input to or output from a positioning pass
- bool m_fInputToPosPass1; // true if this is the input to the first positioning pass
-
- // Max value of m_islotReadPos; used for recognizing infinite loops and forcibly
- // advancing (see GrPass::CheckInputProgress).
- int m_islotReadPosMax;
-
-public:
- // For transduction logging:
-#ifdef TRACING
-// void LogSlotGlyphs(std::ofstream & strmOut, gid16 chwLB);
-#endif // TRACING
-
- // For test procedures:
- int NumberOfSlots() { return m_vpslot.size(); }
- GrSlotState * LastSlotWritten()
- {
- if (m_islotWritePos == 0)
- return NULL;
- else
- return m_vpslot[m_islotWritePos-1];
- }
- GrSlotState * LastSlotRead()
- {
- if (m_islotReadPos == 0)
- return NULL;
- else
- return m_vpslot[m_islotReadPos-1];
- }
-
- gid16 GlyphIDAt(int islot)
- {
- return m_vpslot[islot]->m_chwGlyphID;
- }
-
- int PreChunk() // answer the number of prepended items that are not in any chunk;
- // should be obsolete now
- {
- int islot;
- for (islot = 0; islot < m_islotReadPos; ++islot)
- {
- if (m_vislotNextChunkMap[islot] != -1)
- return islot;
- }
- Assert(false);
- return islot;
- }
-
-}; // end of class GrSlotStream
-
-} // namespace gr
-
-
-#endif // !SLOTSTREAM_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/GrTableManager.cpp b/Build/source/libs/graphite-engine/src/segment/GrTableManager.cpp
deleted file mode 100644
index fde364e7e2e..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrTableManager.cpp
+++ /dev/null
@@ -1,2691 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrTableManager.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- GrTableManager, which handles the interactions between passes, including the demand-pull
- algorithm.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-//#ifndef _WIN32
-#include <stdlib.h>
-#include <math.h>
-//#endif
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Constructors and initializers
-----------------------------------------------------------------------------------------------*/
-EngineState::EngineState()
- : m_ipassJustCalled(-1),
- m_fStartLineContext(false),
- m_fEndLineContext(false),
- ////m_pgg(NULL),
- m_cslotPreSeg(0),
- m_islotblkCurr(-1),
- m_islotNext(kSlotBlockSize),
- m_fInitialLB(false),
- m_fFinalLB(false),
- m_fInsertedLB(false),
- m_fExceededSpace(false),
- m_fHitHardBreak(false),
- m_fRemovedWhtsp(false),
- m_dxsShrinkPossible(GrSlotState::kNotYetSet),
- m_islotPosNext(-1),
- m_xsPosXNext(0),
- m_ysPosYNext(0),
- m_dxsTotWidthSoFar(0),
- m_dxsVisWidthSoFar(0),
- m_prgzpst(NULL),
- m_prgpsstrm(NULL)
-{
- m_vslotblk.clear();
- m_vprgnSlotVarLenBufs.clear();
-}
-
-void EngineState::Initialize(GrEngine * pgreng, GrTableManager * ptman)
-{
- m_ptman = ptman;
- m_cpass = ptman->NumberOfPasses(); // duplicate for convenience
-
- m_cUserDefn = pgreng->NumUserDefn();
- m_cFeat = pgreng->NumFeat();
- m_cCompPerLig = pgreng->NumCompPerLig();
-
- if (m_prgzpst)
- delete[] m_prgzpst;
- m_prgzpst = new PassState[m_cpass];
- ptman->StorePassStates(m_prgzpst);
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructors
-----------------------------------------------------------------------------------------------*/
-GrTableManager::~GrTableManager()
-{
- for (int ipass = 0; ipass < m_cpass; ++ipass)
- delete Pass(ipass);
-
- delete[] m_prgppass;
-}
-
-EngineState::~EngineState()
-{
- DestroySlotBlocks();
-
- delete[] m_prgzpst;
-
- if (m_prgpsstrm)
- {
- for (int isstrm = 0; isstrm < m_cpass; ++isstrm)
- delete OutputStream(isstrm);
-
- delete[] m_prgpsstrm;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Delete all the slots.
-----------------------------------------------------------------------------------------------*/
-void EngineState::DestroySlotBlocks()
-{
- Assert(m_vslotblk.size() == m_vprgnSlotVarLenBufs.size());
- for (size_t islotblk = 0; islotblk < m_vslotblk.size(); ++islotblk)
- {
- delete[] m_vslotblk[islotblk];
- delete[] m_vprgnSlotVarLenBufs[islotblk];
- }
- m_vslotblk.clear();
- m_vprgnSlotVarLenBufs.clear();
-}
-
-/*----------------------------------------------------------------------------------------------
- Create the passes, and them fill them in by reading from the file stream.
-----------------------------------------------------------------------------------------------*/
-bool GrTableManager::CreateAndReadPasses(GrIStream & grstrm,
- int fxdSilfVersion, int fxdRuleVersion,
- int cpassFont, long lSubTableStart, int * rgnPassOffsets,
- int ipassSub1Font, int ipassPos1Font, int ipassJust1Font, byte ipassPostBidiFont)
-{
- Assert(ipassSub1Font <= ipassJust1Font);
- Assert(ipassJust1Font <= ipassPos1Font);
- Assert(ipassPos1Font <= cpassFont);
- if (ipassSub1Font > ipassJust1Font || ipassJust1Font > ipassPos1Font
- || ipassPos1Font > cpassFont)
- {
- return false; // bad table
- }
-
- // Adjusted indices based on the fact that we have a glyph generation pass that is
- // pass 0, and possibly a bidi pass:
- m_cpass = cpassFont + 1;
- int ipassLB1, ipassSub1, ipassBidi, ipassPos1, ipassJust1;
- ipassLB1 = 1;
- ipassSub1 = ipassSub1Font + 1;
- if (ipassPostBidiFont == 0xFF)
- {
- // No bidi pass.
- m_fBidi = false;
- // Add 1 below to account for the glyph-generation pass.
- ipassPos1 = ipassPos1Font + 1;
- ipassJust1 = ipassJust1Font + 1;
- ipassBidi = ipassJust1;
- }
- else
- {
- m_fBidi = true;
- m_cpass++;
- Assert(ipassPostBidiFont == ipassJust1Font);
- ipassJust1 = ipassJust1Font + 2;
- ipassPos1 = ipassPos1Font + 2;
- ipassBidi = ipassJust1 - 1;
- }
-
- // Always make at least one positioning pass, even if there are no rules.
- if (ipassPos1 == m_cpass)
- {
- m_cpass++;
- }
-
- m_prgppass = new GrPass*[m_cpass + 1];
- m_prgppass[0] = new GrGlyphGenPass(0);
-
- int ipass = 1;
- int ipassFont = 0;
- m_cpassLB = 0;
- m_ipassJust1 = 1;
- m_ipassPos1 = 1;
- for ( ; ipass < m_cpass; ipass++, ipassFont++)
- {
- if (ipass < ipassSub1)
- {
- m_prgppass[ipass] = new GrLineBreakPass(ipass);
- m_prgppass[ipass]->ReadFromFont(grstrm, fxdSilfVersion, fxdRuleVersion,
- lSubTableStart + rgnPassOffsets[ipassFont]);
- m_cpassLB++;
- m_ipassJust1++;
- m_ipassPos1++;
- }
- else if (ipassSub1 <= ipass && ipass < ipassBidi)
- {
- m_prgppass[ipass] = new GrSubPass(ipass);
- m_prgppass[ipass]->ReadFromFont(grstrm, fxdSilfVersion, fxdRuleVersion,
- lSubTableStart + rgnPassOffsets[ipassFont]);
- m_ipassJust1++;
- m_ipassPos1++;
- }
- else if (ipassBidi == ipass && ipass < ipassJust1)
- {
- m_prgppass[ipass] = new GrBidiPass(ipass);
- m_prgppass[ipass]->SetTopDirLevel(TopDirectionLevel());
- ipassFont--; // no corresponding pass in font
- m_ipassJust1++;
- m_ipassPos1++;
- }
- else if (ipassJust1 <= ipass && ipass < ipassPos1)
- {
- // A justification pass is, in essence, a substitution pass.
- m_prgppass[ipass] = new GrSubPass(ipass);
- m_prgppass[ipass]->ReadFromFont(grstrm, fxdSilfVersion, fxdRuleVersion,
- lSubTableStart + rgnPassOffsets[ipassFont]);
- m_ipassPos1++;
- }
- else if (ipassPos1 <= ipass)
- {
- m_prgppass[ipass] = new GrPosPass(ipass);
- if (ipassFont < cpassFont)
- {
- m_prgppass[ipass]->ReadFromFont(grstrm, fxdSilfVersion, fxdRuleVersion,
- lSubTableStart + rgnPassOffsets[ipassFont]);
- }
- else
- {
- // No positioning pass in font: create a bogus one.
- m_prgppass[ipass]->InitializeWithNoRules();
- }
- }
- else
- {
- Assert(false);
- return false; // bad table
- }
- }
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Create passes corresponding to an invalid font.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::CreateEmpty()
-{
- m_cpass = 2;
-
- m_prgppass = new GrPass*[2];
- m_prgppass[0] = new GrGlyphGenPass(0);
-
- m_prgppass[1] = new GrPosPass(1);
- m_prgppass[1]->InitializeWithNoRules();
-
- m_ipassPos1 = 1;
- m_cpassLB = 0;
- m_fBidi = false;
-
- m_engst.CreateEmpty();
-}
-
-void EngineState::CreateEmpty()
-{
- m_fStartLineContext = false;
- m_fEndLineContext = false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Create the slot streams corresponding to the passes.
-----------------------------------------------------------------------------------------------*/
-void EngineState::CreateSlotStreams()
-{
- if (m_prgpsstrm)
- return;
-
- m_prgpsstrm = new GrSlotStream * [m_cpass];
- for (int ipass = 0; ipass < m_cpass; ++ipass)
- {
- m_prgpsstrm[ipass] = new GrSlotStream(ipass);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Store information about the pass-states in the pass objects.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::StorePassStates(PassState * rgzpst)
-{
- for (int ipass = 0; ipass < m_cpass; ipass++)
- Pass(ipass)->SetPassState(rgzpst + ipass);
-}
-
-/*----------------------------------------------------------------------------------------------
- Demand-driven loop: with goal of filling up final slot stream, loop backward and forward
- filling up slot streams until final stream has reached physical capacity.
-
- @param pgjus - justification agent; NULL if justification is of no interest
- @param jmodi - (internal) justification mode
- @param fStartLine, fEndLine
- @param ichSegLim - known end of segment; -1 when using backtracking
- @param dxWidthRequested - available width; when justifying, exact width desired
- @param dxUnjustifiedWidth - when justifying, what the width would be normally
- @param fNeedFinalBreak - true if the end of the segment needs to be a valid break point
- @param fMoreText - true if char stream doesn't go up to text-stream lim
- @param ichFontLim - end of the range that could be rendered by this font
- @param fInfiniteWidth - used for "measured" segments
- @param fWidthIsCharCount - kludge for test procedures: the width is a character count,
- not a pixel count
- @param lbPref - try for longest segment ending with this breakweight
- - when justifying, lb to assume
- @param lbMax - max (last resort) breakweight if no preferred break possible
- @param ichwCallerBtLim - caller's backtrack lim; -1 if caller is not backtracking
- @param twsh - how to handle trailing white-space
- @param fParaRtl - overall paragraph direction
- @param nDirDepth - direction depth of this segment
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::Run(Segment * psegNew, Font * pfont,
- GrCharStream * pchstrm, IGrJustifier * pgjus, int jmodi,
- LayoutEnvironment & layout,
- int ichSegLim,
- float dxWidthRequested, float dxUnjustifiedWidth,
- bool fNeedFinalBreak, bool fMoreText, int ichFontLim,
- bool fInfiniteWidth, bool fWidthIsCharCount,
- int ichwCallerBtLim,
- int nDirDepth, SegEnd estJ)
-{
- bool fStartLine = layout.startOfLine();
- bool fEndLine = layout.endOfLine();
- LineBrk lbPref = layout.bestBreak();
- LineBrk lbMax = layout.worstBreak();
- TrWsHandling twsh = layout.trailingWs();
- bool fParaRtl = layout.rightToLeft();
- Segment * psegPrev = layout.prevSegment();
- Segment * psegInit = layout.segmentForInit();
- std::ostream * pstrmLog = layout.loggingStream();
-
- m_engst.Initialize(Engine(), this); // do this after the tables have been fully read
- m_engst.m_jmodi = jmodi;
- m_engst.m_ipassJustCalled = -1;
- m_engst.m_twsh = twsh;
- m_engst.m_fParaRtl = fParaRtl;
- m_engst.m_dxsShrinkPossible = GrSlotState::kNotYetSet;
- m_fLogging = (pstrmLog != NULL);
-
- int cbPrev;
- byte * pbPrevSegDat = NULL;
- if (psegPrev)
- cbPrev = psegPrev->NextSegInitBuffer(&pbPrevSegDat);
- else if (psegInit)
- cbPrev = psegInit->ThisSegInitBuffer(&pbPrevSegDat);
- else
- cbPrev = 0;
-
- if (pchstrm->IsEmpty())
- {
- m_engst.m_lbPrevEnd = klbNoBreak;
- InitSegmentAsEmpty(psegNew, pfont, pchstrm, fStartLine, fEndLine);
- psegNew->SetWidths(0, 0);
- psegNew->SetUpOutputArrays(pfont, this, NULL, 0, 0, 0, twsh,
- fParaRtl, nDirDepth, true);
- psegNew->SetLayout(layout);
- return;
- }
-
- int islotUnderBreak = -1; // position of inserted or final break point in underlying
- // data; none so far (if an actual LB has been inserted,
- // this is the index of that slot; otherwise it is the
- // index of the last valid slot)
- int islotSurfaceBreak = -1; // position of line break in surface stream; none so far
- LineBrk lbBestToTry = lbPref;
- LineBrk lbFound = klbNoBreak;
-
- float dxMaxWidth = dxWidthRequested;
-
- if (m_engst.m_jmodi == kjmodiJustify)
- {
- Assert(fInfiniteWidth);
- lbBestToTry = klbClipBreak;
- lbFound = lbPref;
- }
-
- float dxWidth;
-
- std::vector<int> vnslotNeeded;
- vnslotNeeded.resize(m_cpass);
-
- m_engst.InitializeStreams(this, pchstrm, cbPrev, pbPrevSegDat, fNeedFinalBreak, &islotUnderBreak);
-
- int ipassCurr;
- int nNeedInput; // kNextPass: go on to the next pass
- // kBacktrack: need to insert a line break
- // > 0: need more input from previous pass
-
- int cchwPostXlbContext = m_pgreng->PostXlbContext();
- if (ichSegLim > -1)
- {
- // When we know exactly where the end of the segment will be, get as much as
- // we need from the character stream, and then fill up the remaining streams.
- // (3 below is an arbitrary number; we just want to get slightly more than
- // we really need.)
- vnslotNeeded[0] = ichSegLim - pchstrm->Min() + cchwPostXlbContext + 3;
- for (int ipass = 1; ipass < m_cpass; ipass++)
- vnslotNeeded[ipass] = 10000;
- // Start at pass 0.
- ipassCurr = 0;
- }
- else
- {
- // When we're doing line-breaking to find the end of the segment, use the
- // demand-driven approach that tries to fill up the available space.
- vnslotNeeded[m_cpass - 1] = 1;
-
- // Start at the last pass. (It might be more efficient to start at the first pass and
- // generate a small arbitrary number of glyphs.)
- ipassCurr = m_cpass - 1;
- }
-
- while (ipassCurr < m_cpass)
- {
- if (ipassCurr == 0)
- {
- int nNeedNow = vnslotNeeded[0];
- // Zeroth pass: generate glyph IDs from the underlying input.
- nNeedInput = Pass(0)->ExtendGlyphIDOutput(this,
- pchstrm, OutputStream(0), ichSegLim, cchwPostXlbContext, lbPref,
- nNeedNow, fNeedFinalBreak, m_engst.m_twsh, &islotUnderBreak);
- Assert(nNeedInput == kNextPass || nNeedInput == kBacktrack);
- vnslotNeeded[0] -= nNeedNow;
- }
- else if (ipassCurr < m_cpass - 1)
- {
- // Middle pass.
- int cslotNeedNow = vnslotNeeded[ipassCurr];
- cslotNeedNow = max(1, cslotNeedNow);
- int cslotGot;
- Pass(ipassCurr)->ExtendOutput(this,
- InputStream(ipassCurr), OutputStream(ipassCurr), cslotNeedNow, twsh,
- &nNeedInput, &cslotGot, &islotUnderBreak);
- vnslotNeeded[ipassCurr] -= cslotGot;
- //if (nNeedInput != kNextPass && nNeedInput != kBacktrack)
- // nNeedInput = max(nNeedInput, cslotNeedNow - cslotGot);
- }
- else // (ipassCurr == m_cpass - 1)
- {
- // Final pass: position and test allotted space.
- float dxWidthWShrink = dxMaxWidth;
- if (m_engst.m_dxsShrinkPossible != GrSlotState::kNotYetSet)
- dxWidthWShrink += (int)m_engst.m_dxsShrinkPossible;
- nNeedInput = Pass(ipassCurr)->ExtendFinalOutput(this,
- InputStream(ipassCurr), OutputStream(ipassCurr),
- dxWidthWShrink, fWidthIsCharCount, fInfiniteWidth,
- (islotUnderBreak > -1), (fNeedFinalBreak && lbFound == klbNoBreak),
- lbMax, twsh,
- &islotSurfaceBreak, &dxWidth);
- }
-
- if (m_engst.m_jmodi == kjmodiJustify)
- {
- if (ipassCurr < m_ipassJust1 && !OutputStream(ipassCurr)->FullyWritten())
- {
- // When justifying, fill up all the streams up to the point where we need
- // to interact with the justification routine.
- // I think this code is obsolete.
- int nStillNeed = 1000;
- if ((ipassCurr == 1 && nNeedInput != kNextPass) || ipassCurr == 0)
- nStillNeed = ichSegLim - (pchstrm->Pos() - pchstrm->Min())
- + cchwPostXlbContext + 3;
- if (nStillNeed > 0)
- {
- if (nNeedInput == kNextPass)
- ipassCurr++; // repeat this pass
- nNeedInput = nStillNeed;
- }
- }
- else if (nNeedInput == kNextPass && ipassCurr + 1 == m_ipassJust1)
- {
- CallJustifier(pgjus, ipassCurr, dxUnjustifiedWidth, dxWidthRequested, fEndLine);
- }
- }
- DetermineShrink(pgjus, ipassCurr);
-
- if (nNeedInput == kBacktrack)
- {
- // Final output has overflowed its space--find (or adjust) the break point.
-
- bool fFoundBreak = Backtrack(&islotUnderBreak,
- &lbBestToTry, lbMax, twsh, fMoreText, ichwCallerBtLim, &lbFound);
- if (!fFoundBreak)
- {
- // Nothing will fit. Initialize the new segment just enough so that
- // we can delete it.
- InitSegmentToDelete(psegNew, pfont, pchstrm);
- return;
- }
- }
- else if (nNeedInput == kNextPass)
- {
- // This pass is sufficiently full--return to following pass.
- ipassCurr++;
- }
- else
- {
- // Get more input from previous pass.
- ipassCurr--;
- vnslotNeeded[ipassCurr] = nNeedInput;
- }
- }
-
- // At this point we have fully transduced all the text for this segment.
-
- // Figure out why we broke the segment and what the caller is supposed to do about it.
- SegEnd est;
- if (m_engst.m_jmodi == kjmodiJustify)
- {
- // Don't change what was passed in.
- est = estJ;
- }
- else if (m_engst.m_fRemovedWhtsp) // (islotUnderBreak > -1 && twsh == ktwshNoWs)
- {
- Assert(!m_engst.m_fInsertedLB);
- est = kestMoreWhtsp;
- }
-
- else if (m_engst.m_fHitHardBreak)
- {
- est = kestHardBreak;
- }
-
- else if (!m_engst.m_fExceededSpace && !fMoreText)
- // Rendered to the end of the original requested range.
- est = kestNoMore;
-
-// else if (!m_fExceededSpace && !fNextIsSameWs && fMoreText)
-// // Writing system break; may be more room on the line. But see tweak below.
-// *pest = kestWsBreak;
-
- else if (m_engst.m_fExceededSpace)
- {
- // Exceeded available space, found a legal break.
- if (twsh == ktwshNoWs && m_engst.m_fRemovedWhtsp)
- est = kestMoreWhtsp;
- else
- est = kestMoreLines;
- }
-
- else if (twsh == ktwshOnlyWs)
- {
- est = kestOkayBreak; // but see tweak below
- }
-
- else
- {
- // Broke because of something like a font change. Determine whether this is a legal
- // break or not.
- // TODO SharonC: handle the situation where it is legal to break BEFORE the first
- // character of the following segment.
- Assert(fMoreText);
- //Assert(fNextIsSameWs);
- if (ichwCallerBtLim > -1)
- {
- Assert(m_engst.m_fInsertedLB);
- }
- else if (ichSegLim > -1)
- {
- // We stopped where caller said to.
- Assert(fInfiniteWidth);
- }
- else
- {
- Assert(!m_engst.m_fInsertedLB);
- Assert(islotUnderBreak == -1 || m_engst.m_fFinalLB);
- }
- int islotTmp = OutputStream(m_cpass - 1)->WritePos();
- GrSlotState * pslotTmp;
- if (m_engst.m_fFinalLB || m_engst.m_fInsertedLB)
- pslotTmp = OutputStream(m_cpass-1)->SlotAt(islotTmp - 2);
- else
- pslotTmp = OutputStream(m_cpass-1)->SlotAt(islotTmp - 1);
-
- if (abs(pslotTmp->BreakWeight()) <= lbPref)
- est = kestOkayBreak;
-
- else if (abs(pslotTmp->BreakWeight()) > lbMax)
- est = kestBadBreak;
-
- else if (OutputStream(m_cpassLB)->HasEarlierBetterBreak(islotUnderBreak, lbFound,
- this->LBGlyphID()))
- {
- est = kestBadBreak;
- }
- else
- est = kestOkayBreak;
-
- // We no longer have the ability to know whether or not the next segment will use
- // the same writing system.
- //if (est == kestBadBreak && m_engst.m_fExceededSpace && !fNextIsSameWs && fMoreText)
- // est = kestWsBreak;
- }
-
- // Make a segment out of it and return it.
- int dichSegLen;
- InitNewSegment(psegNew, pfont, pchstrm, pgjus,
- islotUnderBreak, islotSurfaceBreak, fStartLine, fEndLine, ichFontLim, lbFound, est,
- &dichSegLen);
- if (psegNew->segmentTermination() == kestNothingFit)
- {
- return;
- }
- else if (psegNew->segmentTermination() == kestHardBreak &&
- psegNew->startCharacter() == psegNew->stopCharacter())
- {
- // Empty segment caused by a hard-break.
- m_engst.m_lbPrevEnd = klbNoBreak;
- psegNew->SetWidths(0, 0);
- psegNew->SetUpOutputArrays(pfont, this, NULL, 0, 0, 0, twsh,
- fParaRtl, nDirDepth, true);
- psegNew->SetLayout(layout);
- return;
- }
-
- psegNew->RecordInitializationForThisSeg(cbPrev, pbPrevSegDat);
-
- if ((est == kestNoMore || est == kestWsBreak) && twsh == ktwshOnlyWs &&
- dichSegLen < pchstrm->Lim() - pchstrm->Min())
- {
- // If we are asking for white-space only, and we didn't use up everything in the font
- // range, we could possibly have gotten an initial white-space only segment
- // (as opposed to a writing system break).
- est = kestOkayBreak;
- psegNew->FixTermination(est);
- }
-
- SetFinalPositions(psegNew, fWidthIsCharCount);
-
- // Do this before fixing up the associations below, so we can see the raw ones produced by the
- // rules themselves.
- //if (m_pgreng->LoggingTransduction())
- // WriteTransductionLog(pchstrm, *ppsegRet,
- // cbPrev, pbPrevSegDat, pbNextSegDat, pcbNextSegDat);
- WriteTransductionLog(pstrmLog, pchstrm, psegNew, cbPrev, pbPrevSegDat);
-
- RecordAssocsAndOutput(pfont, psegNew, twsh, fParaRtl, nDirDepth);
-
- // Do this after fixing up the associations.
- //if (m_pgreng->LoggingTransduction())
- // WriteAssociationLog(pchstrm, *ppsegRet);
- WriteAssociationLog(pstrmLog, pchstrm, psegNew);
-
- psegNew->SetLayout(layout);
-}
-
-/*----------------------------------------------------------------------------------------------
- Create a new segment to return.
-
- @param pchstrm - input stream
- @param pgjus - justification agent, in case this segment needs to be
- stretched or shrunk
- @param islotLBStreamBreak - position of inserted line break slot (which should be equal
- to the position in the glyph generation stream);
- -1 if no line-break was inserted (we rendered to the
- end of the range)
- @param islotSurfaceBreak - position of line break slot in final (surface) stream
- @param fStartLine - does this segment start a line?
- @param fEndLine - does this segment end a line?
- @param ichFontLim - end of range that could be rendered by this font
- @param lbEndFound - line break found; possibly adjusted here
- @param est - why did the segment terminate
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::InitNewSegment(Segment * psegNew,
- Font * pfont, GrCharStream * pchstrm, IGrJustifier * pgjus,
- int islotLBStreamBreak, int islotSurfaceBreak, bool fStartLine, bool fEndLine, int ichFontLim,
- LineBrk lbEndFound, SegEnd est, int * pdichSegLen)
-{
- LineBrk lbStart = m_engst.m_lbPrevEnd;
- LineBrk lbEnd = lbEndFound;
- if (est == kestBadBreak)
- lbEnd = klbLetterBreak;
-
- int ichwMin = pchstrm->Min();
- int ichwLim;
-
-// int cslotPreSegStream0 = m_cslotPreSeg;
-// if (m_fInitialLB && m_cpassLB > 0)
-// {
-// // Initial LB is included in m_cslotPreSeg, but is not in stream 0.
-// // --Not really needed, because both islotLBStreamBreak and m_cslotPreSeg take
-// // the initial LB into account if it is there.
-// cslotPreSegStream0--;
-// }
-
- // No longer have to subtract this, because the chunk map takes it into
- // consideration.
- //int cslotPreInitialLB = m_cslotPreSeg - (m_fInitialLB ? 1 : 0);
-
- //int ichwOldTmp;
-
- if (m_engst.m_fInsertedLB)
- {
- Assert(islotLBStreamBreak > -1);
- int ichwSegLim = m_engst.LbSlotToSegLim(islotLBStreamBreak, pchstrm, m_cpassLB);
- ichwLim = ichwSegLim + pchstrm->Min(); // - cslotPreInitialLB;
-
- // Old result, for debugging:
- //ichwOldTmp = islotLBStreamBreak + pchstrm->Min() - m_cslotPreSeg;
- }
- else if (m_engst.m_fFinalLB || islotLBStreamBreak == -1)
- ichwLim = pchstrm->Lim();
- else
- {
- int ichwSegLim = m_engst.LbSlotToSegLim(islotLBStreamBreak, pchstrm, m_cpassLB);
- ichwLim = ichwSegLim + pchstrm->Min(); // - cslotPreInitialLB;
-
- // Old result, for debugging:
- // islotLBStreamBreak is the last slot in the segment, not the LB glyph; hence +1.
- //ichwOldTmp = islotLBStreamBreak + pchstrm->Min() - m_cslotPreSeg + 1;
- }
-
- *pdichSegLen = ichwLim - ichwMin;
-
- if (ichwMin >= ichwLim)
- {
- if (est == kestHardBreak)
- {
- // Empty segment cause by a hard-break.
- InitSegmentAsEmpty(psegNew, pfont, pchstrm, fStartLine, fEndLine);
- psegNew->FixTermination(est);
- }
- else
- {
- // Invalid empty segment.
- Assert(ichwMin == ichwLim);
- InitSegmentToDelete(psegNew, pfont, pchstrm);
- }
- return;
- }
-
- Assert(psegNew);
-
- psegNew->Initialize(pchstrm->TextSrc(),
- ichwMin, ichwLim,
- lbStart, lbEnd, est, fStartLine, fEndLine, m_pgreng->RightToLeft());
-
- psegNew->SetEngine(m_pgreng);
- psegNew->SetFont(pfont);
- psegNew->SetJustifier(pgjus);
- psegNew->SetFaceName(m_pgreng->FaceName(), m_pgreng->BaseFaceName());
-
- bool fNextSegNeedsContext =
- !(est == kestNoMore || est == kestWsBreak
- || ichwLim >= pchstrm->Lim() || ichwLim >= ichFontLim);
-
- InitializeForNextSeg(psegNew, islotLBStreamBreak, islotSurfaceBreak, lbEnd,
- fNextSegNeedsContext, pchstrm);
-
- psegNew->SetPreContext(0 - m_pgreng->PreXlbContext());
-}
-
-/*----------------------------------------------------------------------------------------------
- The newly created segment is invalid, for instance, because we were backtracking and
- couldn't find a valid break point. Initialize it just enough so that it can be
- deleted by the client.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::InitSegmentToDelete(Segment * psegNew, Font * pfont,
- GrCharStream * pchstrm)
-{
- psegNew->Initialize(pchstrm->TextSrc(), 0, 0,
- klbClipBreak, klbClipBreak, kestNothingFit, false, false,
- m_pgreng->RightToLeft());
-
- psegNew->SetEngine(m_pgreng);
- psegNew->SetFont(pfont);
- psegNew->SetJustifier(NULL); // can't justify an empty segment
- psegNew->SetFaceName(m_pgreng->FaceName(), m_pgreng->BaseFaceName());
- psegNew->SetPreContext(0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Map from the given slot (which is generally the final LB slot) to the end of the segment,
- taking into account the fact that a single slot may represent two 16-bit surrogates.
-
- There are several approaches that seem reasonable but do NOT work. (I tried them!)
- You can't calculate it directly from the length of the streams, because that doesn't take
- into account the possible presence of surrogate pairs in the character stream. You can't
- use the chunk map at the point of the LB, because if a rule spanned a LB the chunk won't
- have ended there and so there won't be any valid information.
-
- What seems to work is to figure out the slot(s) in the zeroth stream using the associations
- and then use the segment offset for this slot. This should be reliable because there is
- always a one-to-one correspondence between glyphs in the line-break passes (ie, no
- insertions or deletions), so the associations should be dependable and straightforward.
-----------------------------------------------------------------------------------------------*/
-int EngineState::LbSlotToSegLim(int islotLB, GrCharStream * pchstrm, int cpassLB)
-{
- Assert(islotLB < OutputStream(cpassLB)->WritePos());
-
- // Figure out the corresponding characters in the zeroth stream. These should be straight-
- // forward to figure out because no substitutions are permitted in the LB passes.
- // I do the slots before and after the LB, if possible, as a sanity check.
- GrSlotStream * psstrmLB = OutputStream(cpassLB);
- GrSlotState * pslotPreLB = (m_fFinalLB || m_fInsertedLB) ?
- psstrmLB->SlotAt(islotLB - 1) :
- psstrmLB->SlotAt(islotLB);
- GrSlotState * pslotPostLB = (psstrmLB->WritePos() > islotLB + 1) ?
- psstrmLB->SlotAt(islotLB + 1) :
- NULL;
-
- int ichwPreLB = pslotPreLB->AfterAssoc();
-
- int ichwSegLim;
- if (pslotPostLB)
- {
- ichwSegLim = pslotPostLB->BeforeAssoc();
- Assert(ichwPreLB + 1 == ichwSegLim
- || ichwPreLB + 2 == ichwSegLim); // in case of a surrogate
- }
- else
- {
- ichwSegLim = ichwPreLB + 1;
- while (!pchstrm->AtUnicodeCharBoundary(ichwSegLim))
- ichwSegLim++;
- Assert(pchstrm->AtUnicodeCharBoundary(ichwSegLim));
- }
-
- // Old buggy routine that doesn't handle the case where a rule (and hence the chunk map) did
- // not end at the LB character:
- // Map backwards through the LB pass streams, if any.
- //int islotAdjusted = islotLB + 1; // after the LB
- //for (int ipass = m_cpassLB; ipass > 0; ipass--)
- //{
- // islotAdjusted = ChunkInPrev(ipass, islotAdjusted, pchstrm);
- //}
- //
- //int ichwSegLim = ChunkInPrev(0, islotAdjusted, pchstrm);
-
- // Mapping from 32-bit to 16-bit should only increase the index. Except that there
- // may be a LB in the slot stream that is not in the character stream, so it could be
- // one less.
- Assert(ichwSegLim + m_cslotPreSeg >= islotLB - 1);
-
- return ichwSegLim;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the chunk mapping into the previous stream, taking into account the fact that it
- is not recorded for the write-position.
-----------------------------------------------------------------------------------------------*/
-int GrTableManager::ChunkInPrev(int ipass, int islot, GrCharStream * pchstrm)
-{
- GrSlotStream * psstrmOut = OutputStream(ipass);
- GrSlotStream * psstrmIn = (ipass == 0) ? NULL : InputStream(ipass);
-
- int islotTmp = islot;
- int islotAdjusted;
- do {
- if (islot >= psstrmOut->WritePos())
- {
- Assert(islot == psstrmOut->WritePos());
- islotAdjusted = (ipass == 0) ? pchstrm->SegOffset() : psstrmIn->ReadPos();
- Assert(islotAdjusted > -1);
- }
- else
- islotAdjusted = psstrmOut->ChunkInPrev(islotTmp);
- islotTmp--;
- } while (islotAdjusted == -1);
-
- return islotAdjusted;
-}
-
-/*----------------------------------------------------------------------------------------------
- Create a new segment corresponding to an empty string.
-
- @param pchstrm - input stream
- @param fStartLine - does this segment start a line?
- @param fEndLine - does this segment end a line?
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::InitSegmentAsEmpty(Segment * psegNew, Font * pfont,
- GrCharStream * pchstrm, bool fStartLine, bool fEndLine)
-{
- LineBrk lbStart = m_engst.m_lbPrevEnd;
- LineBrk lbEnd = klbNoBreak;
-
- int ichwMin = 0;
- int ichwLim = 0;
-
- Assert(psegNew);
-
- psegNew->Initialize(pchstrm->TextSrc(), ichwMin, ichwLim,
- lbStart, lbEnd, kestNoMore, fStartLine, fEndLine, m_pgreng->RightToLeft());
-
- psegNew->SetEngine(m_pgreng);
- psegNew->SetFont(pfont);
- psegNew->SetJustifier(NULL); // can't justify an empty segment
- psegNew->SetFaceName(m_pgreng->FaceName(), m_pgreng->BaseFaceName());
-
- byte pbNextSegDat[256];
- int cbNextSegDat;
- int * pcbNextSegDat = &cbNextSegDat;
-
- // Initialization for (theoretical) next segment.
- byte * pb = pbNextSegDat;
- *pb++ = byte(lbEnd);
- *pb++ = kdircNeutral;
- *pb++ = kdircNeutral;
- *pb++ = 0;
- for (int ipass = 0; ipass < m_cpass; ipass++)
- *pb++ = 0;
- *pcbNextSegDat = 0;
- psegNew->RecordInitializationForNextSeg(*pcbNextSegDat, pbNextSegDat);
-
- psegNew->SetPreContext(0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Find a line-break and unwind the passes. Return true if we were able to
- backtrack successfully (which may have meant using a less-than-optimal line-break).
- Return false if no line-break could be found (because maxBreakWeight did not allow
- letter breaks or clipping--generally because there was already something on this
- line).
-
- @param pislotPrevBreak - position of previously-created break, -1 if none;
- this is the index of the line-break glyph if any,
- or the index of the last slot in the segment;
- adjusted to contain the position of the newly
- found break
- @param plbMin - minimum (best) line break weight to try
- @param lbMax - maximum (worst possible) line break weight
- @param twsh - how to handle trailing white-space
- @param fMoreText - true if char stream doesn't go up to original lim
- @param ichwCallerBtLim - caller's backtrack lim; -1 if caller is not backtracking
- @param plbFound - kind of line-break created
-----------------------------------------------------------------------------------------------*/
-bool GrTableManager::Backtrack(int * pislotPrevBreak,
- LineBrk * plbMin, LineBrk lbMax, TrWsHandling twsh, bool fMoreText,
- int ichwCallerBtLim,
- LineBrk * plbFound)
-{
- int islotStartTry;
- //if (*pislotPrevBreak == ichwCallerBtLim - 1)
- //{
- // islotStartTry = *pislotPrevBreak;
- //}
- //else
- if (*pislotPrevBreak == -1)
- {
- // If no line break has been found so far, figure out where to start trying based
- // on where the final stream choked.
- GrSlotStream * psstrmFinal = OutputStream(m_cpass-1);
- if ((islotStartTry
- = m_engst.TraceStreamZeroPos(psstrmFinal->WritePos()-1, TopDirectionLevel()))
- == -1)
- {
- // Just start looking at the end of what's been generated.
- islotStartTry = OutputStream(m_cpassLB)->ReadPos() - 1;
- }
- }
- else
- {
- // Start just before previous line break.
- if (m_engst.m_fInsertedLB || m_engst.m_fFinalLB)
- islotStartTry = *pislotPrevBreak - 2; // skip inserted LB and previous slot
- else
- islotStartTry = *pislotPrevBreak - 1; // skip previous slot
- }
- if (ichwCallerBtLim > -1 && islotStartTry > ichwCallerBtLim - 1)
- {
- islotStartTry = ichwCallerBtLim - 1;
- }
-
- // Determine if we want to insert an actual line-break "glyph". Don't do that if
- // we are omitting trailing white space or we are at a writing-system or font break.
- bool fInsertLB;
- if (twsh == ktwshNoWs)
- // omitting trailing white-space
- fInsertLB = false;
- else if (twsh == ktwshOnlyWs)
- // trailing white-space segment
- fInsertLB = true;
- else if (ichwCallerBtLim > -1)
- // backtracking
- fInsertLB = true;
- else if (*pislotPrevBreak > -1)
- // no longer at the edge of the writing system or font
- fInsertLB = true;
- else if (!fMoreText)
- // at final edge of total range to render
- fInsertLB = true;
- else
- fInsertLB = false;
-
- // Try to insert a line-break in the output of the (final) line-break pass (if any, or
- // the output of the glyph-generation pass). First try the preferred (strictest)
- // break weight and gradually relax.
- LineBrk lb = *plbMin;
- Assert(*plbMin <= lbMax);
- GrSlotStream * psstrmLB = OutputStream(m_cpassLB);
- islotStartTry = min(islotStartTry, psstrmLB->WritePos() - 1);
- int islotNewBreak = -1;
- while (lb <= lbMax)
- {
- LineBrk lbNextToTry;
- if (fInsertLB)
- {
- islotNewBreak = psstrmLB->InsertLineBreak(this,
- *pislotPrevBreak, m_engst.m_fInsertedLB, islotStartTry,
- lb, twsh, m_engst.m_cslotPreSeg, &lbNextToTry);
- }
- else
- {
- islotNewBreak = psstrmLB->MakeSegmentBreak(this,
- *pislotPrevBreak, m_engst.m_fInsertedLB, islotStartTry,
- lb, twsh, m_engst.m_cslotPreSeg, &lbNextToTry);
- }
- if (islotNewBreak > -1)
- break;
- if (lb >= lbMax)
- break;
- lb = IncLineBreak(lb); // relax the break weight
- }
-
- if (islotNewBreak == -1)
- {
- return false;
- }
-
- // We've successfully inserted a line break.
-
- if (fInsertLB)
- m_engst.m_fInsertedLB = true;
-
- m_engst.m_fFinalLB = false;
-
- UnwindAndReinit(islotNewBreak);
-
- *pislotPrevBreak = islotNewBreak;
- *plbMin = lb; // return the best break we were able to find, so we don't keep trying
- // for a better one when we know now that we can't find it
- *plbFound = lb;
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- This method is called after backtracking or removing trailing white-space.
- Unwind the following slot streams as necessary depending on where the change was made.
-
- @param islotNewBreak - in output of (final) line-break pass
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::UnwindAndReinit(int islotNewBreak)
-{
- OutputStream(m_cpassLB)->ZapCalculatedDirLevels(islotNewBreak);
-
- // Mark the passes before the line-break pass as fully written, so that if there
- // isn't a line-break glyph to intercept, we don't keep trying to get more input
- // from them.
- int ipass;
- for (ipass = 1; ipass < m_cpassLB + 1; ++ipass)
- {
- InputStream(ipass)->MarkFullyWritten();
- }
-
- // Unwind the passes to the changed positions.
- // Note that we don't need to unwind pass 0, since all it does is generate glyph IDs.
- // Also we don't need to unwind the line-break passes, because conceptually they happen
- // before the break is inserted.
-
- int islotChgPos = islotNewBreak;
- bool fFirst = true;
- for (ipass = m_cpassLB + 1 ; ipass < m_cpass ; ++ipass)
- {
- islotChgPos =
- Pass(ipass)->Unwind(this, islotChgPos, InputStream(ipass), OutputStream(ipass),
- fFirst);
- fFirst = false;
- }
- // For anything that may have been skipped in the final output:
- OutputStream(m_cpass - 1)->SetReadPos(0);
- OutputStream(m_cpass - 1)->SetReadPosMax(0);
- Pass(m_cpass - 1)->UndoResyncSkip();
- OutputStream(m_cpass - 1)->ClearSlotsSkippedToResync();
-
- m_engst.InitPosCache();
-
- m_engst.m_dxsShrinkPossible = GrSlotState::kNotYetSet; // recalculate it
-}
-
-/*----------------------------------------------------------------------------------------------
- Store information in the newly created segment that will allow us to reinitalize
- the streams in order to process the next segment, appropriately handling any
- cross-line-boundary contextuals.
-
- The information required is the number of glyphs in the first stream that must
- be reprocessed, and a skip-offset between each stream indicating the beginning
- of chunk boundaries.
-
- In most cases, where there are no cross-line-boundary contextuals, all these numbers
- will be zero.
-
- The buffer generated is of the following format (all are 1 byte, unsigned):
- end breakweight
- previous strong directionality code
- previous terminator dir code
- restart backup
- skip offsets for each pass
- This format must match what is generated by InitializeStreams.
-
- @param pseg - newly created segment
- @param islotUnderBreak - position of line break inserted in underlying stream (output
- of glyph-generation pass--stream 0); -1 if we rendered to
- the end of the range
- @param islotSurfaceBreak - position of line break in surface stream;
- -1 if we rendered to the end of the range
- @param lbEnd - kind of line-break at the end of this segment
- @param fNextSegNeedsContext - true if we need to remember the context for the next seg
- @param pchstrm - character stream input for this segment
- @param cbNextMax - amount of space available in the buffer
- @param pbNextSegDat - buffer for initializing next segment
- @param pcbNextSegDat - amount of space used in buffer
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::InitializeForNextSeg(Segment * pseg,
- int islotUnderBreak, int islotSurfaceBreak, LineBrk lbEnd,
- bool fNextSegNeedsContext, GrCharStream * pchstrm)
-{
- byte pbNextSegDat[256];
- int cbNextSegDat;
- int * pcbNextSegDat = &cbNextSegDat;
-
- std::vector<int> vcslotSkipOffsets;
- vcslotSkipOffsets.resize(m_cpass);
-
- byte * pb = pbNextSegDat;
-
- if (!fNextSegNeedsContext)
- {
- // No contextualization between this segment and the next, whatever kind of renderer
- // it might use.
- *pcbNextSegDat = 0;
- return;
- }
-
- gid16 chwLB = LBGlyphID();
-
- int islotUnderLim = islotUnderBreak;
- if (!m_engst.m_fInsertedLB && !m_engst.m_fFinalLB)
- // Then islotUnderBreak is the position of the last slot in the segment; increment
- // to get the lim in stream zero.
- islotUnderLim++;
-
- int islotSurfaceLim = islotSurfaceBreak;
- if (islotSurfaceLim == -1)
- islotSurfaceLim = OutputStream(m_cpass - 1)->FinalSegLim();
-
- *pb++ = byte(lbEnd);
-
- // Find previous strong and terminator directionality codes.
-
- GrSlotStream * psstrm = OutputStream(m_cpass - 1);
- DirCode dircStrong = kdircNeutral;
- DirCode dircTerm = kdircNeutral;
- int islot;
- for (islot = islotSurfaceLim; islot-- > 0; )
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- DirCode dirc = pslot->Directionality();
- if (dircTerm == kdircNeutral && dirc == kdircEuroTerm)
- dircTerm = dirc;
- if (StrongDir(dirc))
- {
- dircStrong = dirc;
- break;
- }
- }
- *pb++ = byte(dircStrong);
- *pb++ = byte(dircTerm);
-
- // Record how much of each pass to redo in the next segment.
- // The basic algorithm is described in the "WR Data Transform Engine" document.
- // But here we are doing a variation on what is described there. We are calculating
- // the backup locations for BOTH the rule start locations and the necessary pre-contexts.
- // It is the precontext values that are recorded for use by the following segment. But we
- // also calculate the positions for the rule-start locations to make sure there is enough
- // pre-context at each pass.
-
- int islotRS = islotSurfaceLim; // rule-start positions
- int islotPC = islotRS; // to handle pre-context positions
-
- // If line-breaks are irrelevant to this font, we don't need to bother.
- bool fGiveUp = !m_pgreng->LineBreakFlag();
-
- int ipass;
- for (ipass = m_cpass - 1; ipass >= 0 && !fGiveUp; --ipass)
- {
- GrSlotStream * psstrmIn = (ipass == 0) ? NULL : InputStream(ipass);
- GrSlotStream * psstrmOut = OutputStream(ipass);
- int islotBackupMin = (ipass == 0) ? 0 : psstrmOut->SegMin();
- if (ipass >= m_cpassLB && m_engst.m_fInitialLB)
- islotBackupMin++; // how far we can back up--not before the start of this segment
-
- int islotPrevRS = 0; // corresponding slot in the previous stream for rule-start position
- int islotPrevPC = 0; // same for pre-context position
-
- // Initially we have to include at least this many prior slots:
- int cslotSkipOffset = 0;
-
- if (islotRS == psstrmOut->WritePos())
- {
- islotPrevRS = (ipass == 0) ? pchstrm->Pos() : psstrmIn->ReadPos();
- }
- else
- {
- // Ignore the final line-break, because it is explicitly inserted during
- // the (final) line-break pass.
-// if (ipass == m_cpassLB && psstrm->SlotAt(islotRS)->IsFinalLineBreak(chwLB))
-// {
-// Assert(islotRS > 0);
-// islotRS--;
-// }
- // Ignore the chunk in the pass that generated the line break that corresponds
- // to the inserted line break being chunked with the previous glyph--we don't
- // want to treat that as a cross-line-boundary contextual!
- if (ipass == m_cpassLB && psstrmOut->SlotAt(islotRS)->IsFinalLineBreak(chwLB))
- {
-// Assert(psstrm->ChunkInPrev(islotRS) == -1);
- if (islotRS + 1 == psstrmOut->WritePos())
- islotPrevRS = (ipass == 0) ? pchstrm->SegOffset() : psstrmIn->ReadPos();
- else
- islotPrevRS = psstrmOut->ChunkInPrev(islotRS + 1);
- }
- else
- {
- // Back up to the beginning of a chunk.
- while (islotRS >= islotBackupMin &&
- (islotPrevRS = psstrmOut->ChunkInPrev(islotRS)) == -1)
- {
- --islotRS;
- //++cslotSkipOffset;
- }
- }
- }
- if (islotPrevRS == -1 || islotRS < islotBackupMin) // hit the start of the segment
- {
- // In order to get enough context to be sure to run the same rules again,
- // we'd have to back up into the previous segment. Too complicated, so give up.
- fGiveUp = true;
- break;
- }
-
- int cslotPreContext = Pass(ipass)->MaxRulePreContext();
-LBackupPC:
- if (islotPC == psstrmOut->WritePos())
- {
- islotPrevPC = (ipass == 0) ? pchstrm->Pos() : psstrmIn->ReadPos();
- }
- else
- {
- if (ipass == m_cpassLB && psstrmOut->SlotAt(islotPC)->IsFinalLineBreak(chwLB))
- {
- if (islotPC+1 == psstrmOut->WritePos())
- islotPrevPC = (ipass == 0) ? pchstrm->SegOffset() : psstrmIn->ReadPos();
- else
- islotPrevPC = psstrmOut->ChunkInPrev(islotPC+1);
- }
- else
- {
- // Back up to the beginning of a chunk; also make sure there are enough slots
- // to handle the required pre-context for this pass.
- while (islotPC >= islotBackupMin &&
- ((islotPrevPC = psstrmOut->ChunkInPrev(islotPC)) == -1 ||
- islotPrevRS - islotPrevPC < cslotPreContext))
- {
- --islotPC;
- ++cslotSkipOffset;
- }
- }
- }
- if (islotPC >= islotBackupMin && islotPrevRS - islotPrevPC < cslotPreContext)
- {
- --islotPC;
- ++cslotSkipOffset;
- goto LBackupPC;
- }
- if (islotPrevPC == -1 || islotPC < islotBackupMin) // hit the start of the segment
- {
- fGiveUp = true;
- break;
- }
-
- vcslotSkipOffsets[ipass] = cslotSkipOffset;
-
- islotRS = islotPrevRS;
- islotPC = islotPrevPC;
-
- if (ipass == 0)
- {
- // Convert from underlying chars to stream-zero slots.
- islotRS += m_engst.m_cslotPreSeg;
- islotPC += m_engst.m_cslotPreSeg;
- }
- }
-
- // The following should be the case unless they tried to position contextually across
- // the line break boundary, which is a very strange thing to do! - no longer true,
- // because the pre-context is now included in this count, and it normal to have
- // a pre-context in the final positioning pass.
- //Assert(vcslotSkipOffsets[m_cpass-1] == 0);
-
- // Also no adjustments are made by the glyph-generation pass, so this should always
- // be true:
- Assert(vcslotSkipOffsets[0] == 0);
-
- // The number of slots in the underlying input previous to the line-break
- // that must be reprocessed:
- int cslotPreLB = islotUnderLim - islotPC;
-
- if (fGiveUp)
- {
- // We can't reasonably provide enough context, so don't try to do it at all.
- cslotPreLB = 0;
- for (ipass = 0; ipass < m_cpass; ipass++)
- vcslotSkipOffsets[ipass] = 0;
- }
-
- Assert(cslotPreLB >= 0);
- Assert(cslotPreLB < 0xFF);
-
- *pb++ = byte(cslotPreLB);
- for (ipass = 0; ipass < m_cpass; ipass++)
- *pb++ = byte(vcslotSkipOffsets[ipass]);
-
- *pcbNextSegDat = 4 + m_cpass;
-
- pseg->RecordInitializationForNextSeg(*pcbNextSegDat, pbNextSegDat);
-}
-/*----------------------------------------------------------------------------------------------
- Make sure the final positions are set for every glyph.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::SetFinalPositions(Segment * pseg, bool fWidthIsCharCount)
-{
- float xsTotalWidth, xsVisWidth;
-
-#ifdef OLD_TEST_STUFF
- if (fWidthIsCharCount)
- xsTotalWidth = xsVisWidth = 0;
- else
-#endif // OLD_TEST_STUFF
-
- // Make sure the final positions are set for every glyph.
- CalcPositionsUpTo(m_cpass-1, reinterpret_cast<GrSlotState *>(NULL),
- &xsTotalWidth, &xsVisWidth);
- pseg->SetWidths(xsVisWidth, xsTotalWidth);
-}
-
-/*----------------------------------------------------------------------------------------------
- Calculate the associations, and record the output slots in the segment.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::RecordAssocsAndOutput(Font * pfont, Segment * pseg,
- TrWsHandling twsh, bool fParaRtl, int nDirDepth)
-{
- int cchwUnderlying = pseg->stopCharacter() - pseg->startCharacter();
- GrSlotStream * psstrmFinal = OutputStream(m_cpass-1);
- int csloutSurface = psstrmFinal->WritePos() - psstrmFinal->IndexOffset(); // # of output slots
-
- psstrmFinal->SetNeutralAssociations(LBGlyphID());
-
- pseg->SetUpOutputArrays(pfont, this, psstrmFinal, cchwUnderlying, csloutSurface, LBGlyphID(),
- twsh, fParaRtl, nDirDepth);
-
- // Set underlying-to-surface assocations in the segment.
- CalculateAssociations(pseg, csloutSurface);
-}
-
-/*----------------------------------------------------------------------------------------------
- Calculate the underlying-to-surface associations and ligature mappings.
- Assumes the arrays have been properly initialized.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::CalculateAssociations(Segment * pseg, int csloutSurface)
-{
- GrSlotStream * psstrmFinal = OutputStream(m_cpass-1);
-
- std::vector<int> vichwAssocs;
- std::vector<int> vichwComponents;
-
- for (int islot = psstrmFinal->IndexOffset(); islot < psstrmFinal->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrmFinal->SlotAt(islot);
- int islout = islot - psstrmFinal->IndexOffset();
- if (!pslot->IsLineBreak(LBGlyphID()))
- {
- vichwAssocs.clear();
- pslot->AllAssocs(vichwAssocs);
-
- size_t iichw;
- for (iichw = 0; iichw < vichwAssocs.size(); ++iichw)
- {
- pseg->RecordSurfaceAssoc(vichwAssocs[iichw], islout, 0);
- }
-
- vichwComponents.clear();
- if (pslot->HasComponents())
- pslot->AllComponentRefs(vichwComponents);
-
- for (iichw = 0; iichw < vichwComponents.size(); iichw++)
- {
- pseg->RecordLigature(vichwComponents[iichw], islout, iichw);
- }
- }
- }
-
- AdjustAssocsForOverlaps(pseg);
- pseg->CleanUpAssocsVectors();
-
-// pseg->AdjustForOverlapsWithPrevSeg(); // for any characters officially in the
- // previous segment but rendered in this one,
- // or vice versa
-
- // TODO SharonC: for all characters that are right-to-left in the underlying stream,
- // reverse the before and after flags in the segment.
-}
-
-/*----------------------------------------------------------------------------------------------
- For any slots associated with characters in the new segment but not rendered in the
- segment, adjust the underlying-to-surface mappings accordingly. Ie, set the before
- mapping to kNegInfinity for slots at the beginning of the streams, and set the
- after mapping to kPosInfinity for slots at the end of the streams.
-
- TODO SharonC: Rework this method more carefully to handle each slot exactly once. The current
- approach could possibly, for instance, process a slot that is inserted in one pass
- and deleted in the next.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::AdjustAssocsForOverlaps(Segment * pseg)
-{
- if (!m_engst.m_fInitialLB && !m_engst.m_fFinalLB && !m_engst.m_fInsertedLB)
- // no cross-line contextualization possible
- return;
-
- gid16 chwLB = LBGlyphID();
- std::vector<int> vichwAssocs;
-
- // Process any slots output by any substitution pass (or later) on either side of the
- // line-breaks. These are the relevant slots that are rendered in the previous and
- // following segments.
- for (int ipass = m_cpass; ipass-- > m_cpassLB + 1; )
- {
- GrSlotStream * psstrm = OutputStream(ipass);
- int islotMin = (ipass == m_cpass - 1) ? psstrm->IndexOffset() : 0;
-
- if (m_engst.m_fInitialLB)
- {
- for (int islot = islotMin; ; islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsInitialLineBreak(chwLB))
- break;
- Assert(!pslot->IsFinalLineBreak(chwLB));
- if (pslot->PassModified() != ipass)
- continue;
-
- vichwAssocs.clear();
- pslot->AllAssocs(vichwAssocs);
- for (size_t iichw = 0; iichw < vichwAssocs.size(); ++iichw)
- pseg->MarkSlotInPrevSeg(vichwAssocs[iichw], islot);
- }
- }
-
- if ((m_engst.m_fFinalLB || m_engst.m_fInsertedLB) && ipass > m_cpassLB)
- {
- for (int islot = psstrm->WritePos(); islot-- > islotMin ; )
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsFinalLineBreak(chwLB))
- break;
- Assert(!pslot->IsInitialLineBreak(chwLB));
- if (pslot->PassModified() != ipass)
- continue;
-
- vichwAssocs.clear();
- pslot->AllAssocs(vichwAssocs);
- for (size_t iichw = 0; iichw < vichwAssocs.size(); ++iichw)
- pseg->MarkSlotInNextSeg(vichwAssocs[iichw], islot);
- }
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Initialize all the streams. In particular, process the information about the
- skip-offsets to handle segments other than the first.
-
- @param cbPrev - number of bytes in the pbPrevSegDat buffer
- @param pbPrevSegDat - buffer in the following format (all are 1 byte, unsigned):
- prev seg's end breakweight
- prev seg's previous strong directionality code
- prev seg's previous terminator dir code
- restart backup
- skip offsets for each pass
- This format must match what is generated by InitializeForNextSeg.
-----------------------------------------------------------------------------------------------*/
-void EngineState::InitializeStreams(GrTableManager * ptman,
- GrCharStream * pchstrm,
- int cbPrev, byte * pbPrevSegDat, bool fNeedFinalBreak, int * pislotFinalBreak)
-{
- int cpassLB = ptman->NumberOfLbPasses();
- int ipassPos1 = ptman->FirstPosPass();
-
- CreateSlotStreams();
-
- int cslotBackup = 0;
-
- InitForNewSegment(ptman);
-
- if (cbPrev == 0)
- {
- m_lbPrevEnd = klbNoBreak;
- m_dircInitialStrongDir = kdircNeutral;
- m_dircInitialTermDir = kdircNeutral;
- for (int ipass = 0; ipass < m_cpass; ++ipass)
- {
- OutputStream(ipass)->Initialize(ipassPos1, false);
- m_prgzpst[ipass].SetResyncSkip(0);
-
- if (ptman->LoggingTransduction())
- m_prgzpst[ipass].InitializeLogInfo();
- }
- }
- else
- {
- Assert(cbPrev >= 4);
- byte * pb = pbPrevSegDat;
-
- m_lbPrevEnd = LineBrk(*pb++);
-
- // Directionality codes from the previous segment.
- m_dircInitialStrongDir = DirCode((int)*pb++);
- m_dircInitialTermDir = DirCode((int)*pb++);
-
- cslotBackup = (int)*pb++;
- Assert((cbPrev == 4 || cslotBackup == 0) || cbPrev == m_cpass + 4);
-
- for (int ipass = 0; ipass < m_cpass; ++ipass)
- {
- OutputStream(ipass)->Initialize(ipassPos1, true);
- if (cbPrev == 4)
- m_prgzpst[ipass].SetResyncSkip(0); // different writing system
- else
- m_prgzpst[ipass].SetResyncSkip(*pb++);
-
- if (ptman->LoggingTransduction())
- m_prgzpst[ipass].InitializeLogInfo();
- }
-
- pchstrm->Backup(cslotBackup);
- }
-
- if (cbPrev > 0 || pchstrm->StartLine())
- {
- // Go ahead and run the initial line-break passes (if any), and then insert
- // a line-break at the appropriate place where the new segment will begin.
- int cslotToGet = cslotBackup;
-LGetMore:
- ptman->Pass(0)->ExtendGlyphIDOutput(ptman, pchstrm, OutputStream(0),
- -1, 0, klbWordBreak,
- cslotToGet, fNeedFinalBreak, m_twsh, pislotFinalBreak);
- OutputStream(0)->SetSegMin(cslotBackup);
- for (int ipass = 1; ipass <= cpassLB; ipass++)
- {
- if (cslotToGet > 0)
- {
- int nRet = kNextPass;
- int cslotGot;
- ptman->Pass(ipass)->ExtendOutput(ptman,
- InputStream(ipass), OutputStream(ipass),
- cslotToGet, m_twsh, &nRet, &cslotGot, pislotFinalBreak);
- if (nRet != kNextPass)
- {
- cslotToGet = 1;
- goto LGetMore;
- }
- }
- OutputStream(ipass)->SetSegMin(cslotBackup);
- }
- Assert(OutputStream(cpassLB)->WritePos() >= cslotBackup);
- m_cslotPreSeg = cslotBackup;
- if (pchstrm->StartLine())
- {
- OutputStream(cpassLB)->AppendLineBreak(ptman, pchstrm, m_lbPrevEnd,
- (ptman->RightToLeft() ? kdircRlb : kdircLlb), cslotBackup, true, -1);
- SetInitialLB();
- m_cslotPreSeg++;
- if (cpassLB > 0 && *pislotFinalBreak > -1)
- // See corresponding kludge in GrPass::ExtendGlyphIDOutput.
- *pislotFinalBreak += 1;
- }
- else
- {
- OutputStream(cpassLB)->SetSegMin(cslotBackup);
- }
- OutputStream(cpassLB)->CalcIndexOffset(ptman);
- }
-
- else
- {
- Assert(cslotBackup == 0);
- OutputStream(0)->SetSegMin(0);
- m_cslotPreSeg = 0;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Reinitialize as we start to generate a new segment.
-----------------------------------------------------------------------------------------------*/
-void EngineState::InitForNewSegment(GrTableManager * ptman)
-{
- // Set up a fresh batch of slots.
- DestroySlotBlocks();
- m_islotblkCurr = -1;
- m_islotNext = kSlotBlockSize;
-
- m_fInitialLB = false;
- m_fFinalLB = false;
- m_fInsertedLB = false;
- m_fExceededSpace = false;
- m_fHitHardBreak = false;
- m_fRemovedWhtsp = false;
- InitPosCache();
- //////m_pgg = pgg;
-
- for (int ipass = 0; ipass < m_cpass; ipass++)
- m_prgzpst[ipass].InitForNewSegment(ipass, ptman->Pass(ipass)->MaxRuleContext());
-}
-
-/*----------------------------------------------------------------------------------------------
- Calculate the position in stream zero of the given slot in the final stream,
- based on the associations. (This will be the same as the position at the end of the
- line-break passes, which is really what we want.)
-
- @param islotFinal - index of the final slot in the final stream
-----------------------------------------------------------------------------------------------*/
-int EngineState::TraceStreamZeroPos(int islotFinal, int nTopDir)
-{
- GrSlotStream * psstrmFinal = OutputStream(m_cpass - 1);
- if (psstrmFinal->WritePos() == 0)
- return -1;
-
- GrSlotState * pslot = psstrmFinal->SlotAt(islotFinal);
-
- // If we're in the middle of reordered bidi stuff, just use the end of the stream.
- if (pslot->DirLevel() > nTopDir)
- return -1;
-
- int islot = pslot->BeforeAssoc();
- if (islot == kPosInfinity || islot < 0)
- return -1;
- return islot + m_cslotPreSeg;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the next higher (more relaxed, less desirable) line break weight.
-----------------------------------------------------------------------------------------------*/
-LineBrk GrTableManager::IncLineBreak(LineBrk lb)
-{
- Assert(lb != klbClipBreak);
- return (LineBrk)((int)lb + 1);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a pointer to a slot that is near the current position in the given stream.
- Return NULL if no slots have been output at all.
- This is used for initializing features of line-break slots.
- @param ipassArg - pass at which to start looking
- @param islot - slot to look for; -1 if considering the current position
-----------------------------------------------------------------------------------------------*/
-GrSlotState * EngineState::AnAdjacentSlot(int ipassArg, int islot)
-{
- int ipass = ipassArg;
- while (ipass >= 0)
- {
- GrSlotStream * psstrm = OutputStream(ipass);
- if (psstrm->NumberOfSlots() > 0)
- {
- if (islot == -1)
- {
- if (psstrm->AtEnd())
- return psstrm->SlotAt(psstrm->WritePos() - 1);
- else
- return psstrm->Peek();
- }
- else
- {
- if (psstrm->WritePos() <= islot)
- return psstrm->SlotAt(psstrm->WritePos() - 1);
- else
- return psstrm->SlotAt(islot);
- }
- }
- ipass--;
- }
- return NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Simple access methods.
-----------------------------------------------------------------------------------------------*/
-GrEngine * GrTableManager::Engine()
-{
- return m_pgreng;
-}
-
-EngineState * GrTableManager::State()
-{
- return &m_engst;
-}
-
-GrEngine * EngineState::Engine()
-{
- return m_ptman->Engine();
-}
-
-GrTableManager * EngineState::TableManager()
-{
- return m_ptman;
-}
-
-/*----------------------------------------------------------------------------------------------
- Memory management for slots
-----------------------------------------------------------------------------------------------*/
-
-// standard for pass 0 slots
-void EngineState::NewSlot(
- gid16 gID, GrFeatureValues fval, int ipass, int ichwSegOffset, int nUnicode,
- GrSlotState ** ppslotRet)
-{
- NextSlot(ppslotRet);
- (*ppslotRet)->Initialize(gID, Engine(), fval, ipass, ichwSegOffset, nUnicode);
-}
-
-// line-break slots
-void EngineState::NewSlot(
- gid16 gID, GrSlotState * pslotFeat, int ipass, int ichwSegOffset,
- GrSlotState ** ppslotRet)
-{
- NextSlot(ppslotRet);
- (*ppslotRet)->Initialize(gID, Engine(), pslotFeat, ipass, ichwSegOffset);
-}
-
-// for inserting new slots after pass 0 (under-pos and unicode are irrelevant)
-void EngineState::NewSlot(
- gid16 gID, GrSlotState * pslotFeat, int ipass,
- GrSlotState ** ppslotRet)
-{
- NextSlot(ppslotRet);
- (*ppslotRet)->Initialize(gID, Engine(), pslotFeat, ipass);
-}
-
-// for making a new version of the slot initialized from the old
-void EngineState::NewSlotCopy(GrSlotState * pslotCopyFrom, int ipass,
- GrSlotState ** ppslotRet)
-{
- NextSlot(ppslotRet);
- (*ppslotRet)->InitializeFrom(pslotCopyFrom, ipass);
-}
-
-void EngineState::NextSlot(GrSlotState ** ppslotRet)
-{
- int cnExtraPerSlot = m_cUserDefn + (m_cCompPerLig * 2) + m_cFeat;
- if (m_islotNext >= kSlotBlockSize)
- {
- // Allocate a new block of slots
- GrSlotState * slotblkNew = new GrSlotState[kSlotBlockSize];
- u_intslot * prgnSlotBuf = new u_intslot[kSlotBlockSize * cnExtraPerSlot];
-
- m_vslotblk.push_back(slotblkNew);
- m_vprgnSlotVarLenBufs.push_back(prgnSlotBuf);
- m_islotblkCurr++;
- m_islotNext = 0;
- Assert((unsigned)m_islotblkCurr == m_vslotblk.size()-1);
- }
-
- *ppslotRet = m_vslotblk[m_islotblkCurr] + m_islotNext;
- (*ppslotRet)->BasicInitialize(m_cUserDefn, m_cCompPerLig, m_cFeat,
- (m_vprgnSlotVarLenBufs[m_islotblkCurr] + (m_islotNext * cnExtraPerSlot)));
- m_islotNext++;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert the number of font design units into source device logical units.
-----------------------------------------------------------------------------------------------*/
-float GrTableManager::EmToLogUnits(int m)
-{
- return m_engst.EmToLogUnits(m);
-}
-
-float EngineState::EmToLogUnits(int m)
-{
- if (m == 0)
- return 0;
-
- float xysFontEmSquare;
- m_pfont->getFontMetrics(NULL, NULL, &xysFontEmSquare);
-
- // mEmUnits should be equal to the design units in the font's em square
- int mEmUnits = Engine()->GetFontEmUnits();
- if (mEmUnits <= 0)
- {
- Warn("Failed to obtain font em-units");
- return (float)m;
- }
-
- return GrEngine::GrIFIMulDiv(m, xysFontEmSquare, mEmUnits);
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert the source device coordinates to font design units.
-----------------------------------------------------------------------------------------------*/
-int GrTableManager::LogToEmUnits(float xys)
-{
- return m_engst.LogToEmUnits(xys);
-}
-
-int EngineState::LogToEmUnits(float xys)
-{
- if (xys == 0)
- return 0;
-
- float xysFontEmSquare;
- m_pfont->getFontMetrics(NULL, NULL, &xysFontEmSquare);
-
- // mEmUnits should be equal to the design units in the font's em square
- int mEmUnits = Engine()->GetFontEmUnits();
- if (mEmUnits < 0)
- {
- Warn("Failed to obtain font em-units");
- return (int)xys;
- }
-
- return GrEngine::GrFIFMulDiv(xys, mEmUnits, xysFontEmSquare);
-}
-
-/*----------------------------------------------------------------------------------------------
- Find the coordinates for a given glyph point.
- Return true on success, false otherwise.
-----------------------------------------------------------------------------------------------*/
-bool GrTableManager::GPointToXY(gid16 chwGlyphID, int nGPoint, float * pxs, float * pys)
-{
- return m_engst.GPointToXY(chwGlyphID, nGPoint, pxs, pys);
-}
-
-bool EngineState::GPointToXY(gid16 chwGlyphID, int nGPoint, float * pxs, float * pys)
-{
- *pxs = INT_MIN;
- *pys = INT_MIN;
- Point pointRet;
- m_pfont->getGlyphPoint(chwGlyphID, nGPoint, pointRet);
- *pxs = pointRet.x;
- *pys = pointRet.y;
-
- return true;
-}
-
-/*----------------------------------------------------------------------------------------------
- Call the justification routines.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::CallJustifier(IGrJustifier * pgjus, int ipassCurr,
- float dxUnjustified, float dxJustified, bool fEndLine)
-{
- // Indicates the stream the justification routines will read and modify:
- m_engst.m_ipassJustCalled = ipassCurr;
-
- int iGlyphMin = OutputStream(ipassCurr)->SegMin();
- int iGlyphLim = OutputStream(ipassCurr)->SegLimIfKnown();
- if (iGlyphLim == -1)
- iGlyphLim = OutputStream(ipassCurr)->WritePos();
-
- GrSlotStream * psstrm = OutputStream(ipassCurr);
- if (m_pgreng->BasicJustification() && fEndLine)
- UnstretchTrailingWs(psstrm, iGlyphLim);
-
- pgjus->adjustGlyphWidths(m_pgreng, iGlyphMin, iGlyphLim, dxUnjustified, dxJustified);
-
- // After returning, reading and modifying slot attributes is not permitted:
- m_engst.m_ipassJustCalled = -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- For the basic justification approach, remove stretch from the trailing whitespace.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::UnstretchTrailingWs(GrSlotStream * psstrm, int iGlyphLim)
-{
- int islot = iGlyphLim - 1;
- while (islot >= 0)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsLineBreak(LBGlyphID()))
- { } // keep looking for the trailing space
- else if (pslot->IsSpace(this))
- pslot->SetJStretch(0); // TODO: do this at level 0
- else
- // something other than space--quit
- return;
- islot--;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Determine how much shrink is permissible.
-
- This method is really used only for testing the shrink mechanism, since at this time
- we don't allow low-end justification to do any shrinking.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::DetermineShrink(IGrJustifier * pgjus, int ipassCurr)
-{
- if (m_engst.m_dxsShrinkPossible != GrSlotState::kNotYetSet)
- return;
-
- if (m_engst.m_jmodi != kjmodiCanShrink || pgjus == NULL)
- {
- m_engst.m_dxsShrinkPossible = 0;
- return;
- }
-
- if (ipassCurr != m_ipassJust1 - 1)
- return;
-
- GrSlotStream * psstrm = OutputStream(ipassCurr);
- if (!psstrm->FullyWritten())
- return;
-
- // Normally just answer 0. To test shrinking, turn on the code below.
- m_engst.m_dxsShrinkPossible = 0;
-
-#if TEST_SHRINK
- int mTotal = 0;
- int mShrink = 0;
- int islotLim = psstrm->SegLimIfKnown();
- if (islotLim == -1)
- islotLim = psstrm->WritePos();
- for ( ; islotLim >= 0; islotLim--)
- {
- // Trailing white space is not shrinkable.
- GrSlotState * pslot = psstrm->SlotAt(islotLim - 1);
- if (pslot->IsLineBreak(LBGlyphID()))
- continue;
- if (!pslot->IsSpace(this))
- break;
- }
- int islot;
- for (islot = psstrm->SegMin(); islot < islotLim; islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsLineBreak(LBGlyphID()))
- continue;
- mTotal += pslot->AdvanceX(this);
- mShrink += pslot->JShrink();
- }
-
- // Say that we are allowed to shrink up to 10% of the width of the segment.
- mShrink = min(mShrink, mTotal/10);
- m_engst.m_dxsShrinkPossible = EmToLogUnits(mShrink);
-#endif // TEST_SHRINK
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the attribute of the given slot, back to the justification routine. Return
- logical units.
-----------------------------------------------------------------------------------------------*/
-GrResult EngineState::GetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel,
- float * pValueRet)
-{
- GrResult res;
- int valueRetInt = 0;
- switch(jgat)
- {
- case kjgatWeight:
- case kjgatStretchInSteps:
- case kjgatBreak:
- res = GetGlyphAttrForJustification(iGlyph, jgat, nLevel, &valueRetInt);
- *pValueRet = (float)valueRetInt;
- return res;
- default:
- break;
- }
-
- if (m_ipassJustCalled == -1)
- return kresUnexpected;
-
- if (nLevel != 1)
- return kresInvalidArg;
-
- GrSlotStream * psstrm = OutputStream(m_ipassJustCalled);
-
- if (iGlyph < -1 || iGlyph >= psstrm->WritePos())
- return kresInvalidArg;
-
- GrSlotState * pslot = psstrm->SlotAt(iGlyph);
-
- // bool fConvertUnits = true;
-
- switch(jgat)
- {
- case kjgatStretch:
- *pValueRet = EmToLogUnits(pslot->JStretch());
- break;
- case kjgatShrink:
- *pValueRet = EmToLogUnits(pslot->JShrink());
- break;
- case kjgatStep:
- *pValueRet = EmToLogUnits(pslot->JStep());
- break;
- default:
- return kresNotImpl;
- }
- return kresOk;
-}
-
-GrResult EngineState::GetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel,
- int * pValueRet)
-{
- GrResult res;
- float valueRetFloat;
- switch(jgat)
- {
- case kjgatStretch:
- case kjgatShrink:
- case kjgatStep:
- res = GetGlyphAttrForJustification(iGlyph, jgat, nLevel, &valueRetFloat);
- *pValueRet = GrEngine::RoundFloat(valueRetFloat);
- return res;
- default:
- break;
- }
-
- if (m_ipassJustCalled == -1)
- return kresUnexpected;
-
- if (nLevel != 1)
- return kresInvalidArg;
-
- GrSlotStream * psstrm = OutputStream(m_ipassJustCalled);
-
- if (iGlyph < -1 || iGlyph >= psstrm->WritePos())
- return kresInvalidArg;
-
- GrSlotState * pslot = psstrm->SlotAt(iGlyph);
-
- int mStretch, mStep;
- //float xsStretch, xsStep;
-
- switch(jgat)
- {
- case kjgatWeight:
- *pValueRet = pslot->JWeight();
- break;
- case kjgatStretchInSteps:
- // ???? should this be calculated in terms of logical units??
- // Probably doesn't matter, since the logical units are floating point, so the
- // level of precision is about the same.
- mStretch = pslot->JStretch();
- mStep = pslot->JStep();
- if (mStep == 0)
- return kresUnexpected;
- *pValueRet = int(mStretch / mStep); // round down
- break;
- //case kjgatStretchInSteps:
- // xsStretch = EmToLogUnits(pslot->JStretch());
- // xsStep = EmToLogUnits(pslot->JStep());
- // if (xsStep == 0)
- // return kresUnexpected;
- // *pValueRet = int(xsStretch / xsStep); // round down
- // break;
- case kjgatBreak:
- *pValueRet = pslot->BreakWeight();
- break;
- default:
- return kresNotImpl;
- }
- return kresOk;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the attribute of the given slot, for the justification routine.
-----------------------------------------------------------------------------------------------*/
-GrResult EngineState::SetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel,
- float value)
-{
- GrResult res;
- int valueInt;
- switch(jgat)
- {
- case kjgatWeight:
- case kjgatStretchInSteps:
- case kjgatBreak:
- valueInt = (int)value;
- res = SetGlyphAttrForJustification(iGlyph, jgat, nLevel, valueInt);
- return res;
- default:
- break;
- }
-
- if (m_ipassJustCalled == -1)
- return kresUnexpected;
-
- if (nLevel != 1)
- return kresInvalidArg;
-
- GrSlotStream * psstrm = OutputStream(m_ipassJustCalled);
-
- if (iGlyph < -1 || iGlyph >= psstrm->WritePos())
- return kresInvalidArg;
-
- GrSlotState * pslot = psstrm->SlotAt(iGlyph);
-
- int mValue = LogToEmUnits(value);
- mValue = min(mValue, 0xFFFF); // truncate to an unsigned short
-
- // Review: do we really want to allow them to set stretch/shrink/step/weight? The normal
- // thing for them to do is set width.
- switch(jgat)
- {
- case kjgatStretch:
- pslot->SetJStretch(mValue);
- break;
- case kjgatShrink:
- pslot->SetJShrink(mValue);
- break;
- case kjgatStep:
- pslot->SetJStep(mValue);
- break;
- case kjgatWidth:
- pslot->SetJWidth(mValue);
- break;
- default:
- return kresNotImpl;
- }
- return kresOk;
-}
-
-GrResult EngineState::SetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel,
- int value)
-{
- GrResult res;
- float valueFloat;
- switch(jgat)
- {
- case kjgatStretch:
- case kjgatShrink:
- case kjgatStep:
- case kjgatWidth:
- valueFloat = (float)value;
- res = SetGlyphAttrForJustification(iGlyph, jgat, nLevel, valueFloat);
- return res;
- default:
- break;
- }
-
- if (m_ipassJustCalled == -1)
- return kresUnexpected;
-
- if (nLevel != 1)
- return kresInvalidArg;
-
- GrSlotStream * psstrm = OutputStream(m_ipassJustCalled);
-
- if (iGlyph < -1 || iGlyph >= psstrm->WritePos())
- return kresInvalidArg;
-
- GrSlotState * pslot = psstrm->SlotAt(iGlyph);
-
- int mValue, cSteps;
- switch(jgat)
- {
- case kjgatWeight:
- pslot->SetJWeight(value);
- break;
- case kjgatWidthInSteps:
- cSteps = value;
- mValue = pslot->JStep();
- if (mValue == 0)
- return kresUnexpected;
- pslot->SetJWidth(mValue * cSteps);
- break;
- default:
- return kresNotImpl;
- }
- return kresOk;
-}
-
-//:>--------------------------------------------------------------------------------------------
-//:> Functions to forward to the engine.
-//:>------------------------------------------------------------------------------------------*/
-gid16 GrTableManager::GetGlyphIDFromUnicode(int nUnicode)
-{
- return m_pgreng->GetGlyphIDFromUnicode(nUnicode);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-gid16 GrTableManager::ActualGlyphForOutput(utf16 chw)
-{
- return m_pgreng->ActualGlyphForOutput(chw);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-GrGlyphTable * GrTableManager::GlyphTable()
-{
- return m_pgreng->GlyphTable();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-gid16 GrTableManager::LBGlyphID()
-{
- return m_pgreng->LBGlyphID();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-gid16 GrTableManager::GetClassGlyphIDAt(int nClass, int nIndex)
-{
- return m_pgreng->GetClassGlyphIDAt(nClass, nIndex);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::GetIndexInGlyphClass(int nClass, gid16 chwGlyphID)
-{
- return m_pgreng->GetIndexInGlyphClass(nClass, chwGlyphID);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-size_t GrTableManager::NumberOfGlyphsInClass(int nClass)
-{
- return m_pgreng->NumberOfGlyphsInClass(nClass);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-void GrTableManager::SetSlotAttrsFromGlyphAttrs(GrSlotState * pslot)
-{
- m_pgreng->SetSlotAttrsFromGlyphAttrs(pslot);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::NumFeat()
-{
- return m_pgreng->NumFeat();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::DefaultForFeatureAt(int ifeat)
-{
- return m_pgreng->DefaultForFeatureAt(ifeat);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-void GrTableManager::DefaultsForLanguage(isocode lgcode,
- std::vector<featid> & vnFeats, std::vector<int> & vnValues)
-{
- return m_pgreng->DefaultsForLanguage(lgcode, vnFeats, vnValues);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-GrFeature * GrTableManager::FeatureWithID(featid nID, int * pifeat)
-{
- return m_pgreng->FeatureWithID(nID, pifeat);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-GrFeature * GrTableManager::Feature(int ifeat)
-{
- return m_pgreng->Feature(ifeat);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-bool GrTableManager::RightToLeft()
-{
- if (m_engst.WhiteSpaceOnly())
- return m_engst.m_fParaRtl;
- else
- return m_pgreng->RightToLeft();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::TopDirectionLevel()
-{
- return m_pgreng->TopDirectionLevel();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-float GrTableManager::VerticalOffset()
-{
- return m_pgreng->VerticalOffset();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::NumUserDefn()
-{
- return m_pgreng->NumUserDefn();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::NumCompPerLig()
-{
- return m_pgreng->NumCompPerLig();
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::ComponentIndexForGlyph(gid16 chwGlyphID, int nCompID)
-{
- return m_pgreng->ComponentIndexForGlyph(chwGlyphID, nCompID);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int GrTableManager::GlyphAttrValue(gid16 chwGlyphID, int nAttrID)
-{
- return m_pgreng->GlyphAttrValue(chwGlyphID, nAttrID);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-bool GrTableManager::LoggingTransduction()
-{
- return m_fLogging;
- //return m_pgreng->LoggingTransduction();
-}
-
-/*----------------------------------------------------------------------------------------------
- Calculate the positions of the glyphs up to the given slot, within the output of the given
- pass. If the slot is NULL, go all the way to the end of what has been generated.
-
- @param ipass - index of pass needing positioning; normally this will be the
- final pass, but it could be another if positions are
- requested by the rules themselves
- @param pslotLast - last slot that needs to be positioned, or NULL
- @param pxsWidth - return the total width used so far
- @param psxVisibleWidth - return the visible width so far
-
- MOVE to EngineState
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::CalcPositionsUpTo(int ipass, GrSlotState * pslotLast,
- float * pxsWidth, float * pxsVisibleWidth)
-{
- Assert(ipass >= m_ipassPos1 - 1);
-
- int isstrm = ipass;
- GrSlotStream * psstrm = OutputStream(isstrm);
- Assert(psstrm->GotIndexOffset());
- if (psstrm->WritePos() <= psstrm->IndexOffset())
- {
- Assert(psstrm->WritePos() == 0);
- *pxsWidth = 0;
- *pxsVisibleWidth = 0;
- return;
- }
- if (!pslotLast)
- {
- pslotLast = psstrm->SlotAt(psstrm->WritePos() - 1);
- }
- Assert(pslotLast);
-
- // First set positions of all base slots.
-
- int islot = psstrm->IndexOffset();
- GrSlotState * pslot;
- float xs = 0;
- float ys = VerticalOffset();
- *pxsWidth = 0;
- *pxsVisibleWidth = 0;
-
- bool fLast = false;
- bool fLastBase = false;
-
- bool fFakeItalic = m_pgreng->FakeItalic();
- float fakeItalicRatio = 0;
- if (fFakeItalic)
- fakeItalicRatio = State()->GetFont()->fakeItalicRatio();
- bool fBasicJust = m_pgreng->BasicJustification();
-
- // Figure out how to know when to stop.
- // We need to calculate up to the base of the last leaf slot, if it happens
- // to be later in the stream than the last actual slot passed in.
- if (!psstrm->HasSlotAtPosPassIndex(pslotLast->AttachRootPosPassIndex()))
- return;
- GrSlotState * pslotLastBase = pslotLast->Base(psstrm);
-
- if (ipass == m_cpass - 1 && m_engst.m_islotPosNext > -1)
- {
- // For final pass, initialize from cache of previous calculations.
- islot = m_engst.m_islotPosNext;
- xs = m_engst.m_xsPosXNext;
- ys = m_engst.m_ysPosYNext;
- *pxsWidth = m_engst.m_dxsTotWidthSoFar;
- *pxsVisibleWidth = m_engst.m_dxsVisWidthSoFar;
-
- if (psstrm->SlotsPresent() <= islot)
- return;
-
- if (pslotLastBase->PosPassIndex() == GrSlotAbstract::kNotYetSet)
- {
- Assert(false); // I think this case is handled above
- return; // can't position this slot yet; its base has not been processed
- }
-
- if (pslotLastBase->PosPassIndex() + psstrm->IndexOffset() < islot)
- {
- fLastBase = true;
- if (pslotLast == pslotLastBase)
- fLast = true;
- }
- }
-
- std::vector<GrSlotState *> vpslotAttached;
-
- bool fRtl = RightToLeft();
-
- while (!fLast || !fLastBase)
- {
- Assert(islot < psstrm->SlotsPresent());
-
- pslot = (isstrm == ipass) ? psstrm->SlotAt(islot) : psstrm->OutputSlotAt(islot);
-
- if (!pslot->IsBase())
- {
- // This slot is attached to another; it will be positioned strictly
- // relative to that one. This happens in the loop below.
- vpslotAttached.push_back(pslot);
- }
- else
- {
- // Base character.
-
- bool fLB = pslot->IsLineBreak(LBGlyphID());
- if (InternalJustificationMode() == kjmodiJustify && fBasicJust
- && ipass == m_cpass - 1 && !fLB)
- {
- m_engst.AddJWidthToAdvance(psstrm, &pslot, islot, &pslotLast, &pslotLastBase);
- }
-
- // Make sure the metrics are the complete ones.
- pslot->CalcCompositeMetrics(this, psstrm, kPosInfinity, true);
-
- float xsInc = pslot->GlyphXOffset(psstrm, fakeItalicRatio);
- float ysInc = pslot->GlyphYOffset(psstrm);
- float xsAdvX = pslot->ClusterAdvWidth(psstrm);
- float ysAdvY = (fLB) ?
- 0 :
- EmToLogUnits(pslot->AdvanceY(this));
-
- if (fRtl)
- {
- xs -= xsAdvX;
- ys -= ysAdvY;
- pslot->SetXPos(xs + xsInc);
- pslot->SetYPos(ys + ysInc);
- }
- else
- {
- pslot->SetXPos(xs + xsInc);
- pslot->SetYPos(ys + ysInc);
- xs += xsAdvX;
- ys += ysAdvY;
- }
-
- *pxsWidth = max(*pxsWidth, fabsf(xs));
- if (!IsWhiteSpace(pslot))
- *pxsVisibleWidth = *pxsWidth;
-
- if (isstrm == m_cpass - 1)
- {
- // For the final output pass, cache the results of the calculation so far.
- // Only do this for slots that have actually been processed by the final
- // pass, because others may have intermediate values that may be changed
- // later.
- m_engst.m_islotPosNext = pslot->PosPassIndex() + psstrm->IndexOffset() + 1;
- m_engst.m_xsPosXNext = xs;
- m_engst.m_ysPosYNext = ys;
- m_engst.m_dxsTotWidthSoFar = *pxsWidth;
- m_engst.m_dxsVisWidthSoFar = *pxsVisibleWidth;
- }
- }
-
- // Need to have calculated both the last leaf and the last base (if they happen to
- // be different); if so, we're done.
- if (pslot == pslotLast)
- fLast = true;
- if (pslot == pslotLastBase)
- fLastBase = true;
-
- islot++;
- }
-
- Assert(fLast);
- Assert(fLastBase);
-
- // Now set positions of non-base slots, relative to their bases.
-
- for (size_t ipslot = 0; ipslot < vpslotAttached.size(); ipslot++)
- {
- GrSlotState * pslot = vpslotAttached[ipslot];
- GrSlotState * pslotBase = pslot->Base(psstrm);
- if (pslotBase->XPosition() == kNegInfinity || pslotBase->YPosition() == kNegInfinity)
- {
- Assert(false);
- continue;
- }
- float xsCluster = pslotBase->XPosition() - pslotBase->GlyphXOffset(psstrm, fakeItalicRatio);
- float ysCluster = pslotBase->YPosition() - pslotBase->GlyphYOffset(psstrm);
- float xsInc = pslot->GlyphXOffset(psstrm, fakeItalicRatio);
- float ysInc = pslot->GlyphYOffset(psstrm);
- pslot->SetXPos(xsCluster + xsInc);
- pslot->SetYPos(ysCluster + ysInc);
-
- // My theory is that we don't need to adjust *pxsWidth here, because the width of
- // any non-base slots should be factored into the advance width of their cluster
- // base, which was handled above.
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the given slot is white space.
-----------------------------------------------------------------------------------------------*/
-bool GrTableManager::IsWhiteSpace(GrSlotState * pslot)
-{
- if (pslot->IsLineBreak(LBGlyphID()))
- return true;
- return pslot->IsSpace(this);
-}
-
-/*----------------------------------------------------------------------------------------------
- When doing basic justification, apply the value of justify.width to the advance width.
- This happens during the final positioning routine.
-----------------------------------------------------------------------------------------------*/
-void EngineState::AddJWidthToAdvance(GrSlotStream * psstrm, GrSlotState ** ppslot, int islot,
- GrSlotState ** ppslotLast, GrSlotState ** ppslotLastBase)
-{
- Assert(psstrm->OutputOfPass() == m_cpass - 1); // only used for final stream
- if ((*ppslot)->JWidth() > 0)
- {
- if ((*ppslot)->PassModified() != m_cpass - 1)
- {
- // Replace the slot with a new slot, so it gets marked properly with the
- // pass in which it was modified. (Otherwise the debug log gets screwed up.)
- GrSlotState * pslotNew;
- NewSlotCopy((*ppslot), m_cpass - 1, &pslotNew);
- psstrm->PutSlotAt(pslotNew, islot);
- if (*ppslot == *ppslotLast)
- *ppslotLast = pslotNew;
- if (*ppslot == *ppslotLastBase)
- *ppslotLastBase = pslotNew;
- *ppslot = pslotNew;
- }
- (*ppslot)->AddJWidthToAdvance(TableManager());
- }
-}
-
-
-//:>********************************************************************************************
-//:> Debuggers and utilities
-//:>********************************************************************************************
-
-//:Ignore
-#if 0
-void GrTableManager::TempDebug()
-{
- for (int ipass = 0; ipass < m_cpass; ++ipass)
- {
- int wpos = OutputStream(ipass)->WritePos();
- int rpos = OutputStream(ipass)->ReadPos();
- GrSlotState * wslot = OutputStream(ipass)->LastSlotWritten();
- GrSlotState * rslot = OutputStream(ipass)->LastSlotRead();
-
- }
-}
-#endif
-/*----------------------------------------------------------------------------------------------
- Given a character index in the original string, locate the corresponding line-break slot
- in the final surface stream. The character index must be one before which there is a
- line-break (seg lim), or the beginning or the end of the string.
- TODO SharonC: fix the bugs
-----------------------------------------------------------------------------------------------*/
-int GrTableManager::SurfaceLineBreakSlot(int ichw, GrCharStream * pchstrm, bool fInitial)
-{
- if (ichw == 0)
- {
- Assert(fInitial);
- return -1; // no initial line break
- }
- if (ichw == pchstrm->Lim())
- {
- Assert(!fInitial);
- return -1; // no terminating line break
- }
-
- int islotIn = pchstrm->SegOffset(ichw);
- Assert(islotIn >= 0);
- islotIn += (fInitial? m_engst.m_cslotPreSeg - 1: m_engst.m_cslotPreSeg);
-
- gid16 chwLBGlyphID = LBGlyphID();
-
- // Now islotIn is the position in stream 0;
-
- for (int ipass = 1; ipass < m_cpass; ++ipass)
- {
- int islotChunkMin;
- int islotChunkLim;
- GrSlotStream * psstrmOut = OutputStream(ipass);
-
- GrSlotStream * psstrmIn = InputStream(ipass);
- if (fInitial)
- islotIn = max(islotIn, psstrmIn->PreChunk());
- int islotT = psstrmIn->ChunkInNextMin(islotIn);
- islotChunkMin = psstrmIn->ChunkInNext(islotT);
- islotChunkMin = (islotChunkMin == -1)? 0: islotChunkMin;
-
- islotT = psstrmIn->ChunkInNextLim(islotIn);
- Assert(islotT <= psstrmIn->ReadPos());
- if (islotT == psstrmIn->ReadPos())
- islotChunkLim = psstrmOut->WritePos();
- else
- islotChunkLim = psstrmIn->ChunkInNext(islotT);
-
- int islotOut;
- for (islotOut = islotChunkMin; islotOut < islotChunkLim; ++islotOut)
- {
- gid16 chw = psstrmOut->GlyphIDAt(islotOut);
- if (chw == chwLBGlyphID)
- break;
- }
- Assert(psstrmOut->GlyphIDAt(islotOut) == chwLBGlyphID);
-
- islotIn = islotOut;
- }
- return islotIn;
-}
-
-/*----------------------------------------------------------------------------------------------
- Generate a debugger string showing the chunk boundaries for the given stream.
-----------------------------------------------------------------------------------------------*/
-std::wstring GrTableManager::ChunkDebugString(int ipass)
-{
- GrSlotStream * psstrm = OutputStream(ipass);
- std::wstring stuRet;
- //utf16 chwN = '\\';
- //utf16 chwR = '^';
-
- gid16 chwLBGlyphID = LBGlyphID();
-
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- if (psstrm->ChunkInPrev(islot) != -1)
- {
- if (psstrm->ChunkInNext(islot) != -1)
- stuRet.append(L">");
- else
- stuRet.append(L"\\");
- }
- else if (psstrm->ChunkInNext(islot) != -1)
- stuRet.append(L"/");
- else
- stuRet.append(L" ");
-
-// if (islot == psstrm->ReadPos())
-// stuRet.Append(&chwR, 1);
-
- wchar_t chw = psstrm->SlotAt(islot)->GlyphID();
- if (chw == chwLBGlyphID)
- stuRet.append(L"#");
- else
- stuRet.append(&chw, 1);
- }
- return stuRet;
-}
-
-} // namespace gr
-
-//:End Ignore
diff --git a/Build/source/libs/graphite-engine/src/segment/GrTableManager.h b/Build/source/libs/graphite-engine/src/segment/GrTableManager.h
deleted file mode 100644
index e0306c832c7..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/GrTableManager.h
+++ /dev/null
@@ -1,583 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrTableManager.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- The GrTableManager class.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GR_TABLEMAN_INCLUDED
-#define GR_TABLEMAN_INCLUDED
-
-#include <cassert>
-//:End Ignore
-
-namespace gr
-{
-
-class Font;
-
-/*----------------------------------------------------------------------------------------------
- There is a single instance of Engine State that keeps track of the state of the processing
- for a single segment generation.
-
- Hungarian: engst
-----------------------------------------------------------------------------------------------*/
-class EngineState
-{
- friend class GrTableManager;
- friend class FontMemoryUsage;
-
-public:
- EngineState();
- void Initialize(GrEngine *, GrTableManager *);
-
- ~EngineState();
- void DestroySlotBlocks();
-
- void InitForNewSegment(GrTableManager * ptman);
-
- void CreateEmpty();
-
- GrEngine * Engine();
- GrTableManager * TableManager();
-
- void CreateSlotStreams();
-
- GrSlotStream * InputStream(int ipass)
- {
- Assert(ipass > 0); // the char stream serves as input to the zeroth pass
- return m_prgpsstrm[ipass - 1];
- }
-
- // Return the stream that serves as output to the given pass.
- GrSlotStream * OutputStream(int ipass)
- {
- Assert(ipass < m_cpass);
- return m_prgpsstrm[ipass];
- }
-
- GrSlotState * AnAdjacentSlot(int ipassArg, int islotArg);
-
- GrResult GetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel, float * pxysValueRet);
- GrResult GetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel, int * pxysValueRet);
- GrResult SetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel, float xysValue);
- GrResult SetGlyphAttrForJustification(int iGlyph, int jgat, int nLevel, int xysValue);
-
- enum { kSlotBlockSize = 50 }; // number of slots to allocate in a block
-
- void InitPosCache()
- {
- m_islotPosNext = -1;
- m_xsPosXNext = 0;
- m_ysPosYNext = 0;
- m_dxsTotWidthSoFar = 0;
- m_dxsVisWidthSoFar = 0;
- }
-
- void SetFont(Font * pfont)
- {
- m_pfont = pfont;
- }
- Font * GetFont()
- {
- return m_pfont;
- }
-
- bool StartLineContext()
- {
- return m_fStartLineContext;
- }
- bool EndLineContext()
- {
- return m_fEndLineContext;
- }
- void SetStartLineContext(bool f)
- {
- m_fStartLineContext = f;
- }
- void SetEndLineContext(bool f)
- {
- m_fEndLineContext = f;
- }
-
- void SetInitialLB(bool f = true)
- {
- m_fInitialLB = f;
- }
-
- void SetFinalLB(bool f = true)
- {
- m_fFinalLB = f;
- }
-
- void SetInsertedLB(bool f = true)
- {
- m_fInsertedLB = f;
- }
-
- bool HasInitialLB()
- {
- return m_fInitialLB;
- }
- bool HasInsertedLB()
- {
- return m_fInsertedLB;
- }
- bool HasFinalLB()
- {
- return m_fFinalLB;
- }
-
- void SetExceededSpace(bool f = true)
- {
- m_fExceededSpace = f;
- }
-
- bool ExceededSpace()
- {
- return m_fExceededSpace;
- }
-
- void SetHitHardBreak(bool f = true)
- {
- m_fHitHardBreak = f;
- }
-
- bool HitHardBreak()
- {
- return m_fHitHardBreak;
- }
-
- void SetRemovedTrWhiteSpace(bool f = true)
- {
- m_fRemovedWhtsp = f;
- }
-
- bool RemovedTrWhiteSpace()
- {
- return m_fRemovedWhtsp;
- }
-
- bool WhiteSpaceOnly()
- {
- return (m_twsh == ktwshOnlyWs);
- }
-
- bool ParaRightToLeft()
- {
- return m_fParaRtl;
- }
-
- //int PrevPassMaxBackup(int ipass)
- //{
- // if (ipass == 0)
- // return 0;
- // return Pass(ipass - 1)->MaxBackup();
- //}
-
- DirCode InitialStrongDir()
- {
- return m_dircInitialStrongDir;
- }
- DirCode InitialTermDir()
- {
- return m_dircInitialTermDir;
- }
-
- void InitializeStreams(GrTableManager * ptman, GrCharStream * pchstrm,
- int cbPrev, byte * pbPrevSegDat, bool fNeedFinalBreak, int * pislotFinalBreak);
- int LbSlotToSegLim(int islot, GrCharStream * pchstrm, int cpassLB);
- int TraceStreamZeroPos(int islotFinal, int nTopDir);
-
- float EmToLogUnits(int m);
- int LogToEmUnits(float xys);
- bool GPointToXY(gid16 chwGlyphID, int nGPoint, float * xs, float * ys);
-
- void AddJWidthToAdvance(GrSlotStream * psstrm, GrSlotState ** ppslot, int islot,
- GrSlotState ** ppslotLast, GrSlotState ** ppslotLastBase);
-
- // Memory management for slots:
- void NewSlot(gid16 gID, GrFeatureValues fval, int ipass, int ichwSegOffset, int nUnicode,
- GrSlotState **);
- void NewSlot(gid16 gID, GrSlotState * pslotFeat, int ipass, int ichwSegOffset,
- GrSlotState **);
- void NewSlot(gid16 gID, GrSlotState * pslotFeat, int ipass, GrSlotState **);
- void NewSlotCopy(GrSlotState * pslotCopyFrom, int ipass,
- GrSlotState ** pslotRet);
-protected:
- void NextSlot(GrSlotState ** ppslot);
-
-protected:
- GrTableManager * m_ptman;
-
- int m_cFeat;
- int m_cCompPerLig;
- int m_cUserDefn;
-
- int m_jmodi; // justification mode
- int m_ipassJustCalled; // pass after which justification routine was called;
- // -1 if we are not in the midst of interacting with the
- // GrJustifier
-
- // Pointer to font
- Font * m_pfont;
-
- bool m_fStartLineContext; // true if there was a rule that ran over the initial LB
- bool m_fEndLineContext; // true if there was a rule that ran over the final LB
-
- // the number of slots inserted in the first stream before the official beginning
- // of the segment, including any initial line break
- int m_cslotPreSeg;
-
- // List of allocated GrSlotStates; hungarian slotblk = prgslot
- std::vector<GrSlotState *> m_vslotblk;
- std::vector<u_intslot *> m_vprgnSlotVarLenBufs; // corresponding var-length blocks
- int m_islotblkCurr;
- int m_islotNext;
-
- // Directionality codes from previous segment; these are used by the bidi algorithm
- // at the initial line-break character.
- DirCode m_dircInitialStrongDir;
- DirCode m_dircInitialTermDir;
-
- LineBrk m_lbPrevEnd;
-
- // All of the following 3 are true only when there is an actual LB glyph in the stream
- bool m_fInitialLB; // is there is an initial LB (an actual LB glyph--in all streams)
- bool m_fFinalLB; // is there is a final LB (in all streams--true when we've hit
- // the end of the input and end-of-line is true)
- bool m_fInsertedLB; // is there is a final LB inserted in the output of LB pass
- // (true when we've backtracked)
-
- bool m_fExceededSpace; // true if we backtracked due to exceeding space; false if we
- // haven't backtracked, or we did so for some other reason
- // (eg, omitting trailing whitespace)
-
- bool m_fHitHardBreak; // true if we encountered a hard-break in the input stream
- // (before the natural end of the segment)
-
- bool m_fRemovedWhtsp; // true if we've hit trailing whitespace characters that we've
- // removed
-
- TrWsHandling m_twsh; // white-space handling
- bool m_fParaRtl; // paragraph direction
-
- float m_dxsShrinkPossible;
-
- // The final positioning pass is where we are going to do most of the positioning.
- // Cache the intermediate results so we don't have to calculate from the beginning of
- // the segment every time.
- int m_islotPosNext; // where to continue calculating positions in final output stream
- // (one past the last base that was calculated)
- float m_xsPosXNext;
- float m_ysPosYNext;
- float m_dxsTotWidthSoFar;
- float m_dxsVisWidthSoFar;
-
- int m_cpass; // number of passes
-
- // array of pass-state objects
- PassState * m_prgzpst;
-
- // array of slot streams which are output of passes (input of zeroth
- // pass is the character stream, not a slot stream):
- GrSlotStream ** m_prgpsstrm;
- // For instance, a simple set of passes might look like this:
- // CharStream
- // GlyphGenPass pass 0
- // SlotStream stream 0
- // SubPass pass 1
- // SlotStream stream 1
- // PosPass pass 2
- // SlotStream stream 2
- //
- // m_cpass = 3
-
-}; // end of class EngineState
-
-/*----------------------------------------------------------------------------------------------
- There is a single instance of GrTableManager that handle the interactions between
- passes, including the demand-pull mechanism.
-
- Hungarian: tman
-----------------------------------------------------------------------------------------------*/
-
-class GrTableManager {
- friend class FontMemoryUsage;
-
-public:
- // Constructor & destructor:
- GrTableManager(GrEngine * pgreng)
- : m_cpass(0),
- m_fBidi(false),
- m_prgppass(NULL),
- m_pgreng(pgreng)
- {
- Assert(pgreng);
- }
-
- ~GrTableManager();
-
- bool CreateAndReadPasses(GrIStream & grstrm, int fxdSilfVersion, int fxdRuleVersion,
- int cpassFont, long lSubTableStart, int * rgnPassOffsets,
- int ipassSub1Font, int ipassPos1Font, int ipassJust1Font, byte ipassPostBidiFont);
-
- void CreateEmpty();
-
- GrEngine * Engine();
- EngineState * State();
-
- void Run(Segment * psegNew, Font * pfont, GrCharStream * pchstrm,
- IGrJustifier * pgjus, int jmodi,
- LayoutEnvironment & layout,
- int ichStop, float dxWidth, float dxUnjustified,
- bool fNeedFinalBreak, bool fMoreText, int ichFontLim,
- bool fInfiniteWidth, bool fWidthIsCharCount,
- int ichwCallerBtLim,
- int nDirDepth, SegEnd estJ);
-
- GrPass* Pass(int ipass)
- {
- Assert(ipass >= 0);
- return m_prgppass[ipass];
- }
-
- int NumberOfPasses()
- {
- return m_cpass;
- }
-
- int NumberOfLbPasses()
- {
- return m_cpassLB;
- }
-
- bool HasBidiPass()
- {
- return m_fBidi;
- }
-
- int FirstPosPass()
- {
- return m_ipassPos1;
- }
-
- void StorePassStates(PassState * rgzpst);
-
- // Return the stream that serves as input to the given pass.
- GrSlotStream * InputStream(int ipass)
- {
- return m_engst.InputStream(ipass);
- }
- GrSlotStream * OutputStream(int ipass)
- {
- return m_engst.OutputStream(ipass);
- }
-
- void UnwindAndReinit(int islotNewBreak);
-
-public:
- int InternalJustificationMode()
- {
- return m_engst.m_jmodi;
- }
-
- bool ShouldLogJustification()
- {
- return (m_engst.m_jmodi != kjmodiNormal);
- }
-
- int PrevPassMaxBackup(int ipass)
- {
- if (ipass == 0)
- return 0;
- return Pass(ipass - 1)->MaxBackup();
- }
-
- // Forward to the engine itself
- gid16 GetGlyphIDFromUnicode(int nUnicode);
- gid16 ActualGlyphForOutput(utf16 chwGlyphID);
- GrGlyphTable * GlyphTable();
-
- gid16 LBGlyphID();
-
- gid16 GetClassGlyphIDAt(int nClass, int nIndex);
- int GetIndexInGlyphClass(int nClass, gid16 chwGlyphID);
- size_t NumberOfGlyphsInClass(int nClass);
-
- void SetSlotAttrsFromGlyphAttrs(GrSlotState * pslot);
-
- int NumFeat();
- int DefaultForFeatureAt(int ifeat);
- GrFeature * FeatureWithID(featid nID, int * pifeat);
- GrFeature * Feature(int ifeat);
- void DefaultsForLanguage(isocode lgcode,
- std::vector<featid> & vnFeats, std::vector<int> & vnValues);
-
- bool RightToLeft();
- int TopDirectionLevel();
-
- float VerticalOffset();
-
- int NumUserDefn();
- int NumCompPerLig();
-
- int ComponentIndexForGlyph(gid16 chwGlyphID, int nCompID);
- int GlyphAttrValue(gid16 chwGlyphID, int nAttrID);
-
- // ---
-
- bool LoggingTransduction();
-
- float EmToLogUnits(int m);
- int LogToEmUnits(float xys);
- bool GPointToXY(gid16 chwGlyphID, int nGPoint, float * xs, float * ys);
-
- void CalcPositionsUpTo(int ipass, GrSlotState * pslotLast,
- float * pxsWidth, float * pxsVisibleWidth);
-
- void InitPosCache()
- {
- m_engst.InitPosCache();
- }
-
- bool IsWhiteSpace(GrSlotState * pslot);
-
- // For transduction logging:
- bool WriteTransductionLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet, int cbPrevSetDat, byte * pbPrevSegDat);
- bool WriteAssociationLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet);
- bool WriteXmlLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet, int cbPrevSegDat, byte * pbPrevSegDat);
- bool WriteXmlAssocLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet);
-
-#ifdef TRACING
- void WriteXductnLog(std::ostream & strmOut, GrCharStream * pchstrm, Segment * psegRet,
- int cbPrevSegDat, byte * pbPrevSegDat);
- //bool LogFileName(std::string & staFile);
- void LogUnderlying(std::ostream & strmOut, GrCharStream * pchstrm, int cchwBackup);
- void LogPass1Input(std::ostream & strmOut);
- void LogPassOutput(std::ostream & strmOut, int ipass, int cslotSkipped);
- void LogAttributes(std::ostream & strmOut, int ipass, bool fJustWidths = false);
- void LogFinalPositions(std::ostream & strmOut);
- void LogUnderlyingHeader(std::ostream & strmOut, int ichwMin,
- int ichwLim, int cchwBackup, int * prgichw16bit);
- void LogSlotHeader(std::ostream & strmOut, int cslot,
- int cspPerSlot, int cspLeading, int islotMin = 0);
- void LogSlotGlyphs(std::ostream & strmOut, GrSlotStream * psstrm);
- void SlotAttrsModified(int ipass, bool * rgfMods, bool fPreJust, int * pccomp, int *pcassoc);
- void LogInTable(std::ostream & strmOut, int n);
- void LogInTable(std::ostream & strmOut, float n);
- void LogHexInTable(std::ostream & strmOut, gid16 chw, bool fPlus = false);
- void LogDirCodeInTable(std::ostream & strmOut, int dirc);
- void LogBreakWeightInTable(std::ostream & strmOut, int lb);
-
- void WriteXmlLogAux(std::ostream & strmOut,
- GrCharStream * pchstrm, Segment * psegRet, int cbPrevSegDat, byte * pbPrevSegDat);
- void LogXmlUnderlying(std::ostream & strmOut, GrCharStream * pchstrm, int cchwBackup, size_t nIndent);
- void LogXmlUnderlyingAux(std::ostream & strmOut, GrCharStream * pchstrm,
- int cch32Backup, int cch32Lim, size_t nIndent,
- bool fLogText, bool fLogFeatures, bool fLogColor, bool fLogStrOff, bool fLogLig, bool fLogGlyphs);
- void LogXmlPass(std::ostream & strmOut, int ipass, int cslotSkipped, int nIndent);
-
- void LogXmlTagOpen(std::ostream & strmOut, std::string strTag, size_t nIndent, bool fContent);
- void LogXmlTagPostAttrs(std::ostream & strmOut, bool fContent);
- void LogXmlTagClose(std::ostream & strmOut, std::string strTag, size_t nIndent, bool fContent);
- void LogXmlTagAttr(std::ostream & strmOut, std::string strAttr, int nValue, size_t nIndent = 0);
- void LogXmlTagAttr(std::ostream & strmOut, std::string strAttr, const char * szValue, size_t nIndent = 0);
- void LogXmlTagAttrHex(std::ostream & strmOut, std::string strAttr, int nValue, size_t nIndent = 0);
- std::string HexString(int n1, int n2, int n3, int n4, int n5, int n6);
- std::string HexString(std::vector<int>);
- void LogXmlTagColor(std::ostream & strmOut, std::string strAttr, int clrValue, bool fBack,
- size_t nIndent = 0);
- void LogXmlDirCode(std::ostream & strmOut, std::string strAttr, int dircValue, size_t nIndent = 0);
- void LogXmlBreakWeight(std::ostream & strmOut, std::string strAttr, int dircValue,
- size_t nIndent = 0);
- void LogXmlComment(std::ostream & strmOut, std::string strComment, size_t nIndent = 0);
-
-#endif // TRACING
-
-protected:
- void InitNewSegment(Segment * psegNew, Font * pfont, GrCharStream * pchstrm, IGrJustifier * pgjus,
- int islotStream0Break, int islotSurfaceBreak, bool fStartLine, bool fEndLine, int ichFontLim,
- LineBrk lbEnd, SegEnd est, int * dichSegLen);
-
- void InitSegmentAsEmpty(Segment * psegNew, Font * pfont, GrCharStream * pchstrm,
- bool fStartLine, bool fEndLine);
-
- void InitSegmentToDelete(Segment * psegNew, Font * pfont, GrCharStream * pchstrm);
-
- int ChunkInPrev(int ipass, int islot, GrCharStream * pchstrm);
-
- bool Backtrack(int * islotPrevLB,
- LineBrk * plbPref, LineBrk lbMax, TrWsHandling, bool fMoreText,
- int ichwCallerBtLim, LineBrk * plbFound);
-
- LineBrk IncLineBreak(LineBrk lb);
-
- void InitializeForNextSeg(Segment* pseg,
- int islotStream0Break, int islotSurfaceBreak, LineBrk lbEnd,
- bool fNextSegNeedsContext, GrCharStream * pchstrm);
-
- void SetFinalPositions(Segment * pseg, bool fWidthIsCharCount);
- void RecordAssocsAndOutput(Font * pfont, Segment * pseg,
- TrWsHandling twsh, bool fParaRtl, int nDirDepth);
-
- void CalculateAssociations(Segment * pseg, int csloutSurface);
- void AdjustAssocsForOverlaps(Segment * pseg);
-
- void UnstretchTrailingWs(GrSlotStream * psstrm, int iGlyphLim);
- void CallJustifier(IGrJustifier * pgjus, int ipassCurr, float dxUnjustified, float dxJustified,
- bool fEndLine);
-
- void DetermineShrink(IGrJustifier * pgjus, int ipass);
-
-protected:
- // Instance variables:
-
- int m_cpass; // number of passes; zero-th pass is Unicode character -> glyph ID mapping;
- // Note thatwe always have one positioning pass to measure things even
- // if there are no tables to run.
-
- int m_cpassLB; // number of line-break passes
- int m_ipassPos1; // first positioning pass
- int m_ipassJust1; // first justification pass (== m_ipassPos1 if none)
-
- bool m_fBidi; // is there a bidi pass?
-
- // array of passes:
- GrPass ** m_prgppass;
-
- // Pointer back to Graphite engine, to give access to global constants and tables.
- GrEngine * m_pgreng;
-
- // State of processing.
- EngineState m_engst;
-
- bool m_fLogging;
-
-public:
- // For test procedures:
- void SetUpTest(std::wstring);
-
-protected:
- void TempDebug();
- int SurfaceLineBreakSlot(int ichw, GrCharStream * pchstrm, bool fInitial);
- std::wstring ChunkDebugString(int ipass);
-}; // end of class GrTableManager
-
-} // namespace gr
-
-
-#endif // !GR_TABLEMAN_INCLUDED
diff --git a/Build/source/libs/graphite-engine/src/segment/Main.h b/Build/source/libs/graphite-engine/src/segment/Main.h
deleted file mode 100644
index da95af09ce8..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/Main.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: Main.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Main.header file for the Graphite engine.
-----------------------------------------------------------------------------------------------*/
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRAPHITE_H
-#define GRAPHITE_H 1
-
-//:End Ignore
-
-#define NO_EXCEPTIONS 1
-
-// It's okay to use functions that were declared deprecated by VS 2005:
-#ifdef _MSC_VER
-#define _CRT_SECURE_NO_DEPRECATE
-#pragma warning(disable: 4996) // warning: function was declared deprecated
-#pragma warning(disable: 4702) // unreachable code
-#endif
-
-#include "GrCommon.h"
-
-//:>********************************************************************************************
-//:> Interfaces.
-//:>********************************************************************************************
-#include "GrData.h"
-
-//:>********************************************************************************************
-//:> Implementations.
-//:>********************************************************************************************
-
-#ifndef _WIN32
-#include "GrMstypes.h"
-#ifndef HAVE_FABSF
-float fabsf(float x);
-#endif
-#endif
-#include "GrDebug.h"
-
-// For reading the font (FieldWorks's approach) and transduction logging:
-#include <fstream>
-#include <iostream>
-
-#include <vector>
-////#include <algorithm>
-#include <string>
-
-// gAssert should be used for any kind of assertions that can be caused by a corrupted font,
-// particularly those that won't be caught when loading the tables.
-#define gAssert(x) Assert(x)
-// When testing the error mechanism (because the process of bringing up the assertion dialog
-// interferes with FW repainting the invalid window:
-////#define gAssert(x) if (!(x)) Warn("corrupted font?")
-
-// Internal headers.
-#include "FileInput.h"
-
-// Public headers.
-#include "GrResult.h"
-//////#include "IGrGraphics.h"
-#include "ITextSource.h"
-#include "IGrJustifier.h"
-#include "IGrEngine.h"
-#include "GrConstants.h"
-#include "GrFeature.h"
-
-// External helper classes.
-#include "GrExt.h"
-
-
-// Forward declarations.
-namespace gr
-{
- class GrTableManager;
- class Segment;
- class GrEngine;
-}
-
-// Define after GrExt.h to avoid conflict with FW Rect class.
-namespace gr
-{
-/*
-struct Point
-{
- float x;
- float y;
-
- Point()
- {
- x = y = 0;
- }
-
- Point(POINT & p)
- {
- x = (float)p.x;
- y = (float)p.y;
- }
-};
-
-
-struct Rect
-{
- float top;
- float bottom;
- float left;
- float right;
-
- Rect()
- {
- top = bottom = left = right = 0;
- };
-
- Rect(RECT & r)
- {
- top = (float)r.top;
- bottom = (float)r.bottom;
- left = (float)r.left;
- right = (float)r.right;
- };
-};
-*/
-}; // namespace gr
-
-#include "GrFeatureValues.h"
-#include "GrSlotState.h"
-
-#include "SegmentAux.h"
-
-// Internal headers
-#include "GrCharStream.h"
-#include "GrGlyphTable.h"
-#include "GrClassTable.h"
-#include "GrPseudoMap.h"
-#include "GrSlotStream.h"
-#include "GrFSM.h"
-#include "GrPass.h"
-#include "GrTableManager.h"
-#include "FontCache.h"
-
-
-// Public headers
-#include "Font.h"
-#include "GraphiteProcess.h"
-#include "GrEngine.h"
-#include "FontFace.h"
-#include "Segment.h"
-#include "SegmentPainter.h"
-
-//#ifdef _WIN32
-//#include <hash_map>
-//#include "WinFont.h"
-//#include "WinSegmentPainter.h"
-//#endif
-
-// Internal headers
-#include "TtfUtil.h"
-//#include "GrUtil.h"
-
-#include "GrWrappers.h"
-
-//#include "IGrDebug.h"
-//#include "GrSegmentDebug.h"
-//#include "GrEngineDebug.h"
-
-/////<<<<<<< .mine
-// clashes with non gr stuff
-// using namespace gr;
-///////>>>>>>> .r98
-
-#endif // GRAPHITE_H
-
diff --git a/Build/source/libs/graphite-engine/src/segment/Makefile.am b/Build/source/libs/graphite-engine/src/segment/Makefile.am
deleted file mode 100644
index 59113aa924b..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/Makefile.am
+++ /dev/null
@@ -1,26 +0,0 @@
-segmentdir = $(top_srcdir)/src/segment
-
-libgraphite_la_SOURCES += $(segmentdir)/FileInput.cpp
-libgraphite_la_SOURCES += $(segmentdir)/FontCache.cpp
-libgraphite_la_SOURCES += $(segmentdir)/FontFace.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrCharStream.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrClassTable.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrEngine.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrFeature.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrFSM.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrGlyphTable.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrPassActionCode.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrPass.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrSlotState.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrSlotStream.cpp
-libgraphite_la_SOURCES += $(segmentdir)/GrTableManager.cpp
-libgraphite_la_SOURCES += $(segmentdir)/MemoryUsage.cpp
-libgraphite_la_SOURCES += $(segmentdir)/Platform.cpp
-libgraphite_la_SOURCES += $(segmentdir)/SegmentAux.cpp
-libgraphite_la_SOURCES += $(segmentdir)/Segment.cpp
-libgraphite_la_SOURCES += $(segmentdir)/TestFSM.cpp
-libgraphite_la_SOURCES += $(segmentdir)/TestPasses.cpp
-libgraphite_la_SOURCES += $(segmentdir)/TransductionLog.cpp
-
-EXTRA_DIST += $(segmentdir)/*.h
-
diff --git a/Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp b/Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp
deleted file mode 100644
index 1fb3fc25282..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/MemoryUsage.cpp
+++ /dev/null
@@ -1,781 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: MemoryUsage.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Calculates memory usage for the engine and segments.
-----------------------------------------------------------------------------------------------*/
-
-#pragma warning(disable: 4244) // conversion from wchar_t to char
-#pragma warning(disable: 4702) // unreachable code
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-
-#include "GrCommon.h"
-#include "GrData.h"
-#ifndef _WIN32
-#include "GrMstypes.h"
-#endif
-#include "GrDebug.h"
-//#include <fstream>
-#include <iostream>
-#include <cstring>
-//#include <string>
-// Forward declarations.
-
-#include "Main.h"
-
-//namespace gr
-//{
-// class GrTableManager;
-// class Segment;
-// class GrEngine;
-//}
-//
-//#include "GrTableManager.h"
-//#include "GrFeatureValues.h"
-//#include "GrSlotState.h"
-//#include "SegmentAux.h"
-//#include "Segment.h"
-#include "MemoryUsage.h"
-
-//#ifndef _MSC_VER
-//#include "config.h"
-//#endif
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-const int stringOverhead = (3 * sizeof(int)) + (sizeof(void *)) + (8 * sizeof(short));
-const int vectorOverhead = 3 * sizeof(void *);
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Font/engine
-//:>********************************************************************************************
-
-void FontMemoryUsage::initialize()
-{
- font = 0;
- fontCache = 0;
- fontFace = 0;
-
- eng_count = 0;
- eng_overhead = 0;
- eng_scalars = 0;
- eng_strings = 0;
- eng_pointers = 0;
- eng_cmap = 0;
- eng_nameTable = 0;
-
- pseudoMap = 0;
-
- clstbl_counters = 0;
- clstbl_offsets = 0;
- clstbl_glyphList = 0;
-
- glftbl_general = 0;
- glftbl_compDefns = 0;
- glftbl_attrTable = 0;
- glftbl_attrOffsets = 0;
-
- lngtbl_general = 0;
- lngtbl_entries = 0;
- lngtbl_featureSets = 0;
-
- tman_general = 0;
-
- pass_count = 0;
- pass_general = 0;
- pass_fsm = 0;
- pass_ruleExtras = 0;
- pass_constraintOffsets = 0;
- pass_constraintCode = 0;
- pass_actionOffsets = 0;
- pass_actionCode = 0;
-
- engst_general = 0;
- engst_passState = 0;
-
- sstrm_count = 0;
- sstrm_general = 0;
- sstrm_chunkMapsUsed = 0;
- sstrm_chunkMapsAlloc = 0;
- sstrm_reprocBuf = 0;
-
- slot_count = 0;
- slot_general = 0;
- slot_abstract = 0;
- slot_varLenBuf = 0;
- slot_assocsUsed = 0;
- slot_assocsAlloc = 0;
- slot_attachUsed = 0;
- slot_attachAlloc = 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the total byte count.
-----------------------------------------------------------------------------------------------*/
-int FontMemoryUsage::total()
-{
- int grandTotal = 0;
- grandTotal += font + fontCache + fontFace;
- grandTotal += eng_overhead + eng_scalars + eng_strings + eng_pointers + eng_cmap + eng_nameTable;
- grandTotal += pseudoMap;
- grandTotal += clstbl_counters + clstbl_offsets + clstbl_glyphList;
- grandTotal += glftbl_general + glftbl_compDefns + glftbl_attrTable + glftbl_attrOffsets;
- grandTotal += lngtbl_general + lngtbl_entries + lngtbl_featureSets;
- grandTotal += tman_general;
- grandTotal += pass_general + pass_fsm + pass_ruleExtras
- + pass_constraintOffsets + pass_constraintCode + pass_actionOffsets + pass_actionCode;
- grandTotal += engst_general + engst_passState;
- grandTotal += sstrm_general + sstrm_chunkMapsAlloc + sstrm_reprocBuf;
- grandTotal += slot_general + slot_abstract + slot_varLenBuf + slot_assocsAlloc + slot_attachAlloc;
-
- return grandTotal;
-}
-
-/*----------------------------------------------------------------------------------------------
- Add the results of two runs together.
-----------------------------------------------------------------------------------------------*/
-void FontMemoryUsage::add(FontMemoryUsage & fmu)
-{
- font += fmu.font;
- fontCache += fmu.fontCache;
- fontFace += fmu.fontFace;
-
- eng_count += fmu.eng_count;
- eng_overhead += fmu.eng_overhead;
- eng_scalars += fmu.eng_scalars;
- eng_strings += fmu.eng_strings;
- eng_pointers += fmu.eng_pointers;
- eng_cmap += fmu.eng_cmap;
- eng_nameTable += fmu.eng_nameTable;
-
- pseudoMap += fmu.pseudoMap;
-
- clstbl_counters += fmu.clstbl_counters;
- clstbl_offsets += fmu.clstbl_offsets;
- clstbl_glyphList += fmu.clstbl_glyphList;
-
- glftbl_general += fmu.glftbl_general;
- glftbl_compDefns += fmu.glftbl_compDefns;
- glftbl_attrTable += fmu.glftbl_attrTable;
- glftbl_attrOffsets += fmu.glftbl_attrOffsets;
-
- lngtbl_general += fmu.lngtbl_general;
- lngtbl_entries += fmu.lngtbl_entries;
- lngtbl_featureSets += fmu.lngtbl_featureSets;
-
- tman_general += fmu.tman_general;
-
- pass_count += fmu.pass_count;
- pass_general += fmu.pass_general;
- pass_fsm += fmu.pass_fsm;
- pass_ruleExtras += fmu.pass_ruleExtras;
- pass_constraintOffsets += fmu.pass_constraintOffsets;
- pass_constraintCode += fmu.pass_constraintCode;
- pass_actionOffsets += fmu.pass_actionOffsets;
- pass_actionCode += fmu.pass_actionCode;
-
- engst_general += fmu.engst_general;
- engst_passState += fmu.engst_passState;
-
- sstrm_count += fmu.sstrm_count;
- sstrm_general += fmu.sstrm_general;
- sstrm_chunkMapsUsed += fmu.sstrm_chunkMapsUsed;
- sstrm_chunkMapsAlloc += fmu.sstrm_chunkMapsAlloc;
- sstrm_reprocBuf += fmu.sstrm_reprocBuf;
-
- slot_count += fmu.slot_count;
- slot_general += fmu.slot_general;
- slot_abstract += fmu.slot_abstract;
- slot_varLenBuf += fmu.slot_varLenBuf;
- slot_assocsUsed += fmu.slot_assocsUsed;
- slot_assocsAlloc += fmu.slot_assocsAlloc;
- slot_attachUsed += fmu.slot_attachUsed;
- slot_attachAlloc += fmu.slot_attachAlloc;
-}
-
-/*----------------------------------------------------------------------------------------------
- Add up the memory used by all the engines in the cache.
-----------------------------------------------------------------------------------------------*/
-FontMemoryUsage Font::calculateMemoryUsage()
-{
- FontMemoryUsage fmu;
- FontFace::calculateAllMemoryUsage(fmu);
- return fmu;
-}
-
-void FontFace::calculateAllMemoryUsage(FontMemoryUsage & fmu)
-{
- s_pFontCache->calculateMemoryUsage(fmu);
-}
-
-void FontCache::calculateMemoryUsage(FontMemoryUsage & fmuTotal)
-{
- fmuTotal.fontCache += sizeof(int) * 4; // m_cfci, m_cfciMax, m_cfface, m_flush
- fmuTotal.fontCache += sizeof(void*); // m_prgfci;
-
- // Iterate through all the font faces in the cache.
- for (int ifci = 0; ifci < m_cfci; ifci++)
- {
- CacheItem * pfci = m_prgfci + ifci;
- char rgchFontName[32];
- memset(rgchFontName, 0, 32 * sizeof(char));
- std::copy(pfci->szFaceName, pfci->szFaceName + 32, rgchFontName);
- std::string strFontName(rgchFontName);
- fmuTotal.vstrFontNames.push_back(strFontName);
- int cface = 0;
- if (pfci->pffaceRegular)
- {
- FontMemoryUsage fmu;
- pfci->pffaceRegular->calculateMemoryUsage(fmu);
- fmuTotal.add(fmu);
- fmuTotal.vFontTotalsReg.push_back(fmu.total());
- cface++;
- }
- else
- fmuTotal.vFontTotalsReg.push_back(0);
-
- if (pfci->pffaceBold)
- {
- FontMemoryUsage fmu;
- pfci->pffaceBold->calculateMemoryUsage(fmu);
- fmuTotal.add(fmu);
- fmuTotal.vFontTotalsBold.push_back(fmu.total());
- cface++;
- }
- else
- fmuTotal.vFontTotalsBold.push_back(0);
-
- if (pfci->pffaceItalic)
- {
- FontMemoryUsage fmu;
- pfci->pffaceItalic->calculateMemoryUsage(fmu);
- fmuTotal.add(fmu);
- fmuTotal.vFontTotalsItalic.push_back(fmu.total());
- cface++;
- }
- else
- fmuTotal.vFontTotalsItalic.push_back(0);
-
- if (pfci->pffaceBI)
- {
- FontMemoryUsage fmu;
- pfci->pffaceBI->calculateMemoryUsage(fmu);
- fmuTotal.add(fmu);
- fmuTotal.vFontTotalsBI.push_back(fmu.total());
- cface++;
- }
- else
- fmuTotal.vFontTotalsBI.push_back(0);
-
- fmuTotal.vFaceCount.push_back(cface);
- }
-}
-
-void FontFace::calculateMemoryUsage(FontMemoryUsage & fmu)
-{
- fmu.fontFace += sizeof(int); // m_cfonts
- fmu.fontFace += sizeof(void *) * 2; // s_pFontCache, m_pgreng
-
- fmu.font += m_cfonts * sizeof(void*); // m_pfface
-
- fmu.addEngine(m_pgreng);
-}
-
-void FontMemoryUsage::addEngine(GrEngine * pgreng)
-{
- eng_count++;
-
- eng_overhead += sizeof(long); // m_cref
- eng_scalars += sizeof(bool) * 6; // m_fBold, m_fItalic, m_fSmart...
- eng_scalars += sizeof(bool) * 2; // m_fFakeItalicCache, m_fFakeBICache;
- eng_strings += stringOverhead * 4; // m_strCtrlFileReg/Bold/Italic/BI
- eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileReg.length();
- eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileBold.length();
- eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileItalic.length();
- eng_strings += sizeof(wchar_t) * pgreng->m_strCtrlFileBI.length();
- eng_scalars += sizeof(bool);
- eng_strings += stringOverhead * 6; // m_stuCtrlFile etc.
- eng_strings += sizeof(wchar_t) * pgreng->m_stuCtrlFile.length();
- eng_strings += sizeof(wchar_t) * pgreng->m_stuInitError.length();
- eng_strings += sizeof(wchar_t) * pgreng->m_stuFaceName.length();
- eng_strings += sizeof(wchar_t) * pgreng->m_stuFeatures.length();
- eng_strings += sizeof(wchar_t) * pgreng->m_stuBaseFaceName.length();
- eng_scalars += sizeof(bool); // m_fUseSepBase
- eng_scalars += sizeof(GrResult) * 2; // m_resFontRead, m_resFontValid
- eng_scalars += sizeof(FontErrorCode);
- eng_scalars += sizeof(int) * 3; // m_fxdBadVersion, m_nFontCheckSum, m_nScriptTag, m_grfsdc
- eng_scalars += sizeof(bool); // m_fRightToLeft
- eng_scalars += sizeof(int) * 2; // m_mXAscent, m_mXDescent
- eng_scalars += sizeof(float); // m_dysOffset
- eng_scalars += sizeof(bool); // m_fBasicJust
- eng_scalars += sizeof(int); // m_cJLevels
- eng_pointers += sizeof(void*) * 4; // m_ptman, m_pctbl, m_pgtbl, m_pfface
- eng_scalars += sizeof(GrFeature) * kMaxFeatures;
- eng_scalars += sizeof(int); // m_cfeat
- eng_scalars += sizeof(size_t); // m_clcidFeatLabelLangs
- eng_scalars += sizeof(short) * pgreng->m_clcidFeatLabelLangs;
- // m_langtbl
- eng_scalars += sizeof(bool); // m_fLineBreak
- eng_scalars += sizeof(int) * 2; // m_cchwPreXlbContext, m_cchwPostXlbContext
- eng_scalars += sizeof(data16) * 7; // m_chwPseudoAttr, etc.
- eng_scalars += sizeof(gid16); // m_chwLBGlyphID
- eng_scalars += sizeof(int) * 4; // m_cComponents, m_cnUserDefn, m_cnCompPerLig, m_mFontEmUnits
-
- pseudoMap += sizeof(int) * 3;
- pseudoMap += sizeof(GrPseudoMap) * pgreng->m_cpsd;
-
- eng_cmap += sizeof(void*) * 2;
- eng_cmap += sizeof(byte*);
- eng_cmap += sizeof(bool);
- if (pgreng->m_fCmapTblCopy)
- eng_cmap += pgreng->m_cbCmapTbl;
-
- eng_nameTable += sizeof(byte *);
- eng_nameTable += sizeof(bool);
- if (pgreng->m_fNameTblCopy)
- eng_nameTable += pgreng->m_cbNameTbl;
-
- eng_scalars += sizeof(bool) * 2; // m_fLogXductn, m_fInErrorState
-
- clstbl_counters += sizeof(int) * 2; // m_ccls, m_cclsLinear
- clstbl_offsets += sizeof(data16) * (pgreng->m_pctbl->m_ccls + 1);
- clstbl_glyphList += sizeof(data16) * (pgreng->m_pctbl->m_prgichwOffsets[pgreng->m_pctbl->m_ccls]);
-
- glftbl_general += sizeof(int) * 3; // m_cglf, m_cComponents, m_cgstbl
- glftbl_general += vectorOverhead; // m_vpgstbl
- GrGlyphSubTable * pgstbl = pgreng->m_pgtbl->m_vpgstbl[0];
- glftbl_general += sizeof(int) * 4; // m_fxdSilfVersion, m_nAttrIDLim, m_cComponents, m_cnCompPerLig
- glftbl_general += sizeof(bool) * 2; // m_fHasDebugStrings, m_fGlocShort
- glftbl_general += sizeof(data16) * 3; // m_chw...Attr
- glftbl_compDefns += sizeof(int) * (pgstbl->m_cnCompPerLig + 1) * pgreng->m_pgtbl->m_cglf;
- glftbl_attrTable += sizeof(int) * 2; // m_fxdSilfVersion, m_cbEntryBufLen
- glftbl_attrTable += sizeof(byte) * pgstbl->m_pgatbl->m_cbEntryBufLen;
- glftbl_attrOffsets +=
- (pgreng->m_pgtbl->m_cglf + 1) * ((pgstbl->m_fGlocShort) ? sizeof(data16) : sizeof(data32));
-
- lngtbl_general += sizeof(size_t); // m_clang
- lngtbl_general += sizeof(data16) * 3; // m_dilangInit, m_cLoop, m_ilangStart
- lngtbl_general += sizeof(void*) * 2; // m_prglang, m_prgfset
- lngtbl_general += sizeof(int); // m_cbOffset0
- lngtbl_entries += sizeof(GrLangTable::LangEntry) * pgreng->m_langtbl.m_clang;
- lngtbl_featureSets += sizeof(GrLangTable::FeatSet) * pgreng->m_langtbl.m_cfset;
-
- GrTableManager * ptman = pgreng->m_ptman;
- tman_general += sizeof(int) * 4; // m_cpass, m_cpassLB, m_ipassPos1, m_ipassJust1
- tman_general += sizeof(bool); // m_fBidi
- tman_general += sizeof(void*) * 2; // m_prgppass, m_pgreng
- tman_general += sizeof(void*) * ptman->m_cpass; // m_prgppass
- tman_general += sizeof(bool); // m_fLogging
-
- pass_count += ptman->m_cpass;
- for (int ipass = 0; ipass < ptman->m_cpass; ipass++)
- {
- GrPass * ppass = ptman->m_prgppass[ipass];
- pass_general = sizeof(GrPass);
-
- GrFSM * pfsm = ppass->m_pfsm;
- if (pfsm)
- {
- pass_fsm += sizeof(int) * 5; // m_crow, m_crowFinal, m_rowFinalMin, m_crowNonAcpt, m_ccol
- pass_fsm += sizeof(void*) * 3; // m_prgirulnMin, m_prgrulnMatched, m_prgrowTransitions
- int crowSuccess = pfsm->m_crow - pfsm->m_crowNonAcpt;
- pass_fsm += sizeof(data16) * (crowSuccess + 1); // m_prgirulnMin
- pass_fsm += sizeof(data16) * (pfsm->m_crulnMatched); // m_prgrulnMatched
- pass_fsm += sizeof(short) * ((pfsm->m_crow - pfsm->m_crowFinal) * pfsm->m_ccol);
- pass_fsm += sizeof(data16); // m_dimcrInit, m_cLoop, m_imcrStart
- pass_fsm += sizeof(int); // m_cmcr
- pass_fsm += sizeof(void*); // m_prgmcr
- pass_fsm += sizeof(GrFSMClassRange) * pfsm->m_cmcr;
- pass_fsm += sizeof(int) * 2; // m_critMinRulePreContext, m_critMaxRulePreContext
- pass_fsm += sizeof(void*); // m_prgrowStartStates
- pass_fsm += sizeof(short) * (pfsm->m_critMaxRulePreContext - pfsm->m_critMinRulePreContext + 1);
- }
-
- pass_ruleExtras = sizeof(data16) * ppass->m_crul; // m_prgchwRuleSortKeys
- pass_ruleExtras = sizeof(byte*) * ppass->m_crul; // m_prgcritRulePreModContext
-
- pass_constraintOffsets += sizeof(data16) * (ppass->m_crul + 1);
- pass_actionOffsets =+ sizeof(data16) * (ppass->m_crul + 1);
-
- pass_constraintCode += sizeof(byte) * ppass->m_cbConstraints;
- pass_actionCode += sizeof(byte) * ppass->m_cbActions;
-
- pass_general += sizeof(bool) * ppass->m_crul; // m_prgfRuleOkay
- pass_general += vectorOverhead; // m_vnStack
- pass_general += sizeof(int) * ppass->m_vnStack.capacity();
- }
-
- engst_general += sizeof(EngineState);
- engst_general += sizeof(void *) * ptman->m_engst.m_vslotblk.capacity();
- engst_general += sizeof(void *) * ptman->m_engst.m_vprgnSlotVarLenBufs.capacity();
- engst_general += sizeof(void *) * ptman->m_engst.m_cpass; // m_prgpsstrm
-
- engst_passState += sizeof(PassState) * ptman->m_engst.m_cpass;
-
- for (int isstrm = 0; isstrm < ptman->m_engst.m_cpass; isstrm++)
- {
- sstrm_count++;
- GrSlotStream * psstrm = ptman->m_engst.m_prgpsstrm[isstrm];
- sstrm_general += sizeof(GrSlotStream);
- sstrm_chunkMapsUsed += psstrm->m_vislotPrevChunkMap.size();
- sstrm_chunkMapsUsed += psstrm->m_vislotPrevChunkMap.size();
- sstrm_chunkMapsAlloc += psstrm->m_vislotPrevChunkMap.capacity();
- sstrm_chunkMapsAlloc += psstrm->m_vislotNextChunkMap.capacity();
- sstrm_reprocBuf += psstrm->m_vpslotReproc.capacity();
- sstrm_reprocBuf += sizeof(int) * 2;
- sstrm_general -= sizeof(int) * 2;
- }
-
- slot_general += ptman->m_engst.m_vslotblk.size() * EngineState::kSlotBlockSize
- * (sizeof(GrSlotState) - sizeof(GrSlotAbstract));
- slot_abstract += ptman->m_engst.m_vslotblk.size() * EngineState::kSlotBlockSize
- * sizeof(GrSlotAbstract);
- int cnExtraPerSlot = ptman->m_engst.m_cUserDefn + (ptman->m_engst.m_cCompPerLig * 2)
- + ptman->m_engst.m_cFeat;
- slot_varLenBuf += EngineState::kSlotBlockSize * cnExtraPerSlot * sizeof(u_intslot);
- for (size_t islotblk = 0; islotblk < ptman->m_engst.m_vslotblk.size(); islotblk++)
- {
- for (int islot = 0; islot < EngineState::kSlotBlockSize; islot++)
- {
- slot_count++;
- GrSlotState * pslot = ptman->m_engst.m_vslotblk[islotblk] + islot;
- slot_assocsUsed += pslot->m_vpslotAssoc.size();
- slot_assocsAlloc += pslot->m_vpslotAssoc.capacity();
- slot_attachUsed += pslot->m_vdislotAttLeaves.size();
- slot_attachAlloc += pslot->m_vdislotAttLeaves.capacity();
- }
- }
-
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the memory usage onto a stream.
-----------------------------------------------------------------------------------------------*/
-void FontMemoryUsage::prettyPrint(std::ostream & strm)
-{
- int totalBytes = total();
-
- strm << "Number of engines: " << eng_count << "\n";
- strm << "Number of passes: " << pass_count << "\n\n";
-
- strm << "Number of slot streams: " << sstrm_count << "\n";
- strm << "Number of slots: " << slot_count << "\n\n";
-
- int classTableTotal = clstbl_counters + clstbl_offsets + clstbl_glyphList;
- int glyphTableTotal = glftbl_general + glftbl_compDefns + glftbl_attrTable + glftbl_attrOffsets;
- int langTableTotal = lngtbl_general + lngtbl_entries + lngtbl_featureSets;
- int passTotal = pass_general + pass_fsm + pass_ruleExtras + pass_constraintOffsets + pass_constraintCode
- + pass_actionOffsets + pass_actionCode;
- int engineTotal = eng_overhead + eng_scalars + eng_strings + eng_pointers + eng_cmap + eng_nameTable
- + pseudoMap + classTableTotal + glyphTableTotal + langTableTotal + tman_general
- + passTotal;
-
- strm << "BYTE COUNT TOTALS\n";
- strm << "Font: " << font << "\n";
- strm << "Font cache: " << fontCache << "\n";
- strm << "Font face: " << fontFace << "\n";
- strm << "Engine " << engineTotal << "\n";
- strm << " Overhead: " << eng_overhead << "\n";
- strm << " Scalars: " << eng_scalars << "\n";
- strm << " Strings: " << eng_strings << "\n";
- strm << " Pointers: " << eng_pointers << "\n";
- strm << " Cmap table: " << eng_cmap << "\n";
- strm << " Name table: " << eng_nameTable << "\n";
- strm << " Pseudo map: " << pseudoMap << "\n";
- strm << " Class table: " << classTableTotal << "\n";
- strm << " Counters: " << clstbl_counters << "\n";
- strm << " Offsets: " << clstbl_offsets << "\n";
- strm << " Glyph list: " << clstbl_glyphList << "\n";
- strm << " Glyph table: " << glyphTableTotal << "\n";
- strm << " General: " << glftbl_general << "\n";
- strm << " Component defns: " << glftbl_compDefns << "\n";
- strm << " Attr table: " << glftbl_attrTable << "\n";
- strm << " Attr offsets: " << glftbl_attrOffsets << "\n";
- strm << " Language table: " << langTableTotal << "\n";
- strm << " General: " << lngtbl_general << "\n";
- strm << " Entries: " << lngtbl_entries << "\n";
- strm << " Feature sets: " << lngtbl_featureSets << "\n";
- strm << " Table manager: " << tman_general << "\n";
- strm << " Passes: " << passTotal << "\n";
- strm << " General: " << pass_general << "\n";
- strm << " FSM: " << pass_fsm << "\n";
- strm << " Rule extras: " << pass_ruleExtras << "\n";
- strm << " Constraint offsets: " << pass_constraintOffsets << "\n\n";
- strm << " Constraint code: " << pass_constraintCode << "\n";
- strm << " Action offsets: " << pass_actionOffsets << "\n";
- strm << " Action code: " << pass_actionCode << "\n\n";
-
- int slotTotal = slot_general + slot_abstract + slot_varLenBuf + slot_assocsAlloc + slot_attachAlloc;
- int streamTotal = sstrm_general + sstrm_chunkMapsAlloc + sstrm_reprocBuf + slotTotal;
- int engineStateTotal = engst_general + engst_passState + streamTotal;
-
- strm << " Engine State: " << engineStateTotal << "\n";
- strm << " General: " << engst_general << "\n";
- strm << " Pass states: " << engst_passState << "\n";
- strm << " Slot streams: " << streamTotal << "\n";
- strm << " General: " << sstrm_general << "\n";
- strm << " Chunk maps: " << sstrm_chunkMapsAlloc << " (" << sstrm_chunkMapsUsed << " used)\n";
- strm << " Reprocess buffer: " << sstrm_reprocBuf << "\n";
- strm << " Slots: " << slotTotal << "\n";
- strm << " General: " << slot_general << "\n";
- strm << " Abstract: " << slot_abstract << "\n";
- strm << " Var-length buf: " << slot_varLenBuf << "\n";
- strm << " Associations: " << slot_assocsAlloc << " (" << slot_assocsUsed << " used)\n";
- strm << " Attachments: " << slot_attachAlloc << " (" << slot_attachUsed << " used)\n\n";
-
- strm << "Total bytes used: " << totalBytes << "\n\n";
-
- strm << "TOTALS PER FONT\n";
- for (size_t ifont = 0; ifont < vstrFontNames.size(); ifont++)
- {
- strm << vstrFontNames[ifont].c_str() << "\n";
- strm << " Regular: " << vFontTotalsReg[ifont] << "\n";
- strm << " Bold: " << vFontTotalsBold[ifont] << "\n";
- strm << " Italic: " << vFontTotalsItalic[ifont] << "\n";
- strm << " Bold-italic: " << vFontTotalsBI[ifont] << "\n\n";
- }
-}
-
-
-//:>********************************************************************************************
-//:> Segment
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Initialize the data structure.
-----------------------------------------------------------------------------------------------*/
-void SegmentMemoryUsage::initialize()
-{
- seg_count = 0;
- overhead = 0;
- pointers = 0;
- scalars = 0;
- strings = 0;
- metrics = 0;
- associations = 0;
- init = 0;
- obsolete = 0;
-
- slot_count = 0;
- slot_abstract = 0;
- slot_varLenBuf = 0;
- slot_scalars = 0;
- slot_clusterMembers = 0;
-
- glyphInfo_count = 0;
- glyphInfo = 0;
-
- wastedVector = 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Add the memory for the segemtn to the SegmentMemoryUsage data structure.
-----------------------------------------------------------------------------------------------*/
-void Segment::calculateMemoryUsage(SegmentMemoryUsage & smu)
-{
- smu.addSegment(*this);
-}
-
-
-void SegmentMemoryUsage::addSegment(Segment & seg)
-{
- seg_count++;
-
- overhead += sizeof(long); // m_cref
- pointers += sizeof(void*); // m_pgts
- scalars += sizeof(int); // m_dichwLim
- scalars += sizeof(int); // m_ichwMin
- pointers += sizeof(void*); // m_pfont
- pointers += sizeof(void*); // m_preneng
- scalars += sizeof(bool); // m_fErroneous
- pointers += sizeof(void*); // m_pgjus
- scalars += sizeof(LayoutEnvironment);
- scalars += sizeof(bool); // m_fWsRtl
- scalars += sizeof(bool); // m_fParaRtl
- scalars += sizeof(TrWsHandling);
- scalars += sizeof(int); // m_nDirDepth
- init += sizeof(byte*); // m_prgbNextSegDat
- init += sizeof(int); // m_cbNextSegDat
- init += sizeof(byte) * seg.m_cbNextSegDat;
- init += sizeof(byte*); // m_prgInitDat
- init += sizeof(int); // m_cbInitDat
- init += sizeof(byte) * seg.m_cbInitDat;
- init += sizeof(int); // m_dichPreContext
-// obsolete += sizeof(void *); // m_psegPrev
-// obsolete += sizeof(void *); // m_psegNext
-// strings += stringOverhead * 2;
-// strings += sizeof(wchar_t) * seg.m_stuFaceName.length();
-// strings += sizeof(wchar_t) * seg.m_stuBaseFaceName.length();
-// scalars += sizeof(bool); // m_fUseSepBase;
-// scalars += sizeof(float); // m_pixHeight
-// scalars += sizeof(bool); // m_fBold
-// scalars += sizeof(bool); // m_fItalic
- scalars += sizeof(LineBrk); // m_lbStart
- scalars += sizeof(LineBrk); // m_lbEnd
- scalars += sizeof(bool); // m_fStartLine
- scalars += sizeof(bool); // m_fEndLine
- scalars += sizeof(SegEnd); // m_est
- metrics += sizeof(int); // m_mFontEmUnits
- metrics += sizeof(float) * 17; // was 19, removed m_x/ysDPI
- associations += sizeof(int); // m_ichwAssocsMin
- associations += sizeof(int); // m_ichwAssocsLim
- int dichw = seg.m_ichwAssocsLim - seg.m_ichwAssocsMin;
- associations += sizeof(int*); // m_prgisloutBefore
- associations += sizeof(int) * dichw;
- associations += sizeof(int*); // m_prgisloutAfter
- associations += sizeof(int) * dichw;
- associations += sizeof(void*); // m_prgpvisloutAssocs
- associations += sizeof(void*) * dichw;
- for (int idichw = 0; idichw < dichw; idichw++)
- {
- std::vector<int> * pvisloutAssocs = seg.m_prgpvisloutAssocs[idichw];
- if (pvisloutAssocs)
- {
- associations += vectorOverhead;
- associations += sizeof(int) * pvisloutAssocs->capacity();
- wastedVector += sizeof(int) * (pvisloutAssocs->capacity() - pvisloutAssocs->size());
- }
- }
- associations += sizeof(int*); // m_prgisloutLigature
- associations += sizeof(int) * dichw;
- associations += sizeof(sdata8*); // m_prgiComponent
- associations += sizeof(sdata8) * dichw;
-// obsolete += sizeof(void*); // m_psstrm
- scalars += sizeof(int); // m_cslout
- slot_count += seg.m_cslout;
- for (int islout = 0; islout < seg.m_cslout; islout++)
- {
- GrSlotOutput * pslout = seg.m_prgslout + islout;
- slot_abstract += sizeof(gid16) * 2; // m_chwGlyphID, m_chwActual
- slot_abstract += sizeof(sdata8) * 4; // m_spsl, m_dirc, m_lb, m_nDirLevel
-// slot_abstract += sizeof(float) * 8; // font/glyph metrics
- slot_abstract += sizeof(short) * 5; // slot attributes - was 21
- slot_abstract += sizeof(int); // m_mJWidth0;
- slot_abstract += sizeof(byte); // m_nJWeight0;
- slot_abstract += sizeof(bool); // m_fInsertBefore
- slot_abstract += sizeof(sdata8); // m_bIsSpace
- slot_abstract += sizeof(byte); // m_cnCompPerLig
- slot_abstract += sizeof(void*); // m_prgnVarLenBuf
- slot_varLenBuf += pslout->CExtraSpaceSlout() * sizeof(u_intslot);
- slot_abstract += sizeof(float); // m_xsPositionX, m_ysPositionY
-// slot_abstract += sizeof(bool); // m_fAdvXSet, m_fAdvYSet
- slot_scalars += sizeof(int) * 2; // m_ichwBefore/AfterAssoc
- slot_scalars += sizeof(sdata8); // m_cComponents
- slot_scalars += sizeof(int); // m_isloutClusterBase
- slot_scalars += sizeof(sdata8); // m_disloutCluster
- slot_scalars += sizeof(float) * 3; // m_xsClusterXOffset, m_xsClusterAdvance, m_xsAdvanceX
- slot_scalars += sizeof(int); // m_igbb
-// slot_scalars += sizeof(Rect); // m_rectBB
- }
- scalars += sizeof(int); // m_cnUserDefn
- scalars += sizeof(int); // m_cnCompPerLig
- scalars += sizeof(int); // m_cnFeat
- glyphInfo_count += seg.m_cginf;
- scalars += sizeof(int); // m_cginf;
- scalars += sizeof(int); // m_isloutGinf0
- for (int iginf = 0; iginf < seg.m_cginf; iginf++)
- {
- ///GlyphInfo * pginf = seg.m_prgginf + iginf;
- glyphInfo += sizeof(void *); // m_pseg
- glyphInfo += sizeof(void *); // m_pslout
- glyphInfo += sizeof(int); // m_islout
- }
- init += sizeof(int); // m_cslotRestartBackup
- init += vectorOverhead;
- init += sizeof(sdata8) * seg.m_vnSkipOffsets.capacity();
- wastedVector += sizeof(sdata8) * (seg.m_vnSkipOffsets.capacity() - seg.m_vnSkipOffsets.size());
- init += sizeof(DirCode); // m_dircPrevStrong
- init += sizeof(DirCode); // m_dircPrevTerm
-
- //int grandTotal;
- //grandTotal = overhead + pointers + scalars + strings + metrics + associations
- // + init + obsolete + slot_count + slot_abstract + slot_varLenBuf + slot_scalars
- // + slot_clusterMembers + glyphInfo_count + glyphInfo;
-
- //int totalPerSeg = grandTotal / seg_count;
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the memory usage onto a stream.
-----------------------------------------------------------------------------------------------*/
-void SegmentMemoryUsage::prettyPrint(std::ostream & strm)
-{
- int totalBytes = overhead + pointers + scalars + strings + metrics + associations
- + init + obsolete + slot_count + slot_abstract + slot_varLenBuf + slot_scalars
- + slot_clusterMembers + glyphInfo_count + glyphInfo;
-
- int slotTotal = slot_abstract + slot_varLenBuf + slot_scalars + slot_clusterMembers;
-
- strm << "Number of segments: " << seg_count << "\n\n";
-
- strm << "TOTALS\n";
- strm << "Overhead: " << overhead << "\n";
- strm << "Pointers: " << pointers << "\n";
- strm << "Scalars: " << scalars << "\n";
- strm << "Strings: " << strings << "\n";
- strm << "Metrics: " << metrics << "\n";
- strm << "Associations: " << associations << "\n";
- strm << "Obsolete: " << obsolete << "\n";
- strm << "Slot data: " << slotTotal << "\n";
- strm << " Abstract: " << slot_abstract << "\n";
- strm << " Var-length buffer: " << slot_varLenBuf << "\n";
- strm << " Scalars: " << slot_scalars << "\n";
- strm << " Cluster members: " << slot_clusterMembers << "\n";
- strm << "Glyph info: " << glyphInfo << "\n\n";
-
- strm << "Wasted in vectors: " << wastedVector << "\n\n";
-
- strm << "Total bytes used: " << totalBytes << "\n\n";
-
- if (seg_count > 0)
- {
- strm << "AVERAGES\n";
- strm << "Overhead: " << overhead/seg_count << "\n";
- strm << "Pointers: " << pointers/seg_count << "\n";
- strm << "Scalars: " << scalars/seg_count << "\n";
- strm << "Strings: " << strings/seg_count << "\n";
- strm << "Metrics: " << metrics/seg_count << "\n";
- strm << "Associations: " << associations/seg_count << "\n";
- strm << "Obsolete: " << obsolete/seg_count << "\n";
- strm << "Slot data: " << slotTotal/seg_count << "\n";
- strm << " Abstract: " << slot_abstract/seg_count << "\n";
- strm << " Var-length buffer: " << slot_varLenBuf/seg_count << "\n";
- strm << " Scalars: " << slot_scalars/seg_count << "\n";
- strm << " Cluster members: " << slot_clusterMembers/seg_count << "\n";
- strm << "Glyph info: " << glyphInfo/seg_count << "\n\n";
-
- strm << "Avg. bytes per segment: " << totalBytes / seg_count << "\n\n";
-
- strm << "Avg. # of slots per segment: " << slot_count / seg_count << "\n\n";
- }
-}
-
-} //namespace gr
-
diff --git a/Build/source/libs/graphite-engine/src/segment/Platform.cpp b/Build/source/libs/graphite-engine/src/segment/Platform.cpp
deleted file mode 100644
index 30ec3f4bf1f..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/Platform.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-#include "GrPlatform.h"
-
-#ifdef _WIN32
-#include "windows.h"
-
-namespace gr
-{
-
-size_t Platform_UnicodeToANSI(const utf16 * prgchwSrc, size_t cchwSrc, char * prgchsDst, size_t cchsDst)
-{
- return ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)prgchwSrc, cchwSrc, prgchsDst, cchsDst, NULL, NULL);
-}
-
-size_t Platform_AnsiToUnicode(const char * prgchsSrc, size_t cchsSrc, utf16 * prgchwDst, size_t cchwDst)
-{
- return ::MultiByteToWideChar(CP_ACP, 0, prgchsSrc, cchsSrc, (LPWSTR)prgchwDst, cchwDst);
-}
-
-size_t Platform_8bitToUnicode(int nCodePage, const char * prgchsSrc, int cchsSrc,
- utf16 * prgchwDst, int cchwDst)
-{
- return ::MultiByteToWideChar(nCodePage, 0, prgchsSrc, cchsSrc, (LPWSTR)prgchwDst, cchwDst);
-}
-
-size_t utf8len(const char *s)
-{
- return mbstowcs(NULL,s,0);
-}
-
-utf16 *utf16cpy(utf16 *dest, const utf16 *src)
-{
- return (utf16*)wcscpy((wchar_t*)dest, (const wchar_t*)src);
-}
-
-utf16 *utf16ncpy(utf16 *dest, const utf16 *src, size_t n)
-{
- return (utf16*)wcsncpy((wchar_t*)dest, (const wchar_t*)src, n);
-}
-
-utf16 *utf16ncpy(utf16 *dest, const char *src, size_t n)
-{
- #ifdef UTF16DEBUG
- std::cerr << "utf16ncpy8: " << src << std::endl;
- #endif
- Platform_AnsiToUnicode(src, strlen(src), dest, n);
- return dest;
-}
-
-
-size_t utf16len(const utf16 *s)
-{
- return wcslen((const wchar_t*)s);
-}
-
-int utf16cmp(const utf16 *s1, const utf16 *s2)
-{
-return wcscmp((const wchar_t*)s1, (const wchar_t*)s2);
-}
-
-int utf16ncmp(const utf16 *s1, const utf16 *s2, size_t n)
-{
- return wcsncmp((const wchar_t*)s1, (const wchar_t*)s2, n);
-}
-
-int utf16cmp(const utf16 *s1, const char *s2)
-{
- while (*s1 && s2)
- {
- if (*s1 < *s2)
- {
- return -1;
- }
- if (*s1 > *s2)
- {
- return 1;
- }
- *s1++;
- *s2++;
- }
- if (*s1) return -1;
- else if (*s2) return 1;
- return 0;
-}
-
-}
-#else // not _WIN32
-
-#include <iostream>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef HAVE_FABSF
-float fabsf(float x)
-{
- return (x < 0.0f) ? -x : x;
-}
-#endif
-
-namespace gr
-{
-
-size_t utf16len(const utf16 *s)
-{
- // assumes NULL terminated strings
- const utf16 *start = s;
- for (; *s; ++s);
-
- return s - start;
-}
-
-} // namespace gr
-#endif // _WIN32
-
diff --git a/Build/source/libs/graphite-engine/src/segment/Segment.cpp b/Build/source/libs/graphite-engine/src/segment/Segment.cpp
deleted file mode 100644
index b936b037a64..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/Segment.cpp
+++ /dev/null
@@ -1,3547 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: Segment.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements a Graphite segment--a range of rendered text in one writing system, that can be
- rendered with a single font, and that fits on a single line.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-#include <math.h>
-#ifndef _WIN32
-#include <stdlib.h>
-#endif
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-#if 0 // TODO remove
-namespace
-{
-
-static bool g_fDrawing;
-
-} // namespace
-#endif
-
-
-static int g_csegTotal = 0;
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Segment methods
-//:>********************************************************************************************
-
-
-int Segment::GetSegmentCount() /// TEMP
-{
- return g_csegTotal;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Constructor: basic initialization.
-----------------------------------------------------------------------------------------------*/
-Segment::Segment() :
- m_pgts(NULL),
- m_pfont(NULL),
- m_preneng(NULL),
- m_fErroneous(false),
- m_pgjus(NULL),
- m_prgbNextSegDat(NULL),
- m_cbNextSegDat(0),
- m_prgInitDat(NULL),
- m_cbInitDat(0),
-// m_fUseSepBase(0),
- //m_psegAltEndLine(NULL),
- m_prgisloutBefore(NULL),
- m_prgisloutAfter(NULL),
- m_prgpvisloutAssocs(NULL),
- m_prgisloutLigature(NULL),
- m_prgiComponent(NULL),
-// m_psstrm(NULL),
- m_cslout(0),
- m_prgslout(NULL),
- m_prgnSlotVarLenBuf(NULL),
-// m_cnUserDefn(0),
- m_cnCompPerLig(0),
-// m_cnFeat(0),
- m_cginf(0),
- m_prgginf(NULL)
-{
- m_cref = 1;
-
- g_csegTotal++;
-
-// m_stuFaceName.erase();
-// m_stuBaseFaceName.erase();
- m_vnSkipOffsets.clear();
-}
-
-/*----------------------------------------------------------------------------------------------
- Reference counting.
-----------------------------------------------------------------------------------------------*/
-
-long Segment::IncRefCount(void)
-{
- AssertPtr(this);
- return InterlockedIncrement(&m_cref);
-}
-
-long Segment::DecRefCount(void)
-{
- AssertPtr(this);
- long cref = InterlockedDecrement(&m_cref);
- if (cref == 0) {
- m_cref = 1;
- delete this;
- }
- return cref;
-}
-
-/*----------------------------------------------------------------------------------------------
- Constructor to fit as much of the text on the line as possible,
- finding a reasonable break point if necessary.
-----------------------------------------------------------------------------------------------*/
-LineFillSegment::LineFillSegment(
- Font * pfont,
- ITextSource * pts,
- LayoutEnvironment * playoutArg,
- toffset ichStart,
- toffset ichStop,
- float xsMaxWidth,
- bool fBacktracking)
- : Segment()
-{
- if (!pfont)
- throw;
- if (!pts)
- throw;
-
- LayoutEnvironment layoutDefault;
- LayoutEnvironment * playout = (!playoutArg) ? &layoutDefault : playoutArg;
-
- pfont->RenderLineFillSegment(this, pts, *playout, ichStart, ichStop, xsMaxWidth,
- fBacktracking);
-}
-
-/*----------------------------------------------------------------------------------------------
- Constructor to create a segment representing the given range of characters.
-----------------------------------------------------------------------------------------------*/
-RangeSegment::RangeSegment(
- Font * pfont,
- ITextSource * pts,
- LayoutEnvironment * playoutArg,
- toffset ichStart,
- toffset ichStop,
- Segment * psegInitLike)
- : Segment()
-{
- if (!pfont)
- throw;
- if (!pts)
- throw;
-
- LayoutEnvironment layoutDefault;
- LayoutEnvironment * playout = (!playoutArg) ? &layoutDefault : playoutArg;
- playout->setSegmentForInit(psegInitLike);
-
- pfont->RenderRangeSegment(this, pts, *playout, ichStart, ichStop);
-
- playout->setSegmentForInit(NULL);
-}
-
-/*----------------------------------------------------------------------------------------------
- Constructor to create a justified segment. Private.
-----------------------------------------------------------------------------------------------*/
-JustSegmentAux::JustSegmentAux(
- Font * pfont,
- ITextSource * pts,
- LayoutEnvironment * playoutArg,
- toffset ichStart,
- toffset ichStop,
- float xsNaturalWidth,
- float xsJustifiedWidth,
- Segment * psegInitLike)
- : Segment()
-{
- if (!pfont)
- throw;
- if (!pts)
- throw;
-
- LayoutEnvironment layoutDefault;
- LayoutEnvironment * playout = (!playoutArg) ? &layoutDefault : playoutArg;
- playout->setSegmentForInit(psegInitLike);
-
- pfont->RenderJustifiedSegment(this, pts, *playout, ichStart, ichStop,
- xsNaturalWidth, xsJustifiedWidth);
-
- playout->setSegmentForInit(NULL);
-}
-
-//Segment::Segment(ITextSource * pgts, int ichwMin, int ichwLim,
-// LineBrk lbStart, LineBrk lbEnd,
-// bool fStartLine, bool fEndLine, bool fWsRtl)
-//{
-// m_cref = 1;
-// Initialize(pgts, ichwMin, ichwLim, lbStart, lbEnd, fStartLine, fEndLine, fWsRtl);
-//}
-
-void Segment::Initialize(ITextSource * pgts, int ichwMin, int ichwLim,
- LineBrk lbStart, LineBrk lbEnd, SegEnd est,
- bool fStartLine, bool fEndLine, bool fWsRtl)
-{
- AssertPtrN(pgts);
- Assert(ichwMin >= 0);
- Assert(ichwLim >= 0);
- Assert(ichwMin <= ichwLim);
-
- //pgts->TextSrcObject(&m_pgts); // create a permanent wrapper, if necessary
- // m_pgts->AddRef(); no, smart pointer
- m_pgts = pgts;
-
- m_ichwMin = ichwMin;
- m_dichwLim = ichwLim - ichwMin;
- m_lbStart = lbStart;
- m_lbEnd = lbEnd;
- m_est = est;
- m_dxsStretch = 0;
- m_dxsWidth = -1;
- m_dysAscent = -1; // to properly init, ComputeDimensions must be called
- m_dysHeight = -1;
- m_dysXAscent = -1;
- m_dysXDescent = -1;
- m_dysAscentOverhang = -1;
- m_dysDescentOverhang = -1;
- m_dxsLeftOverhang = -1;
- m_dxsRightOverhang = -1;
- m_dysOffset = 0;
- m_fStartLine = fStartLine;
- m_fEndLine = fEndLine;
- m_fWsRtl = fWsRtl;
-
- m_dxsVisibleWidth = -1;
- m_dxsTotalWidth = -1;
-
-// m_psstrm = NULL;
- m_prgslout = NULL;
- m_prgnSlotVarLenBuf = NULL;
- m_prgisloutBefore = NULL;
- m_prgisloutAfter = NULL;
- m_prgpvisloutAssocs = NULL;
- m_prgisloutLigature = NULL;
- m_prgiComponent = NULL;
-
- m_prgbNextSegDat = NULL;
- m_cbNextSegDat = 0;
-
- //m_psegAltEndLine = NULL;
-
-// m_stuFaceName.erase();
-// m_stuBaseFaceName.erase();
-// m_fUseSepBase = false;
-
-// m_psegPrev = NULL; // obsolete
-// m_psegNext = NULL;
-
- //InitializePlatform();
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-Segment::~Segment()
-{
- g_csegTotal--;
-
- DestroyContents();
-}
-
-void Segment::DestroyContents()
-{
- delete m_pfont;
- m_pfont = NULL;
-
- //if (m_pgts)
- // // A specially-created wrapper object has to be deleted.
- // m_pgts->DeleteTextSrcPtr();
- m_pgts = NULL;
-
- //if (m_pgjus)
- // // A specially-created wrapper object has to be deleted.
- // m_pgjus->DeleteJustifierPtr();
- m_pgjus = NULL;
-
- //if (m_psegAltEndLine)
- //{
- // if (m_psegAltEndLine->m_psegAltEndLine == this)
- // m_psegAltEndLine->m_psegAltEndLine = NULL;
- // delete m_psegAltEndLine;
- //}
-
- //for (int iginf = 0; iginf < m_cginf; iginf++) // DELETE
- // delete m_prgginf[iginf].components;
-
- Assert((m_prgslout && m_prgnSlotVarLenBuf) || (!m_prgslout && !m_prgnSlotVarLenBuf));
- delete[] m_prgslout;
- delete[] m_prgnSlotVarLenBuf;
- delete[] m_prgisloutBefore;
- delete[] m_prgisloutAfter;
- for (int ichw = 0; ichw < m_ichwAssocsLim - m_ichwAssocsMin; ichw++)
- {
- if (m_prgpvisloutAssocs && m_prgpvisloutAssocs[ichw])
- delete m_prgpvisloutAssocs[ichw];
- }
- delete[] m_prgpvisloutAssocs;
- delete[] m_prgisloutLigature;
- delete[] m_prgiComponent;
- delete[] m_prgbNextSegDat;
- delete[] m_prgInitDat;
- delete[] m_prgginf;
- m_cginf = 0;
-
- //DestroyContentsPlatform();
-
- // ReleaseObj(m_pgts); automatic because smart pointer
-}
-
-/*----------------------------------------------------------------------------------------------
- Factory method to create a new version of an existing segment with different
- line-boundary flags.
-----------------------------------------------------------------------------------------------*/
-Segment * Segment::LineContextSegment(Segment & seg, bool fStartLine, bool fEndLine)
-{
- if (!seg.hasLineBoundaryContext())
- {
- // Make an identical segment and just change the flags.
- Segment * psegNew = new Segment(seg);
- psegNew->InitLineContextSegment(fStartLine, fEndLine);
- return psegNew;
- }
- else
- {
- // Rerun the processing.
- LayoutEnvironment layout = seg.Layout();
- layout.setStartOfLine(fStartLine);
- layout.setEndOfLine(fEndLine);
- ITextSource & gts = seg.getText();
- Font & font = seg.getFont();
- return new RangeSegment(&font, &gts, &layout,
- seg.startCharacter(), seg.stopCharacter(), &seg);
- }
-}
-
-void Segment::InitLineContextSegment(bool fStartLine, bool fEndLine)
-{
- // For RTL end-of-line segments, trailing white space hangs off the left of
- // the origin of the segment. So when changing that flag
- // shift appropriately.
- bool fShift = ((m_nDirDepth % 2) && (m_fEndLine != fEndLine));
-
- m_fStartLine = fStartLine;
- m_fEndLine = fEndLine;
-
- m_layout.setStartOfLine(fStartLine);
- m_layout.setEndOfLine(fEndLine);
-
- if (fShift)
- {
- (m_fEndLine) ?
- ShiftGlyphs(m_dxsVisibleWidth - m_dxsTotalWidth) : // shift left
- ShiftGlyphs(m_dxsTotalWidth - m_dxsVisibleWidth); // shift right
- }
-
- m_dxsWidth = -1;
-}
-
-/*----------------------------------------------------------------------------------------------
- A factory method to create a justified version of an existing segment.
-----------------------------------------------------------------------------------------------*/
-Segment * Segment::JustifiedSegment(Segment & seg, float xsNewWidth)
-{
- LayoutEnvironment layout(seg.Layout());
- ITextSource & gts = seg.getText();
-
- // Why do we have to do this?
- layout.setJustifier(seg.Justifier());
- Font & font = seg.getFont();
- return new JustSegmentAux(&font, &gts, &layout,
- seg.startCharacter(), seg.stopCharacter(),
- seg.advanceWidth(), xsNewWidth, &seg);
-}
-
-/*----------------------------------------------------------------------------------------------
- A factory method to create a new version of an existing trailing white-space segment
- with a different direction.
-----------------------------------------------------------------------------------------------*/
-Segment * Segment::WhiteSpaceSegment(Segment & seg, int nNewDepth)
-{
- Segment * psegNew = new Segment(seg);
- psegNew->InitWhiteSpaceSegment(nNewDepth);
- return psegNew;
-}
-
-void Segment::InitWhiteSpaceSegment(int nNewDepth)
-{
- if (nNewDepth == m_nDirDepth)
- {
- return;
- }
- else if ((nNewDepth % 2) == (m_nDirDepth % 2))
- {
- // Same direction, not much to change.
- m_nDirDepth = nNewDepth;
- return;
- }
- else if (m_twsh != ktwshOnlyWs)
- return; // couldn't change it, oh, well
-
- // Otherwise, do the hard stuff: reverse the positions of the glyphs.
- for (int islout = 0; islout < m_cslout; islout++)
- {
- OutputSlot(islout)->ShiftForDirDepthChange(m_dxsTotalWidth);
- }
- m_nDirDepth = nNewDepth;
-
- //SetDirectionDepthPlatform(nNewDepth);
-}
-
-/*----------------------------------------------------------------------------------------------
- Basic copy method.
-----------------------------------------------------------------------------------------------*/
-Segment::Segment(Segment & seg)
-{
- int islout;
-
- m_pgts = seg.m_pgts;
- m_dichwLim = seg.m_dichwLim;
- m_ichwMin = seg.m_ichwMin;
- m_pfont = seg.m_pfont->copyThis();
- m_preneng = seg.m_preneng;
- m_fErroneous = seg.m_fErroneous;
- m_pgjus = seg.m_pgjus;
- m_fWsRtl = seg.m_fWsRtl;
- m_fParaRtl = seg.m_fParaRtl;
- m_twsh = seg.m_twsh;
- m_nDirDepth = seg.m_nDirDepth;
- m_cbNextSegDat = seg.m_cbNextSegDat;
- m_prgbNextSegDat = new byte[m_cbNextSegDat];
- std::copy(seg.m_prgbNextSegDat, seg.m_prgbNextSegDat + m_cbNextSegDat, m_prgbNextSegDat);
-// m_psegPrev = seg.m_psegPrev;
-// m_psegNext = seg.m_psegNext;
-// m_stuFaceName = seg.m_stuFaceName;
-// m_stuBaseFaceName = seg.m_stuBaseFaceName;
-// m_fUseSepBase = seg.m_fUseSepBase;
-// m_pixHeight = seg.m_pixHeight;
-// m_fBold = seg.m_fBold;
-// m_fItalic = seg.m_fItalic;
- m_lbStart = seg.m_lbStart;
- m_lbEnd = seg.m_lbEnd;
- m_fStartLine = seg.m_fStartLine;
- m_fEndLine = seg.m_fEndLine;
- m_est = seg.m_est;
- m_mFontEmUnits = seg.m_mFontEmUnits;
- m_dysFontAscent = seg.m_dysFontAscent;
- m_dysFontDescent = seg.m_dysFontDescent;
- m_xysEmSquare = seg.m_xysEmSquare;
-// m_xsDPI = seg.m_xsDPI;
-// m_ysDPI = seg.m_ysDPI;
- m_dxsStretch = seg.m_dxsStretch;
- m_dxsWidth = seg.m_dxsWidth;
- m_dysHeight = seg.m_dysHeight;
- m_dysAscent = seg.m_dysAscent;
- m_dysXAscent = seg.m_dysXAscent;
- m_dysXDescent = seg.m_dysXDescent;
- m_dysAscentOverhang = seg.m_dysAscentOverhang;
- m_dysDescentOverhang = seg.m_dysDescentOverhang;
- m_dxsLeftOverhang = seg.m_dxsLeftOverhang;
- m_dxsRightOverhang = seg.m_dxsRightOverhang;
- m_dxsVisibleWidth = seg.m_dxsVisibleWidth;
- m_dxsTotalWidth = seg.m_dxsTotalWidth;
- m_isloutVisLim = seg.m_isloutVisLim;
- m_dysOffset = seg.m_dysOffset;
-
- m_ichwAssocsMin = seg.m_ichwAssocsMin;
- m_ichwAssocsLim = seg.m_ichwAssocsLim;
-
- int dichw = m_ichwAssocsLim - m_ichwAssocsMin;
- m_prgisloutBefore = new int[dichw];
- std::copy(seg.m_prgisloutBefore, seg.m_prgisloutBefore + dichw, m_prgisloutBefore);
- m_prgisloutAfter = new int[dichw];
- std::copy(seg.m_prgisloutAfter, seg.m_prgisloutAfter + dichw, m_prgisloutAfter);
- m_prgpvisloutAssocs = new std::vector<int> * [dichw];
- for (int ivislout = 0; ivislout < dichw; ivislout++)
- {
- std::vector<int> * pvislout = seg.m_prgpvisloutAssocs[ivislout];
- if (pvislout)
- {
- std::vector<int> * pvisloutNew = new std::vector<int>;
- m_prgpvisloutAssocs[ivislout] = pvisloutNew;
- *pvisloutNew = *pvislout; // copy the vector
- }
- }
- m_prgisloutLigature = new int[dichw];
- std::copy(seg.m_prgisloutLigature, seg.m_prgisloutLigature + dichw, m_prgisloutLigature);
- m_prgiComponent = new sdata8[dichw];
- std::copy(seg.m_prgiComponent, seg.m_prgiComponent + dichw, m_prgiComponent);
-
- m_cslout = seg.m_cslout;
- int cnExtraPerSlot = (m_cslout > 0) ? seg.m_prgslout[0].CExtraSpaceSlout() : 0;
- m_prgnSlotVarLenBuf = new u_intslot[m_cslout * cnExtraPerSlot];
- m_prgslout = new GrSlotOutput[m_cslout];
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutOrig = seg.m_prgslout + islout;
- GrSlotOutput * psloutThis = m_prgslout + islout;
- psloutThis->ExactCopyFrom(psloutOrig,
- m_prgnSlotVarLenBuf + (islout * cnExtraPerSlot), // var-length buffer location
- cnExtraPerSlot);
- }
-
-// m_cnUserDefn = seg.m_cnUserDefn;
- m_cnCompPerLig = seg.m_cnCompPerLig;
-// m_cnFeat = seg.m_cnFeat;
- m_cslotRestartBackup = seg.m_cslotRestartBackup;
- std::copy(seg.m_prgnSlotVarLenBuf, seg.m_prgnSlotVarLenBuf +
- (m_cslout * cnExtraPerSlot), m_prgnSlotVarLenBuf);
-
- m_cginf = seg.m_cginf;
- m_isloutGinf0 = seg.m_isloutGinf0;
- m_prgginf = new GlyphInfo[m_cginf];
- std::copy(seg.m_prgginf, seg.m_prgginf + m_cginf, m_prgginf);
- for (int iginf = 0; iginf < m_cginf; iginf++)
- {
- m_prgginf[iginf].m_pseg = this;
- m_prgginf[iginf].m_pslout = m_prgslout + m_prgginf[iginf].m_islout;
- }
-
- // Platform-specific; remove eventually:
- //m_cgstrm = seg.m_cgstrm;
- //m_prggstrm = new GlyphStrm[m_cgstrm];
- //for (int igstrm = 0; igstrm < m_cgstrm; igstrm++)
- //{
- // m_prggstrm[igstrm].gsk.ys = seg.m_prggstrm[igstrm].gsk.ys;
- // m_prggstrm[igstrm].gsk.clrFore = seg.m_prggstrm[igstrm].gsk.clrFore;
- // m_prggstrm[igstrm].gsk.clrBack = seg.m_prggstrm[igstrm].gsk.clrBack;
- // m_prggstrm[igstrm].vchwGlyphId = seg.m_prggstrm[igstrm].vchwGlyphId;
- // m_prggstrm[igstrm].vdxs = seg.m_prggstrm[igstrm].vdxs;
- // m_prggstrm[igstrm].vigbb = seg.m_prggstrm[igstrm].vigbb;
- // m_prggstrm[igstrm].xsStart = seg.m_prggstrm[igstrm].xsStart;
- // m_prggstrm[igstrm].xsStartInt = seg.m_prggstrm[igstrm].xsStartInt;
- //}
- //m_cgbb = seg.m_cgbb;
- //m_prggbb = new GlyphBb[m_cgbb];
- //memcpy(m_prggbb, seg.m_prggbb, m_cgbb * sizeof(GlyphBb));
- //-------------------------------------
-
- m_vnSkipOffsets = seg.m_vnSkipOffsets;
- m_dircPrevStrong = seg.m_dircPrevStrong;
- m_dircPrevTerm = seg.m_dircPrevTerm;
- m_cbInitDat = seg.m_cbInitDat;
- m_prgInitDat = new byte[m_cbInitDat];
- std::copy(seg.m_prgInitDat, seg.m_prgInitDat + m_cbInitDat, m_prgInitDat);
-}
-
-/*----------------------------------------------------------------------------------------------
- Swap the guts of the two segments.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void Segment::SwapWith(Segment * pgrseg)
-{
- int crefThis = m_cref;
- int crefOther = pgrseg->m_cref;
-
- std::swap(*this, *pgrseg);
-
- m_cref = crefThis;
- pgrseg->m_cref = crefOther;
-}
-
-/*----------------------------------------------------------------------------------------------
- Delete the pointer to the alternate-end-of-line segment.
-----------------------------------------------------------------------------------------------*/
-void Segment::ClearAltEndLineSeg()
-{
- //if (m_psegAltEndLine)
- //{
- // if (m_psegAltEndLine->m_psegAltEndLine == this)
- // m_psegAltEndLine->m_psegAltEndLine = NULL; // so we don't get into a loop
- // delete m_psegAltEndLine;
- // m_psegAltEndLine = NULL;
- //}
-}
-
-
-//:>********************************************************************************************
-//:> Interface methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Return the font that was used to create this segment.
- Note that in some implementations, the font may be invalid; eg, on Windows the font
- may not contain a valid device context.
-----------------------------------------------------------------------------------------------*/
-Font & Segment::getFont()
-{
- return *m_pfont;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the text-source that the segment is representing.
-----------------------------------------------------------------------------------------------*/
-ITextSource & Segment::getText()
-{
- return *m_pgts;
-}
-
-/*----------------------------------------------------------------------------------------------
- The distance the drawing point should advance after drawing this segment.
- Always positive, even for RtoL segments.
-----------------------------------------------------------------------------------------------*/
-float Segment::advanceWidth()
-{
- if (m_dxsWidth < 0)
- {
- ////SetUpGraphics(ichwBase, pgg, true);
- ComputeDimensions();
- }
- return m_dxsWidth;
-}
-
-/*----------------------------------------------------------------------------------------------
- Compute the rectangle in destination coords which contains all the pixels drawn by
- this segment. This should be a sufficient rectangle to invalidate if the segment is
- about to be discarded.
-----------------------------------------------------------------------------------------------*/
-Rect Segment::boundingRect()
-{
- if (m_dxsWidth < 0)
- {
- ////SetUpGraphics(ichwBase, pgg, true);
- ComputeDimensions();
- }
-
- Rect rectRet;
- rectRet.top = m_dysAscent + m_dysAscentOverhang;
- rectRet.bottom = (m_dysAscent - m_dysHeight) - m_dysDescentOverhang;
- rectRet.left = m_dxsLeftOverhang;
- rectRet.right = m_dxsVisibleWidth + m_dxsRightOverhang;
-
- return rectRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Answer whether the primary direction of the segment is right-to-left. This is based
- on the direction of the writing system, except for white-space-only segments, in
- which case it is based on the main paragraph direction.
-----------------------------------------------------------------------------------------------*/
-bool Segment::rightToLeft()
-{
- if (m_twsh == ktwshOnlyWs)
- {
- // White-space-only segment: use main paragraph direction.
- return (m_nDirDepth % 2);
- }
-
- GrEngine * pgreng = EngineImpl();
- if (pgreng)
- {
- return pgreng->RightToLeft();
- }
- return (m_pgts->getRightToLeft(m_ichwMin));
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the depth of direction embedding used by this segment. It is presumably the same
- for all runs of the segment, otherwise, some of them would use a different writing
- system and therefore be part of a different segment. So just use the first.
-----------------------------------------------------------------------------------------------*/
-int Segment::directionDepth(bool * pfWeak)
-{
- if (pfWeak)
- *pfWeak = (m_twsh == ktwshOnlyWs);
-
-// *pnDepth = m_pgts->getDirectionDepth(m_ichwLim);
-// Assert(*pnDepth == m_nDirDepth);
-
- return m_nDirDepth;
-}
-
-/*----------------------------------------------------------------------------------------------
- Change the direction of the segment. This is needed specifically for white-space-only
- segments, which are initially created to be in the direction of the paragraph, but then
- later are discovered to not be line-end after all, and need to be changed to use the
- directionality of the writing system.
-
- @return kresFail for segments that do not have weak directionality and therefore
- cannot be changed.
-----------------------------------------------------------------------------------------------*/
-bool Segment::setDirectionDepth(int nNewDepth)
-{
- Assert(false);
-
- if (nNewDepth == m_nDirDepth)
- {
- return true;
- }
- else if ((nNewDepth % 2) == (m_nDirDepth % 2))
- {
- // Same direction, not much to change.
- m_nDirDepth = nNewDepth;
- return true;
- }
- else if (m_twsh != ktwshOnlyWs)
- return false;
-
- // Otherwise, do the hard stuff: reverse the positions of the glyphs.
- for (int islout = 0; islout < m_cslout; islout++)
- {
- OutputSlot(islout)->ShiftForDirDepthChange(m_dxsTotalWidth);
- }
-
- //SetDirectionDepthPlatform(nNewDepth);
-
- return true;
-
-}
-
-/*----------------------------------------------------------------------------------------------
- The logical range of characters covered by the segment, relative to the beginning of
- the segment. The stop character is the index of the first character beyond the end
- of the segment.
-
- These values should be exact at a writing system or string boundary,
- but may be somewhat fuzzy at a line-break, since characters may be re-ordered
- across such boundaries. The renderer is free to apply any definition it likes of
- where a line-break occurs. This should always be the same value obtained from the
- renderer as pdichLimSeg.
-----------------------------------------------------------------------------------------------*/
-int Segment::startCharacter()
-{
- return m_ichwMin;
-}
-
-int Segment::stopCharacter()
-{
- return m_ichwMin + m_dichwLim;
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns an indication of why the segment ended.
-----------------------------------------------------------------------------------------------*/
-bool Segment::startOfLine()
-{
- return m_fStartLine;
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns an indication of why the segment ended.
-----------------------------------------------------------------------------------------------*/
-bool Segment::endOfLine()
-{
- return m_fEndLine;
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns true if this segment has something special happening at line boundaries.
-----------------------------------------------------------------------------------------------*/
-bool Segment::hasLineBoundaryContext()
-{
- return (EngineImpl()->LineBreakFlag());
-}
-
-/*----------------------------------------------------------------------------------------------
- Returns an indication of why the segment ended.
-----------------------------------------------------------------------------------------------*/
-SegEnd Segment::segmentTermination()
-{
- return m_est;
-}
-
-/*----------------------------------------------------------------------------------------------
- Indicates the last character of interest to the segment, relative to the beginning
- of the segment. The meaning of this is that no behavior of this segment will be
- affected if characters beyond that change. This does not necessarily mean that
- a different line break could not have been obtained by the renderer if characters
- beyond that change, just that a segment with the boundaries of this one would
- not behave differently.
-----------------------------------------------------------------------------------------------*/
-//GrResult Segment::get_LimInterest(int ichwBase, int * pdichw)
-//{
-// ChkGrOutPtr(pdichw);
-//
-// GrEngine * pgreng = EngineImpl();
-// Assert(pgreng);
-// *pdichw = m_dichwLim + pgreng->PostXlbContext();
-// ReturnResult(kresOk);
-//}
-
-/*----------------------------------------------------------------------------------------------
- Changes the end-of-line status of the segment. This is used after making the last segment
- of a string if we want to attempt to put some more text after it (e.g., in another
- writing system), or if we have reordered due to bidirectionality.
-
- ENHANCE: the current version handles switching back and forth when we are trying to
- decide whether we can put more stuff on a line. So it assumes we are at the end of
- the contextual run (ie, the next batch of stuff will be in a different ows).
- This will not correctly handle the way this function could or possibly
- should be used for bidirectional reordering.
-----------------------------------------------------------------------------------------------*/
-/*
-GrResult Segment::changeLineEnds(bool fNewStart, bool fNewEnd)
-{
- if (m_fStartLine != fNewStart || m_fEndLine != fNewEnd)
- {
- if (EngineImpl()->LineBreakFlag())
- {
- if (!m_psegAltEndLine)
- {
- int dichwLimSeg, dichwContext;
- float dxWidth;
- SegEnd est;
- int cbNextSegDat;
- byte rgbNextSegDat[256];
- OLECHAR rgchErrMsg[256];
- Segment * pseg;
-
- EngineImpl()->FindBreakPointAux(m_pfont, m_pgts, m_pgjus,
- m_ichwMin, m_ichwMin + m_dichwLim, m_ichwMin + m_dichwLim,
- false, fNewStart, fNewEnd, kPosInfFloat, false,
- klbNoBreak, klbNoBreak, m_twsh, m_fParaRtl,
- &pseg,
- &dichwLimSeg, &dxWidth, &est,
- m_cbInitDat, m_prgInitDat, 256, rgbNextSegDat, &cbNextSegDat,
- &dichwContext,
- NULL,
- rgchErrMsg, 256);
- // TODO: do something with the error message. This shouldn't really happen,
- // since to get here we already created a segment with this font.
- if (!pseg)
- {
- // Because we provide INT_MAX as the amount of space, there should
- // always be enough room to generate the alternate segment.
- Assert(false);
- THROW(kresUnexpected);
- }
- Assert(cbNextSegDat == 0);
- m_psegAltEndLine = pseg;
- }
- Assert(m_psegAltEndLine->m_fEndLine == fNewEnd);
- Segment * pseg = m_psegAltEndLine; // save the value
- SwapWith(m_psegAltEndLine);
- m_psegAltEndLine = pseg; // reset it after swap
- pseg->m_psegAltEndLine = this;
- }
- else
- {
- bool fShift = ((m_nDirDepth % 2) && (m_fEndLine != fNewEnd));
- m_fStartLine = fNewStart;
- m_fEndLine = fNewEnd;
- if (fShift)
- {
- (m_fEndLine) ?
- ShiftGlyphs(m_dxsVisibleWidth - m_dxsTotalWidth) : // shift left
- ShiftGlyphs(m_dxsTotalWidth - m_dxsVisibleWidth); // shift right
- }
- m_dxsWidth = -1;
- }
- }
-
- ReturnResult(kresOk);
-}
-*/
-
-/*----------------------------------------------------------------------------------------------
- Get the type of break that occurs at the logical start of the segment.
-----------------------------------------------------------------------------------------------*/
-LineBrk Segment::startBreakWeight()
-{
- return m_lbStart;
-}
-
-/*----------------------------------------------------------------------------------------------
- Get the type of break that occurs at the logical end of the segment.
-----------------------------------------------------------------------------------------------*/
-LineBrk Segment::endBreakWeight()
-{
- return m_lbEnd;
-}
-
-/*----------------------------------------------------------------------------------------------
- Read the amount of stretch, that is, the difference between the actual and natural width.
- If the segment has been shrunk, returns a negative number.
- TODO: implement properly.
-----------------------------------------------------------------------------------------------*/
-float Segment::stretch()
-{
- return (float)m_dxsStretch;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the maximum stretch possible.
- TODO: implement properly.
-----------------------------------------------------------------------------------------------*/
-float Segment::maxStretch()
-{
- return 1000;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the maximum shrink possible.
- TODO: implement properly.
-----------------------------------------------------------------------------------------------*/
-float Segment::maxShrink()
-{
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return iterators representing the complete range of glyphs in the segment.
-----------------------------------------------------------------------------------------------*/
-std::pair<GlyphIterator, GlyphIterator> Segment::glyphs()
-{
- return std::make_pair(GlyphIterator(*this, 0), GlyphIterator(*this, m_cginf));
-}
-
-/*----------------------------------------------------------------------------------------------
- Return iterators representing the set of glyphs for the given character.
-----------------------------------------------------------------------------------------------*/
-std::pair<GlyphSetIterator, GlyphSetIterator> Segment::charToGlyphs(toffset ich)
-{
- std::vector<int> vislout = UnderlyingToLogicalAssocs(ich);
-
- if (vislout.size() == 0)
- return std::make_pair(GlyphSetIterator(), GlyphSetIterator());
- else
- {
- // Note that BOTH instances of GlyphSetIterator must use the same underlying vector,
- // so that comparisons make sense.
- RcVector * qvislout = new RcVector(vislout);
- return std::make_pair(
- GlyphSetIterator(*this, 0, qvislout),
- GlyphSetIterator(*this, vislout.size(), qvislout));
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the rendered glyphs and their x- and y-coordinates, in the order generated by
- the final positioning pass, relative to the top-left of the segment. They are always
- returned in (roughly) left-to-right order. Note: any of the arrays may be null.
-----------------------------------------------------------------------------------------------*/
-/*
-GrResult Segment::GetGlyphsAndPositions(
- Rect rs, Rect rd, int cchMax, int * pcchRet,
- utf16 * prgchGlyphs, float * prgxd, float * prgyd, float * prgdxdAdv)
-{
- ChkGrOutPtr(pcchRet);
- if (prgchGlyphs)
- ChkGrArrayArg(prgchGlyphs, cchMax);
- if (prgxd)
- ChkGrArrayArg(prgxd, cchMax);
- if (prgyd)
- ChkGrArrayArg(prgyd, cchMax);
- if (prgdxdAdv)
- ChkGrArrayArg(prgdxdAdv, cchMax);
-
- GrResult res;
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- *pcchRet = m_cginf;
- if (cchMax < m_cginf)
- {
- res = (cchMax == 0) ? kresFalse : kresInvalidArg;
- //RestoreFont(pgg);
- ReturnResult(res);
- }
-
- if (m_dxsWidth < 0)
- ComputeDimensions();
-
- float dysFontAscent = m_dysFontAscent;
- //////res = GetFontAscentSourceUnits(pgg, &dysFontAscent);
- //////if (ResultFailed(res))
- //////{
- ////// RestoreFont(pgg);
- ////// ReturnResult(res);
- //////}
-
- float xs = 0;
- // Top of text that sits on the baseline, relative to top of segment:
- float ys = m_dysAscent - dysFontAscent;
-
- float * prgxdLocal;
- if (prgxd == NULL)
- prgxdLocal = new float[cchMax];
- else
- prgxdLocal = prgxd;
-
- res = GetGlyphsAndPositionsPlatform(xs, ys, rs, rd,
- prgchGlyphs, prgxdLocal, prgyd, prgdxdAdv);
-
- if (!prgxd)
- delete[] prgxdLocal;
-
- //RestoreFont(pgg);
-
- ReturnResult(res);
-}
-*/
-
-/*----------------------------------------------------------------------------------------------
- For debugging. Return the characters in this segment.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-GrResult Segment::GetCharData(int cchMax, utf16 * prgch, int * pcchRet)
-{
- ChkGrArgPtr(prgch);
- ChkGrOutPtr(pcchRet);
-
- int ichLimTmp = m_ichwMin + min(m_dichwLim, cchMax);
- m_pgts->fetch(m_ichwMin, ichLimTmp - m_ichwMin, prgch);
- *pcchRet = ichLimTmp - m_ichwMin;
- ReturnResult(kresOk);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return either the first or last character that the the glyph corresponds to. The
- index of the glyph matches what was returned by GetGlyphsAndPositions.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-GrResult Segment::GlyphToChar(int iginf, bool fFirst, int * pich)
-{
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- *pich = PhysicalSurfaceToUnderlying(iginf, fFirst);
- ReturnResult(kresOk);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return all the characters that the glyph corresponds to. Most commonly this will
- be only one char, but ligatures, for instance, will have several. The index of the
- glyph matches what was returned by GetGlyphsAndPositions.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-GrResult Segment::GlyphToAllChars(int iginf,
- int cichMax, int * prgich, int * pcichRet)
-{
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- std::vector<int> vich;
- int ichFirst = PhysicalSurfaceToUnderlying(iginf, true);
- int ichLast = PhysicalSurfaceToUnderlying(iginf, false);
- Assert(ichFirst <= ichLast);
-
- if (ichFirst < ichLast)
- {
- // Loop over the range of characters that might be associated with this glyph
- // and add any that actually are.
- // TODO: we should probably use a method that gets us all the physical associations,
- // but this should get us 99.5% of the way there for now.
- for (int ich = ichFirst; ich <= ichLast; ich++)
- {
- int iginfFirst = UnderlyingToPhysicalSurface(ich, true);
- int iginfLast = UnderlyingToPhysicalSurface(ich, false);
- if (iginfFirst == iginf || iginfLast == iginf)
- vich.push_back(ich);
- }
- }
- else
- vich.push_back(ichFirst);
-
- *pcichRet = vich.size();
- if (cichMax < signed(vich.size()))
- {
- GrResult res = (cichMax == 0 ? kresFalse : kresInvalidArg);
- ReturnResult(res);
- }
- int * pi = prgich;
- for (size_t i = 0; i < vich.size(); i++)
- *pi++ = vich[i];
-
- ReturnResult(kresOk);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return either the first or last glyph that corresponds to the character. The
- index of the glyph matches what was returned by GetGlyphsAndPositions.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-GrResult Segment::CharToGlyph(int ich, bool fFirst, int * pigbb)
-{
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- *pigbb = UnderlyingToPhysicalSurface(ich, fFirst);
- ReturnResult(kresOk);
-}
-
-
-//:>********************************************************************************************
-//:> Non-FieldWorks interface methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Return the breakweight for the given character. Returns the best value if the character is
- mapped to glyphs with different values.
-----------------------------------------------------------------------------------------------*/
-LineBrk Segment::getBreakWeight(int ich, bool fBreakBefore)
-{
- LineBrk lbFirst, lbLast;
-
- int isloutFirst = UnderlyingToLogicalSurface(ich, true);
- if (isloutFirst == kPosInfinity || isloutFirst == kNegInfinity)
- return klbClipBreak;
- GrSlotOutput * psloutFirst = m_prgslout + isloutFirst;
- bool fNotFirst = false;
- if ((psloutFirst->NumberOfComponents() > 0)
- && psloutFirst->UnderlyingComponent(0) != ich)
- {
- // Not the first component of a ligature.
- lbFirst = (LineBrk) ((int)klbClipBreak * -1);
- fNotFirst = true;
- }
- else
- {
- lbFirst = (LineBrk) psloutFirst->BreakWeight();
- }
-
- int isloutLast = UnderlyingToLogicalSurface(ich, false);
- if (isloutLast == kPosInfinity || isloutLast == kNegInfinity)
- return klbClipBreak;
- GrSlotOutput * psloutLast = m_prgslout + isloutLast;
- bool fNotLast = false;
- if ((psloutLast->NumberOfComponents() > 0)
- && psloutLast->UnderlyingComponent(psloutLast->NumberOfComponents() - 1) != ich)
- {
- // Not the last component of a ligature.
- lbLast = klbClipBreak;
- fNotLast = true;
- }
- else
- {
- lbLast = (LineBrk) psloutLast->BreakWeight();
- }
-
- LineBrk lbRet;
- if (fNotLast && fNotFirst)
- // middle of a ligature
- lbRet = klbClipBreak;
- else if (fNotLast)
- lbRet = (fBreakBefore) ? lbFirst : klbClipBreak;
- else if (fNotFirst)
- lbRet = (fBreakBefore) ? klbClipBreak : lbLast;
- else
- lbRet = (fBreakBefore) ? lbFirst : lbLast;
-
- return lbRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the width of the range of characters. Line-boundary contextualization is handled
- by the measure attributes on the glyphs. The width returned is equivalent to the sum of
- the widths of any line-segments that would be needed to underline all the characters.
-
- Since this method is intended to be used on "measured" segments that include the entire
- paragraph, it is not very smart about handling cross-line-boundary contextualization.
- It basically ignores any glyphs that are rendered by this segment but not officially
- part of the segment.
-----------------------------------------------------------------------------------------------*/
-float Segment::getRangeWidth(int ichMin, int ichLim,
- bool fStartLine, bool fEndLine, bool fSkipSpace)
-{
- if (m_dxsWidth < 0)
- {
- ////SetUpGraphics(ichwBase, pgg, true);
- ComputeDimensions();
- }
-
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- //float xsSegRight = m_dxsTotalWidth;
-
- int ichMinRange = min(ichMin, ichLim);
- int ichLimRange = max(ichMin, ichLim);
-
- //int ichMinSeg = max(ichMinRange, m_ichwMin + m_ichwAssocsMin);
- //int ichLimSeg = min(ichLimRange, m_ichwMin + m_ichwAssocsLim);
- int ichMinSeg = max(ichMinRange, m_ichwMin);
- int ichLimSeg = min(ichLimRange, m_ichwMin + m_dichwLim);
-
- if (ichLimSeg < m_ichwMin) // not + m_ichwAssocsMin
- return 0;
- if (ichMinSeg >= m_ichwMin + m_dichwLim) // not m_ichwAssocsLim
- return 0;
-
- if (fSkipSpace)
- {
- int islout = UnderlyingToLogicalSurface(ichLimSeg - 1, true);
- GrSlotOutput * pslout = (islout == kNegInfinity || islout == kPosInfinity) ?
- NULL :
- OutputSlot(islout);
- while (pslout && pslout->IsSpace())
- {
- ichLimSeg--;
- islout = UnderlyingToLogicalSurface(ichLimSeg - 1, true);
-// pslout = OutputSlot(islout);
- pslout = (islout == kNegInfinity || islout == kPosInfinity) ?
- NULL : OutputSlot(islout);
- }
- }
-
- float xsWidth = 0;
- SegmentNonPainter segp(this); // doesn't really need to paint
- float rgxdLefts[100];
- float rgxdRights[100];
- size_t cxd = 0;
- if (ichMinRange < ichLimRange)
- cxd = segp.getUnderlinePlacement(ichMinSeg, ichLimSeg, fSkipSpace,
- 100, rgxdLefts, rgxdRights, NULL);
- for (size_t i = 0; i < cxd; i++)
- xsWidth += rgxdRights[i] - rgxdLefts[i];
-
- // Add in the line-boundary contextualization.
- int isloutFirst = UnderlyingToLogicalSurface(ichMin, true);
- int isloutLast = UnderlyingToLogicalSurface(ichLim - 1, false);
- int mSol = 0;
- int mEol = 0;
- if (0 <= isloutFirst && isloutFirst < m_cslout)
- mSol = m_prgslout[isloutFirst].MeasureSol();
- if (0 <= isloutLast && isloutLast < m_cslout)
- mEol = m_prgslout[isloutLast].MeasureEol();
- float dxsSol = GrEngine::GrIFIMulDiv(mSol, m_xysEmSquare, m_mFontEmUnits);
- float dxsEol = GrEngine::GrIFIMulDiv(mEol, m_xysEmSquare, m_mFontEmUnits);
- xsWidth += dxsSol;
- xsWidth += dxsEol;
-
- //RestoreFont(pgg);
-
- return xsWidth;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the next reasonable breakpoint after ichStart resulting in range that fits in
- the specified width.
-----------------------------------------------------------------------------------------------*/
-int Segment::findNextBreakPoint(int ichStart,
- LineBrk lbPref, LineBrk lbWorst, float dxMaxWidth,
- float * pdxBreakWidth, bool fStartLine, bool fEndLine)
-{
- ChkGrOutPtr(pdxBreakWidth);
-
- int ichBreak;
-
- // First make a rough estimation of how much will fit, using a binary chop approach.
- int iginfStart = UnderlyingToPhysicalSurface(ichStart, !m_fWsRtl);
- int iginfEnd = UnderlyingToPhysicalSurface(m_ichwMin + m_dichwLim - 1, m_fWsRtl);
- int iginfLeft = min(iginfStart, iginfEnd);
- int iginfRight= max(iginfStart, iginfEnd);
-
- int iginfMin = iginfLeft;
- int iginfLim = iginfRight;
- int ichFit;
- if (m_fWsRtl) // right-to-left
- {
- float xRight = GlyphLeftEdge(iginfRight + 1);
- float xLeftMost = xRight - dxMaxWidth;
- while (GlyphLeftEdge(iginfLim) < xLeftMost)
- {
- if (iginfLim - iginfMin <= 1)
- break;
- int iginfMid = (iginfLim + iginfMin) >> 1; // divide by 2
- if (GlyphLeftEdge(iginfMid) < xLeftMost)
- iginfLim = iginfMid;
- else
- iginfMin = iginfMid;
- }
- ichFit = PhysicalSurfaceToUnderlying(iginfLim, false);
- }
- else // left-to-right
- {
- float xLeft = GlyphLeftEdge(iginfLeft);
- float xRightMost = dxMaxWidth - xLeft; // QUESTION: shouldn't this be +, not -?
- iginfLim++;
- while (GlyphLeftEdge(iginfLim) > xRightMost)
- {
- if (iginfLim - iginfMin <= 1)
- break;
- int iginfMid = (iginfLim + iginfMin) >> 1; // divide by 2
- if (GlyphLeftEdge(iginfMid) > xRightMost)
- iginfLim = iginfMid;
- else
- iginfMin = iginfMid;
- }
- Assert(iginfLim <= m_cginf);
- if (iginfLim >= m_cginf) iginfLim = m_cginf - 1;
- ichFit = PhysicalSurfaceToUnderlying(iginfLim, false);
- }
-
- // Breaking after ichFit should pretty much fit in the space. But make sure.
- float dxWidthFit;
- while (ichFit > ichStart)
- {
- dxWidthFit = getRangeWidth(ichStart, ichFit, fStartLine, fEndLine);
- if (dxWidthFit <= dxMaxWidth)
- break;
- ichFit--;
- }
-
- if (ichFit <= ichStart)
- {
- // Nothing will fit.
- return ichStart - 1;
- }
-
- // Now look for a good break. First look forward until the range doesn't fit anymore.
- int ichTry = ichFit;
- int nExtra = 2;
- LineBrk lbBest = klbClipBreak;
- int ichBestBreak = -1;
- while (nExtra > 0 && ichTry < m_ichwMin + m_dichwLim)
- {
- float dxWTmp;
- dxWTmp = getRangeWidth(ichStart, ichTry, fStartLine, fEndLine);
- if (dxWTmp <= dxMaxWidth)
- {
- LineBrk lbTmp;
- lbTmp = getBreakWeight(ichTry - 1, false);
- if (lbTmp > 0 && lbTmp < lbWorst && max(lbTmp, lbPref) <= lbBest)
- {
- ichBestBreak = ichTry;
- lbBest = max(lbTmp, lbPref); // any value better than lbPref is insignificant
- }
- else
- {
- lbTmp = getBreakWeight(ichTry - 1, true);
- if (lbTmp < 0)
- {
- lbTmp = LineBrk(max(lbTmp * -1L, long(lbPref)));
- if (lbTmp < lbWorst && lbTmp <= lbBest)
- {
- ichBestBreak = ichTry - 1;
- lbBest = lbTmp;
- }
- }
- }
- }
- else
- {
- // Didn't fit. But it is theoretically possible that actually adding another
- // character will! Try a few more.
- nExtra--;
- }
- ichTry++;
- }
-
- if (ichTry >= m_ichwMin + m_dichwLim)
- {
- // Break at the end of the segment.
- ichBreak = m_ichwMin + m_dichwLim;
- *pdxBreakWidth = getRangeWidth(ichStart, m_dichwLim, fStartLine, fEndLine);
- return ichBreak;
- }
-
- if (ichBestBreak > -1 && lbBest <= lbPref)
- {
- // Found a reasonable break by looking forward; return it.
- ichBreak = ichBestBreak;// + m_ichwMin;
- *pdxBreakWidth = getRangeWidth(ichStart, ichBestBreak, fStartLine, fEndLine);
- return ichBreak;
- }
-
- // Didn't find a really good break point looking forward from our rough guess.
- // Now look backward.
-
- ichTry = ichFit;
- while (ichTry > ichStart)
- {
- LineBrk lbTmp;
- lbTmp = getBreakWeight(ichTry - 1, false);
- if (lbTmp > 0 && lbTmp < lbWorst && max(lbTmp, lbPref) < lbBest)
- {
- ichBestBreak = ichTry;
- lbBest = max(lbTmp, lbPref); // any value better than lbPref is insignificant
- }
- else
- {
- lbTmp = getBreakWeight(ichTry - 1, true);
- if (lbTmp < 0)
- {
- lbTmp = LineBrk(max(lbTmp * -1L, long(lbPref)));
- if (lbTmp < lbWorst && lbTmp < lbBest)
- {
- ichBestBreak = ichTry - 1;
- lbBest = lbTmp;
- }
- }
- }
- if (lbBest <= lbPref)
- break;
-
- ichTry--;
- }
-
- if (ichBestBreak > -1 && ichBestBreak > ichStart)
- {
- // Found a reasonable break by looking backward; return it.
- ichBreak = ichBestBreak;// + m_ichwMin;
- *pdxBreakWidth = getRangeWidth(ichStart, ichBestBreak, fStartLine, fEndLine);
- return ichBreak;
- }
-
- // No reasonable break.
- return ichStart - 1;
-}
-
-/*----------------------------------------------------------------------------------------------
- Private; used by findNextBreakPoint().
-----------------------------------------------------------------------------------------------*/
-float Segment::GlyphLeftEdge(int iginf)
-{
- if (iginf >= m_cginf)
- return m_prgginf[m_cginf - 1].origin() + m_prgginf[m_cginf - 1].advanceWidth();
-// return m_prgginf[m_cginf].origin() + m_prgginf[m_cginf].advanceWidth();
- else
- return m_prgginf[iginf].origin();
-}
-
-
-//:>********************************************************************************************
-//:> Other methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Get the embedded string. For temporary use; AddRef is not automatically called.
- Do not release unless you AddRef.
-----------------------------------------------------------------------------------------------*/
-ITextSource * Segment::GetString()
-{
- return m_pgts;
-}
-
-/*----------------------------------------------------------------------------------------------
- Compute the ascent, height, width, and overhangs of the segment.
- The ascent is the ascent of the font (distance from the baseline to the top)
- plus any extra ascent height specified by the font.
- The descent is distance from the baseline to the bottom of font, plus any extra descent
- specified by the font (ExtraDescent).
- The ascent overhang is the distance from the top of the font to the top of the highest
- glyph, or zero if all the glyphs fit within the ascent.
- The descent overhang is the distance from the bottom of the font to the bottom of the lowest
- glyph, or zero if all the glyphs fit within the descent.
- The height is the sum of the ascent and descent.
-----------------------------------------------------------------------------------------------*/
-void Segment::ComputeDimensions()
-{
- if (m_fEndLine)
- m_dxsWidth = m_dxsVisibleWidth; // don't include trailing white space.
- else
- m_dxsWidth = m_dxsTotalWidth;
-
- if (m_dxsWidth == -1)
- {
- for (int iginf = 0; iginf < m_cginf; iginf++)
- {
- GlyphInfo * pginf = m_prgginf + iginf;
- if (pginf->isSpace())
- continue;
- m_dxsWidth = max(m_dxsWidth, (pginf->origin() + pginf->advanceWidth()));
- }
- }
-
- int dysNegFontDescent = (int)m_dysFontDescent * -1;
-
- // if there were no glyphs in the segment then there is sometimes no EngineImpl
- if (!EngineImpl())
- {
- Assert(m_cslout == 0);
- Assert(m_cginf == 0);
- m_dxsWidth = 0;
- m_dysAscent = 0; // max(0.0, m_dysFontAscent);
- m_dysHeight = 0; // max(0.0, m_dysAscent - dysNegFontDescent);
- m_dysAscentOverhang = 0;
- m_dysDescentOverhang = 0;
- m_dxsLeftOverhang = 0;
- m_dxsRightOverhang = 0;
- return;
- }
-
- // Calculate the extra ascent and descent.
- int mXAscent = EngineImpl()->ExtraAscent();
- int mXDescent = EngineImpl()->ExtraDescent();
-
- m_dysXAscent = GrEngine::GrIFIMulDiv(mXAscent, m_xysEmSquare, m_mFontEmUnits);
- m_dysXDescent = GrEngine::GrIFIMulDiv(mXDescent, m_xysEmSquare, m_mFontEmUnits);
-
- m_dysAscent = m_dysFontAscent + m_dysXAscent;
- float dysNegDescent = dysNegFontDescent - m_dysXDescent; // dysNegDescent < 0
- m_dysHeight = m_dysAscent - dysNegDescent;
-
- // Calculate the overhangs.
- float dysVisAscent = m_dysAscent;
- float dysNegVisDescent = dysNegDescent;
- float dxsVisLeft = 0;
- float dxsVisRight = m_dxsTotalWidth;
- ComputeOverhangs(&dysVisAscent, &dysNegVisDescent, &dxsVisLeft, &dxsVisRight);
- m_dysAscentOverhang = max(float(0), (dysVisAscent - m_dysAscent));
- m_dysDescentOverhang = max(float(0), (dysNegDescent - dysNegVisDescent));
- m_dxsLeftOverhang = min(float(0), dxsVisLeft);
- m_dxsRightOverhang = max(float(0), dxsVisRight - m_dxsTotalWidth);
-
- m_dysOffset = EngineImpl()->VerticalOffset();
-}
-
-/*----------------------------------------------------------------------------------------------
- Compute the visible ascent and descent, based on how much the bounding box of any
- glyph may extend beyond the ascent or descent of the font.
- Also compute the left- and right-overhangs.
-----------------------------------------------------------------------------------------------*/
-void Segment::ComputeOverhangs(float * pdysVisAscent, float * pdysNegVisDescent,
- float * pdxsVisLeft, float * pdxsVisRight)
-{
- for (int iginf = 0; iginf < m_cginf; iginf++)
- {
- *pdysVisAscent = max(*pdysVisAscent, m_prgginf[iginf].bb().top);
- *pdysNegVisDescent = min(*pdysNegVisDescent, m_prgginf[iginf].bb().bottom);
-
- *pdxsVisLeft = min(*pdxsVisLeft, m_prgginf[iginf].bb().left);
- *pdxsVisRight = max(*pdxsVisRight, m_prgginf[iginf].bb().right);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Create the arrays to store the final output and association information.
-----------------------------------------------------------------------------------------------*/
-void Segment::SetUpOutputArrays(Font * pfont, GrTableManager * ptman,
- GrSlotStream * psstrmFinal,
- int cchwInThisSeg, int csloutSurface, gid16 chwLB,
- TrWsHandling twsh, bool fParaRtl, int nDirDepth, bool fEmpty)
-{
- m_mFontEmUnits = EngineImpl()->GetFontEmUnits();
-
- pfont->getFontMetrics(&m_dysFontAscent, &m_dysFontDescent, &m_xysEmSquare);
-// m_xsDPI = (float)pfont->getDPIx();
-// m_ysDPI = (float)pfont->getDPIy();
-
- // Note that storing both of these values is redundant; they should be the same.
-// Assert(m_xysEmSquare == m_pixHeight);
-
- m_twsh = twsh;
- m_fParaRtl = fParaRtl;
- if (m_twsh == ktwshOnlyWs)
- m_nDirDepth = (int)fParaRtl;
- else if (fParaRtl && nDirDepth == 0)
- m_nDirDepth = 2;
- else
- m_nDirDepth = nDirDepth;
-
- // Create association mappings and set up final versions of slots.
-
- Assert((psstrmFinal == NULL) == fEmpty);
-
- m_ichwAssocsMin = 0;
- m_ichwAssocsLim = cchwInThisSeg;
-
- m_prgisloutBefore = new int[cchwInThisSeg];
-
- m_prgisloutAfter = new int[cchwInThisSeg];
-
- m_prgpvisloutAssocs = new std::vector<int> * [cchwInThisSeg];
-
- m_prgisloutLigature = new int[cchwInThisSeg];
-
- m_prgiComponent = new sdata8[cchwInThisSeg];
-
- int cslot = 0;
- //m_psstrm = psstrmFinal; // TODO: make a local variable
- if (psstrmFinal)
- cslot = psstrmFinal->FinalSegLim();
- else
- Assert(fEmpty);
-
- float xsMin = 0;
- int islot;
- int islotMin = (psstrmFinal) ? psstrmFinal->IndexOffset() : 0;
- for (islot = islotMin; islot < cslot; islot++)
- xsMin = min(xsMin, psstrmFinal->SlotAt(islot)->XPosition());
-
- // For right-to-left segments, the draw origin is at the left side of the visible
- // portion of the text. So if necessary, scoot everything left so that the invisible
- // trailing white-space is to the left of the draw position.
- Assert(m_dxsTotalWidth > -1);
- Assert(m_dxsVisibleWidth > -1);
- float dxsInvisible = (m_fEndLine) ? m_dxsTotalWidth - m_dxsVisibleWidth : 0;
- for (islot = islotMin; ((m_nDirDepth % 2) && (islot < cslot)); islot++)
- {
- GrSlotState * pslot = psstrmFinal->SlotAt(islot);
- // int islout = islot - islotMin;
- if (pslot->GlyphID() == chwLB)
- continue; // skip over linebreak markers
- if (m_nDirDepth % 2) // redundant test
- {
- // RTL will have descending neg values, adjust to be positive. Also make sure
- // invisible trailing white space is to the left of the draw origin.
- // Review: will changing this value have side affects?
- pslot->SetXPos(pslot->XPosition() - xsMin - dxsInvisible);
- }
- }
-
- Assert(kPosInfinity > 0);
- Assert(kNegInfinity < 0);
- for (int ichw = 0; ichw < cchwInThisSeg; ++ichw)
- {
- m_prgisloutBefore[ichw] = kPosInfinity;
- m_prgisloutAfter[ichw] = kNegInfinity;
- m_prgpvisloutAssocs[ichw] = new std::vector<int>;
- m_prgisloutLigature[ichw] = kNegInfinity;
- m_prgiComponent[ichw] = 0;
- }
-
- m_cslout = csloutSurface;
- if (ptman->NumUserDefn() > 0 && ptman->NumCompPerLig() > 0)
- {
- int x; x = 3;
- }
-
-// m_cnUserDefn = ptman->NumUserDefn();
- m_cnCompPerLig = ptman->NumCompPerLig();
-// m_cnFeat = ptman->NumFeat();
- // Normal buffers, plus underlying indices of ligature components, plus
- // map from used components to defined components.
-// int cnExtraPerSlot = m_cnUserDefn + (m_cnCompPerLig * 2) + m_cnFeat + (m_cnCompPerLig * 2);
-
- // We don't need to store the user-defined slot attributes or the features in the segment itself.
- // What we need is: (1) component.ref attr settings, (2) slot-attribute indices,
- // (3) underlying indicates of ligature components, and (4) map from used components
- // to defined components
- int cnExtraPerSlot = m_cnCompPerLig * 4;
- m_prgslout = new GrSlotOutput[m_cslout];
- m_prgnSlotVarLenBuf = new u_intslot[m_cslout * cnExtraPerSlot];
-
- m_isloutVisLim = 0;
- if (psstrmFinal)
- {
- for (islot = islotMin; islot < psstrmFinal->FinalSegLim(); ++islot)
- {
- int isloutRel = islot - islotMin;
-
- GrSlotState * pslot = psstrmFinal->SlotAt(islot);
- pslot->SetPosPassIndex(isloutRel, false);
- pslot->EnsureCacheForOutput(ptman);
- GrSlotOutput * pslout = OutputSlot(isloutRel);
- pslout->SetBufferPtr(m_prgnSlotVarLenBuf + (isloutRel * cnExtraPerSlot));
- pslout->InitializeOutputFrom(pslot);
- pslout->SetBeforeAssoc(pslot->BeforeAssoc());
- pslout->SetAfterAssoc(pslot->AfterAssoc());
- if (pslot->HasComponents())
- pslot->SetComponentRefsFor(pslout);
- Assert(pslot->HasComponents() == (pslout->NumberOfComponents() > 0));
- //if (pslot->HasClusterMembers())
- //{
- //Assert(pslot->HasClusterMembers() || pslot->ClusterRootOffset() == 0);
- pslout->SetClusterXOffset(pslot->ClusterRootOffset() * -1);
- pslout->SetClusterAdvance(pslot->ClusterAdvWidthFrom(0));
-
- //}
-
- if (!ptman->IsWhiteSpace(pslot))
- m_isloutVisLim = islot + 1;
- }
- }
-
- // Set up the clusters.
- for (islot = islotMin; islot < m_cslout; islot++)
- {
- GrSlotState * pslot = psstrmFinal->SlotAt(islot);
- int isloutAdj = islot - islotMin;
- int isloutBaseIndex = pslot->Base(psstrmFinal)->PosPassIndex();
- if (!pslot->IsBase())
- {
- OutputSlot(isloutBaseIndex)->AddClusterMember(isloutBaseIndex, pslot->PosPassIndex());
- OutputSlot(isloutAdj)->SetClusterBase(isloutBaseIndex);
- }
- else if (pslot->HasClusterMembers() && pslot->IsBase())
- {
- Assert(isloutBaseIndex == islot - islotMin);
- OutputSlot(isloutAdj)->SetClusterBase(isloutBaseIndex);
- }
- }
-
- ///AssertValidClusters(psstrmFinal);
-
-#ifdef OLD_TEST_STUFF
- if (ptman->GlyphTable() == NULL)
- return; // test procedures
-#endif // OLD_TEST_STUFF
-
- // CalcPositionsUpTo() called on final pass already from Table Mgr
-
- // Final output for draw routines.
-
- SetUpGlyphInfo(ptman, psstrmFinal, chwLB, nDirDepth, islotMin, cslot);
-
- //SetUpOutputArraysPlatform(ptman, chwLB, nDirDepth, islotMin, cslot);
-
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up the data structures that represent the actual rendered glyphs for the new segment.
-----------------------------------------------------------------------------------------------*/
-void Segment::SetUpGlyphInfo(GrTableManager * ptman, GrSlotStream * psstrmFinal,
- gid16 chwLB, int nDirDepth, int islotMin, int cslot)
-{
- //int paraDirLevel = (ptman->State()->ParaRightToLeft()) ? 1 : 0;
-
- m_cginf = 0;
-
- int islot;
- for (islot = islotMin; islot < cslot; islot++)
- {
- if (psstrmFinal->SlotAt(islot)->GlyphID() != chwLB)
- {
- m_cginf++;
- }
- }
-
- // For right-to-left segments, the draw origin will be at the left side of the visible
- // portion of the text. So if necessary, scoot everything left so that the invisible
- // trailing white-space is to the left of the draw position.
- Assert(m_dxsTotalWidth > -1);
- Assert(m_dxsVisibleWidth > -1);
- //float dxsInvisible = (m_fEndLine) ? m_dxsTotalWidth - m_dxsVisibleWidth : 0;
-
- m_prgginf = new GlyphInfo [m_cginf];
-
- m_isloutGinf0 = -1;
- int iginf = 0;
- for (int islot = islotMin; islot < cslot; islot++)
- {
- GrSlotState * pslot = psstrmFinal->SlotAt(islot);
-
- if (pslot->GlyphID() == chwLB)
- {
- continue; // skip over linebreak markers
- }
-
- int islout = islot - islotMin;
- GrSlotOutput * pslout = OutputSlot(islout);
-
- if (m_isloutGinf0 == -1)
- m_isloutGinf0 = islout;
-
- m_prgginf[iginf].m_pslout = pslout;
- m_prgginf[iginf].m_islout = islout;
- m_prgginf[iginf].m_pseg = this;
-
- // Fill in stuff in the output slot that is needed by the GlyphInfo object.
- pslout->m_xsAdvanceX = pslot->GlyphMetricLogUnits(ptman, kgmetAdvWidth);
- //pslout->m_ysAdvanceY = pslot->GlyphMetricLogUnits(ptman, kgmetAdvHeight);
- //pslout->m_rectBB.top
- // = pslot->YPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbTop);
- //pslout->m_rectBB.bottom
- // = pslot->YPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbBottom);
- //pslout->m_rectBB.left
- // = pslot->XPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbLeft);
- //if (pslot->IsSpace(ptman))
- // pslout->m_rectBB.right
- // = pslot->XPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetAdvWidth);
- //else
- // pslout->m_rectBB.right
- // = pslot->XPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbRight);
-
- iginf++;
- }
-
- if (cslot - islotMin == 0)
- m_isloutGinf0 = 0;
- if (m_isloutGinf0 == -1)
- {
- Assert(m_cginf == 0);
- m_isloutGinf0 = ((OutputSlot(0)->IsInitialLineBreak()) ? 1 : 0);
- }
-
- Assert(m_isloutGinf0 == 0 || m_isloutGinf0 == 1);
-}
-
-/*
-// OLD VERSION
-void Segment::SetUpGlyphInfo(GrTableManager * ptman, GrSlotStream * psstrmFinal, gid16 chwLB, int nDirDepth,
- int islotMin, int cslot)
-{
- int paraDirLevel = (ptman->State()->ParaRightToLeft()) ? 1 : 0;
-
- m_cginf = 0;
- int islot;
- for (islot = islotMin; islot < cslot; islot++)
- {
- if (psstrmFinal->SlotAt(islot)->GlyphID() != chwLB)
- m_cginf++;
- }
-
- // For right-to-left segments, the draw origin will be at the left side of the visible
- // portion of the text. So if necessary, scoot everything left so that the invisible
- // trailing white-space is to the left of the draw position.
- Assert(m_dxsTotalWidth > -1);
- Assert(m_dxsVisibleWidth > -1);
- float dxsInvisible = (m_fEndLine) ? m_dxsTotalWidth - m_dxsVisibleWidth : 0;
-
- m_prgginf = new GlyphInfo [m_cginf];
-
- // Fill in glyph information structures.
- m_isloutGinf0 = -1;
- for (islot = islotMin; islot < cslot; islot++)
- {
- GrSlotState * pslot = psstrmFinal->SlotAt(islot);
-
- int islout = islot - islotMin;
- if (pslot->GlyphID() == chwLB)
- {
- continue; // skip over linebreak markers
- }
- if (m_isloutGinf0 == -1)
- m_isloutGinf0 = islout;
-
- GrSlotOutput * pslout = OutputSlot(islout);
-
- int iginf = islout - m_isloutGinf0;
- GlyphInfo & ginf = m_prgginf[iginf];
-
- ginf.glyphID = pslot->ActualGlyphForOutput(ptman);
- ginf.pseudoGlyphID = pslot->GlyphID();
- if (ginf.glyphID == ginf.pseudoGlyphID)
- ginf.pseudoGlyphID = 0;
-
- ginf.isSpace = pslot->IsSpace(ptman);
-
- ginf.origin = pslot->XPosition();
- ginf.yOffset = pslot->YPosition();
-
- ginf.bbLeft = pslot->XPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbLeft);
- ginf.bbTop = pslot->YPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbTop);
- if (ginf.isSpace)
- {
- ginf.bbRight = pslot->XPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetAdvWidth);
- }
- else
- {
- ginf.bbRight = pslot->XPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbRight);
- }
- ginf.bbBottom = pslot->YPosition() + pslot->GlyphMetricLogUnits(ptman, kgmetBbBottom);
-
- ginf.advanceWidth = pslot->GlyphMetricLogUnits(ptman, kgmetAdvWidth);
- ginf.advanceHeight = 0;
-
- if (pslot->AttachTo() == 0) // not attached
- ginf.attachedTo = -1;
- else
- ginf.attachedTo = pslot->AttachTo() + islot;
-
- ginf.directionality = byte(pslot->Directionality());
- if (pslot->DirLevel() == -1)
- ginf.directionLevel = paraDirLevel;
- else
- ginf.directionLevel = byte(pslot->DirLevel());
-
- //ginf.firstChar = LogicalSurfaceToUnderlying(islout, true);
- //ginf.lastChar = LogicalSurfaceToUnderlying(islout, false);
-
- if (pslot->HasComponents())
- {
- SetUpLigInfo(ptman, ginf, pslout);
- }
- else
- {
- ginf.numberOfComponents = 0;
- ginf.components = NULL;
- }
-
- ginf.insertBefore = pslot->InsertBefore();
-
- ginf.maxStretch[0] = ptman->EmToLogUnits(pslot->JStretch());
- ginf.maxShrink[0] = ptman->EmToLogUnits(pslot->JShrink());
- ginf.stretchStep[0]= ptman->EmToLogUnits(pslot->JStep());
- ginf.justWidth[0] = ptman->EmToLogUnits(pslot->JWidth());
- ginf.justWeight[0] = pslot->JWeight();
-
- ginf.measureStartOfLine = pslout->MeasureSolLogUnits();
- ginf.measureEndOfLine = pslout->MeasureEolLogUnits();
- }
-}
-*/
-
-/*----------------------------------------------------------------------------------------------
- Set up the data structures that represent the components of a ligature glyph.
-----------------------------------------------------------------------------------------------*/
-/*
-void Segment::SetUpLigInfo(GrTableManager * ptman, GlyphInfo & ginf, GrSlotOutput * pslout)
-{
- GrGlyphTable * pgtbl = ptman->GlyphTable();
-
- int ccomp = pslout->NumberOfComponents();
- ginf.numberOfComponents = ccomp;
- ginf.components = new ComponentBox[ccomp];
- for (int icomp = 0; icomp < ccomp; icomp++)
- {
- ComponentBox & cb = ginf.components[icomp];
-
- // TODO: Rework ComponentIndexForGlyph to take slati rather than iForGlyph.
- float xsLeft, xsRight, ysTop, ysBottom;
- int slati = pslout->ComponentId(icomp);
- int iForGlyph = pgtbl->ComponentIndexForGlyph(pslout->GlyphID(), slati);
- pgtbl->ComponentBoxLogUnits(m_xysEmSquare, pslout->GlyphID(), iForGlyph,
- m_mFontEmUnits, m_dysAscent,
- &xsLeft, &ysTop, &xsRight, &ysBottom, false);
-
- cb.firstChar = pslout->UnderlyingComponent(icomp);
- cb.lastChar = cb.firstChar; // TODO: is this supported?
- cb.left = xsLeft;
- cb.right = xsRight;
- cb.top = ysTop;
- cb.bottom = ysBottom;
- }
-}
-*/
-
-
-// --------- OBSOLETE - replaced by GrTableManager::AdjustAssocsForOverlaps() ---------------
-#if 0
-
-/*----------------------------------------------------------------------------------------------
- Now that this segment is finished and has its associations set, handle any overlaps in
- the associations between the previous segment and this one.
-
- Review: Think about whether we need to distinguish between before==kPosInfinity meaning
- that the glyph is in the next segment vs. there is no association at all.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void Segment::AdjustForOverlapsWithPrevSeg()
-{
- if (m_psegPrev)
- {
- AdjustBeforeArrayFromPrevSeg();
- m_psegPrev->AdjustAfterArrayFromNextSeg();
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- For any characters that are officially in this segment but are rendered in
- the previous segment, initialize this segment's before array appropriately. Specifically,
- set this segment's before value to something invalid--negative infinity, which will
- never be overwritten.
- OBSOLETE - replaced by AdjustAfterArrayFromNextSeg
-----------------------------------------------------------------------------------------------*/
-void Segment::InitBeforeArrayFromPrevSeg()
-{
- Assert(m_psegPrev);
-
- int ichwPrevMin = m_psegPrev->m_ichwMin;
- int ichwPrevLim = m_psegPrev->m_ichwLim;
-// int ichwPrevContextLim =
-// m_psegPrev->m_ichwAssocsLim - m_psegPrev->m_ichwAssocsMin + m_psegPrev->m_ichwMin;
- int cchwPrevAssocsMin = m_psegPrev->m_ichwAssocsMin;
- int cchwPrevAssocsLim = m_psegPrev->m_ichwAssocsLim;
-
- // Loop over associations appended to the end of the previous segment;
- // ichwPrev and ichwThis are relative to the start of their respective segments.
- for (int ichwPrev = ichwPrevLim - ichwPrevMin; ichwPrev < cchwPrevAssocsLim; ++ichwPrev)
- {
- int ichwThis = ichwPrev - (ichwPrevLim - ichwPrevMin); // relative to start of this seg
- if (m_psegPrev->m_prgisloutBefore[ichwPrev - cchwPrevAssocsMin] < kPosInfinity)
- // The "before" value is in the previous segment, so make this segment's
- // before value invalid.
- m_prgisloutBefore[ichwThis - m_ichwAssocsMin] = kNegInfinity;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- For any associations that overlap between the previous segment and this, adjust
- this segment's before array appropriately. Specifically, for any characters that
- are rendered in both, set this segment's before value to something invalid.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void Segment::AdjustBeforeArrayFromPrevSeg()
-{
- Assert(m_psegPrev);
-
- int ichwPrevMin = m_psegPrev->m_ichwMin;
- int ichwPrevLim = m_psegPrev->m_ichwLim;
- int ichwPrevAssocsMin = m_psegPrev->m_ichwAssocsMin;
- int ichwPrevAssocsLim = m_psegPrev->m_ichwAssocsLim;
-
- // Loop over associations appended to the end of the previous segment
- // (ie, rendered in the previous segment but officially in this one);
- // ichwPrev and ichwThis are relative to the start of their respective segments.
- for (int ichwPrev = ichwPrevLim - ichwPrevMin; ichwPrev < ichwPrevAssocsLim; ++ichwPrev)
- {
- int ichwThis = ichwPrev - (ichwPrevLim - ichwPrevMin); // relative to start of this seg
- if (m_psegPrev->m_prgisloutBefore[ichwPrev - ichwPrevAssocsMin] < kPosInfinity)
- // The "before" value is in the previous segment, so make this segment's
- // before value invalid.
- m_prgisloutBefore[ichwThis - m_ichwAssocsMin] = kNegInfinity;
- }
- // Loop over associations prepended to the start of this segment
- // (ie, rendered in this segment but officially in the previous one);
- // ichwPrev and ichwThis are relative to the start of their respective segments.
- for (int ichwThis = m_ichwAssocsMin; ichwThis < 0; ++ichwThis)
- {
- int ichwPrev = ichwThis + (ichwPrevLim - ichwPrevMin);
- if (m_psegPrev->m_prgisloutBefore[ichwPrev - ichwPrevAssocsMin] < kPosInfinity)
- // The "before" value is in the previous segment, so make this segment's
- // before value invalid.
- m_prgisloutBefore[ichwThis - m_ichwAssocsMin] = kNegInfinity;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- For any associations that overlap between this segment and the next, adjust
- this segment's after array appropriately. Specifically, for any characters that
- are rendered in both, set this segment's after value to something invalid.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void Segment::AdjustAfterArrayFromNextSeg()
-{
- Assert(m_psegNext);
-
- int ichwNextMin = m_psegNext->m_ichwMin;
- int ichwNextContextMin = ichwNextMin + m_psegNext->m_ichwAssocsMin;
- int ichwNextAssocsMin = m_psegNext->m_ichwAssocsMin;
-
- // Loop over associations prepended to the beginning of the following segment
- // (ie, rendered in the next segment but officially in this one);
- // ichwThis and ichwNext are relative to the start of their respective segments.
- for (int ichwNext = cchwNextAssocsMin; ichwNext < 0; ++ichwNext)
- {
- int ichwThis = ichwNext + (m_ichwLim - m_ichwMin);
- if (m_psegNext->m_prgisloutAfter[ichwNext - ichwNextAssocsMin] > kNegInfinity)
- // The "after" value is in the next segment, so make this segment's
- // after value invalid.
- m_prgisloutAfter[ichwThis - m_ichwAssocsMin] = kPosInfinity;
- }
-
- // Loop over associations appended to the end of this segment
- // (ie, rendered in this segment but officially in the next one);
- // ichwThis and ichwNext are relative to the start of their respective segments.
- for (int ichwThis = m_ichwLim - m_ichwMin; ichwThis < m_cchwAssocsLim; ++ichwThis)
- {
- int ichwNext = ichwThis - (m_ichwLim - m_ichwMin);
- if (m_psegNext->m_prgisloutAfter[ichwNext - ichwNextAssocsMin] > kNegInfinity)
- // The "after" value is in the next segment, so make this segment's
- // after value invalid.
- m_prgisloutAfter[ichwThis - m_ichwAssocsMin] = kPosInfinity;
- }
-}
-
-#endif // -------------------------- END OF OBSOLETE CODE ----------------------------------
-
-
-/*----------------------------------------------------------------------------------------------
- Generate a list of all the glyphs that are attached to the base with the given index.
- Note that we want to generate glyph indices, not slot indices.
-
- @param disloutCluster - indicates how far on either side of the base to look.
-----------------------------------------------------------------------------------------------*/
-void Segment::ClusterMembersForGlyph(int isloutBase, int disloutCluster,
- std::vector<int> & visloutRet)
-{
- for (int islout = max(0, isloutBase - disloutCluster);
- islout < min(m_cslout, isloutBase + disloutCluster + 1);
- islout++)
- {
- if (islout == isloutBase)
- continue; // don't include the base itself
- GrSlotOutput * pslout = m_prgslout + islout;
- if (pslout->ClusterBase() == isloutBase)
- {
- visloutRet.push_back(islout);
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Record an underlying-to-surface association mapping, based on the fact that there is
- a corresponding surface-to-underlying association in the streams.
-
- @param ichwUnder - character index relative to the official beginning of the segment
- @param islotSurface - surface glyph it maps to
-----------------------------------------------------------------------------------------------*/
-void Segment::RecordSurfaceAssoc(int ichwUnder, int islotSurface, int nDir)
-{
- // If we are recording an association across the line boundary, make sure there
- // is space for it.
- EnsureSpaceAtLineBoundaries(ichwUnder);
-
- // For left-to-right chars, the before-value is the minimum of the previous
- // and new values, and the after-value is the maximum.
- if (nDir % 2 == 0)
- {
- // left-to-right
- m_prgisloutBefore[ichwUnder - m_ichwAssocsMin] =
- min(m_prgisloutBefore[ichwUnder - m_ichwAssocsMin], islotSurface);
- m_prgisloutAfter[ ichwUnder - m_ichwAssocsMin] =
- max(m_prgisloutAfter[ ichwUnder - m_ichwAssocsMin], islotSurface);
- }
- else
- {
- // right-to-left: the before-value is the max and the after-value is the min
- m_prgisloutBefore[ichwUnder - m_ichwAssocsMin] =
- max(m_prgisloutBefore[ichwUnder - m_ichwAssocsMin], islotSurface);
- m_prgisloutAfter[ ichwUnder - m_ichwAssocsMin] =
- min(m_prgisloutAfter[ ichwUnder - m_ichwAssocsMin], islotSurface);
- }
-
- m_prgpvisloutAssocs[ichwUnder - m_ichwAssocsMin]->push_back(islotSurface);
-}
-
-/*----------------------------------------------------------------------------------------------
- Record an underlying-to-surface ligature mapping, based on the fact that there is
- a component.ref attribute in the surface stream. Note that if there was a previous
- ligature value there, it will be overwritten.
-
- @param ichwUnder - character index relative to the official beginning of the segment
- @param islotSurface - surface glyph it maps to
- @param iComponent - which component this glyph represents
-----------------------------------------------------------------------------------------------*/
-void Segment::RecordLigature(int ichwUnder, int islotSurface, int iComponent)
-{
- // If we are recording a mapping across the line boundary, make sure there
- // is space for it.
- EnsureSpaceAtLineBoundaries(ichwUnder);
-
- Assert(m_prgisloutLigature[ichwUnder - m_ichwAssocsMin] == kNegInfinity);
-
- m_prgisloutLigature[ichwUnder - m_ichwAssocsMin] = islotSurface;
- Assert(iComponent < kMaxComponentsPerGlyph);
- m_prgiComponent[ ichwUnder - m_ichwAssocsMin] = sdata8(iComponent);
-}
-
-/*----------------------------------------------------------------------------------------------
- The given slot is one that is rendered in the previous segment.
- If it is associated with a character officially in this segment, mark the
- before-association kNegInfinity.
-
- @param ichwUnder - character index relative to the official beginning of the segment
- @param islot - processed glyph it maps to
-----------------------------------------------------------------------------------------------*/
-void Segment::MarkSlotInPrevSeg(int ichwUnder, int islot)
-{
- if (ichwUnder >= m_ichwAssocsMin)
- m_prgisloutBefore[ichwUnder - m_ichwAssocsMin] = kNegInfinity;
-}
-
-/*----------------------------------------------------------------------------------------------
- The given slot is one that is rendered in the following segment.
- If it is associated with a character officially in this segment, mark the
- after-association kPosInfinity.
-
- @param ichwUnder - character index relative to the official beginning of the segment
- @param islot - processed glyph it maps to
-----------------------------------------------------------------------------------------------*/
-void Segment::MarkSlotInNextSeg(int ichwUnder, int islot)
-{
- if (ichwUnder < m_ichwAssocsLim)
- m_prgisloutAfter[ichwUnder - m_ichwAssocsMin] = kPosInfinity;
-}
-
-/*----------------------------------------------------------------------------------------------
- If we are recording an association across the line boundary (in either direction),
- make sure there is space for it. This involves adding space to the beginning or
- the end of the association arrays, and adjusting the min and lim indicators.
-----------------------------------------------------------------------------------------------*/
-void Segment::EnsureSpaceAtLineBoundaries(int ichwUnder)
-{
- int cchwNewMin = min(ichwUnder, m_ichwAssocsMin);
- int cchwNewLim = max(ichwUnder+1, m_ichwAssocsLim);
- if (cchwNewMin < m_ichwAssocsMin || cchwNewLim > m_ichwAssocsLim)
- {
- // Make space either at the beginning or the end of the arrays.
- int cchwPreAdd = m_ichwAssocsMin - cchwNewMin;
- int cchwPostAdd = cchwNewLim - m_ichwAssocsLim;
-
- int * prgisloutTmp = m_prgisloutBefore;
- m_prgisloutBefore = new int[cchwNewLim - cchwNewMin];
- std::copy(prgisloutTmp, prgisloutTmp + (m_ichwAssocsLim - m_ichwAssocsMin),
- m_prgisloutBefore + cchwPreAdd);
- delete[] prgisloutTmp;
-
- prgisloutTmp = m_prgisloutAfter;
- m_prgisloutAfter = new int[cchwNewLim - cchwNewMin];
- std::copy(prgisloutTmp, prgisloutTmp + (m_ichwAssocsLim - m_ichwAssocsMin),
- m_prgisloutAfter + cchwPreAdd);
- delete[] prgisloutTmp;
-
- std::vector<int> ** ppvisloutTmp = m_prgpvisloutAssocs;
- m_prgpvisloutAssocs = new std::vector<int> * [cchwNewLim - cchwNewMin];
- std::swap_ranges(m_prgpvisloutAssocs + cchwPreAdd,
- m_prgpvisloutAssocs + cchwPreAdd +
- (m_ichwAssocsLim - m_ichwAssocsMin), ppvisloutTmp);
- delete[] ppvisloutTmp;
-
- prgisloutTmp = m_prgisloutLigature;
- m_prgisloutLigature = new int[cchwNewLim - cchwNewMin];
- std::copy(prgisloutTmp, prgisloutTmp + (m_ichwAssocsLim - m_ichwAssocsMin),
- m_prgisloutLigature + cchwPreAdd);
- delete[] prgisloutTmp;
-
- sdata8 * prgiCompTmp = m_prgiComponent;
- m_prgiComponent = new sdata8[cchwNewLim - cchwNewMin];
- std::copy(prgiCompTmp, prgiCompTmp + (m_ichwAssocsLim - m_ichwAssocsMin),
- m_prgiComponent + cchwPreAdd);
- delete[] prgiCompTmp;
-
- // Initialize new slots.
- int i;
- for (i = 0; i < cchwPreAdd; ++i)
- {
- m_prgisloutBefore[i] = kPosInfinity;
- m_prgisloutAfter[i] = kNegInfinity;
- m_prgpvisloutAssocs[i] = new std::vector<int>;
- m_prgisloutLigature[i] = kNegInfinity;
- m_prgiComponent[i] = 0;
- }
- for (i = m_ichwAssocsLim - m_ichwAssocsMin + cchwPreAdd;
- i < m_ichwAssocsLim - m_ichwAssocsMin + cchwPreAdd + cchwPostAdd;
- ++i)
- {
- m_prgisloutBefore[i] = kPosInfinity;
- m_prgisloutAfter[i] = kNegInfinity;
- m_prgpvisloutAssocs[i] = new std::vector<int>;
- m_prgisloutLigature[i] = kNegInfinity;
- m_prgiComponent[i] = 0;
- }
- m_ichwAssocsMin = cchwNewMin;
- m_ichwAssocsLim = cchwNewLim;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the given output slot.
-----------------------------------------------------------------------------------------------*/
-GrSlotOutput * Segment::OutputSlot(int islout)
-{
- return m_prgslout + islout;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the rendering engine to the current one.
-----------------------------------------------------------------------------------------------*/
-void Segment::SetEngine(GrEngine * pgreng)
-{
- //if (m_preneng)
- // m_preneng->DecRefCount();
- m_preneng = pgreng;
- //if (m_preneng)
- // m_preneng->IncRefCount();
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the font.
-----------------------------------------------------------------------------------------------*/
-void Segment::SetFont(Font * pfont)
-{
- m_pfont = pfont->copyThis();
-
-// m_fBold = pfont->bold();
-// m_fItalic = pfont->italic();
- // Note that we store the character height (which does not include the internal leading),
- // not the actual font height, ie, ascent + descent. This is what is used in the LOGFONT.
- pfont->getFontMetrics(NULL, NULL, &m_xysEmSquare); // m_xysEmSquare = m_pixHeight
-}
-
-/*----------------------------------------------------------------------------------------------
- Switch the font out.
- ??? Do we need to change the member variables too?
-----------------------------------------------------------------------------------------------*/
-void Segment::SwitchFont(Font * pfont)
-{
- m_pfont = pfont;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the engine implementation if it is a proper GrEngine, or NULL otherwise.
-----------------------------------------------------------------------------------------------*/
-GrEngine * Segment::EngineImpl()
-{
- return m_preneng;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the justification agent, in case this segment will ever need to be stretched
- or shrunk.
-----------------------------------------------------------------------------------------------*/
-void Segment::SetJustifier(IGrJustifier * pgjus)
-{
- m_pgjus = pgjus;
- //if (pgjus)
- // pgjus->JustifierObject(&m_pgjus);
- //else
- // m_pgjus = NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set the graphics object to use the base font.
-----------------------------------------------------------------------------------------------*/
-//void Segment::SetToBaseFont(IGrGraphics * pgg)
-//{
-// if (m_fUseSepBase)
-// EngineImpl()->SwitchGraphicsFont(pgg, true);
-//}
-
-/*----------------------------------------------------------------------------------------------
- Restore the graphics object to use the font that it originally had when passed in to
- the interface method.
-----------------------------------------------------------------------------------------------*/
-//void Segment::RestoreFont(IGrGraphics * pgg)
-//{
-// if (m_fUseSepBase)
-// EngineImpl()->SwitchGraphicsFont(pgg, false);
-//}
-
-/*----------------------------------------------------------------------------------------------
- Given a logical surface location, return the underlying position (relative to the
- beginning of the string). NOTE that we are returning the index of the closest charater
- (plus an indication of which side the click was on), not a position between characters.
-
- @param islout - output slot
- @param xsOffset - x coordinate of physical click, relative to left of glyph;
- kPosInfinity means all the way to the right;
- kNegInfinity means all the way to the left
- @param ysOffset - y coordinate of physical click, relative to TOP of segment (NOT
- upwards from baseline); kPosInfinity means all the way at
- the top; kNegInfinity means all the way at the bottom
- @param dxsGlyphWidth - width of glyph clicked on, or 0 if irrelevant
- @param dysGlyphHeight - actually line height -- CURRENTLY NOT USED
- @param pfAfter - return true if they clicked on trailing side; possibly NULL
-----------------------------------------------------------------------------------------------*/
-int Segment::LogicalSurfaceToUnderlying(int islout, float xsOffset, float ysClick,
- float dxsGlyphWidth, float dysGlyphHeight, bool * pfAfter)
-{
- Assert(islout >= 0);
- Assert(islout < m_cslout);
-
- GrSlotOutput * pslout = OutputSlot(islout);
- bool fGlyphRtl = SlotIsRightToLeft(pslout);
-
- int dichw;
- bool fAfter, fRight;
-
- float ysForGlyph = pslout->YPosition();
-
- float dysFontAscent = m_dysFontAscent;
- ////GrResult res = GetFontAscentSourceUnits(pgg, &dysFontAscent);
- ////if (ResultFailed(res))
- //// THROW(WARN(res));
- dysFontAscent += m_dysXAscent;
-
- float dysOffset = ysClick - (m_dysAscent - dysFontAscent); // relative to top of 0-baseline text
-
- // If the slot has components, see if the offset falls within one of them.
-
- if (pslout->NumberOfComponents() > 0)
- {
- GrEngine * pgreng = EngineImpl();
- if (!pgreng)
- goto LNotLigature;
-
- GrGlyphTable * pgtbl = pgreng->GlyphTable();
-
- for (int icomp = 0; icomp < pslout->NumberOfComponents(); icomp++)
- {
- float xsLeft, xsRight, ysTop, ysBottom;
-
- // TODO: Rework ComponentIndexForGlyph to take slati rather than iForGlyph.
- int slati = pslout->ComponentId(icomp);
- int iForGlyph = pgtbl->ComponentIndexForGlyph(pslout->GlyphID(), slati);
- if (!pgtbl->ComponentBoxLogUnits(m_xysEmSquare, pslout->GlyphID(), iForGlyph,
- m_mFontEmUnits, m_dysAscent,
- &xsLeft, &ysTop, &xsRight, &ysBottom))
- {
- continue; // component not defined
- }
- Assert(xsLeft <= xsRight);
- Assert(ysTop <= ysBottom);
- if (xsOffset < xsLeft || xsOffset > xsRight)
- continue;
- if ((dysOffset - ysForGlyph) < ysTop || (dysOffset - ysForGlyph) > ysBottom)
- continue;
-
- // Click was within the component's box.
-
- dichw = pslout->UnderlyingComponent(icomp);
- Assert(m_ichwMin + dichw >= 0);
- Assert(dichw < m_dichwLim);
-
- fRight = (xsOffset - xsLeft > xsRight - xsOffset);
- fAfter = (fGlyphRtl) ? !fRight : fRight;
- if (pfAfter)
- *pfAfter = fAfter;
-
- Assert(GrCharStream::AtUnicodeCharBoundary(m_pgts, m_ichwMin + dichw));
-
- return m_ichwMin + dichw;
- }
- }
-
-LNotLigature:
-
- // No relevant ligature component.
- // If the x-offset is less than half way across,
- // answer the before-association; otherwise answer the after-association.
-
- if (xsOffset == kPosInfinity)
- fRight = true;
- else if (xsOffset == kNegInfinity)
- fRight = false;
- else
- fRight = (xsOffset > (dxsGlyphWidth / 2));
-
- fAfter = (fGlyphRtl) ? !fRight : fRight;
-
- int diCharAdj = 0;
- if (fAfter)
- {
- dichw = pslout->AfterAssoc();
- if (pfAfter)
- *pfAfter = true;
- // The following should not be necessary because of the way associations are set up:
- //while (!GrCharStream::AtUnicodeCharBoundary(m_pgts, ichwBase + dichw + diCharAdj))
- // diCharAdj++;
- }
- else
- {
- dichw = pslout->BeforeAssoc();
- if (pfAfter)
- *pfAfter = false;
- // The following should not be necessary because of the way associations are set up:
- //while (!GrCharStream::AtUnicodeCharBoundary(m_pgts, ichwBase + dichw + diCharAdj))
- // diCharAdj--;
- }
-
- if (dichw == kNegInfinity || dichw == kPosInfinity)
- return dichw;
-
- // This should be true because of the way the associations are set up:
- Assert(GrCharStream::AtUnicodeCharBoundary(m_pgts, m_ichwMin + dichw)); // + diCharAdj));
-
- return m_ichwMin + dichw + diCharAdj;
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int Segment::LogicalSurfaceToUnderlying(int islout, bool fBefore)
-{
- if (fBefore)
- return LogicalSurfaceToUnderlying(islout, kNegInfFloat, kNegInfFloat);
- else
- return LogicalSurfaceToUnderlying(islout, kPosInfFloat, kPosInfFloat);
-}
-
-/*----------------------------------------------------------------------------------------------
- Given a physical surface location (an index into the glyph boxes),
- return the underlying position, relative to the beginning of the string.
-
- @param igbb - index of glyph
- @param xsOffset - relative to left side of glyph
- @param ysOffset - downwards from top of segment (not upwards from baseline)
-----------------------------------------------------------------------------------------------*/
-int Segment::PhysicalSurfaceToUnderlying(
- int iginf, float xsOffset, float ysOffset,
- float dxsGlyphWidth, float dysGlyphHeight, bool * pfAfter)
-{
- int islout = iginf + m_isloutGinf0;
- return LogicalSurfaceToUnderlying(islout, xsOffset, ysOffset,
- dxsGlyphWidth, dysGlyphHeight, pfAfter);
-}
-
-/*--------------------------------------------------------------------------------------------*/
-
-int Segment::PhysicalSurfaceToUnderlying(int iginf, bool fBefore)
-{
- int islout = iginf + m_isloutGinf0;
- bool fGlyphRtl = SlotIsRightToLeft(OutputSlot(islout));
- if (fBefore == fGlyphRtl)
- return PhysicalSurfaceToUnderlying(iginf, kPosInfFloat, kPosInfFloat);
- else
- return PhysicalSurfaceToUnderlying(iginf, kNegInfFloat, kNegInfFloat);
-}
-
-/*----------------------------------------------------------------------------------------------
- Given an underlying position (relative to the beginning of the string),
- return the logical surface location (ignoring right-to-left).
- NOTE that ichw indicates a CHARACTER, not a location between characters. So ichw = 3,
- fBefore = false indicates a selection between characters 3 and 4.
- For surrogates, it indicates the FIRST of the pair of 16-bit chars.
-----------------------------------------------------------------------------------------------*/
-int Segment::UnderlyingToLogicalSurface(int ichw, bool fBefore)
-{
- int ichwSegOffset = ichw - m_ichwMin;
-
- if (ichwSegOffset < m_ichwAssocsMin)
- return kNegInfinity; // probably rendered in previous segment
-
-
- // if the buffers aren't even allocated, then it probably means there
- // wasn't room for any glyphs, so the following segment is most likely
-// else if (ichwSegOffset >= m_ichwAssocsLim)
- else if (ichwSegOffset >= m_ichwAssocsLim || !m_prgisloutBefore || !m_prgisloutAfter)
- return kPosInfinity; // probably rendered in following segment
-
- else if (fBefore)
- {
- int isloutRet;
- int ichw = ichwSegOffset;
- // If no association has been made, loop forward to the next slot
- // we are before. As a last resort, answer kPosInfinity, meaning we
- // aren't before anything.
- do
- {
- isloutRet = m_prgisloutBefore[ichw - m_ichwAssocsMin];
- do { ++ichw; }
- while (!GrCharStream::AtUnicodeCharBoundary(m_pgts, ichw));
- } while (isloutRet == kPosInfinity && ichw < m_ichwAssocsLim);
- return isloutRet;
- }
- else
- {
- int isloutRet;
- int ichw = ichwSegOffset;
- // If no association has been made, loop backward to the previous slot
- // we are after. As a last resort, answer kNegInfinity, meaning we
- // aren't after anything.
- do
- {
- isloutRet = m_prgisloutAfter[ichw - m_ichwAssocsMin];
- do { --ichw; }
- while (!GrCharStream::AtUnicodeCharBoundary(m_pgts, ichw));
- } while (isloutRet == kNegInfinity && ichw >= 0);
- return isloutRet;
- }
- Assert(false); // should never reach here
-}
-
-/*----------------------------------------------------------------------------------------------
- Given an underlying position (relative to the beginning of the string),
- return the physical surface location, the index into m_prgginf.
-----------------------------------------------------------------------------------------------*/
-int Segment::UnderlyingToPhysicalSurface(int ichw, bool fBefore)
-{
- int islout = UnderlyingToLogicalSurface(ichw, fBefore);
- return LogicalToPhysicalSurface(islout);
-}
-
-/*----------------------------------------------------------------------------------------------
- Given a logical position (index into output slots), return the physical position,
- the index into the list of glyphs (m_prgginf).
-----------------------------------------------------------------------------------------------*/
-int Segment::LogicalToPhysicalSurface(int islout)
-{
- if (islout == kNegInfinity || islout == kPosInfinity)
- return islout;
-
- Assert(m_prgginf[islout - m_isloutGinf0].logicalIndex() == (unsigned)(islout - m_isloutGinf0));
-
- return islout - m_isloutGinf0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Given an underlying position (relative to the beginning of the string),
- return the physical surface locations of all the associated surface glyphs.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-#if 0
-void Segment::UnderlyingToPhysicalAssocs(int ichw, std::vector<int> & viginf)
-{
- int ichwSegOffset = ichw - m_ichwMin;
-
- if (ichwSegOffset < m_ichwAssocsMin)
- return; // possibly rendered in previous segment
-
- else if (ichwSegOffset >= m_ichwAssocsLim)
- return; // possibly rendered in following segment
-
- else
- {
- std::vector<int> * pvisloutTmp = &(m_prgvisloutAssocs[ichwSegOffset - m_ichwAssocsMin]);
-
- for (size_t i = 0; i < pvisloutTmp->size(); i++)
- {
- int islout = (*pvisloutTmp)[i];
- Assert(islout != kNegInfinity);
- Assert(islout != kPosInfinity);
- viginf.push_back(LogicalToPhysicalSurface(islout));
- }
- }
-}
-#endif
-
-/*----------------------------------------------------------------------------------------------
- Given an underlying character position (relative to the beginning of the string),
- return a pointer to the vector containing the logical surface locations of
- all the associated surface glyphs.
-
- Returns an empty vector (not something containing infinities) if the character is
- "invisible."
-----------------------------------------------------------------------------------------------*/
-std::vector<int> Segment::UnderlyingToLogicalAssocs(int ichw)
-{
- std::vector<int> vnEmpty;
- vnEmpty.clear();
- Assert(vnEmpty.size() == 0);
-
- int ichwSegOffset = ichw - m_ichwMin;
-
- if (ichwSegOffset < m_ichwAssocsMin)
- return vnEmpty; // probably rendered in previous segment
-
- else if (ichwSegOffset >= m_ichwAssocsLim)
- return vnEmpty; // probably rendered in following segment
-
- else if (m_prgpvisloutAssocs[ichwSegOffset - m_ichwAssocsMin] == NULL)
- {
- // Create a vector using the before and after values.
- std::vector<int> visloutRet;
- int isloutBefore = m_prgisloutBefore[ichwSegOffset - m_ichwAssocsMin];
- int isloutAfter = m_prgisloutAfter[ichwSegOffset - m_ichwAssocsMin];
- if (isloutBefore != kPosInfinity && isloutBefore != kNegInfinity)
- visloutRet.push_back(isloutBefore);
- if (isloutAfter != kPosInfinity && isloutAfter != kNegInfinity && isloutBefore != isloutAfter)
- {
- visloutRet.push_back(isloutAfter);
- }
- return visloutRet;
- }
- else
- {
- std::vector<int> * pvisloutRet = m_prgpvisloutAssocs[ichwSegOffset - m_ichwAssocsMin];
- return *pvisloutRet;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Given an underlying character position (relative to the beginning of the string),
- return an index of a slot in this segment that can used to test things like
- InsertBefore. Don't return kNegInfinity or kPosInfinity except as a last resort.
-----------------------------------------------------------------------------------------------*/
-int Segment::UnderlyingToLogicalInThisSeg(int ichw)
-{
- int isloutTest = kNegInfinity;
- std::vector<int> vislout = UnderlyingToLogicalAssocs(ichw);
- for (size_t iislout = 0; iislout < vislout.size(); iislout++)
- {
- isloutTest = vislout[iislout];
- if (isloutTest != kNegInfinity && isloutTest != kPosInfinity)
- return isloutTest;
- }
- return isloutTest;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the two characters map to exactly the same set of glyphs.
-----------------------------------------------------------------------------------------------*/
-bool Segment::SameSurfaceGlyphs(int ichw1, int ichw2)
-{
- std::vector<int> vislout1 = UnderlyingToLogicalAssocs(ichw1);
- std::vector<int> vislout2 = UnderlyingToLogicalAssocs(ichw2);
-
- bool fRet = true;
- if (vislout1.size() == 0 || vislout2.size() == 0)
- fRet = false;
- else if (vislout1.size() != vislout2.size())
- fRet = false;
- else
- {
- for (size_t islout = 0; islout < vislout1.size(); islout++)
- {
- if (vislout1[islout] != vislout2[islout])
- {
- fRet = false;
- break;
- }
- }
- }
- return fRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the direction level of the given character.
-----------------------------------------------------------------------------------------------*/
-int Segment::DirLevelOfChar(int ichw, bool fBefore)
-{
- if (m_twsh == ktwshOnlyWs)
- return m_nDirDepth;
- int islot = UnderlyingToLogicalSurface(ichw, fBefore);
- if (islot == kNegInfinity || islot == kPosInfinity)
- return 0;
- int nDir = OutputSlot(islot)->DirLevel();
- if (nDir == -1)
- // Not calculated: assume to be the top direction level.
- nDir = TopDirLevel();
-
- return nDir;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return whether the given character is right-to-left.
-----------------------------------------------------------------------------------------------*/
-int Segment::CharIsRightToLeft(int ichw, bool fBefore)
-{
- int nDir = DirLevelOfChar(ichw, fBefore);
- return ((nDir % 2) != 0);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return whether the given slot is right-to-left.
-----------------------------------------------------------------------------------------------*/
-int Segment::SlotIsRightToLeft(GrSlotOutput * pslout)
-{
- if (m_twsh == ktwshOnlyWs)
- return (m_nDirDepth % 2);
- int nDir = pslout->DirLevel();
- if (nDir == -1)
- nDir = TopDirLevel();
- return (nDir % 2);
-}
-
-/*----------------------------------------------------------------------------------------------
- Check to make sure that the attachments are valid. Specifically, for every glyph that
- is part of a cluster, all glyphs between that glyph and its root must (ultimately) have
- that root glyph as one of its roots.
- OBSOLETE
-----------------------------------------------------------------------------------------------*/
-void Segment::AssertValidClusters(GrSlotStream * psstrm)
-{
-#ifdef _DEBUG
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslotThis = psstrm->SlotAt(islot);
- GrSlotState * pslotRoot = pslotThis->AttachRoot(psstrm);
- if (!pslotRoot)
- continue;
- Assert(pslotRoot != pslotThis);
-
- int inc = (pslotThis->PosPassIndex() > pslotRoot->PosPassIndex()) ? -1 : 1;
-
- for (int islot2 = pslotThis->PosPassIndex() + inc;
- islot2 != pslotRoot->PosPassIndex();
- islot2 += inc)
- {
- GrSlotState * pslotMid = psstrm->SlotAt(islot2);
- Assert(pslotMid->HasAsRoot(psstrm, pslotRoot));
- }
- }
-#endif // _DEBUG
-}
-
-/*----------------------------------------------------------------------------------------------
- Return information about (editing) clusters as appropriate for Uniscribe, ie, consistent
- with the ScriptShape funciton.
- A cluster includes all attachments, all clumps of characters created by insert = false,
- and clumps of reordered glyphs.
-
- prgiginfFirstOfCluster returns the first glyph of the cluster for each CHARACTER
- (glyph indices returned are zero-based and refer to physical order--left-to-right, etc.).
- pfClusterStart returns a flag for each GLYPH indicating whether it is the first (left-most)
- of a cluster.
- Both arrays are optional.
- CORRECTION: for now we use strictly logical order. It's not clear whether physical
- order is needed for right-to-left text or not. See note below.
-
- TODO: convert from GlyphInfo objects which are RTL.
-----------------------------------------------------------------------------------------------*/
-GrResult Segment::getUniscribeClusters(
- int * prgiginfFirstOfCluster, int cchMax, int * pcch,
- bool * pfClusterStart, int cfMax, int * pcf)
-{
- ChkGrOutPtr(pcch);
- if (prgiginfFirstOfCluster)
- ChkGrArrayArg(prgiginfFirstOfCluster, cchMax);
- ChkGrOutPtr(pcf);
- if (pfClusterStart)
- ChkGrArrayArg(pfClusterStart, cfMax);
-
- GrResult res = kresOk;
-
- //SetUpGraphics(ichwBase, pgg, true);
-
- if (m_dxsWidth == -1)
- ComputeDimensions();
-
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- if (pcch)
- *pcch = m_dichwLim;
- if (pcf)
- *pcf = m_cginf;
- if (cchMax < m_dichwLim)
- {
- if (cchMax == 0 && cfMax == 0)
- res = kresFalse; // just asking for size information
- else if (prgiginfFirstOfCluster || cchMax > 0)
- res = kresInvalidArg; // not enough space
- }
- if (cfMax < m_cginf)
- {
- if (cchMax == 0 && cfMax == 0)
- res = kresFalse;
- else if (pfClusterStart || cfMax > 0)
- res = kresInvalidArg;
- }
- if (res != kresOk)
- {
- //RestoreFont(pgg);
- ReturnResult(res);
- }
-
- // Generate a pair of arrays, indicating the first and last (logical) slots
- // of the cluster for each character. Initially clusters are based just on
- // character-to-glyph associations, but they expand as we process
- // insert=false settings, attachments, and reordering.
-
- std::vector<int> visloutBefore;
- std::vector<int> visloutAfter;
- visloutBefore.resize(m_dichwLim);
- visloutAfter.resize(m_dichwLim);
-
- int ich;
- for (ich = 0; ich < m_dichwLim; ich++)
- {
- visloutBefore[ich] = m_prgisloutBefore[ich - m_ichwAssocsMin];
- visloutAfter[ich] = m_prgisloutAfter[ich - m_ichwAssocsMin];
- }
-
- if (m_dichwLim == 1)
- {
- // Only one character, therefore only one cluster.
- visloutBefore[0] = m_isloutGinf0;
- visloutAfter[0] = max(m_cginf - 1, 0) + m_isloutGinf0;
- }
- else
- {
- // Make all glyphs attached to each other part of a cluster, or glyphs where
- // insertion is not allowed.
- for (ich = 0; ich < m_dichwLim; ich++)
- {
- std::vector<int> vislout = UnderlyingToLogicalAssocs(ich + m_ichwMin);
-
- if (vislout.size() == 0)
- {
- // No glyphs represent this character. Merge it with the previous
- // character.
- visloutBefore[ich] = (ich == 0) ? visloutBefore[ich + 1] : visloutBefore[ich - 1];
- visloutAfter[ich] = (ich == 0) ? visloutAfter[ich + 1] : visloutAfter[ich - 1];
- continue;
- }
-
- size_t iislout;
- for (iislout = 0; iislout < vislout.size(); iislout++)
- {
- int islout = vislout[iislout];
- if (!m_prgslout[islout].InsertBefore())
- {
- // This glyph does not allow insertion before it; make its character part
- // of the same cluster as the previous character.
- MergeUniscribeCluster(visloutBefore, visloutAfter, ich - 1, ich);
-/*
-+ // Keith Stribley's fix:
-+ // NOTE: this is NOT always the same as the previous character, so
-+ // check whether the next character actually has a glyph before this
-+ // one
-+ if ((ich == m_dichwLim - 1) ||
-+ (std::min(visloutBefore[ich + 1], visloutAfter[ich + 1]) >
-+ std::max(visloutBefore[ich], visloutAfter[ich])))
-+ {
-+ MergeUniscribeCluster(visloutBefore, visloutAfter, ich - 1, ich);
-+ }
-+ else
-+ MergeUniscribeCluster(visloutBefore, visloutAfter, ich, ich + 1);
-*/
- }
- else if (m_prgslout[islout].ClusterBase() != -1
- && m_prgslout[islout].ClusterBase() != islout)
- {
- // This glyph is attached to something; make them part of the same cluster.
- int isloutBase = m_prgslout[islout].ClusterBase();
- int ichBase = LogicalSurfaceToUnderlying(isloutBase, false) - m_ichwMin;
- MergeUniscribeCluster(visloutBefore, visloutAfter,
- ich, ichBase);
- int ichBase1 = LogicalSurfaceToUnderlying(isloutBase, false) - m_ichwMin;
- if (ichBase1 != ichBase)
- MergeUniscribeCluster(visloutBefore, visloutAfter,
- ich, ichBase1);
- }
- }
- }
-
- // Handle reordering. Whenever the islout values get out of order, we need to
- // merge into a single cluster.
- for (ich = 0; ich < m_dichwLim - 1; ich++)
- {
- Assert(visloutBefore[ich] <= visloutAfter[ich]);
- Assert(visloutBefore[ich] != kPosInfinity);
- Assert(visloutBefore[ich] != kNegInfinity);
- Assert(visloutAfter[ich] != kPosInfinity);
- Assert(visloutAfter[ich] != kNegInfinity);
- const int b1 = visloutBefore[ich];
- const int a1 = visloutAfter[ich];
- const int b2 = visloutBefore[ich + 1];
- const int a2 = visloutAfter[ich + 1];
- if (b1 == b2 && a1 == a2)
- continue; // already a cluster
-
- if (std::min(b2, a2) <= std::max(b1, a1))
- {
- MergeUniscribeCluster(visloutBefore, visloutAfter, ich, ich + 1);
- }
- }
- }
-
- if (pfClusterStart)
- {
- // Initialize.
- int iginf;
- for (iginf = 0; iginf < m_cginf; iginf++)
- pfClusterStart[iginf] = false;
- }
-
- // To skip line-break slots; remember that the number of output slots equals the
- // number of gbbs plus initial and/or final line-break slots if any.
- // In this case the beginning of the first cluster indicates the first real glyph.
- int isloutFirstReal = (m_dichwLim) ? ((m_fWsRtl)? visloutAfter[0] : visloutBefore[0]) : 0;
-
- // Kludge to make assertions below easier:
- if (m_dichwLim > 0)
- {
- visloutBefore.push_back(visloutAfter.back() + 1);
- visloutAfter.push_back(visloutAfter.back() + 1);
- }
-
- // Convert (logical) slots to actual glyphs.
- for (ich = 0; ich < m_dichwLim; ich++)
- {
- // NOTE: to treat the first of the cluster as the left-most, use visloutAfter for
- // right-to-left situations.
-
- if (prgiginfFirstOfCluster)
- prgiginfFirstOfCluster[ich]
- = LogicalToPhysicalSurface((m_fWsRtl) ? visloutAfter[ich] : visloutBefore[ich]);
- int clusterStartPos = ((m_fWsRtl) ? visloutAfter[ich] : visloutBefore[ich]) - isloutFirstReal;
- if (pfClusterStart)
- pfClusterStart[clusterStartPos] = true;
-
- Assert((visloutBefore[ich] == visloutBefore[ich + 1] &&
- visloutAfter[ich] == visloutAfter[ich + 1])
- || (visloutBefore[ich] <= visloutAfter[ich] &&
- visloutAfter[ich] < visloutBefore[ich + 1]));
- }
-
- //RestoreFont(pgg);
-
- return kresOk;
-}
-
-
-// suppress GCC 4.3 warning for optimized min()/max() when called with (ich, ich+1) or similar
-#pragma GCC diagnostic ignored "-Wstrict-overflow"
-
-/*----------------------------------------------------------------------------------------------
- Merge the given characters into the same Uniscribe cluster. This means merging any
- intervening characters as well.
-----------------------------------------------------------------------------------------------*/
-void Segment::MergeUniscribeCluster(
- std::vector<int> & visloutBefore, std::vector<int> & visloutAfter,
- int ich1, int ich2)
-{
- int ichStartOrig = min(ich1, ich2);
- int ichStopOrig = max(ich1, ich2);
-
- int isloutMin = visloutBefore[ichStopOrig];
- int isloutMax = visloutAfter[ichStartOrig];
-
- int ichStart = ichStopOrig;
- int ichStop = ichStartOrig;
- // Find the beginning of the cluster.
- while (ichStart > 0 &&
- (ichStart > ichStartOrig
- || visloutBefore[ichStart - 1] >= visloutBefore[ichStopOrig]
- || visloutBefore[ichStart - 1] == visloutBefore[ichStart]))
- {
- ichStart--;
- isloutMin = std::min(isloutMin, visloutBefore[ichStart]);
- isloutMax = std::max(isloutMax, visloutAfter[ichStart]);
- }
- // Find end of cluster.
- while (ichStop < m_dichwLim - 1 &&
- (ichStop < ichStopOrig
- || visloutAfter[ichStop + 1] <= visloutAfter[ichStartOrig]
- || visloutAfter[ichStop + 1] == visloutAfter[ichStop]))
- {
- ichStop++;
- isloutMin = std::min(isloutMin, visloutBefore[ichStop]);
- isloutMax = std::max(isloutMax, visloutAfter[ichStop]);
- }
-
- int ich;
- for (ich = ichStart; ich <= ichStop; ich++)
- {
- visloutBefore[ich] = isloutMin;
- visloutAfter[ich] = isloutMax;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return information about the positioning of glyphs as appropriate for Uniscribe.
- The advance widths returned are the natural ones (what would be applied if no smart
- rendering were happening), and the x-offsets are the difference between the
- natural location of the glyph and what is produced by Graphite. The y-offset
- is the same as GetGlyphsAndPositions.
-
- This is an experimental method. Its behavior may change signficantly in the future.
-----------------------------------------------------------------------------------------------*/
-/*
-GrResult Segment::GetUniscribePositions(
- Rect rs, Rect rd, int cgidMax, int *pcgidRet,
- float * prgxd, float * prgyd, float * prgdxdAdv)
-{
- ChkGrOutPtr(pcgidRet);
- ChkGrArrayArg(prgxd, cgidMax);
- ChkGrArrayArg(prgyd, cgidMax);
- ChkGrArrayArg(prgdxdAdv, cgidMax);
-
- GrResult res;
-
- //SetUpGraphics(ichBase, pgg, true);
-
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- *pcgidRet = m_cginf;
- if (cgidMax < m_cginf)
- {
- res = (cgidMax == 0) ? kresFalse : kresInvalidArg;
- //RestoreFont(pgg);
- ReturnResult(res);
- }
-
- if (m_dxsWidth < 0)
- ComputeDimensions();
-
- float * rgxdTmp = new float[cgidMax];
- float * rgdxdAdvTmp = new float[cgidMax];
- res = GetGlyphsAndPositions(rs, rd, cgidMax, pcgidRet,
- NULL, rgxdTmp, prgyd, rgdxdAdvTmp);
- if (ResultFailed(res))
- {
- delete[] rgxdTmp;
- delete[] rgdxdAdvTmp;
- //RestoreFont(pgg);
- ReturnResult(res);
- }
-
- float xdLeft = SegmentPainter::ScaleX(0, rs, rd);
- float xdXPosNatural = xdLeft;
- for (int iginf = 0; iginf < *pcgidRet; iginf++)
- {
- int islout = iginf + m_isloutGinf0;
- GrSlotOutput * pslout = OutputSlot(islout);
- float dxsAdvNatural = pslout->AdvanceXMetric();
- float dxdAdvNatural = SegmentPainter::ScaleX(dxsAdvNatural, rs, rd) - xdLeft;
- prgdxdAdv[iginf] = dxdAdvNatural;
- prgxd[iginf] = rgxdTmp[iginf] - xdXPosNatural;
-
- xdXPosNatural += dxdAdvNatural;
- }
-
- delete[] rgxdTmp;
- delete[] rgdxdAdvTmp;
-
- //RestoreFont(pgg);
-
- ReturnResult(res);
-
-}
-*/
-
-/*----------------------------------------------------------------------------------------------
- Return information about the positioning of glyphs as appropriate for Uniscribe.
- The advance widths returned are the natural ones (what would be applied if no smart
- rendering were happening), and the x-offsets are the difference between the
- natural location of the glyph and what is produced by Graphite. The y-offset
- is the same as GetGlyphsAndPositions.
-
- This is an experimental method. Its behavior may change signficantly in the future.
-----------------------------------------------------------------------------------------------*/
-/*
-GrResult Segment::GetUniscribeGlyphsAndPositions(
- Rect rs, Rect rd, int cgidMax, int *pcgidRet, utf16 * prgchGlyphs,
- float * prgxd, float * prgyd, float * prgdxdAdv)
-{
- ChkGrOutPtr(pcgidRet);
- ChkGrArrayArg(prgxd, cgidMax);
- ChkGrArrayArg(prgyd, cgidMax);
- ChkGrArrayArg(prgdxdAdv, cgidMax);
-
- GrResult res;
-
- //SetUpGraphics(ichBase, pgg, true);
-
- Assert(m_dxsWidth >= 0);
- Assert(m_dysAscent >= 0);
-
- *pcgidRet = m_cginf;
- if (cgidMax < m_cginf)
- {
- res = (cgidMax == 0) ? kresFalse : kresInvalidArg;
- //RestoreFont(pgg);
- ReturnResult(res);
- }
-
- if (m_dxsWidth < 0)
- ComputeDimensions();
-
- float * rgxdTmp = new float[cgidMax];
- float * rgdxdAdvTmp = new float[cgidMax];
- res = GetGlyphsAndPositions(rs, rd, cgidMax, pcgidRet,
- prgchGlyphs, rgxdTmp, prgyd, rgdxdAdvTmp);
- if (ResultFailed(res))
- {
- delete[] rgxdTmp;
- delete[] rgdxdAdvTmp;
- //RestoreFont(pgg);
- ReturnResult(res);
- }
-
- float xdLeft = SegmentPainter::ScaleX(0, rs, rd);
- float xdXPosNatural = xdLeft;
- for (int iginf = 0; iginf < *pcgidRet; iginf++)
- {
- int islout = iginf + m_isloutGinf0;
- GrSlotOutput * pslout = OutputSlot(islout);
- float dxsAdvNatural = pslout->AdvanceXMetric();
- float dxdAdvNatural = SegmentPainter::ScaleX(dxsAdvNatural, rs, rd) - xdLeft;
- prgdxdAdv[iginf] = dxdAdvNatural;
- prgxd[iginf] = rgxdTmp[iginf] - xdXPosNatural;
-
- xdXPosNatural += dxdAdvNatural;
- }
-
- delete[] rgxdTmp;
- delete[] rgdxdAdvTmp;
-
- //RestoreFont(pgg);
-
- ReturnResult(res);
-}
-*/
-
-/*----------------------------------------------------------------------------------------------
- Return the visual box for the given ligature component. Return (0,0,0,0) if the component
- is not defined.
-----------------------------------------------------------------------------------------------*/
-Rect Segment::ComponentRect(GrSlotOutput * pslout, int icomp)
-{
- Rect rectRet;
- rectRet.top = rectRet.bottom = rectRet.left = rectRet.right = 0;
- if (icomp < 0 || icomp > pslout->NumberOfComponents())
- return rectRet;
-
- GrEngine * pgreng = EngineImpl();
- if (!pgreng)
- return rectRet;
- GrGlyphTable * pgtbl = pgreng->GlyphTable();
- if (!pgtbl)
- return rectRet;
-
- float xsLeft, xsRight, ysTop, ysBottom;
-
- // TODO: Rework ComponentIndexForGlyph to take slati rather than iForGlyph.
- int slati = pslout->ComponentId(icomp);
- int iForGlyph = pgtbl->ComponentIndexForGlyph(pslout->GlyphID(), slati);
- if (!pgtbl->ComponentBoxLogUnits(m_xysEmSquare, pslout->GlyphID(), iForGlyph,
- m_mFontEmUnits, m_dysAscent,
- &xsLeft, &ysTop, &xsRight, &ysBottom,
- false)) // origin is baseline
- {
- return rectRet;
- }
- rectRet.top = ysTop;
- rectRet.bottom = ysBottom;
- rectRet.left = xsLeft;
- rectRet.right = xsRight;
-
- return rectRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Shift the glyphs physically by the given amount. This happens when a right-to-left
- segment is changed from being end-of-line to not, so we have to account for the fact
- that the trailing white-space was previous invisible but is now visible.
-----------------------------------------------------------------------------------------------*/
-void Segment::ShiftGlyphs(float dxsShift)
-{
- for (int islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * pslout = OutputSlot(islout);
- pslout->AdjustPosXBy(dxsShift);
- }
-
- //ShiftGlyphsPlatform(dxsShift);
-}
-
-/*----------------------------------------------------------------------------------------------
- Find the glyph that best matches the given click location.
-
- @param xsClick - relative to start of segment
- @param ysClick - relative to segment baseline
-----------------------------------------------------------------------------------------------*/
-int Segment::GlyphHit(float xsClick, float ysClick)
-{
- float xsLeft = kPosInfFloat;
- float xsRight = kNegInfFloat;
-
- int iginf;
- for (iginf = 0; iginf < m_cginf; iginf++)
- {
- GlyphInfo * pginf = m_prgginf + iginf;
- xsLeft = min(xsLeft, pginf->origin());
- xsRight = max(xsRight, pginf->origin() + pginf->advanceWidth());
- }
-
- if (xsClick < xsLeft)
- return m_fWsRtl ? m_cginf - 1 : 0;
- else if (xsClick > xsRight)
- return m_fWsRtl ? 0 : m_cginf - 1;
-
- int iginfHit;
- std::vector<int> viginfNear;
- std::vector<int> viginfHit;
- std::vector<int> viginfInside;
-
- // Find glyph which might contain click point.
-
- for (iginfHit = m_cginf; iginfHit-- > 0; )
- {
- if (m_fWsRtl)
- {
- if (m_prgginf[iginfHit].bb().right >= xsClick)
- break;
- }
- else
- {
- if (m_prgginf[iginfHit].bb().left <= xsClick)
- break;
- }
- }
- if (iginfHit < 0) // click within lsb of first glyph
- {
- return 0;
- }
-
- // Find all BB that OVERLAP the click point (bb.left < XClick < bb.right).
- for (iginf = iginfHit; iginf >= 0; iginf--)
- {
- Rect rectBB = m_prgginf[iginf].bb();
- if (rectBB.left <= xsClick && xsClick <= rectBB.right)
- {
- viginfNear.push_back(iginf);
- }
- }
-
- // Find all BB that CONTAIN the click point (considering the click's Y coor too).
- int iiginf;
- for (iiginf = 0; iiginf < (int)viginfNear.size(); iiginf++)
- {
- Rect rectBB = m_prgginf[viginfNear[iiginf]].bb();
- if (rectBB.bottom <= ysClick && ysClick <= rectBB.top)
- {
- viginfHit.push_back(viginfNear[iiginf]);
- }
- }
-
- if (viginfNear.size() > 2 && viginfHit.size() == 0)
- {
- // No hit along y-axis; find the closest thing.
- float dy = float(10000000.0);
- for (int iiginf2 = 0; iiginf2 < (int)viginfNear.size(); iiginf2++)
- {
- Rect rectBB = m_prgginf[viginfNear[iiginf2]].bb();
- if (fabsf(rectBB.top - ysClick) < dy)
- {
- dy = fabsf(rectBB.top - ysClick);
- viginfHit.clear();
- viginfHit.push_back(viginfNear[iiginf2]);
- }
- if (fabsf(rectBB.bottom - ysClick) < dy)
- {
- dy = fabsf(rectBB.bottom - ysClick);
- viginfHit.clear();
- viginfHit.push_back(viginfNear[iiginf2]);
- }
- }
- }
-
- // Find all BB for which the click is within their advance width, if any.
- for (iiginf = 0; iiginf < (int)viginfHit.size(); iiginf++)
- {
- //Rect rectBB = m_prgginf[viginfHit[iiginf]].bb(); -- ?? this tests the bounding box again :-/
- //if (rectBB.left <= xsClick && xsClick <= rectBB.right)
- gr::GlyphInfo * pginf = m_prgginf + viginfHit[iiginf];
- if (pginf->advanceWidth() == 0 // advance width is irrelevant
- || (pginf->origin() < xsClick && xsClick <= pginf->origin() + pginf->advanceWidth()))
- {
- viginfInside.push_back(viginfHit[iiginf]);
- }
- }
-
- // If no BB coincides in any way with the click point, take the BB whose leading edge
- // is closest to the click point.
- // There could be more than one BB with the same leading x coor.
- if (viginfHit.size() == 0 && viginfNear.size() == 0 && viginfInside.size() == 0)
- {
- float xsLeading;
- if (iginfHit + 1 == m_cginf)
- {
- viginfNear.push_back(iginfHit);
- }
- else if (!m_fWsRtl)
- {
- // Left-to-right:
- xsLeading = m_prgginf[iginfHit + 1].bb().left;
- for (iginf = iginfHit + 1; iginf < m_cginf; iginf++)
- {
- if (m_prgginf[iginf].bb().left == xsLeading)
- viginfNear.push_back(iginf);
- }
- }
- else
- {
- // Right-to-left:
- xsLeading = m_prgginf[iginfHit].bb().right;
- for (iginf = iginfHit; iginf < m_cginf; iginf++)
- {
- if (m_prgginf[iginf].bb().right == xsLeading)
- viginfNear.push_back(iginf);
- }
- }
- }
-
- Assert(viginfNear.size());
-
- int iginfLoc;
-
- // Select the BB based on its leading edge, offset from baseline, position in final pass.
- if (viginfInside.size())
- iginfLoc = SelectBb(viginfInside, m_fWsRtl);
- else if (viginfHit.size())
- iginfLoc = SelectBb(viginfHit, m_fWsRtl);
- else
- iginfLoc = SelectBb(viginfNear, m_fWsRtl);
-
- return iginfLoc;
-}
-
-/*----------------------------------------------------------------------------------------------
- Select the bounding box we will use for a mouse hit.
- First select any glyph with a significantly smaller bounding box.
- Then, select the BB with the left-most (LTR) or right-most (RTL) edge.
- If more than one BB has same edge of interest, select the one that is closest to the
- the baseline.
- If that is a tie, select the one with the lowest islout.
-
- @param vigbb - list of indexes into m_prggbb
- @param fRTL - writing system direction
-----------------------------------------------------------------------------------------------*/
-int Segment::SelectBb(std::vector<int> & viginf, bool fRTL)
-{
- if (!viginf.size())
- {
- Assert(false);
- return -1;
- }
-
- if (viginf.size() == 1)
- return viginf[0];
-
- // Find a glyph that has a signficantly smaller bounding box.
- // The idea is that it is going to be harder to hit than the bigger glyph.
- float smallestArea = float(1000000000.0);
- float largestArea = 0.0;
- size_t iiginfSmallest = 0;
- size_t iiginf;
- for (iiginf = 0; iiginf < viginf.size(); iiginf++)
- {
- gr::GlyphInfo * pginf = m_prgginf + viginf[iiginf];
- Rect rectBB = pginf->bb();
- float thisArea = (rectBB.right - rectBB.left) * (rectBB.top - rectBB.bottom);
- if (smallestArea > thisArea)
- {
- smallestArea = thisArea;
- iiginfSmallest = iiginf;
- }
- largestArea = max(largestArea, thisArea);
- }
- if (smallestArea * 2.0 < largestArea)
- return viginf[iiginfSmallest];
-
- // Find appropriate x coor of leading edge.
- float xsLeading;
- if (!fRTL)
- xsLeading = m_prgginf[viginf[0]].bb().left;
- else
- xsLeading = m_prgginf[viginf[0]].bb().right;
-
- for (iiginf = 1; iiginf < viginf.size(); iiginf++)
- {
- Rect rectBB = m_prgginf[viginf[iiginf]].bb();
- if (!fRTL)
- xsLeading = min(xsLeading, rectBB.left);
- else
- xsLeading = max(xsLeading, rectBB.right);
- }
-
- // Find BBs with the leading edge.
- std::vector<int> viginfSameEdge;
- for (iiginf = 0; iiginf < viginf.size(); iiginf++)
- {
- Rect rectBB = m_prgginf[viginf[iiginf]].bb();
- if (!fRTL)
- {
- if (rectBB.left == xsLeading)
- viginfSameEdge.push_back(viginf[iiginf]);
- }
- else
- {
- if (rectBB.right == xsLeading)
- viginfSameEdge.push_back(viginf[iiginf]);
- }
- }
-
- if (viginfSameEdge.size() == 1)
- return viginfSameEdge[0];
-
- // Find minimum distance from baseline.
- float ysMin = fabsf(m_prgginf[viginfSameEdge[0]].yOffset());
- for (iiginf = 1; iiginf < viginfSameEdge.size(); iiginf++)
- {
- float ysThis = fabsf(m_prgginf[viginfSameEdge[iiginf]].yOffset());
- ysMin = min(ysMin, ysThis);
- }
-
- // Find BBs with minimum distance from baseline.
- std::vector<int> viginfSameY;
- for (iiginf = 0; iiginf < viginfSameEdge.size(); iiginf++)
- {
- if (fabsf(m_prgginf[viginfSameEdge[iiginf]].yOffset()) == ysMin)
- viginfSameY.push_back(viginfSameEdge[iiginf]);
- }
-
- if (viginfSameY.size() == 1)
- return viginfSameY[0];
-
- // Find minimum index of current candidates.
- int islout = m_prgginf[viginfSameY[0]].logicalIndex();
- for (iiginf = 1; iiginf < viginfSameY.size(); iiginf++)
- {
- int isloutThis = m_prgginf[viginfSameY[iiginf]].logicalIndex();
- islout = min(islout, isloutThis);
- }
-
- // Find BB with minimum islout - islout should be unique for all glyphs.
- for (iiginf = 0; iiginf < viginfSameY.size(); iiginf++)
- {
- if (m_prgginf[viginfSameY[iiginf]].logicalIndex() == (unsigned)islout)
- return viginfSameY[iiginf];
- }
-
- Assert(false);
- return -1; // needed to stop compiler warning
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the right-most glyph on the physical surface. If there are ties, it will
- prefer the one that is logically closest to the edge.
-----------------------------------------------------------------------------------------------*/
-int Segment::RightMostGlyph()
-{
- float xsRight = kNegInfFloat;
- int iginfRet = -1;
- for (int iginf = 0; iginf < m_cginf; iginf++)
- {
- float xsThis = m_prgginf[iginf].bb().right;
- // For RTL, we prefer the glyph that is logically first; for LTR we prefer logically last.
- if (xsThis > xsRight || (!m_fWsRtl && xsRight == xsThis))
- {
- xsRight = xsThis;
- iginfRet = iginf;
- }
- }
- return iginfRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the left-most glyph on the physical surface. If there are ties, it will
- prefer the one that is logically closest to the edge.
-----------------------------------------------------------------------------------------------*/
-int Segment::LeftMostGlyph()
-{
- float xsLeft = kPosInfFloat;
- int iginfRet = -1;
- for (int iginf = 0; iginf < m_cginf; iginf++)
- {
- float xsThis = m_prgginf[iginf].bb().left;
- // For RTL, we prefer the glyph that is logically last; for LTR we prefer logically first.
- if (xsThis < xsLeft || (m_fWsRtl && xsLeft == xsThis))
- {
- xsLeft = xsThis;
- iginfRet = iginf;
- }
- }
- return iginfRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Convert from em-units to logical units.
-----------------------------------------------------------------------------------------------*/
-float Segment::EmToLogUnits(int m)
-{
- return GrEngine::GrIFIMulDiv(m, m_xysEmSquare, m_mFontEmUnits);
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the line-break pseudo glyph ID.
-----------------------------------------------------------------------------------------------*/
-gid16 Segment::LBGlyphID()
-{
- return m_preneng->LBGlyphID();
-}
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/SegmentAux.cpp b/Build/source/libs/graphite-engine/src/segment/SegmentAux.cpp
deleted file mode 100644
index 9191e8724d5..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/SegmentAux.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2005 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: SegmentAux.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Implements auxiliary class that work with Segment:
- - GlyphInfo
- - GlyphIterator
- - LayoutEnvironment
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-// any other headers (not precompiled)
-#ifndef _WIN32
-#include <stdlib.h>
-#endif
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> GlyphInfo methods
-//:>********************************************************************************************
-
-gid16 GlyphInfo::glyphID()
-{
- return m_pslout->m_chwActual;
-}
-
-gid16 GlyphInfo::pseudoGlyphID()
-{
- if (m_pslout->m_chwActual == m_pslout->m_chwGlyphID)
- return 0; // not a pseudo-glyph
- return m_pslout->m_chwGlyphID;
-}
-
-bool GlyphInfo::isAttached() const throw()
-{
- return m_pslout->IsPartOfCluster();
-}
-
-gr::GlyphIterator GlyphInfo::attachedClusterBase() const throw()
-{
- const int islout = m_pslout->ClusterBase();
-
- // Since we are not passing an array, the constructor expects a ginf index, not a slout index.
- return GlyphIterator(*m_pseg, ((islout >= 0) ? islout : m_islout) - m_pseg->m_isloutGinf0);
-}
-
-float GlyphInfo::attachedClusterAdvance() const throw()
-{
- return m_pslout->ClusterAdvance();
-}
-
-std::pair<gr::GlyphSetIterator, gr::GlyphSetIterator> GlyphInfo::attachedClusterGlyphs() const
-{
- std::vector<int> visloutClusterMembers;
- m_pslout->ClusterMembers(m_pseg, m_islout, visloutClusterMembers);
- RcVector * qvislout = new RcVector(visloutClusterMembers);
- return std::make_pair(
- GlyphSetIterator(*m_pseg, 0, qvislout),
- GlyphSetIterator(*m_pseg, visloutClusterMembers.size(), qvislout));
-}
-
-size_t GlyphInfo::logicalIndex()
-{
- if (m_pseg->OutputSlot(0)->IsLineBreak())
- return m_islout - 1;
- else
- return m_islout;
-}
-
-float GlyphInfo::origin()
-{
- return m_pslout->XPosition();
-}
-
-float GlyphInfo::advanceWidth() // logical units
-{
- return m_pslout->m_xsAdvanceX;
-}
-
-float GlyphInfo::advanceHeight() // logical units; zero for horizontal fonts
-{
- Font & font = m_pseg->getFont();
- return m_pslout->GlyphMetricLogUnits(&font, kgmetAdvHeight);
-}
-
-float GlyphInfo::yOffset()
-{
- return m_pslout->YPosition();
-}
-
-Rect GlyphInfo::bb() // logical units
-{
- return m_pslout->BoundingBox(m_pseg->getFont());
-}
-
-bool GlyphInfo::isSpace()
-{
- return m_pslout->IsSpace();
-}
-
-// first char associated with this glyph, relative to start of the text-source
-toffset GlyphInfo::firstChar()
-{
- return m_pseg->LogicalSurfaceToUnderlying(m_islout, true);
-}
-
-// last char associated with this glyph, relative to start of the text-source
-toffset GlyphInfo::lastChar()
-{
- return m_pseg->LogicalSurfaceToUnderlying(m_islout, false);
-}
-
-unsigned int GlyphInfo::directionality()
-{
- return m_pslout->Directionality();
-}
-
-// Embedding depth
-unsigned int GlyphInfo::directionLevel()
-{
- return m_pslout->DirLevel();
-}
-
-bool GlyphInfo::insertBefore()
-{
- return m_pslout->InsertBefore();
-}
-
-int GlyphInfo::breakweight()
-{
- return m_pslout->BreakWeight();
-}
-
-float GlyphInfo::maxStretch(size_t level)
-{
- return m_pslout->MaxStretch(m_pseg, (int)level);
-}
-
-float GlyphInfo::maxShrink(size_t level)
-{
- return m_pslout->MaxShrink(m_pseg, (int)level);
-}
-
-float GlyphInfo::stretchStep(size_t level)
-{
- return m_pslout->StretchStep(m_pseg, (int)level);
-}
-
-byte GlyphInfo::justWeight(size_t level)
-{
- return byte(m_pslout->JustWeight((int)level));
-}
-
-float GlyphInfo::justWidth(size_t level)
-{
- return m_pslout->JustWidth(m_pseg, (int)level);
-}
-
-float GlyphInfo::measureStartOfLine()
-{
- return m_pslout->MeasureSolLogUnits(m_pseg);
-}
-
-float GlyphInfo::measureEndOfLine()
-{
- return m_pslout->MeasureEolLogUnits(m_pseg);
-}
-
-size_t GlyphInfo::numberOfComponents()
-{
- return m_pslout->NumberOfComponents();
-}
-
-Rect GlyphInfo::componentBox(size_t icomp)
-{
- return m_pseg->ComponentRect(m_pslout, icomp);
-}
-
-toffset GlyphInfo::componentFirstChar(size_t icomp)
-{
- Assert((int)icomp < m_pslout->NumberOfComponents());
- return m_pslout->UnderlyingComponent(icomp) + m_pseg->startCharacter();
-}
-toffset GlyphInfo::componentLastChar(size_t icomp)
-{
- Assert((int)icomp < m_pslout->NumberOfComponents());
- return m_pslout->UnderlyingComponent(icomp) + m_pseg->startCharacter();
-}
-
-bool GlyphInfo::erroneous()
-{
- return m_pseg->Erroneous();
-}
-
-
-//:>********************************************************************************************
-//:> GlyphIterator methods
-//:>********************************************************************************************
-
-// Constructor
-GlyphIterator::GlyphIterator(Segment & seg, size_t iginf)
-: m_pginf(seg.m_prgginf + iginf)
-{}
-
-// Copy constructor.
-// Check if the incoming iterator is null, as we cannot dereference
-// it to get the segment, and create a null GlyphIterator.
-// Technically this might better be an assert as converting a null
-// GlyphSetIterator into a null GlyphIterator is pointless and suggests
-// some kind of error.
-GlyphIterator::GlyphIterator(const GlyphSetIterator & sit)
-: m_pginf((sit == GlyphSetIterator())
- ? 0
- : sit->segment().m_prgginf + sit->logicalIndex())
-{}
-
-/*----------------------------------------------------------------------------------------------
- Dereference the iterator, returning a GlyphInfo object.
-----------------------------------------------------------------------------------------------*/
-
-GlyphSetIterator::reference GlyphSetIterator::operator*() const
-{
- assert(m_pseg != 0);
- assert(m_vit != std::vector<int>::const_iterator());
- // in the case of a non-contiguous list
- return m_pseg->m_prgginf[(*m_vit) - m_pseg->m_isloutGinf0];
-}
-
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/TestFSM.cpp b/Build/source/libs/graphite-engine/src/segment/TestFSM.cpp
deleted file mode 100644
index 6dad1dc9dc8..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/TestFSM.cpp
+++ /dev/null
@@ -1,3416 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TestFSM.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Hard-coded FSMs for test procedures.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:Ignore
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-#ifdef OLD_TEST_STUFF
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-#ifndef _DEBUG
-
-bool GrLineBreakPass::RunTestRules(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-bool GrSubPass::RunTestRules(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-bool GrPosPass::RunTestRules(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-#endif // !_DEBUG
-
-
-#ifdef _DEBUG
-
-/*----------------------------------------------------------------------------------------------
- Call the appropriate test function.
-----------------------------------------------------------------------------------------------*/
-
-bool GrLineBreakPass::RunTestRules(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-bool GrSubPass::RunTestRules(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- if (m_staBehavior == "SimpleFSM")
- return RunSimpleFSMTest(ptman, ruln, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "RuleAction")
- return false;
- else if (m_staBehavior == "RuleAction2")
- return false;
- else if (m_staBehavior == "Assoc")
- return false;
- else
- return false;
-}
-
-bool GrPosPass::RunTestRules(GrTableManager * ptman, int ruln,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- A simple FSM.
-
- Rules:
- r1. clsCons clsVowel clsDiacrAcute
- r2. clsCons clsVowelAE clsDiacr
- r3. clsCons clsVowelI
- r4. clsCons clsVowelI clsDiacrGrave
- r5. clsCons clsVowelI clsDiacr
-
- Machine classes:
- mcCons: b,c,d / f,g,h / j,k,l,m,n / p,q,r,s,t / v,w,x,y,z
- mcVae: a 97/ e 101
- mcVi: i 105
- mcVou: o 111 / u 117
- mcDa: acute '/' 47
- mcDg: grave '\' 92
- mcDct: other diacritics-circumflex '^' 94 / tilde '~' 126
-
-
- FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | mcCons mcVae mcVi mcVou mcDa mcDg mcDct
- ---------------------------------------------------------------------------
- T NA s0 | s1
- | - - - - - - -
- T NA s1 | s2 s4 s3
- | - - - - - - -
- T NA s2 | s5 s6 s6
- | - - - - - - -
- T NA s3 | s10
- | - - - - - - -
- T A s4 | s7 s8 s9
- | - - - - - - -
- F A s5 |
- | - - - - - - -
- F A s6 |
- | - - - - - - -
- F A s7 |
- | - - - - - - -
- F A s8 |
- | - - - - - - -
- F A s9 |
- | - - - - - - -
- F A s10 |
- | - - - - - - -
-
- Rules Matched:
- s4: r3
- s5: r1, r2
- s6: r2
- s7: r1, r5
- s8: r4, r5
- s9: r5
- s10: r1
-
-----------------------------------------------------------------------------------------------*/
-
-void GrSubPass::SetUpSimpleFSMTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 3;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "SimpleFSM";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpSimpleFSMTest();
-}
-
-void GrFSM::SetUpSimpleFSMTest()
-{
- // Create machine class ranges.
- m_cmcr = 14;
- m_prgmcr = new GrFSMClassRange[14];
- m_prgmcr[0].m_chwFirst = 47; // forward slash (acute): mcDa
- m_prgmcr[0].m_chwLast = 47;
- m_prgmcr[0].m_col = 4;
-
- m_prgmcr[1].m_chwFirst = 92; // backslash: mcDg
- m_prgmcr[1].m_chwLast = 92;
- m_prgmcr[1].m_col = 5;
-
- m_prgmcr[2].m_chwFirst = 94; // caret: mcDct
- m_prgmcr[2].m_chwLast = 94;
- m_prgmcr[2].m_col = 6;
-
- m_prgmcr[3].m_chwFirst = 97; // a: mcVae
- m_prgmcr[3].m_chwLast = 97;
- m_prgmcr[3].m_col = 1;
-
- m_prgmcr[4].m_chwFirst = 98; // b - d: mcCons
- m_prgmcr[4].m_chwLast = 100;
- m_prgmcr[4].m_col = 0;
-
- m_prgmcr[5].m_chwFirst = 101; // e: mcVae
- m_prgmcr[5].m_chwLast = 101;
- m_prgmcr[5].m_col = 1;
-
- m_prgmcr[6].m_chwFirst = 102; // f - h: mcCons
- m_prgmcr[6].m_chwLast = 104;
- m_prgmcr[6].m_col = 0;
-
- m_prgmcr[7].m_chwFirst = 105; // i: mcVi
- m_prgmcr[7].m_chwLast = 105;
- m_prgmcr[7].m_col = 2;
-
- m_prgmcr[8].m_chwFirst = 106; // j - n: mcCons
- m_prgmcr[8].m_chwLast = 110;
- m_prgmcr[8].m_col = 0;
-
- m_prgmcr[9].m_chwFirst = 111; // o: mcVou
- m_prgmcr[9].m_chwLast = 111;
- m_prgmcr[9].m_col = 3;
-
- m_prgmcr[10].m_chwFirst = 112; // p - t: mcCons
- m_prgmcr[10].m_chwLast = 116;
- m_prgmcr[10].m_col = 0;
-
- m_prgmcr[11].m_chwFirst = 117; // u: mcVou
- m_prgmcr[11].m_chwLast = 117;
- m_prgmcr[11].m_col = 3;
-
- m_prgmcr[12].m_chwFirst = 118; // v - z: mcCons
- m_prgmcr[12].m_chwLast = 122;
- m_prgmcr[12].m_col = 0;
-
- m_prgmcr[13].m_chwFirst = 126; // tilde: mcDct
- m_prgmcr[13].m_chwLast = 126;
- m_prgmcr[13].m_col = 6;
-
- m_dimcrInit = 8; // (max power of 2 <= m_cmcr);
- m_cLoop = 3; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 11;
- m_crowNonAcpt = 4;
- m_crowFinal = 6;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 7;
-
- // Set up transition table.
- m_prgrowTransitions = new short[35]; // 35 = (m_crow-m_crowFinal) * m_ccol
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 2; *psn++ = 4; *psn++ = 3; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 5; *psn++ = 6; *psn++ = 6;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =10; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 7; *psn++ = 8; *psn++ = 9;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[10]; // 10 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[7+1]; // 7 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s4: r3
- m_prgrulnMatched[0] = 3;
-
- m_prgirulnMin[1] = 1; // s5: r1, r2
- m_prgrulnMatched[1] = 1;
- m_prgrulnMatched[2] = 2;
-
- m_prgirulnMin[2] = 3; // s6: r2
- m_prgrulnMatched[3] = 2;
-
- m_prgirulnMin[3] = 4; // s7: r1, r5
- m_prgrulnMatched[4] = 1;
- m_prgrulnMatched[5] = 5;
-
- m_prgirulnMin[4] = 6; // s8: r4, r5
- m_prgrulnMatched[6] = 4;
- m_prgrulnMatched[7] = 5;
-
- m_prgirulnMin[5] = 8; // s9: r5
- m_prgrulnMatched[8] = 5;
-
- m_prgirulnMin[6] = 9; // s10: r1
- m_prgrulnMatched[9] = 1;
-
- m_prgirulnMin[7] = 10;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- The "rule" does something silly: just inserts *'s--the number equals the number of the
- rule.
-----------------------------------------------------------------------------------------------*/
-bool GrSubPass::RunSimpleFSMTest(GrTableManager * ptman, int ruln, GrSlotStream * psstrmInput,
- GrSlotStream * psstrmOutput)
-{
- int cslotMatched = (ruln == 3)? 2: 3;
-
- GrSlotState * pslot0 = psstrmInput->Peek(0);
-
- for (int islot = 0; islot < cslotMatched; islot++)
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- for (islot = 0; islot < ruln; islot++)
- {
- GrSlotState * pslot;
- ptman->NewSlot('*', pslot0, NULL, m_ipass, &pslot);
- pslot->Associate(pslot0);
- psstrmOutput->NextPut(pslot);
- }
-
- return true;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- A simple set of rules with actions.
-
- Rules:
- r0. clsDigit gSlash clsDigit _ > @3 _ @1 gTilde; // tilde = 126
- r1. _ clsDigit gBackSlash clsDigit > gDollar @4 _ @2; // dollar sign = 36
-
- Machine classes:
- mcDigit: '0' - '9' 48 - 57
- mcSlash: '/' 47
- mcBSlash: '\' 92
-
-
- FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | clsDig mcSlash mcBSlash
- ------------------------------------------------------
- T NA s0 | s1
- | - - -
- T NA s1 | s2 s3
- | - - -
- T NA s2 | s4
- | - - -
- T NA s3 | s5
- | - - -
- F A s4 |
- | - - -
- F A s5 |
- | - - -
-
- Rules Matched:
- s4: r0
- s5: r1
-
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpRuleActionTest()
-{
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpRuleActionTest();
-}
-
-void GrClassTable::SetUpRuleActionTest()
-{
- m_ccls = 2; // number of classes
- m_cclsLinear = 2; // number of classes in linear format
-
- m_prgchwBIGGlyphList = new data16[100];
-
- m_prgichwOffsets = new data16[2+1];
-
- gid16 * pchw = m_prgchwBIGGlyphList;
-
- // Output class 0: tilde
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(126)); // '~'
-
- // Output class 1: dollar
- m_prgichwOffsets[1] = 1;
- *pchw++ = msbf(data16(36)); // '$'
-
- m_prgichwOffsets[2] = 2;
-}
-
-void GrSubPass::SetUpRuleActionTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 3;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "RuleAction";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpRuleActionTest();
-
- m_crul = 2;
-
- // Set up constraint code--succeed trivially.
- m_prgbConstraintBlock = new byte[3];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopPushByte; *pb++ = 1; // Push true
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
- m_prgibConstraintStart[1] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[30];
- pb = m_prgbActionBlock;
-
- // Rule 1: clsDigit gSlash clsDigit _ > @3 _ @1 gTilde;
-
- *pb++ = kopPutCopy; *pb++ = 2; // PutCopy 2
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopPutCopy; *pb++ = -2; // PutCopy -2
- *pb++ = kopNext; // Next
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutGlyph8bitObs; *pb++ = 0; // PutGlyph 0 ('~' = 126)
- *pb++ = kopNext; // Next
- *pb++ = kopPushByte; *pb++ = 0; // Push 0
- *pb++ = kopPopRet; // PopAndRet
-
- // Rule 2: _ clsDigit gBackSlash clsDigit > gDollar @4 _ @2;
-
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutGlyph8bitObs; *pb++ = 1; // PutGlyph 1 ('$' = 36)
- *pb++ = kopNext; // Next
- *pb++ = kopPutCopy; *pb++ = 2; // PutCopy 2
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopPutCopy; *pb++ = -2; // PutCopy -2
- *pb++ = kopNext; // Next
- *pb++ = kopPushByte; *pb++ = 0; // Push 0
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 15;
-}
-
-void GrFSM::SetUpRuleActionTest()
-{
- // Create machine class ranges.
- m_cmcr = 3;
- m_prgmcr = new GrFSMClassRange[3];
- m_prgmcr[0].m_chwFirst = 47; // forward slash: mcSlash
- m_prgmcr[0].m_chwLast = 47;
- m_prgmcr[0].m_col = 1;
-
- m_prgmcr[1].m_chwFirst = 48; // 0 - 9: mcDigit
- m_prgmcr[1].m_chwLast = 57;
- m_prgmcr[1].m_col = 0;
-
- m_prgmcr[2].m_chwFirst = 92; // backslash
- m_prgmcr[2].m_chwLast = 92;
- m_prgmcr[2].m_col = 2;
-
-
- m_dimcrInit = 2; // (max power of 2 <= m_cmcr);
- m_cLoop = 1; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 6;
- m_crowNonAcpt = 4;
- m_crowFinal = 2;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 3;
-
- // Set up transition table.
- m_prgrowTransitions = new short[12]; // 12 = (m_crow-m_crowFinal) * m_ccol
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 2; *psn++ = 3;
- *psn++ = 4; *psn++ = 0; *psn++ = 0;
- *psn++ = 5; *psn++ = 0; *psn++ = 0;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[2]; // 2 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[2+1]; // 2 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s4: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1; // s5: r1
- m_prgrulnMatched[1] = 1;
-
- m_prgirulnMin[2] = 2;
-}
-
-/*----------------------------------------------------------------------------------------------
- A more complicated set of rules with actions.
-
- PASS 1:
- r0. clsDigit > @1 {dir = DIR_RIGHT} / ^ _ {dir == DIR_LEFT};
- r1. clsSpecial > @2 {dir = DIR_ARABNUMBER} / clsDigit {dir != DIR_LEFT} ^ _;
- r2. clsSpecial > @2 {dir = @1.dir} / clsSpecial ^ _;
-
- Pass 1 machine classes:
- mcDigit: '0' - '9' 48 - 57
- mcSpecial: '-', '_', '=', '~' 45, 95, 61, 126
-
- Pass 1 FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | mcDigit mcSpecial
- ------------------------------------------
- T NA s0 | s2 s1
- | - _
- T NA s1 | s4
- | - -
- T A s2 | s3
- | - -
- F A s3 |
- | - -
- F A s4 |
- | - -
-
- Rules Matched:
- s2: r0
- s3: r1
- s4: r2
-
- PASS 2:
- r0. clsVowel gCaret > clsCirumVowel _;
- r1. clsVowel gSlash > _ clsAcuteVowel$1;
-
- Pass 2 machine classes:
- mcVowel
- mcCaret: '^' 94
- mcSlash: '/' 47
-
-
- Pass 2 FSM:
- | mcVowel mcCaret mcSlash
- -----------------------------------------------------
- T NA s0 | s1
- | - _
- T NA s1 | s2 s3
- | - -
- F A s2 |
- | - -
- F A s3 |
- | - -
-
- Rules matched:
- s2: r0
- s3: r1
-
-
- PASS 3:
- r0. clsLeft > clsRight {dir = @1.dir} / _ clsDir {dir==DIR_RIGHT};
- r1. clsRight > clsLeft {dir = @1.dir} / clsDir {dir==DIR_RIGHT} _;
-
- Pass 3 machine classes:
- mcDir: (clsDigit, clsSpecial)
- mcLeft: '(', '[', '{' 40, 91, 123
- mcRight: ')', ']', '}' 41, 93, 125
-
- Pass 3 FSM:
- | mcDir mcLeft mcRight
- -----------------------------------------------------
- T NA s0 | s2 s1
- | - _
- T NA s1 | s3
- | - -
- T NA s2 | s4
- | - -
- F A s3 |
- | - -
- F A s4 |
- | - -
-
- Rules matched:
- s3: r0
- s4: r1
-
-
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpRuleAction2Test()
-{
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpRuleAction2Test();
-}
-
-void GrClassTable::SetUpRuleAction2Test()
-{
- m_ccls = 7; // number of classes
- m_cclsLinear = 4; // number of classes in linear format
-
- m_prgchwBIGGlyphList = new data16[70];
-
- m_prgichwOffsets = new data16[7+1];
-
- data16 * pchw = m_prgchwBIGGlyphList;
-
- // Output class 0: clsCirumVowel
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(226)); // a
- *pchw++ = msbf(data16(234)); // e
- *pchw++ = msbf(data16(238)); // i
- *pchw++ = msbf(data16(244)); // o
- *pchw++ = msbf(data16(251)); // u
- *pchw++ = msbf(data16(194)); // A
- *pchw++ = msbf(data16(202)); // E
- *pchw++ = msbf(data16(206)); // I
- *pchw++ = msbf(data16(212)); // O
- *pchw++ = msbf(data16(219)); // U
-
- // Output class 1: clsAcuteVowel
- m_prgichwOffsets[1] = 10;
- *pchw++ = msbf(data16(225)); // a
- *pchw++ = msbf(data16(233)); // e
- *pchw++ = msbf(data16(237)); // i
- *pchw++ = msbf(data16(243)); // o
- *pchw++ = msbf(data16(250)); // u
- *pchw++ = msbf(data16(193)); // A
- *pchw++ = msbf(data16(201)); // E
- *pchw++ = msbf(data16(205)); // I
- *pchw++ = msbf(data16(211)); // O
- *pchw++ = msbf(data16(218)); // U
-
- // Output class 2: clsLeft
- m_prgichwOffsets[2] = 10 + 10;
- *pchw++ = msbf(data16(40)); // (
- *pchw++ = msbf(data16(91)); // [
- *pchw++ = msbf(data16(123)); // {
-
- // Output class 3: clsRight
- m_prgichwOffsets[3] = 20 + 3;
- *pchw++ = msbf(data16(41)); // )
- *pchw++ = msbf(data16(93)); // ]
- *pchw++ = msbf(data16(125)); // }
-
- // Input class 4: clsVowel
- m_prgichwOffsets[4] = 23 + 3; // 26
- *pchw++ = msbf(data16(10));
- *pchw++ = msbf(data16(8)); *pchw++ = msbf(data16(3)); *pchw++ = msbf(data16(10-8));
- *pchw++ = msbf(data16(65)); *pchw++ = msbf(data16(5)); // A
- *pchw++ = msbf(data16(69)); *pchw++ = msbf(data16(6)); // E
- *pchw++ = msbf(data16(73)); *pchw++ = msbf(data16(7)); // I
- *pchw++ = msbf(data16(79)); *pchw++ = msbf(data16(8)); // O
- *pchw++ = msbf(data16(85)); *pchw++ = msbf(data16(9)); // U
- *pchw++ = msbf(data16(97)); *pchw++ = msbf(data16(0)); // a
- *pchw++ = msbf(data16(101)); *pchw++ = msbf(data16(1)); // e
- *pchw++ = msbf(data16(105)); *pchw++ = msbf(data16(2)); // i
- *pchw++ = msbf(data16(111)); *pchw++ = msbf(data16(3)); // o
- *pchw++ = msbf(data16(117)); *pchw++ = msbf(data16(4)); // u
-
- // Input class 5: clsLeft
- m_prgichwOffsets[5] = 26 + 4 + 10*2; // 50
- *pchw++ = msbf(data16(3));
- *pchw++ = msbf(data16(2)); *pchw++ = msbf(data16(1)); *pchw++ = msbf(data16(3-2));
- *pchw++ = msbf(data16(40)); *pchw++ = msbf(data16(0)); // (
- *pchw++ = msbf(data16(91)); *pchw++ = msbf(data16(1)); // [
- *pchw++ = msbf(data16(123)); *pchw++ = msbf(data16(2)); // {
-
- // Input class 6: clsRight
- m_prgichwOffsets[6] = 50 + 4 + 3*2; // 60
- *pchw++ = msbf(data16(3));
- *pchw++ = msbf(data16(2)); *pchw++ = msbf(data16(1)); *pchw++ = msbf(data16(3-2));
- *pchw++ = msbf(data16(41)); *pchw++ = msbf(data16(0)); // )
- *pchw++ = msbf(data16(93)); *pchw++ = msbf(data16(1)); // ]
- *pchw++ = msbf(data16(125)); *pchw++ = msbf(data16(2)); // }
-
- m_prgichwOffsets[7] = 60 + 4 + 3*2; // 70
-}
-
-void GrSubPass::SetUpRuleAction2Test()
-{
- if (m_ipass == 1)
- {
- m_nMaxRuleContext = m_nMaxChunk = 2;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "RuleAction2";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpRuleAction2Test(m_ipass);
-
- m_crul = 3;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1 + 10 + 10];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- *pb++ = kopCntxtItem; *pb++ = 0; // ContextItem 0
- *pb++ = kopPushSlotAttr; *pb++= kslatDir; // PushSlotAttr dir 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = kdircL; // Push DIR_LEFT
- *pb++ = kopEqual; // Equal
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- *pb++ = kopCntxtItem; *pb++ = 0; // ContextItem 0
- *pb++ = kopPushSlotAttr; *pb++= kslatDir; // PushSlotAttr dir 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = kdircL; // Push DIR_LEFT
- *pb++ = kopNotEq; // NotEqual
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 1;
- m_prgibConstraintStart[1] = 11;
- m_prgibConstraintStart[2] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[10 + 11 + 12];
- pb = m_prgbActionBlock;
-
- // Rule 0: clsDigit > @1 {dir = DIR_RIGHT} / ^ _ {dir == DIR_LEFT};
-
- *pb++ = kopPutCopy; *pb++ = 0; // PutCopy 0
- *pb++ = kopPushByte; *pb++ = kdircR; // PushByte DIR_RIGHT
- *pb++ = kopAttrSet; *pb++ = kslatDir; // AttrSet dir
- *pb++ = kopNext; // Next
- *pb++ = kopPushByte; *pb++ = -1; // Push -1
- *pb++ = kopPopRet; // PopAndRet
-
- // Rule 1: clsSpecial > @2 {dir = DIR_ARABNUMBER} / clsDigit {dir != DIR_LEFT} ^ _;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopPutCopy; *pb++ = 0; // PutCopy 0
- *pb++ = kopPushByte; *pb++ = kdircArabNum; // Push DIR_ARABNUMBER
- *pb++ = kopAttrSet; *pb++ = kslatDir; // AttrSet dir
- *pb++ = kopNext; // Next
- *pb++ = kopPushByte; *pb++ = -1; // Push -1
- *pb++ = kopPopRet; // PopAndRet
-
- // Rule 2: clsSpecial > @2 {dir = @1.dir} / clsSpecial ^ _;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopPutCopy; *pb++ = 0; // PutCopy 0
- *pb++ = kopPushSlotAttr;*pb++ = kslatDir; // PushSlotAttr dir -1
- *pb++ = -1;
- *pb++ = kopAttrSet; *pb++ = kslatDir; // AttrSet dir
- *pb++ = kopNext; // Next
- *pb++ = kopPushByte; *pb++ = -1; // Push -1
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 10;
- m_prgibActionStart[2] = 10 + 11;
- }
- else if (m_ipass == 2)
- {
- m_nMaxRuleContext = m_nMaxChunk = 2;
- m_nMaxRuleLoop = 3;
- m_staBehavior = "RuleAction2";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpRuleAction2Test(m_ipass);
-
- m_crul = 2;
-
- // Set up constraint code--succeed trivially.
- m_prgbConstraintBlock = new byte[1];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
- m_prgibConstraintStart[1] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[16];
- pb = m_prgbActionBlock;
-
- // Rule 0: clsVowel gCaret > clsCirumVowel _;
-
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 clsVowel clsCircumVowel
- *pb++ = 4; *pb++ = 0;
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: clsVowel gSlash > _ clsAcuteVowel$1;
-
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopPutSubs8bitObs; *pb++ = -1; // PutSubs -1 clsVowel clsAcuteVowel
- *pb++ = 4; *pb++ = 1;
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 8;
- }
- else if (m_ipass == 3)
- {
- m_nMaxRuleContext = m_nMaxChunk = 2;
- m_nMaxRuleLoop = 3;
- m_staBehavior = "RuleAction2";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpRuleAction2Test(m_ipass);
-
- m_crul = 2;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1 + 10 + 10];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- *pb++ = kopCntxtItem; *pb++ = 1; // ContextItem 1
- *pb++ = kopPushSlotAttr;*pb++ = kslatDir; // PushSlotAttr dir 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = kdircR; // Push DIR_RIGHT
- *pb++ = kopEqual; // Equal
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- *pb++ = kopCntxtItem; *pb++ = 0; // ContextItem 0
- *pb++ = kopPushSlotAttr;*pb++ = kslatDir; // PushSlotAttr dir 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = kdircR; // Push DIR_RIGHT
- *pb++ = kopEqual; // Equal
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 1;
- m_prgibConstraintStart[1] = 1 + 10;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[23];
- pb = m_prgbActionBlock;
-
- // Rule 0: clsLeft > clsRight {dir = @1.dir} / _ clsDir {dir == DIR_RIGHT};
-
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 clsLeft clsRight
- *pb++ = 5; *pb++ = 3;
- *pb++ = kopPushSlotAttr;*pb++ = kslatDir; // PushSlotAttr dir 1
- *pb++ = 1;
- *pb++ = kopAttrSet; *pb++ = kslatDir; // AttrSet dir
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: clsRight > clsLeft {dir = @1.dir} / clsDir {dir == DIR_RIGHT} _;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 clsRight clsLeft
- *pb++ = 6; *pb++ = 2;
- *pb++ = kopPushSlotAttr;*pb++ = kslatDir; // PushSlotAttr dir -1
- *pb++ = -1;
- *pb++ = kopAttrSet; *pb++ = kslatDir; // AttrSet dir
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 11;
- }
-}
-
-
-void GrFSM::SetUpRuleAction2Test(int ipass)
-{
- if (ipass == 1)
- {
- // Create machine class ranges.
- m_cmcr = 5;
- m_prgmcr = new GrFSMClassRange[5];
- m_prgmcr[0].m_chwFirst = 45; // hyphen
- m_prgmcr[0].m_chwLast = 45;
- m_prgmcr[0].m_col = 1;
-
- m_prgmcr[1].m_chwFirst = 48; // 0 - 9: mcDigit
- m_prgmcr[1].m_chwLast = 57;
- m_prgmcr[1].m_col = 0;
-
- m_prgmcr[2].m_chwFirst = 61; // equals sign
- m_prgmcr[2].m_chwLast = 61;
- m_prgmcr[2].m_col = 1;
-
- m_prgmcr[3].m_chwFirst = 95; // underscore
- m_prgmcr[3].m_chwLast = 95;
- m_prgmcr[3].m_col = 1;
-
- m_prgmcr[4].m_chwFirst = 126; // tilde
- m_prgmcr[4].m_chwLast = 126;
- m_prgmcr[4].m_col = 1;
-
- m_dimcrInit = 4; // (max power of 2 <= m_cmcr);
- m_cLoop = 2; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 5;
- m_crowNonAcpt = 2;
- m_crowFinal = 2;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 2;
-
- // Set up transition table.
- m_prgrowTransitions = new short[6]; // 6 = (m_crow-m_crowFinal) * m_ccol
- short * psn = m_prgrowTransitions;
- *psn++ = 2; *psn++ = 1;
- *psn++ = 0; *psn++ = 4;
- *psn++ = 0; *psn++ = 3;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[3]; // 3 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[3+1]; // 3 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s2: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1; // s3: r1
- m_prgrulnMatched[1] = 1;
-
- m_prgirulnMin[2] = 2; // s3: r2
- m_prgrulnMatched[2] = 2;
-
- m_prgirulnMin[3] = 3;
- }
- else if (ipass == 2)
- {
- // Create machine class ranges.
- m_cmcr = 12;
- m_prgmcr = new GrFSMClassRange[12];
- m_prgmcr[0].m_chwFirst = 47; // slash
- m_prgmcr[0].m_chwLast = 47;
- m_prgmcr[0].m_col = 2;
-
- m_prgmcr[1].m_chwFirst = 65; // A
- m_prgmcr[1].m_chwLast = 65;
- m_prgmcr[1].m_col = 0;
-
- m_prgmcr[2].m_chwFirst = 69; // E
- m_prgmcr[2].m_chwLast = 69;
- m_prgmcr[2].m_col = 0;
-
- m_prgmcr[3].m_chwFirst = 73; // I
- m_prgmcr[3].m_chwLast = 73;
- m_prgmcr[3].m_col = 0;
-
- m_prgmcr[4].m_chwFirst = 79; // O
- m_prgmcr[4].m_chwLast = 79;
- m_prgmcr[4].m_col = 0;
-
- m_prgmcr[5].m_chwFirst = 85; // U
- m_prgmcr[5].m_chwLast = 85;
- m_prgmcr[5].m_col = 0;
-
- m_prgmcr[6].m_chwFirst = 94; // caret
- m_prgmcr[6].m_chwLast = 94;
- m_prgmcr[6].m_col = 1;
-
- m_prgmcr[7].m_chwFirst = 97; // a
- m_prgmcr[7].m_chwLast = 97;
- m_prgmcr[7].m_col = 0;
-
- m_prgmcr[8].m_chwFirst = 101; // e
- m_prgmcr[8].m_chwLast = 101;
- m_prgmcr[8].m_col = 0;
-
- m_prgmcr[9].m_chwFirst = 105; // i
- m_prgmcr[9].m_chwLast = 105;
- m_prgmcr[9].m_col = 0;
-
- m_prgmcr[10].m_chwFirst = 111; // o
- m_prgmcr[10].m_chwLast = 111;
- m_prgmcr[10].m_col = 0;
-
- m_prgmcr[11].m_chwFirst = 117; // u
- m_prgmcr[11].m_chwLast = 117;
- m_prgmcr[11].m_col = 0;
-
- m_dimcrInit = 8; // (max power of 2 <= m_cmcr);
- m_cLoop = 3; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 4;
- m_crowNonAcpt = 2;
- m_crowFinal = 2;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 3;
-
- // Set up transition table.
- m_prgrowTransitions = new short[6]; // 6 = (m_crow-m_crowFinal) * m_ccol
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 2; *psn++ = 3;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[2]; // 2 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[2+1]; // 2 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s1: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1; // s2: r1
- m_prgrulnMatched[1] = 1;
-
- m_prgirulnMin[2] = 2;
- }
- else if (ipass == 3)
- {
- // Create machine class ranges.
- m_cmcr = 11;
- m_prgmcr = new GrFSMClassRange[11];
- m_prgmcr[0].m_chwFirst = 40; // (
- m_prgmcr[0].m_chwLast = 40;
- m_prgmcr[0].m_col = 1;
-
- m_prgmcr[1].m_chwFirst = 41; // )
- m_prgmcr[1].m_chwLast = 41;
- m_prgmcr[1].m_col = 2;
-
- m_prgmcr[2].m_chwFirst = 45; // hyphen
- m_prgmcr[2].m_chwLast = 45;
- m_prgmcr[2].m_col = 0;
-
- m_prgmcr[3].m_chwFirst = 48; // 0 - 9: mcDigit
- m_prgmcr[3].m_chwLast = 57;
- m_prgmcr[3].m_col = 0;
-
- m_prgmcr[4].m_chwFirst = 61; // =
- m_prgmcr[4].m_chwLast = 61;
- m_prgmcr[4].m_col = 0;
-
- m_prgmcr[5].m_chwFirst = 91; // [
- m_prgmcr[5].m_chwLast = 91;
- m_prgmcr[5].m_col = 1;
-
- m_prgmcr[6].m_chwFirst = 93; // ]
- m_prgmcr[6].m_chwLast = 93;
- m_prgmcr[6].m_col = 2;
-
- m_prgmcr[7].m_chwFirst = 95; // underscore
- m_prgmcr[7].m_chwLast = 95;
- m_prgmcr[7].m_col = 0;
-
- m_prgmcr[8].m_chwFirst = 123; // {
- m_prgmcr[8].m_chwLast = 123;
- m_prgmcr[8].m_col = 1;
-
- m_prgmcr[9].m_chwFirst = 125; // }
- m_prgmcr[9].m_chwLast = 125;
- m_prgmcr[9].m_col = 2;
-
- m_prgmcr[10].m_chwFirst = 126; // tilde
- m_prgmcr[10].m_chwLast = 126;
- m_prgmcr[10].m_col = 0;
-
- m_dimcrInit = 8; // (max power of 2 <= m_cmcr);
- m_cLoop = 3; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 5;
- m_crowNonAcpt = 3;
- m_crowFinal = 2;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 3;
-
- // Set up transition table.
- m_prgrowTransitions = new short[9]; // 9 = (m_crow-m_crowFinal) * m_ccol
- short * psn = m_prgrowTransitions;
- *psn++ = 2; *psn++ = 1; *psn++ = 0;
- *psn++ = 3; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 4;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[2]; // 2 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[2+1]; // 2 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s3: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1; // s4: r1
- m_prgrulnMatched[1] = 1;
-
- m_prgirulnMin[2] = 2;
- }
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Tests of various kinds of assocations.
-
- PASS 1 (line-break):
- r0. gX / # _ ^ ; // do nothing
- r1. gX {break = -2};
-
- Pass 1 machine classes:
- mcX: 'x' 120
- mcLB: 35
-
- Pass 1 FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | gX gLB
- --------------------------------
- T NA s0 | s2 s1
- |
- T NA s1 | s3
- |
- F A s2 |
- |
- F A s3 |
-
-
- Rules Matched:
- s2: r1
- s3: r0
-
-
-
- PASS 2:
- r0. clsOA clsE > clsELig:(1 2) _;
- r1. clsLC _ _ gX > @1 @5 @1 @5 / _ _ # {break==2} _ _ ;
- r2. _ clsFraction _ > clsNumerator:2 gSlash:2 clsDenom:2;
-
- Pass 2 machine classes:
- mcOA: O A 79 65
- mcOAlc: o a 111 97
- mcE E e 69 101
- mcFraction: 188 189 190
- mcX: x 120
- mcLCother
- mcLB: 35
-
-
- Pass 2 FSM: mcLC
- | mcOA mcOAlc mcE mcElc other mcX mcFractn mcLB
- -----------------------------------------------------------------------------------------
- T NA s0 | s1 s2 s4 s3 s3 s6
- | - - - - - - -
- T NA s1 | s7
- | - - - - - - -
- T NA s2 | s7 s5
- | - - - - - - -
- T NA s3 | s5
- | - - - - - - -
- T NA s4 | s5
- | - - - - - - -
- T NA s5 | s8
- | - - - - - - -
- F A s6 |
- | - - - - - -
- F A s7 |
- | - - - - - -
- F A s8 |
- | - - - - - -
-
- Rules matched:
- s6: r2
- s7: r0
- s8: r1
-
-
- PASS 3:
- r0. _ > gHyphen / _ # {break == 2} ^;
-
- Pass 3 machine classes:
- mcLB: 35
-
- Pass 3 FSM:
-
- | gLB
- --------------------------------
- T NA s0 | s1
- |
- F A s1 |
- |
-
- Rules Matched:
- s1: r0
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpAssocTest()
-{
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpAssocTest();
-
- m_fLineBreak = true;
- m_cchwPreXlbContext = 1;
- m_cchwPostXlbContext = 1;
-}
-
-void GrClassTable::SetUpAssocTest()
-{
- m_ccls = 11; // number of classes
- m_cclsLinear = 5; // number of classes in linear format (output classes)
-
- m_prgchwBIGGlyphList = new data16[143];
-
- m_prgichwOffsets = new data16[m_ccls+1];
-
- data16 * pchw = m_prgchwBIGGlyphList;
-
- // Output class 0: clsELig
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(140)); // OE
- *pchw++ = msbf(data16(198)); // AE
- *pchw++ = msbf(data16(156)); // oe
- *pchw++ = msbf(data16(230)); // ae
-
- // Output class 1: clsNumerator
- m_prgichwOffsets[1] = 4;
- *pchw++ = msbf(data16(49)); // 1
- *pchw++ = msbf(data16(49)); // 1
- *pchw++ = msbf(data16(51)); // 3
-
- // Output class 2: clsDenom
- m_prgichwOffsets[2] = 4 + 3;
- *pchw++ = msbf(data16(52)); // 4
- *pchw++ = msbf(data16(50)); // 2
- *pchw++ = msbf(data16(52)); // 4
-
- // Output class 3: gSlash
- m_prgichwOffsets[3] = 7 + 3;
- *pchw++ = msbf(data16(47)); // '/'
-
- // Output class 4: gHyphen
- m_prgichwOffsets[4] = 10 + 1;
- *pchw++ = msbf(data16(45)); // '-'
-
- // Input class 5: clsOA
- m_prgichwOffsets[5] = 11 + 1;
- *pchw++ = msbf(data16(4));
- *pchw++ = msbf(data16(4)); *pchw++ = msbf(data16(2)); *pchw++ = msbf(data16(0));
- *pchw++ = msbf(data16(65)); *pchw++ = msbf(data16(1)); // A
- *pchw++ = msbf(data16(79)); *pchw++ = msbf(data16(0)); // O
- *pchw++ = msbf(data16(97)); *pchw++ = msbf(data16(3)); // a
- *pchw++ = msbf(data16(111)); *pchw++ = msbf(data16(2)); // o
-
- // Input class 6: clsE
- m_prgichwOffsets[6] = 12 + 4 + 4*2; // 24
- *pchw++ = msbf(data16(3));
- *pchw++ = msbf(data16(2)); *pchw++ = msbf(data16(1)); *pchw++ = msbf(data16(3-2));
- *pchw++ = msbf(data16(40)); *pchw++ = msbf(data16(0)); // E
- *pchw++ = msbf(data16(91)); *pchw++ = msbf(data16(1)); // e
-
- // Input class 7: clsLC
- m_prgichwOffsets[7] = 24 + 4 + 2*2; // 32
- *pchw++ = msbf(data16(26));
- *pchw++ = msbf(data16(16)); *pchw++ = msbf(data16(4)); *pchw++ = msbf(data16(26-16));
- for (int i = 0; i < 26; ++i)
- {
- *pchw++ = msbf(data16(97+i)); *pchw++ = msbf(data16(i));
- }
-
- // Input class 8: gX
- m_prgichwOffsets[8] = 32 + 4 + 26*2; // 88
- *pchw++ = msbf(data16(1));
- *pchw++ = msbf(data16(1)); *pchw++ = msbf(data16(0)); *pchw++ = msbf(data16(0));
- *pchw++ = msbf(data16(120)); *pchw++ = msbf(data16(0));
-
- // Input class 9: clsFraction
- m_prgichwOffsets[9] = 88 + 4 + 1*2; // 127
- *pchw++ = msbf(data16(3));
- *pchw++ = msbf(data16(2)); *pchw++ = msbf(data16(1)); *pchw++ = msbf(data16(3-2));
- *pchw++ = msbf(data16(188)); *pchw++ = msbf(data16(0)); // 1/4
- *pchw++ = msbf(data16(189)); *pchw++ = msbf(data16(1)); // 1/2
- *pchw++ = msbf(data16(190)); *pchw++ = msbf(data16(2)); // 3/4
-
- // Input class 10: #
- m_prgichwOffsets[10] = 127 + 4 + 3*2; // 137
- *pchw++ = msbf(data16(1));
- *pchw++ = msbf(data16(1)); *pchw++ = msbf(data16(0)); *pchw++ = msbf(data16(0));
- *pchw++ = msbf(data16(35)); *pchw++ = msbf(data16(0)); // 1/4
-
- m_prgichwOffsets[11] = 137 + 4 + 1*2; // 143
-}
-
-void GrLineBreakPass::SetUpAssocTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Assoc";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpAssocTest(m_ipass);
-
- m_crul = 2;
-
- // Set up constraint code--succeed trivially.
- m_prgbConstraintBlock = new byte[1];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
- m_prgibConstraintStart[1] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[7 + 8];
- pb = m_prgbActionBlock;
-
- // Rule 0: gX / # _ ^ ; // do nothing
-
- *pb++ = kopPutCopy; *pb++ = 0; // PutCopy 0
- *pb++ = kopNext; // Next
- *pb++ = kopPutCopy; *pb++ = 0; // PutCopy 0
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: gX {break = -2};
-
- *pb++ = kopPutCopy; *pb++ = 0; // PutCopy 0
- *pb++ = kopPushByte; *pb++ = -2; // PushByte -2
- *pb++ = kopAttrSet; *pb++ = kslatBreak; // AttrSet breakweight
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 7;
-}
-
-void GrSubPass::SetUpAssocTest()
-{
- if (m_ipass == 2)
- {
- m_nMaxRuleContext = m_nMaxChunk = 3;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Assoc";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpAssocTest(m_ipass);
-
- m_crul = 3;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1 + 10];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- *pb++ = kopCntxtItem; *pb++ = 1; // ContextItem 1
- *pb++ = kopPushSlotAttr;*pb++ = kslatBreak; // PushSlotAttr break 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = 2; // Push 2
- *pb++ = kopEqual; // Equal
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
- m_prgibConstraintStart[1] = 1;
- m_prgibConstraintStart[2] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[12 + 12 + 22];
- pb = m_prgbActionBlock;
-
- // Rule 0: clsOA clsE > clsELig:(1 2) _ ;
-
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 clsOA clsELig
- *pb++ = 5; *pb++ = 0;
- *pb++ = kopAssoc; *pb++ = 2; // Assoc 2 0 1
- *pb++ = 0; *pb++ = 1;
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: clsLC _ _ gX > @1 @5 @1 @5 / _ _ # {break==2} _ _ ;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutCopy; *pb++ = 2; // PutCopy 2
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext - line break
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutCopy; *pb++ = -1; // PutCopy -1
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopRetZero; // RetZero
-
- // Rule 2: _ clsFraction _ > clsNumerator:2 gSlash:2 clsDenom:2;
-
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutSubs8bitObs; *pb++ = 1; // PutSubs 1 clsFraction clsNumerator
- *pb++ = 9; *pb++ = 1;
- *pb++ = kopAssoc; *pb++ = 1; // Assoc 1 1
- *pb++ = 1;
- *pb++ = kopNext; // Next
- *pb++ = kopPutGlyph8bitObs; *pb++ = 3; // PutGlyph gSlash
- *pb++ = kopNext; // Next
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 clsFraction clsDenom
- *pb++ = 9; *pb++ = 2;
- *pb++ = kopAssoc; *pb++ = 1; // Assoc 1 0
- *pb++ = 0;
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 12;
- m_prgibActionStart[2] = 12 + 12;
- }
- else if (m_ipass == 3)
- {
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 3;
- m_staBehavior = "Assoc";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpAssocTest(m_ipass);
-
- m_crul = 1;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1 + 10];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- *pb++ = kopCntxtItem; *pb++ = 0; // ContextItem 0
- *pb++ = kopPushSlotAttr;*pb++ = kslatBreak; // PushSlotAttr break 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = 2; // Push 2
- *pb++ = kopEqual; // Equal
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 1;
-
- m_prgbActionBlock = new byte[7];
- pb = m_prgbActionBlock;
-
- // Rule 0: _ > gHyphen / _ # {break == 2} ^;
-
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutGlyph8bitObs; *pb++ = 4; // PutGlyph 4 ('-' = 45)
- *pb++ = kopNext; // Next
- *pb++ = kopPushByte; *pb++ = 1; // Push 1
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- }
- else
- Assert(false);
-}
-
-
-void GrFSM::SetUpAssocTest(int ipass)
-{
- if (ipass == 1)
- {
- // Create machine class ranges.
- m_cmcr = 2;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 35; // #
- m_prgmcr[0].m_chwLast = 35;
- m_prgmcr[0].m_col = 1;
-
- m_prgmcr[1].m_chwFirst = 120; // x
- m_prgmcr[1].m_chwLast = 120;
- m_prgmcr[1].m_col = 0;
-
- m_dimcrInit = 2; // (max power of 2 <= m_cmcr);
- m_cLoop = 1; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 4;
- m_crowNonAcpt = 2;
- m_crowFinal = 2;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 2;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 4
- short * psn = m_prgrowTransitions;
- *psn++ = 2; *psn++ = 1;
- *psn++ = 3; *psn++ = 0;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[2]; // 2 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[m_crow - m_crowNonAcpt + 1];
-
- m_prgirulnMin[0] = 0; // s2: r1
- m_prgrulnMatched[0] = 1;
-
- m_prgirulnMin[1] = 1; // s3: r0
- m_prgrulnMatched[1] = 0;
-
- m_prgirulnMin[2] = 2;
- }
- else if (ipass == 2)
- {
- // Create machine class ranges.
- m_cmcr = 13;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 35; // #
- m_prgmcr[0].m_chwLast = 35;
- m_prgmcr[0].m_col = 7;
-
- m_prgmcr[1].m_chwFirst = 65; // A
- m_prgmcr[1].m_chwLast = 65;
- m_prgmcr[1].m_col = 0;
-
- m_prgmcr[2].m_chwFirst = 69; // E
- m_prgmcr[2].m_chwLast = 69;
- m_prgmcr[2].m_col = 2;
-
- m_prgmcr[3].m_chwFirst = 79; // O
- m_prgmcr[3].m_chwLast = 79;
- m_prgmcr[3].m_col = 0;
-
- m_prgmcr[4].m_chwFirst = 97; // a
- m_prgmcr[4].m_chwLast = 97;
- m_prgmcr[4].m_col = 1;
-
- m_prgmcr[5].m_chwFirst = 98; // b - d
- m_prgmcr[5].m_chwLast = 100;
- m_prgmcr[5].m_col = 4;
-
- m_prgmcr[6].m_chwFirst = 101; // e
- m_prgmcr[6].m_chwLast = 101;
- m_prgmcr[6].m_col = 3;
-
- m_prgmcr[7].m_chwFirst = 102; // f - n
- m_prgmcr[7].m_chwLast = 110;
- m_prgmcr[7].m_col = 4;
-
- m_prgmcr[8].m_chwFirst = 111; // o
- m_prgmcr[8].m_chwLast = 111;
- m_prgmcr[8].m_col = 1;
-
- m_prgmcr[9].m_chwFirst = 112; // p - w
- m_prgmcr[9].m_chwLast = 119;
- m_prgmcr[9].m_col = 4;
-
- m_prgmcr[10].m_chwFirst = 120; // x
- m_prgmcr[10].m_chwLast = 120;
- m_prgmcr[10].m_col = 5;
-
- m_prgmcr[11].m_chwFirst = 121; // y - z
- m_prgmcr[11].m_chwLast = 122;
- m_prgmcr[11].m_col = 4;
-
- m_prgmcr[12].m_chwFirst = 188; // 1/4, 1/2, 3/4
- m_prgmcr[12].m_chwLast = 190;
- m_prgmcr[12].m_col = 6;
-
-
- m_dimcrInit = 8; // (max power of 2 <= m_cmcr);
- m_cLoop = 3; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 9;
- m_crowNonAcpt = 6;
- m_crowFinal = 3;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 8;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 48
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 2; *psn++ = 0; *psn++ = 4; *psn++ = 3; *psn++ = 3; *psn++ = 6; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 7; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 7; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 5;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 5;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 5;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 8; *psn++ = 0; *psn++ = 0;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[3]; // 3 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[3+1]; // 3 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s6: r2
- m_prgrulnMatched[0] = 2;
-
- m_prgirulnMin[1] = 1; // s7: r0
- m_prgrulnMatched[1] = 0;
-
- m_prgirulnMin[2] = 2; // s8: r1
- m_prgrulnMatched[2] = 1;
-
- m_prgirulnMin[3] = 3;
- }
- else if (ipass == 3)
- {
- // Create machine class ranges.
- m_cmcr = 1;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 35; // #
- m_prgmcr[0].m_chwLast = 35;
- m_prgmcr[0].m_col = 0;
-
- m_dimcrInit = 1; // (max power of 2 <= m_cmcr);
- m_cLoop = 0; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 2;
- m_crowNonAcpt = 1;
- m_crowFinal = 1;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 1;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 1
- short * psn = m_prgrowTransitions;
- *psn++ = 1;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[1]; // 1 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[m_crow - m_crowNonAcpt + 1];
-
- m_prgirulnMin[0] = 0; // s1: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1;
- }
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Second batch of association tests.
-
- PASS 1:
- r0. clsSymbol _ > _ @1 / _ gNumber gHyphen # gNumber _;
- r1. clsSymbol _ > _ @1 / _ gHyphen # _;
- r2. _ clsSymbol > @6 _ / _ gNumber gHyphen # gNumber _;
- r3. _ clsSymbol > @4 _ / _ gHyphen # _;
- r4. clsLeft _ > @1 clsRight$1:1 / _ clsLetter gHyphen # _ gSpace;
- r5. clsLeft _ > @1 clsRight$1:1 / _ clsLetter gHyphen # clsLetter _ gSpace;
- r6. clsLeft _ > @1 clsRight$1:1 / _ clsLetter _ gSpace;
- r7. clsLeft _ > @1 clsRight$1:1 / _ clsLetter clsLetter _ gSpace;
-
- Pass 1 machine classes:
- mcSym: @, $, %, & 64, 36, 37, 38
- mcNum: 48-57
- mcHyphen: 45
- mcSpace: 32
- mcLet: 97-122
- mcLeft: ( [ { 40, 91, 123
- mcRight: ) ] } 41, 93, 125
-
- Pass 1 FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | mcSym mcNum mcHyph mcSpace mcLet mcLeft mcLB
- ----------------------------------------------------------------------------------
- T NA s0 | s1 s2 s3 s4
- |
- T NA s1 | s5 s6
- |
- T NA s2 | s7
- |
- T NA s3 | s8
- |
- T NA s4 | s9
- |
- T NA s5 | s10
- |
- T NA s6 | s18
- |
- T NA s7 | s11
- |
- T NA s8 | s19
- |
- T NA s9 | s12 s20 s13
- |
- T NA s10 | s14
- |
- T NA s11 | s15
- |
- T NA s12 | s16
- |
- T NA s13 | s21
- |
- T NA s14 | s22
- |
- T NA s15 | s23
- |
- T NA s16 | s24 s17
- |
- T NA s17 | s25
- |
- F A s18 |
- |
- F A s19 |
- |
- F A s20 |
- |
- F A s21 |
- |
- F A s22 |
- |
- F A s23 |
- |
- F A s24 |
- |
- F A s25 |
-
-
- Rules Matched:
- s18: r1
- s19: r3
- s20: r6
- s21: r7
- s22: r0
- s23: r2
- s24: r4
- s25: r5
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpAssoc2Test()
-{
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpAssoc2Test();
-
- m_fLineBreak = true;
- m_cchwPreXlbContext = 3;
- m_cchwPostXlbContext = 2;
-}
-
-void GrClassTable::SetUpAssoc2Test()
-{
- m_ccls = 2; // number of classes
- m_cclsLinear = 1; // number of classes in linear format (output classes)
-
- m_prgchwBIGGlyphList = new data16[13];
-
- m_prgichwOffsets = new data16[m_ccls+1];
-
- data16 * pchw = m_prgchwBIGGlyphList;
-
- // Output class 0: clsRight
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(41)); // )
- *pchw++ = msbf(data16(93)); // ]
- *pchw++ = msbf(data16(125)); // }
-
- // Input class 1: clsLeft
- m_prgichwOffsets[1] = 3;
- *pchw++ = msbf(data16(3));
- *pchw++ = msbf(data16(2)); *pchw++ = msbf(data16(1)); *pchw++ = msbf(data16(3-2));
- *pchw++ = msbf(data16(40)); *pchw++ = msbf(data16(0)); // (
- *pchw++ = msbf(data16(91)); *pchw++ = msbf(data16(1)); // [
- *pchw++ = msbf(data16(123)); *pchw++ = msbf(data16(2)); // {
-
- m_prgichwOffsets[2] = 3 + 4 + 3*2; // 13
-}
-
-void GrSubPass::SetUpAssoc2Test()
-{
- m_nMaxRuleContext = m_nMaxChunk = 6;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Assoc2";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpAssoc2Test(m_ipass);
-
- m_crul = 8;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
- m_prgibConstraintStart[1] = 0;
- m_prgibConstraintStart[2] = 0;
- m_prgibConstraintStart[3] = 0;
- m_prgibConstraintStart[4] = 0;
- m_prgibConstraintStart[5] = 0;
- m_prgibConstraintStart[6] = 0;
- m_prgibConstraintStart[7] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[11 + 9 + 11 + 9 + 14 + 15 + 12 + 13];
- pb = m_prgbActionBlock;
-
- // Rule 0: clsSymbol _ > _ @1 / _ gNumber gHyphen # gNumber _;
-
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutCopy; *pb++ = -4; // PutCopy -4
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: clsSymbol _ > _ @1 / _ gHyphen # _;
-
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutCopy; *pb++ = -2; // PutCopy -2
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 2: _ clsSymbol > @6 _ / _ gNumber gHyphen # gNumber _;
-
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutCopy; *pb++ = 5; // PutCopy 5
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 3: _ clsSymbol > @4 _ / _ gHyphen # _;
-
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutCopy; *pb++ = 3; // PutCopy 3
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 4: clsLeft _ > @1 clsRight$1 / _ clsLetter gHyphen # _ gSpace;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutSubs8bitObs; *pb++ = -3; // PutSubs -3 1 0
- *pb++ = 1; *pb++ = 0;
- *pb++ = kopAssoc; *pb++ = 1; // Assoc 1 -3
- *pb++ = -3;
- *pb++ = kopNext; // Next;
- *pb++ = kopRetZero; // RetZero
-
- // Rule 5: clsLeft _ > @1 clsRight$1 / _ clsLetter gHyphen # clsLetter _ gSpace;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutSubs8bitObs; *pb++ = -4; // PutSubs -4 1 0
- *pb++ = 1; *pb++ = 0;
- *pb++ = kopAssoc; *pb++ = 1; // Assoc 1 -4
- *pb++ = -4;
- *pb++ = kopNext; // Next;
- *pb++ = kopRetZero; // RetZero
-
- // Rule 6: clsLeft _ > @1 clsRight$1 / _ clsLetter _ gSpace;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutSubs8bitObs; *pb++ = -1; // PutSubs -1 1 0
- *pb++ = 1; *pb++ = 0;
- *pb++ = kopAssoc; *pb++ = 1; // Assoc 1 -1
- *pb++ = -1;
- *pb++ = kopNext; // Next;
- *pb++ = kopRetZero; // RetZero
-
- // Rule 7: clsLeft _ > @1 clsRight$1 / _ clsLetter clsLetter _ gSpace;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutSubs8bitObs; *pb++ = -2; // PutSubs -2 1 0
- *pb++ = 1; *pb++ = 0;
- *pb++ = kopAssoc; *pb++ = 1; // Assoc 1 -2
- *pb++ = -2;
- *pb++ = kopNext; // Next;
- *pb++ = kopRetZero; // RetZero
-
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 11;
- m_prgibActionStart[2] = 11 + 9;
- m_prgibActionStart[3] = 20 + 11;
- m_prgibActionStart[4] = 31 + 9;
- m_prgibActionStart[5] = 40 + 14;
- m_prgibActionStart[6] = 54 + 15;
- m_prgibActionStart[7] = 69 + 12;
-}
-
-
-void GrFSM::SetUpAssoc2Test(int ipass)
-{
- // Create machine class ranges.
- m_cmcr = 10;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 32; // space
- m_prgmcr[0].m_chwLast = 32;
- m_prgmcr[0].m_col = 3;
-
- m_prgmcr[1].m_chwFirst = 35; // #
- m_prgmcr[1].m_chwLast = 35;
- m_prgmcr[1].m_col = 6;
-
- m_prgmcr[2].m_chwFirst = 36; // $, %, &
- m_prgmcr[2].m_chwLast = 38;
- m_prgmcr[2].m_col = 0;
-
- m_prgmcr[3].m_chwFirst = 40; // (
- m_prgmcr[3].m_chwLast = 40;
- m_prgmcr[3].m_col = 5;
-
- m_prgmcr[4].m_chwFirst = 45; // -
- m_prgmcr[4].m_chwLast = 45;
- m_prgmcr[4].m_col = 2;
-
- m_prgmcr[5].m_chwFirst = 48; // 0 - 9
- m_prgmcr[5].m_chwLast = 57;
- m_prgmcr[5].m_col = 1;
-
- m_prgmcr[6].m_chwFirst = 64; // @
- m_prgmcr[6].m_chwLast = 64;
- m_prgmcr[6].m_col = 0;
-
- m_prgmcr[7].m_chwFirst = 91; // [
- m_prgmcr[7].m_chwLast = 91;
- m_prgmcr[7].m_col = 5;
-
- m_prgmcr[8].m_chwFirst = 97; // a - z
- m_prgmcr[8].m_chwLast = 122;
- m_prgmcr[8].m_col = 4;
-
- m_prgmcr[9].m_chwFirst = 123; // {
- m_prgmcr[9].m_chwLast = 123;
- m_prgmcr[9].m_col = 5;
-
-
- m_dimcrInit = 8; // (max power of 2 <= m_cmcr);
- m_cLoop = 3; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 26;
- m_crowNonAcpt = 18;
- m_crowFinal = 8;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 7;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 126
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 2; *psn++ = 3; *psn++ = 0; *psn++ = 0; *psn++ = 4; *psn++ = 0;
- *psn++ = 0; *psn++ = 5; *psn++ = 6; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 7; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 8;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 9; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ =10; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =18;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =11;
- *psn++ =19; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ =12; *psn++ =20; *psn++ =13; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =14;
- *psn++ = 0; *psn++ =15; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =16;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =21; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ =22; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ =23; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =24; *psn++ =17; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ =25; *psn++ = 0; *psn++ = 0; *psn++ = 0;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[8]; // 3 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[m_crow - m_crowNonAcpt + 1];
-
- m_prgirulnMin[0] = 0; // s18: r1
- m_prgrulnMatched[0] = 1;
-
- m_prgirulnMin[1] = 1; // s19: r3
- m_prgrulnMatched[1] = 3;
-
- m_prgirulnMin[2] = 2; // s20: r6
- m_prgrulnMatched[2] = 6;
-
- m_prgirulnMin[3] = 3; // s21: r7
- m_prgrulnMatched[3] = 7;
-
- m_prgirulnMin[4] = 4; // s22: r0
- m_prgrulnMatched[4] = 0;
-
- m_prgirulnMin[5] = 5; // s23: r2
- m_prgrulnMatched[5] = 2;
-
- m_prgirulnMin[6] = 6; // s24: r4
- m_prgrulnMatched[6] = 4;
-
- m_prgirulnMin[7] = 7; // s25: r5
- m_prgrulnMatched[7] = 5;
-
- m_prgirulnMin[8] = 8;
-}
-
-/*----------------------------------------------------------------------------------------------
- Test of default associations
-
- PASS 1:
- r0. gDollar _ > @1 gEquals;
- r1. gAtSign > _ ;
-
- Pass 1 machine classes:
- mcDollar: $ 36
- mcAt: @ 64
-
- Pass 1 FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | mcDollar mcAt
- --------------------------------------
- T NA s0 | s1 s2
- |
- F A s1 |
- |
- F A s2 |
-
-
- Rules Matched:
- s1: r0
- s2: r1
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpDefaultAssocTest()
-{
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpDefaultAssocTest();
-}
-
-void GrClassTable::SetUpDefaultAssocTest()
-{
- m_ccls = 1; // number of classes
- m_cclsLinear = 1; // number of classes in linear format
-
- m_prgchwBIGGlyphList = new data16[1];
-
- m_prgichwOffsets = new data16[m_ccls+1];
-
- data16 * pchw = m_prgchwBIGGlyphList;
-
- // Output class 0: gEquals
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(61));
-
- m_prgichwOffsets[1] = 1;
-}
-
-void GrSubPass::SetUpDefaultAssocTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "DefaultAssoc";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpDefaultAssocTest();
-
- m_crul = 2;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue;
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
- m_prgibConstraintStart[1] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[6 + 3];
- pb = m_prgbActionBlock;
-
- // Rule 0: gDollar _ > @1 gEquals;
-
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopInsert; // Insert
- *pb++ = kopPutGlyph8bitObs; *pb++ = 0; // PutGlyph 0
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: gAtSign > _ ;
-
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 6;
-}
-
-
-void GrFSM::SetUpDefaultAssocTest()
-{
- // Create machine class ranges.
- m_cmcr = 2;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 36; // $
- m_prgmcr[0].m_chwLast = 36;
- m_prgmcr[0].m_col = 0;
-
- m_prgmcr[1].m_chwFirst = 64; // @
- m_prgmcr[1].m_chwLast = 64;
- m_prgmcr[1].m_col = 1;
-
-
- m_dimcrInit = 2; // (max power of 2 <= m_cmcr);
- m_cLoop = 1; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 3;
- m_crowNonAcpt = 1;
- m_crowFinal = 2;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 2;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 2
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 2;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[2]; // 2 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[m_crow - m_crowNonAcpt + 1];
-
- m_prgirulnMin[0] = 0; // s1: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1; // s2: r1
- m_prgrulnMatched[1] = 1;
-
- m_prgirulnMin[2] = 2;
-}
-
-/*----------------------------------------------------------------------------------------------
- Test of features. The ID of "theFeature" == 234, its index is 0. The default value is 1.
-
- PASS 1:
- if (theFeature == 0) // * -> $
- r0. gAsterisk > gDollar ;
- else if (theFeature == 1) // * -> %
- r1. gAsterisk > gPercent ;
- else // * -> @
- r2. gAsterisk > gAt ;
-
- Pass 1 machine classes:
- mcAsterisk: * 42
-
- Pass 1 FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | mcAsterisk
- --------------------------------
- T NA s0 | s1
- |
- F A s1 |
-
-
- Rules Matched:
- s1: r0, r1, r2
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpFeatureTest()
-{
- AddFeature(234, 0, 1, 1);
-
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpFeatureTest();
-}
-
-void GrClassTable::SetUpFeatureTest()
-{
- m_ccls = 4; // number of classes
- m_cclsLinear = 4; // number of classes in linear format
-
- m_prgchwBIGGlyphList = new data16[4];
-
- m_prgichwOffsets = new data16[m_ccls + 1];
-
- data16 * pchw = m_prgchwBIGGlyphList;
-
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(36)); // $
-
- m_prgichwOffsets[1] = 1;
- *pchw++ = msbf(data16(37)); // %
-
- m_prgichwOffsets[2] = 2;
- *pchw++ = msbf(data16(64)); // @
-
- m_prgichwOffsets[3] = 3;
- *pchw++ = msbf(data16(42)); // *
-
- m_prgichwOffsets[4] = 4;
-}
-
-void GrSubPass::SetUpFeatureTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Feature";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpFeatureTest();
-
- m_crul = 3;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1 + 6 + 12 + 12];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue;
-
- // (theFeature == 0)
- *pb++ = kopPushFeat; *pb++ = 0; // PushFeat 0
- *pb++ = kopPushByte; *pb++ = 0; // PushByte 0
- *pb++ = kopEqual; // Equal
- *pb++ = kopPopRet; // PopAndRet
-
- // (theFeature != 0 && theFeature == 1)
- *pb++ = kopPushFeat; *pb++ = 0; // PushFeat 0
- *pb++ = kopPushByte; *pb++ = 0; // PushByte 0
- *pb++ = kopNotEq; // NotEq
- *pb++ = kopPushFeat; *pb++ = 0; // PushFeat 0
- *pb++ = kopPushByte; *pb++ = 1; // PushByte 1
- *pb++ = kopEqual; // Equal
- *pb++ = kopAnd; // And
- *pb++ = kopPopRet; // PopAndRet
-
- // (theFeature != 0 && theFeature != 1)
- *pb++ = kopPushFeat; *pb++ = 0; // PushFeat 0
- *pb++ = kopPushByte; *pb++ = 0; // PushByte 0
- *pb++ = kopNotEq; // NotEq
- *pb++ = kopPushFeat; *pb++ = 0; // PushFeat 0
- *pb++ = kopPushByte; *pb++ = 1; // PushByte 1
- *pb++ = kopNotEq; // NotEq
- *pb++ = kopAnd; // And
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 1;
- m_prgibConstraintStart[1] = 1 + 6;
- m_prgibConstraintStart[2] = 1 + 6 + 12;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[4 + 4 + 4];
- pb = m_prgbActionBlock;
-
- // Rule 0: gAsterisk > gDollar ;
-
- *pb++ = kopPutGlyph8bitObs; *pb++ = 0; // PutGlyph 0
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: gAsterisk > gPercent ;
-
- *pb++ = kopPutGlyph8bitObs; *pb++ = 1; // PutGlyph 1
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 2: gAsterisk > gAt ;
-
- *pb++ = kopPutGlyph8bitObs; *pb++ = 2; // PutGlyph 2
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 4;
- m_prgibActionStart[2] = 4 + 4;
-}
-
-
-void GrFSM::SetUpFeatureTest()
-{
- // Create machine class ranges.
- m_cmcr = 1;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 42; // *
- m_prgmcr[0].m_chwLast = 42;
- m_prgmcr[0].m_col = 0;
-
-
- m_dimcrInit = 1; // (max power of 2 <= m_cmcr);
- m_cLoop = 0; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 2;
- m_crowNonAcpt = 1;
- m_crowFinal = 1;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 1;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 1
- short * psn = m_prgrowTransitions;
- *psn++ = 1;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[3]; // 3 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[m_crow - m_crowNonAcpt + 1];
-
- m_prgirulnMin[0] = 0; // s1: r0, r1, r2
- m_prgrulnMatched[0] = 0;
- m_prgrulnMatched[1] = 1;
- m_prgrulnMatched[2] = 2;
-
- m_prgirulnMin[1] = 3;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Tests of ligatures and components.
-
- PASS 1 (line-break):
- r0. clsLetter { break = 2 }
-
- Pass 1 machine classes:
- mcLetter: a - z 97 - 122
-
- Pass 1 FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | clsLetter
- --------------------------------
- T NA s0 | s1
- |
- F A s1 |
-
-
- Rules Matched:
- s1: r0
-
-
- PASS 2 (substitution):
- r0. gX gY gZ > gCapX:(1 2 4) { comp {X.ref=@1; Y.ref=@2; Z.ref=@4 }} _ _
- / _ _ # {break==2} _;
- r1. gX gY gZ > _ _ gCapZ:(1 3 4) { comp {X.ref=@1; Y.ref=@3; Z.ref=@4 }}
- / _ # {break==2} _ _;
- r2. gX gY gZ > _ gCapY:(1 2 3) { comp {X.ref=@1; Y.ref=@2; Z.ref=@3 }} gPlus;
-
- Pass 2 machine classes:
- mcX: x 120
- mcY: y 121
- mcZ: z 122
- mcLB: 35
-
-
- Pass 2 FSM:
- | mcX mcY mcZ mcLB
- ----------------------------------------------------
- T NA s0 | s1
- | - - -
- T NA s1 | s2 s3
- | - - -
- T NA s2 | s6 s4
- | - - -
- T NA s3 | s5
- | - - -
- T NA s4 | s7
- | - - -
- T NA s5 | s8
- | - - -
- F A s6 |
- | - - -
- F A s7 |
- | - - -
- F A s8 |
- | - - -
-
- Rules matched:
- s6: r2
- s7: r0
- s8: r1
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpLigatureTest()
-{
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpLigatureTest();
-
- m_pgtbl = new GrGlyphTable();
- m_pgtbl->SetUpLigatureTest();
-
- m_fLineBreak = true;
- m_cchwPreXlbContext = 2;
- m_cchwPostXlbContext = 2;
-}
-
-void GrClassTable::SetUpLigatureTest()
-{
- m_ccls = 7; // number of classes
- m_cclsLinear = 7; // number of classes in linear format (all classes are single-item)
-
- m_prgchwBIGGlyphList = new data16[7];
-
- m_prgichwOffsets = new data16[m_ccls+1];
-
- data16 * pchw = m_prgchwBIGGlyphList;
-
- // Class 0: gCapX
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(88)); // X
-
- // Class 1: gCapY
- m_prgichwOffsets[1] = 1;
- *pchw++ = msbf(data16(89)); // Y
-
- // Class 2: gCapZ
- m_prgichwOffsets[2] = 2;
- *pchw++ = msbf(data16(90)); // Z
-
- // Class 3: gPlus
- m_prgichwOffsets[3] = 3;
- *pchw++ = msbf(data16(43)); // +
-
- // Class 4: gX
- m_prgichwOffsets[4] = 4;
- *pchw++ = msbf(data16(120)); // x
-
- // Class 5: gY
- m_prgichwOffsets[5] = 5;
- *pchw++ = msbf(data16(121)); // y
-
- // Class 6: gZ
- m_prgichwOffsets[6] = 6;
- *pchw++ = msbf(data16(122)); // z
-
- m_prgichwOffsets[7] = 7;
-}
-
-void GrGlyphTable::SetUpLigatureTest()
-{
- SetNumberOfGlyphs(128);
- SetNumberOfStyles(1);
-
- GrGlyphSubTable * pgstbl = new GrGlyphSubTable();
- Assert(pgstbl);
-
- pgstbl->Initialize(1, 0, 128, 10, 4);
- SetSubTable(0, pgstbl);
-
- SetNumberOfComponents(4); // comp.w, comp.x, comp.y, comp.z
-
- pgstbl->SetUpLigatureTest();
-}
-
-/***********************************************************************************************
- TODO: This method is BROKEN because m_prgibBIGAttrValues has been changed. It is no
- longer a data16 *. The Gloc table can contain 16-bit or 32-bit entries and must be
- accessed accordingly.
-***********************************************************************************************/
-void GrGlyphSubTable::SetUpLigatureTest()
-{
- m_nAttrIDLim = 20;
-
- m_pgatbl = new GrGlyphAttrTable();
- m_pgatbl->Initialize(0, 102);
-
- for (int i = 0; i < 88; i++)
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(0));
-
- m_prgibBIGAttrValues[88] = (byte)msbf(data16(0));
- m_prgibBIGAttrValues[89] = (byte)msbf(data16(34));
- m_prgibBIGAttrValues[90] = (byte)msbf(data16(68));
-
- for (i = 91; i < 128; i++)
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(102));
-
- m_pgatbl->SetUpLigatureTest();
-}
-
-void GrGlyphAttrTable::SetUpLigatureTest()
-{
- // Glyph 88 'X' (2 runs; offset = 0):
- // 0 = 0 comp.w undefined
- // 1 = 8 comp.x: (0,0, 25,100)
- // 2 = 12 comp.y: (25,0, 75,100)
- // 3 = 16 comp.z: (75,0, 100,100)
- // 4-7 = 0 comp.w box corners
- // 8 = 100 comp.x. top
- // 9 = 0 bottom
- // 10= 0 left
- // 11= 25 right
- // 12= 100 comp.y. top
- // 13= 0 bottom
- // 14= 25 left
- // 15= 75 right
- // 16= 100 comp.z. top
- // 17= 0 bottom
- // 18= 75 left
- // 19= 100 right
- //
- // Glyph 89 (2 runs; offset = 34):
- // 0 = 0 comp.w undefined
- // 1 = 8 comp.x: (0,0, 33,100)
- // 2 = 12 comp.y: (33,0, 67,100)
- // 3 = 16 comp.z: (67,0, 100,100)
- // 4-7 = 0 comp.w box corners
- // 8 = 100 comp.x. top
- // 9 = 0 bottom
- // 10= 0 left
- // 11= 33 right
- // 12= 100 comp.y. top
- // 13= 0 bottom
- // 14= 33 left
- // 15= 67 right
- // 16= 100 comp.z. top
- // 17= 0 bottom
- // 18= 67 left
- // 19= 100 right
- //
- // Glyph 90 (2 runs; offset = 68):
- // 0 = 0 comp.w undefined
- // 1 = 8 comp.x: (0,0, 10,100)
- // 2 = 12 comp.y: (10,0, 90,100)
- // 3 = 16 comp.z: (90,0, 100,100)
- // 4-7 = 0 comp.w box corners
- // 8 = 100 comp.x. top
- // 9 = 0 bottom
- // 10= 0 left
- // 11= 10 right
- // 12= 100 comp.y. top
- // 13= 0 bottom
- // 14= 10 left
- // 15= 90 right
- // 16= 100 comp.z. top
- // 17= 0 bottom
- // 18= 90 left
- // 19= 100 right
-
- byte * pbBIG = m_prgbBIGEntries;
-
- GrGlyphAttrRun gatrun;
-
- // Glyph 88 'X'
- gatrun.m_bMinAttrID = 1;
- gatrun.m_cAttrs = 3;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(8));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(12));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(16));
- memcpy(pbBIG, &gatrun, 8); // 8 = 3*2 + 2
- pbBIG += 8;
- gatrun.m_bMinAttrID = 8; // comp.x.top
- gatrun.m_cAttrs = 12;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[3] = msbf(data16(25));
- gatrun.m_rgchwBIGValues[4] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[5] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[6] = msbf(data16(25));
- gatrun.m_rgchwBIGValues[7] = msbf(data16(75));
- gatrun.m_rgchwBIGValues[8] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[9] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[10] = msbf(data16(75));
- gatrun.m_rgchwBIGValues[11] = msbf(data16(100));
- memcpy(pbBIG, &gatrun, 26); // 26 = 12*2 + 2
- pbBIG += 26;
-
- // Glyph 89 'Y'
- gatrun.m_bMinAttrID = 1;
- gatrun.m_cAttrs = 3;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(8));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(12));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(16));
- memcpy(pbBIG, &gatrun, 8); // 8 = 3*2 + 2
- pbBIG += 8;
- gatrun.m_bMinAttrID = 8; // comp.x.top
- gatrun.m_cAttrs = 12;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[3] = msbf(data16(33));
- gatrun.m_rgchwBIGValues[4] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[5] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[6] = msbf(data16(33));
- gatrun.m_rgchwBIGValues[7] = msbf(data16(67));
- gatrun.m_rgchwBIGValues[8] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[9] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[10] = msbf(data16(67));
- gatrun.m_rgchwBIGValues[11] = msbf(data16(100));
- memcpy(pbBIG, &gatrun, 26); // 26 = 12*2 + 2
- pbBIG += 26;
-
- // Glyph 90 'Z'
- gatrun.m_bMinAttrID = 1;
- gatrun.m_cAttrs = 3;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(8));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(12));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(16));
- memcpy(pbBIG, &gatrun, 8); // 8 = 3*2 + 2
- pbBIG += 8;
- gatrun.m_bMinAttrID = 8; // comp.x.top
- gatrun.m_cAttrs = 12;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[3] = msbf(data16(10));
- gatrun.m_rgchwBIGValues[4] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[5] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[6] = msbf(data16(10));
- gatrun.m_rgchwBIGValues[7] = msbf(data16(90));
- gatrun.m_rgchwBIGValues[8] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[9] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[10] = msbf(data16(90));
- gatrun.m_rgchwBIGValues[11] = msbf(data16(100));
- memcpy(pbBIG, &gatrun, 26); // 26 = 12*2 + 2
- pbBIG += 26;
-
- Assert(pbBIG == m_prgbBIGEntries + 102);
-}
-
-void GrLineBreakPass::SetUpLigatureTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Ligatures";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpLigatureTest(m_ipass);
-
- m_crul = 1;
-
- // Set up constraint code--succeed trivially.
- m_prgbConstraintBlock = new byte[1];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[8];
- pb = m_prgbActionBlock;
-
- // Rule 0: clsLetter { break = 2 }
-
- *pb++ = kopPutCopy; *pb++ = 0; // PutCopy 0
- *pb++ = kopPushByte; *pb++ = 2; // PushByte 2
- *pb++ = kopAttrSet; *pb++ = kslatBreak; // AttrSet breakweight
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
-}
-
-void GrSubPass::SetUpLigatureTest()
-{
- if (m_ipass == 2)
- {
- m_nMaxRuleContext = m_nMaxChunk = 4;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Ligatures";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpLigatureTest(m_ipass);
-
- m_crul = 3;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1 + 10 + 10];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- *pb++ = kopCntxtItem; *pb++ = 2; // ContextItem 2
- *pb++ = kopPushSlotAttr;*pb++ = kslatBreak; // PushSlotAttr break 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = 2; // Push 2
- *pb++ = kopEqual; // Equal
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- *pb++ = kopCntxtItem; *pb++ = 1; // ContextItem 1
- *pb++ = kopPushSlotAttr;*pb++ = kslatBreak; // PushSlotAttr break 0
- *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = 2; // Push 2
- *pb++ = kopEqual; // Equal
- *pb++ = kopOr; // Or
- *pb++ = kopPopRet; // PopAndRet
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 1;
- m_prgibConstraintStart[1] = 11;
- m_prgibConstraintStart[2] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[29 + 29 + 29];
- pb = m_prgbActionBlock;
-
- // Rule 0: gX gY gZ > gCapX:(1 2 4) { comp {X.ref=@1; Y.ref=@2; Z.ref=@4 }} _ _
- // / _ _ # {break==2} _;
-
- *pb++ = kopPutGlyph8bitObs; *pb++ = 0; // PutGlyph 0 (gCapX)
- *pb++ = kopAssoc; *pb++ = 3; // Assoc 3 0 1 3
- *pb++ = 0; *pb++ = 1; *pb++ = 3;
- *pb++ = kopPushByte; *pb++ = 0; // Push 0
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref x
- *pb++ = kslatCompRef; *pb++ = 1;
- *pb++ = kopPushByte; *pb++ = 1; // Push 1
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref y
- *pb++ = kslatCompRef; *pb++ = 2;
- *pb++ = kopPushByte; *pb++ = 3; // Push 3
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref z
- *pb++ = kslatCompRef; *pb++ = 3;
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: gX gY gZ > _ _ gCapZ:(1 3 4) { comp {X.ref=@1; Y.ref=@3; Z.ref=@4 }}
- // / _ # {break==2} _ _;
-
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopCopyNext; // CopyNext
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopPutGlyph8bitObs; *pb++ = 2; // PutGlyph 2 (gCapZ)
- *pb++ = kopAssoc; *pb++ = 3; // Assoc 3 -3 -1 0
- *pb++ = -3; *pb++ = -1; *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = -3; // Push -3
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref x
- *pb++ = kslatCompRef; *pb++ = 1;
- *pb++ = kopPushByte; *pb++ = -1; // Push -1
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref y
- *pb++ = kslatCompRef; *pb++ = 2;
- *pb++ = kopPushByte; *pb++ = 0; // Push 0
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref z
- *pb++ = kslatCompRef; *pb++ = 3;
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 2: gX gY gZ > _ gCapY:(1 2 3) { comp {X.ref=@1; Y.ref=@2; Z.ref=@3 }} gPlus;
-
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopPutGlyph8bitObs; *pb++ = 1; // PutGlyph 1 (gCapY)
- *pb++ = kopAssoc; *pb++ = 3; // Assoc 3 -1 0 1
- *pb++ = -1; *pb++ = 0; *pb++ = 1;
- *pb++ = kopPushByte; *pb++ = -1; // Push -1
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref x
- *pb++ = kslatCompRef; *pb++ = 1;
- *pb++ = kopPushByte; *pb++ = 0; // Push 0
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref y
- *pb++ = kslatCompRef; *pb++ = 2;
- *pb++ = kopPushByte; *pb++ = 1; // Push 1
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot comp_ref z
- *pb++ = kslatCompRef; *pb++ = 3;
- *pb++ = kopNext; // Next
- *pb++ = kopPutGlyph8bitObs; *pb++ = 3; // PutGlyph 3 (gPlus)
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 29;
- m_prgibActionStart[2] = 29 + 29;
- }
- else
- Assert(false);
-}
-
-
-void GrFSM::SetUpLigatureTest(int ipass)
-{
- if (ipass == 1)
- {
- // Create machine class ranges.
- m_cmcr = 1;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 97; // a - z
- m_prgmcr[0].m_chwLast = 122;
- m_prgmcr[0].m_col = 0;
-
- m_dimcrInit = 1; // (max power of 2 <= m_cmcr);
- m_cLoop = 0; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 2;
- m_crowNonAcpt = 1;
- m_crowFinal = 1;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 1;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 1
- short * psn = m_prgrowTransitions;
- *psn++ = 1;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[1]; // 1 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[m_crow - m_crowNonAcpt + 1];
-
- m_prgirulnMin[0] = 0; // s1: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1;
- }
- else if (ipass == 2)
- {
- // Create machine class ranges.
- m_cmcr = 4;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 35; // #
- m_prgmcr[0].m_chwLast = 35;
- m_prgmcr[0].m_col = 3;
-
- m_prgmcr[1].m_chwFirst = 120; // x
- m_prgmcr[1].m_chwLast = 120;
- m_prgmcr[1].m_col = 0;
-
- m_prgmcr[2].m_chwFirst = 121; // y
- m_prgmcr[2].m_chwLast = 121;
- m_prgmcr[2].m_col = 1;
-
- m_prgmcr[3].m_chwFirst = 122; // z
- m_prgmcr[3].m_chwLast = 123;
- m_prgmcr[3].m_col = 2;
-
-
- m_dimcrInit = 4; // (max power of 2 <= m_cmcr);
- m_cLoop = 2; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 9;
- m_crowNonAcpt = 6;
- m_crowFinal = 3;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 4;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 24
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 0; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 2; *psn++ = 0; *psn++ = 3;
- *psn++ = 0; *psn++ = 0; *psn++ = 6; *psn++ = 4;
- *psn++ = 0; *psn++ = 5; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 7; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 8; *psn++ = 0;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[3]; // 3 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[3+1]; // 3 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s6: r2
- m_prgrulnMatched[0] = 2;
-
- m_prgirulnMin[1] = 1; // s7: r0
- m_prgrulnMatched[1] = 0;
-
- m_prgirulnMin[2] = 2; // s8: r1
- m_prgrulnMatched[2] = 1;
-
- m_prgirulnMin[3] = 3;
- }
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Tests of ligatures and components where the components are modified glyphs.
-
- PASS 1:
- r0. gX gI > @2 @1;
- r1. clsPlainVowel gAcute > clsVowelAcute:(1 2) _;
- r2. clsPlainVowel gGrave > clsVowelGrave:(1 2) _;
-
- Pass 1 machine classes:
- mcX: x 120
- mcI: i 105
- mcPV: a e o u 97 101 111 117
- mcAcute: / 47
- mcGrave: \ 92
-
- Pass 1 FSM: (T=transition, F=final, A=accepting, NA=non-accepting)
-
- | mcX mcPV mcI mcAcute mcGrave
- ---------------------------------------------------------------
- T NA s0 | s1 s2 s2
- | - - - -
- T NA s1 | s3
- | - - - -
- T NA s2 | s4 s5
- | - - - -
- F A s3 |
- | - - - -
- F A s4 |
- | - - - -
- F A s5 |
- | - - - -
-
-
- Rules Matched:
- s3: r0
- s4: r1
- s5: r2
-
-
- PASS 2:
- r0. clsVowel gI > clsCapVowel:(1 2) { comp {v.ref = @1; i.ref = @2}} _;
-
- Pass 2 machine classes:
- mcV: 97 101 111 117
- 224 225 232 233 236 237 242 243 249 250
- mcI: i 105
-
-
- Pass 2 FSM:
- | mcV mcI
- ----------------------------------------------------
- T NA s0 | s1 s1
- | -
- T NA s1 | s2
- | -
- F A s2 |
- | -
-
- Rules matched:
- s2: r0
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpLigature2Test()
-{
- if (m_pctbl)
- delete m_pctbl;
-
- m_pctbl = new GrClassTable();
- m_pctbl->SetUpLigature2Test();
-
- m_pgtbl = new GrGlyphTable();
- m_pgtbl->SetUpLigature2Test();
-}
-
-void GrClassTable::SetUpLigature2Test()
-{
- m_ccls = 5; // number of classes
- m_cclsLinear = 3; // number of classes in linear format
-
- m_prgchwBIGGlyphList = new data16[73];
-
- m_prgichwOffsets = new data16[m_ccls+1];
-
- data16 * pchw = m_prgchwBIGGlyphList;
-
- // Output class 0: clsVowelAcute
- m_prgichwOffsets[0] = 0;
- *pchw++ = msbf(data16(225)); // a-acute
- *pchw++ = msbf(data16(233)); // e-acute
- *pchw++ = msbf(data16(237)); // i-acute
- *pchw++ = msbf(data16(243)); // o-acute
- *pchw++ = msbf(data16(250)); // u-acute
-
- // Output class 1: clsVowelGrave
- m_prgichwOffsets[1] = 5;
- *pchw++ = msbf(data16(224)); // a-grave
- *pchw++ = msbf(data16(232)); // e-grave
- *pchw++ = msbf(data16(236)); // i-grave
- *pchw++ = msbf(data16(242)); // o-grave
- *pchw++ = msbf(data16(249)); // u-grave
-
- // Output class 2: clsCapVowel
- m_prgichwOffsets[2] = 5 + 5; // 10
- *pchw++ = msbf(data16(65)); // A
- *pchw++ = msbf(data16(69)); // E
- *pchw++ = msbf(data16(73)); // I
- *pchw++ = msbf(data16(79)); // O
- *pchw++ = msbf(data16(85)); // U
- *pchw++ = msbf(data16(193)); // A-acute
- *pchw++ = msbf(data16(201)); // E-acute
- *pchw++ = msbf(data16(205)); // I-acute
- *pchw++ = msbf(data16(211)); // O-acute
- *pchw++ = msbf(data16(218)); // U-acute
- *pchw++ = msbf(data16(192)); // A-grave
- *pchw++ = msbf(data16(200)); // E-grave
- *pchw++ = msbf(data16(204)); // I-grave
- *pchw++ = msbf(data16(210)); // O-grave
- *pchw++ = msbf(data16(217)); // U-grave
-
- // Input class 3: clsPlainVowel
- m_prgichwOffsets[3] = 10 + 15; // 25
- *pchw++ = msbf(data16(5));
- *pchw++ = msbf(data16(4)); *pchw++ = msbf(data16(2)); *pchw++ = msbf(data16(5-4));
- *pchw++ = msbf(data16(97)); *pchw++ = msbf(data16(0)); // a
- *pchw++ = msbf(data16(101)); *pchw++ = msbf(data16(1)); // e
- *pchw++ = msbf(data16(105)); *pchw++ = msbf(data16(2)); // i
- *pchw++ = msbf(data16(111)); *pchw++ = msbf(data16(3)); // o
- *pchw++ = msbf(data16(117)); *pchw++ = msbf(data16(4)); // u
-
- // Input class 4: clsVowel
- m_prgichwOffsets[4] = 25 + 4+(5*2); // 39
- *pchw++ = msbf(data16(15));
- *pchw++ = msbf(data16(8)); *pchw++ = msbf(data16(3)); *pchw++ = msbf(data16(15-8));
- *pchw++ = msbf(data16(97)); *pchw++ = msbf(data16(0)); // a
- *pchw++ = msbf(data16(101)); *pchw++ = msbf(data16(1)); // e
- *pchw++ = msbf(data16(105)); *pchw++ = msbf(data16(2)); // i
- *pchw++ = msbf(data16(111)); *pchw++ = msbf(data16(3)); // o
- *pchw++ = msbf(data16(117)); *pchw++ = msbf(data16(4)); // u
- *pchw++ = msbf(data16(224)); *pchw++ = msbf(data16(10)); // a-grave
- *pchw++ = msbf(data16(225)); *pchw++ = msbf(data16(5)); // a-acute
- *pchw++ = msbf(data16(232)); *pchw++ = msbf(data16(11)); // e-grave
- *pchw++ = msbf(data16(233)); *pchw++ = msbf(data16(6)); // e-acute
- *pchw++ = msbf(data16(236)); *pchw++ = msbf(data16(12)); // i-grave
- *pchw++ = msbf(data16(237)); *pchw++ = msbf(data16(7)); // i-acute
- *pchw++ = msbf(data16(242)); *pchw++ = msbf(data16(13)); // o-grave
- *pchw++ = msbf(data16(243)); *pchw++ = msbf(data16(8)); // o-acute
- *pchw++ = msbf(data16(249)); *pchw++ = msbf(data16(14)); // u-grave
- *pchw++ = msbf(data16(250)); *pchw++ = msbf(data16(9)); // u-acute
-
- m_prgichwOffsets[5] = 39 + 4+(15*2); // 73
-}
-
-void GrGlyphTable::SetUpLigature2Test()
-{
- SetNumberOfGlyphs(256);
- SetNumberOfStyles(1);
-
- GrGlyphSubTable * pgstbl = new GrGlyphSubTable();
- Assert(pgstbl);
-
- pgstbl->Initialize(1, 0, 256, 10, 4);
- SetSubTable(0, pgstbl);
-
- SetNumberOfComponents(2); // comp.base, comp.i
-
- pgstbl->SetUpLigature2Test();
-}
-
-/***********************************************************************************************
- TODO: This method is BROKEN because m_prgibBIGAttrValues has been changed. It is no
- longer a data16 *. The Gloc table can contain 16-bit or 32-bit entries and must be
- accessed accordingly.
-***********************************************************************************************/
-void GrGlyphSubTable::SetUpLigature2Test()
-{
- m_nAttrIDLim = 10;
-
- m_pgatbl = new GrGlyphAttrTable();
- m_pgatbl->Initialize(0, 330);
-
- for (int i = 0; i <= 65; i++) // A
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(0));
-
- for (i = 66; i <= 69; i++) // E
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(22));
-
- for (i = 70; i <= 73; i++) // I
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(44));
-
- for (i = 74; i <= 79; i++) // O
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(66));
-
- for (i = 80; i <= 85; i++) // U
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(88));
-
- for (i = 86; i <= 192; i++) // A-grave
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(110));
-
- m_prgibBIGAttrValues[193] = (byte)msbf(data16(132)); // A-acute
-
- for (i = 194; i <= 200; i++) // E-grave
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(154));
-
- m_prgibBIGAttrValues[201] = (byte)msbf(data16(176)); // E-acute
-
- for (i = 202; i <= 204; i++) // I-grave
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(198));
-
- m_prgibBIGAttrValues[205] = (byte)msbf(data16(220)); // I-acute
-
- for (i = 206; i <= 210; i++) // O-grave
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(242));
-
- m_prgibBIGAttrValues[211] = (byte)msbf(data16(264)); // O-acute
-
- for (i = 212; i <= 217; i++) // U-grave
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(286));
-
- m_prgibBIGAttrValues[218] = (byte)msbf(data16(308)); // O-acute
-
- for (i = 219; i < 256; i++)
- m_prgibBIGAttrValues[i] = (byte)msbf(data16(330));
-
- m_pgatbl->SetUpLigature2Test();
-}
-
-void GrGlyphAttrTable::SetUpLigature2Test()
-{
- // All ligatures have the following defined:
- //
- // 0 = 2 comp.base (0,30, 100,100)
- // 1 = 6 comp.i (0,0, 100,30)
- // 2= 100 comp.base.top
- // 3= 30 bottom
- // 4= 0 left
- // 5= 100 right
- // 6 = 30 comp.i.top
- // 7 = 0 bottom
- // 8= 0 left
- // 9= 100 right
-
- byte * pbBIG = m_prgbBIGEntries;
-
- GrGlyphAttrRun gatrun;
-
- for (int i = 0; i < 15; i++)
- {
- gatrun.m_bMinAttrID = 0;
- gatrun.m_cAttrs = 10;
- gatrun.m_rgchwBIGValues[0] = msbf(data16(2));
- gatrun.m_rgchwBIGValues[1] = msbf(data16(6));
- gatrun.m_rgchwBIGValues[2] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[3] = msbf(data16(30));
- gatrun.m_rgchwBIGValues[4] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[5] = msbf(data16(100));
- gatrun.m_rgchwBIGValues[6] = msbf(data16(30));
- gatrun.m_rgchwBIGValues[7] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[8] = msbf(data16(0));
- gatrun.m_rgchwBIGValues[9] = msbf(data16(100));
- memcpy(pbBIG, &gatrun, 22); // 22 = 10*2 + 2
- pbBIG += 22;
- }
-
- Assert(pbBIG == m_prgbBIGEntries + (22 * 15));
-}
-
-void GrSubPass::SetUpLigature2Test()
-{
- if (m_ipass == 1)
- {
- m_nMaxRuleContext = m_nMaxChunk = 2;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Ligatures2";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpLigature2Test(m_ipass);
-
- m_crul = 3;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
- m_prgibConstraintStart[1] = 0;
- m_prgibConstraintStart[2] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[7 + 12 + 12];
- pb = m_prgbActionBlock;
-
- // Rule 0: gX gI > @2 @1;
-
- *pb++ = kopPutCopy; *pb++ = 1; // PutCopy 1
- *pb++ = kopNext; // Next
- *pb++ = kopPutCopy; *pb++ = -1; // PutCopy -1
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 1: clsPlainVowel gAcute > clsVowelAcute:(1 2) _;
-
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 3 0
- *pb++ = 3; *pb++ = 0;
- *pb++ = kopAssoc; *pb++ = 2; // Assoc 2 0 1
- *pb++ = 0; *pb++ = 1;
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- // Rule 2: clsPlainVowel gGrave > clsVowelGrave:(1 2) _;
-
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 3 1
- *pb++ = 3; *pb++ = 1;
- *pb++ = kopAssoc; *pb++ = 2; // Assoc 2 0 1
- *pb++ = 0; *pb++ = 1;
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- m_prgibActionStart[1] = 7;
- m_prgibActionStart[2] = 7 + 12;
- }
- else if (m_ipass == 2)
- {
- m_nMaxRuleContext = m_nMaxChunk = 2;
- m_nMaxRuleLoop = 5;
- m_staBehavior = "Ligatures2";
-
- m_pfsm = new GrFSM();
- Assert(m_pfsm);
- m_pfsm->SetUpLigature2Test(m_ipass);
-
- m_crul = 1;
-
- // Set up constraint code.
- m_prgbConstraintBlock = new byte[1];
- byte * pb = m_prgbConstraintBlock;
- *pb++ = kopRetTrue; // RetTrue
-
- m_prgibConstraintStart = new data16[m_crul];
- m_prgibConstraintStart[0] = 0;
-
- // Set up rule action code.
- m_prgbActionBlock = new byte[7 + 12 + 12];
- pb = m_prgbActionBlock;
-
- // Rule 0: clsVowel gI > clsCapVowel:(1 2) { comp {v.ref = @1; i.ref = @2}} _;
-
- *pb++ = kopPutSubs8bitObs; *pb++ = 0; // PutSubs 0 4 2
- *pb++ = 4; *pb++ = 2;
- *pb++ = kopAssoc; *pb++ = 2; // Assoc 2 0 1
- *pb++ = 0; *pb++ = 1;
- *pb++ = kopPushByte; *pb++ = 0; // Push 0
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot compRef v
- *pb++ = kslatCompRef; *pb++ = 0;
- *pb++ = kopPushByte; *pb++ = 1; // Push 1
- *pb++ = kopIAttrSetSlot; // IAttrSetSlot compRef i
- *pb++ = kslatCompRef; *pb++ = 1;
- *pb++ = kopNext; // Next
- *pb++ = kopDelete; // Delete
- *pb++ = kopNext; // Next
- *pb++ = kopRetZero; // RetZero
-
- m_prgibActionStart = new data16[m_crul];
- m_prgibActionStart[0] = 0;
- }
- else
- Assert(false);
-}
-
-
-void GrFSM::SetUpLigature2Test(int ipass)
-{
- if (ipass == 1)
- {
- // Create machine class ranges.
- m_cmcr = 8;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 47; // acute
- m_prgmcr[0].m_chwLast = 47;
- m_prgmcr[0].m_col = 3;
-
- m_prgmcr[1].m_chwFirst = 92; // grave
- m_prgmcr[1].m_chwLast = 92;
- m_prgmcr[1].m_col = 4;
-
- m_prgmcr[2].m_chwFirst = 97; // a
- m_prgmcr[2].m_chwLast = 97;
- m_prgmcr[2].m_col = 1;
-
- m_prgmcr[3].m_chwFirst = 101; // e
- m_prgmcr[3].m_chwLast = 101;
- m_prgmcr[3].m_col = 1;
-
- m_prgmcr[4].m_chwFirst = 105; // i
- m_prgmcr[4].m_chwLast = 105;
- m_prgmcr[4].m_col = 2;
-
- m_prgmcr[5].m_chwFirst = 111; // o
- m_prgmcr[5].m_chwLast = 111;
- m_prgmcr[5].m_col = 1;
-
- m_prgmcr[6].m_chwFirst = 117; // u
- m_prgmcr[6].m_chwLast = 117;
- m_prgmcr[6].m_col = 1;
-
- m_prgmcr[7].m_chwFirst = 120; // x
- m_prgmcr[7].m_chwLast = 120;
- m_prgmcr[7].m_col = 0;
-
- m_dimcrInit = 8; // (max power of 2 <= m_cmcr);
- m_cLoop = 3; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 6;
- m_crowNonAcpt = 3;
- m_crowFinal = 3;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 5;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 15
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 2; *psn++ = 2; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 3; *psn++ = 0; *psn++ = 0;
- *psn++ = 0; *psn++ = 0; *psn++ = 0; *psn++ = 4; *psn++ = 5;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[3]; // 3 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[3+1]; // 3 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s3: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1; // s4: r1
- m_prgrulnMatched[1] = 1;
-
- m_prgirulnMin[2] = 2; // s5: r2
- m_prgrulnMatched[2] = 2;
-
- m_prgirulnMin[3] = 3;
- }
- else if (ipass == 2)
- {
- // Create machine class ranges.
- m_cmcr = 10;
- m_prgmcr = new GrFSMClassRange[m_cmcr];
- m_prgmcr[0].m_chwFirst = 97; // a
- m_prgmcr[0].m_chwLast = 97;
- m_prgmcr[0].m_col = 0;
-
- m_prgmcr[1].m_chwFirst = 101; // e
- m_prgmcr[1].m_chwLast = 101;
- m_prgmcr[1].m_col = 0;
-
- m_prgmcr[2].m_chwFirst = 105; // i
- m_prgmcr[2].m_chwLast = 105;
- m_prgmcr[2].m_col = 1;
-
- m_prgmcr[3].m_chwFirst = 111; // o
- m_prgmcr[3].m_chwLast = 111;
- m_prgmcr[3].m_col = 0;
-
- m_prgmcr[4].m_chwFirst = 117; // u
- m_prgmcr[4].m_chwLast = 117;
- m_prgmcr[4].m_col = 0;
-
- m_prgmcr[5].m_chwFirst = 224; // a-grave, a-acute
- m_prgmcr[5].m_chwLast = 225;
- m_prgmcr[5].m_col = 0;
-
- m_prgmcr[6].m_chwFirst = 232; // e-grave, e-acute
- m_prgmcr[6].m_chwLast = 233;
- m_prgmcr[6].m_col = 0;
-
- m_prgmcr[7].m_chwFirst = 236; // i-grave, i-acute
- m_prgmcr[7].m_chwLast = 237;
- m_prgmcr[7].m_col = 0;
-
- m_prgmcr[8].m_chwFirst = 242; // o-grave, o-acute
- m_prgmcr[8].m_chwLast = 243;
- m_prgmcr[8].m_col = 0;
-
- m_prgmcr[9].m_chwFirst = 249; // u-grave, u-acute
- m_prgmcr[9].m_chwLast = 250;
- m_prgmcr[9].m_col = 0;
-
-
- m_dimcrInit = 8; // (max power of 2 <= m_cmcr);
- m_cLoop = 3; // log2(max power of 2 <= m_cmcr);
- m_imcrStart = m_cmcr - m_dimcrInit;
-
-
- m_crow = 3;
- m_crowNonAcpt = 2;
- m_crowFinal = 1;
- m_rowFinalMin = m_crow - m_crowFinal;
- m_ccol = 2;
-
- // Set up transition table.
- m_prgrowTransitions = new short[(m_crow-m_crowFinal) * m_ccol]; // 4
- short * psn = m_prgrowTransitions;
- *psn++ = 1; *psn++ = 1;
- *psn++ = 0; *psn++ = 2;
-
- // Set up matched-rules tables.
- m_prgrulnMatched = new data16[1]; // 1 = sum of rules matched for each accepting state
- m_prgirulnMin = new data16[1+1]; // 1 = m_crow - m_crowNonAcpt
-
- m_prgirulnMin[0] = 0; // s2: r0
- m_prgrulnMatched[0] = 0;
-
- m_prgirulnMin[1] = 1;
- }
-}
-
-#endif // _DEBUG
-
-} // namespace gr
-
-#endif // OLD_TEST_STUFF
-
-//:End Ignore
diff --git a/Build/source/libs/graphite-engine/src/segment/TestPasses.cpp b/Build/source/libs/graphite-engine/src/segment/TestPasses.cpp
deleted file mode 100644
index a85e6c56207..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/TestPasses.cpp
+++ /dev/null
@@ -1,1005 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TestPasses.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Hard-coded passes for test procedures.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:Ignore
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-#ifdef OLD_TEST_STUFF
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- For release version.
-----------------------------------------------------------------------------------------------*/
-#ifndef _DEBUG
-
-bool GrLineBreakPass::RunTestRules(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-bool GrSubPass::RunTestRules(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-bool GrPosPass::RunTestRules(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-#endif // !_DEBUG
-
-
-#ifdef _DEBUG
-
-/*----------------------------------------------------------------------------------------------
- Set up a table manager for testing.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::SetUpTest(std::wstring stuRendBehavior)
-{
- if (stuRendBehavior == L"NoRules")
- {
- m_cpass = 2;
- m_cpassLB = 0;
- m_ipassPos1 = 1;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrPosPass(1);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpTestData();
- }
- else if (stuRendBehavior == L"JustReorder" || stuRendBehavior == "RightToLeftLayout")
- {
- m_cpass = 4;
- m_cpassLB = 0;
- m_ipassPos1 = 3;
- m_fBidi = true;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrBidiPass(2);
- m_prgppass[3] = new GrPosPass(3);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpReverseNumbersTest();
- m_prgppass[2]->SetUpTestData();
- m_prgppass[3]->SetUpTestData();
-
- m_prgppass[2]->SetTopDirLevel(TopDirectionLevel());
- }
- else if (stuRendBehavior == L"CrossLineContext")
- {
- m_cpass = 4;
- m_cpassLB = 1;
- m_ipassPos1 = 3;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrLineBreakPass(1);
- m_prgppass[2] = new GrSubPass(2);
- m_prgppass[3] = new GrPosPass(3);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpCrossLineContextTest();
- m_prgppass[2]->SetUpCrossLineContextTest();
- m_prgppass[3]->SetUpTestData();
- }
- else if (stuRendBehavior == L"Reprocess")
- {
- m_cpass = 6;
- m_cpassLB = 1;
- m_ipassPos1 = 5;
- m_fBidi = true;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrLineBreakPass(1);
- m_prgppass[2] = new GrSubPass(2);
- m_prgppass[3] = new GrSubPass(3);
- m_prgppass[4] = new GrBidiPass(4);
- m_prgppass[5] = new GrPosPass(5);
-
- m_prgppass[0]->SetUpTestData(); // glyph-gen pass
- m_prgppass[1]->SetUpReprocessTest(); // line-break pass
- m_prgppass[2]->SetUpReverseNumbersTest(); // sub pass 1
- m_prgppass[3]->SetUpReprocessTest(); // sub pass 2
- m_prgppass[4]->SetUpTestData(); // bidi pass
- m_prgppass[5]->SetUpTestData(); // pos pass
-
- m_prgppass[4]->SetTopDirLevel(TopDirectionLevel());
- }
- else if (stuRendBehavior == L"LineEdgeContext")
- {
- m_cpass = 4;
- m_cpassLB = 0;
- m_ipassPos1 = 3;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrSubPass(2);
- m_prgppass[3] = new GrPosPass(3);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpLineEdgeContextTest(1);
- m_prgppass[2]->SetUpLineEdgeContextTest(2);
- m_prgppass[3]->SetUpTestData();
- }
- else if (stuRendBehavior == L"BidiAlgorithm")
- {
- m_cpass = 4;
- m_cpassLB = 0;
- m_ipassPos1 = 3;
- m_fBidi = true;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrBidiPass(2);
- m_prgppass[3] = new GrPosPass(3);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpBidiAlgorithmTest();
- m_prgppass[2]->SetUpBidiAlgorithmTest();
- m_prgppass[3]->SetUpTestData();
-
- m_prgppass[2]->SetTopDirLevel(TopDirectionLevel());
- }
- else if (stuRendBehavior == L"PseudoGlyphs")
- {
- m_cpass = 3;
- m_cpassLB = 0;
- m_ipassPos1 = 2;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrPosPass(2);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpPseudoGlyphsTest();
- m_prgppass[2]->SetUpTestData();
- }
- else if (stuRendBehavior == L"SimpleFSM")
- {
- m_cpass = 3;
- m_cpassLB = 0;
- m_ipassPos1 = 2;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrPosPass(2);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpSimpleFSMTest();
- m_prgppass[2]->SetUpTestData();
- }
- else if (stuRendBehavior == L"RuleAction")
- {
- m_cpass = 3;
- m_cpassLB = 0;
- m_ipassPos1 = 2;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrPosPass(2);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpRuleActionTest();
- m_prgppass[2]->SetUpTestData();
- }
- else if (stuRendBehavior == L"RuleAction2")
- {
- m_cpass = 6;
- m_cpassLB = 0;
- m_ipassPos1 = 5;
- m_fBidi = true;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrSubPass(2);
- m_prgppass[3] = new GrSubPass(3);
- m_prgppass[4] = new GrBidiPass(4);
- m_prgppass[5] = new GrPosPass(5);
-
- m_prgppass[0]->SetUpTestData(); // glyph-gen pass
- m_prgppass[1]->SetUpRuleAction2Test(); // sub pass 1
- m_prgppass[2]->SetUpRuleAction2Test(); // sub pass 2
- m_prgppass[3]->SetUpRuleAction2Test(); // sub pass 3
- m_prgppass[4]->SetUpTestData(); // bidi pass
- m_prgppass[5]->SetUpTestData(); // pos pass
-
- m_prgppass[4]->SetTopDirLevel(TopDirectionLevel());
- }
- else if (stuRendBehavior == L"Assoc")
- {
- m_cpass = 5;
- m_cpassLB = 1;
- m_ipassPos1 = 4;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrLineBreakPass(1);
- m_prgppass[2] = new GrSubPass(2);
- m_prgppass[3] = new GrSubPass(3);
- m_prgppass[4] = new GrPosPass(4);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpAssocTest();
- m_prgppass[2]->SetUpAssocTest();
- m_prgppass[3]->SetUpAssocTest();
- m_prgppass[4]->SetUpTestData();
- }
- else if (stuRendBehavior == L"Assoc2")
- {
- m_cpass = 3;
- m_cpassLB = 0;
- m_ipassPos1 = 2;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrPosPass(2);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpAssoc2Test();
- m_prgppass[2]->SetUpTestData();
- }
- else if (stuRendBehavior == L"DefaultAssoc")
- {
- m_cpass = 3;
- m_cpassLB = 0;
- m_ipassPos1 = 2;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrPosPass(2);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpDefaultAssocTest();
- m_prgppass[2]->SetUpTestData();
- }
- else if (stuRendBehavior == L"BidiNumbers")
- {
- m_cpass = 4;
- m_cpassLB = 0;
- m_ipassPos1 = 3;
- m_fBidi = true;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrBidiPass(2);
- m_prgppass[3] = new GrPosPass(3);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpBidiNumbersTest();
- m_prgppass[2]->SetUpBidiNumbersTest();
- m_prgppass[3]->SetUpTestData();
-
- m_prgppass[2]->SetTopDirLevel(TopDirectionLevel());
- }
- else if (stuRendBehavior == L"Feature")
- {
- m_cpass = 3;
- m_cpassLB = 0;
- m_ipassPos1 = 2;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrPosPass(2);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpFeatureTest();
- m_prgppass[2]->SetUpTestData();
- }
- else if (stuRendBehavior == L"Ligatures")
- {
- m_cpass = 4;
- m_cpassLB = 1;
- m_ipassPos1 = 3;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrLineBreakPass(1);
- m_prgppass[2] = new GrSubPass(2);
- m_prgppass[3] = new GrPosPass(3);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpLigatureTest();
- m_prgppass[2]->SetUpLigatureTest();
- m_prgppass[3]->SetUpTestData();
- }
- else if (stuRendBehavior == L"Ligatures2")
- {
- m_cpass = 4;
- m_cpassLB = 1;
- m_ipassPos1 = 3;
- m_fBidi = false;
-
- m_prgppass = new GrPass*[m_cpass];
- m_prgppass[0] = new GrGlyphGenPass(0);
- m_prgppass[1] = new GrSubPass(1);
- m_prgppass[2] = new GrSubPass(2);
- m_prgppass[3] = new GrPosPass(3);
-
- m_prgppass[0]->SetUpTestData();
- m_prgppass[1]->SetUpLigature2Test();
- m_prgppass[2]->SetUpLigature2Test();
- m_prgppass[3]->SetUpTestData();
- }
- else
- Assert(false);
-
- m_engst.m_prgpsstrm = new GrSlotStream*[m_cpass];
- for (int ipass = 0; ipass < m_cpass; ++ipass)
- m_engst.m_prgpsstrm[ipass] = new GrSlotStream(ipass);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Set the pass variables that normally will be read from the ECF.
-----------------------------------------------------------------------------------------------*/
-
-void GrPass::SetUpTestData()
-{
- m_nMaxRuleContext = m_nMaxChunk = 2;
- m_nMaxRuleLoop = 2;
-}
-
-//void GrBidiPass::SetUpTestData()
-//{
-// m_nMaxRuleContext = m_nMaxChunk = 1;
-// m_nMaxRuleLoop = 2;
-//}
-
-/*----------------------------------------------------------------------------------------------
- Call the appropriate test function.
-----------------------------------------------------------------------------------------------*/
-
-bool GrLineBreakPass::RunTestRules(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- if (m_staBehavior == "Reprocess")
- return RunReprocessTest(ptman, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "CrossLineContext")
- return RunCrossLineContextTest(ptman, psstrmInput, psstrmOutput);
- else
- return false;
-}
-
-bool GrSubPass::RunTestRules(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- if (m_staBehavior == "ReverseNumbers")
- return RunReverseNumbersTest(ptman, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "CrossLineContext")
- return RunCrossLineContextTest(ptman, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "Reprocess")
- return RunReprocessTest(ptman, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "LineEdgeContext")
- return RunLineEdgeContextTest(ptman, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "BidiAlgorithm")
- return RunBidiAlgorithmTest(ptman, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "PseudoGlyphs")
- return RunPseudoGlyphsTest(ptman, psstrmInput, psstrmOutput);
- else if (m_staBehavior == "BidiNumbers")
- return RunBidiNumbersTest(ptman, psstrmInput, psstrmOutput);
- else
- return false;
-}
-
-bool GrPosPass::RunTestRules(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- A substitution pass that causes numbers to be reversed. Used by both the JustReorder test
- and the Reprocess test.
-----------------------------------------------------------------------------------------------*/
-
-void GrSubPass::SetUpReverseNumbersTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "ReverseNumbers";
-}
-
-bool GrSubPass::RunReverseNumbersTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- data16 chw0;
-
- // clsDigit { dir = DIR_RIGHT };
- if (psstrmInput->SlotsPending() >= 1)
- {
- bool fRtl = ptman->RightToLeft();
- chw0 = psstrmInput->Peek(0)->GlyphID();
- if ((chw0 >= '0') && (chw0 <= '9'))
- {
- GrSlotState * pslot0 = psstrmInput->NextGet();
-// GrFeatureValues fval0;
-// pslot0->GetFeatureValues(&fval0);
-
- GrSlotState * pslotNew;
- ptman->NewSlotCopy(pslot0, m_ipass, &pslotNew);
- pslotNew->SetDirectionality(fRtl ? kdircArabNum : kdircR);
- pslotNew->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew);
-
- return true;
- }
- else
- {
- GrSlotState * pslot0 = psstrmInput->NextGet();
-// GrFeatureValues fval0;
-// pslot0->GetFeatureValues(&fval0);
-
- GrSlotState * pslotNew;
- ptman->NewSlotCopy(pslot0, m_ipass, &pslotNew);
- if (chw0 == 32)
- pslotNew->SetDirectionality(kdircWhiteSpace);
- else if (chw0 == '.')
- pslotNew->SetDirectionality(kdircComSep);
- else
- pslotNew->SetDirectionality(fRtl ? kdircR : kdircL);
- pslotNew->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew);
-
- return true;
- }
- }
- else
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- A substitution pass that will do some hard-coded actions resulting in cross-line-boundary
- contextuals.
-----------------------------------------------------------------------------------------------*/
-void GrEngine::SetUpCrossLineContextTest()
-{
- m_fLineBreak = true;
- m_cchwPreXlbContext = 2;
- m_cchwPostXlbContext = 0;
-}
-
-void GrLineBreakPass::SetUpCrossLineContextTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "CrossLineContext";
-}
-
-void GrSubPass::SetUpCrossLineContextTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 3;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "CrossLineContext";
-}
-
-bool GrLineBreakPass::RunCrossLineContextTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- // '=' { break = intra };
- if ((psstrmInput->SlotsPending() >= 1) &&
- (psstrmInput->Peek(0)->GlyphID() == 61))
- {
- GrSlotState * pslotNew0;
- ptman->NewSlotCopy(psstrmInput->NextGet(), m_ipass, &pslotNew0);
- pslotNew0->SetBreakWeight(int(klbHyphenBreak));
- psstrmOutput->NextPut(pslotNew0);
-
- psstrmOutput->SetPosForNextRule(0, psstrmInput, false);
-
- return true;
- }
- else
- return false;
-}
-
-bool GrSubPass::RunCrossLineContextTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- // any '=' _ _ > any '=' '=':2 any:1 / _ _ # _ _
- if ((psstrmInput->SlotsPending() >= 3) &&
- (psstrmInput->Peek(1)->GlyphID() == 61) &&
- (psstrmInput->Peek(2)->GlyphID() == ptman->LBGlyphID()))
- {
- GrSlotState * pslot0 = psstrmInput->Peek(0);
- GrSlotState * pslot1 = psstrmInput->Peek(1);
- gid16 chw0 = pslot0->GlyphID();
-// GrFeatureValues fval0;
-// pslot0->GetFeatureValues(&fval0);
-// GrFeatureValues fval1;
-// pslot1->GetFeatureValues(&fval1);
-
- // copy the first 3 slots
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- // insert 2 more
- GrSlotState * pslot3;
- ptman->NewSlot(61, pslot1, NULL, m_ipass, &pslot3);
- pslot3->Associate(pslot1);
- psstrmOutput->NextPut(pslot3);
-
- GrSlotState * pslot4;
- ptman->NewSlot(chw0, pslot0, NULL, m_ipass, &pslot4);
- pslot4->Associate(pslot0);
- psstrmOutput->NextPut(pslot4);
-
- return true;
- }
- else
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Line break and substitution passes that cause intra-pass reprocessing (ie, the ^ mechanism).
-----------------------------------------------------------------------------------------------*/
-
-void GrLineBreakPass::SetUpReprocessTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 2;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "Reprocess";
-}
-
-bool GrLineBreakPass::RunReprocessTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- gid16 chw;
-
- // '^' {lb=2} / _ lc
- if ((psstrmInput->SlotsPending() >=2) &&
- (psstrmInput->Peek(0)->GlyphID() == '^') &&
- (((chw = psstrmInput->Peek(1)->GlyphID()) >= 'a') &&
- (chw <= 'z')))
- {
- GrSlotState * pslotNew0;
- ptman->NewSlotCopy(psstrmInput->NextGet(), m_ipass, &pslotNew0);
- pslotNew0->SetBreakWeight(int(klbHyphenBreak));
- psstrmOutput->NextPut(pslotNew0);
-
- psstrmOutput->SetPosForNextRule(0, psstrmInput, false);
-
- return true;
- }
- else
- return false;
-}
-
-
-void GrSubPass::SetUpReprocessTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 3;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "Reprocess";
-}
-
-bool GrSubPass::RunReprocessTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- gid16 chw;
- gid16 chwLB = ptman->LBGlyphID();
-
- // symbol > @2 {dir = DIR_ARABNUMBER} / any {dir != DIR_LEFT} ^ _
- if ((psstrmInput->SlotsPending() >= 2) &&
- (psstrmInput->Peek(0)->Directionality() != kdircL) &&
- (((chw = psstrmInput->Peek(1)->GlyphID()) == '@') ||
- (chw == '@') || (chw == '$') || (chw == '%') ||
- (chw == '^') || (chw == '&') || (chw == '*')))
- {
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- GrSlotState * pslotNew1;
- ptman->NewSlotCopy(psstrmInput->NextGet(), m_ipass, &pslotNew1);
- pslotNew1->SetDirectionality(kdircArabNum);
- psstrmOutput->NextPut(pslotNew1);
-
- psstrmOutput->SetPosForNextRule(-1, psstrmInput, false);
-
- return true;
- }
-
- // '^' lc > @1 uc
- else if ((psstrmInput->SlotsPending() >= 2) &&
- (psstrmInput->Peek(0)->GlyphID() == '^') &&
- (((chw = psstrmInput->Peek(1)->GlyphID()) >= 'a') &&
- (chw <= 'z')))
- {
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- gid16 chwNew = chw - 'a' + 'A';
- GrSlotState * pslotNew1;
- ptman->NewSlotCopy(psstrmInput->NextGet(), m_ipass, &pslotNew1);
- pslotNew1->SetGlyphID(chwNew);
- psstrmOutput->NextPut(pslotNew1);
-
- psstrmOutput->SetPosForNextRule(0, psstrmInput, false);
-
- return true;
- }
-
- // '^' lc > @1 uc / _ # _
- else if ((psstrmInput->SlotsPending() >= 3) &&
- (psstrmInput->Peek(0)->GlyphID() == '^') &&
- (psstrmInput->Peek(1)->IsLineBreak(chwLB)) &&
- (((chw = psstrmInput->Peek(2)->GlyphID()) >= 'a') &&
- (chw <= 'z')))
- {
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- gid16 chwNew = chw - 'a' + 'A';
- GrSlotState * pslotNew1;
- ptman->NewSlotCopy(psstrmInput->NextGet(), m_ipass, &pslotNew1);
- pslotNew1->SetGlyphID(chwNew);
- psstrmOutput->NextPut(pslotNew1);
-
- psstrmOutput->SetPosForNextRule(0, psstrmInput, false);
-
- return true;
- }
-
- else
- return false;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Substitution passes that create contextual forms at the line breaks; also a cross-line-
- boundary contextual.
-----------------------------------------------------------------------------------------------*/
-
-void GrSubPass::SetUpLineEdgeContextTest(int ipass)
-{
- m_nMaxRuleContext = (ipass == 2)? 5: 2;
- m_nMaxChunk = m_nMaxRuleContext;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "LineEdgeContext";
-}
-
-bool GrSubPass::RunLineEdgeContextTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- gid16 chwLB = ptman->LBGlyphID();
-
- // any _ _ > @1 '-' '-' / _ _ _ #
- if ((m_ipass == 1) &&
- (psstrmInput->SlotsPending() >= 2) &&
- (psstrmInput->Peek(1)->IsLineBreak(chwLB)))
- {
- GrSlotState * pslot0 = psstrmInput->Peek(0);
-// GrFeatureValues fval;
-// pslot0->GetFeatureValues(&fval);
-
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- GrSlotState * pslotNew1;
- ptman->NewSlot('-', pslot0, NULL, m_ipass, &pslotNew1);
- pslotNew1->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew1);
-
- GrSlotState * pslotNew2;
- ptman->NewSlot('-', pslot0, NULL, m_ipass, &pslotNew2);
- pslotNew2->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew2);
-
- return true;
- }
-
- // _ _ any > '+' '+' @4 / # _ _ _
- else if ((m_ipass == 1) &&
- (psstrmInput->SlotsPending() >= 2) &&
- (psstrmInput->Peek(0)->IsLineBreak(chwLB)))
- {
- GrSlotState * pslot2 = psstrmInput->Peek(1);
-// GrFeatureValues fval;
-// pslot2->GetFeatureValues(&fval);
-
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- GrSlotState * pslotNew0;
- ptman->NewSlot('+', pslot2, NULL, m_ipass, &pslotNew0);
- pslotNew0->Associate(pslot2);
- psstrmOutput->NextPut(pslotNew0);
-
- GrSlotState * pslotNew1;
- ptman->NewSlot('+', pslot2, NULL, m_ipass, &pslotNew1);
- pslotNew1->Associate(pslot2);
- psstrmOutput->NextPut(pslotNew1);
-
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- return true;
- }
-
- // '-' '-' '+' '+' > @1 _ _ @4 / _ _ # _ _
- else if ((m_ipass == 2) &&
- (psstrmInput->SlotsPending() >= 5) &&
- (psstrmInput->Peek(0)->GlyphID() == '-') &&
- (psstrmInput->Peek(1)->GlyphID() == '-') &&
- (psstrmInput->Peek(2)->IsLineBreak(chwLB)) &&
- (psstrmInput->Peek(3)->GlyphID() == '+') &&
- (psstrmInput->Peek(4)->GlyphID() == '+'))
- {
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- psstrmInput->Skip(1);
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
- psstrmInput->Skip(1);
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- return true;
- }
-
- else
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Substitution passes that do something special with pseudo glyphs.
-----------------------------------------------------------------------------------------------*/
-
-void GrSubPass::SetUpPseudoGlyphsTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 3;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "PseudoGlyphs";
-}
-
-bool GrSubPass::RunPseudoGlyphsTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- gid16 chwLB = ptman->LBGlyphID();
-
- // pseudo > uppercase / _ ' '
- if ((psstrmInput->SlotsPending() >= 2) &&
- (psstrmInput->Peek(0)->GlyphID() > 1000) && // pseudo
- (psstrmInput->Peek(1)->GlyphID() == 32))
- {
- GrSlotState * pslot0 = psstrmInput->NextGet();
-// GrFeatureValues fval;
-// pslot0->GetFeatureValues(&fval);
-
- GrSlotState * pslotNew;
- ptman->NewSlotCopy(pslot0, m_ipass, &pslotNew);
- pslotNew->SetGlyphID(pslot0->GlyphID() - 1000);
- pslotNew->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew);
-
- psstrmOutput->SetPosForNextRule(0, psstrmInput, false);
-
- return true;
- }
-
- // pseudo > uppercase / _ |
- // pseudo > uppercase / _ #
- else if ((psstrmInput->SlotsPending() <= 2) &&
- (psstrmInput->Peek(0)->GlyphID() > 1000) && // pseudo
- (psstrmInput->SlotsPending() < 2 || psstrmInput->Peek(1)->GlyphID() == 35))
- {
- GrSlotState * pslot0 = psstrmInput->NextGet();
-// GrFeatureValues fval;
-// pslot0->GetFeatureValues(&fval);
-
- GrSlotState * pslotNew;
- ptman->NewSlotCopy(pslot0, m_ipass, &pslotNew);
- pslotNew->SetGlyphID(pslot0->GlyphID() - 1000);
- pslotNew->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew);
-
- psstrmOutput->SetPosForNextRule(0, psstrmInput, false);
-
- return true;
- }
-
- // pseudo any _ > lowercase:1 @2 @1 / _ _ ^ _;
- else if ((psstrmInput->SlotsPending() >= 3) &&
- (psstrmInput->Peek(0)->GlyphID() > 1000)) // pseudo
- {
- GrSlotState * pslot0 = psstrmInput->NextGet();
-// GrFeatureValues fval;
-// pslot0->GetFeatureValues(&fval);
-
- GrSlotState * pslotNew0;
- ptman->NewSlot(pslot0->GlyphID()-1000-65+97, pslot0, NULL, m_ipass, &pslotNew0);
- pslotNew0->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew0);
-
- psstrmOutput->CopyOneSlotFrom(psstrmInput);
-
- GrSlotState * pslotNew2;
- ptman->NewSlot(pslot0->GlyphID(), pslot0, NULL, m_ipass, &pslotNew2);
- pslotNew2->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew2);
-
- psstrmOutput->SetPosForNextRule(-1, psstrmInput, false);
-
- return true;
- }
- else
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Substitution pass that tests reversing numbers.
-----------------------------------------------------------------------------------------------*/
-void GrSubPass::SetUpBidiNumbersTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "BidiNumbers";
-}
-
-bool GrSubPass::RunBidiNumbersTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- gid16 chw0;
-
- // clsDigit > clsDigit { dir = DIR_ARABNUMBER };
- if ((psstrmInput->SlotsPending() >= 1) &&
- (((chw0 = psstrmInput->Peek(0)->GlyphID()) >= '0' && chw0 <= '9') ||
- (chw0 >= 'A' && chw0 <= 'Z') || (chw0 >= 'a' && chw0 <= 'z')))
- {
- GrSlotState * pslot0 = psstrmInput->NextGet();
-// GrFeatureValues fval0;
-// pslot0->GetFeatureValues(&fval0);
-
- GrSlotState * pslotNew;
- ptman->NewSlot(chw0, pslot0, NULL, m_ipass, &pslotNew);
- if (chw0 >= '0' && chw0 <= '9')
- pslotNew->SetDirectionality(kdircArabNum);
- else // a-z and A-Z
- pslotNew->SetDirectionality(kdircR);
- pslotNew->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew);
-
- return true;
- }
- else
- return false;
-}
-
-void GrBidiPass::SetUpBidiNumbersTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 2;
- m_nTopDirection = 1;
-}
-
-/*----------------------------------------------------------------------------------------------
- Substitution pass that tests the bidi algorithm thoroughly.
-----------------------------------------------------------------------------------------------*/
-void GrSubPass::SetUpBidiAlgorithmTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 2;
- m_staBehavior = "BidiAlgorithm";
-}
-
-bool GrSubPass::RunBidiAlgorithmTest(GrTableManager * ptman,
- GrSlotStream * psstrmInput, GrSlotStream * psstrmOutput)
-{
- gid16 chw0;
-
- if (psstrmInput->SlotsPending() >= 1)
- {
- chw0 = psstrmInput->Peek(0)->GlyphID();
-
- DirCode dircNew;
-
- if (chw0 >= '0' && chw0 <= '9')
- dircNew = kdircEuroNum;
- else if (chw0 >= 'a' && chw0 <= 'z')
- dircNew = kdircL;
- else if (chw0 >= 'A' && chw0 <= 'M')
- dircNew = kdircR;
- else if (chw0 >= 'N' && chw0 <= 'T')
- dircNew = kdircRArab;
- else if (chw0 >= 'U' && chw0 <= 'Z')
- dircNew = kdircArabNum;
- else if (chw0 == '$' || chw0 == '%')
- dircNew = kdircEuroTerm;
- else if (chw0 == '.' || chw0 == '*' || chw0 == '+')
- dircNew = kdircEuroSep;
- else if (chw0 == '@')
- dircNew = kdircComSep;
- else if (chw0 == '_' || chw0 == '=')
- dircNew = kdircNeutral;
- else if (chw0 == ':')
- dircNew = kdircNSM;
- else
- return false;
-
- GrSlotState * pslot0 = psstrmInput->NextGet();
-// GrFeatureValues fval0;
-// pslot0->GetFeatureValues(&fval0);
-
- GrSlotState * pslotNew;
- ptman->NewSlot(chw0, pslot0, NULL, m_ipass, &pslotNew);
- pslotNew->SetDirectionality(dircNew);
- pslotNew->Associate(pslot0);
- psstrmOutput->NextPut(pslotNew);
-
- return true;
- }
- else
- return false;
-}
-
-void GrBidiPass::SetUpBidiAlgorithmTest()
-{
- m_nMaxRuleContext = m_nMaxChunk = 1;
- m_nMaxRuleLoop = 2;
- m_nTopDirection = 0;
-}
-
-
-#endif // _DEBUG
-
-} // namespace gr
-
-#endif // OLD_TEST_STUFF
-
-//:End Ignore
diff --git a/Build/source/libs/graphite-engine/src/segment/TransductionLog.cpp b/Build/source/libs/graphite-engine/src/segment/TransductionLog.cpp
deleted file mode 100644
index 73273ae3feb..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/TransductionLog.cpp
+++ /dev/null
@@ -1,2091 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2000 - 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TransductionLog.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Contains the functions for writing a log of the transduction process.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-
-#include <math.h>
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-#define SP_PER_SLOT 7
-#define LEADING_SP 15
-#define MAX_SLOTS 128
-
-/*----------------------------------------------------------------------------------------------
- Output a file showing a log of the transduction process and the resulting segment.
-----------------------------------------------------------------------------------------------*/
-//bool GrTableManager::WriteTransductionLog(GrCharStream * pchstrm, Segment * psegRet,
-// int cbPrevSegDat, byte * pbPrevSegDat, byte * pbNextSegDat, int * pcbNextSegDat)
-//{
-//#ifdef TRACING
-// std::string staFile;
-// if (!LogFileName(staFile))
-// return false;
-//
-// std::ofstream strmOut;
-// if (cbPrevSegDat > 0)
-// strmOut.open(staFile.c_str(), std::ios::app); // append
-// else
-// strmOut.open(staFile.c_str());
-// if (strmOut.fail())
-// return false;
-//
-// WriteXductnLog(strmOut, pchstrm, psegRet, cbPrevSegDat, pbPrevSegDat);
-//
-// strmOut.close();
-// return true;
-//#else
-// return false;
-//#endif // TRACING
-//}
-
-bool GrTableManager::WriteTransductionLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet, int cbPrevSegDat, byte * pbPrevSegDat)
-{
-#ifdef TRACING
- if (!pstrmLog)
- return false;
- std::ostream & strmOut = *pstrmLog;
- WriteXductnLog(strmOut, pchstrm, psegRet, cbPrevSegDat, pbPrevSegDat);
- return true;
-#else
- return false;
-#endif // TRACING
-}
-
-/*----------------------------------------------------------------------------------------------
- Append to the file, showing the surface/underlying mappings. This must be done after
- figuring out all the associations.
-
- Also write the final glyph positions, since they are now determined.
-----------------------------------------------------------------------------------------------*/
-//bool GrTableManager::WriteAssociationLog(GrCharStream * pchstrm, Segment * psegRet)
-//{
-//#ifdef TRACING
-// std::string staFile;
-// if (!LogFileName(staFile))
-// return false;
-//
-// std::ofstream strmOut;
-// strmOut.open(staFile.c_str(), std::ios::app); // append
-// if (strmOut.fail())
-// return false;
-//
-// LogFinalPositions(strmOut);
-//
-// strmOut << "\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n";
-//
-// psegRet->LogUnderlyingToSurface(this, strmOut, pchstrm);
-// psegRet->LogSurfaceToUnderlying(this, strmOut);
-//
-// strmOut << "\n\n=======================================================================\n\n";
-//
-// strmOut.close();
-// return true;
-//#else
-// return false;
-//#endif // TRACING
-//}
-
-
-bool GrTableManager::WriteAssociationLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet)
-{
-#ifdef TRACING
- if (!pstrmLog)
- return false;
-
- std::ostream & strmOut = *pstrmLog;
-
- psegRet->LogUnderlyingToSurface(this, strmOut, pchstrm);
- psegRet->LogSurfaceToUnderlying(this, strmOut);
-
- strmOut << "\n\n=======================================================================\n\n";
-
- return true;
-#else
- return false;
-#endif // TRACING
-}
-
-#ifdef TRACING
-
-/*----------------------------------------------------------------------------------------------
- Generate the name of the file where the log will be written. It goes in the directory
- defined by either the TEMP or TMP environment variable.
-
- TODO: remove
-----------------------------------------------------------------------------------------------*/
-//bool GrTableManager::LogFileName(std::string & staFile)
-//{
-// char * pchTmpEnv = getenv("TEMP");
-// if (pchTmpEnv == 0)
-// pchTmpEnv = getenv("TMP");
-// if (pchTmpEnv == 0)
-// return false;
-//
-// staFile.assign(pchTmpEnv);
-// if (staFile[staFile.size() - 1] != '\\')
-// staFile.append("\\");
-// staFile.append("gr_xductn.log");
-//
-// return true;
-//}
-
-/*----------------------------------------------------------------------------------------------
- Output a file showing a log of the transduction process and the resulting segment.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::WriteXductnLog(std::ostream & strmOut,
- GrCharStream * pchstrm, Segment * psegRet,
- int cbPrevSegDat, byte * pbPrevSegDat)
-{
- if (cbPrevSegDat == 0)
- LogUnderlying(strmOut, pchstrm, 0);
- else
- {
- Assert(*(pbPrevSegDat + 4) == 0); // skip offset for first pass
- LogUnderlying(strmOut, pchstrm, *(pbPrevSegDat + 3));
- }
-
- LogPass1Input(strmOut);
-
- for (int ipass = 1; ipass < m_cpass; ipass++)
- {
- if (cbPrevSegDat == 0)
- LogPassOutput(strmOut, ipass, 0);
- else
- LogPassOutput(strmOut, ipass, *(pbPrevSegDat + 4 + ipass));
- }
-
- LogFinalPositions(strmOut);
-
- strmOut << "\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n";
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out a log of the underlying input.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogUnderlying(std::ostream & strmOut, GrCharStream * pchstrm,
- int cchwBackup)
-{
- strmOut << "UNDERLYING INPUT\n\n";
-
- int rgnChars[MAX_SLOTS];
- bool rgfNewRun[MAX_SLOTS];
- std::fill_n(rgfNewRun, MAX_SLOTS, false);
- GrFeatureValues rgfval[MAX_SLOTS];
- int cchwMaxRawChars;
-
- int cnUtf32 = pchstrm->GetLogData(this, rgnChars, rgfNewRun, rgfval,
- cchwBackup, &cchwMaxRawChars);
- cnUtf32 = min(cnUtf32, MAX_SLOTS);
-
- int ichw;
-
- // For UTF-8 and surrogate representation:
- utf16 rgchwChars2[MAX_SLOTS];
- utf16 rgchwChars3[MAX_SLOTS];
- utf16 rgchwChars4[MAX_SLOTS];
- utf16 rgchwChars5[MAX_SLOTS];
- utf16 rgchwChars6[MAX_SLOTS];
- int rgcchwRaw[MAX_SLOTS];
-
- if (cchwMaxRawChars > 1)
- {
- cchwMaxRawChars = min(cchwMaxRawChars, 6); // max of 6 raw (UTF-8 or UTF-16) chars per slot
- pchstrm->GetLogDataRaw(this, cnUtf32, cchwBackup, cchwMaxRawChars,
- rgnChars, rgchwChars2, rgchwChars3, rgchwChars4, rgchwChars5, rgchwChars6,
- rgcchwRaw);
- }
- else
- {
- for (ichw = 0; ichw < cnUtf32; ichw++)
- {
- rgcchwRaw[ichw] = 1;
- rgchwChars2[ichw] = 0;
- rgchwChars3[ichw] = 0;
- rgchwChars4[ichw] = 0;
- rgchwChars5[ichw] = 0;
- rgchwChars6[ichw] = 0;
- }
- }
-
- LogUnderlyingHeader(strmOut, pchstrm->Min(), (pchstrm->Min() + cnUtf32 - cchwBackup),
- cchwBackup, rgcchwRaw);
-
- // Text
- strmOut << "Text: "; // 15 spaces
- for (ichw = 0; ichw < cnUtf32; ichw++)
- {
- if (rgnChars[ichw] < 0x0100 && rgchwChars2[ichw] == 0) // ANSI
- strmOut << (char)rgnChars[ichw] << " "; // 6 spaces
- else if (rgnChars[ichw] == knLRM)
- strmOut << "<LRM> ";
- else if (rgnChars[ichw] == knRLM)
- strmOut << "<RLM> ";
- else if (rgnChars[ichw] == knLRO)
- strmOut << "<LRO> ";
- else if (rgnChars[ichw] == knRLO)
- strmOut << "<RLO> ";
- else if (rgnChars[ichw] == knLRE)
- strmOut << "<LRE> ";
- else if (rgnChars[ichw] == knRLE)
- strmOut << "<RLE> ";
- else if (rgnChars[ichw] == knPDF)
- strmOut << "<PDF> ";
- else
- strmOut << " ";
- }
- strmOut << "\n";
-
- // Unicode
- strmOut << "Unicode: ";
- for (ichw = 0; ichw < cnUtf32; ichw++)
- LogHexInTable(strmOut, utf16(rgnChars[ichw]));
- strmOut << "\n";
- for (int icchRaw = 2; icchRaw <= cchwMaxRawChars; icchRaw++)
- {
- strmOut << " ";
- for (ichw = 0; ichw < cnUtf32; ichw++)
- {
- utf16 chw;
- switch (icchRaw)
- {
- case 2: chw = rgchwChars2[ichw]; break;
- case 3: chw = rgchwChars3[ichw]; break;
- case 4: chw = rgchwChars4[ichw]; break;
- case 5: chw = rgchwChars5[ichw]; break;
- case 6: chw = rgchwChars6[ichw]; break;
- default: chw = 0;
- }
- if (chw == 0)
- strmOut << " ";
- else
- LogHexInTable(strmOut, chw);
- }
- strmOut << "\n";
- }
-
- // Runs
- strmOut << "Runs: ";
- int crun = 0;
- for (ichw = 0; ichw < cnUtf32; ichw++)
- {
- if (rgfNewRun[ichw])
- {
- crun++;
- strmOut << "|" << crun << ((crun < 10) ? " " : " ");
- }
- else
- strmOut << " ";
- }
- strmOut << "\n";
-
- // Features
- strmOut << "Features and character properties:\n";
- crun = 0;
- for (ichw = 0; ichw < cnUtf32; ichw++)
- {
- if (rgfNewRun[ichw])
- {
- crun++;
- strmOut << " Run " << crun << ": ";
- rgfval[ichw].WriteXductnLog(this, strmOut);
-
- }
- }
-}
-
-
-void GrFeatureValues::WriteXductnLog(GrTableManager * ptman, std::ostream & strmOut)
-{
- bool fFirst = true;
- for (int i = 0; i < kMaxFeatures; i++)
- {
- if (m_rgnFValues[i] != 0)
- {
- GrFeature * pfeat = ptman->Feature(i);
- if (!fFirst)
- strmOut << ",";
- strmOut << pfeat->ID() << "=" << m_rgnFValues[i];
- fFirst = false;
- }
- }
- if (fFirst)
- strmOut << "all features=0";
-
- strmOut << "\n\n";
-}
-
-/*----------------------------------------------------------------------------------------------
- Loop through the input stream of underlying characters, storing information in the
- arrays for the log.
- ENHANCE SharonC: do we need to show the underline properties?
-----------------------------------------------------------------------------------------------*/
-int GrCharStream::GetLogData(GrTableManager * ptman, int * rgchl, bool * rgfNewRun,
- GrFeatureValues * rgfval, int cchrBackup, int * pcchrMax)
-{
- Assert(cchrBackup <= m_cchrBackedUp);
-
- int ichrPosToStop = m_ichrPos;
- int ichrStart = m_ichrMin - max(cchrBackup, m_cchrBackedUp);
-
- *pcchrMax = 0;
-
- // Restart the stream.
- m_ichrPos = ichrStart;
- m_ichrRunMin = 0;
- m_ichrRunLim = 0;
- m_ichrRunOffset = kPosInfinity;
- m_vislotNextChunkMap.clear();
-
- int cchrSkipBackup = m_cchrBackedUp - cchrBackup;
-
- int c = 0;
- int cchr = 0;
-
- while (m_ichrPos < ichrPosToStop)
- {
- if ((c < MAX_SLOTS) && (m_ichrPos >= m_ichrRunLim))
- {
- rgfNewRun[c] = true;
- }
-
- GrFeatureValues fval;
- int ichrOffset, cchrThis;
- int chl = NextGet(ptman, &fval, &ichrOffset, &cchrThis);
- cchr += cchrThis;
- if (cchr <= cchrSkipBackup)
- {} // ignore - this is before the pre-segment stuff that we want to skip
- else if (c < MAX_SLOTS)
- {
- rgchl[c] = chl;
- *pcchrMax = max(*pcchrMax, cchrThis);
- if (rgfNewRun[c])
- {
- rgfval[c] = fval;
- }
- c++;
- }
- }
-
- ////return (m_ichwPos - (m_ichwMin - cchwBackup));
- return c;
-}
-
-/*----------------------------------------------------------------------------------------------
- If any of the characters are comprised of surrogates or UTF-8, fill in the arrays with
- the raw (UTF-16 or UTF-8) chars for display. To do this we get the raw characters
- directly from the text source.
-----------------------------------------------------------------------------------------------*/
-void GrCharStream::GetLogDataRaw(GrTableManager * ptman, int cchl, int cchrBackup,
- int cchrMaxRaw, int * prgchl,
- utf16 * prgchw2, utf16 * prgchw3, utf16 * prgchw4, utf16 * prgchw5, utf16 * prgchw6,
- int * prgcchr)
-{
- for (int i = 0; i < cchl; i++)
- {
- prgchw2[i] = 0;
- }
-
- int ichrLim = m_ichrPos;
- int ichrMin = m_ichrMin - cchrBackup;
-
- int cchrRange = ichrLim - ichrMin;
- int ichr;
- utf16 * prgchwRunText = new utf16[cchrRange];
- utf8 * prgchsRunText8 = NULL;
-
- UtfType utf = m_pgts->utfEncodingForm();
-
- switch (utf)
- {
- case kutf8:
- prgchsRunText8 = new utf8[cchrRange];
- m_pgts->fetch(ichrMin, cchrRange, prgchsRunText8);
- for (int ichr = 0; ichr < cchrRange; ichr++)
- prgchwRunText[ichr] = (utf16)prgchsRunText8[ichr]; // zero-extend into UTF-16 buffer
- break;
- case kutf16:
- m_pgts->fetch(ichrMin, cchrRange, prgchwRunText);
- break;
- default:
- case kutf32: // this method should never have been called
- Assert(false);
- for (int ichrLp = 0; ichrLp < cchrRange; ichrLp++)
- {
- prgcchr[ichrLp] = 1;
- prgchw2[ichrLp] = 0;
- prgchw3[ichrLp] = 0;
- prgchw4[ichrLp] = 0;
- prgchw5[ichrLp] = 0;
- prgchw6[ichrLp] = 0;
- }
- return;
- }
-
- ichr = ichrMin;
- int ichl = 0;
- while (ichr < ichrLim)
- {
- int cchrThis = 1;
- // Replace 32-bit char with (first) 16-bit or 8-bit char.
- prgchl[ichl] = (int)prgchwRunText[ichr - ichrMin];
- prgcchr[ichr] = cchrThis;
- ichr++;
-
- while (!AtUnicodeCharBoundary(prgchwRunText, cchrRange, ichr - ichrMin, utf))
- {
- cchrThis++;
- switch (cchrThis)
- {
- case 2: prgchw2[ichl] = prgchwRunText[ichr - ichrMin]; break;
- case 3: prgchw3[ichl] = prgchwRunText[ichr - ichrMin]; break;
- case 4: prgchw4[ichl] = prgchwRunText[ichr - ichrMin]; break;
- case 5: prgchw5[ichl] = prgchwRunText[ichr - ichrMin]; break;
- case 6: prgchw6[ichl] = prgchwRunText[ichr - ichrMin]; break;
- default:
- break;
- }
- prgcchr[ichr] = cchrThis;
- ichr++;
- }
- switch (cchrThis)
- {
- case 1:
- prgchw2[ichl] = 0;
- // fall through
- case 2:
- prgchw3[ichl] = 0;
- // fall through
- case 3:
- prgchw4[ichl] = 0;
- // fall through
- case 4:
- prgchw5[ichl] = 0;
- // fall through
- case 5:
- prgchw6[ichl] = 0;
- }
- ichl++;
- }
-
- delete[] prgchwRunText;
- delete[] prgchsRunText8;
-}
-
-/*----------------------------------------------------------------------------------------------
- Output the glyph IDs generated by the glyph generation pass (pass 0).
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogPass1Input(std::ostream & strmOut)
-{
- strmOut << "INPUT TO PASS 1\n\n";
-
- GrSlotStream * psstrm = OutputStream(0);
-
- LogSlotHeader(strmOut, psstrm->WritePos(), SP_PER_SLOT, LEADING_SP);
-
- LogSlotGlyphs(strmOut, psstrm);
-
- strmOut << "\n";
-}
-
-/*----------------------------------------------------------------------------------------------
- Output the the results of pass.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogPassOutput(std::ostream & strmOut, int ipass, int cslotSkipped)
-{
- strmOut << "\n";
-
- GrPass * ppass = Pass(ipass);
- GrSlotStream * psstrmIn = InputStream(ipass);
- GrSlotStream * psstrmOut = OutputStream(ipass);
-
- int islot;
- // Mark each slot with its index in the input and output streams.
- for (islot = 0; islot < psstrmIn->ReadPos(); islot++)
- psstrmIn->SlotAt(islot)->m_islotTmpIn = islot;
-
- for (islot = 0; islot < psstrmOut->WritePos(); islot++)
- psstrmOut->SlotAt(islot)->m_islotTmpOut = islot;
-
- if (!dynamic_cast<GrBidiPass *>(ppass))
- ppass->LogRulesFiredAndFailed(strmOut, psstrmIn);
-
- strmOut << "\nOUTPUT OF PASS " << ipass;
- if (dynamic_cast<GrBidiPass *>(ppass))
- strmOut << " (bidi)";
- else if (dynamic_cast<GrSubPass *>(ppass))
- {
- if (ipass >= m_ipassJust1)
- strmOut << " (justification)";
- else
- strmOut << " (substitution)";
- }
- else if (dynamic_cast<GrPosPass *>(ppass))
- strmOut << " (positioning)";
- else if (dynamic_cast<GrLineBreakPass *>(ppass))
- strmOut << " (linebreak)";
- strmOut << "\n";
-
- ppass->LogInsertionsAndDeletions(strmOut, psstrmOut);
-
- LogSlotHeader(strmOut, psstrmOut->WritePos(), SP_PER_SLOT, LEADING_SP);
-
- LogSlotGlyphs(strmOut, psstrmOut);
-
- bool fAnyPseudos = false;
- if (dynamic_cast<GrPosPass *>(ppass))
- {
- for (islot = 0; islot < psstrmOut->WritePos(); islot++)
- {
- GrSlotState * pslotTmp = psstrmOut->SlotAt(islot);
- if (pslotTmp->GlyphID() != pslotTmp->ActualGlyphForOutput(this))
- {
- fAnyPseudos = true;
- break;
- }
- }
- }
- if (fAnyPseudos)
- {
- strmOut << "Actual glyphs: ";
- for (islot = 0; islot < psstrmOut->WritePos(); islot++)
- {
- GrSlotState * pslotTmp = psstrmOut->SlotAt(islot);
- if (pslotTmp->GlyphID() != pslotTmp->ActualGlyphForOutput(this))
- LogHexInTable(strmOut, pslotTmp->ActualGlyphForOutput(this));
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- LogAttributes(strmOut, ipass);
-
- // Do this later, after we're sure the positions have been set:
- //if (ipass == m_cpass - 1)
- // LogFinalPositions(strmOut);
-
- if (cslotSkipped > 0)
- {
- strmOut << "\n ";
- for (islot = 0; islot < cslotSkipped; islot++)
- strmOut << "SKIP ";
- strmOut << "\n";
- }
-
- // If this was the pass just before the justification routines get run, output a
- // special line that just shows the results, ie, the values of justify.width.
- // TODO: adjust this when measure mode get functioning.
- if (ipass == m_ipassJust1 - 1 && ShouldLogJustification()
- && m_engst.m_jmodi == kjmodiJustify)
- {
- strmOut << "\nJUSTIFICATION\n\n";
- LogSlotHeader(strmOut, psstrmOut->WritePos(), SP_PER_SLOT, LEADING_SP);
- LogSlotGlyphs(strmOut, psstrmOut);
- LogAttributes(strmOut, ipass, true);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Write the list of rules fired and failed for a given pass.
-----------------------------------------------------------------------------------------------*/
-void GrPass::LogRulesFiredAndFailed(std::ostream & strmOut, GrSlotStream * psstrmIn)
-{
- m_pzpst->LogRulesFiredAndFailed(strmOut, psstrmIn);
-}
-
-void PassState::LogRulesFiredAndFailed(std::ostream & strmOut, GrSlotStream * psstrmIn)
-{
-
- strmOut << "PASS " << m_ipass << "\n\n" << "Rules matched: ";
- if (m_crulrec == 0)
- strmOut << "none";
- strmOut << "\n";
-
- for (int irulrec = 0; irulrec < m_crulrec; irulrec++)
- {
- if (m_rgrulrec[irulrec].m_fFired)
- strmOut << " * ";
- else
- strmOut << " ";
-
- strmOut << m_rgrulrec[irulrec].m_islot << ". ";
-
- if (m_rgrulrec[irulrec].m_irul == PassState::kHitMaxRuleLoop)
- strmOut << "hit MaxRuleLoop\n";
- else if (m_rgrulrec[irulrec].m_irul == PassState::kHitMaxBackup)
- strmOut << "hit MaxBackup\n";
- else
- {
- strmOut << "rule " << m_ipass << "." << m_rgrulrec[irulrec].m_irul;
-
- if (m_rgrulrec[irulrec].m_fFired)
- strmOut << " FIRED\n";
- else
- strmOut << " failed\n";
- }
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the marks on top of the slot table indicating insertions and deletions.
-----------------------------------------------------------------------------------------------*/
-void GrPass::LogInsertionsAndDeletions(std::ostream & strmOut, GrSlotStream * psstrmOut)
-{
- m_pzpst->LogInsertionsAndDeletions(strmOut, psstrmOut);
-}
-
-void PassState::LogInsertionsAndDeletions(std::ostream & strmOut, GrSlotStream * psstrmOut)
-{
- int cslotDel = m_rgcslotDeletions[0];
- bool fIns;
- if (cslotDel > 1)
- strmOut << "\n DEL-" << cslotDel;
- else if (cslotDel == 1)
- strmOut << "\n DEL ";
- else
- strmOut << "\n ";
-
- for (int islot = 0; islot < psstrmOut->WritePos(); islot++)
- {
- cslotDel = (islot + 1 >= MAX_SLOTS) ? 0 : m_rgcslotDeletions[islot + 1];
- fIns = (islot >= MAX_SLOTS) ? 0 : m_rgfInsertion[islot];
-
- if (fIns)
- {
- strmOut << "INS";
- if (cslotDel > 0)
- {
- if (cslotDel > 1)
- strmOut << "/D-" << cslotDel;
- else
- strmOut << "/DEL";
- }
- else
- strmOut << " ";
-
- }
- else if (cslotDel > 0)
- {
- if (cslotDel >= 10)
- strmOut << "DEL-" << cslotDel << " ";
- else if (cslotDel > 1)
- strmOut << " DEL-" << cslotDel << " ";
- else
- strmOut << " DEL ";
- }
- else
- strmOut << " ";
- }
-
- strmOut << "\n";
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out a line for each slot attribute that changed during the pass.
-
- @param fJustWidths - a special pass that writes out just the effects of the justification
- routines, ie, the values of justify.width
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogAttributes(std::ostream & strmOut, int ipass,
- bool fJustWidths)
-{
- // Figure out which slot attributes were modified for some slot during the pass.
- bool * prgfMods = new bool[kslatMax + NumUserDefn() - 1];
-
- bool fPreJust = (!fJustWidths && ipass == m_ipassJust1 - 1 && ShouldLogJustification());
- bool fPostJust = ((fJustWidths || ipass == m_ipassJust1) && ShouldLogJustification());
-
- int ccomp; // max number of components per slot
- int cassoc; // max number of associations per slot
- SlotAttrsModified(ipass, prgfMods, fPreJust, &ccomp, &cassoc);
-
- if (fPreJust)
- {
- // prgfMods[kslatJStretch] = true;
- // prgfMods[kslatJShrink] = true;
- // prgfMods[kslatJStep] = true;
- // prgfMods[kslatWeight] = true;
- prgfMods[kslatJWidth] = false; // output j.width in its own line (we call this
- // method with fJustWidths == true)
- }
- else if (fPostJust)
- prgfMods[kslatJWidth] = true;
-
- GrPass * ppass = Pass(ipass);
- GrPass * ppassNext = (ipass < m_cpass - 1) ? Pass(ipass + 1) : NULL;
- GrSlotStream * psstrm = OutputStream(ipass);
-
- if (fJustWidths)
- {}
- else if (dynamic_cast<GrBidiPass *>(ppass))
- {
- // Special stuff for Bidi pass:
- // Log value of directionality attribute.
- strmOut << "directionality ";
- int islot;
- for (islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- LogDirCodeInTable(strmOut, pslot->DirProcessed());
- }
- strmOut << "\n";
-
- // Log final direction level for bidi pass.
- strmOut << "dir level ";
- for (islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- LogInTable(strmOut, pslot->DirLevel());
- }
- strmOut << "\n";
- }
- else if (ppassNext && dynamic_cast<GrBidiPass *>(ppassNext))
- {
- // Next pass is Bidi: log input values of directionality attribute that are input for it.
- strmOut << "directionality ";
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- LogDirCodeInTable(strmOut, pslot->Directionality());
- }
- strmOut << "\n";
- }
-
- for (int slat = 0; slat < kslatMax + NumUserDefn() - 1; slat++)
- {
- int cIndexLim = 1;
- if (slat == kslatCompRef)
- cIndexLim = ccomp;
- else if (slat == kslatUserDefn)
- cIndexLim = 1; // kMaxUserDefinedSlotAttributes;
-
- if (fJustWidths && slat != kslatJWidth)
- continue;
-
- bool fValidAttr = true;
- for (int iIndex = 0; iIndex < cIndexLim; iIndex++)
- {
- if (prgfMods[slat])
- {
- switch(slat)
- {
- case kslatAdvX: strmOut << "advance.x "; break;
- case kslatAdvY: strmOut << "advance.y "; break;
- case kslatAttTo: strmOut << "att.to "; break;
- case kslatAttAtX: strmOut << "att.at.x "; break;
- case kslatAttAtY: strmOut << "att.at.y "; break;
- case kslatAttAtGpt: strmOut << "att.at.gpt "; break;
- case kslatAttAtXoff: strmOut << "att.at.xoff "; break;
- case kslatAttAtYoff: strmOut << "att.at.yoff "; break;
- case kslatAttWithX: strmOut << "att.with.x "; break;
- case kslatAttWithY: strmOut << "att.with.y "; break;
- case kslatAttWithGpt: strmOut << "att.with.gpt "; break;
- case kslatAttWithXoff: strmOut << "att.with.xoff "; break;
- case kslatAttWithYoff: strmOut << "att.with.yoff "; break;
- case kslatAttLevel: strmOut << "att.level "; break;
- case kslatBreak: strmOut << "breakweight "; break;
- case kslatCompRef: strmOut << "component " << iIndex + 1 // 1-based
- << " "; break;
- case kslatDir: strmOut << "dir "; break;
- case kslatInsert: strmOut << "insert "; break;
- case kslatMeasureSol: strmOut << "measure.sol "; break;
- case kslatMeasureEol: strmOut << "measure.eol "; break;
- case kslatJStretch: strmOut << "j.stretch "; break;
- case kslatJShrink: strmOut << "j.shrink "; break;
- case kslatJStep: strmOut << "j.step "; break;
- case kslatJWeight: strmOut << "j.weight "; break;
- case kslatJWidth: strmOut << "j.width "; break;
- case kslatPosX:
- case kslatPosY:
- Assert(false);
- break;
- case kslatShiftX: strmOut << "shift.x "; break;
- case kslatShiftY: strmOut << "shift.y "; break;
- default:
- if (kslatUserDefn <= slat &&
- slat < kslatUserDefn + NumUserDefn())
- {
- strmOut << "user" << (slat - kslatUserDefn + 1) // 1-based
- << ((iIndex >= 9) ? " " : " ");
- }
- else
- {
- // Invalid attribute:
- Warn("bad slot attribute");
- fValidAttr = false;
- break;
- }
- }
-
- if (!fValidAttr)
- break; // out of iIndex loop
-
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- pslot->LogSlotAttributeValue(this, strmOut, ipass, slat, iIndex,
- fPreJust, fPostJust);
- }
-
- strmOut << "\n";
- }
- }
- }
-
- if (fJustWidths)
- goto LDone;
-
- for (int iassoc = 0; iassoc < cassoc; iassoc++)
- {
- // Log associations. Put them on one line it that will work; otherwise use several.
- bool fBoth = (cassoc <= 2);
- bool fAfter = (iassoc == (cassoc - 1));
- if (fBoth)
- strmOut << "assocs ";
- else if (iassoc == 0)
- strmOut << "assocs-before ";
- else if (fAfter)
- strmOut << " -after ";
- else
- strmOut << " -other ";
-
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- pslot->LogAssociation(this, strmOut, ipass, iassoc, fBoth, fAfter);
- }
-
- strmOut << "\n";
-
- if (fBoth)
- break;
- }
-
- if (cassoc == 0 && dynamic_cast<GrBidiPass *>(ppass))
- {
- strmOut << "assocs ";
-
- // Log associations for all slots moved during the Bidi pass.
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->m_islotTmpIn != pslot->m_islotTmpOut)
- LogInTable(strmOut, pslot->m_islotTmpIn);
- else
- strmOut << " ";
- }
-
- strmOut << "\n";
- }
-
-LDone:
-
- delete[] prgfMods;
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the final positions.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogFinalPositions(std::ostream & strmOut)
-{
- GrSlotStream * psstrm = OutputStream(m_cpass - 1);
-
- strmOut << "x position ";
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsLineBreak(LBGlyphID()))
- {
- strmOut << " ";
- continue;
- }
- LogInTable(strmOut, pslot->XPosition());
- }
- strmOut << "\n";
-
- strmOut << "y position ";
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsLineBreak(LBGlyphID()))
- {
- strmOut << " ";
- continue;
- }
- LogInTable(strmOut, pslot->YPosition());
- }
- strmOut << "\n";
-}
-#endif // TRACING
-
-/*----------------------------------------------------------------------------------------------
- Write out the final underlying-to-surface associations.
-----------------------------------------------------------------------------------------------*/
-void Segment::LogUnderlyingToSurface(GrTableManager * ptman, std::ostream & strmOut,
- GrCharStream * pchstrm)
-{
-#ifdef TRACING
- strmOut << "\n\nUNDERLYING TO SURFACE MAPPINGS\n\n";
-
- size_t cassocs = 0;
- int fLigs = false;
- int ichw;
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (m_prgpvisloutAssocs[ichw])
- cassocs = max(cassocs, m_prgpvisloutAssocs[ichw]->size());
- if (m_prgisloutLigature[ichw] != kNegInfinity)
- fLigs = true;
- }
-
-// ptman->LogSlotHeader(strmOut, m_ichwAssocsLim, SP_PER_SLOT, LEADING_SP, m_ichwAssocsMin);
- ptman->LogUnderlyingHeader(strmOut, pchstrm->Min(), (pchstrm->Min() + m_ichwAssocsLim),
- -m_ichwAssocsMin, NULL);
-
- int rgnChars[MAX_SLOTS];
- bool rgfNewRun[MAX_SLOTS];
- std::fill_n(rgfNewRun, MAX_SLOTS, false);
- GrFeatureValues rgfval[MAX_SLOTS];
- int cchwMaxRawChars;
-
- int cchw = pchstrm->GetLogData(ptman, rgnChars, rgfNewRun, rgfval,
- -m_ichwAssocsMin, &cchwMaxRawChars);
- cchw = min(cchw, MAX_SLOTS);
-
- utf16 rgchwChars2[MAX_SLOTS];
- utf16 rgchwChars3[MAX_SLOTS];
- utf16 rgchwChars4[MAX_SLOTS];
- utf16 rgchwChars5[MAX_SLOTS];
- utf16 rgchwChars6[MAX_SLOTS];
- int rgcchwRaw[MAX_SLOTS];
- if (cchwMaxRawChars > 1)
- {
- cchwMaxRawChars = min(cchwMaxRawChars, 6);
- pchstrm->GetLogDataRaw(ptman, cchw, -m_ichwAssocsMin, cchwMaxRawChars,
- rgnChars, rgchwChars2, rgchwChars3, rgchwChars4, rgchwChars5, rgchwChars6,
- rgcchwRaw);
- }
- else
- {
- for (ichw = 0 ; ichw <(m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- rgcchwRaw[ichw] = 1;
- rgchwChars2[ichw] = 0;
- rgchwChars3[ichw] = 0;
- rgchwChars4[ichw] = 0;
- rgchwChars5[ichw] = 0;
- rgchwChars6[ichw] = 0;
- }
- }
-
- // Text
- strmOut << "Text: "; // 15 spaces
- int inUtf32 = 0;
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- utf16 chw, chwNext;
- switch (rgcchwRaw[ichw])
- {
- default:
- case 1: chw = utf16(rgnChars[inUtf32]); chwNext = rgchwChars2[inUtf32]; break;
- case 2: chw = rgchwChars2[inUtf32]; chwNext = rgchwChars3[inUtf32]; break;
- case 3: chw = rgchwChars3[inUtf32]; chwNext = rgchwChars4[inUtf32]; break;
- case 4: chw = rgchwChars4[inUtf32]; chwNext = rgchwChars5[inUtf32]; break;
- case 5: chw = rgchwChars5[inUtf32]; chwNext = rgchwChars6[inUtf32]; break;
- case 6: chw = rgchwChars6[inUtf32]; chwNext = 0; break;
- }
- if (rgcchwRaw[ichw] == 1 && chwNext == 0 && chw < 0x0100) // ANSI
- strmOut << (char)chw << " "; // 6 spaces
- else
- strmOut << " "; // 7 spaces
- if (chwNext == 0)
- inUtf32++;
- }
- strmOut << "\n";
-
- // Unicode
- strmOut << "Unicode: ";
- inUtf32 = 0;
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- utf16 chw, chwNext;
- switch (rgcchwRaw[ichw])
- {
- default:
- case 1: chw = utf16(rgnChars[inUtf32]); chwNext = rgchwChars2[inUtf32]; break;
- case 2: chw = rgchwChars2[inUtf32]; chwNext = rgchwChars3[inUtf32]; break;
- case 3: chw = rgchwChars3[inUtf32]; chwNext = rgchwChars4[inUtf32]; break;
- case 4: chw = rgchwChars4[inUtf32]; chwNext = rgchwChars5[inUtf32]; break;
- case 5: chw = rgchwChars5[inUtf32]; chwNext = rgchwChars6[inUtf32]; break;
- case 6: chw = rgchwChars6[inUtf32]; chwNext = 0; break;
- }
- ptman->LogHexInTable(strmOut, chw, chwNext != 0);
- if (chwNext == 0)
- inUtf32++;
- }
- strmOut << "\n";
-
- strmOut << "before ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutBefore[ichw] == kNegInfinity)
- strmOut << "<-- ";
- else if (m_prgisloutBefore[ichw] == kPosInfinity)
- strmOut << "--> ";
- else
- ptman->LogInTable(strmOut, m_prgisloutBefore[ichw]);
- }
- strmOut <<"\n";
-
- for (int ix = 1; ix < signed(cassocs) - 1; ix++) //(cassocs > 2)
- {
- if (ix == 1)
- strmOut << "other ";
- else
- strmOut << " ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- std::vector<int> * pvislout = m_prgpvisloutAssocs[ichw];
- if (pvislout == NULL)
- strmOut << " ";
- else if (signed(pvislout->size()) <= ix)
- strmOut << " ";
- else if ((*pvislout)[ix] != m_prgisloutAfter[ichw])
- ptman->LogInTable(strmOut, (*pvislout)[ix]);
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- strmOut << "after ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutAfter[ichw] == kNegInfinity)
- strmOut << "<-- ";
- else if (m_prgisloutAfter[ichw] == kPosInfinity)
- strmOut << "--> ";
- else
- ptman->LogInTable(strmOut, m_prgisloutAfter[ichw]);
- }
- strmOut <<"\n";
-
- if (fLigs)
- {
- strmOut << "ligature ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutLigature[ichw] != kNegInfinity)
- ptman->LogInTable(strmOut, m_prgisloutLigature[ichw]);
- else
- strmOut << " ";
- }
- strmOut << "\n";
-
- strmOut << "component ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutLigature[ichw] != kNegInfinity)
- ptman->LogInTable(strmOut, m_prgiComponent[ichw] + 1); // 1-based
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- strmOut << "\n";
-#endif
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the final surface-to-underlying associations.
-----------------------------------------------------------------------------------------------*/
-void Segment::LogSurfaceToUnderlying(GrTableManager * ptman, std::ostream & strmOut)
-{
-#ifdef TRACING
- strmOut << "\nSURFACE TO UNDERLYING MAPPINGS\n\n";
-
- ptman->LogSlotHeader(strmOut, m_cslout, SP_PER_SLOT, LEADING_SP);
-
- int ccomp = 0;
-
- strmOut << "Glyph IDs: ";
- int islout;
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << "# ";
- }
- else
- {
- ptman->LogHexInTable(strmOut, psloutTmp->GlyphID());
- ccomp = max(ccomp, psloutTmp->NumberOfComponents());
- }
- }
- strmOut << "\n";
-
- bool fAnyPseudos = false;
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->GlyphID() != psloutTmp->ActualGlyphForOutput(ptman))
- {
- fAnyPseudos = true;
- break;
- }
- }
- if (fAnyPseudos)
- {
- strmOut << "Actual glyphs: ";
- for (int islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->GlyphID() != psloutTmp->ActualGlyphForOutput(ptman))
- ptman->LogHexInTable(strmOut, psloutTmp->ActualGlyphForOutput(ptman));
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- strmOut << "before ";
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << " ";
- }
- else
- ptman->LogInTable(strmOut, psloutTmp->BeforeAssoc());
- }
- strmOut << "\n";
-
- strmOut << "after ";
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << " ";
- }
- else
- ptman->LogInTable(strmOut, psloutTmp->AfterAssoc());
- }
- strmOut << "\n";
-
- for (int icomp = 0; icomp < ccomp; icomp++)
- {
- strmOut << "component " << icomp + 1 // 1=based
- << " ";
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << " ";
- }
- else if (icomp < psloutTmp->NumberOfComponents())
- ptman->LogInTable(strmOut, psloutTmp->UnderlyingComponent(icomp));
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-#endif
-}
-
-#ifdef TRACING
-/*----------------------------------------------------------------------------------------------
- Write out the header lines for the underlying data.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogUnderlyingHeader(std::ostream & strmOut, int iMin,
- int iLim, int cBackup, int * prgichr)
-{
- strmOut << "string ";
- int i, iLabel;
- int * pichr = prgichr;
- for (i = iMin - cBackup, iLabel = i; i < iLim; i++, iLabel++, pichr++)
- {
- while (prgichr && *pichr > 1)
- {
- // continuation of upper-plane char
- iLabel++;
- pichr++;
- }
- LogInTable(strmOut, iLabel);
- }
- strmOut << "\n";
-
- strmOut << "segment ";
- pichr = prgichr;
- for (i = 0 - cBackup, iLabel = i; i < (iLim - iMin); i++, iLabel++, pichr++)
- {
- while (prgichr && *pichr > 1)
- {
- // continuation of upper-plane char
- iLabel++;
- pichr++;
- }
- LogInTable(strmOut, iLabel);
- }
- strmOut << "\n\n";
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the header lines for the slot contents.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogSlotHeader(std::ostream & strmOut, int islotLim,
- int cspPerSlot, int cspLeading, int islotMin)
-{
- islotLim = min(islotLim, MAX_SLOTS);
-
- int isp, islot;
-
- for (isp = 0; isp < cspLeading; isp++)
- strmOut << " ";
-
- for (islot = islotMin; islot < islotLim; islot++)
- LogInTable(strmOut, islot);
- strmOut << "\n\n";
-
-/****
- if (cslot >= 100)
- {
- for (isp = 0; isp < cspLeading; isp++)
- strmOut << " ";
-
- for (islot = 0; islot < 100; islot++)
- {
- for (isp = 0; isp < cspPerSlot; isp++)
- strmOut << " ";
- }
-
- for (islot = 100; islot < cslot; islot++)
- {
- strmOut << "1";
- for (isp = 1; isp < cspPerSlot; isp++)
- strmOut << " ";
- }
- }
-
- if (cslot > 10)
- {
- for (isp = 0; isp < cspLeading; isp++)
- strmOut << " ";
-
- for (islot = 0; islot < 10; islot++)
- {
- for (isp = 0; isp < cspPerSlot; isp++)
- strmOut << " ";
- }
-
- for (islot = 10; islot < cslot; islot++)
- {
- if (true) // (islot % 10 == 0)
- {
- if (islot >= 100)
- strmOut << ((islot - 100) / 10);
- else
- strmOut << (islot / 10);
- }
- else
- strmOut << " ";
-
- for (isp = 1; isp < cspPerSlot; isp++)
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- for (isp = 0; isp < cspLeading; isp++)
- strmOut << " ";
-
- for (islot = 0; islot < cslot; islot++)
- {
- strmOut << (islot % 10);
- for (isp = 1; isp < cspPerSlot; isp++)
- strmOut << " ";
-
- }
- strmOut << "\n";
-****/
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the glyph numbers for the given stream.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogSlotGlyphs(std::ostream & strmOut, GrSlotStream * psstrm)
-{
- strmOut << "Glyph IDs: ";
- int islot;
- for (islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslotTmp = psstrm->SlotAt(islot);
- if (pslotTmp->IsLineBreak(LBGlyphID()))
- strmOut << "# ";
- else
- LogHexInTable(strmOut, pslotTmp->GlyphID());
- }
- strmOut << "\n";
-}
-
-/*----------------------------------------------------------------------------------------------
- Return flags indicating which attributes were modified for some slot during the pass
- and therefore need a line in the log file.
-
- The 'pfMods' array has one flag per slot attribute; the final group are the user-
- definable attributes. 'pccomp' returns the maximum number of ligature components
- in this pass. Associations are assumed to have changed if anything else for the slot did.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::SlotAttrsModified(int ipass, bool * rgfMods, bool fPreJust,
- int * pccomp, int * pcassoc)
-{
- // Zero the flags
- std::fill_n(rgfMods, kslatMax + NumUserDefn() - 1, false);
- *pccomp = 0;
- *pcassoc = 0;
-
- //GrSlotStream * psstrmIn = InputStream(ipass);
- GrSlotStream * psstrmOut = OutputStream(ipass);
-
- for (int islot = 0; islot < psstrmOut->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrmOut->SlotAt(islot);
- Assert(pslot->PassModified() <= ipass);
- if (pslot->PassModified() < ipass && !fPreJust)
- continue; // not modified during this pass
-
- pslot->SlotAttrsModified(rgfMods, fPreJust, pccomp, pcassoc);
- }
-}
-
-void GrSlotState::SlotAttrsModified(bool * rgfMods, bool fPreJust, int * pccomp, int * pcassoc)
-{
- // To handle reprocessing, in which case there may be a chain of slots modified
- // in the same pass:
- GrSlotState * pslotPrev = m_pslotPrevState;
- while (pslotPrev && pslotPrev->PassModified() == PassModified())
- pslotPrev = pslotPrev->m_pslotPrevState;
-
- if (!pslotPrev)
- {
- // Inserted slot?
- if (m_fAdvXSet)
- rgfMods[kslatAdvX] = true;
- if (m_fAdvYSet)
- rgfMods[kslatAdvY] = true;
-
- if (m_srAttachTo != 0)
- rgfMods[kslatAttTo] = true;
-
- if (m_mAttachAtX != kNotYetSet || m_mAttachAtY != 0)
- { // always do these in pairs
- rgfMods[kslatAttAtX] = true;
- rgfMods[kslatAttAtY] = true;
- }
- if (m_nAttachAtGpoint != kNotYetSet)
- rgfMods[kslatAttAtGpt] = true;
- if (m_mAttachAtXOffset != 0 || m_mAttachAtYOffset != 0)
- { // always do these in pairs
- rgfMods[kslatAttAtXoff] = true;
- rgfMods[kslatAttAtYoff] = true;
- }
-
- if (m_mAttachWithX != kNotYetSet || m_mAttachWithY != 0)
- { // always do these in pairs
- rgfMods[kslatAttWithX] = true;
- rgfMods[kslatAttWithY] = true;
- }
- if (m_nAttachWithGpoint != kNotYetSet)
- rgfMods[kslatAttWithGpt] = true;
- if (m_mAttachWithXOffset != 0 || m_mAttachWithYOffset != 0)
- { // always do these in pairs
- rgfMods[kslatAttWithXoff] = true;
- rgfMods[kslatAttWithYoff] = true;
- }
-
- if (m_nAttachLevel != 0)
- rgfMods[kslatAttLevel] = true;
-
- if (m_lb != kNotYetSet8)
- rgfMods[kslatBreak] = true;
- if (m_dirc != kNotYetSet8)
- rgfMods[kslatDir] = true;
- if (m_fInsertBefore != true)
- rgfMods[kslatInsert] = true;
-
- if (m_mMeasureSol != kNotYetSet && m_mMeasureSol != 0)
- rgfMods[kslatMeasureSol] = true;
- if (m_mMeasureEol != kNotYetSet && m_mMeasureEol != 0)
- rgfMods[kslatMeasureEol] = true;
-
- if (m_mJStretch0 != kNotYetSet && m_mJStretch0 != 0)
- rgfMods[kslatJStretch] = true;
- if (m_mJShrink0 != kNotYetSet && m_mJShrink0 != 0)
- rgfMods[kslatJShrink] = true;
- if (m_mJStep0 != kNotYetSet && m_mJStep0 != 0)
- rgfMods[kslatJStep] = true;
- if (m_nJWeight0 != byte(kNotYetSet) &&
- m_nJWeight0 != 0 && m_nJWeight0 != 1)
- rgfMods[kslatJWeight] = true;
- if (m_mJWidth0 != kNotYetSet && m_mJWidth0 != 0)
- rgfMods[kslatJWidth] = true;
-
- if (m_mShiftX != 0)
- rgfMods[kslatShiftX] = true;
- if (m_mShiftY != 0)
- rgfMods[kslatShiftY] = true;
-
- int i;
- for (i = 0; i < m_cnCompPerLig; i++)
- {
- if (CompRef(i) != NULL)
- rgfMods[kslatCompRef] = true;
- if (CompRef(i))
- *pccomp = max(*pccomp, i + 1); // max number of ligatures in this pass
- }
-
- for (i = 0; i < m_cnUserDefn; i++)
- {
- if (UserDefn(i) != 0)
- rgfMods[kslatUserDefn + i] = true;
- }
- }
- else
- {
- if (m_fAdvXSet && m_mAdvanceX != pslotPrev->m_mAdvanceX)
- rgfMods[kslatAdvX] = true;
- if (m_fAdvYSet && m_mAdvanceY != pslotPrev->m_mAdvanceY)
- rgfMods[kslatAdvY] = true;
-
- if (m_srAttachTo != pslotPrev->m_srAttachTo)
- rgfMods[kslatAttTo] = true;
-
- if (m_mAttachAtX != pslotPrev->m_mAttachAtX || m_mAttachAtY != pslotPrev->m_mAttachAtY)
- {
- rgfMods[kslatAttAtX] = true;
- rgfMods[kslatAttAtY] = true;
- }
- if (m_nAttachAtGpoint != pslotPrev->m_nAttachAtGpoint)
- rgfMods[kslatAttAtGpt] = true;
- if (m_mAttachAtXOffset != pslotPrev->m_mAttachAtXOffset ||
- m_mAttachAtYOffset != pslotPrev->m_mAttachAtYOffset)
- {
- rgfMods[kslatAttAtXoff] = true;
- rgfMods[kslatAttAtYoff] = true;
- }
-
- if (m_mAttachWithX != pslotPrev->m_mAttachWithX ||
- m_mAttachWithY != pslotPrev->m_mAttachWithY)
- {
- rgfMods[kslatAttWithX] = true;
- rgfMods[kslatAttWithY] = true;
- }
- if (m_nAttachWithGpoint != pslotPrev->m_nAttachWithGpoint)
- rgfMods[kslatAttWithGpt] = true;
- if (m_mAttachWithXOffset != pslotPrev->m_mAttachWithXOffset ||
- m_mAttachWithYOffset != pslotPrev->m_mAttachWithYOffset)
- {
- rgfMods[kslatAttWithXoff] = true;
- rgfMods[kslatAttWithYoff] = true;
- }
-
- if (m_nAttachLevel != pslotPrev->m_nAttachLevel)
- rgfMods[kslatAttLevel] = true;
-
- if (m_lb != pslotPrev->m_lb)
- rgfMods[kslatBreak] = true;
- if (m_dirc != pslotPrev->m_dirc)
- rgfMods[kslatDir] = true;
- if (m_fInsertBefore != pslotPrev->m_fInsertBefore)
- rgfMods[kslatInsert] = true;
-
- if (m_mMeasureSol != pslotPrev->m_mMeasureSol)
- rgfMods[kslatMeasureSol] = true;
- if (m_mMeasureEol != pslotPrev->m_mMeasureEol)
- rgfMods[kslatMeasureEol] = true;
-
- if (m_mJStretch0 != pslotPrev->m_mJStretch0 || (fPreJust && m_mJStretch0 != 0))
- rgfMods[kslatJStretch] = true;
- if (m_mJShrink0 != pslotPrev->m_mJShrink0 || (fPreJust && m_mJShrink0 != 0))
- rgfMods[kslatJShrink] = true;
- if (m_mJStep0 != pslotPrev->m_mJStep0 || (fPreJust && m_mJStep0 != 0))
- rgfMods[kslatJStep] = true;
- if (m_nJWeight0 != pslotPrev->m_nJWeight0 || (fPreJust && m_nJWeight0 != 0))
- rgfMods[kslatJWeight] = true;
- if (m_mJWidth0 != pslotPrev->m_mJWidth0)
- rgfMods[kslatJWidth] = true;
-
- if (m_mShiftX != pslotPrev->m_mShiftX)
- rgfMods[kslatShiftX] = true;
- if (m_mShiftY != pslotPrev->m_mShiftY)
- rgfMods[kslatShiftY] = true;
-
- int i;
- for (i = 0; i < m_cnCompPerLig; i++)
- {
- if (CompRef(i) != pslotPrev->CompRef(i))
- rgfMods[kslatCompRef] = true;
- if (CompRef(i))
- *pccomp = max(*pccomp, i + 1); // max number of ligatures in this pass
- }
-
- for (i = 0; i < m_cnUserDefn; i++)
- {
- if (UserDefn(i) != pslotPrev->UserDefn(i))
- rgfMods[kslatUserDefn + i] = true;
- }
- }
-
- *pcassoc = max(*pcassoc, AssocsSize());
-}
-
-/*----------------------------------------------------------------------------------------------
- Log the value of the slot attribute for the given slot, if it changed.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::LogSlotAttributeValue(GrTableManager * ptman,
- std::ostream & strmOut, int ipass, int slat, int iIndex,
- bool fPreJust, bool fPostJust)
-{
- if (m_ipassModified != ipass && !fPreJust && !fPostJust)
- {
- strmOut << " ";
- return;
- }
-
- // To handle reprocessing, in which case there may be a chain of slots modified
- // in the same pass:
- GrSlotState * pslotPrev = m_pslotPrevState;
- while (pslotPrev && pslotPrev->PassModified() == PassModified())
- pslotPrev = pslotPrev->m_pslotPrevState;
-
- // General-purpose variables for em-unit attributes:
- int mThis = 0;
- int mPrev = 0;
- switch (slat)
- {
- case kslatShiftX:
- mThis = m_mShiftX;
- mPrev = (pslotPrev) ? pslotPrev->m_mShiftX : 0;
- break;
- case kslatShiftY:
- mThis = m_mShiftY;
- mPrev = (pslotPrev) ? pslotPrev->m_mShiftY : 0;
- break;
- case kslatMeasureSol:
- mThis = m_mMeasureSol;
- mPrev = (pslotPrev) ? pslotPrev->m_mMeasureSol : 0;
- break;
- case kslatMeasureEol:
- mThis = m_mMeasureEol;
- mPrev = (pslotPrev) ? pslotPrev->m_mMeasureEol : 0;
- break;
- case kslatJStretch:
- mThis = m_mJStretch0;
- mPrev = (pslotPrev) ? pslotPrev->m_mJStretch0 : 0;
- mPrev = (fPreJust && mThis > 0) ? -1 : mPrev; // log it even if it didn't change
- break;
- case kslatJShrink:
- mThis = m_mJShrink0;
- mPrev = (pslotPrev) ? pslotPrev->m_mJShrink0 : 0;
- mPrev = (fPreJust && mThis > 0) ? -1 : mPrev; // log it even if it didn't change
- break;
- case kslatJStep:
- mThis = m_mJStep0;
- mPrev = (pslotPrev) ? pslotPrev->m_mJStep0 : 0;
- mPrev = (fPreJust && mThis > 1) ? -1 : mPrev; // log it even if it didn't change
- break;
- case kslatJWeight:
- mThis = m_nJWeight0;
- mPrev = (pslotPrev) ? pslotPrev->m_nJWeight0 : 0;
- mPrev = (fPreJust && mThis > 1) ? -1 : mPrev; // log it even if it didn't change
- break;
- case kslatJWidth:
- mThis = m_mJWidth0;
- mPrev = (pslotPrev) ? pslotPrev->m_mJWidth0 : 0;
- mPrev = (fPostJust && mThis > 0) ? -1 : mPrev; // log it even if it didn't change
- break;
- default:
- // don't use these variables
- break;
- }
-
- switch (slat)
- {
- case kslatAdvX:
- if (m_fAdvXSet && (!pslotPrev || m_mAdvanceX != pslotPrev->m_mAdvanceX))
- {
- ptman->LogInTable(strmOut, m_mAdvanceX);
- return;
- }
- break;
- case kslatAdvY:
- if (m_fAdvYSet && (!pslotPrev || m_mAdvanceY != pslotPrev->m_mAdvanceY))
- {
- ptman->LogInTable(strmOut, m_mAdvanceY);
- return;
- }
- break;
-
- case kslatAttTo:
- if (m_srAttachTo != (pslotPrev ? pslotPrev->m_srAttachTo : 0))
- {
- ptman->LogInTable(strmOut, m_srAttachTo);
- return;
- }
- break;
-
- case kslatAttAtX: // always do these in pairs
- case kslatAttAtY:
- if (m_mAttachAtX != (pslotPrev ? pslotPrev->m_mAttachAtX : kNotYetSet) ||
- m_mAttachAtY != (pslotPrev ? pslotPrev->m_mAttachAtY : 0))
- {
- ptman->LogInTable(strmOut,
- ((slat == kslatAttAtX) ? m_mAttachAtX : m_mAttachAtY));
- return;
- }
- break;
- case kslatAttAtGpt:
- if (m_nAttachAtGpoint != (pslotPrev ? pslotPrev->m_nAttachAtGpoint : kNotYetSet))
- {
- ptman->LogInTable(strmOut,
- ((m_nAttachAtGpoint == kGpointZero) ? 0 : m_nAttachAtGpoint));
- return;
- }
- break;
- case kslatAttAtXoff: // always do these in pairs
- case kslatAttAtYoff:
- if (m_mAttachAtXOffset != (pslotPrev ? pslotPrev->m_mAttachAtXOffset : 0) ||
- m_mAttachAtYOffset != (pslotPrev ? pslotPrev->m_mAttachAtYOffset : 0))
- {
- ptman->LogInTable(strmOut,
- ((slat == kslatAttAtXoff) ? m_mAttachAtXOffset : m_mAttachAtYOffset));
- return;
- }
- break;
-
- case kslatAttWithX: // always do these in pairs
- case kslatAttWithY:
- if (m_mAttachWithX != (pslotPrev ? pslotPrev->m_mAttachWithX : kNotYetSet) ||
- m_mAttachWithY != (pslotPrev ? pslotPrev->m_mAttachWithY : 0))
- {
- ptman->LogInTable(strmOut,
- ((slat == kslatAttWithX) ? m_mAttachWithX : m_mAttachWithY));
- return;
- }
- break;
- case kslatAttWithGpt:
- if (m_nAttachWithGpoint != (pslotPrev ? pslotPrev->m_nAttachWithGpoint : kNotYetSet))
- {
- ptman->LogInTable(strmOut,
- ((m_nAttachWithGpoint == kGpointZero) ? 0 : m_nAttachWithGpoint));
- return;
- }
- break;
- case kslatAttWithXoff: // always do these in pairs
- case kslatAttWithYoff:
- if (m_mAttachWithXOffset != (pslotPrev ? pslotPrev->m_mAttachWithXOffset : 0) ||
- m_mAttachWithYOffset != (pslotPrev ? pslotPrev->m_mAttachWithYOffset : 0))
- {
- ptman->LogInTable(strmOut,
- ((slat == kslatAttWithXoff) ? m_mAttachWithXOffset : m_mAttachWithYOffset));
- return;
- }
- break;
-
- case kslatAttLevel:
- if (m_nAttachLevel != (pslotPrev ? pslotPrev->m_nAttachLevel : 0))
- {
- ptman->LogInTable(strmOut, m_nAttachLevel);
- return;
- }
- break;
-
- case kslatBreak:
- if (m_lb != (pslotPrev ? pslotPrev->m_lb : kNotYetSet8))
- {
- ptman->LogBreakWeightInTable(strmOut, m_lb);
- return;
- }
- break;
- case kslatDir:
- if (m_dirc != (pslotPrev ? pslotPrev->m_dirc : kNotYetSet8))
- {
- ptman->LogDirCodeInTable(strmOut, m_dirc);
- return;
- }
- break;
- case kslatInsert:
- if (m_fInsertBefore != (pslotPrev ? pslotPrev->m_fInsertBefore : true))
- {
- if (m_fInsertBefore)
- strmOut << "true ";
- else
- strmOut << "false ";
- return;
- }
- break;
-
- case kslatJWeight:
- if (m_mJStretch0 == 0 && m_mJShrink0 == 0)
- mPrev = mThis; // don't log; weight is irrelevant
- // fall through
- case kslatShiftX:
- case kslatShiftY:
- case kslatMeasureSol:
- case kslatMeasureEol:
- case kslatJStretch:
- case kslatJShrink:
- case kslatJStep:
- case kslatJWidth:
- if (mThis != mPrev)
- {
- ptman->LogInTable(strmOut, mThis);
- return;
- }
- break;
-
- case kslatCompRef:
- if (CompRef(iIndex) != (pslotPrev ? pslotPrev->CompRef(iIndex) : 0))
- {
- GrSlotState * pslotComp = reinterpret_cast<GrSlotState *>(CompRef(iIndex));
- ptman->LogInTable(strmOut, pslotComp->m_islotTmpIn);
- return;
- }
- break;
-
- default:
- if (kslatUserDefn <= slat && slat <= kslatUserDefn + m_cnUserDefn)
- {
- int iTmp = slat - kslatUserDefn;
- if (UserDefn(iTmp) != (pslotPrev ? pslotPrev->UserDefn(iTmp) : 0))
- {
- ptman->LogInTable(strmOut, UserDefn(iTmp));
- return;
- }
- }
- else
- gAssert(false);
- }
-
- strmOut << " ";
-}
-
-/*----------------------------------------------------------------------------------------------
- Log the value of the association, if the slot changed.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::LogAssociation(GrTableManager * ptman,
- std::ostream & strmOut, int ipass, int iassoc, bool fBoth, bool fAfter)
-{
- if (m_ipassModified != ipass)
- {
- strmOut << " ";
- return;
- }
-
- if (fBoth)
- {
- GrSlotState * pslotBefore = AssocSlot(0);
- GrSlotState * pslotAfter = AssocSlot(m_vpslotAssoc.size() - 1);
-
- int nBefore, nAfter;
-
- int csp = 4;
- if (pslotBefore)
- {
- nBefore = pslotBefore->m_islotTmpIn;
- strmOut << nBefore;
- if (nBefore > 99) csp--;
- if (nBefore > 9) csp--;
- }
- else
- {
- strmOut << "??";
- csp--;
- }
- if (pslotAfter)
- {
- nAfter = pslotAfter->m_islotTmpIn;
- strmOut << "/" << nAfter;
- if (nAfter > 99) csp--;
- if (nAfter > 9) csp--;
- }
- else
- {
- if (pslotBefore)
- {
- strmOut << "/" << "??";
- csp--;
- }
- else
- csp = 5;
- }
-
- for (int isp = 0; isp < csp; isp++)
- strmOut << " ";
- }
-
- else if (fAfter)
- {
- Assert(m_vpslotAssoc.size());
- GrSlotState * pslotAfter = AssocSlot(m_vpslotAssoc.size() - 1);
-
- if (pslotAfter)
- {
- int nAfter = pslotAfter->m_islotTmpIn;
- ptman->LogInTable(strmOut, nAfter);
- }
- else
- strmOut << "?? ";
- }
- else if (iassoc < signed(m_vpslotAssoc.size() - 1))
- {
- GrSlotState * pslot = AssocSlot(iassoc);
-
- if (pslot)
- {
- int n = pslot->m_islotTmpIn;
- ptman->LogInTable(strmOut, n);
- }
- else
- strmOut << "?? ";
- }
- else
- strmOut << " ";
-}
-
-/*----------------------------------------------------------------------------------------------
- Write a hex value (a glyphID or Unicode codepoint) into the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogInTable(std::ostream & strmOut, int n)
-{
- if (n == kNegInfinity)
- {
- strmOut << "-inf ";
- return;
- }
- if (n == kPosInfinity)
- {
- strmOut << "+inf ";
- return;
- }
- if (n > 999999)
- {
- strmOut << "****** ";
- return;
- }
- if (n < -99999)
- {
- strmOut << "-***** ";
- return;
- }
-
- strmOut << n;
- int csp = SP_PER_SLOT - 1;
-
- if (abs(n) > 99999) csp--;
- if (abs(n) > 9999) csp--;
- if (abs(n) > 999) csp--;
- if (abs(n) > 99) csp--;
- if (abs(n) > 9) csp--;
-
- if (n < 0) csp--;
-
- for (int isp = 0; isp < csp; isp++)
- strmOut << " ";
-}
-
-void GrTableManager::LogInTable(std::ostream & strmOut, float n)
-{
- if (n == kNegInfFloat)
- {
- strmOut << "-inf ";
- return;
- }
- if (n == kPosInfFloat)
- {
- strmOut << "+inf ";
- return;
- }
- if (n > 9999)
- {
- strmOut << "****.* ";
- return;
- }
- if (n < -999)
- {
- strmOut << "-***.* ";
- return;
- }
-
- int csp = SP_PER_SLOT - 4;
-
- int nInt = (int)(fabsf(n));
- int nTenths = (int)fabsf((fabsf(n) - float(nInt) + 0.05f) * 10);
- if (nTenths >= 10)
- {
- nTenths = 0;
- nInt++;
- }
-
- if (nInt >= 1000) csp--;
- if (nInt >= 100) csp--;
- if (nInt >= 10) csp--;
-
- if (n < 0) csp--;
-
- for (int isp = 0; isp < csp; isp++)
- strmOut << " ";
- if (n < 0)
- strmOut << "-";
- strmOut << nInt << "." << nTenths << " ";
-}
-
-/*----------------------------------------------------------------------------------------------
- Write a hex value (a glyphID or Unicode codepoint) into the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogHexInTable(std::ostream & strmOut, utf16 chw, bool fPlus)
-{
- //char rgch[20];
- if (chw <= 0x0fff) strmOut << "0";
- if (chw <= 0x00ff) strmOut << "0";
- if (chw <= 0x000f) strmOut << "0";
-
- strmOut << std::hex << chw << std::dec;
-
- for (int i = 4; i < SP_PER_SLOT - 2; i++)
- strmOut << " ";
-
- if (fPlus)
- strmOut << "+ ";
- else
- strmOut << " ";
-}
-
-/*----------------------------------------------------------------------------------------------
- Write a directionality code to the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogDirCodeInTable(std::ostream & strmOut, int dirc)
-{
- switch (dirc)
- {
- case kdircUnknown: strmOut << "??? "; break;
- case kdircNeutral: strmOut << "ON "; break;
- case kdircL: strmOut << "L "; break;
- case kdircR: strmOut << "R "; break;
- case kdircRArab: strmOut << "AR "; break;
- case kdircEuroNum: strmOut << "EN "; break;
- case kdircEuroSep: strmOut << "ES "; break;
- case kdircEuroTerm: strmOut << "ET "; break;
- case kdircArabNum: strmOut << "AN "; break;
- case kdircComSep: strmOut << "CS "; break;
- case kdircWhiteSpace: strmOut << "WS "; break;
- case kdircBndNeutral: strmOut << "BN "; break;
- case kdircNSM: strmOut << "NSM "; break;
- case kdircLRO: strmOut << "LRO "; break;
- case kdircRLO: strmOut << "RLO "; break;
- case kdircLRE: strmOut << "LRE "; break;
- case kdircRLE: strmOut << "RLE "; break;
- case kdircPDF: strmOut << "PDF "; break;
- case kdircPdfL: strmOut << "PDF-L "; break;
- case kdircPdfR: strmOut << "PDF-R "; break;
- case kdircLlb: strmOut << "L "; break;
- case kdircRlb: strmOut << "R "; break;
- default: LogInTable(strmOut, dirc); break;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Write a breakweight code to the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogBreakWeightInTable(std::ostream & strmOut, int lb)
-{
- if (lb < 0)
- {
- lb = lb * -1;
- switch (lb)
- {
- case klbWsBreak: strmOut << "-ws "; break;
- case klbWordBreak: strmOut << "-word "; break;
- case klbHyphenBreak: strmOut << "-intra "; break;
- case klbLetterBreak: strmOut << "-lettr "; break;
- case klbClipBreak: strmOut << "-clip "; break;
- default: LogInTable(strmOut, lb*-1); break;
- }
- }
- else
- {
- switch (lb)
- {
- case klbNoBreak: strmOut << "none "; break;
- case klbWsBreak: strmOut << "ws "; break;
- case klbWordBreak: strmOut << "word "; break;
- case klbHyphenBreak: strmOut << "intra "; break;
- case klbLetterBreak: strmOut << "letter "; break;
- case klbClipBreak: strmOut << "clip "; break;
- default: LogInTable(strmOut, lb); break;
- }
- }
-}
-
-#endif // TRACING
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/XmlTransductionLog.cpp b/Build/source/libs/graphite-engine/src/segment/XmlTransductionLog.cpp
deleted file mode 100644
index d0dfcaafbe8..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/XmlTransductionLog.cpp
+++ /dev/null
@@ -1,1583 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2008 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TransductionLog.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Contains the functions for writing a log of the transduction process using an XML format.
-----------------------------------------------------------------------------------------------*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#include "Main.h"
-
-#ifdef _MSC_VER
-#pragma hdrstop
-#endif
-
-#include <math.h>
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:End Ignore
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Local Constants and static variables
-//:>********************************************************************************************
-
-namespace gr
-{
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-#define SP_PER_SLOT 7
-#define LEADING_SP 15
-#define MAX_SLOTS 128
-
-/*----------------------------------------------------------------------------------------------
- Output a file showing a log of the transduction process and the resulting segment.
-----------------------------------------------------------------------------------------------*/
-bool GrTableManager::WriteXmlLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet, int cbPrevSegDat, byte * pbPrevSegDat)
-{
-#ifdef TRACING
- if (!pstrmLog)
- return false;
- std::ostream & strmOut = *pstrmLog;
- WriteXmlLogAux(strmOut, pchstrm, psegRet, cbPrevSegDat, pbPrevSegDat);
- return true;
-#else
- return false;
-#endif // TRACING
-}
-
-
-bool GrTableManager::WriteXmlAssocLog(std::ostream * pstrmLog,
- GrCharStream * pchstrm, Segment * psegRet)
-{
-#ifdef TRACING
- if (!pstrmLog)
- return false;
-
- std::ostream & strmOut = *pstrmLog;
- LogFinalPositions(strmOut);
-
- LogXmlTagOpen(strmOut, "Mappings", 1, true);
- LogXmlTagPostAttrs(strmOut, true);
-
- //psegRet->LogXmlUnderlyingToSurface(strmOut, this, pchstrm, 2);
- //psegRet->LogXmlSurfaceToUnderlying(strmOut, this, 2);
-
- LogXmlTagClose(strmOut, "Mappings", 1, true);
-
- strmOut << "\n";
- LogXmlTagClose(strmOut, "GraphiteTraceLog", 0, true);
-
- return true;
-#else
- return false;
-#endif // TRACING
-}
-
-#ifdef TRACING
-
-/*----------------------------------------------------------------------------------------------
- Output a file showing a log of the transduction process and the resulting segment.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::WriteXmlLogAux(std::ostream & strmOut,
- GrCharStream * pchstrm, Segment * psegRet,
- int cbPrevSegDat, byte * pbPrevSegDat)
-{
- strmOut
- << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
- << "<!DOCTYPE GraphiteTraceLog SYSTEM \"GraphiteTraceLog.dtd\">\n"
- << "\n";
-
- LogXmlTagOpen(strmOut, "GraphiteTraceLog", 0, true);
- LogXmlTagPostAttrs(strmOut, true);
- strmOut << "\n";
-
- LogXmlTagOpen(strmOut, "SegmentRun", 1, true);
- LogXmlTagAttr(strmOut, "stringOffset", pchstrm->Min(), 0);
- LogXmlTagPostAttrs(strmOut, true);
-
- if (cbPrevSegDat == 0)
- LogXmlUnderlying(strmOut, pchstrm, 0, 2);
- else
- {
- Assert(*(pbPrevSegDat + 4) == 0); // skip offset for first pass
- LogXmlUnderlying(strmOut, pchstrm, *(pbPrevSegDat + 3), 2);
- }
-
- //LogXmlPass1Input(strmOut);
-
- for (int ipass = 0; ipass < m_cpass; ipass++)
- {
- if (cbPrevSegDat == 0)
- LogXmlPass(strmOut, ipass, 0, 2);
- else
- LogXmlPass(strmOut, ipass, *(pbPrevSegDat + 4 + ipass), 2);
- }
-
- LogXmlTagClose(strmOut, "SegmentRun", 1, true);
- strmOut << "\n";
-
- // Don't do this until after we've logged the associations.
- //LogXmlTagClose(strmOut, "GraphiteTraceLog", 0, true);
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out a log of the underlying input.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlUnderlying(std::ostream & strmOut, GrCharStream * pchstrm,
- int cchwBackup, size_t nIndent)
-{
- LogXmlTagOpen(strmOut, "Input", nIndent, true);
- LogXmlTagPostAttrs(strmOut, true);
-
- LogXmlUnderlyingAux(strmOut, pchstrm, cchwBackup, -1, nIndent,
- true, // text
- true, // features
- true, // color
- false, // string offset
- false, // ligature components
- false); // glyph associations
-
- LogXmlTagClose(strmOut, "Input", nIndent, true);
-}
-
-void GrTableManager::LogXmlUnderlyingAux(std::ostream & strmOut, GrCharStream * pchstrm,
- int cch32Backup, int cch32Lim, size_t nIndent,
- bool fLogText, bool fLogFeatures, bool fLogColor, bool fLogStrOff, bool fLogLig, bool fLogGlyphs)
-{
- int rgnChars[MAX_SLOTS];
- bool rgfNewRun[MAX_SLOTS];
- std::fill_n(rgfNewRun, MAX_SLOTS, false);
- GrFeatureValues rgfval[MAX_SLOTS];
- int cchwMaxRawChars;
-
- int cch32 = pchstrm->GetLogData(this, rgnChars, rgfNewRun, rgfval,
- cch32Backup, &cchwMaxRawChars);
- cch32 = min(cch32, MAX_SLOTS);
- if (cch32Lim > -1)
- cch32 = min(cch32Lim, cch32);
-
- int ichw;
-
- // For UTF-8 and surrogate representation:
- int rgchwChars1[MAX_SLOTS];
- utf16 rgchwChars2[MAX_SLOTS];
- utf16 rgchwChars3[MAX_SLOTS];
- utf16 rgchwChars4[MAX_SLOTS];
- utf16 rgchwChars5[MAX_SLOTS];
- utf16 rgchwChars6[MAX_SLOTS];
- utf16 rgiRawString[MAX_SLOTS]; // indices from underlying slots to text-source chars (0-based)
-
- int rgichwRaw[MAX_SLOTS]; // index of input char with in the given UTF32, 1-based
-
- if (cchwMaxRawChars > 1)
- {
- cchwMaxRawChars = min(cchwMaxRawChars, 6); // max of 6 raw (UTF-8 or UTF-16) chars per slot
- pchstrm->GetLogDataRaw(this, cch32, cch32Backup, cchwMaxRawChars,
- rgchwChars1, rgchwChars2, rgchwChars3, rgchwChars4, rgchwChars5, rgchwChars6,
- rgichwRaw);
- }
- else
- {
- for (ichw = 0; ichw < cch32; ichw++)
- {
- rgichwRaw[ichw] = 1;
- rgchwChars1[ichw] = rgnChars[ichw];
- rgchwChars2[ichw] = 0;
- rgchwChars3[ichw] = 0;
- rgchwChars4[ichw] = 0;
- rgchwChars5[ichw] = 0;
- rgchwChars6[ichw] = 0;
- }
- }
-
- int ichUtf32 = 0;
- ichw = 0;
- while (ichUtf32 < cch32)
- {
- if (rgichwRaw[ichw] == 1)
- {
- rgiRawString[ichUtf32++] = (utf16)ichw;
- }
- ichw++;
- }
-
- int ichwFeat = 0;
- for (ichw = 0; ichw < cch32; ichw++)
- {
- if (rgfNewRun[ichw])
- ichwFeat = ichw; // because rgfval only saves features for first of run
-
- // See if there are any features.
- bool fFeatures = false;
- size_t ifeat;
- for (ifeat = 0; fLogFeatures && ifeat < kMaxFeatures; ifeat++)
- {
- if (rgfval[ichwFeat].FeatureValue(ifeat) != 0)
- {
- fFeatures = true;
- break;
- }
- }
-
- bool fContent = fFeatures;
-
- LogXmlTagOpen(strmOut, "Char", nIndent+1, fContent);
-
- LogXmlTagAttr(strmOut, "index", rgiRawString[ichw] - cch32Backup, 0);
- LogXmlTagAttrHex(strmOut, "usv", rgnChars[ichw], 0);
-
- if (fLogText)
- {
- char rgch[20];
- rgch[0] = (char)rgnChars[ichw];
- rgch[1] = 0;
- if (rgnChars[ichw] < 0x0100 && rgchwChars2[ichw] == 0) // ANSI
- LogXmlTagAttr(strmOut, "text", rgch);
- else if (rgnChars[ichw] == knLRM)
- LogXmlTagAttr(strmOut, "text", "<LRM>");
- else if (rgnChars[ichw] == knRLM)
- LogXmlTagAttr(strmOut, "text", "<RLM>");
- else if (rgnChars[ichw] == knLRO)
- LogXmlTagAttr(strmOut, "text", "<LRO>");
- else if (rgnChars[ichw] == knRLO)
- LogXmlTagAttr(strmOut, "text", "<RLO>");
- else if (rgnChars[ichw] == knLRE)
- LogXmlTagAttr(strmOut, "text", "<LRE>");
- else if (rgnChars[ichw] == knRLE)
- LogXmlTagAttr(strmOut, "text", "<RLE>");
- else if (rgnChars[ichw] == knPDF)
- LogXmlTagAttr(strmOut, "text", "<PDF>");
- }
-
- if (fLogStrOff)
- LogXmlTagAttr(strmOut, "stringOffset", pchstrm->Min() + rgiRawString[ichw] - cch32Backup, 0);
-
- if (rgchwChars2[ichw] != 0)
- {
- std::string strHex = HexString(rgchwChars1[ichw], rgchwChars2[ichw], rgchwChars3[ichw],
- rgchwChars4[ichw], rgchwChars5[ichw], rgchwChars6[ichw]);
- if (pchstrm->TextSrc()->utfEncodingForm() == kutf8)
- LogXmlTagAttr(strmOut, "textSourceUtf8", strHex.c_str());
- else
- LogXmlTagAttr(strmOut, "textSourceUtf16", strHex.c_str());
- }
-
- if (fLogColor)
- {
- IColorTextSource * tscolor = dynamic_cast<IColorTextSource *>(pchstrm->TextSrc());
- if (tscolor)
- {
- int clrFore, clrBack;
- tscolor->getColors(ichw, &clrFore, &clrBack);
- LogXmlTagColor(strmOut, "color", clrFore, false);
- LogXmlTagColor(strmOut, "background", clrBack, true);
- }
- }
-
- if (fLogLig)
- {
-
- }
-
-//if (fLogLig || fLogGlyphs)
-//{
-// size_t cassocs = 0;
-// int fLigs = false;
-// int ichw;
-// for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
-// {
-// if (m_prgpvisloutAssocs[ichw])
-// cassocs = max(cassocs, m_prgpvisloutAssocs[ichw]->size());
-// if (m_prgisloutLigature[ichw] != kNegInfinity)
-// fLigs = true;
-// }
-//}
-
- LogXmlTagPostAttrs(strmOut, fContent);
-
- if (fLogFeatures)
- {
- for (ifeat = 0; ifeat < kMaxFeatures; ifeat++)
- {
- if (rgfval[ichwFeat].FeatureValue(ifeat) != 0)
- {
- GrFeature * pfeat = Feature(ifeat);
-
- LogXmlTagOpen(strmOut, "Feature", nIndent+2, false);
- LogXmlTagAttr(strmOut, "id", pfeat->ID());
- LogXmlTagAttr(strmOut, "value", rgfval[ichwFeat].FeatureValue(ifeat));
- //LogXmlTagPostAttrs(strmOut, false);
- LogXmlTagClose(strmOut, "Feature", nIndent+1, false);
- }
- }
- }
-
- if (fLogGlyphs)
- {
- }
-
- LogXmlTagClose(strmOut, "Char", nIndent+1, fContent);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Output the the results of pass.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlPass(std::ostream & strmOut, int ipass, int cslotSkipped, int nIndent)
-{
- strmOut << "\n";
-
- GrPass * ppass = Pass(ipass);
- GrSlotStream * psstrmIn = (ipass == 0) ? NULL : InputStream(ipass);
- GrSlotStream * psstrmOut = OutputStream(ipass);
-
- int islot;
- // Mark each slot with its index in the input and output streams.
- for (islot = 0; ipass > 0 && islot < psstrmIn->ReadPos(); islot++)
- psstrmIn->SlotAt(islot)->m_islotTmpIn = islot;
-
- for (islot = 0; islot < psstrmOut->WritePos(); islot++)
- psstrmOut->SlotAt(islot)->m_islotTmpOut = islot;
-
- LogXmlTagOpen(strmOut, "Pass", nIndent, true);
- LogXmlTagAttr(strmOut, "number", ipass);
-
- std::string strType;
- if (dynamic_cast<GrGlyphGenPass *>(ppass))
- strType = "glyphGeneration";
- else if (dynamic_cast<GrBidiPass *>(ppass))
- strType = "bidi";
- else if (dynamic_cast<GrSubPass *>(ppass))
- {
- if (ipass >= m_ipassJust1)
- strType = "justification";
- else
- strType = "substitution";
- }
- else if (dynamic_cast<GrPosPass *>(ppass))
- strType = "positioning";
- else if (dynamic_cast<GrLineBreakPass *>(ppass))
- strType = "linebreak";
- LogXmlTagAttr(strmOut, "type", strType.c_str());
-
- LogXmlTagPostAttrs(strmOut, true);
-
- if (!dynamic_cast<GrBidiPass *>(ppass) && !dynamic_cast<GrGlyphGenPass *>(ppass))
- {
- LogXmlTagOpen(strmOut, "RulesMatched", nIndent+1, true);
- LogXmlTagPostAttrs(strmOut, true);
- ppass->LogXmlRules(strmOut, this, psstrmIn, nIndent+2);
- LogXmlTagClose(strmOut, "RulesMatched", nIndent+1, true);
- }
-
- bool fJustWidths = false;
- if (ipass == m_ipassJust1 - 1 && ShouldLogJustification()
- && m_engst.m_jmodi == kjmodiJustify)
- {
- fJustWidths = true;
- }
-
- LogXmlTagOpen(strmOut, "Output", nIndent+1, true);
- LogXmlTagPostAttrs(strmOut, true);
- bool fPreJust = (!fJustWidths && ipass == m_ipassJust1 - 1 && ShouldLogJustification());
- bool fPostJust = (fJustWidths || ipass == m_ipassJust1 && ShouldLogJustification());
- ppass->LogXmlGlyphs(strmOut, this, psstrmOut, m_ipassJust1, fPreJust, fPostJust, cslotSkipped, nIndent+2);
- LogXmlTagClose(strmOut, "Output", nIndent+1, true);
-
- LogXmlTagClose(strmOut, "Pass", nIndent, true);
-
-#ifdef XMLOMIT
-
- // If this was the pass just before the justification routines get run, output a
- // special line that just shows the results, ie, the values of justify.width.
- // TODO: adjust this when measure mode get functioning.
- if (ipass == m_ipassJust1 - 1 && ShouldLogJustification()
- && m_engst.m_jmodi == kjmodiJustify)
- {
- strmOut << "\nJUSTIFICATION\n\n";
- LogSlotHeader(strmOut, psstrmOut->WritePos(), SP_PER_SLOT, LEADING_SP);
- LogSlotGlyphs(strmOut, psstrmOut);
- LogAttributes(strmOut, ipass, true);
- }
-
-#endif // XMLOMIT
-
-}
-
-/*----------------------------------------------------------------------------------------------
- Write the list of rules fired and failed for a given pass.
-----------------------------------------------------------------------------------------------*/
-void GrPass::LogXmlRules(std::ostream & strmOut, GrTableManager * ptman,
- GrSlotStream * psstrmIn, int nIndent)
-{
- m_pzpst->LogXmlRules(strmOut, ptman, psstrmIn, nIndent);
-}
-
-void PassState::LogXmlRules(std::ostream & strmOut, GrTableManager * ptman,
- GrSlotStream * psstrmIn, int nIndent)
-{
- if (m_crulrec == 0)
- {
- ptman->LogXmlComment(strmOut, "none", nIndent);
- return;
- }
-
- for (int irulrec = 0; irulrec < m_crulrec; irulrec++)
- {
- bool fSourceAvailable = false;
-
- ptman->LogXmlTagOpen(strmOut, "Rule", nIndent, fSourceAvailable);
-
- ptman->LogXmlTagAttr(strmOut, "slot", m_rgrulrec[irulrec].m_islot);
-
- if (m_rgrulrec[irulrec].m_irul == PassState::kHitMaxRuleLoop)
- ptman->LogXmlTagAttr(strmOut, "hitMaxRuleLoop", "true");
- else if (m_rgrulrec[irulrec].m_irul == PassState::kHitMaxBackup)
- ptman->LogXmlTagAttr(strmOut, "hitMaxBackup", "true");
- else
- {
- ptman->LogXmlTagAttr(strmOut, "debugNumber", m_rgrulrec[irulrec].m_irul);
- ptman->LogXmlTagAttr(strmOut, "fired", (m_rgrulrec[irulrec].m_fFired) ? "true" : "false");
- }
-
- ptman->LogXmlTagPostAttrs(strmOut, fSourceAvailable);
-
- // TODO: output Source
-
- ptman->LogXmlTagClose(strmOut, "Rule", nIndent, fSourceAvailable);
- }
-}
-
-void GrPass::LogXmlGlyphs(std::ostream & strmOut, GrTableManager * ptman, GrSlotStream * psstrmOut,
- int ipassJust1, bool fPreJust, bool fPostJust, int cslotSkipped, int nIndent)
-{
- GrBidiPass * ppassBidi = dynamic_cast<GrBidiPass *>(this);
- GrBidiPass * ppassBidiNext = (m_ipass + 1 >= ptman->NumberOfPasses()) ?
- NULL :
- dynamic_cast<GrBidiPass *>(ptman->Pass(m_ipass + 1));
- m_pzpst->LogXmlGlyphs(strmOut, ptman, psstrmOut, ipassJust1, fPreJust, fPostJust,
- (ppassBidi != NULL), (ppassBidiNext != NULL), cslotSkipped, nIndent);
-}
-
-void PassState::LogXmlGlyphs(std::ostream & strmOut, GrTableManager * ptman, GrSlotStream * psstrmOut,
- int ipassJust1, bool fPreJust, bool fPostJust, bool fBidi, bool fBidiNext, int cslotSkipped,
- int nIndent)
-{
- ptman->LogXmlTagOpen(strmOut, "Output", nIndent, true);
- ptman->LogXmlTagPostAttrs(strmOut, true);
-
- for (int islot = 0; islot < psstrmOut->WritePos() + 1; islot++) // +1 allows us to handle final deletion
- {
- if (islot > MAX_SLOTS)
- break;
-
- for (int islotDel = 0; islotDel < m_rgcslotDeletions[islot]; islotDel++)
- {
- ptman->LogXmlTagOpen(strmOut, "Glyph", nIndent+1, false);
- ptman->LogXmlTagAttr(strmOut, "slot", "deleted");
- ptman->LogXmlTagPostAttrs(strmOut, false);
- ptman->LogXmlTagClose(strmOut, "Glyph", nIndent+1, false);
- }
- if (islot >= psstrmOut->WritePos())
- break;
-
- GrSlotState * pslot = psstrmOut->SlotAt(islot);
-
- bool fMod = (pslot->PassModified() >= m_ipass && m_ipass > 0);
- if (fBidi || fBidiNext)
- fMod = true;
-
- ptman->LogXmlTagOpen(strmOut, "Glyph", nIndent+1, fMod);
-
- ptman->LogXmlTagAttr(strmOut, "slot", islot);
- if (pslot->GlyphID() == ptman->LBGlyphID())
- ptman->LogXmlTagAttr(strmOut, "gid", "linebreak");
- else
- ptman->LogXmlTagAttr(strmOut, "gid", pslot->GlyphID());
- if (pslot->GlyphID() != pslot->ActualGlyphForOutput(ptman))
- ptman->LogXmlTagAttr(strmOut, "actual", pslot->ActualGlyphForOutput(ptman));
- if (m_rgfInsertion[islot])
- ptman->LogXmlTagAttr(strmOut, "inserted", "true");
- if (islot < cslotSkipped)
- ptman->LogXmlTagAttr(strmOut, "nextPassSkips", "true");
-
- ptman->LogXmlTagPostAttrs(strmOut, fMod);
-
- if (fMod)
- {
- pslot->LogXmlAttributes(strmOut, ptman, psstrmOut, m_ipass, islot,
- fPreJust, fPostJust, fBidi, fBidiNext, nIndent+2);
- }
-
- ptman->LogXmlTagClose(strmOut, "Glyph", nIndent+1, fMod);
- }
-
- ptman->LogXmlTagClose(strmOut, "Output", nIndent, true);
-}
-
-/*----------------------------------------------------------------------------------------------
- Write out the attributes that have changes.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::LogXmlAttributes(std::ostream & strmOut, GrTableManager * ptman,
- GrSlotStream * psstrmOut, int ipass,
- int islot, bool fPreJust, bool fPostJust, bool fBidi, bool fBidiNext, int nIndent)
-{
- // To handle reprocessing, in which case there may be a chain of slots modified
- // in the same pass:
- GrSlotState * pslotPrev = PrevState();
- while (pslotPrev && pslotPrev->PassModified() == PassModified())
- pslotPrev = pslotPrev->m_pslotPrevState;
-
- bool * prgfMods = new bool[kslatMax + ptman->NumUserDefn() - 1];
- memset(prgfMods, 0, (kslatMax + ptman->NumUserDefn() - 1) * sizeof(bool));
- int ccomp;
- int cassoc;
- SlotAttrsModified(prgfMods, fPreJust, &ccomp, &cassoc); // just for this one slot
-
- if (fPreJust)
- prgfMods[kslatJWidth] = false;
- else if (fPostJust)
- prgfMods[kslatJWidth] = true;
-
- //if (fJustWidths)
- //{}
-
- bool fLogAssocs = false;
-
- for (int slat = 0; slat < kslatMax + ptman->NumUserDefn() - 1; slat++)
- {
- if (!prgfMods[slat] && (slat != kslatDir || (!fBidi && !fBidiNext)))
- continue;
-
- if (slat == kslatPosX)
- continue;
- if (slat == kslatPosY)
- continue;
-
- std::string strAttrName;
- switch (slat)
- {
- case kslatAdvX: strAttrName = "advance.x"; break;
- case kslatAdvY: strAttrName = "advance.y"; break;
- case kslatAttTo: strAttrName = "att.to"; break;
- case kslatAttAtX: strAttrName = "att.at.x"; break;
- case kslatAttAtY: strAttrName = "att.at.y"; break;
- case kslatAttAtGpt: strAttrName = "att.at.gpt"; break;
- case kslatAttAtXoff: strAttrName = "att.at.xoff"; break;
- case kslatAttAtYoff: strAttrName = "att.at.yoff"; break;
- case kslatAttWithX: strAttrName = "att.with.x"; break;
- case kslatAttWithY: strAttrName = "att.with.y"; break;
- case kslatAttWithGpt: strAttrName = "att.with.gpt"; break;
- case kslatAttWithXoff: strAttrName = "att.with.xoff"; break;
- case kslatAttWithYoff: strAttrName = "att.with.yoff"; break;
- case kslatAttLevel: strAttrName = "att.level"; break;
- case kslatBreak: strAttrName = "breakweight"; break;
- case kslatCompRef: strAttrName = "component"; break; // << iIndex + 1 - 1-based
- case kslatDir: strAttrName = "dir"; break;
- case kslatInsert: strAttrName = "insert"; break;
- case kslatMeasureSol: strAttrName = "measure.sol"; break;
- case kslatMeasureEol: strAttrName = "measure.eol"; break;
- case kslatJStretch: strAttrName = "just.stretch"; break;
- case kslatJShrink: strAttrName = "just.shrink"; break;
- case kslatJStep: strAttrName = "just.step"; break;
- case kslatJWeight: strAttrName = "just.weight"; break;
- case kslatJWidth: strAttrName = "just.width"; break;
- case kslatPosX:
- case kslatPosY:
- Assert(false);
- break;
- case kslatShiftX: strAttrName = "shift.x"; break;
- case kslatShiftY: strAttrName = "shift.y"; break;
- default:
- if (kslatUserDefn <= slat &&
- slat < kslatUserDefn + ptman->NumUserDefn())
- {
- strAttrName.assign("user");
- char rgch[20];
- itoa(slat - kslatUserDefn + 1, rgch, 10); // 1-based
- strAttrName.append(rgch);
- }
- else
- {
- // Invalid attribute:
- Warn("bad slot attribute");
- break;
- }
- }
-
- fLogAssocs = (fLogAssocs || prgfMods[slat]);
-
- if (slat == kslatCompRef)
- {
- for (int icomp = 0; icomp < ccomp; icomp++)
- {
- ptman->LogXmlTagOpen(strmOut, "Attribute", nIndent, false);
- ptman->LogXmlTagAttr(strmOut, "name", strAttrName.c_str());
- ptman->LogXmlTagAttr(strmOut, "index", icomp+1);
- int nValue = GetSlotAttrValue(strmOut, ptman, ipass, slat, icomp, fPreJust, fPostJust);
- ptman->LogXmlTagAttr(strmOut, "newValue", nValue);
- ptman->LogXmlTagPostAttrs(strmOut, false);
- ptman->LogXmlTagClose(strmOut, "Attribute", nIndent, false);
- }
- }
- else
- {
- std::string strValue = "newValue";
- if ((!prgfMods[slat] && fBidiNext) || fBidi)
- strValue = "value";
-
- ptman->LogXmlTagOpen(strmOut, "Attribute", nIndent, false);
- ptman->LogXmlTagAttr(strmOut, "name", strAttrName.c_str());
- int nValue = GetSlotAttrValue(strmOut, ptman, ipass, slat, 0, fPreJust, fPostJust);
- switch (slat)
- {
- case kslatDir: ptman->LogXmlDirCode(strmOut, strValue.c_str(), nValue);break;
- case kslatBreak: ptman->LogXmlBreakWeight(strmOut, "newValue", nValue); break;
- default: ptman->LogXmlTagAttr(strmOut, "newValue", nValue); break;
- }
- ptman->LogXmlTagPostAttrs(strmOut, false);
- ptman->LogXmlTagClose(strmOut, "Attribute", nIndent, false);
- }
- }
-
- if (fBidi)
- {
- // Output final directionality level
- ptman->LogXmlTagOpen(strmOut, "Attribute", nIndent, false);
- ptman->LogXmlTagAttr(strmOut, "name", "directionLevel");
- ptman->LogXmlTagAttr(strmOut, "value", DirLevel());
- ptman->LogXmlTagPostAttrs(strmOut, false);
- ptman->LogXmlTagClose(strmOut, "Attribute", nIndent, false);
- }
-
- if (m_vpslotAssoc.size() > 1)
- fLogAssocs = true; // multiple associations
- else if (m_vpslotAssoc.size() == 1)
- {
- // association change from previous stream
- GrSlotState * pslotAssoc = AssocSlot(0);
- if (pslotAssoc == NULL || pslotAssoc->m_islotTmpIn != islot)
- fLogAssocs = true;
- }
- if (fLogAssocs)
- {
- std::string strAssocs;
- char rgch[20];
- for (size_t iassoc = 0; iassoc < m_vpslotAssoc.size(); iassoc++)
- {
- GrSlotState * pslotAssoc = AssocSlot(iassoc);
- if (pslotAssoc)
- {
- int n = pslotAssoc->m_islotTmpIn;
- memset(rgch,0,20);
- itoa(n,rgch,10);
- if (iassoc > 0)
- strAssocs.append(" ");
- strAssocs.append(rgch);
- }
- }
- if (strAssocs.length() == 0)
- strAssocs.assign("??");
- ptman->LogXmlTagOpen(strmOut, "Associations", nIndent, false);
- ptman->LogXmlTagAttr(strmOut, "slots", strAssocs.c_str());
- //ptman->LogXmlTagPostAttrs(strmOut, false);
- ptman->LogXmlTagClose(strmOut, "Associations", nIndent, false);
- }
-
- delete prgfMods;
-}
-
-#if XMLOMIT
-/*----------------------------------------------------------------------------------------------
- Write out the final positions.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogFinalPositions(std::ostream & strmOut)
-{
- GrSlotStream * psstrm = OutputStream(m_cpass - 1);
-
- strmOut << "x position ";
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsLineBreak(LBGlyphID()))
- {
- strmOut << " ";
- continue;
- }
- LogInTable(strmOut, pslot->XPosition());
- }
- strmOut << "\n";
-
- strmOut << "y position ";
- for (int islot = 0; islot < psstrm->WritePos(); islot++)
- {
- GrSlotState * pslot = psstrm->SlotAt(islot);
- if (pslot->IsLineBreak(LBGlyphID()))
- {
- strmOut << " ";
- continue;
- }
- LogInTable(strmOut, pslot->YPosition());
- }
- strmOut << "\n";
-}
-
-#endif // XMLOMIT
-
-/*----------------------------------------------------------------------------------------------
- Log the value of the slot attribute for the given slot. Assume it has changed.
-----------------------------------------------------------------------------------------------*/
-int GrSlotState::GetSlotAttrValue(std::ostream & strmOut, GrTableManager * ptman,
- int ipass, int slat, int iIndex, bool fPreJust, bool fPostJust)
-{
- switch (slat)
- {
- case kslatAdvX:
- return int(m_mAdvanceX);
- case kslatAdvY:
- return int(m_mAdvanceY);
-
- case kslatAttTo:
- return m_srAttachTo;
-
- case kslatAttAtX: // always do these in pairs
- return m_mAttachAtX;
- case kslatAttAtY:
- return m_mAttachAtY;
- case kslatAttAtGpt:
- return m_nAttachAtGpoint;
-
- case kslatAttAtXoff: // always do these in pairs
- return m_mAttachAtXOffset;
- case kslatAttAtYoff:
- return m_mAttachAtYOffset;
-
- case kslatAttWithX: // always do these in pairs
- return m_mAttachWithX;
- case kslatAttWithY:
- return m_mAttachWithY;
-
- case kslatAttWithGpt:
- return m_nAttachWithGpoint;
-
- case kslatAttWithXoff: // always do these in pairs
- return m_mAttachWithXOffset;
- case kslatAttWithYoff:
- return m_mAttachWithYOffset;
-
- case kslatAttLevel:
- return m_nAttachLevel;
-
- case kslatBreak:
- return m_lb;
-
- case kslatDir:
- return m_dirc;
-
- case kslatInsert:
- return m_fInsertBefore;
-
- case kslatShiftX:
- return m_mShiftX;
- case kslatShiftY:
- return m_mShiftY;
- case kslatMeasureSol:
- return m_mMeasureSol;
- case kslatMeasureEol:
- return m_mMeasureEol;
- case kslatJStretch:
- return m_mJStretch0;
- case kslatJShrink:
- return m_mJShrink0;
- case kslatJStep:
- return m_mJStep0;
- case kslatJWeight:
- return m_nJWeight0;
- case kslatJWidth:
- return m_mJWidth0;
-
- case kslatCompRef:
- {
- GrSlotState * pslotComp = reinterpret_cast<GrSlotState *>(CompRef(iIndex));
- return pslotComp->m_islotTmpIn;
- }
-
- default:
- if (kslatUserDefn <= slat && slat <= kslatUserDefn + m_cnUserDefn)
- {
- int iTmp = slat - kslatUserDefn;
- return UserDefn(iTmp);
- }
- else
- gAssert(false);
- }
-
- return 0;
-}
-
-#endif // TRACING
-
-
-/*----------------------------------------------------------------------------------------------
- Write out the final underlying-to-surface associations.
-----------------------------------------------------------------------------------------------*/
-void Segment::LogXmlUnderlyingToSurface(std::ostream & strmOut, GrTableManager * ptman,
- GrCharStream * pchstrm, int nIndent)
-{
-#ifdef TRACING
-
- ptman->LogXmlTagOpen(strmOut, "UnderlyingToSurface", nIndent, true);
- ptman->LogXmlTagPostAttrs(strmOut, true);
-
- ptman->LogXmlUnderlyingAux(strmOut, pchstrm, -m_ichwAssocsMin, (m_ichwAssocsLim - m_ichwAssocsMin),
- nIndent+1,
- true, // text
- false, // features
- false, // color
- true, // string offset
- true, // ligature components
- true // glyph associations
- );
-
- ptman->LogXmlTagClose(strmOut, "UnderlyingToSurface", nIndent, true);
-
-
-#ifdef XMLOMIT
- ptman->LogXmlTagOpen(strmOut, "UnderlyingToSurface", nIndent, true);
-
- size_t cassocs = 0;
- int fLigs = false;
- int ichw;
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (m_prgpvisloutAssocs[ichw])
- cassocs = max(cassocs, m_prgpvisloutAssocs[ichw]->size());
- if (m_prgisloutLigature[ichw] != kNegInfinity)
- fLigs = true;
- }
-
- ptman->LogUnderlyingHeader(strmOut, pchstrm->Min(), (pchstrm->Min() + m_ichwAssocsLim),
- -m_ichwAssocsMin, NULL);
-
- int rgnChars[MAX_SLOTS];
- bool rgfNewRun[MAX_SLOTS];
- std::fill_n(rgfNewRun, MAX_SLOTS, false);
- GrFeatureValues rgfval[MAX_SLOTS];
- int cchwMaxRawChars;
-
- int cchw = pchstrm->GetLogData(ptman, rgnChars, rgfNewRun, rgfval,
- -m_ichwAssocsMin, &cchwMaxRawChars);
- cchw = min(cchw, MAX_SLOTS);
-
- utf16 rgchwChars2[MAX_SLOTS];
- utf16 rgchwChars3[MAX_SLOTS];
- utf16 rgchwChars4[MAX_SLOTS];
- utf16 rgchwChars5[MAX_SLOTS];
- utf16 rgchwChars6[MAX_SLOTS];
- int rgcchwRaw[MAX_SLOTS];
- if (cchwMaxRawChars > 1)
- {
- cchwMaxRawChars = min(cchwMaxRawChars, 6);
- pchstrm->GetLogDataRaw(ptman, cchw, -m_ichwAssocsMin, cchwMaxRawChars,
- rgnChars, rgchwChars2, rgchwChars3, rgchwChars4, rgchwChars5, rgchwChars6,
- rgcchwRaw);
- }
- else
- {
- for (ichw = 0 ; ichw <(m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- rgcchwRaw[ichw] = 1;
- rgchwChars2[ichw] = 0;
- rgchwChars3[ichw] = 0;
- rgchwChars4[ichw] = 0;
- rgchwChars5[ichw] = 0;
- rgchwChars6[ichw] = 0;
- }
- }
-
- // Text
- strmOut << "Text: "; // 15 spaces
- int inUtf32 = 0;
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- utf16 chw, chwNext;
- switch (rgcchwRaw[ichw])
- {
- default:
- case 1: chw = utf16(rgnChars[inUtf32]); chwNext = rgchwChars2[inUtf32]; break;
- case 2: chw = rgchwChars2[inUtf32]; chwNext = rgchwChars3[inUtf32]; break;
- case 3: chw = rgchwChars3[inUtf32]; chwNext = rgchwChars4[inUtf32]; break;
- case 4: chw = rgchwChars4[inUtf32]; chwNext = rgchwChars5[inUtf32]; break;
- case 5: chw = rgchwChars5[inUtf32]; chwNext = rgchwChars6[inUtf32]; break;
- case 6: chw = rgchwChars6[inUtf32]; chwNext = 0; break;
- }
- if (rgcchwRaw[ichw] == 1 && chwNext == 0 && chw < 0x0100) // ANSI
- strmOut << (char)chw << " "; // 6 spaces
- else
- strmOut << " "; // 7 spaces
- if (chwNext == 0)
- inUtf32++;
- }
- strmOut << "\n";
-
- // Unicode
- strmOut << "Unicode: ";
- inUtf32 = 0;
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- utf16 chw, chwNext;
- switch (rgcchwRaw[ichw])
- {
- default:
- case 1: chw = utf16(rgnChars[inUtf32]); chwNext = rgchwChars2[inUtf32]; break;
- case 2: chw = rgchwChars2[inUtf32]; chwNext = rgchwChars3[inUtf32]; break;
- case 3: chw = rgchwChars3[inUtf32]; chwNext = rgchwChars4[inUtf32]; break;
- case 4: chw = rgchwChars4[inUtf32]; chwNext = rgchwChars5[inUtf32]; break;
- case 5: chw = rgchwChars5[inUtf32]; chwNext = rgchwChars6[inUtf32]; break;
- case 6: chw = rgchwChars6[inUtf32]; chwNext = 0; break;
- }
- ptman->LogHexInTable(strmOut, chw, chwNext != 0);
- if (chwNext == 0)
- inUtf32++;
- }
- strmOut << "\n";
-
- strmOut << "before ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutBefore[ichw] == kNegInfinity)
- strmOut << "<-- ";
- else if (m_prgisloutBefore[ichw] == kPosInfinity)
- strmOut << "--> ";
- else
- ptman->LogInTable(strmOut, m_prgisloutBefore[ichw]);
- }
- strmOut <<"\n";
-
- for (int ix = 1; ix < signed(cassocs) - 1; ix++) //(cassocs > 2)
- {
- if (ix == 1)
- strmOut << "other ";
- else
- strmOut << " ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- std::vector<int> * pvislout = m_prgpvisloutAssocs[ichw];
- if (pvislout == NULL)
- strmOut << " ";
- else if (signed(pvislout->size()) <= ix)
- strmOut << " ";
- else if ((*pvislout)[ix] != m_prgisloutAfter[ichw])
- ptman->LogInTable(strmOut, (*pvislout)[ix]);
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- strmOut << "after ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutAfter[ichw] == kNegInfinity)
- strmOut << "<-- ";
- else if (m_prgisloutAfter[ichw] == kPosInfinity)
- strmOut << "--> ";
- else
- ptman->LogInTable(strmOut, m_prgisloutAfter[ichw]);
- }
- strmOut <<"\n";
-
- if (fLigs)
- {
- strmOut << "ligature ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutLigature[ichw] != kNegInfinity)
- ptman->LogInTable(strmOut, m_prgisloutLigature[ichw]);
- else
- strmOut << " ";
- }
- strmOut << "\n";
-
- strmOut << "component ";
- for (ichw = 0; ichw < (m_ichwAssocsLim - m_ichwAssocsMin); ichw++)
- {
- if (rgcchwRaw[ichw] > 1)
- // continuation of Unicode codepoint
- strmOut << " ";
- else if (m_prgisloutLigature[ichw] != kNegInfinity)
- ptman->LogInTable(strmOut, m_prgiComponent[ichw] + 1); // 1-based
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- strmOut << "\n";
-#endif // XMLOMIT
-#endif // TRACING
-
-}
-
-#ifdef XMLOMIT
-
-/*----------------------------------------------------------------------------------------------
- Write out the final surface-to-underlying associations.
-----------------------------------------------------------------------------------------------*/
-void Segment::LogSurfaceToUnderlying(GrTableManager * ptman, std::ostream & strmOut)
-{
-#ifdef TRACING
- strmOut << "\nSURFACE TO UNDERLYING MAPPINGS\n\n";
-
- ptman->LogSlotHeader(strmOut, m_cslout, SP_PER_SLOT, LEADING_SP);
-
- int ccomp = 0;
-
- strmOut << "Glyph IDs: ";
- int islout;
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << "# ";
- }
- else
- {
- ptman->LogHexInTable(strmOut, psloutTmp->GlyphID());
- ccomp = max(ccomp, psloutTmp->NumberOfComponents());
- }
- }
- strmOut << "\n";
-
- bool fAnyPseudos = false;
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->GlyphID() != psloutTmp->ActualGlyphForOutput(ptman))
- {
- fAnyPseudos = true;
- break;
- }
- }
- if (fAnyPseudos)
- {
- strmOut << "Actual glyphs: ";
- for (int islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->GlyphID() != psloutTmp->ActualGlyphForOutput(ptman))
- ptman->LogHexInTable(strmOut, psloutTmp->ActualGlyphForOutput(ptman));
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-
- strmOut << "before ";
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << " ";
- }
- else
- ptman->LogInTable(strmOut, psloutTmp->BeforeAssoc());
- }
- strmOut << "\n";
-
- strmOut << "after ";
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << " ";
- }
- else
- ptman->LogInTable(strmOut, psloutTmp->AfterAssoc());
- }
- strmOut << "\n";
-
- for (int icomp = 0; icomp < ccomp; icomp++)
- {
- strmOut << "component " << icomp + 1 // 1=based
- << " ";
- for (islout = 0; islout < m_cslout; islout++)
- {
- GrSlotOutput * psloutTmp = m_prgslout + islout;
- if (psloutTmp->SpecialSlotFlag() == kspslLbInitial ||
- psloutTmp->SpecialSlotFlag() == kspslLbFinal)
- {
- strmOut << " ";
- }
- else if (icomp < psloutTmp->NumberOfComponents())
- ptman->LogInTable(strmOut, psloutTmp->UnderlyingComponent(icomp));
- else
- strmOut << " ";
- }
- strmOut << "\n";
- }
-#endif // TRACING
-}
-
-#ifdef TRACING
-/*----------------------------------------------------------------------------------------------
- Log the value of the association, if the slot changed.
-----------------------------------------------------------------------------------------------*/
-void GrSlotState::LogAssociation(GrTableManager * ptman,
- std::ostream & strmOut, int ipass, int iassoc, bool fBoth, bool fAfter)
-{
- if (m_ipassModified != ipass)
- {
- strmOut << " ";
- return;
- }
-
- if (fBoth)
- {
- GrSlotState * pslotBefore = (m_vpslotAssoc.size()) ? m_vpslotAssoc[0] : NULL;
- GrSlotState * pslotAfter = (m_vpslotAssoc.size()) ? m_vpslotAssoc.back() : NULL;
- // handle possible reprocessing
- while (pslotBefore && pslotBefore->PassModified() == m_ipassModified)
- pslotBefore = pslotBefore->m_pslotPrevState;
- while (pslotAfter && pslotAfter->PassModified() == m_ipassModified)
- pslotAfter = pslotAfter->m_pslotPrevState;
-
- int nBefore, nAfter;
-
-
- int csp = 4;
- if (pslotBefore)
- {
- nBefore = pslotBefore->m_islotTmpIn;
- strmOut << nBefore;
- if (nBefore > 99) csp--;
- if (nBefore > 9) csp--;
- }
- else
- {
- strmOut << "??";
- csp--;
- }
- if (pslotAfter)
- {
- nAfter = pslotAfter->m_islotTmpIn;
- strmOut << "/" << nAfter;
- if (nAfter > 99) csp--;
- if (nAfter > 9) csp--;
- }
- else
- {
- if (pslotBefore)
- {
- strmOut << "/" << "??";
- csp--;
- }
- else
- csp = 5;
- }
-
- for (int isp = 0; isp < csp; isp++)
- strmOut << " ";
- }
-
- else if (fAfter)
- {
- Assert(m_vpslotAssoc.size());
- GrSlotState * pslotAfter = m_vpslotAssoc.back();
- // handle possible reprocessing
- while (pslotAfter && pslotAfter->PassModified() == m_ipassModified)
- pslotAfter = pslotAfter->m_pslotPrevState;
-
- if (pslotAfter)
- {
- int nAfter = pslotAfter->m_islotTmpIn;
- ptman->LogInTable(strmOut, nAfter);
- }
- else
- strmOut << "?? ";
- }
- else if (iassoc < signed(m_vpslotAssoc.size()))
- {
- GrSlotState * pslot = m_vpslotAssoc[iassoc];
- // handle possible reprocessing
- while (pslot && pslot->PassModified() == m_ipassModified)
- pslot = pslot->m_pslotPrevState;
-
- if (pslot)
- {
- int n = pslot->m_islotTmpIn;
- ptman->LogInTable(strmOut, n);
- }
- else
- strmOut << "?? ";
- }
- else
- strmOut << " ";
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Write a directionality code to the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogDirCodeInTable(std::ostream & strmOut, int dirc)
-{
- switch (dirc)
- {
- case kdircUnknown: strmOut << "??? "; break;
- case kdircNeutral: strmOut << "ON "; break;
- case kdircL: strmOut << "L "; break;
- case kdircR: strmOut << "R "; break;
- case kdircRArab: strmOut << "AR "; break;
- case kdircEuroNum: strmOut << "EN "; break;
- case kdircEuroSep: strmOut << "ES "; break;
- case kdircEuroTerm: strmOut << "ET "; break;
- case kdircArabNum: strmOut << "AN "; break;
- case kdircComSep: strmOut << "CS "; break;
- case kdircWhiteSpace: strmOut << "WS "; break;
- case kdircBndNeutral: strmOut << "BN "; break;
- case kdircNSM: strmOut << "NSM "; break;
- case kdircLRO: strmOut << "LRO "; break;
- case kdircRLO: strmOut << "RLO "; break;
- case kdircLRE: strmOut << "LRE "; break;
- case kdircRLE: strmOut << "RLE "; break;
- case kdircPDF: strmOut << "PDF "; break;
- case kdircPdfL: strmOut << "PDF-L "; break;
- case kdircPdfR: strmOut << "PDF-R "; break;
- case kdircLlb: strmOut << "L "; break;
- case kdircRlb: strmOut << "R "; break;
- default: LogInTable(strmOut, dirc); break;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Write a breakweight code to the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogBreakWeightInTable(std::ostream & strmOut, int lb)
-{
- if (lb < 0)
- {
- lb = lb * -1;
- switch (lb)
- {
- case klbWsBreak: strmOut << "-ws "; break;
- case klbWordBreak: strmOut << "-word "; break;
- case klbHyphenBreak: strmOut << "-intra "; break;
- case klbLetterBreak: strmOut << "-lettr "; break;
- case klbClipBreak: strmOut << "-clip "; break;
- default: LogInTable(strmOut, lb); break;
- }
- }
- else
- {
- switch (lb)
- {
- case klbNoBreak: strmOut << "none "; break;
- case klbWsBreak: strmOut << "ws "; break;
- case klbWordBreak: strmOut << "word "; break;
- case klbHyphenBreak: strmOut << "intra "; break;
- case klbLetterBreak: strmOut << "letter "; break;
- case klbClipBreak: strmOut << "clip "; break;
- default: LogInTable(strmOut, lb); break;
- }
- }
-}
-
-#endif // TRACING
-
-#endif // XMLOMIT
-
-#ifdef TRACING
-/*----------------------------------------------------------------------------------------------
- Write an XML tag, leaving it open to possibly add attributes.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlTagOpen(std::ostream & strmOut, std::string strTag, size_t nIndent,
- bool fContent)
-{
- for (size_t i = 0; i < nIndent; i++)
- strmOut << " ";
-
- strmOut << "<" << strTag;
-}
-
-/*----------------------------------------------------------------------------------------------
- Write the termination of the opening XML tag.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlTagPostAttrs(std::ostream & strmOut,
- bool fContent)
-{
- if (fContent)
- strmOut << ">\n";
-}
-
-/*----------------------------------------------------------------------------------------------
- Write the closing form of the XML tag.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlTagClose(std::ostream & strmOut, std::string strTag, size_t nIndent,
- bool fContent)
-{
- if (fContent)
- {
- for (size_t i = 0; i < nIndent; i++)
- strmOut << " ";
- strmOut << "</" << strTag << ">\n";
- }
- else
- {
- strmOut << " />\n";
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Write an attribute/value pair inside of a tag.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlTagAttr(std::ostream & strmOut, std::string strAttr, int nValue,
- size_t nIndent)
-{
- char chBuf[20];
- itoa(nValue, chBuf, 10);
- LogXmlTagAttr(strmOut, strAttr, chBuf, nIndent);
-}
-
-void GrTableManager::LogXmlTagAttr(std::ostream & strmOut, std::string strAttr, const char * szValue,
- size_t nIndent)
-{
- if (nIndent > 0)
- {
- strmOut << "\n";
- for (size_t i = 0; i < nIndent + 2; i++)
- strmOut << " ";
- }
- else
- strmOut << " ";
-
- strmOut << strAttr << "=\"" << szValue << "\"";
-}
-
-void GrTableManager::LogXmlTagAttrHex(std::ostream & strmOut, std::string strAttr, int nValue,
- size_t nIndent)
-{
- char chBuf[20];
- chBuf[0] = chBuf[1] = chBuf[2] = '0';
- if (nValue < 0x10)
- itoa(nValue, chBuf+3, 16); // prepend 3 zeros
- else if (nValue < 0x100)
- itoa(nValue, chBuf+2, 16); // prepend 2 zeros
- else if (nValue < 0x1000)
- itoa(nValue, chBuf+1, 16); // prepend 1 zero
- else
- itoa(nValue, chBuf, 16);
- LogXmlTagAttr(strmOut, strAttr, chBuf, nIndent);
-}
-
-/*----------------------------------------------------------------------------------------------
- Concatenate the hex form of the given numbers into a string.
-----------------------------------------------------------------------------------------------*/
-std::string GrTableManager::HexString(std::vector<int> vn)
-{
- std::string strRet;
- for (size_t in = 0; in < vn.size(); in++)
- {
- char rgch[20];
- itoa(vn[in],rgch,16);
- strRet.append(rgch);
- if (in < vn.size() - 1)
- strRet.append(" ");
- }
- return strRet;
-}
-
-std::string GrTableManager::HexString(int n1, int n2, int n3, int n4, int n5, int n6)
-{
- std::vector<int> vn;
- if (n1 > 0)
- {
- vn.push_back(n1);
- if (n2 > 0)
- {
- vn.push_back(n2);
- if (n3 > 0)
- {
- vn.push_back(n3);
- if (n4 > 0)
- {
- vn.push_back(n4);
- if (n5 > 0)
- {
- vn.push_back(n5);
- if (n6 > 0)
- vn.push_back(n6);
- }
- }
- }
- }
- }
- return HexString(vn);
-}
-
-/*----------------------------------------------------------------------------------------------
- Write an attribute/value pair inside of a tag.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlTagColor(std::ostream & strmOut, std::string strAttr, int clrValue,
- bool fBack, size_t nIndent)
-{
- // Ignore black foreground and white background.
- if (!fBack && clrValue == kclrBlack)
- return;
- if (fBack && (clrValue == kclrWhite || clrValue == kclrTransparent))
- return;
-
- std::string strValue;
- char rgch[20];
- switch (clrValue)
- {
- case kclrBlack: strValue = "black"; break;
- case kclrWhite: strValue = "white"; break;
- case kclrRed: strValue = "red"; break;
- case kclrGreen: strValue = "green"; break;
- case kclrBlue: strValue = "blue"; break;
- case 0x00ffff: strValue = "yellow"; break;
- case 0xff00ff: strValue = "magenta"; break;
- case 0xffff00: strValue = "cyan"; break;
- default:
- rgch[0] = '#';
- itoa(clrValue, rgch+1, 16);
- strValue.assign(rgch);
- break;
- }
-
- LogXmlTagAttr(strmOut, strAttr, strValue.c_str(), nIndent);
-}
-
-/*----------------------------------------------------------------------------------------------
- Write a directionality code to the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlDirCode(std::ostream & strmOut, std::string strAttr, int dircValue,
- size_t nIndent)
-{
- std::string strValue;
- char rgch[20];
- switch (dircValue)
- {
- case kdircUnknown: strValue = "unknown"; break;
- case kdircNeutral: strValue = "ON"; break;
- case kdircL: strValue = "L"; break;
- case kdircR: strValue = "R"; break;
- case kdircRArab: strValue = "AR"; break;
- case kdircEuroNum: strValue = "EN"; break;
- case kdircEuroSep: strValue = "ES"; break;
- case kdircEuroTerm: strValue = "ET"; break;
- case kdircArabNum: strValue = "AN"; break;
- case kdircComSep: strValue = "CS"; break;
- case kdircWhiteSpace: strValue = "WS"; break;
- case kdircBndNeutral: strValue = "BN"; break;
- case kdircNSM: strValue = "NSM"; break;
- case kdircLRO: strValue = "LRO"; break;
- case kdircRLO: strValue = "RLO"; break;
- case kdircLRE: strValue = "LRE"; break;
- case kdircRLE: strValue = "RLE"; break;
- case kdircPDF: strValue = "PDF"; break;
- case kdircPdfL: strValue = "PDF-L"; break;
- case kdircPdfR: strValue = "PDF-R"; break;
- case kdircLlb: strValue = "L"; break;
- case kdircRlb: strValue = "R"; break;
- default:
- itoa(dircValue, rgch, 10);
- strValue.assign(rgch);
- break;
- }
- LogXmlTagAttr(strmOut, strAttr, strValue.c_str(), nIndent);
-}
-
-/*----------------------------------------------------------------------------------------------
- Write a breakweight code to the table.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlBreakWeight(std::ostream & strmOut, std::string strAttr, int lbValue,
- size_t nIndent)
-{
- std::string strValue;
- char rgch[20];
- if (lbValue < 0)
- {
- lbValue = lbValue * -1;
- switch (lbValue)
- {
- case klbWsBreak: strValue = "-ws"; break;
- case klbWordBreak: strValue = "-word"; break;
- case klbHyphenBreak: strValue = "-intra"; break;
- case klbLetterBreak: strValue = "-letter"; break;
- case klbClipBreak: strValue = "-clip"; break;
- default:
- itoa(lbValue * -1, rgch, 10);
- strValue.assign(rgch);
- break;
- }
- }
- else
- {
- switch (lbValue)
- {
- case klbNoBreak: strValue = "none"; break;
- case klbWsBreak: strValue = "ws"; break;
- case klbWordBreak: strValue = "word"; break;
- case klbHyphenBreak: strValue = "intra"; break;
- case klbLetterBreak: strValue = "letter"; break;
- case klbClipBreak: strValue = "clip"; break;
- default:
- itoa(lbValue, rgch, 10);
- strValue.assign(rgch);
- break;
- }
- }
- LogXmlTagAttr(strmOut, strAttr, strValue.c_str(), nIndent);
-}
-
-/*----------------------------------------------------------------------------------------------
- Add a comment to the log file.
-----------------------------------------------------------------------------------------------*/
-void GrTableManager::LogXmlComment(std::ostream & strmOut, std::string strComment,
- size_t nIndent)
-{
- for (size_t i = 0; i < nIndent; i++)
- strmOut << " ";
-
- strmOut << "<!-- " << strComment << " -->\n";
-}
-
-
-#endif // TRACING
-
-} // namespace gr
diff --git a/Build/source/libs/graphite-engine/src/segment/resource.h b/Build/source/libs/graphite-engine/src/segment/resource.h
deleted file mode 100644
index 775418f76bf..00000000000
--- a/Build/source/libs/graphite-engine/src/segment/resource.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by Graphite.rc
-//
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 101
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/Build/source/libs/graphite-engine/test/Makefile.am b/Build/source/libs/graphite-engine/test/Makefile.am
deleted file mode 100644
index 96570ad125a..00000000000
--- a/Build/source/libs/graphite-engine/test/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBDIRS = ProfileHarness RegressionTest
-EXTRA_DIST = fonterrors
diff --git a/Build/source/libs/graphite-engine/test/Makefile.in b/Build/source/libs/graphite-engine/test/Makefile.in
deleted file mode 100644
index 29d0d87eeb5..00000000000
--- a/Build/source/libs/graphite-engine/test/Makefile.in
+++ /dev/null
@@ -1,478 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = test
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-recursive \
- install-exec-recursive install-info-recursive \
- install-recursive installcheck-recursive installdirs-recursive \
- pdf-recursive ps-recursive uninstall-info-recursive \
- uninstall-recursive
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-GREP = @GREP@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LSB_RELEASE = @LSB_RELEASE@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-REL_CODENAME = @REL_CODENAME@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIZEOF_WCHAR_T = @SIZEOF_WCHAR_T@
-STRIP = @STRIP@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-SUBDIRS = ProfileHarness RegressionTest
-EXTRA_DIST = fonterrors
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign test/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
- -rm -f libtool
-uninstall-info-am:
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
- @failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
- if test -d $$d/$$file; then \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(mkdir_p) "$(distdir)/$$subdir" \
- || exit 1; \
- distdir=`$(am__cd) $(distdir) && pwd`; \
- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
- (cd $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$top_distdir" \
- distdir="$$distdir/$$subdir" \
- distdir) \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-libtool \
- distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-exec-am:
-
-install-info: install-info-recursive
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-info-am
-
-uninstall-info: uninstall-info-recursive
-
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
- clean clean-generic clean-libtool clean-recursive ctags \
- ctags-recursive distclean distclean-generic distclean-libtool \
- distclean-recursive distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-exec install-exec-am install-info \
- install-info-am install-man install-strip installcheck \
- installcheck-am installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic maintainer-clean-recursive \
- mostlyclean mostlyclean-generic mostlyclean-libtool \
- mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
- uninstall uninstall-am uninstall-info-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp b/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp
deleted file mode 100644
index 30bfac34a9f..00000000000
--- a/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp
+++ /dev/null
@@ -1,310 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: NPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is sila.mozdev.org code.
- *
- * The Initial Developer of the Original Code is
- * Keith Stribley.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the NPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the NPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include <graphite/GrClient.h>
-#include <graphite/ITextSource.h>
-#include <graphite/IGrJustifier.h>
-#include <graphite/IGrEngine.h>
-#include <graphite/SegmentAux.h>
-#include <graphite/Font.h>
-#include <graphite/Segment.h>
-#include <graphite/GraphiteProcess.h>
-#include <graphite/FileFont.h>
-
-#include "GrUtfTextSrc.h"
-
-
-
-GrUtfTextSrc::GrUtfTextSrc()
-: mLength(0),
- mBufferLength8(64), mBufferLength16(64), mBufferLength32(64),
- mData8(NULL), mData16(NULL), mData32(NULL),
- mType(gr::kutf16),
- mForeground(gr::kclrBlack), mBackground(gr::kclrTransparent),
- mSelectForeground(0), mSelectBackground(0),
- mIsSelected(false),
- mFont(NULL),
- mRtl(false)
-{
-
-}
-
-GrUtfTextSrc::~GrUtfTextSrc()
-{
- if (mData8) delete [] mData8;
- if (mData16) delete [] mData16;
- if (mData32) delete [] mData32;
- mSelectionVector.clear();
-}
-
-bool GrUtfTextSrc::setText(const char * pszText, int len)
-{
- return setText((gr::utf8*)pszText, len);
-}
-
-bool GrUtfTextSrc::setText(const gr::utf8 * pszText, int len)
-{
- mType = gr::kutf8;
- mLength = len;
- if (!checkBuffer8()) return false;
-
- for(size_t i = 0; i < mLength; i++)
- {
- mData8[i] = pszText[i];
- // stray line feeds and other control characters from the html file
- // cause artificial truncation of segments
- if (mData8[i] < 0x0020)//(pszText[i] == '\n' || pszText[i] == '\r')
- mData8[i] = 0x20; // ZWSP
- }
- mData8[mLength] = '\0'; // zero-terminate
- mSelectionVector.clear();
- mIsSelected = false;
- return true;
-}
-
-
-bool GrUtfTextSrc::setText(const gr::utf16 * pszText, int len)
-{
- mType = gr::kutf16;
- mLength = len;
- if (!checkBuffer16()) return false;
-
- for(size_t i = 0; i < mLength; i++)
- {
- mData16[i] = pszText[i];
- // stray line feeds and other control characters from the html file
- // cause artificial truncation of segments
- if (mData16[i] < 0x0020)//(pszText[i] == '\n' || pszText[i] == '\r')
- mData16[i] = 0x200B; // ZWSP
- }
- mData16[mLength] = '\0'; // zero-terminate
- mSelectionVector.clear();
- mIsSelected = false;
- return true;
-}
-
-bool GrUtfTextSrc::setText(const gr::utf32 * pszText, int len)
-{
- mType = gr::kutf32;
- mLength = len;
- if (!checkBuffer32()) return false;
-
- for(size_t i = 0; i < mLength; i++)
- {
- mData32[i] = pszText[i];
- }
- mData32[mLength] = '\0'; // zero-terminate
- mSelectionVector.clear();
- mIsSelected = false;
- return true;
-}
-
-bool GrUtfTextSrc::checkBuffer8(void)
-{
- if (!mData8 || mBufferLength8 < mLength + 1)
- {
- do
- {
- mBufferLength8 *= 2;
- } while (mBufferLength8 < mLength + 1);
- if (mData8) delete [] mData8;
- mData8 = new gr::utf8[mBufferLength8];
- }
- return (mData8) ? true : false;
-}
-
-bool GrUtfTextSrc::checkBuffer16(void)
-{
- if (!mData16 || mBufferLength16 < mLength + 1)
- {
- do
- {
- mBufferLength16 *= 2;
- } while (mBufferLength16 < mLength + 1);
- if (mData16) delete [] mData16;
- mData16 = new gr::utf16[mBufferLength16];
- }
- return (mData16) ? true : false;
-}
-
-bool GrUtfTextSrc::checkBuffer32(void)
-{
- if (!mData32 || mBufferLength32 < mLength + 1)
- {
- do
- {
- mBufferLength32 *= 2;
- } while (mBufferLength32 < mLength + 1);
- if (mData32) delete [] mData32;
- mData32 = new gr::utf32[mBufferLength32];
- }
- return (mData32) ? true : false;
-}
-
-size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchwBuffer)
-{
- assert(cch <= mLength);
- if (cch > mLength)
- {
- return 0;
- }
- std::copy(mData8 + ichMin, mData8 + ichMin + cch, prgchwBuffer);
- return (cch - ichMin);
-}
-
-size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer)
-{
- assert(cch <= mLength);
- if (cch > mLength)
- {
- return 0;
- }
- std::copy(mData16 + ichMin, mData16 + ichMin + cch, prgchwBuffer);
- return (cch - ichMin);
-}
-
-size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchwBuffer)
-{
- assert(cch <= mLength);
- if (cch > mLength)
- {
- return 0;
- }
- std::copy(mData32 + ichMin, mData32 + ichMin + cch, prgchwBuffer);
- return (cch - ichMin);
-}
-
-
-bool GrUtfTextSrc::getRightToLeft(gr::toffset ich)
-{
- return mRtl; // assumes src only contains one direction
-}
-
-unsigned int GrUtfTextSrc::getDirectionDepth(gr::toffset ich)
-{
- return (mRtl) ? 1 : 0; // TBD
-}
-
-std::pair<gr::toffset, gr::toffset> GrUtfTextSrc::propertyRange(gr::toffset ich)
-{
- std::pair<gr::toffset, gr::toffset> range(0, mLength);
- if (mIsSelected)
- {
- bool selectState = mSelectionVector[ich];
- // find start
- int s = ich - 1;
- int e = ich + 1;
- if (s > -1)
- for ( ; s >= 0; s--)
- {
- if (mSelectionVector[s] != selectState)
- {
- s++; // backup
- break;
- }
- }
- if (s < 0) s = 0;
- // find end
- for ( ; e < static_cast<int>(mLength); e++)
- {
- if (mSelectionVector[e] != selectState)
- {
- // don't need to backup for end
- break;
- }
- }
- range.first = s;
- range.second = e;
- }
- return range;
-}
-
-size_t GrUtfTextSrc::getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset)
-{
- return 0;
-}
-
-void GrUtfTextSrc::getColors(gr::toffset ich, int * pclrFore, int * pclrBack)
-{
- // selections are handled here
- if (mIsSelected && mSelectionVector[ich])
- {
- *pclrFore = mSelectForeground;
- *pclrBack = mSelectBackground;
- }
- else
- {
- *pclrFore = mForeground;
- *pclrBack = mBackground;
- }
-}
-
-
-// these should be called I hope
-float
-GrUtfTextSrc::getFontSize(gr::toffset ich)
-{
- assert(mFont);
- return mPointSize;
-}
-
-bool
-GrUtfTextSrc::getBold(gr::toffset ich)
-{
- assert(mFont);
-// NS_ASSERTION(false, "unexpected call to getBold");
-// return false;
- return mFont->bold();
-}
-
-bool
-GrUtfTextSrc::getItalic(gr::toffset ich)
-{
- assert(mFont);
- //NS_ASSERTION(false, "unexpected call to getItalic");
- //return false;
- return mFont->italic();
-}
-
-gr::isocode GrUtfTextSrc::getLanguage(gr::toffset ich)
-{
- gr::isocode unknown;
- std::fill_n(unknown.rgch, 4, '\0');
- return unknown;
-}
-
diff --git a/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.h b/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.h
deleted file mode 100644
index cae0a4850b5..00000000000
--- a/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: NPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is sila.mozdev.org code.
- *
- * The Initial Developer of the Original Code is
- * Keith Stribley.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the NPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the NPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRUTFTXTSRC_INCLUDED
-#define GRUTFTXTSRC_INCLUDED
-
-#include <vector>
-#include <assert.h>
-
-#include <graphite/GrAppData.h>
-#include <graphite/GrStructs.h>
-#include <graphite/ITextSource.h>
-
-class nsIGrSegWrapper;
-
-/*-----------------------------------------------------------------------------
- Class: ITextSource
- This class provides an interface of a text source for the Graphite engine.
-------------------------------------------------------------------------------*/
-class GrUtfTextSrc : public gr::IColorTextSource
-{
-public:
- GrUtfTextSrc();
- ~GrUtfTextSrc();
- bool setText(const gr::utf8 * pszText, int len);
- bool setText(const char * pszText, int len);
- bool setText(const gr::utf16 * pszText, int len);
- bool setText(const gr::utf32 * pszText, int len);
- void setColors(int foreground, int background)
- {
- mForeground = foreground;
- mBackground = background;
- };
- //void setSelectionDetails(nsIGrSegWrapper * wrapper);
- void setFont(gr::Font * font) { mFont = font; };
- void setPointSize(float & pointSize) { mPointSize = pointSize; };
- // --------------------------------------------------------------------------
- // New V2 interface:
-
- virtual gr::UtfType utfEncodingForm() { return mType; };
- virtual size_t getLength() { return mLength; };
- virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchBuffer);
- virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer);
- virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchsBuffer);
- virtual gr::GrResult getFaceName(int ich, unsigned int cchMax,
- gr::utf16 * prgchFaceName, unsigned int * pcchLen)
- {
- prgchFaceName[0] = 0;
- *pcchLen = 0;
- return gr::kresNotImpl;
- };
- //virtual std::wstring getFaceName(int ich) { return mFont->getFaceName(); };
- virtual float getFontSize(gr::toffset ich);
- virtual bool getBold(gr::toffset ich);
- virtual bool getItalic(gr::toffset ich);
- virtual bool getRightToLeft(gr::toffset ich);
- virtual unsigned int getDirectionDepth(gr::toffset ich);
- virtual float getVerticalOffset(gr::toffset ich) { return 0;};
- virtual gr::isocode getLanguage(gr::toffset ich);
-
- virtual std::pair<gr::toffset, gr::toffset> propertyRange(gr::toffset ich);
- virtual size_t getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset);
- virtual bool sameSegment(gr::toffset ich1, gr::toffset ich2) { return true; };
-
-protected:
- bool checkBuffer8();
- bool checkBuffer16();
- bool checkBuffer32();
-
-private:
- size_t mLength;
- size_t mBufferLength8;
- size_t mBufferLength16;
- size_t mBufferLength32;
- gr::utf8 * mData8;
- gr::utf16 * mData16;
- gr::utf32 * mData32;
- gr::UtfType mType;
- int mForeground;
- int mBackground;
- int mSelectForeground;
- int mSelectBackground;
- bool mIsSelected;
- std::wstring mFaceName;
- std::vector<bool> mSelectionVector;
- gr::Font * mFont;
- bool mRtl;
- float mPointSize;
-
-public: // methods that will go
- // Temporary--eventually these will be of interest only to SegmentPainter.
- virtual void getColors(gr::toffset ich, int * pclrFore, int * pclrBack);
-
- // Shouldn't be here!
- virtual gr::GrResult Fetch(int ichMin, int ichLim, gr::utf16 * prgchBuf) { return gr::kresNotImpl; };
- virtual gr::GrResult get_Length(int * pcch) { return gr::kresNotImpl; };
- virtual gr::GrResult GetFontVariations(int ich,
- wchar_t * prgchFontVar, int ichMax, int * pich,
- int * pichMin, int * pichLim) { return gr::kresNotImpl; };
-
-};
-
-
-#if !defined(GR_NAMESPACE)
-using namespace gr;
-#endif
-
-#endif // !GRUTFTXTSRC_INCLUDED
-
diff --git a/Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.am b/Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.am
deleted file mode 100644
index 07d07348eff..00000000000
--- a/Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.am
+++ /dev/null
@@ -1,14 +0,0 @@
-AUTOMAKE_OPTIONS = 1.6
-
-noinst_PROGRAMS = profile-graphite
-
-AM_CPPFLAGS = -I$(top_srcdir)/include
-
-profile_graphite_LDFLAGS = -L$(top_builddir)/src -lgraphite
-
-profile_graphite_SOURCES = \
- GrUtfTextSrc.cpp GrUtfTextSrc.h \
- ProfileHarness.cpp
-
-#dist-hook:
-# rm -f grregtest.log tracelog.txt
diff --git a/Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.in b/Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.in
deleted file mode 100644
index a9d264683b2..00000000000
--- a/Build/source/libs/graphite-engine/test/ProfileHarness/Makefile.in
+++ /dev/null
@@ -1,447 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ../..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = profile-graphite$(EXEEXT)
-subdir = test/ProfileHarness
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_profile_graphite_OBJECTS = GrUtfTextSrc.$(OBJEXT) \
- ProfileHarness.$(OBJEXT)
-profile_graphite_OBJECTS = $(am_profile_graphite_OBJECTS)
-profile_graphite_LDADD = $(LDADD)
-DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(profile_graphite_SOURCES)
-DIST_SOURCES = $(profile_graphite_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-GREP = @GREP@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LSB_RELEASE = @LSB_RELEASE@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-REL_CODENAME = @REL_CODENAME@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIZEOF_WCHAR_T = @SIZEOF_WCHAR_T@
-STRIP = @STRIP@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-AUTOMAKE_OPTIONS = 1.6
-AM_CPPFLAGS = -I$(top_srcdir)/include
-profile_graphite_LDFLAGS = -L$(top_builddir)/src -lgraphite
-profile_graphite_SOURCES = \
- GrUtfTextSrc.cpp GrUtfTextSrc.h \
- ProfileHarness.cpp
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .cpp .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/ProfileHarness/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign test/ProfileHarness/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstPROGRAMS:
- @list='$(noinst_PROGRAMS)'; for p in $$list; do \
- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f $$p $$f"; \
- rm -f $$p $$f ; \
- done
-profile-graphite$(EXEEXT): $(profile_graphite_OBJECTS) $(profile_graphite_DEPENDENCIES)
- @rm -f profile-graphite$(EXEEXT)
- $(CXXLINK) $(profile_graphite_LDFLAGS) $(profile_graphite_OBJECTS) $(profile_graphite_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrUtfTextSrc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProfileHarness.Po@am__quote@
-
-.cpp.o:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
- -rm -f libtool
-uninstall-info-am:
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
- if test -d $$d/$$file; then \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-libtool distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am:
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstPROGRAMS ctags distclean \
- distclean-compile distclean-generic distclean-libtool \
- distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-exec \
- install-exec-am install-info install-info-am install-man \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
- pdf pdf-am ps ps-am tags uninstall uninstall-am \
- uninstall-info-am
-
-
-#dist-hook:
-# rm -f grregtest.log tracelog.txt
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Build/source/libs/graphite-engine/test/ProfileHarness/ProfileHarness.cpp b/Build/source/libs/graphite-engine/test/ProfileHarness/ProfileHarness.cpp
deleted file mode 100644
index 361d6a6b734..00000000000
--- a/Build/source/libs/graphite-engine/test/ProfileHarness/ProfileHarness.cpp
+++ /dev/null
@@ -1,476 +0,0 @@
-/*-----------------------------------------------------------------------------
-Copyright (C) 2007 SIL International
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File:
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
-A simple console app that creates a segment using FileFont and dumps a
-diagnostic table of the resulting glyph vector to the console.
-If graphite has been built with -DTRACING then it will also produce a
-diagnostic log of the segment creation in grSegmentLog.txt
------------------------------------------------------------------------------*/
-
-//#include <stdlib.h>
-#include <stdio.h>
-#include <assert.h>
-#include <iostream>
-#include <iomanip>
-#include <string>
-#include <sstream>
-#include <cstring>
-
-#include <graphite/GrClient.h>
-#include <graphite/ITextSource.h>
-///#include <graphite/IGrJustifier.h>
-#include <graphite/IGrEngine.h>
-#include <graphite/SegmentAux.h>
-#include <graphite/Font.h>
-#include <graphite/Segment.h>
-#include <graphite/GraphiteProcess.h>
-#include <graphite/FileFont.h>
-
-#include "GrUtfTextSrc.h"
-
-typedef std::pair< gr::GlyphIterator, gr::GlyphIterator > GlyphRange;
-
-#ifndef HAVE_STRTOF
-float strtof(char * text, char ** ignore)
-{
- return static_cast<float>(atof(text));
-}
-#endif
-
-#ifndef HAVE_STRTOL
-long strtol(char * text, char ** ignore)
-{
- return atol(text);
-}
-#endif
-
-struct Parameters
-{
- const char * textFile;
- const char * fontFile;
- float pointSize;
- int dpi;
- bool lineStart;
- bool lineEnd;
- bool useLineFill;
- bool useCodes;
- float width;
- int textArgIndex;
- gr::utf16 * pText16;
- gr::utf32 * pText32;
- size_t charLength;
- size_t offset;
-};
-
-#ifdef HAVE_ICONV
-void
-convertUtf8ToUtf32(char* pText, Parameters & parameters)
-{
- int length = strlen(reinterpret_cast<char*>(pText));
- //gr::utf8 * pText = reinterpret_cast<gr::utf8*>(argv[2]);
- // convert text to utf32 using iconv because its easier to debug string placements
- size_t bytesLeft = length;
- size_t outBytesLeft = (length + 1) * sizeof(gr::utf32);
- size_t outBufferSize = outBytesLeft;
- gr::utf32 * text32 = new gr::utf32[length + 1];
- iconv_t utf8to32 = iconv_open("utf32","utf8");
- assert(utf8to32 != (iconv_t)(-1));
- char * pText32 = reinterpret_cast<char*>(&text32[0]);
- size_t convertLength = iconv(utf8to32, &pText, &bytesLeft, &pText32, &outBytesLeft);
- if (convertLength == size_t(-1)) perror("iconv failed:");
- size_t charLength = (outBufferSize - outBytesLeft) / sizeof(gr::utf32);
- assert(convertLength != size_t(-1));
- // size_t offset = 0;
- // offset by 1 to avoid bom
- if (text32[0] == 0xfeff)
- {
- parameters.offset = 1;
- charLength--;
- }
- std::cout << "String has " << charLength << " characters (" << length << " bytes)" << std::endl;
- size_t ci;
- for (ci = 0; ci < 10 && ci < charLength; ci++)
- {
- std::cout << std::setw(4) << ci << '\t';
- }
- std::cout << std::endl;
- for (ci = 0; ci < charLength; ci++)
- {
- std::cout << std::setw(4) << std::hex
- << text32[ci+parameters.offset] << '\t';
- if (((ci + 1) % 10) == 0) std::cout << std::endl;
- }
- std::cout << std::endl;
- parameters.charLength = charLength;
- parameters.pText32 = text32;
- iconv_close(utf8to32);
-}
-#endif
-
-bool parseArgs(int argc, char *argv[], Parameters & parameters)
-{
- int mainArgOffset = 0;
- bool argError = false;
- char* pText = NULL;
- typedef enum
- {
- NONE,
- POINT_SIZE,
- DPI,
- LINE_START,
- LINE_END,
- LINE_FILL,
- CODES
- } TestOptions;
- TestOptions option = NONE;
- char * pIntEnd = NULL;
- char * pFloatEnd = NULL;
- long lTestSize = 0;
- float fTestSize = 0.0f;
- for (int a = 1; a < argc; a++)
- {
- switch (option)
- {
- case DPI:
- pIntEnd = NULL;
- lTestSize = strtol(argv[a],&pIntEnd, 10);
- if (lTestSize > 0 && lTestSize < INT_MAX && lTestSize != LONG_MAX)
- {
- parameters.dpi = lTestSize;
- }
- else
- {
- fprintf(stderr,"Invalid dpi %s\n", argv[a]);
- }
- option = NONE;
- break;
- case POINT_SIZE:
- pFloatEnd = NULL;
- fTestSize = strtof(argv[a],&pFloatEnd);
- // what is a reasonable maximum here
- if (fTestSize > 0 && fTestSize < 5000.0f)
- {
- parameters.pointSize = fTestSize;
- }
- else
- {
- fprintf(stderr,"Invalid point size %s\n", argv[a]);
- argError = true;
- }
- option = NONE;
- break;
- case LINE_FILL:
- pFloatEnd = NULL;
- fTestSize = strtof(argv[a],&pFloatEnd);
- // what is a good max width?
- if (fTestSize > 0 && fTestSize < 10000)
- {
- parameters.width = fTestSize;
- }
- else
- {
- fprintf(stderr,"Invalid line width %s\n", argv[a]);
- argError = true;
- }
- option = NONE;
- break;
- default:
- option = NONE;
- if (argv[a][0] == '-')
- {
- if (strcmp(argv[a], "-pt") == 0)
- {
- option = POINT_SIZE;
- }
- else if (strcmp(argv[a], "-dpi") == 0)
- {
- option = DPI;
- }
- else if (strcmp(argv[a], "-ls") == 0)
- {
- option = NONE;
- parameters.lineStart = true;
- }
- else if (strcmp(argv[a], "-le") == 0)
- {
- option = NONE;
- parameters.lineEnd = true;
- }
- else if (strcmp(argv[a], "-linefill") == 0)
- {
- option = LINE_FILL;
- parameters.useLineFill = true;
- }
- else if (strcmp(argv[a], "-codes") == 0)
- {
- option = NONE;
- parameters.useCodes = true;
- // must be less than argc
- parameters.pText32 = new gr::utf32[argc];
- printf("\nText codes\n");
- }
- else
- {
- argError = true;
- fprintf(stderr,"Unknown option %s\n",argv[a]);
- }
- }
- else if (mainArgOffset == 0)
- {
- parameters.textFile = argv[a];
- mainArgOffset++;
- }
- else if (mainArgOffset == 1)
- {
- parameters.fontFile = argv[a];
- mainArgOffset++;
- }
- else if (parameters.useCodes)
- {
- pIntEnd = NULL;
- mainArgOffset++;
- gr::utf32 code = strtol(argv[a],&pIntEnd, 16);
- if (code > 0)
- {
- parameters.pText32[parameters.charLength++] = code;
- if (parameters.charLength % 10 == 0)
- printf("%4x\n",code);
- else
- printf("%4x\t",code);
- }
- else
- {
- fprintf(stderr,"Invalid dpi %s\n", argv[a]);
- }
- }
- else if (mainArgOffset == 1)
- {
- mainArgOffset++;
- pText = argv[a];
- parameters.textArgIndex = a;
- }
- else
- {
- argError = true;
- fprintf(stderr,"too many arguments %s\n",argv[a]);
- }
- }
- }
- if (mainArgOffset < 2) argError = true;
- else
- {
- if (!parameters.useCodes && pText != NULL)
- {
-#ifdef HAVE_ICONV
- convertUtf8ToUtf32(pText, parameters);
-#else
- fprintf(stderr,"Only the -codes option is supported on Win32\r\n");
- argError = true;
-#endif
- }
- else
- {
- ///parameters.pText32[parameters.charLength] = 0;
- printf("\n");
- }
- }
- return (argError) ? false : true;
-}
-
-
-void initParameters(Parameters & parameters)
-{
- parameters.textFile = "";
- parameters.fontFile = "";
- parameters.pointSize = 12.0f;
- parameters.dpi = 72;
- parameters.lineStart = false;
- parameters.lineEnd = false;
- parameters.useLineFill = false;
- parameters.useCodes = false;
- parameters.width = 100.0f;
- parameters.pText16 = NULL;
- parameters.pText32 = NULL;
- parameters.textArgIndex = 0;
- parameters.charLength = 0;
- parameters.offset = 0;
-}
-
-
-
-int runGraphite(Parameters parameters)
-{
- int returnCode = 0;
- FILE * file = fopen(parameters.fontFile, "rb");
- gr::FileFont * fileFont = NULL;
-
- // Put the text into an array of string, each string is one paragraph.
- std::ifstream textFileStrm(parameters.textFile);
- std::cout << "FILE: " << parameters.textFile << "\n";
- std::string stringArray[100];
-
- std::stringbuf buf;
- textFileStrm >> &buf;
- std::cout << "read " << buf.str().length() << " characters" << std::endl;
- std::cout << "====BEGIN===" << buf.str() << "====END====" << std::endl;
- const std::string strTemp = buf.str();
- stringArray[0] = strTemp;
- int cpara = 1;
-
- try
- {
- if (file)
- {
- fileFont = new gr::FileFont(file, parameters.pointSize, parameters.dpi);
- if (!fileFont || !fileFont->isValid())
- {
- fprintf(stderr,"graphitejni:Invalid font!");
- delete fileFont;
- fileFont = NULL;
- return 2;
- }
- printf("Font: %s bold=%d italic=%d %4.1fpt dpi %d\n",
- parameters.fontFile,
- fileFont->bold(), fileFont->italic(),
- parameters.pointSize, parameters.dpi);
- bool isGraphite = fileFont->fontHasGraphiteTables();
- if (!isGraphite)
- {
- fprintf(stderr,"graphitejni: %s does not have graphite tables",
- parameters.fontFile);
- delete fileFont;
- fileFont = NULL;
- return 3;
- }
- }
- else
- {
- fprintf(stderr, "Failed to open %s\n", parameters.fontFile);
- return 4;
- }
-
- for (int ipara = 0; ipara < cpara; ipara++)
- {
- GrUtfTextSrc textSrc;
- gr::LayoutEnvironment layout;
-
- textSrc.setText(stringArray[ipara].data(), stringArray[ipara].length());
- textSrc.setPointSize(parameters.pointSize);
- textSrc.setFont(fileFont);
-
- layout.setStartOfLine(parameters.lineStart);
- layout.setEndOfLine(parameters.lineEnd);
- layout.setDumbFallback(true);
- layout.setJustifier(NULL);
-
- gr::Segment * pSegment = NULL;
- //try
- //{
- if (parameters.useLineFill)
- {
- pSegment = new gr::LineFillSegment(fileFont, &textSrc, &layout,
- 0, stringArray[ipara].length(),
- parameters.width);
- printf("LineFillSegment overing char %d - %d\nline start=%d line end=%d\n",
- pSegment->startCharacter(), pSegment->stopCharacter(),
- parameters.lineStart, parameters.lineEnd);
- }
- else
- {
- pSegment = new gr::RangeSegment(fileFont, &textSrc, &layout,
- 0, stringArray[ipara].length());
- printf("RangeSegment covering char %d - %d\nline start=%d line end=%d\n",
- pSegment->startCharacter(), pSegment->stopCharacter(),
- parameters.lineStart, parameters.lineEnd);
- }
- //}
- //catch (...)
- //{
- // printf("Exception occurred while creating segment\n");
- // returnCode = 5;
- // throw;
- //}
-
- if (!pSegment) return returnCode;
-
- // for justifier testing
- /*
- gr::GrJustifier justifier;
- pSegment->SetJustifier(&justifier);
- gr::Segment * justified = gr::Segment::JustifiedSegment(*pSegment, 2.0f * advanceWidth);
- delete justified;
- */
-
- delete pSegment;
- }
- }
- catch (...)
- {
- printf("Exception occurred\n");
- returnCode = 5;
- }
-
- delete fileFont;
-
- return returnCode;
-}
-
-#ifdef WIN32
-
-int _tmain(int argc, _TCHAR* argv[])
-{
- Parameters parameters;
- initParameters(parameters);
-
- if (!parseArgs(argc, argv, parameters))
- {
- fprintf(stderr,"Usage: %s [options] textfile fontfile \n",argv[0]);
- return 1;
- }
- // UTF16 arguments
- //if (parameters.textArgIndex > 0)
- //{
- // parameters.pText16 = reinterpret_cast<wchar_t*>(argv[parameters.textArgIndex]);
- // std::wstring text(parameters.pText16);
- // parameters.charLength = text.size();
- // for (int i = 0; i < text.size(); i++)
- // {
- // if (i % 10 == 0)
- // printf("\r\n%4x", text[i]);
- // else
- // printf("\t%4x", text[i]);
- // }
- //}
- //else
- //{
- // assert(parameters.pText32);
- //}
-
- return runGraphite(parameters);
-}
-
-#else
-
-int main(int argc, char *argv[])
-{
-
- Parameters parameters;
- initParameters(parameters);
-
- if (!parseArgs(argc, argv, parameters))
- {
- fprintf(stderr,"Usage: %s [options] textfile fontfile \n",argv[0]);
- return 1;
- }
- return runGraphite(parameters);
-}
-
-#endif
diff --git a/Build/source/libs/graphite-engine/test/ProfileHarness/makefile.vc b/Build/source/libs/graphite-engine/test/ProfileHarness/makefile.vc
deleted file mode 100644
index 5f42ba97b3b..00000000000
--- a/Build/source/libs/graphite-engine/test/ProfileHarness/makefile.vc
+++ /dev/null
@@ -1,111 +0,0 @@
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-
-!IF "$(CFG)" == ""
-CFG=DEBUG
-!ENDIF
-
-!IF "$(CFG)" == "RELEASE"
-
-OUTDIR=.\release
-INTDIR=.\release_temp
-
-all : "$(OUTDIR)\ProfileHarness.exe"
-
-clean :
- @- rd /s/q .\release_temp
-
-realclean : clean
- @- rd /s/q .\release
-
-CPP_PROJ=/nologo /MT /W3 /GR /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /c
-LINK32_FLAGS=kernel32.lib user32.lib advapi32.lib shell32.lib uuid.lib graphite.lib /nologo /subsystem:console /incremental:no /machine:I386 /out:"$(OUTDIR)\ProfileHarness.exe" /libpath:"..\..\release"
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\ProfileHarness.bsc"
-
-!ELSEIF "$(CFG)" == "DEBUG"
-
-OUTDIR=.\debug
-INTDIR=.\debug_temp
-
-all : "$(OUTDIR)\ProfileHarness.exe" "$(OUTDIR)\ProfileHarness.bsc"
-
-clean :
- @- rd /s/q .\debug_temp
-
-realclean : clean
- @- rd /s/q .\debug
-
-CPP_PROJ=/nologo /MTd /W3 /Gm /GR /GX /GZ /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"$(INTDIR)\\" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /c
-LINK32_FLAGS=kernel32.lib user32.lib advapi32.lib shell32.lib uuid.lib graphite.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\ProfileHarness.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ProfileHarness.exe" /libpath:"..\..\debug"
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\ProfileHarness.bsc"
-
-!ENDIF
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-"$(INTDIR)" :
- if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
-
-.cpp{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-{$(APPLIB)}.cpp{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-{$(APPLIB)}.cpp{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-{$(TEXTSRCDIR)}.cpp{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-{$(TEXTSRCDIR)}.cpp{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-
-CPP=cl.exe
-RSC=rc.exe
-BSC32=bscmake.exe
-LINK32=link.exe
-
-LINK32_OBJS= \
- "$(INTDIR)\ProfileHarness.obj" \
- "$(INTDIR)\GrUtfTextSrc.obj" \
-
-"$(OUTDIR)\ProfileHarness.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
- $(LINK32) @<<
- $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
-
-BSC32_SBRS= \
- "$(INTDIR)\ProfileHarness.sbr" \
- "$(INTDIR)\GrUtfTextSrc.sbr"
-
-"$(OUTDIR)\ProfileHarness.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
- $(BSC32) @<<
- $(BSC32_FLAGS) $(BSC32_SBRS)
-<<
-
-
-"$(INTDIR)\ProfileHarness.obj" "$(INTDIR)\ProfileHarness.sbr" : ".\ProfileHarness.cpp" "$(INTDIR)"
-"$(INTDIR)\GrTxtSrc.obj" "$(INTDIR)\GrUtfTextSrc.sbr" : ".\GrUtfTextSrc.cpp" "$(INTDIR)"
-
-
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.cpp b/Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.cpp
deleted file mode 100644
index 566811c9907..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.cpp
+++ /dev/null
@@ -1,566 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2003 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrJustifier.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A default justification agent for Graphite.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-//#include "main.h" // This is used by clients, so main.h is not available
-
-#pragma hdrstop
-// any other headers (not precompiled)
-#include "GrClient.h"
-#include "ITextSource.h"
-#include "IGrJustifier.h"
-#include "GraphiteProcess.h"
-#include "GrDebug.h"
-
-#include "GrJustifier.h"
-
-#ifdef WIN32
-#include <string>
-#endif
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:>********************************************************************************************
-//:> Global constants
-//:>********************************************************************************************
-
-const int g_cnPrimes = 7;
-static const int g_rgnPrimes[] =
-{
- 2, 3, 5, 7, 11, 13, 17, // these primes will allow a range of weights up to 255
- // 19, 23, 31, 37, 41, 43, 47, 53, 59, 61
-};
-
-//:>********************************************************************************************
-//:> Forward declarations
-//:>********************************************************************************************
-
-//:>********************************************************************************************
-//:> Methods
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Constructors.
-----------------------------------------------------------------------------------------------*/
-GrJustifier::GrJustifier()
-{
- m_cref = 1; // COM-like behavior
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-GrJustifier::~GrJustifier()
-{
-}
-
-/*----------------------------------------------------------------------------------------------
- Determine how to adjust the widths of the glyphs to get a justified effect.
- Return kresFalse if we can't achieve the desired width.
-----------------------------------------------------------------------------------------------*/
-gr::GrResult GrJustifier::adjustGlyphWidths(gr::GraphiteProcess * pgje,
- int iGlyphMin, int iGlyphLim,
- float dxCurrentWidthArg, float dxDesiredWidthArg)
-{
- if (dxCurrentWidthArg == dxDesiredWidthArg)
- return gr::kresOk; // no stretch needed
-
- int dxCurrentWidth = (int)dxCurrentWidthArg;
- int dxDesiredWidth = (int)dxDesiredWidthArg;
-
- bool fShrinking = (dxDesiredWidth < dxCurrentWidth);
-
- // First, get the relevant values for each glyph out of the Graphite engine.
-
- int dxsStretchAvail = 0;
- std::vector<int> viGlyphs;
- std::vector<int> vdxStretchLeft;
- std::vector<int> vdxStep;
- std::vector<int> vnWeight;
- std::vector<int> vdxWidth;
- std::vector<int> vdxStretchOrig;
- bool fStep = false;
- int nMaxWt = 1;
- int cUnits = 0; // glyph-weight units
- int cStretchable = 0;
- for (int iGlyph = iGlyphMin; iGlyph < iGlyphLim; iGlyph++)
- {
- int dx;
- pgje->getGlyphAttribute(iGlyph,
- (fShrinking ? gr::kjgatShrink : gr::kjgatStretch), 1, &dx);
- if (dx > 0)
- {
- int dxStep = 0;
- pgje->getGlyphAttribute(iGlyph, gr::kjgatStep, 1, &dxStep);
- if (fShrinking)
- dxStep = (dxStep > 0) ? 0 : dxStep; // step is applicable if it is negative
- else // stretching
- dxStep = (dxStep < 0) ? 0 : dxStep; // step is applicable if it is positive
- if (dxStep != 0)
- {
- // Get the actual number of steps allowed. This is more accurate than
- // trying to calculate it, due to rounding when converting between
- // font units and pixels.
- int cSteps;
- pgje->getGlyphAttribute(iGlyph, gr::kjgatStretchInSteps, 1, &cSteps);
- dx = abs(dxStep * cSteps);
- fStep = true;
- }
- dxStep = abs(dxStep);
-
- int nWt;
- pgje->getGlyphAttribute(iGlyph, gr::kjgatWeight, 1, &nWt);
- nWt = max(nWt, 0);
- nMaxWt = max(nMaxWt, nWt);
-
- viGlyphs.push_back(iGlyph);
- vdxStretchLeft.push_back(dx);
- vdxStep.push_back(dxStep);
- vnWeight.push_back(nWt);
- vdxWidth.push_back(0);
- vdxStretchOrig.push_back(dx);
-
- dxsStretchAvail += dx;
- cUnits += nWt;
- cStretchable++;
- }
- }
-
- int dxStretchNeeded = dxDesiredWidth - dxCurrentWidth;
- if (fShrinking)
- dxStretchNeeded *= -1; // always a positive number
- int dxStretchAchieved = 0;
- bool fIgnoreStepGlyphs = false;
- int iiGlyph;
- std::vector<int> vnMFactor;
-
- if (viGlyphs.size() > 0)
- {
-
- // The way weights are handled is the following: we calculate the least common multiple
- // of all the weights, and then scale each stretch value accordingly before distributing
- // widths. In other words, we put the stretch values into an alternate "common" scaled
- // system based on the LCM. "cUnits" represents the total number of stretch-units
- // available, where each glyph contributes a number of units equal to its weight.
- // To get into this scaled system, small-weight stretches are scaled by a large amount
- // and large-weight stretches are scaled by a small amount. After assigning the width,
- // we do the reverse scaling on that width. Since large-weight stretches are scaled
- // back by less, this results in more width being assigned to glyphs with a large weight.
-
- int nLcm = 1;
- if (nMaxWt > 1)
- nLcm = Lcm(vnWeight, vnMFactor);
- else
- {
- vnMFactor.push_back(1); // weight 0 - bogus
- vnMFactor.push_back(1); // weight 1
- }
-
- // Loop over the glyphs until we have assigned all the available space. (If a small amount
- // is left over it will be distributed using a special method.)
-
-LMainLoop:
-
- int dxStretchStillNeeded = dxStretchNeeded - dxStretchAchieved;
- int dxNonStepMore = 0;
- int dxNonStepLess = 0;
- while (cUnits > 0 && dxStretchStillNeeded >= cStretchable)
- // && dxStretchStillNeeded * nLcm >= cUnits)
- {
- // This is the scaled stretch per glyph, that is, in the scaled system of the LCM.
- int dxwStretchPerGlyph = dxStretchStillNeeded * nLcm / cUnits;
-
- // Recalculate these for the next round:
- cUnits = 0;
- cStretchable = 0;
-
- for (iiGlyph = 0; iiGlyph < (signed)viGlyphs.size(); iiGlyph++)
- {
- if (vdxStep[iiGlyph] > 0 && fIgnoreStepGlyphs)
- continue; // leave step-glyphs as they are
-
- int nWt = vnWeight[iiGlyph];
- int dxwThis = vdxStretchLeft[iiGlyph] * vnMFactor[nWt]; // weighted stretch
- dxwThis = min(dxwStretchPerGlyph, dxwThis);
- int dxThis = dxwThis / vnMFactor[nWt]; // scale back to unweighted stretch
- vdxWidth[iiGlyph] += dxThis;
- dxStretchAchieved += dxThis;
- vdxStretchLeft[iiGlyph] -= dxThis;
- if (vdxStretchLeft[iiGlyph] > 0)
- {
- cUnits += nWt; // can do some more on the next round
- cStretchable++;
- }
-
- // Keep track of how much we could adjust in either direction
- // on the second round to handle steps.
- if (vdxStep[iiGlyph] == 0)
- {
- dxNonStepMore += vdxStretchOrig[iiGlyph] - vdxWidth[iiGlyph];
- dxNonStepLess += vdxWidth[iiGlyph];
- }
- }
- dxStretchStillNeeded = dxStretchNeeded - dxStretchAchieved;
- }
-
- Assert(dxStretchAchieved <= dxStretchNeeded);
-
- // Make adjustments so that the step values are honored.
-
- if (fStep // there are some step-glyphs
- && !fIgnoreStepGlyphs) // and we didn't already do this
- {
- // First make some basic adjustments, alternating making more and fewer steps
- // and see how much that buys us.
- int dxAdjusted = 0;
- int cNonStepUnits = 0;
- int cStretchableNonStep = 0;
- bool fReloop = false;
- for (iiGlyph = 0; iiGlyph < (signed)viGlyphs.size(); iiGlyph++)
- {
- if (vdxStep[iiGlyph] > 1)
- {
- int dxRem = vdxWidth[iiGlyph] % vdxStep[iiGlyph];
- int dxFewer = vdxWidth[iiGlyph] - dxRem; // round down
- int dxMore = dxFewer + vdxStep[iiGlyph]; // round up
- int dxAdd = dxMore - vdxWidth[iiGlyph];
- if (dxRem == 0)
- { // Step is okay; no adjustment needed.
- }
- else if (
- // this glyph has stretch available to make more steps:
- (dxMore <= vdxStretchOrig[iiGlyph])
- // and we need at least this much extra:
- && (dxAdd + dxStretchAchieved <= dxStretchNeeded)
- // and we still have enough slack in the non-step-glyphs:
- && (dxNonStepLess - dxAdjusted - dxAdd > 0)
- // and we don't have to adjust much to get to the next step
- // (we're 75% of the way there):
- && ((dxRem > ((vdxStep[iiGlyph] * 3) << 2))
- // or this glyph has a high weight:
- || (vnWeight[iiGlyph] > (nMaxWt >> 2))
- // or we've removed a fair amount already:
- || (dxAdjusted < (dxAdd * -2))
- // or we don't have enough slack to remove more:
- || (dxNonStepMore + dxAdjusted - dxRem < 0)))
- {
- // Use the next larger number of steps.
- vdxWidth[iiGlyph] += dxAdd;
- dxStretchAchieved += dxAdd;
- dxAdjusted += dxAdd;
- fReloop = true;
- }
- else
- {
- // Use the next smaller number of steps.
- vdxWidth[iiGlyph] -= dxRem;
- dxStretchAchieved -= dxRem;
- dxAdjusted -= dxRem;
- fReloop = true;
- }
- }
- else if (vdxStep[iiGlyph] == 0)
- {
- cNonStepUnits += vnWeight[iiGlyph];
- cStretchableNonStep++;
- }
- }
-
- if (cNonStepUnits < cUnits || cStretchableNonStep < cStretchable)
- {
- // Even if no step-glyphs need to be adjusted, there is a different number
- // of (non-step) glyphs to divide the space over. (The first time through
- // there may not have been enough space per glyph to run the main loop,
- // but now there may be.)
- fReloop = true;
- }
-
- // Any left over adjustments need to be made by adjusting the items with
- // step = 1 (ie, the glyphs that allow fine-grained adjustments).
- // Do the main loop again, but only adjust the non-step glyphs.
- if (fReloop)
- {
- cUnits = cNonStepUnits;
- cStretchable = cStretchableNonStep;
- fIgnoreStepGlyphs = true;
- goto LMainLoop;
- }
- }
-
- // Divide up any remainder that is due to rounding errors.
-
- int dxRemainder = dxStretchNeeded - dxStretchAchieved;
- if (0 < dxRemainder && dxRemainder < cStretchable)
- {
- if (cStretchable < (signed)viGlyphs.size() || fStep)
- {
- // Make sub-lists using the glyphs that are still stretchable.
- std::vector<int> vdxStretchRem;
- std::vector<int> vdxWidthRem;
- std::vector<int> viiGlyphsRem;
- for (iiGlyph = 0; iiGlyph < (signed)viGlyphs.size(); iiGlyph++)
- {
- if (vdxStretchLeft[iiGlyph] > 0 && vdxStep[iiGlyph] == 0)
- {
- viiGlyphsRem.push_back(iiGlyph);
- vdxStretchRem.push_back(vdxStretchLeft[iiGlyph]);
- vdxWidthRem.push_back(vdxWidth[iiGlyph]);
- }
- }
- Assert(viiGlyphsRem.size() == size_t(cStretchable));
- DistributeRemainder(vdxWidthRem, vdxStretchRem, dxRemainder, 0, vdxWidthRem.size(),
- &dxStretchAchieved);
- for (int iiiGlyph = 0; iiiGlyph < cStretchable; iiiGlyph++)
- {
- int iiGlyph = viiGlyphsRem[iiiGlyph];
- vdxStretchLeft[iiGlyph] = vdxStretchRem[iiiGlyph];
- vdxWidth[iiGlyph] = vdxWidthRem[iiiGlyph];
- }
- }
- else
- {
- // All glyphs are still stretchable.
- DistributeRemainder(vdxWidth, vdxStretchLeft, dxRemainder, 0, vdxWidth.size(),
- &dxStretchAchieved);
- }
- }
- // otherwise we assume left-over is cannot be handled
-
- // Assign the widths to the glyphs.
-
- for (iiGlyph = 0; iiGlyph < (signed)viGlyphs.size(); iiGlyph++)
- {
- int dxThis = vdxWidth[iiGlyph] * ((fShrinking) ? -1 : 1);
- if (vdxStep[iiGlyph] == 0)
- pgje->setGlyphAttribute(viGlyphs[iiGlyph], gr::kjgatWidth, 1, dxThis);
- else
- {
- // Set the actual number of steps allowed. This is more accurate than
- // setting the pixels and then converting to font em-units.
- Assert(int(dxThis) % vdxStep[iiGlyph] == 0); // width divides evenly into steps
- int cSteps = dxThis/vdxStep[iiGlyph];
- pgje->setGlyphAttribute(viGlyphs[iiGlyph], gr::kjgatWidthInSteps, 1, cSteps);
- }
- }
- }
-//LLeave:
-
- if (dxStretchAchieved == dxStretchNeeded)
- return gr::kresOk;
- else
- {
-#ifdef WIN32
- wchar_t rgchw[20];
- std::fill_n(rgchw, 20, 0);
- _itow(dxStretchNeeded - dxStretchAchieved, rgchw, 10);
- std::wstring strTmp(L"justification failed by ");
- strTmp += rgchw;
- strTmp += L" units (width needed = ";
- std::fill_n(rgchw, 10, 0);
- _itow(dxDesiredWidth, rgchw, 10);
- strTmp += rgchw;
- strTmp += L")\n";
- OutputDebugString(strTmp.c_str());
-#else
- Assert(fprintf(stderr,
- "justification failed by %d units (width needed = %d)\n",
- dxStretchNeeded - dxStretchAchieved, dxDesiredWidth));
-#endif
- return gr::kresFalse;
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Distribute the remainder of the width evenly over the stretchable glyphs.
-----------------------------------------------------------------------------------------------*/
-void GrJustifier::DistributeRemainder(std::vector<int> & vdxWidths, std::vector<int> & vdxStretch,
- int dx, int iiMin, int iiLim,
- int * pdxStretchAchieved)
-{
- if (dx == 0)
- return;
-
- Assert(dx <= iiLim - iiMin);
- if (iiMin + 1 == iiLim)
- {
- int dxThis = min(dx, vdxStretch[iiMin]);
- Assert(dxThis == 1); // we're never adjusting by more than 1, and the glyph should be
- // adjustable by that much
- vdxWidths[iiMin] += dxThis;
- vdxStretch[iiMin] -= dxThis;
- *pdxStretchAchieved += dxThis;
- }
- else
- {
- int iiMid = (iiLim + iiMin) / 2;
- int dxHalf1 = dx / 2;
- int dxHalf2 = dx - dxHalf1;
- DistributeRemainder(vdxWidths, vdxStretch, dxHalf1, iiMin, iiMid, pdxStretchAchieved);
- DistributeRemainder(vdxWidths, vdxStretch, dxHalf2, iiMid, iiLim, pdxStretchAchieved);
- }
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the least common multiple of the given weights. Also return
- a std::vector of multiplicative factors for each weight.
-----------------------------------------------------------------------------------------------*/
-int GrJustifier::Lcm(std::vector<int> & vnWeights, std::vector<int> & vnMFactors)
-{
- // The basic algorithm is to factor each weight into primes, counting how many times
- // each prime occurs in the factorization. The LCM is the multiple of the primes
- // with each prime raised to maximum power encountered within the factorizations.
- // Example: weights = [2, 4, 5, 10]
- // 2 = 2^1
- // 4 = 2^2
- // 5 = 5^1
- // 10 = 2^1 * 5^1
- // So the LCM = 2^2 * 5^1 = 20.
-
- std::vector<int> vnPowersForLcm;
- int inPrime;
- for (inPrime = 0; inPrime < g_cnPrimes; inPrime++)
- vnPowersForLcm.push_back(0);
-
- std::vector<int> vnPowersPerPrime;
- vnPowersPerPrime.resize(g_cnPrimes);
- int nWtMax = 1;
- for (int inWt = 0; inWt < (signed)vnWeights.size(); inWt++)
- {
- int inMax = PrimeFactors(vnWeights[inWt], vnPowersPerPrime);
- for (inPrime = 0; inPrime <= inMax; inPrime++)
- vnPowersForLcm[inPrime] = max(vnPowersForLcm[inPrime], vnPowersPerPrime[inPrime]);
- nWtMax = max(nWtMax, vnWeights[inWt]);
- }
-
- int nLcm = 1;
- for (inPrime = 0; inPrime < g_cnPrimes; inPrime++)
- nLcm = nLcm * NthPower(g_rgnPrimes[inPrime], vnPowersForLcm[inPrime]);
-
- // For each weight, calculate the multiplicative factor. This is the value by which
- // to multiply stretch values of this weight in order to get them properly proportioned.
- // Note that weights that are not used will have bogus factors.
- vnMFactors.push_back(nLcm); // bogus, for weight 0
- for (int nWt = 1; nWt <= nWtMax; nWt++)
- {
- vnMFactors.push_back(nLcm / nWt);
- }
- return nLcm;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return a std::vector indicating the prime factors of n. The values of the std::vector correspond
- to the primes in g_rgnPrimes: [2, 3, 5, 7, ...]; they are the powers to which each
- prime should be raised. For instance, 20 = 2^2 * 5^1, so the result would contain
- [2, 0, 1, 0, 0, ...].
- The returned int is index of the highest prime in the list that we found.
-----------------------------------------------------------------------------------------------*/
-int GrJustifier::PrimeFactors(int n, std::vector<int> & vnPowersPerPrime)
-{
- // Short-cut for common cases:
- switch (n)
- {
- case 0:
- case 1:
- vnPowersPerPrime[0] = 0;
- return 0;
- case 2:
- vnPowersPerPrime[0] = 1; // 2^1
- return 0;
- case 3:
- vnPowersPerPrime[0] = 0;
- vnPowersPerPrime[1] = 1; // 3^1
- return 1;
- case 4:
- vnPowersPerPrime[0] = 2; // 2^2
- return 0;
- case 5:
- vnPowersPerPrime[0] = 0;
- vnPowersPerPrime[1] = 0;
- vnPowersPerPrime[2] = 1; // 5^1
- return 2;
- case 6:
- vnPowersPerPrime[0] = 1; // 2^1
- vnPowersPerPrime[1] = 1; // 3^1
- return 1;
- case 7:
- vnPowersPerPrime[0] = 0;
- vnPowersPerPrime[1] = 0;
- vnPowersPerPrime[2] = 0;
- vnPowersPerPrime[3] = 1; // 7^1
- return 3;
- case 8:
- vnPowersPerPrime[0] = 3; // 2^3
- return 0;
- case 9:
- vnPowersPerPrime[0] = 0;
- vnPowersPerPrime[1] = 2; // 3^2
- return 1;
- case 10:
- vnPowersPerPrime[0] = 1; // 2^1
- vnPowersPerPrime[1] = 0;
- vnPowersPerPrime[2] = 1; // 5^1
- return 2;
- default:
- break;
- }
-
- // Otherwise use the general algorithm: suck out prime numbers one by one,
- // keeping track of how many we have of each.
-
- int inPrime;
- for (inPrime = 0; inPrime < g_cnPrimes; inPrime++)
- vnPowersPerPrime[inPrime] = 0;
-
- int nRem = n;
- for (inPrime = 0; inPrime < g_cnPrimes; inPrime++)
- {
- while (nRem % g_rgnPrimes[inPrime] == 0)
- {
- vnPowersPerPrime[inPrime] += 1;
- nRem = nRem / g_rgnPrimes[inPrime];
- }
- if (nRem == 1)
- break;
- }
- Assert(n > 255 || nRem == 1);
- return inPrime;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return nX raised to the nY power.
-----------------------------------------------------------------------------------------------*/
-int GrJustifier::NthPower(int nX, int nY)
-{
- int nRet = 1;
- for (int i = 0; i < nY; i++)
- nRet *= nX;
- return nRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Determine how much shrinking is possible for low-end justification.
-----------------------------------------------------------------------------------------------*/
-//GrResult GrJustifier::suggestShrinkAndBreak(GraphiteProcess * pgje,
-// int iGlyphMin, int iGlyphLim, int dxsWidth, LgLineBreak lbPref, LgLineBreak lbMax,
-// int * pdxShrink, LgLineBreak * plbToTry)
-//{
-// *pdxShrink = 0;
-// *plbToTry = lbPref;
-// return kresOk;
-//}
-
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.h b/Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.h
deleted file mode 100644
index ea5fc21bec9..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/GrJustifier.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2003 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: GrJustifier.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A default justification agent for Graphite.
--------------------------------------------------------------------------------*//*:End Ignore*/
-#pragma once
-#ifndef GRJUSTIFIER_INCLUDED
-#define GRJUSTIFIER_INCLUDED
-
-/*----------------------------------------------------------------------------------------------
- Class: GrJustifier
- This class provides a basic justification/layout algorithm for applications that use
- Graphite.
-----------------------------------------------------------------------------------------------*/
-class GrJustifier : public gr::IGrJustifier
-{
-public:
- // Constructor:
- GrJustifier();
- ~GrJustifier();
-
-/*
- virtual long IncRefCount(void)
- {
- return InterlockedIncrement(&m_cref);
- }
- virtual long DecRefCount(void)
- {
- long cref = InterlockedDecrement(&m_cref);
- if (cref == 0) {
- m_cref = 1;
- delete this;
- }
- return cref;
- }
-*/
-
- virtual gr::GrResult adjustGlyphWidths(gr::GraphiteProcess * pfgje,
- int iGlyphMin, int iGlyphLim,
- float dxCurrWidth, float dxDesiredWidth);
-
- //virtual GrResult suggestShrinkAndBreak(GraphiteProcess * pfgjwe,
- // int iGlyphMin, int iGlyphLim, int dxsWidth, LgLineBreak lbPref, LgLineBreak lbMax,
- // int * pdxShrink, LgLineBreak * plbToTry);
-
- // Return a Graphite-compatible justifier that can be stored in a Graphite segment.
- // TODO: remove
- //virtual void JustifierObject(IGrJustifier ** ppgjus)
- //{
- // *ppgjus = this;
- //}
-
- // When a segment is being destroyed, there is nothing to do, since this is a pointer
- // to an object that is allocated elsewhere.
- // TODO: remove
- //virtual void DeleteJustifierPtr()
- //{
- //}
-
-protected:
- long m_cref;
-
- gr::GraphiteProcess * m_pgreng;
-
- void DistributeRemainder(std::vector<int> & vdxWidths, std::vector<int> & vdxStretch,
- int dx, int iiMin, int iiLim,
- int * pdxStretchAchieved);
- int Lcm(std::vector<int> & vnWeights, std::vector<int> & vnMFactors);
- int PrimeFactors(int n, std::vector<int> & vnPowersPerPrime);
- int NthPower(int nX, int nY);
-};
-
-
-#endif // !GRJUSTIFIER_INCLUDED
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.am b/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.am
deleted file mode 100644
index fe59b65fbaa..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-AUTOMAKE_OPTIONS = 1.6
-
-EXTRA_DIST = \
- burmeseText.wpx \
- romanText.wpx \
- xlineText.wpx \
- grtest_arabic.ttf \
- grtest_badVersion.ttf \
- grtest_badCmap.ttf \
- grtest_burmese.ttf \
- grtest_roman.ttf \
- grtest_taiviet.ttf \
- grtest_xline.ttf \
- xline.gdl \
- Makefile.vc \
- makedebug.bat \
- readme.txt
-
-noinst_PROGRAMS = regression-test
-
-AM_CPPFLAGS = -I$(top_srcdir)/include/graphite
-
-regression_test_LDFLAGS = -L$(top_builddir)/src -lgraphite
-
-regression_test_SOURCES = \
- main.h \
- stdafx.cpp stdafx.h \
- RegressionTest.cpp \
- TestCase.cpp TestCase.h \
- RtTextSrc.h \
- SimpleTextSrc.cpp SimpleTextSrc.h \
- GrJustifier.cpp GrJustifier.h
-
-check-local: regression-test
- $(top_builddir)/test/RegressionTest/regression-test -p $(srcdir)
-
-dist-hook:
- rm -f grregtest.log tracelog.txt
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.in b/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.in
deleted file mode 100644
index 547e7dfa408..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.in
+++ /dev/null
@@ -1,478 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ../..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = regression-test$(EXEEXT)
-subdir = test/RegressionTest
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_regression_test_OBJECTS = stdafx.$(OBJEXT) RegressionTest.$(OBJEXT) \
- TestCase.$(OBJEXT) SimpleTextSrc.$(OBJEXT) \
- GrJustifier.$(OBJEXT)
-regression_test_OBJECTS = $(am_regression_test_OBJECTS)
-regression_test_LDADD = $(LDADD)
-DEFAULT_INCLUDES = -I. -I$(srcdir)
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(regression_test_SOURCES)
-DIST_SOURCES = $(regression_test_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-GREP = @GREP@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LSB_RELEASE = @LSB_RELEASE@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-REL_CODENAME = @REL_CODENAME@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIZEOF_WCHAR_T = @SIZEOF_WCHAR_T@
-STRIP = @STRIP@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-AUTOMAKE_OPTIONS = 1.6
-EXTRA_DIST = \
- burmeseText.wpx \
- romanText.wpx \
- xlineText.wpx \
- grtest_arabic.ttf \
- grtest_badVersion.ttf \
- grtest_badCmap.ttf \
- grtest_burmese.ttf \
- grtest_roman.ttf \
- grtest_xline.ttf \
- xline.gdl \
- Makefile.vc \
- makedebug.bat \
- readme.txt
-
-AM_CPPFLAGS = -I$(top_srcdir)/include/graphite
-regression_test_LDFLAGS = -L$(top_builddir)/src -lgraphite
-regression_test_SOURCES = \
- main.h \
- stdafx.cpp stdafx.h \
- RegressionTest.cpp \
- TestCase.cpp TestCase.h \
- RtTextSrc.h \
- SimpleTextSrc.cpp SimpleTextSrc.h \
- GrJustifier.cpp GrJustifier.h
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .cpp .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/RegressionTest/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign test/RegressionTest/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-clean-noinstPROGRAMS:
- @list='$(noinst_PROGRAMS)'; for p in $$list; do \
- f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f $$p $$f"; \
- rm -f $$p $$f ; \
- done
-regression-test$(EXEEXT): $(regression_test_OBJECTS) $(regression_test_DEPENDENCIES)
- @rm -f regression-test$(EXEEXT)
- $(CXXLINK) $(regression_test_LDFLAGS) $(regression_test_OBJECTS) $(regression_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrJustifier.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RegressionTest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleTextSrc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestCase.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdafx.Po@am__quote@
-
-.cpp.o:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
- -rm -f libtool
-uninstall-info-am:
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
- if test -d $$d/$$file; then \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$(top_distdir)" distdir="$(distdir)" \
- dist-hook
-check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-local
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-libtool distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am:
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am
-
-.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
- clean-generic clean-libtool clean-noinstPROGRAMS ctags \
- dist-hook distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-exec install-exec-am install-info \
- install-info-am install-man install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am uninstall-info-am
-
-
-check-local: regression-test
- $(top_builddir)/test/RegressionTest/regression-test -p $(srcdir)
-
-dist-hook:
- rm -f grregtest.log tracelog.txt
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.vc b/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.vc
deleted file mode 100644
index ff75d7e9e16..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/Makefile.vc
+++ /dev/null
@@ -1,121 +0,0 @@
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-
-TARGET=RegressionTest
-REGT_SRC=.
-REGT_RES=.
-REGT_APPLIB=..\..\..\examples\applib
-
-
-!IF "$(CFG)" == ""
-CFG=DEBUG
-!ENDIF
-
-!IF "$(CFG)" == "RELEASE"
-
-OUTDIR=.\release
-INTDIR=.\release_temp
-
-all : "$(OUTDIR)\$(TARGET).exe"
-
-clean :
- @- rd /s/q $(INTDIR)
-
-realclean : clean
- @- rd /s/q $(OUTDIR)
-
-CPP_PROJ=/nologo /MT /W3 /GR /GX /O2 /I "." /I "../../examples/applib" /I "../../include" /I "../../include/graphite" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /c
-RSC_PROJ=/l 0x409 /fo"$(INTDIR)\$(TARGET).res" /d "NDEBUG"
-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib graphite.lib /nologo /subsystem:console /incremental:no /machine:I386 /out:"$(OUTDIR)\$(TARGET).exe" /libpath:"..\..\release"
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\$(TARGET).bsc"
-
-!ELSEIF "$(CFG)" == "DEBUG"
-
-OUTDIR=.\debug
-INTDIR=.\debug_temp
-
-all : "$(OUTDIR)\$(TARGET).exe" "$(OUTDIR)\$(TARGET).bsc"
-
-clean :
- @- rd /s/q $(INTDIR)
-
-realclean : clean
- @- rd /s/q $(OUTDIR)
-
-CPP_PROJ=/nologo /MTd /W3 /Gm /GR /GX /GZ /ZI /Od /I "." /I "../../examples/applib" /I "../../include" /I "../../include/graphite" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /FR"$(INTDIR)\\" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /c
-RSC_PROJ=/l 0x409 /fo"$(INTDIR)\$(TARGET).res" /d "_DEBUG"
-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib graphite.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\$(TARGET).pdb" /debug /machine:I386 /out:"$(OUTDIR)\$(TARGET).exe" /libpath:"..\..\debug"
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\$(TARGET).bsc"
-
-!ENDIF
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-"$(INTDIR)" :
- if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
-
-{$(REGT_SRC)}.cpp{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-{$(REGT_SRC)}.cpp{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-{$(REGT_APPLIB)}.cpp{$(INTDIR)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-{$(REGT_APPLIB)}.cpp{$(INTDIR)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-
-
-CPP=cl.exe
-RSC=rc.exe
-BSC32=bscmake.exe
-LINK32=link.exe
-
-LINK32_OBJS= \
- "$(INTDIR)\RegressionTest.obj" \
- "$(INTDIR)\TestCase.obj" \
- "$(INTDIR)\GrJustifier.obj" \
- "$(INTDIR)\SimpleTextSrc.obj" \
-
-# "$(INTDIR)\RegressionTest.res"
-
-"$(OUTDIR)\$(TARGET).exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
- $(LINK32) @<<
- $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
-
-BSC32_SBRS= \
- "$(INTDIR)\RegressionTest.sbr" \
- "$(INTDIR)\TestCase.sbr" \
- "$(INTDIR)\GrJustifier.sbr" \
- "$(INTDIR)\SimpleTextSrc.sbr" \
-#
-
-"$(OUTDIR)\$(TARGET).bsc" : "$(OUTDIR)" $(BSC32_SBRS)
- $(BSC32) @<<
- $(BSC32_FLAGS) $(BSC32_SBRS)
-<<
-
-"$(INTDIR)\RegressionTest.obj" "$(INTDIR)\RegressionTest.sbr" : "$(REGT_SRC)\RegressionTest.cpp" "$(INTDIR)"
-"$(INTDIR)\TestCase.obj" "$(INTDIR)\TestCase.sbr" : "$(REGT_SRC)\TestCase.cpp" "$(INTDIR)"
-"$(INTDIR)\GrJustifier.obj" "$(INTDIR)\GrJustifier.sbr" : "$(REGT_APPLIB)\GrJustifier.cpp" "$(INTDIR)"
-"$(INTDIR)\SimpleTextSrc.obj" "$(INTDIR)\SimpleTextSrc.sbr" : "$(REGT_APPLIB)\SimpleTextSrc.cpp" "$(INTDIR)"
-
-
-"$(INTDIR)\$(TARGET).res" : "$(REGT_RES)\$(TARGET).rc" "$(INTDIR)"
- $(RSC) $(RSC_PROJ) "$(REGT_RES)\$(TARGET).rc"
-
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/RegressionTest.cpp b/Build/source/libs/graphite-engine/test/RegressionTest/RegressionTest.cpp
deleted file mode 100644
index 1d361a4f3cd..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/RegressionTest.cpp
+++ /dev/null
@@ -1,748 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2004 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: RegressionTest.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Main file for the Graphite regression test program.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-#include "main.h"
-#include "MemoryUsage.h"
-#include <cstring>
-
-//:>********************************************************************************************
-//:> Global variables
-//:>********************************************************************************************
-std::ofstream g_strmLog; // log file output stream
-std::ofstream g_strmTrace; // debugger trace for selected tests
-std::ofstream g_strmMemUsage;
-
-int g_errorCount;
-
-// HDC g_hdc; // device-context for bogus window on which to do drawing
-
-bool g_debugMode = false;
-bool g_silentMode = false;
-
-int g_itcaseStart = 0; // adjust to skip to a certain test
-
-SegmentMemoryUsage g_smu;
-FontMemoryUsage g_fmu;
-
-std::string g_fontPath = ".";
-#ifdef _WIN32
-#define PATH_SEP "\\"
-#else
-#define PATH_SEP "/"
-#endif
-
-// Forward defintions.
-int WriteLog(int);
-void CopyWstringToUtf16(std::wstring textStr, gr::utf16 * utf16Buf, int bufSize);
-
-//:>********************************************************************************************
-//:> Functions
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Main function.
-----------------------------------------------------------------------------------------------*/
-
-int main(int argc, char* argv[])
-{
-#ifdef _WIN32
- _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
-#endif // WIN32
-
- int iargc = 1;
- while (iargc < argc)
- {
- if ((strcmp(argv[iargc], "/d") == 0) || (strcmp(argv[iargc], "-d") == 0))
- {
- g_debugMode = true;
- }
- if ((strcmp(argv[iargc], "/s") == 0) || (strcmp(argv[iargc], "-s") == 0))
- {
- g_silentMode = true;
- }
- if ((strcmp(argv[iargc], "/p") == 0) || (strcmp(argv[iargc], "-p") == 0))
- {
- iargc++;
- if (iargc < argc)
- {
- g_fontPath = argv[iargc];
- }
- }
- iargc++;
- }
-
- if (!g_silentMode)
- {
- std::cout << "Graphite Regression Test\n";
- std::cout << "Files path is " << g_fontPath << "\n\n";
- if (g_debugMode)
- std::cout << "In debug mode\n";
- }
-
- // Start a new log.
- g_strmLog.open("grregtest.log");
- if (g_strmLog.fail())
- {
- std::cout << "Unable to open log file.";
- return -1;
- }
-
- g_errorCount = 0;
-
-// g_hdc = ::GetDC(NULL);
-
- WriteToLog("Graphite Regression Test\n\n");
-
- // Initialize the tracelog file.
- g_strmTrace.open("tracelog.txt");
- g_strmTrace.close();
-
- TestCase * ptcaseList = NULL;
- int numberOfTests = TestCase::SetupTests(&ptcaseList);
-
- RunTests(numberOfTests, ptcaseList);
-
- WriteToLog("\n==============================================\n");
- g_strmLog << "\n\nTOTAL NUMBER OF ERRORS: " << g_errorCount << "\n";
- if (!g_silentMode)
- std::cout << "\n\nTOTAL NUMBER OF ERRORS: " << g_errorCount << "\n";
-
- g_strmLog.close();
-
- ////EngineInstance::DeleteEngines();
- TestCase::DeleteTests();
-
-// ::ReleaseDC(NULL, g_hdc);
-
- // Output segment memory usage information.
- //g_strmMemUsage.open("SegMemoryUsage.log");
- //g_smu.prettyPrint(g_strmMemUsage);
- //g_strmMemUsage.close();
-
- return g_errorCount;
-}
-
-/*----------------------------------------------------------------------------------------------
- Run the tests.
-----------------------------------------------------------------------------------------------*/
-void RunTests(int numberOfTests, TestCase * ptcaseList)
-{
- Segment * psegPrev = NULL;
- RtTextSrc * ptsrcPrev = NULL;
- Segment * psegRet = NULL;
- RtTextSrc * ptsrcRet = NULL;
-
- for (int itcase = g_itcaseStart; itcase < numberOfTests; itcase++)
- {
- TestCase * ptcase = ptcaseList + itcase;
- WriteToLog("\n----------------------------------------------\n");
- WriteToLog("Test: ");
-
- if (!g_silentMode)
- std::cout << "Test " << ptcase->TestName() << "...";
- WriteToLog(ptcase->TestName());
- WriteToLog("\n");
-
- RunOneTestCase(ptcase, psegPrev, &psegRet, &ptsrcRet);
-
- delete psegPrev;
- delete ptsrcPrev;
- psegPrev = psegRet;
- ptsrcPrev = ptsrcRet;
- psegRet = NULL;
- ptsrcRet = NULL;
- }
-
- delete psegPrev;
- delete ptsrcPrev;
-}
-
-/*----------------------------------------------------------------------------------------------
- Run a single test case.
-----------------------------------------------------------------------------------------------*/
-int RunOneTestCase(TestCase * ptcase, Segment * psegPrev, Segment ** ppsegRet, RtTextSrc ** pptsrcRet)
-{
- if (ptcase->Skip())
- {
- std::cout << "\nskipped\n";
- g_strmLog << "skipping\n";
- *ppsegRet = NULL;
- return 0;
- }
-
-#ifdef _WIN32
- // Break into the debugger if requested.
- if (ptcase->RunDebugger() && ::IsDebuggerPresent())
- {
- ::DebugBreak();
- }
-#endif
-
- int errorCount = 0;
-
- gr::utf16 text[1024];
- CopyWstringToUtf16(ptcase->Text(), text, 1024);
-
- *ppsegRet = NULL;
- SegmentPainter * ppainter = NULL;
- std::pair<GlyphIterator, GlyphIterator> iterPair;
- GlyphIterator gitBegin;
- GlyphIterator gitEnd;
-
- //LOGFONT lf;
- //memset(&lf, '\0', sizeof(LOGFONT));
- //lf.lfCharSet = DEFAULT_CHARSET;
- //lf.lfHeight = (signed(ptcase->FontSize()) * -96) / 72; // 96 = resolution, 72 = points per inch
- //lf.lfWeight = 400;
- //lf.lfItalic = FALSE;
- //wcscpy(lf.lfFaceName, ptcase->FontName().data());
- //HDC hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
- //HFONT hfont = CreateFontIndirect(&lf);
- //HFONT hfontOld = (HFONT)::SelectObject(hdc, hfont); // restore before destroying the DC.
- //WinFont winfont(hdc);
-
- FileFont font(g_fontPath + PATH_SEP + ptcase->FontFile(), float(signed(ptcase->FontSize())), 96, 96);
-
- if (!font.isValid())
- {
- OutputError(ptcase, std::string("ERROR: reading font file: \"") + ptcase->FontFile() + "\" at path \"" + g_fontPath + "\"; remaining tests skipped");
- *ppsegRet = NULL;
- errorCount++;
- return WriteLog(errorCount);
- }
-
- // Set up the text source.
- *pptsrcRet = new RtTextSrc(&(text[0]));
- RtTextSrc * ptsrc = *pptsrcRet;
- (*pptsrcRet)->setFeatures(ptcase->Features());
- (*pptsrcRet)->setRightToLeft(ptcase->Rtl());
-
- // Generate a segment.
- LayoutEnvironment layout;
- layout.setDumbFallback(ptcase->DumbFallback());
- layout.setStartOfLine(true);
- layout.setRightToLeft(ptcase->ParaRtl());
- if (ptcase->InitWithPrevSeg())
- layout.setPrevSegment(psegPrev);
-
- if (ptcase->TraceLog())
- {
- g_strmTrace.open("tracelog.txt", std::ios::app);
- g_strmTrace << "Test: " << ptcase->TestName() << "\n\n";
- layout.setLoggingStream(&g_strmTrace);
- }
-
- try
- {
- if (ptcase->AvailWidth() < 10000)
- {
- layout.setBestBreak(ptcase->PrefBreak());
- layout.setWorstBreak(ptcase->WorstBreak());
- layout.setTrailingWs(ptcase->Twsh());
- *ppsegRet = new LineFillSegment(&font, ptsrc, &layout,
- ptcase->FirstChar(), ptsrc->getLength(),
- (float)ptcase->AvailWidth(),
- ptcase->Backtrack());
- }
- else
- {
- *ppsegRet = new RangeSegment(&font, ptsrc, &layout);
- }
- }
- catch (...)
- {
- if (!ptcase->NoSegment())
- {
- if (ptcase->BadFont() && !ptcase->DumbFallback())
- // Weird situation.
- OutputError(ptcase, "ERROR: bad font with no fallback, yet a segment was expected???");
- else
- OutputError(ptcase, "ERROR: generating segment; remaining tests skipped");
- errorCount++;
- }
- // else segment creation failed as expected
-
- // NB: failure to create a segment due to throwing an exception seems to result in a memory
- // leak--the FontCache object FontFace::s_pFontCache does not get deleted.
-
- *ppsegRet = NULL;
- return WriteLog(errorCount);
- }
-
- if (ptcase->TraceLog())
- {
- g_strmTrace << "\n\n*********************************************************************************************************************\n\n";
- g_strmTrace.close();
- }
-
- if ((*ppsegRet) && (*ppsegRet)->segmentTermination() == kestNothingFit)
- {
- delete *ppsegRet;
- *ppsegRet = NULL;
- }
-
- if ((*ppsegRet) == NULL && !ptcase->NoSegment())
- {
- OutputError(ptcase, "ERROR: segment not created; remaining tests skipped");
- errorCount++;
- return WriteLog(errorCount);
- }
- else if (ptcase->NoSegment())
- {
- if (*ppsegRet)
- {
- OutputError(ptcase, "ERROR: segment created when none expected");
- errorCount++;
- }
- delete *ppsegRet;
- *ppsegRet = NULL;
- return WriteLog(errorCount);
- }
-
- Segment * pseg = *ppsegRet;
-
- pseg->calculateMemoryUsage(g_smu);
-
- // Calculate and output font memory usage.
- //g_fmu = Font::calculateMemoryUsage();
- //g_strmMemUsage.open("fontMemoryUsage.log");
- //g_fmu.prettyPrint(g_strmMemUsage);
- //g_strmMemUsage.close();
-
- // Test results.
- int segMin = pseg->startCharacter();
- int segLim = pseg->stopCharacter();
- if ((segLim - segMin) != ptcase->CharCount())
- {
- OutputErrorWithValues(ptcase, "ERROR: number of characters in segment", -1,
- (segLim - segMin), ptcase->CharCount());
- errorCount++;
- }
-
- int segWidth = (int)pseg->advanceWidth();
- if (segWidth != ptcase->SegWidth())
- {
- OutputErrorWithValues(ptcase, "ERROR: width of segment", -1,
- segWidth, ptcase->SegWidth());
- errorCount++;
- }
-
- iterPair = pseg->glyphs();
- gitBegin = iterPair.first;
- gitEnd = iterPair.second;
- int cGlyphs = gitEnd - gitBegin;
- if (cGlyphs != ptcase->GlyphCount())
- {
- OutputErrorWithValues(ptcase, "ERROR: number of glyphs", -1,
- cGlyphs, ptcase->GlyphCount());
- errorCount++;
- }
- else
- {
- GlyphIterator gitThis = gitBegin;
- for (int iglyph = 0; gitThis != gitEnd; ++gitThis, iglyph++)
- {
- if ((*gitThis).glyphID() != ptcase->GlyphID(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: glyph id ", iglyph,
- (*gitThis).glyphID(), ptcase->GlyphID(iglyph));
- errorCount++;
- }
- if (int((*gitThis).origin()) != ptcase->XPos(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: glyph x-position ", iglyph,
- int((*gitThis).origin()), ptcase->XPos(iglyph));
- errorCount++;
- }
- if (int((*gitThis).yOffset()) != ptcase->YPos(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: glyph y-position ", iglyph,
- int((*gitThis).yOffset()), ptcase->YPos(iglyph));
- errorCount++;
- }
- if (int((*gitThis).advanceWidth()) != ptcase->AdvWidth(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: advance width ", iglyph,
- int((*gitThis).advanceWidth()), ptcase->AdvWidth(iglyph));
- errorCount++;
- }
- if (ptcase->BbTests())
- {
- gr::Rect rectBb = (*gitThis).bb();
- if (int(rectBb.left) != ptcase->BbLeft(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: bb left ", iglyph,
- int(rectBb.left), ptcase->BbLeft(iglyph));
- errorCount++;
- }
- if (int(rectBb.right) != ptcase->BbRight(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: bb right ", iglyph,
- int(rectBb.right), ptcase->BbRight(iglyph));
- errorCount++;
- }
- if (int(rectBb.top) != ptcase->BbTop(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: bb top ", iglyph,
- int(rectBb.top), ptcase->BbTop(iglyph));
- errorCount++;
- }
- if (int(rectBb.bottom) != ptcase->BbBottom(iglyph))
- {
- OutputErrorWithValues(ptcase, "ERROR: bb bottom ", iglyph,
- int(rectBb.bottom), ptcase->BbBottom(iglyph));
- errorCount++;
- }
- }
- }
- }
-
- ppainter = new SegmentNonPainter(pseg);
-
- if (segLim == ptcase->CharCount())
- {
- for (int ichar = 0; ichar < segLim; ichar++)
- {
- LgIpValidResult ipvr = ppainter->isValidInsertionPoint(ichar);
- if ((ipvr == kipvrOK && !ptcase->InsPtFlag(ichar)) // TODO: handle kipvrUnknown
- || (ipvr != kipvrOK && ptcase->InsPtFlag(ichar)))
- {
- OutputErrorWithValues(ptcase, "ERROR: valid insertion point ", ichar,
- (ipvr == kipvrOK), ptcase->InsPtFlag(ichar));
- errorCount++;
- }
- }
- }
-
- int c2gi = 0;
- while (c2gi < ptcase->CharToGlyphCount())
- {
- int ichar = ptcase->CharToGlyphItem(c2gi++);
- int glyphCount = ptcase->CharToGlyphItem(c2gi++);
- std::pair<gr::GlyphSetIterator, gr::GlyphSetIterator> glyphSet = pseg->charToGlyphs(ichar);
- gr::GlyphSetIterator gitStart = glyphSet.first;
- gr::GlyphSetIterator gitStop = glyphSet.second;
- if ((gitStop - gitStart) != glyphCount)
- {
- OutputErrorWithValues(ptcase, "ERROR: number of glyphs for char ", ichar,
- gitStop - gitStart, glyphCount);
- errorCount++;
- c2gi += glyphCount;
- }
- else
- {
- GlyphSetIterator glyphLp = glyphSet.first;
- for (int ig = 0; ig < glyphCount; ig++)
- {
- if (static_cast<int>((*glyphLp).logicalIndex()) != ptcase->CharToGlyphItem(c2gi))
- {
- OutputErrorWithValues(ptcase, "ERROR: glyph for char ", ichar,
- (*glyphLp).logicalIndex(), ptcase->CharToGlyphItem(c2gi));
- errorCount++;
- }
- c2gi++;
- glyphLp++;
- }
- }
- }
-
- int att = 0;
- while (att < ptcase->AttachedGlyphCount())
- {
- int iglyph = ptcase->AttachedGlyphItem(att++);
- if (iglyph > cGlyphs)
- {
- OutputError(ptcase, "ERROR: non-existent glyph in attachment test ", iglyph);
- errorCount++;
- att++;
- att += ptcase->AttachedGlyphItem(att) + 1;
- continue;
- }
-
- GlyphIterator gitThis = gitBegin + iglyph;
- GlyphIterator gitBase = gitThis->attachedClusterBase();
- int ibase = gitBase->logicalIndex();
- if (ibase != ptcase->AttachedGlyphItem(att))
- {
- OutputErrorWithValues(ptcase, "ERROR: attachment base for glyph ", iglyph,
- ibase, ptcase->AttachedGlyphItem(att));
- errorCount++;
- }
- att++;
- std::pair<gr::GlyphSetIterator, gr::GlyphSetIterator> glyphSet = gitThis->attachedClusterGlyphs();
- gr::GlyphSetIterator gitStart = glyphSet.first;
- gr::GlyphSetIterator gitStop = glyphSet.second;
- int glyphCount = ptcase->AttachedGlyphItem(att++);
- if ((gitStop - gitStart) != glyphCount)
- {
- OutputErrorWithValues(ptcase, "ERROR: number of attachments for glyph ", iglyph,
- gitStop - gitStart, glyphCount);
- errorCount++;
- att += glyphCount;
- }
- else
- {
- GlyphSetIterator glyphLp = glyphSet.first;
- for (int ig = 0; ig < glyphCount; ig++)
- {
- if (static_cast<int>((*glyphLp).logicalIndex()) != ptcase->AttachedGlyphItem(att))
- {
- OutputErrorWithValues(ptcase, "ERROR: attachment for glyph ", iglyph,
- (*glyphLp).logicalIndex(), ptcase->AttachedGlyphItem(att));
- errorCount++;
- }
- att++;
- glyphLp++;
- }
- }
- }
-
- for (int iclicktest = 0; iclicktest < ptcase->NumberOfClickTests(); iclicktest++)
- {
- gr::Point ptClick;
- ptClick.x = static_cast<float>(ptcase->XClick(iclicktest));
- ptClick.y = static_cast<float>(ptcase->YClick(iclicktest));
- int charIndex;
- bool assocPrev;
- ppainter->pointToChar(ptClick, &charIndex, &assocPrev);
- if (charIndex != ptcase->ClickCharIndex(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: char index from click ", iclicktest,
- charIndex, ptcase->ClickCharIndex(iclicktest));
- errorCount++;
- continue;
- }
- if (assocPrev != ptcase->ClickAssocPrev(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: assoc-prev from click ", iclicktest,
- assocPrev, ptcase->ClickAssocPrev(iclicktest));
- errorCount++;
- }
- gr::Rect rect1, rect2;
- ppainter->positionsOfIP(charIndex, assocPrev,
- false, &rect1, &rect2);
- if (ptcase->Sel1Top(iclicktest) == TestCase::kAbsent)
- {
- if (rect1.top != 0 || rect1.bottom != 0 || rect1.left != 0 || rect1.right != 0)
- {
- OutputError(ptcase, "ERROR: IP prim rect found ", iclicktest);
- errorCount++;
- }
- }
- else if (rect1.top == 0 && rect1.bottom == 0 && rect1.left == 0 && rect1.right == 0)
- {
- OutputError(ptcase, "ERROR: IP prim rect not found ", iclicktest);
- errorCount++;
- }
- else
- {
- if ((int)rect1.top != ptcase->Sel1Top(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: IP prim rect top ", iclicktest,
- int(rect1.top), ptcase->Sel1Top(iclicktest));
- errorCount++;
- }
- if ((int)rect1.bottom != ptcase->Sel1Bottom(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: IP prim rect bottom ", iclicktest,
- int(rect1.bottom), ptcase->Sel1Bottom(iclicktest));
- errorCount++;
- }
- if ((int)rect1.left != ptcase->Sel1Left(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: IP prim rect left ", iclicktest,
- int(rect1.left), ptcase->Sel1Left(iclicktest));
- errorCount++;
- }
- }
-
- if (ptcase->Sel2Top(iclicktest) == TestCase::kAbsent)
- {
- if (rect2.top != 0 || rect2.bottom != 0 || rect2.left != 0 || rect2.right != 0)
- {
- OutputError(ptcase, "ERROR: IP sec rect found when not expected ", iclicktest);
- errorCount++;
- }
- }
- else if (rect2.top == 0 && rect2.bottom == 0 && rect2.left == 0 && rect2.right == 0)
- {
- OutputError(ptcase, "ERROR: IP sec rect not found ", iclicktest);
- errorCount++;
- }
- else
- {
- if ((int)rect2.top != ptcase->Sel2Top(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: IP sec rect top ", iclicktest,
- int(rect2.top), ptcase->Sel2Top(iclicktest));
- errorCount++;
- }
- if ((int)rect2.bottom != ptcase->Sel2Bottom(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: IP sec rect bottom ", iclicktest,
- int(rect2.bottom), ptcase->Sel2Bottom(iclicktest));
- errorCount++;
- }
- if ((int)rect2.left != ptcase->Sel2Left(iclicktest))
- {
- OutputErrorWithValues(ptcase, "ERROR: IP sec rect left ", iclicktest,
- int(rect2.left), ptcase->Sel2Left(iclicktest));
- errorCount++;
- }
- }
- }
-
- ////if (contextBlockOut != ptcase->OutputContextBlockSize())
- ////{
- //// OutputErrorWithValues(ptcase, "ERROR: output context block size ", -1,
- //// (int)contextBlockOut, (int)ptcase->OutputContextBlockSize());
- //// errorCount++;
- ////}
- ////else if (!ptcase->CompareContextBlock(pContextBlockOut))
- ////{
- //// OutputError(ptcase, "ERROR: output context block");
- //// errorCount++;
- ////}
- delete ppainter;
-
- return WriteLog(errorCount);
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Write the error count to the log.
-----------------------------------------------------------------------------------------------*/
-int WriteLog(int errorCount)
-{
- WriteToLog("\nError count = ");
- WriteToLog(errorCount);
- WriteToLog("\n");
-
- if (!g_silentMode)
- {
- if (errorCount == 0)
- std::cout << "ok\n";
- else
- std::cout << "FAILED\n";
- }
-
-
- //delete pseg; // don't delete these; they are passed back to the calling method
- //delete ptsrc;
-
- // Delete device context
- //DeleteObject(SelectObject(hdc, hfontOld));
- //DeleteDC(hdc);
-
- g_errorCount += errorCount;
- return errorCount;
-}
-
-/*----------------------------------------------------------------------------------------------
- Copy a std::wstring (whose bytes can be of various sizes on different platforms)
- to a buffer of UTF16.
-----------------------------------------------------------------------------------------------*/
-void CopyWstringToUtf16(std::wstring textStr, gr::utf16 * utf16Buf, int bufSize)
-{
- std::fill_n(utf16Buf, bufSize, 0);
- int cc = textStr.length();
- for (int i = 0; i < cc; i++)
- utf16Buf[i] = textStr[i];
-}
-
-/*----------------------------------------------------------------------------------------------
- Output information about an error.
-----------------------------------------------------------------------------------------------*/
-void OutputError(TestCase * ptcase, std::string strErr, int i)
-{
- OutputErrorAux(ptcase, strErr, i, false, 0, 0);
-}
-
-void OutputErrorWithValues(TestCase * ptcase, std::string strErr, int i,
- int valueFound, int valueExpected)
-{
- OutputErrorAux(ptcase, strErr, i, true, valueFound, valueExpected);
-}
-
-void OutputErrorAux(TestCase * ptcase, std::string strErr, int i,
- bool showValues, int valueFound, int valueExpected)
-{
-// if (g_debugMode)
-// ::DebugBreak();
-
- if (!g_silentMode)
- {
- //std::cout << ptcase->TestName() << ": ";
- std::cout << strErr;
- if (i > -1)
- {
- std::cout << "[" << i << "]";
- }
- std::cout << "\n ";
- }
-
- WriteToLog(strErr, i, showValues, valueFound, valueExpected);
-
- WriteToLog("\n");
-}
-
-/*----------------------------------------------------------------------------------------------
- Write some text to the log file.
-----------------------------------------------------------------------------------------------*/
-bool WriteToLog(std::string str, int i)
-{
- if (g_strmLog.fail())
- {
- std::cout << "Error opening log file.";
- return false;
- }
- g_strmLog << str;
- if (i > -1)
- g_strmLog << "[" << i << "]";
- g_strmLog.flush();
- return true;
-}
-
-bool WriteToLog(std::string str, int i,
- bool showValues, int valueFound, int valueExpected)
-{
- if (g_strmLog.fail())
- {
- std::cout << "Error opening log file.";
- return false;
- }
- g_strmLog << str;
- if (i > -1)
- g_strmLog << "[" << i << "]";
- if (showValues)
- {
- g_strmLog << "; found " << valueFound << " not " << valueExpected;
- }
- g_strmLog.flush();
- return true;
-}
-
-
-bool WriteToLog(int n)
-{
- if (g_strmLog.fail())
- {
- std::cout << "Error opening log file.";
- return false;
- }
- g_strmLog << n;
- g_strmLog.flush();
- return true;
-}
-
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/RtTextSrc.h b/Build/source/libs/graphite-engine/test/RegressionTest/RtTextSrc.h
deleted file mode 100644
index cdbd51e90df..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/RtTextSrc.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: RtTextSrc.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
-
--------------------------------------------------------------------------------*//*:End Ignore*/
-#pragma once
-#ifndef RTTXTSRC_INCLUDED
-#define RTTXTSRC_INCLUDED
-
-#include <cstring>
-
-/*----------------------------------------------------------------------------------------------
- Class: RtTextSrc
- This class extends the SimpleTextSource to allow setting of features.
-----------------------------------------------------------------------------------------------*/
-class RtTextSrc : public SimpleTextSrc
-{
-public:
- RtTextSrc(gr::utf16 * pszText) : SimpleTextSrc(pszText)
- {
- m_fRtl = false;
- memset(m_fset, 0, MAXFEAT * sizeof(FeatureSetting));
- }
-
- void setFeatures(FeatureSetting * fset)
- {
- m_cFeats = 0;
- for (int i = 0; i < MAXFEAT; i++)
- {
- if (fset[i].id > 0)
- {
- m_fset[i].id = fset[i].id;
- m_fset[i].value = fset[i].value;
- m_cFeats++;
- }
- }
- }
-
- virtual size_t getFontFeatures(toffset ich, FeatureSetting * prgfset)
- {
- // Note: size of prgfset buffer = gr::kMaxFeatures = 64
- std::copy(m_fset, m_fset + MAXFEAT, prgfset);
- return m_cFeats;
- }
-
- virtual bool getRightToLeft(toffset ich)
- {
- return m_fRtl;
- }
- virtual unsigned int getDirectionDepth(toffset ich)
- {
- return ((m_fRtl == 1) ? 1 : 0);
- }
- void setRightToLeft(bool f)
- {
- m_fRtl = f;
- }
-
-protected:
- bool m_fRtl;
- int m_cFeats;
- FeatureSetting m_fset[MAXFEAT];
-};
-
-
-#endif // !RTTXTSRC_INCLUDED
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.cpp b/Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.cpp
deleted file mode 100644
index c50799c96bc..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: SimpleTextSrc.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A simple text source that shows how to use this interface within Graphite.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-#pragma hdrstop
-// any other headers (not precompiled)
-
-#include "GrClient.h"
-#include "GrDebug.h"
-#include "ITextSource.h"
-#include "SimpleTextSrc.h"
-
-#undef THIS_FILE
-DEFINE_THIS_FILE
-
-//:>********************************************************************************************
-//:> Initialization and destruction
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Constructors.
-----------------------------------------------------------------------------------------------*/
-SimpleTextSrc::SimpleTextSrc(gr::utf16 * pszText)
-{
- m_cref = 1; // COM-like behavior
-
- //m_cchLength = wcslen(pszText); // don't use wcslen, it's not cross-platform
- m_cchLength = 0;
- for (gr::utf16 * pch = pszText; *pch != 0; pch++)
- m_cchLength++;
- m_prgchText = new gr::utf16[m_cchLength + 1];
- std::copy(pszText, pszText + m_cchLength, m_prgchText);
- m_prgchText[m_cchLength] = 0; // zero-terminate
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-SimpleTextSrc::~SimpleTextSrc()
-{
- delete[] m_prgchText;
-}
-
-//:>********************************************************************************************
-//:> Interface methods
-//:>********************************************************************************************
-/*----------------------------------------------------------------------------------------------
- Get the specified range of text
-----------------------------------------------------------------------------------------------*/
-size_t SimpleTextSrc::fetch(toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer)
-{
- size_t ichRet = min(cch, size_t(m_cchLength - ichMin));
- std::copy(m_prgchText + ichMin, m_prgchText+ichMin + ichRet, prgchwBuffer);
- return ichRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return true if the text uses a right-to-left writing system.
-----------------------------------------------------------------------------------------------*/
-bool SimpleTextSrc::getRightToLeft(toffset ich)
-{
- return false;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the depth of embedding of the writing system.
-----------------------------------------------------------------------------------------------*/
-unsigned int SimpleTextSrc::getDirectionDepth(toffset ich)
-{
- return 0;
-}
-
-/*----------------------------------------------------------------------------------------------
- Return the vertical offset of the text. This simple implementation provides no
- vertical offset.
-----------------------------------------------------------------------------------------------*/
-float SimpleTextSrc::getVerticalOffset(toffset ich)
-{
- return 0;
-}
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.h b/Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.h
deleted file mode 100644
index a5d191b4ac3..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/SimpleTextSrc.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 1999, 2001 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: SimpleTextSrc.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- A simple text source that shows how to use this interface within Graphite.
--------------------------------------------------------------------------------*//*:End Ignore*/
-#pragma once
-#ifndef GRTXTSRC_INCLUDED
-#define GRTXTSRC_INCLUDED
-
-using namespace gr;
-
-/*----------------------------------------------------------------------------------------------
- Class: SimpleTextSrc
- This class provides a simple implementation for a text source for the Graphite engine.
- There are no paragraph properties of interest and one set of character properties that
- apply to the entire string.
-
- This class is a subclass of IColorTextSource so that it can be used by the
- WinSegmentPainter class, which expects the getColors method to be defined.
-----------------------------------------------------------------------------------------------*/
-class SimpleTextSrc : public IColorTextSource
-{
-public:
- // Constructor:
- SimpleTextSrc(gr::utf16 * pszText);
- ~SimpleTextSrc();
-
-/*
- virtual long IncRefCount(void)
- {
- return InterlockedIncrement(&m_cref);
- }
- virtual long DecRefCount(void)
- {
- long cref = InterlockedDecrement(&m_cref);
- if (cref == 0) {
- m_cref = 1;
- delete this;
- }
- return cref;
- }
-*/
- // -------------------------------------------------------------------------------
- // Interface methods:
-
- virtual UtfType utfEncodingForm()
- {
- return kutf16;
- }
- virtual size_t getLength()
- {
- return m_cchLength;
- }
- virtual size_t fetch(toffset ichMin, size_t cch, utf32 * prgchBuffer)
- {
- throw;
- }
- virtual size_t fetch(toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer);
- virtual size_t fetch(toffset ichMin, size_t cch, utf8 * prgchsBuffer)
- {
- throw;
- };
-
- virtual bool getRightToLeft(toffset ich);
- virtual unsigned int getDirectionDepth(toffset ich);
- virtual float getVerticalOffset(toffset ich);
-
- virtual isocode getLanguage(toffset ich)
- {
- isocode ret;
- ret.rgch[0] = 'e'; ret.rgch[1] = 'n'; ret.rgch[2] = 0; ret.rgch[3] = 0;
- return ret;
- }
-
- virtual std::pair<toffset, toffset> propertyRange(toffset ich)
- {
- std::pair<toffset, toffset> pairRet;
- pairRet.first = 0;
- pairRet.second = m_cchLength;
- return pairRet;
- }
-
- virtual size_t getFontFeatures(toffset ich, FeatureSetting * prgfset)
- {
- return 0; // no features in this simple implementation
- }
- virtual bool sameSegment(toffset ich1, toffset ich2)
- {
- return true;
- }
-
- virtual void getColors(toffset ich, int * pclrFore, int * pclrBack)
- {
- *pclrFore = kclrBlack;
- *pclrBack = kclrTransparent;
- }
-
-protected:
- long m_cref;
- gr::utf16 * m_prgchText;
- int m_cchLength;
-};
-
-
-#endif // !GRTXTSRC_INCLUDED
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/TestCase.cpp b/Build/source/libs/graphite-engine/test/RegressionTest/TestCase.cpp
deleted file mode 100644
index c9696141c95..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/TestCase.cpp
+++ /dev/null
@@ -1,1974 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2004 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TestCase.cpp
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- File to set up test cases for the Graphite regression test program.
-
-How to add a test:
- 1. Add the name of your test method to the class declaration in TestCase.h.
- 2. Increment the g_numberOfTests constant in this file.
- 3. Add a call to your test method in the SetupTests method in this file.
- 4. Copy one of the existing test methods such as SetupSimpleTest and change the name
- and data.
-
-Things that still need testing:
- Ligatures (there is one small test of this)
- Justification
- Fake italic
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-#include "main.h"
-#include <cstring>
-
-//:>********************************************************************************************
-//:> Test constants and methods
-//:>********************************************************************************************
-
-const int g_numberOfTests = 25; // *** increment as tests are added ***
-
-TestCase * g_ptcaseList; // list of test cases
-
-namespace gr { // and it was SC who got rid of the byte defn in GrPlatform.h!
-typedef unsigned char byte;
-}
-
-
-/*----------------------------------------------------------------------------------------------
- Create the list of tests.
-----------------------------------------------------------------------------------------------*/
-int TestCase::SetupTests(TestCase ** pptcaseList)
-{
- g_ptcaseList = new TestCase[g_numberOfTests];
- int cptcase = 0;
-
- // The number of methods called here should equal g_numberOfTests above.
- g_ptcaseList[0].SetupSimpleTest(); cptcase++;
- g_ptcaseList[1].SetupSimpleBacktrackTest(); cptcase++;
- g_ptcaseList[2].SetupSurrogateTest(); cptcase++;
- g_ptcaseList[3].SetupBurmese1(); cptcase++;
- g_ptcaseList[4].SetupBurmese2(); cptcase++;
- g_ptcaseList[5].SetupBurmese3(); cptcase++;
- g_ptcaseList[6].SetupBurmese4(); cptcase++;
- g_ptcaseList[7].SetupRoman(); cptcase++;
- g_ptcaseList[8].SetupRomanFeatures(); cptcase++;
- g_ptcaseList[9].SetupStackingAndBridging(); cptcase++;
- g_ptcaseList[10].SetupNoWhiteSpace(); cptcase++;
- g_ptcaseList[11].SetupNoWhiteSpaceNoSeg(); cptcase++;
- g_ptcaseList[12].SetupOnlyWhiteSpace(); cptcase++;
- g_ptcaseList[13].SetupCrossLine1(); cptcase++;
- g_ptcaseList[14].SetupCrossLine2(); cptcase++;
- g_ptcaseList[15].SetupCrossLine3(); cptcase++;
- g_ptcaseList[16].SetupCrossLine4(); cptcase++;
- g_ptcaseList[17].SetupArabic1(); cptcase++;
- g_ptcaseList[18].SetupArabic2(); cptcase++;
- g_ptcaseList[19].SetupTaiViet1(); cptcase++;
- g_ptcaseList[20].SetupTaiViet2(); cptcase++;
- g_ptcaseList[21].SetupDumbFallback1(); cptcase++;
- g_ptcaseList[22].SetupDumbFallback2(); cptcase++;
- g_ptcaseList[23].SetupBadFont(); cptcase++;
- g_ptcaseList[24].SetupBugTest(); cptcase++;
- // *** Add more method calls here. ***
-
- assert(cptcase == g_numberOfTests);
-
- *pptcaseList = g_ptcaseList;
-
- return g_numberOfTests;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up a simple test.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupSimpleTest()
-{
- m_testName = "Simple";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = L"This is a test."; // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 86; // physical width of segment
-
- const int charCnt = 15; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true
- };
-
- const int glyphCnt = 15; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {55, 75, 76, 86, 3, 76, 86, 3, 68, 3, 87, 72, 86, 87, 17};
- int xPositions[] = { 0, 9, 17, 22, 28, 33, 37, 43, 48, 55, 60, 64, 71, 77, 82};
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- int advWidths[] = { 9, 8, 4, 6, 4, 4, 6, 4, 7, 4, 4, 7, 6, 4, 4};
-
- int bbLefts[] = { 0, 9, 18, 22, 28, 33, 38, 43, 48, 55, 60, 65, 72, 78, 83};
- int bbRights[] = { 9, 17, 21, 27, 33, 37, 43, 48, 55, 60, 64, 71, 77, 82, 85};
- int bbTops[] = {10, 11, 10, 7, 0, 10, 7, 0, 7, 0, 9, 7, 7, 9, 1};
- int bbBottoms[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
- int charsToGlyphs[] = {
- 1, 1, 1, 2, 1, 2, 3, 1, 3, 4, 1, 4, 5, 1, 5, 6, 1, 6, 7, 1, 7
- };
- int c2gCount = 21;
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 3;
- int clickStuff[] = {
- 11, 25, 1, false, 0, 24, 8, kAbsent, kAbsent, kAbsent, // below baseline
- 42, 5, 7, true, 0, 24, 42, kAbsent, kAbsent, kAbsent, // near top of text
- 90, 16, 15, true, 0, 24, 85, kAbsent, kAbsent, kAbsent // near baseline
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(bbLefts, bbRights, bbTops, bbBottoms);
- SetInsPtFlags(insPtFlags);
- SetCharsToGlyphs(charsToGlyphs, c2gCount);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up a simple test with backtracking.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupSimpleBacktrackTest()
-{
- m_testName = "Simple Backtrack";
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = L"This is a test."; // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = true;
-
- // Output:
- m_segWidth = 55; // physical width of segment
-
- const int charCnt = 10; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true
- };
-
- const int glyphCnt = 10; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {55, 75, 76, 86, 3, 76, 86, 3, 68, 3};
- int xPositions[] = { 0, 9, 17, 22, 28, 33, 37, 43, 48, 55};
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- int advWidths[] = { 9, 8, 4, 6, 4, 4, 6, 4, 7, 4};
-
- const int contextBlockOutSize = 10;
- gr::byte contextBlockOut[] = { 15, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up a test that includes surrogates.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupSurrogateTest()
-{
- m_testName = "Surrogates";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = L"abXXcdYYe"; // text to render
- m_text[2] = 0xD835;
- m_text[3] = 0xDD13;
- m_text[6] = 0xD835;
- m_text[7] = 0xDD10;
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 65; // physical width of segment
-
- const int charCnt = 9; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, false, true, true, true, false, true
- };
-
- const int glyphCnt = 7; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {68, 69,1227, 70, 71,1015, 72};
- int xPositions[] = { 0, 7, 15, 27, 34, 42, 58};
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0};
- int advWidths[] = { 7, 8, 12, 7, 8, 15, 7};
-
- int bbLefts[] = { 0, 7, 15, 28, 35, 43, 59};
- int bbRights[] = { 7, 14, 26, 34, 42, 57, 65};
- int bbTops[] = { 7, 11, 10, 7, 11, 10, 7};
- int bbBottoms[] = { 0, 0, -3, 0, 0, 0, 0};
-
- int charsToGlyphs[] = {
- 0, 1, 0, 1, 1, 1, 2, 1, 2, 3, 0, 4, 1, 3, 5, 1, 4, 6, 1, 5, 7, 0,
- 8, 1, 6,
- };
- int c2gCount = 25;
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 3;
- int clickStuff[] = {
- 17, 25, 2, false, 0, 24, 14, kAbsent, kAbsent, kAbsent, // below baseline
- 25, 5, 4, true, 0, 24, 26, kAbsent, kAbsent, kAbsent, // near top of text
- 55, 16, 8, true, 0, 24, 57, kAbsent, kAbsent, kAbsent // near baseline
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(bbLefts, bbRights, bbTops, bbBottoms);
- SetInsPtFlags(insPtFlags);
- SetCharsToGlyphs(charsToGlyphs, c2gCount);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests using Burmese, to test complex positioning and non-white-space
- linebreaking.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupBurmese1()
-{
- m_testName = "Burmese 1";
- m_debug = false;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Burmese";
- m_fontFile = "grtest_burmese.ttf";
- m_text = BurmeseText();
- m_fontSize = 20; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 300; // width available for segment
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 281; // physical width of segment
-
- SetupBurmeseAux(
- 64, // character count
- 45, // glyph count
- 5); // number of click-tests
-
- // Each group = glyph-index, base, number of attached, glyphs, attached-glyph-indices
- int attachments[] = {
- 0,0,0, 1,1,0, 2,2,2,3,4, 3,2,0, 4,2,0, 5,5,1,6, 6,5,0, 7,7,3,8,9,10,
- 8,7,0, 9,7,0, 10,7,0, 11,11,0, 12,12,0, 13,13,0, 14,14,0, 15,15,0,
- 16,16,1,17, 17,16,0, 18,18,1,19, 19,18,0, 20,20,1,21, 21,20,0, 22,22,1,23,
- 23,22,0, 24,24,0, 25,25,0
- };
- int attCount = sizeof(attachments) / sizeof(int);
- SetAttachedClusters(attachments, attCount);
-
- const int contextBlockOutSize = 11;
- gr::byte contextBlockOut[] = { 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-void TestCase::SetupBurmese2()
-{
- m_testName = "Burmese 2";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Burmese";
- m_fontFile = "grtest_burmese.ttf";
-
- m_text = BurmeseText();
- m_fontSize = 20; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 275; // width available for segment
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 215; // physical width of segment
-
- SetupBurmeseAux(
- 47, // character count
- 33, // glyph count
- 3); // number of click-tests
-
- const int contextBlockOutSize = 11;
- gr::byte contextBlockOut[] = { 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-void TestCase::SetupBurmese3()
-{
- m_testName = "Burmese 3";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Burmese";
- m_fontFile = "grtest_burmese.ttf";
-
- m_text = BurmeseText();
- m_fontSize = 20; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 75; // width available for segment
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 73; // physical width of segment
-
- SetupBurmeseAux(
- 19, // character count
- 13, // glyph count
- 2); // number of click-tests
-
- const int contextBlockOutSize = 11;
- gr::byte contextBlockOut[] = { 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-void TestCase::SetupBurmese4()
-{
- m_testName = "Burmese 4";
- //m_traceLog = true;
- //m_debug = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Burmese";
- m_fontFile = "grtest_burmese.ttf";
-
- m_text = BurmeseText();
- m_fontSize = 20; // font size in points
- m_prefBreak = klbWsBreak; // preferred break-weight
- m_worstBreak = klbHyphenBreak; // worst-case break-weight
- m_availWidth = 30; // width available for segment
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
-
- // Output:
- m_noSegment = true;
- m_segWidth = 0; // physical width of segment
-
- SetupBurmeseAux(
- 0, // character count
- 0, // glyph count
- 0); // number of click-tests
-}
-
-void TestCase::SetupBurmeseAux(int charCnt, int glyphCnt, int clickTestCnt)
-{
- m_rtl = false;
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, false, false, false, true, false, false, false, false, // 0 - 9
- true, false, false, true, false, false, false, true, true, true, // 10 - 19
- true, false, true, true, false, false, true, false, false, false, // 20 - 29
- false, true, false, false, true, false, false, false, true, true, // 30 - 39
- true, true, true, true, true, true, true, true, true, false, // 40 - 49
- true, true, true, false, false, false, true, false, false, true, // 50 - 59
- false, false, false, true
- };
-
- // need glyphCnt elements in these arrays:
- // 0 10 20 30 40
- gid16 glyphList[] = {105,174,158,202,231,162,231,148,223,219,229,248, 3,226,162,173,216,231,177,195,115,231,170,204,243, 3,197,216,172,216, 3,233, 3,226,179,162,216,170,204,158,202,115,231,229, 3};
- int xPositions[] = { 0, 17, 20, 22, 28, 29, 38, 40, 50, 55, 56, 57, 73, 79, 89, 99,102,109,110,111,120,129,130,131,140,143,149,167,174,191,198,205,215,222,232,234,245,252,253,262,264,271,280,278,281};
- int yPositions[] = { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- int advWidths[] = { 17, 2, 9, 4, 0, 10, 0, 17, 2, 0, 0, 15, 6, 10, 10, 2, 7, 0, 10, 9, 9, 0, 10, 7, 2, 6, 17, 7, 17, 7, 6, 10, 6, 10, 2, 10, 7, 10, 7, 9, 4, 9, 0, 0, 6};
-
- int bbLefts[] = { 0, 10, 21, 23, 23, 30, 33, 41, 51, 49, 53, 58, 73, 80, 90, 96,100,103,111,109,121,123,131,132,141,143,150,165,175,189,198,206,215,223,233,235,243,253,254,263,265,272,275,275,281};
- int bbRights[] = { 16, 19, 28, 25, 28, 39, 38, 56, 54, 55, 56, 72, 79, 88, 98,101,109,109,119,119,129,129,139,138,142,149,166,173,190,197,205,214,222,231,244,244,251,261,260,271,267,280,280,278,288};
- int bbTops[] = { 7, 7, 7, -1, 15, 7, 15, 7, -1, 15, -2, 15, 0, 7, 7, 7, 7, 15, 7, -1, 7, 15, 7, -1, 7, 0, 7, 7, 7, 7, 0, 7, 0, 7, 16, 7, 7, 7, -1, 7, -1, 7, 15, -2, 0};
- int bbBottoms[] = { 0, -7, -1, -7, 9, 0, 9, 0, -7, 9, -5, 0, 0, 0, 0, -7, 0, 9, -4, -7, 0, 9, 0, -7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, 0, 0, -7, -1, -7, 0, 9, -5, 0};
-
- // Each group = char-index, number of glyphs, glyph-indices.
- int charsToGlyphs[] = {
- 0, 1, 0, 1, 1, 1, 2, 1, 1, 3, 1, 1, 4, 1, 1, 5, 1, 2, 6, 1, 3, 7, 1, 3,
- 8, 1, 4, 9, 1, 4, 10, 1, 5, 11, 1, 6, 12, 1, 6, 13, 1, 7
- };
- int c2gCount = sizeof(charsToGlyphs) / sizeof(int);
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- int clickStuff[] = {
- 10, 25, 1, true, 0, 25, 16, kAbsent, kAbsent, kAbsent,
- 40, 5, 13, false, 0, 25, 39, kAbsent, kAbsent, kAbsent,
- 93, 40, 19, false, 0, 25, 88, 0, 25, 77,
- 251, 5, 52, true, 0, 25,251, kAbsent, kAbsent, kAbsent,
- 235, 30, 48, false, -1, 27,230, 7, 19,243,
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetCharsToGlyphs(charsToGlyphs, c2gCount);
- SetBBs(bbLefts, bbRights, bbTops, bbBottoms);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-std::wstring TestCase::BurmeseText()
-{
- std::wstring strRet;
- wchar_t charData[] = {
- 0x1000, 0x1039, 0x101a, 0x1039, 0x101d, 0x1014, 0x1039, 0x101f, 0x1039, 0x200c,
- 0x1015, 0x1039, 0x200c, 0x1010, 0x102f, 0x102d, 0x1037, 0x104f, 0x0020, 0x1015,
- 0x1039, 0x101a, 0x1031, 0x102c, 0x1039, 0x200c, 0x101b, 0x1039, 0x101d, 0x1039,
- 0x101f, 0x1004, 0x1039, 0x200c, 0x1019, 0x1039, 0x101f, 0x102f, 0x104a, 0x0020,
- 0x101e, 0x102c, 0x101a, 0x102c, 0x0020, 0x1040, 0x0020, 0x1015, 0x1039, 0x101b,
- 0x1031, 0x102c, 0x1019, 0x1039, 0x101f, 0x102f, 0x1014, 0x1039, 0x101f, 0x1004,
- 0x1039, 0x200c, 0x1037, 0x0020, 0x1021, 0x1031, 0x102c, 0x1004, 0x1039, 0x200c,
- 0x1019, 0x1039, 0x101b, 0x1004, 0x1039, 0x200c, 0x1019, 0x1039, 0x101f, 0x102f,
- 0x1010, 0x102f, 0x102d, 0x1037, 0x101e, 0x100a, 0x1039, 0x200c, 0x0020, 0x1000,
- 0x1039, 0x101a, 0x1039, 0x101d, 0x1014, 0x102f, 0x1039, 0x200c, 0x1015, 0x1039,
- 0x200c, 0x1010, 0x102f, 0x102d, 0x1037, 0x104f, 0x0000
- };
- strRet.assign(charData);
- return strRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests using Roman script, which tests stacking diacritics, many-to-one glyphs,
- and features.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupRoman()
-{
- m_testName = "Roman";
- m_traceLog = true;
- //m_debug = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = RomanText(); // text to render
- m_fontSize = 36; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 278; // physical width of segment
-
- const int charCnt = 26; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true
- };
-
- const int glyphCnt = 24; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- // 0 10 20
- gid16 glyphList[] = {72,1815,1768, 83,1789, 86, 74,1943,1956,1926,1061, 68,1777,1755,805,1815, 44,1815, 80,1833,1768,1855,1838,637};
- int xPositions[] = { 0, 23, 23, 21, 41, 45, 64, 88, 98, 112, 116,148, 171, 171,170, 188,183, 203, 199, 230, 230, 230, 230,236};
- int yPositions[] = { 0, 0, 10, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 10, 20, 0};
- int advWidths[] = {21, 0, 0, 24, 0, 18, 24, 13, 13, 4, 31, 21, 0, 0, 13, 0, 15, 0, 37, 0, 0, 0, 0, 41};
-
- // Each group = glyph-index, base, number of attached, glyphs, attached-glyph-indices
- int attachments[] = {
- 0,0,2,1,2, 1,0,0, 2,0,0, 3,3,0, 4,4,0, 5,5,0, 6,6,0, 7,7,2,8,9,
- 8,7,0, 9,7,0, 10,10,0, 11,11,2,12,13, 12,11,0, 13,11,0, 14,14,1,15, 15,14,0,
- 16,16,1,17, 17,16,0, 18,18,4,19,20,21,22, 19,18,0, 20,18,0, 21,18,0, 22,18,0,
- 23,23,0
- };
- int attCount = sizeof(attachments) / sizeof(int);
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 5;
- int clickStuff[] = {
- 10, 15, 2, false, 9, 21, 1, 20, 30, 18,
- 61, 50, 6, true, 0, 72, 63, kAbsent, kAbsent, kAbsent,
- 90, 40, 7, false, 0, 72, 87, kAbsent, kAbsent, kAbsent,
- 260, 40, 25, true, 0, 73,263, kAbsent, kAbsent, kAbsent, // ligature
- 267, 40, 25, false, 0, 73,263, kAbsent, kAbsent, kAbsent, // ligature
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetAttachedClusters(attachments, attCount);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-void TestCase::SetupRomanFeatures()
-{
- m_testName = "Roman Features";
- m_traceLog = true;
- //m_debug = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = RomanText(); // text to render
- m_fontSize = 36; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
-
- m_fset[0].id = 1024; m_fset[0].value = 2; // capital eng with tail
- m_fset[1].id = 1026; m_fset[1].value = 1; // tone numbers
- m_fset[2].id = 1029; m_fset[2].value = 1; // vietnamese diacritics
- m_fset[3].id = 1032; m_fset[3].value = 1; // literacy alternates
- m_fset[4].id = 1034; m_fset[4].value = 1; // y-hook alternate (default)
- m_fset[5].id = 1051; m_fset[5].value = 0; // diacritic selection
- m_fset[6].id = 0;
-
- // Output:
- m_segWidth = 307; // physical width of segment
-
- const int charCnt = 26; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, false, false, true, true, true, true, true, true, true,
- true, true, false, false, true, false, true, false, true, false,
- false, false, false, true, true, true
- };
-
- const int glyphCnt = 23; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- // 0 10 20
- gid16 glyphList[] = {72,1815,1768, 83,1789, 86,681,1659,1667,1662,1056,274,1778, 805,1815, 44,1815, 80,1833,1768,1855,1838,637};
- int xPositions[] = { 0, 23, 23, 21, 41, 45, 64, 87, 104, 121, 138,173, 174, 198, 217, 211, 231, 227, 258, 258, 258, 258,265};
- int yPositions[] = { 0, 0, 10, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 20, 0};
- int advWidths[] = {21, 0, 0, 24, 0, 18, 23, 17, 17, 17, 34, 24, 24, 13, 0, 15, 0, 37, 0, 0, 0, 0, 41};
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 3;
- int clickStuff[] = {
- 10, 15, 3, true, 0, 72, 20, kAbsent, kAbsent, kAbsent,
- 116, 5, 9, true, 0, 72, 120, kAbsent, kAbsent, kAbsent,
- 90, 40, 7, false, 0, 72, 86, kAbsent, kAbsent, kAbsent
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-std::wstring TestCase::RomanText()
-{
- std::wstring strRet;
- wchar_t charData[] = {
- 0x0065, 0x0303, 0x0300, 0x0070, 0x0361, 0x0073, 0x0067, 0x02e8, 0x02e5, 0x02e7,
- 0x014a, 0x0061, 0x0302, 0x0301, 0x0069, 0x0303, 0x0049, 0x0303, 0x006d, 0x033c,
- 0x0300, 0x0308, 0x0304, 0x0066, 0x0066, 0x0069, 0x0000
- };
- strRet.assign(charData);
- return strRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests for handling complex diacritic stacking and bridging.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupStackingAndBridging()
-{
- m_testName = "Roman Stacking and Bridging";
- //m_traceLog = true;
- //m_debug = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_fontSize = 36; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
-
- // text to render
- wchar_t charData[] = {
- 0x0061,0x035d,0x0061,0x0020,0x0074,0x035d,0x0061,0x0020,0x0061,0x0300,
- 0x0300,0x035d,0x0061,0x0020,0x0283,0x0300,0x0300,0x035d,0x0061,0x0020,
- 0x0061,0x0316,0x0316,0xf176,0x0061,0x0020,0x0283,0x0300,0x0300,0xf176,
- 0x0061,0x0020,0x0061,0x0316,0x0316,0xf176,0x0061,0x0020,0x0283,0x035d,
- 0xf176,0x0061,0x0000
- };
- m_text.assign(charData);
-
- // Output:
- m_segWidth = 414; // physical width of segment
-
- const int charCnt = 42; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true,
- };
-
- const int glyphCnt = 42; // number of glyphs in the segment
-
- // 68 = a, 97 = t, 1305 = esh, 1768 = upper grave, 1765 = lower grave, 1802 = upper bridge,
- // 1801 = lower bridge
-
- // need glyphCnt elements in these arrays:
- // 0 10 20 30 40
- gid16 glyphList[] = {68,1802, 68, 3, 87,1802, 68, 3, 68,1768,1768,1802, 68, 3,1305,1768,1768,1802, 68, 3, 68,1765,1765,1801, 68, 3,1305,1768,1768,1801, 68, 3, 68,1765,1765,1801, 68, 3,1305,1802,1801, 68};
- int xPositions[] = { 0, 21, 21, 42, 56, 73, 69, 91, 105, 127, 127, 126, 126,147, 161, 181, 181, 178,177,199,212, 235, 235, 234,234,255, 269, 289, 289, 286,285,307,320, 343, 343, 342,342,363, 377, 393, 393,393};
- int yPositions[] = { 0, -7, 0, 0, 0, -1, 0, 0, 0, 0, 10, 12, 0, 0, 0, 10, 20, 23, 0, 0, 0, 0, -9, -17, 0, 0, 0, 10, 20, -6, 0, 0, 0, 0, -9, -17, 0, 0, 0, 3, -6, 0};
- int advWidths[] = {21, 0, 21, 13, 13, 0, 21, 13, 21, 0, 0, 0, 21, 13, 16, 0, 0, 0, 21, 13, 21, 0, 0, 0, 21, 13, 16, 0, 0, 0, 21, 13, 21, 0, 0, 0, 21, 13, 16, 0, 0, 21};
-
- int bbLefts[] = { 1, 0, 23, 42, 56, 52, 71, 91, 106, 108, 108, 105, 128,147, 159, 162, 162, 157,179,199,214, 217, 217, 213,235,255, 267, 270, 270, 265,287,307,322, 325, 325, 321,343,363, 375, 373, 373,395};
- int bbRights[] = {21, 41, 42, 56, 69, 93, 91,105, 126, 119, 119, 146, 147,161, 178, 173, 173, 198,199,212,234, 228, 228, 254,255,269, 286, 281, 281, 306,306,320,342, 336, 336, 362,363,377, 394, 413, 414,414};
- int bbTops [] = {22, 33, 22, 0, 28, 40, 22, 0, 22, 32, 42, 54, 22, 0, 33, 42, 53, 64, 22, 0, 22, -3, -13, -26, 22, 0, 33, 42, 53, -15, 22, 0, 22, -3, -13, -26, 22, 0, 33, 44, -15, 22};
- int bbBottoms [] = { 0, 26, 0, 0, 0, 33, 0, 0, 0, 24, 34, 47, 0, 0, -10, 34, 44, 57, 0, 0, 0, -11, -21, -32, 0, 0, -10, 34, 44, -21, 0, 0, 0, -11, -21, -32, 0, 0, -10, 38, -21, 0};
-
- // Each group = glyph-index, base, number of attached, glyphs, attached-glyph-indices
- int attachments[] = {
- 0,0,0, 1,1,0, 2,2,0, 3,3,0, 4,4,0, 5,5,0, 6,6,0, 7,7,0,
- 8,8,2,9,10, 9,8,0, 10,8,0, 11,11,0, 12,12,0, 13,13,0, 14,14,2,15,16,
- 15,14,0, 16,14,0, 17,17,0, 18,18,0, 19,19,0, 20,20,2,21,22, 21,20,0,
- 22,20,0, 23,23,0, 24,24,0, 25,25,0, 26,26,2,27,28, 27,26,0, 28,26,0,
- 29,29,0, 30,30,0, 31,31,0, 32,32,2,33,34, 33,32,0, 34,32,0, 35,35,0,
- 36,36,0, 37,37,0, 38,38,0, 39,39,0, 40,40,0, 41,41,0
- };
- int attCount = sizeof(attachments) / sizeof(int);
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 6;
- int clickStuff[] = {
- 109, 25, 9, false, 19, 32, 105, 30, 56, 125, // first grave on 4th a
- 178, 26, 15, true, 19, 66, 176, 9, 21, 159, // top of 1st esh, right side
- 220, 84, 23, false, 78, 89, 210, 65, 77, 228, // first lower bridge diac
- 271, 40, 26, false, 0, 72, 266, kAbsent, kAbsent, kAbsent, // second esh, left side
- 271, 65, 26, false, 0, 72, 266, kAbsent, kAbsent, kAbsent, // just below second esh, left side
- 271, 68, 29, false, 67, 78, 262, 0, 11, 280 // lower bridge diac under esh, left side
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(bbLefts, bbRights, bbTops, bbBottoms);
- SetInsPtFlags(insPtFlags);
- SetAttachedClusters(attachments, attCount);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests for handling trailing whitespace.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupNoWhiteSpace()
-{
- m_testName = "No white space";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = L"The quick brown fox."; // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 150; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_twsh = ktwshNoWs;
- m_paraRtl = true;
-
- // Output:
- m_segWidth = 115; // physical width of segment
-
- const int charCnt = 16; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true
- };
-
- const int glyphCnt = 16; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {55, 75, 72, 3, 3, 84, 88, 76, 70, 78, 3, 69, 85, 82, 90, 81};
- int xPositions[] = { 0, 9, 17, 24, 29, 34, 42, 50, 54, 61, 69, 74, 82, 87, 95,107};
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- int advWidths[] = { 9, 8, 7, 4, 4, 8, 8, 4, 7, 8, 4, 8, 5, 8, 11, 8};
-
- const int contextBlockOutSize = 10;
- gr::byte contextBlockOut[] = { 15, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(0, NULL);
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-void TestCase::SetupNoWhiteSpaceNoSeg()
-{
- m_testName = "No white space - no segment";
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = L"The quick brown fox."; // text to render
- m_firstChar = 15; // spaces after brown
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 2; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_twsh = ktwshNoWs;
- m_paraRtl = true;
-
- // Output:
- m_noSegment = true;
- m_segWidth = 0; // physical width of segment
-
- const int charCnt = 0; // number of characters in the segment
-
- const int glyphCnt = 0; // number of glyphs in the segment
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
-}
-
-void TestCase::SetupOnlyWhiteSpace()
-{
- m_testName = "Only white space";
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_roman.ttf";
- m_text = L" fox."; // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 2; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_twsh = ktwshOnlyWs;
- m_paraRtl = true;
-
- // Output:
- m_segWidth = 0; // physical width of segment - visible
-
- const int charCnt = 3; // number of characters in the segment
- // need charCnt elements in this array:
- bool insPtFlags[] = { true, true, true };
-
- const int glyphCnt = 3; // number of glyphs in the segment
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = { 3, 3, 3 };
- int xPositions[] = { -4, -9,-13 };
- int yPositions[] = { 0, 0, 0 };
- int advWidths[] = { 4, 4, 4 };
-
- // TODO: add click tests when the bug fix with upstream tr white space is integrated.
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 6;
- int clickStuff[] = {
- 2, 25, 0, false, 0, 24, -1, kAbsent, kAbsent, kAbsent,
- -1, 5, 0, false, 0, 24, -1, kAbsent, kAbsent, kAbsent,
- -6, -3, 1, false, 0, 24, -5, kAbsent, kAbsent, kAbsent,
- -8, -3, 2, true, 0, 24, -10, kAbsent, kAbsent, kAbsent,
- -13, 40, 3, true, 0, 24, -14, kAbsent, kAbsent, kAbsent,
- -18, 0, 3, true, 0, 24, -14, kAbsent, kAbsent, kAbsent
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests of cross-line contextualization.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupCrossLine1()
-{
- m_testName = "Cross-line 1";
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test CrossLine";
- m_fontFile = "grtest_xline.ttf";
- m_text = CrossLineText(); // "abcddddefx@ghijkmmmmn$yopppppqrsss$z@tttwwww";
- m_fontSize = 30; // font size in points
- m_prefBreak = klbHyphenBreak; // preferred break-weight
- m_availWidth = 350; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 312; // physical width of segment
-
- const int charCnt = 10; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true
- };
-
- const int glyphCnt = 13; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {30, 67, 68, 69, 70, 70, 70, 70, 71, 72, 34, 90, 32 };
- int xPositions[] = { 0, 40, 58, 79, 97,118,139,160,180,199,213,251,272 };
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- int advWidths[] = {40, 18, 20, 18, 20, 20, 20, 20, 18, 13, 38, 20, 40 };
-
- // TODO: add click tests
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 0;
- int * clickStuff = NULL;
- //int clickStuff[] = ;
- //{
- // 10, 25, 1, false, 0, 24, 9, kAbsent, kAbsent, kAbsent,
- //};
-
- const int contextBlockOutSize = 9;
- gr::byte contextBlockOut[] = { 20, 1, 0, 2, 0, 0, 4, 0, 0, 0 };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-void TestCase::SetupCrossLine2()
-{
- m_testName = "Cross-line 2";
- //m_traceLog = true;
- //m_debug = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test CrossLine";
- m_fontFile = "grtest_xline.ttf";
- m_text = CrossLineText(); // "abcddddefx@ghijkmmmmn$yopppppqrsss$z@tttwwww";
- m_firstChar = 10;
- m_fontSize = 30; // font size in points
- m_prefBreak = klbHyphenBreak; // preferred break-weight
- m_availWidth = 400; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_initWithPrev = true;
-
- const int contextBlockInSize = 9; // output from Cross-line 1
- gr::byte contextBlockIn[] = { 20, 1, 0, 2, 0, 0, 4, 0, 0, 0 };
-
- // Output:
- m_segWidth = 395; // physical width of segment
-
- const int charCnt = 13; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- false, true, true, true, true, true, true, true, true, true, true, true, true
- };
-
- const int glyphCnt = 15; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {30, 34, 73, 74, 75, 76, 77, 79, 79, 79, 79, 80, 6, 91, 32 };
- int xPositions[] = { 0, 40, 78, 99,119,131,143,163,196,228,260,293,314,334,355 };
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- int advWidths[] = {40, 38, 20, 20, 11, 11, 20, 32, 32, 32, 32, 20, 20, 20, 40 };
-
- // TODO: add click tests
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 0;
- int * clickStuff = NULL;
- //int clickStuff[] = ;
- //{
- // 10, 25, 1, false, 0, 24, 9, kAbsent, kAbsent, kAbsent,
- //};
-
- const int contextBlockOutSize = 9;
- gr::byte contextBlockOut[] = { 20, 1, 0, 3, 0, 0, 4, 0, 0, 0 };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
- SetInputContextBlock(contextBlockInSize, contextBlockIn);
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-void TestCase::SetupCrossLine3()
-{
- m_testName = "Cross-line 3";
- m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test CrossLine";
- m_fontFile = "grtest_xline.ttf";
- m_text = CrossLineText(); // "abcddddefx@ghijkmmmmn$yopppppqrsss$z@tttwwww";
- m_firstChar = 23;
- m_fontSize = 30; // font size in points
- m_prefBreak = klbHyphenBreak; // preferred break-weight
- m_availWidth = 400; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_initWithPrev = true;
-
- const int contextBlockInSize = 9; // output from Cross-line 2
- gr::byte contextBlockIn[] = { 20, 1, 0, 3, 0, 0, 4, 0, 0, 0 };
-
- // Output:
- m_segWidth = 358; // physical width of segment
-
- const int charCnt = 13; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true, true, false, true
- };
-
- const int glyphCnt = 16; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {30, 81, 6, 82, 82, 82, 82, 82, 83, 84, 85, 85, 85, 34, 8, 92 };
- int xPositions[] = { 0, 40, 60, 81,102,123,144,164,185,206,220,236,253,269,307,339 };
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- int advWidths[] = {40, 20, 20, 20, 20, 20, 20, 20, 20, 14, 16, 16, 16, 38, 32, 18 };
-
- // TODO: add click tests
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 0;
- int * clickStuff = NULL;
- //int clickStuff[] = ;
- //{
- // 10, 25, 1, false, 0, 24, 9, kAbsent, kAbsent, kAbsent,
- //};
-
- const int contextBlockOutSize = 9;
- gr::byte contextBlockOut[] = { 20, 1, 0, 3, 0, 0, 4, 0, 0, 0 };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
- SetInputContextBlock(contextBlockInSize, contextBlockIn);
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-void TestCase::SetupCrossLine4()
-{
- m_testName = "Cross-line 4";
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test CrossLine";
- m_fontFile = "grtest_xline.ttf";
- m_text = CrossLineText(); // "abcddddefx@ghijkmmmmn$yopppppqrsss$z@tttwwww";
- m_firstChar = 36;
- m_fontSize = 30; // font size in points
- m_prefBreak = klbHyphenBreak; // preferred break-weight
- m_availWidth = 400; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_initWithPrev = true;
-
- const int contextBlockInSize = 9; // output from Cross-line 3
- gr::byte contextBlockIn[] = { 20, 1, 0, 3, 0, 0, 4, 0, 0, 0 };
-
- // Output:
- m_segWidth = 248; // physical width of segment
-
- const int charCnt = 8; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- false, true, true, true, true, true, true, true
- };
-
- const int glyphCnt = 10; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = { 8, 6, 86, 86, 86, 89, 89, 89, 89, 32 };
- int xPositions[] = { 0, 32, 53, 64, 76, 87,117,147,177,208 };
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- int advWidths[] = {32, 20, 11, 11, 11, 30, 30, 30, 30, 40 };
-
- // TODO: add click tests
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 0;
- int * clickStuff = NULL;
- //int clickStuff[] = ;
- //{
- // 10, 25, 1, false, 0, 24, 9, kAbsent, kAbsent, kAbsent,
- //};
-
- const int contextBlockOutSize = 0;
- gr::byte * contextBlockOut = NULL;
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
- SetInputContextBlock(contextBlockInSize, contextBlockIn);
- SetOutputContextBlock(contextBlockOutSize, contextBlockOut);
-}
-
-std::wstring TestCase::CrossLineText()
-{
- // The equivalent data is in the "xlineTest.wpx" file.
- std::wstring strRet;
- strRet.assign(L"abcddddefx@ghijkmmmmn$yopppppqrsss$z@tttwwww");
- return strRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests using Arabic: RTL, bidi, and embedded direction codes.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupArabic1()
-{
- m_testName = "Arabic 1";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Arabic";
- m_fontFile = "grtest_arabic.ttf";
- m_text = ArabicText();
- m_fontSize = 20; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 1000; // width available for segment
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 409; // physical width of segment
-
- SetupArabicAux(
- 61, // character count
- 61); // glyph count
-
- // Each group = glyph-index, base, number of attached, glyphs, attached-glyph-indices
- int attachments[] = {
- 0,0,0, 1,1,1,2, 2,1,0, 3,3,4,4,5,6,7, 4,3,0, 5,3,0, 6,3,0, 7,3,0,
- 8,8,0, 9,9,4,10,11,12,13, 10,9,0, 11,9,0, 12,9,0, 13,9,0, 14,14,0,
- 15,15,0, 16,16,1,17, 17,16,0, 18,18,1,19, 19,18,0 // etc
- };
- int attCount = sizeof(attachments) / sizeof(int);
- SetAttachedClusters(attachments, attCount);
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- int clickStuff[] = {
- 199, 13, 37, true, 0, 35,196, kAbsent, kAbsent, kAbsent,
- 396, 13, 3, false, 8, 26,399, 10, 17, 397,
- 396, 8, 6, true, 3, 11,391, 9, 22, 394,
- 222, 5, 32, true, 0, 35,225, kAbsent, kAbsent, kAbsent,
- 217, 5, 31, false, 0, 35,215, 0, 35, 246,
- };
- SetClickTests(4, clickStuff);
-}
-
-void TestCase::SetupArabic2()
-{
- m_testName = "Arabic 2";
- m_debug = false;
- //m_traceLog = false;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test Arabic";
- m_fontFile = "grtest_arabic.ttf";
- m_text = ArabicText();
- m_fontSize = 20; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 230; // width available for segment-break after number
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
-
- // Output:
- m_segWidth = 193; // physical width of segment
-
- SetupArabicAux(
- 35, // character count
- 35); // glyph count
-
- // The x-positions are different for a shorter segment:
- // 0 10 20 30
- int xPositions[] = {188,183,184,177,178,178,170,169,162,150,154,154,153,155,139,132,127,127,115,118,108,102, 84, 77, 77, 72, 65, 46, 46, 37, 31, 20, 10, 0, -6};
- SetXPositions(xPositions);
-}
-
-void TestCase::SetupArabicAux(int charCnt, int glyphCnt)
-{
- m_rtl = true;
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true, // 0 - 9
- true, true, true, true, true, true, true, true, true, true, // 10 - 19
- true, true, true, true, true, true, true, true, true, true, // 20 - 29
- true, true, true, true, true, true, true, true, true, true, // 30 - 39
- true, true, true, true, true, true, true, true, true, true, // 40 - 49
- true, true, true, true, true, true, true, true, true, true, // 50 - 59
- true
- };
-
- // need glyphCnt elements in these arrays:
- // 0 10 20 30 40 50 60
- gid16 glyphList[] = {785,658,907,1182,913,907,1192,907, 3,811,914,909,911,934,592, 3,785,909,621,911, 12, 3,321, 3,236,659,731,555,925,961, 3,992,991,990, 3,821,924,712,474,882,527, 3,411,924,950, 3,236,990,991,992,993,995,236, 3,821,769,455,290,839,620,961};
- int xPositions[] = {404,400,401, 393,394,394, 386,385,379,366,370,370,370,371,355,348,343,343,331,334,324,318,300,293,293,289,281,263,262,254,247,237,226,216,209,197,197,189,179,172,154,147,135,139,127,120,120,110, 99, 89, 79, 68, 68, 62, 50, 41, 36, 29, 19, 8, 0};
- int yPositions[] = { 0, 0, -5, 0, 0, 4, 0, 0, 0, 0, -5, -3, -2, 4, 0, 0, 0, 1, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- int advWidths[] = { 4, 4, 0, 6, 0, 0, 6, 0, 6, 12, 0, 0, 0, 0, 11, 6, 4, 0, 11, 0, 7, 6, 17, 6, 0, 4, 7, 18, 0, 8, 6, 10, 10, 10, 6, 11, 0, 7, 9, 7, 17, 6, 11, 0, 8, 6, 0, 10, 10, 10, 10, 10, 0, 6, 11, 9, 4, 6, 9, 11, 8};
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
-}
-
-std::wstring TestCase::ArabicText()
-{
- std::wstring strRet;
- wchar_t charData[] = {
- 0x0628, 0x0628, 0x064e, 0x0644, 0x064e, 0x0654, 0x0627, 0x064e, 0x0020, 0x0686,
- 0x0650, 0x0652, 0x0655, 0x06e0, 0x06a8, 0x0020, 0x0628, 0x0650, 0x06b9, 0x0652,
- 0x0029, 0x0020, 0x0628, 0x0020, 0x200d, 0x062a, 0x06a8, 0x0633, 0x0670, 0x061b,
- 0x0020, 0x06f1, 0x06f2, 0x06f3, 0x0020, 0x0633, 0x0670, 0x0639, 0x062f, 0x0645,
- 0x067e, 0x0020, 0x0644, 0x0670, 0x060c, 0x0020, 0x202e, 0x06f1, 0x06f2, 0x06f3,
- 0x06f4, 0x06f5, 0x202c, 0x0020, 0x0633, 0x0647, 0x0627, 0x0631, 0x0639, 0x0646,
- 0x061b, 0x0000
- };
- strRet.assign(charData);
- return strRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests that uses Tai Viet script to test positioning.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupTaiViet1()
-{
- m_testName = "Tai Viet Collisions";
- //m_traceLog = true;
- //m_debug = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test TaiViet";
- m_fontFile = "grtest_taiviet.ttf";
- m_fontSize = 36; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 2000; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_text = TaiVietText();
-
- m_fset[0].id = 2001; m_fset[0].value = 2; // vowel position = final consonant
- m_fset[1].id = 1051; m_fset[1].value = 0; // diacritic selection = off
- m_fset[2].id = 2102; m_fset[2].value = 0; // collision avoidance = off
- m_fset[3].id = 0;
-
- // Output:
- m_segWidth = 946; // physical width of segment
-
- const int charCnt = 46; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, false, true, true, true, false, true, true, true,
- false, false, true, true, false, true, true, false, false, true,
- true, false, false, true, true, false, false, true, true, false,
- false, true, true, false, true, true, false, false, true, true,
- false, true, true, true, false, false
- };
-
- const int glyphCnt = 46; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- // 0 10 20 30 40
- gid16 glyphList[] = {59, 70, 71, 65, 59, 70, 71, 23, 32, 175, 70, 65, 55, 70, 73, 55, 175, 184,185, 55, 76, 184,185, 55, 77, 70, 185, 41, 77, 70, 23, 56,175, 65, 27, 93, 70,185, 53, 69, 81, 50, 27,175, 70, 23};
- int xPositions[] = { 0, 72, 47, 72,101, 174,149,174, 206, 281, 283, 251, 283,352, 316, 352, 418, 425,386,425,493, 495,458, 495,556,559, 528, 559, 623, 623,591,623,706, 676, 706, 776,777,738, 777, 836, 816,843,880,944,946,912};
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 5, 13, 0, 0, 5, 22, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 19, 0, 0, 8, 0, 0, 0, 5, 21, 0};
- int advWidths[] = {47, 0, 24, 29, 47, 0, 24, 32, 44, 0, 0, 29, 33, 0, 36, 33, 0, 0, 26, 33, 0, 0, 26, 33, 0, 0, 26, 32, 0, 0, 32, 52, 0, 29, 32, 0, 0, 26, 39, 0, 26, 36, 32, 0, 0, 32};
-
- int bbLefts[] = { 5, 45, 52, 73,106, 147,154,177, 209, 254, 257, 252, 286,326, 322, 355, 391, 414,390,428,463, 484, 462,498,540,532, 532, 562, 607, 597,594,627,679, 677, 709, 744,751,742, 784, 825, 820,849,883,917,919,915};
- int bbRights[] = {72, 72, 63, 97,174, 174,165,211, 277, 281, 283, 276, 349,352, 355, 419, 418, 422,409,491,494, 491, 481,561,553,559, 551, 621, 620, 623,628,681,706, 701, 756, 776,777,761, 835, 833, 840,882,930,944,946,949};
- int bbTops [] = {60, 50, 25, 25, 60, 50, 25, 41, 60, 49, 66, 25, 60, 50, 40, 60, 55, 65, 36, 60, 56, 74, 36, 60, -5, 55, 36, 60, -5, 50, 41, 40, 49, 25, 55, 56, 69, 36, 55, 61, 41, 40, 55, 55, 71, 41};
- int bbBottoms [] = { 0, 35, 0, 0, 0, 35, 0, 0, 0, 34, 50, 0, 0, 35, 0, 0, 39, 51, 0, 0, 40, 60, 0, 0,-27, 40, 0, 0, -27, 35, 0, 0, 34, 0, 0, 40, 54, 0, 0, 45, 0, 0, 0, 39, 56, 0};
-
- // Each group = glyph-index, base, number of attached, glyphs, attached-glyph-indices
- int attachments[] = {
- 0,0,0, 1,2,0, 2,2,1,1, 3,3,0, 4,4,0, 5,6,0, 6,6,1,5, 7,7,0,
- 8,8,0, 9,11,0, 10,11,0, 11,11,2,9,10, 12,12,0, 13,14,0, 14,14,1,13,
- 15,15,0, 16,18,0, 17,18,0, 18,18,2,16,17, 19,19,0, 20,22,0, 21,22,0,
- 22,22,2,20,21, 23,23,0, 24,26,0, 25,26,0, 26,26,2,24,25, 27,27,0, 28,30,0,
- 29,30,0, 30,30,2,28,29, 31,31,0, 32,33,0, 33,33,1,32, 34,34,0, 35,37,0,
- 36,37,0, 37,37,2,35,36, 38,38,0, 39,40,0, 40,40,1,39, 41,41,0, 42,42,0,
- 43,45,0, 44,45,0, 45,45,2,43,44
- };
- int attCount = sizeof(attachments) / sizeof(int);
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel Top, prim sel bottom, prim sel left,
- // sec sel Top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 4;
- int clickStuff[] = {
- 55, 40, 1, true, 0,100, 46, kAbsent, kAbsent, kAbsent,
- 65, 20, 1, false, 0,100, 46, kAbsent, kAbsent, kAbsent, // adjust to the left to get a valid IP?
- 95, 84, 4, true, 0,100, 100, kAbsent, kAbsent, kAbsent,
- 104, 40, 4, false, 0,100, 100, kAbsent, kAbsent, kAbsent
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(bbLefts, bbRights, bbTops, bbBottoms);
- SetInsPtFlags(insPtFlags);
- SetAttachedClusters(attachments, attCount);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-/*----------------------------------------------------------------------------------------------
- A set of tests that uses Tai Viet script to test positioning.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupTaiViet2()
-{
- m_testName = "Tai Viet No Collisions";
- //m_traceLog = true;
- //m_debug = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"Graphite Test TaiViet";
- m_fontFile = "grtest_taiviet.ttf";
- m_fontSize = 36; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 2000; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_text = TaiVietText();
-
- m_fset[0].id = 2001; m_fset[0].value = 2; // vowel position = final consonant
- m_fset[1].id = 1051; m_fset[1].value = 1; // diacritic selection = on
- m_fset[2].id = 2102; m_fset[2].value = 1; // collision avoidance = off
- m_fset[3].id = 0;
-
- // Output:
- m_segWidth = 947; // physical width of segment
-
- const int charCnt = 46; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true
- };
-
- const int glyphCnt = 46; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- // 0 10 20 30 40
- gid16 glyphList[] = {59, 70, 71, 65, 59, 70, 71, 23, 32, 175, 70, 65, 55, 70, 73, 55, 175, 184,185, 55, 76, 184,185, 55, 77, 70, 185, 41, 77, 70, 23, 56,175, 65, 27, 93, 70,185, 53, 69, 81, 50, 27,175, 70, 23};
- int xPositions[] = { 0, 82, 47, 72,101, 184,149,174, 206, 281, 283, 251, 283,359, 316, 352, 418, 431,386,425,496, 508,458, 497,559,578, 530, 561, 626, 635,593,626,709, 678, 708, 778,780,740, 780, 853, 819,846,882,942,947,914};
- int yPositions[] = { 0, -3, 0, 0, 0, -3, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 9, 0, 0, 2, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, -4, 0, 0, 5, 25, 0, 0, 8, 0, 0, 0, 0, 23, 0};
- int advWidths[] = {47, 0, 24, 29, 47, 0, 24, 32, 44, 0, 0, 29, 33, 0, 36, 33, 0, 0, 26, 33, 0, 0, 26, 33, 0, 0, 26, 32, 0, 0, 32, 52, 0, 29, 32, 0, 0, 26, 39, 0, 26, 36, 32, 0, 0, 32};
-
- int bbLefts[] = { 5, 56, 52, 73,106, 158,154,177, 209, 254, 257, 252, 286,333, 322, 355, 391, 420,390,428,466, 497, 462,500,542,552, 534, 564, 609, 609,597,629,682, 679, 711, 747,753,744, 786, 842, 823,851,885,916,921,918};
- int bbRights[] = {72, 82, 63, 97,174, 184,165,211, 277, 281, 283, 276, 349,359, 355, 419, 418, 427,409,491,496, 504, 481,564,555,578, 553, 624, 622, 635,630,684,709, 703, 758, 778,780,763, 837, 850, 842,885,932,942,947,951};
- int bbTops [] = {60, 46, 25, 25, 60, 46, 25, 41, 60, 49, 73, 25, 60, 50, 40, 60, 50, 60, 36, 60, 54, 72, 36, 60, -5, 52, 36, 60, -5, 50, 41, 40, 45, 25, 55, 56, 75, 36, 55, 61, 41, 40, 55, 50, 73, 41};
- int bbBottoms [] = { 0, 31, 0, 0, 0, 31, 0, 0, 0, 34, 57, 0, 0, 35, 0, 0, 34, 46, 0, 0, 37, 57, 0, 0,-27, 36, 0, 0, -27, 35, 0, 0, 29, 0, 0, 40, 60, 0, 0, 45, 0, 0, 0, 34, 58, 0};
-
- // Each group = glyph-index, base, number of attached, glyphs, attached-glyph-indices
- int attachments[] = {
- 0,0,0, 1,2,0, 2,2,1,1, 3,3,0, 4,4,0, 5,6,0, 6,6,1,5, 7,7,0,
- 8,8,0, 9,11,0, 10,11,0, 11,11,2,9,10, 12,12,0, 13,14,0, 14,14,1,13,
- 15,15,0, 16,18,0, 17,18,0, 18,18,2,16,17, 19,19,0, 20,22,0, 21,22,0,
- 22,22,2,20,21, 23,23,0, 24,26,0, 25,26,0, 26,26,2,24,25, 27,27,0, 28,30,0,
- 29,30,0, 30,30,2,28,29, 31,31,0, 32,33,0, 33,33,1,32, 34,34,0, 35,37,0,
- 36,37,0, 37,37,2,35,36, 38,38,0, 39,40,0, 40,40,1,39, 41,41,0, 42,42,0,
- 43,45,0, 44,45,0, 45,45,2,43,44
- };
- int attCount = sizeof(attachments) / sizeof(int);
-
- // Each line in clickStuff represents one click test with the following items:
- // click x-coord, click y-coord, char index, assoc-prev,
- // prim sel top, prim sel bottom, prim sel left,
- // sec sel top, sec sel bottom, sec sel left
- // Y-coordinates are offsets from segment top; ie, (0,0) is segment top-left.
- const int clickTestCnt = 4;
- int clickStuff[] = {
- 55, 40, 2, false, 35, 65, 49, 14, 33, 82,
- 65, 20, 1, false, 0,100, 50, kAbsent, kAbsent, kAbsent,
- 95, 84, 4, true, 0,100, 100, kAbsent, kAbsent, kAbsent,
- 104, 40, 4, false, 0,100, 100, kAbsent, kAbsent, kAbsent
- };
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(bbLefts, bbRights, bbTops, bbBottoms);
- SetInsPtFlags(insPtFlags);
- SetAttachedClusters(attachments, attCount);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-std::wstring TestCase::TaiVietText()
-{
- std::wstring strRet;
- wchar_t charData[] = {
- 0xe00f,0xe042,0xe031,0xe02b,0xe00f,0xe042,0xe031,0xe025,0xe021,0xe033,
- 0xe042,0xe02b,0xe01c,0xe042,0xe03e,0xe01c,0xe033,0xe040,0xe009,0xe01c,
- 0xe039,0xe040,0xe009,0xe01c,0xe035,0xe042,0xe009,0xe024,0xe035,0xe042,
- 0xe025,0xe01b,0xe033,0xe02b,0xe00a,0xe030,0xe042,0xe009,0xe01e,0xe040,
- 0xe03b,0xe019,0xe00a,0xe033,0xe042,0xe025,0x0000
- };
- strRet.assign(charData);
- return strRet;
-}
-
-/*----------------------------------------------------------------------------------------------
- Set up a test where the font is bad and we revert to dumb rendering
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupDumbFallback1()
-{
- m_testName = "Dumb Fallback 1";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"GrErr BadVersion";
- m_fontFile = "grtest_badVersion.ttf";
- m_text = RomanText(); // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_dumbFallback = true;
-
- // Output:
- m_badFont = true;
- m_segWidth = 196; // physical width of segment
-
- const int charCnt = 26; // number of characters in the segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true, true, true,
- true, true, true, true, true, true
- };
-
- const int glyphCnt = 26; // number of glyphs in the segment
-
- // need glyphCnt elements in these arrays:
- // 0 10 20
- gid16 glyphList[] = {71, 0, 0, 82, 0, 85, 73, 0, 0, 0, 0, 67, 0, 0, 75, 0, 43, 0, 79, 0, 0, 0, 0, 72, 72, 75};
- int xPositions[] = { 0, 7, 15, 23, 31, 39, 46, 54, 62, 70, 78, 86, 93,101,109,114,122,128,136,149,157,165,173,181,186,192};
- int yPositions[] = { 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};
- int advWidths[] = { 7, 8, 8, 8, 8, 6, 8, 8, 8, 8, 8, 7, 8, 8, 4, 8, 5, 8, 12, 8, 8, 8, 8, 5, 5, 4};
-
- const int clickTestCnt = 0;
- int * clickStuff = NULL;
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetBBs(NULL, NULL, NULL, NULL);
- SetInsPtFlags(insPtFlags);
- SetClickTests(clickTestCnt, clickStuff);
-}
-
-/*----------------------------------------------------------------------------------------------
- Now make sure we will get a crash when we turn dumb rendering off for the same font.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupDumbFallback2()
-{
- m_testName = "Dumb Fallback 2";
- //m_debug = true;
- //m_traceLog = true;
- //m_skip = true;
-
- // Input:
- m_fontName = L"GrErr BadVersion";
- m_fontFile = "grtest_badVersion.ttf";
- m_text = L"This is a test."; // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_dumbFallback = false;
-
- // Output:
- m_badFont = true;
- m_noSegment = true;
- m_segWidth = 0; // physical width of segment
-
- const int charCnt = 0; // number of characters in the segment
-
- const int glyphCnt = 0; // number of glyphs in the segment
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
-}
-
-/*----------------------------------------------------------------------------------------------
- Now make sure we will get a crash when we turn dumb rendering off for the same font.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetupBadFont()
-{
- m_testName = "Bad Font";
- //m_debug = true;
- //m_traceLog = true;
- m_skip = true;
-
- // Input:
- // The font has been corrupted so that the size of the cmap in the directory is invalid.
- m_fontName = L"Graphite Test Roman";
- m_fontFile = "grtest_badCmap.ttf";
- m_text = L"This is a test."; // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_rtl = false;
- m_backtrack = false;
- m_dumbFallback = true; // wants to do dumb fall-back, but can't because the font is totally invalid
-
- // Output:
- m_badFont = true;
- m_noSegment = true;
- m_segWidth = 0; // physical width of segment
-
- const int charCnt = 0; // number of characters in the segment
-
- const int glyphCnt = 0; // number of glyphs in the segment
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
-}
-// *** Add more methods here. ***
-
-
-//:>********************************************************************************************
-//:> Utility methods.
-//:>********************************************************************************************
-
-/*----------------------------------------------------------------------------------------------
- Delete the list of tests.
-----------------------------------------------------------------------------------------------*/
-void TestCase::DeleteTests()
-{
- delete[] g_ptcaseList;
-}
-
-/*----------------------------------------------------------------------------------------------
- Constructor: initialize test case with default values.
-----------------------------------------------------------------------------------------------*/
-TestCase::TestCase()
-{
- m_testName = "Unknown";
- m_debug = false;
- m_traceLog = false;
- m_skip = false;
-
- m_fontName.erase();
- m_fontFile.erase();
- m_text.erase(); // text to render
- m_fontSize = 12; // font size in points
- m_prefBreak = klbWordBreak; // preferred break-weight
- m_worstBreak = klbClipBreak; // worst-case break-weight
- m_availWidth = 500; // width available for segment
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
- m_twsh = ktwshAll;
- m_paraRtl = false;
- m_firstChar = 0;
- m_contextBlockInSize = 0;
- m_contextBlockIn = NULL;
- m_initWithPrev = false;
- memset(m_fset, 0, MAXFEAT * sizeof(FeatureSetting));
- m_dumbFallback = true;
-
- m_badFont = false;
- m_noSegment = false; // yes, a segment should be generated
- m_charCount = 0;
- m_glyphCount = 0;
- m_glyphArray = NULL;
- m_xPositions = NULL;
- m_yPositions = NULL;
- m_advWidths = NULL;
- m_bbLefts = NULL;
- m_bbRights = NULL;
- m_bbTops = NULL;
- m_bbBottoms = NULL;
- m_insPointFlags = NULL;
- m_charsToGlyphs = NULL;
- m_c2gCount = 0;
- m_attGlyphs = NULL;
- m_attGCount = 0;
- m_contextBlockOutSize = 0;
- m_contextBlockOut = NULL;
-
- m_clickTestCount = 0;
- m_clickTests = NULL;
-}
-
-/*----------------------------------------------------------------------------------------------
- Destructor.
-----------------------------------------------------------------------------------------------*/
-TestCase::~TestCase()
-{
- delete[] m_glyphArray;
- delete[] m_xPositions;
- delete[] m_yPositions;
- delete[] m_advWidths;
- delete[] m_bbLefts;
- delete[] m_bbRights;
- delete[] m_bbTops;
- delete[] m_bbBottoms;
- delete[] m_insPointFlags;
- delete[] m_charsToGlyphs;
- delete[] m_attGlyphs;
- delete[] m_clickTests;
- delete[] m_contextBlockIn;
- delete[] m_contextBlockOut;
-}
-
-/*----------------------------------------------------------------------------------------------
- Setters.
-----------------------------------------------------------------------------------------------*/
-void TestCase::SetCharCount(int charCount)
-{
- m_charCount = charCount;
- m_insPointFlags = new bool[charCount];
-}
-
-void TestCase::SetGlyphCount(int glyphCount)
-{
- m_glyphCount = glyphCount;
- m_glyphArray = new gid16[glyphCount];
- m_xPositions = new int[glyphCount];
- m_yPositions = new int[glyphCount];
- m_advWidths = new int[glyphCount];
- m_bbLefts = new int[glyphCount];
- m_bbRights = new int[glyphCount];
- m_bbTops = new int[glyphCount];
- m_bbBottoms = new int[glyphCount];
-}
-
-void TestCase::SetGlyphList(gid16 * glyphList)
-{
- for (int i = 0; i < m_glyphCount; i++)
- m_glyphArray[i] = glyphList[i];
-}
-
-void TestCase::SetXPositions(int * xPosList)
-{
- for (int i = 0; i < m_glyphCount; i++)
- m_xPositions[i] = xPosList[i];
-}
-
-void TestCase::SetYPositions(int * yPosList)
-{
- for (int i = 0; i < m_glyphCount; i++)
- m_yPositions[i] = yPosList[i];
-}
-
-void TestCase::SetAdvWidths(int * advWidths)
-{
- for (int i = 0; i < m_glyphCount; i++)
- m_advWidths[i] = advWidths[i];
-}
-
-void TestCase::SetBBs(int * bbLefts, int * bbRights, int * bbTops, int * bbBottoms)
-{
- if (bbLefts == NULL) // no bb tests
- {
- delete[] m_bbLefts;
- delete[] m_bbRights;
- delete[] m_bbTops;
- delete[] m_bbBottoms;
- m_bbLefts = NULL;
- m_bbRights = NULL;
- m_bbTops = NULL;
- m_bbBottoms = NULL;
- return;
- }
-
- for (int i = 0; i < m_glyphCount; i++)
- {
- m_bbLefts[i] = bbLefts[i];
- m_bbRights[i] = bbRights[i];
- m_bbTops[i] = bbTops[i];
- m_bbBottoms[i] = bbBottoms[i];
- }
-}
-
-void TestCase::SetInsPtFlags(bool * flags)
-{
- for (int i = 0; i < m_charCount; i++)
- m_insPointFlags[i] = flags[i];
-}
-
-void TestCase::SetCharsToGlyphs(int * stuff, int count)
-{
- m_c2gCount = count;
- m_charsToGlyphs = new int[count];
- for (int i = 0; i < count; i++)
- m_charsToGlyphs[i] = stuff[i];
-}
-
-void TestCase::SetAttachedClusters(int * stuff, int count)
-{
- m_attGCount = count;
- m_attGlyphs = new int[count];
- for (int i = 0; i < count; i++)
- m_attGlyphs[i] = stuff[i];
-}
-
-void TestCase::SetClickTests(int clickTestCount, int * clickStuff)
-{
- const int fc = ClickTest::fieldCnt;
-
- m_clickTestCount = clickTestCount;
- m_clickTests = new ClickTest[clickTestCount];
- for (int i = 0; i < clickTestCount; i++)
- {
- m_clickTests[i].xClick = clickStuff[(i * fc) + 0];
- m_clickTests[i].yClick = clickStuff[(i * fc) + 1];
- m_clickTests[i].charIndex = clickStuff[(i * fc) + 2];
- m_clickTests[i].assocPrev = clickStuff[(i * fc) + 3];
- m_clickTests[i].sel1Top = clickStuff[(i * fc) + 4];
- m_clickTests[i].sel1Bottom = clickStuff[(i * fc) + 5];
- m_clickTests[i].sel1Left = clickStuff[(i * fc) + 6];
- m_clickTests[i].sel2Top = clickStuff[(i * fc) + 7];
- m_clickTests[i].sel2Bottom = clickStuff[(i * fc) + 8];
- m_clickTests[i].sel2Left = clickStuff[(i * fc) + 9];
- }
-}
-
-void TestCase::SetInputContextBlock(int contextBlockInSize, gr::byte * pContextBlockIn)
-{
- m_contextBlockInSize = contextBlockInSize;
- if (contextBlockInSize == 0)
- {
- m_contextBlockIn = NULL;
- }
- else
- {
- m_contextBlockIn = new gr::byte[contextBlockInSize];
- std::copy(pContextBlockIn, pContextBlockIn + contextBlockInSize, m_contextBlockIn);
- }
-}
-
-void TestCase::SetOutputContextBlock(int contextBlockOutSize, gr::byte * pContextBlockOut)
-{
- m_contextBlockOutSize = contextBlockOutSize;
- m_contextBlockOut = new gr::byte[contextBlockOutSize];
- std::copy(pContextBlockOut, pContextBlockOut + contextBlockOutSize, m_contextBlockOut);
-}
-
-
-
-
-void TestCase::SetupBugTest()
-{
- m_testName = "Bug Test";
- m_traceLog = true;
- m_debug = true;
- m_skip = true;
-
- // Input:
- m_fontName = L"Padauk";
- m_fontFile = "grtest_infinity.ttf";
-
- wchar_t charData[] = { 0x101e, 0x1032, 0x1015, 0x103c, 0x103d, 0x103e, 0x102d, 0x1038, 0x0000 };
- m_text.assign(charData);
- int charCnt = 8;
-
- m_fontSize = 20; // font size in points
- m_prefBreak = klbWsBreak; // preferred break-weight
- m_worstBreak = klbHyphenBreak; // worst-case break-weight
- m_availWidth = 1000; // width available for segment
- m_bold = false;
- m_italic = false;
- m_backtrack = false;
- m_rtl = false;
-
- // Output:
- m_noSegment = false;
- m_segWidth = 52; // physical width of segment
-
- // need charCnt elements in this array:
- bool insPtFlags[] = {
- true, false, true, true, false, false, false, true
- };
-
- int glyphCnt = 7;
- // need glyphCnt elements in these arrays:
- gid16 glyphList[] = {105,174,158,202,231,162,231};
- int xPositions[] = { 0, 17, 20, 22, 28, 29, 38};
- int yPositions[] = { 0, 0, 0, 0, 0, 0, 0};
- int advWidths[] = { 17, 2, 9, 4, 0, 10, 0};
-
- int bbLefts[] = { 0, 10, 21, 23, 23, 30, 33};
- int bbRights[] = { 16, 19, 28, 25, 28, 39, 38};
- int bbTops[] = { 7, 7, 7, -1, 15, 7, 15};
- int bbBottoms[] = { 0, -7, -1, -7, 9, 0, 9};
-
- // Each group = char-index, number of glyphs, glyph-indices.
- int charsToGlyphs[] = {
- 0, 1, 0, 1, 1, 1, 2, 1, 3, 3, 1, 2, 4, 1, 4, 5, 0, 6, 1, 5, 7, 1, 6
- };
- int c2gCount = sizeof(charsToGlyphs) / sizeof(int);
-
- // Finish setting up test case.
- SetCharCount(charCnt);
- SetGlyphCount(glyphCnt);
- SetGlyphList(glyphList);
- SetXPositions(xPositions);
- SetYPositions(yPositions);
- SetAdvWidths(advWidths);
- SetCharsToGlyphs(charsToGlyphs, c2gCount);
- SetBBs(bbLefts, bbRights, bbTops, bbBottoms);
- SetInsPtFlags(insPtFlags);
-}
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/TestCase.h b/Build/source/libs/graphite-engine/test/RegressionTest/TestCase.h
deleted file mode 100644
index 68258929a1f..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/TestCase.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2004 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: TestCase.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Definition of TestCase class for Graphite regression test program.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef TESTCASE_H
-#define TESTCASE_H 1
-
-#define NO_EXCEPTIONS 1
-
-class TestCase
-{
-public:
- // Methods to set up test cases.
- void SetupSimpleTest();
- void SetupSimpleBacktrackTest();
- void SetupSurrogateTest(); // TODO: add a test for UTF-8
- void SetupBurmese1();
- void SetupBurmese2();
- void SetupBurmese3();
- void SetupBurmese4();
- void SetupRoman();
- void SetupRomanFeatures();
- void SetupStackingAndBridging();
- void SetupNoWhiteSpace();
- void SetupNoWhiteSpaceNoSeg();
- void SetupOnlyWhiteSpace();
- void SetupCrossLine1();
- void SetupCrossLine2();
- void SetupCrossLine3();
- void SetupCrossLine4();
- void SetupArabic1();
- void SetupArabic2();
- void SetupTaiViet1();
- void SetupTaiViet2();
- void SetupDumbFallback1();
- void SetupDumbFallback2();
- void SetupBadFont();
- void SetupBugTest();
- // *** Add more methods here. ***
-
-protected:
- // Auxiliary functions to set up test cases.
- void SetupBurmeseAux(int charCount, int glyphCount, int clickTestCount);
- void SetupArabicAux(int charCount, int glyphCount);
- std::wstring BurmeseText();
- std::wstring RomanText();
- std::wstring CrossLineText();
- std::wstring ArabicText();
- std::wstring TaiVietText();
-
-public:
- const static int kAbsent = -100; // not present in data
-
-public:
- // constructor:
- TestCase();
- // destructor:
- ~TestCase();
-
- static int SetupTests(TestCase **);
- static void DeleteTests();
-
- // Getters:
- std::string TestName() { return m_testName; }
- bool RunDebugger() { return m_debug; }
- bool TraceLog() { return m_traceLog; }
- bool Skip() { return m_skip; }
-
- std::wstring Text() { return m_text; }
- std::wstring FontName() { return m_fontName; }
- std::string FontFile() { return m_fontFile; }
- size_t FontSize() { return m_fontSize; }
- LineBrk PrefBreak() { return m_prefBreak; }
- LineBrk WorstBreak() { return m_worstBreak; }
- int FeatureID(int i) { return m_fset[i].id; }
- int FeatureValue(int i) { return m_fset[i].value; }
- FeatureSetting * Features() { return m_fset; }
- int AvailWidth() { return m_availWidth; }
- bool Backtrack() { return m_backtrack; }
- TrWsHandling Twsh() { return m_twsh; }
- bool Rtl() { return m_rtl; }
- bool ParaRtl() { return m_paraRtl; }
- size_t FirstChar() { return m_firstChar; }
- bool DumbFallback() { return m_dumbFallback; }
- size_t InputContextBlock(gr::byte ** ppContextBlock)
- {
- *ppContextBlock = m_contextBlockIn;
- return m_contextBlockInSize;
- }
-
- bool InitWithPrevSeg() { return m_initWithPrev; }
- bool BadFont() { return m_badFont; }
- bool NoSegment() { return m_noSegment; }
- int SegWidth() { return m_segWidth; }
- int CharCount() { return m_charCount; }
- int GlyphCount() { return m_glyphCount; }
-
- int GlyphID(int i) { return m_glyphArray[i]; }
- int XPos(int i) { return m_xPositions[i]; }
- int YPos(int i) { return m_yPositions[i]; }
- int AdvWidth(int i) { return m_advWidths[i]; }
- int BbLeft(int i) { return m_bbLefts[i]; }
- int BbRight(int i) { return m_bbRights[i]; }
- int BbTop(int i) { return m_bbTops[i]; }
- int BbBottom(int i) { return m_bbBottoms[i]; }
- bool BbTests() { return (m_bbLefts != NULL); }
-
- int InsPtFlag(int i) { return m_insPointFlags[i]; }
-
- int CharToGlyphCount() { return m_c2gCount; }
- int CharToGlyphItem(int i) { return m_charsToGlyphs[i]; }
- int AttachedGlyphCount() { return m_attGCount; } // that is, the lenght of the data
- int AttachedGlyphItem(int i) { return m_attGlyphs[i]; }
-
- int NumberOfClickTests() { return m_clickTestCount; }
- int XClick(int i) { return m_clickTests[i].xClick; }
- int YClick(int i) { return m_clickTests[i].yClick; }
- int ClickCharIndex(int i) { return m_clickTests[i].charIndex; }
- bool ClickAssocPrev(int i) { return (bool)m_clickTests[i].assocPrev; }
- int Sel1Top(int i) { return m_clickTests[i].sel1Top; }
- int Sel1Bottom(int i) { return m_clickTests[i].sel1Bottom; }
- int Sel1Left(int i) { return m_clickTests[i].sel1Left; }
- int Sel2Top(int i) { return m_clickTests[i].sel2Top; }
- int Sel2Bottom(int i) { return m_clickTests[i].sel2Bottom; }
- int Sel2Left(int i) { return m_clickTests[i].sel2Left; }
- size_t OutputContextBlockSize() { return m_contextBlockOutSize; }
- bool CompareContextBlock(gr::byte * pResult)
- {
- for (size_t i = 0; i < m_contextBlockOutSize; i++)
- {
- if (m_contextBlockOut[i] != pResult[i])
- return false;
- }
- return true;
- }
-
- struct ClickTest
- {
- int xClick;
- int yClick;
- int charIndex;
- int assocPrev; // boolean: 0 or 1
- int sel1Top;
- int sel1Bottom;
- int sel1Left; // we only need left or right, not both
- int sel2Top;
- int sel2Bottom;
- int sel2Left;
-
- const static int fieldCnt = 10;
- };
-
-protected:
- std::string m_testName;
- bool m_debug; // break into the debugger when running this test
- bool m_traceLog; // generate a logging file (tracelog.txt) for this test; if this is turned on for
- // more than one test, the tests will be appended
- bool m_skip;
-
-#define MAXFEAT 10
-
- // Input parameters:
- std::wstring m_text; // default: none
- std::wstring m_fontName; // default: empty
- std::string m_fontFile; // default: empty
- size_t m_fontSize; // default: 12
- LineBrk m_prefBreak; // default: word-break
- LineBrk m_worstBreak; // default: clip-break
- FeatureSetting m_fset[MAXFEAT]; // default: none
- int m_availWidth; // default: 100
- bool m_bold; // default: false
- bool m_italic; // default: false
- bool m_rtl; // default: false
- bool m_backtrack; // default: false
- TrWsHandling m_twsh; // default: ktwshAll
- bool m_paraRtl; // default: false
- size_t m_firstChar; // default: 0
- size_t m_contextBlockInSize; // default: 0
- gr::byte * m_contextBlockIn; // default: NULL -- DELETE
- bool m_initWithPrev; // default: false
- bool m_dumbFallback; // default: true
- // start of line flag
- // resolution
- // justification
-
- // Output:
- bool m_badFont; // default: false
- bool m_noSegment; // no segment should be generated
- int m_segWidth;
- int m_charCount;
- int m_glyphCount;
- gid16 * m_glyphArray;
- int * m_xPositions;
- int * m_yPositions;
- int * m_advWidths;
- int * m_bbLefts;
- int * m_bbRights;
- int * m_bbTops;
- int * m_bbBottoms;
- bool * m_insPointFlags;
- int * m_charsToGlyphs; // char-to-glyph mappings
- int m_c2gCount;
- int * m_attGlyphs; // attachment clusters
- int m_attGCount;
- int m_clickTestCount;
- ClickTest * m_clickTests;
- size_t m_contextBlockOutSize;
- gr::byte * m_contextBlockOut;
- // glyphs-to-chars
- // pdichwContext
- // arrow key behavior
- // etc.
-
- // Setters:
- void SetCharCount(int charCount);
- void SetGlyphCount(int glyphCount);
- void SetGlyphList(gid16 * glyphList);
- void SetXPositions(int * posList);
- void SetYPositions(int * posList);
- void SetAdvWidths(int * advWidths);
- void SetBBs(int * bbLefts, int * bbRights, int * bbTops, int * bbBottoms);
- void SetInsPtFlags(bool * flags);
- void SetCharsToGlyphs(int * stuff, int count);
- void SetAttachedClusters(int * stuff, int count);
- void SetClickTests(int clickTestCount, int * clickStuff);
- void SetInputContextBlock(int contextBlockInSize, gr::byte * contextBlockIn);
- void SetOutputContextBlock(int contextBlockOutSize, gr::byte * contextBlockIn);
-};
-
-
-#endif // !TESTCASE_H
-
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/arabicText.wpx b/Build/source/libs/graphite-engine/test/RegressionTest/arabicText.wpx
deleted file mode 100644
index 62fee81be5b..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/arabicText.wpx
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE WpDoc SYSTEM "WorldPad.dtd">
-<WpDoc wpxVersion="2.0">
-
-<Languages>
- <LgWritingSystem id="arb" language="arb" type="ISO-639-2">
- <Name24>
- <AUni ws="en">Arabic, Standard</AUni>
- </Name24>
- <Abbr24>
- <AUni ws="en">Ara</AUni>
- </Abbr24>
- <Locale24><Integer val="1033"/></Locale24>
- <RightToLeft24><Boolean val="true"/></RightToLeft24>
- <DefaultSerif24><Uni>Scheherazade Graphite Alpha</Uni></DefaultSerif24>
- <DefaultSansSerif24><Uni>Scheherazade Graphite Alpha</Uni></DefaultSansSerif24>
- <DefaultBodyFont24><Uni>Charis SIL</Uni></DefaultBodyFont24>
- <DefaultMonospace24><Uni>Courier</Uni></DefaultMonospace24>
- <ICULocale24><Uni>arb</Uni></ICULocale24>
- <KeyboardType24><Uni>standard</Uni></KeyboardType24>
- <KeymanKeyboard24><Uni>Arabic Demo</Uni></KeymanKeyboard24>
- <Collations24>
- <LgCollation>
- <Name30>
- <AUni ws="en">DefaultCollation</AUni>
- </Name30>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CI_AI</Uni></WinCollation30>
- </LgCollation>
- </Collations24>
- </LgWritingSystem>
-</Languages>
-
-<Styles>
- <StStyle>
- <Name17><Uni>Normal</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni></Uni></BasedOn17>
- <Next17><Uni>Normal</Uni></Next17>
- <Rules17>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Bulleted List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Bulleted List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="101" bulNumStartAt="1"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 1</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 1</Uni></Next17>
- <Rules17>
- <Prop bold="invert" fontsize="14000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 2</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 2</Uni></Next17>
- <Rules17>
- <Prop italic="invert" fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 3</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 3</Uni></Next17>
- <Rules17>
- <Prop fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Numbered List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Numbered List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="10"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>External Link</Uni></Name17>
- <Type17><Integer val="1"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>External Link</Uni></Next17>
- <Rules17>
- <Prop underline="single" forecolor="7f007f" undercolor="7f007f"/>
- </Rules17>
- </StStyle>
-</Styles>
-
-<Body docRightToLeft="false">
- <StTxtPara>
- <StyleRules15>
- <Prop spaceBefore="12000" spaceAfter="12000" rightToLeft="1" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="arb" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Arabic" fontVariations="1051=1,1030=0">ببَلَٔاَ Ú†Ùْٕ۠ڨ بÙÚ¹Ù’) ب â€ØªÚ¨Ø³Ù°Ø› Û±Û²Û³ سٰعدمپ لٰ، ‮۱۲۳۴۵‬ سهارعن؛</Run>
- </Str>
- </Contents16>
- </StTxtPara>
-</Body>
-
-<PageSetup>
- <PageInfo>
- <TopMargin9999><Integer val="72000"/></TopMargin9999>
- <BottomMargin9999><Integer val="72000"/></BottomMargin9999>
- <LeftMargin9999><Integer val="90000"/></LeftMargin9999>
- <RightMargin9999><Integer val="90000"/></RightMargin9999>
- <HeaderMargin9999><Integer val="36000"/></HeaderMargin9999>
- <FooterMargin9999><Integer val="36000"/></FooterMargin9999>
- <PageSize9999><Integer val="0"/></PageSize9999>
- <PageHeight9999><Integer val="792000"/></PageHeight9999>
- <PageWidth9999><Integer val="612000"/></PageWidth9999>
- <PageOrientation9999><Integer val="0"/></PageOrientation9999>
- <Header9999>
- <Str>
- <Run ws="en">arabicText.wpx</Run>
- </Str>
- </Header9999>
- <Footer9999>
- <Str>
- <Run ws="en">&amp;[page],&amp;[date]</Run>
- </Str>
- </Footer9999>
- </PageInfo>
-</PageSetup>
-
-</WpDoc>
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/bridgingStackingText.wpx b/Build/source/libs/graphite-engine/test/RegressionTest/bridgingStackingText.wpx
deleted file mode 100644
index d91ecea8262..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/bridgingStackingText.wpx
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE WpDoc SYSTEM "WorldPad.dtd">
-<WpDoc wpxVersion="2.0">
-
-<Languages>
- <LgWritingSystem id="en" language="en" type="ISO-639-1">
- <Name24>
- <AUni ws="en">English</AUni>
- </Name24>
- <Abbr24>
- <AUni ws="en">Eng</AUni>
- </Abbr24>
- <Description24>
- <AStr ws="en">
- <Run ws="en">The standard alphabetic representation of English (United States style).</Run>
- </AStr>
- </Description24>
- <Locale24><Integer val="1033"/></Locale24>
- <RightToLeft24><Boolean val="false"/></RightToLeft24>
- <DefaultSerif24><Uni>Times New Roman</Uni></DefaultSerif24>
- <DefaultSansSerif24><Uni>Arial</Uni></DefaultSansSerif24>
- <DefaultBodyFont24><Uni>Charis SIL</Uni></DefaultBodyFont24>
- <DefaultMonospace24><Uni>Courier New</Uni></DefaultMonospace24>
- <ICULocale24><Uni>en</Uni></ICULocale24>
- <KeyboardType24><Uni>standard</Uni></KeyboardType24>
- <Collations24>
- <LgCollation>
- <Name30>
- <AUni ws="en">Default Collation</AUni>
- </Name30>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CI_AI</Uni></WinCollation30>
- </LgCollation>
- <LgCollation>
- <Name30>
- <AUni ws="en">Case Sensitive</AUni>
- </Name30>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CS_AI</Uni></WinCollation30>
- </LgCollation>
- </Collations24>
- </LgWritingSystem>
-</Languages>
-
-<Styles>
- <StStyle>
- <Name17><Uni>Normal</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni></Uni></BasedOn17>
- <Next17><Uni>Normal</Uni></Next17>
- <Rules17>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Bulleted List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Bulleted List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="101" bulNumStartAt="1"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 1</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 1</Uni></Next17>
- <Rules17>
- <Prop bold="invert" fontsize="14000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 2</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 2</Uni></Next17>
- <Rules17>
- <Prop italic="invert" fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 3</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 3</Uni></Next17>
- <Rules17>
- <Prop fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Numbered List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Numbered List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="10"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>External Link</Uni></Name17>
- <Type17><Integer val="1"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>External Link</Uni></Next17>
- <Rules17>
- <Prop underline="single" forecolor="7f007f" undercolor="7f007f"/>
- </Rules17>
- </StStyle>
-</Styles>
-
-<Body docRightToLeft="false">
- <StTxtPara>
- <StyleRules15>
- <Prop namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="48000" fontsizeUnit="mpt" fontFamily="Doulos SIL"></Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman">aÍa tÍa à̀Ía ʃ̀̀Ía aÌ–Ì–ï…¶a ʃ̀̀a aÌ–Ì–ï…¶a ʃÍï…¶a</Run>
- </Str>
- </Contents16>
- </StTxtPara>
-</Body>
-
-<PageSetup>
- <PageInfo>
- <TopMargin9999><Integer val="72000"/></TopMargin9999>
- <BottomMargin9999><Integer val="72000"/></BottomMargin9999>
- <LeftMargin9999><Integer val="90000"/></LeftMargin9999>
- <RightMargin9999><Integer val="90000"/></RightMargin9999>
- <HeaderMargin9999><Integer val="36000"/></HeaderMargin9999>
- <FooterMargin9999><Integer val="36000"/></FooterMargin9999>
- <PageSize9999><Integer val="0"/></PageSize9999>
- <PageHeight9999><Integer val="792000"/></PageHeight9999>
- <PageWidth9999><Integer val="612000"/></PageWidth9999>
- <PageOrientation9999><Integer val="0"/></PageOrientation9999>
- <Header9999>
- <Str>
- <Run ws="en">bridgingDiacTest.wpx</Run>
- </Str>
- </Header9999>
- <Footer9999>
- <Str>
- <Run ws="en">&amp;[page],&amp;[date]</Run>
- </Str>
- </Footer9999>
- </PageInfo>
-</PageSetup>
-
-</WpDoc>
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/burmeseText.wpx b/Build/source/libs/graphite-engine/test/RegressionTest/burmeseText.wpx
deleted file mode 100644
index 94d699a2a1c..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/burmeseText.wpx
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE WpDoc SYSTEM "WorldPad.dtd">
-<WpDoc wpxVersion="2.0">
-
-<Languages>
- <LgWritingSystem id="my" language="my" type="ISO-639-1">
- <Name24>
- <AUni ws="en">Burmese</AUni>
- </Name24>
- <Description24>
- <AStr ws="en">
- <Run></Run>
- </AStr>
- </Description24>
- <Locale24><Integer val="1109"/></Locale24>
- <RightToLeft24><Boolean val="false"/></RightToLeft24>
- <DefaultSerif24><Uni>Padauk</Uni></DefaultSerif24>
- <DefaultSansSerif24><Uni>Arial</Uni></DefaultSansSerif24>
- <DefaultMonospace24><Uni>Courier</Uni></DefaultMonospace24>
- <ICULocale24><Uni>my</Uni></ICULocale24>
- <KeyboardType24><Uni>keyman</Uni></KeyboardType24>
- <KeymanKeyboard24><Uni>Burmese Unicode 0.03</Uni></KeymanKeyboard24>
- <Collations24>
- <LgCollation>
- <Name30>
- <AUni ws="en">DefaultCollation</AUni>
- </Name30>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CI_AI</Uni></WinCollation30>
- </LgCollation>
- </Collations24>
- </LgWritingSystem>
-</Languages>
-
-<Styles>
- <StStyle>
- <Name17><Uni>Normal</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni></Uni></BasedOn17>
- <Next17><Uni>Normal</Uni></Next17>
- <Rules17>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Bulleted List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Bulleted List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="101" bulNumStartAt="1"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 1</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 1</Uni></Next17>
- <Rules17>
- <Prop bold="invert" fontsize="14000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 2</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 2</Uni></Next17>
- <Rules17>
- <Prop italic="invert" fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 3</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 3</Uni></Next17>
- <Rules17>
- <Prop fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Numbered List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Numbered List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="10"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>External Link</Uni></Name17>
- <Type17><Integer val="1"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>External Link</Uni></Next17>
- <Rules17>
- <Prop underline="single" forecolor="7f007f" undercolor="7f007f"/>
- </Rules17>
- </StStyle>
-</Styles>
-
-<Body docRightToLeft="false">
- <StTxtPara>
- <StyleRules15>
- <Prop rightToLeft="0" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="my" fontsize="20000" fontsizeUnit="mpt" fontFamily="Graphite Test Burmese">က္ယ္á€á€”္ဟ္‌ပ္‌á€á€¯á€­á€·á ပ္ယော္‌ရ္á€á€¹á€Ÿá€„္‌မ္ဟုአ</Run>
- </Str>
- </Contents16>
- </StTxtPara>
-</Body>
-
-<PageSetup>
- <PageInfo>
- <TopMargin9999><Integer val="72000"/></TopMargin9999>
- <BottomMargin9999><Integer val="72000"/></BottomMargin9999>
- <LeftMargin9999><Integer val="90000"/></LeftMargin9999>
- <RightMargin9999><Integer val="90000"/></RightMargin9999>
- <HeaderMargin9999><Integer val="36000"/></HeaderMargin9999>
- <FooterMargin9999><Integer val="36000"/></FooterMargin9999>
- <PageSize9999><Integer val="0"/></PageSize9999>
- <PageHeight9999><Integer val="792000"/></PageHeight9999>
- <PageWidth9999><Integer val="612000"/></PageWidth9999>
- <PageOrientation9999><Integer val="0"/></PageOrientation9999>
- <Header9999>
- <Str>
- <Run ws="en">brumeseText.wpx</Run>
- </Str>
- </Header9999>
- <Footer9999>
- <Str>
- <Run ws="en">&amp;[page],&amp;[date]</Run>
- </Str>
- </Footer9999>
- </PageInfo>
-</PageSetup>
-
-</WpDoc>
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_arabic.ttf b/Build/source/libs/graphite-engine/test/RegressionTest/grtest_arabic.ttf
deleted file mode 100644
index df25e54b3f3..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_arabic.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_badCmap.ttf b/Build/source/libs/graphite-engine/test/RegressionTest/grtest_badCmap.ttf
deleted file mode 100644
index d66c725f12e..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_badCmap.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_badVersion.ttf b/Build/source/libs/graphite-engine/test/RegressionTest/grtest_badVersion.ttf
deleted file mode 100644
index babe42e5352..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_badVersion.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_burmese.ttf b/Build/source/libs/graphite-engine/test/RegressionTest/grtest_burmese.ttf
deleted file mode 100644
index ab253fbbfd6..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_burmese.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_roman.ttf b/Build/source/libs/graphite-engine/test/RegressionTest/grtest_roman.ttf
deleted file mode 100644
index 2001ff6b5ac..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_roman.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_taiviet.ttf b/Build/source/libs/graphite-engine/test/RegressionTest/grtest_taiviet.ttf
deleted file mode 100644
index 3bf4a662b11..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_taiviet.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_xline.ttf b/Build/source/libs/graphite-engine/test/RegressionTest/grtest_xline.ttf
deleted file mode 100644
index 537a4b9532a..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/grtest_xline.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/main.h b/Build/source/libs/graphite-engine/test/RegressionTest/main.h
deleted file mode 100644
index 1fcdacf6293..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/main.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*--------------------------------------------------------------------*//*:Ignore this sentence.
-Copyright (C) 2004 SIL International. All rights reserved.
-
-Distributable under the terms of either the Common Public License or the
-GNU Lesser General Public License, as specified in the LICENSING.txt file.
-
-File: Main.h
-Responsibility: Sharon Correll
-Last reviewed: Not yet.
-
-Description:
- Header files to include in the Graphite regression test program.
--------------------------------------------------------------------------------*//*:End Ignore*/
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-#ifndef GRCOMPILER_H
-#define GRCOMPILER_H 1
-
-#define NO_EXCEPTIONS 1
-
-// To allow call to IsDebuggerPresent:
-#define _WIN32_WINNT WINVER
-
-//:>********************************************************************************************
-//:> Include files
-//:>********************************************************************************************
-// #include "windows.h"
-#include "stdafx.h"
-////#include "resource.h"
-// #include <hash_map>
-#include <fstream>
-#include <iostream>
-#include <vector>
-////#include <algorithm>
-#include <string>
-#ifdef _WIN32
-#include <crtdbg.h>
-#endif // _WIN32
-#include <assert.h>
-
-////using std::max;
-////using std::min;
-
-#include "GrCommon.h"
-#include "GrPlatform.h"
-
-////////#include "LgCharPropsStub.h"
-
-#include "GrConstants.h"
-///#include "TtfUtil.h"
-///#include "Tt.h"
-
-#include "GrClient.h"
-#include "ITextSource.h"
-#include "SimpleTextSrc.h"
-#include "IGrEngine.h"
-#include "IGrJustifier.h"
-#include "GrJustifier.h"
-#include "SegmentAux.h"
-#include "Font.h"
-// #include "WinFont.h"
-#include "FileFont.h"
-#include "Segment.h"
-#include "SegmentPainter.h"
-// #include "WinSegmentPainter.h"
-
-#include "TestCase.h"
-#include "RtTextSrc.h"
-
-
-//:>********************************************************************************************
-//:> Functions
-//:>********************************************************************************************
-void RunTests(int numberOfTests, TestCase * ptcaseList);
-int RunOneTestCase(TestCase * ptcase, Segment * psegPrev, Segment ** ppsegRet, RtTextSrc ** pptsrcRet);
-void OutputError(TestCase * ptcase, std::string strErr, int i = -1);
-void OutputErrorWithValues(TestCase * ptcase, std::string strErr, int i,
- int valueFound, int valueExpected);
-void OutputErrorAux(TestCase * ptcase, std::string strErr, int i,
- bool showValues, int valueFound, int valueExpected);
-bool WriteToLog(std::string str, int i = -1);
-bool WriteToLog(std::string str, int i,
- bool showValues, int valueFound, int valueExpected);
-bool WriteToLog(int n);
-
-#endif //!WRCOMPILER_H
-
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/makedebug.bat b/Build/source/libs/graphite-engine/test/RegressionTest/makedebug.bat
deleted file mode 100644
index 94d09eb720a..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/makedebug.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-cls
-nmake CFG=DEBUG -f makefile.vc \ No newline at end of file
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/readme.txt b/Build/source/libs/graphite-engine/test/RegressionTest/readme.txt
deleted file mode 100644
index e9f7facad20..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/readme.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-Graphite Regression Test
-
-COMPILING
-Use makedebug.bat to build a debug version. Creating a release version is not supported.
-
-RUNNING
-Extract the fonts from the fonts.zip file and install them.
-
-Options:
-/d - breaks into the debugger (if any) when an error occurs
-/s - silent mode; does not write to the standard output but only to the log file
-
-The program generates a file called grregtest.log with a list of errors.
-
-A file called tracelog.txt will be output for the tests for which tracing is turned on.
-
-ADDING TESTS
-See TestCase.cpp.
-
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/romanText.wpx b/Build/source/libs/graphite-engine/test/RegressionTest/romanText.wpx
deleted file mode 100644
index 594cc886a0f..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/romanText.wpx
+++ /dev/null
@@ -1,206 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE WpDoc SYSTEM "WorldPad.dtd">
-<WpDoc wpxVersion="2.0">
-
-<Languages>
- <LgWritingSystem id="en" language="en" type="ISO-639-1">
- <Name24>
- <AUni ws="en">English</AUni>
- </Name24>
- <Abbr24>
- <AUni ws="en">Eng</AUni>
- </Abbr24>
- <Description24>
- <AStr ws="en">
- <Run ws="en">The standard alphabetic representation of English (United States style).</Run>
- </AStr>
- </Description24>
- <Locale24><Integer val="1033"/></Locale24>
- <RightToLeft24><Boolean val="false"/></RightToLeft24>
- <DefaultSerif24><Uni>Times New Roman</Uni></DefaultSerif24>
- <DefaultSansSerif24><Uni>Arial</Uni></DefaultSansSerif24>
- <DefaultBodyFont24><Uni>Charis SIL</Uni></DefaultBodyFont24>
- <DefaultMonospace24><Uni>Courier New</Uni></DefaultMonospace24>
- <ICULocale24><Uni>en</Uni></ICULocale24>
- <KeyboardType24><Uni>standard</Uni></KeyboardType24>
- <Collations24>
- <LgCollation>
- <Name30>
- <AUni ws="en">Default Collation</AUni>
- </Name30>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CI_AI</Uni></WinCollation30>
- </LgCollation>
- <LgCollation>
- <Name30>
- <AUni ws="en">Case Sensitive</AUni>
- </Name30>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CS_AI</Uni></WinCollation30>
- </LgCollation>
- </Collations24>
- </LgWritingSystem>
-</Languages>
-
-<Styles>
- <StStyle>
- <Name17><Uni>Normal</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni></Uni></BasedOn17>
- <Next17><Uni>Normal</Uni></Next17>
- <Rules17>
- <Prop italic="off" bold="off" superscript="off" underline="none" fontsize="10000" fontsizeUnit="mpt" offset="0" offsetUnit="mpt" forecolor="black" backcolor="white" undercolor="black" align="leading" firstIndent="0" leadingIndent="0" trailingIndent="0" spaceBefore="0" spaceAfter="0" lineHeight="10000" lineHeightUnit="mpt" lineHeightType="atLeast" rightToLeft="0" borderTop="0" borderBottom="0" borderLeading="0" borderTrailing="0" borderColor="black" bulNumScheme="0" bulNumStartAt="1" fontFamily="&lt;default serif&gt;">
- <BulNumFontInfo backcolor="white" bold="off" fontsize="10000mpt" forecolor="black" italic="off" offset="0mpt" superscript="off" undercolor="black" underline="none" fontFamily="Times New Roman"/>
- </Prop>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Bulleted List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Bulleted List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="101" bulNumStartAt="1"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 1</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 1</Uni></Next17>
- <Rules17>
- <Prop bold="invert" fontsize="14000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 2</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 2</Uni></Next17>
- <Rules17>
- <Prop italic="invert" fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 3</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 3</Uni></Next17>
- <Rules17>
- <Prop fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Numbered List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Numbered List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="10"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>External Link</Uni></Name17>
- <Type17><Integer val="1"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>External Link</Uni></Next17>
- <Rules17>
- <Prop underline="single" forecolor="7f007f" undercolor="7f007f"/>
- </Rules17>
- </StStyle>
-</Styles>
-
-<Body docRightToLeft="false">
- <StTxtPara>
- <StyleRules15>
- <Prop rightToLeft="0" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman">ẽ̀p͡sg˨˥˧ŊấĩĨm̼̀̈̄ffi</Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop rightToLeft="0" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="20000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman">with features:</Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop rightToLeft="0" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman" fontVariations="1026=1,1029=1,1032=1,1024=2,1051=0">ẽ̀p͡sg˨˥˧ŊấĩĨm̼̀̈̄ffi</Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop rightToLeft="0" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman"></Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop rightToLeft="0" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="20000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman">stacking and bridging:</Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop rightToLeft="0" namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman">aÍa tÍa à̀Ía </Run>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" forecolor="ff6000" fontFamily="Graphite Test Roman">ʃ̀̀Ía</Run>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman"> aÌ–Ì–ï…¶a </Run>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" forecolor="blue" fontFamily="Graphite Test Roman">ʃ̀̀a</Run>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" fontFamily="Graphite Test Roman"> </Run>
- <Run ws="en" fontsize="36000" fontsizeUnit="mpt" forecolor="yellow" fontFamily="Graphite Test Roman">aÌ–Ì–ï…¶a</Run>
- </Str>
- </Contents16>
- </StTxtPara>
-</Body>
-
-<PageSetup>
- <PageInfo>
- <TopMargin9999><Integer val="72000"/></TopMargin9999>
- <BottomMargin9999><Integer val="72000"/></BottomMargin9999>
- <LeftMargin9999><Integer val="90000"/></LeftMargin9999>
- <RightMargin9999><Integer val="90000"/></RightMargin9999>
- <HeaderMargin9999><Integer val="36000"/></HeaderMargin9999>
- <FooterMargin9999><Integer val="36000"/></FooterMargin9999>
- <PageSize9999><Integer val="0"/></PageSize9999>
- <PageHeight9999><Integer val="792000"/></PageHeight9999>
- <PageWidth9999><Integer val="612000"/></PageWidth9999>
- <PageOrientation9999><Integer val="0"/></PageOrientation9999>
- <Header9999>
- <Str>
- <Run ws="en">romanText.wpx</Run>
- </Str>
- </Header9999>
- <Footer9999>
- <Str>
- <Run ws="en">&amp;[page],&amp;[date]</Run>
- </Str>
- </Footer9999>
- </PageInfo>
-</PageSetup>
-
-</WpDoc>
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/stdafx.cpp b/Build/source/libs/graphite-engine/test/RegressionTest/stdafx.cpp
deleted file mode 100644
index 7f699d258e2..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/stdafx.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes
-// RegressionTest.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/stdafx.h b/Build/source/libs/graphite-engine/test/RegressionTest/stdafx.h
deleted file mode 100644
index c5e242de5cb..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/stdafx.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-
-#include <iostream>
-// #include <tchar.h>
-
-// TODO: reference additional headers your program requires here
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/taivietText.wpx b/Build/source/libs/graphite-engine/test/RegressionTest/taivietText.wpx
deleted file mode 100644
index 964c4968611..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/taivietText.wpx
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE WpDoc SYSTEM "WorldPad.dtd">
-<WpDoc wpxVersion="2.0">
-
-<Languages>
- <LgWritingSystem id="blt_TV" language="blt" type="ISO-639-2">
- <Name24>
- <AUni ws="en">Tai Dam</AUni>
- </Name24>
- <Locale24><Integer val="1033"/></Locale24>
- <RightToLeft24><Boolean val="false"/></RightToLeft24>
- <FontVariation24><Uni>2001=0,2005=0,2101=1,1051=1,2102=1</Uni></FontVariation24>
- <DefaultSerif24><Uni>Tai Heritage Graphite</Uni></DefaultSerif24>
- <DefaultSansSerif24><Uni>Arial</Uni></DefaultSansSerif24>
- <DefaultBodyFont24><Uni>Charis SIL</Uni></DefaultBodyFont24>
- <DefaultMonospace24><Uni>Courier</Uni></DefaultMonospace24>
- <ICULocale24><Uni>blt_TV</Uni></ICULocale24>
- <KeyboardType24><Uni>standard</Uni></KeyboardType24>
- <Collations24>
- <LgCollation>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CI_AI</Uni></WinCollation30>
- </LgCollation>
- </Collations24>
- </LgWritingSystem>
-</Languages>
-
-<Styles>
- <StStyle>
- <Name17><Uni>Normal</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni></Uni></BasedOn17>
- <Next17><Uni>Normal</Uni></Next17>
- <Rules17>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Bulleted List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Bulleted List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="101" bulNumStartAt="1"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 1</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 1</Uni></Next17>
- <Rules17>
- <Prop bold="invert" fontsize="14000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 2</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 2</Uni></Next17>
- <Rules17>
- <Prop italic="invert" fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 3</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 3</Uni></Next17>
- <Rules17>
- <Prop fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Numbered List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Numbered List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="10"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>External Link</Uni></Name17>
- <Type17><Integer val="1"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>External Link</Uni></Next17>
- <Rules17>
- <Prop underline="single" forecolor="7f007f" undercolor="7f007f"/>
- </Rules17>
- </StStyle>
-</Styles>
-
-<Body docRightToLeft="false">
- <StTxtPara>
- <StyleRules15>
- <Prop namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run></Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="blt_TV" fontsize="36000" fontsizeUnit="mpt" forecolor="transparent" fontFamily="Graphite Test TaiViet" fontVariations="2001=2,1051=0,2102=0">î€î‚î€î‚î‚î‚î€î€‰î€œî€¹î€î€‰î€œî€µî‚î‚î‚î€î€»î€™î€Šî€³î‚</Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="blt_TV" fontsize="36000" fontsizeUnit="mpt" forecolor="transparent" fontFamily="Graphite Test TaiViet" fontVariations="2001=2,2102=0"></Run>
- </Str>
- </Contents16>
- </StTxtPara>
- <StTxtPara>
- <StyleRules15>
- <Prop namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="blt_TV" fontsize="36000" fontsizeUnit="mpt" forecolor="transparent" fontFamily="Graphite Test TaiViet" fontVariations="2001=2,2102=1">î€î‚î€î‚î‚î‚î€î€‰î€œî€¹î€î€‰î€œî€µî‚î‚î‚î€î€»î€™</Run>
- <Run ws="blt_TV" fontsize="36000" fontsizeUnit="mpt" forecolor="transparent" fontFamily="Graphite Test TaiViet" fontVariations="2001=2">î‚</Run>
- </Str>
- </Contents16>
- </StTxtPara>
-</Body>
-
-<PageSetup>
- <PageInfo>
- <TopMargin9999><Integer val="72000"/></TopMargin9999>
- <BottomMargin9999><Integer val="72000"/></BottomMargin9999>
- <LeftMargin9999><Integer val="90000"/></LeftMargin9999>
- <RightMargin9999><Integer val="90000"/></RightMargin9999>
- <HeaderMargin9999><Integer val="36000"/></HeaderMargin9999>
- <FooterMargin9999><Integer val="36000"/></FooterMargin9999>
- <PageSize9999><Integer val="0"/></PageSize9999>
- <PageHeight9999><Integer val="792000"/></PageHeight9999>
- <PageWidth9999><Integer val="612000"/></PageWidth9999>
- <PageOrientation9999><Integer val="0"/></PageOrientation9999>
- <Header9999>
- <Str>
- <Run ws="en">collision_examples.wpx</Run>
- </Str>
- </Header9999>
- <Footer9999>
- <Str>
- <Run ws="en">&amp;[page],&amp;[date]</Run>
- </Str>
- </Footer9999>
- </PageInfo>
-</PageSetup>
-
-</WpDoc>
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/xline.gdl b/Build/source/libs/graphite-engine/test/RegressionTest/xline.gdl
deleted file mode 100644
index 70bfa15902a..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/xline.gdl
+++ /dev/null
@@ -1,146 +0,0 @@
-
-/*********************************************************************************
- File: xline.gdl
-
- For testing cross-line contextualization.
-
- Compile with stddr.ttf
-
- To test, type something like these examples:
- abc$x
- abcx@
- abc$x@
- and force a line break after the x.
-*********************************************************************************/
-
-#include "stddef.gdh"
-
-Bidi = false;
-
-#define duplicated user1
-
-
-table(glyph) {MUnits = 1000 }
-
- g_A = codepoint("A");
- g_B = codepoint("B");
- g_C = codepoint("C");
- g_D = codepoint("D");
- g_E = codepoint("E");
- g_F = codepoint("F");
- g_G = codepoint("G");
-
- g_a = codepoint("a");
- g_b = codepoint("b");
- g_c = codepoint("c");
- g_d = codepoint("d");
- g_e = codepoint("e");
- g_f = codepoint("f");
- g_g = codepoint("g");
-
- g_x = codepoint("x");
- g_y = codepoint("y");
- g_z = codepoint("z");
-
- g_asterisk = codepoint("*") { ptCenter = point(bb.width/2, bb.height/2) };
- g_dollar = codepoint("$") { xWid = aw };
- g_hash = codepoint("#");
- g_at = codepoint("@") { xWid = aw };
- g_amp = codepoint("&") {xWid = aw };
- g_percent = codepoint("%");
-
- g_leftArrow = codepoint("<") { xWid = aw };
- g_rightArrow = codepoint(">") { xWid = aw };
-
- clsUpper = codepoint("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- { ptCenter = point(bb.width/2, ascent/2) };
- clsLower = codepoint("abcdefghijklmnopqrstuvwxyz");
-
- clsMyAny = glyphid(2..216) { justify.stretch = 700m };
-
- g_m = codepoint("m");
- g_Mlig = codepoint("M") {
- component.one = box(0,0, bb.width/2, ascent);
- component.two = box(bb.width/2,0, bb.width,ascent) };
-
- gSpace = U+0020 { justify.stretch = 3000m };
-
- clsXYZ = (g_x g_y g_z);
-
-endtable; // glyph
-
-
-table(lb)
-
- // Allow non-optimal linebreaks after x, y, or z.
- clsXYZ {break = BREAK_INTRA};
-
-endtable; // lb
-
-
-table(sub)
-
-pass(1)
-
- // Switch the $ and @ if they are both there, and insert & after the one on the first
- // line and before the one on the second line. Note that these rules supercede the rule
- // to insert the left- and right-arrows.
- g_dollar _ _ g_at > @7 g_amp:7 g_amp:1 @1
- / _ _ ANY? # {break == BREAK_INTRA} ANY? _ _ ;
-
- g_dollar
- clsXYZ {measure.endofline = g_at.aw - g_dollar.aw + g_amp.aw}
- ANY {measure.startofline = g_dollar.aw - g_at.aw + g_amp.aw}
- g_at;
- g_dollar
- clsXYZ {measure.endofline = g_at.aw - g_dollar.aw + g_amp.aw}
- g_at {measure.startofline = g_dollar.aw - g_at.aw + g_amp.aw};
-
-
- // Just copy the $ to the following segment.
- g_dollar _ > @1 {duplicated = true} g_dollar:1
- / _ {duplicated == false} ANY? ^ # {break == BREAK_INTRA} ANY? _ ;
-
- g_dollar
- clsXYZ {measure.endofline = g_rightArrow.aw}
- ANY {measure.startofline = g_dollar.aw + g_leftArrow.aw};
-
-
- // Just copy the @ to the previous segment.
- _ g_at > g_at:5 @5 {duplicated = true}
- / _ ANY? ^ # {break == BREAK_INTRA} ANY? _ {duplicated == false};
-
- clsXYZ {measure.endofline = g_at.aw + g_rightArrow.aw}
- ANY {measure.startofline = g_leftArrow.aw}
- g_at;
-
- clsXYZ {measure.endofline = g_at.aw + g_rightArrow.aw}
- g_at {measure.startofline = g_leftArrow.aw};
-
-
- // Insert a '<' at the beginning of the line and a '>' at the end.
- _ > g_leftArrow / # _;
- _ > g_rightArrow / clsMyAny _ # ^ ;
-
- clsMyAny {measure {startofline = g_leftArrow.aw; endofline = g_rightArrow.aw}};
-
-endpass;
-
-pass(2)
-
- // Don't stretch trailing white space.
- gSpace {justify.stretch = 0} / _ [gSpace [gSpace [gSpace gSpace?]? ]? ]? # ;
- // In fact, don't stretch any line-boundary glyph.
- clsMyAny {justify.stretch = 0} / _ #;
-
-
-endpass;
-
-endtable; // sub
-
-
-table(pos)
-
- clsMyAny {adv.x += justify.width};
-
-endtable; // pos
diff --git a/Build/source/libs/graphite-engine/test/RegressionTest/xlineText.wpx b/Build/source/libs/graphite-engine/test/RegressionTest/xlineText.wpx
deleted file mode 100644
index a8d51fefda7..00000000000
--- a/Build/source/libs/graphite-engine/test/RegressionTest/xlineText.wpx
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE WpDoc SYSTEM "WorldPad.dtd">
-<WpDoc wpxVersion="2.0">
-
-<Languages>
- <LgWritingSystem id="en" language="en" type="ISO-639-1">
- <Name24>
- <AUni ws="en">English</AUni>
- </Name24>
- <Locale24><Integer val="1033"/></Locale24>
- <RightToLeft24><Boolean val="false"/></RightToLeft24>
- <DefaultSerif24><Uni>Times New Roman</Uni></DefaultSerif24>
- <DefaultSansSerif24><Uni>Arial</Uni></DefaultSansSerif24>
- <DefaultMonospace24><Uni>Courier New</Uni></DefaultMonospace24>
- <ICULocale24><Uni>en</Uni></ICULocale24>
- <KeyboardType24><Uni>standard</Uni></KeyboardType24>
- <Collations24>
- <LgCollation>
- <Name30>
- <AUni ws="en">DefaultCollation</AUni>
- </Name30>
- <WinLCID30><Integer val="1033"/></WinLCID30>
- <WinCollation30><Uni>Latin1_General_CI_AI</Uni></WinCollation30>
- </LgCollation>
- </Collations24>
- </LgWritingSystem>
-</Languages>
-
-<Styles>
- <StStyle>
- <Name17><Uni>Normal</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni></Uni></BasedOn17>
- <Next17><Uni>Normal</Uni></Next17>
- <Rules17>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Bulleted List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Bulleted List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="101" bulNumStartAt="1"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 1</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 1</Uni></Next17>
- <Rules17>
- <Prop bold="invert" fontsize="14000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 2</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 2</Uni></Next17>
- <Rules17>
- <Prop italic="invert" fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Heading 3</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Heading 3</Uni></Next17>
- <Rules17>
- <Prop fontsize="12000" fontsizeUnit="mpt" spaceBefore="12000" spaceAfter="3000"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>Numbered List</Uni></Name17>
- <Type17><Integer val="0"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>Numbered List</Uni></Next17>
- <Rules17>
- <Prop firstIndent="-18000" bulNumScheme="10"/>
- </Rules17>
- </StStyle>
- <StStyle>
- <Name17><Uni>External Link</Uni></Name17>
- <Type17><Integer val="1"/></Type17>
- <BasedOn17><Uni>Normal</Uni></BasedOn17>
- <Next17><Uni>External Link</Uni></Next17>
- <Rules17>
- <Prop underline="single" forecolor="7f007f" undercolor="7f007f"/>
- </Rules17>
- </StStyle>
-</Styles>
-
-<Body docRightToLeft="false">
- <StTxtPara>
- <StyleRules15>
- <Prop namedStyle="Normal"/>
- </StyleRules15>
- <Contents16>
- <Str>
- <Run ws="en" fontsize="28000" fontsizeUnit="mpt" fontFamily="Graphite Test CrossLine">abcddddefx@ghijkmmmmn$yopppppqrsss$z@tttwwww</Run>
- </Str>
- </Contents16>
- </StTxtPara>
-</Body>
-
-<PageSetup>
- <PageInfo>
- <TopMargin9999><Integer val="72000"/></TopMargin9999>
- <BottomMargin9999><Integer val="72000"/></BottomMargin9999>
- <LeftMargin9999><Integer val="90000"/></LeftMargin9999>
- <RightMargin9999><Integer val="90000"/></RightMargin9999>
- <HeaderMargin9999><Integer val="36000"/></HeaderMargin9999>
- <FooterMargin9999><Integer val="36000"/></FooterMargin9999>
- <PageSize9999><Integer val="0"/></PageSize9999>
- <PageHeight9999><Integer val="792000"/></PageHeight9999>
- <PageWidth9999><Integer val="612000"/></PageWidth9999>
- <PageOrientation9999><Integer val="0"/></PageOrientation9999>
- <Header9999>
- <Str>
- <Run ws="en">xline_test.wpx</Run>
- </Str>
- </Header9999>
- <Footer9999>
- <Str>
- <Run ws="en">&amp;[page],&amp;[date]</Run>
- </Str>
- </Footer9999>
- </PageInfo>
-</PageSetup>
-
-</WpDoc>
diff --git a/Build/source/libs/graphite-engine/test/examples/burmese/Padauk.ttf b/Build/source/libs/graphite-engine/test/examples/burmese/Padauk.ttf
deleted file mode 100644
index 16a2ed864d9..00000000000
--- a/Build/source/libs/graphite-engine/test/examples/burmese/Padauk.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/examples/burmese/bh1.utx b/Build/source/libs/graphite-engine/test/examples/burmese/bh1.utx
deleted file mode 100644
index 9dcaa5c3459..00000000000
--- a/Build/source/libs/graphite-engine/test/examples/burmese/bh1.utx
+++ /dev/null
@@ -1,4 +0,0 @@
-ကျွနှ်ပ်á€á€­á€¯á€·á ပျော်ရွှင်မှုአသာယာ ဠပြောမှုနှင့် အောင်မြင်မှုá€á€­á€¯á€·á€žá€Šá€º ကျွနု်ပ်á€á€­á€¯á€·á ကျန်းမာá€á€¼á€„်းအပေါ်á€á€½á€„် အများကြီး မှီá€á€­á€¯á€”ေပါသည်ዠပညာá€á€á€ºá€›á€”်አကြွယ်á€á€á€»á€™á€ºá€¸á€žá€¬á€›á€”်နှင့် ကြိုးပမ်း လုပ်ဆောင်မှုအားလုံး အောင်မြင်စေရန်အá€á€½á€€á€º ကျန်းမာရေးသည် အထူးပင် အရေးကြီးပါသည်ዠကျန်းမာရေးမပြည့်စုံလျှင် ကျွနု်ပ်á€á€­á€¯á€·á ပညာရေးአစီးပွားရေး မြှင့်á€á€„်မှုလုပ်ငန်းများ လုပ်နိုင်လိမ့်မည် မဟုá€á€ºá€•á€«á‹ သို့ဖြစ်á အစဥ်သဖြင့် ကျန်းမာနေရန် ကျွနု်ပ်á€á€­á€¯á€· ကြိုးစားကြရပါမည်á‹
-ကျွန်းမာရေးနှင့် ပြည့်စုံရန်အá€á€½á€€á€º ဆောင်ရွက်ရန် နည်းလမ်းများကို သိရှိလိုက်နာရပါမည်ዠအစားအသောက်አအအိပ်အနေአလေ့ကျင့်á€á€”်းနှင့် သန့်ရှင်းမှုá€á€­á€¯á€·á€žá€Šá€º ကျန်းမာရေးအá€á€½á€€á€º လိုအပ်á€á€»á€€á€ºá€™á€»á€¬á€¸ ဖြစ်ပါသည်ዠအစားအစာသည် အသက်ရှင်မှုအá€á€½á€€á€º အထူးလိုအပ်á€á€»á€€á€º ဖြစ်ပါသည်ዠကျွနု်ပ်á€á€­á€¯á€·á€žá€Šá€º အသက် ရှင်နေနိုင်ရန် အစာစားရá€á€¼á€„်းဖြစ်ပြီး စားသောက်ရန် အသက်ရှင်နေá€á€¼á€„်း မဟုá€á€ºá€ºá€•á€«á‹ ကျန်းမာမှုအá€á€½á€€á€º သင့်á€á€±á€¬á€ºá€žá€Šá€ºá€· ပရိုá€á€­á€”်းአသá€á€¹á€á€¯á€“ာá€á€ºá€™á€»á€¬á€¸á€”ှင့် ဗီá€á€¬á€™á€„်များ များစွာပါá€á€„်သည့် အစာများကို ရယူစားသုံးရန် လိုအပ်ပါသည်ዠကျွနု်ပ်á€á€­á€¯á€·á€”ှင့် လျှော်ကန်သင့် မြá€á€ºá€™á€Šá€ºá€· အိပ်စက်အနားယူမှုမှာလည်း အရေးကြီးပါသည်ዠကျွနု်ပ်á€á€­á€¯á€·á á€á€”္ဓာကိုယ်မှ ကြွက်သားများနှင့် အသားမျှင်များအား ထိန်းသိမ်းပြုပြင်မှုအá€á€½á€€á€º အိပ်စက်á€á€¼á€„်းနှင့် နားနေá€á€¼á€„်းá€á€­á€¯á€· အညီအမျှ လိုအပ်ပါသည်ዠထို့ကြောင့် လုံလောက်စွာ အိပ်စက်နားနေရပါမည်á‹
-ကိုယ်ကာယလေ့ကျင့်á€á€”်းများနှင့် သန့်ရှင်းမှုá€á€­á€¯á€·á€œá€Šá€ºá€¸ အရေးကြီး လိုအပ်ပါသည်ዠလမ်းလျှောက်á€á€¼á€„်းနှင့် အိမ်á€á€½á€„်း လေ့ကျင့်á€á€”်းများသည် အစားအသောက်စားလိုစိá€á€ºá€”ှင့် စိá€á€ºá€›á€½á€¾á€„်လန်းမှုá€á€­á€¯á€·á€€á€­á€¯ á€á€­á€¯á€¸á€•á€½á€¬á€¸á€…ေပါသည်ዠá€á€…်ကိုယ်ရေသန့်ရှင်းရေးက ကျန်းမာမှုကို အထောက်အကူပြုပါသည်ዠနေ့စဥ် ရေá€á€»á€­á€¯á€¸á€á€¼á€„်းአအစာမစားမီနှင့် စားပြီးá€á€­á€¯á€„်း လက်များကို စနစ်á€á€€á€»á€†á€±á€¸á€€á€¼á€±á€¬ ရပါမည်á‹
-အထက်ပါ ကျန်းမာရေး နည်းလမ်းများကို လိုက်နာဆောင်ရွက်ပါက ကျွနု်ပ်á€á€­á€¯á€· á€á€…်သက်á€á€¬á€¡á€á€½á€€á€º ကျန်းမာရေးနှင့်ပြည့်စုံနေမည်မှာ သေá€á€»á€¬á€•á€«á€žá€Šá€ºá‹ ကျွနု်ပ်á€á€­á€¯á€· ကျန်းမာနေလျှင် စီးပွားဥစ္စာပြည့်စုံá€á€¼á€„်းአပညာရေးပြည့်စုံá€á€¼á€„်းနှင့် အá€á€¼á€¬á€¸á€¡á€±á€¬á€„်မြင်မှုများကို စွမ်းဆောင်နိုင်ပါမည်ዠသို့ပါá ကျန်းမာá€á€¼á€„်းသည် á€á€»á€™á€ºá€¸á€žá€¬á€á€¼á€„်းဖြစ်ကြောင်းနှင့် ကျန်းမာá€á€¼á€„်းသည် á€á€»á€™á€ºá€¸á€žá€¬á€á€¼á€„်းထက် ပိုမိုကောင်းမွန်သည်ဟု ဆိုရမည် ဖြစ်ပါသည်á‹
diff --git a/Build/source/libs/graphite-engine/test/examples/khmer/cloudsku2.txt b/Build/source/libs/graphite-engine/test/examples/khmer/cloudsku2.txt
deleted file mode 100755
index 6026347f841..00000000000
--- a/Build/source/libs/graphite-engine/test/examples/khmer/cloudsku2.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-ពពក
-១-ពពកនៅលើមáŸážƒáž‚ឺ​ជា​ážáŸ†ážŽáž€áŸ‹áž‘ឹក​ážáž¼áž…ៗ​ជា​ច្រើន​ ។
-២-ពពកមើលទៅឃើញស្អាហ​ហើយ​មាន​ប្រយោជនáŸâ€‹áž…ំញáŸáŸ‡áž˜áž“ុស្សដែរ​​ ។​
-៣-ពពកគឺជាប្រភពនៃទឹកភ្លៀង ដែលរុក្ážáž‡áž¶ážáž·â€‹ នឹង​សážáŸ’វទាំងឡាយážáŸ’រូវការ​ ។​
-៤-ទឹកភ្លៀង​បង្អុរពីលើ "ពពក" ទៅក្នុង​ទន្លáŸâ€‹ážŠáŸ‚ល​ជា​ទី​កន្លែង​សំរាប់យើងរកážáŸ’រី​ ​។​
-៥-ទឹក​អ​ណ្ដូង​របស់​យើង​កáŸáž˜áž€â€‹áž–ី​ទឹក​ភ្លៀង​ដែរ​ ។​
-៦-យើងប្រើទឹកសំរាប់ហូប​ សំរាប់ដាំស្ល​ និងសំ​រាប់​ងូážâ€‹áž‘ឹក​សំរាប់បោកគក់​ ។​
-៧-នៅពáŸáž›ážáŸ’ងៃ​ ពពកផ្ដល់ម្លប់អោយ​យើង​ពី​កំ​ដៅ​ព្រះអាទិážáŸ’យ​​ ។
-៨-ប្រសិនបើមានពពកនៅពáŸáž›áž™áž”់​ នោះ​នឹង​​ អាច​​ការពារកំដៅពីចំហាយផែនដី ។​ áž áŸážáž»â€‹ážŠáž¼áž…្នáŸáŸ‡â€‹áž áž¾áž™â€‹áž‘ើប​ធ្វើអោយយើងមានអារម្មណáŸáž€áž€áŸ‹áž€áŸ’ដៅ​នៅ​ពáŸáž›â€‹áž™áž”់​ដែលមានពពកច្រើន​​ ។
-៩-áž–áŸáž›ážáŸ’លះពពកធ្វើអោយមានភ្លៀងធ្លាក់យ៉ាង​ážáŸ’លាំង​ និងធ្វើអោយមានទឹកជំនន់​ទឹក​ទន្លáŸâ€‹áž‡áž“់​ឡើងយ៉ាងážáŸ’លាំង​ហើយផ្ទះសំបែង​ជា​ច្រើន​បាន​ážáŸ’រូវ​លិចលង់ ​។​
-១០-ទឹកជំនន់បំផ្លិចបំផ្លាញផលដំណាំជាច្រើន​​ ។
-១១-សážáŸ’វជាច្រើនបានលង់ទឹកស្លាប់​​​ ។
-១២-មានផ្ទាំងដីធ្លាក់បាក់ចុះមកជាច្រើន​ ។​
-១៣-ប៉ុន្ដែនៅទីណាដែលគ្មានពពកច្រើន​ ទីកន្លែង​នោះ​ážáŸ’វះ​ážáž¶ážáž‘ឹក ​ ​និង​ក្លាយទៅជាវាល​រហោ​ស្ážáž¶áž“​ ។ អážáŸ‹â€‹áž˜áž¶áž“​ដើម​ឈើ​រុក្ážáž‡áž¶ážáž·â€‹ážšážŸáŸ‹ ស្វážâ€‹áž“ិង​មនុស្ស​កáŸâ€‹áž˜áž·áž“​អាច​រស់​នៅ​ទី​នោះ​បាន​ដែរ​ ។​​ ​
-
-CLOUDS
-1 The clouds in the sky are made up of little drops of water.
-2 Clouds are pretty to look at as well as useful to man.
-3 Clouds are the source of rain, which is needed by both plants and animals.
-4 Rain from the clouds fills the rivers where we get fish.
-5 Our wells are also filled by the rain that falls from the clouds.
-6 We use water for drinking, for cooking and for washing.
-7 During the day, the clouds provide shade from the heat of the sun.
-8 If there are clouds at night, they prevent the heat from the surface of the earth from rising. So that is why we feel warm on a cloudy night.
-9 Sometimes clouds bring heavy rains and floods. Rivers overflow and houses get flooded.
-10 The floods destroy crops.
-11 Animals are drowned.
-12 There are landslides.
-13 But in places where there are not many clouds, there is less water and the place becomes a desert in which no plants grow and no animals and people live.
diff --git a/Build/source/libs/graphite-engine/test/examples/khmer/mond40gr6.ttf b/Build/source/libs/graphite-engine/test/examples/khmer/mond40gr6.ttf
deleted file mode 100755
index a4a784c9026..00000000000
--- a/Build/source/libs/graphite-engine/test/examples/khmer/mond40gr6.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errBadGloc.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errBadGloc.ttf
deleted file mode 100644
index 6cce2701493..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errBadGloc.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errBadGloc2.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errBadGloc2.ttf
deleted file mode 100644
index 89c54507f58..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errBadGloc2.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errBadPass.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errBadPass.ttf
deleted file mode 100644
index 82ae6b66c7a..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errBadPass.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errBadStackMachine.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errBadStackMachine.ttf
deleted file mode 100644
index 27350bef70c..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errBadStackMachine.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errBadSubs.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errBadSubs.ttf
deleted file mode 100644
index 8027c72b79a..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errBadSubs.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errBadVersion.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errBadVersion.ttf
deleted file mode 100644
index babe42e5352..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errBadVersion.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errGarbageFsm.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errGarbageFsm.ttf
deleted file mode 100644
index 7909e115949..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errGarbageFsm.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errGarbageGlat.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errGarbageGlat.ttf
deleted file mode 100644
index 012e6b5d5b2..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errGarbageGlat.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errGarbageSilf.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errGarbageSilf.ttf
deleted file mode 100644
index b540a0d4dd5..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errGarbageSilf.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errSilfVerMismatch.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errSilfVerMismatch.ttf
deleted file mode 100644
index 9088e11ea9a..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errSilfVerMismatch.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errSubsUnderflow.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errSubsUnderflow.ttf
deleted file mode 100644
index a7b04a1e146..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errSubsUnderflow.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/errTooManyClasses.ttf b/Build/source/libs/graphite-engine/test/fonterrors/errTooManyClasses.ttf
deleted file mode 100644
index 9c73c9a38a1..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/errTooManyClasses.ttf
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/fonterrors.gdl b/Build/source/libs/graphite-engine/test/fonterrors/fonterrors.gdl
deleted file mode 100644
index 862284a2440..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/fonterrors.gdl
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*********************************************************************************
- File: fonterrors.gdl
-
- For seeing some basic Graphite behavior. This version is used to generate
- fonts that can be deliberately corrupted to test error handling in the
- engine.
-
- Compile with Std SILDoulos (stddr.ttf).
-*********************************************************************************/
-
-#include "stddef.gdh"
-
-Bidi = false;
-
-
-table(glyph)
-
- clsUpperVowel = codepoint("AEIOU");
- clsLowerVowel = codepoint("aeiou");
-
- clsUpperCons = codepoint("BCDFGHJKLMNPQRSTVWXYZ");
- clsLowerCons = codepoint("bcdfghjklmnpqrstvwxyz");
-
- clsDigit = codepoint("0123456789") {tSuper = 400m};
-
-endtable; // glyph
-
-
-table(sub)
-
- clsUpperVowel > clsLowerVowel;
- clsLowerCons > clsUpperCons;
-
-endtable;
-
-
-table(pos)
-
- clsDigit {shift.y += tSuper};
-
-endtable;
-
diff --git a/Build/source/libs/graphite-engine/test/fonterrors/readme.txt b/Build/source/libs/graphite-engine/test/fonterrors/readme.txt
deleted file mode 100644
index 943b2853cf6..00000000000
--- a/Build/source/libs/graphite-engine/test/fonterrors/readme.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-FONTS FOR TESTING ERROR HANDLING
-
-This directory constains a set of fonts that have been deliberately corrupted in order to test Graphite's error recovery capabilities.
-
-The "correct" behavior of the font is that vowels are rendered as lowercase, consonants as uppercase, and digits are raised vertically. For some of the fonts, recovery will be adequate to show some smart behaviors; for others the engine will revert to pure dumb rendering.
-
-
-* GrErr BadGloc - errBadGloc.ttf
- The stated number of attributes exceeds actual number. This actually should not cause any real error, since the attributes are never read.
-
-* GrErr BadGloc2 - errBadGloc2.ttf
- The stated number of attributes is less than actual number. This causes attributes greater than the number specified to have the value zero.
-
-* GrErr BadPass - errBadPass.ttf
- One of the offsets to the pass information points off to somewhere nonsensical.
-
-* GrErr BadStackMachine - errStackMachine.ttf
- Extra bytes have been inserted into the stack machine commands for both of the substitution rules. The engine manages to recover and handle the rule correctly in this case. (Reproduce using lowercase consonants or uppercase vowels.)
-
-* GrErr BadSubs - errSubs.ttf
- A PutSubs command references a non-existent replacement class. This causes the glyph to appear as a square box. (Reproduce using lowercase consonants or uppercase vowels.)
-
-* GrErr BadVersion - errBadVersion.ttf
- Bad version numbers are recorded in the Silf, Gloc, Glat, and Feat tables. Reading the Silf table will trigger an error being thrown, and the font will fall back to dumb rendering.
-
-* GrErr GarbageFsm - errGarbageFsm.ttf
- The state table portions of the FSMs have been overwritten with garbage. Font will fall back to dumb rendering when any rules are fired.
-
-* GrErr GarbageGlat - errGarbageGlat.ttf
- A section of Glat is overwritten with garbage. The "normal" behavior of the font is to raise the digits by 400m. But the lower digits (1 and 2) have been corrupted so they should simply not show that behavior.
-
-* GrErr GarbageSilf - errGarbageSilf.ttf
- A section of Silf table is overwritten with garbage. Font will fall back to dumb rendering.
-
-* GrErr SilfVersionMismatch - errSilfVerMismatch.ttf
- The Silf table claims to be version 1.0, but is actually version 2.0. Font will fall back to dumb rendering.
-
-* GrErr SubsUnderflow - errSubsUnderflow.ttf
- A bogus command is inserted into the stack machine commands for both the substitution rules, causing an underflow when running the rules. The engine manages to recover and handle the rule correctly in this case. (Reproduce using lowercase consonants or uppercase vowels.)
-
-* GrErr TooManyClasses - errTooManyClasses.ttf
- Very large number of classes in the list of replacement classes, larger than are actually there.
-
diff --git a/Build/source/libs/graphite-engine/uninstalled-top.pc.in b/Build/source/libs/graphite-engine/uninstalled-top.pc.in
deleted file mode 100644
index e6dff4bb12e..00000000000
--- a/Build/source/libs/graphite-engine/uninstalled-top.pc.in
+++ /dev/null
@@ -1,6 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-priv_includedir=@abs_srcdir@/src
-includedir=@abs_srcdir@/include
-libdir=@abs_builddir@/src/.libs
-version=@VERSION@
diff --git a/Build/source/libs/graphite-engine/withenable.ac b/Build/source/libs/graphite-engine/withenable.ac
deleted file mode 100644
index 83db7006d82..00000000000
--- a/Build/source/libs/graphite-engine/withenable.ac
+++ /dev/null
@@ -1,4 +0,0 @@
-# we don't currently support use of an installed graphite lib
-
-AC_ARG_WITH([graphite],
- [ --without-graphite build xetex without graphite support])
diff --git a/Build/source/libs/libpng/ANNOUNCE b/Build/source/libs/libpng/ANNOUNCE
deleted file mode 100644
index 5580fb8b4c9..00000000000
--- a/Build/source/libs/libpng/ANNOUNCE
+++ /dev/null
@@ -1,61 +0,0 @@
-
-Libpng 1.2.29 - May 8, 2008
-
-This is a public release of libpng, intended for use in production codes.
-
-Files available for download:
-
-Source files with LF line endings (for Unix/Linux) and with a
-"configure" script
-
- libpng-1.2.29.tar.gz
- libpng-1.2.29.tar.lzma
- (Get the lzma codec from <http://tukaani.org/lzma>).
- libpng-1.2.29.tar.bz2
-
-Source files with LF line endings (for Unix/Linux) without the
-"configure" script
-
- libpng-1.2.29-no-config.tar.gz
- libpng-1.2.29-no-config.tar.lzma
- libpng-1.2.29-no-config.tar.bz2
-
-Source files with CRLF line endings (for Windows), without the
-"configure" script
-
- lpng1229.zip
- lpng1229.7z
- lpng1229.tar.bz2
-
-Project files
-
- libpng-1.2.29-project-netware.zip
- libpng-1.2.29-project-wince.zip
-
-Other information:
-
- libpng-1.2.29-README.txt
- libpng-1.2.29-KNOWNBUGS.txt
- libpng-1.2.29-LICENSE.txt
- libpng-1.2.29-Y2K-compliance.txt
- libpng-1.2.29-[previous version]-diff.txt
-
-Changes since the last public release (1.2.28):
-
-version 1.2.29 [May 8, 2008]
-
- Removed some stray *.diff and *.orig files
- Reverted Makefile.in, aclocal.m4, and configure to the libpng-1.2.26
- versions.
- Added --force to autogen libtoolize options and --force-missing to
- automake options.
- Changed $(ECHO) to echo in Makefile.am and Makefile.in
- Updated all configure files to autoconf-2.62
- #ifdef out pnggcrd.c code if using MSC_VER
-
-Send comments/corrections/commendations to png-mng-implement at lists.sf.net
-(subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe) or to glennrp at users.sourceforge.net
-
-Glenn R-P
diff --git a/Build/source/libs/libpng/CHANGES b/Build/source/libs/libpng/CHANGES
deleted file mode 100644
index 590987c79c8..00000000000
--- a/Build/source/libs/libpng/CHANGES
+++ /dev/null
@@ -1,2173 +0,0 @@
-
-CHANGES - changes for libpng
-
-version 0.2
- added reader into png.h
- fixed small problems in stub file
-
-version 0.3
- added pull reader
- split up pngwrite.c to several files
- added pnglib.txt
- added example.c
- cleaned up writer, adding a few new transformations
- fixed some bugs in writer
- interfaced with zlib 0.5
- added K&R support
- added check for 64 KB blocks for 16 bit machines
-
-version 0.4
- cleaned up code and commented code
- simplified time handling into png_time
- created png_color_16 and png_color_8 to handle color needs
- cleaned up color type defines
- fixed various bugs
- made various names more consistent
- interfaced with zlib 0.71
- cleaned up zTXt reader and writer (using zlib's Reset functions)
- split transformations into pngrtran.c and pngwtran.c
-
-version 0.5
- interfaced with zlib 0.8
- fixed many reading and writing bugs
- saved using 3 spaces instead of tabs
-
-version 0.6
- added png_large_malloc() and png_large_free()
- added png_size_t
- cleaned up some compiler warnings
- added png_start_read_image()
-
-version 0.7
- cleaned up lots of bugs
- finished dithering and other stuff
- added test program
- changed name from pnglib to libpng
-
-version 0.71 [June, 1995]
- changed pngtest.png for zlib 0.93
- fixed error in libpng.txt and example.c
-
-version 0.8
- cleaned up some bugs
- added png_set_filler()
- split up pngstub.c into pngmem.c, pngio.c, and pngerror.c
- added #define's to remove unwanted code
- moved png_info_init() to png.c
- added old_size into png_realloc()
- added functions to manually set filtering and compression info
- changed compression parameters based on image type
- optimized filter selection code
- added version info
- changed external functions passing floats to doubles (k&r problems?)
- put all the configurable stuff in pngconf.h
- enabled png_set_shift to work with paletted images on read
- added png_read_update_info() - updates info structure with
- transformations
-
-version 0.81 [August, 1995]
- incorporated Tim Wegner's medium model code (thanks, Tim)
-
-version 0.82 [September, 1995]
- [unspecified changes]
-
-version 0.85 [December, 1995]
- added more medium model code (almost everything's a far)
- added i/o, error, and memory callback functions
- fixed some bugs (16 bit, 4 bit interlaced, etc.)
- added first run progressive reader (barely tested)
-
-version 0.86 [January, 1996]
- fixed bugs
- improved documentation
-
-version 0.87 [January, 1996]
- fixed medium model bugs
- fixed other bugs introduced in 0.85 and 0.86
- added some minor documentation
-
-version 0.88 [January, 1996]
- fixed progressive bugs
- replaced tabs with spaces
- cleaned up documentation
- added callbacks for read/write and warning/error functions
-
-version 0.89 [July, 1996]
- added new initialization API to make libpng work better with shared libs
- we now have png_create_read_struct(), png_create_write_struct(),
- png_create_info_struct(), png_destroy_read_struct(), and
- png_destroy_write_struct() instead of the separate calls to
- malloc and png_read_init(), png_info_init(), and png_write_init()
- changed warning/error callback functions to fix bug - this means you
- should use the new initialization API if you were using the old
- png_set_message_fn() calls, and that the old API no longer exists
- so that people are aware that they need to change their code
- changed filter selection API to allow selection of multiple filters
- since it didn't work in previous versions of libpng anyways
- optimized filter selection code
- fixed png_set_background() to allow using an arbitrary RGB color for
- paletted images
- fixed gamma and background correction for paletted images, so
- png_correct_palette is not needed unless you are correcting an
- external palette (you will need to #define PNG_CORRECT_PALETTE_SUPPORTED
- in pngconf.h) - if nobody uses this, it may disappear in the future.
- fixed bug with Borland 64K memory allocation (Alexander Lehmann)
- fixed bug in interlace handling (Smarasderagd, I think)
- added more error checking for writing and image to reduce invalid files
- separated read and write functions so that they won't both be linked
- into a binary when only reading or writing functionality is used
- new pngtest image also has interlacing and zTXt
- updated documentation to reflect new API
-
-version 0.90 [January, 1997]
- made CRC errors/warnings on critical and ancillary chunks configurable
- libpng will use the zlib CRC routines by (compile-time) default
- changed DOS small/medium model memory support - needs zlib 1.04 (Tim Wegner)
- added external C++ wrapper statements to png.h (Gilles Dauphin)
- allow PNG file to be read when some or all of file signature has already
- been read from the beginning of the stream. ****This affects the size
- of info_struct and invalidates all programs that use a shared libpng****
- fixed png_filler() declarations
- fixed? background color conversions
- fixed order of error function pointers to match documentation
- current chunk name is now available in png_struct to reduce the number
- of nearly identical error messages (will simplify multi-lingual
- support when available)
- try to get ready for unknown-chunk callback functions:
- - previously read critical chunks are flagged, so the chunk handling
- routines can determine if the chunk is in the right place
- - all chunk handling routines have the same prototypes, so we will
- be able to handle all chunks via a callback mechanism
- try to fix Linux "setjmp" buffer size problems
- removed png_large_malloc, png_large_free, and png_realloc functions.
-
-version 0.95 [March, 1997]
- fixed bug in pngwutil.c allocating "up_row" twice and "avg_row" never
- fixed bug in PNG file signature compares when start != 0
- changed parameter type of png_set_filler(...filler...) from png_byte
- to png_uint_32
- added test for MACOS to ensure that both math.h and fp.h are not #included
- added macros for libpng to be compiled as a Windows DLL (Andreas Kupries)
- added "packswap" transformation, which changes the endianness of
- packed-pixel bytes (Kevin Bracey)
- added "strip_alpha" transformation, which removes the alpha channel of
- input images without using it (not necessarily a good idea)
- added "swap_alpha" transformation, which puts the alpha channel in front
- of the color bytes instead of after
- removed all implicit variable tests which assume NULL == 0 (I think)
- changed several variables to "png_size_t" to show 16/32-bit limitations
- added new pCAL chunk read/write support
- added experimental filter selection weighting (Greg Roelofs)
- removed old png_set_rgbx() and png_set_xrgb() functions that have been
- obsolete for about 2 years now (use png_set_filler() instead)
- added macros to read 16- and 32-bit ints directly from buffer, to be
- used only on those systems that support it (namely PowerPC and 680x0)
- With some testing, this may become the default for MACOS/PPC systems.
- only calculate CRC on data if we are going to use it
- added macros for zTXt compression type PNG_zTXt_COMPRESSION_???
- added macros for simple libpng debugging output selectable at compile time
- removed PNG_READ_END_MODE in progressive reader (Smarasderagd)
- more description of info_struct in libpng.txt and png.h
- more instructions in example.c
- more chunk types tested in pngtest.c
- renamed pngrcb.c to pngset.c, and all png_read_<chunk> functions to be
- png_set_<chunk>. We now have corresponding png_get_<chunk>
- functions in pngget.c to get information in info_ptr. This isolates
- the application from the internal organization of png_info_struct
- (good for shared library implementations).
-
-version 0.96 [May, 1997]
- fixed serious bug with < 8bpp images introduced in 0.95
- fixed 256-color transparency bug (Greg Roelofs)
- fixed up documentation (Greg Roelofs, Laszlo Nyul)
- fixed "error" in pngconf.h for Linux setjmp() behaviour
- fixed DOS medium model support (Tim Wegner)
- fixed png_check_keyword() for case with error in static string text
- added read of CRC after IEND chunk for embedded PNGs (Laszlo Nyul)
- added typecasts to quiet compiler errors
- added more debugging info
-
-version 0.97 [January, 1998]
- removed PNG_USE_OWN_CRC capability
- relocated png_set_crc_action from pngrutil.c to pngrtran.c
- fixed typecasts of "new_key", etc. (Andreas Dilger)
- added RFC 1152 [sic] date support
- fixed bug in gamma handling of 4-bit grayscale
- added 2-bit grayscale gamma handling (Glenn R-P)
- added more typecasts. 65536L becomes (png_uint_32)65536L, etc. (Glenn R-P)
- minor corrections in libpng.txt
- added simple sRGB support (Glenn R-P)
- easier conditional compiling, e.g. define PNG_READ/WRITE_NOT_FULLY_SUPPORTED;
- all configurable options can be selected from command-line instead
- of having to edit pngconf.h (Glenn R-P)
- fixed memory leak in pngwrite.c (free info_ptr->text) (Glenn R-P)
- added more conditions for png_do_background, to avoid changing
- black pixels to background when a background is supplied and
- no pixels are transparent
- repaired PNG_NO_STDIO behaviour
- tested NODIV support and made it default behaviour (Greg Roelofs)
- added "-m" option and PNGTEST_DEBUG_MEMORY to pngtest (John Bowler)
- regularized version numbering scheme and bumped shared-library major
- version number to 2 to avoid problems with libpng 0.89 apps (Greg Roelofs)
-
-version 0.98 [January, 1998]
- cleaned up some typos in libpng.txt and in code documentation
- fixed memory leaks in pCAL chunk processing (Glenn R-P and John Bowler)
- cosmetic change "display_gamma" to "screen_gamma" in pngrtran.c
- changed recommendation about file_gamma for PC images to .51 from .45,
- in example.c and libpng.txt, added comments to distinguish between
- screen_gamma, viewing_gamma, and display_gamma.
- changed all references to RFC1152 to read RFC1123 and changed the
- PNG_TIME_RFC1152_SUPPORTED macro to PNG_TIME_RFC1123_SUPPORTED
- added png_invert_alpha capability (Glenn R-P -- suggestion by Jon Vincent)
- changed srgb_intent from png_byte to int to avoid compiler bugs
-
-version 0.99 [January 30, 1998]
- free info_ptr->text instead of end_info_ptr->text in pngread.c (John Bowler)
- fixed a longstanding "packswap" bug in pngtrans.c
- fixed some inconsistencies in pngconf.h that prevented compiling with
- PNG_READ_GAMMA_SUPPORTED and PNG_READ_hIST_SUPPORTED undefined
- fixed some typos and made other minor rearrangement of libpng.txt (Andreas)
- changed recommendation about file_gamma for PC images to .50 from .51 in
- example.c and libpng.txt, and changed file_gamma for sRGB images to .45
- added a number of functions to access information from the png structure
- png_get_image_height(), etc. (Glenn R-P, suggestion by Brad Pettit)
- added TARGET_MACOS similar to zlib-1.0.8
- define PNG_ALWAYS_EXTERN when __MWERKS__ && WIN32 are defined
- added type casting to all png_malloc() function calls
-version 0.99a [January 31, 1998]
- Added type casts and parentheses to all returns that return a value.(Tim W.)
-version 0.99b [February 4, 1998]
- Added type cast png_uint_32 on malloc function calls where needed.
- Changed type of num_hist from png_uint_32 to int (same as num_palette).
- Added checks for rowbytes overflow, in case png_size_t is less than 32 bits.
- Renamed makefile.elf to makefile.lnx.
-version 0.99c [February 7, 1998]
- More type casting. Removed erroneous overflow test in pngmem.c.
- Added png_buffered_memcpy() and png_buffered_memset(), apply them to rowbytes.
- Added UNIX manual pages libpng.3 (incorporating libpng.txt) and png.5.
-version 0.99d [February 11, 1998]
- Renamed "far_to_near()" "png_far_to_near()"
- Revised libpng.3
- Version 99c "buffered" operations didn't work as intended. Replaced them
- with png_memcpy_check() and png_memset_check().
- Added many "if (png_ptr == NULL) return" to quell compiler warnings about
- unused png_ptr, mostly in pngget.c and pngset.c.
- Check for overlength tRNS chunk present when indexed-color PLTE is read.
- Cleaned up spelling errors in libpng.3/libpng.txt
- Corrected a problem with png_get_tRNS() which returned undefined trans array
-version 0.99e [February 28, 1998]
- Corrected png_get_tRNS() again.
- Add parentheses for easier reading of pngget.c, fixed "||" should be "&&".
- Touched up example.c to make more of it compileable, although the entire
- file still can't be compiled (Willem van Schaik)
- Fixed a bug in png_do_shift() (Bryan Tsai)
- Added a space in png.h prototype for png_write_chunk_start()
- Replaced pngtest.png with one created with zlib 1.1.1
- Changed pngtest to report PASS even when file size is different (Jean-loup G.)
- Corrected some logic errors in png_do_invert_alpha() (Chris Patterson)
-version 0.99f [March 5, 1998]
- Corrected a bug in pngpread() introduced in version 99c (Kevin Bracey)
- Moved makefiles into a "scripts" directory, and added INSTALL instruction file
- Added makefile.os2 and pngos2.def (A. Zabolotny) and makefile.s2x (W. Sebok)
- Added pointers to "note on libpng versions" in makefile.lnx and README
- Added row callback feature when reading and writing nonprogressive rows
- and added a test of this feature in pngtest.c
- Added user transform callbacks, with test of the feature in pngtest.c
-version 0.99g [March 6, 1998, morning]
- Minor changes to pngtest.c to suppress compiler warnings.
- Removed "beta" language from documentation.
-version 0.99h [March 6, 1998, evening]
- Minor changes to previous minor changes to pngtest.c
- Changed PNG_READ_NOT_FULLY_SUPPORTED to PNG_READ_TRANSFORMS_NOT_SUPPORTED
- and added PNG_PROGRESSIVE_READ_NOT_SUPPORTED macro
- Added user transform capability
-
-version 1.00 [March 7, 1998]
- Changed several typedefs in pngrutil.c
- Added makefile.wat (Pawel Mrochen), updated makefile.tc3 (Willem van Schaik)
- replaced "while(1)" with "for(;;)"
- added PNGARG() to prototypes in pngtest.c and removed some prototypes
- updated some of the makefiles (Tom Lane)
- changed some typedefs (s_start, etc.) in pngrutil.c
- fixed dimensions of "short_months" array in pngwrite.c
- Replaced ansi2knr.c with the one from jpeg-v6
-
-version 1.0.0 [March 8, 1998]
- Changed name from 1.00 to 1.0.0 (Adam Costello)
- Added smakefile.ppc (with SCOPTIONS.ppc) for Amiga PPC (Andreas Kleinert)
-version 1.0.0a [March 9, 1998]
- Fixed three bugs in pngrtran.c to make gamma+background handling consistent
- (Greg Roelofs)
- Changed format of the PNG_LIBPNG_VER integer to xyyzz instead of xyz
- for major, minor, and bugfix releases. This is 10001. (Adam Costello,
- Tom Lane)
- Make months range from 1-12 in png_convert_to_rfc1123
-version 1.0.0b [March 13, 1998]
- Quieted compiler complaints about two empty "for" loops in pngrutil.c
- Minor changes to makefile.s2x
- Removed #ifdef/#endif around a png_free() in pngread.c
-
-version 1.0.1 [March 14, 1998]
- Changed makefile.s2x to reduce security risk of using a relative pathname
- Fixed some typos in the documentation (Greg).
- Fixed a problem with value of "channels" returned by png_read_update_info()
-version 1.0.1a [April 21, 1998]
- Optimized Paeth calculations by replacing abs() function calls with intrinsics
- plus other loop optimizations. Improves avg decoding speed by about 20%.
- Commented out i386istic "align" compiler flags in makefile.lnx.
- Reduced the default warning level in some makefiles, to make them consistent.
- Removed references to IJG and JPEG in the ansi2knr.c copyright statement.
- Fixed a bug in png_do_strip_filler with XXRRGGBB => RRGGBB transformation.
- Added grayscale and 16-bit capability to png_do_read_filler().
- Fixed a bug in pngset.c, introduced in version 0.99c, that sets rowbytes
- too large when writing an image with bit_depth < 8 (Bob Dellaca).
- Corrected some bugs in the experimental weighted filtering heuristics.
- Moved a misplaced pngrutil code block that truncates tRNS if it has more
- than num_palette entries -- test was done before num_palette was defined.
- Fixed a png_convert_to_rfc1123() bug that converts day 31 to 0 (Steve Eddins).
- Changed compiler flags in makefile.wat for better optimization (Pawel Mrochen).
-version 1.0.1b [May 2, 1998]
- Relocated png_do_gray_to_rgb() within png_do_read_transformations() (Greg).
- Relocated the png_composite macros from pngrtran.c to png.h (Greg).
- Added makefile.sco (contributed by Mike Hopkirk).
- Fixed two bugs (missing definitions of "istop") introduced in libpng-1.0.1a.
- Fixed a bug in pngrtran.c that would set channels=5 under some circumstances.
- More work on the Paeth-filtering, achieving imperceptible speedup (A Kleinert).
- More work on loop optimization which may help when compiled with C++ compilers.
- Added warnings when people try to use transforms they've defined out.
- Collapsed 4 "i" and "c" loops into single "i" loops in pngrtran and pngwtran.
- Revised paragraph about png_set_expand() in libpng.txt and libpng.3 (Greg)
-version 1.0.1c [May 11, 1998]
- Fixed a bug in pngrtran.c (introduced in libpng-1.0.1a) where the masks for
- filler bytes should have been 0xff instead of 0xf.
- Added max_pixel_depth=32 in pngrutil.c when using FILLER with palette images.
- Moved PNG_WRITE_WEIGHTED_FILTER_SUPPORTED and PNG_WRITE_FLUSH_SUPPORTED
- out of the PNG_WRITE_TRANSFORMS_NOT_SUPPORTED block of pngconf.h
- Added "PNG_NO_WRITE_TRANSFORMS" etc., as alternatives for *_NOT_SUPPORTED,
- for consistency, in pngconf.h
- Added individual "ifndef PNG_NO_[CAPABILITY]" in pngconf.h to make it easier
- to remove unwanted capabilities via the compile line
- Made some corrections to grammar (which, it's) in documentation (Greg).
- Corrected example.c, use of row_pointers in png_write_image().
-version 1.0.1d [May 24, 1998]
- Corrected several statements that used side effects illegally in pngrutil.c
- and pngtrans.c, that were introduced in version 1.0.1b
- Revised png_read_rows() to avoid repeated if-testing for NULL (A Kleinert)
- More corrections to example.c, use of row_pointers in png_write_image()
- and png_read_rows().
- Added pngdll.mak and pngdef.pas to scripts directory, contributed by
- Bob Dellaca, to make a png32bd.dll with Borland C++ 4.5
- Fixed error in example.c with png_set_text: num_text is 3, not 2 (Guido V.)
- Changed several loops from count-down to count-up, for consistency.
-version 1.0.1e [June 6, 1998]
- Revised libpng.txt and libpng.3 description of png_set_read|write_fn(), and
- added warnings when people try to set png_read_fn and png_write_fn in
- the same structure.
- Added a test such that png_do_gamma will be done when num_trans==0
- for truecolor images that have defined a background. This corrects an
- error that was introduced in libpng-0.90 that can cause gamma processing
- to be skipped.
- Added tests in png.h to include "trans" and "trans_values" in structures
- when PNG_READ_BACKGROUND_SUPPORTED or PNG_READ_EXPAND_SUPPORTED is defined.
- Add png_free(png_ptr->time_buffer) in png_destroy_read_struct()
- Moved png_convert_to_rfc_1123() from pngwrite.c to png.c
- Added capability for user-provided malloc_fn() and free_fn() functions,
- and revised pngtest.c to demonstrate their use, replacing the
- PNGTEST_DEBUG_MEM feature.
- Added makefile.w32, for Microsoft C++ 4.0 and later (Tim Wegner).
-
-version 1.0.2 [June 14, 1998]
- Fixed two bugs in makefile.bor .
-version 1.0.2a [December 30, 1998]
- Replaced and extended code that was removed from png_set_filler() in 1.0.1a.
- Fixed a bug in png_do_filler() that made it fail to write filler bytes in
- the left-most pixel of each row (Kevin Bracey).
- Changed "static pngcharp tIME_string" to "static char tIME_string[30]"
- in pngtest.c (Duncan Simpson).
- Fixed a bug in pngtest.c that caused pngtest to try to write a tIME chunk
- even when no tIME chunk was present in the source file.
- Fixed a problem in pngrutil.c: gray_to_rgb didn't always work with 16-bit.
- Fixed a problem in png_read_push_finish_row(), which would not skip some
- passes that it should skip, for images that are less than 3 pixels high.
- Interchanged the order of calls to png_do_swap() and png_do_shift()
- in pngwtran.c (John Cromer).
- Added #ifdef PNG_DEBUG/#endif surrounding use of PNG_DEBUG in png.h .
- Changed "bad adaptive filter type" from error to warning in pngrutil.c .
- Fixed a documentation error about default filtering with 8-bit indexed-color.
- Separated the PNG_NO_STDIO macro into PNG_NO_STDIO and PNG_NO_CONSOLE_IO
- (L. Peter Deutsch).
- Added png_set_rgb_to_gray() and png_get_rgb_to_gray_status() functions.
- Added png_get_copyright() and png_get_header_version() functions.
- Revised comments on png_set_progressive_read_fn() in libpng.txt and example.c
- Added information about debugging in libpng.txt and libpng.3 .
- Changed "ln -sf" to "ln -s -f" in makefile.s2x, makefile.lnx, and makefile.sco.
- Removed lines after Dynamic Dependencies" in makefile.aco .
- Revised makefile.dec to make a shared library (Jeremie Petit).
- Removed trailing blanks from all files.
-version 1.0.2a [January 6, 1999]
- Removed misplaced #endif and #ifdef PNG_NO_EXTERN near the end of png.h
- Added "if" tests to silence complaints about unused png_ptr in png.h and png.c
- Changed "check_if_png" function in example.c to return true (nonzero) if PNG.
- Changed libpng.txt to demonstrate png_sig_cmp() instead of png_check_sig()
- which is obsolete.
-
-version 1.0.3 [January 14, 1999]
- Added makefile.hux, for Hewlett Packard HPUX 10.20 and 11.00 (Jim Rice)
- Added a statement of Y2K compliance in png.h, libpng.3, and Y2KINFO.
-version 1.0.3a [August 12, 1999]
- Added check for PNG_READ_INTERLACE_SUPPORTED in pngread.c; issue a warning
- if an attempt is made to read an interlaced image when it's not supported.
- Added check if png_ptr->trans is defined before freeing it in pngread.c
- Modified the Y2K statement to include versions back to version 0.71
- Fixed a bug in the check for valid IHDR bit_depth/color_types in pngrutil.c
- Modified makefile.wat (added -zp8 flag, ".symbolic", changed some comments)
- Replaced leading blanks with tab characters in makefile.hux
- Changed "dworkin.wustl.edu" to "ccrc.wustl.edu" in various documents.
- Changed (float)red and (float)green to (double)red, (double)green
- in png_set_rgb_to_gray() to avoid "promotion" problems in AIX.
- Fixed a bug in pngconf.h that omitted <stdio.h> when PNG_DEBUG==0 (K Bracey).
- Reformatted libpng.3 and libpngpf.3 with proper fonts (script by J. vanZandt).
- Updated documentation to refer to the PNG-1.2 specification.
- Removed ansi2knr.c and left pointers to the latest source for ansi2knr.c
- in makefile.knr, INSTALL, and README (L. Peter Deutsch)
- Fixed bugs in calculation of the length of rowbytes when adding alpha
- channels to 16-bit images, in pngrtran.c (Chris Nokleberg)
- Added function png_set_user_transform_info() to store user_transform_ptr,
- user_depth, and user_channels into the png_struct, and a function
- png_get_user_transform_ptr() to retrieve the pointer (Chris Nokleberg)
- Added function png_set_empty_plte_permitted() to make libpng useable
- in MNG applications.
- Corrected the typedef for png_free_ptr in png.h (Jesse Jones).
- Correct gamma with srgb is 45455 instead of 45000 in pngrutil.c, to be
- consistent with PNG-1.2, and allow variance of 500 before complaining.
- Added assembler code contributed by Intel in file pngvcrd.c and modified
- makefile.w32 to use it (Nirav Chhatrapati, INTEL Corporation, Gilles Vollant)
- Changed "ln -s -f" to "ln -f -s" in the makefiles to make Solaris happy.
- Added some aliases for png_set_expand() in pngrtran.c, namely
- png_set_expand_PLTE(), png_set_expand_depth(), and png_set_expand_tRNS()
- (Greg Roelofs, in "PNG: The Definitive Guide").
- Added makefile.beo for BEOS on X86, contributed by Sander Stok.
-version 1.0.3b [August 26, 1999]
- Replaced 2147483647L several places with PNG_MAX_UINT macro, defined in png.h
- Changed leading blanks to tabs in all makefiles.
- Define PNG_USE_PNGVCRD in makefile.w32, to get MMX assembler code.
- Made alternate versions of png_set_expand() in pngrtran.c, namely
- png_set_gray_1_2_4_to_8, png_set_palette_to_rgb, and png_set_tRNS_to_alpha
- (Greg Roelofs, in "PNG: The Definitive Guide"). Deleted the 1.0.3a aliases.
- Relocated start of 'extern "C"' block in png.h so it doesn't include pngconf.h
- Revised calculation of num_blocks in pngmem.c to avoid a potentially
- negative shift distance, whose results are undefined in the C language.
- Added a check in pngset.c to prevent writing multiple tIME chunks.
- Added a check in pngwrite.c to detect invalid small window_bits sizes.
-version 1.0.3d [September 4, 1999]
- Fixed type casting of igamma in pngrutil.c
- Added new png_expand functions to scripts/pngdef.pas and pngos2.def
- Added a demo read_user_transform_fn that examines the row filters in pngtest.c
-
-version 1.0.4 [September 24, 1999]
- Define PNG_ALWAYS_EXTERN in pngconf.h if __STDC__ is defined
- Delete #define PNG_INTERNAL and include "png.h" from pngasmrd.h
- Made several minor corrections to pngtest.c
- Renamed the makefiles with longer but more user friendly extensions.
- Copied the PNG copyright and license to a separate LICENSE file.
- Revised documentation, png.h, and example.c to remove reference to
- "viewing_gamma" which no longer appears in the PNG specification.
- Revised pngvcrd.c to use MMX code for interlacing only on the final pass.
- Updated pngvcrd.c to use the faster C filter algorithms from libpng-1.0.1a
- Split makefile.win32vc into two versions, makefile.vcawin32 (uses MMX
- assembler code) and makefile.vcwin32 (doesn't).
- Added a CPU timing report to pngtest.c (enabled by defining PNGTEST_TIMING)
- Added a copy of pngnow.png to the distribution.
-version 1.0.4a [September 25, 1999]
- Increase max_pixel_depth in pngrutil.c if a user transform needs it.
- Changed several division operations to right-shifts in pngvcrd.c
-version 1.0.4b [September 30, 1999]
- Added parentheses in line 3732 of pngvcrd.c
- Added a comment in makefile.linux warning about buggy -O3 in pgcc 2.95.1
-version 1.0.4c [October 1, 1999]
- Added a "png_check_version" function in png.c and pngtest.c that will generate
- a helpful compiler error if an old png.h is found in the search path.
- Changed type of png_user_transform_depth|channels from int to png_byte.
-version 1.0.4d [October 6, 1999]
- Changed 0.45 to 0.45455 in png_set_sRGB()
- Removed unused PLTE entries from pngnow.png
- Re-enabled some parts of pngvcrd.c (png_combine_row) that work properly.
-version 1.0.4e [October 10, 1999]
- Fixed sign error in pngvcrd.c (Greg Roelofs)
- Replaced some instances of memcpy with simple assignments in pngvcrd (GR-P)
-version 1.0.4f [October 15, 1999]
- Surrounded example.c code with #if 0 .. #endif to prevent people from
- inadvertently trying to compile it.
- Changed png_get_header_version() from a function to a macro in png.h
- Added type casting mostly in pngrtran.c and pngwtran.c
- Removed some pointless "ptr = NULL" in pngmem.c
- Added a "contrib" directory containing the source code from Greg's book.
-
-version 1.0.5 [October 15, 1999]
- Minor editing of the INSTALL and README files.
-version 1.0.5a [October 23, 1999]
- Added contrib/pngsuite and contrib/pngminus (Willem van Schaik)
- Fixed a typo in the png_set_sRGB() function call in example.c (Jan Nijtmans)
- Further optimization and bugfix of pngvcrd.c
- Revised pngset.c so that it does not allocate or free memory in the user's
- text_ptr structure. Instead, it makes its own copy.
- Created separate write_end_info_struct in pngtest.c for a more severe test.
- Added code in pngwrite.c to free info_ptr->text[i].key to stop a memory leak.
-version 1.0.5b [November 23, 1999]
- Moved PNG_FLAG_HAVE_CHUNK_HEADER, PNG_FLAG_BACKGROUND_IS_GRAY and
- PNG_FLAG_WROTE_tIME from flags to mode.
- Added png_write_info_before_PLTE() function.
- Fixed some typecasting in contrib/gregbook/*.c
- Updated scripts/makevms.com and added makevms.com to contrib/gregbook
- and contrib/pngminus (Martin Zinser)
-version 1.0.5c [November 26, 1999]
- Moved png_get_header_version from png.h to png.c, to accommodate ansi2knr.
- Removed all global arrays (according to PNG_NO_GLOBAL_ARRAYS macro), to
- accommodate making DLL's: Moved usr_png_ver from global variable to function
- png_get_header_ver() in png.c. Moved png_sig to png_sig_bytes in png.c and
- eliminated use of png_sig in pngwutil.c. Moved the various png_CHNK arrays
- into pngtypes.h. Eliminated use of global png_pass arrays. Declared the
- png_CHNK and png_pass arrays to be "const". Made the global arrays
- available to applications (although none are used in libpng itself) when
- PNG_NO_GLOBAL_ARRAYS is not defined or when PNG_GLOBAL_ARRAYS is defined.
- Removed some extraneous "-I" from contrib/pngminus/makefile.std
- Changed the PNG_sRGB_INTENT macros in png.h to be consistent with PNG-1.2.
- Change PNG_SRGB_INTENT to PNG_sRGB_INTENT in libpng.txt and libpng.3
-version 1.0.5d [November 29, 1999]
- Add type cast (png_const_charp) two places in png.c
- Eliminated pngtypes.h; use macros instead to declare PNG_CHNK arrays.
- Renamed "PNG_GLOBAL_ARRAYS" to "PNG_USE_GLOBAL_ARRAYS" and made available
- to applications a macro "PNG_USE_LOCAL_ARRAYS".
- #ifdef out all the new declarations when PNG_USE_GLOBAL_ARRAYS is defined.
- Added PNG_EXPORT_VAR macro to accommodate making DLL's.
-version 1.0.5e [November 30, 1999]
- Added iCCP, iTXt, and sPLT support; added "lang" member to the png_text
- structure; refactored the inflate/deflate support to make adding new chunks
- with trailing compressed parts easier in the future, and added new functions
- png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
- png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
- NOTE: Applications that write text chunks MUST define png_text->lang
- before calling png_set_text(). It must be set to NULL if you want to
- write tEXt or zTXt chunks. If you want your application to be able to
- run with older versions of libpng, use
-
- #ifdef PNG_iTXt_SUPPORTED
- png_text[i].lang = NULL;
- #endif
-
- Changed png_get_oFFs() and png_set_oFFs() to use signed rather than unsigned
- offsets (Eric S. Raymond).
- Combined PNG_READ_cHNK_SUPPORTED and PNG_WRITE_cHNK_SUPPORTED macros into
- PNG_cHNK_SUPPORTED and combined the three types of PNG_text_SUPPORTED
- macros, leaving the separate macros also available.
- Removed comments on #endifs at the end of many short, non-nested #if-blocks.
-version 1.0.5f [December 6, 1999]
- Changed makefile.solaris to issue a warning about potential problems when
- the ucb "ld" is in the path ahead of the ccs "ld".
- Removed "- [date]" from the "synopsis" line in libpng.3 and libpngpf.3.
- Added sCAL chunk support (Eric S. Raymond).
-version 1.0.5g [December 7, 1999]
- Fixed "png_free_spallettes" typo in png.h
- Added code to handle new chunks in pngpread.c
- Moved PNG_CHNK string macro definitions outside of PNG_NO_EXTERN block
- Added "translated_key" to png_text structure and png_write_iTXt().
- Added code in pngwrite.c to work around a newly discovered zlib bug.
-version 1.0.5h [December 10, 1999]
- NOTE: regarding the note for version 1.0.5e, the following must also
- be included in your code:
- png_text[i].translated_key = NULL;
- Unknown chunk handling is now supported.
- Option to eliminate all floating point support was added. Some new
- fixed-point functions such as png_set_gAMA_fixed() were added.
- Expanded tabs and removed trailing blanks in source files.
-version 1.0.5i [December 13, 1999]
- Added some type casts to silence compiler warnings.
- Renamed "png_free_spalette" to "png_free_spalettes" for consistency.
- Removed leading blanks from a #define in pngvcrd.c
- Added some parameters to the new png_set_keep_unknown_chunks() function.
- Added a test for up->location != 0 in the first instance of writing
- unknown chunks in pngwrite.c
- Changed "num" to "i" in png_free_spalettes() and png_free_unknowns() to
- prevent recursion.
- Added png_free_hIST() function.
- Various patches to fix bugs in the sCAL and integer cHRM processing,
- and to add some convenience macros for use with sCAL.
-version 1.0.5j [December 21, 1999]
- Changed "unit" parameter of png_write_sCAL from png_byte to int, to work
- around buggy compilers.
- Added new type "png_fixed_point" for integers that hold float*100000 values
- Restored backward compatibility of tEXt/zTXt chunk processing:
- Restored the first four members of png_text to the same order as v.1.0.5d.
- Added members "lang_key" and "itxt_length" to png_text struct. Set
- text_length=0 when "text" contains iTXt data. Use the "compression"
- member to distinguish among tEXt/zTXt/iTXt types. Added
- PNG_ITXT_COMPRESSION_NONE (1) and PNG_ITXT_COMPRESSION_zTXt(2) macros.
- The "Note" above, about backward incompatibility of libpng-1.0.5e, no
- longer applies.
- Fixed png_read|write_iTXt() to read|write parameters in the right order,
- and to write the iTXt chunk after IDAT if it appears in the end_ptr.
- Added pnggccrd.c, version of pngvcrd.c Intel assembler for gcc (Greg Roelofs)
- Reversed the order of trying to write floating-point and fixed-point gAMA.
-version 1.0.5k [December 27, 1999]
- Added many parentheses, e.g., "if (a && b & c)" becomes "if (a && (b & c))"
- Added png_handle_as_unknown() function (Glenn)
- Added png_free_chunk_list() function and chunk_list and num_chunk_list members
- of png_ptr.
- Eliminated erroneous warnings about multiple sPLT chunks and sPLT-after-PLTE.
- Fixed a libpng-1.0.5h bug in pngrutil.c that was issuing erroneous warnings
- about ignoring incorrect gAMA with sRGB (gAMA was in fact not ignored)
- Added png_free_tRNS(); png_set_tRNS() now malloc's its own trans array (ESR).
- Define png_get_int_32 when oFFs chunk is supported as well as when pCAL is.
- Changed type of proflen from png_int_32 to png_uint_32 in png_get_iCCP().
-version 1.0.5l [January 1, 2000]
- Added functions png_set_read_user_chunk_fn() and png_get_user_chunk_ptr()
- for setting a callback function to handle unknown chunks and for
- retrieving the associated user pointer (Glenn).
-version 1.0.5m [January 7, 2000]
- Added high-level functions png_read_png(), png_write_png(), png_free_pixels().
-version 1.0.5n [January 9, 2000]
- Added png_free_PLTE() function, and modified png_set_PLTE() to malloc its
- own memory for info_ptr->palette. This makes it safe for the calling
- application to free its copy of the palette any time after it calls
- png_set_PLTE().
-version 1.0.5o [January 20, 2000]
- Cosmetic changes only (removed some trailing blanks and TABs)
-version 1.0.5p [January 31, 2000]
- Renamed pngdll.mak to makefile.bd32
- Cosmetic changes in pngtest.c
-version 1.0.5q [February 5, 2000]
- Relocated the makefile.solaris warning about PATH problems.
- Fixed pngvcrd.c bug by pushing/popping registers in mmxsupport (Bruce Oberg)
- Revised makefile.gcmmx
- Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros
-version 1.0.5r [February 7, 2000]
- Removed superfluous prototype for png_get_itxt from png.h
- Fixed a bug in pngrtran.c that improperly expanded the background color.
- Return *num_text=0 from png_get_text() when appropriate, and fix documentation
- of png_get_text() in libpng.txt/libpng.3.
-version 1.0.5s [February 18, 2000]
- Added "png_jmp_env()" macro to pngconf.h, to help people migrate to the
- new error handler that's planned for the next libpng release, and changed
- example.c, pngtest.c, and contrib programs to use this macro.
- Revised some of the DLL-export macros in pngconf.h (Greg Roelofs)
- Fixed a bug in png_read_png() that caused it to fail to expand some images
- that it should have expanded.
- Fixed some mistakes in the unused and undocumented INCH_CONVERSIONS functions
- in pngget.c
- Changed the allocation of palette, history, and trans arrays back to
- the version 1.0.5 method (linking instead of copying) which restores
- backward compatibility with version 1.0.5. Added some remarks about
- that in example.c. Added "free_me" member to info_ptr and png_ptr
- and added png_free_data() function.
- Updated makefile.linux and makefile.gccmmx to make directories conditionally.
- Made cosmetic changes to pngasmrd.h
- Added png_set_rows() and png_get_rows(), for use with png_read|write_png().
- Modified png_read_png() to allocate info_ptr->row_pointers only if it
- hasn't already been allocated.
-version 1.0.5t [March 4, 2000]
- Changed png_jmp_env() migration aiding macro to png_jmpbuf().
- Fixed "interlace" typo (should be "interlaced") in contrib/gregbook/read2-x.c
- Fixed bug with use of PNG_BEFORE_IHDR bit in png_ptr->mode, introduced when
- PNG_FLAG_HAVE_CHUNK_HEADER was moved into png_ptr->mode in version 1.0.5b
- Files in contrib/gregbook were revised to use png_jmpbuf() and to select
- a 24-bit visual if one is available, and to allow abbreviated options.
- Files in contrib/pngminus were revised to use the png_jmpbuf() macro.
- Removed spaces in makefile.linux and makefile.gcmmx, introduced in 1.0.5s
-version 1.0.5u [March 5, 2000]
- Simplified the code that detects old png.h in png.c and pngtest.c
- Renamed png_spalette (_p, _pp) to png_sPLT_t (_tp, _tpp)
- Increased precision of rgb_to_gray calculations from 8 to 15 bits and
- added png_set_rgb_to_gray_fixed() function.
- Added makefile.bc32 (32-bit Borland C++, C mode)
-version 1.0.5v [March 11, 2000]
- Added some parentheses to the png_jmpbuf macro definition.
- Updated references to the zlib home page, which has moved to freesoftware.com.
- Corrected bugs in documentation regarding png_read_row() and png_write_row().
- Updated documentation of png_rgb_to_gray calculations in libpng.3/libpng.txt.
- Renamed makefile.borland,turboc3 back to makefile.bor,tc3 as in version 1.0.3,
- revised borland makefiles; added makefile.ibmvac3 and makefile.gcc (Cosmin)
-
-version 1.0.6 [March 20, 2000]
- Minor revisions of makefile.bor, libpng.txt, and gregbook/rpng2-win.c
- Added makefile.sggcc (SGI IRIX with gcc)
-version 1.0.6d [April 7, 2000]
- Changed sprintf() to strcpy() in png_write_sCAL_s() to work without STDIO
- Added data_length parameter to png_decompress_chunk() function
- Revised documentation to remove reference to abandoned png_free_chnk functions
- Fixed an error in png_rgb_to_gray_fixed()
- Revised example.c, usage of png_destroy_write_struct().
- Renamed makefile.ibmvac3 to makefile.ibmc, added libpng.icc IBM project file
- Added a check for info_ptr->free_me&PNG_FREE_TEXT when freeing text in png.c
- Simplify png_sig_bytes() function to remove use of non-ISO-C strdup().
-version 1.0.6e [April 9, 2000]
- Added png_data_freer() function.
- In the code that checks for over-length tRNS chunks, added check of
- info_ptr->num_trans as well as png_ptr->num_trans (Matthias Benckmann)
- Minor revisions of libpng.txt/libpng.3.
- Check for existing data and free it if the free_me flag is set, in png_set_*()
- and png_handle_*().
- Only define PNG_WEIGHTED_FILTERS_SUPPORTED when PNG_FLOATING_POINT_SUPPORTED
- is defined.
- Changed several instances of PNG_NO_CONSOLE_ID to PNG_NO_STDIO in pngrutil.c
- and mentioned the purposes of the two macros in libpng.txt/libpng.3.
-version 1.0.6f [April 14, 2000]
- Revised png_set_iCCP() and png_set_rows() to avoid prematurely freeing data.
- Add checks in png_set_text() for NULL members of the input text structure.
- Revised libpng.txt/libpng.3.
- Removed superfluous prototype for png_set_itxt from png.h
- Removed "else" from pngread.c, after png_error(), and changed "0" to "length".
- Changed several png_errors about malformed ancillary chunks to png_warnings.
-version 1.0.6g [April 24, 2000]
- Added png_pass-* arrays to pnggccrd.c when PNG_USE_LOCAL_ARRAYS is defined.
- Relocated paragraph about png_set_background() in libpng.3/libpng.txt
- and other revisions (Matthias Benckmann)
- Relocated info_ptr->free_me, png_ptr->free_me, and other info_ptr and
- png_ptr members to restore binary compatibility with libpng-1.0.5
- (breaks compatibility with libpng-1.0.6).
-version 1.0.6h [April 24, 2000]
- Changed shared library so-number pattern from 2.x.y.z to xy.z (this builds
- libpng.so.10 & libpng.so.10.6h instead of libpng.so.2 & libpng.so.2.1.0.6h)
- This is a temporary change for test purposes.
-version 1.0.6i [May 2, 2000]
- Rearranged some members at the end of png_info and png_struct, to put
- unknown_chunks_num and free_me within the original size of the png_structs
- and free_me, png_read_user_fn, and png_free_fn within the original png_info,
- because some old applications allocate the structs directly instead of
- using png_create_*().
- Added documentation of user memory functions in libpng.txt/libpng.3
- Modified png_read_png so that it will use user_allocated row_pointers
- if present, unless free_me directs that it be freed, and added description
- of the use of png_set_rows() and png_get_rows() in libpng.txt/libpng.3.
- Added PNG_LEGACY_SUPPORTED macro, and #ifdef out all new (since version
- 1.00) members of png_struct and png_info, to regain binary compatibility
- when you define this macro. Capabilities lost in this event
- are user transforms (new in version 1.0.0),the user transform pointer
- (new in version 1.0.2), rgb_to_gray (new in 1.0.5), iCCP, sCAL, sPLT,
- the high-level interface, and unknown chunks support (all new in 1.0.6).
- This was necessary because of old applications that allocate the structs
- directly as authors were instructed to do in libpng-0.88 and earlier,
- instead of using png_create_*().
- Added modes PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT which
- can be used to detect codes that directly allocate the structs, and
- code to check these modes in png_read_init() and png_write_init() and
- generate a libpng error if the modes aren't set and PNG_LEGACY_SUPPORTED
- was not defined.
- Added makefile.intel and updated makefile.watcom (Pawel Mrochen)
-version 1.0.6j [May 3, 2000]
- Overloaded png_read_init() and png_write_init() with macros that convert
- calls to png_read_init_2() or png_write_init_2() that check the version
- and structure sizes.
-version 1.0.7beta11 [May 7, 2000]
- Removed the new PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT modes
- which are no longer used.
- Eliminated the three new members of png_text when PNG_LEGACY_SUPPORTED is
- defined or when neither PNG_READ_iTXt_SUPPORTED nor PNG_WRITE_iTXT_SUPPORTED
- is defined.
- Made PNG_NO_READ|WRITE_iTXt the default setting, to avoid memory
- overrun when old applications fill the info_ptr->text structure directly.
- Added PNGAPI macro, and added it to the definitions of all exported functions.
- Relocated version macro definitions ahead of the includes of zlib.h and
- pngconf.h in png.h.
-version 1.0.7beta12 [May 12, 2000]
- Revised pngset.c to avoid a problem with expanding the png_debug macro.
- Deleted some extraneous defines from pngconf.h
- Made PNG_NO_CONSOLE_IO the default condition when PNG_BUILD_DLL is defined.
- Use MSC _RPTn debugging instead of fprintf if _MSC_VER is defined.
- Added png_access_version_number() function.
- Check for mask&PNG_FREE_CHNK (for TEXT, SCAL, PCAL) in png_free_data().
- Expanded libpng.3/libpng.txt information about png_data_freer().
-version 1.0.7beta14 [May 17, 2000] (beta13 was not published)
- Changed pnggccrd.c and pngvcrd.c to handle bad adaptive filter types as
- warnings instead of errors, as pngrutil.c does.
- Set the PNG_INFO_IDAT valid flag in png_set_rows() so png_write_png()
- will actually write IDATs.
- Made the default PNG_USE_LOCAL_ARRAYS depend on PNG_DLL instead of WIN32.
- Make png_free_data() ignore its final parameter except when freeing data
- that can have multiple instances (text, sPLT, unknowns).
- Fixed a new bug in png_set_rows().
- Removed info_ptr->valid tests from png_free_data(), as in version 1.0.5.
- Added png_set_invalid() function.
- Fixed incorrect illustrations of png_destroy_write_struct() in example.c.
-version 1.0.7beta15 [May 30, 2000]
- Revised the deliberately erroneous Linux setjmp code in pngconf.h to produce
- fewer error messages.
- Rearranged checks for Z_OK to check the most likely path first in pngpread.c
- and pngwutil.c.
- Added checks in pngtest.c for png_create_*() returning NULL, and mentioned
- in libpng.txt/libpng.3 the need for applications to check this.
- Changed names of png_default_*() functions in pngtest to pngtest_*().
- Changed return type of png_get_x|y_offset_*() from png_uint_32 to png_int_32.
- Fixed some bugs in the unused PNG_INCH_CONVERSIONS functions in pngget.c
- Set each pointer to NULL after freeing it in png_free_data().
- Worked around a problem in pngconf.h; AIX's strings.h defines an "index"
- macro that conflicts with libpng's png_color_16.index. (Dimitri Papadapoulos)
- Added "msvc" directory with MSVC++ project files (Simon-Pierre Cadieux).
-version 1.0.7beta16 [June 4, 2000]
- Revised the workaround of AIX string.h "index" bug.
- Added a check for overlength PLTE chunk in pngrutil.c.
- Added PNG_NO_POINTER_INDEXING macro to use array-indexing instead of pointer
- indexing in pngrutil.c and pngwutil.c to accommodate a buggy compiler.
- Added a warning in png_decompress_chunk() when it runs out of data, e.g.
- when it tries to read an erroneous PhotoShop iCCP chunk.
- Added PNG_USE_DLL macro.
- Revised the copyright/disclaimer/license notice.
- Added contrib/msvctest directory
-version 1.0.7rc1 [June 9, 2000]
- Corrected the definition of PNG_TRANSFORM_INVERT_ALPHA (0x0400 not 0x0200)
- Added contrib/visupng directory (Willem van Schaik)
-version 1.0.7beta18 [June 23, 2000]
- Revised PNGAPI definition, and pngvcrd.c to work with __GCC__
- and do not redefine PNGAPI if it is passed in via a compiler directive.
- Revised visupng/PngFile.c to remove returns from within the Try block.
- Removed leading underscores from "_PNG_H" and "_PNG_SAVE_BSD_SOURCE" macros.
- Updated contrib/visupng/cexcept.h to version 1.0.0.
- Fixed bugs in pngwrite.c and pngwutil.c that prevented writing iCCP chunks.
-version 1.0.7rc2 [June 28, 2000]
- Updated license to include disclaimers required by UCITA.
- Fixed "DJBPP" typo in pnggccrd.c introduced in beta18.
-
-version 1.0.7 [July 1, 2000]
- Revised the definition of "trans_values" in libpng.3/libpng.txt
-version 1.0.8beta1 [July 8, 2000]
- Added png_free(png_ptr, key) two places in pngpread.c to stop memory leaks.
- Changed PNG_NO_STDIO to PNG_NO_CONSOLE_IO, several places in pngrutil.c and
- pngwutil.c.
- Changed PNG_EXPORT_VAR to use PNG_IMPEXP, in pngconf.h.
- Removed unused "#include <assert.h>" from png.c
- Added WindowsCE support.
- Revised pnggccrd.c to work with gcc-2.95.2 and in the Cygwin environment.
-version 1.0.8beta2 [July 10, 2000]
- Added project files to the wince directory and made further revisions
- of pngtest.c, pngrio.c, and pngwio.c in support of WindowsCE.
-version 1.0.8beta3 [July 11, 2000]
- Only set the PNG_FLAG_FREE_TRNS or PNG_FREE_TRNS flag in png_handle_tRNS()
- for indexed-color input files to avoid potential double-freeing trans array
- under some unusual conditions; problem was introduced in version 1.0.6f.
- Further revisions to pngtest.c and files in the wince subdirectory.
-version 1.0.8beta4 [July 14, 2000]
- Added the files pngbar.png and pngbar.jpg to the distribution.
- Added makefile.cygwin, and cygwin support in pngconf.h
- Added PNG_NO_ZALLOC_ZERO macro (makes png_zalloc skip zeroing memory)
-version 1.0.8rc1 [July 16, 2000]
- Revised png_debug() macros and statements to eliminate compiler warnings.
-
-version 1.0.8 [July 24, 2000]
- Added png_flush() in pngwrite.c, after png_write_IEND().
- Updated makefile.hpux to build a shared library.
-version 1.0.9beta1 [November 10, 2000]
- Fixed typo in scripts/makefile.hpux
- Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser)
- Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser)
- Changed "cdrom.com" in documentation to "libpng.org"
- Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg).
- Changed type of "params" from voidp to png_voidp in png_read|write_png().
- Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h.
- Revised the 3 instances of WRITEFILE in pngtest.c.
- Relocated "msvc" and "wince" project subdirectories into "dll" subdirectory.
- Updated png.rc in dll/msvc project
- Revised makefile.dec to define and use LIBPATH and INCPATH
- Increased size of global png_libpng_ver[] array from 12 to 18 chars.
- Made global png_libpng_ver[], png_sig[] and png_pass_*[] arrays const.
- Removed duplicate png_crc_finish() from png_handle_bKGD() function.
- Added a warning when application calls png_read_update_info() multiple times.
- Revised makefile.cygwin
- Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
- Replaced png_set_empty_plte_permitted() with png_permit_mng_features().
-version 1.0.9beta2 [November 19, 2000]
- Renamed the "dll" subdirectory "projects".
- Added borland project files to "projects" subdirectory.
- Set VS_FF_PRERELEASE and VS_FF_PATCHED flags in msvc/png.rc when appropriate.
- Add error message in png_set_compression_buffer_size() when malloc fails.
-version 1.0.9beta3 [November 23, 2000]
- Revised PNG_LIBPNG_BUILD_TYPE macro in png.h, used in the msvc project.
- Removed the png_flush() in pngwrite.c that crashes some applications
- that don't set png_output_flush_fn.
- Added makefile.macosx and makefile.aix to scripts directory.
-version 1.0.9beta4 [December 1, 2000]
- Change png_chunk_warning to png_warning in png_check_keyword().
- Increased the first part of msg buffer from 16 to 18 in png_chunk_error().
-version 1.0.9beta5 [December 15, 2000]
- Added support for filter method 64 (for PNG datastreams embedded in MNG).
-version 1.0.9beta6 [December 18, 2000]
- Revised png_set_filter() to accept filter method 64 when appropriate.
- Added new PNG_HAVE_PNG_SIGNATURE bit to png_ptr->mode and use it to
- help prevent applications from using MNG features in PNG datastreams.
- Added png_permit_mng_features() function.
- Revised libpng.3/libpng.txt. Changed "filter type" to "filter method".
-version 1.0.9rc1 [December 23, 2000]
- Revised test for PNG_HAVE_PNG_SIGNATURE in pngrutil.c
- Fixed error handling of unknown compression type in png_decompress_chunk().
- In pngconf.h, define __cdecl when _MSC_VER is defined.
-version 1.0.9beta7 [December 28, 2000]
- Changed PNG_TEXT_COMPRESSION_zTXt to PNG_COMPRESSION_TYPE_BASE several places.
- Revised memory management in png_set_hIST and png_handle_hIST in a backward
- compatible manner. PLTE and tRNS were revised similarly.
- Revised the iCCP chunk reader to ignore trailing garbage.
-version 1.0.9beta8 [January 12, 2001]
- Moved pngasmrd.h into pngconf.h.
- Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop.
-version 1.0.9beta9 [January 15, 2001]
- Added png_set_invalid, png_permit_mng_features, and png_mmx_supported to
- wince and msvc project module definition files.
- Minor revision of makefile.cygwin.
- Fixed bug with progressive reading of narrow interlaced images in pngpread.c
-version 1.0.9beta10 [January 16, 2001]
- Do not typedef png_FILE_p in pngconf.h when PNG_NO_STDIO is defined.
- Fixed "png_mmx_supported" typo in project definition files.
-version 1.0.9beta11 [January 19, 2001]
- Updated makefile.sgi to make shared library.
- Removed png_mmx_support() function and disabled PNG_MNG_FEATURES_SUPPORTED
- by default, for the benefit of DLL forward compatibility. These will
- be re-enabled in version 1.2.0.
-version 1.0.9rc2 [January 22, 2001]
- Revised cygwin support.
-
-version 1.0.9 [January 31, 2001]
- Added check of cygwin's ALL_STATIC in pngconf.h
- Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos.
-version 1.0.10beta1 [March 14, 2001]
- Revised makefile.dec, makefile.sgi, and makefile.sggcc; added makefile.hpgcc.
- Reformatted libpng.3 to eliminate bad line breaks.
- Added checks for _mmx_supported in the read_filter_row function of pnggccrd.c
- Added prototype for png_mmx_support() near the top of pnggccrd.c
- Moved some error checking from png_handle_IHDR to png_set_IHDR.
- Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros.
- Revised png_mmx_support() function in pnggccrd.c
- Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c
- Fixed memory leak in contrib/visupng/PngFile.c
- Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version)
- Added warnings when retrieving or setting gamma=0.
- Increased the first part of msg buffer from 16 to 18 in png_chunk_warning().
-version 1.0.10rc1 [March 23, 2001]
- Changed all instances of memcpy, strcpy, and strlen to png_memcpy, png_strcpy,
- and png_strlen.
- Revised png_mmx_supported() function in pnggccrd.c to return proper value.
- Fixed bug in progressive reading (pngpread.c) with small images (height < 8).
-
-version 1.0.10 [March 30, 2001]
- Deleted extraneous space (introduced in 1.0.9) from line 42 of makefile.cygwin
- Added beos project files (Chris Herborth)
-version 1.0.11beta1 [April 3, 2001]
- Added type casts on several png_malloc() calls (Dimitri Papadapoulos).
- Removed a no-longer needed AIX work-around from pngconf.h
- Changed several "//" single-line comments to C-style in pnggccrd.c
-version 1.0.11beta2 [April 11, 2001]
- Removed PNGAPI from several functions whose prototypes did not have PNGAPI.
- Updated scripts/pngos2.def
-version 1.0.11beta3 [April 14, 2001]
- Added checking the results of many instances of png_malloc() for NULL
-version 1.0.11beta4 [April 20, 2001]
- Undid the changes from version 1.0.11beta3. Added a check for NULL return
- from user's malloc_fn().
- Removed some useless type casts of the NULL pointer.
- Added makefile.netbsd
-
-version 1.0.11 [April 27, 2001]
- Revised makefile.netbsd
-version 1.0.12beta1 [May 14, 2001]
- Test for Windows platform in pngconf.h when including malloc.h (Emmanuel Blot)
- Updated makefile.cygwin and handling of Cygwin's ALL_STATIC in pngconf.h
- Added some never-to-be-executed code in pnggccrd.c to quiet compiler warnings.
- Eliminated the png_error about apps using png_read|write_init(). Instead,
- libpng will reallocate the png_struct and info_struct if they are too small.
- This retains future binary compatibility for old applications written for
- libpng-0.88 and earlier.
-version 1.2.0beta1 [May 6, 2001]
- Bumped DLLNUM to 2.
- Re-enabled PNG_MNG_FEATURES_SUPPORTED and enabled PNG_ASSEMBLER_CODE_SUPPORTED
- by default.
- Added runtime selection of MMX features.
- Added png_set_strip_error_numbers function and related macros.
-version 1.2.0beta2 [May 7, 2001]
- Finished merging 1.2.0beta1 with version 1.0.11
- Added a check for attempts to read or write PLTE in grayscale PNG datastreams.
-version 1.2.0beta3 [May 17, 2001]
- Enabled user memory function by default.
- Modified png_create_struct so it passes user mem_ptr to user memory allocator.
- Increased png_mng_features flag from png_byte to png_uint_32.
- Bumped shared-library (so-number) and dll-number to 3.
-version 1.2.0beta4 [June 23, 2001]
- Check for missing profile length field in iCCP chunk and free chunk_data
- in case of truncated iCCP chunk.
- Bumped shared-library number to 3 in makefile.sgi and makefile.sggcc
- Bumped dll-number from 2 to 3 in makefile.cygwin
- Revised contrib/gregbook/rpng*-x.c to avoid a memory leak and to exit cleanly
- if user attempts to run it on an 8-bit display.
- Updated contrib/gregbook
- Use png_malloc instead of png_zalloc to allocate palette in pngset.c
- Updated makefile.ibmc
- Added some typecasts to eliminate gcc 3.0 warnings. Changed prototypes
- of png_write_oFFS width and height from png_uint_32 to png_int_32.
- Updated example.c
- Revised prototypes for png_debug_malloc and png_debug_free in pngtest.c
-version 1.2.0beta5 [August 8, 2001]
- Revised contrib/gregbook
- Revised makefile.gcmmx
- Revised pnggccrd.c to conditionally compile some thread-unsafe code only
- when PNG_THREAD_UNSAFE_OK is defined.
- Added tests to prevent pngwutil.c from writing a bKGD or tRNS chunk with
- value exceeding 2^bit_depth-1
- Revised makefile.sgi and makefile.sggcc
- Replaced calls to fprintf(stderr,...) with png_warning() in pnggccrd.c
- Removed restriction that do_invert_mono only operate on 1-bit opaque files
-
-version 1.2.0 [September 1, 2001]
- Changed a png_warning() to png_debug() in pnggccrd.c
- Fixed contrib/gregbook/rpng-x.c, rpng2-x.c to avoid crash with XFreeGC().
-version 1.2.1beta1 [October 19, 2001]
- Revised makefile.std in contrib/pngminus
- Include background_1 in png_struct regardless of gamma support.
- Revised makefile.netbsd and makefile.macosx, added makefile.darwin.
- Revised example.c to provide more details about using row_callback().
-version 1.2.1beta2 [October 25, 2001]
- Added type cast to each NULL appearing in a function call, except for
- WINCE functions.
- Added makefile.so9.
-version 1.2.1beta3 [October 27, 2001]
- Removed type casts from all NULLs.
- Simplified png_create_struct_2().
-version 1.2.1beta4 [November 7, 2001]
- Revised png_create_info_struct() and png_creat_struct_2().
- Added error message if png_write_info() was omitted.
- Type cast NULLs appearing in function calls when _NO_PROTO or
- PNG_TYPECAST_NULL is defined.
-version 1.2.1rc1 [November 24, 2001]
- Type cast NULLs appearing in function calls except when PNG_NO_TYPECAST_NULL
- is defined.
- Changed typecast of "size" argument to png_size_t in pngmem.c calls to
- the user malloc_fn, to agree with the prototype in png.h
- Added a pop/push operation to pnggccrd.c, to preserve Eflag (Maxim Sobolev)
- Updated makefile.sgi to recognize LIBPATH and INCPATH.
- Updated various makefiles so "make clean" does not remove previous major
- version of the shared library.
-version 1.2.1rc2 [December 4, 2001]
- Always allocate 256-entry internal palette, hist, and trans arrays, to
- avoid out-of-bounds memory reference caused by invalid PNG datastreams.
- Added a check for prefix_length > data_length in iCCP chunk handler.
-
-version 1.2.1 [December 7, 2001]
- None.
-version 1.2.2beta1 [February 22, 2002]
- Fixed a bug with reading the length of iCCP profiles (Larry Reeves).
- Revised makefile.linux, makefile.gcmmx, and makefile.sgi to generate
- libpng.a, libpng12.so (not libpng.so.3), and libpng12/png.h
- Revised makefile.darwin to remove "-undefined suppress" option.
- Added checks for gamma and chromaticity values over 21474.83, which exceed
- the limit for PNG unsigned 32-bit integers when encoded.
- Revised calls to png_create_read_struct() and png_create_write_struct()
- for simpler debugging.
- Revised png_zalloc() so zlib handles errors (uses PNG_FLAG_MALLOC_NULL_MEM_OK)
-version 1.2.2beta2 [February 23, 2002]
- Check chunk_length and idat_size for invalid (over PNG_MAX_UINT) lengths.
- Check for invalid image dimensions in png_get_IHDR.
- Added missing "fi;" in the install target of the SGI makefiles.
- Added install-static to all makefiles that make shared libraries.
- Always do gamma compensation when image is partially transparent.
-version 1.2.2beta3 [March 7, 2002]
- Compute background.gray and background_1.gray even when color_type is RGB
- in case image gets reduced to gray later.
- Modified shared-library makefiles to install pkgconfig/libpngNN.pc.
- Export (with PNGAPI) png_zalloc, png_zfree, and png_handle_as_unknown
- Removed unused png_write_destroy_info prototype from png.h
- Eliminated incorrect use of width_mmx from pnggccrd.c in pixel_bytes == 8 case
- Added install-shared target to all makefiles that make shared libraries.
- Stopped a double free of palette, hist, and trans when not using free_me.
- Added makefile.32sunu for Sun Ultra 32 and makefile.64sunu for Sun Ultra 64.
-version 1.2.2beta4 [March 8, 2002]
- Compute background.gray and background_1.gray even when color_type is RGB
- in case image gets reduced to gray later (Jason Summers).
- Relocated a misplaced /bin/rm in the "install-shared" makefile targets
- Added PNG_1_0_X macro which can be used to build a 1.0.x-compatible library.
-version 1.2.2beta5 [March 26, 2002]
- Added missing PNGAPI to several function definitions.
- Check for invalid bit_depth or color_type in png_get_IHDR(), and
- check for missing PLTE or IHDR in png_push_read_chunk() (Matthias Clasen).
- Revised iTXt support to accept NULL for lang and lang_key.
- Compute gamma for color components of background even when color_type is gray.
- Changed "()" to "{}" in scripts/libpng.pc.in.
- Revised makefiles to put png.h and pngconf.h only in $prefix/include/libpngNN
- Revised makefiles to make symlink to libpng.so.NN in addition to libpngNN.so
-version 1.2.2beta6 [March 31, 2002]
-version 1.0.13beta1 [March 31, 2002]
- Prevent png_zalloc() from trying to memset memory that it failed to acquire.
- Add typecasts of PNG_MAX_UINT in pngset_cHRM_fixed() (Matt Holgate).
- Ensure that the right function (user or default) is used to free the
- png_struct after an error in png_create_read_struct_2().
-version 1.2.2rc1 [April 7, 2002]
-version 1.0.13rc1 [April 7, 2002]
- Save the ebx register in pnggccrd.c (Sami Farin)
- Add "mem_ptr = png_ptr->mem_ptr" in png_destroy_write_struct() (Paul Gardner).
- Updated makefiles to put headers in include/libpng and remove old include/*.h.
-
-version 1.2.2 [April 15, 2002]
-version 1.0.13 [April 15, 2002]
- Revised description of png_set_filter() in libpng.3/libpng.txt.
- Revised makefile.netbsd and added makefile.neNNbsd and makefile.freebsd
-version 1.0.13patch01 [April 17, 2002]
-version 1.2.2patch01 [April 17, 2002]
- Changed ${PNGMAJ}.${PNGVER} bug to ${PNGVER} in makefile.sgi and makefile.sggcc
- Fixed VER -> PNGVER typo in makefile.macosx and added install-static to install
- Added install: target to makefile.32sunu and makefile.64sunu
-version 1.0.13patch03 [April 18, 2002]
-version 1.2.2patch03 [April 18, 2002]
- Revised 15 makefiles to link libpng.a to libpngNN.a and the include libpng
- subdirectory to libpngNN subdirectory without the full pathname.
- Moved generation of libpng.pc from "install" to "all" in 15 makefiles.
-version 1.2.3rc1 [April 28, 2002]
- Added install-man target to 15 makefiles (Dimitri Papadopolous-Orfanos).
- Added $(DESTDIR) feature to 24 makefiles (Tim Mooney)
- Fixed bug with $prefix, should be $(prefix) in makefile.hpux.
- Updated cygwin-specific portion of pngconf.h and revised makefile.cygwin
- Added a link from libpngNN.pc to libpng.pc in 15 makefiles.
- Added links from include/libpngNN/*.h to include/*.h in 24 makefiles.
- Revised makefile.darwin to make relative links without full pathname.
- Added setjmp() at the end of png_create_*_struct_2() in case user forgets
- to put one in their application.
- Restored png_zalloc() and png_zfree() prototypes to version 1.2.1 and
- removed them from module definition files.
-version 1.2.3rc2 [May 1, 2002]
- Fixed bug in reporting number of channels in pngget.c and pngset.c,
- that was introduced in version 1.2.2beta5.
- Exported png_zalloc(), png_zfree(), png_default_read(), png_default_write(),
- png_default_flush(), and png_push_fill_buffer() and included them in
- module definition files.
- Added "libpng.pc" dependency to the "install-shared" target in 15 makefiles.
-version 1.2.3rc3 [May 1, 2002]
- Revised prototype for png_default_flush()
- Remove old libpng.pc and libpngNN.pc before installing new ones.
-version 1.2.3rc4 [May 2, 2002]
- Typos in *.def files (png_default_read|write -> png_default_read|write_data)
- In makefiles, changed rm libpng.NN.pc to rm libpngNN.pc
- Added libpng-config and libpngNN-config and modified makefiles to install them.
- Changed $(MANPATH) to $(DESTDIR)$(MANPATH) in makefiles
- Added "Win32 DLL VB" configuration to projects/msvc/libpng.dsp
-version 1.2.3rc5 [May 11, 2002]
- Changed "error" and "message" in prototypes to "error_message" and
- "warning_message" to avoid namespace conflict.
- Revised 15 makefiles to build libpng-config from libpng-config-*.in
- Once more restored png_zalloc and png_zfree to regular nonexported form.
- Restored png_default_read|write_data, png_default_flush, png_read_fill_buffer
- to nonexported form, but with PNGAPI, and removed them from module def files.
-version 1.2.3rc6 [May 14, 2002]
- Removed "PNGAPI" from png_zalloc() and png_zfree() in png.c
- Changed "Gz" to "Gd" in projects/msvc/libpng.dsp and zlib.dsp.
- Removed leftover libpng-config "sed" script from four makefiles.
- Revised libpng-config creating script in 16 makefiles.
-
-version 1.2.3 [May 22, 2002]
- Revised libpng-config target in makefile.cygwin.
- Removed description of png_set_mem_fn() from documentation.
- Revised makefile.freebsd.
- Minor cosmetic changes to 15 makefiles, e.g., $(DI) = $(DESTDIR)/$(INCDIR).
- Revised projects/msvc/README.txt
- Changed -lpng to -lpngNN in LDFLAGS in several makefiles.
-version 1.2.4beta1 [May 24, 2002]
- Added libpng.pc and libpng-config to "all:" target in 16 makefiles.
- Fixed bug in 16 makefiles: $(DESTDIR)/$(LIBPATH) to $(DESTDIR)$(LIBPATH)
- Added missing "\" before closing double quote in makefile.gcmmx.
- Plugged various memory leaks; added png_malloc_warn() and png_set_text_2()
- functions.
-version 1.2.4beta2 [June 25, 2002]
- Plugged memory leak of png_ptr->current_text (Matt Holgate).
- Check for buffer overflow before reading CRC in pngpread.c (Warwick Allison)
- Added -soname to the loader flags in makefile.dec, makefile.sgi, and
- makefile.sggcc.
- Added "test-installed" target to makefile.linux, makefile.gcmmx,
- makefile.sgi, and makefile.sggcc.
-version 1.2.4beta3 [June 28, 2002]
- Plugged memory leak of row_buf in pngtest.c when there is a png_error().
- Detect buffer overflow in pngpread.c when IDAT is corrupted with extra data.
- Added "test-installed" target to makefile.32sunu, makefile.64sunu,
- makefile.beos, makefile.darwin, makefile.dec, makefile.macosx,
- makefile.solaris, makefile.hpux, makefile.hpgcc, and makefile.so9.
-version 1.2.4rc1 and 1.0.14rc1 [July 2, 2002]
- Added "test-installed" target to makefile.cygwin and makefile.sco.
- Revised pnggccrd.c to be able to back out version 1.0.x via PNG_1_0_X macro.
-
-version 1.2.4 and 1.0.14 [July 8, 2002]
- Changed png_warning() to png_error() when width is too large to process.
-version 1.2.4patch01 [July 20, 2002]
- Revised makefile.cygwin to use DLL number 12 instead of 13.
-version 1.2.5beta1 [August 6, 2002]
- Added code to contrib/gregbook/readpng2.c to ignore unused chunks.
- Replaced toucan.png in contrib/gregbook (it has been corrupt since 1.0.11)
- Removed some stray *.o files from contrib/gregbook.
- Changed png_error() to png_warning() about "Too much data" in pngpread.c
- and about "Extra compressed data" in pngrutil.c.
- Prevent png_ptr->pass from exceeding 7 in png_push_finish_row().
- Updated makefile.hpgcc
- Updated png.c and pnggccrd.c handling of return from png_mmx_support()
-version 1.2.5beta2 [August 15, 2002]
- Only issue png_warning() about "Too much data" in pngpread.c when avail_in
- is nonzero.
- Updated makefiles to install a separate libpng.so.3 with its own rpath.
-version 1.2.5rc1 and 1.0.15rc1 [August 24, 2002]
- Revised makefiles to not remove previous minor versions of shared libraries.
-version 1.2.5rc2 and 1.0.15rc2 [September 16, 2002]
- Revised 13 makefiles to remove "-lz" and "-L$(ZLIBLIB)", etc., from shared
- library loader directive.
- Added missing "$OBJSDLL" line to makefile.gcmmx.
- Added missing "; fi" to makefile.32sunu.
-version 1.2.5rc3 and 1.0.15rc3 [September 18, 2002]
- Revised libpng-config script.
-
-version 1.2.5 and 1.0.15 [October 3, 2002]
- Revised makefile.macosx, makefile.darwin, makefile.hpgcc, and makefile.hpux,
- and makefile.aix.
- Relocated two misplaced PNGAPI lines in pngtest.c
-version 1.2.6beta1 [October 22, 2002]
- Commented out warning about uninitialized mmx_support in pnggccrd.c.
- Changed "IBMCPP__" flag to "__IBMCPP__" in pngconf.h.
- Relocated two more misplaced PNGAPI lines in pngtest.c
- Fixed memory overrun bug in png_do_read_filler() with 16-bit datastreams,
- introduced in version 1.0.2.
- Revised makefile.macosx, makefile.dec, makefile.aix, and makefile.32sunu.
-version 1.2.6beta2 [November 1, 2002]
- Added libpng-config "--ldopts" output.
- Added "AR=ar" and "ARFLAGS=rc" and changed "ar rc" to "$(AR) $(ARFLAGS)"
- in makefiles.
-version 1.2.6beta3 [July 18, 2004]
- Reverted makefile changes from version 1.2.6beta2 and some of the changes
- from version 1.2.6beta1; these will be postponed until version 1.2.7.
- Version 1.2.6 is going to be a simple bugfix release.
- Changed the one instance of "ln -sf" to "ln -f -s" in each Sun makefile.
- Fixed potential overrun in pngerror.c by using strncpy instead of memcpy.
- Added "#!/bin/sh" at the top of configure, for recognition of the
- 'x' flag under Cygwin (Cosmin).
- Optimized vacuous tests that silence compiler warnings, in png.c (Cosmin).
- Added support for PNG_USER_CONFIG, in pngconf.h (Cosmin).
- Fixed the special memory handler for Borland C under DOS, in pngmem.c
- (Cosmin).
- Removed some spurious assignments in pngrutil.c (Cosmin).
- Replaced 65536 with 65536L, and 0xffff with 0xffffL, to silence warnings
- on 16-bit platforms (Cosmin).
- Enclosed shift op expressions in parentheses, to silence warnings (Cosmin).
- Used proper type png_fixed_point, to avoid problems on 16-bit platforms,
- in png_handle_sRGB() (Cosmin).
- Added compression_type to png_struct, and optimized the window size
- inside the deflate stream (Cosmin).
- Fixed definition of isnonalpha(), in pngerror.c and pngrutil.c (Cosmin).
- Fixed handling of unknown chunks that come after IDAT (Cosmin).
- Allowed png_error() and png_warning() to work even if png_ptr == NULL
- (Cosmin).
- Replaced row_info->rowbytes with row_bytes in png_write_find_filter()
- (Cosmin).
- Fixed definition of PNG_LIBPNG_VER_DLLNUM (Simon-Pierre).
- Used PNG_LIBPNG_VER and PNG_LIBPNG_VER_STRING instead of the hardcoded
- values in png.c (Simon-Pierre, Cosmin).
- Initialized png_libpng_ver[] with PNG_LIBPNG_VER_STRING (Simon-Pierre).
- Replaced PNG_LIBPNG_VER_MAJOR with PNG_LIBPNG_VER_DLLNUM in png.rc
- (Simon-Pierre).
- Moved the definition of PNG_HEADER_VERSION_STRING near the definitions
- of the other PNG_LIBPNG_VER_... symbols in png.h (Cosmin).
- Relocated #ifndef PNGAPI guards in pngconf.h (Simon-Pierre, Cosmin).
- Updated scripts/makefile.vc(a)win32 (Cosmin).
- Updated the MSVC project (Simon-Pierre, Cosmin).
- Updated the Borland C++ Builder project (Cosmin).
- Avoided access to asm_flags in pngvcrd.c, if PNG_1_0_X is defined (Cosmin).
- Commented out warning about uninitialized mmx_support in pngvcrd.c (Cosmin).
- Removed scripts/makefile.bd32 and scripts/pngdef.pas (Cosmin).
- Added extra guard around inclusion of Turbo C memory headers, in pngconf.h
- (Cosmin).
- Renamed projects/msvc/ to projects/visualc6/, and projects/borland/ to
- projects/cbuilder5/ (Cosmin).
- Moved projects/visualc6/png32ms.def to scripts/pngw32.def,
- and projects/visualc6/png.rc to scripts/pngw32.rc (Cosmin).
- Added projects/visualc6/pngtest.dsp; removed contrib/msvctest/ (Cosmin).
- Changed line endings to DOS style in cbuilder5 and visualc6 files, even
- in the tar.* distributions (Cosmin).
- Updated contrib/visupng/VisualPng.dsp (Cosmin).
- Updated contrib/visupng/cexcept.h to version 2.0.0 (Cosmin).
- Added a separate distribution with "configure" and supporting files (Junichi).
-version 1.2.6beta4 [July 28, 2004]
- Added user ability to change png_size_t via a PNG_SIZE_T macro.
- Added png_sizeof() and png_convert_size() functions.
- Added PNG_SIZE_MAX (maximum value of a png_size_t variable.
- Added check in png_malloc_default() for (size_t)size != (png_uint_32)size
- which would indicate an overflow.
- Changed sPLT failure action from png_error to png_warning and abandon chunk.
- Changed sCAL and iCCP failures from png_error to png_warning and abandon.
- Added png_get_uint_31(png_ptr, buf) function.
- Added PNG_UINT_32_MAX macro.
- Renamed PNG_MAX_UINT to PNG_UINT_31_MAX.
- Made png_zalloc() issue a png_warning and return NULL on potential
- overflow.
- Turn on PNG_NO_ZALLOC_ZERO by default in version 1.2.x
- Revised "clobber list" in pnggccrd.c so it will compile under gcc-3.4.
- Revised Borland portion of png_malloc() to return NULL or issue
- png_error() according to setting of PNG_FLAG_MALLOC_NULL_MEM_OK.
- Added PNG_NO_SEQUENTIAL_READ_SUPPORTED macro to conditionally remove
- sequential read support.
- Added some "#if PNG_WRITE_SUPPORTED" blocks.
- #ifdef'ed out some redundancy in png_malloc_default().
- Use png_malloc instead of png_zalloc to allocate the pallete.
-version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004]
- Fixed buffer overflow vulnerability in png_handle_tRNS()
- Fixed integer arithmetic overflow vulnerability in png_read_png().
- Fixed some harmless bugs in png_handle_sBIT, etc, that would cause
- duplicate chunk types to go undetected.
- Fixed some timestamps in the -config version
- Rearranged order of processing of color types in png_handle_tRNS().
- Added ROWBYTES macro to calculate rowbytes without integer overflow.
- Updated makefile.darwin and removed makefile.macosx from scripts directory.
- Imposed default one million column, one-million row limits on the image
- dimensions, and added png_set_user_limits() function to override them.
- Revised use of PNG_SET_USER_LIMITS_SUPPORTED macro.
- Fixed wrong cast of returns from png_get_user_width|height_max().
- Changed some "keep the compiler happy" from empty statements to returns,
- Revised libpng.txt to remove 1.2.x stuff from the 1.0.x distribution
-version 1.0.16rc2 and 1.2.6rc2 [August 7, 2004]
- Revised makefile.darwin and makefile.solaris. Removed makefile.macosx.
- Revised pngtest's png_debug_malloc() to use png_malloc() instead of
- png_malloc_default() which is not supposed to be exported.
- Fixed off-by-one error in one of the conversions to PNG_ROWBYTES() in
- pngpread.c. Bug was introduced in 1.2.6rc1.
- Fixed bug in RGB to RGBX transformation introduced in 1.2.6rc1.
- Fixed old bug in RGB to Gray transformation.
- Fixed problem with 64-bit compilers by casting arguments to abs()
- to png_int_32.
- Changed "ln -sf" to "ln -f -s" in three makefiles (solaris, sco, so9).
- Changed "HANDLE_CHUNK_*" to "PNG_HANDLE_CHUNK_*" (Cosmin)
- Added "-@/bin/rm -f $(DL)/$(LIBNAME).so.$(PNGMAJ)" to 15 *NIX makefiles.
- Added code to update the row_info->colortype in png_do_read_filler() (MSB).
-version 1.0.16rc3 and 1.2.6rc3 [August 9, 2004]
- Eliminated use of "abs()" in testing cHRM and gAMA values, to avoid
- trouble with some 64-bit compilers. Created PNG_OUT_OF_RANGE() macro.
- Revised documentation of png_set_keep_unknown_chunks().
- Check handle_as_unknown status in pngpread.c, as in pngread.c previously.
- Moved "PNG_HANDLE_CHUNK_*" macros out of PNG_INTERNAL section of png.h
- Added "rim" definitions for CONST4 and CONST6 in pnggccrd.c
-version 1.0.16rc4 and 1.2.6rc4 [August 10, 2004]
- Fixed mistake in pngtest.c introduced in 1.2.6rc2 (declaration of
- "pinfo" was out of place).
-version 1.0.16rc5 and 1.2.6rc5 [August 10, 2004]
- Moved "PNG_HANDLE_CHUNK_*" macros out of PNG_ASSEMBLER_CODE_SUPPORTED
- section of png.h where they were inadvertently placed in version rc3.
-
-version 1.2.6 and 1.0.16 [August 15, 2004]
- Revised pngtest so memory allocation testing is only done when PNG_DEBUG==1.
-version 1.2.7beta1 [August 26, 2004]
- Removed unused pngasmrd.h file.
- Removed references to uu.net for archived files. Added references to
- PNG Spec (second edition) and the PNG ISO/IEC Standard.
- Added "test-dd" target in 15 makefiles, to run pngtest in DESTDIR.
- Fixed bug with "optimized window size" in the IDAT datastream, that
- causes libpng to write PNG files with incorrect zlib header bytes.
-version 1.2.7beta2 [August 28, 2004]
- Fixed bug with sCAL chunk and big-endian machines (David Munro).
- Undid new code added in 1.2.6rc2 to update the color_type in
- png_set_filler().
- Added png_set_add_alpha() that updates color type.
-version 1.0.17rc1 and 1.2.7rc1 [September 4, 2004]
- Revised png_set_strip_filler() to not remove alpha if color_type has alpha.
-
-version 1.2.7 and 1.0.17 [September 12, 2004]
- Added makefile.hp64
- Changed projects/msvc/png32ms.def to scripts/png32ms.def in makefile.cygwin
-version 1.2.8beta1 [November 1, 2004]
- Fixed bug in png_text_compress() that would fail to complete a large block.
- Fixed bug, introduced in libpng-1.2.7, that overruns a buffer during
- strip alpha operation in png_do_strip_filler().
- Added PNG_1_2_X definition in pngconf.h
- #ifdef out png_info_init in png.c and png_read_init in pngread.c (as of 1.3.0)
-version 1.2.8beta2 [November 2, 2004]
- Reduce color_type to a nonalpha type after strip alpha operation in
- png_do_strip_filler().
-version 1.2.8beta3 [November 3, 2004]
- Revised definitions of PNG_MAX_UINT_32, PNG_MAX_SIZE, and PNG_MAXSUM
-version 1.2.8beta4 [November 12, 2004]
- Fixed (again) definition of PNG_LIBPNG_VER_DLLNUM in png.h (Cosmin).
- Added PNG_LIBPNG_BUILD_PRIVATE in png.h (Cosmin).
- Set png_ptr->zstream.data_type to Z_BINARY, to avoid unnecessary detection
- of data type in deflate (Cosmin).
- Deprecated but continue to support SPECIALBUILD and PRIVATEBUILD in favor of
- PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.
-version 1.2.8beta5 [November 20, 2004]
- Use png_ptr->flags instead of png_ptr->transformations to pass
- PNG_STRIP_ALPHA info to png_do_strip_filler(), to preserve ABI
- compatibility.
- Revised handling of SPECIALBUILD, PRIVATEBUILD,
- PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.
-version 1.2.8rc1 [November 24, 2004]
- Moved handling of BUILD macros from pngconf.h to png.h
- Added definition of PNG_LIBPNG_BASE_TYPE in png.h, inadvertently
- omitted from beta5.
- Revised scripts/pngw32.rc
- Despammed mailing addresses by masking "@" with "at".
- Inadvertently installed a supposedly faster test version of pngrutil.c
-version 1.2.8rc2 [November 26, 2004]
- Added two missing "\" in png.h
- Change tests in pngread.c and pngpread.c to
- if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
- png_do_read_transformations(png_ptr);
-version 1.2.8rc3 [November 28, 2004]
- Reverted pngrutil.c to version libpng-1.2.8beta5.
- Added scripts/makefile.elf with supporting code in pngconf.h for symbol
- versioning (John Bowler).
-version 1.2.8rc4 [November 29, 2004]
- Added projects/visualc7 (Simon-pierre).
-version 1.2.8rc5 [November 29, 2004]
- Fixed new typo in scripts/pngw32.rc
-
-version 1.2.8 [December 3, 2004]
- Removed projects/visualc7, added projects/visualc71.
-
-version 1.2.9beta1 [February 21, 2006]
-
- Initialized some structure members in pngwutil.c to avoid gcc-4.0.0 complaints
- Revised man page and libpng.txt to make it clear that one should not call
- png_read_end or png_write_end after png_read_png or png_write_png.
- Updated references to png-mng-implement mailing list.
- Fixed an incorrect typecast in pngrutil.c
- Added PNG_NO_READ_SUPPORTED conditional for making a write-only library.
- Added PNG_NO_WRITE_INTERLACING_SUPPORTED conditional.
- Optimized alpha-inversion loops in pngwtran.c
- Moved test for nonzero gamma outside of png_build_gamma_table() in pngrtran.c
- Make sure num_trans is <= 256 before copying data in png_set_tRNS().
- Make sure num_palette is <= 256 before copying data in png_set_PLTE().
- Interchanged order of write_swap_alpha and write_invert_alpha transforms.
- Added parentheses in the definition of PNG_LIBPNG_BUILD_TYPE (Cosmin).
- Optimized zlib window flag (CINFO) in contrib/pngsuite/*.png (Cosmin).
- Updated scripts/makefile.bc32 for Borland C++ 5.6 (Cosmin).
- Exported png_get_uint_32, png_save_uint_32, png_get_uint_16, png_save_uint_16,
- png_get_int_32, png_save_int_32, png_get_uint_31 (Cosmin).
- Added type cast (png_byte) in png_write_sCAL() (Cosmin).
- Fixed scripts/makefile.cygwin (Christian Biesinger, Cosmin).
- Default iTXt support was inadvertently enabled.
-
-version 1.2.9beta2 [February 21, 2006]
-
- Check for png_rgb_to_gray and png_gray_to_rgb read transformations before
- checking for png_read_dither in pngrtran.c
- Revised checking of chromaticity limits to accommodate extended RGB
- colorspace (John Denker).
- Changed line endings in some of the project files to CRLF, even in the
- "Unix" tar distributions (Cosmin).
- Made png_get_int_32 and png_save_int_32 always available (Cosmin).
- Updated scripts/pngos2.def, scripts/pngw32.def and projects/wince/png32ce.def
- with the newly exported functions.
- Eliminated distributions without the "configure" script.
- Updated INSTALL instructions.
-
-version 1.2.9beta3 [February 24, 2006]
-
- Fixed CRCRLF line endings in contrib/visupng/VisualPng.dsp
- Made libpng.pc respect EXEC_PREFIX (D. P. Kreil, J. Bowler)
- Removed reference to pngasmrd.h from Makefile.am
- Renamed CHANGES to ChangeLog.
- Renamed LICENSE to COPYING.
- Renamed ANNOUNCE to NEWS.
- Created AUTHORS file.
-
-version 1.2.9beta4 [March 3, 2006]
-
- Changed definition of PKGCONFIG from $prefix/lib to $libdir in configure.ac
- Reverted to filenames LICENSE and ANNOUNCE; removed AUTHORS and COPYING.
- Removed newline from the end of some error and warning messages.
- Removed test for sqrt() from configure.ac and configure.
- Made swap tables in pngtrans.c PNG_CONST (Carlo Bramix).
- Disabled default iTXt support that was inadvertently enabled in
- libpng-1.2.9beta1.
- Added "OS2" to list of systems that don't need underscores, in pnggccrd.c
- Removed libpng version and date from *.c files.
-
-version 1.2.9beta5 [March 4, 2006]
- Removed trailing blanks from source files.
- Put version and date of latest change in each source file, and changed
- copyright year accordingly.
- More cleanup of configure.ac, Makefile.ac, and associated scripts.
- Restored scripts/makefile.elf which was inadvertently deleted.
-
-version 1.2.9beta6 [March 6, 2006]
- Fixed typo (RELEASE) in configuration files.
-
-version 1.2.9beta7 [March 7, 2006]
- Removed libpng.vers and libpng.sym from libpng12_la_SOURCES in Makefile.am
- Fixed inconsistent #ifdef's around png_sig_bytes() and png_set_sCAL_s()
- in png.h.
- Updated makefile.elf as suggested by debian.
- Made cosmetic changes to some makefiles, adding LN_SF and other macros.
- Made some makefiles accept "exec_prefix".
-
-version 1.2.9beta8 [March 9, 2006]
- Fixed some "#if defined (..." which should be "#if defined(..."
- Bug introduced in libpng-1.2.8.
- Fixed inconsistency in definition of png_default_read_data()
- Restored blank that was lost from makefile.sggcc "clean" target in beta7.
- Revised calculation of "current" and "major" for irix in ltmain.sh
- Changed "mkdir" to "MKDIR_P" in some makefiles.
- Separated PNG_EXPAND and PNG_EXPAND_tRNS.
- Added png_set_expand_gray_1_2_4_to_8() and deprecated
- png_set_gray_1_2_4_to_8() which also expands tRNS to alpha.
-
-version 1.2.9beta9 [March 10, 2006]
- Include "config.h" in pngconf.h when available.
- Added some checks for NULL png_ptr or NULL info_ptr (timeless)
-
-version 1.2.9beta10 [March 20, 2006]
- Removed extra CR from contrib/visualpng/VisualPng.dsw (Cosmin)
- Made pnggccrd.c PIC-compliant (Christian Aichinger).
- Added makefile.mingw (Wolfgang Glas).
- Revised pngconf.h MMX checking.
-
-version 1.2.9beta11 [March 22, 2006]
- Fixed out-of-order declaration in pngwrite.c that was introduced in beta9
- Simplified some makefiles by using LIBSO, LIBSOMAJ, and LIBSOVER macros.
-
-version 1.2.9rc1 [March 31, 2006]
- Defined PNG_USER_PRIVATEBUILD when including "pngusr.h" (Cosmin).
- Removed nonsensical assertion check from pngtest.c (Cosmin).
-
-version 1.2.9 [April 14, 2006]
- Revised makefile.beos and added "none" selector in ltmain.sh
-
-version 1.2.10beta1 [April 15, 2006]
- Renamed "config.h" to "png_conf.h" and revised Makefile.am to add
- -DPNG_BUILDING_LIBPNG to compile directive, and modified pngconf.h
- to include png_conf.h only when PNG_BUILDING_LIBPNG is defined.
-
-version 1.2.10beta2 [April 15, 2006]
- Manually updated Makefile.in and configure. Changed png_conf.h.in
- back to config.h.
-
-version 1.2.10beta3 [April 15, 2006]
- Change png_conf.h back to config.h in pngconf.h.
-
-version 1.2.10beta4 [April 16, 2006]
- Change PNG_BUILDING_LIBPNG to PNG_CONFIGURE_LIBPNG in config/Makefile*.
-
-version 1.2.10beta5 [April 16, 2006]
- Added a configure check for compiling assembler code in pnggccrd.c
-
-version 1.2.10beta6 [April 17, 2006]
- Revised the configure check for pnggccrd.c
- Moved -DPNG_CONFIGURE_LIBPNG into @LIBPNG_DEFINES@
- Added @LIBPNG_DEFINES@ to arguments when building libpng.sym
-
-version 1.2.10beta7 [April 18, 2006]
- Change "exec_prefix=$prefix" to "exec_prefix=$(prefix)" in makefiles.
-
-version 1.2.10rc1 [April 19, 2006]
- Ensure pngconf.h doesn't define both PNG_USE_PNGGCCRD and PNG_USE_PNGVCRD
- Fixed "LN_FS" typo in makefile.sco and makefile.solaris.
-
-version 1.2.10rc2 [April 20, 2006]
- Added a backslash between -DPNG_CONFIGURE_LIBPNG and -DPNG_NO_ASSEMBLER_CODE
- in configure.ac and configure
- Made the configure warning about versioned symbols less arrogant.
-
-version 1.2.10rc3 [April 21, 2006]
- Added a note in libpng.txt that png_set_sig_bytes(8) can be used when
- writing an embedded PNG without the 8-byte signature.
- Revised makefiles and configure to avoid making links to libpng.so.*
-
-version 1.2.10 [April 23, 2006]
- Reverted configure to "rc2" state.
-
-version 1.2.11beta1 [May 31, 2006]
- scripts/libpng.pc.in contained "configure" style version info and would
- not work with makefiles.
- The shared-library makefiles were linking to libpng.so.0 instead of
- libpng.so.3 compatibility as the library.
-
-version 1.2.11beta2 [June 2, 2006]
- Increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
- buffer overflow.
- Fixed bug in example.c (png_set_palette_rgb -> png_set_palette_to_rgb)
-
-version 1.2.11beta3 [June 5, 2006]
- Prepended "#! /bin/sh" to ltmail.sh and contrib/pngminus/*.sh (Cosmin).
- Removed the accidental leftover Makefile.in~ (Cosmin).
- Avoided potential buffer overflow and optimized buffer in
- png_write_sCAL(), png_write_sCAL_s() (Cosmin).
- Removed the include directories and libraries from CFLAGS and LDFLAGS
- in scripts/makefile.gcc (Nelson A. de Oliveira, Cosmin).
-
-version 1.2.11beta4 [June 6, 2006]
- Allow zero-length IDAT chunks after the entire zlib datastream, but not
- after another intervening chunk type.
-
-version 1.0.19rc1, 1.2.11rc1 [June 13, 2006]
- Deleted extraneous square brackets from [config.h] in configure.ac
-
-version 1.0.19rc2, 1.2.11rc2 [June 14, 2006]
- Added prototypes for PNG_INCH_CONVERSIONS functions to png.h
- Revised INSTALL and autogen.sh
- Fixed typo in several makefiles (-W1 should be -Wl)
- Added typedef for png_int_32 and png_uint_32 on 64-bit systems.
-
-version 1.0.19rc3, 1.2.11rc3 [June 15, 2006]
- Removed the new typedefs for 64-bit systems (delay until version 1.4.0)
- Added one zero element to png_gamma_shift[] array in pngrtran.c to avoid
- reading out of bounds.
-
-version 1.0.19rc4, 1.2.11rc4 [June 15, 2006]
- Really removed the new typedefs for 64-bit systems.
-
-version 1.0.19rc5, 1.2.11rc5 [June 22, 2006]
- Removed png_sig_bytes entry from scripts/pngw32.def
-
-version 1.0.19, 1.2.11 [June 26, 2006]
- None.
-
-version 1.0.20, 1.2.12 [June 27, 2006]
- Really increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
- buffer overflow.
-
-version 1.2.13beta1 [October 2, 2006]
- Removed AC_FUNC_MALLOC from configure.ac
- Work around Intel-Mac compiler bug by setting PNG_NO_MMX_CODE in pngconf.h
- Change "logical" to "bitwise" throughout documentation.
- Detect and fix attempt to write wrong iCCP profile length.
-
-version 1.0.21, 1.2.13 [November 14, 2006]
- Fix potential buffer overflow in sPLT chunk handler.
- Fix Makefile.am to not try to link to noexistent files.
- Check all exported functions for NULL png_ptr.
-
-version 1.2.14beta1 [November 17, 2006]
- Relocated three misplaced tests for NULL png_ptr.
- Built Makefile.in with automake-1.9.6 instead of 1.9.2.
- Build configure with autoconf-2.60 instead of 2.59
-
-version 1.2.14beta2 [November 17, 2006]
- Added some typecasts in png_zalloc().
-
-version 1.2.14rc1 [November 20, 2006]
- Changed "strtod" to "png_strtod" in pngrutil.c
-
-version 1.0.22, 1.2.14 [November 27, 2006]
- Added missing "$(srcdir)" in Makefile.am and Makefile.in
-
-version 1.2.15beta1 [December 3, 2006]
- Generated configure with autoconf-2.61 instead of 2.60
- Revised configure.ac to update libpng.pc and libpng-config.
-
-version 1.2.15beta2 [December 3, 2006]
- Always export MMX asm functions, just stubs if not building pnggccrd.c
-
-version 1.2.15beta3 [December 4, 2006]
- Add "png_bytep" typecast to profile while calculating length in pngwutil.c
-
-version 1.2.15beta4 [December 7, 2006]
- Added scripts/CMakeLists.txt
- Changed PNG_NO_ASSEMBLER_CODE to PNG_NO_MMX_CODE in scripts, like 1.4.0beta
-
-version 1.2.15beta5 [December 7, 2006]
- Changed some instances of PNG_ASSEMBLER_* to PNG_MMX_* in pnggccrd.c
- Revised scripts/CMakeLists.txt
-
-version 1.2.15beta6 [December 13, 2006]
- Revised scripts/CMakeLists.txt and configure.ac
-
-version 1.2.15rc1 [December 18, 2006]
- Revised scripts/CMakeLists.txt
-
-version 1.2.15rc2 [December 21, 2006]
- Added conditional #undef jmpbuf in pngtest.c to undo #define in AIX headers.
- Added scripts/makefile.nommx
-
-version 1.2.15rc3 [December 25, 2006]
- Fixed shared library numbering error that was introduced in 1.2.15beta6.
-
-version 1.2.15rc4 [December 27, 2006]
- Fixed handling of rgb_to_gray when png_ptr->color.gray isn't set.
-
-version 1.2.15rc5 [December 31, 2006]
- Revised handling of rgb_to_gray.
-
-version 1.0.23, 1.2.15 [January 5, 2007]
- Added some (unsigned long) typecasts in pngtest.c to avoid printing errors.
-
-version 1.2.16beta1 [January 6, 2007]
- Fix bugs in makefile.nommx
-
-version 1.2.16beta2 [January 16, 2007]
- Revised scripts/CMakeLists.txt
-
-version 1.0.24, 1.2.16 [January 31, 2007]
- No changes.
-
-version 1.2.17beta1 [March 6, 2007]
- Revised scripts/CMakeLists.txt to install both shared and static libraries.
- Deleted a redundant line from pngset.c.
-
-version 1.2.17beta2 [April 26, 2007]
- Relocated misplaced test for png_ptr == NULL in pngpread.c
- Change "==" to "&" for testing PNG_RGB_TO_GRAY_ERR & PNG_RGB_TO_GRAY_WARN
- flags.
- Changed remaining instances of PNG_ASSEMBLER_* to PNG_MMX_*
- Added pngerror() when write_IHDR fails in deflateInit2().
- Added "const" to some array declarations.
- Mention examples of libpng usage in the libpng*.txt and libpng.3 documents.
-
-version 1.2.17rc1 [May 4, 2007]
- No changes.
-
-version 1.2.17rc2 [May 8, 2007]
- Moved several PNG_HAVE_* macros out of PNG_INTERNAL because applications
- calling set_unknown_chunk_location() need them.
- Changed transformation flag from PNG_EXPAND_tRNS to PNG_EXPAND in
- png_set_expand_gray_1_2_4_to_8().
- Added png_ptr->unknown_chunk to hold working unknown chunk data, so it
- can be free'ed in case of error. Revised unknown chunk handling in
- pngrutil.c and pngpread.c to use this structure.
-
-version 1.2.17rc3 [May 8, 2007]
- Revised symbol-handling in configure script.
-
-version 1.2.17rc4 [May 10, 2007]
- Revised unknown chunk handling to avoid storing unknown critical chunks.
-
-version 1.0.25 [May 15, 2007]
-version 1.2.17 [May 15, 2007]
- Added "png_ptr->num_trans=0" before error return in png_handle_tRNS,
- to eliminate a vulnerability (CVE-2007-2445, CERT VU#684664)
-
-version 1.0.26 [May 15, 2007]
-version 1.2.18 [May 15, 2007]
- Reverted the libpng-1.2.17rc3 change to symbol-handling in configure script
-
-version 1.2.19beta1 [May 18, 2007]
- Changed "const static" to "static PNG_CONST" everywhere, mostly undoing
- change of libpng-1.2.17beta2. Changed other "const" to "PNG_CONST"
- Changed some handling of unused parameters, to avoid compiler warnings.
- "if (unused == NULL) return;" becomes "unused = unused".
-
-version 1.2.19beta2 [May 18, 2007]
- Only use the valid bits of tRNS value in png_do_expand() (Brian Cartier)
-
-version 1.2.19beta3 [May 19, 2007]
- Add some "png_byte" typecasts in png_check_keyword() and write new_key
- instead of key in zTXt chunk (Kevin Ryde).
-
-version 1.2.19beta4 [May 21, 2007]
- Add png_snprintf() function and use it in place of sprint() for improved
- defense against buffer overflows.
-
-version 1.2.19beta5 [May 21, 2007]
- Fixed png_handle_tRNS() to only use the valid bits of tRNS value.
- Changed handling of more unused parameters, to avoid compiler warnings.
- Removed some PNG_CONST in pngwutil.c to avoid compiler warnings.
-
-version 1.2.19beta6 [May 22, 2007]
- Added some #ifdef PNG_MMX_CODE_SUPPORTED where needed in pngvcrd.c
- Added a special "_MSC_VER" case that defines png_snprintf to _snprintf
-
-version 1.2.19beta7 [May 22, 2007]
- Squelched png_squelch_warnings() in pnggccrd.c and added an
- #ifdef PNG_MMX_CODE_SUPPORTED block around the declarations that caused
- the warnings that png_squelch_warnings was squelching.
-
-version 1.2.19beta8 [May 22, 2007]
- Removed __MMX__ from test in pngconf.h.
-
-version 1.2.19beta9 [May 23, 2007]
- Made png_squelch_warnings() available via PNG_SQUELCH_WARNINGS macro.
- Revised png_squelch_warnings() so it might work.
- Updated makefile.sgcc and makefile.solaris; added makefile.solaris-x86.
-
-version 1.2.19beta10 [May 24, 2007]
- Resquelched png_squelch_warnings(), use "__attribute__((used))" instead.
-
-version 1.2.19beta11 [May 28, 2007]
- Return 0 from png_get_sPLT() and png_get_unknown_chunks() if png_ptr is NULL;
- changed three remaining instances of png_strcpy() to png_strncpy() (David
- Hill).
- Make test for NULL row_buf at the beginning of png_do_read_transformations
- unconditional.
-
-version 1.2.19beta12 [May 28, 2007]
- Revised pnggccrd.c.
-
-version 1.2.19beta13 [June 14, 2007]
- Prefer PNG_USE_PNGVCRD when _MSC_VER is defined in pngconf.h
-
-version 1.2.19beta14 [June 16, 2007]
- Fix bug with handling of 16-bit transparency, introduced in 1.2.19beta2
-
-version 1.2.19beta15 [June 17, 2007]
- Revised pnggccrd.c.
-
-version 1.2.19beta16 [June 18, 2007]
- Revised pnggccrd.c again.
- Updated contrib/gregbook.
- Changed '#include "pnggccrd.c"' to 'include "$srcdir/pnggccrd.c"'
- in configure.ac
-
-version 1.2.19beta17 [June 19, 2007]
- Revised many of the makefiles, to set -DPNG_NO_MMX_CODE where needed
- and to not use -O3 unless -DPNG_NO_MMX_CODE is also set.
-
-version 1.2.19beta18 [June 23, 2007]
- Replaced some C++ style comments with C style comments in pnggccrd.c.
- Copied optimized C code from pnggccrd.c to pngrutil.c, removed dependency
- on pnggccrd.o from many makefiles.
- Added sl and dylib to list of extensions be installed by Makefile.am
-
-version 1.2.19beta19 [June 28, 2007]
- Fixed testing PNG_RGB_TO_GRAY_ERR & PNG_RGB_TO_GRAY_WARN in pngrtran.c
- More cleanup of pnggccrd.c and pngvcrd.c
-
-version 1.2.19beta20 [June 29, 2007]
- Rebuilt Makefile.in and configure using libtool-1.5.24.
- Fixed typo in pnggccrd.c
-
-version 1.2.19beta21 [June 30, 2007]
- More revision of pnggccrd.c
- Added "test" target to Makefile.in and Makefile.am
-
-version 1.2.19beta22 [July 3, 2007]
- Added info about pngrutil/pnggccrd/pngvcrd to png_get_header_version()
- Fix type definition of dummy_value_a, b in pnggccrd.c
-
-version 1.2.19beta23 [July 10, 2007]
- Revert change to type definition of dummy_value_a, b in pnggccrd.c
- Make sure __PIC__ is defined in pnggccrd.c when PIC is defined.
- Require gcc-4.1 or better to use PNG_HAVE_MMX_FILTER_ROW on x86_64 platforms
-
-version 1.2.19beta24 [July 14, 2007]
- Added PNG_NO_READ_FILTER, PNG_NO_WRITE_FILTER, PNG_NO_WARNING macros.
- Added contrib/pngminim to demonstrate building minimal encoder and decoder
-
-version 1.2.19beta25 [July 15, 2007]
- Removed the new PNG_NO_READ_FILTER macro since it would make the library
- unable to read valid PNG files, and filtering is at the heart of the
- PNG format.
-
-version 1.2.19beta26 [July 16, 2007]
- Changed "png_free(str)" to "png_free(png_ptr,str)" in pngrutil.c WinCE
- code (Yves Piguet). This bug was introduced in libpng-1.2.14.
- Updated scripts/CMakeLists.txt
- Relocated a misplaced #endif in pnggccrd.c
-
-version 1.2.19beta27 [July 17, 2007]
- Fixed incorrect stride and number of bytes copied (was 4 instead of
- 6 bytes) in the cleanup loop of pnggccrd.c and pngvcrd.c for handling
- the end of 48-bit interlaced rows (Glenn R-P).
-
-version 1.2.19beta28 [July 19, 2007]
- Removed requirement for gcc-4.1 or better to use PNG_HAVE_MMX_FILTER_ROW
- on x86_64 platforms
- Added png_warning() in pngrutil.c for short iCCP, iTXt, sPLT, or zTXT chunks.
- Revised pngtest.c so warnings are displayed regardless of PNG_NO_STDIO.
-
-version 1.2.19beta29 [July 20, 2007]
- Fix typo in pnggccrd.c (%%eax should be %%ax in secondloop48)
-
-version 1.2.19beta30 [July 26, 2007]
- Revised pnggccrd.c
-
-version 1.2.19beta31 [July 27, 2007]
- Fix typos in pnggccrd.c
-
-version 1.0.27rc1 and 1.2.19rc1 [July 31, 2007]
- Disable PNG_MMX_CODE_SUPPORTED when PNG_ASSEMBLER_CODE_SUPPORTED is off.
- Enable PNG_MMX_READ_FILTER_* by default, except when gcc-3.x is being
- used (they were inadvertently disabled in libpng-1.2.19beta23).
- Fix some debugging statements in pnggccrd.c and pngrutil.c
- Added information about disabling the MMX code in libpng documentation.
-
-version 1.0.27rc2 and 1.2.19rc2 [August 4, 2007]
- Removed some "#if 0" blocks.
- Made a global struct local in pngvcrd.c to make it thread safe.
- Issue a png_error() if application attempts to transform a row tht
- has not been initialized.
-
-version 1.0.27rc3 and 1.2.19rc3 [August 9, 2007]
- Slightly revised pngvcrd.c
-
-version 1.0.27rc4 and 1.2.19rc4 [August 9, 2007]
- Revised pnggccrd.c debugging change of rc1, which was broken.
- Revised scripts/CMakeLists.txt
- Change default to PNG_NO_GLOBAL_ARRAYS for MSVC.
- Turn off PNG_FLAG_ROW_INIT flag when setting transforms that expand pixels.
-
-version 1.0.27rc5 and 1.2.19rc5 [August 10, 2007]
- Fix typo (missing '"') in pnggccrd.c
- Revise handling of png_strtod in recent versions of WINCE
-
-version 1.0.27rc6 and 1.2.19rc6 [August 15, 2007]
- Fix typo (missing ',') in contrib/gregbook/readpng2.c
- Undid row initialization error exit added to rc2 and rc4.
-
-version 1.0.27 and 1.2.19 [August 18, 2007]
- Conditionally restored row initialization error exit.
-
-version 1.2.20beta01 [August 19, 2007]
- Fixed problem with compiling pnggccrd.c on Intel-Apple platforms.
- Changed png_malloc() to png_malloc_warn() in png_set_sPLT().
- Added PNG_NO_ERROR_TEXT feature, with demo in contrib/pngminim
- Removed define PNG_WARN_UNINITIALIZED_ROW 1 /* 0: warning; 1: error */
- because it caused some trouble.
-
-version 1.2.20beta02 [August 20, 2007]
- Avoid compiling pnggccrd.c on Intel-Apple platforms.
-
-version 1.2.20beta03 [August 20, 2007]
- Added "/D PNG_NO_MMX_CODE" to the non-mmx builds of projects/visualc6
- and visualc71.
-
-version 1.2.20beta04 [August 21, 2007]
- Revised pngvcrd.c for improved efficiency (Steve Snyder).
-
-version 1.2.20rc1 [August 23, 2007]
- Revised pngconf.h to set PNG_NO_MMX_CODE for gcc-3.x compilers.
-
-version 1.2.20rc2 [August 27, 2007]
- Revised scripts/CMakeLists.txt
- Revised #ifdefs to ensure one and only one of pnggccrd.c, pngvcrd.c,
- or part of pngrutil.c is selected.
-
-version 1.2.20rc3 [August 30, 2007]
- Remove a little more code in pngwutil.c when PNG_NO_WRITE_FILTER is selected.
- Added /D _CRT_SECURE_NO_WARNINGS to visual6c and visualc71 projects.
- Compile png_mmx_support() in png.c even when PNG_NO_MMX_CODE is defined.
- Restored a "superfluous" #ifdef that was removed from 1.2.20rc2 pnggccrd.c,
- breaking the png_mmx_support() function.
-
-version 1.2.20rc4 [September 1, 2007]
- Removed Intel contributions (MMX, Optimized C).
-
-version 1.2.20rc5 [September 2, 2007]
- Restored configure and Makefile.in to rc3 and put a snippet of code in
- pnggccrd.c, to ensure configure makes the same PNG_NO_MMX_CODE selection
-
-version 1.2.20rc6 [September 2, 2007]
- Fixed bugs in scripts/CMakeLists.txt
- Removed pngvcrd.c references from msvc projects.
-
-version 1.0.28 and 1.2.20 [September 8, 2007]
- Removed "(NO READ SUPPORT)" from png_get_header_version() string.
-
-version 1.2.21beta1 [September 14, 2007]
- Fixed various mistakes reported by George Cook and Jeff Phillips:
- logical vs bitwise NOT in pngrtran.c, bug introduced in 1.2.19rc2
- 16-bit cheap transparency expansion, bug introduced in 1.2.19beta2
- errors with sizeof(unknown_chunk.name), bugs introduced in 1.2.19beta11
- <= compare with unsigned var in pngset.c, should be ==.
-
-version 1.2.21beta2 [September 18, 2007]
- Removed some extraneous typecasts.
-
-version 1.2.21rc1 [September 25, 2007]
- Fixed potential out-of-bounds reads in png_handle_pCAL() and
- png_handle_ztXt() ("flayer" results reported by Tavis Ormandy).
-
-version 1.2.21rc2 [September 26, 2007]
- Fixed potential out-of-bounds reads in png_handle_sCAL(),
- png_handle_iTXt(), and png_push_read_tEXt().
- Remove some PNG_CONST declarations from pngwutil.c to avoid compiler warnings
- Revised makefiles to update paths in libpng.pc properly.
-
-version 1.2.21rc3 [September 27, 2007]
- Revised makefiles to update "Libs" in libpng.pc properly.
-
-version 1.0.29 and 1.2.21rc3 [October 4, 2007]
- No changes.
-
-version 1.2.22beta1 [October 4, 2007]
- Again, fixed logical vs bitwise NOT in pngrtran.c, bug introduced
- in 1.2.19rc2
-
-version 1.2.22beta2 [October 5, 2007]
- Fixed string length error in pngset.c (caused crashes while decoding iCCP)
- Add terminating NULL after each instance of png_strncpy().
-
-version 1.2.22beta3 [October 6, 2007]
- Fix two off-by-one terminating NULL after png_strncpy().
-
-version 1.2.22beta4 [October 7, 2007]
- Changed some 0 to '\0'.
-
-version 1.0.30rc1 and 1.2.22rc1 [October 8, 2007]
- No changes.
-
-version 1.0.30 and 1.2.22 [October 13, 2007]
- No changes.
-
-version 1.2.23beta01 [October 15, 2007]
- Reduced number of invocations of png_strlen() in pngset.c.
- Changed [azAZ09_] to [_abcde...89] in Makefile.am for better localization.
-
-version 1.2.23beta02 [October 16, 2007]
- Eliminated png_strncpy() and png_strcpy() (Pierre Poissinger)
- Changed $AN to $(AN) in Makefile.am.
-
-version 1.2.23beta03 [October 16, 2007]
- Fixed off-by-one error in pngset.c
- Restore statement to set last character of buffer to \0 in pngerror.c
-
-version 1.2.23beta04 [October 23, 2007]
- Reject attempt to set all-zero cHRM values.
-
-version 1.2.23beta05 [October 26, 2007]
- Add missing quotes in projects/visualc6, lost in version 1.2.20rc3
-
-version 1.2.23rc01 [November 2, 2007]
- No changes.
-
-version 1.2.23 [November 6, 2007]
- No changes.
-
-version 1.2.24beta01 [November 19, 2007]
- Moved misplaced test for malloc failure in png_set_sPLT(). This bug was
- introduced in libpng-1.2.20beta01.
- Ifdef out avg_row etc from png.h and pngwrite.c when PNG_NO_WRITE_FILTER
- Do not use png_ptr->free_fn and png_ptr->mem_fn in png_destroy_read_struct()
- when png_ptr is NULL (Marshall Clow).
- Updated handling of symbol prefixes in Makefile.am and configure.ac (Mike
- Frysinger).
-
-version 1.2.24beta02 [November 30, 2007]
- Removed a useless test and fixed incorrect test in png_set_cHRM_fixed()
- (David Hill).
-
-version 1.2.24rc01 [December 7, 2007]
- No changes.
-
-version 1.2.24 [December 14, 2007]
- Make sure not to redefine _BSD_SOURCE in pngconf.h
- Revised gather.sh and makefile.std in contrib/pngminim to avoid compiling
- unused files.
-
-version 1.2.25beta01 [January 7, 2008]
- Fixed bug with unknown chunk handling, introduced in version 1.2.17rc2
-
-version 1.2.25beta02 [January 10, 2008]
- Prevent gamma from being applied twice.
-
-version 1.2.25rc01 [January 17, 2008]
- No changes.
-
-version 1.2.25beta03 [January 22, 2008]
- Fixed some continue-after-malloc-failure errors in pngset.c (David Hill)
- Check for info_ptr == NULL in png_read_info() and png_process_data().
- Check for possible use of NULL user_png_ver[] in png_create_read_struct().
- Change "if (swidth == NULL)" to "if (sheight == NULL)" in png_handle_sCAL
- (bug introduced in libpng-1.2.4/1.0.13).
- Return from png_destroy_read_struct() if png_ptr_ptr is NULL.
- Fix overflow of "msg" in png_decompress_chunk().
-
-version 1.2.25beta04 [January 26, 2008]
- Work around Coverity bug report by slightly refactoring
- png_read_push_finish_row()
-
-version 1.2.25beta05 [January 31, 2008]
- Added libpng-1.2.25beta05.tar.lzma to distribution. Get the lzma codec
- from <http://tukaani.org/lzma>.
- Added lp1225b05.7z to distribution. Get the 7-zip decoder from
- from <http://www.7-zip.org>.
- Fixed some broken links in the README file.
-
-version 1.2.25beta06 [February 6, 2008]
- Refactored png_read_push_finish_row() again, trying to satisfy Coverity.
- Fixed potential NULL dereference of png_ptr in png_destroy_write_struct();
- clarified potential NULL dereference of png_ptr in png_destroy_read_struct();
- fixed potential NULL dereference of info_ptr in png_handle_bKGD();
- fixed potential NULL dereference of user_png_ver[] in
- png_create_write_struct_2(). (Coverity)
-
-version 1.2.25rc02 [February 10, 2008]
- Reset png_ptr->pass in png_read_push_finish_row() before break.
- Changed "pass" from png_byte to int.
-
-version 1.2.25 and 1.0.31 [February 18, 2008]
- No changes.
-
-version 1.2.26beta01 [February 21, 2008]
- Added missing "(" in pngmem.c. Bug introduced in libpng-1.2.2/1.0.13
-
-version 1.2.26beta02 [March 12, 2008]
- Refined error message returned from deflateInit2 in pngwutil.c
- Check IHDR length in png_push_read_chunk() before saving it.
-
-version 1.2.26beta03 [March 16, 2008]
- Revised contrib/gregbook to handle premature end-of-file and file
- read errors correctly.
-
-version 1.2.26beta04 [March 18, 2008]
- Free png_ptr->big_row_buf and png_ptr->prev_row before allocating
- new copies in png_read_start_row(). Bug introduced in libpng-1.2.22.
-
-version 1.2.26beta05 [March 19, 2008]
- Removed extra png_free() added in libpng-1.2.26beta04.
-
-version 1.2.26beta06 [March 19, 2008]
- Avoid reallocating big_row_buf and prev_row when the size does not increase.
-
-version 1.2.26rc01 [March 26, 2008]
- Ifdef out some code that is unused when interlacing is not supported.
-
-versions 1.0.32 and 1.2.26 [April 2, 2008]
- No changes.
-
-version 1.2.27beta01 [April 12, 2008]
- Fixed bug (introduced in libpng-1.0.5h) with handling zero-length
- unknown chunks.
- Added more information about png_set_keep_unknown_chunks() to the
- documetation.
- Reject tRNS chunk with out-of-range samples instead of masking off
- the invalid high bits as done in since libpng-1.2.19beta5.
-
-version 1.2.27beta02 [April 13, 2008]
- Revised documentation about unknown chunk and user chunk handling.
- Keep tRNS chunk with out-of-range samples and issue a png_warning().
-
-version 1.2.27beta03 [April 14, 2008]
- Added check for NULL ptr in TURBOC version of png_free_default().
- Removed several unnecessary checks for NULL before calling png_free().
- Revised png_set_tRNS() so that calling it twice removes and invalidates
- the previous call.
- Revised pngtest to check for out-of-range tRNS samples.
-
-version 1.2.27beta04 [April 18, 2008]
- Added AC_LIBTOOL_WIN32_DLL to configure.ac
- Rebuilt Makefile.in, aclocal.m4, and configure with autoconf-2.62
-
-version 1.2.27beta05 [April 19, 2008]
- Added MAINTEINERCLEANFILES variable to Makefile.am
-
-version 1.2.27beta06 [April 21, 2008]
- Avoid changing color_type from GRAY to RGB by
- png_set_expand_gray_1_2_4_to_8().
-
-version 1.2.27rc01 [April 23, 2008]
- Fix broken URL for rfc2083 in png.5 and libpng-*.txt
-
-version 1.0.33 and 1.2.27 [April 30, 2008]
- No changes.
-
-version 1.0.34 and 1.2.28 [April 30, 2008]
- Rebuilt Makefile.in, aclocal.m4, and configure with autoconf-2.61
- due to backward incompatibilities.
- Removed a stray object file from contrib/gregbook
-
-version 1.2.29beta01 [May 1, 2008]
- Removed some stray *.diff and *.orig files
-
-version 1.2.29beta02 [May 1, 2008]
- Reverted Makefile.in, aclocal.m4, and configure to the libpng-1.2.26
- versions.
-
-version 1.2.29beta03 [May 2, 2008]
- Added --force to autogen libtoolize options and --force-missing to
- automake options.
- Changed $(ECHO) to echo in Makefile.am and Makefile.in
- Updated all configure files to autoconf-2.62
- #ifdef out pnggcrd.c code if using MSC_VER
-
-version 1.2.29rc01 [May 4, 2008]
- No changes.
-
-version 1.0.35 and 1.2.29 [May 8, 2008]
- No changes.
-
-Send comments/corrections/commendations to png-mng-implement at lists.sf.net
-(subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe)
-or to glennrp at users.sourceforge.net
-
-Glenn R-P
diff --git a/Build/source/libs/libpng/INSTALL b/Build/source/libs/libpng/INSTALL
deleted file mode 100644
index 6060e31294c..00000000000
--- a/Build/source/libs/libpng/INSTALL
+++ /dev/null
@@ -1,199 +0,0 @@
-
-Installing libpng version 1.2.29 - May 8, 2008
-
-On Unix/Linux and similar systems, you can simply type
-
- ./configure [--prefix=/path]
- make check
- make install
-
-and ignore the rest of this document.
-
-If configure does not work on your system and you have a reasonably
-up-to-date set of tools, running ./autogen.sh before running ./configure
-may fix the problem. You can also run the individual commands in
-autogen.sh with the --force option, if supported by your version of
-the tools. If you run 'libtoolize --force', though, this will replace
-the distributed, patched, version of ltmain.sh with an unpatched version
-and your shared library builds may fail to produce libraries with the
-correct version numbers.
-
-Instead, you can use one of the custom-built makefiles in the
-"scripts" directory
-
- cp scripts/makefile.system makefile
- make test
- make install
-
-Or you can use one of the "projects" in the "projects" directory.
-
-If you want to use "cmake" (see www.cmake.org), copy CMakeLists.txt
-from the "scripts" directory to this directory and type
-
- cmake . [-DPNG_MMX=YES] -DCMAKE_INSTALL_PREFIX=/path
- make
- make install
-
-Before installing libpng, you must first install zlib, if it
-is not already on your system. zlib can usually be found
-wherever you got libpng. zlib can be placed in another directory,
-at the same level as libpng.
-
-If your system already has a preinstalled zlib you will still need
-to have access to the zlib.h and zconf.h include files that
-correspond to the version of zlib that's installed.
-
-You can rename the directories that you downloaded (they
-might be called "libpng-1.2.29" or "lpng109" and "zlib-1.2.1"
-or "zlib121") so that you have directories called "zlib" and "libpng".
-
-Your directory structure should look like this:
-
- .. (the parent directory)
- libpng (this directory)
- INSTALL (this file)
- README
- *.h
- *.c
- contrib
- gregbook
- pngminus
- pngsuite
- visupng
- projects
- beos
- c5builder (Borland)
- visualc6 (msvc)
- netware.txt
- wince.txt
- scripts
- makefile.*
- pngtest.png
- etc.
- zlib
- README
- *.h
- *.c
- contrib
- etc.
-
-If the line endings in the files look funny, you may wish to get the other
-distribution of libpng. It is available in both tar.gz (UNIX style line
-endings) and zip (DOS style line endings) formats.
-
-If you are building libpng with MSVC, you can enter the
-libpng projects\visualc6 directory and follow the instructions in
-projects\visualc6\README.txt.
-
-You can build libpng for WindowsCE by downloading and installing
-the projects\wince directory as instructed in the projects\wince.txt file, and
-then following the instructions in the README* files. Similarly, you can
-build libpng for Netware or Beos as instructed in projects\netware.txt
-or projects\beos.
-
-Else enter the zlib directory and follow the instructions in zlib/README,
-then come back here and run "configure" or choose the appropriate
-makefile.sys in the scripts directory.
-
-The files that are presently available in the scripts directory
-include
-
- CMakeLists.txt => "cmake" script
- makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
- makefile.elf => Linux/ELF makefile symbol versioning,
- gcc, creates libpng12.so.0.1.2.29)
- makefile.linux => Linux/ELF makefile
- (gcc, creates libpng12.so.0.1.2.29)
- makefile.gcc => Generic makefile (gcc, creates static libpng.a)
- makefile.knr => Archaic UNIX Makefile that converts files with
- ansi2knr (Requires ansi2knr.c from
- ftp://ftp.cs.wisc.edu/ghost)
- makefile.aix => AIX/gcc makefile
- makefile.cygwin => Cygwin/gcc makefile
- makefile.darwin => Darwin makefile, can use on MacosX
- makefile.dec => DEC Alpha UNIX makefile
- makefile.freebsd => FreeBSD makefile
- makefile.hpgcc => HPUX makefile using gcc
- makefile.hpux => HPUX (10.20 and 11.00) makefile
- makefile.hp64 => HPUX (10.20 and 11.00) makefile, 64-bit
- makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
- makefile.intel => Intel C/C++ version 4.0 and later
- libpng.icc => Project file for IBM VisualAge/C++ version 4.0 or later
- makefile.netbsd => NetBSD/cc makefile, uses PNGGCCRD, makes libpng.so.
- makefile.ne12bsd => NetBSD/cc makefile, uses PNGGCCRD,
- makes libpng12.so
- makefile.openbsd => OpenBSD makefile
- makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
- makefile.sggcc => Silicon Graphics (gcc,
- creates libpng12.so.0.1.2.29)
- makefile.sunos => Sun makefile
- makefile.solaris => Solaris 2.X makefile (gcc,
- creates libpng12.so.0.1.2.29)
- makefile.solaris-x86 => Solaris/intelMMX 2.X makefile (gcc,
- creates libpng12.so.0.1.2.29)
- makefile.so9 => Solaris 9 makefile (gcc,
- creates libpng12.so.0.1.2.29)
- makefile.32sunu => Sun Ultra 32-bit makefile
- makefile.64sunu => Sun Ultra 64-bit makefile
- makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
- makefile.mips => MIPS makefile
- makefile.acorn => Acorn makefile
- makefile.amiga => Amiga makefile
- smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
- (Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
- makefile.atari => Atari makefile
- makefile.beos => BEOS makefile for X86
- makefile.bor => Borland makefile (uses bcc)
- makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode)
- makefile.tc3 => Turbo C 3.0 makefile
- makefile.dj2 => DJGPP 2 makefile
- makefile.msc => Microsoft C makefile
- makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and later
- makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
- pngos2.def => OS/2 module definition file used by makefile.os2
- makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
- makevms.com => VMS build script
- descrip.mms => VMS makefile for MMS or MMK
- SCOPTIONS.ppc => Used with smakefile.ppc
-
-Copy the file (or files) that you need from the
-scripts directory into this directory, for example
-
- MSDOS example: copy scripts\makefile.msc makefile
- UNIX example: cp scripts/makefile.std makefile
-
-Read the makefile to see if you need to change any source or
-target directories to match your preferences.
-
-Then read pngconf.h to see if you want to make any configuration
-changes.
-
-Then just run "make" which will create the libpng library in
-this directory and "make test" which will run a quick test that reads
-the "pngtest.png" file and writes a "pngout.png" file that should be
-identical to it. Look for "9782 zero samples" in the output of the
-test. For more confidence, you can run another test by typing
-"pngtest pngnow.png" and looking for "289 zero samples" in the output.
-Also, you can run "pngtest -m contrib/pngsuite/*.png" and compare
-your output with the result shown in contrib/pngsuite/README.
-
-Most of the makefiles will allow you to run "make install" to
-put the library in its final resting place (if you want to
-do that, run "make install" in the zlib directory first if necessary).
-Some also allow you to run "make test-installed" after you have
-run "make install".
-
-If you encounter a compiler error message complaining about the
-lines
- __png.h__ already includes setjmp.h;
- __dont__ include it again.;
-This means you have compiled another module that includes setjmp.h,
-which is hazardous because the two modules might not include exactly
-the same setjmp.h. If you are sure that you know what you are doing
-and that they are exactly the same, then you can comment out or
-delete the two lines. Better yet, use the cexcept interface
-instead, as demonstrated in contrib/visupng of the libpng distribution.
-
-Further information can be found in the README and libpng.txt
-files, in the individual makefiles, in png.h, and the manual pages
-libpng.3 and png.5.
diff --git a/Build/source/libs/libpng/KNOWNBUG b/Build/source/libs/libpng/KNOWNBUG
deleted file mode 100644
index 7688a9ceb82..00000000000
--- a/Build/source/libs/libpng/KNOWNBUG
+++ /dev/null
@@ -1,22 +0,0 @@
-
-Known bugs in libpng version 1.2.29
-
-1. February 23, 2006: The custom makefiles don't build libpng with -lz.
-
- STATUS: This is a subject of debate. The change will probably be made
- as a part of a major overhaul of the makefiles in libpng version 1.4.0.
-
-2. February 24, 2006: The Makefile generated by the "configure" script
- fails to install symbolic links
- libpng12.so => libpng12.so.0.1.2.9betaN
- that are generated by the custom makefiles.
-
-3. September 4, 2007: There is a report that pngtest crashes on MacOS 10.
-
- STATUS: workarounds are
- 1) Compile without optimization (crashes are observed with
- -arch i386 and -O2 or -O3, using gcc-4.0.1).
- 2) Compile pngtest.c with PNG_DEBUG defined (the bug goes away if
- you try to look at it).
- 3) Ignore the crash. The library itself seems to be OK.
-
diff --git a/Build/source/libs/libpng/LICENSE b/Build/source/libs/libpng/LICENSE
deleted file mode 100644
index 072d9efec05..00000000000
--- a/Build/source/libs/libpng/LICENSE
+++ /dev/null
@@ -1,109 +0,0 @@
-
-This copy of the libpng notices is provided for your convenience. In case of
-any discrepancy between this copy and the notices in the file png.h that is
-included in the libpng distribution, the latter shall prevail.
-
-COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
-
-If you modify libpng you may insert additional notices immediately following
-this sentence.
-
-libpng versions 1.2.6, August 15, 2004, through 1.2.29, May 8, 2008, are
-Copyright (c) 2004, 2006-2008 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.2.5
-with the following individual added to the list of Contributing Authors
-
- Cosmin Truta
-
-libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
-Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.0.6
-with the following individuals added to the list of Contributing Authors
-
- Simon-Pierre Cadieux
- Eric S. Raymond
- Gilles Vollant
-
-and with the following additions to the disclaimer:
-
- There is no warranty against interference with your enjoyment of the
- library or against infringement. There is no warranty that our
- efforts or the library will fulfill any of your particular purposes
- or needs. This library is provided with all faults, and the entire
- risk of satisfactory quality, performance, accuracy, and effort is with
- the user.
-
-libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
-Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-0.96,
-with the following individuals added to the list of Contributing Authors:
-
- Tom Lane
- Glenn Randers-Pehrson
- Willem van Schaik
-
-libpng versions 0.89, June 1996, through 0.96, May 1997, are
-Copyright (c) 1996, 1997 Andreas Dilger
-Distributed according to the same disclaimer and license as libpng-0.88,
-with the following individuals added to the list of Contributing Authors:
-
- John Bowler
- Kevin Bracey
- Sam Bushell
- Magnus Holmgren
- Greg Roelofs
- Tom Tanner
-
-libpng versions 0.5, May 1995, through 0.88, January 1996, are
-Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
-
-For the purposes of this copyright and license, "Contributing Authors"
-is defined as the following set of individuals:
-
- Andreas Dilger
- Dave Martindale
- Guy Eric Schalnat
- Paul Schmidt
- Tim Wegner
-
-The PNG Reference Library is supplied "AS IS". The Contributing Authors
-and Group 42, Inc. disclaim all warranties, expressed or implied,
-including, without limitation, the warranties of merchantability and of
-fitness for any purpose. The Contributing Authors and Group 42, Inc.
-assume no liability for direct, indirect, incidental, special, exemplary,
-or consequential damages, which may result from the use of the PNG
-Reference Library, even if advised of the possibility of such damage.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-source code, or portions hereof, for any purpose, without fee, subject
-to the following restrictions:
-
-1. The origin of this source code must not be misrepresented.
-
-2. Altered versions must be plainly marked as such and must not
- be misrepresented as being the original source.
-
-3. This Copyright notice may not be removed or altered from any
- source or altered source distribution.
-
-The Contributing Authors and Group 42, Inc. specifically permit, without
-fee, and encourage the use of this source code as a component to
-supporting the PNG file format in commercial products. If you use this
-source code in a product, acknowledgment is not required but would be
-appreciated.
-
-
-A "png_get_copyright" function is available, for convenient use in "about"
-boxes and the like:
-
- printf("%s",png_get_copyright(NULL));
-
-Also, the PNG logo (in PNG format, of course) is supplied in the
-files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
-
-Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
-certification mark of the Open Source Initiative.
-
-Glenn Randers-Pehrson
-glennrp at users.sourceforge.net
-May 8, 2008
diff --git a/Build/source/libs/libpng/Makefile.in b/Build/source/libs/libpng/Makefile.in
deleted file mode 100644
index b288d497a0d..00000000000
--- a/Build/source/libs/libpng/Makefile.in
+++ /dev/null
@@ -1,55 +0,0 @@
-# @configure_input@
-# Makefile for libpng - te@dbs.uni-hannover.de
-
-# This file (together with libpng.ac withenable.ac) is
-# copyright Thomas Esser, 2002 and hereby put into the
-# public domain.
-
-# For conditions of distribution and use of the other files in this
-# directory, see copyright notice in png.h.
-
-kpse_include ../texk/make/common.mk
-kpse_include ../texk/make/programs.mk
-kpse_include ../texk/make/library.mk
-
-ZLIBDIR=../zlib
-ZLIBSRCDIR=$(srcdir)/$(ZLIBDIR)
-XDEFS=-DPNG_NO_ASSEMBLER_CODE @ZLIBCPPFLAGS@
-
-OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
- pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
- pngwtran.o pngmem.o pngerror.o pngpread.o
-
-all: libpng.a
-
-libpng.a: $(OBJS)
- rm -f $@
- $(AR) $(ARFLAGS) $@ $(OBJS)
- $(RANLIB) $@
-
-kpse_include ../texk/make/clean.mk
-
-clean::
- rm -f libpng.a pngtest pngout.png
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-example.o: example.c
-png.o: png.c png.h pngconf.h
-pngerror.o: pngerror.c png.h pngconf.h
-pnggccrd.o: pnggccrd.c png.h pngconf.h
-pngget.o: pngget.c png.h pngconf.h
-pngmem.o: pngmem.c png.h pngconf.h
-pngpread.o: pngpread.c png.h pngconf.h
-pngread.o: pngread.c png.h pngconf.h
-pngrio.o: pngrio.c png.h pngconf.h
-pngrtran.o: pngrtran.c png.h pngconf.h
-pngrutil.o: pngrutil.c png.h pngconf.h
-pngset.o: pngset.c png.h pngconf.h
-pngtest.o: pngtest.c png.h pngconf.h
-pngtrans.o: pngtrans.c png.h pngconf.h
-pngvcrd.o: pngvcrd.c png.h pngconf.h
-pngwio.o: pngwio.c png.h pngconf.h
-pngwrite.o: pngwrite.c png.h pngconf.h
-pngwtran.o: pngwtran.c png.h pngconf.h
-pngwutil.o: pngwutil.c png.h pngconf.h
diff --git a/Build/source/libs/libpng/README b/Build/source/libs/libpng/README
deleted file mode 100644
index fd2dbb1ad0a..00000000000
--- a/Build/source/libs/libpng/README
+++ /dev/null
@@ -1,264 +0,0 @@
-README for libpng version 1.2.29 - May 8, 2008 (shared library 12.0)
-See the note about version numbers near the top of png.h
-
-See INSTALL for instructions on how to install libpng.
-
-Libpng comes in several distribution formats. Get libpng-*.tar.gz,
-libpng-*.tar.lzma, or libpng-*.tar.bz2 if you want UNIX-style line
-endings in the text files, or lpng*.7z or lpng*.zip if you want DOS-style
-line endings.
-
-Version 0.89 was the first official release of libpng. Don't let the
-fact that it's the first release fool you. The libpng library has been in
-extensive use and testing since mid-1995. By late 1997 it had
-finally gotten to the stage where there hadn't been significant
-changes to the API in some time, and people have a bad feeling about
-libraries with versions < 1.0. Version 1.0.0 was released in
-March 1998.
-
-****
-Note that some of the changes to the png_info structure render this
-version of the library binary incompatible with libpng-0.89 or
-earlier versions if you are using a shared library. The type of the
-"filler" parameter for png_set_filler() has changed from png_byte to
-png_uint_32, which will affect shared-library applications that use
-this function.
-
-To avoid problems with changes to the internals of png_info_struct,
-new APIs have been made available in 0.95 to avoid direct application
-access to info_ptr. These functions are the png_set_<chunk> and
-png_get_<chunk> functions. These functions should be used when
-accessing/storing the info_struct data, rather than manipulating it
-directly, to avoid such problems in the future.
-
-It is important to note that the APIs do not make current programs
-that access the info struct directly incompatible with the new
-library. However, it is strongly suggested that new programs use
-the new APIs (as shown in example.c and pngtest.c), and older programs
-be converted to the new format, to facilitate upgrades in the future.
-****
-
-Additions since 0.90 include the ability to compile libpng as a
-Windows DLL, and new APIs for accessing data in the info struct.
-Experimental functions include the ability to set weighting and cost
-factors for row filter selection, direct reads of integers from buffers
-on big-endian processors that support misaligned data access, faster
-methods of doing alpha composition, and more accurate 16->8 bit color
-conversion.
-
-The additions since 0.89 include the ability to read from a PNG stream
-which has had some (or all) of the signature bytes read by the calling
-application. This also allows the reading of embedded PNG streams that
-do not have the PNG file signature. As well, it is now possible to set
-the library action on the detection of chunk CRC errors. It is possible
-to set different actions based on whether the CRC error occurred in a
-critical or an ancillary chunk.
-
-The changes made to the library, and bugs fixed are based on discussions
-on the PNG-implement mailing list
-and not on material submitted privately to Guy, Andreas, or Glenn. They will
-forward any good suggestions to the list.
-
-For a detailed description on using libpng, read libpng.txt. For
-examples of libpng in a program, see example.c and pngtest.c. For usage
-information and restrictions (what little they are) on libpng, see
-png.h. For a description on using zlib (the compression library used by
-libpng) and zlib's restrictions, see zlib.h
-
-I have included a general makefile, as well as several machine and
-compiler specific ones, but you may have to modify one for your own needs.
-
-You should use zlib 1.0.4 or later to run this, but it MAY work with
-versions as old as zlib 0.95. Even so, there are bugs in older zlib
-versions which can cause the output of invalid compression streams for
-some images. You will definitely need zlib 1.0.4 or later if you are
-taking advantage of the MS-DOS "far" structure allocation for the small
-and medium memory models. You should also note that zlib is a
-compression library that is useful for more things than just PNG files.
-You can use zlib as a drop-in replacement for fread() and fwrite() if
-you are so inclined.
-
-zlib should be available at the same place that libpng is, or at
-ftp://ftp.simplesystems.org/pub/png/src/
-
-You may also want a copy of the PNG specification. It is available
-as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find
-these at http://www.libpng.org/pub/png/pngdocs.html
-
-This code is currently being archived at libpng.sf.net in the
-[DOWNLOAD] area, and on CompuServe, Lib 20 (PNG SUPPORT)
-at GO GRAPHSUP. If you can't find it in any of those places,
-e-mail me, and I'll help you find it.
-
-If you have any code changes, requests, problems, etc., please e-mail
-them to me. Also, I'd appreciate any make files or project files,
-and any modifications you needed to make to get libpng to compile,
-along with a #define variable to tell what compiler/system you are on.
-If you needed to add transformations to libpng, or wish libpng would
-provide the image in a different way, drop me a note (and code, if
-possible), so I can consider supporting the transformation.
-Finally, if you get any warning messages when compiling libpng
-(note: not zlib), and they are easy to fix, I'd appreciate the
-fix. Please mention "libpng" somewhere in the subject line. Thanks.
-
-This release was created and will be supported by myself (of course
-based in a large way on Guy's and Andreas' earlier work), and the PNG group.
-
-Send comments/corrections/commendations to png-mng-implement at lists.sf.net
-(subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe) or to glennrp at users.sourceforge.net
-
-You can't reach Guy, the original libpng author, at the addresses
-given in previous versions of this document. He and Andreas will read mail
-addressed to the png-implement list, however.
-
-Please do not send general questions about PNG. Send them to
-the (png-mng-misc at lists.sourceforge.net, subscription required, visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement to subscribe)
-On the other hand,
-please do not send libpng questions to that address, send them to me
-or to the png-implement list. I'll
-get them in the end anyway. If you have a question about something
-in the PNG specification that is related to using libpng, send it
-to me. Send me any questions that start with "I was using libpng,
-and ...". If in doubt, send questions to me. I'll bounce them
-to others, if necessary.
-
-Please do not send suggestions on how to change PNG. We have
-been discussing PNG for twelve years now, and it is official and
-finished. If you have suggestions for libpng, however, I'll
-gladly listen. Even if your suggestion is not used immediately,
-it may be used later.
-
-Files in this distribution:
-
- ANNOUNCE => Announcement of this version, with recent changes
- CHANGES => Description of changes between libpng versions
- KNOWNBUG => List of known bugs and deficiencies
- LICENSE => License to use and redistribute libpng
- README => This file
- TODO => Things not implemented in the current library
- Y2KINFO => Statement of Y2K compliance
- example.c => Example code for using libpng functions
- libpng-*-*-diff.txt => Diff from previous release
- libpng.3 => manual page for libpng (includes libpng.txt)
- libpng.txt => Description of libpng and its functions
- libpngpf.3 => manual page for libpng's private functions
- png.5 => manual page for the PNG format
- png.c => Basic interface functions common to library
- png.h => Library function and interface declarations
- pngconf.h => System specific library configuration
- pngerror.c => Error/warning message I/O functions
- pngget.c => Functions for retrieving info from struct
- pngmem.c => Memory handling functions
- pngbar.png => PNG logo, 88x31
- pngnow.png => PNG logo, 98x31
- pngpread.c => Progressive reading functions
- pngread.c => Read data/helper high-level functions
- pngrio.c => Lowest-level data read I/O functions
- pngrtran.c => Read data transformation functions
- pngrutil.c => Read data utility functions
- pngset.c => Functions for storing data into the info_struct
- pngtest.c => Library test program
- pngtest.png => Library test sample image
- pngtrans.c => Common data transformation functions
- pngwio.c => Lowest-level write I/O functions
- pngwrite.c => High-level write functions
- pngwtran.c => Write data transformations
- pngwutil.c => Write utility functions
- contrib => Contributions
- gregbook => source code for PNG reading and writing, from
- Greg Roelofs' "PNG: The Definitive Guide",
- O'Reilly, 1999
- msvctest => Builds and runs pngtest using a MSVC workspace
- pngminus => Simple pnm2png and png2pnm programs
- pngsuite => Test images
- visupng => Contains a MSVC workspace for VisualPng
- projects => Contains project files and workspaces for building DLL
- beos => Contains a Beos workspace for building libpng
- c5builder => Contains a Borland workspace for building libpng
- and zlib
- visualc6 => Contains a Microsoft Visual C++ (MSVC) workspace
- for building libpng and zlib
- netware.txt => Contains instructions for downloading a set of
- project files for building libpng and zlib on
- Netware.
- wince.txt => Contains instructions for downloading a Microsoft
- Visual C++ (Windows CD Toolkit) workspace for
- building libpng and zlib on WindowsCE
- scripts => Directory containing scripts for building libpng:
- descrip.mms => VMS makefile for MMS or MMK
- makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
- makefile.elf => Linux/ELF makefile symbol versioning,
- gcc, creates libpng12.so.0.1.2.29)
- makefile.linux => Linux/ELF makefile
- (gcc, creates libpng12.so.0.1.2.29)
- makefile.gcmmx => Linux/ELF makefile
- (gcc, creates libpng12.so.0.1.2.29,
- uses assembler code tuned for Intel MMX platform)
- makefile.gcc => Generic makefile (gcc, creates static libpng.a)
- makefile.knr => Archaic UNIX Makefile that converts files with
- ansi2knr (Requires ansi2knr.c from
- ftp://ftp.cs.wisc.edu/ghost)
- makefile.aix => AIX makefile
- makefile.cygwin => Cygwin/gcc makefile
- makefile.darwin => Darwin makefile
- makefile.dec => DEC Alpha UNIX makefile
- makefile.freebsd => FreeBSD makefile
- makefile.hpgcc => HPUX makefile using gcc
- makefile.hpux => HPUX (10.20 and 11.00) makefile
- makefile.hp64 => HPUX (10.20 and 11.00) makefile, 64 bit
- makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
- makefile.intel => Intel C/C++ version 4.0 and later
- libpng.icc => Project file, IBM VisualAge/C++ 4.0 or later
- makefile.netbsd => NetBSD/cc makefile, PNGGCCRD, makes libpng.so.
- makefile.ne12bsd => NetBSD/cc makefile, PNGGCCRD, makes libpng12.so
- makefile.openbsd => OpenBSD makefile
- makefile.sgi => Silicon Graphics IRIX (cc, creates static lib)
- makefile.sggcc => Silicon Graphics
- (gcc, creates libpng12.so.0.1.2.29)
- makefile.sunos => Sun makefile
- makefile.solaris => Solaris 2.X makefile
- (gcc, creates libpng12.so.0.1.2.29)
- makefile.so9 => Solaris 9 makefile
- (gcc, creates libpng12.so.0.1.2.29)
- makefile.32sunu => Sun Ultra 32-bit makefile
- makefile.64sunu => Sun Ultra 64-bit makefile
- makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
- makefile.mips => MIPS makefile
- makefile.acorn => Acorn makefile
- makefile.amiga => Amiga makefile
- smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC
- compiler (Requires SCOPTIONS, copied from
- scripts/SCOPTIONS.ppc)
- makefile.atari => Atari makefile
- makefile.beos => BEOS makefile for X86
- makefile.bor => Borland makefile (uses bcc)
- makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode)
- makefile.tc3 => Turbo C 3.0 makefile
- makefile.dj2 => DJGPP 2 makefile
- makefile.msc => Microsoft C makefile
- makefile.vcawin32=> makefile for Microsoft Visual C++ 5.0 and
- later (uses assembler code tuned for Intel MMX
- platform)
- makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and
- later (does not use assembler code)
- makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
- pngos2.def => OS/2 module definition file used by makefile.os2
- makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
- makevms.com => VMS build script
- SCOPTIONS.ppc => Used with smakefile.ppc
-
-Good luck, and happy coding.
-
--Glenn Randers-Pehrson (current maintainer)
- Internet: glennrp at users.sourceforge.net
-
--Andreas Eric Dilger (former maintainer, 1996-1997)
- Internet: adilger at enel.ucalgary.ca
- Web: http://members.shaw.ca/adilger/
-
--Guy Eric Schalnat (original author and former maintainer, 1995-1996)
- (formerly of Group 42, Inc)
- Internet: gschal at infinet.com
diff --git a/Build/source/libs/libpng/TODO b/Build/source/libs/libpng/TODO
deleted file mode 100644
index a5f639577dd..00000000000
--- a/Build/source/libs/libpng/TODO
+++ /dev/null
@@ -1,24 +0,0 @@
-TODO - list of things to do for libpng:
-
-Final bug fixes.
-Improve API by hiding the png_struct and png_info structs.
-Finish work on the no-floating-point version (including gamma compensation)
-Better C++ wrapper/full C++ implementation?
-Fix problem with C++ and EXTERN "C".
-cHRM transformation.
-Improve setjmp/longjmp usage or remove it in favor of returning error codes.
-Add "grayscale->palette" transformation and "palette->grayscale" detection.
-Improved dithering.
-Multi-lingual error and warning message support.
-Complete sRGB transformation (presently it simply uses gamma=0.45455).
-Man pages for function calls.
-Better documentation.
-Better filter selection
- (counting huffman bits/precompression? filter inertia? filter costs?).
-Histogram creation.
-Text conversion between different code pages (Latin-1 -> Mac and DOS).
-Should we always malloc 2^bit_depth PLTE/tRNS/hIST entries for safety?
-Build gamma tables using fixed point (and do away with floating point entirely).
-Use greater precision when changing to linear gamma for compositing against
- background and doing rgb-to-gray transformation.
-Investigate pre-incremented loop counters and other loop constructions.
diff --git a/Build/source/libs/libpng/Y2KINFO b/Build/source/libs/libpng/Y2KINFO
deleted file mode 100644
index 43348df0f5f..00000000000
--- a/Build/source/libs/libpng/Y2KINFO
+++ /dev/null
@@ -1,55 +0,0 @@
- Y2K compliance in libpng:
- =========================
-
- May 8, 2008
-
- Since the PNG Development group is an ad-hoc body, we can't make
- an official declaration.
-
- This is your unofficial assurance that libpng from version 0.71 and
- upward through 1.2.29 are Y2K compliant. It is my belief that earlier
- versions were also Y2K compliant.
-
- Libpng only has three year fields. One is a 2-byte unsigned integer
- that will hold years up to 65535. The other two hold the date in text
- format, and will hold years up to 9999.
-
- The integer is
- "png_uint_16 year" in png_time_struct.
-
- The strings are
- "png_charp time_buffer" in png_struct and
- "near_time_buffer", which is a local character string in png.c.
-
- There are seven time-related functions:
-
- png_convert_to_rfc_1123() in png.c
- (formerly png_convert_to_rfc_1152() in error)
- png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
- png_convert_from_time_t() in pngwrite.c
- png_get_tIME() in pngget.c
- png_handle_tIME() in pngrutil.c, called in pngread.c
- png_set_tIME() in pngset.c
- png_write_tIME() in pngwutil.c, called in pngwrite.c
-
- All appear to handle dates properly in a Y2K environment. The
- png_convert_from_time_t() function calls gmtime() to convert from system
- clock time, which returns (year - 1900), which we properly convert to
- the full 4-digit year. There is a possibility that applications using
- libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
- function, or that they are incorrectly passing only a 2-digit year
- instead of "year - 1900" into the png_convert_from_struct_tm() function,
- but this is not under our control. The libpng documentation has always
- stated that it works with 4-digit years, and the APIs have been
- documented as such.
-
- The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
- integer to hold the year, and can hold years as large as 65535.
-
- zlib, upon which libpng depends, is also Y2K compliant. It contains
- no date-related code.
-
-
- Glenn Randers-Pehrson
- libpng maintainer
- PNG Development Group
diff --git a/Build/source/libs/libpng/ac/libpng.ac b/Build/source/libs/libpng/ac/libpng.ac
deleted file mode 100644
index 009eb29cd33..00000000000
--- a/Build/source/libs/libpng/ac/libpng.ac
+++ /dev/null
@@ -1,3 +0,0 @@
-## libs/libpng/ac/libpng.ac
-## define required functions and headers from system libpng
-KPSE_CHECK_LIB([libpng], [png_set_read_fn], [png.h])
diff --git a/Build/source/libs/libpng/ac/withenable.ac b/Build/source/libs/libpng/ac/withenable.ac
deleted file mode 100644
index 37489800b6c..00000000000
--- a/Build/source/libs/libpng/ac/withenable.ac
+++ /dev/null
@@ -1,3 +0,0 @@
-## libs/libpng/kpse/withenable.ac
-## configure options and TL libraries required for libpng
-KPSE_WITH_LIB([libpng], [zlib])
diff --git a/Build/source/libs/libpng/example.c b/Build/source/libs/libpng/example.c
deleted file mode 100644
index 08158731a69..00000000000
--- a/Build/source/libs/libpng/example.c
+++ /dev/null
@@ -1,814 +0,0 @@
-
-#if 0 /* in case someone actually tries to compile this */
-
-/* example.c - an example of using libpng
- * Last changed in libpng 1.2.1 December 7, 2001.
- * This file has been placed in the public domain by the authors.
- * Maintained 1998-2007 Glenn Randers-Pehrson
- * Maintained 1996, 1997 Andreas Dilger)
- * Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-/* This is an example of how to use libpng to read and write PNG files.
- * The file libpng.txt is much more verbose then this. If you have not
- * read it, do so first. This was designed to be a starting point of an
- * implementation. This is not officially part of libpng, is hereby placed
- * in the public domain, and therefore does not require a copyright notice.
- *
- * This file does not currently compile, because it is missing certain
- * parts, like allocating memory to hold an image. You will have to
- * supply these parts to get it to compile. For an example of a minimal
- * working PNG reader/writer, see pngtest.c, included in this distribution;
- * see also the programs in the contrib directory.
- */
-
-#include "png.h"
-
- /* The png_jmpbuf() macro, used in error handling, became available in
- * libpng version 1.0.6. If you want to be able to run your code with older
- * versions of libpng, you must define the macro yourself (but only if it
- * is not already defined by libpng!).
- */
-
-#ifndef png_jmpbuf
-# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
-#endif
-
-/* Check to see if a file is a PNG file using png_sig_cmp(). png_sig_cmp()
- * returns zero if the image is a PNG and nonzero if it isn't a PNG.
- *
- * The function check_if_png() shown here, but not used, returns nonzero (true)
- * if the file can be opened and is a PNG, 0 (false) otherwise.
- *
- * If this call is successful, and you are going to keep the file open,
- * you should call png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK); once
- * you have created the png_ptr, so that libpng knows your application
- * has read that many bytes from the start of the file. Make sure you
- * don't call png_set_sig_bytes() with more than 8 bytes read or give it
- * an incorrect number of bytes read, or you will either have read too
- * many bytes (your fault), or you are telling libpng to read the wrong
- * number of magic bytes (also your fault).
- *
- * Many applications already read the first 2 or 4 bytes from the start
- * of the image to determine the file type, so it would be easiest just
- * to pass the bytes to png_sig_cmp() or even skip that if you know
- * you have a PNG file, and call png_set_sig_bytes().
- */
-#define PNG_BYTES_TO_CHECK 4
-int check_if_png(char *file_name, FILE **fp)
-{
- char buf[PNG_BYTES_TO_CHECK];
-
- /* Open the prospective PNG file. */
- if ((*fp = fopen(file_name, "rb")) == NULL)
- return 0;
-
- /* Read in some of the signature bytes */
- if (fread(buf, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK)
- return 0;
-
- /* Compare the first PNG_BYTES_TO_CHECK bytes of the signature.
- Return nonzero (true) if they match */
-
- return(!png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK));
-}
-
-/* Read a PNG file. You may want to return an error code if the read
- * fails (depending upon the failure). There are two "prototypes" given
- * here - one where we are given the filename, and we need to open the
- * file, and the other where we are given an open file (possibly with
- * some or all of the magic bytes read - see comments above).
- */
-#ifdef open_file /* prototype 1 */
-void read_png(char *file_name) /* We need to open the file */
-{
- png_structp png_ptr;
- png_infop info_ptr;
- unsigned int sig_read = 0;
- png_uint_32 width, height;
- int bit_depth, color_type, interlace_type;
- FILE *fp;
-
- if ((fp = fopen(file_name, "rb")) == NULL)
- return (ERROR);
-#else no_open_file /* prototype 2 */
-void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
-{
- png_structp png_ptr;
- png_infop info_ptr;
- png_uint_32 width, height;
- int bit_depth, color_type, interlace_type;
-#endif no_open_file /* only use one prototype! */
-
- /* Create and initialize the png_struct with the desired error handler
- * functions. If you want to use the default stderr and longjump method,
- * you can supply NULL for the last three parameters. We also supply the
- * the compiler header file version, so that we know if the application
- * was compiled with a compatible version of the library. REQUIRED
- */
- png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
- png_voidp user_error_ptr, user_error_fn, user_warning_fn);
-
- if (png_ptr == NULL)
- {
- fclose(fp);
- return (ERROR);
- }
-
- /* Allocate/initialize the memory for image information. REQUIRED. */
- info_ptr = png_create_info_struct(png_ptr);
- if (info_ptr == NULL)
- {
- fclose(fp);
- png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
- return (ERROR);
- }
-
- /* Set error handling if you are using the setjmp/longjmp method (this is
- * the normal method of doing things with libpng). REQUIRED unless you
- * set up your own error handlers in the png_create_read_struct() earlier.
- */
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- /* Free all of the memory associated with the png_ptr and info_ptr */
- png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
- fclose(fp);
- /* If we get here, we had a problem reading the file */
- return (ERROR);
- }
-
- /* One of the following I/O initialization methods is REQUIRED */
-#ifdef streams /* PNG file I/O method 1 */
- /* Set up the input control if you are using standard C streams */
- png_init_io(png_ptr, fp);
-
-#else no_streams /* PNG file I/O method 2 */
- /* If you are using replacement read functions, instead of calling
- * png_init_io() here you would call:
- */
- png_set_read_fn(png_ptr, (void *)user_io_ptr, user_read_fn);
- /* where user_io_ptr is a structure you want available to the callbacks */
-#endif no_streams /* Use only one I/O method! */
-
- /* If we have already read some of the signature */
- png_set_sig_bytes(png_ptr, sig_read);
-
-#ifdef hilevel
- /*
- * If you have enough memory to read in the entire image at once,
- * and you need to specify only transforms that can be controlled
- * with one of the PNG_TRANSFORM_* bits (this presently excludes
- * dithering, filling, setting background, and doing gamma
- * adjustment), then you can read the entire image (including
- * pixels) into the info structure with this call:
- */
- png_read_png(png_ptr, info_ptr, png_transforms, png_voidp_NULL);
-#else
- /* OK, you're doing it the hard way, with the lower-level functions */
-
- /* The call to png_read_info() gives us all of the information from the
- * PNG file before the first IDAT (image data chunk). REQUIRED
- */
- png_read_info(png_ptr, info_ptr);
-
- png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
- &interlace_type, int_p_NULL, int_p_NULL);
-
-/* Set up the data transformations you want. Note that these are all
- * optional. Only call them if you want/need them. Many of the
- * transformations only work on specific types of images, and many
- * are mutually exclusive.
- */
-
- /* tell libpng to strip 16 bit/color files down to 8 bits/color */
- png_set_strip_16(png_ptr);
-
- /* Strip alpha bytes from the input data without combining with the
- * background (not recommended).
- */
- png_set_strip_alpha(png_ptr);
-
- /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
- * byte into separate bytes (useful for paletted and grayscale images).
- */
- png_set_packing(png_ptr);
-
- /* Change the order of packed pixels to least significant bit first
- * (not useful if you are using png_set_packing). */
- png_set_packswap(png_ptr);
-
- /* Expand paletted colors into true RGB triplets */
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- png_set_palette_to_rgb(png_ptr);
-
- /* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */
- if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
- png_set_gray_1_2_4_to_8(png_ptr);
-
- /* Expand paletted or RGB images with transparency to full alpha channels
- * so the data will be available as RGBA quartets.
- */
- if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
- png_set_tRNS_to_alpha(png_ptr);
-
- /* Set the background color to draw transparent and alpha images over.
- * It is possible to set the red, green, and blue components directly
- * for paletted images instead of supplying a palette index. Note that
- * even if the PNG file supplies a background, you are not required to
- * use it - you should use the (solid) application background if it has one.
- */
-
- png_color_16 my_background, *image_background;
-
- if (png_get_bKGD(png_ptr, info_ptr, &image_background))
- png_set_background(png_ptr, image_background,
- PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
- else
- png_set_background(png_ptr, &my_background,
- PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
-
- /* Some suggestions as to how to get a screen gamma value */
-
- /* Note that screen gamma is the display_exponent, which includes
- * the CRT_exponent and any correction for viewing conditions */
- if (/* We have a user-defined screen gamma value */)
- {
- screen_gamma = user-defined screen_gamma;
- }
- /* This is one way that applications share the same screen gamma value */
- else if ((gamma_str = getenv("SCREEN_GAMMA")) != NULL)
- {
- screen_gamma = atof(gamma_str);
- }
- /* If we don't have another value */
- else
- {
- screen_gamma = 2.2; /* A good guess for a PC monitors in a dimly
- lit room */
- screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */
- }
-
- /* Tell libpng to handle the gamma conversion for you. The final call
- * is a good guess for PC generated images, but it should be configurable
- * by the user at run time by the user. It is strongly suggested that
- * your application support gamma correction.
- */
-
- int intent;
-
- if (png_get_sRGB(png_ptr, info_ptr, &intent))
- png_set_gamma(png_ptr, screen_gamma, 0.45455);
- else
- {
- double image_gamma;
- if (png_get_gAMA(png_ptr, info_ptr, &image_gamma))
- png_set_gamma(png_ptr, screen_gamma, image_gamma);
- else
- png_set_gamma(png_ptr, screen_gamma, 0.45455);
- }
-
- /* Dither RGB files down to 8 bit palette or reduce palettes
- * to the number of colors available on your screen.
- */
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- int num_palette;
- png_colorp palette;
-
- /* This reduces the image to the application supplied palette */
- if (/* we have our own palette */)
- {
- /* An array of colors to which the image should be dithered */
- png_color std_color_cube[MAX_SCREEN_COLORS];
-
- png_set_dither(png_ptr, std_color_cube, MAX_SCREEN_COLORS,
- MAX_SCREEN_COLORS, png_uint_16p_NULL, 0);
- }
- /* This reduces the image to the palette supplied in the file */
- else if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette))
- {
- png_uint_16p histogram = NULL;
-
- png_get_hIST(png_ptr, info_ptr, &histogram);
-
- png_set_dither(png_ptr, palette, num_palette,
- max_screen_colors, histogram, 0);
- }
- }
-
- /* invert monochrome files to have 0 as white and 1 as black */
- png_set_invert_mono(png_ptr);
-
- /* If you want to shift the pixel values from the range [0,255] or
- * [0,65535] to the original [0,7] or [0,31], or whatever range the
- * colors were originally in:
- */
- if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
- {
- png_color_8p sig_bit;
-
- png_get_sBIT(png_ptr, info_ptr, &sig_bit);
- png_set_shift(png_ptr, sig_bit);
- }
-
- /* flip the RGB pixels to BGR (or RGBA to BGRA) */
- if (color_type & PNG_COLOR_MASK_COLOR)
- png_set_bgr(png_ptr);
-
- /* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */
- png_set_swap_alpha(png_ptr);
-
- /* swap bytes of 16 bit files to least significant byte first */
- png_set_swap(png_ptr);
-
- /* Add filler (or alpha) byte (before/after each RGB triplet) */
- png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
-
- /* Turn on interlace handling. REQUIRED if you are not using
- * png_read_image(). To see how to handle interlacing passes,
- * see the png_read_row() method below:
- */
- number_passes = png_set_interlace_handling(png_ptr);
-
- /* Optional call to gamma correct and add the background to the palette
- * and update info structure. REQUIRED if you are expecting libpng to
- * update the palette for you (ie you selected such a transform above).
- */
- png_read_update_info(png_ptr, info_ptr);
-
- /* Allocate the memory to hold the image using the fields of info_ptr. */
-
- /* The easiest way to read the image: */
- png_bytep row_pointers[height];
-
- for (row = 0; row < height; row++)
- {
- row_pointers[row] = png_malloc(png_ptr, png_get_rowbytes(png_ptr,
- info_ptr));
- }
-
- /* Now it's time to read the image. One of these methods is REQUIRED */
-#ifdef entire /* Read the entire image in one go */
- png_read_image(png_ptr, row_pointers);
-
-#else no_entire /* Read the image one or more scanlines at a time */
- /* The other way to read images - deal with interlacing: */
-
- for (pass = 0; pass < number_passes; pass++)
- {
-#ifdef single /* Read the image a single row at a time */
- for (y = 0; y < height; y++)
- {
- png_read_rows(png_ptr, &row_pointers[y], png_bytepp_NULL, 1);
- }
-
-#else no_single /* Read the image several rows at a time */
- for (y = 0; y < height; y += number_of_rows)
- {
-#ifdef sparkle /* Read the image using the "sparkle" effect. */
- png_read_rows(png_ptr, &row_pointers[y], png_bytepp_NULL,
- number_of_rows);
-#else no_sparkle /* Read the image using the "rectangle" effect */
- png_read_rows(png_ptr, png_bytepp_NULL, &row_pointers[y],
- number_of_rows);
-#endif no_sparkle /* use only one of these two methods */
- }
-
- /* if you want to display the image after every pass, do
- so here */
-#endif no_single /* use only one of these two methods */
- }
-#endif no_entire /* use only one of these two methods */
-
- /* read rest of file, and get additional chunks in info_ptr - REQUIRED */
- png_read_end(png_ptr, info_ptr);
-#endif hilevel
-
- /* At this point you have read the entire image */
-
- /* clean up after the read, and free any memory allocated - REQUIRED */
- png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
-
- /* close the file */
- fclose(fp);
-
- /* that's it */
- return (OK);
-}
-
-/* progressively read a file */
-
-int
-initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr)
-{
- /* Create and initialize the png_struct with the desired error handler
- * functions. If you want to use the default stderr and longjump method,
- * you can supply NULL for the last three parameters. We also check that
- * the library version is compatible in case we are using dynamically
- * linked libraries.
- */
- *png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
- png_voidp user_error_ptr, user_error_fn, user_warning_fn);
-
- if (*png_ptr == NULL)
- {
- *info_ptr = NULL;
- return (ERROR);
- }
-
- *info_ptr = png_create_info_struct(png_ptr);
-
- if (*info_ptr == NULL)
- {
- png_destroy_read_struct(png_ptr, info_ptr, png_infopp_NULL);
- return (ERROR);
- }
-
- if (setjmp(png_jmpbuf((*png_ptr))))
- {
- png_destroy_read_struct(png_ptr, info_ptr, png_infopp_NULL);
- return (ERROR);
- }
-
- /* This one's new. You will need to provide all three
- * function callbacks, even if you aren't using them all.
- * If you aren't using all functions, you can specify NULL
- * parameters. Even when all three functions are NULL,
- * you need to call png_set_progressive_read_fn().
- * These functions shouldn't be dependent on global or
- * static variables if you are decoding several images
- * simultaneously. You should store stream specific data
- * in a separate struct, given as the second parameter,
- * and retrieve the pointer from inside the callbacks using
- * the function png_get_progressive_ptr(png_ptr).
- */
- png_set_progressive_read_fn(*png_ptr, (void *)stream_data,
- info_callback, row_callback, end_callback);
-
- return (OK);
-}
-
-int
-process_data(png_structp *png_ptr, png_infop *info_ptr,
- png_bytep buffer, png_uint_32 length)
-{
- if (setjmp(png_jmpbuf((*png_ptr))))
- {
- /* Free the png_ptr and info_ptr memory on error */
- png_destroy_read_struct(png_ptr, info_ptr, png_infopp_NULL);
- return (ERROR);
- }
-
- /* This one's new also. Simply give it chunks of data as
- * they arrive from the data stream (in order, of course).
- * On Segmented machines, don't give it any more than 64K.
- * The library seems to run fine with sizes of 4K, although
- * you can give it much less if necessary (I assume you can
- * give it chunks of 1 byte, but I haven't tried with less
- * than 256 bytes yet). When this function returns, you may
- * want to display any rows that were generated in the row
- * callback, if you aren't already displaying them there.
- */
- png_process_data(*png_ptr, *info_ptr, buffer, length);
- return (OK);
-}
-
-info_callback(png_structp png_ptr, png_infop info)
-{
-/* do any setup here, including setting any of the transformations
- * mentioned in the Reading PNG files section. For now, you _must_
- * call either png_start_read_image() or png_read_update_info()
- * after all the transformations are set (even if you don't set
- * any). You may start getting rows before png_process_data()
- * returns, so this is your last chance to prepare for that.
- */
-}
-
-row_callback(png_structp png_ptr, png_bytep new_row,
- png_uint_32 row_num, int pass)
-{
-/*
- * This function is called for every row in the image. If the
- * image is interlaced, and you turned on the interlace handler,
- * this function will be called for every row in every pass.
- *
- * In this function you will receive a pointer to new row data from
- * libpng called new_row that is to replace a corresponding row (of
- * the same data format) in a buffer allocated by your application.
- *
- * The new row data pointer new_row may be NULL, indicating there is
- * no new data to be replaced (in cases of interlace loading).
- *
- * If new_row is not NULL then you need to call
- * png_progressive_combine_row() to replace the corresponding row as
- * shown below:
- */
- /* Check if row_num is in bounds. */
- if((row_num >= 0) && (row_num < height))
- {
- /* Get pointer to corresponding row in our
- * PNG read buffer.
- */
- png_bytep old_row = ((png_bytep *)our_data)[row_num];
-
- /* If both rows are allocated then copy the new row
- * data to the corresponding row data.
- */
- if((old_row != NULL) && (new_row != NULL))
- png_progressive_combine_row(png_ptr, old_row, new_row);
- }
-/*
- * The rows and passes are called in order, so you don't really
- * need the row_num and pass, but I'm supplying them because it
- * may make your life easier.
- *
- * For the non-NULL rows of interlaced images, you must call
- * png_progressive_combine_row() passing in the new row and the
- * old row, as demonstrated above. You can call this function for
- * NULL rows (it will just return) and for non-interlaced images
- * (it just does the png_memcpy for you) if it will make the code
- * easier. Thus, you can just do this for all cases:
- */
-
- png_progressive_combine_row(png_ptr, old_row, new_row);
-
-/* where old_row is what was displayed for previous rows. Note
- * that the first pass (pass == 0 really) will completely cover
- * the old row, so the rows do not have to be initialized. After
- * the first pass (and only for interlaced images), you will have
- * to pass the current row as new_row, and the function will combine
- * the old row and the new row.
- */
-}
-
-end_callback(png_structp png_ptr, png_infop info)
-{
-/* this function is called when the whole image has been read,
- * including any chunks after the image (up to and including
- * the IEND). You will usually have the same info chunk as you
- * had in the header, although some data may have been added
- * to the comments and time fields.
- *
- * Most people won't do much here, perhaps setting a flag that
- * marks the image as finished.
- */
-}
-
-/* write a png file */
-void write_png(char *file_name /* , ... other image information ... */)
-{
- FILE *fp;
- png_structp png_ptr;
- png_infop info_ptr;
- png_colorp palette;
-
- /* open the file */
- fp = fopen(file_name, "wb");
- if (fp == NULL)
- return (ERROR);
-
- /* Create and initialize the png_struct with the desired error handler
- * functions. If you want to use the default stderr and longjump method,
- * you can supply NULL for the last three parameters. We also check that
- * the library version is compatible with the one used at compile time,
- * in case we are using dynamically linked libraries. REQUIRED.
- */
- png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
- png_voidp user_error_ptr, user_error_fn, user_warning_fn);
-
- if (png_ptr == NULL)
- {
- fclose(fp);
- return (ERROR);
- }
-
- /* Allocate/initialize the image information data. REQUIRED */
- info_ptr = png_create_info_struct(png_ptr);
- if (info_ptr == NULL)
- {
- fclose(fp);
- png_destroy_write_struct(&png_ptr, png_infopp_NULL);
- return (ERROR);
- }
-
- /* Set error handling. REQUIRED if you aren't supplying your own
- * error handling functions in the png_create_write_struct() call.
- */
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- /* If we get here, we had a problem reading the file */
- fclose(fp);
- png_destroy_write_struct(&png_ptr, &info_ptr);
- return (ERROR);
- }
-
- /* One of the following I/O initialization functions is REQUIRED */
-#ifdef streams /* I/O initialization method 1 */
- /* set up the output control if you are using standard C streams */
- png_init_io(png_ptr, fp);
-#else no_streams /* I/O initialization method 2 */
- /* If you are using replacement read functions, instead of calling
- * png_init_io() here you would call */
- png_set_write_fn(png_ptr, (void *)user_io_ptr, user_write_fn,
- user_IO_flush_function);
- /* where user_io_ptr is a structure you want available to the callbacks */
-#endif no_streams /* only use one initialization method */
-
-#ifdef hilevel
- /* This is the easy way. Use it if you already have all the
- * image info living info in the structure. You could "|" many
- * PNG_TRANSFORM flags into the png_transforms integer here.
- */
- png_write_png(png_ptr, info_ptr, png_transforms, png_voidp_NULL);
-#else
- /* This is the hard way */
-
- /* Set the image information here. Width and height are up to 2^31,
- * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
- * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
- * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
- * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or
- * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
- * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
- */
- png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_???,
- PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
- /* set the palette if there is one. REQUIRED for indexed-color images */
- palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH
- * png_sizeof (png_color));
- /* ... set palette colors ... */
- png_set_PLTE(png_ptr, info_ptr, palette, PNG_MAX_PALETTE_LENGTH);
- /* You must not free palette here, because png_set_PLTE only makes a link to
- the palette that you malloced. Wait until you are about to destroy
- the png structure. */
-
- /* optional significant bit chunk */
- /* if we are dealing with a grayscale image then */
- sig_bit.gray = true_bit_depth;
- /* otherwise, if we are dealing with a color image then */
- sig_bit.red = true_red_bit_depth;
- sig_bit.green = true_green_bit_depth;
- sig_bit.blue = true_blue_bit_depth;
- /* if the image has an alpha channel then */
- sig_bit.alpha = true_alpha_bit_depth;
- png_set_sBIT(png_ptr, info_ptr, sig_bit);
-
-
- /* Optional gamma chunk is strongly suggested if you have any guess
- * as to the correct gamma of the image.
- */
- png_set_gAMA(png_ptr, info_ptr, gamma);
-
- /* Optionally write comments into the image */
- text_ptr[0].key = "Title";
- text_ptr[0].text = "Mona Lisa";
- text_ptr[0].compression = PNG_TEXT_COMPRESSION_NONE;
- text_ptr[1].key = "Author";
- text_ptr[1].text = "Leonardo DaVinci";
- text_ptr[1].compression = PNG_TEXT_COMPRESSION_NONE;
- text_ptr[2].key = "Description";
- text_ptr[2].text = "<long text>";
- text_ptr[2].compression = PNG_TEXT_COMPRESSION_zTXt;
-#ifdef PNG_iTXt_SUPPORTED
- text_ptr[0].lang = NULL;
- text_ptr[1].lang = NULL;
- text_ptr[2].lang = NULL;
-#endif
- png_set_text(png_ptr, info_ptr, text_ptr, 3);
-
- /* other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs, */
- /* note that if sRGB is present the gAMA and cHRM chunks must be ignored
- * on read and must be written in accordance with the sRGB profile */
-
- /* Write the file header information. REQUIRED */
- png_write_info(png_ptr, info_ptr);
-
- /* If you want, you can write the info in two steps, in case you need to
- * write your private chunk ahead of PLTE:
- *
- * png_write_info_before_PLTE(write_ptr, write_info_ptr);
- * write_my_chunk();
- * png_write_info(png_ptr, info_ptr);
- *
- * However, given the level of known- and unknown-chunk support in 1.1.0
- * and up, this should no longer be necessary.
- */
-
- /* Once we write out the header, the compression type on the text
- * chunks gets changed to PNG_TEXT_COMPRESSION_NONE_WR or
- * PNG_TEXT_COMPRESSION_zTXt_WR, so it doesn't get written out again
- * at the end.
- */
-
- /* set up the transformations you want. Note that these are
- * all optional. Only call them if you want them.
- */
-
- /* invert monochrome pixels */
- png_set_invert_mono(png_ptr);
-
- /* Shift the pixels up to a legal bit depth and fill in
- * as appropriate to correctly scale the image.
- */
- png_set_shift(png_ptr, &sig_bit);
-
- /* pack pixels into bytes */
- png_set_packing(png_ptr);
-
- /* swap location of alpha bytes from ARGB to RGBA */
- png_set_swap_alpha(png_ptr);
-
- /* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into
- * RGB (4 channels -> 3 channels). The second parameter is not used.
- */
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-
- /* flip BGR pixels to RGB */
- png_set_bgr(png_ptr);
-
- /* swap bytes of 16-bit files to most significant byte first */
- png_set_swap(png_ptr);
-
- /* swap bits of 1, 2, 4 bit packed pixel formats */
- png_set_packswap(png_ptr);
-
- /* turn on interlace handling if you are not using png_write_image() */
- if (interlacing)
- number_passes = png_set_interlace_handling(png_ptr);
- else
- number_passes = 1;
-
- /* The easiest way to write the image (you may have a different memory
- * layout, however, so choose what fits your needs best). You need to
- * use the first method if you aren't handling interlacing yourself.
- */
- png_uint_32 k, height, width;
- png_byte image[height][width*bytes_per_pixel];
- png_bytep row_pointers[height];
-
- if (height > PNG_UINT_32_MAX/png_sizeof(png_bytep))
- png_error (png_ptr, "Image is too tall to process in memory");
-
- for (k = 0; k < height; k++)
- row_pointers[k] = image + k*width*bytes_per_pixel;
-
- /* One of the following output methods is REQUIRED */
-#ifdef entire /* write out the entire image data in one call */
- png_write_image(png_ptr, row_pointers);
-
- /* the other way to write the image - deal with interlacing */
-
-#else no_entire /* write out the image data by one or more scanlines */
- /* The number of passes is either 1 for non-interlaced images,
- * or 7 for interlaced images.
- */
- for (pass = 0; pass < number_passes; pass++)
- {
- /* Write a few rows at a time. */
- png_write_rows(png_ptr, &row_pointers[first_row], number_of_rows);
-
- /* If you are only writing one row at a time, this works */
- for (y = 0; y < height; y++)
- {
- png_write_rows(png_ptr, &row_pointers[y], 1);
- }
- }
-#endif no_entire /* use only one output method */
-
- /* You can write optional chunks like tEXt, zTXt, and tIME at the end
- * as well. Shouldn't be necessary in 1.1.0 and up as all the public
- * chunks are supported and you can use png_set_unknown_chunks() to
- * register unknown chunks into the info structure to be written out.
- */
-
- /* It is REQUIRED to call this to finish writing the rest of the file */
- png_write_end(png_ptr, info_ptr);
-#endif hilevel
-
- /* If you png_malloced a palette, free it here (don't free info_ptr->palette,
- as recommended in versions 1.0.5m and earlier of this example; if
- libpng mallocs info_ptr->palette, libpng will free it). If you
- allocated it with malloc() instead of png_malloc(), use free() instead
- of png_free(). */
- png_free(png_ptr, palette);
- palette=NULL;
-
- /* Similarly, if you png_malloced any data that you passed in with
- png_set_something(), such as a hist or trans array, free it here,
- when you can be sure that libpng is through with it. */
- png_free(png_ptr, trans);
- trans=NULL;
-
- /* clean up after the write, and free any memory allocated */
- png_destroy_write_struct(&png_ptr, &info_ptr);
-
- /* close the file */
- fclose(fp);
-
- /* that's it */
- return (OK);
-}
-
-#endif /* if 0 */
diff --git a/Build/source/libs/libpng/libpng-1.2.29.txt b/Build/source/libs/libpng/libpng-1.2.29.txt
deleted file mode 100644
index 91b98064751..00000000000
--- a/Build/source/libs/libpng/libpng-1.2.29.txt
+++ /dev/null
@@ -1,2906 +0,0 @@
-libpng.txt - A description on how to use and modify libpng
-
- libpng version 1.2.29 - May 8, 2008
- Updated and distributed by Glenn Randers-Pehrson
- <glennrp at users.sourceforge.net>
- Copyright (c) 1998-2008 Glenn Randers-Pehrson
- For conditions of distribution and use, see copyright
- notice in png.h.
-
- Based on:
-
- libpng versions 0.97, January 1998, through 1.2.29 - May 8, 2008
- Updated and distributed by Glenn Randers-Pehrson
- Copyright (c) 1998-2008 Glenn Randers-Pehrson
-
- libpng 1.0 beta 6 version 0.96 May 28, 1997
- Updated and distributed by Andreas Dilger
- Copyright (c) 1996, 1997 Andreas Dilger
-
- libpng 1.0 beta 2 - version 0.88 January 26, 1996
- For conditions of distribution and use, see copyright
- notice in png.h. Copyright (c) 1995, 1996 Guy Eric
- Schalnat, Group 42, Inc.
-
- Updated/rewritten per request in the libpng FAQ
- Copyright (c) 1995, 1996 Frank J. T. Wojcik
- December 18, 1995 & January 20, 1996
-
-I. Introduction
-
-This file describes how to use and modify the PNG reference library
-(known as libpng) for your own use. There are five sections to this
-file: introduction, structures, reading, writing, and modification and
-configuration notes for various special platforms. In addition to this
-file, example.c is a good starting point for using the library, as
-it is heavily commented and should include everything most people
-will need. We assume that libpng is already installed; see the
-INSTALL file for instructions on how to install libpng.
-
-For examples of libpng usage, see the files "example.c", "pngtest.c",
-and the files in the "contrib" directory, all of which are included in the
-libpng distribution.
-
-Libpng was written as a companion to the PNG specification, as a way
-of reducing the amount of time and effort it takes to support the PNG
-file format in application programs.
-
-The PNG specification (second edition), November 2003, is available as
-a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at
-<http://www.w3.org/TR/2003/REC-PNG-20031110/
-The W3C and ISO documents have identical technical content.
-
-The PNG-1.2 specification is available at
-<http://www.libpng.org/pub/png/documents/>. It is technically equivalent
-to the PNG specification (second edition) but has some additional material.
-
-The PNG-1.0 specification is available
-as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
-W3C Recommendation <http://www.w3.org/TR/REC.png.html>.
-
-Some additional chunks are described in the special-purpose public chunks
-documents at <http://www.libpng.org/pub/png/documents/>.
-
-Other information
-about PNG, and the latest version of libpng, can be found at the PNG home
-page, <http://www.libpng.org/pub/png/>.
-
-Most users will not have to modify the library significantly; advanced
-users may want to modify it more. All attempts were made to make it as
-complete as possible, while keeping the code easy to understand.
-Currently, this library only supports C. Support for other languages
-is being considered.
-
-Libpng has been designed to handle multiple sessions at one time,
-to be easily modifiable, to be portable to the vast majority of
-machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
-to use. The ultimate goal of libpng is to promote the acceptance of
-the PNG file format in whatever way possible. While there is still
-work to be done (see the TODO file), libpng should cover the
-majority of the needs of its users.
-
-Libpng uses zlib for its compression and decompression of PNG files.
-Further information about zlib, and the latest version of zlib, can
-be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
-The zlib compression utility is a general purpose utility that is
-useful for more than PNG files, and can be used without libpng.
-See the documentation delivered with zlib for more details.
-You can usually find the source files for the zlib utility wherever you
-find the libpng source files.
-
-Libpng is thread safe, provided the threads are using different
-instances of the structures. Each thread should have its own
-png_struct and png_info instances, and thus its own image.
-Libpng does not protect itself against two threads using the
-same instance of a structure.
-
-II. Structures
-
-There are two main structures that are important to libpng, png_struct
-and png_info. The first, png_struct, is an internal structure that
-will not, for the most part, be used by a user except as the first
-variable passed to every libpng function call.
-
-The png_info structure is designed to provide information about the
-PNG file. At one time, the fields of png_info were intended to be
-directly accessible to the user. However, this tended to cause problems
-with applications using dynamically loaded libraries, and as a result
-a set of interface functions for png_info (the png_get_*() and png_set_*()
-functions) was developed. The fields of png_info are still available for
-older applications, but it is suggested that applications use the new
-interfaces if at all possible.
-
-Applications that do make direct access to the members of png_struct (except
-for png_ptr->jmpbuf) must be recompiled whenever the library is updated,
-and applications that make direct access to the members of png_info must
-be recompiled if they were compiled or loaded with libpng version 1.0.6,
-in which the members were in a different order. In version 1.0.7, the
-members of the png_info structure reverted to the old order, as they were
-in versions 0.97c through 1.0.5. Starting with version 2.0.0, both
-structures are going to be hidden, and the contents of the structures will
-only be accessible through the png_get/png_set functions.
-
-The png.h header file is an invaluable reference for programming with libpng.
-And while I'm on the topic, make sure you include the libpng header file:
-
-#include <png.h>
-
-III. Reading
-
-We'll now walk you through the possible functions to call when reading
-in a PNG file sequentially, briefly explaining the syntax and purpose
-of each one. See example.c and png.h for more detail. While
-progressive reading is covered in the next section, you will still
-need some of the functions discussed in this section to read a PNG
-file.
-
-Setup
-
-You will want to do the I/O initialization(*) before you get into libpng,
-so if it doesn't work, you don't have much to undo. Of course, you
-will also want to insure that you are, in fact, dealing with a PNG
-file. Libpng provides a simple check to see if a file is a PNG file.
-To use it, pass in the first 1 to 8 bytes of the file to the function
-png_sig_cmp(), and it will return 0 if the bytes match the corresponding
-bytes of the PNG signature, or nonzero otherwise. Of course, the more bytes
-you pass in, the greater the accuracy of the prediction.
-
-If you are intending to keep the file pointer open for use in libpng,
-you must ensure you don't read more than 8 bytes from the beginning
-of the file, and you also have to make a call to png_set_sig_bytes_read()
-with the number of bytes you read from the beginning. Libpng will
-then only check the bytes (if any) that your program didn't read.
-
-(*): If you are not using the standard I/O functions, you will need
-to replace them with custom functions. See the discussion under
-Customizing libpng.
-
-
- FILE *fp = fopen(file_name, "rb");
- if (!fp)
- {
- return (ERROR);
- }
- fread(header, 1, number, fp);
- is_png = !png_sig_cmp(header, 0, number);
- if (!is_png)
- {
- return (NOT_PNG);
- }
-
-
-Next, png_struct and png_info need to be allocated and initialized. In
-order to ensure that the size of these structures is correct even with a
-dynamically linked libpng, there are functions to initialize and
-allocate the structures. We also pass the library version, optional
-pointers to error handling functions, and a pointer to a data struct for
-use by the error functions, if necessary (the pointer and functions can
-be NULL if the default error handlers are to be used). See the section
-on Changes to Libpng below regarding the old initialization functions.
-The structure allocation functions quietly return NULL if they fail to
-create the structure, so your application should check for that.
-
- png_structp png_ptr = png_create_read_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_read_struct(&png_ptr,
- (png_infopp)NULL, (png_infopp)NULL);
- return (ERROR);
- }
-
- png_infop end_info = png_create_info_struct(png_ptr);
- if (!end_info)
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_read_struct_2() instead of png_create_read_struct():
-
- png_structp png_ptr = png_create_read_struct_2
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn, (png_voidp)
- user_mem_ptr, user_malloc_fn, user_free_fn);
-
-The error handling routines passed to png_create_read_struct()
-and the memory alloc/free routines passed to png_create_struct_2()
-are only necessary if you are not using the libpng supplied error
-handling and memory alloc/free functions.
-
-When libpng encounters an error, it expects to longjmp back
-to your routine. Therefore, you will need to call setjmp and pass
-your png_jmpbuf(png_ptr). If you read the file from different
-routines, you will need to update the jmpbuf field every time you enter
-a new routine that will call a png_*() function.
-
-See your documentation of setjmp/longjmp for your compiler for more
-information on setjmp/longjmp. See the discussion on libpng error
-handling in the Customizing Libpng section below for more information
-on the libpng error handling. If an error occurs, and libpng longjmp's
-back to your setjmp, you will want to call png_destroy_read_struct() to
-free any memory.
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- &end_info);
- fclose(fp);
- return (ERROR);
- }
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-Now you need to set up the input code. The default for libpng is to
-use the C function fread(). If you use this, you will need to pass a
-valid FILE * in the function png_init_io(). Be sure that the file is
-opened in binary mode. If you wish to handle reading data in another
-way, you need not call the png_init_io() function, but you must then
-implement the libpng I/O methods discussed in the Customizing Libpng
-section below.
-
- png_init_io(png_ptr, fp);
-
-If you had previously opened the file and read any of the signature from
-the beginning in order to see if this was a PNG file, you need to let
-libpng know that there are some bytes missing from the start of the file.
-
- png_set_sig_bytes(png_ptr, number);
-
-Setting up callback code
-
-You can set up a callback function to handle any unknown chunks in the
-input stream. You must supply the function
-
- read_chunk_callback(png_ptr ptr,
- png_unknown_chunkp chunk);
- {
- /* The unknown chunk structure contains your
- chunk data, along with similar data for any other
- unknown chunks: */
-
- png_byte name[5];
- png_byte *data;
- png_size_t size;
-
- /* Note that libpng has already taken care of
- the CRC handling */
-
- /* put your code here. Search for your chunk in the
- unknown chunk structure, process it, and return one
- of the following: */
-
- return (-n); /* chunk had an error */
- return (0); /* did not recognize */
- return (n); /* success */
- }
-
-(You can give your function another name that you like instead of
-"read_chunk_callback")
-
-To inform libpng about your function, use
-
- png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
- read_chunk_callback);
-
-This names not only the callback function, but also a user pointer that
-you can retrieve with
-
- png_get_user_chunk_ptr(png_ptr);
-
-If you call the png_set_read_user_chunk_fn() function, then all unknown
-chunks will be saved when read, in case your callback function will need
-one or more of them. This behavior can be changed with the
-png_set_keep_unknown_chunks() function, described below.
-
-At this point, you can set up a callback function that will be
-called after each row has been read, which you can use to control
-a progress meter or the like. It's demonstrated in pngtest.c.
-You must supply a function
-
- void read_row_callback(png_ptr ptr, png_uint_32 row,
- int pass);
- {
- /* put your code here */
- }
-
-(You can give it another name that you like instead of "read_row_callback")
-
-To inform libpng about your function, use
-
- png_set_read_status_fn(png_ptr, read_row_callback);
-
-Width and height limits
-
-The PNG specification allows the width and height of an image to be as
-large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
-Since very few applications really need to process such large images,
-we have imposed an arbitrary 1-million limit on rows and columns.
-Larger images will be rejected immediately with a png_error() call. If
-you wish to override this limit, you can use
-
- png_set_user_limits(png_ptr, width_max, height_max);
-
-to set your own limits, or use width_max = height_max = 0x7fffffffL
-to allow all valid dimensions (libpng may reject some very large images
-anyway because of potential buffer overflow conditions).
-
-You should put this statement after you create the PNG structure and
-before calling png_read_info(), png_read_png(), or png_process_data().
-If you need to retrieve the limits that are being applied, use
-
- width_max = png_get_user_width_max(png_ptr);
- height_max = png_get_user_height_max(png_ptr);
-
-Unknown-chunk handling
-
-Now you get to set the way the library processes unknown chunks in the
-input PNG stream. Both known and unknown chunks will be read. Normal
-behavior is that known chunks will be parsed into information in
-various info_ptr members while unknown chunks will be discarded. To change
-this, you can call:
-
- png_set_keep_unknown_chunks(png_ptr, keep,
- chunk_list, num_chunks);
- keep - 0: default unknown chunk handling
- 1: ignore; do not keep
- 2: keep only if safe-to-copy
- 3: keep even if unsafe-to-copy
- You can use these definitions:
- PNG_HANDLE_CHUNK_AS_DEFAULT 0
- PNG_HANDLE_CHUNK_NEVER 1
- PNG_HANDLE_CHUNK_IF_SAFE 2
- PNG_HANDLE_CHUNK_ALWAYS 3
- chunk_list - list of chunks affected (a byte string,
- five bytes per chunk, NULL or '\0' if
- num_chunks is 0)
- num_chunks - number of chunks affected; if 0, all
- unknown chunks are affected. If nonzero,
- only the chunks in the list are affected
-
-Unknown chunks declared in this way will be saved as raw data onto a
-list of png_unknown_chunk structures. If a chunk that is normally
-known to libpng is named in the list, it will be handled as unknown,
-according to the "keep" directive. If a chunk is named in successive
-instances of png_set_keep_unknown_chunks(), the final instance will
-take precedence. The IHDR and IEND chunks should not be named in
-chunk_list; if they are, libpng will process them normally anyway.
-
-Here is an example of the usage of png_set_keep_unknown_chunks(),
-where the private "vpAg" chunk will later be processed by a user chunk
-callback function:
-
- png_byte vpAg[5]={118, 112, 65, 103, (png_byte) '\0'};
-
- #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- png_byte unused_chunks[]=
- {
- 104, 73, 83, 84, (png_byte) '\0', /* hIST */
- 105, 84, 88, 116, (png_byte) '\0', /* iTXt */
- 112, 67, 65, 76, (png_byte) '\0', /* pCAL */
- 115, 67, 65, 76, (png_byte) '\0', /* sCAL */
- 115, 80, 76, 84, (png_byte) '\0', /* sPLT */
- 116, 73, 77, 69, (png_byte) '\0', /* tIME */
- };
- #endif
-
- ...
-
- #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- /* ignore all unknown chunks: */
- png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
- /* except for vpAg: */
- png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
- /* also ignore unused known chunks: */
- png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
- (int)sizeof(unused_chunks)/5);
- #endif
-
-
-The high-level read interface
-
-At this point there are two ways to proceed; through the high-level
-read interface, or through a sequence of low-level read operations.
-You can use the high-level interface if (a) you are willing to read
-the entire image into memory, and (b) the input transformations
-you want to do are limited to the following set:
-
- PNG_TRANSFORM_IDENTITY No transformation
- PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
- 8 bits
- PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
- PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
- samples to bytes
- PNG_TRANSFORM_PACKSWAP Change order of packed
- pixels to LSB first
- PNG_TRANSFORM_EXPAND Perform set_expand()
- PNG_TRANSFORM_INVERT_MONO Invert monochrome images
- PNG_TRANSFORM_SHIFT Normalize pixels to the
- sBIT depth
- PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
- to BGRA
- PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
- to AG
- PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
- to transparency
- PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
-
-(This excludes setting a background color, doing gamma transformation,
-dithering, and setting filler.) If this is the case, simply do this:
-
- png_read_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of
-some set of transformation flags. This call is equivalent to png_read_info(),
-followed the set of transformations indicated by the transform mask,
-then png_read_image(), and finally png_read_end().
-
-(The final parameter of this call is not yet used. Someday it might point
-to transformation parameters required by some future input transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_read_png().
-
-After you have called png_read_png(), you can retrieve the image data
-with
-
- row_pointers = png_get_rows(png_ptr, info_ptr);
-
-where row_pointers is an array of pointers to the pixel data for each row:
-
- png_bytep row_pointers[height];
-
-If you know your image size and pixel size ahead of time, you can allocate
-row_pointers prior to calling png_read_png() with
-
- if (height > PNG_UINT_32_MAX/png_sizeof(png_byte))
- png_error (png_ptr,
- "Image is too tall to process in memory");
- if (width > PNG_UINT_32_MAX/pixel_size)
- png_error (png_ptr,
- "Image is too wide to process in memory");
- row_pointers = png_malloc(png_ptr,
- height*png_sizeof(png_bytep));
- for (int i=0; i<height, i++)
- row_pointers[i]=png_malloc(png_ptr,
- width*pixel_size);
- png_set_rows(png_ptr, info_ptr, &row_pointers);
-
-Alternatively you could allocate your image in one big block and define
-row_pointers[i] to point into the proper places in your block.
-
-If you use png_set_rows(), the application is responsible for freeing
-row_pointers (and row_pointers[i], if they were separately allocated).
-
-If you don't allocate row_pointers ahead of time, png_read_png() will
-do it, and it'll be free'ed when you call png_destroy_*().
-
-The low-level read interface
-
-If you are going the low-level route, you are now ready to read all
-the file information up to the actual image data. You do this with a
-call to png_read_info().
-
- png_read_info(png_ptr, info_ptr);
-
-This will process all chunks up to but not including the image data.
-
-Querying the info structure
-
-Functions are used to get the information from the info_ptr once it
-has been read. Note that these fields may not be completely filled
-in until png_read_end() has read the chunk data following the image.
-
- png_get_IHDR(png_ptr, info_ptr, &width, &height,
- &bit_depth, &color_type, &interlace_type,
- &compression_type, &filter_method);
-
- width - holds the width of the image
- in pixels (up to 2^31).
- height - holds the height of the image
- in pixels (up to 2^31).
- bit_depth - holds the bit depth of one of the
- image channels. (valid values are
- 1, 2, 4, 8, 16 and depend also on
- the color_type. See also
- significant bits (sBIT) below).
- color_type - describes which color/alpha channels
- are present.
- PNG_COLOR_TYPE_GRAY
- (bit depths 1, 2, 4, 8, 16)
- PNG_COLOR_TYPE_GRAY_ALPHA
- (bit depths 8, 16)
- PNG_COLOR_TYPE_PALETTE
- (bit depths 1, 2, 4, 8)
- PNG_COLOR_TYPE_RGB
- (bit_depths 8, 16)
- PNG_COLOR_TYPE_RGB_ALPHA
- (bit_depths 8, 16)
-
- PNG_COLOR_MASK_PALETTE
- PNG_COLOR_MASK_COLOR
- PNG_COLOR_MASK_ALPHA
-
- filter_method - (must be PNG_FILTER_TYPE_BASE
- for PNG 1.0, and can also be
- PNG_INTRAPIXEL_DIFFERENCING if
- the PNG datastream is embedded in
- a MNG-1.0 datastream)
- compression_type - (must be PNG_COMPRESSION_TYPE_BASE
- for PNG 1.0)
- interlace_type - (PNG_INTERLACE_NONE or
- PNG_INTERLACE_ADAM7)
- Any or all of interlace_type, compression_type, of
- filter_method can be NULL if you are
- not interested in their values.
-
- channels = png_get_channels(png_ptr, info_ptr);
- channels - number of channels of info for the
- color type (valid values are 1 (GRAY,
- PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
- 4 (RGB_ALPHA or RGB + filler byte))
- rowbytes = png_get_rowbytes(png_ptr, info_ptr);
- rowbytes - number of bytes needed to hold a row
-
- signature = png_get_signature(png_ptr, info_ptr);
- signature - holds the signature read from the
- file (if any). The data is kept in
- the same offset it would be if the
- whole signature were read (i.e. if an
- application had already read in 4
- bytes of signature before starting
- libpng, the remaining 4 bytes would
- be in signature[4] through signature[7]
- (see png_set_sig_bytes())).
-
-
- width = png_get_image_width(png_ptr,
- info_ptr);
- height = png_get_image_height(png_ptr,
- info_ptr);
- bit_depth = png_get_bit_depth(png_ptr,
- info_ptr);
- color_type = png_get_color_type(png_ptr,
- info_ptr);
- filter_method = png_get_filter_type(png_ptr,
- info_ptr);
- compression_type = png_get_compression_type(png_ptr,
- info_ptr);
- interlace_type = png_get_interlace_type(png_ptr,
- info_ptr);
-
-
-These are also important, but their validity depends on whether the chunk
-has been read. The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
-png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
-data has been read, or zero if it is missing. The parameters to the
-png_get_<chunk> are set directly if they are simple data types, or a pointer
-into the info_ptr is returned for any complex types.
-
- png_get_PLTE(png_ptr, info_ptr, &palette,
- &num_palette);
- palette - the palette for the file
- (array of png_color)
- num_palette - number of entries in the palette
-
- png_get_gAMA(png_ptr, info_ptr, &gamma);
- gamma - the gamma the file is written
- at (PNG_INFO_gAMA)
-
- png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
- srgb_intent - the rendering intent (PNG_INFO_sRGB)
- The presence of the sRGB chunk
- means that the pixel data is in the
- sRGB color space. This chunk also
- implies specific values of gAMA and
- cHRM.
-
- png_get_iCCP(png_ptr, info_ptr, &name,
- &compression_type, &profile, &proflen);
- name - The profile name.
- compression - The compression type; always
- PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
- You may give NULL to this argument to
- ignore it.
- profile - International Color Consortium color
- profile data. May contain NULs.
- proflen - length of profile data in bytes.
-
- png_get_sBIT(png_ptr, info_ptr, &sig_bit);
- sig_bit - the number of significant bits for
- (PNG_INFO_sBIT) each of the gray,
- red, green, and blue channels,
- whichever are appropriate for the
- given color type (png_color_16)
-
- png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans,
- &trans_values);
- trans - array of transparent entries for
- palette (PNG_INFO_tRNS)
- trans_values - graylevel or color sample values of
- the single transparent color for
- non-paletted images (PNG_INFO_tRNS)
- num_trans - number of transparent entries
- (PNG_INFO_tRNS)
-
- png_get_hIST(png_ptr, info_ptr, &hist);
- (PNG_INFO_hIST)
- hist - histogram of palette (array of
- png_uint_16)
-
- png_get_tIME(png_ptr, info_ptr, &mod_time);
- mod_time - time image was last modified
- (PNG_VALID_tIME)
-
- png_get_bKGD(png_ptr, info_ptr, &background);
- background - background color (PNG_VALID_bKGD)
- valid 16-bit red, green and blue
- values, regardless of color_type
-
- num_comments = png_get_text(png_ptr, info_ptr,
- &text_ptr, &num_text);
- num_comments - number of comments
- text_ptr - array of png_text holding image
- comments
- text_ptr[i].compression - type of compression used
- on "text" PNG_TEXT_COMPRESSION_NONE
- PNG_TEXT_COMPRESSION_zTXt
- PNG_ITXT_COMPRESSION_NONE
- PNG_ITXT_COMPRESSION_zTXt
- text_ptr[i].key - keyword for comment. Must contain
- 1-79 characters.
- text_ptr[i].text - text comments for current
- keyword. Can be empty.
- text_ptr[i].text_length - length of text string,
- after decompression, 0 for iTXt
- text_ptr[i].itxt_length - length of itxt string,
- after decompression, 0 for tEXt/zTXt
- text_ptr[i].lang - language of comment (empty
- string for unknown).
- text_ptr[i].lang_key - keyword in UTF-8
- (empty string for unknown).
- num_text - number of comments (same as
- num_comments; you can put NULL here
- to avoid the duplication)
- Note while png_set_text() will accept text, language,
- and translated keywords that can be NULL pointers, the
- structure returned by png_get_text will always contain
- regular zero-terminated C strings. They might be
- empty strings but they will never be NULL pointers.
-
- num_spalettes = png_get_sPLT(png_ptr, info_ptr,
- &palette_ptr);
- palette_ptr - array of palette structures holding
- contents of one or more sPLT chunks
- read.
- num_spalettes - number of sPLT chunks read.
-
- png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
- &unit_type);
- offset_x - positive offset from the left edge
- of the screen
- offset_y - positive offset from the top edge
- of the screen
- unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
- png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
- &unit_type);
- res_x - pixels/unit physical resolution in
- x direction
- res_y - pixels/unit physical resolution in
- x direction
- unit_type - PNG_RESOLUTION_UNKNOWN,
- PNG_RESOLUTION_METER
-
- png_get_sCAL(png_ptr, info_ptr, &unit, &width,
- &height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are doubles)
-
- png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
- &height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are strings like "2.54")
-
- num_unknown_chunks = png_get_unknown_chunks(png_ptr,
- info_ptr, &unknowns)
- unknowns - array of png_unknown_chunk
- structures holding unknown chunks
- unknowns[i].name - name of unknown chunk
- unknowns[i].data - data of unknown chunk
- unknowns[i].size - size of unknown chunk's data
- unknowns[i].location - position of chunk in file
-
- The value of "i" corresponds to the order in which the
- chunks were read from the PNG file or inserted with the
- png_set_unknown_chunks() function.
-
-The data from the pHYs chunk can be retrieved in several convenient
-forms:
-
- res_x = png_get_x_pixels_per_meter(png_ptr,
- info_ptr)
- res_y = png_get_y_pixels_per_meter(png_ptr,
- info_ptr)
- res_x_and_y = png_get_pixels_per_meter(png_ptr,
- info_ptr)
- res_x = png_get_x_pixels_per_inch(png_ptr,
- info_ptr)
- res_y = png_get_y_pixels_per_inch(png_ptr,
- info_ptr)
- res_x_and_y = png_get_pixels_per_inch(png_ptr,
- info_ptr)
- aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
- info_ptr)
-
- (Each of these returns 0 [signifying "unknown"] if
- the data is not present or if res_x is 0;
- res_x_and_y is 0 if res_x != res_y)
-
-The data from the oFFs chunk can be retrieved in several convenient
-forms:
-
- x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
- y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
- x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
- y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
-
- (Each of these returns 0 [signifying "unknown" if both
- x and y are 0] if the data is not present or if the
- chunk is present but the unit is the pixel)
-
-For more information, see the png_info definition in png.h and the
-PNG specification for chunk contents. Be careful with trusting
-rowbytes, as some of the transformations could increase the space
-needed to hold a row (expand, filler, gray_to_rgb, etc.).
-See png_read_update_info(), below.
-
-A quick word about text_ptr and num_text. PNG stores comments in
-keyword/text pairs, one pair per chunk, with no limit on the number
-of text chunks, and a 2^31 byte limit on their size. While there are
-suggested keywords, there is no requirement to restrict the use to these
-strings. It is strongly suggested that keywords and text be sensible
-to humans (that's the point), so don't use abbreviations. Non-printing
-symbols are not allowed. See the PNG specification for more details.
-There is also no requirement to have text after the keyword.
-
-Keywords should be limited to 79 Latin-1 characters without leading or
-trailing spaces, but non-consecutive spaces are allowed within the
-keyword. It is possible to have the same keyword any number of times.
-The text_ptr is an array of png_text structures, each holding a
-pointer to a language string, a pointer to a keyword and a pointer to
-a text string. The text string, language code, and translated
-keyword may be empty or NULL pointers. The keyword/text
-pairs are put into the array in the order that they are received.
-However, some or all of the text chunks may be after the image, so, to
-make sure you have read all the text chunks, don't mess with these
-until after you read the stuff after the image. This will be
-mentioned again below in the discussion that goes with png_read_end().
-
-Input transformations
-
-After you've read the header information, you can set up the library
-to handle any special transformations of the image data. The various
-ways to transform the data will be described in the order that they
-should occur. This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths. Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data. For example, don't swap red and blue on grayscale data.
-
-The colors used for the background and transparency values should be
-supplied in the same format/depth as the current image data. They
-are stored in the same format/depth as the image data in a bKGD or tRNS
-chunk, so this is what libpng expects for this data. The colors are
-transformed to keep in sync with the image data when an application
-calls the png_read_update_info() routine (see below).
-
-Data will be decoded into the supplied row buffers packed into bytes
-unless the library has been told to transform it into another format.
-For example, 4 bit/pixel paletted or grayscale data will be returned
-2 pixels/byte with the leftmost pixel in the high-order bits of the
-byte, unless png_set_packing() is called. 8-bit RGB data will be stored
-in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
-is called to insert filler bytes, either before or after each RGB triplet.
-16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
-byte of the color value first, unless png_set_strip_16() is called to
-transform it to regular RGB RGB triplets, or png_set_filler() or
-png_set_add alpha() is called to insert filler bytes, either before or
-after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
-be modified with
-png_set_filler(), png_set_add_alpha(), or png_set_strip_16().
-
-The following code transforms grayscale images of less than 8 to 8 bits,
-changes paletted images to RGB, and adds a full alpha channel if there is
-transparency information in a tRNS chunk. This is most useful on
-grayscale images with bit depths of 2 or 4 or if there is a multiple-image
-viewing application that wishes to treat all images in the same way.
-
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- png_set_palette_to_rgb(png_ptr);
-
- if (color_type == PNG_COLOR_TYPE_GRAY &&
- bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
-
- if (png_get_valid(png_ptr, info_ptr,
- PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
-
-These three functions are actually aliases for png_set_expand(), added
-in libpng version 1.0.4, with the function names expanded to improve code
-readability. In some future version they may actually do different
-things.
-
-As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
-added. It expands the sample depth without changing tRNS to alpha.
-At the same time, png_set_gray_1_2_4_to_8() was deprecated, and it
-will be removed from a future version.
-
-
-PNG can have files with 16 bits per channel. If you only can handle
-8 bits per channel, this will strip the pixels down to 8 bit.
-
- if (bit_depth == 16)
- png_set_strip_16(png_ptr);
-
-If, for some reason, you don't need the alpha channel on an image,
-and you want to remove it rather than combining it with the background
-(but the image author certainly had in mind that you *would* combine
-it with the background, so that's what you should probably do):
-
- if (color_type & PNG_COLOR_MASK_ALPHA)
- png_set_strip_alpha(png_ptr);
-
-In PNG files, the alpha channel in an image
-is the level of opacity. If you need the alpha channel in an image to
-be the level of transparency instead of opacity, you can invert the
-alpha channel (or the tRNS chunk data) after it's read, so that 0 is
-fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
-images) is fully transparent, with
-
- png_set_invert_alpha(png_ptr);
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit
-files. This code expands to 1 pixel per byte without changing the
-values of the pixels:
-
- if (bit_depth < 8)
- png_set_packing(png_ptr);
-
-PNG files have possible bit depths of 1, 2, 4, 8, and 16. All pixels
-stored in a PNG image have been "scaled" or "shifted" up to the next
-higher possible bit depth (e.g. from 5 bits/sample in the range [0,31] to
-8 bits/sample in the range [0, 255]). However, it is also possible to
-convert the PNG pixel data back to the original bit depth of the image.
-This call reduces the pixels back down to the original bit depth:
-
- png_color_8p sig_bit;
-
- if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
- png_set_shift(png_ptr, sig_bit);
-
-PNG files store 3-color pixels in red, green, blue order. This code
-changes the storage of the pixels to blue, green, red:
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_bgr(png_ptr);
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
-into 4 or 8 bytes for windowing systems that need them in this format:
-
- if (color_type == PNG_COLOR_TYPE_RGB)
- png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
-
-where "filler" is the 8 or 16-bit number to fill with, and the location is
-either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
-you want the filler before the RGB or after. This transformation
-does not affect images that already have full alpha channels. To add an
-opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
-will generate RGBA pixels.
-
-Note that png_set_filler() does not change the color type. If you want
-to do that, you can add a true alpha channel with
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_GRAY)
- png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
-
-where "filler" contains the alpha value to assign to each pixel.
-This function was added in libpng-1.2.7.
-
-If you are reading an image with an alpha channel, and you need the
-data as ARGB instead of the normal PNG format RGBA:
-
- if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_swap_alpha(png_ptr);
-
-For some uses, you may want a grayscale image to be represented as
-RGB. This code will do that conversion:
-
- if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_gray_to_rgb(png_ptr);
-
-Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
-with alpha.
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_rgb_to_gray_fixed(png_ptr, error_action,
- int red_weight, int green_weight);
-
- error_action = 1: silently do the conversion
- error_action = 2: issue a warning if the original
- image has any pixel where
- red != green or red != blue
- error_action = 3: issue an error and abort the
- conversion if the original
- image has any pixel where
- red != green or red != blue
-
- red_weight: weight of red component times 100000
- green_weight: weight of green component times 100000
- If either weight is negative, default
- weights (21268, 71514) are used.
-
-If you have set error_action = 1 or 2, you can
-later check whether the image really was gray, after processing
-the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
-It will return a png_byte that is zero if the image was gray or
-1 if there were any non-gray pixels. bKGD and sBIT data
-will be silently converted to grayscale, using the green channel
-data, regardless of the error_action setting.
-
-With red_weight+green_weight<=100000,
-the normalized graylevel is computed:
-
- int rw = red_weight * 65536;
- int gw = green_weight * 65536;
- int bw = 65536 - (rw + gw);
- gray = (rw*red + gw*green + bw*blue)/65536;
-
-The default values approximate those recommended in the Charles
-Poynton's Color FAQ, <http://www.inforamp.net/~poynton/>
-Copyright (c) 1998-01-04 Charles Poynton <poynton at inforamp.net>
-
- Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
-
-Libpng approximates this with
-
- Y = 0.21268 * R + 0.7151 * G + 0.07217 * B
-
-which can be expressed with integers as
-
- Y = (6969 * R + 23434 * G + 2365 * B)/32768
-
-The calculation is done in a linear colorspace, if the image gamma
-is known.
-
-If you have a grayscale and you are using png_set_expand_depth(),
-png_set_expand(), or png_set_gray_to_rgb to change to truecolor or to
-a higher bit-depth, you must either supply the background color as a gray
-value at the original file bit-depth (need_expand = 1) or else supply the
-background color as an RGB triplet at the final, expanded bit depth
-(need_expand = 0). Similarly, if you are reading a paletted image, you
-must either supply the background color as a palette index (need_expand = 1)
-or as an RGB triplet that may or may not be in the palette (need_expand = 0).
-
- png_color_16 my_background;
- png_color_16p image_background;
-
- if (png_get_bKGD(png_ptr, info_ptr, &image_background))
- png_set_background(png_ptr, image_background,
- PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
- else
- png_set_background(png_ptr, &my_background,
- PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
-
-The png_set_background() function tells libpng to composite images
-with alpha or simple transparency against the supplied background
-color. If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
-you may use this color, or supply another color more suitable for
-the current display (e.g., the background color from a web page). You
-need to tell libpng whether the color is in the gamma space of the
-display (PNG_BACKGROUND_GAMMA_SCREEN for colors you supply), the file
-(PNG_BACKGROUND_GAMMA_FILE for colors from the bKGD chunk), or one
-that is neither of these gammas (PNG_BACKGROUND_GAMMA_UNIQUE - I don't
-know why anyone would use this, but it's here).
-
-To properly display PNG images on any kind of system, the application needs
-to know what the display gamma is. Ideally, the user will know this, and
-the application will allow them to set it. One method of allowing the user
-to set the display gamma separately for each system is to check for a
-SCREEN_GAMMA or DISPLAY_GAMMA environment variable, which will hopefully be
-correctly set.
-
-Note that display_gamma is the overall gamma correction required to produce
-pleasing results, which depends on the lighting conditions in the surrounding
-environment. In a dim or brightly lit room, no compensation other than
-the physical gamma exponent of the monitor is needed, while in a dark room
-a slightly smaller exponent is better.
-
- double gamma, screen_gamma;
-
- if (/* We have a user-defined screen
- gamma value */)
- {
- screen_gamma = user_defined_screen_gamma;
- }
- /* One way that applications can share the same
- screen gamma value */
- else if ((gamma_str = getenv("SCREEN_GAMMA"))
- != NULL)
- {
- screen_gamma = (double)atof(gamma_str);
- }
- /* If we don't have another value */
- else
- {
- screen_gamma = 2.2; /* A good guess for a
- PC monitor in a bright office or a dim room */
- screen_gamma = 2.0; /* A good guess for a
- PC monitor in a dark room */
- screen_gamma = 1.7 or 1.0; /* A good
- guess for Mac systems */
- }
-
-The png_set_gamma() function handles gamma transformations of the data.
-Pass both the file gamma and the current screen_gamma. If the file does
-not have a gamma value, you can pass one anyway if you have an idea what
-it is (usually 0.45455 is a good guess for GIF images on PCs). Note
-that file gammas are inverted from screen gammas. See the discussions
-on gamma in the PNG specification for an excellent description of what
-gamma is, and why all applications should support it. It is strongly
-recommended that PNG viewers support gamma correction.
-
- if (png_get_gAMA(png_ptr, info_ptr, &gamma))
- png_set_gamma(png_ptr, screen_gamma, gamma);
- else
- png_set_gamma(png_ptr, screen_gamma, 0.45455);
-
-If you need to reduce an RGB file to a paletted file, or if a paletted
-file has more entries then will fit on your screen, png_set_dither()
-will do that. Note that this is a simple match dither that merely
-finds the closest color available. This should work fairly well with
-optimized palettes, and fairly badly with linear color cubes. If you
-pass a palette that is larger then maximum_colors, the file will
-reduce the number of colors in the palette so it will fit into
-maximum_colors. If there is a histogram, it will use it to make
-more intelligent choices when reducing the palette. If there is no
-histogram, it may not do as good a job.
-
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- if (png_get_valid(png_ptr, info_ptr,
- PNG_INFO_PLTE))
- {
- png_uint_16p histogram = NULL;
-
- png_get_hIST(png_ptr, info_ptr,
- &histogram);
- png_set_dither(png_ptr, palette, num_palette,
- max_screen_colors, histogram, 1);
- }
- else
- {
- png_color std_color_cube[MAX_SCREEN_COLORS] =
- { ... colors ... };
-
- png_set_dither(png_ptr, std_color_cube,
- MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
- NULL,0);
- }
- }
-
-PNG files describe monochrome as black being zero and white being one.
-The following code will reverse this (make black be one and white be
-zero):
-
- if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
- png_set_invert_mono(png_ptr);
-
-This function can also be used to invert grayscale and gray-alpha images:
-
- if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_invert_mono(png_ptr);
-
-PNG files store 16 bit pixels in network byte order (big-endian,
-ie. most significant bits first). This code changes the storage to the
-other way (little-endian, i.e. least significant bits first, the
-way PCs store them):
-
- if (bit_depth == 16)
- png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
- if (bit_depth < 8)
- png_set_packswap(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs. This is done by setting a callback
-with
-
- png_set_read_user_transform_fn(png_ptr,
- read_transform_fn);
-
-You must supply the function
-
- void read_transform_fn(png_ptr ptr, row_info_ptr
- row_info, png_bytep data)
-
-See pngtest.c for a working example. Your function will be called
-after all of the other transformations have been processed.
-
-You can also set up a pointer to a user structure for use by your
-callback function, and you can inform libpng that your transform
-function will change the number of channels or bit depth with the
-function
-
- png_set_user_transform_info(png_ptr, user_ptr,
- user_depth, user_channels);
-
-The user's application, not libpng, is responsible for allocating and
-freeing any memory required for the user structure.
-
-You can retrieve the pointer via the function
-png_get_user_transform_ptr(). For example:
-
- voidp read_user_transform_ptr =
- png_get_user_transform_ptr(png_ptr);
-
-The last thing to handle is interlacing; this is covered in detail below,
-but you must call the function here if you want libpng to handle expansion
-of the interlaced image.
-
- number_of_passes = png_set_interlace_handling(png_ptr);
-
-After setting the transformations, libpng can update your png_info
-structure to reflect any transformations you've requested with this
-call. This is most useful to update the info structure's rowbytes
-field so you can use it to allocate your image memory. This function
-will also update your palette with the correct screen_gamma and
-background if these have been given with the calls above.
-
- png_read_update_info(png_ptr, info_ptr);
-
-After you call png_read_update_info(), you can allocate any
-memory you need to hold the image. The row data is simply
-raw byte data for all forms of images. As the actual allocation
-varies among applications, no example will be given. If you
-are allocating one large chunk, you will need to build an
-array of pointers to each row, as it will be needed for some
-of the functions below.
-
-Reading image data
-
-After you've allocated memory, you can read the image data.
-The simplest way to do this is in one function call. If you are
-allocating enough memory to hold the whole image, you can just
-call png_read_image() and libpng will read in all the image data
-and put it in the memory area supplied. You will need to pass in
-an array of pointers to each row.
-
-This function automatically handles interlacing, so you don't need
-to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_read_rows().
-
- png_read_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
- png_bytep row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to read in the whole image at once, you can
-use png_read_rows() instead. If there is no interlacing (check
-interlace_type == PNG_INTERLACE_NONE), this is simple:
-
- png_read_rows(png_ptr, row_pointers, NULL,
- number_of_rows);
-
-where row_pointers is the same as in the png_read_image() call.
-
-If you are doing this just one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
- png_bytep row_pointer = row;
- png_read_row(png_ptr, row_pointer, NULL);
-
-If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
-get somewhat harder. The only current (PNG Specification version 1.2)
-interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7)
-is a somewhat complicated 2D interlace scheme, known as Adam7, that
-breaks down an image into seven smaller images of varying size, based
-on an 8x8 grid.
-
-libpng can fill out those images or it can give them to you "as is".
-If you want them filled out, there are two ways to do that. The one
-mentioned in the PNG specification is to expand each pixel to cover
-those pixels that have not been read yet (the "rectangle" method).
-This results in a blocky image for the first pass, which gradually
-smooths out as more pixels are read. The other method is the "sparkle"
-method, where pixels are drawn only in their final locations, with the
-rest of the image remaining whatever colors they were initialized to
-before the start of the read. The first method usually looks better,
-but tends to be slower, as there are more pixels to put in the rows.
-
-If you don't want libpng to handle the interlacing details, just call
-png_read_rows() seven times to read in all seven images. Each of the
-images is a valid image by itself, or they can all be combined on an
-8x8 grid to form a single image (although if you intend to combine them
-you would be far better off using the libpng interlace handling).
-
-The first pass will return an image 1/8 as wide as the entire image
-(every 8th column starting in column 0) and 1/8 as high as the original
-(every 8th row starting in row 0), the second will be 1/8 as wide
-(starting in column 4) and 1/8 as high (also starting in row 0). The
-third pass will be 1/4 as wide (every 4th pixel starting in column 0) and
-1/8 as high (every 8th row starting in row 4), and the fourth pass will
-be 1/4 as wide and 1/4 as high (every 4th column starting in column 2,
-and every 4th row starting in row 0). The fifth pass will return an
-image 1/2 as wide, and 1/4 as high (starting at column 0 and row 2),
-while the sixth pass will be 1/2 as wide and 1/2 as high as the original
-(starting in column 1 and row 0). The seventh and final pass will be as
-wide as the original, and 1/2 as high, containing all of the odd
-numbered scanlines. Phew!
-
-If you want libpng to expand the images, call this before calling
-png_start_read_image() or png_read_update_info():
-
- if (interlace_type == PNG_INTERLACE_ADAM7)
- number_of_passes
- = png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed. Currently, this
-is seven, but may change if another interlace type is added.
-This function can be called even if the file is not interlaced,
-where it will return one pass.
-
-If you are not going to display the image after each pass, but are
-going to wait until the entire image is read in, use the sparkle
-effect. This effect is faster and the end result of either method
-is exactly the same. If you are planning on displaying the image
-after each pass, the "rectangle" effect is generally considered the
-better looking one.
-
-If you only want the "sparkle" effect, just call png_read_rows() as
-normal, with the third parameter NULL. Make sure you make pass over
-the image number_of_passes times, and you don't change the data in the
-rows between calls. You can change the locations of the data, just
-not the data. Each pass only writes the pixels appropriate for that
-pass, and assumes the data from previous passes is still valid.
-
- png_read_rows(png_ptr, row_pointers, NULL,
- number_of_rows);
-
-If you only want the first effect (the rectangles), do the same as
-before except pass the row buffer in the third parameter, and leave
-the second parameter NULL.
-
- png_read_rows(png_ptr, NULL, row_pointers,
- number_of_rows);
-
-Finishing a sequential read
-
-After you are finished reading the image through the
-low-level interface, you can finish reading the file. If you are
-interested in comments or time, which may be stored either before or
-after the image data, you should pass the separate png_info struct if
-you want to keep the comments from before and after the image
-separate. If you are not interested, you can pass NULL.
-
- png_read_end(png_ptr, end_info);
-
-When you are done, you can free all memory allocated by libpng like this:
-
- png_destroy_read_struct(&png_ptr, &info_ptr,
- &end_info);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
- png_free_data(png_ptr, info_ptr, mask, seq)
- mask - identifies data to be freed, a mask
- containing the bitwise OR of one or
- more of
- PNG_FREE_PLTE, PNG_FREE_TRNS,
- PNG_FREE_HIST, PNG_FREE_ICCP,
- PNG_FREE_PCAL, PNG_FREE_ROWS,
- PNG_FREE_SCAL, PNG_FREE_SPLT,
- PNG_FREE_TEXT, PNG_FREE_UNKN,
- or simply PNG_FREE_ALL
- seq - sequence number of item to be freed
- (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng, and will in those
-cases do nothing. The "seq" parameter is ignored if only one item
-of the selected data type, such as PLTE, is allowed. If "seq" is not
--1, and multiple items are allowed for the data type identified in
-the mask, such as text or sPLT, only the n'th item in the structure
-is freed, where n is "seq".
-
-The default behavior is only to free data that was allocated internally
-by libpng. This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_zalloc() and passed in via a png_set_*() function, with
-
- png_data_freer(png_ptr, info_ptr, freer, mask)
- mask - which data elements are affected
- same choices as in png_free_data()
- freer - one of
- PNG_DESTROY_WILL_FREE_DATA
- PNG_SET_WILL_FREE_DATA
- PNG_USER_WILL_FREE_DATA
-
-This function only affects data that has already been allocated.
-You can call this function after reading the PNG data but before calling
-any png_set_*() functions, to control whether the user or the png_set_*()
-function is responsible for freeing any existing data that might be present,
-and again after the png_set_*() functions to control whether the user
-or png_destroy_*() is supposed to free the data. When the user assumes
-responsibility for libpng-allocated data, the application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_zalloc() to allocate it.
-
-If you allocated your row_pointers in a single block, as suggested above in
-the description of the high level read interface, you must not transfer
-responsibility for freeing it to the png_set_rows or png_read_destroy function,
-because they would also try to free the individual row_pointers[i].
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key. Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-
-The png_free_data() function will turn off the "valid" flag for anything
-it frees. If you need to turn the flag off for a chunk that was freed by your
-application instead of by libpng, you can use
-
- png_set_invalid(png_ptr, info_ptr, mask);
- mask - identifies the chunks to be made invalid,
- containing the bitwise OR of one or
- more of
- PNG_INFO_gAMA, PNG_INFO_sBIT,
- PNG_INFO_cHRM, PNG_INFO_PLTE,
- PNG_INFO_tRNS, PNG_INFO_bKGD,
- PNG_INFO_hIST, PNG_INFO_pHYs,
- PNG_INFO_oFFs, PNG_INFO_tIME,
- PNG_INFO_pCAL, PNG_INFO_sRGB,
- PNG_INFO_iCCP, PNG_INFO_sPLT,
- PNG_INFO_sCAL, PNG_INFO_IDAT
-
-For a more compact example of reading a PNG image, see the file example.c.
-
-Reading PNG files progressively
-
-The progressive reader is slightly different then the non-progressive
-reader. Instead of calling png_read_info(), png_read_rows(), and
-png_read_end(), you make one call to png_process_data(), which calls
-callbacks when it has the info, a row, or the end of the image. You
-set up these callbacks with png_set_progressive_read_fn(). You don't
-have to worry about the input/output functions of libpng, as you are
-giving the library the data directly in png_process_data(). I will
-assume that you have read the section on reading PNG files above,
-so I will only highlight the differences (although I will show
-all of the code).
-
-png_structp png_ptr;
-png_infop info_ptr;
-
- /* An example code fragment of how you would
- initialize the progressive reader in your
- application. */
- int
- initialize_png_reader()
- {
- png_ptr = png_create_read_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
- info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_read_struct(&png_ptr, (png_infopp)NULL,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- /* This one's new. You can provide functions
- to be called when the header info is valid,
- when each row is completed, and when the image
- is finished. If you aren't using all functions,
- you can specify NULL parameters. Even when all
- three functions are NULL, you need to call
- png_set_progressive_read_fn(). You can use
- any struct as the user_ptr (cast to a void pointer
- for the function call), and retrieve the pointer
- from inside the callbacks using the function
-
- png_get_progressive_ptr(png_ptr);
-
- which will return a void pointer, which you have
- to cast appropriately.
- */
- png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
- info_callback, row_callback, end_callback);
-
- return 0;
- }
-
- /* A code fragment that you call as you receive blocks
- of data */
- int
- process_data(png_bytep buffer, png_uint_32 length)
- {
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- /* This one's new also. Simply give it a chunk
- of data from the file stream (in order, of
- course). On machines with segmented memory
- models machines, don't give it any more than
- 64K. The library seems to run fine with sizes
- of 4K. Although you can give it much less if
- necessary (I assume you can give it chunks of
- 1 byte, I haven't tried less then 256 bytes
- yet). When this function returns, you may
- want to display any rows that were generated
- in the row callback if you don't already do
- so there.
- */
- png_process_data(png_ptr, info_ptr, buffer, length);
- return 0;
- }
-
- /* This function is called (as set by
- png_set_progressive_read_fn() above) when enough data
- has been supplied so all of the header has been
- read.
- */
- void
- info_callback(png_structp png_ptr, png_infop info)
- {
- /* Do any setup here, including setting any of
- the transformations mentioned in the Reading
- PNG files section. For now, you _must_ call
- either png_start_read_image() or
- png_read_update_info() after all the
- transformations are set (even if you don't set
- any). You may start getting rows before
- png_process_data() returns, so this is your
- last chance to prepare for that.
- */
- }
-
- /* This function is called when each row of image
- data is complete */
- void
- row_callback(png_structp png_ptr, png_bytep new_row,
- png_uint_32 row_num, int pass)
- {
- /* If the image is interlaced, and you turned
- on the interlace handler, this function will
- be called for every row in every pass. Some
- of these rows will not be changed from the
- previous pass. When the row is not changed,
- the new_row variable will be NULL. The rows
- and passes are called in order, so you don't
- really need the row_num and pass, but I'm
- supplying them because it may make your life
- easier.
-
- For the non-NULL rows of interlaced images,
- you must call png_progressive_combine_row()
- passing in the row and the old row. You can
- call this function for NULL rows (it will just
- return) and for non-interlaced images (it just
- does the memcpy for you) if it will make the
- code easier. Thus, you can just do this for
- all cases:
- */
-
- png_progressive_combine_row(png_ptr, old_row,
- new_row);
-
- /* where old_row is what was displayed for
- previously for the row. Note that the first
- pass (pass == 0, really) will completely cover
- the old row, so the rows do not have to be
- initialized. After the first pass (and only
- for interlaced images), you will have to pass
- the current row, and the function will combine
- the old row and the new row.
- */
- }
-
- void
- end_callback(png_structp png_ptr, png_infop info)
- {
- /* This function is called after the whole image
- has been read, including any chunks after the
- image (up to and including the IEND). You
- will usually have the same info chunk as you
- had in the header, although some data may have
- been added to the comments and time fields.
-
- Most people won't do much here, perhaps setting
- a flag that marks the image as finished.
- */
- }
-
-
-
-IV. Writing
-
-Much of this is very similar to reading. However, everything of
-importance is repeated here, so you won't have to constantly look
-back up in the reading section to understand writing.
-
-Setup
-
-You will want to do the I/O initialization before you get into libpng,
-so if it doesn't work, you don't have anything to undo. If you are not
-using the standard I/O functions, you will need to replace them with
-custom writing functions. See the discussion under Customizing libpng.
-
- FILE *fp = fopen(file_name, "wb");
- if (!fp)
- {
- return (ERROR);
- }
-
-Next, png_struct and png_info need to be allocated and initialized.
-As these can be both relatively large, you may not want to store these
-on the stack, unless you have stack space to spare. Of course, you
-will want to check if they return NULL. If you are also reading,
-you won't want to name your read structure and your write structure
-both "png_ptr"; you can call them anything you like, such as
-"read_ptr" and "write_ptr". Look at pngtest.c, for example.
-
- png_structp png_ptr = png_create_write_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_write_struct(&png_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_write_struct_2() instead of png_create_write_struct():
-
- png_structp png_ptr = png_create_write_struct_2
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn, (png_voidp)
- user_mem_ptr, user_malloc_fn, user_free_fn);
-
-After you have these structures, you will need to set up the
-error handling. When libpng encounters an error, it expects to
-longjmp() back to your routine. Therefore, you will need to call
-setjmp() and pass the png_jmpbuf(png_ptr). If you
-write the file from different routines, you will need to update
-the png_jmpbuf(png_ptr) every time you enter a new routine that will
-call a png_*() function. See your documentation of setjmp/longjmp
-for your compiler for more information on setjmp/longjmp. See
-the discussion on libpng error handling in the Customizing Libpng
-section below for more information on the libpng error handling.
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_write_struct(&png_ptr, &info_ptr);
- fclose(fp);
- return (ERROR);
- }
- ...
- return;
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-Now you need to set up the output code. The default for libpng is to
-use the C function fwrite(). If you use this, you will need to pass a
-valid FILE * in the function png_init_io(). Be sure that the file is
-opened in binary mode. Again, if you wish to handle writing data in
-another way, see the discussion on libpng I/O handling in the Customizing
-Libpng section below.
-
- png_init_io(png_ptr, fp);
-
-If you are embedding your PNG into a datastream such as MNG, and don't
-want libpng to write the 8-byte signature, or if you have already
-written the signature in your application, use
-
- png_set_sig_bytes(png_ptr, 8);
-
-to inform libpng that it should not write a signature.
-
-Write callbacks
-
-At this point, you can set up a callback function that will be
-called after each row has been written, which you can use to control
-a progress meter or the like. It's demonstrated in pngtest.c.
-You must supply a function
-
- void write_row_callback(png_ptr, png_uint_32 row,
- int pass);
- {
- /* put your code here */
- }
-
-(You can give it another name that you like instead of "write_row_callback")
-
-To inform libpng about your function, use
-
- png_set_write_status_fn(png_ptr, write_row_callback);
-
-You now have the option of modifying how the compression library will
-run. The following functions are mainly for testing, but may be useful
-in some cases, like if you need to write PNG files extremely fast and
-are willing to give up some compression, or if you want to get the
-maximum possible compression at the expense of slower writing. If you
-have no special needs in this area, let the library do what it wants by
-not calling this function at all, as it has been tuned to deliver a good
-speed/compression ratio. The second parameter to png_set_filter() is
-the filter method, for which the only valid values are 0 (as of the
-July 1999 PNG specification, version 1.2) or 64 (if you are writing
-a PNG datastream that is to be embedded in a MNG datastream). The third
-parameter is a flag that indicates which filter type(s) are to be tested
-for each scanline. See the PNG specification for details on the specific filter
-types.
-
-
- /* turn on or off filtering, and/or choose
- specific filters. You can use either a single
- PNG_FILTER_VALUE_NAME or the bitwise OR of one
- or more PNG_FILTER_NAME masks. */
- png_set_filter(png_ptr, 0,
- PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
- PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
- PNG_FILTER_UP | PNG_FILTER_VALUE_UP |
- PNG_FILTER_AVE | PNG_FILTER_VALUE_AVE |
- PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
- PNG_ALL_FILTERS);
-
-If an application
-wants to start and stop using particular filters during compression,
-it should start out with all of the filters (to ensure that the previous
-row of pixels will be stored in case it's needed later), and then add
-and remove them after the start of compression.
-
-If you are writing a PNG datastream that is to be embedded in a MNG
-datastream, the second parameter can be either 0 or 64.
-
-The png_set_compression_*() functions interface to the zlib compression
-library, and should mostly be ignored unless you really know what you are
-doing. The only generally useful call is png_set_compression_level()
-which changes how much time zlib spends on trying to compress the image
-data. See the Compression Library (zlib.h and algorithm.txt, distributed
-with zlib) for details on the compression levels.
-
- /* set the zlib compression level */
- png_set_compression_level(png_ptr,
- Z_BEST_COMPRESSION);
-
- /* set other zlib parameters */
- png_set_compression_mem_level(png_ptr, 8);
- png_set_compression_strategy(png_ptr,
- Z_DEFAULT_STRATEGY);
- png_set_compression_window_bits(png_ptr, 15);
- png_set_compression_method(png_ptr, 8);
- png_set_compression_buffer_size(png_ptr, 8192)
-
-extern PNG_EXPORT(void,png_set_zbuf_size)
-
-Setting the contents of info for output
-
-You now need to fill in the png_info structure with all the data you
-wish to write before the actual image. Note that the only thing you
-are allowed to write after the image is the text chunks and the time
-chunk (as of PNG Specification 1.2, anyway). See png_write_end() and
-the latest PNG specification for more information on that. If you
-wish to write them before the image, fill them in now, and flag that
-data as being valid. If you want to wait until after the data, don't
-fill them until png_write_end(). For all the fields in png_info and
-their data types, see png.h. For explanations of what the fields
-contain, see the PNG specification.
-
-Some of the more important parts of the png_info are:
-
- png_set_IHDR(png_ptr, info_ptr, width, height,
- bit_depth, color_type, interlace_type,
- compression_type, filter_method)
- width - holds the width of the image
- in pixels (up to 2^31).
- height - holds the height of the image
- in pixels (up to 2^31).
- bit_depth - holds the bit depth of one of the
- image channels.
- (valid values are 1, 2, 4, 8, 16
- and depend also on the
- color_type. See also significant
- bits (sBIT) below).
- color_type - describes which color/alpha
- channels are present.
- PNG_COLOR_TYPE_GRAY
- (bit depths 1, 2, 4, 8, 16)
- PNG_COLOR_TYPE_GRAY_ALPHA
- (bit depths 8, 16)
- PNG_COLOR_TYPE_PALETTE
- (bit depths 1, 2, 4, 8)
- PNG_COLOR_TYPE_RGB
- (bit_depths 8, 16)
- PNG_COLOR_TYPE_RGB_ALPHA
- (bit_depths 8, 16)
-
- PNG_COLOR_MASK_PALETTE
- PNG_COLOR_MASK_COLOR
- PNG_COLOR_MASK_ALPHA
-
- interlace_type - PNG_INTERLACE_NONE or
- PNG_INTERLACE_ADAM7
- compression_type - (must be
- PNG_COMPRESSION_TYPE_DEFAULT)
- filter_method - (must be PNG_FILTER_TYPE_DEFAULT
- or, if you are writing a PNG to
- be embedded in a MNG datastream,
- can also be
- PNG_INTRAPIXEL_DIFFERENCING)
-
-If you call png_set_IHDR(), the call must appear before any of the
-other png_set_*() functions, which might require access to some of
-the IHDR settings. The remaining png_set_*() functions can be called
-in any order.
-
- png_set_PLTE(png_ptr, info_ptr, palette,
- num_palette);
- palette - the palette for the file
- (array of png_color)
- num_palette - number of entries in the palette
-
- png_set_gAMA(png_ptr, info_ptr, gamma);
- gamma - the gamma the image was created
- at (PNG_INFO_gAMA)
-
- png_set_sRGB(png_ptr, info_ptr, srgb_intent);
- srgb_intent - the rendering intent
- (PNG_INFO_sRGB) The presence of
- the sRGB chunk means that the pixel
- data is in the sRGB color space.
- This chunk also implies specific
- values of gAMA and cHRM. Rendering
- intent is the CSS-1 property that
- has been defined by the International
- Color Consortium
- (http://www.color.org).
- It can be one of
- PNG_sRGB_INTENT_SATURATION,
- PNG_sRGB_INTENT_PERCEPTUAL,
- PNG_sRGB_INTENT_ABSOLUTE, or
- PNG_sRGB_INTENT_RELATIVE.
-
-
- png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
- srgb_intent);
- srgb_intent - the rendering intent
- (PNG_INFO_sRGB) The presence of the
- sRGB chunk means that the pixel
- data is in the sRGB color space.
- This function also causes gAMA and
- cHRM chunks with the specific values
- that are consistent with sRGB to be
- written.
-
- png_set_iCCP(png_ptr, info_ptr, name, compression_type,
- profile, proflen);
- name - The profile name.
- compression - The compression type; always
- PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
- You may give NULL to this argument to
- ignore it.
- profile - International Color Consortium color
- profile data. May contain NULs.
- proflen - length of profile data in bytes.
-
- png_set_sBIT(png_ptr, info_ptr, sig_bit);
- sig_bit - the number of significant bits for
- (PNG_INFO_sBIT) each of the gray, red,
- green, and blue channels, whichever are
- appropriate for the given color type
- (png_color_16)
-
- png_set_tRNS(png_ptr, info_ptr, trans, num_trans,
- trans_values);
- trans - array of transparent entries for
- palette (PNG_INFO_tRNS)
- trans_values - graylevel or color sample values of
- the single transparent color for
- non-paletted images (PNG_INFO_tRNS)
- num_trans - number of transparent entries
- (PNG_INFO_tRNS)
-
- png_set_hIST(png_ptr, info_ptr, hist);
- (PNG_INFO_hIST)
- hist - histogram of palette (array of
- png_uint_16)
-
- png_set_tIME(png_ptr, info_ptr, mod_time);
- mod_time - time image was last modified
- (PNG_VALID_tIME)
-
- png_set_bKGD(png_ptr, info_ptr, background);
- background - background color (PNG_VALID_bKGD)
-
- png_set_text(png_ptr, info_ptr, text_ptr, num_text);
- text_ptr - array of png_text holding image
- comments
- text_ptr[i].compression - type of compression used
- on "text" PNG_TEXT_COMPRESSION_NONE
- PNG_TEXT_COMPRESSION_zTXt
- PNG_ITXT_COMPRESSION_NONE
- PNG_ITXT_COMPRESSION_zTXt
- text_ptr[i].key - keyword for comment. Must contain
- 1-79 characters.
- text_ptr[i].text - text comments for current
- keyword. Can be NULL or empty.
- text_ptr[i].text_length - length of text string,
- after decompression, 0 for iTXt
- text_ptr[i].itxt_length - length of itxt string,
- after decompression, 0 for tEXt/zTXt
- text_ptr[i].lang - language of comment (NULL or
- empty for unknown).
- text_ptr[i].translated_keyword - keyword in UTF-8 (NULL
- or empty for unknown).
- num_text - number of comments
-
- png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
- num_spalettes);
- palette_ptr - array of png_sPLT_struct structures
- to be added to the list of palettes
- in the info structure.
- num_spalettes - number of palette structures to be
- added.
-
- png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
- unit_type);
- offset_x - positive offset from the left
- edge of the screen
- offset_y - positive offset from the top
- edge of the screen
- unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
- png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
- unit_type);
- res_x - pixels/unit physical resolution
- in x direction
- res_y - pixels/unit physical resolution
- in y direction
- unit_type - PNG_RESOLUTION_UNKNOWN,
- PNG_RESOLUTION_METER
-
- png_set_sCAL(png_ptr, info_ptr, unit, width, height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are doubles)
-
- png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are strings like "2.54")
-
- png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
- num_unknowns)
- unknowns - array of png_unknown_chunk
- structures holding unknown chunks
- unknowns[i].name - name of unknown chunk
- unknowns[i].data - data of unknown chunk
- unknowns[i].size - size of unknown chunk's data
- unknowns[i].location - position to write chunk in file
- 0: do not write chunk
- PNG_HAVE_IHDR: before PLTE
- PNG_HAVE_PLTE: before IDAT
- PNG_AFTER_IDAT: after IDAT
-
-The "location" member is set automatically according to
-what part of the output file has already been written.
-You can change its value after calling png_set_unknown_chunks()
-as demonstrated in pngtest.c. Within each of the "locations",
-the chunks are sequenced according to their position in the
-structure (that is, the value of "i", which is the order in which
-the chunk was either read from the input file or defined with
-png_set_unknown_chunks).
-
-A quick word about text and num_text. text is an array of png_text
-structures. num_text is the number of valid structures in the array.
-Each png_text structure holds a language code, a keyword, a text value,
-and a compression type.
-
-The compression types have the same valid numbers as the compression
-types of the image data. Currently, the only valid number is zero.
-However, you can store text either compressed or uncompressed, unlike
-images, which always have to be compressed. So if you don't want the
-text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
-Because tEXt and zTXt chunks don't have a language field, if you
-specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
-any language code or translated keyword will not be written out.
-
-Until text gets around 1000 bytes, it is not worth compressing it.
-After the text has been written out to the file, the compression type
-is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
-so that it isn't written out again at the end (in case you are calling
-png_write_end() with the same struct.
-
-The keywords that are given in the PNG Specification are:
-
- Title Short (one line) title or
- caption for image
- Author Name of image's creator
- Description Description of image (possibly long)
- Copyright Copyright notice
- Creation Time Time of original image creation
- (usually RFC 1123 format, see below)
- Software Software used to create the image
- Disclaimer Legal disclaimer
- Warning Warning of nature of content
- Source Device used to create the image
- Comment Miscellaneous comment; conversion
- from other image format
-
-The keyword-text pairs work like this. Keywords should be short
-simple descriptions of what the comment is about. Some typical
-keywords are found in the PNG specification, as is some recommendations
-on keywords. You can repeat keywords in a file. You can even write
-some text before the image and some after. For example, you may want
-to put a description of the image before the image, but leave the
-disclaimer until after, so viewers working over modem connections
-don't have to wait for the disclaimer to go over the modem before
-they start seeing the image. Finally, keywords should be full
-words, not abbreviations. Keywords and text are in the ISO 8859-1
-(Latin-1) character set (a superset of regular ASCII) and can not
-contain NUL characters, and should not contain control or other
-unprintable characters. To make the comments widely readable, stick
-with basic ASCII, and avoid machine specific character set extensions
-like the IBM-PC character set. The keyword must be present, but
-you can leave off the text string on non-compressed pairs.
-Compressed pairs must have a text string, as only the text string
-is compressed anyway, so the compression would be meaningless.
-
-PNG supports modification time via the png_time structure. Two
-conversion routines are provided, png_convert_from_time_t() for
-time_t and png_convert_from_struct_tm() for struct tm. The
-time_t routine uses gmtime(). You don't have to use either of
-these, but if you wish to fill in the png_time structure directly,
-you should provide the time in universal time (GMT) if possible
-instead of your local time. Note that the year number is the full
-year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
-that months start with 1.
-
-If you want to store the time of the original image creation, you should
-use a plain tEXt chunk with the "Creation Time" keyword. This is
-necessary because the "creation time" of a PNG image is somewhat vague,
-depending on whether you mean the PNG file, the time the image was
-created in a non-PNG format, a still photo from which the image was
-scanned, or possibly the subject matter itself. In order to facilitate
-machine-readable dates, it is recommended that the "Creation Time"
-tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
-although this isn't a requirement. Unlike the tIME chunk, the
-"Creation Time" tEXt chunk is not expected to be automatically changed
-by the software. To facilitate the use of RFC 1123 dates, a function
-png_convert_to_rfc1123(png_timep) is provided to convert from PNG
-time to an RFC 1123 format string.
-
-Writing unknown chunks
-
-You can use the png_set_unknown_chunks function to queue up chunks
-for writing. You give it a chunk name, raw data, and a size; that's
-all there is to it. The chunks will be written by the next following
-png_write_info_before_PLTE, png_write_info, or png_write_end function.
-Any chunks previously read into the info structure's unknown-chunk
-list will also be written out in a sequence that satisfies the PNG
-specification's ordering rules.
-
-The high-level write interface
-
-At this point there are two ways to proceed; through the high-level
-write interface, or through a sequence of low-level write operations.
-You can use the high-level interface if your image data is present
-in the info structure. All defined output
-transformations are permitted, enabled by the following masks.
-
- PNG_TRANSFORM_IDENTITY No transformation
- PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
- PNG_TRANSFORM_PACKSWAP Change order of packed
- pixels to LSB first
- PNG_TRANSFORM_INVERT_MONO Invert monochrome images
- PNG_TRANSFORM_SHIFT Normalize pixels to the
- sBIT depth
- PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
- to BGRA
- PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
- to AG
- PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
- to transparency
- PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
- PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes.
-
-If you have valid image data in the info structure (you can use
-png_set_rows() to put image data in the info structure), simply do this:
-
- png_write_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of some set of
-transformation flags. This call is equivalent to png_write_info(),
-followed the set of transformations indicated by the transform mask,
-then png_write_image(), and finally png_write_end().
-
-(The final parameter of this call is not yet used. Someday it might point
-to transformation parameters required by some future output transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_write_png().
-
-The low-level write interface
-
-If you are going the low-level route instead, you are now ready to
-write all the file information up to the actual image data. You do
-this with a call to png_write_info().
-
- png_write_info(png_ptr, info_ptr);
-
-Note that there is one transformation you may need to do before
-png_write_info(). In PNG files, the alpha channel in an image is the
-level of opacity. If your data is supplied as a level of
-transparency, you can invert the alpha channel before you write it, so
-that 0 is fully transparent and 255 (in 8-bit or paletted images) or
-65535 (in 16-bit images) is fully opaque, with
-
- png_set_invert_alpha(png_ptr);
-
-This must appear before png_write_info() instead of later with the
-other transformations because in the case of paletted images the tRNS
-chunk data has to be inverted before the tRNS chunk is written. If
-your image is not a paletted image, the tRNS data (which in such cases
-represents a single color to be rendered as transparent) won't need to
-be changed, and you can safely do this transformation after your
-png_write_info() call.
-
-If you need to write a private chunk that you want to appear before
-the PLTE chunk when PLTE is present, you can write the PNG info in
-two steps, and insert code to write your own chunk between them:
-
- png_write_info_before_PLTE(png_ptr, info_ptr);
- png_set_unknown_chunks(png_ptr, info_ptr, ...);
- png_write_info(png_ptr, info_ptr);
-
-After you've written the file information, you can set up the library
-to handle any special transformations of the image data. The various
-ways to transform the data will be described in the order that they
-should occur. This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths. Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data. For example, don't swap red and blue on grayscale data.
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code tells
-the library to strip input data that has 4 or 8 bytes per pixel down
-to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
-bytes per pixel).
-
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-
-where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
-PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
-is stored XRGB or RGBX.
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit files.
-If the data is supplied at 1 pixel per byte, use this code, which will
-correctly pack the pixels into a single byte:
-
- png_set_packing(png_ptr);
-
-PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your
-data is of another bit depth, you can write an sBIT chunk into the
-file so that decoders can recover the original data if desired.
-
- /* Set the true bit depth of the image data */
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- sig_bit.red = true_bit_depth;
- sig_bit.green = true_bit_depth;
- sig_bit.blue = true_bit_depth;
- }
- else
- {
- sig_bit.gray = true_bit_depth;
- }
- if (color_type & PNG_COLOR_MASK_ALPHA)
- {
- sig_bit.alpha = true_bit_depth;
- }
-
- png_set_sBIT(png_ptr, info_ptr, &sig_bit);
-
-If the data is stored in the row buffer in a bit depth other than
-one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
-this will scale the values to appear to be the correct bit depth as
-is required by PNG.
-
- png_set_shift(png_ptr, &sig_bit);
-
-PNG files store 16 bit pixels in network byte order (big-endian,
-ie. most significant bits first). This code would be used if they are
-supplied the other way (little-endian, i.e. least significant bits
-first, the way PCs store them):
-
- if (bit_depth > 8)
- png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
- if (bit_depth < 8)
- png_set_packswap(png_ptr);
-
-PNG files store 3 color pixels in red, green, blue order. This code
-would be used if they are supplied as blue, green, red:
-
- png_set_bgr(png_ptr);
-
-PNG files describe monochrome as black being zero and white being
-one. This code would be used if the pixels are supplied with this reversed
-(black being one and white being zero):
-
- png_set_invert_mono(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs. This is done by setting a callback
-with
-
- png_set_write_user_transform_fn(png_ptr,
- write_transform_fn);
-
-You must supply the function
-
- void write_transform_fn(png_ptr ptr, row_info_ptr
- row_info, png_bytep data)
-
-See pngtest.c for a working example. Your function will be called
-before any of the other transformations are processed.
-
-You can also set up a pointer to a user structure for use by your
-callback function.
-
- png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
-
-The user_channels and user_depth parameters of this function are ignored
-when writing; you can set them to zero as shown.
-
-You can retrieve the pointer via the function png_get_user_transform_ptr().
-For example:
-
- voidp write_user_transform_ptr =
- png_get_user_transform_ptr(png_ptr);
-
-It is possible to have libpng flush any pending output, either manually,
-or automatically after a certain number of lines have been written. To
-flush the output stream a single time call:
-
- png_write_flush(png_ptr);
-
-and to have libpng flush the output stream periodically after a certain
-number of scanlines have been written, call:
-
- png_set_flush(png_ptr, nrows);
-
-Note that the distance between rows is from the last time png_write_flush()
-was called, or the first row of the image if it has never been called.
-So if you write 50 lines, and then png_set_flush 25, it will flush the
-output on the next scanline, and every 25 lines thereafter, unless
-png_write_flush() is called before 25 more lines have been written.
-If nrows is too small (less than about 10 lines for a 640 pixel wide
-RGB image) the image compression may decrease noticeably (although this
-may be acceptable for real-time applications). Infrequent flushing will
-only degrade the compression performance by a few percent over images
-that do not use flushing.
-
-Writing the image data
-
-That's it for the transformations. Now you can write the image data.
-The simplest way to do this is in one function call. If you have the
-whole image in memory, you can just call png_write_image() and libpng
-will write the image. You will need to pass in an array of pointers to
-each row. This function automatically handles interlacing, so you don't
-need to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_write_rows().
-
- png_write_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
- png_byte *row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to write the whole image at once, you can
-use png_write_rows() instead. If the file is not interlaced,
-this is simple:
-
- png_write_rows(png_ptr, row_pointers,
- number_of_rows);
-
-row_pointers is the same as in the png_write_image() call.
-
-If you are just writing one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
- png_bytep row_pointer = row;
-
- png_write_row(png_ptr, row_pointer);
-
-When the file is interlaced, things can get a good deal more
-complicated. The only currently (as of the PNG Specification
-version 1.2, dated July 1999) defined interlacing scheme for PNG files
-is the "Adam7" interlace scheme, that breaks down an
-image into seven smaller images of varying size. libpng will build
-these images for you, or you can do them yourself. If you want to
-build them yourself, see the PNG specification for details of which
-pixels to write when.
-
-If you don't want libpng to handle the interlacing details, just
-use png_set_interlace_handling() and call png_write_rows() the
-correct number of times to write all seven sub-images.
-
-If you want libpng to build the sub-images, call this before you start
-writing any rows:
-
- number_of_passes =
- png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed. Currently, this
-is seven, but may change if another interlace type is added.
-
-Then write the complete image number_of_passes times.
-
- png_write_rows(png_ptr, row_pointers,
- number_of_rows);
-
-As some of these rows are not used, and thus return immediately,
-you may want to read about interlacing in the PNG specification,
-and only update the rows that are actually used.
-
-Finishing a sequential write
-
-After you are finished writing the image, you should finish writing
-the file. If you are interested in writing comments or time, you should
-pass an appropriately filled png_info pointer. If you are not interested,
-you can pass NULL.
-
- png_write_end(png_ptr, info_ptr);
-
-When you are done, you can free all memory used by libpng like this:
-
- png_destroy_write_struct(&png_ptr, &info_ptr);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
- png_free_data(png_ptr, info_ptr, mask, seq)
- mask - identifies data to be freed, a mask
- containing the bitwise OR of one or
- more of
- PNG_FREE_PLTE, PNG_FREE_TRNS,
- PNG_FREE_HIST, PNG_FREE_ICCP,
- PNG_FREE_PCAL, PNG_FREE_ROWS,
- PNG_FREE_SCAL, PNG_FREE_SPLT,
- PNG_FREE_TEXT, PNG_FREE_UNKN,
- or simply PNG_FREE_ALL
- seq - sequence number of item to be freed
- (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng, and will in those
-cases do nothing. The "seq" parameter is ignored if only one item
-of the selected data type, such as PLTE, is allowed. If "seq" is not
--1, and multiple items are allowed for the data type identified in
-the mask, such as text or sPLT, only the n'th item in the structure
-is freed, where n is "seq".
-
-If you allocated data such as a palette that you passed
-in to libpng with png_set_*, you must not free it until just before the call to
-png_destroy_write_struct().
-
-The default behavior is only to free data that was allocated internally
-by libpng. This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_zalloc() and passed in via a png_set_*() function, with
-
- png_data_freer(png_ptr, info_ptr, freer, mask)
- mask - which data elements are affected
- same choices as in png_free_data()
- freer - one of
- PNG_DESTROY_WILL_FREE_DATA
- PNG_SET_WILL_FREE_DATA
- PNG_USER_WILL_FREE_DATA
-
-For example, to transfer responsibility for some data from a read structure
-to a write structure, you could use
-
- png_data_freer(read_ptr, read_info_ptr,
- PNG_USER_WILL_FREE_DATA,
- PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
- png_data_freer(write_ptr, write_info_ptr,
- PNG_DESTROY_WILL_FREE_DATA,
- PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
-
-thereby briefly reassigning responsibility for freeing to the user but
-immediately afterwards reassigning it once more to the write_destroy
-function. Having done this, it would then be safe to destroy the read
-structure and continue to use the PLTE, tRNS, and hIST data in the write
-structure.
-
-This function only affects data that has already been allocated.
-You can call this function before calling after the png_set_*() functions
-to control whether the user or png_destroy_*() is supposed to free the data.
-When the user assumes responsibility for libpng-allocated data, the
-application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_zalloc() to allocate it.
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key. Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-For a more compact example of writing a PNG image, see the file example.c.
-
-V. Modifying/Customizing libpng:
-
-There are two issues here. The first is changing how libpng does
-standard things like memory allocation, input/output, and error handling.
-The second deals with more complicated things like adding new chunks,
-adding new transformations, and generally changing how libpng works.
-Both of those are compile-time issues; that is, they are generally
-determined at the time the code is written, and there is rarely a need
-to provide the user with a means of changing them.
-
-Memory allocation, input/output, and error handling
-
-All of the memory allocation, input/output, and error handling in libpng
-goes through callbacks that are user-settable. The default routines are
-in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
-these functions, call the appropriate png_set_*_fn() function.
-
-Memory allocation is done through the functions png_malloc()
-and png_free(). These currently just call the standard C functions. If
-your pointers can't access more then 64K at a time, you will want to set
-MAXSEG_64K in zlib.h. Since it is unlikely that the method of handling
-memory allocation on a platform will change between applications, these
-functions must be modified in the library at compile time. If you prefer
-to use a different method of allocating and freeing data, you can use
-png_create_read_struct_2() or png_create_write_struct_2() to register
-your own functions as described above.
-These functions also provide a void pointer that can be retrieved via
-
- mem_ptr=png_get_mem_ptr(png_ptr);
-
-Your replacement memory functions must have prototypes as follows:
-
- png_voidp malloc_fn(png_structp png_ptr,
- png_size_t size);
- void free_fn(png_structp png_ptr, png_voidp ptr);
-
-Your malloc_fn() must return NULL in case of failure. The png_malloc()
-function will normally call png_error() if it receives a NULL from the
-system memory allocator or from your replacement malloc_fn().
-
-Your free_fn() will never be called with a NULL ptr, since libpng's
-png_free() checks for NULL before calling free_fn().
-
-Input/Output in libpng is done through png_read() and png_write(),
-which currently just call fread() and fwrite(). The FILE * is stored in
-png_struct and is initialized via png_init_io(). If you wish to change
-the method of I/O, the library supplies callbacks that you can set
-through the function png_set_read_fn() and png_set_write_fn() at run
-time, instead of calling the png_init_io() function. These functions
-also provide a void pointer that can be retrieved via the function
-png_get_io_ptr(). For example:
-
- png_set_read_fn(png_structp read_ptr,
- voidp read_io_ptr, png_rw_ptr read_data_fn)
-
- png_set_write_fn(png_structp write_ptr,
- voidp write_io_ptr, png_rw_ptr write_data_fn,
- png_flush_ptr output_flush_fn);
-
- voidp read_io_ptr = png_get_io_ptr(read_ptr);
- voidp write_io_ptr = png_get_io_ptr(write_ptr);
-
-The replacement I/O functions must have prototypes as follows:
-
- void user_read_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
- void user_write_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
- void user_flush_data(png_structp png_ptr);
-
-Supplying NULL for the read, write, or flush functions sets them back
-to using the default C stream functions. It is an error to read from
-a write stream, and vice versa.
-
-Error handling in libpng is done through png_error() and png_warning().
-Errors handled through png_error() are fatal, meaning that png_error()
-should never return to its caller. Currently, this is handled via
-setjmp() and longjmp() (unless you have compiled libpng with
-PNG_SETJMP_NOT_SUPPORTED, in which case it is handled via PNG_ABORT()),
-but you could change this to do things like exit() if you should wish.
-
-On non-fatal errors, png_warning() is called
-to print a warning message, and then control returns to the calling code.
-By default png_error() and png_warning() print a message on stderr via
-fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
-(because you don't want the messages) or PNG_NO_STDIO defined (because
-fprintf() isn't available). If you wish to change the behavior of the error
-functions, you will need to set up your own message callbacks. These
-functions are normally supplied at the time that the png_struct is created.
-It is also possible to redirect errors and warnings to your own replacement
-functions after png_create_*_struct() has been called by calling:
-
- png_set_error_fn(png_structp png_ptr,
- png_voidp error_ptr, png_error_ptr error_fn,
- png_error_ptr warning_fn);
-
- png_voidp error_ptr = png_get_error_ptr(png_ptr);
-
-If NULL is supplied for either error_fn or warning_fn, then the libpng
-default function will be used, calling fprintf() and/or longjmp() if a
-problem is encountered. The replacement error functions should have
-parameters as follows:
-
- void user_error_fn(png_structp png_ptr,
- png_const_charp error_msg);
- void user_warning_fn(png_structp png_ptr,
- png_const_charp warning_msg);
-
-The motivation behind using setjmp() and longjmp() is the C++ throw and
-catch exception handling methods. This makes the code much easier to write,
-as there is no need to check every return code of every function call.
-However, there are some uncertainties about the status of local variables
-after a longjmp, so the user may want to be careful about doing anything after
-setjmp returns non-zero besides returning itself. Consult your compiler
-documentation for more details. For an alternative approach, you may wish
-to use the "cexcept" facility (see http://cexcept.sourceforge.net).
-
-Custom chunks
-
-If you need to read or write custom chunks, you may need to get deeper
-into the libpng code. The library now has mechanisms for storing
-and writing chunks of unknown type; you can even declare callbacks
-for custom chunks. However, this may not be good enough if the
-library code itself needs to know about interactions between your
-chunk and existing `intrinsic' chunks.
-
-If you need to write a new intrinsic chunk, first read the PNG
-specification. Acquire a first level of
-understanding of how it works. Pay particular attention to the
-sections that describe chunk names, and look at how other chunks were
-designed, so you can do things similarly. Second, check out the
-sections of libpng that read and write chunks. Try to find a chunk
-that is similar to yours and use it as a template. More details can
-be found in the comments inside the code. It is best to handle unknown
-chunks in a generic method, via callback functions, instead of by
-modifying libpng functions.
-
-If you wish to write your own transformation for the data, look through
-the part of the code that does the transformations, and check out some of
-the simpler ones to get an idea of how they work. Try to find a similar
-transformation to the one you want to add and copy off of it. More details
-can be found in the comments inside the code itself.
-
-Configuring for 16 bit platforms
-
-You will want to look into zconf.h to tell zlib (and thus libpng) that
-it cannot allocate more then 64K at a time. Even if you can, the memory
-won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
-
-Configuring for DOS
-
-For DOS users who only have access to the lower 640K, you will
-have to limit zlib's memory usage via a png_set_compression_mem_level()
-call. See zlib.h or zconf.h in the zlib library for more information.
-
-Configuring for Medium Model
-
-Libpng's support for medium model has been tested on most of the popular
-compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
-defined, and FAR gets defined to far in pngconf.h, and you should be
-all set. Everything in the library (except for zlib's structure) is
-expecting far data. You must use the typedefs with the p or pp on
-the end for pointers (or at least look at them and be careful). Make
-note that the rows of data are defined as png_bytepp, which is an
-unsigned char far * far *.
-
-Configuring for gui/windowing platforms:
-
-You will need to write new error and warning functions that use the GUI
-interface, as described previously, and set them to be the error and
-warning functions at the time that png_create_*_struct() is called,
-in order to have them available during the structure initialization.
-They can be changed later via png_set_error_fn(). On some compilers,
-you may also have to change the memory allocators (png_malloc, etc.).
-
-Configuring for compiler xxx:
-
-All includes for libpng are in pngconf.h. If you need to add/change/delete
-an include, this is the place to do it. The includes that are not
-needed outside libpng are protected by the PNG_INTERNAL definition,
-which is only defined for those routines inside libpng itself. The
-files in libpng proper only include png.h, which includes pngconf.h.
-
-Configuring zlib:
-
-There are special functions to configure the compression. Perhaps the
-most useful one changes the compression level, which currently uses
-input compression values in the range 0 - 9. The library normally
-uses the default compression level (Z_DEFAULT_COMPRESSION = 6). Tests
-have shown that for a large majority of images, compression values in
-the range 3-6 compress nearly as well as higher levels, and do so much
-faster. For online applications it may be desirable to have maximum speed
-(Z_BEST_SPEED = 1). With versions of zlib after v0.99, you can also
-specify no compression (Z_NO_COMPRESSION = 0), but this would create
-files larger than just storing the raw bitmap. You can specify the
-compression level by calling:
-
- png_set_compression_level(png_ptr, level);
-
-Another useful one is to reduce the memory level used by the library.
-The memory level defaults to 8, but it can be lowered if you are
-short on memory (running DOS, for example, where you only have 640K).
-Note that the memory level does have an effect on compression; among
-other things, lower levels will result in sections of incompressible
-data being emitted in smaller stored blocks, with a correspondingly
-larger relative overhead of up to 15% in the worst case.
-
- png_set_compression_mem_level(png_ptr, level);
-
-The other functions are for configuring zlib. They are not recommended
-for normal use and may result in writing an invalid PNG file. See
-zlib.h for more information on what these mean.
-
- png_set_compression_strategy(png_ptr,
- strategy);
- png_set_compression_window_bits(png_ptr,
- window_bits);
- png_set_compression_method(png_ptr, method);
- png_set_compression_buffer_size(png_ptr, size);
-
-Controlling row filtering
-
-If you want to control whether libpng uses filtering or not, which
-filters are used, and how it goes about picking row filters, you
-can call one of these functions. The selection and configuration
-of row filters can have a significant impact on the size and
-encoding speed and a somewhat lesser impact on the decoding speed
-of an image. Filtering is enabled by default for RGB and grayscale
-images (with and without alpha), but not for paletted images nor
-for any images with bit depths less than 8 bits/pixel.
-
-The 'method' parameter sets the main filtering method, which is
-currently only '0' in the PNG 1.2 specification. The 'filters'
-parameter sets which filter(s), if any, should be used for each
-scanline. Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
-to turn filtering on and off, respectively.
-
-Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
-PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
-ORed together with '|' to specify one or more filters to use.
-These filters are described in more detail in the PNG specification.
-If you intend to change the filter type during the course of writing
-the image, you should start with flags set for all of the filters
-you intend to use so that libpng can initialize its internal
-structures appropriately for all of the filter types. (Note that this
-means the first row must always be adaptively filtered, because libpng
-currently does not allocate the filter buffers until png_write_row()
-is called for the first time.)
-
- filters = PNG_FILTER_NONE | PNG_FILTER_SUB
- PNG_FILTER_UP | PNG_FILTER_AVE |
- PNG_FILTER_PAETH | PNG_ALL_FILTERS;
-
- png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
- filters);
- The second parameter can also be
- PNG_INTRAPIXEL_DIFFERENCING if you are
- writing a PNG to be embedded in a MNG
- datastream. This parameter must be the
- same as the value of filter_method used
- in png_set_IHDR().
-
-It is also possible to influence how libpng chooses from among the
-available filters. This is done in one or both of two ways - by
-telling it how important it is to keep the same filter for successive
-rows, and by telling it the relative computational costs of the filters.
-
- double weights[3] = {1.5, 1.3, 1.1},
- costs[PNG_FILTER_VALUE_LAST] =
- {1.0, 1.3, 1.3, 1.5, 1.7};
-
- png_set_filter_heuristics(png_ptr,
- PNG_FILTER_HEURISTIC_WEIGHTED, 3,
- weights, costs);
-
-The weights are multiplying factors that indicate to libpng that the
-row filter should be the same for successive rows unless another row filter
-is that many times better than the previous filter. In the above example,
-if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
-"sum of absolute differences" 1.5 x 1.3 times higher than other filters
-and still be chosen, while the NONE filter could have a sum 1.1 times
-higher than other filters and still be chosen. Unspecified weights are
-taken to be 1.0, and the specified weights should probably be declining
-like those above in order to emphasize recent filters over older filters.
-
-The filter costs specify for each filter type a relative decoding cost
-to be considered when selecting row filters. This means that filters
-with higher costs are less likely to be chosen over filters with lower
-costs, unless their "sum of absolute differences" is that much smaller.
-The costs do not necessarily reflect the exact computational speeds of
-the various filters, since this would unduly influence the final image
-size.
-
-Note that the numbers above were invented purely for this example and
-are given only to help explain the function usage. Little testing has
-been done to find optimum values for either the costs or the weights.
-
-Removing unwanted object code
-
-There are a bunch of #define's in pngconf.h that control what parts of
-libpng are compiled. All the defines end in _SUPPORTED. If you are
-never going to use a capability, you can change the #define to #undef
-before recompiling libpng and save yourself code and data space, or
-you can turn off individual capabilities with defines that begin with
-PNG_NO_.
-
-You can also turn all of the transforms and ancillary chunk capabilities
-off en masse with compiler directives that define
-PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
-or all four,
-along with directives to turn on any of the capabilities that you do
-want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable
-the extra transformations but still leave the library fully capable of reading
-and writing PNG files with all known public chunks
-Use of the PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive
-produces a library that is incapable of reading or writing ancillary chunks.
-If you are not using the progressive reading capability, you can
-turn that off with PNG_NO_PROGRESSIVE_READ (don't confuse
-this with the INTERLACING capability, which you'll still have).
-
-All the reading and writing specific code are in separate files, so the
-linker should only grab the files it needs. However, if you want to
-make sure, or if you are building a stand alone library, all the
-reading files start with pngr and all the writing files start with
-pngw. The files that don't match either (like png.c, pngtrans.c, etc.)
-are used for both reading and writing, and always need to be included.
-The progressive reader is in pngpread.c
-
-If you are creating or distributing a dynamically linked library (a .so
-or DLL file), you should not remove or disable any parts of the library,
-as this will cause applications linked with different versions of the
-library to fail if they call functions not available in your library.
-The size of the library itself should not be an issue, because only
-those sections that are actually used will be loaded into memory.
-
-Requesting debug printout
-
-The macro definition PNG_DEBUG can be used to request debugging
-printout. Set it to an integer value in the range 0 to 3. Higher
-numbers result in increasing amounts of debugging information. The
-information is printed to the "stderr" file, unless another file
-name is specified in the PNG_DEBUG_FILE macro definition.
-
-When PNG_DEBUG > 0, the following functions (macros) become available:
-
- png_debug(level, message)
- png_debug1(level, message, p1)
- png_debug2(level, message, p1, p2)
-
-in which "level" is compared to PNG_DEBUG to decide whether to print
-the message, "message" is the formatted string to be printed,
-and p1 and p2 are parameters that are to be embedded in the string
-according to printf-style formatting directives. For example,
-
- png_debug1(2, "foo=%d\n", foo);
-
-is expanded to
-
- if(PNG_DEBUG > 2)
- fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
-
-When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
-can still use PNG_DEBUG to control your own debugging:
-
- #ifdef PNG_DEBUG
- fprintf(stderr, ...
- #endif
-
-When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
-having level = 0 will be printed. There aren't any such statements in
-this version of libpng, but if you insert some they will be printed.
-
-VII. MNG support
-
-The MNG specification (available at http://www.libpng.org/pub/mng) allows
-certain extensions to PNG for PNG images that are embedded in MNG datastreams.
-Libpng can support some of these extensions. To enable them, use the
-png_permit_mng_features() function:
-
- feature_set = png_permit_mng_features(png_ptr, mask)
- mask is a png_uint_32 containing the bitwise OR of the
- features you want to enable. These include
- PNG_FLAG_MNG_EMPTY_PLTE
- PNG_FLAG_MNG_FILTER_64
- PNG_ALL_MNG_FEATURES
- feature_set is a png_uint_32 that is the bitwise AND of
- your mask with the set of MNG features that is
- supported by the version of libpng that you are using.
-
-It is an error to use this function when reading or writing a standalone
-PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped
-in a MNG datastream. As a minimum, it must have the MNG 8-byte signature
-and the MHDR and MEND chunks. Libpng does not provide support for these
-or any other MNG chunks; your application must provide its own support for
-them. You may wish to consider using libmng (available at
-http://www.libmng.com) instead.
-
-VIII. Changes to Libpng from version 0.88
-
-It should be noted that versions of libpng later than 0.96 are not
-distributed by the original libpng author, Guy Schalnat, nor by
-Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
-distributed versions 0.89 through 0.96, but rather by another member
-of the original PNG Group, Glenn Randers-Pehrson. Guy and Andreas are
-still alive and well, but they have moved on to other things.
-
-The old libpng functions png_read_init(), png_write_init(),
-png_info_init(), png_read_destroy(), and png_write_destroy() have been
-moved to PNG_INTERNAL in version 0.95 to discourage their use. These
-functions will be removed from libpng version 2.0.0.
-
-The preferred method of creating and initializing the libpng structures is
-via the png_create_read_struct(), png_create_write_struct(), and
-png_create_info_struct() because they isolate the size of the structures
-from the application, allow version error checking, and also allow the
-use of custom error handling routines during the initialization, which
-the old functions do not. The functions png_read_destroy() and
-png_write_destroy() do not actually free the memory that libpng
-allocated for these structs, but just reset the data structures, so they
-can be used instead of png_destroy_read_struct() and
-png_destroy_write_struct() if you feel there is too much system overhead
-allocating and freeing the png_struct for each image read.
-
-Setting the error callbacks via png_set_message_fn() before
-png_read_init() as was suggested in libpng-0.88 is no longer supported
-because this caused applications that do not use custom error functions
-to fail if the png_ptr was not initialized to zero. It is still possible
-to set the error callbacks AFTER png_read_init(), or to change them with
-png_set_error_fn(), which is essentially the same function, but with a new
-name to force compilation errors with applications that try to use the old
-method.
-
-Starting with version 1.0.7, you can find out which version of the library
-you are using at run-time:
-
- png_uint_32 libpng_vn = png_access_version_number();
-
-The number libpng_vn is constructed from the major version, minor
-version with leading zero, and release number with leading zero,
-(e.g., libpng_vn for version 1.0.7 is 10007).
-
-You can also check which version of png.h you used when compiling your
-application:
-
- png_uint_32 application_vn = PNG_LIBPNG_VER;
-
-IX. Y2K Compliance in libpng
-
-May 8, 2008
-
-Since the PNG Development group is an ad-hoc body, we can't make
-an official declaration.
-
-This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.2.29 are Y2K compliant. It is my belief that earlier
-versions were also Y2K compliant.
-
-Libpng only has three year fields. One is a 2-byte unsigned integer that
-will hold years up to 65535. The other two hold the date in text
-format, and will hold years up to 9999.
-
-The integer is
- "png_uint_16 year" in png_time_struct.
-
-The strings are
- "png_charp time_buffer" in png_struct and
- "near_time_buffer", which is a local character string in png.c.
-
-There are seven time-related functions:
-
- png_convert_to_rfc_1123() in png.c
- (formerly png_convert_to_rfc_1152() in error)
- png_convert_from_struct_tm() in pngwrite.c, called
- in pngwrite.c
- png_convert_from_time_t() in pngwrite.c
- png_get_tIME() in pngget.c
- png_handle_tIME() in pngrutil.c, called in pngread.c
- png_set_tIME() in pngset.c
- png_write_tIME() in pngwutil.c, called in pngwrite.c
-
-All appear to handle dates properly in a Y2K environment. The
-png_convert_from_time_t() function calls gmtime() to convert from system
-clock time, which returns (year - 1900), which we properly convert to
-the full 4-digit year. There is a possibility that applications using
-libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
-function, or that they are incorrectly passing only a 2-digit year
-instead of "year - 1900" into the png_convert_from_struct_tm() function,
-but this is not under our control. The libpng documentation has always
-stated that it works with 4-digit years, and the APIs have been
-documented as such.
-
-The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
-integer to hold the year, and can hold years as large as 65535.
-
-zlib, upon which libpng depends, is also Y2K compliant. It contains
-no date-related code.
-
-
- Glenn Randers-Pehrson
- libpng maintainer
- PNG Development Group
diff --git a/Build/source/libs/libpng/libpng.3 b/Build/source/libs/libpng/libpng.3
deleted file mode 100644
index ef7fc5b2b31..00000000000
--- a/Build/source/libs/libpng/libpng.3
+++ /dev/null
@@ -1,3680 +0,0 @@
-.TH LIBPNG 3 "May 8, 2008"
-.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.2.29
-.SH SYNOPSIS
-\fB
-#include <png.h>\fP
-
-\fBpng_uint_32 png_access_version_number \fI(void\fP\fB);\fP
-
-\fBint png_check_sig (png_bytep \fP\fIsig\fP\fB, int \fInum\fP\fB);\fP
-
-\fBvoid png_chunk_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
-
-\fBvoid png_chunk_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
-
-\fBvoid png_convert_from_struct_tm (png_timep \fP\fIptime\fP\fB, struct tm FAR * \fIttime\fP\fB);\fP
-
-\fBvoid png_convert_from_time_t (png_timep \fP\fIptime\fP\fB, time_t \fIttime\fP\fB);\fP
-
-\fBpng_charp png_convert_to_rfc1123 (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fIptime\fP\fB);\fP
-
-\fBpng_infop png_create_info_struct (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_structp png_create_read_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
-
-\fBpng_structp png_create_read_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
-
-\fBpng_structp png_create_write_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
-
-\fBpng_structp png_create_write_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
-
-\fBint png_debug(int \fP\fIlevel\fP\fB, png_const_charp \fImessage\fP\fB);\fP
-
-\fBint png_debug1(int \fP\fIlevel\fP\fB, png_const_charp \fP\fImessage\fP\fB, \fIp1\fP\fB);\fP
-
-\fBint png_debug2(int \fP\fIlevel\fP\fB, png_const_charp \fP\fImessage\fP\fB, \fP\fIp1\fP\fB, \fIp2\fP\fB);\fP
-
-\fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
-
-\fBvoid png_destroy_read_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fP\fIinfo_ptr_ptr\fP\fB, png_infopp \fIend_info_ptr_ptr\fP\fB);\fP
-
-\fBvoid png_destroy_write_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
-
-\fBvoid png_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
-
-\fBvoid png_free (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
-
-\fBvoid png_free_chunk_list (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_free_default(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
-
-\fBvoid png_free_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fInum\fP\fB);\fP
-
-\fBpng_byte png_get_bit_depth (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fI*background\fP\fB);\fP
-
-\fBpng_byte png_get_channels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fI*white_x\fP\fB, double \fP\fI*white_y\fP\fB, double \fP\fI*red_x\fP\fB, double \fP\fI*red_y\fP\fB, double \fP\fI*green_x\fP\fB, double \fP\fI*green_y\fP\fB, double \fP\fI*blue_x\fP\fB, double \fI*blue_y\fP\fB);\fP
-
-\fBpng_uint_32 png_get_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*white_x\fP\fB, png_uint_32 \fP\fI*white_y\fP\fB, png_uint_32 \fP\fI*red_x\fP\fB, png_uint_32 \fP\fI*red_y\fP\fB, png_uint_32 \fP\fI*green_x\fP\fB, png_uint_32 \fP\fI*green_y\fP\fB, png_uint_32 \fP\fI*blue_x\fP\fB, png_uint_32 \fI*blue_y\fP\fB);\fP
-
-\fBpng_byte png_get_color_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_compression_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_copyright (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_error_ptr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_filter_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fI*file_gamma\fP\fB);\fP
-
-\fBpng_uint_32 png_get_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fI*int_file_gamma\fP\fB);\fP
-
-\fBpng_byte png_get_header_ver (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_header_version (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fI*hist\fP\fB);\fP
-
-\fBpng_uint_32 png_get_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charpp \fP\fIname\fP\fB, int \fP\fI*compression_type\fP\fB, png_charpp \fP\fIprofile\fP\fB, png_uint_32 \fI*proflen\fP\fB);\fP
-
-\fBpng_uint_32 png_get_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*width\fP\fB, png_uint_32 \fP\fI*height\fP\fB, int \fP\fI*bit_depth\fP\fB, int \fP\fI*color_type\fP\fB, int \fP\fI*interlace_type\fP\fB, int \fP\fI*compression_type\fP\fB, int \fI*filter_type\fP\fB);\fP
-
-\fBpng_uint_32 png_get_image_height (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_image_width (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fB#if !defined(PNG_1_0_X) png_int_32 png_get_int_32 (png_bytep buf); \fI#endif
-
-\fBpng_byte png_get_interlace_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_io_ptr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_libpng_ver (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_mem_ptr(png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*offset_x\fP\fB, png_uint_32 \fP\fI*offset_y\fP\fB, int \fI*unit_type\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fI*purpose\fP\fB, png_int_32 \fP\fI*X0\fP\fB, png_int_32 \fP\fI*X1\fP\fB, int \fP\fI*type\fP\fB, int \fP\fI*nparams\fP\fB, png_charp \fP\fI*units\fP\fB, png_charpp \fI*params\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*res_x\fP\fB, png_uint_32 \fP\fI*res_y\fP\fB, int \fI*unit_type\fP\fB);\fP
-
-\fBfloat png_get_pixel_aspect_ratio (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_progressive_ptr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fI*palette\fP\fB, int \fI*num_palette\fP\fB);\fP
-
-\fBpng_byte png_get_rgb_to_gray_status (png_structp png_ptr) png_uint_32 png_get_rowbytes (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_bytepp png_get_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fI*sig_bit\fP\fB);\fP
-
-\fBpng_bytep png_get_signature (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fI*splt_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fI*intent\fP\fB);\fP
-
-\fBpng_uint_32 png_get_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fI*text_ptr\fP\fB, int \fI*num_text\fP\fB);\fP
-
-\fBpng_uint_32 png_get_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fI*mod_time\fP\fB);\fP
-
-\fBpng_uint_32 png_get_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fI*trans\fP\fB, int \fP\fI*num_trans\fP\fB, png_color_16p \fI*trans_values\fP\fB);\fP
-
-\fB#if !defined(PNG_1_0_X) png_uint_16 png_get_uint_16 (png_bytep \fIbuf\fP\fB);\fP
-
-\fBpng_uint_32 png_get_uint_31 (png_bytep \fIbuf\fP\fB);\fP
-
-\fBpng_uint_32 png_get_uint_32 (png_bytep buf); \fI#endif
-
-\fBpng_uint_32 png_get_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkpp \fIunknowns\fP\fB);\fP
-
-\fBpng_voidp png_get_user_chunk_ptr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_user_height_max( png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_user_transform_ptr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_user_width_max (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_valid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIflag\fP\fB);\fP
-
-\fBpng_int_32 png_get_x_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_x_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_x_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_y_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_y_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_y_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_compression_buffer_size (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBint png_handle_as_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP
-
-\fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP
-
-\fBDEPRECATED: void png_info_init (png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBDEPRECATED: void png_info_init_2 (png_infopp \fP\fIptr_ptr\fP\fB, png_size_t \fIpng_info_struct_size\fP\fB);\fP
-
-\fBpng_voidp png_malloc (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
-
-\fBpng_voidp png_malloc_default(png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
-
-\fBvoidp png_memcpy (png_voidp \fP\fIs1\fP\fB, png_voidp \fP\fIs2\fP\fB, png_size_t \fIsize\fP\fB);\fP
-
-\fBpng_voidp png_memcpy_check (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIs1\fP\fB, png_voidp \fP\fIs2\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
-
-\fBvoidp png_memset (png_voidp \fP\fIs1\fP\fB, int \fP\fIvalue\fP\fB, png_size_t \fIsize\fP\fB);\fP
-
-\fBpng_voidp png_memset_check (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIs1\fP\fB, int \fP\fIvalue\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
-
-\fBDEPRECATED: void png_permit_empty_plte (png_structp \fP\fIpng_ptr\fP\fB, int \fIempty_plte_permitted\fP\fB);\fP
-
-\fBvoid png_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_size\fP\fB);\fP
-
-\fBvoid png_progressive_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIold_row\fP\fB, png_bytep \fInew_row\fP\fB);\fP
-
-\fBvoid png_read_destroy (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_infop \fIend_info_ptr\fP\fB);\fP
-
-\fBvoid png_read_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_read_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
-
-\fBDEPRECATED: void png_read_init (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBDEPRECATED: void png_read_init_2 (png_structpp \fP\fIptr_ptr\fP\fB, png_const_charp \fP\fIuser_png_ver\fP\fB, png_size_t \fP\fIpng_struct_size\fP\fB, png_size_t \fIpng_info_size\fP\fB);\fP
-
-\fBvoid png_read_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_read_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
-
-\fBvoid png_read_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fIdisplay_row\fP\fB);\fP
-
-\fBvoid png_read_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_bytepp \fP\fIdisplay_row\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
-
-\fBvoid png_read_update_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fB#if !defined(PNG_1_0_X) png_save_int_32 (png_bytep \fP\fIbuf\fP\fB, png_int_32 \fIi\fP\fB);\fP
-
-\fBvoid png_save_uint_16 (png_bytep \fP\fIbuf\fP\fB, unsigned int \fIi\fP\fB);\fP
-
-\fBvoid png_save_uint_32 (png_bytep \fP\fIbuf\fP\fB, png_uint_32 \fIi\fP\fB);\fP
-
-\fBvoid png_set_add_alpha (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int flags); \fI#endif
-
-\fBvoid png_set_background (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, double \fIbackground_gamma\fP\fB);\fP
-
-\fBvoid png_set_bgr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fIbackground\fP\fB);\fP
-
-\fBvoid png_set_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP
-
-\fBvoid png_set_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwhite_x\fP\fB, png_uint_32 \fP\fIwhite_y\fP\fB, png_uint_32 \fP\fIred_x\fP\fB, png_uint_32 \fP\fIred_y\fP\fB, png_uint_32 \fP\fIgreen_x\fP\fB, png_uint_32 \fP\fIgreen_y\fP\fB, png_uint_32 \fP\fIblue_x\fP\fB, png_uint_32 \fIblue_y\fP\fB);\fP
-
-\fBvoid png_set_compression_level (png_structp \fP\fIpng_ptr\fP\fB, int \fIlevel\fP\fB);\fP
-
-\fBvoid png_set_compression_mem_level (png_structp \fP\fIpng_ptr\fP\fB, int \fImem_level\fP\fB);\fP
-
-\fBvoid png_set_compression_method (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod\fP\fB);\fP
-
-\fBvoid png_set_compression_strategy (png_structp \fP\fIpng_ptr\fP\fB, int \fIstrategy\fP\fB);\fP
-
-\fBvoid png_set_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP
-
-\fBvoid png_set_crc_action (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcrit_action\fP\fB, int \fIancil_action\fP\fB);\fP
-
-\fBvoid png_set_dither (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fP\fInum_palette\fP\fB, int \fP\fImaximum_colors\fP\fB, png_uint_16p \fP\fIhistogram\fP\fB, int \fIfull_dither\fP\fB);\fP
-
-\fBvoid png_set_error_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarning_fn\fP\fB);\fP
-
-\fBvoid png_set_expand (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_expand_gray_1_2_4_to_8(png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_filler (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
-
-\fBvoid png_set_filter (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImethod\fP\fB, int \fIfilters\fP\fB);\fP
-
-\fBvoid png_set_filter_heuristics (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIheuristic_method\fP\fB, int \fP\fInum_weights\fP\fB, png_doublep \fP\fIfilter_weights\fP\fB, png_doublep \fIfilter_costs\fP\fB);\fP
-
-\fBvoid png_set_flush (png_structp \fP\fIpng_ptr\fP\fB, int \fInrows\fP\fB);\fP
-
-\fBvoid png_set_gamma (png_structp \fP\fIpng_ptr\fP\fB, double \fP\fIscreen_gamma\fP\fB, double \fIdefault_file_gamma\fP\fB);\fP
-
-\fBvoid png_set_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fIfile_gamma\fP\fB);\fP
-
-\fBvoid png_set_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIfile_gamma\fP\fB);\fP
-
-\fBvoid png_set_gray_1_2_4_to_8(png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_gray_to_rgb (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fIhist\fP\fB);\fP
-
-\fBvoid png_set_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIname\fP\fB, int \fP\fIcompression_type\fP\fB, png_charp \fP\fIprofile\fP\fB, png_uint_32 \fIproflen\fP\fB);\fP
-
-\fBint png_set_interlace_handling (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_invalid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fImask\fP\fB);\fP
-
-\fBvoid png_set_invert_alpha (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_invert_mono (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIinterlace_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fIfilter_type\fP\fB);\fP
-
-\fBvoid png_set_keep_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIkeep\fP\fB, png_bytep \fP\fIchunk_list\fP\fB, int \fInum_chunks\fP\fB);\fP
-
-\fBvoid png_set_mem_fn(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
-
-\fBvoid png_set_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIoffset_x\fP\fB, png_uint_32 \fP\fIoffset_y\fP\fB, int \fIunit_type\fP\fB);\fP
-
-\fBvoid png_set_packing (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_packswap (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_palette_to_rgb(png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIpurpose\fP\fB, png_int_32 \fP\fIX0\fP\fB, png_int_32 \fP\fIX1\fP\fB, int \fP\fItype\fP\fB, int \fP\fInparams\fP\fB, png_charp \fP\fIunits\fP\fB, png_charpp \fIparams\fP\fB);\fP
-
-\fBvoid png_set_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIres_x\fP\fB, png_uint_32 \fP\fIres_y\fP\fB, int \fIunit_type\fP\fB);\fP
-
-\fBvoid png_set_progressive_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIprogressive_ptr\fP\fB, png_progressive_info_ptr \fP\fIinfo_fn\fP\fB, png_progressive_row_ptr \fP\fIrow_fn\fP\fB, png_progressive_end_ptr \fIend_fn\fP\fB);\fP
-
-\fBvoid png_set_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fInum_palette\fP\fB);\fP
-
-\fBvoid png_set_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fIread_data_fn\fP\fB);\fP
-
-\fBvoid png_set_read_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_read_status_ptr \fIread_row_fn\fP\fB);\fP
-
-\fBvoid png_set_read_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIread_user_transform_fn\fP\fB);\fP
-
-\fBvoid png_set_rgb_to_gray (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIerror_action\fP\fB, double \fP\fIred\fP\fB, double \fIgreen\fP\fB);\fP
-
-\fBvoid png_set_rgb_to_gray_fixed (png_structp \fP\fIpng_ptr\fP\fB, int error_action png_fixed_point \fP\fIred\fP\fB, png_fixed_point \fIgreen\fP\fB);\fP
-
-\fBvoid png_set_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytepp \fIrow_pointers\fP\fB);\fP
-
-\fBvoid png_set_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fIsig_bit\fP\fB);\fP
-
-\fBvoid png_set_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, double \fP\fIwidth\fP\fB, double \fIheight\fP\fB);\fP
-
-\fBvoid png_set_shift (png_structp \fP\fIpng_ptr\fP\fB, png_color_8p \fItrue_bits\fP\fB);\fP
-
-\fBvoid png_set_sig_bytes (png_structp \fP\fIpng_ptr\fP\fB, int \fInum_bytes\fP\fB);\fP
-
-\fBvoid png_set_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fP\fIsplt_ptr\fP\fB, int \fInum_spalettes\fP\fB);\fP
-
-\fBvoid png_set_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP
-
-\fBvoid png_set_sRGB_gAMA_and_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP
-
-\fBvoid png_set_strip_16 (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_strip_alpha (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_swap (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_swap_alpha (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fItext_ptr\fP\fB, int \fInum_text\fP\fB);\fP
-
-\fBvoid png_set_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP
-
-\fBvoid png_set_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fItrans\fP\fB, int \fP\fInum_trans\fP\fB, png_color_16p \fItrans_values\fP\fB);\fP
-
-\fBvoid png_set_tRNS_to_alpha(png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_set_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkp \fP\fIunknowns\fP\fB, int \fP\fInum\fP\fB, int \fIlocation\fP\fB);\fP
-
-\fBvoid png_set_unknown_chunk_location(png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIchunk\fP\fB, int \fIlocation\fP\fB);\fP
-
-\fBvoid png_set_read_user_chunk_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_chunk_ptr\fP\fB, png_user_chunk_ptr \fIread_user_chunk_fn\fP\fB);\fP
-
-\fBvoid png_set_user_limits (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIuser_width_max\fP\fB, png_uint_32 \fIuser_height_max\fP\fB);\fP
-
-\fBvoid png_set_user_transform_info (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_transform_ptr\fP\fB, int \fP\fIuser_transform_depth\fP\fB, int \fIuser_transform_channels\fP\fB);\fP
-
-\fBvoid png_set_write_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fP\fIwrite_data_fn\fP\fB, png_flush_ptr \fIoutput_flush_fn\fP\fB);\fP
-
-\fBvoid png_set_write_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_write_status_ptr \fIwrite_row_fn\fP\fB);\fP
-
-\fBvoid png_set_write_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIwrite_user_transform_fn\fP\fB);\fP
-
-\fBvoid png_set_compression_buffer_size(png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
-
-\fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, png_size_t \fP\fIstart\fP\fB, png_size_t \fInum_to_check\fP\fB);\fP
-
-\fBvoid png_start_read_image (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
-
-\fBvoid png_write_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_write_chunk_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_write_chunk_end (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_chunk_start (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_write_destroy (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_write_flush (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
-
-\fBDEPRECATED: void png_write_init (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBDEPRECATED: void png_write_init_2 (png_structpp \fP\fIptr_ptr\fP\fB, png_const_charp \fP\fIuser_png_ver\fP\fB, png_size_t \fP\fIpng_struct_size\fP\fB, png_size_t \fIpng_info_size\fP\fB);\fP
-
-\fBvoid png_write_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_write_info_before_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_write_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
-
-\fBvoid png_write_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_write_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
-
-\fBvoidpf png_zalloc (voidpf \fP\fIpng_ptr\fP\fB, uInt \fP\fIitems\fP\fB, uInt \fIsize\fP\fB);\fP
-
-\fBvoid png_zfree (voidpf \fP\fIpng_ptr\fP\fB, voidpf \fIptr\fP\fB);\fP
-
-.SH DESCRIPTION
-The
-.I libpng
-library supports encoding, decoding, and various manipulations of
-the Portable Network Graphics (PNG) format image files. It uses the
-.IR zlib(3)
-compression library.
-Following is a copy of the libpng.txt file that accompanies libpng.
-.SH LIBPNG.TXT
-libpng.txt - A description on how to use and modify libpng
-
- libpng version 1.2.29 - May 8, 2008
- Updated and distributed by Glenn Randers-Pehrson
- <glennrp at users.sourceforge.net>
- Copyright (c) 1998-2008 Glenn Randers-Pehrson
- For conditions of distribution and use, see copyright
- notice in png.h.
-
- Based on:
-
- libpng versions 0.97, January 1998, through 1.2.29 - May 8, 2008
- Updated and distributed by Glenn Randers-Pehrson
- Copyright (c) 1998-2008 Glenn Randers-Pehrson
-
- libpng 1.0 beta 6 version 0.96 May 28, 1997
- Updated and distributed by Andreas Dilger
- Copyright (c) 1996, 1997 Andreas Dilger
-
- libpng 1.0 beta 2 - version 0.88 January 26, 1996
- For conditions of distribution and use, see copyright
- notice in png.h. Copyright (c) 1995, 1996 Guy Eric
- Schalnat, Group 42, Inc.
-
- Updated/rewritten per request in the libpng FAQ
- Copyright (c) 1995, 1996 Frank J. T. Wojcik
- December 18, 1995 & January 20, 1996
-
-.SH I. Introduction
-
-This file describes how to use and modify the PNG reference library
-(known as libpng) for your own use. There are five sections to this
-file: introduction, structures, reading, writing, and modification and
-configuration notes for various special platforms. In addition to this
-file, example.c is a good starting point for using the library, as
-it is heavily commented and should include everything most people
-will need. We assume that libpng is already installed; see the
-INSTALL file for instructions on how to install libpng.
-
-For examples of libpng usage, see the files "example.c", "pngtest.c",
-and the files in the "contrib" directory, all of which are included in the
-libpng distribution.
-
-Libpng was written as a companion to the PNG specification, as a way
-of reducing the amount of time and effort it takes to support the PNG
-file format in application programs.
-
-The PNG specification (second edition), November 2003, is available as
-a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at
-<http://www.w3.org/TR/2003/REC-PNG-20031110/
-The W3C and ISO documents have identical technical content.
-
-The PNG-1.2 specification is available at
-<http://www.libpng.org/pub/png/documents/>. It is technically equivalent
-to the PNG specification (second edition) but has some additional material.
-
-The PNG-1.0 specification is available
-as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
-W3C Recommendation <http://www.w3.org/TR/REC.png.html>.
-
-Some additional chunks are described in the special-purpose public chunks
-documents at <http://www.libpng.org/pub/png/documents/>.
-
-Other information
-about PNG, and the latest version of libpng, can be found at the PNG home
-page, <http://www.libpng.org/pub/png/>.
-
-Most users will not have to modify the library significantly; advanced
-users may want to modify it more. All attempts were made to make it as
-complete as possible, while keeping the code easy to understand.
-Currently, this library only supports C. Support for other languages
-is being considered.
-
-Libpng has been designed to handle multiple sessions at one time,
-to be easily modifiable, to be portable to the vast majority of
-machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
-to use. The ultimate goal of libpng is to promote the acceptance of
-the PNG file format in whatever way possible. While there is still
-work to be done (see the TODO file), libpng should cover the
-majority of the needs of its users.
-
-Libpng uses zlib for its compression and decompression of PNG files.
-Further information about zlib, and the latest version of zlib, can
-be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
-The zlib compression utility is a general purpose utility that is
-useful for more than PNG files, and can be used without libpng.
-See the documentation delivered with zlib for more details.
-You can usually find the source files for the zlib utility wherever you
-find the libpng source files.
-
-Libpng is thread safe, provided the threads are using different
-instances of the structures. Each thread should have its own
-png_struct and png_info instances, and thus its own image.
-Libpng does not protect itself against two threads using the
-same instance of a structure.
-
-.SH II. Structures
-
-There are two main structures that are important to libpng, png_struct
-and png_info. The first, png_struct, is an internal structure that
-will not, for the most part, be used by a user except as the first
-variable passed to every libpng function call.
-
-The png_info structure is designed to provide information about the
-PNG file. At one time, the fields of png_info were intended to be
-directly accessible to the user. However, this tended to cause problems
-with applications using dynamically loaded libraries, and as a result
-a set of interface functions for png_info (the png_get_*() and png_set_*()
-functions) was developed. The fields of png_info are still available for
-older applications, but it is suggested that applications use the new
-interfaces if at all possible.
-
-Applications that do make direct access to the members of png_struct (except
-for png_ptr->jmpbuf) must be recompiled whenever the library is updated,
-and applications that make direct access to the members of png_info must
-be recompiled if they were compiled or loaded with libpng version 1.0.6,
-in which the members were in a different order. In version 1.0.7, the
-members of the png_info structure reverted to the old order, as they were
-in versions 0.97c through 1.0.5. Starting with version 2.0.0, both
-structures are going to be hidden, and the contents of the structures will
-only be accessible through the png_get/png_set functions.
-
-The png.h header file is an invaluable reference for programming with libpng.
-And while I'm on the topic, make sure you include the libpng header file:
-
-#include <png.h>
-
-.SH III. Reading
-
-We'll now walk you through the possible functions to call when reading
-in a PNG file sequentially, briefly explaining the syntax and purpose
-of each one. See example.c and png.h for more detail. While
-progressive reading is covered in the next section, you will still
-need some of the functions discussed in this section to read a PNG
-file.
-
-.SS Setup
-
-You will want to do the I/O initialization(*) before you get into libpng,
-so if it doesn't work, you don't have much to undo. Of course, you
-will also want to insure that you are, in fact, dealing with a PNG
-file. Libpng provides a simple check to see if a file is a PNG file.
-To use it, pass in the first 1 to 8 bytes of the file to the function
-png_sig_cmp(), and it will return 0 if the bytes match the corresponding
-bytes of the PNG signature, or nonzero otherwise. Of course, the more bytes
-you pass in, the greater the accuracy of the prediction.
-
-If you are intending to keep the file pointer open for use in libpng,
-you must ensure you don't read more than 8 bytes from the beginning
-of the file, and you also have to make a call to png_set_sig_bytes_read()
-with the number of bytes you read from the beginning. Libpng will
-then only check the bytes (if any) that your program didn't read.
-
-(*): If you are not using the standard I/O functions, you will need
-to replace them with custom functions. See the discussion under
-Customizing libpng.
-
-
- FILE *fp = fopen(file_name, "rb");
- if (!fp)
- {
- return (ERROR);
- }
- fread(header, 1, number, fp);
- is_png = !png_sig_cmp(header, 0, number);
- if (!is_png)
- {
- return (NOT_PNG);
- }
-
-
-Next, png_struct and png_info need to be allocated and initialized. In
-order to ensure that the size of these structures is correct even with a
-dynamically linked libpng, there are functions to initialize and
-allocate the structures. We also pass the library version, optional
-pointers to error handling functions, and a pointer to a data struct for
-use by the error functions, if necessary (the pointer and functions can
-be NULL if the default error handlers are to be used). See the section
-on Changes to Libpng below regarding the old initialization functions.
-The structure allocation functions quietly return NULL if they fail to
-create the structure, so your application should check for that.
-
- png_structp png_ptr = png_create_read_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_read_struct(&png_ptr,
- (png_infopp)NULL, (png_infopp)NULL);
- return (ERROR);
- }
-
- png_infop end_info = png_create_info_struct(png_ptr);
- if (!end_info)
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_read_struct_2() instead of png_create_read_struct():
-
- png_structp png_ptr = png_create_read_struct_2
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn, (png_voidp)
- user_mem_ptr, user_malloc_fn, user_free_fn);
-
-The error handling routines passed to png_create_read_struct()
-and the memory alloc/free routines passed to png_create_struct_2()
-are only necessary if you are not using the libpng supplied error
-handling and memory alloc/free functions.
-
-When libpng encounters an error, it expects to longjmp back
-to your routine. Therefore, you will need to call setjmp and pass
-your png_jmpbuf(png_ptr). If you read the file from different
-routines, you will need to update the jmpbuf field every time you enter
-a new routine that will call a png_*() function.
-
-See your documentation of setjmp/longjmp for your compiler for more
-information on setjmp/longjmp. See the discussion on libpng error
-handling in the Customizing Libpng section below for more information
-on the libpng error handling. If an error occurs, and libpng longjmp's
-back to your setjmp, you will want to call png_destroy_read_struct() to
-free any memory.
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- &end_info);
- fclose(fp);
- return (ERROR);
- }
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-Now you need to set up the input code. The default for libpng is to
-use the C function fread(). If you use this, you will need to pass a
-valid FILE * in the function png_init_io(). Be sure that the file is
-opened in binary mode. If you wish to handle reading data in another
-way, you need not call the png_init_io() function, but you must then
-implement the libpng I/O methods discussed in the Customizing Libpng
-section below.
-
- png_init_io(png_ptr, fp);
-
-If you had previously opened the file and read any of the signature from
-the beginning in order to see if this was a PNG file, you need to let
-libpng know that there are some bytes missing from the start of the file.
-
- png_set_sig_bytes(png_ptr, number);
-
-.SS Setting up callback code
-
-You can set up a callback function to handle any unknown chunks in the
-input stream. You must supply the function
-
- read_chunk_callback(png_ptr ptr,
- png_unknown_chunkp chunk);
- {
- /* The unknown chunk structure contains your
- chunk data, along with similar data for any other
- unknown chunks: */
-
- png_byte name[5];
- png_byte *data;
- png_size_t size;
-
- /* Note that libpng has already taken care of
- the CRC handling */
-
- /* put your code here. Search for your chunk in the
- unknown chunk structure, process it, and return one
- of the following: */
-
- return (-n); /* chunk had an error */
- return (0); /* did not recognize */
- return (n); /* success */
- }
-
-(You can give your function another name that you like instead of
-"read_chunk_callback")
-
-To inform libpng about your function, use
-
- png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
- read_chunk_callback);
-
-This names not only the callback function, but also a user pointer that
-you can retrieve with
-
- png_get_user_chunk_ptr(png_ptr);
-
-If you call the png_set_read_user_chunk_fn() function, then all unknown
-chunks will be saved when read, in case your callback function will need
-one or more of them. This behavior can be changed with the
-png_set_keep_unknown_chunks() function, described below.
-
-At this point, you can set up a callback function that will be
-called after each row has been read, which you can use to control
-a progress meter or the like. It's demonstrated in pngtest.c.
-You must supply a function
-
- void read_row_callback(png_ptr ptr, png_uint_32 row,
- int pass);
- {
- /* put your code here */
- }
-
-(You can give it another name that you like instead of "read_row_callback")
-
-To inform libpng about your function, use
-
- png_set_read_status_fn(png_ptr, read_row_callback);
-
-.SS Width and height limits
-
-The PNG specification allows the width and height of an image to be as
-large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
-Since very few applications really need to process such large images,
-we have imposed an arbitrary 1-million limit on rows and columns.
-Larger images will be rejected immediately with a png_error() call. If
-you wish to override this limit, you can use
-
- png_set_user_limits(png_ptr, width_max, height_max);
-
-to set your own limits, or use width_max = height_max = 0x7fffffffL
-to allow all valid dimensions (libpng may reject some very large images
-anyway because of potential buffer overflow conditions).
-
-You should put this statement after you create the PNG structure and
-before calling png_read_info(), png_read_png(), or png_process_data().
-If you need to retrieve the limits that are being applied, use
-
- width_max = png_get_user_width_max(png_ptr);
- height_max = png_get_user_height_max(png_ptr);
-
-.SS Unknown-chunk handling
-
-Now you get to set the way the library processes unknown chunks in the
-input PNG stream. Both known and unknown chunks will be read. Normal
-behavior is that known chunks will be parsed into information in
-various info_ptr members while unknown chunks will be discarded. To change
-this, you can call:
-
- png_set_keep_unknown_chunks(png_ptr, keep,
- chunk_list, num_chunks);
- keep - 0: default unknown chunk handling
- 1: ignore; do not keep
- 2: keep only if safe-to-copy
- 3: keep even if unsafe-to-copy
- You can use these definitions:
- PNG_HANDLE_CHUNK_AS_DEFAULT 0
- PNG_HANDLE_CHUNK_NEVER 1
- PNG_HANDLE_CHUNK_IF_SAFE 2
- PNG_HANDLE_CHUNK_ALWAYS 3
- chunk_list - list of chunks affected (a byte string,
- five bytes per chunk, NULL or '\0' if
- num_chunks is 0)
- num_chunks - number of chunks affected; if 0, all
- unknown chunks are affected. If nonzero,
- only the chunks in the list are affected
-
-Unknown chunks declared in this way will be saved as raw data onto a
-list of png_unknown_chunk structures. If a chunk that is normally
-known to libpng is named in the list, it will be handled as unknown,
-according to the "keep" directive. If a chunk is named in successive
-instances of png_set_keep_unknown_chunks(), the final instance will
-take precedence. The IHDR and IEND chunks should not be named in
-chunk_list; if they are, libpng will process them normally anyway.
-
-Here is an example of the usage of png_set_keep_unknown_chunks(),
-where the private "vpAg" chunk will later be processed by a user chunk
-callback function:
-
- png_byte vpAg[5]={118, 112, 65, 103, (png_byte) '\0'};
-
- #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- png_byte unused_chunks[]=
- {
- 104, 73, 83, 84, (png_byte) '\0', /* hIST */
- 105, 84, 88, 116, (png_byte) '\0', /* iTXt */
- 112, 67, 65, 76, (png_byte) '\0', /* pCAL */
- 115, 67, 65, 76, (png_byte) '\0', /* sCAL */
- 115, 80, 76, 84, (png_byte) '\0', /* sPLT */
- 116, 73, 77, 69, (png_byte) '\0', /* tIME */
- };
- #endif
-
- ...
-
- #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- /* ignore all unknown chunks: */
- png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
- /* except for vpAg: */
- png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
- /* also ignore unused known chunks: */
- png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
- (int)sizeof(unused_chunks)/5);
- #endif
-
-
-.SS The high-level read interface
-
-At this point there are two ways to proceed; through the high-level
-read interface, or through a sequence of low-level read operations.
-You can use the high-level interface if (a) you are willing to read
-the entire image into memory, and (b) the input transformations
-you want to do are limited to the following set:
-
- PNG_TRANSFORM_IDENTITY No transformation
- PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
- 8 bits
- PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
- PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
- samples to bytes
- PNG_TRANSFORM_PACKSWAP Change order of packed
- pixels to LSB first
- PNG_TRANSFORM_EXPAND Perform set_expand()
- PNG_TRANSFORM_INVERT_MONO Invert monochrome images
- PNG_TRANSFORM_SHIFT Normalize pixels to the
- sBIT depth
- PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
- to BGRA
- PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
- to AG
- PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
- to transparency
- PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
-
-(This excludes setting a background color, doing gamma transformation,
-dithering, and setting filler.) If this is the case, simply do this:
-
- png_read_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of
-some set of transformation flags. This call is equivalent to png_read_info(),
-followed the set of transformations indicated by the transform mask,
-then png_read_image(), and finally png_read_end().
-
-(The final parameter of this call is not yet used. Someday it might point
-to transformation parameters required by some future input transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_read_png().
-
-After you have called png_read_png(), you can retrieve the image data
-with
-
- row_pointers = png_get_rows(png_ptr, info_ptr);
-
-where row_pointers is an array of pointers to the pixel data for each row:
-
- png_bytep row_pointers[height];
-
-If you know your image size and pixel size ahead of time, you can allocate
-row_pointers prior to calling png_read_png() with
-
- if (height > PNG_UINT_32_MAX/png_sizeof(png_byte))
- png_error (png_ptr,
- "Image is too tall to process in memory");
- if (width > PNG_UINT_32_MAX/pixel_size)
- png_error (png_ptr,
- "Image is too wide to process in memory");
- row_pointers = png_malloc(png_ptr,
- height*png_sizeof(png_bytep));
- for (int i=0; i<height, i++)
- row_pointers[i]=png_malloc(png_ptr,
- width*pixel_size);
- png_set_rows(png_ptr, info_ptr, &row_pointers);
-
-Alternatively you could allocate your image in one big block and define
-row_pointers[i] to point into the proper places in your block.
-
-If you use png_set_rows(), the application is responsible for freeing
-row_pointers (and row_pointers[i], if they were separately allocated).
-
-If you don't allocate row_pointers ahead of time, png_read_png() will
-do it, and it'll be free'ed when you call png_destroy_*().
-
-.SS The low-level read interface
-
-If you are going the low-level route, you are now ready to read all
-the file information up to the actual image data. You do this with a
-call to png_read_info().
-
- png_read_info(png_ptr, info_ptr);
-
-This will process all chunks up to but not including the image data.
-
-.SS Querying the info structure
-
-Functions are used to get the information from the info_ptr once it
-has been read. Note that these fields may not be completely filled
-in until png_read_end() has read the chunk data following the image.
-
- png_get_IHDR(png_ptr, info_ptr, &width, &height,
- &bit_depth, &color_type, &interlace_type,
- &compression_type, &filter_method);
-
- width - holds the width of the image
- in pixels (up to 2^31).
- height - holds the height of the image
- in pixels (up to 2^31).
- bit_depth - holds the bit depth of one of the
- image channels. (valid values are
- 1, 2, 4, 8, 16 and depend also on
- the color_type. See also
- significant bits (sBIT) below).
- color_type - describes which color/alpha channels
- are present.
- PNG_COLOR_TYPE_GRAY
- (bit depths 1, 2, 4, 8, 16)
- PNG_COLOR_TYPE_GRAY_ALPHA
- (bit depths 8, 16)
- PNG_COLOR_TYPE_PALETTE
- (bit depths 1, 2, 4, 8)
- PNG_COLOR_TYPE_RGB
- (bit_depths 8, 16)
- PNG_COLOR_TYPE_RGB_ALPHA
- (bit_depths 8, 16)
-
- PNG_COLOR_MASK_PALETTE
- PNG_COLOR_MASK_COLOR
- PNG_COLOR_MASK_ALPHA
-
- filter_method - (must be PNG_FILTER_TYPE_BASE
- for PNG 1.0, and can also be
- PNG_INTRAPIXEL_DIFFERENCING if
- the PNG datastream is embedded in
- a MNG-1.0 datastream)
- compression_type - (must be PNG_COMPRESSION_TYPE_BASE
- for PNG 1.0)
- interlace_type - (PNG_INTERLACE_NONE or
- PNG_INTERLACE_ADAM7)
- Any or all of interlace_type, compression_type, of
- filter_method can be NULL if you are
- not interested in their values.
-
- channels = png_get_channels(png_ptr, info_ptr);
- channels - number of channels of info for the
- color type (valid values are 1 (GRAY,
- PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
- 4 (RGB_ALPHA or RGB + filler byte))
- rowbytes = png_get_rowbytes(png_ptr, info_ptr);
- rowbytes - number of bytes needed to hold a row
-
- signature = png_get_signature(png_ptr, info_ptr);
- signature - holds the signature read from the
- file (if any). The data is kept in
- the same offset it would be if the
- whole signature were read (i.e. if an
- application had already read in 4
- bytes of signature before starting
- libpng, the remaining 4 bytes would
- be in signature[4] through signature[7]
- (see png_set_sig_bytes())).
-
-
- width = png_get_image_width(png_ptr,
- info_ptr);
- height = png_get_image_height(png_ptr,
- info_ptr);
- bit_depth = png_get_bit_depth(png_ptr,
- info_ptr);
- color_type = png_get_color_type(png_ptr,
- info_ptr);
- filter_method = png_get_filter_type(png_ptr,
- info_ptr);
- compression_type = png_get_compression_type(png_ptr,
- info_ptr);
- interlace_type = png_get_interlace_type(png_ptr,
- info_ptr);
-
-
-These are also important, but their validity depends on whether the chunk
-has been read. The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
-png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
-data has been read, or zero if it is missing. The parameters to the
-png_get_<chunk> are set directly if they are simple data types, or a pointer
-into the info_ptr is returned for any complex types.
-
- png_get_PLTE(png_ptr, info_ptr, &palette,
- &num_palette);
- palette - the palette for the file
- (array of png_color)
- num_palette - number of entries in the palette
-
- png_get_gAMA(png_ptr, info_ptr, &gamma);
- gamma - the gamma the file is written
- at (PNG_INFO_gAMA)
-
- png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
- srgb_intent - the rendering intent (PNG_INFO_sRGB)
- The presence of the sRGB chunk
- means that the pixel data is in the
- sRGB color space. This chunk also
- implies specific values of gAMA and
- cHRM.
-
- png_get_iCCP(png_ptr, info_ptr, &name,
- &compression_type, &profile, &proflen);
- name - The profile name.
- compression - The compression type; always
- PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
- You may give NULL to this argument to
- ignore it.
- profile - International Color Consortium color
- profile data. May contain NULs.
- proflen - length of profile data in bytes.
-
- png_get_sBIT(png_ptr, info_ptr, &sig_bit);
- sig_bit - the number of significant bits for
- (PNG_INFO_sBIT) each of the gray,
- red, green, and blue channels,
- whichever are appropriate for the
- given color type (png_color_16)
-
- png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans,
- &trans_values);
- trans - array of transparent entries for
- palette (PNG_INFO_tRNS)
- trans_values - graylevel or color sample values of
- the single transparent color for
- non-paletted images (PNG_INFO_tRNS)
- num_trans - number of transparent entries
- (PNG_INFO_tRNS)
-
- png_get_hIST(png_ptr, info_ptr, &hist);
- (PNG_INFO_hIST)
- hist - histogram of palette (array of
- png_uint_16)
-
- png_get_tIME(png_ptr, info_ptr, &mod_time);
- mod_time - time image was last modified
- (PNG_VALID_tIME)
-
- png_get_bKGD(png_ptr, info_ptr, &background);
- background - background color (PNG_VALID_bKGD)
- valid 16-bit red, green and blue
- values, regardless of color_type
-
- num_comments = png_get_text(png_ptr, info_ptr,
- &text_ptr, &num_text);
- num_comments - number of comments
- text_ptr - array of png_text holding image
- comments
- text_ptr[i].compression - type of compression used
- on "text" PNG_TEXT_COMPRESSION_NONE
- PNG_TEXT_COMPRESSION_zTXt
- PNG_ITXT_COMPRESSION_NONE
- PNG_ITXT_COMPRESSION_zTXt
- text_ptr[i].key - keyword for comment. Must contain
- 1-79 characters.
- text_ptr[i].text - text comments for current
- keyword. Can be empty.
- text_ptr[i].text_length - length of text string,
- after decompression, 0 for iTXt
- text_ptr[i].itxt_length - length of itxt string,
- after decompression, 0 for tEXt/zTXt
- text_ptr[i].lang - language of comment (empty
- string for unknown).
- text_ptr[i].lang_key - keyword in UTF-8
- (empty string for unknown).
- num_text - number of comments (same as
- num_comments; you can put NULL here
- to avoid the duplication)
- Note while png_set_text() will accept text, language,
- and translated keywords that can be NULL pointers, the
- structure returned by png_get_text will always contain
- regular zero-terminated C strings. They might be
- empty strings but they will never be NULL pointers.
-
- num_spalettes = png_get_sPLT(png_ptr, info_ptr,
- &palette_ptr);
- palette_ptr - array of palette structures holding
- contents of one or more sPLT chunks
- read.
- num_spalettes - number of sPLT chunks read.
-
- png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
- &unit_type);
- offset_x - positive offset from the left edge
- of the screen
- offset_y - positive offset from the top edge
- of the screen
- unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
- png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
- &unit_type);
- res_x - pixels/unit physical resolution in
- x direction
- res_y - pixels/unit physical resolution in
- x direction
- unit_type - PNG_RESOLUTION_UNKNOWN,
- PNG_RESOLUTION_METER
-
- png_get_sCAL(png_ptr, info_ptr, &unit, &width,
- &height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are doubles)
-
- png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
- &height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are strings like "2.54")
-
- num_unknown_chunks = png_get_unknown_chunks(png_ptr,
- info_ptr, &unknowns)
- unknowns - array of png_unknown_chunk
- structures holding unknown chunks
- unknowns[i].name - name of unknown chunk
- unknowns[i].data - data of unknown chunk
- unknowns[i].size - size of unknown chunk's data
- unknowns[i].location - position of chunk in file
-
- The value of "i" corresponds to the order in which the
- chunks were read from the PNG file or inserted with the
- png_set_unknown_chunks() function.
-
-The data from the pHYs chunk can be retrieved in several convenient
-forms:
-
- res_x = png_get_x_pixels_per_meter(png_ptr,
- info_ptr)
- res_y = png_get_y_pixels_per_meter(png_ptr,
- info_ptr)
- res_x_and_y = png_get_pixels_per_meter(png_ptr,
- info_ptr)
- res_x = png_get_x_pixels_per_inch(png_ptr,
- info_ptr)
- res_y = png_get_y_pixels_per_inch(png_ptr,
- info_ptr)
- res_x_and_y = png_get_pixels_per_inch(png_ptr,
- info_ptr)
- aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
- info_ptr)
-
- (Each of these returns 0 [signifying "unknown"] if
- the data is not present or if res_x is 0;
- res_x_and_y is 0 if res_x != res_y)
-
-The data from the oFFs chunk can be retrieved in several convenient
-forms:
-
- x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
- y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
- x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
- y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
-
- (Each of these returns 0 [signifying "unknown" if both
- x and y are 0] if the data is not present or if the
- chunk is present but the unit is the pixel)
-
-For more information, see the png_info definition in png.h and the
-PNG specification for chunk contents. Be careful with trusting
-rowbytes, as some of the transformations could increase the space
-needed to hold a row (expand, filler, gray_to_rgb, etc.).
-See png_read_update_info(), below.
-
-A quick word about text_ptr and num_text. PNG stores comments in
-keyword/text pairs, one pair per chunk, with no limit on the number
-of text chunks, and a 2^31 byte limit on their size. While there are
-suggested keywords, there is no requirement to restrict the use to these
-strings. It is strongly suggested that keywords and text be sensible
-to humans (that's the point), so don't use abbreviations. Non-printing
-symbols are not allowed. See the PNG specification for more details.
-There is also no requirement to have text after the keyword.
-
-Keywords should be limited to 79 Latin-1 characters without leading or
-trailing spaces, but non-consecutive spaces are allowed within the
-keyword. It is possible to have the same keyword any number of times.
-The text_ptr is an array of png_text structures, each holding a
-pointer to a language string, a pointer to a keyword and a pointer to
-a text string. The text string, language code, and translated
-keyword may be empty or NULL pointers. The keyword/text
-pairs are put into the array in the order that they are received.
-However, some or all of the text chunks may be after the image, so, to
-make sure you have read all the text chunks, don't mess with these
-until after you read the stuff after the image. This will be
-mentioned again below in the discussion that goes with png_read_end().
-
-.SS Input transformations
-
-After you've read the header information, you can set up the library
-to handle any special transformations of the image data. The various
-ways to transform the data will be described in the order that they
-should occur. This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths. Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data. For example, don't swap red and blue on grayscale data.
-
-The colors used for the background and transparency values should be
-supplied in the same format/depth as the current image data. They
-are stored in the same format/depth as the image data in a bKGD or tRNS
-chunk, so this is what libpng expects for this data. The colors are
-transformed to keep in sync with the image data when an application
-calls the png_read_update_info() routine (see below).
-
-Data will be decoded into the supplied row buffers packed into bytes
-unless the library has been told to transform it into another format.
-For example, 4 bit/pixel paletted or grayscale data will be returned
-2 pixels/byte with the leftmost pixel in the high-order bits of the
-byte, unless png_set_packing() is called. 8-bit RGB data will be stored
-in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
-is called to insert filler bytes, either before or after each RGB triplet.
-16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
-byte of the color value first, unless png_set_strip_16() is called to
-transform it to regular RGB RGB triplets, or png_set_filler() or
-png_set_add alpha() is called to insert filler bytes, either before or
-after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
-be modified with
-png_set_filler(), png_set_add_alpha(), or png_set_strip_16().
-
-The following code transforms grayscale images of less than 8 to 8 bits,
-changes paletted images to RGB, and adds a full alpha channel if there is
-transparency information in a tRNS chunk. This is most useful on
-grayscale images with bit depths of 2 or 4 or if there is a multiple-image
-viewing application that wishes to treat all images in the same way.
-
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- png_set_palette_to_rgb(png_ptr);
-
- if (color_type == PNG_COLOR_TYPE_GRAY &&
- bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
-
- if (png_get_valid(png_ptr, info_ptr,
- PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
-
-These three functions are actually aliases for png_set_expand(), added
-in libpng version 1.0.4, with the function names expanded to improve code
-readability. In some future version they may actually do different
-things.
-
-As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
-added. It expands the sample depth without changing tRNS to alpha.
-At the same time, png_set_gray_1_2_4_to_8() was deprecated, and it
-will be removed from a future version.
-
-
-PNG can have files with 16 bits per channel. If you only can handle
-8 bits per channel, this will strip the pixels down to 8 bit.
-
- if (bit_depth == 16)
- png_set_strip_16(png_ptr);
-
-If, for some reason, you don't need the alpha channel on an image,
-and you want to remove it rather than combining it with the background
-(but the image author certainly had in mind that you *would* combine
-it with the background, so that's what you should probably do):
-
- if (color_type & PNG_COLOR_MASK_ALPHA)
- png_set_strip_alpha(png_ptr);
-
-In PNG files, the alpha channel in an image
-is the level of opacity. If you need the alpha channel in an image to
-be the level of transparency instead of opacity, you can invert the
-alpha channel (or the tRNS chunk data) after it's read, so that 0 is
-fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
-images) is fully transparent, with
-
- png_set_invert_alpha(png_ptr);
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit
-files. This code expands to 1 pixel per byte without changing the
-values of the pixels:
-
- if (bit_depth < 8)
- png_set_packing(png_ptr);
-
-PNG files have possible bit depths of 1, 2, 4, 8, and 16. All pixels
-stored in a PNG image have been "scaled" or "shifted" up to the next
-higher possible bit depth (e.g. from 5 bits/sample in the range [0,31] to
-8 bits/sample in the range [0, 255]). However, it is also possible to
-convert the PNG pixel data back to the original bit depth of the image.
-This call reduces the pixels back down to the original bit depth:
-
- png_color_8p sig_bit;
-
- if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
- png_set_shift(png_ptr, sig_bit);
-
-PNG files store 3-color pixels in red, green, blue order. This code
-changes the storage of the pixels to blue, green, red:
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_bgr(png_ptr);
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
-into 4 or 8 bytes for windowing systems that need them in this format:
-
- if (color_type == PNG_COLOR_TYPE_RGB)
- png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
-
-where "filler" is the 8 or 16-bit number to fill with, and the location is
-either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
-you want the filler before the RGB or after. This transformation
-does not affect images that already have full alpha channels. To add an
-opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
-will generate RGBA pixels.
-
-Note that png_set_filler() does not change the color type. If you want
-to do that, you can add a true alpha channel with
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_GRAY)
- png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
-
-where "filler" contains the alpha value to assign to each pixel.
-This function was added in libpng-1.2.7.
-
-If you are reading an image with an alpha channel, and you need the
-data as ARGB instead of the normal PNG format RGBA:
-
- if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_swap_alpha(png_ptr);
-
-For some uses, you may want a grayscale image to be represented as
-RGB. This code will do that conversion:
-
- if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_gray_to_rgb(png_ptr);
-
-Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
-with alpha.
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_rgb_to_gray_fixed(png_ptr, error_action,
- int red_weight, int green_weight);
-
- error_action = 1: silently do the conversion
- error_action = 2: issue a warning if the original
- image has any pixel where
- red != green or red != blue
- error_action = 3: issue an error and abort the
- conversion if the original
- image has any pixel where
- red != green or red != blue
-
- red_weight: weight of red component times 100000
- green_weight: weight of green component times 100000
- If either weight is negative, default
- weights (21268, 71514) are used.
-
-If you have set error_action = 1 or 2, you can
-later check whether the image really was gray, after processing
-the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
-It will return a png_byte that is zero if the image was gray or
-1 if there were any non-gray pixels. bKGD and sBIT data
-will be silently converted to grayscale, using the green channel
-data, regardless of the error_action setting.
-
-With red_weight+green_weight<=100000,
-the normalized graylevel is computed:
-
- int rw = red_weight * 65536;
- int gw = green_weight * 65536;
- int bw = 65536 - (rw + gw);
- gray = (rw*red + gw*green + bw*blue)/65536;
-
-The default values approximate those recommended in the Charles
-Poynton's Color FAQ, <http://www.inforamp.net/~poynton/>
-Copyright (c) 1998-01-04 Charles Poynton <poynton at inforamp.net>
-
- Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
-
-Libpng approximates this with
-
- Y = 0.21268 * R + 0.7151 * G + 0.07217 * B
-
-which can be expressed with integers as
-
- Y = (6969 * R + 23434 * G + 2365 * B)/32768
-
-The calculation is done in a linear colorspace, if the image gamma
-is known.
-
-If you have a grayscale and you are using png_set_expand_depth(),
-png_set_expand(), or png_set_gray_to_rgb to change to truecolor or to
-a higher bit-depth, you must either supply the background color as a gray
-value at the original file bit-depth (need_expand = 1) or else supply the
-background color as an RGB triplet at the final, expanded bit depth
-(need_expand = 0). Similarly, if you are reading a paletted image, you
-must either supply the background color as a palette index (need_expand = 1)
-or as an RGB triplet that may or may not be in the palette (need_expand = 0).
-
- png_color_16 my_background;
- png_color_16p image_background;
-
- if (png_get_bKGD(png_ptr, info_ptr, &image_background))
- png_set_background(png_ptr, image_background,
- PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
- else
- png_set_background(png_ptr, &my_background,
- PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
-
-The png_set_background() function tells libpng to composite images
-with alpha or simple transparency against the supplied background
-color. If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
-you may use this color, or supply another color more suitable for
-the current display (e.g., the background color from a web page). You
-need to tell libpng whether the color is in the gamma space of the
-display (PNG_BACKGROUND_GAMMA_SCREEN for colors you supply), the file
-(PNG_BACKGROUND_GAMMA_FILE for colors from the bKGD chunk), or one
-that is neither of these gammas (PNG_BACKGROUND_GAMMA_UNIQUE - I don't
-know why anyone would use this, but it's here).
-
-To properly display PNG images on any kind of system, the application needs
-to know what the display gamma is. Ideally, the user will know this, and
-the application will allow them to set it. One method of allowing the user
-to set the display gamma separately for each system is to check for a
-SCREEN_GAMMA or DISPLAY_GAMMA environment variable, which will hopefully be
-correctly set.
-
-Note that display_gamma is the overall gamma correction required to produce
-pleasing results, which depends on the lighting conditions in the surrounding
-environment. In a dim or brightly lit room, no compensation other than
-the physical gamma exponent of the monitor is needed, while in a dark room
-a slightly smaller exponent is better.
-
- double gamma, screen_gamma;
-
- if (/* We have a user-defined screen
- gamma value */)
- {
- screen_gamma = user_defined_screen_gamma;
- }
- /* One way that applications can share the same
- screen gamma value */
- else if ((gamma_str = getenv("SCREEN_GAMMA"))
- != NULL)
- {
- screen_gamma = (double)atof(gamma_str);
- }
- /* If we don't have another value */
- else
- {
- screen_gamma = 2.2; /* A good guess for a
- PC monitor in a bright office or a dim room */
- screen_gamma = 2.0; /* A good guess for a
- PC monitor in a dark room */
- screen_gamma = 1.7 or 1.0; /* A good
- guess for Mac systems */
- }
-
-The png_set_gamma() function handles gamma transformations of the data.
-Pass both the file gamma and the current screen_gamma. If the file does
-not have a gamma value, you can pass one anyway if you have an idea what
-it is (usually 0.45455 is a good guess for GIF images on PCs). Note
-that file gammas are inverted from screen gammas. See the discussions
-on gamma in the PNG specification for an excellent description of what
-gamma is, and why all applications should support it. It is strongly
-recommended that PNG viewers support gamma correction.
-
- if (png_get_gAMA(png_ptr, info_ptr, &gamma))
- png_set_gamma(png_ptr, screen_gamma, gamma);
- else
- png_set_gamma(png_ptr, screen_gamma, 0.45455);
-
-If you need to reduce an RGB file to a paletted file, or if a paletted
-file has more entries then will fit on your screen, png_set_dither()
-will do that. Note that this is a simple match dither that merely
-finds the closest color available. This should work fairly well with
-optimized palettes, and fairly badly with linear color cubes. If you
-pass a palette that is larger then maximum_colors, the file will
-reduce the number of colors in the palette so it will fit into
-maximum_colors. If there is a histogram, it will use it to make
-more intelligent choices when reducing the palette. If there is no
-histogram, it may not do as good a job.
-
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- if (png_get_valid(png_ptr, info_ptr,
- PNG_INFO_PLTE))
- {
- png_uint_16p histogram = NULL;
-
- png_get_hIST(png_ptr, info_ptr,
- &histogram);
- png_set_dither(png_ptr, palette, num_palette,
- max_screen_colors, histogram, 1);
- }
- else
- {
- png_color std_color_cube[MAX_SCREEN_COLORS] =
- { ... colors ... };
-
- png_set_dither(png_ptr, std_color_cube,
- MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
- NULL,0);
- }
- }
-
-PNG files describe monochrome as black being zero and white being one.
-The following code will reverse this (make black be one and white be
-zero):
-
- if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
- png_set_invert_mono(png_ptr);
-
-This function can also be used to invert grayscale and gray-alpha images:
-
- if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_invert_mono(png_ptr);
-
-PNG files store 16 bit pixels in network byte order (big-endian,
-ie. most significant bits first). This code changes the storage to the
-other way (little-endian, i.e. least significant bits first, the
-way PCs store them):
-
- if (bit_depth == 16)
- png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
- if (bit_depth < 8)
- png_set_packswap(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs. This is done by setting a callback
-with
-
- png_set_read_user_transform_fn(png_ptr,
- read_transform_fn);
-
-You must supply the function
-
- void read_transform_fn(png_ptr ptr, row_info_ptr
- row_info, png_bytep data)
-
-See pngtest.c for a working example. Your function will be called
-after all of the other transformations have been processed.
-
-You can also set up a pointer to a user structure for use by your
-callback function, and you can inform libpng that your transform
-function will change the number of channels or bit depth with the
-function
-
- png_set_user_transform_info(png_ptr, user_ptr,
- user_depth, user_channels);
-
-The user's application, not libpng, is responsible for allocating and
-freeing any memory required for the user structure.
-
-You can retrieve the pointer via the function
-png_get_user_transform_ptr(). For example:
-
- voidp read_user_transform_ptr =
- png_get_user_transform_ptr(png_ptr);
-
-The last thing to handle is interlacing; this is covered in detail below,
-but you must call the function here if you want libpng to handle expansion
-of the interlaced image.
-
- number_of_passes = png_set_interlace_handling(png_ptr);
-
-After setting the transformations, libpng can update your png_info
-structure to reflect any transformations you've requested with this
-call. This is most useful to update the info structure's rowbytes
-field so you can use it to allocate your image memory. This function
-will also update your palette with the correct screen_gamma and
-background if these have been given with the calls above.
-
- png_read_update_info(png_ptr, info_ptr);
-
-After you call png_read_update_info(), you can allocate any
-memory you need to hold the image. The row data is simply
-raw byte data for all forms of images. As the actual allocation
-varies among applications, no example will be given. If you
-are allocating one large chunk, you will need to build an
-array of pointers to each row, as it will be needed for some
-of the functions below.
-
-.SS Reading image data
-
-After you've allocated memory, you can read the image data.
-The simplest way to do this is in one function call. If you are
-allocating enough memory to hold the whole image, you can just
-call png_read_image() and libpng will read in all the image data
-and put it in the memory area supplied. You will need to pass in
-an array of pointers to each row.
-
-This function automatically handles interlacing, so you don't need
-to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_read_rows().
-
- png_read_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
- png_bytep row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to read in the whole image at once, you can
-use png_read_rows() instead. If there is no interlacing (check
-interlace_type == PNG_INTERLACE_NONE), this is simple:
-
- png_read_rows(png_ptr, row_pointers, NULL,
- number_of_rows);
-
-where row_pointers is the same as in the png_read_image() call.
-
-If you are doing this just one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
- png_bytep row_pointer = row;
- png_read_row(png_ptr, row_pointer, NULL);
-
-If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
-get somewhat harder. The only current (PNG Specification version 1.2)
-interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7)
-is a somewhat complicated 2D interlace scheme, known as Adam7, that
-breaks down an image into seven smaller images of varying size, based
-on an 8x8 grid.
-
-libpng can fill out those images or it can give them to you "as is".
-If you want them filled out, there are two ways to do that. The one
-mentioned in the PNG specification is to expand each pixel to cover
-those pixels that have not been read yet (the "rectangle" method).
-This results in a blocky image for the first pass, which gradually
-smooths out as more pixels are read. The other method is the "sparkle"
-method, where pixels are drawn only in their final locations, with the
-rest of the image remaining whatever colors they were initialized to
-before the start of the read. The first method usually looks better,
-but tends to be slower, as there are more pixels to put in the rows.
-
-If you don't want libpng to handle the interlacing details, just call
-png_read_rows() seven times to read in all seven images. Each of the
-images is a valid image by itself, or they can all be combined on an
-8x8 grid to form a single image (although if you intend to combine them
-you would be far better off using the libpng interlace handling).
-
-The first pass will return an image 1/8 as wide as the entire image
-(every 8th column starting in column 0) and 1/8 as high as the original
-(every 8th row starting in row 0), the second will be 1/8 as wide
-(starting in column 4) and 1/8 as high (also starting in row 0). The
-third pass will be 1/4 as wide (every 4th pixel starting in column 0) and
-1/8 as high (every 8th row starting in row 4), and the fourth pass will
-be 1/4 as wide and 1/4 as high (every 4th column starting in column 2,
-and every 4th row starting in row 0). The fifth pass will return an
-image 1/2 as wide, and 1/4 as high (starting at column 0 and row 2),
-while the sixth pass will be 1/2 as wide and 1/2 as high as the original
-(starting in column 1 and row 0). The seventh and final pass will be as
-wide as the original, and 1/2 as high, containing all of the odd
-numbered scanlines. Phew!
-
-If you want libpng to expand the images, call this before calling
-png_start_read_image() or png_read_update_info():
-
- if (interlace_type == PNG_INTERLACE_ADAM7)
- number_of_passes
- = png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed. Currently, this
-is seven, but may change if another interlace type is added.
-This function can be called even if the file is not interlaced,
-where it will return one pass.
-
-If you are not going to display the image after each pass, but are
-going to wait until the entire image is read in, use the sparkle
-effect. This effect is faster and the end result of either method
-is exactly the same. If you are planning on displaying the image
-after each pass, the "rectangle" effect is generally considered the
-better looking one.
-
-If you only want the "sparkle" effect, just call png_read_rows() as
-normal, with the third parameter NULL. Make sure you make pass over
-the image number_of_passes times, and you don't change the data in the
-rows between calls. You can change the locations of the data, just
-not the data. Each pass only writes the pixels appropriate for that
-pass, and assumes the data from previous passes is still valid.
-
- png_read_rows(png_ptr, row_pointers, NULL,
- number_of_rows);
-
-If you only want the first effect (the rectangles), do the same as
-before except pass the row buffer in the third parameter, and leave
-the second parameter NULL.
-
- png_read_rows(png_ptr, NULL, row_pointers,
- number_of_rows);
-
-.SS Finishing a sequential read
-
-After you are finished reading the image through the
-low-level interface, you can finish reading the file. If you are
-interested in comments or time, which may be stored either before or
-after the image data, you should pass the separate png_info struct if
-you want to keep the comments from before and after the image
-separate. If you are not interested, you can pass NULL.
-
- png_read_end(png_ptr, end_info);
-
-When you are done, you can free all memory allocated by libpng like this:
-
- png_destroy_read_struct(&png_ptr, &info_ptr,
- &end_info);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
- png_free_data(png_ptr, info_ptr, mask, seq)
- mask - identifies data to be freed, a mask
- containing the bitwise OR of one or
- more of
- PNG_FREE_PLTE, PNG_FREE_TRNS,
- PNG_FREE_HIST, PNG_FREE_ICCP,
- PNG_FREE_PCAL, PNG_FREE_ROWS,
- PNG_FREE_SCAL, PNG_FREE_SPLT,
- PNG_FREE_TEXT, PNG_FREE_UNKN,
- or simply PNG_FREE_ALL
- seq - sequence number of item to be freed
- (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng, and will in those
-cases do nothing. The "seq" parameter is ignored if only one item
-of the selected data type, such as PLTE, is allowed. If "seq" is not
--1, and multiple items are allowed for the data type identified in
-the mask, such as text or sPLT, only the n'th item in the structure
-is freed, where n is "seq".
-
-The default behavior is only to free data that was allocated internally
-by libpng. This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_zalloc() and passed in via a png_set_*() function, with
-
- png_data_freer(png_ptr, info_ptr, freer, mask)
- mask - which data elements are affected
- same choices as in png_free_data()
- freer - one of
- PNG_DESTROY_WILL_FREE_DATA
- PNG_SET_WILL_FREE_DATA
- PNG_USER_WILL_FREE_DATA
-
-This function only affects data that has already been allocated.
-You can call this function after reading the PNG data but before calling
-any png_set_*() functions, to control whether the user or the png_set_*()
-function is responsible for freeing any existing data that might be present,
-and again after the png_set_*() functions to control whether the user
-or png_destroy_*() is supposed to free the data. When the user assumes
-responsibility for libpng-allocated data, the application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_zalloc() to allocate it.
-
-If you allocated your row_pointers in a single block, as suggested above in
-the description of the high level read interface, you must not transfer
-responsibility for freeing it to the png_set_rows or png_read_destroy function,
-because they would also try to free the individual row_pointers[i].
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key. Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-
-The png_free_data() function will turn off the "valid" flag for anything
-it frees. If you need to turn the flag off for a chunk that was freed by your
-application instead of by libpng, you can use
-
- png_set_invalid(png_ptr, info_ptr, mask);
- mask - identifies the chunks to be made invalid,
- containing the bitwise OR of one or
- more of
- PNG_INFO_gAMA, PNG_INFO_sBIT,
- PNG_INFO_cHRM, PNG_INFO_PLTE,
- PNG_INFO_tRNS, PNG_INFO_bKGD,
- PNG_INFO_hIST, PNG_INFO_pHYs,
- PNG_INFO_oFFs, PNG_INFO_tIME,
- PNG_INFO_pCAL, PNG_INFO_sRGB,
- PNG_INFO_iCCP, PNG_INFO_sPLT,
- PNG_INFO_sCAL, PNG_INFO_IDAT
-
-For a more compact example of reading a PNG image, see the file example.c.
-
-.SS Reading PNG files progressively
-
-The progressive reader is slightly different then the non-progressive
-reader. Instead of calling png_read_info(), png_read_rows(), and
-png_read_end(), you make one call to png_process_data(), which calls
-callbacks when it has the info, a row, or the end of the image. You
-set up these callbacks with png_set_progressive_read_fn(). You don't
-have to worry about the input/output functions of libpng, as you are
-giving the library the data directly in png_process_data(). I will
-assume that you have read the section on reading PNG files above,
-so I will only highlight the differences (although I will show
-all of the code).
-
-png_structp png_ptr;
-png_infop info_ptr;
-
- /* An example code fragment of how you would
- initialize the progressive reader in your
- application. */
- int
- initialize_png_reader()
- {
- png_ptr = png_create_read_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
- info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_read_struct(&png_ptr, (png_infopp)NULL,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- /* This one's new. You can provide functions
- to be called when the header info is valid,
- when each row is completed, and when the image
- is finished. If you aren't using all functions,
- you can specify NULL parameters. Even when all
- three functions are NULL, you need to call
- png_set_progressive_read_fn(). You can use
- any struct as the user_ptr (cast to a void pointer
- for the function call), and retrieve the pointer
- from inside the callbacks using the function
-
- png_get_progressive_ptr(png_ptr);
-
- which will return a void pointer, which you have
- to cast appropriately.
- */
- png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
- info_callback, row_callback, end_callback);
-
- return 0;
- }
-
- /* A code fragment that you call as you receive blocks
- of data */
- int
- process_data(png_bytep buffer, png_uint_32 length)
- {
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- /* This one's new also. Simply give it a chunk
- of data from the file stream (in order, of
- course). On machines with segmented memory
- models machines, don't give it any more than
- 64K. The library seems to run fine with sizes
- of 4K. Although you can give it much less if
- necessary (I assume you can give it chunks of
- 1 byte, I haven't tried less then 256 bytes
- yet). When this function returns, you may
- want to display any rows that were generated
- in the row callback if you don't already do
- so there.
- */
- png_process_data(png_ptr, info_ptr, buffer, length);
- return 0;
- }
-
- /* This function is called (as set by
- png_set_progressive_read_fn() above) when enough data
- has been supplied so all of the header has been
- read.
- */
- void
- info_callback(png_structp png_ptr, png_infop info)
- {
- /* Do any setup here, including setting any of
- the transformations mentioned in the Reading
- PNG files section. For now, you _must_ call
- either png_start_read_image() or
- png_read_update_info() after all the
- transformations are set (even if you don't set
- any). You may start getting rows before
- png_process_data() returns, so this is your
- last chance to prepare for that.
- */
- }
-
- /* This function is called when each row of image
- data is complete */
- void
- row_callback(png_structp png_ptr, png_bytep new_row,
- png_uint_32 row_num, int pass)
- {
- /* If the image is interlaced, and you turned
- on the interlace handler, this function will
- be called for every row in every pass. Some
- of these rows will not be changed from the
- previous pass. When the row is not changed,
- the new_row variable will be NULL. The rows
- and passes are called in order, so you don't
- really need the row_num and pass, but I'm
- supplying them because it may make your life
- easier.
-
- For the non-NULL rows of interlaced images,
- you must call png_progressive_combine_row()
- passing in the row and the old row. You can
- call this function for NULL rows (it will just
- return) and for non-interlaced images (it just
- does the memcpy for you) if it will make the
- code easier. Thus, you can just do this for
- all cases:
- */
-
- png_progressive_combine_row(png_ptr, old_row,
- new_row);
-
- /* where old_row is what was displayed for
- previously for the row. Note that the first
- pass (pass == 0, really) will completely cover
- the old row, so the rows do not have to be
- initialized. After the first pass (and only
- for interlaced images), you will have to pass
- the current row, and the function will combine
- the old row and the new row.
- */
- }
-
- void
- end_callback(png_structp png_ptr, png_infop info)
- {
- /* This function is called after the whole image
- has been read, including any chunks after the
- image (up to and including the IEND). You
- will usually have the same info chunk as you
- had in the header, although some data may have
- been added to the comments and time fields.
-
- Most people won't do much here, perhaps setting
- a flag that marks the image as finished.
- */
- }
-
-
-
-.SH IV. Writing
-
-Much of this is very similar to reading. However, everything of
-importance is repeated here, so you won't have to constantly look
-back up in the reading section to understand writing.
-
-.SS Setup
-
-You will want to do the I/O initialization before you get into libpng,
-so if it doesn't work, you don't have anything to undo. If you are not
-using the standard I/O functions, you will need to replace them with
-custom writing functions. See the discussion under Customizing libpng.
-
- FILE *fp = fopen(file_name, "wb");
- if (!fp)
- {
- return (ERROR);
- }
-
-Next, png_struct and png_info need to be allocated and initialized.
-As these can be both relatively large, you may not want to store these
-on the stack, unless you have stack space to spare. Of course, you
-will want to check if they return NULL. If you are also reading,
-you won't want to name your read structure and your write structure
-both "png_ptr"; you can call them anything you like, such as
-"read_ptr" and "write_ptr". Look at pngtest.c, for example.
-
- png_structp png_ptr = png_create_write_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_write_struct(&png_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_write_struct_2() instead of png_create_write_struct():
-
- png_structp png_ptr = png_create_write_struct_2
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn, (png_voidp)
- user_mem_ptr, user_malloc_fn, user_free_fn);
-
-After you have these structures, you will need to set up the
-error handling. When libpng encounters an error, it expects to
-longjmp() back to your routine. Therefore, you will need to call
-setjmp() and pass the png_jmpbuf(png_ptr). If you
-write the file from different routines, you will need to update
-the png_jmpbuf(png_ptr) every time you enter a new routine that will
-call a png_*() function. See your documentation of setjmp/longjmp
-for your compiler for more information on setjmp/longjmp. See
-the discussion on libpng error handling in the Customizing Libpng
-section below for more information on the libpng error handling.
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_write_struct(&png_ptr, &info_ptr);
- fclose(fp);
- return (ERROR);
- }
- ...
- return;
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-Now you need to set up the output code. The default for libpng is to
-use the C function fwrite(). If you use this, you will need to pass a
-valid FILE * in the function png_init_io(). Be sure that the file is
-opened in binary mode. Again, if you wish to handle writing data in
-another way, see the discussion on libpng I/O handling in the Customizing
-Libpng section below.
-
- png_init_io(png_ptr, fp);
-
-If you are embedding your PNG into a datastream such as MNG, and don't
-want libpng to write the 8-byte signature, or if you have already
-written the signature in your application, use
-
- png_set_sig_bytes(png_ptr, 8);
-
-to inform libpng that it should not write a signature.
-
-.SS Write callbacks
-
-At this point, you can set up a callback function that will be
-called after each row has been written, which you can use to control
-a progress meter or the like. It's demonstrated in pngtest.c.
-You must supply a function
-
- void write_row_callback(png_ptr, png_uint_32 row,
- int pass);
- {
- /* put your code here */
- }
-
-(You can give it another name that you like instead of "write_row_callback")
-
-To inform libpng about your function, use
-
- png_set_write_status_fn(png_ptr, write_row_callback);
-
-You now have the option of modifying how the compression library will
-run. The following functions are mainly for testing, but may be useful
-in some cases, like if you need to write PNG files extremely fast and
-are willing to give up some compression, or if you want to get the
-maximum possible compression at the expense of slower writing. If you
-have no special needs in this area, let the library do what it wants by
-not calling this function at all, as it has been tuned to deliver a good
-speed/compression ratio. The second parameter to png_set_filter() is
-the filter method, for which the only valid values are 0 (as of the
-July 1999 PNG specification, version 1.2) or 64 (if you are writing
-a PNG datastream that is to be embedded in a MNG datastream). The third
-parameter is a flag that indicates which filter type(s) are to be tested
-for each scanline. See the PNG specification for details on the specific filter
-types.
-
-
- /* turn on or off filtering, and/or choose
- specific filters. You can use either a single
- PNG_FILTER_VALUE_NAME or the bitwise OR of one
- or more PNG_FILTER_NAME masks. */
- png_set_filter(png_ptr, 0,
- PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
- PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
- PNG_FILTER_UP | PNG_FILTER_VALUE_UP |
- PNG_FILTER_AVE | PNG_FILTER_VALUE_AVE |
- PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
- PNG_ALL_FILTERS);
-
-If an application
-wants to start and stop using particular filters during compression,
-it should start out with all of the filters (to ensure that the previous
-row of pixels will be stored in case it's needed later), and then add
-and remove them after the start of compression.
-
-If you are writing a PNG datastream that is to be embedded in a MNG
-datastream, the second parameter can be either 0 or 64.
-
-The png_set_compression_*() functions interface to the zlib compression
-library, and should mostly be ignored unless you really know what you are
-doing. The only generally useful call is png_set_compression_level()
-which changes how much time zlib spends on trying to compress the image
-data. See the Compression Library (zlib.h and algorithm.txt, distributed
-with zlib) for details on the compression levels.
-
- /* set the zlib compression level */
- png_set_compression_level(png_ptr,
- Z_BEST_COMPRESSION);
-
- /* set other zlib parameters */
- png_set_compression_mem_level(png_ptr, 8);
- png_set_compression_strategy(png_ptr,
- Z_DEFAULT_STRATEGY);
- png_set_compression_window_bits(png_ptr, 15);
- png_set_compression_method(png_ptr, 8);
- png_set_compression_buffer_size(png_ptr, 8192)
-
-extern PNG_EXPORT(void,png_set_zbuf_size)
-
-.SS Setting the contents of info for output
-
-You now need to fill in the png_info structure with all the data you
-wish to write before the actual image. Note that the only thing you
-are allowed to write after the image is the text chunks and the time
-chunk (as of PNG Specification 1.2, anyway). See png_write_end() and
-the latest PNG specification for more information on that. If you
-wish to write them before the image, fill them in now, and flag that
-data as being valid. If you want to wait until after the data, don't
-fill them until png_write_end(). For all the fields in png_info and
-their data types, see png.h. For explanations of what the fields
-contain, see the PNG specification.
-
-Some of the more important parts of the png_info are:
-
- png_set_IHDR(png_ptr, info_ptr, width, height,
- bit_depth, color_type, interlace_type,
- compression_type, filter_method)
- width - holds the width of the image
- in pixels (up to 2^31).
- height - holds the height of the image
- in pixels (up to 2^31).
- bit_depth - holds the bit depth of one of the
- image channels.
- (valid values are 1, 2, 4, 8, 16
- and depend also on the
- color_type. See also significant
- bits (sBIT) below).
- color_type - describes which color/alpha
- channels are present.
- PNG_COLOR_TYPE_GRAY
- (bit depths 1, 2, 4, 8, 16)
- PNG_COLOR_TYPE_GRAY_ALPHA
- (bit depths 8, 16)
- PNG_COLOR_TYPE_PALETTE
- (bit depths 1, 2, 4, 8)
- PNG_COLOR_TYPE_RGB
- (bit_depths 8, 16)
- PNG_COLOR_TYPE_RGB_ALPHA
- (bit_depths 8, 16)
-
- PNG_COLOR_MASK_PALETTE
- PNG_COLOR_MASK_COLOR
- PNG_COLOR_MASK_ALPHA
-
- interlace_type - PNG_INTERLACE_NONE or
- PNG_INTERLACE_ADAM7
- compression_type - (must be
- PNG_COMPRESSION_TYPE_DEFAULT)
- filter_method - (must be PNG_FILTER_TYPE_DEFAULT
- or, if you are writing a PNG to
- be embedded in a MNG datastream,
- can also be
- PNG_INTRAPIXEL_DIFFERENCING)
-
-If you call png_set_IHDR(), the call must appear before any of the
-other png_set_*() functions, which might require access to some of
-the IHDR settings. The remaining png_set_*() functions can be called
-in any order.
-
- png_set_PLTE(png_ptr, info_ptr, palette,
- num_palette);
- palette - the palette for the file
- (array of png_color)
- num_palette - number of entries in the palette
-
- png_set_gAMA(png_ptr, info_ptr, gamma);
- gamma - the gamma the image was created
- at (PNG_INFO_gAMA)
-
- png_set_sRGB(png_ptr, info_ptr, srgb_intent);
- srgb_intent - the rendering intent
- (PNG_INFO_sRGB) The presence of
- the sRGB chunk means that the pixel
- data is in the sRGB color space.
- This chunk also implies specific
- values of gAMA and cHRM. Rendering
- intent is the CSS-1 property that
- has been defined by the International
- Color Consortium
- (http://www.color.org).
- It can be one of
- PNG_sRGB_INTENT_SATURATION,
- PNG_sRGB_INTENT_PERCEPTUAL,
- PNG_sRGB_INTENT_ABSOLUTE, or
- PNG_sRGB_INTENT_RELATIVE.
-
-
- png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
- srgb_intent);
- srgb_intent - the rendering intent
- (PNG_INFO_sRGB) The presence of the
- sRGB chunk means that the pixel
- data is in the sRGB color space.
- This function also causes gAMA and
- cHRM chunks with the specific values
- that are consistent with sRGB to be
- written.
-
- png_set_iCCP(png_ptr, info_ptr, name, compression_type,
- profile, proflen);
- name - The profile name.
- compression - The compression type; always
- PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
- You may give NULL to this argument to
- ignore it.
- profile - International Color Consortium color
- profile data. May contain NULs.
- proflen - length of profile data in bytes.
-
- png_set_sBIT(png_ptr, info_ptr, sig_bit);
- sig_bit - the number of significant bits for
- (PNG_INFO_sBIT) each of the gray, red,
- green, and blue channels, whichever are
- appropriate for the given color type
- (png_color_16)
-
- png_set_tRNS(png_ptr, info_ptr, trans, num_trans,
- trans_values);
- trans - array of transparent entries for
- palette (PNG_INFO_tRNS)
- trans_values - graylevel or color sample values of
- the single transparent color for
- non-paletted images (PNG_INFO_tRNS)
- num_trans - number of transparent entries
- (PNG_INFO_tRNS)
-
- png_set_hIST(png_ptr, info_ptr, hist);
- (PNG_INFO_hIST)
- hist - histogram of palette (array of
- png_uint_16)
-
- png_set_tIME(png_ptr, info_ptr, mod_time);
- mod_time - time image was last modified
- (PNG_VALID_tIME)
-
- png_set_bKGD(png_ptr, info_ptr, background);
- background - background color (PNG_VALID_bKGD)
-
- png_set_text(png_ptr, info_ptr, text_ptr, num_text);
- text_ptr - array of png_text holding image
- comments
- text_ptr[i].compression - type of compression used
- on "text" PNG_TEXT_COMPRESSION_NONE
- PNG_TEXT_COMPRESSION_zTXt
- PNG_ITXT_COMPRESSION_NONE
- PNG_ITXT_COMPRESSION_zTXt
- text_ptr[i].key - keyword for comment. Must contain
- 1-79 characters.
- text_ptr[i].text - text comments for current
- keyword. Can be NULL or empty.
- text_ptr[i].text_length - length of text string,
- after decompression, 0 for iTXt
- text_ptr[i].itxt_length - length of itxt string,
- after decompression, 0 for tEXt/zTXt
- text_ptr[i].lang - language of comment (NULL or
- empty for unknown).
- text_ptr[i].translated_keyword - keyword in UTF-8 (NULL
- or empty for unknown).
- num_text - number of comments
-
- png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
- num_spalettes);
- palette_ptr - array of png_sPLT_struct structures
- to be added to the list of palettes
- in the info structure.
- num_spalettes - number of palette structures to be
- added.
-
- png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
- unit_type);
- offset_x - positive offset from the left
- edge of the screen
- offset_y - positive offset from the top
- edge of the screen
- unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
- png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
- unit_type);
- res_x - pixels/unit physical resolution
- in x direction
- res_y - pixels/unit physical resolution
- in y direction
- unit_type - PNG_RESOLUTION_UNKNOWN,
- PNG_RESOLUTION_METER
-
- png_set_sCAL(png_ptr, info_ptr, unit, width, height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are doubles)
-
- png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are strings like "2.54")
-
- png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
- num_unknowns)
- unknowns - array of png_unknown_chunk
- structures holding unknown chunks
- unknowns[i].name - name of unknown chunk
- unknowns[i].data - data of unknown chunk
- unknowns[i].size - size of unknown chunk's data
- unknowns[i].location - position to write chunk in file
- 0: do not write chunk
- PNG_HAVE_IHDR: before PLTE
- PNG_HAVE_PLTE: before IDAT
- PNG_AFTER_IDAT: after IDAT
-
-The "location" member is set automatically according to
-what part of the output file has already been written.
-You can change its value after calling png_set_unknown_chunks()
-as demonstrated in pngtest.c. Within each of the "locations",
-the chunks are sequenced according to their position in the
-structure (that is, the value of "i", which is the order in which
-the chunk was either read from the input file or defined with
-png_set_unknown_chunks).
-
-A quick word about text and num_text. text is an array of png_text
-structures. num_text is the number of valid structures in the array.
-Each png_text structure holds a language code, a keyword, a text value,
-and a compression type.
-
-The compression types have the same valid numbers as the compression
-types of the image data. Currently, the only valid number is zero.
-However, you can store text either compressed or uncompressed, unlike
-images, which always have to be compressed. So if you don't want the
-text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
-Because tEXt and zTXt chunks don't have a language field, if you
-specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
-any language code or translated keyword will not be written out.
-
-Until text gets around 1000 bytes, it is not worth compressing it.
-After the text has been written out to the file, the compression type
-is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
-so that it isn't written out again at the end (in case you are calling
-png_write_end() with the same struct.
-
-The keywords that are given in the PNG Specification are:
-
- Title Short (one line) title or
- caption for image
- Author Name of image's creator
- Description Description of image (possibly long)
- Copyright Copyright notice
- Creation Time Time of original image creation
- (usually RFC 1123 format, see below)
- Software Software used to create the image
- Disclaimer Legal disclaimer
- Warning Warning of nature of content
- Source Device used to create the image
- Comment Miscellaneous comment; conversion
- from other image format
-
-The keyword-text pairs work like this. Keywords should be short
-simple descriptions of what the comment is about. Some typical
-keywords are found in the PNG specification, as is some recommendations
-on keywords. You can repeat keywords in a file. You can even write
-some text before the image and some after. For example, you may want
-to put a description of the image before the image, but leave the
-disclaimer until after, so viewers working over modem connections
-don't have to wait for the disclaimer to go over the modem before
-they start seeing the image. Finally, keywords should be full
-words, not abbreviations. Keywords and text are in the ISO 8859-1
-(Latin-1) character set (a superset of regular ASCII) and can not
-contain NUL characters, and should not contain control or other
-unprintable characters. To make the comments widely readable, stick
-with basic ASCII, and avoid machine specific character set extensions
-like the IBM-PC character set. The keyword must be present, but
-you can leave off the text string on non-compressed pairs.
-Compressed pairs must have a text string, as only the text string
-is compressed anyway, so the compression would be meaningless.
-
-PNG supports modification time via the png_time structure. Two
-conversion routines are provided, png_convert_from_time_t() for
-time_t and png_convert_from_struct_tm() for struct tm. The
-time_t routine uses gmtime(). You don't have to use either of
-these, but if you wish to fill in the png_time structure directly,
-you should provide the time in universal time (GMT) if possible
-instead of your local time. Note that the year number is the full
-year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
-that months start with 1.
-
-If you want to store the time of the original image creation, you should
-use a plain tEXt chunk with the "Creation Time" keyword. This is
-necessary because the "creation time" of a PNG image is somewhat vague,
-depending on whether you mean the PNG file, the time the image was
-created in a non-PNG format, a still photo from which the image was
-scanned, or possibly the subject matter itself. In order to facilitate
-machine-readable dates, it is recommended that the "Creation Time"
-tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
-although this isn't a requirement. Unlike the tIME chunk, the
-"Creation Time" tEXt chunk is not expected to be automatically changed
-by the software. To facilitate the use of RFC 1123 dates, a function
-png_convert_to_rfc1123(png_timep) is provided to convert from PNG
-time to an RFC 1123 format string.
-
-.SS Writing unknown chunks
-
-You can use the png_set_unknown_chunks function to queue up chunks
-for writing. You give it a chunk name, raw data, and a size; that's
-all there is to it. The chunks will be written by the next following
-png_write_info_before_PLTE, png_write_info, or png_write_end function.
-Any chunks previously read into the info structure's unknown-chunk
-list will also be written out in a sequence that satisfies the PNG
-specification's ordering rules.
-
-.SS The high-level write interface
-
-At this point there are two ways to proceed; through the high-level
-write interface, or through a sequence of low-level write operations.
-You can use the high-level interface if your image data is present
-in the info structure. All defined output
-transformations are permitted, enabled by the following masks.
-
- PNG_TRANSFORM_IDENTITY No transformation
- PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
- PNG_TRANSFORM_PACKSWAP Change order of packed
- pixels to LSB first
- PNG_TRANSFORM_INVERT_MONO Invert monochrome images
- PNG_TRANSFORM_SHIFT Normalize pixels to the
- sBIT depth
- PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
- to BGRA
- PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
- to AG
- PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
- to transparency
- PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
- PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes.
-
-If you have valid image data in the info structure (you can use
-png_set_rows() to put image data in the info structure), simply do this:
-
- png_write_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of some set of
-transformation flags. This call is equivalent to png_write_info(),
-followed the set of transformations indicated by the transform mask,
-then png_write_image(), and finally png_write_end().
-
-(The final parameter of this call is not yet used. Someday it might point
-to transformation parameters required by some future output transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_write_png().
-
-.SS The low-level write interface
-
-If you are going the low-level route instead, you are now ready to
-write all the file information up to the actual image data. You do
-this with a call to png_write_info().
-
- png_write_info(png_ptr, info_ptr);
-
-Note that there is one transformation you may need to do before
-png_write_info(). In PNG files, the alpha channel in an image is the
-level of opacity. If your data is supplied as a level of
-transparency, you can invert the alpha channel before you write it, so
-that 0 is fully transparent and 255 (in 8-bit or paletted images) or
-65535 (in 16-bit images) is fully opaque, with
-
- png_set_invert_alpha(png_ptr);
-
-This must appear before png_write_info() instead of later with the
-other transformations because in the case of paletted images the tRNS
-chunk data has to be inverted before the tRNS chunk is written. If
-your image is not a paletted image, the tRNS data (which in such cases
-represents a single color to be rendered as transparent) won't need to
-be changed, and you can safely do this transformation after your
-png_write_info() call.
-
-If you need to write a private chunk that you want to appear before
-the PLTE chunk when PLTE is present, you can write the PNG info in
-two steps, and insert code to write your own chunk between them:
-
- png_write_info_before_PLTE(png_ptr, info_ptr);
- png_set_unknown_chunks(png_ptr, info_ptr, ...);
- png_write_info(png_ptr, info_ptr);
-
-After you've written the file information, you can set up the library
-to handle any special transformations of the image data. The various
-ways to transform the data will be described in the order that they
-should occur. This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths. Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data. For example, don't swap red and blue on grayscale data.
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code tells
-the library to strip input data that has 4 or 8 bytes per pixel down
-to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
-bytes per pixel).
-
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-
-where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
-PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
-is stored XRGB or RGBX.
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit files.
-If the data is supplied at 1 pixel per byte, use this code, which will
-correctly pack the pixels into a single byte:
-
- png_set_packing(png_ptr);
-
-PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your
-data is of another bit depth, you can write an sBIT chunk into the
-file so that decoders can recover the original data if desired.
-
- /* Set the true bit depth of the image data */
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- sig_bit.red = true_bit_depth;
- sig_bit.green = true_bit_depth;
- sig_bit.blue = true_bit_depth;
- }
- else
- {
- sig_bit.gray = true_bit_depth;
- }
- if (color_type & PNG_COLOR_MASK_ALPHA)
- {
- sig_bit.alpha = true_bit_depth;
- }
-
- png_set_sBIT(png_ptr, info_ptr, &sig_bit);
-
-If the data is stored in the row buffer in a bit depth other than
-one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
-this will scale the values to appear to be the correct bit depth as
-is required by PNG.
-
- png_set_shift(png_ptr, &sig_bit);
-
-PNG files store 16 bit pixels in network byte order (big-endian,
-ie. most significant bits first). This code would be used if they are
-supplied the other way (little-endian, i.e. least significant bits
-first, the way PCs store them):
-
- if (bit_depth > 8)
- png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
- if (bit_depth < 8)
- png_set_packswap(png_ptr);
-
-PNG files store 3 color pixels in red, green, blue order. This code
-would be used if they are supplied as blue, green, red:
-
- png_set_bgr(png_ptr);
-
-PNG files describe monochrome as black being zero and white being
-one. This code would be used if the pixels are supplied with this reversed
-(black being one and white being zero):
-
- png_set_invert_mono(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs. This is done by setting a callback
-with
-
- png_set_write_user_transform_fn(png_ptr,
- write_transform_fn);
-
-You must supply the function
-
- void write_transform_fn(png_ptr ptr, row_info_ptr
- row_info, png_bytep data)
-
-See pngtest.c for a working example. Your function will be called
-before any of the other transformations are processed.
-
-You can also set up a pointer to a user structure for use by your
-callback function.
-
- png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
-
-The user_channels and user_depth parameters of this function are ignored
-when writing; you can set them to zero as shown.
-
-You can retrieve the pointer via the function png_get_user_transform_ptr().
-For example:
-
- voidp write_user_transform_ptr =
- png_get_user_transform_ptr(png_ptr);
-
-It is possible to have libpng flush any pending output, either manually,
-or automatically after a certain number of lines have been written. To
-flush the output stream a single time call:
-
- png_write_flush(png_ptr);
-
-and to have libpng flush the output stream periodically after a certain
-number of scanlines have been written, call:
-
- png_set_flush(png_ptr, nrows);
-
-Note that the distance between rows is from the last time png_write_flush()
-was called, or the first row of the image if it has never been called.
-So if you write 50 lines, and then png_set_flush 25, it will flush the
-output on the next scanline, and every 25 lines thereafter, unless
-png_write_flush() is called before 25 more lines have been written.
-If nrows is too small (less than about 10 lines for a 640 pixel wide
-RGB image) the image compression may decrease noticeably (although this
-may be acceptable for real-time applications). Infrequent flushing will
-only degrade the compression performance by a few percent over images
-that do not use flushing.
-
-.SS Writing the image data
-
-That's it for the transformations. Now you can write the image data.
-The simplest way to do this is in one function call. If you have the
-whole image in memory, you can just call png_write_image() and libpng
-will write the image. You will need to pass in an array of pointers to
-each row. This function automatically handles interlacing, so you don't
-need to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_write_rows().
-
- png_write_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
- png_byte *row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to write the whole image at once, you can
-use png_write_rows() instead. If the file is not interlaced,
-this is simple:
-
- png_write_rows(png_ptr, row_pointers,
- number_of_rows);
-
-row_pointers is the same as in the png_write_image() call.
-
-If you are just writing one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
- png_bytep row_pointer = row;
-
- png_write_row(png_ptr, row_pointer);
-
-When the file is interlaced, things can get a good deal more
-complicated. The only currently (as of the PNG Specification
-version 1.2, dated July 1999) defined interlacing scheme for PNG files
-is the "Adam7" interlace scheme, that breaks down an
-image into seven smaller images of varying size. libpng will build
-these images for you, or you can do them yourself. If you want to
-build them yourself, see the PNG specification for details of which
-pixels to write when.
-
-If you don't want libpng to handle the interlacing details, just
-use png_set_interlace_handling() and call png_write_rows() the
-correct number of times to write all seven sub-images.
-
-If you want libpng to build the sub-images, call this before you start
-writing any rows:
-
- number_of_passes =
- png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed. Currently, this
-is seven, but may change if another interlace type is added.
-
-Then write the complete image number_of_passes times.
-
- png_write_rows(png_ptr, row_pointers,
- number_of_rows);
-
-As some of these rows are not used, and thus return immediately,
-you may want to read about interlacing in the PNG specification,
-and only update the rows that are actually used.
-
-.SS Finishing a sequential write
-
-After you are finished writing the image, you should finish writing
-the file. If you are interested in writing comments or time, you should
-pass an appropriately filled png_info pointer. If you are not interested,
-you can pass NULL.
-
- png_write_end(png_ptr, info_ptr);
-
-When you are done, you can free all memory used by libpng like this:
-
- png_destroy_write_struct(&png_ptr, &info_ptr);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
- png_free_data(png_ptr, info_ptr, mask, seq)
- mask - identifies data to be freed, a mask
- containing the bitwise OR of one or
- more of
- PNG_FREE_PLTE, PNG_FREE_TRNS,
- PNG_FREE_HIST, PNG_FREE_ICCP,
- PNG_FREE_PCAL, PNG_FREE_ROWS,
- PNG_FREE_SCAL, PNG_FREE_SPLT,
- PNG_FREE_TEXT, PNG_FREE_UNKN,
- or simply PNG_FREE_ALL
- seq - sequence number of item to be freed
- (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng, and will in those
-cases do nothing. The "seq" parameter is ignored if only one item
-of the selected data type, such as PLTE, is allowed. If "seq" is not
--1, and multiple items are allowed for the data type identified in
-the mask, such as text or sPLT, only the n'th item in the structure
-is freed, where n is "seq".
-
-If you allocated data such as a palette that you passed
-in to libpng with png_set_*, you must not free it until just before the call to
-png_destroy_write_struct().
-
-The default behavior is only to free data that was allocated internally
-by libpng. This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_zalloc() and passed in via a png_set_*() function, with
-
- png_data_freer(png_ptr, info_ptr, freer, mask)
- mask - which data elements are affected
- same choices as in png_free_data()
- freer - one of
- PNG_DESTROY_WILL_FREE_DATA
- PNG_SET_WILL_FREE_DATA
- PNG_USER_WILL_FREE_DATA
-
-For example, to transfer responsibility for some data from a read structure
-to a write structure, you could use
-
- png_data_freer(read_ptr, read_info_ptr,
- PNG_USER_WILL_FREE_DATA,
- PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
- png_data_freer(write_ptr, write_info_ptr,
- PNG_DESTROY_WILL_FREE_DATA,
- PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
-
-thereby briefly reassigning responsibility for freeing to the user but
-immediately afterwards reassigning it once more to the write_destroy
-function. Having done this, it would then be safe to destroy the read
-structure and continue to use the PLTE, tRNS, and hIST data in the write
-structure.
-
-This function only affects data that has already been allocated.
-You can call this function before calling after the png_set_*() functions
-to control whether the user or png_destroy_*() is supposed to free the data.
-When the user assumes responsibility for libpng-allocated data, the
-application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_zalloc() to allocate it.
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key. Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-For a more compact example of writing a PNG image, see the file example.c.
-
-.SH V. Modifying/Customizing libpng:
-
-There are two issues here. The first is changing how libpng does
-standard things like memory allocation, input/output, and error handling.
-The second deals with more complicated things like adding new chunks,
-adding new transformations, and generally changing how libpng works.
-Both of those are compile-time issues; that is, they are generally
-determined at the time the code is written, and there is rarely a need
-to provide the user with a means of changing them.
-
-Memory allocation, input/output, and error handling
-
-All of the memory allocation, input/output, and error handling in libpng
-goes through callbacks that are user-settable. The default routines are
-in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
-these functions, call the appropriate png_set_*_fn() function.
-
-Memory allocation is done through the functions png_malloc()
-and png_free(). These currently just call the standard C functions. If
-your pointers can't access more then 64K at a time, you will want to set
-MAXSEG_64K in zlib.h. Since it is unlikely that the method of handling
-memory allocation on a platform will change between applications, these
-functions must be modified in the library at compile time. If you prefer
-to use a different method of allocating and freeing data, you can use
-png_create_read_struct_2() or png_create_write_struct_2() to register
-your own functions as described above.
-These functions also provide a void pointer that can be retrieved via
-
- mem_ptr=png_get_mem_ptr(png_ptr);
-
-Your replacement memory functions must have prototypes as follows:
-
- png_voidp malloc_fn(png_structp png_ptr,
- png_size_t size);
- void free_fn(png_structp png_ptr, png_voidp ptr);
-
-Your malloc_fn() must return NULL in case of failure. The png_malloc()
-function will normally call png_error() if it receives a NULL from the
-system memory allocator or from your replacement malloc_fn().
-
-Your free_fn() will never be called with a NULL ptr, since libpng's
-png_free() checks for NULL before calling free_fn().
-
-Input/Output in libpng is done through png_read() and png_write(),
-which currently just call fread() and fwrite(). The FILE * is stored in
-png_struct and is initialized via png_init_io(). If you wish to change
-the method of I/O, the library supplies callbacks that you can set
-through the function png_set_read_fn() and png_set_write_fn() at run
-time, instead of calling the png_init_io() function. These functions
-also provide a void pointer that can be retrieved via the function
-png_get_io_ptr(). For example:
-
- png_set_read_fn(png_structp read_ptr,
- voidp read_io_ptr, png_rw_ptr read_data_fn)
-
- png_set_write_fn(png_structp write_ptr,
- voidp write_io_ptr, png_rw_ptr write_data_fn,
- png_flush_ptr output_flush_fn);
-
- voidp read_io_ptr = png_get_io_ptr(read_ptr);
- voidp write_io_ptr = png_get_io_ptr(write_ptr);
-
-The replacement I/O functions must have prototypes as follows:
-
- void user_read_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
- void user_write_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
- void user_flush_data(png_structp png_ptr);
-
-Supplying NULL for the read, write, or flush functions sets them back
-to using the default C stream functions. It is an error to read from
-a write stream, and vice versa.
-
-Error handling in libpng is done through png_error() and png_warning().
-Errors handled through png_error() are fatal, meaning that png_error()
-should never return to its caller. Currently, this is handled via
-setjmp() and longjmp() (unless you have compiled libpng with
-PNG_SETJMP_NOT_SUPPORTED, in which case it is handled via PNG_ABORT()),
-but you could change this to do things like exit() if you should wish.
-
-On non-fatal errors, png_warning() is called
-to print a warning message, and then control returns to the calling code.
-By default png_error() and png_warning() print a message on stderr via
-fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
-(because you don't want the messages) or PNG_NO_STDIO defined (because
-fprintf() isn't available). If you wish to change the behavior of the error
-functions, you will need to set up your own message callbacks. These
-functions are normally supplied at the time that the png_struct is created.
-It is also possible to redirect errors and warnings to your own replacement
-functions after png_create_*_struct() has been called by calling:
-
- png_set_error_fn(png_structp png_ptr,
- png_voidp error_ptr, png_error_ptr error_fn,
- png_error_ptr warning_fn);
-
- png_voidp error_ptr = png_get_error_ptr(png_ptr);
-
-If NULL is supplied for either error_fn or warning_fn, then the libpng
-default function will be used, calling fprintf() and/or longjmp() if a
-problem is encountered. The replacement error functions should have
-parameters as follows:
-
- void user_error_fn(png_structp png_ptr,
- png_const_charp error_msg);
- void user_warning_fn(png_structp png_ptr,
- png_const_charp warning_msg);
-
-The motivation behind using setjmp() and longjmp() is the C++ throw and
-catch exception handling methods. This makes the code much easier to write,
-as there is no need to check every return code of every function call.
-However, there are some uncertainties about the status of local variables
-after a longjmp, so the user may want to be careful about doing anything after
-setjmp returns non-zero besides returning itself. Consult your compiler
-documentation for more details. For an alternative approach, you may wish
-to use the "cexcept" facility (see http://cexcept.sourceforge.net).
-
-.SS Custom chunks
-
-If you need to read or write custom chunks, you may need to get deeper
-into the libpng code. The library now has mechanisms for storing
-and writing chunks of unknown type; you can even declare callbacks
-for custom chunks. However, this may not be good enough if the
-library code itself needs to know about interactions between your
-chunk and existing `intrinsic' chunks.
-
-If you need to write a new intrinsic chunk, first read the PNG
-specification. Acquire a first level of
-understanding of how it works. Pay particular attention to the
-sections that describe chunk names, and look at how other chunks were
-designed, so you can do things similarly. Second, check out the
-sections of libpng that read and write chunks. Try to find a chunk
-that is similar to yours and use it as a template. More details can
-be found in the comments inside the code. It is best to handle unknown
-chunks in a generic method, via callback functions, instead of by
-modifying libpng functions.
-
-If you wish to write your own transformation for the data, look through
-the part of the code that does the transformations, and check out some of
-the simpler ones to get an idea of how they work. Try to find a similar
-transformation to the one you want to add and copy off of it. More details
-can be found in the comments inside the code itself.
-
-.SS Configuring for 16 bit platforms
-
-You will want to look into zconf.h to tell zlib (and thus libpng) that
-it cannot allocate more then 64K at a time. Even if you can, the memory
-won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
-
-.SS Configuring for DOS
-
-For DOS users who only have access to the lower 640K, you will
-have to limit zlib's memory usage via a png_set_compression_mem_level()
-call. See zlib.h or zconf.h in the zlib library for more information.
-
-.SS Configuring for Medium Model
-
-Libpng's support for medium model has been tested on most of the popular
-compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
-defined, and FAR gets defined to far in pngconf.h, and you should be
-all set. Everything in the library (except for zlib's structure) is
-expecting far data. You must use the typedefs with the p or pp on
-the end for pointers (or at least look at them and be careful). Make
-note that the rows of data are defined as png_bytepp, which is an
-unsigned char far * far *.
-
-.SS Configuring for gui/windowing platforms:
-
-You will need to write new error and warning functions that use the GUI
-interface, as described previously, and set them to be the error and
-warning functions at the time that png_create_*_struct() is called,
-in order to have them available during the structure initialization.
-They can be changed later via png_set_error_fn(). On some compilers,
-you may also have to change the memory allocators (png_malloc, etc.).
-
-.SS Configuring for compiler xxx:
-
-All includes for libpng are in pngconf.h. If you need to add/change/delete
-an include, this is the place to do it. The includes that are not
-needed outside libpng are protected by the PNG_INTERNAL definition,
-which is only defined for those routines inside libpng itself. The
-files in libpng proper only include png.h, which includes pngconf.h.
-
-.SS Configuring zlib:
-
-There are special functions to configure the compression. Perhaps the
-most useful one changes the compression level, which currently uses
-input compression values in the range 0 - 9. The library normally
-uses the default compression level (Z_DEFAULT_COMPRESSION = 6). Tests
-have shown that for a large majority of images, compression values in
-the range 3-6 compress nearly as well as higher levels, and do so much
-faster. For online applications it may be desirable to have maximum speed
-(Z_BEST_SPEED = 1). With versions of zlib after v0.99, you can also
-specify no compression (Z_NO_COMPRESSION = 0), but this would create
-files larger than just storing the raw bitmap. You can specify the
-compression level by calling:
-
- png_set_compression_level(png_ptr, level);
-
-Another useful one is to reduce the memory level used by the library.
-The memory level defaults to 8, but it can be lowered if you are
-short on memory (running DOS, for example, where you only have 640K).
-Note that the memory level does have an effect on compression; among
-other things, lower levels will result in sections of incompressible
-data being emitted in smaller stored blocks, with a correspondingly
-larger relative overhead of up to 15% in the worst case.
-
- png_set_compression_mem_level(png_ptr, level);
-
-The other functions are for configuring zlib. They are not recommended
-for normal use and may result in writing an invalid PNG file. See
-zlib.h for more information on what these mean.
-
- png_set_compression_strategy(png_ptr,
- strategy);
- png_set_compression_window_bits(png_ptr,
- window_bits);
- png_set_compression_method(png_ptr, method);
- png_set_compression_buffer_size(png_ptr, size);
-
-.SS Controlling row filtering
-
-If you want to control whether libpng uses filtering or not, which
-filters are used, and how it goes about picking row filters, you
-can call one of these functions. The selection and configuration
-of row filters can have a significant impact on the size and
-encoding speed and a somewhat lesser impact on the decoding speed
-of an image. Filtering is enabled by default for RGB and grayscale
-images (with and without alpha), but not for paletted images nor
-for any images with bit depths less than 8 bits/pixel.
-
-The 'method' parameter sets the main filtering method, which is
-currently only '0' in the PNG 1.2 specification. The 'filters'
-parameter sets which filter(s), if any, should be used for each
-scanline. Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
-to turn filtering on and off, respectively.
-
-Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
-PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
-ORed together with '|' to specify one or more filters to use.
-These filters are described in more detail in the PNG specification.
-If you intend to change the filter type during the course of writing
-the image, you should start with flags set for all of the filters
-you intend to use so that libpng can initialize its internal
-structures appropriately for all of the filter types. (Note that this
-means the first row must always be adaptively filtered, because libpng
-currently does not allocate the filter buffers until png_write_row()
-is called for the first time.)
-
- filters = PNG_FILTER_NONE | PNG_FILTER_SUB
- PNG_FILTER_UP | PNG_FILTER_AVE |
- PNG_FILTER_PAETH | PNG_ALL_FILTERS;
-
- png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
- filters);
- The second parameter can also be
- PNG_INTRAPIXEL_DIFFERENCING if you are
- writing a PNG to be embedded in a MNG
- datastream. This parameter must be the
- same as the value of filter_method used
- in png_set_IHDR().
-
-It is also possible to influence how libpng chooses from among the
-available filters. This is done in one or both of two ways - by
-telling it how important it is to keep the same filter for successive
-rows, and by telling it the relative computational costs of the filters.
-
- double weights[3] = {1.5, 1.3, 1.1},
- costs[PNG_FILTER_VALUE_LAST] =
- {1.0, 1.3, 1.3, 1.5, 1.7};
-
- png_set_filter_heuristics(png_ptr,
- PNG_FILTER_HEURISTIC_WEIGHTED, 3,
- weights, costs);
-
-The weights are multiplying factors that indicate to libpng that the
-row filter should be the same for successive rows unless another row filter
-is that many times better than the previous filter. In the above example,
-if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
-"sum of absolute differences" 1.5 x 1.3 times higher than other filters
-and still be chosen, while the NONE filter could have a sum 1.1 times
-higher than other filters and still be chosen. Unspecified weights are
-taken to be 1.0, and the specified weights should probably be declining
-like those above in order to emphasize recent filters over older filters.
-
-The filter costs specify for each filter type a relative decoding cost
-to be considered when selecting row filters. This means that filters
-with higher costs are less likely to be chosen over filters with lower
-costs, unless their "sum of absolute differences" is that much smaller.
-The costs do not necessarily reflect the exact computational speeds of
-the various filters, since this would unduly influence the final image
-size.
-
-Note that the numbers above were invented purely for this example and
-are given only to help explain the function usage. Little testing has
-been done to find optimum values for either the costs or the weights.
-
-.SS Removing unwanted object code
-
-There are a bunch of #define's in pngconf.h that control what parts of
-libpng are compiled. All the defines end in _SUPPORTED. If you are
-never going to use a capability, you can change the #define to #undef
-before recompiling libpng and save yourself code and data space, or
-you can turn off individual capabilities with defines that begin with
-PNG_NO_.
-
-You can also turn all of the transforms and ancillary chunk capabilities
-off en masse with compiler directives that define
-PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
-or all four,
-along with directives to turn on any of the capabilities that you do
-want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable
-the extra transformations but still leave the library fully capable of reading
-and writing PNG files with all known public chunks
-Use of the PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive
-produces a library that is incapable of reading or writing ancillary chunks.
-If you are not using the progressive reading capability, you can
-turn that off with PNG_NO_PROGRESSIVE_READ (don't confuse
-this with the INTERLACING capability, which you'll still have).
-
-All the reading and writing specific code are in separate files, so the
-linker should only grab the files it needs. However, if you want to
-make sure, or if you are building a stand alone library, all the
-reading files start with pngr and all the writing files start with
-pngw. The files that don't match either (like png.c, pngtrans.c, etc.)
-are used for both reading and writing, and always need to be included.
-The progressive reader is in pngpread.c
-
-If you are creating or distributing a dynamically linked library (a .so
-or DLL file), you should not remove or disable any parts of the library,
-as this will cause applications linked with different versions of the
-library to fail if they call functions not available in your library.
-The size of the library itself should not be an issue, because only
-those sections that are actually used will be loaded into memory.
-
-.SS Requesting debug printout
-
-The macro definition PNG_DEBUG can be used to request debugging
-printout. Set it to an integer value in the range 0 to 3. Higher
-numbers result in increasing amounts of debugging information. The
-information is printed to the "stderr" file, unless another file
-name is specified in the PNG_DEBUG_FILE macro definition.
-
-When PNG_DEBUG > 0, the following functions (macros) become available:
-
- png_debug(level, message)
- png_debug1(level, message, p1)
- png_debug2(level, message, p1, p2)
-
-in which "level" is compared to PNG_DEBUG to decide whether to print
-the message, "message" is the formatted string to be printed,
-and p1 and p2 are parameters that are to be embedded in the string
-according to printf-style formatting directives. For example,
-
- png_debug1(2, "foo=%d\n", foo);
-
-is expanded to
-
- if(PNG_DEBUG > 2)
- fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
-
-When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
-can still use PNG_DEBUG to control your own debugging:
-
- #ifdef PNG_DEBUG
- fprintf(stderr, ...
- #endif
-
-When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
-having level = 0 will be printed. There aren't any such statements in
-this version of libpng, but if you insert some they will be printed.
-
-.SH VII. MNG support
-
-The MNG specification (available at http://www.libpng.org/pub/mng) allows
-certain extensions to PNG for PNG images that are embedded in MNG datastreams.
-Libpng can support some of these extensions. To enable them, use the
-png_permit_mng_features() function:
-
- feature_set = png_permit_mng_features(png_ptr, mask)
- mask is a png_uint_32 containing the bitwise OR of the
- features you want to enable. These include
- PNG_FLAG_MNG_EMPTY_PLTE
- PNG_FLAG_MNG_FILTER_64
- PNG_ALL_MNG_FEATURES
- feature_set is a png_uint_32 that is the bitwise AND of
- your mask with the set of MNG features that is
- supported by the version of libpng that you are using.
-
-It is an error to use this function when reading or writing a standalone
-PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped
-in a MNG datastream. As a minimum, it must have the MNG 8-byte signature
-and the MHDR and MEND chunks. Libpng does not provide support for these
-or any other MNG chunks; your application must provide its own support for
-them. You may wish to consider using libmng (available at
-http://www.libmng.com) instead.
-
-.SH VIII. Changes to Libpng from version 0.88
-
-It should be noted that versions of libpng later than 0.96 are not
-distributed by the original libpng author, Guy Schalnat, nor by
-Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
-distributed versions 0.89 through 0.96, but rather by another member
-of the original PNG Group, Glenn Randers-Pehrson. Guy and Andreas are
-still alive and well, but they have moved on to other things.
-
-The old libpng functions png_read_init(), png_write_init(),
-png_info_init(), png_read_destroy(), and png_write_destroy() have been
-moved to PNG_INTERNAL in version 0.95 to discourage their use. These
-functions will be removed from libpng version 2.0.0.
-
-The preferred method of creating and initializing the libpng structures is
-via the png_create_read_struct(), png_create_write_struct(), and
-png_create_info_struct() because they isolate the size of the structures
-from the application, allow version error checking, and also allow the
-use of custom error handling routines during the initialization, which
-the old functions do not. The functions png_read_destroy() and
-png_write_destroy() do not actually free the memory that libpng
-allocated for these structs, but just reset the data structures, so they
-can be used instead of png_destroy_read_struct() and
-png_destroy_write_struct() if you feel there is too much system overhead
-allocating and freeing the png_struct for each image read.
-
-Setting the error callbacks via png_set_message_fn() before
-png_read_init() as was suggested in libpng-0.88 is no longer supported
-because this caused applications that do not use custom error functions
-to fail if the png_ptr was not initialized to zero. It is still possible
-to set the error callbacks AFTER png_read_init(), or to change them with
-png_set_error_fn(), which is essentially the same function, but with a new
-name to force compilation errors with applications that try to use the old
-method.
-
-Starting with version 1.0.7, you can find out which version of the library
-you are using at run-time:
-
- png_uint_32 libpng_vn = png_access_version_number();
-
-The number libpng_vn is constructed from the major version, minor
-version with leading zero, and release number with leading zero,
-(e.g., libpng_vn for version 1.0.7 is 10007).
-
-You can also check which version of png.h you used when compiling your
-application:
-
- png_uint_32 application_vn = PNG_LIBPNG_VER;
-
-.SH IX. Y2K Compliance in libpng
-
-May 8, 2008
-
-Since the PNG Development group is an ad-hoc body, we can't make
-an official declaration.
-
-This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.2.29 are Y2K compliant. It is my belief that earlier
-versions were also Y2K compliant.
-
-Libpng only has three year fields. One is a 2-byte unsigned integer that
-will hold years up to 65535. The other two hold the date in text
-format, and will hold years up to 9999.
-
-The integer is
- "png_uint_16 year" in png_time_struct.
-
-The strings are
- "png_charp time_buffer" in png_struct and
- "near_time_buffer", which is a local character string in png.c.
-
-There are seven time-related functions:
-
- png_convert_to_rfc_1123() in png.c
- (formerly png_convert_to_rfc_1152() in error)
- png_convert_from_struct_tm() in pngwrite.c, called
- in pngwrite.c
- png_convert_from_time_t() in pngwrite.c
- png_get_tIME() in pngget.c
- png_handle_tIME() in pngrutil.c, called in pngread.c
- png_set_tIME() in pngset.c
- png_write_tIME() in pngwutil.c, called in pngwrite.c
-
-All appear to handle dates properly in a Y2K environment. The
-png_convert_from_time_t() function calls gmtime() to convert from system
-clock time, which returns (year - 1900), which we properly convert to
-the full 4-digit year. There is a possibility that applications using
-libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
-function, or that they are incorrectly passing only a 2-digit year
-instead of "year - 1900" into the png_convert_from_struct_tm() function,
-but this is not under our control. The libpng documentation has always
-stated that it works with 4-digit years, and the APIs have been
-documented as such.
-
-The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
-integer to hold the year, and can hold years as large as 65535.
-
-zlib, upon which libpng depends, is also Y2K compliant. It contains
-no date-related code.
-
-
- Glenn Randers-Pehrson
- libpng maintainer
- PNG Development Group
-
-.SH NOTE
-
-Note about libpng version numbers:
-
-Due to various miscommunications, unforeseen code incompatibilities
-and occasional factors outside the authors' control, version numbering
-on the library has not always been consistent and straightforward.
-The following table summarizes matters since version 0.89c, which was
-the first widely used release:
-
- source png.h png.h shared-lib
- version string int version
- ------- ------ ----- ----------
- 0.89c ("beta 3") 0.89 89 1.0.89
- 0.90 ("beta 4") 0.90 90 0.90
- 0.95 ("beta 5") 0.95 95 0.95
- 0.96 ("beta 6") 0.96 96 0.96
- 0.97b ("beta 7") 1.00.97 97 1.0.1
- 0.97c 0.97 97 2.0.97
- 0.98 0.98 98 2.0.98
- 0.99 0.99 98 2.0.99
- 0.99a-m 0.99 99 2.0.99
- 1.00 1.00 100 2.1.0
- 1.0.0 1.0.0 100 2.1.0
- 1.0.0 (from here on, the 100 2.1.0
- 1.0.1 png.h string is 10001 2.1.0
- 1.0.1a-e identical to the 10002 from here on, the
- 1.0.2 source version) 10002 shared library is 2.V
- 1.0.2a-b 10003 where V is the source
- 1.0.1 10001 code version except as
- 1.0.1a-e 10002 2.1.0.1a-e noted.
- 1.0.2 10002 2.1.0.2
- 1.0.2a-b 10003 2.1.0.2a-b
- 1.0.3 10003 2.1.0.3
- 1.0.3a-d 10004 2.1.0.3a-d
- 1.0.4 10004 2.1.0.4
- 1.0.4a-f 10005 2.1.0.4a-f
- 1.0.5 (+ 2 patches) 10005 2.1.0.5
- 1.0.5a-d 10006 2.1.0.5a-d
- 1.0.5e-r 10100 2.1.0.5e-r
- 1.0.5s-v 10006 2.1.0.5s-v
- 1.0.6 (+ 3 patches) 10006 2.1.0.6
- 1.0.6d-g 10007 2.1.0.6d-g
- 1.0.6h 10007 10.6h
- 1.0.6i 10007 10.6i
- 1.0.6j 10007 2.1.0.6j
- 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14
- 1.0.7beta15-18 1 10007 2.1.0.7beta15-18
- 1.0.7rc1-2 1 10007 2.1.0.7rc1-2
- 1.0.7 1 10007 2.1.0.7
- 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
- 1.0.8rc1 1 10008 2.1.0.8rc1
- 1.0.8 1 10008 2.1.0.8
- 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
- 1.0.9rc1 1 10009 2.1.0.9rc1
- 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
- 1.0.9rc2 1 10009 2.1.0.9rc2
- 1.0.9 1 10009 2.1.0.9
- 1.0.10beta1 1 10010 2.1.0.10beta1
- 1.0.10rc1 1 10010 2.1.0.10rc1
- 1.0.10 1 10010 2.1.0.10
- 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
- 1.0.11rc1 1 10011 2.1.0.11rc1
- 1.0.11 1 10011 2.1.0.11
- 1.0.12beta1-2 2 10012 2.1.0.12beta1-2
- 1.0.12rc1 2 10012 2.1.0.12rc1
- 1.0.12 2 10012 2.1.0.12
- 1.1.0a-f - 10100 2.1.1.0a-f abandoned
- 1.2.0beta1-2 2 10200 2.1.2.0beta1-2
- 1.2.0beta3-5 3 10200 3.1.2.0beta3-5
- 1.2.0rc1 3 10200 3.1.2.0rc1
- 1.2.0 3 10200 3.1.2.0
- 1.2.1beta-4 3 10201 3.1.2.1beta1-4
- 1.2.1rc1-2 3 10201 3.1.2.1rc1-2
- 1.2.1 3 10201 3.1.2.1
- 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6
- 1.0.13beta1 10 10013 10.so.0.1.0.13beta1
- 1.0.13rc1 10 10013 10.so.0.1.0.13rc1
- 1.2.2rc1 12 10202 12.so.0.1.2.2rc1
- 1.0.13 10 10013 10.so.0.1.0.13
- 1.2.2 12 10202 12.so.0.1.2.2
- 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6
- 1.2.3 12 10203 12.so.0.1.2.3
- 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3
- 1.2.4rc1 13 10204 12.so.0.1.2.4rc1
- 1.0.14 10 10014 10.so.0.1.0.14
- 1.2.4 13 10204 12.so.0.1.2.4
- 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2
- 1.0.15rc1 10 10015 10.so.0.1.0.15rc1
- 1.0.15 10 10015 10.so.0.1.0.15
- 1.2.5 13 10205 12.so.0.1.2.5
- 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4
- 1.2.6rc1-5 13 10206 12.so.0.1.2.6rc1-5
- 1.0.16 10 10016 10.so.0.1.0.16
- 1.2.6 13 10206 12.so.0.1.2.6
- 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2
- 1.0.17rc1 10 10017 10.so.0.1.0.17rc1
- 1.2.7rc1 13 10207 12.so.0.1.2.7rc1
- 1.0.17 10 10017 10.so.0.1.0.17
- 1.2.7 13 10207 12.so.0.1.2.7
- 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5
- 1.0.18rc1-5 10 10018 10.so.0.1.0.18rc1-5
- 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5
- 1.0.18 10 10018 10.so.0.1.0.18
- 1.2.8 13 10208 12.so.0.1.2.8
- 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3
- 1.2.9beta4-11 13 10209 12.so.0.9[.0]
- 1.2.9rc1 13 10209 12.so.0.9[.0]
- 1.2.9 13 10209 12.so.0.9[.0]
- 1.2.10beta1-8 13 10210 12.so.0.10[.0]
- 1.2.10rc1-3 13 10210 12.so.0.10[.0]
- 1.2.10 13 10210 12.so.0.10[.0]
- 1.2.11beta1-4 13 10211 12.so.0.11[.0]
- 1.0.19rc1-5 10 10019 10.so.0.19[.0]
- 1.2.11rc1-5 13 10211 12.so.0.11[.0]
- 1.0.19 10 10019 10.so.0.19[.0]
- 1.2.11 13 10211 12.so.0.11[.0]
- 1.0.20 10 10020 10.so.0.20[.0]
- 1.2.12 13 10212 12.so.0.12[.0]
- 1.2.13beta1 13 10213 12.so.0.13[.0]
- 1.0.21 10 10021 10.so.0.21[.0]
- 1.2.13 13 10213 12.so.0.13[.0]
- 1.2.14beta1-2 13 10214 12.so.0.14[.0]
- 1.0.22rc1 10 10022 10.so.0.22[.0]
- 1.2.14rc1 13 10214 12.so.0.14[.0]
- 1.2.15beta1-6 13 10215 12.so.0.15[.0]
- 1.0.23rc1-5 10 10023 10.so.0.23[.0]
- 1.2.15rc1-5 13 10215 12.so.0.15[.0]
- 1.0.23 10 10023 10.so.0.23[.0]
- 1.2.15 13 10215 12.so.0.15[.0]
- 1.2.16beta1-2 13 10216 12.so.0.16[.0]
- 1.2.16rc1 13 10216 12.so.0.16[.0]
- 1.0.24 10 10024 10.so.0.24[.0]
- 1.2.16 13 10216 12.so.0.16[.0]
- 1.2.17beta1-2 13 10217 12.so.0.17[.0]
- 1.0.25rc1 10 10025 10.so.0.25[.0]
- 1.2.17rc1-3 13 10217 12.so.0.17[.0]
- 1.0.25 10 10025 10.so.0.25[.0]
- 1.2.17 13 10217 12.so.0.17[.0]
- 1.0.26 10 10026 10.so.0.26[.0]
- 1.2.18 13 10218 12.so.0.18[.0]
- 1.2.19beta1-31 13 10219 12.so.0.19[.0]
- 1.0.27rc1-6 10 10027 10.so.0.27[.0]
- 1.2.19rc1-6 13 10219 12.so.0.19[.0]
- 1.0.27 10 10027 10.so.0.27[.0]
- 1.2.19 13 10219 12.so.0.19[.0]
- 1.2.20beta01-04 13 10220 12.so.0.20[.0]
- 1.0.28rc1-6 10 10028 10.so.0.28[.0]
- 1.2.20rc1-6 13 10220 12.so.0.20[.0]
- 1.0.28 10 10028 10.so.0.28[.0]
- 1.2.20 13 10220 12.so.0.20[.0]
- 1.2.21beta1-2 13 10221 12.so.0.21[.0]
- 1.2.21rc1-3 13 10221 12.so.0.21[.0]
- 1.0.29 10 10029 10.so.0.29[.0]
- 1.2.21 13 10221 12.so.0.21[.0]
- 1.2.22beta1-4 13 10222 12.so.0.22[.0]
- 1.0.30rc1 13 10030 10.so.0.30[.0]
- 1.2.22rc1 13 10222 12.so.0.22[.0]
- 1.0.30 10 10030 10.so.0.30[.0]
- 1.2.22 13 10222 12.so.0.22[.0]
- 1.2.23beta01-05 13 10223 12.so.0.23[.0]
- 1.2.23rc01 13 10223 12.so.0.23[.0]
- 1.2.23 13 10223 12.so.0.23[.0]
- 1.2.24beta01-02 13 10224 12.so.0.24[.0]
- 1.2.24rc01 13 10224 12.so.0.24[.0]
- 1.2.24 13 10224 12.so.0.24[.0]
- 1.2.25beta01-06 13 10225 12.so.0.25[.0]
- 1.2.25rc01-02 13 10225 12.so.0.25[.0]
- 1.0.31 10 10031 10.so.0.31[.0]
- 1.2.25 13 10225 12.so.0.25[.0]
- 1.2.26beta01-06 13 10226 12.so.0.26[.0]
- 1.2.26rc01 13 10226 12.so.0.26[.0]
- 1.2.26 13 10226 12.so.0.26[.0]
- 1.0.32 10 10032 10.so.0.32[.0]
- 1.2.27beta01-06 13 10227 12.so.0.27[.0]
- 1.2.27rc01 13 10227 12.so.0.27[.0]
- 1.0.33 10 10033 10.so.0.33[.0]
- 1.2.27 13 10227 12.so.0.27[.0]
- 1.0.34 10 10034 10.so.0.34[.0]
- 1.2.28 13 10228 12.so.0.28[.0]
- 1.2.29beta01-03 13 10229 12.so.0.29[.0]
- 1.2.29rc01 13 10229 12.so.0.29[.0]
- 1.0.35 10 10035 10.so.0.35[.0]
- 1.2.29 13 10229 12.so.0.29[.0]
-
-Henceforth the source version will match the shared-library minor
-and patch numbers; the shared-library major version number will be
-used for changes in backward compatibility, as it is intended. The
-PNG_PNGLIB_VER macro, which is not used within libpng but is available
-for applications, is an unsigned integer of the form xyyzz corresponding
-to the source version x.y.z (leading zeros in y and z). Beta versions
-were given the previous public release number plus a letter, until
-version 1.0.6j; from then on they were given the upcoming public
-release number plus "betaNN" or "rcN".
-
-.SH "SEE ALSO"
-.IR libpngpf(3) ", " png(5)
-.LP
-.IR libpng :
-.IP
-http://libpng.sourceforge.net (follow the [DOWNLOAD] link)
-http://www.libpng.org/pub/png
-
-.LP
-.IR zlib :
-.IP
-(generally) at the same location as
-.I libpng
-or at
-.br
-ftp://ftp.info-zip.org/pub/infozip/zlib
-
-.LP
-.IR PNG specification: RFC 2083
-.IP
-(generally) at the same location as
-.I libpng
-or at
-.br
-ftp://ftp.rfc-editor.org:/in-notes/rfc2083.txt
-.br
-or (as a W3C Recommendation) at
-.br
-http://www.w3.org/TR/REC-png.html
-
-.LP
-In the case of any inconsistency between the PNG specification
-and this library, the specification takes precedence.
-
-.SH AUTHORS
-This man page: Glenn Randers-Pehrson
-<glennrp at users.sourceforge.net>
-
-The contributing authors would like to thank all those who helped
-with testing, bug fixes, and patience. This wouldn't have been
-possible without all of you.
-
-Thanks to Frank J. T. Wojcik for helping with the documentation.
-
-Libpng version 1.2.29 - May 8, 2008:
-Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
-Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
-
-Supported by the PNG development group
-.br
-png-mng-implement at lists.sf.net
-(subscription required; visit
-png-mng-implement at lists.sourceforge.net (subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe).
-
-.SH COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
-
-(This copy of the libpng notices is provided for your convenience. In case of
-any discrepancy between this copy and the notices in the file png.h that is
-included in the libpng distribution, the latter shall prevail.)
-
-If you modify libpng you may insert additional notices immediately following
-this sentence.
-
-libpng versions 1.2.6, August 15, 2004, through 1.2.29, May 8, 2008, are
-Copyright (c) 2004,2006-2008 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.2.5
-with the following individual added to the list of Contributing Authors
-
- Cosmin Truta
-
-libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
-Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.0.6
-with the following individuals added to the list of Contributing Authors
-
- Simon-Pierre Cadieux
- Eric S. Raymond
- Gilles Vollant
-
-and with the following additions to the disclaimer:
-
- There is no warranty against interference with your
- enjoyment of the library or against infringement.
- There is no warranty that our efforts or the library
- will fulfill any of your particular purposes or needs.
- This library is provided with all faults, and the entire
- risk of satisfactory quality, performance, accuracy, and
- effort is with the user.
-
-libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
-Copyright (c) 1998, 1999 Glenn Randers-Pehrson
-Distributed according to the same disclaimer and license as libpng-0.96,
-with the following individuals added to the list of Contributing Authors:
-
- Tom Lane
- Glenn Randers-Pehrson
- Willem van Schaik
-
-libpng versions 0.89, June 1996, through 0.96, May 1997, are
-Copyright (c) 1996, 1997 Andreas Dilger
-Distributed according to the same disclaimer and license as libpng-0.88,
-with the following individuals added to the list of Contributing Authors:
-
- John Bowler
- Kevin Bracey
- Sam Bushell
- Magnus Holmgren
- Greg Roelofs
- Tom Tanner
-
-libpng versions 0.5, May 1995, through 0.88, January 1996, are
-Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
-
-For the purposes of this copyright and license, "Contributing Authors"
-is defined as the following set of individuals:
-
- Andreas Dilger
- Dave Martindale
- Guy Eric Schalnat
- Paul Schmidt
- Tim Wegner
-
-The PNG Reference Library is supplied "AS IS". The Contributing Authors
-and Group 42, Inc. disclaim all warranties, expressed or implied,
-including, without limitation, the warranties of merchantability and of
-fitness for any purpose. The Contributing Authors and Group 42, Inc.
-assume no liability for direct, indirect, incidental, special, exemplary,
-or consequential damages, which may result from the use of the PNG
-Reference Library, even if advised of the possibility of such damage.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-source code, or portions hereof, for any purpose, without fee, subject
-to the following restrictions:
-
-1. The origin of this source code must not be misrepresented.
-
-2. Altered versions must be plainly marked as such and
- must not be misrepresented as being the original source.
-
-3. This Copyright notice may not be removed or altered from
- any source or altered source distribution.
-
-The Contributing Authors and Group 42, Inc. specifically permit, without
-fee, and encourage the use of this source code as a component to
-supporting the PNG file format in commercial products. If you use this
-source code in a product, acknowledgment is not required but would be
-appreciated.
-
-
-A "png_get_copyright" function is available, for convenient use in "about"
-boxes and the like:
-
- printf("%s",png_get_copyright(NULL));
-
-Also, the PNG logo (in PNG format, of course) is supplied in the
-files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
-
-Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
-certification mark of the Open Source Initiative.
-
-Glenn Randers-Pehrson
-glennrp at users.sourceforge.net
-May 8, 2008
-
-.\" end of man page
-
diff --git a/Build/source/libs/libpng/libpng.ac b/Build/source/libs/libpng/libpng.ac
deleted file mode 100644
index bf05b425f96..00000000000
--- a/Build/source/libs/libpng/libpng.ac
+++ /dev/null
@@ -1,54 +0,0 @@
-# beginning of libpng.ac
-if test "$needs_pnglib" = no; then
- LIBPNGCPPFLAGS=
- LDLIBPNG=
- LIBPNGDEP=
-else
- EXTRA_LIBPNG_INCLUDE=
- EXTRA_LIBPNG_LIBDIR=
-
- if test "$with_system_pnglib" = yes; then
- if test "x$with_pnglib_libdir" != x; then
- EXTRA_LIBPNG_LIBDIR="-L$with_pnglib_libdir"
- fi
- if test "x$with_pnglib_include" != x; then
- EXTRA_LIBPNG_INCLUDE="-I$with_pnglib_include"
- fi
- fi
-
- OLD_LDFLAGS=$LDFLAGS
- OLD_CPP=$CPP
- OLD_LIBS=$LIBS
-
- LDFLAGS="$LDFLAGS $EXTRA_LIBPNG_LIBDIR"
- CPP="$CPP $EXTRA_LIBPNG_INCLUDE"
-
- if test "$with_system_pnglib" = yes; then
- AC_CHECK_LIB(png, png_set_read_fn,
- pnglib=-lpng,
- AC_MSG_WARN(Standard PNG library not found. Compiling my own.)
- with_system_pnglib=no,
- -lz -lm)
- fi
-
- LDFLAGS=$OLD_LDFLAGS
- CPP=$OLD_CPP
- LIBS=$OLD_LIBS
-
- if test "$with_system_pnglib" != yes; then
- LIBPNGCPPFLAGS='-I$(LIBPNGDIR) -I$(LIBPNGSRCDIR)'
- LDLIBPNG='$(LIBPNGDIR)/libpng.a'
- LIBPNGDEP='$(LIBPNGDIR)/libpng.a'
- using_system_pnglib=no
- else
- LIBPNGCPPFLAGS="$EXTRA_LIBPNG_INCLUDE"
- LDLIBPNG="$EXTRA_LIBPNG_LIBDIR -lpng"
- LIBPNGDEP=
- using_system_pnglib=yes
- fi
-fi
-
-AC_SUBST(LIBPNGCPPFLAGS)
-AC_SUBST(LDLIBPNG)
-AC_SUBST(LIBPNGDEP)
-# end of libpng.ac
diff --git a/Build/source/libs/libpng/libpng.txt b/Build/source/libs/libpng/libpng.txt
deleted file mode 100644
index c4d0fb54ab4..00000000000
--- a/Build/source/libs/libpng/libpng.txt
+++ /dev/null
@@ -1,2972 +0,0 @@
-libpng.txt - A description on how to use and modify libpng
-
- libpng version 1.2.15 - January 5, 2007
- Updated and distributed by Glenn Randers-Pehrson
- <glennrp at users.sourceforge.net>
- Copyright (c) 1998-2005 Glenn Randers-Pehrson
- For conditions of distribution and use, see copyright
- notice in png.h.
-
- based on:
-
- libpng 1.0 beta 6 version 0.96 May 28, 1997
- Updated and distributed by Andreas Dilger
- Copyright (c) 1996, 1997 Andreas Dilger
-
- libpng 1.0 beta 2 - version 0.88 January 26, 1996
- For conditions of distribution and use, see copyright
- notice in png.h. Copyright (c) 1995, 1996 Guy Eric
- Schalnat, Group 42, Inc.
-
- Updated/rewritten per request in the libpng FAQ
- Copyright (c) 1995, 1996 Frank J. T. Wojcik
- December 18, 1995 & January 20, 1996
-
-I. Introduction
-
-This file describes how to use and modify the PNG reference library
-(known as libpng) for your own use. There are five sections to this
-file: introduction, structures, reading, writing, and modification and
-configuration notes for various special platforms. In addition to this
-file, example.c is a good starting point for using the library, as
-it is heavily commented and should include everything most people
-will need. We assume that libpng is already installed; see the
-INSTALL file for instructions on how to install libpng.
-
-Libpng was written as a companion to the PNG specification, as a way
-of reducing the amount of time and effort it takes to support the PNG
-file format in application programs.
-
-The PNG specification (second edition), November 2003, is available as
-a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at
-<http://www.w3.org/TR/2003/REC-PNG-20031110/
-The W3C and ISO documents have identical technical content.
-
-The PNG-1.2 specification is available at
-<http://www.libpng.org/pub/png/documents/>
-
-The PNG-1.0 specification is available
-as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
-W3C Recommendation <http://www.w3.org/TR/REC.png.html>. Some
-additional chunks are described in the special-purpose public chunks
-documents at <http://www.libpng.org/pub/png/documents/>.
-
-Other information
-about PNG, and the latest version of libpng, can be found at the PNG home
-page, <http://www.libpng.org/pub/png/>.
-
-Most users will not have to modify the library significantly; advanced
-users may want to modify it more. All attempts were made to make it as
-complete as possible, while keeping the code easy to understand.
-Currently, this library only supports C. Support for other languages
-is being considered.
-
-Libpng has been designed to handle multiple sessions at one time,
-to be easily modifiable, to be portable to the vast majority of
-machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
-to use. The ultimate goal of libpng is to promote the acceptance of
-the PNG file format in whatever way possible. While there is still
-work to be done (see the TODO file), libpng should cover the
-majority of the needs of its users.
-
-Libpng uses zlib for its compression and decompression of PNG files.
-Further information about zlib, and the latest version of zlib, can
-be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
-The zlib compression utility is a general purpose utility that is
-useful for more than PNG files, and can be used without libpng.
-See the documentation delivered with zlib for more details.
-You can usually find the source files for the zlib utility wherever you
-find the libpng source files.
-
-Libpng is thread safe, provided the threads are using different
-instances of the structures. Each thread should have its own
-png_struct and png_info instances, and thus its own image.
-Libpng does not protect itself against two threads using the
-same instance of a structure. Note: thread safety may be defeated
-by use of some of the MMX assembler code in pnggccrd.c, which is only
-compiled when the user defines PNG_THREAD_UNSAFE_OK.
-
-II. Structures
-
-There are two main structures that are important to libpng, png_struct
-and png_info. The first, png_struct, is an internal structure that
-will not, for the most part, be used by a user except as the first
-variable passed to every libpng function call.
-
-The png_info structure is designed to provide information about the
-PNG file. At one time, the fields of png_info were intended to be
-directly accessible to the user. However, this tended to cause problems
-with applications using dynamically loaded libraries, and as a result
-a set of interface functions for png_info (the png_get_*() and png_set_*()
-functions) was developed. The fields of png_info are still available for
-older applications, but it is suggested that applications use the new
-interfaces if at all possible.
-
-Applications that do make direct access to the members of png_struct (except
-for png_ptr->jmpbuf) must be recompiled whenever the library is updated,
-and applications that make direct access to the members of png_info must
-be recompiled if they were compiled or loaded with libpng version 1.0.6,
-in which the members were in a different order. In version 1.0.7, the
-members of the png_info structure reverted to the old order, as they were
-in versions 0.97c through 1.0.5. Starting with version 2.0.0, both
-structures are going to be hidden, and the contents of the structures will
-only be accessible through the png_get/png_set functions.
-
-The png.h header file is an invaluable reference for programming with libpng.
-And while I'm on the topic, make sure you include the libpng header file:
-
-#include <png.h>
-
-III. Reading
-
-We'll now walk you through the possible functions to call when reading
-in a PNG file sequentially, briefly explaining the syntax and purpose
-of each one. See example.c and png.h for more detail. While
-progressive reading is covered in the next section, you will still
-need some of the functions discussed in this section to read a PNG
-file.
-
-Setup
-
-You will want to do the I/O initialization(*) before you get into libpng,
-so if it doesn't work, you don't have much to undo. Of course, you
-will also want to insure that you are, in fact, dealing with a PNG
-file. Libpng provides a simple check to see if a file is a PNG file.
-To use it, pass in the first 1 to 8 bytes of the file to the function
-png_sig_cmp(), and it will return 0 if the bytes match the corresponding
-bytes of the PNG signature, or nonzero otherwise. Of course, the more bytes
-you pass in, the greater the accuracy of the prediction.
-
-If you are intending to keep the file pointer open for use in libpng,
-you must ensure you don't read more than 8 bytes from the beginning
-of the file, and you also have to make a call to png_set_sig_bytes_read()
-with the number of bytes you read from the beginning. Libpng will
-then only check the bytes (if any) that your program didn't read.
-
-(*): If you are not using the standard I/O functions, you will need
-to replace them with custom functions. See the discussion under
-Customizing libpng.
-
-
- FILE *fp = fopen(file_name, "rb");
- if (!fp)
- {
- return (ERROR);
- }
- fread(header, 1, number, fp);
- is_png = !png_sig_cmp(header, 0, number);
- if (!is_png)
- {
- return (NOT_PNG);
- }
-
-
-Next, png_struct and png_info need to be allocated and initialized. In
-order to ensure that the size of these structures is correct even with a
-dynamically linked libpng, there are functions to initialize and
-allocate the structures. We also pass the library version, optional
-pointers to error handling functions, and a pointer to a data struct for
-use by the error functions, if necessary (the pointer and functions can
-be NULL if the default error handlers are to be used). See the section
-on Changes to Libpng below regarding the old initialization functions.
-The structure allocation functions quietly return NULL if they fail to
-create the structure, so your application should check for that.
-
- png_structp png_ptr = png_create_read_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_read_struct(&png_ptr,
- (png_infopp)NULL, (png_infopp)NULL);
- return (ERROR);
- }
-
- png_infop end_info = png_create_info_struct(png_ptr);
- if (!end_info)
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_read_struct_2() instead of png_create_read_struct():
-
- png_structp png_ptr = png_create_read_struct_2
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn, (png_voidp)
- user_mem_ptr, user_malloc_fn, user_free_fn);
-
-The error handling routines passed to png_create_read_struct()
-and the memory alloc/free routines passed to png_create_struct_2()
-are only necessary if you are not using the libpng supplied error
-handling and memory alloc/free functions.
-
-When libpng encounters an error, it expects to longjmp back
-to your routine. Therefore, you will need to call setjmp and pass
-your png_jmpbuf(png_ptr). If you read the file from different
-routines, you will need to update the jmpbuf field every time you enter
-a new routine that will call a png_*() function.
-
-See your documentation of setjmp/longjmp for your compiler for more
-information on setjmp/longjmp. See the discussion on libpng error
-handling in the Customizing Libpng section below for more information
-on the libpng error handling. If an error occurs, and libpng longjmp's
-back to your setjmp, you will want to call png_destroy_read_struct() to
-free any memory.
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- &end_info);
- fclose(fp);
- return (ERROR);
- }
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-Now you need to set up the input code. The default for libpng is to
-use the C function fread(). If you use this, you will need to pass a
-valid FILE * in the function png_init_io(). Be sure that the file is
-opened in binary mode. If you wish to handle reading data in another
-way, you need not call the png_init_io() function, but you must then
-implement the libpng I/O methods discussed in the Customizing Libpng
-section below.
-
- png_init_io(png_ptr, fp);
-
-If you had previously opened the file and read any of the signature from
-the beginning in order to see if this was a PNG file, you need to let
-libpng know that there are some bytes missing from the start of the file.
-
- png_set_sig_bytes(png_ptr, number);
-
-Setting up callback code
-
-You can set up a callback function to handle any unknown chunks in the
-input stream. You must supply the function
-
- read_chunk_callback(png_ptr ptr,
- png_unknown_chunkp chunk);
- {
- /* The unknown chunk structure contains your
- chunk data: */
- png_byte name[5];
- png_byte *data;
- png_size_t size;
- /* Note that libpng has already taken care of
- the CRC handling */
-
- /* put your code here. Return one of the
- following: */
-
- return (-n); /* chunk had an error */
- return (0); /* did not recognize */
- return (n); /* success */
- }
-
-(You can give your function another name that you like instead of
-"read_chunk_callback")
-
-To inform libpng about your function, use
-
- png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
- read_chunk_callback);
-
-This names not only the callback function, but also a user pointer that
-you can retrieve with
-
- png_get_user_chunk_ptr(png_ptr);
-
-At this point, you can set up a callback function that will be
-called after each row has been read, which you can use to control
-a progress meter or the like. It's demonstrated in pngtest.c.
-You must supply a function
-
- void read_row_callback(png_ptr ptr, png_uint_32 row,
- int pass);
- {
- /* put your code here */
- }
-
-(You can give it another name that you like instead of "read_row_callback")
-
-To inform libpng about your function, use
-
- png_set_read_status_fn(png_ptr, read_row_callback);
-
-Width and height limits
-
-The PNG specification allows the width and height of an image to be as
-large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
-Since very few applications really need to process such large images,
-we have imposed an arbitrary 1-million limit on rows and columns.
-Larger images will be rejected immediately with a png_error() call. If
-you wish to override this limit, you can use
-
- png_set_user_limits(png_ptr, width_max, height_max);
-
-to set your own limits, or use width_max = height_max = 0x7fffffffL
-to allow all valid dimensions (libpng may reject some very large images
-anyway because of potential buffer overflow conditions).
-
-You should put this statement after you create the PNG structure and
-before calling png_read_info(), png_read_png(), or png_process_data().
-If you need to retrieve the limits that are being applied, use
-
- width_max = png_get_user_width_max(png_ptr);
- height_max = png_get_user_height_max(png_ptr);
-
-Unknown-chunk handling
-
-Now you get to set the way the library processes unknown chunks in the
-input PNG stream. Both known and unknown chunks will be read. Normal
-behavior is that known chunks will be parsed into information in
-various info_ptr members; unknown chunks will be discarded. To change
-this, you can call:
-
- png_set_keep_unknown_chunks(png_ptr, keep,
- chunk_list, num_chunks);
- keep - 0: do not handle as unknown
- 1: do not keep
- 2: keep only if safe-to-copy
- 3: keep even if unsafe-to-copy
- You can use these definitions:
- PNG_HANDLE_CHUNK_AS_DEFAULT 0
- PNG_HANDLE_CHUNK_NEVER 1
- PNG_HANDLE_CHUNK_IF_SAFE 2
- PNG_HANDLE_CHUNK_ALWAYS 3
- chunk_list - list of chunks affected (a byte string,
- five bytes per chunk, NULL or '\0' if
- num_chunks is 0)
- num_chunks - number of chunks affected; if 0, all
- unknown chunks are affected. If nonzero,
- only the chunks in the list are affected
-
-Unknown chunks declared in this way will be saved as raw data onto a
-list of png_unknown_chunk structures. If a chunk that is normally
-known to libpng is named in the list, it will be handled as unknown,
-according to the "keep" directive. If a chunk is named in successive
-instances of png_set_keep_unknown_chunks(), the final instance will
-take precedence. The IHDR and IEND chunks should not be named in
-chunk_list; if they are, libpng will process them normally anyway.
-
-The high-level read interface
-
-At this point there are two ways to proceed; through the high-level
-read interface, or through a sequence of low-level read operations.
-You can use the high-level interface if (a) you are willing to read
-the entire image into memory, and (b) the input transformations
-you want to do are limited to the following set:
-
- PNG_TRANSFORM_IDENTITY No transformation
- PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
- 8 bits
- PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
- PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
- samples to bytes
- PNG_TRANSFORM_PACKSWAP Change order of packed
- pixels to LSB first
- PNG_TRANSFORM_EXPAND Perform set_expand()
- PNG_TRANSFORM_INVERT_MONO Invert monochrome images
- PNG_TRANSFORM_SHIFT Normalize pixels to the
- sBIT depth
- PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
- to BGRA
- PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
- to AG
- PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
- to transparency
- PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
-
-(This excludes setting a background color, doing gamma transformation,
-dithering, and setting filler.) If this is the case, simply do this:
-
- png_read_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of
-some set of transformation flags. This call is equivalent to png_read_info(),
-followed the set of transformations indicated by the transform mask,
-then png_read_image(), and finally png_read_end().
-
-(The final parameter of this call is not yet used. Someday it might point
-to transformation parameters required by some future input transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_read_png().
-
-After you have called png_read_png(), you can retrieve the image data
-with
-
- row_pointers = png_get_rows(png_ptr, info_ptr);
-
-where row_pointers is an array of pointers to the pixel data for each row:
-
- png_bytep row_pointers[height];
-
-If you know your image size and pixel size ahead of time, you can allocate
-row_pointers prior to calling png_read_png() with
-
- if (height > PNG_UINT_32_MAX/png_sizeof(png_byte))
- png_error (png_ptr,
- "Image is too tall to process in memory");
- if (width > PNG_UINT_32_MAX/pixel_size)
- png_error (png_ptr,
- "Image is too wide to process in memory");
- row_pointers = png_malloc(png_ptr,
- height*png_sizeof(png_bytep));
- for (int i=0; i<height, i++)
- row_pointers[i]=png_malloc(png_ptr,
- width*pixel_size);
- png_set_rows(png_ptr, info_ptr, &row_pointers);
-
-Alternatively you could allocate your image in one big block and define
-row_pointers[i] to point into the proper places in your block.
-
-If you use png_set_rows(), the application is responsible for freeing
-row_pointers (and row_pointers[i], if they were separately allocated).
-
-If you don't allocate row_pointers ahead of time, png_read_png() will
-do it, and it'll be free'ed when you call png_destroy_*().
-
-The low-level read interface
-
-If you are going the low-level route, you are now ready to read all
-the file information up to the actual image data. You do this with a
-call to png_read_info().
-
- png_read_info(png_ptr, info_ptr);
-
-This will process all chunks up to but not including the image data.
-
-Querying the info structure
-
-Functions are used to get the information from the info_ptr once it
-has been read. Note that these fields may not be completely filled
-in until png_read_end() has read the chunk data following the image.
-
- png_get_IHDR(png_ptr, info_ptr, &width, &height,
- &bit_depth, &color_type, &interlace_type,
- &compression_type, &filter_method);
-
- width - holds the width of the image
- in pixels (up to 2^31).
- height - holds the height of the image
- in pixels (up to 2^31).
- bit_depth - holds the bit depth of one of the
- image channels. (valid values are
- 1, 2, 4, 8, 16 and depend also on
- the color_type. See also
- significant bits (sBIT) below).
- color_type - describes which color/alpha channels
- are present.
- PNG_COLOR_TYPE_GRAY
- (bit depths 1, 2, 4, 8, 16)
- PNG_COLOR_TYPE_GRAY_ALPHA
- (bit depths 8, 16)
- PNG_COLOR_TYPE_PALETTE
- (bit depths 1, 2, 4, 8)
- PNG_COLOR_TYPE_RGB
- (bit_depths 8, 16)
- PNG_COLOR_TYPE_RGB_ALPHA
- (bit_depths 8, 16)
-
- PNG_COLOR_MASK_PALETTE
- PNG_COLOR_MASK_COLOR
- PNG_COLOR_MASK_ALPHA
-
- filter_method - (must be PNG_FILTER_TYPE_BASE
- for PNG 1.0, and can also be
- PNG_INTRAPIXEL_DIFFERENCING if
- the PNG datastream is embedded in
- a MNG-1.0 datastream)
- compression_type - (must be PNG_COMPRESSION_TYPE_BASE
- for PNG 1.0)
- interlace_type - (PNG_INTERLACE_NONE or
- PNG_INTERLACE_ADAM7)
- Any or all of interlace_type, compression_type, of
- filter_method can be NULL if you are
- not interested in their values.
-
- channels = png_get_channels(png_ptr, info_ptr);
- channels - number of channels of info for the
- color type (valid values are 1 (GRAY,
- PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
- 4 (RGB_ALPHA or RGB + filler byte))
- rowbytes = png_get_rowbytes(png_ptr, info_ptr);
- rowbytes - number of bytes needed to hold a row
-
- signature = png_get_signature(png_ptr, info_ptr);
- signature - holds the signature read from the
- file (if any). The data is kept in
- the same offset it would be if the
- whole signature were read (i.e. if an
- application had already read in 4
- bytes of signature before starting
- libpng, the remaining 4 bytes would
- be in signature[4] through signature[7]
- (see png_set_sig_bytes())).
-
-
- width = png_get_image_width(png_ptr,
- info_ptr);
- height = png_get_image_height(png_ptr,
- info_ptr);
- bit_depth = png_get_bit_depth(png_ptr,
- info_ptr);
- color_type = png_get_color_type(png_ptr,
- info_ptr);
- filter_method = png_get_filter_type(png_ptr,
- info_ptr);
- compression_type = png_get_compression_type(png_ptr,
- info_ptr);
- interlace_type = png_get_interlace_type(png_ptr,
- info_ptr);
-
-
-These are also important, but their validity depends on whether the chunk
-has been read. The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
-png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
-data has been read, or zero if it is missing. The parameters to the
-png_get_<chunk> are set directly if they are simple data types, or a pointer
-into the info_ptr is returned for any complex types.
-
- png_get_PLTE(png_ptr, info_ptr, &palette,
- &num_palette);
- palette - the palette for the file
- (array of png_color)
- num_palette - number of entries in the palette
-
- png_get_gAMA(png_ptr, info_ptr, &gamma);
- gamma - the gamma the file is written
- at (PNG_INFO_gAMA)
-
- png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
- srgb_intent - the rendering intent (PNG_INFO_sRGB)
- The presence of the sRGB chunk
- means that the pixel data is in the
- sRGB color space. This chunk also
- implies specific values of gAMA and
- cHRM.
-
- png_get_iCCP(png_ptr, info_ptr, &name,
- &compression_type, &profile, &proflen);
- name - The profile name.
- compression - The compression type; always
- PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
- You may give NULL to this argument to
- ignore it.
- profile - International Color Consortium color
- profile data. May contain NULs.
- proflen - length of profile data in bytes.
-
- png_get_sBIT(png_ptr, info_ptr, &sig_bit);
- sig_bit - the number of significant bits for
- (PNG_INFO_sBIT) each of the gray,
- red, green, and blue channels,
- whichever are appropriate for the
- given color type (png_color_16)
-
- png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans,
- &trans_values);
- trans - array of transparent entries for
- palette (PNG_INFO_tRNS)
- trans_values - graylevel or color sample values of
- the single transparent color for
- non-paletted images (PNG_INFO_tRNS)
- num_trans - number of transparent entries
- (PNG_INFO_tRNS)
-
- png_get_hIST(png_ptr, info_ptr, &hist);
- (PNG_INFO_hIST)
- hist - histogram of palette (array of
- png_uint_16)
-
- png_get_tIME(png_ptr, info_ptr, &mod_time);
- mod_time - time image was last modified
- (PNG_VALID_tIME)
-
- png_get_bKGD(png_ptr, info_ptr, &background);
- background - background color (PNG_VALID_bKGD)
- valid 16-bit red, green and blue
- values, regardless of color_type
-
- num_comments = png_get_text(png_ptr, info_ptr,
- &text_ptr, &num_text);
- num_comments - number of comments
- text_ptr - array of png_text holding image
- comments
- text_ptr[i].compression - type of compression used
- on "text" PNG_TEXT_COMPRESSION_NONE
- PNG_TEXT_COMPRESSION_zTXt
- PNG_ITXT_COMPRESSION_NONE
- PNG_ITXT_COMPRESSION_zTXt
- text_ptr[i].key - keyword for comment. Must contain
- 1-79 characters.
- text_ptr[i].text - text comments for current
- keyword. Can be empty.
- text_ptr[i].text_length - length of text string,
- after decompression, 0 for iTXt
- text_ptr[i].itxt_length - length of itxt string,
- after decompression, 0 for tEXt/zTXt
- text_ptr[i].lang - language of comment (empty
- string for unknown).
- text_ptr[i].lang_key - keyword in UTF-8
- (empty string for unknown).
- num_text - number of comments (same as
- num_comments; you can put NULL here
- to avoid the duplication)
- Note while png_set_text() will accept text, language,
- and translated keywords that can be NULL pointers, the
- structure returned by png_get_text will always contain
- regular zero-terminated C strings. They might be
- empty strings but they will never be NULL pointers.
-
- num_spalettes = png_get_sPLT(png_ptr, info_ptr,
- &palette_ptr);
- palette_ptr - array of palette structures holding
- contents of one or more sPLT chunks
- read.
- num_spalettes - number of sPLT chunks read.
-
- png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
- &unit_type);
- offset_x - positive offset from the left edge
- of the screen
- offset_y - positive offset from the top edge
- of the screen
- unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
- png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
- &unit_type);
- res_x - pixels/unit physical resolution in
- x direction
- res_y - pixels/unit physical resolution in
- x direction
- unit_type - PNG_RESOLUTION_UNKNOWN,
- PNG_RESOLUTION_METER
-
- png_get_sCAL(png_ptr, info_ptr, &unit, &width,
- &height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are doubles)
-
- png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
- &height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are strings like "2.54")
-
- num_unknown_chunks = png_get_unknown_chunks(png_ptr,
- info_ptr, &unknowns)
- unknowns - array of png_unknown_chunk
- structures holding unknown chunks
- unknowns[i].name - name of unknown chunk
- unknowns[i].data - data of unknown chunk
- unknowns[i].size - size of unknown chunk's data
- unknowns[i].location - position of chunk in file
-
- The value of "i" corresponds to the order in which the
- chunks were read from the PNG file or inserted with the
- png_set_unknown_chunks() function.
-
-The data from the pHYs chunk can be retrieved in several convenient
-forms:
-
- res_x = png_get_x_pixels_per_meter(png_ptr,
- info_ptr)
- res_y = png_get_y_pixels_per_meter(png_ptr,
- info_ptr)
- res_x_and_y = png_get_pixels_per_meter(png_ptr,
- info_ptr)
- res_x = png_get_x_pixels_per_inch(png_ptr,
- info_ptr)
- res_y = png_get_y_pixels_per_inch(png_ptr,
- info_ptr)
- res_x_and_y = png_get_pixels_per_inch(png_ptr,
- info_ptr)
- aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
- info_ptr)
-
- (Each of these returns 0 [signifying "unknown"] if
- the data is not present or if res_x is 0;
- res_x_and_y is 0 if res_x != res_y)
-
-The data from the oFFs chunk can be retrieved in several convenient
-forms:
-
- x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
- y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
- x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
- y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
-
- (Each of these returns 0 [signifying "unknown" if both
- x and y are 0] if the data is not present or if the
- chunk is present but the unit is the pixel)
-
-For more information, see the png_info definition in png.h and the
-PNG specification for chunk contents. Be careful with trusting
-rowbytes, as some of the transformations could increase the space
-needed to hold a row (expand, filler, gray_to_rgb, etc.).
-See png_read_update_info(), below.
-
-A quick word about text_ptr and num_text. PNG stores comments in
-keyword/text pairs, one pair per chunk, with no limit on the number
-of text chunks, and a 2^31 byte limit on their size. While there are
-suggested keywords, there is no requirement to restrict the use to these
-strings. It is strongly suggested that keywords and text be sensible
-to humans (that's the point), so don't use abbreviations. Non-printing
-symbols are not allowed. See the PNG specification for more details.
-There is also no requirement to have text after the keyword.
-
-Keywords should be limited to 79 Latin-1 characters without leading or
-trailing spaces, but non-consecutive spaces are allowed within the
-keyword. It is possible to have the same keyword any number of times.
-The text_ptr is an array of png_text structures, each holding a
-pointer to a language string, a pointer to a keyword and a pointer to
-a text string. The text string, language code, and translated
-keyword may be empty or NULL pointers. The keyword/text
-pairs are put into the array in the order that they are received.
-However, some or all of the text chunks may be after the image, so, to
-make sure you have read all the text chunks, don't mess with these
-until after you read the stuff after the image. This will be
-mentioned again below in the discussion that goes with png_read_end().
-
-Input transformations
-
-After you've read the header information, you can set up the library
-to handle any special transformations of the image data. The various
-ways to transform the data will be described in the order that they
-should occur. This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths. Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data. For example, don't swap red and blue on grayscale data.
-
-The colors used for the background and transparency values should be
-supplied in the same format/depth as the current image data. They
-are stored in the same format/depth as the image data in a bKGD or tRNS
-chunk, so this is what libpng expects for this data. The colors are
-transformed to keep in sync with the image data when an application
-calls the png_read_update_info() routine (see below).
-
-Data will be decoded into the supplied row buffers packed into bytes
-unless the library has been told to transform it into another format.
-For example, 4 bit/pixel paletted or grayscale data will be returned
-2 pixels/byte with the leftmost pixel in the high-order bits of the
-byte, unless png_set_packing() is called. 8-bit RGB data will be stored
-in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
-is called to insert filler bytes, either before or after each RGB triplet.
-16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
-byte of the color value first, unless png_set_strip_16() is called to
-transform it to regular RGB RGB triplets, or png_set_filler() or
-png_set_add alpha() is called to insert filler bytes, either before or
-after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
-be modified with
-png_set_filler(), png_set_add_alpha(), or png_set_strip_16().
-
-The following code transforms grayscale images of less than 8 to 8 bits,
-changes paletted images to RGB, and adds a full alpha channel if there is
-transparency information in a tRNS chunk. This is most useful on
-grayscale images with bit depths of 2 or 4 or if there is a multiple-image
-viewing application that wishes to treat all images in the same way.
-
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- png_set_palette_to_rgb(png_ptr);
-
- if (color_type == PNG_COLOR_TYPE_GRAY &&
- bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
-
- if (png_get_valid(png_ptr, info_ptr,
- PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
-
-These three functions are actually aliases for png_set_expand(), added
-in libpng version 1.0.4, with the function names expanded to improve code
-readability. In some future version they may actually do different
-things.
-
-As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
-added. It expands the sample depth without changing tRNS to alpha.
-At the same time, png_set_gray_1_2_4_to_8() was deprecated, and it
-will be removed from a future version.
-
-PNG can have files with 16 bits per channel. If you only can handle
-8 bits per channel, this will strip the pixels down to 8 bit.
-
- if (bit_depth == 16)
- png_set_strip_16(png_ptr);
-
-If, for some reason, you don't need the alpha channel on an image,
-and you want to remove it rather than combining it with the background
-(but the image author certainly had in mind that you *would* combine
-it with the background, so that's what you should probably do):
-
- if (color_type & PNG_COLOR_MASK_ALPHA)
- png_set_strip_alpha(png_ptr);
-
-In PNG files, the alpha channel in an image
-is the level of opacity. If you need the alpha channel in an image to
-be the level of transparency instead of opacity, you can invert the
-alpha channel (or the tRNS chunk data) after it's read, so that 0 is
-fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
-images) is fully transparent, with
-
- png_set_invert_alpha(png_ptr);
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit
-files. This code expands to 1 pixel per byte without changing the
-values of the pixels:
-
- if (bit_depth < 8)
- png_set_packing(png_ptr);
-
-PNG files have possible bit depths of 1, 2, 4, 8, and 16. All pixels
-stored in a PNG image have been "scaled" or "shifted" up to the next
-higher possible bit depth (e.g. from 5 bits/sample in the range [0,31] to
-8 bits/sample in the range [0, 255]). However, it is also possible to
-convert the PNG pixel data back to the original bit depth of the image.
-This call reduces the pixels back down to the original bit depth:
-
- png_color_8p sig_bit;
-
- if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
- png_set_shift(png_ptr, sig_bit);
-
-PNG files store 3-color pixels in red, green, blue order. This code
-changes the storage of the pixels to blue, green, red:
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_bgr(png_ptr);
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
-into 4 or 8 bytes for windowing systems that need them in this format:
-
- if (color_type == PNG_COLOR_TYPE_RGB)
- png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
-
-where "filler" is the 8 or 16-bit number to fill with, and the location is
-either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
-you want the filler before the RGB or after. This transformation
-does not affect images that already have full alpha channels. To add an
-opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
-will generate RGBA pixels.
-
-Note that png_set_filler() does not change the color type. If you want
-to do that, you can add a true alpha channel with
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_GRAY)
- png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
-
-where "filler" contains the alpha value to assign to each pixel.
-This function was added in libpng-1.2.7.
-
-If you are reading an image with an alpha channel, and you need the
-data as ARGB instead of the normal PNG format RGBA:
-
- if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_swap_alpha(png_ptr);
-
-For some uses, you may want a grayscale image to be represented as
-RGB. This code will do that conversion:
-
- if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_gray_to_rgb(png_ptr);
-
-Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
-with alpha.
-
- if (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_rgb_to_gray_fixed(png_ptr, error_action,
- int red_weight, int green_weight);
-
- error_action = 1: silently do the conversion
- error_action = 2: issue a warning if the original
- image has any pixel where
- red != green or red != blue
- error_action = 3: issue an error and abort the
- conversion if the original
- image has any pixel where
- red != green or red != blue
-
- red_weight: weight of red component times 100000
- green_weight: weight of green component times 100000
- If either weight is negative, default
- weights (21268, 71514) are used.
-
-If you have set error_action = 1 or 2, you can
-later check whether the image really was gray, after processing
-the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
-It will return a png_byte that is zero if the image was gray or
-1 if there were any non-gray pixels. bKGD and sBIT data
-will be silently converted to grayscale, using the green channel
-data, regardless of the error_action setting.
-
-With red_weight+green_weight<=100000,
-the normalized graylevel is computed:
-
- int rw = red_weight * 65536;
- int gw = green_weight * 65536;
- int bw = 65536 - (rw + gw);
- gray = (rw*red + gw*green + bw*blue)/65536;
-
-The default values approximate those recommended in the Charles
-Poynton's Color FAQ, <http://www.inforamp.net/~poynton/>
-Copyright (c) 1998-01-04 Charles Poynton <poynton at inforamp.net>
-
- Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
-
-Libpng approximates this with
-
- Y = 0.21268 * R + 0.7151 * G + 0.07217 * B
-
-which can be expressed with integers as
-
- Y = (6969 * R + 23434 * G + 2365 * B)/32768
-
-The calculation is done in a linear colorspace, if the image gamma
-is known.
-
-If you have a grayscale and you are using png_set_expand_depth(),
-png_set_expand(), or png_set_gray_to_rgb to change to truecolor or to
-a higher bit-depth, you must either supply the background color as a gray
-value at the original file bit-depth (need_expand = 1) or else supply the
-background color as an RGB triplet at the final, expanded bit depth
-(need_expand = 0). Similarly, if you are reading a paletted image, you
-must either supply the background color as a palette index (need_expand = 1)
-or as an RGB triplet that may or may not be in the palette (need_expand = 0).
-
- png_color_16 my_background;
- png_color_16p image_background;
-
- if (png_get_bKGD(png_ptr, info_ptr, &image_background))
- png_set_background(png_ptr, image_background,
- PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
- else
- png_set_background(png_ptr, &my_background,
- PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
-
-The png_set_background() function tells libpng to composite images
-with alpha or simple transparency against the supplied background
-color. If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
-you may use this color, or supply another color more suitable for
-the current display (e.g., the background color from a web page). You
-need to tell libpng whether the color is in the gamma space of the
-display (PNG_BACKGROUND_GAMMA_SCREEN for colors you supply), the file
-(PNG_BACKGROUND_GAMMA_FILE for colors from the bKGD chunk), or one
-that is neither of these gammas (PNG_BACKGROUND_GAMMA_UNIQUE - I don't
-know why anyone would use this, but it's here).
-
-To properly display PNG images on any kind of system, the application needs
-to know what the display gamma is. Ideally, the user will know this, and
-the application will allow them to set it. One method of allowing the user
-to set the display gamma separately for each system is to check for a
-SCREEN_GAMMA or DISPLAY_GAMMA environment variable, which will hopefully be
-correctly set.
-
-Note that display_gamma is the overall gamma correction required to produce
-pleasing results, which depends on the lighting conditions in the surrounding
-environment. In a dim or brightly lit room, no compensation other than
-the physical gamma exponent of the monitor is needed, while in a dark room
-a slightly smaller exponent is better.
-
- double gamma, screen_gamma;
-
- if (/* We have a user-defined screen
- gamma value */)
- {
- screen_gamma = user_defined_screen_gamma;
- }
- /* One way that applications can share the same
- screen gamma value */
- else if ((gamma_str = getenv("SCREEN_GAMMA"))
- != NULL)
- {
- screen_gamma = (double)atof(gamma_str);
- }
- /* If we don't have another value */
- else
- {
- screen_gamma = 2.2; /* A good guess for a
- PC monitor in a bright office or a dim room */
- screen_gamma = 2.0; /* A good guess for a
- PC monitor in a dark room */
- screen_gamma = 1.7 or 1.0; /* A good
- guess for Mac systems */
- }
-
-The png_set_gamma() function handles gamma transformations of the data.
-Pass both the file gamma and the current screen_gamma. If the file does
-not have a gamma value, you can pass one anyway if you have an idea what
-it is (usually 0.45455 is a good guess for GIF images on PCs). Note
-that file gammas are inverted from screen gammas. See the discussions
-on gamma in the PNG specification for an excellent description of what
-gamma is, and why all applications should support it. It is strongly
-recommended that PNG viewers support gamma correction.
-
- if (png_get_gAMA(png_ptr, info_ptr, &gamma))
- png_set_gamma(png_ptr, screen_gamma, gamma);
- else
- png_set_gamma(png_ptr, screen_gamma, 0.45455);
-
-If you need to reduce an RGB file to a paletted file, or if a paletted
-file has more entries then will fit on your screen, png_set_dither()
-will do that. Note that this is a simple match dither that merely
-finds the closest color available. This should work fairly well with
-optimized palettes, and fairly badly with linear color cubes. If you
-pass a palette that is larger then maximum_colors, the file will
-reduce the number of colors in the palette so it will fit into
-maximum_colors. If there is a histogram, it will use it to make
-more intelligent choices when reducing the palette. If there is no
-histogram, it may not do as good a job.
-
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- if (png_get_valid(png_ptr, info_ptr,
- PNG_INFO_PLTE))
- {
- png_uint_16p histogram = NULL;
-
- png_get_hIST(png_ptr, info_ptr,
- &histogram);
- png_set_dither(png_ptr, palette, num_palette,
- max_screen_colors, histogram, 1);
- }
- else
- {
- png_color std_color_cube[MAX_SCREEN_COLORS] =
- { ... colors ... };
-
- png_set_dither(png_ptr, std_color_cube,
- MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
- NULL,0);
- }
- }
-
-PNG files describe monochrome as black being zero and white being one.
-The following code will reverse this (make black be one and white be
-zero):
-
- if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
- png_set_invert_mono(png_ptr);
-
-This function can also be used to invert grayscale and gray-alpha images:
-
- if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_invert_mono(png_ptr);
-
-PNG files store 16 bit pixels in network byte order (big-endian,
-ie. most significant bits first). This code changes the storage to the
-other way (little-endian, i.e. least significant bits first, the
-way PCs store them):
-
- if (bit_depth == 16)
- png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
- if (bit_depth < 8)
- png_set_packswap(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs. This is done by setting a callback
-with
-
- png_set_read_user_transform_fn(png_ptr,
- read_transform_fn);
-
-You must supply the function
-
- void read_transform_fn(png_ptr ptr, row_info_ptr
- row_info, png_bytep data)
-
-See pngtest.c for a working example. Your function will be called
-after all of the other transformations have been processed.
-
-You can also set up a pointer to a user structure for use by your
-callback function, and you can inform libpng that your transform
-function will change the number of channels or bit depth with the
-function
-
- png_set_user_transform_info(png_ptr, user_ptr,
- user_depth, user_channels);
-
-The user's application, not libpng, is responsible for allocating and
-freeing any memory required for the user structure.
-
-You can retrieve the pointer via the function
-png_get_user_transform_ptr(). For example:
-
- voidp read_user_transform_ptr =
- png_get_user_transform_ptr(png_ptr);
-
-The last thing to handle is interlacing; this is covered in detail below,
-but you must call the function here if you want libpng to handle expansion
-of the interlaced image.
-
- number_of_passes = png_set_interlace_handling(png_ptr);
-
-After setting the transformations, libpng can update your png_info
-structure to reflect any transformations you've requested with this
-call. This is most useful to update the info structure's rowbytes
-field so you can use it to allocate your image memory. This function
-will also update your palette with the correct screen_gamma and
-background if these have been given with the calls above.
-
- png_read_update_info(png_ptr, info_ptr);
-
-After you call png_read_update_info(), you can allocate any
-memory you need to hold the image. The row data is simply
-raw byte data for all forms of images. As the actual allocation
-varies among applications, no example will be given. If you
-are allocating one large chunk, you will need to build an
-array of pointers to each row, as it will be needed for some
-of the functions below.
-
-Reading image data
-
-After you've allocated memory, you can read the image data.
-The simplest way to do this is in one function call. If you are
-allocating enough memory to hold the whole image, you can just
-call png_read_image() and libpng will read in all the image data
-and put it in the memory area supplied. You will need to pass in
-an array of pointers to each row.
-
-This function automatically handles interlacing, so you don't need
-to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_read_rows().
-
- png_read_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
- png_bytep row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to read in the whole image at once, you can
-use png_read_rows() instead. If there is no interlacing (check
-interlace_type == PNG_INTERLACE_NONE), this is simple:
-
- png_read_rows(png_ptr, row_pointers, NULL,
- number_of_rows);
-
-where row_pointers is the same as in the png_read_image() call.
-
-If you are doing this just one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
- png_bytep row_pointer = row;
- png_read_row(png_ptr, row_pointer, NULL);
-
-If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
-get somewhat harder. The only current (PNG Specification version 1.2)
-interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7)
-is a somewhat complicated 2D interlace scheme, known as Adam7, that
-breaks down an image into seven smaller images of varying size, based
-on an 8x8 grid.
-
-libpng can fill out those images or it can give them to you "as is".
-If you want them filled out, there are two ways to do that. The one
-mentioned in the PNG specification is to expand each pixel to cover
-those pixels that have not been read yet (the "rectangle" method).
-This results in a blocky image for the first pass, which gradually
-smooths out as more pixels are read. The other method is the "sparkle"
-method, where pixels are drawn only in their final locations, with the
-rest of the image remaining whatever colors they were initialized to
-before the start of the read. The first method usually looks better,
-but tends to be slower, as there are more pixels to put in the rows.
-
-If you don't want libpng to handle the interlacing details, just call
-png_read_rows() seven times to read in all seven images. Each of the
-images is a valid image by itself, or they can all be combined on an
-8x8 grid to form a single image (although if you intend to combine them
-you would be far better off using the libpng interlace handling).
-
-The first pass will return an image 1/8 as wide as the entire image
-(every 8th column starting in column 0) and 1/8 as high as the original
-(every 8th row starting in row 0), the second will be 1/8 as wide
-(starting in column 4) and 1/8 as high (also starting in row 0). The
-third pass will be 1/4 as wide (every 4th pixel starting in column 0) and
-1/8 as high (every 8th row starting in row 4), and the fourth pass will
-be 1/4 as wide and 1/4 as high (every 4th column starting in column 2,
-and every 4th row starting in row 0). The fifth pass will return an
-image 1/2 as wide, and 1/4 as high (starting at column 0 and row 2),
-while the sixth pass will be 1/2 as wide and 1/2 as high as the original
-(starting in column 1 and row 0). The seventh and final pass will be as
-wide as the original, and 1/2 as high, containing all of the odd
-numbered scanlines. Phew!
-
-If you want libpng to expand the images, call this before calling
-png_start_read_image() or png_read_update_info():
-
- if (interlace_type == PNG_INTERLACE_ADAM7)
- number_of_passes
- = png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed. Currently, this
-is seven, but may change if another interlace type is added.
-This function can be called even if the file is not interlaced,
-where it will return one pass.
-
-If you are not going to display the image after each pass, but are
-going to wait until the entire image is read in, use the sparkle
-effect. This effect is faster and the end result of either method
-is exactly the same. If you are planning on displaying the image
-after each pass, the "rectangle" effect is generally considered the
-better looking one.
-
-If you only want the "sparkle" effect, just call png_read_rows() as
-normal, with the third parameter NULL. Make sure you make pass over
-the image number_of_passes times, and you don't change the data in the
-rows between calls. You can change the locations of the data, just
-not the data. Each pass only writes the pixels appropriate for that
-pass, and assumes the data from previous passes is still valid.
-
- png_read_rows(png_ptr, row_pointers, NULL,
- number_of_rows);
-
-If you only want the first effect (the rectangles), do the same as
-before except pass the row buffer in the third parameter, and leave
-the second parameter NULL.
-
- png_read_rows(png_ptr, NULL, row_pointers,
- number_of_rows);
-
-Finishing a sequential read
-
-After you are finished reading the image through the
-low-level interface, you can finish reading the file. If you are
-interested in comments or time, which may be stored either before or
-after the image data, you should pass the separate png_info struct if
-you want to keep the comments from before and after the image
-separate. If you are not interested, you can pass NULL.
-
- png_read_end(png_ptr, end_info);
-
-When you are done, you can free all memory allocated by libpng like this:
-
- png_destroy_read_struct(&png_ptr, &info_ptr,
- &end_info);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
- png_free_data(png_ptr, info_ptr, mask, seq)
- mask - identifies data to be freed, a mask
- containing the bitwise OR of one or
- more of
- PNG_FREE_PLTE, PNG_FREE_TRNS,
- PNG_FREE_HIST, PNG_FREE_ICCP,
- PNG_FREE_PCAL, PNG_FREE_ROWS,
- PNG_FREE_SCAL, PNG_FREE_SPLT,
- PNG_FREE_TEXT, PNG_FREE_UNKN,
- or simply PNG_FREE_ALL
- seq - sequence number of item to be freed
- (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng, and will in those
-cases do nothing. The "seq" parameter is ignored if only one item
-of the selected data type, such as PLTE, is allowed. If "seq" is not
--1, and multiple items are allowed for the data type identified in
-the mask, such as text or sPLT, only the n'th item in the structure
-is freed, where n is "seq".
-
-The default behavior is only to free data that was allocated internally
-by libpng. This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_zalloc() and passed in via a png_set_*() function, with
-
- png_data_freer(png_ptr, info_ptr, freer, mask)
- mask - which data elements are affected
- same choices as in png_free_data()
- freer - one of
- PNG_DESTROY_WILL_FREE_DATA
- PNG_SET_WILL_FREE_DATA
- PNG_USER_WILL_FREE_DATA
-
-This function only affects data that has already been allocated.
-You can call this function after reading the PNG data but before calling
-any png_set_*() functions, to control whether the user or the png_set_*()
-function is responsible for freeing any existing data that might be present,
-and again after the png_set_*() functions to control whether the user
-or png_destroy_*() is supposed to free the data. When the user assumes
-responsibility for libpng-allocated data, the application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_zalloc() to allocate it.
-
-If you allocated your row_pointers in a single block, as suggested above in
-the description of the high level read interface, you must not transfer
-responsibility for freeing it to the png_set_rows or png_read_destroy function,
-because they would also try to free the individual row_pointers[i].
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key. Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-
-The png_free_data() function will turn off the "valid" flag for anything
-it frees. If you need to turn the flag off for a chunk that was freed by your
-application instead of by libpng, you can use
-
- png_set_invalid(png_ptr, info_ptr, mask);
- mask - identifies the chunks to be made invalid,
- containing the bitwise OR of one or
- more of
- PNG_INFO_gAMA, PNG_INFO_sBIT,
- PNG_INFO_cHRM, PNG_INFO_PLTE,
- PNG_INFO_tRNS, PNG_INFO_bKGD,
- PNG_INFO_hIST, PNG_INFO_pHYs,
- PNG_INFO_oFFs, PNG_INFO_tIME,
- PNG_INFO_pCAL, PNG_INFO_sRGB,
- PNG_INFO_iCCP, PNG_INFO_sPLT,
- PNG_INFO_sCAL, PNG_INFO_IDAT
-
-For a more compact example of reading a PNG image, see the file example.c.
-
-Reading PNG files progressively
-
-The progressive reader is slightly different then the non-progressive
-reader. Instead of calling png_read_info(), png_read_rows(), and
-png_read_end(), you make one call to png_process_data(), which calls
-callbacks when it has the info, a row, or the end of the image. You
-set up these callbacks with png_set_progressive_read_fn(). You don't
-have to worry about the input/output functions of libpng, as you are
-giving the library the data directly in png_process_data(). I will
-assume that you have read the section on reading PNG files above,
-so I will only highlight the differences (although I will show
-all of the code).
-
-png_structp png_ptr;
-png_infop info_ptr;
-
- /* An example code fragment of how you would
- initialize the progressive reader in your
- application. */
- int
- initialize_png_reader()
- {
- png_ptr = png_create_read_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
- info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_read_struct(&png_ptr, (png_infopp)NULL,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- /* This one's new. You can provide functions
- to be called when the header info is valid,
- when each row is completed, and when the image
- is finished. If you aren't using all functions,
- you can specify NULL parameters. Even when all
- three functions are NULL, you need to call
- png_set_progressive_read_fn(). You can use
- any struct as the user_ptr (cast to a void pointer
- for the function call), and retrieve the pointer
- from inside the callbacks using the function
-
- png_get_progressive_ptr(png_ptr);
-
- which will return a void pointer, which you have
- to cast appropriately.
- */
- png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
- info_callback, row_callback, end_callback);
-
- return 0;
- }
-
- /* A code fragment that you call as you receive blocks
- of data */
- int
- process_data(png_bytep buffer, png_uint_32 length)
- {
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
- /* This one's new also. Simply give it a chunk
- of data from the file stream (in order, of
- course). On machines with segmented memory
- models machines, don't give it any more than
- 64K. The library seems to run fine with sizes
- of 4K. Although you can give it much less if
- necessary (I assume you can give it chunks of
- 1 byte, I haven't tried less then 256 bytes
- yet). When this function returns, you may
- want to display any rows that were generated
- in the row callback if you don't already do
- so there.
- */
- png_process_data(png_ptr, info_ptr, buffer, length);
- return 0;
- }
-
- /* This function is called (as set by
- png_set_progressive_read_fn() above) when enough data
- has been supplied so all of the header has been
- read.
- */
- void
- info_callback(png_structp png_ptr, png_infop info)
- {
- /* Do any setup here, including setting any of
- the transformations mentioned in the Reading
- PNG files section. For now, you _must_ call
- either png_start_read_image() or
- png_read_update_info() after all the
- transformations are set (even if you don't set
- any). You may start getting rows before
- png_process_data() returns, so this is your
- last chance to prepare for that.
- */
- }
-
- /* This function is called when each row of image
- data is complete */
- void
- row_callback(png_structp png_ptr, png_bytep new_row,
- png_uint_32 row_num, int pass)
- {
- /* If the image is interlaced, and you turned
- on the interlace handler, this function will
- be called for every row in every pass. Some
- of these rows will not be changed from the
- previous pass. When the row is not changed,
- the new_row variable will be NULL. The rows
- and passes are called in order, so you don't
- really need the row_num and pass, but I'm
- supplying them because it may make your life
- easier.
-
- For the non-NULL rows of interlaced images,
- you must call png_progressive_combine_row()
- passing in the row and the old row. You can
- call this function for NULL rows (it will just
- return) and for non-interlaced images (it just
- does the memcpy for you) if it will make the
- code easier. Thus, you can just do this for
- all cases:
- */
-
- png_progressive_combine_row(png_ptr, old_row,
- new_row);
-
- /* where old_row is what was displayed for
- previously for the row. Note that the first
- pass (pass == 0, really) will completely cover
- the old row, so the rows do not have to be
- initialized. After the first pass (and only
- for interlaced images), you will have to pass
- the current row, and the function will combine
- the old row and the new row.
- */
- }
-
- void
- end_callback(png_structp png_ptr, png_infop info)
- {
- /* This function is called after the whole image
- has been read, including any chunks after the
- image (up to and including the IEND). You
- will usually have the same info chunk as you
- had in the header, although some data may have
- been added to the comments and time fields.
-
- Most people won't do much here, perhaps setting
- a flag that marks the image as finished.
- */
- }
-
-
-
-IV. Writing
-
-Much of this is very similar to reading. However, everything of
-importance is repeated here, so you won't have to constantly look
-back up in the reading section to understand writing.
-
-Setup
-
-You will want to do the I/O initialization before you get into libpng,
-so if it doesn't work, you don't have anything to undo. If you are not
-using the standard I/O functions, you will need to replace them with
-custom writing functions. See the discussion under Customizing libpng.
-
- FILE *fp = fopen(file_name, "wb");
- if (!fp)
- {
- return (ERROR);
- }
-
-Next, png_struct and png_info need to be allocated and initialized.
-As these can be both relatively large, you may not want to store these
-on the stack, unless you have stack space to spare. Of course, you
-will want to check if they return NULL. If you are also reading,
-you won't want to name your read structure and your write structure
-both "png_ptr"; you can call them anything you like, such as
-"read_ptr" and "write_ptr". Look at pngtest.c, for example.
-
- png_structp png_ptr = png_create_write_struct
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn);
- if (!png_ptr)
- return (ERROR);
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_write_struct(&png_ptr,
- (png_infopp)NULL);
- return (ERROR);
- }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_write_struct_2() instead of png_create_write_struct():
-
- png_structp png_ptr = png_create_write_struct_2
- (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
- user_error_fn, user_warning_fn, (png_voidp)
- user_mem_ptr, user_malloc_fn, user_free_fn);
-
-After you have these structures, you will need to set up the
-error handling. When libpng encounters an error, it expects to
-longjmp() back to your routine. Therefore, you will need to call
-setjmp() and pass the png_jmpbuf(png_ptr). If you
-write the file from different routines, you will need to update
-the png_jmpbuf(png_ptr) every time you enter a new routine that will
-call a png_*() function. See your documentation of setjmp/longjmp
-for your compiler for more information on setjmp/longjmp. See
-the discussion on libpng error handling in the Customizing Libpng
-section below for more information on the libpng error handling.
-
- if (setjmp(png_jmpbuf(png_ptr)))
- {
- png_destroy_write_struct(&png_ptr, &info_ptr);
- fclose(fp);
- return (ERROR);
- }
- ...
- return;
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-Now you need to set up the output code. The default for libpng is to
-use the C function fwrite(). If you use this, you will need to pass a
-valid FILE * in the function png_init_io(). Be sure that the file is
-opened in binary mode. Again, if you wish to handle writing data in
-another way, see the discussion on libpng I/O handling in the Customizing
-Libpng section below.
-
- png_init_io(png_ptr, fp);
-
-If you are embedding your PNG into a datastream such as MNG, and don't
-want libpng to write the 8-byte signature, or if you have already
-written the signature in your application, use
-
- png_set_sig_bytes(png_ptr, 8);
-
-to inform libpng that it should not write a signature.
-
-Write callbacks
-
-At this point, you can set up a callback function that will be
-called after each row has been written, which you can use to control
-a progress meter or the like. It's demonstrated in pngtest.c.
-You must supply a function
-
- void write_row_callback(png_ptr, png_uint_32 row,
- int pass);
- {
- /* put your code here */
- }
-
-(You can give it another name that you like instead of "write_row_callback")
-
-To inform libpng about your function, use
-
- png_set_write_status_fn(png_ptr, write_row_callback);
-
-You now have the option of modifying how the compression library will
-run. The following functions are mainly for testing, but may be useful
-in some cases, like if you need to write PNG files extremely fast and
-are willing to give up some compression, or if you want to get the
-maximum possible compression at the expense of slower writing. If you
-have no special needs in this area, let the library do what it wants by
-not calling this function at all, as it has been tuned to deliver a good
-speed/compression ratio. The second parameter to png_set_filter() is
-the filter method, for which the only valid values are 0 (as of the
-July 1999 PNG specification, version 1.2) or 64 (if you are writing
-a PNG datastream that is to be embedded in a MNG datastream). The third
-parameter is a flag that indicates which filter type(s) are to be tested
-for each scanline. See the PNG specification for details on the specific filter
-types.
-
-
- /* turn on or off filtering, and/or choose
- specific filters. You can use either a single
- PNG_FILTER_VALUE_NAME or the bitwise OR of one
- or more PNG_FILTER_NAME masks. */
- png_set_filter(png_ptr, 0,
- PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
- PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
- PNG_FILTER_UP | PNG_FILTER_VALUE_UP |
- PNG_FILTER_AVE | PNG_FILTER_VALUE_AVE |
- PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
- PNG_ALL_FILTERS);
-
-If an application
-wants to start and stop using particular filters during compression,
-it should start out with all of the filters (to ensure that the previous
-row of pixels will be stored in case it's needed later), and then add
-and remove them after the start of compression.
-
-If you are writing a PNG datastream that is to be embedded in a MNG
-datastream, the second parameter can be either 0 or 64.
-
-The png_set_compression_*() functions interface to the zlib compression
-library, and should mostly be ignored unless you really know what you are
-doing. The only generally useful call is png_set_compression_level()
-which changes how much time zlib spends on trying to compress the image
-data. See the Compression Library (zlib.h and algorithm.txt, distributed
-with zlib) for details on the compression levels.
-
- /* set the zlib compression level */
- png_set_compression_level(png_ptr,
- Z_BEST_COMPRESSION);
-
- /* set other zlib parameters */
- png_set_compression_mem_level(png_ptr, 8);
- png_set_compression_strategy(png_ptr,
- Z_DEFAULT_STRATEGY);
- png_set_compression_window_bits(png_ptr, 15);
- png_set_compression_method(png_ptr, 8);
- png_set_compression_buffer_size(png_ptr, 8192)
-
-extern PNG_EXPORT(void,png_set_zbuf_size)
-
-Setting the contents of info for output
-
-You now need to fill in the png_info structure with all the data you
-wish to write before the actual image. Note that the only thing you
-are allowed to write after the image is the text chunks and the time
-chunk (as of PNG Specification 1.2, anyway). See png_write_end() and
-the latest PNG specification for more information on that. If you
-wish to write them before the image, fill them in now, and flag that
-data as being valid. If you want to wait until after the data, don't
-fill them until png_write_end(). For all the fields in png_info and
-their data types, see png.h. For explanations of what the fields
-contain, see the PNG specification.
-
-Some of the more important parts of the png_info are:
-
- png_set_IHDR(png_ptr, info_ptr, width, height,
- bit_depth, color_type, interlace_type,
- compression_type, filter_method)
- width - holds the width of the image
- in pixels (up to 2^31).
- height - holds the height of the image
- in pixels (up to 2^31).
- bit_depth - holds the bit depth of one of the
- image channels.
- (valid values are 1, 2, 4, 8, 16
- and depend also on the
- color_type. See also significant
- bits (sBIT) below).
- color_type - describes which color/alpha
- channels are present.
- PNG_COLOR_TYPE_GRAY
- (bit depths 1, 2, 4, 8, 16)
- PNG_COLOR_TYPE_GRAY_ALPHA
- (bit depths 8, 16)
- PNG_COLOR_TYPE_PALETTE
- (bit depths 1, 2, 4, 8)
- PNG_COLOR_TYPE_RGB
- (bit_depths 8, 16)
- PNG_COLOR_TYPE_RGB_ALPHA
- (bit_depths 8, 16)
-
- PNG_COLOR_MASK_PALETTE
- PNG_COLOR_MASK_COLOR
- PNG_COLOR_MASK_ALPHA
-
- interlace_type - PNG_INTERLACE_NONE or
- PNG_INTERLACE_ADAM7
- compression_type - (must be
- PNG_COMPRESSION_TYPE_DEFAULT)
- filter_method - (must be PNG_FILTER_TYPE_DEFAULT
- or, if you are writing a PNG to
- be embedded in a MNG datastream,
- can also be
- PNG_INTRAPIXEL_DIFFERENCING)
-
- png_set_PLTE(png_ptr, info_ptr, palette,
- num_palette);
- palette - the palette for the file
- (array of png_color)
- num_palette - number of entries in the palette
-
- png_set_gAMA(png_ptr, info_ptr, gamma);
- gamma - the gamma the image was created
- at (PNG_INFO_gAMA)
-
- png_set_sRGB(png_ptr, info_ptr, srgb_intent);
- srgb_intent - the rendering intent
- (PNG_INFO_sRGB) The presence of
- the sRGB chunk means that the pixel
- data is in the sRGB color space.
- This chunk also implies specific
- values of gAMA and cHRM. Rendering
- intent is the CSS-1 property that
- has been defined by the International
- Color Consortium
- (http://www.color.org).
- It can be one of
- PNG_sRGB_INTENT_SATURATION,
- PNG_sRGB_INTENT_PERCEPTUAL,
- PNG_sRGB_INTENT_ABSOLUTE, or
- PNG_sRGB_INTENT_RELATIVE.
-
-
- png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
- srgb_intent);
- srgb_intent - the rendering intent
- (PNG_INFO_sRGB) The presence of the
- sRGB chunk means that the pixel
- data is in the sRGB color space.
- This function also causes gAMA and
- cHRM chunks with the specific values
- that are consistent with sRGB to be
- written.
-
- png_set_iCCP(png_ptr, info_ptr, name, compression_type,
- profile, proflen);
- name - The profile name.
- compression - The compression type; always
- PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
- You may give NULL to this argument to
- ignore it.
- profile - International Color Consortium color
- profile data. May contain NULs.
- proflen - length of profile data in bytes.
-
- png_set_sBIT(png_ptr, info_ptr, sig_bit);
- sig_bit - the number of significant bits for
- (PNG_INFO_sBIT) each of the gray, red,
- green, and blue channels, whichever are
- appropriate for the given color type
- (png_color_16)
-
- png_set_tRNS(png_ptr, info_ptr, trans, num_trans,
- trans_values);
- trans - array of transparent entries for
- palette (PNG_INFO_tRNS)
- trans_values - graylevel or color sample values of
- the single transparent color for
- non-paletted images (PNG_INFO_tRNS)
- num_trans - number of transparent entries
- (PNG_INFO_tRNS)
-
- png_set_hIST(png_ptr, info_ptr, hist);
- (PNG_INFO_hIST)
- hist - histogram of palette (array of
- png_uint_16)
-
- png_set_tIME(png_ptr, info_ptr, mod_time);
- mod_time - time image was last modified
- (PNG_VALID_tIME)
-
- png_set_bKGD(png_ptr, info_ptr, background);
- background - background color (PNG_VALID_bKGD)
-
- png_set_text(png_ptr, info_ptr, text_ptr, num_text);
- text_ptr - array of png_text holding image
- comments
- text_ptr[i].compression - type of compression used
- on "text" PNG_TEXT_COMPRESSION_NONE
- PNG_TEXT_COMPRESSION_zTXt
- PNG_ITXT_COMPRESSION_NONE
- PNG_ITXT_COMPRESSION_zTXt
- text_ptr[i].key - keyword for comment. Must contain
- 1-79 characters.
- text_ptr[i].text - text comments for current
- keyword. Can be NULL or empty.
- text_ptr[i].text_length - length of text string,
- after decompression, 0 for iTXt
- text_ptr[i].itxt_length - length of itxt string,
- after decompression, 0 for tEXt/zTXt
- text_ptr[i].lang - language of comment (NULL or
- empty for unknown).
- text_ptr[i].translated_keyword - keyword in UTF-8 (NULL
- or empty for unknown).
- num_text - number of comments
-
- png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
- num_spalettes);
- palette_ptr - array of png_sPLT_struct structures
- to be added to the list of palettes
- in the info structure.
- num_spalettes - number of palette structures to be
- added.
-
- png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
- unit_type);
- offset_x - positive offset from the left
- edge of the screen
- offset_y - positive offset from the top
- edge of the screen
- unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
- png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
- unit_type);
- res_x - pixels/unit physical resolution
- in x direction
- res_y - pixels/unit physical resolution
- in y direction
- unit_type - PNG_RESOLUTION_UNKNOWN,
- PNG_RESOLUTION_METER
-
- png_set_sCAL(png_ptr, info_ptr, unit, width, height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are doubles)
-
- png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
- unit - physical scale units (an integer)
- width - width of a pixel in physical scale units
- height - height of a pixel in physical scale units
- (width and height are strings like "2.54")
-
- png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
- num_unknowns)
- unknowns - array of png_unknown_chunk
- structures holding unknown chunks
- unknowns[i].name - name of unknown chunk
- unknowns[i].data - data of unknown chunk
- unknowns[i].size - size of unknown chunk's data
- unknowns[i].location - position to write chunk in file
- 0: do not write chunk
- PNG_HAVE_IHDR: before PLTE
- PNG_HAVE_PLTE: before IDAT
- PNG_AFTER_IDAT: after IDAT
-
-The "location" member is set automatically according to
-what part of the output file has already been written.
-You can change its value after calling png_set_unknown_chunks()
-as demonstrated in pngtest.c. Within each of the "locations",
-the chunks are sequenced according to their position in the
-structure (that is, the value of "i", which is the order in which
-the chunk was either read from the input file or defined with
-png_set_unknown_chunks).
-
-A quick word about text and num_text. text is an array of png_text
-structures. num_text is the number of valid structures in the array.
-Each png_text structure holds a language code, a keyword, a text value,
-and a compression type.
-
-The compression types have the same valid numbers as the compression
-types of the image data. Currently, the only valid number is zero.
-However, you can store text either compressed or uncompressed, unlike
-images, which always have to be compressed. So if you don't want the
-text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
-Because tEXt and zTXt chunks don't have a language field, if you
-specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
-any language code or translated keyword will not be written out.
-
-Until text gets around 1000 bytes, it is not worth compressing it.
-After the text has been written out to the file, the compression type
-is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
-so that it isn't written out again at the end (in case you are calling
-png_write_end() with the same struct.
-
-The keywords that are given in the PNG Specification are:
-
- Title Short (one line) title or
- caption for image
- Author Name of image's creator
- Description Description of image (possibly long)
- Copyright Copyright notice
- Creation Time Time of original image creation
- (usually RFC 1123 format, see below)
- Software Software used to create the image
- Disclaimer Legal disclaimer
- Warning Warning of nature of content
- Source Device used to create the image
- Comment Miscellaneous comment; conversion
- from other image format
-
-The keyword-text pairs work like this. Keywords should be short
-simple descriptions of what the comment is about. Some typical
-keywords are found in the PNG specification, as is some recommendations
-on keywords. You can repeat keywords in a file. You can even write
-some text before the image and some after. For example, you may want
-to put a description of the image before the image, but leave the
-disclaimer until after, so viewers working over modem connections
-don't have to wait for the disclaimer to go over the modem before
-they start seeing the image. Finally, keywords should be full
-words, not abbreviations. Keywords and text are in the ISO 8859-1
-(Latin-1) character set (a superset of regular ASCII) and can not
-contain NUL characters, and should not contain control or other
-unprintable characters. To make the comments widely readable, stick
-with basic ASCII, and avoid machine specific character set extensions
-like the IBM-PC character set. The keyword must be present, but
-you can leave off the text string on non-compressed pairs.
-Compressed pairs must have a text string, as only the text string
-is compressed anyway, so the compression would be meaningless.
-
-PNG supports modification time via the png_time structure. Two
-conversion routines are provided, png_convert_from_time_t() for
-time_t and png_convert_from_struct_tm() for struct tm. The
-time_t routine uses gmtime(). You don't have to use either of
-these, but if you wish to fill in the png_time structure directly,
-you should provide the time in universal time (GMT) if possible
-instead of your local time. Note that the year number is the full
-year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
-that months start with 1.
-
-If you want to store the time of the original image creation, you should
-use a plain tEXt chunk with the "Creation Time" keyword. This is
-necessary because the "creation time" of a PNG image is somewhat vague,
-depending on whether you mean the PNG file, the time the image was
-created in a non-PNG format, a still photo from which the image was
-scanned, or possibly the subject matter itself. In order to facilitate
-machine-readable dates, it is recommended that the "Creation Time"
-tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
-although this isn't a requirement. Unlike the tIME chunk, the
-"Creation Time" tEXt chunk is not expected to be automatically changed
-by the software. To facilitate the use of RFC 1123 dates, a function
-png_convert_to_rfc1123(png_timep) is provided to convert from PNG
-time to an RFC 1123 format string.
-
-Writing unknown chunks
-
-You can use the png_set_unknown_chunks function to queue up chunks
-for writing. You give it a chunk name, raw data, and a size; that's
-all there is to it. The chunks will be written by the next following
-png_write_info_before_PLTE, png_write_info, or png_write_end function.
-Any chunks previously read into the info structure's unknown-chunk
-list will also be written out in a sequence that satisfies the PNG
-specification's ordering rules.
-
-The high-level write interface
-
-At this point there are two ways to proceed; through the high-level
-write interface, or through a sequence of low-level write operations.
-You can use the high-level interface if your image data is present
-in the info structure. All defined output
-transformations are permitted, enabled by the following masks.
-
- PNG_TRANSFORM_IDENTITY No transformation
- PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
- PNG_TRANSFORM_PACKSWAP Change order of packed
- pixels to LSB first
- PNG_TRANSFORM_INVERT_MONO Invert monochrome images
- PNG_TRANSFORM_SHIFT Normalize pixels to the
- sBIT depth
- PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
- to BGRA
- PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
- to AG
- PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
- to transparency
- PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
- PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes.
-
-If you have valid image data in the info structure (you can use
-png_set_rows() to put image data in the info structure), simply do this:
-
- png_write_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of some set of
-transformation flags. This call is equivalent to png_write_info(),
-followed the set of transformations indicated by the transform mask,
-then png_write_image(), and finally png_write_end().
-
-(The final parameter of this call is not yet used. Someday it might point
-to transformation parameters required by some future output transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_write_png().
-
-The low-level write interface
-
-If you are going the low-level route instead, you are now ready to
-write all the file information up to the actual image data. You do
-this with a call to png_write_info().
-
- png_write_info(png_ptr, info_ptr);
-
-Note that there is one transformation you may need to do before
-png_write_info(). In PNG files, the alpha channel in an image is the
-level of opacity. If your data is supplied as a level of
-transparency, you can invert the alpha channel before you write it, so
-that 0 is fully transparent and 255 (in 8-bit or paletted images) or
-65535 (in 16-bit images) is fully opaque, with
-
- png_set_invert_alpha(png_ptr);
-
-This must appear before png_write_info() instead of later with the
-other transformations because in the case of paletted images the tRNS
-chunk data has to be inverted before the tRNS chunk is written. If
-your image is not a paletted image, the tRNS data (which in such cases
-represents a single color to be rendered as transparent) won't need to
-be changed, and you can safely do this transformation after your
-png_write_info() call.
-
-If you need to write a private chunk that you want to appear before
-the PLTE chunk when PLTE is present, you can write the PNG info in
-two steps, and insert code to write your own chunk between them:
-
- png_write_info_before_PLTE(png_ptr, info_ptr);
- png_set_unknown_chunks(png_ptr, info_ptr, ...);
- png_write_info(png_ptr, info_ptr);
-
-After you've written the file information, you can set up the library
-to handle any special transformations of the image data. The various
-ways to transform the data will be described in the order that they
-should occur. This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths. Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data. For example, don't swap red and blue on grayscale data.
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code tells
-the library to strip input data that has 4 or 8 bytes per pixel down
-to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
-bytes per pixel).
-
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-
-where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
-PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
-is stored XRGB or RGBX.
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit files.
-If the data is supplied at 1 pixel per byte, use this code, which will
-correctly pack the pixels into a single byte:
-
- png_set_packing(png_ptr);
-
-PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your
-data is of another bit depth, you can write an sBIT chunk into the
-file so that decoders can recover the original data if desired.
-
- /* Set the true bit depth of the image data */
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- sig_bit.red = true_bit_depth;
- sig_bit.green = true_bit_depth;
- sig_bit.blue = true_bit_depth;
- }
- else
- {
- sig_bit.gray = true_bit_depth;
- }
- if (color_type & PNG_COLOR_MASK_ALPHA)
- {
- sig_bit.alpha = true_bit_depth;
- }
-
- png_set_sBIT(png_ptr, info_ptr, &sig_bit);
-
-If the data is stored in the row buffer in a bit depth other than
-one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
-this will scale the values to appear to be the correct bit depth as
-is required by PNG.
-
- png_set_shift(png_ptr, &sig_bit);
-
-PNG files store 16 bit pixels in network byte order (big-endian,
-ie. most significant bits first). This code would be used if they are
-supplied the other way (little-endian, i.e. least significant bits
-first, the way PCs store them):
-
- if (bit_depth > 8)
- png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
- if (bit_depth < 8)
- png_set_packswap(png_ptr);
-
-PNG files store 3 color pixels in red, green, blue order. This code
-would be used if they are supplied as blue, green, red:
-
- png_set_bgr(png_ptr);
-
-PNG files describe monochrome as black being zero and white being
-one. This code would be used if the pixels are supplied with this reversed
-(black being one and white being zero):
-
- png_set_invert_mono(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs. This is done by setting a callback
-with
-
- png_set_write_user_transform_fn(png_ptr,
- write_transform_fn);
-
-You must supply the function
-
- void write_transform_fn(png_ptr ptr, row_info_ptr
- row_info, png_bytep data)
-
-See pngtest.c for a working example. Your function will be called
-before any of the other transformations are processed.
-
-You can also set up a pointer to a user structure for use by your
-callback function.
-
- png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
-
-The user_channels and user_depth parameters of this function are ignored
-when writing; you can set them to zero as shown.
-
-You can retrieve the pointer via the function png_get_user_transform_ptr().
-For example:
-
- voidp write_user_transform_ptr =
- png_get_user_transform_ptr(png_ptr);
-
-It is possible to have libpng flush any pending output, either manually,
-or automatically after a certain number of lines have been written. To
-flush the output stream a single time call:
-
- png_write_flush(png_ptr);
-
-and to have libpng flush the output stream periodically after a certain
-number of scanlines have been written, call:
-
- png_set_flush(png_ptr, nrows);
-
-Note that the distance between rows is from the last time png_write_flush()
-was called, or the first row of the image if it has never been called.
-So if you write 50 lines, and then png_set_flush 25, it will flush the
-output on the next scanline, and every 25 lines thereafter, unless
-png_write_flush() is called before 25 more lines have been written.
-If nrows is too small (less than about 10 lines for a 640 pixel wide
-RGB image) the image compression may decrease noticeably (although this
-may be acceptable for real-time applications). Infrequent flushing will
-only degrade the compression performance by a few percent over images
-that do not use flushing.
-
-Writing the image data
-
-That's it for the transformations. Now you can write the image data.
-The simplest way to do this is in one function call. If you have the
-whole image in memory, you can just call png_write_image() and libpng
-will write the image. You will need to pass in an array of pointers to
-each row. This function automatically handles interlacing, so you don't
-need to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_write_rows().
-
- png_write_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
- png_byte *row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to write the whole image at once, you can
-use png_write_rows() instead. If the file is not interlaced,
-this is simple:
-
- png_write_rows(png_ptr, row_pointers,
- number_of_rows);
-
-row_pointers is the same as in the png_write_image() call.
-
-If you are just writing one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
- png_bytep row_pointer = row;
-
- png_write_row(png_ptr, row_pointer);
-
-When the file is interlaced, things can get a good deal more
-complicated. The only currently (as of the PNG Specification
-version 1.2, dated July 1999) defined interlacing scheme for PNG files
-is the "Adam7" interlace scheme, that breaks down an
-image into seven smaller images of varying size. libpng will build
-these images for you, or you can do them yourself. If you want to
-build them yourself, see the PNG specification for details of which
-pixels to write when.
-
-If you don't want libpng to handle the interlacing details, just
-use png_set_interlace_handling() and call png_write_rows() the
-correct number of times to write all seven sub-images.
-
-If you want libpng to build the sub-images, call this before you start
-writing any rows:
-
- number_of_passes =
- png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed. Currently, this
-is seven, but may change if another interlace type is added.
-
-Then write the complete image number_of_passes times.
-
- png_write_rows(png_ptr, row_pointers,
- number_of_rows);
-
-As some of these rows are not used, and thus return immediately,
-you may want to read about interlacing in the PNG specification,
-and only update the rows that are actually used.
-
-Finishing a sequential write
-
-After you are finished writing the image, you should finish writing
-the file. If you are interested in writing comments or time, you should
-pass an appropriately filled png_info pointer. If you are not interested,
-you can pass NULL.
-
- png_write_end(png_ptr, info_ptr);
-
-When you are done, you can free all memory used by libpng like this:
-
- png_destroy_write_struct(&png_ptr, &info_ptr);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
- png_free_data(png_ptr, info_ptr, mask, seq)
- mask - identifies data to be freed, a mask
- containing the bitwise OR of one or
- more of
- PNG_FREE_PLTE, PNG_FREE_TRNS,
- PNG_FREE_HIST, PNG_FREE_ICCP,
- PNG_FREE_PCAL, PNG_FREE_ROWS,
- PNG_FREE_SCAL, PNG_FREE_SPLT,
- PNG_FREE_TEXT, PNG_FREE_UNKN,
- or simply PNG_FREE_ALL
- seq - sequence number of item to be freed
- (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng, and will in those
-cases do nothing. The "seq" parameter is ignored if only one item
-of the selected data type, such as PLTE, is allowed. If "seq" is not
--1, and multiple items are allowed for the data type identified in
-the mask, such as text or sPLT, only the n'th item in the structure
-is freed, where n is "seq".
-
-If you allocated data such as a palette that you passed
-in to libpng with png_set_*, you must not free it until just before the call to
-png_destroy_write_struct().
-
-The default behavior is only to free data that was allocated internally
-by libpng. This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_zalloc() and passed in via a png_set_*() function, with
-
- png_data_freer(png_ptr, info_ptr, freer, mask)
- mask - which data elements are affected
- same choices as in png_free_data()
- freer - one of
- PNG_DESTROY_WILL_FREE_DATA
- PNG_SET_WILL_FREE_DATA
- PNG_USER_WILL_FREE_DATA
-
-For example, to transfer responsibility for some data from a read structure
-to a write structure, you could use
-
- png_data_freer(read_ptr, read_info_ptr,
- PNG_USER_WILL_FREE_DATA,
- PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
- png_data_freer(write_ptr, write_info_ptr,
- PNG_DESTROY_WILL_FREE_DATA,
- PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
-
-thereby briefly reassigning responsibility for freeing to the user but
-immediately afterwards reassigning it once more to the write_destroy
-function. Having done this, it would then be safe to destroy the read
-structure and continue to use the PLTE, tRNS, and hIST data in the write
-structure.
-
-This function only affects data that has already been allocated.
-You can call this function before calling after the png_set_*() functions
-to control whether the user or png_destroy_*() is supposed to free the data.
-When the user assumes responsibility for libpng-allocated data, the
-application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_zalloc() to allocate it.
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key. Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-For a more compact example of writing a PNG image, see the file example.c.
-
-V. Modifying/Customizing libpng:
-
-There are three issues here. The first is changing how libpng does
-standard things like memory allocation, input/output, and error handling.
-The second deals with more complicated things like adding new chunks,
-adding new transformations, and generally changing how libpng works.
-Both of those are compile-time issues; that is, they are generally
-determined at the time the code is written, and there is rarely a need
-to provide the user with a means of changing them. The third is a
-run-time issue: choosing between and/or tuning one or more alternate
-versions of computationally intensive routines; specifically, optimized
-assembly-language (and therefore compiler- and platform-dependent)
-versions.
-
-Memory allocation, input/output, and error handling
-
-All of the memory allocation, input/output, and error handling in libpng
-goes through callbacks that are user-settable. The default routines are
-in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
-these functions, call the appropriate png_set_*_fn() function.
-
-Memory allocation is done through the functions png_malloc()
-and png_free(). These currently just call the standard C functions. If
-your pointers can't access more then 64K at a time, you will want to set
-MAXSEG_64K in zlib.h. Since it is unlikely that the method of handling
-memory allocation on a platform will change between applications, these
-functions must be modified in the library at compile time. If you prefer
-to use a different method of allocating and freeing data, you can use
-png_create_read_struct_2() or png_create_write_struct_2() to register
-your own functions as described above.
-These functions also provide a void pointer that can be retrieved via
-
- mem_ptr=png_get_mem_ptr(png_ptr);
-
-Your replacement memory functions must have prototypes as follows:
-
- png_voidp malloc_fn(png_structp png_ptr,
- png_size_t size);
- void free_fn(png_structp png_ptr, png_voidp ptr);
-
-Your malloc_fn() must return NULL in case of failure. The png_malloc()
-function will normally call png_error() if it receives a NULL from the
-system memory allocator or from your replacement malloc_fn().
-
-Input/Output in libpng is done through png_read() and png_write(),
-which currently just call fread() and fwrite(). The FILE * is stored in
-png_struct and is initialized via png_init_io(). If you wish to change
-the method of I/O, the library supplies callbacks that you can set
-through the function png_set_read_fn() and png_set_write_fn() at run
-time, instead of calling the png_init_io() function. These functions
-also provide a void pointer that can be retrieved via the function
-png_get_io_ptr(). For example:
-
- png_set_read_fn(png_structp read_ptr,
- voidp read_io_ptr, png_rw_ptr read_data_fn)
-
- png_set_write_fn(png_structp write_ptr,
- voidp write_io_ptr, png_rw_ptr write_data_fn,
- png_flush_ptr output_flush_fn);
-
- voidp read_io_ptr = png_get_io_ptr(read_ptr);
- voidp write_io_ptr = png_get_io_ptr(write_ptr);
-
-The replacement I/O functions must have prototypes as follows:
-
- void user_read_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
- void user_write_data(png_structp png_ptr,
- png_bytep data, png_size_t length);
- void user_flush_data(png_structp png_ptr);
-
-Supplying NULL for the read, write, or flush functions sets them back
-to using the default C stream functions. It is an error to read from
-a write stream, and vice versa.
-
-Error handling in libpng is done through png_error() and png_warning().
-Errors handled through png_error() are fatal, meaning that png_error()
-should never return to its caller. Currently, this is handled via
-setjmp() and longjmp() (unless you have compiled libpng with
-PNG_SETJMP_NOT_SUPPORTED, in which case it is handled via PNG_ABORT()),
-but you could change this to do things like exit() if you should wish.
-
-On non-fatal errors, png_warning() is called
-to print a warning message, and then control returns to the calling code.
-By default png_error() and png_warning() print a message on stderr via
-fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
-(because you don't want the messages) or PNG_NO_STDIO defined (because
-fprintf() isn't available). If you wish to change the behavior of the error
-functions, you will need to set up your own message callbacks. These
-functions are normally supplied at the time that the png_struct is created.
-It is also possible to redirect errors and warnings to your own replacement
-functions after png_create_*_struct() has been called by calling:
-
- png_set_error_fn(png_structp png_ptr,
- png_voidp error_ptr, png_error_ptr error_fn,
- png_error_ptr warning_fn);
-
- png_voidp error_ptr = png_get_error_ptr(png_ptr);
-
-If NULL is supplied for either error_fn or warning_fn, then the libpng
-default function will be used, calling fprintf() and/or longjmp() if a
-problem is encountered. The replacement error functions should have
-parameters as follows:
-
- void user_error_fn(png_structp png_ptr,
- png_const_charp error_msg);
- void user_warning_fn(png_structp png_ptr,
- png_const_charp warning_msg);
-
-The motivation behind using setjmp() and longjmp() is the C++ throw and
-catch exception handling methods. This makes the code much easier to write,
-as there is no need to check every return code of every function call.
-However, there are some uncertainties about the status of local variables
-after a longjmp, so the user may want to be careful about doing anything after
-setjmp returns non-zero besides returning itself. Consult your compiler
-documentation for more details. For an alternative approach, you may wish
-to use the "cexcept" facility (see http://cexcept.sourceforge.net).
-
-Custom chunks
-
-If you need to read or write custom chunks, you may need to get deeper
-into the libpng code. The library now has mechanisms for storing
-and writing chunks of unknown type; you can even declare callbacks
-for custom chunks. However, this may not be good enough if the
-library code itself needs to know about interactions between your
-chunk and existing `intrinsic' chunks.
-
-If you need to write a new intrinsic chunk, first read the PNG
-specification. Acquire a first level of
-understanding of how it works. Pay particular attention to the
-sections that describe chunk names, and look at how other chunks were
-designed, so you can do things similarly. Second, check out the
-sections of libpng that read and write chunks. Try to find a chunk
-that is similar to yours and use it as a template. More details can
-be found in the comments inside the code. It is best to handle unknown
-chunks in a generic method, via callback functions, instead of by
-modifying libpng functions.
-
-If you wish to write your own transformation for the data, look through
-the part of the code that does the transformations, and check out some of
-the simpler ones to get an idea of how they work. Try to find a similar
-transformation to the one you want to add and copy off of it. More details
-can be found in the comments inside the code itself.
-
-Configuring for 16 bit platforms
-
-You will want to look into zconf.h to tell zlib (and thus libpng) that
-it cannot allocate more then 64K at a time. Even if you can, the memory
-won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
-
-Configuring for DOS
-
-For DOS users who only have access to the lower 640K, you will
-have to limit zlib's memory usage via a png_set_compression_mem_level()
-call. See zlib.h or zconf.h in the zlib library for more information.
-
-Configuring for Medium Model
-
-Libpng's support for medium model has been tested on most of the popular
-compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
-defined, and FAR gets defined to far in pngconf.h, and you should be
-all set. Everything in the library (except for zlib's structure) is
-expecting far data. You must use the typedefs with the p or pp on
-the end for pointers (or at least look at them and be careful). Make
-note that the rows of data are defined as png_bytepp, which is an
-unsigned char far * far *.
-
-Configuring for gui/windowing platforms:
-
-You will need to write new error and warning functions that use the GUI
-interface, as described previously, and set them to be the error and
-warning functions at the time that png_create_*_struct() is called,
-in order to have them available during the structure initialization.
-They can be changed later via png_set_error_fn(). On some compilers,
-you may also have to change the memory allocators (png_malloc, etc.).
-
-Configuring for compiler xxx:
-
-All includes for libpng are in pngconf.h. If you need to add/change/delete
-an include, this is the place to do it. The includes that are not
-needed outside libpng are protected by the PNG_INTERNAL definition,
-which is only defined for those routines inside libpng itself. The
-files in libpng proper only include png.h, which includes pngconf.h.
-
-Configuring zlib:
-
-There are special functions to configure the compression. Perhaps the
-most useful one changes the compression level, which currently uses
-input compression values in the range 0 - 9. The library normally
-uses the default compression level (Z_DEFAULT_COMPRESSION = 6). Tests
-have shown that for a large majority of images, compression values in
-the range 3-6 compress nearly as well as higher levels, and do so much
-faster. For online applications it may be desirable to have maximum speed
-(Z_BEST_SPEED = 1). With versions of zlib after v0.99, you can also
-specify no compression (Z_NO_COMPRESSION = 0), but this would create
-files larger than just storing the raw bitmap. You can specify the
-compression level by calling:
-
- png_set_compression_level(png_ptr, level);
-
-Another useful one is to reduce the memory level used by the library.
-The memory level defaults to 8, but it can be lowered if you are
-short on memory (running DOS, for example, where you only have 640K).
-Note that the memory level does have an effect on compression; among
-other things, lower levels will result in sections of incompressible
-data being emitted in smaller stored blocks, with a correspondingly
-larger relative overhead of up to 15% in the worst case.
-
- png_set_compression_mem_level(png_ptr, level);
-
-The other functions are for configuring zlib. They are not recommended
-for normal use and may result in writing an invalid PNG file. See
-zlib.h for more information on what these mean.
-
- png_set_compression_strategy(png_ptr,
- strategy);
- png_set_compression_window_bits(png_ptr,
- window_bits);
- png_set_compression_method(png_ptr, method);
- png_set_compression_buffer_size(png_ptr, size);
-
-Controlling row filtering
-
-If you want to control whether libpng uses filtering or not, which
-filters are used, and how it goes about picking row filters, you
-can call one of these functions. The selection and configuration
-of row filters can have a significant impact on the size and
-encoding speed and a somewhat lesser impact on the decoding speed
-of an image. Filtering is enabled by default for RGB and grayscale
-images (with and without alpha), but not for paletted images nor
-for any images with bit depths less than 8 bits/pixel.
-
-The 'method' parameter sets the main filtering method, which is
-currently only '0' in the PNG 1.2 specification. The 'filters'
-parameter sets which filter(s), if any, should be used for each
-scanline. Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
-to turn filtering on and off, respectively.
-
-Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
-PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
-ORed together with '|' to specify one or more filters to use.
-These filters are described in more detail in the PNG specification.
-If you intend to change the filter type during the course of writing
-the image, you should start with flags set for all of the filters
-you intend to use so that libpng can initialize its internal
-structures appropriately for all of the filter types. (Note that this
-means the first row must always be adaptively filtered, because libpng
-currently does not allocate the filter buffers until png_write_row()
-is called for the first time.)
-
- filters = PNG_FILTER_NONE | PNG_FILTER_SUB
- PNG_FILTER_UP | PNG_FILTER_AVE |
- PNG_FILTER_PAETH | PNG_ALL_FILTERS;
-
- png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
- filters);
- The second parameter can also be
- PNG_INTRAPIXEL_DIFFERENCING if you are
- writing a PNG to be embedded in a MNG
- datastream. This parameter must be the
- same as the value of filter_method used
- in png_set_IHDR().
-
-It is also possible to influence how libpng chooses from among the
-available filters. This is done in one or both of two ways - by
-telling it how important it is to keep the same filter for successive
-rows, and by telling it the relative computational costs of the filters.
-
- double weights[3] = {1.5, 1.3, 1.1},
- costs[PNG_FILTER_VALUE_LAST] =
- {1.0, 1.3, 1.3, 1.5, 1.7};
-
- png_set_filter_heuristics(png_ptr,
- PNG_FILTER_HEURISTIC_WEIGHTED, 3,
- weights, costs);
-
-The weights are multiplying factors that indicate to libpng that the
-row filter should be the same for successive rows unless another row filter
-is that many times better than the previous filter. In the above example,
-if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
-"sum of absolute differences" 1.5 x 1.3 times higher than other filters
-and still be chosen, while the NONE filter could have a sum 1.1 times
-higher than other filters and still be chosen. Unspecified weights are
-taken to be 1.0, and the specified weights should probably be declining
-like those above in order to emphasize recent filters over older filters.
-
-The filter costs specify for each filter type a relative decoding cost
-to be considered when selecting row filters. This means that filters
-with higher costs are less likely to be chosen over filters with lower
-costs, unless their "sum of absolute differences" is that much smaller.
-The costs do not necessarily reflect the exact computational speeds of
-the various filters, since this would unduly influence the final image
-size.
-
-Note that the numbers above were invented purely for this example and
-are given only to help explain the function usage. Little testing has
-been done to find optimum values for either the costs or the weights.
-
-Removing unwanted object code
-
-There are a bunch of #define's in pngconf.h that control what parts of
-libpng are compiled. All the defines end in _SUPPORTED. If you are
-never going to use a capability, you can change the #define to #undef
-before recompiling libpng and save yourself code and data space, or
-you can turn off individual capabilities with defines that begin with
-PNG_NO_.
-
-You can also turn all of the transforms and ancillary chunk capabilities
-off en masse with compiler directives that define
-PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
-or all four,
-along with directives to turn on any of the capabilities that you do
-want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable
-the extra transformations but still leave the library fully capable of reading
-and writing PNG files with all known public chunks
-Use of the PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive
-produces a library that is incapable of reading or writing ancillary chunks.
-If you are not using the progressive reading capability, you can
-turn that off with PNG_NO_PROGRESSIVE_READ (don't confuse
-this with the INTERLACING capability, which you'll still have).
-
-All the reading and writing specific code are in separate files, so the
-linker should only grab the files it needs. However, if you want to
-make sure, or if you are building a stand alone library, all the
-reading files start with pngr and all the writing files start with
-pngw. The files that don't match either (like png.c, pngtrans.c, etc.)
-are used for both reading and writing, and always need to be included.
-The progressive reader is in pngpread.c
-
-If you are creating or distributing a dynamically linked library (a .so
-or DLL file), you should not remove or disable any parts of the library,
-as this will cause applications linked with different versions of the
-library to fail if they call functions not available in your library.
-The size of the library itself should not be an issue, because only
-those sections that are actually used will be loaded into memory.
-
-Requesting debug printout
-
-The macro definition PNG_DEBUG can be used to request debugging
-printout. Set it to an integer value in the range 0 to 3. Higher
-numbers result in increasing amounts of debugging information. The
-information is printed to the "stderr" file, unless another file
-name is specified in the PNG_DEBUG_FILE macro definition.
-
-When PNG_DEBUG > 0, the following functions (macros) become available:
-
- png_debug(level, message)
- png_debug1(level, message, p1)
- png_debug2(level, message, p1, p2)
-
-in which "level" is compared to PNG_DEBUG to decide whether to print
-the message, "message" is the formatted string to be printed,
-and p1 and p2 are parameters that are to be embedded in the string
-according to printf-style formatting directives. For example,
-
- png_debug1(2, "foo=%d\n", foo);
-
-is expanded to
-
- if(PNG_DEBUG > 2)
- fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
-
-When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
-can still use PNG_DEBUG to control your own debugging:
-
- #ifdef PNG_DEBUG
- fprintf(stderr, ...
- #endif
-
-When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
-having level = 0 will be printed. There aren't any such statements in
-this version of libpng, but if you insert some they will be printed.
-
-VI. Runtime optimization
-
-A new feature in libpng 1.2.0 is the ability to dynamically switch between
-standard and optimized versions of some routines. Currently these are
-limited to three computationally intensive tasks when reading PNG files:
-decoding row filters, expanding interlacing, and combining interlaced or
-transparent row data with previous row data. Currently the optimized
-versions are available only for x86 (Intel, AMD, etc.) platforms with
-MMX support, though this may change in future versions. (For example,
-the non-MMX assembler optimizations for zlib might become similarly
-runtime-selectable in future releases, in which case libpng could be
-extended to support them. Alternatively, the compile-time choice of
-floating-point versus integer routines for gamma correction might become
-runtime-selectable.)
-
-Because such optimizations tend to be very platform- and compiler-dependent,
-both in how they are written and in how they perform, the new runtime code
-in libpng has been written to allow programs to query, enable, and disable
-either specific optimizations or all such optimizations. For example, to
-enable all possible optimizations (bearing in mind that some "optimizations"
-may actually run more slowly in rare cases):
-
- #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200)
- png_uint_32 mask, flags;
-
- flags = png_get_asm_flags(png_ptr);
- mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE);
- png_set_asm_flags(png_ptr, flags | mask);
- #endif
-
-To enable only optimizations relevant to reading PNGs, use PNG_SELECT_READ
-by itself when calling png_get_asm_flagmask(); similarly for optimizing
-only writing. To disable all optimizations:
-
- #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200)
- flags = png_get_asm_flags(png_ptr);
- mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE);
- png_set_asm_flags(png_ptr, flags & ~mask);
- #endif
-
-To enable or disable only MMX-related features, use png_get_mmx_flagmask()
-in place of png_get_asm_flagmask(). The mmx version takes one additional
-parameter:
-
- #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200)
- int selection = PNG_SELECT_READ | PNG_SELECT_WRITE;
- int compilerID;
-
- mask = png_get_mmx_flagmask(selection, &compilerID);
- #endif
-
-On return, compilerID will indicate which version of the MMX assembler
-optimizations was compiled. Currently two flavors exist: Microsoft
-Visual C++ (compilerID == 1) and GNU C (a.k.a. gcc/gas, compilerID == 2).
-On non-x86 platforms or on systems compiled without MMX optimizations, a
-value of -1 is used.
-
-Note that both png_get_asm_flagmask() and png_get_mmx_flagmask() return
-all valid, settable optimization bits for the version of the library that's
-currently in use. In the case of shared (dynamically linked) libraries,
-this may include optimizations that did not exist at the time the code was
-written and compiled. It is also possible, of course, to enable only known,
-specific optimizations; for example:
-
- #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200)
- flags = PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \
- | PNG_ASM_FLAG_MMX_READ_INTERLACE \
- | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \
- | PNG_ASM_FLAG_MMX_READ_FILTER_UP \
- | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \
- | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ;
- png_set_asm_flags(png_ptr, flags);
- #endif
-
-This method would enable only the MMX read-optimizations available at the
-time of libpng 1.2.0's release, regardless of whether a later version of
-the DLL were actually being used. (Also note that these functions did not
-exist in versions older than 1.2.0, so any attempt to run a dynamically
-linked app on such an older version would fail.)
-
-To determine whether the processor supports MMX instructions at all, use
-the png_mmx_support() function:
-
- #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200)
- mmxsupport = png_mmx_support();
- #endif
-
-It returns -1 if MMX support is not compiled into libpng, 0 if MMX code
-is compiled but MMX is not supported by the processor, or 1 if MMX support
-is fully available. Note that png_mmx_support(), png_get_mmx_flagmask(),
-and png_get_asm_flagmask() all may be called without allocating and ini-
-tializing any PNG structures (for example, as part of a usage screen or
-"about" box).
-
-The following code can be used to prevent an application from using the
-thread_unsafe features, even if libpng was built with PNG_THREAD_UNSAFE_OK
-defined:
-
-#if defined(PNG_USE_PNGGCCRD) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) \
- && defined(PNG_THREAD_UNSAFE_OK)
- /* Disable thread-unsafe features of pnggccrd */
- if (png_access_version_number() >= 10200)
- {
- png_uint_32 mmx_disable_mask = 0;
- png_uint_32 asm_flags;
-
- mmx_disable_mask |= ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \
- | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \
- | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \
- | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH );
- asm_flags = png_get_asm_flags(png_ptr);
- png_set_asm_flags(png_ptr, asm_flags & ~mmx_disable_mask);
- }
-#endif
-
-For more extensive examples of runtime querying, enabling and disabling
-of optimized features, see contrib/gregbook/readpng2.c in the libpng
-source-code distribution.
-
-VII. MNG support
-
-The MNG specification (available at http://www.libpng.org/pub/mng) allows
-certain extensions to PNG for PNG images that are embedded in MNG datastreams.
-Libpng can support some of these extensions. To enable them, use the
-png_permit_mng_features() function:
-
- feature_set = png_permit_mng_features(png_ptr, mask)
- mask is a png_uint_32 containing the bitwise OR of the
- features you want to enable. These include
- PNG_FLAG_MNG_EMPTY_PLTE
- PNG_FLAG_MNG_FILTER_64
- PNG_ALL_MNG_FEATURES
- feature_set is a png_uint_32 that is the bitwise AND of
- your mask with the set of MNG features that is
- supported by the version of libpng that you are using.
-
-It is an error to use this function when reading or writing a standalone
-PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped
-in a MNG datastream. As a minimum, it must have the MNG 8-byte signature
-and the MHDR and MEND chunks. Libpng does not provide support for these
-or any other MNG chunks; your application must provide its own support for
-them. You may wish to consider using libmng (available at
-http://www.libmng.com) instead.
-
-VIII. Changes to Libpng from version 0.88
-
-It should be noted that versions of libpng later than 0.96 are not
-distributed by the original libpng author, Guy Schalnat, nor by
-Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
-distributed versions 0.89 through 0.96, but rather by another member
-of the original PNG Group, Glenn Randers-Pehrson. Guy and Andreas are
-still alive and well, but they have moved on to other things.
-
-The old libpng functions png_read_init(), png_write_init(),
-png_info_init(), png_read_destroy(), and png_write_destroy() have been
-moved to PNG_INTERNAL in version 0.95 to discourage their use. These
-functions will be removed from libpng version 2.0.0.
-
-The preferred method of creating and initializing the libpng structures is
-via the png_create_read_struct(), png_create_write_struct(), and
-png_create_info_struct() because they isolate the size of the structures
-from the application, allow version error checking, and also allow the
-use of custom error handling routines during the initialization, which
-the old functions do not. The functions png_read_destroy() and
-png_write_destroy() do not actually free the memory that libpng
-allocated for these structs, but just reset the data structures, so they
-can be used instead of png_destroy_read_struct() and
-png_destroy_write_struct() if you feel there is too much system overhead
-allocating and freeing the png_struct for each image read.
-
-Setting the error callbacks via png_set_message_fn() before
-png_read_init() as was suggested in libpng-0.88 is no longer supported
-because this caused applications that do not use custom error functions
-to fail if the png_ptr was not initialized to zero. It is still possible
-to set the error callbacks AFTER png_read_init(), or to change them with
-png_set_error_fn(), which is essentially the same function, but with a new
-name to force compilation errors with applications that try to use the old
-method.
-
-Starting with version 1.0.7, you can find out which version of the library
-you are using at run-time:
-
- png_uint_32 libpng_vn = png_access_version_number();
-
-The number libpng_vn is constructed from the major version, minor
-version with leading zero, and release number with leading zero,
-(e.g., libpng_vn for version 1.0.7 is 10007).
-
-You can also check which version of png.h you used when compiling your
-application:
-
- png_uint_32 application_vn = PNG_LIBPNG_VER;
-
-IX. Y2K Compliance in libpng
-
-January 5, 2007
-
-Since the PNG Development group is an ad-hoc body, we can't make
-an official declaration.
-
-This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.2.15 are Y2K compliant. It is my belief that earlier
-versions were also Y2K compliant.
-
-Libpng only has three year fields. One is a 2-byte unsigned integer that
-will hold years up to 65535. The other two hold the date in text
-format, and will hold years up to 9999.
-
-The integer is
- "png_uint_16 year" in png_time_struct.
-
-The strings are
- "png_charp time_buffer" in png_struct and
- "near_time_buffer", which is a local character string in png.c.
-
-There are seven time-related functions:
-
- png_convert_to_rfc_1123() in png.c
- (formerly png_convert_to_rfc_1152() in error)
- png_convert_from_struct_tm() in pngwrite.c, called
- in pngwrite.c
- png_convert_from_time_t() in pngwrite.c
- png_get_tIME() in pngget.c
- png_handle_tIME() in pngrutil.c, called in pngread.c
- png_set_tIME() in pngset.c
- png_write_tIME() in pngwutil.c, called in pngwrite.c
-
-All appear to handle dates properly in a Y2K environment. The
-png_convert_from_time_t() function calls gmtime() to convert from system
-clock time, which returns (year - 1900), which we properly convert to
-the full 4-digit year. There is a possibility that applications using
-libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
-function, or that they are incorrectly passing only a 2-digit year
-instead of "year - 1900" into the png_convert_from_struct_tm() function,
-but this is not under our control. The libpng documentation has always
-stated that it works with 4-digit years, and the APIs have been
-documented as such.
-
-The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
-integer to hold the year, and can hold years as large as 65535.
-
-zlib, upon which libpng depends, is also Y2K compliant. It contains
-no date-related code.
-
-
- Glenn Randers-Pehrson
- libpng maintainer
- PNG Development Group
diff --git a/Build/source/libs/libpng/libpngpf.3 b/Build/source/libs/libpng/libpngpf.3
deleted file mode 100644
index 423964f9247..00000000000
--- a/Build/source/libs/libpng/libpngpf.3
+++ /dev/null
@@ -1,274 +0,0 @@
-.TH LIBPNGPF 3 "May 8, 2008"
-.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.2.29
-(private functions)
-.SH SYNOPSIS
-\fB#include <png.h>\fP
-
-\fBvoid png_build_gamma_table (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_build_grayscale_palette (int \fP\fIbit_depth\fP\fB, png_colorp \fIpalette\fP\fB);\fP
-
-\fBvoid png_calculate_crc (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIptr\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_check_chunk_name (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP
-
-\fBpng_size_t png_check_keyword (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIkey\fP\fB, png_charpp \fInew_key\fP\fB);\fP
-
-\fBvoid png_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIrow\fP\fB, int \fImask\fP\fB);\fP
-
-\fBvoid png_correct_palette (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fInum_palette\fP\fB);\fP
-
-\fBint png_crc_error (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBint png_crc_finish (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIskip\fP\fB);\fP
-
-\fBvoid png_crc_read (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuf\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBpng_voidp png_create_struct (int \fItype\fP\fB);\fP
-
-\fBpng_voidp png_create_struct_2 (int \fP\fItype\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_voidp \fImem_ptr\fP\fB);\fP
-
-\fBpng_charp png_decompress_chunk (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcomp_type\fP\fB, png_charp \fP\fIchunkdata\fP\fB, png_size_t \fP\fIchunklength\fP\fB, png_size_t \fP\fIprefix_length\fP\fB, png_size_t \fI*data_length\fP\fB);\fP
-
-\fBvoid png_destroy_struct (png_voidp \fIstruct_ptr\fP\fB);\fP
-
-\fBvoid png_destroy_struct_2 (png_voidp \fP\fIstruct_ptr\fP\fB, png_free_ptr \fP\fIfree_fn\fP\fB, png_voidp \fImem_ptr\fP\fB);\fP
-
-\fBvoid png_do_background (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_16p \fP\fItrans_values\fP\fB, png_color_16p \fP\fIbackground\fP\fB, png_color_16p \fP\fIbackground_1\fP\fB, png_bytep \fP\fIgamma_table\fP\fB, png_bytep \fP\fIgamma_from_1\fP\fB, png_bytep \fP\fIgamma_to_1\fP\fB, png_uint_16pp \fP\fIgamma_16\fP\fB, png_uint_16pp \fP\fIgamma_16_from_1\fP\fB, png_uint_16pp \fP\fIgamma_16_to_1\fP\fB, int \fIgamma_shift\fP\fB);\fP
-
-\fBvoid png_do_bgr (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_chop (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_dither (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fP\fIpalette_lookup\fP\fB, png_bytep \fIdither_lookup\fP\fB);\fP
-
-\fBvoid png_do_expand (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_16p \fItrans_value\fP\fB);\fP
-
-\fBvoid png_do_expand_palette (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_colorp \fP\fIpalette\fP\fB, png_bytep \fP\fItrans\fP\fB, int \fInum_trans\fP\fB);\fP
-
-\fBvoid png_do_gamma (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fP\fIgamma_table\fP\fB, png_uint_16pp \fP\fIgamma_16_table\fP\fB, int \fIgamma_shift\fP\fB);\fP
-
-\fBvoid png_do_gray_to_rgb (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_invert (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_pack (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_uint_32 \fIbit_depth\fP\fB);\fP
-
-\fBvoid png_do_packswap (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_read_filler (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, png_uint_32 \fIflags\fP\fB);\fP
-
-\fBvoid png_do_read_interlace (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, int \fP\fIpass\fP\fB, png_uint_32 \fItransformations\fP\fB);\fP
-
-\fBvoid png_do_read_invert_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_read_swap_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_read_transformations (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBint png_do_rgb_to_gray (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_shift (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_8p \fIbit_depth\fP\fB);\fP
-
-\fBvoid png_do_strip_filler (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_uint_32 \fIflags\fP\fB);\fP
-
-\fBvoid png_do_swap (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_unpack (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_unshift (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_8p \fIsig_bits\fP\fB);\fP
-
-\fBvoid png_do_write_interlace (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, int \fIpass\fP\fB);\fP
-
-\fBvoid png_do_write_invert_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_write_swap_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_do_write_transformations (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid *png_far_to_near (png_structp png_ptr,png_voidp \fP\fIptr\fP\fB, int \fIcheck\fP\fB);\fP
-
-\fBvoid png_flush (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_handle_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_IEND (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_iTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_handle_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_info_destroy (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_init_mmx_flags (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_init_read_transformations (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_process_IDAT_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_length\fP\fB);\fP
-
-\fBvoid png_process_some_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_check_crc (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_push_crc_finish (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_push_crc_skip (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_push_fill_buffer (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_push_handle_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_push_handle_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_push_handle_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_push_have_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_have_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_have_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_push_process_row (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_push_read_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_read_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_read_IDAT (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_push_read_sig (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_read_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_read_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_push_restore_buffer (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_length\fP\fB);\fP
-
-\fBvoid png_push_save_buffer (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_read_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_read_filter_row (png_structp \fP\fIpng_ptr\fP\fB, png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fP\fIprev_row\fP\fB, int \fIfilter\fP\fB);\fP
-
-\fBvoid png_read_finish_row (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_read_push_finish_row (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_read_start_row (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_read_transform_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_reset_crc (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBint png_set_text_2 (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fItext_ptr\fP\fB, int \fInum_text\fP\fB);\fP
-
-\fBvoid png_write_cHRM (png_structp \fP\fIpng_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP
-
-\fBvoid png_write_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIwhite_x\fP\fB, png_uint_32 \fP\fIwhite_y\fP\fB, png_uint_32 \fP\fIred_x\fP\fB, png_uint_32 \fP\fIred_y\fP\fB, png_uint_32 \fP\fIgreen_x\fP\fB, png_uint_32 \fP\fIgreen_y\fP\fB, png_uint_32 \fP\fIblue_x\fP\fB, png_uint_32 \fIblue_y\fP\fB);\fP
-
-\fBvoid png_write_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_write_filtered_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIfiltered_row\fP\fB);\fP
-
-\fBvoid png_write_find_filter (png_structp \fP\fIpng_ptr\fP\fB, png_row_infop \fIrow_info\fP\fB);\fP
-
-\fBvoid png_write_finish_row (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_gAMA (png_structp \fP\fIpng_ptr\fP\fB, double \fIfile_gamma\fP\fB);\fP
-
-\fBvoid png_write_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIint_file_gamma\fP\fB);\fP
-
-\fBvoid png_write_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_uint_16p \fP\fIhist\fP\fB, int \fInum_hist\fP\fB);\fP
-
-\fBvoid png_write_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIname\fP\fB, int \fP\fIcompression_type\fP\fB, png_charp \fP\fIprofile\fP\fB, int \fIproflen\fP\fB);\fP
-
-\fBvoid png_write_IDAT (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_write_IEND (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fP\fIfilter_type\fP\fB, int \fIinterlace_type\fP\fB);\fP
-
-\fBvoid png_write_iTXt (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcompression\fP\fB, png_charp \fP\fIkey\fP\fB, png_charp \fP\fIlang\fP\fB, png_charp \fP\fItranslated_key\fP\fB, png_charp \fItext\fP\fB);\fP
-
-\fBvoid png_write_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIx_offset\fP\fB, png_uint_32 \fP\fIy_offset\fP\fB, int \fIunit_type\fP\fB);\fP
-
-\fBvoid png_write_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIpurpose\fP\fB, png_int_32 \fP\fIX0\fP\fB, png_int_32 \fP\fIX1\fP\fB, int \fP\fItype\fP\fB, int \fP\fInparams\fP\fB, png_charp \fP\fIunits\fP\fB, png_charpp \fIparams\fP\fB);\fP
-
-\fBvoid png_write_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIx_pixels_per_unit\fP\fB, png_uint_32 \fP\fIy_pixels_per_unit\fP\fB, int \fIunit_type\fP\fB);\fP
-
-\fBvoid png_write_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, png_uint_32 \fInum_pal\fP\fB);\fP
-
-\fBvoid png_write_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_color_8p \fP\fIsbit\fP\fB, int \fIcolor_type\fP\fB);\fP
-
-\fBvoid png_write_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, double \fP\fIwidth\fP\fB, double \fIheight\fP\fB);\fP
-
-\fBvoid png_write_sCAL_s (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, png_charp \fP\fIwidth\fP\fB, png_charp \fIheight\fP\fB);\fP
-
-\fBvoid png_write_sig (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_sRGB (png_structp \fP\fIpng_ptr\fP\fB, int \fIintent\fP\fB);\fP
-
-\fBvoid png_write_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_spalette_p \fIpalette\fP\fB);\fP
-
-\fBvoid png_write_start_row (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIkey\fP\fB, png_charp \fP\fItext\fP\fB, png_size_t \fItext_len\fP\fB);\fP
-
-\fBvoid png_write_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP
-
-\fBvoid png_write_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fItrans\fP\fB, png_color_16p \fP\fIvalues\fP\fB, int \fP\fInumber\fP\fB, int \fIcolor_type\fP\fB);\fP
-
-\fBvoid png_write_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIkey\fP\fB, png_charp \fP\fItext\fP\fB, png_size_t \fP\fItext_len\fP\fB, int \fIcompression\fP\fB);\fP
-
-\fBvoidpf png_zalloc (voidpf \fP\fIpng_ptr\fP\fB, uInt \fP\fIitems\fP\fB, uInt \fIsize\fP\fB);\fP
-
-\fBvoid png_zfree (voidpf \fP\fIpng_ptr\fP\fB, voidpf \fIptr\fP\fB);\fP
-
-\fI\fB
-
-.SH DESCRIPTION
-The functions listed above are used privately by libpng
-and are not recommended for use by applications. They are
-not "exported" to applications using shared libraries. They
-are listed alphabetically here as an aid to libpng maintainers.
-See png.h for more information on these functions.
-
-.SH SEE ALSO
-.IR libpng(3) ", " png(5)
-.SH AUTHOR
-Glenn Randers-Pehrson
diff --git a/Build/source/libs/libpng/png.5 b/Build/source/libs/libpng/png.5
deleted file mode 100644
index 832a6f4c546..00000000000
--- a/Build/source/libs/libpng/png.5
+++ /dev/null
@@ -1,74 +0,0 @@
-.TH PNG 5 "May 8, 2008"
-.SH NAME
-png \- Portable Network Graphics (PNG) format
-.SH DESCRIPTION
-PNG (Portable Network Graphics) is an extensible file format for the
-lossless, portable, well-compressed storage of raster images. PNG provides
-a patent-free replacement for GIF and can also replace many
-common uses of TIFF. Indexed-color, grayscale, and truecolor images are
-supported, plus an optional alpha channel. Sample depths range from
-1 to 16 bits.
-.br
-
-PNG is designed to work well in online viewing applications, such as the
-World Wide Web, so it is fully streamable with a progressive display
-option. PNG is robust, providing both full file integrity checking and
-fast, simple detection of common transmission errors. Also, PNG can store
-gamma and chromaticity data for improved color matching on heterogeneous
-platforms.
-
-.SH "SEE ALSO"
-.IR libpng(3) ", " zlib(3) ", " deflate(5) ", and " zlib(5)
-.LP
-PNG specification (second edition), November 2003:
-.IP
-.br
- <http://www.w3.org/TR/2003/REC-PNG-20031110/
-PNG 1.2 specification, July 1999:
-.IP
-.br
-http://www.libpng.org/pub/png
-.LP
-PNG 1.0 specification, October 1996:
-.IP
-.br
-RFC 2083
-.IP
-.br
-ftp://ftp.rfc-editor.org:/in-notes/rfc2083.txt
-.br
-or (as a W3C Recommendation) at
-.br
-http://www.w3.org/TR/REC-png.html
-.SH AUTHORS
-This man page: Glenn Randers-Pehrson
-.LP
-Portable Network Graphics (PNG) Specification (Second Edition)
-Information technology - Computer graphics and image processing -
-Portable Network Graphics (PNG): Functional specification.
-ISO/IEC 15948:2003 (E) (November 10, 2003): David Duce and others.
-.LP
-Portable Network Graphics (PNG) Specification Version 1.2 (July 8, 1999):
-Glenn Randers-Pehrson and others (png-list).
-.LP
-Portable Network Graphics (PNG) Specification Version 1.0 (October 1, 1996):
-Thomas Boutell and others (png-list).
-.LP
-
-
-.SH COPYRIGHT NOTICE
-.LP
-This man page is Copyright (c) 1998-2006 Glenn Randers-Pehrson. See png.h
-for conditions of use and distribution.
-.LP
-The PNG Specification (Second Edition) is
-Copyright (c) 2003 W3C. (MIT, ERCIM, Keio), All Rights Reserved.
-.LP
-The PNG-1.2 specification is copyright (c) 1999 Glenn Randers-Pehrson.
-See the specification for conditions of use and distribution.
-.LP
-The PNG-1.0 specification is copyright (c) 1996 Massachusetts Institute of
-Technology. See the specification for conditions of use and distribution.
-.LP
-.\" end of man page
-
diff --git a/Build/source/libs/libpng/png.c b/Build/source/libs/libpng/png.c
deleted file mode 100644
index 63ae86e3c42..00000000000
--- a/Build/source/libs/libpng/png.c
+++ /dev/null
@@ -1,798 +0,0 @@
-
-/* png.c - location for general purpose libpng functions
- *
- * Last changed in libpng 1.2.21 October 4, 2007
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2007 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-#define PNG_INTERNAL
-#define PNG_NO_EXTERN
-#include "png.h"
-
-/* Generate a compiler error if there is an old png.h in the search path. */
-typedef version_1_2_29 Your_png_h_is_not_version_1_2_29;
-
-/* Version information for C files. This had better match the version
- * string defined in png.h. */
-
-#ifdef PNG_USE_GLOBAL_ARRAYS
-/* png_libpng_ver was changed to a function in version 1.0.5c */
-PNG_CONST char png_libpng_ver[18] = PNG_LIBPNG_VER_STRING;
-
-#ifdef PNG_READ_SUPPORTED
-
-/* png_sig was changed to a function in version 1.0.5c */
-/* Place to hold the signature string for a PNG file. */
-PNG_CONST png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
-#endif /* PNG_READ_SUPPORTED */
-
-/* Invoke global declarations for constant strings for known chunk types */
-PNG_IHDR;
-PNG_IDAT;
-PNG_IEND;
-PNG_PLTE;
-PNG_bKGD;
-PNG_cHRM;
-PNG_gAMA;
-PNG_hIST;
-PNG_iCCP;
-PNG_iTXt;
-PNG_oFFs;
-PNG_pCAL;
-PNG_sCAL;
-PNG_pHYs;
-PNG_sBIT;
-PNG_sPLT;
-PNG_sRGB;
-PNG_tEXt;
-PNG_tIME;
-PNG_tRNS;
-PNG_zTXt;
-
-#ifdef PNG_READ_SUPPORTED
-/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-/* start of interlace block */
-PNG_CONST int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
-
-/* offset to next interlace block */
-PNG_CONST int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
-
-/* start of interlace block in the y direction */
-PNG_CONST int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
-
-/* offset to next interlace block in the y direction */
-PNG_CONST int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
-
-/* Height of interlace block. This is not currently used - if you need
- * it, uncomment it here and in png.h
-PNG_CONST int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
-*/
-
-/* Mask to determine which pixels are valid in a pass */
-PNG_CONST int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
-
-/* Mask to determine which pixels to overwrite while displaying */
-PNG_CONST int FARDATA png_pass_dsp_mask[]
- = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
-
-#endif /* PNG_READ_SUPPORTED */
-#endif /* PNG_USE_GLOBAL_ARRAYS */
-
-/* Tells libpng that we have already handled the first "num_bytes" bytes
- * of the PNG file signature. If the PNG data is embedded into another
- * stream we can set num_bytes = 8 so that libpng will not attempt to read
- * or write any of the magic bytes before it starts on the IHDR.
- */
-
-#ifdef PNG_READ_SUPPORTED
-void PNGAPI
-png_set_sig_bytes(png_structp png_ptr, int num_bytes)
-{
- if(png_ptr == NULL) return;
- png_debug(1, "in png_set_sig_bytes\n");
- if (num_bytes > 8)
- png_error(png_ptr, "Too many bytes for PNG signature.");
-
- png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes);
-}
-
-/* Checks whether the supplied bytes match the PNG signature. We allow
- * checking less than the full 8-byte signature so that those apps that
- * already read the first few bytes of a file to determine the file type
- * can simply check the remaining bytes for extra assurance. Returns
- * an integer less than, equal to, or greater than zero if sig is found,
- * respectively, to be less than, to match, or be greater than the correct
- * PNG signature (this is the same behaviour as strcmp, memcmp, etc).
- */
-int PNGAPI
-png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check)
-{
- png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
- if (num_to_check > 8)
- num_to_check = 8;
- else if (num_to_check < 1)
- return (-1);
-
- if (start > 7)
- return (-1);
-
- if (start + num_to_check > 8)
- num_to_check = 8 - start;
-
- return ((int)(png_memcmp(&sig[start], &png_signature[start], num_to_check)));
-}
-
-#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
-/* (Obsolete) function to check signature bytes. It does not allow one
- * to check a partial signature. This function might be removed in the
- * future - use png_sig_cmp(). Returns true (nonzero) if the file is PNG.
- */
-int PNGAPI
-png_check_sig(png_bytep sig, int num)
-{
- return ((int)!png_sig_cmp(sig, (png_size_t)0, (png_size_t)num));
-}
-#endif
-#endif /* PNG_READ_SUPPORTED */
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-/* Function to allocate memory for zlib and clear it to 0. */
-#ifdef PNG_1_0_X
-voidpf PNGAPI
-#else
-voidpf /* private */
-#endif
-png_zalloc(voidpf png_ptr, uInt items, uInt size)
-{
- png_voidp ptr;
- png_structp p=(png_structp)png_ptr;
- png_uint_32 save_flags=p->flags;
- png_uint_32 num_bytes;
-
- if(png_ptr == NULL) return (NULL);
- if (items > PNG_UINT_32_MAX/size)
- {
- png_warning (p, "Potential overflow in png_zalloc()");
- return (NULL);
- }
- num_bytes = (png_uint_32)items * size;
-
- p->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK;
- ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes);
- p->flags=save_flags;
-
-#if defined(PNG_1_0_X) && !defined(PNG_NO_ZALLOC_ZERO)
- if (ptr == NULL)
- return ((voidpf)ptr);
-
- if (num_bytes > (png_uint_32)0x8000L)
- {
- png_memset(ptr, 0, (png_size_t)0x8000L);
- png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0,
- (png_size_t)(num_bytes - (png_uint_32)0x8000L));
- }
- else
- {
- png_memset(ptr, 0, (png_size_t)num_bytes);
- }
-#endif
- return ((voidpf)ptr);
-}
-
-/* function to free memory for zlib */
-#ifdef PNG_1_0_X
-void PNGAPI
-#else
-void /* private */
-#endif
-png_zfree(voidpf png_ptr, voidpf ptr)
-{
- png_free((png_structp)png_ptr, (png_voidp)ptr);
-}
-
-/* Reset the CRC variable to 32 bits of 1's. Care must be taken
- * in case CRC is > 32 bits to leave the top bits 0.
- */
-void /* PRIVATE */
-png_reset_crc(png_structp png_ptr)
-{
- png_ptr->crc = crc32(0, Z_NULL, 0);
-}
-
-/* Calculate the CRC over a section of data. We can only pass as
- * much data to this routine as the largest single buffer size. We
- * also check that this data will actually be used before going to the
- * trouble of calculating it.
- */
-void /* PRIVATE */
-png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length)
-{
- int need_crc = 1;
-
- if (png_ptr->chunk_name[0] & 0x20) /* ancillary */
- {
- if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
- (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
- need_crc = 0;
- }
- else /* critical */
- {
- if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE)
- need_crc = 0;
- }
-
- if (need_crc)
- png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length);
-}
-
-/* Allocate the memory for an info_struct for the application. We don't
- * really need the png_ptr, but it could potentially be useful in the
- * future. This should be used in favour of malloc(png_sizeof(png_info))
- * and png_info_init() so that applications that want to use a shared
- * libpng don't have to be recompiled if png_info changes size.
- */
-png_infop PNGAPI
-png_create_info_struct(png_structp png_ptr)
-{
- png_infop info_ptr;
-
- png_debug(1, "in png_create_info_struct\n");
- if(png_ptr == NULL) return (NULL);
-#ifdef PNG_USER_MEM_SUPPORTED
- info_ptr = (png_infop)png_create_struct_2(PNG_STRUCT_INFO,
- png_ptr->malloc_fn, png_ptr->mem_ptr);
-#else
- info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO);
-#endif
- if (info_ptr != NULL)
- png_info_init_3(&info_ptr, png_sizeof(png_info));
-
- return (info_ptr);
-}
-
-/* This function frees the memory associated with a single info struct.
- * Normally, one would use either png_destroy_read_struct() or
- * png_destroy_write_struct() to free an info struct, but this may be
- * useful for some applications.
- */
-void PNGAPI
-png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr)
-{
- png_infop info_ptr = NULL;
- if(png_ptr == NULL) return;
-
- png_debug(1, "in png_destroy_info_struct\n");
- if (info_ptr_ptr != NULL)
- info_ptr = *info_ptr_ptr;
-
- if (info_ptr != NULL)
- {
- png_info_destroy(png_ptr, info_ptr);
-
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)info_ptr, png_ptr->free_fn,
- png_ptr->mem_ptr);
-#else
- png_destroy_struct((png_voidp)info_ptr);
-#endif
- *info_ptr_ptr = NULL;
- }
-}
-
-/* Initialize the info structure. This is now an internal function (0.89)
- * and applications using it are urged to use png_create_info_struct()
- * instead.
- */
-#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
-#undef png_info_init
-void PNGAPI
-png_info_init(png_infop info_ptr)
-{
- /* We only come here via pre-1.0.12-compiled applications */
- png_info_init_3(&info_ptr, 0);
-}
-#endif
-
-void PNGAPI
-png_info_init_3(png_infopp ptr_ptr, png_size_t png_info_struct_size)
-{
- png_infop info_ptr = *ptr_ptr;
-
- if(info_ptr == NULL) return;
-
- png_debug(1, "in png_info_init_3\n");
-
- if(png_sizeof(png_info) > png_info_struct_size)
- {
- png_destroy_struct(info_ptr);
- info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO);
- *ptr_ptr = info_ptr;
- }
-
- /* set everything to 0 */
- png_memset(info_ptr, 0, png_sizeof (png_info));
-}
-
-#ifdef PNG_FREE_ME_SUPPORTED
-void PNGAPI
-png_data_freer(png_structp png_ptr, png_infop info_ptr,
- int freer, png_uint_32 mask)
-{
- png_debug(1, "in png_data_freer\n");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
- if(freer == PNG_DESTROY_WILL_FREE_DATA)
- info_ptr->free_me |= mask;
- else if(freer == PNG_USER_WILL_FREE_DATA)
- info_ptr->free_me &= ~mask;
- else
- png_warning(png_ptr,
- "Unknown freer parameter in png_data_freer.");
-}
-#endif
-
-void PNGAPI
-png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask,
- int num)
-{
- png_debug(1, "in png_free_data\n");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
-#if defined(PNG_TEXT_SUPPORTED)
-/* free text item num or (if num == -1) all text items */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_TEXT) & info_ptr->free_me)
-#else
-if (mask & PNG_FREE_TEXT)
-#endif
-{
- if (num != -1)
- {
- if (info_ptr->text && info_ptr->text[num].key)
- {
- png_free(png_ptr, info_ptr->text[num].key);
- info_ptr->text[num].key = NULL;
- }
- }
- else
- {
- int i;
- for (i = 0; i < info_ptr->num_text; i++)
- png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i);
- png_free(png_ptr, info_ptr->text);
- info_ptr->text = NULL;
- info_ptr->num_text=0;
- }
-}
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED)
-/* free any tRNS entry */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_TRNS) & info_ptr->free_me)
-#else
-if ((mask & PNG_FREE_TRNS) && (png_ptr->flags & PNG_FLAG_FREE_TRNS))
-#endif
-{
- png_free(png_ptr, info_ptr->trans);
- info_ptr->valid &= ~PNG_INFO_tRNS;
-#ifndef PNG_FREE_ME_SUPPORTED
- png_ptr->flags &= ~PNG_FLAG_FREE_TRNS;
-#endif
- info_ptr->trans = NULL;
-}
-#endif
-
-#if defined(PNG_sCAL_SUPPORTED)
-/* free any sCAL entry */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_SCAL) & info_ptr->free_me)
-#else
-if (mask & PNG_FREE_SCAL)
-#endif
-{
-#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
- png_free(png_ptr, info_ptr->scal_s_width);
- png_free(png_ptr, info_ptr->scal_s_height);
- info_ptr->scal_s_width = NULL;
- info_ptr->scal_s_height = NULL;
-#endif
- info_ptr->valid &= ~PNG_INFO_sCAL;
-}
-#endif
-
-#if defined(PNG_pCAL_SUPPORTED)
-/* free any pCAL entry */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_PCAL) & info_ptr->free_me)
-#else
-if (mask & PNG_FREE_PCAL)
-#endif
-{
- png_free(png_ptr, info_ptr->pcal_purpose);
- png_free(png_ptr, info_ptr->pcal_units);
- info_ptr->pcal_purpose = NULL;
- info_ptr->pcal_units = NULL;
- if (info_ptr->pcal_params != NULL)
- {
- int i;
- for (i = 0; i < (int)info_ptr->pcal_nparams; i++)
- {
- png_free(png_ptr, info_ptr->pcal_params[i]);
- info_ptr->pcal_params[i]=NULL;
- }
- png_free(png_ptr, info_ptr->pcal_params);
- info_ptr->pcal_params = NULL;
- }
- info_ptr->valid &= ~PNG_INFO_pCAL;
-}
-#endif
-
-#if defined(PNG_iCCP_SUPPORTED)
-/* free any iCCP entry */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_ICCP) & info_ptr->free_me)
-#else
-if (mask & PNG_FREE_ICCP)
-#endif
-{
- png_free(png_ptr, info_ptr->iccp_name);
- png_free(png_ptr, info_ptr->iccp_profile);
- info_ptr->iccp_name = NULL;
- info_ptr->iccp_profile = NULL;
- info_ptr->valid &= ~PNG_INFO_iCCP;
-}
-#endif
-
-#if defined(PNG_sPLT_SUPPORTED)
-/* free a given sPLT entry, or (if num == -1) all sPLT entries */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_SPLT) & info_ptr->free_me)
-#else
-if (mask & PNG_FREE_SPLT)
-#endif
-{
- if (num != -1)
- {
- if(info_ptr->splt_palettes)
- {
- png_free(png_ptr, info_ptr->splt_palettes[num].name);
- png_free(png_ptr, info_ptr->splt_palettes[num].entries);
- info_ptr->splt_palettes[num].name = NULL;
- info_ptr->splt_palettes[num].entries = NULL;
- }
- }
- else
- {
- if(info_ptr->splt_palettes_num)
- {
- int i;
- for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
- png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, i);
-
- png_free(png_ptr, info_ptr->splt_palettes);
- info_ptr->splt_palettes = NULL;
- info_ptr->splt_palettes_num = 0;
- }
- info_ptr->valid &= ~PNG_INFO_sPLT;
- }
-}
-#endif
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- if(png_ptr->unknown_chunk.data)
- {
- png_free(png_ptr, png_ptr->unknown_chunk.data);
- png_ptr->unknown_chunk.data = NULL;
- }
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_UNKN) & info_ptr->free_me)
-#else
-if (mask & PNG_FREE_UNKN)
-#endif
-{
- if (num != -1)
- {
- if(info_ptr->unknown_chunks)
- {
- png_free(png_ptr, info_ptr->unknown_chunks[num].data);
- info_ptr->unknown_chunks[num].data = NULL;
- }
- }
- else
- {
- int i;
-
- if(info_ptr->unknown_chunks_num)
- {
- for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++)
- png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, i);
-
- png_free(png_ptr, info_ptr->unknown_chunks);
- info_ptr->unknown_chunks = NULL;
- info_ptr->unknown_chunks_num = 0;
- }
- }
-}
-#endif
-
-#if defined(PNG_hIST_SUPPORTED)
-/* free any hIST entry */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_HIST) & info_ptr->free_me)
-#else
-if ((mask & PNG_FREE_HIST) && (png_ptr->flags & PNG_FLAG_FREE_HIST))
-#endif
-{
- png_free(png_ptr, info_ptr->hist);
- info_ptr->hist = NULL;
- info_ptr->valid &= ~PNG_INFO_hIST;
-#ifndef PNG_FREE_ME_SUPPORTED
- png_ptr->flags &= ~PNG_FLAG_FREE_HIST;
-#endif
-}
-#endif
-
-/* free any PLTE entry that was internally allocated */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_PLTE) & info_ptr->free_me)
-#else
-if ((mask & PNG_FREE_PLTE) && (png_ptr->flags & PNG_FLAG_FREE_PLTE))
-#endif
-{
- png_zfree(png_ptr, info_ptr->palette);
- info_ptr->palette = NULL;
- info_ptr->valid &= ~PNG_INFO_PLTE;
-#ifndef PNG_FREE_ME_SUPPORTED
- png_ptr->flags &= ~PNG_FLAG_FREE_PLTE;
-#endif
- info_ptr->num_palette = 0;
-}
-
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-/* free any image bits attached to the info structure */
-#ifdef PNG_FREE_ME_SUPPORTED
-if ((mask & PNG_FREE_ROWS) & info_ptr->free_me)
-#else
-if (mask & PNG_FREE_ROWS)
-#endif
-{
- if(info_ptr->row_pointers)
- {
- int row;
- for (row = 0; row < (int)info_ptr->height; row++)
- {
- png_free(png_ptr, info_ptr->row_pointers[row]);
- info_ptr->row_pointers[row]=NULL;
- }
- png_free(png_ptr, info_ptr->row_pointers);
- info_ptr->row_pointers=NULL;
- }
- info_ptr->valid &= ~PNG_INFO_IDAT;
-}
-#endif
-
-#ifdef PNG_FREE_ME_SUPPORTED
- if(num == -1)
- info_ptr->free_me &= ~mask;
- else
- info_ptr->free_me &= ~(mask & ~PNG_FREE_MUL);
-#endif
-}
-
-/* This is an internal routine to free any memory that the info struct is
- * pointing to before re-using it or freeing the struct itself. Recall
- * that png_free() checks for NULL pointers for us.
- */
-void /* PRIVATE */
-png_info_destroy(png_structp png_ptr, png_infop info_ptr)
-{
- png_debug(1, "in png_info_destroy\n");
-
- png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- if (png_ptr->num_chunk_list)
- {
- png_free(png_ptr, png_ptr->chunk_list);
- png_ptr->chunk_list=NULL;
- png_ptr->num_chunk_list=0;
- }
-#endif
-
- png_info_init_3(&info_ptr, png_sizeof(png_info));
-}
-#endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
-
-/* This function returns a pointer to the io_ptr associated with the user
- * functions. The application should free any memory associated with this
- * pointer before png_write_destroy() or png_read_destroy() are called.
- */
-png_voidp PNGAPI
-png_get_io_ptr(png_structp png_ptr)
-{
- if(png_ptr == NULL) return (NULL);
- return (png_ptr->io_ptr);
-}
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-#if !defined(PNG_NO_STDIO)
-/* Initialize the default input/output functions for the PNG file. If you
- * use your own read or write routines, you can call either png_set_read_fn()
- * or png_set_write_fn() instead of png_init_io(). If you have defined
- * PNG_NO_STDIO, you must use a function of your own because "FILE *" isn't
- * necessarily available.
- */
-void PNGAPI
-png_init_io(png_structp png_ptr, png_FILE_p fp)
-{
- png_debug(1, "in png_init_io\n");
- if(png_ptr == NULL) return;
- png_ptr->io_ptr = (png_voidp)fp;
-}
-#endif
-
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
-/* Convert the supplied time into an RFC 1123 string suitable for use in
- * a "Creation Time" or other text-based time string.
- */
-png_charp PNGAPI
-png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime)
-{
- static PNG_CONST char short_months[12][4] =
- {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-
- if(png_ptr == NULL) return (NULL);
- if (png_ptr->time_buffer == NULL)
- {
- png_ptr->time_buffer = (png_charp)png_malloc(png_ptr, (png_uint_32)(29*
- png_sizeof(char)));
- }
-
-#if defined(_WIN32_WCE)
- {
- wchar_t time_buf[29];
- wsprintf(time_buf, TEXT("%d %S %d %02d:%02d:%02d +0000"),
- ptime->day % 32, short_months[(ptime->month - 1) % 12],
- ptime->year, ptime->hour % 24, ptime->minute % 60,
- ptime->second % 61);
- WideCharToMultiByte(CP_ACP, 0, time_buf, -1, png_ptr->time_buffer, 29,
- NULL, NULL);
- }
-#else
-#ifdef USE_FAR_KEYWORD
- {
- char near_time_buf[29];
- png_snprintf6(near_time_buf,29,"%d %s %d %02d:%02d:%02d +0000",
- ptime->day % 32, short_months[(ptime->month - 1) % 12],
- ptime->year, ptime->hour % 24, ptime->minute % 60,
- ptime->second % 61);
- png_memcpy(png_ptr->time_buffer, near_time_buf,
- 29*png_sizeof(char));
- }
-#else
- png_snprintf6(png_ptr->time_buffer,29,"%d %s %d %02d:%02d:%02d +0000",
- ptime->day % 32, short_months[(ptime->month - 1) % 12],
- ptime->year, ptime->hour % 24, ptime->minute % 60,
- ptime->second % 61);
-#endif
-#endif /* _WIN32_WCE */
- return ((png_charp)png_ptr->time_buffer);
-}
-#endif /* PNG_TIME_RFC1123_SUPPORTED */
-
-#endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
-
-png_charp PNGAPI
-png_get_copyright(png_structp png_ptr)
-{
- png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
- return ((png_charp) "\n libpng version 1.2.29 - May 8, 2008\n\
- Copyright (c) 1998-2008 Glenn Randers-Pehrson\n\
- Copyright (c) 1996-1997 Andreas Dilger\n\
- Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n");
-}
-
-/* The following return the library version as a short string in the
- * format 1.0.0 through 99.99.99zz. To get the version of *.h files
- * used with your application, print out PNG_LIBPNG_VER_STRING, which
- * is defined in png.h.
- * Note: now there is no difference between png_get_libpng_ver() and
- * png_get_header_ver(). Due to the version_nn_nn_nn typedef guard,
- * it is guaranteed that png.c uses the correct version of png.h.
- */
-png_charp PNGAPI
-png_get_libpng_ver(png_structp png_ptr)
-{
- /* Version of *.c files used when building libpng */
- png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
- return ((png_charp) PNG_LIBPNG_VER_STRING);
-}
-
-png_charp PNGAPI
-png_get_header_ver(png_structp png_ptr)
-{
- /* Version of *.h files used when building libpng */
- png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
- return ((png_charp) PNG_LIBPNG_VER_STRING);
-}
-
-png_charp PNGAPI
-png_get_header_version(png_structp png_ptr)
-{
- /* Returns longer string containing both version and date */
- png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
- return ((png_charp) PNG_HEADER_VERSION_STRING
-#ifndef PNG_READ_SUPPORTED
- " (NO READ SUPPORT)"
-#endif
- "\n");
-}
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-int PNGAPI
-png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name)
-{
- /* check chunk_name and return "keep" value if it's on the list, else 0 */
- int i;
- png_bytep p;
- if(png_ptr == NULL || chunk_name == NULL || png_ptr->num_chunk_list<=0)
- return 0;
- p=png_ptr->chunk_list+png_ptr->num_chunk_list*5-5;
- for (i = png_ptr->num_chunk_list; i; i--, p-=5)
- if (!png_memcmp(chunk_name, p, 4))
- return ((int)*(p+4));
- return 0;
-}
-#endif
-
-/* This function, added to libpng-1.0.6g, is untested. */
-int PNGAPI
-png_reset_zstream(png_structp png_ptr)
-{
- if (png_ptr == NULL) return Z_STREAM_ERROR;
- return (inflateReset(&png_ptr->zstream));
-}
-#endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
-
-/* This function was added to libpng-1.0.7 */
-png_uint_32 PNGAPI
-png_access_version_number(void)
-{
- /* Version of *.c files used when building libpng */
- return((png_uint_32) PNG_LIBPNG_VER);
-}
-
-
-#if defined(PNG_READ_SUPPORTED) && defined(PNG_ASSEMBLER_CODE_SUPPORTED)
-#if !defined(PNG_1_0_X)
-/* this function was added to libpng 1.2.0 */
-int PNGAPI
-png_mmx_support(void)
-{
- /* obsolete, to be removed from libpng-1.4.0 */
- return -1;
-}
-#endif /* PNG_1_0_X */
-#endif /* PNG_READ_SUPPORTED && PNG_ASSEMBLER_CODE_SUPPORTED */
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-#ifdef PNG_SIZE_T
-/* Added at libpng version 1.2.6 */
- PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size));
-png_size_t PNGAPI
-png_convert_size(size_t size)
-{
- if (size > (png_size_t)-1)
- PNG_ABORT(); /* We haven't got access to png_ptr, so no png_error() */
- return ((png_size_t)size);
-}
-#endif /* PNG_SIZE_T */
-#endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
diff --git a/Build/source/libs/libpng/png.h b/Build/source/libs/libpng/png.h
deleted file mode 100644
index 2e194b7a3d9..00000000000
--- a/Build/source/libs/libpng/png.h
+++ /dev/null
@@ -1,3569 +0,0 @@
-/* png.h - header file for PNG reference library
- *
- * libpng version 1.2.29 - May 8, 2008
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Authors and maintainers:
- * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
- * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
- * libpng versions 0.97, January 1998, through 1.2.29 - May 8, 2008: Glenn
- * See also "Contributing Authors", below.
- *
- * Note about libpng version numbers:
- *
- * Due to various miscommunications, unforeseen code incompatibilities
- * and occasional factors outside the authors' control, version numbering
- * on the library has not always been consistent and straightforward.
- * The following table summarizes matters since version 0.89c, which was
- * the first widely used release:
- *
- * source png.h png.h shared-lib
- * version string int version
- * ------- ------ ----- ----------
- * 0.89c "1.0 beta 3" 0.89 89 1.0.89
- * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90]
- * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95]
- * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96]
- * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97]
- * 0.97c 0.97 97 2.0.97
- * 0.98 0.98 98 2.0.98
- * 0.99 0.99 98 2.0.99
- * 0.99a-m 0.99 99 2.0.99
- * 1.00 1.00 100 2.1.0 [100 should be 10000]
- * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000]
- * 1.0.1 png.h string is 10001 2.1.0
- * 1.0.1a-e identical to the 10002 from here on, the shared library
- * 1.0.2 source version) 10002 is 2.V where V is the source code
- * 1.0.2a-b 10003 version, except as noted.
- * 1.0.3 10003
- * 1.0.3a-d 10004
- * 1.0.4 10004
- * 1.0.4a-f 10005
- * 1.0.5 (+ 2 patches) 10005
- * 1.0.5a-d 10006
- * 1.0.5e-r 10100 (not source compatible)
- * 1.0.5s-v 10006 (not binary compatible)
- * 1.0.6 (+ 3 patches) 10006 (still binary incompatible)
- * 1.0.6d-f 10007 (still binary incompatible)
- * 1.0.6g 10007
- * 1.0.6h 10007 10.6h (testing xy.z so-numbering)
- * 1.0.6i 10007 10.6i
- * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0)
- * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible)
- * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
- * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
- * 1.0.7 1 10007 (still compatible)
- * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
- * 1.0.8rc1 1 10008 2.1.0.8rc1
- * 1.0.8 1 10008 2.1.0.8
- * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
- * 1.0.9rc1 1 10009 2.1.0.9rc1
- * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
- * 1.0.9rc2 1 10009 2.1.0.9rc2
- * 1.0.9 1 10009 2.1.0.9
- * 1.0.10beta1 1 10010 2.1.0.10beta1
- * 1.0.10rc1 1 10010 2.1.0.10rc1
- * 1.0.10 1 10010 2.1.0.10
- * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
- * 1.0.11rc1 1 10011 2.1.0.11rc1
- * 1.0.11 1 10011 2.1.0.11
- * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2
- * 1.0.12rc1 2 10012 2.1.0.12rc1
- * 1.0.12 2 10012 2.1.0.12
- * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned)
- * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2
- * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5
- * 1.2.0rc1 3 10200 3.1.2.0rc1
- * 1.2.0 3 10200 3.1.2.0
- * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4
- * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2
- * 1.2.1 3 10201 3.1.2.1
- * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6
- * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1
- * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1
- * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1
- * 1.0.13 10 10013 10.so.0.1.0.13
- * 1.2.2 12 10202 12.so.0.1.2.2
- * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6
- * 1.2.3 12 10203 12.so.0.1.2.3
- * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3
- * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1
- * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1
- * 1.0.14 10 10014 10.so.0.1.0.14
- * 1.2.4 13 10204 12.so.0.1.2.4
- * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2
- * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3
- * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3
- * 1.0.15 10 10015 10.so.0.1.0.15
- * 1.2.5 13 10205 12.so.0.1.2.5
- * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4
- * 1.0.16 10 10016 10.so.0.1.0.16
- * 1.2.6 13 10206 12.so.0.1.2.6
- * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2
- * 1.0.17rc1 10 10017 10.so.0.1.0.17rc1
- * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1
- * 1.0.17 10 10017 10.so.0.1.0.17
- * 1.2.7 13 10207 12.so.0.1.2.7
- * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5
- * 1.0.18rc1-5 10 10018 10.so.0.1.0.18rc1-5
- * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5
- * 1.0.18 10 10018 10.so.0.1.0.18
- * 1.2.8 13 10208 12.so.0.1.2.8
- * 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3
- * 1.2.9beta4-11 13 10209 12.so.0.9[.0]
- * 1.2.9rc1 13 10209 12.so.0.9[.0]
- * 1.2.9 13 10209 12.so.0.9[.0]
- * 1.2.10beta1-8 13 10210 12.so.0.10[.0]
- * 1.2.10rc1-3 13 10210 12.so.0.10[.0]
- * 1.2.10 13 10210 12.so.0.10[.0]
- * 1.2.11beta1-4 13 10211 12.so.0.11[.0]
- * 1.0.19rc1-5 10 10019 10.so.0.19[.0]
- * 1.2.11rc1-5 13 10211 12.so.0.11[.0]
- * 1.0.19 10 10019 10.so.0.19[.0]
- * 1.2.11 13 10211 12.so.0.11[.0]
- * 1.0.20 10 10020 10.so.0.20[.0]
- * 1.2.12 13 10212 12.so.0.12[.0]
- * 1.2.13beta1 13 10213 12.so.0.13[.0]
- * 1.0.21 10 10021 10.so.0.21[.0]
- * 1.2.13 13 10213 12.so.0.13[.0]
- * 1.2.14beta1-2 13 10214 12.so.0.14[.0]
- * 1.0.22rc1 10 10022 10.so.0.22[.0]
- * 1.2.14rc1 13 10214 12.so.0.14[.0]
- * 1.0.22 10 10022 10.so.0.22[.0]
- * 1.2.14 13 10214 12.so.0.14[.0]
- * 1.2.15beta1-6 13 10215 12.so.0.15[.0]
- * 1.0.23rc1-5 10 10023 10.so.0.23[.0]
- * 1.2.15rc1-5 13 10215 12.so.0.15[.0]
- * 1.0.23 10 10023 10.so.0.23[.0]
- * 1.2.15 13 10215 12.so.0.15[.0]
- * 1.2.16beta1-2 13 10216 12.so.0.16[.0]
- * 1.2.16rc1 13 10216 12.so.0.16[.0]
- * 1.0.24 10 10024 10.so.0.24[.0]
- * 1.2.16 13 10216 12.so.0.16[.0]
- * 1.2.17beta1-2 13 10217 12.so.0.17[.0]
- * 1.0.25rc1 10 10025 10.so.0.25[.0]
- * 1.2.17rc1-3 13 10217 12.so.0.17[.0]
- * 1.0.25 10 10025 10.so.0.25[.0]
- * 1.2.17 13 10217 12.so.0.17[.0]
- * 1.0.26 10 10026 10.so.0.26[.0]
- * 1.2.18 13 10218 12.so.0.18[.0]
- * 1.2.19beta1-31 13 10219 12.so.0.19[.0]
- * 1.0.27rc1-6 10 10027 10.so.0.27[.0]
- * 1.2.19rc1-6 13 10219 12.so.0.19[.0]
- * 1.0.27 10 10027 10.so.0.27[.0]
- * 1.2.19 13 10219 12.so.0.19[.0]
- * 1.2.20beta01-04 13 10220 12.so.0.20[.0]
- * 1.0.28rc1-6 10 10028 10.so.0.28[.0]
- * 1.2.20rc1-6 13 10220 12.so.0.20[.0]
- * 1.0.28 10 10028 10.so.0.28[.0]
- * 1.2.20 13 10220 12.so.0.20[.0]
- * 1.2.21beta1-2 13 10221 12.so.0.21[.0]
- * 1.2.21rc1-3 13 10221 12.so.0.21[.0]
- * 1.0.29 10 10029 10.so.0.29[.0]
- * 1.2.21 13 10221 12.so.0.21[.0]
- * 1.2.22beta1-4 13 10222 12.so.0.22[.0]
- * 1.0.30rc1 10 10030 10.so.0.30[.0]
- * 1.2.22rc1 13 10222 12.so.0.22[.0]
- * 1.0.30 10 10030 10.so.0.30[.0]
- * 1.2.22 13 10222 12.so.0.22[.0]
- * 1.2.23beta01-05 13 10223 12.so.0.23[.0]
- * 1.2.23rc01 13 10223 12.so.0.23[.0]
- * 1.2.23 13 10223 12.so.0.23[.0]
- * 1.2.24beta01-02 13 10224 12.so.0.24[.0]
- * 1.2.24rc01 13 10224 12.so.0.24[.0]
- * 1.2.24 13 10224 12.so.0.24[.0]
- * 1.2.25beta01-06 13 10225 12.so.0.25[.0]
- * 1.2.25rc01-02 13 10225 12.so.0.25[.0]
- * 1.0.31 10 10031 10.so.0.31[.0]
- * 1.2.25 13 10225 12.so.0.25[.0]
- * 1.2.26beta01-06 13 10226 12.so.0.26[.0]
- * 1.2.26rc01 13 10226 12.so.0.26[.0]
- * 1.2.26 13 10226 12.so.0.26[.0]
- * 1.0.32 10 10032 10.so.0.32[.0]
- * 1.2.27beta01-06 13 10227 12.so.0.27[.0]
- * 1.2.27rc01 13 10227 12.so.0.27[.0]
- * 1.0.33 10 10033 10.so.0.33[.0]
- * 1.2.27 13 10227 12.so.0.27[.0]
- * 1.0.34 10 10034 10.so.0.34[.0]
- * 1.2.28 13 10228 12.so.0.28[.0]
- * 1.2.29beta01-03 13 10229 12.so.0.29[.0]
- * 1.2.29rc01 13 10229 12.so.0.29[.0]
- * 1.0.35 10 10035 10.so.0.35[.0]
- * 1.2.29 13 10229 12.so.0.29[.0]
- *
- * Henceforth the source version will match the shared-library major
- * and minor numbers; the shared-library major version number will be
- * used for changes in backward compatibility, as it is intended. The
- * PNG_LIBPNG_VER macro, which is not used within libpng but is available
- * for applications, is an unsigned integer of the form xyyzz corresponding
- * to the source version x.y.z (leading zeros in y and z). Beta versions
- * were given the previous public release number plus a letter, until
- * version 1.0.6j; from then on they were given the upcoming public
- * release number plus "betaNN" or "rcNN".
- *
- * Binary incompatibility exists only when applications make direct access
- * to the info_ptr or png_ptr members through png.h, and the compiled
- * application is loaded with a different version of the library.
- *
- * DLLNUM will change each time there are forward or backward changes
- * in binary compatibility (e.g., when a new feature is added).
- *
- * See libpng.txt or libpng.3 for more information. The PNG specification
- * is available as a W3C Recommendation and as an ISO Specification,
- * <http://www.w3.org/TR/2003/REC-PNG-20031110/
- */
-
-/*
- * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
- *
- * If you modify libpng you may insert additional notices immediately following
- * this sentence.
- *
- * libpng versions 1.2.6, August 15, 2004, through 1.2.29, May 8, 2008, are
- * Copyright (c) 2004, 2006-2008 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-1.2.5
- * with the following individual added to the list of Contributing Authors:
- *
- * Cosmin Truta
- *
- * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
- * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-1.0.6
- * with the following individuals added to the list of Contributing Authors:
- *
- * Simon-Pierre Cadieux
- * Eric S. Raymond
- * Gilles Vollant
- *
- * and with the following additions to the disclaimer:
- *
- * There is no warranty against interference with your enjoyment of the
- * library or against infringement. There is no warranty that our
- * efforts or the library will fulfill any of your particular purposes
- * or needs. This library is provided with all faults, and the entire
- * risk of satisfactory quality, performance, accuracy, and effort is with
- * the user.
- *
- * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
- * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-0.96,
- * with the following individuals added to the list of Contributing Authors:
- *
- * Tom Lane
- * Glenn Randers-Pehrson
- * Willem van Schaik
- *
- * libpng versions 0.89, June 1996, through 0.96, May 1997, are
- * Copyright (c) 1996, 1997 Andreas Dilger
- * Distributed according to the same disclaimer and license as libpng-0.88,
- * with the following individuals added to the list of Contributing Authors:
- *
- * John Bowler
- * Kevin Bracey
- * Sam Bushell
- * Magnus Holmgren
- * Greg Roelofs
- * Tom Tanner
- *
- * libpng versions 0.5, May 1995, through 0.88, January 1996, are
- * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
- *
- * For the purposes of this copyright and license, "Contributing Authors"
- * is defined as the following set of individuals:
- *
- * Andreas Dilger
- * Dave Martindale
- * Guy Eric Schalnat
- * Paul Schmidt
- * Tim Wegner
- *
- * The PNG Reference Library is supplied "AS IS". The Contributing Authors
- * and Group 42, Inc. disclaim all warranties, expressed or implied,
- * including, without limitation, the warranties of merchantability and of
- * fitness for any purpose. The Contributing Authors and Group 42, Inc.
- * assume no liability for direct, indirect, incidental, special, exemplary,
- * or consequential damages, which may result from the use of the PNG
- * Reference Library, even if advised of the possibility of such damage.
- *
- * Permission is hereby granted to use, copy, modify, and distribute this
- * source code, or portions hereof, for any purpose, without fee, subject
- * to the following restrictions:
- *
- * 1. The origin of this source code must not be misrepresented.
- *
- * 2. Altered versions must be plainly marked as such and
- * must not be misrepresented as being the original source.
- *
- * 3. This Copyright notice may not be removed or altered from
- * any source or altered source distribution.
- *
- * The Contributing Authors and Group 42, Inc. specifically permit, without
- * fee, and encourage the use of this source code as a component to
- * supporting the PNG file format in commercial products. If you use this
- * source code in a product, acknowledgment is not required but would be
- * appreciated.
- */
-
-/*
- * A "png_get_copyright" function is available, for convenient use in "about"
- * boxes and the like:
- *
- * printf("%s",png_get_copyright(NULL));
- *
- * Also, the PNG logo (in PNG format, of course) is supplied in the
- * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
- */
-
-/*
- * Libpng is OSI Certified Open Source Software. OSI Certified is a
- * certification mark of the Open Source Initiative.
- */
-
-/*
- * The contributing authors would like to thank all those who helped
- * with testing, bug fixes, and patience. This wouldn't have been
- * possible without all of you.
- *
- * Thanks to Frank J. T. Wojcik for helping with the documentation.
- */
-
-/*
- * Y2K compliance in libpng:
- * =========================
- *
- * May 8, 2008
- *
- * Since the PNG Development group is an ad-hoc body, we can't make
- * an official declaration.
- *
- * This is your unofficial assurance that libpng from version 0.71 and
- * upward through 1.2.29 are Y2K compliant. It is my belief that earlier
- * versions were also Y2K compliant.
- *
- * Libpng only has three year fields. One is a 2-byte unsigned integer
- * that will hold years up to 65535. The other two hold the date in text
- * format, and will hold years up to 9999.
- *
- * The integer is
- * "png_uint_16 year" in png_time_struct.
- *
- * The strings are
- * "png_charp time_buffer" in png_struct and
- * "near_time_buffer", which is a local character string in png.c.
- *
- * There are seven time-related functions:
- * png.c: png_convert_to_rfc_1123() in png.c
- * (formerly png_convert_to_rfc_1152() in error)
- * png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
- * png_convert_from_time_t() in pngwrite.c
- * png_get_tIME() in pngget.c
- * png_handle_tIME() in pngrutil.c, called in pngread.c
- * png_set_tIME() in pngset.c
- * png_write_tIME() in pngwutil.c, called in pngwrite.c
- *
- * All handle dates properly in a Y2K environment. The
- * png_convert_from_time_t() function calls gmtime() to convert from system
- * clock time, which returns (year - 1900), which we properly convert to
- * the full 4-digit year. There is a possibility that applications using
- * libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
- * function, or that they are incorrectly passing only a 2-digit year
- * instead of "year - 1900" into the png_convert_from_struct_tm() function,
- * but this is not under our control. The libpng documentation has always
- * stated that it works with 4-digit years, and the APIs have been
- * documented as such.
- *
- * The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
- * integer to hold the year, and can hold years as large as 65535.
- *
- * zlib, upon which libpng depends, is also Y2K compliant. It contains
- * no date-related code.
- *
- * Glenn Randers-Pehrson
- * libpng maintainer
- * PNG Development Group
- */
-
-#ifndef PNG_H
-#define PNG_H
-
-/* This is not the place to learn how to use libpng. The file libpng.txt
- * describes how to use libpng, and the file example.c summarizes it
- * with some code on which to build. This file is useful for looking
- * at the actual function definitions and structure components.
- */
-
-/* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.2.29"
-#define PNG_HEADER_VERSION_STRING \
- " libpng version 1.2.29 - May 8, 2008\n"
-
-#define PNG_LIBPNG_VER_SONUM 0
-#define PNG_LIBPNG_VER_DLLNUM 13
-
-/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
-#define PNG_LIBPNG_VER_MAJOR 1
-#define PNG_LIBPNG_VER_MINOR 2
-#define PNG_LIBPNG_VER_RELEASE 29
-/* This should match the numeric part of the final component of
- * PNG_LIBPNG_VER_STRING, omitting any leading zero: */
-
-#define PNG_LIBPNG_VER_BUILD 0
-
-/* Release Status */
-#define PNG_LIBPNG_BUILD_ALPHA 1
-#define PNG_LIBPNG_BUILD_BETA 2
-#define PNG_LIBPNG_BUILD_RC 3
-#define PNG_LIBPNG_BUILD_STABLE 4
-#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
-
-/* Release-Specific Flags */
-#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with
- PNG_LIBPNG_BUILD_STABLE only */
-#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
- PNG_LIBPNG_BUILD_SPECIAL */
-#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
- PNG_LIBPNG_BUILD_PRIVATE */
-
-#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
-
-/* Careful here. At one time, Guy wanted to use 082, but that would be octal.
- * We must not include leading zeros.
- * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
- * version 1.0.0 was mis-numbered 100 instead of 10000). From
- * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */
-#define PNG_LIBPNG_VER 10229 /* 1.2.29 */
-
-#ifndef PNG_VERSION_INFO_ONLY
-/* include the compression library's header */
-#include "zlib.h"
-#endif
-
-/* include all user configurable info, including optional assembler routines */
-#include "pngconf.h"
-
-/*
- * Added at libpng-1.2.8 */
-/* Ref MSDN: Private as priority over Special
- * VS_FF_PRIVATEBUILD File *was not* built using standard release
- * procedures. If this value is given, the StringFileInfo block must
- * contain a PrivateBuild string.
- *
- * VS_FF_SPECIALBUILD File *was* built by the original company using
- * standard release procedures but is a variation of the standard
- * file of the same version number. If this value is given, the
- * StringFileInfo block must contain a SpecialBuild string.
- */
-
-#if defined(PNG_USER_PRIVATEBUILD)
-# define PNG_LIBPNG_BUILD_TYPE \
- (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
-#else
-# if defined(PNG_LIBPNG_SPECIALBUILD)
-# define PNG_LIBPNG_BUILD_TYPE \
- (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
-# else
-# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
-# endif
-#endif
-
-#ifndef PNG_VERSION_INFO_ONLY
-
-/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* This file is arranged in several sections. The first section contains
- * structure and type definitions. The second section contains the external
- * library functions, while the third has the internal library functions,
- * which applications aren't expected to use directly.
- */
-
-#ifndef PNG_NO_TYPECAST_NULL
-#define int_p_NULL (int *)NULL
-#define png_bytep_NULL (png_bytep)NULL
-#define png_bytepp_NULL (png_bytepp)NULL
-#define png_doublep_NULL (png_doublep)NULL
-#define png_error_ptr_NULL (png_error_ptr)NULL
-#define png_flush_ptr_NULL (png_flush_ptr)NULL
-#define png_free_ptr_NULL (png_free_ptr)NULL
-#define png_infopp_NULL (png_infopp)NULL
-#define png_malloc_ptr_NULL (png_malloc_ptr)NULL
-#define png_read_status_ptr_NULL (png_read_status_ptr)NULL
-#define png_rw_ptr_NULL (png_rw_ptr)NULL
-#define png_structp_NULL (png_structp)NULL
-#define png_uint_16p_NULL (png_uint_16p)NULL
-#define png_voidp_NULL (png_voidp)NULL
-#define png_write_status_ptr_NULL (png_write_status_ptr)NULL
-#else
-#define int_p_NULL NULL
-#define png_bytep_NULL NULL
-#define png_bytepp_NULL NULL
-#define png_doublep_NULL NULL
-#define png_error_ptr_NULL NULL
-#define png_flush_ptr_NULL NULL
-#define png_free_ptr_NULL NULL
-#define png_infopp_NULL NULL
-#define png_malloc_ptr_NULL NULL
-#define png_read_status_ptr_NULL NULL
-#define png_rw_ptr_NULL NULL
-#define png_structp_NULL NULL
-#define png_uint_16p_NULL NULL
-#define png_voidp_NULL NULL
-#define png_write_status_ptr_NULL NULL
-#endif
-
-/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */
-#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
-/* Version information for C files, stored in png.c. This had better match
- * the version above.
- */
-#ifdef PNG_USE_GLOBAL_ARRAYS
-PNG_EXPORT_VAR (PNG_CONST char) png_libpng_ver[18];
- /* need room for 99.99.99beta99z */
-#else
-#define png_libpng_ver png_get_header_ver(NULL)
-#endif
-
-#ifdef PNG_USE_GLOBAL_ARRAYS
-/* This was removed in version 1.0.5c */
-/* Structures to facilitate easy interlacing. See png.c for more details */
-PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_start[7];
-PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_inc[7];
-PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_ystart[7];
-PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_yinc[7];
-PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_mask[7];
-PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_dsp_mask[7];
-/* This isn't currently used. If you need it, see png.c for more details.
-PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_height[7];
-*/
-#endif
-
-#endif /* PNG_NO_EXTERN */
-
-/* Three color definitions. The order of the red, green, and blue, (and the
- * exact size) is not important, although the size of the fields need to
- * be png_byte or png_uint_16 (as defined below).
- */
-typedef struct png_color_struct
-{
- png_byte red;
- png_byte green;
- png_byte blue;
-} png_color;
-typedef png_color FAR * png_colorp;
-typedef png_color FAR * FAR * png_colorpp;
-
-typedef struct png_color_16_struct
-{
- png_byte index; /* used for palette files */
- png_uint_16 red; /* for use in red green blue files */
- png_uint_16 green;
- png_uint_16 blue;
- png_uint_16 gray; /* for use in grayscale files */
-} png_color_16;
-typedef png_color_16 FAR * png_color_16p;
-typedef png_color_16 FAR * FAR * png_color_16pp;
-
-typedef struct png_color_8_struct
-{
- png_byte red; /* for use in red green blue files */
- png_byte green;
- png_byte blue;
- png_byte gray; /* for use in grayscale files */
- png_byte alpha; /* for alpha channel files */
-} png_color_8;
-typedef png_color_8 FAR * png_color_8p;
-typedef png_color_8 FAR * FAR * png_color_8pp;
-
-/*
- * The following two structures are used for the in-core representation
- * of sPLT chunks.
- */
-typedef struct png_sPLT_entry_struct
-{
- png_uint_16 red;
- png_uint_16 green;
- png_uint_16 blue;
- png_uint_16 alpha;
- png_uint_16 frequency;
-} png_sPLT_entry;
-typedef png_sPLT_entry FAR * png_sPLT_entryp;
-typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
-
-/* When the depth of the sPLT palette is 8 bits, the color and alpha samples
- * occupy the LSB of their respective members, and the MSB of each member
- * is zero-filled. The frequency member always occupies the full 16 bits.
- */
-
-typedef struct png_sPLT_struct
-{
- png_charp name; /* palette name */
- png_byte depth; /* depth of palette samples */
- png_sPLT_entryp entries; /* palette entries */
- png_int_32 nentries; /* number of palette entries */
-} png_sPLT_t;
-typedef png_sPLT_t FAR * png_sPLT_tp;
-typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
-
-#ifdef PNG_TEXT_SUPPORTED
-/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
- * and whether that contents is compressed or not. The "key" field
- * points to a regular zero-terminated C string. The "text", "lang", and
- * "lang_key" fields can be regular C strings, empty strings, or NULL pointers.
- * However, the * structure returned by png_get_text() will always contain
- * regular zero-terminated C strings (possibly empty), never NULL pointers,
- * so they can be safely used in printf() and other string-handling functions.
- */
-typedef struct png_text_struct
-{
- int compression; /* compression value:
- -1: tEXt, none
- 0: zTXt, deflate
- 1: iTXt, none
- 2: iTXt, deflate */
- png_charp key; /* keyword, 1-79 character description of "text" */
- png_charp text; /* comment, may be an empty string (ie "")
- or a NULL pointer */
- png_size_t text_length; /* length of the text string */
-#ifdef PNG_iTXt_SUPPORTED
- png_size_t itxt_length; /* length of the itxt string */
- png_charp lang; /* language code, 0-79 characters
- or a NULL pointer */
- png_charp lang_key; /* keyword translated UTF-8 string, 0 or more
- chars or a NULL pointer */
-#endif
-} png_text;
-typedef png_text FAR * png_textp;
-typedef png_text FAR * FAR * png_textpp;
-#endif
-
-/* Supported compression types for text in PNG files (tEXt, and zTXt).
- * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
-#define PNG_TEXT_COMPRESSION_NONE_WR -3
-#define PNG_TEXT_COMPRESSION_zTXt_WR -2
-#define PNG_TEXT_COMPRESSION_NONE -1
-#define PNG_TEXT_COMPRESSION_zTXt 0
-#define PNG_ITXT_COMPRESSION_NONE 1
-#define PNG_ITXT_COMPRESSION_zTXt 2
-#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */
-
-/* png_time is a way to hold the time in an machine independent way.
- * Two conversions are provided, both from time_t and struct tm. There
- * is no portable way to convert to either of these structures, as far
- * as I know. If you know of a portable way, send it to me. As a side
- * note - PNG has always been Year 2000 compliant!
- */
-typedef struct png_time_struct
-{
- png_uint_16 year; /* full year, as in, 1995 */
- png_byte month; /* month of year, 1 - 12 */
- png_byte day; /* day of month, 1 - 31 */
- png_byte hour; /* hour of day, 0 - 23 */
- png_byte minute; /* minute of hour, 0 - 59 */
- png_byte second; /* second of minute, 0 - 60 (for leap seconds) */
-} png_time;
-typedef png_time FAR * png_timep;
-typedef png_time FAR * FAR * png_timepp;
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-/* png_unknown_chunk is a structure to hold queued chunks for which there is
- * no specific support. The idea is that we can use this to queue
- * up private chunks for output even though the library doesn't actually
- * know about their semantics.
- */
-#define PNG_CHUNK_NAME_LENGTH 5
-typedef struct png_unknown_chunk_t
-{
- png_byte name[PNG_CHUNK_NAME_LENGTH];
- png_byte *data;
- png_size_t size;
-
- /* libpng-using applications should NOT directly modify this byte. */
- png_byte location; /* mode of operation at read time */
-}
-png_unknown_chunk;
-typedef png_unknown_chunk FAR * png_unknown_chunkp;
-typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
-#endif
-
-/* png_info is a structure that holds the information in a PNG file so
- * that the application can find out the characteristics of the image.
- * If you are reading the file, this structure will tell you what is
- * in the PNG file. If you are writing the file, fill in the information
- * you want to put into the PNG file, then call png_write_info().
- * The names chosen should be very close to the PNG specification, so
- * consult that document for information about the meaning of each field.
- *
- * With libpng < 0.95, it was only possible to directly set and read the
- * the values in the png_info_struct, which meant that the contents and
- * order of the values had to remain fixed. With libpng 0.95 and later,
- * however, there are now functions that abstract the contents of
- * png_info_struct from the application, so this makes it easier to use
- * libpng with dynamic libraries, and even makes it possible to use
- * libraries that don't have all of the libpng ancillary chunk-handing
- * functionality.
- *
- * In any case, the order of the parameters in png_info_struct should NOT
- * be changed for as long as possible to keep compatibility with applications
- * that use the old direct-access method with png_info_struct.
- *
- * The following members may have allocated storage attached that should be
- * cleaned up before the structure is discarded: palette, trans, text,
- * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
- * splt_palettes, scal_unit, row_pointers, and unknowns. By default, these
- * are automatically freed when the info structure is deallocated, if they were
- * allocated internally by libpng. This behavior can be changed by means
- * of the png_data_freer() function.
- *
- * More allocation details: all the chunk-reading functions that
- * change these members go through the corresponding png_set_*
- * functions. A function to clear these members is available: see
- * png_free_data(). The png_set_* functions do not depend on being
- * able to point info structure members to any of the storage they are
- * passed (they make their own copies), EXCEPT that the png_set_text
- * functions use the same storage passed to them in the text_ptr or
- * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
- * functions do not make their own copies.
- */
-typedef struct png_info_struct
-{
- /* the following are necessary for every PNG file */
- png_uint_32 width; /* width of image in pixels (from IHDR) */
- png_uint_32 height; /* height of image in pixels (from IHDR) */
- png_uint_32 valid; /* valid chunk data (see PNG_INFO_ below) */
- png_uint_32 rowbytes; /* bytes needed to hold an untransformed row */
- png_colorp palette; /* array of color values (valid & PNG_INFO_PLTE) */
- png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
- png_uint_16 num_trans; /* number of transparent palette color (tRNS) */
- png_byte bit_depth; /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
- png_byte color_type; /* see PNG_COLOR_TYPE_ below (from IHDR) */
- /* The following three should have been named *_method not *_type */
- png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
- png_byte filter_type; /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
- png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
-
- /* The following is informational only on read, and not used on writes. */
- png_byte channels; /* number of data channels per pixel (1, 2, 3, 4) */
- png_byte pixel_depth; /* number of bits per pixel */
- png_byte spare_byte; /* to align the data, and for future use */
- png_byte signature[8]; /* magic bytes read by libpng from start of file */
-
- /* The rest of the data is optional. If you are reading, check the
- * valid field to see if the information in these are valid. If you
- * are writing, set the valid field to those chunks you want written,
- * and initialize the appropriate fields below.
- */
-
-#if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
- /* The gAMA chunk describes the gamma characteristics of the system
- * on which the image was created, normally in the range [1.0, 2.5].
- * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
- */
- float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
-#endif
-
-#if defined(PNG_sRGB_SUPPORTED)
- /* GR-P, 0.96a */
- /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
- png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */
-#endif
-
-#if defined(PNG_TEXT_SUPPORTED)
- /* The tEXt, and zTXt chunks contain human-readable textual data in
- * uncompressed, compressed, and optionally compressed forms, respectively.
- * The data in "text" is an array of pointers to uncompressed,
- * null-terminated C strings. Each chunk has a keyword that describes the
- * textual data contained in that chunk. Keywords are not required to be
- * unique, and the text string may be empty. Any number of text chunks may
- * be in an image.
- */
- int num_text; /* number of comments read/to write */
- int max_text; /* current size of text array */
- png_textp text; /* array of comments read/to write */
-#endif /* PNG_TEXT_SUPPORTED */
-
-#if defined(PNG_tIME_SUPPORTED)
- /* The tIME chunk holds the last time the displayed image data was
- * modified. See the png_time struct for the contents of this struct.
- */
- png_time mod_time;
-#endif
-
-#if defined(PNG_sBIT_SUPPORTED)
- /* The sBIT chunk specifies the number of significant high-order bits
- * in the pixel data. Values are in the range [1, bit_depth], and are
- * only specified for the channels in the pixel data. The contents of
- * the low-order bits is not specified. Data is valid if
- * (valid & PNG_INFO_sBIT) is non-zero.
- */
- png_color_8 sig_bit; /* significant bits in color channels */
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
-defined(PNG_READ_BACKGROUND_SUPPORTED)
- /* The tRNS chunk supplies transparency data for paletted images and
- * other image types that don't need a full alpha channel. There are
- * "num_trans" transparency values for a paletted image, stored in the
- * same order as the palette colors, starting from index 0. Values
- * for the data are in the range [0, 255], ranging from fully transparent
- * to fully opaque, respectively. For non-paletted images, there is a
- * single color specified that should be treated as fully transparent.
- * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
- */
- png_bytep trans; /* transparent values for paletted image */
- png_color_16 trans_values; /* transparent color for non-palette image */
-#endif
-
-#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- /* The bKGD chunk gives the suggested image background color if the
- * display program does not have its own background color and the image
- * is needs to composited onto a background before display. The colors
- * in "background" are normally in the same color space/depth as the
- * pixel data. Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
- */
- png_color_16 background;
-#endif
-
-#if defined(PNG_oFFs_SUPPORTED)
- /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
- * and downwards from the top-left corner of the display, page, or other
- * application-specific co-ordinate space. See the PNG_OFFSET_ defines
- * below for the unit types. Valid if (valid & PNG_INFO_oFFs) non-zero.
- */
- png_int_32 x_offset; /* x offset on page */
- png_int_32 y_offset; /* y offset on page */
- png_byte offset_unit_type; /* offset units type */
-#endif
-
-#if defined(PNG_pHYs_SUPPORTED)
- /* The pHYs chunk gives the physical pixel density of the image for
- * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
- * defines below). Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
- */
- png_uint_32 x_pixels_per_unit; /* horizontal pixel density */
- png_uint_32 y_pixels_per_unit; /* vertical pixel density */
- png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */
-#endif
-
-#if defined(PNG_hIST_SUPPORTED)
- /* The hIST chunk contains the relative frequency or importance of the
- * various palette entries, so that a viewer can intelligently select a
- * reduced-color palette, if required. Data is an array of "num_palette"
- * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
- * is non-zero.
- */
- png_uint_16p hist;
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
- /* The cHRM chunk describes the CIE color characteristics of the monitor
- * on which the PNG was created. This data allows the viewer to do gamut
- * mapping of the input image to ensure that the viewer sees the same
- * colors in the image as the creator. Values are in the range
- * [0.0, 0.8]. Data valid if (valid & PNG_INFO_cHRM) non-zero.
- */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- float x_white;
- float y_white;
- float x_red;
- float y_red;
- float x_green;
- float y_green;
- float x_blue;
- float y_blue;
-#endif
-#endif
-
-#if defined(PNG_pCAL_SUPPORTED)
- /* The pCAL chunk describes a transformation between the stored pixel
- * values and original physical data values used to create the image.
- * The integer range [0, 2^bit_depth - 1] maps to the floating-point
- * range given by [pcal_X0, pcal_X1], and are further transformed by a
- * (possibly non-linear) transformation function given by "pcal_type"
- * and "pcal_params" into "pcal_units". Please see the PNG_EQUATION_
- * defines below, and the PNG-Group's PNG extensions document for a
- * complete description of the transformations and how they should be
- * implemented, and for a description of the ASCII parameter strings.
- * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
- */
- png_charp pcal_purpose; /* pCAL chunk description string */
- png_int_32 pcal_X0; /* minimum value */
- png_int_32 pcal_X1; /* maximum value */
- png_charp pcal_units; /* Latin-1 string giving physical units */
- png_charpp pcal_params; /* ASCII strings containing parameter values */
- png_byte pcal_type; /* equation type (see PNG_EQUATION_ below) */
- png_byte pcal_nparams; /* number of parameters given in pcal_params */
-#endif
-
-/* New members added in libpng-1.0.6 */
-#ifdef PNG_FREE_ME_SUPPORTED
- png_uint_32 free_me; /* flags items libpng is responsible for freeing */
-#endif
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- /* storage for unknown chunks that the library doesn't recognize. */
- png_unknown_chunkp unknown_chunks;
- png_size_t unknown_chunks_num;
-#endif
-
-#if defined(PNG_iCCP_SUPPORTED)
- /* iCCP chunk data. */
- png_charp iccp_name; /* profile name */
- png_charp iccp_profile; /* International Color Consortium profile data */
- /* Note to maintainer: should be png_bytep */
- png_uint_32 iccp_proflen; /* ICC profile data length */
- png_byte iccp_compression; /* Always zero */
-#endif
-
-#if defined(PNG_sPLT_SUPPORTED)
- /* data on sPLT chunks (there may be more than one). */
- png_sPLT_tp splt_palettes;
- png_uint_32 splt_palettes_num;
-#endif
-
-#if defined(PNG_sCAL_SUPPORTED)
- /* The sCAL chunk describes the actual physical dimensions of the
- * subject matter of the graphic. The chunk contains a unit specification
- * a byte value, and two ASCII strings representing floating-point
- * values. The values are width and height corresponsing to one pixel
- * in the image. This external representation is converted to double
- * here. Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
- */
- png_byte scal_unit; /* unit of physical scale */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- double scal_pixel_width; /* width of one pixel */
- double scal_pixel_height; /* height of one pixel */
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_charp scal_s_width; /* string containing height */
- png_charp scal_s_height; /* string containing width */
-#endif
-#endif
-
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
- /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
- /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
- png_bytepp row_pointers; /* the image bits */
-#endif
-
-#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
- png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */
-#endif
-
-#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
- png_fixed_point int_x_white;
- png_fixed_point int_y_white;
- png_fixed_point int_x_red;
- png_fixed_point int_y_red;
- png_fixed_point int_x_green;
- png_fixed_point int_y_green;
- png_fixed_point int_x_blue;
- png_fixed_point int_y_blue;
-#endif
-
-} png_info;
-
-typedef png_info FAR * png_infop;
-typedef png_info FAR * FAR * png_infopp;
-
-/* Maximum positive integer used in PNG is (2^31)-1 */
-#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
-#define PNG_UINT_32_MAX ((png_uint_32)(-1))
-#define PNG_SIZE_MAX ((png_size_t)(-1))
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-/* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */
-#define PNG_MAX_UINT PNG_UINT_31_MAX
-#endif
-
-/* These describe the color_type field in png_info. */
-/* color type masks */
-#define PNG_COLOR_MASK_PALETTE 1
-#define PNG_COLOR_MASK_COLOR 2
-#define PNG_COLOR_MASK_ALPHA 4
-
-/* color types. Note that not all combinations are legal */
-#define PNG_COLOR_TYPE_GRAY 0
-#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
-#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR)
-#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
-#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
-/* aliases */
-#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA
-#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA
-
-/* This is for compression type. PNG 1.0-1.2 only define the single type. */
-#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
-#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
-
-/* This is for filter type. PNG 1.0-1.2 only define the single type. */
-#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */
-#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
-#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE
-
-/* These are for the interlacing type. These values should NOT be changed. */
-#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */
-#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */
-#define PNG_INTERLACE_LAST 2 /* Not a valid value */
-
-/* These are for the oFFs chunk. These values should NOT be changed. */
-#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */
-#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */
-#define PNG_OFFSET_LAST 2 /* Not a valid value */
-
-/* These are for the pCAL chunk. These values should NOT be changed. */
-#define PNG_EQUATION_LINEAR 0 /* Linear transformation */
-#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */
-#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */
-#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */
-#define PNG_EQUATION_LAST 4 /* Not a valid value */
-
-/* These are for the sCAL chunk. These values should NOT be changed. */
-#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */
-#define PNG_SCALE_METER 1 /* meters per pixel */
-#define PNG_SCALE_RADIAN 2 /* radians per pixel */
-#define PNG_SCALE_LAST 3 /* Not a valid value */
-
-/* These are for the pHYs chunk. These values should NOT be changed. */
-#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */
-#define PNG_RESOLUTION_METER 1 /* pixels/meter */
-#define PNG_RESOLUTION_LAST 2 /* Not a valid value */
-
-/* These are for the sRGB chunk. These values should NOT be changed. */
-#define PNG_sRGB_INTENT_PERCEPTUAL 0
-#define PNG_sRGB_INTENT_RELATIVE 1
-#define PNG_sRGB_INTENT_SATURATION 2
-#define PNG_sRGB_INTENT_ABSOLUTE 3
-#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */
-
-/* This is for text chunks */
-#define PNG_KEYWORD_MAX_LENGTH 79
-
-/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
-#define PNG_MAX_PALETTE_LENGTH 256
-
-/* These determine if an ancillary chunk's data has been successfully read
- * from the PNG header, or if the application has filled in the corresponding
- * data in the info_struct to be written into the output file. The values
- * of the PNG_INFO_<chunk> defines should NOT be changed.
- */
-#define PNG_INFO_gAMA 0x0001
-#define PNG_INFO_sBIT 0x0002
-#define PNG_INFO_cHRM 0x0004
-#define PNG_INFO_PLTE 0x0008
-#define PNG_INFO_tRNS 0x0010
-#define PNG_INFO_bKGD 0x0020
-#define PNG_INFO_hIST 0x0040
-#define PNG_INFO_pHYs 0x0080
-#define PNG_INFO_oFFs 0x0100
-#define PNG_INFO_tIME 0x0200
-#define PNG_INFO_pCAL 0x0400
-#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */
-#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
-#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
-#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
-#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */
-
-/* This is used for the transformation routines, as some of them
- * change these values for the row. It also should enable using
- * the routines for other purposes.
- */
-typedef struct png_row_info_struct
-{
- png_uint_32 width; /* width of row */
- png_uint_32 rowbytes; /* number of bytes in row */
- png_byte color_type; /* color type of row */
- png_byte bit_depth; /* bit depth of row */
- png_byte channels; /* number of channels (1, 2, 3, or 4) */
- png_byte pixel_depth; /* bits per pixel (depth * channels) */
-} png_row_info;
-
-typedef png_row_info FAR * png_row_infop;
-typedef png_row_info FAR * FAR * png_row_infopp;
-
-/* These are the function types for the I/O functions and for the functions
- * that allow the user to override the default I/O functions with his or her
- * own. The png_error_ptr type should match that of user-supplied warning
- * and error functions, while the png_rw_ptr type should match that of the
- * user read/write data functions.
- */
-typedef struct png_struct_def png_struct;
-typedef png_struct FAR * png_structp;
-
-typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp));
-typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));
-typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp));
-typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32,
- int));
-typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32,
- int));
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop));
-typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
-typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
- png_uint_32, int));
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_LEGACY_SUPPORTED)
-typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
- png_row_infop, png_bytep));
-#endif
-
-#if defined(PNG_USER_CHUNKS_SUPPORTED)
-typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
-#endif
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
-#endif
-
-/* Transform masks for the high-level interface */
-#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */
-#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */
-#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */
-#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */
-#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */
-#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */
-#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */
-#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */
-#define PNG_TRANSFORM_BGR 0x0080 /* read and write */
-#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */
-#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */
-#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */
-#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */
-
-/* Flags for MNG supported features */
-#define PNG_FLAG_MNG_EMPTY_PLTE 0x01
-#define PNG_FLAG_MNG_FILTER_64 0x04
-#define PNG_ALL_MNG_FEATURES 0x05
-
-typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
-typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
-
-/* The structure that holds the information to read and write PNG files.
- * The only people who need to care about what is inside of this are the
- * people who will be modifying the library for their own special needs.
- * It should NOT be accessed directly by an application, except to store
- * the jmp_buf.
- */
-
-struct png_struct_def
-{
-#ifdef PNG_SETJMP_SUPPORTED
- jmp_buf jmpbuf; /* used in png_error */
-#endif
- png_error_ptr error_fn; /* function for printing errors and aborting */
- png_error_ptr warning_fn; /* function for printing warnings */
- png_voidp error_ptr; /* user supplied struct for error functions */
- png_rw_ptr write_data_fn; /* function for writing output data */
- png_rw_ptr read_data_fn; /* function for reading input data */
- png_voidp io_ptr; /* ptr to application struct for I/O functions */
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- png_user_transform_ptr read_user_transform_fn; /* user read transform */
-#endif
-
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
- png_user_transform_ptr write_user_transform_fn; /* user write transform */
-#endif
-
-/* These were added in libpng-1.0.2 */
-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
- png_voidp user_transform_ptr; /* user supplied struct for user transform */
- png_byte user_transform_depth; /* bit depth of user transformed pixels */
- png_byte user_transform_channels; /* channels in user transformed pixels */
-#endif
-#endif
-
- png_uint_32 mode; /* tells us where we are in the PNG file */
- png_uint_32 flags; /* flags indicating various things to libpng */
- png_uint_32 transformations; /* which transformations to perform */
-
- z_stream zstream; /* pointer to decompression structure (below) */
- png_bytep zbuf; /* buffer for zlib */
- png_size_t zbuf_size; /* size of zbuf */
- int zlib_level; /* holds zlib compression level */
- int zlib_method; /* holds zlib compression method */
- int zlib_window_bits; /* holds zlib compression window bits */
- int zlib_mem_level; /* holds zlib compression memory level */
- int zlib_strategy; /* holds zlib compression strategy */
-
- png_uint_32 width; /* width of image in pixels */
- png_uint_32 height; /* height of image in pixels */
- png_uint_32 num_rows; /* number of rows in current pass */
- png_uint_32 usr_width; /* width of row at start of write */
- png_uint_32 rowbytes; /* size of row in bytes */
- png_uint_32 irowbytes; /* size of current interlaced row in bytes */
- png_uint_32 iwidth; /* width of current interlaced row in pixels */
- png_uint_32 row_number; /* current row in interlace pass */
- png_bytep prev_row; /* buffer to save previous (unfiltered) row */
- png_bytep row_buf; /* buffer to save current (unfiltered) row */
-#ifndef PNG_NO_WRITE_FILTERING
- png_bytep sub_row; /* buffer to save "sub" row when filtering */
- png_bytep up_row; /* buffer to save "up" row when filtering */
- png_bytep avg_row; /* buffer to save "avg" row when filtering */
- png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */
-#endif
- png_row_info row_info; /* used for transformation routines */
-
- png_uint_32 idat_size; /* current IDAT size for read */
- png_uint_32 crc; /* current chunk CRC value */
- png_colorp palette; /* palette from the input file */
- png_uint_16 num_palette; /* number of color entries in palette */
- png_uint_16 num_trans; /* number of transparency values */
- png_byte chunk_name[5]; /* null-terminated name of current chunk */
- png_byte compression; /* file compression type (always 0) */
- png_byte filter; /* file filter type (always 0) */
- png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
- png_byte pass; /* current interlace pass (0 - 6) */
- png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */
- png_byte color_type; /* color type of file */
- png_byte bit_depth; /* bit depth of file */
- png_byte usr_bit_depth; /* bit depth of users row */
- png_byte pixel_depth; /* number of bits per pixel */
- png_byte channels; /* number of channels in file */
- png_byte usr_channels; /* channels at start of write */
- png_byte sig_bytes; /* magic bytes read/written from start of file */
-
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-#ifdef PNG_LEGACY_SUPPORTED
- png_byte filler; /* filler byte for pixel expansion */
-#else
- png_uint_16 filler; /* filler bytes for pixel expansion */
-#endif
-#endif
-
-#if defined(PNG_bKGD_SUPPORTED)
- png_byte background_gamma_type;
-# ifdef PNG_FLOATING_POINT_SUPPORTED
- float background_gamma;
-# endif
- png_color_16 background; /* background color in screen gamma space */
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- png_color_16 background_1; /* background normalized to gamma 1.0 */
-#endif
-#endif /* PNG_bKGD_SUPPORTED */
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
- png_flush_ptr output_flush_fn;/* Function for flushing output */
- png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */
- png_uint_32 flush_rows; /* number of rows written since last flush */
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- int gamma_shift; /* number of "insignificant" bits 16-bit gamma */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- float gamma; /* file gamma value */
- float screen_gamma; /* screen gamma value (display_exponent) */
-#endif
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- png_bytep gamma_table; /* gamma table for 8-bit depth files */
- png_bytep gamma_from_1; /* converts from 1.0 to screen */
- png_bytep gamma_to_1; /* converts from file to 1.0 */
- png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
- png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
- png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
- png_color_8 sig_bit; /* significant bits in each available channel */
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
- png_color_8 shift; /* shift for significant bit tranformation */
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
- || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- png_bytep trans; /* transparency values for paletted files */
- png_color_16 trans_values; /* transparency values for non-paletted files */
-#endif
-
- png_read_status_ptr read_row_fn; /* called after each row is decoded */
- png_write_status_ptr write_row_fn; /* called after each row is encoded */
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
- png_progressive_info_ptr info_fn; /* called after header data fully read */
- png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */
- png_progressive_end_ptr end_fn; /* called after image is complete */
- png_bytep save_buffer_ptr; /* current location in save_buffer */
- png_bytep save_buffer; /* buffer for previously read data */
- png_bytep current_buffer_ptr; /* current location in current_buffer */
- png_bytep current_buffer; /* buffer for recently used data */
- png_uint_32 push_length; /* size of current input chunk */
- png_uint_32 skip_length; /* bytes to skip in input data */
- png_size_t save_buffer_size; /* amount of data now in save_buffer */
- png_size_t save_buffer_max; /* total size of save_buffer */
- png_size_t buffer_size; /* total amount of available input data */
- png_size_t current_buffer_size; /* amount of data now in current_buffer */
- int process_mode; /* what push library is currently doing */
- int cur_palette; /* current push library palette index */
-
-# if defined(PNG_TEXT_SUPPORTED)
- png_size_t current_text_size; /* current size of text input data */
- png_size_t current_text_left; /* how much text left to read in input */
- png_charp current_text; /* current text chunk buffer */
- png_charp current_text_ptr; /* current location in current_text */
-# endif /* PNG_TEXT_SUPPORTED */
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-
-#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
-/* for the Borland special 64K segment handler */
- png_bytepp offset_table_ptr;
- png_bytep offset_table;
- png_uint_16 offset_table_number;
- png_uint_16 offset_table_count;
- png_uint_16 offset_table_count_free;
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
- png_bytep palette_lookup; /* lookup table for dithering */
- png_bytep dither_index; /* index translation for palette files */
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
- png_uint_16p hist; /* histogram */
-#endif
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- png_byte heuristic_method; /* heuristic for row filter selection */
- png_byte num_prev_filters; /* number of weights for previous rows */
- png_bytep prev_filters; /* filter type(s) of previous row(s) */
- png_uint_16p filter_weights; /* weight(s) for previous line(s) */
- png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */
- png_uint_16p filter_costs; /* relative filter calculation cost */
- png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */
-#endif
-
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
- png_charp time_buffer; /* String to hold RFC 1123 time text */
-#endif
-
-/* New members added in libpng-1.0.6 */
-
-#ifdef PNG_FREE_ME_SUPPORTED
- png_uint_32 free_me; /* flags items libpng is responsible for freeing */
-#endif
-
-#if defined(PNG_USER_CHUNKS_SUPPORTED)
- png_voidp user_chunk_ptr;
- png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
-#endif
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- int num_chunk_list;
- png_bytep chunk_list;
-#endif
-
-/* New members added in libpng-1.0.3 */
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
- png_byte rgb_to_gray_status;
- /* These were changed from png_byte in libpng-1.0.6 */
- png_uint_16 rgb_to_gray_red_coeff;
- png_uint_16 rgb_to_gray_green_coeff;
- png_uint_16 rgb_to_gray_blue_coeff;
-#endif
-
-/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
-#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
- defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
- defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
-/* changed from png_byte to png_uint_32 at version 1.2.0 */
-#ifdef PNG_1_0_X
- png_byte mng_features_permitted;
-#else
- png_uint_32 mng_features_permitted;
-#endif /* PNG_1_0_X */
-#endif
-
-/* New member added in libpng-1.0.7 */
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- png_fixed_point int_gamma;
-#endif
-
-/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- png_byte filter_type;
-#endif
-
-#if defined(PNG_1_0_X)
-/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */
- png_uint_32 row_buf_size;
-#endif
-
-/* New members added in libpng-1.2.0 */
-#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
-# if !defined(PNG_1_0_X)
-# if defined(PNG_MMX_CODE_SUPPORTED)
- png_byte mmx_bitdepth_threshold;
- png_uint_32 mmx_rowbytes_threshold;
-# endif
- png_uint_32 asm_flags;
-# endif
-#endif
-
-/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
-#ifdef PNG_USER_MEM_SUPPORTED
- png_voidp mem_ptr; /* user supplied struct for mem functions */
- png_malloc_ptr malloc_fn; /* function for allocating memory */
- png_free_ptr free_fn; /* function for freeing memory */
-#endif
-
-/* New member added in libpng-1.0.13 and 1.2.0 */
- png_bytep big_row_buf; /* buffer to save current (unfiltered) row */
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
-/* The following three members were added at version 1.0.14 and 1.2.4 */
- png_bytep dither_sort; /* working sort array */
- png_bytep index_to_palette; /* where the original index currently is */
- /* in the palette */
- png_bytep palette_to_index; /* which original index points to this */
- /* palette color */
-#endif
-
-/* New members added in libpng-1.0.16 and 1.2.6 */
- png_byte compression_type;
-
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
- png_uint_32 user_width_max;
- png_uint_32 user_height_max;
-#endif
-
-/* New member added in libpng-1.0.25 and 1.2.17 */
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- /* storage for unknown chunk that the library doesn't recognize. */
- png_unknown_chunk unknown_chunk;
-#endif
-
-/* New members added in libpng-1.2.26 */
- png_uint_32 old_big_row_buf_size, old_prev_row_size;
-};
-
-
-/* This triggers a compiler error in png.c, if png.c and png.h
- * do not agree upon the version number.
- */
-typedef png_structp version_1_2_29;
-
-typedef png_struct FAR * FAR * png_structpp;
-
-/* Here are the function definitions most commonly used. This is not
- * the place to find out how to use libpng. See libpng.txt for the
- * full explanation, see example.c for the summary. This just provides
- * a simple one line description of the use of each function.
- */
-
-/* Returns the version number of the library */
-extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void));
-
-/* Tell lib we have already handled the first <num_bytes> magic bytes.
- * Handling more than 8 bytes from the beginning of the file is an error.
- */
-extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr,
- int num_bytes));
-
-/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
- * PNG file. Returns zero if the supplied bytes match the 8-byte PNG
- * signature, and non-zero otherwise. Having num_to_check == 0 or
- * start > 7 will always fail (ie return non-zero).
- */
-extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start,
- png_size_t num_to_check));
-
-/* Simple signature checking function. This is the same as calling
- * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
- */
-extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num));
-
-/* Allocate and initialize png_ptr struct for reading, and any other memory. */
-extern PNG_EXPORT(png_structp,png_create_read_struct)
- PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn));
-
-/* Allocate and initialize png_ptr struct for writing, and any other memory */
-extern PNG_EXPORT(png_structp,png_create_write_struct)
- PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn));
-
-#ifdef PNG_WRITE_SUPPORTED
-extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size)
- PNGARG((png_structp png_ptr));
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-extern PNG_EXPORT(void,png_set_compression_buffer_size)
- PNGARG((png_structp png_ptr, png_uint_32 size));
-#endif
-
-/* Reset the compression stream */
-extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr));
-
-/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
-#ifdef PNG_USER_MEM_SUPPORTED
-extern PNG_EXPORT(png_structp,png_create_read_struct_2)
- PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
- png_malloc_ptr malloc_fn, png_free_ptr free_fn));
-extern PNG_EXPORT(png_structp,png_create_write_struct_2)
- PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
- png_malloc_ptr malloc_fn, png_free_ptr free_fn));
-#endif
-
-/* Write a PNG chunk - size, type, (optional) data, CRC. */
-extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr,
- png_bytep chunk_name, png_bytep data, png_size_t length));
-
-/* Write the start of a PNG chunk - length and chunk name. */
-extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr,
- png_bytep chunk_name, png_uint_32 length));
-
-/* Write the data of a PNG chunk started with png_write_chunk_start(). */
-extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr,
- png_bytep data, png_size_t length));
-
-/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
-extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr));
-
-/* Allocate and initialize the info structure */
-extern PNG_EXPORT(png_infop,png_create_info_struct)
- PNGARG((png_structp png_ptr));
-
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-/* Initialize the info structure (old interface - DEPRECATED) */
-extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr));
-#undef png_info_init
-#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\
- png_sizeof(png_info));
-#endif
-
-extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
- png_size_t png_info_struct_size));
-
-/* Writes all the PNG information before the image. */
-extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* read the information before the actual image data. */
-extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-#endif
-
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
-extern PNG_EXPORT(png_charp,png_convert_to_rfc1123)
- PNGARG((png_structp png_ptr, png_timep ptime));
-#endif
-
-#if !defined(_WIN32_WCE)
-/* "time.h" functions are not supported on WindowsCE */
-#if defined(PNG_WRITE_tIME_SUPPORTED)
-/* convert from a struct tm to png_time */
-extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
- struct tm FAR * ttime));
-
-/* convert from time_t to png_time. Uses gmtime() */
-extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
- time_t ttime));
-#endif /* PNG_WRITE_tIME_SUPPORTED */
-#endif /* _WIN32_WCE */
-
-#if defined(PNG_READ_EXPAND_SUPPORTED)
-/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
-extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
-#if !defined(PNG_1_0_X)
-extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp
- png_ptr));
-#endif
-extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
-extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-/* Deprecated */
-extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr));
-#endif
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* Use blue, green, red order for pixels. */
-extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
-/* Expand the grayscale to 24-bit RGB if necessary. */
-extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-/* Reduce RGB to grayscale. */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
- int error_action, double red, double green ));
-#endif
-extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr,
- int error_action, png_fixed_point red, png_fixed_point green ));
-extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp
- png_ptr));
-#endif
-
-extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth,
- png_colorp palette));
-
-#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
- defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
- defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
-extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr,
- png_uint_32 filler, int flags));
-/* The values of the PNG_FILLER_ defines should NOT be changed */
-#define PNG_FILLER_BEFORE 0
-#define PNG_FILLER_AFTER 1
-/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
-#if !defined(PNG_1_0_X)
-extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
- png_uint_32 filler, int flags));
-#endif
-#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* Swap bytes in 16-bit depth files. */
-extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
-/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
-extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-/* Swap packing order of pixels in bytes. */
-extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-/* Converts files to legal bit depths. */
-extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr,
- png_color_8p true_bits));
-#endif
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
- defined(PNG_WRITE_INTERLACING_SUPPORTED)
-/* Have the code handle the interlacing. Returns the number of passes. */
-extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-/* Invert monochrome files */
-extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
-/* Handle alpha and tRNS by replacing with a background color. */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr,
- png_color_16p background_color, int background_gamma_code,
- int need_expand, double background_gamma));
-#endif
-#define PNG_BACKGROUND_GAMMA_UNKNOWN 0
-#define PNG_BACKGROUND_GAMMA_SCREEN 1
-#define PNG_BACKGROUND_GAMMA_FILE 2
-#define PNG_BACKGROUND_GAMMA_UNIQUE 3
-#endif
-
-#if defined(PNG_READ_16_TO_8_SUPPORTED)
-/* strip the second byte of information from a 16-bit depth file. */
-extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
-/* Turn on dithering, and reduce the palette to the number of colors available. */
-extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr,
- png_colorp palette, int num_palette, int maximum_colors,
- png_uint_16p histogram, int full_dither));
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED)
-/* Handle gamma correction. Screen_gamma=(display_exponent) */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
- double screen_gamma, double default_file_gamma));
-#endif
-#endif
-
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
- defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
-/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
-/* Deprecated and will be removed. Use png_permit_mng_features() instead. */
-extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
- int empty_plte_permitted));
-#endif
-#endif
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
-/* Set how many lines between output flushes - 0 for no flushing */
-extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
-/* Flush the current PNG output buffer */
-extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr));
-#endif
-
-/* optional update palette with requested transformations */
-extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr));
-
-/* optional call to update the users info structure */
-extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* read one or more rows of image data. */
-extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
- png_bytepp row, png_bytepp display_row, png_uint_32 num_rows));
-#endif
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* read a row of data. */
-extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
- png_bytep row,
- png_bytep display_row));
-#endif
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* read the whole image into memory at once. */
-extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
- png_bytepp image));
-#endif
-
-/* write a row of image data */
-extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr,
- png_bytep row));
-
-/* write a few rows of image data */
-extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr,
- png_bytepp row, png_uint_32 num_rows));
-
-/* write the image data */
-extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
- png_bytepp image));
-
-/* writes the end of the PNG file. */
-extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* read the end of the PNG file. */
-extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-#endif
-
-/* free any memory associated with the png_info_struct */
-extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr,
- png_infopp info_ptr_ptr));
-
-/* free any memory associated with the png_struct and the png_info_structs */
-extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp
- png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
-
-/* free all memory used by the read (old method - NOT DLL EXPORTED) */
-extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_infop end_info_ptr));
-
-/* free any memory associated with the png_struct and the png_info_structs */
-extern PNG_EXPORT(void,png_destroy_write_struct)
- PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
-
-/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */
-extern void png_write_destroy PNGARG((png_structp png_ptr));
-
-/* set the libpng method of handling chunk CRC errors */
-extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr,
- int crit_action, int ancil_action));
-
-/* Values for png_set_crc_action() to say how to handle CRC errors in
- * ancillary and critical chunks, and whether to use the data contained
- * therein. Note that it is impossible to "discard" data in a critical
- * chunk. For versions prior to 0.90, the action was always error/quit,
- * whereas in version 0.90 and later, the action for CRC errors in ancillary
- * chunks is warn/discard. These values should NOT be changed.
- *
- * value action:critical action:ancillary
- */
-#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */
-#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */
-#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */
-#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */
-#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */
-#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */
-
-/* These functions give the user control over the scan-line filtering in
- * libpng and the compression methods used by zlib. These functions are
- * mainly useful for testing, as the defaults should work with most users.
- * Those users who are tight on memory or want faster performance at the
- * expense of compression can modify them. See the compression library
- * header file (zlib.h) for an explination of the compression functions.
- */
-
-/* set the filtering method(s) used by libpng. Currently, the only valid
- * value for "method" is 0.
- */
-extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method,
- int filters));
-
-/* Flags for png_set_filter() to say which filters to use. The flags
- * are chosen so that they don't conflict with real filter types
- * below, in case they are supplied instead of the #defined constants.
- * These values should NOT be changed.
- */
-#define PNG_NO_FILTERS 0x00
-#define PNG_FILTER_NONE 0x08
-#define PNG_FILTER_SUB 0x10
-#define PNG_FILTER_UP 0x20
-#define PNG_FILTER_AVG 0x40
-#define PNG_FILTER_PAETH 0x80
-#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
- PNG_FILTER_AVG | PNG_FILTER_PAETH)
-
-/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
- * These defines should NOT be changed.
- */
-#define PNG_FILTER_VALUE_NONE 0
-#define PNG_FILTER_VALUE_SUB 1
-#define PNG_FILTER_VALUE_UP 2
-#define PNG_FILTER_VALUE_AVG 3
-#define PNG_FILTER_VALUE_PAETH 4
-#define PNG_FILTER_VALUE_LAST 5
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */
-/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
- * defines, either the default (minimum-sum-of-absolute-differences), or
- * the experimental method (weighted-minimum-sum-of-absolute-differences).
- *
- * Weights are factors >= 1.0, indicating how important it is to keep the
- * filter type consistent between rows. Larger numbers mean the current
- * filter is that many times as likely to be the same as the "num_weights"
- * previous filters. This is cumulative for each previous row with a weight.
- * There needs to be "num_weights" values in "filter_weights", or it can be
- * NULL if the weights aren't being specified. Weights have no influence on
- * the selection of the first row filter. Well chosen weights can (in theory)
- * improve the compression for a given image.
- *
- * Costs are factors >= 1.0 indicating the relative decoding costs of a
- * filter type. Higher costs indicate more decoding expense, and are
- * therefore less likely to be selected over a filter with lower computational
- * costs. There needs to be a value in "filter_costs" for each valid filter
- * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
- * setting the costs. Costs try to improve the speed of decompression without
- * unduly increasing the compressed image size.
- *
- * A negative weight or cost indicates the default value is to be used, and
- * values in the range [0.0, 1.0) indicate the value is to remain unchanged.
- * The default values for both weights and costs are currently 1.0, but may
- * change if good general weighting/cost heuristics can be found. If both
- * the weights and costs are set to 1.0, this degenerates the WEIGHTED method
- * to the UNWEIGHTED method, but with added encoding time/computation.
- */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr,
- int heuristic_method, int num_weights, png_doublep filter_weights,
- png_doublep filter_costs));
-#endif
-#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
-
-/* Heuristic used for row filter selection. These defines should NOT be
- * changed.
- */
-#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */
-#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */
-#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */
-#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */
-
-/* Set the library compression level. Currently, valid values range from
- * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
- * (0 - no compression, 9 - "maximal" compression). Note that tests have
- * shown that zlib compression levels 3-6 usually perform as well as level 9
- * for PNG images, and do considerably fewer caclulations. In the future,
- * these values may not correspond directly to the zlib compression levels.
- */
-extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr,
- int level));
-
-extern PNG_EXPORT(void,png_set_compression_mem_level)
- PNGARG((png_structp png_ptr, int mem_level));
-
-extern PNG_EXPORT(void,png_set_compression_strategy)
- PNGARG((png_structp png_ptr, int strategy));
-
-extern PNG_EXPORT(void,png_set_compression_window_bits)
- PNGARG((png_structp png_ptr, int window_bits));
-
-extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr,
- int method));
-
-/* These next functions are called for input/output, memory, and error
- * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c,
- * and call standard C I/O routines such as fread(), fwrite(), and
- * fprintf(). These functions can be made to use other I/O routines
- * at run time for those applications that need to handle I/O in a
- * different manner by calling png_set_???_fn(). See libpng.txt for
- * more information.
- */
-
-#if !defined(PNG_NO_STDIO)
-/* Initialize the input/output for the PNG file to the default functions. */
-extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp));
-#endif
-
-/* Replace the (error and abort), and warning functions with user
- * supplied functions. If no messages are to be printed you must still
- * write and use replacement functions. The replacement error_fn should
- * still do a longjmp to the last setjmp location if you are using this
- * method of error handling. If error_fn or warning_fn is NULL, the
- * default function will be used.
- */
-
-extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr,
- png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn));
-
-/* Return the user pointer associated with the error functions */
-extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr));
-
-/* Replace the default data output functions with a user supplied one(s).
- * If buffered output is not used, then output_flush_fn can be set to NULL.
- * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
- * output_flush_fn will be ignored (and thus can be NULL).
- */
-extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr,
- png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
-
-/* Replace the default data input function with a user supplied one. */
-extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr,
- png_voidp io_ptr, png_rw_ptr read_data_fn));
-
-/* Return the user pointer associated with the I/O functions */
-extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr));
-
-extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr,
- png_read_status_ptr read_row_fn));
-
-extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr,
- png_write_status_ptr write_row_fn));
-
-#ifdef PNG_USER_MEM_SUPPORTED
-/* Replace the default memory allocation functions with user supplied one(s). */
-extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr,
- png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn));
-/* Return the user pointer associated with the memory functions */
-extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr));
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_LEGACY_SUPPORTED)
-extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
- png_ptr, png_user_transform_ptr read_user_transform_fn));
-#endif
-
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_LEGACY_SUPPORTED)
-extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
- png_ptr, png_user_transform_ptr write_user_transform_fn));
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_LEGACY_SUPPORTED)
-extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
- png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
- int user_transform_channels));
-/* Return the user pointer associated with the user transform functions */
-extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
- PNGARG((png_structp png_ptr));
-#endif
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr,
- png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
-extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp
- png_ptr));
-#endif
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-/* Sets the function callbacks for the push reader, and a pointer to a
- * user-defined structure available to the callback functions.
- */
-extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr,
- png_voidp progressive_ptr,
- png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
- png_progressive_end_ptr end_fn));
-
-/* returns the user pointer associated with the push read functions */
-extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
- PNGARG((png_structp png_ptr));
-
-/* function to be called when data becomes available */
-extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_bytep buffer, png_size_t buffer_size));
-
-/* function that combines rows. Not very much different than the
- * png_combine_row() call. Is this even used?????
- */
-extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr,
- png_bytep old_row, png_bytep new_row));
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-
-extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
- png_uint_32 size));
-
-#if defined(PNG_1_0_X)
-# define png_malloc_warn png_malloc
-#else
-/* Added at libpng version 1.2.4 */
-extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
- png_uint_32 size));
-#endif
-
-/* frees a pointer allocated by png_malloc() */
-extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
-
-#if defined(PNG_1_0_X)
-/* Function to allocate memory for zlib. */
-extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items,
- uInt size));
-
-/* Function to free memory for zlib */
-extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr));
-#endif
-
-/* Free data that was allocated internally */
-extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 free_me, int num));
-#ifdef PNG_FREE_ME_SUPPORTED
-/* Reassign responsibility for freeing existing data, whether allocated
- * by libpng or by the application */
-extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int freer, png_uint_32 mask));
-#endif
-/* assignments for png_data_freer */
-#define PNG_DESTROY_WILL_FREE_DATA 1
-#define PNG_SET_WILL_FREE_DATA 1
-#define PNG_USER_WILL_FREE_DATA 2
-/* Flags for png_ptr->free_me and info_ptr->free_me */
-#define PNG_FREE_HIST 0x0008
-#define PNG_FREE_ICCP 0x0010
-#define PNG_FREE_SPLT 0x0020
-#define PNG_FREE_ROWS 0x0040
-#define PNG_FREE_PCAL 0x0080
-#define PNG_FREE_SCAL 0x0100
-#define PNG_FREE_UNKN 0x0200
-#define PNG_FREE_LIST 0x0400
-#define PNG_FREE_PLTE 0x1000
-#define PNG_FREE_TRNS 0x2000
-#define PNG_FREE_TEXT 0x4000
-#define PNG_FREE_ALL 0x7fff
-#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
-
-#ifdef PNG_USER_MEM_SUPPORTED
-extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
- png_uint_32 size));
-extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
- png_voidp ptr));
-#endif
-
-extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr,
- png_voidp s1, png_voidp s2, png_uint_32 size));
-
-extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr,
- png_voidp s1, int value, png_uint_32 size));
-
-#if defined(USE_FAR_KEYWORD) /* memory model conversion function */
-extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr,
- int check));
-#endif /* USE_FAR_KEYWORD */
-
-#ifndef PNG_NO_ERROR_TEXT
-/* Fatal error in PNG image of libpng - can't continue */
-extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
- png_const_charp error_message));
-
-/* The same, but the chunk name is prepended to the error string. */
-extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
- png_const_charp error_message));
-#else
-/* Fatal error in PNG image of libpng - can't continue */
-extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr));
-#endif
-
-#ifndef PNG_NO_WARNINGS
-/* Non-fatal error in libpng. Can continue, but may have a problem. */
-extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
- png_const_charp warning_message));
-
-#ifdef PNG_READ_SUPPORTED
-/* Non-fatal error in libpng, chunk name is prepended to message. */
-extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
- png_const_charp warning_message));
-#endif /* PNG_READ_SUPPORTED */
-#endif /* PNG_NO_WARNINGS */
-
-/* The png_set_<chunk> functions are for storing values in the png_info_struct.
- * Similarly, the png_get_<chunk> calls are used to read values from the
- * png_info_struct, either storing the parameters in the passed variables, or
- * setting pointers into the png_info_struct where the data is stored. The
- * png_get_<chunk> functions return a non-zero value if the data was available
- * in info_ptr, or return zero and do not change any of the parameters if the
- * data was not available.
- *
- * These functions should be used instead of directly accessing png_info
- * to avoid problems with future changes in the size and internal layout of
- * png_info_struct.
- */
-/* Returns "flag" if chunk data is valid in info_ptr. */
-extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr,
-png_infop info_ptr, png_uint_32 flag));
-
-/* Returns number of bytes needed to hold a transformed row. */
-extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-/* Returns row_pointers, which is an array of pointers to scanlines that was
-returned from png_read_png(). */
-extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-/* Set row_pointers, which is an array of pointers to scanlines for use
-by png_write_png(). */
-extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_bytepp row_pointers));
-#endif
-
-/* Returns number of color channels in image. */
-extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-#ifdef PNG_EASY_ACCESS_SUPPORTED
-/* Returns image width in pixels. */
-extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns image height in pixels. */
-extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns image bit_depth. */
-extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns image color_type. */
-extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns image filter_type. */
-extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns image interlace_type. */
-extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns image compression_type. */
-extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns image resolution in pixels per meter, from pHYs chunk data. */
-extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-/* Returns pixel aspect ratio, computed from pHYs chunk data. */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-#endif
-
-/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
-extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp
-png_ptr, png_infop info_ptr));
-
-#endif /* PNG_EASY_ACCESS_SUPPORTED */
-
-/* Returns pointer to signature string read from PNG header */
-extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-#if defined(PNG_bKGD_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_color_16p *background));
-#endif
-
-#if defined(PNG_bKGD_SUPPORTED)
-extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_color_16p background));
-#endif
-
-#if defined(PNG_cHRM_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
- png_infop info_ptr, double *white_x, double *white_y, double *red_x,
- double *red_y, double *green_x, double *green_y, double *blue_x,
- double *blue_y));
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point
- *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y,
- png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point
- *int_blue_x, png_fixed_point *int_blue_y));
-#endif
-#endif
-
-#if defined(PNG_cHRM_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
- png_infop info_ptr, double white_x, double white_y, double red_x,
- double red_y, double green_x, double green_y, double blue_x, double blue_y));
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y,
- png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
- int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
- png_fixed_point int_blue_y));
-#endif
-#endif
-
-#if defined(PNG_gAMA_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
- png_infop info_ptr, double *file_gamma));
-#endif
-extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_fixed_point *int_file_gamma));
-#endif
-
-#if defined(PNG_gAMA_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
- png_infop info_ptr, double file_gamma));
-#endif
-extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_fixed_point int_file_gamma));
-#endif
-
-#if defined(PNG_hIST_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_16p *hist));
-#endif
-
-#if defined(PNG_hIST_SUPPORTED)
-extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_16p hist));
-#endif
-
-extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 *width, png_uint_32 *height,
- int *bit_depth, int *color_type, int *interlace_method,
- int *compression_method, int *filter_method));
-
-extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
- int color_type, int interlace_method, int compression_method,
- int filter_method));
-
-#if defined(PNG_oFFs_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
- int *unit_type));
-#endif
-
-#if defined(PNG_oFFs_SUPPORTED)
-extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
- int unit_type));
-#endif
-
-#if defined(PNG_pCAL_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
- int *type, int *nparams, png_charp *units, png_charpp *params));
-#endif
-
-#if defined(PNG_pCAL_SUPPORTED)
-extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
- int type, int nparams, png_charp units, png_charpp params));
-#endif
-
-#if defined(PNG_pHYs_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
-#endif
-
-#if defined(PNG_pHYs_SUPPORTED)
-extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
-#endif
-
-extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_colorp *palette, int *num_palette));
-
-extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_colorp palette, int num_palette));
-
-#if defined(PNG_sBIT_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_color_8p *sig_bit));
-#endif
-
-#if defined(PNG_sBIT_SUPPORTED)
-extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_color_8p sig_bit));
-#endif
-
-#if defined(PNG_sRGB_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int *intent));
-#endif
-
-#if defined(PNG_sRGB_SUPPORTED)
-extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int intent));
-extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int intent));
-#endif
-
-#if defined(PNG_iCCP_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_charpp name, int *compression_type,
- png_charpp profile, png_uint_32 *proflen));
- /* Note to maintainer: profile should be png_bytepp */
-#endif
-
-#if defined(PNG_iCCP_SUPPORTED)
-extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_charp name, int compression_type,
- png_charp profile, png_uint_32 proflen));
- /* Note to maintainer: profile should be png_bytep */
-#endif
-
-#if defined(PNG_sPLT_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_sPLT_tpp entries));
-#endif
-
-#if defined(PNG_sPLT_SUPPORTED)
-extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_sPLT_tp entries, int nentries));
-#endif
-
-#if defined(PNG_TEXT_SUPPORTED)
-/* png_get_text also returns the number of text chunks in *num_text */
-extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_textp *text_ptr, int *num_text));
-#endif
-
-/*
- * Note while png_set_text() will accept a structure whose text,
- * language, and translated keywords are NULL pointers, the structure
- * returned by png_get_text will always contain regular
- * zero-terminated C strings. They might be empty strings but
- * they will never be NULL pointers.
- */
-
-#if defined(PNG_TEXT_SUPPORTED)
-extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_textp text_ptr, int num_text));
-#endif
-
-#if defined(PNG_tIME_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_timep *mod_time));
-#endif
-
-#if defined(PNG_tIME_SUPPORTED)
-extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_timep mod_time));
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED)
-extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_bytep *trans, int *num_trans,
- png_color_16p *trans_values));
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED)
-extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_bytep trans, int num_trans,
- png_color_16p trans_values));
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED)
-#endif
-
-#if defined(PNG_sCAL_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int *unit, double *width, double *height));
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
-extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
-#endif
-#endif
-#endif /* PNG_sCAL_SUPPORTED */
-
-#if defined(PNG_sCAL_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int unit, double width, double height));
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
-extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int unit, png_charp swidth, png_charp sheight));
-#endif
-#endif
-#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-/* provide a list of chunks and how they are to be handled, if the built-in
- handling or default unknown chunk handling is not desired. Any chunks not
- listed will be handled in the default manner. The IHDR and IEND chunks
- must not be listed.
- keep = 0: follow default behaviour
- = 1: do not keep
- = 2: keep only if safe-to-copy
- = 3: keep even if unsafe-to-copy
-*/
-extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
- png_ptr, int keep, png_bytep chunk_list, int num_chunks));
-extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
-extern PNG_EXPORT(void, png_set_unknown_chunk_location)
- PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location));
-extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
- png_ptr, png_infop info_ptr, png_unknown_chunkpp entries));
-#endif
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep
- chunk_name));
-#endif
-
-/* Png_free_data() will turn off the "valid" flag for anything it frees.
- If you need to turn it off for a chunk that your application has freed,
- you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */
-extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
- png_infop info_ptr, int mask));
-
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-/* The "params" pointer is currently not used and is for future expansion. */
-extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
- png_infop info_ptr,
- int transforms,
- png_voidp params));
-extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
- png_infop info_ptr,
- int transforms,
- png_voidp params));
-#endif
-
-/* Define PNG_DEBUG at compile time for debugging information. Higher
- * numbers for PNG_DEBUG mean more debugging information. This has
- * only been added since version 0.95 so it is not implemented throughout
- * libpng yet, but more support will be added as needed.
- */
-#ifdef PNG_DEBUG
-#if (PNG_DEBUG > 0)
-#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
-#include <crtdbg.h>
-#if (PNG_DEBUG > 1)
-#define png_debug(l,m) _RPT0(_CRT_WARN,m)
-#define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m,p1)
-#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2)
-#endif
-#else /* PNG_DEBUG_FILE || !_MSC_VER */
-#ifndef PNG_DEBUG_FILE
-#define PNG_DEBUG_FILE stderr
-#endif /* PNG_DEBUG_FILE */
-#if (PNG_DEBUG > 1)
-#define png_debug(l,m) \
-{ \
- int num_tabs=l; \
- fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
- (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \
-}
-#define png_debug1(l,m,p1) \
-{ \
- int num_tabs=l; \
- fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
- (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \
-}
-#define png_debug2(l,m,p1,p2) \
-{ \
- int num_tabs=l; \
- fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
- (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \
-}
-#endif /* (PNG_DEBUG > 1) */
-#endif /* _MSC_VER */
-#endif /* (PNG_DEBUG > 0) */
-#endif /* PNG_DEBUG */
-#ifndef png_debug
-#define png_debug(l, m)
-#endif
-#ifndef png_debug1
-#define png_debug1(l, m, p1)
-#endif
-#ifndef png_debug2
-#define png_debug2(l, m, p1, p2)
-#endif
-
-extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
-extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
-extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
-extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
- png_ptr, png_uint_32 mng_features_permitted));
-#endif
-
-/* For use in png_set_keep_unknown, added to version 1.2.6 */
-#define PNG_HANDLE_CHUNK_AS_DEFAULT 0
-#define PNG_HANDLE_CHUNK_NEVER 1
-#define PNG_HANDLE_CHUNK_IF_SAFE 2
-#define PNG_HANDLE_CHUNK_ALWAYS 3
-
-/* Added to version 1.2.0 */
-#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
-#if defined(PNG_MMX_CODE_SUPPORTED)
-#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */
-#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */
-#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04
-#define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08
-#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10
-#define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20
-#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40
-#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80
-#define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */
-
-#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \
- | PNG_ASM_FLAG_MMX_READ_INTERLACE \
- | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \
- | PNG_ASM_FLAG_MMX_READ_FILTER_UP \
- | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \
- | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH )
-#define PNG_MMX_WRITE_FLAGS ( 0 )
-
-#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \
- | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \
- | PNG_MMX_READ_FLAGS \
- | PNG_MMX_WRITE_FLAGS )
-
-#define PNG_SELECT_READ 1
-#define PNG_SELECT_WRITE 2
-#endif /* PNG_MMX_CODE_SUPPORTED */
-
-#if !defined(PNG_1_0_X)
-/* pngget.c */
-extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask)
- PNGARG((int flag_select, int *compilerID));
-
-/* pngget.c */
-extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask)
- PNGARG((int flag_select));
-
-/* pngget.c */
-extern PNG_EXPORT(png_uint_32,png_get_asm_flags)
- PNGARG((png_structp png_ptr));
-
-/* pngget.c */
-extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold)
- PNGARG((png_structp png_ptr));
-
-/* pngget.c */
-extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold)
- PNGARG((png_structp png_ptr));
-
-/* pngset.c */
-extern PNG_EXPORT(void,png_set_asm_flags)
- PNGARG((png_structp png_ptr, png_uint_32 asm_flags));
-
-/* pngset.c */
-extern PNG_EXPORT(void,png_set_mmx_thresholds)
- PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold,
- png_uint_32 mmx_rowbytes_threshold));
-
-#endif /* PNG_1_0_X */
-
-#if !defined(PNG_1_0_X)
-/* png.c, pnggccrd.c, or pngvcrd.c */
-extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
-#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
-
-/* Strip the prepended error numbers ("#nnn ") from error and warning
- * messages before passing them to the error or warning handler. */
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp
- png_ptr, png_uint_32 strip_mode));
-#endif
-
-#endif /* PNG_1_0_X */
-
-/* Added at libpng-1.2.6 */
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
- png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max));
-extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp
- png_ptr));
-extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
- png_ptr));
-#endif
-
-/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */
-
-#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
-/* With these routines we avoid an integer divide, which will be slower on
- * most machines. However, it does take more operations than the corresponding
- * divide method, so it may be slower on a few RISC systems. There are two
- * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
- *
- * Note that the rounding factors are NOT supposed to be the same! 128 and
- * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
- * standard method.
- *
- * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
- */
-
- /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
-
-# define png_composite(composite, fg, alpha, bg) \
- { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \
- + (png_uint_16)(bg)*(png_uint_16)(255 - \
- (png_uint_16)(alpha)) + (png_uint_16)128); \
- (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
-
-# define png_composite_16(composite, fg, alpha, bg) \
- { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \
- + (png_uint_32)(bg)*(png_uint_32)(65535L - \
- (png_uint_32)(alpha)) + (png_uint_32)32768L); \
- (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
-
-#else /* standard method using integer division */
-
-# define png_composite(composite, fg, alpha, bg) \
- (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \
- (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \
- (png_uint_16)127) / 255)
-
-# define png_composite_16(composite, fg, alpha, bg) \
- (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
- (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \
- (png_uint_32)32767) / (png_uint_32)65535L)
-
-#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
-
-/* Inline macros to do direct reads of bytes from the input buffer. These
- * require that you are using an architecture that uses PNG byte ordering
- * (MSB first) and supports unaligned data storage. I think that PowerPC
- * in big-endian mode and 680x0 are the only ones that will support this.
- * The x86 line of processors definitely do not. The png_get_int_32()
- * routine also assumes we are using two's complement format for negative
- * values, which is almost certainly true.
- */
-#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED)
-# define png_get_uint_32(buf) ( *((png_uint_32p) (buf)))
-# define png_get_uint_16(buf) ( *((png_uint_16p) (buf)))
-# define png_get_int_32(buf) ( *((png_int_32p) (buf)))
-#else
-extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf));
-extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf));
-extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf));
-#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */
-extern PNG_EXPORT(png_uint_32,png_get_uint_31)
- PNGARG((png_structp png_ptr, png_bytep buf));
-/* No png_get_int_16 -- may be added if there's a real need for it. */
-
-/* Place a 32-bit number into a buffer in PNG byte order (big-endian).
- */
-extern PNG_EXPORT(void,png_save_uint_32)
- PNGARG((png_bytep buf, png_uint_32 i));
-extern PNG_EXPORT(void,png_save_int_32)
- PNGARG((png_bytep buf, png_int_32 i));
-
-/* Place a 16-bit number into a buffer in PNG byte order.
- * The parameter is declared unsigned int, not png_uint_16,
- * just to avoid potential problems on pre-ANSI C compilers.
- */
-extern PNG_EXPORT(void,png_save_uint_16)
- PNGARG((png_bytep buf, unsigned int i));
-/* No png_save_int_16 -- may be added if there's a real need for it. */
-
-/* ************************************************************************* */
-
-/* These next functions are used internally in the code. They generally
- * shouldn't be used unless you are writing code to add or replace some
- * functionality in libpng. More information about most functions can
- * be found in the files where the functions are located.
- */
-
-
-/* Various modes of operation, that are visible to applications because
- * they are used for unknown chunk location.
- */
-#define PNG_HAVE_IHDR 0x01
-#define PNG_HAVE_PLTE 0x02
-#define PNG_HAVE_IDAT 0x04
-#define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */
-#define PNG_HAVE_IEND 0x10
-
-#if defined(PNG_INTERNAL)
-
-/* More modes of operation. Note that after an init, mode is set to
- * zero automatically when the structure is created.
- */
-#define PNG_HAVE_gAMA 0x20
-#define PNG_HAVE_cHRM 0x40
-#define PNG_HAVE_sRGB 0x80
-#define PNG_HAVE_CHUNK_HEADER 0x100
-#define PNG_WROTE_tIME 0x200
-#define PNG_WROTE_INFO_BEFORE_PLTE 0x400
-#define PNG_BACKGROUND_IS_GRAY 0x800
-#define PNG_HAVE_PNG_SIGNATURE 0x1000
-#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
-
-/* flags for the transformations the PNG library does on the image data */
-#define PNG_BGR 0x0001
-#define PNG_INTERLACE 0x0002
-#define PNG_PACK 0x0004
-#define PNG_SHIFT 0x0008
-#define PNG_SWAP_BYTES 0x0010
-#define PNG_INVERT_MONO 0x0020
-#define PNG_DITHER 0x0040
-#define PNG_BACKGROUND 0x0080
-#define PNG_BACKGROUND_EXPAND 0x0100
- /* 0x0200 unused */
-#define PNG_16_TO_8 0x0400
-#define PNG_RGBA 0x0800
-#define PNG_EXPAND 0x1000
-#define PNG_GAMMA 0x2000
-#define PNG_GRAY_TO_RGB 0x4000
-#define PNG_FILLER 0x8000L
-#define PNG_PACKSWAP 0x10000L
-#define PNG_SWAP_ALPHA 0x20000L
-#define PNG_STRIP_ALPHA 0x40000L
-#define PNG_INVERT_ALPHA 0x80000L
-#define PNG_USER_TRANSFORM 0x100000L
-#define PNG_RGB_TO_GRAY_ERR 0x200000L
-#define PNG_RGB_TO_GRAY_WARN 0x400000L
-#define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */
- /* 0x800000L Unused */
-#define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */
-#define PNG_EXPAND_tRNS 0x2000000L /* Added to libpng-1.2.9 */
- /* 0x4000000L unused */
- /* 0x8000000L unused */
- /* 0x10000000L unused */
- /* 0x20000000L unused */
- /* 0x40000000L unused */
-
-/* flags for png_create_struct */
-#define PNG_STRUCT_PNG 0x0001
-#define PNG_STRUCT_INFO 0x0002
-
-/* Scaling factor for filter heuristic weighting calculations */
-#define PNG_WEIGHT_SHIFT 8
-#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
-#define PNG_COST_SHIFT 3
-#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
-
-/* flags for the png_ptr->flags rather than declaring a byte for each one */
-#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001
-#define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002
-#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004
-#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008
-#define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010
-#define PNG_FLAG_ZLIB_FINISHED 0x0020
-#define PNG_FLAG_ROW_INIT 0x0040
-#define PNG_FLAG_FILLER_AFTER 0x0080
-#define PNG_FLAG_CRC_ANCILLARY_USE 0x0100
-#define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200
-#define PNG_FLAG_CRC_CRITICAL_USE 0x0400
-#define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800
-#define PNG_FLAG_FREE_PLTE 0x1000
-#define PNG_FLAG_FREE_TRNS 0x2000
-#define PNG_FLAG_FREE_HIST 0x4000
-#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L
-#define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L
-#define PNG_FLAG_LIBRARY_MISMATCH 0x20000L
-#define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L
-#define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L
-#define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L
-#define PNG_FLAG_ADD_ALPHA 0x200000L /* Added to libpng-1.2.8 */
-#define PNG_FLAG_STRIP_ALPHA 0x400000L /* Added to libpng-1.2.8 */
- /* 0x800000L unused */
- /* 0x1000000L unused */
- /* 0x2000000L unused */
- /* 0x4000000L unused */
- /* 0x8000000L unused */
- /* 0x10000000L unused */
- /* 0x20000000L unused */
- /* 0x40000000L unused */
-
-#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
- PNG_FLAG_CRC_ANCILLARY_NOWARN)
-
-#define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \
- PNG_FLAG_CRC_CRITICAL_IGNORE)
-
-#define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \
- PNG_FLAG_CRC_CRITICAL_MASK)
-
-/* save typing and make code easier to understand */
-
-#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
- abs((int)((c1).green) - (int)((c2).green)) + \
- abs((int)((c1).blue) - (int)((c2).blue)))
-
-/* Added to libpng-1.2.6 JB */
-#define PNG_ROWBYTES(pixel_bits, width) \
- ((pixel_bits) >= 8 ? \
- ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \
- (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) )
-
-/* PNG_OUT_OF_RANGE returns true if value is outside the range
- ideal-delta..ideal+delta. Each argument is evaluated twice.
- "ideal" and "delta" should be constants, normally simple
- integers, "value" a variable. Added to libpng-1.2.6 JB */
-#define PNG_OUT_OF_RANGE(value, ideal, delta) \
- ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )
-
-/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */
-#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
-/* place to hold the signature string for a PNG file. */
-#ifdef PNG_USE_GLOBAL_ARRAYS
- PNG_EXPORT_VAR (PNG_CONST png_byte FARDATA) png_sig[8];
-#else
-#endif
-#endif /* PNG_NO_EXTERN */
-
-/* Constant strings for known chunk types. If you need to add a chunk,
- * define the name here, and add an invocation of the macro in png.c and
- * wherever it's needed.
- */
-#define PNG_IHDR png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'}
-#define PNG_IDAT png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'}
-#define PNG_IEND png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'}
-#define PNG_PLTE png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'}
-#define PNG_bKGD png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'}
-#define PNG_cHRM png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'}
-#define PNG_gAMA png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'}
-#define PNG_hIST png_byte png_hIST[5] = {104, 73, 83, 84, '\0'}
-#define PNG_iCCP png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'}
-#define PNG_iTXt png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'}
-#define PNG_oFFs png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'}
-#define PNG_pCAL png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'}
-#define PNG_sCAL png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'}
-#define PNG_pHYs png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'}
-#define PNG_sBIT png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'}
-#define PNG_sPLT png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'}
-#define PNG_sRGB png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'}
-#define PNG_tEXt png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'}
-#define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'}
-#define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'}
-#define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'}
-
-#ifdef PNG_USE_GLOBAL_ARRAYS
-PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_IDAT[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_IEND[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_PLTE[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_bKGD[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_cHRM[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_gAMA[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_hIST[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_iCCP[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_iTXt[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_oFFs[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_pCAL[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_sCAL[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_pHYs[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_sBIT[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_sPLT[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_sRGB[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_tEXt[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
-PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
-#endif /* PNG_USE_GLOBAL_ARRAYS */
-
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-/* Initialize png_ptr struct for reading, and allocate any other memory.
- * (old interface - DEPRECATED - use png_create_read_struct instead).
- */
-extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr));
-#undef png_read_init
-#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \
- PNG_LIBPNG_VER_STRING, png_sizeof(png_struct));
-#endif
-
-extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr,
- png_const_charp user_png_ver, png_size_t png_struct_size));
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr,
- png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
- png_info_size));
-#endif
-
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-/* Initialize png_ptr struct for writing, and allocate any other memory.
- * (old interface - DEPRECATED - use png_create_write_struct instead).
- */
-extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr));
-#undef png_write_init
-#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \
- PNG_LIBPNG_VER_STRING, png_sizeof(png_struct));
-#endif
-
-extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr,
- png_const_charp user_png_ver, png_size_t png_struct_size));
-extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr,
- png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
- png_info_size));
-
-/* Allocate memory for an internal libpng struct */
-PNG_EXTERN png_voidp png_create_struct PNGARG((int type));
-
-/* Free memory from internal libpng struct */
-PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr));
-
-PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr
- malloc_fn, png_voidp mem_ptr));
-PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr,
- png_free_ptr free_fn, png_voidp mem_ptr));
-
-/* Free any memory that info_ptr points to and reset struct. */
-PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-
-#ifndef PNG_1_0_X
-/* Function to allocate memory for zlib. */
-PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size));
-
-/* Function to free memory for zlib */
-PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr));
-
-#ifdef PNG_SIZE_T
-/* Function to convert a sizeof an item to png_sizeof item */
- PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size));
-#endif
-
-/* Next four functions are used internally as callbacks. PNGAPI is required
- * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */
-
-PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr,
- png_bytep data, png_size_t length));
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr,
- png_bytep buffer, png_size_t length));
-#endif
-
-PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr,
- png_bytep data, png_size_t length));
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
-#if !defined(PNG_NO_STDIO)
-PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr));
-#endif
-#endif
-#else /* PNG_1_0_X */
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr,
- png_bytep buffer, png_size_t length));
-#endif
-#endif /* PNG_1_0_X */
-
-/* Reset the CRC variable */
-PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr));
-
-/* Write the "data" buffer to whatever output you are using. */
-PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data,
- png_size_t length));
-
-/* Read data from whatever input you are using into the "data" buffer */
-PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data,
- png_size_t length));
-
-/* Read bytes into buf, and update png_ptr->crc */
-PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,
- png_size_t length));
-
-/* Decompress data in a chunk that uses compression */
-#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \
- defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
-PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr,
- int comp_type, png_charp chunkdata, png_size_t chunklength,
- png_size_t prefix_length, png_size_t *data_length));
-#endif
-
-/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */
-PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip));
-
-/* Read the CRC from the file and compare it to the libpng calculated CRC */
-PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr));
-
-/* Calculate the CRC over a section of data. Note that we are only
- * passing a maximum of 64K on systems that have this as a memory limit,
- * since this is the maximum buffer size we can specify.
- */
-PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr,
- png_size_t length));
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
-PNG_EXTERN void png_flush PNGARG((png_structp png_ptr));
-#endif
-
-/* simple function to write the signature */
-PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr));
-
-/* write various chunks */
-
-/* Write the IHDR chunk, and update the png_struct with the necessary
- * information.
- */
-PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,
- png_uint_32 height,
- int bit_depth, int color_type, int compression_method, int filter_method,
- int interlace_method));
-
-PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette,
- png_uint_32 num_pal));
-
-PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data,
- png_size_t length));
-
-PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr));
-
-#if defined(PNG_WRITE_gAMA_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma));
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point
- file_gamma));
-#endif
-#endif
-
-#if defined(PNG_WRITE_sBIT_SUPPORTED)
-PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit,
- int color_type));
-#endif
-
-#if defined(PNG_WRITE_cHRM_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr,
- double white_x, double white_y,
- double red_x, double red_y, double green_x, double green_y,
- double blue_x, double blue_y));
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr,
- png_fixed_point int_white_x, png_fixed_point int_white_y,
- png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
- int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
- png_fixed_point int_blue_y));
-#endif
-#endif
-
-#if defined(PNG_WRITE_sRGB_SUPPORTED)
-PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr,
- int intent));
-#endif
-
-#if defined(PNG_WRITE_iCCP_SUPPORTED)
-PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr,
- png_charp name, int compression_type,
- png_charp profile, int proflen));
- /* Note to maintainer: profile should be png_bytep */
-#endif
-
-#if defined(PNG_WRITE_sPLT_SUPPORTED)
-PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr,
- png_sPLT_tp palette));
-#endif
-
-#if defined(PNG_WRITE_tRNS_SUPPORTED)
-PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans,
- png_color_16p values, int number, int color_type));
-#endif
-
-#if defined(PNG_WRITE_bKGD_SUPPORTED)
-PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr,
- png_color_16p values, int color_type));
-#endif
-
-#if defined(PNG_WRITE_hIST_SUPPORTED)
-PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist,
- int num_hist));
-#endif
-
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
- defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
-PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr,
- png_charp key, png_charpp new_key));
-#endif
-
-#if defined(PNG_WRITE_tEXt_SUPPORTED)
-PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key,
- png_charp text, png_size_t text_len));
-#endif
-
-#if defined(PNG_WRITE_zTXt_SUPPORTED)
-PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key,
- png_charp text, png_size_t text_len, int compression));
-#endif
-
-#if defined(PNG_WRITE_iTXt_SUPPORTED)
-PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr,
- int compression, png_charp key, png_charp lang, png_charp lang_key,
- png_charp text));
-#endif
-
-#if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */
-PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_textp text_ptr, int num_text));
-#endif
-
-#if defined(PNG_WRITE_oFFs_SUPPORTED)
-PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr,
- png_int_32 x_offset, png_int_32 y_offset, int unit_type));
-#endif
-
-#if defined(PNG_WRITE_pCAL_SUPPORTED)
-PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose,
- png_int_32 X0, png_int_32 X1, int type, int nparams,
- png_charp units, png_charpp params));
-#endif
-
-#if defined(PNG_WRITE_pHYs_SUPPORTED)
-PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr,
- png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,
- int unit_type));
-#endif
-
-#if defined(PNG_WRITE_tIME_SUPPORTED)
-PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr,
- png_timep mod_time));
-#endif
-
-#if defined(PNG_WRITE_sCAL_SUPPORTED)
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
-PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr,
- int unit, double width, double height));
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
-PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr,
- int unit, png_charp width, png_charp height));
-#endif
-#endif
-#endif
-
-/* Called when finished processing a row of data */
-PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
-
-/* Internal use only. Called before first row of data */
-PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr));
-
-#if defined(PNG_READ_GAMMA_SUPPORTED)
-PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr));
-#endif
-
-/* combine a row of data, dealing with alpha, etc. if requested */
-PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,
- int mask));
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED)
-/* expand an interlaced row */
-/* OLD pre-1.0.9 interface:
-PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,
- png_bytep row, int pass, png_uint_32 transformations));
- */
-PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr));
-#endif
-
-/* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */
-
-#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
-/* grab pixels out of a row for an interlaced pass */
-PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info,
- png_bytep row, int pass));
-#endif
-
-/* unfilter a row */
-PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr,
- png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter));
-
-/* Choose the best filter to use and filter the row data */
-PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr,
- png_row_infop row_info));
-
-/* Write out the filtered row. */
-PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr,
- png_bytep filtered_row));
-/* finish a row while reading, dealing with interlacing passes, etc. */
-PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr));
-
-/* initialize the row buffers, etc. */
-PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr));
-/* optional call to update the users info structure */
-PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-
-/* these are the functions that do the transformations */
-#if defined(PNG_READ_FILLER_SUPPORTED)
-PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
- png_bytep row, png_uint_32 filler, png_uint_32 flags));
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
-PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info,
- png_bytep row));
-#endif
-
-#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info,
- png_bytep row));
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
-PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info,
- png_bytep row));
-#endif
-
-#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info,
- png_bytep row));
-#endif
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
- defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info,
- png_bytep row, png_uint_32 flags));
-#endif
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row));
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row));
-#endif
-
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop
- row_info, png_bytep row));
-#endif
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
-PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info,
- png_bytep row));
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED)
-PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row));
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED)
-PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row,
- png_color_8p sig_bits));
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row));
-#endif
-
-#if defined(PNG_READ_16_TO_8_SUPPORTED)
-PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row));
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
-PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info,
- png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup));
-
-# if defined(PNG_CORRECT_PALETTE_SUPPORTED)
-PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr,
- png_colorp palette, int num_palette));
-# endif
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row));
-#endif
-
-#if defined(PNG_WRITE_PACK_SUPPORTED)
-PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info,
- png_bytep row, png_uint_32 bit_depth));
-#endif
-
-#if defined(PNG_WRITE_SHIFT_SUPPORTED)
-PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row,
- png_color_8p bit_depth));
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
-#if defined(PNG_READ_GAMMA_SUPPORTED)
-PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
- png_color_16p trans_values, png_color_16p background,
- png_color_16p background_1,
- png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1,
- png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1,
- png_uint_16pp gamma_16_to_1, int gamma_shift));
-#else
-PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
- png_color_16p trans_values, png_color_16p background));
-#endif
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED)
-PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row,
- png_bytep gamma_table, png_uint_16pp gamma_16_table,
- int gamma_shift));
-#endif
-
-#if defined(PNG_READ_EXPAND_SUPPORTED)
-PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info,
- png_bytep row, png_colorp palette, png_bytep trans, int num_trans));
-PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info,
- png_bytep row, png_color_16p trans_value));
-#endif
-
-/* The following decodes the appropriate chunks, and does error correction,
- * then calls the appropriate callback for the chunk if it is valid.
- */
-
-/* decode the IHDR chunk */
-PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-
-#if defined(PNG_READ_bKGD_SUPPORTED)
-PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_cHRM_SUPPORTED)
-PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_gAMA_SUPPORTED)
-PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_hIST_SUPPORTED)
-PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_iCCP_SUPPORTED)
-extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif /* PNG_READ_iCCP_SUPPORTED */
-
-#if defined(PNG_READ_iTXt_SUPPORTED)
-PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_oFFs_SUPPORTED)
-PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_pCAL_SUPPORTED)
-PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_pHYs_SUPPORTED)
-PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_sBIT_SUPPORTED)
-PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_sCAL_SUPPORTED)
-PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_sPLT_SUPPORTED)
-extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif /* PNG_READ_sPLT_SUPPORTED */
-
-#if defined(PNG_READ_sRGB_SUPPORTED)
-PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_tEXt_SUPPORTED)
-PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_tIME_SUPPORTED)
-PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_tRNS_SUPPORTED)
-PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-#if defined(PNG_READ_zTXt_SUPPORTED)
-PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
- png_uint_32 length));
-#endif
-
-PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 length));
-
-PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr,
- png_bytep chunk_name));
-
-/* handle the transformations for reading and writing */
-PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr));
-PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr));
-
-PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr));
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr));
-PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr,
- png_uint_32 length));
-PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr));
-PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr));
-PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr,
- png_bytep buffer, png_size_t buffer_length));
-PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr));
-PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr,
- png_bytep buffer, png_size_t buffer_length));
-PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr));
-PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 length));
-PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row));
-PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr));
-#if defined(PNG_READ_tEXt_SUPPORTED)
-PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 length));
-PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
-PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 length));
-PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
-PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr,
- png_infop info_ptr, png_uint_32 length));
-PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr,
- png_infop info_ptr));
-#endif
-
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info,
- png_bytep row));
-PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info,
- png_bytep row));
-#endif
-
-#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
-#if defined(PNG_MMX_CODE_SUPPORTED)
-/* png.c */ /* PRIVATE */
-PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr));
-#endif
-#endif
-
-#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
-PNG_EXTERN png_uint_32 png_get_pixels_per_inch PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-PNG_EXTERN png_uint_32 png_get_x_pixels_per_inch PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-PNG_EXTERN png_uint_32 png_get_y_pixels_per_inch PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-PNG_EXTERN float png_get_x_offset_inches PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-PNG_EXTERN float png_get_y_offset_inches PNGARG((png_structp png_ptr,
-png_infop info_ptr));
-
-#if defined(PNG_pHYs_SUPPORTED)
-PNG_EXTERN png_uint_32 png_get_pHYs_dpi PNGARG((png_structp png_ptr,
-png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
-#endif /* PNG_pHYs_SUPPORTED */
-#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
-
-/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
-
-#endif /* PNG_INTERNAL */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PNG_VERSION_INFO_ONLY */
-/* do not put anything past this line */
-#endif /* PNG_H */
diff --git a/Build/source/libs/libpng/pngbar.jpg b/Build/source/libs/libpng/pngbar.jpg
deleted file mode 100644
index 70ba8d817ce..00000000000
--- a/Build/source/libs/libpng/pngbar.jpg
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/libpng/pngbar.png b/Build/source/libs/libpng/pngbar.png
deleted file mode 100644
index 49798c8ed95..00000000000
--- a/Build/source/libs/libpng/pngbar.png
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/libpng/pngconf.h b/Build/source/libs/libpng/pngconf.h
deleted file mode 100644
index d1e29957e0b..00000000000
--- a/Build/source/libs/libpng/pngconf.h
+++ /dev/null
@@ -1,1481 +0,0 @@
-
-/* pngconf.h - machine configurable file for libpng
- *
- * libpng version 1.2.29 - May 8, 2008
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-/* Any machine specific code is near the front of this file, so if you
- * are configuring libpng for a machine, you may want to read the section
- * starting here down to where it starts to typedef png_color, png_text,
- * and png_info.
- */
-
-#ifndef PNGCONF_H
-#define PNGCONF_H
-
-#define PNG_1_2_X
-
-/*
- * PNG_USER_CONFIG has to be defined on the compiler command line. This
- * includes the resource compiler for Windows DLL configurations.
- */
-#ifdef PNG_USER_CONFIG
-# ifndef PNG_USER_PRIVATEBUILD
-# define PNG_USER_PRIVATEBUILD
-# endif
-#include "pngusr.h"
-#endif
-
-/* PNG_CONFIGURE_LIBPNG is set by the "configure" script. */
-#ifdef PNG_CONFIGURE_LIBPNG
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#endif
-
-/*
- * Added at libpng-1.2.8
- *
- * If you create a private DLL you need to define in "pngusr.h" the followings:
- * #define PNG_USER_PRIVATEBUILD <Describes by whom and why this version of
- * the DLL was built>
- * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
- * #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to
- * distinguish your DLL from those of the official release. These
- * correspond to the trailing letters that come after the version
- * number and must match your private DLL name>
- * e.g. // private DLL "libpng13gx.dll"
- * #define PNG_USER_DLLFNAME_POSTFIX "gx"
- *
- * The following macros are also at your disposal if you want to complete the
- * DLL VERSIONINFO structure.
- * - PNG_USER_VERSIONINFO_COMMENTS
- * - PNG_USER_VERSIONINFO_COMPANYNAME
- * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
- */
-
-#ifdef __STDC__
-#ifdef SPECIALBUILD
-# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\
- are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.")
-#endif
-
-#ifdef PRIVATEBUILD
-# pragma message("PRIVATEBUILD is deprecated.\
- Use PNG_USER_PRIVATEBUILD instead.")
-# define PNG_USER_PRIVATEBUILD PRIVATEBUILD
-#endif
-#endif /* __STDC__ */
-
-#ifndef PNG_VERSION_INFO_ONLY
-
-/* End of material added to libpng-1.2.8 */
-
-/* Added at libpng-1.2.19, removed at libpng-1.2.20 because it caused trouble
- Restored at libpng-1.2.21 */
-#if !defined(PNG_NO_WARN_UNINITIALIZED_ROW) && \
- !defined(PNG_WARN_UNINITIALIZED_ROW)
-# define PNG_WARN_UNINITIALIZED_ROW 1
-#endif
-/* End of material added at libpng-1.2.19/1.2.21 */
-
-/* This is the size of the compression buffer, and thus the size of
- * an IDAT chunk. Make this whatever size you feel is best for your
- * machine. One of these will be allocated per png_struct. When this
- * is full, it writes the data to the disk, and does some other
- * calculations. Making this an extremely small size will slow
- * the library down, but you may want to experiment to determine
- * where it becomes significant, if you are concerned with memory
- * usage. Note that zlib allocates at least 32Kb also. For readers,
- * this describes the size of the buffer available to read the data in.
- * Unless this gets smaller than the size of a row (compressed),
- * it should not make much difference how big this is.
- */
-
-#ifndef PNG_ZBUF_SIZE
-# define PNG_ZBUF_SIZE 8192
-#endif
-
-/* Enable if you want a write-only libpng */
-
-#ifndef PNG_NO_READ_SUPPORTED
-# define PNG_READ_SUPPORTED
-#endif
-
-/* Enable if you want a read-only libpng */
-
-#ifndef PNG_NO_WRITE_SUPPORTED
-# define PNG_WRITE_SUPPORTED
-#endif
-
-/* Enabled by default in 1.2.0. You can disable this if you don't need to
- support PNGs that are embedded in MNG datastreams */
-#if !defined(PNG_1_0_X) && !defined(PNG_NO_MNG_FEATURES)
-# ifndef PNG_MNG_FEATURES_SUPPORTED
-# define PNG_MNG_FEATURES_SUPPORTED
-# endif
-#endif
-
-#ifndef PNG_NO_FLOATING_POINT_SUPPORTED
-# ifndef PNG_FLOATING_POINT_SUPPORTED
-# define PNG_FLOATING_POINT_SUPPORTED
-# endif
-#endif
-
-/* If you are running on a machine where you cannot allocate more
- * than 64K of memory at once, uncomment this. While libpng will not
- * normally need that much memory in a chunk (unless you load up a very
- * large file), zlib needs to know how big of a chunk it can use, and
- * libpng thus makes sure to check any memory allocation to verify it
- * will fit into memory.
-#define PNG_MAX_MALLOC_64K
- */
-#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
-# define PNG_MAX_MALLOC_64K
-#endif
-
-/* Special munging to support doing things the 'cygwin' way:
- * 'Normal' png-on-win32 defines/defaults:
- * PNG_BUILD_DLL -- building dll
- * PNG_USE_DLL -- building an application, linking to dll
- * (no define) -- building static library, or building an
- * application and linking to the static lib
- * 'Cygwin' defines/defaults:
- * PNG_BUILD_DLL -- (ignored) building the dll
- * (no define) -- (ignored) building an application, linking to the dll
- * PNG_STATIC -- (ignored) building the static lib, or building an
- * application that links to the static lib.
- * ALL_STATIC -- (ignored) building various static libs, or building an
- * application that links to the static libs.
- * Thus,
- * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and
- * this bit of #ifdefs will define the 'correct' config variables based on
- * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but
- * unnecessary.
- *
- * Also, the precedence order is:
- * ALL_STATIC (since we can't #undef something outside our namespace)
- * PNG_BUILD_DLL
- * PNG_STATIC
- * (nothing) == PNG_USE_DLL
- *
- * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent
- * of auto-import in binutils, we no longer need to worry about
- * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore,
- * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes
- * to __declspec() stuff. However, we DO need to worry about
- * PNG_BUILD_DLL and PNG_STATIC because those change some defaults
- * such as CONSOLE_IO and whether GLOBAL_ARRAYS are allowed.
- */
-#if defined(__CYGWIN__)
-# if defined(ALL_STATIC)
-# if defined(PNG_BUILD_DLL)
-# undef PNG_BUILD_DLL
-# endif
-# if defined(PNG_USE_DLL)
-# undef PNG_USE_DLL
-# endif
-# if defined(PNG_DLL)
-# undef PNG_DLL
-# endif
-# if !defined(PNG_STATIC)
-# define PNG_STATIC
-# endif
-# else
-# if defined (PNG_BUILD_DLL)
-# if defined(PNG_STATIC)
-# undef PNG_STATIC
-# endif
-# if defined(PNG_USE_DLL)
-# undef PNG_USE_DLL
-# endif
-# if !defined(PNG_DLL)
-# define PNG_DLL
-# endif
-# else
-# if defined(PNG_STATIC)
-# if defined(PNG_USE_DLL)
-# undef PNG_USE_DLL
-# endif
-# if defined(PNG_DLL)
-# undef PNG_DLL
-# endif
-# else
-# if !defined(PNG_USE_DLL)
-# define PNG_USE_DLL
-# endif
-# if !defined(PNG_DLL)
-# define PNG_DLL
-# endif
-# endif
-# endif
-# endif
-#endif
-
-/* This protects us against compilers that run on a windowing system
- * and thus don't have or would rather us not use the stdio types:
- * stdin, stdout, and stderr. The only one currently used is stderr
- * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will
- * prevent these from being compiled and used. #defining PNG_NO_STDIO
- * will also prevent these, plus will prevent the entire set of stdio
- * macros and functions (FILE *, printf, etc.) from being compiled and used,
- * unless (PNG_DEBUG > 0) has been #defined.
- *
- * #define PNG_NO_CONSOLE_IO
- * #define PNG_NO_STDIO
- */
-
-#if defined(_WIN32_WCE)
-# include <windows.h>
- /* Console I/O functions are not supported on WindowsCE */
-# define PNG_NO_CONSOLE_IO
-# ifdef PNG_DEBUG
-# undef PNG_DEBUG
-# endif
-#endif
-
-#ifdef PNG_BUILD_DLL
-# ifndef PNG_CONSOLE_IO_SUPPORTED
-# ifndef PNG_NO_CONSOLE_IO
-# define PNG_NO_CONSOLE_IO
-# endif
-# endif
-#endif
-
-# ifdef PNG_NO_STDIO
-# ifndef PNG_NO_CONSOLE_IO
-# define PNG_NO_CONSOLE_IO
-# endif
-# ifdef PNG_DEBUG
-# if (PNG_DEBUG > 0)
-# include <stdio.h>
-# endif
-# endif
-# else
-# if !defined(_WIN32_WCE)
-/* "stdio.h" functions are not supported on WindowsCE */
-# include <stdio.h>
-# endif
-# endif
-
-/* This macro protects us against machines that don't have function
- * prototypes (ie K&R style headers). If your compiler does not handle
- * function prototypes, define this macro and use the included ansi2knr.
- * I've always been able to use _NO_PROTO as the indicator, but you may
- * need to drag the empty declaration out in front of here, or change the
- * ifdef to suit your own needs.
- */
-#ifndef PNGARG
-
-#ifdef OF /* zlib prototype munger */
-# define PNGARG(arglist) OF(arglist)
-#else
-
-#ifdef _NO_PROTO
-# define PNGARG(arglist) ()
-# ifndef PNG_TYPECAST_NULL
-# define PNG_TYPECAST_NULL
-# endif
-#else
-# define PNGARG(arglist) arglist
-#endif /* _NO_PROTO */
-
-
-#endif /* OF */
-
-#endif /* PNGARG */
-
-/* Try to determine if we are compiling on a Mac. Note that testing for
- * just __MWERKS__ is not good enough, because the Codewarrior is now used
- * on non-Mac platforms.
- */
-#ifndef MACOS
-# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
- defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
-# define MACOS
-# endif
-#endif
-
-/* enough people need this for various reasons to include it here */
-#if !defined(MACOS) && !defined(RISCOS) && !defined(_WIN32_WCE)
-# include <sys/types.h>
-#endif
-
-#if !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED)
-# define PNG_SETJMP_SUPPORTED
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-/* This is an attempt to force a single setjmp behaviour on Linux. If
- * the X config stuff didn't define _BSD_SOURCE we wouldn't need this.
- */
-
-# ifdef __linux__
-# ifdef _BSD_SOURCE
-# define PNG_SAVE_BSD_SOURCE
-# undef _BSD_SOURCE
-# endif
-# ifdef _SETJMP_H
- /* If you encounter a compiler error here, see the explanation
- * near the end of INSTALL.
- */
- __pngconf.h__ already includes setjmp.h;
- __dont__ include it again.;
-# endif
-# endif /* __linux__ */
-
- /* include setjmp.h for error handling */
-# include <setjmp.h>
-
-# ifdef __linux__
-# ifdef PNG_SAVE_BSD_SOURCE
-# ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-# endif
-# undef PNG_SAVE_BSD_SOURCE
-# endif
-# endif /* __linux__ */
-#endif /* PNG_SETJMP_SUPPORTED */
-
-#ifdef BSD
-# include <strings.h>
-#else
-# include <string.h>
-#endif
-
-/* Other defines for things like memory and the like can go here. */
-#ifdef PNG_INTERNAL
-
-#include <stdlib.h>
-
-/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which
- * aren't usually used outside the library (as far as I know), so it is
- * debatable if they should be exported at all. In the future, when it is
- * possible to have run-time registry of chunk-handling functions, some of
- * these will be made available again.
-#define PNG_EXTERN extern
- */
-#define PNG_EXTERN
-
-/* Other defines specific to compilers can go here. Try to keep
- * them inside an appropriate ifdef/endif pair for portability.
- */
-
-#if defined(PNG_FLOATING_POINT_SUPPORTED)
-# if defined(MACOS)
- /* We need to check that <math.h> hasn't already been included earlier
- * as it seems it doesn't agree with <fp.h>, yet we should really use
- * <fp.h> if possible.
- */
-# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
-# include <fp.h>
-# endif
-# else
-# include <math.h>
-# endif
-# if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
- /* Amiga SAS/C: We must include builtin FPU functions when compiling using
- * MATH=68881
- */
-# include <m68881.h>
-# endif
-#endif
-
-/* Codewarrior on NT has linking problems without this. */
-#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__)
-# define PNG_ALWAYS_EXTERN
-#endif
-
-/* This provides the non-ANSI (far) memory allocation routines. */
-#if defined(__TURBOC__) && defined(__MSDOS__)
-# include <mem.h>
-# include <alloc.h>
-#endif
-
-/* I have no idea why is this necessary... */
-#if defined(_MSC_VER) && (defined(WIN32) || defined(_Windows) || \
- defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__))
-# include <malloc.h>
-#endif
-
-/* This controls how fine the dithering gets. As this allocates
- * a largish chunk of memory (32K), those who are not as concerned
- * with dithering quality can decrease some or all of these.
- */
-#ifndef PNG_DITHER_RED_BITS
-# define PNG_DITHER_RED_BITS 5
-#endif
-#ifndef PNG_DITHER_GREEN_BITS
-# define PNG_DITHER_GREEN_BITS 5
-#endif
-#ifndef PNG_DITHER_BLUE_BITS
-# define PNG_DITHER_BLUE_BITS 5
-#endif
-
-/* This controls how fine the gamma correction becomes when you
- * are only interested in 8 bits anyway. Increasing this value
- * results in more memory being used, and more pow() functions
- * being called to fill in the gamma tables. Don't set this value
- * less then 8, and even that may not work (I haven't tested it).
- */
-
-#ifndef PNG_MAX_GAMMA_8
-# define PNG_MAX_GAMMA_8 11
-#endif
-
-/* This controls how much a difference in gamma we can tolerate before
- * we actually start doing gamma conversion.
- */
-#ifndef PNG_GAMMA_THRESHOLD
-# define PNG_GAMMA_THRESHOLD 0.05
-#endif
-
-#endif /* PNG_INTERNAL */
-
-/* The following uses const char * instead of char * for error
- * and warning message functions, so some compilers won't complain.
- * If you do not want to use const, define PNG_NO_CONST here.
- */
-
-#ifndef PNG_NO_CONST
-# define PNG_CONST const
-#else
-# define PNG_CONST
-#endif
-
-/* The following defines give you the ability to remove code from the
- * library that you will not be using. I wish I could figure out how to
- * automate this, but I can't do that without making it seriously hard
- * on the users. So if you are not using an ability, change the #define
- * to and #undef, and that part of the library will not be compiled. If
- * your linker can't find a function, you may want to make sure the
- * ability is defined here. Some of these depend upon some others being
- * defined. I haven't figured out all the interactions here, so you may
- * have to experiment awhile to get everything to compile. If you are
- * creating or using a shared library, you probably shouldn't touch this,
- * as it will affect the size of the structures, and this will cause bad
- * things to happen if the library and/or application ever change.
- */
-
-/* Any features you will not be using can be undef'ed here */
-
-/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
- * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS
- * on the compile line, then pick and choose which ones to define without
- * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED
- * if you only want to have a png-compliant reader/writer but don't need
- * any of the extra transformations. This saves about 80 kbytes in a
- * typical installation of the library. (PNG_NO_* form added in version
- * 1.0.1c, for consistency)
- */
-
-/* The size of the png_text structure changed in libpng-1.0.6 when
- * iTXt support was added. iTXt support was turned off by default through
- * libpng-1.2.x, to support old apps that malloc the png_text structure
- * instead of calling png_set_text() and letting libpng malloc it. It
- * was turned on by default in libpng-1.3.0.
- */
-
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-# ifndef PNG_NO_iTXt_SUPPORTED
-# define PNG_NO_iTXt_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_iTXt
-# define PNG_NO_READ_iTXt
-# endif
-# ifndef PNG_NO_WRITE_iTXt
-# define PNG_NO_WRITE_iTXt
-# endif
-#endif
-
-#if !defined(PNG_NO_iTXt_SUPPORTED)
-# if !defined(PNG_READ_iTXt_SUPPORTED) && !defined(PNG_NO_READ_iTXt)
-# define PNG_READ_iTXt
-# endif
-# if !defined(PNG_WRITE_iTXt_SUPPORTED) && !defined(PNG_NO_WRITE_iTXt)
-# define PNG_WRITE_iTXt
-# endif
-#endif
-
-/* The following support, added after version 1.0.0, can be turned off here en
- * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility
- * with old applications that require the length of png_struct and png_info
- * to remain unchanged.
- */
-
-#ifdef PNG_LEGACY_SUPPORTED
-# define PNG_NO_FREE_ME
-# define PNG_NO_READ_UNKNOWN_CHUNKS
-# define PNG_NO_WRITE_UNKNOWN_CHUNKS
-# define PNG_NO_READ_USER_CHUNKS
-# define PNG_NO_READ_iCCP
-# define PNG_NO_WRITE_iCCP
-# define PNG_NO_READ_iTXt
-# define PNG_NO_WRITE_iTXt
-# define PNG_NO_READ_sCAL
-# define PNG_NO_WRITE_sCAL
-# define PNG_NO_READ_sPLT
-# define PNG_NO_WRITE_sPLT
-# define PNG_NO_INFO_IMAGE
-# define PNG_NO_READ_RGB_TO_GRAY
-# define PNG_NO_READ_USER_TRANSFORM
-# define PNG_NO_WRITE_USER_TRANSFORM
-# define PNG_NO_USER_MEM
-# define PNG_NO_READ_EMPTY_PLTE
-# define PNG_NO_MNG_FEATURES
-# define PNG_NO_FIXED_POINT_SUPPORTED
-#endif
-
-/* Ignore attempt to turn off both floating and fixed point support */
-#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \
- !defined(PNG_NO_FIXED_POINT_SUPPORTED)
-# define PNG_FIXED_POINT_SUPPORTED
-#endif
-
-#ifndef PNG_NO_FREE_ME
-# define PNG_FREE_ME_SUPPORTED
-#endif
-
-#if defined(PNG_READ_SUPPORTED)
-
-#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
- !defined(PNG_NO_READ_TRANSFORMS)
-# define PNG_READ_TRANSFORMS_SUPPORTED
-#endif
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-# ifndef PNG_NO_READ_EXPAND
-# define PNG_READ_EXPAND_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_SHIFT
-# define PNG_READ_SHIFT_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_PACK
-# define PNG_READ_PACK_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_BGR
-# define PNG_READ_BGR_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_SWAP
-# define PNG_READ_SWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_PACKSWAP
-# define PNG_READ_PACKSWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_INVERT
-# define PNG_READ_INVERT_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_DITHER
-# define PNG_READ_DITHER_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_BACKGROUND
-# define PNG_READ_BACKGROUND_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_16_TO_8
-# define PNG_READ_16_TO_8_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_FILLER
-# define PNG_READ_FILLER_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_GAMMA
-# define PNG_READ_GAMMA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_GRAY_TO_RGB
-# define PNG_READ_GRAY_TO_RGB_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_SWAP_ALPHA
-# define PNG_READ_SWAP_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_INVERT_ALPHA
-# define PNG_READ_INVERT_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_STRIP_ALPHA
-# define PNG_READ_STRIP_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_USER_TRANSFORM
-# define PNG_READ_USER_TRANSFORM_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_RGB_TO_GRAY
-# define PNG_READ_RGB_TO_GRAY_SUPPORTED
-# endif
-#endif /* PNG_READ_TRANSFORMS_SUPPORTED */
-
-#if !defined(PNG_NO_PROGRESSIVE_READ) && \
- !defined(PNG_PROGRESSIVE_READ_SUPPORTED) /* if you don't do progressive */
-# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */
-#endif /* about interlacing capability! You'll */
- /* still have interlacing unless you change the following line: */
-
-#define PNG_READ_INTERLACING_SUPPORTED /* required in PNG-compliant decoders */
-
-#ifndef PNG_NO_READ_COMPOSITE_NODIV
-# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */
-# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */
-# endif
-#endif
-
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-/* Deprecated, will be removed from version 2.0.0.
- Use PNG_MNG_FEATURES_SUPPORTED instead. */
-#ifndef PNG_NO_READ_EMPTY_PLTE
-# define PNG_READ_EMPTY_PLTE_SUPPORTED
-#endif
-#endif
-
-#endif /* PNG_READ_SUPPORTED */
-
-#if defined(PNG_WRITE_SUPPORTED)
-
-# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
- !defined(PNG_NO_WRITE_TRANSFORMS)
-# define PNG_WRITE_TRANSFORMS_SUPPORTED
-#endif
-
-#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-# ifndef PNG_NO_WRITE_SHIFT
-# define PNG_WRITE_SHIFT_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_PACK
-# define PNG_WRITE_PACK_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_BGR
-# define PNG_WRITE_BGR_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_SWAP
-# define PNG_WRITE_SWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_PACKSWAP
-# define PNG_WRITE_PACKSWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_INVERT
-# define PNG_WRITE_INVERT_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_FILLER
-# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */
-# endif
-# ifndef PNG_NO_WRITE_SWAP_ALPHA
-# define PNG_WRITE_SWAP_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_INVERT_ALPHA
-# define PNG_WRITE_INVERT_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_USER_TRANSFORM
-# define PNG_WRITE_USER_TRANSFORM_SUPPORTED
-# endif
-#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */
-
-#if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \
- !defined(PNG_WRITE_INTERLACING_SUPPORTED)
-#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant
- encoders, but can cause trouble
- if left undefined */
-#endif
-
-#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \
- !defined(PNG_WRITE_WEIGHTED_FILTER) && \
- defined(PNG_FLOATING_POINT_SUPPORTED)
-# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-#endif
-
-#ifndef PNG_NO_WRITE_FLUSH
-# define PNG_WRITE_FLUSH_SUPPORTED
-#endif
-
-#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
-/* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */
-#ifndef PNG_NO_WRITE_EMPTY_PLTE
-# define PNG_WRITE_EMPTY_PLTE_SUPPORTED
-#endif
-#endif
-
-#endif /* PNG_WRITE_SUPPORTED */
-
-#ifndef PNG_1_0_X
-# ifndef PNG_NO_ERROR_NUMBERS
-# define PNG_ERROR_NUMBERS_SUPPORTED
-# endif
-#endif /* PNG_1_0_X */
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-# ifndef PNG_NO_USER_TRANSFORM_PTR
-# define PNG_USER_TRANSFORM_PTR_SUPPORTED
-# endif
-#endif
-
-#ifndef PNG_NO_STDIO
-# define PNG_TIME_RFC1123_SUPPORTED
-#endif
-
-/* This adds extra functions in pngget.c for accessing data from the
- * info pointer (added in version 0.99)
- * png_get_image_width()
- * png_get_image_height()
- * png_get_bit_depth()
- * png_get_color_type()
- * png_get_compression_type()
- * png_get_filter_type()
- * png_get_interlace_type()
- * png_get_pixel_aspect_ratio()
- * png_get_pixels_per_meter()
- * png_get_x_offset_pixels()
- * png_get_y_offset_pixels()
- * png_get_x_offset_microns()
- * png_get_y_offset_microns()
- */
-#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED)
-# define PNG_EASY_ACCESS_SUPPORTED
-#endif
-
-/* PNG_ASSEMBLER_CODE was enabled by default in version 1.2.0
- * and removed from version 1.2.20. The following will be removed
- * from libpng-1.4.0
-*/
-
-#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_OPTIMIZED_CODE)
-# ifndef PNG_OPTIMIZED_CODE_SUPPORTED
-# define PNG_OPTIMIZED_CODE_SUPPORTED
-# endif
-#endif
-
-#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE)
-# ifndef PNG_ASSEMBLER_CODE_SUPPORTED
-# define PNG_ASSEMBLER_CODE_SUPPORTED
-# endif
-
-# if defined(__GNUC__) && defined(__x86_64__) && (__GNUC__ < 4)
- /* work around 64-bit gcc compiler bugs in gcc-3.x */
-# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE)
-# define PNG_NO_MMX_CODE
-# endif
-# endif
-
-# if defined(__APPLE__)
-# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE)
-# define PNG_NO_MMX_CODE
-# endif
-# endif
-
-# if (defined(__MWERKS__) && ((__MWERKS__ < 0x0900) || macintosh))
-# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE)
-# define PNG_NO_MMX_CODE
-# endif
-# endif
-
-# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE)
-# define PNG_MMX_CODE_SUPPORTED
-# endif
-
-#endif
-/* end of obsolete code to be removed from libpng-1.4.0 */
-
-#if !defined(PNG_1_0_X)
-#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED)
-# define PNG_USER_MEM_SUPPORTED
-#endif
-#endif /* PNG_1_0_X */
-
-/* Added at libpng-1.2.6 */
-#if !defined(PNG_1_0_X)
-#ifndef PNG_SET_USER_LIMITS_SUPPORTED
-#if !defined(PNG_NO_SET_USER_LIMITS) && !defined(PNG_SET_USER_LIMITS_SUPPORTED)
-# define PNG_SET_USER_LIMITS_SUPPORTED
-#endif
-#endif
-#endif /* PNG_1_0_X */
-
-/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGS no matter
- * how large, set these limits to 0x7fffffffL
- */
-#ifndef PNG_USER_WIDTH_MAX
-# define PNG_USER_WIDTH_MAX 1000000L
-#endif
-#ifndef PNG_USER_HEIGHT_MAX
-# define PNG_USER_HEIGHT_MAX 1000000L
-#endif
-
-/* These are currently experimental features, define them if you want */
-
-/* very little testing */
-/*
-#ifdef PNG_READ_SUPPORTED
-# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-# endif
-#endif
-*/
-
-/* This is only for PowerPC big-endian and 680x0 systems */
-/* some testing */
-/*
-#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED
-# define PNG_READ_BIG_ENDIAN_SUPPORTED
-#endif
-*/
-
-/* Buggy compilers (e.g., gcc 2.7.2.2) need this */
-/*
-#define PNG_NO_POINTER_INDEXING
-*/
-
-/* These functions are turned off by default, as they will be phased out. */
-/*
-#define PNG_USELESS_TESTS_SUPPORTED
-#define PNG_CORRECT_PALETTE_SUPPORTED
-*/
-
-/* Any chunks you are not interested in, you can undef here. The
- * ones that allocate memory may be expecially important (hIST,
- * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info
- * a bit smaller.
- */
-
-#if defined(PNG_READ_SUPPORTED) && \
- !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
- !defined(PNG_NO_READ_ANCILLARY_CHUNKS)
-# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
-#endif
-
-#if defined(PNG_WRITE_SUPPORTED) && \
- !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
- !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS)
-# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
-#endif
-
-#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
-
-#ifdef PNG_NO_READ_TEXT
-# define PNG_NO_READ_iTXt
-# define PNG_NO_READ_tEXt
-# define PNG_NO_READ_zTXt
-#endif
-#ifndef PNG_NO_READ_bKGD
-# define PNG_READ_bKGD_SUPPORTED
-# define PNG_bKGD_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_cHRM
-# define PNG_READ_cHRM_SUPPORTED
-# define PNG_cHRM_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_gAMA
-# define PNG_READ_gAMA_SUPPORTED
-# define PNG_gAMA_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_hIST
-# define PNG_READ_hIST_SUPPORTED
-# define PNG_hIST_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_iCCP
-# define PNG_READ_iCCP_SUPPORTED
-# define PNG_iCCP_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_iTXt
-# ifndef PNG_READ_iTXt_SUPPORTED
-# define PNG_READ_iTXt_SUPPORTED
-# endif
-# ifndef PNG_iTXt_SUPPORTED
-# define PNG_iTXt_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_READ_oFFs
-# define PNG_READ_oFFs_SUPPORTED
-# define PNG_oFFs_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_pCAL
-# define PNG_READ_pCAL_SUPPORTED
-# define PNG_pCAL_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_sCAL
-# define PNG_READ_sCAL_SUPPORTED
-# define PNG_sCAL_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_pHYs
-# define PNG_READ_pHYs_SUPPORTED
-# define PNG_pHYs_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_sBIT
-# define PNG_READ_sBIT_SUPPORTED
-# define PNG_sBIT_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_sPLT
-# define PNG_READ_sPLT_SUPPORTED
-# define PNG_sPLT_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_sRGB
-# define PNG_READ_sRGB_SUPPORTED
-# define PNG_sRGB_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_tEXt
-# define PNG_READ_tEXt_SUPPORTED
-# define PNG_tEXt_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_tIME
-# define PNG_READ_tIME_SUPPORTED
-# define PNG_tIME_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_tRNS
-# define PNG_READ_tRNS_SUPPORTED
-# define PNG_tRNS_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_zTXt
-# define PNG_READ_zTXt_SUPPORTED
-# define PNG_zTXt_SUPPORTED
-#endif
-#ifndef PNG_NO_READ_UNKNOWN_CHUNKS
-# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
-# define PNG_UNKNOWN_CHUNKS_SUPPORTED
-# endif
-# ifndef PNG_NO_HANDLE_AS_UNKNOWN
-# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-# endif
-#endif
-#if !defined(PNG_NO_READ_USER_CHUNKS) && \
- defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
-# define PNG_READ_USER_CHUNKS_SUPPORTED
-# define PNG_USER_CHUNKS_SUPPORTED
-# ifdef PNG_NO_READ_UNKNOWN_CHUNKS
-# undef PNG_NO_READ_UNKNOWN_CHUNKS
-# endif
-# ifdef PNG_NO_HANDLE_AS_UNKNOWN
-# undef PNG_NO_HANDLE_AS_UNKNOWN
-# endif
-#endif
-#ifndef PNG_NO_READ_OPT_PLTE
-# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */
-#endif /* optional PLTE chunk in RGB and RGBA images */
-#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \
- defined(PNG_READ_zTXt_SUPPORTED)
-# define PNG_READ_TEXT_SUPPORTED
-# define PNG_TEXT_SUPPORTED
-#endif
-
-#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */
-
-#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
-
-#ifdef PNG_NO_WRITE_TEXT
-# define PNG_NO_WRITE_iTXt
-# define PNG_NO_WRITE_tEXt
-# define PNG_NO_WRITE_zTXt
-#endif
-#ifndef PNG_NO_WRITE_bKGD
-# define PNG_WRITE_bKGD_SUPPORTED
-# ifndef PNG_bKGD_SUPPORTED
-# define PNG_bKGD_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_cHRM
-# define PNG_WRITE_cHRM_SUPPORTED
-# ifndef PNG_cHRM_SUPPORTED
-# define PNG_cHRM_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_gAMA
-# define PNG_WRITE_gAMA_SUPPORTED
-# ifndef PNG_gAMA_SUPPORTED
-# define PNG_gAMA_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_hIST
-# define PNG_WRITE_hIST_SUPPORTED
-# ifndef PNG_hIST_SUPPORTED
-# define PNG_hIST_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_iCCP
-# define PNG_WRITE_iCCP_SUPPORTED
-# ifndef PNG_iCCP_SUPPORTED
-# define PNG_iCCP_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_iTXt
-# ifndef PNG_WRITE_iTXt_SUPPORTED
-# define PNG_WRITE_iTXt_SUPPORTED
-# endif
-# ifndef PNG_iTXt_SUPPORTED
-# define PNG_iTXt_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_oFFs
-# define PNG_WRITE_oFFs_SUPPORTED
-# ifndef PNG_oFFs_SUPPORTED
-# define PNG_oFFs_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_pCAL
-# define PNG_WRITE_pCAL_SUPPORTED
-# ifndef PNG_pCAL_SUPPORTED
-# define PNG_pCAL_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_sCAL
-# define PNG_WRITE_sCAL_SUPPORTED
-# ifndef PNG_sCAL_SUPPORTED
-# define PNG_sCAL_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_pHYs
-# define PNG_WRITE_pHYs_SUPPORTED
-# ifndef PNG_pHYs_SUPPORTED
-# define PNG_pHYs_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_sBIT
-# define PNG_WRITE_sBIT_SUPPORTED
-# ifndef PNG_sBIT_SUPPORTED
-# define PNG_sBIT_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_sPLT
-# define PNG_WRITE_sPLT_SUPPORTED
-# ifndef PNG_sPLT_SUPPORTED
-# define PNG_sPLT_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_sRGB
-# define PNG_WRITE_sRGB_SUPPORTED
-# ifndef PNG_sRGB_SUPPORTED
-# define PNG_sRGB_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_tEXt
-# define PNG_WRITE_tEXt_SUPPORTED
-# ifndef PNG_tEXt_SUPPORTED
-# define PNG_tEXt_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_tIME
-# define PNG_WRITE_tIME_SUPPORTED
-# ifndef PNG_tIME_SUPPORTED
-# define PNG_tIME_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_tRNS
-# define PNG_WRITE_tRNS_SUPPORTED
-# ifndef PNG_tRNS_SUPPORTED
-# define PNG_tRNS_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_zTXt
-# define PNG_WRITE_zTXt_SUPPORTED
-# ifndef PNG_zTXt_SUPPORTED
-# define PNG_zTXt_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
-# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
-# define PNG_UNKNOWN_CHUNKS_SUPPORTED
-# endif
-# ifndef PNG_NO_HANDLE_AS_UNKNOWN
-# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-# endif
-# endif
-#endif
-#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \
- defined(PNG_WRITE_zTXt_SUPPORTED)
-# define PNG_WRITE_TEXT_SUPPORTED
-# ifndef PNG_TEXT_SUPPORTED
-# define PNG_TEXT_SUPPORTED
-# endif
-#endif
-
-#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */
-
-/* Turn this off to disable png_read_png() and
- * png_write_png() and leave the row_pointers member
- * out of the info structure.
- */
-#ifndef PNG_NO_INFO_IMAGE
-# define PNG_INFO_IMAGE_SUPPORTED
-#endif
-
-/* need the time information for reading tIME chunks */
-#if defined(PNG_tIME_SUPPORTED)
-# if !defined(_WIN32_WCE)
- /* "time.h" functions are not supported on WindowsCE */
-# include <time.h>
-# endif
-#endif
-
-/* Some typedefs to get us started. These should be safe on most of the
- * common platforms. The typedefs should be at least as large as the
- * numbers suggest (a png_uint_32 must be at least 32 bits long), but they
- * don't have to be exactly that size. Some compilers dislike passing
- * unsigned shorts as function parameters, so you may be better off using
- * unsigned int for png_uint_16. Likewise, for 64-bit systems, you may
- * want to have unsigned int for png_uint_32 instead of unsigned long.
- */
-
-typedef unsigned long png_uint_32;
-typedef long png_int_32;
-typedef unsigned short png_uint_16;
-typedef short png_int_16;
-typedef unsigned char png_byte;
-
-/* This is usually size_t. It is typedef'ed just in case you need it to
- change (I'm not sure if you will or not, so I thought I'd be safe) */
-#ifdef PNG_SIZE_T
- typedef PNG_SIZE_T png_size_t;
-# define png_sizeof(x) png_convert_size(sizeof (x))
-#else
- typedef size_t png_size_t;
-# define png_sizeof(x) sizeof (x)
-#endif
-
-/* The following is needed for medium model support. It cannot be in the
- * PNG_INTERNAL section. Needs modification for other compilers besides
- * MSC. Model independent support declares all arrays and pointers to be
- * large using the far keyword. The zlib version used must also support
- * model independent data. As of version zlib 1.0.4, the necessary changes
- * have been made in zlib. The USE_FAR_KEYWORD define triggers other
- * changes that are needed. (Tim Wegner)
- */
-
-/* Separate compiler dependencies (problem here is that zlib.h always
- defines FAR. (SJT) */
-#ifdef __BORLANDC__
-# if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
-# define LDATA 1
-# else
-# define LDATA 0
-# endif
- /* GRR: why is Cygwin in here? Cygwin is not Borland C... */
-# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__)
-# define PNG_MAX_MALLOC_64K
-# if (LDATA != 1)
-# ifndef FAR
-# define FAR __far
-# endif
-# define USE_FAR_KEYWORD
-# endif /* LDATA != 1 */
- /* Possibly useful for moving data out of default segment.
- * Uncomment it if you want. Could also define FARDATA as
- * const if your compiler supports it. (SJT)
-# define FARDATA FAR
- */
-# endif /* __WIN32__, __FLAT__, __CYGWIN__ */
-#endif /* __BORLANDC__ */
-
-
-/* Suggest testing for specific compiler first before testing for
- * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM,
- * making reliance oncertain keywords suspect. (SJT)
- */
-
-/* MSC Medium model */
-#if defined(FAR)
-# if defined(M_I86MM)
-# define USE_FAR_KEYWORD
-# define FARDATA FAR
-# include <dos.h>
-# endif
-#endif
-
-/* SJT: default case */
-#ifndef FAR
-# define FAR
-#endif
-
-/* At this point FAR is always defined */
-#ifndef FARDATA
-# define FARDATA
-#endif
-
-/* Typedef for floating-point numbers that are converted
- to fixed-point with a multiple of 100,000, e.g., int_gamma */
-typedef png_int_32 png_fixed_point;
-
-/* Add typedefs for pointers */
-typedef void FAR * png_voidp;
-typedef png_byte FAR * png_bytep;
-typedef png_uint_32 FAR * png_uint_32p;
-typedef png_int_32 FAR * png_int_32p;
-typedef png_uint_16 FAR * png_uint_16p;
-typedef png_int_16 FAR * png_int_16p;
-typedef PNG_CONST char FAR * png_const_charp;
-typedef char FAR * png_charp;
-typedef png_fixed_point FAR * png_fixed_point_p;
-
-#ifndef PNG_NO_STDIO
-#if defined(_WIN32_WCE)
-typedef HANDLE png_FILE_p;
-#else
-typedef FILE * png_FILE_p;
-#endif
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-typedef double FAR * png_doublep;
-#endif
-
-/* Pointers to pointers; i.e. arrays */
-typedef png_byte FAR * FAR * png_bytepp;
-typedef png_uint_32 FAR * FAR * png_uint_32pp;
-typedef png_int_32 FAR * FAR * png_int_32pp;
-typedef png_uint_16 FAR * FAR * png_uint_16pp;
-typedef png_int_16 FAR * FAR * png_int_16pp;
-typedef PNG_CONST char FAR * FAR * png_const_charpp;
-typedef char FAR * FAR * png_charpp;
-typedef png_fixed_point FAR * FAR * png_fixed_point_pp;
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-typedef double FAR * FAR * png_doublepp;
-#endif
-
-/* Pointers to pointers to pointers; i.e., pointer to array */
-typedef char FAR * FAR * FAR * png_charppp;
-
-#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
-/* SPC - Is this stuff deprecated? */
-/* It'll be removed as of libpng-1.3.0 - GR-P */
-/* libpng typedefs for types in zlib. If zlib changes
- * or another compression library is used, then change these.
- * Eliminates need to change all the source files.
- */
-typedef charf * png_zcharp;
-typedef charf * FAR * png_zcharpp;
-typedef z_stream FAR * png_zstreamp;
-#endif /* (PNG_1_0_X) || defined(PNG_1_2_X) */
-
-/*
- * Define PNG_BUILD_DLL if the module being built is a Windows
- * LIBPNG DLL.
- *
- * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL.
- * It is equivalent to Microsoft predefined macro _DLL that is
- * automatically defined when you compile using the share
- * version of the CRT (C Run-Time library)
- *
- * The cygwin mods make this behavior a little different:
- * Define PNG_BUILD_DLL if you are building a dll for use with cygwin
- * Define PNG_STATIC if you are building a static library for use with cygwin,
- * -or- if you are building an application that you want to link to the
- * static library.
- * PNG_USE_DLL is defined by default (no user action needed) unless one of
- * the other flags is defined.
- */
-
-#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL))
-# define PNG_DLL
-#endif
-/* If CYGWIN, then disallow GLOBAL ARRAYS unless building a static lib.
- * When building a static lib, default to no GLOBAL ARRAYS, but allow
- * command-line override
- */
-#if defined(__CYGWIN__)
-# if !defined(PNG_STATIC)
-# if defined(PNG_USE_GLOBAL_ARRAYS)
-# undef PNG_USE_GLOBAL_ARRAYS
-# endif
-# if !defined(PNG_USE_LOCAL_ARRAYS)
-# define PNG_USE_LOCAL_ARRAYS
-# endif
-# else
-# if defined(PNG_USE_LOCAL_ARRAYS) || defined(PNG_NO_GLOBAL_ARRAYS)
-# if defined(PNG_USE_GLOBAL_ARRAYS)
-# undef PNG_USE_GLOBAL_ARRAYS
-# endif
-# endif
-# endif
-# if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS)
-# define PNG_USE_LOCAL_ARRAYS
-# endif
-#endif
-
-/* Do not use global arrays (helps with building DLL's)
- * They are no longer used in libpng itself, since version 1.0.5c,
- * but might be required for some pre-1.0.5c applications.
- */
-#if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS)
-# if defined(PNG_NO_GLOBAL_ARRAYS) || \
- (defined(__GNUC__) && defined(PNG_DLL)) || defined(_MSC_VER)
-# define PNG_USE_LOCAL_ARRAYS
-# else
-# define PNG_USE_GLOBAL_ARRAYS
-# endif
-#endif
-
-#if defined(__CYGWIN__)
-# undef PNGAPI
-# define PNGAPI __cdecl
-# undef PNG_IMPEXP
-# define PNG_IMPEXP
-#endif
-
-/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall",
- * you may get warnings regarding the linkage of png_zalloc and png_zfree.
- * Don't ignore those warnings; you must also reset the default calling
- * convention in your compiler to match your PNGAPI, and you must build
- * zlib and your applications the same way you build libpng.
- */
-
-#if defined(__MINGW32__) && !defined(PNG_MODULEDEF)
-# ifndef PNG_NO_MODULEDEF
-# define PNG_NO_MODULEDEF
-# endif
-#endif
-
-#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF)
-# define PNG_IMPEXP
-#endif
-
-#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \
- (( defined(_Windows) || defined(_WINDOWS) || \
- defined(WIN32) || defined(_WIN32) || defined(__WIN32__) ))
-
-# ifndef PNGAPI
-# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800))
-# define PNGAPI __cdecl
-# else
-# define PNGAPI _cdecl
-# endif
-# endif
-
-# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \
- 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */)
-# define PNG_IMPEXP
-# endif
-
-# if !defined(PNG_IMPEXP)
-
-# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol
-# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol
-
- /* Borland/Microsoft */
-# if defined(_MSC_VER) || defined(__BORLANDC__)
-# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500)
-# define PNG_EXPORT PNG_EXPORT_TYPE1
-# else
-# define PNG_EXPORT PNG_EXPORT_TYPE2
-# if defined(PNG_BUILD_DLL)
-# define PNG_IMPEXP __export
-# else
-# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in
- VC++ */
-# endif /* Exists in Borland C++ for
- C++ classes (== huge) */
-# endif
-# endif
-
-# if !defined(PNG_IMPEXP)
-# if defined(PNG_BUILD_DLL)
-# define PNG_IMPEXP __declspec(dllexport)
-# else
-# define PNG_IMPEXP __declspec(dllimport)
-# endif
-# endif
-# endif /* PNG_IMPEXP */
-#else /* !(DLL || non-cygwin WINDOWS) */
-# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)
-# ifndef PNGAPI
-# define PNGAPI _System
-# endif
-# else
-# if 0 /* ... other platforms, with other meanings */
-# endif
-# endif
-#endif
-
-#ifndef PNGAPI
-# define PNGAPI
-#endif
-#ifndef PNG_IMPEXP
-# define PNG_IMPEXP
-#endif
-
-#ifdef PNG_BUILDSYMS
-# ifndef PNG_EXPORT
-# define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END
-# endif
-# ifdef PNG_USE_GLOBAL_ARRAYS
-# ifndef PNG_EXPORT_VAR
-# define PNG_EXPORT_VAR(type) PNG_DATA_EXPORT
-# endif
-# endif
-#endif
-
-#ifndef PNG_EXPORT
-# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol
-#endif
-
-#ifdef PNG_USE_GLOBAL_ARRAYS
-# ifndef PNG_EXPORT_VAR
-# define PNG_EXPORT_VAR(type) extern PNG_IMPEXP type
-# endif
-#endif
-
-/* User may want to use these so they are not in PNG_INTERNAL. Any library
- * functions that are passed far data must be model independent.
- */
-
-#ifndef PNG_ABORT
-# define PNG_ABORT() abort()
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
-#else
-# define png_jmpbuf(png_ptr) \
- (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED)
-#endif
-
-#if defined(USE_FAR_KEYWORD) /* memory model independent fns */
-/* use this to make far-to-near assignments */
-# define CHECK 1
-# define NOCHECK 0
-# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK))
-# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK))
-# define png_snprintf _fsnprintf /* Added to v 1.2.19 */
-# define png_strlen _fstrlen
-# define png_memcmp _fmemcmp /* SJT: added */
-# define png_memcpy _fmemcpy
-# define png_memset _fmemset
-#else /* use the usual functions */
-# define CVT_PTR(ptr) (ptr)
-# define CVT_PTR_NOCHECK(ptr) (ptr)
-# ifndef PNG_NO_SNPRINTF
-# ifdef _MSC_VER
-# define png_snprintf _snprintf /* Added to v 1.2.19 */
-# define png_snprintf2 _snprintf
-# define png_snprintf6 _snprintf
-# else
-# define png_snprintf snprintf /* Added to v 1.2.19 */
-# define png_snprintf2 snprintf
-# define png_snprintf6 snprintf
-# endif
-# else
- /* You don't have or don't want to use snprintf(). Caution: Using
- * sprintf instead of snprintf exposes your application to accidental
- * or malevolent buffer overflows. If you don't have snprintf()
- * as a general rule you should provide one (you can get one from
- * Portable OpenSSH). */
-# define png_snprintf(s1,n,fmt,x1) sprintf(s1,fmt,x1)
-# define png_snprintf2(s1,n,fmt,x1,x2) sprintf(s1,fmt,x1,x2)
-# define png_snprintf6(s1,n,fmt,x1,x2,x3,x4,x5,x6) \
- sprintf(s1,fmt,x1,x2,x3,x4,x5,x6)
-# endif
-# define png_strlen strlen
-# define png_memcmp memcmp /* SJT: added */
-# define png_memcpy memcpy
-# define png_memset memset
-#endif
-/* End of memory model independent support */
-
-/* Just a little check that someone hasn't tried to define something
- * contradictory.
- */
-#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K)
-# undef PNG_ZBUF_SIZE
-# define PNG_ZBUF_SIZE 65536L
-#endif
-
-/* Added at libpng-1.2.8 */
-#endif /* PNG_VERSION_INFO_ONLY */
-
-#endif /* PNGCONF_H */
diff --git a/Build/source/libs/libpng/pngerror.c b/Build/source/libs/libpng/pngerror.c
deleted file mode 100644
index b364fc00af4..00000000000
--- a/Build/source/libs/libpng/pngerror.c
+++ /dev/null
@@ -1,343 +0,0 @@
-
-/* pngerror.c - stub functions for i/o and memory allocation
- *
- * Last changed in libpng 1.2.22 [October 13, 2007]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2007 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This file provides a location for all error handling. Users who
- * need special error handling are expected to write replacement functions
- * and use png_set_error_fn() to use those functions. See the instructions
- * at each function.
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-static void /* PRIVATE */
-png_default_error PNGARG((png_structp png_ptr,
- png_const_charp error_message));
-#ifndef PNG_NO_WARNINGS
-static void /* PRIVATE */
-png_default_warning PNGARG((png_structp png_ptr,
- png_const_charp warning_message));
-#endif /* PNG_NO_WARNINGS */
-
-/* This function is called whenever there is a fatal error. This function
- * should not be changed. If there is a need to handle errors differently,
- * you should supply a replacement error function and use png_set_error_fn()
- * to replace the error function at run-time.
- */
-#ifndef PNG_NO_ERROR_TEXT
-void PNGAPI
-png_error(png_structp png_ptr, png_const_charp error_message)
-{
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- char msg[16];
- if (png_ptr != NULL)
- {
- if (png_ptr->flags&
- (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
- {
- if (*error_message == '#')
- {
- int offset;
- for (offset=1; offset<15; offset++)
- if (*(error_message+offset) == ' ')
- break;
- if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
- {
- int i;
- for (i=0; i<offset-1; i++)
- msg[i]=error_message[i+1];
- msg[i]='\0';
- error_message=msg;
- }
- else
- error_message+=offset;
- }
- else
- {
- if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
- {
- msg[0]='0';
- msg[1]='\0';
- error_message=msg;
- }
- }
- }
- }
-#endif
- if (png_ptr != NULL && png_ptr->error_fn != NULL)
- (*(png_ptr->error_fn))(png_ptr, error_message);
-
- /* If the custom handler doesn't exist, or if it returns,
- use the default handler, which will not return. */
- png_default_error(png_ptr, error_message);
-}
-#else
-void PNGAPI
-png_err(png_structp png_ptr)
-{
- if (png_ptr != NULL && png_ptr->error_fn != NULL)
- (*(png_ptr->error_fn))(png_ptr, '\0');
-
- /* If the custom handler doesn't exist, or if it returns,
- use the default handler, which will not return. */
- png_default_error(png_ptr, '\0');
-}
-#endif /* PNG_NO_ERROR_TEXT */
-
-#ifndef PNG_NO_WARNINGS
-/* This function is called whenever there is a non-fatal error. This function
- * should not be changed. If there is a need to handle warnings differently,
- * you should supply a replacement warning function and use
- * png_set_error_fn() to replace the warning function at run-time.
- */
-void PNGAPI
-png_warning(png_structp png_ptr, png_const_charp warning_message)
-{
- int offset = 0;
- if (png_ptr != NULL)
- {
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- if (png_ptr->flags&
- (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
-#endif
- {
- if (*warning_message == '#')
- {
- for (offset=1; offset<15; offset++)
- if (*(warning_message+offset) == ' ')
- break;
- }
- }
- if (png_ptr != NULL && png_ptr->warning_fn != NULL)
- (*(png_ptr->warning_fn))(png_ptr, warning_message+offset);
- }
- else
- png_default_warning(png_ptr, warning_message+offset);
-}
-#endif /* PNG_NO_WARNINGS */
-
-
-/* These utilities are used internally to build an error message that relates
- * to the current chunk. The chunk name comes from png_ptr->chunk_name,
- * this is used to prefix the message. The message is limited in length
- * to 63 bytes, the name characters are output as hex digits wrapped in []
- * if the character is invalid.
- */
-#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
-static PNG_CONST char png_digit[16] = {
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- 'A', 'B', 'C', 'D', 'E', 'F'
-};
-
-#define PNG_MAX_ERROR_TEXT 64
-
-#if !defined(PNG_NO_WARNINGS) || !defined(PNG_NO_ERROR_TEXT)
-static void /* PRIVATE */
-png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp
- error_message)
-{
- int iout = 0, iin = 0;
-
- while (iin < 4)
- {
- int c = png_ptr->chunk_name[iin++];
- if (isnonalpha(c))
- {
- buffer[iout++] = '[';
- buffer[iout++] = png_digit[(c & 0xf0) >> 4];
- buffer[iout++] = png_digit[c & 0x0f];
- buffer[iout++] = ']';
- }
- else
- {
- buffer[iout++] = (png_byte)c;
- }
- }
-
- if (error_message == NULL)
- buffer[iout] = '\0';
- else
- {
- buffer[iout++] = ':';
- buffer[iout++] = ' ';
- png_memcpy(buffer+iout, error_message, PNG_MAX_ERROR_TEXT);
- buffer[iout+PNG_MAX_ERROR_TEXT-1] = '\0';
- }
-}
-
-#ifdef PNG_READ_SUPPORTED
-void PNGAPI
-png_chunk_error(png_structp png_ptr, png_const_charp error_message)
-{
- char msg[18+PNG_MAX_ERROR_TEXT];
- if (png_ptr == NULL)
- png_error(png_ptr, error_message);
- else
- {
- png_format_buffer(png_ptr, msg, error_message);
- png_error(png_ptr, msg);
- }
-}
-#endif /* PNG_READ_SUPPORTED */
-#endif /* !defined(PNG_NO_WARNINGS) || !defined(PNG_NO_ERROR_TEXT) */
-
-#ifndef PNG_NO_WARNINGS
-void PNGAPI
-png_chunk_warning(png_structp png_ptr, png_const_charp warning_message)
-{
- char msg[18+PNG_MAX_ERROR_TEXT];
- if (png_ptr == NULL)
- png_warning(png_ptr, warning_message);
- else
- {
- png_format_buffer(png_ptr, msg, warning_message);
- png_warning(png_ptr, msg);
- }
-}
-#endif /* PNG_NO_WARNINGS */
-
-
-/* This is the default error handling function. Note that replacements for
- * this function MUST NOT RETURN, or the program will likely crash. This
- * function is used by default, or if the program supplies NULL for the
- * error function pointer in png_set_error_fn().
- */
-static void /* PRIVATE */
-png_default_error(png_structp png_ptr, png_const_charp error_message)
-{
-#ifndef PNG_NO_CONSOLE_IO
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- if (*error_message == '#')
- {
- int offset;
- char error_number[16];
- for (offset=0; offset<15; offset++)
- {
- error_number[offset] = *(error_message+offset+1);
- if (*(error_message+offset) == ' ')
- break;
- }
- if((offset > 1) && (offset < 15))
- {
- error_number[offset-1]='\0';
- fprintf(stderr, "libpng error no. %s: %s\n", error_number,
- error_message+offset);
- }
- else
- fprintf(stderr, "libpng error: %s, offset=%d\n", error_message,offset);
- }
- else
-#endif
- fprintf(stderr, "libpng error: %s\n", error_message);
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
- if (png_ptr)
- {
-# ifdef USE_FAR_KEYWORD
- {
- jmp_buf jmpbuf;
- png_memcpy(jmpbuf, png_ptr->jmpbuf, png_sizeof(jmp_buf));
- longjmp(jmpbuf, 1);
- }
-# else
- longjmp(png_ptr->jmpbuf, 1);
-# endif
- }
-#else
- PNG_ABORT();
-#endif
-#ifdef PNG_NO_CONSOLE_IO
- error_message = error_message; /* make compiler happy */
-#endif
-}
-
-#ifndef PNG_NO_WARNINGS
-/* This function is called when there is a warning, but the library thinks
- * it can continue anyway. Replacement functions don't have to do anything
- * here if you don't want them to. In the default configuration, png_ptr is
- * not used, but it is passed in case it may be useful.
- */
-static void /* PRIVATE */
-png_default_warning(png_structp png_ptr, png_const_charp warning_message)
-{
-#ifndef PNG_NO_CONSOLE_IO
-# ifdef PNG_ERROR_NUMBERS_SUPPORTED
- if (*warning_message == '#')
- {
- int offset;
- char warning_number[16];
- for (offset=0; offset<15; offset++)
- {
- warning_number[offset]=*(warning_message+offset+1);
- if (*(warning_message+offset) == ' ')
- break;
- }
- if((offset > 1) && (offset < 15))
- {
- warning_number[offset-1]='\0';
- fprintf(stderr, "libpng warning no. %s: %s\n", warning_number,
- warning_message+offset);
- }
- else
- fprintf(stderr, "libpng warning: %s\n", warning_message);
- }
- else
-# endif
- fprintf(stderr, "libpng warning: %s\n", warning_message);
-#else
- warning_message = warning_message; /* make compiler happy */
-#endif
- png_ptr = png_ptr; /* make compiler happy */
-}
-#endif /* PNG_NO_WARNINGS */
-
-/* This function is called when the application wants to use another method
- * of handling errors and warnings. Note that the error function MUST NOT
- * return to the calling routine or serious problems will occur. The return
- * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1)
- */
-void PNGAPI
-png_set_error_fn(png_structp png_ptr, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warning_fn)
-{
- if (png_ptr == NULL)
- return;
- png_ptr->error_ptr = error_ptr;
- png_ptr->error_fn = error_fn;
- png_ptr->warning_fn = warning_fn;
-}
-
-
-/* This function returns a pointer to the error_ptr associated with the user
- * functions. The application should free any memory associated with this
- * pointer before png_write_destroy and png_read_destroy are called.
- */
-png_voidp PNGAPI
-png_get_error_ptr(png_structp png_ptr)
-{
- if (png_ptr == NULL)
- return NULL;
- return ((png_voidp)png_ptr->error_ptr);
-}
-
-
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-void PNGAPI
-png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode)
-{
- if(png_ptr != NULL)
- {
- png_ptr->flags &=
- ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode);
- }
-}
-#endif
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pnggccrd.c b/Build/source/libs/libpng/pnggccrd.c
deleted file mode 100644
index e61523e77a2..00000000000
--- a/Build/source/libs/libpng/pnggccrd.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* pnggccrd.c was removed from libpng-1.2.20. */
-
-/* This code snippet is for use by configure's compilation test. */
-
-#if (!defined _MSC_VER) && \
- defined(PNG_ASSEMBLER_CODE_SUPPORTED) && \
- defined(PNG_MMX_CODE_SUPPORTED)
-
-int PNGAPI png_dummy_mmx_support(void);
-
-static int _mmx_supported = 2; // 0: no MMX; 1: MMX supported; 2: not tested
-
-int PNGAPI
-png_dummy_mmx_support(void) __attribute__((noinline));
-
-int PNGAPI
-png_dummy_mmx_support(void)
-{
- int result;
-#if defined(PNG_MMX_CODE_SUPPORTED) // superfluous, but what the heck
- __asm__ __volatile__ (
-#if defined(__x86_64__)
- "pushq %%rbx \n\t" // rbx gets clobbered by CPUID instruction
- "pushq %%rcx \n\t" // so does rcx...
- "pushq %%rdx \n\t" // ...and rdx (but rcx & rdx safe on Linux)
- "pushfq \n\t" // save Eflag to stack
- "popq %%rax \n\t" // get Eflag from stack into rax
- "movq %%rax, %%rcx \n\t" // make another copy of Eflag in rcx
- "xorl $0x200000, %%eax \n\t" // toggle ID bit in Eflag (i.e., bit 21)
- "pushq %%rax \n\t" // save modified Eflag back to stack
- "popfq \n\t" // restore modified value to Eflag reg
- "pushfq \n\t" // save Eflag to stack
- "popq %%rax \n\t" // get Eflag from stack
- "pushq %%rcx \n\t" // save original Eflag to stack
- "popfq \n\t" // restore original Eflag
-#else
- "pushl %%ebx \n\t" // ebx gets clobbered by CPUID instruction
- "pushl %%ecx \n\t" // so does ecx...
- "pushl %%edx \n\t" // ...and edx (but ecx & edx safe on Linux)
- "pushfl \n\t" // save Eflag to stack
- "popl %%eax \n\t" // get Eflag from stack into eax
- "movl %%eax, %%ecx \n\t" // make another copy of Eflag in ecx
- "xorl $0x200000, %%eax \n\t" // toggle ID bit in Eflag (i.e., bit 21)
- "pushl %%eax \n\t" // save modified Eflag back to stack
- "popfl \n\t" // restore modified value to Eflag reg
- "pushfl \n\t" // save Eflag to stack
- "popl %%eax \n\t" // get Eflag from stack
- "pushl %%ecx \n\t" // save original Eflag to stack
- "popfl \n\t" // restore original Eflag
-#endif
- "xorl %%ecx, %%eax \n\t" // compare new Eflag with original Eflag
- "jz 0f \n\t" // if same, CPUID instr. is not supported
-
- "xorl %%eax, %%eax \n\t" // set eax to zero
-// ".byte 0x0f, 0xa2 \n\t" // CPUID instruction (two-byte opcode)
- "cpuid \n\t" // get the CPU identification info
- "cmpl $1, %%eax \n\t" // make sure eax return non-zero value
- "jl 0f \n\t" // if eax is zero, MMX is not supported
-
- "xorl %%eax, %%eax \n\t" // set eax to zero and...
- "incl %%eax \n\t" // ...increment eax to 1. This pair is
- // faster than the instruction "mov eax, 1"
- "cpuid \n\t" // get the CPU identification info again
- "andl $0x800000, %%edx \n\t" // mask out all bits but MMX bit (23)
- "cmpl $0, %%edx \n\t" // 0 = MMX not supported
- "jz 0f \n\t" // non-zero = yes, MMX IS supported
-
- "movl $1, %%eax \n\t" // set return value to 1
- "jmp 1f \n\t" // DONE: have MMX support
-
- "0: \n\t" // .NOT_SUPPORTED: target label for jump instructions
- "movl $0, %%eax \n\t" // set return value to 0
- "1: \n\t" // .RETURN: target label for jump instructions
-#if defined(__x86_64__)
- "popq %%rdx \n\t" // restore rdx
- "popq %%rcx \n\t" // restore rcx
- "popq %%rbx \n\t" // restore rbx
-#else
- "popl %%edx \n\t" // restore edx
- "popl %%ecx \n\t" // restore ecx
- "popl %%ebx \n\t" // restore ebx
-#endif
-
-// "ret \n\t" // DONE: no MMX support
- // (fall through to standard C "ret")
-
- : "=a" (result) // output list
-
- : // any variables used on input (none)
-
- // no clobber list
-// , "%ebx", "%ecx", "%edx" // GRR: we handle these manually
-// , "memory" // if write to a variable gcc thought was in a reg
-// , "cc" // "condition codes" (flag bits)
- );
- _mmx_supported = result;
-#else
- _mmx_supported = 0;
-#endif /* PNG_MMX_CODE_SUPPORTED */
-
- return _mmx_supported;
-}
-#endif
diff --git a/Build/source/libs/libpng/pngget.c b/Build/source/libs/libpng/pngget.c
deleted file mode 100644
index a0e90bb6a4f..00000000000
--- a/Build/source/libs/libpng/pngget.c
+++ /dev/null
@@ -1,901 +0,0 @@
-
-/* pngget.c - retrieval of values from info struct
- *
- * Last changed in libpng 1.2.15 January 5, 2007
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2007 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-png_uint_32 PNGAPI
-png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- return(info_ptr->valid & flag);
- else
- return(0);
-}
-
-png_uint_32 PNGAPI
-png_get_rowbytes(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- return(info_ptr->rowbytes);
- else
- return(0);
-}
-
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-png_bytepp PNGAPI
-png_get_rows(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- return(info_ptr->row_pointers);
- else
- return(0);
-}
-#endif
-
-#ifdef PNG_EASY_ACCESS_SUPPORTED
-/* easy access to info, added in libpng-0.99 */
-png_uint_32 PNGAPI
-png_get_image_width(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- {
- return info_ptr->width;
- }
- return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_image_height(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- {
- return info_ptr->height;
- }
- return (0);
-}
-
-png_byte PNGAPI
-png_get_bit_depth(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- {
- return info_ptr->bit_depth;
- }
- return (0);
-}
-
-png_byte PNGAPI
-png_get_color_type(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- {
- return info_ptr->color_type;
- }
- return (0);
-}
-
-png_byte PNGAPI
-png_get_filter_type(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- {
- return info_ptr->filter_type;
- }
- return (0);
-}
-
-png_byte PNGAPI
-png_get_interlace_type(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- {
- return info_ptr->interlace_type;
- }
- return (0);
-}
-
-png_byte PNGAPI
-png_get_compression_type(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- {
- return info_ptr->compression_type;
- }
- return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_pHYs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_pHYs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_x_pixels_per_meter");
- if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
- return (0);
- else return (info_ptr->x_pixels_per_unit);
- }
-#else
- return (0);
-#endif
- return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_pHYs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_pHYs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_y_pixels_per_meter");
- if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
- return (0);
- else return (info_ptr->y_pixels_per_unit);
- }
-#else
- return (0);
-#endif
- return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_pHYs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_pHYs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_pixels_per_meter");
- if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER ||
- info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit)
- return (0);
- else return (info_ptr->x_pixels_per_unit);
- }
-#else
- return (0);
-#endif
- return (0);
-}
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-float PNGAPI
-png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr)
- {
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_pHYs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_pHYs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_aspect_ratio");
- if (info_ptr->x_pixels_per_unit == 0)
- return ((float)0.0);
- else
- return ((float)((float)info_ptr->y_pixels_per_unit
- /(float)info_ptr->x_pixels_per_unit));
- }
-#else
- return (0.0);
-#endif
- return ((float)0.0);
-}
-#endif
-
-png_int_32 PNGAPI
-png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_oFFs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_oFFs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns");
- if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
- return (0);
- else return (info_ptr->x_offset);
- }
-#else
- return (0);
-#endif
- return (0);
-}
-
-png_int_32 PNGAPI
-png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_oFFs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_oFFs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns");
- if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
- return (0);
- else return (info_ptr->y_offset);
- }
-#else
- return (0);
-#endif
- return (0);
-}
-
-png_int_32 PNGAPI
-png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_oFFs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_oFFs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns");
- if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
- return (0);
- else return (info_ptr->x_offset);
- }
-#else
- return (0);
-#endif
- return (0);
-}
-
-png_int_32 PNGAPI
-png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
-#if defined(PNG_oFFs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_oFFs)
- {
- png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns");
- if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
- return (0);
- else return (info_ptr->y_offset);
- }
-#else
- return (0);
-#endif
- return (0);
-}
-
-#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
-{
- return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr)
- *.0254 +.5));
-}
-
-png_uint_32 PNGAPI
-png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
-{
- return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr)
- *.0254 +.5));
-}
-
-png_uint_32 PNGAPI
-png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
-{
- return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr)
- *.0254 +.5));
-}
-
-float PNGAPI
-png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
-{
- return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
- *.00003937);
-}
-
-float PNGAPI
-png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
-{
- return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
- *.00003937);
-}
-
-#if defined(PNG_pHYs_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
- png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
-{
- png_uint_32 retval = 0;
-
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
- {
- png_debug1(1, "in %s retrieval function\n", "pHYs");
- if (res_x != NULL)
- {
- *res_x = info_ptr->x_pixels_per_unit;
- retval |= PNG_INFO_pHYs;
- }
- if (res_y != NULL)
- {
- *res_y = info_ptr->y_pixels_per_unit;
- retval |= PNG_INFO_pHYs;
- }
- if (unit_type != NULL)
- {
- *unit_type = (int)info_ptr->phys_unit_type;
- retval |= PNG_INFO_pHYs;
- if(*unit_type == 1)
- {
- if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
- if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
- }
- }
- }
- return (retval);
-}
-#endif /* PNG_pHYs_SUPPORTED */
-#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
-
-/* png_get_channels really belongs in here, too, but it's been around longer */
-
-#endif /* PNG_EASY_ACCESS_SUPPORTED */
-
-png_byte PNGAPI
-png_get_channels(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- return(info_ptr->channels);
- else
- return (0);
-}
-
-png_bytep PNGAPI
-png_get_signature(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr != NULL && info_ptr != NULL)
- return(info_ptr->signature);
- else
- return (NULL);
-}
-
-#if defined(PNG_bKGD_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
- png_color_16p *background)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)
- && background != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "bKGD");
- *background = &(info_ptr->background);
- return (PNG_INFO_bKGD);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_cHRM_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_cHRM(png_structp png_ptr, png_infop info_ptr,
- double *white_x, double *white_y, double *red_x, double *red_y,
- double *green_x, double *green_y, double *blue_x, double *blue_y)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
- {
- png_debug1(1, "in %s retrieval function\n", "cHRM");
- if (white_x != NULL)
- *white_x = (double)info_ptr->x_white;
- if (white_y != NULL)
- *white_y = (double)info_ptr->y_white;
- if (red_x != NULL)
- *red_x = (double)info_ptr->x_red;
- if (red_y != NULL)
- *red_y = (double)info_ptr->y_red;
- if (green_x != NULL)
- *green_x = (double)info_ptr->x_green;
- if (green_y != NULL)
- *green_y = (double)info_ptr->y_green;
- if (blue_x != NULL)
- *blue_x = (double)info_ptr->x_blue;
- if (blue_y != NULL)
- *blue_y = (double)info_ptr->y_blue;
- return (PNG_INFO_cHRM);
- }
- return (0);
-}
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
- png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
- png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
- png_fixed_point *blue_x, png_fixed_point *blue_y)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
- {
- png_debug1(1, "in %s retrieval function\n", "cHRM");
- if (white_x != NULL)
- *white_x = info_ptr->int_x_white;
- if (white_y != NULL)
- *white_y = info_ptr->int_y_white;
- if (red_x != NULL)
- *red_x = info_ptr->int_x_red;
- if (red_y != NULL)
- *red_y = info_ptr->int_y_red;
- if (green_x != NULL)
- *green_x = info_ptr->int_x_green;
- if (green_y != NULL)
- *green_y = info_ptr->int_y_green;
- if (blue_x != NULL)
- *blue_x = info_ptr->int_x_blue;
- if (blue_y != NULL)
- *blue_y = info_ptr->int_y_blue;
- return (PNG_INFO_cHRM);
- }
- return (0);
-}
-#endif
-#endif
-
-#if defined(PNG_gAMA_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
- && file_gamma != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "gAMA");
- *file_gamma = (double)info_ptr->gamma;
- return (PNG_INFO_gAMA);
- }
- return (0);
-}
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
- png_fixed_point *int_file_gamma)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
- && int_file_gamma != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "gAMA");
- *int_file_gamma = info_ptr->int_gamma;
- return (PNG_INFO_gAMA);
- }
- return (0);
-}
-#endif
-#endif
-
-#if defined(PNG_sRGB_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)
- && file_srgb_intent != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "sRGB");
- *file_srgb_intent = (int)info_ptr->srgb_intent;
- return (PNG_INFO_sRGB);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_iCCP_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
- png_charpp name, int *compression_type,
- png_charpp profile, png_uint_32 *proflen)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)
- && name != NULL && profile != NULL && proflen != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "iCCP");
- *name = info_ptr->iccp_name;
- *profile = info_ptr->iccp_profile;
- /* compression_type is a dummy so the API won't have to change
- if we introduce multiple compression types later. */
- *proflen = (int)info_ptr->iccp_proflen;
- *compression_type = (int)info_ptr->iccp_compression;
- return (PNG_INFO_iCCP);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_sPLT_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
- png_sPLT_tpp spalettes)
-{
- if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
- {
- *spalettes = info_ptr->splt_palettes;
- return ((png_uint_32)info_ptr->splt_palettes_num);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_hIST_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)
- && hist != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "hIST");
- *hist = info_ptr->hist;
- return (PNG_INFO_hIST);
- }
- return (0);
-}
-#endif
-
-png_uint_32 PNGAPI
-png_get_IHDR(png_structp png_ptr, png_infop info_ptr,
- png_uint_32 *width, png_uint_32 *height, int *bit_depth,
- int *color_type, int *interlace_type, int *compression_type,
- int *filter_type)
-
-{
- if (png_ptr != NULL && info_ptr != NULL && width != NULL && height != NULL &&
- bit_depth != NULL && color_type != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "IHDR");
- *width = info_ptr->width;
- *height = info_ptr->height;
- *bit_depth = info_ptr->bit_depth;
- if (info_ptr->bit_depth < 1 || info_ptr->bit_depth > 16)
- png_error(png_ptr, "Invalid bit depth");
- *color_type = info_ptr->color_type;
- if (info_ptr->color_type > 6)
- png_error(png_ptr, "Invalid color type");
- if (compression_type != NULL)
- *compression_type = info_ptr->compression_type;
- if (filter_type != NULL)
- *filter_type = info_ptr->filter_type;
- if (interlace_type != NULL)
- *interlace_type = info_ptr->interlace_type;
-
- /* check for potential overflow of rowbytes */
- if (*width == 0 || *width > PNG_UINT_31_MAX)
- png_error(png_ptr, "Invalid image width");
- if (*height == 0 || *height > PNG_UINT_31_MAX)
- png_error(png_ptr, "Invalid image height");
- if (info_ptr->width > (PNG_UINT_32_MAX
- >> 3) /* 8-byte RGBA pixels */
- - 64 /* bigrowbuf hack */
- - 1 /* filter byte */
- - 7*8 /* rounding of width to multiple of 8 pixels */
- - 8) /* extra max_pixel_depth pad */
- {
- png_warning(png_ptr,
- "Width too large for libpng to process image data.");
- }
- return (1);
- }
- return (0);
-}
-
-#if defined(PNG_oFFs_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
- png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)
- && offset_x != NULL && offset_y != NULL && unit_type != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "oFFs");
- *offset_x = info_ptr->x_offset;
- *offset_y = info_ptr->y_offset;
- *unit_type = (int)info_ptr->offset_unit_type;
- return (PNG_INFO_oFFs);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_pCAL_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
- png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
- png_charp *units, png_charpp *params)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)
- && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
- nparams != NULL && units != NULL && params != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "pCAL");
- *purpose = info_ptr->pcal_purpose;
- *X0 = info_ptr->pcal_X0;
- *X1 = info_ptr->pcal_X1;
- *type = (int)info_ptr->pcal_type;
- *nparams = (int)info_ptr->pcal_nparams;
- *units = info_ptr->pcal_units;
- *params = info_ptr->pcal_params;
- return (PNG_INFO_pCAL);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_sCAL_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
- int *unit, double *width, double *height)
-{
- if (png_ptr != NULL && info_ptr != NULL &&
- (info_ptr->valid & PNG_INFO_sCAL))
- {
- *unit = info_ptr->scal_unit;
- *width = info_ptr->scal_pixel_width;
- *height = info_ptr->scal_pixel_height;
- return (PNG_INFO_sCAL);
- }
- return(0);
-}
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
- int *unit, png_charpp width, png_charpp height)
-{
- if (png_ptr != NULL && info_ptr != NULL &&
- (info_ptr->valid & PNG_INFO_sCAL))
- {
- *unit = info_ptr->scal_unit;
- *width = info_ptr->scal_s_width;
- *height = info_ptr->scal_s_height;
- return (PNG_INFO_sCAL);
- }
- return(0);
-}
-#endif
-#endif
-#endif
-
-#if defined(PNG_pHYs_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_pHYs(png_structp png_ptr, png_infop info_ptr,
- png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
-{
- png_uint_32 retval = 0;
-
- if (png_ptr != NULL && info_ptr != NULL &&
- (info_ptr->valid & PNG_INFO_pHYs))
- {
- png_debug1(1, "in %s retrieval function\n", "pHYs");
- if (res_x != NULL)
- {
- *res_x = info_ptr->x_pixels_per_unit;
- retval |= PNG_INFO_pHYs;
- }
- if (res_y != NULL)
- {
- *res_y = info_ptr->y_pixels_per_unit;
- retval |= PNG_INFO_pHYs;
- }
- if (unit_type != NULL)
- {
- *unit_type = (int)info_ptr->phys_unit_type;
- retval |= PNG_INFO_pHYs;
- }
- }
- return (retval);
-}
-#endif
-
-png_uint_32 PNGAPI
-png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
- int *num_palette)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE)
- && palette != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "PLTE");
- *palette = info_ptr->palette;
- *num_palette = info_ptr->num_palette;
- png_debug1(3, "num_palette = %d\n", *num_palette);
- return (PNG_INFO_PLTE);
- }
- return (0);
-}
-
-#if defined(PNG_sBIT_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)
- && sig_bit != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "sBIT");
- *sig_bit = &(info_ptr->sig_bit);
- return (PNG_INFO_sBIT);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_TEXT_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
- int *num_text)
-{
- if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
- {
- png_debug1(1, "in %s retrieval function\n",
- (png_ptr->chunk_name[0] == '\0' ? "text"
- : (png_const_charp)png_ptr->chunk_name));
- if (text_ptr != NULL)
- *text_ptr = info_ptr->text;
- if (num_text != NULL)
- *num_text = info_ptr->num_text;
- return ((png_uint_32)info_ptr->num_text);
- }
- if (num_text != NULL)
- *num_text = 0;
- return(0);
-}
-#endif
-
-#if defined(PNG_tIME_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
-{
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)
- && mod_time != NULL)
- {
- png_debug1(1, "in %s retrieval function\n", "tIME");
- *mod_time = &(info_ptr->mod_time);
- return (PNG_INFO_tIME);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
- png_bytep *trans, int *num_trans, png_color_16p *trans_values)
-{
- png_uint_32 retval = 0;
- if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
- {
- png_debug1(1, "in %s retrieval function\n", "tRNS");
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (trans != NULL)
- {
- *trans = info_ptr->trans;
- retval |= PNG_INFO_tRNS;
- }
- if (trans_values != NULL)
- *trans_values = &(info_ptr->trans_values);
- }
- else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
- {
- if (trans_values != NULL)
- {
- *trans_values = &(info_ptr->trans_values);
- retval |= PNG_INFO_tRNS;
- }
- if(trans != NULL)
- *trans = NULL;
- }
- if(num_trans != NULL)
- {
- *num_trans = info_ptr->num_trans;
- retval |= PNG_INFO_tRNS;
- }
- }
- return (retval);
-}
-#endif
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
- png_unknown_chunkpp unknowns)
-{
- if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL)
- {
- *unknowns = info_ptr->unknown_chunks;
- return ((png_uint_32)info_ptr->unknown_chunks_num);
- }
- return (0);
-}
-#endif
-
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-png_byte PNGAPI
-png_get_rgb_to_gray_status (png_structp png_ptr)
-{
- return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0);
-}
-#endif
-
-#if defined(PNG_USER_CHUNKS_SUPPORTED)
-png_voidp PNGAPI
-png_get_user_chunk_ptr(png_structp png_ptr)
-{
- return (png_ptr? png_ptr->user_chunk_ptr : NULL);
-}
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-png_uint_32 PNGAPI
-png_get_compression_buffer_size(png_structp png_ptr)
-{
- return (png_uint_32)(png_ptr? png_ptr->zbuf_size : 0L);
-}
-#endif
-
-#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
-#ifndef PNG_1_0_X
-/* this function was added to libpng 1.2.0 and should exist by default */
-png_uint_32 PNGAPI
-png_get_asm_flags (png_structp png_ptr)
-{
- /* obsolete, to be removed from libpng-1.4.0 */
- return (png_ptr? 0L: 0L);
-}
-
-/* this function was added to libpng 1.2.0 and should exist by default */
-png_uint_32 PNGAPI
-png_get_asm_flagmask (int flag_select)
-{
- /* obsolete, to be removed from libpng-1.4.0 */
- flag_select=flag_select;
- return 0L;
-}
-
- /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */
-/* this function was added to libpng 1.2.0 */
-png_uint_32 PNGAPI
-png_get_mmx_flagmask (int flag_select, int *compilerID)
-{
- /* obsolete, to be removed from libpng-1.4.0 */
- flag_select=flag_select;
- *compilerID = -1; /* unknown (i.e., no asm/MMX code compiled) */
- return 0L;
-}
-
-/* this function was added to libpng 1.2.0 */
-png_byte PNGAPI
-png_get_mmx_bitdepth_threshold (png_structp png_ptr)
-{
- /* obsolete, to be removed from libpng-1.4.0 */
- return (png_ptr? 0: 0);
-}
-
-/* this function was added to libpng 1.2.0 */
-png_uint_32 PNGAPI
-png_get_mmx_rowbytes_threshold (png_structp png_ptr)
-{
- /* obsolete, to be removed from libpng-1.4.0 */
- return (png_ptr? 0L: 0L);
-}
-#endif /* ?PNG_1_0_X */
-#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */
-
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-/* these functions were added to libpng 1.2.6 */
-png_uint_32 PNGAPI
-png_get_user_width_max (png_structp png_ptr)
-{
- return (png_ptr? png_ptr->user_width_max : 0);
-}
-png_uint_32 PNGAPI
-png_get_user_height_max (png_structp png_ptr)
-{
- return (png_ptr? png_ptr->user_height_max : 0);
-}
-#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */
-
-
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngmem.c b/Build/source/libs/libpng/pngmem.c
deleted file mode 100644
index 13cc60c0361..00000000000
--- a/Build/source/libs/libpng/pngmem.c
+++ /dev/null
@@ -1,608 +0,0 @@
-
-/* pngmem.c - stub functions for memory allocation
- *
- * Last changed in libpng 1.2.27 [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This file provides a location for all memory allocation. Users who
- * need special memory handling are expected to supply replacement
- * functions for png_malloc() and png_free(), and to use
- * png_create_read_struct_2() and png_create_write_struct_2() to
- * identify the replacement functions.
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-/* Borland DOS special memory handler */
-#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
-/* if you change this, be sure to change the one in png.h also */
-
-/* Allocate memory for a png_struct. The malloc and memset can be replaced
- by a single call to calloc() if this is thought to improve performance. */
-png_voidp /* PRIVATE */
-png_create_struct(int type)
-{
-#ifdef PNG_USER_MEM_SUPPORTED
- return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL));
-}
-
-/* Alternate version of png_create_struct, for use with user-defined malloc. */
-png_voidp /* PRIVATE */
-png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)
-{
-#endif /* PNG_USER_MEM_SUPPORTED */
- png_size_t size;
- png_voidp struct_ptr;
-
- if (type == PNG_STRUCT_INFO)
- size = png_sizeof(png_info);
- else if (type == PNG_STRUCT_PNG)
- size = png_sizeof(png_struct);
- else
- return (png_get_copyright(NULL));
-
-#ifdef PNG_USER_MEM_SUPPORTED
- if(malloc_fn != NULL)
- {
- png_struct dummy_struct;
- png_structp png_ptr = &dummy_struct;
- png_ptr->mem_ptr=mem_ptr;
- struct_ptr = (*(malloc_fn))(png_ptr, (png_uint_32)size);
- }
- else
-#endif /* PNG_USER_MEM_SUPPORTED */
- struct_ptr = (png_voidp)farmalloc(size);
- if (struct_ptr != NULL)
- png_memset(struct_ptr, 0, size);
- return (struct_ptr);
-}
-
-/* Free memory allocated by a png_create_struct() call */
-void /* PRIVATE */
-png_destroy_struct(png_voidp struct_ptr)
-{
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL);
-}
-
-/* Free memory allocated by a png_create_struct() call */
-void /* PRIVATE */
-png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
- png_voidp mem_ptr)
-{
-#endif
- if (struct_ptr != NULL)
- {
-#ifdef PNG_USER_MEM_SUPPORTED
- if(free_fn != NULL)
- {
- png_struct dummy_struct;
- png_structp png_ptr = &dummy_struct;
- png_ptr->mem_ptr=mem_ptr;
- (*(free_fn))(png_ptr, struct_ptr);
- return;
- }
-#endif /* PNG_USER_MEM_SUPPORTED */
- farfree (struct_ptr);
- }
-}
-
-/* Allocate memory. For reasonable files, size should never exceed
- * 64K. However, zlib may allocate more then 64K if you don't tell
- * it not to. See zconf.h and png.h for more information. zlib does
- * need to allocate exactly 64K, so whatever you call here must
- * have the ability to do that.
- *
- * Borland seems to have a problem in DOS mode for exactly 64K.
- * It gives you a segment with an offset of 8 (perhaps to store its
- * memory stuff). zlib doesn't like this at all, so we have to
- * detect and deal with it. This code should not be needed in
- * Windows or OS/2 modes, and only in 16 bit mode. This code has
- * been updated by Alexander Lehmann for version 0.89 to waste less
- * memory.
- *
- * Note that we can't use png_size_t for the "size" declaration,
- * since on some systems a png_size_t is a 16-bit quantity, and as a
- * result, we would be truncating potentially larger memory requests
- * (which should cause a fatal error) and introducing major problems.
- */
-
-png_voidp PNGAPI
-png_malloc(png_structp png_ptr, png_uint_32 size)
-{
- png_voidp ret;
-
- if (png_ptr == NULL || size == 0)
- return (NULL);
-
-#ifdef PNG_USER_MEM_SUPPORTED
- if(png_ptr->malloc_fn != NULL)
- ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
- else
- ret = (png_malloc_default(png_ptr, size));
- if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out of memory!");
- return (ret);
-}
-
-png_voidp PNGAPI
-png_malloc_default(png_structp png_ptr, png_uint_32 size)
-{
- png_voidp ret;
-#endif /* PNG_USER_MEM_SUPPORTED */
-
- if (png_ptr == NULL || size == 0)
- return (NULL);
-
-#ifdef PNG_MAX_MALLOC_64K
- if (size > (png_uint_32)65536L)
- {
- png_warning(png_ptr, "Cannot Allocate > 64K");
- ret = NULL;
- }
- else
-#endif
-
- if (size != (size_t)size)
- ret = NULL;
- else if (size == (png_uint_32)65536L)
- {
- if (png_ptr->offset_table == NULL)
- {
- /* try to see if we need to do any of this fancy stuff */
- ret = farmalloc(size);
- if (ret == NULL || ((png_size_t)ret & 0xffff))
- {
- int num_blocks;
- png_uint_32 total_size;
- png_bytep table;
- int i;
- png_byte huge * hptr;
-
- if (ret != NULL)
- {
- farfree(ret);
- ret = NULL;
- }
-
- if(png_ptr->zlib_window_bits > 14)
- num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14));
- else
- num_blocks = 1;
- if (png_ptr->zlib_mem_level >= 7)
- num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7));
- else
- num_blocks++;
-
- total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks+16;
-
- table = farmalloc(total_size);
-
- if (table == NULL)
- {
-#ifndef PNG_USER_MEM_SUPPORTED
- if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out Of Memory."); /* Note "O" and "M" */
- else
- png_warning(png_ptr, "Out Of Memory.");
-#endif
- return (NULL);
- }
-
- if ((png_size_t)table & 0xfff0)
- {
-#ifndef PNG_USER_MEM_SUPPORTED
- if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr,
- "Farmalloc didn't return normalized pointer");
- else
- png_warning(png_ptr,
- "Farmalloc didn't return normalized pointer");
-#endif
- return (NULL);
- }
-
- png_ptr->offset_table = table;
- png_ptr->offset_table_ptr = farmalloc(num_blocks *
- png_sizeof (png_bytep));
-
- if (png_ptr->offset_table_ptr == NULL)
- {
-#ifndef PNG_USER_MEM_SUPPORTED
- if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out Of memory."); /* Note "O" and "M" */
- else
- png_warning(png_ptr, "Out Of memory.");
-#endif
- return (NULL);
- }
-
- hptr = (png_byte huge *)table;
- if ((png_size_t)hptr & 0xf)
- {
- hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
- hptr = hptr + 16L; /* "hptr += 16L" fails on Turbo C++ 3.0 */
- }
- for (i = 0; i < num_blocks; i++)
- {
- png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
- hptr = hptr + (png_uint_32)65536L; /* "+=" fails on TC++3.0 */
- }
-
- png_ptr->offset_table_number = num_blocks;
- png_ptr->offset_table_count = 0;
- png_ptr->offset_table_count_free = 0;
- }
- }
-
- if (png_ptr->offset_table_count >= png_ptr->offset_table_number)
- {
-#ifndef PNG_USER_MEM_SUPPORTED
- if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out of Memory."); /* Note "o" and "M" */
- else
- png_warning(png_ptr, "Out of Memory.");
-#endif
- return (NULL);
- }
-
- ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++];
- }
- else
- ret = farmalloc(size);
-
-#ifndef PNG_USER_MEM_SUPPORTED
- if (ret == NULL)
- {
- if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out of memory."); /* Note "o" and "m" */
- else
- png_warning(png_ptr, "Out of memory."); /* Note "o" and "m" */
- }
-#endif
-
- return (ret);
-}
-
-/* free a pointer allocated by png_malloc(). In the default
- configuration, png_ptr is not used, but is passed in case it
- is needed. If ptr is NULL, return without taking any action. */
-void PNGAPI
-png_free(png_structp png_ptr, png_voidp ptr)
-{
- if (png_ptr == NULL || ptr == NULL)
- return;
-
-#ifdef PNG_USER_MEM_SUPPORTED
- if (png_ptr->free_fn != NULL)
- {
- (*(png_ptr->free_fn))(png_ptr, ptr);
- return;
- }
- else png_free_default(png_ptr, ptr);
-}
-
-void PNGAPI
-png_free_default(png_structp png_ptr, png_voidp ptr)
-{
-#endif /* PNG_USER_MEM_SUPPORTED */
-
- if(png_ptr == NULL || ptr == NULL) return;
-
- if (png_ptr->offset_table != NULL)
- {
- int i;
-
- for (i = 0; i < png_ptr->offset_table_count; i++)
- {
- if (ptr == png_ptr->offset_table_ptr[i])
- {
- ptr = NULL;
- png_ptr->offset_table_count_free++;
- break;
- }
- }
- if (png_ptr->offset_table_count_free == png_ptr->offset_table_count)
- {
- farfree(png_ptr->offset_table);
- farfree(png_ptr->offset_table_ptr);
- png_ptr->offset_table = NULL;
- png_ptr->offset_table_ptr = NULL;
- }
- }
-
- if (ptr != NULL)
- {
- farfree(ptr);
- }
-}
-
-#else /* Not the Borland DOS special memory handler */
-
-/* Allocate memory for a png_struct or a png_info. The malloc and
- memset can be replaced by a single call to calloc() if this is thought
- to improve performance noticably. */
-png_voidp /* PRIVATE */
-png_create_struct(int type)
-{
-#ifdef PNG_USER_MEM_SUPPORTED
- return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL));
-}
-
-/* Allocate memory for a png_struct or a png_info. The malloc and
- memset can be replaced by a single call to calloc() if this is thought
- to improve performance noticably. */
-png_voidp /* PRIVATE */
-png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)
-{
-#endif /* PNG_USER_MEM_SUPPORTED */
- png_size_t size;
- png_voidp struct_ptr;
-
- if (type == PNG_STRUCT_INFO)
- size = png_sizeof(png_info);
- else if (type == PNG_STRUCT_PNG)
- size = png_sizeof(png_struct);
- else
- return (NULL);
-
-#ifdef PNG_USER_MEM_SUPPORTED
- if(malloc_fn != NULL)
- {
- png_struct dummy_struct;
- png_structp png_ptr = &dummy_struct;
- png_ptr->mem_ptr=mem_ptr;
- struct_ptr = (*(malloc_fn))(png_ptr, size);
- if (struct_ptr != NULL)
- png_memset(struct_ptr, 0, size);
- return (struct_ptr);
- }
-#endif /* PNG_USER_MEM_SUPPORTED */
-
-#if defined(__TURBOC__) && !defined(__FLAT__)
- struct_ptr = (png_voidp)farmalloc(size);
-#else
-# if defined(_MSC_VER) && defined(MAXSEG_64K)
- struct_ptr = (png_voidp)halloc(size,1);
-# else
- struct_ptr = (png_voidp)malloc(size);
-# endif
-#endif
- if (struct_ptr != NULL)
- png_memset(struct_ptr, 0, size);
-
- return (struct_ptr);
-}
-
-
-/* Free memory allocated by a png_create_struct() call */
-void /* PRIVATE */
-png_destroy_struct(png_voidp struct_ptr)
-{
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL);
-}
-
-/* Free memory allocated by a png_create_struct() call */
-void /* PRIVATE */
-png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
- png_voidp mem_ptr)
-{
-#endif /* PNG_USER_MEM_SUPPORTED */
- if (struct_ptr != NULL)
- {
-#ifdef PNG_USER_MEM_SUPPORTED
- if(free_fn != NULL)
- {
- png_struct dummy_struct;
- png_structp png_ptr = &dummy_struct;
- png_ptr->mem_ptr=mem_ptr;
- (*(free_fn))(png_ptr, struct_ptr);
- return;
- }
-#endif /* PNG_USER_MEM_SUPPORTED */
-#if defined(__TURBOC__) && !defined(__FLAT__)
- farfree(struct_ptr);
-#else
-# if defined(_MSC_VER) && defined(MAXSEG_64K)
- hfree(struct_ptr);
-# else
- free(struct_ptr);
-# endif
-#endif
- }
-}
-
-/* Allocate memory. For reasonable files, size should never exceed
- 64K. However, zlib may allocate more then 64K if you don't tell
- it not to. See zconf.h and png.h for more information. zlib does
- need to allocate exactly 64K, so whatever you call here must
- have the ability to do that. */
-
-png_voidp PNGAPI
-png_malloc(png_structp png_ptr, png_uint_32 size)
-{
- png_voidp ret;
-
-#ifdef PNG_USER_MEM_SUPPORTED
- if (png_ptr == NULL || size == 0)
- return (NULL);
-
- if(png_ptr->malloc_fn != NULL)
- ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
- else
- ret = (png_malloc_default(png_ptr, size));
- if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out of Memory!");
- return (ret);
-}
-
-png_voidp PNGAPI
-png_malloc_default(png_structp png_ptr, png_uint_32 size)
-{
- png_voidp ret;
-#endif /* PNG_USER_MEM_SUPPORTED */
-
- if (png_ptr == NULL || size == 0)
- return (NULL);
-
-#ifdef PNG_MAX_MALLOC_64K
- if (size > (png_uint_32)65536L)
- {
-#ifndef PNG_USER_MEM_SUPPORTED
- if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Cannot Allocate > 64K");
- else
-#endif
- return NULL;
- }
-#endif
-
- /* Check for overflow */
-#if defined(__TURBOC__) && !defined(__FLAT__)
- if (size != (unsigned long)size)
- ret = NULL;
- else
- ret = farmalloc(size);
-#else
-# if defined(_MSC_VER) && defined(MAXSEG_64K)
- if (size != (unsigned long)size)
- ret = NULL;
- else
- ret = halloc(size, 1);
-# else
- if (size != (size_t)size)
- ret = NULL;
- else
- ret = malloc((size_t)size);
-# endif
-#endif
-
-#ifndef PNG_USER_MEM_SUPPORTED
- if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out of Memory");
-#endif
-
- return (ret);
-}
-
-/* Free a pointer allocated by png_malloc(). If ptr is NULL, return
- without taking any action. */
-void PNGAPI
-png_free(png_structp png_ptr, png_voidp ptr)
-{
- if (png_ptr == NULL || ptr == NULL)
- return;
-
-#ifdef PNG_USER_MEM_SUPPORTED
- if (png_ptr->free_fn != NULL)
- {
- (*(png_ptr->free_fn))(png_ptr, ptr);
- return;
- }
- else png_free_default(png_ptr, ptr);
-}
-void PNGAPI
-png_free_default(png_structp png_ptr, png_voidp ptr)
-{
- if (png_ptr == NULL || ptr == NULL)
- return;
-
-#endif /* PNG_USER_MEM_SUPPORTED */
-
-#if defined(__TURBOC__) && !defined(__FLAT__)
- farfree(ptr);
-#else
-# if defined(_MSC_VER) && defined(MAXSEG_64K)
- hfree(ptr);
-# else
- free(ptr);
-# endif
-#endif
-}
-
-#endif /* Not Borland DOS special memory handler */
-
-#if defined(PNG_1_0_X)
-# define png_malloc_warn png_malloc
-#else
-/* This function was added at libpng version 1.2.3. The png_malloc_warn()
- * function will set up png_malloc() to issue a png_warning and return NULL
- * instead of issuing a png_error, if it fails to allocate the requested
- * memory.
- */
-png_voidp PNGAPI
-png_malloc_warn(png_structp png_ptr, png_uint_32 size)
-{
- png_voidp ptr;
- png_uint_32 save_flags;
- if(png_ptr == NULL) return (NULL);
-
- save_flags=png_ptr->flags;
- png_ptr->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK;
- ptr = (png_voidp)png_malloc((png_structp)png_ptr, size);
- png_ptr->flags=save_flags;
- return(ptr);
-}
-#endif
-
-png_voidp PNGAPI
-png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2,
- png_uint_32 length)
-{
- png_size_t size;
-
- size = (png_size_t)length;
- if ((png_uint_32)size != length)
- png_error(png_ptr,"Overflow in png_memcpy_check.");
-
- return(png_memcpy (s1, s2, size));
-}
-
-png_voidp PNGAPI
-png_memset_check (png_structp png_ptr, png_voidp s1, int value,
- png_uint_32 length)
-{
- png_size_t size;
-
- size = (png_size_t)length;
- if ((png_uint_32)size != length)
- png_error(png_ptr,"Overflow in png_memset_check.");
-
- return (png_memset (s1, value, size));
-
-}
-
-#ifdef PNG_USER_MEM_SUPPORTED
-/* This function is called when the application wants to use another method
- * of allocating and freeing memory.
- */
-void PNGAPI
-png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr
- malloc_fn, png_free_ptr free_fn)
-{
- if(png_ptr != NULL) {
- png_ptr->mem_ptr = mem_ptr;
- png_ptr->malloc_fn = malloc_fn;
- png_ptr->free_fn = free_fn;
- }
-}
-
-/* This function returns a pointer to the mem_ptr associated with the user
- * functions. The application should free any memory associated with this
- * pointer before png_write_destroy and png_read_destroy are called.
- */
-png_voidp PNGAPI
-png_get_mem_ptr(png_structp png_ptr)
-{
- if(png_ptr == NULL) return (NULL);
- return ((png_voidp)png_ptr->mem_ptr);
-}
-#endif /* PNG_USER_MEM_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngnow.png b/Build/source/libs/libpng/pngnow.png
deleted file mode 100644
index 82793ebddb7..00000000000
--- a/Build/source/libs/libpng/pngnow.png
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/libpng/pngpread.c b/Build/source/libs/libpng/pngpread.c
deleted file mode 100644
index aa7151c4b39..00000000000
--- a/Build/source/libs/libpng/pngpread.c
+++ /dev/null
@@ -1,1598 +0,0 @@
-
-/* pngpread.c - read a png file in push mode
- *
- * Last changed in libpng 1.2.27 [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-
-/* push model modes */
-#define PNG_READ_SIG_MODE 0
-#define PNG_READ_CHUNK_MODE 1
-#define PNG_READ_IDAT_MODE 2
-#define PNG_SKIP_MODE 3
-#define PNG_READ_tEXt_MODE 4
-#define PNG_READ_zTXt_MODE 5
-#define PNG_READ_DONE_MODE 6
-#define PNG_READ_iTXt_MODE 7
-#define PNG_ERROR_MODE 8
-
-void PNGAPI
-png_process_data(png_structp png_ptr, png_infop info_ptr,
- png_bytep buffer, png_size_t buffer_size)
-{
- if(png_ptr == NULL || info_ptr == NULL) return;
- png_push_restore_buffer(png_ptr, buffer, buffer_size);
-
- while (png_ptr->buffer_size)
- {
- png_process_some_data(png_ptr, info_ptr);
- }
-}
-
-/* What we do with the incoming data depends on what we were previously
- * doing before we ran out of data...
- */
-void /* PRIVATE */
-png_process_some_data(png_structp png_ptr, png_infop info_ptr)
-{
- if(png_ptr == NULL) return;
- switch (png_ptr->process_mode)
- {
- case PNG_READ_SIG_MODE:
- {
- png_push_read_sig(png_ptr, info_ptr);
- break;
- }
- case PNG_READ_CHUNK_MODE:
- {
- png_push_read_chunk(png_ptr, info_ptr);
- break;
- }
- case PNG_READ_IDAT_MODE:
- {
- png_push_read_IDAT(png_ptr);
- break;
- }
-#if defined(PNG_READ_tEXt_SUPPORTED)
- case PNG_READ_tEXt_MODE:
- {
- png_push_read_tEXt(png_ptr, info_ptr);
- break;
- }
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
- case PNG_READ_zTXt_MODE:
- {
- png_push_read_zTXt(png_ptr, info_ptr);
- break;
- }
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
- case PNG_READ_iTXt_MODE:
- {
- png_push_read_iTXt(png_ptr, info_ptr);
- break;
- }
-#endif
- case PNG_SKIP_MODE:
- {
- png_push_crc_finish(png_ptr);
- break;
- }
- default:
- {
- png_ptr->buffer_size = 0;
- break;
- }
- }
-}
-
-/* Read any remaining signature bytes from the stream and compare them with
- * the correct PNG signature. It is possible that this routine is called
- * with bytes already read from the signature, either because they have been
- * checked by the calling application, or because of multiple calls to this
- * routine.
- */
-void /* PRIVATE */
-png_push_read_sig(png_structp png_ptr, png_infop info_ptr)
-{
- png_size_t num_checked = png_ptr->sig_bytes,
- num_to_check = 8 - num_checked;
-
- if (png_ptr->buffer_size < num_to_check)
- {
- num_to_check = png_ptr->buffer_size;
- }
-
- png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]),
- num_to_check);
- png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes+num_to_check);
-
- if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
- {
- if (num_checked < 4 &&
- png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
- png_error(png_ptr, "Not a PNG file");
- else
- png_error(png_ptr, "PNG file corrupted by ASCII conversion");
- }
- else
- {
- if (png_ptr->sig_bytes >= 8)
- {
- png_ptr->process_mode = PNG_READ_CHUNK_MODE;
- }
- }
-}
-
-void /* PRIVATE */
-png_push_read_chunk(png_structp png_ptr, png_infop info_ptr)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST PNG_IHDR;
- PNG_CONST PNG_IDAT;
- PNG_CONST PNG_IEND;
- PNG_CONST PNG_PLTE;
-#if defined(PNG_READ_bKGD_SUPPORTED)
- PNG_CONST PNG_bKGD;
-#endif
-#if defined(PNG_READ_cHRM_SUPPORTED)
- PNG_CONST PNG_cHRM;
-#endif
-#if defined(PNG_READ_gAMA_SUPPORTED)
- PNG_CONST PNG_gAMA;
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
- PNG_CONST PNG_hIST;
-#endif
-#if defined(PNG_READ_iCCP_SUPPORTED)
- PNG_CONST PNG_iCCP;
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
- PNG_CONST PNG_iTXt;
-#endif
-#if defined(PNG_READ_oFFs_SUPPORTED)
- PNG_CONST PNG_oFFs;
-#endif
-#if defined(PNG_READ_pCAL_SUPPORTED)
- PNG_CONST PNG_pCAL;
-#endif
-#if defined(PNG_READ_pHYs_SUPPORTED)
- PNG_CONST PNG_pHYs;
-#endif
-#if defined(PNG_READ_sBIT_SUPPORTED)
- PNG_CONST PNG_sBIT;
-#endif
-#if defined(PNG_READ_sCAL_SUPPORTED)
- PNG_CONST PNG_sCAL;
-#endif
-#if defined(PNG_READ_sRGB_SUPPORTED)
- PNG_CONST PNG_sRGB;
-#endif
-#if defined(PNG_READ_sPLT_SUPPORTED)
- PNG_CONST PNG_sPLT;
-#endif
-#if defined(PNG_READ_tEXt_SUPPORTED)
- PNG_CONST PNG_tEXt;
-#endif
-#if defined(PNG_READ_tIME_SUPPORTED)
- PNG_CONST PNG_tIME;
-#endif
-#if defined(PNG_READ_tRNS_SUPPORTED)
- PNG_CONST PNG_tRNS;
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
- PNG_CONST PNG_zTXt;
-#endif
-#endif /* PNG_USE_LOCAL_ARRAYS */
- /* First we make sure we have enough data for the 4 byte chunk name
- * and the 4 byte chunk length before proceeding with decoding the
- * chunk data. To fully decode each of these chunks, we also make
- * sure we have enough data in the buffer for the 4 byte CRC at the
- * end of every chunk (except IDAT, which is handled separately).
- */
- if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
- {
- png_byte chunk_length[4];
-
- if (png_ptr->buffer_size < 8)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
-
- png_push_fill_buffer(png_ptr, chunk_length, 4);
- png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length);
- png_reset_crc(png_ptr);
- png_crc_read(png_ptr, png_ptr->chunk_name, 4);
- png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
- }
-
- if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- if(png_ptr->mode & PNG_AFTER_IDAT)
- png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
-
- if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- if (png_ptr->push_length != 13)
- png_error(png_ptr, "Invalid IHDR length");
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length);
- }
- else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_IEND(png_ptr, info_ptr, png_ptr->push_length);
-
- png_ptr->process_mode = PNG_READ_DONE_MODE;
- png_push_have_end(png_ptr, info_ptr);
- }
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
- else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- png_ptr->mode |= PNG_HAVE_IDAT;
- png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length);
- if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
- png_ptr->mode |= PNG_HAVE_PLTE;
- else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- {
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before IDAT");
- else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
- !(png_ptr->mode & PNG_HAVE_PLTE))
- png_error(png_ptr, "Missing PLTE before IDAT");
- }
- }
-#endif
- else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_PLTE(png_ptr, info_ptr, png_ptr->push_length);
- }
- else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- {
- /* If we reach an IDAT chunk, this means we have read all of the
- * header chunks, and we can start reading the image (or if this
- * is called after the image has been read - we have an error).
- */
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before IDAT");
- else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
- !(png_ptr->mode & PNG_HAVE_PLTE))
- png_error(png_ptr, "Missing PLTE before IDAT");
-
- if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- if (!(png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
- if (png_ptr->push_length == 0)
- return;
-
- if (png_ptr->mode & PNG_AFTER_IDAT)
- png_error(png_ptr, "Too many IDAT's found");
- }
-
- png_ptr->idat_size = png_ptr->push_length;
- png_ptr->mode |= PNG_HAVE_IDAT;
- png_ptr->process_mode = PNG_READ_IDAT_MODE;
- png_push_have_info(png_ptr, info_ptr);
- png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
- png_ptr->zstream.next_out = png_ptr->row_buf;
- return;
- }
-#if defined(PNG_READ_gAMA_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_gAMA(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_sBIT_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_sBIT(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_cHRM_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_sRGB_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_sRGB(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_iCCP_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_iCCP(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_sPLT_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_sPLT(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_tRNS_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_tRNS(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_bKGD_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_bKGD(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_hIST(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_pHYs_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_pHYs(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_oFFs_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_oFFs(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_pCAL_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_pCAL(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_sCAL_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_sCAL(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_tIME_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_handle_tIME(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_tEXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_push_handle_tEXt(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_push_handle_zTXt(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
- }
-#endif
- else
- {
- if (png_ptr->push_length + 4 > png_ptr->buffer_size)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
- png_push_handle_unknown(png_ptr, info_ptr, png_ptr->push_length);
- }
-
- png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-}
-
-void /* PRIVATE */
-png_push_crc_skip(png_structp png_ptr, png_uint_32 skip)
-{
- png_ptr->process_mode = PNG_SKIP_MODE;
- png_ptr->skip_length = skip;
-}
-
-void /* PRIVATE */
-png_push_crc_finish(png_structp png_ptr)
-{
- if (png_ptr->skip_length && png_ptr->save_buffer_size)
- {
- png_size_t save_size;
-
- if (png_ptr->skip_length < (png_uint_32)png_ptr->save_buffer_size)
- save_size = (png_size_t)png_ptr->skip_length;
- else
- save_size = png_ptr->save_buffer_size;
-
- png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
-
- png_ptr->skip_length -= save_size;
- png_ptr->buffer_size -= save_size;
- png_ptr->save_buffer_size -= save_size;
- png_ptr->save_buffer_ptr += save_size;
- }
- if (png_ptr->skip_length && png_ptr->current_buffer_size)
- {
- png_size_t save_size;
-
- if (png_ptr->skip_length < (png_uint_32)png_ptr->current_buffer_size)
- save_size = (png_size_t)png_ptr->skip_length;
- else
- save_size = png_ptr->current_buffer_size;
-
- png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
- png_ptr->skip_length -= save_size;
- png_ptr->buffer_size -= save_size;
- png_ptr->current_buffer_size -= save_size;
- png_ptr->current_buffer_ptr += save_size;
- }
- if (!png_ptr->skip_length)
- {
- if (png_ptr->buffer_size < 4)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
-
- png_crc_finish(png_ptr, 0);
- png_ptr->process_mode = PNG_READ_CHUNK_MODE;
- }
-}
-
-void PNGAPI
-png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
-{
- png_bytep ptr;
-
- if(png_ptr == NULL) return;
- ptr = buffer;
- if (png_ptr->save_buffer_size)
- {
- png_size_t save_size;
-
- if (length < png_ptr->save_buffer_size)
- save_size = length;
- else
- save_size = png_ptr->save_buffer_size;
-
- png_memcpy(ptr, png_ptr->save_buffer_ptr, save_size);
- length -= save_size;
- ptr += save_size;
- png_ptr->buffer_size -= save_size;
- png_ptr->save_buffer_size -= save_size;
- png_ptr->save_buffer_ptr += save_size;
- }
- if (length && png_ptr->current_buffer_size)
- {
- png_size_t save_size;
-
- if (length < png_ptr->current_buffer_size)
- save_size = length;
- else
- save_size = png_ptr->current_buffer_size;
-
- png_memcpy(ptr, png_ptr->current_buffer_ptr, save_size);
- png_ptr->buffer_size -= save_size;
- png_ptr->current_buffer_size -= save_size;
- png_ptr->current_buffer_ptr += save_size;
- }
-}
-
-void /* PRIVATE */
-png_push_save_buffer(png_structp png_ptr)
-{
- if (png_ptr->save_buffer_size)
- {
- if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
- {
- png_size_t i,istop;
- png_bytep sp;
- png_bytep dp;
-
- istop = png_ptr->save_buffer_size;
- for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer;
- i < istop; i++, sp++, dp++)
- {
- *dp = *sp;
- }
- }
- }
- if (png_ptr->save_buffer_size + png_ptr->current_buffer_size >
- png_ptr->save_buffer_max)
- {
- png_size_t new_max;
- png_bytep old_buffer;
-
- if (png_ptr->save_buffer_size > PNG_SIZE_MAX -
- (png_ptr->current_buffer_size + 256))
- {
- png_error(png_ptr, "Potential overflow of save_buffer");
- }
- new_max = png_ptr->save_buffer_size + png_ptr->current_buffer_size + 256;
- old_buffer = png_ptr->save_buffer;
- png_ptr->save_buffer = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)new_max);
- png_memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
- png_free(png_ptr, old_buffer);
- png_ptr->save_buffer_max = new_max;
- }
- if (png_ptr->current_buffer_size)
- {
- png_memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size,
- png_ptr->current_buffer_ptr, png_ptr->current_buffer_size);
- png_ptr->save_buffer_size += png_ptr->current_buffer_size;
- png_ptr->current_buffer_size = 0;
- }
- png_ptr->save_buffer_ptr = png_ptr->save_buffer;
- png_ptr->buffer_size = 0;
-}
-
-void /* PRIVATE */
-png_push_restore_buffer(png_structp png_ptr, png_bytep buffer,
- png_size_t buffer_length)
-{
- png_ptr->current_buffer = buffer;
- png_ptr->current_buffer_size = buffer_length;
- png_ptr->buffer_size = buffer_length + png_ptr->save_buffer_size;
- png_ptr->current_buffer_ptr = png_ptr->current_buffer;
-}
-
-void /* PRIVATE */
-png_push_read_IDAT(png_structp png_ptr)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST PNG_IDAT;
-#endif
- if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
- {
- png_byte chunk_length[4];
-
- if (png_ptr->buffer_size < 8)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
-
- png_push_fill_buffer(png_ptr, chunk_length, 4);
- png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length);
- png_reset_crc(png_ptr);
- png_crc_read(png_ptr, png_ptr->chunk_name, 4);
- png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
-
- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- {
- png_ptr->process_mode = PNG_READ_CHUNK_MODE;
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
- png_error(png_ptr, "Not enough compressed data");
- return;
- }
-
- png_ptr->idat_size = png_ptr->push_length;
- }
- if (png_ptr->idat_size && png_ptr->save_buffer_size)
- {
- png_size_t save_size;
-
- if (png_ptr->idat_size < (png_uint_32)png_ptr->save_buffer_size)
- {
- save_size = (png_size_t)png_ptr->idat_size;
- /* check for overflow */
- if((png_uint_32)save_size != png_ptr->idat_size)
- png_error(png_ptr, "save_size overflowed in pngpread");
- }
- else
- save_size = png_ptr->save_buffer_size;
-
- png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
- png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
- png_ptr->idat_size -= save_size;
- png_ptr->buffer_size -= save_size;
- png_ptr->save_buffer_size -= save_size;
- png_ptr->save_buffer_ptr += save_size;
- }
- if (png_ptr->idat_size && png_ptr->current_buffer_size)
- {
- png_size_t save_size;
-
- if (png_ptr->idat_size < (png_uint_32)png_ptr->current_buffer_size)
- {
- save_size = (png_size_t)png_ptr->idat_size;
- /* check for overflow */
- if((png_uint_32)save_size != png_ptr->idat_size)
- png_error(png_ptr, "save_size overflowed in pngpread");
- }
- else
- save_size = png_ptr->current_buffer_size;
-
- png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
- png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
- png_ptr->idat_size -= save_size;
- png_ptr->buffer_size -= save_size;
- png_ptr->current_buffer_size -= save_size;
- png_ptr->current_buffer_ptr += save_size;
- }
- if (!png_ptr->idat_size)
- {
- if (png_ptr->buffer_size < 4)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
-
- png_crc_finish(png_ptr, 0);
- png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
- png_ptr->mode |= PNG_AFTER_IDAT;
- }
-}
-
-void /* PRIVATE */
-png_process_IDAT_data(png_structp png_ptr, png_bytep buffer,
- png_size_t buffer_length)
-{
- int ret;
-
- if ((png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) && buffer_length)
- png_error(png_ptr, "Extra compression data");
-
- png_ptr->zstream.next_in = buffer;
- png_ptr->zstream.avail_in = (uInt)buffer_length;
- for(;;)
- {
- ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
- if (ret != Z_OK)
- {
- if (ret == Z_STREAM_END)
- {
- if (png_ptr->zstream.avail_in)
- png_error(png_ptr, "Extra compressed data");
- if (!(png_ptr->zstream.avail_out))
- {
- png_push_process_row(png_ptr);
- }
-
- png_ptr->mode |= PNG_AFTER_IDAT;
- png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
- break;
- }
- else if (ret == Z_BUF_ERROR)
- break;
- else
- png_error(png_ptr, "Decompression Error");
- }
- if (!(png_ptr->zstream.avail_out))
- {
- if ((
-#if defined(PNG_READ_INTERLACING_SUPPORTED)
- png_ptr->interlaced && png_ptr->pass > 6) ||
- (!png_ptr->interlaced &&
-#endif
- png_ptr->row_number == png_ptr->num_rows))
- {
- if (png_ptr->zstream.avail_in)
- png_warning(png_ptr, "Too much data in IDAT chunks");
- png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
- break;
- }
- png_push_process_row(png_ptr);
- png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
- png_ptr->zstream.next_out = png_ptr->row_buf;
- }
- else
- break;
- }
-}
-
-void /* PRIVATE */
-png_push_process_row(png_structp png_ptr)
-{
- png_ptr->row_info.color_type = png_ptr->color_type;
- png_ptr->row_info.width = png_ptr->iwidth;
- png_ptr->row_info.channels = png_ptr->channels;
- png_ptr->row_info.bit_depth = png_ptr->bit_depth;
- png_ptr->row_info.pixel_depth = png_ptr->pixel_depth;
-
- png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
- png_ptr->row_info.width);
-
- png_read_filter_row(png_ptr, &(png_ptr->row_info),
- png_ptr->row_buf + 1, png_ptr->prev_row + 1,
- (int)(png_ptr->row_buf[0]));
-
- png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf,
- png_ptr->rowbytes + 1);
-
- if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
- png_do_read_transformations(png_ptr);
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED)
- /* blow up interlaced rows to full size */
- if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
- {
- if (png_ptr->pass < 6)
-/* old interface (pre-1.0.9):
- png_do_read_interlace(&(png_ptr->row_info),
- png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
- */
- png_do_read_interlace(png_ptr);
-
- switch (png_ptr->pass)
- {
- case 0:
- {
- int i;
- for (i = 0; i < 8 && png_ptr->pass == 0; i++)
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr); /* updates png_ptr->pass */
- }
- if (png_ptr->pass == 2) /* pass 1 might be empty */
- {
- for (i = 0; i < 4 && png_ptr->pass == 2; i++)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- }
- if (png_ptr->pass == 4 && png_ptr->height <= 4)
- {
- for (i = 0; i < 2 && png_ptr->pass == 4; i++)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- }
- if (png_ptr->pass == 6 && png_ptr->height <= 4)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- break;
- }
- case 1:
- {
- int i;
- for (i = 0; i < 8 && png_ptr->pass == 1; i++)
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr);
- }
- if (png_ptr->pass == 2) /* skip top 4 generated rows */
- {
- for (i = 0; i < 4 && png_ptr->pass == 2; i++)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- }
- break;
- }
- case 2:
- {
- int i;
- for (i = 0; i < 4 && png_ptr->pass == 2; i++)
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr);
- }
- for (i = 0; i < 4 && png_ptr->pass == 2; i++)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- if (png_ptr->pass == 4) /* pass 3 might be empty */
- {
- for (i = 0; i < 2 && png_ptr->pass == 4; i++)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- }
- break;
- }
- case 3:
- {
- int i;
- for (i = 0; i < 4 && png_ptr->pass == 3; i++)
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr);
- }
- if (png_ptr->pass == 4) /* skip top two generated rows */
- {
- for (i = 0; i < 2 && png_ptr->pass == 4; i++)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- }
- break;
- }
- case 4:
- {
- int i;
- for (i = 0; i < 2 && png_ptr->pass == 4; i++)
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr);
- }
- for (i = 0; i < 2 && png_ptr->pass == 4; i++)
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- if (png_ptr->pass == 6) /* pass 5 might be empty */
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- break;
- }
- case 5:
- {
- int i;
- for (i = 0; i < 2 && png_ptr->pass == 5; i++)
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr);
- }
- if (png_ptr->pass == 6) /* skip top generated row */
- {
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- break;
- }
- case 6:
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr);
- if (png_ptr->pass != 6)
- break;
- png_push_have_row(png_ptr, png_bytep_NULL);
- png_read_push_finish_row(png_ptr);
- }
- }
- }
- else
-#endif
- {
- png_push_have_row(png_ptr, png_ptr->row_buf + 1);
- png_read_push_finish_row(png_ptr);
- }
-}
-
-void /* PRIVATE */
-png_read_push_finish_row(png_structp png_ptr)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
- /* start of interlace block */
- PNG_CONST int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
-
- /* offset to next interlace block */
- PNG_CONST int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
-
- /* start of interlace block in the y direction */
- PNG_CONST int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
-
- /* offset to next interlace block in the y direction */
- PNG_CONST int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
-
- /* Height of interlace block. This is not currently used - if you need
- * it, uncomment it here and in png.h
- PNG_CONST int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
- */
-#endif
-
- png_ptr->row_number++;
- if (png_ptr->row_number < png_ptr->num_rows)
- return;
-
- if (png_ptr->interlaced)
- {
- png_ptr->row_number = 0;
- png_memset_check(png_ptr, png_ptr->prev_row, 0,
- png_ptr->rowbytes + 1);
- do
- {
- int pass;
- pass = png_ptr->pass;
- pass++;
- if ((pass == 1 && png_ptr->width < 5) ||
- (pass == 3 && png_ptr->width < 3) ||
- (pass == 5 && png_ptr->width < 2))
- pass++;
-
- if (pass > 7)
- pass--;
- png_ptr->pass = (png_byte) pass;
- if (pass < 7)
- {
- png_ptr->iwidth = (png_ptr->width +
- png_pass_inc[pass] - 1 -
- png_pass_start[pass]) /
- png_pass_inc[pass];
-
- png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,
- png_ptr->iwidth) + 1;
-
- if (png_ptr->transformations & PNG_INTERLACE)
- break;
-
- png_ptr->num_rows = (png_ptr->height +
- png_pass_yinc[pass] - 1 -
- png_pass_ystart[pass]) /
- png_pass_yinc[pass];
- }
- else
- break;
-
- } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0);
- }
-}
-
-#if defined(PNG_READ_tEXt_SUPPORTED)
-void /* PRIVATE */
-png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32
- length)
-{
- if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
- {
- png_error(png_ptr, "Out of place tEXt");
- info_ptr = info_ptr; /* to quiet some compiler warnings */
- }
-
-#ifdef PNG_MAX_MALLOC_64K
- png_ptr->skip_length = 0; /* This may not be necessary */
-
- if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */
- {
- png_warning(png_ptr, "tEXt chunk too large to fit in memory");
- png_ptr->skip_length = length - (png_uint_32)65535L;
- length = (png_uint_32)65535L;
- }
-#endif
-
- png_ptr->current_text = (png_charp)png_malloc(png_ptr,
- (png_uint_32)(length+1));
- png_ptr->current_text[length] = '\0';
- png_ptr->current_text_ptr = png_ptr->current_text;
- png_ptr->current_text_size = (png_size_t)length;
- png_ptr->current_text_left = (png_size_t)length;
- png_ptr->process_mode = PNG_READ_tEXt_MODE;
-}
-
-void /* PRIVATE */
-png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr->buffer_size && png_ptr->current_text_left)
- {
- png_size_t text_size;
-
- if (png_ptr->buffer_size < png_ptr->current_text_left)
- text_size = png_ptr->buffer_size;
- else
- text_size = png_ptr->current_text_left;
- png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size);
- png_ptr->current_text_left -= text_size;
- png_ptr->current_text_ptr += text_size;
- }
- if (!(png_ptr->current_text_left))
- {
- png_textp text_ptr;
- png_charp text;
- png_charp key;
- int ret;
-
- if (png_ptr->buffer_size < 4)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
-
- png_push_crc_finish(png_ptr);
-
-#if defined(PNG_MAX_MALLOC_64K)
- if (png_ptr->skip_length)
- return;
-#endif
-
- key = png_ptr->current_text;
-
- for (text = key; *text; text++)
- /* empty loop */ ;
-
- if (text < key + png_ptr->current_text_size)
- text++;
-
- text_ptr = (png_textp)png_malloc(png_ptr,
- (png_uint_32)png_sizeof(png_text));
- text_ptr->compression = PNG_TEXT_COMPRESSION_NONE;
- text_ptr->key = key;
-#ifdef PNG_iTXt_SUPPORTED
- text_ptr->lang = NULL;
- text_ptr->lang_key = NULL;
-#endif
- text_ptr->text = text;
-
- ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1);
-
- png_free(png_ptr, key);
- png_free(png_ptr, text_ptr);
- png_ptr->current_text = NULL;
-
- if (ret)
- png_warning(png_ptr, "Insufficient memory to store text chunk.");
- }
-}
-#endif
-
-#if defined(PNG_READ_zTXt_SUPPORTED)
-void /* PRIVATE */
-png_push_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32
- length)
-{
- if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
- {
- png_error(png_ptr, "Out of place zTXt");
- info_ptr = info_ptr; /* to quiet some compiler warnings */
- }
-
-#ifdef PNG_MAX_MALLOC_64K
- /* We can't handle zTXt chunks > 64K, since we don't have enough space
- * to be able to store the uncompressed data. Actually, the threshold
- * is probably around 32K, but it isn't as definite as 64K is.
- */
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr, "zTXt chunk too large to fit in memory");
- png_push_crc_skip(png_ptr, length);
- return;
- }
-#endif
-
- png_ptr->current_text = (png_charp)png_malloc(png_ptr,
- (png_uint_32)(length+1));
- png_ptr->current_text[length] = '\0';
- png_ptr->current_text_ptr = png_ptr->current_text;
- png_ptr->current_text_size = (png_size_t)length;
- png_ptr->current_text_left = (png_size_t)length;
- png_ptr->process_mode = PNG_READ_zTXt_MODE;
-}
-
-void /* PRIVATE */
-png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr->buffer_size && png_ptr->current_text_left)
- {
- png_size_t text_size;
-
- if (png_ptr->buffer_size < (png_uint_32)png_ptr->current_text_left)
- text_size = png_ptr->buffer_size;
- else
- text_size = png_ptr->current_text_left;
- png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size);
- png_ptr->current_text_left -= text_size;
- png_ptr->current_text_ptr += text_size;
- }
- if (!(png_ptr->current_text_left))
- {
- png_textp text_ptr;
- png_charp text;
- png_charp key;
- int ret;
- png_size_t text_size, key_size;
-
- if (png_ptr->buffer_size < 4)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
-
- png_push_crc_finish(png_ptr);
-
- key = png_ptr->current_text;
-
- for (text = key; *text; text++)
- /* empty loop */ ;
-
- /* zTXt can't have zero text */
- if (text >= key + png_ptr->current_text_size)
- {
- png_ptr->current_text = NULL;
- png_free(png_ptr, key);
- return;
- }
-
- text++;
-
- if (*text != PNG_TEXT_COMPRESSION_zTXt) /* check compression byte */
- {
- png_ptr->current_text = NULL;
- png_free(png_ptr, key);
- return;
- }
-
- text++;
-
- png_ptr->zstream.next_in = (png_bytep )text;
- png_ptr->zstream.avail_in = (uInt)(png_ptr->current_text_size -
- (text - key));
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
-
- key_size = text - key;
- text_size = 0;
- text = NULL;
- ret = Z_STREAM_END;
-
- while (png_ptr->zstream.avail_in)
- {
- ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
- if (ret != Z_OK && ret != Z_STREAM_END)
- {
- inflateReset(&png_ptr->zstream);
- png_ptr->zstream.avail_in = 0;
- png_ptr->current_text = NULL;
- png_free(png_ptr, key);
- png_free(png_ptr, text);
- return;
- }
- if (!(png_ptr->zstream.avail_out) || ret == Z_STREAM_END)
- {
- if (text == NULL)
- {
- text = (png_charp)png_malloc(png_ptr,
- (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out
- + key_size + 1));
- png_memcpy(text + key_size, png_ptr->zbuf,
- png_ptr->zbuf_size - png_ptr->zstream.avail_out);
- png_memcpy(text, key, key_size);
- text_size = key_size + png_ptr->zbuf_size -
- png_ptr->zstream.avail_out;
- *(text + text_size) = '\0';
- }
- else
- {
- png_charp tmp;
-
- tmp = text;
- text = (png_charp)png_malloc(png_ptr, text_size +
- (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out
- + 1));
- png_memcpy(text, tmp, text_size);
- png_free(png_ptr, tmp);
- png_memcpy(text + text_size, png_ptr->zbuf,
- png_ptr->zbuf_size - png_ptr->zstream.avail_out);
- text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out;
- *(text + text_size) = '\0';
- }
- if (ret != Z_STREAM_END)
- {
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- }
- }
- else
- {
- break;
- }
-
- if (ret == Z_STREAM_END)
- break;
- }
-
- inflateReset(&png_ptr->zstream);
- png_ptr->zstream.avail_in = 0;
-
- if (ret != Z_STREAM_END)
- {
- png_ptr->current_text = NULL;
- png_free(png_ptr, key);
- png_free(png_ptr, text);
- return;
- }
-
- png_ptr->current_text = NULL;
- png_free(png_ptr, key);
- key = text;
- text += key_size;
-
- text_ptr = (png_textp)png_malloc(png_ptr,
- (png_uint_32)png_sizeof(png_text));
- text_ptr->compression = PNG_TEXT_COMPRESSION_zTXt;
- text_ptr->key = key;
-#ifdef PNG_iTXt_SUPPORTED
- text_ptr->lang = NULL;
- text_ptr->lang_key = NULL;
-#endif
- text_ptr->text = text;
-
- ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1);
-
- png_free(png_ptr, key);
- png_free(png_ptr, text_ptr);
-
- if (ret)
- png_warning(png_ptr, "Insufficient memory to store text chunk.");
- }
-}
-#endif
-
-#if defined(PNG_READ_iTXt_SUPPORTED)
-void /* PRIVATE */
-png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32
- length)
-{
- if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
- {
- png_error(png_ptr, "Out of place iTXt");
- info_ptr = info_ptr; /* to quiet some compiler warnings */
- }
-
-#ifdef PNG_MAX_MALLOC_64K
- png_ptr->skip_length = 0; /* This may not be necessary */
-
- if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */
- {
- png_warning(png_ptr, "iTXt chunk too large to fit in memory");
- png_ptr->skip_length = length - (png_uint_32)65535L;
- length = (png_uint_32)65535L;
- }
-#endif
-
- png_ptr->current_text = (png_charp)png_malloc(png_ptr,
- (png_uint_32)(length+1));
- png_ptr->current_text[length] = '\0';
- png_ptr->current_text_ptr = png_ptr->current_text;
- png_ptr->current_text_size = (png_size_t)length;
- png_ptr->current_text_left = (png_size_t)length;
- png_ptr->process_mode = PNG_READ_iTXt_MODE;
-}
-
-void /* PRIVATE */
-png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
-{
-
- if (png_ptr->buffer_size && png_ptr->current_text_left)
- {
- png_size_t text_size;
-
- if (png_ptr->buffer_size < png_ptr->current_text_left)
- text_size = png_ptr->buffer_size;
- else
- text_size = png_ptr->current_text_left;
- png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size);
- png_ptr->current_text_left -= text_size;
- png_ptr->current_text_ptr += text_size;
- }
- if (!(png_ptr->current_text_left))
- {
- png_textp text_ptr;
- png_charp key;
- int comp_flag;
- png_charp lang;
- png_charp lang_key;
- png_charp text;
- int ret;
-
- if (png_ptr->buffer_size < 4)
- {
- png_push_save_buffer(png_ptr);
- return;
- }
-
- png_push_crc_finish(png_ptr);
-
-#if defined(PNG_MAX_MALLOC_64K)
- if (png_ptr->skip_length)
- return;
-#endif
-
- key = png_ptr->current_text;
-
- for (lang = key; *lang; lang++)
- /* empty loop */ ;
-
- if (lang < key + png_ptr->current_text_size - 3)
- lang++;
-
- comp_flag = *lang++;
- lang++; /* skip comp_type, always zero */
-
- for (lang_key = lang; *lang_key; lang_key++)
- /* empty loop */ ;
- lang_key++; /* skip NUL separator */
-
- text=lang_key;
- if (lang_key < key + png_ptr->current_text_size - 1)
- {
- for (; *text; text++)
- /* empty loop */ ;
- }
-
- if (text < key + png_ptr->current_text_size)
- text++;
-
- text_ptr = (png_textp)png_malloc(png_ptr,
- (png_uint_32)png_sizeof(png_text));
- text_ptr->compression = comp_flag + 2;
- text_ptr->key = key;
- text_ptr->lang = lang;
- text_ptr->lang_key = lang_key;
- text_ptr->text = text;
- text_ptr->text_length = 0;
- text_ptr->itxt_length = png_strlen(text);
-
- ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1);
-
- png_ptr->current_text = NULL;
-
- png_free(png_ptr, text_ptr);
- if (ret)
- png_warning(png_ptr, "Insufficient memory to store iTXt chunk.");
- }
-}
-#endif
-
-/* This function is called when we haven't found a handler for this
- * chunk. If there isn't a problem with the chunk itself (ie a bad chunk
- * name or a critical chunk), the chunk is (currently) silently ignored.
- */
-void /* PRIVATE */
-png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32
- length)
-{
- png_uint_32 skip=0;
- png_check_chunk_name(png_ptr, png_ptr->chunk_name);
-
- if (!(png_ptr->chunk_name[0] & 0x20))
- {
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
- if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
- PNG_HANDLE_CHUNK_ALWAYS
-#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
- && png_ptr->read_user_chunk_fn == NULL
-#endif
- )
-#endif
- png_chunk_error(png_ptr, "unknown critical chunk");
-
- info_ptr = info_ptr; /* to quiet some compiler warnings */
- }
-
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
- if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS)
- {
-#ifdef PNG_MAX_MALLOC_64K
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr, "unknown chunk too large to fit in memory");
- skip = length - (png_uint_32)65535L;
- length = (png_uint_32)65535L;
- }
-#endif
- png_memcpy((png_charp)png_ptr->unknown_chunk.name,
- (png_charp)png_ptr->chunk_name,
- png_sizeof(png_ptr->unknown_chunk.name));
- png_ptr->unknown_chunk.name[png_sizeof(png_ptr->unknown_chunk.name)-1]='\0';
-
- png_ptr->unknown_chunk.size = (png_size_t)length;
- if (length == 0)
- png_ptr->unknown_chunk.data = NULL;
- else
- {
- png_ptr->unknown_chunk.data = (png_bytep)png_malloc(png_ptr, length);
- png_crc_read(png_ptr, (png_bytep)png_ptr->unknown_chunk.data, length);
- }
-#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
- if(png_ptr->read_user_chunk_fn != NULL)
- {
- /* callback to user unknown chunk handler */
- int ret;
- ret = (*(png_ptr->read_user_chunk_fn))
- (png_ptr, &png_ptr->unknown_chunk);
- if (ret < 0)
- png_chunk_error(png_ptr, "error in user chunk");
- if (ret == 0)
- {
- if (!(png_ptr->chunk_name[0] & 0x20))
- if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
- PNG_HANDLE_CHUNK_ALWAYS)
- png_chunk_error(png_ptr, "unknown critical chunk");
- png_set_unknown_chunks(png_ptr, info_ptr,
- &png_ptr->unknown_chunk, 1);
- }
- }
- else
-#endif
- png_set_unknown_chunks(png_ptr, info_ptr, &png_ptr->unknown_chunk, 1);
- png_free(png_ptr, png_ptr->unknown_chunk.data);
- png_ptr->unknown_chunk.data = NULL;
- }
- else
-#endif
- skip=length;
- png_push_crc_skip(png_ptr, skip);
-}
-
-void /* PRIVATE */
-png_push_have_info(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr->info_fn != NULL)
- (*(png_ptr->info_fn))(png_ptr, info_ptr);
-}
-
-void /* PRIVATE */
-png_push_have_end(png_structp png_ptr, png_infop info_ptr)
-{
- if (png_ptr->end_fn != NULL)
- (*(png_ptr->end_fn))(png_ptr, info_ptr);
-}
-
-void /* PRIVATE */
-png_push_have_row(png_structp png_ptr, png_bytep row)
-{
- if (png_ptr->row_fn != NULL)
- (*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number,
- (int)png_ptr->pass);
-}
-
-void PNGAPI
-png_progressive_combine_row (png_structp png_ptr,
- png_bytep old_row, png_bytep new_row)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST int FARDATA png_pass_dsp_mask[7] =
- {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
-#endif
- if(png_ptr == NULL) return;
- if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */
- png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]);
-}
-
-void PNGAPI
-png_set_progressive_read_fn(png_structp png_ptr, png_voidp progressive_ptr,
- png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
- png_progressive_end_ptr end_fn)
-{
- if(png_ptr == NULL) return;
- png_ptr->info_fn = info_fn;
- png_ptr->row_fn = row_fn;
- png_ptr->end_fn = end_fn;
-
- png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
-}
-
-png_voidp PNGAPI
-png_get_progressive_ptr(png_structp png_ptr)
-{
- if(png_ptr == NULL) return (NULL);
- return png_ptr->io_ptr;
-}
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngread.c b/Build/source/libs/libpng/pngread.c
deleted file mode 100644
index bd8bcd98abc..00000000000
--- a/Build/source/libs/libpng/pngread.c
+++ /dev/null
@@ -1,1479 +0,0 @@
-
-/* pngread.c - read a PNG file
- *
- * Last changed in libpng 1.2.25 [February 18, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This file contains routines that an application calls directly to
- * read a PNG file or stream.
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED)
-
-/* Create a PNG structure for reading, and allocate any memory needed. */
-png_structp PNGAPI
-png_create_read_struct(png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn)
-{
-
-#ifdef PNG_USER_MEM_SUPPORTED
- return (png_create_read_struct_2(user_png_ver, error_ptr, error_fn,
- warn_fn, png_voidp_NULL, png_malloc_ptr_NULL, png_free_ptr_NULL));
-}
-
-/* Alternate create PNG structure for reading, and allocate any memory needed. */
-png_structp PNGAPI
-png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
- png_malloc_ptr malloc_fn, png_free_ptr free_fn)
-{
-#endif /* PNG_USER_MEM_SUPPORTED */
-
- png_structp png_ptr;
-
-#ifdef PNG_SETJMP_SUPPORTED
-#ifdef USE_FAR_KEYWORD
- jmp_buf jmpbuf;
-#endif
-#endif
-
- int i;
-
- png_debug(1, "in png_create_read_struct\n");
-#ifdef PNG_USER_MEM_SUPPORTED
- png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG,
- (png_malloc_ptr)malloc_fn, (png_voidp)mem_ptr);
-#else
- png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
-#endif
- if (png_ptr == NULL)
- return (NULL);
-
- /* added at libpng-1.2.6 */
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
- png_ptr->user_width_max=PNG_USER_WIDTH_MAX;
- png_ptr->user_height_max=PNG_USER_HEIGHT_MAX;
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-#ifdef USE_FAR_KEYWORD
- if (setjmp(jmpbuf))
-#else
- if (setjmp(png_ptr->jmpbuf))
-#endif
- {
- png_free(png_ptr, png_ptr->zbuf);
- png_ptr->zbuf=NULL;
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)png_ptr,
- (png_free_ptr)free_fn, (png_voidp)mem_ptr);
-#else
- png_destroy_struct((png_voidp)png_ptr);
-#endif
- return (NULL);
- }
-#ifdef USE_FAR_KEYWORD
- png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf));
-#endif
-#endif
-
-#ifdef PNG_USER_MEM_SUPPORTED
- png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
-#endif
-
- png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn);
-
- if(user_png_ver)
- {
- i=0;
- do
- {
- if(user_png_ver[i] != png_libpng_ver[i])
- png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
- } while (png_libpng_ver[i++]);
- }
- else
- png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
-
-
- if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH)
- {
- /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so
- * we must recompile any applications that use any older library version.
- * For versions after libpng 1.0, we will be compatible, so we need
- * only check the first digit.
- */
- if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] ||
- (user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) ||
- (user_png_ver[0] == '0' && user_png_ver[2] < '9'))
- {
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- char msg[80];
- if (user_png_ver)
- {
- png_snprintf(msg, 80,
- "Application was compiled with png.h from libpng-%.20s",
- user_png_ver);
- png_warning(png_ptr, msg);
- }
- png_snprintf(msg, 80,
- "Application is running with png.c from libpng-%.20s",
- png_libpng_ver);
- png_warning(png_ptr, msg);
-#endif
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- png_ptr->flags=0;
-#endif
- png_error(png_ptr,
- "Incompatible libpng version in application and library");
- }
- }
-
- /* initialize zbuf - compression buffer */
- png_ptr->zbuf_size = PNG_ZBUF_SIZE;
- png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)png_ptr->zbuf_size);
- png_ptr->zstream.zalloc = png_zalloc;
- png_ptr->zstream.zfree = png_zfree;
- png_ptr->zstream.opaque = (voidpf)png_ptr;
-
- switch (inflateInit(&png_ptr->zstream))
- {
- case Z_OK: /* Do nothing */ break;
- case Z_MEM_ERROR:
- case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory error"); break;
- case Z_VERSION_ERROR: png_error(png_ptr, "zlib version error"); break;
- default: png_error(png_ptr, "Unknown zlib error");
- }
-
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
-
- png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL);
-
-#ifdef PNG_SETJMP_SUPPORTED
-/* Applications that neglect to set up their own setjmp() and then encounter
- a png_error() will longjmp here. Since the jmpbuf is then meaningless we
- abort instead of returning. */
-#ifdef USE_FAR_KEYWORD
- if (setjmp(jmpbuf))
- PNG_ABORT();
- png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf));
-#else
- if (setjmp(png_ptr->jmpbuf))
- PNG_ABORT();
-#endif
-#endif
- return (png_ptr);
-}
-
-#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
-/* Initialize PNG structure for reading, and allocate any memory needed.
- This interface is deprecated in favour of the png_create_read_struct(),
- and it will disappear as of libpng-1.3.0. */
-#undef png_read_init
-void PNGAPI
-png_read_init(png_structp png_ptr)
-{
- /* We only come here via pre-1.0.7-compiled applications */
- png_read_init_2(png_ptr, "1.0.6 or earlier", 0, 0);
-}
-
-void PNGAPI
-png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver,
- png_size_t png_struct_size, png_size_t png_info_size)
-{
- /* We only come here via pre-1.0.12-compiled applications */
- if(png_ptr == NULL) return;
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- if(png_sizeof(png_struct) > png_struct_size ||
- png_sizeof(png_info) > png_info_size)
- {
- char msg[80];
- png_ptr->warning_fn=NULL;
- if (user_png_ver)
- {
- png_snprintf(msg, 80,
- "Application was compiled with png.h from libpng-%.20s",
- user_png_ver);
- png_warning(png_ptr, msg);
- }
- png_snprintf(msg, 80,
- "Application is running with png.c from libpng-%.20s",
- png_libpng_ver);
- png_warning(png_ptr, msg);
- }
-#endif
- if(png_sizeof(png_struct) > png_struct_size)
- {
- png_ptr->error_fn=NULL;
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- png_ptr->flags=0;
-#endif
- png_error(png_ptr,
- "The png struct allocated by the application for reading is too small.");
- }
- if(png_sizeof(png_info) > png_info_size)
- {
- png_ptr->error_fn=NULL;
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- png_ptr->flags=0;
-#endif
- png_error(png_ptr,
- "The info struct allocated by application for reading is too small.");
- }
- png_read_init_3(&png_ptr, user_png_ver, png_struct_size);
-}
-#endif /* PNG_1_0_X || PNG_1_2_X */
-
-void PNGAPI
-png_read_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver,
- png_size_t png_struct_size)
-{
-#ifdef PNG_SETJMP_SUPPORTED
- jmp_buf tmp_jmp; /* to save current jump buffer */
-#endif
-
- int i=0;
-
- png_structp png_ptr=*ptr_ptr;
-
- if(png_ptr == NULL) return;
-
- do
- {
- if(user_png_ver[i] != png_libpng_ver[i])
- {
-#ifdef PNG_LEGACY_SUPPORTED
- png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
-#else
- png_ptr->warning_fn=NULL;
- png_warning(png_ptr,
- "Application uses deprecated png_read_init() and should be recompiled.");
- break;
-#endif
- }
- } while (png_libpng_ver[i++]);
-
- png_debug(1, "in png_read_init_3\n");
-
-#ifdef PNG_SETJMP_SUPPORTED
- /* save jump buffer and error functions */
- png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf));
-#endif
-
- if(png_sizeof(png_struct) > png_struct_size)
- {
- png_destroy_struct(png_ptr);
- *ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
- png_ptr = *ptr_ptr;
- }
-
- /* reset all variables to 0 */
- png_memset(png_ptr, 0, png_sizeof (png_struct));
-
-#ifdef PNG_SETJMP_SUPPORTED
- /* restore jump buffer */
- png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf));
-#endif
-
- /* added at libpng-1.2.6 */
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
- png_ptr->user_width_max=PNG_USER_WIDTH_MAX;
- png_ptr->user_height_max=PNG_USER_HEIGHT_MAX;
-#endif
-
- /* initialize zbuf - compression buffer */
- png_ptr->zbuf_size = PNG_ZBUF_SIZE;
- png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)png_ptr->zbuf_size);
- png_ptr->zstream.zalloc = png_zalloc;
- png_ptr->zstream.zfree = png_zfree;
- png_ptr->zstream.opaque = (voidpf)png_ptr;
-
- switch (inflateInit(&png_ptr->zstream))
- {
- case Z_OK: /* Do nothing */ break;
- case Z_MEM_ERROR:
- case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory"); break;
- case Z_VERSION_ERROR: png_error(png_ptr, "zlib version"); break;
- default: png_error(png_ptr, "Unknown zlib error");
- }
-
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
-
- png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL);
-}
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* Read the information before the actual image data. This has been
- * changed in v0.90 to allow reading a file that already has the magic
- * bytes read from the stream. You can tell libpng how many bytes have
- * been read from the beginning of the stream (up to the maximum of 8)
- * via png_set_sig_bytes(), and we will only check the remaining bytes
- * here. The application can then have access to the signature bytes we
- * read if it is determined that this isn't a valid PNG file.
- */
-void PNGAPI
-png_read_info(png_structp png_ptr, png_infop info_ptr)
-{
- if(png_ptr == NULL || info_ptr == NULL) return;
- png_debug(1, "in png_read_info\n");
- /* If we haven't checked all of the PNG signature bytes, do so now. */
- if (png_ptr->sig_bytes < 8)
- {
- png_size_t num_checked = png_ptr->sig_bytes,
- num_to_check = 8 - num_checked;
-
- png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check);
- png_ptr->sig_bytes = 8;
-
- if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
- {
- if (num_checked < 4 &&
- png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
- png_error(png_ptr, "Not a PNG file");
- else
- png_error(png_ptr, "PNG file corrupted by ASCII conversion");
- }
- if (num_checked < 3)
- png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
- }
-
- for(;;)
- {
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST PNG_IHDR;
- PNG_CONST PNG_IDAT;
- PNG_CONST PNG_IEND;
- PNG_CONST PNG_PLTE;
-#if defined(PNG_READ_bKGD_SUPPORTED)
- PNG_CONST PNG_bKGD;
-#endif
-#if defined(PNG_READ_cHRM_SUPPORTED)
- PNG_CONST PNG_cHRM;
-#endif
-#if defined(PNG_READ_gAMA_SUPPORTED)
- PNG_CONST PNG_gAMA;
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
- PNG_CONST PNG_hIST;
-#endif
-#if defined(PNG_READ_iCCP_SUPPORTED)
- PNG_CONST PNG_iCCP;
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
- PNG_CONST PNG_iTXt;
-#endif
-#if defined(PNG_READ_oFFs_SUPPORTED)
- PNG_CONST PNG_oFFs;
-#endif
-#if defined(PNG_READ_pCAL_SUPPORTED)
- PNG_CONST PNG_pCAL;
-#endif
-#if defined(PNG_READ_pHYs_SUPPORTED)
- PNG_CONST PNG_pHYs;
-#endif
-#if defined(PNG_READ_sBIT_SUPPORTED)
- PNG_CONST PNG_sBIT;
-#endif
-#if defined(PNG_READ_sCAL_SUPPORTED)
- PNG_CONST PNG_sCAL;
-#endif
-#if defined(PNG_READ_sPLT_SUPPORTED)
- PNG_CONST PNG_sPLT;
-#endif
-#if defined(PNG_READ_sRGB_SUPPORTED)
- PNG_CONST PNG_sRGB;
-#endif
-#if defined(PNG_READ_tEXt_SUPPORTED)
- PNG_CONST PNG_tEXt;
-#endif
-#if defined(PNG_READ_tIME_SUPPORTED)
- PNG_CONST PNG_tIME;
-#endif
-#if defined(PNG_READ_tRNS_SUPPORTED)
- PNG_CONST PNG_tRNS;
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
- PNG_CONST PNG_zTXt;
-#endif
-#endif /* PNG_USE_LOCAL_ARRAYS */
- png_byte chunk_length[4];
- png_uint_32 length;
-
- png_read_data(png_ptr, chunk_length, 4);
- length = png_get_uint_31(png_ptr,chunk_length);
-
- png_reset_crc(png_ptr);
- png_crc_read(png_ptr, png_ptr->chunk_name, 4);
-
- png_debug2(0, "Reading %s chunk, length=%lu.\n", png_ptr->chunk_name,
- length);
-
- /* This should be a binary subdivision search or a hash for
- * matching the chunk name rather than a linear search.
- */
- if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- if(png_ptr->mode & PNG_AFTER_IDAT)
- png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
-
- if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
- png_handle_IHDR(png_ptr, info_ptr, length);
- else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
- png_handle_IEND(png_ptr, info_ptr, length);
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
- else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
- {
- if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- png_ptr->mode |= PNG_HAVE_IDAT;
- png_handle_unknown(png_ptr, info_ptr, length);
- if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
- png_ptr->mode |= PNG_HAVE_PLTE;
- else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- {
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before IDAT");
- else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
- !(png_ptr->mode & PNG_HAVE_PLTE))
- png_error(png_ptr, "Missing PLTE before IDAT");
- break;
- }
- }
-#endif
- else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
- png_handle_PLTE(png_ptr, info_ptr, length);
- else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- {
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before IDAT");
- else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
- !(png_ptr->mode & PNG_HAVE_PLTE))
- png_error(png_ptr, "Missing PLTE before IDAT");
-
- png_ptr->idat_size = length;
- png_ptr->mode |= PNG_HAVE_IDAT;
- break;
- }
-#if defined(PNG_READ_bKGD_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
- png_handle_bKGD(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_cHRM_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
- png_handle_cHRM(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_gAMA_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
- png_handle_gAMA(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))
- png_handle_hIST(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_oFFs_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
- png_handle_oFFs(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_pCAL_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
- png_handle_pCAL(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sCAL_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4))
- png_handle_sCAL(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_pHYs_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
- png_handle_pHYs(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sBIT_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
- png_handle_sBIT(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sRGB_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
- png_handle_sRGB(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_iCCP_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4))
- png_handle_iCCP(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sPLT_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4))
- png_handle_sPLT(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_tEXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
- png_handle_tEXt(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_tIME_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))
- png_handle_tIME(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_tRNS_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
- png_handle_tRNS(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
- png_handle_zTXt(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
- png_handle_iTXt(png_ptr, info_ptr, length);
-#endif
- else
- png_handle_unknown(png_ptr, info_ptr, length);
- }
-}
-#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
-
-/* optional call to update the users info_ptr structure */
-void PNGAPI
-png_read_update_info(png_structp png_ptr, png_infop info_ptr)
-{
- png_debug(1, "in png_read_update_info\n");
- if(png_ptr == NULL) return;
- if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
- png_read_start_row(png_ptr);
- else
- png_warning(png_ptr,
- "Ignoring extra png_read_update_info() call; row buffer not reallocated");
- png_read_transform_info(png_ptr, info_ptr);
-}
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* Initialize palette, background, etc, after transformations
- * are set, but before any reading takes place. This allows
- * the user to obtain a gamma-corrected palette, for example.
- * If the user doesn't call this, we will do it ourselves.
- */
-void PNGAPI
-png_start_read_image(png_structp png_ptr)
-{
- png_debug(1, "in png_start_read_image\n");
- if(png_ptr == NULL) return;
- if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
- png_read_start_row(png_ptr);
-}
-#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-void PNGAPI
-png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST PNG_IDAT;
- PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
- 0xff};
- PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
-#endif
- int ret;
- if(png_ptr == NULL) return;
- png_debug2(1, "in png_read_row (row %lu, pass %d)\n",
- png_ptr->row_number, png_ptr->pass);
- if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
- png_read_start_row(png_ptr);
- if (png_ptr->row_number == 0 && png_ptr->pass == 0)
- {
- /* check for transforms that have been set but were defined out */
-#if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED)
- if (png_ptr->transformations & PNG_INVERT_MONO)
- png_warning(png_ptr, "PNG_READ_INVERT_SUPPORTED is not defined.");
-#endif
-#if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED)
- if (png_ptr->transformations & PNG_FILLER)
- png_warning(png_ptr, "PNG_READ_FILLER_SUPPORTED is not defined.");
-#endif
-#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) && !defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_PACKSWAP)
- png_warning(png_ptr, "PNG_READ_PACKSWAP_SUPPORTED is not defined.");
-#endif
-#if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED)
- if (png_ptr->transformations & PNG_PACK)
- png_warning(png_ptr, "PNG_READ_PACK_SUPPORTED is not defined.");
-#endif
-#if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED)
- if (png_ptr->transformations & PNG_SHIFT)
- png_warning(png_ptr, "PNG_READ_SHIFT_SUPPORTED is not defined.");
-#endif
-#if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED)
- if (png_ptr->transformations & PNG_BGR)
- png_warning(png_ptr, "PNG_READ_BGR_SUPPORTED is not defined.");
-#endif
-#if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_SWAP_BYTES)
- png_warning(png_ptr, "PNG_READ_SWAP_SUPPORTED is not defined.");
-#endif
- }
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED)
- /* if interlaced and we do not need a new row, combine row and return */
- if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
- {
- switch (png_ptr->pass)
- {
- case 0:
- if (png_ptr->row_number & 0x07)
- {
- if (dsp_row != NULL)
- png_combine_row(png_ptr, dsp_row,
- png_pass_dsp_mask[png_ptr->pass]);
- png_read_finish_row(png_ptr);
- return;
- }
- break;
- case 1:
- if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
- {
- if (dsp_row != NULL)
- png_combine_row(png_ptr, dsp_row,
- png_pass_dsp_mask[png_ptr->pass]);
- png_read_finish_row(png_ptr);
- return;
- }
- break;
- case 2:
- if ((png_ptr->row_number & 0x07) != 4)
- {
- if (dsp_row != NULL && (png_ptr->row_number & 4))
- png_combine_row(png_ptr, dsp_row,
- png_pass_dsp_mask[png_ptr->pass]);
- png_read_finish_row(png_ptr);
- return;
- }
- break;
- case 3:
- if ((png_ptr->row_number & 3) || png_ptr->width < 3)
- {
- if (dsp_row != NULL)
- png_combine_row(png_ptr, dsp_row,
- png_pass_dsp_mask[png_ptr->pass]);
- png_read_finish_row(png_ptr);
- return;
- }
- break;
- case 4:
- if ((png_ptr->row_number & 3) != 2)
- {
- if (dsp_row != NULL && (png_ptr->row_number & 2))
- png_combine_row(png_ptr, dsp_row,
- png_pass_dsp_mask[png_ptr->pass]);
- png_read_finish_row(png_ptr);
- return;
- }
- break;
- case 5:
- if ((png_ptr->row_number & 1) || png_ptr->width < 2)
- {
- if (dsp_row != NULL)
- png_combine_row(png_ptr, dsp_row,
- png_pass_dsp_mask[png_ptr->pass]);
- png_read_finish_row(png_ptr);
- return;
- }
- break;
- case 6:
- if (!(png_ptr->row_number & 1))
- {
- png_read_finish_row(png_ptr);
- return;
- }
- break;
- }
- }
-#endif
-
- if (!(png_ptr->mode & PNG_HAVE_IDAT))
- png_error(png_ptr, "Invalid attempt to read row data");
-
- png_ptr->zstream.next_out = png_ptr->row_buf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
- do
- {
- if (!(png_ptr->zstream.avail_in))
- {
- while (!png_ptr->idat_size)
- {
- png_byte chunk_length[4];
-
- png_crc_finish(png_ptr, 0);
-
- png_read_data(png_ptr, chunk_length, 4);
- png_ptr->idat_size = png_get_uint_31(png_ptr,chunk_length);
-
- png_reset_crc(png_ptr);
- png_crc_read(png_ptr, png_ptr->chunk_name, 4);
- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- png_error(png_ptr, "Not enough image data");
- }
- png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
- png_ptr->zstream.next_in = png_ptr->zbuf;
- if (png_ptr->zbuf_size > png_ptr->idat_size)
- png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size;
- png_crc_read(png_ptr, png_ptr->zbuf,
- (png_size_t)png_ptr->zstream.avail_in);
- png_ptr->idat_size -= png_ptr->zstream.avail_in;
- }
- ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
- if (ret == Z_STREAM_END)
- {
- if (png_ptr->zstream.avail_out || png_ptr->zstream.avail_in ||
- png_ptr->idat_size)
- png_error(png_ptr, "Extra compressed data");
- png_ptr->mode |= PNG_AFTER_IDAT;
- png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
- break;
- }
- if (ret != Z_OK)
- png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg :
- "Decompression error");
-
- } while (png_ptr->zstream.avail_out);
-
- png_ptr->row_info.color_type = png_ptr->color_type;
- png_ptr->row_info.width = png_ptr->iwidth;
- png_ptr->row_info.channels = png_ptr->channels;
- png_ptr->row_info.bit_depth = png_ptr->bit_depth;
- png_ptr->row_info.pixel_depth = png_ptr->pixel_depth;
- png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
- png_ptr->row_info.width);
-
- if(png_ptr->row_buf[0])
- png_read_filter_row(png_ptr, &(png_ptr->row_info),
- png_ptr->row_buf + 1, png_ptr->prev_row + 1,
- (int)(png_ptr->row_buf[0]));
-
- png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf,
- png_ptr->rowbytes + 1);
-
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
- (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
- {
- /* Intrapixel differencing */
- png_do_read_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1);
- }
-#endif
-
-
- if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
- png_do_read_transformations(png_ptr);
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED)
- /* blow up interlaced rows to full size */
- if (png_ptr->interlaced &&
- (png_ptr->transformations & PNG_INTERLACE))
- {
- if (png_ptr->pass < 6)
-/* old interface (pre-1.0.9):
- png_do_read_interlace(&(png_ptr->row_info),
- png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
- */
- png_do_read_interlace(png_ptr);
-
- if (dsp_row != NULL)
- png_combine_row(png_ptr, dsp_row,
- png_pass_dsp_mask[png_ptr->pass]);
- if (row != NULL)
- png_combine_row(png_ptr, row,
- png_pass_mask[png_ptr->pass]);
- }
- else
-#endif
- {
- if (row != NULL)
- png_combine_row(png_ptr, row, 0xff);
- if (dsp_row != NULL)
- png_combine_row(png_ptr, dsp_row, 0xff);
- }
- png_read_finish_row(png_ptr);
-
- if (png_ptr->read_row_fn != NULL)
- (*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
-}
-#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* Read one or more rows of image data. If the image is interlaced,
- * and png_set_interlace_handling() has been called, the rows need to
- * contain the contents of the rows from the previous pass. If the
- * image has alpha or transparency, and png_handle_alpha()[*] has been
- * called, the rows contents must be initialized to the contents of the
- * screen.
- *
- * "row" holds the actual image, and pixels are placed in it
- * as they arrive. If the image is displayed after each pass, it will
- * appear to "sparkle" in. "display_row" can be used to display a
- * "chunky" progressive image, with finer detail added as it becomes
- * available. If you do not want this "chunky" display, you may pass
- * NULL for display_row. If you do not want the sparkle display, and
- * you have not called png_handle_alpha(), you may pass NULL for rows.
- * If you have called png_handle_alpha(), and the image has either an
- * alpha channel or a transparency chunk, you must provide a buffer for
- * rows. In this case, you do not have to provide a display_row buffer
- * also, but you may. If the image is not interlaced, or if you have
- * not called png_set_interlace_handling(), the display_row buffer will
- * be ignored, so pass NULL to it.
- *
- * [*] png_handle_alpha() does not exist yet, as of this version of libpng
- */
-
-void PNGAPI
-png_read_rows(png_structp png_ptr, png_bytepp row,
- png_bytepp display_row, png_uint_32 num_rows)
-{
- png_uint_32 i;
- png_bytepp rp;
- png_bytepp dp;
-
- png_debug(1, "in png_read_rows\n");
- if(png_ptr == NULL) return;
- rp = row;
- dp = display_row;
- if (rp != NULL && dp != NULL)
- for (i = 0; i < num_rows; i++)
- {
- png_bytep rptr = *rp++;
- png_bytep dptr = *dp++;
-
- png_read_row(png_ptr, rptr, dptr);
- }
- else if(rp != NULL)
- for (i = 0; i < num_rows; i++)
- {
- png_bytep rptr = *rp;
- png_read_row(png_ptr, rptr, png_bytep_NULL);
- rp++;
- }
- else if(dp != NULL)
- for (i = 0; i < num_rows; i++)
- {
- png_bytep dptr = *dp;
- png_read_row(png_ptr, png_bytep_NULL, dptr);
- dp++;
- }
-}
-#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* Read the entire image. If the image has an alpha channel or a tRNS
- * chunk, and you have called png_handle_alpha()[*], you will need to
- * initialize the image to the current image that PNG will be overlaying.
- * We set the num_rows again here, in case it was incorrectly set in
- * png_read_start_row() by a call to png_read_update_info() or
- * png_start_read_image() if png_set_interlace_handling() wasn't called
- * prior to either of these functions like it should have been. You can
- * only call this function once. If you desire to have an image for
- * each pass of a interlaced image, use png_read_rows() instead.
- *
- * [*] png_handle_alpha() does not exist yet, as of this version of libpng
- */
-void PNGAPI
-png_read_image(png_structp png_ptr, png_bytepp image)
-{
- png_uint_32 i,image_height;
- int pass, j;
- png_bytepp rp;
-
- png_debug(1, "in png_read_image\n");
- if(png_ptr == NULL) return;
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
- pass = png_set_interlace_handling(png_ptr);
-#else
- if (png_ptr->interlaced)
- png_error(png_ptr,
- "Cannot read interlaced image -- interlace handler disabled.");
- pass = 1;
-#endif
-
-
- image_height=png_ptr->height;
- png_ptr->num_rows = image_height; /* Make sure this is set correctly */
-
- for (j = 0; j < pass; j++)
- {
- rp = image;
- for (i = 0; i < image_height; i++)
- {
- png_read_row(png_ptr, *rp, png_bytep_NULL);
- rp++;
- }
- }
-}
-#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-/* Read the end of the PNG file. Will not read past the end of the
- * file, will verify the end is accurate, and will read any comments
- * or time information at the end of the file, if info is not NULL.
- */
-void PNGAPI
-png_read_end(png_structp png_ptr, png_infop info_ptr)
-{
- png_byte chunk_length[4];
- png_uint_32 length;
-
- png_debug(1, "in png_read_end\n");
- if(png_ptr == NULL) return;
- png_crc_finish(png_ptr, 0); /* Finish off CRC from last IDAT chunk */
-
- do
- {
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST PNG_IHDR;
- PNG_CONST PNG_IDAT;
- PNG_CONST PNG_IEND;
- PNG_CONST PNG_PLTE;
-#if defined(PNG_READ_bKGD_SUPPORTED)
- PNG_CONST PNG_bKGD;
-#endif
-#if defined(PNG_READ_cHRM_SUPPORTED)
- PNG_CONST PNG_cHRM;
-#endif
-#if defined(PNG_READ_gAMA_SUPPORTED)
- PNG_CONST PNG_gAMA;
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
- PNG_CONST PNG_hIST;
-#endif
-#if defined(PNG_READ_iCCP_SUPPORTED)
- PNG_CONST PNG_iCCP;
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
- PNG_CONST PNG_iTXt;
-#endif
-#if defined(PNG_READ_oFFs_SUPPORTED)
- PNG_CONST PNG_oFFs;
-#endif
-#if defined(PNG_READ_pCAL_SUPPORTED)
- PNG_CONST PNG_pCAL;
-#endif
-#if defined(PNG_READ_pHYs_SUPPORTED)
- PNG_CONST PNG_pHYs;
-#endif
-#if defined(PNG_READ_sBIT_SUPPORTED)
- PNG_CONST PNG_sBIT;
-#endif
-#if defined(PNG_READ_sCAL_SUPPORTED)
- PNG_CONST PNG_sCAL;
-#endif
-#if defined(PNG_READ_sPLT_SUPPORTED)
- PNG_CONST PNG_sPLT;
-#endif
-#if defined(PNG_READ_sRGB_SUPPORTED)
- PNG_CONST PNG_sRGB;
-#endif
-#if defined(PNG_READ_tEXt_SUPPORTED)
- PNG_CONST PNG_tEXt;
-#endif
-#if defined(PNG_READ_tIME_SUPPORTED)
- PNG_CONST PNG_tIME;
-#endif
-#if defined(PNG_READ_tRNS_SUPPORTED)
- PNG_CONST PNG_tRNS;
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
- PNG_CONST PNG_zTXt;
-#endif
-#endif /* PNG_USE_LOCAL_ARRAYS */
-
- png_read_data(png_ptr, chunk_length, 4);
- length = png_get_uint_31(png_ptr,chunk_length);
-
- png_reset_crc(png_ptr);
- png_crc_read(png_ptr, png_ptr->chunk_name, 4);
-
- png_debug1(0, "Reading %s chunk.\n", png_ptr->chunk_name);
-
- if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
- png_handle_IHDR(png_ptr, info_ptr, length);
- else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
- png_handle_IEND(png_ptr, info_ptr, length);
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
- else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
- {
- if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- {
- if ((length > 0) || (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
- png_error(png_ptr, "Too many IDAT's found");
- }
- png_handle_unknown(png_ptr, info_ptr, length);
- if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
- png_ptr->mode |= PNG_HAVE_PLTE;
- }
-#endif
- else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- {
- /* Zero length IDATs are legal after the last IDAT has been
- * read, but not after other chunks have been read.
- */
- if ((length > 0) || (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
- png_error(png_ptr, "Too many IDAT's found");
- png_crc_finish(png_ptr, length);
- }
- else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
- png_handle_PLTE(png_ptr, info_ptr, length);
-#if defined(PNG_READ_bKGD_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
- png_handle_bKGD(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_cHRM_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
- png_handle_cHRM(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_gAMA_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
- png_handle_gAMA(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))
- png_handle_hIST(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_oFFs_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
- png_handle_oFFs(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_pCAL_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
- png_handle_pCAL(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sCAL_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4))
- png_handle_sCAL(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_pHYs_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
- png_handle_pHYs(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sBIT_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
- png_handle_sBIT(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sRGB_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
- png_handle_sRGB(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_iCCP_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4))
- png_handle_iCCP(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_sPLT_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4))
- png_handle_sPLT(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_tEXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
- png_handle_tEXt(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_tIME_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))
- png_handle_tIME(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_tRNS_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
- png_handle_tRNS(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_zTXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
- png_handle_zTXt(png_ptr, info_ptr, length);
-#endif
-#if defined(PNG_READ_iTXt_SUPPORTED)
- else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
- png_handle_iTXt(png_ptr, info_ptr, length);
-#endif
- else
- png_handle_unknown(png_ptr, info_ptr, length);
- } while (!(png_ptr->mode & PNG_HAVE_IEND));
-}
-#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
-
-/* free all memory used by the read */
-void PNGAPI
-png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
- png_infopp end_info_ptr_ptr)
-{
- png_structp png_ptr = NULL;
- png_infop info_ptr = NULL, end_info_ptr = NULL;
-#ifdef PNG_USER_MEM_SUPPORTED
- png_free_ptr free_fn = NULL;
- png_voidp mem_ptr = NULL;
-#endif
-
- png_debug(1, "in png_destroy_read_struct\n");
- if (png_ptr_ptr != NULL)
- {
- png_ptr = *png_ptr_ptr;
- }
- if (png_ptr == NULL)
- return;
-
-#ifdef PNG_USER_MEM_SUPPORTED
- free_fn = png_ptr->free_fn;
- mem_ptr = png_ptr->mem_ptr;
-#endif
-
- if (info_ptr_ptr != NULL)
- info_ptr = *info_ptr_ptr;
-
- if (end_info_ptr_ptr != NULL)
- end_info_ptr = *end_info_ptr_ptr;
-
- png_read_destroy(png_ptr, info_ptr, end_info_ptr);
-
- if (info_ptr != NULL)
- {
-#if defined(PNG_TEXT_SUPPORTED)
- png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1);
-#endif
-
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)info_ptr, (png_free_ptr)free_fn,
- (png_voidp)mem_ptr);
-#else
- png_destroy_struct((png_voidp)info_ptr);
-#endif
- *info_ptr_ptr = NULL;
- }
-
- if (end_info_ptr != NULL)
- {
-#if defined(PNG_READ_TEXT_SUPPORTED)
- png_free_data(png_ptr, end_info_ptr, PNG_FREE_TEXT, -1);
-#endif
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)end_info_ptr, (png_free_ptr)free_fn,
- (png_voidp)mem_ptr);
-#else
- png_destroy_struct((png_voidp)end_info_ptr);
-#endif
- *end_info_ptr_ptr = NULL;
- }
-
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn,
- (png_voidp)mem_ptr);
-#else
- png_destroy_struct((png_voidp)png_ptr);
-#endif
- *png_ptr_ptr = NULL;
-}
-
-/* free all memory used by the read (old method) */
-void /* PRIVATE */
-png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr)
-{
-#ifdef PNG_SETJMP_SUPPORTED
- jmp_buf tmp_jmp;
-#endif
- png_error_ptr error_fn;
- png_error_ptr warning_fn;
- png_voidp error_ptr;
-#ifdef PNG_USER_MEM_SUPPORTED
- png_free_ptr free_fn;
-#endif
-
- png_debug(1, "in png_read_destroy\n");
- if (info_ptr != NULL)
- png_info_destroy(png_ptr, info_ptr);
-
- if (end_info_ptr != NULL)
- png_info_destroy(png_ptr, end_info_ptr);
-
- png_free(png_ptr, png_ptr->zbuf);
- png_free(png_ptr, png_ptr->big_row_buf);
- png_free(png_ptr, png_ptr->prev_row);
-#if defined(PNG_READ_DITHER_SUPPORTED)
- png_free(png_ptr, png_ptr->palette_lookup);
- png_free(png_ptr, png_ptr->dither_index);
-#endif
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- png_free(png_ptr, png_ptr->gamma_table);
-#endif
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- png_free(png_ptr, png_ptr->gamma_from_1);
- png_free(png_ptr, png_ptr->gamma_to_1);
-#endif
-#ifdef PNG_FREE_ME_SUPPORTED
- if (png_ptr->free_me & PNG_FREE_PLTE)
- png_zfree(png_ptr, png_ptr->palette);
- png_ptr->free_me &= ~PNG_FREE_PLTE;
-#else
- if (png_ptr->flags & PNG_FLAG_FREE_PLTE)
- png_zfree(png_ptr, png_ptr->palette);
- png_ptr->flags &= ~PNG_FLAG_FREE_PLTE;
-#endif
-#if defined(PNG_tRNS_SUPPORTED) || \
- defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-#ifdef PNG_FREE_ME_SUPPORTED
- if (png_ptr->free_me & PNG_FREE_TRNS)
- png_free(png_ptr, png_ptr->trans);
- png_ptr->free_me &= ~PNG_FREE_TRNS;
-#else
- if (png_ptr->flags & PNG_FLAG_FREE_TRNS)
- png_free(png_ptr, png_ptr->trans);
- png_ptr->flags &= ~PNG_FLAG_FREE_TRNS;
-#endif
-#endif
-#if defined(PNG_READ_hIST_SUPPORTED)
-#ifdef PNG_FREE_ME_SUPPORTED
- if (png_ptr->free_me & PNG_FREE_HIST)
- png_free(png_ptr, png_ptr->hist);
- png_ptr->free_me &= ~PNG_FREE_HIST;
-#else
- if (png_ptr->flags & PNG_FLAG_FREE_HIST)
- png_free(png_ptr, png_ptr->hist);
- png_ptr->flags &= ~PNG_FLAG_FREE_HIST;
-#endif
-#endif
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (png_ptr->gamma_16_table != NULL)
- {
- int i;
- int istop = (1 << (8 - png_ptr->gamma_shift));
- for (i = 0; i < istop; i++)
- {
- png_free(png_ptr, png_ptr->gamma_16_table[i]);
- }
- png_free(png_ptr, png_ptr->gamma_16_table);
- }
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->gamma_16_from_1 != NULL)
- {
- int i;
- int istop = (1 << (8 - png_ptr->gamma_shift));
- for (i = 0; i < istop; i++)
- {
- png_free(png_ptr, png_ptr->gamma_16_from_1[i]);
- }
- png_free(png_ptr, png_ptr->gamma_16_from_1);
- }
- if (png_ptr->gamma_16_to_1 != NULL)
- {
- int i;
- int istop = (1 << (8 - png_ptr->gamma_shift));
- for (i = 0; i < istop; i++)
- {
- png_free(png_ptr, png_ptr->gamma_16_to_1[i]);
- }
- png_free(png_ptr, png_ptr->gamma_16_to_1);
- }
-#endif
-#endif
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
- png_free(png_ptr, png_ptr->time_buffer);
-#endif
-
- inflateEnd(&png_ptr->zstream);
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
- png_free(png_ptr, png_ptr->save_buffer);
-#endif
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-#ifdef PNG_TEXT_SUPPORTED
- png_free(png_ptr, png_ptr->current_text);
-#endif /* PNG_TEXT_SUPPORTED */
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-
- /* Save the important info out of the png_struct, in case it is
- * being used again.
- */
-#ifdef PNG_SETJMP_SUPPORTED
- png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf));
-#endif
-
- error_fn = png_ptr->error_fn;
- warning_fn = png_ptr->warning_fn;
- error_ptr = png_ptr->error_ptr;
-#ifdef PNG_USER_MEM_SUPPORTED
- free_fn = png_ptr->free_fn;
-#endif
-
- png_memset(png_ptr, 0, png_sizeof (png_struct));
-
- png_ptr->error_fn = error_fn;
- png_ptr->warning_fn = warning_fn;
- png_ptr->error_ptr = error_ptr;
-#ifdef PNG_USER_MEM_SUPPORTED
- png_ptr->free_fn = free_fn;
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
- png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf));
-#endif
-
-}
-
-void PNGAPI
-png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn)
-{
- if(png_ptr == NULL) return;
- png_ptr->read_row_fn = read_row_fn;
-}
-
-
-#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-void PNGAPI
-png_read_png(png_structp png_ptr, png_infop info_ptr,
- int transforms,
- voidp params)
-{
- int row;
-
- if(png_ptr == NULL) return;
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
- /* invert the alpha channel from opacity to transparency
- */
- if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
- png_set_invert_alpha(png_ptr);
-#endif
-
- /* png_read_info() gives us all of the information from the
- * PNG file before the first IDAT (image data chunk).
- */
- png_read_info(png_ptr, info_ptr);
- if (info_ptr->height > PNG_UINT_32_MAX/png_sizeof(png_bytep))
- png_error(png_ptr,"Image is too high to process with png_read_png()");
-
- /* -------------- image transformations start here ------------------- */
-
-#if defined(PNG_READ_16_TO_8_SUPPORTED)
- /* tell libpng to strip 16 bit/color files down to 8 bits per color
- */
- if (transforms & PNG_TRANSFORM_STRIP_16)
- png_set_strip_16(png_ptr);
-#endif
-
-#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
- /* Strip alpha bytes from the input data without combining with
- * the background (not recommended).
- */
- if (transforms & PNG_TRANSFORM_STRIP_ALPHA)
- png_set_strip_alpha(png_ptr);
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) && !defined(PNG_READ_EXPAND_SUPPORTED)
- /* Extract multiple pixels with bit depths of 1, 2, or 4 from a single
- * byte into separate bytes (useful for paletted and grayscale images).
- */
- if (transforms & PNG_TRANSFORM_PACKING)
- png_set_packing(png_ptr);
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- /* Change the order of packed pixels to least significant bit first
- * (not useful if you are using png_set_packing).
- */
- if (transforms & PNG_TRANSFORM_PACKSWAP)
- png_set_packswap(png_ptr);
-#endif
-
-#if defined(PNG_READ_EXPAND_SUPPORTED)
- /* Expand paletted colors into true RGB triplets
- * Expand grayscale images to full 8 bits from 1, 2, or 4 bits/pixel
- * Expand paletted or RGB images with transparency to full alpha
- * channels so the data will be available as RGBA quartets.
- */
- if (transforms & PNG_TRANSFORM_EXPAND)
- if ((png_ptr->bit_depth < 8) ||
- (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ||
- (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)))
- png_set_expand(png_ptr);
-#endif
-
- /* We don't handle background color or gamma transformation or dithering.
- */
-
-#if defined(PNG_READ_INVERT_SUPPORTED)
- /* invert monochrome files to have 0 as white and 1 as black
- */
- if (transforms & PNG_TRANSFORM_INVERT_MONO)
- png_set_invert_mono(png_ptr);
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED)
- /* If you want to shift the pixel values from the range [0,255] or
- * [0,65535] to the original [0,7] or [0,31], or whatever range the
- * colors were originally in:
- */
- if ((transforms & PNG_TRANSFORM_SHIFT)
- && png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
- {
- png_color_8p sig_bit;
-
- png_get_sBIT(png_ptr, info_ptr, &sig_bit);
- png_set_shift(png_ptr, sig_bit);
- }
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED)
- /* flip the RGB pixels to BGR (or RGBA to BGRA)
- */
- if (transforms & PNG_TRANSFORM_BGR)
- png_set_bgr(png_ptr);
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
- /* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR)
- */
- if (transforms & PNG_TRANSFORM_SWAP_ALPHA)
- png_set_swap_alpha(png_ptr);
-#endif
-
-#if defined(PNG_READ_SWAP_SUPPORTED)
- /* swap bytes of 16 bit files to least significant byte first
- */
- if (transforms & PNG_TRANSFORM_SWAP_ENDIAN)
- png_set_swap(png_ptr);
-#endif
-
- /* We don't handle adding filler bytes */
-
- /* Optional call to gamma correct and add the background to the palette
- * and update info structure. REQUIRED if you are expecting libpng to
- * update the palette for you (i.e., you selected such a transform above).
- */
- png_read_update_info(png_ptr, info_ptr);
-
- /* -------------- image transformations end here ------------------- */
-
-#ifdef PNG_FREE_ME_SUPPORTED
- png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
-#endif
- if(info_ptr->row_pointers == NULL)
- {
- info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr,
- info_ptr->height * png_sizeof(png_bytep));
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_ROWS;
-#endif
- for (row = 0; row < (int)info_ptr->height; row++)
- {
- info_ptr->row_pointers[row] = (png_bytep)png_malloc(png_ptr,
- png_get_rowbytes(png_ptr, info_ptr));
- }
- }
-
- png_read_image(png_ptr, info_ptr->row_pointers);
- info_ptr->valid |= PNG_INFO_IDAT;
-
- /* read rest of file, and get additional chunks in info_ptr - REQUIRED */
- png_read_end(png_ptr, info_ptr);
-
- transforms = transforms; /* quiet compiler warnings */
- params = params;
-
-}
-#endif /* PNG_INFO_IMAGE_SUPPORTED */
-#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngrio.c b/Build/source/libs/libpng/pngrio.c
deleted file mode 100644
index 7d2522f1f86..00000000000
--- a/Build/source/libs/libpng/pngrio.c
+++ /dev/null
@@ -1,167 +0,0 @@
-
-/* pngrio.c - functions for data input
- *
- * Last changed in libpng 1.2.13 November 13, 2006
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2006 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This file provides a location for all input. Users who need
- * special handling are expected to write a function that has the same
- * arguments as this and performs a similar function, but that possibly
- * has a different input method. Note that you shouldn't change this
- * function, but rather write a replacement function and then make
- * libpng use it at run time with png_set_read_fn(...).
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED)
-
-/* Read the data from whatever input you are using. The default routine
- reads from a file pointer. Note that this routine sometimes gets called
- with very small lengths, so you should implement some kind of simple
- buffering if you are using unbuffered reads. This should never be asked
- to read more then 64K on a 16 bit machine. */
-void /* PRIVATE */
-png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_debug1(4,"reading %d bytes\n", (int)length);
- if (png_ptr->read_data_fn != NULL)
- (*(png_ptr->read_data_fn))(png_ptr, data, length);
- else
- png_error(png_ptr, "Call to NULL read function");
-}
-
-#if !defined(PNG_NO_STDIO)
-/* This is the function that does the actual reading of data. If you are
- not reading from a standard C stream, you should create a replacement
- read_data function and use it at run time with png_set_read_fn(), rather
- than changing the library. */
-#ifndef USE_FAR_KEYWORD
-void PNGAPI
-png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_size_t check;
-
- if(png_ptr == NULL) return;
- /* fread() returns 0 on error, so it is OK to store this in a png_size_t
- * instead of an int, which is what fread() actually returns.
- */
-#if defined(_WIN32_WCE)
- if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) )
- check = 0;
-#else
- check = (png_size_t)fread(data, (png_size_t)1, length,
- (png_FILE_p)png_ptr->io_ptr);
-#endif
-
- if (check != length)
- png_error(png_ptr, "Read Error");
-}
-#else
-/* this is the model-independent version. Since the standard I/O library
- can't handle far buffers in the medium and small models, we have to copy
- the data.
-*/
-
-#define NEAR_BUF_SIZE 1024
-#define MIN(a,b) (a <= b ? a : b)
-
-static void PNGAPI
-png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- int check;
- png_byte *n_data;
- png_FILE_p io_ptr;
-
- if(png_ptr == NULL) return;
- /* Check if data really is near. If so, use usual code. */
- n_data = (png_byte *)CVT_PTR_NOCHECK(data);
- io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
- if ((png_bytep)n_data == data)
- {
-#if defined(_WIN32_WCE)
- if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) )
- check = 0;
-#else
- check = fread(n_data, 1, length, io_ptr);
-#endif
- }
- else
- {
- png_byte buf[NEAR_BUF_SIZE];
- png_size_t read, remaining, err;
- check = 0;
- remaining = length;
- do
- {
- read = MIN(NEAR_BUF_SIZE, remaining);
-#if defined(_WIN32_WCE)
- if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) )
- err = 0;
-#else
- err = fread(buf, (png_size_t)1, read, io_ptr);
-#endif
- png_memcpy(data, buf, read); /* copy far buffer to near buffer */
- if(err != read)
- break;
- else
- check += err;
- data += read;
- remaining -= read;
- }
- while (remaining != 0);
- }
- if ((png_uint_32)check != (png_uint_32)length)
- png_error(png_ptr, "read Error");
-}
-#endif
-#endif
-
-/* This function allows the application to supply a new input function
- for libpng if standard C streams aren't being used.
-
- This function takes as its arguments:
- png_ptr - pointer to a png input data structure
- io_ptr - pointer to user supplied structure containing info about
- the input functions. May be NULL.
- read_data_fn - pointer to a new input function that takes as its
- arguments a pointer to a png_struct, a pointer to
- a location where input data can be stored, and a 32-bit
- unsigned int that is the number of bytes to be read.
- To exit and output any fatal error messages the new write
- function should call png_error(png_ptr, "Error msg"). */
-void PNGAPI
-png_set_read_fn(png_structp png_ptr, png_voidp io_ptr,
- png_rw_ptr read_data_fn)
-{
- if(png_ptr == NULL) return;
- png_ptr->io_ptr = io_ptr;
-
-#if !defined(PNG_NO_STDIO)
- if (read_data_fn != NULL)
- png_ptr->read_data_fn = read_data_fn;
- else
- png_ptr->read_data_fn = png_default_read_data;
-#else
- png_ptr->read_data_fn = read_data_fn;
-#endif
-
- /* It is an error to write to a read device */
- if (png_ptr->write_data_fn != NULL)
- {
- png_ptr->write_data_fn = NULL;
- png_warning(png_ptr,
- "It's an error to set both read_data_fn and write_data_fn in the ");
- png_warning(png_ptr,
- "same structure. Resetting write_data_fn to NULL.");
- }
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
- png_ptr->output_flush_fn = NULL;
-#endif
-}
-#endif /* PNG_READ_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngrtran.c b/Build/source/libs/libpng/pngrtran.c
deleted file mode 100644
index 873b22cf34d..00000000000
--- a/Build/source/libs/libpng/pngrtran.c
+++ /dev/null
@@ -1,4292 +0,0 @@
-
-/* pngrtran.c - transforms the data in a row for PNG readers
- *
- * Last changed in libpng 1.2.27 [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This file contains functions optionally called by an application
- * in order to tell libpng how to handle data when reading a PNG.
- * Transformations that are used in both reading and writing are
- * in pngtrans.c.
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED)
-
-/* Set the action on getting a CRC error for an ancillary or critical chunk. */
-void PNGAPI
-png_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action)
-{
- png_debug(1, "in png_set_crc_action\n");
- /* Tell libpng how we react to CRC errors in critical chunks */
- if(png_ptr == NULL) return;
- switch (crit_action)
- {
- case PNG_CRC_NO_CHANGE: /* leave setting as is */
- break;
- case PNG_CRC_WARN_USE: /* warn/use data */
- png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
- png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;
- break;
- case PNG_CRC_QUIET_USE: /* quiet/use data */
- png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
- png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |
- PNG_FLAG_CRC_CRITICAL_IGNORE;
- break;
- case PNG_CRC_WARN_DISCARD: /* not a valid action for critical data */
- png_warning(png_ptr, "Can't discard critical data on CRC error.");
- case PNG_CRC_ERROR_QUIT: /* error/quit */
- case PNG_CRC_DEFAULT:
- default:
- png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
- break;
- }
-
- switch (ancil_action)
- {
- case PNG_CRC_NO_CHANGE: /* leave setting as is */
- break;
- case PNG_CRC_WARN_USE: /* warn/use data */
- png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
- png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;
- break;
- case PNG_CRC_QUIET_USE: /* quiet/use data */
- png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
- png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |
- PNG_FLAG_CRC_ANCILLARY_NOWARN;
- break;
- case PNG_CRC_ERROR_QUIT: /* error/quit */
- png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
- png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;
- break;
- case PNG_CRC_WARN_DISCARD: /* warn/discard data */
- case PNG_CRC_DEFAULT:
- default:
- png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
- break;
- }
-}
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
- defined(PNG_FLOATING_POINT_SUPPORTED)
-/* handle alpha and tRNS via a background color */
-void PNGAPI
-png_set_background(png_structp png_ptr,
- png_color_16p background_color, int background_gamma_code,
- int need_expand, double background_gamma)
-{
- png_debug(1, "in png_set_background\n");
- if(png_ptr == NULL) return;
- if (background_gamma_code == PNG_BACKGROUND_GAMMA_UNKNOWN)
- {
- png_warning(png_ptr, "Application must supply a known background gamma");
- return;
- }
-
- png_ptr->transformations |= PNG_BACKGROUND;
- png_memcpy(&(png_ptr->background), background_color,
- png_sizeof(png_color_16));
- png_ptr->background_gamma = (float)background_gamma;
- png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
- png_ptr->transformations |= (need_expand ? PNG_BACKGROUND_EXPAND : 0);
-}
-#endif
-
-#if defined(PNG_READ_16_TO_8_SUPPORTED)
-/* strip 16 bit depth files to 8 bit depth */
-void PNGAPI
-png_set_strip_16(png_structp png_ptr)
-{
- png_debug(1, "in png_set_strip_16\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_16_TO_8;
-}
-#endif
-
-#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-void PNGAPI
-png_set_strip_alpha(png_structp png_ptr)
-{
- png_debug(1, "in png_set_strip_alpha\n");
- if(png_ptr == NULL) return;
- png_ptr->flags |= PNG_FLAG_STRIP_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
-/* Dither file to 8 bit. Supply a palette, the current number
- * of elements in the palette, the maximum number of elements
- * allowed, and a histogram if possible. If the current number
- * of colors is greater then the maximum number, the palette will be
- * modified to fit in the maximum number. "full_dither" indicates
- * whether we need a dithering cube set up for RGB images, or if we
- * simply are reducing the number of colors in a paletted image.
- */
-
-typedef struct png_dsort_struct
-{
- struct png_dsort_struct FAR * next;
- png_byte left;
- png_byte right;
-} png_dsort;
-typedef png_dsort FAR * png_dsortp;
-typedef png_dsort FAR * FAR * png_dsortpp;
-
-void PNGAPI
-png_set_dither(png_structp png_ptr, png_colorp palette,
- int num_palette, int maximum_colors, png_uint_16p histogram,
- int full_dither)
-{
- png_debug(1, "in png_set_dither\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_DITHER;
-
- if (!full_dither)
- {
- int i;
-
- png_ptr->dither_index = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)(num_palette * png_sizeof (png_byte)));
- for (i = 0; i < num_palette; i++)
- png_ptr->dither_index[i] = (png_byte)i;
- }
-
- if (num_palette > maximum_colors)
- {
- if (histogram != NULL)
- {
- /* This is easy enough, just throw out the least used colors.
- Perhaps not the best solution, but good enough. */
-
- int i;
-
- /* initialize an array to sort colors */
- png_ptr->dither_sort = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)(num_palette * png_sizeof (png_byte)));
-
- /* initialize the dither_sort array */
- for (i = 0; i < num_palette; i++)
- png_ptr->dither_sort[i] = (png_byte)i;
-
- /* Find the least used palette entries by starting a
- bubble sort, and running it until we have sorted
- out enough colors. Note that we don't care about
- sorting all the colors, just finding which are
- least used. */
-
- for (i = num_palette - 1; i >= maximum_colors; i--)
- {
- int done; /* to stop early if the list is pre-sorted */
- int j;
-
- done = 1;
- for (j = 0; j < i; j++)
- {
- if (histogram[png_ptr->dither_sort[j]]
- < histogram[png_ptr->dither_sort[j + 1]])
- {
- png_byte t;
-
- t = png_ptr->dither_sort[j];
- png_ptr->dither_sort[j] = png_ptr->dither_sort[j + 1];
- png_ptr->dither_sort[j + 1] = t;
- done = 0;
- }
- }
- if (done)
- break;
- }
-
- /* swap the palette around, and set up a table, if necessary */
- if (full_dither)
- {
- int j = num_palette;
-
- /* put all the useful colors within the max, but don't
- move the others */
- for (i = 0; i < maximum_colors; i++)
- {
- if ((int)png_ptr->dither_sort[i] >= maximum_colors)
- {
- do
- j--;
- while ((int)png_ptr->dither_sort[j] >= maximum_colors);
- palette[i] = palette[j];
- }
- }
- }
- else
- {
- int j = num_palette;
-
- /* move all the used colors inside the max limit, and
- develop a translation table */
- for (i = 0; i < maximum_colors; i++)
- {
- /* only move the colors we need to */
- if ((int)png_ptr->dither_sort[i] >= maximum_colors)
- {
- png_color tmp_color;
-
- do
- j--;
- while ((int)png_ptr->dither_sort[j] >= maximum_colors);
-
- tmp_color = palette[j];
- palette[j] = palette[i];
- palette[i] = tmp_color;
- /* indicate where the color went */
- png_ptr->dither_index[j] = (png_byte)i;
- png_ptr->dither_index[i] = (png_byte)j;
- }
- }
-
- /* find closest color for those colors we are not using */
- for (i = 0; i < num_palette; i++)
- {
- if ((int)png_ptr->dither_index[i] >= maximum_colors)
- {
- int min_d, k, min_k, d_index;
-
- /* find the closest color to one we threw out */
- d_index = png_ptr->dither_index[i];
- min_d = PNG_COLOR_DIST(palette[d_index], palette[0]);
- for (k = 1, min_k = 0; k < maximum_colors; k++)
- {
- int d;
-
- d = PNG_COLOR_DIST(palette[d_index], palette[k]);
-
- if (d < min_d)
- {
- min_d = d;
- min_k = k;
- }
- }
- /* point to closest color */
- png_ptr->dither_index[i] = (png_byte)min_k;
- }
- }
- }
- png_free(png_ptr, png_ptr->dither_sort);
- png_ptr->dither_sort=NULL;
- }
- else
- {
- /* This is much harder to do simply (and quickly). Perhaps
- we need to go through a median cut routine, but those
- don't always behave themselves with only a few colors
- as input. So we will just find the closest two colors,
- and throw out one of them (chosen somewhat randomly).
- [We don't understand this at all, so if someone wants to
- work on improving it, be our guest - AED, GRP]
- */
- int i;
- int max_d;
- int num_new_palette;
- png_dsortp t;
- png_dsortpp hash;
-
- t=NULL;
-
- /* initialize palette index arrays */
- png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)(num_palette * png_sizeof (png_byte)));
- png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)(num_palette * png_sizeof (png_byte)));
-
- /* initialize the sort array */
- for (i = 0; i < num_palette; i++)
- {
- png_ptr->index_to_palette[i] = (png_byte)i;
- png_ptr->palette_to_index[i] = (png_byte)i;
- }
-
- hash = (png_dsortpp)png_malloc(png_ptr, (png_uint_32)(769 *
- png_sizeof (png_dsortp)));
- for (i = 0; i < 769; i++)
- hash[i] = NULL;
-/* png_memset(hash, 0, 769 * png_sizeof (png_dsortp)); */
-
- num_new_palette = num_palette;
-
- /* initial wild guess at how far apart the farthest pixel
- pair we will be eliminating will be. Larger
- numbers mean more areas will be allocated, Smaller
- numbers run the risk of not saving enough data, and
- having to do this all over again.
-
- I have not done extensive checking on this number.
- */
- max_d = 96;
-
- while (num_new_palette > maximum_colors)
- {
- for (i = 0; i < num_new_palette - 1; i++)
- {
- int j;
-
- for (j = i + 1; j < num_new_palette; j++)
- {
- int d;
-
- d = PNG_COLOR_DIST(palette[i], palette[j]);
-
- if (d <= max_d)
- {
-
- t = (png_dsortp)png_malloc_warn(png_ptr,
- (png_uint_32)(png_sizeof(png_dsort)));
- if (t == NULL)
- break;
- t->next = hash[d];
- t->left = (png_byte)i;
- t->right = (png_byte)j;
- hash[d] = t;
- }
- }
- if (t == NULL)
- break;
- }
-
- if (t != NULL)
- for (i = 0; i <= max_d; i++)
- {
- if (hash[i] != NULL)
- {
- png_dsortp p;
-
- for (p = hash[i]; p; p = p->next)
- {
- if ((int)png_ptr->index_to_palette[p->left]
- < num_new_palette &&
- (int)png_ptr->index_to_palette[p->right]
- < num_new_palette)
- {
- int j, next_j;
-
- if (num_new_palette & 0x01)
- {
- j = p->left;
- next_j = p->right;
- }
- else
- {
- j = p->right;
- next_j = p->left;
- }
-
- num_new_palette--;
- palette[png_ptr->index_to_palette[j]]
- = palette[num_new_palette];
- if (!full_dither)
- {
- int k;
-
- for (k = 0; k < num_palette; k++)
- {
- if (png_ptr->dither_index[k] ==
- png_ptr->index_to_palette[j])
- png_ptr->dither_index[k] =
- png_ptr->index_to_palette[next_j];
- if ((int)png_ptr->dither_index[k] ==
- num_new_palette)
- png_ptr->dither_index[k] =
- png_ptr->index_to_palette[j];
- }
- }
-
- png_ptr->index_to_palette[png_ptr->palette_to_index
- [num_new_palette]] = png_ptr->index_to_palette[j];
- png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
- = png_ptr->palette_to_index[num_new_palette];
-
- png_ptr->index_to_palette[j] = (png_byte)num_new_palette;
- png_ptr->palette_to_index[num_new_palette] = (png_byte)j;
- }
- if (num_new_palette <= maximum_colors)
- break;
- }
- if (num_new_palette <= maximum_colors)
- break;
- }
- }
-
- for (i = 0; i < 769; i++)
- {
- if (hash[i] != NULL)
- {
- png_dsortp p = hash[i];
- while (p)
- {
- t = p->next;
- png_free(png_ptr, p);
- p = t;
- }
- }
- hash[i] = 0;
- }
- max_d += 96;
- }
- png_free(png_ptr, hash);
- png_free(png_ptr, png_ptr->palette_to_index);
- png_free(png_ptr, png_ptr->index_to_palette);
- png_ptr->palette_to_index=NULL;
- png_ptr->index_to_palette=NULL;
- }
- num_palette = maximum_colors;
- }
- if (png_ptr->palette == NULL)
- {
- png_ptr->palette = palette;
- }
- png_ptr->num_palette = (png_uint_16)num_palette;
-
- if (full_dither)
- {
- int i;
- png_bytep distance;
- int total_bits = PNG_DITHER_RED_BITS + PNG_DITHER_GREEN_BITS +
- PNG_DITHER_BLUE_BITS;
- int num_red = (1 << PNG_DITHER_RED_BITS);
- int num_green = (1 << PNG_DITHER_GREEN_BITS);
- int num_blue = (1 << PNG_DITHER_BLUE_BITS);
- png_size_t num_entries = ((png_size_t)1 << total_bits);
-
- png_ptr->palette_lookup = (png_bytep )png_malloc(png_ptr,
- (png_uint_32)(num_entries * png_sizeof (png_byte)));
-
- png_memset(png_ptr->palette_lookup, 0, num_entries *
- png_sizeof (png_byte));
-
- distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
- png_sizeof(png_byte)));
-
- png_memset(distance, 0xff, num_entries * png_sizeof(png_byte));
-
- for (i = 0; i < num_palette; i++)
- {
- int ir, ig, ib;
- int r = (palette[i].red >> (8 - PNG_DITHER_RED_BITS));
- int g = (palette[i].green >> (8 - PNG_DITHER_GREEN_BITS));
- int b = (palette[i].blue >> (8 - PNG_DITHER_BLUE_BITS));
-
- for (ir = 0; ir < num_red; ir++)
- {
- /* int dr = abs(ir - r); */
- int dr = ((ir > r) ? ir - r : r - ir);
- int index_r = (ir << (PNG_DITHER_BLUE_BITS + PNG_DITHER_GREEN_BITS));
-
- for (ig = 0; ig < num_green; ig++)
- {
- /* int dg = abs(ig - g); */
- int dg = ((ig > g) ? ig - g : g - ig);
- int dt = dr + dg;
- int dm = ((dr > dg) ? dr : dg);
- int index_g = index_r | (ig << PNG_DITHER_BLUE_BITS);
-
- for (ib = 0; ib < num_blue; ib++)
- {
- int d_index = index_g | ib;
- /* int db = abs(ib - b); */
- int db = ((ib > b) ? ib - b : b - ib);
- int dmax = ((dm > db) ? dm : db);
- int d = dmax + dt + db;
-
- if (d < (int)distance[d_index])
- {
- distance[d_index] = (png_byte)d;
- png_ptr->palette_lookup[d_index] = (png_byte)i;
- }
- }
- }
- }
- }
-
- png_free(png_ptr, distance);
- }
-}
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
-/* Transform the image from the file_gamma to the screen_gamma. We
- * only do transformations on images where the file_gamma and screen_gamma
- * are not close reciprocals, otherwise it slows things down slightly, and
- * also needlessly introduces small errors.
- *
- * We will turn off gamma transformation later if no semitransparent entries
- * are present in the tRNS array for palette images. We can't do it here
- * because we don't necessarily have the tRNS chunk yet.
- */
-void PNGAPI
-png_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma)
-{
- png_debug(1, "in png_set_gamma\n");
- if(png_ptr == NULL) return;
- if ((fabs(scrn_gamma * file_gamma - 1.0) > PNG_GAMMA_THRESHOLD) ||
- (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) ||
- (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
- png_ptr->transformations |= PNG_GAMMA;
- png_ptr->gamma = (float)file_gamma;
- png_ptr->screen_gamma = (float)scrn_gamma;
-}
-#endif
-
-#if defined(PNG_READ_EXPAND_SUPPORTED)
-/* Expand paletted images to RGB, expand grayscale images of
- * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
- * to alpha channels.
- */
-void PNGAPI
-png_set_expand(png_structp png_ptr)
-{
- png_debug(1, "in png_set_expand\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
- png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
-}
-
-/* GRR 19990627: the following three functions currently are identical
- * to png_set_expand(). However, it is entirely reasonable that someone
- * might wish to expand an indexed image to RGB but *not* expand a single,
- * fully transparent palette entry to a full alpha channel--perhaps instead
- * convert tRNS to the grayscale/RGB format (16-bit RGB value), or replace
- * the transparent color with a particular RGB value, or drop tRNS entirely.
- * IOW, a future version of the library may make the transformations flag
- * a bit more fine-grained, with separate bits for each of these three
- * functions.
- *
- * More to the point, these functions make it obvious what libpng will be
- * doing, whereas "expand" can (and does) mean any number of things.
- *
- * GRP 20060307: In libpng-1.4.0, png_set_gray_1_2_4_to_8() was modified
- * to expand only the sample depth but not to expand the tRNS to alpha.
- */
-
-/* Expand paletted images to RGB. */
-void PNGAPI
-png_set_palette_to_rgb(png_structp png_ptr)
-{
- png_debug(1, "in png_set_palette_to_rgb\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
- png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
-}
-
-#if !defined(PNG_1_0_X)
-/* Expand grayscale images of less than 8-bit depth to 8 bits. */
-void PNGAPI
-png_set_expand_gray_1_2_4_to_8(png_structp png_ptr)
-{
- png_debug(1, "in png_set_expand_gray_1_2_4_to_8\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_EXPAND;
- png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
-}
-#endif
-
-#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
-/* Expand grayscale images of less than 8-bit depth to 8 bits. */
-/* Deprecated as of libpng-1.2.9 */
-void PNGAPI
-png_set_gray_1_2_4_to_8(png_structp png_ptr)
-{
- png_debug(1, "in png_set_gray_1_2_4_to_8\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-#endif
-
-
-/* Expand tRNS chunks to alpha channels. */
-void PNGAPI
-png_set_tRNS_to_alpha(png_structp png_ptr)
-{
- png_debug(1, "in png_set_tRNS_to_alpha\n");
- png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
- png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
-}
-#endif /* defined(PNG_READ_EXPAND_SUPPORTED) */
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
-void PNGAPI
-png_set_gray_to_rgb(png_structp png_ptr)
-{
- png_debug(1, "in png_set_gray_to_rgb\n");
- png_ptr->transformations |= PNG_GRAY_TO_RGB;
- png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
-}
-#endif
-
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-#if defined(PNG_FLOATING_POINT_SUPPORTED)
-/* Convert a RGB image to a grayscale of the same width. This allows us,
- * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image.
- */
-
-void PNGAPI
-png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
- double green)
-{
- int red_fixed = (int)((float)red*100000.0 + 0.5);
- int green_fixed = (int)((float)green*100000.0 + 0.5);
- if(png_ptr == NULL) return;
- png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed);
-}
-#endif
-
-void PNGAPI
-png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action,
- png_fixed_point red, png_fixed_point green)
-{
- png_debug(1, "in png_set_rgb_to_gray\n");
- if(png_ptr == NULL) return;
- switch(error_action)
- {
- case 1: png_ptr->transformations |= PNG_RGB_TO_GRAY;
- break;
- case 2: png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
- break;
- case 3: png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
- }
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-#if defined(PNG_READ_EXPAND_SUPPORTED)
- png_ptr->transformations |= PNG_EXPAND;
-#else
- {
- png_warning(png_ptr, "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED.");
- png_ptr->transformations &= ~PNG_RGB_TO_GRAY;
- }
-#endif
- {
- png_uint_16 red_int, green_int;
- if(red < 0 || green < 0)
- {
- red_int = 6968; /* .212671 * 32768 + .5 */
- green_int = 23434; /* .715160 * 32768 + .5 */
- }
- else if(red + green < 100000L)
- {
- red_int = (png_uint_16)(((png_uint_32)red*32768L)/100000L);
- green_int = (png_uint_16)(((png_uint_32)green*32768L)/100000L);
- }
- else
- {
- png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients");
- red_int = 6968;
- green_int = 23434;
- }
- png_ptr->rgb_to_gray_red_coeff = red_int;
- png_ptr->rgb_to_gray_green_coeff = green_int;
- png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(32768-red_int-green_int);
- }
-}
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_LEGACY_SUPPORTED)
-void PNGAPI
-png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
- read_user_transform_fn)
-{
- png_debug(1, "in png_set_read_user_transform_fn\n");
- if(png_ptr == NULL) return;
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- png_ptr->transformations |= PNG_USER_TRANSFORM;
- png_ptr->read_user_transform_fn = read_user_transform_fn;
-#endif
-#ifdef PNG_LEGACY_SUPPORTED
- if(read_user_transform_fn)
- png_warning(png_ptr,
- "This version of libpng does not support user transforms");
-#endif
-}
-#endif
-
-/* Initialize everything needed for the read. This includes modifying
- * the palette.
- */
-void /* PRIVATE */
-png_init_read_transformations(png_structp png_ptr)
-{
- png_debug(1, "in png_init_read_transformations\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if(png_ptr != NULL)
-#endif
- {
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || defined(PNG_READ_SHIFT_SUPPORTED) \
- || defined(PNG_READ_GAMMA_SUPPORTED)
- int color_type = png_ptr->color_type;
-#endif
-
-#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
- /* Detect gray background and attempt to enable optimization
- * for gray --> RGB case */
- /* Note: if PNG_BACKGROUND_EXPAND is set and color_type is either RGB or
- * RGB_ALPHA (in which case need_expand is superfluous anyway), the
- * background color might actually be gray yet not be flagged as such.
- * This is not a problem for the current code, which uses
- * PNG_BACKGROUND_IS_GRAY only to decide when to do the
- * png_do_gray_to_rgb() transformation.
- */
- if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
- !(color_type & PNG_COLOR_MASK_COLOR))
- {
- png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
- } else if ((png_ptr->transformations & PNG_BACKGROUND) &&
- !(png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
- (png_ptr->transformations & PNG_GRAY_TO_RGB) &&
- png_ptr->background.red == png_ptr->background.green &&
- png_ptr->background.red == png_ptr->background.blue)
- {
- png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
- png_ptr->background.gray = png_ptr->background.red;
- }
-#endif
-
- if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
- (png_ptr->transformations & PNG_EXPAND))
- {
- if (!(color_type & PNG_COLOR_MASK_COLOR)) /* i.e., GRAY or GRAY_ALPHA */
- {
- /* expand background and tRNS chunks */
- switch (png_ptr->bit_depth)
- {
- case 1:
- png_ptr->background.gray *= (png_uint_16)0xff;
- png_ptr->background.red = png_ptr->background.green
- = png_ptr->background.blue = png_ptr->background.gray;
- if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
- {
- png_ptr->trans_values.gray *= (png_uint_16)0xff;
- png_ptr->trans_values.red = png_ptr->trans_values.green
- = png_ptr->trans_values.blue = png_ptr->trans_values.gray;
- }
- break;
- case 2:
- png_ptr->background.gray *= (png_uint_16)0x55;
- png_ptr->background.red = png_ptr->background.green
- = png_ptr->background.blue = png_ptr->background.gray;
- if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
- {
- png_ptr->trans_values.gray *= (png_uint_16)0x55;
- png_ptr->trans_values.red = png_ptr->trans_values.green
- = png_ptr->trans_values.blue = png_ptr->trans_values.gray;
- }
- break;
- case 4:
- png_ptr->background.gray *= (png_uint_16)0x11;
- png_ptr->background.red = png_ptr->background.green
- = png_ptr->background.blue = png_ptr->background.gray;
- if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
- {
- png_ptr->trans_values.gray *= (png_uint_16)0x11;
- png_ptr->trans_values.red = png_ptr->trans_values.green
- = png_ptr->trans_values.blue = png_ptr->trans_values.gray;
- }
- break;
- case 8:
- case 16:
- png_ptr->background.red = png_ptr->background.green
- = png_ptr->background.blue = png_ptr->background.gray;
- break;
- }
- }
- else if (color_type == PNG_COLOR_TYPE_PALETTE)
- {
- png_ptr->background.red =
- png_ptr->palette[png_ptr->background.index].red;
- png_ptr->background.green =
- png_ptr->palette[png_ptr->background.index].green;
- png_ptr->background.blue =
- png_ptr->palette[png_ptr->background.index].blue;
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
- if (png_ptr->transformations & PNG_INVERT_ALPHA)
- {
-#if defined(PNG_READ_EXPAND_SUPPORTED)
- if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
-#endif
- {
- /* invert the alpha channel (in tRNS) unless the pixels are
- going to be expanded, in which case leave it for later */
- int i,istop;
- istop=(int)png_ptr->num_trans;
- for (i=0; i<istop; i++)
- png_ptr->trans[i] = (png_byte)(255 - png_ptr->trans[i]);
- }
- }
-#endif
-
- }
- }
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED)
- png_ptr->background_1 = png_ptr->background;
-#endif
-#if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
-
- if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0)
- && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0)
- < PNG_GAMMA_THRESHOLD))
- {
- int i,k;
- k=0;
- for (i=0; i<png_ptr->num_trans; i++)
- {
- if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff)
- k=1; /* partial transparency is present */
- }
- if (k == 0)
- png_ptr->transformations &= ~PNG_GAMMA;
- }
-
- if ((png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY)) &&
- png_ptr->gamma != 0.0)
- {
- png_build_gamma_table(png_ptr);
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->transformations & PNG_BACKGROUND)
- {
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- {
- /* could skip if no transparency and
- */
- png_color back, back_1;
- png_colorp palette = png_ptr->palette;
- int num_palette = png_ptr->num_palette;
- int i;
- if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
- {
- back.red = png_ptr->gamma_table[png_ptr->background.red];
- back.green = png_ptr->gamma_table[png_ptr->background.green];
- back.blue = png_ptr->gamma_table[png_ptr->background.blue];
-
- back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
- back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
- back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
- }
- else
- {
- double g, gs;
-
- switch (png_ptr->background_gamma_type)
- {
- case PNG_BACKGROUND_GAMMA_SCREEN:
- g = (png_ptr->screen_gamma);
- gs = 1.0;
- break;
- case PNG_BACKGROUND_GAMMA_FILE:
- g = 1.0 / (png_ptr->gamma);
- gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
- break;
- case PNG_BACKGROUND_GAMMA_UNIQUE:
- g = 1.0 / (png_ptr->background_gamma);
- gs = 1.0 / (png_ptr->background_gamma *
- png_ptr->screen_gamma);
- break;
- default:
- g = 1.0; /* back_1 */
- gs = 1.0; /* back */
- }
-
- if ( fabs(gs - 1.0) < PNG_GAMMA_THRESHOLD)
- {
- back.red = (png_byte)png_ptr->background.red;
- back.green = (png_byte)png_ptr->background.green;
- back.blue = (png_byte)png_ptr->background.blue;
- }
- else
- {
- back.red = (png_byte)(pow(
- (double)png_ptr->background.red/255, gs) * 255.0 + .5);
- back.green = (png_byte)(pow(
- (double)png_ptr->background.green/255, gs) * 255.0 + .5);
- back.blue = (png_byte)(pow(
- (double)png_ptr->background.blue/255, gs) * 255.0 + .5);
- }
-
- back_1.red = (png_byte)(pow(
- (double)png_ptr->background.red/255, g) * 255.0 + .5);
- back_1.green = (png_byte)(pow(
- (double)png_ptr->background.green/255, g) * 255.0 + .5);
- back_1.blue = (png_byte)(pow(
- (double)png_ptr->background.blue/255, g) * 255.0 + .5);
- }
- for (i = 0; i < num_palette; i++)
- {
- if (i < (int)png_ptr->num_trans && png_ptr->trans[i] != 0xff)
- {
- if (png_ptr->trans[i] == 0)
- {
- palette[i] = back;
- }
- else /* if (png_ptr->trans[i] != 0xff) */
- {
- png_byte v, w;
-
- v = png_ptr->gamma_to_1[palette[i].red];
- png_composite(w, v, png_ptr->trans[i], back_1.red);
- palette[i].red = png_ptr->gamma_from_1[w];
-
- v = png_ptr->gamma_to_1[palette[i].green];
- png_composite(w, v, png_ptr->trans[i], back_1.green);
- palette[i].green = png_ptr->gamma_from_1[w];
-
- v = png_ptr->gamma_to_1[palette[i].blue];
- png_composite(w, v, png_ptr->trans[i], back_1.blue);
- palette[i].blue = png_ptr->gamma_from_1[w];
- }
- }
- else
- {
- palette[i].red = png_ptr->gamma_table[palette[i].red];
- palette[i].green = png_ptr->gamma_table[palette[i].green];
- palette[i].blue = png_ptr->gamma_table[palette[i].blue];
- }
- }
- /* Prevent the transformations being done again, and make sure
- * that the now spurious alpha channel is stripped - the code
- * has just reduced background composition and gamma correction
- * to a simple alpha channel strip.
- */
- png_ptr->transformations &= ~PNG_BACKGROUND;
- png_ptr->transformations &= ~PNG_GAMMA;
- png_ptr->transformations |= PNG_STRIP_ALPHA;
- }
- /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
- else
- /* color_type != PNG_COLOR_TYPE_PALETTE */
- {
- double m = (double)(((png_uint_32)1 << png_ptr->bit_depth) - 1);
- double g = 1.0;
- double gs = 1.0;
-
- switch (png_ptr->background_gamma_type)
- {
- case PNG_BACKGROUND_GAMMA_SCREEN:
- g = (png_ptr->screen_gamma);
- gs = 1.0;
- break;
- case PNG_BACKGROUND_GAMMA_FILE:
- g = 1.0 / (png_ptr->gamma);
- gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
- break;
- case PNG_BACKGROUND_GAMMA_UNIQUE:
- g = 1.0 / (png_ptr->background_gamma);
- gs = 1.0 / (png_ptr->background_gamma *
- png_ptr->screen_gamma);
- break;
- }
-
- png_ptr->background_1.gray = (png_uint_16)(pow(
- (double)png_ptr->background.gray / m, g) * m + .5);
- png_ptr->background.gray = (png_uint_16)(pow(
- (double)png_ptr->background.gray / m, gs) * m + .5);
-
- if ((png_ptr->background.red != png_ptr->background.green) ||
- (png_ptr->background.red != png_ptr->background.blue) ||
- (png_ptr->background.red != png_ptr->background.gray))
- {
- /* RGB or RGBA with color background */
- png_ptr->background_1.red = (png_uint_16)(pow(
- (double)png_ptr->background.red / m, g) * m + .5);
- png_ptr->background_1.green = (png_uint_16)(pow(
- (double)png_ptr->background.green / m, g) * m + .5);
- png_ptr->background_1.blue = (png_uint_16)(pow(
- (double)png_ptr->background.blue / m, g) * m + .5);
- png_ptr->background.red = (png_uint_16)(pow(
- (double)png_ptr->background.red / m, gs) * m + .5);
- png_ptr->background.green = (png_uint_16)(pow(
- (double)png_ptr->background.green / m, gs) * m + .5);
- png_ptr->background.blue = (png_uint_16)(pow(
- (double)png_ptr->background.blue / m, gs) * m + .5);
- }
- else
- {
- /* GRAY, GRAY ALPHA, RGB, or RGBA with gray background */
- png_ptr->background_1.red = png_ptr->background_1.green
- = png_ptr->background_1.blue = png_ptr->background_1.gray;
- png_ptr->background.red = png_ptr->background.green
- = png_ptr->background.blue = png_ptr->background.gray;
- }
- }
- }
- else
- /* transformation does not include PNG_BACKGROUND */
-#endif /* PNG_READ_BACKGROUND_SUPPORTED */
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- {
- png_colorp palette = png_ptr->palette;
- int num_palette = png_ptr->num_palette;
- int i;
-
- for (i = 0; i < num_palette; i++)
- {
- palette[i].red = png_ptr->gamma_table[palette[i].red];
- palette[i].green = png_ptr->gamma_table[palette[i].green];
- palette[i].blue = png_ptr->gamma_table[palette[i].blue];
- }
-
- /* Done the gamma correction. */
- png_ptr->transformations &= ~PNG_GAMMA;
- }
- }
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- else
-#endif
-#endif /* PNG_READ_GAMMA_SUPPORTED && PNG_FLOATING_POINT_SUPPORTED */
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- /* No GAMMA transformation */
- if ((png_ptr->transformations & PNG_BACKGROUND) &&
- (color_type == PNG_COLOR_TYPE_PALETTE))
- {
- int i;
- int istop = (int)png_ptr->num_trans;
- png_color back;
- png_colorp palette = png_ptr->palette;
-
- back.red = (png_byte)png_ptr->background.red;
- back.green = (png_byte)png_ptr->background.green;
- back.blue = (png_byte)png_ptr->background.blue;
-
- for (i = 0; i < istop; i++)
- {
- if (png_ptr->trans[i] == 0)
- {
- palette[i] = back;
- }
- else if (png_ptr->trans[i] != 0xff)
- {
- /* The png_composite() macro is defined in png.h */
- png_composite(palette[i].red, palette[i].red,
- png_ptr->trans[i], back.red);
- png_composite(palette[i].green, palette[i].green,
- png_ptr->trans[i], back.green);
- png_composite(palette[i].blue, palette[i].blue,
- png_ptr->trans[i], back.blue);
- }
- }
-
- /* Handled alpha, still need to strip the channel. */
- png_ptr->transformations &= ~PNG_BACKGROUND;
- png_ptr->transformations |= PNG_STRIP_ALPHA;
- }
-#endif /* PNG_READ_BACKGROUND_SUPPORTED */
-
-#if defined(PNG_READ_SHIFT_SUPPORTED)
- if ((png_ptr->transformations & PNG_SHIFT) &&
- (color_type == PNG_COLOR_TYPE_PALETTE))
- {
- png_uint_16 i;
- png_uint_16 istop = png_ptr->num_palette;
- int sr = 8 - png_ptr->sig_bit.red;
- int sg = 8 - png_ptr->sig_bit.green;
- int sb = 8 - png_ptr->sig_bit.blue;
-
- if (sr < 0 || sr > 8)
- sr = 0;
- if (sg < 0 || sg > 8)
- sg = 0;
- if (sb < 0 || sb > 8)
- sb = 0;
- for (i = 0; i < istop; i++)
- {
- png_ptr->palette[i].red >>= sr;
- png_ptr->palette[i].green >>= sg;
- png_ptr->palette[i].blue >>= sb;
- }
- }
-#endif /* PNG_READ_SHIFT_SUPPORTED */
- }
-#if !defined(PNG_READ_GAMMA_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) \
- && !defined(PNG_READ_BACKGROUND_SUPPORTED)
- if(png_ptr)
- return;
-#endif
-}
-
-/* Modify the info structure to reflect the transformations. The
- * info should be updated so a PNG file could be written with it,
- * assuming the transformations result in valid PNG data.
- */
-void /* PRIVATE */
-png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
-{
- png_debug(1, "in png_read_transform_info\n");
-#if defined(PNG_READ_EXPAND_SUPPORTED)
- if (png_ptr->transformations & PNG_EXPAND)
- {
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (png_ptr->num_trans &&
- (png_ptr->transformations & PNG_EXPAND_tRNS))
- info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- else
- info_ptr->color_type = PNG_COLOR_TYPE_RGB;
- info_ptr->bit_depth = 8;
- info_ptr->num_trans = 0;
- }
- else
- {
- if (png_ptr->num_trans)
- {
- if (png_ptr->transformations & PNG_EXPAND_tRNS)
- info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
-#if 0 /* Removed from libpng-1.2.27 */
- else
- info_ptr->color_type |= PNG_COLOR_MASK_COLOR;
-#endif
- }
- if (info_ptr->bit_depth < 8)
- info_ptr->bit_depth = 8;
- info_ptr->num_trans = 0;
- }
- }
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->transformations & PNG_BACKGROUND)
- {
- info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA;
- info_ptr->num_trans = 0;
- info_ptr->background = png_ptr->background;
- }
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (png_ptr->transformations & PNG_GAMMA)
- {
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- info_ptr->gamma = png_ptr->gamma;
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- info_ptr->int_gamma = png_ptr->int_gamma;
-#endif
- }
-#endif
-
-#if defined(PNG_READ_16_TO_8_SUPPORTED)
- if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16))
- info_ptr->bit_depth = 8;
-#endif
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
- if (png_ptr->transformations & PNG_GRAY_TO_RGB)
- info_ptr->color_type |= PNG_COLOR_MASK_COLOR;
-#endif
-
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
- if (png_ptr->transformations & PNG_RGB_TO_GRAY)
- info_ptr->color_type &= ~PNG_COLOR_MASK_COLOR;
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
- if (png_ptr->transformations & PNG_DITHER)
- {
- if (((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
- (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)) &&
- png_ptr->palette_lookup && info_ptr->bit_depth == 8)
- {
- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
- }
- }
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED)
- if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8))
- info_ptr->bit_depth = 8;
-#endif
-
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- info_ptr->channels = 1;
- else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
- info_ptr->channels = 3;
- else
- info_ptr->channels = 1;
-
-#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
- if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA)
- info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA;
-#endif
-
- if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
- info_ptr->channels++;
-
-#if defined(PNG_READ_FILLER_SUPPORTED)
- /* STRIP_ALPHA and FILLER allowed: MASK_ALPHA bit stripped above */
- if ((png_ptr->transformations & PNG_FILLER) &&
- ((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
- (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)))
- {
- info_ptr->channels++;
- /* if adding a true alpha channel not just filler */
-#if !defined(PNG_1_0_X)
- if (png_ptr->transformations & PNG_ADD_ALPHA)
- info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
-#endif
- }
-#endif
-
-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \
-defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- if(png_ptr->transformations & PNG_USER_TRANSFORM)
- {
- if(info_ptr->bit_depth < png_ptr->user_transform_depth)
- info_ptr->bit_depth = png_ptr->user_transform_depth;
- if(info_ptr->channels < png_ptr->user_transform_channels)
- info_ptr->channels = png_ptr->user_transform_channels;
- }
-#endif
-
- info_ptr->pixel_depth = (png_byte)(info_ptr->channels *
- info_ptr->bit_depth);
-
- info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,info_ptr->width);
-
-#if !defined(PNG_READ_EXPAND_SUPPORTED)
- if(png_ptr)
- return;
-#endif
-}
-
-/* Transform the row. The order of transformations is significant,
- * and is very touchy. If you add a transformation, take care to
- * decide how it fits in with the other transformations here.
- */
-void /* PRIVATE */
-png_do_read_transformations(png_structp png_ptr)
-{
- png_debug(1, "in png_do_read_transformations\n");
- if (png_ptr->row_buf == NULL)
- {
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- char msg[50];
-
- png_snprintf2(msg, 50,
- "NULL row buffer for row %ld, pass %d", png_ptr->row_number,
- png_ptr->pass);
- png_error(png_ptr, msg);
-#else
- png_error(png_ptr, "NULL row buffer");
-#endif
- }
-#ifdef PNG_WARN_UNINITIALIZED_ROW
- if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
- /* Application has failed to call either png_read_start_image()
- * or png_read_update_info() after setting transforms that expand
- * pixels. This check added to libpng-1.2.19 */
-#if (PNG_WARN_UNINITIALIZED_ROW==1)
- png_error(png_ptr, "Uninitialized row");
-#else
- png_warning(png_ptr, "Uninitialized row");
-#endif
-#endif
-
-#if defined(PNG_READ_EXPAND_SUPPORTED)
- if (png_ptr->transformations & PNG_EXPAND)
- {
- if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE)
- {
- png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1,
- png_ptr->palette, png_ptr->trans, png_ptr->num_trans);
- }
- else
- {
- if (png_ptr->num_trans &&
- (png_ptr->transformations & PNG_EXPAND_tRNS))
- png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
- &(png_ptr->trans_values));
- else
- png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
- NULL);
- }
- }
-#endif
-
-#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
- if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA)
- png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
- PNG_FLAG_FILLER_AFTER | (png_ptr->flags & PNG_FLAG_STRIP_ALPHA));
-#endif
-
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
- if (png_ptr->transformations & PNG_RGB_TO_GRAY)
- {
- int rgb_error =
- png_do_rgb_to_gray(png_ptr, &(png_ptr->row_info), png_ptr->row_buf + 1);
- if(rgb_error)
- {
- png_ptr->rgb_to_gray_status=1;
- if((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
- PNG_RGB_TO_GRAY_WARN)
- png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
- if((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
- PNG_RGB_TO_GRAY_ERR)
- png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
- }
- }
-#endif
-
-/*
-From Andreas Dilger e-mail to png-implement, 26 March 1998:
-
- In most cases, the "simple transparency" should be done prior to doing
- gray-to-RGB, or you will have to test 3x as many bytes to check if a
- pixel is transparent. You would also need to make sure that the
- transparency information is upgraded to RGB.
-
- To summarize, the current flow is:
- - Gray + simple transparency -> compare 1 or 2 gray bytes and composite
- with background "in place" if transparent,
- convert to RGB if necessary
- - Gray + alpha -> composite with gray background and remove alpha bytes,
- convert to RGB if necessary
-
- To support RGB backgrounds for gray images we need:
- - Gray + simple transparency -> convert to RGB + simple transparency, compare
- 3 or 6 bytes and composite with background
- "in place" if transparent (3x compare/pixel
- compared to doing composite with gray bkgrnd)
- - Gray + alpha -> convert to RGB + alpha, composite with background and
- remove alpha bytes (3x float operations/pixel
- compared with composite on gray background)
-
- Greg's change will do this. The reason it wasn't done before is for
- performance, as this increases the per-pixel operations. If we would check
- in advance if the background was gray or RGB, and position the gray-to-RGB
- transform appropriately, then it would save a lot of work/time.
- */
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
- /* if gray -> RGB, do so now only if background is non-gray; else do later
- * for performance reasons */
- if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
- !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
- png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- if ((png_ptr->transformations & PNG_BACKGROUND) &&
- ((png_ptr->num_trans != 0 ) ||
- (png_ptr->color_type & PNG_COLOR_MASK_ALPHA)))
- png_do_background(&(png_ptr->row_info), png_ptr->row_buf + 1,
- &(png_ptr->trans_values), &(png_ptr->background)
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- , &(png_ptr->background_1),
- png_ptr->gamma_table, png_ptr->gamma_from_1,
- png_ptr->gamma_to_1, png_ptr->gamma_16_table,
- png_ptr->gamma_16_from_1, png_ptr->gamma_16_to_1,
- png_ptr->gamma_shift
-#endif
-);
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if ((png_ptr->transformations & PNG_GAMMA) &&
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- !((png_ptr->transformations & PNG_BACKGROUND) &&
- ((png_ptr->num_trans != 0) ||
- (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) &&
-#endif
- (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
- png_do_gamma(&(png_ptr->row_info), png_ptr->row_buf + 1,
- png_ptr->gamma_table, png_ptr->gamma_16_table,
- png_ptr->gamma_shift);
-#endif
-
-#if defined(PNG_READ_16_TO_8_SUPPORTED)
- if (png_ptr->transformations & PNG_16_TO_8)
- png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
- if (png_ptr->transformations & PNG_DITHER)
- {
- png_do_dither((png_row_infop)&(png_ptr->row_info), png_ptr->row_buf + 1,
- png_ptr->palette_lookup, png_ptr->dither_index);
- if(png_ptr->row_info.rowbytes == (png_uint_32)0)
- png_error(png_ptr, "png_do_dither returned rowbytes=0");
- }
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED)
- if (png_ptr->transformations & PNG_INVERT_MONO)
- png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED)
- if (png_ptr->transformations & PNG_SHIFT)
- png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1,
- &(png_ptr->shift));
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED)
- if (png_ptr->transformations & PNG_PACK)
- png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED)
- if (png_ptr->transformations & PNG_BGR)
- png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_PACKSWAP)
- png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
- /* if gray -> RGB, do so now only if we did not do so above */
- if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
- (png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
- png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED)
- if (png_ptr->transformations & PNG_FILLER)
- png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
- (png_uint_32)png_ptr->filler, png_ptr->flags);
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
- if (png_ptr->transformations & PNG_INVERT_ALPHA)
- png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
- if (png_ptr->transformations & PNG_SWAP_ALPHA)
- png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_SWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_SWAP_BYTES)
- png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- if (png_ptr->transformations & PNG_USER_TRANSFORM)
- {
- if(png_ptr->read_user_transform_fn != NULL)
- (*(png_ptr->read_user_transform_fn)) /* user read transform function */
- (png_ptr, /* png_ptr */
- &(png_ptr->row_info), /* row_info: */
- /* png_uint_32 width; width of row */
- /* png_uint_32 rowbytes; number of bytes in row */
- /* png_byte color_type; color type of pixels */
- /* png_byte bit_depth; bit depth of samples */
- /* png_byte channels; number of channels (1-4) */
- /* png_byte pixel_depth; bits per pixel (depth*channels) */
- png_ptr->row_buf + 1); /* start of pixel data for row */
-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
- if(png_ptr->user_transform_depth)
- png_ptr->row_info.bit_depth = png_ptr->user_transform_depth;
- if(png_ptr->user_transform_channels)
- png_ptr->row_info.channels = png_ptr->user_transform_channels;
-#endif
- png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
- png_ptr->row_info.channels);
- png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
- png_ptr->row_info.width);
- }
-#endif
-
-}
-
-#if defined(PNG_READ_PACK_SUPPORTED)
-/* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel,
- * without changing the actual values. Thus, if you had a row with
- * a bit depth of 1, you would end up with bytes that only contained
- * the numbers 0 or 1. If you would rather they contain 0 and 255, use
- * png_do_shift() after this.
- */
-void /* PRIVATE */
-png_do_unpack(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_unpack\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL && row_info->bit_depth < 8)
-#else
- if (row_info->bit_depth < 8)
-#endif
- {
- png_uint_32 i;
- png_uint_32 row_width=row_info->width;
-
- switch (row_info->bit_depth)
- {
- case 1:
- {
- png_bytep sp = row + (png_size_t)((row_width - 1) >> 3);
- png_bytep dp = row + (png_size_t)row_width - 1;
- png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07);
- for (i = 0; i < row_width; i++)
- {
- *dp = (png_byte)((*sp >> shift) & 0x01);
- if (shift == 7)
- {
- shift = 0;
- sp--;
- }
- else
- shift++;
-
- dp--;
- }
- break;
- }
- case 2:
- {
-
- png_bytep sp = row + (png_size_t)((row_width - 1) >> 2);
- png_bytep dp = row + (png_size_t)row_width - 1;
- png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
- for (i = 0; i < row_width; i++)
- {
- *dp = (png_byte)((*sp >> shift) & 0x03);
- if (shift == 6)
- {
- shift = 0;
- sp--;
- }
- else
- shift += 2;
-
- dp--;
- }
- break;
- }
- case 4:
- {
- png_bytep sp = row + (png_size_t)((row_width - 1) >> 1);
- png_bytep dp = row + (png_size_t)row_width - 1;
- png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
- for (i = 0; i < row_width; i++)
- {
- *dp = (png_byte)((*sp >> shift) & 0x0f);
- if (shift == 4)
- {
- shift = 0;
- sp--;
- }
- else
- shift = 4;
-
- dp--;
- }
- break;
- }
- }
- row_info->bit_depth = 8;
- row_info->pixel_depth = (png_byte)(8 * row_info->channels);
- row_info->rowbytes = row_width * row_info->channels;
- }
-}
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED)
-/* Reverse the effects of png_do_shift. This routine merely shifts the
- * pixels back to their significant bits values. Thus, if you have
- * a row of bit depth 8, but only 5 are significant, this will shift
- * the values back to 0 through 31.
- */
-void /* PRIVATE */
-png_do_unshift(png_row_infop row_info, png_bytep row, png_color_8p sig_bits)
-{
- png_debug(1, "in png_do_unshift\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL && sig_bits != NULL &&
-#endif
- row_info->color_type != PNG_COLOR_TYPE_PALETTE)
- {
- int shift[4];
- int channels = 0;
- int c;
- png_uint_16 value = 0;
- png_uint_32 row_width = row_info->width;
-
- if (row_info->color_type & PNG_COLOR_MASK_COLOR)
- {
- shift[channels++] = row_info->bit_depth - sig_bits->red;
- shift[channels++] = row_info->bit_depth - sig_bits->green;
- shift[channels++] = row_info->bit_depth - sig_bits->blue;
- }
- else
- {
- shift[channels++] = row_info->bit_depth - sig_bits->gray;
- }
- if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
- {
- shift[channels++] = row_info->bit_depth - sig_bits->alpha;
- }
-
- for (c = 0; c < channels; c++)
- {
- if (shift[c] <= 0)
- shift[c] = 0;
- else
- value = 1;
- }
-
- if (!value)
- return;
-
- switch (row_info->bit_depth)
- {
- case 2:
- {
- png_bytep bp;
- png_uint_32 i;
- png_uint_32 istop = row_info->rowbytes;
-
- for (bp = row, i = 0; i < istop; i++)
- {
- *bp >>= 1;
- *bp++ &= 0x55;
- }
- break;
- }
- case 4:
- {
- png_bytep bp = row;
- png_uint_32 i;
- png_uint_32 istop = row_info->rowbytes;
- png_byte mask = (png_byte)((((int)0xf0 >> shift[0]) & (int)0xf0) |
- (png_byte)((int)0xf >> shift[0]));
-
- for (i = 0; i < istop; i++)
- {
- *bp >>= shift[0];
- *bp++ &= mask;
- }
- break;
- }
- case 8:
- {
- png_bytep bp = row;
- png_uint_32 i;
- png_uint_32 istop = row_width * channels;
-
- for (i = 0; i < istop; i++)
- {
- *bp++ >>= shift[i%channels];
- }
- break;
- }
- case 16:
- {
- png_bytep bp = row;
- png_uint_32 i;
- png_uint_32 istop = channels * row_width;
-
- for (i = 0; i < istop; i++)
- {
- value = (png_uint_16)((*bp << 8) + *(bp + 1));
- value >>= shift[i%channels];
- *bp++ = (png_byte)(value >> 8);
- *bp++ = (png_byte)(value & 0xff);
- }
- break;
- }
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_16_TO_8_SUPPORTED)
-/* chop rows of bit depth 16 down to 8 */
-void /* PRIVATE */
-png_do_chop(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_chop\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL && row_info->bit_depth == 16)
-#else
- if (row_info->bit_depth == 16)
-#endif
- {
- png_bytep sp = row;
- png_bytep dp = row;
- png_uint_32 i;
- png_uint_32 istop = row_info->width * row_info->channels;
-
- for (i = 0; i<istop; i++, sp += 2, dp++)
- {
-#if defined(PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED)
- /* This does a more accurate scaling of the 16-bit color
- * value, rather than a simple low-byte truncation.
- *
- * What the ideal calculation should be:
- * *dp = (((((png_uint_32)(*sp) << 8) |
- * (png_uint_32)(*(sp + 1))) * 255 + 127) / (png_uint_32)65535L;
- *
- * GRR: no, I think this is what it really should be:
- * *dp = (((((png_uint_32)(*sp) << 8) |
- * (png_uint_32)(*(sp + 1))) + 128L) / (png_uint_32)257L;
- *
- * GRR: here's the exact calculation with shifts:
- * temp = (((png_uint_32)(*sp) << 8) | (png_uint_32)(*(sp + 1))) + 128L;
- * *dp = (temp - (temp >> 8)) >> 8;
- *
- * Approximate calculation with shift/add instead of multiply/divide:
- * *dp = ((((png_uint_32)(*sp) << 8) |
- * (png_uint_32)((int)(*(sp + 1)) - *sp)) + 128) >> 8;
- *
- * What we actually do to avoid extra shifting and conversion:
- */
-
- *dp = *sp + ((((int)(*(sp + 1)) - *sp) > 128) ? 1 : 0);
-#else
- /* Simply discard the low order byte */
- *dp = *sp;
-#endif
- }
- row_info->bit_depth = 8;
- row_info->pixel_depth = (png_byte)(8 * row_info->channels);
- row_info->rowbytes = row_info->width * row_info->channels;
- }
-}
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
-void /* PRIVATE */
-png_do_read_swap_alpha(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_read_swap_alpha\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL)
-#endif
- {
- png_uint_32 row_width = row_info->width;
- if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- {
- /* This converts from RGBA to ARGB */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_byte save;
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- save = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = save;
- }
- }
- /* This converts from RRGGBBAA to AARRGGBB */
- else
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_byte save[2];
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- save[0] = *(--sp);
- save[1] = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = save[0];
- *(--dp) = save[1];
- }
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
- /* This converts from GA to AG */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_byte save;
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- save = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = save;
- }
- }
- /* This converts from GGAA to AAGG */
- else
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_byte save[2];
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- save[0] = *(--sp);
- save[1] = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = save[0];
- *(--dp) = save[1];
- }
- }
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
-void /* PRIVATE */
-png_do_read_invert_alpha(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_read_invert_alpha\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL)
-#endif
- {
- png_uint_32 row_width = row_info->width;
- if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- {
- /* This inverts the alpha channel in RGBA */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = (png_byte)(255 - *(--sp));
-
-/* This does nothing:
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- We can replace it with:
-*/
- sp-=3;
- dp=sp;
- }
- }
- /* This inverts the alpha channel in RRGGBBAA */
- else
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = (png_byte)(255 - *(--sp));
- *(--dp) = (png_byte)(255 - *(--sp));
-
-/* This does nothing:
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- We can replace it with:
-*/
- sp-=6;
- dp=sp;
- }
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
- /* This inverts the alpha channel in GA */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = (png_byte)(255 - *(--sp));
- *(--dp) = *(--sp);
- }
- }
- /* This inverts the alpha channel in GGAA */
- else
- {
- png_bytep sp = row + row_info->rowbytes;
- png_bytep dp = sp;
- png_uint_32 i;
-
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = (png_byte)(255 - *(--sp));
- *(--dp) = (png_byte)(255 - *(--sp));
-/*
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
-*/
- sp-=2;
- dp=sp;
- }
- }
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED)
-/* Add filler channel if we have RGB color */
-void /* PRIVATE */
-png_do_read_filler(png_row_infop row_info, png_bytep row,
- png_uint_32 filler, png_uint_32 flags)
-{
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- png_byte hi_filler = (png_byte)((filler>>8) & 0xff);
- png_byte lo_filler = (png_byte)(filler & 0xff);
-
- png_debug(1, "in png_do_read_filler\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- row_info->color_type == PNG_COLOR_TYPE_GRAY)
- {
- if(row_info->bit_depth == 8)
- {
- /* This changes the data from G to GX */
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- png_bytep sp = row + (png_size_t)row_width;
- png_bytep dp = sp + (png_size_t)row_width;
- for (i = 1; i < row_width; i++)
- {
- *(--dp) = lo_filler;
- *(--dp) = *(--sp);
- }
- *(--dp) = lo_filler;
- row_info->channels = 2;
- row_info->pixel_depth = 16;
- row_info->rowbytes = row_width * 2;
- }
- /* This changes the data from G to XG */
- else
- {
- png_bytep sp = row + (png_size_t)row_width;
- png_bytep dp = sp + (png_size_t)row_width;
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = *(--sp);
- *(--dp) = lo_filler;
- }
- row_info->channels = 2;
- row_info->pixel_depth = 16;
- row_info->rowbytes = row_width * 2;
- }
- }
- else if(row_info->bit_depth == 16)
- {
- /* This changes the data from GG to GGXX */
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- png_bytep sp = row + (png_size_t)row_width * 2;
- png_bytep dp = sp + (png_size_t)row_width * 2;
- for (i = 1; i < row_width; i++)
- {
- *(--dp) = hi_filler;
- *(--dp) = lo_filler;
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- }
- *(--dp) = hi_filler;
- *(--dp) = lo_filler;
- row_info->channels = 2;
- row_info->pixel_depth = 32;
- row_info->rowbytes = row_width * 4;
- }
- /* This changes the data from GG to XXGG */
- else
- {
- png_bytep sp = row + (png_size_t)row_width * 2;
- png_bytep dp = sp + (png_size_t)row_width * 2;
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = hi_filler;
- *(--dp) = lo_filler;
- }
- row_info->channels = 2;
- row_info->pixel_depth = 32;
- row_info->rowbytes = row_width * 4;
- }
- }
- } /* COLOR_TYPE == GRAY */
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- {
- if(row_info->bit_depth == 8)
- {
- /* This changes the data from RGB to RGBX */
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- png_bytep sp = row + (png_size_t)row_width * 3;
- png_bytep dp = sp + (png_size_t)row_width;
- for (i = 1; i < row_width; i++)
- {
- *(--dp) = lo_filler;
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- }
- *(--dp) = lo_filler;
- row_info->channels = 4;
- row_info->pixel_depth = 32;
- row_info->rowbytes = row_width * 4;
- }
- /* This changes the data from RGB to XRGB */
- else
- {
- png_bytep sp = row + (png_size_t)row_width * 3;
- png_bytep dp = sp + (png_size_t)row_width;
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = lo_filler;
- }
- row_info->channels = 4;
- row_info->pixel_depth = 32;
- row_info->rowbytes = row_width * 4;
- }
- }
- else if(row_info->bit_depth == 16)
- {
- /* This changes the data from RRGGBB to RRGGBBXX */
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- png_bytep sp = row + (png_size_t)row_width * 6;
- png_bytep dp = sp + (png_size_t)row_width * 2;
- for (i = 1; i < row_width; i++)
- {
- *(--dp) = hi_filler;
- *(--dp) = lo_filler;
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- }
- *(--dp) = hi_filler;
- *(--dp) = lo_filler;
- row_info->channels = 4;
- row_info->pixel_depth = 64;
- row_info->rowbytes = row_width * 8;
- }
- /* This changes the data from RRGGBB to XXRRGGBB */
- else
- {
- png_bytep sp = row + (png_size_t)row_width * 6;
- png_bytep dp = sp + (png_size_t)row_width * 2;
- for (i = 0; i < row_width; i++)
- {
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = *(--sp);
- *(--dp) = hi_filler;
- *(--dp) = lo_filler;
- }
- row_info->channels = 4;
- row_info->pixel_depth = 64;
- row_info->rowbytes = row_width * 8;
- }
- }
- } /* COLOR_TYPE == RGB */
-}
-#endif
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
-/* expand grayscale files to RGB, with or without alpha */
-void /* PRIVATE */
-png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
-{
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- png_debug(1, "in png_do_gray_to_rgb\n");
- if (row_info->bit_depth >= 8 &&
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- !(row_info->color_type & PNG_COLOR_MASK_COLOR))
- {
- if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
- {
- if (row_info->bit_depth == 8)
- {
- png_bytep sp = row + (png_size_t)row_width - 1;
- png_bytep dp = sp + (png_size_t)row_width * 2;
- for (i = 0; i < row_width; i++)
- {
- *(dp--) = *sp;
- *(dp--) = *sp;
- *(dp--) = *(sp--);
- }
- }
- else
- {
- png_bytep sp = row + (png_size_t)row_width * 2 - 1;
- png_bytep dp = sp + (png_size_t)row_width * 4;
- for (i = 0; i < row_width; i++)
- {
- *(dp--) = *sp;
- *(dp--) = *(sp - 1);
- *(dp--) = *sp;
- *(dp--) = *(sp - 1);
- *(dp--) = *(sp--);
- *(dp--) = *(sp--);
- }
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
- if (row_info->bit_depth == 8)
- {
- png_bytep sp = row + (png_size_t)row_width * 2 - 1;
- png_bytep dp = sp + (png_size_t)row_width * 2;
- for (i = 0; i < row_width; i++)
- {
- *(dp--) = *(sp--);
- *(dp--) = *sp;
- *(dp--) = *sp;
- *(dp--) = *(sp--);
- }
- }
- else
- {
- png_bytep sp = row + (png_size_t)row_width * 4 - 1;
- png_bytep dp = sp + (png_size_t)row_width * 4;
- for (i = 0; i < row_width; i++)
- {
- *(dp--) = *(sp--);
- *(dp--) = *(sp--);
- *(dp--) = *sp;
- *(dp--) = *(sp - 1);
- *(dp--) = *sp;
- *(dp--) = *(sp - 1);
- *(dp--) = *(sp--);
- *(dp--) = *(sp--);
- }
- }
- }
- row_info->channels += (png_byte)2;
- row_info->color_type |= PNG_COLOR_MASK_COLOR;
- row_info->pixel_depth = (png_byte)(row_info->channels *
- row_info->bit_depth);
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width);
- }
-}
-#endif
-
-#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-/* reduce RGB files to grayscale, with or without alpha
- * using the equation given in Poynton's ColorFAQ at
- * <http://www.inforamp.net/~poynton/>
- * Copyright (c) 1998-01-04 Charles Poynton poynton at inforamp.net
- *
- * Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
- *
- * We approximate this with
- *
- * Y = 0.21268 * R + 0.7151 * G + 0.07217 * B
- *
- * which can be expressed with integers as
- *
- * Y = (6969 * R + 23434 * G + 2365 * B)/32768
- *
- * The calculation is to be done in a linear colorspace.
- *
- * Other integer coefficents can be used via png_set_rgb_to_gray().
- */
-int /* PRIVATE */
-png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
-
-{
- png_uint_32 i;
-
- png_uint_32 row_width = row_info->width;
- int rgb_error = 0;
-
- png_debug(1, "in png_do_rgb_to_gray\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- (row_info->color_type & PNG_COLOR_MASK_COLOR))
- {
- png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
- png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
- png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff;
-
- if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- {
- if (row_info->bit_depth == 8)
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
- {
- png_bytep sp = row;
- png_bytep dp = row;
-
- for (i = 0; i < row_width; i++)
- {
- png_byte red = png_ptr->gamma_to_1[*(sp++)];
- png_byte green = png_ptr->gamma_to_1[*(sp++)];
- png_byte blue = png_ptr->gamma_to_1[*(sp++)];
- if(red != green || red != blue)
- {
- rgb_error |= 1;
- *(dp++) = png_ptr->gamma_from_1[
- (rc*red+gc*green+bc*blue)>>15];
- }
- else
- *(dp++) = *(sp-1);
- }
- }
- else
-#endif
- {
- png_bytep sp = row;
- png_bytep dp = row;
- for (i = 0; i < row_width; i++)
- {
- png_byte red = *(sp++);
- png_byte green = *(sp++);
- png_byte blue = *(sp++);
- if(red != green || red != blue)
- {
- rgb_error |= 1;
- *(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>15);
- }
- else
- *(dp++) = *(sp-1);
- }
- }
- }
-
- else /* RGB bit_depth == 16 */
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->gamma_16_to_1 != NULL &&
- png_ptr->gamma_16_from_1 != NULL)
- {
- png_bytep sp = row;
- png_bytep dp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 red, green, blue, w;
-
- red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
- green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
- blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
-
- if(red == green && red == blue)
- w = red;
- else
- {
- png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >>
- png_ptr->gamma_shift][red>>8];
- png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >>
- png_ptr->gamma_shift][green>>8];
- png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
- png_ptr->gamma_shift][blue>>8];
- png_uint_16 gray16 = (png_uint_16)((rc*red_1 + gc*green_1
- + bc*blue_1)>>15);
- w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
- png_ptr->gamma_shift][gray16 >> 8];
- rgb_error |= 1;
- }
-
- *(dp++) = (png_byte)((w>>8) & 0xff);
- *(dp++) = (png_byte)(w & 0xff);
- }
- }
- else
-#endif
- {
- png_bytep sp = row;
- png_bytep dp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 red, green, blue, gray16;
-
- red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
- green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
- blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
-
- if(red != green || red != blue)
- rgb_error |= 1;
- gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15);
- *(dp++) = (png_byte)((gray16>>8) & 0xff);
- *(dp++) = (png_byte)(gray16 & 0xff);
- }
- }
- }
- }
- if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- {
- if (row_info->bit_depth == 8)
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
- {
- png_bytep sp = row;
- png_bytep dp = row;
- for (i = 0; i < row_width; i++)
- {
- png_byte red = png_ptr->gamma_to_1[*(sp++)];
- png_byte green = png_ptr->gamma_to_1[*(sp++)];
- png_byte blue = png_ptr->gamma_to_1[*(sp++)];
- if(red != green || red != blue)
- rgb_error |= 1;
- *(dp++) = png_ptr->gamma_from_1
- [(rc*red + gc*green + bc*blue)>>15];
- *(dp++) = *(sp++); /* alpha */
- }
- }
- else
-#endif
- {
- png_bytep sp = row;
- png_bytep dp = row;
- for (i = 0; i < row_width; i++)
- {
- png_byte red = *(sp++);
- png_byte green = *(sp++);
- png_byte blue = *(sp++);
- if(red != green || red != blue)
- rgb_error |= 1;
- *(dp++) = (png_byte)((rc*red + gc*green + bc*blue)>>15);
- *(dp++) = *(sp++); /* alpha */
- }
- }
- }
- else /* RGBA bit_depth == 16 */
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->gamma_16_to_1 != NULL &&
- png_ptr->gamma_16_from_1 != NULL)
- {
- png_bytep sp = row;
- png_bytep dp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 red, green, blue, w;
-
- red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
- green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
- blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2;
-
- if(red == green && red == blue)
- w = red;
- else
- {
- png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >>
- png_ptr->gamma_shift][red>>8];
- png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >>
- png_ptr->gamma_shift][green>>8];
- png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
- png_ptr->gamma_shift][blue>>8];
- png_uint_16 gray16 = (png_uint_16)((rc * red_1
- + gc * green_1 + bc * blue_1)>>15);
- w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
- png_ptr->gamma_shift][gray16 >> 8];
- rgb_error |= 1;
- }
-
- *(dp++) = (png_byte)((w>>8) & 0xff);
- *(dp++) = (png_byte)(w & 0xff);
- *(dp++) = *(sp++); /* alpha */
- *(dp++) = *(sp++);
- }
- }
- else
-#endif
- {
- png_bytep sp = row;
- png_bytep dp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 red, green, blue, gray16;
- red = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2;
- green = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2;
- blue = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2;
- if(red != green || red != blue)
- rgb_error |= 1;
- gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15);
- *(dp++) = (png_byte)((gray16>>8) & 0xff);
- *(dp++) = (png_byte)(gray16 & 0xff);
- *(dp++) = *(sp++); /* alpha */
- *(dp++) = *(sp++);
- }
- }
- }
- }
- row_info->channels -= (png_byte)2;
- row_info->color_type &= ~PNG_COLOR_MASK_COLOR;
- row_info->pixel_depth = (png_byte)(row_info->channels *
- row_info->bit_depth);
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width);
- }
- return rgb_error;
-}
-#endif
-
-/* Build a grayscale palette. Palette is assumed to be 1 << bit_depth
- * large of png_color. This lets grayscale images be treated as
- * paletted. Most useful for gamma correction and simplification
- * of code.
- */
-void PNGAPI
-png_build_grayscale_palette(int bit_depth, png_colorp palette)
-{
- int num_palette;
- int color_inc;
- int i;
- int v;
-
- png_debug(1, "in png_do_build_grayscale_palette\n");
- if (palette == NULL)
- return;
-
- switch (bit_depth)
- {
- case 1:
- num_palette = 2;
- color_inc = 0xff;
- break;
- case 2:
- num_palette = 4;
- color_inc = 0x55;
- break;
- case 4:
- num_palette = 16;
- color_inc = 0x11;
- break;
- case 8:
- num_palette = 256;
- color_inc = 1;
- break;
- default:
- num_palette = 0;
- color_inc = 0;
- break;
- }
-
- for (i = 0, v = 0; i < num_palette; i++, v += color_inc)
- {
- palette[i].red = (png_byte)v;
- palette[i].green = (png_byte)v;
- palette[i].blue = (png_byte)v;
- }
-}
-
-/* This function is currently unused. Do we really need it? */
-#if defined(PNG_READ_DITHER_SUPPORTED) && defined(PNG_CORRECT_PALETTE_SUPPORTED)
-void /* PRIVATE */
-png_correct_palette(png_structp png_ptr, png_colorp palette,
- int num_palette)
-{
- png_debug(1, "in png_correct_palette\n");
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
- defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
- if (png_ptr->transformations & (PNG_GAMMA | PNG_BACKGROUND))
- {
- png_color back, back_1;
-
- if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
- {
- back.red = png_ptr->gamma_table[png_ptr->background.red];
- back.green = png_ptr->gamma_table[png_ptr->background.green];
- back.blue = png_ptr->gamma_table[png_ptr->background.blue];
-
- back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
- back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
- back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
- }
- else
- {
- double g;
-
- g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma);
-
- if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN ||
- fabs(g - 1.0) < PNG_GAMMA_THRESHOLD)
- {
- back.red = png_ptr->background.red;
- back.green = png_ptr->background.green;
- back.blue = png_ptr->background.blue;
- }
- else
- {
- back.red =
- (png_byte)(pow((double)png_ptr->background.red/255, g) *
- 255.0 + 0.5);
- back.green =
- (png_byte)(pow((double)png_ptr->background.green/255, g) *
- 255.0 + 0.5);
- back.blue =
- (png_byte)(pow((double)png_ptr->background.blue/255, g) *
- 255.0 + 0.5);
- }
-
- g = 1.0 / png_ptr->background_gamma;
-
- back_1.red =
- (png_byte)(pow((double)png_ptr->background.red/255, g) *
- 255.0 + 0.5);
- back_1.green =
- (png_byte)(pow((double)png_ptr->background.green/255, g) *
- 255.0 + 0.5);
- back_1.blue =
- (png_byte)(pow((double)png_ptr->background.blue/255, g) *
- 255.0 + 0.5);
- }
-
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- png_uint_32 i;
-
- for (i = 0; i < (png_uint_32)num_palette; i++)
- {
- if (i < png_ptr->num_trans && png_ptr->trans[i] == 0)
- {
- palette[i] = back;
- }
- else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff)
- {
- png_byte v, w;
-
- v = png_ptr->gamma_to_1[png_ptr->palette[i].red];
- png_composite(w, v, png_ptr->trans[i], back_1.red);
- palette[i].red = png_ptr->gamma_from_1[w];
-
- v = png_ptr->gamma_to_1[png_ptr->palette[i].green];
- png_composite(w, v, png_ptr->trans[i], back_1.green);
- palette[i].green = png_ptr->gamma_from_1[w];
-
- v = png_ptr->gamma_to_1[png_ptr->palette[i].blue];
- png_composite(w, v, png_ptr->trans[i], back_1.blue);
- palette[i].blue = png_ptr->gamma_from_1[w];
- }
- else
- {
- palette[i].red = png_ptr->gamma_table[palette[i].red];
- palette[i].green = png_ptr->gamma_table[palette[i].green];
- palette[i].blue = png_ptr->gamma_table[palette[i].blue];
- }
- }
- }
- else
- {
- int i;
-
- for (i = 0; i < num_palette; i++)
- {
- if (palette[i].red == (png_byte)png_ptr->trans_values.gray)
- {
- palette[i] = back;
- }
- else
- {
- palette[i].red = png_ptr->gamma_table[palette[i].red];
- palette[i].green = png_ptr->gamma_table[palette[i].green];
- palette[i].blue = png_ptr->gamma_table[palette[i].blue];
- }
- }
- }
- }
- else
-#endif
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (png_ptr->transformations & PNG_GAMMA)
- {
- int i;
-
- for (i = 0; i < num_palette; i++)
- {
- palette[i].red = png_ptr->gamma_table[palette[i].red];
- palette[i].green = png_ptr->gamma_table[palette[i].green];
- palette[i].blue = png_ptr->gamma_table[palette[i].blue];
- }
- }
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- else
-#endif
-#endif
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
- if (png_ptr->transformations & PNG_BACKGROUND)
- {
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- png_color back;
-
- back.red = (png_byte)png_ptr->background.red;
- back.green = (png_byte)png_ptr->background.green;
- back.blue = (png_byte)png_ptr->background.blue;
-
- for (i = 0; i < (int)png_ptr->num_trans; i++)
- {
- if (png_ptr->trans[i] == 0)
- {
- palette[i].red = back.red;
- palette[i].green = back.green;
- palette[i].blue = back.blue;
- }
- else if (png_ptr->trans[i] != 0xff)
- {
- png_composite(palette[i].red, png_ptr->palette[i].red,
- png_ptr->trans[i], back.red);
- png_composite(palette[i].green, png_ptr->palette[i].green,
- png_ptr->trans[i], back.green);
- png_composite(palette[i].blue, png_ptr->palette[i].blue,
- png_ptr->trans[i], back.blue);
- }
- }
- }
- else /* assume grayscale palette (what else could it be?) */
- {
- int i;
-
- for (i = 0; i < num_palette; i++)
- {
- if (i == (png_byte)png_ptr->trans_values.gray)
- {
- palette[i].red = (png_byte)png_ptr->background.red;
- palette[i].green = (png_byte)png_ptr->background.green;
- palette[i].blue = (png_byte)png_ptr->background.blue;
- }
- }
- }
- }
-#endif
-}
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED)
-/* Replace any alpha or transparency with the supplied background color.
- * "background" is already in the screen gamma, while "background_1" is
- * at a gamma of 1.0. Paletted files have already been taken care of.
- */
-void /* PRIVATE */
-png_do_background(png_row_infop row_info, png_bytep row,
- png_color_16p trans_values, png_color_16p background
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- , png_color_16p background_1,
- png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1,
- png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1,
- png_uint_16pp gamma_16_to_1, int gamma_shift
-#endif
- )
-{
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width=row_info->width;
- int shift;
-
- png_debug(1, "in png_do_background\n");
- if (background != NULL &&
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- (!(row_info->color_type & PNG_COLOR_MASK_ALPHA) ||
- (row_info->color_type != PNG_COLOR_TYPE_PALETTE && trans_values)))
- {
- switch (row_info->color_type)
- {
- case PNG_COLOR_TYPE_GRAY:
- {
- switch (row_info->bit_depth)
- {
- case 1:
- {
- sp = row;
- shift = 7;
- for (i = 0; i < row_width; i++)
- {
- if ((png_uint_16)((*sp >> shift) & 0x01)
- == trans_values->gray)
- {
- *sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
- *sp |= (png_byte)(background->gray << shift);
- }
- if (!shift)
- {
- shift = 7;
- sp++;
- }
- else
- shift--;
- }
- break;
- }
- case 2:
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_table != NULL)
- {
- sp = row;
- shift = 6;
- for (i = 0; i < row_width; i++)
- {
- if ((png_uint_16)((*sp >> shift) & 0x03)
- == trans_values->gray)
- {
- *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
- *sp |= (png_byte)(background->gray << shift);
- }
- else
- {
- png_byte p = (png_byte)((*sp >> shift) & 0x03);
- png_byte g = (png_byte)((gamma_table [p | (p << 2) |
- (p << 4) | (p << 6)] >> 6) & 0x03);
- *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
- *sp |= (png_byte)(g << shift);
- }
- if (!shift)
- {
- shift = 6;
- sp++;
- }
- else
- shift -= 2;
- }
- }
- else
-#endif
- {
- sp = row;
- shift = 6;
- for (i = 0; i < row_width; i++)
- {
- if ((png_uint_16)((*sp >> shift) & 0x03)
- == trans_values->gray)
- {
- *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
- *sp |= (png_byte)(background->gray << shift);
- }
- if (!shift)
- {
- shift = 6;
- sp++;
- }
- else
- shift -= 2;
- }
- }
- break;
- }
- case 4:
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_table != NULL)
- {
- sp = row;
- shift = 4;
- for (i = 0; i < row_width; i++)
- {
- if ((png_uint_16)((*sp >> shift) & 0x0f)
- == trans_values->gray)
- {
- *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
- *sp |= (png_byte)(background->gray << shift);
- }
- else
- {
- png_byte p = (png_byte)((*sp >> shift) & 0x0f);
- png_byte g = (png_byte)((gamma_table[p |
- (p << 4)] >> 4) & 0x0f);
- *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
- *sp |= (png_byte)(g << shift);
- }
- if (!shift)
- {
- shift = 4;
- sp++;
- }
- else
- shift -= 4;
- }
- }
- else
-#endif
- {
- sp = row;
- shift = 4;
- for (i = 0; i < row_width; i++)
- {
- if ((png_uint_16)((*sp >> shift) & 0x0f)
- == trans_values->gray)
- {
- *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
- *sp |= (png_byte)(background->gray << shift);
- }
- if (!shift)
- {
- shift = 4;
- sp++;
- }
- else
- shift -= 4;
- }
- }
- break;
- }
- case 8:
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_table != NULL)
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp++)
- {
- if (*sp == trans_values->gray)
- {
- *sp = (png_byte)background->gray;
- }
- else
- {
- *sp = gamma_table[*sp];
- }
- }
- }
- else
-#endif
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp++)
- {
- if (*sp == trans_values->gray)
- {
- *sp = (png_byte)background->gray;
- }
- }
- }
- break;
- }
- case 16:
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_16 != NULL)
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp += 2)
- {
- png_uint_16 v;
-
- v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- if (v == trans_values->gray)
- {
- /* background is already in screen gamma */
- *sp = (png_byte)((background->gray >> 8) & 0xff);
- *(sp + 1) = (png_byte)(background->gray & 0xff);
- }
- else
- {
- v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- }
- }
- }
- else
-#endif
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp += 2)
- {
- png_uint_16 v;
-
- v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- if (v == trans_values->gray)
- {
- *sp = (png_byte)((background->gray >> 8) & 0xff);
- *(sp + 1) = (png_byte)(background->gray & 0xff);
- }
- }
- }
- break;
- }
- }
- break;
- }
- case PNG_COLOR_TYPE_RGB:
- {
- if (row_info->bit_depth == 8)
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_table != NULL)
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp += 3)
- {
- if (*sp == trans_values->red &&
- *(sp + 1) == trans_values->green &&
- *(sp + 2) == trans_values->blue)
- {
- *sp = (png_byte)background->red;
- *(sp + 1) = (png_byte)background->green;
- *(sp + 2) = (png_byte)background->blue;
- }
- else
- {
- *sp = gamma_table[*sp];
- *(sp + 1) = gamma_table[*(sp + 1)];
- *(sp + 2) = gamma_table[*(sp + 2)];
- }
- }
- }
- else
-#endif
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp += 3)
- {
- if (*sp == trans_values->red &&
- *(sp + 1) == trans_values->green &&
- *(sp + 2) == trans_values->blue)
- {
- *sp = (png_byte)background->red;
- *(sp + 1) = (png_byte)background->green;
- *(sp + 2) = (png_byte)background->blue;
- }
- }
- }
- }
- else /* if (row_info->bit_depth == 16) */
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_16 != NULL)
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp += 6)
- {
- png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3));
- png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5));
- if (r == trans_values->red && g == trans_values->green &&
- b == trans_values->blue)
- {
- /* background is already in screen gamma */
- *sp = (png_byte)((background->red >> 8) & 0xff);
- *(sp + 1) = (png_byte)(background->red & 0xff);
- *(sp + 2) = (png_byte)((background->green >> 8) & 0xff);
- *(sp + 3) = (png_byte)(background->green & 0xff);
- *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff);
- *(sp + 5) = (png_byte)(background->blue & 0xff);
- }
- else
- {
- png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];
- *(sp + 2) = (png_byte)((v >> 8) & 0xff);
- *(sp + 3) = (png_byte)(v & 0xff);
- v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];
- *(sp + 4) = (png_byte)((v >> 8) & 0xff);
- *(sp + 5) = (png_byte)(v & 0xff);
- }
- }
- }
- else
-#endif
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp += 6)
- {
- png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp+1));
- png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3));
- png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5));
-
- if (r == trans_values->red && g == trans_values->green &&
- b == trans_values->blue)
- {
- *sp = (png_byte)((background->red >> 8) & 0xff);
- *(sp + 1) = (png_byte)(background->red & 0xff);
- *(sp + 2) = (png_byte)((background->green >> 8) & 0xff);
- *(sp + 3) = (png_byte)(background->green & 0xff);
- *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff);
- *(sp + 5) = (png_byte)(background->blue & 0xff);
- }
- }
- }
- }
- break;
- }
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- {
- if (row_info->bit_depth == 8)
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
- gamma_table != NULL)
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 2, dp++)
- {
- png_uint_16 a = *(sp + 1);
-
- if (a == 0xff)
- {
- *dp = gamma_table[*sp];
- }
- else if (a == 0)
- {
- /* background is already in screen gamma */
- *dp = (png_byte)background->gray;
- }
- else
- {
- png_byte v, w;
-
- v = gamma_to_1[*sp];
- png_composite(w, v, a, background_1->gray);
- *dp = gamma_from_1[w];
- }
- }
- }
- else
-#endif
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 2, dp++)
- {
- png_byte a = *(sp + 1);
-
- if (a == 0xff)
- {
- *dp = *sp;
- }
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- else if (a == 0)
- {
- *dp = (png_byte)background->gray;
- }
- else
- {
- png_composite(*dp, *sp, a, background_1->gray);
- }
-#else
- *dp = (png_byte)background->gray;
-#endif
- }
- }
- }
- else /* if (png_ptr->bit_depth == 16) */
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
- gamma_16_to_1 != NULL)
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 4, dp += 2)
- {
- png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3));
-
- if (a == (png_uint_16)0xffff)
- {
- png_uint_16 v;
-
- v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
- *dp = (png_byte)((v >> 8) & 0xff);
- *(dp + 1) = (png_byte)(v & 0xff);
- }
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- else if (a == 0)
-#else
- else
-#endif
- {
- /* background is already in screen gamma */
- *dp = (png_byte)((background->gray >> 8) & 0xff);
- *(dp + 1) = (png_byte)(background->gray & 0xff);
- }
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- else
- {
- png_uint_16 g, v, w;
-
- g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
- png_composite_16(v, g, a, background_1->gray);
- w = gamma_16_from_1[(v&0xff) >> gamma_shift][v >> 8];
- *dp = (png_byte)((w >> 8) & 0xff);
- *(dp + 1) = (png_byte)(w & 0xff);
- }
-#endif
- }
- }
- else
-#endif
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 4, dp += 2)
- {
- png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3));
- if (a == (png_uint_16)0xffff)
- {
- png_memcpy(dp, sp, 2);
- }
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- else if (a == 0)
-#else
- else
-#endif
- {
- *dp = (png_byte)((background->gray >> 8) & 0xff);
- *(dp + 1) = (png_byte)(background->gray & 0xff);
- }
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- else
- {
- png_uint_16 g, v;
-
- g = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- png_composite_16(v, g, a, background_1->gray);
- *dp = (png_byte)((v >> 8) & 0xff);
- *(dp + 1) = (png_byte)(v & 0xff);
- }
-#endif
- }
- }
- }
- break;
- }
- case PNG_COLOR_TYPE_RGB_ALPHA:
- {
- if (row_info->bit_depth == 8)
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
- gamma_table != NULL)
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 4, dp += 3)
- {
- png_byte a = *(sp + 3);
-
- if (a == 0xff)
- {
- *dp = gamma_table[*sp];
- *(dp + 1) = gamma_table[*(sp + 1)];
- *(dp + 2) = gamma_table[*(sp + 2)];
- }
- else if (a == 0)
- {
- /* background is already in screen gamma */
- *dp = (png_byte)background->red;
- *(dp + 1) = (png_byte)background->green;
- *(dp + 2) = (png_byte)background->blue;
- }
- else
- {
- png_byte v, w;
-
- v = gamma_to_1[*sp];
- png_composite(w, v, a, background_1->red);
- *dp = gamma_from_1[w];
- v = gamma_to_1[*(sp + 1)];
- png_composite(w, v, a, background_1->green);
- *(dp + 1) = gamma_from_1[w];
- v = gamma_to_1[*(sp + 2)];
- png_composite(w, v, a, background_1->blue);
- *(dp + 2) = gamma_from_1[w];
- }
- }
- }
- else
-#endif
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 4, dp += 3)
- {
- png_byte a = *(sp + 3);
-
- if (a == 0xff)
- {
- *dp = *sp;
- *(dp + 1) = *(sp + 1);
- *(dp + 2) = *(sp + 2);
- }
- else if (a == 0)
- {
- *dp = (png_byte)background->red;
- *(dp + 1) = (png_byte)background->green;
- *(dp + 2) = (png_byte)background->blue;
- }
- else
- {
- png_composite(*dp, *sp, a, background->red);
- png_composite(*(dp + 1), *(sp + 1), a,
- background->green);
- png_composite(*(dp + 2), *(sp + 2), a,
- background->blue);
- }
- }
- }
- }
- else /* if (row_info->bit_depth == 16) */
- {
-#if defined(PNG_READ_GAMMA_SUPPORTED)
- if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
- gamma_16_to_1 != NULL)
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 8, dp += 6)
- {
- png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
- << 8) + (png_uint_16)(*(sp + 7)));
- if (a == (png_uint_16)0xffff)
- {
- png_uint_16 v;
-
- v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
- *dp = (png_byte)((v >> 8) & 0xff);
- *(dp + 1) = (png_byte)(v & 0xff);
- v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];
- *(dp + 2) = (png_byte)((v >> 8) & 0xff);
- *(dp + 3) = (png_byte)(v & 0xff);
- v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];
- *(dp + 4) = (png_byte)((v >> 8) & 0xff);
- *(dp + 5) = (png_byte)(v & 0xff);
- }
- else if (a == 0)
- {
- /* background is already in screen gamma */
- *dp = (png_byte)((background->red >> 8) & 0xff);
- *(dp + 1) = (png_byte)(background->red & 0xff);
- *(dp + 2) = (png_byte)((background->green >> 8) & 0xff);
- *(dp + 3) = (png_byte)(background->green & 0xff);
- *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff);
- *(dp + 5) = (png_byte)(background->blue & 0xff);
- }
- else
- {
- png_uint_16 v, w, x;
-
- v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
- png_composite_16(w, v, a, background_1->red);
- x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8];
- *dp = (png_byte)((x >> 8) & 0xff);
- *(dp + 1) = (png_byte)(x & 0xff);
- v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)];
- png_composite_16(w, v, a, background_1->green);
- x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8];
- *(dp + 2) = (png_byte)((x >> 8) & 0xff);
- *(dp + 3) = (png_byte)(x & 0xff);
- v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)];
- png_composite_16(w, v, a, background_1->blue);
- x = gamma_16_from_1[(w & 0xff) >> gamma_shift][w >> 8];
- *(dp + 4) = (png_byte)((x >> 8) & 0xff);
- *(dp + 5) = (png_byte)(x & 0xff);
- }
- }
- }
- else
-#endif
- {
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++, sp += 8, dp += 6)
- {
- png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
- << 8) + (png_uint_16)(*(sp + 7)));
- if (a == (png_uint_16)0xffff)
- {
- png_memcpy(dp, sp, 6);
- }
- else if (a == 0)
- {
- *dp = (png_byte)((background->red >> 8) & 0xff);
- *(dp + 1) = (png_byte)(background->red & 0xff);
- *(dp + 2) = (png_byte)((background->green >> 8) & 0xff);
- *(dp + 3) = (png_byte)(background->green & 0xff);
- *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff);
- *(dp + 5) = (png_byte)(background->blue & 0xff);
- }
- else
- {
- png_uint_16 v;
-
- png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
- png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
- + *(sp + 3));
- png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
- + *(sp + 5));
-
- png_composite_16(v, r, a, background->red);
- *dp = (png_byte)((v >> 8) & 0xff);
- *(dp + 1) = (png_byte)(v & 0xff);
- png_composite_16(v, g, a, background->green);
- *(dp + 2) = (png_byte)((v >> 8) & 0xff);
- *(dp + 3) = (png_byte)(v & 0xff);
- png_composite_16(v, b, a, background->blue);
- *(dp + 4) = (png_byte)((v >> 8) & 0xff);
- *(dp + 5) = (png_byte)(v & 0xff);
- }
- }
- }
- }
- break;
- }
- }
-
- if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
- {
- row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;
- row_info->channels--;
- row_info->pixel_depth = (png_byte)(row_info->channels *
- row_info->bit_depth);
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width);
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED)
-/* Gamma correct the image, avoiding the alpha channel. Make sure
- * you do this after you deal with the transparency issue on grayscale
- * or RGB images. If your bit depth is 8, use gamma_table, if it
- * is 16, use gamma_16_table and gamma_shift. Build these with
- * build_gamma_table().
- */
-void /* PRIVATE */
-png_do_gamma(png_row_infop row_info, png_bytep row,
- png_bytep gamma_table, png_uint_16pp gamma_16_table,
- int gamma_shift)
-{
- png_bytep sp;
- png_uint_32 i;
- png_uint_32 row_width=row_info->width;
-
- png_debug(1, "in png_do_gamma\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- ((row_info->bit_depth <= 8 && gamma_table != NULL) ||
- (row_info->bit_depth == 16 && gamma_16_table != NULL)))
- {
- switch (row_info->color_type)
- {
- case PNG_COLOR_TYPE_RGB:
- {
- if (row_info->bit_depth == 8)
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- *sp = gamma_table[*sp];
- sp++;
- *sp = gamma_table[*sp];
- sp++;
- *sp = gamma_table[*sp];
- sp++;
- }
- }
- else /* if (row_info->bit_depth == 16) */
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 v;
-
- v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 2;
- v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 2;
- v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 2;
- }
- }
- break;
- }
- case PNG_COLOR_TYPE_RGB_ALPHA:
- {
- if (row_info->bit_depth == 8)
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- *sp = gamma_table[*sp];
- sp++;
- *sp = gamma_table[*sp];
- sp++;
- *sp = gamma_table[*sp];
- sp++;
- sp++;
- }
- }
- else /* if (row_info->bit_depth == 16) */
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 2;
- v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 2;
- v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 4;
- }
- }
- break;
- }
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- {
- if (row_info->bit_depth == 8)
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- *sp = gamma_table[*sp];
- sp += 2;
- }
- }
- else /* if (row_info->bit_depth == 16) */
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 4;
- }
- }
- break;
- }
- case PNG_COLOR_TYPE_GRAY:
- {
- if (row_info->bit_depth == 2)
- {
- sp = row;
- for (i = 0; i < row_width; i += 4)
- {
- int a = *sp & 0xc0;
- int b = *sp & 0x30;
- int c = *sp & 0x0c;
- int d = *sp & 0x03;
-
- *sp = (png_byte)(
- ((((int)gamma_table[a|(a>>2)|(a>>4)|(a>>6)]) ) & 0xc0)|
- ((((int)gamma_table[(b<<2)|b|(b>>2)|(b>>4)])>>2) & 0x30)|
- ((((int)gamma_table[(c<<4)|(c<<2)|c|(c>>2)])>>4) & 0x0c)|
- ((((int)gamma_table[(d<<6)|(d<<4)|(d<<2)|d])>>6) ));
- sp++;
- }
- }
- if (row_info->bit_depth == 4)
- {
- sp = row;
- for (i = 0; i < row_width; i += 2)
- {
- int msb = *sp & 0xf0;
- int lsb = *sp & 0x0f;
-
- *sp = (png_byte)((((int)gamma_table[msb | (msb >> 4)]) & 0xf0)
- | (((int)gamma_table[(lsb << 4) | lsb]) >> 4));
- sp++;
- }
- }
- else if (row_info->bit_depth == 8)
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- *sp = gamma_table[*sp];
- sp++;
- }
- }
- else if (row_info->bit_depth == 16)
- {
- sp = row;
- for (i = 0; i < row_width; i++)
- {
- png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
- *sp = (png_byte)((v >> 8) & 0xff);
- *(sp + 1) = (png_byte)(v & 0xff);
- sp += 2;
- }
- }
- break;
- }
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_EXPAND_SUPPORTED)
-/* Expands a palette row to an RGB or RGBA row depending
- * upon whether you supply trans and num_trans.
- */
-void /* PRIVATE */
-png_do_expand_palette(png_row_infop row_info, png_bytep row,
- png_colorp palette, png_bytep trans, int num_trans)
-{
- int shift, value;
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width=row_info->width;
-
- png_debug(1, "in png_do_expand_palette\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- row_info->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (row_info->bit_depth < 8)
- {
- switch (row_info->bit_depth)
- {
- case 1:
- {
- sp = row + (png_size_t)((row_width - 1) >> 3);
- dp = row + (png_size_t)row_width - 1;
- shift = 7 - (int)((row_width + 7) & 0x07);
- for (i = 0; i < row_width; i++)
- {
- if ((*sp >> shift) & 0x01)
- *dp = 1;
- else
- *dp = 0;
- if (shift == 7)
- {
- shift = 0;
- sp--;
- }
- else
- shift++;
-
- dp--;
- }
- break;
- }
- case 2:
- {
- sp = row + (png_size_t)((row_width - 1) >> 2);
- dp = row + (png_size_t)row_width - 1;
- shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
- for (i = 0; i < row_width; i++)
- {
- value = (*sp >> shift) & 0x03;
- *dp = (png_byte)value;
- if (shift == 6)
- {
- shift = 0;
- sp--;
- }
- else
- shift += 2;
-
- dp--;
- }
- break;
- }
- case 4:
- {
- sp = row + (png_size_t)((row_width - 1) >> 1);
- dp = row + (png_size_t)row_width - 1;
- shift = (int)((row_width & 0x01) << 2);
- for (i = 0; i < row_width; i++)
- {
- value = (*sp >> shift) & 0x0f;
- *dp = (png_byte)value;
- if (shift == 4)
- {
- shift = 0;
- sp--;
- }
- else
- shift += 4;
-
- dp--;
- }
- break;
- }
- }
- row_info->bit_depth = 8;
- row_info->pixel_depth = 8;
- row_info->rowbytes = row_width;
- }
- switch (row_info->bit_depth)
- {
- case 8:
- {
- if (trans != NULL)
- {
- sp = row + (png_size_t)row_width - 1;
- dp = row + (png_size_t)(row_width << 2) - 1;
-
- for (i = 0; i < row_width; i++)
- {
- if ((int)(*sp) >= num_trans)
- *dp-- = 0xff;
- else
- *dp-- = trans[*sp];
- *dp-- = palette[*sp].blue;
- *dp-- = palette[*sp].green;
- *dp-- = palette[*sp].red;
- sp--;
- }
- row_info->bit_depth = 8;
- row_info->pixel_depth = 32;
- row_info->rowbytes = row_width * 4;
- row_info->color_type = 6;
- row_info->channels = 4;
- }
- else
- {
- sp = row + (png_size_t)row_width - 1;
- dp = row + (png_size_t)(row_width * 3) - 1;
-
- for (i = 0; i < row_width; i++)
- {
- *dp-- = palette[*sp].blue;
- *dp-- = palette[*sp].green;
- *dp-- = palette[*sp].red;
- sp--;
- }
- row_info->bit_depth = 8;
- row_info->pixel_depth = 24;
- row_info->rowbytes = row_width * 3;
- row_info->color_type = 2;
- row_info->channels = 3;
- }
- break;
- }
- }
- }
-}
-
-/* If the bit depth < 8, it is expanded to 8. Also, if the already
- * expanded transparency value is supplied, an alpha channel is built.
- */
-void /* PRIVATE */
-png_do_expand(png_row_infop row_info, png_bytep row,
- png_color_16p trans_value)
-{
- int shift, value;
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width=row_info->width;
-
- png_debug(1, "in png_do_expand\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL)
-#endif
- {
- if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
- {
- png_uint_16 gray = (png_uint_16)(trans_value ? trans_value->gray : 0);
-
- if (row_info->bit_depth < 8)
- {
- switch (row_info->bit_depth)
- {
- case 1:
- {
- gray = (png_uint_16)((gray&0x01)*0xff);
- sp = row + (png_size_t)((row_width - 1) >> 3);
- dp = row + (png_size_t)row_width - 1;
- shift = 7 - (int)((row_width + 7) & 0x07);
- for (i = 0; i < row_width; i++)
- {
- if ((*sp >> shift) & 0x01)
- *dp = 0xff;
- else
- *dp = 0;
- if (shift == 7)
- {
- shift = 0;
- sp--;
- }
- else
- shift++;
-
- dp--;
- }
- break;
- }
- case 2:
- {
- gray = (png_uint_16)((gray&0x03)*0x55);
- sp = row + (png_size_t)((row_width - 1) >> 2);
- dp = row + (png_size_t)row_width - 1;
- shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
- for (i = 0; i < row_width; i++)
- {
- value = (*sp >> shift) & 0x03;
- *dp = (png_byte)(value | (value << 2) | (value << 4) |
- (value << 6));
- if (shift == 6)
- {
- shift = 0;
- sp--;
- }
- else
- shift += 2;
-
- dp--;
- }
- break;
- }
- case 4:
- {
- gray = (png_uint_16)((gray&0x0f)*0x11);
- sp = row + (png_size_t)((row_width - 1) >> 1);
- dp = row + (png_size_t)row_width - 1;
- shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
- for (i = 0; i < row_width; i++)
- {
- value = (*sp >> shift) & 0x0f;
- *dp = (png_byte)(value | (value << 4));
- if (shift == 4)
- {
- shift = 0;
- sp--;
- }
- else
- shift = 4;
-
- dp--;
- }
- break;
- }
- }
- row_info->bit_depth = 8;
- row_info->pixel_depth = 8;
- row_info->rowbytes = row_width;
- }
-
- if (trans_value != NULL)
- {
- if (row_info->bit_depth == 8)
- {
- gray = gray & 0xff;
- sp = row + (png_size_t)row_width - 1;
- dp = row + (png_size_t)(row_width << 1) - 1;
- for (i = 0; i < row_width; i++)
- {
- if (*sp == gray)
- *dp-- = 0;
- else
- *dp-- = 0xff;
- *dp-- = *sp--;
- }
- }
- else if (row_info->bit_depth == 16)
- {
- png_byte gray_high = (gray >> 8) & 0xff;
- png_byte gray_low = gray & 0xff;
- sp = row + row_info->rowbytes - 1;
- dp = row + (row_info->rowbytes << 1) - 1;
- for (i = 0; i < row_width; i++)
- {
- if (*(sp-1) == gray_high && *(sp) == gray_low)
- {
- *dp-- = 0;
- *dp-- = 0;
- }
- else
- {
- *dp-- = 0xff;
- *dp-- = 0xff;
- }
- *dp-- = *sp--;
- *dp-- = *sp--;
- }
- }
- row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
- row_info->channels = 2;
- row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1);
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
- row_width);
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB && trans_value)
- {
- if (row_info->bit_depth == 8)
- {
- png_byte red = trans_value->red & 0xff;
- png_byte green = trans_value->green & 0xff;
- png_byte blue = trans_value->blue & 0xff;
- sp = row + (png_size_t)row_info->rowbytes - 1;
- dp = row + (png_size_t)(row_width << 2) - 1;
- for (i = 0; i < row_width; i++)
- {
- if (*(sp - 2) == red && *(sp - 1) == green && *(sp) == blue)
- *dp-- = 0;
- else
- *dp-- = 0xff;
- *dp-- = *sp--;
- *dp-- = *sp--;
- *dp-- = *sp--;
- }
- }
- else if (row_info->bit_depth == 16)
- {
- png_byte red_high = (trans_value->red >> 8) & 0xff;
- png_byte green_high = (trans_value->green >> 8) & 0xff;
- png_byte blue_high = (trans_value->blue >> 8) & 0xff;
- png_byte red_low = trans_value->red & 0xff;
- png_byte green_low = trans_value->green & 0xff;
- png_byte blue_low = trans_value->blue & 0xff;
- sp = row + row_info->rowbytes - 1;
- dp = row + (png_size_t)(row_width << 3) - 1;
- for (i = 0; i < row_width; i++)
- {
- if (*(sp - 5) == red_high &&
- *(sp - 4) == red_low &&
- *(sp - 3) == green_high &&
- *(sp - 2) == green_low &&
- *(sp - 1) == blue_high &&
- *(sp ) == blue_low)
- {
- *dp-- = 0;
- *dp-- = 0;
- }
- else
- {
- *dp-- = 0xff;
- *dp-- = 0xff;
- }
- *dp-- = *sp--;
- *dp-- = *sp--;
- *dp-- = *sp--;
- *dp-- = *sp--;
- *dp-- = *sp--;
- *dp-- = *sp--;
- }
- }
- row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- row_info->channels = 4;
- row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2);
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width);
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_DITHER_SUPPORTED)
-void /* PRIVATE */
-png_do_dither(png_row_infop row_info, png_bytep row,
- png_bytep palette_lookup, png_bytep dither_lookup)
-{
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width=row_info->width;
-
- png_debug(1, "in png_do_dither\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL)
-#endif
- {
- if (row_info->color_type == PNG_COLOR_TYPE_RGB &&
- palette_lookup && row_info->bit_depth == 8)
- {
- int r, g, b, p;
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++)
- {
- r = *sp++;
- g = *sp++;
- b = *sp++;
-
- /* this looks real messy, but the compiler will reduce
- it down to a reasonable formula. For example, with
- 5 bits per color, we get:
- p = (((r >> 3) & 0x1f) << 10) |
- (((g >> 3) & 0x1f) << 5) |
- ((b >> 3) & 0x1f);
- */
- p = (((r >> (8 - PNG_DITHER_RED_BITS)) &
- ((1 << PNG_DITHER_RED_BITS) - 1)) <<
- (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) |
- (((g >> (8 - PNG_DITHER_GREEN_BITS)) &
- ((1 << PNG_DITHER_GREEN_BITS) - 1)) <<
- (PNG_DITHER_BLUE_BITS)) |
- ((b >> (8 - PNG_DITHER_BLUE_BITS)) &
- ((1 << PNG_DITHER_BLUE_BITS) - 1));
-
- *dp++ = palette_lookup[p];
- }
- row_info->color_type = PNG_COLOR_TYPE_PALETTE;
- row_info->channels = 1;
- row_info->pixel_depth = row_info->bit_depth;
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width);
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
- palette_lookup != NULL && row_info->bit_depth == 8)
- {
- int r, g, b, p;
- sp = row;
- dp = row;
- for (i = 0; i < row_width; i++)
- {
- r = *sp++;
- g = *sp++;
- b = *sp++;
- sp++;
-
- p = (((r >> (8 - PNG_DITHER_RED_BITS)) &
- ((1 << PNG_DITHER_RED_BITS) - 1)) <<
- (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) |
- (((g >> (8 - PNG_DITHER_GREEN_BITS)) &
- ((1 << PNG_DITHER_GREEN_BITS) - 1)) <<
- (PNG_DITHER_BLUE_BITS)) |
- ((b >> (8 - PNG_DITHER_BLUE_BITS)) &
- ((1 << PNG_DITHER_BLUE_BITS) - 1));
-
- *dp++ = palette_lookup[p];
- }
- row_info->color_type = PNG_COLOR_TYPE_PALETTE;
- row_info->channels = 1;
- row_info->pixel_depth = row_info->bit_depth;
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width);
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_PALETTE &&
- dither_lookup && row_info->bit_depth == 8)
- {
- sp = row;
- for (i = 0; i < row_width; i++, sp++)
- {
- *sp = dither_lookup[*sp];
- }
- }
- }
-}
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-#if defined(PNG_READ_GAMMA_SUPPORTED)
-static PNG_CONST int png_gamma_shift[] =
- {0x10, 0x21, 0x42, 0x84, 0x110, 0x248, 0x550, 0xff0, 0x00};
-
-/* We build the 8- or 16-bit gamma tables here. Note that for 16-bit
- * tables, we don't make a full table if we are reducing to 8-bit in
- * the future. Note also how the gamma_16 tables are segmented so that
- * we don't need to allocate > 64K chunks for a full 16-bit table.
- */
-void /* PRIVATE */
-png_build_gamma_table(png_structp png_ptr)
-{
- png_debug(1, "in png_build_gamma_table\n");
-
- if (png_ptr->bit_depth <= 8)
- {
- int i;
- double g;
-
- if (png_ptr->screen_gamma > .000001)
- g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
- else
- g = 1.0;
-
- png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)256);
-
- for (i = 0; i < 256; i++)
- {
- png_ptr->gamma_table[i] = (png_byte)(pow((double)i / 255.0,
- g) * 255.0 + .5);
- }
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
- defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
- if (png_ptr->transformations & ((PNG_BACKGROUND) | PNG_RGB_TO_GRAY))
- {
-
- g = 1.0 / (png_ptr->gamma);
-
- png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)256);
-
- for (i = 0; i < 256; i++)
- {
- png_ptr->gamma_to_1[i] = (png_byte)(pow((double)i / 255.0,
- g) * 255.0 + .5);
- }
-
-
- png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)256);
-
- if(png_ptr->screen_gamma > 0.000001)
- g = 1.0 / png_ptr->screen_gamma;
- else
- g = png_ptr->gamma; /* probably doing rgb_to_gray */
-
- for (i = 0; i < 256; i++)
- {
- png_ptr->gamma_from_1[i] = (png_byte)(pow((double)i / 255.0,
- g) * 255.0 + .5);
-
- }
- }
-#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */
- }
- else
- {
- double g;
- int i, j, shift, num;
- int sig_bit;
- png_uint_32 ig;
-
- if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
- {
- sig_bit = (int)png_ptr->sig_bit.red;
- if ((int)png_ptr->sig_bit.green > sig_bit)
- sig_bit = png_ptr->sig_bit.green;
- if ((int)png_ptr->sig_bit.blue > sig_bit)
- sig_bit = png_ptr->sig_bit.blue;
- }
- else
- {
- sig_bit = (int)png_ptr->sig_bit.gray;
- }
-
- if (sig_bit > 0)
- shift = 16 - sig_bit;
- else
- shift = 0;
-
- if (png_ptr->transformations & PNG_16_TO_8)
- {
- if (shift < (16 - PNG_MAX_GAMMA_8))
- shift = (16 - PNG_MAX_GAMMA_8);
- }
-
- if (shift > 8)
- shift = 8;
- if (shift < 0)
- shift = 0;
-
- png_ptr->gamma_shift = (png_byte)shift;
-
- num = (1 << (8 - shift));
-
- if (png_ptr->screen_gamma > .000001)
- g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
- else
- g = 1.0;
-
- png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr,
- (png_uint_32)(num * png_sizeof (png_uint_16p)));
-
- if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND))
- {
- double fin, fout;
- png_uint_32 last, max;
-
- for (i = 0; i < num; i++)
- {
- png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(256 * png_sizeof (png_uint_16)));
- }
-
- g = 1.0 / g;
- last = 0;
- for (i = 0; i < 256; i++)
- {
- fout = ((double)i + 0.5) / 256.0;
- fin = pow(fout, g);
- max = (png_uint_32)(fin * (double)((png_uint_32)num << 8));
- while (last <= max)
- {
- png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
- [(int)(last >> (8 - shift))] = (png_uint_16)(
- (png_uint_16)i | ((png_uint_16)i << 8));
- last++;
- }
- }
- while (last < ((png_uint_32)num << 8))
- {
- png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
- [(int)(last >> (8 - shift))] = (png_uint_16)65535L;
- last++;
- }
- }
- else
- {
- for (i = 0; i < num; i++)
- {
- png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(256 * png_sizeof (png_uint_16)));
-
- ig = (((png_uint_32)i * (png_uint_32)png_gamma_shift[shift]) >> 4);
- for (j = 0; j < 256; j++)
- {
- png_ptr->gamma_16_table[i][j] =
- (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) /
- 65535.0, g) * 65535.0 + .5);
- }
- }
- }
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
- defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
- if (png_ptr->transformations & (PNG_BACKGROUND | PNG_RGB_TO_GRAY))
- {
-
- g = 1.0 / (png_ptr->gamma);
-
- png_ptr->gamma_16_to_1 = (png_uint_16pp)png_malloc(png_ptr,
- (png_uint_32)(num * png_sizeof (png_uint_16p )));
-
- for (i = 0; i < num; i++)
- {
- png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(256 * png_sizeof (png_uint_16)));
-
- ig = (((png_uint_32)i *
- (png_uint_32)png_gamma_shift[shift]) >> 4);
- for (j = 0; j < 256; j++)
- {
- png_ptr->gamma_16_to_1[i][j] =
- (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) /
- 65535.0, g) * 65535.0 + .5);
- }
- }
-
- if(png_ptr->screen_gamma > 0.000001)
- g = 1.0 / png_ptr->screen_gamma;
- else
- g = png_ptr->gamma; /* probably doing rgb_to_gray */
-
- png_ptr->gamma_16_from_1 = (png_uint_16pp)png_malloc(png_ptr,
- (png_uint_32)(num * png_sizeof (png_uint_16p)));
-
- for (i = 0; i < num; i++)
- {
- png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(256 * png_sizeof (png_uint_16)));
-
- ig = (((png_uint_32)i *
- (png_uint_32)png_gamma_shift[shift]) >> 4);
- for (j = 0; j < 256; j++)
- {
- png_ptr->gamma_16_from_1[i][j] =
- (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) /
- 65535.0, g) * 65535.0 + .5);
- }
- }
- }
-#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */
- }
-}
-#endif
-/* To do: install integer version of png_build_gamma_table here */
-#endif
-
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
-/* undoes intrapixel differencing */
-void /* PRIVATE */
-png_do_read_intrapixel(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_read_intrapixel\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- (row_info->color_type & PNG_COLOR_MASK_COLOR))
- {
- int bytes_per_pixel;
- png_uint_32 row_width = row_info->width;
- if (row_info->bit_depth == 8)
- {
- png_bytep rp;
- png_uint_32 i;
-
- if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- bytes_per_pixel = 3;
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- bytes_per_pixel = 4;
- else
- return;
-
- for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
- {
- *(rp) = (png_byte)((256 + *rp + *(rp+1))&0xff);
- *(rp+2) = (png_byte)((256 + *(rp+2) + *(rp+1))&0xff);
- }
- }
- else if (row_info->bit_depth == 16)
- {
- png_bytep rp;
- png_uint_32 i;
-
- if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- bytes_per_pixel = 6;
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- bytes_per_pixel = 8;
- else
- return;
-
- for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
- {
- png_uint_32 s0 = (*(rp ) << 8) | *(rp+1);
- png_uint_32 s1 = (*(rp+2) << 8) | *(rp+3);
- png_uint_32 s2 = (*(rp+4) << 8) | *(rp+5);
- png_uint_32 red = (png_uint_32)((s0+s1+65536L) & 0xffffL);
- png_uint_32 blue = (png_uint_32)((s2+s1+65536L) & 0xffffL);
- *(rp ) = (png_byte)((red >> 8) & 0xff);
- *(rp+1) = (png_byte)(red & 0xff);
- *(rp+4) = (png_byte)((blue >> 8) & 0xff);
- *(rp+5) = (png_byte)(blue & 0xff);
- }
- }
- }
-}
-#endif /* PNG_MNG_FEATURES_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngrutil.c b/Build/source/libs/libpng/pngrutil.c
deleted file mode 100644
index 531cb0570eb..00000000000
--- a/Build/source/libs/libpng/pngrutil.c
+++ /dev/null
@@ -1,3183 +0,0 @@
-
-/* pngrutil.c - utilities to read a PNG file
- *
- * Last changed in libpng 1.2.27 [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This file contains routines that are only called from within
- * libpng itself during the course of reading an image.
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED)
-
-#if defined(_WIN32_WCE) && (_WIN32_WCE<0x500)
-# define WIN32_WCE_OLD
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-# if defined(WIN32_WCE_OLD)
-/* strtod() function is not supported on WindowsCE */
-__inline double png_strtod(png_structp png_ptr, PNG_CONST char *nptr, char **endptr)
-{
- double result = 0;
- int len;
- wchar_t *str, *end;
-
- len = MultiByteToWideChar(CP_ACP, 0, nptr, -1, NULL, 0);
- str = (wchar_t *)png_malloc(png_ptr, len * sizeof(wchar_t));
- if ( NULL != str )
- {
- MultiByteToWideChar(CP_ACP, 0, nptr, -1, str, len);
- result = wcstod(str, &end);
- len = WideCharToMultiByte(CP_ACP, 0, end, -1, NULL, 0, NULL, NULL);
- *endptr = (char *)nptr + (png_strlen(nptr) - len + 1);
- png_free(png_ptr, str);
- }
- return result;
-}
-# else
-# define png_strtod(p,a,b) strtod(a,b)
-# endif
-#endif
-
-png_uint_32 PNGAPI
-png_get_uint_31(png_structp png_ptr, png_bytep buf)
-{
- png_uint_32 i = png_get_uint_32(buf);
- if (i > PNG_UINT_31_MAX)
- png_error(png_ptr, "PNG unsigned integer out of range.");
- return (i);
-}
-#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED
-/* Grab an unsigned 32-bit integer from a buffer in big-endian format. */
-png_uint_32 PNGAPI
-png_get_uint_32(png_bytep buf)
-{
- png_uint_32 i = ((png_uint_32)(*buf) << 24) +
- ((png_uint_32)(*(buf + 1)) << 16) +
- ((png_uint_32)(*(buf + 2)) << 8) +
- (png_uint_32)(*(buf + 3));
-
- return (i);
-}
-
-/* Grab a signed 32-bit integer from a buffer in big-endian format. The
- * data is stored in the PNG file in two's complement format, and it is
- * assumed that the machine format for signed integers is the same. */
-png_int_32 PNGAPI
-png_get_int_32(png_bytep buf)
-{
- png_int_32 i = ((png_int_32)(*buf) << 24) +
- ((png_int_32)(*(buf + 1)) << 16) +
- ((png_int_32)(*(buf + 2)) << 8) +
- (png_int_32)(*(buf + 3));
-
- return (i);
-}
-
-/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */
-png_uint_16 PNGAPI
-png_get_uint_16(png_bytep buf)
-{
- png_uint_16 i = (png_uint_16)(((png_uint_16)(*buf) << 8) +
- (png_uint_16)(*(buf + 1)));
-
- return (i);
-}
-#endif /* PNG_READ_BIG_ENDIAN_SUPPORTED */
-
-/* Read data, and (optionally) run it through the CRC. */
-void /* PRIVATE */
-png_crc_read(png_structp png_ptr, png_bytep buf, png_size_t length)
-{
- if(png_ptr == NULL) return;
- png_read_data(png_ptr, buf, length);
- png_calculate_crc(png_ptr, buf, length);
-}
-
-/* Optionally skip data and then check the CRC. Depending on whether we
- are reading a ancillary or critical chunk, and how the program has set
- things up, we may calculate the CRC on the data and print a message.
- Returns '1' if there was a CRC error, '0' otherwise. */
-int /* PRIVATE */
-png_crc_finish(png_structp png_ptr, png_uint_32 skip)
-{
- png_size_t i;
- png_size_t istop = png_ptr->zbuf_size;
-
- for (i = (png_size_t)skip; i > istop; i -= istop)
- {
- png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size);
- }
- if (i)
- {
- png_crc_read(png_ptr, png_ptr->zbuf, i);
- }
-
- if (png_crc_error(png_ptr))
- {
- if (((png_ptr->chunk_name[0] & 0x20) && /* Ancillary */
- !(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)) ||
- (!(png_ptr->chunk_name[0] & 0x20) && /* Critical */
- (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE)))
- {
- png_chunk_warning(png_ptr, "CRC error");
- }
- else
- {
- png_chunk_error(png_ptr, "CRC error");
- }
- return (1);
- }
-
- return (0);
-}
-
-/* Compare the CRC stored in the PNG file with that calculated by libpng from
- the data it has read thus far. */
-int /* PRIVATE */
-png_crc_error(png_structp png_ptr)
-{
- png_byte crc_bytes[4];
- png_uint_32 crc;
- int need_crc = 1;
-
- if (png_ptr->chunk_name[0] & 0x20) /* ancillary */
- {
- if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
- (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
- need_crc = 0;
- }
- else /* critical */
- {
- if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE)
- need_crc = 0;
- }
-
- png_read_data(png_ptr, crc_bytes, 4);
-
- if (need_crc)
- {
- crc = png_get_uint_32(crc_bytes);
- return ((int)(crc != png_ptr->crc));
- }
- else
- return (0);
-}
-
-#if defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) || \
- defined(PNG_READ_iCCP_SUPPORTED)
-/*
- * Decompress trailing data in a chunk. The assumption is that chunkdata
- * points at an allocated area holding the contents of a chunk with a
- * trailing compressed part. What we get back is an allocated area
- * holding the original prefix part and an uncompressed version of the
- * trailing part (the malloc area passed in is freed).
- */
-png_charp /* PRIVATE */
-png_decompress_chunk(png_structp png_ptr, int comp_type,
- png_charp chunkdata, png_size_t chunklength,
- png_size_t prefix_size, png_size_t *newlength)
-{
- static PNG_CONST char msg[] = "Error decoding compressed text";
- png_charp text;
- png_size_t text_size;
-
- if (comp_type == PNG_COMPRESSION_TYPE_BASE)
- {
- int ret = Z_OK;
- png_ptr->zstream.next_in = (png_bytep)(chunkdata + prefix_size);
- png_ptr->zstream.avail_in = (uInt)(chunklength - prefix_size);
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
-
- text_size = 0;
- text = NULL;
-
- while (png_ptr->zstream.avail_in)
- {
- ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
- if (ret != Z_OK && ret != Z_STREAM_END)
- {
- if (png_ptr->zstream.msg != NULL)
- png_warning(png_ptr, png_ptr->zstream.msg);
- else
- png_warning(png_ptr, msg);
- inflateReset(&png_ptr->zstream);
- png_ptr->zstream.avail_in = 0;
-
- if (text == NULL)
- {
- text_size = prefix_size + png_sizeof(msg) + 1;
- text = (png_charp)png_malloc_warn(png_ptr, text_size);
- if (text == NULL)
- {
- png_free(png_ptr,chunkdata);
- png_error(png_ptr,"Not enough memory to decompress chunk");
- }
- png_memcpy(text, chunkdata, prefix_size);
- }
-
- text[text_size - 1] = 0x00;
-
- /* Copy what we can of the error message into the text chunk */
- text_size = (png_size_t)(chunklength - (text - chunkdata) - 1);
- text_size = png_sizeof(msg) > text_size ? text_size :
- png_sizeof(msg);
- png_memcpy(text + prefix_size, msg, text_size);
- break;
- }
- if (!png_ptr->zstream.avail_out || ret == Z_STREAM_END)
- {
- if (text == NULL)
- {
- text_size = prefix_size +
- png_ptr->zbuf_size - png_ptr->zstream.avail_out;
- text = (png_charp)png_malloc_warn(png_ptr, text_size + 1);
- if (text == NULL)
- {
- png_free(png_ptr,chunkdata);
- png_error(png_ptr,"Not enough memory to decompress chunk.");
- }
- png_memcpy(text + prefix_size, png_ptr->zbuf,
- text_size - prefix_size);
- png_memcpy(text, chunkdata, prefix_size);
- *(text + text_size) = 0x00;
- }
- else
- {
- png_charp tmp;
-
- tmp = text;
- text = (png_charp)png_malloc_warn(png_ptr,
- (png_uint_32)(text_size +
- png_ptr->zbuf_size - png_ptr->zstream.avail_out + 1));
- if (text == NULL)
- {
- png_free(png_ptr, tmp);
- png_free(png_ptr, chunkdata);
- png_error(png_ptr,"Not enough memory to decompress chunk..");
- }
- png_memcpy(text, tmp, text_size);
- png_free(png_ptr, tmp);
- png_memcpy(text + text_size, png_ptr->zbuf,
- (png_ptr->zbuf_size - png_ptr->zstream.avail_out));
- text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out;
- *(text + text_size) = 0x00;
- }
- if (ret == Z_STREAM_END)
- break;
- else
- {
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- }
- }
- }
- if (ret != Z_STREAM_END)
- {
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- char umsg[52];
-
- if (ret == Z_BUF_ERROR)
- png_snprintf(umsg, 52,
- "Buffer error in compressed datastream in %s chunk",
- png_ptr->chunk_name);
- else if (ret == Z_DATA_ERROR)
- png_snprintf(umsg, 52,
- "Data error in compressed datastream in %s chunk",
- png_ptr->chunk_name);
- else
- png_snprintf(umsg, 52,
- "Incomplete compressed datastream in %s chunk",
- png_ptr->chunk_name);
- png_warning(png_ptr, umsg);
-#else
- png_warning(png_ptr,
- "Incomplete compressed datastream in chunk other than IDAT");
-#endif
- text_size=prefix_size;
- if (text == NULL)
- {
- text = (png_charp)png_malloc_warn(png_ptr, text_size+1);
- if (text == NULL)
- {
- png_free(png_ptr, chunkdata);
- png_error(png_ptr,"Not enough memory for text.");
- }
- png_memcpy(text, chunkdata, prefix_size);
- }
- *(text + text_size) = 0x00;
- }
-
- inflateReset(&png_ptr->zstream);
- png_ptr->zstream.avail_in = 0;
-
- png_free(png_ptr, chunkdata);
- chunkdata = text;
- *newlength=text_size;
- }
- else /* if (comp_type != PNG_COMPRESSION_TYPE_BASE) */
- {
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- char umsg[50];
-
- png_snprintf(umsg, 50,
- "Unknown zTXt compression type %d", comp_type);
- png_warning(png_ptr, umsg);
-#else
- png_warning(png_ptr, "Unknown zTXt compression type");
-#endif
-
- *(chunkdata + prefix_size) = 0x00;
- *newlength=prefix_size;
- }
-
- return chunkdata;
-}
-#endif
-
-/* read and check the IDHR chunk */
-void /* PRIVATE */
-png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_byte buf[13];
- png_uint_32 width, height;
- int bit_depth, color_type, compression_type, filter_type;
- int interlace_type;
-
- png_debug(1, "in png_handle_IHDR\n");
-
- if (png_ptr->mode & PNG_HAVE_IHDR)
- png_error(png_ptr, "Out of place IHDR");
-
- /* check the length */
- if (length != 13)
- png_error(png_ptr, "Invalid IHDR chunk");
-
- png_ptr->mode |= PNG_HAVE_IHDR;
-
- png_crc_read(png_ptr, buf, 13);
- png_crc_finish(png_ptr, 0);
-
- width = png_get_uint_31(png_ptr, buf);
- height = png_get_uint_31(png_ptr, buf + 4);
- bit_depth = buf[8];
- color_type = buf[9];
- compression_type = buf[10];
- filter_type = buf[11];
- interlace_type = buf[12];
-
- /* set internal variables */
- png_ptr->width = width;
- png_ptr->height = height;
- png_ptr->bit_depth = (png_byte)bit_depth;
- png_ptr->interlaced = (png_byte)interlace_type;
- png_ptr->color_type = (png_byte)color_type;
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- png_ptr->filter_type = (png_byte)filter_type;
-#endif
- png_ptr->compression_type = (png_byte)compression_type;
-
- /* find number of channels */
- switch (png_ptr->color_type)
- {
- case PNG_COLOR_TYPE_GRAY:
- case PNG_COLOR_TYPE_PALETTE:
- png_ptr->channels = 1;
- break;
- case PNG_COLOR_TYPE_RGB:
- png_ptr->channels = 3;
- break;
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- png_ptr->channels = 2;
- break;
- case PNG_COLOR_TYPE_RGB_ALPHA:
- png_ptr->channels = 4;
- break;
- }
-
- /* set up other useful info */
- png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth *
- png_ptr->channels);
- png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
- png_debug1(3,"bit_depth = %d\n", png_ptr->bit_depth);
- png_debug1(3,"channels = %d\n", png_ptr->channels);
- png_debug1(3,"rowbytes = %lu\n", png_ptr->rowbytes);
- png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
- color_type, interlace_type, compression_type, filter_type);
-}
-
-/* read and check the palette */
-void /* PRIVATE */
-png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_color palette[PNG_MAX_PALETTE_LENGTH];
- int num, i;
-#ifndef PNG_NO_POINTER_INDEXING
- png_colorp pal_ptr;
-#endif
-
- png_debug(1, "in png_handle_PLTE\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before PLTE");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid PLTE after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (png_ptr->mode & PNG_HAVE_PLTE)
- png_error(png_ptr, "Duplicate PLTE chunk");
-
- png_ptr->mode |= PNG_HAVE_PLTE;
-
- if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR))
- {
- png_warning(png_ptr,
- "Ignoring PLTE chunk in grayscale PNG");
- png_crc_finish(png_ptr, length);
- return;
- }
-#if !defined(PNG_READ_OPT_PLTE_SUPPORTED)
- if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
- {
- png_crc_finish(png_ptr, length);
- return;
- }
-#endif
-
- if (length > 3*PNG_MAX_PALETTE_LENGTH || length % 3)
- {
- if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
- {
- png_warning(png_ptr, "Invalid palette chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
- else
- {
- png_error(png_ptr, "Invalid palette chunk");
- }
- }
-
- num = (int)length / 3;
-
-#ifndef PNG_NO_POINTER_INDEXING
- for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
- {
- png_byte buf[3];
-
- png_crc_read(png_ptr, buf, 3);
- pal_ptr->red = buf[0];
- pal_ptr->green = buf[1];
- pal_ptr->blue = buf[2];
- }
-#else
- for (i = 0; i < num; i++)
- {
- png_byte buf[3];
-
- png_crc_read(png_ptr, buf, 3);
- /* don't depend upon png_color being any order */
- palette[i].red = buf[0];
- palette[i].green = buf[1];
- palette[i].blue = buf[2];
- }
-#endif
-
- /* If we actually NEED the PLTE chunk (ie for a paletted image), we do
- whatever the normal CRC configuration tells us. However, if we
- have an RGB image, the PLTE can be considered ancillary, so
- we will act as though it is. */
-#if !defined(PNG_READ_OPT_PLTE_SUPPORTED)
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-#endif
- {
- png_crc_finish(png_ptr, 0);
- }
-#if !defined(PNG_READ_OPT_PLTE_SUPPORTED)
- else if (png_crc_error(png_ptr)) /* Only if we have a CRC error */
- {
- /* If we don't want to use the data from an ancillary chunk,
- we have two options: an error abort, or a warning and we
- ignore the data in this chunk (which should be OK, since
- it's considered ancillary for a RGB or RGBA image). */
- if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_USE))
- {
- if (png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)
- {
- png_chunk_error(png_ptr, "CRC error");
- }
- else
- {
- png_chunk_warning(png_ptr, "CRC error");
- return;
- }
- }
- /* Otherwise, we (optionally) emit a warning and use the chunk. */
- else if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN))
- {
- png_chunk_warning(png_ptr, "CRC error");
- }
- }
-#endif
-
- png_set_PLTE(png_ptr, info_ptr, palette, num);
-
-#if defined(PNG_READ_tRNS_SUPPORTED)
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
- {
- if (png_ptr->num_trans > (png_uint_16)num)
- {
- png_warning(png_ptr, "Truncating incorrect tRNS chunk length");
- png_ptr->num_trans = (png_uint_16)num;
- }
- if (info_ptr->num_trans > (png_uint_16)num)
- {
- png_warning(png_ptr, "Truncating incorrect info tRNS chunk length");
- info_ptr->num_trans = (png_uint_16)num;
- }
- }
- }
-#endif
-
-}
-
-void /* PRIVATE */
-png_handle_IEND(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_debug(1, "in png_handle_IEND\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR) || !(png_ptr->mode & PNG_HAVE_IDAT))
- {
- png_error(png_ptr, "No image in file");
- }
-
- png_ptr->mode |= (PNG_AFTER_IDAT | PNG_HAVE_IEND);
-
- if (length != 0)
- {
- png_warning(png_ptr, "Incorrect IEND chunk length");
- }
- png_crc_finish(png_ptr, length);
-
- info_ptr =info_ptr; /* quiet compiler warnings about unused info_ptr */
-}
-
-#if defined(PNG_READ_gAMA_SUPPORTED)
-void /* PRIVATE */
-png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_fixed_point igamma;
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- float file_gamma;
-#endif
- png_byte buf[4];
-
- png_debug(1, "in png_handle_gAMA\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before gAMA");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid gAMA after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (png_ptr->mode & PNG_HAVE_PLTE)
- /* Should be an error, but we can cope with it */
- png_warning(png_ptr, "Out of place gAMA chunk");
-
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
-#if defined(PNG_READ_sRGB_SUPPORTED)
- && !(info_ptr->valid & PNG_INFO_sRGB)
-#endif
- )
- {
- png_warning(png_ptr, "Duplicate gAMA chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (length != 4)
- {
- png_warning(png_ptr, "Incorrect gAMA chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, 4);
- if (png_crc_finish(png_ptr, 0))
- return;
-
- igamma = (png_fixed_point)png_get_uint_32(buf);
- /* check for zero gamma */
- if (igamma == 0)
- {
- png_warning(png_ptr,
- "Ignoring gAMA chunk with gamma=0");
- return;
- }
-
-#if defined(PNG_READ_sRGB_SUPPORTED)
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB))
- if (PNG_OUT_OF_RANGE(igamma, 45500L, 500))
- {
- png_warning(png_ptr,
- "Ignoring incorrect gAMA value when sRGB is also present");
-#ifndef PNG_NO_CONSOLE_IO
- fprintf(stderr, "gamma = (%d/100000)\n", (int)igamma);
-#endif
- return;
- }
-#endif /* PNG_READ_sRGB_SUPPORTED */
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- file_gamma = (float)igamma / (float)100000.0;
-# ifdef PNG_READ_GAMMA_SUPPORTED
- png_ptr->gamma = file_gamma;
-# endif
- png_set_gAMA(png_ptr, info_ptr, file_gamma);
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_set_gAMA_fixed(png_ptr, info_ptr, igamma);
-#endif
-}
-#endif
-
-#if defined(PNG_READ_sBIT_SUPPORTED)
-void /* PRIVATE */
-png_handle_sBIT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_size_t truelen;
- png_byte buf[4];
-
- png_debug(1, "in png_handle_sBIT\n");
-
- buf[0] = buf[1] = buf[2] = buf[3] = 0;
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before sBIT");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid sBIT after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (png_ptr->mode & PNG_HAVE_PLTE)
- {
- /* Should be an error, but we can cope with it */
- png_warning(png_ptr, "Out of place sBIT chunk");
- }
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT))
- {
- png_warning(png_ptr, "Duplicate sBIT chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- truelen = 3;
- else
- truelen = (png_size_t)png_ptr->channels;
-
- if (length != truelen || length > 4)
- {
- png_warning(png_ptr, "Incorrect sBIT chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, truelen);
- if (png_crc_finish(png_ptr, 0))
- return;
-
- if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
- {
- png_ptr->sig_bit.red = buf[0];
- png_ptr->sig_bit.green = buf[1];
- png_ptr->sig_bit.blue = buf[2];
- png_ptr->sig_bit.alpha = buf[3];
- }
- else
- {
- png_ptr->sig_bit.gray = buf[0];
- png_ptr->sig_bit.red = buf[0];
- png_ptr->sig_bit.green = buf[0];
- png_ptr->sig_bit.blue = buf[0];
- png_ptr->sig_bit.alpha = buf[1];
- }
- png_set_sBIT(png_ptr, info_ptr, &(png_ptr->sig_bit));
-}
-#endif
-
-#if defined(PNG_READ_cHRM_SUPPORTED)
-void /* PRIVATE */
-png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_byte buf[4];
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y;
-#endif
- png_fixed_point int_x_white, int_y_white, int_x_red, int_y_red, int_x_green,
- int_y_green, int_x_blue, int_y_blue;
-
- png_uint_32 uint_x, uint_y;
-
- png_debug(1, "in png_handle_cHRM\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before cHRM");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid cHRM after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (png_ptr->mode & PNG_HAVE_PLTE)
- /* Should be an error, but we can cope with it */
- png_warning(png_ptr, "Missing PLTE before cHRM");
-
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)
-#if defined(PNG_READ_sRGB_SUPPORTED)
- && !(info_ptr->valid & PNG_INFO_sRGB)
-#endif
- )
- {
- png_warning(png_ptr, "Duplicate cHRM chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (length != 32)
- {
- png_warning(png_ptr, "Incorrect cHRM chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, 4);
- uint_x = png_get_uint_32(buf);
-
- png_crc_read(png_ptr, buf, 4);
- uint_y = png_get_uint_32(buf);
-
- if (uint_x > 80000L || uint_y > 80000L ||
- uint_x + uint_y > 100000L)
- {
- png_warning(png_ptr, "Invalid cHRM white point");
- png_crc_finish(png_ptr, 24);
- return;
- }
- int_x_white = (png_fixed_point)uint_x;
- int_y_white = (png_fixed_point)uint_y;
-
- png_crc_read(png_ptr, buf, 4);
- uint_x = png_get_uint_32(buf);
-
- png_crc_read(png_ptr, buf, 4);
- uint_y = png_get_uint_32(buf);
-
- if (uint_x + uint_y > 100000L)
- {
- png_warning(png_ptr, "Invalid cHRM red point");
- png_crc_finish(png_ptr, 16);
- return;
- }
- int_x_red = (png_fixed_point)uint_x;
- int_y_red = (png_fixed_point)uint_y;
-
- png_crc_read(png_ptr, buf, 4);
- uint_x = png_get_uint_32(buf);
-
- png_crc_read(png_ptr, buf, 4);
- uint_y = png_get_uint_32(buf);
-
- if (uint_x + uint_y > 100000L)
- {
- png_warning(png_ptr, "Invalid cHRM green point");
- png_crc_finish(png_ptr, 8);
- return;
- }
- int_x_green = (png_fixed_point)uint_x;
- int_y_green = (png_fixed_point)uint_y;
-
- png_crc_read(png_ptr, buf, 4);
- uint_x = png_get_uint_32(buf);
-
- png_crc_read(png_ptr, buf, 4);
- uint_y = png_get_uint_32(buf);
-
- if (uint_x + uint_y > 100000L)
- {
- png_warning(png_ptr, "Invalid cHRM blue point");
- png_crc_finish(png_ptr, 0);
- return;
- }
- int_x_blue = (png_fixed_point)uint_x;
- int_y_blue = (png_fixed_point)uint_y;
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- white_x = (float)int_x_white / (float)100000.0;
- white_y = (float)int_y_white / (float)100000.0;
- red_x = (float)int_x_red / (float)100000.0;
- red_y = (float)int_y_red / (float)100000.0;
- green_x = (float)int_x_green / (float)100000.0;
- green_y = (float)int_y_green / (float)100000.0;
- blue_x = (float)int_x_blue / (float)100000.0;
- blue_y = (float)int_y_blue / (float)100000.0;
-#endif
-
-#if defined(PNG_READ_sRGB_SUPPORTED)
- if ((info_ptr != NULL) && (info_ptr->valid & PNG_INFO_sRGB))
- {
- if (PNG_OUT_OF_RANGE(int_x_white, 31270, 1000) ||
- PNG_OUT_OF_RANGE(int_y_white, 32900, 1000) ||
- PNG_OUT_OF_RANGE(int_x_red, 64000L, 1000) ||
- PNG_OUT_OF_RANGE(int_y_red, 33000, 1000) ||
- PNG_OUT_OF_RANGE(int_x_green, 30000, 1000) ||
- PNG_OUT_OF_RANGE(int_y_green, 60000L, 1000) ||
- PNG_OUT_OF_RANGE(int_x_blue, 15000, 1000) ||
- PNG_OUT_OF_RANGE(int_y_blue, 6000, 1000))
- {
- png_warning(png_ptr,
- "Ignoring incorrect cHRM value when sRGB is also present");
-#ifndef PNG_NO_CONSOLE_IO
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- fprintf(stderr,"wx=%f, wy=%f, rx=%f, ry=%f\n",
- white_x, white_y, red_x, red_y);
- fprintf(stderr,"gx=%f, gy=%f, bx=%f, by=%f\n",
- green_x, green_y, blue_x, blue_y);
-#else
- fprintf(stderr,"wx=%ld, wy=%ld, rx=%ld, ry=%ld\n",
- int_x_white, int_y_white, int_x_red, int_y_red);
- fprintf(stderr,"gx=%ld, gy=%ld, bx=%ld, by=%ld\n",
- int_x_green, int_y_green, int_x_blue, int_y_blue);
-#endif
-#endif /* PNG_NO_CONSOLE_IO */
- }
- png_crc_finish(png_ptr, 0);
- return;
- }
-#endif /* PNG_READ_sRGB_SUPPORTED */
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- png_set_cHRM(png_ptr, info_ptr,
- white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y);
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_set_cHRM_fixed(png_ptr, info_ptr,
- int_x_white, int_y_white, int_x_red, int_y_red, int_x_green,
- int_y_green, int_x_blue, int_y_blue);
-#endif
- if (png_crc_finish(png_ptr, 0))
- return;
-}
-#endif
-
-#if defined(PNG_READ_sRGB_SUPPORTED)
-void /* PRIVATE */
-png_handle_sRGB(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- int intent;
- png_byte buf[1];
-
- png_debug(1, "in png_handle_sRGB\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before sRGB");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid sRGB after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (png_ptr->mode & PNG_HAVE_PLTE)
- /* Should be an error, but we can cope with it */
- png_warning(png_ptr, "Out of place sRGB chunk");
-
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB))
- {
- png_warning(png_ptr, "Duplicate sRGB chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (length != 1)
- {
- png_warning(png_ptr, "Incorrect sRGB chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, 1);
- if (png_crc_finish(png_ptr, 0))
- return;
-
- intent = buf[0];
- /* check for bad intent */
- if (intent >= PNG_sRGB_INTENT_LAST)
- {
- png_warning(png_ptr, "Unknown sRGB intent");
- return;
- }
-
-#if defined(PNG_READ_gAMA_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED)
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA))
- {
- png_fixed_point igamma;
-#ifdef PNG_FIXED_POINT_SUPPORTED
- igamma=info_ptr->int_gamma;
-#else
-# ifdef PNG_FLOATING_POINT_SUPPORTED
- igamma=(png_fixed_point)(info_ptr->gamma * 100000.);
-# endif
-#endif
- if (PNG_OUT_OF_RANGE(igamma, 45500L, 500))
- {
- png_warning(png_ptr,
- "Ignoring incorrect gAMA value when sRGB is also present");
-#ifndef PNG_NO_CONSOLE_IO
-# ifdef PNG_FIXED_POINT_SUPPORTED
- fprintf(stderr,"incorrect gamma=(%d/100000)\n",(int)png_ptr->int_gamma);
-# else
-# ifdef PNG_FLOATING_POINT_SUPPORTED
- fprintf(stderr,"incorrect gamma=%f\n",png_ptr->gamma);
-# endif
-# endif
-#endif
- }
- }
-#endif /* PNG_READ_gAMA_SUPPORTED */
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-#ifdef PNG_FIXED_POINT_SUPPORTED
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
- if (PNG_OUT_OF_RANGE(info_ptr->int_x_white, 31270, 1000) ||
- PNG_OUT_OF_RANGE(info_ptr->int_y_white, 32900, 1000) ||
- PNG_OUT_OF_RANGE(info_ptr->int_x_red, 64000L, 1000) ||
- PNG_OUT_OF_RANGE(info_ptr->int_y_red, 33000, 1000) ||
- PNG_OUT_OF_RANGE(info_ptr->int_x_green, 30000, 1000) ||
- PNG_OUT_OF_RANGE(info_ptr->int_y_green, 60000L, 1000) ||
- PNG_OUT_OF_RANGE(info_ptr->int_x_blue, 15000, 1000) ||
- PNG_OUT_OF_RANGE(info_ptr->int_y_blue, 6000, 1000))
- {
- png_warning(png_ptr,
- "Ignoring incorrect cHRM value when sRGB is also present");
- }
-#endif /* PNG_FIXED_POINT_SUPPORTED */
-#endif /* PNG_READ_cHRM_SUPPORTED */
-
- png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, intent);
-}
-#endif /* PNG_READ_sRGB_SUPPORTED */
-
-#if defined(PNG_READ_iCCP_SUPPORTED)
-void /* PRIVATE */
-png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-/* Note: this does not properly handle chunks that are > 64K under DOS */
-{
- png_charp chunkdata;
- png_byte compression_type;
- png_bytep pC;
- png_charp profile;
- png_uint_32 skip = 0;
- png_uint_32 profile_size, profile_length;
- png_size_t slength, prefix_length, data_length;
-
- png_debug(1, "in png_handle_iCCP\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before iCCP");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid iCCP after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (png_ptr->mode & PNG_HAVE_PLTE)
- /* Should be an error, but we can cope with it */
- png_warning(png_ptr, "Out of place iCCP chunk");
-
- if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP))
- {
- png_warning(png_ptr, "Duplicate iCCP chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
-#ifdef PNG_MAX_MALLOC_64K
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr, "iCCP chunk too large to fit in memory");
- skip = length - (png_uint_32)65535L;
- length = (png_uint_32)65535L;
- }
-#endif
-
- chunkdata = (png_charp)png_malloc(png_ptr, length + 1);
- slength = (png_size_t)length;
- png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
-
- if (png_crc_finish(png_ptr, skip))
- {
- png_free(png_ptr, chunkdata);
- return;
- }
-
- chunkdata[slength] = 0x00;
-
- for (profile = chunkdata; *profile; profile++)
- /* empty loop to find end of name */ ;
-
- ++profile;
-
- /* there should be at least one zero (the compression type byte)
- following the separator, and we should be on it */
- if ( profile >= chunkdata + slength - 1)
- {
- png_free(png_ptr, chunkdata);
- png_warning(png_ptr, "Malformed iCCP chunk");
- return;
- }
-
- /* compression_type should always be zero */
- compression_type = *profile++;
- if (compression_type)
- {
- png_warning(png_ptr, "Ignoring nonzero compression type in iCCP chunk");
- compression_type=0x00; /* Reset it to zero (libpng-1.0.6 through 1.0.8
- wrote nonzero) */
- }
-
- prefix_length = profile - chunkdata;
- chunkdata = png_decompress_chunk(png_ptr, compression_type, chunkdata,
- slength, prefix_length, &data_length);
-
- profile_length = data_length - prefix_length;
-
- if ( prefix_length > data_length || profile_length < 4)
- {
- png_free(png_ptr, chunkdata);
- png_warning(png_ptr, "Profile size field missing from iCCP chunk");
- return;
- }
-
- /* Check the profile_size recorded in the first 32 bits of the ICC profile */
- pC = (png_bytep)(chunkdata+prefix_length);
- profile_size = ((*(pC ))<<24) |
- ((*(pC+1))<<16) |
- ((*(pC+2))<< 8) |
- ((*(pC+3)) );
-
- if(profile_size < profile_length)
- profile_length = profile_size;
-
- if(profile_size > profile_length)
- {
- png_free(png_ptr, chunkdata);
- png_warning(png_ptr, "Ignoring truncated iCCP profile.");
- return;
- }
-
- png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type,
- chunkdata + prefix_length, profile_length);
- png_free(png_ptr, chunkdata);
-}
-#endif /* PNG_READ_iCCP_SUPPORTED */
-
-#if defined(PNG_READ_sPLT_SUPPORTED)
-void /* PRIVATE */
-png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-/* Note: this does not properly handle chunks that are > 64K under DOS */
-{
- png_bytep chunkdata;
- png_bytep entry_start;
- png_sPLT_t new_palette;
-#ifdef PNG_NO_POINTER_INDEXING
- png_sPLT_entryp pp;
-#endif
- int data_length, entry_size, i;
- png_uint_32 skip = 0;
- png_size_t slength;
-
- png_debug(1, "in png_handle_sPLT\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before sPLT");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid sPLT after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
-
-#ifdef PNG_MAX_MALLOC_64K
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr, "sPLT chunk too large to fit in memory");
- skip = length - (png_uint_32)65535L;
- length = (png_uint_32)65535L;
- }
-#endif
-
- chunkdata = (png_bytep)png_malloc(png_ptr, length + 1);
- slength = (png_size_t)length;
- png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
-
- if (png_crc_finish(png_ptr, skip))
- {
- png_free(png_ptr, chunkdata);
- return;
- }
-
- chunkdata[slength] = 0x00;
-
- for (entry_start = chunkdata; *entry_start; entry_start++)
- /* empty loop to find end of name */ ;
- ++entry_start;
-
- /* a sample depth should follow the separator, and we should be on it */
- if (entry_start > chunkdata + slength - 2)
- {
- png_free(png_ptr, chunkdata);
- png_warning(png_ptr, "malformed sPLT chunk");
- return;
- }
-
- new_palette.depth = *entry_start++;
- entry_size = (new_palette.depth == 8 ? 6 : 10);
- data_length = (slength - (entry_start - chunkdata));
-
- /* integrity-check the data length */
- if (data_length % entry_size)
- {
- png_free(png_ptr, chunkdata);
- png_warning(png_ptr, "sPLT chunk has bad length");
- return;
- }
-
- new_palette.nentries = (png_int_32) ( data_length / entry_size);
- if ((png_uint_32) new_palette.nentries > (png_uint_32) (PNG_SIZE_MAX /
- png_sizeof(png_sPLT_entry)))
- {
- png_warning(png_ptr, "sPLT chunk too long");
- return;
- }
- new_palette.entries = (png_sPLT_entryp)png_malloc_warn(
- png_ptr, new_palette.nentries * png_sizeof(png_sPLT_entry));
- if (new_palette.entries == NULL)
- {
- png_warning(png_ptr, "sPLT chunk requires too much memory");
- return;
- }
-
-#ifndef PNG_NO_POINTER_INDEXING
- for (i = 0; i < new_palette.nentries; i++)
- {
- png_sPLT_entryp pp = new_palette.entries + i;
-
- if (new_palette.depth == 8)
- {
- pp->red = *entry_start++;
- pp->green = *entry_start++;
- pp->blue = *entry_start++;
- pp->alpha = *entry_start++;
- }
- else
- {
- pp->red = png_get_uint_16(entry_start); entry_start += 2;
- pp->green = png_get_uint_16(entry_start); entry_start += 2;
- pp->blue = png_get_uint_16(entry_start); entry_start += 2;
- pp->alpha = png_get_uint_16(entry_start); entry_start += 2;
- }
- pp->frequency = png_get_uint_16(entry_start); entry_start += 2;
- }
-#else
- pp = new_palette.entries;
- for (i = 0; i < new_palette.nentries; i++)
- {
-
- if (new_palette.depth == 8)
- {
- pp[i].red = *entry_start++;
- pp[i].green = *entry_start++;
- pp[i].blue = *entry_start++;
- pp[i].alpha = *entry_start++;
- }
- else
- {
- pp[i].red = png_get_uint_16(entry_start); entry_start += 2;
- pp[i].green = png_get_uint_16(entry_start); entry_start += 2;
- pp[i].blue = png_get_uint_16(entry_start); entry_start += 2;
- pp[i].alpha = png_get_uint_16(entry_start); entry_start += 2;
- }
- pp->frequency = png_get_uint_16(entry_start); entry_start += 2;
- }
-#endif
-
- /* discard all chunk data except the name and stash that */
- new_palette.name = (png_charp)chunkdata;
-
- png_set_sPLT(png_ptr, info_ptr, &new_palette, 1);
-
- png_free(png_ptr, chunkdata);
- png_free(png_ptr, new_palette.entries);
-}
-#endif /* PNG_READ_sPLT_SUPPORTED */
-
-#if defined(PNG_READ_tRNS_SUPPORTED)
-void /* PRIVATE */
-png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_byte readbuf[PNG_MAX_PALETTE_LENGTH];
-
- png_debug(1, "in png_handle_tRNS\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before tRNS");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid tRNS after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
- {
- png_warning(png_ptr, "Duplicate tRNS chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
- {
- png_byte buf[2];
-
- if (length != 2)
- {
- png_warning(png_ptr, "Incorrect tRNS chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, 2);
- png_ptr->num_trans = 1;
- png_ptr->trans_values.gray = png_get_uint_16(buf);
- }
- else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
- {
- png_byte buf[6];
-
- if (length != 6)
- {
- png_warning(png_ptr, "Incorrect tRNS chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
- png_crc_read(png_ptr, buf, (png_size_t)length);
- png_ptr->num_trans = 1;
- png_ptr->trans_values.red = png_get_uint_16(buf);
- png_ptr->trans_values.green = png_get_uint_16(buf + 2);
- png_ptr->trans_values.blue = png_get_uint_16(buf + 4);
- }
- else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (!(png_ptr->mode & PNG_HAVE_PLTE))
- {
- /* Should be an error, but we can cope with it. */
- png_warning(png_ptr, "Missing PLTE before tRNS");
- }
- if (length > (png_uint_32)png_ptr->num_palette ||
- length > PNG_MAX_PALETTE_LENGTH)
- {
- png_warning(png_ptr, "Incorrect tRNS chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
- if (length == 0)
- {
- png_warning(png_ptr, "Zero length tRNS chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
- png_crc_read(png_ptr, readbuf, (png_size_t)length);
- png_ptr->num_trans = (png_uint_16)length;
- }
- else
- {
- png_warning(png_ptr, "tRNS chunk not allowed with alpha channel");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (png_crc_finish(png_ptr, 0))
- {
- png_ptr->num_trans = 0;
- return;
- }
-
- png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans,
- &(png_ptr->trans_values));
-}
-#endif
-
-#if defined(PNG_READ_bKGD_SUPPORTED)
-void /* PRIVATE */
-png_handle_bKGD(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_size_t truelen;
- png_byte buf[6];
-
- png_debug(1, "in png_handle_bKGD\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before bKGD");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid bKGD after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
- !(png_ptr->mode & PNG_HAVE_PLTE))
- {
- png_warning(png_ptr, "Missing PLTE before bKGD");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD))
- {
- png_warning(png_ptr, "Duplicate bKGD chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- truelen = 1;
- else if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
- truelen = 6;
- else
- truelen = 2;
-
- if (length != truelen)
- {
- png_warning(png_ptr, "Incorrect bKGD chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, truelen);
- if (png_crc_finish(png_ptr, 0))
- return;
-
- /* We convert the index value into RGB components so that we can allow
- * arbitrary RGB values for background when we have transparency, and
- * so it is easy to determine the RGB values of the background color
- * from the info_ptr struct. */
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- png_ptr->background.index = buf[0];
- if (info_ptr && info_ptr->num_palette)
- {
- if(buf[0] > info_ptr->num_palette)
- {
- png_warning(png_ptr, "Incorrect bKGD chunk index value");
- return;
- }
- png_ptr->background.red =
- (png_uint_16)png_ptr->palette[buf[0]].red;
- png_ptr->background.green =
- (png_uint_16)png_ptr->palette[buf[0]].green;
- png_ptr->background.blue =
- (png_uint_16)png_ptr->palette[buf[0]].blue;
- }
- }
- else if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) /* GRAY */
- {
- png_ptr->background.red =
- png_ptr->background.green =
- png_ptr->background.blue =
- png_ptr->background.gray = png_get_uint_16(buf);
- }
- else
- {
- png_ptr->background.red = png_get_uint_16(buf);
- png_ptr->background.green = png_get_uint_16(buf + 2);
- png_ptr->background.blue = png_get_uint_16(buf + 4);
- }
-
- png_set_bKGD(png_ptr, info_ptr, &(png_ptr->background));
-}
-#endif
-
-#if defined(PNG_READ_hIST_SUPPORTED)
-void /* PRIVATE */
-png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- unsigned int num, i;
- png_uint_16 readbuf[PNG_MAX_PALETTE_LENGTH];
-
- png_debug(1, "in png_handle_hIST\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before hIST");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid hIST after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (!(png_ptr->mode & PNG_HAVE_PLTE))
- {
- png_warning(png_ptr, "Missing PLTE before hIST");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST))
- {
- png_warning(png_ptr, "Duplicate hIST chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- num = length / 2 ;
- if (num != (unsigned int) png_ptr->num_palette || num >
- (unsigned int) PNG_MAX_PALETTE_LENGTH)
- {
- png_warning(png_ptr, "Incorrect hIST chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- for (i = 0; i < num; i++)
- {
- png_byte buf[2];
-
- png_crc_read(png_ptr, buf, 2);
- readbuf[i] = png_get_uint_16(buf);
- }
-
- if (png_crc_finish(png_ptr, 0))
- return;
-
- png_set_hIST(png_ptr, info_ptr, readbuf);
-}
-#endif
-
-#if defined(PNG_READ_pHYs_SUPPORTED)
-void /* PRIVATE */
-png_handle_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_byte buf[9];
- png_uint_32 res_x, res_y;
- int unit_type;
-
- png_debug(1, "in png_handle_pHYs\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before pHYs");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid pHYs after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
- {
- png_warning(png_ptr, "Duplicate pHYs chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (length != 9)
- {
- png_warning(png_ptr, "Incorrect pHYs chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, 9);
- if (png_crc_finish(png_ptr, 0))
- return;
-
- res_x = png_get_uint_32(buf);
- res_y = png_get_uint_32(buf + 4);
- unit_type = buf[8];
- png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type);
-}
-#endif
-
-#if defined(PNG_READ_oFFs_SUPPORTED)
-void /* PRIVATE */
-png_handle_oFFs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_byte buf[9];
- png_int_32 offset_x, offset_y;
- int unit_type;
-
- png_debug(1, "in png_handle_oFFs\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before oFFs");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid oFFs after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
- {
- png_warning(png_ptr, "Duplicate oFFs chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (length != 9)
- {
- png_warning(png_ptr, "Incorrect oFFs chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, 9);
- if (png_crc_finish(png_ptr, 0))
- return;
-
- offset_x = png_get_int_32(buf);
- offset_y = png_get_int_32(buf + 4);
- unit_type = buf[8];
- png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type);
-}
-#endif
-
-#if defined(PNG_READ_pCAL_SUPPORTED)
-/* read the pCAL chunk (described in the PNG Extensions document) */
-void /* PRIVATE */
-png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_charp purpose;
- png_int_32 X0, X1;
- png_byte type, nparams;
- png_charp buf, units, endptr;
- png_charpp params;
- png_size_t slength;
- int i;
-
- png_debug(1, "in png_handle_pCAL\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before pCAL");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid pCAL after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL))
- {
- png_warning(png_ptr, "Duplicate pCAL chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_debug1(2, "Allocating and reading pCAL chunk data (%lu bytes)\n",
- length + 1);
- purpose = (png_charp)png_malloc_warn(png_ptr, length + 1);
- if (purpose == NULL)
- {
- png_warning(png_ptr, "No memory for pCAL purpose.");
- return;
- }
- slength = (png_size_t)length;
- png_crc_read(png_ptr, (png_bytep)purpose, slength);
-
- if (png_crc_finish(png_ptr, 0))
- {
- png_free(png_ptr, purpose);
- return;
- }
-
- purpose[slength] = 0x00; /* null terminate the last string */
-
- png_debug(3, "Finding end of pCAL purpose string\n");
- for (buf = purpose; *buf; buf++)
- /* empty loop */ ;
-
- endptr = purpose + slength;
-
- /* We need to have at least 12 bytes after the purpose string
- in order to get the parameter information. */
- if (endptr <= buf + 12)
- {
- png_warning(png_ptr, "Invalid pCAL data");
- png_free(png_ptr, purpose);
- return;
- }
-
- png_debug(3, "Reading pCAL X0, X1, type, nparams, and units\n");
- X0 = png_get_int_32((png_bytep)buf+1);
- X1 = png_get_int_32((png_bytep)buf+5);
- type = buf[9];
- nparams = buf[10];
- units = buf + 11;
-
- png_debug(3, "Checking pCAL equation type and number of parameters\n");
- /* Check that we have the right number of parameters for known
- equation types. */
- if ((type == PNG_EQUATION_LINEAR && nparams != 2) ||
- (type == PNG_EQUATION_BASE_E && nparams != 3) ||
- (type == PNG_EQUATION_ARBITRARY && nparams != 3) ||
- (type == PNG_EQUATION_HYPERBOLIC && nparams != 4))
- {
- png_warning(png_ptr, "Invalid pCAL parameters for equation type");
- png_free(png_ptr, purpose);
- return;
- }
- else if (type >= PNG_EQUATION_LAST)
- {
- png_warning(png_ptr, "Unrecognized equation type for pCAL chunk");
- }
-
- for (buf = units; *buf; buf++)
- /* Empty loop to move past the units string. */ ;
-
- png_debug(3, "Allocating pCAL parameters array\n");
- params = (png_charpp)png_malloc_warn(png_ptr, (png_uint_32)(nparams
- *png_sizeof(png_charp))) ;
- if (params == NULL)
- {
- png_free(png_ptr, purpose);
- png_warning(png_ptr, "No memory for pCAL params.");
- return;
- }
-
- /* Get pointers to the start of each parameter string. */
- for (i = 0; i < (int)nparams; i++)
- {
- buf++; /* Skip the null string terminator from previous parameter. */
-
- png_debug1(3, "Reading pCAL parameter %d\n", i);
- for (params[i] = buf; buf <= endptr && *buf != 0x00; buf++)
- /* Empty loop to move past each parameter string */ ;
-
- /* Make sure we haven't run out of data yet */
- if (buf > endptr)
- {
- png_warning(png_ptr, "Invalid pCAL data");
- png_free(png_ptr, purpose);
- png_free(png_ptr, params);
- return;
- }
- }
-
- png_set_pCAL(png_ptr, info_ptr, purpose, X0, X1, type, nparams,
- units, params);
-
- png_free(png_ptr, purpose);
- png_free(png_ptr, params);
-}
-#endif
-
-#if defined(PNG_READ_sCAL_SUPPORTED)
-/* read the sCAL chunk */
-void /* PRIVATE */
-png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_charp buffer, ep;
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- double width, height;
- png_charp vp;
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_charp swidth, sheight;
-#endif
-#endif
- png_size_t slength;
-
- png_debug(1, "in png_handle_sCAL\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before sCAL");
- else if (png_ptr->mode & PNG_HAVE_IDAT)
- {
- png_warning(png_ptr, "Invalid sCAL after IDAT");
- png_crc_finish(png_ptr, length);
- return;
- }
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL))
- {
- png_warning(png_ptr, "Duplicate sCAL chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_debug1(2, "Allocating and reading sCAL chunk data (%lu bytes)\n",
- length + 1);
- buffer = (png_charp)png_malloc_warn(png_ptr, length + 1);
- if (buffer == NULL)
- {
- png_warning(png_ptr, "Out of memory while processing sCAL chunk");
- return;
- }
- slength = (png_size_t)length;
- png_crc_read(png_ptr, (png_bytep)buffer, slength);
-
- if (png_crc_finish(png_ptr, 0))
- {
- png_free(png_ptr, buffer);
- return;
- }
-
- buffer[slength] = 0x00; /* null terminate the last string */
-
- ep = buffer + 1; /* skip unit byte */
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- width = png_strtod(png_ptr, ep, &vp);
- if (*vp)
- {
- png_warning(png_ptr, "malformed width string in sCAL chunk");
- return;
- }
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
- swidth = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1);
- if (swidth == NULL)
- {
- png_warning(png_ptr, "Out of memory while processing sCAL chunk width");
- return;
- }
- png_memcpy(swidth, ep, (png_size_t)png_strlen(ep));
-#endif
-#endif
-
- for (ep = buffer; *ep; ep++)
- /* empty loop */ ;
- ep++;
-
- if (buffer + slength < ep)
- {
- png_warning(png_ptr, "Truncated sCAL chunk");
-#if defined(PNG_FIXED_POINT_SUPPORTED) && \
- !defined(PNG_FLOATING_POINT_SUPPORTED)
- png_free(png_ptr, swidth);
-#endif
- png_free(png_ptr, buffer);
- return;
- }
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- height = png_strtod(png_ptr, ep, &vp);
- if (*vp)
- {
- png_warning(png_ptr, "malformed height string in sCAL chunk");
- return;
- }
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
- sheight = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1);
- if (sheight == NULL)
- {
- png_warning(png_ptr, "Out of memory while processing sCAL chunk height");
- return;
- }
- png_memcpy(sheight, ep, (png_size_t)png_strlen(ep));
-#endif
-#endif
-
- if (buffer + slength < ep
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- || width <= 0. || height <= 0.
-#endif
- )
- {
- png_warning(png_ptr, "Invalid sCAL data");
- png_free(png_ptr, buffer);
-#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
- png_free(png_ptr, swidth);
- png_free(png_ptr, sheight);
-#endif
- return;
- }
-
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- png_set_sCAL(png_ptr, info_ptr, buffer[0], width, height);
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_set_sCAL_s(png_ptr, info_ptr, buffer[0], swidth, sheight);
-#endif
-#endif
-
- png_free(png_ptr, buffer);
-#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
- png_free(png_ptr, swidth);
- png_free(png_ptr, sheight);
-#endif
-}
-#endif
-
-#if defined(PNG_READ_tIME_SUPPORTED)
-void /* PRIVATE */
-png_handle_tIME(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_byte buf[7];
- png_time mod_time;
-
- png_debug(1, "in png_handle_tIME\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Out of place tIME chunk");
- else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME))
- {
- png_warning(png_ptr, "Duplicate tIME chunk");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- if (png_ptr->mode & PNG_HAVE_IDAT)
- png_ptr->mode |= PNG_AFTER_IDAT;
-
- if (length != 7)
- {
- png_warning(png_ptr, "Incorrect tIME chunk length");
- png_crc_finish(png_ptr, length);
- return;
- }
-
- png_crc_read(png_ptr, buf, 7);
- if (png_crc_finish(png_ptr, 0))
- return;
-
- mod_time.second = buf[6];
- mod_time.minute = buf[5];
- mod_time.hour = buf[4];
- mod_time.day = buf[3];
- mod_time.month = buf[2];
- mod_time.year = png_get_uint_16(buf);
-
- png_set_tIME(png_ptr, info_ptr, &mod_time);
-}
-#endif
-
-#if defined(PNG_READ_tEXt_SUPPORTED)
-/* Note: this does not properly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_textp text_ptr;
- png_charp key;
- png_charp text;
- png_uint_32 skip = 0;
- png_size_t slength;
- int ret;
-
- png_debug(1, "in png_handle_tEXt\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before tEXt");
-
- if (png_ptr->mode & PNG_HAVE_IDAT)
- png_ptr->mode |= PNG_AFTER_IDAT;
-
-#ifdef PNG_MAX_MALLOC_64K
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr, "tEXt chunk too large to fit in memory");
- skip = length - (png_uint_32)65535L;
- length = (png_uint_32)65535L;
- }
-#endif
-
- key = (png_charp)png_malloc_warn(png_ptr, length + 1);
- if (key == NULL)
- {
- png_warning(png_ptr, "No memory to process text chunk.");
- return;
- }
- slength = (png_size_t)length;
- png_crc_read(png_ptr, (png_bytep)key, slength);
-
- if (png_crc_finish(png_ptr, skip))
- {
- png_free(png_ptr, key);
- return;
- }
-
- key[slength] = 0x00;
-
- for (text = key; *text; text++)
- /* empty loop to find end of key */ ;
-
- if (text != key + slength)
- text++;
-
- text_ptr = (png_textp)png_malloc_warn(png_ptr,
- (png_uint_32)png_sizeof(png_text));
- if (text_ptr == NULL)
- {
- png_warning(png_ptr, "Not enough memory to process text chunk.");
- png_free(png_ptr, key);
- return;
- }
- text_ptr->compression = PNG_TEXT_COMPRESSION_NONE;
- text_ptr->key = key;
-#ifdef PNG_iTXt_SUPPORTED
- text_ptr->lang = NULL;
- text_ptr->lang_key = NULL;
- text_ptr->itxt_length = 0;
-#endif
- text_ptr->text = text;
- text_ptr->text_length = png_strlen(text);
-
- ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1);
-
- png_free(png_ptr, key);
- png_free(png_ptr, text_ptr);
- if (ret)
- png_warning(png_ptr, "Insufficient memory to process text chunk.");
-}
-#endif
-
-#if defined(PNG_READ_zTXt_SUPPORTED)
-/* note: this does not correctly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_textp text_ptr;
- png_charp chunkdata;
- png_charp text;
- int comp_type;
- int ret;
- png_size_t slength, prefix_len, data_len;
-
- png_debug(1, "in png_handle_zTXt\n");
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before zTXt");
-
- if (png_ptr->mode & PNG_HAVE_IDAT)
- png_ptr->mode |= PNG_AFTER_IDAT;
-
-#ifdef PNG_MAX_MALLOC_64K
- /* We will no doubt have problems with chunks even half this size, but
- there is no hard and fast rule to tell us where to stop. */
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr,"zTXt chunk too large to fit in memory");
- png_crc_finish(png_ptr, length);
- return;
- }
-#endif
-
- chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1);
- if (chunkdata == NULL)
- {
- png_warning(png_ptr,"Out of memory processing zTXt chunk.");
- return;
- }
- slength = (png_size_t)length;
- png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
- if (png_crc_finish(png_ptr, 0))
- {
- png_free(png_ptr, chunkdata);
- return;
- }
-
- chunkdata[slength] = 0x00;
-
- for (text = chunkdata; *text; text++)
- /* empty loop */ ;
-
- /* zTXt must have some text after the chunkdataword */
- if (text >= chunkdata + slength - 2)
- {
- png_warning(png_ptr, "Truncated zTXt chunk");
- png_free(png_ptr, chunkdata);
- return;
- }
- else
- {
- comp_type = *(++text);
- if (comp_type != PNG_TEXT_COMPRESSION_zTXt)
- {
- png_warning(png_ptr, "Unknown compression type in zTXt chunk");
- comp_type = PNG_TEXT_COMPRESSION_zTXt;
- }
- text++; /* skip the compression_method byte */
- }
- prefix_len = text - chunkdata;
-
- chunkdata = (png_charp)png_decompress_chunk(png_ptr, comp_type, chunkdata,
- (png_size_t)length, prefix_len, &data_len);
-
- text_ptr = (png_textp)png_malloc_warn(png_ptr,
- (png_uint_32)png_sizeof(png_text));
- if (text_ptr == NULL)
- {
- png_warning(png_ptr,"Not enough memory to process zTXt chunk.");
- png_free(png_ptr, chunkdata);
- return;
- }
- text_ptr->compression = comp_type;
- text_ptr->key = chunkdata;
-#ifdef PNG_iTXt_SUPPORTED
- text_ptr->lang = NULL;
- text_ptr->lang_key = NULL;
- text_ptr->itxt_length = 0;
-#endif
- text_ptr->text = chunkdata + prefix_len;
- text_ptr->text_length = data_len;
-
- ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1);
-
- png_free(png_ptr, text_ptr);
- png_free(png_ptr, chunkdata);
- if (ret)
- png_error(png_ptr, "Insufficient memory to store zTXt chunk.");
-}
-#endif
-
-#if defined(PNG_READ_iTXt_SUPPORTED)
-/* note: this does not correctly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_textp text_ptr;
- png_charp chunkdata;
- png_charp key, lang, text, lang_key;
- int comp_flag;
- int comp_type = 0;
- int ret;
- png_size_t slength, prefix_len, data_len;
-
- png_debug(1, "in png_handle_iTXt\n");
-
- if (!(png_ptr->mode & PNG_HAVE_IHDR))
- png_error(png_ptr, "Missing IHDR before iTXt");
-
- if (png_ptr->mode & PNG_HAVE_IDAT)
- png_ptr->mode |= PNG_AFTER_IDAT;
-
-#ifdef PNG_MAX_MALLOC_64K
- /* We will no doubt have problems with chunks even half this size, but
- there is no hard and fast rule to tell us where to stop. */
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr,"iTXt chunk too large to fit in memory");
- png_crc_finish(png_ptr, length);
- return;
- }
-#endif
-
- chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1);
- if (chunkdata == NULL)
- {
- png_warning(png_ptr, "No memory to process iTXt chunk.");
- return;
- }
- slength = (png_size_t)length;
- png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
- if (png_crc_finish(png_ptr, 0))
- {
- png_free(png_ptr, chunkdata);
- return;
- }
-
- chunkdata[slength] = 0x00;
-
- for (lang = chunkdata; *lang; lang++)
- /* empty loop */ ;
- lang++; /* skip NUL separator */
-
- /* iTXt must have a language tag (possibly empty), two compression bytes,
- translated keyword (possibly empty), and possibly some text after the
- keyword */
-
- if (lang >= chunkdata + slength - 3)
- {
- png_warning(png_ptr, "Truncated iTXt chunk");
- png_free(png_ptr, chunkdata);
- return;
- }
- else
- {
- comp_flag = *lang++;
- comp_type = *lang++;
- }
-
- for (lang_key = lang; *lang_key; lang_key++)
- /* empty loop */ ;
- lang_key++; /* skip NUL separator */
-
- if (lang_key >= chunkdata + slength)
- {
- png_warning(png_ptr, "Truncated iTXt chunk");
- png_free(png_ptr, chunkdata);
- return;
- }
-
- for (text = lang_key; *text; text++)
- /* empty loop */ ;
- text++; /* skip NUL separator */
- if (text >= chunkdata + slength)
- {
- png_warning(png_ptr, "Malformed iTXt chunk");
- png_free(png_ptr, chunkdata);
- return;
- }
-
- prefix_len = text - chunkdata;
-
- key=chunkdata;
- if (comp_flag)
- chunkdata = png_decompress_chunk(png_ptr, comp_type, chunkdata,
- (size_t)length, prefix_len, &data_len);
- else
- data_len=png_strlen(chunkdata + prefix_len);
- text_ptr = (png_textp)png_malloc_warn(png_ptr,
- (png_uint_32)png_sizeof(png_text));
- if (text_ptr == NULL)
- {
- png_warning(png_ptr,"Not enough memory to process iTXt chunk.");
- png_free(png_ptr, chunkdata);
- return;
- }
- text_ptr->compression = (int)comp_flag + 1;
- text_ptr->lang_key = chunkdata+(lang_key-key);
- text_ptr->lang = chunkdata+(lang-key);
- text_ptr->itxt_length = data_len;
- text_ptr->text_length = 0;
- text_ptr->key = chunkdata;
- text_ptr->text = chunkdata + prefix_len;
-
- ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1);
-
- png_free(png_ptr, text_ptr);
- png_free(png_ptr, chunkdata);
- if (ret)
- png_error(png_ptr, "Insufficient memory to store iTXt chunk.");
-}
-#endif
-
-/* This function is called when we haven't found a handler for a
- chunk. If there isn't a problem with the chunk itself (ie bad
- chunk name, CRC, or a critical chunk), the chunk is silently ignored
- -- unless the PNG_FLAG_UNKNOWN_CHUNKS_SUPPORTED flag is on in which
- case it will be saved away to be written out later. */
-void /* PRIVATE */
-png_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-{
- png_uint_32 skip = 0;
-
- png_debug(1, "in png_handle_unknown\n");
-
- if (png_ptr->mode & PNG_HAVE_IDAT)
- {
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST PNG_IDAT;
-#endif
- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) /* not an IDAT */
- png_ptr->mode |= PNG_AFTER_IDAT;
- }
-
- png_check_chunk_name(png_ptr, png_ptr->chunk_name);
-
- if (!(png_ptr->chunk_name[0] & 0x20))
- {
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
- if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
- PNG_HANDLE_CHUNK_ALWAYS
-#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
- && png_ptr->read_user_chunk_fn == NULL
-#endif
- )
-#endif
- png_chunk_error(png_ptr, "unknown critical chunk");
- }
-
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
- if ((png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS) ||
- (png_ptr->read_user_chunk_fn != NULL))
- {
-#ifdef PNG_MAX_MALLOC_64K
- if (length > (png_uint_32)65535L)
- {
- png_warning(png_ptr, "unknown chunk too large to fit in memory");
- skip = length - (png_uint_32)65535L;
- length = (png_uint_32)65535L;
- }
-#endif
- png_memcpy((png_charp)png_ptr->unknown_chunk.name,
- (png_charp)png_ptr->chunk_name,
- png_sizeof(png_ptr->unknown_chunk.name));
- png_ptr->unknown_chunk.name[png_sizeof(png_ptr->unknown_chunk.name)-1] = '\0';
- png_ptr->unknown_chunk.size = (png_size_t)length;
- if (length == 0)
- png_ptr->unknown_chunk.data = NULL;
- else
- {
- png_ptr->unknown_chunk.data = (png_bytep)png_malloc(png_ptr, length);
- png_crc_read(png_ptr, (png_bytep)png_ptr->unknown_chunk.data, length);
- }
-#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
- if(png_ptr->read_user_chunk_fn != NULL)
- {
- /* callback to user unknown chunk handler */
- int ret;
- ret = (*(png_ptr->read_user_chunk_fn))
- (png_ptr, &png_ptr->unknown_chunk);
- if (ret < 0)
- png_chunk_error(png_ptr, "error in user chunk");
- if (ret == 0)
- {
- if (!(png_ptr->chunk_name[0] & 0x20))
- if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
- PNG_HANDLE_CHUNK_ALWAYS)
- png_chunk_error(png_ptr, "unknown critical chunk");
- png_set_unknown_chunks(png_ptr, info_ptr,
- &png_ptr->unknown_chunk, 1);
- }
- }
- else
-#endif
- png_set_unknown_chunks(png_ptr, info_ptr, &png_ptr->unknown_chunk, 1);
- png_free(png_ptr, png_ptr->unknown_chunk.data);
- png_ptr->unknown_chunk.data = NULL;
- }
- else
-#endif
- skip = length;
-
- png_crc_finish(png_ptr, skip);
-
-#if !defined(PNG_READ_USER_CHUNKS_SUPPORTED)
- info_ptr = info_ptr; /* quiet compiler warnings about unused info_ptr */
-#endif
-}
-
-/* This function is called to verify that a chunk name is valid.
- This function can't have the "critical chunk check" incorporated
- into it, since in the future we will need to be able to call user
- functions to handle unknown critical chunks after we check that
- the chunk name itself is valid. */
-
-#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
-
-void /* PRIVATE */
-png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name)
-{
- png_debug(1, "in png_check_chunk_name\n");
- if (isnonalpha(chunk_name[0]) || isnonalpha(chunk_name[1]) ||
- isnonalpha(chunk_name[2]) || isnonalpha(chunk_name[3]))
- {
- png_chunk_error(png_ptr, "invalid chunk type");
- }
-}
-
-/* Combines the row recently read in with the existing pixels in the
- row. This routine takes care of alpha and transparency if requested.
- This routine also handles the two methods of progressive display
- of interlaced images, depending on the mask value.
- The mask value describes which pixels are to be combined with
- the row. The pattern always repeats every 8 pixels, so just 8
- bits are needed. A one indicates the pixel is to be combined,
- a zero indicates the pixel is to be skipped. This is in addition
- to any alpha or transparency value associated with the pixel. If
- you want all pixels to be combined, pass 0xff (255) in mask. */
-
-void /* PRIVATE */
-png_combine_row(png_structp png_ptr, png_bytep row, int mask)
-{
- png_debug(1,"in png_combine_row\n");
- if (mask == 0xff)
- {
- png_memcpy(row, png_ptr->row_buf + 1,
- PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->width));
- }
- else
- {
- switch (png_ptr->row_info.pixel_depth)
- {
- case 1:
- {
- png_bytep sp = png_ptr->row_buf + 1;
- png_bytep dp = row;
- int s_inc, s_start, s_end;
- int m = 0x80;
- int shift;
- png_uint_32 i;
- png_uint_32 row_width = png_ptr->width;
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_PACKSWAP)
- {
- s_start = 0;
- s_end = 7;
- s_inc = 1;
- }
- else
-#endif
- {
- s_start = 7;
- s_end = 0;
- s_inc = -1;
- }
-
- shift = s_start;
-
- for (i = 0; i < row_width; i++)
- {
- if (m & mask)
- {
- int value;
-
- value = (*sp >> shift) & 0x01;
- *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
- *dp |= (png_byte)(value << shift);
- }
-
- if (shift == s_end)
- {
- shift = s_start;
- sp++;
- dp++;
- }
- else
- shift += s_inc;
-
- if (m == 1)
- m = 0x80;
- else
- m >>= 1;
- }
- break;
- }
- case 2:
- {
- png_bytep sp = png_ptr->row_buf + 1;
- png_bytep dp = row;
- int s_start, s_end, s_inc;
- int m = 0x80;
- int shift;
- png_uint_32 i;
- png_uint_32 row_width = png_ptr->width;
- int value;
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_PACKSWAP)
- {
- s_start = 0;
- s_end = 6;
- s_inc = 2;
- }
- else
-#endif
- {
- s_start = 6;
- s_end = 0;
- s_inc = -2;
- }
-
- shift = s_start;
-
- for (i = 0; i < row_width; i++)
- {
- if (m & mask)
- {
- value = (*sp >> shift) & 0x03;
- *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
- *dp |= (png_byte)(value << shift);
- }
-
- if (shift == s_end)
- {
- shift = s_start;
- sp++;
- dp++;
- }
- else
- shift += s_inc;
- if (m == 1)
- m = 0x80;
- else
- m >>= 1;
- }
- break;
- }
- case 4:
- {
- png_bytep sp = png_ptr->row_buf + 1;
- png_bytep dp = row;
- int s_start, s_end, s_inc;
- int m = 0x80;
- int shift;
- png_uint_32 i;
- png_uint_32 row_width = png_ptr->width;
- int value;
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_PACKSWAP)
- {
- s_start = 0;
- s_end = 4;
- s_inc = 4;
- }
- else
-#endif
- {
- s_start = 4;
- s_end = 0;
- s_inc = -4;
- }
- shift = s_start;
-
- for (i = 0; i < row_width; i++)
- {
- if (m & mask)
- {
- value = (*sp >> shift) & 0xf;
- *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
- *dp |= (png_byte)(value << shift);
- }
-
- if (shift == s_end)
- {
- shift = s_start;
- sp++;
- dp++;
- }
- else
- shift += s_inc;
- if (m == 1)
- m = 0x80;
- else
- m >>= 1;
- }
- break;
- }
- default:
- {
- png_bytep sp = png_ptr->row_buf + 1;
- png_bytep dp = row;
- png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3);
- png_uint_32 i;
- png_uint_32 row_width = png_ptr->width;
- png_byte m = 0x80;
-
-
- for (i = 0; i < row_width; i++)
- {
- if (m & mask)
- {
- png_memcpy(dp, sp, pixel_bytes);
- }
-
- sp += pixel_bytes;
- dp += pixel_bytes;
-
- if (m == 1)
- m = 0x80;
- else
- m >>= 1;
- }
- break;
- }
- }
- }
-}
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-/* OLD pre-1.0.9 interface:
-void png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
- png_uint_32 transformations)
- */
-void /* PRIVATE */
-png_do_read_interlace(png_structp png_ptr)
-{
- png_row_infop row_info = &(png_ptr->row_info);
- png_bytep row = png_ptr->row_buf + 1;
- int pass = png_ptr->pass;
- png_uint_32 transformations = png_ptr->transformations;
-#ifdef PNG_USE_LOCAL_ARRAYS
- /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
- /* offset to next interlace block */
- PNG_CONST int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-#endif
-
- png_debug(1,"in png_do_read_interlace\n");
- if (row != NULL && row_info != NULL)
- {
- png_uint_32 final_width;
-
- final_width = row_info->width * png_pass_inc[pass];
-
- switch (row_info->pixel_depth)
- {
- case 1:
- {
- png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3);
- png_bytep dp = row + (png_size_t)((final_width - 1) >> 3);
- int sshift, dshift;
- int s_start, s_end, s_inc;
- int jstop = png_pass_inc[pass];
- png_byte v;
- png_uint_32 i;
- int j;
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (transformations & PNG_PACKSWAP)
- {
- sshift = (int)((row_info->width + 7) & 0x07);
- dshift = (int)((final_width + 7) & 0x07);
- s_start = 7;
- s_end = 0;
- s_inc = -1;
- }
- else
-#endif
- {
- sshift = 7 - (int)((row_info->width + 7) & 0x07);
- dshift = 7 - (int)((final_width + 7) & 0x07);
- s_start = 0;
- s_end = 7;
- s_inc = 1;
- }
-
- for (i = 0; i < row_info->width; i++)
- {
- v = (png_byte)((*sp >> sshift) & 0x01);
- for (j = 0; j < jstop; j++)
- {
- *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff);
- *dp |= (png_byte)(v << dshift);
- if (dshift == s_end)
- {
- dshift = s_start;
- dp--;
- }
- else
- dshift += s_inc;
- }
- if (sshift == s_end)
- {
- sshift = s_start;
- sp--;
- }
- else
- sshift += s_inc;
- }
- break;
- }
- case 2:
- {
- png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2);
- png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2);
- int sshift, dshift;
- int s_start, s_end, s_inc;
- int jstop = png_pass_inc[pass];
- png_uint_32 i;
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (transformations & PNG_PACKSWAP)
- {
- sshift = (int)(((row_info->width + 3) & 0x03) << 1);
- dshift = (int)(((final_width + 3) & 0x03) << 1);
- s_start = 6;
- s_end = 0;
- s_inc = -2;
- }
- else
-#endif
- {
- sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
- dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1);
- s_start = 0;
- s_end = 6;
- s_inc = 2;
- }
-
- for (i = 0; i < row_info->width; i++)
- {
- png_byte v;
- int j;
-
- v = (png_byte)((*sp >> sshift) & 0x03);
- for (j = 0; j < jstop; j++)
- {
- *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff);
- *dp |= (png_byte)(v << dshift);
- if (dshift == s_end)
- {
- dshift = s_start;
- dp--;
- }
- else
- dshift += s_inc;
- }
- if (sshift == s_end)
- {
- sshift = s_start;
- sp--;
- }
- else
- sshift += s_inc;
- }
- break;
- }
- case 4:
- {
- png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1);
- png_bytep dp = row + (png_size_t)((final_width - 1) >> 1);
- int sshift, dshift;
- int s_start, s_end, s_inc;
- png_uint_32 i;
- int jstop = png_pass_inc[pass];
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (transformations & PNG_PACKSWAP)
- {
- sshift = (int)(((row_info->width + 1) & 0x01) << 2);
- dshift = (int)(((final_width + 1) & 0x01) << 2);
- s_start = 4;
- s_end = 0;
- s_inc = -4;
- }
- else
-#endif
- {
- sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
- dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2);
- s_start = 0;
- s_end = 4;
- s_inc = 4;
- }
-
- for (i = 0; i < row_info->width; i++)
- {
- png_byte v = (png_byte)((*sp >> sshift) & 0xf);
- int j;
-
- for (j = 0; j < jstop; j++)
- {
- *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff);
- *dp |= (png_byte)(v << dshift);
- if (dshift == s_end)
- {
- dshift = s_start;
- dp--;
- }
- else
- dshift += s_inc;
- }
- if (sshift == s_end)
- {
- sshift = s_start;
- sp--;
- }
- else
- sshift += s_inc;
- }
- break;
- }
- default:
- {
- png_size_t pixel_bytes = (row_info->pixel_depth >> 3);
- png_bytep sp = row + (png_size_t)(row_info->width - 1) * pixel_bytes;
- png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes;
-
- int jstop = png_pass_inc[pass];
- png_uint_32 i;
-
- for (i = 0; i < row_info->width; i++)
- {
- png_byte v[8];
- int j;
-
- png_memcpy(v, sp, pixel_bytes);
- for (j = 0; j < jstop; j++)
- {
- png_memcpy(dp, v, pixel_bytes);
- dp -= pixel_bytes;
- }
- sp -= pixel_bytes;
- }
- break;
- }
- }
- row_info->width = final_width;
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,final_width);
- }
-#if !defined(PNG_READ_PACKSWAP_SUPPORTED)
- transformations = transformations; /* silence compiler warning */
-#endif
-}
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-
-void /* PRIVATE */
-png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep row,
- png_bytep prev_row, int filter)
-{
- png_debug(1, "in png_read_filter_row\n");
- png_debug2(2,"row = %lu, filter = %d\n", png_ptr->row_number, filter);
- switch (filter)
- {
- case PNG_FILTER_VALUE_NONE:
- break;
- case PNG_FILTER_VALUE_SUB:
- {
- png_uint_32 i;
- png_uint_32 istop = row_info->rowbytes;
- png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3;
- png_bytep rp = row + bpp;
- png_bytep lp = row;
-
- for (i = bpp; i < istop; i++)
- {
- *rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff);
- rp++;
- }
- break;
- }
- case PNG_FILTER_VALUE_UP:
- {
- png_uint_32 i;
- png_uint_32 istop = row_info->rowbytes;
- png_bytep rp = row;
- png_bytep pp = prev_row;
-
- for (i = 0; i < istop; i++)
- {
- *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
- rp++;
- }
- break;
- }
- case PNG_FILTER_VALUE_AVG:
- {
- png_uint_32 i;
- png_bytep rp = row;
- png_bytep pp = prev_row;
- png_bytep lp = row;
- png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3;
- png_uint_32 istop = row_info->rowbytes - bpp;
-
- for (i = 0; i < bpp; i++)
- {
- *rp = (png_byte)(((int)(*rp) +
- ((int)(*pp++) / 2 )) & 0xff);
- rp++;
- }
-
- for (i = 0; i < istop; i++)
- {
- *rp = (png_byte)(((int)(*rp) +
- (int)(*pp++ + *lp++) / 2 ) & 0xff);
- rp++;
- }
- break;
- }
- case PNG_FILTER_VALUE_PAETH:
- {
- png_uint_32 i;
- png_bytep rp = row;
- png_bytep pp = prev_row;
- png_bytep lp = row;
- png_bytep cp = prev_row;
- png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3;
- png_uint_32 istop=row_info->rowbytes - bpp;
-
- for (i = 0; i < bpp; i++)
- {
- *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
- rp++;
- }
-
- for (i = 0; i < istop; i++) /* use leftover rp,pp */
- {
- int a, b, c, pa, pb, pc, p;
-
- a = *lp++;
- b = *pp++;
- c = *cp++;
-
- p = b - c;
- pc = a - c;
-
-#ifdef PNG_USE_ABS
- pa = abs(p);
- pb = abs(pc);
- pc = abs(p + pc);
-#else
- pa = p < 0 ? -p : p;
- pb = pc < 0 ? -pc : pc;
- pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#endif
-
- /*
- if (pa <= pb && pa <= pc)
- p = a;
- else if (pb <= pc)
- p = b;
- else
- p = c;
- */
-
- p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
-
- *rp = (png_byte)(((int)(*rp) + p) & 0xff);
- rp++;
- }
- break;
- }
- default:
- png_warning(png_ptr, "Ignoring bad adaptive filter type");
- *row=0;
- break;
- }
-}
-
-void /* PRIVATE */
-png_read_finish_row(png_structp png_ptr)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
-#ifdef PNG_READ_INTERLACING_SUPPORTED
- /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
- /* start of interlace block */
- PNG_CONST int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
- /* offset to next interlace block */
- PNG_CONST int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
- /* start of interlace block in the y direction */
- PNG_CONST int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
- /* offset to next interlace block in the y direction */
- PNG_CONST int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-#endif
-
- png_debug(1, "in png_read_finish_row\n");
- png_ptr->row_number++;
- if (png_ptr->row_number < png_ptr->num_rows)
- return;
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
- if (png_ptr->interlaced)
- {
- png_ptr->row_number = 0;
- png_memset_check(png_ptr, png_ptr->prev_row, 0,
- png_ptr->rowbytes + 1);
- do
- {
- png_ptr->pass++;
- if (png_ptr->pass >= 7)
- break;
- png_ptr->iwidth = (png_ptr->width +
- png_pass_inc[png_ptr->pass] - 1 -
- png_pass_start[png_ptr->pass]) /
- png_pass_inc[png_ptr->pass];
-
- png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,
- png_ptr->iwidth) + 1;
-
- if (!(png_ptr->transformations & PNG_INTERLACE))
- {
- png_ptr->num_rows = (png_ptr->height +
- png_pass_yinc[png_ptr->pass] - 1 -
- png_pass_ystart[png_ptr->pass]) /
- png_pass_yinc[png_ptr->pass];
- if (!(png_ptr->num_rows))
- continue;
- }
- else /* if (png_ptr->transformations & PNG_INTERLACE) */
- break;
- } while (png_ptr->iwidth == 0);
-
- if (png_ptr->pass < 7)
- return;
- }
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
- {
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_CONST PNG_IDAT;
-#endif
- char extra;
- int ret;
-
- png_ptr->zstream.next_out = (Byte *)&extra;
- png_ptr->zstream.avail_out = (uInt)1;
- for(;;)
- {
- if (!(png_ptr->zstream.avail_in))
- {
- while (!png_ptr->idat_size)
- {
- png_byte chunk_length[4];
-
- png_crc_finish(png_ptr, 0);
-
- png_read_data(png_ptr, chunk_length, 4);
- png_ptr->idat_size = png_get_uint_31(png_ptr, chunk_length);
- png_reset_crc(png_ptr);
- png_crc_read(png_ptr, png_ptr->chunk_name, 4);
- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
- png_error(png_ptr, "Not enough image data");
-
- }
- png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
- png_ptr->zstream.next_in = png_ptr->zbuf;
- if (png_ptr->zbuf_size > png_ptr->idat_size)
- png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size;
- png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zstream.avail_in);
- png_ptr->idat_size -= png_ptr->zstream.avail_in;
- }
- ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
- if (ret == Z_STREAM_END)
- {
- if (!(png_ptr->zstream.avail_out) || png_ptr->zstream.avail_in ||
- png_ptr->idat_size)
- png_warning(png_ptr, "Extra compressed data");
- png_ptr->mode |= PNG_AFTER_IDAT;
- png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
- break;
- }
- if (ret != Z_OK)
- png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg :
- "Decompression Error");
-
- if (!(png_ptr->zstream.avail_out))
- {
- png_warning(png_ptr, "Extra compressed data.");
- png_ptr->mode |= PNG_AFTER_IDAT;
- png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
- break;
- }
-
- }
- png_ptr->zstream.avail_out = 0;
- }
-
- if (png_ptr->idat_size || png_ptr->zstream.avail_in)
- png_warning(png_ptr, "Extra compression data");
-
- inflateReset(&png_ptr->zstream);
-
- png_ptr->mode |= PNG_AFTER_IDAT;
-}
-
-void /* PRIVATE */
-png_read_start_row(png_structp png_ptr)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
-#ifdef PNG_READ_INTERLACING_SUPPORTED
- /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
- /* start of interlace block */
- PNG_CONST int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
- /* offset to next interlace block */
- PNG_CONST int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
- /* start of interlace block in the y direction */
- PNG_CONST int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
- /* offset to next interlace block in the y direction */
- PNG_CONST int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-#endif
-
- int max_pixel_depth;
- png_uint_32 row_bytes;
-
- png_debug(1, "in png_read_start_row\n");
- png_ptr->zstream.avail_in = 0;
- png_init_read_transformations(png_ptr);
-#ifdef PNG_READ_INTERLACING_SUPPORTED
- if (png_ptr->interlaced)
- {
- if (!(png_ptr->transformations & PNG_INTERLACE))
- png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
- png_pass_ystart[0]) / png_pass_yinc[0];
- else
- png_ptr->num_rows = png_ptr->height;
-
- png_ptr->iwidth = (png_ptr->width +
- png_pass_inc[png_ptr->pass] - 1 -
- png_pass_start[png_ptr->pass]) /
- png_pass_inc[png_ptr->pass];
-
- row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1;
-
- png_ptr->irowbytes = (png_size_t)row_bytes;
- if((png_uint_32)png_ptr->irowbytes != row_bytes)
- png_error(png_ptr, "Rowbytes overflow in png_read_start_row");
- }
- else
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
- {
- png_ptr->num_rows = png_ptr->height;
- png_ptr->iwidth = png_ptr->width;
- png_ptr->irowbytes = png_ptr->rowbytes + 1;
- }
- max_pixel_depth = png_ptr->pixel_depth;
-
-#if defined(PNG_READ_PACK_SUPPORTED)
- if ((png_ptr->transformations & PNG_PACK) && png_ptr->bit_depth < 8)
- max_pixel_depth = 8;
-#endif
-
-#if defined(PNG_READ_EXPAND_SUPPORTED)
- if (png_ptr->transformations & PNG_EXPAND)
- {
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (png_ptr->num_trans)
- max_pixel_depth = 32;
- else
- max_pixel_depth = 24;
- }
- else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
- {
- if (max_pixel_depth < 8)
- max_pixel_depth = 8;
- if (png_ptr->num_trans)
- max_pixel_depth *= 2;
- }
- else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
- {
- if (png_ptr->num_trans)
- {
- max_pixel_depth *= 4;
- max_pixel_depth /= 3;
- }
- }
- }
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED)
- if (png_ptr->transformations & (PNG_FILLER))
- {
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- max_pixel_depth = 32;
- else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
- {
- if (max_pixel_depth <= 8)
- max_pixel_depth = 16;
- else
- max_pixel_depth = 32;
- }
- else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
- {
- if (max_pixel_depth <= 32)
- max_pixel_depth = 32;
- else
- max_pixel_depth = 64;
- }
- }
-#endif
-
-#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
- if (png_ptr->transformations & PNG_GRAY_TO_RGB)
- {
- if (
-#if defined(PNG_READ_EXPAND_SUPPORTED)
- (png_ptr->num_trans && (png_ptr->transformations & PNG_EXPAND)) ||
-#endif
-#if defined(PNG_READ_FILLER_SUPPORTED)
- (png_ptr->transformations & (PNG_FILLER)) ||
-#endif
- png_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
- if (max_pixel_depth <= 16)
- max_pixel_depth = 32;
- else
- max_pixel_depth = 64;
- }
- else
- {
- if (max_pixel_depth <= 8)
- {
- if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- max_pixel_depth = 32;
- else
- max_pixel_depth = 24;
- }
- else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- max_pixel_depth = 64;
- else
- max_pixel_depth = 48;
- }
- }
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) && \
-defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
- if(png_ptr->transformations & PNG_USER_TRANSFORM)
- {
- int user_pixel_depth=png_ptr->user_transform_depth*
- png_ptr->user_transform_channels;
- if(user_pixel_depth > max_pixel_depth)
- max_pixel_depth=user_pixel_depth;
- }
-#endif
-
- /* align the width on the next larger 8 pixels. Mainly used
- for interlacing */
- row_bytes = ((png_ptr->width + 7) & ~((png_uint_32)7));
- /* calculate the maximum bytes needed, adding a byte and a pixel
- for safety's sake */
- row_bytes = PNG_ROWBYTES(max_pixel_depth,row_bytes) +
- 1 + ((max_pixel_depth + 7) >> 3);
-#ifdef PNG_MAX_MALLOC_64K
- if (row_bytes > (png_uint_32)65536L)
- png_error(png_ptr, "This image requires a row greater than 64KB");
-#endif
-
- if(row_bytes + 64 > png_ptr->old_big_row_buf_size)
- {
- png_free(png_ptr,png_ptr->big_row_buf);
- png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64);
- png_ptr->row_buf = png_ptr->big_row_buf+32;
- png_ptr->old_big_row_buf_size = row_bytes+64;
- }
-
-#ifdef PNG_MAX_MALLOC_64K
- if ((png_uint_32)png_ptr->rowbytes + 1 > (png_uint_32)65536L)
- png_error(png_ptr, "This image requires a row greater than 64KB");
-#endif
- if ((png_uint_32)png_ptr->rowbytes > (png_uint_32)(PNG_SIZE_MAX - 1))
- png_error(png_ptr, "Row has too many bytes to allocate in memory.");
-
- if(png_ptr->rowbytes+1 > png_ptr->old_prev_row_size)
- {
- png_free(png_ptr,png_ptr->prev_row);
- png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)(
- png_ptr->rowbytes + 1));
- png_ptr->old_prev_row_size = png_ptr->rowbytes+1;
- }
-
- png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
-
- png_debug1(3, "width = %lu,\n", png_ptr->width);
- png_debug1(3, "height = %lu,\n", png_ptr->height);
- png_debug1(3, "iwidth = %lu,\n", png_ptr->iwidth);
- png_debug1(3, "num_rows = %lu\n", png_ptr->num_rows);
- png_debug1(3, "rowbytes = %lu,\n", png_ptr->rowbytes);
- png_debug1(3, "irowbytes = %lu,\n", png_ptr->irowbytes);
-
- png_ptr->flags |= PNG_FLAG_ROW_INIT;
-}
-#endif /* PNG_READ_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngset.c b/Build/source/libs/libpng/pngset.c
deleted file mode 100644
index 8b25ca504c5..00000000000
--- a/Build/source/libs/libpng/pngset.c
+++ /dev/null
@@ -1,1268 +0,0 @@
-
-/* pngset.c - storage of image information into info struct
- *
- * Last changed in libpng 1.2.27 [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * The functions here are used during reads to store data from the file
- * into the info struct, and during writes to store application data
- * into the info struct for writing into the file. This abstracts the
- * info struct and allows us to change the structure in the future.
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-#if defined(PNG_bKGD_SUPPORTED)
-void PNGAPI
-png_set_bKGD(png_structp png_ptr, png_infop info_ptr, png_color_16p background)
-{
- png_debug1(1, "in %s storage function\n", "bKGD");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- png_memcpy(&(info_ptr->background), background, png_sizeof(png_color_16));
- info_ptr->valid |= PNG_INFO_bKGD;
-}
-#endif
-
-#if defined(PNG_cHRM_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_cHRM(png_structp png_ptr, png_infop info_ptr,
- double white_x, double white_y, double red_x, double red_y,
- double green_x, double green_y, double blue_x, double blue_y)
-{
- png_debug1(1, "in %s storage function\n", "cHRM");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
- if (!(white_x || white_y || red_x || red_y || green_x || green_y ||
- blue_x || blue_y))
- {
- png_warning(png_ptr,
- "Ignoring attempt to set all-zero chromaticity values");
- return;
- }
- if (white_x < 0.0 || white_y < 0.0 ||
- red_x < 0.0 || red_y < 0.0 ||
- green_x < 0.0 || green_y < 0.0 ||
- blue_x < 0.0 || blue_y < 0.0)
- {
- png_warning(png_ptr,
- "Ignoring attempt to set negative chromaticity value");
- return;
- }
- if (white_x > 21474.83 || white_y > 21474.83 ||
- red_x > 21474.83 || red_y > 21474.83 ||
- green_x > 21474.83 || green_y > 21474.83 ||
- blue_x > 21474.83 || blue_y > 21474.83)
- {
- png_warning(png_ptr,
- "Ignoring attempt to set chromaticity value exceeding 21474.83");
- return;
- }
-
- info_ptr->x_white = (float)white_x;
- info_ptr->y_white = (float)white_y;
- info_ptr->x_red = (float)red_x;
- info_ptr->y_red = (float)red_y;
- info_ptr->x_green = (float)green_x;
- info_ptr->y_green = (float)green_y;
- info_ptr->x_blue = (float)blue_x;
- info_ptr->y_blue = (float)blue_y;
-#ifdef PNG_FIXED_POINT_SUPPORTED
- info_ptr->int_x_white = (png_fixed_point)(white_x*100000.+0.5);
- info_ptr->int_y_white = (png_fixed_point)(white_y*100000.+0.5);
- info_ptr->int_x_red = (png_fixed_point)( red_x*100000.+0.5);
- info_ptr->int_y_red = (png_fixed_point)( red_y*100000.+0.5);
- info_ptr->int_x_green = (png_fixed_point)(green_x*100000.+0.5);
- info_ptr->int_y_green = (png_fixed_point)(green_y*100000.+0.5);
- info_ptr->int_x_blue = (png_fixed_point)( blue_x*100000.+0.5);
- info_ptr->int_y_blue = (png_fixed_point)( blue_y*100000.+0.5);
-#endif
- info_ptr->valid |= PNG_INFO_cHRM;
-}
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-void PNGAPI
-png_set_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
- png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x,
- png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y,
- png_fixed_point blue_x, png_fixed_point blue_y)
-{
- png_debug1(1, "in %s storage function\n", "cHRM");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- if (!(white_x || white_y || red_x || red_y || green_x || green_y ||
- blue_x || blue_y))
- {
- png_warning(png_ptr,
- "Ignoring attempt to set all-zero chromaticity values");
- return;
- }
- if (white_x < 0 || white_y < 0 ||
- red_x < 0 || red_y < 0 ||
- green_x < 0 || green_y < 0 ||
- blue_x < 0 || blue_y < 0)
- {
- png_warning(png_ptr,
- "Ignoring attempt to set negative chromaticity value");
- return;
- }
- if (white_x > (png_fixed_point) PNG_UINT_31_MAX ||
- white_y > (png_fixed_point) PNG_UINT_31_MAX ||
- red_x > (png_fixed_point) PNG_UINT_31_MAX ||
- red_y > (png_fixed_point) PNG_UINT_31_MAX ||
- green_x > (png_fixed_point) PNG_UINT_31_MAX ||
- green_y > (png_fixed_point) PNG_UINT_31_MAX ||
- blue_x > (png_fixed_point) PNG_UINT_31_MAX ||
- blue_y > (png_fixed_point) PNG_UINT_31_MAX )
- {
- png_warning(png_ptr,
- "Ignoring attempt to set chromaticity value exceeding 21474.83");
- return;
- }
- info_ptr->int_x_white = white_x;
- info_ptr->int_y_white = white_y;
- info_ptr->int_x_red = red_x;
- info_ptr->int_y_red = red_y;
- info_ptr->int_x_green = green_x;
- info_ptr->int_y_green = green_y;
- info_ptr->int_x_blue = blue_x;
- info_ptr->int_y_blue = blue_y;
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- info_ptr->x_white = (float)(white_x/100000.);
- info_ptr->y_white = (float)(white_y/100000.);
- info_ptr->x_red = (float)( red_x/100000.);
- info_ptr->y_red = (float)( red_y/100000.);
- info_ptr->x_green = (float)(green_x/100000.);
- info_ptr->y_green = (float)(green_y/100000.);
- info_ptr->x_blue = (float)( blue_x/100000.);
- info_ptr->y_blue = (float)( blue_y/100000.);
-#endif
- info_ptr->valid |= PNG_INFO_cHRM;
-}
-#endif
-#endif
-
-#if defined(PNG_gAMA_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma)
-{
- double gamma;
- png_debug1(1, "in %s storage function\n", "gAMA");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- /* Check for overflow */
- if (file_gamma > 21474.83)
- {
- png_warning(png_ptr, "Limiting gamma to 21474.83");
- gamma=21474.83;
- }
- else
- gamma=file_gamma;
- info_ptr->gamma = (float)gamma;
-#ifdef PNG_FIXED_POINT_SUPPORTED
- info_ptr->int_gamma = (int)(gamma*100000.+.5);
-#endif
- info_ptr->valid |= PNG_INFO_gAMA;
- if(gamma == 0.0)
- png_warning(png_ptr, "Setting gamma=0");
-}
-#endif
-void PNGAPI
-png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point
- int_gamma)
-{
- png_fixed_point gamma;
-
- png_debug1(1, "in %s storage function\n", "gAMA");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- if (int_gamma > (png_fixed_point) PNG_UINT_31_MAX)
- {
- png_warning(png_ptr, "Limiting gamma to 21474.83");
- gamma=PNG_UINT_31_MAX;
- }
- else
- {
- if (int_gamma < 0)
- {
- png_warning(png_ptr, "Setting negative gamma to zero");
- gamma=0;
- }
- else
- gamma=int_gamma;
- }
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- info_ptr->gamma = (float)(gamma/100000.);
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- info_ptr->int_gamma = gamma;
-#endif
- info_ptr->valid |= PNG_INFO_gAMA;
- if(gamma == 0)
- png_warning(png_ptr, "Setting gamma=0");
-}
-#endif
-
-#if defined(PNG_hIST_SUPPORTED)
-void PNGAPI
-png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist)
-{
- int i;
-
- png_debug1(1, "in %s storage function\n", "hIST");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
- if (info_ptr->num_palette == 0 || info_ptr->num_palette
- > PNG_MAX_PALETTE_LENGTH)
- {
- png_warning(png_ptr,
- "Invalid palette size, hIST allocation skipped.");
- return;
- }
-
-#ifdef PNG_FREE_ME_SUPPORTED
- png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0);
-#endif
- /* Changed from info->num_palette to PNG_MAX_PALETTE_LENGTH in version
- 1.2.1 */
- png_ptr->hist = (png_uint_16p)png_malloc_warn(png_ptr,
- (png_uint_32)(PNG_MAX_PALETTE_LENGTH * png_sizeof (png_uint_16)));
- if (png_ptr->hist == NULL)
- {
- png_warning(png_ptr, "Insufficient memory for hIST chunk data.");
- return;
- }
-
- for (i = 0; i < info_ptr->num_palette; i++)
- png_ptr->hist[i] = hist[i];
- info_ptr->hist = png_ptr->hist;
- info_ptr->valid |= PNG_INFO_hIST;
-
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_HIST;
-#else
- png_ptr->flags |= PNG_FLAG_FREE_HIST;
-#endif
-}
-#endif
-
-void PNGAPI
-png_set_IHDR(png_structp png_ptr, png_infop info_ptr,
- png_uint_32 width, png_uint_32 height, int bit_depth,
- int color_type, int interlace_type, int compression_type,
- int filter_type)
-{
- png_debug1(1, "in %s storage function\n", "IHDR");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- /* check for width and height valid values */
- if (width == 0 || height == 0)
- png_error(png_ptr, "Image width or height is zero in IHDR");
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
- if (width > png_ptr->user_width_max || height > png_ptr->user_height_max)
- png_error(png_ptr, "image size exceeds user limits in IHDR");
-#else
- if (width > PNG_USER_WIDTH_MAX || height > PNG_USER_HEIGHT_MAX)
- png_error(png_ptr, "image size exceeds user limits in IHDR");
-#endif
- if (width > PNG_UINT_31_MAX || height > PNG_UINT_31_MAX)
- png_error(png_ptr, "Invalid image size in IHDR");
- if ( width > (PNG_UINT_32_MAX
- >> 3) /* 8-byte RGBA pixels */
- - 64 /* bigrowbuf hack */
- - 1 /* filter byte */
- - 7*8 /* rounding of width to multiple of 8 pixels */
- - 8) /* extra max_pixel_depth pad */
- png_warning(png_ptr, "Width is too large for libpng to process pixels");
-
- /* check other values */
- if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
- bit_depth != 8 && bit_depth != 16)
- png_error(png_ptr, "Invalid bit depth in IHDR");
-
- if (color_type < 0 || color_type == 1 ||
- color_type == 5 || color_type > 6)
- png_error(png_ptr, "Invalid color type in IHDR");
-
- if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) ||
- ((color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8))
- png_error(png_ptr, "Invalid color type/bit depth combination in IHDR");
-
- if (interlace_type >= PNG_INTERLACE_LAST)
- png_error(png_ptr, "Unknown interlace method in IHDR");
-
- if (compression_type != PNG_COMPRESSION_TYPE_BASE)
- png_error(png_ptr, "Unknown compression method in IHDR");
-
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- /* Accept filter_method 64 (intrapixel differencing) only if
- * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
- * 2. Libpng did not read a PNG signature (this filter_method is only
- * used in PNG datastreams that are embedded in MNG datastreams) and
- * 3. The application called png_permit_mng_features with a mask that
- * included PNG_FLAG_MNG_FILTER_64 and
- * 4. The filter_method is 64 and
- * 5. The color_type is RGB or RGBA
- */
- if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted)
- png_warning(png_ptr,"MNG features are not allowed in a PNG datastream");
- if(filter_type != PNG_FILTER_TYPE_BASE)
- {
- if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
- (filter_type == PNG_INTRAPIXEL_DIFFERENCING) &&
- ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
- (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA)))
- png_error(png_ptr, "Unknown filter method in IHDR");
- if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)
- png_warning(png_ptr, "Invalid filter method in IHDR");
- }
-#else
- if(filter_type != PNG_FILTER_TYPE_BASE)
- png_error(png_ptr, "Unknown filter method in IHDR");
-#endif
-
- info_ptr->width = width;
- info_ptr->height = height;
- info_ptr->bit_depth = (png_byte)bit_depth;
- info_ptr->color_type =(png_byte) color_type;
- info_ptr->compression_type = (png_byte)compression_type;
- info_ptr->filter_type = (png_byte)filter_type;
- info_ptr->interlace_type = (png_byte)interlace_type;
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- info_ptr->channels = 1;
- else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
- info_ptr->channels = 3;
- else
- info_ptr->channels = 1;
- if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
- info_ptr->channels++;
- info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
-
- /* check for potential overflow */
- if (width > (PNG_UINT_32_MAX
- >> 3) /* 8-byte RGBA pixels */
- - 64 /* bigrowbuf hack */
- - 1 /* filter byte */
- - 7*8 /* rounding of width to multiple of 8 pixels */
- - 8) /* extra max_pixel_depth pad */
- info_ptr->rowbytes = (png_size_t)0;
- else
- info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,width);
-}
-
-#if defined(PNG_oFFs_SUPPORTED)
-void PNGAPI
-png_set_oFFs(png_structp png_ptr, png_infop info_ptr,
- png_int_32 offset_x, png_int_32 offset_y, int unit_type)
-{
- png_debug1(1, "in %s storage function\n", "oFFs");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- info_ptr->x_offset = offset_x;
- info_ptr->y_offset = offset_y;
- info_ptr->offset_unit_type = (png_byte)unit_type;
- info_ptr->valid |= PNG_INFO_oFFs;
-}
-#endif
-
-#if defined(PNG_pCAL_SUPPORTED)
-void PNGAPI
-png_set_pCAL(png_structp png_ptr, png_infop info_ptr,
- png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams,
- png_charp units, png_charpp params)
-{
- png_uint_32 length;
- int i;
-
- png_debug1(1, "in %s storage function\n", "pCAL");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- length = png_strlen(purpose) + 1;
- png_debug1(3, "allocating purpose for info (%lu bytes)\n", length);
- info_ptr->pcal_purpose = (png_charp)png_malloc_warn(png_ptr, length);
- if (info_ptr->pcal_purpose == NULL)
- {
- png_warning(png_ptr, "Insufficient memory for pCAL purpose.");
- return;
- }
- png_memcpy(info_ptr->pcal_purpose, purpose, (png_size_t)length);
-
- png_debug(3, "storing X0, X1, type, and nparams in info\n");
- info_ptr->pcal_X0 = X0;
- info_ptr->pcal_X1 = X1;
- info_ptr->pcal_type = (png_byte)type;
- info_ptr->pcal_nparams = (png_byte)nparams;
-
- length = png_strlen(units) + 1;
- png_debug1(3, "allocating units for info (%lu bytes)\n", length);
- info_ptr->pcal_units = (png_charp)png_malloc_warn(png_ptr, length);
- if (info_ptr->pcal_units == NULL)
- {
- png_warning(png_ptr, "Insufficient memory for pCAL units.");
- return;
- }
- png_memcpy(info_ptr->pcal_units, units, (png_size_t)length);
-
- info_ptr->pcal_params = (png_charpp)png_malloc_warn(png_ptr,
- (png_uint_32)((nparams + 1) * png_sizeof(png_charp)));
- if (info_ptr->pcal_params == NULL)
- {
- png_warning(png_ptr, "Insufficient memory for pCAL params.");
- return;
- }
-
- info_ptr->pcal_params[nparams] = NULL;
-
- for (i = 0; i < nparams; i++)
- {
- length = png_strlen(params[i]) + 1;
- png_debug2(3, "allocating parameter %d for info (%lu bytes)\n", i, length);
- info_ptr->pcal_params[i] = (png_charp)png_malloc_warn(png_ptr, length);
- if (info_ptr->pcal_params[i] == NULL)
- {
- png_warning(png_ptr, "Insufficient memory for pCAL parameter.");
- return;
- }
- png_memcpy(info_ptr->pcal_params[i], params[i], (png_size_t)length);
- }
-
- info_ptr->valid |= PNG_INFO_pCAL;
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_PCAL;
-#endif
-}
-#endif
-
-#if defined(PNG_READ_sCAL_SUPPORTED) || defined(PNG_WRITE_sCAL_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_sCAL(png_structp png_ptr, png_infop info_ptr,
- int unit, double width, double height)
-{
- png_debug1(1, "in %s storage function\n", "sCAL");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- info_ptr->scal_unit = (png_byte)unit;
- info_ptr->scal_pixel_width = width;
- info_ptr->scal_pixel_height = height;
-
- info_ptr->valid |= PNG_INFO_sCAL;
-}
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
-void PNGAPI
-png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr,
- int unit, png_charp swidth, png_charp sheight)
-{
- png_uint_32 length;
-
- png_debug1(1, "in %s storage function\n", "sCAL");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- info_ptr->scal_unit = (png_byte)unit;
-
- length = png_strlen(swidth) + 1;
- png_debug1(3, "allocating unit for info (%d bytes)\n", length);
- info_ptr->scal_s_width = (png_charp)png_malloc_warn(png_ptr, length);
- if (info_ptr->scal_s_width == NULL)
- {
- png_warning(png_ptr,
- "Memory allocation failed while processing sCAL.");
- return;
- }
- png_memcpy(info_ptr->scal_s_width, swidth, (png_size_t)length);
-
- length = png_strlen(sheight) + 1;
- png_debug1(3, "allocating unit for info (%d bytes)\n", length);
- info_ptr->scal_s_height = (png_charp)png_malloc_warn(png_ptr, length);
- if (info_ptr->scal_s_height == NULL)
- {
- png_free (png_ptr, info_ptr->scal_s_width);
- png_warning(png_ptr,
- "Memory allocation failed while processing sCAL.");
- return;
- }
- png_memcpy(info_ptr->scal_s_height, sheight, (png_size_t)length);
- info_ptr->valid |= PNG_INFO_sCAL;
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_SCAL;
-#endif
-}
-#endif
-#endif
-#endif
-
-#if defined(PNG_pHYs_SUPPORTED)
-void PNGAPI
-png_set_pHYs(png_structp png_ptr, png_infop info_ptr,
- png_uint_32 res_x, png_uint_32 res_y, int unit_type)
-{
- png_debug1(1, "in %s storage function\n", "pHYs");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- info_ptr->x_pixels_per_unit = res_x;
- info_ptr->y_pixels_per_unit = res_y;
- info_ptr->phys_unit_type = (png_byte)unit_type;
- info_ptr->valid |= PNG_INFO_pHYs;
-}
-#endif
-
-void PNGAPI
-png_set_PLTE(png_structp png_ptr, png_infop info_ptr,
- png_colorp palette, int num_palette)
-{
-
- png_debug1(1, "in %s storage function\n", "PLTE");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- if (num_palette < 0 || num_palette > PNG_MAX_PALETTE_LENGTH)
- {
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- png_error(png_ptr, "Invalid palette length");
- else
- {
- png_warning(png_ptr, "Invalid palette length");
- return;
- }
- }
-
- /*
- * It may not actually be necessary to set png_ptr->palette here;
- * we do it for backward compatibility with the way the png_handle_tRNS
- * function used to do the allocation.
- */
-#ifdef PNG_FREE_ME_SUPPORTED
- png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
-#endif
-
- /* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
- of num_palette entries,
- in case of an invalid PNG file that has too-large sample values. */
- png_ptr->palette = (png_colorp)png_malloc(png_ptr,
- PNG_MAX_PALETTE_LENGTH * png_sizeof(png_color));
- png_memset(png_ptr->palette, 0, PNG_MAX_PALETTE_LENGTH *
- png_sizeof(png_color));
- png_memcpy(png_ptr->palette, palette, num_palette * png_sizeof (png_color));
- info_ptr->palette = png_ptr->palette;
- info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette;
-
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_PLTE;
-#else
- png_ptr->flags |= PNG_FLAG_FREE_PLTE;
-#endif
-
- info_ptr->valid |= PNG_INFO_PLTE;
-}
-
-#if defined(PNG_sBIT_SUPPORTED)
-void PNGAPI
-png_set_sBIT(png_structp png_ptr, png_infop info_ptr,
- png_color_8p sig_bit)
-{
- png_debug1(1, "in %s storage function\n", "sBIT");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- png_memcpy(&(info_ptr->sig_bit), sig_bit, png_sizeof (png_color_8));
- info_ptr->valid |= PNG_INFO_sBIT;
-}
-#endif
-
-#if defined(PNG_sRGB_SUPPORTED)
-void PNGAPI
-png_set_sRGB(png_structp png_ptr, png_infop info_ptr, int intent)
-{
- png_debug1(1, "in %s storage function\n", "sRGB");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- info_ptr->srgb_intent = (png_byte)intent;
- info_ptr->valid |= PNG_INFO_sRGB;
-}
-
-void PNGAPI
-png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr,
- int intent)
-{
-#if defined(PNG_gAMA_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- float file_gamma;
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_fixed_point int_file_gamma;
-#endif
-#endif
-#if defined(PNG_cHRM_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y;
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_fixed_point int_white_x, int_white_y, int_red_x, int_red_y, int_green_x,
- int_green_y, int_blue_x, int_blue_y;
-#endif
-#endif
- png_debug1(1, "in %s storage function\n", "sRGB_gAMA_and_cHRM");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- png_set_sRGB(png_ptr, info_ptr, intent);
-
-#if defined(PNG_gAMA_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- file_gamma = (float).45455;
- png_set_gAMA(png_ptr, info_ptr, file_gamma);
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
- int_file_gamma = 45455L;
- png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma);
-#endif
-#endif
-
-#if defined(PNG_cHRM_SUPPORTED)
-#ifdef PNG_FIXED_POINT_SUPPORTED
- int_white_x = 31270L;
- int_white_y = 32900L;
- int_red_x = 64000L;
- int_red_y = 33000L;
- int_green_x = 30000L;
- int_green_y = 60000L;
- int_blue_x = 15000L;
- int_blue_y = 6000L;
-
- png_set_cHRM_fixed(png_ptr, info_ptr,
- int_white_x, int_white_y, int_red_x, int_red_y, int_green_x, int_green_y,
- int_blue_x, int_blue_y);
-#endif
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- white_x = (float).3127;
- white_y = (float).3290;
- red_x = (float).64;
- red_y = (float).33;
- green_x = (float).30;
- green_y = (float).60;
- blue_x = (float).15;
- blue_y = (float).06;
-
- png_set_cHRM(png_ptr, info_ptr,
- white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y);
-#endif
-#endif
-}
-#endif
-
-
-#if defined(PNG_iCCP_SUPPORTED)
-void PNGAPI
-png_set_iCCP(png_structp png_ptr, png_infop info_ptr,
- png_charp name, int compression_type,
- png_charp profile, png_uint_32 proflen)
-{
- png_charp new_iccp_name;
- png_charp new_iccp_profile;
- png_uint_32 length;
-
- png_debug1(1, "in %s storage function\n", "iCCP");
- if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL)
- return;
-
- length = png_strlen(name)+1;
- new_iccp_name = (png_charp)png_malloc_warn(png_ptr, length);
- if (new_iccp_name == NULL)
- {
- png_warning(png_ptr, "Insufficient memory to process iCCP chunk.");
- return;
- }
- png_memcpy(new_iccp_name, name, length);
- new_iccp_profile = (png_charp)png_malloc_warn(png_ptr, proflen);
- if (new_iccp_profile == NULL)
- {
- png_free (png_ptr, new_iccp_name);
- png_warning(png_ptr, "Insufficient memory to process iCCP profile.");
- return;
- }
- png_memcpy(new_iccp_profile, profile, (png_size_t)proflen);
-
- png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0);
-
- info_ptr->iccp_proflen = proflen;
- info_ptr->iccp_name = new_iccp_name;
- info_ptr->iccp_profile = new_iccp_profile;
- /* Compression is always zero but is here so the API and info structure
- * does not have to change if we introduce multiple compression types */
- info_ptr->iccp_compression = (png_byte)compression_type;
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_ICCP;
-#endif
- info_ptr->valid |= PNG_INFO_iCCP;
-}
-#endif
-
-#if defined(PNG_TEXT_SUPPORTED)
-void PNGAPI
-png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr,
- int num_text)
-{
- int ret;
- ret=png_set_text_2(png_ptr, info_ptr, text_ptr, num_text);
- if (ret)
- png_error(png_ptr, "Insufficient memory to store text");
-}
-
-int /* PRIVATE */
-png_set_text_2(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr,
- int num_text)
-{
- int i;
-
- png_debug1(1, "in %s storage function\n", (png_ptr->chunk_name[0] == '\0' ?
- "text" : (png_const_charp)png_ptr->chunk_name));
-
- if (png_ptr == NULL || info_ptr == NULL || num_text == 0)
- return(0);
-
- /* Make sure we have enough space in the "text" array in info_struct
- * to hold all of the incoming text_ptr objects.
- */
- if (info_ptr->num_text + num_text > info_ptr->max_text)
- {
- if (info_ptr->text != NULL)
- {
- png_textp old_text;
- int old_max;
-
- old_max = info_ptr->max_text;
- info_ptr->max_text = info_ptr->num_text + num_text + 8;
- old_text = info_ptr->text;
- info_ptr->text = (png_textp)png_malloc_warn(png_ptr,
- (png_uint_32)(info_ptr->max_text * png_sizeof (png_text)));
- if (info_ptr->text == NULL)
- {
- png_free(png_ptr, old_text);
- return(1);
- }
- png_memcpy(info_ptr->text, old_text, (png_size_t)(old_max *
- png_sizeof(png_text)));
- png_free(png_ptr, old_text);
- }
- else
- {
- info_ptr->max_text = num_text + 8;
- info_ptr->num_text = 0;
- info_ptr->text = (png_textp)png_malloc_warn(png_ptr,
- (png_uint_32)(info_ptr->max_text * png_sizeof (png_text)));
- if (info_ptr->text == NULL)
- return(1);
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_TEXT;
-#endif
- }
- png_debug1(3, "allocated %d entries for info_ptr->text\n",
- info_ptr->max_text);
- }
- for (i = 0; i < num_text; i++)
- {
- png_size_t text_length,key_len;
- png_size_t lang_len,lang_key_len;
- png_textp textp = &(info_ptr->text[info_ptr->num_text]);
-
- if (text_ptr[i].key == NULL)
- continue;
-
- key_len = png_strlen(text_ptr[i].key);
-
- if(text_ptr[i].compression <= 0)
- {
- lang_len = 0;
- lang_key_len = 0;
- }
- else
-#ifdef PNG_iTXt_SUPPORTED
- {
- /* set iTXt data */
- if (text_ptr[i].lang != NULL)
- lang_len = png_strlen(text_ptr[i].lang);
- else
- lang_len = 0;
- if (text_ptr[i].lang_key != NULL)
- lang_key_len = png_strlen(text_ptr[i].lang_key);
- else
- lang_key_len = 0;
- }
-#else
- {
- png_warning(png_ptr, "iTXt chunk not supported.");
- continue;
- }
-#endif
-
- if (text_ptr[i].text == NULL || text_ptr[i].text[0] == '\0')
- {
- text_length = 0;
-#ifdef PNG_iTXt_SUPPORTED
- if(text_ptr[i].compression > 0)
- textp->compression = PNG_ITXT_COMPRESSION_NONE;
- else
-#endif
- textp->compression = PNG_TEXT_COMPRESSION_NONE;
- }
- else
- {
- text_length = png_strlen(text_ptr[i].text);
- textp->compression = text_ptr[i].compression;
- }
-
- textp->key = (png_charp)png_malloc_warn(png_ptr,
- (png_uint_32)(key_len + text_length + lang_len + lang_key_len + 4));
- if (textp->key == NULL)
- return(1);
- png_debug2(2, "Allocated %lu bytes at %x in png_set_text\n",
- (png_uint_32)(key_len + lang_len + lang_key_len + text_length + 4),
- (int)textp->key);
-
- png_memcpy(textp->key, text_ptr[i].key,
- (png_size_t)(key_len));
- *(textp->key+key_len) = '\0';
-#ifdef PNG_iTXt_SUPPORTED
- if (text_ptr[i].compression > 0)
- {
- textp->lang=textp->key + key_len + 1;
- png_memcpy(textp->lang, text_ptr[i].lang, lang_len);
- *(textp->lang+lang_len) = '\0';
- textp->lang_key=textp->lang + lang_len + 1;
- png_memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len);
- *(textp->lang_key+lang_key_len) = '\0';
- textp->text=textp->lang_key + lang_key_len + 1;
- }
- else
-#endif
- {
-#ifdef PNG_iTXt_SUPPORTED
- textp->lang=NULL;
- textp->lang_key=NULL;
-#endif
- textp->text=textp->key + key_len + 1;
- }
- if(text_length)
- png_memcpy(textp->text, text_ptr[i].text,
- (png_size_t)(text_length));
- *(textp->text+text_length) = '\0';
-
-#ifdef PNG_iTXt_SUPPORTED
- if(textp->compression > 0)
- {
- textp->text_length = 0;
- textp->itxt_length = text_length;
- }
- else
-#endif
- {
- textp->text_length = text_length;
-#ifdef PNG_iTXt_SUPPORTED
- textp->itxt_length = 0;
-#endif
- }
- info_ptr->num_text++;
- png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text);
- }
- return(0);
-}
-#endif
-
-#if defined(PNG_tIME_SUPPORTED)
-void PNGAPI
-png_set_tIME(png_structp png_ptr, png_infop info_ptr, png_timep mod_time)
-{
- png_debug1(1, "in %s storage function\n", "tIME");
- if (png_ptr == NULL || info_ptr == NULL ||
- (png_ptr->mode & PNG_WROTE_tIME))
- return;
-
- png_memcpy(&(info_ptr->mod_time), mod_time, png_sizeof (png_time));
- info_ptr->valid |= PNG_INFO_tIME;
-}
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED)
-void PNGAPI
-png_set_tRNS(png_structp png_ptr, png_infop info_ptr,
- png_bytep trans, int num_trans, png_color_16p trans_values)
-{
- png_debug1(1, "in %s storage function\n", "tRNS");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
-
- if (trans != NULL)
- {
- /*
- * It may not actually be necessary to set png_ptr->trans here;
- * we do it for backward compatibility with the way the png_handle_tRNS
- * function used to do the allocation.
- */
-
- /* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
- png_ptr->trans = info_ptr->trans = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)PNG_MAX_PALETTE_LENGTH);
- if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
- png_memcpy(info_ptr->trans, trans, (png_size_t)num_trans);
- }
-
- if (trans_values != NULL)
- {
- int sample_max = (1 << info_ptr->bit_depth);
- if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY &&
- (int)trans_values->gray > sample_max) ||
- (info_ptr->color_type == PNG_COLOR_TYPE_RGB &&
- ((int)trans_values->red > sample_max ||
- (int)trans_values->green > sample_max ||
- (int)trans_values->blue > sample_max)))
- png_warning(png_ptr,
- "tRNS chunk has out-of-range samples for bit_depth");
- png_memcpy(&(info_ptr->trans_values), trans_values,
- png_sizeof(png_color_16));
- if (num_trans == 0)
- num_trans = 1;
- }
-
- info_ptr->num_trans = (png_uint_16)num_trans;
- if (num_trans != 0)
- {
- info_ptr->valid |= PNG_INFO_tRNS;
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_TRNS;
-#else
- png_ptr->flags |= PNG_FLAG_FREE_TRNS;
-#endif
- }
-}
-#endif
-
-#if defined(PNG_sPLT_SUPPORTED)
-void PNGAPI
-png_set_sPLT(png_structp png_ptr,
- png_infop info_ptr, png_sPLT_tp entries, int nentries)
-{
- png_sPLT_tp np;
- int i;
-
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- np = (png_sPLT_tp)png_malloc_warn(png_ptr,
- (info_ptr->splt_palettes_num + nentries) * png_sizeof(png_sPLT_t));
- if (np == NULL)
- {
- png_warning(png_ptr, "No memory for sPLT palettes.");
- return;
- }
-
- png_memcpy(np, info_ptr->splt_palettes,
- info_ptr->splt_palettes_num * png_sizeof(png_sPLT_t));
- png_free(png_ptr, info_ptr->splt_palettes);
- info_ptr->splt_palettes=NULL;
-
- for (i = 0; i < nentries; i++)
- {
- png_sPLT_tp to = np + info_ptr->splt_palettes_num + i;
- png_sPLT_tp from = entries + i;
- png_uint_32 length;
-
- length = png_strlen(from->name) + 1;
- to->name = (png_charp)png_malloc_warn(png_ptr, length);
- if (to->name == NULL)
- {
- png_warning(png_ptr,
- "Out of memory while processing sPLT chunk");
- continue;
- }
- png_memcpy(to->name, from->name, length);
- to->entries = (png_sPLT_entryp)png_malloc_warn(png_ptr,
- from->nentries * png_sizeof(png_sPLT_entry));
- if (to->entries == NULL)
- {
- png_warning(png_ptr,
- "Out of memory while processing sPLT chunk");
- png_free(png_ptr,to->name);
- to->name = NULL;
- continue;
- }
- png_memcpy(to->entries, from->entries,
- from->nentries * png_sizeof(png_sPLT_entry));
- to->nentries = from->nentries;
- to->depth = from->depth;
- }
-
- info_ptr->splt_palettes = np;
- info_ptr->splt_palettes_num += nentries;
- info_ptr->valid |= PNG_INFO_sPLT;
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_SPLT;
-#endif
-}
-#endif /* PNG_sPLT_SUPPORTED */
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-void PNGAPI
-png_set_unknown_chunks(png_structp png_ptr,
- png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)
-{
- png_unknown_chunkp np;
- int i;
-
- if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0)
- return;
-
- np = (png_unknown_chunkp)png_malloc_warn(png_ptr,
- (info_ptr->unknown_chunks_num + num_unknowns) *
- png_sizeof(png_unknown_chunk));
- if (np == NULL)
- {
- png_warning(png_ptr,
- "Out of memory while processing unknown chunk.");
- return;
- }
-
- png_memcpy(np, info_ptr->unknown_chunks,
- info_ptr->unknown_chunks_num * png_sizeof(png_unknown_chunk));
- png_free(png_ptr, info_ptr->unknown_chunks);
- info_ptr->unknown_chunks=NULL;
-
- for (i = 0; i < num_unknowns; i++)
- {
- png_unknown_chunkp to = np + info_ptr->unknown_chunks_num + i;
- png_unknown_chunkp from = unknowns + i;
-
- png_memcpy((png_charp)to->name,
- (png_charp)from->name,
- png_sizeof(from->name));
- to->name[png_sizeof(to->name)-1] = '\0';
- to->size = from->size;
- /* note our location in the read or write sequence */
- to->location = (png_byte)(png_ptr->mode & 0xff);
-
- if (from->size == 0)
- to->data=NULL;
- else
- {
- to->data = (png_bytep)png_malloc_warn(png_ptr, from->size);
- if (to->data == NULL)
- {
- png_warning(png_ptr,
- "Out of memory while processing unknown chunk.");
- to->size=0;
- }
- else
- png_memcpy(to->data, from->data, from->size);
- }
- }
-
- info_ptr->unknown_chunks = np;
- info_ptr->unknown_chunks_num += num_unknowns;
-#ifdef PNG_FREE_ME_SUPPORTED
- info_ptr->free_me |= PNG_FREE_UNKN;
-#endif
-}
-void PNGAPI
-png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr,
- int chunk, int location)
-{
- if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk <
- (int)info_ptr->unknown_chunks_num)
- info_ptr->unknown_chunks[chunk].location = (png_byte)location;
-}
-#endif
-
-#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
-#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
- defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
-void PNGAPI
-png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted)
-{
- /* This function is deprecated in favor of png_permit_mng_features()
- and will be removed from libpng-1.3.0 */
- png_debug(1, "in png_permit_empty_plte, DEPRECATED.\n");
- if (png_ptr == NULL)
- return;
- png_ptr->mng_features_permitted = (png_byte)
- ((png_ptr->mng_features_permitted & (~PNG_FLAG_MNG_EMPTY_PLTE)) |
- ((empty_plte_permitted & PNG_FLAG_MNG_EMPTY_PLTE)));
-}
-#endif
-#endif
-
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
-png_uint_32 PNGAPI
-png_permit_mng_features (png_structp png_ptr, png_uint_32 mng_features)
-{
- png_debug(1, "in png_permit_mng_features\n");
- if (png_ptr == NULL)
- return (png_uint_32)0;
- png_ptr->mng_features_permitted =
- (png_byte)(mng_features & PNG_ALL_MNG_FEATURES);
- return (png_uint_32)png_ptr->mng_features_permitted;
-}
-#endif
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-void PNGAPI
-png_set_keep_unknown_chunks(png_structp png_ptr, int keep, png_bytep
- chunk_list, int num_chunks)
-{
- png_bytep new_list, p;
- int i, old_num_chunks;
- if (png_ptr == NULL)
- return;
- if (num_chunks == 0)
- {
- if(keep == PNG_HANDLE_CHUNK_ALWAYS || keep == PNG_HANDLE_CHUNK_IF_SAFE)
- png_ptr->flags |= PNG_FLAG_KEEP_UNKNOWN_CHUNKS;
- else
- png_ptr->flags &= ~PNG_FLAG_KEEP_UNKNOWN_CHUNKS;
-
- if(keep == PNG_HANDLE_CHUNK_ALWAYS)
- png_ptr->flags |= PNG_FLAG_KEEP_UNSAFE_CHUNKS;
- else
- png_ptr->flags &= ~PNG_FLAG_KEEP_UNSAFE_CHUNKS;
- return;
- }
- if (chunk_list == NULL)
- return;
- old_num_chunks=png_ptr->num_chunk_list;
- new_list=(png_bytep)png_malloc(png_ptr,
- (png_uint_32)(5*(num_chunks+old_num_chunks)));
- if(png_ptr->chunk_list != NULL)
- {
- png_memcpy(new_list, png_ptr->chunk_list,
- (png_size_t)(5*old_num_chunks));
- png_free(png_ptr, png_ptr->chunk_list);
- png_ptr->chunk_list=NULL;
- }
- png_memcpy(new_list+5*old_num_chunks, chunk_list,
- (png_size_t)(5*num_chunks));
- for (p=new_list+5*old_num_chunks+4, i=0; i<num_chunks; i++, p+=5)
- *p=(png_byte)keep;
- png_ptr->num_chunk_list=old_num_chunks+num_chunks;
- png_ptr->chunk_list=new_list;
-#ifdef PNG_FREE_ME_SUPPORTED
- png_ptr->free_me |= PNG_FREE_LIST;
-#endif
-}
-#endif
-
-#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
-void PNGAPI
-png_set_read_user_chunk_fn(png_structp png_ptr, png_voidp user_chunk_ptr,
- png_user_chunk_ptr read_user_chunk_fn)
-{
- png_debug(1, "in png_set_read_user_chunk_fn\n");
- if (png_ptr == NULL)
- return;
- png_ptr->read_user_chunk_fn = read_user_chunk_fn;
- png_ptr->user_chunk_ptr = user_chunk_ptr;
-}
-#endif
-
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-void PNGAPI
-png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers)
-{
- png_debug1(1, "in %s storage function\n", "rows");
-
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- if(info_ptr->row_pointers && (info_ptr->row_pointers != row_pointers))
- png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
- info_ptr->row_pointers = row_pointers;
- if(row_pointers)
- info_ptr->valid |= PNG_INFO_IDAT;
-}
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-void PNGAPI
-png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size)
-{
- if (png_ptr == NULL)
- return;
- png_free(png_ptr, png_ptr->zbuf);
- png_ptr->zbuf_size = (png_size_t)size;
- png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size);
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
-}
-#endif
-
-void PNGAPI
-png_set_invalid(png_structp png_ptr, png_infop info_ptr, int mask)
-{
- if (png_ptr && info_ptr)
- info_ptr->valid &= ~mask;
-}
-
-
-#ifndef PNG_1_0_X
-#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
-/* function was added to libpng 1.2.0 and should always exist by default */
-void PNGAPI
-png_set_asm_flags (png_structp png_ptr, png_uint_32 asm_flags)
-{
-/* Obsolete as of libpng-1.2.20 and will be removed from libpng-1.4.0 */
- if (png_ptr != NULL)
- png_ptr->asm_flags = 0;
-}
-
-/* this function was added to libpng 1.2.0 */
-void PNGAPI
-png_set_mmx_thresholds (png_structp png_ptr,
- png_byte mmx_bitdepth_threshold,
- png_uint_32 mmx_rowbytes_threshold)
-{
-/* Obsolete as of libpng-1.2.20 and will be removed from libpng-1.4.0 */
- if (png_ptr == NULL)
- return;
-}
-#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */
-
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-/* this function was added to libpng 1.2.6 */
-void PNGAPI
-png_set_user_limits (png_structp png_ptr, png_uint_32 user_width_max,
- png_uint_32 user_height_max)
-{
- /* Images with dimensions larger than these limits will be
- * rejected by png_set_IHDR(). To accept any PNG datastream
- * regardless of dimensions, set both limits to 0x7ffffffL.
- */
- if(png_ptr == NULL) return;
- png_ptr->user_width_max = user_width_max;
- png_ptr->user_height_max = user_height_max;
-}
-#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */
-
-#endif /* ?PNG_1_0_X */
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngtest.c b/Build/source/libs/libpng/pngtest.c
deleted file mode 100644
index 60980c27585..00000000000
--- a/Build/source/libs/libpng/pngtest.c
+++ /dev/null
@@ -1,1563 +0,0 @@
-
-/* pngtest.c - a simple test program to test libpng
- *
- * Last changed in libpng 1.2.27 - [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This program reads in a PNG image, writes it out again, and then
- * compares the two files. If the files are identical, this shows that
- * the basic chunk handling, filtering, and (de)compression code is working
- * properly. It does not currently test all of the transforms, although
- * it probably should.
- *
- * The program will report "FAIL" in certain legitimate cases:
- * 1) when the compression level or filter selection method is changed.
- * 2) when the maximum IDAT size (PNG_ZBUF_SIZE in pngconf.h) is not 8192.
- * 3) unknown unsafe-to-copy ancillary chunks or unknown critical chunks
- * exist in the input file.
- * 4) others not listed here...
- * In these cases, it is best to check with another tool such as "pngcheck"
- * to see what the differences between the two files are.
- *
- * If a filename is given on the command-line, then this file is used
- * for the input, rather than the default "pngtest.png". This allows
- * testing a wide variety of files easily. You can also test a number
- * of files at once by typing "pngtest -m file1.png file2.png ..."
- */
-
-#include "png.h"
-
-#if defined(_WIN32_WCE)
-# if _WIN32_WCE < 211
- __error__ (f|w)printf functions are not supported on old WindowsCE.;
-# endif
-# include <windows.h>
-# include <stdlib.h>
-# define READFILE(file, data, length, check) \
- if (ReadFile(file, data, length, &check,NULL)) check = 0
-# define WRITEFILE(file, data, length, check)) \
- if (WriteFile(file, data, length, &check, NULL)) check = 0
-# define FCLOSE(file) CloseHandle(file)
-#else
-# include <stdio.h>
-# include <stdlib.h>
-# define READFILE(file, data, length, check) \
- check=(png_size_t)fread(data,(png_size_t)1,length,file)
-# define WRITEFILE(file, data, length, check) \
- check=(png_size_t)fwrite(data,(png_size_t)1, length, file)
-# define FCLOSE(file) fclose(file)
-#endif
-
-#if defined(PNG_NO_STDIO)
-# if defined(_WIN32_WCE)
- typedef HANDLE png_FILE_p;
-# else
- typedef FILE * png_FILE_p;
-# endif
-#endif
-
-/* Makes pngtest verbose so we can find problems (needs to be before png.h) */
-#ifndef PNG_DEBUG
-# define PNG_DEBUG 0
-#endif
-
-#if !PNG_DEBUG
-# define SINGLE_ROWBUF_ALLOC /* makes buffer overruns easier to nail */
-#endif
-
-/* Turn on CPU timing
-#define PNGTEST_TIMING
-*/
-
-#ifdef PNG_NO_FLOATING_POINT_SUPPORTED
-#undef PNGTEST_TIMING
-#endif
-
-#ifdef PNGTEST_TIMING
-static float t_start, t_stop, t_decode, t_encode, t_misc;
-#include <time.h>
-#endif
-
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
-#define PNG_tIME_STRING_LENGTH 30
-static int tIME_chunk_present=0;
-static char tIME_string[PNG_tIME_STRING_LENGTH] = "no tIME chunk present in file";
-#endif
-
-static int verbose = 0;
-
-int test_one_file PNGARG((PNG_CONST char *inname, PNG_CONST char *outname));
-
-#ifdef __TURBOC__
-#include <mem.h>
-#endif
-
-/* defined so I can write to a file on gui/windowing platforms */
-/* #define STDERR stderr */
-#define STDERR stdout /* for DOS */
-
-/* example of using row callbacks to make a simple progress meter */
-static int status_pass=1;
-static int status_dots_requested=0;
-static int status_dots=1;
-
-/* In case a system header (e.g., on AIX) defined jmpbuf */
-#ifdef jmpbuf
-# undef jmpbuf
-#endif
-
-/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
-#ifndef png_jmpbuf
-# define png_jmpbuf(png_ptr) png_ptr->jmpbuf
-#endif
-
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass);
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass)
-{
- if(png_ptr == NULL || row_number > PNG_UINT_31_MAX) return;
- if(status_pass != pass)
- {
- fprintf(stdout,"\n Pass %d: ",pass);
- status_pass = pass;
- status_dots = 31;
- }
- status_dots--;
- if(status_dots == 0)
- {
- fprintf(stdout, "\n ");
- status_dots=30;
- }
- fprintf(stdout, "r");
-}
-
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass);
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass)
-{
- if(png_ptr == NULL || row_number > PNG_UINT_31_MAX || pass > 7) return;
- fprintf(stdout, "w");
-}
-
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
-/* Example of using user transform callback (we don't transform anything,
- but merely examine the row filters. We set this to 256 rather than
- 5 in case illegal filter values are present.) */
-static png_uint_32 filters_used[256];
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-count_filters(png_structp png_ptr, png_row_infop row_info, png_bytep data);
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-count_filters(png_structp png_ptr, png_row_infop row_info, png_bytep data)
-{
- if(png_ptr != NULL && row_info != NULL)
- ++filters_used[*(data-1)];
-}
-#endif
-
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-/* example of using user transform callback (we don't transform anything,
- but merely count the zero samples) */
-
-static png_uint_32 zero_samples;
-
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data);
-void
-#ifdef PNG_1_0_X
-PNGAPI
-#endif
-count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data)
-{
- png_bytep dp = data;
- if(png_ptr == NULL)return;
-
- /* contents of row_info:
- * png_uint_32 width width of row
- * png_uint_32 rowbytes number of bytes in row
- * png_byte color_type color type of pixels
- * png_byte bit_depth bit depth of samples
- * png_byte channels number of channels (1-4)
- * png_byte pixel_depth bits per pixel (depth*channels)
- */
-
-
- /* counts the number of zero samples (or zero pixels if color_type is 3 */
-
- if(row_info->color_type == 0 || row_info->color_type == 3)
- {
- int pos=0;
- png_uint_32 n, nstop;
- for (n=0, nstop=row_info->width; n<nstop; n++)
- {
- if(row_info->bit_depth == 1)
- {
- if(((*dp << pos++ ) & 0x80) == 0) zero_samples++;
- if(pos == 8)
- {
- pos = 0;
- dp++;
- }
- }
- if(row_info->bit_depth == 2)
- {
- if(((*dp << (pos+=2)) & 0xc0) == 0) zero_samples++;
- if(pos == 8)
- {
- pos = 0;
- dp++;
- }
- }
- if(row_info->bit_depth == 4)
- {
- if(((*dp << (pos+=4)) & 0xf0) == 0) zero_samples++;
- if(pos == 8)
- {
- pos = 0;
- dp++;
- }
- }
- if(row_info->bit_depth == 8)
- if(*dp++ == 0) zero_samples++;
- if(row_info->bit_depth == 16)
- {
- if((*dp | *(dp+1)) == 0) zero_samples++;
- dp+=2;
- }
- }
- }
- else /* other color types */
- {
- png_uint_32 n, nstop;
- int channel;
- int color_channels = row_info->channels;
- if(row_info->color_type > 3)color_channels--;
-
- for (n=0, nstop=row_info->width; n<nstop; n++)
- {
- for (channel = 0; channel < color_channels; channel++)
- {
- if(row_info->bit_depth == 8)
- if(*dp++ == 0) zero_samples++;
- if(row_info->bit_depth == 16)
- {
- if((*dp | *(dp+1)) == 0) zero_samples++;
- dp+=2;
- }
- }
- if(row_info->color_type > 3)
- {
- dp++;
- if(row_info->bit_depth == 16)dp++;
- }
- }
- }
-}
-#endif /* PNG_WRITE_USER_TRANSFORM_SUPPORTED */
-
-static int wrote_question = 0;
-
-#if defined(PNG_NO_STDIO)
-/* START of code to validate stdio-free compilation */
-/* These copies of the default read/write functions come from pngrio.c and */
-/* pngwio.c. They allow "don't include stdio" testing of the library. */
-/* This is the function that does the actual reading of data. If you are
- not reading from a standard C stream, you should create a replacement
- read_data function and use it at run time with png_set_read_fn(), rather
- than changing the library. */
-
-#ifndef USE_FAR_KEYWORD
-static void
-pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_size_t check;
-
- /* fread() returns 0 on error, so it is OK to store this in a png_size_t
- * instead of an int, which is what fread() actually returns.
- */
- READFILE((png_FILE_p)png_ptr->io_ptr, data, length, check);
-
- if (check != length)
- {
- png_error(png_ptr, "Read Error!");
- }
-}
-#else
-/* this is the model-independent version. Since the standard I/O library
- can't handle far buffers in the medium and small models, we have to copy
- the data.
-*/
-
-#define NEAR_BUF_SIZE 1024
-#define MIN(a,b) (a <= b ? a : b)
-
-static void
-pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- int check;
- png_byte *n_data;
- png_FILE_p io_ptr;
-
- /* Check if data really is near. If so, use usual code. */
- n_data = (png_byte *)CVT_PTR_NOCHECK(data);
- io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
- if ((png_bytep)n_data == data)
- {
- READFILE(io_ptr, n_data, length, check);
- }
- else
- {
- png_byte buf[NEAR_BUF_SIZE];
- png_size_t read, remaining, err;
- check = 0;
- remaining = length;
- do
- {
- read = MIN(NEAR_BUF_SIZE, remaining);
- READFILE(io_ptr, buf, 1, err);
- png_memcpy(data, buf, read); /* copy far buffer to near buffer */
- if(err != read)
- break;
- else
- check += err;
- data += read;
- remaining -= read;
- }
- while (remaining != 0);
- }
- if (check != length)
- {
- png_error(png_ptr, "read Error");
- }
-}
-#endif /* USE_FAR_KEYWORD */
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
-static void
-pngtest_flush(png_structp png_ptr)
-{
-#if !defined(_WIN32_WCE)
- png_FILE_p io_ptr;
- io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr));
- if (io_ptr != NULL)
- fflush(io_ptr);
-#endif
-}
-#endif
-
-/* This is the function that does the actual writing of data. If you are
- not writing to a standard C stream, you should create a replacement
- write_data function and use it at run time with png_set_write_fn(), rather
- than changing the library. */
-#ifndef USE_FAR_KEYWORD
-static void
-pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_uint_32 check;
-
- WRITEFILE((png_FILE_p)png_ptr->io_ptr, data, length, check);
- if (check != length)
- {
- png_error(png_ptr, "Write Error");
- }
-}
-#else
-/* this is the model-independent version. Since the standard I/O library
- can't handle far buffers in the medium and small models, we have to copy
- the data.
-*/
-
-#define NEAR_BUF_SIZE 1024
-#define MIN(a,b) (a <= b ? a : b)
-
-static void
-pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_uint_32 check;
- png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */
- png_FILE_p io_ptr;
-
- /* Check if data really is near. If so, use usual code. */
- near_data = (png_byte *)CVT_PTR_NOCHECK(data);
- io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
- if ((png_bytep)near_data == data)
- {
- WRITEFILE(io_ptr, near_data, length, check);
- }
- else
- {
- png_byte buf[NEAR_BUF_SIZE];
- png_size_t written, remaining, err;
- check = 0;
- remaining = length;
- do
- {
- written = MIN(NEAR_BUF_SIZE, remaining);
- png_memcpy(buf, data, written); /* copy far buffer to near buffer */
- WRITEFILE(io_ptr, buf, written, err);
- if (err != written)
- break;
- else
- check += err;
- data += written;
- remaining -= written;
- }
- while (remaining != 0);
- }
- if (check != length)
- {
- png_error(png_ptr, "Write Error");
- }
-}
-#endif /* USE_FAR_KEYWORD */
-#endif /* PNG_NO_STDIO */
-/* END of code to validate stdio-free compilation */
-
-/* This function is called when there is a warning, but the library thinks
- * it can continue anyway. Replacement functions don't have to do anything
- * here if you don't want to. In the default configuration, png_ptr is
- * not used, but it is passed in case it may be useful.
- */
-static void
-pngtest_warning(png_structp png_ptr, png_const_charp message)
-{
- PNG_CONST char *name = "UNKNOWN (ERROR!)";
- if (png_ptr != NULL && png_ptr->error_ptr != NULL)
- name = png_ptr->error_ptr;
- fprintf(STDERR, "%s: libpng warning: %s\n", name, message);
-}
-
-/* This is the default error handling function. Note that replacements for
- * this function MUST NOT RETURN, or the program will likely crash. This
- * function is used by default, or if the program supplies NULL for the
- * error function pointer in png_set_error_fn().
- */
-static void
-pngtest_error(png_structp png_ptr, png_const_charp message)
-{
- pngtest_warning(png_ptr, message);
- /* We can return because png_error calls the default handler, which is
- * actually OK in this case. */
-}
-
-/* START of code to validate memory allocation and deallocation */
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
-
-/* Allocate memory. For reasonable files, size should never exceed
- 64K. However, zlib may allocate more then 64K if you don't tell
- it not to. See zconf.h and png.h for more information. zlib does
- need to allocate exactly 64K, so whatever you call here must
- have the ability to do that.
-
- This piece of code can be compiled to validate max 64K allocations
- by setting MAXSEG_64K in zlib zconf.h *or* PNG_MAX_MALLOC_64K. */
-typedef struct memory_information
-{
- png_uint_32 size;
- png_voidp pointer;
- struct memory_information FAR *next;
-} memory_information;
-typedef memory_information FAR *memory_infop;
-
-static memory_infop pinformation = NULL;
-static int current_allocation = 0;
-static int maximum_allocation = 0;
-static int total_allocation = 0;
-static int num_allocations = 0;
-
-png_voidp png_debug_malloc PNGARG((png_structp png_ptr, png_uint_32 size));
-void png_debug_free PNGARG((png_structp png_ptr, png_voidp ptr));
-
-png_voidp
-png_debug_malloc(png_structp png_ptr, png_uint_32 size)
-{
-
- /* png_malloc has already tested for NULL; png_create_struct calls
- png_debug_malloc directly, with png_ptr == NULL which is OK */
-
- if (size == 0)
- return (NULL);
-
- /* This calls the library allocator twice, once to get the requested
- buffer and once to get a new free list entry. */
- {
- /* Disable malloc_fn and free_fn */
- memory_infop pinfo;
- png_set_mem_fn(png_ptr, NULL, NULL, NULL);
- pinfo = (memory_infop)png_malloc(png_ptr,
- (png_uint_32)png_sizeof (*pinfo));
- pinfo->size = size;
- current_allocation += size;
- total_allocation += size;
- num_allocations ++;
- if (current_allocation > maximum_allocation)
- maximum_allocation = current_allocation;
- pinfo->pointer = (png_voidp)png_malloc(png_ptr, size);
- /* Restore malloc_fn and free_fn */
- png_set_mem_fn(png_ptr, png_voidp_NULL, (png_malloc_ptr)png_debug_malloc,
- (png_free_ptr)png_debug_free);
- if (size != 0 && pinfo->pointer == NULL)
- {
- current_allocation -= size;
- total_allocation -= size;
- png_error(png_ptr,
- "out of memory in pngtest->png_debug_malloc.");
- }
- pinfo->next = pinformation;
- pinformation = pinfo;
- /* Make sure the caller isn't assuming zeroed memory. */
- png_memset(pinfo->pointer, 0xdd, pinfo->size);
- if(verbose)
- printf("png_malloc %lu bytes at %x\n",(unsigned long)size,
- pinfo->pointer);
- return (png_voidp)(pinfo->pointer);
- }
-}
-
-/* Free a pointer. It is removed from the list at the same time. */
-void
-png_debug_free(png_structp png_ptr, png_voidp ptr)
-{
- if (png_ptr == NULL)
- fprintf(STDERR, "NULL pointer to png_debug_free.\n");
- if (ptr == 0)
- {
-#if 0 /* This happens all the time. */
- fprintf(STDERR, "WARNING: freeing NULL pointer\n");
-#endif
- return;
- }
-
- /* Unlink the element from the list. */
- {
- memory_infop FAR *ppinfo = &pinformation;
- for (;;)
- {
- memory_infop pinfo = *ppinfo;
- if (pinfo->pointer == ptr)
- {
- *ppinfo = pinfo->next;
- current_allocation -= pinfo->size;
- if (current_allocation < 0)
- fprintf(STDERR, "Duplicate free of memory\n");
- /* We must free the list element too, but first kill
- the memory that is to be freed. */
- png_memset(ptr, 0x55, pinfo->size);
- png_free_default(png_ptr, pinfo);
- pinfo=NULL;
- break;
- }
- if (pinfo->next == NULL)
- {
- fprintf(STDERR, "Pointer %x not found\n", (unsigned int)ptr);
- break;
- }
- ppinfo = &pinfo->next;
- }
- }
-
- /* Finally free the data. */
- if(verbose)
- printf("Freeing %x\n",ptr);
- png_free_default(png_ptr, ptr);
- ptr=NULL;
-}
-#endif /* PNG_USER_MEM_SUPPORTED && PNG_DEBUG */
-/* END of code to test memory allocation/deallocation */
-
-/* Test one file */
-int
-test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
-{
- static png_FILE_p fpin;
- static png_FILE_p fpout; /* "static" prevents setjmp corruption */
- png_structp read_ptr;
- png_infop read_info_ptr, end_info_ptr;
-#ifdef PNG_WRITE_SUPPORTED
- png_structp write_ptr;
- png_infop write_info_ptr;
- png_infop write_end_info_ptr;
-#else
- png_structp write_ptr = NULL;
- png_infop write_info_ptr = NULL;
- png_infop write_end_info_ptr = NULL;
-#endif
- png_bytep row_buf;
- png_uint_32 y;
- png_uint_32 width, height;
- int num_pass, pass;
- int bit_depth, color_type;
-#ifdef PNG_SETJMP_SUPPORTED
-#ifdef USE_FAR_KEYWORD
- jmp_buf jmpbuf;
-#endif
-#endif
-
-#if defined(_WIN32_WCE)
- TCHAR path[MAX_PATH];
-#endif
- char inbuf[256], outbuf[256];
-
- row_buf = NULL;
-
-#if defined(_WIN32_WCE)
- MultiByteToWideChar(CP_ACP, 0, inname, -1, path, MAX_PATH);
- if ((fpin = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
-#else
- if ((fpin = fopen(inname, "rb")) == NULL)
-#endif
- {
- fprintf(STDERR, "Could not find input file %s\n", inname);
- return (1);
- }
-
-#if defined(_WIN32_WCE)
- MultiByteToWideChar(CP_ACP, 0, outname, -1, path, MAX_PATH);
- if ((fpout = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL)) == INVALID_HANDLE_VALUE)
-#else
- if ((fpout = fopen(outname, "wb")) == NULL)
-#endif
- {
- fprintf(STDERR, "Could not open output file %s\n", outname);
- FCLOSE(fpin);
- return (1);
- }
-
- png_debug(0, "Allocating read and write structures\n");
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- read_ptr = png_create_read_struct_2(PNG_LIBPNG_VER_STRING, png_voidp_NULL,
- png_error_ptr_NULL, png_error_ptr_NULL, png_voidp_NULL,
- (png_malloc_ptr)png_debug_malloc, (png_free_ptr)png_debug_free);
-#else
- read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL,
- png_error_ptr_NULL, png_error_ptr_NULL);
-#endif
- png_set_error_fn(read_ptr, (png_voidp)inname, pngtest_error,
- pngtest_warning);
-#ifdef PNG_WRITE_SUPPORTED
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- write_ptr = png_create_write_struct_2(PNG_LIBPNG_VER_STRING, png_voidp_NULL,
- png_error_ptr_NULL, png_error_ptr_NULL, png_voidp_NULL,
- (png_malloc_ptr)png_debug_malloc, (png_free_ptr)png_debug_free);
-#else
- write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL,
- png_error_ptr_NULL, png_error_ptr_NULL);
-#endif
- png_set_error_fn(write_ptr, (png_voidp)inname, pngtest_error,
- pngtest_warning);
-#endif
- png_debug(0, "Allocating read_info, write_info and end_info structures\n");
- read_info_ptr = png_create_info_struct(read_ptr);
- end_info_ptr = png_create_info_struct(read_ptr);
-#ifdef PNG_WRITE_SUPPORTED
- write_info_ptr = png_create_info_struct(write_ptr);
- write_end_info_ptr = png_create_info_struct(write_ptr);
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
- png_debug(0, "Setting jmpbuf for read struct\n");
-#ifdef USE_FAR_KEYWORD
- if (setjmp(jmpbuf))
-#else
- if (setjmp(png_jmpbuf(read_ptr)))
-#endif
- {
- fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname);
- png_free(read_ptr, row_buf);
- png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
-#ifdef PNG_WRITE_SUPPORTED
- png_destroy_info_struct(write_ptr, &write_end_info_ptr);
- png_destroy_write_struct(&write_ptr, &write_info_ptr);
-#endif
- FCLOSE(fpin);
- FCLOSE(fpout);
- return (1);
- }
-#ifdef USE_FAR_KEYWORD
- png_memcpy(png_jmpbuf(read_ptr),jmpbuf,png_sizeof(jmp_buf));
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
- png_debug(0, "Setting jmpbuf for write struct\n");
-#ifdef USE_FAR_KEYWORD
- if (setjmp(jmpbuf))
-#else
- if (setjmp(png_jmpbuf(write_ptr)))
-#endif
- {
- fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname);
- png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
- png_destroy_info_struct(write_ptr, &write_end_info_ptr);
-#ifdef PNG_WRITE_SUPPORTED
- png_destroy_write_struct(&write_ptr, &write_info_ptr);
-#endif
- FCLOSE(fpin);
- FCLOSE(fpout);
- return (1);
- }
-#ifdef USE_FAR_KEYWORD
- png_memcpy(png_jmpbuf(write_ptr),jmpbuf,png_sizeof(jmp_buf));
-#endif
-#endif
-#endif
-
- png_debug(0, "Initializing input and output streams\n");
-#if !defined(PNG_NO_STDIO)
- png_init_io(read_ptr, fpin);
-# ifdef PNG_WRITE_SUPPORTED
- png_init_io(write_ptr, fpout);
-# endif
-#else
- png_set_read_fn(read_ptr, (png_voidp)fpin, pngtest_read_data);
-# ifdef PNG_WRITE_SUPPORTED
- png_set_write_fn(write_ptr, (png_voidp)fpout, pngtest_write_data,
-# if defined(PNG_WRITE_FLUSH_SUPPORTED)
- pngtest_flush);
-# else
- NULL);
-# endif
-# endif
-#endif
- if(status_dots_requested == 1)
- {
-#ifdef PNG_WRITE_SUPPORTED
- png_set_write_status_fn(write_ptr, write_row_callback);
-#endif
- png_set_read_status_fn(read_ptr, read_row_callback);
- }
- else
- {
-#ifdef PNG_WRITE_SUPPORTED
- png_set_write_status_fn(write_ptr, png_write_status_ptr_NULL);
-#endif
- png_set_read_status_fn(read_ptr, png_read_status_ptr_NULL);
- }
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- {
- int i;
- for(i=0; i<256; i++)
- filters_used[i]=0;
- png_set_read_user_transform_fn(read_ptr, count_filters);
- }
-#endif
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
- zero_samples=0;
- png_set_write_user_transform_fn(write_ptr, count_zero_samples);
-#endif
-
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
-# ifndef PNG_HANDLE_CHUNK_ALWAYS
-# define PNG_HANDLE_CHUNK_ALWAYS 3
-# endif
- png_set_keep_unknown_chunks(read_ptr, PNG_HANDLE_CHUNK_ALWAYS,
- png_bytep_NULL, 0);
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
-# ifndef PNG_HANDLE_CHUNK_IF_SAFE
-# define PNG_HANDLE_CHUNK_IF_SAFE 2
-# endif
- png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_IF_SAFE,
- png_bytep_NULL, 0);
-#endif
-
- png_debug(0, "Reading info struct\n");
- png_read_info(read_ptr, read_info_ptr);
-
- png_debug(0, "Transferring info struct\n");
- {
- int interlace_type, compression_type, filter_type;
-
- if (png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,
- &color_type, &interlace_type, &compression_type, &filter_type))
- {
- png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,
-#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
- color_type, interlace_type, compression_type, filter_type);
-#else
- color_type, PNG_INTERLACE_NONE, compression_type, filter_type);
-#endif
- }
- }
-#if defined(PNG_FIXED_POINT_SUPPORTED)
-#if defined(PNG_cHRM_SUPPORTED)
- {
- png_fixed_point white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
- blue_y;
- if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,
- &red_y, &green_x, &green_y, &blue_x, &blue_y))
- {
- png_set_cHRM_fixed(write_ptr, write_info_ptr, white_x, white_y, red_x,
- red_y, green_x, green_y, blue_x, blue_y);
- }
- }
-#endif
-#if defined(PNG_gAMA_SUPPORTED)
- {
- png_fixed_point gamma;
-
- if (png_get_gAMA_fixed(read_ptr, read_info_ptr, &gamma))
- {
- png_set_gAMA_fixed(write_ptr, write_info_ptr, gamma);
- }
- }
-#endif
-#else /* Use floating point versions */
-#if defined(PNG_FLOATING_POINT_SUPPORTED)
-#if defined(PNG_cHRM_SUPPORTED)
- {
- double white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
- blue_y;
- if (png_get_cHRM(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,
- &red_y, &green_x, &green_y, &blue_x, &blue_y))
- {
- png_set_cHRM(write_ptr, write_info_ptr, white_x, white_y, red_x,
- red_y, green_x, green_y, blue_x, blue_y);
- }
- }
-#endif
-#if defined(PNG_gAMA_SUPPORTED)
- {
- double gamma;
-
- if (png_get_gAMA(read_ptr, read_info_ptr, &gamma))
- {
- png_set_gAMA(write_ptr, write_info_ptr, gamma);
- }
- }
-#endif
-#endif /* floating point */
-#endif /* fixed point */
-#if defined(PNG_iCCP_SUPPORTED)
- {
- png_charp name;
- png_charp profile;
- png_uint_32 proflen;
- int compression_type;
-
- if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,
- &profile, &proflen))
- {
- png_set_iCCP(write_ptr, write_info_ptr, name, compression_type,
- profile, proflen);
- }
- }
-#endif
-#if defined(PNG_sRGB_SUPPORTED)
- {
- int intent;
-
- if (png_get_sRGB(read_ptr, read_info_ptr, &intent))
- {
- png_set_sRGB(write_ptr, write_info_ptr, intent);
- }
- }
-#endif
- {
- png_colorp palette;
- int num_palette;
-
- if (png_get_PLTE(read_ptr, read_info_ptr, &palette, &num_palette))
- {
- png_set_PLTE(write_ptr, write_info_ptr, palette, num_palette);
- }
- }
-#if defined(PNG_bKGD_SUPPORTED)
- {
- png_color_16p background;
-
- if (png_get_bKGD(read_ptr, read_info_ptr, &background))
- {
- png_set_bKGD(write_ptr, write_info_ptr, background);
- }
- }
-#endif
-#if defined(PNG_hIST_SUPPORTED)
- {
- png_uint_16p hist;
-
- if (png_get_hIST(read_ptr, read_info_ptr, &hist))
- {
- png_set_hIST(write_ptr, write_info_ptr, hist);
- }
- }
-#endif
-#if defined(PNG_oFFs_SUPPORTED)
- {
- png_int_32 offset_x, offset_y;
- int unit_type;
-
- if (png_get_oFFs(read_ptr, read_info_ptr,&offset_x,&offset_y,&unit_type))
- {
- png_set_oFFs(write_ptr, write_info_ptr, offset_x, offset_y, unit_type);
- }
- }
-#endif
-#if defined(PNG_pCAL_SUPPORTED)
- {
- png_charp purpose, units;
- png_charpp params;
- png_int_32 X0, X1;
- int type, nparams;
-
- if (png_get_pCAL(read_ptr, read_info_ptr, &purpose, &X0, &X1, &type,
- &nparams, &units, &params))
- {
- png_set_pCAL(write_ptr, write_info_ptr, purpose, X0, X1, type,
- nparams, units, params);
- }
- }
-#endif
-#if defined(PNG_pHYs_SUPPORTED)
- {
- png_uint_32 res_x, res_y;
- int unit_type;
-
- if (png_get_pHYs(read_ptr, read_info_ptr, &res_x, &res_y, &unit_type))
- {
- png_set_pHYs(write_ptr, write_info_ptr, res_x, res_y, unit_type);
- }
- }
-#endif
-#if defined(PNG_sBIT_SUPPORTED)
- {
- png_color_8p sig_bit;
-
- if (png_get_sBIT(read_ptr, read_info_ptr, &sig_bit))
- {
- png_set_sBIT(write_ptr, write_info_ptr, sig_bit);
- }
- }
-#endif
-#if defined(PNG_sCAL_SUPPORTED)
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- {
- int unit;
- double scal_width, scal_height;
-
- if (png_get_sCAL(read_ptr, read_info_ptr, &unit, &scal_width,
- &scal_height))
- {
- png_set_sCAL(write_ptr, write_info_ptr, unit, scal_width, scal_height);
- }
- }
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
- {
- int unit;
- png_charp scal_width, scal_height;
-
- if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &scal_width,
- &scal_height))
- {
- png_set_sCAL_s(write_ptr, write_info_ptr, unit, scal_width, scal_height);
- }
- }
-#endif
-#endif
-#endif
-#if defined(PNG_TEXT_SUPPORTED)
- {
- png_textp text_ptr;
- int num_text;
-
- if (png_get_text(read_ptr, read_info_ptr, &text_ptr, &num_text) > 0)
- {
- png_debug1(0, "Handling %d iTXt/tEXt/zTXt chunks\n", num_text);
- png_set_text(write_ptr, write_info_ptr, text_ptr, num_text);
- }
- }
-#endif
-#if defined(PNG_tIME_SUPPORTED)
- {
- png_timep mod_time;
-
- if (png_get_tIME(read_ptr, read_info_ptr, &mod_time))
- {
- png_set_tIME(write_ptr, write_info_ptr, mod_time);
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
- /* we have to use png_memcpy instead of "=" because the string
- pointed to by png_convert_to_rfc1123() gets free'ed before
- we use it */
- png_memcpy(tIME_string,
- png_convert_to_rfc1123(read_ptr, mod_time),
- png_sizeof(tIME_string));
- tIME_string[png_sizeof(tIME_string)-1] = '\0';
- tIME_chunk_present++;
-#endif /* PNG_TIME_RFC1123_SUPPORTED */
- }
- }
-#endif
-#if defined(PNG_tRNS_SUPPORTED)
- {
- png_bytep trans;
- int num_trans;
- png_color_16p trans_values;
-
- if (png_get_tRNS(read_ptr, read_info_ptr, &trans, &num_trans,
- &trans_values))
- {
- int sample_max = (1 << read_info_ptr->bit_depth);
- /* libpng doesn't reject a tRNS chunk with out-of-range samples */
- if (!((read_info_ptr->color_type == PNG_COLOR_TYPE_GRAY &&
- (int)trans_values->gray > sample_max) ||
- (read_info_ptr->color_type == PNG_COLOR_TYPE_RGB &&
- ((int)trans_values->red > sample_max ||
- (int)trans_values->green > sample_max ||
- (int)trans_values->blue > sample_max))))
- png_set_tRNS(write_ptr, write_info_ptr, trans, num_trans,
- trans_values);
- }
- }
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
- {
- png_unknown_chunkp unknowns;
- int num_unknowns = (int)png_get_unknown_chunks(read_ptr, read_info_ptr,
- &unknowns);
- if (num_unknowns)
- {
- png_size_t i;
- png_set_unknown_chunks(write_ptr, write_info_ptr, unknowns,
- num_unknowns);
- /* copy the locations from the read_info_ptr. The automatically
- generated locations in write_info_ptr are wrong because we
- haven't written anything yet */
- for (i = 0; i < (png_size_t)num_unknowns; i++)
- png_set_unknown_chunk_location(write_ptr, write_info_ptr, i,
- unknowns[i].location);
- }
- }
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
- png_debug(0, "\nWriting info struct\n");
-
-/* If we wanted, we could write info in two steps:
- png_write_info_before_PLTE(write_ptr, write_info_ptr);
- */
- png_write_info(write_ptr, write_info_ptr);
-#endif
-
-#ifdef SINGLE_ROWBUF_ALLOC
- png_debug(0, "\nAllocating row buffer...");
- row_buf = (png_bytep)png_malloc(read_ptr,
- png_get_rowbytes(read_ptr, read_info_ptr));
- png_debug1(0, "0x%08lx\n\n", (unsigned long)row_buf);
-#endif /* SINGLE_ROWBUF_ALLOC */
- png_debug(0, "Writing row data\n");
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
- defined(PNG_WRITE_INTERLACING_SUPPORTED)
- num_pass = png_set_interlace_handling(read_ptr);
-# ifdef PNG_WRITE_SUPPORTED
- png_set_interlace_handling(write_ptr);
-# endif
-#else
- num_pass=1;
-#endif
-
-#ifdef PNGTEST_TIMING
- t_stop = (float)clock();
- t_misc += (t_stop - t_start);
- t_start = t_stop;
-#endif
- for (pass = 0; pass < num_pass; pass++)
- {
- png_debug1(0, "Writing row data for pass %d\n",pass);
- for (y = 0; y < height; y++)
- {
-#ifndef SINGLE_ROWBUF_ALLOC
- png_debug2(0, "\nAllocating row buffer (pass %d, y = %ld)...", pass,y);
- row_buf = (png_bytep)png_malloc(read_ptr,
- png_get_rowbytes(read_ptr, read_info_ptr));
- png_debug2(0, "0x%08lx (%ld bytes)\n", (unsigned long)row_buf,
- png_get_rowbytes(read_ptr, read_info_ptr));
-#endif /* !SINGLE_ROWBUF_ALLOC */
- png_read_rows(read_ptr, (png_bytepp)&row_buf, png_bytepp_NULL, 1);
-
-#ifdef PNG_WRITE_SUPPORTED
-#ifdef PNGTEST_TIMING
- t_stop = (float)clock();
- t_decode += (t_stop - t_start);
- t_start = t_stop;
-#endif
- png_write_rows(write_ptr, (png_bytepp)&row_buf, 1);
-#ifdef PNGTEST_TIMING
- t_stop = (float)clock();
- t_encode += (t_stop - t_start);
- t_start = t_stop;
-#endif
-#endif /* PNG_WRITE_SUPPORTED */
-
-#ifndef SINGLE_ROWBUF_ALLOC
- png_debug2(0, "Freeing row buffer (pass %d, y = %ld)\n\n", pass, y);
- png_free(read_ptr, row_buf);
-#endif /* !SINGLE_ROWBUF_ALLOC */
- }
- }
-
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
- png_free_data(read_ptr, read_info_ptr, PNG_FREE_UNKN, -1);
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
- png_free_data(write_ptr, write_info_ptr, PNG_FREE_UNKN, -1);
-#endif
-
- png_debug(0, "Reading and writing end_info data\n");
-
- png_read_end(read_ptr, end_info_ptr);
-#if defined(PNG_TEXT_SUPPORTED)
- {
- png_textp text_ptr;
- int num_text;
-
- if (png_get_text(read_ptr, end_info_ptr, &text_ptr, &num_text) > 0)
- {
- png_debug1(0, "Handling %d iTXt/tEXt/zTXt chunks\n", num_text);
- png_set_text(write_ptr, write_end_info_ptr, text_ptr, num_text);
- }
- }
-#endif
-#if defined(PNG_tIME_SUPPORTED)
- {
- png_timep mod_time;
-
- if (png_get_tIME(read_ptr, end_info_ptr, &mod_time))
- {
- png_set_tIME(write_ptr, write_end_info_ptr, mod_time);
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
- /* we have to use png_memcpy instead of "=" because the string
- pointed to by png_convert_to_rfc1123() gets free'ed before
- we use it */
- png_memcpy(tIME_string,
- png_convert_to_rfc1123(read_ptr, mod_time),
- png_sizeof(tIME_string));
- tIME_string[png_sizeof(tIME_string)-1] = '\0';
- tIME_chunk_present++;
-#endif /* PNG_TIME_RFC1123_SUPPORTED */
- }
- }
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
- {
- png_unknown_chunkp unknowns;
- int num_unknowns;
- num_unknowns = (int)png_get_unknown_chunks(read_ptr, end_info_ptr,
- &unknowns);
- if (num_unknowns)
- {
- png_size_t i;
- png_set_unknown_chunks(write_ptr, write_end_info_ptr, unknowns,
- num_unknowns);
- /* copy the locations from the read_info_ptr. The automatically
- generated locations in write_end_info_ptr are wrong because we
- haven't written the end_info yet */
- for (i = 0; i < (png_size_t)num_unknowns; i++)
- png_set_unknown_chunk_location(write_ptr, write_end_info_ptr, i,
- unknowns[i].location);
- }
- }
-#endif
-#ifdef PNG_WRITE_SUPPORTED
- png_write_end(write_ptr, write_end_info_ptr);
-#endif
-
-#ifdef PNG_EASY_ACCESS_SUPPORTED
- if(verbose)
- {
- png_uint_32 iwidth, iheight;
- iwidth = png_get_image_width(write_ptr, write_info_ptr);
- iheight = png_get_image_height(write_ptr, write_info_ptr);
- fprintf(STDERR, "Image width = %lu, height = %lu\n",
- (unsigned long)iwidth, (unsigned long)iheight);
- }
-#endif
-
- png_debug(0, "Destroying data structs\n");
-#ifdef SINGLE_ROWBUF_ALLOC
- png_debug(1, "destroying row_buf for read_ptr\n");
- png_free(read_ptr, row_buf);
- row_buf=NULL;
-#endif /* SINGLE_ROWBUF_ALLOC */
- png_debug(1, "destroying read_ptr, read_info_ptr, end_info_ptr\n");
- png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
-#ifdef PNG_WRITE_SUPPORTED
- png_debug(1, "destroying write_end_info_ptr\n");
- png_destroy_info_struct(write_ptr, &write_end_info_ptr);
- png_debug(1, "destroying write_ptr, write_info_ptr\n");
- png_destroy_write_struct(&write_ptr, &write_info_ptr);
-#endif
- png_debug(0, "Destruction complete.\n");
-
- FCLOSE(fpin);
- FCLOSE(fpout);
-
- png_debug(0, "Opening files for comparison\n");
-#if defined(_WIN32_WCE)
- MultiByteToWideChar(CP_ACP, 0, inname, -1, path, MAX_PATH);
- if ((fpin = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
-#else
- if ((fpin = fopen(inname, "rb")) == NULL)
-#endif
- {
- fprintf(STDERR, "Could not find file %s\n", inname);
- return (1);
- }
-
-#if defined(_WIN32_WCE)
- MultiByteToWideChar(CP_ACP, 0, outname, -1, path, MAX_PATH);
- if ((fpout = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
-#else
- if ((fpout = fopen(outname, "rb")) == NULL)
-#endif
- {
- fprintf(STDERR, "Could not find file %s\n", outname);
- FCLOSE(fpin);
- return (1);
- }
-
- for(;;)
- {
- png_size_t num_in, num_out;
-
- READFILE(fpin, inbuf, 1, num_in);
- READFILE(fpout, outbuf, 1, num_out);
-
- if (num_in != num_out)
- {
- fprintf(STDERR, "\nFiles %s and %s are of a different size\n",
- inname, outname);
- if(wrote_question == 0)
- {
- fprintf(STDERR,
- " Was %s written with the same maximum IDAT chunk size (%d bytes),",
- inname,PNG_ZBUF_SIZE);
- fprintf(STDERR,
- "\n filtering heuristic (libpng default), compression");
- fprintf(STDERR,
- " level (zlib default),\n and zlib version (%s)?\n\n",
- ZLIB_VERSION);
- wrote_question=1;
- }
- FCLOSE(fpin);
- FCLOSE(fpout);
- return (0);
- }
-
- if (!num_in)
- break;
-
- if (png_memcmp(inbuf, outbuf, num_in))
- {
- fprintf(STDERR, "\nFiles %s and %s are different\n", inname, outname);
- if(wrote_question == 0)
- {
- fprintf(STDERR,
- " Was %s written with the same maximum IDAT chunk size (%d bytes),",
- inname,PNG_ZBUF_SIZE);
- fprintf(STDERR,
- "\n filtering heuristic (libpng default), compression");
- fprintf(STDERR,
- " level (zlib default),\n and zlib version (%s)?\n\n",
- ZLIB_VERSION);
- wrote_question=1;
- }
- FCLOSE(fpin);
- FCLOSE(fpout);
- return (0);
- }
- }
-
- FCLOSE(fpin);
- FCLOSE(fpout);
-
- return (0);
-}
-
-/* input and output filenames */
-#ifdef RISCOS
-static PNG_CONST char *inname = "pngtest/png";
-static PNG_CONST char *outname = "pngout/png";
-#else
-static PNG_CONST char *inname = "pngtest.png";
-static PNG_CONST char *outname = "pngout.png";
-#endif
-
-int
-main(int argc, char *argv[])
-{
- int multiple = 0;
- int ierror = 0;
-
- fprintf(STDERR, "Testing libpng version %s\n", PNG_LIBPNG_VER_STRING);
- fprintf(STDERR, " with zlib version %s\n", ZLIB_VERSION);
- fprintf(STDERR,"%s",png_get_copyright(NULL));
- /* Show the version of libpng used in building the library */
- fprintf(STDERR," library (%lu):%s",
- (unsigned long)png_access_version_number(),
- png_get_header_version(NULL));
- /* Show the version of libpng used in building the application */
- fprintf(STDERR," pngtest (%lu):%s", (unsigned long)PNG_LIBPNG_VER,
- PNG_HEADER_VERSION_STRING);
- fprintf(STDERR," png_sizeof(png_struct)=%ld, png_sizeof(png_info)=%ld\n",
- (long)png_sizeof(png_struct), (long)png_sizeof(png_info));
-
- /* Do some consistency checking on the memory allocation settings, I'm
- not sure this matters, but it is nice to know, the first of these
- tests should be impossible because of the way the macros are set
- in pngconf.h */
-#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
- fprintf(STDERR, " NOTE: Zlib compiled for max 64k, libpng not\n");
-#endif
- /* I think the following can happen. */
-#if !defined(MAXSEG_64K) && defined(PNG_MAX_MALLOC_64K)
- fprintf(STDERR, " NOTE: libpng compiled for max 64k, zlib not\n");
-#endif
-
- if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING))
- {
- fprintf(STDERR,
- "Warning: versions are different between png.h and png.c\n");
- fprintf(STDERR, " png.h version: %s\n", PNG_LIBPNG_VER_STRING);
- fprintf(STDERR, " png.c version: %s\n\n", png_libpng_ver);
- ++ierror;
- }
-
- if (argc > 1)
- {
- if (strcmp(argv[1], "-m") == 0)
- {
- multiple = 1;
- status_dots_requested = 0;
- }
- else if (strcmp(argv[1], "-mv") == 0 ||
- strcmp(argv[1], "-vm") == 0 )
- {
- multiple = 1;
- verbose = 1;
- status_dots_requested = 1;
- }
- else if (strcmp(argv[1], "-v") == 0)
- {
- verbose = 1;
- status_dots_requested = 1;
- inname = argv[2];
- }
- else
- {
- inname = argv[1];
- status_dots_requested = 0;
- }
- }
-
- if (!multiple && argc == 3+verbose)
- outname = argv[2+verbose];
-
- if ((!multiple && argc > 3+verbose) || (multiple && argc < 2))
- {
- fprintf(STDERR,
- "usage: %s [infile.png] [outfile.png]\n\t%s -m {infile.png}\n",
- argv[0], argv[0]);
- fprintf(STDERR,
- " reads/writes one PNG file (without -m) or multiple files (-m)\n");
- fprintf(STDERR,
- " with -m %s is used as a temporary file\n", outname);
- exit(1);
- }
-
- if (multiple)
- {
- int i;
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- int allocation_now = current_allocation;
-#endif
- for (i=2; i<argc; ++i)
- {
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- int k;
-#endif
- int kerror;
- fprintf(STDERR, "Testing %s:",argv[i]);
- kerror = test_one_file(argv[i], outname);
- if (kerror == 0)
- {
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
- fprintf(STDERR, "\n PASS (%lu zero samples)\n",
- (unsigned long)zero_samples);
-#else
- fprintf(STDERR, " PASS\n");
-#endif
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- for (k=0; k<256; k++)
- if(filters_used[k])
- fprintf(STDERR, " Filter %d was used %lu times\n",
- k,(unsigned long)filters_used[k]);
-#endif
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
- if(tIME_chunk_present != 0)
- fprintf(STDERR, " tIME = %s\n",tIME_string);
- tIME_chunk_present = 0;
-#endif /* PNG_TIME_RFC1123_SUPPORTED */
- }
- else
- {
- fprintf(STDERR, " FAIL\n");
- ierror += kerror;
- }
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- if (allocation_now != current_allocation)
- fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
- current_allocation-allocation_now);
- if (current_allocation != 0)
- {
- memory_infop pinfo = pinformation;
-
- fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
- current_allocation);
- while (pinfo != NULL)
- {
- fprintf(STDERR, " %lu bytes at %x\n", (unsigned long)pinfo->size,
- (unsigned int) pinfo->pointer);
- pinfo = pinfo->next;
- }
- }
-#endif
- }
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- fprintf(STDERR, " Current memory allocation: %10d bytes\n",
- current_allocation);
- fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",
- maximum_allocation);
- fprintf(STDERR, " Total memory allocation: %10d bytes\n",
- total_allocation);
- fprintf(STDERR, " Number of allocations: %10d\n",
- num_allocations);
-#endif
- }
- else
- {
- int i;
- for (i=0; i<3; ++i)
- {
- int kerror;
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- int allocation_now = current_allocation;
-#endif
- if (i == 1) status_dots_requested = 1;
- else if(verbose == 0)status_dots_requested = 0;
- if (i == 0 || verbose == 1 || ierror != 0)
- fprintf(STDERR, "Testing %s:",inname);
- kerror = test_one_file(inname, outname);
- if(kerror == 0)
- {
- if(verbose == 1 || i == 2)
- {
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- int k;
-#endif
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
- fprintf(STDERR, "\n PASS (%lu zero samples)\n",
- (unsigned long)zero_samples);
-#else
- fprintf(STDERR, " PASS\n");
-#endif
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
- for (k=0; k<256; k++)
- if(filters_used[k])
- fprintf(STDERR, " Filter %d was used %lu times\n",
- k,(unsigned long)filters_used[k]);
-#endif
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
- if(tIME_chunk_present != 0)
- fprintf(STDERR, " tIME = %s\n",tIME_string);
-#endif /* PNG_TIME_RFC1123_SUPPORTED */
- }
- }
- else
- {
- if(verbose == 0 && i != 2)
- fprintf(STDERR, "Testing %s:",inname);
- fprintf(STDERR, " FAIL\n");
- ierror += kerror;
- }
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- if (allocation_now != current_allocation)
- fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
- current_allocation-allocation_now);
- if (current_allocation != 0)
- {
- memory_infop pinfo = pinformation;
-
- fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
- current_allocation);
- while (pinfo != NULL)
- {
- fprintf(STDERR," %lu bytes at %x\n",
- (unsigned long)pinfo->size, (unsigned int)pinfo->pointer);
- pinfo = pinfo->next;
- }
- }
-#endif
- }
-#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
- fprintf(STDERR, " Current memory allocation: %10d bytes\n",
- current_allocation);
- fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",
- maximum_allocation);
- fprintf(STDERR, " Total memory allocation: %10d bytes\n",
- total_allocation);
- fprintf(STDERR, " Number of allocations: %10d\n",
- num_allocations);
-#endif
- }
-
-#ifdef PNGTEST_TIMING
- t_stop = (float)clock();
- t_misc += (t_stop - t_start);
- t_start = t_stop;
- fprintf(STDERR," CPU time used = %.3f seconds",
- (t_misc+t_decode+t_encode)/(float)CLOCKS_PER_SEC);
- fprintf(STDERR," (decoding %.3f,\n",
- t_decode/(float)CLOCKS_PER_SEC);
- fprintf(STDERR," encoding %.3f ,",
- t_encode/(float)CLOCKS_PER_SEC);
- fprintf(STDERR," other %.3f seconds)\n\n",
- t_misc/(float)CLOCKS_PER_SEC);
-#endif
-
- if (ierror == 0)
- fprintf(STDERR, "libpng passes test\n");
- else
- fprintf(STDERR, "libpng FAILS test\n");
- return (int)(ierror != 0);
-}
-
-/* Generate a compiler error if there is an old png.h in the search path. */
-typedef version_1_2_29 your_png_h_is_not_version_1_2_29;
diff --git a/Build/source/libs/libpng/pngtest.png b/Build/source/libs/libpng/pngtest.png
deleted file mode 100644
index f3a6df4483f..00000000000
--- a/Build/source/libs/libpng/pngtest.png
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/libpng/pngtrans.c b/Build/source/libs/libpng/pngtrans.c
deleted file mode 100644
index 1640095020c..00000000000
--- a/Build/source/libs/libpng/pngtrans.c
+++ /dev/null
@@ -1,662 +0,0 @@
-
-/* pngtrans.c - transforms the data in a row (used by both readers and writers)
- *
- * Last changed in libpng 1.2.17 May 15, 2007
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2007 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* turn on BGR-to-RGB mapping */
-void PNGAPI
-png_set_bgr(png_structp png_ptr)
-{
- png_debug(1, "in png_set_bgr\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_BGR;
-}
-#endif
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* turn on 16 bit byte swapping */
-void PNGAPI
-png_set_swap(png_structp png_ptr)
-{
- png_debug(1, "in png_set_swap\n");
- if(png_ptr == NULL) return;
- if (png_ptr->bit_depth == 16)
- png_ptr->transformations |= PNG_SWAP_BYTES;
-}
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
-/* turn on pixel packing */
-void PNGAPI
-png_set_packing(png_structp png_ptr)
-{
- png_debug(1, "in png_set_packing\n");
- if(png_ptr == NULL) return;
- if (png_ptr->bit_depth < 8)
- {
- png_ptr->transformations |= PNG_PACK;
- png_ptr->usr_bit_depth = 8;
- }
-}
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-/* turn on packed pixel swapping */
-void PNGAPI
-png_set_packswap(png_structp png_ptr)
-{
- png_debug(1, "in png_set_packswap\n");
- if(png_ptr == NULL) return;
- if (png_ptr->bit_depth < 8)
- png_ptr->transformations |= PNG_PACKSWAP;
-}
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-void PNGAPI
-png_set_shift(png_structp png_ptr, png_color_8p true_bits)
-{
- png_debug(1, "in png_set_shift\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_SHIFT;
- png_ptr->shift = *true_bits;
-}
-#endif
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
- defined(PNG_WRITE_INTERLACING_SUPPORTED)
-int PNGAPI
-png_set_interlace_handling(png_structp png_ptr)
-{
- png_debug(1, "in png_set_interlace handling\n");
- if (png_ptr && png_ptr->interlaced)
- {
- png_ptr->transformations |= PNG_INTERLACE;
- return (7);
- }
-
- return (1);
-}
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-/* Add a filler byte on read, or remove a filler or alpha byte on write.
- * The filler type has changed in v0.95 to allow future 2-byte fillers
- * for 48-bit input data, as well as to avoid problems with some compilers
- * that don't like bytes as parameters.
- */
-void PNGAPI
-png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
-{
- png_debug(1, "in png_set_filler\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_FILLER;
- png_ptr->filler = (png_byte)filler;
- if (filler_loc == PNG_FILLER_AFTER)
- png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
- else
- png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
-
- /* This should probably go in the "do_read_filler" routine.
- * I attempted to do that in libpng-1.0.1a but that caused problems
- * so I restored it in libpng-1.0.2a
- */
-
- if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
- {
- png_ptr->usr_channels = 4;
- }
-
- /* Also I added this in libpng-1.0.2a (what happens when we expand
- * a less-than-8-bit grayscale to GA? */
-
- if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8)
- {
- png_ptr->usr_channels = 2;
- }
-}
-
-#if !defined(PNG_1_0_X)
-/* Added to libpng-1.2.7 */
-void PNGAPI
-png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
-{
- png_debug(1, "in png_set_add_alpha\n");
- if(png_ptr == NULL) return;
- png_set_filler(png_ptr, filler, filler_loc);
- png_ptr->transformations |= PNG_ADD_ALPHA;
-}
-#endif
-
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
- defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-void PNGAPI
-png_set_swap_alpha(png_structp png_ptr)
-{
- png_debug(1, "in png_set_swap_alpha\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_SWAP_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
- defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-void PNGAPI
-png_set_invert_alpha(png_structp png_ptr)
-{
- png_debug(1, "in png_set_invert_alpha\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_INVERT_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-void PNGAPI
-png_set_invert_mono(png_structp png_ptr)
-{
- png_debug(1, "in png_set_invert_mono\n");
- if(png_ptr == NULL) return;
- png_ptr->transformations |= PNG_INVERT_MONO;
-}
-
-/* invert monochrome grayscale data */
-void /* PRIVATE */
-png_do_invert(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_invert\n");
- /* This test removed from libpng version 1.0.13 and 1.2.0:
- * if (row_info->bit_depth == 1 &&
- */
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row == NULL || row_info == NULL)
- return;
-#endif
- if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
- {
- png_bytep rp = row;
- png_uint_32 i;
- png_uint_32 istop = row_info->rowbytes;
-
- for (i = 0; i < istop; i++)
- {
- *rp = (png_byte)(~(*rp));
- rp++;
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
- row_info->bit_depth == 8)
- {
- png_bytep rp = row;
- png_uint_32 i;
- png_uint_32 istop = row_info->rowbytes;
-
- for (i = 0; i < istop; i+=2)
- {
- *rp = (png_byte)(~(*rp));
- rp+=2;
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
- row_info->bit_depth == 16)
- {
- png_bytep rp = row;
- png_uint_32 i;
- png_uint_32 istop = row_info->rowbytes;
-
- for (i = 0; i < istop; i+=4)
- {
- *rp = (png_byte)(~(*rp));
- *(rp+1) = (png_byte)(~(*(rp+1)));
- rp+=4;
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* swaps byte order on 16 bit depth images */
-void /* PRIVATE */
-png_do_swap(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_swap\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- row_info->bit_depth == 16)
- {
- png_bytep rp = row;
- png_uint_32 i;
- png_uint_32 istop= row_info->width * row_info->channels;
-
- for (i = 0; i < istop; i++, rp += 2)
- {
- png_byte t = *rp;
- *rp = *(rp + 1);
- *(rp + 1) = t;
- }
- }
-}
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-static PNG_CONST png_byte onebppswaptable[256] = {
- 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
- 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
- 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
- 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
- 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
- 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
- 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
- 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
- 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
- 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
- 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
- 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
- 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
- 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
- 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
- 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
- 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
- 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
- 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
- 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
- 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
- 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
- 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
- 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
- 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
- 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
- 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
- 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
- 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
- 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
- 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
- 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-};
-
-static PNG_CONST png_byte twobppswaptable[256] = {
- 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
- 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
- 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
- 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
- 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
- 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
- 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
- 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
- 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
- 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
- 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
- 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
- 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
- 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
- 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
- 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
- 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
- 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
- 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
- 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
- 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
- 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
- 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
- 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
- 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
- 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
- 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
- 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
- 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
- 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
- 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
- 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
-};
-
-static PNG_CONST png_byte fourbppswaptable[256] = {
- 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
- 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
- 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
- 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
- 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
- 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
- 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
- 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
- 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
- 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
- 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
- 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
- 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
- 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
- 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
- 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
- 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
- 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
- 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
- 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
- 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
- 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
- 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
- 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
- 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
- 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
- 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
- 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
- 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
- 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
- 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
- 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
-};
-
-/* swaps pixel packing order within bytes */
-void /* PRIVATE */
-png_do_packswap(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_packswap\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- row_info->bit_depth < 8)
- {
- png_bytep rp, end, table;
-
- end = row + row_info->rowbytes;
-
- if (row_info->bit_depth == 1)
- table = (png_bytep)onebppswaptable;
- else if (row_info->bit_depth == 2)
- table = (png_bytep)twobppswaptable;
- else if (row_info->bit_depth == 4)
- table = (png_bytep)fourbppswaptable;
- else
- return;
-
- for (rp = row; rp < end; rp++)
- *rp = table[*rp];
- }
-}
-#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
- defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-/* remove filler or alpha byte(s) */
-void /* PRIVATE */
-png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
-{
- png_debug(1, "in png_do_strip_filler\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL)
-#endif
- {
- png_bytep sp=row;
- png_bytep dp=row;
- png_uint_32 row_width=row_info->width;
- png_uint_32 i;
-
- if ((row_info->color_type == PNG_COLOR_TYPE_RGB ||
- (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
- (flags & PNG_FLAG_STRIP_ALPHA))) &&
- row_info->channels == 4)
- {
- if (row_info->bit_depth == 8)
- {
- /* This converts from RGBX or RGBA to RGB */
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- dp+=3; sp+=4;
- for (i = 1; i < row_width; i++)
- {
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- sp++;
- }
- }
- /* This converts from XRGB or ARGB to RGB */
- else
- {
- for (i = 0; i < row_width; i++)
- {
- sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- }
- }
- row_info->pixel_depth = 24;
- row_info->rowbytes = row_width * 3;
- }
- else /* if (row_info->bit_depth == 16) */
- {
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */
- sp += 8; dp += 6;
- for (i = 1; i < row_width; i++)
- {
- /* This could be (although png_memcpy is probably slower):
- png_memcpy(dp, sp, 6);
- sp += 8;
- dp += 6;
- */
-
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- sp += 2;
- }
- }
- else
- {
- /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */
- for (i = 0; i < row_width; i++)
- {
- /* This could be (although png_memcpy is probably slower):
- png_memcpy(dp, sp, 6);
- sp += 8;
- dp += 6;
- */
-
- sp+=2;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- }
- }
- row_info->pixel_depth = 48;
- row_info->rowbytes = row_width * 6;
- }
- row_info->channels = 3;
- }
- else if ((row_info->color_type == PNG_COLOR_TYPE_GRAY ||
- (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
- (flags & PNG_FLAG_STRIP_ALPHA))) &&
- row_info->channels == 2)
- {
- if (row_info->bit_depth == 8)
- {
- /* This converts from GX or GA to G */
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- for (i = 0; i < row_width; i++)
- {
- *dp++ = *sp++;
- sp++;
- }
- }
- /* This converts from XG or AG to G */
- else
- {
- for (i = 0; i < row_width; i++)
- {
- sp++;
- *dp++ = *sp++;
- }
- }
- row_info->pixel_depth = 8;
- row_info->rowbytes = row_width;
- }
- else /* if (row_info->bit_depth == 16) */
- {
- if (flags & PNG_FLAG_FILLER_AFTER)
- {
- /* This converts from GGXX or GGAA to GG */
- sp += 4; dp += 2;
- for (i = 1; i < row_width; i++)
- {
- *dp++ = *sp++;
- *dp++ = *sp++;
- sp += 2;
- }
- }
- else
- {
- /* This converts from XXGG or AAGG to GG */
- for (i = 0; i < row_width; i++)
- {
- sp += 2;
- *dp++ = *sp++;
- *dp++ = *sp++;
- }
- }
- row_info->pixel_depth = 16;
- row_info->rowbytes = row_width * 2;
- }
- row_info->channels = 1;
- }
- if (flags & PNG_FLAG_STRIP_ALPHA)
- row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;
- }
-}
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* swaps red and blue bytes within a pixel */
-void /* PRIVATE */
-png_do_bgr(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_bgr\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- (row_info->color_type & PNG_COLOR_MASK_COLOR))
- {
- png_uint_32 row_width = row_info->width;
- if (row_info->bit_depth == 8)
- {
- if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- {
- png_bytep rp;
- png_uint_32 i;
-
- for (i = 0, rp = row; i < row_width; i++, rp += 3)
- {
- png_byte save = *rp;
- *rp = *(rp + 2);
- *(rp + 2) = save;
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- {
- png_bytep rp;
- png_uint_32 i;
-
- for (i = 0, rp = row; i < row_width; i++, rp += 4)
- {
- png_byte save = *rp;
- *rp = *(rp + 2);
- *(rp + 2) = save;
- }
- }
- }
- else if (row_info->bit_depth == 16)
- {
- if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- {
- png_bytep rp;
- png_uint_32 i;
-
- for (i = 0, rp = row; i < row_width; i++, rp += 6)
- {
- png_byte save = *rp;
- *rp = *(rp + 4);
- *(rp + 4) = save;
- save = *(rp + 1);
- *(rp + 1) = *(rp + 5);
- *(rp + 5) = save;
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- {
- png_bytep rp;
- png_uint_32 i;
-
- for (i = 0, rp = row; i < row_width; i++, rp += 8)
- {
- png_byte save = *rp;
- *rp = *(rp + 4);
- *(rp + 4) = save;
- save = *(rp + 1);
- *(rp + 1) = *(rp + 5);
- *(rp + 5) = save;
- }
- }
- }
- }
-}
-#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_LEGACY_SUPPORTED)
-void PNGAPI
-png_set_user_transform_info(png_structp png_ptr, png_voidp
- user_transform_ptr, int user_transform_depth, int user_transform_channels)
-{
- png_debug(1, "in png_set_user_transform_info\n");
- if(png_ptr == NULL) return;
-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
- png_ptr->user_transform_ptr = user_transform_ptr;
- png_ptr->user_transform_depth = (png_byte)user_transform_depth;
- png_ptr->user_transform_channels = (png_byte)user_transform_channels;
-#else
- if(user_transform_ptr || user_transform_depth || user_transform_channels)
- png_warning(png_ptr,
- "This version of libpng does not support user transform info");
-#endif
-}
-#endif
-
-/* This function returns a pointer to the user_transform_ptr associated with
- * the user transform functions. The application should free any memory
- * associated with this pointer before png_write_destroy and png_read_destroy
- * are called.
- */
-png_voidp PNGAPI
-png_get_user_transform_ptr(png_structp png_ptr)
-{
-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
- if (png_ptr == NULL) return (NULL);
- return ((png_voidp)png_ptr->user_transform_ptr);
-#else
- return (NULL);
-#endif
-}
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngvcrd.c b/Build/source/libs/libpng/pngvcrd.c
deleted file mode 100644
index ce4233efe7e..00000000000
--- a/Build/source/libs/libpng/pngvcrd.c
+++ /dev/null
@@ -1 +0,0 @@
-/* pnggvrd.c was removed from libpng-1.2.20. */
diff --git a/Build/source/libs/libpng/pngwio.c b/Build/source/libs/libpng/pngwio.c
deleted file mode 100644
index 371a4fad624..00000000000
--- a/Build/source/libs/libpng/pngwio.c
+++ /dev/null
@@ -1,234 +0,0 @@
-
-/* pngwio.c - functions for data output
- *
- * Last changed in libpng 1.2.13 November 13, 2006
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2006 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This file provides a location for all output. Users who need
- * special handling are expected to write functions that have the same
- * arguments as these and perform similar functions, but that possibly
- * use different output methods. Note that you shouldn't change these
- * functions, but rather write replacement functions and then change
- * them at run time with png_set_write_fn(...).
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-#ifdef PNG_WRITE_SUPPORTED
-
-/* Write the data to whatever output you are using. The default routine
- writes to a file pointer. Note that this routine sometimes gets called
- with very small lengths, so you should implement some kind of simple
- buffering if you are using unbuffered writes. This should never be asked
- to write more than 64K on a 16 bit machine. */
-
-void /* PRIVATE */
-png_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- if (png_ptr->write_data_fn != NULL )
- (*(png_ptr->write_data_fn))(png_ptr, data, length);
- else
- png_error(png_ptr, "Call to NULL write function");
-}
-
-#if !defined(PNG_NO_STDIO)
-/* This is the function that does the actual writing of data. If you are
- not writing to a standard C stream, you should create a replacement
- write_data function and use it at run time with png_set_write_fn(), rather
- than changing the library. */
-#ifndef USE_FAR_KEYWORD
-void PNGAPI
-png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_uint_32 check;
-
- if(png_ptr == NULL) return;
-#if defined(_WIN32_WCE)
- if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) )
- check = 0;
-#else
- check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr));
-#endif
- if (check != length)
- png_error(png_ptr, "Write Error");
-}
-#else
-/* this is the model-independent version. Since the standard I/O library
- can't handle far buffers in the medium and small models, we have to copy
- the data.
-*/
-
-#define NEAR_BUF_SIZE 1024
-#define MIN(a,b) (a <= b ? a : b)
-
-void PNGAPI
-png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_uint_32 check;
- png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */
- png_FILE_p io_ptr;
-
- if(png_ptr == NULL) return;
- /* Check if data really is near. If so, use usual code. */
- near_data = (png_byte *)CVT_PTR_NOCHECK(data);
- io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
- if ((png_bytep)near_data == data)
- {
-#if defined(_WIN32_WCE)
- if ( !WriteFile(io_ptr, near_data, length, &check, NULL) )
- check = 0;
-#else
- check = fwrite(near_data, 1, length, io_ptr);
-#endif
- }
- else
- {
- png_byte buf[NEAR_BUF_SIZE];
- png_size_t written, remaining, err;
- check = 0;
- remaining = length;
- do
- {
- written = MIN(NEAR_BUF_SIZE, remaining);
- png_memcpy(buf, data, written); /* copy far buffer to near buffer */
-#if defined(_WIN32_WCE)
- if ( !WriteFile(io_ptr, buf, written, &err, NULL) )
- err = 0;
-#else
- err = fwrite(buf, 1, written, io_ptr);
-#endif
- if (err != written)
- break;
- else
- check += err;
- data += written;
- remaining -= written;
- }
- while (remaining != 0);
- }
- if (check != length)
- png_error(png_ptr, "Write Error");
-}
-
-#endif
-#endif
-
-/* This function is called to output any data pending writing (normally
- to disk). After png_flush is called, there should be no data pending
- writing in any buffers. */
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
-void /* PRIVATE */
-png_flush(png_structp png_ptr)
-{
- if (png_ptr->output_flush_fn != NULL)
- (*(png_ptr->output_flush_fn))(png_ptr);
-}
-
-#if !defined(PNG_NO_STDIO)
-void PNGAPI
-png_default_flush(png_structp png_ptr)
-{
-#if !defined(_WIN32_WCE)
- png_FILE_p io_ptr;
-#endif
- if(png_ptr == NULL) return;
-#if !defined(_WIN32_WCE)
- io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr));
- if (io_ptr != NULL)
- fflush(io_ptr);
-#endif
-}
-#endif
-#endif
-
-/* This function allows the application to supply new output functions for
- libpng if standard C streams aren't being used.
-
- This function takes as its arguments:
- png_ptr - pointer to a png output data structure
- io_ptr - pointer to user supplied structure containing info about
- the output functions. May be NULL.
- write_data_fn - pointer to a new output function that takes as its
- arguments a pointer to a png_struct, a pointer to
- data to be written, and a 32-bit unsigned int that is
- the number of bytes to be written. The new write
- function should call png_error(png_ptr, "Error msg")
- to exit and output any fatal error messages.
- flush_data_fn - pointer to a new flush function that takes as its
- arguments a pointer to a png_struct. After a call to
- the flush function, there should be no data in any buffers
- or pending transmission. If the output method doesn't do
- any buffering of ouput, a function prototype must still be
- supplied although it doesn't have to do anything. If
- PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile
- time, output_flush_fn will be ignored, although it must be
- supplied for compatibility. */
-void PNGAPI
-png_set_write_fn(png_structp png_ptr, png_voidp io_ptr,
- png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
-{
- if(png_ptr == NULL) return;
- png_ptr->io_ptr = io_ptr;
-
-#if !defined(PNG_NO_STDIO)
- if (write_data_fn != NULL)
- png_ptr->write_data_fn = write_data_fn;
- else
- png_ptr->write_data_fn = png_default_write_data;
-#else
- png_ptr->write_data_fn = write_data_fn;
-#endif
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
-#if !defined(PNG_NO_STDIO)
- if (output_flush_fn != NULL)
- png_ptr->output_flush_fn = output_flush_fn;
- else
- png_ptr->output_flush_fn = png_default_flush;
-#else
- png_ptr->output_flush_fn = output_flush_fn;
-#endif
-#endif /* PNG_WRITE_FLUSH_SUPPORTED */
-
- /* It is an error to read while writing a png file */
- if (png_ptr->read_data_fn != NULL)
- {
- png_ptr->read_data_fn = NULL;
- png_warning(png_ptr,
- "Attempted to set both read_data_fn and write_data_fn in");
- png_warning(png_ptr,
- "the same structure. Resetting read_data_fn to NULL.");
- }
-}
-
-#if defined(USE_FAR_KEYWORD)
-#if defined(_MSC_VER)
-void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
-{
- void *near_ptr;
- void FAR *far_ptr;
- FP_OFF(near_ptr) = FP_OFF(ptr);
- far_ptr = (void FAR *)near_ptr;
- if(check != 0)
- if(FP_SEG(ptr) != FP_SEG(far_ptr))
- png_error(png_ptr,"segment lost in conversion");
- return(near_ptr);
-}
-# else
-void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
-{
- void *near_ptr;
- void FAR *far_ptr;
- near_ptr = (void FAR *)ptr;
- far_ptr = (void FAR *)near_ptr;
- if(check != 0)
- if(far_ptr != ptr)
- png_error(png_ptr,"segment lost in conversion");
- return(near_ptr);
-}
-# endif
-# endif
-#endif /* PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngwrite.c b/Build/source/libs/libpng/pngwrite.c
deleted file mode 100644
index 7d02ad7ddfa..00000000000
--- a/Build/source/libs/libpng/pngwrite.c
+++ /dev/null
@@ -1,1532 +0,0 @@
-
-/* pngwrite.c - general routines to write a PNG file
- *
- * Last changed in libpng 1.2.27 [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-/* get internal access to png.h */
-#define PNG_INTERNAL
-#include "png.h"
-#ifdef PNG_WRITE_SUPPORTED
-
-/* Writes all the PNG information. This is the suggested way to use the
- * library. If you have a new chunk to add, make a function to write it,
- * and put it in the correct location here. If you want the chunk written
- * after the image data, put it in png_write_end(). I strongly encourage
- * you to supply a PNG_INFO_ flag, and check info_ptr->valid before writing
- * the chunk, as that will keep the code from breaking if you want to just
- * write a plain PNG file. If you have long comments, I suggest writing
- * them in png_write_end(), and compressing them.
- */
-void PNGAPI
-png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
-{
- png_debug(1, "in png_write_info_before_PLTE\n");
- if (png_ptr == NULL || info_ptr == NULL)
- return;
- if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
- {
- png_write_sig(png_ptr); /* write PNG signature */
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&(png_ptr->mng_features_permitted))
- {
- png_warning(png_ptr,"MNG features are not allowed in a PNG datastream");
- png_ptr->mng_features_permitted=0;
- }
-#endif
- /* write IHDR information. */
- png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height,
- info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type,
- info_ptr->filter_type,
-#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
- info_ptr->interlace_type);
-#else
- 0);
-#endif
- /* the rest of these check to see if the valid field has the appropriate
- flag set, and if it does, writes the chunk. */
-#if defined(PNG_WRITE_gAMA_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_gAMA)
- {
-# ifdef PNG_FLOATING_POINT_SUPPORTED
- png_write_gAMA(png_ptr, info_ptr->gamma);
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_write_gAMA_fixed(png_ptr, info_ptr->int_gamma);
-# endif
-#endif
- }
-#endif
-#if defined(PNG_WRITE_sRGB_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_sRGB)
- png_write_sRGB(png_ptr, (int)info_ptr->srgb_intent);
-#endif
-#if defined(PNG_WRITE_iCCP_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_iCCP)
- png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_COMPRESSION_TYPE_BASE,
- info_ptr->iccp_profile, (int)info_ptr->iccp_proflen);
-#endif
-#if defined(PNG_WRITE_sBIT_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_sBIT)
- png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
-#endif
-#if defined(PNG_WRITE_cHRM_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_cHRM)
- {
-#ifdef PNG_FLOATING_POINT_SUPPORTED
- png_write_cHRM(png_ptr,
- info_ptr->x_white, info_ptr->y_white,
- info_ptr->x_red, info_ptr->y_red,
- info_ptr->x_green, info_ptr->y_green,
- info_ptr->x_blue, info_ptr->y_blue);
-#else
-# ifdef PNG_FIXED_POINT_SUPPORTED
- png_write_cHRM_fixed(png_ptr,
- info_ptr->int_x_white, info_ptr->int_y_white,
- info_ptr->int_x_red, info_ptr->int_y_red,
- info_ptr->int_x_green, info_ptr->int_y_green,
- info_ptr->int_x_blue, info_ptr->int_y_blue);
-# endif
-#endif
- }
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
- if (info_ptr->unknown_chunks_num)
- {
- png_unknown_chunk *up;
-
- png_debug(5, "writing extra chunks\n");
-
- for (up = info_ptr->unknown_chunks;
- up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
- up++)
- {
- int keep=png_handle_as_unknown(png_ptr, up->name);
- if (keep != PNG_HANDLE_CHUNK_NEVER &&
- up->location && !(up->location & PNG_HAVE_PLTE) &&
- !(up->location & PNG_HAVE_IDAT) &&
- ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS ||
- (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
- {
- if (up->size == 0)
- png_warning(png_ptr, "Writing zero-length unknown chunk");
- png_write_chunk(png_ptr, up->name, up->data, up->size);
- }
- }
- }
-#endif
- png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE;
- }
-}
-
-void PNGAPI
-png_write_info(png_structp png_ptr, png_infop info_ptr)
-{
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
- int i;
-#endif
-
- png_debug(1, "in png_write_info\n");
-
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-
- png_write_info_before_PLTE(png_ptr, info_ptr);
-
- if (info_ptr->valid & PNG_INFO_PLTE)
- png_write_PLTE(png_ptr, info_ptr->palette,
- (png_uint_32)info_ptr->num_palette);
- else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- png_error(png_ptr, "Valid palette required for paletted images");
-
-#if defined(PNG_WRITE_tRNS_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_tRNS)
- {
-#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
- /* invert the alpha channel (in tRNS) */
- if ((png_ptr->transformations & PNG_INVERT_ALPHA) &&
- info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- int j;
- for (j=0; j<(int)info_ptr->num_trans; j++)
- info_ptr->trans[j] = (png_byte)(255 - info_ptr->trans[j]);
- }
-#endif
- png_write_tRNS(png_ptr, info_ptr->trans, &(info_ptr->trans_values),
- info_ptr->num_trans, info_ptr->color_type);
- }
-#endif
-#if defined(PNG_WRITE_bKGD_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_bKGD)
- png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type);
-#endif
-#if defined(PNG_WRITE_hIST_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_hIST)
- png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette);
-#endif
-#if defined(PNG_WRITE_oFFs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_oFFs)
- png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset,
- info_ptr->offset_unit_type);
-#endif
-#if defined(PNG_WRITE_pCAL_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_pCAL)
- png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0,
- info_ptr->pcal_X1, info_ptr->pcal_type, info_ptr->pcal_nparams,
- info_ptr->pcal_units, info_ptr->pcal_params);
-#endif
-#if defined(PNG_WRITE_sCAL_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_sCAL)
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
- png_write_sCAL(png_ptr, (int)info_ptr->scal_unit,
- info_ptr->scal_pixel_width, info_ptr->scal_pixel_height);
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
- png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit,
- info_ptr->scal_s_width, info_ptr->scal_s_height);
-#else
- png_warning(png_ptr,
- "png_write_sCAL not supported; sCAL chunk not written.");
-#endif
-#endif
-#endif
-#if defined(PNG_WRITE_pHYs_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_pHYs)
- png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit,
- info_ptr->y_pixels_per_unit, info_ptr->phys_unit_type);
-#endif
-#if defined(PNG_WRITE_tIME_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_tIME)
- {
- png_write_tIME(png_ptr, &(info_ptr->mod_time));
- png_ptr->mode |= PNG_WROTE_tIME;
- }
-#endif
-#if defined(PNG_WRITE_sPLT_SUPPORTED)
- if (info_ptr->valid & PNG_INFO_sPLT)
- for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
- png_write_sPLT(png_ptr, info_ptr->splt_palettes + i);
-#endif
-#if defined(PNG_WRITE_TEXT_SUPPORTED)
- /* Check to see if we need to write text chunks */
- for (i = 0; i < info_ptr->num_text; i++)
- {
- png_debug2(2, "Writing header text chunk %d, type %d\n", i,
- info_ptr->text[i].compression);
- /* an internationalized chunk? */
- if (info_ptr->text[i].compression > 0)
- {
-#if defined(PNG_WRITE_iTXt_SUPPORTED)
- /* write international chunk */
- png_write_iTXt(png_ptr,
- info_ptr->text[i].compression,
- info_ptr->text[i].key,
- info_ptr->text[i].lang,
- info_ptr->text[i].lang_key,
- info_ptr->text[i].text);
-#else
- png_warning(png_ptr, "Unable to write international text");
-#endif
- /* Mark this chunk as written */
- info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
- }
- /* If we want a compressed text chunk */
- else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_zTXt)
- {
-#if defined(PNG_WRITE_zTXt_SUPPORTED)
- /* write compressed chunk */
- png_write_zTXt(png_ptr, info_ptr->text[i].key,
- info_ptr->text[i].text, 0,
- info_ptr->text[i].compression);
-#else
- png_warning(png_ptr, "Unable to write compressed text");
-#endif
- /* Mark this chunk as written */
- info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
- }
- else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
- {
-#if defined(PNG_WRITE_tEXt_SUPPORTED)
- /* write uncompressed chunk */
- png_write_tEXt(png_ptr, info_ptr->text[i].key,
- info_ptr->text[i].text,
- 0);
-#else
- png_warning(png_ptr, "Unable to write uncompressed text");
-#endif
- /* Mark this chunk as written */
- info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
- }
- }
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
- if (info_ptr->unknown_chunks_num)
- {
- png_unknown_chunk *up;
-
- png_debug(5, "writing extra chunks\n");
-
- for (up = info_ptr->unknown_chunks;
- up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
- up++)
- {
- int keep=png_handle_as_unknown(png_ptr, up->name);
- if (keep != PNG_HANDLE_CHUNK_NEVER &&
- up->location && (up->location & PNG_HAVE_PLTE) &&
- !(up->location & PNG_HAVE_IDAT) &&
- ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS ||
- (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
- {
- png_write_chunk(png_ptr, up->name, up->data, up->size);
- }
- }
- }
-#endif
-}
-
-/* Writes the end of the PNG file. If you don't want to write comments or
- * time information, you can pass NULL for info. If you already wrote these
- * in png_write_info(), do not write them again here. If you have long
- * comments, I suggest writing them here, and compressing them.
- */
-void PNGAPI
-png_write_end(png_structp png_ptr, png_infop info_ptr)
-{
- png_debug(1, "in png_write_end\n");
- if (png_ptr == NULL)
- return;
- if (!(png_ptr->mode & PNG_HAVE_IDAT))
- png_error(png_ptr, "No IDATs written into file");
-
- /* see if user wants us to write information chunks */
- if (info_ptr != NULL)
- {
-#if defined(PNG_WRITE_TEXT_SUPPORTED)
- int i; /* local index variable */
-#endif
-#if defined(PNG_WRITE_tIME_SUPPORTED)
- /* check to see if user has supplied a time chunk */
- if ((info_ptr->valid & PNG_INFO_tIME) &&
- !(png_ptr->mode & PNG_WROTE_tIME))
- png_write_tIME(png_ptr, &(info_ptr->mod_time));
-#endif
-#if defined(PNG_WRITE_TEXT_SUPPORTED)
- /* loop through comment chunks */
- for (i = 0; i < info_ptr->num_text; i++)
- {
- png_debug2(2, "Writing trailer text chunk %d, type %d\n", i,
- info_ptr->text[i].compression);
- /* an internationalized chunk? */
- if (info_ptr->text[i].compression > 0)
- {
-#if defined(PNG_WRITE_iTXt_SUPPORTED)
- /* write international chunk */
- png_write_iTXt(png_ptr,
- info_ptr->text[i].compression,
- info_ptr->text[i].key,
- info_ptr->text[i].lang,
- info_ptr->text[i].lang_key,
- info_ptr->text[i].text);
-#else
- png_warning(png_ptr, "Unable to write international text");
-#endif
- /* Mark this chunk as written */
- info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
- }
- else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
- {
-#if defined(PNG_WRITE_zTXt_SUPPORTED)
- /* write compressed chunk */
- png_write_zTXt(png_ptr, info_ptr->text[i].key,
- info_ptr->text[i].text, 0,
- info_ptr->text[i].compression);
-#else
- png_warning(png_ptr, "Unable to write compressed text");
-#endif
- /* Mark this chunk as written */
- info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
- }
- else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
- {
-#if defined(PNG_WRITE_tEXt_SUPPORTED)
- /* write uncompressed chunk */
- png_write_tEXt(png_ptr, info_ptr->text[i].key,
- info_ptr->text[i].text, 0);
-#else
- png_warning(png_ptr, "Unable to write uncompressed text");
-#endif
-
- /* Mark this chunk as written */
- info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
- }
- }
-#endif
-#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
- if (info_ptr->unknown_chunks_num)
- {
- png_unknown_chunk *up;
-
- png_debug(5, "writing extra chunks\n");
-
- for (up = info_ptr->unknown_chunks;
- up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
- up++)
- {
- int keep=png_handle_as_unknown(png_ptr, up->name);
- if (keep != PNG_HANDLE_CHUNK_NEVER &&
- up->location && (up->location & PNG_AFTER_IDAT) &&
- ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS ||
- (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
- {
- png_write_chunk(png_ptr, up->name, up->data, up->size);
- }
- }
- }
-#endif
- }
-
- png_ptr->mode |= PNG_AFTER_IDAT;
-
- /* write end of PNG file */
- png_write_IEND(png_ptr);
-}
-
-#if defined(PNG_WRITE_tIME_SUPPORTED)
-#if !defined(_WIN32_WCE)
-/* "time.h" functions are not supported on WindowsCE */
-void PNGAPI
-png_convert_from_struct_tm(png_timep ptime, struct tm FAR * ttime)
-{
- png_debug(1, "in png_convert_from_struct_tm\n");
- ptime->year = (png_uint_16)(1900 + ttime->tm_year);
- ptime->month = (png_byte)(ttime->tm_mon + 1);
- ptime->day = (png_byte)ttime->tm_mday;
- ptime->hour = (png_byte)ttime->tm_hour;
- ptime->minute = (png_byte)ttime->tm_min;
- ptime->second = (png_byte)ttime->tm_sec;
-}
-
-void PNGAPI
-png_convert_from_time_t(png_timep ptime, time_t ttime)
-{
- struct tm *tbuf;
-
- png_debug(1, "in png_convert_from_time_t\n");
- tbuf = gmtime(&ttime);
- png_convert_from_struct_tm(ptime, tbuf);
-}
-#endif
-#endif
-
-/* Initialize png_ptr structure, and allocate any memory needed */
-png_structp PNGAPI
-png_create_write_struct(png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn)
-{
-#ifdef PNG_USER_MEM_SUPPORTED
- return (png_create_write_struct_2(user_png_ver, error_ptr, error_fn,
- warn_fn, png_voidp_NULL, png_malloc_ptr_NULL, png_free_ptr_NULL));
-}
-
-/* Alternate initialize png_ptr structure, and allocate any memory needed */
-png_structp PNGAPI
-png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
- png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
- png_malloc_ptr malloc_fn, png_free_ptr free_fn)
-{
-#endif /* PNG_USER_MEM_SUPPORTED */
- png_structp png_ptr;
-#ifdef PNG_SETJMP_SUPPORTED
-#ifdef USE_FAR_KEYWORD
- jmp_buf jmpbuf;
-#endif
-#endif
- int i;
- png_debug(1, "in png_create_write_struct\n");
-#ifdef PNG_USER_MEM_SUPPORTED
- png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG,
- (png_malloc_ptr)malloc_fn, (png_voidp)mem_ptr);
-#else
- png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
-#endif /* PNG_USER_MEM_SUPPORTED */
- if (png_ptr == NULL)
- return (NULL);
-
- /* added at libpng-1.2.6 */
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
- png_ptr->user_width_max=PNG_USER_WIDTH_MAX;
- png_ptr->user_height_max=PNG_USER_HEIGHT_MAX;
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-#ifdef USE_FAR_KEYWORD
- if (setjmp(jmpbuf))
-#else
- if (setjmp(png_ptr->jmpbuf))
-#endif
- {
- png_free(png_ptr, png_ptr->zbuf);
- png_ptr->zbuf=NULL;
- png_destroy_struct(png_ptr);
- return (NULL);
- }
-#ifdef USE_FAR_KEYWORD
- png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf));
-#endif
-#endif
-
-#ifdef PNG_USER_MEM_SUPPORTED
- png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
-#endif /* PNG_USER_MEM_SUPPORTED */
- png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn);
-
- if(user_png_ver)
- {
- i=0;
- do
- {
- if(user_png_ver[i] != png_libpng_ver[i])
- png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
- } while (png_libpng_ver[i++]);
- }
-
- if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH)
- {
- /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so
- * we must recompile any applications that use any older library version.
- * For versions after libpng 1.0, we will be compatible, so we need
- * only check the first digit.
- */
- if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] ||
- (user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) ||
- (user_png_ver[0] == '0' && user_png_ver[2] < '9'))
- {
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- char msg[80];
- if (user_png_ver)
- {
- png_snprintf(msg, 80,
- "Application was compiled with png.h from libpng-%.20s",
- user_png_ver);
- png_warning(png_ptr, msg);
- }
- png_snprintf(msg, 80,
- "Application is running with png.c from libpng-%.20s",
- png_libpng_ver);
- png_warning(png_ptr, msg);
-#endif
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- png_ptr->flags=0;
-#endif
- png_error(png_ptr,
- "Incompatible libpng version in application and library");
- }
- }
-
- /* initialize zbuf - compression buffer */
- png_ptr->zbuf_size = PNG_ZBUF_SIZE;
- png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)png_ptr->zbuf_size);
-
- png_set_write_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL,
- png_flush_ptr_NULL);
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT,
- 1, png_doublep_NULL, png_doublep_NULL);
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-/* Applications that neglect to set up their own setjmp() and then encounter
- a png_error() will longjmp here. Since the jmpbuf is then meaningless we
- abort instead of returning. */
-#ifdef USE_FAR_KEYWORD
- if (setjmp(jmpbuf))
- PNG_ABORT();
- png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf));
-#else
- if (setjmp(png_ptr->jmpbuf))
- PNG_ABORT();
-#endif
-#endif
- return (png_ptr);
-}
-
-/* Initialize png_ptr structure, and allocate any memory needed */
-#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
-/* Deprecated. */
-#undef png_write_init
-void PNGAPI
-png_write_init(png_structp png_ptr)
-{
- /* We only come here via pre-1.0.7-compiled applications */
- png_write_init_2(png_ptr, "1.0.6 or earlier", 0, 0);
-}
-
-void PNGAPI
-png_write_init_2(png_structp png_ptr, png_const_charp user_png_ver,
- png_size_t png_struct_size, png_size_t png_info_size)
-{
- /* We only come here via pre-1.0.12-compiled applications */
- if(png_ptr == NULL) return;
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- if(png_sizeof(png_struct) > png_struct_size ||
- png_sizeof(png_info) > png_info_size)
- {
- char msg[80];
- png_ptr->warning_fn=NULL;
- if (user_png_ver)
- {
- png_snprintf(msg, 80,
- "Application was compiled with png.h from libpng-%.20s",
- user_png_ver);
- png_warning(png_ptr, msg);
- }
- png_snprintf(msg, 80,
- "Application is running with png.c from libpng-%.20s",
- png_libpng_ver);
- png_warning(png_ptr, msg);
- }
-#endif
- if(png_sizeof(png_struct) > png_struct_size)
- {
- png_ptr->error_fn=NULL;
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- png_ptr->flags=0;
-#endif
- png_error(png_ptr,
- "The png struct allocated by the application for writing is too small.");
- }
- if(png_sizeof(png_info) > png_info_size)
- {
- png_ptr->error_fn=NULL;
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
- png_ptr->flags=0;
-#endif
- png_error(png_ptr,
- "The info struct allocated by the application for writing is too small.");
- }
- png_write_init_3(&png_ptr, user_png_ver, png_struct_size);
-}
-#endif /* PNG_1_0_X || PNG_1_2_X */
-
-
-void PNGAPI
-png_write_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver,
- png_size_t png_struct_size)
-{
- png_structp png_ptr=*ptr_ptr;
-#ifdef PNG_SETJMP_SUPPORTED
- jmp_buf tmp_jmp; /* to save current jump buffer */
-#endif
-
- int i = 0;
-
- if (png_ptr == NULL)
- return;
-
- do
- {
- if (user_png_ver[i] != png_libpng_ver[i])
- {
-#ifdef PNG_LEGACY_SUPPORTED
- png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
-#else
- png_ptr->warning_fn=NULL;
- png_warning(png_ptr,
- "Application uses deprecated png_write_init() and should be recompiled.");
- break;
-#endif
- }
- } while (png_libpng_ver[i++]);
-
- png_debug(1, "in png_write_init_3\n");
-
-#ifdef PNG_SETJMP_SUPPORTED
- /* save jump buffer and error functions */
- png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf));
-#endif
-
- if (png_sizeof(png_struct) > png_struct_size)
- {
- png_destroy_struct(png_ptr);
- png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
- *ptr_ptr = png_ptr;
- }
-
- /* reset all variables to 0 */
- png_memset(png_ptr, 0, png_sizeof (png_struct));
-
- /* added at libpng-1.2.6 */
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
- png_ptr->user_width_max=PNG_USER_WIDTH_MAX;
- png_ptr->user_height_max=PNG_USER_HEIGHT_MAX;
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
- /* restore jump buffer */
- png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf));
-#endif
-
- png_set_write_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL,
- png_flush_ptr_NULL);
-
- /* initialize zbuf - compression buffer */
- png_ptr->zbuf_size = PNG_ZBUF_SIZE;
- png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)png_ptr->zbuf_size);
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT,
- 1, png_doublep_NULL, png_doublep_NULL);
-#endif
-}
-
-/* Write a few rows of image data. If the image is interlaced,
- * either you will have to write the 7 sub images, or, if you
- * have called png_set_interlace_handling(), you will have to
- * "write" the image seven times.
- */
-void PNGAPI
-png_write_rows(png_structp png_ptr, png_bytepp row,
- png_uint_32 num_rows)
-{
- png_uint_32 i; /* row counter */
- png_bytepp rp; /* row pointer */
-
- png_debug(1, "in png_write_rows\n");
-
- if (png_ptr == NULL)
- return;
-
- /* loop through the rows */
- for (i = 0, rp = row; i < num_rows; i++, rp++)
- {
- png_write_row(png_ptr, *rp);
- }
-}
-
-/* Write the image. You only need to call this function once, even
- * if you are writing an interlaced image.
- */
-void PNGAPI
-png_write_image(png_structp png_ptr, png_bytepp image)
-{
- png_uint_32 i; /* row index */
- int pass, num_pass; /* pass variables */
- png_bytepp rp; /* points to current row */
-
- if (png_ptr == NULL)
- return;
-
- png_debug(1, "in png_write_image\n");
-#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
- /* intialize interlace handling. If image is not interlaced,
- this will set pass to 1 */
- num_pass = png_set_interlace_handling(png_ptr);
-#else
- num_pass = 1;
-#endif
- /* loop through passes */
- for (pass = 0; pass < num_pass; pass++)
- {
- /* loop through image */
- for (i = 0, rp = image; i < png_ptr->height; i++, rp++)
- {
- png_write_row(png_ptr, *rp);
- }
- }
-}
-
-/* called by user to write a row of image data */
-void PNGAPI
-png_write_row(png_structp png_ptr, png_bytep row)
-{
- if (png_ptr == NULL)
- return;
- png_debug2(1, "in png_write_row (row %ld, pass %d)\n",
- png_ptr->row_number, png_ptr->pass);
-
- /* initialize transformations and other stuff if first time */
- if (png_ptr->row_number == 0 && png_ptr->pass == 0)
- {
- /* make sure we wrote the header info */
- if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
- png_error(png_ptr,
- "png_write_info was never called before png_write_row.");
-
- /* check for transforms that have been set but were defined out */
-#if !defined(PNG_WRITE_INVERT_SUPPORTED) && defined(PNG_READ_INVERT_SUPPORTED)
- if (png_ptr->transformations & PNG_INVERT_MONO)
- png_warning(png_ptr, "PNG_WRITE_INVERT_SUPPORTED is not defined.");
-#endif
-#if !defined(PNG_WRITE_FILLER_SUPPORTED) && defined(PNG_READ_FILLER_SUPPORTED)
- if (png_ptr->transformations & PNG_FILLER)
- png_warning(png_ptr, "PNG_WRITE_FILLER_SUPPORTED is not defined.");
-#endif
-#if !defined(PNG_WRITE_PACKSWAP_SUPPORTED) && defined(PNG_READ_PACKSWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_PACKSWAP)
- png_warning(png_ptr, "PNG_WRITE_PACKSWAP_SUPPORTED is not defined.");
-#endif
-#if !defined(PNG_WRITE_PACK_SUPPORTED) && defined(PNG_READ_PACK_SUPPORTED)
- if (png_ptr->transformations & PNG_PACK)
- png_warning(png_ptr, "PNG_WRITE_PACK_SUPPORTED is not defined.");
-#endif
-#if !defined(PNG_WRITE_SHIFT_SUPPORTED) && defined(PNG_READ_SHIFT_SUPPORTED)
- if (png_ptr->transformations & PNG_SHIFT)
- png_warning(png_ptr, "PNG_WRITE_SHIFT_SUPPORTED is not defined.");
-#endif
-#if !defined(PNG_WRITE_BGR_SUPPORTED) && defined(PNG_READ_BGR_SUPPORTED)
- if (png_ptr->transformations & PNG_BGR)
- png_warning(png_ptr, "PNG_WRITE_BGR_SUPPORTED is not defined.");
-#endif
-#if !defined(PNG_WRITE_SWAP_SUPPORTED) && defined(PNG_READ_SWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_SWAP_BYTES)
- png_warning(png_ptr, "PNG_WRITE_SWAP_SUPPORTED is not defined.");
-#endif
-
- png_write_start_row(png_ptr);
- }
-
-#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
- /* if interlaced and not interested in row, return */
- if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
- {
- switch (png_ptr->pass)
- {
- case 0:
- if (png_ptr->row_number & 0x07)
- {
- png_write_finish_row(png_ptr);
- return;
- }
- break;
- case 1:
- if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
- {
- png_write_finish_row(png_ptr);
- return;
- }
- break;
- case 2:
- if ((png_ptr->row_number & 0x07) != 4)
- {
- png_write_finish_row(png_ptr);
- return;
- }
- break;
- case 3:
- if ((png_ptr->row_number & 0x03) || png_ptr->width < 3)
- {
- png_write_finish_row(png_ptr);
- return;
- }
- break;
- case 4:
- if ((png_ptr->row_number & 0x03) != 2)
- {
- png_write_finish_row(png_ptr);
- return;
- }
- break;
- case 5:
- if ((png_ptr->row_number & 0x01) || png_ptr->width < 2)
- {
- png_write_finish_row(png_ptr);
- return;
- }
- break;
- case 6:
- if (!(png_ptr->row_number & 0x01))
- {
- png_write_finish_row(png_ptr);
- return;
- }
- break;
- }
- }
-#endif
-
- /* set up row info for transformations */
- png_ptr->row_info.color_type = png_ptr->color_type;
- png_ptr->row_info.width = png_ptr->usr_width;
- png_ptr->row_info.channels = png_ptr->usr_channels;
- png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth;
- png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
- png_ptr->row_info.channels);
-
- png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
- png_ptr->row_info.width);
-
- png_debug1(3, "row_info->color_type = %d\n", png_ptr->row_info.color_type);
- png_debug1(3, "row_info->width = %lu\n", png_ptr->row_info.width);
- png_debug1(3, "row_info->channels = %d\n", png_ptr->row_info.channels);
- png_debug1(3, "row_info->bit_depth = %d\n", png_ptr->row_info.bit_depth);
- png_debug1(3, "row_info->pixel_depth = %d\n", png_ptr->row_info.pixel_depth);
- png_debug1(3, "row_info->rowbytes = %lu\n", png_ptr->row_info.rowbytes);
-
- /* Copy user's row into buffer, leaving room for filter byte. */
- png_memcpy_check(png_ptr, png_ptr->row_buf + 1, row,
- png_ptr->row_info.rowbytes);
-
-#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
- /* handle interlacing */
- if (png_ptr->interlaced && png_ptr->pass < 6 &&
- (png_ptr->transformations & PNG_INTERLACE))
- {
- png_do_write_interlace(&(png_ptr->row_info),
- png_ptr->row_buf + 1, png_ptr->pass);
- /* this should always get caught above, but still ... */
- if (!(png_ptr->row_info.width))
- {
- png_write_finish_row(png_ptr);
- return;
- }
- }
-#endif
-
- /* handle other transformations */
- if (png_ptr->transformations)
- png_do_write_transformations(png_ptr);
-
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- /* Write filter_method 64 (intrapixel differencing) only if
- * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
- * 2. Libpng did not write a PNG signature (this filter_method is only
- * used in PNG datastreams that are embedded in MNG datastreams) and
- * 3. The application called png_permit_mng_features with a mask that
- * included PNG_FLAG_MNG_FILTER_64 and
- * 4. The filter_method is 64 and
- * 5. The color_type is RGB or RGBA
- */
- if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
- (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
- {
- /* Intrapixel differencing */
- png_do_write_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1);
- }
-#endif
-
- /* Find a filter if necessary, filter the row and write it out. */
- png_write_find_filter(png_ptr, &(png_ptr->row_info));
-
- if (png_ptr->write_row_fn != NULL)
- (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
-}
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
-/* Set the automatic flush interval or 0 to turn flushing off */
-void PNGAPI
-png_set_flush(png_structp png_ptr, int nrows)
-{
- png_debug(1, "in png_set_flush\n");
- if (png_ptr == NULL)
- return;
- png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
-}
-
-/* flush the current output buffers now */
-void PNGAPI
-png_write_flush(png_structp png_ptr)
-{
- int wrote_IDAT;
-
- png_debug(1, "in png_write_flush\n");
- if (png_ptr == NULL)
- return;
- /* We have already written out all of the data */
- if (png_ptr->row_number >= png_ptr->num_rows)
- return;
-
- do
- {
- int ret;
-
- /* compress the data */
- ret = deflate(&png_ptr->zstream, Z_SYNC_FLUSH);
- wrote_IDAT = 0;
-
- /* check for compression errors */
- if (ret != Z_OK)
- {
- if (png_ptr->zstream.msg != NULL)
- png_error(png_ptr, png_ptr->zstream.msg);
- else
- png_error(png_ptr, "zlib error");
- }
-
- if (!(png_ptr->zstream.avail_out))
- {
- /* write the IDAT and reset the zlib output buffer */
- png_write_IDAT(png_ptr, png_ptr->zbuf,
- png_ptr->zbuf_size);
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- wrote_IDAT = 1;
- }
- } while(wrote_IDAT == 1);
-
- /* If there is any data left to be output, write it into a new IDAT */
- if (png_ptr->zbuf_size != png_ptr->zstream.avail_out)
- {
- /* write the IDAT and reset the zlib output buffer */
- png_write_IDAT(png_ptr, png_ptr->zbuf,
- png_ptr->zbuf_size - png_ptr->zstream.avail_out);
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- }
- png_ptr->flush_rows = 0;
- png_flush(png_ptr);
-}
-#endif /* PNG_WRITE_FLUSH_SUPPORTED */
-
-/* free all memory used by the write */
-void PNGAPI
-png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
-{
- png_structp png_ptr = NULL;
- png_infop info_ptr = NULL;
-#ifdef PNG_USER_MEM_SUPPORTED
- png_free_ptr free_fn = NULL;
- png_voidp mem_ptr = NULL;
-#endif
-
- png_debug(1, "in png_destroy_write_struct\n");
- if (png_ptr_ptr != NULL)
- {
- png_ptr = *png_ptr_ptr;
-#ifdef PNG_USER_MEM_SUPPORTED
- free_fn = png_ptr->free_fn;
- mem_ptr = png_ptr->mem_ptr;
-#endif
- }
-
-#ifdef PNG_USER_MEM_SUPPORTED
- if (png_ptr != NULL)
- {
- free_fn = png_ptr->free_fn;
- mem_ptr = png_ptr->mem_ptr;
- }
-#endif
-
- if (info_ptr_ptr != NULL)
- info_ptr = *info_ptr_ptr;
-
- if (info_ptr != NULL)
- {
- if (png_ptr != NULL)
- {
- png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
-
-#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
- if (png_ptr->num_chunk_list)
- {
- png_free(png_ptr, png_ptr->chunk_list);
- png_ptr->chunk_list=NULL;
- png_ptr->num_chunk_list=0;
- }
-#endif
- }
-
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)info_ptr, (png_free_ptr)free_fn,
- (png_voidp)mem_ptr);
-#else
- png_destroy_struct((png_voidp)info_ptr);
-#endif
- *info_ptr_ptr = NULL;
- }
-
- if (png_ptr != NULL)
- {
- png_write_destroy(png_ptr);
-#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn,
- (png_voidp)mem_ptr);
-#else
- png_destroy_struct((png_voidp)png_ptr);
-#endif
- *png_ptr_ptr = NULL;
- }
-}
-
-
-/* Free any memory used in png_ptr struct (old method) */
-void /* PRIVATE */
-png_write_destroy(png_structp png_ptr)
-{
-#ifdef PNG_SETJMP_SUPPORTED
- jmp_buf tmp_jmp; /* save jump buffer */
-#endif
- png_error_ptr error_fn;
- png_error_ptr warning_fn;
- png_voidp error_ptr;
-#ifdef PNG_USER_MEM_SUPPORTED
- png_free_ptr free_fn;
-#endif
-
- png_debug(1, "in png_write_destroy\n");
- /* free any memory zlib uses */
- deflateEnd(&png_ptr->zstream);
-
- /* free our memory. png_free checks NULL for us. */
- png_free(png_ptr, png_ptr->zbuf);
- png_free(png_ptr, png_ptr->row_buf);
-#ifndef PNG_NO_WRITE_FILTERING
- png_free(png_ptr, png_ptr->prev_row);
- png_free(png_ptr, png_ptr->sub_row);
- png_free(png_ptr, png_ptr->up_row);
- png_free(png_ptr, png_ptr->avg_row);
- png_free(png_ptr, png_ptr->paeth_row);
-#endif
-
-#if defined(PNG_TIME_RFC1123_SUPPORTED)
- png_free(png_ptr, png_ptr->time_buffer);
-#endif
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- png_free(png_ptr, png_ptr->prev_filters);
- png_free(png_ptr, png_ptr->filter_weights);
- png_free(png_ptr, png_ptr->inv_filter_weights);
- png_free(png_ptr, png_ptr->filter_costs);
- png_free(png_ptr, png_ptr->inv_filter_costs);
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
- /* reset structure */
- png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf));
-#endif
-
- error_fn = png_ptr->error_fn;
- warning_fn = png_ptr->warning_fn;
- error_ptr = png_ptr->error_ptr;
-#ifdef PNG_USER_MEM_SUPPORTED
- free_fn = png_ptr->free_fn;
-#endif
-
- png_memset(png_ptr, 0, png_sizeof (png_struct));
-
- png_ptr->error_fn = error_fn;
- png_ptr->warning_fn = warning_fn;
- png_ptr->error_ptr = error_ptr;
-#ifdef PNG_USER_MEM_SUPPORTED
- png_ptr->free_fn = free_fn;
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
- png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf));
-#endif
-}
-
-/* Allow the application to select one or more row filters to use. */
-void PNGAPI
-png_set_filter(png_structp png_ptr, int method, int filters)
-{
- png_debug(1, "in png_set_filter\n");
- if (png_ptr == NULL)
- return;
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
- (method == PNG_INTRAPIXEL_DIFFERENCING))
- method = PNG_FILTER_TYPE_BASE;
-#endif
- if (method == PNG_FILTER_TYPE_BASE)
- {
- switch (filters & (PNG_ALL_FILTERS | 0x07))
- {
-#ifndef PNG_NO_WRITE_FILTER
- case 5:
- case 6:
- case 7: png_warning(png_ptr, "Unknown row filter for method 0");
-#endif /* PNG_NO_WRITE_FILTER */
- case PNG_FILTER_VALUE_NONE:
- png_ptr->do_filter=PNG_FILTER_NONE; break;
-#ifndef PNG_NO_WRITE_FILTER
- case PNG_FILTER_VALUE_SUB:
- png_ptr->do_filter=PNG_FILTER_SUB; break;
- case PNG_FILTER_VALUE_UP:
- png_ptr->do_filter=PNG_FILTER_UP; break;
- case PNG_FILTER_VALUE_AVG:
- png_ptr->do_filter=PNG_FILTER_AVG; break;
- case PNG_FILTER_VALUE_PAETH:
- png_ptr->do_filter=PNG_FILTER_PAETH; break;
- default: png_ptr->do_filter = (png_byte)filters; break;
-#else
- default: png_warning(png_ptr, "Unknown row filter for method 0");
-#endif /* PNG_NO_WRITE_FILTER */
- }
-
- /* If we have allocated the row_buf, this means we have already started
- * with the image and we should have allocated all of the filter buffers
- * that have been selected. If prev_row isn't already allocated, then
- * it is too late to start using the filters that need it, since we
- * will be missing the data in the previous row. If an application
- * wants to start and stop using particular filters during compression,
- * it should start out with all of the filters, and then add and
- * remove them after the start of compression.
- */
- if (png_ptr->row_buf != NULL)
- {
-#ifndef PNG_NO_WRITE_FILTER
- if ((png_ptr->do_filter & PNG_FILTER_SUB) && png_ptr->sub_row == NULL)
- {
- png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
- }
-
- if ((png_ptr->do_filter & PNG_FILTER_UP) && png_ptr->up_row == NULL)
- {
- if (png_ptr->prev_row == NULL)
- {
- png_warning(png_ptr, "Can't add Up filter after starting");
- png_ptr->do_filter &= ~PNG_FILTER_UP;
- }
- else
- {
- png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
- }
- }
-
- if ((png_ptr->do_filter & PNG_FILTER_AVG) && png_ptr->avg_row == NULL)
- {
- if (png_ptr->prev_row == NULL)
- {
- png_warning(png_ptr, "Can't add Average filter after starting");
- png_ptr->do_filter &= ~PNG_FILTER_AVG;
- }
- else
- {
- png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
- }
- }
-
- if ((png_ptr->do_filter & PNG_FILTER_PAETH) &&
- png_ptr->paeth_row == NULL)
- {
- if (png_ptr->prev_row == NULL)
- {
- png_warning(png_ptr, "Can't add Paeth filter after starting");
- png_ptr->do_filter &= (png_byte)(~PNG_FILTER_PAETH);
- }
- else
- {
- png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
- }
- }
-
- if (png_ptr->do_filter == PNG_NO_FILTERS)
-#endif /* PNG_NO_WRITE_FILTER */
- png_ptr->do_filter = PNG_FILTER_NONE;
- }
- }
- else
- png_error(png_ptr, "Unknown custom filter method");
-}
-
-/* This allows us to influence the way in which libpng chooses the "best"
- * filter for the current scanline. While the "minimum-sum-of-absolute-
- * differences metric is relatively fast and effective, there is some
- * question as to whether it can be improved upon by trying to keep the
- * filtered data going to zlib more consistent, hopefully resulting in
- * better compression.
- */
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* GRR 970116 */
-void PNGAPI
-png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
- int num_weights, png_doublep filter_weights,
- png_doublep filter_costs)
-{
- int i;
-
- png_debug(1, "in png_set_filter_heuristics\n");
- if (png_ptr == NULL)
- return;
- if (heuristic_method >= PNG_FILTER_HEURISTIC_LAST)
- {
- png_warning(png_ptr, "Unknown filter heuristic method");
- return;
- }
-
- if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT)
- {
- heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED;
- }
-
- if (num_weights < 0 || filter_weights == NULL ||
- heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED)
- {
- num_weights = 0;
- }
-
- png_ptr->num_prev_filters = (png_byte)num_weights;
- png_ptr->heuristic_method = (png_byte)heuristic_method;
-
- if (num_weights > 0)
- {
- if (png_ptr->prev_filters == NULL)
- {
- png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr,
- (png_uint_32)(png_sizeof(png_byte) * num_weights));
-
- /* To make sure that the weighting starts out fairly */
- for (i = 0; i < num_weights; i++)
- {
- png_ptr->prev_filters[i] = 255;
- }
- }
-
- if (png_ptr->filter_weights == NULL)
- {
- png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(png_sizeof(png_uint_16) * num_weights));
-
- png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(png_sizeof(png_uint_16) * num_weights));
- for (i = 0; i < num_weights; i++)
- {
- png_ptr->inv_filter_weights[i] =
- png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
- }
- }
-
- for (i = 0; i < num_weights; i++)
- {
- if (filter_weights[i] < 0.0)
- {
- png_ptr->inv_filter_weights[i] =
- png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
- }
- else
- {
- png_ptr->inv_filter_weights[i] =
- (png_uint_16)((double)PNG_WEIGHT_FACTOR*filter_weights[i]+0.5);
- png_ptr->filter_weights[i] =
- (png_uint_16)((double)PNG_WEIGHT_FACTOR/filter_weights[i]+0.5);
- }
- }
- }
-
- /* If, in the future, there are other filter methods, this would
- * need to be based on png_ptr->filter.
- */
- if (png_ptr->filter_costs == NULL)
- {
- png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
-
- png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr,
- (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
-
- for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
- {
- png_ptr->inv_filter_costs[i] =
- png_ptr->filter_costs[i] = PNG_COST_FACTOR;
- }
- }
-
- /* Here is where we set the relative costs of the different filters. We
- * should take the desired compression level into account when setting
- * the costs, so that Paeth, for instance, has a high relative cost at low
- * compression levels, while it has a lower relative cost at higher
- * compression settings. The filter types are in order of increasing
- * relative cost, so it would be possible to do this with an algorithm.
- */
- for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
- {
- if (filter_costs == NULL || filter_costs[i] < 0.0)
- {
- png_ptr->inv_filter_costs[i] =
- png_ptr->filter_costs[i] = PNG_COST_FACTOR;
- }
- else if (filter_costs[i] >= 1.0)
- {
- png_ptr->inv_filter_costs[i] =
- (png_uint_16)((double)PNG_COST_FACTOR / filter_costs[i] + 0.5);
- png_ptr->filter_costs[i] =
- (png_uint_16)((double)PNG_COST_FACTOR * filter_costs[i] + 0.5);
- }
- }
-}
-#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
-
-void PNGAPI
-png_set_compression_level(png_structp png_ptr, int level)
-{
- png_debug(1, "in png_set_compression_level\n");
- if (png_ptr == NULL)
- return;
- png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_LEVEL;
- png_ptr->zlib_level = level;
-}
-
-void PNGAPI
-png_set_compression_mem_level(png_structp png_ptr, int mem_level)
-{
- png_debug(1, "in png_set_compression_mem_level\n");
- if (png_ptr == NULL)
- return;
- png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL;
- png_ptr->zlib_mem_level = mem_level;
-}
-
-void PNGAPI
-png_set_compression_strategy(png_structp png_ptr, int strategy)
-{
- png_debug(1, "in png_set_compression_strategy\n");
- if (png_ptr == NULL)
- return;
- png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY;
- png_ptr->zlib_strategy = strategy;
-}
-
-void PNGAPI
-png_set_compression_window_bits(png_structp png_ptr, int window_bits)
-{
- if (png_ptr == NULL)
- return;
- if (window_bits > 15)
- png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
- else if (window_bits < 8)
- png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
-#ifndef WBITS_8_OK
- /* avoid libpng bug with 256-byte windows */
- if (window_bits == 8)
- {
- png_warning(png_ptr, "Compression window is being reset to 512");
- window_bits=9;
- }
-#endif
- png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS;
- png_ptr->zlib_window_bits = window_bits;
-}
-
-void PNGAPI
-png_set_compression_method(png_structp png_ptr, int method)
-{
- png_debug(1, "in png_set_compression_method\n");
- if (png_ptr == NULL)
- return;
- if (method != 8)
- png_warning(png_ptr, "Only compression method 8 is supported by PNG");
- png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_METHOD;
- png_ptr->zlib_method = method;
-}
-
-void PNGAPI
-png_set_write_status_fn(png_structp png_ptr, png_write_status_ptr write_row_fn)
-{
- if (png_ptr == NULL)
- return;
- png_ptr->write_row_fn = write_row_fn;
-}
-
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-void PNGAPI
-png_set_write_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
- write_user_transform_fn)
-{
- png_debug(1, "in png_set_write_user_transform_fn\n");
- if (png_ptr == NULL)
- return;
- png_ptr->transformations |= PNG_USER_TRANSFORM;
- png_ptr->write_user_transform_fn = write_user_transform_fn;
-}
-#endif
-
-
-#if defined(PNG_INFO_IMAGE_SUPPORTED)
-void PNGAPI
-png_write_png(png_structp png_ptr, png_infop info_ptr,
- int transforms, voidp params)
-{
- if (png_ptr == NULL || info_ptr == NULL)
- return;
-#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
- /* invert the alpha channel from opacity to transparency */
- if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
- png_set_invert_alpha(png_ptr);
-#endif
-
- /* Write the file header information. */
- png_write_info(png_ptr, info_ptr);
-
- /* ------ these transformations don't touch the info structure ------- */
-
-#if defined(PNG_WRITE_INVERT_SUPPORTED)
- /* invert monochrome pixels */
- if (transforms & PNG_TRANSFORM_INVERT_MONO)
- png_set_invert_mono(png_ptr);
-#endif
-
-#if defined(PNG_WRITE_SHIFT_SUPPORTED)
- /* Shift the pixels up to a legal bit depth and fill in
- * as appropriate to correctly scale the image.
- */
- if ((transforms & PNG_TRANSFORM_SHIFT)
- && (info_ptr->valid & PNG_INFO_sBIT))
- png_set_shift(png_ptr, &info_ptr->sig_bit);
-#endif
-
-#if defined(PNG_WRITE_PACK_SUPPORTED)
- /* pack pixels into bytes */
- if (transforms & PNG_TRANSFORM_PACKING)
- png_set_packing(png_ptr);
-#endif
-
-#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
- /* swap location of alpha bytes from ARGB to RGBA */
- if (transforms & PNG_TRANSFORM_SWAP_ALPHA)
- png_set_swap_alpha(png_ptr);
-#endif
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED)
- /* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into
- * RGB (4 channels -> 3 channels). The second parameter is not used.
- */
- if (transforms & PNG_TRANSFORM_STRIP_FILLER)
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-#endif
-
-#if defined(PNG_WRITE_BGR_SUPPORTED)
- /* flip BGR pixels to RGB */
- if (transforms & PNG_TRANSFORM_BGR)
- png_set_bgr(png_ptr);
-#endif
-
-#if defined(PNG_WRITE_SWAP_SUPPORTED)
- /* swap bytes of 16-bit files to most significant byte first */
- if (transforms & PNG_TRANSFORM_SWAP_ENDIAN)
- png_set_swap(png_ptr);
-#endif
-
-#if defined(PNG_WRITE_PACKSWAP_SUPPORTED)
- /* swap bits of 1, 2, 4 bit packed pixel formats */
- if (transforms & PNG_TRANSFORM_PACKSWAP)
- png_set_packswap(png_ptr);
-#endif
-
- /* ----------------------- end of transformations ------------------- */
-
- /* write the bits */
- if (info_ptr->valid & PNG_INFO_IDAT)
- png_write_image(png_ptr, info_ptr->row_pointers);
-
- /* It is REQUIRED to call this to finish writing the rest of the file */
- png_write_end(png_ptr, info_ptr);
-
- transforms = transforms; /* quiet compiler warnings */
- params = params;
-}
-#endif
-#endif /* PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngwtran.c b/Build/source/libs/libpng/pngwtran.c
deleted file mode 100644
index 0372fe656ce..00000000000
--- a/Build/source/libs/libpng/pngwtran.c
+++ /dev/null
@@ -1,572 +0,0 @@
-
-/* pngwtran.c - transforms the data in a row for PNG writers
- *
- * Last changed in libpng 1.2.9 April 14, 2006
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2006 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-#ifdef PNG_WRITE_SUPPORTED
-
-/* Transform the data according to the user's wishes. The order of
- * transformations is significant.
- */
-void /* PRIVATE */
-png_do_write_transformations(png_structp png_ptr)
-{
- png_debug(1, "in png_do_write_transformations\n");
-
- if (png_ptr == NULL)
- return;
-
-#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
- if (png_ptr->transformations & PNG_USER_TRANSFORM)
- if(png_ptr->write_user_transform_fn != NULL)
- (*(png_ptr->write_user_transform_fn)) /* user write transform function */
- (png_ptr, /* png_ptr */
- &(png_ptr->row_info), /* row_info: */
- /* png_uint_32 width; width of row */
- /* png_uint_32 rowbytes; number of bytes in row */
- /* png_byte color_type; color type of pixels */
- /* png_byte bit_depth; bit depth of samples */
- /* png_byte channels; number of channels (1-4) */
- /* png_byte pixel_depth; bits per pixel (depth*channels) */
- png_ptr->row_buf + 1); /* start of pixel data for row */
-#endif
-#if defined(PNG_WRITE_FILLER_SUPPORTED)
- if (png_ptr->transformations & PNG_FILLER)
- png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
- png_ptr->flags);
-#endif
-#if defined(PNG_WRITE_PACKSWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_PACKSWAP)
- png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-#if defined(PNG_WRITE_PACK_SUPPORTED)
- if (png_ptr->transformations & PNG_PACK)
- png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1,
- (png_uint_32)png_ptr->bit_depth);
-#endif
-#if defined(PNG_WRITE_SWAP_SUPPORTED)
- if (png_ptr->transformations & PNG_SWAP_BYTES)
- png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-#if defined(PNG_WRITE_SHIFT_SUPPORTED)
- if (png_ptr->transformations & PNG_SHIFT)
- png_do_shift(&(png_ptr->row_info), png_ptr->row_buf + 1,
- &(png_ptr->shift));
-#endif
-#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
- if (png_ptr->transformations & PNG_SWAP_ALPHA)
- png_do_write_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
- if (png_ptr->transformations & PNG_INVERT_ALPHA)
- png_do_write_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-#if defined(PNG_WRITE_BGR_SUPPORTED)
- if (png_ptr->transformations & PNG_BGR)
- png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-#if defined(PNG_WRITE_INVERT_SUPPORTED)
- if (png_ptr->transformations & PNG_INVERT_MONO)
- png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
-#endif
-}
-
-#if defined(PNG_WRITE_PACK_SUPPORTED)
-/* Pack pixels into bytes. Pass the true bit depth in bit_depth. The
- * row_info bit depth should be 8 (one pixel per byte). The channels
- * should be 1 (this only happens on grayscale and paletted images).
- */
-void /* PRIVATE */
-png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
-{
- png_debug(1, "in png_do_pack\n");
- if (row_info->bit_depth == 8 &&
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- row_info->channels == 1)
- {
- switch ((int)bit_depth)
- {
- case 1:
- {
- png_bytep sp, dp;
- int mask, v;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- sp = row;
- dp = row;
- mask = 0x80;
- v = 0;
-
- for (i = 0; i < row_width; i++)
- {
- if (*sp != 0)
- v |= mask;
- sp++;
- if (mask > 1)
- mask >>= 1;
- else
- {
- mask = 0x80;
- *dp = (png_byte)v;
- dp++;
- v = 0;
- }
- }
- if (mask != 0x80)
- *dp = (png_byte)v;
- break;
- }
- case 2:
- {
- png_bytep sp, dp;
- int shift, v;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- sp = row;
- dp = row;
- shift = 6;
- v = 0;
- for (i = 0; i < row_width; i++)
- {
- png_byte value;
-
- value = (png_byte)(*sp & 0x03);
- v |= (value << shift);
- if (shift == 0)
- {
- shift = 6;
- *dp = (png_byte)v;
- dp++;
- v = 0;
- }
- else
- shift -= 2;
- sp++;
- }
- if (shift != 6)
- *dp = (png_byte)v;
- break;
- }
- case 4:
- {
- png_bytep sp, dp;
- int shift, v;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- sp = row;
- dp = row;
- shift = 4;
- v = 0;
- for (i = 0; i < row_width; i++)
- {
- png_byte value;
-
- value = (png_byte)(*sp & 0x0f);
- v |= (value << shift);
-
- if (shift == 0)
- {
- shift = 4;
- *dp = (png_byte)v;
- dp++;
- v = 0;
- }
- else
- shift -= 4;
-
- sp++;
- }
- if (shift != 4)
- *dp = (png_byte)v;
- break;
- }
- }
- row_info->bit_depth = (png_byte)bit_depth;
- row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels);
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
- row_info->width);
- }
-}
-#endif
-
-#if defined(PNG_WRITE_SHIFT_SUPPORTED)
-/* Shift pixel values to take advantage of whole range. Pass the
- * true number of bits in bit_depth. The row should be packed
- * according to row_info->bit_depth. Thus, if you had a row of
- * bit depth 4, but the pixels only had values from 0 to 7, you
- * would pass 3 as bit_depth, and this routine would translate the
- * data to 0 to 15.
- */
-void /* PRIVATE */
-png_do_shift(png_row_infop row_info, png_bytep row, png_color_8p bit_depth)
-{
- png_debug(1, "in png_do_shift\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL &&
-#else
- if (
-#endif
- row_info->color_type != PNG_COLOR_TYPE_PALETTE)
- {
- int shift_start[4], shift_dec[4];
- int channels = 0;
-
- if (row_info->color_type & PNG_COLOR_MASK_COLOR)
- {
- shift_start[channels] = row_info->bit_depth - bit_depth->red;
- shift_dec[channels] = bit_depth->red;
- channels++;
- shift_start[channels] = row_info->bit_depth - bit_depth->green;
- shift_dec[channels] = bit_depth->green;
- channels++;
- shift_start[channels] = row_info->bit_depth - bit_depth->blue;
- shift_dec[channels] = bit_depth->blue;
- channels++;
- }
- else
- {
- shift_start[channels] = row_info->bit_depth - bit_depth->gray;
- shift_dec[channels] = bit_depth->gray;
- channels++;
- }
- if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
- {
- shift_start[channels] = row_info->bit_depth - bit_depth->alpha;
- shift_dec[channels] = bit_depth->alpha;
- channels++;
- }
-
- /* with low row depths, could only be grayscale, so one channel */
- if (row_info->bit_depth < 8)
- {
- png_bytep bp = row;
- png_uint_32 i;
- png_byte mask;
- png_uint_32 row_bytes = row_info->rowbytes;
-
- if (bit_depth->gray == 1 && row_info->bit_depth == 2)
- mask = 0x55;
- else if (row_info->bit_depth == 4 && bit_depth->gray == 3)
- mask = 0x11;
- else
- mask = 0xff;
-
- for (i = 0; i < row_bytes; i++, bp++)
- {
- png_uint_16 v;
- int j;
-
- v = *bp;
- *bp = 0;
- for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
- {
- if (j > 0)
- *bp |= (png_byte)((v << j) & 0xff);
- else
- *bp |= (png_byte)((v >> (-j)) & mask);
- }
- }
- }
- else if (row_info->bit_depth == 8)
- {
- png_bytep bp = row;
- png_uint_32 i;
- png_uint_32 istop = channels * row_info->width;
-
- for (i = 0; i < istop; i++, bp++)
- {
-
- png_uint_16 v;
- int j;
- int c = (int)(i%channels);
-
- v = *bp;
- *bp = 0;
- for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
- {
- if (j > 0)
- *bp |= (png_byte)((v << j) & 0xff);
- else
- *bp |= (png_byte)((v >> (-j)) & 0xff);
- }
- }
- }
- else
- {
- png_bytep bp;
- png_uint_32 i;
- png_uint_32 istop = channels * row_info->width;
-
- for (bp = row, i = 0; i < istop; i++)
- {
- int c = (int)(i%channels);
- png_uint_16 value, v;
- int j;
-
- v = (png_uint_16)(((png_uint_16)(*bp) << 8) + *(bp + 1));
- value = 0;
- for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
- {
- if (j > 0)
- value |= (png_uint_16)((v << j) & (png_uint_16)0xffff);
- else
- value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);
- }
- *bp++ = (png_byte)(value >> 8);
- *bp++ = (png_byte)(value & 0xff);
- }
- }
- }
-}
-#endif
-
-#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-void /* PRIVATE */
-png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_write_swap_alpha\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL)
-#endif
- {
- if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- {
- /* This converts from ARGB to RGBA */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- png_byte save = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = save;
- }
- }
- /* This converts from AARRGGBB to RRGGBBAA */
- else
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- png_byte save[2];
- save[0] = *(sp++);
- save[1] = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = save[0];
- *(dp++) = save[1];
- }
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
- /* This converts from AG to GA */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- png_byte save = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = save;
- }
- }
- /* This converts from AAGG to GGAA */
- else
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- png_byte save[2];
- save[0] = *(sp++);
- save[1] = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = save[0];
- *(dp++) = save[1];
- }
- }
- }
- }
-}
-#endif
-
-#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-void /* PRIVATE */
-png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_write_invert_alpha\n");
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL)
-#endif
- {
- if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- {
- /* This inverts the alpha channel in RGBA */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- /* does nothing
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- */
- sp+=3; dp = sp;
- *(dp++) = (png_byte)(255 - *(sp++));
- }
- }
- /* This inverts the alpha channel in RRGGBBAA */
- else
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- /* does nothing
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- */
- sp+=6; dp = sp;
- *(dp++) = (png_byte)(255 - *(sp++));
- *(dp++) = (png_byte)(255 - *(sp++));
- }
- }
- }
- else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
- /* This inverts the alpha channel in GA */
- if (row_info->bit_depth == 8)
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- *(dp++) = *(sp++);
- *(dp++) = (png_byte)(255 - *(sp++));
- }
- }
- /* This inverts the alpha channel in GGAA */
- else
- {
- png_bytep sp, dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- for (i = 0, sp = dp = row; i < row_width; i++)
- {
- /* does nothing
- *(dp++) = *(sp++);
- *(dp++) = *(sp++);
- */
- sp+=2; dp = sp;
- *(dp++) = (png_byte)(255 - *(sp++));
- *(dp++) = (png_byte)(255 - *(sp++));
- }
- }
- }
- }
-}
-#endif
-
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
-/* undoes intrapixel differencing */
-void /* PRIVATE */
-png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
-{
- png_debug(1, "in png_do_write_intrapixel\n");
- if (
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- row != NULL && row_info != NULL &&
-#endif
- (row_info->color_type & PNG_COLOR_MASK_COLOR))
- {
- int bytes_per_pixel;
- png_uint_32 row_width = row_info->width;
- if (row_info->bit_depth == 8)
- {
- png_bytep rp;
- png_uint_32 i;
-
- if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- bytes_per_pixel = 3;
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- bytes_per_pixel = 4;
- else
- return;
-
- for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
- {
- *(rp) = (png_byte)((*rp - *(rp+1))&0xff);
- *(rp+2) = (png_byte)((*(rp+2) - *(rp+1))&0xff);
- }
- }
- else if (row_info->bit_depth == 16)
- {
- png_bytep rp;
- png_uint_32 i;
-
- if (row_info->color_type == PNG_COLOR_TYPE_RGB)
- bytes_per_pixel = 6;
- else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- bytes_per_pixel = 8;
- else
- return;
-
- for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
- {
- png_uint_32 s0 = (*(rp ) << 8) | *(rp+1);
- png_uint_32 s1 = (*(rp+2) << 8) | *(rp+3);
- png_uint_32 s2 = (*(rp+4) << 8) | *(rp+5);
- png_uint_32 red = (png_uint_32)((s0-s1) & 0xffffL);
- png_uint_32 blue = (png_uint_32)((s2-s1) & 0xffffL);
- *(rp ) = (png_byte)((red >> 8) & 0xff);
- *(rp+1) = (png_byte)(red & 0xff);
- *(rp+4) = (png_byte)((blue >> 8) & 0xff);
- *(rp+5) = (png_byte)(blue & 0xff);
- }
- }
- }
-}
-#endif /* PNG_MNG_FEATURES_SUPPORTED */
-#endif /* PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/pngwutil.c b/Build/source/libs/libpng/pngwutil.c
deleted file mode 100644
index 0774080b4d1..00000000000
--- a/Build/source/libs/libpng/pngwutil.c
+++ /dev/null
@@ -1,2802 +0,0 @@
-
-/* pngwutil.c - utilities to write a PNG file
- *
- * Last changed in libpng 1.2.27 [April 29, 2008]
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2008 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- */
-
-#define PNG_INTERNAL
-#include "png.h"
-#ifdef PNG_WRITE_SUPPORTED
-
-/* Place a 32-bit number into a buffer in PNG byte order. We work
- * with unsigned numbers for convenience, although one supported
- * ancillary chunk uses signed (two's complement) numbers.
- */
-void PNGAPI
-png_save_uint_32(png_bytep buf, png_uint_32 i)
-{
- buf[0] = (png_byte)((i >> 24) & 0xff);
- buf[1] = (png_byte)((i >> 16) & 0xff);
- buf[2] = (png_byte)((i >> 8) & 0xff);
- buf[3] = (png_byte)(i & 0xff);
-}
-
-/* The png_save_int_32 function assumes integers are stored in two's
- * complement format. If this isn't the case, then this routine needs to
- * be modified to write data in two's complement format.
- */
-void PNGAPI
-png_save_int_32(png_bytep buf, png_int_32 i)
-{
- buf[0] = (png_byte)((i >> 24) & 0xff);
- buf[1] = (png_byte)((i >> 16) & 0xff);
- buf[2] = (png_byte)((i >> 8) & 0xff);
- buf[3] = (png_byte)(i & 0xff);
-}
-
-/* Place a 16-bit number into a buffer in PNG byte order.
- * The parameter is declared unsigned int, not png_uint_16,
- * just to avoid potential problems on pre-ANSI C compilers.
- */
-void PNGAPI
-png_save_uint_16(png_bytep buf, unsigned int i)
-{
- buf[0] = (png_byte)((i >> 8) & 0xff);
- buf[1] = (png_byte)(i & 0xff);
-}
-
-/* Write a PNG chunk all at once. The type is an array of ASCII characters
- * representing the chunk name. The array must be at least 4 bytes in
- * length, and does not need to be null terminated. To be safe, pass the
- * pre-defined chunk names here, and if you need a new one, define it
- * where the others are defined. The length is the length of the data.
- * All the data must be present. If that is not possible, use the
- * png_write_chunk_start(), png_write_chunk_data(), and png_write_chunk_end()
- * functions instead.
- */
-void PNGAPI
-png_write_chunk(png_structp png_ptr, png_bytep chunk_name,
- png_bytep data, png_size_t length)
-{
- if(png_ptr == NULL) return;
- png_write_chunk_start(png_ptr, chunk_name, (png_uint_32)length);
- png_write_chunk_data(png_ptr, data, length);
- png_write_chunk_end(png_ptr);
-}
-
-/* Write the start of a PNG chunk. The type is the chunk type.
- * The total_length is the sum of the lengths of all the data you will be
- * passing in png_write_chunk_data().
- */
-void PNGAPI
-png_write_chunk_start(png_structp png_ptr, png_bytep chunk_name,
- png_uint_32 length)
-{
- png_byte buf[4];
- png_debug2(0, "Writing %s chunk (%lu bytes)\n", chunk_name, length);
- if(png_ptr == NULL) return;
-
- /* write the length */
- png_save_uint_32(buf, length);
- png_write_data(png_ptr, buf, (png_size_t)4);
-
- /* write the chunk name */
- png_write_data(png_ptr, chunk_name, (png_size_t)4);
- /* reset the crc and run it over the chunk name */
- png_reset_crc(png_ptr);
- png_calculate_crc(png_ptr, chunk_name, (png_size_t)4);
-}
-
-/* Write the data of a PNG chunk started with png_write_chunk_start().
- * Note that multiple calls to this function are allowed, and that the
- * sum of the lengths from these calls *must* add up to the total_length
- * given to png_write_chunk_start().
- */
-void PNGAPI
-png_write_chunk_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- /* write the data, and run the CRC over it */
- if(png_ptr == NULL) return;
- if (data != NULL && length > 0)
- {
- png_calculate_crc(png_ptr, data, length);
- png_write_data(png_ptr, data, length);
- }
-}
-
-/* Finish a chunk started with png_write_chunk_start(). */
-void PNGAPI
-png_write_chunk_end(png_structp png_ptr)
-{
- png_byte buf[4];
-
- if(png_ptr == NULL) return;
-
- /* write the crc */
- png_save_uint_32(buf, png_ptr->crc);
-
- png_write_data(png_ptr, buf, (png_size_t)4);
-}
-
-/* Simple function to write the signature. If we have already written
- * the magic bytes of the signature, or more likely, the PNG stream is
- * being embedded into another stream and doesn't need its own signature,
- * we should call png_set_sig_bytes() to tell libpng how many of the
- * bytes have already been written.
- */
-void /* PRIVATE */
-png_write_sig(png_structp png_ptr)
-{
- png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
- /* write the rest of the 8 byte signature */
- png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes],
- (png_size_t)8 - png_ptr->sig_bytes);
- if(png_ptr->sig_bytes < 3)
- png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
-}
-
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_iCCP_SUPPORTED)
-/*
- * This pair of functions encapsulates the operation of (a) compressing a
- * text string, and (b) issuing it later as a series of chunk data writes.
- * The compression_state structure is shared context for these functions
- * set up by the caller in order to make the whole mess thread-safe.
- */
-
-typedef struct
-{
- char *input; /* the uncompressed input data */
- int input_len; /* its length */
- int num_output_ptr; /* number of output pointers used */
- int max_output_ptr; /* size of output_ptr */
- png_charpp output_ptr; /* array of pointers to output */
-} compression_state;
-
-/* compress given text into storage in the png_ptr structure */
-static int /* PRIVATE */
-png_text_compress(png_structp png_ptr,
- png_charp text, png_size_t text_len, int compression,
- compression_state *comp)
-{
- int ret;
-
- comp->num_output_ptr = 0;
- comp->max_output_ptr = 0;
- comp->output_ptr = NULL;
- comp->input = NULL;
- comp->input_len = 0;
-
- /* we may just want to pass the text right through */
- if (compression == PNG_TEXT_COMPRESSION_NONE)
- {
- comp->input = text;
- comp->input_len = text_len;
- return((int)text_len);
- }
-
- if (compression >= PNG_TEXT_COMPRESSION_LAST)
- {
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- char msg[50];
- png_snprintf(msg, 50, "Unknown compression type %d", compression);
- png_warning(png_ptr, msg);
-#else
- png_warning(png_ptr, "Unknown compression type");
-#endif
- }
-
- /* We can't write the chunk until we find out how much data we have,
- * which means we need to run the compressor first and save the
- * output. This shouldn't be a problem, as the vast majority of
- * comments should be reasonable, but we will set up an array of
- * malloc'd pointers to be sure.
- *
- * If we knew the application was well behaved, we could simplify this
- * greatly by assuming we can always malloc an output buffer large
- * enough to hold the compressed text ((1001 * text_len / 1000) + 12)
- * and malloc this directly. The only time this would be a bad idea is
- * if we can't malloc more than 64K and we have 64K of random input
- * data, or if the input string is incredibly large (although this
- * wouldn't cause a failure, just a slowdown due to swapping).
- */
-
- /* set up the compression buffers */
- png_ptr->zstream.avail_in = (uInt)text_len;
- png_ptr->zstream.next_in = (Bytef *)text;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- png_ptr->zstream.next_out = (Bytef *)png_ptr->zbuf;
-
- /* this is the same compression loop as in png_write_row() */
- do
- {
- /* compress the data */
- ret = deflate(&png_ptr->zstream, Z_NO_FLUSH);
- if (ret != Z_OK)
- {
- /* error */
- if (png_ptr->zstream.msg != NULL)
- png_error(png_ptr, png_ptr->zstream.msg);
- else
- png_error(png_ptr, "zlib error");
- }
- /* check to see if we need more room */
- if (!(png_ptr->zstream.avail_out))
- {
- /* make sure the output array has room */
- if (comp->num_output_ptr >= comp->max_output_ptr)
- {
- int old_max;
-
- old_max = comp->max_output_ptr;
- comp->max_output_ptr = comp->num_output_ptr + 4;
- if (comp->output_ptr != NULL)
- {
- png_charpp old_ptr;
-
- old_ptr = comp->output_ptr;
- comp->output_ptr = (png_charpp)png_malloc(png_ptr,
- (png_uint_32)(comp->max_output_ptr *
- png_sizeof (png_charpp)));
- png_memcpy(comp->output_ptr, old_ptr, old_max
- * png_sizeof (png_charp));
- png_free(png_ptr, old_ptr);
- }
- else
- comp->output_ptr = (png_charpp)png_malloc(png_ptr,
- (png_uint_32)(comp->max_output_ptr *
- png_sizeof (png_charp)));
- }
-
- /* save the data */
- comp->output_ptr[comp->num_output_ptr] = (png_charp)png_malloc(png_ptr,
- (png_uint_32)png_ptr->zbuf_size);
- png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf,
- png_ptr->zbuf_size);
- comp->num_output_ptr++;
-
- /* and reset the buffer */
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- png_ptr->zstream.next_out = png_ptr->zbuf;
- }
- /* continue until we don't have any more to compress */
- } while (png_ptr->zstream.avail_in);
-
- /* finish the compression */
- do
- {
- /* tell zlib we are finished */
- ret = deflate(&png_ptr->zstream, Z_FINISH);
-
- if (ret == Z_OK)
- {
- /* check to see if we need more room */
- if (!(png_ptr->zstream.avail_out))
- {
- /* check to make sure our output array has room */
- if (comp->num_output_ptr >= comp->max_output_ptr)
- {
- int old_max;
-
- old_max = comp->max_output_ptr;
- comp->max_output_ptr = comp->num_output_ptr + 4;
- if (comp->output_ptr != NULL)
- {
- png_charpp old_ptr;
-
- old_ptr = comp->output_ptr;
- /* This could be optimized to realloc() */
- comp->output_ptr = (png_charpp)png_malloc(png_ptr,
- (png_uint_32)(comp->max_output_ptr *
- png_sizeof (png_charpp)));
- png_memcpy(comp->output_ptr, old_ptr,
- old_max * png_sizeof (png_charp));
- png_free(png_ptr, old_ptr);
- }
- else
- comp->output_ptr = (png_charpp)png_malloc(png_ptr,
- (png_uint_32)(comp->max_output_ptr *
- png_sizeof (png_charp)));
- }
-
- /* save off the data */
- comp->output_ptr[comp->num_output_ptr] =
- (png_charp)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size);
- png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf,
- png_ptr->zbuf_size);
- comp->num_output_ptr++;
-
- /* and reset the buffer pointers */
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- png_ptr->zstream.next_out = png_ptr->zbuf;
- }
- }
- else if (ret != Z_STREAM_END)
- {
- /* we got an error */
- if (png_ptr->zstream.msg != NULL)
- png_error(png_ptr, png_ptr->zstream.msg);
- else
- png_error(png_ptr, "zlib error");
- }
- } while (ret != Z_STREAM_END);
-
- /* text length is number of buffers plus last buffer */
- text_len = png_ptr->zbuf_size * comp->num_output_ptr;
- if (png_ptr->zstream.avail_out < png_ptr->zbuf_size)
- text_len += png_ptr->zbuf_size - (png_size_t)png_ptr->zstream.avail_out;
-
- return((int)text_len);
-}
-
-/* ship the compressed text out via chunk writes */
-static void /* PRIVATE */
-png_write_compressed_data_out(png_structp png_ptr, compression_state *comp)
-{
- int i;
-
- /* handle the no-compression case */
- if (comp->input)
- {
- png_write_chunk_data(png_ptr, (png_bytep)comp->input,
- (png_size_t)comp->input_len);
- return;
- }
-
- /* write saved output buffers, if any */
- for (i = 0; i < comp->num_output_ptr; i++)
- {
- png_write_chunk_data(png_ptr,(png_bytep)comp->output_ptr[i],
- png_ptr->zbuf_size);
- png_free(png_ptr, comp->output_ptr[i]);
- comp->output_ptr[i]=NULL;
- }
- if (comp->max_output_ptr != 0)
- png_free(png_ptr, comp->output_ptr);
- comp->output_ptr=NULL;
- /* write anything left in zbuf */
- if (png_ptr->zstream.avail_out < (png_uint_32)png_ptr->zbuf_size)
- png_write_chunk_data(png_ptr, png_ptr->zbuf,
- png_ptr->zbuf_size - png_ptr->zstream.avail_out);
-
- /* reset zlib for another zTXt/iTXt or image data */
- deflateReset(&png_ptr->zstream);
- png_ptr->zstream.data_type = Z_BINARY;
-}
-#endif
-
-/* Write the IHDR chunk, and update the png_struct with the necessary
- * information. Note that the rest of this code depends upon this
- * information being correct.
- */
-void /* PRIVATE */
-png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
- int bit_depth, int color_type, int compression_type, int filter_type,
- int interlace_type)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_IHDR;
-#endif
- int ret;
-
- png_byte buf[13]; /* buffer to store the IHDR info */
-
- png_debug(1, "in png_write_IHDR\n");
- /* Check that we have valid input data from the application info */
- switch (color_type)
- {
- case PNG_COLOR_TYPE_GRAY:
- switch (bit_depth)
- {
- case 1:
- case 2:
- case 4:
- case 8:
- case 16: png_ptr->channels = 1; break;
- default: png_error(png_ptr,"Invalid bit depth for grayscale image");
- }
- break;
- case PNG_COLOR_TYPE_RGB:
- if (bit_depth != 8 && bit_depth != 16)
- png_error(png_ptr, "Invalid bit depth for RGB image");
- png_ptr->channels = 3;
- break;
- case PNG_COLOR_TYPE_PALETTE:
- switch (bit_depth)
- {
- case 1:
- case 2:
- case 4:
- case 8: png_ptr->channels = 1; break;
- default: png_error(png_ptr, "Invalid bit depth for paletted image");
- }
- break;
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- if (bit_depth != 8 && bit_depth != 16)
- png_error(png_ptr, "Invalid bit depth for grayscale+alpha image");
- png_ptr->channels = 2;
- break;
- case PNG_COLOR_TYPE_RGB_ALPHA:
- if (bit_depth != 8 && bit_depth != 16)
- png_error(png_ptr, "Invalid bit depth for RGBA image");
- png_ptr->channels = 4;
- break;
- default:
- png_error(png_ptr, "Invalid image color type specified");
- }
-
- if (compression_type != PNG_COMPRESSION_TYPE_BASE)
- {
- png_warning(png_ptr, "Invalid compression type specified");
- compression_type = PNG_COMPRESSION_TYPE_BASE;
- }
-
- /* Write filter_method 64 (intrapixel differencing) only if
- * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
- * 2. Libpng did not write a PNG signature (this filter_method is only
- * used in PNG datastreams that are embedded in MNG datastreams) and
- * 3. The application called png_permit_mng_features with a mask that
- * included PNG_FLAG_MNG_FILTER_64 and
- * 4. The filter_method is 64 and
- * 5. The color_type is RGB or RGBA
- */
- if (
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- !((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
- ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
- (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_RGB_ALPHA) &&
- (filter_type == PNG_INTRAPIXEL_DIFFERENCING)) &&
-#endif
- filter_type != PNG_FILTER_TYPE_BASE)
- {
- png_warning(png_ptr, "Invalid filter type specified");
- filter_type = PNG_FILTER_TYPE_BASE;
- }
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
- if (interlace_type != PNG_INTERLACE_NONE &&
- interlace_type != PNG_INTERLACE_ADAM7)
- {
- png_warning(png_ptr, "Invalid interlace type specified");
- interlace_type = PNG_INTERLACE_ADAM7;
- }
-#else
- interlace_type=PNG_INTERLACE_NONE;
-#endif
-
- /* save off the relevent information */
- png_ptr->bit_depth = (png_byte)bit_depth;
- png_ptr->color_type = (png_byte)color_type;
- png_ptr->interlaced = (png_byte)interlace_type;
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- png_ptr->filter_type = (png_byte)filter_type;
-#endif
- png_ptr->compression_type = (png_byte)compression_type;
- png_ptr->width = width;
- png_ptr->height = height;
-
- png_ptr->pixel_depth = (png_byte)(bit_depth * png_ptr->channels);
- png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
- /* set the usr info, so any transformations can modify it */
- png_ptr->usr_width = png_ptr->width;
- png_ptr->usr_bit_depth = png_ptr->bit_depth;
- png_ptr->usr_channels = png_ptr->channels;
-
- /* pack the header information into the buffer */
- png_save_uint_32(buf, width);
- png_save_uint_32(buf + 4, height);
- buf[8] = (png_byte)bit_depth;
- buf[9] = (png_byte)color_type;
- buf[10] = (png_byte)compression_type;
- buf[11] = (png_byte)filter_type;
- buf[12] = (png_byte)interlace_type;
-
- /* write the chunk */
- png_write_chunk(png_ptr, png_IHDR, buf, (png_size_t)13);
-
- /* initialize zlib with PNG info */
- png_ptr->zstream.zalloc = png_zalloc;
- png_ptr->zstream.zfree = png_zfree;
- png_ptr->zstream.opaque = (voidpf)png_ptr;
- if (!(png_ptr->do_filter))
- {
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
- png_ptr->bit_depth < 8)
- png_ptr->do_filter = PNG_FILTER_NONE;
- else
- png_ptr->do_filter = PNG_ALL_FILTERS;
- }
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_STRATEGY))
- {
- if (png_ptr->do_filter != PNG_FILTER_NONE)
- png_ptr->zlib_strategy = Z_FILTERED;
- else
- png_ptr->zlib_strategy = Z_DEFAULT_STRATEGY;
- }
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_LEVEL))
- png_ptr->zlib_level = Z_DEFAULT_COMPRESSION;
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL))
- png_ptr->zlib_mem_level = 8;
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS))
- png_ptr->zlib_window_bits = 15;
- if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_METHOD))
- png_ptr->zlib_method = 8;
- ret = deflateInit2(&png_ptr->zstream, png_ptr->zlib_level,
- png_ptr->zlib_method, png_ptr->zlib_window_bits,
- png_ptr->zlib_mem_level, png_ptr->zlib_strategy);
- if (ret != Z_OK)
- {
- if (ret == Z_VERSION_ERROR) png_error(png_ptr,
- "zlib failed to initialize compressor -- version error");
- if (ret == Z_STREAM_ERROR) png_error(png_ptr,
- "zlib failed to initialize compressor -- stream error");
- if (ret == Z_MEM_ERROR) png_error(png_ptr,
- "zlib failed to initialize compressor -- mem error");
- png_error(png_ptr, "zlib failed to initialize compressor");
- }
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- /* libpng is not interested in zstream.data_type */
- /* set it to a predefined value, to avoid its evaluation inside zlib */
- png_ptr->zstream.data_type = Z_BINARY;
-
- png_ptr->mode = PNG_HAVE_IHDR;
-}
-
-/* write the palette. We are careful not to trust png_color to be in the
- * correct order for PNG, so people can redefine it to any convenient
- * structure.
- */
-void /* PRIVATE */
-png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_PLTE;
-#endif
- png_uint_32 i;
- png_colorp pal_ptr;
- png_byte buf[3];
-
- png_debug(1, "in png_write_PLTE\n");
- if ((
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- !(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) &&
-#endif
- num_pal == 0) || num_pal > 256)
- {
- if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
- {
- png_error(png_ptr, "Invalid number of colors in palette");
- }
- else
- {
- png_warning(png_ptr, "Invalid number of colors in palette");
- return;
- }
- }
-
- if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR))
- {
- png_warning(png_ptr,
- "Ignoring request to write a PLTE chunk in grayscale PNG");
- return;
- }
-
- png_ptr->num_palette = (png_uint_16)num_pal;
- png_debug1(3, "num_palette = %d\n", png_ptr->num_palette);
-
- png_write_chunk_start(png_ptr, png_PLTE, num_pal * 3);
-#ifndef PNG_NO_POINTER_INDEXING
- for (i = 0, pal_ptr = palette; i < num_pal; i++, pal_ptr++)
- {
- buf[0] = pal_ptr->red;
- buf[1] = pal_ptr->green;
- buf[2] = pal_ptr->blue;
- png_write_chunk_data(png_ptr, buf, (png_size_t)3);
- }
-#else
- /* This is a little slower but some buggy compilers need to do this instead */
- pal_ptr=palette;
- for (i = 0; i < num_pal; i++)
- {
- buf[0] = pal_ptr[i].red;
- buf[1] = pal_ptr[i].green;
- buf[2] = pal_ptr[i].blue;
- png_write_chunk_data(png_ptr, buf, (png_size_t)3);
- }
-#endif
- png_write_chunk_end(png_ptr);
- png_ptr->mode |= PNG_HAVE_PLTE;
-}
-
-/* write an IDAT chunk */
-void /* PRIVATE */
-png_write_IDAT(png_structp png_ptr, png_bytep data, png_size_t length)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_IDAT;
-#endif
- png_debug(1, "in png_write_IDAT\n");
-
- /* Optimize the CMF field in the zlib stream. */
- /* This hack of the zlib stream is compliant to the stream specification. */
- if (!(png_ptr->mode & PNG_HAVE_IDAT) &&
- png_ptr->compression_type == PNG_COMPRESSION_TYPE_BASE)
- {
- unsigned int z_cmf = data[0]; /* zlib compression method and flags */
- if ((z_cmf & 0x0f) == 8 && (z_cmf & 0xf0) <= 0x70)
- {
- /* Avoid memory underflows and multiplication overflows. */
- /* The conditions below are practically always satisfied;
- however, they still must be checked. */
- if (length >= 2 &&
- png_ptr->height < 16384 && png_ptr->width < 16384)
- {
- png_uint_32 uncompressed_idat_size = png_ptr->height *
- ((png_ptr->width *
- png_ptr->channels * png_ptr->bit_depth + 15) >> 3);
- unsigned int z_cinfo = z_cmf >> 4;
- unsigned int half_z_window_size = 1 << (z_cinfo + 7);
- while (uncompressed_idat_size <= half_z_window_size &&
- half_z_window_size >= 256)
- {
- z_cinfo--;
- half_z_window_size >>= 1;
- }
- z_cmf = (z_cmf & 0x0f) | (z_cinfo << 4);
- if (data[0] != (png_byte)z_cmf)
- {
- data[0] = (png_byte)z_cmf;
- data[1] &= 0xe0;
- data[1] += (png_byte)(0x1f - ((z_cmf << 8) + data[1]) % 0x1f);
- }
- }
- }
- else
- png_error(png_ptr,
- "Invalid zlib compression method or flags in IDAT");
- }
-
- png_write_chunk(png_ptr, png_IDAT, data, length);
- png_ptr->mode |= PNG_HAVE_IDAT;
-}
-
-/* write an IEND chunk */
-void /* PRIVATE */
-png_write_IEND(png_structp png_ptr)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_IEND;
-#endif
- png_debug(1, "in png_write_IEND\n");
- png_write_chunk(png_ptr, png_IEND, png_bytep_NULL,
- (png_size_t)0);
- png_ptr->mode |= PNG_HAVE_IEND;
-}
-
-#if defined(PNG_WRITE_gAMA_SUPPORTED)
-/* write a gAMA chunk */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-void /* PRIVATE */
-png_write_gAMA(png_structp png_ptr, double file_gamma)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_gAMA;
-#endif
- png_uint_32 igamma;
- png_byte buf[4];
-
- png_debug(1, "in png_write_gAMA\n");
- /* file_gamma is saved in 1/100,000ths */
- igamma = (png_uint_32)(file_gamma * 100000.0 + 0.5);
- png_save_uint_32(buf, igamma);
- png_write_chunk(png_ptr, png_gAMA, buf, (png_size_t)4);
-}
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-void /* PRIVATE */
-png_write_gAMA_fixed(png_structp png_ptr, png_fixed_point file_gamma)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_gAMA;
-#endif
- png_byte buf[4];
-
- png_debug(1, "in png_write_gAMA\n");
- /* file_gamma is saved in 1/100,000ths */
- png_save_uint_32(buf, (png_uint_32)file_gamma);
- png_write_chunk(png_ptr, png_gAMA, buf, (png_size_t)4);
-}
-#endif
-#endif
-
-#if defined(PNG_WRITE_sRGB_SUPPORTED)
-/* write a sRGB chunk */
-void /* PRIVATE */
-png_write_sRGB(png_structp png_ptr, int srgb_intent)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_sRGB;
-#endif
- png_byte buf[1];
-
- png_debug(1, "in png_write_sRGB\n");
- if(srgb_intent >= PNG_sRGB_INTENT_LAST)
- png_warning(png_ptr,
- "Invalid sRGB rendering intent specified");
- buf[0]=(png_byte)srgb_intent;
- png_write_chunk(png_ptr, png_sRGB, buf, (png_size_t)1);
-}
-#endif
-
-#if defined(PNG_WRITE_iCCP_SUPPORTED)
-/* write an iCCP chunk */
-void /* PRIVATE */
-png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type,
- png_charp profile, int profile_len)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_iCCP;
-#endif
- png_size_t name_len;
- png_charp new_name;
- compression_state comp;
- int embedded_profile_len = 0;
-
- png_debug(1, "in png_write_iCCP\n");
-
- comp.num_output_ptr = 0;
- comp.max_output_ptr = 0;
- comp.output_ptr = NULL;
- comp.input = NULL;
- comp.input_len = 0;
-
- if (name == NULL || (name_len = png_check_keyword(png_ptr, name,
- &new_name)) == 0)
- {
- png_warning(png_ptr, "Empty keyword in iCCP chunk");
- return;
- }
-
- if (compression_type != PNG_COMPRESSION_TYPE_BASE)
- png_warning(png_ptr, "Unknown compression type in iCCP chunk");
-
- if (profile == NULL)
- profile_len = 0;
-
- if (profile_len > 3)
- embedded_profile_len =
- ((*( (png_bytep)profile ))<<24) |
- ((*( (png_bytep)profile+1))<<16) |
- ((*( (png_bytep)profile+2))<< 8) |
- ((*( (png_bytep)profile+3)) );
-
- if (profile_len < embedded_profile_len)
- {
- png_warning(png_ptr,
- "Embedded profile length too large in iCCP chunk");
- return;
- }
-
- if (profile_len > embedded_profile_len)
- {
- png_warning(png_ptr,
- "Truncating profile to actual length in iCCP chunk");
- profile_len = embedded_profile_len;
- }
-
- if (profile_len)
- profile_len = png_text_compress(png_ptr, profile, (png_size_t)profile_len,
- PNG_COMPRESSION_TYPE_BASE, &comp);
-
- /* make sure we include the NULL after the name and the compression type */
- png_write_chunk_start(png_ptr, png_iCCP,
- (png_uint_32)name_len+profile_len+2);
- new_name[name_len+1]=0x00;
- png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 2);
-
- if (profile_len)
- png_write_compressed_data_out(png_ptr, &comp);
-
- png_write_chunk_end(png_ptr);
- png_free(png_ptr, new_name);
-}
-#endif
-
-#if defined(PNG_WRITE_sPLT_SUPPORTED)
-/* write a sPLT chunk */
-void /* PRIVATE */
-png_write_sPLT(png_structp png_ptr, png_sPLT_tp spalette)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_sPLT;
-#endif
- png_size_t name_len;
- png_charp new_name;
- png_byte entrybuf[10];
- int entry_size = (spalette->depth == 8 ? 6 : 10);
- int palette_size = entry_size * spalette->nentries;
- png_sPLT_entryp ep;
-#ifdef PNG_NO_POINTER_INDEXING
- int i;
-#endif
-
- png_debug(1, "in png_write_sPLT\n");
- if (spalette->name == NULL || (name_len = png_check_keyword(png_ptr,
- spalette->name, &new_name))==0)
- {
- png_warning(png_ptr, "Empty keyword in sPLT chunk");
- return;
- }
-
- /* make sure we include the NULL after the name */
- png_write_chunk_start(png_ptr, png_sPLT,
- (png_uint_32)(name_len + 2 + palette_size));
- png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 1);
- png_write_chunk_data(png_ptr, (png_bytep)&spalette->depth, 1);
-
- /* loop through each palette entry, writing appropriately */
-#ifndef PNG_NO_POINTER_INDEXING
- for (ep = spalette->entries; ep<spalette->entries+spalette->nentries; ep++)
- {
- if (spalette->depth == 8)
- {
- entrybuf[0] = (png_byte)ep->red;
- entrybuf[1] = (png_byte)ep->green;
- entrybuf[2] = (png_byte)ep->blue;
- entrybuf[3] = (png_byte)ep->alpha;
- png_save_uint_16(entrybuf + 4, ep->frequency);
- }
- else
- {
- png_save_uint_16(entrybuf + 0, ep->red);
- png_save_uint_16(entrybuf + 2, ep->green);
- png_save_uint_16(entrybuf + 4, ep->blue);
- png_save_uint_16(entrybuf + 6, ep->alpha);
- png_save_uint_16(entrybuf + 8, ep->frequency);
- }
- png_write_chunk_data(png_ptr, entrybuf, (png_size_t)entry_size);
- }
-#else
- ep=spalette->entries;
- for (i=0; i>spalette->nentries; i++)
- {
- if (spalette->depth == 8)
- {
- entrybuf[0] = (png_byte)ep[i].red;
- entrybuf[1] = (png_byte)ep[i].green;
- entrybuf[2] = (png_byte)ep[i].blue;
- entrybuf[3] = (png_byte)ep[i].alpha;
- png_save_uint_16(entrybuf + 4, ep[i].frequency);
- }
- else
- {
- png_save_uint_16(entrybuf + 0, ep[i].red);
- png_save_uint_16(entrybuf + 2, ep[i].green);
- png_save_uint_16(entrybuf + 4, ep[i].blue);
- png_save_uint_16(entrybuf + 6, ep[i].alpha);
- png_save_uint_16(entrybuf + 8, ep[i].frequency);
- }
- png_write_chunk_data(png_ptr, entrybuf, entry_size);
- }
-#endif
-
- png_write_chunk_end(png_ptr);
- png_free(png_ptr, new_name);
-}
-#endif
-
-#if defined(PNG_WRITE_sBIT_SUPPORTED)
-/* write the sBIT chunk */
-void /* PRIVATE */
-png_write_sBIT(png_structp png_ptr, png_color_8p sbit, int color_type)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_sBIT;
-#endif
- png_byte buf[4];
- png_size_t size;
-
- png_debug(1, "in png_write_sBIT\n");
- /* make sure we don't depend upon the order of PNG_COLOR_8 */
- if (color_type & PNG_COLOR_MASK_COLOR)
- {
- png_byte maxbits;
-
- maxbits = (png_byte)(color_type==PNG_COLOR_TYPE_PALETTE ? 8 :
- png_ptr->usr_bit_depth);
- if (sbit->red == 0 || sbit->red > maxbits ||
- sbit->green == 0 || sbit->green > maxbits ||
- sbit->blue == 0 || sbit->blue > maxbits)
- {
- png_warning(png_ptr, "Invalid sBIT depth specified");
- return;
- }
- buf[0] = sbit->red;
- buf[1] = sbit->green;
- buf[2] = sbit->blue;
- size = 3;
- }
- else
- {
- if (sbit->gray == 0 || sbit->gray > png_ptr->usr_bit_depth)
- {
- png_warning(png_ptr, "Invalid sBIT depth specified");
- return;
- }
- buf[0] = sbit->gray;
- size = 1;
- }
-
- if (color_type & PNG_COLOR_MASK_ALPHA)
- {
- if (sbit->alpha == 0 || sbit->alpha > png_ptr->usr_bit_depth)
- {
- png_warning(png_ptr, "Invalid sBIT depth specified");
- return;
- }
- buf[size++] = sbit->alpha;
- }
-
- png_write_chunk(png_ptr, png_sBIT, buf, size);
-}
-#endif
-
-#if defined(PNG_WRITE_cHRM_SUPPORTED)
-/* write the cHRM chunk */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-void /* PRIVATE */
-png_write_cHRM(png_structp png_ptr, double white_x, double white_y,
- double red_x, double red_y, double green_x, double green_y,
- double blue_x, double blue_y)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_cHRM;
-#endif
- png_byte buf[32];
- png_uint_32 itemp;
-
- png_debug(1, "in png_write_cHRM\n");
- /* each value is saved in 1/100,000ths */
- if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 ||
- white_x + white_y > 1.0)
- {
- png_warning(png_ptr, "Invalid cHRM white point specified");
-#if !defined(PNG_NO_CONSOLE_IO)
- fprintf(stderr,"white_x=%f, white_y=%f\n",white_x, white_y);
-#endif
- return;
- }
- itemp = (png_uint_32)(white_x * 100000.0 + 0.5);
- png_save_uint_32(buf, itemp);
- itemp = (png_uint_32)(white_y * 100000.0 + 0.5);
- png_save_uint_32(buf + 4, itemp);
-
- if (red_x < 0 || red_y < 0 || red_x + red_y > 1.0)
- {
- png_warning(png_ptr, "Invalid cHRM red point specified");
- return;
- }
- itemp = (png_uint_32)(red_x * 100000.0 + 0.5);
- png_save_uint_32(buf + 8, itemp);
- itemp = (png_uint_32)(red_y * 100000.0 + 0.5);
- png_save_uint_32(buf + 12, itemp);
-
- if (green_x < 0 || green_y < 0 || green_x + green_y > 1.0)
- {
- png_warning(png_ptr, "Invalid cHRM green point specified");
- return;
- }
- itemp = (png_uint_32)(green_x * 100000.0 + 0.5);
- png_save_uint_32(buf + 16, itemp);
- itemp = (png_uint_32)(green_y * 100000.0 + 0.5);
- png_save_uint_32(buf + 20, itemp);
-
- if (blue_x < 0 || blue_y < 0 || blue_x + blue_y > 1.0)
- {
- png_warning(png_ptr, "Invalid cHRM blue point specified");
- return;
- }
- itemp = (png_uint_32)(blue_x * 100000.0 + 0.5);
- png_save_uint_32(buf + 24, itemp);
- itemp = (png_uint_32)(blue_y * 100000.0 + 0.5);
- png_save_uint_32(buf + 28, itemp);
-
- png_write_chunk(png_ptr, png_cHRM, buf, (png_size_t)32);
-}
-#endif
-#ifdef PNG_FIXED_POINT_SUPPORTED
-void /* PRIVATE */
-png_write_cHRM_fixed(png_structp png_ptr, png_fixed_point white_x,
- png_fixed_point white_y, png_fixed_point red_x, png_fixed_point red_y,
- png_fixed_point green_x, png_fixed_point green_y, png_fixed_point blue_x,
- png_fixed_point blue_y)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_cHRM;
-#endif
- png_byte buf[32];
-
- png_debug(1, "in png_write_cHRM\n");
- /* each value is saved in 1/100,000ths */
- if (white_x > 80000L || white_y > 80000L || white_x + white_y > 100000L)
- {
- png_warning(png_ptr, "Invalid fixed cHRM white point specified");
-#if !defined(PNG_NO_CONSOLE_IO)
- fprintf(stderr,"white_x=%ld, white_y=%ld\n",white_x, white_y);
-#endif
- return;
- }
- png_save_uint_32(buf, (png_uint_32)white_x);
- png_save_uint_32(buf + 4, (png_uint_32)white_y);
-
- if (red_x + red_y > 100000L)
- {
- png_warning(png_ptr, "Invalid cHRM fixed red point specified");
- return;
- }
- png_save_uint_32(buf + 8, (png_uint_32)red_x);
- png_save_uint_32(buf + 12, (png_uint_32)red_y);
-
- if (green_x + green_y > 100000L)
- {
- png_warning(png_ptr, "Invalid fixed cHRM green point specified");
- return;
- }
- png_save_uint_32(buf + 16, (png_uint_32)green_x);
- png_save_uint_32(buf + 20, (png_uint_32)green_y);
-
- if (blue_x + blue_y > 100000L)
- {
- png_warning(png_ptr, "Invalid fixed cHRM blue point specified");
- return;
- }
- png_save_uint_32(buf + 24, (png_uint_32)blue_x);
- png_save_uint_32(buf + 28, (png_uint_32)blue_y);
-
- png_write_chunk(png_ptr, png_cHRM, buf, (png_size_t)32);
-}
-#endif
-#endif
-
-#if defined(PNG_WRITE_tRNS_SUPPORTED)
-/* write the tRNS chunk */
-void /* PRIVATE */
-png_write_tRNS(png_structp png_ptr, png_bytep trans, png_color_16p tran,
- int num_trans, int color_type)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_tRNS;
-#endif
- png_byte buf[6];
-
- png_debug(1, "in png_write_tRNS\n");
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (num_trans <= 0 || num_trans > (int)png_ptr->num_palette)
- {
- png_warning(png_ptr,"Invalid number of transparent colors specified");
- return;
- }
- /* write the chunk out as it is */
- png_write_chunk(png_ptr, png_tRNS, trans, (png_size_t)num_trans);
- }
- else if (color_type == PNG_COLOR_TYPE_GRAY)
- {
- /* one 16 bit value */
- if(tran->gray >= (1 << png_ptr->bit_depth))
- {
- png_warning(png_ptr,
- "Ignoring attempt to write tRNS chunk out-of-range for bit_depth");
- return;
- }
- png_save_uint_16(buf, tran->gray);
- png_write_chunk(png_ptr, png_tRNS, buf, (png_size_t)2);
- }
- else if (color_type == PNG_COLOR_TYPE_RGB)
- {
- /* three 16 bit values */
- png_save_uint_16(buf, tran->red);
- png_save_uint_16(buf + 2, tran->green);
- png_save_uint_16(buf + 4, tran->blue);
- if(png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4]))
- {
- png_warning(png_ptr,
- "Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8");
- return;
- }
- png_write_chunk(png_ptr, png_tRNS, buf, (png_size_t)6);
- }
- else
- {
- png_warning(png_ptr, "Can't write tRNS with an alpha channel");
- }
-}
-#endif
-
-#if defined(PNG_WRITE_bKGD_SUPPORTED)
-/* write the background chunk */
-void /* PRIVATE */
-png_write_bKGD(png_structp png_ptr, png_color_16p back, int color_type)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_bKGD;
-#endif
- png_byte buf[6];
-
- png_debug(1, "in png_write_bKGD\n");
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- {
- if (
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
- (png_ptr->num_palette ||
- (!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) &&
-#endif
- back->index > png_ptr->num_palette)
- {
- png_warning(png_ptr, "Invalid background palette index");
- return;
- }
- buf[0] = back->index;
- png_write_chunk(png_ptr, png_bKGD, buf, (png_size_t)1);
- }
- else if (color_type & PNG_COLOR_MASK_COLOR)
- {
- png_save_uint_16(buf, back->red);
- png_save_uint_16(buf + 2, back->green);
- png_save_uint_16(buf + 4, back->blue);
- if(png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4]))
- {
- png_warning(png_ptr,
- "Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8");
- return;
- }
- png_write_chunk(png_ptr, png_bKGD, buf, (png_size_t)6);
- }
- else
- {
- if(back->gray >= (1 << png_ptr->bit_depth))
- {
- png_warning(png_ptr,
- "Ignoring attempt to write bKGD chunk out-of-range for bit_depth");
- return;
- }
- png_save_uint_16(buf, back->gray);
- png_write_chunk(png_ptr, png_bKGD, buf, (png_size_t)2);
- }
-}
-#endif
-
-#if defined(PNG_WRITE_hIST_SUPPORTED)
-/* write the histogram */
-void /* PRIVATE */
-png_write_hIST(png_structp png_ptr, png_uint_16p hist, int num_hist)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_hIST;
-#endif
- int i;
- png_byte buf[3];
-
- png_debug(1, "in png_write_hIST\n");
- if (num_hist > (int)png_ptr->num_palette)
- {
- png_debug2(3, "num_hist = %d, num_palette = %d\n", num_hist,
- png_ptr->num_palette);
- png_warning(png_ptr, "Invalid number of histogram entries specified");
- return;
- }
-
- png_write_chunk_start(png_ptr, png_hIST, (png_uint_32)(num_hist * 2));
- for (i = 0; i < num_hist; i++)
- {
- png_save_uint_16(buf, hist[i]);
- png_write_chunk_data(png_ptr, buf, (png_size_t)2);
- }
- png_write_chunk_end(png_ptr);
-}
-#endif
-
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
- defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
-/* Check that the tEXt or zTXt keyword is valid per PNG 1.0 specification,
- * and if invalid, correct the keyword rather than discarding the entire
- * chunk. The PNG 1.0 specification requires keywords 1-79 characters in
- * length, forbids leading or trailing whitespace, multiple internal spaces,
- * and the non-break space (0x80) from ISO 8859-1. Returns keyword length.
- *
- * The new_key is allocated to hold the corrected keyword and must be freed
- * by the calling routine. This avoids problems with trying to write to
- * static keywords without having to have duplicate copies of the strings.
- */
-png_size_t /* PRIVATE */
-png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
-{
- png_size_t key_len;
- png_charp kp, dp;
- int kflag;
- int kwarn=0;
-
- png_debug(1, "in png_check_keyword\n");
- *new_key = NULL;
-
- if (key == NULL || (key_len = png_strlen(key)) == 0)
- {
- png_warning(png_ptr, "zero length keyword");
- return ((png_size_t)0);
- }
-
- png_debug1(2, "Keyword to be checked is '%s'\n", key);
-
- *new_key = (png_charp)png_malloc_warn(png_ptr, (png_uint_32)(key_len + 2));
- if (*new_key == NULL)
- {
- png_warning(png_ptr, "Out of memory while procesing keyword");
- return ((png_size_t)0);
- }
-
- /* Replace non-printing characters with a blank and print a warning */
- for (kp = key, dp = *new_key; *kp != '\0'; kp++, dp++)
- {
- if ((png_byte)*kp < 0x20 ||
- ((png_byte)*kp > 0x7E && (png_byte)*kp < 0xA1))
- {
-#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- char msg[40];
-
- png_snprintf(msg, 40,
- "invalid keyword character 0x%02X", (png_byte)*kp);
- png_warning(png_ptr, msg);
-#else
- png_warning(png_ptr, "invalid character in keyword");
-#endif
- *dp = ' ';
- }
- else
- {
- *dp = *kp;
- }
- }
- *dp = '\0';
-
- /* Remove any trailing white space. */
- kp = *new_key + key_len - 1;
- if (*kp == ' ')
- {
- png_warning(png_ptr, "trailing spaces removed from keyword");
-
- while (*kp == ' ')
- {
- *(kp--) = '\0';
- key_len--;
- }
- }
-
- /* Remove any leading white space. */
- kp = *new_key;
- if (*kp == ' ')
- {
- png_warning(png_ptr, "leading spaces removed from keyword");
-
- while (*kp == ' ')
- {
- kp++;
- key_len--;
- }
- }
-
- png_debug1(2, "Checking for multiple internal spaces in '%s'\n", kp);
-
- /* Remove multiple internal spaces. */
- for (kflag = 0, dp = *new_key; *kp != '\0'; kp++)
- {
- if (*kp == ' ' && kflag == 0)
- {
- *(dp++) = *kp;
- kflag = 1;
- }
- else if (*kp == ' ')
- {
- key_len--;
- kwarn=1;
- }
- else
- {
- *(dp++) = *kp;
- kflag = 0;
- }
- }
- *dp = '\0';
- if(kwarn)
- png_warning(png_ptr, "extra interior spaces removed from keyword");
-
- if (key_len == 0)
- {
- png_free(png_ptr, *new_key);
- *new_key=NULL;
- png_warning(png_ptr, "Zero length keyword");
- }
-
- if (key_len > 79)
- {
- png_warning(png_ptr, "keyword length must be 1 - 79 characters");
- new_key[79] = '\0';
- key_len = 79;
- }
-
- return (key_len);
-}
-#endif
-
-#if defined(PNG_WRITE_tEXt_SUPPORTED)
-/* write a tEXt chunk */
-void /* PRIVATE */
-png_write_tEXt(png_structp png_ptr, png_charp key, png_charp text,
- png_size_t text_len)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_tEXt;
-#endif
- png_size_t key_len;
- png_charp new_key;
-
- png_debug(1, "in png_write_tEXt\n");
- if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0)
- {
- png_warning(png_ptr, "Empty keyword in tEXt chunk");
- return;
- }
-
- if (text == NULL || *text == '\0')
- text_len = 0;
- else
- text_len = png_strlen(text);
-
- /* make sure we include the 0 after the key */
- png_write_chunk_start(png_ptr, png_tEXt, (png_uint_32)key_len+text_len+1);
- /*
- * We leave it to the application to meet PNG-1.0 requirements on the
- * contents of the text. PNG-1.0 through PNG-1.2 discourage the use of
- * any non-Latin-1 characters except for NEWLINE. ISO PNG will forbid them.
- * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
- */
- png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1);
- if (text_len)
- png_write_chunk_data(png_ptr, (png_bytep)text, text_len);
-
- png_write_chunk_end(png_ptr);
- png_free(png_ptr, new_key);
-}
-#endif
-
-#if defined(PNG_WRITE_zTXt_SUPPORTED)
-/* write a compressed text chunk */
-void /* PRIVATE */
-png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text,
- png_size_t text_len, int compression)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_zTXt;
-#endif
- png_size_t key_len;
- char buf[1];
- png_charp new_key;
- compression_state comp;
-
- png_debug(1, "in png_write_zTXt\n");
-
- comp.num_output_ptr = 0;
- comp.max_output_ptr = 0;
- comp.output_ptr = NULL;
- comp.input = NULL;
- comp.input_len = 0;
-
- if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0)
- {
- png_warning(png_ptr, "Empty keyword in zTXt chunk");
- return;
- }
-
- if (text == NULL || *text == '\0' || compression==PNG_TEXT_COMPRESSION_NONE)
- {
- png_write_tEXt(png_ptr, new_key, text, (png_size_t)0);
- png_free(png_ptr, new_key);
- return;
- }
-
- text_len = png_strlen(text);
-
- /* compute the compressed data; do it now for the length */
- text_len = png_text_compress(png_ptr, text, text_len, compression,
- &comp);
-
- /* write start of chunk */
- png_write_chunk_start(png_ptr, png_zTXt, (png_uint_32)
- (key_len+text_len+2));
- /* write key */
- png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1);
- png_free(png_ptr, new_key);
-
- buf[0] = (png_byte)compression;
- /* write compression */
- png_write_chunk_data(png_ptr, (png_bytep)buf, (png_size_t)1);
- /* write the compressed data */
- png_write_compressed_data_out(png_ptr, &comp);
-
- /* close the chunk */
- png_write_chunk_end(png_ptr);
-}
-#endif
-
-#if defined(PNG_WRITE_iTXt_SUPPORTED)
-/* write an iTXt chunk */
-void /* PRIVATE */
-png_write_iTXt(png_structp png_ptr, int compression, png_charp key,
- png_charp lang, png_charp lang_key, png_charp text)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_iTXt;
-#endif
- png_size_t lang_len, key_len, lang_key_len, text_len;
- png_charp new_lang, new_key;
- png_byte cbuf[2];
- compression_state comp;
-
- png_debug(1, "in png_write_iTXt\n");
-
- comp.num_output_ptr = 0;
- comp.max_output_ptr = 0;
- comp.output_ptr = NULL;
- comp.input = NULL;
-
- if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0)
- {
- png_warning(png_ptr, "Empty keyword in iTXt chunk");
- return;
- }
- if (lang == NULL || (lang_len = png_check_keyword(png_ptr, lang, &new_lang))==0)
- {
- png_warning(png_ptr, "Empty language field in iTXt chunk");
- new_lang = NULL;
- lang_len = 0;
- }
-
- if (lang_key == NULL)
- lang_key_len = 0;
- else
- lang_key_len = png_strlen(lang_key);
-
- if (text == NULL)
- text_len = 0;
- else
- text_len = png_strlen(text);
-
- /* compute the compressed data; do it now for the length */
- text_len = png_text_compress(png_ptr, text, text_len, compression-2,
- &comp);
-
-
- /* make sure we include the compression flag, the compression byte,
- * and the NULs after the key, lang, and lang_key parts */
-
- png_write_chunk_start(png_ptr, png_iTXt,
- (png_uint_32)(
- 5 /* comp byte, comp flag, terminators for key, lang and lang_key */
- + key_len
- + lang_len
- + lang_key_len
- + text_len));
-
- /*
- * We leave it to the application to meet PNG-1.0 requirements on the
- * contents of the text. PNG-1.0 through PNG-1.2 discourage the use of
- * any non-Latin-1 characters except for NEWLINE. ISO PNG will forbid them.
- * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
- */
- png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1);
-
- /* set the compression flag */
- if (compression == PNG_ITXT_COMPRESSION_NONE || \
- compression == PNG_TEXT_COMPRESSION_NONE)
- cbuf[0] = 0;
- else /* compression == PNG_ITXT_COMPRESSION_zTXt */
- cbuf[0] = 1;
- /* set the compression method */
- cbuf[1] = 0;
- png_write_chunk_data(png_ptr, cbuf, 2);
-
- cbuf[0] = 0;
- png_write_chunk_data(png_ptr, (new_lang ? (png_bytep)new_lang : cbuf), lang_len + 1);
- png_write_chunk_data(png_ptr, (lang_key ? (png_bytep)lang_key : cbuf), lang_key_len + 1);
- png_write_compressed_data_out(png_ptr, &comp);
-
- png_write_chunk_end(png_ptr);
- png_free(png_ptr, new_key);
- png_free(png_ptr, new_lang);
-}
-#endif
-
-#if defined(PNG_WRITE_oFFs_SUPPORTED)
-/* write the oFFs chunk */
-void /* PRIVATE */
-png_write_oFFs(png_structp png_ptr, png_int_32 x_offset, png_int_32 y_offset,
- int unit_type)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_oFFs;
-#endif
- png_byte buf[9];
-
- png_debug(1, "in png_write_oFFs\n");
- if (unit_type >= PNG_OFFSET_LAST)
- png_warning(png_ptr, "Unrecognized unit type for oFFs chunk");
-
- png_save_int_32(buf, x_offset);
- png_save_int_32(buf + 4, y_offset);
- buf[8] = (png_byte)unit_type;
-
- png_write_chunk(png_ptr, png_oFFs, buf, (png_size_t)9);
-}
-#endif
-#if defined(PNG_WRITE_pCAL_SUPPORTED)
-/* write the pCAL chunk (described in the PNG extensions document) */
-void /* PRIVATE */
-png_write_pCAL(png_structp png_ptr, png_charp purpose, png_int_32 X0,
- png_int_32 X1, int type, int nparams, png_charp units, png_charpp params)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_pCAL;
-#endif
- png_size_t purpose_len, units_len, total_len;
- png_uint_32p params_len;
- png_byte buf[10];
- png_charp new_purpose;
- int i;
-
- png_debug1(1, "in png_write_pCAL (%d parameters)\n", nparams);
- if (type >= PNG_EQUATION_LAST)
- png_warning(png_ptr, "Unrecognized equation type for pCAL chunk");
-
- purpose_len = png_check_keyword(png_ptr, purpose, &new_purpose) + 1;
- png_debug1(3, "pCAL purpose length = %d\n", (int)purpose_len);
- units_len = png_strlen(units) + (nparams == 0 ? 0 : 1);
- png_debug1(3, "pCAL units length = %d\n", (int)units_len);
- total_len = purpose_len + units_len + 10;
-
- params_len = (png_uint_32p)png_malloc(png_ptr, (png_uint_32)(nparams
- *png_sizeof(png_uint_32)));
-
- /* Find the length of each parameter, making sure we don't count the
- null terminator for the last parameter. */
- for (i = 0; i < nparams; i++)
- {
- params_len[i] = png_strlen(params[i]) + (i == nparams - 1 ? 0 : 1);
- png_debug2(3, "pCAL parameter %d length = %lu\n", i, params_len[i]);
- total_len += (png_size_t)params_len[i];
- }
-
- png_debug1(3, "pCAL total length = %d\n", (int)total_len);
- png_write_chunk_start(png_ptr, png_pCAL, (png_uint_32)total_len);
- png_write_chunk_data(png_ptr, (png_bytep)new_purpose, purpose_len);
- png_save_int_32(buf, X0);
- png_save_int_32(buf + 4, X1);
- buf[8] = (png_byte)type;
- buf[9] = (png_byte)nparams;
- png_write_chunk_data(png_ptr, buf, (png_size_t)10);
- png_write_chunk_data(png_ptr, (png_bytep)units, (png_size_t)units_len);
-
- png_free(png_ptr, new_purpose);
-
- for (i = 0; i < nparams; i++)
- {
- png_write_chunk_data(png_ptr, (png_bytep)params[i],
- (png_size_t)params_len[i]);
- }
-
- png_free(png_ptr, params_len);
- png_write_chunk_end(png_ptr);
-}
-#endif
-
-#if defined(PNG_WRITE_sCAL_SUPPORTED)
-/* write the sCAL chunk */
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
-void /* PRIVATE */
-png_write_sCAL(png_structp png_ptr, int unit, double width, double height)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_sCAL;
-#endif
- char buf[64];
- png_size_t total_len;
-
- png_debug(1, "in png_write_sCAL\n");
-
- buf[0] = (char)unit;
-#if defined(_WIN32_WCE)
-/* sprintf() function is not supported on WindowsCE */
- {
- wchar_t wc_buf[32];
- size_t wc_len;
- swprintf(wc_buf, TEXT("%12.12e"), width);
- wc_len = wcslen(wc_buf);
- WideCharToMultiByte(CP_ACP, 0, wc_buf, -1, buf + 1, wc_len, NULL, NULL);
- total_len = wc_len + 2;
- swprintf(wc_buf, TEXT("%12.12e"), height);
- wc_len = wcslen(wc_buf);
- WideCharToMultiByte(CP_ACP, 0, wc_buf, -1, buf + total_len, wc_len,
- NULL, NULL);
- total_len += wc_len;
- }
-#else
- png_snprintf(buf + 1, 63, "%12.12e", width);
- total_len = 1 + png_strlen(buf + 1) + 1;
- png_snprintf(buf + total_len, 64-total_len, "%12.12e", height);
- total_len += png_strlen(buf + total_len);
-#endif
-
- png_debug1(3, "sCAL total length = %u\n", (unsigned int)total_len);
- png_write_chunk(png_ptr, png_sCAL, (png_bytep)buf, total_len);
-}
-#else
-#ifdef PNG_FIXED_POINT_SUPPORTED
-void /* PRIVATE */
-png_write_sCAL_s(png_structp png_ptr, int unit, png_charp width,
- png_charp height)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_sCAL;
-#endif
- png_byte buf[64];
- png_size_t wlen, hlen, total_len;
-
- png_debug(1, "in png_write_sCAL_s\n");
-
- wlen = png_strlen(width);
- hlen = png_strlen(height);
- total_len = wlen + hlen + 2;
- if (total_len > 64)
- {
- png_warning(png_ptr, "Can't write sCAL (buffer too small)");
- return;
- }
-
- buf[0] = (png_byte)unit;
- png_memcpy(buf + 1, width, wlen + 1); /* append the '\0' here */
- png_memcpy(buf + wlen + 2, height, hlen); /* do NOT append the '\0' here */
-
- png_debug1(3, "sCAL total length = %u\n", (unsigned int)total_len);
- png_write_chunk(png_ptr, png_sCAL, buf, total_len);
-}
-#endif
-#endif
-#endif
-
-#if defined(PNG_WRITE_pHYs_SUPPORTED)
-/* write the pHYs chunk */
-void /* PRIVATE */
-png_write_pHYs(png_structp png_ptr, png_uint_32 x_pixels_per_unit,
- png_uint_32 y_pixels_per_unit,
- int unit_type)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_pHYs;
-#endif
- png_byte buf[9];
-
- png_debug(1, "in png_write_pHYs\n");
- if (unit_type >= PNG_RESOLUTION_LAST)
- png_warning(png_ptr, "Unrecognized unit type for pHYs chunk");
-
- png_save_uint_32(buf, x_pixels_per_unit);
- png_save_uint_32(buf + 4, y_pixels_per_unit);
- buf[8] = (png_byte)unit_type;
-
- png_write_chunk(png_ptr, png_pHYs, buf, (png_size_t)9);
-}
-#endif
-
-#if defined(PNG_WRITE_tIME_SUPPORTED)
-/* Write the tIME chunk. Use either png_convert_from_struct_tm()
- * or png_convert_from_time_t(), or fill in the structure yourself.
- */
-void /* PRIVATE */
-png_write_tIME(png_structp png_ptr, png_timep mod_time)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- PNG_tIME;
-#endif
- png_byte buf[7];
-
- png_debug(1, "in png_write_tIME\n");
- if (mod_time->month > 12 || mod_time->month < 1 ||
- mod_time->day > 31 || mod_time->day < 1 ||
- mod_time->hour > 23 || mod_time->second > 60)
- {
- png_warning(png_ptr, "Invalid time specified for tIME chunk");
- return;
- }
-
- png_save_uint_16(buf, mod_time->year);
- buf[2] = mod_time->month;
- buf[3] = mod_time->day;
- buf[4] = mod_time->hour;
- buf[5] = mod_time->minute;
- buf[6] = mod_time->second;
-
- png_write_chunk(png_ptr, png_tIME, buf, (png_size_t)7);
-}
-#endif
-
-/* initializes the row writing capability of libpng */
-void /* PRIVATE */
-png_write_start_row(png_structp png_ptr)
-{
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-#ifdef PNG_USE_LOCAL_ARRAYS
- /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
- /* start of interlace block */
- int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
- /* offset to next interlace block */
- int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
- /* start of interlace block in the y direction */
- int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
- /* offset to next interlace block in the y direction */
- int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-#endif
-
- png_size_t buf_size;
-
- png_debug(1, "in png_write_start_row\n");
- buf_size = (png_size_t)(PNG_ROWBYTES(
- png_ptr->usr_channels*png_ptr->usr_bit_depth,png_ptr->width)+1);
-
- /* set up row buffer */
- png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
- png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE;
-
-#ifndef PNG_NO_WRITE_FILTERING
- /* set up filtering buffer, if using this filter */
- if (png_ptr->do_filter & PNG_FILTER_SUB)
- {
- png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
- }
-
- /* We only need to keep the previous row if we are using one of these. */
- if (png_ptr->do_filter & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH))
- {
- /* set up previous row buffer */
- png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
- png_memset(png_ptr->prev_row, 0, buf_size);
-
- if (png_ptr->do_filter & PNG_FILTER_UP)
- {
- png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
- }
-
- if (png_ptr->do_filter & PNG_FILTER_AVG)
- {
- png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
- }
-
- if (png_ptr->do_filter & PNG_FILTER_PAETH)
- {
- png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
- (png_ptr->rowbytes + 1));
- png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
- }
-#endif /* PNG_NO_WRITE_FILTERING */
- }
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
- /* if interlaced, we need to set up width and height of pass */
- if (png_ptr->interlaced)
- {
- if (!(png_ptr->transformations & PNG_INTERLACE))
- {
- png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
- png_pass_ystart[0]) / png_pass_yinc[0];
- png_ptr->usr_width = (png_ptr->width + png_pass_inc[0] - 1 -
- png_pass_start[0]) / png_pass_inc[0];
- }
- else
- {
- png_ptr->num_rows = png_ptr->height;
- png_ptr->usr_width = png_ptr->width;
- }
- }
- else
-#endif
- {
- png_ptr->num_rows = png_ptr->height;
- png_ptr->usr_width = png_ptr->width;
- }
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- png_ptr->zstream.next_out = png_ptr->zbuf;
-}
-
-/* Internal use only. Called when finished processing a row of data. */
-void /* PRIVATE */
-png_write_finish_row(png_structp png_ptr)
-{
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-#ifdef PNG_USE_LOCAL_ARRAYS
- /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
- /* start of interlace block */
- int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
- /* offset to next interlace block */
- int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
- /* start of interlace block in the y direction */
- int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
- /* offset to next interlace block in the y direction */
- int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-#endif
-
- int ret;
-
- png_debug(1, "in png_write_finish_row\n");
- /* next row */
- png_ptr->row_number++;
-
- /* see if we are done */
- if (png_ptr->row_number < png_ptr->num_rows)
- return;
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
- /* if interlaced, go to next pass */
- if (png_ptr->interlaced)
- {
- png_ptr->row_number = 0;
- if (png_ptr->transformations & PNG_INTERLACE)
- {
- png_ptr->pass++;
- }
- else
- {
- /* loop until we find a non-zero width or height pass */
- do
- {
- png_ptr->pass++;
- if (png_ptr->pass >= 7)
- break;
- png_ptr->usr_width = (png_ptr->width +
- png_pass_inc[png_ptr->pass] - 1 -
- png_pass_start[png_ptr->pass]) /
- png_pass_inc[png_ptr->pass];
- png_ptr->num_rows = (png_ptr->height +
- png_pass_yinc[png_ptr->pass] - 1 -
- png_pass_ystart[png_ptr->pass]) /
- png_pass_yinc[png_ptr->pass];
- if (png_ptr->transformations & PNG_INTERLACE)
- break;
- } while (png_ptr->usr_width == 0 || png_ptr->num_rows == 0);
-
- }
-
- /* reset the row above the image for the next pass */
- if (png_ptr->pass < 7)
- {
- if (png_ptr->prev_row != NULL)
- png_memset(png_ptr->prev_row, 0,
- (png_size_t)(PNG_ROWBYTES(png_ptr->usr_channels*
- png_ptr->usr_bit_depth,png_ptr->width))+1);
- return;
- }
- }
-#endif
-
- /* if we get here, we've just written the last row, so we need
- to flush the compressor */
- do
- {
- /* tell the compressor we are done */
- ret = deflate(&png_ptr->zstream, Z_FINISH);
- /* check for an error */
- if (ret == Z_OK)
- {
- /* check to see if we need more room */
- if (!(png_ptr->zstream.avail_out))
- {
- png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size);
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- }
- }
- else if (ret != Z_STREAM_END)
- {
- if (png_ptr->zstream.msg != NULL)
- png_error(png_ptr, png_ptr->zstream.msg);
- else
- png_error(png_ptr, "zlib error");
- }
- } while (ret != Z_STREAM_END);
-
- /* write any extra space */
- if (png_ptr->zstream.avail_out < png_ptr->zbuf_size)
- {
- png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size -
- png_ptr->zstream.avail_out);
- }
-
- deflateReset(&png_ptr->zstream);
- png_ptr->zstream.data_type = Z_BINARY;
-}
-
-#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
-/* Pick out the correct pixels for the interlace pass.
- * The basic idea here is to go through the row with a source
- * pointer and a destination pointer (sp and dp), and copy the
- * correct pixels for the pass. As the row gets compacted,
- * sp will always be >= dp, so we should never overwrite anything.
- * See the default: case for the easiest code to understand.
- */
-void /* PRIVATE */
-png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
-{
-#ifdef PNG_USE_LOCAL_ARRAYS
- /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
- /* start of interlace block */
- int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
- /* offset to next interlace block */
- int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-#endif
-
- png_debug(1, "in png_do_write_interlace\n");
- /* we don't have to do anything on the last pass (6) */
-#if defined(PNG_USELESS_TESTS_SUPPORTED)
- if (row != NULL && row_info != NULL && pass < 6)
-#else
- if (pass < 6)
-#endif
- {
- /* each pixel depth is handled separately */
- switch (row_info->pixel_depth)
- {
- case 1:
- {
- png_bytep sp;
- png_bytep dp;
- int shift;
- int d;
- int value;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- dp = row;
- d = 0;
- shift = 7;
- for (i = png_pass_start[pass]; i < row_width;
- i += png_pass_inc[pass])
- {
- sp = row + (png_size_t)(i >> 3);
- value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01;
- d |= (value << shift);
-
- if (shift == 0)
- {
- shift = 7;
- *dp++ = (png_byte)d;
- d = 0;
- }
- else
- shift--;
-
- }
- if (shift != 7)
- *dp = (png_byte)d;
- break;
- }
- case 2:
- {
- png_bytep sp;
- png_bytep dp;
- int shift;
- int d;
- int value;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- dp = row;
- shift = 6;
- d = 0;
- for (i = png_pass_start[pass]; i < row_width;
- i += png_pass_inc[pass])
- {
- sp = row + (png_size_t)(i >> 2);
- value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03;
- d |= (value << shift);
-
- if (shift == 0)
- {
- shift = 6;
- *dp++ = (png_byte)d;
- d = 0;
- }
- else
- shift -= 2;
- }
- if (shift != 6)
- *dp = (png_byte)d;
- break;
- }
- case 4:
- {
- png_bytep sp;
- png_bytep dp;
- int shift;
- int d;
- int value;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
-
- dp = row;
- shift = 4;
- d = 0;
- for (i = png_pass_start[pass]; i < row_width;
- i += png_pass_inc[pass])
- {
- sp = row + (png_size_t)(i >> 1);
- value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f;
- d |= (value << shift);
-
- if (shift == 0)
- {
- shift = 4;
- *dp++ = (png_byte)d;
- d = 0;
- }
- else
- shift -= 4;
- }
- if (shift != 4)
- *dp = (png_byte)d;
- break;
- }
- default:
- {
- png_bytep sp;
- png_bytep dp;
- png_uint_32 i;
- png_uint_32 row_width = row_info->width;
- png_size_t pixel_bytes;
-
- /* start at the beginning */
- dp = row;
- /* find out how many bytes each pixel takes up */
- pixel_bytes = (row_info->pixel_depth >> 3);
- /* loop through the row, only looking at the pixels that
- matter */
- for (i = png_pass_start[pass]; i < row_width;
- i += png_pass_inc[pass])
- {
- /* find out where the original pixel is */
- sp = row + (png_size_t)i * pixel_bytes;
- /* move the pixel */
- if (dp != sp)
- png_memcpy(dp, sp, pixel_bytes);
- /* next pixel */
- dp += pixel_bytes;
- }
- break;
- }
- }
- /* set new row width */
- row_info->width = (row_info->width +
- png_pass_inc[pass] - 1 -
- png_pass_start[pass]) /
- png_pass_inc[pass];
- row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
- row_info->width);
- }
-}
-#endif
-
-/* This filters the row, chooses which filter to use, if it has not already
- * been specified by the application, and then writes the row out with the
- * chosen filter.
- */
-#define PNG_MAXSUM (((png_uint_32)(-1)) >> 1)
-#define PNG_HISHIFT 10
-#define PNG_LOMASK ((png_uint_32)0xffffL)
-#define PNG_HIMASK ((png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT))
-void /* PRIVATE */
-png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
-{
- png_bytep best_row;
-#ifndef PNG_NO_WRITE_FILTER
- png_bytep prev_row, row_buf;
- png_uint_32 mins, bpp;
- png_byte filter_to_do = png_ptr->do_filter;
- png_uint_32 row_bytes = row_info->rowbytes;
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- int num_p_filters = (int)png_ptr->num_prev_filters;
-#endif
-
- png_debug(1, "in png_write_find_filter\n");
- /* find out how many bytes offset each pixel is */
- bpp = (row_info->pixel_depth + 7) >> 3;
-
- prev_row = png_ptr->prev_row;
-#endif
- best_row = png_ptr->row_buf;
-#ifndef PNG_NO_WRITE_FILTER
- row_buf = best_row;
- mins = PNG_MAXSUM;
-
- /* The prediction method we use is to find which method provides the
- * smallest value when summing the absolute values of the distances
- * from zero, using anything >= 128 as negative numbers. This is known
- * as the "minimum sum of absolute differences" heuristic. Other
- * heuristics are the "weighted minimum sum of absolute differences"
- * (experimental and can in theory improve compression), and the "zlib
- * predictive" method (not implemented yet), which does test compressions
- * of lines using different filter methods, and then chooses the
- * (series of) filter(s) that give minimum compressed data size (VERY
- * computationally expensive).
- *
- * GRR 980525: consider also
- * (1) minimum sum of absolute differences from running average (i.e.,
- * keep running sum of non-absolute differences & count of bytes)
- * [track dispersion, too? restart average if dispersion too large?]
- * (1b) minimum sum of absolute differences from sliding average, probably
- * with window size <= deflate window (usually 32K)
- * (2) minimum sum of squared differences from zero or running average
- * (i.e., ~ root-mean-square approach)
- */
-
-
- /* We don't need to test the 'no filter' case if this is the only filter
- * that has been chosen, as it doesn't actually do anything to the data.
- */
- if ((filter_to_do & PNG_FILTER_NONE) &&
- filter_to_do != PNG_FILTER_NONE)
- {
- png_bytep rp;
- png_uint_32 sum = 0;
- png_uint_32 i;
- int v;
-
- for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
- {
- v = *rp;
- sum += (v < 128) ? v : 256 - v;
- }
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- png_uint_32 sumhi, sumlo;
- int j;
- sumlo = sum & PNG_LOMASK;
- sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; /* Gives us some footroom */
-
- /* Reduce the sum if we match any of the previous rows */
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
- {
- sumlo = (sumlo * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- sumhi = (sumhi * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- /* Factor in the cost of this filter (this is here for completeness,
- * but it makes no sense to have a "cost" for the NONE filter, as
- * it has the minimum possible computational cost - none).
- */
- sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
- PNG_COST_SHIFT;
- sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
- PNG_COST_SHIFT;
-
- if (sumhi > PNG_HIMASK)
- sum = PNG_MAXSUM;
- else
- sum = (sumhi << PNG_HISHIFT) + sumlo;
- }
-#endif
- mins = sum;
- }
-
- /* sub filter */
- if (filter_to_do == PNG_FILTER_SUB)
- /* it's the only filter so no testing is needed */
- {
- png_bytep rp, lp, dp;
- png_uint_32 i;
- for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp;
- i++, rp++, dp++)
- {
- *dp = *rp;
- }
- for (lp = row_buf + 1; i < row_bytes;
- i++, rp++, lp++, dp++)
- {
- *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
- }
- best_row = png_ptr->sub_row;
- }
-
- else if (filter_to_do & PNG_FILTER_SUB)
- {
- png_bytep rp, dp, lp;
- png_uint_32 sum = 0, lmins = mins;
- png_uint_32 i;
- int v;
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- /* We temporarily increase the "minimum sum" by the factor we
- * would reduce the sum of this filter, so that we can do the
- * early exit comparison without scaling the sum each time.
- */
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 lmhi, lmlo;
- lmlo = lmins & PNG_LOMASK;
- lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
- {
- lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
- PNG_COST_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
- PNG_COST_SHIFT;
-
- if (lmhi > PNG_HIMASK)
- lmins = PNG_MAXSUM;
- else
- lmins = (lmhi << PNG_HISHIFT) + lmlo;
- }
-#endif
-
- for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp;
- i++, rp++, dp++)
- {
- v = *dp = *rp;
-
- sum += (v < 128) ? v : 256 - v;
- }
- for (lp = row_buf + 1; i < row_bytes;
- i++, rp++, lp++, dp++)
- {
- v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
-
- sum += (v < 128) ? v : 256 - v;
-
- if (sum > lmins) /* We are already worse, don't continue. */
- break;
- }
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 sumhi, sumlo;
- sumlo = sum & PNG_LOMASK;
- sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
- {
- sumlo = (sumlo * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- sumhi = (sumhi * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- sumlo = (sumlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
- PNG_COST_SHIFT;
- sumhi = (sumhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
- PNG_COST_SHIFT;
-
- if (sumhi > PNG_HIMASK)
- sum = PNG_MAXSUM;
- else
- sum = (sumhi << PNG_HISHIFT) + sumlo;
- }
-#endif
-
- if (sum < mins)
- {
- mins = sum;
- best_row = png_ptr->sub_row;
- }
- }
-
- /* up filter */
- if (filter_to_do == PNG_FILTER_UP)
- {
- png_bytep rp, dp, pp;
- png_uint_32 i;
-
- for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1,
- pp = prev_row + 1; i < row_bytes;
- i++, rp++, pp++, dp++)
- {
- *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
- }
- best_row = png_ptr->up_row;
- }
-
- else if (filter_to_do & PNG_FILTER_UP)
- {
- png_bytep rp, dp, pp;
- png_uint_32 sum = 0, lmins = mins;
- png_uint_32 i;
- int v;
-
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 lmhi, lmlo;
- lmlo = lmins & PNG_LOMASK;
- lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
- {
- lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
- PNG_COST_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
- PNG_COST_SHIFT;
-
- if (lmhi > PNG_HIMASK)
- lmins = PNG_MAXSUM;
- else
- lmins = (lmhi << PNG_HISHIFT) + lmlo;
- }
-#endif
-
- for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1,
- pp = prev_row + 1; i < row_bytes; i++)
- {
- v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-
- sum += (v < 128) ? v : 256 - v;
-
- if (sum > lmins) /* We are already worse, don't continue. */
- break;
- }
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 sumhi, sumlo;
- sumlo = sum & PNG_LOMASK;
- sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
- {
- sumlo = (sumlo * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- sumhi = (sumhi * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
- PNG_COST_SHIFT;
- sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
- PNG_COST_SHIFT;
-
- if (sumhi > PNG_HIMASK)
- sum = PNG_MAXSUM;
- else
- sum = (sumhi << PNG_HISHIFT) + sumlo;
- }
-#endif
-
- if (sum < mins)
- {
- mins = sum;
- best_row = png_ptr->up_row;
- }
- }
-
- /* avg filter */
- if (filter_to_do == PNG_FILTER_AVG)
- {
- png_bytep rp, dp, pp, lp;
- png_uint_32 i;
- for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1,
- pp = prev_row + 1; i < bpp; i++)
- {
- *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
- }
- for (lp = row_buf + 1; i < row_bytes; i++)
- {
- *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
- & 0xff);
- }
- best_row = png_ptr->avg_row;
- }
-
- else if (filter_to_do & PNG_FILTER_AVG)
- {
- png_bytep rp, dp, pp, lp;
- png_uint_32 sum = 0, lmins = mins;
- png_uint_32 i;
- int v;
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 lmhi, lmlo;
- lmlo = lmins & PNG_LOMASK;
- lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_AVG)
- {
- lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
- PNG_COST_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
- PNG_COST_SHIFT;
-
- if (lmhi > PNG_HIMASK)
- lmins = PNG_MAXSUM;
- else
- lmins = (lmhi << PNG_HISHIFT) + lmlo;
- }
-#endif
-
- for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1,
- pp = prev_row + 1; i < bpp; i++)
- {
- v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
-
- sum += (v < 128) ? v : 256 - v;
- }
- for (lp = row_buf + 1; i < row_bytes; i++)
- {
- v = *dp++ =
- (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff);
-
- sum += (v < 128) ? v : 256 - v;
-
- if (sum > lmins) /* We are already worse, don't continue. */
- break;
- }
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 sumhi, sumlo;
- sumlo = sum & PNG_LOMASK;
- sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
- {
- sumlo = (sumlo * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- sumhi = (sumhi * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
- PNG_COST_SHIFT;
- sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
- PNG_COST_SHIFT;
-
- if (sumhi > PNG_HIMASK)
- sum = PNG_MAXSUM;
- else
- sum = (sumhi << PNG_HISHIFT) + sumlo;
- }
-#endif
-
- if (sum < mins)
- {
- mins = sum;
- best_row = png_ptr->avg_row;
- }
- }
-
- /* Paeth filter */
- if (filter_to_do == PNG_FILTER_PAETH)
- {
- png_bytep rp, dp, pp, cp, lp;
- png_uint_32 i;
- for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1,
- pp = prev_row + 1; i < bpp; i++)
- {
- *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
- }
-
- for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++)
- {
- int a, b, c, pa, pb, pc, p;
-
- b = *pp++;
- c = *cp++;
- a = *lp++;
-
- p = b - c;
- pc = a - c;
-
-#ifdef PNG_USE_ABS
- pa = abs(p);
- pb = abs(pc);
- pc = abs(p + pc);
-#else
- pa = p < 0 ? -p : p;
- pb = pc < 0 ? -pc : pc;
- pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#endif
-
- p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
-
- *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
- }
- best_row = png_ptr->paeth_row;
- }
-
- else if (filter_to_do & PNG_FILTER_PAETH)
- {
- png_bytep rp, dp, pp, cp, lp;
- png_uint_32 sum = 0, lmins = mins;
- png_uint_32 i;
- int v;
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 lmhi, lmlo;
- lmlo = lmins & PNG_LOMASK;
- lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
- {
- lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
- PNG_COST_SHIFT;
- lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
- PNG_COST_SHIFT;
-
- if (lmhi > PNG_HIMASK)
- lmins = PNG_MAXSUM;
- else
- lmins = (lmhi << PNG_HISHIFT) + lmlo;
- }
-#endif
-
- for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1,
- pp = prev_row + 1; i < bpp; i++)
- {
- v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-
- sum += (v < 128) ? v : 256 - v;
- }
-
- for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++)
- {
- int a, b, c, pa, pb, pc, p;
-
- b = *pp++;
- c = *cp++;
- a = *lp++;
-
-#ifndef PNG_SLOW_PAETH
- p = b - c;
- pc = a - c;
-#ifdef PNG_USE_ABS
- pa = abs(p);
- pb = abs(pc);
- pc = abs(p + pc);
-#else
- pa = p < 0 ? -p : p;
- pb = pc < 0 ? -pc : pc;
- pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#endif
- p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
-#else /* PNG_SLOW_PAETH */
- p = a + b - c;
- pa = abs(p - a);
- pb = abs(p - b);
- pc = abs(p - c);
- if (pa <= pb && pa <= pc)
- p = a;
- else if (pb <= pc)
- p = b;
- else
- p = c;
-#endif /* PNG_SLOW_PAETH */
-
- v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
-
- sum += (v < 128) ? v : 256 - v;
-
- if (sum > lmins) /* We are already worse, don't continue. */
- break;
- }
-
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
- {
- int j;
- png_uint_32 sumhi, sumlo;
- sumlo = sum & PNG_LOMASK;
- sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
- for (j = 0; j < num_p_filters; j++)
- {
- if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
- {
- sumlo = (sumlo * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- sumhi = (sumhi * png_ptr->filter_weights[j]) >>
- PNG_WEIGHT_SHIFT;
- }
- }
-
- sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
- PNG_COST_SHIFT;
- sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
- PNG_COST_SHIFT;
-
- if (sumhi > PNG_HIMASK)
- sum = PNG_MAXSUM;
- else
- sum = (sumhi << PNG_HISHIFT) + sumlo;
- }
-#endif
-
- if (sum < mins)
- {
- best_row = png_ptr->paeth_row;
- }
- }
-#endif /* PNG_NO_WRITE_FILTER */
- /* Do the actual writing of the filtered row data from the chosen filter. */
-
- png_write_filtered_row(png_ptr, best_row);
-
-#ifndef PNG_NO_WRITE_FILTER
-#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
- /* Save the type of filter we picked this time for future calculations */
- if (png_ptr->num_prev_filters > 0)
- {
- int j;
- for (j = 1; j < num_p_filters; j++)
- {
- png_ptr->prev_filters[j] = png_ptr->prev_filters[j - 1];
- }
- png_ptr->prev_filters[j] = best_row[0];
- }
-#endif
-#endif /* PNG_NO_WRITE_FILTER */
-}
-
-
-/* Do the actual writing of a previously filtered row. */
-void /* PRIVATE */
-png_write_filtered_row(png_structp png_ptr, png_bytep filtered_row)
-{
- png_debug(1, "in png_write_filtered_row\n");
- png_debug1(2, "filter = %d\n", filtered_row[0]);
- /* set up the zlib input buffer */
-
- png_ptr->zstream.next_in = filtered_row;
- png_ptr->zstream.avail_in = (uInt)png_ptr->row_info.rowbytes + 1;
- /* repeat until we have compressed all the data */
- do
- {
- int ret; /* return of zlib */
-
- /* compress the data */
- ret = deflate(&png_ptr->zstream, Z_NO_FLUSH);
- /* check for compression errors */
- if (ret != Z_OK)
- {
- if (png_ptr->zstream.msg != NULL)
- png_error(png_ptr, png_ptr->zstream.msg);
- else
- png_error(png_ptr, "zlib error");
- }
-
- /* see if it is time to write another IDAT */
- if (!(png_ptr->zstream.avail_out))
- {
- /* write the IDAT and reset the zlib output buffer */
- png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size);
- png_ptr->zstream.next_out = png_ptr->zbuf;
- png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
- }
- /* repeat until all data has been compressed */
- } while (png_ptr->zstream.avail_in);
-
- /* swap the current and previous rows */
- if (png_ptr->prev_row != NULL)
- {
- png_bytep tptr;
-
- tptr = png_ptr->prev_row;
- png_ptr->prev_row = png_ptr->row_buf;
- png_ptr->row_buf = tptr;
- }
-
- /* finish row - updates counters and flushes zlib if last row */
- png_write_finish_row(png_ptr);
-
-#if defined(PNG_WRITE_FLUSH_SUPPORTED)
- png_ptr->flush_rows++;
-
- if (png_ptr->flush_dist > 0 &&
- png_ptr->flush_rows >= png_ptr->flush_dist)
- {
- png_write_flush(png_ptr);
- }
-#endif
-}
-#endif /* PNG_WRITE_SUPPORTED */
diff --git a/Build/source/libs/libpng/withenable.ac b/Build/source/libs/libpng/withenable.ac
deleted file mode 100644
index 3fe683ef22c..00000000000
--- a/Build/source/libs/libpng/withenable.ac
+++ /dev/null
@@ -1,11 +0,0 @@
-# beginning of libpng/withenable.ac
-# public domain.
-AC_ARG_WITH([system-pnglib],
-[ --with-system-pnglib use installed pnglib library])
-
-AC_ARG_WITH([pnglib_libdir],
-[ --with-pnglib-libdir=DIR specify directory where the png library (libpng.a) resides.])
-
-AC_ARG_WITH([pnglib_include],
-[ --with-pnglib-include=DIR specify directory with the pnglib header files.])
-# end of libpng/withenable.ac
diff --git a/Build/source/libs/libttf/arch/amigaos/Makefile.gcc b/Build/source/libs/libttf/arch/amigaos/Makefile.gcc
deleted file mode 100644
index ef023723791..00000000000
--- a/Build/source/libs/libttf/arch/amigaos/Makefile.gcc
+++ /dev/null
@@ -1,69 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library and test programs for amiga using ADE Enviroment.
-#
-# You will need GNU make.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -f arch/amigaos/Makefile.gcc
-
-ARCH = arch/amigaos
-FT_MAKEFILE = $(ARCH)/Makefile.gcc
-
-AR = ar
-RM = rm
-
-CC = gcc
-
-CFLAGS = -Wall -pedantic -ansi -O2 -g -noixemul -I$(ARCH) -I. -Iextend
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxgdef.c \
- extend/ftxopen.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttextend.c ttfile.c ttgload.c ttinterp.c ttload.c \
- ttmemory.c ttmutex.c ttobjs.c ttraster.c
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-.PHONY: all debug clean distclean
-
-
-all:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S libttf.a
-
-debug:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M libttf.a
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-
-libttf.a: $($(LIB_FILES))
- $(AR) src $@ $^
-
-clean:
- $(RM) $($(LIB_FILES))
-
-distclean: clean
- $(RM) dep.end libttf.a
-
-depend: $(SRC_S) $(SRC_M) $(SRC_X)
- $(CC) -E -M $^ > dep.end
-
-ifeq (dep.end,$(wildcard dep.end))
- include dep.end
-endif
-
-# end of Makefile.gcc
diff --git a/Build/source/libs/libttf/arch/amigaos/freetype.c b/Build/source/libs/libttf/arch/amigaos/freetype.c
deleted file mode 100644
index 723c8f463ce..00000000000
--- a/Build/source/libs/libttf/arch/amigaos/freetype.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* Single object library component for AmigaOS */
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttfile.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttmemory.c"
-#include "ttmutex.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/amigaos/ft_conf.h b/Build/source/libs/libttf/arch/amigaos/ft_conf.h
deleted file mode 100644
index 6aa4b3f73ea..00000000000
--- a/Build/source/libs/libttf/arch/amigaos/ft_conf.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for AmigaOS using ADE enviroment */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-/* Define to empty if the keyword does not work. */
-
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-
-/* #undef HAVE_MMAP */
-
-/* Define if you have the <stdlib.h> header file. */
-
-#define HAVE_STDLIB_H
-
-/* Define if the X Window System is missing or not being used. */
-
-#define X_DISPLAY_MISSING
-
-/* The number of bytes in a int. */
-
-#define SIZEOF_INT 4
-
-/* The number of bytes in a long. */
-
-#define SIZEOF_LONG 4
-
-/* Define if you have the getpagesize function. */
-
-#define HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-
-#define HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. */
-
-#define HAVE_FCNTL_H
-
-/* Define if you have the <unistd.h> header file. */
-
-#define HAVE_UNISTD_H
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/ansi/freetype.c b/Build/source/libs/libttf/arch/ansi/freetype.c
deleted file mode 100644
index 820687a1533..00000000000
--- a/Build/source/libs/libttf/arch/ansi/freetype.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* Single file library component for the ANSI target */
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-/* first include common core components */
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* then system-specific (or ANSI) components */
-
-#include "ttfile.c"
-#include "ttmemory.c"
-#include "ttmutex.c"
-
-/* the extensions are compiled separately, but we need to */
-/* include the file ttextend.c if we want to support them */
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/ansi/ft_conf.h b/Build/source/libs/libttf/arch/ansi/ft_conf.h
deleted file mode 100644
index 352e6465cbf..00000000000
--- a/Build/source/libs/libttf/arch/ansi/ft_conf.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for the ANSI Build */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-/* Define to empty if the keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. Unix-specific */
-#undef HAVE_FCNTL_H
-
-/* command.com can't pipe stderr into a file; any message would be */
-/* written into the graphics screen. */
-#define HAVE_PRINT_FUNCTION 1
-
-#define Print( format, ap ) vfprintf( stdout, (format), (ap) )
-
-
-/* The number of bytes in a int. We use the ANSI header file limits.h */
-/* for determining it since there is no easy way to guess. */
-/* */
-#include <limits.h>
-#if UINT_MAX == 0xFFFF
-#define SIZEOF_INT 2
-#elif UINT_MAX == 0xFFFFFFFF
-#define SIZEOF_INT 4
-#else
-#error "Unsupported number of bytes in `int' type!"
-#endif
-
-/* We now try to guess the size of longs in the same way */
-/* */
-#if ULONG_MAX == 0xFFFFFFFF
-#define SIZEOF_LONG 4
-#elif ULONG_MAX == 0xFFFFFFFFFFFFFFFF
-#define SIZEOF_LONG 8
-#else
-#error "Unsupported number of bytes in `long' type!"
-#endif
-
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#define TT_CONFIG_OPTION_STATIC_RASTER
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/debugger/Makefile b/Build/source/libs/libttf/arch/debugger/Makefile
deleted file mode 100644
index 6da004b8526..00000000000
--- a/Build/source/libs/libttf/arch/debugger/Makefile
+++ /dev/null
@@ -1,96 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library and test programs for emx-gcc under OS/2 or under
-# Unix with extra debugging capabilities.
-#
-# You will need GNU make.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -f arch/debugger/Makefile
-
-ARCH = arch/debugger
-FT_MAKEFILE = $(ARCH)/Makefile
-
-CC = gcc
-
-#CFLAGS = -W -Wall -O0 -g -ansi -pedantic -I$(ARCH) -I. -Iextend
-
-CFLAGS = -Wall -O0 -g -ansi -I$(ARCH) -I. -Iextend
-
-#CFLAGS = -Wall -ansi -pedantic -O2 -s -I$(ARCH) -I. -Iextend
-
-# Detect OS/2 to add the flag -DOS2 when compiling ttinterp.c
-#
-ifdef OS2_SHELL
-OS := OS2
-RM := del
-else
-OS := UNIX # Unix build otherwise
-RM := rm -f
-endif
-
-TTFILE = ./ttfile.c
-TTMEMORY = ./ttmemory.c
-TTMUTEX = ./ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxopen.c \
- extend/ftxgdef.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttgload.c ttinterp.c ttload.c ttobjs.c \
- ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-# We place the library file in the ARCH directory, so that it doesn't
-# interfere with the normal build.
-#
-LIBTTF_A = $(ARCH)/libttf.a
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $< -D$(OS)
-
-.PHONY: all debug clean distclean depend
-
-
-all:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S $(LIBTTF_A)
-
-debug:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M $(LIBTTF_A)
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-$(LIBTTF_A): $($(LIB_FILES))
- -$(RM) $@
- ar src $@ $^
-
-clean:
-ifdef OS2_SHELL
- -$(RM) $(subst /,\,$(LIBTTF_A))
- -$(RM) $(subst /,\,$(OBJS_S))
-else
- -$(RM) $(LIBTTF_A)
- -$(RM) $(OBJS_S)
-endif
-
-distclean: clean
- -$(RM) dep.end
-
-depend: $(SRC_S) $(SRC_M) $(SRC_X)
- $(CC) $(CFLAGS) -E -M $^ > dep.end
-
-ifeq (dep.end,$(wildcard dep.end))
- include dep.end
-endif
-
-# end of Makefile
diff --git a/Build/source/libs/libttf/arch/debugger/freetype.c b/Build/source/libs/libttf/arch/debugger/freetype.c
deleted file mode 100644
index b431cdfadc5..00000000000
--- a/Build/source/libs/libttf/arch/debugger/freetype.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* Single file library component for the debugging target */
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-/* first include common core components */
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* then system-specific (or ANSI) components */
-
-#include "ttfile.c"
-#include "ttmemory.c"
-#include "ttmutex.c"
-
-/* the extensions are compiled separately, but we need to */
-/* include the file ttextend.c if we want to support them */
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/debugger/ft_conf.h b/Build/source/libs/libttf/arch/debugger/ft_conf.h
deleted file mode 100644
index 061b3781f5d..00000000000
--- a/Build/source/libs/libttf/arch/debugger/ft_conf.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for a debugging build */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-/* Define to empty if the keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. Unix-specific */
-#undef HAVE_FCNTL_H
-
-/* command.com can't pipe stderr into a file; any message would be */
-/* written into the graphics screen. */
-#define HAVE_PRINT_FUNCTION 1
-
-#define Print( format, ap ) vfprintf( stdout, (format), (ap) )
-
-
-/* The number of bytes in a int. We use the ANSI header file limits.h */
-/* for determining it since there is no easy way to guess. */
-/* */
-#include <limits.h>
-#if UINT_MAX == 0xFFFF
-#define SIZEOF_INT 2
-#elif UINT_MAX == 0xFFFFFFFF
-#define SIZEOF_INT 4
-#else
-#error "Unsupported number of bytes in `int' type!"
-#endif
-
-/* We now try to guess the size of longs in the same way */
-/* */
-#if ULONG_MAX == 0xFFFFFFFF
-#define SIZEOF_LONG 4
-#elif ULONG_MAX == 0xFFFFFFFFFFFFFFFF
-#define SIZEOF_LONG 8
-#else
-#error "Unsupported number of bytes in `long' type!"
-#endif
-
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-/* */
-/* For debugging, we use a jump table; this allows some interesting */
-/* things during development. */
-
-#undef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a `static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine. */
-/* */
-/* We use a static interpreter in the debugger; this helps in setting */
-/* data breakpoints to fixed memory addresses. */
-
-#define TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-/* an extra for the debugger */
-#define DEBUG_INTERPRETER
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-
-#define TT_CONFIG_OPTION_STATIC_RASTER
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode. */
-/* Set to DEBUG_LEVEL_TRACE for the debugger. */
-#define DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/mac/README b/Build/source/libs/libttf/arch/mac/README
deleted file mode 100644
index 80334869bdd..00000000000
--- a/Build/source/libs/libttf/arch/mac/README
+++ /dev/null
@@ -1,47 +0,0 @@
-
-This is the readme of the freetype.hqx archive in the contrib/mac
-subdirectory. Please note that the FreeType team does *not* support the
-Macintosh platform due to lack of knowledge. All questions regarding the
-code should be sent to both David Williss and the freetype-devel list.
-
-
-----------------------------------------------------------------------------
-
-
-These are CodeWarrior projects for building the FreeType library on a Macintosh
-I've only provided PPC projects here, but building for 68K shouldn't be hard.
-There are two directories here (OK, "folders"). One contains a project for
-building freetype.ppc.lib and the other is for freetype.ppc.dll. (I havn't
-actually tested the DLL yet.)
-
-The Macintosh stores TrueType fonts in a "Fonts" folder under the "System"
-folder. There is a standard MacOS API for finding this folder, so I use it.
-However, the fonts aren't normal flat files. They have all the data in
-resources in the resource fork. Each font is an 'sfnt' resource, and each
-file can have more than one 'sfnt' resource.
-
-To get at them, I made a copy of ttmmap.c from the Unix implementation and
-modified it to load/release the resource and lock/unlock the handle as needed.
-This only required a change to the open and close functions. After that, it
-works just as if it was using Unix memory mapping.
-
-One thing however. Because of the bizarre scheme for storing the fonts, I
-made up a way of specifying the font filename.
-
- fonts:/fontfile/fontname
-
-Where fonts:/ is a literal string that means "the fonts folder", fontfile is
-the name of the actual file and fontname is the name of the 'sfnt' resource.
-Currently, this is the only thing it understands. It might be nice if some
-day (2.0 maybe?) ttfile.c and ttmmap.c wern't mutialy exclusive and it could
-decide which method to use based on the filename or something.
-
-Another thing that I had to change to make this work. It seems that Macintosh
-TrueType fonts have no OS/2 table, so ttload.c needs to be modified to make
-that nonfatal, at least on a Macintosh.
-
----
-
-David Williss
-MicroImages, Inc.
-dwilliss@microimages.com
diff --git a/Build/source/libs/libttf/arch/mac/freetype.c b/Build/source/libs/libttf/arch/mac/freetype.c
deleted file mode 100644
index 5db4438d373..00000000000
--- a/Build/source/libs/libttf/arch/mac/freetype.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* This file is *not* part of the FreeType project, because the team */
-/* lacks the necessary expertise to support it. */
-
-/* freetype.c for MacOS */
-/* single object library component for MacOS */
-
-/* Written by Dave Willis <dwilliss@microimages.com> on 1998-07-30. */
-/* Modified by Antoine Leca for the 1.3 release, but untested. */
-
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-/* Note, you should define the EXPORT_DEF and EXPORT_FUNC macros here */
-/* if you want to build a DLL. If undefined, the macros are defined */
-/* as "export" and "" (i.e. nothing), which is the normal behaviour. */
-/* The macros are placed before each high-level API function */
-/* declaration. You can then use them to take any compiler-specific */
-/* pragma for DLL-exported symbols. See 'ttconfig.h' for details. */
-
-
-/* first include common core components */
-
-#define MAC_MAIN_OBJECT
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* then system-specific (or ANSI) components */
-
-#include "ttmmap.c" /* Was "ttfile.c" */
-#include "ttmemory.c"
-#include "ttmutex.c"
-
-/* finally, add some extensions */
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/mac/ft_conf.h b/Build/source/libs/libttf/arch/mac/ft_conf.h
deleted file mode 100644
index 4043ae5250e..00000000000
--- a/Build/source/libs/libttf/arch/mac/ft_conf.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/* This file is *not* part of the FreeType project, because the team */
-/* lacks the necessary expertise to support it. */
-
-/* ft_conf.h for MacOS */
-
-/* Written by Dave Willis <dwilliss@microimages.com> on 1998-07-30. */
-/* Modified by Antoine Leca for the 1.3 release, but untested. */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-/* Define to empty if the 'const' keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* The number of bytes in a int. */
-#define SIZEOF_INT 4
-
-/* The number of bytes in a long. */
-#define SIZEOF_LONG 4
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/mac/ttmmap.c b/Build/source/libs/libttf/arch/mac/ttmmap.c
deleted file mode 100644
index 3a7a917fb33..00000000000
--- a/Build/source/libs/libttf/arch/mac/ttmmap.c
+++ /dev/null
@@ -1,1069 +0,0 @@
-/*******************************************************************
- *
- * ttmmap.c 2.0
- *
- * Memory-Mapped file component ( replaces ttfile.c ).
- *
- * Copyright 1996-1998 by
- * David Turner, Robert Wilhelm, and Werner Lemberg
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- * Changes between 2.0 and 1.3 :
- *
- * - adopted new design/separation introduced in ttfile.c 2.0
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#include <folders.h>
-#include <resources.h>
-
-
-#include "freetype.h"
-#include "tttypes.h"
-#include "ttdebug.h"
-#include "ttengine.h"
-#include "ttmutex.h"
-#include "ttmemory.h"
-#include "ttfile.h" /* our prototypes */
-
- /* This definition is mandatory for each file component! */
- EXPORT_FUNC
- const TFileFrame TT_Null_FileFrame = { NULL, 0, 0 };
-
- /* It has proven useful to do some bounds checks during */
- /* development phase. Define DEBUG_FILE when compiling */
- /* this component to enable them. */
-
-#ifdef DEBUG_FILE
-#define CHECK_FRAME( frame, n ) \
- do { \
- if ( frame.cursor+n > frame.address + frame.size ) \
- Panic( "Frame boundary error!\n" ); \
- } while ( 0 )
-#else
-#define CHECK_FRAME( frame, n ) \
- do { \
- } while( 0 )
-#endif
-
- struct _TFileMap
- {
- String* base; /* base address of mapped file */
- Int refcount; /* reference count for handle region */
- Long size; /* stream size in file */
- Long offset; /* offset in file */
- Handle handle; /* Macintosh style handle to lock/unlock */
- short resid; /* Id of resource file to close when done */
- };
-
- typedef struct _TFileMap TFileMap;
-
-#define MAP_Address( map ) (Byte*)( (map)->base + (map)->offset )
-
- /* The stream record structure */
- typedef struct _TStream_Rec
- {
- TFileMap* map; /* mapped file description */
- Long pos ; /* cursor in mapped file */
- } TStream_Rec;
-
- typedef TStream_Rec* PStream_Rec;
-
-#define STREAM2REC( x ) ( (TStream_Rec*)HANDLE_Val( x ) )
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /**** ****/
- /**** N O N R E E N T R A N T I M P L E M E N T A T I O N ****/
- /**** ****/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
- /* The TFile_Component structure holds all the data that was */
- /* previously declared static or global in this component. */
- /* */
- /* It is accessible through the 'engine.file_component' */
- /* variable in re-entrant builds, or directly through the */
- /* static 'files' variable in other builds. */
-
- struct _TFile_Component
- {
- TMutex lock; /* used by the thread-safe build only */
- PStream_Rec stream; /* current stream */
- TFileFrame frame; /* current frame */
- };
-
- typedef struct _TFile_Component TFile_Component;
-
-/* The macro CUR_Stream denotes the current input stream */
-/* Note that for the re-entrant version, the 'stream' name has been */
-/* chosen according to the macro STREAM_ARGS. */
-
-/* The macro CUR_Frame denotes the current file frame */
-/* Note that for the re-entrant version, the 'frame' name has been */
-/* chosen according to the macro FRAME_ARGS. */
-
-/* The macro STREAM_VAR is used when calling public functions */
-/* that need an 'optional' stream argument. */
-
-#define CUR_Stream files.stream /* thread-safe macros */
-#define CUR_Frame files.frame
-
-#define STREAM_VARS /* void */
-#define STREAM_VAR /* void */
-
- /* the 'files' variable is only defined in non-reentrant builds */
-
- static TFile_Component files;
-
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- MUTEX_Create( files.lock );
- files.stream = NULL;
- ZERO_Frame( files.frame );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- MUTEX_Destroy( files.lock );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Copies or duplicates a given stream.
- *
- * Input : org_stream original stream
- * stream target stream (copy or duplicate)
- *
- * Output : Error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream org_stream,
- TT_Stream* stream )
- {
- MUTEX_Lock( files.lock );
- *stream = org_stream;
- files.stream = STREAM2REC( org_stream ); /* set current stream */
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream
- *
- * Output : Error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- HANDLE_Set( *stream, NULL );
- MUTEX_Release( files.lock );
-
- return TT_Err_Ok;
- }
-
-#else /* TT_CONFIG_OPTION_THREAD_SAFE */
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /******** ********/
- /******** R E E N T R A N T I M P L E M E N T A T I O N ********/
- /******** ********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-#define CUR_Stream STREAM2REC( stream ) /* re-entrant macros */
-#define CUR_Frame (*frame)
-
-#define STREAM_VARS stream,
-#define STREAM_VAR stream
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- engine.file_component = NULL;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Copies or duplicates a given stream.
- *
- * Input : org_stream original stream
- * stream target stream (copy or duplicate)
- *
- * Output : Error code. The output stream is set to NULL in
- * case of Failure.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream input_stream,
- TT_Stream* copy )
- {
- TT_Error error;
- PStream_Rec stream_rec;
- PStream_Rec copy_rec;
-
-
- stream_rec = STREAM2REC( input_stream );
-
- if ( ALLOC( copy_rec, sizeof ( TStream_Rec ) ) )
- goto Fail;
-
- HANDLE_Set( *copy, copy_rec );
-
- copy_rec->map->refcount++;
- copy_rec->pos = 0;
-
- return TT_Err_Ok;
-
- Fail:
- HANDLE_Set( *copy, NULL );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream
- *
- * Output : error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- return TT_Close_Stream( stream );
- }
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /*********** ***********/
- /*********** C O M M O N I M P L E M E N T A T I O N ***********/
- /*********** ***********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-/*******************************************************************
- *
- * Function : AllocateMap
- *
- * Description : Allocates a new map from the table.
- *
- * Output : Pointer to new stream rec. NULL in case of failure.
- *
- ******************************************************************/
-
- static
- TFileMap* Allocate_Map( void )
- {
- TFileMap* result;
-
-
- if ( MEM_Alloc( result, sizeof ( TFileMap ) ) )
- return NULL;
-
- result->refcount = 1;
- return result;
- }
-
-
-/*******************************************************************
- *
- * Function : ReleaseMap
- *
- * Description : Releases a used map to the table if reference i
- * counter reaches zero.
- *
- * Input : map
- *
- * Output : None.
- *
- * Note : Called by TT_Close_File()
- *
- ******************************************************************/
-
- static
- void Release_Map ( TFileMap* map )
- {
- map->refcount--;
- if ( map->refcount <= 0 )
- {
- /* MacOS System calls */
- HUnlock(map->handle);
- ReleaseResource(map->handle);
- CloseResFile(map->resid);
-
- FREE( map );
- }
- }
-
-
-/* Whadda ya mean "strdup undefined"? Fine, I'll define my own! */
-static char *mystrdup(const char *str) {
- char *ret;
-
- if ( TT_Alloc(strlen(str) + 1, (void**)&ret) != 0 ) return(NULL);
- strcpy(ret, str);
- return(ret);
- }
-
-/*******************************************************************
- *
- * Function : TT_Open_Stream
- *
- * Description : Opens the font file and saves the total file size.
- *
- * Input : error address of stream's error variable
- * (re-entrant build only).
- * filepathname pathname of the file to open
- * stream address of target TT_Stream structure
- *
- * Output : SUCCESS on success, FAILURE on error.
- * The target stream is set to -1 in case of failure.
- *
- ******************************************************************/
-/*
-** This is not a totally generic implementation. It currently assumes the filename
-** starts with "fonts:" and uses slashes instead of colons like Mac code normally
-** would. Given a filename of the form "fonts:/filename/resname", Load the resource
-** and lock the handle
-**
-** The "fonts:" at the beginning is just a convention I came up with to
-** indicate the Fonts folder inside the current System folder (find via FindFolder())
-*/
-
- LOCAL_FUNC
- TT_Error TT_Open_Stream( const String* filepathname,
- TT_Stream* stream )
- {
- TT_Error error;
- Int file;
- PStream_Rec stream_rec;
- TFileMap* map;
-
- int size, err = 0;
- short vRefNum, res = -1;
- Str255 FontName;
- char *cp, *p, *fname, *sep;
- Str63 myName;
- long dirID;
-
-
- if ( ALLOC( *stream, sizeof ( TStream_Rec ) ) )
- return error;
-
- map = Allocate_Map();
- if ( !map )
- {
- error = TT_Err_Out_Of_Memory;
- goto Memory_Fail;
- }
-
- stream_rec = STREAM2REC( *stream );
-
- /* Find the dirID of the Fonts folder in the current System folder */
- if (FindFolder(kOnSystemDisk, kFontsFolderType, kDontCreateFolder, &vRefNum, &dirID))
- goto File_Fail;
-
- /* Break the name apart */
- fname = mystrdup(filepathname); /* Make a copy so we can muck with it */
- sep = ":/"; /* Things that can seperate file path componants */
-
- strtok(fname, sep); /* Skip over "fonts:" */
-
- if ((p = strtok(NULL, sep)) == NULL) /* Get filename */
- goto File_Fail;
- strcpy(myName + 1, p); /* Make this a Pascal string (Yuck!) */
- myName[0] = strlen(p);
-
- if ((p = strtok(NULL, sep)) == NULL) /* Get res name */
- goto File_Fail;
- strcpy(FontName+1, p); /* Make this a Pascal string (Yuck!) */
- FontName[0] = strlen(p);
-
- FREE( fname );
-
- if ((cp = strchr(FontName, '.')) != NULL) /* Strip off ".ttf" , if any */
- *cp = 0;
-
- /* Read the font into a buffer */
- if ((map->resid = HOpenResFile(vRefNum, dirID, myName, fsRdPerm)) == -1)
- goto File_Fail;
-
- if ((map->handle = Get1NamedResource('sfnt', FontName)) == NULL)
- goto Map_Fail;
-
- HLock(map->handle);
- map->base = *map->handle;
- map->offset = 0;
- map->size = GetResourceSizeOnDisk(map->handle);
-
- if ( map->base == NULL )
- goto Lock_Fail;
-
- stream_rec->map = map;
- stream_rec->pos = 0;
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- CUR_Stream = stream_rec;
-#endif
-
- return TT_Err_Ok;
-
- Lock_Fail:
- ReleaseResource(map->handle);
-
- Map_Fail:
- CloseResFile(map->resid);
-
- File_Fail:
- error = TT_Err_Could_Not_Open_File;
- FREE( map );
-
- Memory_Fail:
- FREE( *stream );
- FREE( fname );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Close_Stream
- *
- * Description : Closes a stream.
- *
- * Input : stream
- *
- * Output : SUCCESS (always)
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TT_Close_Stream( TT_Stream* stream )
- {
- PStream_Rec rec = STREAM2REC( *stream );
-
-
- Release_Map( rec->map );
- FREE( rec );
-
- HANDLE_Set( *stream, NULL );
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Flush_Stream
- *
- * Description : Flushes a stream, i.e., closes its file handle.
- *
- * Input : stream address of target TT_Stream structure
- *
- * Output : Error code
- *
- * NOTE : Never flush the current opened stream. This means that
- * you should _never_ call this function between a
- * TT_Use_Stream() and a TT_Done_Stream()!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Flush_Stream( TT_Stream* stream )
- {
- /* XXX - DUMMY IMPLEMENTATION */
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Stream_Size
- *
- * Description : Returns the length of a given stream, even if it
- * is flushed.
- *
- * Input : stream the stream
- *
- * Output : Length of stream in bytes.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_Stream_Size( TT_Stream stream )
- {
- PStream_Rec rec = STREAM2REC( stream );
-
-
- if ( rec )
- return rec->map->size;
- else
- return 0; /* invalid stream - return 0 */
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Seek_File
- *
- * Description : Seeks the file cursor to a different position.
- *
- * Input : position new position in file
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Seek_File( STREAM_ARGS Long position )
- {
- if ( position > CUR_Stream->map->size )
- return TT_Err_Invalid_File_Offset;
-
- CUR_Stream->pos = position;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Skip_File
- *
- * Description : Skips forward the file cursor.
- *
- * Input : distance number of bytes to skip
- *
- * Output : see TT_Seek_File
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Skip_File( STREAM_ARGS Long distance )
- {
- return TT_Seek_File( STREAM_VARS CUR_Stream->pos + distance );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_File
- *
- * Description : Reads a chunk of the file and copies it to memory.
- *
- * Input : buffer target buffer
- * count length in bytes to read
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_File( STREAM_ARGS void* buffer, Long count )
- {
- if ( CUR_Stream->pos + count > CUR_Stream->map->size )
- return TT_Err_Invalid_File_Read;
-
- MEM_Copy( buffer,
- MAP_Address( CUR_Stream->map ) + CUR_Stream->pos, count );
- CUR_Stream->pos += count;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_At_File
- *
- * Description : Reads file at a specified position.
- *
- * Input : position position to seek to before read
- * buffer target buffer
- * count number of bytes to read
- *
- * Output : SUCCESS on success. FAILURE if error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_At_File( STREAM_ARGS Long position,
- void* buffer,
- Long count )
- {
- TT_Error error;
-
-
- if ( (error = TT_Seek_File( STREAM_VARS position )) ||
- (error = TT_Read_File( STREAM_VARS buffer, count )) )
- return error;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_File_Pos
- *
- * Description : Returns current file seek pointer.
- *
- * Input : none
- *
- * Output : current file position
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_File_Pos( STREAM_ARG )
- {
- return CUR_Stream->pos;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : Error code
- *
- * Notes: The function fails if the byte range is not within the
- * the file, or if there is not enough memory to cache
- * the bytes properly (which usually means that aSize is
- * too big in both cases).
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( CUR_Stream->pos + size > CUR_Stream->map->size )
- return TT_Err_Invalid_Frame_Access;
-
- CUR_Frame.size = size;
- CUR_Frame.address = MAP_Address( CUR_Stream->map ) + CUR_Stream->pos;
- CUR_Frame.cursor = CUR_Frame.address;
-
- CUR_Stream->pos += size;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Check_And_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : Error code
- *
- * Notes: The function truncates 'size' if the byte range is not
- * within the file.
- *
- * It will fail if there is not enough memory to cache
- * the bytes properly (which usually means that aSize is
- * too big).
- *
- * It will fail if you make two consecutive calls
- * to TT_Access_Frame(), without a TT_Forget_Frame() between
- * them.
- *
- * The only difference with TT_Access_Frame() is that we
- * check that the frame is within the current file. We
- * otherwise truncate it. The 'overflow' is set to zero.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
- Long readBytes;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- readBytes = CUR_Stream->map->size - CUR_Stream->pos;
- if ( size > readBytes )
- {
- /* There is overflow, we allocate a new block then */
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
-
- CUR_Frame.size = size;
-
- /* copy the valid part */
- MEM_Copy( CUR_Frame.address,
- MAP_Address( CUR_Stream->map ) + CUR_Stream->pos,
- readBytes );
- }
- else
- {
- CUR_Frame.size = size;
- CUR_Frame.address = MAP_Address( CUR_Stream->map ) + CUR_Stream->pos;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Forget_Frame
- *
- * Description : Releases a cached frame after reading.
- *
- * Input : None
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Forget_Frame( FRAME_ARG )
- {
- if ( CUR_Frame.address == NULL )
- return TT_Err_Nested_Frame_Access;
-
- /* If we were using a duplicate in case of overflow, free it now */
- if ( CUR_Frame.address < (Byte*)CUR_Stream->map->base ||
- CUR_Frame.address >= (Byte*)CUR_Stream->map->base +
- CUR_Stream->map->size )
- FREE( CUR_Frame.address );
-
- ZERO_Frame( files.frame );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Byte
- *
- * Description : Extracts a byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted Byte
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
-#if 0
-
- EXPORT_FUNC
- Byte TT_Get_Byte( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Byte)(*CUR_Frame.cursor++);
- }
-
-#endif
-
-
-/*******************************************************************
- *
- * Function : GET_Char
- *
- * Description : Extracts a signed byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted char
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Char TT_Get_Char( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Char)(*CUR_Frame.cursor++);
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Short
- *
- * Description : Extracts a short from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted short
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Short TT_Get_Short( FRAME_ARG )
- {
- Short getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = ((Short)CUR_Frame.cursor[0] << 8) |
- (Short)CUR_Frame.cursor[1];
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_UShort
- *
- * Description : Extracts an unsigned short from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted ushort
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
-#if 0
-
- EXPORT_FUNC
- UShort TT_Get_UShort( FRAME_ARG )
- {
- UShort getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = ((UShort)CUR_Frame.cursor[0] << 8) |
- (UShort)CUR_Frame.cursor[1];
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-
-#endif
-
-
-/*******************************************************************
- *
- * Function : GET_Long
- *
- * Description : Extracts a long from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted long
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_Get_Long( FRAME_ARG )
- {
- Long getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ((Long)CUR_Frame.cursor[0] << 24) |
- ((Long)CUR_Frame.cursor[1] << 16) |
- ((Long)CUR_Frame.cursor[2] << 8 ) |
- (Long)CUR_Frame.cursor[3];
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_ULong
- *
- * Description : Extracts an unsigned long from the frame.
- *
- * Input : None
- *
- * Output : Extracted ulong
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
-#if 0
-
- EXPORT_FUNC
- ULong TT_Get_ULong( FRAME_ARG )
- {
- ULong getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ( ((ULong)CUR_Frame.cursor[0] << 24) |
- ((ULong)CUR_Frame.cursor[1] << 16) |
- ((ULong)CUR_Frame.cursor[2] << 8 ) |
- (ULong)CUR_Frame.cursor[3] );
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/msdos/Makefile.BC b/Build/source/libs/libttf/arch/msdos/Makefile.BC
deleted file mode 100644
index ba5d50b38cc..00000000000
--- a/Build/source/libs/libttf/arch/msdos/Makefile.BC
+++ /dev/null
@@ -1,132 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Borland C++ for MS-DOS, large model.
-# Due to size constraints, it does not try to pack all modules into one
-# (`single-object mode').
-#
-# You will need Borland MAKE.
-# Tested with Borland C++ v.3.1, 4.02, 5.0.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -farch/msdos/Makefile.BC
-#
-#
-# A debug version can be obtained with
-#
-# make -DDEBUG -farch/msdos/Makefile.BC
-#
-# A special version enabled to handle big fonts (with more than 16,384
-# glyphs) can be obtained with
-#
-# make -DBIGFONTS -farch/msdos/Makefile.BC
-
-ARCH = arch\msdos
-FT_MAKEFILE = $(ARCH)\Makefile.BC
-
-CC = bcc
-LIB = tlib /c /e
-
-# Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern
-# Borland compilers (from BC++ 3.1 on) can increase the limit on
-# the length of identifiers.
-!if ! $d(DEBUG)
-CFLAGS = -ml -A -O2 -3 -i40 -w-nak -w-par -w-use -w-aus -w-stu -w-stv -w-cln -w-sig -I$(ARCH);.;extend
-!else
-CFLAGS = -v -N -ml -A -i40 -w-nak -w-par -w-use -w-aus -w-stu -w-stv -w-cln -w-sig -I$(ARCH);.;extend
-!endif
-
-
-!if $d(BIGFONTS)
-CFLAGS = $(CFLAGS) -DTT_HUGE_PTR=__huge
-
-TTFILE = $(ARCH)\.\hugefile.c
-TTMEMORY = $(ARCH)\.\hugemem.c
-!else
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-!endif
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces before the \ at end of line,
-# otherwise the substitution for TLIB command line will fail.
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
- extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c\
- extend\ftxsbit.c extend\ftxgsub.c extend\ftxgpos.c\
- extend\ftxopen.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c\
- ttgload.c ttinterp.c ttload.c ttobjs.c\
- ttraster.c ttextend.c ttdebug.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\.\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Borland's make does not handle $($(LIB_FILES)), and using
-# -DLIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing TLIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# It is commented out below. See Makefile.TC for an application.
-.c.obj:
- $(CC) -c -o$* @&&|
- $(CFLAGS) $<
-|
-# $(LIB) libttf +-$*.obj
-
-
-!if !$d(DEBUG)
-# Skipped if DEBUG build
-# (but it changes nothing, since we always build in multiple parts).
-all: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @&&|
-+ $(OBJS_M: = + )
-|
-
-!endif
-
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @&&|
-+ $(OBJS_M: = + )
-|
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- -del libttf.lib
- $(LIB) libttf.lib @&&|
-+ $(**: = + )
-|
-
-!if $d(BIGFONTS)
-$(TTMEMORY:.c=.obj): $(TTMEMORY)
- $(CC) -c -o$* @&&|
- $(CFLAGS) -A- $*.c
-|
-!endif
-
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del libttf.bak
- -del response
-
-distclean: clean
- -del libttf.lib
-
-!include "$(ARCH)\depend.dos"
-
-# end of Makefile
diff --git a/Build/source/libs/libttf/arch/msdos/Makefile.MS b/Build/source/libs/libttf/arch/msdos/Makefile.MS
deleted file mode 100644
index 3c793faff94..00000000000
--- a/Build/source/libs/libttf/arch/msdos/Makefile.MS
+++ /dev/null
@@ -1,117 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Microsoft C for MS-DOS, large model.
-# It also works for Visual C++ 1.x 16-bits compiler, but you should
-# instead use the Makefile customized for it, Makefile.VC.
-# Due to size constraints, it does not try to pack all modules into one.
-#
-# You will need NMAKE.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# nmake /f arch\msdos\Makefile.MS
-#
-#
-# A debug version can be obtained with
-#
-# nmake DEBUG=1 /f arch\msdos\Makefile.MS
-#
-# A special version enabled to handle big fonts (with more than 16,384
-# glyphs) can be obtained with
-#
-# nmake BIGFONTS=1 /f arch\msdos\Makefile.MS
-
-ARCH = arch\msdos
-FT_MAKEFILE = $(ARCH)\Makefile.MS
-
-CC = cl /nologo
-LIB = lib /noignorecase /nologo
-
-!ifndef DEBUG
-CFLAGS = /Ox /AL /W2 /G2 /I$(ARCH) /I. /Iextend
-!else
-CFLAGS = /Zi /AL /W2 /G2 /I$(ARCH) /I. /Iextend
-!endif
-
-
-!ifndef BIGFONTS
-CFLAGS = $(CFLAGS) /Za
-
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-!else
-CFLAGS = $(CFLAGS) /DTT_HUGE_PTR=__huge /Ze
-
-TTFILE = $(ARCH)\hugefile.c
-TTMEMORY = $(ARCH)\hugemem.c
-!endif
-
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces between the file names or at end of line, otherwise
-# the substitution for LIB command line will fail. Thank you.
-#
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
-extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c extend\ftxsbit.c\
-extend\ftxopen.c extend\ftxgsub.c extend\ftxgpos.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c\
-ttgload.c ttinterp.c ttload.c ttobjs.c ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Microsoft's NMAKE does not handle $($(LIB_FILES)), and using
-# LIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing LIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# It is commented out below. See Makefile.TC for an application.
-.c.obj:
- @$(CC) /c /Fo$@ @<<
- $(CFLAGS) $*.c
-<<
-# $(LIB) libttf +-$*.obj
-
-
-!ifndef DEBUG
-# Skipped if DEBUG build
-# (but it changes nothing, since we always build in multiple parts).
-all: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_M: = ^ );
-<<KEEP
-!endif
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_M: = ^ );
-<<KEEP
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- $(LIB) $@ +-$(?: =-+);
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del response
-
-distclean: clean
- -del libttf.lib
-
-!include "$(ARCH)\depend.dos"
-
-# end of Makefile.MS
diff --git a/Build/source/libs/libttf/arch/msdos/Makefile.TC b/Build/source/libs/libttf/arch/msdos/Makefile.TC
deleted file mode 100644
index a3316c53f23..00000000000
--- a/Build/source/libs/libttf/arch/msdos/Makefile.TC
+++ /dev/null
@@ -1,86 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Turbo C for MS-DOS, large model.
-# Due to size constraints, it does not try to pack all modules into one.
-#
-# You will need Borland MAKE.
-# Tested with Turbo C v.1.5, v.2.0, Turbo C++ v.1.0
-# Turbo C v.1.0 (May '87) is too old (lack of structure assignment)
-# to compile FreeType. Update your compiler. ;-)
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -farch/msdos/Makefile.TC
-#
-#
-# A debug version can be obtained (except for TC1.5) with
-#
-# make -DDEBUG -farch/msdos/Makefile.TC
-
-ARCH = arch\msdos
-FT_MAKEFILE = $(ARCH)\Makefile.TC
-
-CC = tcc
-LIB = tlib /c
-
-!if ! $d(DEBUG)
-CFLAGS = -ml -A -a -G -w-par -w-use -w-aus -w-stu -w-stv -w-cln -w-sig -I$(ARCH);.;extend
-!else
-# For Turbo C v.1.5, replace the -v option below by -y.
-CFLAGS = -v -N -ml -A -w-par -w-use -w-aus -w-stu -w-stv -w-cln -w-sig -I$(ARCH);.;extend
-!endif
-
-
-TTFILE = .\ttfile.obj
-TTMEMORY = .\ttmemory.obj
-TTMUTEX = .\ttmutex.obj
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-OBJS_X = extend\ftxgasp.obj extend\ftxkern.obj extend\ftxpost.obj \
- extend\ftxcmap.obj extend\ftxwidth.obj extend\ftxerr18.obj \
- extend\ftxsbit.obj extend\ftxopen.obj extend\ftxgsub.obj \
- extend\ftxgpos.obj extend\ftxgdef.obj
-# the line below does not work with these old versions of make...
-# OBJS_X = $(SRC_X:.c=.obj)
-
-OBJS_M = ttapi.obj ttcache.obj ttcalc.obj ttcmap.obj ttdebug.obj \
- ttgload.obj ttinterp.obj ttload.obj ttobjs.obj \
- ttraster.obj ttextend.obj $(PORT) $(OBJS_X)
-# OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-# Not used here because the compiler runs out of memory...
-OBJ_S = $(ARCH)\freetype.obj
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Borland's make is very primitive, we include each .obj
-# in the library as soon as it is compiled.
-
-.c.obj:
- $(CC) $(CFLAGS) -c -o$* $<
- $(LIB) libttf +-$*.obj
-
-
-!if !$d(DEBUG)
-# Skipped if DEBUG build
-# (but it changes nothing, since we always build in multiple parts).
-all: $(OBJS_M)
-
-!endif
-
-debug: $(OBJS_M)
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del libttf.bak
-# -del response
-
-distclean: clean
- -del libttf.lib
-
-!include "$(ARCH)\depend.dos"
-
-# end of Makefile
diff --git a/Build/source/libs/libttf/arch/msdos/Makefile.VC b/Build/source/libs/libttf/arch/msdos/Makefile.VC
deleted file mode 100644
index e9d0855ad08..00000000000
--- a/Build/source/libs/libttf/arch/msdos/Makefile.VC
+++ /dev/null
@@ -1,117 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Microsoft Visual C++ 1.x for MS-DOS, large model.
-# It also works for Microsoft C/C++ v.7.0 16-bit compiler, but not for
-# previous versions (use Makefile.MS instead).
-#
-# You will need NMAKE.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# nmake /f arch\msdos\Makefile.VC
-#
-#
-# A debug version can be obtained with
-#
-# nmake DEBUG=1 /f arch\msdos\Makefile.VC
-#
-# A special version enabled to handle big fonts (with more than 16,384
-# glyphs) can be obtained with
-#
-# nmake BIGFONTS=1 /f arch\msdos\Makefile.VC
-
-ARCH = arch\msdos
-FT_MAKEFILE = $(ARCH)\Makefile.VC
-
-CC = cl /nologo
-LIB = lib /noignorecase /nologo
-
-# One can also consider using "set MSC_CMD_FLAGS=/Gr /Op- /Gy /YX".
-# With Microsoft C/C++ 7.0, use /G2 instead of /G3.
-!ifndef DEBUG
-CFLAGS = $(CFLAGS) /Ox /AL /W2 /G3 /I$(ARCH) /I. /Iextend
-!else
-CFLAGS = $(CFLAGS) /Zi /Ge /AL /W2 /G3 /I$(ARCH) /I. /Iextend
-!endif
-
-
-!ifndef BIGFONTS
-CFLAGS = $(CFLAGS) /Za
-
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-!else
-CFLAGS = $(CFLAGS) /DTT_HUGE_PTR=__huge /Ze
-
-TTFILE = $(ARCH)\hugefile.c
-TTMEMORY = $(ARCH)\hugemem.c
-!endif
-
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces between the file names or at end of line, otherwise
-# the substitution for LIB command line will fail. Thank you.
-#
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
-extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c extend\ftxsbit.c\
-extend\ftxopen.c extend\ftxgsub.c extend\ftxgpos.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c\
-ttgload.c ttinterp.c ttload.c ttobjs.c ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Microsoft's NMAKE does not handle $($(LIB_FILES)), and using
-# LIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing LIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# It is commented out below. See Makefile.TC for an application.
-.c.obj:
- @$(CC) /c /Fo$@ @<<
- $(CFLAGS) $*.c
-<<
-# $(LIB) libttf +-$*.obj
-
-
-!ifndef DEBUG
-# Skipped if DEBUG build
-all: $(OBJS_S)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_S: = + );
-<<KEEP
-!endif
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_M: = + );
-<<KEEP
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- $(LIB) $@ +-$(?: =-+);
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del response
-
-distclean: clean
- -del libttf.lib
-
-!include "$(ARCH)\depend.dos"
-
-# end of Makefile.VC
diff --git a/Build/source/libs/libttf/arch/msdos/Makefile.dm b/Build/source/libs/libttf/arch/msdos/Makefile.dm
deleted file mode 100644
index 710c355bf53..00000000000
--- a/Build/source/libs/libttf/arch/msdos/Makefile.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library and test programs for emx-gcc or djgpp under MSDOS.
-#
-# You will need dmake.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# dmake -r -f arch/msdos/Makefile.dm
-
-ARCH = arch/msdos
-FT_MAKEFILE = $(ARCH)/Makefile.dm
-FT_MAKE = dmake -r
-
-.IMPORT: COMSPEC
-SHELL := $(COMSPEC)
-SHELLFLAGS := /c
-GROUPSHELL := $(SHELL)
-GROUPFLAGS := $(SHELLFLAGS)
-GROUPSUFFIX := .bat
-SHELLMETAS := *"?<>&|
-
-CC = gcc
-
-CFLAGS = -Wall -O2 -g -ansi -pedantic -I$(ARCH) -I. -Iextend
-# CFLAGS = -Wall -ansi -O2 -s -I$(ARCH) -I. -Iextend
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxopen.c \
- extend/ftxgdef.c extend/ftxerr18.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttfile.c ttgload.c ttinterp.c ttload.c \
- ttmemory.c ttmutex.c ttobjs.c ttraster.c ttextend.c
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-.PHONY: all debug clean distclean depend
-
-
-all:
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S libttf.a
-
-debug:
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M libttf.a
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
- $(CC) $(CFLAGS) -c -o $@ $(SRC_S)
-
-libttf.a: $($(LIB_FILES))
- +-del $@
- ar src $@ @$(mktmp $(<:t"\n")\n)
-
-clean:
--[
- del *.o
- del extend\*.o
- del $(ARCH)\*.o
-]
-
-distclean: clean
--[
- del dep.end
- del libttf.a
-]
-
-# depend: $(SRC_S) $(SRC_M) $(SRC_X)
-# $(CC) -E -M @$(mktmp $(<:t"\n")\n) > dep.end
-
-# ifeq (dep.end,$(wildcard dep.end))
-# include dep.end
-# endif
-
-# end of Makefile.dm
diff --git a/Build/source/libs/libttf/arch/msdos/Makefile.gcc b/Build/source/libs/libttf/arch/msdos/Makefile.gcc
deleted file mode 100644
index 3325538fb4a..00000000000
--- a/Build/source/libs/libttf/arch/msdos/Makefile.gcc
+++ /dev/null
@@ -1,92 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for emx-gcc or djgpp under MSDOS.
-#
-# You will need GNU make.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -f arch/msdos/Makefile.gcc
-#
-# If you have the GNU gettext package installed with DJGPP, you can also try
-#
-# make -f arch/msdos/Makefile.gcc HAVE_GETTEXT
-
-ARCH = arch/msdos
-FT_MAKEFILE = $(ARCH)/Makefile.gcc
-
-CC = gcc
-
-ifndef GETTEXT
-GETTEXT=NO_GETTEXT
-endif
-
-ifdef DEBUG
-CFLAGS = -Wall -O2 -g -ansi -pedantic -I$(ARCH) -I. -Iextend -D$(GETTEXT)
-else
-CFLAGS = -Wall -ansi -pedantic -O2 -s -I$(ARCH) -I. -Iextend -D$(GETTEXT)
-endif
-
-
-TTFILE = ./ttfile.c
-TTMEMORY = ./ttmemory.c
-TTMUTEX = ./ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxgdef.c \
- extend/ftxopen.c extend/ftxerr18.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttgload.c ttinterp.c ttload.c ttobjs.c \
- ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-.PHONY: all debug clean distclean depend
-
-
-all:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S libttf.a
-
-debug:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M DEBUG=1 libttf.a
-
-HAVE_GETTEXT:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S GETTEXT=HAVE_GETTEXT \
- libttf.a
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-libttf.a: $($(LIB_FILES))
- -del $@
- ar src $@ $^
-
-clean:
- -del *.o
- -del extend\*.o
- -del $(ARCH)\*.o
- -del response
-
-distclean: clean
- -del dep.end
- -del libttf.a
-
-depend: $(SRS_S) $(SRC_M) $(SRC_X)
- $(CC) -E -M $^ > dep.end
-
-ifeq (dep.end,$(wildcard dep.end))
- include dep.end
-endif
-
-# end of Makefile.gcc
diff --git a/Build/source/libs/libttf/arch/msdos/Makefile.wat b/Build/source/libs/libttf/arch/msdos/Makefile.wat
deleted file mode 100644
index e2df1e36f44..00000000000
--- a/Build/source/libs/libttf/arch/msdos/Makefile.wat
+++ /dev/null
@@ -1,88 +0,0 @@
-# This file is part of the FreeType project
-#
-# This builds the Watcom library with Watcom's wcc386 under DOS
-#
-# You'll need Watcom's wmake
-#
-#
-# Invoke by "wmake -f arch\msdos\Makefile.wat" while in the "lib" directory
-#
-# This will build "freetype\lib\libttf.lib"
-#
-
-ARCH = arch\msdos
-FT_MAKEFILE = $(ARCH)\Makefile.wat
-FT_MAKE = wmake -h
-
-
-.EXTENSIONS:
-.EXTENSIONS: .lib .obj .c .h
-.obj:.;.\extend;.\$(ARCH)
-.c:.;.\extend;.\$(ARCH)
-.h:.;.\extend;.\$(ARCH)
-
-CC = wcc386
-
-CCFLAGS = /otexanl+ /s /w4 /zq /d3 -I$(ARCH) -I. -Iextend
-
-
-# FIXME: should use something like OBJ = $(SRC:.c=.obj)
-
-SRC_X = ftxgasp.c ftxkern.c ftxpost.c &
- ftxcmap.c ftxwidth.c ftxsbit.c ftxerr18.c &
- ftxgsub.c ftxgpos.c ftxopen.c ftxgdef.c
-OBJS_X = ftxgasp.obj ftxkern.obj ftxpost.obj &
- ftxcmap.obj ftxwidth.obj ftxsbit.obj ftxerr18.obj &
- ftxgsub.obj ftxgpos.obj ftxopen.obj ftxgdef.obj
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c &
- ttfile.c ttgload.c ttinterp.c &
- ttload.c ttmemory.c ttmutex.c ttobjs.c ttraster.c &
- ttextend.c
-OBJS_M = ttapi.obj ttcache.obj ttcalc.obj ttcmap.obj ttdebug.obj &
- ttfile.obj ttgload.obj ttinterp.obj &
- ttload.obj ttmemory.obj ttmutex.obj ttobjs.obj ttraster.obj &
- ttextend.obj $(OBJS_X)
-
-SRC_S = freetype.c
-OBJ_S = freetype.obj
-OBJS_S = $(OBJ_S) $(OBJ_X)
-
-
-.c.obj:
- $(CC) $(CCFLAGS) $[* /fo=$[*.obj
-
-libname = libttf
-libfile = $(libname).lib
-cmdfile = $(libname).lst
-
-
-all: .symbolic
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S $(libfile)
-
-debug: .symbolic
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M $(libfile)
-
-
-$(libfile): $($(LIB_FILES))
- wlib -q -n $(libfile) @$(cmdfile)
-
-# is this correct? Know nothing about wmake and the Watcom compiler...
-$(OBJ_S): $(SRC_S) $(SRC_M)
- $(CC) $(CCFLAGS) $(SRC_S) /fo=$(OBJ_S)
-
-$(cmdfile): $($(LIB_FILES))
- @for %i in ($($(LIB_FILES))) do @%append $(cmdfile) +-%i
-
-clean: .symbolic
- @-erase $(OBJ_S)
- @-erase $(OBJS_M)
- @-erase $(cmdfile)
-
-distclean: .symbolic clean
- @-erase $(libfile)
-
-new: .symbolic
- @-wtouch *.c
-
-# end of Makefile.wat
diff --git a/Build/source/libs/libttf/arch/msdos/depend.dos b/Build/source/libs/libttf/arch/msdos/depend.dos
deleted file mode 100644
index 9039c57d2df..00000000000
--- a/Build/source/libs/libttf/arch/msdos/depend.dos
+++ /dev/null
@@ -1,107 +0,0 @@
-# This dependency file to be used with various MS-DOS compilers
-# has been generated automatically with the script `makedep' on
-# 07-Mar-2000.
-
-ttapi.obj: ttapi.c ttconfig.h arch\msdos\ft_conf.h freetype.h fterrid.h \
- ftnameid.h ttengine.h tttypes.h ttmutex.h ttcalc.h ttmemory.h \
- ttcache.h ttfile.h ttdebug.h ttobjs.h tttables.h ttcmap.h ttload.h \
- ttgload.h ttraster.h ttextend.h
-ttcache.obj: ttcache.c ttengine.h tttypes.h ttconfig.h \
- arch\msdos\ft_conf.h freetype.h fterrid.h ftnameid.h ttmutex.h \
- ttmemory.h ttcache.h ttobjs.h tttables.h ttcmap.h ttdebug.h
-ttcalc.obj: ttcalc.c ttcalc.h ttconfig.h arch\msdos\ft_conf.h freetype.h \
- fterrid.h ftnameid.h ttdebug.h tttypes.h tttables.h
-ttcmap.obj: ttcmap.c ttobjs.h ttconfig.h arch\msdos\ft_conf.h ttengine.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmutex.h ttcache.h \
- tttables.h ttcmap.h ttdebug.h ttfile.h ttmemory.h ttload.h
-ttdebug.obj: ttdebug.c ttdebug.h ttconfig.h arch\msdos\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h tttables.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h ttcmap.h
-ttextend.obj: ttextend.c ttextend.h ttconfig.h arch\msdos\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttmemory.h
-ttfile.obj: ttfile.c ttconfig.h arch\msdos\ft_conf.h freetype.h \
- fterrid.h ftnameid.h tttypes.h ttdebug.h ttengine.h ttmutex.h \
- ttmemory.h ttfile.h
-ttgload.obj: ttgload.c tttypes.h ttconfig.h arch\msdos\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttdebug.h ttcalc.h ttfile.h \
- ttengine.h ttmutex.h tttables.h ttobjs.h ttcache.h ttcmap.h ttgload.h \
- ttmemory.h tttags.h ttload.h
-ttinterp.obj: ttinterp.c freetype.h fterrid.h ftnameid.h tttypes.h \
- ttconfig.h arch\msdos\ft_conf.h ttdebug.h ttcalc.h ttmemory.h \
- ttinterp.h ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h \
- ttcmap.h
-ttload.obj: ttload.c tttypes.h ttconfig.h arch\msdos\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttdebug.h ttcalc.h ttfile.h \
- ttengine.h ttmutex.h tttables.h ttobjs.h ttcache.h ttcmap.h \
- ttmemory.h tttags.h ttload.h
-ttmemory.obj: ttmemory.c ttdebug.h ttconfig.h arch\msdos\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmemory.h ttengine.h \
- ttmutex.h
-ttmutex.obj: ttmutex.c ttmutex.h ttconfig.h arch\msdos\ft_conf.h
-ttobjs.obj: ttobjs.c ttobjs.h ttconfig.h arch\msdos\ft_conf.h ttengine.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmutex.h ttcache.h \
- tttables.h ttcmap.h ttfile.h ttdebug.h ttcalc.h ttmemory.h ttload.h \
- ttinterp.h ttextend.h
-ttraster.obj: ttraster.c ttraster.h ttconfig.h arch\msdos\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttengine.h tttypes.h ttmutex.h \
- ttdebug.h ttcalc.h ttmemory.h
-extend\ftxcmap.obj: extend\ftxcmap.c extend\ftxcmap.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\msdos\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h
-extend\ftxerr18.obj: extend\ftxerr18.c ttconfig.h arch\msdos\ft_conf.h \
- extend\ftxerr18.h freetype.h fterrid.h ftnameid.h extend\ftxkern.h \
- extend\ftxpost.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h
-extend\ftxgasp.obj: extend\ftxgasp.c extend\ftxgasp.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\msdos\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h
-extend\ftxgdef.obj: extend\ftxgdef.c tttypes.h ttconfig.h arch\msdos\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxgpos.obj: extend\ftxgpos.c tttypes.h ttconfig.h arch\msdos\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxgsub.obj: extend\ftxgsub.c tttypes.h ttconfig.h arch\msdos\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxkern.obj: extend\ftxkern.c extend\ftxkern.h freetype.h fterrid.h \
- ftnameid.h ttextend.h ttconfig.h arch\msdos\ft_conf.h tttypes.h \
- ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttdebug.h \
- ttmemory.h ttfile.h ttload.h tttags.h
-extend\ftxopen.obj: extend\ftxopen.c tttypes.h ttconfig.h arch\msdos\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxpost.obj: extend\ftxpost.c extend\ftxpost.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\msdos\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttload.h ttfile.h \
- ttdebug.h tttags.h ttmemory.h ttextend.h
-extend\ftxsbit.obj: extend\ftxsbit.c extend\ftxsbit.h freetype.h fterrid.h \
- ftnameid.h ttobjs.h ttconfig.h arch\msdos\ft_conf.h ttengine.h \
- tttypes.h ttmutex.h ttcache.h tttables.h ttcmap.h ttfile.h ttdebug.h \
- ttload.h ttmemory.h tttags.h ttextend.h
-extend\ftxwidth.obj: extend\ftxwidth.c extend\ftxwidth.h freetype.h fterrid.h \
- ftnameid.h ttdebug.h ttconfig.h arch\msdos\ft_conf.h tttypes.h \
- ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttfile.h \
- tttags.h ttload.h
-arch\msdos\freetype.obj: arch\msdos\freetype.c ttapi.c ttconfig.h \
- arch\msdos\ft_conf.h freetype.h fterrid.h ftnameid.h ttengine.h \
- tttypes.h ttmutex.h ttcalc.h ttmemory.h ttcache.h ttfile.h ttdebug.h \
- ttobjs.h tttables.h ttcmap.h ttload.h ttgload.h ttraster.h ttextend.h \
- ttcache.c ttcalc.c ttcmap.c ttdebug.c ttgload.c tttags.h ttinterp.c \
- ttinterp.h ttload.c ttobjs.c ttraster.c arch\msdos\hugefile.c \
- ttfile.c arch\msdos\hugemem.c ttmutex.c ttextend.c
-arch\msdos\hugefile.obj: arch\msdos\hugefile.c ttconfig.h arch\msdos\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttfile.c ttdebug.h \
- ttengine.h ttmutex.h ttmemory.h ttfile.h
-arch\msdos\hugemem.obj: arch\msdos\hugemem.c ttdebug.h ttconfig.h \
- arch\msdos\ft_conf.h tttypes.h freetype.h fterrid.h ftnameid.h \
- ttmemory.h ttengine.h ttmutex.h
diff --git a/Build/source/libs/libttf/arch/msdos/freetype.c b/Build/source/libs/libttf/arch/msdos/freetype.c
deleted file mode 100644
index 943d5f24776..00000000000
--- a/Build/source/libs/libttf/arch/msdos/freetype.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* Single object library component for MSDOS. */
-/* Note that low-optimizing 16-bit compilers (such as Borland ones) can't */
-/* successfully compile this file, because it exceeds 64K of code size. */
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-/* first include common core components */
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* then system-specific (or ANSI) components */
-
-#ifdef TT_HUGE_PTR
-#include "arch/msdos/hugefile.c"
-#include "arch/msdos/hugemem.c"
-#else
-#include "ttfile.c"
-#include "ttmemory.c"
-#endif
-#include "ttmutex.c"
-
-/* finally, add some extensions */
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/msdos/ft_conf.h b/Build/source/libs/libttf/arch/msdos/ft_conf.h
deleted file mode 100644
index 0199a5c2027..00000000000
--- a/Build/source/libs/libttf/arch/msdos/ft_conf.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for MSDOS */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-/* Define to empty if the keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H
-
-/* Define if you have the <unistd.h> header file. */
-#if defined( __EMX__ ) || defined( __DJGPP__ ) || defined( __GO32__ )
-/* some compilers are known to have <unistd.h>; */
-/* add yours if needed, and report to us the update. */
-#define HAVE_UNISTD_H
-#else
-/* most MS-DOS compilers lack <unistd.h> */
-#undef HAVE_UNISTD_H
-#endif
-
-/* Define if you need <conio.h> for console I/O functions. */
-#ifdef __EMX__
-#define HAVE_CONIO_H
-#endif
-
-/* Define if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define if you have the <libintl.h> header file. */
-#undef HAVE_LIBINTL_H
-
-/* Define if you have the libintl library. */
-#undef HAVE_LIBINTL
-
-/* DJGPP v.2 may feature the GNU gettext package, with some subtleties. */
-/* The macro HAVE_GETTEXT has to be set in the makefile. */
-#ifdef HAVE_GETTEXT
-#define HAVE_LOCALE_H
-#define HAVE_LIBINTL_H
-#define HAVE_LIBINTL
-#define LOCALEDIR "/usr/djgpp/share/locale"
-/* Due to a name conflict, gettext is renamed gettext__ in DJGPP */
-#define gettext( str ) gettext__( str )
-#endif
-
-/* command.com can't pipe stderr into a file; any message would be */
-/* written into the graphics screen. */
-#define HAVE_PRINT_FUNCTION 1
-
-#define Print( format, ap ) vfprintf( stdout, (format), (ap) )
-
-/* The number of bytes in a int. We use the ANSI header file limits.h */
-/* for determining it since there is no easy way to guess. */
-#include <limits.h>
-#if UINT_MAX == 0xFFFF
-#define SIZEOF_INT 2
-#elif UINT_MAX == 0xFFFFFFFF
-#define SIZEOF_INT 4
-#else
-#error "Unsupported number of bytes in `int' type!"
-#endif
-
-/* The number of bytes in a long. */
-#define SIZEOF_LONG 4
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/msdos/hugefile.c b/Build/source/libs/libttf/arch/msdos/hugefile.c
deleted file mode 100644
index 901e0d6eae5..00000000000
--- a/Build/source/libs/libttf/arch/msdos/hugefile.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************
- *
- * hugefile.c
- *
- * File I/O Component (body) for dealing with "huge" objects under
- * MS-DOS. Relies on the "default" version, with a small hook.
- *
- * Written by Antoine Leca based on ideas from Dave Hoo.
- * Copyright 1999 by Dave Hoo, Antoine Leca,
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 file #includes the normal version, to avoid discrepancies
- * between versions. It uses only ANSI-mandated "tricks", so
- * any ANSI-compliant compiler should be able to compile this file.
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-#include "tttypes.h"
-
-/* Here we include <stdio.h>, to have the proper definition of fread */
-#include <stdio.h>
-
-/* Then, we divert the use of fread to our version */
-#undef fread
-#define fread(ptr, size, n, stream) huge_fread(ptr, size, n, stream)
-
- LOCAL_FUNC
- Long huge_fread ( void *ptr, size_t size, Long n, FILE *stream );
-
-/* Now, we include the "normal" version of ttfile.c */
-/* The ANSI/ISO standard mandates that the include of <stdio.h> */
-/* there have no bad effects. */
-#include "ttfile.c"
-
-/* Then, we define our implementation of fread that makes use of */
-/* "huge"-allocated memory. */
-
-/*******************************************************************
- *
- * Function : huge_fread
- *
- * Description : replacement version of fread that handles
- * "huge"-allocated memory.
- *
- * Input : See the reference for the runtime library function fread
- *
- * Output : See the reference for the runtime library function fread
- *
- * Notes :
- *
- ******************************************************************/
-
- LOCAL_DEF
- Long huge_fread ( void *ptr, size_t size, Long n, FILE *stream )
- {
- char TT_HUGE_PTR * p = (char TT_HUGE_PTR *) ptr;
- ULong left = (ULong)n * size;
- size_t toRead;
-
- while ( left )
- {
- toRead = (left > 0x8000) ? 0x8000 : left;
- if ( (fread)( p, 1, toRead, stream ) != toRead)
- return -1;
- else
- {
- left -= (ULong) toRead;
- p += toRead;
- }
- }
- return n * size;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/msdos/hugemem.c b/Build/source/libs/libttf/arch/msdos/hugemem.c
deleted file mode 100644
index aa44c69f01f..00000000000
--- a/Build/source/libs/libttf/arch/msdos/hugemem.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/*******************************************************************
- *
- * hugemem.c
- *
- * Memory management component (body)
- * for dealing with "huge" objects with 16-bit MS-DOS.
- *
- * Written by Dave Hoo and Antoine Leca.
- * Copyright 1999 by Dave Hoo, Antoine Leca,
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 <limits.h>
-
-#include "ttdebug.h"
-#include "ttmemory.h"
-#include "ttengine.h"
-
-#ifndef TT_HUGE_PTR
-#error "This component needs TT_HUGE_PTR to be #defined."
-#endif
-
-/* ---- Microsoft C compilers support ------------------------------------ */
-
-#if defined( M_I86 ) || defined( _M_I86 )
-
-#include <malloc.h>
-#define huge_alloc( size ) _halloc ( size, 1 )
-#define huge_free( block ) _hfree ( block )
-
-#endif /* Microsoft compilers */
-
-/* ---- Borland C compiler support --------------------------------------- */
-
-#ifdef __TURBOC__
-
-#include <alloc.h>
-#define huge_alloc( size ) farmalloc ( size )
-#define huge_free( block ) farfree ( block )
-
-#endif
-
-#if !defined( huge_alloc ) || !defined( huge_free )
-#error "Your compiler is not (yet) supported. Check the source file!"
-#endif
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE
-#error "This component needs static allocation and is not re-entrant."
-#endif
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_memory
-
-
-#ifdef DEBUG_MEMORY
-
-#include <stdio.h>
-
-#define MAX_TRACKED_BLOCKS 1024
-
- struct TMemRec_
- {
- void* base;
- Long size;
- };
-
- typedef struct TMemRec_ TMemRec;
-
- static TMemRec pointers[MAX_TRACKED_BLOCKS + 1];
-
- static Int num_alloc;
- static Int num_free;
- static Int num_realloc; /* counts only `real' reallocations
- (i.e., an existing buffer will be resized
- to a value larger than zero */
-
- static Int fail_alloc;
- static Int fail_realloc;
- static Int fail_free;
-
-#else
-
- /* We need a tracing stack of the calls to big chunks of memory, */
- /* in order to call the matching version of free(). */
-
-#define MAX_TRACKED_BIGCHUNKS 16
-
- struct TMemRec_
- {
- void* base;
- Long size;
- };
-
- typedef struct TMemRec_ TMemRec;
-
- static TMemRec pointers[MAX_TRACKED_BIGCHUNKS + 1];
-
-#endif /* DEBUG_MEMORY */
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- Long TTMemory_Allocated;
- Long TTMemory_MaxAllocated;
-#endif
-
-
-/*******************************************************************
- *
- * Function : TT_Alloc
- *
- * Description : Allocates memory from the heap buffer.
- *
- * Input : Size size of the memory to be allocated
- * P pointer to a buffer pointer
- *
- * Output : Error code.
- *
- * NOTE : The newly allocated block should _always_ be zeroed
- * on return. Many parts of the engine rely on this to
- * work properly.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Alloc( ULong Size, void** P )
- {
- Int i;
-
-
- if ( !P )
- return TT_Err_Invalid_Argument;
- /* Also see below for another case of "invalid argument". */
-
- if ( Size > 0 )
- {
- if ( Size > ( UINT_MAX & ~0xFu ) )
- *P = (void*)huge_alloc( Size );
- else
- *P = (void*)malloc( Size );
- if ( !*P )
- return TT_Err_Out_Of_Memory;
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated += Size;
- TTMemory_MaxAllocated += Size;
-#endif
-
-#ifdef DEBUG_MEMORY
-
- num_alloc++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != NULL )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_alloc++;
- else
- {
- pointers[i].base = *P;
- pointers[i].size = Size;
- }
-
-#else
-
- if ( Size > ( UINT_MAX & ~0xFu ) )
- {
- i = 0;
- while ( i < MAX_TRACKED_BIGCHUNKS && pointers[i].base != NULL )
- i++;
-
- if ( i >= MAX_TRACKED_BIGCHUNKS )
- /* We fail badly here. Increase MAX_TRACKED_BIGCHUNKS if needed. */
- return TT_Err_Invalid_Argument;
- else
- {
- pointers[i].base = *P;
- pointers[i].size = Size;
- }
- }
-
-#endif /* DEBUG_MEMORY */
-
- if ( Size > ( UINT_MAX & ~0xFu ) )
- {
- char TT_HUGE_PTR * p = (char TT_HUGE_PTR *) *P;
- ULong left = (ULong)Size;
- size_t toClear;
-
- while ( left )
- {
- toClear = (left > 0xFF00) ? 0xFF00 : left;
- MEM_Set( p, 0, toClear );
- left -= (ULong) toClear;
- p += toClear;
- }
- }
- else
- MEM_Set( *P, 0, Size );
- }
- else
- *P = NULL;
-
- return TT_Err_Ok;
- }
-
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*******************************************************************
- *
- * Function : TT_Realloc
- *
- * Description : Reallocates memory from the heap buffer.
- *
- * Input : Size new size of the memory to be allocated;
- * if zero, TT_Free() will be called
- * P pointer to a buffer pointer; if *P == NULL,
- * TT_Alloc() will be called
- *
- * Output : Error code.
- *
- * NOTES : It's not necessary to zero the memory in case the
- * reallocated buffer is larger than before -- the
- * application has to take care of this.
- *
- * If the memory request fails, TT_Free() will be
- * called on *P, and TT_Err_Out_Of_Memory returned.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Realloc( ULong Size, void** P )
- {
- void* Q;
-
-#ifdef DEBUG_MEMORY
- Int i;
-#endif
-
-
- if ( !P )
- return TT_Err_Invalid_Argument;
-
- if ( !*P )
- return TT_Alloc( Size, P );
-
- if ( Size == 0 )
- return TT_Free( P );
-
- if ( Size > ( UINT_MAX & ~0xFu ) )
- Q = NULL; /* Do not even try to deal with big chunks of memory. */
- else
- Q = (void*)realloc( *P, Size );
- if ( !Q )
- {
- TT_Free( *P );
- return TT_Err_Out_Of_Memory;
- }
-
-#ifdef DEBUG_MEMORY
-
- num_realloc++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != *P )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_realloc++;
- else
- {
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated += Size - pointers[i].size;
- if ( Size > pointers[i].size )
- TTMemory_MaxAllocated += Size - pointers[i].size;
-#endif
-
- pointers[i].base = Q;
- pointers[i].size = Size;
- }
-#endif /* DEBUG_MEMORY */
-
- *P = Q;
-
- return TT_Err_Ok;
- }
-
-
-#endif /* TT_CONFIG_OPTION_EXTEND_ENGINE */
-
-
-/*******************************************************************
- *
- * Function : TT_Free
- *
- * Description : Releases a previously allocated block of memory.
- *
- * Input : P pointer to memory block
- *
- * Output : Always SUCCESS.
- *
- * Note : The pointer must _always_ be set to NULL by this function.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Free( void** P )
- {
- Int i;
- Long Size = 0;
-
-
- if ( !P || !*P )
- return TT_Err_Ok;
-
-#ifdef DEBUG_MEMORY
-
- num_free++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != *P )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_free++;
- else
- {
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated -= pointers[i].size;
-#endif
-
- Size = pointers[i].size;
- pointers[i].base = NULL;
- pointers[i].size = 0;
- }
-
-#else
-
- i = 0;
- while ( i < MAX_TRACKED_BIGCHUNKS && pointers[i].base != *P )
- i++;
-
- /* If we did not found the pointer, then this is a "small" chunk. */
-
- if ( i < MAX_TRACKED_BIGCHUNKS )
- {
- Size = pointers[i].size;
- pointers[i].base = NULL;
- pointers[i].base = NULL;
- }
-
-#endif /* DEBUG_MEMORY */
-
- if ( Size > ( UINT_MAX & ~0xFu ) )
- huge_free( *P );
- else
- free( *P );
-
- *P = NULL;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTMemory_Init
- *
- * Description : Initializes the memory.
- *
- * Output : Always SUCCESS.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTMemory_Init( void )
- {
-#ifdef DEBUG_MEMORY
- Int i;
-
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- pointers[i].base = NULL;
- pointers[i].size = 0;
- }
-
- num_alloc = 0;
- num_realloc = 0;
- num_free = 0;
-
- fail_alloc = 0;
- fail_realloc = 0;
- fail_free = 0;
-#else
- Int i;
-
- for ( i = 0; i < MAX_TRACKED_BIGCHUNKS; i++ )
- {
- pointers[i].base = NULL;
- pointers[i].size = 0;
- }
-#endif
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated = 0;
- TTMemory_MaxAllocated = 0;
-#endif
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTMemory_Done
- *
- * Description : Finalizes memory usage.
- *
- * Output : Always SUCCESS.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTMemory_Done( void )
- {
-#ifdef DEBUG_MEMORY
- Int i, num_leaked, tot_leaked;
-
-
- num_leaked = 0;
- tot_leaked = 0;
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- if ( pointers[i].base )
- {
- num_leaked ++;
- tot_leaked += pointers[i].size;
- }
- }
-
- fprintf( stderr,
- "%d memory allocations, of which %d failed\n",
- num_alloc,
- fail_alloc );
-
- fprintf( stderr,
- "%d memory reallocations, of which %d failed\n",
- num_realloc,
- fail_realloc );
-
- fprintf( stderr,
- "%d memory frees, of which %d failed\n",
- num_free,
- fail_free );
-
- if ( num_leaked > 0 )
- {
- fprintf( stderr,
- "There are %d leaked memory blocks, totalizing %d bytes\n",
- num_leaked, tot_leaked );
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- if ( pointers[i].base )
- {
- fprintf( stderr,
- "index: %4d (base: $%08lx, size: %08ld)\n",
- i,
- (long)pointers[i].base,
- pointers[i].size );
- }
- }
- }
- else
- fprintf( stderr, "No memory leaks !\n" );
-
-#endif /* DEBUG_MEMORY */
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/msdos/makedep b/Build/source/libs/libttf/arch/msdos/makedep
deleted file mode 100644
index d566ed84243..00000000000
--- a/Build/source/libs/libttf/arch/msdos/makedep
+++ /dev/null
@@ -1,26 +0,0 @@
-# makedep
-#
-# This shell script creates a dependency file necessary for older compilers
-# on the MS-DOS platform.
-
-echo "\
-# This dependency file to be used with various MS-DOS compilers
-# has been generated automatically with the script \`makedep' on
-# `date +%d-%b-%Y`.
-" > depend.dos
-
-(cd ../..
- gcc -MM -Iarch/msdos -I. *.c | \
- sed -e "s/\.o:/.obj:/" -e "s:/:\\\\:g") >> depend.dos
-
-(cd ../..
- gcc -MM -Iarch/msdos -I. -Iextend extend/*.c | \
- sed -e "s/^\(.*\)\.o:/extend\\\\\1.obj:/" -e "s:/:\\\\:g") >> depend.dos
-
-(cd ../..
- gcc -MM -Iarch/msdos -I. -Iextend \
- -DTT_HUGE_PTR -Dhuge_alloc -Dhuge_free arch/msdos/*.c | \
- sed -e "s/^\(.*\)\.o:/arch\\\\msdos\\\\\1.obj:/" \
- -e "s:/:\\\\:g") >> depend.dos
-
-# eof
diff --git a/Build/source/libs/libttf/arch/os2/Makefile.dm b/Build/source/libs/libttf/arch/os2/Makefile.dm
deleted file mode 100644
index a5c18f714a5..00000000000
--- a/Build/source/libs/libttf/arch/os2/Makefile.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library and test programs for emx-gcc under OS/2
-#
-# You will need dmake.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# dmake -r -f arch/os2/Makefile.dm
-
-ARCH = arch/os2
-FT_MAKEFILE = $(ARCH)/Makefile.dm
-FT_MAKE = dmake -r
-
-.IMPORT: COMSPEC
-SHELL := $(COMSPEC)
-SHELLFLAGS := /c
-GROUPSHELL := $(SHELL)
-GROUPFLAGS := $(SHELLFLAGS)
-GROUPSUFFIX := .cmd
-SHELLMETAS := *"?<>&|
-
-CC = gcc
-
-CFLAGS = -Wall -O2 -g -ansi -pedantic -I$(ARCH) -I. -Iextend
-# CFLAGS = -Wall -ansi -O2 -s -I$(ARCH) -I. -Iextend
-
-TTFILE = $(ARCH)/os2file.c
-TTMEMORY = ./ttmemory.c
-TTMUTEX = ./ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxopen.c \
- extend/ftxgdef.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttgload.c ttinterp.c ttload.c ttobjs.c \
- ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-.PHONY: all debug clean distclean depend
-
-
-all:
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S libttf.a
-
-debug:
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M libttf.a
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
- $(CC) $(CFLAGS) -c -o $@ $(SRC_S)
-
-
-libttf.a: $($(LIB_FILES))
- +-del $@
- ar src $@ @$(mktmp $(<:t"\n")\n)
-
-clean:
- -+del $(subst,/,\ $($(LIB_FILES)))
-
-distclean: clean
- -+del dep.end libttf.a
-
-# depend: $(SRC_S) $(SRC_M) $(SRC_X)
-# $(CC) -E -M @$(mktmp $(<:t"\n")\n) > dep.end
-
-# ifeq (dep.end,$(wildcard dep.end))
-# include dep.end
-# endif
-
-# end of Makefile.dm
diff --git a/Build/source/libs/libttf/arch/os2/Makefile.emx b/Build/source/libs/libttf/arch/os2/Makefile.emx
deleted file mode 100644
index 4ba9128def7..00000000000
--- a/Build/source/libs/libttf/arch/os2/Makefile.emx
+++ /dev/null
@@ -1,91 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library and test programs for emx-gcc under OS/2.
-#
-# You will need GNU make.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -f arch/os2/Makefile.emx
-
-ARCH = arch/os2
-FT_MAKEFILE = $(ARCH)/Makefile.emx
-
-CC = gcc
-
-#CFLAGS = -W -Wall -O0 -g -ansi -pedantic -I$(ARCH) -I. -Iextend
-
-CFLAGS = -Wall -O3 -fno-inline -fomit-frame-pointer \
- -g -ansi -pedantic -I$(ARCH) -I. -Iextend
-
-#CFLAGS = -Wall -ansi -pedantic -O2 -s -I$(ARCH) -I. -Iextend
-
-TTFILE = $(ARCH)/os2file.c
-TTMEMORY = ./ttmemory.c
-TTMUTEX = ./ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxopen.c \
- extend/ftxgdef.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttgload.c ttinterp.c ttload.c ttobjs.c \
- ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-SRCD_S = $(ARCH)/freetypd.c
-OBJD_S = $(SRCD_S:.c=.o)
-OBJDS_S = $(OBJD_S) $(OBJS_X)
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-.PHONY: all debug clean distclean depend
-
-
-all:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S libttf.a
-
-debug:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M libttf.a
-
-debugger:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJDS_S libttfd.a
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-$(OBJD_S): $(SRCD_S) $(SRC_M)
-
-libttf.a: $($(LIB_FILES))
- -del $@
- ar src $@ $^
-
-libttfd.a: $(OBJDS)
-
-libttfd.a: $(OBJDS)
- -del $@
- ar src $@ $^
-
-clean:
- -del $(subst /,\,$(OBJS_S))
- -del $(subst /,\,$(OBJS_M))
-
-distclean: clean
- -del dep.end
- -del libttf.a
-
-depend: $(SRC_S) $(SRC_M) $(SRC_X)
- $(CC) -E -M $^ > dep.end
-
-ifeq (dep.end,$(wildcard dep.end))
- include dep.end
-endif
-
-# end of Makefile.emx
diff --git a/Build/source/libs/libttf/arch/os2/Makefile.icc b/Build/source/libs/libttf/arch/os2/Makefile.icc
deleted file mode 100644
index e633c8d9408..00000000000
--- a/Build/source/libs/libttf/arch/os2/Makefile.icc
+++ /dev/null
@@ -1,73 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library and test programs for IBM VisualAge C++ under OS/2.
-#
-# You will need nmake.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# nmake -f arch\os2\Makefile.icc
-#
-
-ARCH = arch\os2
-FT_MAKEFILE = $(ARCH)\Makefile.icc
-FT_MAKE = $(MAKE) -nologo
-
-CC = icc
-CFLAGS = -O+ -Ti- -Tm- -Sa -W3 -Wpro- -Wcnd- -Q+ -Iarch\os2 -I. -Iextend
-
-# NOTE: Optimizations are discarded, as it seems that Visual Age
-# is buggy when producing ttraster.obj. The resulting code
-# crashes under some circumstances (performing vertical dropout
-# control when rendering smoothed outlines)!
-
-TTFILE = $(ARCH)\os2file.c
-TTMEMORY = .\ttmemory.c
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c \
- extend\ftxcmap.c extend\ftxwidth.c extend\ftxsbit.c \
- extend\ftxgsub.c extend\ftxgpos.c extend\ftxopen.c \
- extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttgload.c ttinterp.c ttload.c ttobjs.c ttraster.c \
- ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-all:
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES="$(OBJS_S)" libttf.lib
-
-debug:
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES="$(OBJS_M)" libttf.lib
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
- $(CC) -C $(CFLAGS) /Fo$@ $*.c
-
-$(OBJS_X):
- $(CC) -C $(CFLAGS) /Fo$@ $*.c
-
-$(ARCH)\os2file.obj:
- $(CC) -C $(CFLAGS) /Fo$@ $*.c
-
-libttf.lib: $(LIB_FILES)
- !ilib /nologo /noignorecase /nobackup $@ +$?,,
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del arch\os2\*.obj
-
-distclean: clean
- -del libttf.lib
-
-# end of Makefile.icc
diff --git a/Build/source/libs/libttf/arch/os2/Makefile.wat b/Build/source/libs/libttf/arch/os2/Makefile.wat
deleted file mode 100644
index 4fe8adff09c..00000000000
--- a/Build/source/libs/libttf/arch/os2/Makefile.wat
+++ /dev/null
@@ -1,88 +0,0 @@
-# This file is part of the FreeType project.
-#
-# This builds the Watcom library with Watcom's wcc386 under OS/2.
-#
-# You'll need Watcom's wmake.
-#
-#
-# Invoke by "wmake -f arch\os2\Makefile.wat" when in the "lib" directory
-#
-# This will build "freetype\lib\libttf.lib"
-
-ARCH = arch\os2
-FT_MAKEFILE = $(ARCH)\Makefile.wat
-FT_MAKE = wmake -h
-
-
-.EXTENSIONS:
-.EXTENSIONS: .lib .obj .c .h
-.obj:.;.\extend;.\$(ARCH)
-.c:.;.\extend;.\$(ARCH)
-.h:.;.\extend;.\$(ARCH)
-
-CC = wcc386
-
-CCFLAGS = /otexanl+ /s /w5 /zq -Iarch\os2 -I. -Iextend
-
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-TTMUTEX = .\ttmutex.c
-
-TTFILE_OBJ = ttfile.obj
-TTMEMORY_OBJ = ttmemory.obj
-TTMUTEX_OBJ = ttmutex.obj
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-PORT_OBJS = $(TTFILE_OBJ) $(TTMEMORY_OBJ) $(TTMUTEX_OBJ)
-
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c &
- extend\ftxcmap.c extend\ftxwidth.c extend\ftxsbit.c &
- extend\ftxgsub.c extend\ftxgpos.c extend\ftxopen.c &
- extend\ftxgdef.c
-
-OBJS_X = extend\ftxgasp.obj extend\ftxkern.obj extend\ftxpost.obj &
- extend\ftxcmap.obj extend\ftxwidth.obj extend\ftxsbit.obj &
- extend\ftxgsub.obj extend\ftxgpos.obj extend\ftxopen.obj &
- extend\ftxgdef.obj
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c &
- ttgload.c ttinterp.c ttload.c ttobjs.c &
- ttraster.c ttextend.c $(PORT)
-
-OBJS_M = ttapi.obj ttcache.obj ttcalc.obj ttcmap.obj &
- ttgload.obj ttinterp.obj ttload.obj ttobjs.obj &
- ttraster.obj ttextend.obj $(PORT_OBJS) $(OBJS_X)
-
-SRC_S = freetype.c
-OBJ_S = freetype.obj
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-.c.obj:
- $(CC) $(CCFLAGS) $[* /fo=$[*.obj
-
-all: .symbolic
- $(FT_MAKE) -f $(FT_MAKEFILE) libttf.lib
-
-debug: .symbolic
- $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES="$(OBJS_M)" libttf.lib
-
-
-libttf.lib: $(OBJS_M)
- wlib -q -n libttf.lib $(OBJS_M)
-
-# is this correct? Know nothing about wmake and the Watcom compiler...
-$(OBJ_S): $(SRC_S) $(SRC_M)
- $(CC) $(CCFLAGS) $(SRC_S) /fo=$(OBJ_S)
-
-clean: .symbolic
- @-erase $(OBJS_M)
- @-erase *.err
-
-distclean: .symbolic clean
- @-erase libttf.lib
-
-new: .symbolic
- @-wtouch *.c
-
-# end of Makefile.wat
diff --git a/Build/source/libs/libttf/arch/os2/freetype.c b/Build/source/libs/libttf/arch/os2/freetype.c
deleted file mode 100644
index 7a115cff672..00000000000
--- a/Build/source/libs/libttf/arch/os2/freetype.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* Single file library component for OS/2 */
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-/* first include common core components */
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* then system-specific (or ANSI) components */
-
-#include "os2file.c"
-#include "ttmemory.c"
-#include "ttmutex.c"
-
-/* the extensions are compiled separately, but we need to */
-/* include the file ttextend.c if we want to support them */
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/os2/ft_conf.h b/Build/source/libs/libttf/arch/os2/ft_conf.h
deleted file mode 100644
index c7026c711e2..00000000000
--- a/Build/source/libs/libttf/arch/os2/ft_conf.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/*******************************************************************
- *
- * ft_conf.h (OS/2 version)
- *
- * High-level interface specification.
- *
- * Copyright 1996-1998 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.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 contain the definition of several
- * configuration-specific macros.
- *
- ******************************************************************/
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-
-/**********************************************************************/
-/* */
-/* We begin by a series of macros that are automatically set by the */
-/* 'configure' script on Unix. They must be set manually on OS/2, */
-/* so here they are : */
-/* */
-/**********************************************************************/
-
-#define OS2
-
-/* Define to empty if the keyword "const" does not work. */
-/* #undef const */
-
-/* The number of bytes in a int. */
-#define SIZEOF_INT 4
-
-/* The number of bytes in a long. */
-#define SIZEOF_LONG 4
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you need <conio.h> for console I/O functions. */
-#if defined(__EMX__) || defined(__IBMC__)
-#define HAVE_CONIO_H
-#endif
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/os2/os2file.c b/Build/source/libs/libttf/arch/os2/os2file.c
deleted file mode 100644
index e6003fd4dd3..00000000000
--- a/Build/source/libs/libttf/arch/os2/os2file.c
+++ /dev/null
@@ -1,1237 +0,0 @@
-/*******************************************************************
- *
- * os2file.c (OS2 version) 2.1
- *
- * File I/O Component (body).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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:
- *
- * This implementation relies on the OS/2 file API. It was provided
- * by the PM FreeType DLL author, Michal Necasek.
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-
-#include <os2.h> /* !Mike! */
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "freetype.h"
-#include "tttypes.h"
-#include "ttdebug.h"
-#include "ttengine.h"
-#include "ttmutex.h"
-#include "ttmemory.h"
-#include "ttfile.h" /* our prototypes */
-
-
-/* For now, we don't define additional error messages in the core library */
-/* to report open-on demand errors. Define these errors as standard ones. */
-
-#define TT_Err_Could_Not_ReOpen_File TT_Err_Could_Not_Open_File
-#define TT_Err_Could_Not_ReSeek_File TT_Err_Could_Not_Open_File
-
-
- /* This definition is mandatory for each file component! */
- EXPORT_FUNC
- const TFileFrame TT_Null_FileFrame = { NULL, 0, 0 };
-
-
-/* It has proven useful to do some bounds checks during development phase. */
-/* They should probably be undefined for speed reasons in a later release. */
-
-#if 0
-#define CHECK_FRAME( frame, n ) \
- do { \
- if ( frame.cursor + n > frame.address + frame.size ) \
- Panic( "Frame boundary error!\n" ); \
- } while ( 0 )
-#else
-#define CHECK_FRAME( frame, n ) \
- do { \
- } while ( 0 )
-#endif
-
-
- /* Because a stream can be flushed, i.e., its file handle can be */
- /* closed to save system resources, we must keep the stream's file */
- /* pathname to be able to re-open it on demand when it is flushed. */
-
- struct _TStream_Rec
- {
- Bool opened; /* is the stream handle opened ? */
- String* name; /* the file's pathname */
- Long position; /* current pos. within the file */
-
- HFILE file; /* file handle !Mike! */
- Long base; /* stream base in file */
- Long size; /* stream size in file */
- };
-
- typedef struct _TStream_Rec TStream_Rec;
- typedef TStream_Rec* PStream_Rec;
-
-
- /* We support embedded TrueType files by allowing them to be */
- /* inside any file, at any location, hence the 'base' argument. */
- /* Note, however, that the current implementation does not allow you */
- /* to specify a 'base' index when opening a file. */
- /* (will come later) */
- /* I still don't know if this will turn out useful... - DavidT */
-
-#define STREAM2REC( x ) ( (TStream_Rec*)HANDLE_Val( x ) )
-
- static TT_Error Stream_Activate ( PStream_Rec stream );
- static TT_Error Stream_Deactivate( PStream_Rec stream );
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /**** ****/
- /**** N O N R E E N T R A N T I M P L E M E N T A T I O N ****/
- /**** ****/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
- /* In non-reentrant builds, we allocate a single block where we'll */
- /* place all the frames smaller than FRAME_CACHE_SIZE, rather than */
- /* allocating a new block on each access. Bigger frames will be */
- /* malloced normally in the heap. */
- /* */
- /* See TT_Access_Frame() and TT_Forget_Frame() for details. */
-
-#define FRAME_CACHE_SIZE 2048
-
- /* The TFile_Component structure holds all the data that was */
- /* previously declared static or global in this component. */
- /* */
- /* It is accessible through the 'engine.file_component' */
- /* variable in re-entrant builds, or directly through the */
- /* static 'files' variable in other builds. */
-
- struct _TFile_Component
- {
- TMutex lock; /* used by the thread-safe build only */
- Byte* frame_cache; /* frame cache */
- PStream_Rec stream; /* current stream */
- TFileFrame frame; /* current frame */
- };
-
- typedef struct _TFile_Component TFile_Component;
-
- static TFile_Component files;
-
-#define CUR_Stream files.stream
-#define CUR_Frame files.frame
-
-#define STREAM_VARS /* void */
-#define STREAM_VAR /* void */
-
-/* The macro CUR_Stream denotes the current input stream. */
-/* Note that for the re-entrant version, the 'stream' name has been */
-/* chosen according to the macro STREAM_ARGS. */
-
-/* The macro CUR_Frame denotes the current file frame. */
-/* Note that for the re-entrant version, the 'frame' name has been */
-/* chosen according to the macro FRAME_ARGS. */
-
-/* The macro STREAM_VAR is used when calling public functions */
-/* that need an 'optional' stream argument. */
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- TT_Error error;
-
- MUTEX_Create( files.lock );
- files.stream = NULL;
- ZERO_Frame( files.frame );
-
- if ( ALLOC( files.frame_cache, FRAME_CACHE_SIZE ) )
- return error;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- FREE( files.frame_cache );
- MUTEX_Destroy( files.lock );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Copies or duplicates a given stream.
- *
- * Input : org_stream original stream
- * stream target stream (copy or duplicate)
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream org_stream,
- TT_Stream* stream )
- {
- MUTEX_Lock( files.lock ); /* lock file mutex */
-
- *stream = org_stream; /* copy the stream */
- files.stream = STREAM2REC( org_stream ); /* set current stream */
-
- Stream_Activate( files.stream );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream target stream
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- HANDLE_Set( *stream, NULL );
- MUTEX_Release( files.lock );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function fails if the byte range is not within the
- * the file, or if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big in both cases).
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( size <= FRAME_CACHE_SIZE )
- {
- /* use the cache */
- CUR_Frame.address = files.frame_cache;
- CUR_Frame.size = FRAME_CACHE_SIZE;
- }
- else
- {
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
- }
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if ( error )
- {
- if ( size > FRAME_CACHE_SIZE )
- FREE( CUR_Frame.address );
- CUR_Frame.address = NULL;
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Check_And_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * `size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function truncates `size' if the byte range is not
- * within the file.
- *
- * It will fail if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big).
- *
- * It will fail if you make two consecutive calls
- * to TT_Access_Frame(), without a TT_Forget_Frame() between
- * them.
- *
- * The only difference with TT_Access_Frame() is that we
- * check that the frame is within the current file. We
- * otherwise truncate it.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
- Long readBytes, requested;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( size <= FRAME_CACHE_SIZE )
- {
- /* use the cache */
- CUR_Frame.address = files.frame_cache;
- CUR_Frame.size = FRAME_CACHE_SIZE;
- }
- else
- {
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
- }
-
- requested = size;
- readBytes = CUR_Stream->size - TT_File_Pos( STREAM_VAR );
- if ( size > readBytes )
- size = readBytes;
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if ( error )
- {
- if ( requested > FRAME_CACHE_SIZE )
- FREE( CUR_Frame.address );
- CUR_Frame.address = NULL;
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Forget_Frame
- *
- * Description : Releases a cached frame after reading.
- *
- * Input : None
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Forget_Frame( FRAME_ARG )
- {
- if ( CUR_Frame.address == NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( CUR_Frame.size > FRAME_CACHE_SIZE )
- FREE( CUR_Frame.address );
-
- ZERO_Frame( CUR_Frame );
-
- return TT_Err_Ok;
- }
-
-
-#else /* TT_CONFIG_OPTION_THREAD_SAFE */
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /******** ********/
- /******** R E E N T R A N T I M P L E M E N T A T I O N ********/
- /******** ********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-/* a simple macro to access the file component's data */
-#define files ( *((TFile_Component*)engine.file_component) )
-
-#define CUR_Stream STREAM2REC( stream ) /* re-entrant macros */
-#define CUR_Frame (*frame)
-
-#define STREAM_VARS stream,
-#define STREAM_VAR stream
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Duplicates a stream for a new usage.
- *
- * Input : input_stream source stream to duplicate
- * copy address of target duplicate stream
- *
- * Output : error code.
- * The target stream is set to NULL in case of failure.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream input_stream,
- TT_Stream* copy )
- {
- PStream_Rec rec = STREAM2REC( input_stream );
-
- return TT_Open_Stream( rec->name, copy );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream target stream
- *
- * Output :
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- return TT_Close_Stream( stream );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function fails if the byte range is not within the
- * the file, or if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big in both cases).
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS int size )
- {
- TT_Error error;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if ( error )
- {
- FREE( CUR_Frame.address );
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Check_And_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * `size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function truncates `size' if the byte range is not
- * within the file.
- *
- * It will fail if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big).
- *
- * It will fail if you make two consecutive calls
- * to TT_Access_Frame(), without a TT_Forget_Frame() between
- * them.
- *
- * The only difference with TT_Access_Frame() is that we
- * check that the frame is within the current file. We
- * otherwise truncate it.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS int size )
- {
- TT_Error error;
- Long readBytes;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
-
- readBytes = CUR_Stream->size - TT_File_Pos( STREAM_VAR );
- if ( size > readBytes )
- size = readBytes;
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if ( error )
- {
- FREE( CUR_Frame.address );
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Forget_Frame
- *
- * Description : Releases a cached frame after reading.
- *
- * Input : None
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Forget_Frame( FRAME_ARG )
- {
- if ( CUR_Frame.address == NULL )
- return TT_Err_Nested_Frame_Access;
-
- FREE( CUR_Frame.address );
- ZERO_Frame( CUR_Frame );
-
- return TT_Err_Ok;
- }
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /*********** ***********/
- /*********** C O M M O N I M P L E M E N T A T I O N ***********/
- /*********** ***********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-/*******************************************************************
- *
- * Function : Stream_Activate
- *
- * Description : activates a stream, this will either:
- * - open a new file handle if the stream is closed
- * - move the stream to the head of the linked list
- *
- * Input : stream the stream to activate
- *
- * Output : error condition.
- *
- * Note : this function is also called with fresh new streams
- * created by TT_Open_Stream(). They have their 'size'
- * field set to -1.
- *
- ******************************************************************/
-
- static TT_Error Stream_Activate( PStream_Rec stream )
- {
- ULONG ulAction; /* !Mike! */
-
- if ( !stream->opened )
- {
-#if 0
- if ( !(stream->file = fopen( stream->name, "rb" )) ) /* !Mike! */
-#endif
-
-/* XXX : Strange. GCC/EMX wants an (Byte*) for the file name? */
-#ifdef __EMX__
-
- if ( DosOpen( (Byte*)stream->name, &(stream->file),
- &ulAction, 0,
- 0, OPEN_ACTION_OPEN_IF_EXISTS,
- OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, NULL ) )
- return TT_Err_Could_Not_ReOpen_File;
-
-#else
-
- if ( DosOpen( stream->name, &(stream->file),
- &ulAction, 0,
- 0, OPEN_ACTION_OPEN_IF_EXISTS,
- OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, NULL ) )
- return TT_Err_Could_Not_ReOpen_File;
-
-#endif /* __EMX__ */
-
- stream->opened = TRUE;
-
- /* A newly created stream has a size field of -1 */
- if ( stream->size < 0 )
- {
-#if 0
- fseek( stream->file, 0, SEEK_END ); /* !Mike! */
- stream->size = ftell( stream->file );
-#endif
-
- DosSetFilePtr( stream->file, 0, FILE_END, (ULONG *)&(stream->size) );
-#if 0
- fseek( stream->file, 0, SEEK_SET );
-#endif
-
- DosSetFilePtr( stream->file, 0, FILE_BEGIN, &ulAction );
- }
-
- /* Reset cursor in file */
- if ( stream->position )
- {
-#if 0 /* !Mike! */
- if ( fseek( stream->file, stream->position, SEEK_SET ) != 0 )
-#endif
-
- if ( DosSetFilePtr( stream->file, stream->position,
- FILE_BEGIN, &ulAction ) )
- {
- /* error during seek */
-#if 0
- fclose( stream->file ); /* !Mike! */
-#endif
-
- DosClose( stream->file );
- stream->opened = FALSE;
- return TT_Err_Could_Not_ReSeek_File;
- }
- }
- }
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Stream_DeActivate
- *
- * Description : deactivates a stream, this will:
- * - close its file handle if it was opened
- * - remove it from the opened list if necessary
- *
- * Input : stream the stream to deactivate
- *
- * Output : Error condition
- *
- * Note : the function is called whenever a stream is deleted
- * (_not_ when a stream handle's is closed due to an
- * activation). However, the stream record isn't
- * destroyed by it...
- *
- ******************************************************************/
-
- static TT_Error Stream_Deactivate( PStream_Rec stream )
- {
- if ( stream->opened )
- {
- /* Save its current position within the file */
-#if 0
- stream->position = ftell( stream->file ); /* !Mike! */
-#endif
-
- DosSetFilePtr( stream->file, 0, FILE_CURRENT,
- (ULONG *)&(stream->position) );
-#if 0
- fclose( stream->file ); /* !Mike! */
-#endif
-
- DosClose( stream->file );
- stream->file = 0;
- stream->opened = FALSE;
- }
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Stream_Size
- *
- * Description : Returns the length of a given stream, even if it
- * is flushed.
- *
- * Input : stream the stream
- *
- * Output : length of stream in bytes.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_Stream_Size( TT_Stream stream )
- {
- PStream_Rec rec = STREAM2REC( stream );
-
-
- if ( rec )
- return rec->size;
- else
- return 0; /* invalid stream - return 0 */
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Open_Stream
- *
- * Description : Opens the font file and saves the total file size.
- *
- * Input : error address of stream's error variable
- * (re-entrant build only)
- * filepathname pathname of the file to open
- * stream address of target TT_Stream structure
- *
- * Output : SUCCESS on sucess, FAILURE on error.
- * The target stream is set to -1 in case of failure.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TT_Open_Stream( const String* filepathname,
- TT_Stream* stream )
- {
- int len;
- TT_Error error;
- PStream_Rec stream_rec;
-
-
- if ( ALLOC( *stream, sizeof ( TStream_Rec ) ) )
- return error;
-
- stream_rec = STREAM2REC( *stream );
-
- stream_rec->file = NULLHANDLE; /* !Mike! */
- stream_rec->size = -1;
- stream_rec->base = 0;
- stream_rec->opened = FALSE;
- stream_rec->position = 0;
-
- len = strlen( filepathname ) + 1;
- if ( ALLOC( stream_rec->name, len ) )
- goto Fail;
-
- strncpy( (String*)stream_rec->name, filepathname, len );
-
- error = Stream_Activate( stream_rec );
- if ( error )
- goto Fail_Activate;
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- CUR_Stream = stream_rec;
-#endif
-
- return TT_Err_Ok;
-
- Fail_Activate:
- FREE( stream_rec->name );
- Fail:
- FREE( stream_rec );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Close_Stream
- *
- * Description : Closes a stream.
- *
- * Input : stream address of target TT_Stream structure
- *
- * Output : SUCCESS (always).
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TT_Close_Stream( TT_Stream* stream )
- {
- PStream_Rec rec = STREAM2REC( *stream );
-
-
- Stream_Deactivate( rec );
- FREE( rec->name );
- FREE( rec );
-
- HANDLE_Set( *stream, NULL );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Flush_Stream
- *
- * Description : Flushes a stream, i.e., closes its file handle.
- *
- * Input : stream address of target TT_Stream structure
- *
- * Output : Error code
- *
- * NOTE : Never flush the current opened stream. This means that
- * you should _never_ call this function between a
- * TT_Use_Stream() and a TT_Done_Stream()!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Flush_Stream( TT_Stream* stream )
- {
- PStream_Rec rec = STREAM2REC( *stream );
-
-
- if ( rec )
- {
- Stream_Deactivate( rec );
- return TT_Err_Ok;
- }
- else
- return TT_Err_Invalid_Argument;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Seek_File
- *
- * Description : Seeks the file cursor to a different position.
- *
- * Input : position new position in file
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Seek_File( STREAM_ARGS long position )
- {
- ULONG ibActual; /* !Mike! */
-
-
- position += CUR_Stream->base;
-
-#if 0
- if ( fseek( CUR_Stream->file, position, SEEK_SET ) ) /* !Mike! */
-#endif
-
- if ( DosSetFilePtr( CUR_Stream->file, position, FILE_BEGIN , &ibActual ) )
- return TT_Err_Invalid_File_Offset;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Skip_File
- *
- * Description : Skips forward the file cursor.
- *
- * Input : distance number of bytes to skip
- *
- * Output : see TT_Seek_File()
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Skip_File( STREAM_ARGS long distance )
- {
- ULONG ibActual; /* !Mike! */
-
-
-#if 0
- return TT_Seek_File( STREAM_VARS ftell( CUR_Stream->file ) -
- CUR_Stream->base + distance ); /* !Mike! */
-#endif
-
- DosSetFilePtr( CUR_Stream->file, 0, FILE_CURRENT, &ibActual );
- return TT_Seek_File( STREAM_VARS ibActual - CUR_Stream->base + distance );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_File
- *
- * Description : Reads a chunk of the file and copies it to memory.
- *
- * Input : buffer target buffer
- * count length in bytes to read
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_File( STREAM_ARGS void* buffer, long count )
- {
- ULONG cbActual; /* !Mike! */
-
-#if 0 /* !Mike! */
- if ( fread( buffer, 1, count, CUR_Stream->file ) != (unsigned long)count )
-#endif
-
- DosRead( CUR_Stream->file, buffer, count, &cbActual );
- if ( cbActual != (unsigned long)count )
- return TT_Err_Invalid_File_Read;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_At_File
- *
- * Description : Reads file at a specified position.
- *
- * Input : position position to seek to before read
- * buffer target buffer
- * count number of bytes to read
- *
- * Output : SUCCESS on success. FAILURE if error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_At_File( STREAM_ARGS long position,
- void* buffer,
- long count )
- {
- TT_Error error;
-
-
- if ( ( error = TT_Seek_File( STREAM_VARS position ) ) ||
- ( error = TT_Read_File( STREAM_VARS buffer, count ) ) )
- return error;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_File_Pos
- *
- * Description : Returns current file seek pointer.
- *
- * Input : none
- *
- * Output : current file position
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_File_Pos( STREAM_ARG )
- {
- ULONG ibActual; /* !Mike! */
-
-
-#if 0
- return ftell( CUR_Stream->file ) - CUR_Stream->base; /* !Mike! */
-#endif
-
- DosSetFilePtr( CUR_Stream->file, 0, FILE_CURRENT, &ibActual );
- return ibActual - CUR_Stream->base;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Byte
- *
- * Description : Extracts a byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted Byte.
- *
- ******************************************************************/
-#if 0
- EXPORT_FUNC
- Byte TT_Get_Byte( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Byte)(*CUR_Frame.cursor++);
- }
-#endif
-
-/*******************************************************************
- *
- * Function : GET_Char
- *
- * Description : Extracts a signed byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted char.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Char TT_Get_Char( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Char)(*CUR_Frame.cursor++);
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Short
- *
- * Description : Extracts a short from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted short.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- short TT_Get_Short( FRAME_ARG )
- {
- short getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = ((short)CUR_Frame.cursor[0] << 8) |
- (short)CUR_Frame.cursor[1];
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_UShort
- *
- * Description : Extracts an unsigned short from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted ushort.
- *
- ******************************************************************/
-#if 0
- EXPORT_FUNC
- unsigned short TT_Get_UShort( FRAME_ARG )
- {
- unsigned short getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = ((unsigned short)CUR_Frame.cursor[0] << 8) |
- (unsigned short)CUR_Frame.cursor[1];
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-#endif
-
-/*******************************************************************
- *
- * Function : GET_Long
- *
- * Description : Extracts a long from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted long.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- long TT_Get_Long( FRAME_ARG )
- {
- long getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ((long)CUR_Frame.cursor[0] << 24) |
- ((long)CUR_Frame.cursor[1] << 16) |
- ((long)CUR_Frame.cursor[2] << 8 ) |
- (long)CUR_Frame.cursor[3];
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_ULong
- *
- * Description : Extracts an unsigned long from the frame.
- *
- * Input : None
- *
- * Output : Extracted ulong.
- *
- ******************************************************************/
-#if 0
- EXPORT_FUNC
- unsigned long TT_Get_ULong( FRAME_ARG )
- {
- unsigned long getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ( ((unsigned long)CUR_Frame.cursor[0] << 24) |
- ((unsigned long)CUR_Frame.cursor[1] << 16) |
- ((unsigned long)CUR_Frame.cursor[2] << 8 ) |
- (unsigned long)CUR_Frame.cursor[3] );
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/unix/Makefile.in b/Build/source/libs/libttf/arch/unix/Makefile.in
deleted file mode 100644
index 321cc7f8f72..00000000000
--- a/Build/source/libs/libttf/arch/unix/Makefile.in
+++ /dev/null
@@ -1,244 +0,0 @@
-# This file is part of the FreeType project.
-#
-# lib/arch/unix/Makefile.in
-
-ARCH = arch/unix
-FT_MAKEFILE = $(ARCH)/Makefile
-
-RM = @RM@
-RMF = @RM@ -f
-RMDIR = @RMDIR@
-LN_S = @LN_S@
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-VPATH = @srcdir@/../..
-srcdir = @srcdir@/../..
-
-top_builddir=..
-
-CC = @CC@
-CPP = @CPP@
-
-LIBTOOL = $(top_builddir)/libtool
-MKINSTALLDIRS = $(srcdir)/../mkinstalldirs
-
-version_info = @version_info@
-
-include $(top_builddir)/MakeSub
-
-############### PORTABILITY COMPONENTS ########################
-
-# location of memory component
-MEMSRC = ttmemory.c
-
-# location of file component
-FILESRC = @TT_FILE_COMPONENT@
-
-# location of mutex component
-MUTEXSRC = ttmutex.c
-
-# location of default extensions
-FTEXTDIR = $(srcdir)/extend
-
-
-# default extensions sources
-EXTSRC = $(FTEXTDIR)/ftxkern.c \
- $(FTEXTDIR)/ftxgasp.c \
- $(FTEXTDIR)/ftxpost.c \
- $(FTEXTDIR)/ftxcmap.c \
- $(FTEXTDIR)/ftxsbit.c \
- $(FTEXTDIR)/ftxwidth.c \
- $(FTEXTDIR)/ftxerr18.c \
- $(FTEXTDIR)/ftxgsub.c \
- $(FTEXTDIR)/ftxgpos.c \
- $(FTEXTDIR)/ftxgdef.c \
- $(FTEXTDIR)/ftxopen.c
-
-EXTOBJ = ftxkern.lo \
- ftxgasp.lo \
- ftxpost.lo \
- ftxcmap.lo \
- ftxsbit.lo \
- ftxwidth.lo \
- ftxerr18.lo \
- ftxgsub.lo \
- ftxgpos.lo \
- ftxgdef.lo \
- ftxopen.lo
-
-# all engine sources
-SRC_M = $(srcdir)/ttapi.c \
- $(srcdir)/ttcache.c \
- $(srcdir)/ttcalc.c \
- $(srcdir)/ttcmap.c \
- $(srcdir)/ttdebug.c \
- $(srcdir)/ttextend.c \
- $(srcdir)/ttgload.c \
- $(srcdir)/ttinterp.c \
- $(srcdir)/ttload.c \
- $(srcdir)/ttobjs.c \
- $(srcdir)/ttraster.c \
- $(srcdir)/$(FILESRC) \
- $(srcdir)/$(MEMSRC) \
- $(srcdir)/$(MUTEXSRC)
-SRC_S = $(srcdir)/$(ARCH)/freetype.c
-
-# all header files
-HEADERS = $(srcdir)/freetype.h \
- $(srcdir)/fterrid.h \
- $(srcdir)/ftnameid.h \
- $(FTEXTDIR)/ftxkern.h \
- $(FTEXTDIR)/ftxgasp.h \
- $(FTEXTDIR)/ftxcmap.h \
- $(FTEXTDIR)/ftxsbit.h \
- $(FTEXTDIR)/ftxpost.h \
- $(FTEXTDIR)/ftxwidth.h \
- $(FTEXTDIR)/ftxerr18.h \
- $(FTEXTDIR)/ftxgsub.h \
- $(FTEXTDIR)/ftxgpos.h \
- $(FTEXTDIR)/ftxgdef.h \
- $(FTEXTDIR)/ftxopen.h
-
-# all engine objects
-OBJ_M = ttapi.lo \
- ttcache.lo \
- ttcalc.lo \
- ttcmap.lo \
- ttdebug.lo \
- ttextend.lo \
- ttgload.lo \
- ttinterp.lo \
- ttload.lo \
- ttobjs.lo \
- ttraster.lo \
- file.lo \
- memory.lo \
- mutex.lo \
- $(EXTOBJ)
-OBJ_S = freetype.lo $(EXTOBJ)
-
-
-# include paths
-INCLUDES = -I. -I$(top_builddir) -I$(srcdir) -I$(FTEXTDIR)
-
-# C flags
-CFLAGS = @CFLAGS@ @XX_CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-FT_CFLAGS = $(CFLAGS) $(INCLUDES)
-
-# linker flags
-FT_LIBS = @LIBS@
-
-# i18n stuff
-LOCALEDIR = @LOCALEDIR@
-
-
-all: do_link
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES="$(OBJ_S)" libttf.la
-
-debug: do_link
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES="$(OBJ_M)" libttf.la
-
-
-do_link:
- -$(RMF) memory.c file.c mutex.c
- $(LN_S) $(srcdir)/$(MEMSRC) memory.c
- $(LN_S) $(srcdir)/$(FILESRC) file.c
- $(LN_S) $(srcdir)/$(MUTEXSRC) mutex.c
-
-
-.SUFFIXES: .lo
-.c.lo:
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $<
-
-ftxkern.lo: $(FTEXTDIR)/ftxkern.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxkern.c
-
-ftxgasp.lo: $(FTEXTDIR)/ftxgasp.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxgasp.c
-
-ftxpost.lo: $(FTEXTDIR)/ftxpost.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxpost.c
-
-ftxcmap.lo: $(FTEXTDIR)/ftxcmap.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxcmap.c
-
-ftxsbit.lo: $(FTEXTDIR)/ftxsbit.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxsbit.c
-
-ftxwidth.lo: $(FTEXTDIR)/ftxwidth.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxwidth.c
-
-ftxerr18.lo: $(FTEXTDIR)/ftxerr18.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) \
- -DLOCALEDIR='"$(LOCALEDIR)"' \
- $(FTEXTDIR)/ftxerr18.c
-
-ftxgsub.lo: $(FTEXTDIR)/ftxgsub.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxgsub.c
-
-ftxgpos.lo: $(FTEXTDIR)/ftxgpos.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxgpos.c
-
-ftxgdef.lo: $(FTEXTDIR)/ftxgdef.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxgdef.c
-
-ftxopen.lo: $(FTEXTDIR)/ftxopen.c
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) $(FTEXTDIR)/ftxopen.c
-
-freetype.lo: $(SRC_S) $(SRC_M)
- $(LIBTOOL) --mode=compile $(CC) -c $(FT_CFLAGS) \
- -DLOCALEDIR='"$(LOCALEDIR)"' \
- -DTT_MAKE_OPTION_SINGLE_OBJECT \
- $(SRC_S)
-
-libttf.la: $(LIB_FILES)
- $(LIBTOOL) --mode=link $(CC) -o libttf.la $(LIB_FILES) \
- -rpath $(libdir) \
- -version-info $(version_info) $(FT_LIBS)
-
-install: libttf.la
- $(MKINSTALLDIRS) $(libdir) $(includedir)/freetype
- $(LIBTOOL) --mode=install $(INSTALL) libttf.la $(libdir)
- -for P in $(HEADERS) ; do \
- $(INSTALL_DATA) $$P $(includedir)/freetype ; \
- done
-
-uninstall:
- -$(LIBTOOL) --mode=uninstall $(RM) $(libdir)/libttf.la
- -$(RMF) $(includedir)/freetype/*
- -$(RMDIR) $(includedir)/freetype
-
-clean:
- -$(RMF) $(OBJ_S) $(OBJ_M) *.o
-
-distclean: clean
- -$(RMF) file.c memory.c mutex.c
- -$(RMF) libttf.la
- -$(RMF) *.orig *~ core *.core
- -$(RMF) $(ARCH)/Makefile
- -$(RMF) .libs/*
- -$(RMDIR) .libs
-
-depend: do_link
- (echo '/^#.* PUT NO STUFF BELOW/,$$d' ; echo w ; echo q) | \
- ed - $(ARCH)/Makefile
- echo '# Dependencies generated by make depend: PUT NO STUFF BELOW' \
- >> $(ARCH)/Makefile
- for file in $(SRC_S) $(SRC_M) $(EXTSRC) ; do \
- $(CPP) $(CPPFLAGS) $(INCLUDES) $$file | \
- sed -n -e 's|^# [1-9][0-9]* "\([^/].*\.h\)".*|\1|p' \
- -e 's|^# [1-9][0-9]* "\($(srcdir)/.*\.h\)".*|\1|p' | \
- sed -e 's|/\./|.|g' -e "s/^/`basename $$file .c`.lo: /" ; \
- done | \
- sort -u | \
- awk '{ if (LINE == 1) \
- { line = last = $$1 } \
- else if ($$1 != last) \
- { print line ; line = last = $$1 } \
- line = line " " $$2 } \
- END { print line }' >> $(ARCH)/Makefile
-
-# Dependencies generated by make depend: PUT NO STUFF BELOW
diff --git a/Build/source/libs/libttf/arch/unix/freetype.c b/Build/source/libs/libttf/arch/unix/freetype.c
deleted file mode 100644
index 9a4860dbd2c..00000000000
--- a/Build/source/libs/libttf/arch/unix/freetype.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* Single object library component for Unix */
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* The Makefile creates proper links to following three files */
-
-#include "file.c"
-#include "memory.c"
-#include "mutex.c"
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/unix/ttmmap.c b/Build/source/libs/libttf/arch/unix/ttmmap.c
deleted file mode 100644
index aac7c1052e6..00000000000
--- a/Build/source/libs/libttf/arch/unix/ttmmap.c
+++ /dev/null
@@ -1,1027 +0,0 @@
-/*******************************************************************
- *
- * ttmmap.c 2.0
- *
- * Memory-Mapped file component ( replaces ttfile.c ).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- * Changes between 2.0 and 1.3 :
- *
- * - adopted new design/separation introduced in ttfile.c 2.0
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sys/mman.h>
-#ifndef MAP_FILE
-#define MAP_FILE 0x00
-#endif
-
-/*
- * The prototype for munmap() is not provided on SunOS. This needs to
- * have a check added later to see if the GNU C library is being used.
- * If so, then this prototype is not needed.
- */
-#if defined(__sun__) && !defined(SVR4) && !defined(__SVR4)
- extern int munmap( caddr_t addr, int len );
-#endif
-
-#include <sys/stat.h>
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-
-#include "freetype.h"
-#include "tttypes.h"
-#include "ttdebug.h"
-#include "ttengine.h"
-#include "ttmutex.h"
-#include "ttmemory.h"
-#include "ttfile.h" /* our prototypes */
-
- /* This definition is mandatory for each file component! */
- EXPORT_FUNC
- const TFileFrame TT_Null_FileFrame = { NULL, 0, 0 };
-
- /* It has proven useful to do some bounds checks during */
- /* development phase. Define DEBUG_FILE when compiling */
- /* this component to enable them. */
-
-#ifdef DEBUG_FILE
-#define CHECK_FRAME( frame, n ) \
- do { \
- if ( frame.cursor + n > frame.address + frame.size ) \
- Panic( "Frame boundary error!\n" ); \
- } while ( 0 )
-#else
-#define CHECK_FRAME( frame, n ) \
- do { \
- } while( 0 )
-#endif
-
- struct _TFileMap
- {
- String* base; /* base address of mapped file */
- Int refcount; /* reference count for mmaped region */
- Long size; /* stream size in file */
- Long offset; /* offset in file */
- };
-
- typedef struct _TFileMap TFileMap;
-
-#define MAP_Address( map ) (Byte*)( (map)->base + (map)->offset )
-
- /* The stream record structure */
- typedef struct _TStream_Rec
- {
- TFileMap* map; /* mapped file description */
- Long pos ; /* cursor in mapped file */
- } TStream_Rec;
-
- typedef TStream_Rec* PStream_Rec;
-
-#define STREAM2REC( x ) ( (TStream_Rec*)HANDLE_Val( x ) )
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /**** ****/
- /**** N O N R E E N T R A N T I M P L E M E N T A T I O N ****/
- /**** ****/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
- /* The TFile_Component structure holds all the data that was */
- /* previously declared static or global in this component. */
- /* */
- /* It is accessible through the 'engine.file_component' */
- /* variable in re-entrant builds, or directly through the */
- /* static 'files' variable in other builds. */
-
- struct _TFile_Component
- {
- TMutex lock; /* used by the thread-safe build only */
- PStream_Rec stream; /* current stream */
- TFileFrame frame; /* current frame */
- };
-
- typedef struct _TFile_Component TFile_Component;
-
-/* The macro CUR_Stream denotes the current input stream */
-/* Note that for the re-entrant version, the 'stream' name has been */
-/* chosen according to the macro STREAM_ARGS. */
-
-/* The macro CUR_Frame denotes the current file frame */
-/* Note that for the re-entrant version, the 'frame' name has been */
-/* chosen according to the macro FRAME_ARGS. */
-
-/* The macro STREAM_VAR is used when calling public functions */
-/* that need an 'optional' stream argument. */
-
-#define CUR_Stream files.stream /* thread-safe macros */
-#define CUR_Frame files.frame
-
-#define STREAM_VARS /* void */
-#define STREAM_VAR /* void */
-
- /* the 'files' variable is only defined in non-reentrant builds */
-
- static TFile_Component files;
-
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- MUTEX_Create( files.lock );
- files.stream = NULL;
- ZERO_Frame( files.frame );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- MUTEX_Destroy( files.lock );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Copies or duplicates a given stream.
- *
- * Input : org_stream original stream
- * stream target stream (copy or duplicate)
- *
- * Output : Error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream org_stream,
- TT_Stream* stream )
- {
- MUTEX_Lock( files.lock );
- *stream = org_stream;
- files.stream = STREAM2REC( org_stream ); /* set current stream */
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream
- *
- * Output : Error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- HANDLE_Set( *stream, NULL );
- MUTEX_Release( files.lock );
-
- return TT_Err_Ok;
- }
-
-#else /* TT_CONFIG_OPTION_THREAD_SAFE */
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /******** ********/
- /******** R E E N T R A N T I M P L E M E N T A T I O N ********/
- /******** ********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-#define CUR_Stream STREAM2REC( stream ) /* re-entrant macros */
-#define CUR_Frame (*frame)
-
-#define STREAM_VARS stream,
-#define STREAM_VAR stream
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- engine.file_component = NULL;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Copies or duplicates a given stream.
- *
- * Input : org_stream original stream
- * stream target stream (copy or duplicate)
- *
- * Output : Error code. The output stream is set to NULL in
- * case of Failure.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream input_stream,
- TT_Stream* copy )
- {
- TT_Error error;
- PStream_Rec stream_rec;
- PStream_Rec copy_rec;
-
-
- stream_rec = STREAM2REC( input_stream );
-
- if ( ALLOC( copy_rec, sizeof ( TStream_Rec ) ) )
- goto Fail;
-
- HANDLE_Set( *copy, copy_rec );
-
- copy_rec->map->refcount++;
- copy_rec->pos = 0;
-
- return TT_Err_Ok;
-
- Fail:
- HANDLE_Set( *copy, NULL );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream
- *
- * Output : error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- return TT_Close_Stream( stream );
- }
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /*********** ***********/
- /*********** C O M M O N I M P L E M E N T A T I O N ***********/
- /*********** ***********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-/*******************************************************************
- *
- * Function : AllocateMap
- *
- * Description : Allocates a new map from the table.
- *
- * Output : Pointer to new stream rec. NULL in case of failure.
- *
- ******************************************************************/
-
- static
- TFileMap* Allocate_Map( void )
- {
- TFileMap* result;
-
-
- if ( MEM_Alloc( result, sizeof ( TFileMap ) ) )
- return NULL;
-
- result->refcount = 1;
- return result;
- }
-
-
-/*******************************************************************
- *
- * Function : ReleaseMap
- *
- * Description : Releases a used map to the table if reference i
- * counter reaches zero.
- *
- * Input : map
- *
- * Output : None.
- *
- * Note : Called by TT_Close_File()
- *
- ******************************************************************/
-
- static
- void Release_Map ( TFileMap* map )
- {
- map->refcount--;
- if ( map->refcount <= 0 )
- {
- munmap ( (void*)map->base, map->size );
- FREE( map );
- }
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Open_Stream
- *
- * Description : Opens the font file and saves the total file size.
- *
- * Input : error address of stream's error variable
- * (re-entrant build only).
- * filepathname pathname of the file to open
- * stream address of target TT_Stream structure
- *
- * Output : SUCCESS on success, FAILURE on error.
- * The target stream is set to -1 in case of failure.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TT_Open_Stream( const String* filepathname,
- TT_Stream* stream )
- {
- TT_Error error;
- Int file;
- PStream_Rec stream_rec;
- TFileMap* map;
- struct stat stat_buf;
-
-
- if ( ALLOC( *stream, sizeof ( TStream_Rec ) ) )
- return error;
-
- map = Allocate_Map();
- if ( !map )
- {
- error = TT_Err_Out_Of_Memory;
- goto Memory_Fail;
- }
-
- stream_rec = STREAM2REC( *stream );
-
- file = open( (String*)filepathname, O_RDONLY );
- if ( file < 0 )
- goto File_Fail;
-
- if ( fstat( file, &stat_buf ) < 0 )
- goto Map_Fail;
-
- map->offset = 0;
- map->size = stat_buf.st_size + map->offset;
- map->base = mmap( NULL,
- map->size,
- PROT_READ,
- MAP_FILE | MAP_PRIVATE,
- file,
- 0 );
-
- if ( (long)map->base == -1 )
- goto Map_Fail;
-
- close( file );
-
- stream_rec->map = map;
- stream_rec->pos = 0;
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- CUR_Stream = stream_rec;
-#endif
-
- return TT_Err_Ok;
-
- Map_Fail:
- close( file );
-
- File_Fail:
- error = TT_Err_Could_Not_Open_File;
- FREE( map );
-
- Memory_Fail:
- FREE( *stream );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Close_Stream
- *
- * Description : Closes a stream.
- *
- * Input : stream
- *
- * Output : SUCCESS (always)
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TT_Close_Stream( TT_Stream* stream )
- {
- PStream_Rec rec = STREAM2REC( *stream );
-
-
- Release_Map( rec->map );
- FREE( rec );
-
- HANDLE_Set( *stream, NULL );
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Flush_Stream
- *
- * Description : Flushes a stream, i.e., closes its file handle.
- *
- * Input : stream address of target TT_Stream structure
- *
- * Output : Error code
- *
- * NOTE : Never flush the current opened stream. This means that
- * you should _never_ call this function between a
- * TT_Use_Stream() and a TT_Done_Stream()!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Flush_Stream( TT_Stream* stream )
- {
- /* XXX - DUMMY IMPLEMENTATION */
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Stream_Size
- *
- * Description : Returns the length of a given stream, even if it
- * is flushed.
- *
- * Input : stream the stream
- *
- * Output : Length of stream in bytes.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_Stream_Size( TT_Stream stream )
- {
- PStream_Rec rec = STREAM2REC( stream );
-
-
- if ( rec )
- return rec->map->size;
- else
- return 0; /* invalid stream - return 0 */
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Seek_File
- *
- * Description : Seeks the file cursor to a different position.
- *
- * Input : position new position in file
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Seek_File( STREAM_ARGS Long position )
- {
- if ( position > CUR_Stream->map->size )
- return TT_Err_Invalid_File_Offset;
-
- CUR_Stream->pos = position;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Skip_File
- *
- * Description : Skips forward the file cursor.
- *
- * Input : distance number of bytes to skip
- *
- * Output : see TT_Seek_File
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Skip_File( STREAM_ARGS Long distance )
- {
- return TT_Seek_File( STREAM_VARS CUR_Stream->pos + distance );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_File
- *
- * Description : Reads a chunk of the file and copies it to memory.
- *
- * Input : buffer target buffer
- * count length in bytes to read
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_File( STREAM_ARGS void* buffer, Long count )
- {
- if ( CUR_Stream->pos + count > CUR_Stream->map->size )
- return TT_Err_Invalid_File_Read;
-
- MEM_Copy( buffer,
- MAP_Address( CUR_Stream->map ) + CUR_Stream->pos, count );
- CUR_Stream->pos += count;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_At_File
- *
- * Description : Reads file at a specified position.
- *
- * Input : position position to seek to before read
- * buffer target buffer
- * count number of bytes to read
- *
- * Output : SUCCESS on success. FAILURE if error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_At_File( STREAM_ARGS Long position,
- void* buffer,
- Long count )
- {
- TT_Error error;
-
-
- if ( (error = TT_Seek_File( STREAM_VARS position )) ||
- (error = TT_Read_File( STREAM_VARS buffer, count )) )
- return error;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_File_Pos
- *
- * Description : Returns current file seek pointer.
- *
- * Input : none
- *
- * Output : current file position
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_File_Pos( STREAM_ARG )
- {
- return CUR_Stream->pos;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : Error code
- *
- * Notes: The function fails if the byte range is not within the
- * the file, or if there is not enough memory to cache
- * the bytes properly (which usually means that aSize is
- * too big in both cases).
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( CUR_Stream->pos + size > CUR_Stream->map->size )
- return TT_Err_Invalid_Frame_Access;
-
- CUR_Frame.size = size;
- CUR_Frame.address = MAP_Address( CUR_Stream->map ) + CUR_Stream->pos;
- CUR_Frame.cursor = CUR_Frame.address;
-
- CUR_Stream->pos += size;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Check_And_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx()
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : Error code
- *
- * Notes: The function truncates 'size' if the byte range is not
- * within the file.
- *
- * It will fail if there is not enough memory to cache
- * the bytes properly (which usually means that aSize is
- * too big).
- *
- * It will fail if you make two consecutive calls
- * to TT_Access_Frame(), without a TT_Forget_Frame() between
- * them.
- *
- * The only difference with TT_Access_Frame() is that we
- * check that the frame is within the current file. We
- * otherwise truncate it. The 'overflow' is set to zero.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
- Long readBytes;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- readBytes = CUR_Stream->map->size - CUR_Stream->pos;
- if ( size > readBytes )
- {
- /* There is overflow, we allocate a new block then */
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
-
- CUR_Frame.size = size;
-
- /* copy the valid part */
- MEM_Copy( CUR_Frame.address,
- MAP_Address( CUR_Stream->map ) + CUR_Stream->pos,
- readBytes );
- }
- else
- {
- CUR_Frame.size = size;
- CUR_Frame.address = MAP_Address( CUR_Stream->map ) + CUR_Stream->pos;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Forget_Frame
- *
- * Description : Releases a cached frame after reading.
- *
- * Input : None
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Forget_Frame( FRAME_ARG )
- {
- if ( CUR_Frame.address == NULL )
- return TT_Err_Nested_Frame_Access;
-
- /* If we were using a duplicate in case of overflow, free it now */
- if ( CUR_Frame.address < (Byte*)CUR_Stream->map->base ||
- CUR_Frame.address >= (Byte*)CUR_Stream->map->base +
- CUR_Stream->map->size )
- FREE( CUR_Frame.address );
-
- ZERO_Frame( files.frame );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Byte
- *
- * Description : Extracts a byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted Byte
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
-#if 0
-
- EXPORT_FUNC
- Byte TT_Get_Byte( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Byte)(*CUR_Frame.cursor++);
- }
-
-#endif
-
-
-/*******************************************************************
- *
- * Function : GET_Char
- *
- * Description : Extracts a signed byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted char
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Char TT_Get_Char( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Char)(*CUR_Frame.cursor++);
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Short
- *
- * Description : Extracts a short from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted short
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Short TT_Get_Short( FRAME_ARG )
- {
- Short getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = ((Short)CUR_Frame.cursor[0] << 8) |
- (Short)CUR_Frame.cursor[1];
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_UShort
- *
- * Description : Extracts an unsigned short from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted ushort
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
-#if 0
-
- EXPORT_FUNC
- UShort TT_Get_UShort( FRAME_ARG )
- {
- UShort getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = ((UShort)CUR_Frame.cursor[0] << 8) |
- (UShort)CUR_Frame.cursor[1];
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-
-#endif
-
-
-/*******************************************************************
- *
- * Function : GET_Long
- *
- * Description : Extracts a long from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted long
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_Get_Long( FRAME_ARG )
- {
- Long getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ((Long)CUR_Frame.cursor[0] << 24) |
- ((Long)CUR_Frame.cursor[1] << 16) |
- ((Long)CUR_Frame.cursor[2] << 8 ) |
- (Long)CUR_Frame.cursor[3];
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_ULong
- *
- * Description : Extracts an unsigned long from the frame.
- *
- * Input : None
- *
- * Output : Extracted ulong
- *
- * NOTES : We consider that the programmer is intelligent enough
- * not to try to get a byte that is out of the frame. Hence,
- * we provide no bounds check here. (A misbehaving client
- * could easily page fault using this call.)
- *
- ******************************************************************/
-
-#if 0
-
- EXPORT_FUNC
- ULong TT_Get_ULong( FRAME_ARG )
- {
- ULong getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ( ((ULong)CUR_Frame.cursor[0] << 24) |
- ((ULong)CUR_Frame.cursor[1] << 16) |
- ((ULong)CUR_Frame.cursor[2] << 8 ) |
- (ULong)CUR_Frame.cursor[3] );
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/vms/README b/Build/source/libs/libttf/arch/vms/README
deleted file mode 100644
index b450611f4ac..00000000000
--- a/Build/source/libs/libttf/arch/vms/README
+++ /dev/null
@@ -1,20 +0,0 @@
-This directory contains two files for compiling the FreeType library under
-VMS:
-
- ft_conf.h the configuration file for the FreeType library
- descrip.mms a makefile to be used with either MMS or MMK
-
-The files are such designed that after unpacking of freetype-1.4 one can
-give the command
-
- MMS/DESCR=[.LIB.ARCH.VMS]
-
-to build the libraries. (Of course, for MMK use `MMK' on the command line
-instead of `MMS'.) The makefile contains a `clean' target, but no `install'
-target since I'm note sure where to install the library and the include
-files.
-
-I did NOT do the test programs but I tested it with my own programs.
-
-
- Jouk Jansen <joukj@hrem.stm.tudelft.nl>
diff --git a/Build/source/libs/libttf/arch/vms/descrip.mms b/Build/source/libs/libttf/arch/vms/descrip.mms
deleted file mode 100644
index 9115316dff2..00000000000
--- a/Build/source/libs/libttf/arch/vms/descrip.mms
+++ /dev/null
@@ -1,155 +0,0 @@
-# This file is part of the FreeType project.
-#
-# DESCRIP.MMS: Make file for VMS using MMS or MMK
-# Created by Jouk Jansen (joukj@hrem.stm.tudelft.nl)
-
-ARCH = arch.unix
-
-CC = cc
-
-############### PORTABILITY COMPONENTS ########################
-
-# location of memory component
-MEMSRC = ttmemory.c
-
-# location of file component
-FILESRC = ttfile.c
-
-# location of mutex component
-MUTEXSRC = ttmutex.c
-
-# location of default extensions
-FTEXTDIR = [.lib.extend]
-
-# default extensions sources
-EXTSRC = $(FTEXTDIR)ftxkern.c \
- $(FTEXTDIR)ftxgasp.c \
- $(FTEXTDIR)ftxpost.c \
- $(FTEXTDIR)ftxcmap.c \
- $(FTEXTDIR)ftxsbit.c \
- $(FTEXTDIR)ftxwidth.c \
- $(FTEXTDIR)ftxerr18.c \
- $(FTEXTDIR)ftxgsub.c \
- $(FTEXTDIR)ftxgpos.c \
- $(FTEXTDIR)ftxopen.c \
- $(FTEXTDIR)ftxgdef.c
-
-EXTOBJ = [.lib]ftxkern.obj, \
- [.lib]ftxgasp.obj, \
- [.lib]ftxpost.obj, \
- [.lib]ftxcmap.obj, \
- [.lib]ftxsbit.obj, \
- [.lib]ftxwidth.obj, \
- [.lib]ftxerr18.obj, \
- [.lib]ftxgsub.obj, \
- [.lib]ftxgpos.obj, \
- [.lib]ftxopen.obj, \
- [.lib]ftxgdef.obj
-
-# all engine sources
-SRC_M = [.lib]ttapi.c \
- [.lib]ttcache.c \
- [.lib]ttcalc.c \
- [.lib]ttcmap.c \
- [.lib]ttdebug.c \
- [.lib]ttextend.c \
- [.lib]ttgload.c \
- [.lib]ttinterp.c \
- [.lib]ttload.c \
- [.lib]ttobjs.c \
- [.lib]ttraster.c \
- [.lib]$(FILESRC) \
- [.lib]$(MEMSRC) \
- [.lib]$(MUTEXSRC)
-SRC_S = [.lib.$(ARCH)]freetype.c
-
-# all header files with path
-HEADERS = [.lib]freetype.h \
- [.lib]fterrid.h \
- [.lib]ftnameid.h \
- $(FTEXTDIR)ftxkern.h \
- $(FTEXTDIR)ftxgasp.h \
- $(FTEXTDIR)ftxcmap.h \
- $(FTEXTDIR)ftxsbit.h \
- $(FTEXTDIR)ftxpost.h \
- $(FTEXTDIR)ftxwidth.h \
- $(FTEXTDIR)ftxerr18.h \
- $(FTEXTDIR)ftxgsub.h \
- $(FTEXTDIR)ftxgpos.h \
- $(FTEXTDIR)ftxgdef.h \
- $(FTEXTDIR)ftxopen.h
-
-# all engine objects
-OBJ_M = [.lib]ttapi.obj, \
- [.lib]ttcache.obj, \
- [.lib]ttcalc.obj, \
- [.lib]ttcmap.obj, \
- [.lib]ttdebug.obj, \
- [.lib]ttextend.obj, \
- [.lib]ttgload.obj, \
- [.lib]ttinterp.obj, \
- [.lib]ttload.obj, \
- [.lib]ttobjs.obj, \
- [.lib]ttraster.obj, \
- [.lib]file.obj, \
- [.lib]memory.obj, \
- [.lib]mutex.obj, \
- $(EXTOBJ)
-OBJ_S = [.lib]freetype.obj
-
-
-# include paths
-INCLUDES = /include=([.lib],[],$(FTEXTDIR))
-
-# C flags
-CFLAGS = $(INCLUDES)/obj=[.lib]
-
-all : do_link [.lib]libttf.olb
- library/compress [.lib]libttf.olb
-
-do_link :
- if f$search( "[.lib]memory.c" ) .nes. "" then set file/remove [.lib]memory.c;
- if f$search( "[.lib]file.c" ) .nes. "" then set file/remove [.lib]file.c;
- if f$search( "[.lib]mutex.c" ) .nes. "" then set file/remove [.lib]mutex.c;
- if f$search( "[.lib]ft_conf.h" ) .nes. "" then set file/remove [.lib]ft_conf.h;
- set file/enter=[.lib]memory.c [.lib]$(MEMSRC)
- set file/enter=[.lib]file.c [.lib]$(FILESRC)
- set file/enter=[.lib]mutex.c [.lib]$(MUTEXSRC)
- set file/enter=[.lib]ft_conf.h [.lib.arch.vms]ft_conf.h
-
-[.lib]ftxkern.obj : $(FTEXTDIR)ftxkern.c
-
-[.lib]ftxgasp.obj : $(FTEXTDIR)ftxgasp.c
-
-[.lib]ftxpost.obj : $(FTEXTDIR)ftxpost.c
-
-[.lib]ftxcmap.obj : $(FTEXTDIR)ftxcmap.c
-
-[.lib]ftxsbit.obj : $(FTEXTDIR)ftxsbit.c
-
-[.lib]ftxwidth.obj : $(FTEXTDIR)ftxwidth.c
-
-[.lib]ftxerr18.obj : $(FTEXTDIR)ftxerr18.c
-
-[.lib]ftxgsub.obj : $(FTEXTDIR)ftxgsub.c
-
-[.lib]ftxgpos.obj : $(FTEXTDIR)ftxgpos.c
-
-[.lib]ftxgdef.obj : $(FTEXTDIR)ftxgdef.c
-
-[.lib]ftxopen.obj : $(FTEXTDIR)ftxopen.c
-
-[.lib]freetype.obj : $(SRC_S) $(SRC_M)
-
-
-[.lib]libttf.olb : $(OBJ_M)
- library/create [.lib]libttf.olb $(OBJ_M)
-
-
-clean :
- delete [.lib]*.obj;*
- delete [.lib]*.olb;*
- if f$search( "[.lib]memory.c" ) .nes. "" then set file/remove [.lib]memory.c;
- if f$search( "[.lib]file.c" ) .nes. "" then set file/remove [.lib]file.c;
- if f$search( "[.lib]mutex.c" ) .nes. "" then set file/remove [.lib]mutex.c;
- if f$search( "[.lib]ft_conf.h" ) .nes. "" then set file/remove [.lib]ft_conf.h;
diff --git a/Build/source/libs/libttf/arch/vms/ft_conf.h b/Build/source/libs/libttf/arch/vms/ft_conf.h
deleted file mode 100644
index b1315e63571..00000000000
--- a/Build/source/libs/libttf/arch/vms/ft_conf.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for VMS using MMS or MMK */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-/* Define to empty if the keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-/* #undef HAVE_MMAP */
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if the X Window System is missing or not being used. */
-/* #undef X_DISPLAY_MISSING */
-
-/* The number of bytes in a int. */
-#define SIZEOF_INT 4
-
-/* The number of bytes in a long. */
-#define SIZEOF_LONG 4
-
-/* Define if you have the getpagesize function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY 1
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE 1
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define if you have the <libintl.h> header file. */
-/* #undef HAVE_LIBINTL_H */
-
-/* Define if you have the libintl library. */
-/* #undef HAVE_LIBINTL */
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #undef HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-/* #undef TT_CONFIG_OPTION_THREAD_SAFE */
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-/* #undef DEBUG_LEVEL_TRACE */
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-/* #undef DEBUG_LEVEL_ERROR */
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/win16/Makefile.BC b/Build/source/libs/libttf/arch/win16/Makefile.BC
deleted file mode 100644
index bbf540ebb9a..00000000000
--- a/Build/source/libs/libttf/arch/win16/Makefile.BC
+++ /dev/null
@@ -1,180 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Borland C++ for 16-bit Windows, large model.
-# Due to size constraints, it does not try to pack all modules into one.
-#
-# You will need Borland MAKE.
-# Tested with Borland C++ v.4.0 and 5.0.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -farch/win16/Makefile.BC
-#
-#
-# A DLL version of the library can be built with
-#
-# make -DDLL -farch/win16/Makefile.BC dll
-#
-# Debug versions can be obtained with
-#
-# make -DDEBUG -farch\win16\Makefile.BC
-#
-# Special versions enabled to handle big fonts (with more than 16,384
-# glyphs) can be obtained with
-#
-# make -DBIGFONTS -farch/win16/Makefile.BC
-
-ARCH = arch\win16
-FT_MAKEFILE = $(ARCH)\Makefile.BC
-FT_DLL = ft14_16.dll
-
-CC = bcc
-LIB = tlib /c /e
-IMPLIB = implib -c -o
-
-SPURIOUS_WARNINGS = -w-nak -w-par -w-use -w-aus -w-stu -w-stv -w-cln -w-sig
-
-# Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern
-# Borland compilers (from BC++ 3.1 on) can increase the limit on
-# the length of identifiers.
-!if ! $d(DEBUG)
-CFLAGS = -O2 -3 -ml -A -i40 -I$(ARCH);.;extend $(SPURIOUS_WARNINGS)
-DLLFLAGS = -ml -WD -lC
-!else
-CFLAGS = -v -N -ml -A -i40 -I$(ARCH);.;extend $(SPURIOUS_WARNINGS)
-DLLFLAGS = -v -ml -WD -lC
-!endif
-
-CFLAGS = $(CFLAGS) -W
-
-FT_DEF = $(FT_DLL:.dll=.def)
-!if $d(DLL)
-CFLAGS = $(CFLAGS) -WD
-!endif
-
-
-!if $d(BIGFONTS)
-CFLAGS = $(CFLAGS) -DTT_HUGE_PTR=__huge
-
-TTFILE = $(ARCH)\hugefile.c
-TTMEMORY = $(ARCH)\hugemem.c
-!else
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-!endif
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces before the \ at end of line,
-# otherwise the substitution for TLIB command line will fail.
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
- extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c\
- extend\ftxsbit.c extend\ftxgsub.c extend\ftxgpos.c\
- extend\ftxopen.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c\
- ttgload.c ttinterp.c ttload.c ttobjs.c\
- ttraster.c ttextend.c ttdebug.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Borland make does not handle $($(LIB_FILES)), and using
-# -DLIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing TLIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# See ../msdos/Makefile.TC for an application.
-.c.obj:
- @$(CC) -c -o$* @&&|
- $(CFLAGS) $<
-|
-
-
-!if ! $d(DEBUG)
-# Skipped if DEBUG build
-# (but it changes nothing, since we always build in multiple parts).
-all: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @&&|
-+ $(OBJS_M: = + )
-|
-!endif
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @&&|
-+ $(OBJS_M: = + )
-|
-
-$(FT_DEF): $(ARCH)\ttf.def
- -copy $(ARCH)\ttf.def $(FT_DEF)
-
-dll $(FT_DLL): $(OBJS_M) $(FT_DEF)
-!if $d(DLL)
- $(CC) -e$(FT_DLL) @&&|
- $(DLLFLAGS) $(OBJS_M)
-|
- $(IMPLIB) libttf $(FT_DEF)
-!else
-# Re-invoke with flag set. Unfortunately, this discards the other flags.
- make -DDLL -f$(ARCH)/Makefile.BC dll
-!endif
-
-install: $(FT_DLL)
-!if $d(INSTALL_DIR)
- copy $(FT_DLL) $(INSTALL_DIR)
-!else
- copy $(FT_DLL) C:\WINDOWS
-!endif
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- -del libttf.lib
- echo -+$(**: =-+)> response
- $(LIB) libttf.lib @&&|
-+ $(**: = + )
-|
-
-!if $d(BIGFONTS)
-$(TTMEMORY:.c=.obj): $(TTMEMORY)
- $(CC) -c -o$* @&&|
- $(CFLAGS) -A- $*.c
-|
-
-$(TTFILE:.c=.obj): $(TTFILE)
- $(CC) -c -o$* @&&|
- $(CFLAGS) -A- $*.c
-|
-!endif
-
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del libttf.bak
- -del response
- -del *.def
-
-distclean: clean
- -del libttf.lib
- -del *.dll
- -del $(FT_DEF)
- -del C:\WINDOWS\$(FT_DLL)
-!if $d(INSTALL_DIR)
- -del $(INSTALL_DIR)\$(FT_DLL)
-!endif
-
-!include "$(ARCH)\depend.win"
-
-# end of Makefile
diff --git a/Build/source/libs/libttf/arch/win16/Makefile.MS b/Build/source/libs/libttf/arch/win16/Makefile.MS
deleted file mode 100644
index 9ff0b6749a4..00000000000
--- a/Build/source/libs/libttf/arch/win16/Makefile.MS
+++ /dev/null
@@ -1,106 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Microsoft C for Windows, large model.
-# It also works for Visual C++ 1.x 16-bit compilers, but you should
-# instead use the Makefile customized for it, Makefile.VC.
-# Due to size constraints, it does not try to pack all modules into one.
-#
-# You will need NMAKE.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# nmake /f arch\win16\Makefile.MS
-#
-#
-# A debug version can be obtained with
-#
-# nmake DEBUG=1 /f arch\win16\Makefile.MS
-
-ARCH = arch\win16
-FT_MAKEFILE = $(ARCH)\Makefile.MS
-
-CC = cl /nologo
-LIB = lib /noignorecase /nologo
-
-!ifndef DEBUG
-CFLAGS = /Ox /AL /Za /W2 /G2 -I$(ARCH) -I. -Iextend
-!else
-CFLAGS = /Zi /AL /Za /W2 /G2 -I$(ARCH) -I. -Iextend
-!endif
-
-# Use /Gw instead with Microsoft C version 6
-CFLAGS = $(CFLAGS) /GA
-
-
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces between the file names or at end of line, otherwise
-# the substitution for LIB command line will fail. Thank you.
-#
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
-extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c extend\ftxsbit.c\
-extend\ftxopen.c extend\ftxgsub.c extend\ftxgpos.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c\
-ttgload.c ttinterp.c ttload.c ttobjs.c ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Microsoft's NMAKE does not handle $($(LIB_FILES)), and using
-# LIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing LIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# See ..\msdos\Makefile.TC for an application.
-.c.obj:
- $(CC) /c /Fo$@ @<<
- $(CFLAGS) $*.c
-<<
-
-
-!ifndef DEBUG
-# Skipped if DEBUG build
-# (but it changes nothing, since we always build in multiple parts).
-all: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_M: = ^ );
-<<KEEP
-!endif
-
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_M: = ^ );
-<<KEEP
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- $(LIB) $@ +-$(?: =-+);
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del response
-
-distclean: clean
- -del libttf.lib
-
-!include "$(ARCH)\depend.win"
-
-# end of Makefile.MS
diff --git a/Build/source/libs/libttf/arch/win16/Makefile.VC b/Build/source/libs/libttf/arch/win16/Makefile.VC
deleted file mode 100644
index e7663839328..00000000000
--- a/Build/source/libs/libttf/arch/win16/Makefile.VC
+++ /dev/null
@@ -1,175 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Microsoft Visual C++ 1.x for 16-bit Windows,
-# large model. It also works for Microsoft C/C++ v.7.0 16-bit compiler,
-# but not for previous versions (see Makefile.MS instead).
-#
-# You will need NMAKE.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# nmake /f arch\win16\Makefile.VC
-#
-#
-# A DLL version of the library can be built with
-#
-# nmake DLL=1 /f arch\win16\Makefile.VC dll
-#
-# Debug versions can be obtained with
-#
-# nmake DEBUG=1 /f arch\win16\Makefile.VC
-#
-# Special versions enabled to handle big fonts (with more than 16,384
-# glyphs) can be obtained with
-#
-# nmake BIGFONTS=1 /f arch\win16\Makefile.VC
-
-ARCH = arch\win16
-FT_MAKEFILE = $(ARCH)\Makefile.VC
-FT_DLL = ft14_16.dll
-
-CC = cl /nologo
-LIB = lib /noignorecase /nologo
-IMPLIB = implib /noignorecase /nologo
-
-# One can also consider using "set MSC_CMD_FLAGS=/Gr /Op- /Gy /YX".
-# With Microsoft C/C++ 7.0, use /G2 instead of /G3.
-!ifndef DEBUG
-CFLAGS = /Ox /AL /Za /W2 /G3 -I$(ARCH) -I. -Iextend
-DLLFLAGS = /AL /Ld
-!else
-CFLAGS = /Zi /Ge /AL /Za /W2 /G3 -I$(ARCH) -I. -Iextend
-DLLFLAGS = /AL /Lw /Zi
-!endif
-
-FT_DEF = $(FT_DLL:.dll=.def)
-!ifdef DLL
-CFLAGS = $(CFLAGS) /GD /GEf
-!else
-CFLAGS = $(CFLAGS) /GA
-!endif
-
-
-!ifdef BIGFONTS
-CFLAGS = $(CFLAGS) /DTT_HUGE_PTR=__huge
-
-TTFILE = $(ARCH)\hugefile.c
-TTMEMORY = $(ARCH)\hugemem.c
-!else
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-!endif
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces between the file names or at end of line, otherwise
-# the substitution for LIB command line will fail. Thank you.
-#
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
-extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c extend\ftxsbit.c\
-extend\ftxopen.c extend\ftxgsub.c extend\ftxgpos.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c\
-ttgload.c ttinterp.c ttload.c ttobjs.c ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Microsoft's NMAKE does not handle $($(LIB_FILES)), and using
-# LIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing LIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# See ..\msdos\Makefile.TC for an application.
-.c.obj:
- @$(CC) /c /Fo$@ @<<
- $(CFLAGS) $*.c
-<<
-
-
-!ifndef DEBUG
-# Skipped if DEBUG build
-all: $(OBJS_S)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_S: = + );
-<<KEEP
-!endif
-
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @<<response
-+ $(OBJS_M: = + );
-<<KEEP
-
-$(FT_DEF): $(ARCH)\ttf.def
- -copy $(ARCH)\ttf.def $(FT_DEF)
-
-dll $(FT_DLL): $(OBJS_M) $(FT_DEF)
-!ifdef DLL
- $(CC) /Fe$(FT_DLL) @<<
- $(DLLFLAGS) $**
-<<
- $(IMPLIB) libttf.lib $(FT_DEF)
-!else
-# Re-invoke with flag set. Unfortunately, this discards the other flags.
- $(MAKE) DLL=1 /f $(ARCH)/Makefile.VC dll
-!endif
-
-install: $(FT_DLL)
-!ifdef INSTALL_DIR
- copy $(FT_DLL) $(INSTALL_DIR)
-!else
- copy $(FT_DLL) C:\WINDOWS
-!endif
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- $(LIB) $@ +-$(?: =-+);
-
-!ifdef BIGFONTS
-$(TTFILE:.c=.obj):
- $(CC) /c /Fo$@ @<<
- $(CFLAGS) /Ze $*.c
-
-$(TTMEMORY:.c=.obj):
- $(CC) /c /Fo$@ @<<
- $(CFLAGS) /Ze $*.c
-<<
-
-$(OBJ_S):
- $(CC) /c /Fo$@ @<<
- $(CFLAGS) /Ze $*.c
-<<
-!endif
-
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del libttf.bak
- -del response
-
-distclean: clean
- -del libttf.lib
- -del *.dll
- -del $(FT_DLL:.dll=.def)
- -del C:\WINDOWS\$(FT_DLL)
-!ifdef INSTALL_DIR
- -del $(INSTALL_DIR)\$(FT_DLL)
-!endif
-
-!include "$(ARCH)\depend.win"
-
-# end of Makefile.VC
diff --git a/Build/source/libs/libttf/arch/win16/depend.win b/Build/source/libs/libttf/arch/win16/depend.win
deleted file mode 100644
index 6b3612cbfd2..00000000000
--- a/Build/source/libs/libttf/arch/win16/depend.win
+++ /dev/null
@@ -1,109 +0,0 @@
-# This dependency file to be used with various Windows compilers
-# has been generated automatically with the script `makedep' on
-# 07-Mar-2000.
-
-ttapi.obj: ttapi.c ttconfig.h arch\win16\ft_conf.h freetype.h fterrid.h \
- ftnameid.h ttengine.h tttypes.h ttmutex.h ttcalc.h ttmemory.h \
- ttcache.h ttfile.h ttdebug.h ttobjs.h tttables.h ttcmap.h ttload.h \
- ttgload.h ttraster.h ttextend.h
-ttcache.obj: ttcache.c ttengine.h tttypes.h ttconfig.h \
- arch\win16\ft_conf.h freetype.h fterrid.h ftnameid.h ttmutex.h \
- ttmemory.h ttcache.h ttobjs.h tttables.h ttcmap.h ttdebug.h
-ttcalc.obj: ttcalc.c ttcalc.h ttconfig.h arch\win16\ft_conf.h freetype.h \
- fterrid.h ftnameid.h ttdebug.h tttypes.h tttables.h
-ttcmap.obj: ttcmap.c ttobjs.h ttconfig.h arch\win16\ft_conf.h ttengine.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmutex.h ttcache.h \
- tttables.h ttcmap.h ttdebug.h ttfile.h ttmemory.h ttload.h
-ttdebug.obj: ttdebug.c ttdebug.h ttconfig.h arch\win16\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h tttables.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h ttcmap.h
-ttextend.obj: ttextend.c ttextend.h ttconfig.h arch\win16\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttmemory.h
-ttfile.obj: ttfile.c ttconfig.h arch\win16\ft_conf.h freetype.h \
- fterrid.h ftnameid.h tttypes.h ttdebug.h ttengine.h ttmutex.h \
- ttmemory.h ttfile.h
-ttgload.obj: ttgload.c tttypes.h ttconfig.h arch\win16\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttdebug.h ttcalc.h ttfile.h \
- ttengine.h ttmutex.h tttables.h ttobjs.h ttcache.h ttcmap.h ttgload.h \
- ttmemory.h tttags.h ttload.h
-ttinterp.obj: ttinterp.c freetype.h fterrid.h ftnameid.h tttypes.h \
- ttconfig.h arch\win16\ft_conf.h ttdebug.h ttcalc.h ttmemory.h \
- ttinterp.h ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h \
- ttcmap.h
-ttload.obj: ttload.c tttypes.h ttconfig.h arch\win16\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttdebug.h ttcalc.h ttfile.h \
- ttengine.h ttmutex.h tttables.h ttobjs.h ttcache.h ttcmap.h \
- ttmemory.h tttags.h ttload.h
-ttmemory.obj: ttmemory.c ttdebug.h ttconfig.h arch\win16\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmemory.h ttengine.h \
- ttmutex.h
-ttmutex.obj: ttmutex.c ttmutex.h ttconfig.h arch\win16\ft_conf.h
-ttobjs.obj: ttobjs.c ttobjs.h ttconfig.h arch\win16\ft_conf.h ttengine.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmutex.h ttcache.h \
- tttables.h ttcmap.h ttfile.h ttdebug.h ttcalc.h ttmemory.h ttload.h \
- ttinterp.h ttextend.h
-ttraster.obj: ttraster.c ttraster.h ttconfig.h arch\win16\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttengine.h tttypes.h ttmutex.h \
- ttdebug.h ttcalc.h ttmemory.h
-extend\ftxcmap.obj: extend\ftxcmap.c extend\ftxcmap.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\win16\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h
-extend\ftxerr18.obj: extend\ftxerr18.c ttconfig.h arch\win16\ft_conf.h \
- extend\ftxerr18.h freetype.h fterrid.h ftnameid.h extend\ftxkern.h \
- extend\ftxpost.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h
-extend\ftxgasp.obj: extend\ftxgasp.c extend\ftxgasp.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\win16\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h
-extend\ftxgdef.obj: extend\ftxgdef.c tttypes.h ttconfig.h arch\win16\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxgpos.obj: extend\ftxgpos.c tttypes.h ttconfig.h arch\win16\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxgsub.obj: extend\ftxgsub.c tttypes.h ttconfig.h arch\win16\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxkern.obj: extend\ftxkern.c extend\ftxkern.h freetype.h fterrid.h \
- ftnameid.h ttextend.h ttconfig.h arch\win16\ft_conf.h tttypes.h \
- ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttdebug.h \
- ttmemory.h ttfile.h ttload.h tttags.h
-extend\ftxopen.obj: extend\ftxopen.c tttypes.h ttconfig.h arch\win16\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxpost.obj: extend\ftxpost.c extend\ftxpost.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\win16\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttload.h ttfile.h \
- ttdebug.h tttags.h ttmemory.h ttextend.h
-extend\ftxsbit.obj: extend\ftxsbit.c extend\ftxsbit.h freetype.h fterrid.h \
- ftnameid.h ttobjs.h ttconfig.h arch\win16\ft_conf.h ttengine.h \
- tttypes.h ttmutex.h ttcache.h tttables.h ttcmap.h ttfile.h ttdebug.h \
- ttload.h ttmemory.h tttags.h ttextend.h
-extend\ftxwidth.obj: extend\ftxwidth.c extend\ftxwidth.h freetype.h fterrid.h \
- ftnameid.h ttdebug.h ttconfig.h arch\win16\ft_conf.h tttypes.h \
- ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttfile.h \
- tttags.h ttload.h
-!ifndef __MAKE__
-arch\win16\freetype.obj: arch\win16\freetype.c ttapi.c ttconfig.h \
- arch\win16\ft_conf.h freetype.h fterrid.h ftnameid.h ttengine.h \
- tttypes.h ttmutex.h ttcalc.h ttmemory.h ttcache.h ttfile.h ttdebug.h \
- ttobjs.h tttables.h ttcmap.h ttload.h ttgload.h ttraster.h ttextend.h \
- ttcache.c ttcalc.c ttcmap.c ttdebug.c ttgload.c tttags.h ttinterp.c \
- ttinterp.h ttload.c ttobjs.c ttraster.c arch\win16\hugefile.c \
- ttfile.c arch\win16\hugemem.c ttmutex.c ttextend.c
-arch\win16\hugefile.obj: arch\win16\hugefile.c ttconfig.h arch\win16\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttfile.c ttdebug.h \
- ttengine.h ttmutex.h ttmemory.h ttfile.h
-arch\win16\hugemem.obj: arch\win16\hugemem.c ttdebug.h ttconfig.h \
- arch\win16\ft_conf.h tttypes.h freetype.h fterrid.h ftnameid.h \
- ttmemory.h ttengine.h ttmutex.h
-!endif
diff --git a/Build/source/libs/libttf/arch/win16/freetype.c b/Build/source/libs/libttf/arch/win16/freetype.c
deleted file mode 100644
index 1ff2c887de7..00000000000
--- a/Build/source/libs/libttf/arch/win16/freetype.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* Single object library component for 16-bit Windows. */
-/* Note that low-optimizing compilers (such as Borland ones) cannot */
-/* successfully compile this file, because it exceeds 64K of code size. */
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-/* first include common core components */
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* then system-specific (or ANSI) components */
-
-#ifdef TT_HUGE_PTR
-#include "arch/win16/hugefile.c"
-#include "arch/win16/hugemem.c"
-#else
-#include "ttfile.c"
-#include "ttmemory.c"
-#endif
-#include "ttmutex.c"
-
-/* finally, add some extensions */
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/win16/ft_conf.h b/Build/source/libs/libttf/arch/win16/ft_conf.h
deleted file mode 100644
index 8578ab93148..00000000000
--- a/Build/source/libs/libttf/arch/win16/ft_conf.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for 16-bit Windows */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-/* Define to empty if the keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you need <conio.h> for console I/O functions. */
-#undef HAVE_CONIO_H
-
-/* Define if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define if you have the <libintl.h> header file. */
-#undef HAVE_LIBINTL_H
-
-/* Define if you have the libintl library. */
-#undef HAVE_LIBINTL
-
-/* command.com can't pipe stderr into a file; any message would be */
-/* written into the graphics screen. */
-#define HAVE_PRINT_FUNCTION 1
-
-#define Print( format, ap ) vfprintf( stdout, (format), (ap) )
-
-/* The number of bytes in a int. */
-#define SIZEOF_INT 2
-
-/* The number of bytes in a long. */
-#define SIZEOF_LONG 4
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#undef LONG64
-#undef INT64
-
-#endif /* FT_CONF_H */
-
-/* End of ft_conf.h */
diff --git a/Build/source/libs/libttf/arch/win16/hugefile.c b/Build/source/libs/libttf/arch/win16/hugefile.c
deleted file mode 100644
index 17b5f5948f7..00000000000
--- a/Build/source/libs/libttf/arch/win16/hugefile.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************
- *
- * hugefile.c
- *
- * File I/O Component (body) for dealing with "huge" objects
- * under 16-bit Windows. Relies on the "default" version, with
- * a small hook. Requires Windows 3.1+.
- *
- * Written by Antoine Leca based on ideas from Dave Hoo.
- * Copyright 1999 by Dave Hoo, Antoine Leca,
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 file #includes the normal version, to avoid discrepancies
- * between versions. It uses only ANSI-mandated "tricks", so
- * any ANSI-compliant compiler should be able to compile this file.
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-#include "tttypes.h"
-
-#include <windows.h>
-
- /* Here we include <stdio.h>, to have the proper definition of fread */
-#include <stdio.h>
-
- /* Some compilers define fileno(), some define _fileno()... */
-#ifndef _fileno
-#define _fileno(stream) fileno(stream)
-#endif
-
- /* Then, we divert the use of fread to the Windows version */
-#undef fread
-#define fread(ptr, size, n, stream) \
- _hread( _fileno(stream), (char TT_HUGE_PTR *) ptr, (ULong)n * size )
-
-
- /* Now, we include the "normal" version of `ttfile.c' */
- /* The ANSI/ISO standard mandates that the include of <stdio.h> */
- /* there have no bad effects. */
-#include "ttfile.c"
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/win16/hugemem.c b/Build/source/libs/libttf/arch/win16/hugemem.c
deleted file mode 100644
index c1abe5f1535..00000000000
--- a/Build/source/libs/libttf/arch/win16/hugemem.c
+++ /dev/null
@@ -1,539 +0,0 @@
-/*******************************************************************
- *
- * hugemem.c
- *
- * Memory management component (body)
- * for dealing with "huge" objects with 16-bit Windows.
- *
- * Written by Antoine Leca based on ideas from Dave Hoo.
- * Copyright 1999 by Dave Hoo, Antoine Leca,
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 <limits.h>
-#include <windows.h>
-
-#include "ttdebug.h"
-#include "ttmemory.h"
-#include "ttengine.h"
-
-#ifndef TT_HUGE_PTR
-#error "This component needs TT_HUGE_PTR to be #defined."
-#endif
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE
-#error "This component needs static allocation and is not re-entrant."
-#endif
-
- /* If the memory reclaimed is abobve this limit, alloc directly from */
- /* global heap. Else, alloc using malloc (using suballocation). */
-#ifndef MEMORY_MIN_GLOBAL
-#define MEMORY_MIN_GLOBAL 4096
-#endif
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_memory
-
-
-#ifdef DEBUG_MEMORY
-
-#include <stdio.h>
-
-#define MAX_TRACKED_BLOCKS 1024
-
- struct TMemRec_
- {
- void* base;
- Long size;
- };
-
- typedef struct TMemRec_ TMemRec;
-
- static TMemRec pointers[MAX_TRACKED_BLOCKS + 1];
-
- static Int num_alloc;
- static Int num_free;
- static Int num_realloc; /* counts only `real' reallocations
- (i.e., an existing buffer will be resized
- to a value larger than zero */
-
- static Int fail_alloc;
- static Int fail_realloc;
- static Int fail_free;
-
-#else
-
- /* We need a tracing stack of the calls to big chunks of memory, */
- /* in order to call the matching version of free(). */
-
-#define MAX_TRACKED_BIGCHUNKS 64
-
- struct TMemRec_
- {
- void* base;
- };
-
- typedef struct TMemRec_ TMemRec;
-
- static TMemRec pointers[MAX_TRACKED_BIGCHUNKS + 1];
-
-#endif /* DEBUG_MEMORY */
-
-
-#ifndef TT_CONFIG_REENTRANT
- Long TTMemory_Allocated;
- Long TTMemory_MaxAllocated;
-#endif
-
-
-/*******************************************************************
- *
- * Function : TT_Alloc
- *
- * Description : Allocates memory from the heap buffer.
- *
- * Input : Size size of the memory to be allocated
- * P pointer to a buffer pointer
- *
- * Output : Error code.
- *
- * NOTE : The newly allocated block should _always_ be zeroed
- * on return. Many parts of the engine rely on this to
- * work properly.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Alloc( ULong Size, void** P )
- {
- Int i;
-
-
- if ( !P )
- return TT_Err_Invalid_Argument;
- /* Also see below for another case of "invalid argument". */
-
- if ( Size > 0 )
- {
- if ( Size >= MEMORY_MIN_GLOBAL )
- {
- HANDLE hMem;
-
- hMem = GlobalAlloc( GMEM_ZEROINIT, Size );
- if ( !hMem )
- return TT_Err_Out_Of_Memory;
-
- *P = (void*)GlobalLock( hMem );
- }
- else
- *P = (void*)malloc( Size );
-
- if ( !*P )
- return TT_Err_Out_Of_Memory;
-
-#ifndef TT_CONFIG_REENTRANT
- TTMemory_MaxAllocated += Size;
- TTMemory_Allocated += Size;
-#endif
-
-#ifdef DEBUG_MEMORY
-
- num_alloc++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != NULL )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_alloc++;
- else
- {
- pointers[i].base = *P;
- pointers[i].size = Size;
- }
-
-#else
-
- if ( Size >= MEMORY_MIN_GLOBAL )
- {
- i = 0;
- while ( i < MAX_TRACKED_BIGCHUNKS && pointers[i].base != NULL )
- i++;
-
- if ( i >= MAX_TRACKED_BIGCHUNKS )
- /* We fail badly here. Increase MAX_TRACKED_BIGCHUNKS if needed. */
- return TT_Err_Invalid_Argument;
- else
- pointers[i].base = *P;
- }
-
-#endif /* DEBUG_MEMORY */
-
- /* The nice thing about GlobalAlloc is that it zeroes the memory. */
-
- if ( Size < MEMORY_MIN_GLOBAL )
- MEM_Set( *P, 0, Size );
-
- }
- else
- *P = NULL;
-
- return TT_Err_Ok;
- }
-
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*******************************************************************
- *
- * Function : TT_Realloc
- *
- * Description : Reallocates memory from the heap buffer.
- *
- * Input : Size new size of the memory to be allocated;
- * if zero, TT_Free() will be called
- * P pointer to a buffer pointer; if *P == NULL,
- * TT_Alloc() will be called
- *
- * Output : Error code.
- *
- * NOTES : It's not necessary to zero the memory in case the
- * reallocated buffer is larger than before -- the
- * application has to take care of this.
- *
- * If the memory request fails, TT_Free() will be
- * called on *P, and TT_Err_Out_Of_Memory returned.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Realloc( ULong Size, void** P )
- {
- ULong oldSize;
- void* Q;
- Int i;
-
-
- if ( !P )
- return TT_Err_Invalid_Argument;
-
- if ( !*P )
- return TT_Alloc( Size, P );
-
- if ( Size == 0 )
- return TT_Free( P );
-
-#ifdef DEBUG_MEMORY
-
- num_realloc++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != *P )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_realloc++;
- else
- oldSize = pointers[i].size;
-
-#else
-
- i = 0;
- while ( i < MAX_TRACKED_BIGCHUNKS && pointers[i].base != *P )
- i++;
-
- /* If we did not found the pointer, then this is a "small" chunk. */
-
- if ( i < MAX_TRACKED_BIGCHUNKS )
- {
- /* Signal we found a big one. Real size does not matter. */
- oldSize = MEMORY_MIN_GLOBAL;
- }
-
-#endif /* DEBUG_MEMORY */
-
- if ( oldSize >= MEMORY_MIN_GLOBAL )
- {
- /* Deal with a big chunk. */
- HANDLE hMem, hNewMem;
-
- hMem = GlobalHandle ( (ULong)*P >> 16 ) & 0xFFFF;
- if ( !hMem ) /* Bad call... */
- return TT_Err_Invalid_Argument;
-
- GlobalUnlock( hMem );
- hNewMem = GlobalReAlloc( hMem, Size, 0 );
- if ( hNewMem )
- *P = (void*)GlobalLock( hNewMem );
- }
- if ( Size >= MEMORY_MIN_GLOBAL )
- {
- /* A small chunk crosses the limit... */
-
- if( TT_Alloc( Size, &Q ) != TT_Err_Ok )
- Q = NULL; /* Failed to create the new block. */
- else
- MEM_Copy( Q, *P, oldSize );
-
- /* We need to register the new entry. */
-#ifndef DEBUG_MEMORY
-
- i = 0;
- while ( i < MAX_TRACKED_BIGCHUNKS && pointers[i].base != NULL )
- i++;
-
- if ( i >= MAX_TRACKED_BIGCHUNKS )
- /* We fail badly here. Increase MAX_TRACKED_BIGCHUNKS if needed. */
- return TT_Err_Invalid_Argument;
-#endif /* DEBUG_MEMORY */
- }
- else
- Q = (void*)realloc( *P, Size );
-
- if ( !Q )
- {
- TT_Free( *P );
- return TT_Err_Out_Of_Memory;
- }
-
-#ifdef DEBUG_MEMORY
-
- if ( i < MAX_TRACKED_BLOCKS )
- {
-#ifndef TT_CONFIG_REENTRANT
- TTMemory_Allocated += Size - pointers[i].size;
- if ( Size > pointers[i].size )
- TTMemory_MaxAllocated += Size - pointers[i].size;
-#endif
-
- pointers[i].base = Q;
- pointers[i].size = Size;
- }
-#else
- if ( i < MAX_TRACKED_BIGCHUNKS )
- {
- pointers[i].base = Q;
- }
-#endif /* DEBUG_MEMORY */
-
- *P = Q;
-
- return TT_Err_Ok;
- }
-
-
-#endif /* TT_CONFIG_OPTION_EXTEND_ENGINE */
-
-
-/*******************************************************************
- *
- * Function : TT_Free
- *
- * Description : Releases a previously allocated block of memory.
- *
- * Input : P pointer to memory block
- *
- * Output : Always SUCCESS.
- *
- * Note : The pointer must _always_ be set to NULL by this function.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Free( void** P )
- {
- Int i;
- Long Size = 0;
-
-
- if ( !P || !*P )
- return TT_Err_Ok;
-
-#ifdef DEBUG_MEMORY
-
- num_free++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != *P )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_free++;
- else
- {
-#ifndef TT_CONFIG_REENTRANT
- TTMemory_Allocated -= pointers[i].size;
-#endif
-
- Size = pointers[i].size;
- pointers[i].base = NULL;
- pointers[i].size = 0;
- }
-
-#else
-
- i = 0;
- while ( i < MAX_TRACKED_BIGCHUNKS && pointers[i].base != *P )
- i++;
-
- /* If we did not found the pointer, then this is a "small" chunk. */
-
- if ( i < MAX_TRACKED_BIGCHUNKS )
- {
- pointers[i].base = NULL;
- /* Signal we found a big one. Real size does not matter. */
- Size = MEMORY_MIN_GLOBAL;
- }
-
-#endif /* DEBUG_MEMORY */
-
- if ( Size >= MEMORY_MIN_GLOBAL )
- {
- HANDLE hMem;
-
- hMem = GlobalHandle ( (ULong)*P >> 16 ) & 0xFFFF;
- if ( !hMem ) /* Bad call... */
- return TT_Err_Invalid_Argument;
-
- GlobalUnlock( hMem );
- GlobalFree ( hMem );
- }
- else
- free( *P );
-
- *P = NULL;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTMemory_Init
- *
- * Description : Initializes the memory.
- *
- * Output : Always SUCCESS.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTMemory_Init( void )
- {
-#ifdef DEBUG_MEMORY
- Int i;
-
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- pointers[i].base = NULL;
- pointers[i].size = 0;
- }
-
- num_alloc = 0;
- num_realloc = 0;
- num_free = 0;
-
- fail_alloc = 0;
- fail_realloc = 0;
- fail_free = 0;
-#else
- Int i;
-
- for ( i = 0; i < MAX_TRACKED_BIGCHUNKS; i++ )
- {
- pointers[i].base = NULL;
- }
-#endif
-
-
-#ifndef TT_CONFIG_REENTRANT
- TTMemory_Allocated = 0;
- TTMemory_MaxAllocated = 0;
-#endif
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTMemory_Done
- *
- * Description : Finalizes memory usage.
- *
- * Output : Always SUCCESS.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTMemory_Done( void )
- {
-#ifdef DEBUG_MEMORY
- Int i, num_leaked, tot_leaked;
-
-
- num_leaked = 0;
- tot_leaked = 0;
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- if ( pointers[i].base )
- {
- num_leaked ++;
- tot_leaked += pointers[i].size;
- }
- }
-
- fprintf( stderr,
- "%d memory allocations, of which %d failed\n",
- num_alloc,
- fail_alloc );
-
- fprintf( stderr,
- "%d memory reallocations, of which %d failed\n",
- num_realloc,
- fail_realloc );
-
- fprintf( stderr,
- "%d memory frees, of which %d failed\n",
- num_free,
- fail_free );
-
- if ( num_leaked > 0 )
- {
- fprintf( stderr,
- "There are %d leaked memory blocks, totalizing %d bytes\n",
- num_leaked, tot_leaked );
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- if ( pointers[i].base )
- {
- fprintf( stderr,
- "index: %4d (base: $%08lx, size: %08ld)\n",
- i,
- (long)pointers[i].base,
- pointers[i].size );
- }
- }
- }
- else
- fprintf( stderr, "No memory leaks !\n" );
-
-#endif /* DEBUG_MEMORY */
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/win16/makedef b/Build/source/libs/libttf/arch/win16/makedef
deleted file mode 100644
index f16fbb15f96..00000000000
--- a/Build/source/libs/libttf/arch/win16/makedef
+++ /dev/null
@@ -1,24 +0,0 @@
-# makedef
-#
-# This shell script creates a .DEF file necessary for building as DLL
-# on the Windows 16-bit platform.
-
-echo "\
-; This definition file to be used to built the library as DLL
-; has been generated automatically with the script \`makedef' on
-; `date +%d-%b-%Y`.
-
-LIBRARY ft14_16
-DESCRIPTION 'FreeType 1.4 16-bit DLL © 1996-2000 Turner, Wilhelm, Lemberg'
-EXETYPE WINDOWS
-CODE PRELOAD MOVEABLE DISCARDABLE
-DATA PRELOAD MOVEABLE SINGLE
-EXPORTS
-" > ttf.def
-
-(cd ../..
- sed -n -e "/^ *EXPORT_DEF/!d ; n ; s/(.*$//" \
- -e "s/;$//" -e "s/ const / /" -e "s/ *[a-zA-Z][a-zA-Z_\*]* //" \
- -e "s/ *//g" -e "s/^\(.*\)/ _\1/" -e "p" *.h extend/*.h) >> ttf.def
-
-# eof
diff --git a/Build/source/libs/libttf/arch/win16/makedep b/Build/source/libs/libttf/arch/win16/makedep
deleted file mode 100644
index 594952bd2a1..00000000000
--- a/Build/source/libs/libttf/arch/win16/makedep
+++ /dev/null
@@ -1,32 +0,0 @@
-# makedep
-#
-# This shell script creates a dependency file necessary for older compilers
-# on the Windows 16-bit platform.
-
-echo "\
-# This dependency file to be used with various Windows compilers
-# has been generated automatically with the script \`makedep' on
-# `date +%d-%b-%Y`.
-" > depend.win
-
-(cd ../..
- gcc -MM -Iarch/win16 -I. \
- *.c | \
- sed -e "s/\.o:/.obj:/" -e "s:/:\\\\:g") >> depend.win
-
-(cd ../..
- gcc -MM -Iarch/win16 -I. -Iextend \
- extend/*.c | \
- sed -e "s/^\(.*\)\.o:/extend\\\\\1.obj:/" -e "s:/:\\\\:g") >> depend.win
-
-echo "!ifndef __MAKE__" >> depend.win
-
-(cd ../..
- gcc -MM -Iarch/win16 -I. -Iextend -DTT_HUGE_PTR \
- arch/win16/*.c | \
- sed -e "s/^\(.*\)\.o:/arch\\\\win16\\\\\1.obj:/" \
- -e "s:/:\\\\:g") >> depend.win
-
-echo "!endif" >> depend.win
-
-# eof
diff --git a/Build/source/libs/libttf/arch/win16/ttf.def b/Build/source/libs/libttf/arch/win16/ttf.def
deleted file mode 100644
index 3ebc14cddb2..00000000000
--- a/Build/source/libs/libttf/arch/win16/ttf.def
+++ /dev/null
@@ -1,130 +0,0 @@
-; This definition file to be used to built the library as DLL
-; has been generated automatically with the script `makedef' on
-; 07-Mar-2000.
-
-LIBRARY ft14_16
-DESCRIPTION 'FreeType 1.4 16-bit DLL © 1996-2000 Turner, Wilhelm, Lemberg'
-EXETYPE WINDOWS
-CODE PRELOAD MOVEABLE DISCARDABLE
-DATA PRELOAD MOVEABLE SINGLE
-EXPORTS
-
- _TT_FreeType_Version
- _TT_Init_FreeType
- _TT_Done_FreeType
- _TT_Set_Raster_Gray_Palette
- _TT_Open_Face
- _TT_Open_Collection
- _TT_Get_Face_Properties
- _TT_Set_Face_Pointer
- _TT_Get_Face_Pointer
- _TT_Flush_Face
- _TT_Get_Face_Metrics
- _TT_Close_Face
- _TT_Get_Font_Data
- _TT_New_Instance
- _TT_Set_Instance_Resolutions
- _TT_Set_Instance_CharSize
- _TT_Set_Instance_CharSizes
- _TT_Set_Instance_PixelSizes
- _TT_Set_Instance_Transform_Flags
- _TT_Get_Instance_Metrics
- _TT_Set_Instance_Pointer
- _TT_Get_Instance_Pointer
- _TT_Done_Instance
- _TT_New_Glyph
- _TT_Done_Glyph
- _TT_Load_Glyph
- _TT_Get_Glyph_Outline
- _TT_Get_Glyph_Metrics
- _TT_Get_Glyph_Big_Metrics
- _TT_Get_Glyph_Bitmap
- _TT_Get_Glyph_Pixmap
- _TT_New_Outline
- _TT_Done_Outline
- _TT_Copy_Outline
- _TT_Get_Outline_Bitmap
- _TT_Get_Outline_Pixmap
- _TT_Get_Outline_BBox
- _TT_Transform_Outline
- _TT_Translate_Outline
- _TT_Transform_Vector
- _TT_MulDiv
- _TT_MulFix
- _TT_Get_CharMap_Count
- _TT_Get_CharMap_ID
- _TT_Get_CharMap
- _TT_Char_Index
- _TT_Get_Name_Count
- _TT_Get_Name_ID
- _TT_Get_Name_String
- _TT_Register_Extension
- _TT_Extension_Get
- _TT_Use_Stream
- _TT_Done_Stream
- _TT_Flush_Stream
- _TT_Read_File
- _TT_Seek_File
- _TT_Skip_File
- _TT_Read_At_File
- _TT_File_Pos
- _TT_Stream_Size
- _TT_Null_FileFrame
- _TT_Access_Frame
- _TT_Check_And_Access_Frame
- _TT_Forget_Frame
- _TT_Get_Char
- _TT_Get_Short
- _TT_Get_Long
- _TT_LookUp_Table
- _TT_Alloc
- _TT_Realloc
- _TT_Free
- _TT_CharMap_First
- _TT_CharMap_Next
- _TT_CharMap_Last
- _TT_ErrToString18
- _TT_Get_Face_Gasp_Flags
- _TT_Init_GDEF_Extension
- _TT_Load_GDEF_Table
- _TT_GDEF_Get_Glyph_Property
- _TT_GDEF_Build_ClassDefinition
- _TT_Init_GPOS_Extension
- _TT_Load_GPOS_Table
- _TT_GPOS_Select_Script
- _TT_GPOS_Select_Language
- _TT_GPOS_Select_Feature
- _TT_GPOS_Query_Scripts
- _TT_GPOS_Query_Languages
- _TT_GPOS_Query_Features
- _TT_GPOS_Add_Feature
- _TT_GPOS_Clear_Features
- _TT_GPOS_Register_Glyph_Function
- _TT_GPOS_Register_MM_Function
- _TT_GPOS_Apply_String
- _TT_Init_GSUB_Extension
- _TT_Load_GSUB_Table
- _TT_GSUB_Select_Script
- _TT_GSUB_Select_Language
- _TT_GSUB_Select_Feature
- _TT_GSUB_Query_Scripts
- _TT_GSUB_Query_Languages
- _TT_GSUB_Query_Features
- _TT_GSUB_Add_Feature
- _TT_GSUB_Clear_Features
- _TT_GSUB_Register_Alternate_Function
- _TT_GSUB_Apply_String
- _TT_GSUB_Add_String
- _TT_Init_Kerning_Extension
- _TT_Get_Kerning_Directory
- _TT_Load_Kerning_Table
- _TT_Init_Post_Extension
- _TT_Load_PS_Names
- _TT_Get_PS_Name
- _TT_Init_SBit_Extension
- _TT_Get_Face_Bitmaps
- _TT_New_SBit_Image
- _TT_Done_SBit_Image
- _TT_Get_SBit_Strike
- _TT_Load_Glyph_Bitmap
- _TT_Get_Face_Widths
diff --git a/Build/source/libs/libttf/arch/win32/Makefile.BC b/Build/source/libs/libttf/arch/win32/Makefile.BC
deleted file mode 100644
index a2a74d91392..00000000000
--- a/Build/source/libs/libttf/arch/win32/Makefile.BC
+++ /dev/null
@@ -1,161 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Borland C++ for Win32.
-#
-# You will need Borland MAKE.
-# Tested with Borland C++ v.5.0 and Borland C++ builder 4.0.
-# Does not work with Borland C++ 4.0, since it needs __declspec.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -farch/win32/Makefile.BC
-#
-#
-# A DLL version of the library can be built with
-#
-# make -DDLL -farch/win32/Makefile.BC dll
-#
-# A debug version can be obtained with
-#
-# make -DDEBUG -farch/win32/Makefile.BC
-
-ARCH = arch\win32
-FT_MAKEFILE = $(ARCH)\Makefile.BC
-FT_DLL = ft14_32.dll
-
-CC = bcc32
-LIB = tlib /c /e
-IMPLIB = implib -c
-
-SPURIOUS_WARNINGS = -w-nak -w-par -w-use -w-aus -w-stu -w-stv -w-cln -w-sig
-
-!if ! $d(DEBUG)
-CFLAGS = -O2 -A -i40 -I$(ARCH);.;extend $(SPURIOUS_WARNINGS)
-DLLFLAGS = -WD
-!else
-CFLAGS = -v -A -i40 -I$(ARCH);.;extend $(SPURIOUS_WARNINGS)
-DLLFLAGS = -v -WD
-!endif
-
-FT_DEF = $(FT_DLL:.dll=.def)
-!if $d(DLL)
-CFLAGS = $(CFLAGS) \
- -DEXPORT_DEF=__declspec(dllexport) -DEXPORT_FUNC=__declspec(dllexport)
-!endif
-
-
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces before the \ at end of line,
-# otherwise the substitution for TLIB command line will fail.
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
- extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c\
- extend\ftxsbit.c extend\ftxgsub.c extend\ftxgpos.c\
- extend\ftxopen.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c\
- ttgload.c ttinterp.c ttload.c ttobjs.c\
- ttraster.c ttextend.c ttdebug.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Borland make does not handle $($(LIB_FILES)), and using
-# -DLIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing TLIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# See ../msdos/Makefile.TC for an application.
-.c.obj:
- $(CC) -c -o$* @&&|
- $(CFLAGS) $<
-|
-
-
-!if ! $d(DEBUG)
-# Skipped if DEBUG build
-all: $(OBJS_S)
- -del libttf.lib
- $(LIB) libttf.lib @&&|
-+ $(OBJS_S: = + )
-|
-
-dll $(FT_DLL): $(OBJS_S) $(FT_DEF)
-!if $d(DLL)
- $(CC) @&&|
- $(DLLFLAGS) -e$(FT_DLL) $(OBJS_S)
-|
- $(IMPLIB) libttf $(FT_DLL)
-!else
- $(MAKE) -DDLL -f$(FT_MAKEFILE) dll # Re-invoke with flag set.
-!endif
-!endif
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) libttf.lib @&&|
-+ $(OBJS_M: = + )
-|
-
-!ifdef DEBUG
-dll $(FT_DLL): $(OBJS_M) $(FT_DEF)
-!if $d(DLL)
- $(CC) @&&|
- $(DLLFLAGS) -e$(FT_DLL) $(OBJS_M)
-|
- $(IMPLIB) libttf $(FT_DLL)
-!else
- $(MAKE) -DDEBUG -DDLL -f$(FT_MAKEFILE) dll
-!endif
-!endif
-
-install: $(FT_DLL)
-!ifdef INSTALL_DIR
- copy $(FT_DLL) $(INSTALL_DIR)
-!else
- copy $(FT_DLL) C:\WINDOWS
-!endif
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- -del libttf.lib
- echo -+$(**: =-+)> response
- $(LIB) libttf.lib @&&|
-+ $(**: = + )
-|
-
-$(FT_DEF): $(ARCH)\ttf.def
- -copy $(ARCH)\ttf.def $(FT_DEF)
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del libttf.bak
- -del response
- -del *.def
- -del *.tds
-
-distclean: clean
- -del libttf.lib
- -del *.dll
- -del $(FT_DEF)
- -del C:\WINDOWS\$(FT_DLL)
-!if $d(INSTALL_DIR)
- -del $(INSTALL_DIR)\$(FT_DLL)
-!endif
-
-!include "$(ARCH)\depend.win"
-
-# end of Makefile
diff --git a/Build/source/libs/libttf/arch/win32/Makefile.CL b/Build/source/libs/libttf/arch/win32/Makefile.CL
deleted file mode 100644
index 5b1cb14a2e7..00000000000
--- a/Build/source/libs/libttf/arch/win32/Makefile.CL
+++ /dev/null
@@ -1,165 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for Microsoft Visual C++ for 32-bit Windows.
-#
-# You will need NMAKE.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# nmake /f arch\win32\Makefile.CL
-#
-#
-# A DLL version of the library can be built with
-#
-# nmake DLL=1 /f arch\win32\Makefile.CL dll
-#
-# Debug versions can be obtained with
-#
-# nmake DEBUG=1 /f arch\win32\Makefile.CL
-
-ARCH = arch\win32
-FT_MAKEFILE = $(ARCH)\Makefile.CL
-FT_DLL = ft14_32.dll
-
-CC = cl /nologo
-LIB = lib /nologo
-LINK = link /nologo
-
-CFLAGS = /Za /W2 -I$(ARCH) -I. -Iextend
-
-!ifndef DEBUG
-CFLAGS = $(CFLAGS) /Ox
-DLLFLAGS = /RELEASE
-!else
-CFLAGS = $(CFLAGS) /Zi /Ge
-DLLFLAGS = /DEBUG
-!endif
-
-!ifdef DLL
-CFLAGS = $(CFLAGS) /GD \
- /DEXPORT_DEF=__declspec(dllexport) /DEXPORT_FUNC=__declspec(dllexport)
-!else
-CFLAGS = $(CFLAGS) /GA
-!endif
-
-
-TTFILE = .\ttfile.c
-TTMEMORY = .\ttmemory.c
-TTMUTEX = .\ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-# Do not insert spaces between the file names or at end of line, otherwise
-# the substitution for LIB command line will fail. Thank you.
-#
-SRC_X = extend\ftxgasp.c extend\ftxkern.c extend\ftxpost.c\
-extend\ftxcmap.c extend\ftxwidth.c extend\ftxerr18.c extend\ftxsbit.c\
-extend\ftxopen.c extend\ftxgsub.c extend\ftxgpos.c extend\ftxgdef.c
-OBJS_X = $(SRC_X:.c=.obj)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c\
-ttgload.c ttinterp.c ttload.c ttobjs.c ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.obj) $(OBJS_X)
-
-SRC_S = $(ARCH)\freetype.c
-OBJ_S = $(SRC_S:.c=.obj)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-# Since Microsoft's NMAKE does not handle $($(LIB_FILES)), and using
-# LIB_FILES="$(OBJS_S)" will excess the capacity of COMMAND.COM, we cheat
-# by constructing LIB's response file directly in the `all' target.
-#
-# Another solution, useful during debugging of part of the library,
-# would be to include each .obj in the library as soon as it is compiled.
-# See ..\msdos\Makefile.TC for an application.
-.c.obj:
- @$(CC) /c /Fo$@ @<<
- $(CFLAGS) $*.c
-<<
-
-
-!ifndef DEBUG
-# Skipped if DEBUG build
-all: $(OBJS_S)
- -del libttf.lib
- $(LIB) /OUT:libttf.lib @<<response
- $(OBJS_S)
-<<KEEP
-
-dll $(FT_DLL): $(OBJS_S)
-!ifdef DLL
- $(LINK) @<<response
- $(DLLFLAGS)
- /DLL
- /OUT:$(FT_DLL)
- /IMPLIB:libttf.lib
- /DEF:$(ARCH)\ttf.def
- $**
-<<KEEP
-!else
- $(MAKE) DLL=1 /f $(FT_MAKEFILE) dll # Re-invoke with flag set.
-!endif
-
-!endif
-
-
-debug: $(OBJS_M)
- -del libttf.lib
- $(LIB) /OUT:libttf.lib @<<response
- $(OBJS_M)
-<<KEEP
-
-!ifdef DEBUG
-dll $(FT_DLL): $(OBJS_M)
-!ifdef DLL
- $(LINK) @<<response
- $(DLLFLAGS)
- /DLL
- /OUT:$(FT_DLL)
- /IMPLIB:libttf.lib
- /DEF:$(ARCH)\ttf.def
- $**
-<<KEEP
-!else
- $(MAKE) DLL=1 DEBUG=1 /f $(FT_MAKEFILE) dll # Re-invoke with flag set.
-!endif
-!endif
-
-install: $(FT_DLL)
-!ifdef INSTALL_DIR
- copy $(FT_DLL) $(INSTALL_DIR)
-!else
- copy $(FT_DLL) C:\WINDOWS
-!endif
-
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-# Not used here because it excesses the capacity of COMMAND.COM...
-libttf.lib: $(LIB_FILES)
- $(LIB) /OUT:$@ $**
-
-
-clean:
- -del *.obj
- -del extend\*.obj
- -del $(ARCH)\*.obj
- -del libttf.bak
- -del response
- -del *.exp
- -del *.pch
- -del *.ilk
-
-distclean: clean
- -del libttf.lib
- -del *.dll
- -del *.pdb
- -del C:\WINDOWS\$(FT_DLL)
-!ifdef INSTALL_DIR
- -del $(INSTALL_DIR)\$(FT_DLL)
-!endif
-
-!include "$(ARCH)\depend.win"
-
-# end of Makefile.CL
diff --git a/Build/source/libs/libttf/arch/win32/Makefile.Min b/Build/source/libs/libttf/arch/win32/Makefile.Min
deleted file mode 100644
index 526adff9ee0..00000000000
--- a/Build/source/libs/libttf/arch/win32/Makefile.Min
+++ /dev/null
@@ -1,98 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for MinGW32 gcc under Win9x.
-#
-# You will need a port of GNU make; the MinGW32 port works.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -f arch/win32/Makefile.Min
-#
-#
-# When compared to the other Makefiles for gcc, there is a difference
-# here, because COMMAND.COM on Win 9x is not able to process more than
-# 126 characters. So the command line for ar use the * shell character.
-#
-# This is not as safe as normal, because unnecessary files may be
-# included by mistake in the library.
-# The normal behaviour can be restored by defining NON_LIMITED_SHELL=1
-
-ARCH = arch/win32
-FT_MAKEFILE = $(ARCH)/Makefile.Min
-
-CC = gcc
-
-ifdef DEBUG
-CFLAGS = -Wall -O2 -g -ansi -pedantic -I$(ARCH) -I. -Iextend
-else
-CFLAGS = -Wall -ansi -pedantic -O2 -s -I$(ARCH) -I. -Iextend
-endif
-
-
-TTFILE = ./ttfile.c
-TTMEMORY = ./ttmemory.c
-TTMUTEX = ./ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxgdef.c \
- extend/ftxopen.c extend/ftxerr18.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttgload.c ttinterp.c ttload.c ttobjs.c \
- ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-.PHONY: all debug clean distclean depend
-
-
-all:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=$(OBJS_S) OBJ_LOC=$(ARCH) libttf.a
-
-debug:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=$(OBJS_M) DEBUG=1 OBJ_LOC=. libttf.a
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-ifdef NOT_LIMITED_SHELL
-libttf.a: $(LIB_FILES)
- -del $@
- ar src $@ $^
-else
-# The previous command exceeds the capacity of COMMAND.COM,
-# so we cheat by passing * character to ar
-libttf.a: $(LIB_FILES)
- -del $@
- ar src $@ $(OBJ_LOC)/*.o extend/*.o
-endif
-
-
-clean:
- -del *.o
- -del extend\*.o
- -del $(subst /,\,$(ARCH)\*.o)
- -del response
-
-distclean: clean
- -del dep.end
- -del libttf.a
-
-depend: $(SRS_S) $(SRC_M) $(SRC_X)
- $(CC) -E -M $^ > dep.end
-
-ifeq (dep.end,$(wildcard dep.end))
- include dep.end
-endif
-
-# end of Makefile.Min
diff --git a/Build/source/libs/libttf/arch/win32/Makefile.VC b/Build/source/libs/libttf/arch/win32/Makefile.VC
deleted file mode 100644
index 7974aa734d8..00000000000
--- a/Build/source/libs/libttf/arch/win32/Makefile.VC
+++ /dev/null
@@ -1,195 +0,0 @@
-# Visual C++ 2.x, 4.x, 5.0 and 6.0 makefile for freetype
-# adapted from suns example makefile (related to the TCL script language)
-
-# Does not depend on the presence of any environment variables in
-# order to compile freetype; all needed information is derived from
-# location of the compiler directories.
-
-#
-# Project directories
-#
-# ROOT = top of source tree
-#
-# TMPDIR = location where .obj files should be stored during build
-#
-# TOOLS32 = location of VC++ 32-bit development tools. Note that the
-# VC++ 2.0 header files are broken, so you need to use the
-# ones that come with the developer network CD's, or later
-# versions of VC++.
-#
-
-ROOT = ..\..
-TMPDIR = .
-#TOOLS32 = c:\msdev # VC++ 2.x,4.x
-#TOOLS32 = c:\Program Files\devstudio\vc # VC++ 5.x
-TOOLS32 = c:\Program Files\Microsoft Visual Studio\Vc98 # VC++ 6.x
-INSTALLDIR = c:\WINNT\SYSTEM32
-
-# Set this to the appropriate value of /MACHINE: for your platform
-MACHINE = IX86
-
-# Comment the following line to compile with symbols
-NODEBUG=1
-
-
-######################################################################
-# Do not modify below this line
-######################################################################
-
-TTF = ttf
-TTFLIB = $(TTF).lib
-TTFDLL = $(TTF).dll
-
-TTFOBJS = \
- $(TMPDIR)\ttapi.obj \
- $(TMPDIR)\ttcache.obj \
- $(TMPDIR)\ttcalc.obj \
- $(TMPDIR)\ttcmap.obj \
- $(TMPDIR)\ttdebug.obj \
- $(TMPDIR)\ttfile.obj \
- $(TMPDIR)\ttgload.obj \
- $(TMPDIR)\ttinterp.obj \
- $(TMPDIR)\ttload.obj \
- $(TMPDIR)\ttmemory.obj \
- $(TMPDIR)\ttmutex.obj \
- $(TMPDIR)\ttobjs.obj \
- $(TMPDIR)\ttraster.obj \
- $(TMPDIR)\ttextend.obj \
- $(TMPDIR)\ftxcmap.obj \
- $(TMPDIR)\ftxgasp.obj \
- $(TMPDIR)\ftxkern.obj \
- $(TMPDIR)\ftxpost.obj \
- $(TMPDIR)\ftxwidth.obj \
- $(TMPDIR)\ftxerr18.obj
-
-
-PATH=$(TOOLS32)\bin;$(PATH)
-
-cc32 = "$(TOOLS32)\bin\cl.exe"
-link32 = "$(TOOLS32)\bin\link.exe"
-include32 = "-I$(TOOLS32)\include" -I$(ROOT)\arch\win32
-CP = copy
-RM = del
-
-TTF_INCLUDES = -I$(ROOT)
-TTF_DEFINES = -nologo -D__WIN32__ -D__WIN32DLL__
-
-TTF_CFLAGS = $(cdebug) $(cflags) $(cvarsdll) $(include32) \
- $(TTF_INCLUDES) $(TTF_DEFINES)
-CON_CFLAGS = $(cdebug) $(cflags) $(cvars) $(include32) -DCONSOLE
-DOS_CFLAGS = $(cdebug) $(cflags) $(include16) -AL
-
-######################################################################
-# Link flags
-######################################################################
-
-!IFDEF NODEBUG
-ldebug = /RELEASE
-!ELSE
-ldebug = -debug:full -debugtype:cv
-!ENDIF
-
-# declarations common to all linker options
-lcommon = /NODEFAULTLIB /RELEASE /NOLOGO
-
-# declarations for use on Intel i386, i486, and Pentium systems
-!IF "$(MACHINE)" == "IX86"
-DLLENTRY = @12
-lflags = $(lcommon) /MACHINE:$(MACHINE)
-!ELSE
-lflags = $(lcommon) /MACHINE:$(MACHINE)
-!ENDIF
-
-conlflags = $(lflags) -subsystem:console -entry:mainCRTStartup
-guilflags = $(lflags) -subsystem:windows -entry:WinMainCRTStartup
-dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll
-
-!IF "$(MACHINE)" == "PPC"
-libc = libc.lib
-libcdll = crtdll.lib
-!ELSE
-libc = libc.lib oldnames.lib
-libcdll = msvcrt.lib oldnames.lib
-!ENDIF
-
-baselibs = kernel32.lib $(optlibs) advapi32.lib
-winlibs = $(baselibs) user32.lib gdi32.lib comdlg32.lib winspool.lib
-
-guilibs = $(libc) $(winlibs)
-conlibs = $(libc) $(baselibs)
-guilibsdll = $(libcdll) $(winlibs)
-conlibsdll = $(libcdll) $(baselibs)
-
-######################################################################
-# Compile flags
-######################################################################
-
-!IFDEF NODEBUG
-cdebug = -O2 -Gs -GD
-!ELSE
-cdebug = -Z7 -Od -WX
-!ENDIF
-
-# declarations common to all compiler options
-ccommon = -c -W3 -nologo -YX -Dtry=__try -Dexcept=__except
-
-# NEED BYTEORDER INFORMATION HERE !!
-!IF "$(MACHINE)" == "IX86"
-cflags = $(ccommon) -D_X86_=1
-!ELSE
-!IF "$(MACHINE)" == "MIPS"
-cflags = $(ccommon) -D_MIPS_=1
-!ELSE
-!IF "$(MACHINE)" == "PPC"
-cflags = $(ccommon) -D_PPC_=1
-!ELSE
-!IF "$(MACHINE)" == "ALPHA"
-cflags = $(ccommon) -D_ALPHA_=1
-!ENDIF
-!ENDIF
-!ENDIF
-!ENDIF
-
-cvars = -DWIN32 -D_WIN32
-cvarsmt = $(cvars) -D_MT
-cvarsdll = $(cvarsmt) -D_DLL
-
-######################################################################
-# Project specific targets
-######################################################################
-
-release: $(TTFDLL)
-all: $(TTFDLL)
-
-install: $(TTFDLL)
- -@md $(INSTALLDIR)
- -@$(CP) $(TTFDLL) $(INSTALLDIR)
-
-
-
-$(TTFDLL): $(TTFOBJS) ttf.def
- $(link32) $(ldebug) $(dlllflags) \
- $(guilibsdll) -out:$(TTFDLL) -def:ttf.def $(TTFOBJS)
-
-#ttf.def: $(TTFOBJS)
-# ..\..\tcl8.0.4\win\release\dumpexts -o $@ ttf.dll $(TTFOBJS)
-
-
-#
-# Implicit rules
-#
-
-{$(ROOT)\extend}.c{$(TMPDIR)}.obj:
- $(cc32) $(TTF_CFLAGS) -Fo$(TMPDIR)\ $<
-
-{$(ROOT)}.c{$(TMPDIR)}.obj:
- $(cc32) $(TTF_CFLAGS) -Fo$(TMPDIR)\ $<
-
-
-clean:
- -@del *.exp
- -@del *.lib
- -@del *.dll
- -@del $(TMPDIR)\*.obj
- -@del *.pch
- -@del *.pdb
diff --git a/Build/source/libs/libttf/arch/win32/Makefile.gcc b/Build/source/libs/libttf/arch/win32/Makefile.gcc
deleted file mode 100644
index 68c9f4e6ce9..00000000000
--- a/Build/source/libs/libttf/arch/win32/Makefile.gcc
+++ /dev/null
@@ -1,96 +0,0 @@
-# This file is part of the FreeType project.
-#
-# It builds the library for gcc under Win32.
-# This Makefile will fail with MinGW32 ports of gcc and make under
-# bare-bones Windows 9X, because of the limitations of command.com.
-# Use Makefile.min instead.
-#
-# You will need GNU make.
-#
-# Use this file while in the lib directory with the following statement:
-#
-# make -f arch/win32/Makefile.gcc
-#
-#
-# If you have the GNU gettext package installed, you can also try
-#
-# make -f arch/win32/Makefile.gcc HAVE_GETTEXT
-
-ARCH = arch/win32
-FT_MAKEFILE = $(ARCH)/Makefile.gcc
-
-CC = gcc
-
-ifndef GETTEXT
-GETTEXT=NO_GETTEXT
-endif
-
-ifdef DEBUG
-CFLAGS = -Wall -O2 -g -ansi -pedantic -I$(ARCH) -I. -Iextend -D$(GETTEXT)
-else
-CFLAGS = -Wall -ansi -pedantic -O2 -s -I$(ARCH) -I. -Iextend -D$(GETTEXT)
-endif
-
-
-TTFILE = ./ttfile.c
-TTMEMORY = ./ttmemory.c
-TTMUTEX = ./ttmutex.c
-
-PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
-
-SRC_X = extend/ftxgasp.c extend/ftxkern.c extend/ftxpost.c \
- extend/ftxcmap.c extend/ftxwidth.c extend/ftxsbit.c \
- extend/ftxgsub.c extend/ftxgpos.c extend/ftxgdef.c \
- extend/ftxopen.c extend/ftxerr18.c
-OBJS_X = $(SRC_X:.c=.o)
-
-SRC_M = ttapi.c ttcache.c ttcalc.c ttcmap.c ttdebug.c \
- ttgload.c ttinterp.c ttload.c ttobjs.c \
- ttraster.c ttextend.c $(PORT)
-OBJS_M = $(SRC_M:.c=.o) $(OBJS_X)
-
-SRC_S = $(ARCH)/freetype.c
-OBJ_S = $(SRC_S:.c=.o)
-OBJS_S = $(OBJ_S) $(OBJS_X)
-
-
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-.PHONY: all debug clean distclean depend
-
-
-all:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S libttf.a
-
-debug:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_M DEBUG=1 libttf.a
-
-HAVE_GETTEXT:
- $(MAKE) -f $(FT_MAKEFILE) LIB_FILES=OBJS_S GETTEXT=HAVE_GETTEXT \
- libttf.a
-
-$(OBJ_S): $(SRC_S) $(SRC_M)
-
-libttf.a: $($(LIB_FILES))
- -del $@
- ar src $@ $^
-
-clean:
- -del *.o
- -del extend\*.o
- -del $(subst /,\,$(ARCH)/*.o)
- -del response
-
-distclean: clean
- -del dep.end
- -del libttf.a
-
-depend: $(SRS_S) $(SRC_M) $(SRC_X)
- $(CC) -E -M $^ > dep.end
-
-ifeq (dep.end,$(wildcard dep.end))
- include dep.end
-endif
-
-# end of Makefile.gcc
diff --git a/Build/source/libs/libttf/arch/win32/depend.win b/Build/source/libs/libttf/arch/win32/depend.win
deleted file mode 100644
index 3f81600d244..00000000000
--- a/Build/source/libs/libttf/arch/win32/depend.win
+++ /dev/null
@@ -1,103 +0,0 @@
-# This dependency file to be used with various Win32 compilers
-# has been generated automatically with the script `makedep' on
-# 07-Mar-2000.
-
-ttapi.obj: ttapi.c ttconfig.h arch\win32\ft_conf.h freetype.h fterrid.h \
- ftnameid.h ttengine.h tttypes.h ttmutex.h ttcalc.h ttmemory.h \
- ttcache.h ttfile.h ttdebug.h ttobjs.h tttables.h ttcmap.h ttload.h \
- ttgload.h ttraster.h ttextend.h
-ttcache.obj: ttcache.c ttengine.h tttypes.h ttconfig.h \
- arch\win32\ft_conf.h freetype.h fterrid.h ftnameid.h ttmutex.h \
- ttmemory.h ttcache.h ttobjs.h tttables.h ttcmap.h ttdebug.h
-ttcalc.obj: ttcalc.c ttcalc.h ttconfig.h arch\win32\ft_conf.h freetype.h \
- fterrid.h ftnameid.h ttdebug.h tttypes.h tttables.h
-ttcmap.obj: ttcmap.c ttobjs.h ttconfig.h arch\win32\ft_conf.h ttengine.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmutex.h ttcache.h \
- tttables.h ttcmap.h ttdebug.h ttfile.h ttmemory.h ttload.h
-ttdebug.obj: ttdebug.c ttdebug.h ttconfig.h arch\win32\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h tttables.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h ttcmap.h
-ttextend.obj: ttextend.c ttextend.h ttconfig.h arch\win32\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttmemory.h
-ttfile.obj: ttfile.c ttconfig.h arch\win32\ft_conf.h freetype.h \
- fterrid.h ftnameid.h tttypes.h ttdebug.h ttengine.h ttmutex.h \
- ttmemory.h ttfile.h
-ttgload.obj: ttgload.c tttypes.h ttconfig.h arch\win32\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttdebug.h ttcalc.h ttfile.h \
- ttengine.h ttmutex.h tttables.h ttobjs.h ttcache.h ttcmap.h ttgload.h \
- ttmemory.h tttags.h ttload.h
-ttinterp.obj: ttinterp.c freetype.h fterrid.h ftnameid.h tttypes.h \
- ttconfig.h arch\win32\ft_conf.h ttdebug.h ttcalc.h ttmemory.h \
- ttinterp.h ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h \
- ttcmap.h
-ttload.obj: ttload.c tttypes.h ttconfig.h arch\win32\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttdebug.h ttcalc.h ttfile.h \
- ttengine.h ttmutex.h tttables.h ttobjs.h ttcache.h ttcmap.h \
- ttmemory.h tttags.h ttload.h
-ttmemory.obj: ttmemory.c ttdebug.h ttconfig.h arch\win32\ft_conf.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmemory.h ttengine.h \
- ttmutex.h
-ttmutex.obj: ttmutex.c ttmutex.h ttconfig.h arch\win32\ft_conf.h
-ttobjs.obj: ttobjs.c ttobjs.h ttconfig.h arch\win32\ft_conf.h ttengine.h \
- tttypes.h freetype.h fterrid.h ftnameid.h ttmutex.h ttcache.h \
- tttables.h ttcmap.h ttfile.h ttdebug.h ttcalc.h ttmemory.h ttload.h \
- ttinterp.h ttextend.h
-ttraster.obj: ttraster.c ttraster.h ttconfig.h arch\win32\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttengine.h tttypes.h ttmutex.h \
- ttdebug.h ttcalc.h ttmemory.h
-extend\ftxcmap.obj: extend\ftxcmap.c extend\ftxcmap.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\win32\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h
-extend\ftxerr18.obj: extend\ftxerr18.c ttconfig.h arch\win32\ft_conf.h \
- extend\ftxerr18.h freetype.h fterrid.h ftnameid.h extend\ftxkern.h \
- extend\ftxpost.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h
-extend\ftxgasp.obj: extend\ftxgasp.c extend\ftxgasp.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\win32\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h
-extend\ftxgdef.obj: extend\ftxgdef.c tttypes.h ttconfig.h arch\win32\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxgpos.obj: extend\ftxgpos.c tttypes.h ttconfig.h arch\win32\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxgsub.obj: extend\ftxgsub.c tttypes.h ttconfig.h arch\win32\ft_conf.h \
- freetype.h fterrid.h ftnameid.h tttags.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxkern.obj: extend\ftxkern.c extend\ftxkern.h freetype.h fterrid.h \
- ftnameid.h ttextend.h ttconfig.h arch\win32\ft_conf.h tttypes.h \
- ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttdebug.h \
- ttmemory.h ttfile.h ttload.h tttags.h
-extend\ftxopen.obj: extend\ftxopen.c tttypes.h ttconfig.h arch\win32\ft_conf.h \
- freetype.h fterrid.h ftnameid.h ttload.h ttobjs.h ttengine.h \
- ttmutex.h ttcache.h tttables.h ttcmap.h ttextend.h ttmemory.h \
- ttfile.h ttdebug.h extend\ftxopen.h extend\ftxgdef.h extend\ftxgsub.h \
- extend\ftxgpos.h extend\ftxopenf.h
-extend\ftxpost.obj: extend\ftxpost.c extend\ftxpost.h freetype.h fterrid.h \
- ftnameid.h tttypes.h ttconfig.h arch\win32\ft_conf.h ttobjs.h \
- ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttload.h ttfile.h \
- ttdebug.h tttags.h ttmemory.h ttextend.h
-extend\ftxsbit.obj: extend\ftxsbit.c extend\ftxsbit.h freetype.h fterrid.h \
- ftnameid.h ttobjs.h ttconfig.h arch\win32\ft_conf.h ttengine.h \
- tttypes.h ttmutex.h ttcache.h tttables.h ttcmap.h ttfile.h ttdebug.h \
- ttload.h ttmemory.h tttags.h ttextend.h
-extend\ftxwidth.obj: extend\ftxwidth.c extend\ftxwidth.h freetype.h fterrid.h \
- ftnameid.h ttdebug.h ttconfig.h arch\win32\ft_conf.h tttypes.h \
- ttobjs.h ttengine.h ttmutex.h ttcache.h tttables.h ttcmap.h ttfile.h \
- tttags.h ttload.h
-!ifndef __MAKE__
-arch\win32\freetype.obj: arch\win32\freetype.c ttapi.c ttconfig.h \
- arch\win32\ft_conf.h freetype.h fterrid.h ftnameid.h ttengine.h \
- tttypes.h ttmutex.h ttcalc.h ttmemory.h ttcache.h ttfile.h ttdebug.h \
- ttobjs.h tttables.h ttcmap.h ttload.h ttgload.h ttraster.h ttextend.h \
- ttcache.c ttcalc.c ttcmap.c ttdebug.c ttgload.c tttags.h ttinterp.c \
- ttinterp.h ttload.c ttobjs.c ttraster.c ttfile.c ttmemory.c ttmutex.c \
- ttextend.c
-!endif
diff --git a/Build/source/libs/libttf/arch/win32/freetype.c b/Build/source/libs/libttf/arch/win32/freetype.c
deleted file mode 100644
index 8c391a77a8b..00000000000
--- a/Build/source/libs/libttf/arch/win32/freetype.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* single object library component for Win32 */
-#define TT_MAKE_OPTION_SINGLE_OBJECT
-
-/* Note, you should define the EXPORT_DEF and EXPORT_FUNC macros */
-/* here if you want to build a Win32 DLL. If undefined, the */
-/* macros default to "extern"/"" (nothing), which is suitable */
-/* for static libraries. See `ttconfig.h' for details. */
-
-/* The macro EXPORT_DEF is placed before each high-level API */
-/* function declaration, and EXPORT_FUNC before each definition */
-/* (body). You can then use it to take any compiler-specific */
-/* pragma for DLL-exported symbols */
-
-/* first include common core components */
-
-#include "ttapi.c"
-#include "ttcache.c"
-#include "ttcalc.c"
-#include "ttcmap.c"
-#include "ttdebug.c"
-#include "ttgload.c"
-#include "ttinterp.c"
-#include "ttload.c"
-#include "ttobjs.c"
-#include "ttraster.c"
-
-/* then system-specific (or ANSI) components */
-
-#include "ttfile.c"
-#include "ttmemory.c"
-#include "ttmutex.c"
-
-/* finally, add some extensions */
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.c"
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/win32/freetype.dsp b/Build/source/libs/libttf/arch/win32/freetype.dsp
deleted file mode 100644
index 38b3068bdb9..00000000000
--- a/Build/source/libs/libttf/arch/win32/freetype.dsp
+++ /dev/null
@@ -1,208 +0,0 @@
-# Microsoft Developer Studio Project File - Name="freetype" - Package Owner=<4>
-
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
-
-# ** DO NOT EDIT **
-
-
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-
-
-CFG=freetype - Win32 Debug
-
-!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"
-
-!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
-
-
-
-# Begin Project
-
-# PROP Scc_ProjName ""
-
-# PROP Scc_LocalPath ""
-
-CPP=cl.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 "Release"
-
-# PROP Intermediate_Dir "Release"
-
-# PROP Target_Dir ""
-
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-
-# ADD CPP /nologo /W3 /GX /O1 /I "." /I "..\.." /I "..\..\extend" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-
-# SUBTRACT CPP /YX
-
-BSC32=bscmake.exe
-
-# ADD BASE BSC32 /nologo
-
-# ADD BSC32 /nologo
-
-LIB32=link.exe -lib
-
-# ADD BASE LIB32 /nologo
-
-# ADD LIB32 /nologo
-
-
-
-!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 "Debug"
-
-# PROP Intermediate_Dir "Debug"
-
-# PROP Target_Dir ""
-
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-
-# ADD CPP /nologo /W3 /GX /Zi /O1 /I "." /I "..\.." /I "..\..\extend" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-
-# SUBTRACT CPP /YX
-
-BSC32=bscmake.exe
-
-# ADD BASE BSC32 /nologo
-
-# ADD BSC32 /nologo
-
-LIB32=link.exe -lib
-
-# ADD BASE LIB32 /nologo
-
-# ADD LIB32 /nologo
-
-
-
-!ENDIF
-
-
-
-# Begin Target
-
-
-
-# Name "freetype - Win32 Release"
-
-# Name "freetype - Win32 Debug"
-
-# Begin Source File
-
-
-
-SOURCE=.\freetype.c
-
-# End Source File
-
-# Begin Source File
-
-
-
-SOURCE=..\..\Extend\Ftxcmap.c
-
-# End Source File
-
-# Begin Source File
-
-
-
-SOURCE=..\..\Extend\ftxerr18.c
-
-# End Source File
-
-# Begin Source File
-
-
-
-SOURCE=..\..\Extend\Ftxgasp.c
-
-# End Source File
-
-# Begin Source File
-
-
-
-SOURCE=..\..\Extend\Ftxkern.c
-
-# End Source File
-
-# Begin Source File
-
-
-
-SOURCE=..\..\Extend\ftxpost.c
-
-# End Source File
-
-# End Target
-
-# End Project
-
diff --git a/Build/source/libs/libttf/arch/win32/freetype.dsw b/Build/source/libs/libttf/arch/win32/freetype.dsw
deleted file mode 100644
index 43933921a5a..00000000000
--- a/Build/source/libs/libttf/arch/win32/freetype.dsw
+++ /dev/null
@@ -1,58 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 5.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/Build/source/libs/libttf/arch/win32/freetype.ide b/Build/source/libs/libttf/arch/win32/freetype.ide
deleted file mode 100644
index f5c4043e572..00000000000
--- a/Build/source/libs/libttf/arch/win32/freetype.ide
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/libttf/arch/win32/freetype.mak b/Build/source/libs/libttf/arch/win32/freetype.mak
deleted file mode 100644
index 2cb684e20ab..00000000000
--- a/Build/source/libs/libttf/arch/win32/freetype.mak
+++ /dev/null
@@ -1,353 +0,0 @@
-# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-!IF "$(CFG)" == ""
-CFG=freetype - Win32 Debug
-!MESSAGE No configuration specified. Defaulting to freetype - Win32 Debug.
-!ENDIF
-
-!IF "$(CFG)" != "freetype - Win32 Release" && "$(CFG)" !=\
- "freetype - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE on this makefile
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "freetype.mak" CFG="freetype - Win32 Debug"
-!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
-!ERROR An invalid configuration is specified.
-!ENDIF
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-################################################################################
-# Begin Project
-# PROP Target_Last_Scanned "freetype - Win32 Debug"
-CPP=cl.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 "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-OUTDIR=.\Release
-INTDIR=.\Release
-
-ALL : "$(OUTDIR)\freetype.lib"
-
-CLEAN :
- -@erase ".\Release\freetype.lib"
- -@erase ".\Release\Ftxkern.obj"
- -@erase ".\Release\ftxpost.obj"
- -@erase ".\Release\ftxerr18.obj"
- -@erase ".\Release\Ftxcmap.obj"
- -@erase ".\Release\Freetype.obj"
- -@erase ".\Release\Ftxgasp.obj"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /W3 /GX /O2 /I "." /I "..\.." /I "..\..\extend" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
-CPP_PROJ=/nologo /ML /W3 /GX /O2 /I "." /I "..\.." /I "..\..\extend" /D "WIN32"\
- /D "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/freetype.pch" /YX /Fo"$(INTDIR)/" /c
-CPP_OBJS=.\Release/
-CPP_SBRS=
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-BSC32_FLAGS=/nologo /o"$(OUTDIR)/freetype.bsc"
-BSC32_SBRS=
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)/freetype.lib"
-LIB32_OBJS= \
- "$(INTDIR)/Ftxkern.obj" \
- "$(INTDIR)/ftxpost.obj" \
- "$(INTDIR)/ftxerr18.obj" \
- "$(INTDIR)/Ftxcmap.obj" \
- "$(INTDIR)/Freetype.obj" \
- "$(INTDIR)/Ftxgasp.obj"
-
-"$(OUTDIR)\freetype.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!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 "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-OUTDIR=.\Debug
-INTDIR=.\Debug
-
-ALL : "$(OUTDIR)\freetype.lib"
-
-CLEAN :
- -@erase ".\Debug\freetype.lib"
- -@erase ".\Debug\Freetype.obj"
- -@erase ".\Debug\Ftxkern.obj"
- -@erase ".\Debug\ftxpost.obj"
- -@erase ".\Debug\Ftxcmap.obj"
- -@erase ".\Debug\Ftxgasp.obj"
- -@erase ".\Debug\ftxerr18.obj"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /W3 /GX /Z7 /Od /I "." /I "..\.." /I "..\..\extend" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-CPP_PROJ=/nologo /MLd /W3 /GX /Z7 /Od /I "." /I "..\.." /I "..\..\extend" /D\
- "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/freetype.pch" /YX\
- /Fo"$(INTDIR)/" /c
-CPP_OBJS=.\Debug/
-CPP_SBRS=
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-BSC32_FLAGS=/nologo /o"$(OUTDIR)/freetype.bsc"
-BSC32_SBRS=
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)/freetype.lib"
-LIB32_OBJS= \
- "$(INTDIR)/Freetype.obj" \
- "$(INTDIR)/Ftxkern.obj" \
- "$(INTDIR)/ftxpost.obj" \
- "$(INTDIR)/Ftxcmap.obj" \
- "$(INTDIR)/Ftxgasp.obj" \
- "$(INTDIR)/ftxerr18.obj"
-
-"$(OUTDIR)\freetype.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ENDIF
-
-.c{$(CPP_OBJS)}.obj:
- $(CPP) $(CPP_PROJ) $<
-
-.cpp{$(CPP_OBJS)}.obj:
- $(CPP) $(CPP_PROJ) $<
-
-.cxx{$(CPP_OBJS)}.obj:
- $(CPP) $(CPP_PROJ) $<
-
-.c{$(CPP_SBRS)}.sbr:
- $(CPP) $(CPP_PROJ) $<
-
-.cpp{$(CPP_SBRS)}.sbr:
- $(CPP) $(CPP_PROJ) $<
-
-.cxx{$(CPP_SBRS)}.sbr:
- $(CPP) $(CPP_PROJ) $<
-
-################################################################################
-# Begin Target
-
-# Name "freetype - Win32 Release"
-# Name "freetype - Win32 Debug"
-
-!IF "$(CFG)" == "freetype - Win32 Release"
-
-!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
-
-!ENDIF
-
-################################################################################
-# Begin Source File
-
-SOURCE=\Freetype\Lib\Extend\ftxpost.c
-DEP_CPP_FTXPO=\
- ".\..\..\Extend\ftxpost.h"\
- ".\..\..\tttypes.h"\
- ".\..\..\ttobjs.h"\
- ".\..\..\tttables.h"\
- ".\..\..\ttload.h"\
- ".\..\..\ttfile.h"\
- ".\..\..\tttags.h"\
- ".\..\..\ttmemory.h"\
- ".\..\..\ttextend.h"\
- ".\..\..\freetype.h"\
- "..\..\ttconfig.h"\
- ".\ft_conf.h"\
- "..\..\ttengine.h"\
- "..\..\ttmutex.h"\
- "..\..\ttcache.h"\
- "..\..\ttcmap.h"\
- ".\..\..\ttdebug.h"\
-
-
-"$(INTDIR)\ftxpost.obj" : $(SOURCE) $(DEP_CPP_FTXPO) "$(INTDIR)"
- $(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-# End Source File
-################################################################################
-# Begin Source File
-
-SOURCE=\Freetype\Lib\Extend\ftxerr18.c
-DEP_CPP_FTXER=\
- ".\..\..\Extend\ftxerr18.h"\
- ".\..\..\Extend\ftxkern.h"\
- ".\..\..\Extend\ftxpost.h"\
- ".\..\..\freetype.h"\
- "..\..\ttconfig.h"\
- ".\ft_conf.h"\
-
-
-"$(INTDIR)\ftxerr18.obj" : $(SOURCE) $(DEP_CPP_FTXER) "$(INTDIR)"
- $(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-# End Source File
-################################################################################
-# Begin Source File
-
-SOURCE=\Freetype\Lib\Extend\Ftxgasp.c
-DEP_CPP_FTXGA=\
- ".\..\..\Extend\ftxgasp.h"\
- ".\..\..\tttypes.h"\
- ".\..\..\ttobjs.h"\
- ".\..\..\tttables.h"\
- ".\..\..\freetype.h"\
- "..\..\ttconfig.h"\
- ".\ft_conf.h"\
- "..\..\ttengine.h"\
- "..\..\ttmutex.h"\
- "..\..\ttcache.h"\
- "..\..\ttcmap.h"\
-
-
-"$(INTDIR)\Ftxgasp.obj" : $(SOURCE) $(DEP_CPP_FTXGA) "$(INTDIR)"
- $(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-# End Source File
-################################################################################
-# Begin Source File
-
-SOURCE=\Freetype\Lib\Extend\Ftxkern.c
-DEP_CPP_FTXKE=\
- ".\..\..\Extend\ftxkern.h"\
- ".\..\..\ttextend.h"\
- ".\..\..\tttypes.h"\
- ".\..\..\ttdebug.h"\
- ".\..\..\ttmemory.h"\
- ".\..\..\ttfile.h"\
- ".\..\..\ttobjs.h"\
- ".\..\..\ttload.h"\
- ".\..\..\tttags.h"\
- ".\..\..\freetype.h"\
- "..\..\ttconfig.h"\
- ".\ft_conf.h"\
- "..\..\ttengine.h"\
- "..\..\ttmutex.h"\
- "..\..\ttcache.h"\
- ".\..\..\tttables.h"\
- "..\..\ttcmap.h"\
-
-
-"$(INTDIR)\Ftxkern.obj" : $(SOURCE) $(DEP_CPP_FTXKE) "$(INTDIR)"
- $(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-# End Source File
-################################################################################
-# Begin Source File
-
-SOURCE=\Freetype\Lib\Extend\Ftxcmap.c
-DEP_CPP_FTXCM=\
- ".\..\..\Extend\ftxcmap.h"\
- ".\..\..\tttypes.h"\
- ".\..\..\ttobjs.h"\
- ".\..\..\tttables.h"\
- ".\..\..\freetype.h"\
- "..\..\ttconfig.h"\
- ".\ft_conf.h"\
- "..\..\ttengine.h"\
- "..\..\ttmutex.h"\
- "..\..\ttcache.h"\
- "..\..\ttcmap.h"\
-
-
-"$(INTDIR)\Ftxcmap.obj" : $(SOURCE) $(DEP_CPP_FTXCM) "$(INTDIR)"
- $(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-# End Source File
-################################################################################
-# Begin Source File
-
-SOURCE=.\Freetype.c
-DEP_CPP_FREET=\
- ".\..\..\ttapi.c"\
- ".\..\..\ttcache.c"\
- ".\..\..\ttcalc.c"\
- ".\..\..\ttcmap.c"\
- ".\..\..\ttgload.c"\
- ".\..\..\ttinterp.c"\
- ".\..\..\ttload.c"\
- ".\..\..\ttobjs.c"\
- ".\..\..\ttraster.c"\
- ".\..\..\ttfile.c"\
- ".\..\..\ttmemory.c"\
- ".\..\..\ttmutex.c"\
- ".\..\..\ttextend.c"\
- ".\..\..\freetype.h"\
- "..\..\ttengine.h"\
- "..\..\ttcalc.h"\
- ".\..\..\ttmemory.h"\
- "..\..\ttcache.h"\
- ".\..\..\ttfile.h"\
- ".\..\..\ttobjs.h"\
- ".\..\..\ttload.h"\
- "..\..\ttgload.h"\
- "..\..\ttraster.h"\
- ".\..\..\ttextend.h"\
- "..\..\ttconfig.h"\
- ".\ft_conf.h"\
- "..\..\ttmutex.h"\
- ".\..\..\tttypes.h"\
- ".\..\..\ttdebug.h"\
- ".\..\..\tttables.h"\
- "..\..\ttcmap.h"\
- ".\..\..\tttags.h"\
- "..\..\ttinterp.h"\
- {$(INCLUDE)}"\unistd.h"\
-
-
-"$(INTDIR)\Freetype.obj" : $(SOURCE) $(DEP_CPP_FREET) "$(INTDIR)"
-
-
-# End Source File
-# End Target
-# End Project
-################################################################################
diff --git a/Build/source/libs/libttf/arch/win32/freetype.mdp b/Build/source/libs/libttf/arch/win32/freetype.mdp
deleted file mode 100644
index 9082b5a70a9..00000000000
--- a/Build/source/libs/libttf/arch/win32/freetype.mdp
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/libttf/arch/win32/ft_conf.h b/Build/source/libs/libttf/arch/win32/ft_conf.h
deleted file mode 100644
index 63819dd95c5..00000000000
--- a/Build/source/libs/libttf/arch/win32/ft_conf.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for Win32 */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-#ifndef WIN32
-#define WIN32
-#endif
-
-/* Define to empty if the 'const' keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* The number of bytes in a int. */
-#define SIZEOF_INT 4
-
-/* The number of bytes in a long. */
-#define SIZEOF_LONG 4
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/arch/win32/makedef b/Build/source/libs/libttf/arch/win32/makedef
deleted file mode 100644
index 158f10faa2f..00000000000
--- a/Build/source/libs/libttf/arch/win32/makedef
+++ /dev/null
@@ -1,24 +0,0 @@
-# makedef
-#
-# This shell script creates a .DEF file necessary for building as DLL
-# on the Windows 32-bit platform.
-
-echo "\
-; This definition file to be used to built the library as DLL
-; has been generated automatically with the script \`makedef' on
-; `date +%d-%b-%Y`.
-
-LIBRARY ft14_32
-DESCRIPTION 'FreeType 1.4 32-bit DLL © 1996-2000 Turner, Wilhelm, Lemberg'
-EXETYPE WINDOWS
-CODE PRELOAD MOVEABLE DISCARDABLE
-DATA PRELOAD MOVEABLE MULTIPLE
-EXPORTS
-" > ttf.def
-
-(cd ../..
- sed -n -e "/^ *EXPORT_DEF/!d ; n ; s/(.*$//" \
- -e "s/;$//" -e "s/ const / /" -e "s/ *[a-zA-Z][a-zA-Z_\*]* //" \
- -e "s/ *//g" -e "s/^/ /" -e "p" *.h extend/*.h) >> ttf.def
-
-# eof
diff --git a/Build/source/libs/libttf/arch/win32/makedep b/Build/source/libs/libttf/arch/win32/makedep
deleted file mode 100644
index 34ade91f25b..00000000000
--- a/Build/source/libs/libttf/arch/win32/makedep
+++ /dev/null
@@ -1,29 +0,0 @@
-# makedep
-#
-# This shell script creates a dependency file necessary for some compilers
-# on the Win32 platform.
-
-echo "\
-# This dependency file to be used with various Win32 compilers
-# has been generated automatically with the script \`makedep' on
-# `date +%d-%b-%Y`.
-" > depend.win
-
-(cd ../..
- gcc -MM -Iarch/win32 -I. *.c | \
- sed -e "s/\.o:/.obj:/" -e "s:/:\\\\:g") >> depend.win
-
-(cd ../..
- gcc -MM -Iarch/win32 -I. -Iextend extend/*.c | \
- sed -e "s/^\(.*\)\.o:/extend\\\\\1.obj:/" -e "s:/:\\\\:g") >> depend.win
-
-echo "!ifndef __MAKE__" >> depend.win
-
-(cd ../..
- gcc -MM -Iarch/win32 -I. -Iextend arch/win32/*.c | \
- sed -e "s/^\(.*\)\.o:/arch\\\\win32\\\\\1.obj:/" \
- -e "s:/:\\\\:g") >> depend.win
-
-echo "!endif" >> depend.win
-
-# eof
diff --git a/Build/source/libs/libttf/arch/win32/ttf.def b/Build/source/libs/libttf/arch/win32/ttf.def
deleted file mode 100644
index 96fe92f2482..00000000000
--- a/Build/source/libs/libttf/arch/win32/ttf.def
+++ /dev/null
@@ -1,130 +0,0 @@
-; This definition file to be used to built the library as DLL
-; has been generated automatically with the script `makedef' on
-; 07-Mar-2000.
-
-LIBRARY ft14_32
-DESCRIPTION 'FreeType 1.4 32-bit DLL © 1996-2000 Turner, Wilhelm, Lemberg'
-EXETYPE WINDOWS
-CODE PRELOAD MOVEABLE DISCARDABLE
-DATA PRELOAD MOVEABLE MULTIPLE
-EXPORTS
-
- TT_FreeType_Version
- TT_Init_FreeType
- TT_Done_FreeType
- TT_Set_Raster_Gray_Palette
- TT_Open_Face
- TT_Open_Collection
- TT_Get_Face_Properties
- TT_Set_Face_Pointer
- TT_Get_Face_Pointer
- TT_Flush_Face
- TT_Get_Face_Metrics
- TT_Close_Face
- TT_Get_Font_Data
- TT_New_Instance
- TT_Set_Instance_Resolutions
- TT_Set_Instance_CharSize
- TT_Set_Instance_CharSizes
- TT_Set_Instance_PixelSizes
- TT_Set_Instance_Transform_Flags
- TT_Get_Instance_Metrics
- TT_Set_Instance_Pointer
- TT_Get_Instance_Pointer
- TT_Done_Instance
- TT_New_Glyph
- TT_Done_Glyph
- TT_Load_Glyph
- TT_Get_Glyph_Outline
- TT_Get_Glyph_Metrics
- TT_Get_Glyph_Big_Metrics
- TT_Get_Glyph_Bitmap
- TT_Get_Glyph_Pixmap
- TT_New_Outline
- TT_Done_Outline
- TT_Copy_Outline
- TT_Get_Outline_Bitmap
- TT_Get_Outline_Pixmap
- TT_Get_Outline_BBox
- TT_Transform_Outline
- TT_Translate_Outline
- TT_Transform_Vector
- TT_MulDiv
- TT_MulFix
- TT_Get_CharMap_Count
- TT_Get_CharMap_ID
- TT_Get_CharMap
- TT_Char_Index
- TT_Get_Name_Count
- TT_Get_Name_ID
- TT_Get_Name_String
- TT_Register_Extension
- TT_Extension_Get
- TT_Use_Stream
- TT_Done_Stream
- TT_Flush_Stream
- TT_Read_File
- TT_Seek_File
- TT_Skip_File
- TT_Read_At_File
- TT_File_Pos
- TT_Stream_Size
- TT_Null_FileFrame
- TT_Access_Frame
- TT_Check_And_Access_Frame
- TT_Forget_Frame
- TT_Get_Char
- TT_Get_Short
- TT_Get_Long
- TT_LookUp_Table
- TT_Alloc
- TT_Realloc
- TT_Free
- TT_CharMap_First
- TT_CharMap_Next
- TT_CharMap_Last
- TT_ErrToString18
- TT_Get_Face_Gasp_Flags
- TT_Init_GDEF_Extension
- TT_Load_GDEF_Table
- TT_GDEF_Get_Glyph_Property
- TT_GDEF_Build_ClassDefinition
- TT_Init_GPOS_Extension
- TT_Load_GPOS_Table
- TT_GPOS_Select_Script
- TT_GPOS_Select_Language
- TT_GPOS_Select_Feature
- TT_GPOS_Query_Scripts
- TT_GPOS_Query_Languages
- TT_GPOS_Query_Features
- TT_GPOS_Add_Feature
- TT_GPOS_Clear_Features
- TT_GPOS_Register_Glyph_Function
- TT_GPOS_Register_MM_Function
- TT_GPOS_Apply_String
- TT_Init_GSUB_Extension
- TT_Load_GSUB_Table
- TT_GSUB_Select_Script
- TT_GSUB_Select_Language
- TT_GSUB_Select_Feature
- TT_GSUB_Query_Scripts
- TT_GSUB_Query_Languages
- TT_GSUB_Query_Features
- TT_GSUB_Add_Feature
- TT_GSUB_Clear_Features
- TT_GSUB_Register_Alternate_Function
- TT_GSUB_Apply_String
- TT_GSUB_Add_String
- TT_Init_Kerning_Extension
- TT_Get_Kerning_Directory
- TT_Load_Kerning_Table
- TT_Init_Post_Extension
- TT_Load_PS_Names
- TT_Get_PS_Name
- TT_Init_SBit_Extension
- TT_Get_Face_Bitmaps
- TT_New_SBit_Image
- TT_Done_SBit_Image
- TT_Get_SBit_Strike
- TT_Load_Glyph_Bitmap
- TT_Get_Face_Widths
diff --git a/Build/source/libs/libttf/extend/ftxcmap.c b/Build/source/libs/libttf/extend/ftxcmap.c
deleted file mode 100644
index 09786b63d94..00000000000
--- a/Build/source/libs/libttf/extend/ftxcmap.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/*******************************************************************
- *
- * ftxcmap.h 1.0
- *
- * API extension for iterating over Cmaps
- *
- * Copyright 1996-1999 by Juliusz Chroboczek,
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttconfig.h"
-#include "ftxcmap.h"
-
-#include "tttypes.h"
-#include "ttobjs.h"
-#include "tttables.h"
-
-static Long charmap_first4 ( PCMap4, UShort* );
-static Long charmap_next4 ( PCMap4, UShort, UShort* );
-static Long charmap_last4 ( PCMap4, UShort* );
-static UShort charmap_find_id4( PCMap4, UShort, TCMap4Segment*, UShort );
-
-
-/*******************************************************************
- *
- * Function : TT_CharMap_First
- *
- * Description : Returns the first valid character code in a
- * given character map. Also returns the corresponding
- * glyph index.
- *
- * Input : charMap handle to the target character map
- * id address where the glyph index will be
- * be returned in case of success
- *
- * Output : First valid character code. -1 in case of failure.
- *
- * Notes :
- *
- ******************************************************************/
-
-EXPORT_FUNC
-TT_Long TT_CharMap_First( TT_CharMap charMap,
- TT_UShort* id )
-{
- PCMapTable cmap;
- UShort i, c;
-
-
- if ( !( cmap = HANDLE_CharMap( charMap ) ) )
- return -1;
-
- switch ( cmap->format )
- {
- case 0:
- if ( id )
- *id = cmap->c.cmap0.glyphIdArray[0];
- return 0;
-
- case 4:
- return charmap_first4( &cmap->c.cmap4, id );
-
- case 6:
- if ( cmap->c.cmap6.entryCount < 1 )
- return -1;
-
- if ( id )
- *id = cmap->c.cmap6.glyphIdArray[0];
- return cmap->c.cmap6.firstCode;
-
- default:
- /* Now loop from 0 to 65535. We can't use a simple "for' on */
- /* 16-bits systems, hence the "strange" loop here.. */
- i = 0;
- do
- {
- c = TT_Char_Index( charMap, i );
- if ( c > 0 )
- {
- if ( id )
- *id = c;
- return i;
- }
- i++;
- } while ( i != 0 ); /* because i is UShort! */
-
- return -1;
- }
-}
-
-
-static Long charmap_first4( PCMap4 cmap4,
- UShort* id )
-{
- UShort firstCode;
-
-
- if ( cmap4->segCountX2 / 2 < 1 )
- return -1;
-
- firstCode = cmap4->segments[0].startCount;
-
- if ( id )
- *id = charmap_find_id4( cmap4, firstCode, &(cmap4->segments[0]), 0 );
-
- return firstCode;
-}
-
-
-/*******************************************************************
- *
- * Function : TT_CharMap_Next
- *
- * Description : Returns the next valid character code in a given
- * charMap.
- *
- * Input : charMap handle to the target char. map
- * index starting character code
- * id address where the glyph index of the next
- * character will be returned
- *
- * Output : Next valid character code after 'index'. -1 in case
- * of failure.
- *
- * Notes :
- *
- ******************************************************************/
-
-EXPORT_FUNC
-TT_Long TT_CharMap_Next( TT_CharMap charMap,
- TT_UShort index,
- TT_UShort* id )
-{
- PCMapTable cmap;
- UShort i, c;
-
-
- cmap = HANDLE_CharMap( charMap );
- if ( !cmap )
- return -1;
-
- switch ( cmap->format )
- {
- case 0:
- if ( index < 255 )
- {
- if ( id )
- *id = cmap->c.cmap0.glyphIdArray[index + 1];
- return index + 1;
- }
- else
- return -1;
-
- case 4:
- return charmap_next4( &cmap->c.cmap4, index, id );
-
- case 6:
- {
- UShort firstCode = cmap->c.cmap6.firstCode;
-
-
- if ( index + 1 < firstCode + cmap->c.cmap6.entryCount )
- {
- if ( id )
- *id = cmap->c.cmap6.glyphIdArray[index + 1 - firstCode];
- return index + 1;
- }
- else
- return -1;
- }
-
- default:
- /* Now loop from 0 to 65535. We can't use a simple "for" on */
- /* 16-bits systems, hence the "strange" loop here.. */
- i = 0;
- do
- {
- c = TT_Char_Index( charMap, i );
- if ( c > 0 )
- {
- if ( id )
- *id = c;
- return i;
- }
- i++;
- } while ( i != 0 ); /* because i is UShort! */
-
- return -1;
- }
-}
-
-
-static Long charmap_next4( PCMap4 cmap4,
- UShort charCode,
- UShort* id)
-{
- UShort segCount, nextCode;
- UShort i;
- TCMap4Segment seg4;
-
-
- if ( charCode == 0xFFFF )
- return -1; /* get it out of the way now */
-
- segCount = cmap4->segCountX2 / 2;
-
- for ( i = 0; i < segCount; i++ )
- if ( charCode < cmap4->segments[i].endCount )
- break;
-
- /* Safety check - even though the last endCount should be 0xFFFF */
- if ( i >= segCount )
- return -1;
-
- seg4 = cmap4->segments[i];
-
- if ( charCode < seg4.startCount )
- nextCode = seg4.startCount;
- else
- nextCode = charCode + 1;
-
- if ( id )
- *id = charmap_find_id4( cmap4, nextCode, &seg4, i );
-
- return nextCode;
-}
-
-
-static UShort
-charmap_find_id4( PCMap4 cmap4,
- UShort charCode,
- TCMap4Segment* seg4,
- UShort i )
-{
- UShort index1;
-
-
- if ( seg4->idRangeOffset == 0 )
- return (charCode + seg4->idDelta) & 0xFFFF;
- else
- {
- index1 = seg4->idRangeOffset / 2 + charCode-seg4->startCount -
- ( cmap4->segCountX2 / 2 - i );
-
- if ( index1 >= cmap4->numGlyphId || cmap4->glyphIdArray[index1] == 0 )
- return 0;
- else
- return (cmap4->glyphIdArray[index1] + seg4->idDelta) & 0xFFFF;
- }
-}
-
-
-/*******************************************************************
- *
- * Function : TT_CharMap_Last
- *
- * Description : Returns the last valid character code in a
- * given character map. Also returns the corresponding
- * glyph index.
- *
- * Input : charMap handle to the target character map
- * id address where the glyph index will be
- * be returned in case of success
- *
- * Output : Last valid character code. -1 in case of failure.
- *
- * Notes :
- *
- ******************************************************************/
-
-EXPORT_FUNC
-TT_Long TT_CharMap_Last( TT_CharMap charMap,
- TT_UShort* id )
-{
- PCMapTable cmap;
- UShort i, c;
-
-
- if ( !( cmap = HANDLE_CharMap( charMap ) ) )
- return -1;
-
- switch ( cmap->format )
- {
- case 0:
- if ( id )
- *id = cmap->c.cmap0.glyphIdArray[255];
- return 255;
-
- case 4:
- return charmap_last4( &cmap->c.cmap4, id );
-
- case 6:
- if ( cmap->c.cmap6.entryCount < 1 )
- return -1;
-
- if ( id )
- *id = cmap->c.cmap6.glyphIdArray[cmap->c.cmap6.entryCount - 1];
- return cmap->c.cmap6.firstCode + cmap->c.cmap6.entryCount - 1;
-
- default:
- i = 65535;
- do
- {
- c = TT_Char_Index( charMap, i );
- if ( c > 0 )
- {
- if ( id )
- *id = c;
- return i;
- }
- i--;
- } while ( i != 0 );
-
- return -1;
- }
-}
-
-
-static Long charmap_last4( PCMap4 cmap4,
- UShort* id )
-{
- UShort lastCode;
-
-
- if ( cmap4->segCountX2 / 2 < 1 )
- return -1;
-
- lastCode = cmap4->segments[cmap4->segCountX2 / 2 - 1].endCount;
-
- if ( id )
- *id = charmap_find_id4( cmap4,
- lastCode,
- &(cmap4->segments[cmap4->segCountX2 / 2 - 1]),
- 0 );
-
- return lastCode;
-}
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxcmap.h b/Build/source/libs/libttf/extend/ftxcmap.h
deleted file mode 100644
index 38ed8e1d337..00000000000
--- a/Build/source/libs/libttf/extend/ftxcmap.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************
- *
- * ftxcmap.h 1.0
- *
- * API extension for iterating over Cmaps
- *
- * Copyright 1996-1999 by Juliusz Chroboczek,
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 FTXCMAP_H
-#define FTXCMAP_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* Find the first entry of a Cmap. Its glyph index is returned */
- /* in the "id" field, while the function returns the first valid */
- /* character code in the Cmap. It returns -1 in case of failure. */
-
- EXPORT_DEF
- TT_Long TT_CharMap_First( TT_CharMap charMap,
- TT_UShort* id );
-
-
- /* Find the next entry of Cmap. Same return conventions. */
-
- EXPORT_DEF
- TT_Long TT_CharMap_Next( TT_CharMap charMap,
- TT_UShort startId,
- TT_UShort* id );
-
- /* Find the last entry of a Cmap. Its glyph index is returned */
- /* in the "id" field, while the function returns the last valid */
- /* character code in the Cmap. It returns -1 in case of failure. */
-
- EXPORT_DEF
- TT_Long TT_CharMap_Last( TT_CharMap charMap,
- TT_UShort* id );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXCMAP_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxerr18.c b/Build/source/libs/libttf/extend/ftxerr18.c
deleted file mode 100644
index ac8934a0165..00000000000
--- a/Build/source/libs/libttf/extend/ftxerr18.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/****************************************************************************/
-/* */
-/* Erwin Dieterich, 15. 10. 1997 */
-/* - 15. 08. 1999 */
-/* */
-/* TT_ErrToString: translate error codes to character strings */
-/* */
-/* This extension provides internationalized error strings from the */
-/* various error messages. It uses the "gettext" package if available */
-/* or returns English/American message strings if not. */
-/* */
-/* If you do not want to use it, or if you encounter some problems */
-/* compiling this file, try to disable nls support when invoking */
-/* ./configure (on Unix). */
-/* */
-/* */
-/****************************************************************************/
-
-#include "ttconfig.h"
-
-#include "ftxerr18.h"
-#include "ftxkern.h"
-#include "ftxpost.h"
-#include "ftxopen.h"
-
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#ifdef HAVE_LIBINTL_H
-#include <libintl.h>
-#undef _
-#define _( String ) dgettext( "freetype", String )
-#else
-#define _( String ) ( String )
-#endif
-
-
-EXPORT_FUNC
-TT_String* TT_ErrToString18( TT_Error error )
-{
-
- switch ( error )
- {
- /* ----- high-level API error codes ----- */
- case TT_Err_Ok:
- return _( "Successful function call, no error." );
-
- case TT_Err_Invalid_Face_Handle:
- return _( "Invalid face handle." );
- case TT_Err_Invalid_Instance_Handle:
- return _( "Invalid instance handle." );
- case TT_Err_Invalid_Glyph_Handle:
- return _( "Invalid glyph handle." );
- case TT_Err_Invalid_CharMap_Handle:
- return _( "Invalid charmap handle." );
- case TT_Err_Invalid_Result_Address:
- return _( "Invalid result address." );
- case TT_Err_Invalid_Glyph_Index:
- return _( "Invalid glyph index." );
- case TT_Err_Invalid_Argument:
- return _( "Invalid argument." );
- case TT_Err_Could_Not_Open_File:
- return _( "Could not open file." );
- case TT_Err_File_Is_Not_Collection:
- return _( "File is not a TrueType collection." );
-
- case TT_Err_Table_Missing:
- return _( "Mandatory table missing." );
- case TT_Err_Invalid_Horiz_Metrics:
- return _( "Invalid horizontal metrics (hmtx table broken)." );
- case TT_Err_Invalid_CharMap_Format:
- return _( "Invalid charmap format." );
- case TT_Err_Invalid_PPem:
- return _( "Invalid ppem value." );
- case TT_Err_Invalid_Vert_Metrics:
- return _( "Invalid vertical metrics (vmtx table broken)." );
-
- case TT_Err_Invalid_File_Format:
- return _( "Invalid file format." );
-
- case TT_Err_Invalid_Engine:
- return _( "Invalid engine." );
- case TT_Err_Too_Many_Extensions:
- return _( "Too many extensions." );
- case TT_Err_Extensions_Unsupported:
- return _( "Extensions unsupported." );
- case TT_Err_Invalid_Extension_Id:
- return _( "Invalid extension id." );
-
- case TT_Err_No_Vertical_Data:
- return _( "No vertical data in font." );
-
- case TT_Err_Max_Profile_Missing:
- return _( "Maximum Profile (maxp) table missing." );
- case TT_Err_Header_Table_Missing:
- return _( "Font Header (head) table missing." );
- case TT_Err_Horiz_Header_Missing:
- return _( "Horizontal Header (hhea) table missing." );
- case TT_Err_Locations_Missing:
- return _( "Index to Location (loca) table missing." );
- case TT_Err_Name_Table_Missing:
- return _( "Naming (name) table missing." );
- case TT_Err_CMap_Table_Missing:
- return _( "Character to Glyph Index Mapping (cmap) tables missing." );
- case TT_Err_Hmtx_Table_Missing:
- return _( "Horizontal Metrics (hmtx) table missing." );
- case TT_Err_OS2_Table_Missing:
- return _( "OS/2 table missing." );
- case TT_Err_Post_Table_Missing:
- return _( "PostScript (post) table missing." );
- case TT_Err_Glyf_Table_Missing:
- return _( "Glyph (glyf) table missing." );
-
-
- /* ----- memory component error codes ----- */
- case TT_Err_Out_Of_Memory:
- return _( "Out of memory." );
-
-
- /* ----- file component error codes ----- */
- case TT_Err_Invalid_File_Offset:
- return _( "Invalid file offset." );
- case TT_Err_Invalid_File_Read:
- return _( "Invalid file read." );
- case TT_Err_Invalid_Frame_Access:
- return _( "Invalid frame access." );
-
-
- /* ----- glyph loader error codes ----- */
- case TT_Err_Too_Many_Points:
- return _( "Too many points." );
- case TT_Err_Too_Many_Contours:
- return _( "Too many contours." );
- case TT_Err_Invalid_Composite:
- return _( "Invalid composite glyph." );
- case TT_Err_Too_Many_Ins:
- return _( "Too many instructions." );
-
-
- /* ----- byte-code interpreter error codes ----- */
- case TT_Err_Invalid_Opcode:
- return _( "Invalid opcode." );
- case TT_Err_Too_Few_Arguments:
- return _( "Too few arguments." );
- case TT_Err_Stack_Overflow:
- return _( "Stack overflow." );
- case TT_Err_Code_Overflow:
- return _( "Code overflow." );
- case TT_Err_Bad_Argument:
- return _( "Bad argument." );
- case TT_Err_Divide_By_Zero:
- return _( "Divide by zero." );
- case TT_Err_Storage_Overflow:
- return _( "Storage overflow." );
- case TT_Err_Cvt_Overflow:
- return _( "Control Value (cvt) table overflow." );
- case TT_Err_Invalid_Reference:
- return _( "Invalid reference." );
- case TT_Err_Invalid_Distance:
- return _( "Invalid distance." );
- case TT_Err_Interpolate_Twilight:
- return _( "Interpolate twilight points." );
- case TT_Err_Debug_OpCode:
- return _( "`DEBUG' opcode found." );
- case TT_Err_ENDF_In_Exec_Stream:
- return _( "`ENDF' in byte-code stream." );
- case TT_Err_Out_Of_CodeRanges:
- return _( "Out of code ranges." );
- case TT_Err_Nested_DEFS:
- return _( "Nested function definitions." );
- case TT_Err_Invalid_CodeRange:
- return _( "Invalid code range." );
- case TT_Err_Invalid_Displacement:
- return _( "Invalid displacement." );
- case TT_Err_Execution_Too_Long:
- return _( "Endless loop encountered while executing instructions." );
-
-
- /* ----- internal failure error codes ----- */
- case TT_Err_Nested_Frame_Access:
- return _( "Nested frame access." );
- case TT_Err_Invalid_Cache_List:
- return _( "Invalid cache list." );
- case TT_Err_Could_Not_Find_Context:
- return _( "Could not find context." );
- case TT_Err_Unlisted_Object:
- return _( "Unlisted object." );
-
-
- /* ----- scan-line converter error codes ----- */
- case TT_Err_Raster_Pool_Overflow:
- return _( "Raster pool overflow." );
- case TT_Err_Raster_Negative_Height:
- return _( "Raster: negative height encountered." );
- case TT_Err_Raster_Invalid_Value:
- return _( "Raster: invalid value." );
- case TT_Err_Raster_Not_Initialized:
- return _( "Raster not initialized." );
-
-
- /* ----- engine extensions error codes ----- */
- case TT_Err_Invalid_Kerning_Table_Format:
- return _( "Invalid kerning (kern) table format." );
- case TT_Err_Invalid_Kerning_Table:
- return _( "Invalid kerning (kern) table." );
- case TT_Err_Invalid_Post_Table_Format:
- return _( "Invalid PostScript (post) table format." );
- case TT_Err_Invalid_Post_Table:
- return _( "Invalid PostScript (post) table." );
-
-
- /* ----- TrueType Open extension error codes ----- */
-
- case TTO_Err_Invalid_SubTable_Format:
- return _( "Invalid TrueType Open subtable format." );
- case TTO_Err_Invalid_SubTable:
- return _( "Invalid TrueType Open subtable." );
- case TTO_Err_Not_Covered:
- return _( "Glyph(s) not covered by lookup." );
- case TTO_Err_Too_Many_Nested_Contexts:
- return _( "Too many nested context substitutions." );
- case TTO_Err_Invalid_GSUB_SubTable_Format:
- return _( "Invalid glyph substitution (GSUB) table format." );
- case TTO_Err_Invalid_GSUB_SubTable:
- return _( "Invalid glyph substitution (GSUB) table." );
- case TTO_Err_Invalid_GPOS_SubTable_Format:
- return _( "Invalid glyph positioning (GPOS) table format." );
- case TTO_Err_Invalid_GPOS_SubTable:
- return _( "Invalid glyph positioning (GPOS) table." );
-
-
- default:
- ;
- }
-
- return _( "Invalid Error Number." );
-}
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxerr18.h b/Build/source/libs/libttf/extend/ftxerr18.h
deleted file mode 100644
index 3ad060be359..00000000000
--- a/Build/source/libs/libttf/extend/ftxerr18.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/****************************************************************************/
-/* */
-/* Erwin Dieterich, 15. 10. 1997 */
-/* - 15. 08. 1999 */
-/* */
-/* TT_ErrToString: translate error codes to character strings */
-/* */
-/* This extension provides internationalized error strings from the */
-/* various error messages. It uses the "gettext" package where available */
-/* or returns english/american message strings if not. */
-/* */
-/* If you do not want to use it, or if you encounter some problems */
-/* compiling this file, try to disable nls support by configuring */
-/* FreeType with ./configure --disable-nls */
-/* */
-/* */
-/****************************************************************************/
-
-#ifndef FTXERR18_H
-#define FTXERR18_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- EXPORT_DEF
- TT_String* TT_ErrToString18( TT_Error i );
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* FTXERR18_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgasp.c b/Build/source/libs/libttf/extend/ftxgasp.c
deleted file mode 100644
index aca43157d8d..00000000000
--- a/Build/source/libs/libttf/extend/ftxgasp.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************
- *
- * ftxgasp.c 1.0
- *
- * Gasp table support API extension body
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 gasp table is currently loaded by the core engine, but the
- * standard API doesn't give access to it. This file is used to
- * demonstrate the use of a simple API extension.
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-#include "ftxgasp.h"
-
-#include "tttypes.h"
-#include "ttobjs.h"
-#include "tttables.h"
-
-
- EXPORT_FUNC
- TT_Error TT_Get_Face_Gasp_Flags( TT_Face face,
- TT_UShort point_size,
- TT_Bool* grid_fit,
- TT_Bool* smooth_font )
- {
- PFace faze = HANDLE_Face( face );
- UShort i, flag;
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( faze->gasp.numRanges == 0 || !faze->gasp.gaspRanges )
- return TT_Err_Table_Missing;
-
- for ( i = 0; i < faze->gasp.numRanges; i++ )
- {
- if ( point_size <= faze->gasp.gaspRanges[i].maxPPEM )
- {
- flag = faze->gasp.gaspRanges[i].gaspFlag;
-
- *grid_fit = ( (flag & GASP_GRIDFIT) != 0 );
- *smooth_font = ( (flag & GASP_DOGRAY ) != 0 );
-
- return TT_Err_Ok;
- }
- }
-
- /* for very large fonts we enable font smoothing and discard */
- /* grid fitting */
-
- *grid_fit = 0;
- *smooth_font = 1;
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgasp.h b/Build/source/libs/libttf/extend/ftxgasp.h
deleted file mode 100644
index a0dde720c0f..00000000000
--- a/Build/source/libs/libttf/extend/ftxgasp.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************
- *
- * ftxgasp.h 1.0
- *
- * Gasp table support API extension
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 gasp table is currently loaded by the core engine, but the
- * standard API doesn't give access to it. This file is used to
- * demonstrate the use of a simple API extension.
- *
- ******************************************************************/
-
-#ifndef FTXGASP_H
-#define FTXGASP_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
- /* This function returns for a given 'point_size' the values of the */
- /* gasp flags 'grid_fit' and 'smooth_font'. The returned values */
- /* are booleans (where 0 = NO, and 1 = YES). */
-
- /* Note that this function will return TT_Err_Table_Missing if */
- /* the font file doesn't contain any gasp table. */
-
- EXPORT_DEF
- TT_Error TT_Get_Face_Gasp_Flags( TT_Face face,
- TT_UShort point_size,
- TT_Bool* grid_fit,
- TT_Bool* smooth_font );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXGASP_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgdef.c b/Build/source/libs/libttf/extend/ftxgdef.c
deleted file mode 100644
index a4be21ecc90..00000000000
--- a/Build/source/libs/libttf/extend/ftxgdef.c
+++ /dev/null
@@ -1,1127 +0,0 @@
-/*******************************************************************
- *
- * ftxgdef.c
- *
- * TrueType Open GDEF table support.
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "tttypes.h"
-#include "tttags.h"
-#include "ttload.h"
-#include "ttextend.h"
-#include "ttmemory.h"
-#include "ttfile.h"
-
-#include "ftxopen.h"
-#include "ftxopenf.h"
-
-
-#define GDEF_ID Build_Extension_ID( 'G', 'D', 'E', 'F' )
-
-
- static TT_Error Load_AttachList( TTO_AttachList* al,
- PFace input );
- static TT_Error Load_LigCaretList( TTO_LigCaretList* lcl,
- PFace input );
-
- static void Free_AttachList( TTO_AttachList* al );
- static void Free_LigCaretList( TTO_LigCaretList* lcl );
-
- static void Free_NewGlyphClasses( TTO_GDEFHeader* gdef );
-
-
-
- /**********************
- * Extension Functions
- **********************/
-
-
- static TT_Error GDEF_Create( void* ext,
- PFace face )
- {
- DEFINE_LOAD_LOCALS( face->stream );
-
- TTO_GDEFHeader* gdef = (TTO_GDEFHeader*)ext;
- Long table;
-
-
- /* by convention */
-
- if ( !gdef )
- return TT_Err_Ok;
-
- /* a null offset indicates that there is no GDEF table */
-
- gdef->offset = 0;
-
- /* we store the start offset and the size of the subtable */
-
- table = TT_LookUp_Table( face, TTAG_GDEF );
- if ( table < 0 )
- return TT_Err_Ok; /* The table is optional */
-
- if ( FILE_Seek( face->dirTables[table].Offset ) ||
- ACCESS_Frame( 4L ) )
- return error;
-
- gdef->offset = FILE_Pos() - 4L; /* undo ACCESS_Frame() */
- gdef->Version = GET_ULong();
-
- FORGET_Frame();
-
- gdef->loaded = FALSE;
-
- return TT_Err_Ok;
- }
-
-
- static TT_Error GDEF_Destroy( void* ext,
- PFace face )
- {
- TTO_GDEFHeader* gdef = (TTO_GDEFHeader*)ext;
-
-
- /* by convention */
-
- if ( !gdef )
- return TT_Err_Ok;
-
- if ( gdef->loaded )
- {
- Free_LigCaretList( &gdef->LigCaretList );
- Free_AttachList( &gdef->AttachList );
- Free_ClassDefinition( &gdef->GlyphClassDef );
- Free_ClassDefinition( &gdef->MarkAttachClassDef );
-
- Free_NewGlyphClasses( gdef );
- }
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Init_GDEF_Extension( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- return TT_Register_Extension( _engine,
- GDEF_ID,
- sizeof ( TTO_GDEFHeader ),
- GDEF_Create,
- GDEF_Destroy );
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Load_GDEF_Table( TT_Face face,
- TTO_GDEFHeader* retptr )
- {
- ULong cur_offset, new_offset, base_offset;
-
- TT_Error error;
- TT_Stream stream;
- TTO_GDEFHeader* gdef;
-
- PFace faze = HANDLE_Face( face );
-
-
- if ( !retptr )
- return TT_Err_Invalid_Argument;
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- error = TT_Extension_Get( faze, GDEF_ID, (void**)&gdef );
- if ( error )
- return error;
-
- if ( gdef->offset == 0 )
- return TT_Err_Table_Missing; /* no GDEF table; nothing to do */
-
- /* now access stream */
-
- if ( USE_Stream( faze->stream, stream ) )
- return error;
-
- base_offset = gdef->offset;
-
- /* skip version */
-
- if ( FILE_Seek( base_offset + 4L ) ||
- ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- /* all GDEF subtables are optional */
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- /* only classes 1-4 are allowed here */
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ClassDefinition( &gdef->GlyphClassDef, 5,
- faze ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
- }
- else
- gdef->GlyphClassDef.loaded = FALSE;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_AttachList( &gdef->AttachList,
- faze ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- gdef->AttachList.loaded = FALSE;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LigCaretList( &gdef->LigCaretList,
- faze ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
- }
- else
- gdef->LigCaretList.loaded = FALSE;
-
- /* OpenType 1.2 has introduced the `MarkAttachClassDef' field. We
- first have to scan the LookupFlag values to find out whether we
- must load it or not. Here we only store the current file offset. */
-
- gdef->MarkAttachClassDef_offset = FILE_Pos();
- gdef->MarkAttachClassDef.loaded = FALSE;
-
- gdef->LastGlyph = 0;
- gdef->NewGlyphClasses = NULL;
- gdef->loaded = TRUE;
-
- *retptr = *gdef;
- DONE_Stream( stream );
-
- return TT_Err_Ok;
-
- Fail2:
- Free_AttachList( &gdef->AttachList );
-
- Fail1:
- Free_ClassDefinition( &gdef->GlyphClassDef );
-
- /* release stream */
-
- DONE_Stream( stream );
-
- return error;
- }
-
-
-
- /*******************************
- * AttachList related functions
- *******************************/
-
-
- /* AttachPoint */
-
- static TT_Error Load_AttachPoint( TTO_AttachPoint* ap,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* pi;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = ap->PointCount = GET_UShort();
-
- FORGET_Frame();
-
- ap->PointIndex = NULL;
-
- if ( count )
- {
- if ( ALLOC_ARRAY( ap->PointIndex, count, UShort ) )
- return error;
-
- pi = ap->PointIndex;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( pi );
- return error;
- }
-
- for ( n = 0; n < count; n++ )
- pi[n] = GET_UShort();
-
- FORGET_Frame();
- }
-
- return TT_Err_Ok;
- }
-
-
- static void Free_AttachPoint( TTO_AttachPoint* ap )
- {
- FREE( ap->PointIndex );
- }
-
-
- /* AttachList */
-
- static TT_Error Load_AttachList( TTO_AttachList* al,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_AttachPoint* ap;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &al->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = al->GlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- al->AttachPoint = NULL;
-
- if ( ALLOC_ARRAY( al->AttachPoint, count, TTO_AttachPoint ) )
- goto Fail2;
-
- ap = al->AttachPoint;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_AttachPoint( &ap[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- al->loaded = TRUE;
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_AttachPoint( &ap[n] );
-
- FREE( ap );
-
- Fail2:
- Free_Coverage( &al->Coverage );
- return error;
- }
-
-
- static void Free_AttachList( TTO_AttachList* al )
- {
- UShort n, count;
-
- TTO_AttachPoint* ap;
-
-
- if ( !al->loaded )
- return;
-
- if ( al->AttachPoint )
- {
- count = al->GlyphCount;
- ap = al->AttachPoint;
-
- for ( n = 0; n < count; n++ )
- Free_AttachPoint( &ap[n] );
-
- FREE( ap );
- }
-
- Free_Coverage( &al->Coverage );
- }
-
-
-
- /*********************************
- * LigCaretList related functions
- *********************************/
-
-
- /* CaretValueFormat1 */
- /* CaretValueFormat2 */
- /* CaretValueFormat3 */
- /* CaretValueFormat4 */
-
- static TT_Error Load_CaretValue( TTO_CaretValue* cv,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- ULong cur_offset, new_offset, base_offset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cv->CaretValueFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( cv->CaretValueFormat )
- {
- case 1:
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cv->cvf.cvf1.Coordinate = GET_Short();
-
- FORGET_Frame();
-
- break;
-
- case 2:
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cv->cvf.cvf2.CaretValuePoint = GET_UShort();
-
- FORGET_Frame();
-
- break;
-
- case 3:
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- cv->cvf.cvf3.Coordinate = GET_Short();
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Device( &cv->cvf.cvf3.Device,
- input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- break;
-
- case 4:
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cv->cvf.cvf4.IdCaretValue = GET_UShort();
-
- FORGET_Frame();
- break;
-
- default:
- return TTO_Err_Invalid_GDEF_SubTable_Format;
- }
-
- return TT_Err_Ok;
- }
-
-
- static void Free_CaretValue( TTO_CaretValue* cv )
- {
- if ( cv->CaretValueFormat == 3 )
- Free_Device( &cv->cvf.cvf3.Device );
- }
-
-
- /* LigGlyph */
-
- static TT_Error Load_LigGlyph( TTO_LigGlyph* lg,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_CaretValue* cv;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = lg->CaretCount = GET_UShort();
-
- FORGET_Frame();
-
- lg->CaretValue = NULL;
-
- if ( ALLOC_ARRAY( lg->CaretValue, count, TTO_CaretValue ) )
- return error;
-
- cv = lg->CaretValue;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_CaretValue( &cv[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_CaretValue( &cv[n] );
-
- FREE( cv );
- return error;
- }
-
-
- static void Free_LigGlyph( TTO_LigGlyph* lg )
- {
- UShort n, count;
-
- TTO_CaretValue* cv;
-
-
- if ( lg->CaretValue )
- {
- count = lg->CaretCount;
- cv = lg->CaretValue;
-
- for ( n = 0; n < count; n++ )
- Free_CaretValue( &cv[n] );
-
- FREE( cv );
- }
- }
-
-
- /* LigCaretList */
-
- static TT_Error Load_LigCaretList( TTO_LigCaretList* lcl,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_LigGlyph* lg;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &lcl->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = lcl->LigGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- lcl->LigGlyph = NULL;
-
- if ( ALLOC_ARRAY( lcl->LigGlyph, count, TTO_LigGlyph ) )
- goto Fail2;
-
- lg = lcl->LigGlyph;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LigGlyph( &lg[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- lcl->loaded = TRUE;
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_LigGlyph( &lg[n] );
-
- FREE( lg );
-
- Fail2:
- Free_Coverage( &lcl->Coverage );
- return error;
- }
-
-
- static void Free_LigCaretList( TTO_LigCaretList* lcl )
- {
- UShort n, count;
-
- TTO_LigGlyph* lg;
-
-
- if ( !lcl->loaded )
- return;
-
- if ( lcl->LigGlyph )
- {
- count = lcl->LigGlyphCount;
- lg = lcl->LigGlyph;
-
- for ( n = 0; n < count; n++ )
- Free_LigGlyph( &lg[n] );
-
- FREE( lg );
- }
-
- Free_Coverage( &lcl->Coverage );
- }
-
-
-
- /***********
- * GDEF API
- ***********/
-
-
- static UShort Get_New_Class( TTO_GDEFHeader* gdef,
- UShort glyphID,
- UShort index )
- {
- UShort glyph_index, array_index;
- UShort byte, bits;
-
- TTO_ClassRangeRecord* gcrr;
- UShort** ngc;
-
-
- if ( glyphID >= gdef->LastGlyph )
- return 0;
-
- gcrr = gdef->GlyphClassDef.cd.cd2.ClassRangeRecord;
- ngc = gdef->NewGlyphClasses;
-
- if ( glyphID < gcrr[index].Start )
- {
- array_index = 0;
- if ( index == 0 )
- glyph_index = glyphID;
- else
- glyph_index = glyphID - gcrr[index - 1].End - 1;
- }
- else
- {
- array_index = index + 1;
- glyph_index = glyphID - gcrr[index].End - 1;
- }
-
- byte = ngc[array_index][glyph_index / 4 + 1];
- bits = byte >> ( 16 - ( glyph_index % 4 + 1 ) * 4 );
-
- return bits & 0x000F;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GDEF_Get_Glyph_Property( TTO_GDEFHeader* gdef,
- TT_UShort glyphID,
- TT_UShort* property )
- {
- UShort class, index;
-
- TT_Error error;
-
-
- if ( !gdef || !property )
- return TT_Err_Invalid_Argument;
-
- /* first, we check for mark attach classes */
-
- if ( gdef->MarkAttachClassDef.loaded )
- {
- error = Get_Class( &gdef->MarkAttachClassDef, glyphID, &class, &index );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- if ( !error )
- {
- *property = class << 8;
- return TT_Err_Ok;
- }
- }
-
- error = Get_Class( &gdef->GlyphClassDef, glyphID, &class, &index );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- /* if we have a constructed class table, check whether additional
- values have been assigned */
-
- if ( error == TTO_Err_Not_Covered && gdef->NewGlyphClasses )
- class = Get_New_Class( gdef, glyphID, index );
-
- switch ( class )
- {
- case UNCLASSIFIED_GLYPH:
- *property = 0;
- break;
-
- case SIMPLE_GLYPH:
- *property = TTO_BASE_GLYPH;
- break;
-
- case LIGATURE_GLYPH:
- *property = TTO_LIGATURE;
- break;
-
- case MARK_GLYPH:
- *property = TTO_MARK;
- break;
-
- case COMPONENT_GLYPH:
- *property = TTO_COMPONENT;
- break;
- }
-
- return TT_Err_Ok;
- }
-
-
- static TT_Error Make_ClassRange( TTO_ClassDefinition* cd,
- UShort start,
- UShort end,
- UShort class )
- {
- TT_Error error;
- UShort index;
-
- TTO_ClassDefFormat2* cdf2;
- TTO_ClassRangeRecord* crr;
-
-
- cdf2 = &cd->cd.cd2;
-
- cdf2->ClassRangeCount++;
-
- if ( REALLOC_ARRAY( cdf2->ClassRangeRecord, cdf2->ClassRangeCount,
- TTO_ClassRangeRecord ) )
- return error;
-
- crr = cdf2->ClassRangeRecord;
- index = cdf2->ClassRangeCount - 1;
-
- crr[index].Start = start;
- crr[index].End = end;
- crr[index].Class = class;
-
- cd->Defined[class] = TRUE;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GDEF_Build_ClassDefinition( TTO_GDEFHeader* gdef,
- TT_UShort num_glyphs,
- TT_UShort glyph_count,
- TT_UShort* glyph_array,
- TT_UShort* class_array )
- {
- UShort start, curr_glyph, curr_class;
- UShort n, count;
- TT_Error error;
-
- TTO_ClassDefinition* gcd;
- TTO_ClassRangeRecord* gcrr;
- UShort** ngc;
-
-
- if ( !gdef || !glyph_array || !class_array )
- return TT_Err_Invalid_Argument;
-
- gcd = &gdef->GlyphClassDef;
-
- /* We build a format 2 table */
-
- gcd->ClassFormat = 2;
-
- /* A GlyphClassDef table contains at most 5 different class values */
-
- if ( ALLOC_ARRAY( gcd->Defined, 5, Bool ) )
- return error;
-
- gcd->cd.cd2.ClassRangeCount = 0;
- gcd->cd.cd2.ClassRangeRecord = NULL;
-
- start = glyph_array[0];
- curr_class = class_array[0];
- curr_glyph = start;
-
- if ( curr_class >= 5 )
- {
- error = TT_Err_Invalid_Argument;
- goto Fail4;
- }
-
- glyph_count--;
-
- for ( n = 0; n <= glyph_count; n++ )
- {
- if ( curr_glyph == glyph_array[n] && curr_class == class_array[n] )
- {
- if ( n == glyph_count )
- {
- if ( ( error = Make_ClassRange( gcd, start,
- curr_glyph,
- curr_class ) ) != TT_Err_Ok )
- goto Fail3;
- }
- else
- {
- if ( curr_glyph == 0xFFFF )
- {
- error = TT_Err_Invalid_Argument;
- goto Fail3;
- }
- else
- curr_glyph++;
- }
- }
- else
- {
- if ( ( error = Make_ClassRange( gcd, start,
- curr_glyph - 1,
- curr_class ) ) != TT_Err_Ok )
- goto Fail3;
-
- if ( curr_glyph > glyph_array[n] )
- {
- error = TT_Err_Invalid_Argument;
- goto Fail3;
- }
-
- start = glyph_array[n];
- curr_class = class_array[n];
- curr_glyph = start;
-
- if ( curr_class >= 5 )
- {
- error = TT_Err_Invalid_Argument;
- goto Fail3;
- }
-
- if ( n == glyph_count )
- {
- if ( ( error = Make_ClassRange( gcd, start,
- curr_glyph,
- curr_class ) ) != TT_Err_Ok )
- goto Fail3;
- }
- else
- {
- if ( curr_glyph == 0xFFFF )
- {
- error = TT_Err_Invalid_Argument;
- goto Fail3;
- }
- else
- curr_glyph++;
- }
- }
- }
-
- /* now prepare the arrays for class values assigned during the lookup
- process */
-
- if ( ALLOC_ARRAY( gdef->NewGlyphClasses,
- gcd->cd.cd2.ClassRangeCount + 1, UShort* ) )
- goto Fail2;
-
- count = gcd->cd.cd2.ClassRangeCount;
- gcrr = gcd->cd.cd2.ClassRangeRecord;
- ngc = gdef->NewGlyphClasses;
-
- /* We allocate arrays for all glyphs not covered by the class range
- records. Each element holds four class values. */
-
- if ( gcrr[0].Start )
- {
- if ( ALLOC_ARRAY( ngc[0], gcrr[0].Start / 4 + 1, UShort ) )
- goto Fail1;
- }
-
- for ( n = 1; n < count; n++ )
- {
- if ( gcrr[n].Start - gcrr[n - 1].End > 1 )
- if ( ALLOC_ARRAY( ngc[n],
- ( gcrr[n].Start - gcrr[n - 1].End - 1 ) / 4 + 1,
- UShort ) )
- goto Fail1;
- }
-
- if ( gcrr[count - 1].End != num_glyphs - 1 )
- {
- if ( ALLOC_ARRAY( ngc[count],
- ( num_glyphs - gcrr[count - 1].End - 1 ) / 4 + 1,
- UShort ) )
- goto Fail1;
- }
-
- gdef->LastGlyph = num_glyphs - 1;
-
- gdef->MarkAttachClassDef_offset = 0L;
- gdef->MarkAttachClassDef.loaded = FALSE;
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- FREE( ngc[n] );
-
- Fail2:
- FREE( gdef->NewGlyphClasses );
-
- Fail3:
- FREE( gcd->cd.cd2.ClassRangeRecord );
-
- Fail4:
- FREE( gcd->Defined );
- return error;
- }
-
-
- static void Free_NewGlyphClasses( TTO_GDEFHeader* gdef )
- {
- UShort** ngc;
- UShort n, count;
-
-
- if ( gdef->NewGlyphClasses )
- {
- count = gdef->GlyphClassDef.cd.cd2.ClassRangeCount + 1;
- ngc = gdef->NewGlyphClasses;
-
- for ( n = 0; n < count; n++ )
- FREE( ngc[n] );
-
- FREE( ngc );
- }
- }
-
-
- TT_Error Add_Glyph_Property( TTO_GDEFHeader* gdef,
- UShort glyphID,
- UShort property )
- {
- TT_Error error;
- UShort class, new_class, index;
- UShort byte, bits, mask;
- UShort array_index, glyph_index;
-
- TTO_ClassRangeRecord* gcrr;
- UShort** ngc;
-
-
- error = Get_Class( &gdef->GlyphClassDef, glyphID, &class, &index );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- /* we don't accept glyphs covered in `GlyphClassDef' */
-
- if ( !error )
- return TTO_Err_Not_Covered;
-
- switch ( property )
- {
- case 0:
- new_class = UNCLASSIFIED_GLYPH;
- break;
-
- case TTO_BASE_GLYPH:
- new_class = SIMPLE_GLYPH;
- break;
-
- case TTO_LIGATURE:
- new_class = LIGATURE_GLYPH;
- break;
-
- case TTO_MARK:
- new_class = MARK_GLYPH;
- break;
-
- case TTO_COMPONENT:
- new_class = COMPONENT_GLYPH;
- break;
-
- default:
- return TT_Err_Invalid_Argument;
- }
-
- gcrr = gdef->GlyphClassDef.cd.cd2.ClassRangeRecord;
- ngc = gdef->NewGlyphClasses;
-
- if ( glyphID < gcrr[index].Start )
- {
- array_index = 0;
- if ( index == 0 )
- glyph_index = glyphID;
- else
- glyph_index = glyphID - gcrr[index - 1].End - 1;
- }
- else
- {
- array_index = index + 1;
- glyph_index = glyphID - gcrr[index].End - 1;
- }
-
- byte = ngc[array_index][glyph_index / 4 + 1];
- bits = byte >> ( 16 - ( glyph_index % 4 + 1 ) * 4 );
- class = bits & 0x000F;
-
- /* we don't overwrite existing entries */
-
- if ( !class )
- {
- bits = new_class << ( 16 - ( glyph_index % 4 + 1 ) * 4 );
- mask = ~( 0x000F << ( 16 - ( glyph_index % 4 + 1 ) * 4 ) );
-
- ngc[array_index][glyph_index / 4 + 1] &= mask;
- ngc[array_index][glyph_index / 4 + 1] |= bits;
- }
-
- return TT_Err_Ok;
- }
-
-
- TT_Error Check_Property( TTO_GDEFHeader* gdef,
- UShort index,
- UShort flags,
- UShort* property )
- {
- TT_Error error;
-
-
- if ( gdef )
- {
- error = TT_GDEF_Get_Glyph_Property( gdef, index, property );
- if ( error )
- return error;
-
- /* This is OpenType 1.2 */
-
- if ( flags & IGNORE_SPECIAL_MARKS )
- if ( (flags & 0xFF00) != *property )
- return TTO_Err_Not_Covered;
-
- if ( flags & *property )
- return TTO_Err_Not_Covered;
- }
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgdef.h b/Build/source/libs/libttf/extend/ftxgdef.h
deleted file mode 100644
index 33872321f65..00000000000
--- a/Build/source/libs/libttf/extend/ftxgdef.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*******************************************************************
- *
- * ftxgdef.h
- *
- * TrueType Open GDEF table support
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 FTXOPEN_H
-#error "Don't include this file! Use ftxopen.h instead."
-#endif
-
-#ifndef FTXGDEF_H
-#define FTXGDEF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define TTO_Err_Invalid_GDEF_SubTable_Format 0x1030
-#define TTO_Err_Invalid_GDEF_SubTable 0x1031
-
-
-/* GDEF glyph classes */
-
-#define UNCLASSIFIED_GLYPH 0
-#define SIMPLE_GLYPH 1
-#define LIGATURE_GLYPH 2
-#define MARK_GLYPH 3
-#define COMPONENT_GLYPH 4
-
-/* GDEF glyph properties, corresponding to class values 1-4. Note that
- TTO_COMPONENT has no corresponding flag in the LookupFlag field. */
-
-#define TTO_BASE_GLYPH 0x0002
-#define TTO_LIGATURE 0x0004
-#define TTO_MARK 0x0008
-#define TTO_COMPONENT 0x0010
-
-
- /* Attachment related structures */
-
- struct TTO_AttachPoint_
- {
- TT_UShort PointCount; /* size of the PointIndex array */
- TT_UShort* PointIndex; /* array of contour points */
- };
-
- typedef struct TTO_AttachPoint_ TTO_AttachPoint;
-
-
- struct TTO_AttachList_
- {
- TT_Bool loaded;
-
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort GlyphCount; /* number of glyphs with
- attachments */
- TTO_AttachPoint* AttachPoint; /* array of AttachPoint tables */
- };
-
- typedef struct TTO_AttachList_ TTO_AttachList;
-
-
- /* Ligature Caret related structures */
-
- struct TTO_CaretValueFormat1_
- {
- TT_Short Coordinate; /* x or y value (in design units) */
- };
-
- typedef struct TTO_CaretValueFormat1_ TTO_CaretValueFormat1;
-
-
- struct TTO_CaretValueFormat2_
- {
- TT_UShort CaretValuePoint; /* contour point index on glyph */
- };
-
- typedef struct TTO_CaretValueFormat2_ TTO_CaretValueFormat2;
-
-
- struct TTO_CaretValueFormat3_
- {
- TT_Short Coordinate; /* x or y value (in design units) */
- TTO_Device Device; /* Device table for x or y value */
- };
-
- typedef struct TTO_CaretValueFormat3_ TTO_CaretValueFormat3;
-
-
- struct TTO_CaretValueFormat4_
- {
- TT_UShort IdCaretValue; /* metric ID */
- };
-
- typedef struct TTO_CaretValueFormat4_ TTO_CaretValueFormat4;
-
-
- struct TTO_CaretValue_
- {
- TT_UShort CaretValueFormat; /* 1, 2, 3, or 4 */
-
- union
- {
- TTO_CaretValueFormat1 cvf1;
- TTO_CaretValueFormat2 cvf2;
- TTO_CaretValueFormat3 cvf3;
- TTO_CaretValueFormat4 cvf4;
- } cvf;
- };
-
- typedef struct TTO_CaretValue_ TTO_CaretValue;
-
-
- struct TTO_LigGlyph_
- {
- TT_Bool loaded;
-
- TT_UShort CaretCount; /* number of caret values */
- TTO_CaretValue* CaretValue; /* array of caret values */
- };
-
- typedef struct TTO_LigGlyph_ TTO_LigGlyph;
-
-
- struct TTO_LigCaretList_
- {
- TT_Bool loaded;
-
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort LigGlyphCount; /* number of ligature glyphs */
- TTO_LigGlyph* LigGlyph; /* array of LigGlyph tables */
- };
-
- typedef struct TTO_LigCaretList_ TTO_LigCaretList;
-
-
- /* The `NewGlyphClasses' field is not defined in the TTO specification.
- We use it for fonts with a constructed `GlyphClassDef' structure
- (i.e., which don't have a GDEF table) to collect glyph classes
- assigned during the lookup process. The number of arrays in this
- pointer array is GlyphClassDef->cd.cd2.ClassRangeCount+1; the nth
- array then contains the glyph class values of the glyphs not covered
- by the ClassRangeRecords structures with index n-1 and n. We store
- glyph class values for four glyphs in a single array element.
-
- `LastGlyph' is identical to the number of glyphs minus one in the
- font; we need it only if `NewGlyphClasses' is not NULL (to have an
- upper bound for the last array).
-
- Note that we first store the file offset to the `MarkAttachClassDef'
- field (which has been introduced in OpenType 1.2) -- since the
- `Version' field value hasn't been increased to indicate that we have
- one more field for some obscure reason, we must parse the GSUB table
- to find out whether class values refer to this table. Only then we
- can finally load the MarkAttachClassDef structure if necessary. */
-
- struct TTO_GDEFHeader_
- {
- TT_Bool loaded;
- TT_ULong offset;
-
- TT_Fixed Version;
-
- TTO_ClassDefinition GlyphClassDef;
- TTO_AttachList AttachList;
- TTO_LigCaretList LigCaretList;
- TT_ULong MarkAttachClassDef_offset;
- TTO_ClassDefinition MarkAttachClassDef; /* new in OT 1.2 */
-
- TT_UShort LastGlyph;
- TT_UShort** NewGlyphClasses;
- };
-
- typedef struct TTO_GDEFHeader_ TTO_GDEFHeader;
-
-
- /* finally, the GDEF API */
-
- EXPORT_DEF
- TT_Error TT_Init_GDEF_Extension( TT_Engine engine );
-
- EXPORT_DEF
- TT_Error TT_Load_GDEF_Table( TT_Face face,
- TTO_GDEFHeader* gdef );
-
- EXPORT_DEF
- TT_Error TT_GDEF_Get_Glyph_Property( TTO_GDEFHeader* gdef,
- TT_UShort glyphID,
- TT_UShort* property );
- EXPORT_DEF
- TT_Error TT_GDEF_Build_ClassDefinition( TTO_GDEFHeader* gdef,
- TT_UShort num_glyphs,
- TT_UShort glyph_count,
- TT_UShort* glyph_array,
- TT_UShort* class_array );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXGDEF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgpos.c b/Build/source/libs/libttf/extend/ftxgpos.c
deleted file mode 100644
index 25eff3ade52..00000000000
--- a/Build/source/libs/libttf/extend/ftxgpos.c
+++ /dev/null
@@ -1,6169 +0,0 @@
-/*******************************************************************
- *
- * ftxgpos.c
- *
- * TrueType Open GPOS table support.
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- ******************************************************************/
-
-/* XXX There is *a lot* of duplicated code (cf. formats 7 and 8), but
- I don't care currently. I believe that it would be possible to
- save about 50% of TTO code by carefully designing the structures,
- sharing as much as possible with extensive use of macros. This
- is something for a volunteer :-) */
-
-#include "tttypes.h"
-#include "tttags.h"
-#include "ttload.h"
-#include "ttextend.h"
-#include "ttmemory.h"
-#include "ttfile.h"
-
-#include "ftxopen.h"
-#include "ftxopenf.h"
-
-
-#define GPOS_ID Build_Extension_ID( 'G', 'P', 'O', 'S' )
-
-
- struct GPOS_Instance_
- {
- TTO_GPOSHeader* gpos;
- TT_Instance instance;
- TT_Glyph glyph;
- UShort load_flags; /* how the glyph should be loaded */
- TT_Bool r2l;
-
- UShort last; /* the last valid glyph -- used
- with cursive positioning */
- TT_Pos anchor_x; /* the coordinates of the anchor point */
- TT_Pos anchor_y; /* of the last valid glyph */
- };
-
- typedef struct GPOS_Instance_ GPOS_Instance;
-
-
- static TT_Error Do_Glyph_Lookup( GPOS_Instance* gpi,
- UShort lookup_index,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort context_length,
- int nesting_level );
-
-
-
- /**********************
- * Extension Functions
- **********************/
-
- /* the client application must replace this with something more
- meaningful if multiple master fonts are to be supported. */
-
- static TT_Error default_mmfunc( TT_Instance instance,
- TT_UShort metric_id,
- TT_Pos* metric_value,
- void* data )
- {
- return TTO_Err_No_MM_Interpreter;
- }
-
-
- static TT_Error GPOS_Create( void* ext,
- PFace face )
- {
- DEFINE_LOAD_LOCALS( face->stream );
-
- TTO_GPOSHeader* gpos = (TTO_GPOSHeader*)ext;
- Long table;
-
-
- /* by convention */
-
- if ( !gpos )
- return TT_Err_Ok;
-
- /* a null offset indicates that there is no GPOS table */
-
- gpos->offset = 0;
-
- /* we store the start offset and the size of the subtable */
-
- table = TT_LookUp_Table( face, TTAG_GPOS );
- if ( table < 0 )
- return TT_Err_Ok; /* The table is optional */
-
- if ( FILE_Seek( face->dirTables[table].Offset ) ||
- ACCESS_Frame( 4L ) )
- return error;
-
- gpos->offset = FILE_Pos() - 4L; /* undo ACCESS_Frame() */
- gpos->Version = GET_ULong();
-
- FORGET_Frame();
-
- /* a default mmfunc() handler which just returns an error */
-
- gpos->mmfunc = default_mmfunc;
-
- /* the default glyph function is TT_Load_Glyph() */
-
- gpos->gfunc = TT_Load_Glyph;
-
- gpos->loaded = FALSE;
-
- return TT_Err_Ok;
- }
-
-
- static TT_Error GPOS_Destroy( void* ext,
- PFace face )
- {
- TTO_GPOSHeader* gpos = (TTO_GPOSHeader*)ext;
-
-
- /* by convention */
-
- if ( !gpos )
- return TT_Err_Ok;
-
- if ( gpos->loaded )
- {
- Free_LookupList( &gpos->LookupList, GPOS );
- Free_FeatureList( &gpos->FeatureList );
- Free_ScriptList( &gpos->ScriptList );
- }
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Init_GPOS_Extension( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- return TT_Register_Extension( _engine,
- GPOS_ID,
- sizeof ( TTO_GPOSHeader ),
- GPOS_Create,
- GPOS_Destroy );
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Load_GPOS_Table( TT_Face face,
- TTO_GPOSHeader* retptr,
- TTO_GDEFHeader* gdef )
- {
- ULong cur_offset, new_offset, base_offset;
-
- UShort i, num_lookups;
- TT_Error error;
- TT_Stream stream;
- TTO_GPOSHeader* gpos;
- TTO_Lookup* lo;
-
- PFace faze = HANDLE_Face( face );
-
-
- if ( !retptr )
- return TT_Err_Invalid_Argument;
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- error = TT_Extension_Get( faze, GPOS_ID, (void**)&gpos );
- if ( error )
- return error;
-
- if ( gpos->offset == 0 )
- return TT_Err_Table_Missing; /* no GPOS table; nothing to do */
-
- /* now access stream */
-
- if ( USE_Stream( faze->stream, stream ) )
- return error;
-
- base_offset = gpos->offset;
-
- /* skip version */
-
- if ( FILE_Seek( base_offset + 4L ) ||
- ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ScriptList( &gpos->ScriptList,
- faze ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_FeatureList( &gpos->FeatureList,
- faze ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LookupList( &gpos->LookupList,
- faze, GPOS ) ) != TT_Err_Ok )
- goto Fail2;
-
- gpos->gdef = gdef; /* can be NULL */
-
- /* We now check the LookupFlags for values larger than 0xFF to find
- out whether we need to load the `MarkAttachClassDef' field of the
- GDEF table -- this hack is necessary for OpenType 1.2 tables since
- the version field of the GDEF table hasn't been incremented.
-
- For constructed GDEF tables, we only load it if
- `MarkAttachClassDef_offset' is not zero (nevertheless, a build of
- a constructed mark attach table is not supported currently). */
-
- if ( gdef &&
- gdef->MarkAttachClassDef_offset && !gdef->MarkAttachClassDef.loaded )
- {
- lo = gpos->LookupList.Lookup;
- num_lookups = gpos->LookupList.LookupCount;
-
- for ( i = 0; i < num_lookups; i++ )
- {
- if ( lo[i].LookupFlag & IGNORE_SPECIAL_MARKS )
- {
- if ( FILE_Seek( gdef->MarkAttachClassDef_offset ) ||
- ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( !new_offset )
- return TTO_Err_Invalid_GDEF_SubTable;
-
- new_offset += base_offset;
-
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ClassDefinition( &gdef->MarkAttachClassDef,
- 256, faze ) ) != TT_Err_Ok )
- goto Fail1;
-
- break;
- }
- }
- }
-
- gpos->loaded = TRUE;
- *retptr = *gpos;
- DONE_Stream( stream );
-
- return TT_Err_Ok;
-
- Fail1:
- Free_LookupList( &gpos->LookupList, GPOS );
-
- Fail2:
- Free_FeatureList( &gpos->FeatureList );
-
- Fail3:
- Free_ScriptList( &gpos->ScriptList );
-
- /* release stream */
-
- DONE_Stream( stream );
-
- return error;
- }
-
-
-
- /*****************************
- * SubTable related functions
- *****************************/
-
- /* shared tables */
-
- /* ValueRecord */
-
- /* There is a subtle difference in the specs between a `table' and a
- `record' -- offsets for device tables in ValueRecords are taken from
- the parent table and not the parent record. */
-
- static TT_Error Load_ValueRecord( TTO_ValueRecord* vr,
- UShort format,
- ULong base_offset,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- ULong cur_offset, new_offset;
-
-
- if ( format & HAVE_X_PLACEMENT )
- {
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- vr->XPlacement = GET_Short();
-
- FORGET_Frame();
- }
- else
- vr->XPlacement = 0;
-
- if ( format & HAVE_Y_PLACEMENT )
- {
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- vr->YPlacement = GET_Short();
-
- FORGET_Frame();
- }
- else
- vr->YPlacement = 0;
-
- if ( format & HAVE_X_ADVANCE )
- {
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- vr->XAdvance = GET_Short();
-
- FORGET_Frame();
- }
- else
- vr->XAdvance = 0;
-
- if ( format & HAVE_Y_ADVANCE )
- {
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- vr->YAdvance = GET_Short();
-
- FORGET_Frame();
- }
- else
- vr->YAdvance = 0;
-
- if ( format & HAVE_X_PLACEMENT_DEVICE )
- {
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Device( &vr->XPlacementDevice,
- input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
- }
- else
- goto empty1;
- }
- else
- {
- empty1:
- vr->XPlacementDevice.StartSize = 0;
- vr->XPlacementDevice.EndSize = 0;
- vr->XPlacementDevice.DeltaValue = NULL;
- }
-
- if ( format & HAVE_Y_PLACEMENT_DEVICE )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Device( &vr->YPlacementDevice,
- input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
- }
- else
- goto empty2;
- }
- else
- {
- empty2:
- vr->YPlacementDevice.StartSize = 0;
- vr->YPlacementDevice.EndSize = 0;
- vr->YPlacementDevice.DeltaValue = NULL;
- }
-
- if ( format & HAVE_X_ADVANCE_DEVICE )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Device( &vr->XAdvanceDevice,
- input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
- }
- else
- goto empty3;
- }
- else
- {
- empty3:
- vr->XAdvanceDevice.StartSize = 0;
- vr->XAdvanceDevice.EndSize = 0;
- vr->XAdvanceDevice.DeltaValue = NULL;
- }
-
- if ( format & HAVE_Y_ADVANCE_DEVICE )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Device( &vr->YAdvanceDevice,
- input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- goto empty4;
- }
- else
- {
- empty4:
- vr->YAdvanceDevice.StartSize = 0;
- vr->YAdvanceDevice.EndSize = 0;
- vr->YAdvanceDevice.DeltaValue = NULL;
- }
-
- if ( format & HAVE_X_ID_PLACEMENT )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- vr->XIdPlacement = GET_UShort();
-
- FORGET_Frame();
- }
- else
- vr->XIdPlacement = 0;
-
- if ( format & HAVE_Y_ID_PLACEMENT )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- vr->YIdPlacement = GET_UShort();
-
- FORGET_Frame();
- }
- else
- vr->YIdPlacement = 0;
-
- if ( format & HAVE_X_ID_ADVANCE )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- vr->XIdAdvance = GET_UShort();
-
- FORGET_Frame();
- }
- else
- vr->XIdAdvance = 0;
-
- if ( format & HAVE_Y_ID_ADVANCE )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- vr->YIdAdvance = GET_UShort();
-
- FORGET_Frame();
- }
- else
- vr->YIdAdvance = 0;
-
- return TT_Err_Ok;
-
- Fail1:
- Free_Device( &vr->YAdvanceDevice );
-
- Fail2:
- Free_Device( &vr->XAdvanceDevice );
-
- Fail3:
- Free_Device( &vr->YPlacementDevice );
- return error;
- }
-
-
- static void Free_ValueRecord( TTO_ValueRecord* vr,
- UShort format )
- {
- if ( format & HAVE_Y_ADVANCE_DEVICE )
- Free_Device( &vr->YAdvanceDevice );
- if ( format & HAVE_X_ADVANCE_DEVICE )
- Free_Device( &vr->XAdvanceDevice );
- if ( format & HAVE_Y_PLACEMENT_DEVICE )
- Free_Device( &vr->YPlacementDevice );
- if ( format & HAVE_X_PLACEMENT_DEVICE )
- Free_Device( &vr->XPlacementDevice );
- }
-
-
- static TT_Error Get_ValueRecord( GPOS_Instance* gpi,
- TTO_ValueRecord* vr,
- UShort format,
- TTO_GPOS_Data* gd )
- {
- TT_Pos value;
- Short pixel_value;
- TT_Error error = TT_Err_Ok;
- TTO_GPOSHeader* gpos = gpi->gpos;
- PInstance ins;
-
- UShort x_ppem, y_ppem;
- Fixed x_scale, y_scale;
-
-
- if ( !format )
- return TT_Err_Ok;
-
- ins = HANDLE_Instance( gpi->instance );
-
- x_ppem = ins->metrics.x_ppem;
- y_ppem = ins->metrics.y_ppem;
- x_scale = TT_MulDiv( 0x10000,
- ins->metrics.x_scale1,
- ins->metrics.x_scale2 );
- y_scale = TT_MulDiv( 0x10000,
- ins->metrics.y_scale1,
- ins->metrics.y_scale2 );
-
- /* design units -> fractional pixel */
-
- if ( format & HAVE_X_PLACEMENT )
- gd->x_pos += x_scale * vr->XPlacement / 0x10000;
- if ( format & HAVE_Y_PLACEMENT )
- gd->y_pos += y_scale * vr->YPlacement / 0x10000;
- if ( format & HAVE_X_ADVANCE )
- gd->x_advance += x_scale * vr->XAdvance / 0x10000;
- if ( format & HAVE_Y_ADVANCE )
- gd->y_advance += y_scale * vr->YAdvance / 0x10000;
-
- /* we use the device tables only if gpi->glyph.z is not NULL */
-
- if ( gpi->glyph.z )
- {
- /* pixel -> fractional pixel */
-
- if ( format & HAVE_X_PLACEMENT_DEVICE )
- {
- Get_Device( &vr->XPlacementDevice, x_ppem, &pixel_value );
- gd->x_pos += pixel_value << 6;
- }
- if ( format & HAVE_Y_PLACEMENT_DEVICE )
- {
- Get_Device( &vr->YPlacementDevice, y_ppem, &pixel_value );
- gd->y_pos += pixel_value << 6;
- }
- if ( format & HAVE_X_ADVANCE_DEVICE )
- {
- Get_Device( &vr->XAdvanceDevice, x_ppem, &pixel_value );
- gd->x_advance += pixel_value << 6;
- }
- if ( format & HAVE_Y_ADVANCE_DEVICE )
- {
- Get_Device( &vr->YAdvanceDevice, y_ppem, &pixel_value );
- gd->y_advance += pixel_value << 6;
- }
- }
-
- /* values returned from mmfunc() are already in fractional pixels */
-
- if ( format & HAVE_X_ID_PLACEMENT )
- {
- error = (gpos->mmfunc)( gpi->instance, vr->XIdPlacement,
- &value, gpos->data );
- if ( error )
- return error;
- gd->x_pos += value;
- }
- if ( format & HAVE_Y_ID_PLACEMENT )
- {
- error = (gpos->mmfunc)( gpi->instance, vr->YIdPlacement,
- &value, gpos->data );
- if ( error )
- return error;
- gd->y_pos += value;
- }
- if ( format & HAVE_X_ID_ADVANCE )
- {
- error = (gpos->mmfunc)( gpi->instance, vr->XIdAdvance,
- &value, gpos->data );
- if ( error )
- return error;
- gd->x_advance += value;
- }
- if ( format & HAVE_Y_ID_ADVANCE )
- {
- error = (gpos->mmfunc)( gpi->instance, vr->YIdAdvance,
- &value, gpos->data );
- if ( error )
- return error;
- gd->y_advance += value;
- }
-
- return error;
- }
-
-
- /* AnchorFormat1 */
- /* AnchorFormat2 */
- /* AnchorFormat3 */
- /* AnchorFormat4 */
-
- static TT_Error Load_Anchor( TTO_Anchor* an,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- ULong cur_offset, new_offset, base_offset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- an->PosFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( an->PosFormat )
- {
- case 1:
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- an->af.af1.XCoordinate = GET_Short();
- an->af.af1.YCoordinate = GET_Short();
-
- FORGET_Frame();
- break;
-
- case 2:
- if ( ACCESS_Frame( 6L ) )
- return error;
-
- an->af.af2.XCoordinate = GET_Short();
- an->af.af2.YCoordinate = GET_Short();
- an->af.af2.AnchorPoint = GET_UShort();
-
- FORGET_Frame();
- break;
-
- case 3:
- if ( ACCESS_Frame( 6L ) )
- return error;
-
- an->af.af3.XCoordinate = GET_Short();
- an->af.af3.YCoordinate = GET_Short();
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Device( &an->af.af3.XDeviceTable,
- input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
- }
- else
- {
- an->af.af3.XDeviceTable.StartSize = 0;
- an->af.af3.XDeviceTable.EndSize = 0;
- an->af.af3.XDeviceTable.DeltaValue = 0;
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Device( &an->af.af3.YDeviceTable,
- input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
- else
- {
- an->af.af3.YDeviceTable.StartSize = 0;
- an->af.af3.YDeviceTable.EndSize = 0;
- an->af.af3.YDeviceTable.DeltaValue = 0;
- }
- break;
-
- case 4:
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- an->af.af4.XIdAnchor = GET_UShort();
- an->af.af4.YIdAnchor = GET_UShort();
-
- FORGET_Frame();
- break;
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok;
-
- Fail:
- Free_Device( &an->af.af3.XDeviceTable );
- return error;
- }
-
-
- static void Free_Anchor( TTO_Anchor* an )
- {
- if ( an->PosFormat == 3 )
- {
- Free_Device( &an->af.af3.YDeviceTable );
- Free_Device( &an->af.af3.XDeviceTable );
- }
- }
-
-
- static TT_Error Get_Anchor( GPOS_Instance* gpi,
- TTO_Anchor* an,
- TT_UShort glyph_index,
- TT_Pos* x_value,
- TT_Pos* y_value )
- {
- TT_Error error = TT_Err_Ok;
-
- PInstance ins;
- PGlyph glyph;
- TTO_GPOSHeader* gpos = gpi->gpos;
- UShort ap;
-
- Short pixel_value;
- UShort load_flags;
-
- UShort x_ppem, y_ppem;
- Fixed x_scale, y_scale;
-
-
- ins = HANDLE_Instance( gpi->instance );
-
- x_ppem = ins->metrics.x_ppem;
- y_ppem = ins->metrics.y_ppem;
- x_scale = TT_MulDiv( 0x10000,
- ins->metrics.x_scale1,
- ins->metrics.x_scale2 );
- y_scale = TT_MulDiv( 0x10000,
- ins->metrics.y_scale1,
- ins->metrics.y_scale2 );
-
- switch ( an->PosFormat )
- {
- case 0:
- /* The special case of an empty AnchorTable */
-
- return TTO_Err_Not_Covered;
-
- case 1:
- *x_value = x_scale * an->af.af1.XCoordinate / 0x10000;
- *y_value = y_scale * an->af.af1.YCoordinate / 0x10000;
- break;
-
- case 2:
- /* glyphs must be scaled */
-
- load_flags = gpi->load_flags | TTLOAD_SCALE_GLYPH;
-
- /* we use the glyph contour point only if gpi->glyph.z is not NULL */
-
- if ( gpi->glyph.z )
- {
- error = (gpos->gfunc)( gpi->instance, gpi->glyph,
- glyph_index, load_flags );
- if ( error )
- return error;
-
- glyph = HANDLE_Glyph( gpi->glyph );
- ap = an->af.af2.AnchorPoint;
-
- /* if outline.n_points is set to zero by gfunc(), we use the
- design coordinate value pair. This can happen e.g. for
- sbit glyphs */
-
- if ( !glyph->outline.n_points )
- goto no_contour_point;
-
- if ( ap >= glyph->outline.n_points )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- *x_value = glyph->outline.points[ap].x;
- *y_value = glyph->outline.points[ap].y;
- }
- else
- {
- no_contour_point:
- *x_value = x_scale * an->af.af3.XCoordinate / 0x10000;
- *y_value = y_scale * an->af.af3.YCoordinate / 0x10000;
- }
- break;
-
- case 3:
- /* we use the device tables only if gpi->glyph.z is not NULL */
-
- if ( gpi->glyph.z )
- {
- Get_Device( &an->af.af3.XDeviceTable, x_ppem, &pixel_value );
- *x_value = pixel_value << 6;
- Get_Device( &an->af.af3.YDeviceTable, y_ppem, &pixel_value );
- *y_value = pixel_value << 6;
- }
- else
- *x_value = *y_value = 0;
-
- *x_value += x_scale * an->af.af3.XCoordinate / 0x10000;
- *y_value += y_scale * an->af.af3.YCoordinate / 0x10000;
- break;
-
- case 4:
- error = (gpos->mmfunc)( gpi->instance, an->af.af4.XIdAnchor,
- x_value, gpos->data );
- if ( error )
- return error;
-
- error = (gpos->mmfunc)( gpi->instance, an->af.af4.YIdAnchor,
- y_value, gpos->data );
- if ( error )
- return error;
- break;
- }
-
- return error;
- }
-
-
- /* MarkArray */
-
- static TT_Error Load_MarkArray ( TTO_MarkArray* ma,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_MarkRecord* mr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = ma->MarkCount = GET_UShort();
-
- FORGET_Frame();
-
- ma->MarkRecord = NULL;
-
- if ( ALLOC_ARRAY( ma->MarkRecord, count, TTO_MarkRecord ) )
- return error;
-
- mr = ma->MarkRecord;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 4L ) )
- goto Fail;
-
- mr[n].Class = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Anchor( &mr[n].MarkAnchor, input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_Anchor( &mr[n].MarkAnchor );
-
- FREE( mr );
- return error;
- }
-
-
- static void Free_MarkArray( TTO_MarkArray* ma )
- {
- UShort n, count;
-
- TTO_MarkRecord* mr;
-
-
- if ( ma->MarkRecord )
- {
- count = ma->MarkCount;
- mr = ma->MarkRecord;
-
- for ( n = 0; n < count; n++ )
- Free_Anchor( &mr[n].MarkAnchor );
-
- FREE( mr );
- }
- }
-
-
- /* LookupType 1 */
-
- /* SinglePosFormat1 */
- /* SinglePosFormat2 */
-
- TT_Error Load_SinglePos( TTO_SinglePos* sp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count, format;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ValueRecord* vr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 6L ) )
- return error;
-
- sp->PosFormat = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- format = sp->ValueFormat = GET_UShort();
-
- FORGET_Frame();
-
- if ( !format )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &sp->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- switch ( sp->PosFormat )
- {
- case 1:
- error = Load_ValueRecord( &sp->spf.spf1.Value, format,
- base_offset, input );
- if ( error )
- goto Fail2;
- break;
-
- case 2:
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = sp->spf.spf2.ValueCount = GET_UShort();
-
- FORGET_Frame();
-
- sp->spf.spf2.Value = NULL;
-
- if ( ALLOC_ARRAY( sp->spf.spf2.Value, count, TTO_ValueRecord ) )
- goto Fail2;
-
- vr = sp->spf.spf2.Value;
-
- for ( n = 0; n < count; n++ )
- {
- error = Load_ValueRecord( &vr[n], format, base_offset, input );
- if ( error )
- goto Fail1;
- }
- break;
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_ValueRecord( &vr[n], format );
-
- FREE( vr );
-
- Fail2:
- Free_Coverage( &sp->Coverage );
- return error;
- }
-
-
- void Free_SinglePos( TTO_SinglePos* sp )
- {
- UShort n, count, format;
-
- TTO_ValueRecord* v;
-
-
- format = sp->ValueFormat;
-
- switch ( sp->PosFormat )
- {
- case 1:
- Free_ValueRecord( &sp->spf.spf1.Value, format );
- break;
-
- case 2:
- if ( sp->spf.spf2.Value )
- {
- count = sp->spf.spf2.ValueCount;
- v = sp->spf.spf2.Value;
-
- for ( n = 0; n < count; n++ )
- Free_ValueRecord( &v[n], format );
-
- FREE( v );
- }
- break;
- }
-
- Free_Coverage( &sp->Coverage );
- }
-
-
- static TT_Error Lookup_SinglePos( GPOS_Instance* gpi,
- TTO_SinglePos* sp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length )
- {
- UShort index, property;
- TT_Error error;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- return TTO_Err_Not_Covered;
-
- if ( CHECK_Property( gpos->gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &sp->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- switch ( sp->PosFormat )
- {
- case 1:
- error = Get_ValueRecord( gpi, &sp->spf.spf1.Value,
- sp->ValueFormat, &out[in->pos] );
- if ( error )
- return error;
- break;
-
- case 2:
- if ( index >= sp->spf.spf2.ValueCount )
- return TTO_Err_Invalid_GPOS_SubTable;
- error = Get_ValueRecord( gpi, &sp->spf.spf2.Value[index],
- sp->ValueFormat, &out[in->pos] );
- if ( error )
- return error;
- break;
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable;
- }
-
- (in->pos)++;
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 2 */
-
- /* PairSet */
-
- static TT_Error Load_PairSet ( TTO_PairSet* ps,
- UShort format1,
- UShort format2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong base_offset;
-
- TTO_PairValueRecord* pvr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = ps->PairValueCount = GET_UShort();
-
- FORGET_Frame();
-
- ps->PairValueRecord = NULL;
-
- if ( ALLOC_ARRAY( ps->PairValueRecord, count, TTO_PairValueRecord ) )
- return error;
-
- pvr = ps->PairValueRecord;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- pvr[n].SecondGlyph = GET_UShort();
-
- FORGET_Frame();
-
- if ( format1 )
- {
- error = Load_ValueRecord( &pvr[n].Value1, format1,
- base_offset, input );
- if ( error )
- goto Fail;
- }
- if ( format2 )
- {
- error = Load_ValueRecord( &pvr[n].Value2, format2,
- base_offset, input );
- if ( error )
- goto Fail;
- }
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- {
- if ( format1 )
- Free_ValueRecord( &pvr[n].Value1, format1 );
- if ( format2 )
- Free_ValueRecord( &pvr[n].Value2, format2 );
- }
-
- FREE( pvr );
- return error;
- }
-
-
- static void Free_PairSet( TTO_PairSet* ps,
- UShort format1,
- UShort format2 )
- {
- UShort n, count;
-
- TTO_PairValueRecord* pvr;
-
-
- if ( ps->PairValueRecord )
- {
- count = ps->PairValueCount;
- pvr = ps->PairValueRecord;
-
- for ( n = 0; n < count; n++ )
- {
- if ( format1 )
- Free_ValueRecord( &pvr[n].Value1, format1 );
- if ( format2 )
- Free_ValueRecord( &pvr[n].Value2, format2 );
- }
-
- FREE( pvr );
- }
- }
-
-
- /* PairPosFormat1 */
-
- static TT_Error Load_PairPos1( TTO_PairPosFormat1* ppf1,
- UShort format1,
- UShort format2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_PairSet* ps;
-
-
- base_offset = FILE_Pos() - 8L;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = ppf1->PairSetCount = GET_UShort();
-
- FORGET_Frame();
-
- ppf1->PairSet = NULL;
-
- if ( ALLOC_ARRAY( ppf1->PairSet, count, TTO_PairSet ) )
- goto Fail;
-
- ps = ppf1->PairSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_PairSet( &ps[n], format1,
- format2, input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_PairSet( &ps[n], format1, format2 );
-
- FREE( ps );
- return error;
- }
-
-
- static void Free_PairPos1( TTO_PairPosFormat1* ppf1,
- UShort format1,
- UShort format2 )
- {
- UShort n, count;
-
- TTO_PairSet* ps;
-
-
- if ( ppf1->PairSet )
- {
- count = ppf1->PairSetCount;
- ps = ppf1->PairSet;
-
- for ( n = 0; n < count; n++ )
- Free_PairSet( &ps[n], format1, format2 );
-
- FREE( ps );
- }
- }
-
-
- /* PairPosFormat2 */
-
- static TT_Error Load_PairPos2( TTO_PairPosFormat2* ppf2,
- UShort format1,
- UShort format2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort m, n, count1, count2;
- ULong cur_offset, new_offset1, new_offset2, base_offset;
-
- TTO_Class1Record* c1r;
- TTO_Class2Record* c2r;
-
-
- base_offset = FILE_Pos() - 8L;
-
- if ( ACCESS_Frame( 8L ) )
- return error;
-
- new_offset1 = GET_UShort() + base_offset;
- new_offset2 = GET_UShort() + base_offset;
-
- /* `Class1Count' and `Class2Count' are the upper limits for class
- values, thus we read it now to make additional safety checks. */
-
- count1 = ppf2->Class1Count = GET_UShort();
- count2 = ppf2->Class2Count = GET_UShort();
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset1 ) ||
- ( error = Load_ClassDefinition( &ppf2->ClassDef1, count1,
- input ) ) != TT_Err_Ok )
- return error;
- if ( FILE_Seek( new_offset2 ) ||
- ( error = Load_ClassDefinition( &ppf2->ClassDef2, count2,
- input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
-
- ppf2->Class1Record = NULL;
-
- if ( ALLOC_ARRAY( ppf2->Class1Record, count1, TTO_Class1Record ) )
- goto Fail1;
-
- c1r = ppf2->Class1Record;
-
- for ( m = 0; m < count1; m++ )
- {
- c1r[m].Class2Record = NULL;
-
- if ( ALLOC_ARRAY( c1r[m].Class2Record, count2, TTO_Class2Record ) )
- goto Fail1;
-
- c2r = c1r[m].Class2Record;
-
- for ( n = 0; n < count2; n++ )
- {
- if ( format1 )
- {
- error = Load_ValueRecord( &c2r[n].Value1, format1,
- base_offset, input );
- if ( error )
- goto Fail1;
- }
- if ( format2 )
- {
- error = Load_ValueRecord( &c2r[n].Value2, format2,
- base_offset, input );
- if ( error )
- goto Fail1;
- }
- }
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( m = 0; m < count1; m++ )
- {
- c2r = c1r[m].Class2Record;
-
- for ( n = 0; n < count2; n++ )
- {
- if ( format1 )
- Free_ValueRecord( &c2r[n].Value1, format1 );
- if ( format2 )
- Free_ValueRecord( &c2r[n].Value2, format2 );
- }
-
- FREE( c2r );
- }
-
- FREE( c1r );
-
- Free_ClassDefinition( &ppf2->ClassDef2 );
-
- Fail2:
- Free_ClassDefinition( &ppf2->ClassDef1 );
- return error;
- }
-
-
- static void Free_PairPos2( TTO_PairPosFormat2* ppf2,
- UShort format1,
- UShort format2 )
- {
- UShort m, n, count1, count2;
-
- TTO_Class1Record* c1r;
- TTO_Class2Record* c2r;
-
-
- if ( ppf2->Class1Record )
- {
- c1r = ppf2->Class1Record;
- count1 = ppf2->Class1Count;
- count2 = ppf2->Class2Count;
-
- for ( m = 0; m < count1; m++ )
- {
- c2r = c1r[m].Class2Record;
-
- for ( n = 0; n < count2; n++ )
- {
- if ( format1 )
- Free_ValueRecord( &c2r[n].Value1, format1 );
- if ( format2 )
- Free_ValueRecord( &c2r[n].Value2, format2 );
- }
-
- FREE( c2r );
- }
-
- FREE( c1r );
-
- Free_ClassDefinition( &ppf2->ClassDef2 );
- Free_ClassDefinition( &ppf2->ClassDef1 );
- }
- }
-
-
- TT_Error Load_PairPos( TTO_PairPos* pp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort format1, format2;
- ULong cur_offset, new_offset, base_offset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 8L ) )
- return error;
-
- pp->PosFormat = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- format1 = pp->ValueFormat1 = GET_UShort();
- format2 = pp->ValueFormat2 = GET_UShort();
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &pp->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- switch ( pp->PosFormat )
- {
- case 1:
- error = Load_PairPos1( &pp->ppf.ppf1, format1, format2, input );
- if ( error )
- goto Fail;
- break;
-
- case 2:
- error = Load_PairPos2( &pp->ppf.ppf2, format1, format2, input );
- if ( error )
- goto Fail;
- break;
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok;
-
- Fail:
- Free_Coverage( &pp->Coverage );
- return error;
- }
-
-
- void Free_PairPos( TTO_PairPos* pp )
- {
- UShort format1, format2;
-
-
- format1 = pp->ValueFormat1;
- format2 = pp->ValueFormat2;
-
- switch ( pp->PosFormat )
- {
- case 1:
- Free_PairPos1( &pp->ppf.ppf1, format1, format2 );
- break;
-
- case 2:
- Free_PairPos2( &pp->ppf.ppf2, format1, format2 );
- break;
- }
-
- Free_Coverage( &pp->Coverage );
- }
-
-
- static TT_Error Lookup_PairPos1( GPOS_Instance* gpi,
- TTO_PairPosFormat1* ppf1,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort first_pos,
- UShort index,
- UShort format1,
- UShort format2 )
- {
- TT_Error error;
- UShort numpvr, glyph2;
-
- TTO_PairValueRecord* pvr;
-
-
- if ( index >= ppf1->PairSetCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- pvr = ppf1->PairSet[index].PairValueRecord;
- if ( !pvr )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- glyph2 = in->string[in->pos];
-
- for ( numpvr = ppf1->PairSet[index].PairValueCount;
- numpvr;
- numpvr--, pvr++ )
- {
- if ( glyph2 == pvr->SecondGlyph )
- {
- error = Get_ValueRecord( gpi, &pvr->Value1, format1,
- &out[first_pos] );
- if ( error )
- return error;
- return Get_ValueRecord( gpi, &pvr->Value2, format2,
- &out[in->pos] );
- }
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- static TT_Error Lookup_PairPos2( GPOS_Instance* gpi,
- TTO_PairPosFormat2* ppf2,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort first_pos,
- UShort format1,
- UShort format2 )
- {
- TT_Error error;
- UShort cl1, cl2;
-
- TTO_Class1Record* c1r;
- TTO_Class2Record* c2r;
-
-
- error = Get_Class( &ppf2->ClassDef1, in->string[first_pos],
- &cl1, NULL );
- if ( error )
- return error;
- error = Get_Class( &ppf2->ClassDef2, in->string[in->pos],
- &cl2, NULL );
- if ( error )
- return error;
-
- c1r = &ppf2->Class1Record[cl1];
- if ( !c1r )
- return TTO_Err_Invalid_GPOS_SubTable;
- c2r = &c1r->Class2Record[cl2];
-
- error = Get_ValueRecord( gpi, &c2r->Value1, format1, &out[first_pos] );
- if ( error )
- return error;
- return Get_ValueRecord( gpi, &c2r->Value2, format2, &out[in->pos] );
- }
-
-
- static TT_Error Lookup_PairPos( GPOS_Instance* gpi,
- TTO_PairPos* pp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length )
- {
- TT_Error error;
- UShort index, property, first_pos;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
-
- if ( in->pos >= in->length )
- return TTO_Err_Not_Covered; /* Not enough glyphs in input */
-
- if ( context_length != 0xFFFF && context_length < 2 )
- return TTO_Err_Not_Covered;
-
- if ( CHECK_Property( gpos->gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &pp->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- /* second glyph */
-
- first_pos = in->pos;
- (in->pos)++;
-
- while ( CHECK_Property( gpos->gdef, in->string[in->pos],
- flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos < in->length )
- (in->pos)++;
- else
- break;
- }
-
- switch ( pp->PosFormat )
- {
- case 1:
- error = Lookup_PairPos1( gpi, &pp->ppf.ppf1, in, out,
- first_pos, index,
- pp->ValueFormat1, pp->ValueFormat2 );
- break;
-
- case 2:
- error = Lookup_PairPos2( gpi, &pp->ppf.ppf2, in, out, first_pos,
- pp->ValueFormat1, pp->ValueFormat2 );
- break;
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- /* adjusting the `next' glyph */
-
- if ( pp->ValueFormat2 )
- (in->pos)++;
-
- return error;
- }
-
-
- /* LookupType 3 */
-
- /* CursivePosFormat1 */
-
- TT_Error Load_CursivePos( TTO_CursivePos* cp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_EntryExitRecord* eer;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- cp->PosFormat = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &cp->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = cp->EntryExitCount = GET_UShort();
-
- FORGET_Frame();
-
- cp->EntryExitRecord = NULL;
-
- if ( ALLOC_ARRAY( cp->EntryExitRecord, count, TTO_EntryExitRecord ) )
- goto Fail2;
-
- eer = cp->EntryExitRecord;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Anchor( &eer[n].EntryAnchor,
- input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- eer[n].EntryAnchor.PosFormat = 0;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Anchor( &eer[n].ExitAnchor,
- input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- eer[n].ExitAnchor.PosFormat = 0;
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- {
- Free_Anchor( &eer[n].EntryAnchor );
- Free_Anchor( &eer[n].ExitAnchor );
- }
-
- FREE( eer );
-
- Fail2:
- Free_Coverage( &cp->Coverage );
- return error;
- }
-
-
- void Free_CursivePos( TTO_CursivePos* cp )
- {
- UShort n, count;
-
- TTO_EntryExitRecord* eer;
-
-
- if ( cp->EntryExitRecord )
- {
- count = cp->EntryExitCount;
- eer = cp->EntryExitRecord;
-
- for ( n = 0; n < count; n++ )
- {
- Free_Anchor( &eer[n].EntryAnchor );
- Free_Anchor( &eer[n].ExitAnchor );
- }
-
- FREE( eer );
- }
-
- Free_Coverage( &cp->Coverage );
- }
-
-
- static TT_Error Lookup_CursivePos( GPOS_Instance* gpi,
- TTO_CursivePos* cp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length )
- {
- UShort index, property;
- TT_Error error;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_EntryExitRecord* eer;
- TT_Pos entry_x, entry_y;
- TT_Pos exit_x, exit_y;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- {
- gpi->last = 0xFFFF;
- return TTO_Err_Not_Covered;
- }
-
- /* Glyphs not having the right GDEF properties will be ignored, i.e.,
- gpi->last won't be reset (contrary to user defined properties). */
-
- if ( CHECK_Property( gpos->gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- /* We don't handle mark glyphs here. According to Andrei, this isn't
- possible, but who knows... */
-
- if ( property == MARK_GLYPH )
- {
- gpi->last = 0xFFFF;
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &cp->Coverage, in->string[in->pos], &index );
- if ( error )
- {
- gpi->last = 0xFFFF;
- return error;
- }
-
- if ( index >= cp->EntryExitCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- eer = &cp->EntryExitRecord[index];
-
- /* Now comes the messiest part of the whole OpenType
- specification. At first glance, cursive connections seem easy
- to understand, but there are pitfalls! The reason is, that
- the specs don't mention how to compute the advance values
- resp. glyph offsets. I was told it would be an omission, to
- be fixed in the next OpenType version... Again many thanks to
- Andrei Burago <andreib@microsoft.com> for clarifications.
-
- Consider the following example:
-
- | xadv1 |
- +---------+
- | |
- +-----+--+ 1 |
- | | .| |
- | 0+--+------+
- | 2 |
- | |
- 0+--------+
- | xadv2 |
-
- glyph1: advance width = 12
- anchor point = (3,1)
-
- glyph2: advance width = 11
- anchor point = (9,4)
-
- LSB is 1 for both glyphs (so the boxes drawn above are glyph
- bboxes). Writing direction is R2L; `0' denotes the glyph's
- coordinate origin.
-
- Now the surprising part: The advance width of the *left* glyph
- (resp. of the *bottom* glyph) will be modified, no matter
- whether the writing direction is L2R or R2L (resp. T2B or
- B2T)! This assymetry is caused by the fact that the glyph's
- coordinate origin is always the lower left corner for all
- writing directions.
-
- Continuing the above example, we can compute the new
- (horizontal) advance width of glyph2 as
-
- 9 - 3 = 6 ,
-
- and the new vertical offset of glyph2 as
-
- 1 - 4 = -3 .
-
-
- Vertical writing direction is far more complicated:
-
- a) Assuming that we recompute the advance height of the lower glyph:
-
- --
- +---------+
- -- | |
- +-----+--+ 1 | yadv1
- | | .| |
- yadv2 | 0+--+------+ -- BSB1 --
- | 2 | -- -- y_offset
- | |
- BSB2 -- 0+--------+ --
- -- --
-
- glyph1: advance height = 6
- anchor point = (3,1)
-
- glyph2: advance height = 7
- anchor point = (9,4)
-
- TSB is 1 for both glyphs; writing direction is T2B.
-
-
- BSB1 = yadv1 - (TSB1 + ymax1)
- BSB2 = yadv2 - (TSB2 + ymax2)
- y_offset = y2 - y1
-
- vertical advance width of glyph2
- = y_offset + BSB2 - BSB1
- = (y2 - y1) + (yadv2 - (TSB2 + ymax2)) - (yadv1 - (TSB1 + ymax1))
- = y2 - y1 + yadv2 - TSB2 - ymax2 - (yadv1 - TSB1 - ymax1)
- = y2 - y1 + yadv2 - TSB2 - ymax2 - yadv1 + TSB1 + ymax1
-
-
- b) Assuming that we recompute the advance height of the upper glyph:
-
- -- --
- +---------+ -- TSB1
- -- -- | |
- TSB2 -- +-----+--+ 1 | yadv1 ymax1
- | | .| |
- yadv2 | 0+--+------+ -- --
- ymax2 | 2 | -- y_offset
- | |
- -- 0+--------+ --
- --
-
- glyph1: advance height = 6
- anchor point = (3,1)
-
- glyph2: advance height = 7
- anchor point = (9,4)
-
- TSB is 1 for both glyphs; writing direction is T2B.
-
- y_offset = y2 - y1
-
- vertical advance width of glyph2
- = TSB1 + ymax1 + y_offset - (TSB2 + ymax2)
- = TSB1 + ymax1 + y2 - y1 - TSB2 - ymax2
-
-
- Comparing a) with b) shows that b) is easier to compute. I'll wait
- for a reply from Andrei to see what should really be implemented...
-
- Since horizontal advance widths or vertical advance heights
- can be used alone but not together, no ambiguity occurs. */
-
- if ( gpi->last == 0xFFFF )
- goto end;
-
- /* Get_Anchor() returns TTO_Err_Not_Covered if there is no anchor
- table. */
-
- error = Get_Anchor( gpi, &eer->EntryAnchor, in->string[in->pos],
- &entry_x, &entry_y );
- if ( error == TTO_Err_Not_Covered )
- goto end;
- if ( error )
- return error;
-
- if ( gpi->r2l )
- {
- out[in->pos].x_advance = entry_x - gpi->anchor_x;
- out[in->pos].new_advance = TRUE;
- }
- else
- {
- out[gpi->last].x_advance = gpi->anchor_x - entry_x;
- out[gpi->last].new_advance = TRUE;
- }
-
- out[in->pos].y_pos = gpi->anchor_y - entry_y + out[gpi->last].y_pos;
-
- end:
- error = Get_Anchor( gpi, &eer->ExitAnchor, in->string[in->pos],
- &exit_x, &exit_y );
- if ( error == TTO_Err_Not_Covered )
- gpi->last = 0xFFFF;
- else
- {
- gpi->last = in->pos;
- gpi->anchor_x = exit_x;
- gpi->anchor_y = exit_y;
- }
- if ( error )
- return error;
-
- (in->pos)++;
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 4 */
-
- /* BaseArray */
-
- static TT_Error Load_BaseArray( TTO_BaseArray* ba,
- UShort num_classes,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort m, n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_BaseRecord* br;
- TTO_Anchor* ban;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = ba->BaseCount = GET_UShort();
-
- FORGET_Frame();
-
- ba->BaseRecord = NULL;
-
- if ( ALLOC_ARRAY( ba->BaseRecord, count, TTO_BaseRecord ) )
- return error;
-
- br = ba->BaseRecord;
-
- for ( m = 0; m < count; m++ )
- {
- br[m].BaseAnchor = NULL;
-
- if ( ALLOC_ARRAY( br[m].BaseAnchor, num_classes, TTO_Anchor ) )
- goto Fail;
-
- ban = br[m].BaseAnchor;
-
- for ( n = 0; n < num_classes; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Anchor( &ban[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( m = 0; m < count; m++ )
- {
- ban = br[m].BaseAnchor;
-
- for ( n = 0; n < num_classes; n++ )
- Free_Anchor( &ban[n] );
-
- FREE( ban );
- }
-
- FREE( br );
- return error;
- }
-
-
- static void Free_BaseArray( TTO_BaseArray* ba,
- UShort num_classes )
- {
- UShort m, n, count;
-
- TTO_BaseRecord* br;
- TTO_Anchor* ban;
-
-
- if ( ba->BaseRecord )
- {
- count = ba->BaseCount;
- br = ba->BaseRecord;
-
- for ( m = 0; m < count; m++ )
- {
- ban = br[m].BaseAnchor;
-
- for ( n = 0; n < num_classes; n++ )
- Free_Anchor( &ban[n] );
-
- FREE( ban );
- }
-
- FREE( br );
- }
- }
-
-
- /* MarkBasePosFormat1 */
-
- TT_Error Load_MarkBasePos( TTO_MarkBasePos* mbp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- ULong cur_offset, new_offset, base_offset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- mbp->PosFormat = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &mbp->MarkCoverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &mbp->BaseCoverage, input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 4L ) )
- goto Fail2;
-
- mbp->ClassCount = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_MarkArray( &mbp->MarkArray, input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_BaseArray( &mbp->BaseArray, mbp->ClassCount,
- input ) ) != TT_Err_Ok )
- goto Fail1;
-
- return TT_Err_Ok;
-
- Fail1:
- Free_MarkArray( &mbp->MarkArray );
-
- Fail2:
- Free_Coverage( &mbp->BaseCoverage );
-
- Fail3:
- Free_Coverage( &mbp->MarkCoverage );
- return error;
- }
-
-
- void Free_MarkBasePos( TTO_MarkBasePos* mbp )
- {
- Free_BaseArray( &mbp->BaseArray, mbp->ClassCount );
- Free_MarkArray( &mbp->MarkArray );
- Free_Coverage( &mbp->BaseCoverage );
- Free_Coverage( &mbp->MarkCoverage );
- }
-
-
- static TT_Error Lookup_MarkBasePos( GPOS_Instance* gpi,
- TTO_MarkBasePos* mbp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length )
- {
- UShort i, j, mark_index, base_index, property, class;
- TT_Pos x_mark_value, y_mark_value, x_base_value, y_base_value;
- TT_Error error;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_MarkArray* ma;
- TTO_BaseArray* ba;
- TTO_BaseRecord* br;
- TTO_Anchor* mark_anchor;
- TTO_Anchor* base_anchor;
-
- TTO_GPOS_Data* o;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- return TTO_Err_Not_Covered;
-
- if ( flags & IGNORE_BASE_GLYPHS )
- return TTO_Err_Not_Covered;
-
- if ( CHECK_Property( gpos->gdef, in->string[in->pos],
- flags, &property ) )
- return error;
-
- error = Coverage_Index( &mbp->MarkCoverage, in->string[in->pos],
- &mark_index );
- if ( error )
- return error;
-
- /* now we search backwards for a base glyph */
-
- i = 1;
- j = in->pos - 1;
-
- while ( i <= in->pos )
- {
- error = TT_GDEF_Get_Glyph_Property( gpos->gdef, in->string[j],
- &property );
- if ( error )
- return error;
-
- if ( property != TTO_MARK )
- break;
-
- i++;
- j--;
- }
-
- if ( property != TTO_BASE_GLYPH )
- return TTO_Err_Not_Covered;
-
- if ( i > in->pos )
- return TTO_Err_Not_Covered;
-
- error = Coverage_Index( &mbp->BaseCoverage, in->string[j],
- &base_index );
- if ( error )
- return error;
-
- ma = &mbp->MarkArray;
-
- if ( mark_index >= ma->MarkCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- class = ma->MarkRecord[mark_index].Class;
- mark_anchor = &ma->MarkRecord[mark_index].MarkAnchor;
-
- if ( class >= mbp->ClassCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- ba = &mbp->BaseArray;
-
- if ( base_index >= ba->BaseCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- br = &ba->BaseRecord[base_index];
- base_anchor = &br->BaseAnchor[class];
-
- error = Get_Anchor( gpi, mark_anchor, in->string[in->pos],
- &x_mark_value, &y_mark_value );
- if ( error )
- return error;
- error = Get_Anchor( gpi, base_anchor, in->string[j],
- &x_base_value, &y_base_value );
- if ( error )
- return error;
-
- /* anchor points are not cumulative */
-
- o = &out[in->pos];
-
- o->x_pos = x_base_value - x_mark_value;
- o->y_pos = y_base_value - y_mark_value;
- o->x_advance = 0;
- o->y_advance = 0;
- o->back = i;
-
- (in->pos)++;
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 5 */
-
- /* LigatureAttach */
-
- static TT_Error Load_LigatureAttach( TTO_LigatureAttach* lat,
- UShort num_classes,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort m, n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ComponentRecord* cr;
- TTO_Anchor* lan;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = lat->ComponentCount = GET_UShort();
-
- FORGET_Frame();
-
- lat->ComponentRecord = NULL;
-
- if ( ALLOC_ARRAY( lat->ComponentRecord, count, TTO_ComponentRecord ) )
- return error;
-
- cr = lat->ComponentRecord;
-
- for ( m = 0; m < count; m++ )
- {
- cr[m].LigatureAnchor = NULL;
-
- if ( ALLOC_ARRAY( cr[m].LigatureAnchor, num_classes, TTO_Anchor ) )
- goto Fail;
-
- lan = cr[m].LigatureAnchor;
-
- for ( n = 0; n < num_classes; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( new_offset )
- {
- new_offset += base_offset;
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Anchor( &lan[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
- else
- lan[n].PosFormat = 0;
- }
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( m = 0; m < count; m++ )
- {
- lan = cr[m].LigatureAnchor;
-
- for ( n = 0; n < num_classes; n++ )
- Free_Anchor( &lan[n] );
-
- FREE( lan );
- }
-
- FREE( cr );
- return error;
- }
-
-
- static void Free_LigatureAttach( TTO_LigatureAttach* lat,
- UShort num_classes )
- {
- UShort m, n, count;
-
- TTO_ComponentRecord* cr;
- TTO_Anchor* lan;
-
-
- if ( lat->ComponentRecord )
- {
- count = lat->ComponentCount;
- cr = lat->ComponentRecord;
-
- for ( m = 0; m < count; m++ )
- {
- lan = cr[m].LigatureAnchor;
-
- for ( n = 0; n < num_classes; n++ )
- Free_Anchor( &lan[n] );
-
- FREE( lan );
- }
-
- FREE( cr );
- }
- }
-
-
- /* LigatureArray */
-
- static TT_Error Load_LigatureArray( TTO_LigatureArray* la,
- UShort num_classes,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_LigatureAttach* lat;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = la->LigatureCount = GET_UShort();
-
- FORGET_Frame();
-
- la->LigatureAttach = NULL;
-
- if ( ALLOC_ARRAY( la->LigatureAttach, count, TTO_LigatureAttach ) )
- return error;
-
- lat = la->LigatureAttach;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LigatureAttach( &lat[n], num_classes,
- input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_LigatureAttach( &lat[n], num_classes );
-
- FREE( lat );
- return error;
- }
-
-
- static void Free_LigatureArray( TTO_LigatureArray* la,
- UShort num_classes )
- {
- UShort n, count;
-
- TTO_LigatureAttach* lat;
-
-
- if ( la->LigatureAttach )
- {
- count = la->LigatureCount;
- lat = la->LigatureAttach;
-
- for ( n = 0; n < count; n++ )
- Free_LigatureAttach( &lat[n], num_classes );
-
- FREE( lat );
- }
- }
-
-
- /* MarkLigPosFormat1 */
-
- TT_Error Load_MarkLigPos( TTO_MarkLigPos* mlp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- ULong cur_offset, new_offset, base_offset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- mlp->PosFormat = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &mlp->MarkCoverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &mlp->LigatureCoverage,
- input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 4L ) )
- goto Fail2;
-
- mlp->ClassCount = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_MarkArray( &mlp->MarkArray, input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LigatureArray( &mlp->LigatureArray, mlp->ClassCount,
- input ) ) != TT_Err_Ok )
- goto Fail1;
-
- return TT_Err_Ok;
-
- Fail1:
- Free_MarkArray( &mlp->MarkArray );
-
- Fail2:
- Free_Coverage( &mlp->LigatureCoverage );
-
- Fail3:
- Free_Coverage( &mlp->MarkCoverage );
- return error;
- }
-
-
- void Free_MarkLigPos( TTO_MarkLigPos* mlp )
- {
- Free_LigatureArray( &mlp->LigatureArray, mlp->ClassCount );
- Free_MarkArray( &mlp->MarkArray );
- Free_Coverage( &mlp->LigatureCoverage );
- Free_Coverage( &mlp->MarkCoverage );
- }
-
-
- static TT_Error Lookup_MarkLigPos( GPOS_Instance* gpi,
- TTO_MarkLigPos* mlp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length )
- {
- UShort i, j, mark_index, lig_index, property, class;
- UShort mark_glyph;
- TT_Pos x_mark_value, y_mark_value, x_lig_value, y_lig_value;
- TT_Error error;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_MarkArray* ma;
- TTO_LigatureArray* la;
- TTO_LigatureAttach* lat;
- TTO_ComponentRecord* cr;
- UShort comp_index;
- TTO_Anchor* mark_anchor;
- TTO_Anchor* lig_anchor;
-
- TTO_GPOS_Data* o;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- return TTO_Err_Not_Covered;
-
- if ( flags & IGNORE_LIGATURES )
- return TTO_Err_Not_Covered;
-
- mark_glyph = in->string[in->pos];
-
- if ( CHECK_Property( gpos->gdef, mark_glyph, flags, &property ) )
- return error;
-
- error = Coverage_Index( &mlp->MarkCoverage, mark_glyph, &mark_index );
- if ( error )
- return error;
-
- /* now we search backwards for a ligature */
-
- i = 1;
- j = in->pos - 1;
-
- while ( i <= in->pos )
- {
- error = TT_GDEF_Get_Glyph_Property( gpos->gdef, in->string[j],
- &property );
- if ( error )
- return error;
-
- if ( property != TTO_MARK )
- break;
-
- i++;
- j--;
- }
-
- if ( property != TTO_LIGATURE )
- return TTO_Err_Not_Covered;
-
- if ( i > in->pos )
- return TTO_Err_Not_Covered;
-
- error = Coverage_Index( &mlp->LigatureCoverage, in->string[j],
- &lig_index );
- if ( error )
- return error;
-
- ma = &mlp->MarkArray;
-
- if ( mark_index >= ma->MarkCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- class = ma->MarkRecord[mark_index].Class;
- mark_anchor = &ma->MarkRecord[mark_index].MarkAnchor;
-
- if ( class >= mlp->ClassCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- la = &mlp->LigatureArray;
-
- if ( lig_index >= la->LigatureCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- lat = &la->LigatureAttach[lig_index];
-
- /* We must now check whether the ligature ID of the current mark glyph
- is identical to the ligature ID of the found ligature. If yes, we
- can directly use the component index. If not, we attach the mark
- glyph to the last component of the ligature. */
-
- if ( in->ligIDs && in->components &&
- in->ligIDs[j] == in->ligIDs[in->pos] )
- {
- comp_index = in->components[in->pos];
- if ( comp_index >= lat->ComponentCount )
- return TTO_Err_Not_Covered;
- }
- else
- comp_index = lat->ComponentCount - 1;
-
- cr = &lat->ComponentRecord[comp_index];
- lig_anchor = &cr->LigatureAnchor[class];
-
- error = Get_Anchor( gpi, mark_anchor, in->string[in->pos],
- &x_mark_value, &y_mark_value );
- if ( error )
- return error;
- error = Get_Anchor( gpi, lig_anchor, in->string[j],
- &x_lig_value, &y_lig_value );
- if ( error )
- return error;
-
- /* anchor points are not cumulative */
-
- o = &out[in->pos];
-
- o->x_pos = x_lig_value - x_mark_value;
- o->y_pos = y_lig_value - y_mark_value;
- o->x_advance = 0;
- o->y_advance = 0;
- o->back = i;
-
- (in->pos)++;
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 6 */
-
- /* Mark2Array */
-
- static TT_Error Load_Mark2Array( TTO_Mark2Array* m2a,
- UShort num_classes,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort m, n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Mark2Record* m2r;
- TTO_Anchor* m2an;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = m2a->Mark2Count = GET_UShort();
-
- FORGET_Frame();
-
- m2a->Mark2Record = NULL;
-
- if ( ALLOC_ARRAY( m2a->Mark2Record, count, TTO_Mark2Record ) )
- return error;
-
- m2r = m2a->Mark2Record;
-
- for ( m = 0; m < count; m++ )
- {
- m2r[m].Mark2Anchor = NULL;
-
- if ( ALLOC_ARRAY( m2r[m].Mark2Anchor, num_classes, TTO_Anchor ) )
- goto Fail;
-
- m2an = m2r[m].Mark2Anchor;
-
- for ( n = 0; n < num_classes; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Anchor( &m2an[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( m = 0; m < count; m++ )
- {
- m2an = m2r[m].Mark2Anchor;
-
- for ( n = 0; n < num_classes; n++ )
- Free_Anchor( &m2an[n] );
-
- FREE( m2an );
- }
-
- FREE( m2r );
- return error;
- }
-
-
- static void Free_Mark2Array( TTO_Mark2Array* m2a,
- UShort num_classes )
- {
- UShort m, n, count;
-
- TTO_Mark2Record* m2r;
- TTO_Anchor* m2an;
-
-
- if ( m2a->Mark2Record )
- {
- count = m2a->Mark2Count;
- m2r = m2a->Mark2Record;
-
- for ( m = 0; m < count; m++ )
- {
- m2an = m2r[m].Mark2Anchor;
-
- for ( n = 0; n < num_classes; n++ )
- Free_Anchor( &m2an[n] );
-
- FREE( m2an );
- }
-
- FREE( m2r );
- }
- }
-
-
- /* MarkMarkPosFormat1 */
-
- TT_Error Load_MarkMarkPos( TTO_MarkMarkPos* mmp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- ULong cur_offset, new_offset, base_offset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- mmp->PosFormat = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &mmp->Mark1Coverage,
- input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &mmp->Mark2Coverage,
- input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 4L ) )
- goto Fail2;
-
- mmp->ClassCount = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_MarkArray( &mmp->Mark1Array, input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Mark2Array( &mmp->Mark2Array, mmp->ClassCount,
- input ) ) != TT_Err_Ok )
- goto Fail1;
-
- return TT_Err_Ok;
-
- Fail1:
- Free_MarkArray( &mmp->Mark1Array );
-
- Fail2:
- Free_Coverage( &mmp->Mark2Coverage );
-
- Fail3:
- Free_Coverage( &mmp->Mark1Coverage );
- return error;
- }
-
-
- void Free_MarkMarkPos( TTO_MarkMarkPos* mmp )
- {
- Free_Mark2Array( &mmp->Mark2Array, mmp->ClassCount );
- Free_MarkArray( &mmp->Mark1Array );
- Free_Coverage( &mmp->Mark2Coverage );
- Free_Coverage( &mmp->Mark1Coverage );
- }
-
-
- static TT_Error Lookup_MarkMarkPos( GPOS_Instance* gpi,
- TTO_MarkMarkPos* mmp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length )
- {
- UShort j, mark1_index, mark2_index, property, class;
- TT_Pos x_mark1_value, y_mark1_value,
- x_mark2_value, y_mark2_value;
- TT_Error error;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_MarkArray* ma1;
- TTO_Mark2Array* ma2;
- TTO_Mark2Record* m2r;
- TTO_Anchor* mark1_anchor;
- TTO_Anchor* mark2_anchor;
-
- TTO_GPOS_Data* o;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- return TTO_Err_Not_Covered;
-
- if ( flags & IGNORE_MARKS )
- return TTO_Err_Not_Covered;
-
- if ( CHECK_Property( gpos->gdef, in->string[in->pos],
- flags, &property ) )
- return error;
-
- error = Coverage_Index( &mmp->Mark1Coverage, in->string[in->pos],
- &mark1_index );
- if ( error )
- return error;
-
- /* now we check the preceding glyph whether it is a suitable
- mark glyph */
-
- if ( in->pos == 0 )
- return TTO_Err_Not_Covered;
-
- j = in->pos - 1;
- error = TT_GDEF_Get_Glyph_Property( gpos->gdef, in->string[j],
- &property );
- if ( error )
- return error;
-
- if ( flags & IGNORE_SPECIAL_MARKS )
- {
- if ( property != (flags & 0xFF00) )
- return TTO_Err_Not_Covered;
- }
- else
- {
- if ( property != TTO_MARK )
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &mmp->Mark2Coverage, in->string[j],
- &mark2_index );
- if ( error )
- return error;
-
- ma1 = &mmp->Mark1Array;
-
- if ( mark1_index >= ma1->MarkCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- class = ma1->MarkRecord[mark1_index].Class;
- mark1_anchor = &ma1->MarkRecord[mark1_index].MarkAnchor;
-
- if ( class >= mmp->ClassCount )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- ma2 = &mmp->Mark2Array;
-
- if ( mark2_index >= ma2->Mark2Count )
- return TTO_Err_Invalid_GPOS_SubTable;
-
- m2r = &ma2->Mark2Record[mark2_index];
- mark2_anchor = &m2r->Mark2Anchor[class];
-
- error = Get_Anchor( gpi, mark1_anchor, in->string[in->pos],
- &x_mark1_value, &y_mark1_value );
- if ( error )
- return error;
- error = Get_Anchor( gpi, mark2_anchor, in->string[j],
- &x_mark2_value, &y_mark2_value );
- if ( error )
- return error;
-
- /* anchor points are not cumulative */
-
- o = &out[in->pos];
-
- o->x_pos = x_mark2_value - x_mark1_value;
- o->y_pos = y_mark2_value - y_mark1_value;
- o->x_advance = 0;
- o->y_advance = 0;
- o->back = 1;
-
- (in->pos)++;
-
- return TT_Err_Ok;
- }
-
-
- /* Do the actual positioning for a context positioning (either format
- 7 or 8). This is only called after we've determined that the input
- matches the subrule. */
-
- static TT_Error Do_ContextPos( GPOS_Instance* gpi,
- UShort GlyphCount,
- UShort PosCount,
- TTO_PosLookupRecord* pos,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- int nesting_level )
- {
- TT_Error error;
- UShort i, old_pos;
-
-
- i = 0;
-
- while ( i < GlyphCount )
- {
- if ( PosCount && i == pos->SequenceIndex )
- {
- old_pos = in->pos;
-
- /* Do a positioning */
-
- error = Do_Glyph_Lookup( gpi, pos->LookupListIndex, in, out,
- GlyphCount, nesting_level );
-
- if ( error )
- return error;
-
- pos++;
- PosCount--;
- i += in->pos - old_pos;
- }
- else
- {
- i++;
- (in->pos)++;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 7 */
-
- /* PosRule */
-
- static TT_Error Load_PosRule( TTO_PosRule* pr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* i;
-
- TTO_PosLookupRecord* plr;
-
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- pr->GlyphCount = GET_UShort();
- pr->PosCount = GET_UShort();
-
- FORGET_Frame();
-
- pr->Input = NULL;
-
- count = pr->GlyphCount - 1; /* only GlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( pr->Input, count, UShort ) )
- return error;
-
- i = pr->Input;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- i[n] = GET_UShort();
-
- FORGET_Frame();
-
- pr->PosLookupRecord = NULL;
-
- count = pr->PosCount;
-
- if ( ALLOC_ARRAY( pr->PosLookupRecord, count, TTO_PosLookupRecord ) )
- goto Fail2;
-
- plr = pr->PosLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- plr[n].SequenceIndex = GET_UShort();
- plr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( plr );
-
- Fail2:
- FREE( i );
- return error;
- }
-
-
- static void Free_PosRule( TTO_PosRule* pr )
- {
- FREE( pr->PosLookupRecord );
- FREE( pr->Input );
- }
-
-
- /* PosRuleSet */
-
- static TT_Error Load_PosRuleSet( TTO_PosRuleSet* prs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_PosRule* pr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = prs->PosRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- prs->PosRule = NULL;
-
- if ( ALLOC_ARRAY( prs->PosRule, count, TTO_PosRule ) )
- return error;
-
- pr = prs->PosRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_PosRule( &pr[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_PosRule( &pr[n] );
-
- FREE( pr );
- return error;
- }
-
-
- static void Free_PosRuleSet( TTO_PosRuleSet* prs )
- {
- UShort n, count;
-
- TTO_PosRule* pr;
-
-
- if ( prs->PosRule )
- {
- count = prs->PosRuleCount;
- pr = prs->PosRule;
-
- for ( n = 0; n < count; n++ )
- Free_PosRule( &pr[n] );
-
- FREE( pr );
- }
- }
-
-
- /* ContextPosFormat1 */
-
- static TT_Error Load_ContextPos1( TTO_ContextPosFormat1* cpf1,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_PosRuleSet* prs;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &cpf1->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = cpf1->PosRuleSetCount = GET_UShort();
-
- FORGET_Frame();
-
- cpf1->PosRuleSet = NULL;
-
- if ( ALLOC_ARRAY( cpf1->PosRuleSet, count, TTO_PosRuleSet ) )
- goto Fail2;
-
- prs = cpf1->PosRuleSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_PosRuleSet( &prs[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_PosRuleSet( &prs[n] );
-
- FREE( prs );
-
- Fail2:
- Free_Coverage( &cpf1->Coverage );
- return error;
- }
-
-
- static void Free_Context1( TTO_ContextPosFormat1* cpf1 )
- {
- UShort n, count;
-
- TTO_PosRuleSet* prs;
-
-
- if ( cpf1->PosRuleSet )
- {
- count = cpf1->PosRuleSetCount;
- prs = cpf1->PosRuleSet;
-
- for ( n = 0; n < count; n++ )
- Free_PosRuleSet( &prs[n] );
-
- FREE( prs );
- }
-
- Free_Coverage( &cpf1->Coverage );
- }
-
-
- /* PosClassRule */
-
- static TT_Error Load_PosClassRule( TTO_ContextPosFormat2* cpf2,
- TTO_PosClassRule* pcr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* c;
- TTO_PosLookupRecord* plr;
- Bool* d;
-
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- pcr->GlyphCount = GET_UShort();
- pcr->PosCount = GET_UShort();
-
- FORGET_Frame();
-
- if ( pcr->GlyphCount > cpf2->MaxContextLength )
- cpf2->MaxContextLength = pcr->GlyphCount;
-
- pcr->Class = NULL;
-
- count = pcr->GlyphCount - 1; /* only GlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( pcr->Class, count, UShort ) )
- return error;
-
- c = pcr->Class;
- d = cpf2->ClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- {
- c[n] = GET_UShort();
-
- /* We check whether the specific class is used at all. If not,
- class 0 is used instead. */
-
- if ( !d[c[n]] )
- c[n] = 0;
- }
-
- FORGET_Frame();
-
- pcr->PosLookupRecord = NULL;
-
- count = pcr->PosCount;
-
- if ( ALLOC_ARRAY( pcr->PosLookupRecord, count, TTO_PosLookupRecord ) )
- goto Fail2;
-
- plr = pcr->PosLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- plr[n].SequenceIndex = GET_UShort();
- plr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( plr );
-
- Fail2:
- FREE( c );
- return error;
- }
-
-
- static void Free_PosClassRule( TTO_PosClassRule* pcr )
- {
- FREE( pcr->PosLookupRecord );
- FREE( pcr->Class );
- }
-
-
- /* PosClassSet */
-
- static TT_Error Load_PosClassSet( TTO_ContextPosFormat2* cpf2,
- TTO_PosClassSet* pcs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_PosClassRule* pcr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = pcs->PosClassRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- pcs->PosClassRule = NULL;
-
- if ( ALLOC_ARRAY( pcs->PosClassRule, count, TTO_PosClassRule ) )
- return error;
-
- pcr = pcs->PosClassRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_PosClassRule( cpf2, &pcr[n],
- input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_PosClassRule( &pcr[n] );
-
- FREE( pcr );
- return error;
- }
-
-
- static void Free_PosClassSet( TTO_PosClassSet* pcs )
- {
- UShort n, count;
-
- TTO_PosClassRule* pcr;
-
-
- if ( pcs->PosClassRule )
- {
- count = pcs->PosClassRuleCount;
- pcr = pcs->PosClassRule;
-
- for ( n = 0; n < count; n++ )
- Free_PosClassRule( &pcr[n] );
-
- FREE( pcr );
- }
- }
-
-
- /* ContextPosFormat2 */
-
- static TT_Error Load_ContextPos2( TTO_ContextPosFormat2* cpf2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_PosClassSet* pcs;
-
-
- base_offset = FILE_Pos() - 2;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &cpf2->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 4L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- /* `PosClassSetCount' is the upper limit for class values, thus we
- read it now to make an additional safety check. */
-
- count = cpf2->PosClassSetCount = GET_UShort();
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ClassDefinition( &cpf2->ClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- cpf2->PosClassSet = NULL;
- cpf2->MaxContextLength = 0;
-
- if ( ALLOC_ARRAY( cpf2->PosClassSet, count, TTO_PosClassSet ) )
- goto Fail2;
-
- pcs = cpf2->PosClassSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- if ( new_offset != base_offset ) /* not a NULL offset */
- {
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_PosClassSet( cpf2, &pcs[n],
- input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- {
- /* we create a PosClassSet table with no entries */
-
- cpf2->PosClassSet[n].PosClassRuleCount = 0;
- cpf2->PosClassSet[n].PosClassRule = NULL;
- }
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_PosClassSet( &pcs[n] );
-
- FREE( pcs );
-
- Fail2:
- Free_ClassDefinition( &cpf2->ClassDef );
-
- Fail3:
- Free_Coverage( &cpf2->Coverage );
- return error;
- }
-
-
- static void Free_Context2( TTO_ContextPosFormat2* cpf2 )
- {
- UShort n, count;
-
- TTO_PosClassSet* pcs;
-
-
- if ( cpf2->PosClassSet )
- {
- count = cpf2->PosClassSetCount;
- pcs = cpf2->PosClassSet;
-
- for ( n = 0; n < count; n++ )
- Free_PosClassSet( &pcs[n] );
-
- FREE( pcs );
- }
-
- Free_ClassDefinition( &cpf2->ClassDef );
- Free_Coverage( &cpf2->Coverage );
- }
-
-
- /* ContextPosFormat3 */
-
- static TT_Error Load_ContextPos3( TTO_ContextPosFormat3* cpf3,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Coverage* c;
- TTO_PosLookupRecord* plr;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- cpf3->GlyphCount = GET_UShort();
- cpf3->PosCount = GET_UShort();
-
- FORGET_Frame();
-
- cpf3->Coverage = NULL;
-
- count = cpf3->GlyphCount;
-
- if ( ALLOC_ARRAY( cpf3->Coverage, count, TTO_Coverage ) )
- return error;
-
- c = cpf3->Coverage;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &c[n], input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
- }
-
- cpf3->PosLookupRecord = NULL;
-
- count = cpf3->PosCount;
-
- if ( ALLOC_ARRAY( cpf3->PosLookupRecord, count, TTO_PosLookupRecord ) )
- goto Fail2;
-
- plr = cpf3->PosLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- plr[n].SequenceIndex = GET_UShort();
- plr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( plr );
-
- Fail2:
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- return error;
- }
-
-
- static void Free_Context3( TTO_ContextPosFormat3* cpf3 )
- {
- UShort n, count;
-
- TTO_Coverage* c;
-
-
- FREE( cpf3->PosLookupRecord );
-
- if ( cpf3->Coverage )
- {
- count = cpf3->GlyphCount;
- c = cpf3->Coverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
- }
-
-
- /* ContextPos */
-
- TT_Error Load_ContextPos( TTO_ContextPos* cp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cp->PosFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( cp->PosFormat )
- {
- case 1:
- return Load_ContextPos1( &cp->cpf.cpf1, input );
-
- case 2:
- return Load_ContextPos2( &cp->cpf.cpf2, input );
-
- case 3:
- return Load_ContextPos3( &cp->cpf.cpf3, input );
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- void Free_ContextPos( TTO_ContextPos* cp )
- {
- switch ( cp->PosFormat )
- {
- case 1:
- Free_Context1( &cp->cpf.cpf1 );
- break;
-
- case 2:
- Free_Context2( &cp->cpf.cpf2 );
- break;
-
- case 3:
- Free_Context3( &cp->cpf.cpf3 );
- break;
- }
- }
-
-
- static TT_Error Lookup_ContextPos1( GPOS_Instance* gpi,
- TTO_ContextPosFormat1* cpf1,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- UShort i, j, k, numpr;
- TT_Error error;
- UShort* s_in;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_PosRule* pr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gpos->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &cpf1->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- pr = cpf1->PosRuleSet[index].PosRule;
- numpr = cpf1->PosRuleSet[index].PosRuleCount;
-
- for ( k = 0; k < numpr; k++ )
- {
- if ( context_length != 0xFFFF && context_length < pr[k].GlyphCount )
- continue;
-
- if ( in->pos + pr[k].GlyphCount > in->length )
- continue; /* context is too long */
-
- s_in = &in->string[in->pos];
-
- for ( i = 1, j = 1; i < pr[k].GlyphCount; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( s_in[j] != pr[k].Input[i - 1] )
- break;
- }
-
- if ( i == pr[k].GlyphCount )
- return Do_ContextPos( gpi, pr[k].GlyphCount,
- pr[k].PosCount, pr[k].PosLookupRecord,
- in, out,
- nesting_level );
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- static TT_Error Lookup_ContextPos2( GPOS_Instance* gpi,
- TTO_ContextPosFormat2* cpf2,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- TT_Error error;
- UShort i, j, k, known_classes;
-
- UShort* classes;
- UShort* s_in;
- UShort* cl;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_PosClassSet* pcs;
- TTO_PosClassRule* pr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gpos->gdef;
-
- if ( ALLOC_ARRAY( classes, cpf2->MaxContextLength, UShort ) )
- return error;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- /* Note: The coverage table in format 2 doesn't give an index into
- anything. It just lets us know whether or not we need to
- do any lookup at all. */
-
- error = Coverage_Index( &cpf2->Coverage, in->string[in->pos], &index );
- if ( error )
- goto End;
-
- error = Get_Class( &cpf2->ClassDef, in->string[in->pos],
- &classes[0], NULL );
- if ( error )
- goto End;
- known_classes = 0;
-
- pcs = &cpf2->PosClassSet[classes[0]];
- if ( !pcs )
- {
- error = TTO_Err_Invalid_GPOS_SubTable;
- goto End;
- }
-
- for ( k = 0; k < pcs->PosClassRuleCount; k++ )
- {
- pr = &pcs->PosClassRule[k];
-
- if ( context_length != 0xFFFF && context_length < pr->GlyphCount )
- continue;
-
- if ( in->pos + pr->GlyphCount > in->length )
- continue; /* context is too long */
-
- s_in = &in->string[in->pos];
- cl = pr->Class;
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < pr->GlyphCount; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( i > known_classes )
- {
- /* Keeps us from having to do this for each rule */
-
- error = Get_Class( &cpf2->ClassDef, s_in[j], &classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- known_classes = i;
- }
-
- if ( cl[i - 1] != classes[i] )
- break;
- }
-
- if ( i == pr->GlyphCount )
- {
- error = Do_ContextPos( gpi, pr->GlyphCount,
- pr->PosCount, pr->PosLookupRecord,
- in, out,
- nesting_level );
- goto End;
- }
- }
-
- error = TTO_Err_Not_Covered;
-
- End:
- FREE( classes );
- return error;
- }
-
-
- static TT_Error Lookup_ContextPos3( GPOS_Instance* gpi,
- TTO_ContextPosFormat3* cpf3,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- TT_Error error;
- UShort index, i, j, property;
- UShort* s_in;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_Coverage* c;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gpos->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- if ( context_length != 0xFFFF && context_length < cpf3->GlyphCount )
- return TTO_Err_Not_Covered;
-
- if ( in->pos + cpf3->GlyphCount > in->length )
- return TTO_Err_Not_Covered; /* context is too long */
-
- s_in = &in->string[in->pos];
- c = cpf3->Coverage;
-
- for ( i = 1, j = 1; i < cpf3->GlyphCount; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos + j < in->length )
- j++;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &c[i], s_in[j], &index );
- if ( error )
- return error;
- }
-
- return Do_ContextPos( gpi, cpf3->GlyphCount,
- cpf3->PosCount, cpf3->PosLookupRecord,
- in, out,
- nesting_level );
- }
-
-
- static TT_Error Lookup_ContextPos( GPOS_Instance* gpi,
- TTO_ContextPos* cp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- switch ( cp->PosFormat )
- {
- case 1:
- return Lookup_ContextPos1( gpi, &cp->cpf.cpf1, in, out,
- flags, context_length, nesting_level );
-
- case 2:
- return Lookup_ContextPos2( gpi, &cp->cpf.cpf2, in, out,
- flags, context_length, nesting_level );
-
- case 3:
- return Lookup_ContextPos3( gpi, &cp->cpf.cpf3, in, out,
- flags, context_length, nesting_level );
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- /* LookupType 8 */
-
- /* ChainPosRule */
-
- static TT_Error Load_ChainPosRule( TTO_ChainPosRule* cpr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* b;
- UShort* i;
- UShort* l;
-
- TTO_PosLookupRecord* plr;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cpr->BacktrackGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- cpr->Backtrack = NULL;
-
- count = cpr->BacktrackGlyphCount;
-
- if ( ALLOC_ARRAY( cpr->Backtrack, count, UShort ) )
- return error;
-
- b = cpr->Backtrack;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail4;
-
- for ( n = 0; n < count; n++ )
- b[n] = GET_UShort();
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- cpr->InputGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- cpr->Input = NULL;
-
- count = cpr->InputGlyphCount - 1; /* only InputGlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( cpr->Input, count, UShort ) )
- goto Fail4;
-
- i = cpr->Input;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail3;
-
- for ( n = 0; n < count; n++ )
- i[n] = GET_UShort();
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- cpr->LookaheadGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- cpr->Lookahead = NULL;
-
- count = cpr->LookaheadGlyphCount;
-
- if ( ALLOC_ARRAY( cpr->Lookahead, count, UShort ) )
- goto Fail3;
-
- l = cpr->Lookahead;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- l[n] = GET_UShort();
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- cpr->PosCount = GET_UShort();
-
- FORGET_Frame();
-
- cpr->PosLookupRecord = NULL;
-
- count = cpr->PosCount;
-
- if ( ALLOC_ARRAY( cpr->PosLookupRecord, count, TTO_PosLookupRecord ) )
- goto Fail2;
-
- plr = cpr->PosLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- plr[n].SequenceIndex = GET_UShort();
- plr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( plr );
-
- Fail2:
- FREE( l );
-
- Fail3:
- FREE( i );
-
- Fail4:
- FREE( b );
- return error;
- }
-
-
- static void Free_ChainPosRule( TTO_ChainPosRule* cpr )
- {
- FREE( cpr->PosLookupRecord );
- FREE( cpr->Lookahead );
- FREE( cpr->Input );
- FREE( cpr->Backtrack );
- }
-
-
- /* ChainPosRuleSet */
-
- static TT_Error Load_ChainPosRuleSet( TTO_ChainPosRuleSet* cprs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ChainPosRule* cpr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = cprs->ChainPosRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- cprs->ChainPosRule = NULL;
-
- if ( ALLOC_ARRAY( cprs->ChainPosRule, count, TTO_ChainPosRule ) )
- return error;
-
- cpr = cprs->ChainPosRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainPosRule( &cpr[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_ChainPosRule( &cpr[n] );
-
- FREE( cpr );
- return error;
- }
-
-
- static void Free_ChainPosRuleSet( TTO_ChainPosRuleSet* cprs )
- {
- UShort n, count;
-
- TTO_ChainPosRule* cpr;
-
-
- if ( cprs->ChainPosRule )
- {
- count = cprs->ChainPosRuleCount;
- cpr = cprs->ChainPosRule;
-
- for ( n = 0; n < count; n++ )
- Free_ChainPosRule( &cpr[n] );
-
- FREE( cpr );
- }
- }
-
-
- /* ChainContextPosFormat1 */
-
- static TT_Error Load_ChainContextPos1( TTO_ChainContextPosFormat1* ccpf1,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ChainPosRuleSet* cprs;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &ccpf1->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = ccpf1->ChainPosRuleSetCount = GET_UShort();
-
- FORGET_Frame();
-
- ccpf1->ChainPosRuleSet = NULL;
-
- if ( ALLOC_ARRAY( ccpf1->ChainPosRuleSet, count, TTO_ChainPosRuleSet ) )
- goto Fail2;
-
- cprs = ccpf1->ChainPosRuleSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainPosRuleSet( &cprs[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_ChainPosRuleSet( &cprs[n] );
-
- FREE( cprs );
-
- Fail2:
- Free_Coverage( &ccpf1->Coverage );
- return error;
- }
-
-
- static void Free_ChainContext1( TTO_ChainContextPosFormat1* ccpf1 )
- {
- UShort n, count;
-
- TTO_ChainPosRuleSet* cprs;
-
-
- if ( ccpf1->ChainPosRuleSet )
- {
- count = ccpf1->ChainPosRuleSetCount;
- cprs = ccpf1->ChainPosRuleSet;
-
- for ( n = 0; n < count; n++ )
- Free_ChainPosRuleSet( &cprs[n] );
-
- FREE( cprs );
- }
-
- Free_Coverage( &ccpf1->Coverage );
- }
-
-
- /* ChainPosClassRule */
-
- static TT_Error Load_ChainPosClassRule(
- TTO_ChainContextPosFormat2* ccpf2,
- TTO_ChainPosClassRule* cpcr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* b;
- UShort* i;
- UShort* l;
- TTO_PosLookupRecord* plr;
- Bool* d;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cpcr->BacktrackGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- if ( cpcr->BacktrackGlyphCount > ccpf2->MaxBacktrackLength )
- ccpf2->MaxBacktrackLength = cpcr->BacktrackGlyphCount;
-
- cpcr->Backtrack = NULL;
-
- count = cpcr->BacktrackGlyphCount;
-
- if ( ALLOC_ARRAY( cpcr->Backtrack, count, UShort ) )
- return error;
-
- b = cpcr->Backtrack;
- d = ccpf2->BacktrackClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail4;
-
- for ( n = 0; n < count; n++ )
- {
- b[n] = GET_UShort();
-
- /* We check whether the specific class is used at all. If not,
- class 0 is used instead. */
-
- if ( !d[b[n]] )
- b[n] = 0;
- }
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- cpcr->InputGlyphCount = GET_UShort();
-
- if ( cpcr->InputGlyphCount > ccpf2->MaxInputLength )
- ccpf2->MaxInputLength = cpcr->InputGlyphCount;
-
- FORGET_Frame();
-
- cpcr->Input = NULL;
-
- count = cpcr->InputGlyphCount - 1; /* only InputGlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( cpcr->Input, count, UShort ) )
- goto Fail4;
-
- i = cpcr->Input;
- d = ccpf2->InputClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail3;
-
- for ( n = 0; n < count; n++ )
- {
- i[n] = GET_UShort();
-
- if ( !d[i[n]] )
- i[n] = 0;
- }
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- cpcr->LookaheadGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- if ( cpcr->LookaheadGlyphCount > ccpf2->MaxLookaheadLength )
- ccpf2->MaxLookaheadLength = cpcr->LookaheadGlyphCount;
-
- cpcr->Lookahead = NULL;
-
- count = cpcr->LookaheadGlyphCount;
-
- if ( ALLOC_ARRAY( cpcr->Lookahead, count, UShort ) )
- goto Fail3;
-
- l = cpcr->Lookahead;
- d = ccpf2->LookaheadClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- {
- l[n] = GET_UShort();
-
- if ( !d[l[n]] )
- l[n] = 0;
- }
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- cpcr->PosCount = GET_UShort();
-
- FORGET_Frame();
-
- cpcr->PosLookupRecord = NULL;
-
- count = cpcr->PosCount;
-
- if ( ALLOC_ARRAY( cpcr->PosLookupRecord, count, TTO_PosLookupRecord ) )
- goto Fail2;
-
- plr = cpcr->PosLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- plr[n].SequenceIndex = GET_UShort();
- plr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( plr );
-
- Fail2:
- FREE( l );
-
- Fail3:
- FREE( i );
-
- Fail4:
- FREE( b );
- return error;
- }
-
-
- static void Free_ChainPosClassRule( TTO_ChainPosClassRule* cpcr )
- {
- FREE( cpcr->PosLookupRecord );
- FREE( cpcr->Lookahead );
- FREE( cpcr->Input );
- FREE( cpcr->Backtrack );
- }
-
-
- /* PosClassSet */
-
- static TT_Error Load_ChainPosClassSet(
- TTO_ChainContextPosFormat2* ccpf2,
- TTO_ChainPosClassSet* cpcs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ChainPosClassRule* cpcr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = cpcs->ChainPosClassRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- cpcs->ChainPosClassRule = NULL;
-
- if ( ALLOC_ARRAY( cpcs->ChainPosClassRule, count,
- TTO_ChainPosClassRule ) )
- return error;
-
- cpcr = cpcs->ChainPosClassRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainPosClassRule( ccpf2, &cpcr[n],
- input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_ChainPosClassRule( &cpcr[n] );
-
- FREE( cpcr );
- return error;
- }
-
-
- static void Free_ChainPosClassSet( TTO_ChainPosClassSet* cpcs )
- {
- UShort n, count;
-
- TTO_ChainPosClassRule* cpcr;
-
-
- if ( cpcs->ChainPosClassRule )
- {
- count = cpcs->ChainPosClassRuleCount;
- cpcr = cpcs->ChainPosClassRule;
-
- for ( n = 0; n < count; n++ )
- Free_ChainPosClassRule( &cpcr[n] );
-
- FREE( cpcr );
- }
- }
-
-
- /* ChainContextPosFormat2 */
-
- static TT_Error Load_ChainContextPos2( TTO_ChainContextPosFormat2* ccpf2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
- ULong backtrack_offset, input_offset, lookahead_offset;
-
- TTO_ChainPosClassSet* cpcs;
-
-
- base_offset = FILE_Pos() - 2;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &ccpf2->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 8L ) )
- goto Fail5;
-
- backtrack_offset = GET_UShort() + base_offset;
- input_offset = GET_UShort() + base_offset;
- lookahead_offset = GET_UShort() + base_offset;
-
- /* `ChainPosClassSetCount' is the upper limit for input class values,
- thus we read it now to make an additional safety check. */
-
- count = ccpf2->ChainPosClassSetCount = GET_UShort();
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( backtrack_offset ) ||
- ( error = Load_ClassDefinition( &ccpf2->BacktrackClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail5;
- if ( FILE_Seek( input_offset ) ||
- ( error = Load_ClassDefinition( &ccpf2->InputClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail4;
- if ( FILE_Seek( lookahead_offset ) ||
- ( error = Load_ClassDefinition( &ccpf2->LookaheadClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- ccpf2->ChainPosClassSet = NULL;
- ccpf2->MaxBacktrackLength = 0;
- ccpf2->MaxInputLength = 0;
- ccpf2->MaxLookaheadLength = 0;
-
- if ( ALLOC_ARRAY( ccpf2->ChainPosClassSet, count, TTO_ChainPosClassSet ) )
- goto Fail2;
-
- cpcs = ccpf2->ChainPosClassSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- if ( new_offset != base_offset ) /* not a NULL offset */
- {
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainPosClassSet( ccpf2, &cpcs[n],
- input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- {
- /* we create a ChainPosClassSet table with no entries */
-
- ccpf2->ChainPosClassSet[n].ChainPosClassRuleCount = 0;
- ccpf2->ChainPosClassSet[n].ChainPosClassRule = NULL;
- }
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_ChainPosClassSet( &cpcs[n] );
-
- FREE( cpcs );
-
- Fail2:
- Free_ClassDefinition( &ccpf2->LookaheadClassDef );
-
- Fail3:
- Free_ClassDefinition( &ccpf2->InputClassDef );
-
- Fail4:
- Free_ClassDefinition( &ccpf2->BacktrackClassDef );
-
- Fail5:
- Free_Coverage( &ccpf2->Coverage );
- return error;
- }
-
-
- static void Free_ChainContext2( TTO_ChainContextPosFormat2* ccpf2 )
- {
- UShort n, count;
-
- TTO_ChainPosClassSet* cpcs;
-
-
- if ( ccpf2->ChainPosClassSet )
- {
- count = ccpf2->ChainPosClassSetCount;
- cpcs = ccpf2->ChainPosClassSet;
-
- for ( n = 0; n < count; n++ )
- Free_ChainPosClassSet( &cpcs[n] );
-
- FREE( cpcs );
- }
-
- Free_ClassDefinition( &ccpf2->LookaheadClassDef );
- Free_ClassDefinition( &ccpf2->InputClassDef );
- Free_ClassDefinition( &ccpf2->BacktrackClassDef );
-
- Free_Coverage( &ccpf2->Coverage );
- }
-
-
- /* ChainContextPosFormat3 */
-
- static TT_Error Load_ChainContextPos3( TTO_ChainContextPosFormat3* ccpf3,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort backtrack_count, input_count, lookahead_count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Coverage* b;
- TTO_Coverage* i;
- TTO_Coverage* l;
- TTO_PosLookupRecord* plr;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- ccpf3->BacktrackGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- ccpf3->BacktrackCoverage = NULL;
-
- backtrack_count = ccpf3->BacktrackGlyphCount;
-
- if ( ALLOC_ARRAY( ccpf3->BacktrackCoverage, backtrack_count,
- TTO_Coverage ) )
- return error;
-
- b = ccpf3->BacktrackCoverage;
-
- for ( n = 0; n < backtrack_count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &b[n], input ) ) != TT_Err_Ok )
- goto Fail4;
- (void)FILE_Seek( cur_offset );
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- ccpf3->InputGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- ccpf3->InputCoverage = NULL;
-
- input_count = ccpf3->InputGlyphCount;
-
- if ( ALLOC_ARRAY( ccpf3->InputCoverage, input_count, TTO_Coverage ) )
- goto Fail4;
-
- i = ccpf3->InputCoverage;
-
- for ( n = 0; n < input_count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &i[n], input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- ccpf3->LookaheadGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- ccpf3->LookaheadCoverage = NULL;
-
- lookahead_count = ccpf3->LookaheadGlyphCount;
-
- if ( ALLOC_ARRAY( ccpf3->LookaheadCoverage, lookahead_count,
- TTO_Coverage ) )
- goto Fail3;
-
- l = ccpf3->LookaheadCoverage;
-
- for ( n = 0; n < lookahead_count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &l[n], input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- ccpf3->PosCount = GET_UShort();
-
- FORGET_Frame();
-
- ccpf3->PosLookupRecord = NULL;
-
- count = ccpf3->PosCount;
-
- if ( ALLOC_ARRAY( ccpf3->PosLookupRecord, count, TTO_PosLookupRecord ) )
- goto Fail2;
-
- plr = ccpf3->PosLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- plr[n].SequenceIndex = GET_UShort();
- plr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( plr );
-
- Fail2:
- for ( n = 0; n < lookahead_count; n++ )
- Free_Coverage( &l[n] );
-
- FREE( l );
-
- Fail3:
- for ( n = 0; n < input_count; n++ )
- Free_Coverage( &i[n] );
-
- FREE( i );
-
- Fail4:
- for ( n = 0; n < backtrack_count; n++ )
- Free_Coverage( &b[n] );
-
- FREE( b );
- return error;
- }
-
-
- static void Free_ChainContext3( TTO_ChainContextPosFormat3* ccpf3 )
- {
- UShort n, count;
-
- TTO_Coverage* c;
-
-
- FREE( ccpf3->PosLookupRecord );
-
- if ( ccpf3->LookaheadCoverage )
- {
- count = ccpf3->LookaheadGlyphCount;
- c = ccpf3->LookaheadCoverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
-
- if ( ccpf3->InputCoverage )
- {
- count = ccpf3->InputGlyphCount;
- c = ccpf3->InputCoverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
-
- if ( ccpf3->BacktrackCoverage )
- {
- count = ccpf3->BacktrackGlyphCount;
- c = ccpf3->BacktrackCoverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
- }
-
-
- /* ChainContextPos */
-
- TT_Error Load_ChainContextPos( TTO_ChainContextPos* ccp,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- ccp->PosFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( ccp->PosFormat )
- {
- case 1:
- return Load_ChainContextPos1( &ccp->ccpf.ccpf1, input );
-
- case 2:
- return Load_ChainContextPos2( &ccp->ccpf.ccpf2, input );
-
- case 3:
- return Load_ChainContextPos3( &ccp->ccpf.ccpf3, input );
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- void Free_ChainContextPos( TTO_ChainContextPos* ccp )
- {
- switch ( ccp->PosFormat )
- {
- case 1:
- Free_ChainContext1( &ccp->ccpf.ccpf1 );
- break;
-
- case 2:
- Free_ChainContext2( &ccp->ccpf.ccpf2 );
- break;
-
- case 3:
- Free_ChainContext3( &ccp->ccpf.ccpf3 );
- break;
- }
- }
-
-
- static TT_Error Lookup_ChainContextPos1(
- GPOS_Instance* gpi,
- TTO_ChainContextPosFormat1* ccpf1,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- UShort i, j, k, num_cpr, curr_pos;
- UShort bgc, igc, lgc;
- TT_Error error;
- UShort* s_in;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_ChainPosRule* cpr;
- TTO_ChainPosRule curr_cpr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gpos->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &ccpf1->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- cpr = ccpf1->ChainPosRuleSet[index].ChainPosRule;
- num_cpr = ccpf1->ChainPosRuleSet[index].ChainPosRuleCount;
-
- for ( k = 0; k < num_cpr; k++ )
- {
- curr_cpr = cpr[k];
- bgc = curr_cpr.BacktrackGlyphCount;
- igc = curr_cpr.InputGlyphCount;
- lgc = curr_cpr.LookaheadGlyphCount;
-
- if ( context_length != 0xFFFF && context_length < igc )
- continue;
-
- /* check whether context is too long; it is a first guess only */
-
- if ( bgc > in->pos || in->pos + igc + lgc > in->length )
- continue;
-
- if ( bgc )
- {
- /* Since we don't know in advance the number of glyphs to inspect,
- we search backwards for matches in the backtrack glyph array */
-
- curr_pos = 0;
- s_in = &in->string[curr_pos];
-
- for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( j > curr_pos )
- j--;
- else
- break;
- }
-
- if ( s_in[j] != curr_cpr.Backtrack[i - 1] )
- break;
- }
-
- if ( i != 0 )
- continue;
- }
-
- curr_pos = in->pos;
- s_in = &in->string[curr_pos];
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < igc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( s_in[j] != curr_cpr.Input[i - 1] )
- break;
- }
-
- if ( i != igc )
- continue;
-
- /* we are starting to check for lookahead glyphs right after the
- last context glyph */
-
- curr_pos = j;
- s_in = &in->string[curr_pos];
-
- for ( i = 0, j = 0; i < lgc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( s_in[j] != curr_cpr.Lookahead[i] )
- break;
- }
-
- if ( i == lgc )
- return Do_ContextPos( gpi, igc,
- curr_cpr.PosCount,
- curr_cpr.PosLookupRecord,
- in, out,
- nesting_level );
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- static TT_Error Lookup_ChainContextPos2(
- GPOS_Instance* gpi,
- TTO_ChainContextPosFormat2* ccpf2,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- TT_Error error;
- UShort i, j, k, curr_pos;
- UShort bgc, igc, lgc;
- UShort known_backtrack_classes,
- known_input_classes,
- known_lookahead_classes;
-
- UShort* backtrack_classes;
- UShort* input_classes;
- UShort* lookahead_classes;
-
- UShort* s_in;
-
- UShort* bc;
- UShort* ic;
- UShort* lc;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_ChainPosClassSet* cpcs;
- TTO_ChainPosClassRule cpcr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gpos->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- /* Note: The coverage table in format 2 doesn't give an index into
- anything. It just lets us know whether or not we need to
- do any lookup at all. */
-
- error = Coverage_Index( &ccpf2->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- if ( ALLOC_ARRAY( backtrack_classes, ccpf2->MaxBacktrackLength, UShort ) )
- return error;
- known_backtrack_classes = 0;
-
- if ( ALLOC_ARRAY( input_classes, ccpf2->MaxInputLength, UShort ) )
- goto End3;
- known_input_classes = 1;
-
- if ( ALLOC_ARRAY( lookahead_classes, ccpf2->MaxLookaheadLength, UShort ) )
- goto End2;
- known_lookahead_classes = 0;
-
- error = Get_Class( &ccpf2->InputClassDef, in->string[in->pos],
- &input_classes[0], NULL );
- if ( error )
- goto End1;
-
- cpcs = &ccpf2->ChainPosClassSet[input_classes[0]];
- if ( !cpcs )
- {
- error = TTO_Err_Invalid_GPOS_SubTable;
- goto End1;
- }
-
- for ( k = 0; k < cpcs->ChainPosClassRuleCount; k++ )
- {
- cpcr = cpcs->ChainPosClassRule[k];
- bgc = cpcr.BacktrackGlyphCount;
- igc = cpcr.InputGlyphCount;
- lgc = cpcr.LookaheadGlyphCount;
-
- if ( context_length != 0xFFFF && context_length < igc )
- continue;
-
- /* check whether context is too long; it is a first guess only */
-
- if ( bgc > in->pos || in->pos + igc + lgc > in->length )
- continue;
-
- if ( bgc )
- {
- /* Since we don't know in advance the number of glyphs to inspect,
- we search backwards for matches in the backtrack glyph array.
- Note that `known_backtrack_classes' starts at index 0. */
-
- curr_pos = 0;
- s_in = &in->string[curr_pos];
- bc = cpcr.Backtrack;
-
- for ( i = 0, j = in->pos - 1; i < bgc; i++, j-- )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( j > curr_pos )
- j--;
- else
- break;
- }
-
- if ( i >= known_backtrack_classes )
- {
- /* Keeps us from having to do this for each rule */
-
- error = Get_Class( &ccpf2->BacktrackClassDef, s_in[j],
- &backtrack_classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
- known_backtrack_classes = i;
- }
-
- if ( bc[bgc - 1 - i] != backtrack_classes[i] )
- break;
- }
-
- if ( i != bgc )
- continue;
- }
-
- curr_pos = in->pos;
- s_in = &in->string[curr_pos];
- ic = cpcr.Input;
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < igc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( i >= known_input_classes )
- {
- error = Get_Class( &ccpf2->InputClassDef, s_in[j],
- &input_classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
- known_input_classes = i;
- }
-
- if ( ic[i - 1] != input_classes[i] )
- break;
- }
-
- if ( i != igc )
- continue;
-
- /* we are starting to check for lookahead glyphs right after the
- last context glyph */
-
- curr_pos = j;
- s_in = &in->string[curr_pos];
- lc = cpcr.Lookahead;
-
- for ( i = 0, j = 0; i < lgc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( i >= known_lookahead_classes )
- {
- error = Get_Class( &ccpf2->LookaheadClassDef, s_in[j],
- &lookahead_classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
- known_lookahead_classes = i;
- }
-
- if ( lc[i] != lookahead_classes[i] )
- break;
- }
-
- if ( i == lgc )
- {
- error = Do_ContextPos( gpi, igc,
- cpcr.PosCount,
- cpcr.PosLookupRecord,
- in, out,
- nesting_level );
- goto End1;
- }
- }
-
- error = TTO_Err_Not_Covered;
-
- End1:
- FREE( lookahead_classes );
-
- End2:
- FREE( input_classes );
-
- End3:
- FREE( backtrack_classes );
- return error;
- }
-
-
- static TT_Error Lookup_ChainContextPos3(
- GPOS_Instance* gpi,
- TTO_ChainContextPosFormat3* ccpf3,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, i, j, curr_pos, property;
- UShort bgc, igc, lgc;
- TT_Error error;
- UShort* s_in;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- TTO_Coverage* bc;
- TTO_Coverage* ic;
- TTO_Coverage* lc;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gpos->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- bgc = ccpf3->BacktrackGlyphCount;
- igc = ccpf3->InputGlyphCount;
- lgc = ccpf3->LookaheadGlyphCount;
-
- if ( context_length != 0xFFFF && context_length < igc )
- return TTO_Err_Not_Covered;
-
- /* check whether context is too long; it is a first guess only */
-
- if ( bgc > in->pos || in->pos + igc + lgc > in->length )
- return TTO_Err_Not_Covered;
-
- if ( bgc )
- {
- /* Since we don't know in advance the number of glyphs to inspect,
- we search backwards for matches in the backtrack glyph array */
-
- curr_pos = 0;
- s_in = &in->string[curr_pos];
- bc = ccpf3->BacktrackCoverage;
-
- for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( j > curr_pos )
- j--;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &bc[i - 1], s_in[j], &index );
- if ( error )
- return error;
- }
- }
-
- curr_pos = in->pos;
- s_in = &in->string[curr_pos];
- ic = ccpf3->InputCoverage;
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < igc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &ic[i], s_in[j], &index );
- if ( error )
- return error;
- }
-
- /* we are starting for lookahead glyphs right after the last context
- glyph */
-
- curr_pos = j;
- s_in = &in->string[curr_pos];
- lc = ccpf3->LookaheadCoverage;
-
- for ( i = 0, j = 0; i < lgc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &lc[i], s_in[j], &index );
- if ( error )
- return error;
- }
-
- return Do_ContextPos( gpi, igc,
- ccpf3->PosCount,
- ccpf3->PosLookupRecord,
- in, out,
- nesting_level );
- }
-
-
- static TT_Error Lookup_ChainContextPos(
- GPOS_Instance* gpi,
- TTO_ChainContextPos* ccp,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- switch ( ccp->PosFormat )
- {
- case 1:
- return Lookup_ChainContextPos1( gpi, &ccp->ccpf.ccpf1, in, out,
- flags, context_length,
- nesting_level );
-
- case 2:
- return Lookup_ChainContextPos2( gpi, &ccp->ccpf.ccpf2, in, out,
- flags, context_length,
- nesting_level );
-
- case 3:
- return Lookup_ChainContextPos3( gpi, &ccp->ccpf.ccpf3, in, out,
- flags, context_length,
- nesting_level );
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
-
- /***********
- * GPOS API
- ***********/
-
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Select_Script( TTO_GPOSHeader* gpos,
- TT_ULong script_tag,
- TT_UShort* script_index )
- {
- UShort n;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
-
-
- if ( !gpos || !script_index )
- return TT_Err_Invalid_Argument;
-
- sl = &gpos->ScriptList;
- sr = sl->ScriptRecord;
-
- for ( n = 0; n < sl->ScriptCount; n++ )
- if ( script_tag == sr[n].ScriptTag )
- {
- *script_index = n;
-
- return TT_Err_Ok;
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Select_Language( TTO_GPOSHeader* gpos,
- TT_ULong language_tag,
- TT_UShort script_index,
- TT_UShort* language_index,
- TT_UShort* req_feature_index )
- {
- UShort n;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
-
-
- if ( !gpos || !language_index || !req_feature_index )
- return TT_Err_Invalid_Argument;
-
- sl = &gpos->ScriptList;
- sr = sl->ScriptRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- for ( n = 0; n < s->LangSysCount; n++ )
- if ( language_tag == lsr[n].LangSysTag )
- {
- *language_index = n;
- *req_feature_index = lsr[n].LangSys.ReqFeatureIndex;
-
- return TT_Err_Ok;
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- /* selecting 0xFFFF for language_index asks for the values of the
- default language (DefaultLangSys) */
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Select_Feature( TTO_GPOSHeader* gpos,
- TT_ULong feature_tag,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_UShort* feature_index )
- {
- UShort n;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
- TTO_LangSys* ls;
- UShort* fi;
-
- TTO_FeatureList* fl;
- TTO_FeatureRecord* fr;
-
-
- if ( !gpos || !feature_index )
- return TT_Err_Invalid_Argument;
-
- sl = &gpos->ScriptList;
- sr = sl->ScriptRecord;
-
- fl = &gpos->FeatureList;
- fr = fl->FeatureRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- if ( language_index == 0xFFFF )
- ls = &s->DefaultLangSys;
- else
- {
- if ( language_index >= s->LangSysCount )
- return TT_Err_Invalid_Argument;
-
- ls = &lsr[language_index].LangSys;
- }
-
- fi = ls->FeatureIndex;
-
- for ( n = 0; n < ls->FeatureCount; n++ )
- {
- if ( fi[n] >= fl->FeatureCount )
- return TTO_Err_Invalid_GPOS_SubTable_Format;
-
- if ( feature_tag == fr[fi[n]].FeatureTag )
- {
- *feature_index = fi[n];
-
- return TT_Err_Ok;
- }
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- /* The next three functions return a null-terminated list */
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Query_Scripts( TTO_GPOSHeader* gpos,
- TT_ULong** script_tag_list )
- {
- UShort n;
- TT_Error error;
- ULong* stl;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
-
-
- if ( !gpos || !script_tag_list )
- return TT_Err_Invalid_Argument;
-
- sl = &gpos->ScriptList;
- sr = sl->ScriptRecord;
-
- if ( ALLOC_ARRAY( stl, sl->ScriptCount + 1, ULong ) )
- return error;
-
- for ( n = 0; n < sl->ScriptCount; n++ )
- stl[n] = sr[n].ScriptTag;
- stl[n] = 0;
-
- *script_tag_list = stl;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Query_Languages( TTO_GPOSHeader* gpos,
- TT_UShort script_index,
- TT_ULong** language_tag_list )
- {
- UShort n;
- TT_Error error;
- ULong* ltl;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
-
-
- if ( !gpos || !language_tag_list )
- return TT_Err_Invalid_Argument;
-
- sl = &gpos->ScriptList;
- sr = sl->ScriptRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- if ( ALLOC_ARRAY( ltl, s->LangSysCount + 1, ULong ) )
- return error;
-
- for ( n = 0; n < s->LangSysCount; n++ )
- ltl[n] = lsr[n].LangSysTag;
- ltl[n] = 0;
-
- *language_tag_list = ltl;
-
- return TT_Err_Ok;
- }
-
-
- /* selecting 0xFFFF for language_index asks for the values of the
- default language (DefaultLangSys) */
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Query_Features( TTO_GPOSHeader* gpos,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_ULong** feature_tag_list )
- {
- UShort n;
- TT_Error error;
- ULong* ftl;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
- TTO_LangSys* ls;
- UShort* fi;
-
- TTO_FeatureList* fl;
- TTO_FeatureRecord* fr;
-
-
- if ( !gpos || !feature_tag_list )
- return TT_Err_Invalid_Argument;
-
- sl = &gpos->ScriptList;
- sr = sl->ScriptRecord;
-
- fl = &gpos->FeatureList;
- fr = fl->FeatureRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- if ( language_index == 0xFFFF )
- ls = &s->DefaultLangSys;
- else
- {
- if ( language_index >= s->LangSysCount )
- return TT_Err_Invalid_Argument;
-
- ls = &lsr[language_index].LangSys;
- }
-
- fi = ls->FeatureIndex;
-
- if ( ALLOC_ARRAY( ftl, ls->FeatureCount + 1, ULong ) )
- return error;
-
- for ( n = 0; n < ls->FeatureCount; n++ )
- {
- if ( fi[n] >= fl->FeatureCount )
- {
- FREE( ftl );
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
- ftl[n] = fr[fi[n]].FeatureTag;
- }
- ftl[n] = 0;
-
- *feature_tag_list = ftl;
-
- return TT_Err_Ok;
- }
-
-
- /* Do an individual subtable lookup. Returns TT_Err_Ok if positioning
- has been done, or TTO_Err_Not_Covered if not. */
-
- static TT_Error Do_Glyph_Lookup( GPOS_Instance* gpi,
- UShort lookup_index,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out,
- UShort context_length,
- int nesting_level )
- {
- TT_Error error = TT_Err_Ok;
- UShort i, flags;
- TTO_GPOSHeader* gpos = gpi->gpos;
- TTO_Lookup* lo;
-
-
- nesting_level++;
-
- if ( nesting_level > TTO_MAX_NESTING_LEVEL )
- return TTO_Err_Too_Many_Nested_Contexts;
-
- lo = &gpos->LookupList.Lookup[lookup_index];
- flags = lo->LookupFlag;
-
- for ( i = 0; i < lo->SubTableCount; i++ )
- {
- switch ( lo->LookupType )
- {
- case GPOS_LOOKUP_SINGLE:
- error = Lookup_SinglePos( gpi,
- &lo->SubTable[i].st.gpos.single,
- in, out,
- flags, context_length );
- break;
-
- case GPOS_LOOKUP_PAIR:
- error = Lookup_PairPos( gpi,
- &lo->SubTable[i].st.gpos.pair,
- in, out,
- flags, context_length );
- break;
-
- case GPOS_LOOKUP_CURSIVE:
- error = Lookup_CursivePos( gpi,
- &lo->SubTable[i].st.gpos.cursive,
- in, out,
- flags, context_length );
- break;
-
- case GPOS_LOOKUP_MARKBASE:
- error = Lookup_MarkBasePos( gpi,
- &lo->SubTable[i].st.gpos.markbase,
- in, out,
- flags, context_length );
- break;
-
- case GPOS_LOOKUP_MARKLIG:
- error = Lookup_MarkLigPos( gpi,
- &lo->SubTable[i].st.gpos.marklig,
- in, out,
- flags, context_length );
- break;
-
- case GPOS_LOOKUP_MARKMARK:
- error = Lookup_MarkMarkPos( gpi,
- &lo->SubTable[i].st.gpos.markmark,
- in, out,
- flags, context_length );
- break;
-
- case GPOS_LOOKUP_CONTEXT:
- error = Lookup_ContextPos( gpi,
- &lo->SubTable[i].st.gpos.context,
- in, out,
- flags, context_length,
- nesting_level );
- break;
-
- case GPOS_LOOKUP_CHAIN:
- error = Lookup_ChainContextPos( gpi,
- &lo->SubTable[i].st.gpos.chain,
- in, out,
- flags, context_length,
- nesting_level );
- break;
- }
-
- /* Check whether we have a successful positioning or an error other
- than TTO_Err_Not_Covered */
-
- if ( error != TTO_Err_Not_Covered )
- return error;
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- /* apply one lookup to the input string object */
-
- static TT_Error Do_String_Lookup( GPOS_Instance* gpi,
- UShort lookup_index,
- TTO_GSUB_String* in,
- TTO_GPOS_Data* out )
- {
- TT_Error error = TTO_Err_Not_Covered;
- TTO_GPOSHeader* gpos = gpi->gpos;
-
- UShort* properties = gpos->LookupList.Properties;
- UShort* p_in = in->properties;
-
- int nesting_level = 0;
-
-
- gpi->last = 0xFFFF; /* no last valid glyph for cursive pos. */
-
- in->pos = 0;
-
- while ( in->pos < in->length )
- {
- if ( ~p_in[in->pos] & properties[lookup_index] )
- {
- /* 0xFFFF indicates that we don't have a context length yet. */
-
- /* Note that the connection between mark and base glyphs hold
- exactly one (string) lookup. For example, it would be possible
- that in the first lookup, mark glyph X is attached to base
- glyph A, and in the next lookup it is attached to base glyph B.
- It is up to the font designer to provide meaningful lookups and
- lookup order. */
-
- error = Do_Glyph_Lookup( gpi, lookup_index, in, out,
- 0xFFFF, nesting_level );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- }
- else
- {
- /* Contrary to properties defined in GDEF, user-defined properties
- will always stop a possible cursive positioning. */
- gpi->last = 0xFFFF;
-
- error = TTO_Err_Not_Covered;
- }
-
- if ( error == TTO_Err_Not_Covered )
- (in->pos)++;
- }
-
- return error;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Add_Feature( TTO_GPOSHeader* gpos,
- TT_UShort feature_index,
- TT_UShort property )
- {
- UShort i;
-
- TTO_Feature feature;
- UShort* properties;
- UShort* index;
-
-
- if ( !gpos ||
- feature_index >= gpos->FeatureList.FeatureCount )
- return TT_Err_Invalid_Argument;
-
- properties = gpos->LookupList.Properties;
-
- feature = gpos->FeatureList.FeatureRecord[feature_index].Feature;
- index = feature.LookupListIndex;
-
- for ( i = 0; i < feature.LookupListCount; i++ )
- properties[index[i]] |= property;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Clear_Features( TTO_GPOSHeader* gpos )
- {
- UShort i;
-
- UShort* properties;
-
-
- if ( !gpos )
- return TT_Err_Invalid_Argument;
-
- properties = gpos->LookupList.Properties;
-
- for ( i = 0; i < gpos->LookupList.LookupCount; i++ )
- properties[i] = 0;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Register_Glyph_Function( TTO_GPOSHeader* gpos,
- TTO_GlyphFunction gfunc )
- {
- if ( !gpos )
- return TT_Err_Invalid_Argument;
-
- gpos->gfunc = gfunc;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Register_MM_Function( TTO_GPOSHeader* gpos,
- TTO_MMFunction mmfunc,
- void* data )
- {
- if ( !gpos )
- return TT_Err_Invalid_Argument;
-
- gpos->mmfunc = mmfunc;
- gpos->data = data;
-
- return TT_Err_Ok;
- }
-
-
- /* If `dvi' is TRUE, glyph contour points for anchor points and device
- tables are ignored -- you will get device independent values. */
-
- EXPORT_FUNC
- TT_Error TT_GPOS_Apply_String( TT_Instance instance,
- TT_Glyph glyph,
- TTO_GPOSHeader* gpos,
- TT_UShort load_flags,
- TTO_GSUB_String* in,
- TTO_GPOS_Data** out,
- TT_Bool dvi,
- TT_Bool r2l )
- {
- TT_Error error = TTO_Err_Not_Covered;
- GPOS_Instance gpi;
-
- UShort j;
-
- UShort* properties;
-
-
- if ( !instance.z || !gpos ||
- !in || in->length == 0 || in->pos >= in->length )
- return TT_Err_Invalid_Argument;
-
- properties = gpos->LookupList.Properties;
-
- gpi.instance = instance;
- if ( dvi )
- gpi.glyph.z = NULL;
- else
- gpi.glyph = glyph;
- gpi.gpos = gpos;
- gpi.load_flags = load_flags;
- gpi.r2l = r2l;
-
- if ( *out )
- FREE( *out );
- if ( ALLOC_ARRAY( *out, in->length, TTO_GPOS_Data ) )
- return error;
-
- for ( j = 0; j < gpos->LookupList.LookupCount; j++ )
- if ( !properties || properties[j] )
- {
- error = Do_String_Lookup( &gpi, j, in, *out );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- }
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgpos.h b/Build/source/libs/libttf/extend/ftxgpos.h
deleted file mode 100644
index af7ab39f2df..00000000000
--- a/Build/source/libs/libttf/extend/ftxgpos.h
+++ /dev/null
@@ -1,857 +0,0 @@
-/*******************************************************************
- *
- * ftxgpos.h
- *
- * TrueType Open GPOS table support
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 FTXOPEN_H
-#error "Don't include this file! Use ftxopen.h instead."
-#endif
-
-#ifndef FTXGPOS_H
-#define FTXGPOS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define TTO_Err_Invalid_GPOS_SubTable_Format 0x1020
-#define TTO_Err_Invalid_GPOS_SubTable 0x1021
-
-
-/* Lookup types for glyph positioning */
-
-#define GPOS_LOOKUP_SINGLE 1
-#define GPOS_LOOKUP_PAIR 2
-#define GPOS_LOOKUP_CURSIVE 3
-#define GPOS_LOOKUP_MARKBASE 4
-#define GPOS_LOOKUP_MARKLIG 5
-#define GPOS_LOOKUP_MARKMARK 6
-#define GPOS_LOOKUP_CONTEXT 7
-#define GPOS_LOOKUP_CHAIN 8
-
-
- /* A pointer to a function which loads a glyph. Its parameters are
- the same as in a call to TT_Load_Glyph() -- if no glyph loading
- function will be registered with TTO_GPOS_Register_Glyph_Function(),
- TT_Load_Glyph() will be called indeed. The purpose of this function
- pointer is to provide a hook for caching glyph outlines and sbits
- (using the instance's generic pointer to hold the data).
-
- If for some reason no outline data is available (e.g. for an
- embedded bitmap glyph), _glyph->outline.n_points should be set to
- zero. _glyph can be computed with
-
- _glyph = HANDLE_Glyph( glyph ) */
-
- typedef TT_Error (*TTO_GlyphFunction)(TT_Instance instance,
- TT_Glyph glyph,
- TT_UShort glyphIndex,
- TT_UShort loadFlags );
-
-
- /* A pointer to a function which accesses the PostScript interpreter.
- Multiple Master fonts need this interface to convert a metric ID
- (as stored in an OpenType font version 1.2 or higher) `metric_id'
- into a metric value (returned in `metric_value').
-
- `data' points to the user-defined structure specified during a
- call to TT_GPOS_Register_MM_Function().
-
- `metric_value' must be returned as a scaled value (but shouldn't
- be rounded). */
-
- typedef TT_Error (*TTO_MMFunction)(TT_Instance instance,
- TT_UShort metric_id,
- TT_Pos* metric_value,
- void* data );
-
-
- struct TTO_GPOSHeader_
- {
- TT_Bool loaded;
- TT_ULong offset;
-
- TT_Fixed Version;
-
- TTO_ScriptList ScriptList;
- TTO_FeatureList FeatureList;
- TTO_LookupList LookupList;
-
- TTO_GDEFHeader* gdef;
-
- /* the next field is used for a callback function to get the
- glyph outline. */
-
- TTO_GlyphFunction gfunc;
-
- /* this is OpenType 1.2 -- Multiple Master fonts need this
- callback function to get various metric values from the
- PostScript interpreter. */
-
- TTO_MMFunction mmfunc;
- void* data;
- };
-
- typedef struct TTO_GPOSHeader_ TTO_GPOSHeader;
-
-
- /* shared tables */
-
- struct TTO_ValueRecord_
- {
- TT_Short XPlacement; /* horizontal adjustment for
- placement */
- TT_Short YPlacement; /* vertical adjustment for
- placement */
- TT_Short XAdvance; /* horizontal adjustment for
- advance */
- TT_Short YAdvance; /* vertical adjustment for
- advance */
- TTO_Device XPlacementDevice; /* device table for horizontal
- placement */
- TTO_Device YPlacementDevice; /* device table for vertical
- placement */
- TTO_Device XAdvanceDevice; /* device table for horizontal
- advance */
- TTO_Device YAdvanceDevice; /* device table for vertical
- advance */
- TT_UShort XIdPlacement; /* horizontal placement metric ID */
- TT_UShort YIdPlacement; /* vertical placement metric ID */
- TT_UShort XIdAdvance; /* horizontal advance metric ID */
- TT_UShort YIdAdvance; /* vertical advance metric ID */
- };
-
- typedef struct TTO_ValueRecord_ TTO_ValueRecord;
-
-
-/* Mask values to scan the value format of the ValueRecord structure.
- We always expand compressed ValueRecords of the font. */
-
-#define HAVE_X_PLACEMENT 0x0001
-#define HAVE_Y_PLACEMENT 0x0002
-#define HAVE_X_ADVANCE 0x0004
-#define HAVE_Y_ADVANCE 0x0008
-#define HAVE_X_PLACEMENT_DEVICE 0x0010
-#define HAVE_Y_PLACEMENT_DEVICE 0x0020
-#define HAVE_X_ADVANCE_DEVICE 0x0040
-#define HAVE_Y_ADVANCE_DEVICE 0x0080
-#define HAVE_X_ID_PLACEMENT 0x0100
-#define HAVE_Y_ID_PLACEMENT 0x0200
-#define HAVE_X_ID_ADVANCE 0x0400
-#define HAVE_Y_ID_ADVANCE 0x0800
-
-
- struct TTO_AnchorFormat1_
- {
- TT_Short XCoordinate; /* horizontal value */
- TT_Short YCoordinate; /* vertical value */
- };
-
- typedef struct TTO_AnchorFormat1_ TTO_AnchorFormat1;
-
-
- struct TTO_AnchorFormat2_
- {
- TT_Short XCoordinate; /* horizontal value */
- TT_Short YCoordinate; /* vertical value */
- TT_UShort AnchorPoint; /* index to glyph contour point */
- };
-
- typedef struct TTO_AnchorFormat2_ TTO_AnchorFormat2;
-
-
- struct TTO_AnchorFormat3_
- {
- TT_Short XCoordinate; /* horizontal value */
- TT_Short YCoordinate; /* vertical value */
- TTO_Device XDeviceTable; /* device table for X coordinate */
- TTO_Device YDeviceTable; /* device table for Y coordinate */
- };
-
- typedef struct TTO_AnchorFormat3_ TTO_AnchorFormat3;
-
-
- struct TTO_AnchorFormat4_
- {
- TT_UShort XIdAnchor; /* horizontal metric ID */
- TT_UShort YIdAnchor; /* vertical metric ID */
- };
-
- typedef struct TTO_AnchorFormat4_ TTO_AnchorFormat4;
-
-
- struct TTO_Anchor_
- {
- TT_UShort PosFormat; /* 1, 2, 3, or 4 -- 0 indicates
- that there is no Anchor table */
-
- union
- {
- TTO_AnchorFormat1 af1;
- TTO_AnchorFormat2 af2;
- TTO_AnchorFormat3 af3;
- TTO_AnchorFormat4 af4;
- } af;
- };
-
- typedef struct TTO_Anchor_ TTO_Anchor;
-
-
- struct TTO_MarkRecord_
- {
- TT_UShort Class; /* mark class */
- TTO_Anchor MarkAnchor; /* anchor table */
- };
-
- typedef struct TTO_MarkRecord_ TTO_MarkRecord;
-
-
- struct TTO_MarkArray_
- {
- TT_UShort MarkCount; /* number of MarkRecord tables */
- TTO_MarkRecord* MarkRecord; /* array of MarkRecord tables */
- };
-
- typedef struct TTO_MarkArray_ TTO_MarkArray;
-
-
- /* LookupType 1 */
-
- struct TTO_SinglePosFormat1_
- {
- TTO_ValueRecord Value; /* ValueRecord for all covered
- glyphs */
- };
-
- typedef struct TTO_SinglePosFormat1_ TTO_SinglePosFormat1;
-
-
- struct TTO_SinglePosFormat2_
- {
- TT_UShort ValueCount; /* number of ValueRecord tables */
- TTO_ValueRecord* Value; /* array of ValueRecord tables */
- };
-
- typedef struct TTO_SinglePosFormat2_ TTO_SinglePosFormat2;
-
-
- struct TTO_SinglePos_
- {
- TT_UShort PosFormat; /* 1 or 2 */
- TTO_Coverage Coverage; /* Coverage table */
-
- TT_UShort ValueFormat; /* format of ValueRecord table */
-
- union
- {
- TTO_SinglePosFormat1 spf1;
- TTO_SinglePosFormat2 spf2;
- } spf;
- };
-
- typedef struct TTO_SinglePos_ TTO_SinglePos;
-
-
- /* LookupType 2 */
-
- struct TTO_PairValueRecord_
- {
- TT_UShort SecondGlyph; /* glyph ID for second glyph */
- TTO_ValueRecord Value1; /* pos. data for first glyph */
- TTO_ValueRecord Value2; /* pos. data for second glyph */
- };
-
- typedef struct TTO_PairValueRecord_ TTO_PairValueRecord;
-
-
- struct TTO_PairSet_
- {
- TT_UShort PairValueCount;
- /* number of PairValueRecord tables */
- TTO_PairValueRecord* PairValueRecord;
- /* array of PairValueRecord tables */
- };
-
- typedef struct TTO_PairSet_ TTO_PairSet;
-
-
- struct TTO_PairPosFormat1_
- {
- TT_UShort PairSetCount; /* number of PairSet tables */
- TTO_PairSet* PairSet; /* array of PairSet tables */
- };
-
- typedef struct TTO_PairPosFormat1_ TTO_PairPosFormat1;
-
-
- struct TTO_Class2Record_
- {
- TTO_ValueRecord Value1; /* pos. data for first glyph */
- TTO_ValueRecord Value2; /* pos. data for second glyph */
- };
-
- typedef struct TTO_Class2Record_ TTO_Class2Record;
-
-
- struct TTO_Class1Record_
- {
- TTO_Class2Record* Class2Record; /* array of Class2Record tables */
- };
-
- typedef struct TTO_Class1Record_ TTO_Class1Record;
-
-
- struct TTO_PairPosFormat2_
- {
- TTO_ClassDefinition ClassDef1; /* class def. for first glyph */
- TTO_ClassDefinition ClassDef2; /* class def. for second glyph */
- TT_UShort Class1Count; /* number of classes in ClassDef1
- table */
- TT_UShort Class2Count; /* number of classes in ClassDef2
- table */
- TTO_Class1Record* Class1Record; /* array of Class1Record tables */
- };
-
- typedef struct TTO_PairPosFormat2_ TTO_PairPosFormat2;
-
-
- struct TTO_PairPos_
- {
- TT_UShort PosFormat; /* 1 or 2 */
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort ValueFormat1; /* format of ValueRecord table
- for first glyph */
- TT_UShort ValueFormat2; /* format of ValueRecord table
- for second glyph */
-
- union
- {
- TTO_PairPosFormat1 ppf1;
- TTO_PairPosFormat2 ppf2;
- } ppf;
- };
-
- typedef struct TTO_PairPos_ TTO_PairPos;
-
-
- /* LookupType 3 */
-
- struct TTO_EntryExitRecord_
- {
- TTO_Anchor EntryAnchor; /* entry Anchor table */
- TTO_Anchor ExitAnchor; /* exit Anchor table */
- };
-
-
- typedef struct TTO_EntryExitRecord_ TTO_EntryExitRecord;
-
- struct TTO_CursivePos_
- {
- TT_UShort PosFormat; /* always 1 */
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort EntryExitCount;
- /* number of EntryExitRecord tables */
- TTO_EntryExitRecord* EntryExitRecord;
- /* array of EntryExitRecord tables */
- };
-
- typedef struct TTO_CursivePos_ TTO_CursivePos;
-
-
- /* LookupType 4 */
-
- struct TTO_BaseRecord_
- {
- TTO_Anchor* BaseAnchor; /* array of base glyph anchor
- tables */
- };
-
- typedef struct TTO_BaseRecord_ TTO_BaseRecord;
-
-
- struct TTO_BaseArray_
- {
- TT_UShort BaseCount; /* number of BaseRecord tables */
- TTO_BaseRecord* BaseRecord; /* array of BaseRecord tables */
- };
-
- typedef struct TTO_BaseArray_ TTO_BaseArray;
-
-
- struct TTO_MarkBasePos_
- {
- TT_UShort PosFormat; /* always 1 */
- TTO_Coverage MarkCoverage; /* mark glyph coverage table */
- TTO_Coverage BaseCoverage; /* base glyph coverage table */
- TT_UShort ClassCount; /* number of mark classes */
- TTO_MarkArray MarkArray; /* mark array table */
- TTO_BaseArray BaseArray; /* base array table */
- };
-
- typedef struct TTO_MarkBasePos_ TTO_MarkBasePos;
-
-
- /* LookupType 5 */
-
- struct TTO_ComponentRecord_
- {
- TTO_Anchor* LigatureAnchor; /* array of ligature glyph anchor
- tables */
- };
-
- typedef struct TTO_ComponentRecord_ TTO_ComponentRecord;
-
-
- struct TTO_LigatureAttach_
- {
- TT_UShort ComponentCount;
- /* number of ComponentRecord tables */
- TTO_ComponentRecord* ComponentRecord;
- /* array of ComponentRecord tables */
- };
-
- typedef struct TTO_LigatureAttach_ TTO_LigatureAttach;
-
-
- struct TTO_LigatureArray_
- {
- TT_UShort LigatureCount; /* number of LigatureAttach tables */
- TTO_LigatureAttach* LigatureAttach;
- /* array of LigatureAttach tables */
- };
-
- typedef struct TTO_LigatureArray_ TTO_LigatureArray;
-
-
- struct TTO_MarkLigPos_
- {
- TT_UShort PosFormat; /* always 1 */
- TTO_Coverage MarkCoverage; /* mark glyph coverage table */
- TTO_Coverage LigatureCoverage;
- /* ligature glyph coverage table */
- TT_UShort ClassCount; /* number of mark classes */
- TTO_MarkArray MarkArray; /* mark array table */
- TTO_LigatureArray LigatureArray; /* ligature array table */
- };
-
- typedef struct TTO_MarkLigPos_ TTO_MarkLigPos;
-
-
- /* LookupType 6 */
-
- struct TTO_Mark2Record_
- {
- TTO_Anchor* Mark2Anchor; /* array of mark glyph anchor
- tables */
- };
-
- typedef struct TTO_Mark2Record_ TTO_Mark2Record;
-
-
- struct TTO_Mark2Array_
- {
- TT_UShort Mark2Count; /* number of Mark2Record tables */
- TTO_Mark2Record* Mark2Record; /* array of Mark2Record tables */
- };
-
- typedef struct TTO_Mark2Array_ TTO_Mark2Array;
-
-
- struct TTO_MarkMarkPos_
- {
- TT_UShort PosFormat; /* always 1 */
- TTO_Coverage Mark1Coverage; /* first mark glyph coverage table */
- TTO_Coverage Mark2Coverage; /* second mark glyph coverave table */
- TT_UShort ClassCount; /* number of combining mark classes */
- TTO_MarkArray Mark1Array; /* MarkArray table for first mark */
- TTO_Mark2Array Mark2Array; /* MarkArray table for second mark */
- };
-
- typedef struct TTO_MarkMarkPos_ TTO_MarkMarkPos;
-
-
- /* needed by both lookup type 7 and 8 */
-
- struct TTO_PosLookupRecord_
- {
- TT_UShort SequenceIndex; /* index into current
- glyph sequence */
- TT_UShort LookupListIndex; /* Lookup to apply to that pos. */
- };
-
- typedef struct TTO_PosLookupRecord_ TTO_PosLookupRecord;
-
-
- /* LookupType 7 */
-
- struct TTO_PosRule_
- {
- TT_UShort GlyphCount; /* total number of input glyphs */
- TT_UShort PosCount; /* number of PosLookupRecord tables */
- TT_UShort* Input; /* array of input glyph IDs */
- TTO_PosLookupRecord* PosLookupRecord;
- /* array of PosLookupRecord tables */
- };
-
- typedef struct TTO_PosRule_ TTO_PosRule;
-
-
- struct TTO_PosRuleSet_
- {
- TT_UShort PosRuleCount; /* number of PosRule tables */
- TTO_PosRule* PosRule; /* array of PosRule tables */
- };
-
- typedef struct TTO_PosRuleSet_ TTO_PosRuleSet;
-
-
- struct TTO_ContextPosFormat1_
- {
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort PosRuleSetCount; /* number of PosRuleSet tables */
- TTO_PosRuleSet* PosRuleSet; /* array of PosRuleSet tables */
- };
-
- typedef struct TTO_ContextPosFormat1_ TTO_ContextPosFormat1;
-
-
- struct TTO_PosClassRule_
- {
- TT_UShort GlyphCount; /* total number of context classes */
- TT_UShort PosCount; /* number of PosLookupRecord tables */
- TT_UShort* Class; /* array of classes */
- TTO_PosLookupRecord* PosLookupRecord;
- /* array of PosLookupRecord tables */
- };
-
- typedef struct TTO_PosClassRule_ TTO_PosClassRule;
-
-
- struct TTO_PosClassSet_
- {
- TT_UShort PosClassRuleCount;
- /* number of PosClassRule tables */
- TTO_PosClassRule* PosClassRule; /* array of PosClassRule tables */
- };
-
- typedef struct TTO_PosClassSet_ TTO_PosClassSet;
-
-
- /* The `MaxContextLength' field is not defined in the TTO specification
- but simplifies the implementation of this format. It holds the
- maximal context length used in the context rules. */
-
- struct TTO_ContextPosFormat2_
- {
- TT_UShort MaxContextLength;
- /* maximal context length */
- TTO_Coverage Coverage; /* Coverage table */
- TTO_ClassDefinition ClassDef; /* ClassDef table */
- TT_UShort PosClassSetCount;
- /* number of PosClassSet tables */
- TTO_PosClassSet* PosClassSet; /* array of PosClassSet tables */
- };
-
- typedef struct TTO_ContextPosFormat2_ TTO_ContextPosFormat2;
-
-
- struct TTO_ContextPosFormat3_
- {
- TT_UShort GlyphCount; /* number of input glyphs */
- TT_UShort PosCount; /* number of PosLookupRecord tables */
- TTO_Coverage* Coverage; /* array of Coverage tables */
- TTO_PosLookupRecord* PosLookupRecord;
- /* array of PosLookupRecord tables */
- };
-
- typedef struct TTO_ContextPosFormat3_ TTO_ContextPosFormat3;
-
-
- struct TTO_ContextPos_
- {
- TT_UShort PosFormat; /* 1, 2, or 3 */
-
- union
- {
- TTO_ContextPosFormat1 cpf1;
- TTO_ContextPosFormat2 cpf2;
- TTO_ContextPosFormat3 cpf3;
- } cpf;
- };
-
- typedef struct TTO_ContextPos_ TTO_ContextPos;
-
-
- /* LookupType 8 */
-
- struct TTO_ChainPosRule_
- {
- TT_UShort BacktrackGlyphCount;
- /* total number of backtrack glyphs */
- TT_UShort* Backtrack; /* array of backtrack glyph IDs */
- TT_UShort InputGlyphCount;
- /* total number of input glyphs */
- TT_UShort* Input; /* array of input glyph IDs */
- TT_UShort LookaheadGlyphCount;
- /* total number of lookahead glyphs */
- TT_UShort* Lookahead; /* array of lookahead glyph IDs */
- TT_UShort PosCount; /* number of PosLookupRecords */
- TTO_PosLookupRecord* PosLookupRecord;
- /* array of PosLookupRecords */
- };
-
- typedef struct TTO_ChainPosRule_ TTO_ChainPosRule;
-
-
- struct TTO_ChainPosRuleSet_
- {
- TT_UShort ChainPosRuleCount;
- /* number of ChainPosRule tables */
- TTO_ChainPosRule* ChainPosRule; /* array of ChainPosRule tables */
- };
-
- typedef struct TTO_ChainPosRuleSet_ TTO_ChainPosRuleSet;
-
-
- struct TTO_ChainContextPosFormat1_
- {
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort ChainPosRuleSetCount;
- /* number of ChainPosRuleSet tables */
- TTO_ChainPosRuleSet* ChainPosRuleSet;
- /* array of ChainPosRuleSet tables */
- };
-
- typedef struct TTO_ChainContextPosFormat1_ TTO_ChainContextPosFormat1;
-
-
- struct TTO_ChainPosClassRule_
- {
- TT_UShort BacktrackGlyphCount;
- /* total number of backtrack
- classes */
- TT_UShort* Backtrack; /* array of backtrack classes */
- TT_UShort InputGlyphCount;
- /* total number of context classes */
- TT_UShort* Input; /* array of context classes */
- TT_UShort LookaheadGlyphCount;
- /* total number of lookahead
- classes */
- TT_UShort* Lookahead; /* array of lookahead classes */
- TT_UShort PosCount; /* number of PosLookupRecords */
- TTO_PosLookupRecord* PosLookupRecord;
- /* array of substitution lookups */
- };
-
- typedef struct TTO_ChainPosClassRule_ TTO_ChainPosClassRule;
-
-
- struct TTO_ChainPosClassSet_
- {
- TT_UShort ChainPosClassRuleCount;
- /* number of ChainPosClassRule
- tables */
- TTO_ChainPosClassRule* ChainPosClassRule;
- /* array of ChainPosClassRule
- tables */
- };
-
- typedef struct TTO_ChainPosClassSet_ TTO_ChainPosClassSet;
-
-
- /* The `MaxXXXLength' fields are not defined in the TTO specification
- but simplifies the implementation of this format. It holds the
- maximal context length used in the specific context rules. */
-
- struct TTO_ChainContextPosFormat2_
- {
- TTO_Coverage Coverage; /* Coverage table */
-
- TT_UShort MaxBacktrackLength;
- /* maximal backtrack length */
- TTO_ClassDefinition BacktrackClassDef;
- /* BacktrackClassDef table */
- TT_UShort MaxInputLength;
- /* maximal input length */
- TTO_ClassDefinition InputClassDef;
- /* InputClassDef table */
- TT_UShort MaxLookaheadLength;
- /* maximal lookahead length */
- TTO_ClassDefinition LookaheadClassDef;
- /* LookaheadClassDef table */
-
- TT_UShort ChainPosClassSetCount;
- /* number of ChainPosClassSet
- tables */
- TTO_ChainPosClassSet* ChainPosClassSet;
- /* array of ChainPosClassSet
- tables */
- };
-
- typedef struct TTO_ChainContextPosFormat2_ TTO_ChainContextPosFormat2;
-
-
- struct TTO_ChainContextPosFormat3_
- {
- TT_UShort BacktrackGlyphCount;
- /* number of backtrack glyphs */
- TTO_Coverage* BacktrackCoverage;
- /* array of backtrack Coverage
- tables */
- TT_UShort InputGlyphCount;
- /* number of input glyphs */
- TTO_Coverage* InputCoverage;
- /* array of input coverage
- tables */
- TT_UShort LookaheadGlyphCount;
- /* number of lookahead glyphs */
- TTO_Coverage* LookaheadCoverage;
- /* array of lookahead coverage
- tables */
- TT_UShort PosCount; /* number of PosLookupRecords */
- TTO_PosLookupRecord* PosLookupRecord;
- /* array of substitution lookups */
- };
-
- typedef struct TTO_ChainContextPosFormat3_ TTO_ChainContextPosFormat3;
-
-
- struct TTO_ChainContextPos_
- {
- TT_UShort PosFormat; /* 1, 2, or 3 */
-
- union
- {
- TTO_ChainContextPosFormat1 ccpf1;
- TTO_ChainContextPosFormat2 ccpf2;
- TTO_ChainContextPosFormat3 ccpf3;
- } ccpf;
- };
-
- typedef struct TTO_ChainContextPos_ TTO_ChainContextPos;
-
-
- union TTO_GPOS_SubTable_
- {
- TTO_SinglePos single;
- TTO_PairPos pair;
- TTO_CursivePos cursive;
- TTO_MarkBasePos markbase;
- TTO_MarkLigPos marklig;
- TTO_MarkMarkPos markmark;
- TTO_ContextPos context;
- TTO_ChainContextPos chain;
- };
-
- typedef union TTO_GPOS_SubTable_ TTO_GPOS_SubTable;
-
-
- /* This `string object' is much simpler compared to TTO_GSUB_String.
- A call to TTO_GPOS_Apply_String() will allocate it. */
-
- struct TTO_GPOS_Data_
- {
- TT_Pos x_pos;
- TT_Pos y_pos;
- TT_Pos x_advance;
- TT_Pos y_advance;
- TT_UShort back; /* number of glyphs to go back
- for drawing current glyph */
- TT_Bool new_advance; /* if set, the advance width values are
- absolute, i.e., they won't be
- added to the original glyph's value
- but rather replace them. */
- };
-
- typedef struct TTO_GPOS_Data_ TTO_GPOS_Data;
-
-
- /* finally, the GPOS API */
-
- EXPORT_DEF
- TT_Error TT_Init_GPOS_Extension( TT_Engine engine );
-
- EXPORT_DEF
- TT_Error TT_Load_GPOS_Table( TT_Face face,
- TTO_GPOSHeader* gpos,
- TTO_GDEFHeader* gdef );
-
- EXPORT_DEF
- TT_Error TT_GPOS_Select_Script( TTO_GPOSHeader* gpos,
- TT_ULong script_tag,
- TT_UShort* script_index );
- EXPORT_DEF
- TT_Error TT_GPOS_Select_Language( TTO_GPOSHeader* gpos,
- TT_ULong language_tag,
- TT_UShort script_index,
- TT_UShort* language_index,
- TT_UShort* req_feature_index );
- EXPORT_DEF
- TT_Error TT_GPOS_Select_Feature( TTO_GPOSHeader* gpos,
- TT_ULong feature_tag,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_UShort* feature_index );
-
- EXPORT_DEF
- TT_Error TT_GPOS_Query_Scripts( TTO_GPOSHeader* gpos,
- TT_ULong** script_tag_list );
- EXPORT_DEF
- TT_Error TT_GPOS_Query_Languages( TTO_GPOSHeader* gpos,
- TT_UShort script_index,
- TT_ULong** language_tag_list );
- EXPORT_DEF
- TT_Error TT_GPOS_Query_Features( TTO_GPOSHeader* gpos,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_ULong** feature_tag_list );
-
- EXPORT_DEF
- TT_Error TT_GPOS_Add_Feature( TTO_GPOSHeader* gpos,
- TT_UShort feature_index,
- TT_UShort property );
- EXPORT_DEF
- TT_Error TT_GPOS_Clear_Features( TTO_GPOSHeader* gpos );
-
- EXPORT_DEF
- TT_Error TT_GPOS_Register_Glyph_Function( TTO_GPOSHeader* gpos,
- TTO_GlyphFunction gfunc );
-
- EXPORT_DEF
- TT_Error TT_GPOS_Register_MM_Function( TTO_GPOSHeader* gpos,
- TTO_MMFunction mmfunc,
- void* data );
-
- /* If `dvi' is TRUE, glyph contour points for anchor points and device
- tables are ignored -- you will get device independent values. */
-
- EXPORT_DEF
- TT_Error TT_GPOS_Apply_String( TT_Instance instance,
- TT_Glyph glyph,
- TTO_GPOSHeader* gpos,
- TT_UShort load_flags,
- TTO_GSUB_String* in,
- TTO_GPOS_Data** out,
- TT_Bool dvi,
- TT_Bool r2l );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXGPOS_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgsub.c b/Build/source/libs/libttf/extend/ftxgsub.c
deleted file mode 100644
index fbac7425d3c..00000000000
--- a/Build/source/libs/libttf/extend/ftxgsub.c
+++ /dev/null
@@ -1,4377 +0,0 @@
-/*******************************************************************
- *
- * ftxgsub.c
- *
- * TrueType Open GSUB table support.
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- ******************************************************************/
-
-/* XXX There is *a lot* of duplicated code (cf. formats 5 and 6), but
- I don't care currently. I believe that it would be possible to
- save about 50% of TTO code by carefully designing the structures,
- sharing as much as possible with extensive use of macros. This
- is something for a volunteer :-) */
-
-#include "tttypes.h"
-#include "tttags.h"
-#include "ttload.h"
-#include "ttextend.h"
-#include "ttmemory.h"
-#include "ttfile.h"
-
-#include "ftxopen.h"
-#include "ftxopenf.h"
-
-
-#define GSUB_ID Build_Extension_ID( 'G', 'S', 'U', 'B' )
-
-
-#define ADD_String( in, num_in, out, num_out, glyph_data, component, ligID ) \
- ( ( error = TT_GSUB_Add_String( (in), (num_in), \
- (out), (num_out), \
- (glyph_data), (component), (ligID) \
- ) ) != TT_Err_Ok )
-
-
- static TT_Error Do_Glyph_Lookup( TTO_GSUBHeader* gsub,
- UShort lookup_index,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort context_length,
- int nesting_level );
-
-
-
- /**********************
- * Auxiliary functions
- **********************/
-
-
- /* The following function copies `num_out' elements from `glyph_data'
- to `out', advancing the array pointer in the `in' structure by
- `num_in' elements, and in `out' by `num_out' elements. If the
- string (resp. the properties) array in `out' is empty or too
- small, it allocates resp. reallocates the string (and properties)
- array. Finally, it sets the `length' field of `out' equal to
- `pos' of the `out' structure.
-
- If `component' is 0xFFFF, the value `in->component[in->pos]'
- will be copied `num_out' times, otherwise `component' itself will
- be used to fill `out->component'.
-
- If `ligID' is 0xFFFF, the value `in->lig_IDs[in->pos]' will be
- copied `num_out' times, otherwise `ligID' itself will be used to
- fill `out->ligIDs'.
-
- The properties (if defined) for all replaced glyphs are taken
- from the glyph at position `in->pos'. */
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Add_String( TTO_GSUB_String* in,
- UShort num_in,
- TTO_GSUB_String* out,
- UShort num_out,
- UShort* glyph_data,
- UShort component,
- UShort ligID )
- {
- TT_Error error;
- UShort i;
- UShort p_in;
- UShort* p_out;
-
-
- /* sanity check */
-
- if ( !in || !out ||
- in->length == 0 || in->pos >= in->length ||
- in->length < in->pos + num_in )
- return TT_Err_Invalid_Argument;
-
- if ( out->pos + num_out >= out->allocated )
- {
- ULong size = out->pos + num_out + 256L;
-
-
- /* The following works because all fields in `out' must be
- initialized to zero (including the `string' field) for the
- first use. */
-
- if ( REALLOC_ARRAY( out->string, size, UShort ) )
- return error;
- if ( REALLOC_ARRAY( out->components, size, UShort ) )
- return error;
- if ( REALLOC_ARRAY( out->ligIDs, size, UShort ) )
- return error;
- if ( in->properties )
- if ( REALLOC_ARRAY( out->properties, size, UShort ) )
- return error;
-
- out->allocated = size;
- }
-
- if ( num_out )
- {
- MEM_Copy( &out->string[out->pos], glyph_data,
- num_out * sizeof ( UShort ) );
-
- if ( component == 0xFFFF )
- component = in->components[in->pos];
-
- p_out = out->components;
-
- for ( i = out->pos; i < out->pos + num_out; i++ )
- p_out[i] = component;
-
- p_out = out->ligIDs;
-
- if ( ligID == 0xFFFF )
- ligID = in->ligIDs[in->pos];
-
- for ( i = out->pos; i < out->pos + num_out; i++ )
- p_out[i] = ligID;
-
- if ( in->properties )
- {
- p_in = in->properties[in->pos];
- p_out = out->properties;
-
- for ( i = out->pos; i < out->pos + num_out; i++ )
- p_out[i] = p_in;
- }
- }
-
- in->pos += num_in;
- out->pos += num_out;
-
- out->length = out->pos;
-
- return TT_Err_Ok;
- }
-
-
-
- /**********************
- * Extension Functions
- **********************/
-
-
- static TT_Error GSUB_Create( void* ext,
- PFace face )
- {
- DEFINE_LOAD_LOCALS( face->stream );
-
- TTO_GSUBHeader* gsub = (TTO_GSUBHeader*)ext;
- Long table;
-
-
- /* by convention */
-
- if ( !gsub )
- return TT_Err_Ok;
-
- /* a null offset indicates that there is no GSUB table */
-
- gsub->offset = 0;
-
- /* we store the start offset and the size of the subtable */
-
- table = TT_LookUp_Table( face, TTAG_GSUB );
- if ( table < 0 )
- return TT_Err_Ok; /* The table is optional */
-
- if ( FILE_Seek( face->dirTables[table].Offset ) ||
- ACCESS_Frame( 4L ) )
- return error;
-
- gsub->offset = FILE_Pos() - 4L; /* undo ACCESS_Frame() */
- gsub->Version = GET_ULong();
-
- FORGET_Frame();
-
- gsub->loaded = FALSE;
-
- return TT_Err_Ok;
- }
-
-
- static TT_Error GSUB_Destroy( void* ext,
- PFace face )
- {
- TTO_GSUBHeader* gsub = (TTO_GSUBHeader*)ext;
-
-
- /* by convention */
-
- if ( !gsub )
- return TT_Err_Ok;
-
- if ( gsub->loaded )
- {
- Free_LookupList( &gsub->LookupList, GSUB );
- Free_FeatureList( &gsub->FeatureList );
- Free_ScriptList( &gsub->ScriptList );
- }
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Init_GSUB_Extension( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- return TT_Register_Extension( _engine,
- GSUB_ID,
- sizeof ( TTO_GSUBHeader ),
- GSUB_Create,
- GSUB_Destroy );
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Load_GSUB_Table( TT_Face face,
- TTO_GSUBHeader* retptr,
- TTO_GDEFHeader* gdef )
- {
- ULong cur_offset, new_offset, base_offset;
-
- UShort i, num_lookups;
- TT_Error error;
- TT_Stream stream;
- TTO_GSUBHeader* gsub;
- TTO_Lookup* lo;
-
- PFace faze = HANDLE_Face( face );
-
-
- if ( !retptr )
- return TT_Err_Invalid_Argument;
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- error = TT_Extension_Get( faze, GSUB_ID, (void**)&gsub );
- if ( error )
- return error;
-
- if ( gsub->offset == 0 )
- return TT_Err_Table_Missing; /* no GSUB table; nothing to do */
-
- /* now access stream */
-
- if ( USE_Stream( faze->stream, stream ) )
- return error;
-
- base_offset = gsub->offset;
-
- /* skip version */
-
- if ( FILE_Seek( base_offset + 4L ) ||
- ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ScriptList( &gsub->ScriptList,
- faze ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_FeatureList( &gsub->FeatureList,
- faze ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LookupList( &gsub->LookupList,
- faze, GSUB ) ) != TT_Err_Ok )
- goto Fail2;
-
- gsub->gdef = gdef; /* can be NULL */
-
- /* We now check the LookupFlags for values larger than 0xFF to find
- out whether we need to load the `MarkAttachClassDef' field of the
- GDEF table -- this hack is necessary for OpenType 1.2 tables since
- the version field of the GDEF table hasn't been incremented.
-
- For constructed GDEF tables, we only load it if
- `MarkAttachClassDef_offset' is not zero (nevertheless, a build of
- a constructed mark attach table is not supported currently). */
-
- if ( gdef &&
- gdef->MarkAttachClassDef_offset && !gdef->MarkAttachClassDef.loaded )
- {
- lo = gsub->LookupList.Lookup;
- num_lookups = gsub->LookupList.LookupCount;
-
- for ( i = 0; i < num_lookups; i++ )
- {
- if ( lo[i].LookupFlag & IGNORE_SPECIAL_MARKS )
- {
- if ( FILE_Seek( gdef->MarkAttachClassDef_offset ) ||
- ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort();
-
- FORGET_Frame();
-
- if ( !new_offset )
- return TTO_Err_Invalid_GDEF_SubTable;
-
- new_offset += base_offset;
-
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ClassDefinition( &gdef->MarkAttachClassDef,
- 256, faze ) ) != TT_Err_Ok )
- goto Fail1;
-
- break;
- }
- }
- }
-
- gsub->loaded = TRUE;
- *retptr = *gsub;
- DONE_Stream( stream );
-
- return TT_Err_Ok;
-
- Fail1:
- Free_LookupList( &gsub->LookupList, GSUB );
-
- Fail2:
- Free_FeatureList( &gsub->FeatureList );
-
- Fail3:
- Free_ScriptList( &gsub->ScriptList );
-
- /* release stream */
-
- DONE_Stream( stream );
-
- return error;
- }
-
-
-
- /*****************************
- * SubTable related functions
- *****************************/
-
-
- /* LookupType 1 */
-
- /* SingleSubstFormat1 */
- /* SingleSubstFormat2 */
-
- TT_Error Load_SingleSubst( TTO_SingleSubst* ss,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- UShort* s;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- ss->SubstFormat = GET_UShort();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &ss->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- switch ( ss->SubstFormat )
- {
- case 1:
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- ss->ssf.ssf1.DeltaGlyphID = GET_UShort();
-
- FORGET_Frame();
-
- break;
-
- case 2:
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = ss->ssf.ssf2.GlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- ss->ssf.ssf2.Substitute = NULL;
-
- if ( ALLOC_ARRAY( ss->ssf.ssf2.Substitute, count, UShort ) )
- goto Fail2;
-
- s = ss->ssf.ssf2.Substitute;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- s[n] = GET_UShort();
-
- FORGET_Frame();
-
- break;
-
- default:
- return TTO_Err_Invalid_GSUB_SubTable_Format;
- }
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( s );
-
- Fail2:
- Free_Coverage( &ss->Coverage );
- return error;
- }
-
-
- void Free_SingleSubst( TTO_SingleSubst* ss )
- {
- switch ( ss->SubstFormat )
- {
- case 1:
- break;
-
- case 2:
- FREE( ss->ssf.ssf2.Substitute );
- break;
- }
-
- Free_Coverage( &ss->Coverage );
- }
-
-
- static TT_Error Lookup_SingleSubst( TTO_SingleSubst* ss,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- TTO_GDEFHeader* gdef )
- {
- UShort index, value[1], property;
- TT_Error error;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- return TTO_Err_Not_Covered;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &ss->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- switch ( ss->SubstFormat )
- {
- case 1:
- value[0] = ( in->string[in->pos] + ss->ssf.ssf1.DeltaGlyphID ) & 0xFFFF;
- if ( ADD_String( in, 1, out, 1, value, 0xFFFF, 0xFFFF ) )
- return error;
- break;
-
- case 2:
- if ( index >= ss->ssf.ssf2.GlyphCount )
- return TTO_Err_Invalid_GSUB_SubTable;
- value[0] = ss->ssf.ssf2.Substitute[index];
- if ( ADD_String( in, 1, out, 1, value, 0xFFFF, 0xFFFF ) )
- return error;
- break;
-
- default:
- return TTO_Err_Invalid_GSUB_SubTable;
- }
-
- if ( gdef && gdef->NewGlyphClasses )
- {
- /* we inherit the old glyph class to the substituted glyph */
-
- error = Add_Glyph_Property( gdef, value[0], property );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- }
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 2 */
-
- /* Sequence */
-
- static TT_Error Load_Sequence( TTO_Sequence* s,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* sub;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = s->GlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- s->Substitute = NULL;
-
- if ( count )
- {
- if ( ALLOC_ARRAY( s->Substitute, count, UShort ) )
- return error;
-
- sub = s->Substitute;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( sub );
- return error;
- }
-
- for ( n = 0; n < count; n++ )
- sub[n] = GET_UShort();
-
- FORGET_Frame();
- }
-
- return TT_Err_Ok;
- }
-
-
- static void Free_Sequence( TTO_Sequence* s )
- {
- FREE( s->Substitute );
- }
-
-
- /* MultipleSubstFormat1 */
-
- TT_Error Load_MultipleSubst( TTO_MultipleSubst* ms,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Sequence* s;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- ms->SubstFormat = GET_UShort(); /* should be 1 */
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &ms->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = ms->SequenceCount = GET_UShort();
-
- FORGET_Frame();
-
- ms->Sequence = NULL;
-
- if ( ALLOC_ARRAY( ms->Sequence, count, TTO_Sequence ) )
- goto Fail2;
-
- s = ms->Sequence;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Sequence( &s[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_Sequence( &s[n] );
-
- FREE( s );
-
- Fail2:
- Free_Coverage( &ms->Coverage );
- return error;
- }
-
-
- void Free_MultipleSubst( TTO_MultipleSubst* ms )
- {
- UShort n, count;
-
- TTO_Sequence* s;
-
-
- if ( ms->Sequence )
- {
- count = ms->SequenceCount;
- s = ms->Sequence;
-
- for ( n = 0; n < count; n++ )
- Free_Sequence( &s[n] );
-
- FREE( s );
- }
-
- Free_Coverage( &ms->Coverage );
- }
-
-
- static TT_Error Lookup_MultipleSubst( TTO_MultipleSubst* ms,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- TTO_GDEFHeader* gdef )
- {
- TT_Error error;
- UShort index, property, n, count;
- UShort* s;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- return TTO_Err_Not_Covered;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &ms->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- if ( index >= ms->SequenceCount )
- return TTO_Err_Invalid_GSUB_SubTable;
-
- count = ms->Sequence[index].GlyphCount;
- s = ms->Sequence[index].Substitute;
-
- if ( ADD_String( in, 1, out, count, s, 0xFFFF, 0xFFFF ) )
- return error;
-
- if ( gdef && gdef->NewGlyphClasses )
- {
- /* this is a guess only ... */
-
- if ( property == TTO_LIGATURE )
- property = TTO_BASE_GLYPH;
-
- for ( n = 0; n < count; n++ )
- {
- error = Add_Glyph_Property( gdef, s[n], property );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 3 */
-
- /* AlternateSet */
-
- static TT_Error Load_AlternateSet( TTO_AlternateSet* as,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* a;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = as->GlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- as->Alternate = NULL;
-
- if ( ALLOC_ARRAY( as->Alternate, count, UShort ) )
- return error;
-
- a = as->Alternate;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( a );
- return error;
- }
-
- for ( n = 0; n < count; n++ )
- a[n] = GET_UShort();
-
- FORGET_Frame();
-
- return TT_Err_Ok;
- }
-
-
- static void Free_AlternateSet( TTO_AlternateSet* as )
- {
- FREE( as->Alternate );
- }
-
-
- /* AlternateSubstFormat1 */
-
- TT_Error Load_AlternateSubst( TTO_AlternateSubst* as,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_AlternateSet* aset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- as->SubstFormat = GET_UShort(); /* should be 1 */
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &as->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = as->AlternateSetCount = GET_UShort();
-
- FORGET_Frame();
-
- as->AlternateSet = NULL;
-
- if ( ALLOC_ARRAY( as->AlternateSet, count, TTO_AlternateSet ) )
- goto Fail2;
-
- aset = as->AlternateSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_AlternateSet( &aset[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_AlternateSet( &aset[n] );
-
- FREE( aset );
-
- Fail2:
- Free_Coverage( &as->Coverage );
- return error;
- }
-
-
- void Free_AlternateSubst( TTO_AlternateSubst* as )
- {
- UShort n, count;
-
- TTO_AlternateSet* aset;
-
-
- if ( as->AlternateSet )
- {
- count = as->AlternateSetCount;
- aset = as->AlternateSet;
-
- for ( n = 0; n < count; n++ )
- Free_AlternateSet( &aset[n] );
-
- FREE( aset );
- }
-
- Free_Coverage( &as->Coverage );
- }
-
-
- static TT_Error Lookup_AlternateSubst( TTO_GSUBHeader* gsub,
- TTO_AlternateSubst* as,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- TTO_GDEFHeader* gdef )
- {
- TT_Error error;
- UShort index, alt_index, property;
-
- TTO_AlternateSet aset;
-
-
- if ( context_length != 0xFFFF && context_length < 1 )
- return TTO_Err_Not_Covered;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &as->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- aset = as->AlternateSet[index];
-
- /* we use a user-defined callback function to get the alternate index */
-
- if ( gsub->altfunc )
- alt_index = (gsub->altfunc)( out->pos, in->string[in->pos],
- aset.GlyphCount, aset.Alternate,
- gsub->data );
- else
- alt_index = 0;
-
- if ( ADD_String( in, 1, out, 1, &aset.Alternate[alt_index],
- 0xFFFF, 0xFFFF ) )
- return error;
-
- if ( gdef && gdef->NewGlyphClasses )
- {
- /* we inherit the old glyph class to the substituted glyph */
-
- error = Add_Glyph_Property( gdef, aset.Alternate[alt_index],
- property );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- }
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 4 */
-
- /* Ligature */
-
- static TT_Error Load_Ligature( TTO_Ligature* l,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* c;
-
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- l->LigGlyph = GET_UShort();
- l->ComponentCount = GET_UShort();
-
- FORGET_Frame();
-
- l->Component = NULL;
-
- count = l->ComponentCount - 1; /* only ComponentCount - 1 elements */
-
- if ( ALLOC_ARRAY( l->Component, count, UShort ) )
- return error;
-
- c = l->Component;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( c );
- return error;
- }
-
- for ( n = 0; n < count; n++ )
- c[n] = GET_UShort();
-
- FORGET_Frame();
-
- return TT_Err_Ok;
- }
-
-
- static void Free_Ligature( TTO_Ligature* l )
- {
- FREE( l->Component );
- }
-
-
- /* LigatureSet */
-
- static TT_Error Load_LigatureSet( TTO_LigatureSet* ls,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Ligature* l;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = ls->LigatureCount = GET_UShort();
-
- FORGET_Frame();
-
- ls->Ligature = NULL;
-
- if ( ALLOC_ARRAY( ls->Ligature, count, TTO_Ligature ) )
- return error;
-
- l = ls->Ligature;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Ligature( &l[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_Ligature( &l[n] );
-
- FREE( l );
- return error;
- }
-
-
- static void Free_LigatureSet( TTO_LigatureSet* ls )
- {
- UShort n, count;
-
- TTO_Ligature* l;
-
-
- if ( ls->Ligature )
- {
- count = ls->LigatureCount;
- l = ls->Ligature;
-
- for ( n = 0; n < count; n++ )
- Free_Ligature( &l[n] );
-
- FREE( l );
- }
- }
-
-
- /* LigatureSubstFormat1 */
-
- TT_Error Load_LigatureSubst( TTO_LigatureSubst* ls,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_LigatureSet* lset;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- ls->SubstFormat = GET_UShort(); /* should be 1 */
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &ls->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = ls->LigatureSetCount = GET_UShort();
-
- FORGET_Frame();
-
- ls->LigatureSet = NULL;
-
- if ( ALLOC_ARRAY( ls->LigatureSet, count, TTO_LigatureSet ) )
- goto Fail2;
-
- lset = ls->LigatureSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LigatureSet( &lset[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_LigatureSet( &lset[n] );
-
- FREE( lset );
-
- Fail2:
- Free_Coverage( &ls->Coverage );
- return error;
- }
-
-
- void Free_LigatureSubst( TTO_LigatureSubst* ls )
- {
- UShort n, count;
-
- TTO_LigatureSet* lset;
-
-
- if ( ls->LigatureSet )
- {
- count = ls->LigatureSetCount;
- lset = ls->LigatureSet;
-
- for ( n = 0; n < count; n++ )
- Free_LigatureSet( &lset[n] );
-
- FREE( lset );
- }
-
- Free_Coverage( &ls->Coverage );
- }
-
-
- static TT_Error Lookup_LigatureSubst( TTO_LigatureSubst* ls,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- TTO_GDEFHeader* gdef )
- {
- UShort index, property;
- TT_Error error;
- UShort numlig, i, j, is_mark, first_is_mark = FALSE;
- UShort* s_in;
- UShort* c;
-
- TTO_Ligature* lig;
-
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- if ( property == TTO_MARK )
- first_is_mark = TRUE;
-
- error = Coverage_Index( &ls->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- if ( index >= ls->LigatureSetCount )
- return TTO_Err_Invalid_GSUB_SubTable;
-
- lig = ls->LigatureSet[index].Ligature;
-
- for ( numlig = ls->LigatureSet[index].LigatureCount;
- numlig;
- numlig--, lig++ )
- {
- if ( in->pos + lig->ComponentCount > in->length )
- continue; /* Not enough glyphs in input */
-
- s_in = &in->string[in->pos];
- c = lig->Component;
-
- is_mark = first_is_mark;
-
- if ( context_length != 0xFFFF && context_length < lig->ComponentCount )
- break;
-
- for ( i = 1, j = 1; i < lig->ComponentCount; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( property != TTO_MARK )
- is_mark = FALSE;
-
- if ( s_in[j] != c[i - 1] )
- break;
- }
-
- if ( i == lig->ComponentCount )
- {
- if ( gdef && gdef->NewGlyphClasses )
- {
- /* this is just a guess ... */
-
- error = Add_Glyph_Property( gdef, lig->LigGlyph,
- is_mark ? TTO_MARK : TTO_LIGATURE );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- }
-
- if ( i == j )
- {
- /* We don't use a new ligature ID if there are no skipped
- glyphs and the ligature already has an ID. */
-
- if ( in->ligIDs[in->pos] )
- {
- if ( ADD_String( in, i, out, 1, &lig->LigGlyph,
- 0xFFFF, 0xFFFF ) )
- return error;
- }
- else
- {
- if ( ADD_String( in, i, out, 1, &lig->LigGlyph,
- 0xFFFF, in->max_ligID ) )
- return error;
-
- (in->max_ligID)++;
- }
- }
- else
- {
- if ( ADD_String( in, 1, out, 1, &lig->LigGlyph,
- 0xFFFF, in->max_ligID ) )
- return error;
-
- /* Now we must do a second loop to copy the skipped glyphs to
- `out' and assign component values to it. We start with the
- glyph after the first component. Glyphs between component
- i and i+1 belong to component i. Together with the ligID
- value it is later possible to check whether a specific
- component value really belongs to a given ligature. */
-
- for ( i = 0; i < lig->ComponentCount - 1; i++ )
- {
- while ( CHECK_Property( gdef, in->string[in->pos],
- flags, &property ) )
- if ( ADD_String( in, 1, out, 1, &in->string[in->pos],
- i, in->max_ligID ) )
- return error;
-
- (in->pos)++;
- }
-
- (in->max_ligID)++;
- }
-
- return TT_Err_Ok;
- }
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- /* Do the actual substitution for a context substitution (either format
- 5 or 6). This is only called after we've determined that the input
- matches the subrule. */
-
- static TT_Error Do_ContextSubst( TTO_GSUBHeader* gsub,
- UShort GlyphCount,
- UShort SubstCount,
- TTO_SubstLookupRecord* subst,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- int nesting_level )
- {
- TT_Error error;
- UShort i, old_pos;
-
-
- i = 0;
-
- while ( i < GlyphCount )
- {
- if ( SubstCount && i == subst->SequenceIndex )
- {
- old_pos = in->pos;
-
- /* Do a substitution */
-
- error = Do_Glyph_Lookup( gsub, subst->LookupListIndex, in, out,
- GlyphCount, nesting_level );
-
- subst++;
- SubstCount--;
- i += in->pos - old_pos;
-
- if ( error == TTO_Err_Not_Covered )
- {
- /* XXX "can't happen" -- but don't count on it */
-
- if ( ADD_String( in, 1, out, 1, &in->string[in->pos],
- 0xFFFF, 0xFFFF ) )
- return error;
- i++;
- }
- else if ( error )
- return error;
- }
- else
- {
- /* No substitution for this index */
-
- if ( ADD_String( in, 1, out, 1, &in->string[in->pos],
- 0xFFFF, 0xFFFF ) )
- return error;
- i++;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
- /* LookupType 5 */
-
- /* SubRule */
-
- static TT_Error Load_SubRule( TTO_SubRule* sr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* i;
-
- TTO_SubstLookupRecord* slr;
-
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- sr->GlyphCount = GET_UShort();
- sr->SubstCount = GET_UShort();
-
- FORGET_Frame();
-
- sr->Input = NULL;
-
- count = sr->GlyphCount - 1; /* only GlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( sr->Input, count, UShort ) )
- return error;
-
- i = sr->Input;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- i[n] = GET_UShort();
-
- FORGET_Frame();
-
- sr->SubstLookupRecord = NULL;
-
- count = sr->SubstCount;
-
- if ( ALLOC_ARRAY( sr->SubstLookupRecord, count, TTO_SubstLookupRecord ) )
- goto Fail2;
-
- slr = sr->SubstLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- slr[n].SequenceIndex = GET_UShort();
- slr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( slr );
-
- Fail2:
- FREE( i );
- return error;
- }
-
-
- static void Free_SubRule( TTO_SubRule* sr )
- {
- FREE( sr->SubstLookupRecord );
- FREE( sr->Input );
- }
-
-
- /* SubRuleSet */
-
- static TT_Error Load_SubRuleSet( TTO_SubRuleSet* srs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_SubRule* sr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = srs->SubRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- srs->SubRule = NULL;
-
- if ( ALLOC_ARRAY( srs->SubRule, count, TTO_SubRule ) )
- return error;
-
- sr = srs->SubRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_SubRule( &sr[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_SubRule( &sr[n] );
-
- FREE( sr );
- return error;
- }
-
-
- static void Free_SubRuleSet( TTO_SubRuleSet* srs )
- {
- UShort n, count;
-
- TTO_SubRule* sr;
-
-
- if ( srs->SubRule )
- {
- count = srs->SubRuleCount;
- sr = srs->SubRule;
-
- for ( n = 0; n < count; n++ )
- Free_SubRule( &sr[n] );
-
- FREE( sr );
- }
- }
-
-
- /* ContextSubstFormat1 */
-
- static TT_Error Load_ContextSubst1( TTO_ContextSubstFormat1* csf1,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_SubRuleSet* srs;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &csf1->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = csf1->SubRuleSetCount = GET_UShort();
-
- FORGET_Frame();
-
- csf1->SubRuleSet = NULL;
-
- if ( ALLOC_ARRAY( csf1->SubRuleSet, count, TTO_SubRuleSet ) )
- goto Fail2;
-
- srs = csf1->SubRuleSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_SubRuleSet( &srs[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_SubRuleSet( &srs[n] );
-
- FREE( srs );
-
- Fail2:
- Free_Coverage( &csf1->Coverage );
- return error;
- }
-
-
- static void Free_Context1( TTO_ContextSubstFormat1* csf1 )
- {
- UShort n, count;
-
- TTO_SubRuleSet* srs;
-
-
- if ( csf1->SubRuleSet )
- {
- count = csf1->SubRuleSetCount;
- srs = csf1->SubRuleSet;
-
- for ( n = 0; n < count; n++ )
- Free_SubRuleSet( &srs[n] );
-
- FREE( srs );
- }
-
- Free_Coverage( &csf1->Coverage );
- }
-
-
- /* SubClassRule */
-
- static TT_Error Load_SubClassRule( TTO_ContextSubstFormat2* csf2,
- TTO_SubClassRule* scr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* c;
- TTO_SubstLookupRecord* slr;
- Bool* d;
-
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- scr->GlyphCount = GET_UShort();
- scr->SubstCount = GET_UShort();
-
- if ( scr->GlyphCount > csf2->MaxContextLength )
- csf2->MaxContextLength = scr->GlyphCount;
-
- FORGET_Frame();
-
- scr->Class = NULL;
-
- count = scr->GlyphCount - 1; /* only GlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( scr->Class, count, UShort ) )
- return error;
-
- c = scr->Class;
- d = csf2->ClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- {
- c[n] = GET_UShort();
-
- /* We check whether the specific class is used at all. If not,
- class 0 is used instead. */
-
- if ( !d[c[n]] )
- c[n] = 0;
- }
-
- FORGET_Frame();
-
- scr->SubstLookupRecord = NULL;
-
- count = scr->SubstCount;
-
- if ( ALLOC_ARRAY( scr->SubstLookupRecord, count, TTO_SubstLookupRecord ) )
- goto Fail2;
-
- slr = scr->SubstLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- slr[n].SequenceIndex = GET_UShort();
- slr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( slr );
-
- Fail2:
- FREE( c );
- return error;
- }
-
-
- static void Free_SubClassRule( TTO_SubClassRule* scr )
- {
- FREE( scr->SubstLookupRecord );
- FREE( scr->Class );
- }
-
-
- /* SubClassSet */
-
- static TT_Error Load_SubClassSet( TTO_ContextSubstFormat2* csf2,
- TTO_SubClassSet* scs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_SubClassRule* scr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = scs->SubClassRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- scs->SubClassRule = NULL;
-
- if ( ALLOC_ARRAY( scs->SubClassRule, count, TTO_SubClassRule ) )
- return error;
-
- scr = scs->SubClassRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_SubClassRule( csf2, &scr[n],
- input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_SubClassRule( &scr[n] );
-
- FREE( scr );
- return error;
- }
-
-
- static void Free_SubClassSet( TTO_SubClassSet* scs )
- {
- UShort n, count;
-
- TTO_SubClassRule* scr;
-
-
- if ( scs->SubClassRule )
- {
- count = scs->SubClassRuleCount;
- scr = scs->SubClassRule;
-
- for ( n = 0; n < count; n++ )
- Free_SubClassRule( &scr[n] );
-
- FREE( scr );
- }
- }
-
-
- /* ContextSubstFormat2 */
-
- static TT_Error Load_ContextSubst2( TTO_ContextSubstFormat2* csf2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_SubClassSet* scs;
-
-
- base_offset = FILE_Pos() - 2;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &csf2->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 4L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- /* `SubClassSetCount' is the upper limit for class values, thus we
- read it now to make an additional safety check. */
-
- count = csf2->SubClassSetCount = GET_UShort();
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ClassDefinition( &csf2->ClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- csf2->SubClassSet = NULL;
- csf2->MaxContextLength = 0;
-
- if ( ALLOC_ARRAY( csf2->SubClassSet, count, TTO_SubClassSet ) )
- goto Fail2;
-
- scs = csf2->SubClassSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- if ( new_offset != base_offset ) /* not a NULL offset */
- {
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_SubClassSet( csf2, &scs[n],
- input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- {
- /* we create a SubClassSet table with no entries */
-
- csf2->SubClassSet[n].SubClassRuleCount = 0;
- csf2->SubClassSet[n].SubClassRule = NULL;
- }
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_SubClassSet( &scs[n] );
-
- FREE( scs );
-
- Fail2:
- Free_ClassDefinition( &csf2->ClassDef );
-
- Fail3:
- Free_Coverage( &csf2->Coverage );
- return error;
- }
-
-
- static void Free_Context2( TTO_ContextSubstFormat2* csf2 )
- {
- UShort n, count;
-
- TTO_SubClassSet* scs;
-
-
- if ( csf2->SubClassSet )
- {
- count = csf2->SubClassSetCount;
- scs = csf2->SubClassSet;
-
- for ( n = 0; n < count; n++ )
- Free_SubClassSet( &scs[n] );
-
- FREE( scs );
- }
-
- Free_ClassDefinition( &csf2->ClassDef );
- Free_Coverage( &csf2->Coverage );
- }
-
-
- /* ContextSubstFormat3 */
-
- static TT_Error Load_ContextSubst3( TTO_ContextSubstFormat3* csf3,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Coverage* c;
- TTO_SubstLookupRecord* slr;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- csf3->GlyphCount = GET_UShort();
- csf3->SubstCount = GET_UShort();
-
- FORGET_Frame();
-
- csf3->Coverage = NULL;
-
- count = csf3->GlyphCount;
-
- if ( ALLOC_ARRAY( csf3->Coverage, count, TTO_Coverage ) )
- return error;
-
- c = csf3->Coverage;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &c[n], input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
- }
-
- csf3->SubstLookupRecord = NULL;
-
- count = csf3->SubstCount;
-
- if ( ALLOC_ARRAY( csf3->SubstLookupRecord, count,
- TTO_SubstLookupRecord ) )
- goto Fail2;
-
- slr = csf3->SubstLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- slr[n].SequenceIndex = GET_UShort();
- slr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( slr );
-
- Fail2:
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- return error;
- }
-
-
- static void Free_Context3( TTO_ContextSubstFormat3* csf3 )
- {
- UShort n, count;
-
- TTO_Coverage* c;
-
-
- FREE( csf3->SubstLookupRecord );
-
- if ( csf3->Coverage )
- {
- count = csf3->GlyphCount;
- c = csf3->Coverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
- }
-
-
- /* ContextSubst */
-
- TT_Error Load_ContextSubst( TTO_ContextSubst* cs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cs->SubstFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( cs->SubstFormat )
- {
- case 1:
- return Load_ContextSubst1( &cs->csf.csf1, input );
-
- case 2:
- return Load_ContextSubst2( &cs->csf.csf2, input );
-
- case 3:
- return Load_ContextSubst3( &cs->csf.csf3, input );
-
- default:
- return TTO_Err_Invalid_GSUB_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- void Free_ContextSubst( TTO_ContextSubst* cs )
- {
- switch ( cs->SubstFormat )
- {
- case 1:
- Free_Context1( &cs->csf.csf1 );
- break;
-
- case 2:
- Free_Context2( &cs->csf.csf2 );
- break;
-
- case 3:
- Free_Context3( &cs->csf.csf3 );
- break;
- }
- }
-
-
- static TT_Error Lookup_ContextSubst1(
- TTO_GSUBHeader* gsub,
- TTO_ContextSubstFormat1* csf1,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- UShort i, j, k, numsr;
- TT_Error error;
- UShort* s_in;
-
- TTO_SubRule* sr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gsub->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &csf1->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- sr = csf1->SubRuleSet[index].SubRule;
- numsr = csf1->SubRuleSet[index].SubRuleCount;
-
- for ( k = 0; k < numsr; k++ )
- {
- if ( context_length != 0xFFFF && context_length < sr[k].GlyphCount )
- continue;
-
- if ( in->pos + sr[k].GlyphCount > in->length )
- continue; /* context is too long */
-
- s_in = &in->string[in->pos];
-
- for ( i = 1, j = 1; i < sr[k].GlyphCount; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( s_in[j] != sr[k].Input[i - 1] )
- break;
- }
-
- if ( i == sr[k].GlyphCount )
- return Do_ContextSubst( gsub, sr[k].GlyphCount,
- sr[k].SubstCount, sr[k].SubstLookupRecord,
- in, out,
- nesting_level );
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- static TT_Error Lookup_ContextSubst2(
- TTO_GSUBHeader* gsub,
- TTO_ContextSubstFormat2* csf2,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- TT_Error error;
- UShort i, j, k, known_classes;
-
- UShort* classes;
- UShort* s_in;
- UShort* cl;
-
- TTO_SubClassSet* scs;
- TTO_SubClassRule* sr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gsub->gdef;
-
- if ( ALLOC_ARRAY( classes, csf2->MaxContextLength, UShort ) )
- return error;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- /* Note: The coverage table in format 2 doesn't give an index into
- anything. It just lets us know whether or not we need to
- do any lookup at all. */
-
- error = Coverage_Index( &csf2->Coverage, in->string[in->pos], &index );
- if ( error )
- goto End;
-
- error = Get_Class( &csf2->ClassDef, in->string[in->pos],
- &classes[0], NULL );
- if ( error )
- goto End;
- known_classes = 0;
-
- scs = &csf2->SubClassSet[classes[0]];
- if ( !scs )
- {
- error = TTO_Err_Invalid_GSUB_SubTable;
- goto End;
- }
-
- for ( k = 0; k < scs->SubClassRuleCount; k++ )
- {
- sr = &scs->SubClassRule[k];
-
- if ( context_length != 0xFFFF && context_length < sr->GlyphCount )
- continue;
-
- if ( in->pos + sr->GlyphCount > in->length )
- continue; /* context is too long */
-
- s_in = &in->string[in->pos];
- cl = sr->Class;
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < sr->GlyphCount; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( i > known_classes )
- {
- /* Keeps us from having to do this for each rule */
-
- error = Get_Class( &csf2->ClassDef, s_in[j], &classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- known_classes = i;
- }
-
- if ( cl[i - 1] != classes[i] )
- break;
- }
-
- if ( i == sr->GlyphCount )
- {
- error = Do_ContextSubst( gsub, sr->GlyphCount,
- sr->SubstCount, sr->SubstLookupRecord,
- in, out,
- nesting_level );
- goto End;
- }
- }
-
- error = TTO_Err_Not_Covered;
-
- End:
- FREE( classes );
- return error;
- }
-
-
- static TT_Error Lookup_ContextSubst3(
- TTO_GSUBHeader* gsub,
- TTO_ContextSubstFormat3* csf3,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- TT_Error error;
- UShort index, i, j, property;
- UShort* s_in;
-
- TTO_Coverage* c;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gsub->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- if ( context_length != 0xFFFF && context_length < csf3->GlyphCount )
- return TTO_Err_Not_Covered;
-
- if ( in->pos + csf3->GlyphCount > in->length )
- return TTO_Err_Not_Covered; /* context is too long */
-
- s_in = &in->string[in->pos];
- c = csf3->Coverage;
-
- for ( i = 1, j = 1; i < csf3->GlyphCount; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( in->pos + j < in->length )
- j++;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &c[i], s_in[j], &index );
- if ( error )
- return error;
- }
-
- return Do_ContextSubst( gsub, csf3->GlyphCount,
- csf3->SubstCount, csf3->SubstLookupRecord,
- in, out,
- nesting_level );
- }
-
-
- static TT_Error Lookup_ContextSubst( TTO_GSUBHeader* gsub,
- TTO_ContextSubst* cs,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- switch ( cs->SubstFormat )
- {
- case 1:
- return Lookup_ContextSubst1( gsub, &cs->csf.csf1, in, out,
- flags, context_length, nesting_level );
-
- case 2:
- return Lookup_ContextSubst2( gsub, &cs->csf.csf2, in, out,
- flags, context_length, nesting_level );
-
- case 3:
- return Lookup_ContextSubst3( gsub, &cs->csf.csf3, in, out,
- flags, context_length, nesting_level );
-
- default:
- return TTO_Err_Invalid_GSUB_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- /* LookupType 6 */
-
- /* ChainSubRule */
-
- static TT_Error Load_ChainSubRule( TTO_ChainSubRule* csr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort* b;
- UShort* i;
- UShort* l;
-
- TTO_SubstLookupRecord* slr;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- csr->BacktrackGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- csr->Backtrack = NULL;
-
- count = csr->BacktrackGlyphCount;
-
- if ( ALLOC_ARRAY( csr->Backtrack, count, UShort ) )
- return error;
-
- b = csr->Backtrack;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail4;
-
- for ( n = 0; n < count; n++ )
- b[n] = GET_UShort();
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- csr->InputGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- csr->Input = NULL;
-
- count = csr->InputGlyphCount - 1; /* only InputGlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( csr->Input, count, UShort ) )
- goto Fail4;
-
- i = csr->Input;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail3;
-
- for ( n = 0; n < count; n++ )
- i[n] = GET_UShort();
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- csr->LookaheadGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- csr->Lookahead = NULL;
-
- count = csr->LookaheadGlyphCount;
-
- if ( ALLOC_ARRAY( csr->Lookahead, count, UShort ) )
- goto Fail3;
-
- l = csr->Lookahead;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- l[n] = GET_UShort();
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- csr->SubstCount = GET_UShort();
-
- FORGET_Frame();
-
- csr->SubstLookupRecord = NULL;
-
- count = csr->SubstCount;
-
- if ( ALLOC_ARRAY( csr->SubstLookupRecord, count, TTO_SubstLookupRecord ) )
- goto Fail2;
-
- slr = csr->SubstLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- slr[n].SequenceIndex = GET_UShort();
- slr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( slr );
-
- Fail2:
- FREE( l );
-
- Fail3:
- FREE( i );
-
- Fail4:
- FREE( b );
- return error;
- }
-
-
- static void Free_ChainSubRule( TTO_ChainSubRule* csr )
- {
- FREE( csr->SubstLookupRecord );
- FREE( csr->Lookahead );
- FREE( csr->Input );
- FREE( csr->Backtrack );
- }
-
-
- /* ChainSubRuleSet */
-
- static TT_Error Load_ChainSubRuleSet( TTO_ChainSubRuleSet* csrs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ChainSubRule* csr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = csrs->ChainSubRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- csrs->ChainSubRule = NULL;
-
- if ( ALLOC_ARRAY( csrs->ChainSubRule, count, TTO_ChainSubRule ) )
- return error;
-
- csr = csrs->ChainSubRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainSubRule( &csr[n], input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_ChainSubRule( &csr[n] );
-
- FREE( csr );
- return error;
- }
-
-
- static void Free_ChainSubRuleSet( TTO_ChainSubRuleSet* csrs )
- {
- UShort n, count;
-
- TTO_ChainSubRule* csr;
-
-
- if ( csrs->ChainSubRule )
- {
- count = csrs->ChainSubRuleCount;
- csr = csrs->ChainSubRule;
-
- for ( n = 0; n < count; n++ )
- Free_ChainSubRule( &csr[n] );
-
- FREE( csr );
- }
- }
-
-
- /* ChainContextSubstFormat1 */
-
- static TT_Error Load_ChainContextSubst1(
- TTO_ChainContextSubstFormat1* ccsf1,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ChainSubRuleSet* csrs;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &ccsf1->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = ccsf1->ChainSubRuleSetCount = GET_UShort();
-
- FORGET_Frame();
-
- ccsf1->ChainSubRuleSet = NULL;
-
- if ( ALLOC_ARRAY( ccsf1->ChainSubRuleSet, count, TTO_ChainSubRuleSet ) )
- goto Fail2;
-
- csrs = ccsf1->ChainSubRuleSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainSubRuleSet( &csrs[n], input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_ChainSubRuleSet( &csrs[n] );
-
- FREE( csrs );
-
- Fail2:
- Free_Coverage( &ccsf1->Coverage );
- return error;
- }
-
-
- static void Free_ChainContext1( TTO_ChainContextSubstFormat1* ccsf1 )
- {
- UShort n, count;
-
- TTO_ChainSubRuleSet* csrs;
-
-
- if ( ccsf1->ChainSubRuleSet )
- {
- count = ccsf1->ChainSubRuleSetCount;
- csrs = ccsf1->ChainSubRuleSet;
-
- for ( n = 0; n < count; n++ )
- Free_ChainSubRuleSet( &csrs[n] );
-
- FREE( csrs );
- }
-
- Free_Coverage( &ccsf1->Coverage );
- }
-
-
- /* ChainSubClassRule */
-
- static TT_Error Load_ChainSubClassRule(
- TTO_ChainContextSubstFormat2* ccsf2,
- TTO_ChainSubClassRule* cscr,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* b;
- UShort* i;
- UShort* l;
- TTO_SubstLookupRecord* slr;
- Bool* d;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- cscr->BacktrackGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- if ( cscr->BacktrackGlyphCount > ccsf2->MaxBacktrackLength )
- ccsf2->MaxBacktrackLength = cscr->BacktrackGlyphCount;
-
- cscr->Backtrack = NULL;
-
- count = cscr->BacktrackGlyphCount;
-
- if ( ALLOC_ARRAY( cscr->Backtrack, count, UShort ) )
- return error;
-
- b = cscr->Backtrack;
- d = ccsf2->BacktrackClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail4;
-
- for ( n = 0; n < count; n++ )
- {
- b[n] = GET_UShort();
-
- /* We check whether the specific class is used at all. If not,
- class 0 is used instead. */
-
- if ( !d[b[n]] )
- b[n] = 0;
- }
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- cscr->InputGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- if ( cscr->InputGlyphCount > ccsf2->MaxInputLength )
- ccsf2->MaxInputLength = cscr->InputGlyphCount;
-
- cscr->Input = NULL;
-
- count = cscr->InputGlyphCount - 1; /* only InputGlyphCount - 1 elements */
-
- if ( ALLOC_ARRAY( cscr->Input, count, UShort ) )
- goto Fail4;
-
- i = cscr->Input;
- d = ccsf2->InputClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail3;
-
- for ( n = 0; n < count; n++ )
- {
- i[n] = GET_UShort();
-
- if ( !d[i[n]] )
- i[n] = 0;
- }
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- cscr->LookaheadGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- if ( cscr->LookaheadGlyphCount > ccsf2->MaxLookaheadLength )
- ccsf2->MaxLookaheadLength = cscr->LookaheadGlyphCount;
-
- cscr->Lookahead = NULL;
-
- count = cscr->LookaheadGlyphCount;
-
- if ( ALLOC_ARRAY( cscr->Lookahead, count, UShort ) )
- goto Fail3;
-
- l = cscr->Lookahead;
- d = ccsf2->LookaheadClassDef.Defined;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail2;
-
- for ( n = 0; n < count; n++ )
- {
- l[n] = GET_UShort();
-
- if ( !d[l[n]] )
- l[n] = 0;
- }
-
- FORGET_Frame();
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- cscr->SubstCount = GET_UShort();
-
- FORGET_Frame();
-
- cscr->SubstLookupRecord = NULL;
-
- count = cscr->SubstCount;
-
- if ( ALLOC_ARRAY( cscr->SubstLookupRecord, count,
- TTO_SubstLookupRecord ) )
- goto Fail2;
-
- slr = cscr->SubstLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- slr[n].SequenceIndex = GET_UShort();
- slr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( slr );
-
- Fail2:
- FREE( l );
-
- Fail3:
- FREE( i );
-
- Fail4:
- FREE( b );
- return error;
- }
-
-
- static void Free_ChainSubClassRule( TTO_ChainSubClassRule* cscr )
- {
- FREE( cscr->SubstLookupRecord );
- FREE( cscr->Lookahead );
- FREE( cscr->Input );
- FREE( cscr->Backtrack );
- }
-
-
- /* SubClassSet */
-
- static TT_Error Load_ChainSubClassSet(
- TTO_ChainContextSubstFormat2* ccsf2,
- TTO_ChainSubClassSet* cscs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ChainSubClassRule* cscr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = cscs->ChainSubClassRuleCount = GET_UShort();
-
- FORGET_Frame();
-
- cscs->ChainSubClassRule = NULL;
-
- if ( ALLOC_ARRAY( cscs->ChainSubClassRule, count,
- TTO_ChainSubClassRule ) )
- return error;
-
- cscr = cscs->ChainSubClassRule;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainSubClassRule( ccsf2, &cscr[n],
- input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_ChainSubClassRule( &cscr[n] );
-
- FREE( cscr );
- return error;
- }
-
-
- static void Free_ChainSubClassSet( TTO_ChainSubClassSet* cscs )
- {
- UShort n, count;
-
- TTO_ChainSubClassRule* cscr;
-
-
- if ( cscs->ChainSubClassRule )
- {
- count = cscs->ChainSubClassRuleCount;
- cscr = cscs->ChainSubClassRule;
-
- for ( n = 0; n < count; n++ )
- Free_ChainSubClassRule( &cscr[n] );
-
- FREE( cscr );
- }
- }
-
-
- /* ChainContextSubstFormat2 */
-
- static TT_Error Load_ChainContextSubst2(
- TTO_ChainContextSubstFormat2* ccsf2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
- ULong backtrack_offset, input_offset, lookahead_offset;
-
- TTO_ChainSubClassSet* cscs;
-
-
- base_offset = FILE_Pos() - 2;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &ccsf2->Coverage, input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
-
- if ( ACCESS_Frame( 8L ) )
- goto Fail5;
-
- backtrack_offset = GET_UShort() + base_offset;
- input_offset = GET_UShort() + base_offset;
- lookahead_offset = GET_UShort() + base_offset;
-
- /* `ChainSubClassSetCount' is the upper limit for input class values,
- thus we read it now to make an additional safety check. */
-
- count = ccsf2->ChainSubClassSetCount = GET_UShort();
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( backtrack_offset ) ||
- ( error = Load_ClassDefinition( &ccsf2->BacktrackClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail5;
- if ( FILE_Seek( input_offset ) ||
- ( error = Load_ClassDefinition( &ccsf2->InputClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail4;
- if ( FILE_Seek( lookahead_offset ) ||
- ( error = Load_ClassDefinition( &ccsf2->LookaheadClassDef, count,
- input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
-
- ccsf2->ChainSubClassSet = NULL;
- ccsf2->MaxBacktrackLength = 0;
- ccsf2->MaxInputLength = 0;
- ccsf2->MaxLookaheadLength = 0;
-
- if ( ALLOC_ARRAY( ccsf2->ChainSubClassSet, count, TTO_ChainSubClassSet ) )
- goto Fail2;
-
- cscs = ccsf2->ChainSubClassSet;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- if ( new_offset != base_offset ) /* not a NULL offset */
- {
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_ChainSubClassSet( ccsf2, &cscs[n],
- input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
- else
- {
- /* we create a ChainSubClassSet table with no entries */
-
- ccsf2->ChainSubClassSet[n].ChainSubClassRuleCount = 0;
- ccsf2->ChainSubClassSet[n].ChainSubClassRule = NULL;
- }
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_ChainSubClassSet( &cscs[n] );
-
- FREE( cscs );
-
- Fail2:
- Free_ClassDefinition( &ccsf2->LookaheadClassDef );
-
- Fail3:
- Free_ClassDefinition( &ccsf2->InputClassDef );
-
- Fail4:
- Free_ClassDefinition( &ccsf2->BacktrackClassDef );
-
- Fail5:
- Free_Coverage( &ccsf2->Coverage );
- return error;
- }
-
-
- static void Free_ChainContext2( TTO_ChainContextSubstFormat2* ccsf2 )
- {
- UShort n, count;
-
- TTO_ChainSubClassSet* cscs;
-
-
- if ( ccsf2->ChainSubClassSet )
- {
- count = ccsf2->ChainSubClassSetCount;
- cscs = ccsf2->ChainSubClassSet;
-
- for ( n = 0; n < count; n++ )
- Free_ChainSubClassSet( &cscs[n] );
-
- FREE( cscs );
- }
-
- Free_ClassDefinition( &ccsf2->LookaheadClassDef );
- Free_ClassDefinition( &ccsf2->InputClassDef );
- Free_ClassDefinition( &ccsf2->BacktrackClassDef );
-
- Free_Coverage( &ccsf2->Coverage );
- }
-
-
- /* ChainContextSubstFormat3 */
-
- static TT_Error Load_ChainContextSubst3(
- TTO_ChainContextSubstFormat3* ccsf3,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- UShort backtrack_count, input_count, lookahead_count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Coverage* b;
- TTO_Coverage* i;
- TTO_Coverage* l;
- TTO_SubstLookupRecord* slr;
-
-
- base_offset = FILE_Pos() - 2L;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- ccsf3->BacktrackGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- ccsf3->BacktrackCoverage = NULL;
-
- backtrack_count = ccsf3->BacktrackGlyphCount;
-
- if ( ALLOC_ARRAY( ccsf3->BacktrackCoverage, backtrack_count,
- TTO_Coverage ) )
- return error;
-
- b = ccsf3->BacktrackCoverage;
-
- for ( n = 0; n < backtrack_count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &b[n], input ) ) != TT_Err_Ok )
- goto Fail4;
- (void)FILE_Seek( cur_offset );
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail4;
-
- ccsf3->InputGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- ccsf3->InputCoverage = NULL;
-
- input_count = ccsf3->InputGlyphCount;
-
- if ( ALLOC_ARRAY( ccsf3->InputCoverage, input_count, TTO_Coverage ) )
- goto Fail4;
-
- i = ccsf3->InputCoverage;
-
- for ( n = 0; n < input_count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &i[n], input ) ) != TT_Err_Ok )
- goto Fail3;
- (void)FILE_Seek( cur_offset );
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail3;
-
- ccsf3->LookaheadGlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- ccsf3->LookaheadCoverage = NULL;
-
- lookahead_count = ccsf3->LookaheadGlyphCount;
-
- if ( ALLOC_ARRAY( ccsf3->LookaheadCoverage, lookahead_count,
- TTO_Coverage ) )
- goto Fail3;
-
- l = ccsf3->LookaheadCoverage;
-
- for ( n = 0; n < lookahead_count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Coverage( &l[n], input ) ) != TT_Err_Ok )
- goto Fail2;
- (void)FILE_Seek( cur_offset );
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- ccsf3->SubstCount = GET_UShort();
-
- FORGET_Frame();
-
- ccsf3->SubstLookupRecord = NULL;
-
- count = ccsf3->SubstCount;
-
- if ( ALLOC_ARRAY( ccsf3->SubstLookupRecord, count,
- TTO_SubstLookupRecord ) )
- goto Fail2;
-
- slr = ccsf3->SubstLookupRecord;
-
- if ( ACCESS_Frame( count * 4L ) )
- goto Fail1;
-
- for ( n = 0; n < count; n++ )
- {
- slr[n].SequenceIndex = GET_UShort();
- slr[n].LookupListIndex = GET_UShort();
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( slr );
-
- Fail2:
- for ( n = 0; n < lookahead_count; n++ )
- Free_Coverage( &l[n] );
-
- FREE( l );
-
- Fail3:
- for ( n = 0; n < input_count; n++ )
- Free_Coverage( &i[n] );
-
- FREE( i );
-
- Fail4:
- for ( n = 0; n < backtrack_count; n++ )
- Free_Coverage( &b[n] );
-
- FREE( b );
- return error;
- }
-
-
- static void Free_ChainContext3( TTO_ChainContextSubstFormat3* ccsf3 )
- {
- UShort n, count;
-
- TTO_Coverage* c;
-
-
- FREE( ccsf3->SubstLookupRecord );
-
- if ( ccsf3->LookaheadCoverage )
- {
- count = ccsf3->LookaheadGlyphCount;
- c = ccsf3->LookaheadCoverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
-
- if ( ccsf3->InputCoverage )
- {
- count = ccsf3->InputGlyphCount;
- c = ccsf3->InputCoverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
-
- if ( ccsf3->BacktrackCoverage )
- {
- count = ccsf3->BacktrackGlyphCount;
- c = ccsf3->BacktrackCoverage;
-
- for ( n = 0; n < count; n++ )
- Free_Coverage( &c[n] );
-
- FREE( c );
- }
- }
-
-
- /* ChainContextSubst */
-
- TT_Error Load_ChainContextSubst( TTO_ChainContextSubst* ccs,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- ccs->SubstFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( ccs->SubstFormat )
- {
- case 1:
- return Load_ChainContextSubst1( &ccs->ccsf.ccsf1, input );
-
- case 2:
- return Load_ChainContextSubst2( &ccs->ccsf.ccsf2, input );
-
- case 3:
- return Load_ChainContextSubst3( &ccs->ccsf.ccsf3, input );
-
- default:
- return TTO_Err_Invalid_GSUB_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- void Free_ChainContextSubst( TTO_ChainContextSubst* ccs )
- {
- switch ( ccs->SubstFormat )
- {
- case 1:
- Free_ChainContext1( &ccs->ccsf.ccsf1 );
- break;
-
- case 2:
- Free_ChainContext2( &ccs->ccsf.ccsf2 );
- break;
-
- case 3:
- Free_ChainContext3( &ccs->ccsf.ccsf3 );
- break;
- }
- }
-
-
- static TT_Error Lookup_ChainContextSubst1(
- TTO_GSUBHeader* gsub,
- TTO_ChainContextSubstFormat1* ccsf1,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- UShort i, j, k, num_csr, curr_pos;
- UShort bgc, igc, lgc;
- TT_Error error;
- UShort* s_in;
-
- TTO_ChainSubRule* csr;
- TTO_ChainSubRule curr_csr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gsub->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- error = Coverage_Index( &ccsf1->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- csr = ccsf1->ChainSubRuleSet[index].ChainSubRule;
- num_csr = ccsf1->ChainSubRuleSet[index].ChainSubRuleCount;
-
- for ( k = 0; k < num_csr; k++ )
- {
- curr_csr = csr[k];
- bgc = curr_csr.BacktrackGlyphCount;
- igc = curr_csr.InputGlyphCount;
- lgc = curr_csr.LookaheadGlyphCount;
-
- if ( context_length != 0xFFFF && context_length < igc )
- continue;
-
- /* check whether context is too long; it is a first guess only */
-
- if ( bgc > in->pos || in->pos + igc + lgc > in->length )
- continue;
-
- if ( bgc )
- {
- /* Since we don't know in advance the number of glyphs to inspect,
- we search backwards for matches in the backtrack glyph array */
-
- curr_pos = 0;
- s_in = &in->string[curr_pos];
-
- for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( j > curr_pos )
- j--;
- else
- break;
- }
-
- if ( s_in[j] != curr_csr.Backtrack[i - 1] )
- break;
- }
-
- if ( i != 0 )
- continue;
- }
-
- curr_pos = in->pos;
- s_in = &in->string[curr_pos];
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < igc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( s_in[j] != curr_csr.Input[i - 1] )
- break;
- }
-
- if ( i != igc )
- continue;
-
- /* we are starting to check for lookahead glyphs right after the
- last context glyph */
-
- curr_pos = j;
- s_in = &in->string[curr_pos];
-
- for ( i = 0, j = 0; i < lgc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( s_in[j] != curr_csr.Lookahead[i] )
- break;
- }
-
- if ( i == lgc )
- return Do_ContextSubst( gsub, igc,
- curr_csr.SubstCount,
- curr_csr.SubstLookupRecord,
- in, out,
- nesting_level );
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- static TT_Error Lookup_ChainContextSubst2(
- TTO_GSUBHeader* gsub,
- TTO_ChainContextSubstFormat2* ccsf2,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, property;
- TT_Error error;
- UShort i, j, k, curr_pos;
- UShort bgc, igc, lgc;
- UShort known_backtrack_classes,
- known_input_classes,
- known_lookahead_classes;
-
- UShort* backtrack_classes;
- UShort* input_classes;
- UShort* lookahead_classes;
-
- UShort* s_in;
-
- UShort* bc;
- UShort* ic;
- UShort* lc;
-
- TTO_ChainSubClassSet* cscs;
- TTO_ChainSubClassRule ccsr;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gsub->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- /* Note: The coverage table in format 2 doesn't give an index into
- anything. It just lets us know whether or not we need to
- do any lookup at all. */
-
- error = Coverage_Index( &ccsf2->Coverage, in->string[in->pos], &index );
- if ( error )
- return error;
-
- if ( ALLOC_ARRAY( backtrack_classes, ccsf2->MaxBacktrackLength, UShort ) )
- return error;
- known_backtrack_classes = 0;
-
- if ( ALLOC_ARRAY( input_classes, ccsf2->MaxInputLength, UShort ) )
- goto End3;
- known_input_classes = 1;
-
- if ( ALLOC_ARRAY( lookahead_classes, ccsf2->MaxLookaheadLength, UShort ) )
- goto End2;
- known_lookahead_classes = 0;
-
- error = Get_Class( &ccsf2->InputClassDef, in->string[in->pos],
- &input_classes[0], NULL );
- if ( error )
- goto End1;
-
- cscs = &ccsf2->ChainSubClassSet[input_classes[0]];
- if ( !cscs )
- {
- error = TTO_Err_Invalid_GSUB_SubTable;
- goto End1;
- }
-
- for ( k = 0; k < cscs->ChainSubClassRuleCount; k++ )
- {
- ccsr = cscs->ChainSubClassRule[k];
- bgc = ccsr.BacktrackGlyphCount;
- igc = ccsr.InputGlyphCount;
- lgc = ccsr.LookaheadGlyphCount;
-
- if ( context_length != 0xFFFF && context_length < igc )
- continue;
-
- /* check whether context is too long; it is a first guess only */
-
- if ( bgc > in->pos || in->pos + igc + lgc > in->length )
- continue;
-
- if ( bgc )
- {
- /* Since we don't know in advance the number of glyphs to inspect,
- we search backwards for matches in the backtrack glyph array.
- Note that `known_backtrack_classes' starts at index 0. */
-
- curr_pos = 0;
- s_in = &in->string[curr_pos];
- bc = ccsr.Backtrack;
-
- for ( i = 0, j = in->pos - 1; i < bgc; i++, j-- )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( j > curr_pos )
- j--;
- else
- break;
- }
-
- if ( i >= known_backtrack_classes )
- {
- /* Keeps us from having to do this for each rule */
-
- error = Get_Class( &ccsf2->BacktrackClassDef, s_in[j],
- &backtrack_classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
- known_backtrack_classes = i;
- }
-
- if ( bc[bgc - 1 - i] != backtrack_classes[i] )
- break;
- }
-
- if ( i != bgc )
- continue;
- }
-
- curr_pos = in->pos;
- s_in = &in->string[curr_pos];
- ic = ccsr.Input;
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < igc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( i >= known_input_classes )
- {
- error = Get_Class( &ccsf2->InputClassDef, s_in[j],
- &input_classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
- known_input_classes = i;
- }
-
- if ( ic[i - 1] != input_classes[i] )
- break;
- }
-
- if ( i != igc )
- continue;
-
- /* we are starting to check for lookahead glyphs right after the
- last context glyph */
-
- curr_pos = j;
- s_in = &in->string[curr_pos];
- lc = ccsr.Lookahead;
-
- for ( i = 0, j = 0; i < lgc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- break;
- }
-
- if ( i >= known_lookahead_classes )
- {
- error = Get_Class( &ccsf2->LookaheadClassDef, s_in[j],
- &lookahead_classes[i], NULL );
- if ( error && error != TTO_Err_Not_Covered )
- goto End1;
- known_lookahead_classes = i;
- }
-
- if ( lc[i] != lookahead_classes[i] )
- break;
- }
-
- if ( i == lgc )
- {
- error = Do_ContextSubst( gsub, igc,
- ccsr.SubstCount,
- ccsr.SubstLookupRecord,
- in, out,
- nesting_level );
- goto End1;
- }
- }
-
- error = TTO_Err_Not_Covered;
-
- End1:
- FREE( lookahead_classes );
-
- End2:
- FREE( input_classes );
-
- End3:
- FREE( backtrack_classes );
- return error;
- }
-
-
- static TT_Error Lookup_ChainContextSubst3(
- TTO_GSUBHeader* gsub,
- TTO_ChainContextSubstFormat3* ccsf3,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- UShort index, i, j, curr_pos, property;
- UShort bgc, igc, lgc;
- TT_Error error;
- UShort* s_in;
-
- TTO_Coverage* bc;
- TTO_Coverage* ic;
- TTO_Coverage* lc;
- TTO_GDEFHeader* gdef;
-
-
- gdef = gsub->gdef;
-
- if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) )
- return error;
-
- bgc = ccsf3->BacktrackGlyphCount;
- igc = ccsf3->InputGlyphCount;
- lgc = ccsf3->LookaheadGlyphCount;
-
- if ( context_length != 0xFFFF && context_length < igc )
- return TTO_Err_Not_Covered;
-
- /* check whether context is too long; it is a first guess only */
-
- if ( bgc > in->pos || in->pos + igc + lgc > in->length )
- return TTO_Err_Not_Covered;
-
- if ( bgc )
- {
- /* Since we don't know in advance the number of glyphs to inspect,
- we search backwards for matches in the backtrack glyph array */
-
- curr_pos = 0;
- s_in = &in->string[curr_pos];
- bc = ccsf3->BacktrackCoverage;
-
- for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( j > curr_pos )
- j--;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &bc[i - 1], s_in[j], &index );
- if ( error )
- return error;
- }
- }
-
- curr_pos = in->pos;
- s_in = &in->string[curr_pos];
- ic = ccsf3->InputCoverage;
-
- /* Start at 1 because [0] is implied */
-
- for ( i = 1, j = 1; i < igc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &ic[i], s_in[j], &index );
- if ( error )
- return error;
- }
-
- /* we are starting for lookahead glyphs right after the last context
- glyph */
-
- curr_pos = j;
- s_in = &in->string[curr_pos];
- lc = ccsf3->LookaheadCoverage;
-
- for ( i = 0, j = 0; i < lgc; i++, j++ )
- {
- while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
- {
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- if ( curr_pos + j < in->length )
- j++;
- else
- return TTO_Err_Not_Covered;
- }
-
- error = Coverage_Index( &lc[i], s_in[j], &index );
- if ( error )
- return error;
- }
-
- return Do_ContextSubst( gsub, igc,
- ccsf3->SubstCount,
- ccsf3->SubstLookupRecord,
- in, out,
- nesting_level );
- }
-
-
- static TT_Error Lookup_ChainContextSubst(
- TTO_GSUBHeader* gsub,
- TTO_ChainContextSubst* ccs,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort flags,
- UShort context_length,
- int nesting_level )
- {
- switch ( ccs->SubstFormat )
- {
- case 1:
- return Lookup_ChainContextSubst1( gsub, &ccs->ccsf.ccsf1, in, out,
- flags, context_length,
- nesting_level );
-
- case 2:
- return Lookup_ChainContextSubst2( gsub, &ccs->ccsf.ccsf2, in, out,
- flags, context_length,
- nesting_level );
-
- case 3:
- return Lookup_ChainContextSubst3( gsub, &ccs->ccsf.ccsf3, in, out,
- flags, context_length,
- nesting_level );
-
- default:
- return TTO_Err_Invalid_GSUB_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
-
- /***********
- * GSUB API
- ***********/
-
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Select_Script( TTO_GSUBHeader* gsub,
- TT_ULong script_tag,
- TT_UShort* script_index )
- {
- UShort n;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
-
-
- if ( !gsub || !script_index )
- return TT_Err_Invalid_Argument;
-
- sl = &gsub->ScriptList;
- sr = sl->ScriptRecord;
-
- for ( n = 0; n < sl->ScriptCount; n++ )
- if ( script_tag == sr[n].ScriptTag )
- {
- *script_index = n;
-
- return TT_Err_Ok;
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Select_Language( TTO_GSUBHeader* gsub,
- TT_ULong language_tag,
- TT_UShort script_index,
- TT_UShort* language_index,
- TT_UShort* req_feature_index )
- {
- UShort n;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
-
-
- if ( !gsub || !language_index || !req_feature_index )
- return TT_Err_Invalid_Argument;
-
- sl = &gsub->ScriptList;
- sr = sl->ScriptRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- for ( n = 0; n < s->LangSysCount; n++ )
- if ( language_tag == lsr[n].LangSysTag )
- {
- *language_index = n;
- *req_feature_index = lsr[n].LangSys.ReqFeatureIndex;
-
- return TT_Err_Ok;
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- /* selecting 0xFFFF for language_index asks for the values of the
- default language (DefaultLangSys) */
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Select_Feature( TTO_GSUBHeader* gsub,
- TT_ULong feature_tag,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_UShort* feature_index )
- {
- UShort n;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
- TTO_LangSys* ls;
- UShort* fi;
-
- TTO_FeatureList* fl;
- TTO_FeatureRecord* fr;
-
-
- if ( !gsub || !feature_index )
- return TT_Err_Invalid_Argument;
-
- sl = &gsub->ScriptList;
- sr = sl->ScriptRecord;
-
- fl = &gsub->FeatureList;
- fr = fl->FeatureRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- if ( language_index == 0xFFFF )
- ls = &s->DefaultLangSys;
- else
- {
- if ( language_index >= s->LangSysCount )
- return TT_Err_Invalid_Argument;
-
- ls = &lsr[language_index].LangSys;
- }
-
- fi = ls->FeatureIndex;
-
- for ( n = 0; n < ls->FeatureCount; n++ )
- {
- if ( fi[n] >= fl->FeatureCount )
- return TTO_Err_Invalid_GSUB_SubTable_Format;
-
- if ( feature_tag == fr[fi[n]].FeatureTag )
- {
- *feature_index = fi[n];
-
- return TT_Err_Ok;
- }
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- /* The next three functions return a null-terminated list */
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Query_Scripts( TTO_GSUBHeader* gsub,
- TT_ULong** script_tag_list )
- {
- UShort n;
- TT_Error error;
- ULong* stl;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
-
-
- if ( !gsub || !script_tag_list )
- return TT_Err_Invalid_Argument;
-
- sl = &gsub->ScriptList;
- sr = sl->ScriptRecord;
-
- if ( ALLOC_ARRAY( stl, sl->ScriptCount + 1, ULong ) )
- return error;
-
- for ( n = 0; n < sl->ScriptCount; n++ )
- stl[n] = sr[n].ScriptTag;
- stl[n] = 0;
-
- *script_tag_list = stl;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Query_Languages( TTO_GSUBHeader* gsub,
- TT_UShort script_index,
- TT_ULong** language_tag_list )
- {
- UShort n;
- TT_Error error;
- ULong* ltl;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
-
-
- if ( !gsub || !language_tag_list )
- return TT_Err_Invalid_Argument;
-
- sl = &gsub->ScriptList;
- sr = sl->ScriptRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- if ( ALLOC_ARRAY( ltl, s->LangSysCount + 1, ULong ) )
- return error;
-
- for ( n = 0; n < s->LangSysCount; n++ )
- ltl[n] = lsr[n].LangSysTag;
- ltl[n] = 0;
-
- *language_tag_list = ltl;
-
- return TT_Err_Ok;
- }
-
-
- /* selecting 0xFFFF for language_index asks for the values of the
- default language (DefaultLangSys) */
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Query_Features( TTO_GSUBHeader* gsub,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_ULong** feature_tag_list )
- {
- UShort n;
- TT_Error error;
- ULong* ftl;
-
- TTO_ScriptList* sl;
- TTO_ScriptRecord* sr;
- TTO_Script* s;
- TTO_LangSysRecord* lsr;
- TTO_LangSys* ls;
- UShort* fi;
-
- TTO_FeatureList* fl;
- TTO_FeatureRecord* fr;
-
-
- if ( !gsub || !feature_tag_list )
- return TT_Err_Invalid_Argument;
-
- sl = &gsub->ScriptList;
- sr = sl->ScriptRecord;
-
- fl = &gsub->FeatureList;
- fr = fl->FeatureRecord;
-
- if ( script_index >= sl->ScriptCount )
- return TT_Err_Invalid_Argument;
-
- s = &sr[script_index].Script;
- lsr = s->LangSysRecord;
-
- if ( language_index == 0xFFFF )
- ls = &s->DefaultLangSys;
- else
- {
- if ( language_index >= s->LangSysCount )
- return TT_Err_Invalid_Argument;
-
- ls = &lsr[language_index].LangSys;
- }
-
- fi = ls->FeatureIndex;
-
- if ( ALLOC_ARRAY( ftl, ls->FeatureCount + 1, ULong ) )
- return error;
-
- for ( n = 0; n < ls->FeatureCount; n++ )
- {
- if ( fi[n] >= fl->FeatureCount )
- {
- FREE( ftl );
- return TTO_Err_Invalid_GSUB_SubTable_Format;
- }
- ftl[n] = fr[fi[n]].FeatureTag;
- }
- ftl[n] = 0;
-
- *feature_tag_list = ftl;
-
- return TT_Err_Ok;
- }
-
-
- /* Do an individual subtable lookup. Returns TT_Err_Ok if substitution
- has been done, or TTO_Err_Not_Covered if not. */
-
- static TT_Error Do_Glyph_Lookup( TTO_GSUBHeader* gsub,
- UShort lookup_index,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out,
- UShort context_length,
- int nesting_level )
- {
- TT_Error error = TT_Err_Ok;
- UShort i, flags;
- TTO_Lookup* lo;
-
-
- nesting_level++;
-
- if ( nesting_level > TTO_MAX_NESTING_LEVEL )
- return TTO_Err_Too_Many_Nested_Contexts;
-
- lo = &gsub->LookupList.Lookup[lookup_index];
- flags = lo->LookupFlag;
-
- for ( i = 0; i < lo->SubTableCount; i++ )
- {
- switch ( lo->LookupType )
- {
- case GSUB_LOOKUP_SINGLE:
- error = Lookup_SingleSubst( &lo->SubTable[i].st.gsub.single,
- in, out,
- flags, context_length, gsub->gdef );
- break;
-
- case GSUB_LOOKUP_MULTIPLE:
- error = Lookup_MultipleSubst( &lo->SubTable[i].st.gsub.multiple,
- in, out,
- flags, context_length, gsub->gdef );
- break;
-
- case GSUB_LOOKUP_ALTERNATE:
- error = Lookup_AlternateSubst( gsub,
- &lo->SubTable[i].st.gsub.alternate,
- in, out,
- flags, context_length, gsub->gdef );
- break;
-
- case GSUB_LOOKUP_LIGATURE:
- error = Lookup_LigatureSubst( &lo->SubTable[i].st.gsub.ligature,
- in, out,
- flags, context_length, gsub->gdef );
- break;
-
- case GSUB_LOOKUP_CONTEXT:
- error = Lookup_ContextSubst( gsub, &lo->SubTable[i].st.gsub.context,
- in, out,
- flags, context_length, nesting_level );
- break;
-
- case GSUB_LOOKUP_CHAIN:
- error = Lookup_ChainContextSubst( gsub,
- &lo->SubTable[i].st.gsub.chain,
- in, out,
- flags, context_length,
- nesting_level );
- break;
- }
-
- /* Check whether we have a successful substitution or an error other
- than TTO_Err_Not_Covered */
-
- if ( error != TTO_Err_Not_Covered )
- return error;
- }
-
- return TTO_Err_Not_Covered;
- }
-
-
- /* apply one lookup to the input string object */
-
- static TT_Error Do_String_Lookup( TTO_GSUBHeader* gsub,
- UShort lookup_index,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out )
- {
- TT_Error error = TTO_Err_Not_Covered;
-
- UShort* properties = gsub->LookupList.Properties;
- UShort* p_in = in->properties;
- UShort* s_in = in->string;
-
- int nesting_level = 0;
-
-
- while ( in->pos < in->length )
- {
- if ( ~p_in[in->pos] & properties[lookup_index] )
- {
- /* 0xFFFF indicates that we don't have a context length yet */
- error = Do_Glyph_Lookup( gsub, lookup_index, in, out,
- 0xFFFF, nesting_level );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
- }
- else
- error = TTO_Err_Not_Covered;
-
- if ( error == TTO_Err_Not_Covered )
- if ( ADD_String( in, 1, out, 1, &s_in[in->pos], 0xFFFF, 0xFFFF ) )
- return error;
- }
-
- return error;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Add_Feature( TTO_GSUBHeader* gsub,
- TT_UShort feature_index,
- TT_UShort property )
- {
- UShort i;
-
- TTO_Feature feature;
- UShort* properties;
- UShort* index;
-
-
- if ( !gsub ||
- feature_index >= gsub->FeatureList.FeatureCount )
- return TT_Err_Invalid_Argument;
-
- properties = gsub->LookupList.Properties;
-
- feature = gsub->FeatureList.FeatureRecord[feature_index].Feature;
- index = feature.LookupListIndex;
-
- for ( i = 0; i < feature.LookupListCount; i++ )
- properties[index[i]] |= property;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Clear_Features( TTO_GSUBHeader* gsub )
- {
- UShort i;
-
- UShort* properties;
-
-
- if ( !gsub )
- return TT_Err_Invalid_Argument;
-
- properties = gsub->LookupList.Properties;
-
- for ( i = 0; i < gsub->LookupList.LookupCount; i++ )
- properties[i] = 0;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Register_Alternate_Function( TTO_GSUBHeader* gsub,
- TTO_AltFunction altfunc,
- void* data )
- {
- if ( !gsub )
- return TT_Err_Invalid_Argument;
-
- gsub->altfunc = altfunc;
- gsub->data = data;
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_GSUB_Apply_String( TTO_GSUBHeader* gsub,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out )
- {
- TT_Error error = TTO_Err_Not_Covered;
- UShort j;
-
- TTO_GSUB_String tmp1;
- TTO_GSUB_String* ptmp1;
- TTO_GSUB_String tmp2;
- TTO_GSUB_String* ptmp2;
- TTO_GSUB_String* t;
-
- UShort* properties;
-
-
- if ( !gsub ||
- !in || !out || in->length == 0 || in->pos >= in->length )
- return TT_Err_Invalid_Argument;
-
- properties = gsub->LookupList.Properties;
-
- tmp1.length = in->length;
- tmp1.allocated = in->length;
- tmp1.pos = in->pos;
- tmp1.max_ligID = 1;
-
- if ( ALLOC_ARRAY( tmp1.string, tmp1.length, UShort ) )
- return error;
- MEM_Copy( tmp1.string, in->string, in->length * sizeof ( UShort ) );
-
- /* make sure that we always have a `properties', `components', and
- `ligIDs' array in the string object */
-
- if ( ALLOC_ARRAY( tmp1.components, tmp1.length, UShort ) )
- return error;
- if ( ALLOC_ARRAY( tmp1.ligIDs, tmp1.length, UShort ) )
- return error;
- if ( ALLOC_ARRAY( tmp1.properties, tmp1.length, UShort ) )
- return error;
- if ( in->properties )
- MEM_Copy( tmp1.properties, in->properties,
- in->length * sizeof( UShort ) );
-
- tmp2.allocated = 0;
- tmp2.pos = 0;
- tmp2.string = NULL;
- tmp2.properties = NULL;
- tmp2.components = NULL;
- tmp2.ligIDs = NULL;
-
- ptmp1 = &tmp1;
- ptmp2 = &tmp2;
-
- for ( j = 0; j < gsub->LookupList.LookupCount; j++ )
- if ( properties[j] )
- {
- error = Do_String_Lookup( gsub, j, ptmp1, ptmp2 );
- if ( error && error != TTO_Err_Not_Covered )
- return error;
-
- /* flipping `in' and `out', preparing the next loop */
-
- ptmp1->pos = in->pos;
- ptmp2->length = ptmp2->pos;
- ptmp2->pos = in->pos;
- ptmp2->max_ligID = ptmp1->max_ligID;
-
- t = ptmp2;
- ptmp2 = ptmp1;
- ptmp1 = t;
- }
-
- out->length = ptmp1->length;
- out->pos = 0;
- out->allocated = ptmp1->allocated;
- out->string = ptmp1->string;
- out->components = ptmp1->components;
- out->ligIDs = ptmp1->ligIDs;
-
- if ( in->properties )
- out->properties = ptmp1->properties;
- else
- {
- FREE( ptmp1->properties );
- out->properties = NULL;
- }
-
- FREE( ptmp2->string );
- FREE( ptmp2->properties );
- FREE( ptmp2->components );
- FREE( ptmp2->ligIDs );
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxgsub.h b/Build/source/libs/libttf/extend/ftxgsub.h
deleted file mode 100644
index 463cd27240a..00000000000
--- a/Build/source/libs/libttf/extend/ftxgsub.h
+++ /dev/null
@@ -1,592 +0,0 @@
-/*******************************************************************
- *
- * ftxgsub.h
- *
- * TrueType Open GSUB table support
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 FTXOPEN_H
-#error "Don't include this file! Use ftxopen.h instead."
-#endif
-
-#ifndef FTXGSUB_H
-#define FTXGSUB_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define TTO_Err_Invalid_GSUB_SubTable_Format 0x1010
-#define TTO_Err_Invalid_GSUB_SubTable 0x1011
-
-
-/* Lookup types for glyph substitution */
-
-#define GSUB_LOOKUP_SINGLE 1
-#define GSUB_LOOKUP_MULTIPLE 2
-#define GSUB_LOOKUP_ALTERNATE 3
-#define GSUB_LOOKUP_LIGATURE 4
-#define GSUB_LOOKUP_CONTEXT 5
-#define GSUB_LOOKUP_CHAIN 6
-
-
-/* Use this if a feature applies to all glyphs */
-
-#define ALL_GLYPHS 0xFFFF
-
-
- /* A pointer to a function which selects the alternate glyph. `pos' is
- the position of the glyph with index `glyphID', `num_alternates'
- gives the number of alternates in the `alternates' array. `data'
- points to the user-defined structure specified during a call to
- TT_GSUB_Register_Alternate_Function(). The function must return an
- index into the `alternates' array. */
-
- typedef TT_UShort (*TTO_AltFunction)(TT_ULong pos,
- TT_UShort glyphID,
- TT_UShort num_alternates,
- TT_UShort* alternates,
- void* data );
-
-
- struct TTO_GSUBHeader_
- {
- TT_Bool loaded;
- TT_ULong offset;
-
- TT_Fixed Version;
-
- TTO_ScriptList ScriptList;
- TTO_FeatureList FeatureList;
- TTO_LookupList LookupList;
-
- TTO_GDEFHeader* gdef;
-
- /* the next two fields are used for an alternate substitution callback
- function to select the proper alternate glyph. */
-
- TTO_AltFunction altfunc;
- void* data;
- };
-
- typedef struct TTO_GSUBHeader_ TTO_GSUBHeader;
-
-
- /* LookupType 1 */
-
- struct TTO_SingleSubstFormat1_
- {
- TT_Short DeltaGlyphID; /* constant added to get
- substitution glyph index */
- };
-
- typedef struct TTO_SingleSubstFormat1_ TTO_SingleSubstFormat1;
-
-
- struct TTO_SingleSubstFormat2_
- {
- TT_UShort GlyphCount; /* number of glyph IDs in
- Substitute array */
- TT_UShort* Substitute; /* array of substitute glyph IDs */
- };
-
- typedef struct TTO_SingleSubstFormat2_ TTO_SingleSubstFormat2;
-
-
- struct TTO_SingleSubst_
- {
- TT_UShort SubstFormat; /* 1 or 2 */
- TTO_Coverage Coverage; /* Coverage table */
-
- union
- {
- TTO_SingleSubstFormat1 ssf1;
- TTO_SingleSubstFormat2 ssf2;
- } ssf;
- };
-
- typedef struct TTO_SingleSubst_ TTO_SingleSubst;
-
-
- /* LookupType 2 */
-
- struct TTO_Sequence_
- {
- TT_UShort GlyphCount; /* number of glyph IDs in the
- Substitute array */
- TT_UShort* Substitute; /* string of glyph IDs to
- substitute */
- };
-
- typedef struct TTO_Sequence_ TTO_Sequence;
-
-
- struct TTO_MultipleSubst_
- {
- TT_UShort SubstFormat; /* always 1 */
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort SequenceCount; /* number of Sequence tables */
- TTO_Sequence* Sequence; /* array of Sequence tables */
- };
-
- typedef struct TTO_MultipleSubst_ TTO_MultipleSubst;
-
-
- /* LookupType 3 */
-
- struct TTO_AlternateSet_
- {
- TT_UShort GlyphCount; /* number of glyph IDs in the
- Alternate array */
- TT_UShort* Alternate; /* array of alternate glyph IDs */
- };
-
- typedef struct TTO_AlternateSet_ TTO_AlternateSet;
-
-
- struct TTO_AlternateSubst_
- {
- TT_UShort SubstFormat; /* always 1 */
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort AlternateSetCount;
- /* number of AlternateSet tables */
- TTO_AlternateSet* AlternateSet; /* array of AlternateSet tables */
- };
-
- typedef struct TTO_AlternateSubst_ TTO_AlternateSubst;
-
-
- /* LookupType 4 */
-
- struct TTO_Ligature_
- {
- TT_UShort LigGlyph; /* glyphID of ligature
- to substitute */
- TT_UShort ComponentCount; /* number of components in ligature */
- TT_UShort* Component; /* array of component glyph IDs */
- };
-
- typedef struct TTO_Ligature_ TTO_Ligature;
-
-
- struct TTO_LigatureSet_
- {
- TT_UShort LigatureCount; /* number of Ligature tables */
- TTO_Ligature* Ligature; /* array of Ligature tables */
- };
-
- typedef struct TTO_LigatureSet_ TTO_LigatureSet;
-
-
- struct TTO_LigatureSubst_
- {
- TT_UShort SubstFormat; /* always 1 */
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort LigatureSetCount; /* number of LigatureSet tables */
- TTO_LigatureSet* LigatureSet; /* array of LigatureSet tables */
- };
-
- typedef struct TTO_LigatureSubst_ TTO_LigatureSubst;
-
-
- /* needed by both lookup type 5 and 6 */
-
- struct TTO_SubstLookupRecord_
- {
- TT_UShort SequenceIndex; /* index into current
- glyph sequence */
- TT_UShort LookupListIndex; /* Lookup to apply to that pos. */
- };
-
- typedef struct TTO_SubstLookupRecord_ TTO_SubstLookupRecord;
-
-
- /* LookupType 5 */
-
- struct TTO_SubRule_
- {
- TT_UShort GlyphCount; /* total number of input glyphs */
- TT_UShort SubstCount; /* number of SubstLookupRecord
- tables */
- TT_UShort* Input; /* array of input glyph IDs */
- TTO_SubstLookupRecord* SubstLookupRecord;
- /* array of SubstLookupRecord
- tables */
- };
-
- typedef struct TTO_SubRule_ TTO_SubRule;
-
-
- struct TTO_SubRuleSet_
- {
- TT_UShort SubRuleCount; /* number of SubRule tables */
- TTO_SubRule* SubRule; /* array of SubRule tables */
- };
-
- typedef struct TTO_SubRuleSet_ TTO_SubRuleSet;
-
-
- struct TTO_ContextSubstFormat1_
- {
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort SubRuleSetCount; /* number of SubRuleSet tables */
- TTO_SubRuleSet* SubRuleSet; /* array of SubRuleSet tables */
- };
-
- typedef struct TTO_ContextSubstFormat1_ TTO_ContextSubstFormat1;
-
-
- struct TTO_SubClassRule_
- {
- TT_UShort GlyphCount; /* total number of context classes */
- TT_UShort SubstCount; /* number of SubstLookupRecord
- tables */
- TT_UShort* Class; /* array of classes */
- TTO_SubstLookupRecord* SubstLookupRecord;
- /* array of SubstLookupRecord
- tables */
- };
-
- typedef struct TTO_SubClassRule_ TTO_SubClassRule;
-
-
- struct TTO_SubClassSet_
- {
- TT_UShort SubClassRuleCount;
- /* number of SubClassRule tables */
- TTO_SubClassRule* SubClassRule; /* array of SubClassRule tables */
- };
-
- typedef struct TTO_SubClassSet_ TTO_SubClassSet;
-
-
- /* The `MaxContextLength' field is not defined in the TTO specification
- but simplifies the implementation of this format. It holds the
- maximal context length used in the context rules. */
-
- struct TTO_ContextSubstFormat2_
- {
- TT_UShort MaxContextLength;
- /* maximal context length */
- TTO_Coverage Coverage; /* Coverage table */
- TTO_ClassDefinition ClassDef; /* ClassDef table */
- TT_UShort SubClassSetCount;
- /* number of SubClassSet tables */
- TTO_SubClassSet* SubClassSet; /* array of SubClassSet tables */
- };
-
- typedef struct TTO_ContextSubstFormat2_ TTO_ContextSubstFormat2;
-
-
- struct TTO_ContextSubstFormat3_
- {
- TT_UShort GlyphCount; /* number of input glyphs */
- TT_UShort SubstCount; /* number of SubstLookupRecords */
- TTO_Coverage* Coverage; /* array of Coverage tables */
- TTO_SubstLookupRecord* SubstLookupRecord;
- /* array of substitution lookups */
- };
-
- typedef struct TTO_ContextSubstFormat3_ TTO_ContextSubstFormat3;
-
-
- struct TTO_ContextSubst_
- {
- TT_UShort SubstFormat; /* 1, 2, or 3 */
-
- union
- {
- TTO_ContextSubstFormat1 csf1;
- TTO_ContextSubstFormat2 csf2;
- TTO_ContextSubstFormat3 csf3;
- } csf;
- };
-
- typedef struct TTO_ContextSubst_ TTO_ContextSubst;
-
-
- /* LookupType 6 */
-
- struct TTO_ChainSubRule_
- {
- TT_UShort BacktrackGlyphCount;
- /* total number of backtrack glyphs */
- TT_UShort* Backtrack; /* array of backtrack glyph IDs */
- TT_UShort InputGlyphCount;
- /* total number of input glyphs */
- TT_UShort* Input; /* array of input glyph IDs */
- TT_UShort LookaheadGlyphCount;
- /* total number of lookahead glyphs */
- TT_UShort* Lookahead; /* array of lookahead glyph IDs */
- TT_UShort SubstCount; /* number of SubstLookupRecords */
- TTO_SubstLookupRecord* SubstLookupRecord;
- /* array of SubstLookupRecords */
- };
-
- typedef struct TTO_ChainSubRule_ TTO_ChainSubRule;
-
-
- struct TTO_ChainSubRuleSet_
- {
- TT_UShort ChainSubRuleCount;
- /* number of ChainSubRule tables */
- TTO_ChainSubRule* ChainSubRule; /* array of ChainSubRule tables */
- };
-
- typedef struct TTO_ChainSubRuleSet_ TTO_ChainSubRuleSet;
-
-
- struct TTO_ChainContextSubstFormat1_
- {
- TTO_Coverage Coverage; /* Coverage table */
- TT_UShort ChainSubRuleSetCount;
- /* number of ChainSubRuleSet tables */
- TTO_ChainSubRuleSet* ChainSubRuleSet;
- /* array of ChainSubRuleSet tables */
- };
-
- typedef struct TTO_ChainContextSubstFormat1_ TTO_ChainContextSubstFormat1;
-
-
- struct TTO_ChainSubClassRule_
- {
- TT_UShort BacktrackGlyphCount;
- /* total number of backtrack
- classes */
- TT_UShort* Backtrack; /* array of backtrack classes */
- TT_UShort InputGlyphCount;
- /* total number of context classes */
- TT_UShort* Input; /* array of context classes */
- TT_UShort LookaheadGlyphCount;
- /* total number of lookahead
- classes */
- TT_UShort* Lookahead; /* array of lookahead classes */
- TT_UShort SubstCount; /* number of SubstLookupRecords */
- TTO_SubstLookupRecord* SubstLookupRecord;
- /* array of substitution lookups */
- };
-
- typedef struct TTO_ChainSubClassRule_ TTO_ChainSubClassRule;
-
-
- struct TTO_ChainSubClassSet_
- {
- TT_UShort ChainSubClassRuleCount;
- /* number of ChainSubClassRule
- tables */
- TTO_ChainSubClassRule* ChainSubClassRule;
- /* array of ChainSubClassRule
- tables */
- };
-
- typedef struct TTO_ChainSubClassSet_ TTO_ChainSubClassSet;
-
-
- /* The `MaxXXXLength' fields are not defined in the TTO specification
- but simplifies the implementation of this format. It holds the
- maximal context length used in the specific context rules. */
-
- struct TTO_ChainContextSubstFormat2_
- {
- TTO_Coverage Coverage; /* Coverage table */
-
- TT_UShort MaxBacktrackLength;
- /* maximal backtrack length */
- TTO_ClassDefinition BacktrackClassDef;
- /* BacktrackClassDef table */
- TT_UShort MaxInputLength;
- /* maximal input length */
- TTO_ClassDefinition InputClassDef;
- /* InputClassDef table */
- TT_UShort MaxLookaheadLength;
- /* maximal lookahead length */
- TTO_ClassDefinition LookaheadClassDef;
- /* LookaheadClassDef table */
-
- TT_UShort ChainSubClassSetCount;
- /* number of ChainSubClassSet
- tables */
- TTO_ChainSubClassSet* ChainSubClassSet;
- /* array of ChainSubClassSet
- tables */
- };
-
- typedef struct TTO_ChainContextSubstFormat2_ TTO_ChainContextSubstFormat2;
-
-
- struct TTO_ChainContextSubstFormat3_
- {
- TT_UShort BacktrackGlyphCount;
- /* number of backtrack glyphs */
- TTO_Coverage* BacktrackCoverage;
- /* array of backtrack Coverage
- tables */
- TT_UShort InputGlyphCount;
- /* number of input glyphs */
- TTO_Coverage* InputCoverage;
- /* array of input coverage
- tables */
- TT_UShort LookaheadGlyphCount;
- /* number of lookahead glyphs */
- TTO_Coverage* LookaheadCoverage;
- /* array of lookahead coverage
- tables */
- TT_UShort SubstCount; /* number of SubstLookupRecords */
- TTO_SubstLookupRecord* SubstLookupRecord;
- /* array of substitution lookups */
- };
-
- typedef struct TTO_ChainContextSubstFormat3_ TTO_ChainContextSubstFormat3;
-
-
- struct TTO_ChainContextSubst_
- {
- TT_UShort SubstFormat; /* 1, 2, or 3 */
-
- union
- {
- TTO_ChainContextSubstFormat1 ccsf1;
- TTO_ChainContextSubstFormat2 ccsf2;
- TTO_ChainContextSubstFormat3 ccsf3;
- } ccsf;
- };
-
- typedef struct TTO_ChainContextSubst_ TTO_ChainContextSubst;
-
-
- union TTO_GSUB_SubTable_
- {
- TTO_SingleSubst single;
- TTO_MultipleSubst multiple;
- TTO_AlternateSubst alternate;
- TTO_LigatureSubst ligature;
- TTO_ContextSubst context;
- TTO_ChainContextSubst chain;
- };
-
- typedef union TTO_GSUB_SubTable_ TTO_GSUB_SubTable;
-
-
- /* A simple string object. It can both `send' and `receive' data.
- In case of sending, `length' and `pos' will be used. In case of
- receiving, `pos' points to the first free slot, and `allocated'
- specifies the amount of allocated memory (and the `length' field
- will be ignored). The routine TT_Add_String() will increase the
- amount of memory if necessary. After end of receive, `length'
- should be set to the value of `pos', and `pos' will be set to zero.
-
- `properties' (which is treated as a bit field) gives the glyph's
- properties: If a certain bit is set for a glyph, the feature which
- has the same bit set in its property value is applied.
-
- `components' is an internal array which tracks components of
- ligatures. We need this for MarkToLigature Attachment Positioning
- Subtables (in GPOS) together with `ligIDs' (which is used to mark
- ligatures and the skipped glyphs during a ligature lookup).
- `max_ligID' is increased after a successful ligature lookup.
-
- NEVER modify any elements of the structure! You should rather copy
- its contents if necessary.
-
- TT_Add_String() will also handle allocation; you should use
- free() in case you want to destroy the arrays in the object. */
-
- struct TTO_GSUB_String_
- {
- TT_ULong length;
- TT_ULong pos;
- TT_ULong allocated;
- TT_UShort* string;
- TT_UShort* properties;
- TT_UShort* components;
- TT_UShort max_ligID;
- TT_UShort* ligIDs;
- };
-
- typedef struct TTO_GSUB_String_ TTO_GSUB_String;
-
-
- /* finally, the GSUB API */
-
- EXPORT_DEF
- TT_Error TT_Init_GSUB_Extension( TT_Engine engine );
-
- EXPORT_DEF
- TT_Error TT_Load_GSUB_Table( TT_Face face,
- TTO_GSUBHeader* gsub,
- TTO_GDEFHeader* gdef );
-
- EXPORT_DEF
- TT_Error TT_GSUB_Select_Script( TTO_GSUBHeader* gsub,
- TT_ULong script_tag,
- TT_UShort* script_index );
- EXPORT_DEF
- TT_Error TT_GSUB_Select_Language( TTO_GSUBHeader* gsub,
- TT_ULong language_tag,
- TT_UShort script_index,
- TT_UShort* language_index,
- TT_UShort* req_feature_index );
- EXPORT_DEF
- TT_Error TT_GSUB_Select_Feature( TTO_GSUBHeader* gsub,
- TT_ULong feature_tag,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_UShort* feature_index );
-
- EXPORT_DEF
- TT_Error TT_GSUB_Query_Scripts( TTO_GSUBHeader* gsub,
- TT_ULong** script_tag_list );
- EXPORT_DEF
- TT_Error TT_GSUB_Query_Languages( TTO_GSUBHeader* gsub,
- TT_UShort script_index,
- TT_ULong** language_tag_list );
- EXPORT_DEF
- TT_Error TT_GSUB_Query_Features( TTO_GSUBHeader* gsub,
- TT_UShort script_index,
- TT_UShort language_index,
- TT_ULong** feature_tag_list );
-
- EXPORT_DEF
- TT_Error TT_GSUB_Add_Feature( TTO_GSUBHeader* gsub,
- TT_UShort feature_index,
- TT_UShort property );
- EXPORT_DEF
- TT_Error TT_GSUB_Clear_Features( TTO_GSUBHeader* gsub );
-
- EXPORT_DEF
- TT_Error TT_GSUB_Register_Alternate_Function( TTO_GSUBHeader* gsub,
- TTO_AltFunction altfunc,
- void* data );
-
- EXPORT_DEF
- TT_Error TT_GSUB_Apply_String( TTO_GSUBHeader* gsub,
- TTO_GSUB_String* in,
- TTO_GSUB_String* out );
-
- EXPORT_DEF
- TT_Error TT_GSUB_Add_String( TTO_GSUB_String* in,
- TT_UShort num_in,
- TTO_GSUB_String* out,
- TT_UShort num_out,
- TT_UShort* glyph_data,
- TT_UShort component,
- TT_UShort ligID );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXGSUB_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxkern.c b/Build/source/libs/libttf/extend/ftxkern.c
deleted file mode 100644
index 94e10822816..00000000000
--- a/Build/source/libs/libttf/extend/ftxkern.c
+++ /dev/null
@@ -1,603 +0,0 @@
-/*******************************************************************
- *
- * ftxkern.c 1.0
- *
- * Kerning support extension.
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 kerning support is currently part of the engine extensions.
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-#include "ftxkern.h"
-
-#include "ttextend.h"
-#include "tttypes.h"
-#include "ttdebug.h"
-#include "ttmemory.h"
-#include "ttfile.h"
-#include "ttobjs.h"
-#include "ttload.h" /* For the macros */
-#include "tttags.h"
-
-#include <stdlib.h> /* for qsort */
-
-/* Required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_any
-
-#define KERNING_ID Build_Extension_ID( 'k', 'e', 'r', 'n' )
-
-#undef KERN_INDEX
-#define KERN_INDEX(g1,g2) (((TT_ULong)g1 << 16) | g2)
-
- /* compare two kerning pairs, for qsort() */
- static
- int __cdecl compare_kern_pairs( const void* a, const void* b )
- {
- TT_Kern_0_Pair* pair1 = (TT_Kern_0_Pair*)a;
- TT_Kern_0_Pair* pair2 = (TT_Kern_0_Pair*)b;
-
- TT_ULong index1 = KERN_INDEX( pair1->left, pair1->right );
- TT_ULong index2 = KERN_INDEX( pair2->left, pair2->right );
-
- return ( index1 < index2 ? -1 :
- ( index1 > index2 ? 1 : 0 ));
- }
-
- /* check whether the kern table is sorted */
- static
- int is_sorted( TT_Kern_0_Pair* table, TT_ULong num_pairs )
- {
- TT_ULong i;
-
- for ( i=1; i<num_pairs; i++ )
- {
- if ( compare_kern_pairs(&table[i-1], &table[i]) != -1 )
- return 0;
- }
- return 1;
- }
-
-
-/*******************************************************************
- *
- * Function : SubTable_Load_0
- *
- * Description : Loads a format 0 kerning subtable data.
- *
- * Input : kern0 pointer to the kerning subtable
- *
- * Output : error code
- *
- * Notes : - Assumes that the stream is already `used'
- *
- * - the file cursor must be set by the caller
- *
- * - in case of error, the function _must_ destroy
- * the data it allocates!
- *
- ******************************************************************/
-
- static TT_Error Subtable_Load_0( TT_Kern_0* kern0,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort num_pairs, n;
-
-
- if ( ACCESS_Frame( 8L ) )
- return error;
-
- num_pairs = GET_UShort();
- kern0->nPairs = 0;
- kern0->searchRange = GET_UShort();
- kern0->entrySelector = GET_UShort();
- kern0->rangeShift = GET_UShort();
-
- /* we only set kern0->nPairs if the subtable has been loaded */
-
- FORGET_Frame();
-
- if ( ALLOC_ARRAY( kern0->pairs, num_pairs, TT_Kern_0_Pair ) )
- return error;
-
- if ( ACCESS_Frame( num_pairs * 6L ) )
- goto Fail;
-
- for ( n = 0; n < num_pairs; n++ )
- {
- kern0->pairs[n].left = GET_UShort();
- kern0->pairs[n].right = GET_UShort();
- kern0->pairs[n].value = GET_UShort();
-
- if ( kern0->pairs[n].left >= input->numGlyphs ||
- kern0->pairs[n].right >= input->numGlyphs )
- {
- FORGET_Frame();
- error = TT_Err_Invalid_Kerning_Table;
- goto Fail;
- }
- }
-
- FORGET_Frame();
-
- /* we're ok, set the pairs count */
- kern0->nPairs = num_pairs;
-
- /* the spec says that the kerning pairs must be sorted,
- but some brain damaged font producers don't do that correctly.. (JvR 3/4/2000) */
- if ( !is_sorted( kern0->pairs, num_pairs ) )
- qsort( kern0->pairs, num_pairs, sizeof(TT_Kern_0_Pair), compare_kern_pairs );
-
- return TT_Err_Ok;
-
- Fail:
- FREE( kern0->pairs );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : SubTable_Load_2
- *
- * Description : Loads a format 2 kerning subtable data.
- *
- * Input : kern2 pointer to the kerning subtable
- * length subtable length. This is required as
- * the subheader doesn't give any indication
- * of the size of the `array' table.
- *
- * Output : error code
- *
- * Notes : - Assumes that the stream is already `used'
- *
- * - the file cursor must be set by the caller
- *
- * - in case of error, the function _must_ destroy
- * the data it allocates!
- *
- ******************************************************************/
-
- static TT_Error Subtable_Load_2( TT_Kern_2* kern2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- Long table_base;
-
- UShort left_offset, right_offset, array_offset;
- ULong array_size;
- UShort left_max, right_max, n;
-
-
- /* record the table offset */
- table_base = FILE_Pos();
-
- if ( ACCESS_Frame( 8L ) )
- return error;
-
- kern2->rowWidth = GET_UShort();
- left_offset = GET_UShort();
- right_offset = GET_UShort();
- array_offset = GET_UShort();
-
- FORGET_Frame();
-
- /* first load left and right glyph classes */
-
- if ( FILE_Seek( table_base + left_offset ) ||
- ACCESS_Frame( 4L ) )
- return error;
-
- kern2->leftClass.firstGlyph = GET_UShort();
- kern2->leftClass.nGlyphs = GET_UShort();
-
- FORGET_Frame();
-
- if ( ALLOC_ARRAY( kern2->leftClass.classes,
- kern2->leftClass.nGlyphs,
- UShort ) )
- return error;
-
- /* load left offsets */
-
- if ( ACCESS_Frame( kern2->leftClass.nGlyphs * 2L ) )
- goto Fail_Left;
-
- for ( n = 0; n < kern2->leftClass.nGlyphs; n++ )
- kern2->leftClass.classes[n] = GET_UShort();
-
- FORGET_Frame();
-
- /* right class */
-
- if ( FILE_Seek( table_base + right_offset ) ||
- ACCESS_Frame( 4L ) )
- goto Fail_Left;
-
- kern2->rightClass.firstGlyph = GET_UShort();
- kern2->rightClass.nGlyphs = GET_UShort();
-
- FORGET_Frame();
-
- if ( ALLOC_ARRAY( kern2->rightClass.classes,
- kern2->rightClass.nGlyphs,
- UShort ) )
- goto Fail_Left;
-
- /* load right offsets */
-
- if ( ACCESS_Frame( kern2->rightClass.nGlyphs * 2L ) )
- goto Fail_Right;
-
- for ( n = 0; n < kern2->rightClass.nGlyphs; n++ )
- kern2->rightClass.classes[n] = GET_UShort();
-
- FORGET_Frame();
-
- /* Now load the kerning array. We don't have its size, we */
- /* must compute it from what we know. */
-
- /* We thus compute the maximum left and right offsets and */
- /* add them to get the array size. */
-
- left_max = right_max = 0;
-
- for ( n = 0; n < kern2->leftClass.nGlyphs; n++ )
- left_max = MAX( left_max, kern2->leftClass.classes[n] );
-
- for ( n = 0; n < kern2->rightClass.nGlyphs; n++ )
- right_max = MAX( right_max, kern2->leftClass.classes[n] );
-
- array_size = left_max + right_max + 2;
-
- if ( ALLOC( kern2->array, array_size ) )
- goto Fail_Right;
-
- if ( ACCESS_Frame( array_size ) )
- goto Fail_Array;
-
- for ( n = 0; n < array_size/2; n++ )
- kern2->array[n] = GET_Short();
-
- FORGET_Frame();
-
- /* we're good now */
-
- return TT_Err_Ok;
-
- Fail_Array:
- FREE( kern2->array );
-
- Fail_Right:
- FREE( kern2->rightClass.classes );
- kern2->rightClass.nGlyphs = 0;
-
- Fail_Left:
- FREE( kern2->leftClass.classes );
- kern2->leftClass.nGlyphs = 0;
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Kerning_Create
- *
- * Description : Creates the kerning directory if a face is
- * loaded. The tables however are loaded on
- * demand to save space.
- *
- * Input : face pointer to the parent face object
- * kern pointer to the extension's kerning field
- *
- * Output : error code
- *
- * Notes : as in all constructors, the memory allocated isn't
- * released in case of failure. Rather, the task is left
- * to the destructor (which is called if an error
- * occurs during the loading of a face).
- *
- ******************************************************************/
-
- static TT_Error Kerning_Create( void* ext,
- PFace face )
- {
- DEFINE_LOAD_LOCALS( face->stream );
-
- TT_Kerning* kern = (TT_Kerning*)ext;
- UShort num_tables;
- Long table;
-
- TT_Kern_Subtable* sub;
-
-
- /* by convention */
- if ( !kern )
- return TT_Err_Ok;
-
- /* Now load the kerning directory. We're called from the face */
- /* constructor. We thus need not use the stream. */
-
- kern->version = 0;
- kern->nTables = 0;
- kern->tables = NULL;
-
- table = TT_LookUp_Table( face, TTAG_kern );
- if ( table < 0 )
- return TT_Err_Ok; /* The table is optional */
-
- if ( FILE_Seek( face->dirTables[table].Offset ) ||
- ACCESS_Frame( 4L ) )
- return error;
-
- kern->version = GET_UShort();
- num_tables = GET_UShort();
-
- FORGET_Frame();
-
- /* we don't set kern->nTables until we have allocated the array */
-
- if ( ALLOC_ARRAY( kern->tables, num_tables, TT_Kern_Subtable ) )
- return error;
-
- kern->nTables = num_tables;
-
- /* now load the directory entries, but do _not_ load the tables ! */
-
- sub = kern->tables;
-
- for ( table = 0; table < num_tables; table++ )
- {
- if ( ACCESS_Frame( 6L ) )
- return error;
-
- sub->loaded = FALSE; /* redundant, but good to see */
- sub->version = GET_UShort();
- sub->length = GET_UShort() - 6; /* substract header length */
- sub->format = GET_Byte();
- sub->coverage = GET_Byte();
-
- FORGET_Frame();
-
- sub->offset = FILE_Pos();
-
- /* now skip to the next table */
-
- if ( FILE_Skip( sub->length ) )
- return error;
-
- sub++;
- }
-
- /* that's fine, leave now */
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Kerning_Destroy
- *
- * Description : Destroys all kerning information.
- *
- * Input : kern pointer to the extension's kerning field
- *
- * Output : error code
- *
- * Notes : This function is a destructor; it must be able
- * to destroy partially built tables.
- *
- ******************************************************************/
-
- static TT_Error Kerning_Destroy( void* ext,
- PFace face )
- {
- TT_Kerning* kern = (TT_Kerning*)ext;
- TT_Kern_Subtable* sub;
- UShort n;
-
-
- /* by convention */
- if ( !kern )
- return TT_Err_Ok;
-
- if ( kern->nTables == 0 )
- return TT_Err_Ok; /* no tables to release */
-
- /* scan the table directory and release loaded entries */
-
- sub = kern->tables;
- for ( n = 0; n < kern->nTables; n++ )
- {
- if ( sub->loaded )
- {
- switch ( sub->format )
- {
- case 0:
- FREE( sub->t.kern0.pairs );
- sub->t.kern0.nPairs = 0;
- sub->t.kern0.searchRange = 0;
- sub->t.kern0.entrySelector = 0;
- sub->t.kern0.rangeShift = 0;
- break;
-
- case 2:
- FREE( sub->t.kern2.leftClass.classes );
- sub->t.kern2.leftClass.firstGlyph = 0;
- sub->t.kern2.leftClass.nGlyphs = 0;
-
- FREE( sub->t.kern2.rightClass.classes );
- sub->t.kern2.rightClass.firstGlyph = 0;
- sub->t.kern2.rightClass.nGlyphs = 0;
-
- FREE( sub->t.kern2.array );
- sub->t.kern2.rowWidth = 0;
- break;
-
- default:
- ; /* invalid subtable format - do nothing */
- }
-
- sub->loaded = FALSE;
- sub->version = 0;
- sub->offset = 0;
- sub->length = 0;
- sub->coverage = 0;
- sub->format = 0;
- }
- sub++;
- }
-
- FREE( kern->tables );
- kern->nTables = 0;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Kerning_Directory
- *
- * Description : Returns a given face's kerning directory.
- *
- * Input : face handle to the face object
- * directory pointer to client's target directory
- *
- * Output : error code
- *
- * Notes : The kerning table directory is loaded with the face
- * through the extension constructor. However, the kerning
- * tables themselves are only loaded on demand, as they
- * may represent a lot of data, unneeded by most uses of
- * the engine.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Kerning_Directory( TT_Face face,
- TT_Kerning* directory )
- {
- PFace faze = HANDLE_Face( face );
- TT_Error error;
- TT_Kerning* kerning;
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- /* copy directory header */
- error = TT_Extension_Get( faze, KERNING_ID, (void**)&kerning );
- if ( !error )
- *directory = *kerning;
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Load_Kerning_Table
- *
- * Description : Loads a kerning table intro memory.
- *
- * Input : face face handle
- * kern_index index in the face's kerning directory
- *
- * Output : error code
- *
- * Notes :
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Load_Kerning_Table( TT_Face face,
- TT_UShort kern_index )
- {
- TT_Error error;
- TT_Stream stream;
-
- TT_Kerning* kern;
- TT_Kern_Subtable* sub;
-
-
- PFace faze = HANDLE_Face( face );
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- error = TT_Extension_Get( faze, KERNING_ID, (void**)&kern );
- if ( error )
- return error;
-
- if ( kern->nTables == 0 )
- return TT_Err_Table_Missing;
-
- if ( kern_index >= kern->nTables )
- return TT_Err_Invalid_Argument;
-
- sub = kern->tables + kern_index;
-
- if ( sub->format != 0 && sub->format != 2 )
- return TT_Err_Invalid_Kerning_Table_Format;
-
- /* now access stream */
- if ( USE_Stream( faze->stream, stream ) )
- return error;
-
- if ( FILE_Seek( sub->offset ) )
- goto Fail;
-
- if ( sub->format == 0 )
- error = Subtable_Load_0( &sub->t.kern0, faze );
- else if ( sub->format == 2 )
- error = Subtable_Load_2( &sub->t.kern2, faze );
-
- if ( !error )
- sub->loaded = TRUE;
-
- Fail:
- /* release stream */
- DONE_Stream( stream );
-
- return error;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Init_Kerning_Extension( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
- TT_Error error;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- error = TT_Register_Extension( _engine,
- KERNING_ID,
- sizeof ( TT_Kerning ),
- Kerning_Create,
- Kerning_Destroy );
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxkern.h b/Build/source/libs/libttf/extend/ftxkern.h
deleted file mode 100644
index 06e221e4be0..00000000000
--- a/Build/source/libs/libttf/extend/ftxkern.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*******************************************************************
- *
- * ftxkern.h 1.0
- *
- * High-Level API Kerning extension
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 kerning support is currently part of the engine extensions.
- *
- * This file should _not_ depend on engine internal types.
- *
- ******************************************************************/
-
-#ifndef FTXKERN_H
-#define FTXKERN_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* The kerning support in FreeType is minimal. This means that */
- /* we do not try to interpret the kerning data in any way to */
- /* `cook' it for a user application. This API lets you access */
- /* directly the kerning tables found in the TrueType file; it's */
- /* up to the client application to apply its own processing on */
- /* these. */
-
- /* The reason for this is that we generally do not encourage */
- /* feature-bloat of the core engine. Moreover, not all */
- /* libraries or font servers really need kerning data, or all */
- /* formats of this data. */
-
- /************** kerning error codes *****************************/
-
- /* we choose the class 0x0A for our errors, this should not */
- /* match with any error code class used in any other extension */
-
-#define TT_Err_Invalid_Kerning_Table_Format 0x0A00
-#define TT_Err_Invalid_Kerning_Table 0x0A01
-
-
- /********** structures definitions ******************************/
-
- /* Remember that all types and function are accessible by client */
- /* applications in this section, and thus should have the `TT_' */
- /* prefix. */
-
- /* format 0 kerning pair */
-
- struct TT_Kern_0_Pair_
- {
- TT_UShort left; /* index of left glyph in pair */
- TT_UShort right; /* index of right glyph in pair */
- TT_FWord value; /* kerning value */
- };
-
- typedef struct TT_Kern_0_Pair_ TT_Kern_0_Pair;
-
-
- /* format 0 kerning subtable */
-
- struct TT_Kern_0_
- {
- TT_UShort nPairs; /* number of kerning pairs */
-
- TT_UShort searchRange; /* these values are defined by the TT spec */
- TT_UShort entrySelector; /* for table searchs. */
- TT_UShort rangeShift;
-
- TT_Kern_0_Pair* pairs; /* a table of nPairs `pairs' */
- };
-
- typedef struct TT_Kern_0_ TT_Kern_0;
-
-
- /* format 2 kerning glyph class */
-
- struct TT_Kern_2_Class_
- {
- TT_UShort firstGlyph; /* first glyph in range */
- TT_UShort nGlyphs; /* number of glyphs in range */
- TT_UShort* classes; /* a table giving for each ranged glyph */
- /* its class offset in the subtable pairs */
- /* two-dimensional array */
- };
-
- typedef struct TT_Kern_2_Class_ TT_Kern_2_Class;
-
-
- /* format 2 kerning subtable */
-
- struct TT_Kern_2_
- {
- TT_UShort rowWidth; /* length of one row in bytes */
- TT_Kern_2_Class leftClass; /* left class table */
- TT_Kern_2_Class rightClass; /* right class table */
- TT_FWord* array; /* 2-dimensional kerning values array */
- };
-
- typedef struct TT_Kern_2_ TT_Kern_2;
-
-
- /* kerning subtable */
-
- struct TT_Kern_Subtable_
- {
- TT_Bool loaded; /* boolean; indicates whether the table is */
- /* loaded */
- TT_UShort version; /* table version number */
- TT_Long offset; /* file offset of table */
- TT_UShort length; /* length of table, _excluding_ header */
- TT_Byte coverage; /* lower 8 bit of the coverage table entry */
- TT_Byte format; /* the subtable format, as found in the */
- /* higher 8 bits of the coverage table entry */
- union
- {
- TT_Kern_0 kern0;
- TT_Kern_2 kern2;
- } t;
- };
-
- typedef struct TT_Kern_Subtable_ TT_Kern_Subtable;
-
-
- struct TT_Kerning_
- {
- TT_UShort version; /* kern table version number. starts at 0 */
- TT_UShort nTables; /* number of tables */
-
- TT_Kern_Subtable* tables; /* the kerning sub-tables */
- };
-
- typedef struct TT_Kerning_ TT_Kerning;
-
-
-
- /***************** high-level API extension **************************/
-
- /* Initialize Kerning extension, must be called after */
- /* TT_Init_FreeType(). There is no need for a finalizer */
- EXPORT_DEF
- TT_Error TT_Init_Kerning_Extension( TT_Engine engine );
-
- /* Note on the implemented mechanism: */
-
- /* The kerning table directory is loaded with the face through the */
- /* extension constructor. However, the tables will only be loaded */
- /* on demand, as they may represent a lot of data, unnecessary to */
- /* most applications. */
-
- /* Queries a pointer to the kerning directory for the face object */
- EXPORT_DEF
- TT_Error TT_Get_Kerning_Directory( TT_Face face,
- TT_Kerning* directory );
-
- /* Load the kerning table number `kern_index' in the kerning */
- /* directory. The table will stay in memory until the `face' */
- /* face is destroyed. */
- EXPORT_DEF
- TT_Error TT_Load_Kerning_Table( TT_Face face,
- TT_UShort kern_index );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXKERN_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxopen.c b/Build/source/libs/libttf/extend/ftxopen.c
deleted file mode 100644
index bbf08bd1991..00000000000
--- a/Build/source/libs/libttf/extend/ftxopen.c
+++ /dev/null
@@ -1,1439 +0,0 @@
-/*******************************************************************
- *
- * ftxopen.c
- *
- * TrueType Open common table support.
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "tttypes.h"
-#include "ttload.h"
-#include "ttextend.h"
-#include "ttmemory.h"
-#include "ttfile.h"
-
-#include "ftxopen.h"
-#include "ftxopenf.h"
-
-
- /***************************
- * Script related functions
- ***************************/
-
-
- /* LangSys */
-
- static TT_Error Load_LangSys( TTO_LangSys* ls,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* fi;
-
-
- if ( ACCESS_Frame( 6L ) )
- return error;
-
- ls->LookupOrderOffset = GET_UShort(); /* should be 0 */
- ls->ReqFeatureIndex = GET_UShort();
- count = ls->FeatureCount = GET_UShort();
-
- FORGET_Frame();
-
- ls->FeatureIndex = NULL;
-
- if ( ALLOC_ARRAY( ls->FeatureIndex, count, UShort ) )
- return error;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( ls->FeatureIndex );
- return error;
- }
-
- fi = ls->FeatureIndex;
-
- for ( n = 0; n < count; n++ )
- fi[n] = GET_UShort();
-
- FORGET_Frame();
-
- return TT_Err_Ok;
- }
-
-
- static void Free_LangSys( TTO_LangSys* ls )
- {
- FREE( ls->FeatureIndex );
- }
-
-
- /* Script */
-
- static TT_Error Load_Script( TTO_Script* s,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_LangSysRecord* lsr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- if ( new_offset != base_offset ) /* not a NULL offset */
- {
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LangSys( &s->DefaultLangSys,
- input ) ) != TT_Err_Ok )
- return error;
- (void)FILE_Seek( cur_offset );
- }
- else
- {
- /* we create a DefaultLangSys table with no entries */
-
- s->DefaultLangSys.LookupOrderOffset = 0;
- s->DefaultLangSys.ReqFeatureIndex = 0xFFFF;
- s->DefaultLangSys.FeatureCount = 0;
- s->DefaultLangSys.FeatureIndex = NULL;
- }
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail2;
-
- count = s->LangSysCount = GET_UShort();
-
- /* safety check; otherwise the official handling of TrueType Open
- fonts won't work */
-
- if ( s->LangSysCount == 0 && s->DefaultLangSys.FeatureCount == 0 )
- {
- error = TTO_Err_Invalid_SubTable;
- goto Fail2;
- }
-
- FORGET_Frame();
-
- s->LangSysRecord = NULL;
-
- if ( ALLOC_ARRAY( s->LangSysRecord, count, TTO_LangSysRecord ) )
- goto Fail2;
-
- lsr = s->LangSysRecord;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 6L ) )
- goto Fail1;
-
- lsr[n].LangSysTag = GET_ULong();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_LangSys( &lsr[n].LangSys, input ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- for ( n = 0; n < count; n++ )
- Free_LangSys( &lsr[n].LangSys );
-
- FREE( s->LangSysRecord );
-
- Fail2:
- Free_LangSys( &s->DefaultLangSys );
- return error;
- }
-
-
- static void Free_Script( TTO_Script* s )
- {
- UShort n, count;
-
- TTO_LangSysRecord* lsr;
-
-
- Free_LangSys( &s->DefaultLangSys );
-
- if ( s->LangSysRecord )
- {
- count = s->LangSysCount;
- lsr = s->LangSysRecord;
-
- for ( n = 0; n < count; n++ )
- Free_LangSys( &lsr[n].LangSys );
-
- FREE( lsr );
- }
- }
-
-
- /* ScriptList */
-
- TT_Error Load_ScriptList( TTO_ScriptList* sl,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_ScriptRecord* sr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = sl->ScriptCount = GET_UShort();
-
- FORGET_Frame();
-
- sl->ScriptRecord = NULL;
-
- if ( ALLOC_ARRAY( sl->ScriptRecord, count, TTO_ScriptRecord ) )
- return error;
-
- sr = sl->ScriptRecord;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 6L ) )
- goto Fail;
-
- sr[n].ScriptTag = GET_ULong();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Script( &sr[n].Script, input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_Script( &sr[n].Script );
-
- FREE( sl->ScriptRecord );
- return error;
- }
-
-
- void Free_ScriptList( TTO_ScriptList* sl )
- {
- UShort n, count;
-
- TTO_ScriptRecord* sr;
-
-
- if ( sl->ScriptRecord )
- {
- count = sl->ScriptCount;
- sr = sl->ScriptRecord;
-
- for ( n = 0; n < count; n++ )
- Free_Script( &sr[n].Script );
-
- FREE( sr );
- }
- }
-
-
-
- /*********************************
- * Feature List related functions
- *********************************/
-
-
- /* Feature */
-
- static TT_Error Load_Feature( TTO_Feature* f,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* lli;
-
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- f->FeatureParams = GET_UShort(); /* should be 0 */
- count = f->LookupListCount = GET_UShort();
-
- FORGET_Frame();
-
- f->LookupListIndex = NULL;
-
- if ( ALLOC_ARRAY( f->LookupListIndex, count, UShort ) )
- return error;
-
- lli = f->LookupListIndex;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( f->LookupListIndex );
- return error;
- }
-
- for ( n = 0; n < count; n++ )
- lli[n] = GET_UShort();
-
- FORGET_Frame();
-
- return TT_Err_Ok;
- }
-
-
- static void Free_Feature( TTO_Feature* f )
- {
- FREE( f->LookupListIndex );
- }
-
-
- /* FeatureList */
-
- TT_Error Load_FeatureList( TTO_FeatureList* fl,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_FeatureRecord* fr;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = fl->FeatureCount = GET_UShort();
-
- FORGET_Frame();
-
- fl->FeatureRecord = NULL;
-
- if ( ALLOC_ARRAY( fl->FeatureRecord, count, TTO_FeatureRecord ) )
- return error;
-
- fr = fl->FeatureRecord;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 6L ) )
- goto Fail;
-
- fr[n].FeatureTag = GET_ULong();
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Feature( &fr[n].Feature, input ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_Feature( &fr[n].Feature );
-
- FREE( fl->FeatureRecord );
- return error;
- }
-
-
- void Free_FeatureList( TTO_FeatureList* fl )
- {
- UShort n, count;
-
- TTO_FeatureRecord* fr;
-
-
- if ( fl->FeatureRecord )
- {
- count = fl->FeatureCount;
- fr = fl->FeatureRecord;
-
- for ( n = 0; n < count; n++ )
- Free_Feature( &fr[n].Feature );
-
- FREE( fr );
- }
- }
-
-
-
- /********************************
- * Lookup List related functions
- ********************************/
-
- /* the subroutines of the following two functions are defined in
- ftxgsub.c and ftxgpos.c respectively */
-
-
- /* SubTable */
-
- static TT_Error Load_SubTable( TTO_SubTable* st,
- PFace input,
- TTO_Type table_type,
- UShort lookup_type )
- {
- if ( table_type == GSUB )
- switch ( lookup_type )
- {
- case GSUB_LOOKUP_SINGLE:
- return Load_SingleSubst( &st->st.gsub.single, input );
-
- case GSUB_LOOKUP_MULTIPLE:
- return Load_MultipleSubst( &st->st.gsub.multiple, input );
-
- case GSUB_LOOKUP_ALTERNATE:
- return Load_AlternateSubst( &st->st.gsub.alternate, input );
-
- case GSUB_LOOKUP_LIGATURE:
- return Load_LigatureSubst( &st->st.gsub.ligature, input );
-
- case GSUB_LOOKUP_CONTEXT:
- return Load_ContextSubst( &st->st.gsub.context, input );
-
- case GSUB_LOOKUP_CHAIN:
- return Load_ChainContextSubst( &st->st.gsub.chain, input );
-
- default:
- return TTO_Err_Invalid_GSUB_SubTable_Format;
- }
- else
- switch ( lookup_type )
- {
- case GPOS_LOOKUP_SINGLE:
- return Load_SinglePos( &st->st.gpos.single, input );
-
- case GPOS_LOOKUP_PAIR:
- return Load_PairPos( &st->st.gpos.pair, input );
-
- case GPOS_LOOKUP_CURSIVE:
- return Load_CursivePos( &st->st.gpos.cursive, input );
-
- case GPOS_LOOKUP_MARKBASE:
- return Load_MarkBasePos( &st->st.gpos.markbase, input );
-
- case GPOS_LOOKUP_MARKLIG:
- return Load_MarkLigPos( &st->st.gpos.marklig, input );
-
- case GPOS_LOOKUP_MARKMARK:
- return Load_MarkMarkPos( &st->st.gpos.markmark, input );
-
- case GPOS_LOOKUP_CONTEXT:
- return Load_ContextPos( &st->st.gpos.context, input );
-
- case GPOS_LOOKUP_CHAIN:
- return Load_ChainContextPos( &st->st.gpos.chain, input );
-
- default:
- return TTO_Err_Invalid_GPOS_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- static void Free_SubTable( TTO_SubTable* st,
- TTO_Type table_type,
- UShort lookup_type )
- {
- if ( table_type == GSUB )
- switch ( lookup_type )
- {
- case GSUB_LOOKUP_SINGLE:
- Free_SingleSubst( &st->st.gsub.single );
- break;
-
- case GSUB_LOOKUP_MULTIPLE:
- Free_MultipleSubst( &st->st.gsub.multiple );
- break;
-
- case GSUB_LOOKUP_ALTERNATE:
- Free_AlternateSubst( &st->st.gsub.alternate );
- break;
-
- case GSUB_LOOKUP_LIGATURE:
- Free_LigatureSubst( &st->st.gsub.ligature );
- break;
-
- case GSUB_LOOKUP_CONTEXT:
- Free_ContextSubst( &st->st.gsub.context );
- break;
-
- case GSUB_LOOKUP_CHAIN:
- Free_ChainContextSubst( &st->st.gsub.chain );
- break;
- }
- else
- switch ( lookup_type )
- {
- case GPOS_LOOKUP_SINGLE:
- Free_SinglePos( &st->st.gpos.single );
- break;
-
- case GPOS_LOOKUP_PAIR:
- Free_PairPos( &st->st.gpos.pair );
- break;
-
- case GPOS_LOOKUP_CURSIVE:
- Free_CursivePos( &st->st.gpos.cursive );
- break;
-
- case GPOS_LOOKUP_MARKBASE:
- Free_MarkBasePos( &st->st.gpos.markbase );
- break;
-
- case GPOS_LOOKUP_MARKLIG:
- Free_MarkLigPos( &st->st.gpos.marklig );
- break;
-
- case GPOS_LOOKUP_MARKMARK:
- Free_MarkMarkPos( &st->st.gpos.markmark );
- break;
-
- case GPOS_LOOKUP_CONTEXT:
- Free_ContextPos( &st->st.gpos.context );
- break;
-
- case GPOS_LOOKUP_CHAIN:
- Free_ChainContextPos ( &st->st.gpos.chain );
- break;
- }
- }
-
-
- /* Lookup */
-
- static TT_Error Load_Lookup( TTO_Lookup* l,
- PFace input,
- TTO_Type type )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_SubTable* st;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 6L ) )
- return error;
-
- l->LookupType = GET_UShort();
- l->LookupFlag = GET_UShort();
- count = l->SubTableCount = GET_UShort();
-
- FORGET_Frame();
-
- l->SubTable = NULL;
-
- if ( ALLOC_ARRAY( l->SubTable, count, TTO_SubTable ) )
- return error;
-
- st = l->SubTable;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_SubTable( &st[n], input,
- type, l->LookupType ) ) != TT_Err_Ok )
- goto Fail;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < count; n++ )
- Free_SubTable( &st[n], type, l->LookupType );
-
- FREE( l->SubTable );
- return error;
- }
-
-
- static void Free_Lookup( TTO_Lookup* l,
- TTO_Type type )
- {
- UShort n, count;
-
- TTO_SubTable* st;
-
-
- if ( l->SubTable )
- {
- count = l->SubTableCount;
- st = l->SubTable;
-
- for ( n = 0; n < count; n++ )
- Free_SubTable( &st[n], type, l->LookupType );
-
- FREE( st );
- }
- }
-
-
- /* LookupList */
-
- TT_Error Load_LookupList( TTO_LookupList* ll,
- PFace input,
- TTO_Type type )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
- ULong cur_offset, new_offset, base_offset;
-
- TTO_Lookup* l;
-
-
- base_offset = FILE_Pos();
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = ll->LookupCount = GET_UShort();
-
- FORGET_Frame();
-
- ll->Lookup = NULL;
-
- if ( ALLOC_ARRAY( ll->Lookup, count, TTO_Lookup ) )
- return error;
- if ( ALLOC_ARRAY( ll->Properties, count, UShort ) )
- goto Fail2;
-
- l = ll->Lookup;
-
- for ( n = 0; n < count; n++ )
- {
- if ( ACCESS_Frame( 2L ) )
- goto Fail1;
-
- new_offset = GET_UShort() + base_offset;
-
- FORGET_Frame();
-
- cur_offset = FILE_Pos();
- if ( FILE_Seek( new_offset ) ||
- ( error = Load_Lookup( &l[n], input, type ) ) != TT_Err_Ok )
- goto Fail1;
- (void)FILE_Seek( cur_offset );
- }
-
- return TT_Err_Ok;
-
- Fail1:
- FREE( ll->Properties );
-
- for ( n = 0; n < count; n++ )
- Free_Lookup( &l[n], type );
-
- Fail2:
- FREE( ll->Lookup );
- return error;
- }
-
-
- void Free_LookupList( TTO_LookupList* ll,
- TTO_Type type )
- {
- UShort n, count;
-
- TTO_Lookup* l;
-
-
- FREE( ll->Properties );
-
- if ( ll->Lookup )
- {
- count = ll->LookupCount;
- l = ll->Lookup;
-
- for ( n = 0; n < count; n++ )
- Free_Lookup( &l[n], type );
-
- FREE( l );
- }
- }
-
-
-
- /*****************************
- * Coverage related functions
- *****************************/
-
-
- /* CoverageFormat1 */
-
- static TT_Error Load_Coverage1( TTO_CoverageFormat1* cf1,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* ga;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = cf1->GlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- cf1->GlyphArray = NULL;
-
- if ( ALLOC_ARRAY( cf1->GlyphArray, count, UShort ) )
- return error;
-
- ga = cf1->GlyphArray;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( cf1->GlyphArray );
- return error;
- }
-
- for ( n = 0; n < count; n++ )
- ga[n] = GET_UShort();
-
- FORGET_Frame();
-
- return TT_Err_Ok;
- }
-
-
- static void Free_Coverage1( TTO_CoverageFormat1* cf1 )
- {
- FREE( cf1->GlyphArray );
- }
-
-
- /* CoverageFormat2 */
-
- static TT_Error Load_Coverage2( TTO_CoverageFormat2* cf2,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- TTO_RangeRecord* rr;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = cf2->RangeCount = GET_UShort();
-
- FORGET_Frame();
-
- cf2->RangeRecord = NULL;
-
- if ( ALLOC_ARRAY( cf2->RangeRecord, count, TTO_RangeRecord ) )
- return error;
-
- rr = cf2->RangeRecord;
-
- if ( ACCESS_Frame( count * 6L ) )
- goto Fail;
-
- for ( n = 0; n < count; n++ )
- {
- rr[n].Start = GET_UShort();
- rr[n].End = GET_UShort();
- rr[n].StartCoverageIndex = GET_UShort();
-
- /* sanity check; we are limited to 16bit integers */
- if ( rr[n].Start > rr[n].End ||
- ( rr[n].End - rr[n].Start + (long)rr[n].StartCoverageIndex ) >=
- 0x10000L )
- {
- error = TTO_Err_Invalid_SubTable;
- goto Fail;
- }
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail:
- FREE( cf2->RangeRecord );
- return error;
- }
-
-
- static void Free_Coverage2( TTO_CoverageFormat2* cf2 )
- {
- FREE( cf2->RangeRecord );
- }
-
-
- TT_Error Load_Coverage( TTO_Coverage* c,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- c->CoverageFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( c->CoverageFormat )
- {
- case 1:
- return Load_Coverage1( &c->cf.cf1, input );
-
- case 2:
- return Load_Coverage2( &c->cf.cf2, input );
-
- default:
- return TTO_Err_Invalid_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
- void Free_Coverage( TTO_Coverage* c )
- {
- switch ( c->CoverageFormat )
- {
- case 1:
- Free_Coverage1( &c->cf.cf1 );
- break;
-
- case 2:
- Free_Coverage2( &c->cf.cf2 );
- break;
- }
- }
-
-
- static TT_Error Coverage_Index1( TTO_CoverageFormat1* cf1,
- UShort glyphID,
- UShort* index )
- {
- UShort min, max, new_min, new_max, middle;
-
- UShort* array = cf1->GlyphArray;
-
-
- /* binary search */
-
- new_min = 0;
- new_max = cf1->GlyphCount - 1;
-
- do
- {
- min = new_min;
- max = new_max;
-
- /* we use (min + max) / 2 = max - (max - min) / 2 to avoid
- overflow and rounding errors */
-
- middle = max - ( ( max - min ) >> 1 );
-
- if ( glyphID == array[middle] )
- {
- *index = middle;
- return TT_Err_Ok;
- }
- else if ( glyphID < array[middle] )
- {
- if ( middle == min )
- break;
- new_max = middle - 1;
- }
- else
- {
- if ( middle == max )
- break;
- new_min = middle + 1;
- }
- } while ( min < max );
-
- return TTO_Err_Not_Covered;
- }
-
-
- static TT_Error Coverage_Index2( TTO_CoverageFormat2* cf2,
- UShort glyphID,
- UShort* index )
- {
- UShort min, max, new_min, new_max, middle;
-
- TTO_RangeRecord* rr = cf2->RangeRecord;
-
-
- /* binary search */
-
- new_min = 0;
- new_max = cf2->RangeCount - 1;
-
- do
- {
- min = new_min;
- max = new_max;
-
- /* we use (min + max) / 2 = max - (max - min) / 2 to avoid
- overflow and rounding errors */
-
- middle = max - ( ( max - min ) >> 1 );
-
- if ( glyphID >= rr[middle].Start && glyphID <= rr[middle].End )
- {
- *index = rr[middle].StartCoverageIndex + glyphID - rr[middle].Start;
- return TT_Err_Ok;
- }
- else if ( glyphID < rr[middle].Start )
- {
- if ( middle == min )
- break;
- new_max = middle - 1;
- }
- else
- {
- if ( middle == max )
- break;
- new_min = middle + 1;
- }
- } while ( min < max );
-
- return TTO_Err_Not_Covered;
- }
-
-
- TT_Error Coverage_Index( TTO_Coverage* c,
- UShort glyphID,
- UShort* index )
- {
- switch ( c->CoverageFormat )
- {
- case 1:
- return Coverage_Index1( &c->cf.cf1, glyphID, index );
-
- case 2:
- return Coverage_Index2( &c->cf.cf2, glyphID, index );
-
- default:
- return TTO_Err_Invalid_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
-
- /*************************************
- * Class Definition related functions
- *************************************/
-
-
- /* ClassDefFormat1 */
-
- static TT_Error Load_ClassDef1( TTO_ClassDefinition* cd,
- UShort limit,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* cva;
- Bool* d;
-
- TTO_ClassDefFormat1* cdf1;
-
-
- cdf1 = &cd->cd.cd1;
-
- if ( ACCESS_Frame( 4L ) )
- return error;
-
- cdf1->StartGlyph = GET_UShort();
- count = cdf1->GlyphCount = GET_UShort();
-
- FORGET_Frame();
-
- /* sanity check; we are limited to 16bit integers */
-
- if ( cdf1->StartGlyph + (long)count >= 0x10000L )
- return TTO_Err_Invalid_SubTable;
-
- cdf1->ClassValueArray = NULL;
-
- if ( ALLOC_ARRAY( cdf1->ClassValueArray, count, UShort ) )
- return error;
-
- d = cd->Defined;
- cva = cdf1->ClassValueArray;
-
- if ( ACCESS_Frame( count * 2L ) )
- goto Fail;
-
- for ( n = 0; n < count; n++ )
- {
- cva[n] = GET_UShort();
- if ( cva[n] >= limit )
- {
- error = TTO_Err_Invalid_SubTable;
- goto Fail;
- }
- d[cva[n]] = TRUE;
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail:
- FREE( cva );
-
- return error;
- }
-
-
- static void Free_ClassDef1( TTO_ClassDefFormat1* cdf1 )
- {
- FREE( cdf1->ClassValueArray );
- }
-
-
- /* ClassDefFormat2 */
-
- static TT_Error Load_ClassDef2( TTO_ClassDefinition* cd,
- UShort limit,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- TTO_ClassRangeRecord* crr;
- Bool* d;
-
- TTO_ClassDefFormat2* cdf2;
-
-
- cdf2 = &cd->cd.cd2;
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- count = cdf2->ClassRangeCount = GET_UShort();
-
- FORGET_Frame();
-
- cdf2->ClassRangeRecord = NULL;
-
- if ( ALLOC_ARRAY( cdf2->ClassRangeRecord, count, TTO_ClassRangeRecord ) )
- return error;
-
- d = cd->Defined;
- crr = cdf2->ClassRangeRecord;
-
- if ( ACCESS_Frame( count * 6L ) )
- goto Fail;
-
- for ( n = 0; n < count; n++ )
- {
- crr[n].Start = GET_UShort();
- crr[n].End = GET_UShort();
- crr[n].Class = GET_UShort();
-
- /* sanity check */
-
- if ( crr[n].Start > crr[n].End ||
- crr[n].Class >= limit )
- {
- error = TTO_Err_Invalid_SubTable;
- goto Fail;
- }
- d[crr[n].Class] = TRUE;
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
- Fail:
- FREE( crr );
-
- return error;
- }
-
-
- static void Free_ClassDef2( TTO_ClassDefFormat2* cdf2 )
- {
- FREE( cdf2->ClassRangeRecord );
- }
-
-
- /* ClassDefinition */
-
- TT_Error Load_ClassDefinition( TTO_ClassDefinition* cd,
- UShort limit,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
-
- if ( ALLOC_ARRAY( cd->Defined, limit, Bool ) )
- return error;
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- cd->ClassFormat = GET_UShort();
-
- FORGET_Frame();
-
- switch ( cd->ClassFormat )
- {
- case 1:
- error = Load_ClassDef1( cd, limit, input );
- break;
-
- case 2:
- error = Load_ClassDef2( cd, limit, input );
- break;
-
- default:
- error = TTO_Err_Invalid_SubTable_Format;
- break;
- }
-
- if ( error )
- goto Fail;
-
- cd->loaded = TRUE;
-
- return TT_Err_Ok;
-
- Fail:
- FREE( cd->Defined );
- return error;
- }
-
-
- void Free_ClassDefinition( TTO_ClassDefinition* cd )
- {
- if ( !cd->loaded )
- return;
-
- FREE( cd->Defined );
-
- switch ( cd->ClassFormat )
- {
- case 1:
- Free_ClassDef1( &cd->cd.cd1 );
- break;
-
- case 2:
- Free_ClassDef2( &cd->cd.cd2 );
- break;
- }
- }
-
-
- static TT_Error Get_Class1( TTO_ClassDefFormat1* cdf1,
- UShort glyphID,
- UShort* class,
- UShort* index )
- {
- UShort* cva = cdf1->ClassValueArray;
-
-
- *index = 0;
-
- if ( glyphID >= cdf1->StartGlyph &&
- glyphID <= cdf1->StartGlyph + cdf1->GlyphCount )
- {
- *class = cva[glyphID - cdf1->StartGlyph];
- return TT_Err_Ok;
- }
- else
- {
- *class = 0;
- return TTO_Err_Not_Covered;
- }
- }
-
-
- /* we need the index value of the last searched class range record
- in case of failure for constructed GDEF tables */
-
- static TT_Error Get_Class2( TTO_ClassDefFormat2* cdf2,
- UShort glyphID,
- UShort* class,
- UShort* index )
- {
- TT_Error error = TT_Err_Ok;
- UShort min, max, new_min, new_max, middle;
-
- TTO_ClassRangeRecord* crr = cdf2->ClassRangeRecord;
-
-
- /* binary search */
-
- new_min = 0;
- new_max = cdf2->ClassRangeCount - 1;
-
- do
- {
- min = new_min;
- max = new_max;
-
- /* we use (min + max) / 2 = max - (max - min) / 2 to avoid
- overflow and rounding errors */
-
- middle = max - ( ( max - min ) >> 1 );
-
- if ( glyphID >= crr[middle].Start && glyphID <= crr[middle].End )
- {
- *class = crr[middle].Class;
- error = TT_Err_Ok;
- break;
- }
- else if ( glyphID < crr[middle].Start )
- {
- if ( middle == min )
- {
- *class = 0;
- error = TTO_Err_Not_Covered;
- break;
- }
- new_max = middle - 1;
- }
- else
- {
- if ( middle == max )
- {
- *class = 0;
- error = TTO_Err_Not_Covered;
- break;
- }
- new_min = middle + 1;
- }
- } while ( min < max );
-
- if ( index )
- *index = middle;
-
- return error;
- }
-
-
- TT_Error Get_Class( TTO_ClassDefinition* cd,
- UShort glyphID,
- UShort* class,
- UShort* index )
- {
- switch ( cd->ClassFormat )
- {
- case 1:
- return Get_Class1( &cd->cd.cd1, glyphID, class, index );
-
- case 2:
- return Get_Class2( &cd->cd.cd2, glyphID, class, index );
-
- default:
- return TTO_Err_Invalid_SubTable_Format;
- }
-
- return TT_Err_Ok; /* never reached */
- }
-
-
-
- /***************************
- * Device related functions
- ***************************/
-
-
- TT_Error Load_Device( TTO_Device* d,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, count;
-
- UShort* dv;
-
-
- if ( ACCESS_Frame( 6L ) )
- return error;
-
- d->StartSize = GET_UShort();
- d->EndSize = GET_UShort();
- d->DeltaFormat = GET_UShort();
-
- FORGET_Frame();
-
- if ( d->StartSize > d->EndSize ||
- d->DeltaFormat == 0 || d->DeltaFormat > 3 )
- return TTO_Err_Invalid_SubTable;
-
- d->DeltaValue = NULL;
-
- count = ( ( d->EndSize - d->StartSize + 1 ) >>
- ( 4 - d->DeltaFormat ) ) + 1;
-
- if ( ALLOC_ARRAY( d->DeltaValue, count, UShort ) )
- return error;
-
- if ( ACCESS_Frame( count * 2L ) )
- {
- FREE( d->DeltaValue );
- return error;
- }
-
- dv = d->DeltaValue;
-
- for ( n = 0; n < count; n++ )
- dv[n] = GET_UShort();
-
- FORGET_Frame();
-
- return TT_Err_Ok;
- }
-
-
- void Free_Device( TTO_Device* d )
- {
- FREE( d->DeltaValue );
- }
-
-
- /* Since we have the delta values stored in compressed form, we must
- uncompress it now. To simplify the interface, the function always
- returns a meaningful value in `value'; the error is just for
- information.
- | |
- format = 1: 0011223344556677|8899101112131415|...
- | |
- byte 1 byte 2
-
- 00: (byte >> 14) & mask
- 11: (byte >> 12) & mask
- ...
-
- mask = 0x0003
- | |
- format = 2: 0000111122223333|4444555566667777|...
- | |
- byte 1 byte 2
-
- 0000: (byte >> 12) & mask
- 1111: (byte >> 8) & mask
- ...
-
- mask = 0x000F
- | |
- format = 3: 0000000011111111|2222222233333333|...
- | |
- byte 1 byte 2
-
- 00000000: (byte >> 8) & mask
- 11111111: (byte >> 0) & mask
- ....
-
- mask = 0x00FF */
-
- TT_Error Get_Device( TTO_Device* d,
- UShort size,
- Short* value )
- {
- UShort byte, bits, mask, f, s;
-
-
- f = d->DeltaFormat;
-
- if ( size >= d->StartSize && size <= d->EndSize )
- {
- s = size - d->StartSize;
- byte = d->DeltaValue[s >> ( 4 - f )];
- bits = byte >> ( 16 - ( ( s % ( 1 << ( 4 - f ) ) + 1 ) << f ) );
- mask = 0xFFFF >> ( 16 - ( 1 << f ) );
-
- *value = (Short)( bits & mask );
-
- /* conversion to a signed value */
-
- if ( *value >= ( ( mask + 1 ) >> 1 ) )
- *value -= mask + 1;
-
- return TT_Err_Ok;
- }
- else
- {
- *value = 0;
- return TTO_Err_Not_Covered;
- }
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxopen.h b/Build/source/libs/libttf/extend/ftxopen.h
deleted file mode 100644
index 0063527a614..00000000000
--- a/Build/source/libs/libttf/extend/ftxopen.h
+++ /dev/null
@@ -1,305 +0,0 @@
-/*******************************************************************
- *
- * ftxopen.h
- *
- * TrueType Open support.
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 should be included by the application. Nevertheless,
- * the table specific APIs (and structures) are located in files like
- * ftxgsub.h or ftxgpos.h; these header files are read by ftxopen.h .
- *
- ******************************************************************/
-
-#ifndef FTXOPEN_H
-#define FTXOPEN_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define TTO_MAX_NESTING_LEVEL 100
-
-#define TTO_Err_Invalid_SubTable_Format 0x1000
-#define TTO_Err_Invalid_SubTable 0x1001
-#define TTO_Err_Not_Covered 0x1002
-#define TTO_Err_Too_Many_Nested_Contexts 0x1003
-#define TTO_Err_No_MM_Interpreter 0x1004
-
-
- /* Script list related structures */
-
- struct TTO_LangSys_
- {
- TT_UShort LookupOrderOffset; /* always 0 for TT Open 1.0 */
- TT_UShort ReqFeatureIndex; /* required FeatureIndex */
- TT_UShort FeatureCount; /* number of Feature indices */
- TT_UShort* FeatureIndex; /* array of Feature indices */
- };
-
- typedef struct TTO_LangSys_ TTO_LangSys;
-
-
- struct TTO_LangSysRecord_
- {
- TT_ULong LangSysTag; /* LangSysTag identifier */
- TTO_LangSys LangSys; /* LangSys table */
- };
-
- typedef struct TTO_LangSysRecord_ TTO_LangSysRecord;
-
-
- struct TTO_Script_
- {
- TTO_LangSys DefaultLangSys; /* DefaultLangSys table */
- TT_UShort LangSysCount; /* number of LangSysRecords */
- TTO_LangSysRecord* LangSysRecord; /* array of LangSysRecords */
- };
-
- typedef struct TTO_Script_ TTO_Script;
-
-
- struct TTO_ScriptRecord_
- {
- TT_ULong ScriptTag; /* ScriptTag identifier */
- TTO_Script Script; /* Script table */
- };
-
- typedef struct TTO_ScriptRecord_ TTO_ScriptRecord;
-
-
- struct TTO_ScriptList_
- {
- TT_UShort ScriptCount; /* number of ScriptRecords */
- TTO_ScriptRecord* ScriptRecord; /* array of ScriptRecords */
- };
-
- typedef struct TTO_ScriptList_ TTO_ScriptList;
-
-
- /* Feature list related structures */
-
- struct TTO_Feature_
- {
- TT_UShort FeatureParams; /* always 0 for TT Open 1.0 */
- TT_UShort LookupListCount; /* number of LookupList indices */
- TT_UShort* LookupListIndex; /* array of LookupList indices */
- };
-
- typedef struct TTO_Feature_ TTO_Feature;
-
-
- struct TTO_FeatureRecord_
- {
- TT_ULong FeatureTag; /* FeatureTag identifier */
- TTO_Feature Feature; /* Feature table */
- };
-
- typedef struct TTO_FeatureRecord_ TTO_FeatureRecord;
-
-
- struct TTO_FeatureList_
- {
- TT_UShort FeatureCount; /* number of FeatureRecords */
- TTO_FeatureRecord* FeatureRecord; /* array of FeatureRecords */
- };
-
- typedef struct TTO_FeatureList_ TTO_FeatureList;
-
-
- /* Lookup list related structures */
-
- struct TTO_SubTable_; /* defined below after inclusion
- of ftxgsub.h and ftxgpos.h */
- typedef struct TTO_SubTable_ TTO_SubTable;
-
-
- struct TTO_Lookup_
- {
- TT_UShort LookupType; /* Lookup type */
- TT_UShort LookupFlag; /* Lookup qualifiers */
- TT_UShort SubTableCount; /* number of SubTables */
- TTO_SubTable* SubTable; /* array of SubTables */
- };
-
- typedef struct TTO_Lookup_ TTO_Lookup;
-
-
- /* The `Properties' field is not defined in the TTO specification but
- is needed for processing lookups. If properties[n] is > 0, the
- functions TT_GSUB_Apply_String() resp. TT_GPOS_Apply_String() will
- process Lookup[n] for glyphs which have the specific bit not set in
- the `properties' field of the input string object. */
-
- struct TTO_LookupList_
- {
- TT_UShort LookupCount; /* number of Lookups */
- TTO_Lookup* Lookup; /* array of Lookup records */
- TT_UShort* Properties; /* array of flags */
- };
-
- typedef struct TTO_LookupList_ TTO_LookupList;
-
-
-/* Possible LookupFlag bit masks. `IGNORE_SPECIAL_MARKS' comes from the
- OpenType 1.2 specification. */
-
-#define IGNORE_BASE_GLYPHS 0x0002
-#define IGNORE_LIGATURES 0x0004
-#define IGNORE_MARKS 0x0008
-#define IGNORE_SPECIAL_MARKS 0xFF00
-
-
- struct TTO_CoverageFormat1_
- {
- TT_UShort GlyphCount; /* number of glyphs in GlyphArray */
- TT_UShort* GlyphArray; /* array of glyph IDs */
- };
-
- typedef struct TTO_CoverageFormat1_ TTO_CoverageFormat1;
-
-
- struct TTO_RangeRecord_
- {
- TT_UShort Start; /* first glyph ID in the range */
- TT_UShort End; /* last glyph ID in the range */
- TT_UShort StartCoverageIndex; /* coverage index of first
- glyph ID in the range */
- };
-
- typedef struct TTO_RangeRecord_ TTO_RangeRecord;
-
-
- struct TTO_CoverageFormat2_
- {
- TT_UShort RangeCount; /* number of RangeRecords */
- TTO_RangeRecord* RangeRecord; /* array of RangeRecords */
- };
-
- typedef struct TTO_CoverageFormat2_ TTO_CoverageFormat2;
-
-
- struct TTO_Coverage_
- {
- TT_UShort CoverageFormat; /* 1 or 2 */
-
- union
- {
- TTO_CoverageFormat1 cf1;
- TTO_CoverageFormat2 cf2;
- } cf;
- };
-
- typedef struct TTO_Coverage_ TTO_Coverage;
-
-
- struct TTO_ClassDefFormat1_
- {
- TT_UShort StartGlyph; /* first glyph ID of the
- ClassValueArray */
- TT_UShort GlyphCount; /* size of the ClassValueArray */
- TT_UShort* ClassValueArray; /* array of class values */
- };
-
- typedef struct TTO_ClassDefFormat1_ TTO_ClassDefFormat1;
-
-
- struct TTO_ClassRangeRecord_
- {
- TT_UShort Start; /* first glyph ID in the range */
- TT_UShort End; /* last glyph ID in the range */
- TT_UShort Class; /* applied to all glyphs in range */
- };
-
- typedef struct TTO_ClassRangeRecord_ TTO_ClassRangeRecord;
-
-
- struct TTO_ClassDefFormat2_
- {
- TT_UShort ClassRangeCount;
- /* number of ClassRangeRecords */
- TTO_ClassRangeRecord* ClassRangeRecord;
- /* array of ClassRangeRecords */
- };
-
- typedef struct TTO_ClassDefFormat2_ TTO_ClassDefFormat2;
-
-
- /* The `Defined' field is not defined in the TTO specification but
- apparently needed for processing fonts like trado.ttf: This font
- refers to a class which contains not a single element. We map such
- classes to class 0. */
-
- struct TTO_ClassDefinition_
- {
- TT_Bool loaded;
-
- TT_Bool* Defined; /* array of Booleans.
- If Defined[n] is FALSE,
- class n contains no glyphs. */
- TT_UShort ClassFormat; /* 1 or 2 */
-
- union
- {
- TTO_ClassDefFormat1 cd1;
- TTO_ClassDefFormat2 cd2;
- } cd;
- };
-
- typedef struct TTO_ClassDefinition_ TTO_ClassDefinition;
-
-
- struct TTO_Device_
- {
- TT_UShort StartSize; /* smallest size to correct */
- TT_UShort EndSize; /* largest size to correct */
- TT_UShort DeltaFormat; /* DeltaValue array data format:
- 1, 2, or 3 */
- TT_UShort* DeltaValue; /* array of compressed data */
- };
-
- typedef struct TTO_Device_ TTO_Device;
-
-
-#include "ftxgdef.h"
-#include "ftxgsub.h"
-#include "ftxgpos.h"
-
-
- struct TTO_SubTable_
- {
- union
- {
- TTO_GSUB_SubTable gsub;
- TTO_GPOS_SubTable gpos;
- } st;
- };
-
-
- enum TTO_Type_
- {
- GSUB,
- GPOS
- };
-
- typedef enum TTO_Type_ TTO_Type;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXOPEN_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxopenf.h b/Build/source/libs/libttf/extend/ftxopenf.h
deleted file mode 100644
index df69a64b452..00000000000
--- a/Build/source/libs/libttf/extend/ftxopenf.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************
- *
- * ftxopenf.h
- *
- * internal TrueType Open functions
- *
- * Copyright 1996-2000 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 FTXOPENF_H
-#define FTXOPENF_H
-
-#include "ftxopen.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* functions from ftxopen.c */
-
- TT_Error Load_ScriptList( TTO_ScriptList* sl,
- PFace input );
- TT_Error Load_FeatureList( TTO_FeatureList* fl,
- PFace input );
- TT_Error Load_LookupList( TTO_LookupList* ll,
- PFace input,
- TTO_Type type );
-
- TT_Error Load_Coverage( TTO_Coverage* c,
- PFace input );
- TT_Error Load_ClassDefinition( TTO_ClassDefinition* cd,
- UShort limit,
- PFace input );
- TT_Error Load_Device( TTO_Device* d,
- PFace input );
-
- void Free_ScriptList( TTO_ScriptList* sl );
- void Free_FeatureList( TTO_FeatureList* fl );
- void Free_LookupList( TTO_LookupList* ll,
- TTO_Type type );
-
- void Free_Coverage( TTO_Coverage* c );
- void Free_ClassDefinition( TTO_ClassDefinition* cd );
- void Free_Device( TTO_Device* d );
-
-
- /* functions from ftxgsub.c */
-
- TT_Error Load_SingleSubst( TTO_SingleSubst* ss,
- PFace input );
- TT_Error Load_MultipleSubst( TTO_MultipleSubst* ms,
- PFace input );
- TT_Error Load_AlternateSubst( TTO_AlternateSubst* as,
- PFace input );
- TT_Error Load_LigatureSubst( TTO_LigatureSubst* ls,
- PFace input );
- TT_Error Load_ContextSubst( TTO_ContextSubst* cs,
- PFace input );
- TT_Error Load_ChainContextSubst( TTO_ChainContextSubst* ccs,
- PFace input );
-
- void Free_SingleSubst( TTO_SingleSubst* ss );
- void Free_MultipleSubst( TTO_MultipleSubst* ms );
- void Free_AlternateSubst( TTO_AlternateSubst* as );
- void Free_LigatureSubst( TTO_LigatureSubst* ls );
- void Free_ContextSubst( TTO_ContextSubst* cs );
- void Free_ChainContextSubst( TTO_ChainContextSubst* ccs );
-
-
- /* functions from ftxgpos.c */
-
- TT_Error Load_SinglePos( TTO_SinglePos* sp,
- PFace input );
- TT_Error Load_PairPos( TTO_PairPos* pp,
- PFace input );
- TT_Error Load_CursivePos( TTO_CursivePos* cp,
- PFace input );
- TT_Error Load_MarkBasePos( TTO_MarkBasePos* mbp,
- PFace input );
- TT_Error Load_MarkLigPos( TTO_MarkLigPos* mlp,
- PFace input );
- TT_Error Load_MarkMarkPos( TTO_MarkMarkPos* mmp,
- PFace input );
- TT_Error Load_ContextPos( TTO_ContextPos* cp,
- PFace input );
- TT_Error Load_ChainContextPos( TTO_ChainContextPos* ccp,
- PFace input );
-
- void Free_SinglePos( TTO_SinglePos* sp );
- void Free_PairPos( TTO_PairPos* pp );
- void Free_CursivePos( TTO_CursivePos* cp );
- void Free_MarkBasePos( TTO_MarkBasePos* mbp );
- void Free_MarkLigPos( TTO_MarkLigPos* mlp );
- void Free_MarkMarkPos( TTO_MarkMarkPos* mmp );
- void Free_ContextPos( TTO_ContextPos* cp );
- void Free_ChainContextPos( TTO_ChainContextPos* ccp );
-
-
- /* query functions */
-
- TT_Error Coverage_Index( TTO_Coverage* c,
- UShort glyphID,
- UShort* index );
- TT_Error Get_Class( TTO_ClassDefinition* cd,
- UShort glyphID,
- UShort* class,
- UShort* index );
- TT_Error Get_Device( TTO_Device* d,
- UShort size,
- Short* value );
-
-
- /* functions from ftxgdef.c */
-
- TT_Error Add_Glyph_Property( TTO_GDEFHeader* gdef,
- UShort glyphID,
- UShort property );
-
- TT_Error Check_Property( TTO_GDEFHeader* gdef,
- UShort index,
- UShort flags,
- UShort* property );
-
-#define CHECK_Property( gdef, index, flags, property ) \
- ( ( error = Check_Property( (gdef), (index), (flags), \
- (property) ) ) != TT_Err_Ok )
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXOPENF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxpost.c b/Build/source/libs/libttf/extend/ftxpost.c
deleted file mode 100644
index 8b2ac5940c0..00000000000
--- a/Build/source/libs/libttf/extend/ftxpost.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/*******************************************************************
- *
- * ftxpost.c
- *
- * post table support API extension body
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttconfig.h"
-#include "ftxpost.h"
-
-#include "tttypes.h"
-#include "ttobjs.h"
-#include "tttables.h"
-#include "ttload.h" /* for the macros */
-#include "ttfile.h"
-#include "tttags.h"
-#include "ttmemory.h"
-#include "ttextend.h"
-
-
-#define POST_ID Build_Extension_ID( 'p', 'o', 's', 't' )
-
-
- /* the 258 default Mac PS glyph names */
-
- String* TT_Post_Default_Names[258] =
- {
- /* 0 */
- ".notdef", ".null", "CR", "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", "nbspace", "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 */
- "Idot", "Scedilla", "scedilla", "Cacute", "cacute",
- "Ccaron", "ccaron", "dmacron",
- };
-
-
-
- static TT_Error Load_Format_20( TT_Post_20* post20,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort nameindex, n, num;
- Byte len;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- num = GET_UShort();
-
- FORGET_Frame();
-
- /* 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 > input->numGlyphs )
- return TT_Err_Invalid_Post_Table;
-
- post20->numGlyphs = num;
-
- if ( ALLOC_ARRAY( post20->glyphNameIndex, num, TT_UShort ) )
- return error;
-
- if ( ACCESS_Frame( num * 2L ) )
- goto Fail;
-
- for ( n = 0; n < num; n++ )
- {
- post20->glyphNameIndex[n] = GET_UShort();
-
- if ( post20->glyphNameIndex[n] > 258 + num )
- {
- FORGET_Frame();
- error = TT_Err_Invalid_Post_Table;
- goto Fail;
- }
- }
-
- FORGET_Frame();
-
- if ( ALLOC_ARRAY( post20->glyphNames, num, Char* ) )
- goto Fail;
-
- /* We must initialize the glyphNames array for proper */
- /* deallocation. */
- for ( n = 0; n < num; n++ )
- post20->glyphNames[n] = NULL;
-
- /* Now we can read the glyph names which are stored in */
- /* Pascal string format. */
- for ( n = 0; n < num; n++ )
- {
- nameindex = post20->glyphNameIndex[n];
-
- if ( nameindex < 258 )
- ; /* default Mac glyph, do nothing */
- else
- {
- if ( ACCESS_Frame( 1L ) )
- goto Fail1;
-
- len = GET_Byte();
-
- FORGET_Frame();
-
- if ( ALLOC_ARRAY( post20->glyphNames[nameindex - 258],
- len + 1, Char ) ||
- FILE_Read( post20->glyphNames[nameindex - 258], len ) )
- goto Fail1;
-
- /* we make a C string */
- post20->glyphNames[nameindex - 258][len] = '\0';
- }
- }
-
- return TT_Err_Ok;
-
-
- Fail1:
- for ( n = 0; n < num; n++ )
- if ( post20->glyphNames[n] )
- FREE( post20->glyphNames[n] );
-
- FREE( post20->glyphNames );
-
- Fail:
- FREE( post20->glyphNameIndex );
- return error;
- }
-
-
- static TT_Error Load_Format_25( TT_Post_25* post25,
- PFace input )
- {
- DEFINE_LOAD_LOCALS( input->stream );
-
- UShort n, num;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- /* UNDOCUMENTED! This value appears only in the Apple TT specs. */
- num = GET_UShort();
-
- FORGET_Frame();
-
- if ( num > input->numGlyphs || num > 258 )
- return TT_Err_Invalid_Post_Table;
-
- post25->numGlyphs = num;
-
- if ( ALLOC_ARRAY( post25->offset, num, Char ) )
- return error;
-
- if ( ACCESS_Frame( num ) )
- goto Fail;
-
- for ( n = 0; n < num; n++ )
- {
- post25->offset[n] = GET_Char();
-
- /* We add 128 to the tests to avoid problems with negative */
- /* values for comparison. */
- if ( n + ( post25->offset[n] + 128 ) > num + 128 ||
- n + ( post25->offset[n] + 128 ) < 128 )
- {
- FORGET_Frame();
- error = TT_Err_Invalid_Post_Table;
- goto Fail;
- }
- }
-
- FORGET_Frame();
-
- return TT_Err_Ok;
-
-
- Fail:
- FREE( post25->offset );
- return error;
- }
-
-
- static TT_Error Post_Create( void* ext,
- PFace face )
- {
- TT_Post* post = (TT_Post*)ext;
- Long table;
-
-
- /* by convention */
- if ( !post )
- return TT_Err_Ok;
-
- /* we store the start offset and the size of the subtable */
- table = TT_LookUp_Table( face, TTAG_post );
- post->offset = face->dirTables[table].Offset + 32L;
- post->length = face->dirTables[table].Length - 32L;
- post->loaded = FALSE;
-
- return TT_Err_Ok;
- }
-
-
- static TT_Error Post_Destroy( void* ext,
- PFace face )
- {
- TT_Post* post = (TT_Post*)ext;
- UShort n;
-
-
- /* by convention */
- if ( !post )
- return TT_Err_Ok;
-
- if ( post->loaded )
- {
- switch ( face->postscript.FormatType )
- {
- case 0x00010000: /* nothing to do */
- break;
-
- case 0x00020000:
- for ( n = 0; n < post->p.post20.numGlyphs; n++ )
- if ( post->p.post20.glyphNames[n] )
- FREE( post->p.post20.glyphNames[n] );
- FREE( post->p.post20.glyphNames );
- FREE( post->p.post20.glyphNameIndex );
- break;
-
- case 0x00028000:
- FREE( post->p.post25.offset );
- break;
-
- case 0x00030000: /* nothing to do */
- break;
-
-#if 0
- case 0x00040000:
- break;
-#endif
-
- default:
- ; /* invalid format, do nothing */
- }
- }
-
- return TT_Err_Ok;
- }
-
-
- EXPORT_FUNC
- TT_Error TT_Init_Post_Extension( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
- TT_Error error;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- error = TT_Register_Extension( _engine,
- POST_ID,
- sizeof ( TT_Post ),
- Post_Create,
- Post_Destroy );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Load_PS_Names
- *
- * Description : Loads the PostScript Glyph Name subtable (if any).
- *
- * Output : error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Load_PS_Names( TT_Face face,
- TT_Post* ppost )
- {
- PFace faze = HANDLE_Face( face );
- TT_Error error;
- TT_Stream stream;
- TT_Post* post;
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- error = TT_Extension_Get( faze, POST_ID, (void**)&post );
- if ( error )
- return error;
-
- if ( USE_Stream( faze->stream, stream ) )
- return error;
-
-
- switch ( faze->postscript.FormatType )
- {
- case 0x00010000:
- error = TT_Err_Ok; /* nothing to do */
- break;
-
- case 0x00020000:
- if ( FILE_Seek( post->offset ) )
- goto Fail;
-
- error = Load_Format_20( &post->p.post20, faze );
- break;
-
- case 0x00028000: /* 2.5 in 16.16 format */
- if ( FILE_Seek( post->offset ) )
- goto Fail;
-
- error = Load_Format_25( &post->p.post25, faze );
- break;
-
- case 0x00030000:
- error = TT_Err_Ok; /* nothing to do */
- break;
-
-#if 0
- case 0x00040000:
- break;
-#endif
-
- default:
- error = TT_Err_Invalid_Post_Table_Format;
- break;
- }
-
- if ( !error )
- {
- post->loaded = TRUE;
- *ppost = *post;
- }
-
-
- Fail:
- DONE_Stream( stream );
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_PS_Name
- *
- * Description : Gets the PostScript Glyph Name of a glyph.
- *
- * Input : index glyph index
- * PSname address of a string pointer.
- * Will be NULL in case of error; otherwise it
- * contains a pointer to the glyph name.
- *
- * You must not modify the returned string!
- *
- * Output : error code
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_PS_Name( TT_Face face,
- TT_UShort index,
- TT_String** PSname )
- {
- PFace faze = HANDLE_Face( face );
- TT_Error error;
- TT_Post* post;
- UShort nameindex;
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( index >= faze->numGlyphs )
- return TT_Err_Invalid_Glyph_Index;
-
- error = TT_Extension_Get( faze, POST_ID, (void**)&post );
- if ( error )
- return error;
-
-
- *PSname = TT_Post_Default_Names[0]; /* default value */
-
- switch ( faze->postscript.FormatType )
- {
- case 0x00010000:
- if ( index < 258 ) /* paranoid checking */
- *PSname = TT_Post_Default_Names[index];
- break;
-
- case 0x00020000:
- if ( index < post->p.post20.numGlyphs )
- nameindex = post->p.post20.glyphNameIndex[index];
- else
- break;
-
- if ( nameindex < 258 )
- *PSname = TT_Post_Default_Names[nameindex];
- else
- *PSname = (String*)post->p.post20.glyphNames[nameindex - 258];
- break;
-
- case 0x00028000:
- if ( index < post->p.post25.numGlyphs ) /* paranoid checking */
- *PSname = TT_Post_Default_Names[index + post->p.post25.offset[index]];
- break;
-
- case 0x00030000:
- break; /* nothing to do */
-
-#if 0
- case 0x00040000:
- break;
-#endif
-
- default:
- ; /* should never happen */
- }
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxpost.h b/Build/source/libs/libttf/extend/ftxpost.h
deleted file mode 100644
index 534b6080d30..00000000000
--- a/Build/source/libs/libttf/extend/ftxpost.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************
- *
- * ftxpost.h
- *
- * post table support API extension
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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.
- *
- ******************************************************************/
-
-#ifndef FTXPOST_H
-#define FTXPOST_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define TT_Err_Invalid_Post_Table_Format 0x0B00
-#define TT_Err_Invalid_Post_Table 0x0B01
-
- /* the 258 standard Mac glyph names, used for format 1.0 and 2.5 */
-
- extern TT_String* TT_Post_Default_Names[];
-
-
- /* format 2.0 table */
-
- struct TT_Post_20_
- {
- TT_UShort numGlyphs;
- TT_UShort* glyphNameIndex;
- TT_Char** glyphNames;
- };
-
- typedef struct TT_Post_20_ TT_Post_20;
-
- struct TT_Post_25_
- {
- TT_UShort numGlyphs;
- TT_Char* offset;
- };
-
- typedef struct TT_Post_25_ TT_Post_25;
-
-#if 0
- /* format 4.0 table -- not implemented yet */
-
- struct TT_Post_40_
- {
- };
-
- typedef struct TT_Post_40_ TT_Post_40;
-#endif
-
-
- struct TT_Post_
- {
- TT_Long offset;
- TT_Long length;
- TT_Bool loaded;
-
- union
- {
- TT_Post_20 post20;
- TT_Post_25 post25;
-#if 0
- TT_Post_40 post40;
-#endif
- } p;
- };
-
- typedef struct TT_Post_ TT_Post;
-
-
- EXPORT_DEF
- TT_Error TT_Init_Post_Extension( TT_Engine engine );
-
- EXPORT_DEF
- TT_Error TT_Load_PS_Names( TT_Face face,
- TT_Post* post );
- EXPORT_DEF
- TT_Error TT_Get_PS_Name( TT_Face face,
- TT_UShort index,
- TT_String** PSname );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXPOST_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxsbit.c b/Build/source/libs/libttf/extend/ftxsbit.c
deleted file mode 100644
index 02162bd2e3f..00000000000
--- a/Build/source/libs/libttf/extend/ftxsbit.c
+++ /dev/null
@@ -1,1391 +0,0 @@
-/*******************************************************************
- *
- * ftxsbit.c
- *
- * Embedded bitmap API extension
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 extension is used to load the embedded bitmaps present
- * in certain TrueType files.
- *
- ******************************************************************/
-
-#include "ftxsbit.h"
-#include "ttobjs.h"
-#include "ttfile.h"
-#include "ttload.h"
-#include "ttmemory.h"
-#include "tttags.h"
-#include "ttextend.h"
-#include "ttdebug.h"
-
-
-#define SBIT_ID Build_Extension_ID( 's', 'b', 'i', 't' )
-
-
-/* Required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_bitmap
-
-/* In all functions, the stream is taken from the 'face' object */
-#define DEFINE_LOCALS DEFINE_LOAD_LOCALS( face->stream )
-#define DEFINE_LOCALS_WO_FRAME DEFINE_LOAD_LOCALS_WO_FRAME( face->stream )
-
-
-/***************************
- *
- * miscellaneous functions
- *
- ***************************/
-
-/*******************************************************************
- *
- * Function: Load_BitmapData
- *
- * Bit-aligned bitmap data -> Byte-aligned bitmap data when pad is 0
- *
- ******************************************************************/
-
- static
- TT_Error Load_BitmapData( TT_SBit_Image* image,
- Int image_size,
- Byte x_offset,
- Byte y_offset,
- UShort source_width,
- UShort source_height,
- Bool byte_padded )
- {
- DEFINE_LOCALS;
-
- Int count; /* number of bits left in rows */
- Int loaded; /* number of bits loaded in the accumulator */
- UShort buff; /* accumulator */
-
- PByte line; /* target write cursor */
- PByte limit;
-
-
- if ( ( y_offset + source_height > image->map.rows ) ||
- ( x_offset + source_width > image->map.width ) )
- return TT_Err_Invalid_Argument;
-
- if ( ACCESS_Frame( image_size ) )
- return error;
-
- buff = 0;
- loaded = 0;
- line = (PByte)image->map.bitmap +
- y_offset * image->map.cols;
- limit = (PByte)image->map.bitmap +
- ( y_offset + source_height ) * image->map.cols;
-
- for ( ; line < limit; line += image->map.cols )
- {
- PByte ptr;
-
-
- ptr = line + x_offset / 8;
- count = source_width;
-
- /* We may assume that `loaded' is less than 8 */
- buff >>= x_offset % 8;
- loaded += x_offset % 8;
-
- /* first of all, read all consecutive bytes */
- while ( count >= 8 )
- {
- if ( loaded < 8 )
- {
- buff |= ((UShort)GET_Byte()) << (8 - loaded);
- loaded += 8;
- }
-
- *ptr++ |= (Byte)(buff >> 8);
- buff <<= 8;
- loaded -= 8;
- count -= 8;
- }
-
- /* now write remaining bits (i.e. end of line with count < 8) */
- if ( count > 0 )
- {
- if ( loaded < count )
- {
- buff |= ((UShort)GET_Byte()) << (8 - loaded);
- loaded += 8;
- }
-
- *ptr |= ((Byte)(buff >> 8)) & ~(0xFF >> count);
- buff <<= count;
- loaded -= count;
- }
-
- if ( byte_padded )
- {
- buff = 0;
- loaded = 0;
- }
- }
-
- FORGET_Frame();
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function: Crop_Bitmap
- *
- ******************************************************************/
-
- static
- void Crop_Bitmap( TT_SBit_Image* image )
- {
- /*******************************************************/
- /* In the following situation, some bounding boxes of */
- /* embedded bitmaps are too large. We need to crop it */
- /* to a reasonable size. */
- /* */
- /* --------- */
- /* | | ----- */
- /* | *** | |***| */
- /* | * | -----> | * | */
- /* | * | | * | */
- /* | * | | * | */
- /* | * | | * | */
- /* | *** | |***| */
- /* --------- ----- */
- /* */
- /*******************************************************/
-
- Int rows, count;
- Long line_len;
- PByte line;
-
-
- /********************************************************************/
- /* */
- /* first of all, check the top-most lines of the bitmap and remove */
- /* them if they're empty. */
- /* */
- {
- line = (PByte)image->map.bitmap;
- rows = image->map.rows;
- line_len = image->map.cols;
-
- for ( count = 0; count < rows; count++ )
- {
- PByte cur = line;
- PByte limit = line + line_len;
-
-
- for ( ; cur < limit; cur++ )
- if ( cur[0] )
- goto Found_Top;
-
- /* the current line was empty -- skip to next one */
- line = limit;
- }
-
- Found_Top:
- /* check that we have at least one filled line */
- if ( count >= rows )
- goto Empty_Bitmap;
-
- /* now, crop the empty upper lines */
- if ( count > 0 )
- {
- line = (PByte)image->map.bitmap;
-
- MEM_Move( line, line + count*line_len, (rows-count) * line_len );
-
- image->metrics.bbox.yMax -= count;
- image->metrics.vertBearingY -= count;
- image->metrics.horiBearingY -= count;
- image->map.rows -= count;
- rows -= count;
- }
- }
-
- /*******************************************************************/
- /* */
- /* second, crop the lower lines */
- /* */
- {
- line = (PByte)image->map.bitmap + (rows-1) * line_len;
-
- for ( count = 0; count < rows; count++ )
- {
- PByte cur = line;
- PByte limit = line + line_len;
-
-
- for ( ; cur < limit; cur++ )
- if ( cur[0] )
- goto Found_Bottom;
-
- /* the current line was empty -- skip to previous one */
- line -= line_len;
- }
-
- Found_Bottom:
- if ( count > 0 )
- {
- image->metrics.bbox.yMin += count;
- image->map.rows -= count;
- rows -= count;
- }
- }
-
- /*******************************************************************/
- /* */
- /* third, get rid of the space on the left side of the glyph */
- /* */
- do
- {
- PByte limit;
-
-
- line = (PByte)image->map.bitmap;
- limit = line + rows * line_len;
-
- for ( ; line < limit; line += line_len )
- if ( line[0] & 0x80 )
- goto Found_Left;
-
- /* shift the whole glyph one pixel to the left */
- line = (PByte)image->map.bitmap;
- limit = line + rows * line_len;
-
- for ( ; line < limit; line += line_len )
- {
- Int n, width = image->map.width;
- Byte old;
- PByte cur = line;
-
-
- old = cur[0] << 1;
-
- for ( n = 8; n < width; n += 8 )
- {
- Byte val;
-
-
- val = cur[1];
- cur[0] = old | (val >> 7);
- old = val << 1;
- cur++;
- }
- cur[0] = old;
- }
-
- image->map.width--;
- image->metrics.horiBearingX++;
- image->metrics.vertBearingX++;
- image->metrics.bbox.xMin++;
-
- } while ( image->map.width > 0 );
-
- Found_Left:
-
- /*********************************************************************/
- /* */
- /* finally, crop the bitmap width to get rid of the space on the */
- /* right side of the glyph. */
- /* */
- do
- {
- Int right = image->map.width-1;
- PByte limit;
- Byte mask;
-
-
- line = (PByte)image->map.bitmap + (right >> 3);
- limit = line + rows*line_len;
- mask = 0x80 >> (right & 7);
-
- for ( ; line < limit; line += line_len )
- if ( line[0] & mask )
- goto Found_Right;
-
- /* crop the whole glyph on the right */
- image->map.width--;
- image->metrics.bbox.xMax--;
-
- } while ( image->map.width > 0 );
-
- Found_Right:
- /* all right, the bitmap was cropped */
- return;
-
- Empty_Bitmap:
- image->map.width = 0;
- image->map.rows = 0;
- image->map.cols = 0;
- image->map.size = 0;
- }
-
-/*************
- *
- * Main body
- *
- *************/
-
-
- static
- TT_Error Load_Range_Codes( TT_SBit_Range* range,
- PFace face,
- Bool load_offsets )
- {
- DEFINE_LOCALS;
-
- ULong count, n, size;
-
-
- (void)face;
-
- /* read glyph count */
- if ( ACCESS_Frame( 4L ) )
- goto Exit;
- count = GET_ULong();
- FORGET_Frame();
-
- range->num_glyphs = count;
-
- /* Allocate glyph offsets table if needed */
- if ( load_offsets )
- {
- if ( ALLOC_ARRAY( range->glyph_offsets, count, ULong ) )
- goto Exit;
-
- size = count * 4L;
- }
- else
- size = count * 2L;
-
- /* Allocate glyph codes table and access frame */
- if ( ALLOC_ARRAY ( range->glyph_codes, count, UShort ) ||
- ACCESS_Frame( size ) )
- goto Exit;
-
- for ( n = 0; n < count; n++ )
- {
- range->glyph_codes[n] = GET_UShort();
-
- if ( load_offsets )
- range->glyph_offsets[n] = (ULong)range->image_offset + GET_UShort();
- }
-
- FORGET_Frame();
-
- Exit:
- return error;
- }
-
-
- static
- TT_Error Load_SBit_Range( TT_SBit_Strike* strike,
- TT_SBit_Range* range,
- PFace face )
- {
- DEFINE_LOCALS;
-
- UShort format;
-
-
- (void)face;
- (void)strike;
-
- format = range->index_format;
- PTRACE6(( "Index Format: %d\n", format ));
-
- switch( format )
- {
- case 1: /* variable metrics with 4-byte offsets */
- case 3: /* variable metrics with 2-byte offsets */
- {
- UShort num_glyphs, size_elem;
- Bool large = (format == 1);
- ULong* cur;
-
- num_glyphs = range->last_glyph - range->first_glyph + 1;
- PTRACE5(( " num glyphs: %hu\n", num_glyphs ));
-
- range->num_glyphs = num_glyphs;
-
- num_glyphs++; /* BEWARE */
-
- size_elem = large ? 4 : 2;
-
- if ( ALLOC_ARRAY( range->glyph_offsets, num_glyphs, ULong ) ||
- ACCESS_Frame( num_glyphs * size_elem ) )
- return error;
-
- cur = range->glyph_offsets;
-
- while ( num_glyphs > 0 )
- {
- cur[0] = (TT_ULong)( range->image_offset +
- (large ? GET_ULong() : GET_UShort()) );
- PTRACE7(( " offset: %d\n", cur[0] ));
- cur++;
- num_glyphs--;
- }
-
- FORGET_Frame();
- }
- break;
-
- case 2: /* all glyphs have identical metrics */
- case 4:
- case 5:
- {
- error = 0;
-
- if ( format != 4 ) /* read constant metrics, formats 2 and 5 */
- {
- TT_SBit_Metrics* metrics;
-
-
- if ( ACCESS_Frame( 12L ) )
- return error;
-
- range->image_size = GET_ULong();
- metrics = &range->metrics;
-
- metrics->height = GET_Byte();
- metrics->width = GET_Byte();
-
- metrics->horiBearingX = GET_Char();
- metrics->horiBearingY = GET_Char();
- metrics->horiAdvance = GET_Byte();
-
- metrics->vertBearingX = GET_Char();
- metrics->vertBearingY = GET_Char();
- metrics->vertAdvance = GET_Byte();
-
- FORGET_Frame();
- }
-
- if ( format != 2 ) /* load range codes, formats 4 and 5 */
- error = Load_Range_Codes( range, face, (format == 4) );
- }
- break;
-
- default:
- error = TT_Err_Invalid_File_Format;
- }
-
- PTRACE3(( "Embedded Bitmap Location Tables loaded.\n" ));
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Eblc
- *
- * Description : Loads the Eblc table directory into face table.
- *
- * Input : face face record to look for
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- static
- TT_Error Load_TrueType_Eblc( PFace face,
- TT_EBLC* eblc )
- {
- DEFINE_LOCALS;
-
- ULong eblc_offset;
- UShort i;
- Long table;
-
- TT_SBit_Strike* strike;
-
-
- PTRACE2(( "Load_EBLC_Table( %08lx )\n", (long)face ));
-
- eblc->version = 0;
-
- /* Try to find the `EBLC' or `bloc' table in the font files. */
- /* Both tags describe the same table; `EBLC' is for OpenType */
- /* fonts while `bloc' is for TrueType GX fonts. Many fonts */
- /* contain both tags pointing to the same table. */
-
- table = TT_LookUp_Table( face, TTAG_EBLC );
- if ( table < 0 )
- table = TT_LookUp_Table( face, TTAG_bloc );
-
- if ( table < 0 )
- /* This table is optional */
- return TT_Err_Ok;
-
- eblc_offset = face->dirTables[table].Offset;
-
- if ( FILE_Seek( eblc_offset ) ||
- ACCESS_Frame( 8L ) )
- return error;
-
- eblc->version = GET_ULong();
- eblc->num_strikes = GET_ULong();
-
- FORGET_Frame();
-
- PTRACE2(( "-- Tables count: %12u\n", eblc->num_strikes ));
- PTRACE2(( "-- Format version: %08lx\n", eblc->version ));
-
- if ( eblc->version != 0x00020000 )
- {
- PERROR(( "Invalid file format!\n" ));
- return TT_Err_Invalid_File_Format;
- }
-
- if ( ALLOC_ARRAY( eblc->strikes, eblc->num_strikes, TT_SBit_Strike ) ||
- ACCESS_Frame( 48L * eblc->num_strikes ) )
- return error;
-
- strike = eblc->strikes;
-
- for ( i = 0; i < eblc->num_strikes; i++, strike++ )
- { /* loop through the tables and get all entries */
- ULong indexTablesSize;
- TT_SBit_Line_Metrics* metrics;
- Int count;
-
-
- strike->ranges_offset = GET_ULong();
- indexTablesSize = GET_ULong(); /* dont' save */
-
- strike->num_ranges = GET_ULong();
- strike->color_ref = GET_ULong();
-
- /* load horizontal and vertical metrics */
- metrics = &strike->hori;
- for ( count = 2; count > 0; count-- )
- {
- metrics->ascender = GET_Char();
- metrics->descender = GET_Char();
- metrics->max_width = GET_Byte();
-
- metrics->caret_slope_numerator = GET_Char();
- metrics->caret_slope_denominator = GET_Char();
- metrics->caret_offset = GET_Char();
-
- metrics->min_origin_SB = GET_Char();
- metrics->min_advance_SB = GET_Char();
- metrics->max_before_BL = GET_Char();
- metrics->min_after_BL = GET_Char();
- metrics->pads[0] = GET_Char();
- metrics->pads[1] = GET_Char();
-
- metrics = &strike->vert;
- }
-
- strike->start_glyph = GET_UShort();
- strike->end_glyph = GET_UShort();
- strike->x_ppem = GET_Byte();
- strike->y_ppem = GET_Byte();
- strike->bit_depth = GET_Byte();
- strike->flags = GET_Char();
-
- PTRACE4(( " start - end - ppemX - ppemY\n" ));
- PTRACE4(( " %04d - %04d - %3u - %3u\n",
- strike->start_glyph,
- strike->end_glyph,
- strike->x_ppem,
- strike->y_ppem ));
- }
-
- FORGET_Frame();
-
- /* Load EBLC index ranges */
- strike = eblc->strikes;
-
- for ( i = 0; i < eblc->num_strikes; i++, strike++ )
- {
- TT_SBit_Range* range;
- UShort count = strike->num_ranges;
-
-
- /* loop through the tables and get all entries */
- if ( ALLOC_ARRAY( strike->sbit_ranges,
- strike->num_ranges,
- TT_SBit_Range ) ||
- FILE_Seek( eblc_offset + strike->ranges_offset ) ||
- ACCESS_Frame( strike->num_ranges * 8L ) )
- return error;
-
- for ( range = strike->sbit_ranges; count > 0; count--, range++ )
- {
- range->first_glyph = GET_UShort();
- range->last_glyph = GET_UShort();
- range->table_offset = eblc_offset + strike->ranges_offset +
- GET_ULong();
- }
- FORGET_Frame();
-
- /* Now, read each index table */
- range = strike->sbit_ranges;
- for ( count = strike->num_ranges; count > 0; count--, range++ )
- {
- /* Read the header */
- if ( FILE_Seek( range->table_offset ) ||
- ACCESS_Frame( 8L ) )
- return error;;
-
- range->index_format = GET_UShort();
- range->image_format = GET_UShort();
- range->image_offset = GET_ULong();
-
- FORGET_Frame();
-
- error = Load_SBit_Range( strike, range, face );
- if (error) return error;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
- static
- void Free_TrueType_Eblc( TT_EBLC* eblc )
- {
- if ( eblc )
- {
- ULong i;
- TT_SBit_Strike* strike = eblc->strikes;
-
-
- strike = eblc->strikes;
-
- for ( i = eblc->num_strikes; i > 0; i--, strike++ )
- {
- /* for each strike, release all glyph ranges */
- TT_SBit_Range* range = strike->sbit_ranges;
- Int n;
-
-
- for ( n = strike->num_ranges; n > 0; n--, range++ )
- {
- /* release a range */
- FREE( range->glyph_offsets );
- FREE( range->glyph_codes );
- }
- FREE( strike->sbit_ranges );
- strike->num_ranges = 0;
- }
- FREE( eblc->strikes );
- eblc->num_strikes = 0;
- eblc->version = 0;
- }
- }
-
-
- static
- TT_Error Load_SBit_Metrics( TT_Big_Glyph_Metrics* metrics,
- TT_SBit_Range* range,
- ULong ebdt_offset )
- {
- TT_Error error;
- Byte height, width;
-
-
- /* copy bitmap metrics for formats 2 and 5 */
- if ( ( ( range->index_format == 2 ) || ( range->index_format == 5 ) ) &&
- ( range->image_format == 5 ) )
- /* metrics are taken from current image bitmap */
- /* i.e. from `image.metrics' */
- {
- TT_SBit_Metrics* rmetrics = &range->metrics;
-
-
- metrics->bbox.xMin = rmetrics->horiBearingX;
- metrics->bbox.xMax = metrics->bbox.xMin + rmetrics->width;
-
- metrics->bbox.yMax = rmetrics->horiBearingY;
- metrics->bbox.yMin = metrics->bbox.yMax - rmetrics->height;
-
- metrics->horiBearingX = rmetrics->horiBearingX;
- metrics->horiBearingY = metrics->bbox.yMax;
- metrics->horiAdvance = rmetrics->horiAdvance;
-
- metrics->vertBearingX = rmetrics->vertBearingX;
- metrics->vertBearingY = rmetrics->vertBearingY;
- metrics->vertAdvance = rmetrics->vertAdvance;
-
- return TT_Err_Ok;
- }
-
- switch ( range->image_format )
- {
- case 1:
- case 2:
- case 6:
- case 7:
- case 8:
- case 9:
- {
- Long length = 5L;
-
-
- if ( range->image_format == 8 )
- length++;
-
- /* read the small metrics */
- if ( ACCESS_Frame( length ) )
- return error;
-
- height = GET_Byte();
- width = GET_Byte();
-
- metrics->horiBearingX = GET_Char();
- metrics->horiBearingY = GET_Char();
- metrics->horiAdvance = GET_Byte();
-
- FORGET_Frame();
-
- metrics->bbox.xMin = metrics->horiBearingX;
- metrics->bbox.yMax = metrics->horiBearingY;
- metrics->bbox.xMax = metrics->bbox.xMin + width;
- metrics->bbox.yMin = metrics->bbox.yMax - height;
-
- /* read the rest of the big metrics for the formats */
- /* that support it. */
- if ( ( range->image_format >= 6 ) && ( range->image_format != 8 ) )
- {
- if ( ACCESS_Frame( 3L ) )
- return error;
-
- metrics->vertBearingX = (Int)GET_Char();
- metrics->vertBearingY = (Int)GET_Char();
- metrics->vertAdvance = (Int)GET_Char();
-
- FORGET_Frame();
- }
- else
- {
- /* XXX: How can we fill these when the information isn't */
- /* available? */
- metrics->vertBearingX = 0;
- metrics->vertBearingY = 0;
- metrics->vertAdvance = 0;
- }
- }
- break;
-
- case 5: /* metrics are taken from current image bitmap */
- /* i.e. from 'image.metrics' */
- break;
-
- default:
- PERROR(( "Unsupported embedded bitmap format!\n" ));
- return TT_Err_Invalid_File_Format;
- }
-
- return TT_Err_Ok;
- }
-
-
- static
- TT_Error Load_SBit_Image( TT_SBit_Strike strike,
- UShort glyph_index,
- Byte x_offset,
- Byte y_offset,
- ULong ebdt_offset,
- TT_SBit_Image* image,
- UShort component_depth )
- {
- TT_Error error;
- Byte height, width;
-
- ULong bitmap_offset;
-
- TT_SBit_Range* range = 0;
-
- TT_Big_Glyph_Metrics metrics;
-
- /********************************************************************/
- /* */
- /* Scan the strike's range for the position/metrics of the source */
- /* glyph. */
- {
- UShort count = strike.num_ranges;
- TT_SBit_Range* cur = strike.sbit_ranges;
-
- for ( ; count > 0; count--, cur++ )
- {
- /* look for the glyph in the current range */
- switch ( cur->index_format )
- {
- case 1:
- case 2:
- case 3:
- if ( glyph_index >= cur->first_glyph &&
- glyph_index <= cur->last_glyph )
- {
- UShort delta = glyph_index - cur->first_glyph;
-
-
- range = cur;
- bitmap_offset = cur->index_format == 2
- ? cur->image_offset + cur->image_size * delta
- : cur->glyph_offsets[delta];
- goto Found;
- }
- break;
-
- case 4:
- case 5:
- {
- UShort n;
-
-
- for ( n = 0; n < cur->num_glyphs; n++ )
- if ( cur->glyph_codes[n] == glyph_index )
- {
- range = cur;
- bitmap_offset = cur->index_format == 4
- ? cur->glyph_offsets[n]
- : cur->image_offset + cur->image_size * n;
- goto Found;
- }
- }
- break;
-
- default:
- return TT_Err_Invalid_Glyph_Index;
- }
- }
- /* Not found */
- return TT_Err_Invalid_Glyph_Index;
- }
-
- Found:
- if ( FILE_Seek( ebdt_offset + bitmap_offset ) )
- return error;
-
- /* First of all, load the metrics if needed */
- error = Load_SBit_Metrics( &metrics, range, ebdt_offset );
- if ( error )
- return error;
-
- width = metrics.bbox.xMax - metrics.bbox.xMin;
- height = metrics.bbox.yMax - metrics.bbox.yMin;
-
- if ( !component_depth )
- {
- image->metrics = metrics;
-
- image->map.width = width;
- image->map.rows = height;
-
- image->map.cols = (width + 7) >> 3;
- image->map.size = height * image->map.cols;
-
- if ( REALLOC( image->map.bitmap, image->map.size ) )
- return error;
-
- MEM_Set( image->map.bitmap, 0, image->map.size );
- }
-
- /* Now, load the data as needed */
- switch ( range->image_format )
- {
- case 1:
- case 6: /* byte-aligned data */
- error = Load_BitmapData( image,
- height * (( width + 7 ) >> 3),
- x_offset, y_offset,
- width, height,
- 1 );
- if ( error )
- return error;
- break;
-
- case 2:
- case 5:
- case 7:
- error = Load_BitmapData( image,
- (width * height + 7) >> 3,
- x_offset, y_offset,
- width, height, 0 );
- if ( error )
- return error;
- break;
-
- case 8:
- case 9:
- {
- /* Now, load composite sbit glyphs */
- /* This code is not sophisticated */
-
- TT_SBit_Component* component_array;
- UShort num_components;
-
- Int i = 0;
-
-
- if ( ACCESS_Frame( 2L ) )
- return error;
- num_components = GET_UShort();
- FORGET_Frame();
-
- MEM_Alloc( component_array,
- sizeof ( TT_SBit_Component ) * num_components );
-
- if ( ACCESS_Frame( 4L * num_components ) )
- return error;
-
- for ( i = 0; i < num_components; i++ )
- {
- component_array[i].glyph_code = GET_UShort();
- component_array[i].x_offset = GET_Char();
- component_array[i].y_offset = GET_Char();
- }
-
- FORGET_Frame();
-
- component_depth++;
-
- for ( i = 0; i < num_components; i++ )
- {
- error = Load_SBit_Image( strike, component_array[i].glyph_code,
- component_array[i].x_offset,
- component_array[i].y_offset,
- ebdt_offset,
- image,
- component_depth );
- if ( error )
- return error;
- }
- FREE( component_array );
- break;
-
- default:
- return TT_Err_Invalid_File_Format;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function: Load_TrueType_Ebdt
- *
- ******************************************************************/
-
- static
- TT_Error Load_TrueType_Ebdt( PFace face,
- TT_SBit_Strike strike,
- ULong glyph_index,
- TT_SBit_Image* image )
- {
- DEFINE_LOCALS;
-
- ULong ebdt_offset;
- ULong version;
- Long i;
-
-
- /* Try to find the `EBDT' or `bdat' table in the font files. */
- /* Both tags describe the same table, `EBDT' is for OpenType */
- /* fonts, while `bdat' is for TrueType GX fonts. Many fonts */
- /* contain both tags pointing to the same table */
-
- i = TT_LookUp_Table( face, TTAG_EBDT );
- if ( i < 0 )
- i = TT_LookUp_Table( face, TTAG_bdat );
-
- if ( i < 0 )
- return TT_Err_Table_Missing;
-
- ebdt_offset = face->dirTables[i].Offset;
-
- if ( FILE_Seek( ebdt_offset ) ||
- ACCESS_Frame( 4L ) ) /* read into frame */
- return error;
-
- version = GET_ULong();
- FORGET_Frame();
-
- PTRACE2(( "-- Format version : %08lx\n", version ));
- if ( version != 0x00020000 )
- {
- PERROR(( "Invalid file format!\n" ));
- return TT_Err_Invalid_File_Format;
- }
-
- /* This doesn't compile, I simply commented it out ?? - David */
- /* PTRACE4(( "-- Format: %d\n", range->image_format )); */
-
- error = Load_SBit_Image( strike,
- glyph_index,
- 0, 0,
- ebdt_offset,
- image,
- 0 );
- if ( error )
- return error;
-
- return TT_Err_Ok;
- }
-
-
- static TT_Error EBLC_Create( void* ext,
- PFace face )
- {
- TT_EBLC* eblc = (TT_EBLC*)ext;
-
-
- /* by convention */
- if ( !eblc )
- return TT_Err_Ok;
-
- return Load_TrueType_Eblc( face, eblc );
- }
-
-
- static TT_Error EBLC_Destroy( void* ext,
- PFace face )
- {
- TT_EBLC* eblc = (TT_EBLC*)ext;
-
-
- (void)face;
-
- if ( eblc )
- Free_TrueType_Eblc( eblc );
-
- return TT_Err_Ok;
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Init_SBit_Extension */
- /* */
- /* <Description> */
- /* Initialize the embedded bitmaps extension for the */
- /* FreeType engine. */
- /* */
- /* <Input> */
- /* engine :: handle to current FreeType library instance */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_FUNC
- TT_Error TT_Init_SBit_Extension( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
- TT_Error error;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- error = TT_Register_Extension( _engine,
- SBIT_ID,
- sizeof ( TT_EBLC ),
- EBLC_Create,
- EBLC_Destroy );
-
- return error;
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_Face_Bitmaps */
- /* */
- /* <Description> */
- /* Loads the `EBLC' table from a font file, if any. */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* */
- /* <Output> */
- /* eblc_table :: a descriptor for the EBLC table */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function returns TT_Err_Table_Missing if the */
- /* font contains no embedded bitmaps. All fields in */
- /* `eblc_table' will then be set to 0. */
- /* */
- EXPORT_FUNC
- TT_Error TT_Get_Face_Bitmaps( TT_Face face,
- TT_EBLC* eblc_table )
- {
- PFace faze = HANDLE_Face( face );
- TT_EBLC* eblc;
- TT_Error error;
-
-
- error = TT_Extension_Get( faze, SBIT_ID, (void**)&eblc );
- if ( !error )
- {
- if ( eblc->version )
- {
- *eblc_table = *eblc;
- return TT_Err_Ok;
- }
- error = TT_Err_Table_Missing;
- }
-
- eblc_table->version = 0;
- eblc_table->num_strikes = 0;
- eblc_table->strikes = 0;
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * <Function> TT_Get_SBit_Strike
- *
- * <Description>
- * Loads suitable strike (bitmap sizetable) for given instance.
- * This strike includes sbitLineMetrics.
- *
- * <Input>
- * face :: the source face
- * instance :: the current size instance
- *
- * <Output>
- * strike :: the bitmap strike descriptor
- *
- * <Return>
- * TrueType error code. 0 means success.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_SBit_Strike( TT_Face face,
- TT_Instance instance,
- TT_SBit_Strike* strike )
- {
- TT_Error error;
- PFace faze = HANDLE_Face( face );
- PInstance ins = HANDLE_Instance( instance );
-
- TT_EBLC* eblc;
- TT_Int x_ppem, y_ppem;
-
-
- if ( !strike || !ins || ins->owner != faze )
- return TT_Err_Invalid_Argument;
-
- error = TT_Extension_Get( faze, SBIT_ID, (void**)&eblc );
- if ( error )
- goto Exit;
-
- /********************************************************************/
- /* */
- /* Look for an sbit strike that matches the current x and y ppms */
- /* */
- {
- UShort count = eblc->num_strikes;
- TT_SBit_Strike* cur = eblc->strikes;
-
-
- x_ppem = ins->metrics.x_ppem;
- y_ppem = ins->metrics.y_ppem;
-
- MEM_Set( strike, 0, sizeof ( TT_SBit_Strike ) );
-
- for ( ; count > 0; count--, cur++ )
- if ( cur->x_ppem == x_ppem &&
- cur->y_ppem == y_ppem )
- {
- *strike = *cur;
- break;
- }
-
- /* return immediately if we didn't find an appropriate strike */
- if ( !strike->num_ranges )
- error = TT_Err_Invalid_PPem;
- }
-
- Exit:
- return error;
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_Glyph_Bitmap */
- /* */
- /* <Description> */
- /* Loads a given glyph embedded bitmap. */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* instance :: current size/transform instance */
- /* glyph_index :: index of source glyph */
- /* bitmap :: target embedded bitmap descriptor */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function returns an error if there is no */
- /* embedded bitmap for the glyph at the given */
- /* instance. */
- /* */
- EXPORT_FUNC
- TT_Error TT_Load_Glyph_Bitmap( TT_Face face,
- TT_Instance instance,
- TT_UShort glyph_index,
- TT_SBit_Image* image )
- {
- TT_Stream stream;
- TT_Error error;
-
- PFace faze = HANDLE_Face( face );
- PInstance ins = HANDLE_Instance( instance );
-
- TT_SBit_Strike strike;
-
-
- if ( ins->owner != faze )
- {
- error = TT_Err_Invalid_Argument;
- goto Fail;
- }
-
- /********************************************************************/
- /* */
- /* Look for an sbit strike that matches the current x and y ppms */
- /* */
- error = TT_Get_SBit_Strike( face, instance, &strike );
- if ( error )
- goto Fail;
-
- /* return immediately if the glyph index isn't in the strike extent */
- if ( glyph_index < strike.start_glyph ||
- glyph_index > strike.end_glyph )
- {
- error = TT_Err_Invalid_Glyph_Index;
- goto Fail;
- }
-
- {
- image->bit_depth = 1;
-
- if ( !USE_Stream( faze->stream, stream ) )
- {
- error = Load_TrueType_Ebdt( faze, strike, glyph_index, image );
-
- DONE_Stream( stream );
-
- /* exit successfully if we can */
- if ( !error )
- {
- image->map.flow = TT_Flow_Down;
-
- Crop_Bitmap( image );
-
- /* correct sbit metrics */
- {
- TT_Big_Glyph_Metrics* metrics = &image->metrics;
-
-
- metrics->bbox.xMin *= 64;
- metrics->bbox.xMax *= 64;
-
- metrics->bbox.yMax *= 64;
- metrics->bbox.yMin *= 64;
-
- metrics->horiBearingX *= 64;
- metrics->horiBearingY *= 64;
- metrics->horiAdvance *= 64;
-
- metrics->vertBearingX *= 64;
- metrics->vertBearingY *= 64;
- metrics->vertAdvance *= 64;
- }
-
- goto Exit;
- }
- }
- }
-
- Fail:
- image->map.width = 0;
- image->map.rows = 0;
- image->map.cols = 0;
- image->map.size = 0;
- image->map.bitmap = 0;
- image->map.flow = 0;
- image->bit_depth = 0;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_New_SBit_Image */
- /* */
- /* <Description> */
- /* Allocates a new embedded bitmap container. */
- /* */
- /* <Output> */
- /* image :: sbit image */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_FUNC
- TT_Error TT_New_SBit_Image( TT_SBit_Image** image )
- {
- return MEM_Alloc( *image, sizeof ( **image ) );
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Done_SBit_Image */
- /* */
- /* <Description> */
- /* Releases an embedded bitmap container. */
- /* */
- /* <Input> */
- /* image :: sbit image */
- /* */
- EXPORT_FUNC
- void TT_Done_SBit_Image( TT_SBit_Image* image )
- {
- FREE( image->map.bitmap );
- FREE( image );
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxsbit.h b/Build/source/libs/libttf/extend/ftxsbit.h
deleted file mode 100644
index 05e7b1fc052..00000000000
--- a/Build/source/libs/libttf/extend/ftxsbit.h
+++ /dev/null
@@ -1,490 +0,0 @@
-/*******************************************************************
- *
- * ftxsbit.h
- *
- * embedded bitmap support API extension
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 extension is used to load the embedded bitmaps present
- * in certain TrueType files.
- *
- ******************************************************************/
-
-#ifndef FTXSBIT_H
-#define FTXSBIT_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Metrics */
- /* */
- /* <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' table. */
- /* */
- /* <Fields> */
- /* height :: glyph height in pixels */
- /* width :: glyph width in pixels */
- /* */
- /* horiBearingX :: horizontal left bearing */
- /* horiBearingY :: horizontal top bearing */
- /* horiAdvance :: horizontal advance */
- /* */
- /* vertBearingX :: vertical left bearing */
- /* vertBearingY :: vertical top bearing */
- /* vertAdvance :: vertical advance */
- /* */
- typedef struct TT_SBit_Metrics_
- {
- TT_Byte height;
- TT_Byte width;
-
- TT_Char horiBearingX;
- TT_Char horiBearingY;
- TT_Byte horiAdvance;
-
- TT_Char vertBearingX;
- TT_Char vertBearingY;
- TT_Byte vertAdvance;
-
- } TT_SBit_Metrics;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Small_Metrics */
- /* */
- /* <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' table. */
- /* */
- /* <Fields> */
- /* height :: glyph height in pixels */
- /* width :: glyph width in pixels */
- /* */
- /* bearingX :: left-side bearing */
- /* bearingY :: top-side bearing */
- /* advance :: advance width or height */
- /* */
- typedef struct TT_SBit_Small_Metrics_
- {
- TT_Byte height;
- TT_Byte width;
-
- TT_Char bearingX;
- TT_Char bearingY;
- TT_Byte advance;
-
- } TT_SBit_Small_Metrics;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Line_Metrics */
- /* */
- /* <Description> */
- /* A structure used to describe the text line metrics of */
- /* a given bitmap strike, for either horizontal or */
- /* vertical layout. */
- /* */
- /* <Fields> */
- /* ascender :: ascender in pixels */
- /* descender :: descender in pixels */
- /* max_width :: 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 */
- /* (hori. advance - ( horiBearingX + width )) */
- /* (resp. vert. advance - ( vertBearingY + height )) */
- /* max_before_BL :: Maximum of horiBearingY */
- /* (resp. Maximum of vertBearingY) */
- /* min_after_BL :: Minimum of ( horiBearingY - height ) */
- /* (resp. vertBearingX - width ) */
- /* */
- typedef struct TT_SBit_Line_Metrics_
- {
- TT_Char ascender;
- TT_Char descender;
- TT_Byte max_width;
- TT_Char caret_slope_numerator;
- TT_Char caret_slope_denominator;
- TT_Char caret_offset;
- TT_Char min_origin_SB;
- TT_Char min_advance_SB;
- TT_Char max_before_BL;
- TT_Char min_after_BL;
- TT_Char pads[2];
-
- } TT_SBit_Line_Metrics;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Range */
- /* */
- /* <Description> */
- /* A TrueType/OpenType subIndexTable as defined in the */
- /* `EBLC' or `bloc' tables. */
- /* */
- /* <Fields> */
- /* */
- /* first_glyph :: first glyph index in range */
- /* last_glyph :: last glyph index in range */
- /* */
- /* index_format :: format of index table. valid */
- /* values are 1 to 5. */
- /* */
- /* image_format :: format of `EBDT' image data */
- /* image_offset :: offset to image data in `EBDT' */
- /* */
- /* image_size :: for index formats 2 and 5. This is */
- /* the size in bytes of each glyph bitmap */
- /* 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 :: offset of index table in `EBLC' table */
- /* -- only used during strike loading. */
- /* */
- typedef struct TT_SBit_Range
- {
- TT_UShort first_glyph;
- TT_UShort last_glyph;
-
- TT_UShort index_format;
- TT_UShort image_format;
- TT_ULong image_offset;
-
- TT_ULong image_size;
- TT_SBit_Metrics metrics;
- TT_ULong num_glyphs;
-
- TT_ULong* glyph_offsets;
- TT_UShort* glyph_codes;
-
- TT_ULong table_offset;
-
- } TT_SBit_Range;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Strike */
- /* */
- /* <Description> */
- /* A structure used describe a given bitmap strike in the */
- /* `EBLC' or `bloc' tables. */
- /* */
- /* <Fields> */
- /* */
- /* num_index_ranges :: number of index ranges */
- /* index_ranges :: array of glyph index ranges */
- /* */
- /* color_ref :: unused. color reference? */
- /* hori :: line metrics for horizontal layouts. */
- /* vert :: line metrics for vertical layouts. */
- /* */
- /* start_glyph :: lowest glyph index for this strike. */
- /* end_glyph :: higher glyph index for this strike. */
- /* */
- /* x_ppem :: horizontal pixels per EM */
- /* y_ppem :: vertical pixels per EM */
- /* bit_depth :: bit depth. valid values are 1, 2, 4 & 8 */
- /* flags :: vertical or horizontal? */
- /* */
- typedef struct TT_SBit_Strike_
- {
- TT_Int num_ranges;
- TT_SBit_Range* sbit_ranges;
- TT_ULong ranges_offset;
-
- TT_ULong color_ref;
-
- TT_SBit_Line_Metrics hori;
- TT_SBit_Line_Metrics vert;
-
- TT_UShort start_glyph;
- TT_UShort end_glyph;
-
- TT_Byte x_ppem;
- TT_Byte y_ppem;
- TT_Byte bit_depth;
- TT_Char flags;
-
- } TT_SBit_Strike;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Component */
- /* */
- /* <Description> */
- /* A simple structure to describe a compound sbit element */
- /* */
- /* <Fields> */
- /* glyph_code :: element's glyph index */
- /* x_offset :: element's left bearing */
- /* y_offset :: element's top bearing */
- /* */
- typedef struct TT_SBit_Component_
- {
- TT_UShort glyph_code;
- TT_Char x_offset;
- TT_Char y_offset;
-
- } TT_SBit_Component;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Scale */
- /* */
- /* <Description> */
- /* A structure used describe a given bitmap scaling */
- /* table, as defined for the `EBSC' table. */
- /* */
- /* <Fields> */
- /* hori :: horizontal line metrics */
- /* vert :: vertical line metrics */
- /* */
- /* x_ppem :: horizontal pixels per EM */
- /* y_ppem :: vertical pixels per EM */
- /* */
- /* x_ppem_substitute :: substitution x_ppem */
- /* y_ppem_substitute :: substitution y_ppem */
- /* */
- typedef struct TT_SBit_Scale_
- {
- TT_SBit_Line_Metrics hori;
- TT_SBit_Line_Metrics vert;
-
- TT_Byte x_ppem;
- TT_Byte y_ppem;
-
- TT_Byte x_ppem_substitute;
- TT_Byte y_ppem_substitute;
-
- } TT_SBit_Scale;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Image */
- /* */
- /* <Description> */
- /* A structure used to describe a given embedded bitmap */
- /* image. */
- /* */
- /* <Fields> */
- /* map :: bitmap descriptor */
- /* bit_depth :: pixel bit depth */
- /* metrics :: glyph metrics for the bitmap */
- /* */
- typedef struct TT_SBit_Image_
- {
- TT_Raster_Map map;
- int bit_depth;
- TT_Big_Glyph_Metrics metrics;
-
- } TT_SBit_Image;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_EBLC */
- /* */
- /* <Description> */
- /* A structure used to describe the `EBLC' table from */
- /* a TrueType font. */
- /* */
- /* <Fields> */
- /* version :: version number of the EBLC table */
- /* */
- /* num_strikes :: the number of strikes, i.e. bitmap */
- /* sizes, present in this font */
- /* */
- /* strikes :: array of strikes */
- /* */
- typedef struct TT_EBLC_
- {
- TT_ULong version;
- TT_ULong num_strikes;
- TT_SBit_Strike* strikes;
-
- } TT_EBLC;
-
-
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Init_SBit_Extension */
- /* */
- /* <Description> */
- /* Initializes the embedded bitmap extension for the */
- /* FreeType engine. */
- /* */
- /* <Input> */
- /* engine :: handle to current FreeType library instance */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_DEF
- TT_Error TT_Init_SBit_Extension( TT_Engine engine );
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_Face_Bitmaps */
- /* */
- /* <Description> */
- /* Loads the `EBLC' table from a font file, if any. */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* */
- /* <Output> */
- /* eblc_table :: a descriptor for the EBLC table */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function returns TT_Err_Table_Missing if the */
- /* font contains no embedded bitmaps. All fields in */
- /* `eblc_table' will then be set to 0. */
- /* */
- EXPORT_DEF
- TT_Error TT_Get_Face_Bitmaps( TT_Face face,
- TT_EBLC* eblc_table );
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_New_SBit_Image */
- /* */
- /* <Description> */
- /* Allocates a new embedded bitmap container. */
- /* */
- /* <Output> */
- /* image :: sbit image */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_DEF
- TT_Error TT_New_SBit_Image( TT_SBit_Image** image );
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Done_SBit_Image */
- /* */
- /* <Description> */
- /* Releases an embedded bitmap container. */
- /* */
- /* <Input> */
- /* image :: sbit image */
- /* */
- EXPORT_DEF
- void TT_Done_SBit_Image( TT_SBit_Image* image );
-
-
- /*************************************************************/
- /* */
- /* <Function> TT_Get_SBit_Strike */
- /* */
- /* <Description> */
- /* Loads a suitable strike (bitmap sizetable) for the */
- /* given instance. This strike includes */
- /* sbitLineMetrics. */
- /* */
- /* <Input> */
- /* face :: the source face */
- /* instance :: the current size instance */
- /* */
- /* <Output> */
- /* strike :: the bitmap strike descriptor */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_DEF
- TT_Error TT_Get_SBit_Strike( TT_Face face,
- TT_Instance instance,
- TT_SBit_Strike* strike );
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_Glyph_Bitmap */
- /* */
- /* <Description> */
- /* Loads a given glyph embedded bitmap. */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* instance :: current size/transform instance */
- /* glyph_index :: index of source glyph */
- /* bitmap :: target embedded bitmap descriptor */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* This function returns an error if there is no */
- /* embedded bitmap for the glyph at the given */
- /* instance. */
- /* */
- EXPORT_DEF
- TT_Error TT_Load_Glyph_Bitmap( TT_Face face,
- TT_Instance instance,
- TT_UShort glyph_index,
- TT_SBit_Image* bitmap );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXSBIT_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxwidth.c b/Build/source/libs/libttf/extend/ftxwidth.c
deleted file mode 100644
index bb3a258282b..00000000000
--- a/Build/source/libs/libttf/extend/ftxwidth.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*******************************************************************
- *
- * ftxwidth.c 1.0
- *
- * Glyph Widths (and Heights) fast retrieval extension
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 extension is used to parse the "glyf" table of a TrueType
- * file in order to extract the bbox of a given range of glyphs.
- *
- * The bbox is then used to build font unit widths and height
- * that are returned in two parallel arrays.
- *
- * This extension is needed by the FreeType/2 OS/2 Font Driver.
- *
- ******************************************************************/
-
-
-#include "ttconfig.h"
-#include "ftxwidth.h"
-#include "ttdebug.h"
-#include "ttobjs.h"
-#include "ttfile.h"
-#include "tttags.h"
-#include "ttload.h"
-
-/* Required by the tracing mode */
-
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_any
-
-
- /******************************************************************/
- /* */
- /* Function: TT_Get_Face_Widths */
- /* */
- /* Description: Returns the widths and/or heights of a given */
- /* range of glyphs for a face. */
- /* */
- /* Input: */
- /* face :: face handle */
- /* */
- /* first_glyph :: first glyph in range */
- /* */
- /* last_glyph :: last glyph in range */
- /* */
- /* widths :: address of table receiving the widths */
- /* expressed in font units (ushorts). Set */
- /* this parameter to NULL if you're not */
- /* interested by these values. */
- /* */
- /* heights :: address of table receiving the heights */
- /* expressed in font units (ushorts). Set */
- /* this parameter to NULL if you're not */
- /* interested by these values. */
- /* */
- /* Returns: */
- /* Error code */
- /* */
- /* */
- /******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Face_Widths( TT_Face face,
- TT_UShort first_glyph,
- TT_UShort last_glyph,
- TT_UShort* widths,
- TT_UShort* heights )
- {
- DEFINE_ALL_LOCALS;
-
- PFace faze = HANDLE_Face(face);
- UShort n;
- Long table;
-
- ULong glyf_offset; /* offset of glyph table in file */
- UShort zero_width = 0; /* width of glyph 0 */
- UShort zero_height = 0; /* height of glyph 0 */
-
- Bool zero_loaded = 0;
-
-#ifndef TT_HUGE_PTR
- PStorage locations;
-#else
- Storage TT_HUGE_PTR * locations;
-#endif
- TT_BBox bbox;
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( last_glyph >= faze->numGlyphs ||
- first_glyph > last_glyph )
- return TT_Err_Invalid_Argument;
-
- /* find "glyf" table */
- table = TT_LookUp_Table( faze, TTAG_glyf );
- if ( table < 0 )
- {
- PERROR(( "ERROR: there is no glyph table in this font file!\n" ));
- return TT_Err_Glyf_Table_Missing;
- }
- glyf_offset = faze->dirTables[table].Offset;
-
- /* now access stream */
- if ( USE_Stream( faze->stream, stream ) )
- return error;
-
- locations = faze->glyphLocations + first_glyph;
-
- /* loop to load each glyph in the range */
- for ( n = first_glyph; n <= last_glyph; n++ )
- {
- if ( n + 1 < faze->numGlyphs &&
- locations[0] == locations[1] )
- {
- /* Note : Glyph 0 is always used to indicate a missing glyph */
- /* in a range. We must thus return its width and height */
- /* where appropriate when we find an undefined glyph. */
- if ( zero_loaded == 0 )
- {
- if ( FILE_Seek( glyf_offset + faze->glyphLocations[0] ) ||
- ACCESS_Frame( 10L ) )
- goto Fail;
-
- (void)GET_Short(); /* skip number of contours */
-
- bbox.xMin = GET_Short();
- bbox.yMin = GET_Short();
- bbox.xMax = GET_Short();
- bbox.yMax = GET_Short();
-
- FORGET_Frame();
-
- zero_width = (UShort)(bbox.xMax - bbox.xMin);
- zero_height = (UShort)(bbox.yMax - bbox.yMin);
- zero_loaded = 1;
- }
-
- if ( widths )
- *widths++ = zero_width;
-
- if ( heights )
- *heights++ = zero_height;
- }
- else
- {
- /* normal glyph, read header */
- if ( FILE_Seek( glyf_offset + locations[0] ) ||
- ACCESS_Frame( 10L ) )
- goto Fail;
-
- (void)GET_Short(); /* skip number of contours */
-
- bbox.xMin = GET_Short();
- bbox.yMin = GET_Short();
- bbox.xMax = GET_Short();
- bbox.yMax = GET_Short();
-
- FORGET_Frame();
-
- if ( widths )
- *widths++ = (UShort)(bbox.xMax - bbox.xMin);
-
- if ( heights )
- *heights++ = (UShort)(bbox.yMax - bbox.yMin);
- }
- }
-
- Fail:
- DONE_Stream( stream );
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/ftxwidth.h b/Build/source/libs/libttf/extend/ftxwidth.h
deleted file mode 100644
index 5ac72517927..00000000000
--- a/Build/source/libs/libttf/extend/ftxwidth.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************
- *
- * ftxwidth.h
- *
- * Glyph Widths (and Heights) fast retrieval extension.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 extension is used to parse the `glyf' table of a TrueType
- * file in order to extract the bounding box of a given range of glyphs.
- *
- * The bounding box is then used to build font unit widths and heights
- * that are returned in two parallel arrays.
- *
- * This extension is needed by the FreeType/2 OS/2 Font Driver.
- *
- ******************************************************************/
-
-#ifndef FTXWIDTH_H
-#define FTXWIDTH_H
-
-#include "freetype.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /******************************************************************/
- /* */
- /* Function: TT_Get_Face_Widths */
- /* */
- /* Description: Returns the widths and/or heights of a given */
- /* range of glyphs for a face. */
- /* */
- /* Input: */
- /* face :: face handle */
- /* */
- /* first_glyph :: first glyph in range */
- /* */
- /* last_glyph :: last glyph in range */
- /* */
- /* widths :: address of table receiving the widths */
- /* expressed in font units (ushorts). Set */
- /* this parameter to NULL if you're not */
- /* interested by these values. */
- /* */
- /* heights :: address of table receiving the heights */
- /* expressed in font units (ushorts). Set */
- /* this parameter to NULL if you're not */
- /* interested by these values */
- /* */
- /* Returns: */
- /* Error code */
- /* */
- /* */
- /******************************************************************/
-
- EXPORT_DEF
- TT_Error TT_Get_Face_Widths( TT_Face face,
- TT_UShort first_glyph,
- TT_UShort last_glyph,
- TT_UShort* widths,
- TT_UShort* heights );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FTXWIDTH_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/extend/readme.1st b/Build/source/libs/libttf/extend/readme.1st
deleted file mode 100644
index cce94cdfad1..00000000000
--- a/Build/source/libs/libttf/extend/readme.1st
+++ /dev/null
@@ -1,61 +0,0 @@
-This directory contains several extensions to the core engine.
-
-An extension is a separately compilable unit which can be linked by
-a client application to add new functionalities to the engine.
-
-There are two kinds of extensions: an `API extension' provides
-clients with new APIs to access internal engine structures or data,
-while an `engine extension' implements new TrueType data or table
-management.
-
-This directory contains the following:
-
- ftxcmap: An API extension to iterate over cmaps.
-
- ftxgasp: A simple API extension which returns the TrueType `gasp'
- table to client applications, when found in a font file.
- Though this table is always loaded by the engine, there
- is no function in the core API to access it. The reason
- is simple: to demonstrate a simple API extension with
- `ftxgasp'!
-
- ftxkern: This engine extension is used to access kerning data,
- when available in a font file. Note that it implements
- on-the-fly loading and retrieving of kerning tables.
- However, it doesn't interpret or process the data, and
- client applications should use it according to the
- TrueType specification.
-
- ftxpost: An engine extension to load the PostScript glyph names
- of the `post' table. See the `ftzoom' program for an
- example how to use it.
-
- ftxwidth: A simple extension used to load the widths and heights
- of a given range of glyphs in a face. Results are
- expressed in unscaled font units. This is required by
- the latest version of the FreeType/2 DLL to speed up
- font loading in the GRE (the OS/2 GRaphics Engine). It
- can be used by other applications though...
-
- ftxerr18: This extension simply converts a TrueType engine error
- code into a corresponding string describing the error.
- It is useful if you intend to write a package for end
- users and want to give them not `Error code 135' but
- `OS/2 table missing'. See docs/errstr.txt for a
- description how to use it (really simple!). ftxerr18
- supports localization of error strings (that is: error
- strings are automatically translated into supported
- languages) using gettext(). See docs/i18n.txt about
- using gettext.
-
- ftxsbit: Embedded bitmap support. This is an engine extension.
- See e.g. the `ftstrtto' program for its usage.
-
- ftxopen,
- ftxgsub,
- ftxgpos,
- ftxgdef: This is experimental stuff for TrueType Open support!
- Please ignore it or help debugging :-)
-
-
---- END ---
diff --git a/Build/source/libs/libttf/freetype.h b/Build/source/libs/libttf/freetype.h
deleted file mode 100644
index f5328d4624d..00000000000
--- a/Build/source/libs/libttf/freetype.h
+++ /dev/null
@@ -1,1147 +0,0 @@
-/*******************************************************************
- *
- * freetype.h
- *
- * High-level interface specification.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.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 is the only file that should be included by client
- * application sources. All other types and functions defined
- * in the `tt*.h' files are library internals and should not be
- * included.
- *
- ******************************************************************/
-
-#ifndef FREETYPE_H
-#define FREETYPE_H
-
-
-#define TT_FREETYPE_MAJOR 1
-#define TT_FREETYPE_MINOR 4
-
-
-#include "fterrid.h"
-#include "ftnameid.h"
-
-/* To make freetype.h independent from configuration files we check */
-/* whether EXPORT_DEF has been defined already. */
-
-#ifndef EXPORT_DEF
-#define EXPORT_DEF extern
-#endif
-
-/* The same for TT_Text. If you define the HAVE_TT_TEXT macro, you */
-/* have to provide a typedef declaration for TT_Text before */
-/* including this file. */
-
-#ifndef HAVE_TT_TEXT
-#define HAVE_TT_TEXT
- typedef char TT_Text; /* The data type to represent */
- /* file name string elements. */
-#endif
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
- /*******************************************************************/
- /* */
- /* FreeType types definitions. */
- /* */
- /* All these begin with a 'TT_' prefix. */
- /* */
- /*******************************************************************/
-
- typedef int TT_Bool;
-
- typedef signed long TT_Fixed; /* signed fixed 16.16 float */
-
- typedef signed short TT_FWord; /* distance in FUnits */
- typedef unsigned short TT_UFWord; /* unsigned distance */
-
- typedef char TT_String;
- typedef signed char TT_Char;
- typedef unsigned char TT_Byte;
- typedef signed short TT_Short;
- typedef unsigned short TT_UShort;
- typedef int TT_Int;
- typedef unsigned int TT_UInt;
- typedef signed long TT_Long;
- typedef unsigned long TT_ULong;
-
- typedef signed short TT_F2Dot14; /* Signed fixed float 2.14 used for */
- /* unit vectors, with layout */
- /* */
- /* s : 1 -- sign bit */
- /* m : 1 -- integer bit */
- /* f : 14 -- unsigned fractional */
- /* */
- /* `s:m' is the 2-bit signed int */
- /* value to which the positive */
- /* fractional part should be added. */
-
- typedef signed long TT_F26Dot6; /* 26.6 fixed float, used for */
- /* glyph points pixel coordinates. */
-
- typedef signed long TT_Pos; /* Point position, expressed either */
- /* in fractional pixels or notional */
- /* units, depending on context. */
- /* For example, glyph coordinates */
- /* returned by TT_Load_Glyph() are */
- /* expressed in font units if */
- /* scaling wasn't requested, and */
- /* in 26.6 fractional pixels if it */
- /* was. */
-
-
- struct TT_UnitVector_ /* guess what... */
- {
- TT_F2Dot14 x;
- TT_F2Dot14 y;
- };
-
- typedef struct TT_UnitVector_ TT_UnitVector;
-
-
- struct TT_Vector_ /* simple vector type */
- {
- TT_F26Dot6 x;
- TT_F26Dot6 y;
- };
-
- typedef struct TT_Vector_ TT_Vector;
-
-
- /* A simple 2x2 matrix used for transformations. */
- /* You should use 16.16 fixed floats. */
- /* */
- /* x' = xx*x + xy*y */
- /* y' = yx*x + yy*y */
- /* */
-
- struct TT_Matrix_
- {
- TT_Fixed xx, xy;
- TT_Fixed yx, yy;
- };
-
- typedef struct TT_Matrix_ TT_Matrix;
-
-
- /* A structure used to describe the source glyph to the renderer. */
-
- struct TT_Outline_
- {
- TT_Short n_contours; /* number of contours in glyph */
- TT_UShort n_points; /* number of points in the glyph */
-
- TT_Vector* points; /* the outline's points */
- TT_Byte* flags; /* the points flags */
- TT_UShort* contours; /* the contour end points */
-
- /* The following flag indicates that the outline owns the arrays it */
- /* refers to. Typically, this is true of outlines created from the */
- /* TT_New_Outline() API, while it isn't for those returned by */
- /* TT_Get_Glyph_Outline(). */
-
- TT_Bool owner; /* The outline owns the coordinates, */
- /* flags and contours array it uses. */
-
- /* The following flags are set automatically by */
- /* TT_Get_Glyph_Outline(). Their meaning is the following: */
- /* */
- /* high_precision If true, the scan-line converter will use a */
- /* higher precision to render bitmaps (i.e., a */
- /* 1/1024 pixel precision). This is important for */
- /* small ppem sizes. */
- /* */
- /* second_pass If true, the scan-line converter performs a */
- /* second sweep phase dedicated to find vertical */
- /* drop-outs. If false, only horizontal drop-outs */
- /* will be checked during the first vertical */
- /* sweep (yes, this is a bit confusing but it is */
- /* really the way it should work). This is */
- /* important for small ppems too. */
- /* */
- /* dropout_mode Specifies the TrueType drop-out mode to use for */
- /* continuity checking. Valid values are 0 (no */
- /* check), 1, 2, 4, and 5. */
- /* */
- /* Most of the engine's users will safely ignore these fields... */
-
- TT_Bool high_precision; /* high precision rendering */
- TT_Bool second_pass; /* two sweeps rendering */
- TT_Char dropout_mode; /* dropout mode */
- };
-
- typedef struct TT_Outline_ TT_Outline;
-
-
- /* A structure used to describe a simple bounding box. */
-
- struct TT_BBox_
- {
- TT_Pos xMin;
- TT_Pos yMin;
- TT_Pos xMax;
- TT_Pos yMax;
- };
-
- typedef struct TT_BBox_ TT_BBox;
-
-
- /* A structure used to return glyph metrics. */
- /* */
- /* The `bearingX' isn't called `left-side bearing' anymore because */
- /* it has different meanings depending on the glyph's orientation. */
- /* */
- /* The same is true for `bearingY', which is the top-side bearing */
- /* defined by the TT_Spec, i.e., the distance from the baseline to */
- /* the top of the glyph's bbox. According to our current convention, */
- /* this is always the same as `bbox.yMax' but we make it appear for */
- /* consistency in its proper field. */
- /* */
- /* The `advance' field is the advance width for horizontal layout, */
- /* and advance height for vertical layouts. */
-
- struct TT_Glyph_Metrics_
- {
- TT_BBox bbox; /* glyph bounding box */
-
- TT_Pos bearingX; /* left-side bearing */
- TT_Pos bearingY; /* top-side bearing, per se the TT spec */
-
- TT_Pos advance; /* advance width (or height) */
- };
-
- typedef struct TT_Glyph_Metrics_ TT_Glyph_Metrics;
-
-
- /* A structure used to return horizontal _and_ vertical glyph */
- /* metrics. */
- /* */
- /* A glyph can be used either in a horizontal or vertical layout. */
- /* Its glyph metrics vary with orientation. The TT_Big_Glyph_Metrics */
- /* structure is used to return _all_ metrics in one call. */
-
- struct TT_Big_Glyph_Metrics_
- {
- TT_BBox bbox; /* glyph bounding box */
-
- TT_Pos horiBearingX; /* left side bearing in horizontal layouts */
- TT_Pos horiBearingY; /* top side bearing in horizontal layouts */
-
- TT_Pos vertBearingX; /* left side bearing in vertical layouts */
- TT_Pos vertBearingY; /* top side bearing in vertical layouts */
-
- TT_Pos horiAdvance; /* advance width for horizontal layout */
- TT_Pos vertAdvance; /* advance height for vertical layout */
-
- /* The following fields represent unhinted scaled metrics values. */
- /* They can be useful for applications needing to do some device */
- /* independent placement of glyphs. */
- /* */
- /* Applying these metrics to hinted glyphs will most surely ruin */
- /* the grid fitting performed by the bytecode interpreter. These */
- /* values are better used to compute accumulated positioning */
- /* distances. */
-
- TT_Pos linearHoriBearingX; /* linearly scaled horizontal lsb */
- TT_Pos linearHoriAdvance; /* linearly scaled horizontal advance */
-
- TT_Pos linearVertBearingY; /* linearly scaled vertical tsb */
- TT_Pos linearVertAdvance; /* linearly scaled vertical advance */
- };
-
- typedef struct TT_Big_Glyph_Metrics_ TT_Big_Glyph_Metrics;
-
-
- /* A structure used to return instance metrics. */
-
- struct TT_Instance_Metrics_
- {
- TT_F26Dot6 pointSize; /* char. size in points (1pt = 1/72 inch) */
-
- TT_UShort x_ppem; /* horizontal pixels per EM square */
- TT_UShort y_ppem; /* vertical pixels per EM square */
-
- TT_Fixed x_scale; /* 16.16 to convert from EM units to 26.6 pix */
- TT_Fixed y_scale; /* 16.16 to convert from EM units to 26.6 pix */
-
- TT_UShort x_resolution; /* device horizontal resolution in dpi */
- TT_UShort y_resolution; /* device vertical resolution in dpi */
- };
-
- typedef struct TT_Instance_Metrics_ TT_Instance_Metrics;
-
-
- /* Flow constants: */
- /* */
- /* The flow of a bitmap refers to the way lines are oriented */
- /* within the bitmap data, i.e., the orientation of the Y */
- /* coordinate axis. */
- /* */
- /* For example, if the first bytes of the bitmap pertain to */
- /* its top-most line, then the flow is `down'. If these bytes */
- /* pertain to its lowest line, the the flow is `up'. */
-
-#define TT_Flow_Down -1 /* bitmap is oriented from top to bottom */
-#define TT_Flow_Up 1 /* bitmap is oriented from bottom to top */
-#define TT_Flow_Error 0 /* an error occurred during rendering */
-
-
- /* A structure used to describe the target bitmap or pixmap to the */
- /* renderer. Note that there is nothing in this structure that */
- /* gives the nature of the buffer. */
- /* */
- /* IMPORTANT NOTE: */
- /* */
- /* In the case of a pixmap, the `width' and `cols' fields must */
- /* have the _same_ values, and _must_ be padded to 32-bits, i.e., */
- /* be a multiple of 4. Clipping problems will arise otherwise, */
- /* if not even page faults! */
- /* */
- /* The typical settings are: */
- /* */
- /* - for a WxH bitmap: */
- /* */
- /* rows = H */
- /* cols = (W+7) / 8 */
- /* width = W */
- /* flow = your_choice */
- /* */
- /* - for a WxH pixmap: */
- /* */
- /* rows = H */
- /* cols = (W+3) & ~3 */
- /* width = cols */
- /* flow = your_choice */
-
- struct TT_Raster_Map_
- {
- int rows; /* number of rows */
- int cols; /* number of columns (bytes) per row */
- int width; /* number of pixels per line */
- int flow; /* bitmap orientation */
-
- void* bitmap; /* bit/pixmap buffer */
- long size; /* bit/pixmap size in bytes */
- };
-
- typedef struct TT_Raster_Map_ TT_Raster_Map;
-
-
- /* ------ The font header TrueType table structure ------ */
-
- struct TT_Header_
- {
- TT_Fixed Table_Version;
- TT_Fixed Font_Revision;
-
- TT_Long CheckSum_Adjust;
- TT_Long Magic_Number;
-
- TT_UShort Flags;
- TT_UShort Units_Per_EM;
-
- TT_Long Created [2];
- TT_Long Modified[2];
-
- TT_FWord xMin;
- TT_FWord yMin;
- TT_FWord xMax;
- TT_FWord yMax;
-
- TT_UShort Mac_Style;
- TT_UShort Lowest_Rec_PPEM;
-
- TT_Short Font_Direction;
- TT_Short Index_To_Loc_Format;
- TT_Short Glyph_Data_Format;
- };
-
- typedef struct TT_Header_ TT_Header;
-
-
- /* ------ The horizontal header TrueType table structure ------ */
-
- /*******************************************************/
- /* This structure is the one defined by the TrueType */
- /* specification, plus two fields used to link the */
- /* font-units metrics to the header. */
-
- struct TT_Horizontal_Header_
- {
- TT_Fixed Version;
- TT_FWord Ascender;
- TT_FWord Descender;
- TT_FWord Line_Gap;
-
- TT_UFWord advance_Width_Max; /* advance width maximum */
-
- TT_FWord min_Left_Side_Bearing; /* minimum left-sb */
- TT_FWord min_Right_Side_Bearing; /* minimum right-sb */
- TT_FWord xMax_Extent; /* xmax extents */
- TT_FWord caret_Slope_Rise;
- TT_FWord caret_Slope_Run;
-
- TT_Short Reserved0,
- Reserved1,
- Reserved2,
- Reserved3,
- Reserved4;
-
- TT_Short metric_Data_Format;
- TT_UShort number_Of_HMetrics;
-
- /* The following fields are not defined by the TrueType specification */
- /* but they're used to connect the metrics header to the relevant */
- /* `HMTX' or `VMTX' table. */
-
- void* long_metrics;
- void* short_metrics;
- };
-
- typedef struct TT_Horizontal_Header_ TT_Horizontal_Header;
-
-
- /*******************************************************/
- /* This structure is the one defined by the TrueType */
- /* specification. Note that it has exactly the same */
- /* layout as the horizontal header (both are loaded */
- /* by the same function). */
-
- struct TT_Vertical_Header_
- {
- TT_Fixed Version;
- TT_FWord Ascender;
- TT_FWord Descender;
- TT_FWord Line_Gap;
-
- TT_UFWord advance_Height_Max; /* advance height maximum */
-
- TT_FWord min_Top_Side_Bearing; /* minimum left-sb or top-sb */
- TT_FWord min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */
- TT_FWord yMax_Extent; /* xmax or ymax extents */
- TT_FWord caret_Slope_Rise;
- TT_FWord caret_Slope_Run;
- TT_FWord caret_Offset;
-
- TT_Short Reserved1,
- Reserved2,
- Reserved3,
- Reserved4;
-
- TT_Short metric_Data_Format;
- TT_UShort number_Of_VMetrics;
-
- /* The following fields are not defined by the TrueType specification */
- /* but they're used to connect the metrics header to the relevant */
- /* `HMTX' or `VMTX' table. */
-
- void* long_metrics;
- void* short_metrics;
- };
-
- typedef struct TT_Vertical_Header_ TT_Vertical_Header;
-
-
- /* ------ The OS/2 table ------ */
-
- /************************************************************************/
- /* Note that since FreeType 1.3, we support Mac fonts which do not have */
- /* an OS/2 table. In this case the `version' field will be set to */
- /* 0xFFFF by the table loader; all other fields should be 0. */
-
- struct TT_OS2_
- {
- TT_UShort version; /* 0x0001 */
- TT_FWord xAvgCharWidth;
- TT_UShort usWeightClass;
- TT_UShort usWidthClass;
- TT_Short fsType;
- TT_FWord ySubscriptXSize;
- TT_FWord ySubscriptYSize;
- TT_FWord ySubscriptXOffset;
- TT_FWord ySubscriptYOffset;
- TT_FWord ySuperscriptXSize;
- TT_FWord ySuperscriptYSize;
- TT_FWord ySuperscriptXOffset;
- TT_FWord ySuperscriptYOffset;
- TT_FWord yStrikeoutSize;
- TT_FWord yStrikeoutPosition;
- TT_Short sFamilyClass;
-
- TT_Byte panose[10];
-
- TT_ULong ulUnicodeRange1; /* Bits 0-31 */
- TT_ULong ulUnicodeRange2; /* Bits 32-63 */
- TT_ULong ulUnicodeRange3; /* Bits 64-95 */
- TT_ULong ulUnicodeRange4; /* Bits 96-127 */
-
- TT_Char achVendID[4];
-
- TT_UShort fsSelection;
- TT_UShort usFirstCharIndex;
- TT_UShort usLastCharIndex;
- TT_Short sTypoAscender;
- TT_Short sTypoDescender;
- TT_Short sTypoLineGap;
- TT_UShort usWinAscent;
- TT_UShort usWinDescent;
-
- /* only version 1 tables: */
-
- TT_ULong ulCodePageRange1; /* Bits 0-31 */
- TT_ULong ulCodePageRange2; /* Bits 32-63 */
- };
-
- typedef struct TT_OS2_ TT_OS2;
-
-
- /* ------ The PostScript table ------ */
-
- struct TT_Postscript_
- {
- TT_Fixed FormatType;
- TT_Fixed italicAngle;
- TT_FWord underlinePosition;
- TT_FWord underlineThickness;
- TT_ULong isFixedPitch;
- TT_ULong minMemType42;
- TT_ULong maxMemType42;
- TT_ULong minMemType1;
- TT_ULong maxMemType1;
-
- /* Glyph names follow in the file, but we don't */
- /* load them by default. See the ftxpost.c extension. */
- };
-
- typedef struct TT_Postscript_ TT_Postscript;
-
-
- /* ------ The horizontal device metrics table (`hdmx') ------ */
-
- struct TT_Hdmx_Record_
- {
- TT_Byte ppem;
- TT_Byte max_width;
- TT_Byte* widths;
- };
-
- typedef struct TT_Hdmx_Record_ TT_Hdmx_Record;
-
-
- struct TT_Hdmx_
- {
- TT_UShort version;
- TT_Short num_records;
- TT_Hdmx_Record* records;
- };
-
- typedef struct TT_Hdmx_ TT_Hdmx;
-
-
- /* A structure used to describe face properties. */
-
- struct TT_Face_Properties_
- {
- TT_UShort num_Glyphs; /* number of glyphs in face */
- TT_UShort max_Points; /* maximum number of points in a glyph */
- TT_UShort max_Contours; /* maximum number of contours in a glyph */
-
- TT_UShort num_CharMaps; /* number of charmaps in the face */
- TT_UShort num_Names; /* number of name records in the face */
-
- TT_ULong num_Faces; /* 1 for normal TrueType files, and the */
- /* number of embedded faces for TrueType */
- /* collections */
-
- TT_Header* header; /* TrueType header table */
- TT_Horizontal_Header* horizontal; /* TrueType horizontal header */
- TT_OS2* os2; /* TrueType OS/2 table */
- TT_Postscript* postscript; /* TrueType Postscript table */
- TT_Hdmx* hdmx; /* TrueType hor. dev. metr. table */
- TT_Vertical_Header* vertical; /* TT Vertical header, if present */
- };
-
- typedef struct TT_Face_Properties_ TT_Face_Properties;
-
-
- /* Here are the definitions of the handle types used for FreeType's */
- /* most common objects accessed by the client application. We use */
- /* a simple trick: */
- /* */
- /* Each handle type is a structure that only contains one */
- /* pointer. The advantage of structures is that they are */
- /* mutually exclusive types. We could have defined the */
- /* following types: */
- /* */
- /* typedef void* TT_Stream; */
- /* typedef void* TT_Face; */
- /* typedef void* TT_Instance; */
- /* typedef void* TT_Glyph; */
- /* typedef void* TT_CharMap; */
- /* */
- /* but these would have allowed lines like: */
- /* */
- /* stream = instance; */
- /* */
- /* in the client code this would be a severe bug, unnoticed */
- /* by the compiler! */
- /* */
- /* Thus, we enforce type checking with a simple language */
- /* trick... */
- /* */
- /* NOTE: Some macros are defined in tttypes.h to perform */
- /* automatic type conversions for library hackers... */
-
- struct TT_Engine_ { void* z; };
- struct TT_Stream_ { void* z; };
- struct TT_Face_ { void* z; };
- struct TT_Instance_ { void* z; };
- struct TT_Glyph_ { void* z; };
- struct TT_CharMap_ { void* z; };
-
- typedef struct TT_Engine_ TT_Engine; /* engine instance */
- typedef struct TT_Stream_ TT_Stream; /* stream handle type */
- typedef struct TT_Face_ TT_Face; /* face handle type */
- typedef struct TT_Instance_ TT_Instance; /* instance handle type */
- typedef struct TT_Glyph_ TT_Glyph; /* glyph handle type */
- typedef struct TT_CharMap_ TT_CharMap; /* character map handle type */
-
-
- /* Almost all functions return an error code of this type. */
-
- typedef long TT_Error;
-
-
- /*******************************************************************/
- /* */
- /* FreeType API */
- /* */
- /* All these begin with a `TT_' prefix. */
- /* */
- /* Most of them are implemented in the `ttapi.c' source file. */
- /* */
- /*******************************************************************/
-
- /* Get version information. */
-
- EXPORT_DEF
- TT_Error TT_FreeType_Version( int *major,
- int *minor );
-
-
- /* Initialize the engine. */
-
- EXPORT_DEF
- TT_Error TT_Init_FreeType( TT_Engine* engine );
-
-
- /* Finalize the engine, and release all allocated objects. */
-
- EXPORT_DEF
- TT_Error TT_Done_FreeType( TT_Engine engine );
-
-
- /* Set the gray level palette. This is an array of 5 bytes used */
- /* to produce the font smoothed pixmaps. By convention: */
- /* */
- /* palette[0] = background (white) */
- /* palette[1] = light */
- /* palette[2] = medium */
- /* palette[3] = dark */
- /* palette[4] = foreground (black) */
- /* */
-
- EXPORT_DEF
- TT_Error TT_Set_Raster_Gray_Palette( TT_Engine engine,
- TT_Byte* palette );
-
-
- /* ----------------------- face management ----------------------- */
-
- /* Open a new TrueType font file, and returns a handle for */
- /* it in variable '*face'. */
- /* */
- /* Note: The file can be either a TrueType file (*.ttf) or */
- /* a TrueType collection (*.ttc, in this case, only */
- /* the first face is opened). The number of faces in */
- /* the same collection can be obtained in the face's */
- /* properties, using TT_Get_Face_Properties() and the */
- /* `max_Faces' field. */
-
- EXPORT_DEF
- TT_Error TT_Open_Face( TT_Engine engine,
- const TT_Text* fontPathName,
- TT_Face* face );
-
-
- /* Open a TrueType font file located inside a collection. */
- /* The font is assigned by its index in `fontIndex'. */
-
- EXPORT_DEF
- TT_Error TT_Open_Collection( TT_Engine engine,
- const TT_Text* collectionPathName,
- TT_ULong fontIndex,
- TT_Face* face );
-
-
- /* Return face properties in the `properties' structure. */
- /* */
- /* Note that since version 1.3, we support font files with no */
- /* OS/2 table (mainly old Mac fonts). In this case, the OS/2 */
- /* `version' field will be set to 0xFFFF, and all other fields */
- /* will be zeroed. */
-
- EXPORT_DEF
- TT_Error TT_Get_Face_Properties( TT_Face face,
- TT_Face_Properties* properties );
-
-
- /* Set a face object's generic pointer */
-
- EXPORT_DEF
- TT_Error TT_Set_Face_Pointer( TT_Face face,
- void* data );
-
-
- /* Get a face object's generic pointer */
-
- EXPORT_DEF
- void* TT_Get_Face_Pointer( TT_Face face );
-
-
- /* Close a face's file handle to save system resources. The file */
- /* will be re-opened automatically on the next disk access. */
-
- EXPORT_DEF
- TT_Error TT_Flush_Face( TT_Face face );
-
- /* Get a face's glyph metrics expressed in font units. Returns any */
- /* number of arrays. Set the fields to NULL if you are not interested */
- /* by a given array. */
-
- EXPORT_DEF
- TT_Error TT_Get_Face_Metrics( TT_Face face,
- TT_UShort firstGlyph,
- TT_UShort lastGlyph,
- TT_Short* leftBearings,
- TT_UShort* widths,
- TT_Short* topBearings,
- TT_UShort* heights );
-
-
- /* Close a given font object, destroying all associated */
- /* instances. */
-
- EXPORT_DEF
- TT_Error TT_Close_Face( TT_Face face );
-
-
- /* Get font or table data. */
-
- EXPORT_DEF
- TT_Error TT_Get_Font_Data( TT_Face face,
- TT_ULong tag,
- TT_Long offset,
- void* buffer,
- TT_Long* length );
-
-
-/* A simple macro to build table tags from ASCII chars */
-
-#define MAKE_TT_TAG( _x1, _x2, _x3, _x4 ) \
- (((TT_ULong)_x1 << 24) | \
- ((TT_ULong)_x2 << 16) | \
- ((TT_ULong)_x3 << 8) | \
- (TT_ULong)_x4)
-
-
-
- /* ----------------------- instance management -------------------- */
-
- /* Open a new font instance and returns an instance handle */
- /* for it in `*instance'. */
-
- EXPORT_DEF
- TT_Error TT_New_Instance( TT_Face face,
- TT_Instance* instance );
-
-
- /* Set device resolution for a given instance. The values are */
- /* given in dpi (Dots Per Inch). Default is 96 in both directions. */
-
- EXPORT_DEF
- TT_Error TT_Set_Instance_Resolutions( TT_Instance instance,
- TT_UShort xResolution,
- TT_UShort yResolution );
-
-
- /* Set the pointsize for a given instance. Default is 10pt. */
-
- EXPORT_DEF
- TT_Error TT_Set_Instance_CharSize( TT_Instance instance,
- TT_F26Dot6 charSize );
-
- EXPORT_DEF
- TT_Error TT_Set_Instance_CharSizes( TT_Instance instance,
- TT_F26Dot6 charWidth,
- TT_F26Dot6 charHeight );
-
-#define TT_Set_Instance_PointSize( ins, ptsize ) \
- TT_Set_Instance_CharSize( ins, ptsize*64L )
-
- EXPORT_DEF
- TT_Error TT_Set_Instance_PixelSizes( TT_Instance instance,
- TT_UShort pixelWidth,
- TT_UShort pixelHeight,
- TT_F26Dot6 pointSize );
-
-
- /* This function has been deprecated! Do not use it, as it */
- /* doesn't work reliably. You can perfectly control hinting */
- /* yourself when loading glyphs, then apply transforms as usual. */
-
- EXPORT_DEF
- TT_Error TT_Set_Instance_Transform_Flags( TT_Instance instance,
- TT_Bool rotated,
- TT_Bool stretched );
-
-
- /* Return instance metrics in `metrics'. */
-
- EXPORT_DEF
- TT_Error TT_Get_Instance_Metrics( TT_Instance instance,
- TT_Instance_Metrics* metrics );
-
-
- /* Set an instance's generic pointer. */
-
- EXPORT_DEF
- TT_Error TT_Set_Instance_Pointer( TT_Instance instance,
- void* data );
-
-
- /* Get an instance's generic pointer. */
-
- EXPORT_DEF
- void* TT_Get_Instance_Pointer( TT_Instance instance );
-
-
- /* Close a given instance object, destroying all associated data. */
-
- EXPORT_DEF
- TT_Error TT_Done_Instance( TT_Instance instance );
-
-
-
- /* ----------------------- glyph management ----------------------- */
-
- /* Create a new glyph object related to the given `face'. */
-
- EXPORT_DEF
- TT_Error TT_New_Glyph( TT_Face face,
- TT_Glyph* glyph );
-
-
- /* Discard (and destroy) a given glyph object. */
-
- EXPORT_DEF
- TT_Error TT_Done_Glyph( TT_Glyph glyph );
-
-
-#define TTLOAD_SCALE_GLYPH 1
-#define TTLOAD_HINT_GLYPH 2
-#define TTLOAD_PEDANTIC 128
-#define TTLOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 256
-
-#define TTLOAD_DEFAULT (TTLOAD_SCALE_GLYPH | TTLOAD_HINT_GLYPH)
-
-
- /* Load and process (scale/transform and hint) a glyph from the */
- /* given `instance'. The glyph and instance handles must be */
- /* related to the same face object. The glyph index can be */
- /* computed with a call to TT_Char_Index(). */
- /* */
- /* The 'load_flags' argument is a combination of the macros */
- /* TTLOAD_SCALE_GLYPH and TTLOAD_HINT_GLYPH. Hinting will be */
- /* applied only if the scaling is selected. */
- /* */
- /* If scaling is off (i.e., load_flags = 0), the returned */
- /* outlines are in EM square coordinates (also called FUnits), */
- /* extracted directly from the font with no hinting. Other */
- /* glyph metrics are also in FUnits. */
- /* */
- /* If scaling is on, the returned outlines are in fractional */
- /* pixel units (i.e. TT_F26Dot6 = 26.6 fixed floats). */
- /* */
- /* NOTE: The glyph index must be in the range 0..num_glyphs-1, */
- /* where `num_glyphs' is the total number of glyphs in */
- /* the font file (given in the face properties). */
-
- EXPORT_DEF
- TT_Error TT_Load_Glyph( TT_Instance instance,
- TT_Glyph glyph,
- TT_UShort glyphIndex,
- TT_UShort loadFlags );
-
-
- /* Return glyph outline pointers in `outline'. Note that the returned */
- /* pointers are owned by the glyph object, and will be destroyed with */
- /* it. The client application should _not_ change the pointers. */
-
- EXPORT_DEF
- TT_Error TT_Get_Glyph_Outline( TT_Glyph glyph,
- TT_Outline* outline );
-
-
- /* Copy the glyph metrics into `metrics'. */
-
- EXPORT_DEF
- TT_Error TT_Get_Glyph_Metrics( TT_Glyph glyph,
- TT_Glyph_Metrics* metrics );
-
-
- /* Copy the glyph's big metrics into `metrics'. */
- /* Necessary to obtain vertical metrics. */
-
- EXPORT_DEF
- TT_Error TT_Get_Glyph_Big_Metrics( TT_Glyph glyph,
- TT_Big_Glyph_Metrics* metrics );
-
-
- /* Render the glyph into a bitmap, with given position offsets. */
- /* */
- /* Note: Only use integer pixel offsets to preserve the fine */
- /* hinting of the glyph and the `correct' anti-aliasing */
- /* (where vertical and horizontal stems aren't grayed). This */
- /* means that `xOffset' and `yOffset' must be multiples */
- /* of 64! */
-
- EXPORT_DEF
- TT_Error TT_Get_Glyph_Bitmap( TT_Glyph glyph,
- TT_Raster_Map* bitmap,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset );
-
-
- /* Render the glyph into a pixmap, with given position offsets. */
- /* */
- /* Note: Only use integer pixel offsets to preserve the fine */
- /* hinting of the glyph and the `correct' anti-aliasing */
- /* (where vertical and horizontal stems aren't grayed). This */
- /* means that `xOffset' and `yOffset' must be multiples */
- /* of 64! */
-
- EXPORT_DEF
- TT_Error TT_Get_Glyph_Pixmap( TT_Glyph glyph,
- TT_Raster_Map* pixmap,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset );
-
-
-
- /* ----------------------- outline support ------------------------ */
-
- /* Allocate a new outline. Reserve space for `numPoints' and */
- /* `numContours'. */
-
- EXPORT_DEF
- TT_Error TT_New_Outline( TT_UShort numPoints,
- TT_Short numContours,
- TT_Outline* outline );
-
-
- /* Release an outline. */
-
- EXPORT_DEF
- TT_Error TT_Done_Outline( TT_Outline* outline );
-
-
- /* Copy an outline into another one. */
-
- EXPORT_DEF
- TT_Error TT_Copy_Outline( TT_Outline* source,
- TT_Outline* target );
-
-
- /* Render an outline into a bitmap. */
-
- EXPORT_DEF
- TT_Error TT_Get_Outline_Bitmap( TT_Engine engine,
- TT_Outline* outline,
- TT_Raster_Map* bitmap );
-
-
- /* Render an outline into a pixmap. */
-
- EXPORT_DEF
- TT_Error TT_Get_Outline_Pixmap( TT_Engine engine,
- TT_Outline* outline,
- TT_Raster_Map* pixmap );
-
-
- /* Return an outline's bounding box -- this function is slow as it */
- /* performs a complete scan-line process, without drawing, to get */
- /* the most accurate values. */
-
- EXPORT_DEF
- TT_Error TT_Get_Outline_BBox( TT_Outline* outline,
- TT_BBox* bbox );
-
-
- /* Apply a transformation to a glyph outline. */
-
- EXPORT_DEF
- void TT_Transform_Outline( TT_Outline* outline,
- TT_Matrix* matrix );
-
-
- /* Apply a translation to a glyph outline. */
-
- EXPORT_DEF
- void TT_Translate_Outline( TT_Outline* outline,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset );
-
-
- /* Apply a transformation to a vector. */
-
- EXPORT_DEF
- void TT_Transform_Vector( TT_F26Dot6* x,
- TT_F26Dot6* y,
- TT_Matrix* matrix );
-
-
- /* Compute A*B/C with 64 bits intermediate precision. */
-
- EXPORT_DEF
- TT_Long TT_MulDiv( TT_Long A,
- TT_Long B,
- TT_Long C );
-
-
- /* Compute A*B/0x10000 with 64 bits intermediate precision. */
- /* Useful to multiply by a 16.16 fixed float value. */
-
- EXPORT_DEF
- TT_Long TT_MulFix( TT_Long A,
- TT_Long B );
-
-
- /* ----------------- character mapping support --------------- */
-
- /* Return the number of character mappings found in this file. */
- /* Returns -1 in case of failure (invalid face handle). */
- /* */
- /* DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED! */
- /* */
- /* It is retained for backwards compatibility only and will */
- /* fail on 16bit systems. */
- /* */
- /* You can now get the charmap count in the `num_CharMaps' */
- /* field of a face's properties. */
- /* */
-
- EXPORT_DEF
- int TT_Get_CharMap_Count( TT_Face face );
-
-
- /* Return the ID of charmap number `charmapIndex' of a given face */
- /* used to enumerate the charmaps present in a TrueType file. */
-
- EXPORT_DEF
- TT_Error TT_Get_CharMap_ID( TT_Face face,
- TT_UShort charmapIndex,
- TT_UShort* platformID,
- TT_UShort* encodingID );
-
-
- /* Look up the character maps found in `face' and return a handle */
- /* for the one matching `platformID' and `platformEncodingID' */
- /* (see the TrueType specs relating to the `cmap' table for */
- /* information on these ID numbers). Returns an error code. */
- /* In case of failure, the handle is set to NULL and is invalid. */
-
- EXPORT_DEF
- TT_Error TT_Get_CharMap( TT_Face face,
- TT_UShort charmapIndex,
- TT_CharMap* charMap );
-
-
- /* Translate a character code through a given character map */
- /* and return the corresponding glyph index to be used in */
- /* a TT_Load_Glyph() call. This function returns 0 in case */
- /* of failure. */
-
- EXPORT_DEF
- TT_UShort TT_Char_Index( TT_CharMap charMap,
- TT_ULong charCode );
-
-
-
- /* --------------------- names table support ------------------- */
-
- /* Return the number of name strings found in the name table. */
- /* Returns -1 in case of failure (invalid face handle). */
- /* */
- /* DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED! */
- /* */
- /* It is retained for backwards compatibility only and will */
- /* fail on 16bit systems. */
- /* */
- /* You can now get the number of name strings in a face with */
- /* the `num_Names' field of its properties. */
-
- EXPORT_DEF
- int TT_Get_Name_Count( TT_Face face );
-
-
- /* Return the ID of the name number `nameIndex' of a given face */
- /* used to enumerate the charmaps present in a TrueType file. */
-
- EXPORT_DEF
- TT_Error TT_Get_Name_ID( TT_Face face,
- TT_UShort nameIndex,
- TT_UShort* platformID,
- TT_UShort* encodingID,
- TT_UShort* languageID,
- TT_UShort* nameID );
-
-
- /* Return the address and length of the name number `nameIndex' */
- /* of a given face in the variables `stringPtr' resp. `length'. */
- /* The string is part of the face object and shouldn't be */
- /* written to or released. */
- /* */
- /* Note that for an invalid platform ID a null pointer will be */
- /* returned. */
-
- EXPORT_DEF
- TT_Error TT_Get_Name_String( TT_Face face,
- TT_UShort nameIndex,
- TT_String** stringPtr,
- TT_UShort* length );
-
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* FREETYPE_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ft_conf.h b/Build/source/libs/libttf/ft_conf.h
deleted file mode 100644
index 63819dd95c5..00000000000
--- a/Build/source/libs/libttf/ft_conf.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/* This file is part of the FreeType project */
-
-/* ft_conf.h for Win32 */
-
-
-/* we need the following because there are some typedefs in this file */
-
-#ifndef FT_CONF_H
-#define FT_CONF_H
-
-#ifndef WIN32
-#define WIN32
-#endif
-
-/* Define to empty if the 'const' keyword does not work. */
-/* #undef const */
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the getpagesize function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE
-
-/* Define if you have the valloc function. */
-#undef HAVE_VALLOC
-
-/* Define if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* The number of bytes in a int. */
-#define SIZEOF_INT 4
-
-/* The number of bytes in a long. */
-#define SIZEOF_LONG 4
-
-/**********************************************************************/
-/* */
-/* The following configuration macros can be tweaked manually by */
-/* a developer to turn on or off certain features or options in the */
-/* TrueType engine. This may be useful to tune it for specific */
-/* purposes.. */
-/* */
-/**********************************************************************/
-
-
-/*************************************************************************/
-/* Define this if the underlying operating system uses a different */
-/* character width than 8bit for file names. You must then also supply */
-/* a typedef declaration for defining 'TT_Text'. Default is off. */
-
-/* #define HAVE_TT_TEXT */
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support engine extensions */
-/* Default is on, but if you're satisfied by the basic services provided */
-/* by the engine and need no extensions, undefine this configuration */
-/* macro to save a few more bytes. */
-
-#define TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*************************************************************************/
-/* Define this if you want to generate code to support gray-scaling, */
-/* a.k.a. font-smoothing or anti-aliasing. Default is on, but you can */
-/* disable it if you don't need it. */
-
-#define TT_CONFIG_OPTION_GRAY_SCALING
-
-
-/*************************************************************************/
-/* Define this if you want to completely disable the use of the bytecode */
-/* interpreter. Doing so will produce a much smaller library, but the */
-/* quality of the rendered glyphs will enormously suffer from this. */
-/* */
-/* This switch was introduced due to the Apple patents issue which */
-/* emerged recently on the FreeType lists. We still do not have Apple's */
-/* opinion on the subject and will change this as soon as we have. */
-
-#undef TT_CONFIG_OPTION_NO_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to use a big 'switch' statement within the */
-/* bytecode interpreter. Because some non-optimizing compilers are not */
-/* able to produce jump tables from such statements, undefining this */
-/* configuration macro will generate the appropriate C jump table in */
-/* ttinterp.c. If you use an optimizing compiler, you should leave it */
-/* defined for better performance and code compactness.. */
-
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the TrueType */
-/* bytecode interpreter. This will produce much bigger code, which */
-/* _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_INTERPRETER
-
-
-/*************************************************************************/
-/* Define this if you want to build a 'static' version of the scan-line */
-/* converter (the component which in charge of converting outlines into */
-/* bitmaps). This will produce a bigger object file for "ttraster.c", */
-/* which _may_ be faster on some architectures.. */
-/* */
-/* Do NOT DEFINE THIS is you build a thread-safe version of the engine */
-/* */
-#undef TT_CONFIG_OPTION_STATIC_RASTER
-
-
-/*************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-#undef TT_CONFIG_OPTION_THREAD_SAFE
-
-
-/**********************************************************************/
-/* */
-/* The following macros are used to define the debug level, as well */
-/* as individual tracing levels for each component. There are */
-/* currently three modes of operation : */
-/* */
-/* - trace mode (define DEBUG_LEVEL_TRACE) */
-/* */
-/* The engine prints all error messages, as well as tracing */
-/* ones, filtered by each component's level */
-/* */
-/* - debug mode (define DEBUG_LEVEL_ERROR) */
-/* */
-/* Disable tracing, but keeps error output and assertion */
-/* checks. */
-/* */
-/* - release mode (don't define anything) */
-/* */
-/* Don't include error-checking or tracing code in the */
-/* engine's code. Ideal for releases. */
-/* */
-/* NOTE : */
-/* */
-/* Each component's tracing level is defined in its own source. */
-/* */
-/**********************************************************************/
-
-/* Define if you want to use the tracing debug mode */
-#undef DEBUG_LEVEL_TRACE
-
-/* Define if you want to use the error debug mode - ignored if */
-/* DEBUG_LEVEL_TRACE is defined */
-#undef DEBUG_LEVEL_ERROR
-
-
-/**************************************************************************/
-/* Definition of various integer sizes. These types are used by ttcalc */
-/* and ttinterp (for the 64-bit integers) only.. */
-
-#if SIZEOF_INT == 4
-
- typedef signed int TT_Int32;
- typedef unsigned int TT_Word32;
-
-#elif SIZEOF_LONG == 4
-
- typedef signed long TT_Int32;
- typedef unsigned long TT_Word32;
-
-#else
-#error "no 32bit type found"
-#endif
-
-#if SIZEOF_LONG == 8
-
-/* LONG64 must be defined when a 64-bit type is available */
-/* INT64 must then be defined to this type.. */
-#define LONG64
-#define INT64 long
-
-#else
-
-/* GCC provides the non-ANSI 'long long' 64-bit type. You can activate */
-/* by defining the TT_USE_LONG_LONG macro in 'ft_conf.h'. Note that this */
-/* will produce many -ansi warnings during library compilation. */
-#ifdef TT_USE_LONG_LONG
-
-#define LONG64
-#define INT64 long long
-
-#endif /* TT_USE_LONG_LONG */
-#endif
-
-#endif /* FT_CONF_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/fterrid.h b/Build/source/libs/libttf/fterrid.h
deleted file mode 100644
index 0444e6f4704..00000000000
--- a/Build/source/libs/libttf/fterrid.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*******************************************************************
- *
- * fterrid.h
- *
- * TrueType Error ID definitions
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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
-#error "Don't include this file! Use freetype.h instead."
-#endif
-
-#ifndef FTERRID_H
-#define FTERRID_H
-
- /************************ error codes declaration **************/
-
- /* The error codes are grouped in 'classes' used to indicate the */
- /* 'level' at which the error happened. */
- /* The class is given by an error code's high byte. */
-
-
- /* ------------- Success is always 0 -------- */
-
-#define TT_Err_Ok 0
-
-
- /* -------- High-level API error codes ------ */
-
-#define TT_Err_Invalid_Face_Handle 0x001
-#define TT_Err_Invalid_Instance_Handle 0x002
-#define TT_Err_Invalid_Glyph_Handle 0x003
-#define TT_Err_Invalid_CharMap_Handle 0x004
-#define TT_Err_Invalid_Result_Address 0x005
-#define TT_Err_Invalid_Glyph_Index 0x006
-#define TT_Err_Invalid_Argument 0x007
-#define TT_Err_Could_Not_Open_File 0x008
-#define TT_Err_File_Is_Not_Collection 0x009
-
-#define TT_Err_Table_Missing 0x00A
-#define TT_Err_Invalid_Horiz_Metrics 0x00B
-#define TT_Err_Invalid_CharMap_Format 0x00C
-#define TT_Err_Invalid_PPem 0x00D
-#define TT_Err_Invalid_Vert_Metrics 0x00E
-
-#define TT_Err_Invalid_File_Format 0x010
-
-#define TT_Err_Invalid_Engine 0x020
-#define TT_Err_Too_Many_Extensions 0x021
-#define TT_Err_Extensions_Unsupported 0x022
-#define TT_Err_Invalid_Extension_Id 0x023
-
-#define TT_Err_No_Vertical_Data 0x030
-
-#define TT_Err_Max_Profile_Missing 0x080
-#define TT_Err_Header_Table_Missing 0x081
-#define TT_Err_Horiz_Header_Missing 0x082
-#define TT_Err_Locations_Missing 0x083
-#define TT_Err_Name_Table_Missing 0x084
-#define TT_Err_CMap_Table_Missing 0x085
-#define TT_Err_Hmtx_Table_Missing 0x086
-#define TT_Err_OS2_Table_Missing 0x087
-#define TT_Err_Post_Table_Missing 0x088
-#define TT_Err_Glyf_Table_Missing 0x089
-
-
- /* -------- Memory component error codes ---- */
-
- /* this error indicates that an operation cannot */
- /* be performed due to memory exhaustion. */
-
-#define TT_Err_Out_Of_Memory 0x100
-
-
- /* -------- File component error codes ------ */
-
- /* these error codes indicate that the file could */
- /* not be accessed properly. Usually, this means */
- /* a broken font file! */
-
-#define TT_Err_Invalid_File_Offset 0x200
-#define TT_Err_Invalid_File_Read 0x201
-#define TT_Err_Invalid_Frame_Access 0x202
-
-
- /* -------- Glyph loader error codes -------- */
-
- /* Produced only by the glyph loader, these error */
- /* codes indicate a broken glyph in a font file. */
-
-#define TT_Err_Too_Many_Points 0x300
-#define TT_Err_Too_Many_Contours 0x301
-#define TT_Err_Invalid_Composite 0x302
-#define TT_Err_Too_Many_Ins 0x303
-
-
- /* --- bytecode interpreter error codes ----- */
-
- /* These error codes are produced by the TrueType */
- /* bytecode interpreter. They usually indicate a */
- /* broken font file, a broken glyph within a font */
- /* file, or a bug in the interpreter! */
-
-#define TT_Err_Invalid_Opcode 0x400
-#define TT_Err_Too_Few_Arguments 0x401
-#define TT_Err_Stack_Overflow 0x402
-#define TT_Err_Code_Overflow 0x403
-#define TT_Err_Bad_Argument 0x404
-#define TT_Err_Divide_By_Zero 0x405
-#define TT_Err_Storage_Overflow 0x406
-#define TT_Err_Cvt_Overflow 0x407
-#define TT_Err_Invalid_Reference 0x408
-#define TT_Err_Invalid_Distance 0x409
-#define TT_Err_Interpolate_Twilight 0x40A
-#define TT_Err_Debug_OpCode 0x40B
-#define TT_Err_ENDF_In_Exec_Stream 0x40C
-#define TT_Err_Out_Of_CodeRanges 0x40D
-#define TT_Err_Nested_DEFS 0x40E
-#define TT_Err_Invalid_CodeRange 0x40F
-#define TT_Err_Invalid_Displacement 0x410
-#define TT_Err_Execution_Too_Long 0x411
-
-
- /* ------ internal failure error codes ----- */
-
- /* These error codes are produced when an incoherent */
- /* library state has been detected. These reflect a */
- /* severe bug in the engine! (Or a major overwrite */
- /* of your application into the library's data.) */
-
-#define TT_Err_Nested_Frame_Access 0x500
-#define TT_Err_Invalid_Cache_List 0x501
-#define TT_Err_Could_Not_Find_Context 0x502
-#define TT_Err_Unlisted_Object 0x503
-
-
- /* ---- scan-line converter error codes ----- */
-
- /* These error codes are produced by the raster component. */
- /* They indicate that an outline structure was incoherently */
- /* setup, or that you're trying to render an horribly */
- /* complex glyph! */
-
-#define TT_Err_Raster_Pool_Overflow 0x600
-#define TT_Err_Raster_Negative_Height 0x601
-#define TT_Err_Raster_Invalid_Value 0x602
-#define TT_Err_Raster_Not_Initialized 0x603
-
-#endif /* FTERRID_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ftnameid.h b/Build/source/libs/libttf/ftnameid.h
deleted file mode 100644
index 5d51234b8c2..00000000000
--- a/Build/source/libs/libttf/ftnameid.h
+++ /dev/null
@@ -1,628 +0,0 @@
-/*******************************************************************
- *
- * ftnameid.h
- *
- * TrueType Name ID definitions
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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
-#error "Don't include this file! Use freetype.h instead."
-#endif
-
-#ifndef FTNAMEID_H
-#define FTNAMEID_H
-
-/*
- * possible values for the 'Platform' identifier code in the name
- * records of the TTF "name" table
- */
-
-#define TT_PLATFORM_APPLE_UNICODE 0
-#define TT_PLATFORM_MACINTOSH 1
-#define TT_PLATFORM_ISO 2
-#define TT_PLATFORM_MICROSOFT 3
-
-
-/*
- * possible values of the platform specific encoding identifier field in
- * the name records of the TTF "name" table when the 'Platform' identifier
- * code is TT_PLATFORM_APPLE_UNICODE
- */
-
-#define TT_APPLE_ID_DEFAULT 0
-#define TT_APPLE_ID_UNICODE_1_1 1
-#define TT_APPLE_ID_ISO_10646 2
-#define TT_APPLE_ID_UNICODE_2_0 3
-
-
-/*
- * possible values of the platform specific encoding identifier field in
- * the name records of the TTF "name" table when the 'Platform' identifier
- * code is TT_PLATFORM_MACINTOSH
- */
-
-#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
-
-
-/*
- * possible values of the platform specific encoding identifier field in
- * the name records of the TTF "name" table when the 'Platform' identifier
- * code is TT_PLATFORM_ISO
- */
-
-#define TT_ISO_ID_7BIT_ASCII 0
-#define TT_ISO_ID_10646 1
-#define TT_ISO_ID_8859_1 2
-
-
-/*
- * possible values of the platform specific encoding identifier field in
- * the name records of the TTF "name" table when the 'Platform' identifier
- * code is TT_PLATFORM_MICROSOFT
- */
-
-#define TT_MS_ID_SYMBOL_CS 0
-#define TT_MS_ID_UNICODE_CS 1
-#define TT_MS_ID_SJIS 2
-#define TT_MS_ID_GB2312 3
-#define TT_MS_ID_BIG_5 4
-#define TT_MS_ID_WANSUNG 5
-#define TT_MS_ID_JOHAB 6
-
-
-
-/*
- * possible values of the language identifier field in the name records of
- * the TTF "name" table when the 'Platform' identifier code is
- * TT_PLATFORM_MACINTOSH
- *
- * the canonical source for the Apple assigned Language ID's is at
- * http://fonts.apple.com/TTRefMan/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_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_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
-#define TT_MAC_LANGID_SCOTTISH_GAELIC 140
-#define TT_MAC_LANGID_IRISH_GAELIC 141
-#define TT_MAC_LANGID_BRETON 142
-#define TT_MAC_LANGID_INUKTITUT 143
-
-
-/*
- * possible values of the language identifier field in the name records of
- * the TTF "name" table when the 'Platform' identifier code is
- * TT_PLATFORM_MICROSOFT
- *
- * the canonical source for the MS assigned LCID's is at
- * http://www.microsoft.com/typography/OTSPEC/lcid-cp.txt
- */
-
-#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_SPAIN 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_MACAU 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_LIECHTENSTEI 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_SPANISH_SPAIN_TRADITIONAL_SORT 0x040a
-#define TT_MS_LANGID_SPANISH_MEXICO 0x080a
-#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_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_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_EXTENDED_WANSUNG_KOREA 0x0412
-#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812
-#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_RHAETO_ROMANIC_SWITZERLAND 0x0417
-#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418
-#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818
-#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419
-#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819
-#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_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_SLOVENE_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_CLASSIC_LITHUANIAN_LITHUANIA 0x0827
-#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0428
-#define TT_MS_LANGID_FARSI_IRAN 0x0429
-#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_SPAIN 0x042d
-#define TT_MS_LANGID_SORBIAN_GERMANY 0x042e
-#define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042f
-#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430
-#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431
-#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA 0x0432
-#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433
-#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA 0x0434
-#define TT_MS_LANGID_ZULU_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_SAAMI_LAPONIA 0x043b
-#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043c
-#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083c
-#define TT_MS_LANGID_MALAY_MALAYSIA 0x043e
-#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083e
-#define TT_MS_LANGID_KAZAK_KAZAKSTAN 0x043f
-#define TT_MS_LANGID_SWAHILI_KENYA 0x0441
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843
-#define TT_MS_LANGID_TATAR_TATARSTAN 0x0444
-#define TT_MS_LANGID_BENGALI_INDIA 0x0445
-#define TT_MS_LANGID_PUNJABI_INDIA 0x0446
-#define TT_MS_LANGID_GUJARATI_INDIA 0x0447
-#define TT_MS_LANGID_ORIYA_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_KONKANI_INDIA 0x0457
-
-
-/*
- * possible values of the 'Name' identifier field in the name records of
- * the TTF "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_PREFERRED_FAMILY 16
-#define TT_NAME_ID_PREFERRED_SUBFAMILY 17
-#define TT_NAME_ID_MAC_FULL_NAME 18
-
-
-/*
- * Bit Mask values for the Unicode Ranges from the TTF "OS2 " table.
- */
-
-/* General Scripts Area */
-
-/* Bit 0 C0 Controls and Basic Latin */
-#define TT_UCR_BASIC_LATIN (1L << 0) /* U+0000-U+007F */
-/* 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 */
-#define TT_UCR_IPA_EXTENSIONS (1L << 4) /* U+0250-U+02AF */
-/* Bit 5 Spacing Modifier Letters */
-#define TT_UCR_SPACING_MODIFIER (1L << 5) /* U+02B0-U+02FF */
-/* Bit 6 Combining Diacritical Marks */
-#define TT_UCR_COMBINING_DIACRITICS (1L << 6) /* U+0300-U+036F */
-/* Bit 7 Greek */
-#define TT_UCR_GREEK (1L << 7) /* U+0370-U+03FF */
-/* Bit 8 is reserved (was: Greek Symbols and Coptic) */
-/* Bit 9 Cyrillic */
-#define TT_UCR_CYRILLIC (1L << 9) /* U+0400-U+04FF */
-/* 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 is reserved (was: Hebrew Extended) */
-/* Bit 13 Arabic */
-#define TT_UCR_ARABIC (1L << 13) /* U+0600-U+06FF */
-/* Bit 14 is reserved (was: Arabic Extended) */
-/* 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 */
-#define TT_UCR_GEORGIAN (1L << 26) /* U+10A0-U+10FF */
-/* Bit 27 is reserved (was Georgian Extended) */
-/* Bit 28 Hangul Jamo */
-#define TT_UCR_HANGUL_JAMO (1L << 28) /* U+1100-U+11FF */
-/* Bit 29 Latin Extended Additional */
-#define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L << 29) /* U+1E00-U+1EFF */
-/* Bit 30 Greek Extended */
-#define TT_UCR_GREEK_EXTENDED (1L << 30) /* U+1F00-U+1FFF */
-
-/* Symbols Area */
-
-/* Bit 31 General Punctuation */
-#define TT_UCR_GENERAL_PUNCTUATION (1L << 31) /* U+2000-U+206F */
-/* 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_DIACRITICS_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 */
-#define TT_UCR_ARROWS (1L << 5) /* U+2190-U+21FF */
-/* Bit 38 Mathematical Operators */
-#define TT_UCR_MATHEMATICAL_OPERATORS (1L << 6) /* U+2200-U+22FF */
-/* 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 */
-
-/* CJK Phonetics and Symbols Area */
-
-/* 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 */
-#define TT_UCR_KATAKANA (1L << 18) /* U+30A0-U+30FF */
-/* Bit 51 Bopomofo */
-#define TT_UCR_BOPOMOFO (1L << 19) /* U+3100-U+312F */
-/* Bit 52 Hangul Compatibility Jamo */
-#define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L << 20) /* U+3130-U+318F */
-/* Bit 53 CJK Miscellaneous */
-#define TT_UCR_CJK_MISC (1L << 21) /* U+3190-U+319F */
-/* 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 */
-
-/* Hangul Syllables Area */
-
-/* Bit 56 Hangul */
-#define TT_UCR_HANGUL (1L << 24) /* U+AC00-U+D7A3 */
-
-/* Surrogates Area */
-
-/* Bit 57 Surrogates */
-#define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DFFF */
-/* Bit 58 is reserved for Unicode SubRanges */
-
-/* CJK Ideographs Area */
-
-/* Bit 59 CJK Unified Ideographs */
-#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L << 27) /* U+4E00-U+9FFF */
-
-/* Private Use Area */
-
-/* Bit 60 Private Use */
-#define TT_UCR_PRIVATE_USE (1L << 28) /* U+E000-U+F8FF */
-
-/* Compatibility Area and Specials */
-
-/* Bit 61 CJK Compatibility Ideographs */
-#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L << 29) /* U+F900-U+FAFF */
-/* 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_PRESENTATIONS_A (1L << 31) /* U+FB50-U+FSFF */
-/* Bit 64 Combining Half Marks */
-#define TT_UCR_COMBINING_HALF_MARKS (1L << 0) /* U+FE20-U+FE2F */
-/* Bit 65 CJK Compatibility Forms */
-#define TT_UCR_CJK_COMPATIBILITY_FORMS (1L << 1) /* 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_PRESENTATIONS_B (1L << 3) /* U+FE70-U+FEFF */
-/* 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+FEFF,
- U+FFF0-U+FFFF */
-/* Bit 70 Tibetan */
-#define TT_UCR_TIBETAN (1L << 6) /* U+0F00-U+0FBF */
-
-
-/* Some compilers have a very limited length of identifiers. */
-#if defined( __TURBOC__ ) && __TURBOC__ < 0x0410 || defined( __PACIFIC__ )
-#define HAVE_LIMIT_ON_IDENTS
-#endif
-
-#ifndef HAVE_LIMIT_ON_IDENTS
-
-/*
- * Here some alias #defines in order to be clearer.
- *
- * These are not always #defined to stay within the 31 character limit
- * which some compilers have.
- *
- * Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern
- * Borland compilers (read: from BC++ 3.1 on) can increase this limit.
- * If you get a warning with such a compiler, use the -i40 switch.
- */
-
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_A \
- TT_UCR_ARABIC_PRESENTATIONS_A
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_B \
- TT_UCR_ARABIC_PRESENTATIONS_B
-
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS \
- TT_UCR_COMBINING_DIACRITICS
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
- TT_UCR_COMBINING_DIACRITICS_SYMB
-
-#endif /* ndef HAVE_LIMIT_ON_IDENTS */
-
-#endif /* FTNAMEID_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/header.h b/Build/source/libs/libttf/header.h
deleted file mode 100644
index ebd5574404b..00000000000
--- a/Build/source/libs/libttf/header.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************
- *
- * Function :
- *
- * Description :
- *
- * Input :
- *
- * Output :
- *
- * Notes :
- *
- ******************************************************************/
-
-/*******************************************************************
- *
- * Function :
- *
- * Description :
- *
- * Input : None
- *
- * Output : Error code.
- *
- ******************************************************************/
-
-/*******************************************************************
- *
- * Function :
- *
- * Description :
- *
- ******************************************************************/
-
-/*******************************************************************
- *
- * Component Name (e.g. TTRaster.C) + eventually a version number.
- *
- * Component Short Description (e.g. Rasterizer).
- *
- * Copyright 1996 David Turner, Robert Wilhelm and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- ******************************************************************/
diff --git a/Build/source/libs/libttf/ttapi.c b/Build/source/libs/libttf/ttapi.c
deleted file mode 100644
index 2f2d8204bb3..00000000000
--- a/Build/source/libs/libttf/ttapi.c
+++ /dev/null
@@ -1,2219 +0,0 @@
-/*******************************************************************
- *
- * ttapi.c
- *
- * High-level interface implementation
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.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:
- *
- * This file is used to implement most of the functions that are
- * defined in the file "freetype.h". However, two functions are
- * implemented elsewhere :
- *
- * TT_MulDiv and TT_MulFix are in ttcalc.h/ttcalc.c
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-
-#include "freetype.h"
-#include "ttengine.h"
-#include "ttcalc.h"
-#include "ttmemory.h"
-#include "ttcache.h"
-#include "ttfile.h"
-#include "ttobjs.h"
-#include "ttload.h"
-#include "ttgload.h"
-#include "ttraster.h"
-#include "ttextend.h"
-
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_api
-
-
-#ifdef TT_STATIC_RASTER
-#define RAS_OPS /* void */
-#define RAS_OP /* void */
-#else
-#define RAS_OPS ((TRaster_Instance*)_engine->raster_component),
-#define RAS_OP ((TRaster_Instance*)_engine->raster_component)
-#endif /* TT_STATIC_RASTER */
-
-
-#define RENDER_Glyph( glyph, target ) \
- Render_Glyph( RAS_OPS glyph, target )
-
-#define RENDER_Gray_Glyph( glyph, target, palette ) \
- Render_Gray_Glyph( RAS_OPS glyph, target, palette )
-
-
-
-/*******************************************************************
- *
- * Function : TT_FreeType_Version
- *
- * Description : Returns the major and minor version of the library.
- *
- * Input : major, minor addresses
- *
- * Output : Error code.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_FreeType_Version( int *major, int *minor )
- {
- if ( !major || !minor )
- return TT_Err_Invalid_Argument;
-
- *major = TT_FREETYPE_MAJOR;
- *minor = TT_FREETYPE_MINOR;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Init_FreeType
- *
- * Description : The library's engine initializer. This function
- * must be called prior to any call.
- *
- * Input : engine pointer to a FreeType engine instance
- *
- * Output : Error code.
- *
- * MT-Note : This function should be called each time you want
- * to create a TT_Engine. It is not necessarily thread
- * safe depending on the implementations of ttmemory,
- * ttfile and ttmutex, so take care. Their default
- * implementations are safe, however.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Init_FreeType( TT_Engine* engine )
- {
- PEngine_Instance _engine;
-
- TT_Error error;
- int n;
-
-
- /* first of all, initialize memory sub-system */
- error = TTMemory_Init();
- if ( error )
- return error;
-
- /* Allocate engine instance */
- if ( ALLOC( _engine, sizeof ( TEngine_Instance ) ) )
- return error;
-
-#undef TT_FAIL
-#define TT_FAIL( x ) ( error = x (_engine) ) != TT_Err_Ok
-
- /* Initalize components */
- if ( TT_FAIL( TTFile_Init ) ||
- TT_FAIL( TTCache_Init ) ||
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
- TT_FAIL( TTExtend_Init ) ||
-#endif
- TT_FAIL( TTObjs_Init ) ||
- TT_FAIL( TTRaster_Init ) )
- goto Fail;
-
-#undef TT_FAIL
-
- /* set the gray palette defaults: 0 to 4 */
- for ( n = 0; n < 5; n++ )
- _engine->raster_palette[n] = (Byte)n; /* Conversion ok, some warn */
-
- /* create the engine lock */
- MUTEX_Create( _engine->lock );
-
- HANDLE_Set( *engine, _engine );
- return TT_Err_Ok;
-
- Fail:
- TT_Done_FreeType( *engine );
- HANDLE_Set( *engine, NULL );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_FreeType
- *
- * Description : The library's engine finalizer. This function
- * will discard all active face and glyph objects
- * from the heap.
- *
- * Input : engine FreeType engine instance
- *
- * Output : Error code.
- *
- * MT-Note : Destroys an engine. Not necessarily thread-safe
- * depending on the implementations of ttmemory,
- * ttfile and ttmutex. The default implementations
- * are safe, however.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_FreeType( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
-
- if ( !_engine )
- return TT_Err_Ok;
-
- MUTEX_Destroy( _engine->lock );
-
- TTRaster_Done( _engine );
- TTObjs_Done ( _engine );
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
- TTExtend_Done( _engine );
-#endif
- TTCache_Done ( _engine );
- TTFile_Done ( _engine );
- FREE( _engine );
-
- TTMemory_Done();
-
- return TT_Err_Ok;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/*******************************************************************
- *
- * Function : TT_Set_Raster_Gray_Palette
- *
- * Description : Sets the gray-levels palette used for font
- * smoothing.
- *
- * Input : engine FreeType engine instance
- * palette address of palette (a 5 byte array)
- *
- * Output : Invalid argument if 'palette' is NULL.
- *
- * MT-Note: NO! Unprotected modification of an engine's palette.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Raster_Gray_Palette( TT_Engine engine,
- Byte* palette )
- {
- int i;
-
-
- if ( !palette )
- return TT_Err_Invalid_Argument;
-
- for ( i = 0; i < 5; i++ )
- HANDLE_Engine( engine )->raster_palette[i] = (Byte)palette[i];
-
- return TT_Err_Ok;
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
-/*******************************************************************
- *
- * Function : TT_Open_Face
- *
- * Description : Creates a new face object from a given font file.
- *
- * Input : engine FreeType engine instance
- * fontPathName the font file's pathname
- * face adress of returned face handle
- *
- * Output : Error code.
- *
- * Note : The face handle is set to NULL in case of failure.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Open_Face( TT_Engine engine,
- const TT_Text* fontPathName,
- TT_Face* face )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
- TFont_Input input;
- TT_Error error;
- TT_Stream stream;
- PFace _face;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- /* open the file */
- error = TT_Open_Stream( fontPathName, &stream );
- if ( error )
- return error;
-
- input.stream = stream;
- input.fontIndex = 0;
- input.engine = _engine;
-
- /* Create and load the new face object - this is thread-safe */
- error = CACHE_New( _engine->objs_face_cache,
- _face,
- &input );
-
- /* Set the handle */
- HANDLE_Set( *face, _face );
-
- if ( error )
- goto Fail;
-
- return TT_Err_Ok;
-
- Fail:
- TT_Close_Stream( &stream );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Open_Collection
- *
- * Description : Creates a new face object from a given font file.
- *
- * Input : engine FreeType engine instance
- * collectionPathName the font file's pathname
- * fontIndex index of font in TrueType collection
- * face adress of returned face handle
- *
- * Output : Error code.
- *
- * Note : The face handle is set to NULL in case of failure.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Open_Collection( TT_Engine engine,
- const TT_Text* collectionPathName,
- TT_ULong fontIndex,
- TT_Face* face )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
- TFont_Input input;
- TT_Error error;
- TT_Stream stream;
- PFace _face;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- /* open the file */
- error = TT_Open_Stream( collectionPathName, &stream );
- if ( error )
- return error;
-
- input.stream = stream;
- input.fontIndex = fontIndex;
- input.engine = _engine;
-
- /* Create and load the new face object - this is thread-safe */
- error = CACHE_New( _engine->objs_face_cache,
- _face,
- &input );
-
- /* Set the handle */
- HANDLE_Set( *face, _face );
-
- if ( error )
- goto Fail;
-
- return TT_Err_Ok;
-
- Fail:
- TT_Close_Stream( &stream );
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Face_Properties
- *
- * Description : Returns face properties.
- *
- * Input : face the face handle
- * properties address of target properties record
- *
- * Output : Error code.
- *
- * Note : Currently, max_Faces is always set to 0.
- *
- * MT-Note : YES! Reads only permanent data.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Face_Properties( TT_Face face,
- TT_Face_Properties* properties )
- {
- PFace _face = HANDLE_Face( face );
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- properties->num_Glyphs = _face->numGlyphs;
- properties->max_Points = _face->maxPoints;
- properties->max_Contours = _face->maxContours;
- properties->num_CharMaps = _face->numCMaps;
- properties->num_Names = _face->nameTable.numNameRecords;
-
- if ( _face->ttcHeader.DirCount == 0 )
- properties->num_Faces = 1;
- else
- properties->num_Faces = _face->ttcHeader.DirCount;
-
- properties->header = &_face->fontHeader;
- properties->horizontal = &_face->horizontalHeader;
-
- if ( _face->verticalInfo )
- properties->vertical = &_face->verticalHeader;
- else
- properties->vertical = NULL;
-
- properties->os2 = &_face->os2;
- properties->postscript = &_face->postscript;
- properties->hdmx = &_face->hdmx;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Face_Pointer
- *
- * Description : Each face object has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never accesses or uses this field.
- *
- * This function is used to set the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Note : NO! But this function is reserved to "enlightened"
- * developers, so it shouldn't be a problem.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Face_Pointer( TT_Face face,
- void* data )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
- else
- faze->generic = data;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Face_Pointer
- *
- * Description : Each face object has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never access or use this field.
- *
- * This function is used to read the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Note : NO! But this function is reserved to "enlightened"
- * developers, so it shouldn't be a problem.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- void* TT_Get_Face_Pointer( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return NULL;
- else
- return faze->generic;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Face_Metrics
- *
- * Description : This function returns the original horizontal AND
- * vertical metrics as found in the "hmtx" and "vmtx"
- * tables. These are the glyphs' left-side-bearings
- * and advance widths (horizontal), as well as top
- * side bearings and advance heights (vertical).
- *
- * All are expressed in FONT UNITS, a.k.a. EM
- * units.
- *
- * Input : face The given face handle.
- * first Index of first glyph in table.
- * last Index of last glyph in table.
- *
- * leftBearings A pointer to an array of TT_Shorts where the
- * left side bearings for the glyphs 'first'
- * to 'last' will be returned. If these metrics
- * don't interest you, simply set it to NULL.
- *
- * widths A pointer to an array of TT_UShorts
- * where the advance widths for the glyphs
- * 'first' to 'last' will be returned. If these
- * metrics don't interest you, simply set it
- * to NULL.
- *
- * topBearings A pointer to an array of TT_Shorts where the
- * top side bearings for the glyphs 'first'
- * to 'last' will be returned. If these metrics
- * don't interest you, simply set it to NULL.
- *
- * heights A pointer to an array of TT_UShorts
- * where the advance heights for the glyphs
- * 'first' to 'last' will be returned. If these
- * metrics don't interest you, simply set it
- * to NULL.
- *
- * Output : Error code.
- *
- * IMPORTANT NOTE :
- *
- * As vertical metrics are optional in a TrueType font, this
- * function will return an error ( TT_Err_No_Vertical_Data )
- * whenever this function is called on such a face with non-NULL
- * 'topBearings' or 'heights' arguments.
- *
- * When a font has no vertical data, the 'vertical' field in its
- * properties structure is set to NULL.
- *
- * MT-Note : YES! Reads only permanent data.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Face_Metrics( TT_Face face,
- TT_UShort firstGlyph,
- TT_UShort lastGlyph,
- TT_Short* leftBearings,
- TT_UShort* widths,
- TT_Short* topBearings,
- TT_UShort* heights )
- {
- PFace _face = HANDLE_Face( face );
- UShort num;
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- /* Check the glyph range */
- if ( lastGlyph >= _face->numGlyphs || firstGlyph > lastGlyph )
- return TT_Err_Invalid_Argument;
-
- num = lastGlyph - firstGlyph; /* number of elements-1 in each array */
-
- /* store the left side bearings and advance widths first */
- {
- UShort n;
- Short left_bearing;
- UShort advance_width;
-
-
- for ( n = 0; n <= num; n++ )
- {
- TT_Get_Metrics( &_face->horizontalHeader,
- firstGlyph + n, &left_bearing, &advance_width );
-
- if ( leftBearings ) leftBearings[n] = left_bearing;
- if ( widths ) widths[n] = advance_width;
- }
- }
-
- /* check for vertical data if topBearings or heights is non-NULL */
- if ( !topBearings && !heights )
- return TT_Err_Ok;
-
- if ( !_face->verticalInfo )
- return TT_Err_No_Vertical_Data;
-
- /* store the top side bearings */
- {
- UShort n;
- Short top_bearing;
- UShort advance_height;
-
- for ( n = 0; n <= num; n++ )
- {
- TT_Get_Metrics( (TT_Horizontal_Header*)&_face->verticalHeader,
- firstGlyph + n, &top_bearing, &advance_height );
-
- if ( topBearings ) topBearings[n] = top_bearing;
- if ( heights ) heights[n] = advance_height;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Flush_Face
- *
- * Description : This function is used to close an active face's
- * file handle or descriptor. This is useful to save
- * system resources, if your application uses tons
- * of fonts.
- *
- * Input : face the given face handle
- *
- * Output : Error code.
- *
- * MT-Note : YES! (If ttfile is.)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Flush_Face( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
- else
- return TT_Flush_Stream( &faze->stream );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Close_Face
- *
- * Description : Closes an opened face object. This function
- * will destroy all objects associated to the
- * face, except the glyphs.
- *
- * Input : face the given face handle
- *
- * Output : Error code.
- *
- * NOTE : The handle is set to NULL on exit.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Close_Face( TT_Face face )
- {
- PFace _face = HANDLE_Face( face );
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- TT_Close_Stream( &_face->stream );
-
- /* delete the face object -- this is thread-safe */
- return CACHE_Done( _face->engine->objs_face_cache, _face );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_New_Instance
- *
- * Description : Creates a new instance from a given face.
- *
- * Input : face parent face handle
- * instance address of instance handle
- *
- * Output : Error code.
- *
- * Note : The handle is set to NULL in case of failure.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_New_Instance( TT_Face face,
- TT_Instance* instance )
- {
- TT_Error error;
- PFace _face = HANDLE_Face( face );
- PInstance _ins;
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- /* get a new instance from the face's cache -- this is thread-safe */
- error = CACHE_New( &_face->instances, _ins, _face );
-
- HANDLE_Set( *instance, _ins );
-
- if ( !error )
- {
- error = Instance_Init( _ins );
- if ( error )
- {
- HANDLE_Set( *instance, NULL );
- CACHE_Done( &_face->instances, _ins );
- }
- }
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_Resolutions
- *
- * Description : Resets an instance to a new device resolution.
- *
- * Input : instance the instance handle
- * xResolution new horizontal device resolution in dpi
- * yResolution new vertical device resolution in dpi
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolutions must have reasonable values.
- *
- * MT-Note : You should set the charsize or pixel size immediately
- * after this call in multi-threaded programs. This will
- * force the instance data to be resetted. Otherwise, you
- * may encounter corruption when loading two glyphs from
- * the same instance concurrently!
- *
- * Happily, 99.99% will do just that :-)
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Instance_Resolutions( TT_Instance instance,
- TT_UShort xResolution,
- TT_UShort yResolution )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- ins->metrics.x_resolution = xResolution;
- ins->metrics.y_resolution = yResolution;
- ins->valid = FALSE;
-
- /* In the case of a thread-safe implementation, we immediately */
- /* call Instance_Reset in order to change the instance's variable */
-
- /* In the case of a non-threaded build, we simply set the 'valid' */
- /* flag to FALSE, which will force the instance's resetting at */
- /* the next glyph loading */
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_CharSizes
- *
- * Description : Resets an instance to new point size.
- *
- * Input : instance the instance handle
- * charWidth the new width in 26.6 char points
- * charHeight the new height in 26.6 char points
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolution must have reasonable values.
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Instance_CharSizes( TT_Instance instance,
- TT_F26Dot6 charWidth,
- TT_F26Dot6 charHeight )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- if ( charWidth < 1 * 64 )
- charWidth = 1 * 64;
-
- if ( charHeight < 1 * 64 )
- charHeight = 1 * 64;
-
- ins->metrics.x_scale1 = ( charWidth * ins->metrics.x_resolution ) / 72;
- ins->metrics.x_scale2 = ins->owner->fontHeader.Units_Per_EM;
-
- ins->metrics.y_scale1 = ( charHeight * ins->metrics.y_resolution ) / 72;
- ins->metrics.y_scale2 = ins->owner->fontHeader.Units_Per_EM;
-
- if ( ins->owner->fontHeader.Flags & 8 )
- {
- ins->metrics.x_scale1 = (ins->metrics.x_scale1+32) & -64;
- ins->metrics.y_scale1 = (ins->metrics.y_scale1+32) & -64;
- }
-
- ins->metrics.x_ppem = ins->metrics.x_scale1 / 64;
- ins->metrics.y_ppem = ins->metrics.y_scale1 / 64;
-
- if ( charWidth > charHeight )
- ins->metrics.pointSize = charWidth;
- else
- ins->metrics.pointSize = charHeight;
-
- ins->valid = FALSE;
-
- return Instance_Reset( ins );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_CharSize
- *
- * Description : Resets an instance to new point size.
- *
- * Input : instance the instance handle
- * charSize the new character size in 26.6 char points
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolution must have reasonable values.
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Instance_CharSize( TT_Instance instance,
- TT_F26Dot6 charSize )
- {
- return TT_Set_Instance_CharSizes( instance, charSize, charSize );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_PixelSizes
- *
- * Description : Resets an instance to new pixel sizes
- *
- * Input : instance the instance handle
- * pixelWidth the new width in pixels
- * pixelHeight the new height in pixels
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolution must have reasonable values.
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Instance_PixelSizes( TT_Instance instance,
- TT_UShort pixelWidth,
- TT_UShort pixelHeight,
- TT_F26Dot6 pointSize )
- {
- PInstance ins = HANDLE_Instance( instance );
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- if ( pixelWidth < 1 ) pixelWidth = 1;
- if ( pixelHeight < 1 ) pixelHeight = 1;
-
- ins->metrics.x_ppem = pixelWidth;
- ins->metrics.y_ppem = pixelHeight;
- ins->metrics.pointSize = pointSize;
-
- ins->metrics.x_scale1 = ins->metrics.x_ppem * 64L;
- ins->metrics.x_scale2 = ins->owner->fontHeader.Units_Per_EM;
- ins->metrics.y_scale1 = ins->metrics.y_ppem * 64L;
- ins->metrics.y_scale2 = ins->owner->fontHeader.Units_Per_EM;
-
- ins->valid = FALSE;
-
- return Instance_Reset( ins );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_Transform_Flags
- *
- * Description : Informs the interpreter about the transformations
- * that will be applied to the rendered glyphs.
- *
- * Input : instance the instance handle
- * rotated set to TRUE if the glyph are rotated
- * stretched set to TRUE if the glyph are stretched
- *
- * Output : Error code.
- *
- * Note : This function is deprecated! It's much better to
- * control hinting manually when calling TT_Load_Glyph
- * than relying on the font programs...
- *
- * Never use it, unless calling for trouble ;-)
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Instance_Transform_Flags( TT_Instance instance,
- TT_Bool rotated,
- TT_Bool stretched )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- ins->metrics.rotated = rotated;
- ins->metrics.stretched = stretched;
- ins->valid = FALSE;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Instance_Metrics
- *
- * Description : Returns instance metrics.
- *
- * Input : instance the instance handle
- * metrics address of target instance metrics record
- *
- * Output : Error code.
- *
- * MT-Note : YES! Reads only semi-permanent data.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Instance_Metrics( TT_Instance instance,
- TT_Instance_Metrics* metrics )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- if ( !ins->valid )
- Instance_Reset( ins );
-
- metrics->pointSize = ins->metrics.pointSize;
-
- metrics->x_scale = TT_MulDiv( 0x10000,
- ins->metrics.x_scale1,
- ins->metrics.x_scale2 );
-
- metrics->y_scale = TT_MulDiv( 0x10000,
- ins->metrics.y_scale1,
- ins->metrics.y_scale2 );
-
- metrics->x_resolution = ins->metrics.x_resolution;
- metrics->y_resolution = ins->metrics.y_resolution;
- metrics->x_ppem = ins->metrics.x_ppem;
- metrics->y_ppem = ins->metrics.y_ppem;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_Pointer
- *
- * Description : Each instance has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never accesses or uses this field.
- *
- * This function is used to set the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Note : NO!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Set_Instance_Pointer( TT_Instance instance,
- void* data )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
- else
- ins->generic = data;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Instance_Pointer
- *
- * Description : Each instance has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never accesses or uses this field.
- *
- * This function is used to read the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Safe : NO!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- void* TT_Get_Instance_Pointer( TT_Instance instance )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return NULL;
- else
- return ins->generic;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Instance
- *
- * Description : Closes a given instance.
- *
- * Input : instance address of instance handle
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Instance( TT_Instance instance )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- /* delete the instance -- this is thread-safe */
- return CACHE_Done( &ins->owner->instances, ins );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_New_Glyph
- *
- * Description : Creates a new glyph object related to a given
- * face.
- *
- * Input : face the face handle
- * glyph address of target glyph handle
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_New_Glyph( TT_Face face,
- TT_Glyph* glyph )
- {
- TT_Error error;
- PFace _face = HANDLE_Face( face );
- PGlyph _glyph;
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- /* get a new glyph from the face's cache -- this is thread-safe */
- error = CACHE_New( &_face->glyphs, _glyph, _face );
-
- HANDLE_Set( *glyph, _glyph );
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Glyph
- *
- * Description : Destroys a given glyph object.
- *
- * Input : glyph the glyph handle
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Glyph( TT_Glyph glyph )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- /* delete the engine -- this is thread-safe */
- return CACHE_Done( &_glyph->face->glyphs, _glyph );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Load_Glyph
- *
- * Description : Loads a glyph.
- *
- * Input : instance the instance handle
- * glyph the glyph handle
- * glyphIndex the glyph index
- * loadFlags flags controlling how to load the glyph
- * (none, scaled, hinted, both)
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Load_Glyph( TT_Instance instance,
- TT_Glyph glyph,
- TT_UShort glyphIndex,
- TT_UShort loadFlags )
- {
- PInstance _ins;
- PGlyph _glyph;
- TT_Error error;
-
-
- _ins = HANDLE_Instance( instance );
-
- if ( !_ins )
- loadFlags &= ~(TTLOAD_SCALE_GLYPH | TTLOAD_HINT_GLYPH);
-
- if ( (loadFlags & TTLOAD_SCALE_GLYPH) == 0 )
- _ins = 0;
-
- _glyph = HANDLE_Glyph( glyph );
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- if ( _ins )
- {
- if ( _ins->owner != _glyph->face )
- return TT_Err_Invalid_Face_Handle;
-
- if ( !_ins->valid )
- {
- /* This code can only be called in non thread-safe builds */
- error = Instance_Reset( _ins );
- if ( error )
- return error;
- }
- }
-
- return Load_TrueType_Glyph( _ins, _glyph, glyphIndex, loadFlags );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Outline
- *
- * Description : Returns the glyph's outline data.
- *
- * Input : glyph the glyph handle
- * outline address where the glyph outline will be returned
- *
- * Output : Error code.
- *
- * MT-Safe : YES! Reads only semi-permanent data.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Glyph_Outline( TT_Glyph glyph,
- TT_Outline* outline )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- *outline = _glyph->outline;
- outline->owner = FALSE;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Metrics
- *
- * Description : Extracts the glyph's horizontal metrics information.
- *
- * Input : glyph glyph object handle
- * metrics address where metrics will be returned
- *
- * Output : Error code.
- *
- * MT-Safe : NO! Glyph containers can't be shared.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Glyph_Metrics( TT_Glyph glyph,
- TT_Glyph_Metrics* metrics )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- metrics->bbox = _glyph->metrics.bbox;
- metrics->bearingX = _glyph->metrics.horiBearingX;
- metrics->bearingY = _glyph->metrics.horiBearingY;
- metrics->advance = _glyph->metrics.horiAdvance;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Big_Metrics
- *
- * Description : Extracts the glyph's big metrics information.
- *
- * Input : glyph glyph object handle
- * metrics address where big metrics will be returned
- *
- * Output : Error code.
- *
- * MT-Safe : NO! Glyph containers can't be shared.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Glyph_Big_Metrics( TT_Glyph glyph,
- TT_Big_Glyph_Metrics* metrics )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- *metrics = _glyph->metrics;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Bitmap
- *
- * Description : Produces a bitmap from a glyph outline.
- *
- * Input : glyph the glyph container's handle
- * bitmap target bitmap description block
- * xOffset x offset in fractional pixels (26.6 format)
- * yOffset y offset in fractional pixels (26.6 format)
- *
- * Output : Error code.
- *
- * Note : Only use integer pixel offsets if you want to preserve
- * the fine hints applied to the outline. This means that
- * xOffset and yOffset must be multiples of 64!
- *
- * MT-Safe : NO! Glyph containers can't be shared.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Glyph_Bitmap( TT_Glyph glyph,
- TT_Raster_Map* bitmap,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset )
- {
- PEngine_Instance _engine;
- TT_Engine engine;
- TT_Error error;
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
- TT_Outline outline;
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- _engine = _glyph->face->engine;
- HANDLE_Set( engine, _engine );
-
- outline = _glyph->outline;
- /* XXX : For now, use only dropout mode 2 */
- /* outline.dropout_mode = _glyph->scan_type; */
- outline.dropout_mode = 2;
-
- TT_Translate_Outline( &outline, xOffset, yOffset );
- error = TT_Get_Outline_Bitmap( engine, &outline, bitmap );
- TT_Translate_Outline( &outline, -xOffset, -yOffset );
-
- return error;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Pixmap
- *
- * Description : Produces a grayscaled pixmap from a glyph
- * outline.
- *
- * Input : glyph the glyph container's handle
- * pixmap target pixmap description block
- * xOffset x offset in fractional pixels (26.6 format)
- * yOffset y offset in fractional pixels (26.6 format)
- *
- * Output : Error code.
- *
- * Note : Only use integer pixel offsets to preserve the fine
- * hinting of the glyph and the 'correct' anti-aliasing
- * (where vertical and horizontal stems aren't grayed).
- * This means that xOffset and yOffset must be multiples
- * of 64!
- *
- * You can experiment with offsets of +32 to get 'blurred'
- * versions of the glyphs (a nice effect at large sizes that
- * some graphic designers may appreciate :)
- *
- * MT-Safe : NO! Glyph containers can't be shared.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Glyph_Pixmap( TT_Glyph glyph,
- TT_Raster_Map* pixmap,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset )
- {
- PEngine_Instance _engine;
- TT_Engine engine;
- TT_Error error;
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
- TT_Outline outline;
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- _engine = _glyph->face->engine;
- HANDLE_Set(engine,_engine);
-
- outline = _glyph->outline;
- /* XXX : For now, use only dropout mode 2 */
- /* outline.dropout_mode = _glyph->scan_type; */
- outline.dropout_mode = 2;
-
- TT_Translate_Outline( &outline, xOffset, yOffset );
- error = TT_Get_Outline_Pixmap( engine, &outline, pixmap );
- TT_Translate_Outline( &outline, -xOffset, -yOffset );
-
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
- static const TT_Outline null_outline
- = { 0, 0, NULL, NULL, NULL, 0, 0, 0, 0 };
-
-
-/*******************************************************************
- *
- * Function : TT_New_Outline
- *
- * Description : Creates a new TrueType outline, reserving
- * array space for a given number of points and
- * contours.
- *
- * Input : numPoints number of points
- * numContours number of contours
- * outline address of target outline structure
- *
- * Output : Error code
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_New_Outline( TT_UShort numPoints,
- TT_Short numContours,
- TT_Outline* outline )
- {
- TT_Error error;
-
-
- if ( !outline )
- return TT_Err_Invalid_Argument;
-
- *outline = null_outline;
-
- if ( ALLOC( outline->points, numPoints*2*sizeof ( TT_F26Dot6 ) ) ||
- ALLOC( outline->flags, numPoints *sizeof ( Byte ) ) ||
- ALLOC( outline->contours, numContours*sizeof ( UShort ) ) )
- goto Fail;
-
- outline->n_points = numPoints;
- outline->n_contours = numContours;
- outline->owner = TRUE;
- return TT_Err_Ok;
-
- Fail:
- outline->owner = TRUE;
- TT_Done_Outline( outline );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Outline
- *
- * Description : Deletes an outline created through TT_New_Outline().
- * Calling this function for outlines returned
- * by TT_Get_Glyph_Outline() yields an error.
- *
- * Input : outline address of outline
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Outline( TT_Outline* outline )
- {
- if ( outline )
- {
- if ( outline->owner )
- {
- FREE( outline->points );
- FREE( outline->flags );
- FREE( outline->contours );
- }
- *outline = null_outline;
- return TT_Err_Ok;
- }
- else
- return TT_Err_Invalid_Argument;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Outline_Bitmap
- *
- * Description : Render a TrueType outline into a bitmap.
- * Note that the bitmap must be created by the caller.
- *
- * Input : outline the outline to render
- * bitmap the target bitmap
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Outline_Bitmap( TT_Engine engine,
- TT_Outline* outline,
- TT_Raster_Map* bitmap )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
- TT_Error error;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- if ( !outline || !bitmap )
- return TT_Err_Invalid_Argument;
-
- MUTEX_Lock( _engine->raster_lock );
- error = RENDER_Glyph( outline, bitmap );
- MUTEX_Release( _engine->raster_lock );
-
- return error;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/*******************************************************************
- *
- * Function : TT_Get_Outline_Pixmap
- *
- * Description : Render a TrueType outline into a pixmap.
- * Note that the pixmap must be created by the caller.
- *
- * Input : outline the outline to render
- * pixmap the target pixmap
- *
- * Output : Error code
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Outline_Pixmap( TT_Engine engine,
- TT_Outline* outline,
- TT_Raster_Map* pixmap )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
- TT_Error error;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- if ( !outline || !pixmap )
- return TT_Err_Invalid_Argument;
-
- MUTEX_Lock( _engine->raster_lock );
- error = RENDER_Gray_Glyph( outline, pixmap, _engine->raster_palette );
- MUTEX_Release( _engine->raster_lock );
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
-/*******************************************************************
- *
- * Function : TT_Copy_Outline
- *
- * Description : Copy an outline into another. The source and
- * target outlines must have the same points and
- * contours numbers.
- *
- * Input : source address of source outline
- * target address of target outline
- *
- * Output : Error code
- *
- * Note : This function doesn't touch the target outline's 'owner'
- * field.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Copy_Outline( TT_Outline* source,
- TT_Outline* target )
- {
- if ( !source || !target ||
- source->n_points != target->n_points ||
- source->n_contours != target->n_contours )
- return TT_Err_Invalid_Argument;
-
- MEM_Copy( target->points, source->points,
- source->n_points * 2 * sizeof ( TT_F26Dot6 ) );
-
- MEM_Copy( target->flags, source->flags,
- source->n_points * sizeof ( Byte ) );
-
- MEM_Copy( target->contours, source->contours,
- source->n_contours * sizeof ( Short ) );
-
- target->high_precision = source->high_precision;
- target->second_pass = target->second_pass;
- target->dropout_mode = source->dropout_mode;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Transform_Outline
- *
- * Description : Applies a simple transformation to an outline.
- *
- * Input : outline the glyph's outline. Can be extracted
- * from a glyph container through
- * TT_Get_Glyph_Outline().
- *
- * matrix simple matrix with 16.16 fixed floats
- *
- * Output : Error code (always TT_Err_Ok).
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- void TT_Transform_Outline( TT_Outline* outline,
- TT_Matrix* matrix )
- {
- UShort n;
- TT_F26Dot6 x, y;
- TT_Vector* vec;
-
-
- vec = outline->points;
- for ( n = 0; n < outline->n_points; n++ )
- {
- x = TT_MulFix( vec->x, matrix->xx ) +
- TT_MulFix( vec->y, matrix->xy );
-
- y = TT_MulFix( vec->x, matrix->yx ) +
- TT_MulFix( vec->y, matrix->yy );
-
- vec->x = x;
- vec->y = y;
- vec++;
- }
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Transform_Vector
- *
- * Description : Apply a simple transform to a vector
- *
- * Input : x, y the vector.
- *
- * matrix simple matrix with 16.16 fixed floats
- *
- * Output : None.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- void TT_Transform_Vector( TT_F26Dot6* x,
- TT_F26Dot6* y,
- TT_Matrix* matrix )
- {
- TT_F26Dot6 xz, yz;
-
-
- xz = TT_MulFix( *x, matrix->xx ) +
- TT_MulFix( *y, matrix->xy );
-
- yz = TT_MulFix( *x, matrix->yx ) +
- TT_MulFix( *y, matrix->yy );
-
- *x = xz;
- *y = yz;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Translate_Outline
- *
- * Description : Applies a simple translation.
- *
- * Input : outline no comment :)
- * xOffset
- * yOffset
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- void TT_Translate_Outline( TT_Outline* outline,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset )
- {
- UShort n;
- TT_Vector* vec = outline->points;
-
-
- for ( n = 0; n < outline->n_points; n++ )
- {
- vec->x += xOffset;
- vec->y += yOffset;
- vec++;
- }
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Outline_BBox
- *
- * Description : Returns an outline's bounding box.
- *
- * Input : outline no comment :)
- * bbox address where the bounding box is returned
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Outline_BBox( TT_Outline* outline,
- TT_BBox* bbox )
- {
- TT_F26Dot6 x, y;
- UShort k;
-
-
- if ( outline && bbox )
- {
- if ( outline->n_points == 0 )
- {
- bbox->xMin = 0;
- bbox->yMin = 0;
- bbox->xMax = 0;
- bbox->yMax = 0;
- }
- else
- {
- TT_Vector* vec = outline->points;
-
- bbox->xMin = bbox->xMax = vec->x;
- bbox->yMin = bbox->yMax = vec->y;
- vec++;
-
- for ( k = 1; k < outline->n_points; k++ )
- {
- x = vec->x;
- if ( x < bbox->xMin ) bbox->xMin = x;
- if ( x > bbox->xMax ) bbox->xMax = x;
- y = vec->y;
- if ( y < bbox->yMin ) bbox->yMin = y;
- if ( y > bbox->yMax ) bbox->yMax = y;
- vec++;
- }
- }
- return TT_Err_Ok;
- }
- else
- return TT_Err_Invalid_Argument;
- }
-
-
-
- /* ----------------- character mappings support ------------- */
-
-/*******************************************************************
- *
- * Function : TT_Get_CharMap_Count
- *
- * Description : Returns the number of charmaps in a given face.
- *
- * Input : face face object handle
- *
- * Output : Number of tables. -1 in case of error (bad handle).
- *
- * Note : DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED!
- *
- * It is retained for backwards compatibility only and will
- * fail on 16bit systems.
- *
- * MT-Safe : YES !
- *
- ******************************************************************/
-
- EXPORT_FUNC
- int TT_Get_CharMap_Count( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
- return ( faze ? faze->numCMaps : -1 );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_CharMap_ID
- *
- * Description : Returns the ID of a given charmap.
- *
- * Input : face face object handle
- * charmapIndex index of charmap in directory
- * platformID address of returned platform ID
- * encodingID address of returned encoding ID
- *
- * Output : error code
- *
- * MT-Safe : YES !
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_CharMap_ID( TT_Face face,
- TT_UShort charmapIndex,
- TT_UShort* platformID,
- TT_UShort* encodingID )
- {
- PCMapTable cmap;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( charmapIndex >= faze->numCMaps )
- return TT_Err_Invalid_Argument;
-
- cmap = faze->cMaps + charmapIndex;
-
- *platformID = cmap->platformID;
- *encodingID = cmap->platformEncodingID;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_CharMap
- *
- * Description : Looks up a charmap.
- *
- * Input : face face object handle
- * charmapIndex index of charmap in directory
- * charMap address of returned charmap handle
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_CharMap( TT_Face face,
- TT_UShort charmapIndex,
- TT_CharMap* charMap )
- {
- TT_Error error;
- TT_Stream stream;
- PCMapTable cmap;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( charmapIndex >= faze->numCMaps )
- return TT_Err_Invalid_Argument;
-
- cmap = faze->cMaps + charmapIndex;
-
- /* Load table if needed */
- error = TT_Err_Ok;
-
- /* MT-NOTE: We're modifying the face object, so protect it. */
- MUTEX_Lock( faze->lock );
-
- if ( !cmap->loaded )
- {
- (void)USE_Stream( faze->stream, stream );
- if ( !error )
- {
- error = CharMap_Load( cmap, stream );
- DONE_Stream( stream );
- }
-
- if ( error )
- cmap = NULL;
- else
- cmap->loaded = TRUE;
- }
- MUTEX_Release( faze->lock );
-
- HANDLE_Set( *charMap, cmap );
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Char_Index
- *
- * Description : Returns the glyph index corresponding to
- * a given character code defined for the 'charmap'.
- *
- * Input : charMap charmap handle
- * charcode character code
- *
- * Output : glyph index.
- *
- * Notes : Character code 0 is the unknown glyph, which should never
- * be displayed.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_UShort TT_Char_Index( TT_CharMap charMap,
- TT_ULong charCode )
- {
- PCMapTable cmap = HANDLE_CharMap( charMap );
-
-
- if ( !cmap )
- return 0; /* we return 0 in case of invalid char map */
-
- return CharMap_Index( cmap, charCode );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Name_Count
- *
- * Description : Returns the number of strings found in the
- * name table.
- *
- * Input : face face handle
- *
- * Output : number of strings.
- *
- * Notes : Returns -1 on error (invalid handle).
- *
- * DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED!
- *
- * It is retained for backwards compatibility only and will
- * fail on 16bit systems.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- int TT_Get_Name_Count( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return -1;
-
- return faze->nameTable.numNameRecords;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Name_ID
- *
- * Description : Returns the IDs of the string number 'nameIndex'
- * in the name table of a given face.
- *
- * Input : face face handle
- * nameIndex index of string. First is 0
- * platformID addresses of returned IDs
- * encodingID
- * languageID
- * nameID
- *
- * Output : Error code.
- *
- * Notes : Some files have a corrupt or unusual name table, with some
- * entries having a platformID > 3. These can usually
- * be ignored by a client application.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Name_ID( TT_Face face,
- TT_UShort nameIndex,
- TT_UShort* platformID,
- TT_UShort* encodingID,
- TT_UShort* languageID,
- TT_UShort* nameID )
- {
- TNameRec* namerec;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( nameIndex >= faze->nameTable.numNameRecords )
- return TT_Err_Invalid_Argument;
-
- namerec = faze->nameTable.names + nameIndex;
-
- *platformID = namerec->platformID;
- *encodingID = namerec->encodingID;
- *languageID = namerec->languageID;
- *nameID = namerec->nameID;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Name_String
- *
- * Description : Returns the address and length of a given
- * string found in the name table.
- *
- * Input : face face handle
- * nameIndex string index
- * stringPtr address of returned pointer to string
- * length address of returned string length
- *
- * Output : Error code.
- *
- * Notes : If the string's platformID is invalid,
- * stringPtr is NULL, and length is 0.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Name_String( TT_Face face,
- TT_UShort nameIndex,
- TT_String** stringPtr,
- TT_UShort* length )
- {
- TNameRec* namerec;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( nameIndex >= faze->nameTable.numNameRecords )
- return TT_Err_Invalid_Argument;
-
- namerec = faze->nameTable.names + nameIndex;
-
- *stringPtr = (String*)namerec->string;
- *length = namerec->stringLength;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Font_Data
- *
- * Description : Loads any font table into client memory.
- *
- * Input : face Face object to look for.
- *
- * tag 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 Starting offset in the table (or the file
- * if tag == 0).
- *
- * buffer Address of target buffer
- *
- * length Address of decision variable:
- *
- * if length == NULL:
- * Load the whole table. Returns an
- * error if 'offset' != 0.
- *
- * if *length == 0 :
- * Exit immediately, returning the
- * length of the given table, or of
- * the font file, depending on the
- * value of 'tag'.
- *
- * if *length != 0 :
- * Load the next 'length' bytes of
- * table or font, starting at offset
- * 'offset' (in table or font too).
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Get_Font_Data( TT_Face face,
- TT_ULong tag,
- TT_Long offset,
- void* buffer,
- TT_Long* length )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- return Load_TrueType_Any( faze, tag, offset, buffer, length );
- }
-
-
- /************************ callback definition ******************/
-
- /* Register a new callback to the TrueType engine -- this should */
- /* only be used by higher-level libraries, not typical clients */
- /* */
- /* This is not part of the current FreeType release, thus */
- /* undefined... */
-
-#if 0
- EXPORT_FUNC
- TT_Error TT_Register_Callback( TT_Engine engine,
- int callback_id,
- void* callback_ptr )
- {
- PEngine_Instance eng = HANDLE_Engine( engine );
-
-
- if ( !eng )
- return TT_Err_Invalid_Argument;
-
- /* currently, we only support one callback */
- if (callback_id != TT_Callback_Glyph_Outline_Load)
- return TT_Err_Invalid_Argument;
-
- eng->glCallback = (TT_Glyph_Loader_Callback)callback_ptr;
- return TT_Err_Ok;
- }
-#endif /* 0 */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttcache.c b/Build/source/libs/libttf/ttcache.c
deleted file mode 100644
index 51624194b97..00000000000
--- a/Build/source/libs/libttf/ttcache.c
+++ /dev/null
@@ -1,463 +0,0 @@
-/*******************************************************************
- *
- * ttcache.c 1.1
- *
- * Generic object cache
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- * Changes between 1.1 and 1.0:
- *
- * - introduced the refresher and finalizer in the cache class
- * definition/implementation.
- *
- ******************************************************************/
-
-#include "ttengine.h"
-#include "ttmemory.h"
-#include "ttcache.h"
-#include "ttobjs.h"
-#include "ttdebug.h"
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_cache
-
-#define ZERO_List( list ) list = NULL
-
-/* The macro FREE_Elements aliases the current engine instance's */
-/* free list_elements recycle list. */
-#define FREE_Elements ( engine->list_free_elements )
-
-/* Redefinition of LOCK and UNLOCK macros for New_Element and Done_Element */
-/* Note: The macros are redefined below for the cache functions */
-
-#undef LOCK
-#define LOCK() MUTEX_Lock ( engine->lock )
-
-#undef UNLOCK
-#define UNLOCK() MUTEX_Release( engine->lock )
-
-/*******************************************************************
- *
- * Function : Element_New
- *
- * Description : Gets a new (either fresh or recycled) list
- * element. The element is unlisted.
- *
- * Input : None
- *
- * Output : List element address. NULL if out of memory.
- *
- ******************************************************************/
-
- static
- PList_Element Element_New( PEngine_Instance engine )
- {
- PList_Element element;
-
-
- LOCK();
- if ( FREE_Elements )
- {
- element = (PList_Element)FREE_Elements;
- FREE_Elements = element->next;
- }
- else
- {
- if ( !MEM_Alloc( element, sizeof ( TList_Element ) ) )
- {
- element->next = NULL;
- element->data = NULL;
- }
- }
-
- /* Note: in case of failure, Alloc sets the pointer to NULL */
- UNLOCK();
-
- return element;
- }
-
-
-/*******************************************************************
- *
- * Function : Element_Done
- *
- * Description : Recycles an unlinked list element.
- *
- * Input : The list element to recycle. It _must_ be unlisted.
- *
- * Output : none.
- *
- * Note : This function doesn't check the element.
- *
- ******************************************************************/
-
- static
- void Element_Done( PEngine_Instance engine,
- PList_Element element )
- {
- LOCK();
- /* Simply add the list element to the recycle list */
- element->next = (PList_Element)FREE_Elements;
- FREE_Elements = element;
- UNLOCK();
- }
-
-
-/* Redefinition of LOCK and UNLOCK macros for the cache functions */
-/* Note: The macros are defined above for the list element functions */
-
-#undef LOCK
-#define LOCK() MUTEX_Lock( *cache->lock )
-
-#undef UNLOCK
-#define UNLOCK() MUTEX_Release( *cache->lock )
-
-
-/*******************************************************************
- *
- * Function : Cache_Create
- *
- * Description : Creates a new cache that will be used to list
- * and recycle several objects of the same class.
- *
- * Input : clazz a pointer to the cache's class. This is
- * a simple structure that describes the
- * the cache's object types and recycling
- * limits.
- *
- * cache address of cache to create
- *
- * lock address of the mutex to use for this
- * cache. The mutex will be used to protect
- * the cache's lists. Use NULL for unprotected
- * cache.
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Cache_Create( PEngine_Instance engine,
- PCache_Class clazz,
- TCache* cache,
- TMutex* lock )
- {
- cache->engine = engine;
- cache->clazz = clazz;
- cache->lock = lock;
- cache->idle_count = 0;
-
- ZERO_List( cache->active );
- ZERO_List( cache->idle );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Cache_Destroy
- *
- * Description : Destroys a cache and all its idle and active
- * objects. This will call each object's destructor
- * before freeing it.
- *
- * Input : cache address of cache to destroy
- *
- * Output : error code.
- *
- * Note: This function is not MT-Safe, as we assume that a client
- * isn't stupid enough to use an object while destroying it.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Cache_Destroy( TCache* cache )
- {
- PDestructor destroy;
- PList_Element current;
- PList_Element next;
-
-
- /* now destroy all active and idle listed objects */
-
- /* get the destructor function */
- destroy = cache->clazz->done;
-
- /* destroy all elements in active list */
- current = cache->active;
- while ( current )
- {
- next = current->next;
- destroy( current->data );
- FREE( current->data );
-
- Element_Done( cache->engine, current );
- current = next;
- }
- ZERO_List(cache->active);
-
- /* destroy all elements in idle list */
- current = cache->idle;
- while ( current )
- {
- next = current->next;
- destroy( current->data );
- FREE( current->data );
-
- Element_Done( cache->engine, current );
- current = next;
- }
- ZERO_List(cache->idle);
-
- cache->clazz = NULL;
- cache->idle_count = 0;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Cache_New
- *
- * Description : Extracts a new object from a cache. This will
- * try to recycle an idle object, if any is found.
- * Otherwise, a new object will be allocated and
- * built (by calling its constructor).
- *
- * Input : cache address of cache to use
- * new_object address of target pointer to the 'new'
- * object
- * parent_object this pointer is passed to a new object
- * constructor (unused if object is
- * recycled)
- *
- * Output : Error code.
- *
- * Notes: This function is thread-safe, each cache list is protected
- * through the cache's mutex, if there is one...
- *
- * *new_object will be set to NULL in case of failure.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Cache_New( TCache* cache,
- void** new_object,
- void* parent_object )
- {
- TT_Error error;
- PList_Element current;
- PConstructor build;
- PRefresher reset;
- void* object;
-
-
- LOCK();
- current = cache->idle;
- if ( current )
- {
- cache->idle = current->next;
- cache->idle_count--;
- }
- UNLOCK();
-
- if ( current )
- {
- object = current->data;
- reset = cache->clazz->reset;
- if ( reset )
- {
- error = reset( object, parent_object );
- if ( error )
- {
- LOCK();
- current->next = cache->idle;
- cache->idle = current;
- cache->idle_count++;
- UNLOCK();
- goto Exit;
- }
- }
- }
- else
- {
- /* if no object was found in the cache, create a new one */
- build = cache->clazz->init;
-
- if ( MEM_Alloc( object, cache->clazz->object_size ) )
- goto Memory_Fail;
-
- current = Element_New( cache->engine );
- if ( !current )
- goto Memory_Fail;
-
- current->data = object;
-
- error = build( object, parent_object );
- if ( error )
- {
- Element_Done( cache->engine, current );
- goto Fail;
- }
- }
-
- LOCK();
- current->next = cache->active;
- cache->active = current;
- UNLOCK();
-
- *new_object = current->data;
- return TT_Err_Ok;
-
- Exit:
- *new_object = NULL;
- return error;
-
- Memory_Fail:
- error = TT_Err_Out_Of_Memory;
-
- Fail:
- FREE( object );
- goto Exit;
- }
-
-
-/*******************************************************************
- *
- * Function : Cache_Done
- *
- * Description : Releases an object to the cache. This will either
- * recycle or destroy the object, based on the cache's
- * class and state.
- *
- * Input : cache the cache to use
- * data the object to recycle/discard
- *
- * Output : error code.
- *
- * Notes : The object's destructor is called only when
- * the objectwill be effectively destroyed by this
- * function. This will not happen during recycling.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Cache_Done( TCache* cache, void* data )
- {
- TT_Error error;
- PList_Element element;
- PList_Element prev;
- PFinalizer finalize;
- Long limit;
- Bool destroy;
-
-
- /* Look for object in active list */
- LOCK();
-
- element = cache->active;
- prev = NULL;
- while ( element )
- {
- if ( element->data == data )
- {
- if ( prev )
- prev->next = element->next;
- else
- cache->active = element->next;
- goto Suite;
- }
- prev = element;
- element = element->next;
- }
-
- UNLOCK();
- return TT_Err_Unlisted_Object;
-
- Suite:
-
- limit = cache->clazz->idle_limit;
- destroy = (cache->idle_count >= limit);
- UNLOCK();
-
- if ( destroy )
- {
- /* destroy the object when the cache is full */
- cache->clazz->done( element->data );
- FREE( element->data );
- Element_Done( cache->engine, element );
- }
- else
- {
- /* Finalize the object before adding it to the */
- /* idle list. Return the error if any is found. */
-
- finalize = cache->clazz->finalize;
- if ( finalize )
- {
- error = finalize( element->data );
- if ( error )
- goto Exit;
-
- /* Note: a failure at finalize time is a severe bug in */
- /* the engine, which is why we allow ourselves to */
- /* lose the object in this case. A finalizer should */
- /* have its own error codes to spot this kind of */
- /* problems easily. */
- }
-
- LOCK();
- element->next = cache->idle;
- cache->idle = element;
- cache->idle_count++;
- UNLOCK();
- }
-
- error = TT_Err_Ok;
-
- Exit:
- return error;
- }
-
-
- LOCAL_FUNC
- TT_Error TTCache_Init( PEngine_Instance engine )
- {
- /* Create list elements mutex */
- FREE_Elements = NULL;
- return TT_Err_Ok;
- }
-
-
- LOCAL_FUNC
- TT_Error TTCache_Done( PEngine_Instance engine )
- {
- /* We don't protect this function, as this is the end of the engine's */
- /* execution.. */
- PList_Element element, next;
-
-
- /* frees the recycled list elements */
- element = FREE_Elements;
- while ( element )
- {
- next = element->next;
- FREE( element );
- element = next;
- }
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttcache.h b/Build/source/libs/libttf/ttcache.h
deleted file mode 100644
index e6f17c3c6ef..00000000000
--- a/Build/source/libs/libttf/ttcache.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*******************************************************************
- *
- * ttcache.h 1.1
- *
- * Generic object cache
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 defines and implements object caches.
- *
- * An object class is a structure layout that encapsulate one
- * given type of data used by the FreeType engine. Each object
- * class is completely described by:
- *
- * - a 'root' or 'leading' structure containing the first
- * important fields of the class. The root structure is
- * always of fixed size.
- *
- * It is implemented as a simple C structure, and may
- * contain several pointers to sub-tables that can be
- * sized and allocated dynamically.
- *
- * Examples: TFace, TInstance, TGlyph & TExecution_Context
- * (defined in 'ttobjs.h')
- *
- * - we make a difference between 'child' pointers and 'peer'
- * pointers. A 'child' pointer points to a sub-table that is
- * owned by the object, while a 'peer' pointer points to any
- * other kind of data the object isn't responsible for.
- *
- * An object class is thus usually a 'tree' of 'child' tables.
- *
- * - each object class needs a constructor and a destructor.
- *
- * A constructor is a function which receives the address of
- * freshly allocated and zeroed object root structure and
- * 'builds' all the valid child data that must be associated
- * to the object before it becomes 'valid'.
- *
- * A destructor does the inverse job: given the address of
- * a valid object, it must discard all its child data and
- * zero its main fields (essentially the pointers and array
- * sizes found in the root fields).
- *
- *
- * Important notes:
- *
- * When the constructor fails to allocate an object, it must
- * return immediately with an error code, and not try to release
- * what it has previously allocated before the error. The cache
- * manager detects the error and calls the destructor on the
- * partial object, before returning the error to the caller (along
- * with a NULL pointer for the "new" object).
- *
- * The destructor must thus be able to deal with "partial objects",
- * i.e., objects where only part of the child tables are allocated,
- * and only release these ones. As the TT_Free() function accepts
- * a NULL parameter (and returns successfuly in this case), no check
- * is really necessary when using the macro 'FREE()'.
- *
- * Currently, there is no check in the cache manager to see if a
- * destructor fails (double error state!).
- *
- * This scheme is more compact and more maintanable than the one
- * where de-allocation code is duplicated in the constructor
- * _and_ the destructor.
- *
- *
- *
- * Changes between 1.1 and 1.0:
- *
- * - introduced the refreshed and finalizer class definition/implementation
- * - inserted an engine instance pointer in the cache structure
- *
- ******************************************************************/
-
-#ifndef TTCACHE_H
-#define TTCACHE_H
-
-#include "tttypes.h"
-#include "ttconfig.h"
-#include "ttmutex.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- typedef TT_Error TConstructor( void* object,
- void* parent );
-
- typedef TT_Error TDestructor ( void* object );
-
- typedef TConstructor TRefresher;
- typedef TDestructor TFinalizer;
-
- typedef TConstructor* PConstructor;
- typedef TDestructor* PDestructor;
- typedef TRefresher* PRefresher;
- typedef TFinalizer* PFinalizer;
-
-
- /* A Cache class record holds the data necessary to define */
- /* a cache kind. */
- struct TCache_Class_
- {
- ULong object_size;
- Long idle_limit;
- PConstructor init;
- PDestructor done;
- PRefresher reset;
- PFinalizer finalize;
- };
-
- typedef struct TCache_Class_ TCache_Class;
- typedef TCache_Class* PCache_Class;
-
-
-
- /* Simple list node record. A list element is said to be 'unlinked' */
- /* when it doesn't belong to any list. */
- struct TList_Element_;
-
- typedef struct TList_Element_ TList_Element;
- typedef TList_Element* PList_Element;
-
- struct TList_Element_
- {
- PList_Element next;
- void* data;
- };
-
-
- /* Simple singly-linked list record - LIFO style, no tail field */
- typedef PList_Element TSingle_List;
-
- struct TCache_
- {
- PEngine_Instance engine;
- PCache_Class clazz; /* 'class' is a reserved word in C++ */
- TMutex* lock;
- TSingle_List active;
- TSingle_List idle;
- Long idle_count;
- };
-
- typedef struct TCache_ TCache;
- typedef TCache* PCache;
-
- /* Returns a new list element, either fresh or recycled. */
- /* Note: the returned element is unlinked. */
-
- /* An object cache holds two lists tracking the active and */
- /* idle objects that are currently created and used by the */
- /* engine. It can also be 'protected' by a mutex. */
-
- /* Initializes a new cache, of class 'clazz', pointed by 'cache', */
- /* protected by the 'lock' mutex. Set 'lock' to NULL if the cache */
- /* doesn't need protection */
-
- LOCAL_DEF
- TT_Error Cache_Create( PEngine_Instance engine,
- PCache_Class clazz,
- TCache* cache,
- TMutex* lock );
-
- /* Destroys a cache and all its listed objects */
-
- LOCAL_DEF
- TT_Error Cache_Destroy( TCache* cache );
-
-
- /* Extracts a new object from the cache */
-
- LOCAL_DEF
- TT_Error Cache_New( TCache* cache,
- void** new_object,
- void* parent_object );
-
-
- /* Returns an object to the cache, or discards it depending */
- /* on the cache class' 'idle_limit' field */
-
- LOCAL_DEF
- TT_Error Cache_Done( TCache* cache, void* data );
-
-#define CACHE_New( _cache, _newobj, _parent ) \
- Cache_New( (TCache*)_cache, (void**)&_newobj, (void*)_parent )
-
-#define CACHE_Done( _cache, _obj ) \
- Cache_Done( (TCache*)_cache, (void*)_obj )
-
-
-
- LOCAL_DEF
- TT_Error TTCache_Init( PEngine_Instance engine );
-
- LOCAL_DEF
- TT_Error TTCache_Done( PEngine_Instance engine );
-
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTCACHE_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttcalc.c b/Build/source/libs/libttf/ttcalc.c
deleted file mode 100644
index 0733624279b..00000000000
--- a/Build/source/libs/libttf/ttcalc.c
+++ /dev/null
@@ -1,403 +0,0 @@
-/*******************************************************************
- *
- * ttcalc.c
- *
- * Arithmetic Computations (body).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttcalc.h"
-#include "ttdebug.h"
-#include "tttables.h"
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_calc
-
-
-/* Support for 1-complement arithmetic has been totally dropped in this */
-/* release. You can still write your own code if you need it... */
-
- static const Long Roots[63] =
- {
- 1, 1, 2, 3, 4, 5, 8, 11,
- 16, 22, 32, 45, 64, 90, 128, 181,
- 256, 362, 512, 724, 1024, 1448, 2048, 2896,
- 4096, 5892, 8192, 11585, 16384, 23170, 32768, 46340,
-
- 65536, 92681, 131072, 185363, 262144, 370727,
- 524288, 741455, 1048576, 1482910, 2097152, 2965820,
- 4194304, 5931641, 8388608, 11863283, 16777216, 23726566,
-
- 33554432, 47453132, 67108864, 94906265,
- 134217728, 189812531, 268435456, 379625062,
- 536870912, 759250125, 1073741824, 1518500250,
- 2147483647
- };
-
-
-#ifdef LONG64
-
- EXPORT_FUNC
- TT_Long TT_MulDiv( TT_Long a, TT_Long b, TT_Long c )
- {
- Long s;
-
-
- s = a; a = ABS( a );
- s ^= b; b = ABS( b );
- s ^= c; c = ABS( c );
-
- a = ((TT_Int64)a * b + c/2) / c;
- return ( s < 0 ) ? -a : a;
- }
-
-
- EXPORT_FUNC
- TT_Long TT_MulFix( TT_Long a, TT_Long b )
- {
- Long s;
-
-
- s = a; a = ABS( a );
- s ^= b; b = ABS( b );
-
- a = ((TT_Int64)a * b + 0x8000) / 0x10000;
- return ( s < 0 ) ? -a : a;
- }
-
-
- LOCAL_FUNC
- Int Order64( TT_Int64 z )
- {
- Int j = 0;
-
-
- while ( z )
- {
- z = (unsigned INT64)z >> 1;
- j++;
- }
- return j - 1;
- }
-
-
- LOCAL_FUNC
- TT_Int32 Sqrt64( TT_Int64 l )
- {
- TT_Int64 r, s;
-
-
- if ( l <= 0 ) return 0;
- if ( l == 1 ) return 1;
-
- r = Roots[Order64( l )];
-
- do
- {
- s = r;
- r = ( r + l/r ) >> 1;
- }
- while ( r > s || r*r > l );
-
- return r;
- }
-
-#else /* LONG64 */
-
-
- /* The TT_MulDiv function has been optimized thanks to ideas from */
- /* Graham Asher. The trick is to optimize computation when everything */
- /* fits within 32-bits (a rather common case). */
- /* */
- /* we compute 'a*b+c/2', then divide it by 'c'. (positive values) */
- /* */
- /* 46340 is FLOOR(SQRT(2^31-1)). */
- /* */
- /* if ( a <= 46340 && b <= 46340 ) then ( a*b <= 0x7FFEA810 ) */
- /* */
- /* 0x7FFFFFFF - 0x7FFEA810 = 0x157F0 */
- /* */
- /* if ( c < 0x157F0*2 ) then ( a*b+c/2 <= 0x7FFFFFFF ) */
- /* */
- /* and 2*0x157F0 = 176096 */
- /* */
-
- EXPORT_FUNC
- TT_Long TT_MulDiv( TT_Long a, TT_Long b, TT_Long c )
- {
- long s;
-
-
- if ( a == 0 || b == c )
- return a;
-
- s = a; a = ABS( a );
- s ^= b; b = ABS( b );
- s ^= c; c = ABS( c );
-
- if ( a <= 46340 && b <= 46340 && c <= 176095 )
- {
- a = ( a*b + c/2 )/c;
- }
- else
- {
- TT_Int64 temp, temp2;
-
- MulTo64( a, b, &temp );
- temp2.hi = (TT_Int32)(c >> 31);
- temp2.lo = (TT_Word32)(c / 2);
- Add64( &temp, &temp2, &temp );
- a = Div64by32( &temp, c );
- }
-
- return ( s < 0 ) ? -a : a;
- }
-
- /* The optimization for TT_MulFix is different. We could simply be */
- /* happy by applying the same principles than with TT_MulDiv, because */
- /* */
- /* c = 0x10000 < 176096 */
- /* */
- /* however, in most cases, we have a 'b' with a value around 0x10000 */
- /* which is greater than 46340. */
- /* */
- /* According to Graham's testing, most cases have 'a' < 100, so a good */
- /* idea is to use bounds like 1024 and 2097151 (= floor(2^31-1)/1024 ) */
- /* for 'a' and 'b' respectively.. */
- /* */
-
- EXPORT_FUNC
- TT_Long TT_MulFix( TT_Long a, TT_Long b )
- {
- long s;
-
- if ( a == 0 || b == 0x10000 )
- return a;
-
- s = a; a = ABS( a );
- s ^= b; b = ABS( b );
-
- if ( a <= 1024 && b <= 2097151 )
- {
- a = ( a*b + 0x8000 ) >> 16;
- }
- else
- {
- TT_Int64 temp, temp2;
-
- MulTo64( a, b, &temp );
- temp2.hi = 0;
- temp2.lo = 0x8000;
- Add64( &temp, &temp2, &temp );
- a = Div64by32( &temp, 0x10000 );
- }
-
- return ( s < 0 ) ? -a : a;
- }
-
-
- LOCAL_FUNC
- void Neg64( TT_Int64* x )
- {
- /* Remember that -(0x80000000) == 0x80000000 with 2-complement! */
- /* We take care of that here. */
-
- x->hi ^= 0xFFFFFFFFUL;
- x->lo ^= 0xFFFFFFFFUL;
- x->lo++;
-
- if ( !x->lo )
- {
- x->hi++;
- if ( x->hi == 0x80000000UL ) /* Check -MaxInt32 - 1 */
- {
- x->lo--;
- x->hi--; /* We return 0x7FFFFFFF! */
- }
- }
- }
-
-
- LOCAL_FUNC
- void Add64( TT_Int64* x, TT_Int64* y, TT_Int64* z )
- {
- register TT_Word32 lo, hi;
-
-
- lo = x->lo + y->lo;
- hi = x->hi + y->hi + ( lo < x->lo );
-
- z->lo = lo;
- z->hi = hi;
- }
-
-
- LOCAL_FUNC
- void Sub64( TT_Int64* x, TT_Int64* y, TT_Int64* z )
- {
- register TT_Word32 lo, hi;
-
-
- lo = x->lo - y->lo;
- hi = x->hi - y->hi - ( (TT_Int32)lo < 0 );
-
- z->lo = lo;
- z->hi = hi;
- }
-
-
- LOCAL_FUNC
- void MulTo64( TT_Int32 x, TT_Int32 y, TT_Int64* z )
- {
- TT_Int32 s;
- TT_Word32 lo1, hi1, lo2, hi2, lo, hi, i1, i2;
-
-
- s = x; x = ABS( x );
- s ^= y; y = ABS( y );
-
- lo1 = x & 0x0000FFFF; hi1 = x >> 16;
- lo2 = y & 0x0000FFFF; hi2 = y >> 16;
-
- lo = lo1*lo2;
- i1 = lo1*hi2;
- i2 = lo2*hi1;
- hi = hi1*hi2;
-
- /* Check carry overflow of i1 + i2 */
-
- if ( i2 )
- {
- if ( i1 >= (TT_Word32)-(TT_Int32)i2 ) hi += 1L << 16;
- i1 += i2;
- }
-
- i2 = i1 >> 16;
- i1 = i1 << 16;
-
- /* Check carry overflow of i1 + lo */
- if ( i1 )
- {
- if ( lo >= (TT_Word32)-(TT_Int32)i1 ) hi++;
- lo += i1;
- }
-
- hi += i2;
-
- z->lo = lo;
- z->hi = hi;
-
- if ( s < 0 ) Neg64( z );
- }
-
-
- LOCAL_FUNC
- TT_Int32 Div64by32( TT_Int64* x, TT_Int32 y )
- {
- TT_Int32 s;
- TT_Word32 q, r, i, lo;
-
-
- s = x->hi; if ( s < 0 ) Neg64( x );
- s ^= y; y = ABS( y );
-
- /* Shortcut */
- if ( x->hi == 0 )
- {
- q = x->lo / y;
- return ( s < 0 ) ? -(TT_Int32)q : (TT_Int32)q;
- }
-
- r = x->hi;
- lo = x->lo;
-
- if ( r >= (TT_Word32)y ) /* we know y is to be treated as unsigned here */
- return ( s < 0 ) ? 0x80000001UL : 0x7FFFFFFFUL;
- /* Return Max/Min Int32 if divide overflow */
- /* This includes division by zero! */
- q = 0;
- for ( i = 0; i < 32; i++ )
- {
- r <<= 1;
- q <<= 1;
- r |= lo >> 31;
-
- if ( r >= (TT_Word32)y )
- {
- r -= y;
- q |= 1;
- }
- lo <<= 1;
- }
-
- return ( s < 0 ) ? -(TT_Int32)q : (TT_Int32)q;
- }
-
-
- LOCAL_FUNC
- Int Order64( TT_Int64* z )
- {
- TT_Word32 i;
- Int j;
-
-
- if ( z->hi )
- {
- i = z->hi;
- j = 32;
- }
- else
- {
- i = z->lo;
- j = 0;
- }
-
- while ( i > 0 )
- {
- i >>= 1;
- j++;
- }
- return j-1;
- }
-
-
- LOCAL_FUNC
- TT_Int32 Sqrt64( TT_Int64* l )
- {
- TT_Int64 l2;
- TT_Int32 r, s;
-
-
- if ( (TT_Int32)l->hi < 0 ||
- (l->hi == 0 && l->lo == 0) ) return 0;
-
- s = Order64( l );
- if ( s == 0 ) return 1;
-
- r = Roots[s];
- do
- {
- s = r;
- r = ( r + Div64by32(l,r) ) >> 1;
- MulTo64( r, r, &l2 );
- Sub64 ( l, &l2, &l2 );
- }
- while ( r > s || (TT_Int32)l2.hi < 0 );
-
- return r;
- }
-
-#endif /* LONG64 */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttcalc.h b/Build/source/libs/libttf/ttcalc.h
deleted file mode 100644
index 9b4c306b0ed..00000000000
--- a/Build/source/libs/libttf/ttcalc.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************
- *
- * ttcalc.h
- *
- * Arithmetic Computations (specification).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 TTCALC_H
-#define TTCALC_H
-
-#include "ttconfig.h"
-#include "freetype.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#ifdef LONG64
-
- typedef INT64 TT_Int64;
-
-#define ADD_64( x, y, z ) z = x + y
-#define SUB_64( x, y, z ) z = x - y
-#define MUL_64( x, y, z ) z = (TT_Int64)(x) * (y)
-
-#define DIV_64( x, y ) ( (x) / (y) )
-
-#define SQRT_64( x ) Sqrt64( x )
-#define SQRT_32( x ) Sqrt32( x )
-
- LOCAL_DEF TT_Int32 Sqrt64( TT_Int64 l );
-
-#else /* LONG64 */
-
- struct TT_Int64_
- {
- TT_Word32 lo;
- TT_Word32 hi;
- };
-
- typedef struct TT_Int64_ TT_Int64;
-
-#define ADD_64( x, y, z ) Add64( &x, &y, &z )
-#define SUB_64( x, y, z ) Sub64( &x, &y, &z )
-#define MUL_64( x, y, z ) MulTo64( x, y, &z )
-
-#define DIV_64( x, y ) Div64by32( &x, y )
-
-#define SQRT_64( x ) Sqrt64( &x )
-#define SQRT_32( x ) Sqrt32( x )
-
- LOCAL_DEF void Add64( TT_Int64* x, TT_Int64* y, TT_Int64* z );
- LOCAL_DEF void Sub64( TT_Int64* x, TT_Int64* y, TT_Int64* z );
-
- LOCAL_DEF void MulTo64( TT_Int32 x, TT_Int32 y, TT_Int64* z );
-
- LOCAL_DEF TT_Int32 Div64by32( TT_Int64* x, TT_Int32 y );
-
- LOCAL_DEF int Order64( TT_Int64* z );
-
- LOCAL_DEF TT_Int32 Sqrt64( TT_Int64* l );
-
-#endif /* LONG64 */
-
- /* The two following functions are now part of the API! */
-
- /* TT_Long TT_MulDiv( TT_Long a, TT_Long b, TT_Long c ); */
- /* TT_Long TT_MulFix( TT_Long a, TT_Long b ); */
-
-
-#define INT_TO_F26DOT6( x ) ( (Long)(x) << 6 )
-#define INT_TO_F2DOT14( x ) ( (Long)(x) << 14 )
-#define INT_TO_FIXED( x ) ( (Long)(x) << 16 )
-#define F2DOT14_TO_FIXED( x ) ( (Long)(x) << 2 )
-#define FLOAT_TO_FIXED( x ) ( (Long)(x * 65536.0) )
-
-#define ROUND_F26DOT6( x ) ( x >= 0 ? ( ((x) + 32) & -64) \
- : ( -((32 - (x)) & -64) ) )
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTCALC_H */
-
-/* END */
diff --git a/Build/source/libs/libttf/ttcmap.c b/Build/source/libs/libttf/ttcmap.c
deleted file mode 100644
index 2dd58ece6d9..00000000000
--- a/Build/source/libs/libttf/ttcmap.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/*******************************************************************
- *
- * ttcmap.c 1.0
- *
- * TrueType Character Mappings
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttobjs.h"
-#include "ttdebug.h"
-#include "ttfile.h"
-#include "ttmemory.h"
-#include "ttload.h"
-#include "ttcmap.h"
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_cmap
-
-
-/*******************************************************************
- *
- * Function : CharMap_Load
- *
- * Description : Loads a given charmap into memory.
- *
- * Input : cmap pointer to cmap table
- *
- * Output : Error code.
- *
- * Notes : - Assumes the the stream is already used (opened).
- *
- * - In case of error, releases all partially allocated
- * tables.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error CharMap_Load( PCMapTable cmap,
- TT_Stream input )
- {
- DEFINE_LOAD_LOCALS( input );
-
- UShort num_SH, num_Seg, i;
-
- UShort u, l;
-
- PCMap0 cmap0;
- PCMap2 cmap2;
- PCMap4 cmap4;
- PCMap6 cmap6;
-
- PCMap2SubHeader cmap2sub;
- PCMap4Segment segments;
-
-
- if ( cmap->loaded )
- return TT_Err_Ok;
-
- if ( FILE_Seek( cmap->offset ) )
- return error;
-
- switch ( cmap->format )
- {
- case 0:
- cmap0 = &cmap->c.cmap0;
-
- if ( ALLOC( cmap0->glyphIdArray, 256L ) ||
- FILE_Read( (void*)cmap0->glyphIdArray, 256L ) )
- goto Fail;
-
- break;
-
- case 2:
- num_SH = 0;
- cmap2 = &cmap->c.cmap2;
-
- /* allocate subheader keys */
-
- if ( ALLOC_ARRAY( cmap2->subHeaderKeys, 256, UShort ) ||
- ACCESS_Frame( 512L ) )
- goto Fail;
-
- for ( i = 0; i < 256; i++ )
- {
- u = GET_UShort() / 8;
- cmap2->subHeaderKeys[i] = u;
-
- if ( num_SH < u )
- num_SH = u;
- }
-
- FORGET_Frame();
-
- /* load subheaders */
-
- cmap2->numGlyphId = l =
- ( ( cmap->length - 2L * (256 + 3) - num_SH * 8L ) & 0xffff) / 2;
-
- if ( ALLOC_ARRAY( cmap2->subHeaders,
- num_SH + 1,
- TCMap2SubHeader ) ||
- ACCESS_Frame( ( num_SH + 1 ) * 8L ) )
- goto Fail;
-
- cmap2sub = cmap2->subHeaders;
-
- for ( i = 0; i <= num_SH; i++ )
- {
- cmap2sub->firstCode = GET_UShort();
- cmap2sub->entryCount = GET_UShort();
- cmap2sub->idDelta = GET_Short();
- /* we apply the location offset immediately */
- cmap2sub->idRangeOffset = GET_UShort() - ( num_SH - i ) * 8 - 2;
-
- cmap2sub++;
- }
-
- FORGET_Frame();
-
- /* load glyph ids */
-
- if ( ALLOC_ARRAY( cmap2->glyphIdArray, l, UShort ) ||
- ACCESS_Frame( l * 2L ) )
- goto Fail;
-
- for ( i = 0; i < l; i++ )
- cmap2->glyphIdArray[i] = GET_UShort();
-
- FORGET_Frame();
- break;
-
- case 4:
- cmap4 = &cmap->c.cmap4;
-
- /* load header */
-
- if ( ACCESS_Frame( 8L ) )
- goto Fail;
-
- cmap4->segCountX2 = GET_UShort();
- cmap4->searchRange = GET_UShort();
- cmap4->entrySelector = GET_UShort();
- cmap4->rangeShift = GET_UShort();
-
- num_Seg = cmap4->segCountX2 / 2;
-
- FORGET_Frame();
-
- /* load segments */
-
- if ( ALLOC_ARRAY( cmap4->segments,
- num_Seg,
- TCMap4Segment ) ||
- ACCESS_Frame( (num_Seg * 4 + 1) * 2L ) )
- goto Fail;
-
- segments = cmap4->segments;
-
- for ( i = 0; i < num_Seg; i++ )
- segments[i].endCount = GET_UShort();
-
- (void)GET_UShort();
-
- for ( i = 0; i < num_Seg; i++ )
- segments[i].startCount = GET_UShort();
-
- for ( i = 0; i < num_Seg; i++ )
- segments[i].idDelta = GET_Short();
-
- for ( i = 0; i < num_Seg; i++ )
- segments[i].idRangeOffset = GET_UShort();
-
- FORGET_Frame();
-
- cmap4->numGlyphId = l =
- ( ( cmap->length - ( 16L + 8L * num_Seg ) ) & 0xffff ) / 2;
-
- /* load ids */
-
- if ( ALLOC_ARRAY( cmap4->glyphIdArray, l , UShort ) ||
- ACCESS_Frame( l * 2L ) )
- goto Fail;
-
- for ( i = 0; i < l; i++ )
- cmap4->glyphIdArray[i] = GET_UShort();
-
- FORGET_Frame();
- break;
-
- case 6:
- cmap6 = &cmap->c.cmap6;
-
- if ( ACCESS_Frame( 4L ) )
- goto Fail;
-
- cmap6->firstCode = GET_UShort();
- cmap6->entryCount = GET_UShort();
-
- FORGET_Frame();
-
- l = cmap6->entryCount;
-
- if ( ALLOC_ARRAY( cmap6->glyphIdArray,
- cmap6->entryCount,
- Short ) ||
- ACCESS_Frame( l * 2L ) )
- goto Fail;
-
- for ( i = 0; i < l; i++ )
- cmap6->glyphIdArray[i] = GET_UShort();
-
- FORGET_Frame();
- break;
-
- default: /* corrupt character mapping table */
- return TT_Err_Invalid_CharMap_Format;
-
- }
- return TT_Err_Ok;
-
- Fail:
- CharMap_Free( cmap );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : CharMap_Free
- *
- * Description : Releases a given charmap table.
- *
- * Input : cmap pointer to cmap table
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error CharMap_Free( PCMapTable cmap )
- {
- if ( !cmap )
- return TT_Err_Ok;
-
- switch ( cmap->format )
- {
- case 0:
- FREE( cmap->c.cmap0.glyphIdArray );
- break;
-
- case 2:
- FREE( cmap->c.cmap2.subHeaderKeys );
- FREE( cmap->c.cmap2.subHeaders );
- FREE( cmap->c.cmap2.glyphIdArray );
- break;
-
- case 4:
- FREE( cmap->c.cmap4.segments );
- FREE( cmap->c.cmap4.glyphIdArray );
- cmap->c.cmap4.segCountX2 = 0;
- break;
-
- case 6:
- FREE( cmap->c.cmap6.glyphIdArray );
- cmap->c.cmap6.entryCount = 0;
- break;
-
- default:
- /* invalid table format, do nothing */
- ;
- }
-
- cmap->loaded = FALSE;
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : CharMap_Index
- *
- * Description : Performs charcode->glyph index translation.
- *
- * Input : cmap pointer to cmap table
- *
- * Output : Glyph index, 0 in case of failure.
- *
- ******************************************************************/
-
- static UShort code_to_index0( ULong charCode, PCMap0 cmap0 );
- static UShort code_to_index2( ULong charCode, PCMap2 cmap2 );
- static UShort code_to_index4( ULong charCode, PCMap4 cmap4 );
- static UShort code_to_index6( ULong charCode, PCMap6 cmap6 );
-
-
- LOCAL_FUNC
- UShort CharMap_Index( PCMapTable cmap,
- ULong charcode )
- {
- switch ( cmap->format )
- {
- case 0:
- return code_to_index0( charcode, &cmap->c.cmap0 );
- case 2:
- return code_to_index2( charcode, &cmap->c.cmap2 );
- case 4:
- return code_to_index4( charcode, &cmap->c.cmap4 );
- case 6:
- return code_to_index6( charcode, &cmap->c.cmap6 );
- default:
- return 0;
- }
- }
-
-
-/*******************************************************************
- *
- * Function : code_to_index0
- *
- * Description : Converts the character code into a glyph index.
- * Uses format 0.
- * charCode will be masked to get a value in the range
- * 0x00-0xFF.
- *
- * Input : charCode the wanted character code
- * cmap0 a pointer to a cmap table in format 0
- *
- * Output : Glyph index into the glyphs array.
- * 0 if the glyph does not exist.
- *
- ******************************************************************/
-
- static UShort code_to_index0( ULong charCode,
- PCMap0 cmap0 )
- {
- if ( charCode <= 0xFF )
- return cmap0->glyphIdArray[charCode];
- else
- return 0;
- }
-
-
-/*******************************************************************
- *
- * Function : code_to_index2
- *
- * Description : Converts the character code into a glyph index.
- * Uses format 2.
- *
- * Input : charCode the wanted character code
- * cmap2 a pointer to a cmap table in format 2
- *
- * Output : Glyph index into the glyphs array.
- * 0 if the glyph does not exist.
- *
- ******************************************************************/
-
- static UShort code_to_index2( ULong charCode,
- PCMap2 cmap2 )
- {
- UShort index1, idx, offset;
- TCMap2SubHeader sh2;
-
-
- index1 = cmap2->subHeaderKeys[charCode <= 0xFF ?
- charCode : (charCode >> 8)];
-
- if ( index1 == 0 )
- {
- if ( charCode <= 0xFF )
- return cmap2->glyphIdArray[charCode]; /* 8bit character code */
- else
- return 0;
- }
- else /* 16bit character code */
- {
- if ( charCode <= 0xFF )
- return 0;
-
- sh2 = cmap2->subHeaders[index1];
-
- if ( (charCode & 0xFF) < sh2.firstCode )
- return 0;
-
- if ( (charCode & 0xFF) >= (sh2.firstCode + sh2.entryCount) )
- return 0;
-
- offset = sh2.idRangeOffset / 2 + (charCode & 0xFF) - sh2.firstCode;
- if ( offset < cmap2->numGlyphId )
- idx = cmap2->glyphIdArray[offset];
- else
- return 0;
-
- if ( idx )
- return (idx + sh2.idDelta) & 0xFFFF;
- else
- return 0;
- }
- }
-
-
-/*******************************************************************
- *
- * Function : code_to_index4
- *
- * Description : Converts the character code into a glyph index.
- * Uses format 4.
- *
- * Input : charCode the wanted character code
- * cmap4 a pointer to a cmap table in format 4
- *
- * Output : Glyph index into the glyphs array.
- * 0 if the glyph does not exist.
- *
- ******************************************************************/
-
- static UShort code_to_index4( ULong charCode,
- PCMap4 cmap4 )
- {
- UShort index1, segCount;
- UShort i;
- TCMap4Segment seg4;
-
-
- segCount = cmap4->segCountX2 / 2;
-
- for ( i = 0; i < segCount; i++ )
- if ( charCode <= cmap4->segments[i].endCount )
- break;
-
- /* Safety check - even though the last endCount should be 0xFFFF */
- if ( i >= segCount )
- return 0;
-
- seg4 = cmap4->segments[i];
-
- if ( charCode < seg4.startCount )
- return 0;
-
- if ( seg4.idRangeOffset == 0 )
- return ( charCode + seg4.idDelta ) & 0xFFFF;
- else
- {
- index1 = seg4.idRangeOffset / 2 + (charCode - seg4.startCount) -
- (segCount - i);
-
- if ( index1 < cmap4->numGlyphId )
- {
- if ( cmap4->glyphIdArray[index1] == 0 )
- return 0;
- else
- return ( cmap4->glyphIdArray[index1] + seg4.idDelta ) & 0xFFFF;
- }
- else
- return 0;
- }
- }
-
-
-/*******************************************************************
- *
- * Function : code_to_index6
- *
- * Description : Converts the character code into a glyph index.
- * Uses format 6.
- *
- * Input : charCode the wanted character code
- * cmap6 a pointer to a cmap table in format 6
- *
- * Output : Glyph index into the glyphs array.
- * 0 if the glyph does not exist (`missing character glyph').
- *
- ******************************************************************/
-
- static UShort code_to_index6( ULong charCode,
- PCMap6 cmap6 )
- {
- UShort firstCode;
-
-
- firstCode = cmap6->firstCode;
-
- if ( charCode < firstCode )
- return 0;
-
- if ( charCode >= (firstCode + cmap6->entryCount) )
- return 0;
-
- return cmap6->glyphIdArray[charCode - firstCode];
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttcmap.h b/Build/source/libs/libttf/ttcmap.h
deleted file mode 100644
index f6be5f108e4..00000000000
--- a/Build/source/libs/libttf/ttcmap.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*******************************************************************
- *
- * ttcmap.h 1.0
- *
- * TrueType Character Mappings
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttconfig.h"
-#include "tttypes.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- /* format 0 */
-
- struct TCMap0_
- {
- PByte glyphIdArray;
- };
-
- typedef struct TCMap0_ TCMap0;
- typedef TCMap0* PCMap0;
-
-
- /* format 2 */
-
- struct TCMap2SubHeader_
- {
- UShort firstCode; /* first valid low byte */
- UShort entryCount; /* number of valid low bytes */
- Short idDelta; /* delta value to glyphIndex */
- UShort idRangeOffset; /* offset from here to 1st code */
- };
-
- typedef struct TCMap2SubHeader_ TCMap2SubHeader;
- typedef TCMap2SubHeader* PCMap2SubHeader;
-
- struct TCMap2_
- {
- PUShort subHeaderKeys;
- /* high byte mapping table */
- /* value = subHeader index * 8 */
-
- PCMap2SubHeader subHeaders;
- PUShort glyphIdArray;
- UShort numGlyphId; /* control value */
- };
-
- typedef struct TCMap2_ TCMap2;
- typedef TCMap2* PCMap2;
-
-
- /* format 4 */
-
- struct TCMap4Segment_
- {
- UShort endCount;
- UShort startCount;
- Short idDelta; /* in the specs defined as UShort but the
- example there gives negative values... */
- UShort idRangeOffset;
- };
-
- typedef struct TCMap4Segment_ TCMap4Segment;
- typedef TCMap4Segment* PCMap4Segment;
-
- struct TCMap4_
- {
- UShort segCountX2; /* number of segments * 2 */
- UShort searchRange; /* these parameters can be used */
- UShort entrySelector; /* for a binary search */
- UShort rangeShift;
-
- PCMap4Segment segments;
- PUShort glyphIdArray;
- UShort numGlyphId; /* control value */
- };
-
- typedef struct TCMap4_ TCMap4;
- typedef TCMap4* PCMap4;
-
-
- /* format 6 */
-
- struct TCMap6_
- {
- UShort firstCode; /* first character code of subrange */
- UShort entryCount; /* number of character codes in subrange */
-
- PUShort glyphIdArray;
- };
-
- typedef struct TCMap6_ TCMap6;
- typedef TCMap6* PCMap6;
-
-
- /* charmap table */
-
- struct TCMapTable_
- {
- UShort platformID;
- UShort platformEncodingID;
- UShort format;
- UShort length;
- UShort version;
-
- Bool loaded;
- ULong offset;
-
- union
- {
- TCMap0 cmap0;
- TCMap2 cmap2;
- TCMap4 cmap4;
- TCMap6 cmap6;
- } c;
- };
-
- typedef struct TCMapTable_ TCMapTable;
- typedef TCMapTable* PCMapTable;
-
-
-
- /* Load character mappings directory when face is loaded. */
- /* The mappings themselves are only loaded on demand. */
-
- LOCAL_DEF
- TT_Error CharMap_Load( PCMapTable table,
- TT_Stream input );
-
-
- /* Destroy one character mapping table */
-
- LOCAL_DEF
- TT_Error CharMap_Free( PCMapTable table );
-
-
- /* Use character mapping table to perform mapping */
-
- LOCAL_DEF
- UShort CharMap_Index( PCMapTable cmap,
- ULong charCode );
-
- /* NOTE: The PFace type isn't defined at this point */
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTCMAP_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttconfig.h b/Build/source/libs/libttf/ttconfig.h
deleted file mode 100644
index 258b957e51c..00000000000
--- a/Build/source/libs/libttf/ttconfig.h
+++ /dev/null
@@ -1,298 +0,0 @@
-/*******************************************************************
- *
- * ttconfig.h 1.0
- *
- * Configuration settings header file (spec only).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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:
- *
- * All the configuration #define statements have been gathered in
- * this file to allow easy check and modification.
- *
- ******************************************************************/
-
-#ifndef TTCONFIG_H
-#define TTCONFIG_H
-
-
-
-/* ------------ auto configuration ------------------------------------- */
-
-
-/*************************************************************************/
-/* Here we include the file ft_conf.h for system dependent stuff. */
-/* The specific makefile is responsible for providing the right path to */
-/* this file. */
-
-#include "ft_conf.h"
-
-
-/**************************************************************************/
-/* Define TT_CONFIG_THREAD_SAFE if you want to build a thread-safe */
-/* version of the library. */
-
-/* #define TT_CONFIG_OPTION_THREAD_SAFE */
-
-
-
-/* ------------ general debugging -------------------------------------- */
-
-
-/*************************************************************************
- *
- * 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). Define
- * DEBUG_LEVEL_TRACE to enable this mode.
- *
- * - error mode:
- *
- * Only error messages are generated. Define
- * DEBUG_LEVEL_ERROR to enable this mode.
- *
- * - release mode:
- *
- * Error messages are neither sent nor generated. The code is
- * free from any debugging parts.
- *
- *
- * Note that you should link the engine with the 'ttdebug' component.
- * in case either DEBUG_LEVEL_TRACE or DEBUG_LEVEL_ERROR is defined.
- *
- * Please consult ttdebug.h for more details. */
-
-/* #define DEBUG_LEVEL_TRACE */
-/* #define DEBUG_LEVEL_ERROR */
-
-
-
-/* ------------ special debugging -------------------------------------- */
-
-
-/*************************************************************************/
-/* Define this if you want to generate a special debug version of the */
-/* rasterizer. This will progressively draw the glyphs while the */
-/* computations are done directly on the graphics screen... (with */
-/* inverted glyphs). */
-/* */
-/* Use it at your own risk! It is not maintained currently. */
-/* */
-/* IMPORTANT: This is reserved to developers willing to debug the */
-/* rasterizer, which seems working very well in its */
-/* current state... */
-
-/* #define DEBUG_RASTER */
-
-
-/*************************************************************************/
-/* Define this to have a simple debugger version of RunIns(). */
-/* */
-/* Use it at your own risk! It is not maintained currently. */
-
-/* #define DEBUG_INTERPRETER */
-
-
-/*************************************************************************/
-/* Define this to have some housekeeping of allocation and deallocation. */
-/* */
-/* Please note that probably not all OS-specific versions of ttmemory.c */
-/* provide this functionality. */
-
-/* #define DEBUG_MEMORY */
-
-
-/*************************************************************************/
-/* Define this to have bounds checking for file buffer frames. */
-/* */
-/* Please note that probably not all OS-specific versions of ttfile.c */
-/* provide this functionality. */
-
-/* #define DEBUG_FILE */
-
-
-
-/* ------------ arithmetic and processor support ----------------------- */
-
-
-/*************************************************************************/
-/* Define TT_USE_LONG_LONG if you want to enable the use of the */
-/* 'long long' 64-bit type provided by gcc and other compilers. Note */
-/* that : */
-/* */
-/* 1. The type isn't ANSI, and thus will produce many warnings */
-/* during library compilation. */
-/* */
-/* 2. Though the generated object files are slightly smaller, the */
-/* resulting executables are bigger of about 4Kb! gcc must be */
-/* linking some extra code in there! */
-/* */
-/* 3. There is really no speed gain in doing so (but it may help */
-/* debug the ttcalc component). */
-/* */
-/* IMPORTANT NOTE: You don't need to define it on 64-bits machines! */
-/* */
-/* NOTE 2 : This flag used to be _GNUC_LONG64_ */
-
-/* #define TT_USE_LONG_LONG */
-
-
-/*************************************************************************/
-/* define ALIGNMENT to your processor/environment preferred alignment */
-/* size. A value of 8 should work on all current processors, even */
-/* 64-bits ones. */
-
-#define ALIGNMENT 8
-
-
-
-/* --------------- miscellaneous ----------------------------------- */
-
-
-/*********************************************************************/
-/* The number of extensions available. Don't change this value */
-/* except if you add new extensions to the engine. */
-
-#define TT_MAX_EXTENSIONS 8
-
-
-
-/* --------------- automatic setup -- don't touch ------------------ */
-
-
-/*********************************************************************/
-/* If HAVE_TT_TEXT is defined we don't provide a default typedef for */
-/* defining TT_Text. */
-
-#ifndef HAVE_TT_TEXT
-#define HAVE_TT_TEXT
- typedef char TT_Text;
-#endif
-
-
-/*********************************************************************/
-/* We define NULL in case it's not defined yet. The default */
-/* location is stdlib.h. */
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-
-/*********************************************************************/
-/* Some systems can't use vfprintf for error messages on stderr; if */
-/* HAVE_PRINT_FUNCTION is defined, the Print macro must be supplied */
-/* externally (having the same parameters). */
-/* */
-/* This is only used by the "ttdebug" component, which should be */
-/* linked to the engine only in debug mode. */
-
-#if defined( DEBUG_LEVEL_TRACE ) || defined( DEBUG_LEVEL_ERROR )
-#ifndef HAVE_PRINT_FUNCTION
-#define Print( format, ap ) vfprintf( stderr, (format), (ap) )
-#endif
-#endif
-
-
-/********************************************************************/
-/* */
-/* I have added the ability to compile the library into a single */
-/* object file. This gets rids of all the external symbols defined */
-/* in each component interface, and de-pollutes the name-space. */
-/* */
-/* I use two macros, namely LOCAL_FUNC and LOCAL_DEF, which only */
-/* apply to functions that are internal to the engine, and */
-/* should never be seen or linked by a client application. */
-/* */
-/* LOCAL_DEF used in header (.h) files, to define a function */
-/* that will be seen by other components. This */
-/* translates to "extern" in normal mode, and to */
-/* "static" in single-object mode. */
-/* */
-/* LOCAL_FUNC used in implementation (.c) files, just before */
-/* the function body. This translates to nothing */
-/* in normal mode, and to "static" in single-object */
-/* mode. */
-/* */
-/* Getting rid of un-necessary symbols makes the "ttcommon" */
-/* renaming macros hack unnecessary. Moreover, the stripped */
-/* single object file (freetype.o) is 52 Kb, instead of the */
-/* previous 57 Kb (size of all combined .o files), and gives */
-/* a better idea of the engine's real code size. */
-/* */
-/* It is called a "MAKE_OPTION" because the macro must be */
-/* defined in the Makefile, rather than this one. It allows */
-/* any developer to quickly switch from one mode to the other */
-/* without messing with "ttconfig.h" each time. */
-/* */
-#ifndef TT_MAKE_OPTION_SINGLE_OBJECT
-#define LOCAL_FUNC /* void */
-#define LOCAL_DEF extern
-#else
-#define LOCAL_FUNC static
-#define LOCAL_DEF static
-#endif
-
-
-/*************************************************************************/
-/* Define EXPORT_DEF and EXPORT_FUNC as needed to build e.g. a DLL. All */
-/* variables and functions visible from outside have these prefixes. */
-
-#ifdef TTF_DLL
-# ifdef MAKE_TTF_DLL
-# ifndef EXPORT_DEF
-# define EXPORT_DEF __declspec(dllexport)
-# endif
-
-# ifndef EXPORT_FUNC
-# define EXPORT_FUNC __declspec(dllexport)
-# endif
-# else /* ! MAKE_TTF_DLL */
-# ifndef EXPORT_DEF
-# define EXPORT_DEF __declspec(dllimport)
-# endif
-
-# ifndef EXPORT_FUNC
-# define EXPORT_FUNC __declspec(dllimport)
-# endif
-# endif /* MAKE_TTF_DLL */
-#else /* ! TTF_DLL */
-# ifndef EXPORT_DEF
-# define EXPORT_DEF extern
-# endif
-
-# ifndef EXPORT_FUNC
-# define EXPORT_FUNC /* void */
-# endif
-#endif /* TTF_DLL */
-
-
-/* -------------- internal (developer) configuration toggles ------------ */
-
-
-#undef TT_STATIC_INTERPRETER
-/* Do not undefine this configuration macro. It is now a default that */
-/* must be kept in all release builds. */
-
-
-#undef TT_STATIC_RASTER
-/* Define this if you want to generate a static raster. This makes */
-/* a non re-entrant version of the scan-line converter, which is */
-/* about 10% faster and 50% bigger than an indirect one! */
-
-
-#endif /* TTCONFIG_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttdebug.c b/Build/source/libs/libttf/ttdebug.c
deleted file mode 100644
index 4afe2dcc5ba..00000000000
--- a/Build/source/libs/libttf/ttdebug.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/* Simple debugging component. Temporary */
-
-#include "ttdebug.h"
-#include "tttables.h"
-#include "ttobjs.h"
-
-
-#ifdef DEBUG_LEVEL_TRACE
- char tt_trace_levels[trace_max];
-#endif
-
-#if defined( DEBUG_LEVEL_ERROR ) || defined( DEBUG_LEVEL_TRACE )
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-
-
- static String tempStr[128];
-
- static const String* OpStr[256] =
- {
- "SVTCA y", /* Set vectors to coordinate axis y */
- "SVTCA x", /* Set vectors to coordinate axis x */
- "SPvTCA y", /* Set Proj. vec. to coord. axis y */
- "SPvTCA x", /* Set Proj. vec. to coord. axis x */
- "SFvTCA y", /* Set Free. vec. to coord. axis y */
- "SFvTCA x", /* Set Free. vec. to coord. axis x */
- "SPvTL //", /* Set Proj. vec. parallel to segment */
- "SPvTL +", /* Set Proj. vec. normal to segment */
- "SFvTL //", /* Set Free. vec. parallel to segment */
- "SFvTL +", /* Set Free. vec. normal to segment */
- "SPvFS", /* Set Proj. vec. from stack */
- "SFvFS", /* Set Free. vec. from stack */
- "GPV", /* Get projection vector */
- "GFV", /* Get freedom vector */
- "SFvTPv", /* Set free. vec. to proj. vec. */
- "ISECT", /* compute intersection */
-
- "SRP0", /* Set reference point 0 */
- "SRP1", /* Set reference point 1 */
- "SRP2", /* Set reference point 2 */
- "SZP0", /* Set Zone Pointer 0 */
- "SZP1", /* Set Zone Pointer 1 */
- "SZP2", /* Set Zone Pointer 2 */
- "SZPS", /* Set all zone pointers */
- "SLOOP", /* Set loop counter */
- "RTG", /* Round to Grid */
- "RTHG", /* Round to Half-Grid */
- "SMD", /* Set Minimum Distance */
- "ELSE", /* Else */
- "JMPR", /* Jump Relative */
- "SCvTCi", /* Set CVT */
- "SSwCi", /* */
- "SSW", /* */
-
- "DUP",
- "POP",
- "CLEAR",
- "SWAP",
- "DEPTH",
- "CINDEX",
- "MINDEX",
- "AlignPTS",
- "INS_$28",
- "UTP",
- "LOOPCALL",
- "CALL",
- "FDEF",
- "ENDF",
- "MDAP[-]",
- "MDAP[r]",
-
- "IUP[y]",
- "IUP[x]",
- "SHP[0]",
- "SHP[1]",
- "SHC[0]",
- "SHC[1]",
- "SHZ[0]",
- "SHZ[1]",
- "SHPIX",
- "IP",
- "MSIRP[0]",
- "MSIRP[1]",
- "AlignRP",
- "RTDG",
- "MIAP[-]",
- "MIAP[r]",
-
- "NPushB",
- "NPushW",
- "WS",
- "RS",
- "WCvtP",
- "RCvt",
- "GC[0]",
- "GC[1]",
- "SCFS",
- "MD[0]",
- "MD[1]",
- "MPPEM",
- "MPS",
- "FlipON",
- "FlipOFF",
- "DEBUG",
-
- "LT",
- "LTEQ",
- "GT",
- "GTEQ",
- "EQ",
- "NEQ",
- "ODD",
- "EVEN",
- "IF",
- "EIF",
- "AND",
- "OR",
- "NOT",
- "DeltaP1",
- "SDB",
- "SDS",
-
- "ADD",
- "SUB",
- "DIV",
- "MUL",
- "ABS",
- "NEG",
- "FLOOR",
- "CEILING",
- "ROUND[G]",
- "ROUND[B]",
- "ROUND[W]",
- "ROUND[?]",
- "NROUND[G]",
- "NROUND[B]",
- "NROUND[W]",
- "NROUND[?]",
-
- "WCvtF",
- "DeltaP2",
- "DeltaP3",
- "DeltaC1",
- "DeltaC2",
- "DeltaC3",
- "SROUND",
- "S45Round",
- "JROT",
- "JROF",
- "ROFF",
- "INS_$7B",
- "RUTG",
- "RDTG",
- "SANGW",
- "AA",
-
- "FlipPT",
- "FlipRgON",
- "FlipRgOFF",
- "INS_$83",
- "INS_$84",
- "ScanCTRL",
- "SDPVTL[0]",
- "SDPVTL[1]",
- "GetINFO",
- "IDEF",
- "ROLL",
- "MAX",
- "MIN",
- "ScanTYPE",
- "IntCTRL",
- "INS_$8F",
-
- "INS_$90",
- "INS_$91",
- "INS_$92",
- "INS_$93",
- "INS_$94",
- "INS_$95",
- "INS_$96",
- "INS_$97",
- "INS_$98",
- "INS_$99",
- "INS_$9A",
- "INS_$9B",
- "INS_$9C",
- "INS_$9D",
- "INS_$9E",
- "INS_$9F",
-
- "INS_$A0",
- "INS_$A1",
- "INS_$A2",
- "INS_$A3",
- "INS_$A4",
- "INS_$A5",
- "INS_$A6",
- "INS_$A7",
- "INS_$A8",
- "INS_$A9",
- "INS_$AA",
- "INS_$AB",
- "INS_$AC",
- "INS_$AD",
- "INS_$AE",
- "INS_$AF",
-
- "PushB[0]",
- "PushB[1]",
- "PushB[2]",
- "PushB[3]",
- "PushB[4]",
- "PushB[5]",
- "PushB[6]",
- "PushB[7]",
- "PushW[0]",
- "PushW[1]",
- "PushW[2]",
- "PushW[3]",
- "PushW[4]",
- "PushW[5]",
- "PushW[6]",
- "PushW[7]",
-
- "MDRP[G]",
- "MDRP[B]",
- "MDRP[W]",
- "MDRP[?]",
- "MDRP[rG]",
- "MDRP[rB]",
- "MDRP[rW]",
- "MDRP[r?]",
- "MDRP[mG]",
- "MDRP[mB]",
- "MDRP[mW]",
- "MDRP[m?]",
- "MDRP[mrG]",
- "MDRP[mrB]",
- "MDRP[mrW]",
- "MDRP[mr?]",
- "MDRP[pG]",
- "MDRP[pB]",
-
- "MDRP[pW]",
- "MDRP[p?]",
- "MDRP[prG]",
- "MDRP[prB]",
- "MDRP[prW]",
- "MDRP[pr?]",
- "MDRP[pmG]",
- "MDRP[pmB]",
- "MDRP[pmW]",
- "MDRP[pm?]",
- "MDRP[pmrG]",
- "MDRP[pmrB]",
- "MDRP[pmrW]",
- "MDRP[pmr?]",
-
- "MIRP[G]",
- "MIRP[B]",
- "MIRP[W]",
- "MIRP[?]",
- "MIRP[rG]",
- "MIRP[rB]",
- "MIRP[rW]",
- "MIRP[r?]",
- "MIRP[mG]",
- "MIRP[mB]",
- "MIRP[mW]",
- "MIRP[m?]",
- "MIRP[mrG]",
- "MIRP[mrB]",
- "MIRP[mrW]",
- "MIRP[mr?]",
- "MIRP[pG]",
- "MIRP[pB]",
-
- "MIRP[pW]",
- "MIRP[p?]",
- "MIRP[prG]",
- "MIRP[prB]",
- "MIRP[prW]",
- "MIRP[pr?]",
- "MIRP[pmG]",
- "MIRP[pmB]",
- "MIRP[pmW]",
- "MIRP[pm?]",
- "MIRP[pmrG]",
- "MIRP[pmrB]",
- "MIRP[pmrW]",
- "MIRP[pmr?]"
- };
-
-
- const String* Cur_U_Line( void* _exec )
- {
- String s[32];
-
- Int op, i, n;
-
- PExecution_Context exec;
-
-
- exec = _exec;
-
- op = exec->code[exec->IP];
-
- sprintf( tempStr, "%s", OpStr[op] );
-
- if ( op == 0x40 )
- {
- n = exec->code[exec->IP + 1];
- sprintf( s, "(%d)", n );
- strncat( tempStr, s, 8 );
-
- if ( n > 20 ) n = 20; /* limit output */
-
- for ( i = 0; i < n; i++ )
- {
- sprintf( s, " $%02hx", exec->code[exec->IP + i + 2] );
- strncat( tempStr, s, 8 );
- }
- }
- else if ( op == 0x41 )
- {
- n = exec->code[exec->IP + 1];
- sprintf( s, "(%d)", n );
- strncat( tempStr, s, 8 );
-
- if ( n > 20 ) n = 20; /* limit output */
-
- for ( i = 0; i < n; i++ )
- {
- sprintf( s, " $%02hx%02hx", exec->code[exec->IP + i*2 + 2],
- exec->code[exec->IP + i*2 + 3] );
- strncat( tempStr, s, 8 );
- }
- }
- else if ( (op & 0xF8) == 0xB0 )
- {
- n = op - 0xB0;
-
- for ( i = 0; i <= n; i++ )
- {
- sprintf( s, " $%02hx", exec->code[exec->IP + i + 1] );
- strncat( tempStr, s, 8 );
- }
- }
- else if ( (op & 0xF8) == 0xB8 )
- {
- n = op-0xB8;
-
- for ( i = 0; i <= n; i++ )
- {
- sprintf( s, " $%02hx%02hx", exec->code[exec->IP + i*2 + 1],
- exec->code[exec->IP + i*2 + 2] );
- strncat( tempStr, s, 8 );
- }
- }
-
- return (String*)tempStr;
- }
-
-
- /* the Print() function is defined in ttconfig.h; */
- /* it defaults to vprintf on systems which have it */
-
- void TT_Message( const String* fmt, ... )
- {
- va_list ap;
-
- va_start( ap, fmt );
- Print( fmt, ap );
- va_end( ap );
- }
-
-
- void TT_Panic( const String* fmt, ... )
- {
- va_list ap;
-
- va_start( ap, fmt );
- Print( fmt, ap );
- va_end( ap );
-
- exit( EXIT_FAILURE );
- }
-
-#endif /* defined( DEBUG_LEVEL_ERROR ) || defined( DEBUG_LEVEL_TRACE ) */
-
-#if defined( DEBUG_LEVEL_TRACE )
-
- /* use this function to set the values of tt_trace_levels */
-
- void set_tt_trace_levels( int index, char value )
- {
- tt_trace_levels[index] = value;
- }
-
-#endif
-
-/* END */
diff --git a/Build/source/libs/libttf/ttdebug.h b/Build/source/libs/libttf/ttdebug.h
deleted file mode 100644
index 8e889dcc622..00000000000
--- a/Build/source/libs/libttf/ttdebug.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*******************************************************************
- *
- * ttdebug.h
- *
- * Debugging and Logging component (specification)
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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). Define
- * DEBUG_LEVEL_TRACE to enable this mode.
- *
- * - error mode:
- *
- * Only error messages are generated. Define
- * DEBUG_LEVEL_ERROR to enable this mode.
- *
- * - release mode:
- *
- * Error messages are neither sent nor generated. The code is
- * free from any debugging parts.
- *
- ******************************************************************/
-
-#ifndef TTDEBUG_H
-#define TTDEBUG_H
-
-#include "ttconfig.h"
-#include "tttypes.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-#if defined( DEBUG_LEVEL_TRACE )
-
- typedef enum Trace_Component_
- {
- trace_any = 0,
- trace_api,
- trace_interp,
- trace_load,
- trace_gload,
- trace_memory,
- trace_file,
- trace_mutex,
- trace_cache,
- trace_calc,
- trace_cmap,
- trace_extend,
- trace_objs,
- trace_raster,
-
- trace_bitmap,
- trace_max
-
- } Trace_Component;
-
-
- /* Here we define an array to hold the trace levels per component. */
- /* Since it is globally defined, all array members are set to 0. */
- /* You should set the values in this array either in your program */
- /* or with your debugger. */
- /* */
- /* Currently, up to eight levels (PTRACE0-PTRACE7, see below) are */
- /* used in some parts of the engine. */
- /* */
- /* For example, to have all tracing messages in the raster */
- /* component, say */
- /* */
- /* #define DEBUG_LEVEL_TRACE */
- /* #include "ttdebug.h" */
- /* */
- /* ... */
- /* set_tt_trace_levels( trace_raster, 7 ) */
- /* */
- /* in your code before initializing the FreeType engine. */
- /* */
- /* Maybe it is better to define DEBUG_LEVEL_TRACE in ttconfig.h... */
-
- extern char tt_trace_levels[trace_max];
-
- /* IMPORTANT: */
- /* */
- /* Each component must define the macro TT_COMPONENT */
- /* to a valid Trace_Component value before using any */
- /* PTRACEx macro. */
- /* */
-
-#define PTRACE( level, varformat ) \
- if ( tt_trace_levels[TT_COMPONENT] >= level ) TT_Message##varformat
-
-#elif defined( DEBUG_LEVEL_ERROR )
-
-#define PTRACE( level, varformat ) /* nothing */
-
-#else /* RELEASE MODE */
-
-#define TT_Assert( condition, action ) /* nothing */
-
-#define PTRACE( level, varformat ) /* nothing */
-#define PERROR( varformat ) /* nothing */
-#define PANIC( varformat ) /* nothing */
-
-#endif
-
-
-/************************************************************************/
-/* */
-/* Define macros and fuctions that are common to the debug and trace */
-/* modes. */
-/* */
-
-#if defined( DEBUG_LEVEL_TRACE ) || defined( DEBUG_LEVEL_ERROR )
-
-
-#define TT_Assert( condition, action ) if ( !(condition) ) ( action )
-
- void TT_Message( const String* fmt, ... );
- void TT_Panic ( const String* fmt, ... );
- /* print a message and exit */
-
- const String* Cur_U_Line( void* exec );
-
-#define PERROR( varformat ) TT_Message##varformat
-#define PANIC( varformat ) TT_Panic##varformat
-
-#endif
-
-#if defined( DEBUG_LEVEL_TRACE )
-
- void set_tt_trace_levels( int index, char value );
-
-#endif
-
-
-#define PTRACE0( varformat ) PTRACE( 0, varformat )
-#define PTRACE1( varformat ) PTRACE( 1, varformat )
-#define PTRACE2( varformat ) PTRACE( 2, varformat )
-#define PTRACE3( varformat ) PTRACE( 3, varformat )
-#define PTRACE4( varformat ) PTRACE( 4, varformat )
-#define PTRACE5( varformat ) PTRACE( 5, varformat )
-#define PTRACE6( varformat ) PTRACE( 6, varformat )
-#define PTRACE7( varformat ) PTRACE( 7, varformat )
-
-
-#ifdef __cplusplus
- }
-#endif
-
-
-#endif /* TTDEBUG_H */
diff --git a/Build/source/libs/libttf/ttengine.h b/Build/source/libs/libttf/ttengine.h
deleted file mode 100644
index e946d06ce2b..00000000000
--- a/Build/source/libs/libttf/ttengine.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************
- *
- * ttengine.h 1.1
- *
- * Engine instance structure definition.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- * New in 1.1 :
- *
- * - added the 'raster_lock' mutex field to synchronize
- * scan-line conversion in thread-safe and re-entrant builds.
- *
- ******************************************************************/
-
-#ifndef TTENGINE_H
-#define TTENGINE_H
-
-#include "tttypes.h"
-#include "ttconfig.h"
-#include "freetype.h"
-#include "ttmutex.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- /********************************************************************/
- /* */
- /* The freetype engine instance structure. */
- /* */
- /* This structure holds all the data that is necessary to run */
- /* one instance of the freetype engine. It is needed to get a */
- /* completely re-entrant version of the library. */
- /* */
- /* The goal is to move _all_ component-specific variables, either */
- /* static or global in the structure; the component initializers */
- /* and finalizers will all be called with the address of a valid */
- /* TEngine_Instance. */
- /* */
- /********************************************************************/
-
- struct TEngine_Instance_
- {
- TMutex lock; /* engine lock */
-
- void* list_free_elements;
-
- void* objs_face_class; /* the face cache class */
- void* objs_instance_class; /* the instance cache class */
- void* objs_execution_class; /* the context cache class */
- void* objs_glyph_class; /* the glyph cache class */
-
- void* objs_face_cache; /* these caches are used to track */
- void* objs_exec_cache; /* the current face and execution */
- /* context objects */
-
- void* file_component; /* ttfile implementation dependent */
-
- TMutex raster_lock; /* mutex for this engine's render pool */
- void* raster_component; /* ttraster implementation depedent */
- Byte raster_palette[5]; /* gray-levels palette for anti-aliasing */
-
- void* extension_component; /* extensions dependent */
-
-#if 0
- TT_Glyph_Loader_Callback glCallback; /* glyph loader callback, if any */
-#endif
- };
-
- /* NOTE : The raster's lock is only acquired by the Render_Glyph and */
- /* Render_Gray_Glyph functions, which always release it on exit */
- /* They do not lock the engine mutex. This means you shouldn't */
- /* be concerned about deadlocks between the two mutexes, as these */
- /* should never appear.. */
-
- typedef struct TEngine_Instance_ TEngine_Instance;
- typedef TEngine_Instance* PEngine_Instance;
-
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE /* for re-entrant builds */
-
-#define ENGINE_ARG TEngine_Instance* _engine
-#define ENGINE_ARGS TEngine_Instance* _engine,
-
-#define ENGINE_VAR _engine
-#define ENGINE_VARS _engine,
-
-#define ENGINE _engine
-
-#else /* for thread-safe builds */
-
-#define ENGINE_ARG /* void */
-#define ENGINE_ARGS
-
-#define ENGINE_VAR
-#define ENGINE_VARS
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTENGINE_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttextend.c b/Build/source/libs/libttf/ttextend.c
deleted file mode 100644
index cb77e7ff885..00000000000
--- a/Build/source/libs/libttf/ttextend.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*******************************************************************
- *
- * ttextend.h 2.0
- *
- * Extensions Interface
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 updated version of the extension component, now
- * located in the main library's source directory. It allows
- * the dynamic registration/use of various face object extensions
- * through a simple API.
- *
- ******************************************************************/
-
-#include "ttextend.h"
-#include "ttengine.h"
-#include "ttmemory.h"
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_extend
-
-
- struct TExtension_Registry_
- {
- Int num_extensions;
- Long cur_offset;
- TExtension_Class classes[TT_MAX_EXTENSIONS];
- };
-
- typedef struct TExtension_Registry_ TExtension_Registry;
- typedef TExtension_Registry* PExtension_Registry;
-
-
-
- /* Initialize the extension component */
-
- LOCAL_FUNC
- TT_Error TTExtend_Init( PEngine_Instance engine )
- {
- TT_Error error;
- PExtension_Registry exts;
-
-
- if ( ALLOC( exts, sizeof ( TExtension_Registry ) ) )
- return error;
-
- exts->num_extensions = 0;
- exts->cur_offset = 0;
- engine->extension_component = (void*)exts;
-
- return TT_Err_Ok;
- }
-
-
- /* Finalize the extension component */
-
- LOCAL_FUNC
- TT_Error TTExtend_Done( PEngine_Instance engine )
- {
- FREE( engine->extension_component );
- return TT_Err_Ok;
- }
-
-
- /* Register a new extension */
-
- EXPORT_FUNC
- TT_Error TT_Register_Extension( PEngine_Instance engine,
- Long id,
- Long size,
- PExt_Constructor create,
- PExt_Destructor destroy )
- {
- PExtension_Registry exts;
- PExtension_Class clazz;
- Int p;
-
-
- exts = (PExtension_Registry)engine->extension_component;
- if ( !exts )
- return TT_Err_Ok;
-
- p = exts->num_extensions;
-
- if ( p >= TT_MAX_EXTENSIONS )
- return TT_Err_Too_Many_Extensions;
-
- clazz = exts->classes + p;
- clazz->id = id;
- clazz->size = size;
- clazz->build = create;
- clazz->destroy = destroy;
-
- clazz->offset = exts->cur_offset;
-
- exts->num_extensions++;
- exts->cur_offset += ( size + ALIGNMENT-1 ) & -ALIGNMENT;
-
- return TT_Err_Ok;
- }
-
-
- /* Query an extension block by extension_ID */
-
- EXPORT_FUNC
- TT_Error TT_Extension_Get( PFace face,
- Long extension_id,
- void** extension_block )
- {
- PExtension_Registry registry;
- PExtension_Class clazz;
- Int n;
-
-
- if ( !face->extension )
- return TT_Err_Extensions_Unsupported;
-
- registry = (PExtension_Registry)face->engine->extension_component;
-
- for ( n = 0; n < face->n_extensions; n++ )
- {
- clazz = registry->classes + n;
- if ( clazz->id == extension_id )
- {
- *extension_block = (PByte)face->extension + clazz->offset;
- return TT_Err_Ok;
- }
- }
-
- return TT_Err_Invalid_Extension_Id;
- }
-
-
- /* Destroy all extensions within a face object. Called by the */
- /* face object destructor. */
-
- LOCAL_FUNC
- TT_Error Extension_Destroy( PFace face )
- {
- PEngine_Instance engine = face->engine;
- PExtension_Registry registry;
- PExtension_Class clazz;
- Int n;
- PByte ext;
-
-
- registry = (PExtension_Registry)engine->extension_component;
-
- for ( n = 0; n < face->n_extensions; n++ )
- {
- clazz = registry->classes + n;
- ext = (PByte)face->extension + clazz->offset;
-
- /* the destructor is optional */
- if ( clazz->destroy )
- clazz->destroy( (void*)ext, face );
- }
-
- /* destroy the face's extension block too */
- FREE( face->extension );
- face->n_extensions = 0;
-
- return TT_Err_Ok;
- }
-
-
- /* Create an extension within a face object. Called by the */
- /* face object constructor. */
-
- LOCAL_FUNC
- TT_Error Extension_Create( PFace face )
- {
- PEngine_Instance engine = face->engine;
- PExtension_Registry registry;
- PExtension_Class clazz;
- TT_Error error;
- Int n;
- PByte ext;
-
-
- registry = (PExtension_Registry)engine->extension_component;
-
- face->n_extensions = registry->num_extensions;
- if ( ALLOC( face->extension, registry->cur_offset ) )
- return error;
-
- for ( n = 0; n < face->n_extensions; n++ )
- {
- clazz = registry->classes + n;
- ext = (PByte)face->extension + clazz->offset;
- error = clazz->build( (void*)ext, face );
- if ( error )
- goto Fail;
- }
- return TT_Err_Ok;
-
- Fail:
- Extension_Destroy( face );
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttextend.h b/Build/source/libs/libttf/ttextend.h
deleted file mode 100644
index d5d862282c1..00000000000
--- a/Build/source/libs/libttf/ttextend.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/*******************************************************************
- *
- * ttextend.h 2.0
- *
- * Extensions Interface.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 updated version of the extension component, now
- * located in the main library's source directory. It allows
- * the dynamic registration/use of various face object extensions
- * through a simple API.
- *
- ******************************************************************/
-
-#ifndef TTEXTEND_H
-#define TTEXTEND_H
-
-#include "ttconfig.h"
-#include "tttypes.h"
-#include "ttobjs.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- /* The extensions don't need to be integrated at compile time into */
- /* the engine, only at link time. */
-
-
- /* When a new face object is created, the face constructor calls */
- /* the extension constructor with the following arguments: */
- /* */
- /* ext : typeless pointer to the face's extension block. */
- /* Its size is the one given at registration time */
- /* in the extension class's 'size' field. */
- /* */
- /* face : the parent face object. Note that the extension */
- /* constructor is called when the face object is */
- /* built. */
-
- typedef TT_Error TExt_Constructor( void* ext, PFace face );
-
-
- /* When a face object is destroyed, the face destructor calls */
- /* the extension destructor with the following arguments. */
- /* */
- /* ext : typeless pointer to the face's extension block. */
- /* Its size is the one given at registration time */
- /* in the extension class's 'size' field. */
- /* */
- /* face : the parent face object. Note that the extension */
- /* destructor is called before the actual face object */
- /* is destroyed. */
-
- typedef TT_Error TExt_Destructor ( void* ext, PFace face );
-
- typedef TExt_Constructor* PExt_Constructor;
- typedef TExt_Destructor* PExt_Destructor;
-
-
- struct TExtension_Class_
- {
- Long id; /* extension id */
- Long size; /* size in bytes of extension record */
- PExt_Constructor build; /* the extension's class constructor */
- PExt_Destructor destroy; /* the extension's class destructor */
-
- Long offset; /* offset of ext. record in face obj */
- /* (set by the engine) */
- };
-
- typedef struct TExtension_Class_ TExtension_Class;
- typedef TExtension_Class* PExtension_Class;
-
-
-#define Build_Extension_ID( a, b, c, d ) \
- ( ((ULong)(a) << 24) | \
- ((ULong)(b) << 16) | \
- ((ULong)(c) << 8 ) | \
- (ULong)(d) )
-
- /* A note regarding extensions and the single-object compilation */
- /* mode : */
- /* */
- /* When the engine is compiled as a single object file, extensions */
- /* must remain linkable *after* compile time. In order to do this, */
- /* we need to export the functions that an extension may need. */
- /* Fortunately, we can limit ourselves to : */
- /* */
- /* o TT_Register_Extension (previously called Extension_Register) */
- /* which is to be called by each extension on within */
- /* it TT_Init_XXXX_Extension initializer. */
- /* */
- /* o File and frame access functions. Fortunately, these already */
- /* have their names prefixed by "TT_", so no change was needed */
- /* except replacing the LOCAL_DEF keyword with EXPORT_DEF */
- /* */
- /* o Memory access functions, i.e. TT_Alloc and TT_Free. Again, */
- /* the change is minimal */
- /* */
- /* o the table-lookup function : TT_LookUp_Table, formerly known */
- /* as Load_TrueType_Table in ttload.c. */
- /* */
- /* */
- /* Other than that, an extension should be able to #include all */
- /* relevant header files to get access to internal types, but */
- /* should not call engine internal functions.. */
- /* */
- /* If there is a need for a specific internal function call, let */
- /* me known to see if we need to export it by default.. */
- /* - DavidT */
- /* */
-
- /* Register a new extension. Called by extension */
- /* service initializers. */
- EXPORT_DEF
- TT_Error TT_Register_Extension( PEngine_Instance engine,
- Long id,
- Long size,
- PExt_Constructor create,
- PExt_Destructor destroy );
-
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
- /* Initialize the extension component */
- LOCAL_DEF
- TT_Error TTExtend_Init( PEngine_Instance engine );
-
- /* Finalize the extension component */
- LOCAL_DEF
- TT_Error TTExtend_Done( PEngine_Instance engine );
-
- /* Create an extension within a face object. Called by the */
- /* face object constructor. */
- LOCAL_DEF
- TT_Error Extension_Create( PFace face );
-
- /* Destroy all extensions within a face object. Called by the */
- /* face object destructor. */
- LOCAL_DEF
- TT_Error Extension_Destroy( PFace face );
-#endif
-
- /* Query an extension block by extension_ID. Called by extension */
- /* service routines. */
- EXPORT_DEF
- TT_Error TT_Extension_Get( PFace face,
- Long extension_id,
- void** extension_block );
-
-#ifdef __cplusplus
- }
-#endif
-
-
-#endif /* TTEXTEND_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttfile.c b/Build/source/libs/libttf/ttfile.c
deleted file mode 100644
index 07d9698819e..00000000000
--- a/Build/source/libs/libttf/ttfile.c
+++ /dev/null
@@ -1,1175 +0,0 @@
-/*******************************************************************
- *
- * ttfile.c (extended version) 2.1
- *
- * File I/O Component (body).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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:
- *
- * This implementation relies on the ANSI libc. You may wish to
- * modify it to get rid of libc and go straight to the your
- * platform's stream routines.
- *
- * The same source code can be used for thread-safe and re-entrant
- * builds of the library.
- *
- * Changes between 2.0 and 2.1 :
- *
- * - it is now possible to close a stream's file handle explicitely
- * through the new API "TT_Flush_Stream". This will simply close
- * a stream's file handle (useful to save system resources when
- * dealing with lots of opened fonts). Of course, the function
- * "TT_Use_Stream" will automatically re-open a stream's handle if
- * necessary.
- *
- * - added "TT_Stream_Size" to replace "TT_File_Size" which wasn't
- * used anyway. This one returns the size of any stream, even
- * flushed one (when the previous TT_File_Size could only return
- * the size of the current working stream). This is used by the
- * new "Load_TrueType_Any" function in the tables loader.
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "freetype.h"
-#include "tttypes.h"
-#include "ttdebug.h"
-#include "ttengine.h"
-#include "ttmutex.h"
-#include "ttmemory.h"
-#include "ttfile.h" /* our prototypes */
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_file
-
-
-/* For now, we don't define additional error messages in the core library */
-/* to report open-on demand errors. Define these error as standard ones */
-
-#define TT_Err_Could_Not_ReOpen_File TT_Err_Could_Not_Open_File
-#define TT_Err_Could_Not_ReSeek_File TT_Err_Could_Not_Open_File
-
- /* This definition is mandatory for each file component! */
- EXPORT_FUNC
- const TFileFrame TT_Null_FileFrame = { NULL, 0, 0 };
-
-/* It has proven useful to do some bounds checks during development phase. */
-/* They should probably be undefined for speed reasons in a later release. */
-
-#if DEBUG_FILE
-#define CHECK_FRAME( frame, n ) \
- do { \
- if ( frame.cursor + n > frame.address + frame.size ) \
- Panic( "Frame boundary error!\n" ); \
- } while ( 0 )
-#else
-#define CHECK_FRAME( frame, n ) /* nothing */
-#endif
-
- /* Because a stream can be flushed, i.e. its file handle can be */
- /* closed to save system resources, we must keep the stream's file */
- /* pathname to be able to re-open it on demand when it is flushed */
-
- struct TStream_Rec_;
- typedef struct TStream_Rec_ TStream_Rec;
- typedef TStream_Rec* PStream_Rec;
-
- struct TStream_Rec_
- {
- Bool opened; /* is the stream handle opened ? */
- TT_Text* name; /* the file's pathname */
- Long position; /* current position within the file */
-
- FILE* file; /* file handle */
- Long base; /* stream base in file */
- Long size; /* stream size in file */
- };
-
- /* We support embedded TrueType files by allowing them to be */
- /* inside any file, at any location, hence the 'base' argument. */
- /* Note however that the current implementation does not allow you */
- /* to specify a 'base' index when opening a file. */
- /* (will come later) */
- /* I still don't know if this will turn out useful ?? - DavidT */
-
-#define STREAM2REC( x ) ( (TStream_Rec*)HANDLE_Val( x ) )
-
- static TT_Error Stream_Activate ( PStream_Rec stream );
- static TT_Error Stream_Deactivate( PStream_Rec stream );
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /**** ****/
- /**** N O N R E E N T R A N T I M P L E M E N T A T I O N ****/
- /**** ****/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
- /* in non-rentrant builds, we allocate a single block where we'll */
- /* place all the frames smaller than FRAME_CACHE_SIZE, rather than */
- /* allocating a new block on each access. Bigger frames will be */
- /* malloced normally in the heap. */
- /* */
- /* See TT_Access_Frame() and TT_Forget_Frame() for details. */
-
-#define FRAME_CACHE_SIZE 2048
-
- /* The TFile_Component structure holds all the data that was */
- /* previously declared static or global in this component. */
- /* */
- /* It is accessible through the 'engine.file_component' */
- /* variable in re-entrant builds, or directly through the */
- /* static 'files' variable in other builds. */
-
- struct TFile_Component_
- {
- TMutex lock; /* used by the thread-safe build only */
- Byte* frame_cache; /* frame cache */
- PStream_Rec stream; /* current stream */
- TFileFrame frame; /* current frame */
- };
-
- typedef struct TFile_Component_ TFile_Component;
-
- static TFile_Component files;
-
-#define CUR_Stream files.stream
-#define CUR_Frame files.frame
-
-#define STREAM_VARS /* void */
-#define STREAM_VAR /* void */
-
-/* The macro CUR_Stream denotes the current input stream. */
-/* Note that for the re-entrant version, the 'stream' name has been */
-/* chosen according to the macro STREAM_ARGS. */
-
-/* The macro CUR_Frame denotes the current file frame. */
-/* Note that for the re-entrant version, the 'frame' name has been */
-/* chosen according to the macro FRAME_ARGS. */
-
-/* The macro STREAM_VAR is used when calling public functions */
-/* that need an 'optional' stream argument. */
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- TT_Error error;
-
-
- MUTEX_Create( files.lock );
- files.stream = NULL;
- ZERO_Frame( files.frame );
-
- if ( ALLOC( files.frame_cache, FRAME_CACHE_SIZE ) )
- return error;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- FREE( files.frame_cache );
- MUTEX_Destroy( files.lock );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Copies or duplicates a given stream.
- *
- * Input : org_stream original stream
- * stream target stream (copy or duplicate)
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream org_stream,
- TT_Stream* stream )
- {
- MUTEX_Lock( files.lock ); /* lock file mutex */
-
- *stream = org_stream; /* copy the stream */
- files.stream = STREAM2REC(org_stream); /* set current stream */
-
- Stream_Activate( files.stream );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream target stream
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- HANDLE_Set( *stream, NULL );
- MUTEX_Release( files.lock );
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function fails if the byte range is not within the
- * the file, or if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big in both cases).
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( size <= FRAME_CACHE_SIZE )
- {
- /* use the cache */
- CUR_Frame.address = files.frame_cache;
- CUR_Frame.size = FRAME_CACHE_SIZE;
- }
- else
- {
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
- }
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if (error)
- {
- if ( size > FRAME_CACHE_SIZE )
- FREE( CUR_Frame.address );
- CUR_Frame.address = NULL;
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Check_And_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * `size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function truncates `size' if the byte range is not
- * within the file.
- *
- * It will fail if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big).
- *
- * It will fail if you make two consecutive calls
- * to TT_Access_Frame(), without a TT_Forget_Frame() between
- * them.
- *
- * The only difference with TT_Access_Frame() is that we
- * check that the frame is within the current file. We
- * otherwise truncate it.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
- Long readBytes, requested;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( size <= FRAME_CACHE_SIZE )
- {
- /* use the cache */
- CUR_Frame.address = files.frame_cache;
- CUR_Frame.size = FRAME_CACHE_SIZE;
- }
- else
- {
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
- }
-
- requested = size;
- readBytes = CUR_Stream->size - TT_File_Pos( STREAM_VAR );
- if ( size > readBytes )
- size = readBytes;
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if (error)
- {
- if ( requested > FRAME_CACHE_SIZE )
- FREE( CUR_Frame.address );
- CUR_Frame.address = NULL;
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Forget_Frame
- *
- * Description : Releases a cached frame after reading.
- *
- * Input : None
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Forget_Frame( FRAME_ARG )
- {
- if ( CUR_Frame.address == NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( CUR_Frame.size > FRAME_CACHE_SIZE )
- FREE( CUR_Frame.address );
-
- ZERO_Frame( CUR_Frame );
-
- return TT_Err_Ok;
- }
-
-
-#else /* TT_CONFIG_OPTION_THREAD_SAFE */
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /******** ********/
- /******** R E E N T R A N T I M P L E M E N T A T I O N ********/
- /******** ********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-/* a simple macro to access the file component's data */
-#define files ( *((TFile_Component*)engine.file_component) )
-
-#define CUR_Stream STREAM2REC( stream ) /* re-entrant macros */
-#define CUR_Frame (*frame)
-
-#define STREAM_VARS stream,
-#define STREAM_VAR stream
-
-
-/*******************************************************************
- *
- * Function : TTFile_Init
- *
- * Description : Initializes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Init( PEngine_Instance engine )
- {
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTFile_Done
- *
- * Description : Finalizes the File component.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTFile_Done( PEngine_Instance engine )
- {
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Use_Stream
- *
- * Description : Duplicates a stream for a new usage.
- *
- * Input : input_stream source stream to duplicate
- * copy address of target duplicate stream
- *
- * Output : error code.
- * The target stream is set to NULL in case of failure.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Use_Stream( TT_Stream input_stream,
- TT_Stream* copy )
- {
- PStream_Rec rec = STREAM2REC( input_stream );
-
- return TT_Open_Stream( rec->name, copy );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Stream
- *
- * Description : Releases a given stream.
- *
- * Input : stream target stream
- *
- * Output :
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Done_Stream( TT_Stream* stream )
- {
- return TT_Close_Stream( stream );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * 'size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function fails if the byte range is not within the
- * the file, or if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big in both cases).
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if ( error )
- {
- FREE( CUR_Frame.address );
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Check_And_Access_Frame
- *
- * Description : Notifies the component that we're going to read
- * `size' bytes from the current file position.
- * This function should load/cache/map these bytes
- * so that they will be addressed by the GET_xxx
- * functions easily.
- *
- * Input : size number of bytes to access.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Notes: The function truncates `size' if the byte range is not
- * within the file.
- *
- * It will fail if there is not enough memory to cache
- * the bytes properly (which usually means that `size' is
- * too big).
- *
- * It will fail if you make two consecutive calls
- * to TT_Access_Frame(), without a TT_Forget_Frame() between
- * them.
- *
- * The only difference with TT_Access_Frame() is that we
- * check that the frame is within the current file. We
- * otherwise truncate it.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS Long size )
- {
- TT_Error error;
- Long readBytes;
-
-
- if ( CUR_Frame.address != NULL )
- return TT_Err_Nested_Frame_Access;
-
- if ( ALLOC( CUR_Frame.address, size ) )
- return error;
- CUR_Frame.size = size;
-
- readBytes = CUR_Stream->size - TT_File_Pos( STREAM_VAR );
- if ( size > readBytes )
- size = readBytes;
-
- error = TT_Read_File( STREAM_VARS (void*)CUR_Frame.address, size );
- if ( error )
- {
- FREE( CUR_Frame.address );
- CUR_Frame.size = 0;
- }
-
- CUR_Frame.cursor = CUR_Frame.address;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Forget_Frame
- *
- * Description : Releases a cached frame after reading.
- *
- * Input : None
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Forget_Frame( FRAME_ARG )
- {
- if ( CUR_Frame.address == NULL )
- return TT_Err_Nested_Frame_Access;
-
- FREE( CUR_Frame.address );
- ZERO_Frame( CUR_Frame );
-
- return TT_Err_Ok;
- }
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /*********** ***********/
- /*********** C O M M O N I M P L E M E N T A T I O N ***********/
- /*********** ***********/
- /*******************************************************************/
- /*******************************************************************/
- /*******************************************************************/
-
-/*******************************************************************
- *
- * Function : Stream_Activate
- *
- * Description : activates a stream, this will either:
- * - open a new file handle if the stream is closed
- * - move the stream to the head of the linked list
- *
- * Input : stream the stream to activate
- *
- * Output : error condition.
- *
- * Note : This function is also called with fresh new streams
- * created by TT_Open_Stream(). They have their 'size'
- * field set to -1.
- *
- ******************************************************************/
-
- static TT_Error Stream_Activate( PStream_Rec stream )
- {
- if ( !stream->opened )
- {
- if ( (stream->file = fopen( (TT_Text*)stream->name, "rb" )) == 0 )
- return TT_Err_Could_Not_ReOpen_File;
-
- stream->opened = TRUE;
-
- /* A newly created stream has a size field of -1 */
- if ( stream->size < 0 )
- {
- fseek( stream->file, 0, SEEK_END );
- stream->size = ftell( stream->file );
- fseek( stream->file, 0, SEEK_SET );
- }
-
- /* Reset cursor in file */
- if ( stream->position )
- {
- if ( fseek( stream->file, stream->position, SEEK_SET ) != 0 )
- {
- /* error during seek */
- fclose( stream->file );
- stream->opened = FALSE;
- return TT_Err_Could_Not_ReSeek_File;
- }
- }
- }
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Stream_DeActivate
- *
- * Description : deactivates a stream, this will :
- * - close its file handle if it was opened
- * - remove it from the opened list if necessary
- *
- * Input : stream the stream to deactivate
- *
- * Output : Error condition
- *
- * Note : the function is called whenever a stream is deleted
- * (_not_ when a stream handle's is closed due to an
- * activation). However, the stream record isn't
- * destroyed by it..
- *
- ******************************************************************/
-
- static TT_Error Stream_Deactivate( PStream_Rec stream )
- {
- if ( stream->opened )
- {
- /* Save its current position within the file */
- stream->position = ftell( stream->file );
- fclose( stream->file );
- stream->file = 0;
- stream->opened = FALSE;
- }
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Stream_Size
- *
- * Description : Returns the length of a given stream, even if it
- * is flushed.
- *
- * Input : stream the stream
- *
- * Output : Length of stream in bytes.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_Stream_Size( TT_Stream stream )
- {
- PStream_Rec rec = STREAM2REC( stream );
-
-
- if ( rec )
- return rec->size;
- else
- return 0; /* invalid stream - return 0 */
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Open_Stream
- *
- * Description : Opens the font file and saves the total file size.
- *
- * Input : error address of stream's error variable
- * (re-entrant build only)
- * filepathname pathname of the file to open
- * stream address of target TT_Stream structure
- *
- * Output : SUCCESS on sucess, FAILURE on error.
- * The target stream is set to -1 in case of failure.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TT_Open_Stream( const TT_Text* filepathname,
- TT_Stream* stream )
- {
- Int len;
- TT_Error error;
- PStream_Rec stream_rec;
-
- if ( ALLOC( *stream, sizeof ( TStream_Rec ) ) )
- return error;
-
- stream_rec = STREAM2REC( *stream );
-
- stream_rec->file = NULL;
- stream_rec->size = -1L;
- stream_rec->base = 0;
- stream_rec->opened = FALSE;
- stream_rec->position = 0;
-
- len = strlen( filepathname ) + 1;
- if ( ALLOC( stream_rec->name, len ) )
- goto Fail;
-
- strncpy( stream_rec->name, filepathname, len );
-
- error = Stream_Activate( stream_rec );
- if ( error )
- goto Fail_Activate;
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- CUR_Stream = stream_rec;
-#endif
-
- return TT_Err_Ok;
-
- Fail_Activate:
- FREE( stream_rec->name );
- Fail:
- FREE( stream_rec );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Close_Stream
- *
- * Description : Closes a stream.
- *
- * Input : stream address of target TT_Stream structure
- *
- * Output : SUCCESS (always).
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TT_Close_Stream( TT_Stream* stream )
- {
- PStream_Rec rec = STREAM2REC( *stream );
-
-
- Stream_Deactivate( rec );
- FREE( rec->name );
- FREE( rec );
-
- HANDLE_Set( *stream, NULL );
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Flush_Stream
- *
- * Description : Flushes a stream, i.e., closes its file handle.
- *
- * Input : stream address of target TT_Stream structure
- *
- * Output : Error code
- *
- * NOTE : Never flush the current opened stream. This means that
- * you should _never_ call this function between a
- * TT_Use_Stream() and a TT_Done_Stream()!
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Flush_Stream( TT_Stream* stream )
- {
- PStream_Rec rec = STREAM2REC( *stream );
-
-
- if ( rec )
- {
- Stream_Deactivate( rec );
- return TT_Err_Ok;
- }
- else
- return TT_Err_Invalid_Argument;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Seek_File
- *
- * Description : Seeks the file cursor to a different position.
- *
- * Input : position new position in file
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Seek_File( STREAM_ARGS Long position )
- {
- position += CUR_Stream->base;
-
- if ( fseek( CUR_Stream->file, position, SEEK_SET ) )
- return TT_Err_Invalid_File_Offset;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Skip_File
- *
- * Description : Skips forward the file cursor.
- *
- * Input : distance number of bytes to skip
- *
- * Output : see TT_Seek_File()
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Skip_File( STREAM_ARGS Long distance )
- {
- return TT_Seek_File( STREAM_VARS ftell( CUR_Stream->file ) -
- CUR_Stream->base + distance );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_File
- *
- * Description : Reads a chunk of the file and copies it to memory.
- *
- * Input : buffer target buffer
- * count length in bytes to read
- *
- * Output : SUCCESS on success. FAILURE if out of range.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_File( STREAM_ARGS void* buffer, Long count )
- {
- if ( fread( buffer, 1, count, CUR_Stream->file ) != (ULong)count )
- return TT_Err_Invalid_File_Read;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Read_At_File
- *
- * Description : Reads file at a specified position.
- *
- * Input : position position to seek to before read
- * buffer target buffer
- * count number of bytes to read
- *
- * Output : SUCCESS on success. FAILURE if error.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Read_At_File( STREAM_ARGS Long position,
- void* buffer,
- Long count )
- {
- TT_Error error;
-
-
- if ( (error = TT_Seek_File( STREAM_VARS position )) != TT_Err_Ok ||
- (error = TT_Read_File( STREAM_VARS buffer, count )) != TT_Err_Ok )
- return error;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_File_Pos
- *
- * Description : Returns current file seek pointer.
- *
- * Input : none
- *
- * Output : Current file position.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_File_Pos( STREAM_ARG )
- {
- return ftell( CUR_Stream->file ) - CUR_Stream->base;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Byte
- *
- * Description : Extracts a byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted Byte.
- *
- ******************************************************************/
-#if 0
- EXPORT_FUNC
- Byte TT_Get_Byte( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Byte)(*CUR_Frame.cursor++);
- }
-#endif
-
-
-/*******************************************************************
- *
- * Function : GET_Char
- *
- * Description : Extracts a signed byte from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted char.
- *
- ******************************************************************/
- EXPORT_FUNC
- Char TT_Get_Char( FRAME_ARG )
- {
- CHECK_FRAME( CUR_Frame, 1 );
-
- return (Char)(*CUR_Frame.cursor++);
- }
-
-
-/*******************************************************************
- *
- * Function : GET_Short
- *
- * Description : Extracts a short from the current file frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted short.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Short TT_Get_Short( FRAME_ARG )
- {
- Short getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = (Short)((CUR_Frame.cursor[0] << 8) |
- CUR_Frame.cursor[1]);
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_UShort
- *
- * Description : Extracts an unsigned short from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted ushort.
- *
- ******************************************************************/
-#if 0
- EXPORT_FUNC
- UShort TT_Get_UShort( FRAME_ARG )
- {
- UShort getshort;
-
-
- CHECK_FRAME( CUR_Frame, 2 );
-
- getshort = (UShort)((CUR_Frame.cursor[0] << 8) |
- CUR_Frame.cursor[1]);
-
- CUR_Frame.cursor += 2;
-
- return getshort;
- }
-#endif
-
-
-/*******************************************************************
- *
- * Function : GET_Long
- *
- * Description : Extracts a long from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted long.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_Get_Long( FRAME_ARG )
- {
- Long getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ((Long)CUR_Frame.cursor[0] << 24) |
- ((Long)CUR_Frame.cursor[1] << 16) |
- ((Long)CUR_Frame.cursor[2] << 8 ) |
- (Long)CUR_Frame.cursor[3];
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-
-
-/*******************************************************************
- *
- * Function : GET_ULong
- *
- * Description : Extracts an unsigned long from the frame.
- *
- * Input : None or current frame
- *
- * Output : Extracted ulong.
- *
- ******************************************************************/
-#if 0
- EXPORT_FUNC
- ULong TT_Get_ULong( FRAME_ARG )
- {
- ULong getlong;
-
-
- CHECK_FRAME( CUR_Frame, 4 );
-
- getlong = ( ((ULong)CUR_Frame.cursor[0] << 24) |
- ((ULong)CUR_Frame.cursor[1] << 16) |
- ((ULong)CUR_Frame.cursor[2] << 8 ) |
- (ULong)CUR_Frame.cursor[3] );
-
- CUR_Frame.cursor += 4;
-
- return getlong;
- }
-#endif
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttfile.h b/Build/source/libs/libttf/ttfile.h
deleted file mode 100644
index eebd1c1d43e..00000000000
--- a/Build/source/libs/libttf/ttfile.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/*******************************************************************
- *
- * ttfile.h 1.3
- *
- * File I/O Component (specification).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- * Changes between 1.3 and 1.2:
- *
- * - all functions report error values now
- *
- * - the stream semantics have also changed
- *
- * Changes between 1.2 and 1.1:
- *
- * - added macros to support re-entrant builds
- *
- * - added the TT_Duplicate_File function to duplicate streams
- * (re-entrant builds only)
- *
- ******************************************************************/
-
-#ifndef TTFILE_H
-#define TTFILE_H
-
-#include "ttconfig.h"
-#include "freetype.h"
-#include "ttengine.h"
-#include "ttdebug.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- /* Initialize file component */
- LOCAL_DEF
- TT_Error TTFile_Init( PEngine_Instance engine );
-
- /* Done with file component */
- LOCAL_DEF
- TT_Error TTFile_Done( PEngine_Instance engine );
-
-
- /**********************************************************************/
- /* */
- /* Stream functions. */
- /* */
- /**********************************************************************/
-
- /* Open a file and return a stream handle for it. */
- /* Should only be used for a new face object's main stream. */
-
- LOCAL_DEF
- TT_Error TT_Open_Stream( const TT_Text* name,
- TT_Stream* stream );
-
-
- /* Closes, then discards, a stream when it's no longer needed. */
- /* Should only be used for a stream opend with TT_Open_Stream(). */
-
- LOCAL_DEF
- TT_Error TT_Close_Stream( TT_Stream* stream );
-
-
- /* Informs the component that we're going to use the file */
- /* opened in 'org_stream', and report errors to the 'error' */
- /* variable. */
-
- /* in non re-entrant builds, 'org_stream' is simply copied */
- /* to 'stream'. Otherwise, the latter is a duplicate handle */
- /* for the file opened with 'org_stream' */
-
- EXPORT_DEF
- TT_Error TT_Use_Stream( TT_Stream org_stream,
- TT_Stream* stream );
-
- /* Informs the component that we don't need to perform file */
- /* operations on the stream 'stream' anymore. This must be */
- /* used with streams "opened" with TT_Use_Stream() only! */
-
- /* in re-entrant builds, this will really discard the stream */
-
- EXPORT_DEF
- TT_Error TT_Done_Stream( TT_Stream* stream );
-
- /* Closes the stream's file handle to release system resources */
- /* The function TT_Use_Stream automatically re-activates a */
- /* flushed stream when it uses one */
-
- EXPORT_DEF
- TT_Error TT_Flush_Stream( TT_Stream* stream );
-
-/* The macros STREAM_ARGS and STREAM_ARG let us build a thread-safe */
-/* or re-entrant implementation depending on a single configuration */
-/*define. */
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE
-
-#define STREAM_ARGS TT_Stream stream,
-#define STREAM_ARG TT_Stream stream
-
-#else
-
-#define STREAM_ARGS /* void */
-#define STREAM_ARG void
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
- /****************************************************************/
- /* */
- /* File Functions. */
- /* */
- /* The following functions perform file operations on the */
- /* currently 'used' stream. In thread-safe builds, only one */
- /* stream can be used at a time. Synchronisation is performed */
- /* through the Use_Stream()/Done_Stream() functions. */
- /* */
- /****************************************************************/
-
- /* Read 'count' bytes from file into 'buffer' */
-
- EXPORT_DEF
- TT_Error TT_Read_File( STREAM_ARGS void* buffer,
- Long count );
-
-
- /* Seek file cursor to a given position */
-
- EXPORT_DEF
- TT_Error TT_Seek_File( STREAM_ARGS Long position );
-
-
- /* Skip the next 'distance' bytes in file */
-
- EXPORT_DEF
- TT_Error TT_Skip_File( STREAM_ARGS Long distance );
-
-
- /* Read the 'count' bytes at 'position' into 'buffer' */
-
- EXPORT_DEF
- TT_Error TT_Read_At_File( STREAM_ARGS Long position,
- void* buffer,
- Long count );
-
- /* Return current file position */
-
- EXPORT_DEF
- Long TT_File_Pos( STREAM_ARG );
-
- /* Return length of a given stream, even if it is flushed */
-
- EXPORT_DEF
- Long TT_Stream_Size( TT_Stream stream );
-
-
- /********************************************************************/
- /* */
- /* Frame operations. */
- /* */
- /* For a comprehensive explanation of frames, please refer to the */
- /* documentation files. */
- /* */
- /********************************************************************/
-
- /* Frame type declaration.*/
-
- struct TFileFrame_
- {
- Byte* address; /* frame buffer */
- Byte* cursor; /* current cursor position in frame */
- Long size; /* frame size */
- };
-
- typedef struct TFileFrame_ TFileFrame;
-
- EXPORT_DEF
- const TFileFrame TT_Null_FileFrame;
-
-
-/* The macro ZERO_Frame is used to define and init a frame. */
-/* It is important to have a default frame of { NULL, NULL, 0 } */
-/* before a call to TT_Access_Frame(). Otherwise, the call will */
-/* fail with a TT_Err_Nested_Frame_Accesses error. */
-
-#define ZERO_Frame( frame ) \
- { \
- (frame).address = NULL; \
- (frame).cursor = NULL; \
- (frame).size = 0; \
- }
-
-
-/* The macros FRAME_ARGS and FRAME_ARG let us build a thread-safe */
-/* or re-entrant implementation depending on a single configuration */
-/* define */
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE
-
-#define FRAME_ARGS TFileFrame* frame,
-#define FRAME_ARG TFileFrame* frame
-
-#else
-
-#define FRAME_ARGS /* void */
-#define FRAME_ARG void
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
- /* Access the next 'size' bytes from current position. */
- /* Fails if all bytes cannot be read/accessed. */
-
- EXPORT_DEF
- TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS Long size );
-
-
- /* Access the bytes located in the next 'size' bytes of the file. */
- /* Doesn't fail if less than 'size' bytes are accessible (like */
- /* at the end of the file). */
-
- EXPORT_DEF
- TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS Long size );
-
- /* Forget frame */
-
- EXPORT_DEF
- TT_Error TT_Forget_Frame( FRAME_ARG );
-
-
- /* primitive routines for data accessing */
-
- EXPORT_DEF
- Char TT_Get_Char ( FRAME_ARG );
- EXPORT_DEF
- Short TT_Get_Short( FRAME_ARG );
- EXPORT_DEF
- Long TT_Get_Long ( FRAME_ARG );
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE
-
-#define TT_Get_Byte( frame ) ( (Byte )TT_Get_Char ( frame ) )
-#define TT_Get_UShort( frame ) ( (UShort)TT_Get_Short( frame ) )
-#define TT_Get_ULong( frame ) ( (ULong )TT_Get_Long ( frame ) )
-
-#else
-
-#define TT_Get_Byte() ( (Byte )TT_Get_Char () )
-#define TT_Get_UShort() ( (UShort)TT_Get_Short() )
-#define TT_Get_ULong() ( (ULong )TT_Get_Long () )
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTFILE_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttgload.c b/Build/source/libs/libttf/ttgload.c
deleted file mode 100644
index a7ca3179aeb..00000000000
--- a/Build/source/libs/libttf/ttgload.c
+++ /dev/null
@@ -1,1351 +0,0 @@
-/*******************************************************************
- *
- * ttgload.c 1.0
- *
- * TrueType Glyph Loader.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "tttypes.h"
-#include "ttdebug.h"
-#include "ttcalc.h"
-#include "ttfile.h"
-
-#include "tttables.h"
-#include "ttobjs.h"
-#include "ttgload.h"
-
-#include "ttmemory.h"
-#include "tttags.h"
-#include "ttload.h"
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_gload
-
-
-/* composite font flags */
-
-#define ARGS_ARE_WORDS 0x001
-#define ARGS_ARE_XY_VALUES 0x002
-#define ROUND_XY_TO_GRID 0x004
-#define WE_HAVE_A_SCALE 0x008
-/* reserved 0x010 */
-#define MORE_COMPONENTS 0x020
-#define WE_HAVE_AN_XY_SCALE 0x040
-#define WE_HAVE_A_2X2 0x080
-#define WE_HAVE_INSTR 0x100
-#define USE_MY_METRICS 0x200
-
-
-/********************************************************/
-/* Return horizontal or vertical metrics in font units */
-/* for a given glyph. The metrics are the left side */
-/* bearing (resp. top side bearing) and advance width */
-/* (resp. advance height). */
-/* */
-/* This function will much probably move to another */
-/* component in the short future, but I haven't decided */
-/* which yet... */
-
- LOCAL_FUNC
- void TT_Get_Metrics( TT_Horizontal_Header* header,
- UShort index,
- Short* bearing,
- UShort* advance )
- {
- PLongMetrics longs_m;
-
- UShort k = header->number_Of_HMetrics;
-
-
- if ( index < k )
- {
- longs_m = (PLongMetrics)header->long_metrics + index;
- *bearing = longs_m->bearing;
- *advance = longs_m->advance;
- }
- else
- {
- *bearing = ((PShortMetrics)header->short_metrics)[index - k];
- *advance = ((PLongMetrics)header->long_metrics)[k - 1].advance;
- }
- }
-
-
-/********************************************************/
-/* Return horizontal metrics in font units for a given */
-/* glyph. If `check' is true, take care of mono-spaced */
-/* fonts by returning the advance width max. */
-
- static void Get_HMetrics( PFace face,
- UShort index,
- Bool check,
- Short* lsb,
- UShort* aw )
- {
- TT_Get_Metrics( &face->horizontalHeader, index, lsb, aw );
-
- if ( check && face->postscript.isFixedPitch )
- *aw = face->horizontalHeader.advance_Width_Max;
- }
-
-
-/********************************************************/
-/* Return advance width table for a given pixel size */
-/* if it is found in the font's `hdmx' table (if any). */
-
- static PByte Get_Advance_Widths( PFace face,
- UShort ppem )
- {
- UShort n;
-
-
- for ( n = 0; n < face->hdmx.num_records; n++ )
- if ( face->hdmx.records[n].ppem == ppem )
- return face->hdmx.records[n].widths;
-
- return NULL;
- }
-
-
-/********************************************************/
-/* Copy current glyph into original one. */
-
-#define cur_to_org( n, zone ) \
- MEM_Copy( (zone)->org, (zone)->cur, (n) * sizeof ( TT_Vector ) )
-
-/********************************************************/
-/* copy original glyph into current one */
-
-#define org_to_cur( n, zone ) \
- MEM_Copy( (zone)->cur, (zone)->org, (n) * sizeof ( TT_Vector ) )
-
-/********************************************************/
-/* translate an array of coordinates */
-
- static void translate_array( UShort n,
- TT_Vector* coords,
- TT_Pos delta_x,
- TT_Pos delta_y )
- {
- UShort k;
-
-
- if ( delta_x )
- for ( k = 0; k < n; k++ )
- coords[k].x += delta_x;
-
- if ( delta_y )
- for ( k = 0; k < n; k++ )
- coords[k].y += delta_y;
- }
-
-
-/********************************************************/
-/* mount one zone on top of another */
-
- static void mount_zone( PGlyph_Zone source,
- PGlyph_Zone target )
- {
- UShort np;
- Short nc;
-
- np = source->n_points;
- nc = source->n_contours;
-
- target->org = source->org + np;
- target->cur = source->cur + np;
- target->touch = source->touch + np;
-
- target->contours = source->contours + nc;
-
- target->n_points = 0;
- target->n_contours = 0;
- }
-
-
-/*******************************************************************
- *
- * Function: Load_Simple_Glyph
- *
- ******************************************************************/
-
- static TT_Error Load_Simple_Glyph( PExecution_Context exec,
- TT_Stream input,
- Short n_contours,
- Short left_contours,
- UShort left_points,
- UShort load_flags,
- PSubglyph_Record subg )
- {
- DEFINE_LOAD_LOCALS( input );
-
- PGlyph_Zone pts;
- Short k;
- UShort j;
- UShort n_points, n_ins;
- PFace face;
- Byte* flag;
- TT_Vector* vec;
- TT_F26Dot6 x, y;
-
-
- face = exec->face;
-
- /* simple check */
- if ( n_contours > left_contours )
- {
- PTRACE0(( "ERROR: Glyph index %ld has %d contours > left %d\n",
- subg->index, n_contours, left_contours ));
- return TT_Err_Too_Many_Contours;
- }
-
-
- /* preparing the execution context */
- mount_zone( &subg->zone, &exec->pts );
-
- /* reading the contours endpoints */
- if ( ACCESS_Frame( (n_contours + 1) * 2L ) )
- return error;
-
- PTRACE4(( " Contour endpoints:" ));
-
- for ( k = 0; k < n_contours; k++ )
- {
- exec->pts.contours[k] = GET_UShort();
- PTRACE4(( " %d", exec->pts.contours[k] ));
- }
- PTRACE4(( "\n" ));
-
- if ( n_contours > 0 )
- n_points = exec->pts.contours[n_contours - 1] + 1;
- else
- n_points = 0;
-
- n_ins = GET_UShort();
-
- FORGET_Frame();
-
- if ( n_points > left_points )
- {
- PTRACE0(( "ERROR: Too many points in glyph %ld\n", subg->index ));
- return TT_Err_Too_Many_Points;
- }
-
- /* loading instructions */
-
- PTRACE4(( " Instructions size: %d\n", n_ins ));
-
- if ( n_ins > face->maxProfile.maxSizeOfInstructions )
- {
- PTRACE0(( "ERROR: Too many instructions!\n" ));
- return TT_Err_Too_Many_Ins;
- }
-
- if ( FILE_Read( exec->glyphIns, n_ins ) )
- return error;
-
- if ( (error = Set_CodeRange( exec,
- TT_CodeRange_Glyph,
- exec->glyphIns,
- n_ins )) != TT_Err_Ok )
- return error;
-
-
- /* read the flags */
-
- if ( CHECK_ACCESS_Frame( n_points * 5L ) )
- return error;
-
- j = 0;
- flag = exec->pts.touch;
-
- while ( j < n_points )
- {
- Byte c, cnt;
-
- flag[j] = c = GET_Byte();
- j++;
-
- if ( c & 8 )
- {
- cnt = GET_Byte();
- while( cnt > 0 )
- {
- flag[j++] = c;
- cnt--;
- }
- }
- }
-
- /* read the X */
-
- x = 0;
- vec = exec->pts.org;
-
- for ( j = 0; j < n_points; j++ )
- {
- if ( flag[j] & 2 )
- {
- if ( flag[j] & 16 )
- x += GET_Byte();
- else
- x -= GET_Byte();
- }
- else
- {
- if ( (flag[j] & 16) == 0 )
- x += GET_Short();
- }
-
- vec[j].x = x;
- }
-
-
- /* read the Y */
-
- y = 0;
-
- for ( j = 0; j < n_points; j++ )
- {
- if ( flag[j] & 4 )
- {
- if ( flag[j] & 32 )
- y += GET_Byte();
- else
- y -= GET_Byte();
- }
- else
- {
- if ( (flag[j] & 32) == 0 )
- y += GET_Short();
- }
-
- vec[j].y = y;
- }
-
- FORGET_Frame();
-
- /* Now add the two shadow points at n and n + 1. */
- /* We need the left side bearing and advance width. */
-
- /* pp1 = xMin - lsb */
- vec[n_points].x = subg->metrics.bbox.xMin - subg->metrics.horiBearingX;
- vec[n_points].y = 0;
-
- /* pp2 = pp1 + aw */
- vec[n_points+1].x = vec[n_points].x + subg->metrics.horiAdvance;
- vec[n_points+1].y = 0;
-
- /* clear the touch flags */
-
- for ( j = 0; j < n_points; j++ )
- exec->pts.touch[j] &= TT_Flag_On_Curve;
-
- exec->pts.touch[n_points ] = 0;
- exec->pts.touch[n_points + 1] = 0;
-
- /* Note that we return two more points that are not */
- /* part of the glyph outline. */
-
- n_points += 2;
-
- /* now eventually scale and hint the glyph */
-
- pts = &exec->pts;
- pts->n_points = n_points;
- pts->n_contours = n_contours;
-
- if ( (load_flags & TTLOAD_SCALE_GLYPH) == 0 )
- {
- /* no scaling, just copy the orig arrays into the cur ones */
- org_to_cur( n_points, pts );
- }
- else
- {
- /* first scale the glyph points */
-
- for ( j = 0; j < n_points; j++ )
- {
- pts->org[j].x = Scale_X( &exec->metrics, pts->org[j].x );
- pts->org[j].y = Scale_Y( &exec->metrics, pts->org[j].y );
- }
-
- /* if hinting, round pp1, and shift the glyph accordingly */
- if ( subg->is_hinted )
- {
- x = pts->org[n_points - 2].x;
- x = ((x+32) & -64) - x;
- translate_array( n_points, pts->org, x, 0 );
-
- org_to_cur( n_points, pts );
-
- pts->cur[n_points - 1].x = (pts->cur[n_points - 1].x + 32) & -64;
-
- /* now consider hinting */
- if ( n_ins > 0 )
- {
- exec->is_composite = FALSE;
- exec->pedantic_hinting = load_flags & TTLOAD_PEDANTIC;
-
- error = Context_Run( exec, FALSE );
- if (error && exec->pedantic_hinting)
- return error;
- }
- }
- else
- org_to_cur( n_points, pts );
- }
-
- /* save glyph phantom points */
- if (!subg->preserve_pps)
- {
- subg->pp1 = pts->cur[n_points - 2];
- subg->pp2 = pts->cur[n_points - 1];
- }
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_Composite_End
- *
- ******************************************************************/
-
- static
- TT_Error Load_Composite_End( UShort n_points,
- Short n_contours,
- PExecution_Context exec,
- PSubglyph_Record subg,
- UShort load_flags,
- TT_Stream input )
- {
- DEFINE_LOAD_LOCALS( input );
-
- UShort k, n_ins;
- PGlyph_Zone pts;
-
-
- if ( subg->is_hinted &&
- subg->element_flag & WE_HAVE_INSTR )
- {
- if ( ACCESS_Frame( 2L ) )
- return error;
-
- n_ins = GET_UShort(); /* read size of instructions */
- FORGET_Frame();
-
- PTRACE4(( " Instructions size: %d\n", n_ins ));
-
- if ( n_ins > exec->face->maxProfile.maxSizeOfInstructions )
- {
- PTRACE0(( "ERROR: Too many instructions in composite glyph %ld\n",
- subg->index ));
- return TT_Err_Too_Many_Ins;
- }
-
- if ( FILE_Read( exec->glyphIns, n_ins ) )
- return error;
-
- error = Set_CodeRange( exec,
- TT_CodeRange_Glyph,
- exec->glyphIns,
- n_ins );
-
- if ( error )
- return error;
- }
- else
- n_ins = 0;
-
-
- /* prepare the execution context */
- n_points += 2;
- exec->pts = subg->zone;
- pts = &exec->pts;
-
- pts->n_points = n_points;
- pts->n_contours = n_contours;
-
- /* add phantom points */
- pts->cur[n_points - 2] = subg->pp1;
- pts->cur[n_points - 1] = subg->pp2;
-
- pts->touch[n_points - 1] = 0;
- pts->touch[n_points - 2] = 0;
-
- /* if hinting, round the phantom points */
- if ( subg->is_hinted )
- {
- pts->cur[n_points - 2].x = (subg->pp1.x + 32) & -64;
- pts->cur[n_points - 1].x = (subg->pp2.x + 32) & -64;
- }
-
- for ( k = 0; k < n_points; k++ )
- pts->touch[k] &= TT_Flag_On_Curve;
-
- cur_to_org( n_points, pts );
-
- /* now consider hinting */
- if ( subg->is_hinted && n_ins > 0 )
- {
- exec->is_composite = TRUE;
- exec->pedantic_hinting = load_flags & TTLOAD_PEDANTIC;
-
- error = Context_Run( exec, FALSE );
- if (error && exec->pedantic_hinting)
- return error;
- }
-
- /* save glyph origin and advance points */
- subg->pp1 = pts->cur[n_points - 2];
- subg->pp2 = pts->cur[n_points - 1];
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Init_Glyph_Component
- *
- ******************************************************************/
-
- static
- void Init_Glyph_Component( PSubglyph_Record element,
- PSubglyph_Record original,
- PExecution_Context exec )
- {
- element->index = -1;
- element->is_scaled = FALSE;
- element->is_hinted = FALSE;
-
- if ( original )
- mount_zone( &original->zone, &element->zone );
- else
- element->zone = exec->pts;
-
- element->zone.n_contours = 0;
- element->zone.n_points = 0;
-
- element->arg1 = 0;
- element->arg2 = 0;
-
- element->element_flag = 0;
- element->preserve_pps = FALSE;
-
- element->transform.xx = 1L << 16;
- element->transform.xy = 0;
- element->transform.yx = 0;
- element->transform.yy = 1L << 16;
-
- element->transform.ox = 0;
- element->transform.oy = 0;
-
- element->metrics.horiBearingX = 0;
- element->metrics.horiAdvance = 0;
- }
-
-
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Glyph( PInstance instance,
- PGlyph glyph,
- UShort glyph_index,
- UShort load_flags )
- {
- enum TPhases_
- {
- Load_Exit,
- Load_Glyph,
- Load_Header,
- Load_Simple,
- Load_Composite,
- Load_End
- };
-
- typedef enum TPhases_ TPhases;
-
- DEFINE_ALL_LOCALS;
-
- PFace face;
-
- UShort num_points;
- Short num_contours;
- UShort left_points;
- Short left_contours;
- UShort num_elem_points;
-
- Long table;
- UShort load_top;
- Long k, l;
- UShort new_flags;
- Long index;
- UShort u, v;
-
- Long glyph_offset, offset;
-
- TT_F26Dot6 x, y, nx, ny;
-
- Fixed xx, xy, yx, yy;
-
- PExecution_Context exec;
-
- PSubglyph_Record subglyph, subglyph2;
-
- TGlyph_Zone base_pts;
-
- TPhases phase;
- PByte widths;
-
-/* TT_Glyph_Loader_Callback cacheCb; */
-/* TT_Outline cached_outline; */
-
-
- /* first of all, check arguments */
- if ( !glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- face = glyph->face;
- if ( !face )
- return TT_Err_Invalid_Glyph_Handle;
-
- if ( glyph_index >= face->numGlyphs )
- return TT_Err_Invalid_Glyph_Index;
-
- if ( instance && (load_flags & TTLOAD_SCALE_GLYPH) == 0 )
- {
- instance = 0;
- load_flags &= ~( TTLOAD_SCALE_GLYPH | TTLOAD_HINT_GLYPH );
- }
-
- table = TT_LookUp_Table( face, TTAG_glyf );
- if ( table < 0 )
- {
- PTRACE0(( "ERROR: There is no glyph table in this font file!\n" ));
- return TT_Err_Glyf_Table_Missing;
- }
-
- glyph_offset = face->dirTables[table].Offset;
-
- /* query new execution context */
-
- if ( instance && instance->debug )
- exec = instance->context;
- else
- exec = New_Context( face );
-
- if ( !exec )
- return TT_Err_Could_Not_Find_Context;
-
- Context_Load( exec, face, instance );
-
- if ( instance )
- {
- if ( instance->GS.instruct_control & 2 )
- exec->GS = Default_GraphicsState;
- else
- exec->GS = instance->GS;
- /* load default graphics state */
-
- glyph->outline.high_precision = ( instance->metrics.y_ppem < 24 );
- }
-
- /* save its critical pointers, as they'll be modified during load */
- base_pts = exec->pts;
-
- /* init variables */
- left_points = face->maxPoints;
- left_contours = face->maxContours;
-
- num_points = 0;
- num_contours = 0;
-
- load_top = 0;
- subglyph = exec->loadStack;
-
- Init_Glyph_Component( subglyph, NULL, exec );
-
- subglyph->index = glyph_index;
- subglyph->is_hinted = load_flags & TTLOAD_HINT_GLYPH;
-
- /* when the cvt program has disabled hinting, the argument */
- /* is ignored. */
- if ( instance && instance->GS.instruct_control & 1 )
- subglyph->is_hinted = FALSE;
-
-
- /* now access stream */
-
- if ( USE_Stream( face->stream, stream ) )
- goto Fin;
-
- /* Main loading loop */
-
- phase = Load_Glyph;
- index = 0;
-
- while ( phase != Load_Exit )
- {
- subglyph = exec->loadStack + load_top;
-
- switch ( phase )
- {
- /************************************************************/
- /* */
- /* Load_Glyph state */
- /* */
- /* reading a glyph's generic header to determine */
- /* whether it's simple or composite */
- /* */
- /* exit states: Load_Header and Load_End */
-
- case Load_Glyph:
- /* check glyph index and table */
-
- index = subglyph->index;
- if ( index < 0 || index >= face->numGlyphs )
- {
- error = TT_Err_Invalid_Glyph_Index;
- goto Fail;
- }
-
- /* get horizontal metrics */
-
- {
- Short left_bearing;
- UShort advance_width;
-
-
- Get_HMetrics( face, (UShort)index,
- !(load_flags & TTLOAD_IGNORE_GLOBAL_ADVANCE_WIDTH),
- &left_bearing,
- &advance_width );
-
- subglyph->metrics.horiBearingX = left_bearing;
- subglyph->metrics.horiAdvance = advance_width;
- }
-
- phase = Load_Header;
-
-
- /* The cache callback isn't part of the FreeType release yet */
- /* It is discarded for the moment.. */
- /* */
-#if 0
- if ( instance )
- {
- /* is the glyph in an outline cache ? */
- cacheCb = instance->owner->engine->glCallback;
- if ( cacheCb && 0 ) /* disabled */
- {
- /* we have a callback */
- error = cacheCb( instance->generic,
- index, &cached_outline, &x, &y );
- if ( !error )
- {
- /* no error, then append the outline to the current subglyph */
- /* error = Append_Outline( subglyph,
- &left_points,
- &left_contours,
- &cached_outline ); */
- phase = Load_End;
- }
- }
- }
-#endif
- break;
-
-
- /************************************************************/
- /* */
- /* Load_Header state */
- /* */
- /* reading a glyph's generic header to determine */
- /* wether it's simple or composite */
- /* */
- /* exit states: Load_Simple and Load_Composite */
- /* */
-
- case Load_Header: /* load glyph */
-
- if ( index + 1 < face->numLocations &&
- face->glyphLocations[index] == face->glyphLocations[index + 1] )
- {
- /* as described by Frederic Loyer, these are spaces, and */
- /* not the unknown glyph. */
-
- num_contours = 0;
- num_points = 0;
-
- subglyph->metrics.bbox.xMin = 0;
- subglyph->metrics.bbox.xMax = 0;
- subglyph->metrics.bbox.yMin = 0;
- subglyph->metrics.bbox.yMax = 0;
-
- subglyph->pp1.x = 0;
- subglyph->pp2.x = subglyph->metrics.horiAdvance;
- if (load_flags & TTLOAD_SCALE_GLYPH)
- subglyph->pp2.x = Scale_X( &exec->metrics, subglyph->pp2.x );
-
- exec->glyphSize = 0;
- phase = Load_End;
- break;
- }
-
- offset = glyph_offset + face->glyphLocations[index];
-
- /* read first glyph header */
- if ( FILE_Seek( offset ) ||
- ACCESS_Frame( 10L ) )
- goto Fail_File;
-
- num_contours = GET_Short();
-
- subglyph->metrics.bbox.xMin = GET_Short();
- subglyph->metrics.bbox.yMin = GET_Short();
- subglyph->metrics.bbox.xMax = GET_Short();
- subglyph->metrics.bbox.yMax = GET_Short();
-
- FORGET_Frame();
-
- PTRACE6(( "Glyph %ld:\n", index ));
- PTRACE6(( " # of contours: %d\n", num_contours ));
- PTRACE6(( " xMin: %4d xMax: %4d\n",
- subglyph->metrics.bbox.xMin,
- subglyph->metrics.bbox.xMax ));
- PTRACE6(( " yMin: %4d yMax: %4d\n",
- subglyph->metrics.bbox.yMin,
- subglyph->metrics.bbox.yMax ));
-
- if ( num_contours > left_contours )
- {
- PTRACE0(( "ERROR: Too many contours for glyph %ld\n", index ));
- error = TT_Err_Too_Many_Contours;
- goto Fail;
- }
-
- subglyph->pp1.x = subglyph->metrics.bbox.xMin -
- subglyph->metrics.horiBearingX;
- subglyph->pp1.y = 0;
- subglyph->pp2.x = subglyph->pp1.x + subglyph->metrics.horiAdvance;
- if (load_flags & TTLOAD_SCALE_GLYPH)
- {
- subglyph->pp1.x = Scale_X( &exec->metrics, subglyph->pp1.x );
- subglyph->pp2.x = Scale_X( &exec->metrics, subglyph->pp2.x );
- }
-
- /* is it a simple glyph ? */
- if ( num_contours > 0 )
- phase = Load_Simple;
- else
- phase = Load_Composite;
-
- break;
-
-
- /************************************************************/
- /* */
- /* Load_Simple state */
- /* */
- /* reading a simple glyph (num_contours must be set to */
- /* the glyph's number of contours.) */
- /* */
- /* exit states : Load_End */
- /* */
-
- case Load_Simple:
- new_flags = load_flags;
-
- /* disable hinting when scaling */
- if ( !subglyph->is_hinted )
- new_flags &= ~TTLOAD_HINT_GLYPH;
-
- error = Load_Simple_Glyph( exec,
- stream,
- num_contours,
- left_contours,
- left_points,
- new_flags,
- subglyph );
- if ( error )
- goto Fail;
-
- /* Note: We could have put the simple loader source there */
- /* but the code is fat enough already :-) */
-
- num_points = exec->pts.n_points - 2;
-
- phase = Load_End;
-
- break;
-
-
- /************************************************************/
- /* */
- /* Load_Composite state */
- /* */
- /* reading a composite glyph header a pushing a new */
- /* load element on the stack. */
- /* */
- /* exit states: Load_Glyph */
- /* */
-
- case Load_Composite:
-
- /* create a new element on the stack */
- load_top++;
-
- if ( load_top > face->maxComponents )
- {
- error = TT_Err_Invalid_Composite;
- goto Fail;
- }
-
- subglyph2 = exec->loadStack + load_top;
-
- Init_Glyph_Component( subglyph2, subglyph, NULL );
- subglyph2->is_hinted = subglyph->is_hinted;
-
- /* now read composite header */
-
- if ( ACCESS_Frame( 4L ) )
- goto Fail_File;
-
- subglyph->element_flag = new_flags = GET_UShort();
-
- subglyph2->index = GET_UShort();
-
- FORGET_Frame();
-
- k = 1 + 1;
-
- if ( new_flags & ARGS_ARE_WORDS )
- k *= 2;
-
- if ( new_flags & WE_HAVE_A_SCALE )
- k += 2;
-
- else if ( new_flags & WE_HAVE_AN_XY_SCALE )
- k += 4;
-
- else if ( new_flags & WE_HAVE_A_2X2 )
- k += 8;
-
- if ( ACCESS_Frame( k ) )
- goto Fail_File;
-
- if ( new_flags & ARGS_ARE_WORDS )
- {
- k = GET_Short();
- l = GET_Short();
- }
- else
- {
- k = GET_Char();
- l = GET_Char();
- }
-
- subglyph->arg1 = k;
- subglyph->arg2 = l;
-
- if ( new_flags & ARGS_ARE_XY_VALUES )
- {
- subglyph->transform.ox = k;
- subglyph->transform.oy = l;
- }
-
- xx = 1L << 16;
- xy = 0;
- yx = 0;
- yy = 1L << 16;
-
- if ( new_flags & WE_HAVE_A_SCALE )
- {
- xx = (Fixed)GET_Short() << 2;
- yy = xx;
- subglyph2->is_scaled = TRUE;
- }
- else if ( new_flags & WE_HAVE_AN_XY_SCALE )
- {
- xx = (Fixed)GET_Short() << 2;
- yy = (Fixed)GET_Short() << 2;
- subglyph2->is_scaled = TRUE;
- }
- else if ( new_flags & WE_HAVE_A_2X2 )
- {
- xx = (Fixed)GET_Short() << 2;
- xy = (Fixed)GET_Short() << 2;
- yx = (Fixed)GET_Short() << 2;
- yy = (Fixed)GET_Short() << 2;
- subglyph2->is_scaled = TRUE;
- }
-
- FORGET_Frame();
-
- subglyph->transform.xx = xx;
- subglyph->transform.xy = xy;
- subglyph->transform.yx = yx;
- subglyph->transform.yy = yy;
-
- k = TT_MulFix( xx, yy ) - TT_MulFix( xy, yx );
-
- /* disable hinting in case of scaling/slanting */
- if ( ABS( k ) != (1L << 16) )
- subglyph2->is_hinted = FALSE;
-
- subglyph->file_offset = FILE_Pos();
-
- phase = Load_Glyph;
-
- break;
-
-
- /************************************************************/
- /* */
- /* Load_End state */
- /* */
- /* after loading a glyph, apply transformation and offset */
- /* where necessary, pops element and continue or */
- /* stop process. */
- /* */
- /* exit states : Load_Composite and Load_Exit */
- /* */
-
- case Load_End:
- if ( load_top > 0 )
- {
- subglyph2 = subglyph;
-
- load_top--;
- subglyph = exec->loadStack + load_top;
-
- /* check advance width and left side bearing */
-
- if ( !subglyph->preserve_pps &&
- subglyph->element_flag & USE_MY_METRICS )
- {
- subglyph->metrics.horiBearingX = subglyph2->metrics.horiBearingX;
- subglyph->metrics.horiAdvance = subglyph2->metrics.horiAdvance;
-
- subglyph->pp1 = subglyph2->pp1;
- subglyph->pp2 = subglyph2->pp2;
-
- subglyph->preserve_pps = TRUE;
- }
-
- /* apply scale */
-
- if ( subglyph2->is_scaled )
- {
- TT_Vector* cur = subglyph2->zone.cur;
- TT_Vector* org = subglyph2->zone.org;
-
- for ( u = 0; u < num_points; u++ )
- {
- nx = TT_MulFix( cur->x, subglyph->transform.xx ) +
- TT_MulFix( cur->y, subglyph->transform.yx );
-
- ny = TT_MulFix( cur->x, subglyph->transform.xy ) +
- TT_MulFix( cur->y, subglyph->transform.yy );
-
- cur->x = nx;
- cur->y = ny;
-
- nx = TT_MulFix( org->x, subglyph->transform.xx ) +
- TT_MulFix( org->y, subglyph->transform.yx );
-
- ny = TT_MulFix( org->x, subglyph->transform.xy ) +
- TT_MulFix( org->y, subglyph->transform.yy );
-
- org->x = nx;
- org->y = ny;
-
- cur++;
- org++;
- }
- }
-
- /* adjust counts */
-
- num_elem_points = subglyph->zone.n_points;
-
- for ( k = 0; k < num_contours; k++ )
- subglyph2->zone.contours[k] += num_elem_points;
-
- subglyph->zone.n_points += num_points;
- subglyph->zone.n_contours += num_contours;
-
- left_points -= num_points;
- left_contours -= num_contours;
-
- if ( !(subglyph->element_flag & ARGS_ARE_XY_VALUES) )
- {
- /* move second glyph according to control points */
- /* the attach points are relative to the specific component */
-
- u = (UShort)subglyph->arg1;
- v = (UShort)subglyph->arg2;
-
- if ( u >= num_elem_points ||
- v >= num_points )
- {
- error = TT_Err_Invalid_Composite;
- goto Fail;
- }
-
- /* adjust count */
- v += num_elem_points;
-
- x = subglyph->zone.cur[u].x - subglyph->zone.cur[v].x;
- y = subglyph->zone.cur[u].y - subglyph->zone.cur[v].y;
- }
- else
- {
- /* apply offset */
-
- x = subglyph->transform.ox;
- y = subglyph->transform.oy;
-
- if ( load_flags & TTLOAD_SCALE_GLYPH )
- {
- x = Scale_X( &exec->metrics, x );
- y = Scale_Y( &exec->metrics, y );
-
- if ( subglyph->element_flag & ROUND_XY_TO_GRID )
- {
- x = (x+32) & -64;
- y = (y+32) & -64;
- }
- }
- }
-
- translate_array( num_points, subglyph2->zone.cur, x, y );
-
- cur_to_org( num_points, &subglyph2->zone );
-
- num_points = subglyph->zone.n_points;
- num_contours = subglyph->zone.n_contours;
-
- /* check for last component */
-
- if ( FILE_Seek( subglyph->file_offset ) )
- goto Fail_File;
-
- if ( subglyph->element_flag & MORE_COMPONENTS )
- phase = Load_Composite;
- else
- {
- error = Load_Composite_End( num_points,
- num_contours,
- exec,
- subglyph,
- load_flags,
- stream );
- if ( error )
- goto Fail;
-
- phase = Load_End;
- }
- }
- else
- phase = Load_Exit;
-
- break;
-
-
- case Load_Exit:
- break;
- }
- }
-
- /* finally, copy the points arrays to the glyph object */
-
- exec->pts = base_pts;
-
- for ( u = 0; u < num_points + 2; u++ )
- {
- glyph->outline.points[u] = exec->pts.cur[u];
- glyph->outline.flags [u] = exec->pts.touch[u];
- }
-
- for ( k = 0; k < num_contours; k++ )
- glyph->outline.contours[k] = exec->pts.contours[k];
-
- glyph->outline.n_points = num_points;
- glyph->outline.n_contours = num_contours;
- glyph->outline.second_pass = TRUE;
-
- /* translate array so that (0,0) is the glyph's origin */
- translate_array( num_points + 2,
- glyph->outline.points,
- -subglyph->pp1.x,
- 0 );
-
- TT_Get_Outline_BBox( &glyph->outline, &glyph->metrics.bbox );
-
- if ( subglyph->is_hinted )
- {
- /* grid-fit the bounding box */
- glyph->metrics.bbox.xMin &= -64;
- glyph->metrics.bbox.yMin &= -64;
- glyph->metrics.bbox.xMax = (glyph->metrics.bbox.xMax+63) & -64;
- glyph->metrics.bbox.yMax = (glyph->metrics.bbox.yMax+63) & -64;
- }
-
- /* get the device-independent scaled horizontal metrics */
- /* take care of fixed-pitch fonts... */
- {
- TT_Pos left_bearing;
- TT_Pos advance;
-
-
- left_bearing = subglyph->metrics.horiBearingX;
- advance = subglyph->metrics.horiAdvance;
-
- if ( face->postscript.isFixedPitch )
- advance = face->horizontalHeader.advance_Width_Max;
-
- if ( load_flags & TTLOAD_SCALE_GLYPH )
- {
- left_bearing = Scale_X( &exec->metrics, left_bearing );
- advance = Scale_X( &exec->metrics, advance );
- }
-
- glyph->metrics.linearHoriBearingX = left_bearing;
- glyph->metrics.linearHoriAdvance = advance;
- }
-
- glyph->metrics.horiBearingX = glyph->metrics.bbox.xMin;
- glyph->metrics.horiBearingY = glyph->metrics.bbox.yMax;
- glyph->metrics.horiAdvance = subglyph->pp2.x - subglyph->pp1.x;
-
- /* Now take care of vertical metrics. In the case where there is */
- /* no vertical information within the font (relatively common), make */
- /* up some metrics `by hand' ... */
-
- {
- Short top_bearing; /* vertical top side bearing (EM units) */
- UShort advance_height; /* vertical advance height (EM units) */
-
- TT_Pos left; /* scaled vertical left side bearing */
- TT_Pos Top; /* scaled original vertical top side bearing */
- TT_Pos top; /* scaled vertical top side bearing */
- TT_Pos advance; /* scaled vertical advance height */
-
-
- /* Get the unscaled `tsb' and `ah' values */
- if ( face->verticalInfo &&
- face->verticalHeader.number_Of_VMetrics > 0 )
- {
- /* Don't assume that both the vertical header and vertical */
- /* metrics are present in the same font :-) */
-
- TT_Get_Metrics( (TT_Horizontal_Header*)&face->verticalHeader,
- glyph_index,
- &top_bearing,
- &advance_height );
- }
- else
- {
- /* Make up the distances from the horizontal header.. */
-
- /* NOTE: The OS/2 values are the only `portable' ones, */
- /* which is why we use them... */
- /* */
- /* NOTE2: The sTypoDescender is negative, which is why */
- /* we compute the baseline-to-baseline distance */
- /* here with : */
- /* ascender - descender + linegap */
- /* */
- top_bearing = (Short) (face->os2.sTypoLineGap / 2);
- advance_height = (UShort)(face->os2.sTypoAscender -
- face->os2.sTypoDescender +
- face->os2.sTypoLineGap);
- }
-
- /* We must adjust the top_bearing value from the bounding box given
- in the glyph header to te bounding box calculated with
- TT_Get_Outline_BBox() */
-
- /* scale the metrics */
- if ( load_flags & TTLOAD_SCALE_GLYPH )
- {
- Top = Scale_Y( &exec->metrics, top_bearing );
- top = Scale_Y( &exec->metrics,
- top_bearing + subglyph->metrics.bbox.yMax ) -
- glyph->metrics.bbox.yMax;
- advance = Scale_Y( &exec->metrics, advance_height );
- }
- else
- {
- Top = top_bearing;
- top = top_bearing + subglyph->metrics.bbox.yMax -
- glyph->metrics.bbox.yMax;
- advance = advance_height;
- }
-
- glyph->metrics.linearVertBearingY = Top;
- glyph->metrics.linearVertAdvance = advance;
-
- /* XXX : for now, we have no better algo for the lsb, but it should */
- /* work ok.. */
- /* */
- left = ( glyph->metrics.bbox.xMin - glyph->metrics.bbox.xMax ) / 2;
-
- /* grid-fit them if necessary */
- if ( subglyph->is_hinted )
- {
- left &= -64;
- top = (top + 63) & -64;
- advance = (advance + 32) & -64;
- }
-
- glyph->metrics.vertBearingX = left;
- glyph->metrics.vertBearingY = top;
- glyph->metrics.vertAdvance = advance;
- }
-
- /* Adjust advance width to the value contained in the hdmx table. */
- if ( !exec->face->postscript.isFixedPitch && instance &&
- subglyph->is_hinted )
- {
- widths = Get_Advance_Widths( exec->face,
- exec->instance->metrics.x_ppem );
- if ( widths )
- glyph->metrics.horiAdvance = widths[glyph_index] << 6;
- }
-
- glyph->outline.dropout_mode = (Char)exec->GS.scan_type;
-
- error = TT_Err_Ok;
-
- Fail_File:
- Fail:
- DONE_Stream( stream );
-
- Fin:
-
- /* reset the execution context */
- exec->pts = base_pts;
-
- if ( !instance || !instance->debug )
- Done_Context( exec );
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttgload.h b/Build/source/libs/libttf/ttgload.h
deleted file mode 100644
index cfdfb2c8cc9..00000000000
--- a/Build/source/libs/libttf/ttgload.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************
- *
- * ttgload.h 1.0
- *
- * TrueType Glyph Loader.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttconfig.h"
-#include "tttypes.h"
-#include "ttobjs.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
- LOCAL_DEF
- void TT_Get_Metrics( TT_Horizontal_Header* header,
- UShort index,
- Short* bearing,
- UShort* advance );
-
-
- LOCAL_DEF
- TT_Error Load_TrueType_Glyph( PInstance instance,
- PGlyph glyph,
- UShort glyph_index,
- UShort load_flags );
-
-#ifdef __cplusplus
- }
-#endif
-
-
-#endif /* TTGLOAD_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttinterp.c b/Build/source/libs/libttf/ttinterp.c
deleted file mode 100644
index 9158feca799..00000000000
--- a/Build/source/libs/libttf/ttinterp.c
+++ /dev/null
@@ -1,6654 +0,0 @@
-/*******************************************************************
- *
- * ttinterp.c 3.1
- *
- * TrueType bytecode intepreter.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- *
- * Changes between 3.1 and 3.0:
- *
- * - A more relaxed version of the interpreter. It is now able to
- * ignore errors like out-of-bound array access and writes in order
- * to silently support broken glyphs (even if the results are not
- * always pretty).
- *
- * Note that one can use the flag TTLOAD_PEDANTIC to force
- * TrueType-compliant interpretation.
- *
- * - A big #if used to completely disable the interpreter, which
- * is due to the Apple patents issues which emerged recently.
- *
- ******************************************************************/
-
-#include "freetype.h"
-#include "tttypes.h"
-#include "ttdebug.h"
-#include "ttcalc.h"
-#include "ttmemory.h"
-#include "ttinterp.h"
-
-
-#ifdef TT_CONFIG_OPTION_NO_INTERPRETER
-
- LOCAL_FUNC
- TT_Error RunIns( PExecution_Context exc )
- {
- /* do nothing - always successful */
- (void)exc;
- return TT_Err_Ok;
- }
-
-#else
-
-
-#ifdef DEBUG_INTERPRETER
-#include <memory.h>
-#include "ttdebug.h"
-
-/* Define the `getch()' function. On Unix systems, it is an alias */
-/* for `getchar()', and the debugger front end must ensure that the */
-/* `stdin' file descriptor is not in line-by-line input mode. */
-#ifdef OS2
-#include <conio.h>
-#else
-#define getch getchar
-#endif
-
-#endif /* DEBUG_INTEPRETER */
-
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_interp
-
-
-/* In order to detect infinite loops in the code, we set-up */
-/* a counter within the run loop. a singly stroke of interpretation */
-/* is now limited to a maximum number of opcodes defined below.. */
-/* */
-#define MAX_RUNNABLE_OPCODES 1000000
-
-
-/* There are two kinds of implementations there: */
-/* */
-/* a. static implementation: */
-/* */
-/* The current execution context is a static variable, */
-/* which fields are accessed directly by the interpreter */
-/* during execution. The context is named 'cur'. */
-/* */
-/* This version is non-reentrant, of course. */
-/* */
-/* */
-/* b. indirect implementation: */
-/* */
-/* The current execution context is passed to _each_ */
-/* function as its first argument, and each field is */
-/* thus accessed indirectly. */
-/* */
-/* This version is, however, fully re-entrant. */
-/* */
-/* */
-/* The idea is that an indirect implementation may be */
-/* slower to execute on the low-end processors that are */
-/* used in some systems (like 386s or even 486s). */
-/* */
-/* When the interpreter started, we had no idea of the */
-/* time that glyph hinting (i.e. executing instructions) */
-/* could take in the whole process of rendering a glyph, */
-/* and a 10 to 30% performance penalty on low-end systems */
-/* didn't seem much of a good idea. This question led us */
-/* to provide two distinct builds of the C version from */
-/* a single source, with the use of macros (again). */
-/* */
-/* Now that the engine is working (and working really */
-/* well!), it seems that the greatest time-consuming */
-/* factors are: file i/o, glyph loading, rasterizing and */
-/* _then_ glyph hinting! */
-/* */
-/* Tests performed with two versions of the 'fttimer' */
-/* program seem to indicate that hinting takes less than 5% */
-/* of the rendering process, which is dominated by glyph */
-/* loading and scan-line conversion by an high order of */
-/* magnitude. */
-/* */
-/* As a consequence, the indirect implementation is now the */
-/* default, as its performance costs can be considered */
-/* negligible in our context. Note, however, that we */
-/* kept the same source with macros because: */
-/* */
-/* - the code is kept very close in design to the */
-/* Pascal one used for development. */
-/* */
-/* - it's much more readable that way! */
-/* */
-/* - it's still open to later experimentation and tuning */
-
-
-
-#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
-
-#define CUR (*exc) /* see ttobjs.h */
-
-#else /* static implementation */
-
-#define CUR cur
-
- static TExecution_Context cur; /* static exec. context variable */
-
- /* apparently, we have a _lot_ of direct indexing when accessing */
- /* the static 'cur', which makes the code bigger (due to all the */
- /* four bytes addresses). */
-
-#endif /* !TT_CONFIG_OPTION_STATIC_INTERPRETER */
-
-
-#define INS_ARG EXEC_OPS PStorage args /* see ttobjs.h */
-
-#define SKIP_Code() SkipCode( EXEC_ARG )
-
-#define GET_ShortIns() GetShortIns( EXEC_ARG )
-
-#define COMPUTE_Funcs() Compute_Funcs( EXEC_ARG )
-
-#define NORMalize( x, y, v ) Normalize( EXEC_ARGS x, y, v )
-
-#define SET_SuperRound( scale, flags ) \
- SetSuperRound( EXEC_ARGS scale, flags )
-
-#define INS_Goto_CodeRange( range, ip ) \
- Ins_Goto_CodeRange( EXEC_ARGS range, ip )
-
-#define CUR_Func_project( x, y ) CUR.func_project( EXEC_ARGS x, y )
-#define CUR_Func_move( z, p, d ) CUR.func_move( EXEC_ARGS z, p, d )
-#define CUR_Func_dualproj( x, y ) CUR.func_dualproj( EXEC_ARGS x, y )
-#define CUR_Func_freeProj( x, y ) CUR.func_freeProj( EXEC_ARGS x, y )
-#define CUR_Func_round( d, c ) CUR.func_round( EXEC_ARGS d, c )
-
-#define CUR_Func_read_cvt( index ) \
- CUR.func_read_cvt( EXEC_ARGS index )
-
-#define CUR_Func_write_cvt( index, val ) \
- CUR.func_write_cvt( EXEC_ARGS index, val )
-
-#define CUR_Func_move_cvt( index, val ) \
- CUR.func_move_cvt( EXEC_ARGS index, val )
-
-#define CURRENT_Ratio() Current_Ratio( EXEC_ARG )
-#define CURRENT_Ppem() Current_Ppem( EXEC_ARG )
-
-#define CALC_Length() Calc_Length( EXEC_ARG )
-
-#define INS_SxVTL( a, b, c, d ) Ins_SxVTL( EXEC_ARGS a, b, c, d )
-
-#define COMPUTE_Point_Displacement( a, b, c, d ) \
- Compute_Point_Displacement( EXEC_ARGS a, b, c, d )
-
-#define MOVE_Zp2_Point( a, b, c, t ) Move_Zp2_Point( EXEC_ARGS a, b, c, t )
-
-#define CUR_Ppem() Cur_PPEM( EXEC_ARG )
-
- /* Instruction dispatch function, as used by the interpreter */
- typedef void (*TInstruction_Function)( INS_ARG );
-
-#define BOUNDS( x, n ) ( (x) >= (n) )
-
-
-
-/*********************************************************************/
-/* */
-/* 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. */
-/* */
-/* Note that for opcodes with a varying number of parameters, */
-/* either 0 or 1 arg is verified before execution, depending */
-/* on the nature of the instruction: */
-/* */
-/* - if the number of arguments is given by the bytecode */
-/* stream or the loop variable, 0 is chosen. */
-/* */
-/* - if the first argument is a count n that is followed */
-/* by arguments a1..an, then 1 is chosen. */
-/* */
-/*********************************************************************/
-
-#undef PACK
-#define PACK( x, y ) ((x << 4) | y)
-
- static const 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 ),
- /* SHP[1] */ PACK( 0, 0 ),
- /* SHC[0] */ PACK( 1, 0 ),
- /* SHC[1] */ PACK( 1, 0 ),
- /* SHZ[0] */ PACK( 1, 0 ),
- /* SHZ[1] */ PACK( 1, 0 ),
- /* SHPIX */ PACK( 1, 0 ),
- /* IP */ PACK( 0, 0 ),
- /* MSIRP[0] */ PACK( 2, 0 ),
- /* MSIRP[1] */ PACK( 2, 0 ),
- /* AlignRP */ PACK( 0, 0 ),
- /* 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 ),
- /* FlipRgON */ PACK( 2, 0 ),
- /* FlipRgOFF */ PACK( 2, 0 ),
- /* INS_$83 */ PACK( 0, 0 ),
- /* INS_$84 */ PACK( 0, 0 ),
- /* ScanCTRL */ PACK( 1, 0 ),
- /* SDVPTL[0] */ PACK( 2, 0 ),
- /* SDVPTL[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 ),
- /* INS_$91 */ PACK( 0, 0 ),
- /* INS_$92 */ PACK( 0, 0 ),
- /* 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 )
- };
-
- static const TT_Vector Null_Vector = {0,0};
-
-#undef NULL_Vector
-#define NULL_Vector (TT_Vector*)&Null_Vector
-
-/*******************************************************************
- *
- * Function : Norm
- *
- * Description : Returns the norm (length) of a vector.
- *
- * Input : X, Y vector
- *
- * Output : Returns length in F26dot6.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Norm( TT_F26Dot6 X, TT_F26Dot6 Y )
- {
- TT_Int64 T1, T2;
-
-
- MUL_64( X, X, T1 );
- MUL_64( Y, Y, T2 );
-
- ADD_64( T1, T2, T1 );
-
- return (TT_F26Dot6)SQRT_64( T1 );
- }
-
-
-/*******************************************************************
- *
- * Function : FUnits_To_Pixels
- *
- * Description : Scale a distance in FUnits to pixel coordinates.
- *
- * Input : Distance in FUnits
- *
- * Output : Distance in 26.6 format.
- *
- *****************************************************************/
-
- static TT_F26Dot6 FUnits_To_Pixels( EXEC_OPS Short distance )
- {
- return TT_MulDiv( distance,
- CUR.metrics.scale1,
- CUR.metrics.scale2 );
- }
-
-
-/*******************************************************************
- *
- * Function : Current_Ratio
- *
- * Description : Return the current aspect ratio scaling factor
- * depending on the projection vector's state and
- * device resolutions.
- *
- * Input : None
- *
- * Output : Aspect ratio in 16.16 format, always <= 1.0 .
- *
- *****************************************************************/
-
- static Long Current_Ratio( EXEC_OP )
- {
- if ( CUR.metrics.ratio )
- return CUR.metrics.ratio;
-
- if ( CUR.GS.projVector.y == 0 )
- CUR.metrics.ratio = CUR.metrics.x_ratio;
-
- else if ( CUR.GS.projVector.x == 0 )
- CUR.metrics.ratio = CUR.metrics.y_ratio;
-
- else
- {
- Long x, y;
-
-
- x = TT_MulDiv( CUR.GS.projVector.x, CUR.metrics.x_ratio, 0x4000 );
- y = TT_MulDiv( CUR.GS.projVector.y, CUR.metrics.y_ratio, 0x4000 );
- CUR.metrics.ratio = Norm( x, y );
- }
-
- return CUR.metrics.ratio;
- }
-
-
- static Long Current_Ppem( EXEC_OP )
- {
- return TT_MulFix( CUR.metrics.ppem, CURRENT_Ratio() );
- }
-
-
- static TT_F26Dot6 Read_CVT( EXEC_OPS ULong index )
- {
- return CUR.cvt[index];
- }
-
-
- static TT_F26Dot6 Read_CVT_Stretched( EXEC_OPS ULong index )
- {
- return TT_MulFix( CUR.cvt[index], CURRENT_Ratio() );
- }
-
-
- static void Write_CVT( EXEC_OPS ULong index, TT_F26Dot6 value )
- {
- CUR.cvt[index] = value;
- }
-
- static void Write_CVT_Stretched( EXEC_OPS ULong index, TT_F26Dot6 value )
- {
- CUR.cvt[index] = TT_MulDiv( value, 0x10000, CURRENT_Ratio() );
- }
-
-
- static void Move_CVT( EXEC_OPS ULong index, TT_F26Dot6 value )
- {
- CUR.cvt[index] += value;
- }
-
- static void Move_CVT_Stretched( EXEC_OPS ULong index, TT_F26Dot6 value )
- {
- CUR.cvt[index] += TT_MulDiv( value, 0x10000, CURRENT_Ratio() );
- }
-
-
-/******************************************************************
- *
- * Function : Calc_Length
- *
- * Description : Computes the length in bytes of current opcode.
- *
- *****************************************************************/
-
- static Bool Calc_Length( EXEC_OP )
- {
- CUR.opcode = CUR.code[CUR.IP];
-
- switch ( CUR.opcode )
- {
- case 0x40:
- if ( CUR.IP + 1 >= CUR.codeSize )
- return FAILURE;
-
- CUR.length = CUR.code[CUR.IP + 1] + 2;
- break;
-
- case 0x41:
- if ( CUR.IP + 1 >= CUR.codeSize )
- return FAILURE;
-
- CUR.length = CUR.code[CUR.IP + 1] * 2 + 2;
- break;
-
- case 0xB0:
- case 0xB1:
- case 0xB2:
- case 0xB3:
- case 0xB4:
- case 0xB5:
- case 0xB6:
- case 0xB7:
- CUR.length = CUR.opcode - 0xB0 + 2;
- break;
-
- case 0xB8:
- case 0xB9:
- case 0xBA:
- case 0xBB:
- case 0xBC:
- case 0xBD:
- case 0xBE:
- case 0xBF:
- CUR.length = (CUR.opcode - 0xB8) * 2 + 3;
- break;
-
- default:
- CUR.length = 1;
- break;
- }
-
- /* make sure result is in range */
-
- if ( CUR.IP + CUR.length > CUR.codeSize )
- return FAILURE;
-
- return SUCCESS;
- }
-
-
-/*******************************************************************
- *
- * Function : GetShortIns
- *
- * Description : Returns a short integer taken from the instruction
- * stream at address IP.
- *
- * Input : None
- *
- * Output : Short read at Code^[IP..IP+1]
- *
- * Notes : This one could become a Macro in the C version.
- *
- *****************************************************************/
-
- static Short GetShortIns( EXEC_OP )
- {
- /* Reading a byte stream so there is no endianess (DaveP) */
- CUR.IP += 2;
- return (Short)((CUR.code[CUR.IP - 2] << 8) + CUR.code[CUR.IP - 1]);
- }
-
-
-/*******************************************************************
- *
- * Function : Ins_Goto_CodeRange
- *
- * Description : Goes to a certain code range in the instruction
- * stream.
- *
- *
- * Input : aRange
- * aIP
- *
- * Output : SUCCESS or FAILURE.
- *
- *****************************************************************/
-
- static Bool Ins_Goto_CodeRange( EXEC_OPS Int aRange, ULong aIP )
- {
- TCodeRange* WITH;
-
-
- if ( aRange < 1 || aRange > 3 )
- {
- CUR.error = TT_Err_Bad_Argument;
- return FAILURE;
- }
-
- WITH = &CUR.codeRangeTable[aRange - 1];
-
- if ( WITH->Base == NULL ) /* invalid coderange */
- {
- CUR.error = TT_Err_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 > WITH->Size )
- {
- CUR.error = TT_Err_Code_Overflow;
- return FAILURE;
- }
-
- CUR.code = WITH->Base;
- CUR.codeSize = WITH->Size;
- CUR.IP = aIP;
- CUR.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 index of point to move
- * distance distance to apply
- * zone affected glyph zone
- *
- * Output : None
- *
- *****************************************************************/
-
- static void Direct_Move( EXEC_OPS PGlyph_Zone zone,
- UShort point,
- TT_F26Dot6 distance )
- {
- TT_F26Dot6 v;
-
-
- v = CUR.GS.freeVector.x;
-
- if ( v != 0 )
- {
- zone->cur[point].x += TT_MulDiv( distance,
- v * 0x10000L,
- CUR.F_dot_P );
-
- zone->touch[point] |= TT_Flag_Touched_X;
- }
-
- v = CUR.GS.freeVector.y;
-
- if ( v != 0 )
- {
- zone->cur[point].y += TT_MulDiv( distance,
- v * 0x10000L,
- CUR.F_dot_P );
-
- zone->touch[point] |= TT_Flag_Touched_Y;
- }
- }
-
-
-/******************************************************************/
-/* */
-/* The following versions are used whenever both vectors are both */
-/* along one of the coordinate unit vectors, i.e. in 90% cases. */
-/* */
-/******************************************************************/
-
-/*******************************************************************
- * Direct_Move_X
- *
- *******************************************************************/
-
- static void Direct_Move_X( EXEC_OPS PGlyph_Zone zone,
- UShort point,
- TT_F26Dot6 distance )
- {
- zone->cur[point].x += distance;
- zone->touch[point] |= TT_Flag_Touched_X;
- }
-
-
-/*******************************************************************
- * Direct_Move_Y
- *
- *******************************************************************/
-
- static void Direct_Move_Y( EXEC_OPS PGlyph_Zone zone,
- UShort point,
- TT_F26Dot6 distance )
- {
- zone->cur[point].y += distance;
- zone->touch[point] |= TT_Flag_Touched_Y;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_None
- *
- * Description : Does not round, but adds engine compensation.
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : rounded distance.
- *
- * NOTE : The spec says very few about the relationship between
- * rounding and engine compensation. However, it seems
- * from the description of super round that we should
- * should add the compensation before rounding.
- *
- ******************************************************************/
-
- static TT_F26Dot6 Round_None( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation;
- if ( val < 0 )
- val = 0;
- }
- else {
- val = distance - compensation;
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_To_Grid
- *
- * Description : Rounds value to grid after adding engine
- * compensation
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : Rounded distance.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Round_To_Grid( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation + 32;
- if ( val > 0 )
- val &= ~63;
- else
- val = 0;
- }
- else
- {
- val = -( (compensation - distance + 32) & (-64) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_To_Half_Grid
- *
- * Description : Rounds value to half grid after adding engine
- * compensation.
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : Rounded distance.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Round_To_Half_Grid( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = ((distance + compensation) & (-64)) + 32;
- if ( val < 0 )
- val = 0;
- }
- else
- {
- val = -( ((compensation - distance) & (-64)) + 32 );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_Down_To_Grid
- *
- * Description : Rounds value down to grid after adding engine
- * compensation.
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : Rounded distance.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Round_Down_To_Grid( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation;
- if ( val > 0 )
- val &= ~63;
- else
- val = 0;
- }
- else
- {
- val = -( (compensation - distance) & (-64) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_Up_To_Grid
- *
- * Description : Rounds value up to grid after adding engine
- * compensation.
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : Rounded distance.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Round_Up_To_Grid( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation + 63;
- if ( val > 0 )
- val &= ~63;
- else
- val = 0;
- }
- else
- {
- val = -( (compensation - distance + 63) & (-64) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_To_Double_Grid
- *
- * Description : Rounds value to double grid after adding engine
- * compensation.
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : Rounded distance.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Round_To_Double_Grid( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = distance + compensation + 16;
- if ( val > 0 )
- val &= ~31;
- else
- val = 0;
- }
- else
- {
- val = -( (compensation - distance + 16) & (-32) );
- if ( val > 0 )
- val = 0;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_Super
- *
- * Description : Super-rounds value to grid after adding engine
- * compensation.
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : Rounded distance.
- *
- * NOTE : The spec says very few about the relationship between
- * rounding and engine compensation. However, it seems
- * from the description of super round that we should
- * should add the compensation before rounding.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Round_Super( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = (distance - CUR.phase + CUR.threshold + compensation) &
- (-CUR.period);
- if ( val < 0 )
- val = 0;
- val += CUR.phase;
- }
- else
- {
- val = -( (CUR.threshold - CUR.phase - distance + compensation) &
- (-CUR.period) );
- if ( val > 0 )
- val = 0;
- val -= CUR.phase;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- *
- * Function : Round_Super_45
- *
- * Description : Super-rounds value to grid after adding engine
- * compensation.
- *
- * Input : distance : distance to round
- * compensation : engine compensation
- *
- * Output : Rounded distance.
- *
- * NOTE : There is a separate function for Round_Super_45 as we
- * may need a greater precision.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Round_Super_45( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation )
- {
- TT_F26Dot6 val;
-
-
- if ( distance >= 0 )
- {
- val = ( (distance - CUR.phase + CUR.threshold + compensation) /
- CUR.period ) * CUR.period;
- if ( val < 0 )
- val = 0;
- val += CUR.phase;
- }
- else
- {
- val = -( ( (CUR.threshold - CUR.phase - distance + compensation) /
- CUR.period ) * CUR.period );
- if ( val > 0 )
- val = 0;
- val -= CUR.phase;
- }
-
- return val;
- }
-
-
-/*******************************************************************
- * Compute_Round
- *
- *****************************************************************/
-
- static void Compute_Round( EXEC_OPS Byte round_mode )
- {
- switch ( round_mode )
- {
- case TT_Round_Off:
- CUR.func_round = (TRound_Function)Round_None;
- break;
-
- case TT_Round_To_Grid:
- CUR.func_round = (TRound_Function)Round_To_Grid;
- break;
-
- case TT_Round_Up_To_Grid:
- CUR.func_round = (TRound_Function)Round_Up_To_Grid;
- break;
-
- case TT_Round_Down_To_Grid:
- CUR.func_round = (TRound_Function)Round_Down_To_Grid;
- break;
-
- case TT_Round_To_Half_Grid:
- CUR.func_round = (TRound_Function)Round_To_Half_Grid;
- break;
-
- case TT_Round_To_Double_Grid:
- CUR.func_round = (TRound_Function)Round_To_Double_Grid;
- break;
-
- case TT_Round_Super:
- CUR.func_round = (TRound_Function)Round_Super;
- break;
-
- case TT_Round_Super_45:
- CUR.func_round = (TRound_Function)Round_Super_45;
- break;
- }
- }
-
-
-/*******************************************************************
- *
- * Function : SetSuperRound
- *
- * Description : Sets Super Round parameters.
- *
- * Input : GridPeriod Grid period
- * selector SROUND opcode
- *
- * Output : None.
- *
- *****************************************************************/
-
- static void SetSuperRound( EXEC_OPS TT_F26Dot6 GridPeriod,
- Long selector )
- {
- switch ( (Int)(selector & 0xC0) )
- {
- case 0:
- CUR.period = GridPeriod / 2;
- break;
-
- case 0x40:
- CUR.period = GridPeriod;
- break;
-
- case 0x80:
- CUR.period = GridPeriod * 2;
- break;
-
- /* This opcode is reserved, but... */
-
- case 0xC0:
- CUR.period = GridPeriod;
- break;
- }
-
- switch ( (Int)(selector & 0x30) )
- {
- case 0:
- CUR.phase = 0;
- break;
-
- case 0x10:
- CUR.phase = CUR.period / 4;
- break;
-
- case 0x20:
- CUR.phase = CUR.period / 2;
- break;
-
- case 0x30:
- CUR.phase = GridPeriod * 3 / 4;
- break;
- }
-
- if ( (selector & 0x0F) == 0 )
- CUR.threshold = CUR.period - 1;
- else
- CUR.threshold = ( (Int)(selector & 0x0F) - 4 ) * CUR.period / 8;
-
- CUR.period /= 256;
- CUR.phase /= 256;
- CUR.threshold /= 256;
- }
-
-
-/*******************************************************************
- *
- * Function : Project
- *
- * Description : Computes the projection of vector given by (v2-v1)
- * along the current projection vector.
- *
- * Input : v1, v2 input vector
- *
- * Output : Returns distance in F26dot6 format.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Project( EXEC_OPS TT_Vector* v1,
- TT_Vector* v2 )
- {
- TT_Int64 T1, T2;
-
-
- MUL_64( v1->x - v2->x, CUR.GS.projVector.x, T1 );
- MUL_64( v1->y - v2->y, CUR.GS.projVector.y, T2 );
-
- ADD_64( T1, T2, T1 );
-
- return (TT_F26Dot6)DIV_64( T1, 0x4000L );
- }
-
-
-/*******************************************************************
- *
- * Function : Dual_Project
- *
- * Description : Computes the projection of the vector given by
- * (v2-v1) along the current dual vector.
- *
- * Input : v1, v2 input vector
- *
- * Output : Returns distance in F26dot6 format.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Dual_Project( EXEC_OPS TT_Vector* v1,
- TT_Vector* v2 )
- {
- TT_Int64 T1, T2;
-
-
- MUL_64( v1->x - v2->x, CUR.GS.dualVector.x, T1 );
- MUL_64( v1->y - v2->y, CUR.GS.dualVector.y, T2 );
-
- ADD_64( T1, T2, T1 );
-
- return (TT_F26Dot6)DIV_64( T1, 0x4000L );
- }
-
-
-/*******************************************************************
- *
- * Function : Free_Project
- *
- * Description : Computes the projection of the vector given by
- * (v2-v1) along the current freedom vector.
- *
- * Input : v1, v2 input vector
- *
- * Output : Returns distance in F26dot6 format.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Free_Project( EXEC_OPS TT_Vector* v1,
- TT_Vector* v2 )
- {
- TT_Int64 T1, T2;
-
-
- MUL_64( v1->x - v2->x, CUR.GS.freeVector.x, T1 );
- MUL_64( v1->y - v2->y, CUR.GS.freeVector.y, T2 );
-
- ADD_64( T1, T2, T1 );
-
- return (TT_F26Dot6)DIV_64( T1, 0x4000L );
- }
-
-
-/*******************************************************************
- *
- * Function : Project_x
- *
- * Input : Vx, Vy input vector
- *
- * Output : Returns Vx.
- *
- * Note : Used as a dummy function.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Project_x( EXEC_OPS TT_Vector* v1,
- TT_Vector* v2 )
- {
- return (v1->x - v2->x);
- }
-
-
-/*******************************************************************
- *
- * Function : Project_y
- *
- * Input : Vx, Vy input vector
- *
- * Output : Returns Vy.
- *
- * Note : Used as a dummy function.
- *
- *****************************************************************/
-
- static TT_F26Dot6 Project_y( EXEC_OPS TT_Vector* v1,
- TT_Vector* v2 )
- {
- return (v1->y - v2->y);
- }
-
-
-/*******************************************************************
- *
- * Function : Compute_Funcs
- *
- * Description : Computes the projections and movement function
- * pointers according to the current graphics state.
- *
- * Input : None
- *
- *****************************************************************/
-
- static void Compute_Funcs( EXEC_OP )
- {
- if ( CUR.GS.freeVector.x == 0x4000 )
- {
- CUR.func_freeProj = (TProject_Function)Project_x;
- CUR.F_dot_P = CUR.GS.projVector.x * 0x10000L;
- }
- else
- {
- if ( CUR.GS.freeVector.y == 0x4000 )
- {
- CUR.func_freeProj = (TProject_Function)Project_y;
- CUR.F_dot_P = CUR.GS.projVector.y * 0x10000L;
- }
- else
- {
- CUR.func_freeProj = (TProject_Function)Free_Project;
- CUR.F_dot_P = (Long)CUR.GS.projVector.x * CUR.GS.freeVector.x * 4 +
- (Long)CUR.GS.projVector.y * CUR.GS.freeVector.y * 4;
- }
- }
-
- CUR.cached_metrics = FALSE;
-
- if ( CUR.GS.projVector.x == 0x4000 )
- CUR.func_project = (TProject_Function)Project_x;
- else
- {
- if ( CUR.GS.projVector.y == 0x4000 )
- CUR.func_project = (TProject_Function)Project_y;
- else
- CUR.func_project = (TProject_Function)Project;
- }
-
- if ( CUR.GS.dualVector.x == 0x4000 )
- CUR.func_dualproj = (TProject_Function)Project_x;
- else
- {
- if ( CUR.GS.dualVector.y == 0x4000 )
- CUR.func_dualproj = (TProject_Function)Project_y;
- else
- CUR.func_dualproj = (TProject_Function)Dual_Project;
- }
-
- CUR.func_move = (TMove_Function)Direct_Move;
-
- if ( CUR.F_dot_P == 0x40000000L )
- {
- if ( CUR.GS.freeVector.x == 0x4000 )
- CUR.func_move = (TMove_Function)Direct_Move_X;
- else
- {
- if ( CUR.GS.freeVector.y == 0x4000 )
- CUR.func_move = (TMove_Function)Direct_Move_Y;
- }
- }
-
- /* at small sizes, F_dot_P can become too small, resulting */
- /* in overflows and 'spikes' in a number of glyphs like 'w'. */
-
- if ( ABS( CUR.F_dot_P ) < 0x4000000L )
- CUR.F_dot_P = 0x40000000L;
-
- /* Disable cached aspect ratio */
- CUR.metrics.ratio = 0;
- }
-
-
-/*******************************************************************
- *
- * Function : Normalize
- *
- * Description : Norms a vector
- *
- * Input : Vx, Vy input vector
- * R normed unit vector
- *
- * Output : Returns FAILURE if a vector parameter is zero.
- *
- *****************************************************************/
-
- static Bool Normalize( EXEC_OPS TT_F26Dot6 Vx,
- TT_F26Dot6 Vy,
- TT_UnitVector* R )
- {
- TT_F26Dot6 W;
- Bool S1, S2;
-
-
- if ( ABS( Vx ) < 0x10000L && ABS( Vy ) < 0x10000L )
- {
- Vx *= 0x100;
- Vy *= 0x100;
-
- W = Norm( Vx, Vy );
-
- if ( W == 0 )
- {
- /* XXX : UNDOCUMENTED! It seems that it's possible to try */
- /* to normalize the vector (0,0). Return immediately */
- return SUCCESS;
- }
-
- R->x = (TT_F2Dot14)TT_MulDiv( Vx, 0x4000L, W );
- R->y = (TT_F2Dot14)TT_MulDiv( Vy, 0x4000L, W );
-
- return SUCCESS;
- }
-
- W = Norm( Vx, Vy );
-
- Vx = TT_MulDiv( Vx, 0x4000L, W );
- Vy = TT_MulDiv( Vy, 0x4000L, W );
-
- W = Vx * Vx + Vy * Vy;
-
- /* Now, we want that Sqrt( W ) = 0x4000 */
- /* Or 0x1000000 <= W < 0x1004000 */
-
- if ( Vx < 0 )
- {
- Vx = -Vx;
- S1 = TRUE;
- }
- else
- S1 = FALSE;
-
- if ( Vy < 0 )
- {
- Vy = -Vy;
- S2 = TRUE;
- }
- else
- S2 = FALSE;
-
- while ( W < 0x1000000L )
- {
- /* We need to increase W, by a minimal amount */
- if ( Vx < Vy )
- Vx++;
- else
- Vy++;
-
- W = Vx * Vx + Vy * Vy;
- }
-
- while ( W >= 0x1004000L )
- {
- /* We need to decrease W, by a minimal amount */
- if ( Vx < Vy )
- Vx--;
- else
- Vy--;
-
- W = Vx * Vx + Vy * Vy;
- }
-
- /* Note that in various cases, we can only */
- /* compute a Sqrt(W) of 0x3FFF, eg. Vx = Vy */
-
- if ( S1 )
- Vx = -Vx;
-
- if ( S2 )
- Vy = -Vy;
-
- R->x = (TT_F2Dot14)Vx; /* Type conversion */
- R->y = (TT_F2Dot14)Vy; /* Type conversion */
-
- return SUCCESS;
- }
-
-
-/****************************************************************
- *
- * Opcodes
- *
- ****************************************************************/
-
-
- static Bool Ins_SxVTL( EXEC_OPS UShort aIdx1,
- UShort aIdx2,
- Int aOpc,
- TT_UnitVector* Vec )
- {
- Long A, B, C;
- TT_Vector* p1;
- TT_Vector* p2;
-
-
- if ( BOUNDS( aIdx1, CUR.zp2.n_points ) ||
- BOUNDS( aIdx2, CUR.zp1.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return FAILURE;
- }
-
- p1 = CUR.zp1.cur + aIdx2;
- p2 = CUR.zp2.cur + aIdx1;
-
- A = p1->x - p2->x;
- B = p1->y - p2->y;
-
- if ( (aOpc & 1) != 0 )
- {
- C = B; /* CounterClockwise rotation */
- B = A;
- A = -C;
- }
-
- NORMalize( A, B, Vec );
- return SUCCESS;
- }
-
-
-/* When not using the big switch statements, the interpreter uses a */
-/* call table defined later below in this source. Each opcode must */
-/* thus have a corresponding function, even trivial ones. */
-/* */
-/* They're all defined there. */
-
-#define DO_SVTCA \
- { \
- Short A, B; \
- \
- \
- A = (Short)(CUR.opcode & 1) << 14; \
- B = A ^ (Short)0x4000; \
- \
- CUR.GS.freeVector.x = A; \
- CUR.GS.projVector.x = A; \
- CUR.GS.dualVector.x = A; \
- \
- CUR.GS.freeVector.y = B; \
- CUR.GS.projVector.y = B; \
- CUR.GS.dualVector.y = B; \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SPVTCA \
- { \
- Short A, B; \
- \
- \
- A = (Short)(CUR.opcode & 1) << 14; \
- B = A ^ (Short)0x4000; \
- \
- CUR.GS.projVector.x = A; \
- CUR.GS.dualVector.x = A; \
- \
- CUR.GS.projVector.y = B; \
- CUR.GS.dualVector.y = B; \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTCA \
- { \
- Short A, B; \
- \
- \
- A = (Short)(CUR.opcode & 1) << 14; \
- B = A ^ (Short)0x4000; \
- \
- CUR.GS.freeVector.x = A; \
- CUR.GS.freeVector.y = B; \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SPVTL \
- if ( INS_SxVTL( (UShort)args[1], \
- (UShort)args[0], \
- CUR.opcode, \
- &CUR.GS.projVector) == SUCCESS ) \
- { \
- CUR.GS.dualVector = CUR.GS.projVector; \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTL \
- if ( INS_SxVTL( (UShort)args[1], \
- (UShort)args[0], \
- CUR.opcode, \
- &CUR.GS.freeVector) == SUCCESS ) \
- COMPUTE_Funcs();
-
-
-#define DO_SFVTPV \
- CUR.GS.freeVector = CUR.GS.projVector; \
- COMPUTE_Funcs();
-
-
-#define DO_SPVFS \
- { \
- Short S; \
- Long X, Y; \
- \
- \
- /* Only use low 16bits, then sign extend */ \
- S = (Short)args[1]; \
- Y = (Long)S; \
- S = (Short)args[0]; \
- X = (Long)S; \
- \
- NORMalize( X, Y, &CUR.GS.projVector ); \
- \
- CUR.GS.dualVector = CUR.GS.projVector; \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVFS \
- { \
- Short S; \
- Long X, Y; \
- \
- \
- /* Only use low 16bits, then sign extend */ \
- S = (Short)args[1]; \
- Y = (Long)S; \
- S = (Short)args[0]; \
- X = S; \
- \
- NORMalize( X, Y, &CUR.GS.freeVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_GPV \
- args[0] = CUR.GS.projVector.x; \
- args[1] = CUR.GS.projVector.y;
-
-
-#define DO_GFV \
- args[0] = CUR.GS.freeVector.x; \
- args[1] = CUR.GS.freeVector.y;
-
-
-#define DO_SRP0 \
- CUR.GS.rp0 = (UShort)args[0];
-
-
-#define DO_SRP1 \
- CUR.GS.rp1 = (UShort)args[0];
-
-
-#define DO_SRP2 \
- CUR.GS.rp2 = (UShort)args[0];
-
-
-#define DO_RTHG \
- CUR.GS.round_state = TT_Round_To_Half_Grid; \
- CUR.func_round = (TRound_Function)Round_To_Half_Grid;
-
-
-#define DO_RTG \
- CUR.GS.round_state = TT_Round_To_Grid; \
- CUR.func_round = (TRound_Function)Round_To_Grid;
-
-
-#define DO_RTDG \
- CUR.GS.round_state = TT_Round_To_Double_Grid; \
- CUR.func_round = (TRound_Function)Round_To_Double_Grid;
-
-
-#define DO_RUTG \
- CUR.GS.round_state = TT_Round_Up_To_Grid; \
- CUR.func_round = (TRound_Function)Round_Up_To_Grid;
-
-
-#define DO_RDTG \
- CUR.GS.round_state = TT_Round_Down_To_Grid; \
- CUR.func_round = (TRound_Function)Round_Down_To_Grid;
-
-
-#define DO_ROFF \
- CUR.GS.round_state = TT_Round_Off; \
- CUR.func_round = (TRound_Function)Round_None;
-
-
-#define DO_SROUND \
- SET_SuperRound( 0x4000L, args[0] ); \
- CUR.GS.round_state = TT_Round_Super; \
- CUR.func_round = (TRound_Function)Round_Super;
-
-
-#define DO_S45ROUND \
- SET_SuperRound( 0x2D41L, args[0] ); \
- CUR.GS.round_state = TT_Round_Super_45; \
- CUR.func_round = (TRound_Function)Round_Super_45;
-
-
-#define DO_SLOOP \
- if ( args[0] < 0 ) \
- CUR.error = TT_Err_Bad_Argument; \
- else \
- CUR.GS.loop = args[0];
-
-
-#define DO_SMD \
- CUR.GS.minimum_distance = (TT_F26Dot6)args[0];
-
-
-#define DO_SCVTCI \
- CUR.GS.control_value_cutin = (TT_F26Dot6)args[0];
-
-
-#define DO_SSWCI \
- CUR.GS.single_width_cutin = (TT_F26Dot6)args[0];
-
-
- /* XXX : UNDOCUMENTED! or bug in the Windows engine? */
- /* */
- /* It seems that the value that is read here is */
- /* expressed in 16.16 format, rather than in */
- /* font units.. */
- /* */
-#define DO_SSW \
- CUR.GS.single_width_value = (TT_F26Dot6)(args[0] >> 10);
-
-
-#define DO_FLIPON \
- CUR.GS.auto_flip = TRUE;
-
-
-#define DO_FLIPOFF \
- CUR.GS.auto_flip = FALSE;
-
-
-#define DO_SDB \
- CUR.GS.delta_base = (Short)args[0];
-
-
-#define DO_SDS \
- CUR.GS.delta_shift = (Short)args[0];
-
-
-#define DO_MD /* nothing */
-
-
-#define DO_MPPEM \
- args[0] = CURRENT_Ppem();
-
-
-#define DO_MPS \
- args[0] = CUR.metrics.pointSize;
-
-
-#define DO_DUP \
- args[1] = args[0];
-
-
-#define DO_CLEAR \
- CUR.new_top = 0;
-
-
-#define DO_SWAP \
- { \
- Long L; \
- \
- L = args[0]; \
- args[0] = args[1]; \
- args[1] = L; \
- }
-
-
-#define DO_DEPTH \
- args[0] = CUR.top;
-
-
-#define DO_CINDEX \
- { \
- Long L; \
- \
- \
- L = args[0]; \
- \
- if ( L <= 0 || L > CUR.args ) \
- CUR.error = TT_Err_Invalid_Reference; \
- else \
- args[0] = CUR.stack[CUR.args - L]; \
- }
-
-
-#define DO_JROT \
- if ( args[1] != 0 ) \
- { \
- CUR.IP += args[0]; \
- CUR.step_ins = FALSE; \
- }
-
-
-#define DO_JMPR \
- CUR.IP += args[0]; \
- CUR.step_ins = FALSE;
-
-
-#define DO_JROF \
- if ( args[1] == 0 ) \
- { \
- CUR.IP += args[0]; \
- CUR.step_ins = FALSE; \
- }
-
-
-#define DO_LT \
- args[0] = (args[0] < args[1]);
-
-
-#define DO_LTEQ \
- args[0] = (args[0] <= args[1]);
-
-
-#define DO_GT \
- args[0] = (args[0] > args[1]);
-
-
-#define DO_GTEQ \
- args[0] = (args[0] >= args[1]);
-
-
-#define DO_EQ \
- args[0] = (args[0] == args[1]);
-
-
-#define DO_NEQ \
- args[0] = (args[0] != args[1]);
-
-
-#define DO_ODD \
- args[0] = ( (CUR_Func_round( args[0], 0 ) & 127) == 64 );
-
-
-#define DO_EVEN \
- args[0] = ( (CUR_Func_round( args[0], 0 ) & 127) == 0 );
-
-
-#define DO_AND \
- args[0] = ( args[0] && args[1] );
-
-
-#define DO_OR \
- args[0] = ( args[0] || args[1] );
-
-
-#define DO_NOT \
- args[0] = !args[0];
-
-
-#define DO_ADD \
- args[0] += args[1];
-
-
-#define DO_SUB \
- args[0] -= args[1];
-
-
-#define DO_DIV \
- if ( args[1] == 0 ) \
- CUR.error = TT_Err_Divide_By_Zero; \
- else \
- args[0] = TT_MulDiv( args[0], 64L, args[1] );
-
-
-#define DO_MUL \
- args[0] = TT_MulDiv( args[0], args[1], 64L );
-
-
-#define DO_ABS \
- args[0] = ABS( args[0] );
-
-
-#define DO_NEG \
- args[0] = -args[0];
-
-
-#define DO_FLOOR \
- args[0] &= -64;
-
-
-#define DO_CEILING \
- args[0] = (args[0] + 63) & (-64);
-
-
-#define DO_RS \
- { \
- ULong I = (ULong)args[0]; \
- if ( BOUNDS( I, CUR.storeSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- else \
- args[0] = 0; \
- } \
- else \
- args[0] = CUR.storage[I]; \
- }
-
-
-#define DO_WS \
- { \
- ULong I = (ULong)args[0]; \
- if ( BOUNDS( I, CUR.storeSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR.storage[I] = args[1]; \
- }
-
-
-
-#define DO_RCVT \
- { \
- ULong I = (ULong)args[0]; \
- if ( BOUNDS( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- else \
- args[0] = 0; \
- } \
- else \
- args[0] = CUR_Func_read_cvt(I); \
- }
-
-
-#define DO_WCVTP \
- { \
- ULong I = (ULong)args[0]; \
- if ( BOUNDS( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR_Func_write_cvt( I, args[1] ); \
- }
-
-
-#define DO_WCVTF \
- { \
- ULong I = (ULong)args[0]; \
- if ( BOUNDS( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR.cvt[I] = FUnits_To_Pixels( EXEC_ARGS (Short)args[1] ); \
- }
-
-
-#define DO_DEBUG \
- CUR.error = TT_Err_Debug_OpCode;
-
-
-#define DO_ROUND \
- args[0] = CUR_Func_round( args[0], \
- CUR.metrics.compensations[CUR.opcode-0x68] );
-
-
-#define DO_NROUND \
- args[0] = Round_None( EXEC_ARGS \
- args[0], \
- CUR.metrics.compensations[CUR.opcode - 0x6C] );
-
-
-#define DO_MAX \
- if ( args[1] > args[0] ) \
- args[0] = args[1];
-
-
-#define DO_MIN \
- if ( args[1] < args[0] ) \
- args[0] = args[1];
-
-
-#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-#undef ARRAY_BOUND_ERROR
-#define ARRAY_BOUND_ERROR \
- { \
- CUR.error = TT_Err_Invalid_Reference; \
- return; \
- }
-
-
-/*******************************************/
-/* SVTCA[a] : Set F and P vectors to axis */
-/* CodeRange : $00-$01 */
-/* Stack : --> */
-
- static void Ins_SVTCA( INS_ARG )
- {
- DO_SVTCA
- }
-
-
-/*******************************************/
-/* SPVTCA[a] : Set PVector to Axis */
-/* CodeRange : $02-$03 */
-/* Stack : --> */
-
- static void Ins_SPVTCA( INS_ARG )
- {
- DO_SPVTCA
- }
-
-
-/*******************************************/
-/* SFVTCA[a] : Set FVector to Axis */
-/* CodeRange : $04-$05 */
-/* Stack : --> */
-
- static void Ins_SFVTCA( INS_ARG )
- {
- DO_SFVTCA
- }
-
-/*******************************************/
-/* SPVTL[a] : Set PVector to Line */
-/* CodeRange : $06-$07 */
-/* Stack : uint32 uint32 --> */
-
- static void Ins_SPVTL( INS_ARG )
- {
- DO_SPVTL
- }
-
-
-/*******************************************/
-/* SFVTL[a] : Set FVector to Line */
-/* CodeRange : $08-$09 */
-/* Stack : uint32 uint32 --> */
-
- static void Ins_SFVTL( INS_ARG )
- {
- DO_SFVTL
- }
-
-
-/*******************************************/
-/* SFVTPV[] : Set FVector to PVector */
-/* CodeRange : $0E */
-/* Stack : --> */
-
- static void Ins_SFVTPV( INS_ARG )
- {
- DO_SFVTPV
- }
-
-
-/*******************************************/
-/* SPVFS[] : Set PVector From Stack */
-/* CodeRange : $0A */
-/* Stack : f2.14 f2.14 --> */
-
- static void Ins_SPVFS( INS_ARG )
- {
- DO_SPVFS
- }
-
-
-/*******************************************/
-/* SFVFS[] : Set FVector From Stack */
-/* CodeRange : $0B */
-/* Stack : f2.14 f2.14 --> */
-
- static void Ins_SFVFS( INS_ARG )
- {
- DO_SFVFS
- }
-
-
-/*******************************************/
-/* GPV[] : Get Projection Vector */
-/* CodeRange : $0C */
-/* Stack : ef2.14 --> ef2.14 */
-
- static void Ins_GPV( INS_ARG )
- {
- DO_GPV
- }
-
-
-/*******************************************/
-/* GFV[] : Get Freedom Vector */
-/* CodeRange : $0D */
-/* Stack : ef2.14 --> ef2.14 */
-
- static void Ins_GFV( INS_ARG )
- {
- DO_GFV
- }
-
-
-/*******************************************/
-/* SRP0[] : Set Reference Point 0 */
-/* CodeRange : $10 */
-/* Stack : uint32 --> */
-
- static void Ins_SRP0( INS_ARG )
- {
- DO_SRP0
- }
-
-
-/*******************************************/
-/* SRP1[] : Set Reference Point 1 */
-/* CodeRange : $11 */
-/* Stack : uint32 --> */
-
- static void Ins_SRP1( INS_ARG )
- {
- DO_SRP1
- }
-
-
-/*******************************************/
-/* SRP2[] : Set Reference Point 2 */
-/* CodeRange : $12 */
-/* Stack : uint32 --> */
-
- static void Ins_SRP2( INS_ARG )
- {
- DO_SRP2
- }
-
-
-/*******************************************/
-/* RTHG[] : Round To Half Grid */
-/* CodeRange : $19 */
-/* Stack : --> */
-
- static void Ins_RTHG( INS_ARG )
- {
- DO_RTHG
- }
-
-
-/*******************************************/
-/* RTG[] : Round To Grid */
-/* CodeRange : $18 */
-/* Stack : --> */
-
- static void Ins_RTG( INS_ARG )
- {
- DO_RTG
- }
-
-
-/*******************************************/
-/* RTDG[] : Round To Double Grid */
-/* CodeRange : $3D */
-/* Stack : --> */
-
- static void Ins_RTDG( INS_ARG )
- {
- DO_RTDG
- }
-
-
-/*******************************************/
-/* RUTG[] : Round Up To Grid */
-/* CodeRange : $7C */
-/* Stack : --> */
-
- static void Ins_RUTG( INS_ARG )
- {
- DO_RUTG
- }
-
-
-/*******************************************/
-/* RDTG[] : Round Down To Grid */
-/* CodeRange : $7D */
-/* Stack : --> */
-
- static void Ins_RDTG( INS_ARG )
- {
- DO_RDTG
- }
-
-
-/*******************************************/
-/* ROFF[] : Round OFF */
-/* CodeRange : $7A */
-/* Stack : --> */
-
- static void Ins_ROFF( INS_ARG )
- {
- DO_ROFF
- }
-
-
-/*******************************************/
-/* SROUND[] : Super ROUND */
-/* CodeRange : $76 */
-/* Stack : Eint8 --> */
-
- static void Ins_SROUND( INS_ARG )
- {
- DO_SROUND
- }
-
-
-/*******************************************/
-/* S45ROUND[]: Super ROUND 45 degrees */
-/* CodeRange : $77 */
-/* Stack : uint32 --> */
-
- static void Ins_S45ROUND( INS_ARG )
- {
- DO_S45ROUND
- }
-
-
-/*******************************************/
-/* SLOOP[] : Set LOOP variable */
-/* CodeRange : $17 */
-/* Stack : int32? --> */
-
- static void Ins_SLOOP( INS_ARG )
- {
- DO_SLOOP
- }
-
-
-/*******************************************/
-/* SMD[] : Set Minimum Distance */
-/* CodeRange : $1A */
-/* Stack : f26.6 --> */
-
- static void Ins_SMD( INS_ARG )
- {
- DO_SMD
- }
-
-
-/**********************************************/
-/* SCVTCI[] : Set Control Value Table Cut In */
-/* CodeRange : $1D */
-/* Stack : f26.6 --> */
-
- static void Ins_SCVTCI( INS_ARG )
- {
- DO_SCVTCI
- }
-
-
-/**********************************************/
-/* SSWCI[] : Set Single Width Cut In */
-/* CodeRange : $1E */
-/* Stack : f26.6 --> */
-
- static void Ins_SSWCI( INS_ARG )
- {
- DO_SSWCI
- }
-
-
-/**********************************************/
-/* SSW[] : Set Single Width */
-/* CodeRange : $1F */
-/* Stack : int32? --> */
-
- static void Ins_SSW( INS_ARG )
- {
- DO_SSW
- }
-
-
-/**********************************************/
-/* FLIPON[] : Set Auto_flip to On */
-/* CodeRange : $4D */
-/* Stack : --> */
-
- static void Ins_FLIPON( INS_ARG )
- {
- DO_FLIPON
- }
-
-
-/**********************************************/
-/* FLIPOFF[] : Set Auto_flip to Off */
-/* CodeRange : $4E */
-/* Stack : --> */
-
- static void Ins_FLIPOFF( INS_ARG )
- {
- DO_FLIPOFF
- }
-
-
-/**********************************************/
-/* SANGW[] : Set Angle Weight */
-/* CodeRange : $7E */
-/* Stack : uint32 --> */
-
- static void Ins_SANGW( INS_ARG )
- {
- /* instruction not supported anymore */
- }
-
-
-/**********************************************/
-/* SDB[] : Set Delta Base */
-/* CodeRange : $5E */
-/* Stack : uint32 --> */
-
- static void Ins_SDB( INS_ARG )
- {
- DO_SDB
- }
-
-
-/**********************************************/
-/* SDS[] : Set Delta Shift */
-/* CodeRange : $5F */
-/* Stack : uint32 --> */
-
- static void Ins_SDS( INS_ARG )
- {
- DO_SDS
- }
-
-
-/**********************************************/
-/* MPPEM[] : Measure Pixel Per EM */
-/* CodeRange : $4B */
-/* Stack : --> Euint16 */
-
- static void Ins_MPPEM( INS_ARG )
- {
- DO_MPPEM
- }
-
-
-/**********************************************/
-/* MPS[] : Measure PointSize */
-/* CodeRange : $4C */
-/* Stack : --> Euint16 */
-
- static void Ins_MPS( INS_ARG )
- {
- DO_MPS
- }
-
-/*******************************************/
-/* DUP[] : Duplicate top stack element */
-/* CodeRange : $20 */
-/* Stack : StkElt --> StkElt StkElt */
-
- static void Ins_DUP( INS_ARG )
- {
- DO_DUP
- }
-
-
-/*******************************************/
-/* POP[] : POPs the stack's top elt. */
-/* CodeRange : $21 */
-/* Stack : StkElt --> */
-
- static void Ins_POP( INS_ARG )
- {
- /* nothing to do */
- }
-
-
-/*******************************************/
-/* CLEAR[] : Clear the entire stack */
-/* CodeRange : $22 */
-/* Stack : StkElt... --> */
-
- static void Ins_CLEAR( INS_ARG )
- {
- DO_CLEAR
- }
-
-
-/*******************************************/
-/* SWAP[] : Swap the top two elements */
-/* CodeRange : $23 */
-/* Stack : 2 * StkElt --> 2 * StkElt */
-
- static void Ins_SWAP( INS_ARG )
- {
- DO_SWAP
- }
-
-
-/*******************************************/
-/* DEPTH[] : return the stack depth */
-/* CodeRange : $24 */
-/* Stack : --> uint32 */
-
- static void Ins_DEPTH( INS_ARG )
- {
- DO_DEPTH
- }
-
-
-/*******************************************/
-/* CINDEX[] : copy indexed element */
-/* CodeRange : $25 */
-/* Stack : int32 --> StkElt */
-
- static void Ins_CINDEX( INS_ARG )
- {
- DO_CINDEX
- }
-
-
-/*******************************************/
-/* EIF[] : End IF */
-/* CodeRange : $59 */
-/* Stack : --> */
-
- static void Ins_EIF( INS_ARG )
- {
- /* nothing to do */
- }
-
-
-/*******************************************/
-/* JROT[] : Jump Relative On True */
-/* CodeRange : $78 */
-/* Stack : StkElt int32 --> */
-
- static void Ins_JROT( INS_ARG )
- {
- DO_JROT
- }
-
-
-/*******************************************/
-/* JMPR[] : JuMP Relative */
-/* CodeRange : $1C */
-/* Stack : int32 --> */
-
- static void Ins_JMPR( INS_ARG )
- {
- DO_JMPR
- }
-
-
-/*******************************************/
-/* JROF[] : Jump Relative On False */
-/* CodeRange : $79 */
-/* Stack : StkElt int32 --> */
-
- static void Ins_JROF( INS_ARG )
- {
- DO_JROF
- }
-
-
-/*******************************************/
-/* LT[] : Less Than */
-/* CodeRange : $50 */
-/* Stack : int32? int32? --> bool */
-
- static void Ins_LT( INS_ARG )
- {
- DO_LT
- }
-
-
-/*******************************************/
-/* LTEQ[] : Less Than or EQual */
-/* CodeRange : $51 */
-/* Stack : int32? int32? --> bool */
-
- static void Ins_LTEQ( INS_ARG )
- {
- DO_LTEQ
- }
-
-
-/*******************************************/
-/* GT[] : Greater Than */
-/* CodeRange : $52 */
-/* Stack : int32? int32? --> bool */
-
- static void Ins_GT( INS_ARG )
- {
- DO_GT
- }
-
-
-/*******************************************/
-/* GTEQ[] : Greater Than or EQual */
-/* CodeRange : $53 */
-/* Stack : int32? int32? --> bool */
-
- static void Ins_GTEQ( INS_ARG )
- {
- DO_GTEQ
- }
-
-
-/*******************************************/
-/* EQ[] : EQual */
-/* CodeRange : $54 */
-/* Stack : StkElt StkElt --> bool */
-
- static void Ins_EQ( INS_ARG )
- {
- DO_EQ
- }
-
-
-/*******************************************/
-/* NEQ[] : Not EQual */
-/* CodeRange : $55 */
-/* Stack : StkElt StkElt --> bool */
-
- static void Ins_NEQ( INS_ARG )
- {
- DO_NEQ
- }
-
-
-/*******************************************/
-/* ODD[] : Odd */
-/* CodeRange : $56 */
-/* Stack : f26.6 --> bool */
-
- static void Ins_ODD( INS_ARG )
- {
- DO_ODD
- }
-
-
-/*******************************************/
-/* EVEN[] : Even */
-/* CodeRange : $57 */
-/* Stack : f26.6 --> bool */
-
- static void Ins_EVEN( INS_ARG )
- {
- DO_EVEN
- }
-
-
-/*******************************************/
-/* AND[] : logical AND */
-/* CodeRange : $5A */
-/* Stack : uint32 uint32 --> uint32 */
-
- static void Ins_AND( INS_ARG )
- {
- DO_AND
- }
-
-
-/*******************************************/
-/* OR[] : logical OR */
-/* CodeRange : $5B */
-/* Stack : uint32 uint32 --> uint32 */
-
- static void Ins_OR( INS_ARG )
- {
- DO_OR
- }
-
-
-/*******************************************/
-/* NOT[] : logical NOT */
-/* CodeRange : $5C */
-/* Stack : StkElt --> uint32 */
-
- static void Ins_NOT( INS_ARG )
- {
- DO_NOT
- }
-
-
-/*******************************************/
-/* ADD[] : ADD */
-/* CodeRange : $60 */
-/* Stack : f26.6 f26.6 --> f26.6 */
-
- static void Ins_ADD( INS_ARG )
- {
- DO_ADD
- }
-
-
-/*******************************************/
-/* SUB[] : SUBstract */
-/* CodeRange : $61 */
-/* Stack : f26.6 f26.6 --> f26.6 */
-
- static void Ins_SUB( INS_ARG )
- {
- DO_SUB
- }
-
-
-/*******************************************/
-/* DIV[] : DIVide */
-/* CodeRange : $62 */
-/* Stack : f26.6 f26.6 --> f26.6 */
-
- static void Ins_DIV( INS_ARG )
- {
- DO_DIV
- }
-
-
-/*******************************************/
-/* MUL[] : MULtiply */
-/* CodeRange : $63 */
-/* Stack : f26.6 f26.6 --> f26.6 */
-
- static void Ins_MUL( INS_ARG )
- {
- DO_MUL
- }
-
-
-/*******************************************/
-/* ABS[] : ABSolute value */
-/* CodeRange : $64 */
-/* Stack : f26.6 --> f26.6 */
-
- static void Ins_ABS( INS_ARG )
- {
- DO_ABS
- }
-
-
-/*******************************************/
-/* NEG[] : NEGate */
-/* CodeRange : $65 */
-/* Stack : f26.6 --> f26.6 */
-
- static void Ins_NEG( INS_ARG )
- {
- DO_NEG
- }
-
-
-/*******************************************/
-/* FLOOR[] : FLOOR */
-/* CodeRange : $66 */
-/* Stack : f26.6 --> f26.6 */
-
- static void Ins_FLOOR( INS_ARG )
- {
- DO_FLOOR
- }
-
-
-/*******************************************/
-/* CEILING[] : CEILING */
-/* CodeRange : $67 */
-/* f26.6 --> f26.6 */
-
- static void Ins_CEILING( INS_ARG )
- {
- DO_CEILING
- }
-
-/*******************************************/
-/* RS[] : Read Store */
-/* CodeRange : $43 */
-/* Stack : uint32 --> uint32 */
-
- static void Ins_RS( INS_ARG )
- {
- DO_RS
- }
-
-
-/*******************************************/
-/* WS[] : Write Store */
-/* CodeRange : $42 */
-/* Stack : uint32 uint32 --> */
-
- static void Ins_WS( INS_ARG )
- {
- DO_WS
- }
-
-
-/*******************************************/
-/* WCVTP[] : Write CVT in Pixel units */
-/* CodeRange : $44 */
-/* Stack : f26.6 uint32 --> */
-
- static void Ins_WCVTP( INS_ARG )
- {
- DO_WCVTP
- }
-
-
-/*******************************************/
-/* WCVTF[] : Write CVT in FUnits */
-/* CodeRange : $70 */
-/* Stack : uint32 uint32 --> */
-
- static void Ins_WCVTF( INS_ARG )
- {
- DO_WCVTF
- }
-
-
-/*******************************************/
-/* RCVT[] : Read CVT */
-/* CodeRange : $45 */
-/* Stack : uint32 --> f26.6 */
-
- static void Ins_RCVT( INS_ARG )
- {
- DO_RCVT
- }
-
-
-/********************************************/
-/* AA[] : Adjust Angle */
-/* CodeRange : $7F */
-/* Stack : uint32 --> */
-
- static void Ins_AA( INS_ARG )
- {
- /* Intentional - no longer supported */
- }
-
-
-/********************************************/
-/* DEBUG[] : DEBUG. Unsupported */
-/* CodeRange : $4F */
-/* Stack : uint32 --> */
-
-/* NOTE : The original instruction pops a value from the stack */
-
- static void Ins_DEBUG( INS_ARG )
- {
- DO_DEBUG
- }
-
-/*******************************************/
-/* ROUND[ab] : ROUND value */
-/* CodeRange : $68-$6B */
-/* Stack : f26.6 --> f26.6 */
-
- static void Ins_ROUND( INS_ARG )
- {
- DO_ROUND
- }
-
-/*******************************************/
-/* NROUND[ab]: No ROUNDing of value */
-/* CodeRange : $6C-$6F */
-/* Stack : f26.6 --> f26.6 */
-
- static void Ins_NROUND( INS_ARG )
- {
- DO_NROUND
- }
-
-
-
-/*******************************************/
-/* MAX[] : MAXimum */
-/* CodeRange : $68 */
-/* Stack : int32? int32? --> int32 */
-
- static void Ins_MAX( INS_ARG )
- {
- DO_MAX
- }
-
-
-/*******************************************/
-/* MIN[] : MINimum */
-/* CodeRange : $69 */
-/* Stack : int32? int32? --> int32 */
-
- static void Ins_MIN( INS_ARG )
- {
- DO_MIN
- }
-
-
-#endif /* !TT_CONFIG_OPTION_INTERPRETER_SWITCH */
-
-
-/* The following functions are called as is within the switch statement */
-
-/*******************************************/
-/* MINDEX[] : move indexed element */
-/* CodeRange : $26 */
-/* Stack : int32? --> StkElt */
-
- static void Ins_MINDEX( INS_ARG )
- {
- Long L, K;
-
-
- L = args[0];
-
- if ( L <= 0 || L > CUR.args )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- K = CUR.stack[CUR.args - L];
-
- MEM_Move( (&CUR.stack[CUR.args - L ]),
- (&CUR.stack[CUR.args - L + 1]),
- (L - 1) * sizeof ( Long ) );
-
- CUR.stack[CUR.args - 1] = K;
- }
-
-
-/*******************************************/
-/* ROLL[] : roll top three elements */
-/* CodeRange : $8A */
-/* Stack : 3 * StkElt --> 3 * StkElt */
-
- static void Ins_ROLL( INS_ARG )
- {
- 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 */
-/* */
-/* Instructions appear in the specs' order. */
-/* */
-/****************************************************************/
-
- static Bool SkipCode( EXEC_OP )
- {
- CUR.IP += CUR.length;
-
- if ( CUR.IP < CUR.codeSize )
- if ( CALC_Length() == SUCCESS )
- return SUCCESS;
-
- CUR.error = TT_Err_Code_Overflow;
- return FAILURE;
- }
-
-
-/*******************************************/
-/* IF[] : IF test */
-/* CodeRange : $58 */
-/* Stack : StkElt --> */
-
- static void Ins_IF( INS_ARG )
- {
- Int nIfs;
- Bool Out;
-
-
- if ( args[0] != 0 )
- return;
-
- nIfs = 1;
- Out = 0;
-
- do
- {
- if ( SKIP_Code() == FAILURE )
- return;
-
- switch ( CUR.opcode )
- {
- case 0x58: /* IF */
- nIfs++;
- break;
-
- case 0x1b: /* ELSE */
- Out = (nIfs == 1);
- break;
-
- case 0x59: /* EIF */
- nIfs--;
- Out = (nIfs == 0);
- break;
- }
- } while ( Out == 0 );
- }
-
-
-/*******************************************/
-/* ELSE[] : ELSE */
-/* CodeRange : $1B */
-/* Stack : --> */
-
- static void Ins_ELSE( INS_ARG )
- {
- Int nIfs;
-
-
- nIfs = 1;
-
- do
- {
- if ( SKIP_Code() == FAILURE )
- return;
-
- switch ( CUR.opcode )
- {
- case 0x58: /* IF */
- nIfs++;
- break;
-
- case 0x59: /* EIF */
- nIfs--;
- break;
- }
- } while ( nIfs != 0 );
- }
-
-
-/****************************************************************/
-/* */
-/* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */
-/* */
-/* Instructions appear in the specs' order. */
-/* */
-/****************************************************************/
-
- static PDefRecord Locate_FDef( EXEC_OPS Int n, Bool new_def )
- {
- PDefRecord def;
- UShort hash;
- UShort cnt;
-
- /* The function table is interpreted as a simple hash table */
- /* with indexes computed modulo maxFDefs and the linear search */
- /* of free cells in the case of a collision. */
- /* Except for some old Apple fonts, all functions in a TrueType */
- /* font fit into 0..maxFDefs - 1 range and the lookup is */
- /* reduced to a single step. */
-
- /* Minor optimization. */
- if ( !new_def && ( n < 0 || n > CUR.maxFunc ) )
- return NULL;
-
- for ( cnt = 0; cnt < CUR.maxFDefs; ++cnt )
- {
- hash = ( (UShort)n + cnt ) % CUR.maxFDefs;
- def = &CUR.FDefs[ hash ];
- if ( !def->Active )
- return new_def ? def : NULL;
- if ( def->Opc == n )
- return def;
- }
-
- /* The table is full and the entry has not been found. */
- return NULL;
- }
-
-
-/*******************************************/
-/* FDEF[] : Function DEFinition */
-/* CodeRange : $2C */
-/* Stack : uint32 --> */
-
- static void Ins_FDEF( INS_ARG )
- {
- Int n;
- PDefRecord def;
-
-
- /* check that there is enough room */
- if ( CUR.numFDefs >= CUR.maxFDefs )
- {
- /* We could introduce a new error message, but we're too close */
- /* from the release to change all the 'po' files again.. */
- CUR.error = TT_Err_Too_Many_Ins;
- return;
- }
-
- n = (Int)args[0];
- if ( n < 0 || (ULong)n != args[0] )
- {
- /* Gotcha. Function index is uint32 according to the specs */
- /* but TDefRecord.Opc is defined as Int. We cannot store */
- /* the definition of this function. */
- CUR.error = TT_Err_Bad_Argument;
- return;
- }
-
- def = Locate_FDef( EXEC_ARGS n, TRUE );
- if ( !def )
- {
- /* Oh, oh. Something is wrong. Locate_FDef should never fail here. */
- CUR.error = TT_Err_Too_Many_Ins;
- return;
- }
-
- /* Some font programs are broken enough to redefine functions! */
- if ( !def->Active )
- CUR.numFDefs++;
-
- def->Range = CUR.curRange;
- def->Opc = n;
- def->Start = CUR.IP + 1;
- def->Active = TRUE;
-
- if ( n > CUR.maxFunc )
- CUR.maxFunc = n;
-
- /* Now skip the whole function definition. */
- /* We don't allow nested IDEFS & FDEFs. */
-
- while ( SKIP_Code() == SUCCESS )
- {
- switch ( CUR.opcode )
- {
- case 0x89: /* IDEF */
- case 0x2c: /* FDEF */
- CUR.error = TT_Err_Nested_DEFS;
- return;
- case 0x2d: /* ENDF */
- return;
- }
- }
- }
-
-
-/*******************************************/
-/* ENDF[] : END Function definition */
-/* CodeRange : $2D */
-/* Stack : --> */
-
- static void Ins_ENDF( INS_ARG )
- {
- PCallRecord pRec;
-
-
- if ( CUR.callTop <= 0 ) /* We encountered an ENDF without a call */
- {
- CUR.error = TT_Err_ENDF_In_Exec_Stream;
- return;
- }
-
- CUR.callTop--;
-
- pRec = &CUR.callStack[CUR.callTop];
-
- pRec->Cur_Count--;
-
- CUR.step_ins = FALSE;
-
- if ( pRec->Cur_Count > 0 )
- {
- CUR.callTop++;
- CUR.IP = pRec->Cur_Restart;
- }
- else
- /* Loop through the current function */
- INS_Goto_CodeRange( pRec->Caller_Range,
- pRec->Caller_IP );
-
- /* Exit the current call frame. */
-
- /* NOTE: When the last intruction 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's why we do not test */
- /* the result of Ins_Goto_CodeRange() here! */
- }
-
-
-/*******************************************/
-/* CALL[] : CALL function */
-/* CodeRange : $2B */
-/* Stack : uint32? --> */
-
- static void Ins_CALL( INS_ARG )
- {
- Int n;
- PDefRecord def;
- PCallRecord pCrec;
-
-
- n = (Int)args[0];
- def = Locate_FDef( EXEC_ARGS n, FALSE );
- if ( !def )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* check call stack */
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- pCrec = CUR.callStack + CUR.callTop;
-
- pCrec->Caller_Range = CUR.curRange;
- pCrec->Caller_IP = CUR.IP + 1;
- pCrec->Cur_Count = 1;
- pCrec->Cur_Restart = def->Start;
-
- CUR.callTop++;
-
- INS_Goto_CodeRange( def->Range,
- def->Start );
-
- CUR.step_ins = FALSE;
- }
-
-
-/*******************************************/
-/* LOOPCALL[]: LOOP and CALL function */
-/* CodeRange : $2A */
-/* Stack : uint32? Eint16? --> */
-
- static void Ins_LOOPCALL( INS_ARG )
- {
- Int n;
- Long count;
- PDefRecord def;
- PCallRecord pTCR;
-
-
- n = (Int)args[1];
- def = Locate_FDef( EXEC_ARGS n, FALSE );
- if ( !def )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- count = (Long)args[0];
- if ( count <= 0 )
- return;
-
- pTCR = &CUR.callStack[CUR.callTop];
-
- pTCR->Caller_Range = CUR.curRange;
- pTCR->Caller_IP = CUR.IP + 1;
- pTCR->Cur_Count = count;
- pTCR->Cur_Restart = def->Start;
-
- CUR.callTop++;
-
- INS_Goto_CodeRange( def->Range,
- def->Start );
-
- CUR.step_ins = FALSE;
- }
-
-
-/*******************************************/
-/* IDEF[] : Instruction DEFinition */
-/* CodeRange : $89 */
-/* Stack : Eint8 --> */
-
- static void Ins_IDEF( INS_ARG )
- {
- Byte opcode;
- PDefRecord def;
- PDefRecord limit;
-
-
- opcode = (Byte)args[0];
-
- /* First of all, look for the same instruction in our table */
- def = CUR.IDefs;
- limit = def + CUR.numIDefs;
- for ( ; def < limit; def++ )
- if ( def->Opc == opcode )
- break;
-
- if ( def == limit )
- {
- /* check that there is enough room for a new instruction */
- if ( CUR.numIDefs >= CUR.maxIDefs )
- {
- /* XXX Bad error code. See FDEF[]. */
- CUR.error = TT_Err_Too_Many_Ins;
- return;
- }
- CUR.numIDefs++;
- }
-
- def->Opc = opcode;
- def->Start = CUR.IP + 1;
- def->Range = CUR.curRange;
- def->Active = TRUE;
-
- if ( opcode > CUR.maxIns )
- CUR.maxIns = opcode;
-
- /* Now skip the whole function definition */
- /* We don't allow nested IDEFs & FDEFs. */
-
- while ( SKIP_Code() == SUCCESS )
- {
- switch ( CUR.opcode )
- {
- case 0x89: /* IDEF */
- case 0x2c: /* FDEF */
- CUR.error = TT_Err_Nested_DEFS;
- return;
- case 0x2d: /* ENDF */
- return;
- }
- }
- }
-
-
-/****************************************************************/
-/* */
-/* PUSHING DATA ONTO THE INTERPRETER STACK */
-/* */
-/* Instructions appear in the specs' order. */
-/* */
-/****************************************************************/
-
-/*******************************************/
-/* NPUSHB[] : PUSH N Bytes */
-/* CodeRange : $40 */
-/* Stack : --> uint32... */
-
- static void Ins_NPUSHB( INS_ARG )
- {
- UShort L, K;
-
-
- L = (UShort)CUR.code[CUR.IP + 1];
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- for ( K = 1; K <= L; K++ )
- args[K - 1] = CUR.code[CUR.IP + K + 1];
-
- CUR.new_top += L;
- }
-
-
-/*******************************************/
-/* NPUSHW[] : PUSH N Words */
-/* CodeRange : $41 */
-/* Stack : --> int32... */
-
- static void Ins_NPUSHW( INS_ARG )
- {
- UShort L, K;
-
-
- L = (UShort)CUR.code[CUR.IP + 1];
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- CUR.IP += 2;
-
- for ( K = 0; K < L; K++ )
- args[K] = GET_ShortIns();
-
- CUR.step_ins = FALSE;
- CUR.new_top += L;
- }
-
-
-/*******************************************/
-/* PUSHB[abc]: PUSH Bytes */
-/* CodeRange : $B0-$B7 */
-/* Stack : --> uint32... */
-
- static void Ins_PUSHB( INS_ARG )
- {
- UShort L, K;
-
-
- L = (UShort)CUR.opcode - 0xB0 + 1;
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- for ( K = 1; K <= L; K++ )
- args[K - 1] = CUR.code[CUR.IP + K];
- }
-
-
-/*******************************************/
-/* PUSHW[abc]: PUSH Words */
-/* CodeRange : $B8-$BF */
-/* Stack : --> int32... */
-
- static void Ins_PUSHW( INS_ARG )
- {
- UShort L, K;
-
-
- L = (UShort)CUR.opcode - 0xB8 + 1;
-
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- CUR.IP++;
-
- for ( K = 0; K < L; K++ )
- args[K] = GET_ShortIns();
-
- CUR.step_ins = FALSE;
- }
-
-
-
-/****************************************************************/
-/* */
-/* MANAGING THE GRAPHICS STATE */
-/* */
-/* Instructions appear in the specs' order. */
-/* */
-/****************************************************************/
-
-/**********************************************/
-/* GC[a] : Get Coordinate projected onto */
-/* CodeRange : $46-$47 */
-/* Stack : uint32 --> f26.6 */
-
-/* BULLSHIT: Measures from the original glyph must be taken */
-/* along the dual projection vector! */
-
- static void Ins_GC( INS_ARG )
- {
- ULong L;
- TT_F26Dot6 R;
-
-
- L = (ULong)args[0];
-
- if ( BOUNDS( L, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- else
- R = 0;
- }
- else
- {
- if ( CUR.opcode & 1 )
- R = CUR_Func_dualproj( CUR.zp2.org + L, NULL_Vector );
- else
- R = CUR_Func_project( CUR.zp2.cur + L, NULL_Vector );
- }
-
- args[0] = R;
- }
-
-
-/**********************************************/
-/* SCFS[] : Set Coordinate From Stack */
-/* CodeRange : $48 */
-/* Stack : f26.6 uint32 --> */
-/* */
-/* Formula: */
-/* */
-/* OA := OA + ( value - OA.p )/( f.p ) * f */
-/* */
-
- static void Ins_SCFS( INS_ARG )
- {
- Long K;
- UShort L;
-
-
- L = (UShort)args[0];
-
- if ( BOUNDS( L, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- K = CUR_Func_project( CUR.zp2.cur + L, NULL_Vector );
-
- CUR_Func_move( &CUR.zp2, L, args[1] - K );
-
- /* not part of the specs, but here for safety */
-
- if ( CUR.GS.gep2 == 0 )
- CUR.zp2.org[L] = CUR.zp2.cur[L];
- }
-
-
-/**********************************************/
-/* MD[a] : Measure Distance */
-/* CodeRange : $49-$4A */
-/* Stack : uint32 uint32 --> f26.6 */
-
-/* BULLSHIT: Measure taken in the original glyph must be along */
-/* the dual projection vector. */
-
-/* Second BULLSHIT: Flag attributes are inverted! */
-/* 0 => measure distance in original outline */
-/* 1 => measure distance in grid-fitted outline */
-
-/* Third one !! : zp0 - zp1, and not "zp2 - zp1" !!! */
-/* */
-
- static void Ins_MD( INS_ARG )
- {
- UShort K, L;
- TT_F26Dot6 D;
-
-
- K = (UShort)args[1];
- L = (UShort)args[0];
-
- if( BOUNDS( L, CUR.zp0.n_points ) ||
- BOUNDS( K, CUR.zp1.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- else
- D = 0;
- }
- else
- {
- if ( CUR.opcode & 1 )
- D = CUR_Func_project( CUR.zp0.cur + L, CUR.zp1.cur + K );
- else
- D = CUR_Func_dualproj( CUR.zp0.org + L, CUR.zp1.org + K );
- }
-
- args[0] = D;
- }
-
-
-/*******************************************/
-/* SDPVTL[a] : Set Dual PVector to Line */
-/* CodeRange : $86-$87 */
-/* Stack : uint32 uint32 --> */
-
- static void Ins_SDPVTL( INS_ARG )
- {
- Long A, B, C;
- UShort p1, p2; /* was Int in pas type ERROR */
-
-
- p1 = (UShort)args[1];
- p2 = (UShort)args[0];
-
- if ( BOUNDS( p2, CUR.zp1.n_points ) ||
- BOUNDS( p1, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- {
- TT_Vector* v1 = CUR.zp1.org + p2;
- TT_Vector* v2 = CUR.zp2.org + p1;
-
-
- A = v1->x - v2->x;
- B = v1->y - v2->y;
- }
-
- if ( (CUR.opcode & 1) != 0 )
- {
- C = B; /* CounterClockwise rotation */
- B = A;
- A = -C;
- }
-
- NORMalize( A, B, &CUR.GS.dualVector );
-
- {
- TT_Vector* v1 = CUR.zp1.cur + p2;
- TT_Vector* v2 = CUR.zp2.cur + p1;
-
-
- A = v1->x - v2->x;
- B = v1->y - v2->y;
- }
-
- if ( (CUR.opcode & 1) != 0 )
- {
- C = B; /* CounterClockwise rotation */
- B = A;
- A = -C;
- }
-
- NORMalize( A, B, &CUR.GS.projVector );
-
- COMPUTE_Funcs();
- }
-
-
-/*******************************************/
-/* SZP0[] : Set Zone Pointer 0 */
-/* CodeRange : $13 */
-/* Stack : uint32 --> */
-
- static void Ins_SZP0( INS_ARG )
- {
- switch ( (Int)args[0] )
- {
- case 0:
- CUR.zp0 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp0 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.GS.gep0 = (UShort)args[0];
- }
-
-
-/*******************************************/
-/* SZP1[] : Set Zone Pointer 1 */
-/* CodeRange : $14 */
-/* Stack : uint32 --> */
-
- static void Ins_SZP1( INS_ARG )
- {
- switch ( (Int)args[0] )
- {
- case 0:
- CUR.zp1 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp1 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.GS.gep1 = (UShort)args[0];
- }
-
-
-/*******************************************/
-/* SZP2[] : Set Zone Pointer 2 */
-/* CodeRange : $15 */
-/* Stack : uint32 --> */
-
- static void Ins_SZP2( INS_ARG )
- {
- switch ( (Int)args[0] )
- {
- case 0:
- CUR.zp2 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp2 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.GS.gep2 = (UShort)args[0];
- }
-
-
-/*******************************************/
-/* SZPS[] : Set Zone Pointers */
-/* CodeRange : $16 */
-/* Stack : uint32 --> */
-
- static void Ins_SZPS( INS_ARG )
- {
- switch ( (Int)args[0] )
- {
- case 0:
- CUR.zp0 = CUR.twilight;
- break;
-
- case 1:
- CUR.zp0 = CUR.pts;
- break;
-
- default:
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- CUR.zp1 = CUR.zp0;
- CUR.zp2 = CUR.zp0;
-
- CUR.GS.gep0 = (UShort)args[0];
- CUR.GS.gep1 = (UShort)args[0];
- CUR.GS.gep2 = (UShort)args[0];
- }
-
-
-/*******************************************/
-/* INSTCTRL[]: INSTruction ConTRol */
-/* CodeRange : $8e */
-/* Stack : int32 int32 --> */
-
- static void Ins_INSTCTRL( INS_ARG )
- {
- Long K, L;
-
-
- K = args[1];
- L = args[0];
-
- if ( K < 1 || K > 2 )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( L != 0 )
- L = K;
-
- CUR.GS.instruct_control =
- (Byte)( CUR.GS.instruct_control & ~(Byte)K ) | (Byte)L;
- }
-
-
-/*******************************************/
-/* SCANCTRL[]: SCAN ConTRol */
-/* CodeRange : $85 */
-/* Stack : uint32? --> */
-
- static void Ins_SCANCTRL( INS_ARG )
- {
- Int A;
-
-
- /* Get Threshold */
- A = (Int)(args[0] & 0xFF);
-
- if ( A == 0xFF )
- {
- CUR.GS.scan_control = TRUE;
- return;
- }
- else if ( A == 0 )
- {
- CUR.GS.scan_control = FALSE;
- return;
- }
-
- A *= 64;
-
- if ( (args[0] & 0x100) != 0 && CUR.metrics.pointSize <= A )
- CUR.GS.scan_control = TRUE;
-
- if ( (args[0] & 0x200) != 0 && CUR.metrics.rotated )
- CUR.GS.scan_control = TRUE;
-
- if ( (args[0] & 0x400) != 0 && CUR.metrics.stretched )
- CUR.GS.scan_control = TRUE;
-
- if ( (args[0] & 0x800) != 0 && CUR.metrics.pointSize > A )
- CUR.GS.scan_control = FALSE;
-
- if ( (args[0] & 0x1000) != 0 && CUR.metrics.rotated )
- CUR.GS.scan_control = FALSE;
-
- if ( (args[0] & 0x2000) != 0 && CUR.metrics.stretched )
- CUR.GS.scan_control = FALSE;
-}
-
-
-/*******************************************/
-/* SCANTYPE[]: SCAN TYPE */
-/* CodeRange : $8D */
-/* Stack : uint32? --> */
-
- static void Ins_SCANTYPE( INS_ARG )
- {
- /* For compatibility with future enhancements, */
- /* we must ignore new modes */
-
- if ( args[0] >= 0 && args[0] <= 5 )
- {
- if ( args[0] == 3 )
- args[0] = 2;
-
- CUR.GS.scan_type = (Int)args[0];
- }
- }
-
-
-
-/****************************************************************/
-/* */
-/* MANAGING OUTLINES */
-/* */
-/* Instructions appear in the specs' order. */
-/* */
-/****************************************************************/
-
-/**********************************************/
-/* FLIPPT[] : FLIP PoinT */
-/* CodeRange : $80 */
-/* Stack : uint32... --> */
-
- static void Ins_FLIPPT( INS_ARG )
- {
- UShort point;
-
-
- if ( CUR.top < CUR.GS.loop )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
-
- point = (UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.pts.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- CUR.pts.touch[point] ^= TT_Flag_On_Curve;
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
-/**********************************************/
-/* FLIPRGON[]: FLIP RanGe ON */
-/* CodeRange : $81 */
-/* Stack : uint32 uint32 --> */
-/* (but UShorts are sufficient) */
-
- static void Ins_FLIPRGON( INS_ARG )
- {
- UShort I, K, L;
-
-
- K = (UShort)args[1];
- L = (UShort)args[0];
-
- if ( BOUNDS( K, CUR.pts.n_points ) ||
- BOUNDS( L, CUR.pts.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- for ( I = L; I <= K; I++ )
- CUR.pts.touch[I] |= TT_Flag_On_Curve;
- }
-
-
-/**********************************************/
-/* FLIPRGOFF : FLIP RanGe OFF */
-/* CodeRange : $82 */
-/* Stack : uint32 uint32 --> */
-/* (but UShorts are sufficient) */
-
- static void Ins_FLIPRGOFF( INS_ARG )
- {
- UShort I, K, L;
-
-
- K = (UShort)args[1];
- L = (UShort)args[0];
-
- if ( BOUNDS( K, CUR.pts.n_points ) ||
- BOUNDS( L, CUR.pts.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- for ( I = L; I <= K; I++ )
- CUR.pts.touch[I] &= ~TT_Flag_On_Curve;
- }
-
-
- static Bool Compute_Point_Displacement( EXEC_OPS
- PCoordinates x,
- PCoordinates y,
- PGlyph_Zone zone,
- UShort* refp )
- {
- TGlyph_Zone zp;
- UShort p;
- TT_F26Dot6 d;
-
-
- if ( CUR.opcode & 1 )
- {
- zp = CUR.zp0;
- p = CUR.GS.rp1;
- }
- else
- {
- zp = CUR.zp1;
- p = CUR.GS.rp2;
- }
-
- if ( BOUNDS( p, zp.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Displacement;
- return FAILURE;
- }
-
- *zone = zp;
- *refp = p;
-
- d = CUR_Func_project( zp.cur + p, zp.org + p );
-
- *x = TT_MulDiv(d, (Long)CUR.GS.freeVector.x * 0x10000L, CUR.F_dot_P );
- *y = TT_MulDiv(d, (Long)CUR.GS.freeVector.y * 0x10000L, CUR.F_dot_P );
-
- return SUCCESS;
- }
-
-
- static void Move_Zp2_Point( EXEC_OPS
- UShort point,
- TT_F26Dot6 dx,
- TT_F26Dot6 dy,
- Bool touch )
- {
- if ( CUR.GS.freeVector.x != 0 )
- {
- CUR.zp2.cur[point].x += dx;
- if ( touch )
- CUR.zp2.touch[point] |= TT_Flag_Touched_X;
- }
-
- if ( CUR.GS.freeVector.y != 0 )
- {
- CUR.zp2.cur[point].y += dy;
- if ( touch )
- CUR.zp2.touch[point] |= TT_Flag_Touched_Y;
- }
- }
-
-
-/**********************************************/
-/* SHP[a] : SHift Point by the last point */
-/* CodeRange : $32-33 */
-/* Stack : uint32... --> */
-
- static void Ins_SHP( INS_ARG )
- {
- TGlyph_Zone zp;
- UShort refp;
-
- TT_F26Dot6 dx,
- dy;
- UShort point;
-
-
- if ( CUR.top < CUR.GS.loop )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
- return;
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
- point = (UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- /* UNDOCUMENTED! SHP touches the points */
- MOVE_Zp2_Point( point, dx, dy, TRUE );
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
-/**********************************************/
-/* SHC[a] : SHift Contour */
-/* CodeRange : $34-35 */
-/* Stack : uint32 --> */
-
- static void Ins_SHC( INS_ARG )
- {
- TGlyph_Zone zp;
- UShort refp;
- TT_F26Dot6 dx,
- dy;
-
- Short contour;
- UShort first_point, last_point, i;
-
-
- contour = (UShort)args[0];
-
- if ( BOUNDS( contour, CUR.pts.n_contours ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
- return;
-
- if ( contour == 0 )
- first_point = 0;
- else
- first_point = CUR.pts.contours[contour - 1] + 1;
-
- last_point = CUR.pts.contours[contour];
-
- /* XXX: this is probably wrong... at least it prevents memory */
- /* corruption when zp2 is the twilight zone */
- if ( last_point > CUR.zp2.n_points )
- {
- if ( CUR.zp2.n_points > 0 )
- last_point = CUR.zp2.n_points - 1;
- else
- last_point = 0;
- }
-
- /* UNDOCUMENTED! SHC doesn't touch the points */
- for ( i = first_point; i <= last_point; i++ )
- {
- if ( zp.cur != CUR.zp2.cur || refp != i )
- MOVE_Zp2_Point( i, dx, dy, FALSE );
- }
- }
-
-
-/**********************************************/
-/* SHZ[a] : SHift Zone */
-/* CodeRange : $36-37 */
-/* Stack : uint32 --> */
-
- static void Ins_SHZ( INS_ARG )
- {
- TGlyph_Zone zp;
- UShort refp;
- TT_F26Dot6 dx,
- dy;
-
- UShort last_point, i;
-
-
- if ( BOUNDS( args[0], 2 ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
- return;
-
- if ( CUR.zp2.n_points > 0 )
- last_point = CUR.zp2.n_points - 1;
- else
- last_point = 0;
-
- /* UNDOCUMENTED! SHZ doesn't touch the points */
- for ( i = 0; i <= last_point; i++ )
- {
- if ( zp.cur != CUR.zp2.cur || refp != i )
- MOVE_Zp2_Point( i, dx, dy, FALSE );
- }
- }
-
-
-/**********************************************/
-/* SHPIX[] : SHift points by a PIXel amount */
-/* CodeRange : $38 */
-/* Stack : f26.6 uint32... --> */
-
- static void Ins_SHPIX( INS_ARG )
- {
- TT_F26Dot6 dx, dy;
- UShort point;
-
-
- if ( CUR.top < CUR.GS.loop + 1 )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- dx = TT_MulDiv( args[0],
- (Long)CUR.GS.freeVector.x,
- 0x4000 );
- dy = TT_MulDiv( args[0],
- (Long)CUR.GS.freeVector.y,
- 0x4000 );
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
-
- point = (UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- MOVE_Zp2_Point( point, dx, dy, TRUE );
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
-/**********************************************/
-/* MSIRP[a] : Move Stack Indirect Relative */
-/* CodeRange : $3A-$3B */
-/* Stack : f26.6 uint32 --> */
-
- static void Ins_MSIRP( INS_ARG )
- {
- UShort point;
- TT_F26Dot6 distance;
-
-
- point = (UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* XXX: UNDOCUMENTED! behaviour */
- if ( CUR.GS.gep0 == 0 ) /* if in twilight zone */
- {
- CUR.zp1.org[point] = CUR.zp0.org[CUR.GS.rp0];
- CUR.zp1.cur[point] = CUR.zp1.org[point];
- }
-
- distance = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
-
- CUR_Func_move( &CUR.zp1, point, args[1] - distance );
-
- CUR.GS.rp1 = CUR.GS.rp0;
- CUR.GS.rp2 = point;
-
- if ( (CUR.opcode & 1) != 0 )
- CUR.GS.rp0 = point;
- }
-
-
-/**********************************************/
-/* MDAP[a] : Move Direct Absolute Point */
-/* CodeRange : $2E-$2F */
-/* Stack : uint32 --> */
-
- static void Ins_MDAP( INS_ARG )
- {
- UShort point;
- TT_F26Dot6 cur_dist,
- distance;
-
-
- point = (UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* XXX: Is there some undocumented feature while in the */
- /* twilight zone? ? */
- if ( (CUR.opcode & 1) != 0 )
- {
- cur_dist = CUR_Func_project( CUR.zp0.cur + point, NULL_Vector );
- distance = CUR_Func_round( cur_dist,
- CUR.metrics.compensations[0] ) - cur_dist;
- }
- else
- distance = 0;
-
- CUR_Func_move( &CUR.zp0, point, distance );
-
- CUR.GS.rp0 = point;
- CUR.GS.rp1 = point;
- }
-
-
-/**********************************************/
-/* MIAP[a] : Move Indirect Absolute Point */
-/* CodeRange : $3E-$3F */
-/* Stack : uint32 uint32 --> */
-
- static void Ins_MIAP( INS_ARG )
- {
- ULong cvtEntry;
- UShort point;
- TT_F26Dot6 distance,
- org_dist;
-
-
- cvtEntry = (ULong)args[1];
- point = (UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp0.n_points ) ||
- BOUNDS( cvtEntry, CUR.cvtSize ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* UNDOCUMENTED! */
- /* */
- /* The behaviour of an MIAP instruction is quite */
- /* different when used in the twilight zone. */
- /* */
- /* First, no control value cutin 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 "illegal" according to the */
- /* specs :) */
- /* */
- /* We implement it with a special sequence for the */
- /* twilight zone. This is a bad hack, but it seems */
- /* to work. */
-
- distance = CUR_Func_read_cvt( cvtEntry );
-
- if ( CUR.GS.gep0 == 0 ) /* If in twilight zone */
- {
- CUR.zp0.org[point].x = TT_MulDiv( CUR.GS.freeVector.x,
- distance, 0x4000L );
- CUR.zp0.org[point].y = TT_MulDiv( CUR.GS.freeVector.y,
- distance, 0x4000L );
- CUR.zp0.cur[point] = CUR.zp0.org[point];
- }
-
- org_dist = CUR_Func_project( CUR.zp0.cur + point, NULL_Vector );
-
- if ( (CUR.opcode & 1) != 0 ) /* rounding and control cutin flag */
- {
- if ( ABS( distance - org_dist ) > CUR.GS.control_value_cutin )
- distance = org_dist;
-
- distance = CUR_Func_round( distance, CUR.metrics.compensations[0] );
- }
-
- CUR_Func_move( &CUR.zp0, point, distance - org_dist );
-
- CUR.GS.rp0 = point;
- CUR.GS.rp1 = point;
- }
-
-
-/**********************************************/
-/* MDRP[abcde] : Move Direct Relative Point */
-/* CodeRange : $C0-$DF */
-/* Stack : uint32 --> */
-
- static void Ins_MDRP( INS_ARG )
- {
- UShort point;
- TT_F26Dot6 org_dist, distance;
-
-
- point = (UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* XXX: Is there some undocumented feature while in the */
- /* twilight zone? */
-
- org_dist = CUR_Func_dualproj( CUR.zp1.org + point,
- CUR.zp0.org + CUR.GS.rp0 );
-
- /* single width cutin test */
-
- if ( ABS( org_dist ) < CUR.GS.single_width_cutin )
- {
- if ( org_dist >= 0 )
- org_dist = CUR.GS.single_width_value;
- else
- org_dist = -CUR.GS.single_width_value;
- }
-
- /* round flag */
-
- if ( (CUR.opcode & 4) != 0 )
- distance = CUR_Func_round( org_dist,
- CUR.metrics.compensations[CUR.opcode & 3] );
- else
- distance = Round_None( EXEC_ARGS
- org_dist,
- CUR.metrics.compensations[CUR.opcode & 3] );
-
- /* minimum distance flag */
-
- if ( (CUR.opcode & 8) != 0 )
- {
- if ( org_dist >= 0 )
- {
- if ( distance < CUR.GS.minimum_distance )
- distance = CUR.GS.minimum_distance;
- }
- else
- {
- if ( distance > -CUR.GS.minimum_distance )
- distance = -CUR.GS.minimum_distance;
- }
- }
-
- /* now move the point */
-
- org_dist = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
-
- CUR_Func_move( &CUR.zp1, point, distance - org_dist );
-
- CUR.GS.rp1 = CUR.GS.rp0;
- CUR.GS.rp2 = point;
-
- if ( (CUR.opcode & 16) != 0 )
- CUR.GS.rp0 = point;
- }
-
-
-/**********************************************/
-/* MIRP[abcde] : Move Indirect Relative Point */
-/* CodeRange : $E0-$FF */
-/* Stack : int32? uint32 --> */
-
- static void Ins_MIRP( INS_ARG )
- {
- UShort point;
- ULong cvtEntry;
-
- TT_F26Dot6 cvt_dist,
- distance,
- cur_dist,
- org_dist;
-
-
- point = (UShort)args[0];
- cvtEntry = (ULong)(args[1] + 1);
-
- /* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
-
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( cvtEntry, CUR.cvtSize + 1 ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- if ( !cvtEntry )
- cvt_dist = 0;
- else
- cvt_dist = CUR_Func_read_cvt( cvtEntry - 1 );
-
- /* single width test */
-
- if ( ABS( cvt_dist ) < CUR.GS.single_width_cutin )
- {
- if ( cvt_dist >= 0 )
- cvt_dist = CUR.GS.single_width_value;
- else
- cvt_dist = -CUR.GS.single_width_value;
- }
-
- /* XXX : UNDOCUMENTED! -- twilight zone */
-
- if ( CUR.GS.gep1 == 0 )
- {
- CUR.zp1.org[point].x = CUR.zp0.org[CUR.GS.rp0].x +
- TT_MulDiv( cvt_dist,
- CUR.GS.freeVector.x,
- 0x4000 );
-
- CUR.zp1.org[point].y = CUR.zp0.org[CUR.GS.rp0].y +
- TT_MulDiv( cvt_dist,
- CUR.GS.freeVector.y,
- 0x4000 );
-
- CUR.zp1.cur[point] = CUR.zp1.org[point];
- }
-
- org_dist = CUR_Func_dualproj( CUR.zp1.org + point,
- CUR.zp0.org + CUR.GS.rp0 );
-
- cur_dist = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
-
- /* auto-flip test */
-
- if ( CUR.GS.auto_flip )
- {
- if ( (org_dist ^ cvt_dist) < 0 )
- cvt_dist = -cvt_dist;
- }
-
- /* control value cutin and round */
-
- if ( (CUR.opcode & 4) != 0 )
- {
- /* XXX: UNDOCUMENTED! Only perform cut-in test when both points */
- /* refer to the same zone. */
-
- if ( CUR.GS.gep0 == CUR.GS.gep1 )
- if ( ABS( cvt_dist - org_dist ) >= CUR.GS.control_value_cutin )
- cvt_dist = org_dist;
-
- distance = CUR_Func_round( cvt_dist,
- CUR.metrics.compensations[CUR.opcode & 3] );
- }
- else
- distance = Round_None( EXEC_ARGS
- cvt_dist,
- CUR.metrics.compensations[CUR.opcode & 3] );
-
- /* minimum distance test */
-
- if ( (CUR.opcode & 8) != 0 )
- {
- if ( org_dist >= 0 )
- {
- if ( distance < CUR.GS.minimum_distance )
- distance = CUR.GS.minimum_distance;
- }
- else
- {
- if ( distance > -CUR.GS.minimum_distance )
- distance = -CUR.GS.minimum_distance;
- }
- }
-
- CUR_Func_move( &CUR.zp1, point, distance - cur_dist );
-
- CUR.GS.rp1 = CUR.GS.rp0;
-
- if ( (CUR.opcode & 16) != 0 )
- CUR.GS.rp0 = point;
-
- /* UNDOCUMENTED! */
-
- CUR.GS.rp2 = point;
- }
-
-
-/**********************************************/
-/* ALIGNRP[] : ALIGN Relative Point */
-/* CodeRange : $3C */
-/* Stack : uint32 uint32... --> */
-
- static void Ins_ALIGNRP( INS_ARG )
- {
- UShort point;
- TT_F26Dot6 distance;
-
-
- if ( CUR.top < CUR.GS.loop ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
-
- point = (UShort)CUR.stack[CUR.args];
-
- if ( BOUNDS( point, CUR.zp1.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- {
- distance = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
-
- CUR_Func_move( &CUR.zp1, point, -distance );
- }
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
-/**********************************************/
-/* ISECT[] : moves point to InterSECTion */
-/* CodeRange : $0F */
-/* Stack : 5 * uint32 --> */
-
- static void Ins_ISECT( INS_ARG )
- {
- UShort point,
- a0, a1,
- b0, b1;
-
- TT_F26Dot6 discriminant;
-
- TT_F26Dot6 dx, dy,
- dax, day,
- dbx, dby;
-
- TT_F26Dot6 val;
-
- TT_Vector R;
-
-
- point = (UShort)args[0];
-
- a0 = (UShort)args[1];
- a1 = (UShort)args[2];
- b0 = (UShort)args[3];
- b1 = (UShort)args[4];
-
- if ( BOUNDS( b0, CUR.zp0.n_points ) ||
- BOUNDS( b1, CUR.zp0.n_points ) ||
- BOUNDS( a0, CUR.zp1.n_points ) ||
- BOUNDS( a1, CUR.zp1.n_points ) ||
- BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- dbx = CUR.zp0.cur[b1].x - CUR.zp0.cur[b0].x;
- dby = CUR.zp0.cur[b1].y - CUR.zp0.cur[b0].y;
-
- dax = CUR.zp1.cur[a1].x - CUR.zp1.cur[a0].x;
- day = CUR.zp1.cur[a1].y - CUR.zp1.cur[a0].y;
-
- dx = CUR.zp0.cur[b0].x - CUR.zp1.cur[a0].x;
- dy = CUR.zp0.cur[b0].y - CUR.zp1.cur[a0].y;
-
- CUR.zp2.touch[point] |= TT_Flag_Touched_Both;
-
- discriminant = TT_MulDiv( dax, -dby, 0x40L ) +
- TT_MulDiv( day, dbx, 0x40L );
-
- if ( ABS( discriminant ) >= 0x40 )
- {
- val = TT_MulDiv( dx, -dby, 0x40L ) + TT_MulDiv( dy, dbx, 0x40L );
-
- R.x = TT_MulDiv( val, dax, discriminant );
- R.y = TT_MulDiv( val, day, discriminant );
-
- CUR.zp2.cur[point].x = CUR.zp1.cur[a0].x + R.x;
- CUR.zp2.cur[point].y = CUR.zp1.cur[a0].y + R.y;
- }
- else
- {
- /* else, take the middle of the middles of A and B */
-
- CUR.zp2.cur[point].x = ( CUR.zp1.cur[a0].x +
- CUR.zp1.cur[a1].x +
- CUR.zp0.cur[b0].x +
- CUR.zp0.cur[b1].x ) / 4;
- CUR.zp2.cur[point].y = ( CUR.zp1.cur[a0].y +
- CUR.zp1.cur[a1].y +
- CUR.zp0.cur[b0].y +
- CUR.zp0.cur[b1].y ) / 4;
- }
- }
-
-
-/**********************************************/
-/* ALIGNPTS[] : ALIGN PoinTS */
-/* CodeRange : $27 */
-/* Stack : uint32 uint32 --> */
-
- static void Ins_ALIGNPTS( INS_ARG )
- {
- UShort p1, p2;
- TT_F26Dot6 distance;
-
-
- p1 = (UShort)args[0];
- p2 = (UShort)args[1];
-
- if ( BOUNDS( args[0], CUR.zp1.n_points ) ||
- BOUNDS( args[1], CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- distance = CUR_Func_project( CUR.zp0.cur + p2,
- CUR.zp1.cur + p1 ) / 2;
-
- CUR_Func_move( &CUR.zp1, p1, distance );
- CUR_Func_move( &CUR.zp0, p2, -distance );
- }
-
-
-/**********************************************/
-/* IP[] : Interpolate Point */
-/* CodeRange : $39 */
-/* Stack : uint32... --> */
-
- static void Ins_IP( INS_ARG )
- {
- TT_F26Dot6 org_a, org_b, org_x,
- cur_a, cur_b, cur_x,
- distance;
- UShort point;
-
-
- if ( CUR.top < CUR.GS.loop )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- /* 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( CUR.GS.rp1, CUR.zp0.n_points ) ||
- BOUNDS( CUR.GS.rp2, CUR.zp1.n_points ) )
- {
- org_a = cur_a = 0;
- org_b = cur_b = 0;
- }
- else
- {
- org_a = CUR_Func_dualproj( CUR.zp0.org + CUR.GS.rp1, NULL_Vector );
- org_b = CUR_Func_dualproj( CUR.zp1.org + CUR.GS.rp2, NULL_Vector );
-
- cur_a = CUR_Func_project( CUR.zp0.cur + CUR.GS.rp1, NULL_Vector );
- cur_b = CUR_Func_project( CUR.zp1.cur + CUR.GS.rp2, NULL_Vector );
- }
-
- while ( CUR.GS.loop > 0 )
- {
- CUR.args--;
-
- point = (UShort)CUR.stack[CUR.args];
- if ( BOUNDS( point, CUR.zp2.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- {
- org_x = CUR_Func_dualproj( CUR.zp2.org + point, NULL_Vector );
- cur_x = CUR_Func_project ( CUR.zp2.cur + point, NULL_Vector );
-
- if ( ( org_a <= org_b && org_x <= org_a ) ||
- ( org_a > org_b && org_x >= org_a ) )
-
- distance = ( cur_a - org_a ) + ( org_x - cur_x );
-
- else if ( ( org_a <= org_b && org_x >= org_b ) ||
- ( org_a > org_b && org_x < org_b ) )
-
- distance = ( cur_b - org_b ) + ( org_x - cur_x );
-
- else
- /* note: it seems that rounding this value isn't a good */
- /* idea (cf. width of capital 'S' in Times) */
-
- distance = TT_MulDiv( cur_b - cur_a,
- org_x - org_a,
- org_b - org_a ) + ( cur_a - cur_x );
-
- CUR_Func_move( &CUR.zp2, point, distance );
- }
-
- CUR.GS.loop--;
- }
-
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
- }
-
-
-/**********************************************/
-/* UTP[a] : UnTouch Point */
-/* CodeRange : $29 */
-/* Stack : uint32 --> */
-
- static void Ins_UTP( INS_ARG )
- {
- UShort point;
- Byte mask;
-
-
- point = (UShort)args[0];
-
- if ( BOUNDS( point, CUR.zp0.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
-
- mask = 0xFF;
-
- if ( CUR.GS.freeVector.x != 0 )
- mask &= ~TT_Flag_Touched_X;
-
- if ( CUR.GS.freeVector.y != 0 )
- mask &= ~TT_Flag_Touched_Y;
-
- CUR.zp0.touch[point] &= mask;
- }
-
-
- /* Local variables for Ins_IUP: */
- struct LOC_Ins_IUP
- {
- TT_Vector* orgs; /* original and current coordinate */
- TT_Vector* curs; /* arrays */
- };
-
-
- static void Shift( UShort p1,
- UShort p2,
- UShort p,
- struct LOC_Ins_IUP* LINK )
- {
- UShort i;
- TT_F26Dot6 x;
-
-
- x = LINK->curs[p].x - LINK->orgs[p].x;
-
- for ( i = p1; i < p; i++ )
- LINK->curs[i].x += x;
-
- for ( i = p + 1; i <= p2; i++ )
- LINK->curs[i].x += x;
- }
-
-
- static void Interp( UShort p1,
- UShort p2,
- UShort ref1,
- UShort ref2,
- struct LOC_Ins_IUP* LINK )
- {
- UShort i;
- TT_F26Dot6 x, x1, x2, d1, d2;
-
-
- if ( p1 > p2 )
- return;
-
- x1 = LINK->orgs[ref1].x;
- d1 = LINK->curs[ref1].x - LINK->orgs[ref1].x;
- x2 = LINK->orgs[ref2].x;
- d2 = LINK->curs[ref2].x - LINK->orgs[ref2].x;
-
- if ( x1 == x2 )
- {
- for ( i = p1; i <= p2; i++ )
- {
- x = LINK->orgs[i].x;
-
- if ( x <= x1 )
- x += d1;
- else
- x += d2;
-
- LINK->curs[i].x = x;
- }
- return;
- }
-
- if ( x1 < x2 )
- {
- for ( i = p1; i <= p2; i++ )
- {
- x = LINK->orgs[i].x;
-
- if ( x <= x1 )
- x += d1;
- else
- {
- if ( x >= x2 )
- x += d2;
- else
- x = LINK->curs[ref1].x +
- TT_MulDiv( x - x1,
- LINK->curs[ref2].x - LINK->curs[ref1].x,
- x2 - x1 );
- }
- LINK->curs[i].x = x;
- }
- return;
- }
-
- /* x2 < x1 */
-
- for ( i = p1; i <= p2; i++ )
- {
- x = LINK->orgs[i].x;
- if ( x <= x2 )
- x += d2;
- else
- {
- if ( x >= x1 )
- x += d1;
- else
- x = LINK->curs[ref1].x +
- TT_MulDiv( x - x1,
- LINK->curs[ref2].x - LINK->curs[ref1].x,
- x2 - x1 );
- }
- LINK->curs[i].x = x;
- }
- }
-
-
-/**********************************************/
-/* IUP[a] : Interpolate Untouched Points */
-/* CodeRange : $30-$31 */
-/* Stack : --> */
-
- static void Ins_IUP( INS_ARG )
- {
- struct LOC_Ins_IUP V;
- Byte mask;
-
- UShort first_point; /* first point of contour */
- UShort end_point; /* end point (last+1) of contour */
-
- UShort first_touched; /* first touched point in contour */
- UShort cur_touched; /* current touched point in contour */
-
- UShort point; /* current point */
- Short contour; /* current contour */
-
-
- if ( CUR.opcode & 1 )
- {
- mask = TT_Flag_Touched_X;
- V.orgs = CUR.pts.org;
- V.curs = CUR.pts.cur;
- }
- else
- {
- mask = TT_Flag_Touched_Y;
- V.orgs = (TT_Vector*)( ((TT_F26Dot6*)CUR.pts.org) + 1 );
- V.curs = (TT_Vector*)( ((TT_F26Dot6*)CUR.pts.cur) + 1 );
- }
-
- contour = 0;
- point = 0;
-
- do
- {
- end_point = CUR.pts.contours[contour];
- first_point = point;
-
- while ( point <= end_point && (CUR.pts.touch[point] & mask) == 0 )
- point++;
-
- if ( point <= end_point )
- {
- first_touched = point;
- cur_touched = point;
-
- point++;
-
- while ( point <= end_point )
- {
- if ( (CUR.pts.touch[point] & mask) != 0 )
- {
- if ( point > 0 )
- Interp( cur_touched + 1,
- point - 1,
- cur_touched,
- point,
- &V );
- cur_touched = point;
- }
-
- point++;
- }
-
- if ( cur_touched == first_touched )
- Shift( first_point, end_point, cur_touched, &V );
- else
- {
- Interp( cur_touched + 1,
- end_point,
- cur_touched,
- first_touched,
- &V );
-
- if ( first_touched > 0 )
- Interp( first_point,
- first_touched - 1,
- cur_touched,
- first_touched,
- &V );
- }
- }
- contour++;
- } while ( contour < CUR.pts.n_contours );
- }
-
-
-/**********************************************/
-/* DELTAPn[] : DELTA Exceptions P1, P2, P3 */
-/* CodeRange : $5D,$71,$72 */
-/* Stack : uint32 (2 * uint32)... --> */
-
- static void Ins_DELTAP( INS_ARG )
- {
- ULong nump, k;
- UShort A;
- ULong C;
- Long B;
-
-
- nump = (ULong)args[0]; /* some points theoretically may occur more
- than once, thus UShort isn't enough */
-
- for ( k = 1; k <= nump; k++ )
- {
- if ( CUR.args < 2 )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- CUR.args -= 2;
-
- A = (UShort)CUR.stack[CUR.args + 1];
- B = CUR.stack[CUR.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, CUR.zp0.n_points ) )
- {
- C = ((ULong)B & 0xF0) >> 4;
-
- switch ( CUR.opcode )
- {
- case 0x5d:
- break;
-
- case 0x71:
- C += 16;
- break;
-
- case 0x72:
- C += 32;
- break;
- }
-
- C += CUR.GS.delta_base;
-
- if ( CURRENT_Ppem() == (Long)C )
- {
- B = ((ULong)B & 0xF) - 8;
- if ( B >= 0 )
- B++;
- B = B * 64L / (1L << CUR.GS.delta_shift);
-
- CUR_Func_move( &CUR.zp0, A, B );
- }
- }
- else
- if ( CUR.pedantic_hinting )
- CUR.error = TT_Err_Invalid_Reference;
- }
-
- CUR.new_top = CUR.args;
- }
-
-
-/**********************************************/
-/* DELTACn[] : DELTA Exceptions C1, C2, C3 */
-/* CodeRange : $73,$74,$75 */
-/* Stack : uint32 (2 * uint32)... --> */
-
- static void Ins_DELTAC( INS_ARG )
- {
- ULong nump, k;
- ULong A, C;
- Long B;
-
-
- nump = (ULong)args[0];
-
- for ( k = 1; k <= nump; k++ )
- {
- if ( CUR.args < 2 )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- return;
- }
-
- CUR.args -= 2;
-
- A = (ULong)CUR.stack[CUR.args + 1];
- B = CUR.stack[CUR.args];
-
- if ( BOUNDS( A, CUR.cvtSize ) )
- {
- if ( CUR.pedantic_hinting )
- {
- CUR.error = TT_Err_Invalid_Reference;
- return;
- }
- }
- else
- {
- C = ((ULong)B & 0xF0) >> 4;
-
- switch ( CUR.opcode )
- {
- case 0x73:
- break;
-
- case 0x74:
- C += 16;
- break;
-
- case 0x75:
- C += 32;
- break;
- }
-
- C += CUR.GS.delta_base;
-
- if ( CURRENT_Ppem() == (Long)C )
- {
- B = ((ULong)B & 0xF) - 8;
- if ( B >= 0 )
- B++;
- B = B * 64L / (1L << CUR.GS.delta_shift);
-
- CUR_Func_move_cvt( A, B );
- }
- }
- }
-
- CUR.new_top = CUR.args;
- }
-
-
-
-/****************************************************************/
-/* */
-/* MISC. INSTRUCTIONS */
-/* */
-/****************************************************************/
-
-
-/**********************************************/
-/* GETINFO[] : GET INFOrmation */
-/* CodeRange : $88 */
-/* Stack : uint32 --> uint32 */
-
-/* XXX According to Apple specs, bits 1 & 2 of the argument ought to be */
-/* consulted before rotated / stretched info is returned */
-
- static void Ins_GETINFO( INS_ARG )
- {
- Long K;
-
-
- K = 0;
-
- /* We return then Windows 3.1 version number */
- /* for the font scaler */
- if ( (args[0] & 1) != 0 )
- K = 3;
-
- /* Has the glyph been rotated ? */
- if ( CUR.metrics.rotated )
- K |= 0x80;
-
- /* Has the glyph been stretched ? */
- if ( CUR.metrics.stretched )
- K |= 0x100;
-
- args[0] = K;
- }
-
-
- static void Ins_UNKNOWN( INS_ARG )
- {
- /* look up the current instruction in our table */
- PDefRecord def, limit;
-
- def = CUR.IDefs;
- limit = def + CUR.numIDefs;
- for ( ; def < limit; def++ )
- {
- if ( def->Opc == CUR.opcode && def->Active )
- {
- PCallRecord pCrec;
-
- /* implement instruction as a function call */
-
- /* check call stack */
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- return;
- }
-
- pCrec = CUR.callStack + CUR.callTop;
-
- pCrec->Caller_Range = CUR.curRange;
- pCrec->Caller_IP = CUR.IP + 1;
- pCrec->Cur_Count = 1;
- pCrec->Cur_Restart = def->Start;
-
- CUR.callTop++;
-
- INS_Goto_CodeRange( def->Range,
- def->Start );
-
- CUR.step_ins = FALSE;
- return;
- }
- }
-
- CUR.error = TT_Err_Invalid_Opcode;
- }
-
-
-#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH
- static TInstruction_Function Instruct_Dispatch[256] =
- {
- /* Opcodes are gathered in groups of 16. */
- /* Please keep the spaces as they are. */
-
- /* SVTCA y */ Ins_SVTCA,
- /* SVTCA x */ Ins_SVTCA,
- /* SPvTCA y */ Ins_SPVTCA,
- /* SPvTCA x */ Ins_SPVTCA,
- /* SFvTCA y */ Ins_SFVTCA,
- /* SFvTCA x */ Ins_SFVTCA,
- /* SPvTL // */ Ins_SPVTL,
- /* SPvTL + */ Ins_SPVTL,
- /* SFvTL // */ Ins_SFVTL,
- /* SFvTL + */ Ins_SFVTL,
- /* SPvFS */ Ins_SPVFS,
- /* SFvFS */ Ins_SFVFS,
- /* GPV */ Ins_GPV,
- /* GFV */ Ins_GFV,
- /* SFvTPv */ Ins_SFVTPV,
- /* ISECT */ Ins_ISECT,
-
- /* SRP0 */ Ins_SRP0,
- /* SRP1 */ Ins_SRP1,
- /* SRP2 */ Ins_SRP2,
- /* SZP0 */ Ins_SZP0,
- /* SZP1 */ Ins_SZP1,
- /* SZP2 */ Ins_SZP2,
- /* SZPS */ Ins_SZPS,
- /* SLOOP */ Ins_SLOOP,
- /* RTG */ Ins_RTG,
- /* RTHG */ Ins_RTHG,
- /* SMD */ Ins_SMD,
- /* ELSE */ Ins_ELSE,
- /* JMPR */ Ins_JMPR,
- /* SCvTCi */ Ins_SCVTCI,
- /* SSwCi */ Ins_SSWCI,
- /* SSW */ Ins_SSW,
-
- /* DUP */ Ins_DUP,
- /* POP */ Ins_POP,
- /* CLEAR */ Ins_CLEAR,
- /* SWAP */ Ins_SWAP,
- /* DEPTH */ Ins_DEPTH,
- /* CINDEX */ Ins_CINDEX,
- /* MINDEX */ Ins_MINDEX,
- /* AlignPTS */ Ins_ALIGNPTS,
- /* INS_$28 */ Ins_UNKNOWN,
- /* UTP */ Ins_UTP,
- /* LOOPCALL */ Ins_LOOPCALL,
- /* CALL */ Ins_CALL,
- /* FDEF */ Ins_FDEF,
- /* ENDF */ Ins_ENDF,
- /* MDAP[0] */ Ins_MDAP,
- /* MDAP[1] */ Ins_MDAP,
-
- /* IUP[0] */ Ins_IUP,
- /* IUP[1] */ Ins_IUP,
- /* SHP[0] */ Ins_SHP,
- /* SHP[1] */ Ins_SHP,
- /* SHC[0] */ Ins_SHC,
- /* SHC[1] */ Ins_SHC,
- /* SHZ[0] */ Ins_SHZ,
- /* SHZ[1] */ Ins_SHZ,
- /* SHPIX */ Ins_SHPIX,
- /* IP */ Ins_IP,
- /* MSIRP[0] */ Ins_MSIRP,
- /* MSIRP[1] */ Ins_MSIRP,
- /* AlignRP */ Ins_ALIGNRP,
- /* RTDG */ Ins_RTDG,
- /* MIAP[0] */ Ins_MIAP,
- /* MIAP[1] */ Ins_MIAP,
-
- /* NPushB */ Ins_NPUSHB,
- /* NPushW */ Ins_NPUSHW,
- /* WS */ Ins_WS,
- /* RS */ Ins_RS,
- /* WCvtP */ Ins_WCVTP,
- /* RCvt */ Ins_RCVT,
- /* GC[0] */ Ins_GC,
- /* GC[1] */ Ins_GC,
- /* SCFS */ Ins_SCFS,
- /* MD[0] */ Ins_MD,
- /* MD[1] */ Ins_MD,
- /* MPPEM */ Ins_MPPEM,
- /* MPS */ Ins_MPS,
- /* FlipON */ Ins_FLIPON,
- /* FlipOFF */ Ins_FLIPOFF,
- /* DEBUG */ Ins_DEBUG,
-
- /* LT */ Ins_LT,
- /* LTEQ */ Ins_LTEQ,
- /* GT */ Ins_GT,
- /* GTEQ */ Ins_GTEQ,
- /* EQ */ Ins_EQ,
- /* NEQ */ Ins_NEQ,
- /* ODD */ Ins_ODD,
- /* EVEN */ Ins_EVEN,
- /* IF */ Ins_IF,
- /* EIF */ Ins_EIF,
- /* AND */ Ins_AND,
- /* OR */ Ins_OR,
- /* NOT */ Ins_NOT,
- /* DeltaP1 */ Ins_DELTAP,
- /* SDB */ Ins_SDB,
- /* SDS */ Ins_SDS,
-
- /* ADD */ Ins_ADD,
- /* SUB */ Ins_SUB,
- /* DIV */ Ins_DIV,
- /* MUL */ Ins_MUL,
- /* ABS */ Ins_ABS,
- /* NEG */ Ins_NEG,
- /* FLOOR */ Ins_FLOOR,
- /* CEILING */ Ins_CEILING,
- /* ROUND[0] */ Ins_ROUND,
- /* ROUND[1] */ Ins_ROUND,
- /* ROUND[2] */ Ins_ROUND,
- /* ROUND[3] */ Ins_ROUND,
- /* NROUND[0] */ Ins_NROUND,
- /* NROUND[1] */ Ins_NROUND,
- /* NROUND[2] */ Ins_NROUND,
- /* NROUND[3] */ Ins_NROUND,
-
- /* WCvtF */ Ins_WCVTF,
- /* DeltaP2 */ Ins_DELTAP,
- /* DeltaP3 */ Ins_DELTAP,
- /* DeltaCn[0] */ Ins_DELTAC,
- /* DeltaCn[1] */ Ins_DELTAC,
- /* DeltaCn[2] */ Ins_DELTAC,
- /* SROUND */ Ins_SROUND,
- /* S45Round */ Ins_S45ROUND,
- /* JROT */ Ins_JROT,
- /* JROF */ Ins_JROF,
- /* ROFF */ Ins_ROFF,
- /* INS_$7B */ Ins_UNKNOWN,
- /* RUTG */ Ins_RUTG,
- /* RDTG */ Ins_RDTG,
- /* SANGW */ Ins_SANGW,
- /* AA */ Ins_AA,
-
- /* FlipPT */ Ins_FLIPPT,
- /* FlipRgON */ Ins_FLIPRGON,
- /* FlipRgOFF */ Ins_FLIPRGOFF,
- /* INS_$83 */ Ins_UNKNOWN,
- /* INS_$84 */ Ins_UNKNOWN,
- /* ScanCTRL */ Ins_SCANCTRL,
- /* SDPVTL[0] */ Ins_SDPVTL,
- /* SDPVTL[1] */ Ins_SDPVTL,
- /* GetINFO */ Ins_GETINFO,
- /* IDEF */ Ins_IDEF,
- /* ROLL */ Ins_ROLL,
- /* MAX */ Ins_MAX,
- /* MIN */ Ins_MIN,
- /* ScanTYPE */ Ins_SCANTYPE,
- /* InstCTRL */ Ins_INSTCTRL,
- /* INS_$8F */ Ins_UNKNOWN,
-
- /* INS_$90 */ Ins_UNKNOWN,
- /* INS_$91 */ Ins_UNKNOWN,
- /* INS_$92 */ Ins_UNKNOWN,
- /* INS_$93 */ Ins_UNKNOWN,
- /* INS_$94 */ Ins_UNKNOWN,
- /* INS_$95 */ Ins_UNKNOWN,
- /* INS_$96 */ Ins_UNKNOWN,
- /* INS_$97 */ Ins_UNKNOWN,
- /* INS_$98 */ Ins_UNKNOWN,
- /* INS_$99 */ Ins_UNKNOWN,
- /* INS_$9A */ Ins_UNKNOWN,
- /* INS_$9B */ Ins_UNKNOWN,
- /* INS_$9C */ Ins_UNKNOWN,
- /* INS_$9D */ Ins_UNKNOWN,
- /* INS_$9E */ Ins_UNKNOWN,
- /* INS_$9F */ Ins_UNKNOWN,
-
- /* INS_$A0 */ Ins_UNKNOWN,
- /* INS_$A1 */ Ins_UNKNOWN,
- /* INS_$A2 */ Ins_UNKNOWN,
- /* INS_$A3 */ Ins_UNKNOWN,
- /* INS_$A4 */ Ins_UNKNOWN,
- /* INS_$A5 */ Ins_UNKNOWN,
- /* INS_$A6 */ Ins_UNKNOWN,
- /* INS_$A7 */ Ins_UNKNOWN,
- /* INS_$A8 */ Ins_UNKNOWN,
- /* INS_$A9 */ Ins_UNKNOWN,
- /* INS_$AA */ Ins_UNKNOWN,
- /* INS_$AB */ Ins_UNKNOWN,
- /* INS_$AC */ Ins_UNKNOWN,
- /* INS_$AD */ Ins_UNKNOWN,
- /* INS_$AE */ Ins_UNKNOWN,
- /* INS_$AF */ Ins_UNKNOWN,
-
- /* PushB[0] */ Ins_PUSHB,
- /* PushB[1] */ Ins_PUSHB,
- /* PushB[2] */ Ins_PUSHB,
- /* PushB[3] */ Ins_PUSHB,
- /* PushB[4] */ Ins_PUSHB,
- /* PushB[5] */ Ins_PUSHB,
- /* PushB[6] */ Ins_PUSHB,
- /* PushB[7] */ Ins_PUSHB,
- /* PushW[0] */ Ins_PUSHW,
- /* PushW[1] */ Ins_PUSHW,
- /* PushW[2] */ Ins_PUSHW,
- /* PushW[3] */ Ins_PUSHW,
- /* PushW[4] */ Ins_PUSHW,
- /* PushW[5] */ Ins_PUSHW,
- /* PushW[6] */ Ins_PUSHW,
- /* PushW[7] */ Ins_PUSHW,
-
- /* MDRP[00] */ Ins_MDRP,
- /* MDRP[01] */ Ins_MDRP,
- /* MDRP[02] */ Ins_MDRP,
- /* MDRP[03] */ Ins_MDRP,
- /* MDRP[04] */ Ins_MDRP,
- /* MDRP[05] */ Ins_MDRP,
- /* MDRP[06] */ Ins_MDRP,
- /* MDRP[07] */ Ins_MDRP,
- /* MDRP[08] */ Ins_MDRP,
- /* MDRP[09] */ Ins_MDRP,
- /* MDRP[10] */ Ins_MDRP,
- /* MDRP[11] */ Ins_MDRP,
- /* MDRP[12] */ Ins_MDRP,
- /* MDRP[13] */ Ins_MDRP,
- /* MDRP[14] */ Ins_MDRP,
- /* MDRP[15] */ Ins_MDRP,
-
- /* MDRP[16] */ Ins_MDRP,
- /* MDRP[17] */ Ins_MDRP,
- /* MDRP[18] */ Ins_MDRP,
- /* MDRP[19] */ Ins_MDRP,
- /* MDRP[20] */ Ins_MDRP,
- /* MDRP[21] */ Ins_MDRP,
- /* MDRP[22] */ Ins_MDRP,
- /* MDRP[23] */ Ins_MDRP,
- /* MDRP[24] */ Ins_MDRP,
- /* MDRP[25] */ Ins_MDRP,
- /* MDRP[26] */ Ins_MDRP,
- /* MDRP[27] */ Ins_MDRP,
- /* MDRP[28] */ Ins_MDRP,
- /* MDRP[29] */ Ins_MDRP,
- /* MDRP[30] */ Ins_MDRP,
- /* MDRP[31] */ Ins_MDRP,
-
- /* MIRP[00] */ Ins_MIRP,
- /* MIRP[01] */ Ins_MIRP,
- /* MIRP[02] */ Ins_MIRP,
- /* MIRP[03] */ Ins_MIRP,
- /* MIRP[04] */ Ins_MIRP,
- /* MIRP[05] */ Ins_MIRP,
- /* MIRP[06] */ Ins_MIRP,
- /* MIRP[07] */ Ins_MIRP,
- /* MIRP[08] */ Ins_MIRP,
- /* MIRP[09] */ Ins_MIRP,
- /* MIRP[10] */ Ins_MIRP,
- /* MIRP[11] */ Ins_MIRP,
- /* MIRP[12] */ Ins_MIRP,
- /* MIRP[13] */ Ins_MIRP,
- /* MIRP[14] */ Ins_MIRP,
- /* MIRP[15] */ Ins_MIRP,
-
- /* MIRP[16] */ Ins_MIRP,
- /* MIRP[17] */ Ins_MIRP,
- /* MIRP[18] */ Ins_MIRP,
- /* MIRP[19] */ Ins_MIRP,
- /* MIRP[20] */ Ins_MIRP,
- /* MIRP[21] */ Ins_MIRP,
- /* MIRP[22] */ Ins_MIRP,
- /* MIRP[23] */ Ins_MIRP,
- /* MIRP[24] */ Ins_MIRP,
- /* MIRP[25] */ Ins_MIRP,
- /* MIRP[26] */ Ins_MIRP,
- /* MIRP[27] */ Ins_MIRP,
- /* MIRP[28] */ Ins_MIRP,
- /* MIRP[29] */ Ins_MIRP,
- /* MIRP[30] */ Ins_MIRP,
- /* MIRP[31] */ Ins_MIRP
- };
-#endif
-
-
-/****************************************************************/
-/* */
-/* 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 whith TRUE, test IP < CodeSize to know wether it */
-/* comes from a 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 */
-/* */
-/* Instructions appear in the specs' order. */
-/* */
-/****************************************************************/
-
- LOCAL_FUNC
-#ifndef DEBUG_INTERPRETER
- TT_Error RunIns( PExecution_Context exc )
-#else
- TT_Error RunIns2( PExecution_Context exc )
-#endif
- {
- UShort A;
- PDefRecord WITH;
- PCallRecord WITH1;
-
- Long ins_counter = 0; /* executed instructions counter */
-
-#ifdef TT_CONFIG_OPTION_STATIC_INTERPRETER
- cur = *exc;
-#endif
-
- /* set CVT functions */
- CUR.metrics.ratio = 0;
- if ( CUR.metrics.x_ppem != CUR.metrics.y_ppem )
- {
- /* non-square pixels, use the stretched routines */
- CUR.func_read_cvt = Read_CVT_Stretched;
- CUR.func_write_cvt = Write_CVT_Stretched;
- CUR.func_move_cvt = Move_CVT_Stretched;
- }
- else
- {
- /* square pixels, use normal routines */
- CUR.func_read_cvt = Read_CVT;
- CUR.func_write_cvt = Write_CVT;
- CUR.func_move_cvt = Move_CVT;
- }
-
- COMPUTE_Funcs();
- Compute_Round( EXEC_ARGS (Byte)exc->GS.round_state );
-
- do
- {
- if ( CALC_Length() != SUCCESS )
- {
- CUR.error = TT_Err_Code_Overflow;
- goto LErrorLabel_;
- }
-
- /* First, let's check for empty stack and overflow */
-
- CUR.args = CUR.top - (Pop_Push_Count[CUR.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 ( CUR.args < 0 )
- {
- CUR.error = TT_Err_Too_Few_Arguments;
- goto LErrorLabel_;
- }
-
- CUR.new_top = CUR.args + (Pop_Push_Count[CUR.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 ( CUR.new_top > CUR.stackSize )
- {
- CUR.error = TT_Err_Stack_Overflow;
- goto LErrorLabel_;
- }
-
- CUR.step_ins = TRUE;
- CUR.error = TT_Err_Ok;
-
-#ifdef TT_CONFIG_OPTION_INTERPRETER_SWITCH
- {
- PStorage args = CUR.stack + CUR.args;
- Byte opcode = CUR.opcode;
-
-
-#undef ARRAY_BOUND_ERROR
-#define ARRAY_BOUND_ERROR goto Set_Invalid_Ref
-
- 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 */
- {
- Short AA, BB;
-
-
- AA = (Short)(opcode & 1) << 14;
- BB = AA ^ (Short)0x4000;
-
- if ( opcode < 4 )
- {
- CUR.GS.projVector.x = AA;
- CUR.GS.projVector.y = BB;
-
- CUR.GS.dualVector.x = AA;
- CUR.GS.dualVector.y = BB;
- }
-
- if ( (opcode & 2) == 0 )
- {
- CUR.GS.freeVector.x = AA;
- CUR.GS.freeVector.y = BB;
- }
-
- COMPUTE_Funcs();
- }
- break;
-
- case 0x06: /* SPvTL // */
- case 0x07: /* SPvTL + */
- DO_SPVTL
- break;
-
- case 0x08: /* SFvTL // */
- case 0x09: /* SFvTL + */
- DO_SFVTL
- break;
-
- case 0x0A: /* SPvFS */
- DO_SPVFS
- break;
-
- case 0x0B: /* SFvFS */
- DO_SFVFS
- break;
-
- case 0x0C: /* GPV */
- DO_GPV
- break;
-
- case 0x0D: /* GFV */
- DO_GFV
- break;
-
- case 0x0E: /* SFvTPv */
- DO_SFVTPV
- break;
-
- case 0x0F: /* ISECT */
- Ins_ISECT( EXEC_ARGS args );
- break;
-
- case 0x10: /* SRP0 */
- DO_SRP0
- break;
-
- case 0x11: /* SRP1 */
- DO_SRP1
- break;
-
- case 0x12: /* SRP2 */
- DO_SRP2
- break;
-
- case 0x13: /* SZP0 */
- Ins_SZP0( EXEC_ARGS args );
- break;
-
- case 0x14: /* SZP1 */
- Ins_SZP1( EXEC_ARGS args );
- break;
-
- case 0x15: /* SZP2 */
- Ins_SZP2( EXEC_ARGS args );
- break;
-
- case 0x16: /* SZPS */
- Ins_SZPS( EXEC_ARGS args );
- break;
-
- case 0x17: /* SLOOP */
- DO_SLOOP
- break;
-
- case 0x18: /* RTG */
- DO_RTG
- break;
-
- case 0x19: /* RTHG */
- DO_RTHG
- break;
-
- case 0x1A: /* SMD */
- DO_SMD
- break;
-
- case 0x1B: /* ELSE */
- Ins_ELSE( EXEC_ARGS args );
- break;
-
- case 0x1C: /* JMPR */
- DO_JMPR
- break;
-
- case 0x1D: /* SCVTCI */
- DO_SCVTCI
- break;
-
- case 0x1E: /* SSWCI */
- DO_SSWCI
- break;
-
- case 0x1F: /* SSW */
- DO_SSW
- break;
-
- case 0x20: /* DUP */
- DO_DUP
- break;
-
- case 0x21: /* POP */
- /* nothing :-) !! */
- break;
-
- case 0x22: /* CLEAR */
- DO_CLEAR
- break;
-
- case 0x23: /* SWAP */
- DO_SWAP
- break;
-
- case 0x24: /* DEPTH */
- DO_DEPTH
- break;
-
- case 0x25: /* CINDEX */
- DO_CINDEX
- break;
-
- case 0x26: /* MINDEX */
- Ins_MINDEX( EXEC_ARGS args );
- break;
-
- case 0x27: /* ALIGNPTS */
- Ins_ALIGNPTS( EXEC_ARGS args );
- break;
-
- case 0x28: /* ???? */
- Ins_UNKNOWN( EXEC_ARGS args );
- break;
-
- case 0x29: /* UTP */
- Ins_UTP( EXEC_ARGS args );
- break;
-
- case 0x2A: /* LOOPCALL */
- Ins_LOOPCALL( EXEC_ARGS args );
- break;
-
- case 0x2B: /* CALL */
- Ins_CALL( EXEC_ARGS args );
- break;
-
- case 0x2C: /* FDEF */
- Ins_FDEF( EXEC_ARGS args );
- break;
-
- case 0x2D: /* ENDF */
- Ins_ENDF( EXEC_ARGS args );
- break;
-
- case 0x2E: /* MDAP */
- case 0x2F: /* MDAP */
- Ins_MDAP( EXEC_ARGS args );
- break;
-
-
- case 0x30: /* IUP */
- case 0x31: /* IUP */
- Ins_IUP( EXEC_ARGS args );
- break;
-
- case 0x32: /* SHP */
- case 0x33: /* SHP */
- Ins_SHP( EXEC_ARGS args );
- break;
-
- case 0x34: /* SHC */
- case 0x35: /* SHC */
- Ins_SHC( EXEC_ARGS args );
- break;
-
- case 0x36: /* SHZ */
- case 0x37: /* SHZ */
- Ins_SHZ( EXEC_ARGS args );
- break;
-
- case 0x38: /* SHPIX */
- Ins_SHPIX( EXEC_ARGS args );
- break;
-
- case 0x39: /* IP */
- Ins_IP( EXEC_ARGS args );
- break;
-
- case 0x3A: /* MSIRP */
- case 0x3B: /* MSIRP */
- Ins_MSIRP( EXEC_ARGS args );
- break;
-
- case 0x3C: /* AlignRP */
- Ins_ALIGNRP( EXEC_ARGS args );
- break;
-
- case 0x3D: /* RTDG */
- DO_RTDG
- break;
-
- case 0x3E: /* MIAP */
- case 0x3F: /* MIAP */
- Ins_MIAP( EXEC_ARGS args );
- break;
-
- case 0x40: /* NPUSHB */
- Ins_NPUSHB( EXEC_ARGS args );
- break;
-
- case 0x41: /* NPUSHW */
- Ins_NPUSHW( EXEC_ARGS args );
- break;
-
- case 0x42: /* WS */
- DO_WS
- break;
-
- Set_Invalid_Ref:
- CUR.error = TT_Err_Invalid_Reference;
- break;
-
- case 0x43: /* RS */
- DO_RS
- break;
-
- case 0x44: /* WCVTP */
- DO_WCVTP
- break;
-
- case 0x45: /* RCVT */
- DO_RCVT
- break;
-
- case 0x46: /* GC */
- case 0x47: /* GC */
- Ins_GC( EXEC_ARGS args );
- break;
-
- case 0x48: /* SCFS */
- Ins_SCFS( EXEC_ARGS args );
- break;
-
- case 0x49: /* MD */
- case 0x4A: /* MD */
- Ins_MD( EXEC_ARGS args );
- break;
-
- case 0x4B: /* MPPEM */
- DO_MPPEM
- break;
-
- case 0x4C: /* MPS */
- DO_MPS
- break;
-
- case 0x4D: /* FLIPON */
- DO_FLIPON
- break;
-
- case 0x4E: /* FLIPOFF */
- DO_FLIPOFF
- break;
-
- case 0x4F: /* DEBUG */
- DO_DEBUG
- break;
-
- case 0x50: /* LT */
- DO_LT
- break;
-
- case 0x51: /* LTEQ */
- DO_LTEQ
- break;
-
- case 0x52: /* GT */
- DO_GT
- break;
-
- case 0x53: /* GTEQ */
- DO_GTEQ
- break;
-
- case 0x54: /* EQ */
- DO_EQ
- break;
-
- case 0x55: /* NEQ */
- DO_NEQ
- break;
-
- case 0x56: /* ODD */
- DO_ODD
- break;
-
- case 0x57: /* EVEN */
- DO_EVEN
- break;
-
- case 0x58: /* IF */
- Ins_IF( EXEC_ARGS args );
- break;
-
- case 0x59: /* EIF */
- /* do nothing */
- break;
-
- case 0x5A: /* AND */
- DO_AND
- break;
-
- case 0x5B: /* OR */
- DO_OR
- break;
-
- case 0x5C: /* NOT */
- DO_NOT
- break;
-
- case 0x5D: /* DELTAP1 */
- Ins_DELTAP( EXEC_ARGS args );
- break;
-
- case 0x5E: /* SDB */
- DO_SDB
- break;
-
- case 0x5F: /* SDS */
- DO_SDS
- break;
-
- case 0x60: /* ADD */
- DO_ADD
- break;
-
- case 0x61: /* SUB */
- DO_SUB
- break;
-
- case 0x62: /* DIV */
- DO_DIV
- break;
-
- case 0x63: /* MUL */
- DO_MUL
- break;
-
- case 0x64: /* ABS */
- DO_ABS
- break;
-
- case 0x65: /* NEG */
- DO_NEG
- break;
-
- case 0x66: /* FLOOR */
- DO_FLOOR
- break;
-
- case 0x67: /* CEILING */
- DO_CEILING
- break;
-
- case 0x68: /* ROUND */
- case 0x69: /* ROUND */
- case 0x6A: /* ROUND */
- case 0x6B: /* ROUND */
- DO_ROUND
- break;
-
- case 0x6C: /* NROUND */
- case 0x6D: /* NROUND */
- case 0x6E: /* NRRUND */
- case 0x6F: /* NROUND */
- DO_NROUND
- break;
-
- case 0x70: /* WCVTF */
- DO_WCVTF
- break;
-
- case 0x71: /* DELTAP2 */
- case 0x72: /* DELTAP3 */
- Ins_DELTAP( EXEC_ARGS args );
- break;
-
- case 0x73: /* DELTAC0 */
- case 0x74: /* DELTAC1 */
- case 0x75: /* DELTAC2 */
- Ins_DELTAC( EXEC_ARGS args );
- break;
-
- case 0x76: /* SROUND */
- DO_SROUND
- break;
-
- case 0x77: /* S45Round */
- DO_S45ROUND
- break;
-
- case 0x78: /* JROT */
- DO_JROT
- break;
-
- case 0x79: /* JROF */
- DO_JROF
- break;
-
- case 0x7A: /* ROFF */
- DO_ROFF
- break;
-
- case 0x7B: /* ???? */
- Ins_UNKNOWN( EXEC_ARGS args );
- break;
-
- case 0x7C: /* RUTG */
- DO_RUTG
- break;
-
- case 0x7D: /* RDTG */
- DO_RDTG
- break;
-
- case 0x7E: /* SANGW */
- case 0x7F: /* AA */
- /* nothing - obsolete */
- break;
-
- case 0x80: /* FLIPPT */
- Ins_FLIPPT( EXEC_ARGS args );
- break;
-
- case 0x81: /* FLIPRGON */
- Ins_FLIPRGON( EXEC_ARGS args );
- break;
-
- case 0x82: /* FLIPRGOFF */
- Ins_FLIPRGOFF( EXEC_ARGS args );
- break;
-
- case 0x83: /* UNKNOWN */
- case 0x84: /* UNKNOWN */
- Ins_UNKNOWN( EXEC_ARGS args );
- break;
-
- case 0x85: /* SCANCTRL */
- Ins_SCANCTRL( EXEC_ARGS args );
- break;
-
- case 0x86: /* SDPVTL */
- case 0x87: /* SDPVTL */
- Ins_SDPVTL( EXEC_ARGS args );
- break;
-
- case 0x88: /* GETINFO */
- Ins_GETINFO( EXEC_ARGS args );
- break;
-
- case 0x89: /* IDEF */
- Ins_IDEF( EXEC_ARGS args );
- break;
-
- case 0x8A: /* ROLL */
- Ins_ROLL( EXEC_ARGS args );
- break;
-
- case 0x8B: /* MAX */
- DO_MAX
- break;
-
- case 0x8C: /* MIN */
- DO_MIN
- break;
-
- case 0x8D: /* SCANTYPE */
- Ins_SCANTYPE( EXEC_ARGS args );
- break;
-
- case 0x8E: /* INSTCTRL */
- Ins_INSTCTRL( EXEC_ARGS args );
- break;
-
- case 0x8F:
- Ins_UNKNOWN( EXEC_ARGS args );
- break;
-
- default:
- if ( opcode >= 0xE0 )
- Ins_MIRP( EXEC_ARGS args );
- else if ( opcode >= 0xC0 )
- Ins_MDRP( EXEC_ARGS args );
- else if ( opcode >= 0xB8 )
- Ins_PUSHW( EXEC_ARGS args );
- else if ( opcode >= 0xB0 )
- Ins_PUSHB( EXEC_ARGS args );
- else
- Ins_UNKNOWN( EXEC_ARGS args );
- }
-
- }
-#else
- Instruct_Dispatch[CUR.opcode]( EXEC_ARGS &CUR.stack[CUR.args] );
-#endif
- if ( CUR.error != TT_Err_Ok )
- {
- switch ( (Int)(CUR.error) )
- {
- case TT_Err_Invalid_Opcode: /* looking for redefined instructions */
- A = 0;
-
- while ( A < CUR.numIDefs )
- {
- WITH = &CUR.IDefs[A];
-
- if ( WITH->Active && CUR.opcode == WITH->Opc )
- {
- if ( CUR.callTop >= CUR.callSize )
- {
- CUR.error = TT_Err_Invalid_Reference;
- goto LErrorLabel_;
- }
-
- WITH1 = &CUR.callStack[CUR.callTop];
-
- WITH1->Caller_Range = CUR.curRange;
- WITH1->Caller_IP = CUR.IP + 1;
- WITH1->Cur_Count = 1;
- WITH1->Cur_Restart = WITH->Start;
-
- if ( INS_Goto_CodeRange( WITH->Range, WITH->Start ) == FAILURE )
- goto LErrorLabel_;
-
- goto LSuiteLabel_;
- }
- else
- {
- A++;
- continue;
- }
- }
-
- CUR.error = TT_Err_Invalid_Opcode;
- goto LErrorLabel_;
-/* break; Unreachable code warning suppress. Leave in case a later
- change to remind the editor to consider break; */
-
- default:
- goto LErrorLabel_;
-/* break; */
- }
- }
-
- CUR.top = CUR.new_top;
-
- if ( CUR.step_ins )
- CUR.IP += CUR.length;
-
- /* increment instruction counter and check if we didn't */
- /* run this program for too long ?? (e.g. infinite loops) */
- if ( ++ins_counter > MAX_RUNNABLE_OPCODES )
- {
- CUR.error = TT_Err_Execution_Too_Long;
- goto LErrorLabel_;
- }
-
- LSuiteLabel_:
-
- if ( CUR.IP >= CUR.codeSize )
- {
- if ( CUR.callTop > 0 )
- {
- CUR.error = TT_Err_Code_Overflow;
- goto LErrorLabel_;
- }
- else
- goto LNo_Error_;
- }
- } while ( !CUR.instruction_trap );
-
- LNo_Error_:
- CUR.error = TT_Err_Ok;
-
- LErrorLabel_:
-
-#ifdef TT_CONFIG_OPTION_STATIC_INTERPRETER
- *exc = cur;
-#endif
-
- return CUR.error;
-
-
- }
-
-
-#ifdef DEBUG_INTERPRETER
-
- /* This function must be declared by the debugger front end */
- /* in order to specify which code range to debug. */
-
- int debug_coderange = TT_CodeRange_Glyph;
-
-
- LOCAL_FUNC
- TT_Error RunIns( PExecution_Context exc )
- {
- Int A, diff;
- ULong next_IP;
- Char ch, oldch;
- char *temp;
- int key;
-
- TT_Error error = 0;
-
- TGlyph_Zone save;
- TGlyph_Zone pts;
-
-#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
-
- const String* round_str[8] =
- {
- "to half-grid",
- "to grid",
- "to double grid",
- "down to grid",
- "up to grid",
- "off",
- "super",
- "super 45"
- };
-
- /* Check that we're running the code range that is effectively */
- /* asked by the debugger front end. */
- if ( exc->curRange != debug_coderange )
- return RunIns2( exc );
-
- pts = exc->pts;
-
- save.n_points = pts.n_points;
- save.n_contours = pts.n_contours;
-
- MEM_Alloc( save.org, sizeof ( TT_Vector ) * save.n_points );
- MEM_Alloc( save.cur, sizeof ( TT_Vector ) * save.n_points );
- MEM_Alloc( save.touch, sizeof ( Byte ) * save.n_points );
-
- exc->instruction_trap = 1;
-
- oldch = '\0';
-
- do
- {
- if ( exc->IP < exc->codeSize )
- {
-#ifdef TT_CONFIG_OPTION_STATIC_INTERPRETER
- cur = *exc;
-#endif
- CALC_Length();
-
- 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. */
-
- /* Print the current line. We use a 80-columns console with the */
- /* following formatting: */
- /* */
- /* [loc]:[addr] [opcode] [disassemby] [a][b]|[c][d] */
- /* */
-
- {
- char temp[80];
- int n, col, pop;
- int args = CUR.args;
-
-
- sprintf( temp, "%78c\n", ' ' );
-
- /* first letter of location */
- switch ( CUR.curRange )
- {
- case TT_CodeRange_Glyph:
- temp[0] = 'g';
- break;
- case TT_CodeRange_Cvt:
- temp[0] = 'c';
- break;
- default:
- temp[0] = 'f';
- }
-
- /* current IP */
- sprintf( temp+1, "%04lx: %02x %-36.36s",
- CUR.IP,
- CUR.opcode,
- Cur_U_Line(&CUR) );
-
- strncpy( temp+46, " (", 2 );
-
- args = CUR.top - 1;
- pop = Pop_Push_Count[CUR.opcode] >> 4;
- col = 48;
- for ( n = 6; n > 0; n-- )
- {
- if ( pop == 0 )
- temp[col-1] = (temp[col-1] == '(' ? ' ' : ')' );
-
- if ( args < CUR.top && args >= 0 )
- sprintf( temp+col, "%04lx", CUR.stack[args] );
- else
- sprintf( temp+col, " " );
-
- temp[col+4] = ' ';
- col += 5;
- pop--;
- args--;
- }
- temp[78] = '\n';
- temp[79] = '\0';
- PTRACE0(( temp ));
- }
-
- /* First, check for empty stack and overflow */
- if ( CUR.args < 0 )
- {
- PTRACE0(( "ERROR : Too few arguments\n" ));
- exc->error = TT_Err_Too_Few_Arguments;
- goto LErrorLabel_;
- }
-
- CUR.new_top = CUR.args + (Pop_Push_Count[CUR.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 'case' */
-
- if ( CUR.new_top > CUR.stackSize )
- {
- PTRACE0(( "ERROR : Stack overflow\n" ));
- exc->error = TT_Err_Stack_Overflow;
- goto LErrorLabel_;
- }
- }
- else
- PTRACE0(( "End of program reached.\n" ));
-
- key = 0;
- do
- {
- /* read keyboard */
-
- ch = getch();
-
- switch ( ch )
- {
- /* Help - show keybindings */
- case '?':
- PTRACE0(( "FDebug Help\n\n" ));
- PTRACE0(( "? Show this page\n" ));
- PTRACE0(( "q Quit debugger\n" ));
- PTRACE0(( "n Skip to next instruction\n" ));
- PTRACE0(( "s Step into\n" ));
- PTRACE0(( "v Show vector info\n" ));
- PTRACE0(( "g Show graphics state\n" ));
- PTRACE0(( "p Show points zone\n\n" ));
- break;
-
- /* Show vectors */
- case 'v':
- PTRACE0(( "freedom (%04hx,%04hx)\n", exc->GS.freeVector.x,
- exc->GS.freeVector.y ));
- PTRACE0(( "projection (%04hx,%04hx)\n", exc->GS.projVector.x,
- exc->GS.projVector.y ));
- PTRACE0(( "dual (%04hx,%04hx)\n\n", exc->GS.dualVector.x,
- exc->GS.dualVector.y ));
- break;
-
- /* Show graphics state */
- case 'g':
- PTRACE0(( "rounding %s\n", round_str[exc->GS.round_state] ));
- PTRACE0(( "min dist %04lx\n", exc->GS.minimum_distance ));
- PTRACE0(( "cvt_cutin %04lx\n", exc->GS.control_value_cutin ));
- break;
-
- /* Show points table */
- case 'p':
- for ( A = 0; A < exc->pts.n_points; A++ )
- {
- PTRACE0(( "%02hx ", A ));
- PTRACE0(( "%08lx,%08lx - ", pts.org[A].x, pts.org[A].y ));
- PTRACE0(( "%08lx,%08lx\n", pts.cur[A].x, pts.cur[A].y ));
- }
- PTRACE0(( "\n" ));
- break;
-
- default:
- key = 1;
- }
- } while ( !key );
-
- MEM_Copy( save.org, pts.org, pts.n_points * sizeof ( TT_Vector ) );
- MEM_Copy( save.cur, pts.cur, pts.n_points * sizeof ( TT_Vector ) );
- MEM_Copy( save.touch, pts.touch, pts.n_points );
-
- /* a return indicate the last command */
- if (ch == '\r')
- ch = oldch;
-
- switch ( ch )
- {
- /* Quit debugger */
- case 'q':
- goto LErrorLabel_;
-
- /* Step over */
- case 'n':
- if ( exc->IP < exc->codeSize )
- {
- /* `step over' is equivalent to `step into' except if */
- /* the current opcode is a CALL or LOOPCALL */
- if ( CUR.opcode != 0x2a && CUR.opcode != 0x2b )
- goto Step_into;
-
- /* otherwise, loop execution until we reach the next opcode */
- next_IP = CUR.IP + CUR.length;
- while ( exc->IP != next_IP )
- {
- if ( ( error = RunIns2( exc ) ) )
- goto LErrorLabel_;
- }
- }
- oldch = ch;
- break;
-
- /* Step into */
- case 's':
- if ( exc->IP < exc->codeSize )
-
- Step_into:
- if ( ( error = RunIns2( exc ) ) )
- goto LErrorLabel_;
- oldch = ch;
- break;
-
- default:
- PTRACE0(( "unknown command. Press ? for help\n" ));
- oldch = '\0';
- }
-
- for ( A = 0; A < pts.n_points; A++ )
- {
- diff = 0;
- if ( save.org[A].x != pts.org[A].x ) diff |= 1;
- if ( save.org[A].y != pts.org[A].y ) diff |= 2;
- if ( save.cur[A].x != pts.cur[A].x ) diff |= 4;
- if ( save.cur[A].y != pts.cur[A].y ) diff |= 8;
- if ( save.touch[A] != pts.touch[A] ) diff |= 16;
-
- if ( diff )
- {
- PTRACE0(( "%02hx ", A ));
-
- if ( diff & 16 ) temp = "(%01hx)"; else temp = " %01hx ";
- PTRACE0(( temp, save.touch[A] & 7 ));
-
- if ( diff & 1 ) temp = "(%08lx)"; else temp = " %08lx ";
- PTRACE0(( temp, save.org[A].x ));
-
- if ( diff & 2 ) temp = "(%08lx)"; else temp = " %08lx ";
- PTRACE0(( temp, save.org[A].y ));
-
- if ( diff & 4 ) temp = "(%08lx)"; else temp = " %08lx ";
- PTRACE0(( temp, save.cur[A].x ));
-
- if ( diff & 8 ) temp = "(%08lx)"; else temp = " %08lx ";
- PTRACE0(( temp, save.cur[A].y ));
-
- PTRACE0(( "\n" ));
-
- PTRACE0(( "%02hx ", A ));
-
- if ( diff & 16 ) temp = "[%01hx]"; else temp = " %01hx ";
- PTRACE0(( temp, pts.touch[A] & 7 ));
-
- if ( diff & 1 ) temp = "[%08lx]"; else temp = " %08lx ";
- PTRACE0(( temp, pts.org[A].x ));
-
- if ( diff & 2 ) temp = "[%08lx]"; else temp = " %08lx ";
- PTRACE0(( temp, pts.org[A].y ));
-
- if ( diff & 4 ) temp = "[%08lx]"; else temp = " %08lx ";
- PTRACE0(( temp, pts.cur[A].x ));
-
- if ( diff & 8 ) temp = "[%08lx]"; else temp = " %08lx ";
- PTRACE0(( temp, pts.cur[A].y ));
-
- PTRACE0(( "\n\n" ));
- }
- }
- } while ( TRUE );
-
- LErrorLabel_:
-
- return error;
- }
-
-#endif /* DEBUG_INTERPRETER */
-
-
-#endif /* TT_CONFIG_OPTION_NO_INTERPRETER */
-
-/* END */
diff --git a/Build/source/libs/libttf/ttinterp.h b/Build/source/libs/libttf/ttinterp.h
deleted file mode 100644
index d991fa07756..00000000000
--- a/Build/source/libs/libttf/ttinterp.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************
- *
- * ttinterp.h 2.2
- *
- * TrueType bytecode intepreter.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- *
- * Changes between 2.2 and 2.1:
- *
- * - a small bugfix in the Push opcodes
- *
- * Changes between 2.1 and 2.0:
- *
- * - created the TTExec component to take care of all execution
- * context management. The interpreter has now one single
- * function.
- *
- * - made some changes to support re-entrancy. The re-entrant
- * interpreter is smaller!
- *
- ******************************************************************/
-
-#ifndef TTINTERP_H
-#define TTINTERP_H
-
-#include "ttconfig.h"
-#include "ttobjs.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- /* Run instructions in current execution context */
-
- LOCAL_DEF TT_Error RunIns( PExecution_Context exc );
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTINTERP_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttload.c b/Build/source/libs/libttf/ttload.c
deleted file mode 100644
index 282828fdeec..00000000000
--- a/Build/source/libs/libttf/ttload.c
+++ /dev/null
@@ -1,1574 +0,0 @@
-
-/*******************************************************************
- *
- * ttload.c 1.0
- *
- * TrueType Tables Loader.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "tttypes.h"
-#include "ttdebug.h"
-#include "ttcalc.h"
-#include "ttfile.h"
-
-#include "tttables.h"
-#include "ttobjs.h"
-
-#include "ttmemory.h"
-#include "tttags.h"
-#include "ttload.h"
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_load
-
-/* In all functions, the stream is taken from the 'face' object */
-#define DEFINE_LOCALS DEFINE_LOAD_LOCALS( face->stream )
-#define DEFINE_LOCALS_WO_FRAME DEFINE_LOAD_LOCALS_WO_FRAME( face->stream )
-
-
-/*******************************************************************
- *
- * Function : LookUp_TrueType_Table
- *
- * Description : Looks for a TrueType table by name.
- *
- * Input : face face table to look for
- * tag searched tag
- *
- * Output : Index of table if found, -1 otherwise.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- Long TT_LookUp_Table( PFace face,
- ULong tag )
- {
- UShort i;
-
-
- PTRACE4(( "TT_LookUp_Table( %08lx, %c%c%c%c )\n",
- (Long)face,
- (Char)(tag >> 24),
- (Char)(tag >> 16),
- (Char)(tag >> 8),
- (Char)(tag) ));
-
- for ( i = 0; i < face->numTables; i++ )
- if ( face->dirTables[i].Tag == tag )
- return i;
-
- PTRACE4(( " Could not find table!\n" ));
- return -1;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Collection
- *
- * Description : Loads the TTC table directory into face table.
- *
- * Input : face face record to look for
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- static TT_Error Load_TrueType_Collection( PFace face )
- {
- DEFINE_LOCALS;
-
- ULong n;
-
-
- PTRACE3(( "Load_TrueType_Collection( %08lx )\n", (long)face ));
-
- if ( FILE_Seek ( 0L ) ||
- ACCESS_Frame( 12L ) )
- return error;
-
- face->ttcHeader.Tag = GET_Tag4();
- face->ttcHeader.version = GET_Long();
- face->ttcHeader.DirCount = GET_Long();
-
- FORGET_Frame();
-
- if ( face->ttcHeader.Tag != TTAG_ttcf )
- {
- face->ttcHeader.Tag = 0;
- face->ttcHeader.version = 0;
- face->ttcHeader.DirCount = 0;
-
- face->ttcHeader.TableDirectory = NULL;
-
- PTRACE3(("skipped.\n"));
-
- return TT_Err_File_Is_Not_Collection;
- }
-
- if ( ALLOC_ARRAY( face->ttcHeader.TableDirectory,
- face->ttcHeader.DirCount,
- ULong ) ||
- ACCESS_Frame( face->ttcHeader.DirCount * 4L ) )
- return error;
-
- for ( n = 0; n < face->ttcHeader.DirCount; n++ )
- face->ttcHeader.TableDirectory[n] = GET_ULong();
-
- FORGET_Frame();
-
- PTRACE3(( "collections directory loaded.\n" ));
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Directory
- *
- * Description : Loads the table directory into face table.
- *
- * Input : face face record to look for
- *
- * faceIndex the index of the TrueType font, when
- * we're opening a collection.
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Directory( PFace face, ULong faceIndex )
- {
- DEFINE_LOCALS;
-
- UShort n, limit;
- TTableDir tableDir;
-
- PTableDirEntry entry;
-
-
- PTRACE2(("Load_TT_Directory( %08lx, %ld )\n", (long)face, faceIndex));
-
- error = Load_TrueType_Collection( face );
-
- if ( error )
- {
- if ( error != TT_Err_File_Is_Not_Collection )
- return error;
-
- /* the file isn't a collection, exit if we're asking */
- /* for a collected font */
- if ( faceIndex != 0 )
- return error;
-
- /* Now skip to the beginning of the file */
- if ( FILE_Seek( 0L ) )
- return error;
- }
- else
- {
- /* The file is a collection. Check the font index */
- if ( faceIndex >= face->ttcHeader.DirCount )
- return TT_Err_Invalid_Argument;
-
- /* select a TrueType font in the ttc file */
- if ( FILE_Seek( face->ttcHeader.TableDirectory[faceIndex] ) )
- return error;
- }
-
- if ( ACCESS_Frame( 12L ) )
- return error;
-
- tableDir.version = GET_Long();
- tableDir.numTables = GET_UShort();
-
- tableDir.searchRange = GET_UShort();
- tableDir.entrySelector = GET_UShort();
- tableDir.rangeShift = GET_UShort();
-
- FORGET_Frame();
-
- PTRACE2(( "-- Tables count : %12u\n", tableDir.numTables ));
- PTRACE2(( "-- Format version : %08lx\n", tableDir.version ));
-
- /* Check that we have a 'sfnt' format there */
-
- if ( tableDir.version != 0x00010000 && /* MS fonts */
- tableDir.version != 0x74727565 && /* Mac fonts */
- tableDir.version != 0x00000000 ) /* some Korean fonts */
- {
- PERROR(( "!! invalid file format" ));
- return TT_Err_Invalid_File_Format;
- }
-
- face->numTables = tableDir.numTables;
-
- if ( ALLOC_ARRAY( face->dirTables,
- face->numTables,
- TTableDirEntry ) )
- return error;
-
- if ( ACCESS_Frame( face->numTables * 16L ) )
- return error;
-
- limit = face->numTables;
- entry = face->dirTables;
-
- for ( n = 0; n < limit; n++ )
- { /* loop through the tables and get all entries */
- entry->Tag = GET_Tag4();
- entry->CheckSum = GET_ULong();
- entry->Offset = GET_Long();
- entry->Length = GET_Long();
-
- PTRACE2(( " %c%c%c%c - %08lx - %08lx\n",
- (Char)(entry->Tag >> 24),
- (Char)(entry->Tag >> 16),
- (Char)(entry->Tag >> 8 ),
- (Char)(entry->Tag),
- entry->Offset,
- entry->Length ));
- entry++;
- }
-
- FORGET_Frame();
-
- PTRACE2(( "Directory loaded\n\n" ));
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_MaxProfile
- *
- * Description : Loads the maxp table into face table.
- *
- * Input : face face table to look for
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_MaxProfile( PFace face )
- {
- DEFINE_LOCALS;
-
- Long i;
- PMaxProfile maxProfile = &face->maxProfile;
-
-
- PTRACE2(( "Load_TT_MaxProfile( %08lx )\n", (long)face ));
-
- if ( ( i = TT_LookUp_Table( face, TTAG_maxp ) ) < 0 )
- return TT_Err_Max_Profile_Missing;
-
- if ( FILE_Seek( face->dirTables[i].Offset ) ) /* seek to maxprofile */
- return error;
-
- if ( ACCESS_Frame( 32L ) ) /* read into frame */
- return error;
-
- /* read frame data into face table */
- maxProfile->version = GET_ULong();
-
- maxProfile->numGlyphs = GET_UShort();
-
- maxProfile->maxPoints = GET_UShort();
- maxProfile->maxContours = GET_UShort();
- maxProfile->maxCompositePoints = GET_UShort();
- maxProfile->maxCompositeContours = GET_UShort();
-
- maxProfile->maxZones = GET_UShort();
- maxProfile->maxTwilightPoints = GET_UShort();
-
- maxProfile->maxStorage = GET_UShort();
- maxProfile->maxFunctionDefs = GET_UShort();
- maxProfile->maxInstructionDefs = GET_UShort();
- maxProfile->maxStackElements = GET_UShort();
- maxProfile->maxSizeOfInstructions = GET_UShort();
- maxProfile->maxComponentElements = GET_UShort();
- maxProfile->maxComponentDepth = GET_UShort();
-
- FORGET_Frame();
-
- /* XXX : an adjustement that is necessary to load certain */
- /* broken fonts like "Keystrokes MT" :-( */
- /* */
- /* We allocate 64 function entries by default when */
- /* the maxFunctionDefs field is null. */
-
- if (maxProfile->maxFunctionDefs == 0)
- maxProfile->maxFunctionDefs = 64;
-
- face->numGlyphs = maxProfile->numGlyphs;
-
- face->maxPoints = MAX( maxProfile->maxCompositePoints,
- maxProfile->maxPoints );
- face->maxContours = MAX( maxProfile->maxCompositeContours,
- maxProfile->maxContours );
- face->maxComponents = maxProfile->maxComponentElements +
- maxProfile->maxComponentDepth;
-
- /* XXX: Some fonts have maxComponents set to 0; we will */
- /* then use 16 of them by default. */
- if ( face->maxComponents == 0 )
- face->maxComponents = 16;
-
- /* We also increase maxPoints and maxContours in order to support */
- /* some broken fonts. */
- face->maxPoints += 8;
- face->maxContours += 4;
-
- PTRACE2(( "GASP loaded.\n" ));
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Gasp
- *
- * Description : Loads the TrueType Gasp table into the face
- * table.
- *
- * Input : face face table to look for
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Gasp( PFace face )
- {
- DEFINE_LOCALS;
-
- Long i;
- UShort j;
- TGasp* gas;
- GaspRange* gaspranges;
-
-
- PTRACE2(( "Load_TT_Gasp( %08lx )\n", (long)face ));
-
- if ( ( i = TT_LookUp_Table( face, TTAG_gasp ) ) < 0 )
- return TT_Err_Ok; /* gasp table is not required */
-
- if ( FILE_Seek( face->dirTables[i].Offset ) ||
- ACCESS_Frame( 4L ) )
- return error;
-
- gas = &face->gasp;
-
- gas->version = GET_UShort();
- gas->numRanges = GET_UShort();
-
- FORGET_Frame();
-
- PTRACE3(( "number of ranges = %d\n", gas->numRanges ));
-
- if ( ALLOC_ARRAY( gaspranges, gas->numRanges, GaspRange ) ||
- ACCESS_Frame( gas->numRanges * 4L ) )
- goto Fail;
-
- face->gasp.gaspRanges = gaspranges;
-
- for ( j = 0; j < gas->numRanges; j++ )
- {
- gaspranges[j].maxPPEM = GET_UShort();
- gaspranges[j].gaspFlag = GET_UShort();
-
- PTRACE3(( " [max:%d flag:%d]",
- gaspranges[j].maxPPEM,
- gaspranges[j].gaspFlag ));
- }
- PTRACE3(("\n"));
-
- FORGET_Frame();
-
- PTRACE2(( "GASP loaded\n" ));
- return TT_Err_Ok;
-
- Fail:
- FREE( gaspranges );
- gas->numRanges = 0;
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Header
- *
- * Description : Loads the TrueType header table into the face
- * table.
- *
- * Input : face face table to look for
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Header( PFace face )
- {
- DEFINE_LOCALS;
-
- Long i;
- TT_Header* header;
-
-
- PTRACE2(( "Load_TT_Header( %08lx )\n", (long)face ));
-
- if ( ( i = TT_LookUp_Table( face, TTAG_head ) ) < 0 )
- {
- PTRACE0(( "Font Header is missing !!\n" ));
- return TT_Err_Header_Table_Missing;
- }
-
- if ( FILE_Seek( face->dirTables[i].Offset ) ||
- ACCESS_Frame( 54L ) )
- return error;
-
- header = &face->fontHeader;
-
- header->Table_Version = GET_ULong();
- header->Font_Revision = GET_ULong();
-
- header->CheckSum_Adjust = GET_Long();
- header->Magic_Number = GET_Long();
-
- header->Flags = GET_UShort();
- header->Units_Per_EM = GET_UShort();
-
- header->Created [0] = GET_Long();
- header->Created [1] = GET_Long();
- header->Modified[0] = GET_Long();
- header->Modified[1] = GET_Long();
-
- header->xMin = GET_Short();
- header->yMin = GET_Short();
- header->xMax = GET_Short();
- header->yMax = GET_Short();
-
- header->Mac_Style = GET_UShort();
- header->Lowest_Rec_PPEM = GET_UShort();
-
- header->Font_Direction = GET_Short();
- header->Index_To_Loc_Format = GET_Short();
- header->Glyph_Data_Format = GET_Short();
-
- FORGET_Frame();
-
- PTRACE2(( " Units per EM : %8u\n", header->Units_Per_EM ));
- PTRACE2(( " IndexToLoc : %8d\n", header->Index_To_Loc_Format ));
- PTRACE2(( "Font Header Loaded.\n" ));
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Metrics
- *
- * Description : Loads the horizontal or vertical metrics table
- * into face object.
- *
- * Input : face
- * vertical set to true when loading the vmtx table,
- * or false for hmtx
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- static
- TT_Error Load_TrueType_Metrics( PFace face,
- Bool vertical )
- {
- DEFINE_LOCALS;
-
- Long n, num_shorts, num_shorts_checked, num_longs;
-
- PLongMetrics* longs;
- PShortMetrics* shorts;
-
- PLongMetrics long_metric;
-
-
- PTRACE2(( "Load_TT_%s_Metrics( %08lx )\n",
- vertical ? "Vertical" : "Horizontal",
- (long)face ));
-
- if ( vertical )
- {
- /* The table is optional, quit silently if it wasn't found */
- /* XXX : Some fonts have a valid vertical header with a non-null */
- /* "number_of_VMetrics" fields, but no corresponding */
- /* 'vmtx' table to get the metrics from (e.g. mingliu) */
- /* */
- /* For safety, we set the field to 0 ! */
- /* */
- n = TT_LookUp_Table( face, TTAG_vmtx );
- if ( n < 0 )
- {
- /* Set the number_Of_VMetrics to 0! */
- PTRACE2(( " no vertical header in file.\n" ));
- face->verticalHeader.number_Of_VMetrics = 0;
- return TT_Err_Ok;
- }
-
- num_longs = face->verticalHeader.number_Of_VMetrics;
- longs = (PLongMetrics*)&face->verticalHeader.long_metrics;
- shorts = (PShortMetrics*)&face->verticalHeader.short_metrics;
- }
- else
- {
- if ( ( n = TT_LookUp_Table( face, TTAG_hmtx ) ) < 0 )
- {
- PERROR(( "!! No Horizontal metrics in file !!\n" ));
- return TT_Err_Hmtx_Table_Missing;
- }
-
- num_longs = face->horizontalHeader.number_Of_HMetrics;
- longs = (PLongMetrics*)&face->horizontalHeader.long_metrics;
- shorts = (PShortMetrics*)&face->horizontalHeader.short_metrics;
- }
-
- /* never trust derived values! */
-
- num_shorts = face->maxProfile.numGlyphs - num_longs;
- num_shorts_checked = ( face->dirTables[n].Length - num_longs * 4 ) / 2;
-
- if ( num_shorts < 0 ) /* sanity check */
- {
- PERROR(( "!! more metrics than glyphs!\n" ));
- if ( vertical )
- return TT_Err_Invalid_Vert_Metrics;
- else
- return TT_Err_Invalid_Horiz_Metrics;
- }
-
- if ( ALLOC_ARRAY( *longs, num_longs, TLongMetrics ) ||
- ALLOC_ARRAY( *shorts, num_shorts, TShortMetrics ) )
- return error;
-
- if ( FILE_Seek( face->dirTables[n].Offset ) ||
- ACCESS_Frame( face->dirTables[n].Length ) )
- return error;
-
- long_metric = *longs;
- for ( n = 0; n < num_longs; n++ )
- {
- long_metric->advance = GET_UShort();
- long_metric->bearing = GET_Short();
- long_metric++;
- }
-
- /* do we have an inconsistent number of metric values? */
-
- if ( num_shorts > num_shorts_checked )
- {
- for ( n = 0; n < num_shorts_checked; n++ )
- (*shorts)[n] = GET_Short();
-
- /* we fill up the missing left side bearings with the */
- /* last valid value. Since this will occur for buggy CJK */
- /* fonts usually, nothing serious will happen. */
-
- for ( n = num_shorts_checked; n < num_shorts; n++ )
- (*shorts)[n] = (*shorts)[num_shorts_checked - 1];
- }
- else
- {
- for ( n = 0; n < num_shorts; n++ )
- (*shorts)[n] = GET_Short();
- }
-
- FORGET_Frame();
-
- PTRACE2(( "loaded\n" ));
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Metrics_Header
- *
- * Description : Loads either the "hhea" or "vhea" table in memory
- *
- * Input : face face table to look for
- * vertical a boolean. When set, queries the optional
- * "vhea" table. Otherwise, load the mandatory
- * "hhea" horizontal header.
- *
- * Output : Error code.
- *
- * Note : This function now loads the corresponding metrics table
- * (either hmtx or vmtx) and attaches it to the header.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Metrics_Header( PFace face,
- Bool vertical )
- {
- DEFINE_LOCALS;
-
- Long i;
-
- TT_Horizontal_Header* header;
-
-
- PTRACE2(( vertical ? "Vertical header" : "Horizontal header " ));
-
- if ( vertical )
- {
- face->verticalInfo = 0;
-
- /* The vertical header table is optional, so return quietly if */
- /* we don't find it.. */
- if ( ( i = TT_LookUp_Table( face, TTAG_vhea ) ) < 0 )
- return TT_Err_Ok;
-
- face->verticalInfo = 1;
- header = (TT_Horizontal_Header*)&face->verticalHeader;
- }
- else
- {
- /* The orizontal header is mandatory, return an error if we */
- /* don't find it. */
- if ( ( i = TT_LookUp_Table( face, TTAG_hhea ) ) < 0 )
- return TT_Err_Horiz_Header_Missing;
-
- header = &face->horizontalHeader;
- }
-
- if ( FILE_Seek( face->dirTables[i].Offset ) ||
- ACCESS_Frame( 36L ) )
- return error;
-
- header->Version = GET_ULong();
- header->Ascender = GET_Short();
- header->Descender = GET_Short();
- header->Line_Gap = GET_Short();
-
- header->advance_Width_Max = GET_UShort();
-
- header->min_Left_Side_Bearing = GET_Short();
- header->min_Right_Side_Bearing = GET_Short();
- header->xMax_Extent = GET_Short();
- header->caret_Slope_Rise = GET_Short();
- header->caret_Slope_Run = GET_Short();
-
- header->Reserved0 = GET_Short(); /* this is caret_Offset for
- vertical headers */
- header->Reserved1 = GET_Short();
- header->Reserved2 = GET_Short();
- header->Reserved3 = GET_Short();
- header->Reserved4 = GET_Short();
-
- header->metric_Data_Format = GET_Short();
- header->number_Of_HMetrics = GET_UShort();
-
- FORGET_Frame();
-
- header->long_metrics = NULL;
- header->short_metrics = NULL;
-
- PTRACE2(( "loaded\n" ));
-
- /* Now try to load the corresponding metrics */
-
- return Load_TrueType_Metrics( face, vertical );
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Locations
- *
- * Description : Loads the location table into face table.
- *
- * Input : face face table to look for
- *
- * Output : Error code.
- *
- * NOTE:
- * The Font Header *must* be loaded in the leading segment
- * calling this function.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Locations( PFace face )
- {
- DEFINE_LOCALS;
-
- Long n, limit;
- Short LongOffsets;
-
-
- PTRACE2(( "Locations " ));
-
- LongOffsets = face->fontHeader.Index_To_Loc_Format;
-
- if ( ( n = TT_LookUp_Table( face, TTAG_loca ) ) < 0 )
- return TT_Err_Locations_Missing;
-
- if ( FILE_Seek( face->dirTables[n].Offset ) )
- return error;
-
- if ( LongOffsets != 0 )
- {
- face->numLocations = face->dirTables[n].Length >> 2;
-
- PTRACE2(( "(32 bit offsets): %12lu ",
- face->numLocations ));
-
- if ( ALLOC_ARRAY( face->glyphLocations,
- face->numLocations,
- Long ) )
- return error;
-
- if ( ACCESS_Frame( face->numLocations * 4L ) )
- return error;
-
- limit = face->numLocations;
-
- for ( n = 0; n < limit; n++ )
- face->glyphLocations[n] = GET_Long();
-
- FORGET_Frame();
- }
- else
- {
- face->numLocations = face->dirTables[n].Length >> 1;
-
- PTRACE2(( "(16 bit offsets): %12lu ",
- face->numLocations ));
-
- if ( ALLOC_ARRAY( face->glyphLocations,
- face->numLocations,
- Long ) )
- return error;
-
- if ( ACCESS_Frame( face->numLocations * 2L ) )
- return error;
-
- limit = face->numLocations;
-
- for ( n = 0; n < limit; n++ )
- face->glyphLocations[n] =
- (Long)((ULong)GET_UShort() * 2);
-
- FORGET_Frame();
- }
-
- PTRACE2(( "loaded\n" ));
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Names
- *
- * Description : Loads the name table into face table.
- *
- * Input : face face table to look for
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Names( PFace face )
- {
- DEFINE_LOCALS;
-
- UShort i, bytes;
- Long n;
- PByte storage;
-
- TName_Table* names;
- TNameRec* namerec;
-
-
- PTRACE2(( "Names " ));
-
- if ( ( n = TT_LookUp_Table( face, TTAG_name ) ) < 0 )
- {
- /* The name table is required so indicate failure. */
- PTRACE2(( "is missing!\n" ));
-
- return TT_Err_Name_Table_Missing;
- }
-
- /* Seek to the beginning of the table and check the frame access. */
- /* The names table has a 6 byte header. */
- if ( FILE_Seek( face->dirTables[n].Offset ) ||
- ACCESS_Frame( 6L ) )
- return error;
-
- names = &face->nameTable;
-
- /* Load the initial names data. */
- names->format = GET_UShort();
- names->numNameRecords = GET_UShort();
- names->storageOffset = GET_UShort();
-
- FORGET_Frame();
-
- /* Allocate the array of name records. */
- if ( ALLOC_ARRAY( names->names,
- names->numNameRecords,
- TNameRec ) ||
- ACCESS_Frame( names->numNameRecords * 12L ) )
- {
- names->numNameRecords = 0;
- goto Fail;
- }
-
- /* Load the name records and determine how much storage is needed */
- /* to hold the strings themselves. */
-
- for ( i = bytes = 0; i < names->numNameRecords; i++ )
- {
- namerec = names->names + i;
- namerec->platformID = GET_UShort();
- namerec->encodingID = GET_UShort();
- namerec->languageID = GET_UShort();
- namerec->nameID = GET_UShort();
- namerec->stringLength = GET_UShort();
- namerec->stringOffset = GET_UShort();
-
-#if 0
- /* check the ids */
- if ( namerec->platformID <= 3 )
- {
-#endif
- /* this test takes care of 'holes' in the names tables, as */
- /* reported by Erwin */
- if ( (namerec->stringOffset + namerec->stringLength) > bytes )
- bytes = namerec->stringOffset + namerec->stringLength;
-#if 0
- }
-#endif
- }
-
- FORGET_Frame();
-
- /* Allocate storage for the strings if they exist. */
-
- names->storage = NULL;
-
- if ( bytes > 0 )
- {
- if ( ALLOC( storage, bytes ) ||
- FILE_Read_At( face->dirTables[n].Offset + names->storageOffset,
- (void*)storage,
- bytes ) )
- goto Fail_Storage;
-
- names->storage = storage;
-
- /* Go through and assign the string pointers to the name records. */
-
- for ( i = 0; i < names->numNameRecords; i++ )
- {
- namerec = names->names + i;
- namerec->string = storage + names->names[i].stringOffset;
-
-/* It is possible (but rather unlikely) that a new platform ID will be */
-/* added by Apple, so we can't rule out IDs > 3. */
-
-#if 0
- if ( namerec->platformID <= 3 )
- namerec->string = storage + names->names[i].stringOffset;
- else
- {
- namerec->string = NULL;
- namerec->stringLength = 0;
- }
-#endif
- }
- }
-
-#ifdef DEBUG_LEVEL_TRACE
-
- for ( i = 0; i < names->numNameRecords; i++ )
- {
- int j;
-
-
- PTRACE2(( "%d %d %x %d ",
- names->names[i].platformID,
- names->names[i].encodingID,
- names->names[i].languageID,
- names->names[i].nameID ));
-
- /* I know that M$ encoded strings are Unicode, */
- /* but this works reasonable well for debugging purposes. */
- for ( j = 0; j < names->names[i].stringLength; j++ )
- {
- if (names->names[i].string)
- {
- Char c = *(names->names[i].string + j);
-
-
- if ( (Byte)c < 128 )
- PTRACE2(( "%c", c ));
- }
- }
-
- PTRACE2(( "\n" ));
- }
-
-#endif /* DEBUG_LEVEL_TRACE */
-
- PTRACE2(( "loaded\n" ));
- return TT_Err_Ok;
-
- Fail_Storage:
- FREE( storage );
-
- Fail:
- Free_TrueType_Names( face );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Free_TrueType_Names
- *
- * Description : Frees a name table.
- *
- * Input : face face table to look for
- *
- * Output : TT_Err_Ok.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Free_TrueType_Names( PFace face )
- {
- TName_Table* names = &face->nameTable;
-
-
- /* free strings table */
- FREE( names->names );
-
- /* free strings storage */
- FREE( names->storage );
-
- names->numNameRecords = 0;
- names->format = 0;
- names->storageOffset = 0;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_CVT
- *
- * Description : Loads cvt table into resident table.
- *
- * Input : face face table to look for
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_CVT( PFace face )
- {
- DEFINE_LOCALS;
-
- Long n, limit;
-
-
- PTRACE2(( "CVT " ));
-
- if ( ( n = TT_LookUp_Table( face, TTAG_cvt ) ) < 0 )
- {
- PTRACE2(( "is missing!\n" ));
-
- face->cvtSize = 0;
- face->cvt = NULL;
- return TT_Err_Ok;
- }
-
- face->cvtSize = face->dirTables[n].Length / 2;
-
- if ( ALLOC_ARRAY( face->cvt,
- face->cvtSize,
- Short ) )
- return error;
-
- if ( FILE_Seek( face->dirTables[n].Offset ) ||
- ACCESS_Frame( face->cvtSize * 2L ) )
- return error;
-
- limit = face->cvtSize;
-
- for ( n = 0; n < limit; n++ )
- face->cvt[n] = GET_Short();
-
- FORGET_Frame();
-
- PTRACE2(( "loaded\n" ));
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_CMap
- *
- * Description : Loads the cmap directory in memory.
- * The cmaps themselves are loaded in ttcmap.c .
- *
- * Input : face
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_CMap( PFace face )
- {
- DEFINE_LOCALS;
-
- Long off, table_start;
- Long n, limit;
-
- TCMapDir cmap_dir;
- TCMapDirEntry entry_;
- PCMapTable cmap;
-
-
- PTRACE2(( "CMaps " ));
-
- if ( ( n = TT_LookUp_Table( face, TTAG_cmap ) ) < 0 )
- return TT_Err_CMap_Table_Missing;
-
- table_start = face->dirTables[n].Offset;
-
- if ( ( FILE_Seek( table_start ) ) ||
- ( ACCESS_Frame( 4L ) ) ) /* 4 bytes cmap header */
- return error;
-
- cmap_dir.tableVersionNumber = GET_UShort();
- cmap_dir.numCMaps = GET_UShort();
-
- FORGET_Frame();
-
- off = FILE_Pos(); /* save offset to cmapdir[] which follows */
-
- /* save space in face table for cmap tables */
- if ( ALLOC_ARRAY( face->cMaps,
- cmap_dir.numCMaps,
- TCMapTable ) )
- return error;
-
- face->numCMaps = cmap_dir.numCMaps;
-
- limit = face->numCMaps;
- cmap = face->cMaps;
-
- for ( n = 0; n < limit; n++ )
- {
- if ( FILE_Seek( off ) ||
- ACCESS_Frame( 8L ) )
- return error;
-
- /* extra code using entry_ for platxxx could be cleaned up later */
- cmap->loaded = FALSE;
- cmap->platformID = entry_.platformID = GET_UShort();
- cmap->platformEncodingID = entry_.platformEncodingID = GET_UShort();
-
- entry_.offset = GET_Long();
-
- FORGET_Frame();
-
- off = FILE_Pos();
-
- if ( FILE_Seek( table_start + entry_.offset ) ||
- ACCESS_Frame( 6L ) )
- return error;
-
- cmap->format = GET_UShort();
- cmap->length = GET_UShort();
- cmap->version = GET_UShort();
-
- FORGET_Frame();
-
- cmap->offset = FILE_Pos();
-
- cmap++;
- }
-
- PTRACE2(( "loaded\n" ));
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Programs
- *
- * Description : Loads the font (fpgm) and cvt programs into the
- * face table.
- *
- * Input : face
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Programs( PFace face )
- {
- DEFINE_LOCALS_WO_FRAME;
-
- Long n;
-
-
- PTRACE2(( "Font program " ));
-
- /* The font program is optional */
- if ( ( n = TT_LookUp_Table( face, TTAG_fpgm ) ) < 0 )
- {
- face->fontProgram = NULL;
- face->fontPgmSize = 0;
-
- PTRACE2(( "is missing!\n" ));
- }
- else
- {
- face->fontPgmSize = face->dirTables[n].Length;
-
- if ( ALLOC( face->fontProgram,
- face->fontPgmSize ) ||
- FILE_Read_At( face->dirTables[n].Offset,
- (void*)face->fontProgram,
- face->fontPgmSize ) )
- return error;
-
- PTRACE2(( "loaded, %12d bytes\n", face->fontPgmSize ));
- }
-
- PTRACE2(( "Prep program " ));
-
- if ( ( n = TT_LookUp_Table( face, TTAG_prep ) ) < 0 )
- {
- face->cvtProgram = NULL;
- face->cvtPgmSize = 0;
-
- PTRACE2(( "is missing!\n" ));
- }
- else
- {
- face->cvtPgmSize = face->dirTables[n].Length;
-
- if ( ALLOC( face->cvtProgram,
- face->cvtPgmSize ) ||
- FILE_Read_At( face->dirTables[n].Offset,
- (void*)face->cvtProgram,
- face->cvtPgmSize ) )
- return error;
-
- PTRACE2(( "loaded, %12d bytes\n", face->cvtPgmSize ));
- }
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_OS2
- *
- * Description : Loads the OS2 Table.
- *
- * Input : face
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_OS2( PFace face )
- {
- DEFINE_LOCALS;
-
- Long i;
- TT_OS2* os2;
-
-
- PTRACE2(( "OS/2 Table " ));
-
- /* 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. */
- if ( ( i = TT_LookUp_Table( face, TTAG_OS2 ) ) < 0 )
- {
- PTRACE2(( "is missing\n!" ));
- face->os2.version = 0xFFFF;
- error = TT_Err_Ok;
- return TT_Err_Ok;
- }
-
- if ( FILE_Seek( face->dirTables[i].Offset ) ||
- ACCESS_Frame( 78L ) )
- return error;
-
- os2 = &face->os2;
-
- os2->version = GET_UShort();
- os2->xAvgCharWidth = GET_Short();
- os2->usWeightClass = GET_UShort();
- os2->usWidthClass = GET_UShort();
- os2->fsType = GET_Short();
- os2->ySubscriptXSize = GET_Short();
- os2->ySubscriptYSize = GET_Short();
- os2->ySubscriptXOffset = GET_Short();
- os2->ySubscriptYOffset = GET_Short();
- os2->ySuperscriptXSize = GET_Short();
- os2->ySuperscriptYSize = GET_Short();
- os2->ySuperscriptXOffset = GET_Short();
- os2->ySuperscriptYOffset = GET_Short();
- os2->yStrikeoutSize = GET_Short();
- os2->yStrikeoutPosition = GET_Short();
- os2->sFamilyClass = GET_Short();
-
- for ( i = 0; i < 10; i++ )
- os2->panose[i] = GET_Byte();
-
- os2->ulUnicodeRange1 = GET_ULong();
- os2->ulUnicodeRange2 = GET_ULong();
- os2->ulUnicodeRange3 = GET_ULong();
- os2->ulUnicodeRange4 = GET_ULong();
-
- for ( i = 0; i < 4; i++ )
- os2->achVendID[i] = GET_Byte();
-
- os2->fsSelection = GET_UShort();
- os2->usFirstCharIndex = GET_UShort();
- os2->usLastCharIndex = GET_UShort();
- os2->sTypoAscender = GET_Short();
- os2->sTypoDescender = GET_Short();
- os2->sTypoLineGap = GET_Short();
- os2->usWinAscent = GET_UShort();
- os2->usWinDescent = GET_UShort();
-
- FORGET_Frame();
-
- if ( os2->version >= 0x0001 )
- {
- /* only version 1 tables */
-
- if ( ACCESS_Frame( 8L ) ) /* read into frame */
- return error;
-
- os2->ulCodePageRange1 = GET_ULong();
- os2->ulCodePageRange2 = GET_ULong();
-
- FORGET_Frame();
- }
- else
- {
- os2->ulCodePageRange1 = 0;
- os2->ulCodePageRange2 = 0;
- }
-
- PTRACE2(( "loaded\n" ));
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_PostScript
- *
- * Description : Loads the post table into face table.
- *
- * Input : face face table to look for
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_PostScript( PFace face )
- {
- DEFINE_LOCALS;
-
- Long i;
-
- TT_Postscript* post = &face->postscript;
-
-
- PTRACE2(( "PostScript " ));
-
- if ( ( i = TT_LookUp_Table( face, TTAG_post ) ) < 0 )
- return TT_Err_Post_Table_Missing;
-
- if ( FILE_Seek( face->dirTables[i].Offset ) ||
- ACCESS_Frame( 32L ) )
- return error;
-
- /* read frame data into face table */
-
- post->FormatType = GET_ULong();
- post->italicAngle = GET_ULong();
- post->underlinePosition = GET_Short();
- post->underlineThickness = GET_Short();
- post->isFixedPitch = GET_ULong();
- post->minMemType42 = GET_ULong();
- post->maxMemType42 = GET_ULong();
- post->minMemType1 = GET_ULong();
- post->maxMemType1 = GET_ULong();
-
- FORGET_Frame();
-
- /* we don't load the glyph names, we do that in a */
- /* library extension (ftxpost). */
-
- PTRACE2(( "loaded\n" ));
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Hdmx
- *
- * Description : Loads the horizontal device metrics table.
- *
- * Input : face face object to look for
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Hdmx( PFace face )
- {
- DEFINE_LOCALS;
-
- TT_Hdmx_Record* rec;
- TT_Hdmx hdmx;
- Long table;
- UShort n, num_glyphs;
- Long record_size;
-
-
- hdmx.version = 0;
- hdmx.num_records = 0;
- hdmx.records = 0;
-
- face->hdmx = hdmx;
-
- if ( ( table = TT_LookUp_Table( face, TTAG_hdmx ) ) < 0 )
- return TT_Err_Ok;
-
- if ( FILE_Seek( face->dirTables[table].Offset ) ||
- ACCESS_Frame( 8L ) )
- return error;
-
- hdmx.version = GET_UShort();
- hdmx.num_records = GET_Short();
- record_size = GET_Long();
-
- FORGET_Frame();
-
- /* Only recognize format 0 */
-
- if ( hdmx.version != 0 )
- return TT_Err_Ok;
-
- if ( ALLOC( hdmx.records, sizeof ( TT_Hdmx_Record ) * hdmx.num_records ) )
- return error;
-
- num_glyphs = face->numGlyphs;
- record_size -= num_glyphs+2;
- rec = hdmx.records;
-
- for ( n = 0; n < hdmx.num_records; n++ )
- {
- /* read record */
-
- if ( ACCESS_Frame( 2L ) )
- goto Fail;
-
- rec->ppem = GET_Byte();
- rec->max_width = GET_Byte();
-
- FORGET_Frame();
-
- if ( ALLOC( rec->widths, num_glyphs ) ||
- FILE_Read( rec->widths, num_glyphs ) )
- goto Fail;
-
- /* skip padding bytes */
- if ( record_size > 0 )
- if ( FILE_Skip( record_size ) )
- goto Fail;
-
- rec++;
- }
-
- face->hdmx = hdmx;
-
- return TT_Err_Ok;
-
- Fail:
- for ( n = 0; n < hdmx.num_records; n++ )
- FREE( hdmx.records[n].widths );
-
- FREE( hdmx.records );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Free_TrueType_Hdmx
- *
- * Description : Frees the horizontal device metrics table.
- *
- * Input : face face object to look for
- *
- * Output : TT_Err_Ok.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Free_TrueType_Hdmx( PFace face )
- {
- UShort n;
-
-
- if ( !face )
- return TT_Err_Ok;
-
- for ( n = 0; n < face->hdmx.num_records; n++ )
- FREE( face->hdmx.records[n].widths );
-
- FREE( face->hdmx.records );
- face->hdmx.num_records = 0;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Load_TrueType_Any
- *
- * Description : Loads any font table into client memory. Used by
- * the TT_Get_Font_Data() API function.
- *
- * Input : face face object to look for
- *
- * tag 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 starting offset in the table (or the file
- * if tag == 0 )
- *
- * buffer address of target buffer
- *
- * length address of decision variable :
- *
- * if length == NULL :
- * load the whole table. returns an
- * an error if 'offset' == 0 !!
- *
- * if *length == 0 :
- * exit immediately, returning the
- * length of the given table, or of
- * the font file, depending on the
- * value of 'tag'
- *
- * if *length != 0 :
- * load the next 'length' bytes of
- * table or font, starting at offset
- * 'offset' (in table or font too).
- *
- * Output : Error condition
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Load_TrueType_Any( PFace face,
- ULong tag,
- Long offset,
- void* buffer,
- Long* length )
- {
- TT_Stream stream;
- TT_Error error;
- Long table;
- ULong size;
-
-
- if ( tag != 0 )
- {
- /* look for tag in font directory */
- table = TT_LookUp_Table( face, tag );
- if ( table < 0 )
- return TT_Err_Table_Missing;
-
- offset += face->dirTables[table].Offset;
- size = face->dirTables[table].Length;
- }
- else
- /* tag = 0 -- the use want to access the font file directly */
- size = TT_Stream_Size( face->stream );
-
- if ( length && *length == 0 )
- {
- *length = size;
- return TT_Err_Ok;
- }
-
- if ( length )
- size = *length;
-
- if ( !USE_Stream( face->stream, stream ) )
- (void)FILE_Read_At( offset, buffer, size );
- DONE_Stream( stream );
-
- return error;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttload.h b/Build/source/libs/libttf/ttload.h
deleted file mode 100644
index 47acae91a2e..00000000000
--- a/Build/source/libs/libttf/ttload.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*******************************************************************
- *
- * ttload.h 1.1
- *
- * TrueType Tables Loader.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- *
- * Changes between 1.1 and 1.0 :
- *
- * - add function Load_TrueType_Any used by TT_Get_Font_Data
- *
- ******************************************************************/
-
-#ifndef TTLOAD_H
-#define TTLOAD_H
-
-#include "ttconfig.h"
-#include "tttypes.h"
-#include "ttobjs.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- EXPORT_DEF
- Long TT_LookUp_Table( PFace face, ULong tag );
-
- LOCAL_DEF TT_Error Load_TrueType_Directory ( PFace face,
- ULong faceIndex );
-
- LOCAL_DEF TT_Error Load_TrueType_MaxProfile ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_Gasp ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_Header ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_Locations ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_Names ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_CVT ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_CMap ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_Programs ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_OS2 ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_PostScript ( PFace face );
- LOCAL_DEF TT_Error Load_TrueType_Hdmx ( PFace face );
-
- LOCAL_DEF TT_Error Load_TrueType_Metrics_Header( PFace face,
- Bool vertical );
-
- LOCAL_DEF TT_Error Load_TrueType_Any( PFace face,
- ULong tag,
- Long offset,
- void* buffer,
- Long* length );
-
- LOCAL_DEF TT_Error Free_TrueType_Names( PFace face );
- LOCAL_DEF TT_Error Free_TrueType_Hdmx ( PFace face );
-
-
-/* The following macros are defined to simplify the writing of */
-/* the various table and glyph loaders. */
-
-/* For examples see the code in ttload.c, ttgload.c etc. */
-
-#define USE_Stream( original, duplicate ) \
- ( (error = TT_Use_Stream( original, &duplicate )) != TT_Err_Ok )
-
-#define DONE_Stream( _stream ) \
- TT_Done_Stream( &_stream )
-
-/* Define a file frame -- use it only when needed */
-#define DEFINE_A_FRAME TFileFrame frame = TT_Null_FileFrame
-
-/* Define a stream -- use it only when needed */
-#define DEFINE_A_STREAM TT_Stream stream
-
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE /* re-entrant implementation */
-
-/* The following macros define the necessary local */
-/* variables used to access streams and frames. */
-
-/* Define stream locals with frame */
-#define DEFINE_STREAM_LOCALS \
- TT_Error error; \
- DEFINE_A_STREAM; \
- DEFINE_A_FRAME
-
-/* Define stream locals without frame */
-#define DEFINE_STREAM_LOCALS_WO_FRAME \
- TT_Error error; \
- DEFINE_A_STREAM
-
-/* Define locals with a predefined stream in reentrant mode -- see ttload.c */
-#define DEFINE_LOAD_LOCALS( STREAM ) \
- TT_Error error; \
- DEFINE_A_STREAM = (STREAM); \
- DEFINE_A_FRAME
-
-/* Define locals without frame with a predefined stream - see ttload.c */
-#define DEFINE_LOAD_LOCALS_WO_FRAME( STREAM ) \
- TT_Error error; \
- DEFINE_A_STREAM = (STREAM)
-
-/* Define all locals necessary to access a font file */
-#define DEFINE_ALL_LOCALS \
- TT_Error error; \
- DEFINE_A_STREAM; \
- DEFINE_A_FRAME
-
-
-#define ACCESS_Frame( _size_ ) \
- ( (error = TT_Access_Frame( stream, \
- &frame, \
- (Long)(_size_) )) != TT_Err_Ok )
-#define CHECK_ACCESS_Frame( _size_ ) \
- ( (error = TT_Check_And_Access_Frame( stream, \
- &frame, \
- (Long)(_size_) )) != TT_Err_Ok )
-#define FORGET_Frame() \
- ( (void)TT_Forget_Frame( &frame ) )
-
-#define GET_Byte() TT_Get_Byte ( &frame )
-#define GET_Char() TT_Get_Char ( &frame )
-#define GET_UShort() TT_Get_UShort( &frame )
-#define GET_Short() TT_Get_Short ( &frame )
-#define GET_Long() TT_Get_Long ( &frame )
-#define GET_ULong() TT_Get_ULong ( &frame )
-#define GET_Tag4() TT_Get_ULong ( &frame )
-
-#define FILE_Pos() TT_File_Pos ( stream )
-
-#define FILE_Seek( _position_ ) \
- ( (error = TT_Seek_File( stream, \
- (Long)(_position_) )) != TT_Err_Ok )
-#define FILE_Skip( _distance_ ) \
- ( (error = TT_Skip_File( stream, \
- (Long)(_distance_) )) != TT_Err_Ok )
-#define FILE_Read( buffer, count ) \
- ( (error = TT_Read_File ( stream, \
- buffer, \
- (Long)(count) )) != TT_Err_Ok )
-#define FILE_Read_At( pos, buffer, count ) \
- ( (error = TT_Read_At_File( stream, \
- (Long)(pos), \
- buffer, \
- (Long)(count) )) != TT_Err_Ok )
-
-#else /* thread-safe implementation */
-
-/* Define stream locals with frame -- nothing in thread-safe mode */
-#define DEFINE_STREAM_LOCALS \
- TT_Error error
-
-/* Define stream locals without frame -- nothing in thread-safe mode */
-#define DEFINE_STREAM_LOCALS_WO_FRAME \
- TT_Error error
-
-/* Define locals with a predefined stream in reentrant mode -- see ttload.c */
-#define DEFINE_LOAD_LOCALS( STREAM ) \
- TT_Error error
-
-
-/* Define locals without frame with a predefined stream - see ttload.c */
-#define DEFINE_LOAD_LOCALS_WO_FRAME( STREAM ) \
- TT_Error error
-
-/* Define all locals necessary to access a font file */
-#define DEFINE_ALL_LOCALS \
- TT_Error error; \
- DEFINE_A_STREAM
-
-
-#define ACCESS_Frame( _size_ ) \
- ( (error = TT_Access_Frame( (Long)(_size_) )) != TT_Err_Ok )
-#define CHECK_ACCESS_Frame( _size_ ) \
- ( (error = TT_Check_And_Access_Frame( (Long)(_size_) )) != TT_Err_Ok )
-#define FORGET_Frame() \
- ( (void)TT_Forget_Frame() )
-
-#define GET_Byte() TT_Get_Byte ()
-#define GET_Char() TT_Get_Char ()
-#define GET_UShort() TT_Get_UShort()
-#define GET_Short() TT_Get_Short ()
-#define GET_Long() TT_Get_Long ()
-#define GET_ULong() TT_Get_ULong ()
-#define GET_Tag4() TT_Get_ULong ()
-
-#define FILE_Pos() TT_File_Pos()
-
-#define FILE_Seek( _position_ ) \
- ( (error = TT_Seek_File( (Long)(_position_) )) != TT_Err_Ok )
-#define FILE_Skip( _distance_ ) \
- ( (error = TT_Skip_File( (Long)(_distance_) )) != TT_Err_Ok )
-#define FILE_Read( buffer, count ) \
- ( (error = TT_Read_File ( buffer, \
- (Long)(count) )) != TT_Err_Ok )
-#define FILE_Read_At( pos, buffer, count ) \
- ( (error = TT_Read_At_File( (Long)(pos), \
- buffer, \
- (Long)(count) )) != TT_Err_Ok )
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTLOAD_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttmemory.c b/Build/source/libs/libttf/ttmemory.c
deleted file mode 100644
index 280c05f22d6..00000000000
--- a/Build/source/libs/libttf/ttmemory.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/*******************************************************************
- *
- * ttmemory.c 1.2
- *
- * Memory management component (body).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- *
- * Changes between 1.1 and 1.2:
- *
- * - the font pool is gone.
- *
- * - introduced the FREE macro and the Free function for
- * future use in destructors.
- *
- * - Init_FontPool() is now a macro to allow the compilation of
- * 'legacy' applications (all four test programs have been updated).
- *
- ******************************************************************/
-
-#include "ttdebug.h"
-#include "ttmemory.h"
-#include "ttengine.h"
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_memory
-
-
-#ifdef DEBUG_MEMORY
-
-#include <stdio.h>
-
-#define MAX_TRACKED_BLOCKS 1024
-
- struct TMemRec_
- {
- void* base;
- Long size;
- };
-
- typedef struct TMemRec_ TMemRec;
-
- static TMemRec pointers[MAX_TRACKED_BLOCKS + 1];
-
- static Int num_alloc;
- static Int num_free;
- static Int num_realloc; /* counts only `real' reallocations
- (i.e., an existing buffer will be resized
- to a value larger than zero */
-
- static Int fail_alloc;
- static Int fail_realloc;
- static Int fail_free;
-
-#endif /* DEBUG_MEMORY */
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- Long TTMemory_Allocated;
- Long TTMemory_MaxAllocated;
-#endif
-
-
-/*******************************************************************
- *
- * Function : TT_Alloc
- *
- * Description : Allocates memory from the heap buffer.
- *
- * Input : Size size of the memory to be allocated
- * P pointer to a buffer pointer
- *
- * Output : Error code.
- *
- * NOTE : The newly allocated block should _always_ be zeroed
- * on return. Many parts of the engine rely on this to
- * work properly.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Alloc( ULong Size, void** P )
- {
-#ifdef DEBUG_MEMORY
- Int i;
-#endif
-
-
- if ( !P )
- return TT_Err_Invalid_Argument;
-
- if ( Size > (size_t)-1 )
- return TT_Err_Out_Of_Memory;
- if ( Size > 0 )
- {
- *P = (void*)malloc( Size );
- if ( !*P )
- return TT_Err_Out_Of_Memory;
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated += Size;
- TTMemory_MaxAllocated += Size;
-#endif
-
-#ifdef DEBUG_MEMORY
-
- num_alloc++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != NULL )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_alloc++;
- else
- {
- pointers[i].base = *P;
- pointers[i].size = Size;
- }
-
-#endif /* DEBUG_MEMORY */
-
- MEM_Set( *P, 0, Size );
- }
- else
- *P = NULL;
-
- return TT_Err_Ok;
- }
-
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-
-
-/*******************************************************************
- *
- * Function : TT_Realloc
- *
- * Description : Reallocates memory from the heap buffer.
- *
- * Input : Size new size of the memory to be allocated;
- * if zero, TT_Free() will be called
- * P pointer to a buffer pointer; if *P == NULL,
- * TT_Alloc() will be called
- *
- * Output : Error code.
- *
- * NOTES : It's not necessary to zero the memory in case the
- * reallocated buffer is larger than before -- the
- * application has to take care of this.
- *
- * If the memory request fails, TT_Free() will be
- * called on *P, and TT_Err_Out_Of_Memory returned.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Realloc( ULong Size, void** P )
- {
- void* Q;
-
-#ifdef DEBUG_MEMORY
- Int i;
-#endif
-
-
- if ( !P )
- return TT_Err_Invalid_Argument;
-
- if ( !*P )
- return TT_Alloc( Size, P );
-
- if ( Size == 0 )
- return TT_Free( P );
-
- if ( Size > (size_t)-1 )
- {
- TT_Free( *P );
- return TT_Err_Out_Of_Memory;
- }
-
- Q = (void*)realloc( *P, Size );
- if ( !Q )
- {
- TT_Free( *P );
- return TT_Err_Out_Of_Memory;
- }
-
-#ifdef DEBUG_MEMORY
-
- num_realloc++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != *P )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_realloc++;
- else
- {
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated += Size - pointers[i].size;
- if ( Size > pointers[i].size )
- TTMemory_MaxAllocated += Size - pointers[i].size;
-#endif
-
- pointers[i].base = Q;
- pointers[i].size = size;
- }
-#endif /* DEBUG_MEMORY */
-
- *P = Q;
-
- return TT_Err_Ok;
- }
-
-
-#endif /* TT_CONFIG_OPTION_EXTEND_ENGINE */
-
-
-/*******************************************************************
- *
- * Function : TT_Free
- *
- * Description : Releases a previously allocated block of memory.
- *
- * Input : P pointer to memory block
- *
- * Output : Always SUCCESS.
- *
- * Note : The pointer must _always_ be set to NULL by this function.
- *
- ******************************************************************/
-
- EXPORT_FUNC
- TT_Error TT_Free( void** P )
- {
-#ifdef DEBUG_MEMORY
- Int i;
-#endif /* DEBUG_MEMORY */
-
-
- if ( !P || !*P )
- return TT_Err_Ok;
-
-#ifdef DEBUG_MEMORY
-
- num_free++;
-
- i = 0;
- while ( i < MAX_TRACKED_BLOCKS && pointers[i].base != *P )
- i++;
-
- if ( i >= MAX_TRACKED_BLOCKS )
- fail_free++;
- else
- {
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated -= pointers[i].size;
-#endif
-
- pointers[i].base = NULL;
- pointers[i].size = 0;
- }
-#endif /* DEBUG_MEMORY */
-
- free( *P );
-
- *P = NULL;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTMemory_Init
- *
- * Description : Initializes the memory.
- *
- * Output : Always SUCCESS.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTMemory_Init( void )
- {
-#ifdef DEBUG_MEMORY
- Int i;
-
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- pointers[i].base = NULL;
- pointers[i].size = 0;
- }
-
- num_alloc = 0;
- num_realloc = 0;
- num_free = 0;
-
- fail_alloc = 0;
- fail_realloc = 0;
- fail_free = 0;
-#endif
-
-
-#ifndef TT_CONFIG_OPTION_THREAD_SAFE
- TTMemory_Allocated = 0;
- TTMemory_MaxAllocated = 0;
-#endif
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TTMemory_Done
- *
- * Description : Finalizes memory usage.
- *
- * Output : Always SUCCESS.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTMemory_Done( void )
- {
-#ifdef DEBUG_MEMORY
- Int i, num_leaked, tot_leaked;
-
-
- num_leaked = 0;
- tot_leaked = 0;
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- if ( pointers[i].base )
- {
- num_leaked ++;
- tot_leaked += pointers[i].size;
- }
- }
-
- fprintf( stderr,
- "%d memory allocations, of which %d failed\n",
- num_alloc,
- fail_alloc );
-
- fprintf( stderr,
- "%d memory reallocations, of which %d failed\n",
- num_realloc,
- fail_realloc );
-
- fprintf( stderr,
- "%d memory frees, of which %d failed\n",
- num_free,
- fail_free );
-
- if ( num_leaked > 0 )
- {
- fprintf( stderr,
- "There are %d leaked memory blocks, totalizing %d bytes\n",
- num_leaked, tot_leaked );
-
- for ( i = 0; i < MAX_TRACKED_BLOCKS; i++ )
- {
- if ( pointers[i].base )
- {
- fprintf( stderr,
- "index: %4d (base: $%08lx, size: %08ld)\n",
- i,
- (long)pointers[i].base,
- pointers[i].size );
- }
- }
- }
- else
- fprintf( stderr, "No memory leaks !\n" );
-
-#endif /* DEBUG_MEMORY */
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttmemory.h b/Build/source/libs/libttf/ttmemory.h
deleted file mode 100644
index 8cdae2327d2..00000000000
--- a/Build/source/libs/libttf/ttmemory.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*******************************************************************
- *
- * ttmemory.h 1.2
- *
- * Memory management component (specification).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- * Changes between 1.2 and 1.1:
- *
- * - the font pool is gone! All allocations are now performed
- * with malloc() and free().
- *
- * - introduced the FREE() macro and the Free() function for
- * future use in destructors.
- *
- * - Init_FontPool() is now a macro to allow the compilation of
- * 'legacy' applications (all four test programs have been updated).
- *
- ******************************************************************/
-
-#ifndef TTMEMORY_H
-#define TTMEMORY_H
-
-#include "ttconfig.h"
-#include "tttypes.h"
-#include <string.h>
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#define MEM_Set( dest, byte, count ) memset( dest, byte, count )
-
-#ifdef HAVE_MEMCPY
-#define MEM_Copy( dest, source, count ) memcpy( dest, source, count )
-#else
-#define MEM_Copy( dest, source, count ) bcopy( source, dest, count )
-#endif
-
-#ifdef HAVE_MEMMOVE
-#define MEM_Move( dest, source, count ) memmove( dest, source, count )
-#else
-#define MEM_Move( dest, source, count ) bcopy( source, dest, count )
-#endif
-
-
-#define MEM_Alloc( _pointer_, _size_ ) \
- TT_Alloc( _size_, (void**)&(_pointer_) )
-
-#define MEM_Realloc( _pointer_, _size_ ) \
- TT_Realloc( _size_, (void**)&(_pointer_) )
-
-#define ALLOC( _pointer_, _size_ ) \
- ( ( error = MEM_Alloc( _pointer_, _size_ ) ) != TT_Err_Ok )
-
-#define ALLOC_ARRAY( _pointer_, _count_, _type_ ) \
- ( ( error = MEM_Alloc( _pointer_, \
- (_count_) * sizeof ( _type_ ) ) ) != TT_Err_Ok )
-
-#define REALLOC( _pointer_, _size_ ) \
- ( ( error = MEM_Realloc( _pointer_, _size_ ) ) != TT_Err_Ok )
-
-#define REALLOC_ARRAY( _pointer_, _count_, _type_ ) \
- ( (error = MEM_Realloc( _pointer_, \
- (_count_) * sizeof ( _type_ ) ) ) != TT_Err_Ok )
-
-#define FREE( _pointer_ ) \
- TT_Free( (void**)&(_pointer_) )
-
-
- /* Allocate a block of memory of 'Size' bytes from the heap, and */
- /* sets the pointer '*P' to its address. If 'Size' is 0, or in */
- /* case of error, the pointer is always set to NULL. */
-
- EXPORT_DEF
- TT_Error TT_Alloc( ULong Size, void** P );
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-
- /* Reallocates a block of memory pointed to by '*P' to 'Size' */
- /* bytes from the heap, possibly changing '*P'. If 'Size' is 0, */
- /* TT_Free() is called, if '*P' is NULL, TT_Alloc() is called. */
- /* '*P' is freed (if it's non-NULL) in case of error. */
-
- EXPORT_DEF
- TT_Error TT_Realloc( ULong Size, void** P );
-
-#endif /* TT_CONFIG_OPTION_EXTEND_ENGINE */
-
- /* Releases a block that was previously allocated through Alloc. */
- /* Note that the function returns successfully when P or *P are */
- /* already NULL. The pointer '*P' is set to NULL on exit in */
- /* case of success. */
-
- EXPORT_DEF
- TT_Error TT_Free( void** P );
-
-
- /* For "legacy" applications, that should be re-coded. */
- /* Note that this won't release the previously allocated font pool. */
-
-#define Init_FontPool( x, y ) while( 0 ) { }
-
-
- LOCAL_DEF TT_Error TTMemory_Init( void );
- LOCAL_DEF TT_Error TTMemory_Done( void );
-
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTMEMORY_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttmutex.c b/Build/source/libs/libttf/ttmutex.c
deleted file mode 100644
index 2f4b9204e0c..00000000000
--- a/Build/source/libs/libttf/ttmutex.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************
- *
- * ttmutex.c 1.0
- *
- * Mutual exclusion object, single-threaded implementation
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 is a generic non-functional implementation
- * that you are welcome to refine for your own system.
- *
- * Please name your system-specific source with a
- * different name (like ttmutex-os2.c or ttmutex-linux.c)
- * and change your makefile accordingly.
- *
- ******************************************************************/
-
-#include "ttmutex.h"
-
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_mutex
-
-
-/* ANSI C prevents the compilation of empty units. We thus introduce */
-/* a dummy typedef to get rid of compiler warnings/errors. */
-/* Note that gcc's -ansi -pedantic does not report any error here. */
-/* Watcom, VC++ or Borland C++ do however. */
-
- typedef void _ttmutex_to_satisfy_ANSI_C_;
-
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE
-
- LOCAL_FUNC
- void TT_Mutex_Create ( TMutex* mutex )
- {
- *mutex = (void*)-1;
- /* Replace this line with your own mutex creation code */
- }
-
-
- LOCAL_FUNC
- void TT_Mutex_Delete ( TMutex* mutex )
- {
- *mutex = (void*)0;
- /* Replace this line with your own mutex destruction code */
- }
-
-
- LOCAL_FUNC
- void TT_Mutex_Lock ( TMutex* mutex )
- {
- /* NOTE: It is legal to call this function with a NULL argument */
- /* in which case an immediate return is appropriate. */
- if ( !mutex )
- return;
-
- ; /* Insert your own mutex locking code here */
- }
-
-
- LOCAL_FUNC
- void TT_Mutex_Release( TMutex* mutex )
- {
- /* NOTE: It is legal to call this function with a NULL argument */
- /* in which case an immediate return is appropriate */
- if ( !mutex )
- return;
-
- ; /* Insert your own mutex release code here */
- }
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttmutex.h b/Build/source/libs/libttf/ttmutex.h
deleted file mode 100644
index 097385b22a0..00000000000
--- a/Build/source/libs/libttf/ttmutex.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************
- *
- * ttmutex.h 1.0
- *
- * Mutual exclusion object / dummy generic interface.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 file provides a generic interface. The implementation
- * to compile depends on your system and the type of
- * library you want to build (either singly-threaded,
- * thread-safe or re-entrant).
- *
- * Please read the technical documentation for more details.
- *
- ******************************************************************/
-
-#ifndef TTMUTEX_H
-#define TTMUTEX_H
-
-#include "ttconfig.h"
-
-
- typedef void* TMutex; /* typeless reference to a mutex */
-
-#ifdef TT_CONFIG_OPTION_THREAD_SAFE /* thread-safe and re-entrant builds */
-
-#define MUTEX_Create( mutex ) TT_Mutex_Create ( &(mutex) )
-#define MUTEX_Destroy( mutex ) TT_Mutex_Delete ( &(mutex) )
-#define MUTEX_Lock( mutex ) TT_Mutex_Lock ( &(mutex) )
-#define MUTEX_Release( mutex ) TT_Mutex_Release( &(mutex) )
-
- LOCAL_DEF void TT_Mutex_Create ( TMutex* mutex ); /* Create a new mutex */
- LOCAL_DEF void TT_Mutex_Delete ( TMutex* mutex ); /* Delete a mutex */
- LOCAL_DEF void TT_Mutex_Lock ( TMutex* mutex ); /* Lock a mutex. */
- LOCAL_DEF void TT_Mutex_Release( TMutex* mutex ); /* Release a mutex */
-
-#else /* for the single-thread build */
-
-#define MUTEX_Create( mutex ) /* nothing */
-#define MUTEX_Destroy( mutex ) /* nothing */
-#define MUTEX_Lock( mutex ) /* nothing */
-#define MUTEX_Release( mutex ) /* nothing */
-
- /* No code will be generated for mutex operations */
-
-#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
-
-#endif /* TTMUTEX_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttobjs.c b/Build/source/libs/libttf/ttobjs.c
deleted file mode 100644
index 9ce11013ae8..00000000000
--- a/Build/source/libs/libttf/ttobjs.c
+++ /dev/null
@@ -1,1495 +0,0 @@
-/*******************************************************************
- *
- * ttobjs.c 1.0
- *
- * Objects manager.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttobjs.h"
-#include "ttfile.h"
-#include "ttcalc.h"
-#include "ttmemory.h"
-#include "ttload.h"
-#include "ttinterp.h"
-#include "ttdebug.h"
-
-
-/* Add extensions definition */
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
-#include "ttextend.h"
-#endif
-
-/* Required by tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_objs
-
-/*******************************************************************
- *
- * Function : New_Context
- *
- * Description : Creates a new execution context for a given
- * face object.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- PExecution_Context New_Context( PFace face )
- {
- PEngine_Instance engine;
- PExecution_Context exec;
-
-
- if ( !face )
- return NULL;
-
- engine = face->engine;
- CACHE_New( engine->objs_exec_cache, exec, face );
- return exec;
- }
-
-
-/*******************************************************************
- *
- * Function : Done_Context
- *
- * Description : Discards an execution context.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Done_Context( PExecution_Context exec )
- {
- PEngine_Instance engine;
-
-
- if ( !exec )
- return TT_Err_Ok;
-
- engine = exec->face->engine;
- return CACHE_Done( engine->objs_exec_cache, exec );
- }
-
-
-#if 0
-
-/*******************************************************************
- *
- * Function : New_Instance
- *
- * Description : Creates a new instance for a given face object.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- PInstance New_Instance( PFace face )
- {
- PInstance ins;
-
-
- if ( !face )
- return NULL;
-
- CACHE_New( &face->instances, ins, face );
-
- return ins;
- }
-
-
-/*******************************************************************
- *
- * Function : Done_Instance
- *
- * Description : Discards an instance.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Done_Instance( PInstance instance )
- {
- return CACHE_Done( &instance->owner->instances, instance );
- }
-
-#endif
-
-
-/*******************************************************************
- * *
- * GLYPH ZONE FUNCTIONS *
- * *
- * *
- *******************************************************************/
-
-/*******************************************************************
- *
- * Function : New_Glyph_Zone
- *
- * Description : Allocates a new glyph zone
- *
- * Input : pts pointer to the target glyph zone record
- * maxPoints capacity of glyph zone in points
- * maxContours capacity of glyph zone in contours
- *
- * Return : Error code.
- *
- *****************************************************************/
-
- static
- TT_Error New_Glyph_Zone( PGlyph_Zone pts,
- UShort maxPoints,
- UShort maxContours )
- {
- TT_Error error;
-
-
- if ( ALLOC( pts->org, maxPoints * 2 * sizeof ( TT_F26Dot6 ) ) ||
- ALLOC( pts->cur, maxPoints * 2 * sizeof ( TT_F26Dot6 ) ) ||
- ALLOC( pts->touch, maxPoints * sizeof ( Byte ) ) ||
- ALLOC( pts->contours, maxContours * sizeof ( Short ) ) )
- return error;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Done_Glyph_Zone
- *
- * Description : Deallocates a glyph zone
- *
- * Input : pts pointer to the target glyph zone record
- *
- * Return : Error code.
- *
- *****************************************************************/
-
- static
- TT_Error Done_Glyph_Zone( PGlyph_Zone pts )
- {
- FREE( pts->contours );
- FREE( pts->touch );
- FREE( pts->cur );
- FREE( pts->org );
-
- return TT_Err_Ok;
- }
-
-
-
-/*******************************************************************
- * *
- * CODERANGE FUNCTIONS *
- * *
- *******************************************************************/
-
-/*******************************************************************
- *
- * Function : Goto_CodeRange
- *
- * Description : Switch to a new code range (updates Code and IP).
- *
- * Input : exec target execution context
- * range new execution code range
- * IP new IP in new code range
- *
- * Output : SUCCESS on success. FAILURE on error (no code range).
- *
- *****************************************************************/
-
- LOCAL_FUNC
- TT_Error Goto_CodeRange( PExecution_Context exec,
- Int range,
- ULong IP )
- {
- PCodeRange cr;
-
-
- if ( range < 1 || range > 3 )
- return TT_Err_Bad_Argument;
-
- cr = &exec->codeRangeTable[range - 1];
-
- if ( cr->Base == NULL )
- return TT_Err_Invalid_CodeRange;
-
- /* 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. */
-
- if ( IP > cr->Size )
- return TT_Err_Code_Overflow;
-
- exec->code = cr->Base;
- exec->codeSize = cr->Size;
- exec->IP = IP;
- exec->curRange = range;
-
- return TT_Err_Ok;
- }
-
-
-#if 0
-
-/*******************************************************************
- *
- * Function : Get_CodeRange
- *
- * Description : Returns a pointer to a given code range. Should
- * be used only by the debugger. Returns NULL if
- * 'range' is out of current bounds.
- *
- * Input : exec target execution context
- * range new execution code range
- *
- * Output : Pointer to the code range record. NULL on failure.
- *
- *****************************************************************/
-
- LOCAL_FUNC
- PCodeRange Get_CodeRange( PExecution_Context exec, Int range )
- {
- if ( range < 1 || range > 3 )
- return NULL;
- else /* arrays start with 1 in Pascal, and with 0 in C */
- return &exec->codeRangeTable[range - 1];
- }
-
-#endif
-
-
-/*******************************************************************
- *
- * Function : Set_CodeRange
- *
- * Description : Sets a code range.
- *
- * Input : exec target execution context
- * range code range index
- * base new code base
- * length range size in bytes
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- *****************************************************************/
-
- LOCAL_FUNC
- TT_Error Set_CodeRange( PExecution_Context exec,
- Int range,
- void* base,
- ULong length )
- {
- if ( range < 1 || range > 3 )
- return TT_Err_Bad_Argument;
-
- exec->codeRangeTable[range - 1].Base = (Byte*)base;
- exec->codeRangeTable[range - 1].Size = length;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Clear_CodeRange
- *
- * Description : Clears a code range.
- *
- * Input : exec target execution context
- * range code range index
- *
- * Output : SUCCESS on success. FAILURE on error.
- *
- * Note : Does not set the Error variable.
- *
- *****************************************************************/
-
- LOCAL_FUNC
- TT_Error Clear_CodeRange( PExecution_Context exec, Int range )
- {
- if ( range < 1 || range > 3 )
- return TT_Err_Bad_Argument;
-
- exec->codeRangeTable[range - 1].Base = NULL;
- exec->codeRangeTable[range - 1].Size = 0;
-
- return TT_Err_Ok;
- }
-
-
-
-/*******************************************************************
- * *
- * EXECUTION CONTEXT ROUTINES *
- * *
- *******************************************************************/
-
-/*******************************************************************
- *
- * Function : Context_Destroy
- *
- *****************************************************************/
-
- LOCAL_FUNC
- TT_Error Context_Destroy( void* _context )
- {
- PExecution_Context exec = (PExecution_Context)_context;
-
- if ( !exec )
- return TT_Err_Ok;
-
- /* free composite load stack */
- FREE( exec->loadStack );
- exec->loadSize = 0;
-
- /* points zone */
- Done_Glyph_Zone( &exec->pts );
- exec->maxPoints = 0;
- exec->maxContours = 0;
-
- /* free stack */
- FREE( exec->stack );
- exec->stackSize = 0;
-
- /* free call stack */
- FREE( exec->callStack );
- exec->callSize = 0;
- exec->callTop = 0;
-
- /* free glyph code range */
- FREE( exec->glyphIns );
- exec->glyphSize = 0;
-
- exec->instance = NULL;
- exec->face = NULL;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Context_Create
- *
- *****************************************************************/
-
- LOCAL_FUNC
- TT_Error Context_Create( void* _context, void* _face )
- {
- PExecution_Context exec = (PExecution_Context)_context;
-
- PFace face = (PFace)_face;
- TT_Error error;
-
-
- /* XXX : We don't reserve arrays anymore, this is done automatically */
- /* during a "Context_Load".. */
-
- exec->callSize = 32;
- if ( ALLOC_ARRAY( exec->callStack, exec->callSize, TCallRecord ) )
- 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->loadSize = 0;
- exec->glyphSize = 0;
-
- exec->stack = NULL;
- exec->loadStack = NULL;
- exec->glyphIns = NULL;
-
- exec->face = face;
- exec->instance = NULL;
-
- return TT_Err_Ok;
-
- Fail_Memory:
- Context_Destroy( exec );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Context_Load
- *
- *****************************************************************/
-
-/****************************************************************/
-/* */
-/* Update_Max : Reallocate a buffer if it needs to */
-/* */
-/* input: size address of buffer's current size */
-/* expressed in elements */
-/* */
-/* multiplier size in bytes of each element in the */
-/* buffer */
-/* */
-/* buff address of the buffer base pointer */
-/* */
-/* new_max new capacity (size) of the buffer */
-
- static
- TT_Error Update_Max( ULong* size,
- ULong multiplier,
- void** buff,
- ULong new_max )
- {
- TT_Error error;
-
- if ( *size < new_max )
- {
- FREE( *buff );
- if ( ALLOC( *buff, new_max * multiplier ) )
- return error;
- *size = new_max;
- }
- return TT_Err_Ok;
- }
-
-
-/****************************************************************/
-/* */
-/* Update_Zone: Reallocate a zone if it needs to */
-/* */
-/* input: zone address of the target zone */
-/* */
-/* maxPoints address of the zone's current capacity */
-/* in points */
-/* */
-/* maxContours address of the zone's current capacity */
-/* in contours */
-/* */
-/* newPoints new capacity in points */
-/* */
-/* newContours new capacity in contours */
-/* */
-
- static
- TT_Error Update_Zone( PGlyph_Zone zone,
- UShort* maxPoints,
- UShort* maxContours,
- UShort newPoints,
- UShort newContours )
- {
- if ( *maxPoints < newPoints || *maxContours < newContours )
- {
- TT_Error error;
-
-
- Done_Glyph_Zone( zone );
-
- error = New_Glyph_Zone( zone, newPoints, newContours );
- if ( error )
- return error;
-
- *maxPoints = newPoints;
- *maxContours = newContours;
- }
- return TT_Err_Ok;
- }
-
-
- LOCAL_FUNC
- TT_Error Context_Load( PExecution_Context exec,
- PFace face,
- PInstance ins )
- {
- Int i;
- TMaxProfile* maxp;
- TT_Error error;
-
- exec->face = face;
- maxp = &face->maxProfile;
-
- exec->instance = ins;
-
- if ( ins )
- {
- exec->numFDefs = ins->numFDefs;
- exec->numIDefs = ins->numIDefs;
- exec->maxFDefs = ins->maxFDefs;
- exec->maxIDefs = ins->maxIDefs;
- exec->FDefs = ins->FDefs;
- exec->IDefs = ins->IDefs;
- exec->metrics = ins->metrics;
-
- exec->maxFunc = ins->maxFunc;
- exec->maxIns = ins->maxIns;
-
- for ( i = 0; i < MAX_CODE_RANGES; i++ )
- exec->codeRangeTable[i] = ins->codeRangeTable[i];
-
- /* set graphics state */
- exec->GS = ins->GS;
-
- exec->cvtSize = ins->cvtSize;
- exec->cvt = ins->cvt;
-
- exec->storeSize = ins->storeSize;
- exec->storage = ins->storage;
-
- exec->twilight = ins->twilight;
- }
-
- error = Update_Max( &exec->loadSize,
- sizeof ( TSubglyph_Record ),
- (void**)&exec->loadStack,
- face->maxComponents + 1 );
- if ( error )
- return error;
-
- error = Update_Max( &exec->stackSize,
- sizeof ( TT_F26Dot6 ),
- (void**)&exec->stack,
- maxp->maxStackElements + 32 );
- /* XXX : We reserve a little more elements on the stack to deal safely */
- /* with broken fonts like arialbs, courbs, timesbs... */
- if ( error )
- return error;
-
- error = Update_Max( &exec->glyphSize,
- sizeof ( Byte ),
- (void**)&exec->glyphIns,
- maxp->maxSizeOfInstructions );
- if ( error )
- return error;
-
- error = Update_Zone( &exec->pts,
- &exec->maxPoints,
- &exec->maxContours,
- exec->face->maxPoints + 2,
- exec->face->maxContours );
- /* XXX : We reserve two positions for the phantom points! */
- if ( error )
- return error;
-
- exec->pts.n_points = 0;
- exec->pts.n_contours = 0;
-
- exec->instruction_trap = FALSE;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Context_Save
- *
- *****************************************************************/
-
- LOCAL_FUNC
- TT_Error Context_Save( PExecution_Context exec,
- PInstance ins )
- {
- Int i;
-
- /* XXXX : Will probably disappear soon with all the coderange */
- /* management, which is now rather obsolete. */
-
- ins->numFDefs = exec->numFDefs;
- ins->numIDefs = exec->numIDefs;
- ins->maxFunc = exec->maxFunc;
- ins->maxIns = exec->maxIns;
-
- for ( i = 0; i < MAX_CODE_RANGES; i++ )
- ins->codeRangeTable[i] = exec->codeRangeTable[i];
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Context_Run
- *
- *****************************************************************/
-
- LOCAL_FUNC
- TT_Error Context_Run( PExecution_Context exec,
- Bool debug )
- {
- TT_Error error;
-
-
- if ( (error = Goto_CodeRange( exec,
- TT_CodeRange_Glyph, 0 )) != TT_Err_Ok )
- return error;
-
- 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;
-
- if ( !debug )
- return RunIns( exec );
- else
- return TT_Err_Ok;
- }
-
-
- LOCAL_FUNC
- const TGraphicsState Default_GraphicsState =
- {
- 0, 0, 0,
- { 0x4000, 0 },
- { 0x4000, 0 },
- { 0x4000, 0 },
- 1, 64, 1,
- TRUE, 68, 0, 0, 9, 3,
- 0, FALSE, 2, 1, 1, 1
- };
-
-
-
-/*******************************************************************
- * *
- * INSTANCE FUNCTIONS *
- * *
- * *
- *******************************************************************/
-
-/*******************************************************************
- *
- * Function : Instance_Destroy
- *
- * Description :
- *
- * Input : _instance the instance object to destroy
- *
- * Output : error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Instance_Destroy( void* _instance )
- {
- PInstance ins = (PInstance)_instance;
-
-
- if ( !_instance )
- return TT_Err_Ok;
-
- if ( ins->debug )
- {
- /* the debug context must be deleted by the debugger itself */
- ins->context = NULL;
- ins->debug = FALSE;
- }
-
- FREE( ins->cvt );
- ins->cvtSize = 0;
-
- /* free storage area */
- FREE( ins->storage );
- ins->storeSize = 0;
-
- /* twilight zone */
- Done_Glyph_Zone( &ins->twilight );
-
- FREE( ins->FDefs );
- FREE( ins->IDefs );
- ins->numFDefs = 0;
- ins->numIDefs = 0;
- ins->maxFDefs = 0;
- ins->maxIDefs = 0;
- ins->maxFunc = -1;
- ins->maxIns = -1;
-
- ins->owner = NULL;
- ins->valid = FALSE;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Instance_Create
- *
- * Description :
- *
- * Input : _instance instance record to initialize
- * _face parent face object
- *
- * Output : Error code. All partially built subtables are
- * released on error.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Instance_Create( void* _instance,
- void* _face )
- {
- PInstance ins = (PInstance)_instance;
- PFace face = (PFace)_face;
- TT_Error error;
- Int i;
- UShort n_twilight;
-
- PMaxProfile maxp = &face->maxProfile;
-
-
- ins->owner = face;
- ins->valid = FALSE;
-
- ins->maxFDefs = maxp->maxFunctionDefs;
- ins->maxIDefs = maxp->maxInstructionDefs;
- ins->cvtSize = face->cvtSize;
- ins->storeSize = maxp->maxStorage;
-
- /* Set default metrics */
- {
- PIns_Metrics metrics = &ins->metrics;
-
-
- metrics->pointSize = 10 * 64; /* default pointsize = 10pts */
-
- metrics->x_resolution = 96; /* default resolution = 96dpi */
- metrics->y_resolution = 96;
-
- metrics->x_ppem = 0;
- metrics->y_ppem = 0;
-
- metrics->rotated = FALSE;
- metrics->stretched = FALSE;
-
- /* set default compensation ( all 0 ) */
- for ( i = 0; i < 4; i++ )
- metrics->compensations[i] = 0;
- }
-
- /* allocate function defs, instruction defs, cvt and storage area */
- if ( ALLOC_ARRAY( ins->FDefs, ins->maxFDefs, TDefRecord ) ||
- ALLOC_ARRAY( ins->IDefs, ins->maxIDefs, TDefRecord ) ||
- ALLOC_ARRAY( ins->cvt, ins->cvtSize, Long ) ||
- ALLOC_ARRAY( ins->storage, ins->storeSize, Long ) )
- goto Fail_Memory;
-
- /* reserve twilight zone */
- n_twilight = maxp->maxTwilightPoints;
- error = New_Glyph_Zone( &ins->twilight, n_twilight, 0 );
- if (error)
- goto Fail_Memory;
-
- ins->twilight.n_points = n_twilight;
-
- return TT_Err_Ok;
-
- Fail_Memory:
- Instance_Destroy( ins );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Instance_Init
- *
- * Description : Initialize a fresh new instance.
- * Executes the font program if any is found.
- *
- * Input : _instance the instance object to destroy
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Instance_Init( PInstance ins )
- {
- PExecution_Context exec;
-
- TT_Error error;
- PFace face = ins->owner;
-
-
- if ( ins->debug )
- exec = ins->context;
- else
- exec = New_Context( face );
- /* debugging instances have their own context */
-
- if ( !exec )
- return TT_Err_Could_Not_Find_Context;
-
- ins->GS = Default_GraphicsState;
-
- ins->numFDefs = 0;
- ins->numIDefs = 0;
- ins->maxFunc = -1;
- ins->maxIns = -1;
-
- Context_Load( exec, face, ins );
-
- exec->callTop = 0;
- exec->top = 0;
-
- exec->period = 64;
- exec->phase = 0;
- exec->threshold = 0;
-
- {
- PIns_Metrics metrics = &exec->metrics;
-
-
- metrics->x_ppem = 0;
- metrics->y_ppem = 0;
- metrics->pointSize = 0;
- metrics->x_scale1 = 0;
- metrics->x_scale2 = 1;
- metrics->y_scale1 = 0;
- metrics->y_scale2 = 1;
-
- metrics->ppem = 0;
- metrics->scale1 = 0;
- metrics->scale2 = 1;
- metrics->ratio = 1L << 16;
- }
-
- exec->instruction_trap = FALSE;
-
- exec->cvtSize = ins->cvtSize;
- exec->cvt = ins->cvt;
-
- exec->F_dot_P = 0x10000;
-
- /* allow font program execution */
- Set_CodeRange( exec,
- TT_CodeRange_Font,
- face->fontProgram,
- face->fontPgmSize );
-
- /* disable CVT and glyph programs coderange */
- Clear_CodeRange( exec, TT_CodeRange_Cvt );
- Clear_CodeRange( exec, TT_CodeRange_Glyph );
-
- if ( face->fontPgmSize > 0 )
- {
- error = Goto_CodeRange( exec, TT_CodeRange_Font, 0 );
- if ( error )
- goto Fin;
-
- error = RunIns( exec );
- }
- else
- error = TT_Err_Ok;
-
- Fin:
- Context_Save( exec, ins );
-
- if ( !ins->debug )
- Done_Context( exec );
- /* debugging instances keep their context */
-
- ins->valid = FALSE;
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : Instance_Reset
- *
- * Description : Resets an instance to a new pointsize/transform.
- * Executes the cvt program if any is found.
- *
- * Input : _instance the instance object to destroy
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Instance_Reset( PInstance ins )
- {
- PExecution_Context exec;
-
- TT_Error error;
- ULong i;
- UShort j;
- PFace face;
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- if ( ins->valid )
- return TT_Err_Ok;
-
- face = ins->owner;
-
- if ( ins->metrics.x_ppem < 1 ||
- ins->metrics.y_ppem < 1 )
- return TT_Err_Invalid_PPem;
-
- /* compute new transformation */
- if ( ins->metrics.x_ppem >= ins->metrics.y_ppem )
- {
- ins->metrics.scale1 = ins->metrics.x_scale1;
- ins->metrics.scale2 = ins->metrics.x_scale2;
- ins->metrics.ppem = ins->metrics.x_ppem;
- ins->metrics.x_ratio = 1L << 16;
- ins->metrics.y_ratio = TT_MulDiv( ins->metrics.y_ppem,
- 0x10000,
- ins->metrics.x_ppem );
- }
- else
- {
- ins->metrics.scale1 = ins->metrics.y_scale1;
- ins->metrics.scale2 = ins->metrics.y_scale2;
- ins->metrics.ppem = ins->metrics.y_ppem;
- ins->metrics.x_ratio = TT_MulDiv( ins->metrics.x_ppem,
- 0x10000,
- ins->metrics.y_ppem );
- ins->metrics.y_ratio = 1L << 16;
- }
-
- /* Scale the cvt values to the new ppem. */
- /* We use by default the y ppem to scale the CVT. */
-
- for ( i = 0; i < ins->cvtSize; i++ )
- ins->cvt[i] = TT_MulDiv( face->cvt[i],
- ins->metrics.scale1,
- ins->metrics.scale2 );
-
- /* All twilight points are originally zero */
- for ( j = 0; j < ins->twilight.n_points; j++ )
- {
- ins->twilight.org[j].x = 0;
- ins->twilight.org[j].y = 0;
- ins->twilight.cur[j].x = 0;
- ins->twilight.cur[j].y = 0;
- }
-
- /* clear storage area */
- for ( i = 0; i < ins->storeSize; i++ )
- ins->storage[i] = 0;
-
- ins->GS = Default_GraphicsState;
-
- /* get execution context and run prep program */
-
- if ( ins->debug )
- exec = ins->context;
- else
- exec = New_Context(face);
- /* debugging instances have their own context */
-
- if ( !exec )
- return TT_Err_Could_Not_Find_Context;
-
- Context_Load( exec, face, ins );
-
- Set_CodeRange( exec,
- TT_CodeRange_Cvt,
- face->cvtProgram,
- face->cvtPgmSize );
-
- Clear_CodeRange( exec, TT_CodeRange_Glyph );
-
- exec->instruction_trap = FALSE;
-
- exec->top = 0;
- exec->callTop = 0;
-
- if ( face->cvtPgmSize > 0 )
- {
- error = Goto_CodeRange( exec, TT_CodeRange_Cvt, 0 );
- if ( error )
- goto Fin;
-
- if ( !ins->debug )
- error = RunIns( exec );
- }
- else
- error = TT_Err_Ok;
-
- ins->GS = exec->GS;
- /* save default graphics state */
-
- Fin:
- Context_Save( exec, ins );
-
- if ( !ins->debug )
- Done_Context( exec );
- /* debugging instances keep their context */
-
- if ( !error )
- ins->valid = TRUE;
-
- return error;
- }
-
-
-
-/*******************************************************************
- * *
- * FACE FUNCTIONS *
- * *
- * *
- *******************************************************************/
-
-/*******************************************************************
- *
- * Function : Face_Destroy
- *
- * Description : The face object destructor.
- *
- * Input : _face typeless pointer to the face object to destroy
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Face_Destroy( void* _face )
- {
- PFace face = (PFace)_face;
- UShort n;
-
-
- if ( !face )
- return TT_Err_Ok;
-
- /* well, we assume that no other thread is using the face */
- /* at this moment, but one is never sure enough. */
- MUTEX_Lock( face->lock );
-
- /* first of all, destroys the cached sub-objects */
- Cache_Destroy( &face->instances );
- Cache_Destroy( &face->glyphs );
-
- /* destroy the extensions */
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
- Extension_Destroy( face );
-#endif
-
- /* freeing the collection table */
- FREE( face->ttcHeader.TableDirectory );
- face->ttcHeader.DirCount = 0;
-
- /* freeing table directory */
- FREE( face->dirTables );
- face->numTables = 0;
-
- /* freeing the locations table */
- FREE( face->glyphLocations );
- face->numLocations = 0;
-
- /* freeing the character mapping tables */
- for ( n = 0; n < face->numCMaps; n++ )
- CharMap_Free( face->cMaps + n );
-
- FREE( face->cMaps );
- face->numCMaps = 0;
-
- /* freeing the CVT */
- FREE( face->cvt );
- face->cvtSize = 0;
-
- /* freeing the horizontal metrics */
- FREE( face->horizontalHeader.long_metrics );
- FREE( face->horizontalHeader.short_metrics );
-
- /* freeing the vertical ones, if any */
- if (face->verticalInfo)
- {
- FREE( face->verticalHeader.long_metrics );
- FREE( face->verticalHeader.short_metrics );
- face->verticalInfo = 0;
- }
-
- /* freeing the programs */
- FREE( face->fontProgram );
- FREE( face->cvtProgram );
- face->fontPgmSize = 0;
- face->cvtPgmSize = 0;
-
- /* freeing the gasp table */
- FREE( face->gasp.gaspRanges );
- face->gasp.numRanges = 0;
-
- /* freeing the name table */
- Free_TrueType_Names( face );
-
- /* freeing the hdmx table */
- Free_TrueType_Hdmx( face );
-
- /* TT_Close_Stream( &face->stream ); -- this is performed by the API */
-
- /* destroy the mutex */
- MUTEX_Destroy(face->lock);
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : Face_Create
- *
- * Description : The face object constructor.
- *
- * Input : _face face record to build
- * _input input stream where to load font data
- *
- * Output : Error code.
- *
- * NOTE : The input stream is kept in the face object. The
- * caller shouldn't destroy it after calling Face_Create().
- *
- ******************************************************************/
-
-#undef LOAD_
-#define LOAD_( table ) \
- (error = Load_TrueType_##table (face)) != TT_Err_Ok
-
-
- LOCAL_FUNC
- TT_Error Face_Create( void* _face,
- void* _input )
- {
- PEngine_Instance engine;
-
- TFont_Input* input = (TFont_Input*)_input;
- PFace face = (PFace)_face;
- TT_Error error;
-
-
- face->stream = input->stream;
- face->engine = input->engine;
-
- engine = face->engine;
-
- MUTEX_Create( face->lock );
-
- Cache_Create( engine,
- engine->objs_instance_class,
- &face->instances,
- &face->lock );
-
- Cache_Create( engine,
- engine->objs_glyph_class,
- &face->glyphs,
- &face->lock );
-
- /* Load collection directory if present, then font directory */
-
- error = Load_TrueType_Directory( face, input->fontIndex );
- if ( error )
- goto Fail;
-
- /* Load tables */
-
- if ( LOAD_( Header ) ||
- LOAD_( MaxProfile ) ||
- LOAD_( Locations ) ||
-
- (error = Load_TrueType_Metrics_Header( face, 0 )) != TT_Err_Ok ||
- /* load the 'hhea' & 'hmtx' tables at once */
-
- LOAD_( CMap ) ||
- LOAD_( CVT ) ||
- LOAD_( Programs ) ||
- LOAD_( Gasp ) ||
- LOAD_( Names ) ||
- LOAD_( OS2 ) ||
- LOAD_( PostScript ) ||
-
- (error = Load_TrueType_Metrics_Header( face, 1 )) != TT_Err_Ok ||
- /* try to load the 'vhea' & 'vmtx' at once if present */
-
- LOAD_( Hdmx ) )
-
- goto Fail;
-
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
- if ( ( error = Extension_Create( face ) ) != TT_Err_Ok )
- return error;
-#endif
-
- return TT_Err_Ok;
-
- Fail :
- Face_Destroy( face );
- return error;
- }
-
-#undef LOAD_
-
-
-/*******************************************************************
- *
- * Function : Glyph_Destroy
- *
- * Description : The glyph object destructor.
- *
- * Input : _glyph typeless pointer to the glyph record to destroy
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Glyph_Destroy( void* _glyph )
- {
- PGlyph glyph = (PGlyph)_glyph;
-
-
- if ( !glyph )
- return TT_Err_Ok;
-
- glyph->outline.owner = TRUE;
- return TT_Done_Outline( &glyph->outline );
- }
-
-
-/*******************************************************************
- *
- * Function : Glyph_Create
- *
- * Description : The glyph object constructor.
- *
- * Input : _glyph glyph record to build.
- * _face the glyph's parent face.
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error Glyph_Create( void* _glyph,
- void* _face )
- {
- PFace face = (PFace)_face;
- PGlyph glyph = (PGlyph)_glyph;
-
-
- if ( !face )
- return TT_Err_Invalid_Face_Handle;
-
- if ( !glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- glyph->face = face;
-
- /* XXX: Don't forget the space for the 2 phantom points */
- return TT_New_Outline( glyph->face->maxPoints + 2,
- glyph->face->maxContours,
- &glyph->outline );
- }
-
-
-/*******************************************************************
- *
- * Function : Scale_X
- *
- * Description : scale an horizontal distance from font
- * units to 26.6 pixels
- *
- * Input : metrics pointer to metrics
- * x value to scale
- *
- * Output : scaled value
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Pos Scale_X( PIns_Metrics metrics, TT_Pos x )
- {
- return TT_MulDiv( x, metrics->x_scale1, metrics->x_scale2 );
- }
-
-
-/*******************************************************************
- *
- * Function : Scale_Y
- *
- * Description : scale a vertical distance from font
- * units to 26.6 pixels
- *
- * Input : metrics pointer to metrics
- * y value to scale
- *
- * Output : scaled value
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Pos Scale_Y( PIns_Metrics metrics, TT_Pos y )
- {
- return TT_MulDiv( y, metrics->y_scale1, metrics->y_scale2 );
- }
-
-
-/*******************************************************************
- *
- * Function : TTObjs_Init
- *
- * Description : The TTObjs component initializer. Creates the
- * object cache classes, as well as the face record
- * cache.
- *
- * Input : engine engine instance
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- static
- const TCache_Class objs_face_class =
- {
- sizeof ( TFace ),
- -1,
- Face_Create,
- Face_Destroy,
- NULL,
- NULL
- };
-
- static
- const TCache_Class objs_instance_class =
- {
- sizeof ( TInstance ),
- -1,
- Instance_Create,
- Instance_Destroy,
- NULL,
- NULL
- };
-
- /* Note that we use a cache size of 1 for the execution context. */
- /* This is to avoid re-creating a new context each time we */
- /* change one instance's attribute (resolution and/or char sizes) */
- /* or when we load a glyph. */
-
- static
- const TCache_Class objs_exec_class =
- {
- sizeof ( TExecution_Context ),
- 1,
- Context_Create,
- Context_Destroy,
- NULL,
- NULL
- };
-
- static
- const TCache_Class objs_glyph_class =
- {
- sizeof ( TGlyph ),
- -1,
- Glyph_Create,
- Glyph_Destroy,
- NULL,
- NULL
- };
-
-
- LOCAL_FUNC
- TT_Error TTObjs_Init( PEngine_Instance engine )
- {
- PCache face_cache, exec_cache;
- TT_Error error;
-
-
- face_cache = 0;
- exec_cache = 0;
-
- if ( ALLOC( face_cache, sizeof ( TCache ) ) ||
- ALLOC( exec_cache, sizeof ( TCache ) ) )
- goto Fail;
-
- /* create face cache */
- error = Cache_Create( engine, (PCache_Class)&objs_face_class,
- face_cache, &engine->lock );
- if ( error )
- goto Fail;
-
- engine->objs_face_cache = face_cache;
-
- error = Cache_Create( engine, (PCache_Class)&objs_exec_class,
- exec_cache, &engine->lock );
- if ( error )
- goto Fail;
-
- engine->objs_exec_cache = exec_cache;
-
- engine->objs_face_class = (PCache_Class)&objs_face_class;
- engine->objs_instance_class = (PCache_Class)&objs_instance_class;
- engine->objs_execution_class = (PCache_Class)&objs_exec_class;
- engine->objs_glyph_class = (PCache_Class)&objs_glyph_class;
-
- goto Exit;
-
- Fail:
- FREE( face_cache );
- FREE( exec_cache );
-
- Exit:
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TTObjs_Done
- *
- * Description : The TTObjs component finalizer.
- *
- * Input : engine engine instance
- *
- * Output : Error code.
- *
- ******************************************************************/
-
- LOCAL_FUNC
- TT_Error TTObjs_Done( PEngine_Instance engine )
- {
- /* destroy all active faces and contexts before releasing the */
- /* caches */
- Cache_Destroy( (TCache*)engine->objs_exec_cache );
- Cache_Destroy( (TCache*)engine->objs_face_cache );
-
- /* Now frees caches and cache classes */
- FREE( engine->objs_exec_cache );
- FREE( engine->objs_face_cache );
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttobjs.h b/Build/source/libs/libttf/ttobjs.h
deleted file mode 100644
index a5ba1ff86f7..00000000000
--- a/Build/source/libs/libttf/ttobjs.h
+++ /dev/null
@@ -1,873 +0,0 @@
-/*******************************************************************
- *
- * ttobjs.h 1.0
- *
- * Objects definition unit.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttconfig.h"
-#include "ttengine.h"
-#include "ttmutex.h"
-#include "ttcache.h"
-#include "tttables.h"
-#include "ttcmap.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* */
-/* This file contains the definitions and methods of the four */
-/* kinds of objects managed by the FreeType engine. These are: */
-/* */
-/* */
-/* Face objects: */
-/* */
-/* There is always one face object per opened TrueType font */
-/* file, and only one. The face object contains data that is */
-/* independent of current transform/scaling/rotation and */
-/* pointsize, or glyph index. This data is made of several */
-/* critical tables that are loaded on face object creation. */
-/* */
-/* A face object tracks all active and recycled objects of */
-/* the instance and execution context classes. Destroying a face */
-/* object will automatically destroy all associated instances. */
-/* */
-/* */
-/* Instance objects: */
-/* */
-/* An instance object always relates to a given face object, */
-/* known as its 'parent' or 'owner', and contains only the */
-/* data that is specific to one given pointsize/transform of */
-/* the face. You can only create an instance from a face object. */
-/* */
-/* An instance's current transform/pointsize can be changed */
-/* at any time using a single high-level API call, */
-/* TT_Reset_Instance(). */
-/* */
-/* Execution Context objects: */
-/* */
-/* An execution context (or context in short) relates to a face. */
-/* It contains the data and tables that are necessary to load */
-/* and hint (i.e. execute the glyph instructions of) one glyph. */
-/* A context is a transient object that is queried/created on */
-/* the fly: client applications never deal with them directly. */
-/* */
-/* */
-/* Glyph objects: */
-/* */
-/* A glyph object contains only the minimal glyph information */
-/* needed to render one glyph correctly. This means that a glyph */
-/* object really contains tables that are sized to hold the */
-/* contents of _any_ glyph of a given face. A client application */
-/* can usually create one glyph object for a given face, then use */
-/* it for all subsequent loads. */
-/* */
-/* Here is an example of a client application : */
-/* (NOTE: No error checking performed here!) */
-/* */
-/* */
-/* TT_Face face; -- face handle */
-/* TT_Instance ins1, ins2; -- two instance handles */
-/* TT_Glyph glyph; -- glyph handle */
-/* */
-/* TT_Init_FreeType(); */
-/* */
-/* -- Initialize the engine. This must be done prior to _any_ */
-/* operation. */
-/* */
-/* TT_Open_Face( "/some/face/name.ttf", &face ); */
-/* */
-/* -- create the face object. This call opens the font file */
-/* */
-/* TT_New_Instance( face, &ins1 ); */
-/* TT_New_Instance( face, &ins2 ); */
-/* */
-/* TT_Set_Instance_PointSize( ins1, 8 ); */
-/* TT_Set_Instance_PointSize( ins2, 12 ); */
-/* */
-/* -- create two distinct instances of the same face */
-/* -- ins1 is pointsize 8 at resolution 96 dpi */
-/* -- ins2 is pointsize 12 at resolution 96 dpi */
-/* */
-/* TT_New_Glyph( face, &glyph ); */
-/* */
-/* -- create a new glyph object which will receive the contents */
-/* of any glyph of 'face' */
-/* */
-/* TT_Load_Glyph( ins1, glyph, 64, DEFAULT_GLYPH_LOAD ); */
-/* */
-/* -- load glyph indexed 64 at pointsize 8 in the 'glyph' object */
-/* -- NOTE: This call will fail if the instance and the glyph */
-/* do not relate to the same face object. */
-/* */
-/* TT_Get_Outline( glyph, &outline ); */
-/* */
-/* -- extract the glyph outline from the object and copies it */
-/* to the 'outline' record */
-/* */
-/* TT_Get_Metrics( glyph, &metrics ); */
-/* */
-/* -- extract the glyph metrics and put them into the 'metrics' */
-/* record */
-/* */
-/* TT_Load_Glyph( ins2, glyph, 64, DEFAULT_GLYPH_LOAD ); */
-/* */
-/* -- load the same glyph at pointsize 12 in the 'glyph' object */
-/* */
-/* */
-/* TT_Close_Face( &face ); */
-/* */
-/* -- destroy the face object. This will destroy 'ins1' and */
-/* 'ins2'. However, the glyph object will still be available */
-/* */
-/* TT_Done_FreeType(); */
-/* */
-/* -- Finalize the engine. This will also destroy all pending */
-/* glyph objects (here 'glyph'). */
-
- struct TFace_;
- struct TInstance_;
- struct TExecution_Context_;
- struct TGlyph_;
-
- typedef struct TFace_ TFace;
- typedef TFace* PFace;
-
- typedef struct TInstance_ TInstance;
- typedef TInstance* PInstance;
-
- typedef struct TExecution_Context_ TExecution_Context;
- typedef TExecution_Context* PExecution_Context;
-
- typedef struct TGlyph_ TGlyph;
- typedef TGlyph* PGlyph;
-
-
- /*************************************************************/
- /* */
- /* ADDITIONAL SUBTABLES */
- /* */
- /* These tables are not precisely defined by the specs */
- /* but their structures is implied by the TrueType font */
- /* file layout. */
- /* */
- /*************************************************************/
-
- /* Graphics State */
- /* */
- /* The Graphics State (GS) is managed by the */
- /* instruction field, but does not come from */
- /* the font file. Thus, we can use 'int's */
- /* where needed. */
-
- struct TGraphicsState_
- {
- UShort rp0;
- UShort rp1;
- UShort rp2;
-
- TT_UnitVector dualVector;
- TT_UnitVector projVector;
- TT_UnitVector freeVector;
-
- Long loop;
- TT_F26Dot6 minimum_distance;
- Int round_state;
-
- Bool auto_flip;
- TT_F26Dot6 control_value_cutin;
- TT_F26Dot6 single_width_cutin;
- TT_F26Dot6 single_width_value;
- Short delta_base;
- Short delta_shift;
-
- Byte instruct_control;
- Bool scan_control;
- Int scan_type;
-
- UShort gep0;
- UShort gep1;
- UShort gep2;
- };
-
- typedef struct TGraphicsState_ TGraphicsState;
-
-
- LOCAL_DEF
- const TGraphicsState Default_GraphicsState;
-
-
- /*************************************************************/
- /* */
- /* EXECUTION SUBTABLES */
- /* */
- /* These sub-tables relate to instruction execution. */
- /* */
- /*************************************************************/
-
-#define 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 */
-
-#define TT_CodeRange_Font 1
-#define TT_CodeRange_Cvt 2
-#define TT_CodeRange_Glyph 3
-
-
- struct TCodeRange_
- {
- PByte Base;
- ULong Size;
- };
-
- typedef struct TCodeRange_ TCodeRange;
- typedef TCodeRange* PCodeRange;
-
-
- /* Defintion of a code range */
- /* */
- /* Code ranges can be resident to a glyph (i.e. the Font Program) */
- /* while some others are volatile (Glyph instructions). */
- /* Tracking the state and presence of code ranges allows function */
- /* and instruction definitions within a code range to be forgotten */
- /* when the range is discarded. */
-
- typedef TCodeRange TCodeRangeTable[MAX_CODE_RANGES];
-
- /* defines a function/instruction definition record */
-
- struct TDefRecord_
- {
- Int Range; /* in which code range is it located ? */
- ULong Start; /* where does it start ? */
- Int Opc; /* function #, or instruction code */
- Bool Active; /* is it active ? */
- };
-
- typedef struct TDefRecord_ TDefRecord;
- typedef TDefRecord* PDefRecord;
- typedef TDefRecord* PDefArray;
-
- /* defines a call record, used to manage function calls. */
-
- struct TCallRecord_
- {
- Int Caller_Range;
- ULong Caller_IP;
- Long Cur_Count;
- ULong Cur_Restart;
- };
-
- typedef struct TCallRecord_ TCallRecord;
- typedef TCallRecord* PCallRecord;
- typedef TCallRecord* PCallStack; /* defines a simple call stack */
-
-
- /* This type defining a set of glyph points will be used to represent */
- /* each zone (regular and twilight) during instructions decoding. */
- struct TGlyph_Zone_
- {
- UShort n_points; /* number of points in zone */
- Short n_contours; /* number of contours */
-
- TT_Vector* org; /* original points coordinates */
- TT_Vector* cur; /* current points coordinates */
-
- Byte* touch; /* current touch flags */
- UShort* contours; /* contour end points */
- };
-
- typedef struct TGlyph_Zone_ TGlyph_Zone;
- typedef TGlyph_Zone* PGlyph_Zone;
-
-
-
-#ifndef TT_STATIC_INTEPRETER /* indirect implementation */
-
-#define EXEC_OPS PExecution_Context exc,
-#define EXEC_OP PExecution_Context exc
-#define EXEC_ARGS exc,
-#define EXEC_ARG exc
-
-#else /* static implementation */
-
-#define EXEC_OPS /* void */
-#define EXEC_OP /* void */
-#define EXEC_ARGS /* void */
-#define EXEC_ARG /* void */
-
-#endif
-
- /* Rounding function, as used by the interpreter */
- typedef TT_F26Dot6 (*TRound_Function)( EXEC_OPS TT_F26Dot6 distance,
- TT_F26Dot6 compensation );
-
- /* Point displacement along the freedom vector routine, as */
- /* used by the interpreter */
- typedef void (*TMove_Function)( EXEC_OPS PGlyph_Zone zone,
- UShort point,
- TT_F26Dot6 distance );
-
- /* Distance projection along one of the proj. vectors, as used */
- /* by the interpreter */
- typedef TT_F26Dot6 (*TProject_Function)( EXEC_OPS TT_Vector* v1,
- TT_Vector* v2 );
-
- /* reading a cvt value. Take care of non-square pixels when needed */
- typedef TT_F26Dot6 (*TGet_CVT_Function)( EXEC_OPS ULong index );
-
- /* setting or moving a cvt value. Take care of non-square pixels */
- /* when needed */
- typedef void (*TSet_CVT_Function)( EXEC_OPS ULong index,
- TT_F26Dot6 value );
-
- /* subglyph transformation record */
- struct TTransform_
- {
- TT_Fixed xx, xy; /* transformation */
- TT_Fixed yx, yy; /* matrix */
- TT_F26Dot6 ox, oy; /* offsets */
- };
-
- typedef struct TTransform_ TTransform;
- typedef TTransform* PTransform;
-
- /* subglyph loading record. Used to load composite components */
- struct TSubglyph_Record_
- {
- Long index; /* subglyph index; initialized with -1 */
- Bool is_scaled; /* is the subglyph scaled? */
- Bool is_hinted; /* should it be hinted? */
- Bool preserve_pps; /* preserve phantom points? */
-
- Long file_offset;
-
- TT_Big_Glyph_Metrics metrics;
-
- TGlyph_Zone zone;
-
- Long arg1; /* first argument */
- Long arg2; /* second argument */
-
- UShort element_flag; /* current load element flag */
-
- TTransform transform; /* transform */
-
- TT_Vector pp1, pp2; /* phantom points */
-
- };
-
- typedef struct TSubglyph_Record_ TSubglyph_Record;
- typedef TSubglyph_Record* PSubglyph_Record;
- typedef TSubglyph_Record* PSubglyph_Stack;
-
- /* A note regarding non-squared pixels: */
- /* */
- /* (This text will probably go into some docs at some time, for */
- /* now, it is kept there to explain some definitions in the */
- /* TIns_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, and some other are used in 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, */
- /* ratop = 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 instance and execution context objects */
- struct TIns_Metrics_
- {
- TT_F26Dot6 pointSize; /* point size. 1 point = 1/72 inch. */
-
- UShort x_resolution; /* device horizontal resolution in dpi. */
- UShort y_resolution; /* device vertical resolution in dpi. */
-
- UShort x_ppem; /* horizontal pixels per EM */
- UShort y_ppem; /* vertical pixels per EM */
-
- Long x_scale1;
- Long x_scale2; /* used to scale FUnits to fractional pixels */
-
- Long y_scale1;
- Long y_scale2; /* used to scale FUnits to fractional pixels */
-
- /* for non-square pixels */
- Long x_ratio;
- Long y_ratio;
-
- UShort ppem; /* maximum ppem size */
- Long ratio; /* current ratio */
- Long scale1;
- Long scale2; /* scale for ppem */
-
- TT_F26Dot6 compensations[4]; /* device-specific compensations */
-
- Bool rotated; /* `is the glyph rotated?'-flag */
- Bool stretched; /* `is the glyph stretched?'-flag */
- };
-
- typedef struct TIns_Metrics_ TIns_Metrics;
- typedef TIns_Metrics* PIns_Metrics;
-
-
-
- /***********************************************************************/
- /* */
- /* FreeType Face Type */
- /* */
- /***********************************************************************/
-
- struct TFace_
- {
- /* parent engine instance for the face object */
- PEngine_Instance engine;
-
- /* i/o stream */
- TT_Stream stream;
-
- /* used only by the threaded builds of the library */
- TMutex lock;
-
- /* TrueType collection header, if any was found */
- TTTCHeader ttcHeader;
-
- /* maximum profile table, as found in the TrueType file */
- TMaxProfile maxProfile;
-
- /* Note: */
- /* it seems that some maximum values cannot be */
- /* taken directly from this table, but rather by */
- /* combining some of its fields; e.g. the max. */
- /* number of points seems to be given by */
- /* MAX( maxPoints, maxCompositePoints ) */
- /* */
- /* For this reason, we define later our own */
- /* max values that are used to load and allocate */
- /* further tables. */
-
- TT_Header fontHeader; /* the font header, as */
- /* found in the TTF file */
- TT_Horizontal_Header horizontalHeader; /* the horizontal header */
-
- Bool verticalInfo; /* True when vertical table */
- TT_Vertical_Header verticalHeader; /* is present in the font */
-
- TT_OS2 os2; /* 'OS/2' table */
-
- TT_Postscript postscript; /* 'Post' table */
-
- TT_Hdmx hdmx; /* 'Hdmx' table */
-
- TName_Table nameTable; /* name table */
-
- TGasp gasp; /* the 'gasp' table */
-
- /* The directory of TrueType tables for this typeface */
- UShort numTables;
- PTableDirEntry dirTables;
-
- /* The directory of character mappings table for */
- /* this typeface */
- UShort numCMaps;
- PCMapTable cMaps;
-
- /* The glyph locations table */
- ULong numLocations; /* UShort is not enough */
-#ifndef TT_HUGE_PTR
- PStorage glyphLocations;
-#else
- Storage TT_HUGE_PTR * glyphLocations;
-#endif
-
- /* NOTE : The "hmtx" is now part of the horizontal header */
-
- /* the font program, if any */
- ULong fontPgmSize;
- PByte fontProgram;
-
- /* the cvt program, if any */
- ULong cvtPgmSize;
- PByte cvtProgram;
-
- /* the original, unscaled, control value table */
- ULong cvtSize;
- PShort cvt;
-
- /* The following values _must_ be set by the */
- /* maximum profile loader */
-
- UShort numGlyphs; /* the face's total number of glyphs */
- UShort maxPoints; /* max glyph points number, simple and composite */
- UShort maxContours; /* max glyph contours numb, simple and composite */
- UShort maxComponents; /* max components in a composite glyph */
-
- /* the following are object caches to track active */
- /* and recycled instances and execution contexts */
- /* objects. See 'ttcache.h' */
-
- TCache instances; /* current instances for this face */
- TCache glyphs; /* current glyph containers for this face */
-
-
- /* A typeless pointer to the face object extensions defined */
- /* in the 'ttextend.*' files. */
- void* extension;
- Int n_extensions; /* number of extensions */
-
- /* Use extensions to provide additional capabilities to the */
- /* engine. Read the developer's guide in the documentation */
- /* directory to know how to do that. */
-
- /* a generic pointer for client use - see TT_Set/Get_Face_Pointer */
- void* generic;
- };
-
-
-
- /***********************************************************************/
- /* */
- /* FreeType Instance Type */
- /* */
- /***********************************************************************/
-
- struct TInstance_
- {
- PFace owner; /* face object */
-
- Bool valid;
-
- TIns_Metrics metrics;
-
- UShort numFDefs; /* number of function definitions */
- UShort maxFDefs;
- PDefArray FDefs; /* table of FDefs entries */
-
- UShort numIDefs; /* number of instruction definitions */
- UShort maxIDefs;
- PDefArray IDefs; /* table of IDefs entries */
-
- Int maxFunc; /* maximum function definition id */
- Int maxIns; /* maximum instruction definition id */
-
- TCodeRangeTable codeRangeTable;
-
- TGraphicsState GS;
- TGraphicsState default_GS;
-
- ULong cvtSize; /* the scaled control value table */
- PLong cvt;
-
- ULong storeSize; /* The storage area is now part of the */
- PLong storage; /* instance */
-
- TGlyph_Zone twilight; /* The instance's twilight zone */
-
- /* debugging variables */
-
- /* When using the debugger, we must keep the */
- /* execution context tied to the instance */
- /* object rather than asking it on demand */
-
- Bool debug;
- PExecution_Context context;
-
- /* a generic pointer for client use - see TT_Set/Get_Instance_Pointer */
- void* generic;
- };
-
-
- /***********************************************************************/
- /* */
- /* FreeType Execution Context Type */
- /* */
- /***********************************************************************/
-
- struct TExecution_Context_
- {
- PFace face;
- PInstance instance;
-
- /* instructions state */
-
- TT_Error error; /* last execution error */
-
- Long top; /* top of exec. stack */
-
- ULong stackSize; /* size of exec. stack */
- PStorage stack; /* current exec. stack */
-
- Long args;
- ULong new_top; /* new top after exec. */
-
- TGlyph_Zone zp0, /* zone records */
- zp1,
- zp2,
- pts,
- twilight;
-
- TIns_Metrics metrics; /* instance metrics */
-
- TGraphicsState GS; /* current graphics state */
-
- Int curRange; /* current code range number */
- PByte code; /* current code range */
- ULong IP; /* current instruction pointer */
- ULong codeSize; /* size of current range */
-
- Byte opcode; /* current opcode */
- Int length; /* length of current opcode */
-
- Bool step_ins; /* true if the interpreter must */
- /* increment IP after ins. exec */
- ULong cvtSize;
- PLong cvt;
-
- ULong glyphSize; /* glyph instructions buffer size */
- PByte glyphIns; /* glyph instructions buffer */
-
- UShort numFDefs; /* number of function defs */
- UShort maxFDefs; /* maximum number of function defs */
- PDefRecord FDefs; /* table of FDefs entries */
-
- UShort numIDefs; /* number of instruction defs */
- UShort maxIDefs; /* maximum number of instruction defs */
- PDefRecord IDefs; /* table of IDefs entries */
-
- Int maxFunc;
- Int maxIns;
-
- Int callTop, /* top of call stack during execution */
- callSize; /* size of call stack */
- PCallStack callStack; /* call stack */
-
- UShort maxPoints; /* capacity of this context's "pts" */
- UShort maxContours; /* record, expressed in points and */
- /* contours.. */
-
- TCodeRangeTable codeRangeTable; /* table of valid coderanges */
- /* useful for the debugger */
-
- ULong storeSize; /* size of current storage */
- PLong storage; /* storage area */
-
- TT_F26Dot6 period; /* values used for the */
- TT_F26Dot6 phase; /* 'SuperRounding' */
- TT_F26Dot6 threshold;
-
- /* this seems to be unused */
-#if 0
- Int cur_ppem; /* ppem along the current proj vector */
-#endif
- Long scale1; /* scaling values along the current */
- Long scale2; /* projection vector too.. */
- Bool cached_metrics; /* the ppem is computed lazily. used */
- /* to trigger computation when needed */
-
- Bool instruction_trap; /* If True, the interpreter will */
- /* exit after each instruction */
-
- TGraphicsState default_GS; /* graphics state resulting from */
- /* the prep program */
- Bool is_composite; /* ture if the glyph is composite */
-
- Bool pedantic_hinting; /* if true, read and write array */
- /* bounds faults halt the hinting */
-
- /* latest interpreter additions */
-
- Long F_dot_P; /* dot product of freedom and projection */
- /* vectors */
- TRound_Function func_round; /* current rounding function */
-
- TProject_Function func_project, /* current projection function */
- func_dualproj, /* current dual proj. function */
- func_freeProj; /* current freedom proj. func */
-
- TMove_Function func_move; /* current point move function */
-
- TGet_CVT_Function func_read_cvt; /* read a cvt entry */
- TSet_CVT_Function func_write_cvt; /* write a cvt entry (in pixels) */
- TSet_CVT_Function func_move_cvt; /* incr a cvt entry (in pixels) */
-
- ULong loadSize;
- PSubglyph_Stack loadStack; /* loading subglyph stack */
-
- };
-
-
- /***********************************************************************/
- /* */
- /* FreeType Glyph Object Type */
- /* */
- /***********************************************************************/
-
- struct TGlyph_
- {
- PFace face;
- TT_Big_Glyph_Metrics metrics;
- TT_Outline outline;
- };
-
-
- /* The following type is used to load a font from a collection. */
- /* See Face_Create in ttobjs.c */
-
- struct TFont_Input_
- {
- TT_Stream stream; /* input stream */
- ULong fontIndex; /* index of font in collection */
- PEngine_Instance engine; /* parent engine instance */
-
- };
-
- typedef struct TFont_Input_ TFont_Input;
-
-
- /********************************************************************/
- /* */
- /* Code Range Functions */
- /* */
- /********************************************************************/
-
- /* Goto a specified coderange */
- LOCAL_DEF
- TT_Error Goto_CodeRange( PExecution_Context exec,
- Int range,
- ULong IP );
-
-#if 0
- /* Return a pointer to a given coderange record. */
- /* Used only by the debugger. */
- LOCAL_DEF
- PCodeRange Get_CodeRange( PExecution_Context exec,
- Int range );
-#endif
-
- /* Set a given code range properties */
- LOCAL_DEF
- TT_Error Set_CodeRange( PExecution_Context exec,
- Int range,
- void* base,
- ULong length );
-
- /* Clear a given coderange */
- LOCAL_DEF
- TT_Error Clear_CodeRange( PExecution_Context exec, Int range );
-
-
- LOCAL_DEF
- PExecution_Context New_Context( PFace face );
-
- LOCAL_DEF
- TT_Error Done_Context( PExecution_Context exec );
-
-
- LOCAL_DEF
- TT_Error Context_Load( PExecution_Context exec,
- PFace face,
- PInstance ins );
-
- LOCAL_DEF
- TT_Error Context_Save( PExecution_Context exec,
- PInstance ins );
-
- LOCAL_DEF
- TT_Error Context_Run( PExecution_Context exec,
- Bool debug );
-
- LOCAL_DEF
- TT_Error Instance_Init( PInstance ins );
-
- LOCAL_DEF
- TT_Error Instance_Reset( PInstance ins );
-
-
- /********************************************************************/
- /* */
- /* Handy scaling functions */
- /* */
- /********************************************************************/
-
- LOCAL_DEF TT_Pos Scale_X( PIns_Metrics metrics, TT_Pos x );
- LOCAL_DEF TT_Pos Scale_Y( PIns_Metrics metrics, TT_Pos y );
-
- /********************************************************************/
- /* */
- /* Component Initializer/Finalizer */
- /* */
- /* Called from 'freetype.c' */
- /* The component must create and register the face, instance and */
- /* execution context cache classes before any object can be */
- /* managed. */
- /* */
- /********************************************************************/
-
- LOCAL_DEF TT_Error TTObjs_Init( PEngine_Instance engine );
- LOCAL_DEF TT_Error TTObjs_Done( PEngine_Instance engine );
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTOBJS_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttraster.c b/Build/source/libs/libttf/ttraster.c
deleted file mode 100644
index 5daee1439cf..00000000000
--- a/Build/source/libs/libttf/ttraster.c
+++ /dev/null
@@ -1,2729 +0,0 @@
-/*******************************************************************
- *
- * ttraster.c 1.5
- *
- * The FreeType glyph rasterizer (body).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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:
- *
- * This version supports the following:
- *
- * - direct grayscaling
- * - sub-banding
- * - drop-out modes 4 and 5
- * - second pass for complete drop-out control (bitmap only)
- * - variable precision
- *
- * Changes between 1.5 and 1.4:
- *
- * Performance tuning.
- *
- * Changes between 1.4 and 1.3:
- *
- * Mainly performance tunings:
- *
- * - Line_Down() and Bezier_Down() now use the functions Line_Up()
- * and Bezier_Up() to do their work.
- * - optimized Split_Bezier()
- * - optimized linked lists used during sweeps
- *
- ******************************************************************/
-
-#include "ttraster.h"
-#include "ttdebug.h"
-#include "tttypes.h"
-#include "ttengine.h"
-#include "ttcalc.h" /* for TT_MulDiv only */
-
-#include "ttmemory.h" /* only used to allocate memory on engine init */
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_raster
-
-
-/* The default render pool size */
-#define RASTER_RENDER_POOL 64000
-
-/* The size of the two-lines intermediate bitmap used */
-/* for anti-aliasing */
-#define RASTER_GRAY_LINES 2048
-
-
-#define Raster_Err_None TT_Err_Ok
-#define Raster_Err_Not_Ini TT_Err_Raster_Not_Initialized
-#define Raster_Err_Overflow TT_Err_Raster_Pool_Overflow
-#define Raster_Err_Neg_Height TT_Err_Raster_Negative_Height
-#define Raster_Err_Invalid TT_Err_Raster_Invalid_Value
-#define Raster_Err_Gray_Unsupported TT_Err_Raster_Gray_Unsupported
-
-
-/* FMulDiv means "Fast MulDiv", it is uses in case where 'b' is typically */
-/* a small value and the result of (a*b) is known to fit in 32 bits. */
-#define FMulDiv( a, b, c ) ( (a) * (b) / (c) )
-
-/* On the other hand, SMulDiv is for "Slow MulDiv", and is used typically */
-/* for clipping computations. It simply uses the TT_MulDiv() function */
-/* defined in "ttcalc.h" */
-/* */
-/* So, the following definition fits the bill nicely, and we don't need */
-/* to use the one in 'ttcalc' anymore, even for 16-bit systems... */
-#define SMulDiv TT_MulDiv
-
-
-/* Define DEBUG_RASTER if you want to generate a debug version of the */
-/* rasterizer. This will progressively draw the glyphs while all the */
-/* computation are done directly on the graphics screen (the glyphs */
-/* will be inverted). */
-
-/* Note that DEBUG_RASTER should only be used for debugging with b/w */
-/* rendering, not with gray levels. */
-
-/* The definition of DEBUG_RASTER should appear in the file */
-/* "ttconfig.h". */
-
-#ifdef DEBUG_RASTER
- extern Char* Vio; /* A pointer to VRAM or display buffer */
-#endif
-
-
-/* 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
-
-#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 */
-
- /* States of each line, arc and profile */
- enum TStates_
- {
- Unknown,
- Ascending,
- Descending,
- Flat
- };
-
- typedef enum TStates_ TStates;
-
- struct TProfile_;
- typedef struct TProfile_ TProfile;
- typedef TProfile* PProfile;
-
- struct TProfile_
- {
- TT_F26Dot6 X; /* current coordinate during sweep */
- PProfile link; /* link to next profile - various purpose */
- PStorage offset; /* start of profile's data in render pool */
- Int flow; /* Profile orientation: Asc/Descending */
- Long height; /* profile's height in scanlines */
- Long start; /* profile's starting scanline */
-
- UShort 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;
-
-
- /* I use the classic trick of two dummy records for the head and tail */
- /* of a linked list; this reduces tests in insertion/deletion/sorting. */
- /* NOTE: used during sweeps only. */
-
- /* Simple record used to implement a stack of bands, required */
- /* by the sub-banding mechanism */
-
- struct TBand_
- {
- Short y_min; /* band's minimum */
- Short y_max; /* band's maximum */
- };
-
- typedef struct TBand_ TBand;
-
-
-#define AlignProfileSize \
- (( sizeof(TProfile)+sizeof(long)-1 ) / sizeof(long))
-
-
- /* Left fill bitmask */
- static const Byte LMask[8] =
- { 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01 };
-
- /* Right fill bitmask */
- static const Byte RMask[8] =
- { 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF };
-
- /* 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,
- TT_F26Dot6 x1,
- TT_F26Dot6 x2,
- PProfile left,
- PProfile right );
-
- typedef void Function_Sweep_Step( RAS_ARG );
-
-
-/* NOTE: These operations are only valid on 2's complement processors */
-
-#define FLOOR( x ) ( (x) & -ras.precision )
-#define CEILING( x ) ( ((x) + ras.precision - 1) & -ras.precision )
-#define TRUNC( x ) ( (signed long)(x) >> ras.precision_bits )
-#define FRAC( x ) ( (x) & (ras.precision - 1) )
-#define SCALED( x ) ( ((x) << ras.scale_shift) - ras.precision_half )
-
-#ifdef DEBUG_RASTER
-#define DEBUG_PSET Pset()
-#else
-#define DEBUG_PSET
-#endif
-
- struct TPoint_
- {
- Long x, y;
- };
-
- typedef struct TPoint_ TPoint;
-
-
- /* Note that I have moved the location of some fields in the */
- /* structure to ensure that the most used variables are used */
- /* at the top. Thus, their offset can be coded with less */
- /* opcodes, and it results in a smaller executable. */
-
- struct TRaster_Instance_
- {
- Int precision_bits; /* precision related variables */
- Int precision;
- Int precision_half;
- Long precision_mask;
- Int precision_shift;
- Int precision_step;
- Int precision_jitter;
-
- Int scale_shift; /* == precision_shift for bitmaps */
- /* == precision_shift+1 for pixmaps */
-
- PStorage buff; /* The profiles buffer */
- PStorage sizeBuff; /* Render pool size */
- PStorage maxBuff; /* Profiles buffer size */
- PStorage top; /* Current cursor in buffer */
-
- TT_Error error;
-
- PByte flags; /* current flags table */
- PUShort outs; /* current outlines table */
-
- UShort nPoints; /* number of points in current glyph */
- Short nContours; /* number of contours in current glyph */
- 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, 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 */
-
- TT_Raster_Map target; /* description of target bit/pixmap */
-
- Long traceOfs; /* current offset in target bitmap */
- Long traceG; /* current offset in target pixmap */
-
- Short traceIncr; /* sweep's increment in target bitmap */
-
- Short gray_min_x; /* current min x during gray rendering */
- Short gray_max_x; /* current max x during gray rendering */
-
- /* 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;
-
- TT_Vector* coords;
-
- Byte dropOutControl; /* current drop_out control method */
-
- Byte grays[5]; /* Palette of gray levels used for render */
-
- Byte* gray_lines; /* Intermediate table used to render the */
- /* graylevels pixmaps. */
- /* gray_lines is a buffer holding two */
- /* monochrome scanlines */
- Short gray_width; /* width in bytes of one monochrome */
- /* intermediate scanline of gray_lines. */
- /* Each gray pixel takes 2 bits long there */
-
- /* The gray_lines must hold 2 lines, thus with size */
- /* in bytes of at least 'gray_width*2' */
-
- Bool second_pass; /* indicates wether a horizontal pass */
- /* should be performed to control drop-out */
- /* accurately when calling Render_Glyph. */
- /* Note that there is no horizontal pass */
- /* during gray rendering. */
- TPoint arcs[2 * MaxBezier + 1]; /* The Bezier stack */
-
- TBand band_stack[16]; /* band stack used for sub-banding */
- Int band_top; /* band stack top */
-
- Int count_table[256]; /* Look-up table used to quickly count */
- /* set bits in a gray 2x2 cell */
- };
-
-
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
-
- static TRaster_Instance cur_ras;
-#define ras cur_ras
-
-#else
-
-#define ras (*raster)
-
-#endif /* TT_STATIC_RASTER */
-
-
-#ifdef DEBUG_RASTER
-
- /************************************************/
- /* */
- /* Pset: */
- /* */
- /* Used for debugging only. Plots a point */
- /* in VRAM during rendering (not afterwards). */
- /* */
- /* NOTE: This procedure relies on the value */
- /* of cProfile->start, which may not */
- /* be set when Pset is called sometimes. */
- /* This will usually result in a dot */
- /* plotted on the first screen scanline */
- /* (far away its original position). */
- /* */
- /* This "bug" reflects nothing wrong */
- /* in the current implementation, and */
- /* the bitmap is rendered correctly, */
- /* so don't panic if you see 'flying' */
- /* dots in debugging mode. */
- /* */
- /* - David */
- /* */
- /************************************************/
-
- static void Pset( RAS_ARG )
- {
- Long o;
- Long x;
-
-
- x = ras.top[-1];
-
- switch ( ras.cProfile->flow )
- {
- case TT_Flow_Up:
- o = Vio_ScanLineWidth *
- ( ras.top-ras.cProfile->offset + ras.cProfile->start ) +
- ( x / (ras.precision*8) );
- break;
-
- case TT_Flow_Down:
- o = Vio_ScanLineWidth *
- ( ras.cProfile->start-ras.top + ras.cProfile->offset ) +
- ( x / (ras.precision*8) );
- break;
- }
-
- if ( o > 0 )
- Vio[o] |= (unsigned)0x80 >> ( (x/ras.precision) & 7 );
- }
-
-
- static void Clear_Band( RAS_ARGS Int y1, Int y2 )
- {
- MEM_Set( Vio + y1*Vio_ScanLineWidth, (y2-y1+1)*Vio_ScanLineWidth, 0 );
- }
-
-#endif /* DEBUG_RASTER */
-
-
-/************************************************************************/
-/* */
-/* Function: Set_High_Precision */
-/* */
-/* Description: Sets precision variables according to param flag. */
-/* */
-/* Input: High set to True for high precision (typically for */
-/* ppem < 18), false otherwise. */
-/* */
-/************************************************************************/
-
- static void Set_High_Precision( RAS_ARGS Bool High )
- {
- if ( High )
- {
- ras.precision_bits = 10;
- ras.precision_step = 128;
- ras.precision_jitter = 24;
- }
- else
- {
- ras.precision_bits = 6;
- ras.precision_step = 32;
- ras.precision_jitter = 2;
- }
-
- PTRACE7(( "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;
- ras.precision_mask = -ras.precision;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: New_Profile */
-/* */
-/* Description: Creates a new Profile in the render pool. */
-/* */
-/* Input: aState state/orientation of the new Profile */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE in case of overflow or of incoherent Profile. */
-/* */
-/****************************************************************************/
-
- static Bool New_Profile( RAS_ARGS TStates aState )
- {
- if ( !ras.fProfile )
- {
- ras.cProfile = (PProfile)ras.top;
- ras.fProfile = ras.cProfile;
- ras.top += AlignProfileSize;
- }
-
- if ( ras.top >= ras.maxBuff )
- {
- ras.error = Raster_Err_Overflow;
- return FAILURE;
- }
-
- switch ( aState )
- {
- case Ascending:
- ras.cProfile->flow = TT_Flow_Up;
- PTRACE7(( "New ascending profile = %lx\n", (long)ras.cProfile ));
- break;
-
- case Descending:
- ras.cProfile->flow = TT_Flow_Down;
- PTRACE7(( "New descending profile = %lx\n", (long)ras.cProfile ));
- break;
-
- default:
- PTRACE0(( "Invalid profile direction in Raster:New_Profile !!\n" ));
- ras.error = Raster_Err_Invalid;
- return FAILURE;
- }
-
- ras.cProfile->start = 0;
- ras.cProfile->height = 0;
- ras.cProfile->offset = ras.top;
- ras.cProfile->link = (PProfile)0;
- ras.cProfile->next = (PProfile)0;
-
- if ( !ras.gProfile )
- ras.gProfile = ras.cProfile;
-
- ras.state = aState;
- ras.fresh = TRUE;
- ras.joint = FALSE;
-
- return SUCCESS;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: End_Profile */
-/* */
-/* Description: Finalizes the current Profile. */
-/* */
-/* Input: None */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE in case of overflow or incoherency. */
-/* */
-/****************************************************************************/
-
- static Bool End_Profile( RAS_ARG )
- {
- Long h;
- PProfile oldProfile;
-
-
- h = ras.top - ras.cProfile->offset;
-
- if ( h < 0 )
- {
- PTRACE0(( "Negative height encountered in End_Profile!\n" ));
- ras.error = Raster_Err_Neg_Height;
- return FAILURE;
- }
-
- if ( h > 0 )
- {
- PTRACE1(( "Ending profile %lx, start = %ld, height = %ld\n",
- (long)ras.cProfile, ras.cProfile->start, h ));
-
- oldProfile = ras.cProfile;
- ras.cProfile->height = h;
- 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 )
- {
- PTRACE1(( "overflow in End_Profile\n" ));
- ras.error = Raster_Err_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 */
-/* */
-/****************************************************************************/
-
- static
- Bool Insert_Y_Turn( RAS_ARGS Int y )
- {
- PStorage y_turns;
- Int y2, 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] )
- while ( n >= 0 )
- {
- y2 = y_turns[n];
- y_turns[n] = y;
- y = y2;
- n--;
- }
-
- if ( n < 0 )
- {
- if (ras.maxBuff <= ras.top)
- {
- ras.error = Raster_Err_Overflow;
- return FAILURE;
- }
- ras.maxBuff--;
- ras.numTurns++;
- ras.sizeBuff[-ras.numTurns] = y;
- }
-
- return SUCCESS;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Finalize_Profile_Table */
-/* */
-/* Description: Adjusts all links in the Profiles list. */
-/* */
-/* Input: None */
-/* */
-/* Returns: None. */
-/* */
-/****************************************************************************/
-
- static
- Bool Finalize_Profile_Table( RAS_ARG )
- {
- Int bottom, top;
- UShort n;
- PProfile p;
-
-
- n = ras.num_Profs;
-
- if ( n > 1 )
- {
- p = ras.fProfile;
- while ( n > 0 )
- {
- if ( n > 1 )
- p->link = (PProfile)( p->offset + p->height );
- else
- p->link = NULL;
-
- switch ( p->flow )
- {
- case TT_Flow_Down:
- bottom = p->start - p->height+1;
- top = p->start;
- p->start = bottom;
- p->offset += p->height-1;
- break;
-
- case TT_Flow_Up:
- default:
- bottom = p->start;
- top = p->start + p->height-1;
- }
-
- if ( Insert_Y_Turn( RAS_VARS bottom ) ||
- Insert_Y_Turn( RAS_VARS top+1 ) )
- return FAILURE;
-
- p = p->link;
- n--;
- }
- }
- else
- ras.fProfile = NULL;
-
- return SUCCESS;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Split_Bezier */
-/* */
-/* Description: Subdivides one Bezier arc into two joint */
-/* sub-arcs in the Bezier stack. */
-/* */
-/* Input: None (subdivided bezier is taken from the top of the */
-/* stack). */
-/* */
-/* Returns: None. */
-/* */
-/* */
-/* 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_Bezier( 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 too good at common expression */
- /* substitution and instruction scheduling ;-) */
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Push_Bezier */
-/* */
-/* Description: Clears the Bezier stack and pushes a new arc on top of it. */
-/* */
-/* Input: x1,y1 x2,y2 x3,y3 new Bezier arc */
-/* */
-/* Returns: None. */
-/* */
-/****************************************************************************/
-
- static void Push_Bezier( RAS_ARGS Long x1, Long y1,
- Long x2, Long y2,
- Long x3, Long y3 )
- {
- ras.arc = ras.arcs;
- ras.arc[2].x = x1; ras.arc[2].y = y1;
- ras.arc[1].x = x2; ras.arc[1].y = y2;
- ras.arc[0].x = x3; ras.arc[0].y = y3;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Line_Up */
-/* */
-/* Description: Computes the x-coordinates of an ascending line segment */
-/* and stores them in the render pool. */
-/* */
-/* Input: x1,y1,x2,y2 Segment start (x1,y1) and end (x2,y2) points */
-/* */
-/* Returns: 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;
-
- PStorage 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 = TRUNC( miny );
- f1 = 0;
- }
- else
- {
- e1 = TRUNC( y1 );
- f1 = FRAC( y1 );
- }
-
- if ( y2 > maxy )
- {
- /* x2 += FMulDiv( Dx, maxy - y2, Dy ); UNNECESSARY */
- e2 = TRUNC( maxy );
- f2 = 0;
- }
- else
- {
- e2 = TRUNC( y2 );
- f2 = FRAC( y2 );
- }
-
- if ( f1 > 0 )
- {
- if ( e1 == e2 ) return SUCCESS;
- else
- {
- x1 += FMulDiv( Dx, ras.precision - f1, Dy );
- e1 += 1;
- }
- }
- else
- if ( ras.joint )
- {
- ras.top--;
- ras.joint = FALSE;
- }
-
- ras.joint = ( f2 == 0 );
-
- if ( ras.fresh )
- {
- ras.cProfile->start = e1;
- ras.fresh = FALSE;
- }
-
- size = e2 - e1 + 1;
- if ( ras.top + size >= ras.maxBuff )
- {
- ras.error = Raster_Err_Overflow;
- return FAILURE;
- }
-
- if ( Dx > 0 )
- {
- Ix = (ras.precision*Dx) / Dy;
- Rx = (ras.precision*Dx) % Dy;
- Dx = 1;
- }
- else
- {
- Ix = -( (ras.precision*-Dx) / Dy );
- Rx = (ras.precision*-Dx) % Dy;
- Dx = -1;
- }
-
- Ax = -Dy;
- top = ras.top;
-
- while ( size > 0 )
- {
- *top++ = x1;
-
- DEBUG_PSET;
-
- x1 += Ix;
- Ax += Rx;
- if ( Ax >= 0 )
- {
- Ax -= Dy;
- x1 += Dx;
- }
- size--;
- }
-
- ras.top = top;
- return SUCCESS;
- }
-
-
- 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;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Bezier_Up */
-/* */
-/* Description: Computes thes x-coordinates of an ascending bezier arc */
-/* and stores them in the render pool. */
-/* */
-/* Input: None. The arc is taken from the top of the Bezier stack. */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE on Render Pool overflow. */
-/* */
-/****************************************************************************/
-
- static Bool Bezier_Up( RAS_ARGS Long miny, Long maxy )
- {
- Long y1, y2, e, e2, e0;
- Short f1;
-
- TPoint* arc;
- TPoint* start_arc;
-
- PStorage top;
-
-
- arc = ras.arc;
- y1 = arc[2].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 = FRAC( y1 );
- e0 = e;
-
- if ( f1 == 0 )
- {
- if ( ras.joint )
- {
- top--;
- ras.joint = FALSE;
- }
-
- *top++ = arc[2].x;
-
- DEBUG_PSET;
-
- 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 = Raster_Err_Overflow;
- return FAILURE;
- }
-
- start_arc = arc;
-
- while ( arc >= start_arc && e <= e2 )
- {
- ras.joint = FALSE;
-
- y2 = arc[0].y;
-
- if ( y2 > e )
- {
- y1 = arc[2].y;
- if ( y2 - y1 >= ras.precision_step )
- {
- Split_Bezier( arc );
- arc += 2;
- }
- else
- {
- *top++ = arc[2].x + FMulDiv( arc[0].x - arc[2].x,
- e - y1,
- y2 - y1 );
- DEBUG_PSET;
-
- arc -= 2;
- e += ras.precision;
- }
- }
- else
- {
- if ( y2 == e )
- {
- ras.joint = TRUE;
- *top++ = arc[0].x;
-
- DEBUG_PSET;
-
- e += ras.precision;
- }
- arc -= 2;
- }
- }
-
- Fin:
- ras.top = top;
- ras.arc -= 2;
- return SUCCESS;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Bezier_Down */
-/* */
-/* Description: Computes the x-coordinates of a descending bezier arc */
-/* and stores them in the render pool. */
-/* */
-/* Input: None. Arc is taken from the top of the Bezier stack. */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE on Render Pool overflow. */
-/* */
-/****************************************************************************/
-
- static Bool Bezier_Down( RAS_ARGS 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;
-
- fresh = ras.fresh;
-
- result = Bezier_Up( RAS_VARS -maxy, -miny );
-
- if ( fresh && !ras.fresh )
- ras.cProfile->start = -ras.cProfile->start;
-
- arc[0].y = -arc[0].y;
- return result;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Line_To */
-/* */
-/* Description: Injects a new line segment and adjusts Profiles list. */
-/* */
-/* Input: x, y : segment endpoint (start point in LastX,LastY) */
-/* */
-/* Returns: 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:
- if ( y > ras.lastY )
- {
- if ( New_Profile( RAS_VARS Ascending ) ) return FAILURE;
- }
- else
- {
- if ( y < ras.lastY )
- if ( New_Profile( RAS_VARS Descending ) ) return FAILURE;
- }
- break;
-
- case Ascending:
- if ( y < ras.lastY )
- {
- if ( End_Profile( RAS_VAR ) ||
- New_Profile( RAS_VARS Descending ) ) return FAILURE;
- }
- break;
-
- case Descending:
- if ( y > ras.lastY )
- {
- if ( End_Profile( RAS_VAR ) ||
- New_Profile( RAS_VARS Ascending ) ) return FAILURE;
- }
- break;
-
- default:
- ;
- }
-
- /* Then compute the lines */
-
- switch ( ras.state )
- {
- case Ascending:
- if ( Line_Up ( RAS_VARS ras.lastX, ras.lastY,
- x, y, ras.minY, ras.maxY ) )
- return FAILURE;
- break;
-
- case Descending:
- 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: Bezier_To */
-/* */
-/* Description: Injects a new bezier arc and adjusts the profile list. */
-/* */
-/* Input: x, y : arc endpoint (start point in LastX, LastY) */
-/* Cx, Cy : control point */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE on Render Pool overflow or Incorrect Profile. */
-/* */
-/****************************************************************************/
-
- static Bool Bezier_To( RAS_ARGS Long x,
- Long y,
- Long cx,
- Long cy )
- {
- Long y1, y2, y3, x3;
- TStates state_bez;
-
-
- Push_Bezier( RAS_VARS ras.lastX, ras.lastY, cx, cy, x, 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 == y2 )
- {
- if ( y2 == y3 )
- state_bez = Flat;
- else if ( y2 > y3 )
- state_bez = Descending;
- else
- state_bez = Ascending;
- }
- else if ( y1 > y2 )
- {
- if ( y2 >= y3 )
- state_bez = Descending;
- else
- state_bez = Unknown;
- }
- else if ( y2 <= y3 )
- state_bez = Ascending;
- else
- state_bez = Unknown;
-
- /* split non-monotonic arcs, ignore flat ones, or */
- /* computes the up and down ones */
-
- switch ( state_bez )
- {
- case Flat:
- ras.arc -= 2;
- break;
-
- case Unknown:
- Split_Bezier( ras.arc );
- ras.arc += 2;
- break;
-
- default:
- /* detect a change of direction */
-
- if ( ras.state != state_bez )
- {
- if ( ras.state != Unknown )
- if ( End_Profile( RAS_VAR ) ) return FAILURE;
-
- if ( New_Profile( RAS_VARS state_bez ) ) return FAILURE;
- }
-
- /* compute */
-
- switch ( ras.state )
- {
- case Ascending:
- if ( Bezier_Up ( RAS_VARS ras.minY, ras.maxY ) )
- return FAILURE;
- break;
-
- case Descending:
- if ( Bezier_Down( RAS_VARS ras.minY, ras.maxY ) )
- return FAILURE;
- break;
-
- default:
- ;
- }
- }
- } while ( ras.arc >= ras.arcs );
-
- ras.lastX = x3;
- ras.lastY = y3;
-
- return SUCCESS;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Decompose_Curve */
-/* */
-/* Description: Scans the outline arays 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, last : indexes of first and last point in */
-/* contour. */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE on error. */
-/* */
-/****************************************************************************/
-
-#undef SWAP_
-#define SWAP_(x,y) { Long swap = x; x = y; y = swap; }
-
- static Bool Decompose_Curve( RAS_ARGS UShort first,
- UShort last,
- Bool flipped )
- {
- Long x, y; /* current point */
- Long cx, cy; /* current Bezier control point */
- Long mx, my; /* current middle point */
-
- Long x_first, y_first; /* first point's coordinates */
- Long x_last, y_last; /* last point's coordinates */
-
- UShort index; /* current point's index */
- Bool on_curve; /* current point's state */
-
- x_first = SCALED( ras.coords[first].x );
- y_first = SCALED( ras.coords[first].y );
-
- if ( flipped ) SWAP_( x_first,y_first );
-
- x_last = SCALED( ras.coords[last].x );
- y_last = SCALED( ras.coords[last].y );
-
- if ( flipped ) SWAP_( x_last,y_last );
-
- ras.lastX = cx = x_first;
- ras.lastY = cy = y_first;
-
- on_curve = (ras.flags[first] & 1);
- index = first;
-
- /* check first point to determine origin */
- if ( !on_curve )
- {
- /* first point is off the curve. Yes, this happens... */
- if ( ras.flags[last] & 1 )
- {
- ras.lastX = x_last; /* start at last point if it */
- ras.lastY = y_last; /* is on the curve */
- }
- else
- {
- /* if both first and last points are off the curve, */
- /* start at their middle and record its position */
- /* for closure */
- ras.lastX = (ras.lastX + x_last)/2;
- ras.lastY = (ras.lastY + y_last)/2;
-
- x_last = ras.lastX;
- y_last = ras.lastY;
- }
- }
-
- /* now process each contour point individually */
- while ( index < last )
- {
- index++;
- x = SCALED( ras.coords[index].x );
- y = SCALED( ras.coords[index].y );
-
- if ( flipped ) SWAP_( x, y );
-
- if ( on_curve )
- {
- /* the previous point was on the curve */
- on_curve = ( ras.flags[index] & 1 );
- if ( on_curve )
- {
- /* two successive on points => emit segment */
- if ( Line_To( RAS_VARS x, y ) ) return FAILURE;
- }
- else
- {
- /* else, keep current control point for next bezier */
- cx = x;
- cy = y;
- }
- }
- else
- {
- /* the previous point was off the curve */
- on_curve = ( ras.flags[index] & 1 );
- if ( on_curve )
- {
- /* reaching an `on' point */
- if ( Bezier_To( RAS_VARS x, y, cx, cy ) ) return FAILURE;
- }
- else
- {
- /* two successive `off' points => create middle point */
- mx = ( cx + x ) / 2;
- my = ( cy + y ) / 2;
-
- if ( Bezier_To( RAS_VARS mx, my, cx, cy ) ) return FAILURE;
-
- cx = x;
- cy = y;
- }
- }
- }
-
- /* end of contour, close curve cleanly */
- if ( ras.flags[first] & 1 )
- {
- if ( on_curve )
- return Line_To( RAS_VARS x_first, y_first );
- else
- return Bezier_To( RAS_VARS x_first, y_first, cx, cy );
- }
- else
- if ( !on_curve )
- return Bezier_To( RAS_VARS x_last, y_last, cx, cy );
-
- return SUCCESS;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Convert_Glyph */
-/* */
-/* Description: Converts a glyph into a series of segments and arcs */
-/* and makes a Profiles list with them. */
-/* */
-/* Input: _xCoord, _yCoord : coordinates tables. */
-/* */
-/* Uses the 'Flag' table too. */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE if any error was encountered during rendering. */
-/* */
-/****************************************************************************/
-
- static Bool Convert_Glyph( RAS_ARGS int flipped )
- {
- Short i;
- UShort start;
-
- PProfile lastProfile;
-
-
- 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.nContours; i++ )
- {
- ras.state = Unknown;
- ras.gProfile = NULL;
-
- if ( Decompose_Curve( RAS_VARS start, ras.outs[i], flipped ) )
- return FAILURE;
-
- start = ras.outs[i] + 1;
-
- /* We must now see if the extreme arcs join or not */
- if ( ( FRAC( ras.lastY ) == 0 &&
- ras.lastY >= ras.minY &&
- ras.lastY <= ras.maxY ) )
- if ( ras.gProfile && ras.gProfile->flow == ras.cProfile->flow )
- ras.top--;
- /* Note that ras.gProfile can be nil if the contour was too small */
- /* to be drawn. */
-
- lastProfile = ras.cProfile;
- if ( End_Profile( RAS_VAR ) ) 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 (ras.top < ras.maxBuff ? SUCCESS : FAILURE );
- }
-
-
-/************************************************/
-/* */
-/* Init_Linked */
-/* */
-/* Inits 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. */
- }
-
-
-/************************************************/
-/* */
-/* Update : */
-/* */
-/* Update all X offsets of a drawing list */
-/* */
-/************************************************/
-
- static void Update( PProfile first )
- {
- PProfile current = first;
-
-
- while ( current )
- {
- current->X = *current->offset;
- current->offset += current->flow;
- current->height--;
- current = current->link;
- }
- }
-
-
-/************************************************/
-/* */
-/* 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 */
- Update( *list );
-
- /* 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 three 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 )
- {
- switch ( ras.target.flow )
- {
- case TT_Flow_Up:
- ras.traceOfs = *min * ras.target.cols;
- ras.traceIncr = ras.target.cols;
- break;
-
- default:
- ras.traceOfs = ( ras.target.rows - 1 - *min ) * ras.target.cols;
- ras.traceIncr = -ras.target.cols;
- }
-
- ras.gray_min_x = 0;
- ras.gray_max_x = 0;
- }
-
-
- static void Vertical_Sweep_Span( RAS_ARGS Short y,
- TT_F26Dot6 x1,
- TT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- Short c1, c2;
- Short f1, f2;
- Byte* target;
-
-
- /* Drop-out control */
-
- e1 = TRUNC( CEILING( x1 ) );
-
- if ( x2-x1-ras.precision <= ras.precision_jitter )
- e2 = e1;
- else
- e2 = TRUNC( FLOOR( x2 ) );
-
- if ( e2 >= 0 && e1 < ras.bWidth )
- {
- if ( e1 < 0 ) e1 = 0;
- if ( e2 >= ras.bWidth ) e2 = ras.bWidth-1;
-
- c1 = (Short)(e1 >> 3);
- c2 = (Short)(e2 >> 3);
-
- f1 = e1 & 7;
- f2 = e2 & 7;
-
- if ( ras.gray_min_x > c1 ) ras.gray_min_x = c1;
- if ( ras.gray_max_x < c2 ) ras.gray_max_x = c2;
-
- target = ras.bTarget + ras.traceOfs + c1;
-
- if ( c1 != c2 )
- {
- *target |= LMask[f1];
-
- if ( c2 > c1 + 1 )
- MEM_Set( target + 1, 0xFF, c2 - c1 - 1 );
-
- target[c2 - c1] |= RMask[f2];
- }
- else
- *target |= ( LMask[f1] & RMask[f2] );
- }
- }
-
-
- static void Vertical_Sweep_Drop( RAS_ARGS Short y,
- TT_F26Dot6 x1,
- TT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- Short c1, f1;
-
-
- /* Drop-out control */
-
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 > e2 )
- {
- if ( e1 == e2 + ras.precision )
- {
- switch ( ras.dropOutControl )
- {
- case 1:
- e1 = e2;
- break;
-
- case 4:
- e1 = CEILING( (x1 + x2 + 1) / 2 );
- break;
-
- case 2:
- case 5:
- /* Drop-out Control Rule #4 */
-
- /* The spec is not very clear regarding rule #4. It */
- /* presents a method that is way too costly to implement */
- /* while the general idea seems to get rid of 'stubs'. */
- /* */
- /* Here, we only get rid of stubs recognized when: */
- /* */
- /* 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 */
- /* */
-
- /* FIXXXME : uncommenting this line solves the disappearing */
- /* bit problem in the '7' of verdana 10pts, but */
- /* makes a new one in the 'C' of arial 14pts */
-
- /* if ( x2-x1 < ras.precision_half ) */
- {
- /* upper stub test */
-
- if ( left->next == right && left->height <= 0 ) return;
-
- /* lower stub test */
-
- if ( right->next == left && left->start == y ) return;
- }
-
- /* check that the rightmost pixel isn't set */
-
- e1 = TRUNC( e1 );
-
- c1 = (Short)(e1 >> 3);
- f1 = e1 & 7;
-
- if ( e1 >= 0 && e1 < ras.bWidth &&
- ras.bTarget[ras.traceOfs + c1] & (0x80 >> f1) )
- return;
-
- if ( ras.dropOutControl == 2 )
- e1 = e2;
- else
- e1 = CEILING( (x1 + x2 + 1) / 2 );
-
- break;
-
- default:
- return; /* unsupported mode */
- }
- }
- else
- return;
- }
-
- e1 = TRUNC( e1 );
-
- if ( e1 >= 0 && e1 < ras.bWidth )
- {
- c1 = (Short)(e1 >> 3);
- f1 = e1 & 7;
-
- if ( ras.gray_min_x > c1 ) ras.gray_min_x = c1;
- if ( ras.gray_max_x < c1 ) ras.gray_max_x = c1;
-
- ras.bTarget[ras.traceOfs + c1] |= (Char)(0x80 >> f1);
- }
- }
-
-
- static void Vertical_Sweep_Step( RAS_ARG )
- {
- ras.traceOfs += ras.traceIncr;
- }
-
-
-/***********************************************************************/
-/* */
-/* Horizontal Sweep Procedure Set : */
-/* */
-/* These three 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 */
- }
-
-
- static void Horizontal_Sweep_Span( RAS_ARGS Short y,
- TT_F26Dot6 x1,
- TT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- PByte bits;
- Byte f1;
-
-
- if ( x2-x1 < ras.precision )
- {
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 == e2 )
- {
- bits = ras.bTarget + (y >> 3);
- f1 = (Byte)(0x80 >> (y & 7));
-
- e1 = TRUNC( e1 );
-
- if ( e1 >= 0 && e1 < ras.target.rows )
- {
- if ( ras.target.flow == TT_Flow_Down )
- bits[(ras.target.rows-1 - e1) * ras.target.cols] |= f1;
- else
- bits[e1 * ras.target.cols] |= f1;
- }
- }
- }
-#if 0
- e2 = TRUNC( e2 );
-
- if ( e2 >= 0 && e2 < ras.target.rows )
- if ( ras.target.flow == TT_Flow_Down )
- bits[(ras.target.rows-1-e2) * ras.target.cols] |= f1;
- else
- bits[e2 * ras.target.cols] |= f1;
-#endif
- }
-
-
- static void Horizontal_Sweep_Drop( RAS_ARGS Short y,
- TT_F26Dot6 x1,
- TT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- PByte bits;
- Byte f1;
-
-
- /* During the horizontal sweep, we only take care of drop-outs */
-
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 > e2 )
- {
- if ( e1 == e2 + ras.precision )
- {
- switch ( ras.dropOutControl )
- {
- case 1:
- e1 = e2;
- break;
-
- case 4:
- e1 = CEILING( (x1 + x2 + 1) / 2 );
- break;
-
- case 2:
- case 5:
-
- /* Drop-out Control Rule #4 */
-
- /* The spec is not very clear regarding rule #4. It */
- /* presents a method that is way too costly to implement */
- /* while the general idea seems to get rid of 'stubs'. */
- /* */
-
- /* rightmost stub test */
-
- if ( left->next == right && left->height <= 0 ) return;
-
- /* leftmost stub test */
-
- if ( right->next == left && left->start == y ) return;
-
- /* check that the rightmost pixel isn't set */
-
- e1 = TRUNC( e1 );
-
- bits = ras.bTarget + (y >> 3);
- f1 = (Byte)(0x80 >> (y & 7));
-
- if ( ras.target.flow == TT_Flow_Down )
- bits += (ras.target.rows-1-e1) * ras.target.cols;
- else
- bits += e1 * ras.target.cols;
-
- if ( e1 >= 0 &&
- e1 < ras.target.rows &&
- *bits & f1 )
- return;
-
- if ( ras.dropOutControl == 2 )
- e1 = e2;
- else
- e1 = CEILING( (x1 + x2 + 1) / 2 );
-
- break;
-
- default:
- return; /* unsupported mode */
- }
- }
- else
- return;
- }
-
- bits = ras.bTarget + (y >> 3);
- f1 = (Byte)(0x80 >> (y & 7));
-
- e1 = TRUNC( e1 );
-
- if ( e1 >= 0 && e1 < ras.target.rows )
- {
- if (ras.target.flow==TT_Flow_Down)
- bits[(ras.target.rows-1-e1) * ras.target.cols] |= f1;
- else
- bits[e1 * ras.target.cols] |= f1;
- }
- }
-
-
- static void Horizontal_Sweep_Step( RAS_ARG )
- {
- /* Nothing, really */
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/***********************************************************************/
-/* */
-/* Vertical Gray Sweep Procedure Set: */
-/* */
-/* These two routines are used during the vertical gray-levels */
-/* sweep phase by the generic Draw_Sweep() function. */
-/* */
-/* */
-/* NOTES: */
-/* */
-/* - The target pixmap's width *must* be a multiple of 4. */
-/* */
-/* - you have to use the function Vertical_Sweep_Span() for */
-/* the gray span call. */
-/* */
-/***********************************************************************/
-
- static void Vertical_Gray_Sweep_Init( RAS_ARGS Short* min, Short* max )
- {
- *min = *min & -2;
- *max = ( *max + 3 ) & -2;
-
- ras.traceOfs = 0;
-
- switch ( ras.target.flow )
- {
- case TT_Flow_Up:
- ras.traceG = (*min / 2) * ras.target.cols;
- ras.traceIncr = ras.target.cols;
- break;
-
- default:
- ras.traceG = (ras.target.rows-1 - *min/2) * ras.target.cols;
- ras.traceIncr = -ras.target.cols;
- }
-
- ras.gray_min_x = ras.target.cols;
- ras.gray_max_x = -ras.target.cols;
- }
-
-
- static void Vertical_Gray_Sweep_Step( RAS_ARG )
- {
- Int c1, c2;
- PByte pix, bit, bit2;
- Int* count = ras.count_table;
- Byte* grays;
-
-
- ras.traceOfs += ras.gray_width;
-
- if ( ras.traceOfs > ras.gray_width )
- {
- pix = ras.gTarget + ras.traceG + ras.gray_min_x * 4;
- grays = ras.grays;
-
- if ( ras.gray_max_x >= 0 )
- {
- if ( ras.gray_max_x >= ras.target.width )
- ras.gray_max_x = ras.target.width-1;
-
- if ( ras.gray_min_x < 0 )
- ras.gray_min_x = 0;
-
- bit = ras.bTarget + ras.gray_min_x;
- bit2 = bit + ras.gray_width;
-
- c1 = ras.gray_max_x - ras.gray_min_x;
-
- while ( c1 >= 0 )
- {
- c2 = count[*bit] + count[*bit2];
-
- if ( c2 )
- {
- pix[0] = grays[(c2 & 0xF000) >> 12];
- pix[1] = grays[(c2 & 0x0F00) >> 8];
- pix[2] = grays[(c2 & 0x00F0) >> 4];
- pix[3] = grays[(c2 & 0x000F) ];
-
- *bit = 0;
- *bit2 = 0;
- }
-
- bit ++;
- bit2++;
- pix += 4;
- c1 --;
- }
- }
-
- ras.traceOfs = 0;
- ras.traceG += ras.traceIncr;
-
- ras.gray_min_x = ras.target.cols;
- ras.gray_max_x = -ras.target.cols;
- }
- }
-
-
- static void Horizontal_Gray_Sweep_Span( RAS_ARGS Short y,
- TT_F26Dot6 x1,
- TT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- /* nothing, really */
- }
-
- static void Horizontal_Gray_Sweep_Drop( RAS_ARGS Short y,
- TT_F26Dot6 x1,
- TT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- PByte pixel;
- Byte color;
-
-
- /* During the horizontal sweep, we only take care of drop-outs */
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 > e2 )
- {
- if ( e1 == e2 + ras.precision )
- {
- switch ( ras.dropOutControl )
- {
- case 1:
- e1 = e2;
- break;
-
- case 4:
- e1 = CEILING( (x1 + x2 + 1) / 2 );
- break;
-
- case 2:
- case 5:
-
- /* Drop-out Control Rule #4 */
-
- /* The spec is not very clear regarding rule #4. It */
- /* presents a method that is way too costly to implement */
- /* while the general idea seems to get rid of 'stubs'. */
- /* */
-
- /* rightmost stub test */
- if ( left->next == right && left->height <= 0 ) return;
-
- /* leftmost stub test */
- if ( right->next == left && left->start == y ) return;
-
- if ( ras.dropOutControl == 2 )
- e1 = e2;
- else
- e1 = CEILING( (x1 + x2 + 1) / 2 );
-
- break;
-
- default:
- return; /* unsupported mode */
- }
- }
- else
- return;
- }
-
- if ( e1 >= 0 )
- {
- if ( x2 - x1 >= ras.precision_half )
- color = ras.grays[2];
- else
- color = ras.grays[1];
-
- e1 = TRUNC( e1 ) / 2;
- if ( e1 < ras.target.rows )
- {
- if ( ras.target.flow == TT_Flow_Down )
- pixel = ras.gTarget +
- (ras.target.rows - 1 - e1) * ras.target.cols + y / 2;
- else
- pixel = ras.gTarget +
- e1 * ras.target.cols + y / 2;
-
- if (pixel[0] == ras.grays[0])
- pixel[0] = color;
- }
- }
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
-/********************************************************************/
-/* */
-/* 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 wait;
- TProfileList draw_left, draw_right;
-
-
- /* Init empty linked lists */
-
- Init_Linked( &wait );
-
- 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 = P->start;
- top = P->start + P->height-1;
-
- if ( min_Y > bottom ) min_Y = bottom;
- if ( max_Y < top ) max_Y = top;
-
- P->X = 0;
- InsNew( &wait, P );
-
- P = Q;
- }
-
- /* Check the Y-turns */
- if ( ras.numTurns == 0 )
- {
- ras.error = Raster_Err_Invalid;
- return FAILURE;
- }
-
- /* Now inits the sweep */
-
- ras.Proc_Sweep_Init( RAS_VARS &min_Y, &max_Y );
-
- /* Then compute the distance of each profile from min_Y */
-
- P = wait;
-
- 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 )
- {
- /* look in the wait list for new activations */
-
- P = wait;
-
- while ( P )
- {
- Q = P->link;
- P->countL -= y_height;
- if ( P->countL == 0 )
- {
- DelOld( &wait, P );
-
- switch ( P->flow )
- {
- case TT_Flow_Up: InsNew( &draw_left, P ); break;
- case TT_Flow_Down: InsNew( &draw_right, P ); break;
- }
- }
-
- P = Q;
- }
-
- /* Sort the drawing lists */
-
- Sort( &draw_left );
- Sort( &draw_right );
-
- y_change = (Short)ras.sizeBuff[-ras.numTurns--];
- y_height = 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;
- }
-
- if ( x2-x1 <= ras.precision )
- {
- e1 = FLOOR( x1 );
- e2 = CEILING( x2 );
-
- if ( ras.dropOutControl != 0 &&
- (e1 > e2 || e2 == e1 + ras.precision) )
- {
- /* 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;
- }
-
- /* now perform the dropouts _after_ the span drawing */
- /* drop-outs 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 needs it */
-
- {
- PProfile Q, P;
- P = draw_left;
- while ( P )
- {
- Q = P->link;
- if ( P->height == 0 )
- DelOld( &draw_left, P );
- P = Q;
- }
- }
-
- {
- PProfile Q, P = draw_right;
- while ( P )
- {
- Q = P->link;
- if ( P->height == 0 )
- DelOld( &draw_right, P );
- P = Q;
- }
- }
- }
-
- /* for gray-scaling, flushes 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;
- /* dropouts--; -- this is useful when debugging only */
- 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: Performs one sweep with sub-banding. */
-/* */
-/* Input: _XCoord, _YCoord : x and y coordinates arrays */
-/* */
-/* Returns: SUCCESS on success */
-/* FAILURE if any error was encountered during render. */
-/* */
-/****************************************************************************/
-
- static TT_Error 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 = ( i + j ) / 2;
-
- if ( ras.band_top >= 7 || k < i )
- {
- ras.band_top = 0;
- ras.error = Raster_Err_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 = k - 1;
-
- ras.band_top++;
- }
- else
- {
- if ( ras.fProfile )
- if ( Draw_Sweep( RAS_VAR ) ) return ras.error;
- ras.band_top--;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
-/****************************************************************************/
-/* */
-/* Function: Render_Glyph */
-/* */
-/* Description: Renders a glyph in a bitmap. Sub-banding if needed. */
-/* */
-/* Input: AGlyph Glyph record */
-/* */
-/* Returns: SUCCESS on success. */
-/* FAILURE if any error was encountered during rendering. */
-/* */
-/****************************************************************************/
-
- LOCAL_FUNC
- TT_Error Render_Glyph( RAS_ARGS TT_Outline* glyph,
- TT_Raster_Map* target_map )
- {
- TT_Error error;
-
-
- if ( glyph->n_points == 0 || glyph->n_contours <= 0 )
- return TT_Err_Ok;
-
- if ( !ras.buff )
- {
- ras.error = Raster_Err_Not_Ini;
- return ras.error;
- }
-
- if ( glyph->n_points < glyph->contours[glyph->n_contours - 1] )
- {
- ras.error = TT_Err_Too_Many_Points;
- return ras.error;
- }
-
- if ( target_map )
- ras.target = *target_map;
-
- ras.outs = glyph->contours;
- ras.flags = glyph->flags;
- ras.nPoints = glyph->n_points;
- ras.nContours = glyph->n_contours;
- ras.coords = glyph->points;
-
- Set_High_Precision( RAS_VARS glyph->high_precision );
- ras.scale_shift = ras.precision_shift;
- ras.dropOutControl = glyph->dropout_mode;
- ras.second_pass = glyph->second_pass;
-
-
- /* Vertical Sweep */
- 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 = ras.target.rows - 1;
-
- ras.bWidth = ras.target.width;
- ras.bTarget = (Byte*)ras.target.bitmap;
-
- if ( (error = Render_Single_Pass( RAS_VARS 0 )) != 0 )
- return error;
-
- /* Horizontal Sweep */
-
- if ( ras.second_pass && ras.dropOutControl != 0 )
- {
- 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 = ras.target.width - 1;
-
- if ( (error = Render_Single_Pass( RAS_VARS 1 )) != 0 )
- return error;
- }
-
- return TT_Err_Ok;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/****************************************************************************/
-/* */
-/* Function: Render_Gray_Glyph */
-/* */
-/* Description: Renders a glyph with grayscaling. Sub-banding if needed. */
-/* */
-/* Input: AGlyph Glyph record */
-/* */
-/* Returns: SUCCESS on success */
-/* FAILURE if any error was encountered during rendering. */
-/* */
-/****************************************************************************/
-
- LOCAL_FUNC
- TT_Error Render_Gray_Glyph( RAS_ARGS TT_Outline* glyph,
- TT_Raster_Map* target_map,
- Byte* palette )
- {
- Int i;
- TT_Error error;
-
- if ( !ras.buff )
- {
- ras.error = Raster_Err_Not_Ini;
- return ras.error;
- }
-
- if ( glyph->n_points == 0 || glyph->n_contours <= 0 )
- return TT_Err_Ok;
-
- if ( glyph->n_points < glyph->contours[glyph->n_contours - 1] )
- {
- ras.error = TT_Err_Too_Many_Points;
- return ras.error;
- }
-
- if ( palette )
- {
- for ( i = 0; i < 5; i++ )
- ras.grays[i] = palette[i];
- }
-
- if ( target_map )
- ras.target = *target_map;
-
- ras.outs = glyph->contours;
- ras.flags = glyph->flags;
- ras.nPoints = glyph->n_points;
- ras.nContours = glyph->n_contours;
- ras.coords = glyph->points;
-
- Set_High_Precision( RAS_VARS glyph->high_precision );
- ras.scale_shift = ras.precision_shift+1;
- ras.dropOutControl = glyph->dropout_mode;
- ras.second_pass = glyph->second_pass;
-
-
- /* Vertical Sweep */
-
- ras.band_top = 0;
- ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = 2 * ras.target.rows - 1;
-
- ras.bWidth = ras.gray_width;
- if ( ras.bWidth > ras.target.cols/4 )
- ras.bWidth = ras.target.cols/4;
-
- ras.bWidth = ras.bWidth * 8;
- ras.bTarget = (Byte*)ras.gray_lines;
- ras.gTarget = (Byte*)ras.target.bitmap;
-
- ras.Proc_Sweep_Init = Vertical_Gray_Sweep_Init;
- ras.Proc_Sweep_Span = Vertical_Sweep_Span;
- ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
- ras.Proc_Sweep_Step = Vertical_Gray_Sweep_Step;
-
- error = Render_Single_Pass( RAS_VARS 0 );
- if (error)
- return error;
-
- /* Horizontal Sweep */
-
- if ( ras.second_pass && ras.dropOutControl != 0 )
- {
- ras.Proc_Sweep_Init = Horizontal_Sweep_Init;
- ras.Proc_Sweep_Span = Horizontal_Gray_Sweep_Span;
- ras.Proc_Sweep_Drop = Horizontal_Gray_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 = ras.target.width * 2 - 1;
-
- error = Render_Single_Pass( RAS_VARS 1 );
- if (error)
- return error;
- }
-
- return TT_Err_Ok;
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
-/************************************************/
-/* */
-/* InitRasterizer */
-/* */
-/* Raster Initialization. */
-/* Gets the bitmap description and render pool */
-/* addresses. */
-/* */
-/************************************************/
-
-#undef ras
-
- LOCAL_FUNC
- TT_Error TTRaster_Done( PEngine_Instance engine )
- {
- TRaster_Instance* ras = (TRaster_Instance*)engine->raster_component;
-
-
- if ( !ras )
- return TT_Err_Ok;
-
- FREE( ras->buff );
- FREE( ras->gray_lines );
-
-#ifndef TT_CONFIG_OPTION_STATIC_RASTER
- FREE( engine->raster_component );
-#endif
-
- return TT_Err_Ok;
- }
-
-
- LOCAL_FUNC
- TT_Error TTRaster_Init( PEngine_Instance engine )
- {
- TT_Error error;
-
- Int i, l, j, c;
-
- TRaster_Instance* ras;
-
-
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
- ras = engine->raster_component = &cur_ras;
-#else
- if ( ALLOC( engine->raster_component, sizeof ( TRaster_Instance ) ) )
- return error;
-
- ras = (TRaster_Instance*)engine->raster_component;
-#endif
-
- if ( ALLOC( ras->buff, RASTER_RENDER_POOL ) ||
- ALLOC( ras->gray_lines, RASTER_GRAY_LINES ) )
- return error;
-
- ras->sizeBuff = ras->buff + ( RASTER_RENDER_POOL/sizeof(long) );
- ras->gray_width = RASTER_GRAY_LINES/2;
-
- MUTEX_Create( engine->raster_lock );
-
- /* Initialization of Count_Table */
-
- for ( i = 0; i < 256; i++ )
- {
- l = 0;
- j = i;
-
- for ( c = 0; c < 4; c++ )
- {
- l <<= 4;
-
- if ( j & 0x80 ) l++;
- if ( j & 0x40 ) l++;
-
- j = ( j << 2 ) & 0xFF;
- }
-
- ras->count_table[i] = l;
- }
-
- ras->dropOutControl = 2;
- ras->error = Raster_Err_None;
-
- return TT_Err_Ok;
- }
-
-
-/* END */
diff --git a/Build/source/libs/libttf/ttraster.h b/Build/source/libs/libttf/ttraster.h
deleted file mode 100644
index 66c8fef6e73..00000000000
--- a/Build/source/libs/libttf/ttraster.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************
- *
- * ttraster.h v 1.4
- *
- * The FreeType glyph rasterizer.
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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:
- *
- * This version supports the following:
- *
- * - direct grayscaling
- * - sub-banding
- * - drop-out modes 4 and 5
- * - second pass for complete drop-out control (bitmap only)
- * - variable precision
- *
- *
- * Changes between 1.4 and 1.3:
- *
- * Mainly performance tunings:
- *
- * - Line_Down() and Bezier_Down() now use the functions Line_Up()
- * and Bezier_Up() to do their work.
- * - optimized Split_Bezier()
- * - optimized linked lists used during sweeps
- *
- * Changes between 1.2 and 1.3:
- *
- * - made the engine optionaly re-entrant. Saves a lot
- * of code for a moderate performance hit.
- *
- ******************************************************************/
-
-#ifndef TTRASTER_H
-#define TTRASTER_H
-
-#include "ttconfig.h"
-#include "freetype.h" /* for TT_Outline */
-#include "ttengine.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* We provide two different builds of the scan-line converter */
- /* The static build uses global variables and isn't */
- /* re-entrant. */
- /* The indirect build is re-entrant but accesses all variables */
- /* indirectly. */
- /* */
- /* As a consequence, the indirect build is about 10% slower */
- /* than the static one on a _Pentium_ (this could get worse */
- /* on older processors), but the code size is reduced by */
- /* more than 30% ! */
- /* */
- /* The indirect build is now the default, defined in */
- /* ttconfig.h. Be careful if you experiment with this. */
-
- /* Note also that, though its code can be re-entrant, the */
- /* component is always used in thread-safe mode. This is */
- /* simply due to the fact that we want to use a single */
- /* render pool (of 64 Kb), and not to waste memory. */
-
-#ifdef TT_STATIC_RASTER
-
-#define RAS_ARGS /* void */
-#define RAS_ARG /* void */
-
-#define RAS_VARS /* void */
-#define RAS_VAR /* void */
-
-#else
-
-#define RAS_ARGS TRaster_Instance* raster,
-#define RAS_ARG TRaster_Instance* raster
-
-#define RAS_VARS raster,
-#define RAS_VAR raster
-
-#endif
-
-
- struct TRaster_Instance_;
- typedef struct TRaster_Instance_ TRaster_Instance;
-
- /* Render one glyph in the target bitmap, using drop-out control */
- /* mode 'scan'. */
- LOCAL_DEF
- TT_Error Render_Glyph( RAS_ARGS TT_Outline* glyph,
- TT_Raster_Map* target );
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
- /* Render one gray-level glyph in the target pixmap. */
- /* Palette points to an array of 5 colors used for the rendering. */
- /* Use NULL to reuse the last palette. Default is VGA graylevels. */
- LOCAL_DEF
- TT_Error Render_Gray_Glyph( RAS_ARGS TT_Outline* glyph,
- TT_Raster_Map* target,
- Byte* palette );
-#endif
-
- /* Initialize rasterizer */
- LOCAL_DEF
- TT_Error TTRaster_Init( PEngine_Instance engine );
-
- /* Finalize it */
- LOCAL_DEF
- TT_Error TTRaster_Done( PEngine_Instance engine );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* TTRASTER_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/tttables.h b/Build/source/libs/libttf/tttables.h
deleted file mode 100644
index e3556fc18a2..00000000000
--- a/Build/source/libs/libttf/tttables.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************
- *
- * tttables.h 1.1
- *
- * TrueType Tables structures and handling (specification).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttconfig.h"
-#include "tttypes.h"
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- /***********************************************************************/
- /* */
- /* TrueType Table Types */
- /* */
- /***********************************************************************/
-
- /* TrueType Collection Header */
-
- struct TTTCHeader_
- {
- ULong Tag;
- TT_Fixed version;
- ULong DirCount;
- PULong TableDirectory;
- };
-
- typedef struct TTTCHeader_ TTTCHeader;
- typedef TTTCHeader* PTTCHeader;
-
-
- /* TrueType Table Directory type */
-
- struct TTableDir_
- {
- TT_Fixed version; /* should be 0x10000 */
- UShort numTables; /* number of tables */
-
- UShort searchRange; /* These parameters are only used */
- UShort entrySelector; /* for a dichotomy search in the */
- UShort rangeShift; /* directory. We ignore them. */
- };
-
- typedef struct TTableDir_ TTableDir;
- typedef TTableDir* PTableDir;
-
-
- /* The 'TableDir' is followed by 'numTables' TableDirEntries */
-
- struct TTableDirEntry_
- {
- ULong Tag; /* table type */
- ULong CheckSum; /* table checksum */
- ULong Offset; /* table file offset */
- ULong Length; /* table length */
- };
-
- typedef struct TTableDirEntry_ TTableDirEntry;
- typedef TTableDirEntry* PTableDirEntry;
-
-
- /* 'cmap' tables */
-
- struct TCMapDir_
- {
- UShort tableVersionNumber;
- UShort numCMaps;
- };
-
- typedef struct TCMapDir_ TCMapDir;
- typedef TCMapDir* PCMapDir;
-
- struct TCMapDirEntry_
- {
- UShort platformID;
- UShort platformEncodingID;
- Long offset;
- };
-
- typedef struct TCMapDirEntry_ TCMapDirEntry;
- typedef TCMapDirEntry* PCMapDirEntries;
-
-
- /* 'maxp' Maximum Profiles table */
-
- struct TMaxProfile_
- {
- TT_Fixed version;
- UShort numGlyphs,
- maxPoints,
- maxContours,
- maxCompositePoints,
- maxCompositeContours,
- maxZones,
- maxTwilightPoints,
- maxStorage,
- maxFunctionDefs,
- maxInstructionDefs,
- maxStackElements,
- maxSizeOfInstructions,
- maxComponentElements,
- maxComponentDepth;
- };
-
- typedef struct TMaxProfile_ TMaxProfile;
- typedef TMaxProfile* PMaxProfile;
-
-
- /* table "gasp" */
-
-#define GASP_GRIDFIT 0x01
-#define GASP_DOGRAY 0x02
-
- struct GaspRange_
- {
- UShort maxPPEM;
- UShort gaspFlag;
- };
-
- typedef struct GaspRange_ GaspRange;
-
-
- struct TGasp_
- {
- UShort version;
- UShort numRanges;
- GaspRange* gaspRanges;
- };
-
- typedef struct TGasp_ TGasp;
-
-
- /* table "head" - now defined in freetype.h */
- /* table "hhea" - now defined in freetype.h */
-
-
- /* tables "HMTX" and "VMTX" */
-
- struct TLongMetrics_
- {
- UShort advance;
- Short bearing;
- };
-
- typedef struct TLongMetrics_ TLongMetrics, *PLongMetrics;
-
- typedef Short TShortMetrics, *PShortMetrics;
-
- /* 'loca' location table type */
-
- struct TLoca_
- {
- UShort Size;
- PStorage Table;
- };
-
- typedef struct TLoca_ TLoca;
-
-
- /* table "name" */
-
- struct TNameRec_
- {
- UShort platformID;
- UShort encodingID;
- UShort languageID;
- UShort nameID;
- UShort stringLength;
- UShort stringOffset;
-
- /* this last field is not defined in the spec */
- /* but used by the FreeType engine */
-
- PByte string;
- };
-
- typedef struct TNameRec_ TNameRec;
-
-
- struct TName_Table_
- {
- UShort format;
- UShort numNameRecords;
- UShort storageOffset;
- TNameRec* names;
- PByte storage;
- };
-
- typedef struct TName_Table_ TName_Table;
-
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* TTTABLES_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/tttags.h b/Build/source/libs/libttf/tttags.h
deleted file mode 100644
index 95347d1db43..00000000000
--- a/Build/source/libs/libttf/tttags.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************
- *
- * tttags.h
- *
- * tags for TrueType tables (specification only).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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 "ttconfig.h"
-#include "freetype.h" /* for MAKE_TT_TAG() */
-
-#define TTAG_BASE MAKE_TT_TAG( 'B', 'A', 'S', 'E' )
-#define TTAG_bloc MAKE_TT_TAG( 'b', 'l', 'o', 'c' )
-#define TTAG_bdat MAKE_TT_TAG( 'b', 'd', 'a', 't' )
-#define TTAG_cmap MAKE_TT_TAG( 'c', 'm', 'a', 'p' )
-#define TTAG_cvt MAKE_TT_TAG( 'c', 'v', 't', ' ' )
-#define TTAG_EBDT MAKE_TT_TAG( 'E', 'B', 'D', 'T' )
-#define TTAG_EBLC MAKE_TT_TAG( 'E', 'B', 'L', 'C' )
-#define TTAG_EBSC MAKE_TT_TAG( 'E', 'B', 'S', 'C' )
-#define TTAG_fpgm MAKE_TT_TAG( 'f', 'p', 'g', 'm' )
-#define TTAG_gasp MAKE_TT_TAG( 'g', 'a', 's', 'p' )
-#define TTAG_glyf MAKE_TT_TAG( 'g', 'l', 'y', 'f' )
-#define TTAG_GDEF MAKE_TT_TAG( 'G', 'D', 'E', 'F' )
-#define TTAG_GPOS MAKE_TT_TAG( 'G', 'P', 'O', 'S' )
-#define TTAG_GSUB MAKE_TT_TAG( 'G', 'S', 'U', 'B' )
-#define TTAG_hdmx MAKE_TT_TAG( 'h', 'd', 'm', 'x' )
-#define TTAG_head MAKE_TT_TAG( 'h', 'e', 'a', 'd' )
-#define TTAG_hhea MAKE_TT_TAG( 'h', 'h', 'e', 'a' )
-#define TTAG_hmtx MAKE_TT_TAG( 'h', 'm', 't', 'x' )
-#define TTAG_JSTF MAKE_TT_TAG( 'J', 'S', 'T', 'F' )
-#define TTAG_kern MAKE_TT_TAG( 'k', 'e', 'r', 'n' )
-#define TTAG_loca MAKE_TT_TAG( 'l', 'o', 'c', 'a' )
-#define TTAG_LTSH MAKE_TT_TAG( 'L', 'T', 'S', 'H' )
-#define TTAG_maxp MAKE_TT_TAG( 'm', 'a', 'x', 'p' )
-#define TTAG_name MAKE_TT_TAG( 'n', 'a', 'm', 'e' )
-#define TTAG_OS2 MAKE_TT_TAG( 'O', 'S', '/', '2' )
-#define TTAG_PCLT MAKE_TT_TAG( 'P', 'C', 'L', 'T' )
-#define TTAG_post MAKE_TT_TAG( 'p', 'o', 's', 't' )
-#define TTAG_prep MAKE_TT_TAG( 'p', 'r', 'e', 'p' )
-#define TTAG_ttc MAKE_TT_TAG( 't', 't', 'c', ' ' )
-#define TTAG_ttcf MAKE_TT_TAG( 't', 't', 'c', 'f' )
-#define TTAG_VDMX MAKE_TT_TAG( 'V', 'D', 'M', 'X' )
-#define TTAG_vhea MAKE_TT_TAG( 'v', 'h', 'e', 'a' )
-#define TTAG_vmtx MAKE_TT_TAG( 'v', 'm', 't', 'x' )
-
-#endif /* TTAGS_H */
-
-
-/* END */
diff --git a/Build/source/libs/libttf/tttypes.h b/Build/source/libs/libttf/tttypes.h
deleted file mode 100644
index b324013e874..00000000000
--- a/Build/source/libs/libttf/tttypes.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*******************************************************************
- *
- * tttypes.h
- *
- * Freetype engine's common types specification
- * (this spec has no associated body).
- *
- * Copyright 1996-1999 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used
- * modified and distributed under the terms of the FreeType project
- * license, LICENSE.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:
- *
- * All these declarations are library internals, and *not* part
- * of the high-level interface. See also 'freetype.h'.
- *
- ******************************************************************/
-
-#ifndef TTTYPES_H
-#define TTTYPES_H
-
-#include "ttconfig.h"
-#include "freetype.h"
-
-#ifdef __MACTYPES__
-#error "<MacTypes.h> have been included, and this prevents the proper\
- compilation of this library. Please remove the precompiled headers."
-#endif
-
- typedef char String;
- typedef signed char Char;
- typedef unsigned char Byte;
-
- typedef unsigned short UShort;
- typedef signed short Short;
-
- typedef unsigned long ULong;
- typedef signed long Long;
-
- typedef TT_Int32 Fixed;
-
- typedef int Int;
-
- /* Simple access types: pointers and tables */
-
- typedef Byte* PByte;
- typedef UShort* PUShort;
- typedef Short* PShort;
- typedef ULong* PULong;
- typedef Long* PLong;
-
- typedef Fixed* PFixed;
-
- typedef Int* PInt;
-
- typedef void* Pointer;
-
- typedef TT_F26Dot6* PCoordinates;
- typedef unsigned char* PTouchTable;
-
-
-#ifndef Bool
- typedef int Bool; /* No boolean type in C */
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef NULL
-#define NULL (void*)0
-#endif
-
- typedef Long Storage;
- typedef Storage* PStorage;
-
-
-/* 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
-
-
-/* Touch flag masks */
-
-#define TT_Flag_On_Curve 1
-#define TT_Flag_Touched_X 2
-#define TT_Flag_Touched_Y 4
-#define TT_Flag_Touched_Both 6
-
-
-/* Error management constants :) */
-
-#define SUCCESS 0
-#define FAILURE -1
-
-
-/* The min and max functions missing in C. As usual, be careful not to */
-/* write things like MIN( a++, b++ ) to avoid side effects. */
-
-#ifndef MIN
-#define MIN( a, b ) ( (a) < (b) ? (a) : (b) )
-#endif
-
-#ifndef MAX
-#define MAX( a, b ) ( (a) > (b) ? (a) : (b) )
-#endif
-
-#ifndef ABS
-#define ABS( a ) ( (a) < 0 ? -(a) : (a) )
-#endif
-
-/* conversion macros for the handles defined in freetype.h */
-
-#define HANDLE_Val( handle ) ((handle).z)
-
-#define HANDLE_Engine( handle ) ((PEngine_Instance)HANDLE_Val( handle ))
-
-#define HANDLE_Face( handle ) ((PFace)HANDLE_Val( handle ))
-
-#define HANDLE_Instance( handle ) ((PInstance)HANDLE_Val( handle ))
-
-/* HANDLE_Stream( handle ) must be defined in ttfile.c */
-
-#define HANDLE_Glyph( handle ) ((PGlyph)HANDLE_Val( handle ))
-
-#define HANDLE_CharMap( handle ) ((PCMapTable)HANDLE_Val( handle ))
-
-#define HANDLE_Set( handle, val ) ((handle).z = (void*)(val))
-
-
-#endif /* TTTYPES_H */
-
-
-/* END */
diff --git a/Build/source/libs/t1lib/Makefile.am b/Build/source/libs/t1lib/Makefile.am
new file mode 100644
index 00000000000..5e462965123
--- /dev/null
+++ b/Build/source/libs/t1lib/Makefile.am
@@ -0,0 +1,83 @@
+## Proxy Makefile.am to build t1lib for TeX Live.
+##
+## Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
+##
+## This file is free software; the copyright holder
+## gives unlimited permission to copy and/or distribute it,
+## with or without modifications, as long as this notice is preserved.
+##
+ACLOCAL_AMFLAGS = -I ../../m4
+
+## We want to re-distribute the whole original t1lib source tree.
+##
+## With current automake (1.10.2) 'make distcheck' fails when
+## DISTFILES contains a directory and files in that directory.
+## Thus nodist_* for all files in $(T1LIB_TREE).
+EXTRA_DIST = $(T1LIB_TREE)
+
+INCLUDES = -Ilib -I$(top_srcdir)/$(T1LIB_TREE)
+AM_CPPFLAGS = $(T1LIB_DEFINES)
+AM_CPPFLAGS += -DT1LIB_IDENT=\"@T1LIB_VERSIONSTRING@\"
+AM_CPPFLAGS += -DGLOBAL_CONFIG_DIR=\"@T1LIB_DATA_DIR@\"
+
+AM_CFLAGS = $(T1LIB_CFLAGS)
+
+LDADD = libt1.a
+
+if build
+
+noinst_LIBRARIES = libt1.a
+
+endif build
+
+nodist_libt1_a_SOURCES = $(lib_t1lib_sources) $(lib_type1_sources)
+
+lib_t1lib_sources = \
+ $(T1LIB_TREE)/lib/t1lib/parseAFM.c \
+ $(T1LIB_TREE)/lib/t1lib/t1aaset.c \
+ $(T1LIB_TREE)/lib/t1lib/t1afmtool.c \
+ $(T1LIB_TREE)/lib/t1lib/t1base.c \
+ $(T1LIB_TREE)/lib/t1lib/t1delete.c \
+ $(T1LIB_TREE)/lib/t1lib/t1enc.c \
+ $(T1LIB_TREE)/lib/t1lib/t1env.c \
+ $(T1LIB_TREE)/lib/t1lib/t1finfo.c \
+ $(T1LIB_TREE)/lib/t1lib/t1load.c \
+ $(T1LIB_TREE)/lib/t1lib/t1outline.c \
+ $(T1LIB_TREE)/lib/t1lib/t1set.c \
+ $(T1LIB_TREE)/lib/t1lib/t1subset.c \
+ $(T1LIB_TREE)/lib/t1lib/t1trans.c
+
+lib_type1_sources = \
+ $(T1LIB_TREE)/lib/type1/arith.c \
+ $(T1LIB_TREE)/lib/type1/bstring.c \
+ $(T1LIB_TREE)/lib/type1/curves.c \
+ $(T1LIB_TREE)/lib/type1/fontfcn.c \
+ $(T1LIB_TREE)/lib/type1/hints.c \
+ $(T1LIB_TREE)/lib/type1/lines.c \
+ $(T1LIB_TREE)/lib/type1/objects.c \
+ $(T1LIB_TREE)/lib/type1/paths.c \
+ $(T1LIB_TREE)/lib/type1/regions.c \
+ $(T1LIB_TREE)/lib/type1/scanfont.c \
+ $(T1LIB_TREE)/lib/type1/spaces.c \
+ $(T1LIB_TREE)/lib/type1/t1io.c \
+ $(T1LIB_TREE)/lib/type1/t1snap.c \
+ $(T1LIB_TREE)/lib/type1/t1stub.c \
+ $(T1LIB_TREE)/lib/type1/token.c \
+ $(T1LIB_TREE)/lib/type1/type1.c \
+ $(T1LIB_TREE)/lib/type1/util.c
+
+if build
+
+check_PROGRAMS = type1afm
+dist_check_SCRIPTS = type1afm.test
+
+TESTS = type1afm.test
+
+endif build
+
+nodist_type1afm_SOURCES = $(T1LIB_TREE)/type1afm/type1afm.c
+
+EXTRA_DIST += l047016t.pfa l047016t.xafm
+
+CLEANFILES = l047016t.afmx x047016t.afm x047016t.pfa
+
diff --git a/Build/source/libs/t1lib/Makefile.in b/Build/source/libs/t1lib/Makefile.in
index 1fb77ed9a0f..2a0c0fcabf3 100644
--- a/Build/source/libs/t1lib/Makefile.in
+++ b/Build/source/libs/t1lib/Makefile.in
@@ -1,29 +1,1176 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
# @configure_input@
-kpse_include ../../texk/make/common.mk
-kpse_include ../../texk/make/programs.mk
-kpse_include ../../texk/make/library.mk
-kpse_include ../../texk/make/paths.mk
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-prog_cflags = @X_CFLAGS@ -DT1LIB_IDENT=\"@T1LIB_IDENTIFIER@\" -DGLOBAL_CONFIG_DIR=\"@T1LIB_DATA_DIR@\"
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
-OBJS = parseAFM.o t1aaset.o t1afmtool.o t1base.o t1delete.o t1enc.o \
- t1env.o t1finfo.o t1load.o t1outline.o t1set.o t1subset.o t1trans.o
+@SET_MAKE@
-libt1.a: $(OBJS)
- rm -f $@
- $(AR) $(ARFLAGS) $@ $(OBJS)
- $(RANLIB) $@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+@build_TRUE@check_PROGRAMS = type1afm$(EXEEXT)
+subdir = .
+DIST_COMMON = README $(am__configure_deps) \
+ $(am__dist_check_SCRIPTS_DIST) \
+ $(srcdir)/../../build-aux/depcomp \
+ $(srcdir)/../../build-aux/install-sh \
+ $(srcdir)/../../build-aux/missing $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/configure \
+ $(top_srcdir)/lib/t1lib/sysconf.h.in \
+ ../../build-aux/config.guess ../../build-aux/config.sub \
+ ../../build-aux/depcomp ../../build-aux/install-sh \
+ ../../build-aux/ltmain.sh ../../build-aux/missing \
+ ../../build-aux/texinfo.tex ../../build-aux/ylwrap ChangeLog
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/t1lib/sysconf.h
+CONFIG_CLEAN_FILES = t1lib.h lib/t1lib/t1lib.h
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libt1_a_AR = $(AR) $(ARFLAGS)
+libt1_a_LIBADD =
+am__objects_1 = parseAFM.$(OBJEXT) t1aaset.$(OBJEXT) \
+ t1afmtool.$(OBJEXT) t1base.$(OBJEXT) t1delete.$(OBJEXT) \
+ t1enc.$(OBJEXT) t1env.$(OBJEXT) t1finfo.$(OBJEXT) \
+ t1load.$(OBJEXT) t1outline.$(OBJEXT) t1set.$(OBJEXT) \
+ t1subset.$(OBJEXT) t1trans.$(OBJEXT)
+am__objects_2 = arith.$(OBJEXT) bstring.$(OBJEXT) curves.$(OBJEXT) \
+ fontfcn.$(OBJEXT) hints.$(OBJEXT) lines.$(OBJEXT) \
+ objects.$(OBJEXT) paths.$(OBJEXT) regions.$(OBJEXT) \
+ scanfont.$(OBJEXT) spaces.$(OBJEXT) t1io.$(OBJEXT) \
+ t1snap.$(OBJEXT) t1stub.$(OBJEXT) token.$(OBJEXT) \
+ type1.$(OBJEXT) util.$(OBJEXT)
+nodist_libt1_a_OBJECTS = $(am__objects_1) $(am__objects_2)
+libt1_a_OBJECTS = $(nodist_libt1_a_OBJECTS)
+nodist_type1afm_OBJECTS = type1afm.$(OBJEXT)
+type1afm_OBJECTS = $(nodist_type1afm_OBJECTS)
+type1afm_LDADD = $(LDADD)
+type1afm_DEPENDENCIES = libt1.a
+am__dist_check_SCRIPTS_DIST = type1afm.test
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib/t1lib
+depcomp = $(SHELL) $(top_srcdir)/../../build-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(nodist_libt1_a_SOURCES) $(nodist_type1afm_SOURCES)
+DIST_SOURCES =
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+T1LIB_CFLAGS = @T1LIB_CFLAGS@
+T1LIB_DATA_DIR = @T1LIB_DATA_DIR@
+T1LIB_DEFINES = @T1LIB_DEFINES@
+T1LIB_PATCHLEVEL = @T1LIB_PATCHLEVEL@
+T1LIB_REVISION = @T1LIB_REVISION@
+T1LIB_TREE = @T1LIB_TREE@
+T1LIB_VERSION = @T1LIB_VERSION@
+T1LIB_VERSIONSTRING = @T1LIB_VERSIONSTRING@
+T1_INT16 = @T1_INT16@
+T1_INT32 = @T1_INT32@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I ../../m4
+EXTRA_DIST = $(T1LIB_TREE) l047016t.pfa l047016t.xafm
+INCLUDES = -Ilib -I$(top_srcdir)/$(T1LIB_TREE)
+AM_CPPFLAGS = $(T1LIB_DEFINES) -DT1LIB_IDENT=\"@T1LIB_VERSIONSTRING@\" \
+ -DGLOBAL_CONFIG_DIR=\"@T1LIB_DATA_DIR@\"
+AM_CFLAGS = $(T1LIB_CFLAGS)
+LDADD = libt1.a
+@build_TRUE@noinst_LIBRARIES = libt1.a
+nodist_libt1_a_SOURCES = $(lib_t1lib_sources) $(lib_type1_sources)
+lib_t1lib_sources = \
+ $(T1LIB_TREE)/lib/t1lib/parseAFM.c \
+ $(T1LIB_TREE)/lib/t1lib/t1aaset.c \
+ $(T1LIB_TREE)/lib/t1lib/t1afmtool.c \
+ $(T1LIB_TREE)/lib/t1lib/t1base.c \
+ $(T1LIB_TREE)/lib/t1lib/t1delete.c \
+ $(T1LIB_TREE)/lib/t1lib/t1enc.c \
+ $(T1LIB_TREE)/lib/t1lib/t1env.c \
+ $(T1LIB_TREE)/lib/t1lib/t1finfo.c \
+ $(T1LIB_TREE)/lib/t1lib/t1load.c \
+ $(T1LIB_TREE)/lib/t1lib/t1outline.c \
+ $(T1LIB_TREE)/lib/t1lib/t1set.c \
+ $(T1LIB_TREE)/lib/t1lib/t1subset.c \
+ $(T1LIB_TREE)/lib/t1lib/t1trans.c
-all: libt1.a
-uninstall:
+lib_type1_sources = \
+ $(T1LIB_TREE)/lib/type1/arith.c \
+ $(T1LIB_TREE)/lib/type1/bstring.c \
+ $(T1LIB_TREE)/lib/type1/curves.c \
+ $(T1LIB_TREE)/lib/type1/fontfcn.c \
+ $(T1LIB_TREE)/lib/type1/hints.c \
+ $(T1LIB_TREE)/lib/type1/lines.c \
+ $(T1LIB_TREE)/lib/type1/objects.c \
+ $(T1LIB_TREE)/lib/type1/paths.c \
+ $(T1LIB_TREE)/lib/type1/regions.c \
+ $(T1LIB_TREE)/lib/type1/scanfont.c \
+ $(T1LIB_TREE)/lib/type1/spaces.c \
+ $(T1LIB_TREE)/lib/type1/t1io.c \
+ $(T1LIB_TREE)/lib/type1/t1snap.c \
+ $(T1LIB_TREE)/lib/type1/t1stub.c \
+ $(T1LIB_TREE)/lib/type1/token.c \
+ $(T1LIB_TREE)/lib/type1/type1.c \
+ $(T1LIB_TREE)/lib/type1/util.c
-kpse_include ../../texk/make/clean.mk
+@build_TRUE@dist_check_SCRIPTS = type1afm.test
+@build_TRUE@TESTS = type1afm.test
+nodist_type1afm_SOURCES = $(T1LIB_TREE)/type1afm/type1afm.c
+CLEANFILES = l047016t.afmx x047016t.afm x047016t.pfa
+all: all-am
-clean::
- rm -f libt1.a
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+ cd $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
-distclean::
- rm -f sysconf.h
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
-# DO NOT DELETE THIS LINE -- make depend depends on it.
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+lib/t1lib/sysconf.h: lib/t1lib/stamp-h1
+ @if test ! -f $@; then \
+ rm -f lib/t1lib/stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) lib/t1lib/stamp-h1; \
+ else :; fi
+
+lib/t1lib/stamp-h1: $(top_srcdir)/lib/t1lib/sysconf.h.in $(top_builddir)/config.status
+ @rm -f lib/t1lib/stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status lib/t1lib/sysconf.h
+$(top_srcdir)/lib/t1lib/sysconf.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ rm -f lib/t1lib/stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f lib/t1lib/sysconf.h lib/t1lib/stamp-h1
+t1lib.h: $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libt1.a: $(libt1_a_OBJECTS) $(libt1_a_DEPENDENCIES)
+ -rm -f libt1.a
+ $(libt1_a_AR) libt1.a $(libt1_a_OBJECTS) $(libt1_a_LIBADD)
+ $(RANLIB) libt1.a
+
+clean-checkPROGRAMS:
+ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+type1afm$(EXEEXT): $(type1afm_OBJECTS) $(type1afm_DEPENDENCIES)
+ @rm -f type1afm$(EXEEXT)
+ $(LINK) $(type1afm_OBJECTS) $(type1afm_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arith.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bstring.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curves.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fontfcn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hints.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lines.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objects.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseAFM.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paths.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanfont.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spaces.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1aaset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1afmtool.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1base.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1delete.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1enc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1env.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1finfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1io.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1load.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1outline.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1set.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1snap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1stub.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1subset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1trans.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/token.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type1afm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+parseAFM.o: $(T1LIB_TREE)/lib/t1lib/parseAFM.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parseAFM.o -MD -MP -MF $(DEPDIR)/parseAFM.Tpo -c -o parseAFM.o `test -f '$(T1LIB_TREE)/lib/t1lib/parseAFM.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/parseAFM.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/parseAFM.Tpo $(DEPDIR)/parseAFM.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/parseAFM.c' object='parseAFM.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parseAFM.o `test -f '$(T1LIB_TREE)/lib/t1lib/parseAFM.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/parseAFM.c
+
+parseAFM.obj: $(T1LIB_TREE)/lib/t1lib/parseAFM.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parseAFM.obj -MD -MP -MF $(DEPDIR)/parseAFM.Tpo -c -o parseAFM.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/parseAFM.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/parseAFM.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/parseAFM.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/parseAFM.Tpo $(DEPDIR)/parseAFM.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/parseAFM.c' object='parseAFM.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parseAFM.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/parseAFM.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/parseAFM.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/parseAFM.c'; fi`
+
+t1aaset.o: $(T1LIB_TREE)/lib/t1lib/t1aaset.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1aaset.o -MD -MP -MF $(DEPDIR)/t1aaset.Tpo -c -o t1aaset.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1aaset.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1aaset.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1aaset.Tpo $(DEPDIR)/t1aaset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1aaset.c' object='t1aaset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1aaset.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1aaset.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1aaset.c
+
+t1aaset.obj: $(T1LIB_TREE)/lib/t1lib/t1aaset.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1aaset.obj -MD -MP -MF $(DEPDIR)/t1aaset.Tpo -c -o t1aaset.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1aaset.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1aaset.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1aaset.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1aaset.Tpo $(DEPDIR)/t1aaset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1aaset.c' object='t1aaset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1aaset.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1aaset.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1aaset.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1aaset.c'; fi`
+
+t1afmtool.o: $(T1LIB_TREE)/lib/t1lib/t1afmtool.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1afmtool.o -MD -MP -MF $(DEPDIR)/t1afmtool.Tpo -c -o t1afmtool.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1afmtool.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1afmtool.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1afmtool.Tpo $(DEPDIR)/t1afmtool.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1afmtool.c' object='t1afmtool.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1afmtool.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1afmtool.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1afmtool.c
+
+t1afmtool.obj: $(T1LIB_TREE)/lib/t1lib/t1afmtool.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1afmtool.obj -MD -MP -MF $(DEPDIR)/t1afmtool.Tpo -c -o t1afmtool.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1afmtool.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1afmtool.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1afmtool.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1afmtool.Tpo $(DEPDIR)/t1afmtool.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1afmtool.c' object='t1afmtool.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1afmtool.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1afmtool.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1afmtool.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1afmtool.c'; fi`
+
+t1base.o: $(T1LIB_TREE)/lib/t1lib/t1base.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1base.o -MD -MP -MF $(DEPDIR)/t1base.Tpo -c -o t1base.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1base.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1base.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1base.Tpo $(DEPDIR)/t1base.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1base.c' object='t1base.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1base.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1base.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1base.c
+
+t1base.obj: $(T1LIB_TREE)/lib/t1lib/t1base.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1base.obj -MD -MP -MF $(DEPDIR)/t1base.Tpo -c -o t1base.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1base.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1base.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1base.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1base.Tpo $(DEPDIR)/t1base.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1base.c' object='t1base.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1base.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1base.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1base.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1base.c'; fi`
+
+t1delete.o: $(T1LIB_TREE)/lib/t1lib/t1delete.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1delete.o -MD -MP -MF $(DEPDIR)/t1delete.Tpo -c -o t1delete.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1delete.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1delete.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1delete.Tpo $(DEPDIR)/t1delete.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1delete.c' object='t1delete.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1delete.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1delete.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1delete.c
+
+t1delete.obj: $(T1LIB_TREE)/lib/t1lib/t1delete.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1delete.obj -MD -MP -MF $(DEPDIR)/t1delete.Tpo -c -o t1delete.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1delete.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1delete.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1delete.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1delete.Tpo $(DEPDIR)/t1delete.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1delete.c' object='t1delete.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1delete.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1delete.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1delete.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1delete.c'; fi`
+
+t1enc.o: $(T1LIB_TREE)/lib/t1lib/t1enc.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1enc.o -MD -MP -MF $(DEPDIR)/t1enc.Tpo -c -o t1enc.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1enc.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1enc.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1enc.Tpo $(DEPDIR)/t1enc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1enc.c' object='t1enc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1enc.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1enc.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1enc.c
+
+t1enc.obj: $(T1LIB_TREE)/lib/t1lib/t1enc.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1enc.obj -MD -MP -MF $(DEPDIR)/t1enc.Tpo -c -o t1enc.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1enc.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1enc.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1enc.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1enc.Tpo $(DEPDIR)/t1enc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1enc.c' object='t1enc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1enc.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1enc.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1enc.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1enc.c'; fi`
+
+t1env.o: $(T1LIB_TREE)/lib/t1lib/t1env.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1env.o -MD -MP -MF $(DEPDIR)/t1env.Tpo -c -o t1env.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1env.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1env.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1env.Tpo $(DEPDIR)/t1env.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1env.c' object='t1env.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1env.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1env.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1env.c
+
+t1env.obj: $(T1LIB_TREE)/lib/t1lib/t1env.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1env.obj -MD -MP -MF $(DEPDIR)/t1env.Tpo -c -o t1env.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1env.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1env.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1env.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1env.Tpo $(DEPDIR)/t1env.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1env.c' object='t1env.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1env.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1env.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1env.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1env.c'; fi`
+
+t1finfo.o: $(T1LIB_TREE)/lib/t1lib/t1finfo.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1finfo.o -MD -MP -MF $(DEPDIR)/t1finfo.Tpo -c -o t1finfo.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1finfo.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1finfo.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1finfo.Tpo $(DEPDIR)/t1finfo.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1finfo.c' object='t1finfo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1finfo.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1finfo.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1finfo.c
+
+t1finfo.obj: $(T1LIB_TREE)/lib/t1lib/t1finfo.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1finfo.obj -MD -MP -MF $(DEPDIR)/t1finfo.Tpo -c -o t1finfo.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1finfo.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1finfo.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1finfo.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1finfo.Tpo $(DEPDIR)/t1finfo.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1finfo.c' object='t1finfo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1finfo.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1finfo.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1finfo.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1finfo.c'; fi`
+
+t1load.o: $(T1LIB_TREE)/lib/t1lib/t1load.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1load.o -MD -MP -MF $(DEPDIR)/t1load.Tpo -c -o t1load.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1load.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1load.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1load.Tpo $(DEPDIR)/t1load.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1load.c' object='t1load.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1load.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1load.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1load.c
+
+t1load.obj: $(T1LIB_TREE)/lib/t1lib/t1load.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1load.obj -MD -MP -MF $(DEPDIR)/t1load.Tpo -c -o t1load.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1load.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1load.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1load.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1load.Tpo $(DEPDIR)/t1load.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1load.c' object='t1load.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1load.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1load.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1load.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1load.c'; fi`
+
+t1outline.o: $(T1LIB_TREE)/lib/t1lib/t1outline.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1outline.o -MD -MP -MF $(DEPDIR)/t1outline.Tpo -c -o t1outline.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1outline.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1outline.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1outline.Tpo $(DEPDIR)/t1outline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1outline.c' object='t1outline.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1outline.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1outline.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1outline.c
+
+t1outline.obj: $(T1LIB_TREE)/lib/t1lib/t1outline.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1outline.obj -MD -MP -MF $(DEPDIR)/t1outline.Tpo -c -o t1outline.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1outline.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1outline.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1outline.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1outline.Tpo $(DEPDIR)/t1outline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1outline.c' object='t1outline.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1outline.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1outline.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1outline.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1outline.c'; fi`
+
+t1set.o: $(T1LIB_TREE)/lib/t1lib/t1set.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1set.o -MD -MP -MF $(DEPDIR)/t1set.Tpo -c -o t1set.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1set.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1set.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1set.Tpo $(DEPDIR)/t1set.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1set.c' object='t1set.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1set.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1set.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1set.c
+
+t1set.obj: $(T1LIB_TREE)/lib/t1lib/t1set.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1set.obj -MD -MP -MF $(DEPDIR)/t1set.Tpo -c -o t1set.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1set.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1set.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1set.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1set.Tpo $(DEPDIR)/t1set.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1set.c' object='t1set.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1set.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1set.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1set.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1set.c'; fi`
+
+t1subset.o: $(T1LIB_TREE)/lib/t1lib/t1subset.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1subset.o -MD -MP -MF $(DEPDIR)/t1subset.Tpo -c -o t1subset.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1subset.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1subset.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1subset.Tpo $(DEPDIR)/t1subset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1subset.c' object='t1subset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1subset.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1subset.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1subset.c
+
+t1subset.obj: $(T1LIB_TREE)/lib/t1lib/t1subset.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1subset.obj -MD -MP -MF $(DEPDIR)/t1subset.Tpo -c -o t1subset.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1subset.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1subset.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1subset.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1subset.Tpo $(DEPDIR)/t1subset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1subset.c' object='t1subset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1subset.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1subset.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1subset.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1subset.c'; fi`
+
+t1trans.o: $(T1LIB_TREE)/lib/t1lib/t1trans.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1trans.o -MD -MP -MF $(DEPDIR)/t1trans.Tpo -c -o t1trans.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1trans.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1trans.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1trans.Tpo $(DEPDIR)/t1trans.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1trans.c' object='t1trans.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1trans.o `test -f '$(T1LIB_TREE)/lib/t1lib/t1trans.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/t1lib/t1trans.c
+
+t1trans.obj: $(T1LIB_TREE)/lib/t1lib/t1trans.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1trans.obj -MD -MP -MF $(DEPDIR)/t1trans.Tpo -c -o t1trans.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1trans.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1trans.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1trans.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1trans.Tpo $(DEPDIR)/t1trans.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/t1lib/t1trans.c' object='t1trans.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1trans.obj `if test -f '$(T1LIB_TREE)/lib/t1lib/t1trans.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/t1lib/t1trans.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/t1lib/t1trans.c'; fi`
+
+arith.o: $(T1LIB_TREE)/lib/type1/arith.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arith.o -MD -MP -MF $(DEPDIR)/arith.Tpo -c -o arith.o `test -f '$(T1LIB_TREE)/lib/type1/arith.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/arith.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/arith.Tpo $(DEPDIR)/arith.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/arith.c' object='arith.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arith.o `test -f '$(T1LIB_TREE)/lib/type1/arith.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/arith.c
+
+arith.obj: $(T1LIB_TREE)/lib/type1/arith.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arith.obj -MD -MP -MF $(DEPDIR)/arith.Tpo -c -o arith.obj `if test -f '$(T1LIB_TREE)/lib/type1/arith.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/arith.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/arith.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/arith.Tpo $(DEPDIR)/arith.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/arith.c' object='arith.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arith.obj `if test -f '$(T1LIB_TREE)/lib/type1/arith.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/arith.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/arith.c'; fi`
+
+bstring.o: $(T1LIB_TREE)/lib/type1/bstring.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bstring.o -MD -MP -MF $(DEPDIR)/bstring.Tpo -c -o bstring.o `test -f '$(T1LIB_TREE)/lib/type1/bstring.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/bstring.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/bstring.Tpo $(DEPDIR)/bstring.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/bstring.c' object='bstring.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bstring.o `test -f '$(T1LIB_TREE)/lib/type1/bstring.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/bstring.c
+
+bstring.obj: $(T1LIB_TREE)/lib/type1/bstring.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bstring.obj -MD -MP -MF $(DEPDIR)/bstring.Tpo -c -o bstring.obj `if test -f '$(T1LIB_TREE)/lib/type1/bstring.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/bstring.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/bstring.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/bstring.Tpo $(DEPDIR)/bstring.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/bstring.c' object='bstring.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bstring.obj `if test -f '$(T1LIB_TREE)/lib/type1/bstring.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/bstring.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/bstring.c'; fi`
+
+curves.o: $(T1LIB_TREE)/lib/type1/curves.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curves.o -MD -MP -MF $(DEPDIR)/curves.Tpo -c -o curves.o `test -f '$(T1LIB_TREE)/lib/type1/curves.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/curves.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/curves.Tpo $(DEPDIR)/curves.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/curves.c' object='curves.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curves.o `test -f '$(T1LIB_TREE)/lib/type1/curves.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/curves.c
+
+curves.obj: $(T1LIB_TREE)/lib/type1/curves.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curves.obj -MD -MP -MF $(DEPDIR)/curves.Tpo -c -o curves.obj `if test -f '$(T1LIB_TREE)/lib/type1/curves.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/curves.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/curves.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/curves.Tpo $(DEPDIR)/curves.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/curves.c' object='curves.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curves.obj `if test -f '$(T1LIB_TREE)/lib/type1/curves.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/curves.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/curves.c'; fi`
+
+fontfcn.o: $(T1LIB_TREE)/lib/type1/fontfcn.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fontfcn.o -MD -MP -MF $(DEPDIR)/fontfcn.Tpo -c -o fontfcn.o `test -f '$(T1LIB_TREE)/lib/type1/fontfcn.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/fontfcn.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fontfcn.Tpo $(DEPDIR)/fontfcn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/fontfcn.c' object='fontfcn.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fontfcn.o `test -f '$(T1LIB_TREE)/lib/type1/fontfcn.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/fontfcn.c
+
+fontfcn.obj: $(T1LIB_TREE)/lib/type1/fontfcn.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fontfcn.obj -MD -MP -MF $(DEPDIR)/fontfcn.Tpo -c -o fontfcn.obj `if test -f '$(T1LIB_TREE)/lib/type1/fontfcn.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/fontfcn.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/fontfcn.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fontfcn.Tpo $(DEPDIR)/fontfcn.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/fontfcn.c' object='fontfcn.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fontfcn.obj `if test -f '$(T1LIB_TREE)/lib/type1/fontfcn.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/fontfcn.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/fontfcn.c'; fi`
+
+hints.o: $(T1LIB_TREE)/lib/type1/hints.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hints.o -MD -MP -MF $(DEPDIR)/hints.Tpo -c -o hints.o `test -f '$(T1LIB_TREE)/lib/type1/hints.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/hints.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/hints.Tpo $(DEPDIR)/hints.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/hints.c' object='hints.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hints.o `test -f '$(T1LIB_TREE)/lib/type1/hints.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/hints.c
+
+hints.obj: $(T1LIB_TREE)/lib/type1/hints.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hints.obj -MD -MP -MF $(DEPDIR)/hints.Tpo -c -o hints.obj `if test -f '$(T1LIB_TREE)/lib/type1/hints.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/hints.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/hints.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/hints.Tpo $(DEPDIR)/hints.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/hints.c' object='hints.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hints.obj `if test -f '$(T1LIB_TREE)/lib/type1/hints.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/hints.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/hints.c'; fi`
+
+lines.o: $(T1LIB_TREE)/lib/type1/lines.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lines.o -MD -MP -MF $(DEPDIR)/lines.Tpo -c -o lines.o `test -f '$(T1LIB_TREE)/lib/type1/lines.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/lines.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lines.Tpo $(DEPDIR)/lines.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/lines.c' object='lines.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lines.o `test -f '$(T1LIB_TREE)/lib/type1/lines.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/lines.c
+
+lines.obj: $(T1LIB_TREE)/lib/type1/lines.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lines.obj -MD -MP -MF $(DEPDIR)/lines.Tpo -c -o lines.obj `if test -f '$(T1LIB_TREE)/lib/type1/lines.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/lines.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/lines.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/lines.Tpo $(DEPDIR)/lines.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/lines.c' object='lines.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lines.obj `if test -f '$(T1LIB_TREE)/lib/type1/lines.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/lines.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/lines.c'; fi`
+
+objects.o: $(T1LIB_TREE)/lib/type1/objects.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT objects.o -MD -MP -MF $(DEPDIR)/objects.Tpo -c -o objects.o `test -f '$(T1LIB_TREE)/lib/type1/objects.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/objects.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/objects.Tpo $(DEPDIR)/objects.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/objects.c' object='objects.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o objects.o `test -f '$(T1LIB_TREE)/lib/type1/objects.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/objects.c
+
+objects.obj: $(T1LIB_TREE)/lib/type1/objects.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT objects.obj -MD -MP -MF $(DEPDIR)/objects.Tpo -c -o objects.obj `if test -f '$(T1LIB_TREE)/lib/type1/objects.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/objects.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/objects.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/objects.Tpo $(DEPDIR)/objects.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/objects.c' object='objects.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o objects.obj `if test -f '$(T1LIB_TREE)/lib/type1/objects.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/objects.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/objects.c'; fi`
+
+paths.o: $(T1LIB_TREE)/lib/type1/paths.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT paths.o -MD -MP -MF $(DEPDIR)/paths.Tpo -c -o paths.o `test -f '$(T1LIB_TREE)/lib/type1/paths.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/paths.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/paths.Tpo $(DEPDIR)/paths.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/paths.c' object='paths.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o paths.o `test -f '$(T1LIB_TREE)/lib/type1/paths.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/paths.c
+
+paths.obj: $(T1LIB_TREE)/lib/type1/paths.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT paths.obj -MD -MP -MF $(DEPDIR)/paths.Tpo -c -o paths.obj `if test -f '$(T1LIB_TREE)/lib/type1/paths.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/paths.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/paths.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/paths.Tpo $(DEPDIR)/paths.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/paths.c' object='paths.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o paths.obj `if test -f '$(T1LIB_TREE)/lib/type1/paths.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/paths.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/paths.c'; fi`
+
+regions.o: $(T1LIB_TREE)/lib/type1/regions.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT regions.o -MD -MP -MF $(DEPDIR)/regions.Tpo -c -o regions.o `test -f '$(T1LIB_TREE)/lib/type1/regions.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/regions.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/regions.Tpo $(DEPDIR)/regions.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/regions.c' object='regions.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o regions.o `test -f '$(T1LIB_TREE)/lib/type1/regions.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/regions.c
+
+regions.obj: $(T1LIB_TREE)/lib/type1/regions.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT regions.obj -MD -MP -MF $(DEPDIR)/regions.Tpo -c -o regions.obj `if test -f '$(T1LIB_TREE)/lib/type1/regions.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/regions.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/regions.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/regions.Tpo $(DEPDIR)/regions.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/regions.c' object='regions.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o regions.obj `if test -f '$(T1LIB_TREE)/lib/type1/regions.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/regions.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/regions.c'; fi`
+
+scanfont.o: $(T1LIB_TREE)/lib/type1/scanfont.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT scanfont.o -MD -MP -MF $(DEPDIR)/scanfont.Tpo -c -o scanfont.o `test -f '$(T1LIB_TREE)/lib/type1/scanfont.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/scanfont.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/scanfont.Tpo $(DEPDIR)/scanfont.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/scanfont.c' object='scanfont.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o scanfont.o `test -f '$(T1LIB_TREE)/lib/type1/scanfont.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/scanfont.c
+
+scanfont.obj: $(T1LIB_TREE)/lib/type1/scanfont.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT scanfont.obj -MD -MP -MF $(DEPDIR)/scanfont.Tpo -c -o scanfont.obj `if test -f '$(T1LIB_TREE)/lib/type1/scanfont.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/scanfont.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/scanfont.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/scanfont.Tpo $(DEPDIR)/scanfont.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/scanfont.c' object='scanfont.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o scanfont.obj `if test -f '$(T1LIB_TREE)/lib/type1/scanfont.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/scanfont.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/scanfont.c'; fi`
+
+spaces.o: $(T1LIB_TREE)/lib/type1/spaces.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spaces.o -MD -MP -MF $(DEPDIR)/spaces.Tpo -c -o spaces.o `test -f '$(T1LIB_TREE)/lib/type1/spaces.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/spaces.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spaces.Tpo $(DEPDIR)/spaces.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/spaces.c' object='spaces.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spaces.o `test -f '$(T1LIB_TREE)/lib/type1/spaces.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/spaces.c
+
+spaces.obj: $(T1LIB_TREE)/lib/type1/spaces.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spaces.obj -MD -MP -MF $(DEPDIR)/spaces.Tpo -c -o spaces.obj `if test -f '$(T1LIB_TREE)/lib/type1/spaces.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/spaces.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/spaces.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spaces.Tpo $(DEPDIR)/spaces.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/spaces.c' object='spaces.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spaces.obj `if test -f '$(T1LIB_TREE)/lib/type1/spaces.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/spaces.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/spaces.c'; fi`
+
+t1io.o: $(T1LIB_TREE)/lib/type1/t1io.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1io.o -MD -MP -MF $(DEPDIR)/t1io.Tpo -c -o t1io.o `test -f '$(T1LIB_TREE)/lib/type1/t1io.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/t1io.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1io.Tpo $(DEPDIR)/t1io.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/t1io.c' object='t1io.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1io.o `test -f '$(T1LIB_TREE)/lib/type1/t1io.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/t1io.c
+
+t1io.obj: $(T1LIB_TREE)/lib/type1/t1io.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1io.obj -MD -MP -MF $(DEPDIR)/t1io.Tpo -c -o t1io.obj `if test -f '$(T1LIB_TREE)/lib/type1/t1io.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/t1io.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/t1io.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1io.Tpo $(DEPDIR)/t1io.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/t1io.c' object='t1io.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1io.obj `if test -f '$(T1LIB_TREE)/lib/type1/t1io.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/t1io.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/t1io.c'; fi`
+
+t1snap.o: $(T1LIB_TREE)/lib/type1/t1snap.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1snap.o -MD -MP -MF $(DEPDIR)/t1snap.Tpo -c -o t1snap.o `test -f '$(T1LIB_TREE)/lib/type1/t1snap.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/t1snap.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1snap.Tpo $(DEPDIR)/t1snap.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/t1snap.c' object='t1snap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1snap.o `test -f '$(T1LIB_TREE)/lib/type1/t1snap.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/t1snap.c
+
+t1snap.obj: $(T1LIB_TREE)/lib/type1/t1snap.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1snap.obj -MD -MP -MF $(DEPDIR)/t1snap.Tpo -c -o t1snap.obj `if test -f '$(T1LIB_TREE)/lib/type1/t1snap.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/t1snap.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/t1snap.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1snap.Tpo $(DEPDIR)/t1snap.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/t1snap.c' object='t1snap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1snap.obj `if test -f '$(T1LIB_TREE)/lib/type1/t1snap.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/t1snap.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/t1snap.c'; fi`
+
+t1stub.o: $(T1LIB_TREE)/lib/type1/t1stub.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1stub.o -MD -MP -MF $(DEPDIR)/t1stub.Tpo -c -o t1stub.o `test -f '$(T1LIB_TREE)/lib/type1/t1stub.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/t1stub.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1stub.Tpo $(DEPDIR)/t1stub.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/t1stub.c' object='t1stub.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1stub.o `test -f '$(T1LIB_TREE)/lib/type1/t1stub.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/t1stub.c
+
+t1stub.obj: $(T1LIB_TREE)/lib/type1/t1stub.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t1stub.obj -MD -MP -MF $(DEPDIR)/t1stub.Tpo -c -o t1stub.obj `if test -f '$(T1LIB_TREE)/lib/type1/t1stub.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/t1stub.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/t1stub.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/t1stub.Tpo $(DEPDIR)/t1stub.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/t1stub.c' object='t1stub.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t1stub.obj `if test -f '$(T1LIB_TREE)/lib/type1/t1stub.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/t1stub.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/t1stub.c'; fi`
+
+token.o: $(T1LIB_TREE)/lib/type1/token.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT token.o -MD -MP -MF $(DEPDIR)/token.Tpo -c -o token.o `test -f '$(T1LIB_TREE)/lib/type1/token.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/token.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/token.Tpo $(DEPDIR)/token.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/token.c' object='token.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o token.o `test -f '$(T1LIB_TREE)/lib/type1/token.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/token.c
+
+token.obj: $(T1LIB_TREE)/lib/type1/token.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT token.obj -MD -MP -MF $(DEPDIR)/token.Tpo -c -o token.obj `if test -f '$(T1LIB_TREE)/lib/type1/token.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/token.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/token.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/token.Tpo $(DEPDIR)/token.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/token.c' object='token.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o token.obj `if test -f '$(T1LIB_TREE)/lib/type1/token.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/token.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/token.c'; fi`
+
+type1.o: $(T1LIB_TREE)/lib/type1/type1.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT type1.o -MD -MP -MF $(DEPDIR)/type1.Tpo -c -o type1.o `test -f '$(T1LIB_TREE)/lib/type1/type1.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/type1.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/type1.Tpo $(DEPDIR)/type1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/type1.c' object='type1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o type1.o `test -f '$(T1LIB_TREE)/lib/type1/type1.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/type1.c
+
+type1.obj: $(T1LIB_TREE)/lib/type1/type1.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT type1.obj -MD -MP -MF $(DEPDIR)/type1.Tpo -c -o type1.obj `if test -f '$(T1LIB_TREE)/lib/type1/type1.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/type1.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/type1.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/type1.Tpo $(DEPDIR)/type1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/type1.c' object='type1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o type1.obj `if test -f '$(T1LIB_TREE)/lib/type1/type1.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/type1.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/type1.c'; fi`
+
+util.o: $(T1LIB_TREE)/lib/type1/util.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT util.o -MD -MP -MF $(DEPDIR)/util.Tpo -c -o util.o `test -f '$(T1LIB_TREE)/lib/type1/util.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/util.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/util.Tpo $(DEPDIR)/util.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/util.c' object='util.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o util.o `test -f '$(T1LIB_TREE)/lib/type1/util.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/lib/type1/util.c
+
+util.obj: $(T1LIB_TREE)/lib/type1/util.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT util.obj -MD -MP -MF $(DEPDIR)/util.Tpo -c -o util.obj `if test -f '$(T1LIB_TREE)/lib/type1/util.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/util.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/util.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/util.Tpo $(DEPDIR)/util.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/lib/type1/util.c' object='util.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o util.obj `if test -f '$(T1LIB_TREE)/lib/type1/util.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/lib/type1/util.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/lib/type1/util.c'; fi`
+
+type1afm.o: $(T1LIB_TREE)/type1afm/type1afm.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT type1afm.o -MD -MP -MF $(DEPDIR)/type1afm.Tpo -c -o type1afm.o `test -f '$(T1LIB_TREE)/type1afm/type1afm.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/type1afm/type1afm.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/type1afm.Tpo $(DEPDIR)/type1afm.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/type1afm/type1afm.c' object='type1afm.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o type1afm.o `test -f '$(T1LIB_TREE)/type1afm/type1afm.c' || echo '$(srcdir)/'`$(T1LIB_TREE)/type1afm/type1afm.c
+
+type1afm.obj: $(T1LIB_TREE)/type1afm/type1afm.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT type1afm.obj -MD -MP -MF $(DEPDIR)/type1afm.Tpo -c -o type1afm.obj `if test -f '$(T1LIB_TREE)/type1afm/type1afm.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/type1afm/type1afm.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/type1afm/type1afm.c'; fi`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/type1afm.Tpo $(DEPDIR)/type1afm.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(T1LIB_TREE)/type1afm/type1afm.c' object='type1afm.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o type1afm.obj `if test -f '$(T1LIB_TREE)/type1afm/type1afm.c'; then $(CYGPATH_W) '$(T1LIB_TREE)/type1afm/type1afm.c'; else $(CYGPATH_W) '$(srcdir)/$(T1LIB_TREE)/type1afm/type1afm.c'; fi`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d $(distdir) || mkdir $(distdir)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+ $(dist_check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
+ clean clean-checkPROGRAMS clean-generic clean-noinstLIBRARIES \
+ ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
+ dist-tarZ dist-zip distcheck distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Build/source/libs/t1lib/README b/Build/source/libs/t1lib/README
new file mode 100644
index 00000000000..90eba0ae9b0
--- /dev/null
+++ b/Build/source/libs/t1lib/README
@@ -0,0 +1,17 @@
+ Building t1lib-5.1.2 as part of the TL tree
+ =============================================
+
+This directory libs/t1lib/ uses a proxy Makefile.am to build the t1lib library
+from the unmodified(*) source tree in libs/t1lib/t1lib-x.y.z/, bypassing
+the original build system.
+
+As far as applicable, the tests in libs/t1lib-x.y.z/configure.in have been
+copied to libs/t1lib/configure.ac.
+
+-----------------------------
+
+(*) almost unmodified, the file lib/t1lib/t1lib.h has been removed!
+
+=============================
+
+2009-02-05 Peter Breitenlohner <peb@mppmu.mpg.de>
diff --git a/Build/source/libs/t1lib/aclocal.m4 b/Build/source/libs/t1lib/aclocal.m4
index 76aba4fa64e..542504c5f15 100644
--- a/Build/source/libs/t1lib/aclocal.m4
+++ b/Build/source/libs/t1lib/aclocal.m4
@@ -11,5 +11,896 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
-m4_include([../../texk/m4/kpse_inc.m4])
-m4_include([../../texk/m4/kpse_maint.m4])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
+[m4_warning([this file was generated for autoconf 2.63.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.10.2], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.2])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 4
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[# Autoconf 2.62 quotes --file arguments for eval, but not when files
+# are listed without --file. Let's play safe and only enable the eval
+# if we detect the quoting.
+case $CONFIG_FILES in
+*\'*) eval set x "$CONFIG_FILES" ;;
+*) set x $CONFIG_FILES ;;
+esac
+shift
+for mf
+do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 13
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/Build/source/libs/t1lib/configure b/Build/source/libs/t1lib/configure
index 32b12bf0cc5..13c8e2ebe6d 100755
--- a/Build/source/libs/t1lib/configure
+++ b/Build/source/libs/t1lib/configure
@@ -1,7 +1,8 @@
#! /bin/sh
-# From configure.in configure.in 1.00.
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63.
+# Generated by GNU Autoconf 2.63 for T1lib for TeX Live 5.1.2.
+#
+# Report bugs to <tex-k@tug.org>.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -593,13 +594,13 @@ MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
+PACKAGE_NAME='T1lib for TeX Live'
+PACKAGE_TARNAME='t1lib-for-tex-live'
+PACKAGE_VERSION='5.1.2'
+PACKAGE_STRING='T1lib for TeX Live 5.1.2'
+PACKAGE_BUGREPORT='tex-k@tug.org'
-ac_unique_file="t1base.c"
+ac_unique_file="t1lib-5.1.2/lib/t1lib/t1base.c"
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
@@ -638,23 +639,25 @@ ac_includes_default="\
ac_subst_vars='LTLIBOBJS
LIBOBJS
+T1LIB_TREE
+T1LIB_CFLAGS
+T1LIB_DEFINES
+T1LIB_DATA_DIR
+T1_INT32
+T1_INT16
EGREP
GREP
-texmfmain
-ARFLAGS
-AR
-LD
-MAINT
-RANLIB
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-X_EXTRA_LIBS
-X_LIBS
-X_PRE_LIBS
-X_CFLAGS
-XMKMF
CPP
+RANLIB
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
OBJEXT
EXEEXT
ac_ct_CC
@@ -662,19 +665,38 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
-SET_MAKE
-T1_AA_TYPE64
-T1_AA_TYPE32
-T1_AA_TYPE16
+build_FALSE
+build_TRUE
T1LIB_VERSIONSTRING
T1LIB_PATCHLEVEL
T1LIB_REVISION
T1LIB_VERSION
-T1LIB_IDENTIFIER
-T1LIB_DATA_DIR
-T1LIB_LT_AGE
-T1LIB_LT_REVISION
-T1LIB_LT_CURRENT
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
target_alias
host_alias
build_alias
@@ -715,15 +737,8 @@ SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
-with_x
enable_maintainer_mode
-with_mktexmf_default
-with_mktexpk_default
-with_mktextfm_default
-with_mkocp_default
-with_mkofm_default
-with_mktexfmt_default
-with_mktextex_default
+enable_dependency_tracking
'
ac_precious_vars='build_alias
host_alias
@@ -733,8 +748,7 @@ CFLAGS
LDFLAGS
LIBS
CPPFLAGS
-CPP
-XMKMF'
+CPP'
# Initialize some variables set by options.
@@ -775,7 +789,7 @@ sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
includedir='${prefix}/include'
oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
infodir='${datarootdir}/info'
htmldir='${docdir}'
dvidir='${docdir}'
@@ -1287,7 +1301,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
+\`configure' configures T1lib for TeX Live 5.1.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1335,7 +1349,8 @@ Fine tuning of the installation directories:
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
+ --docdir=DIR documentation root
+ [DATAROOTDIR/doc/t1lib-for-tex-live]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
@@ -1344,14 +1359,17 @@ _ACEOF
cat <<\_ACEOF
-X features:
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
_ACEOF
fi
if test -n "$ac_init_help"; then
-
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of T1lib for TeX Live 5.1.2:";;
+ esac
cat <<\_ACEOF
Optional Features:
@@ -1360,18 +1378,8 @@ Optional Features:
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-x use the X Window System
- --without-mktexmf-default do not run mktexmf if MF source missing
- --without-mktexpk-default do not run mktexpk if PK font missing
- --without-mktextfm-default do not run mktextfm if TFM file missing
- --without-mkocp-default do not run mkocp if OCP file missing
- --without-mkofm-default do not run mkofm if OFM file missing
- --with-mktexfmt-default run mktexfmt if format file missing
- --with-mktextex-default run mktextex if TeX source missing
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
Some influential environment variables:
CC C compiler command
@@ -1382,11 +1390,11 @@ Some influential environment variables:
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
- XMKMF Path to xmkmf, Makefile generator for X Window System
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
+Report bugs to <tex-k@tug.org>.
_ACEOF
ac_status=$?
fi
@@ -1449,7 +1457,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-configure
+T1lib for TeX Live configure 5.1.2
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1463,7 +1471,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by $as_me, which was
+It was created by T1lib for TeX Live $as_me 5.1.2, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -1816,6 +1824,14 @@ fi
+
+
+
+
+
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -1823,10 +1839,10 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_config_headers="$ac_config_headers sysconf.h:sysconf.h.in"
+
ac_aux_dir=
-for ac_dir in ../../config "$srcdir"/../../config; do
+for ac_dir in ../../build-aux "$srcdir"/../../build-aux; do
if test -f "$ac_dir/install-sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
@@ -1842,8 +1858,8 @@ for ac_dir in ../../config "$srcdir"/../../config; do
fi
done
if test -z "$ac_aux_dir"; then
- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ../../config \"$srcdir\"/../../config" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in ../../config \"$srcdir\"/../../config" >&2;}
+ { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ../../build-aux \"$srcdir\"/../../build-aux" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in ../../build-aux \"$srcdir\"/../../build-aux" >&2;}
{ (exit 1); exit 1; }; }
fi
@@ -1858,41 +1874,258 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+am__api_version='1.10'
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+IFS=$as_save_IFS
+rm -rf conftest.one conftest.two conftest.dir
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-T1LIB_LT_CURRENT=5
-T1LIB_LT_REVISION=2
-T1LIB_LT_AGE=0
-T1LIB_IDENTIFIER="5.0.2"
-
-T1LIB_VERSION=5
-T1LIB_REVISION=0
-T1LIB_PATCHLEVEL=2
-T1LIB_VERSIONSTRING=\""5.0.2"\"
-
-T1LIB_DATA_DIR="${datadir}/t1lib"
-
-
-
-
-
-
-
-
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+$as_echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+done
+IFS=$as_save_IFS
+fi
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ test -d ./--version && rmdir ./--version
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+ test -n "$AWK" && break
+done
{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
@@ -1925,6 +2158,217 @@ $as_echo "no" >&6; }
SET_MAKE="MAKE=${MAKE-make}"
fi
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='t1lib-for-tex-live'
+ VERSION='5.1.2'
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+T1LIB_VERSION=5
+T1LIB_REVISION=1
+T1LIB_PATCHLEVEL=2
+T1LIB_VERSIONSTRING='"5.1.2"'
+
+
+
+
+
+ac_config_headers="$ac_config_headers lib/t1lib/sysconf.h"
+
+
+ if test "x$enable_build" != xno; then
+ build_TRUE=
+ build_FALSE='#'
+else
+ build_TRUE='#'
+ build_FALSE=
+fi
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2857,6 +3301,271 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -3095,1741 +3804,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:$LINENO: checking for X" >&5
-$as_echo_n "checking for X... " >&6; }
-
-
-# Check whether --with-x was given.
-if test "${with_x+set}" = set; then
- withval=$with_x;
-fi
-
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
- # The user explicitly disabled X.
- have_x=disabled
-else
- case $x_includes,$x_libraries in #(
- *\'*) { { $as_echo "$as_me:$LINENO: error: cannot use X directory names containing '" >&5
-$as_echo "$as_me: error: cannot use X directory names containing '" >&2;}
- { (exit 1); exit 1; }; };; #(
- *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -f -r conftest.dir
-if mkdir conftest.dir; then
- cd conftest.dir
- cat >Imakefile <<'_ACEOF'
-incroot:
- @echo incroot='${INCROOT}'
-usrlibdir:
- @echo usrlibdir='${USRLIBDIR}'
-libdir:
- @echo libdir='${LIBDIR}'
-_ACEOF
- if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
- # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
- for ac_var in incroot usrlibdir libdir; do
- eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
- done
- # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
- for ac_extension in a so sl dylib la dll; do
- if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
- test -f "$ac_im_libdir/libX11.$ac_extension"; then
- ac_im_usrlibdir=$ac_im_libdir; break
- fi
- done
- # Screen out bogus values from the imake configuration. They are
- # bogus both because they are the default anyway, and because
- # using them would break gcc on systems where it needs fixed includes.
- case $ac_im_incroot in
- /usr/include) ac_x_includes= ;;
- *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
- esac
- case $ac_im_usrlibdir in
- /usr/lib | /usr/lib64 | /lib | /lib64) ;;
- *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
- esac
- fi
- cd ..
- rm -f -r conftest.dir
-fi
-
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
-
-/usr/include/X11
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
-
-/usr/local/X11/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
-
-/usr/local/include/X11
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
-
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
-
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
-
-/usr/openwin/include
-/usr/openwin/share/include'
-
-if test "$ac_x_includes" = no; then
- # Guess where to find include files, by looking for Xlib.h.
- # First, try using that file with no special directory specified.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <X11/Xlib.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- for ac_dir in $ac_x_header_dirs; do
- if test -r "$ac_dir/X11/Xlib.h"; then
- ac_x_includes=$ac_dir
- break
- fi
-done
-fi
-
-rm -f conftest.err conftest.$ac_ext
-fi # $ac_x_includes = no
-
-if test "$ac_x_libraries" = no; then
- # Check for the libraries.
- # See if we find them without any special options.
- # Don't add to $LIBS permanently.
- ac_save_LIBS=$LIBS
- LIBS="-lX11 $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <X11/Xlib.h>
-int
-main ()
-{
-XrmInitialize ()
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- LIBS=$ac_save_LIBS
-for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
- # Don't even attempt the hair of trying to link an X program!
- for ac_extension in a so sl dylib la dll; do
- if test -r "$ac_dir/libX11.$ac_extension"; then
- ac_x_libraries=$ac_dir
- break 2
- fi
- done
-done
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-case $ac_x_includes,$ac_x_libraries in #(
- no,* | *,no | *\'*)
- # Didn't find X, or a directory has "'" in its name.
- ac_cv_have_x="have_x=no";; #(
- *)
- # Record where we found X for the cache.
- ac_cv_have_x="have_x=yes\
- ac_x_includes='$ac_x_includes'\
- ac_x_libraries='$ac_x_libraries'"
-esac
-fi
-;; #(
- *) have_x=yes;;
- esac
- eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
- { $as_echo "$as_me:$LINENO: result: $have_x" >&5
-$as_echo "$have_x" >&6; }
- no_x=yes
-else
- # If each of the values was on the command line, it overrides each guess.
- test "x$x_includes" = xNONE && x_includes=$ac_x_includes
- test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
- # Update the cache value to reflect the command line values.
- ac_cv_have_x="have_x=yes\
- ac_x_includes='$x_includes'\
- ac_x_libraries='$x_libraries'"
- { $as_echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
-$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
-fi
-
-if test "$no_x" = yes; then
- # Not all programs may use this symbol, but it does not hurt to define it.
-
-cat >>confdefs.h <<\_ACEOF
-#define X_DISPLAY_MISSING 1
-_ACEOF
-
- X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-else
- if test -n "$x_includes"; then
- X_CFLAGS="$X_CFLAGS -I$x_includes"
- fi
-
- # It would also be nice to do this for all -L options, not just this one.
- if test -n "$x_libraries"; then
- X_LIBS="$X_LIBS -L$x_libraries"
- # For Solaris; some versions of Sun CC require a space after -R and
- # others require no space. Words are not sufficient . . . .
- { $as_echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
-$as_echo_n "checking whether -R must be followed by a space... " >&6; }
- ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
- ac_xsave_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- X_LIBS="$X_LIBS -R$x_libraries"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- LIBS="$ac_xsave_LIBS -R $x_libraries"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- X_LIBS="$X_LIBS -R $x_libraries"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: result: neither works" >&5
-$as_echo "neither works" >&6; }
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- ac_c_werror_flag=$ac_xsave_c_werror_flag
- LIBS=$ac_xsave_LIBS
- fi
-
- # Check for system-dependent libraries X programs must link with.
- # Do this before checking for the system-independent R6 libraries
- # (-lICE), since we may need -lsocket or whatever for X linking.
-
- if test "$ISC" = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
- else
- # Martyn Johnson says this is needed for Ultrix, if the X
- # libraries were built with DECnet support. And Karl Berry says
- # the Alpha needs dnet_stub (dnet does not exist).
- ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XOpenDisplay ();
-int
-main ()
-{
-return XOpenDisplay ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { $as_echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
-if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dnet_dnet_ntoa=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dnet_dnet_ntoa=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-fi
-
- if test $ac_cv_lib_dnet_dnet_ntoa = no; then
- { $as_echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
-if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_dnet_stub_dnet_ntoa=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_dnet_stub_dnet_ntoa=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-fi
-
- fi
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS="$ac_xsave_LIBS"
-
- # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
- # to get the SysV transport functions.
- # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
- # needs -lnsl.
- # The nsl library prevents programs from opening the X display
- # on Irix 5.2, according to T.E. Dickey.
- # The functions gethostbyname, getservbyname, and inet_addr are
- # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
- { $as_echo "$as_me:$LINENO: checking for gethostbyname" >&5
-$as_echo_n "checking for gethostbyname... " >&6; }
-if test "${ac_cv_func_gethostbyname+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define gethostbyname innocuous_gethostbyname
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char gethostbyname (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef gethostbyname
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_gethostbyname || defined __stub___gethostbyname
-choke me
-#endif
-
-int
-main ()
-{
-return gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_gethostbyname=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_gethostbyname=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
-$as_echo "$ac_cv_func_gethostbyname" >&6; }
-
- if test $ac_cv_func_gethostbyname = no; then
- { $as_echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
-$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_nsl_gethostbyname=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_nsl_gethostbyname=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
-$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-fi
-
- if test $ac_cv_lib_nsl_gethostbyname = no; then
- { $as_echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
-$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
-if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_bsd_gethostbyname=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_bsd_gethostbyname=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
-$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
-if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-fi
-
- fi
- fi
-
- # lieder@skyler.mavd.honeywell.com says without -lsocket,
- # socket/setsockopt and other routines are undefined under SCO ODT
- # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
- # on later versions), says Simon Leinen: it contains gethostby*
- # variants that don't use the name server (or something). -lsocket
- # must be given before -lnsl if both are needed. We assume that
- # if connect needs -lnsl, so does gethostbyname.
- { $as_echo "$as_me:$LINENO: checking for connect" >&5
-$as_echo_n "checking for connect... " >&6; }
-if test "${ac_cv_func_connect+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define connect to an innocuous variant, in case <limits.h> declares connect.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define connect innocuous_connect
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char connect (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef connect
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_connect || defined __stub___connect
-choke me
-#endif
-
-int
-main ()
-{
-return connect ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_connect=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_connect=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
-$as_echo "$ac_cv_func_connect" >&6; }
-
- if test $ac_cv_func_connect = no; then
- { $as_echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
-$as_echo_n "checking for connect in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_connect+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_socket_connect=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_socket_connect=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
-$as_echo "$ac_cv_lib_socket_connect" >&6; }
-if test "x$ac_cv_lib_socket_connect" = x""yes; then
- X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-fi
-
- fi
-
- # Guillermo Gomez says -lposix is necessary on A/UX.
- { $as_echo "$as_me:$LINENO: checking for remove" >&5
-$as_echo_n "checking for remove... " >&6; }
-if test "${ac_cv_func_remove+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define remove to an innocuous variant, in case <limits.h> declares remove.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define remove innocuous_remove
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char remove (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef remove
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char remove ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_remove || defined __stub___remove
-choke me
-#endif
-
-int
-main ()
-{
-return remove ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_remove=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_remove=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
-$as_echo "$ac_cv_func_remove" >&6; }
-
- if test $ac_cv_func_remove = no; then
- { $as_echo "$as_me:$LINENO: checking for remove in -lposix" >&5
-$as_echo_n "checking for remove in -lposix... " >&6; }
-if test "${ac_cv_lib_posix_remove+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char remove ();
-int
-main ()
-{
-return remove ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_posix_remove=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_posix_remove=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
-$as_echo "$ac_cv_lib_posix_remove" >&6; }
-if test "x$ac_cv_lib_posix_remove" = x""yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-fi
-
- fi
-
- # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
- { $as_echo "$as_me:$LINENO: checking for shmat" >&5
-$as_echo_n "checking for shmat... " >&6; }
-if test "${ac_cv_func_shmat+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define shmat innocuous_shmat
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shmat (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shmat
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shmat ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_shmat || defined __stub___shmat
-choke me
-#endif
-
-int
-main ()
-{
-return shmat ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_func_shmat=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_shmat=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
-$as_echo "$ac_cv_func_shmat" >&6; }
-
- if test $ac_cv_func_shmat = no; then
- { $as_echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
-$as_echo_n "checking for shmat in -lipc... " >&6; }
-if test "${ac_cv_lib_ipc_shmat+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shmat ();
-int
-main ()
-{
-return shmat ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_ipc_shmat=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_ipc_shmat=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
-$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
-if test "x$ac_cv_lib_ipc_shmat" = x""yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-fi
-
- fi
- fi
-
- # Check for libraries that X11R6 Xt/Xaw programs need.
- ac_save_LDFLAGS=$LDFLAGS
- test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
- # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
- # check for ICE first), but we must link in the order -lSM -lICE or
- # we get undefined symbols. So assume we have SM if we have ICE.
- # These have to be linked with before -lX11, unlike the other
- # libraries we check for below, so use a different variable.
- # John Interrante, Karl Berry
- { $as_echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
-$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
-if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char IceConnectionNumber ();
-int
-main ()
-{
-return IceConnectionNumber ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_lib_ICE_IceConnectionNumber=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_ICE_IceConnectionNumber=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
-if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then
- X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-fi
-
- LDFLAGS=$ac_save_LDFLAGS
-
-fi
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
-done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-
-{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
- # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
- enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
-else
- USE_MAINTAINER_MODE=no
-fi
-
- { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-$as_echo "$USE_MAINTAINER_MODE" >&6; }
- if test "x$USE_MAINTAINER_MODE" = xyes; then
- MAINT=
- else
- MAINT='#M#'
- fi
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for loader (symbol LD)" >&5
-$as_echo_n "checking for loader (symbol LD)... " >&6; }
-if test "${cf_cv_subst_LD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$LD" && LD=ld
-cf_cv_subst_LD=$LD
-fi
-
-LD=${cf_cv_subst_LD}
-{ $as_echo "$as_me:$LINENO: result: $LD" >&5
-$as_echo "$LD" >&6; }
-
-
-{ $as_echo "$as_me:$LINENO: checking for archiver (symbol AR)" >&5
-$as_echo_n "checking for archiver (symbol AR)... " >&6; }
-if test "${cf_cv_subst_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$AR" && AR=ar
-cf_cv_subst_AR=$AR
-fi
-
-AR=${cf_cv_subst_AR}
-{ $as_echo "$as_me:$LINENO: result: $AR" >&5
-$as_echo "$AR" >&6; }
-
-
-{ $as_echo "$as_me:$LINENO: checking for archiver options (symbol ARFLAGS)" >&5
-$as_echo_n "checking for archiver options (symbol ARFLAGS)... " >&6; }
-if test "${cf_cv_subst_ARFLAGS+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$ARFLAGS" && ARFLAGS=rc
-cf_cv_subst_ARFLAGS=$ARFLAGS
-fi
-
-ARFLAGS=${cf_cv_subst_ARFLAGS}
-{ $as_echo "$as_me:$LINENO: result: $ARFLAGS" >&5
-$as_echo "$ARFLAGS" >&6; }
-
-
-
-
-# Check whether --with-mktexmf-default was given.
-if test "${with_mktexmf_default+set}" = set; then
- withval=$with_mktexmf_default;
-else
- with_mktexmf_default=yes
-fi
-
-
-# Check whether --with-mktexpk-default was given.
-if test "${with_mktexpk_default+set}" = set; then
- withval=$with_mktexpk_default;
-else
- with_mktexpk_default=yes
-fi
-
-
-# Check whether --with-mktextfm-default was given.
-if test "${with_mktextfm_default+set}" = set; then
- withval=$with_mktextfm_default;
-else
- with_mktextfm_default=yes
-fi
-
-
-# Check whether --with-mkocp-default was given.
-if test "${with_mkocp_default+set}" = set; then
- withval=$with_mkocp_default;
-else
- with_mkocp_default=yes
-fi
-
-
-# Check whether --with-mkofm-default was given.
-if test "${with_mkofm_default+set}" = set; then
- withval=$with_mkofm_default;
-else
- with_mkofm_default=yes
-fi
-
-
-# Check whether --with-mktexfmt-default was given.
-if test "${with_mktexfmt_default+set}" = set; then
- withval=$with_mktexfmt_default;
-fi
-
-
-# Check whether --with-mktextex-default was given.
-if test "${with_mktextex_default+set}" = set; then
- withval=$with_mktextex_default; with_mktextex_default=yes
-else
- with_mktextex_default=no
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking where the main texmf tree is located" >&5
-$as_echo_n "checking where the main texmf tree is located... " >&6; }
-case $prefix in
- */) prefix=`echo "$prefix" | sed 's@/*$@@'`;;
-esac
-texmfmain=
-if test "x$datadir" != 'x${prefix}/share'; then
- # First case, datadir is defined...
- eval p=\"$datadir\"
- # Unconditionally set the directory, but...
- texmfmain=`echo "$p/texmf" | sed 's,//*,/,g'`
- # ... do complain if it wasn't found.
- if test -d "$texmfmain"; then
- { $as_echo "$as_me:$LINENO: result: \"$texmfmain\"" >&5
-$as_echo "\"$texmfmain\"" >&6; }
- else
- true # be silent dnl AC_MSG_RESULT([not found])
- fi
-else
- # Second case, datadir is default...
- if test "x$prefix" = "xNONE"; then
- p="$ac_default_prefix"
- else
- eval p=\"$prefix\"
- fi
- for e in share/texmf lib/texmf texmf; do
- if test -d "$p/$e"; then
- texmfmain='${prefix}'/"$e"
- break
- fi
- done
- if test -z "$texmfmain" && test "x$prefix" = "xNONE"; then
- # Still no texmfmain found, no prefix set, perhaps kpsewhich is
- # installed and can help us out.
- texmfmain=`kpsewhich --expand-path='$TEXMFMAIN'` 2>/dev/null
- fi
- texmfmain=`echo "$texmfmain" | sed 's,//*,/,g'`
- if test -n "$texmfmain"; then
- { $as_echo "$as_me:$LINENO: result: \"$texmfmain\"" >&5
-$as_echo "\"$texmfmain\"" >&6; }
- else
- eval texmfmain="$datadir/texmf"
- # (be silent) dnl AC_MSG_RESULT([not found])
- fi
-fi
-
-
-
{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
if test "${ac_cv_path_GREP+set}" = set; then
@@ -8507,16 +7481,16 @@ _ACEOF
-if test "x${GCC}" = "xyes"
-then
- CFLAGS="$CFLAGS"
- { $as_echo "$as_me:$LINENO: checking \"for gcc strength-reduce bug\"" >&5
-$as_echo_n "checking \"for gcc strength-reduce bug\"... " >&6; }
+
+T1LIB_CFLAGS=
+if test "x$GCC" = xyes; then
+ { $as_echo "$as_me:$LINENO: checking for gcc strength-reduce bug" >&5
+$as_echo_n "checking for gcc strength-reduce bug... " >&6; }
if test "${ac_cv_c_gcc_strength_bug+set}" = set; then
$as_echo_n "(cached) " >&6
else
if test "$cross_compiling" = yes; then
- ac_cv_c_gcc_strength_bug="yes"
+ ac_cv_c_gcc_strength_bug=yes
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -8525,155 +7499,18 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-int main(void) {
- static int Array[3];
- unsigned int B = 3;
- int i;
- for(i=0; i<B; i++) Array[i] = i - 3;
- exit( Array[1] != -2 );
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_c_gcc_strength_bug="no"
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_c_gcc_strength_bug="yes"
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_gcc_strength_bug" >&5
-$as_echo "$ac_cv_c_gcc_strength_bug" >&6; }
- if test "$ac_cv_c_gcc_strength_bug" = "yes"
- then
- CFLAGS="$CFLAGS -fno-strength-reduce"
- fi
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking \"whether external symbols need an underscore prefix\"" >&5
-$as_echo_n "checking \"whether external symbols need an underscore prefix\"... " >&6; }
-if test "${ac_cv_c_extern_prefix+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- saved_libs=$LIBS
-LIBS="conftest_asm.s $LIBS"
-cat > conftest_asm.s <<EOF
- .globl _ac_test
-_ac_test:
- .long 0
-EOF
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-extern int ac_test;
int
main ()
{
-if (ac_test) return 1
+static int Array[3];
+ unsigned int B = 3;
+ int i;
+ for(i=0; i<B; i++) Array[i] = i - 3;
+ exit( Array[1] != -2 );
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_c_extern_prefix="yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_c_extern_prefix="no"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$saved_libs
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_extern_prefix" >&5
-$as_echo "$ac_cv_c_extern_prefix" >&6; }
-if test "$ac_cv_c_extern_prefix" = "yes"
-then
- cat >>confdefs.h <<\_ACEOF
-#define NEED_UNDERSCORE_PREFIX 1
-_ACEOF
-
-fi
-
-{ $as_echo "$as_me:$LINENO: checking \"which ANSI integer type is 16 bit\"" >&5
-$as_echo_n "checking \"which ANSI integer type is 16 bit\"... " >&6; }
-if test "${ac_16bit_type+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then
- ac_16bit_type=
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int main(void) {
- if (sizeof(short)==2)
- return(0);
- else if (sizeof(int)==2)
- return(1);
- else
- return(2);
-}
-_ACEOF
rm -f conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
@@ -8696,14 +7533,14 @@ $as_echo "$ac_try_echo") >&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_16bit_type="short"
+ ac_cv_c_gcc_strength_bug=no
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-ac_16bit_type="int"
+ac_cv_c_gcc_strength_bug=yes
fi
rm -rf conftest.dSYM
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
@@ -8711,162 +7548,51 @@ fi
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_16bit_type" >&5
-$as_echo "$ac_16bit_type" >&6; }
-if test "$ac_16bit_type" = "short"
-then
- T1_AA_TYPE16="-DT1_AA_TYPE16=short"
-else
- T1_AA_TYPE16="-DT1_AA_TYPE16=int"
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_gcc_strength_bug" >&5
+$as_echo "$ac_cv_c_gcc_strength_bug" >&6; }
+ if test "x$ac_cv_c_gcc_strength_bug" = xyes; then
+ T1LIB_CFLAGS="-fno-strength-reduce"
+ fi
fi
-{ $as_echo "$as_me:$LINENO: checking \"which ANSI integer type is 32 bit\"" >&5
-$as_echo_n "checking \"which ANSI integer type is 32 bit\"... " >&6; }
-if test "${ac_32bit_type+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then
- ac_32bit_type=
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
+T1LIB_DEFINES="-DT1LIB_NO_X11_SUPPORT"
-int main(void) {
- if (sizeof(int)==4)
- return(0);
- else if (sizeof(long)==4)
- return(1);
- else
- return(2);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_32bit_type="int"
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_32bit_type="long"
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_32bit_type" >&5
-$as_echo "$ac_32bit_type" >&6; }
-if test "$ac_32bit_type" = "int"
-then
- T1_AA_TYPE32="-DT1_AA_TYPE32=int"
+if test "x$ac_cv_sizeof_short" = x2; then
+ T1_INT16=short
+elif test "x$ac_cv_sizeof_int" = x2; then
+ T1_INT16=int
else
- T1_AA_TYPE32="-DT1_AA_TYPE32=long"
+ { { $as_echo "$as_me:$LINENO: error: Sorry, no usable 16 bit integer type" >&5
+$as_echo "$as_me: error: Sorry, no usable 16 bit integer type" >&2;}
+ { (exit 1); exit 1; }; }
fi
+T1LIB_DEFINES="$T1LIB_DEFINES -DT1_AA_TYPE16=$T1_INT16"
-{ $as_echo "$as_me:$LINENO: checking \"which ANSI integer type is 64 bit\"" >&5
-$as_echo_n "checking \"which ANSI integer type is 64 bit\"... " >&6; }
-if test "${ac_64bit_type+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int main(void) {
- if (sizeof(long)==8)
- return(0);
- else
- return(1);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_64bit_type="long"
+if test "x$ac_cv_sizeof_int" = x4; then
+ T1_INT32=int
+elif test "x$ac_cv_sizeof_long" = x4; then
+ T1_INT32=long
else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_64bit_type="<none>"
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { { $as_echo "$as_me:$LINENO: error: Sorry, no usable 32 bit integer type" >&5
+$as_echo "$as_me: error: Sorry, no usable 32 bit integer type" >&2;}
+ { (exit 1); exit 1; }; }
fi
+T1LIB_DEFINES="$T1LIB_DEFINES -DT1_AA_TYPE32=$T1_INT32"
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_64bit_type" >&5
-$as_echo "$ac_64bit_type" >&6; }
-if test "$ac_64bit_type" = "long"
-then
- T1_AA_TYPE64="-DT1_AA_TYPE64=long"
+if test "x$ac_cv_sizeof_long" = x8; then
+ T1_INT64=long
+elif test "x$ac_cv_sizeof_long_long" = x8; then
+ T1_INT64="'long long'"
else
- T1_AA_TYPE64=
+ T1_INT64=
fi
+test -z "x$T1_INT64" || \
+ T1LIB_DEFINES="$T1LIB_DEFINES -DT1_AA_TYPE64=$T1_INT64"
-
+T1LIB_DATA_DIR="${datadir}/t1lib"
@@ -9151,8 +7877,25 @@ _ACEOF
fi
-ac_config_files="$ac_config_files Makefile.aux:Makefile.in"
-ac_config_files="$ac_config_files Makefile:Makefile.aux"
+
+
+
+T1LIB_TREE=t1lib-5.1.2
+
+
+if test -f $srcdir/$T1LIB_TREE/lib/t1lib/t1lib.h; then
+ { { $as_echo "$as_me:$LINENO: error: Sorry, you must remove the file $T1LIB_TREE/lib/t1lib/t1lib.h" >&5
+$as_echo "$as_me: error: Sorry, you must remove the file $T1LIB_TREE/lib/t1lib/t1lib.h" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_config_files="$ac_config_files t1lib.h:$T1LIB_TREE/lib/t1lib/t1lib.h.in"
+
+ac_config_links="$ac_config_links lib/t1lib/t1lib.h:t1lib.h"
+
+
+ac_config_files="$ac_config_files Makefile"
+
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -9251,6 +7994,34 @@ LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${build_TRUE}" && test -z "${build_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"build\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"build\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
: ${CONFIG_STATUS=./config.status}
ac_write_fail=0
@@ -9573,7 +8344,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by $as_me, which was
+This file was extended by T1lib for TeX Live $as_me 5.1.2, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9600,6 +8371,8 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
config_files="$ac_config_files"
config_headers="$ac_config_headers"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
_ACEOF
@@ -9627,12 +8400,18 @@ $config_files
Configuration headers:
$config_headers
+Configuration links:
+$config_links
+
+Configuration commands:
+$config_commands
+
Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-config.status
+T1lib for TeX Live config.status 5.1.2
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
@@ -9643,6 +8422,8 @@ gives unlimited permission to copy, distribute and modify it."
ac_pwd='$ac_pwd'
srcdir='$srcdir'
INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
test -n "\$AWK" || AWK=awk
_ACEOF
@@ -9740,6 +8521,11 @@ _ASBOX
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -9748,9 +8534,11 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
for ac_config_target in $ac_config_targets
do
case $ac_config_target in
- "sysconf.h") CONFIG_HEADERS="$CONFIG_HEADERS sysconf.h:sysconf.h.in" ;;
- "Makefile.aux") CONFIG_FILES="$CONFIG_FILES Makefile.aux:Makefile.in" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.aux" ;;
+ "lib/t1lib/sysconf.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/t1lib/sysconf.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "t1lib.h") CONFIG_FILES="$CONFIG_FILES t1lib.h:$T1LIB_TREE/lib/t1lib/t1lib.h.in" ;;
+ "lib/t1lib/t1lib.h") CONFIG_LINKS="$CONFIG_LINKS lib/t1lib/t1lib.h:t1lib.h" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
*) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
@@ -9766,6 +8554,8 @@ done
if $ac_need_defaults; then
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -10062,7 +8852,7 @@ $as_echo "$as_me: error: could not setup config headers machinery" >&2;}
fi # test -n "$CONFIG_HEADERS"
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS"
shift
for ac_tag
do
@@ -10246,6 +9036,11 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
*) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -10302,6 +9097,7 @@ s&@builddir@&$ac_builddir&;t t
s&@abs_builddir@&$ac_abs_builddir&;t t
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
$ac_datarootdir_hack
"
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
@@ -10355,82 +9151,216 @@ $as_echo "$as_me: error: could not create $ac_file" >&2;}
$as_echo "$as_me: error: could not create -" >&2;}
{ (exit 1); exit 1; }; }
fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
;;
+ :L)
+ #
+ # CONFIG_LINK
+ #
+
+ if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+ :
+ else
+ # Prefer the file from the source tree if names are identical.
+ if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+ ac_source=$srcdir/$ac_source
+ fi
+ { $as_echo "$as_me:$LINENO: linking $ac_source to $ac_file" >&5
+$as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
+ if test ! -r "$ac_source"; then
+ { { $as_echo "$as_me:$LINENO: error: $ac_source: file not found" >&5
+$as_echo "$as_me: error: $ac_source: file not found" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ rm -f "$ac_file"
+
+ # Try a relative symlink, then a hard link, then a copy.
+ case $srcdir in
+ [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+ *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+ esac
+ ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+ ln "$ac_source" "$ac_file" 2>/dev/null ||
+ cp -p "$ac_source" "$ac_file" ||
+ { { $as_echo "$as_me:$LINENO: error: cannot link or copy $ac_source to $ac_file" >&5
+$as_echo "$as_me: error: cannot link or copy $ac_source to $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ ;;
+ :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
esac
case $ac_file$ac_mode in
- "Makefile.aux":F) # Discard the file just generated and first resolve kpse_include's
- kpse_input=`case Makefile.in in
- [\\/$]*) # Absolute
- test -f "Makefile.in" || { { $as_echo "$as_me:$LINENO: error: cannot find input file: Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- echo "Makefile.in";;
- *) # Relative
- if test -f "Makefile.in"; then
- # Build tree
- echo "Makefile.in"
- elif test -f "$srcdir/Makefile.in"; then
- # Source tree
- echo "$srcdir/Makefile.in"
- else
- # /dev/null tree
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac` || { (exit 1); exit 1; }
-# Replace lines of the form "kpse_include foo" with the contents of foo:
-# first, from the kpse_include lines construct a list of file names.
-# From that list, we construct a second list of those files that exist.
-# Then we construct a list of sed commands for including those files,
-# and a sed command that removes the kpse_include lines. We don't attempt
-# to read non-existent files because some (buggy) versions of sed choke
-# on this. Have to use sed because old (Ultrix, SunOs) awk does not support
-# getline or system. (Anyway, configure scripts aren't supposed to use awk.)
-# Can't use only one -e and commands {dr foo} because foo has to be last.
-# Be careful, because the filename may contain /.
-# Be careful with whitespace; we need to use echo.
-kpse_file_substs=`sed -n '/^kpse_include/s%[ ]*\(.*\)%\1%p' "$kpse_input"`
-if test x"$kpse_file_substs" = x; then
- { $as_echo "$as_me:$LINENO: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`Makefile.in'
- without any \`kpse_include' directives" >&5
-$as_echo "$as_me: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`Makefile.in'
- without any \`kpse_include' directives" >&2;}
-fi
-# Create the sed command line ...
-# Input lines containing "@configure_input@" are output twice,
-# first with our modifications and then unmodified.
-kpse_substs="sed -e '/@configure_input@/ { h; \
- s,@configure_input@,Makefile.aux. Generated from `echo Makefile.in |
- sed 's,.*/,,'` by configure.,; G; }'"
-for kpse_inc in $kpse_file_substs; do
- kpse_read=`case $kpse_inc in
- [\\/$]*) # Absolute
- if test -f "$kpse_inc"; then
- echo "$kpse_inc"
- fi;;
- *) # Relative
- if test -f "$kpse_inc"; then
- # Build tree
- echo "$kpse_inc"
- elif test -f "$srcdir/$kpse_inc"; then
- # Source tree
- echo "$srcdir/$kpse_inc"
- fi;;
- esac`
- if test -n "$kpse_read"; then
- kpse_mung=`echo $kpse_inc | sed 's,/,%,g'`
- kpse_substs="$kpse_substs -e '/^kpse_include $kpse_mung$/r $kpse_read'"
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || # Autoconf 2.62 quotes --file arguments for eval, but not when files
+# are listed without --file. Let's play safe and only enable the eval
+# if we detect the quoting.
+case $CONFIG_FILES in
+*\'*) eval set x "$CONFIG_FILES" ;;
+*) set x $CONFIG_FILES ;;
+esac
+shift
+for mf
+do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir=$dirpart/$fdir
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
done
-# ... and fix the whitespace and escaped slashes.
-kpse_substs=`echo "$kpse_substs" | sed -e 's,%,\\\/,g' \
- -e 's/kpse_include /kpse_include[ ]*/g'`
-(eval $kpse_substs -e '"/^kpse_include/d"' "$kpse_input") > Makefile.aux
;;
esac
diff --git a/Build/source/libs/t1lib/configure.ac b/Build/source/libs/t1lib/configure.ac
new file mode 100644
index 00000000000..670c4800cdc
--- /dev/null
+++ b/Build/source/libs/t1lib/configure.ac
@@ -0,0 +1,136 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl
+dnl Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
+dnl
+dnl This file is free software; the copyright holder
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+m4_define([t1lib_major], [5])[]dnl
+m4_define([t1lib_minor], [1])[]dnl
+m4_define([t1lib_micro], [2])[]dnl using unmodified t1lib-5.1.2 source tree
+m4_define([t1lib_version], t1lib_major.t1lib_minor.t1lib_micro)[]dnl
+AC_INIT([T1lib for TeX Live], t1lib_version, [tex-k@tug.org])
+AC_PREREQ([2.63])
+AC_CONFIG_SRCDIR([t1lib-]t1lib_version[/lib/t1lib/t1base.c])
+AC_CONFIG_AUX_DIR([../../build-aux])
+AC_CONFIG_MACRO_DIR([../../m4])
+
+AM_INIT_AUTOMAKE([foreign dist-bzip2 no-define])
+AM_MAINTAINER_MODE
+
+T1LIB_VERSION=t1lib_major()
+T1LIB_REVISION=t1lib_minor()
+T1LIB_PATCHLEVEL=t1lib_micro()
+T1LIB_VERSIONSTRING='"t1lib_major.t1lib_minor.t1lib_micro"'
+AC_SUBST([T1LIB_VERSION])
+AC_SUBST([T1LIB_REVISION])
+AC_SUBST([T1LIB_PATCHLEVEL])
+AC_SUBST([T1LIB_VERSIONSTRING])
+
+dnl AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_HEADERS([lib/t1lib/sysconf.h])
+
+AM_CONDITIONAL([build], [test "x$enable_build" != xno])
+
+dnl **** Check for some programs and libraries ****
+
+AC_PROG_CC
+AC_PROG_RANLIB
+
+dnl **** Check for some compiler/system characteristics
+
+AC_C_CHAR_UNSIGNED
+AC_CHECK_SIZEOF([char])
+AC_CHECK_SIZEOF([short])
+AC_CHECK_SIZEOF([int])
+AC_CHECK_SIZEOF([long])
+AC_CHECK_SIZEOF([long long])
+AC_CHECK_SIZEOF([float])
+AC_CHECK_SIZEOF([double])
+AC_CHECK_SIZEOF([long double])
+AC_CHECK_SIZEOF([void *])
+
+dnl **** Check for gcc strength-reduce bug ****
+
+T1LIB_CFLAGS=
+if test "x$GCC" = xyes; then
+ AC_CACHE_CHECK([for gcc strength-reduce bug],
+ [ac_cv_c_gcc_strength_bug],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[]],
+ [[static int Array[3];
+ unsigned int B = 3;
+ int i;
+ for(i=0; i<B; i++) Array[i] = i - 3;
+ exit( Array[1] != -2 );]])],
+ [ac_cv_c_gcc_strength_bug=no],
+ [ac_cv_c_gcc_strength_bug=yes],
+ [ac_cv_c_gcc_strength_bug=yes])])
+ if test "x$ac_cv_c_gcc_strength_bug" = xyes; then
+ T1LIB_CFLAGS="-fno-strength-reduce"
+ fi
+fi
+
+dnl **** We build t1lib without X support
+
+T1LIB_DEFINES="-DT1LIB_NO_X11_SUPPORT"
+
+dnl **** Check which ANSI integer type is 16 bit
+if test "x$ac_cv_sizeof_short" = x2; then
+ T1_INT16=short
+elif test "x$ac_cv_sizeof_int" = x2; then
+ T1_INT16=int
+else
+ AC_MSG_ERROR([Sorry, no usable 16 bit integer type])
+fi
+AC_SUBST([T1_INT16])
+T1LIB_DEFINES="$T1LIB_DEFINES -DT1_AA_TYPE16=$T1_INT16"
+
+dnl **** Check which ANSI integer type is 32 bit
+if test "x$ac_cv_sizeof_int" = x4; then
+ T1_INT32=int
+elif test "x$ac_cv_sizeof_long" = x4; then
+ T1_INT32=long
+else
+ AC_MSG_ERROR([Sorry, no usable 32 bit integer type])
+fi
+AC_SUBST([T1_INT32])
+T1LIB_DEFINES="$T1LIB_DEFINES -DT1_AA_TYPE32=$T1_INT32"
+
+dnl **** Check which ANSI integer type is 64 bit
+if test "x$ac_cv_sizeof_long" = x8; then
+ T1_INT64=long
+elif test "x$ac_cv_sizeof_long_long" = x8; then
+ T1_INT64="'long long'"
+else
+ T1_INT64=
+fi
+test -z "x$T1_INT64" || \
+ T1LIB_DEFINES="$T1LIB_DEFINES -DT1_AA_TYPE64=$T1_INT64"
+
+T1LIB_DATA_DIR="${datadir}/t1lib"
+AC_SUBST([T1LIB_DATA_DIR])
+
+dnl **** Check for functions and header files ****
+
+AC_HEADER_STAT()
+AC_C_CONST()
+AC_TYPE_SIZE_T()
+
+AC_SUBST([T1LIB_DEFINES])
+AC_SUBST([T1LIB_CFLAGS])
+
+T1LIB_TREE=t1lib-[]t1lib_version
+AC_SUBST([T1LIB_TREE])
+
+if test -f $srcdir/$T1LIB_TREE/lib/t1lib/t1lib.h; then
+ AC_MSG_ERROR([Sorry, you must remove the file $T1LIB_TREE/lib/t1lib/t1lib.h])
+fi
+
+dnl Use $T1LIB_TREE to exclude $T1LIB_TREE/png.h from DIST_COMMON
+AC_CONFIG_FILES([t1lib.h:$T1LIB_TREE/lib/t1lib/t1lib.h.in])
+AC_CONFIG_LINKS([lib/t1lib/t1lib.h:t1lib.h])
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
diff --git a/Build/source/libs/t1lib/l047016t.pfa b/Build/source/libs/t1lib/l047016t.pfa
new file mode 100644
index 00000000000..48094088e57
--- /dev/null
+++ b/Build/source/libs/t1lib/l047016t.pfa
@@ -0,0 +1,1356 @@
+%!PS-AdobeFont-1.0: LuxiMono-Bold 1.1000
+%%CreationDate: Mon Nov 12 2001
+% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.
+% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.
+12 dict begin
+/FontInfo 10 dict dup begin
+/version (1.1000) readonly def
+/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def
+/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def
+/FullName (Luxi Mono Bold) readonly def
+/FamilyName (Luxi Mono) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0.0 def
+/isFixedPitch true def
+/UnderlinePosition -88 def
+/UnderlineThickness 83 def
+end readonly def
+/FontName /LuxiMono-Bold def
+/PaintType 0 def
+/WMode 0 def
+/FontBBox {0 -211 714 1012} readonly def
+/FontType 1 def
+/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 198 /AE put
+dup 140 /OE put
+dup 216 /Oslash put
+dup 196 /Adieresis put
+dup 193 /Aacute put
+dup 192 /Agrave put
+dup 194 /Acircumflex put
+dup 195 /Atilde put
+dup 197 /Aring put
+dup 199 /Ccedilla put
+dup 208 /Eth put
+dup 203 /Edieresis put
+dup 201 /Eacute put
+dup 200 /Egrave put
+dup 202 /Ecircumflex put
+dup 207 /Idieresis put
+dup 205 /Iacute put
+dup 204 /Igrave put
+dup 206 /Icircumflex put
+dup 209 /Ntilde put
+dup 214 /Odieresis put
+dup 211 /Oacute put
+dup 210 /Ograve put
+dup 212 /Ocircumflex put
+dup 213 /Otilde put
+dup 138 /Scaron put
+dup 220 /Udieresis put
+dup 218 /Uacute put
+dup 217 /Ugrave put
+dup 219 /Ucircumflex put
+dup 221 /Yacute put
+dup 222 /Thorn put
+dup 159 /Ydieresis put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 230 /ae put
+dup 156 /oe put
+dup 248 /oslash put
+dup 223 /germandbls put
+dup 228 /adieresis put
+dup 225 /aacute put
+dup 224 /agrave put
+dup 226 /acircumflex put
+dup 227 /atilde put
+dup 229 /aring put
+dup 231 /ccedilla put
+dup 235 /edieresis put
+dup 233 /eacute put
+dup 232 /egrave put
+dup 234 /ecircumflex put
+dup 239 /idieresis put
+dup 237 /iacute put
+dup 236 /igrave put
+dup 238 /icircumflex put
+dup 241 /ntilde put
+dup 246 /odieresis put
+dup 243 /oacute put
+dup 242 /ograve put
+dup 244 /ocircumflex put
+dup 245 /otilde put
+dup 154 /scaron put
+dup 252 /udieresis put
+dup 250 /uacute put
+dup 249 /ugrave put
+dup 251 /ucircumflex put
+dup 253 /yacute put
+dup 240 /eth put
+dup 254 /thorn put
+dup 255 /ydieresis put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 48 /zero put
+dup 163 /sterling put
+dup 36 /dollar put
+dup 162 /cent put
+dup 131 /florin put
+dup 128 /Euro put
+dup 165 /yen put
+dup 185 /onesuperior put
+dup 178 /twosuperior put
+dup 179 /threesuperior put
+dup 46 /period put
+dup 58 /colon put
+dup 133 /ellipsis put
+dup 44 /comma put
+dup 59 /semicolon put
+dup 145 /quoteleft put
+dup 148 /quotedblright put
+dup 147 /quotedblleft put
+dup 132 /quotedblbase put
+dup 33 /exclam put
+dup 161 /exclamdown put
+dup 63 /question put
+dup 191 /questiondown put
+dup 187 /guillemotright put
+dup 171 /guillemotleft put
+dup 155 /guilsinglright put
+dup 139 /guilsinglleft put
+dup 47 /slash put
+dup 45 /hyphen put
+dup 173 /sfthyphen put
+dup 150 /endash put
+dup 151 /emdash put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 38 /ampersand put
+dup 167 /section put
+dup 134 /dagger put
+dup 135 /daggerdbl put
+dup 42 /asterisk put
+dup 39 /quotesingle put
+dup 34 /quotedbl put
+dup 64 /at put
+dup 35 /numbersign put
+dup 176 /degree put
+dup 43 /plus put
+dup 215 /multiply put
+dup 247 /divide put
+dup 61 /equal put
+dup 153 /trademark put
+dup 182 /paragraph put
+dup 164 /currency put
+dup 130 /quotesinglbase put
+dup 146 /quoteright put
+dup 123 /braceleft put
+dup 125 /braceright put
+dup 170 /ordfeminine put
+dup 186 /ordmasculine put
+dup 177 /plusminus put
+dup 189 /onehalf put
+dup 188 /onequarter put
+dup 190 /threequarters put
+dup 37 /percent put
+dup 137 /perthousand put
+dup 92 /backslash put
+dup 168 /dieresis put
+dup 180 /acute put
+dup 96 /grave put
+dup 136 /circumflex put
+dup 152 /tilde put
+dup 184 /cedilla put
+dup 169 /copyright put
+dup 174 /registered put
+dup 32 /space put
+dup 160 /nbspace put
+dup 149 /bullet put
+dup 60 /less put
+dup 62 /greater put
+dup 172 /logicalnot put
+dup 94 /asciicircum put
+dup 124 /bar put
+dup 166 /brokenbar put
+dup 95 /underscore put
+dup 126 /asciitilde put
+dup 181 /mu put
+readonly def
+/UniqueID 5078984 def
+currentdict end
+currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B
+F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED
+2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5
+592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E
+44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF
+9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83C82A2DC38F66F08FF34
+E7B34FBD496A97F0AE69763627499CD43525BDD2FA2EA9DDE51C821C26AC69EA
+AF027BC54141332FA165BFDE024DBE6CD20A8E4EF56F52F260AEC28695FE9141
+7E7F100CCF64993650A81C0856688B1D101418D3B0926F70BBDCCAF43FF4B16A
+B8328A5C459C7D6DD6FEEA1AD5049C4EF32D91C30962146E922D498E4D38D172
+CCFFA8F084C6BD440ED2C77C1B574CF8CE25AC39D2B18C91E596994081B36688
+EF1C949FBA04376ECBE32C3E29ACF83A8C36569C315CACB3DAAFC2FC8FF68839
+D9BF2A301E3E8F5B27EB82D8DF5D70444998F05B99D26AD632FC21A81D887E9C
+80BDDB95A1C0FB1F43386515E0F2903E3623B19F363F35885143893761E54BD7
+C9EDB5940386C62FA7A8919B57E4A4F0D9F3B4A4EA82C071BAB90B57C7A0F553
+BEC3A57EEB877476FACBBB61DB74A76D95DCE4D5C46F9686AA5176D6B65F0FFA
+37E1850A881EF057A62E3092D923107C691D32F3D619B05DB75B337EB54D5505
+2B7669A69A162DE45E9F900FB8BCC2BFB7AC5CCC64DF94DA97386D4E4AECAA28
+A9CFF3C9CE3031CC890E563F7A110D4690CDC5BBD49F7ED21C6E635952FE3ACB
+02373DD80C2C653E01525504AC37C849D6C5F25DF0C5C762C45A83233517EF9B
+D7F67A77881F6B46BE10E458FBDD73D225A6047095AB3B7AFE9FE2113751B732
+950B7865DE7DE98DDEC75D3D0311E902C2D7FD4A7F08F481ACB695078B930EC3
+6F3669F4E50345CE0A4CF1C739BD8A92BA29CF5FF0C3A85B687C0BC0BBBDB8D5
+DB96AF1962948038D1EC4ADD39D3DF966ABB57CA3017A28EB9B2148D1AB72F08
+899F5686A2013D69F6D3F5ACFB0503DCDF2D93CC7722D3F7D7486466F32741C0
+17F3D8F2D64063A9CBEBB462D4CF8569EFE4DEBE6DF3CD2F3C2AC955D8A20B1E
+A0199D05C93CE0F92ED01330A7C9E65E7ACE079CBF7616F24ED2AF540FA4A1FD
+5CCC7A1057ECFB91B02A84499F9209CE5989021F4D27B2B20D4793F6C81591CF
+ECBCC22005F89BCD1A089C36E659BF3BB92558ACE98DBDF10F0F6C7514356F54
+5A8BD7EA0E326494BDE14D91C6C74224FCBB42FC22FF8F819AC8CEFF7F28A56E
+A86FA3DADB388D04A015B0E703553CA2C2E5B688DD49DA92FD89107B744BDE7F
+85986FC9C688B97C67C0C4C555EC943D5C6CBB8BDA89ECEBA41037A92BDC075C
+3C2CC573B084B19EC7FF10FBE814B0226E216452BAF96DC3503218F49ED279D3
+CDC0369901B7764918E8071258114002152AD47B0ACA19066B5DDFC7AC37A6D9
+E49FC3A5C16F51A5B86663E15139A063C5D408C562951934700371469A49A940
+FA7074CAB31DF454BD990124F5E70B4B6D62DAFF949FD73DC758598B34376867
+3F7BCCB83086D6AED4460D71BFB2395A94A27CF34DACF70BEB4906BC6DC19203
+5512F6948158915E228603A5D4B906997D51EEA9BAD01BE45C36BC39D9C70778
+D6F8619B3814F7A3E9E0524C8DD61EC63E8B4E15C42FBBBDF8257442E5D2CEC0
+890F6B2476340387E8A4E21A09805F82A17392D2AB3CF3429DB5FFEFB093165C
+63525A9BE659AA22C7FA5DCB894DCA8D1560668636FAF723B4F618936EE634D5
+EF823BEEC25B274EB5E8912BF186A537D3EDDE38F09801E74D5885919850F48E
+A7A8AABBF6625CF2B0A9843E5D9A499C1047C490EDF9774F02A5CFE926BDBAE4
+18843FD4575E8634B27E536FAE9E09084D3F73FB29B9E4AC002E709986A90995
+B4EE10012F74A0BCFF2A6C0A69D945C19DF4F7070D60E3EF03508AF8793BD70D
+5D4BFC8BF5A29B4339C799EA8AA64ACA925A37EEE489C7FC8A31F5131F386A23
+C63F7D3C6BB60E204B169AA01EA12B590B9F0FAAD50D030381CD0C6177D28538
+377F92029F2A448F7586C7B14BA5BA08543D8216E6875AD18E974B39A53B5D3F
+157CACE3442B1948D2C44DCD88D1604D3AAF4487B4919349B7F0E01302261204
+50380294937386246EC4444C08955919A30118566A9B9D409F58255604A90782
+0583591C68296746D4DA1BFD0184029B73EC4C955C7F0BDCA08D8B85FBFA4CBA
+336BA29DF59226DB39C3B02AC5A906857EFB7A227A09FFE63BA35DE73434BDAB
+C11BE30C59E650592C518C0F533FA0CABAF3E2CAD23E69776879CC7A9225A086
+281FDF2C1F72FCA1723A5C2492BA061FB6D73F6240AE5708521AAB52F736863B
+B05E53ECB5C64A26B277F106FF2E0C9699719335BD32842806F0F866CE4818FA
+F61D141532738ADC2C8BCC1145BACFDF3BE1CFD92914C3945126847769D6DD0D
+6F44FC9D966F224AA72C22D0EF953B2A43C93E581DD907B611F3005D62C25162
+FD2149DEF7894A112449FF5F43D8F30CD7DA81D408E85F89DA78C4998BB8A24A
+38B9F346E5FBC6D09EDF332B8B7F8EAC363D0D01708C24655412AEB148E28D99
+D9F41076F0E7BBF10AB96BBD72FD05BA982F673D3D79270107C040707C6316E6
+11E4FB04A320621B6C3E10575FF97A28B60B30B840A877A5BEB0EFCCE0EF03BC
+F247ADE0F509EAFD6CD7F70B523E6E145EEF8AC9C17614BE65934DDC17545C4B
+50770418C185606C0A01B2622CADD9CBBB97E14A92D5230FB7ABE7D0D8CE9047
+F64225C6D488695FB9801EF4C76E20340721F7734AC114B3E6041D4C76C11F19
+3326FB3DE6CBF4B4C1F18B3388D6DDC000F04E195827F68CDCA2E0C411788B05
+4AAD40E3E09EDECA7817AE2B29316063C8579A90CF67D93AC158E940B14FCDBA
+3B82EBE2D4BBC8A8B22AB531DDDCEF6E4104314DDC2DF028E2F09436CFCFD32D
+0238D1C9C0404FD97DC627773CD8022632E4914D40283AAA5FFDF86914140D42
+0C4350BA37D3CD49E1D79081462E3701DC0A9E9AC67D712BF7CEC27C1200138C
+9729AAADB724BB9FFD5B831ABABEE5BE8C270A1ADF85A246ABB9612F181730A2
+30B9886D897C2EAD9AF7E6A47DA049373049E5E4C29F5B7DCF2258A1AF341CB8
+C5F464EA85663A9B8132775E4B8620420750161C419F88594908C64A2BE265B9
+84A950C8B63C065B1FD4F78121F582EC875F396E0EC8F6851AB87C36C56EBE7E
+036ABC0D89D9FE8E626646AC65DC5445EF3FB60CC5C50A5118F9F248FA15B3B8
+C8A88E168BCC5488D10CED157A8EEF8EEEADDA64372B76B944685B686DE8AFC0
+F4A376200790E0D0DB2172C80E6BF90052DE847633912F72840A5C745DA4E774
+014841DBB53EDB729DA7AAC1D3FA428DBFF252F91BDCFE3AC31C2CAEEAE29045
+DE7F0795D6D924180292E18B3955FA93DCC555683FCB5FDECA34EF0D0885ABA3
+C7BF9CC897C6E5737AF9448C952269D18AAA18FD1D3C2F5DB49D652F43E6CB21
+D22F7ACA596DE470A1264FA065C0B2CE3C58DDD168BD28D6A2FE2A41045F3219
+AE87AF49E363AEA5164C7107CDFEB8BACAF39C795D98F9855E35BEA4482F78B3
+8A62DEA5A26336671AE7D96AD413A2A5E98111D319AFF427420906C75D4E16E7
+AB85A37972380840CE59C78273A510C819EF376534266081CDCF3313C83D7089
+71BF31000698E853973A6D275A8F215677CE9EEC26B5FC21E481AB9C189C37FA
+2F7E2A63B4286E1AAB933C0CCE1AEA78E1F7B9F7A16DDCFCF350514F1E671D3F
+DDBB3CB3324AA85E9373060D2FEC1F218A06E4A1E6F5DA7E3B72511C5F0F348D
+A221902C405AD22CF96C4A14F09BE984C710AE0472E90ED804C33BC2797D5F30
+F31B250C791B0CDCFBA202DBEDEF03C144D31D7431B7667F88C1AFD9E218A08C
+46811F871812FA17AB468062FB0E478B8AB84B9C06208C8ACAC16E34B42E8B9F
+747F8BBDAAE6736A5A4BC9C494EE15356CF6F02FCD2F52D4A3F9CD5B472AA89D
+BF371F08DDF4FAD324B46BEA792CFD4E148E33CD0CD5C74A76CD5CB4EC885420
+AB9DF5D757C33BE1CE9AD32E6B0179C4C511CC984A5365E50E12CEBB8CC71CAB
+572054A7DAEB7EFF1025B60BBF1ACA5C3A701396DA00C6F77E7B86F1BD246393
+1030F1B6A8D13F6A0D3FC3825DDBD7CE36CE55612D3516EC214AADC5ADAC59AC
+054743534AC8068A67C09695C7D04341D22F5AAAC4086CF370583B93F417579D
+7392D7B57928230688C7C5B1931E26E843B8FC5D2D5D09A3005C1803BEACFD54
+F5A8BF2A6CF7852616F93E05913D188AC4E2F9AC3F2C1C455B0F0D1E32D9752E
+331E7ED9F777FDEEE5ECA4FA4A27354C1D5E7E388008D7C45456CB361F3E4D0C
+AB08D54AEC00286398730911A5F145D7DDA76D696F1DC17C0965A4B0899E8B4A
+7AD364ADCA31D1A0714ACCEBD2BB7FD77A4025EB94D4436925DC5E460EEB013B
+359983AEF8637A929A04D9D5A963AE764FF82C42C62FB220530FE59018A89D0F
+CC8C3E2E4B918FB14279F5D0ABEE4756C3E79C1CA70359FDA92487D42B7A2943
+3ADF2FDED43EEEF0108E7EC8778E14C4C0BD06B6687C08C1AEC415477176C892
+496E84FD5E9A7E4DB11287A9605F5F0CE1B71D3C198900C67B9B333D10F5F331
+CFC638F80E03CD59C5DC5862BF8A18B6ABA8435936A3E2406AE848EA94716472
+A726D75C94BBA07926745B20EFAC14EAC276B477B94FACFD9D664365B1CAAC7A
+DB2BA6B75F4F83339CD645428F0A5F498677108DC473CA984370A7D6A9E295AD
+AA68CE2D5B435915EB0F6B72A9F4D49E356050223F524A270A9DEDD0B8B66822
+C8E94A311C4A055EA18BF0292CD25EAE689C8F932226643B5085E72F5FE0A232
+6064C6850F189B2C46F9EB94966600A8B7205C654F33737ECAF9B4F3FB3CA0FA
+44A85FE7A9AAB211C6B4062052C4C01685F58F0D2786585CE0FFDD1B348F2FDC
+A19E31CEC44C59BFA74997E570EE0FD56629135F3BD7CB2B6466E2F031DA6E8F
+11813E7118A232D38AA3EDC86ACA1328FB9F870174F4D1BF511531FFF0E23278
+9D29E817441F255261318894BB2CEDD0E6F8B3339D888A2C401D7009E7879D5A
+7C6DF9C8D97C5221DC65181A96992EDF4C983DA8C0669F3D0BAA4DCA2FB17848
+F34F69182E6A129A983A1FC394EBFC31551185A750114B383E01E61CED8637FC
+B4765F1791D121B8B1D08035B6D8ECB2856FDB43B25101444D160E02588E80A6
+10D55BA3B76B5B9C6B97B4C07A0AEB124459603BFCF1C50DD19776543EE9891D
+9FAA53093A933077B5D3C0280679818348E77835C679C603F46714478BAFD156
+803B736D4CCB3F1C1FC2192B2EC1CF78C36FED5E0496B5A8F0CB1B72407BE183
+0BAB9171EF79069EC940B9B13F69F952EE781A811EA4A0A7FC8A5E5BE4FC60DF
+45874393CD027EB52EA2DC1EC163152F3B74B7E7D62E042093CF3119F4F50179
+302EEBB352C362A6C2DAE8A251156664B492FB60A1DBB7801DB26476BCE9E78C
+444040DBB110FDA2783A62FBAD6A95AB513B292920960E7F630CF7F5C2A5785D
+5BE65897155D32CC657E231FFEE30CCEBFC00C375E105A5B613FD2C27A6FF7D3
+92C00B7E0BDCC70A6E80F5BA164F116A2732526B669E50F5F6BA575E37FDC9C3
+38A49BA0522EA697F517D74D533BA28F928565985AF5E32B84BAF188F2B9B952
+0C291440B04DBA34354177783CDD82AFB65DE0E179E638FE1BD2EB3EB20D5344
+C4B6E5D639DFAA78A77433D36FED5462B6B090E3434034B8BF00BF7EF35407EA
+9F122694EBC6B6B4214EB779C94E6BBB04998AA57249B8D84353E0BDC605CA98
+492862A8239E8875A9BB5ADFEB966F0D7FCC355E3F0428E227D8B41945257F63
+9F6A6A69B7A902DDBE08D9FEC8233E11BCF15C1458C19F9E487314C26517D162
+9AFD021C75353FE5A161EF3EC7E06B616AF1447602483A3486788298AF766714
+939A160EAABF06B61D86CB02F6A958690D38C86BE7998B444B7A2B74C6BF72E1
+B9A59AB78D20C121D1AACD208531FBB2BE37BE529FBCE24D229CC242A1FA721E
+AC762979A4B92565B6BC94EFFA2CD84985F8FFCFA1BB44503BF1265D52370C53
+4B445AEC55B12E40F05DF383B356CED44B5345007B9F3454950F12C8E87E41FB
+72715838A27013F689D6B55925C49D92E0E14CBE59D9585BACC8CE5D62F86F27
+B51E89884EF529F27CF4C61A28BAAE981524CE3714368D664AC4773FF8B71728
+88C3E8878032EE246359A97DA80F1DED34DF09EE5F249B364BBA41BF81D16AAA
+9ACFE092E3E491ABE1C40A53B1A50B88788AE14870079175C14AEAF7EE777437
+8F4A7A03178AAC032EB320DBD8E0C19C0071B262C76913B787E1B3FBEF926A49
+CF96ADF8E3BBCC3F679294B5DBB5005DA2294848229A557865E0116AADB4E6AE
+94AAC10394B4FA2872BBEBDDC869163E50CE3BB2925B554235B6BDE9A29CEDB3
+07DFCC3D8AD0CFEBA9C7AE10314771DA1E6C3B927FB950ADE62D1FB8AE7A3CC9
+C9E0F4484D61A6C9F353B9AA91A186DB859385059544FC85C15E1A3357BEC89D
+92AF74938D1B56B7120B934297A71F1D92E93658C69E7FD4B338F59FA6F6C337
+427532AB1A4EADAA5FF1A8C7A84F444F81D60557808ECF3DB67C052EAF4A9FF1
+0538A114857BBE83BE784E9865B00EE8B407AD9E2B65E402EE6CF733C9B31603
+25F2C97BE78D94A51CA51F28ED9E840F13057B1F21C30F77ED6FF458C8EE4DFC
+493B64190AA9C8B22C5977FE16F31C3ACD5CEE976839E2456916EC66FCB30B44
+8FEF1B63D552E1B0F049C48445DE8C80F8563E9870134038DA5546C7E7E3A1BA
+1879235D0F328957290810F18037833D7A83558C94EE9856D3D82A3AD00659C9
+3E9587751B5BF2535FA1D1A508FBF86DBF7FC7009E1A542150F8F0EA356689A9
+DAA05EACE716C3496D4D23F326D4634B24A419F483154FFA9B81DFBFCEB31624
+1C87449BC00AADF4DA13A25955485D0C7C5CB9AAF29E1940B0DDA19594A8F7F0
+033C60CA8C9057879F10A6116BE5991F332AC272834D99344B0E476F9B2034BD
+EEBEAD5D1437C0B9E10DD38A002BCB01218A40844A91FAF28940BA11A40F2BAC
+EAFD82E977AA41B4971C69E82232A5018A31F71C1E60F2635D59DC40B233FE47
+C29D0A2A906955CC69BCB72BCA6D80E9B84F06F618BA1C7EFE99A75FE35AE359
+730863494339E0F2239191B6E7C5E8FED2F43EF6B5789872128DC528CCC2D023
+AE7A0BC6F9C194E642F09B78D898D63EE3EAFA611DC428C24CF363F78A174C45
+8C3C91CA391D7F1AE652C2D81DBB7F1A5AAB745AB08EB93BB316CCFD7D353023
+4B7CF322F928CDD5A413D60669D062E5C59A0F2C1D6BAD36CA9C5F5D50BF48A8
+AB77EBE65D054FECE72D08CE3A0C1916AAB4202D5BF4F07998534C1CFC49350C
+095D98A12E1E1E6A5BB2D3F3B6E6DFFD926A647DA7DA8EE687AF44DDC9FE4A00
+18D679F66287FA26D6AE4075E430BE22684B42EF75CD59AD72C2E97383D5AD52
+1867C37AF8855A4A5428D125DD22AE0B2757781A80EE7D425B7271AD95B96B81
+2092E92DA4D04D9E711AF88292C56E35E7FD15C0D12BFB7F244BF4CE5B589CAF
+89807DEA042EB5CD7615FA6551DEC1CAB933A6218E08C02443AB912C915A5E95
+DE3E2B66C64846F9FF403DA1642BFE9F5FDF0DA4BEB832D07FE6552394558903
+82ECF4DFB28B7E5FED973A99C0AE3CC792EBD9E7F53C84783AECAC10F9AC8661
+F023093A9F37141E27811C6B33FF8614AFA7DFFEC2E01F0B3D60442F6C62ACF4
+7274D7F52AA594A3A096EAEAA2C161FCB10E0AF00ECBF9D7EA6A4533B7F8EC31
+FABA55E1AACA89E5D02114E7FFEBA84528FEFE356A48090A59AC39F358FD8800
+0AB1486BBE16BED95607ED284CE271D6D9239F3F23FD403304C19E3132E2F3F2
+B7E1323468C66444B2E296E42365A9276FCB51DE065D6196CD4ED0E45A096DA3
+C45D8DC05C009C1C335ADE0D874F714C8EC74121B386483D2E67B8E7466A8ECB
+DFE911178ACC242FCF9DB814498ED313CC6199DE67133ED4EE9253C6EFE87DFE
+CC9E4C6F2950F1F9A93834BC359215BB37EFFDE944344F922B2AFD7723A45F44
+DEFA4E344C6E8772EB6F9D89E850E853E8119860A6871668C8A062869E15EE11
+64EDC397E138D823F520B8475FB6703098E3F779FD6446B2E2B27289B5D569E2
+C2B5FD00FC05A609572F57D14801C5EC159423E4B0AE61ECDA938424F47E99AE
+BEC534EAEF22396119C3E79AAB1194F71044A8973FF94FEDC317CACE3FC26E25
+8514B5C039CAD5B2E83C049D31C135EA4BC2167C44EA92AF8F45BB777BC56EAF
+BE7CB54F02AF2263EC1AF29C7E8D548ECF88BC262AA04D6F7DF26E5EC5E2919C
+52B5A8CE42AA960EC9CDFB35F2DC8FA31E0DD5FE5BC18A7A5FBAB0A509CB7451
+DD4230D95D6ABB2B914A93F42D0B17AC931E4814AA939F90E389EA9DF311F834
+8A0A1A86602B07EB1CAECA4178A885C11CAA3710B6DF83DA05AC6169364E6EF2
+BB75559A056929BFDCAD8C30CE83AFB66266D24D308A8A510FF245BE51B49A0C
+C608B08EFB13973C7BE9CBBC46838DE5BEBA093863CC9B896C1761E6DABC0CC8
+889BA134FFDA108C9B101AEB88E18B52FB151DD631ACB1CACC164306CF909452
+C967430620DE41E0BA22C811F5D6D728781DAA43B2279C9E301096D58DBED1B3
+EBE39E8444AE50AF6AD2929AC1C2FBA27497A0AED80A72D515403B46DDBEC309
+7A8F8A7E1D840E4D7F7FF390A0176E85D09A5AECE75D167594FA3F7C670068FC
+31B055894450460F91CF36780916C17E8644C05EFE80D525B2CCFA1FD1B5FBA9
+2CA3A87AEF0867E8F135086BF78C43BED284339040754E8091EE2FB26E58DCFC
+9025C55C286E99D5CD2B1C0767F1FE0D89BE87146C8D9C21118267CA2D9E15E5
+4DF80A9E709C6E4D284AC29AB032FCE2AC173A4381E47FC8876716DB39C63380
+E0D5417D1D1ECA49D5414E93DA59754653498A27B796C04CA3B3DA37D326EB09
+5646C20F0CF2D34D45758CF49BD7CFF0D71294BEF0584E87D06D4C069A7D9256
+B5AC4005F524A46A97574FC42EF2F0FD8382C26A385A3437FF85525F80711A14
+B928853A5DB29B64475D06B1CF33ED36396BC1FDA09B35E0857B2424584D5E9F
+A1CD56B852D910C67EC88AB907BDD4F94A6CDC9FCD1CA1ADF7D2D3D3F4C8EB88
+EDDB632D8430B157546038CC69FEDD9FBD7E58BEA5507520C9D55910A656511F
+273BBBD804DB9AC2CAF9D0D02F6F9420C7E3974B2A7C57D74B562155FE7D1679
+904503BF008E32DE50A007251D27461F62277E50DE498C0432B48F3F8AE9B589
+919EE62872BFF2DE14850773B86331895AB20BD96412A52E9B87D06DFAD62EC4
+ED02516D2FD8866B41140D53B4AB65DFABD08B96E7FF634DFAFFF3403BB6ADAE
+947387754DE0337BEBB7CBCC8CD4D0BE5A2FECC73DBEB5A3684979939F352E06
+CB07BBDE49096A91872C1B77BFEA8B6686354E53009577C2AB75BA32D9E6A6D9
+1D2324B105428EE06BB04B862127F0DE5A849AF6647AD7722B86E1E42C58A940
+F3A7CE22C828D84B84D80BB7A3AD87E1A16C2BEDC68E9E3ECA734840614E1480
+F70C26D8D185830FE5C1B2E6FD3AA633E5F856A4496574405310C3FD709BF92F
+23353CE76FF2C5D22B5345C3AB129F107D478063807E9EC522EB4905F59F72C9
+31012EE90C7A4412D01832AAB0F8B0A84C532ABA1F6EA8EB84C91F16C5EFC2D1
+3A9C2F5DAEFCB1B00936DEA1988049FB1655BD5C1912399621DD755D506845FE
+A59C625AB92649383BDDF1CD48B33CBD8E207CC63D7B4EB314354F5609A68713
+5EE512AAFE98A7329AB516F89FBA8BFC6AF3AAF189CDB905ED3F63F479CDAA3B
+27A384522D571226623E887756EAF7539BD2FEA33ED6A30656A3EFE0264C2E0C
+44E065EFD20E0961F86B2067FC7B60A3201F789E8712D79528CC5449D8A4BDFF
+A16F13C8E077A259CC71DEA56691BE117BBF356B78074CED1F54C9E16DD2CE48
+501444BA0AF54B1C84F5415CE7863DBBE37CA30688D5B6542E9E743F8EFA5A46
+4F46FFD30F801D02ED63B52C6C0AA0750FD82ED149C8D35DB524C424B2DE7D17
+A886FCAD0D9A0EDF04EA5C4072ABB8D07A6589E9AEC0C9E1933B94DDF9350751
+A6954226F040D8D13F7F34ABEA21CCA64D59076F61885116C307A95E74F52324
+8B1E8A05358FADE97BE4703CE7AA80047BD200F59F4CAB6EADB05A892469C4BB
+3816C606D39BF8B7CD0B69A5CBCBAF35E7C9670FBD4CF8A5E11ED3794308568B
+174D42AA69F3FFE58333619BF448FB0951D9E627DE153FEA9A4F2312EC701C2A
+9915D9434205857AE251095E8E856D01C4F1CAEEAEF2A7F2B974F1C27EAD3976
+7479273E36A7AFF9D4EA352ECF7642CD0CC31982D945EC00720286E2ABE0F9E1
+199033AAA3F9F0142F285B88B091E01249472F339FD8A9BE3ABB16DA3DF606E4
+2467780732D6CD6C20101FDE86391D4CF8BDCBDC0A112E9339FC5E928792B62E
+4FBE7770C4EC526C4F5CEAFD25B3E4D1A0B4F06B516971A099299D8005C9231E
+D06688D4AAA4550604F7D1C9294B74B159B6B0B15CA2A5395EF6EE355E59BB68
+DD8B01A0CC19ABEFD5337B00E8079FBD5E5CB3188C414E015DB57FAAF330FD45
+E62887ED507092202F32CC49757032D13444DF1F619FB561379FAF4931BFDF62
+3FABFE5B949829267190F61A4318678A07403A5FD9FC8C2F10EBD819D6EE9C73
+EE3D852B1DB42EDA74C3C63EE61762EE0C8D5582332AFAAD3A3BA0B5FDB17836
+9BF11422BCD69EBF2F11C67780BF0533353DD045AA551757111F11F4FBC067C7
+84486CB7A486B602F9D7C56EF84A804AA08A740E3BD2D647D1DCE018B4D225BD
+DC9607D21377E450CBF76AECAEFE4C4FEF2F72A4A44E90B28D2F46FC8E549C1F
+312CBB690F9D96FBBBD77827158FB5C2DE80DE51D17BB86A4E634EB917ADAF1B
+00038B6028D3FCFE6805A72DD10B17C7A434C68744F19A260BFCE7C040D1930E
+B4B35E0A3A8330A6E197F359CCAF0EF03502846C784ACB3068280CB7D3095977
+9BB914063E289DB7BDD5F8D50B9D8B64A6259AA947FA3AAAF20FBEB3B020B169
+8A2A68D6C899F8CE32BCA97D75E9921883663DDE2735439F8BB5B62BF61463AE
+947A0E4862D480D9197054727BA1C1D3E34A0310DC8D30F24AF051A384D5CFDF
+4DEA1DC83277553715A026F0B676FA651D6036886319455F265C4AD78FE72B41
+9C8A0B613A4FAED194DFE836C15F10E4EBDF0D2779B0337D54628F4CE0EB0AB9
+2D67DF7D287D233815462CBA378BB4D05AEA230DD884BBFEA756954EB0A6F304
+5169129B2D3A55D3ADAE8017B3D9CFC5687F2CE00BE59D084AB6ADDC8D8DF76D
+B9449917623FFB4F924EE1BD40A536E1380F22BD07260D3BE827E62220E0FCAE
+E21094047696EC4378722E62F696C4FFA6CC92D1D5F719E472CFF99995CE95BC
+7D3BD9A6172195243343868EC7FC4C51DDF43BE6649F096C4DDDBF6498BF6208
+A7FD124B9D7CE06E89C45EE3162C8505255DA806684280C4A7487692862096C9
+ECCA26F72DA251733B700261FCEEEB7DDE3542FA852B39707044F5E34AA80AEA
+C4F54814C72C5480AC15478E28D7898557F7FAC89720BE0C02B726F674ACD9FD
+635A87EEB2BE08765AEADD636E261625FA9E93E77D954E5DBA6A2A75D431879E
+5936B3E396B3E681F393669F20884B1D75CFA3714D967A7C6DA12D31E26FC12C
+96CAADA06D701DC45E00C1903A8D9BCE04B19DF613B54AF7B6DE33678078C03D
+F1B0C31A9B87FA42FB434F105633C646E2A45617D8352BA18F5F9EFA6DFE5A0A
+2FBF4F79A0CC5ED15F8B9EFE6BFBD2F7F7ACC99A7162F1D0491ED4208F2A7E23
+1165C3D65FAE7B3513818BC46A9A2277100867AAE0DE763FB6C7319C933F92D1
+4A8F8B5B5460200FA193805D3972F18B4B3DE7398F8C0A4462EB53C54A4CA42F
+93E671584DFAF63AB8B91FE0EB29A8E525C1F137E7673F632B0E1E3864E1AA54
+D22252FC1EEFA76092E85680AB35DF214E761395744BC84E03D6F2E50D15D1FD
+6B0C0914E661159BA887B856C49C04993C4F3FF4530F45CE0323752EA175F97A
+F4C5CF8E8F103FBB38295D016E639C931E1421762C075133DA533E5F5ADB6CF6
+AB5BB6C69A761BB71398C0E1C15E112489367193FF3464271F439E4ACA94F47B
+8855971F042AD99F97B049F6D57FDDDF401551B4793C4217851444D674E2E61D
+98D1D55CE1B7B00A82E16C25766195167C01E3BA58CAE1A5675B4E9DE80EDCD0
+96DB71DC7C2E8B147A22E683B900DD3EBE402F2DBAA6DDB847E5AE7D0D95D4A3
+0E5EE6E1514391A69ABCA5078C96E0895047D2242316792BC99D59EE40293A25
+AEE147A96C9B8CE778C4ED454D1E1BBB351966B1684FEFD4A8E707FDD5EC675D
+96181FD81641BB578C486A0529FA2EEF184B0402BB93BC400B1A29DF5ABBBB03
+774499655178A19FF518E5241C86719B1AD5C04A0775C0620F23BF19A1DF3864
+9219F74D06410CC1C85DE0E172DA953238F83BB44ED46C37FA1841D2282D16F2
+5C3C9D3A3897F880D49BB65E9A12432F517175C2F3F12C5F44DBFF1094EA2CF9
+0AF10CFEC825F1DDBE0331DC70EB7AB9736DFBE1D6C3448B5245AD469DB40B64
+D1B89F7E083156D3B44E7C27ACBC411413D69D515FE03C7EBAED6DBC7CB3FB7D
+DDE6239F8A21E6329C07E0C601D4B114BC3964D921D3C15BACAB7AF7EE202B20
+3FEAAC53D13F088A932409337991D5CE4D4D55FDE4D515EAFFB5E47ACA6207B2
+F059EE7A93965F859AAD0EEF2A6FDBB45408834E885747349244741526882DBA
+7AA940C038AF5D0909C1B6F163CCC5A9601E6F7BC13AD1DE6A699100F9E2BC5F
+EDDCD46C3147E747C6D6006C05988AA402A7C123F015A271C9199E3338B7FD85
+B73B31611FC6ECC10F203C91605279EB6894304A0FF6B67A7CE10BD48E44C0BF
+04395105279961D56E6D3CBB3F5ABEE1F069FF512D70BD9C81BEEB62710FA967
+2AC750075845E2EC4B7826F170023D7BEC4719EA2028AAA3EE91D3E212DBE02D
+53CDA397F61A4CFA58543FF5A5AE88D410EABEF0AA0CA8170AD71922181CD387
+96ECBC28C88C3199618DDBDADAB8FD6B87621B731D91FD6DCA973F2CB347C2AC
+110544A352FBC02B408AF4475AC4A5792455416A6E9184C861B4EB02F6D565DC
+EBA2A752C0C9EEF51CC5C0EB286ECEBC7FE5303AA411F14DF5B569A271BE0650
+BA2061861610C64BA81442A8C98B5334CC41603B00FC7D49CBAA7E6257EA6F13
+72A7FB4FEE1F7EE3B6226D7564B105D7902B3DF2BB43286B6C71A5F70A67E926
+706F301CA4CDF22411A6C91BA7EF405FA5EECA8865E2A12290BC2485714D891E
+CB9EA86E36EF1C7CC6BE96AFBEF493420FAB5195DBE4DC80BC075C17A1DC6565
+AE1949B72A9E26D9E832C08CDCFB37B73BB0C80C452EAD2145E1C217A53C1E43
+6D7EB4F6D035DD6A6852F33E561043F8C9ABF09AC746E936B522522D1B5A4A70
+7A0566D6F3BF82A29918D3C01EB69EF77776236EB876853CD9C599D81E0ADBE1
+F909101A47927116919FD881015CC23E7280DF2AACB0D0D442B337952A691393
+7A7D996477A04A0A7893B22E6DF75C912518C0E80CC57D2F3011F7CA639FCD2B
+5B69DAADF0882629EB56CA6823680B247C5131EA52B097977AE71829EB7D60E0
+9190E3B34BA4022932F24166659795E75AE0E286268D84F7D57F1ECA608EB49D
+04B7BD31A76337C487DD156A131BCD19154ACBB7C36FD5E11FD3DD7D57684E4A
+45861AEEB590967ED45ACC06D360188912A89BF7F01CF4430DC196B32F29414C
+8BD6A961882B3999A3EC9CED31B063AEA557667AF65595B67ECBA01F488FD07F
+4684052C4BAA9D038B4CC8FE1C1381083CB1A2F7DF95A213C46A272C45F7AE94
+47A605265A776BB5B81CA6A87875B3BF33A2E055F54E73FBB3FBC63CA47C64C8
+21D776FB9AD5FBAF9482E4A24A556B1C1F92B3984105C1C466B340DCEAAB9A41
+7869FA344F7AC673AF6D49752B7391260762B8525F43221A86D87FC74EC3F92E
+BF23C1F2B04CC63F9751471E3B399B683318762DA5742988FD122D1263064645
+079F1DC46F7F66039AE0B9D42CC2B387C7C47758426CC1E35A249DB3875A8466
+198155C887D5502FAF403650E6E336CD5366FDA28662B818BF5C5E2BF484E207
+498C3CF05C037BCDC3B68D0FC718D9EDBEE4B27CABFBA52DA116A60EB766AEAF
+3D16F3DBCFA065720704DB80A7045FBBCB219A4F679179B5B7E5851A4CBAF2E5
+20B4FA5B5382EED902E6CCA8EC283E2B39726C5B79AA72B45CFDF9E30EC4D5CE
+7FFF76A90F2A3EBE77E017CF6418C4CA1E6DA141D974360FA597273013ABDDBC
+A340524C822A2DBFC5E9551D79745595105EE1FF49A6A1E33516390A2C59FB71
+E394B13481C5179DFBC6A7E698C0364D93A8830F2BDC3C7B4B603D64BB53BC7C
+67270C93AC504557DFA97050029D6D7B85EDD9719CFF04581004BC908B358FDB
+6DFBEE6183A0F7AFB84040299B04C560ADA8AED59E43C2036F6DA09F3044A781
+DA12A23145719FA0B2C6AB6E10CFE84D8466BBD176EB17B5FEB793A917B3B604
+271F299780A5F33E212CE334756D9768339FE866DA429858CC7A6551B192C80C
+659A3627BB903D74E8ABC3910A662793BF0BA13CCBB5361ED6D1B4AB6AD299D9
+DB7CD8E592D2D3D9615AEE2BAA6E67A46327E29298B0E91DB801832D66788D18
+47CFC4A5C9B8CD41AEA2366E8D7D19E605D0474D6A2D9C1AB44CF5CEDFF9A678
+9B74A83724CB185EAE4A58BDD2ADB9941B41640EEBA42C3E105393639D84152F
+8E26E93EF7D35E028244785683C8A4D59566AB8D2FF2906C0BF7C4856AA9C3B9
+E000677FDEBAABE33B23F13077EA25E1699519624C03916E3CC0136CF3A3A468
+F328D43F7BD1C6DF305206F302936B12F3529421A81D0D5026FEA5B811029790
+42ACE0E4AA1D401D15B283E2959F3E130ADBC3262F73DD1CBC94EF659860A2DC
+1D9ADB113C701867A4E62886C63FC43BEC3461205A37F1307061C62EBE4509A0
+24A95211B890842C00ADACE0B75EEAD4031AEE5EC113B7303AE4C42D0A263021
+8882592E518CB3274E367B937274A5F7FCC9F6E9D36B83784C4E17888FCDA3B1
+CC0F9E41246CB830D282370137AC001D9E4ED0351BBB39DDD7F19A78FEC3CBE3
+B875543006CEA3BF1724314ECC6AF4932DD9B5CD64A91D5A72CC2487A2F4298A
+34A1DF796D1E32DE2A7F12685B33992F92886647B4CACD145FDC35C5C8317DEE
+C9F58DC50E135F65B1A0A1862EAE22F1056EF92A2ABACDAF4A701543F274700F
+4FD59D4033BAC20817F1C97B41466ABDAB3AF22DC3F60A5A5C1096A2ED73E84D
+F5ED5392ACB5FE5027D0C3B1D47249D809D5D7C7FFCB0AD72C6E54438CEB4AFF
+E7F1C42D158C78144B7073B8A1AA4AF5707CAD9E9EE68C45C32B1F2B2C876624
+163DB24823427080D1F81F52BAA3C0BDBA113AA6F24AC2F01E7E70D6F7754BC4
+BD2DE4C46D398DA4C94DA7F8A38AA2EE20A9D124291FB3649DEBB4A5476FC536
+56E85EBACF09E3B129BD41748FD8972F124DBB5821EA6BD7F26EE1DCF086D847
+82D0C7D60583B1424EC98A3B436A9939ACD437CB3B0F5DF18B4BAC9FB1F4AF87
+0854FE355E5C8790F5A5BDD2DDC835BF8FAACC22FBAA6589E843E04C2E8FE52E
+AD35EA2608BBE0D77184EB4B4D211FF2CC58D37E3D7638A57551D4961F9E2264
+A7DDC677F263450D357D482B61D91D2B1EC15F6DE08864A5693707AD46266ED3
+46C1E5C8D14962B82FB881FCDD2C2C20A1AAE200E39FE74E8CAF7E396F1FCBC0
+5A0CA7EC0D2FED67B17DDE349A72923D2692B565D5B752336F4F49370878AD9C
+772386F42C7E2FD66F4B8C9558F9E2C078B7D140A5E6B0D8C48E5F0196CC5D66
+553EE79C3596349568293464FC361AF011F8148B47BEB397A4F8A0552E416F02
+03FD3967E0AD6A928DC1DA73488D2A093E7D587A404F909D24A57CE63F2EE6EE
+C945CFB2297EA4E331F41A6B8F67843B61C9226FC429EA62FDA4F91C98C4D7EA
+D2EC09399998F08AC9C2A3602018CD28B3411218D90A7BD6A310427EE54B19D0
+2FF1A39B7363D31D6BCEE6394174BCF0CAA755B2EFEC05B962B7E28A73BE0BED
+9D33189E82D125D4EB6E5CB370705430B78324A079769FBF7B4DABCF305924AD
+1A8559ECEEAC4D0967AC739420C712B213B9A84C5D930A7265728931CB35C4DB
+1889EE886BBA68383E8926821C7EBD13CA2AAF9BE7C5090F9D301AAFB1001C75
+C52BFFE1B81E7F415C38F560E902653714B853FEB28125DAA168ABF2EE66B6B7
+E4C0AA21E4B936F9F757188899EB4BB6AB3D708429954F706B12D928E264AD64
+1C4AB1A5C4D209D757DA7857B383FE9AC3319A9380603348A700BBEE4849D9A4
+2D7C6D49145FDAA73074B8F568BCE751C0A9023124C71F8ED7D8CEC4FB01E841
+EDEE9C56BAC00DD17E83CDF905D1B8667BF13C3B8DF717D23C6676840A152215
+ED17A14B0DB3602DF9170F979D8098412345BA610888F3FE450387CC46D47FCE
+2241F9180024331FF12D713DFCE680F167E8AEAE710C765FE0F791C065DCE040
+676C53C797AE7F26C52CBACB82AA12DA9A14846EAA73A6F0F98A628CAAE12718
+A9C30F2B1D13A4FF3BAB73CE32593FD459A9ACC4FE7EAC78E893C9A37BCC8363
+D8DAA0049F383F1848F037F0250F5D9A07E0D6271F771AEFEA2FDD6E298DA77D
+41CAC0CBF6871D2D8891B297AF8927D33D6E7A16974B97B7BEE5FE92ACFB9442
+3DBFC1A323C2DECA0AABE3C44C4E5FC67E31AFA32A2E384F9A158C5F5A7DC04C
+C6342B7D88308F4BD0C813A8A8FF6D44E8B6FF5073F11EE1FA41FBBF07CE8E72
+CAAE5FD345A00CD4E0DF5B80A44DA6A11B271CBE994935937BC477AE4862E0E4
+0F55BD2214CA9F7186885EC69811F821109428BB851C01D1FB2F38341408D262
+F5DDC76451A7C107A725B609DC363270EAE8E75CF6BC1877F2B2BA1455EDE408
+159506B7727F9ED61D807CB758C0BC165EBA7C734EE4BA55AC6F42B6BB930FFE
+DD0AA0A34F994AB151BA1815BEDB828AA1BF85DCFF99404FE4898548F2FD6DCA
+E1A338E6446093AEA135A75832AB0D268A3B56C8C20F29341CE6A48D5F5CA445
+91CEBBC1E344CED028FB823437CBADEEDA3B322077A05573D60D7BD016240153
+6C28F065CB849F8CECD24377C69B42B00D01D388363B99330AF05226758AAA2C
+B34BACF2F63EF54FB718B001C5AC90C9BD85DE8CC38398621AAACDA2FCFE3784
+B3257A9DCB63773B8B99076F2D969C0D7AA09478DCA4A6B3F7D8D95CEC5208CE
+ECAD3A540AC0C067733557B5134B7DE5C75D2B5673CC9E3F08DE0B9AE76C829E
+97E3BCE64918E5F1687046D0318EAC32659629DCB7CCA135A2A7B450E14A9A1F
+D89F5C9793A4FE2AD7719037418ACDB24643ECD71D70FEC1D529A87B89847945
+F4BB9E9919386DA70484036A926DC3DE7FED1612C4B89B701EF4409979CA914E
+5FB3ACD50E15AC6B4B22BE79954F45DB6BEC4CF3670414540C7F394BE2CE8F34
+1E8D02282357B6BB6DCC14B6E1CDFCE52FE38BF7FD091F44E3309D88C2CC2014
+3AAFFF868E201F1729C0303F62F5E21EF7581674C46DB63F615A57C4310B5F07
+A591A293340497C59D73365152F4F1ADD62DF144C0B2F4BBA9C04819D74CF5D6
+E5DED166D9065438C89ACFB14744EEFF77FF21A5DC2E60F8FAD10DF69556219D
+3D5039A505D5DA8A35EE75094EA3930417E7F92BBB14C0948D347FAB53BD7077
+3FC6CC7EF5541D2082507130932FA415218BDD959004B5D1D9C6AC7A6D62AFCD
+CEEC5F43688EF251A1D7FD4A9DA3018ED9A63520C0A0E4910C2D5B2F9FF03712
+EF45FC4AC93DDEBE9E1F434EC1D86938253F736F7991FA0E20500961EA080DCD
+D2A9164A8CF2FB7546EBB59DACE8B6BA5F9438A8FE29223341EB1B1592607BE7
+E6E7FB761FB4B198F8D346ADE3B6C7F31192541D688518969AAF7C2A1EB51563
+0A233BFB89F1C2F8736E89A46DF07D64E68CD0F58CE1D698675E4A3F504F5D63
+E58854608EE83814127A760695FF30281D2C4648D5808C8C8548854474CF2F0B
+94E15450CDE2CA5D5CA333BA71163E202F54DB4E6B3AFF1948FF2A5758A9BDB6
+9F004B02C13211A86F6B382A809BB726A22AE41C4E6210B61FDE76D99A5E6890
+BB1C522D0DCEB8916506622083567680F405E687C7FEE05577A8E7C02B30161B
+A775FE0DB6168AD93C19B83AF6E95761BF57EF046642FD3C47CA1EDDFB426533
+5022A78E85A91D86F3B78E463B01CC30807204AEBC0E622B383DD5E2A093188B
+62CBFB1CDC759D4FD7A66CDE922671D6F6F2122F39DB3C4CF73F3E16C1003688
+21838863DFFFB77EED7093A1B22CAFF89443AAA734B788F7F64BEB8B7C6E9579
+0389ACE038CF73D46AE11F9D653820FB3EEA99144CFDD4C6A28B3A86621F664F
+9441664E4B2EAAA897F0FC577344FBEF2AE0AE4DB43C0CF12CE089AA00D6925D
+BC8537F52868FC9EA59DF56FBD7AFD6A4DB12BD17E4B47556DA97DC1931AC87A
+38A1EAD3D3AD8B462C1A76F830D7EB0621CC8B4FE740AC409EACC48BB7324B92
+1F5B2093F0F6575E4A903E2EE134E77874F70DA87C073FEE5191C118EF6E75CE
+42E143037A40F8D5B5C92C55B497C134B61BFCE61D8E7AA93E66F74F0BC2F725
+A8BFD5795BC47B0B46F526E772917BE1FD164181B5731E27CB13D8DFAD0E8D9E
+BE4436C6921E7AC96953F20CCEA3C2E6450E51FB088E16DA8DF471ED8AE84F48
+71433349B7EB58332DE9CB7126906B6FCC08CF2047D39986D4DE9BC1B2F2FDBE
+163C73C9DF62D1335EFC64F38D42E2E4EE9A422718174189082A4E83B5C5D04D
+E34ED308A2D7F8907571A40A0BF77B4990D7C1BF1CC0474C0A41876F2CA0633B
+42D5A037E87BB056483D0E88298260265AB723B24DDF8E4220C8E7F3E681B883
+E94EEC6B2E77BF249CA69E12AEE9E03569D6E99D63FEAD2ADA9135B62793AFD2
+B7CCB2CF2D1144BA7FB613F00C6DB9736720CE1BBBC49AF359FD56F9E98253FC
+57E2CD93BBDAFDA1FFBF9A33E427B37B333BC48844B9F7A757398D146133B416
+58DA341B54FF74D097DFB950D0C850E11D85522BF8D10BBA53A99117CC4A4B72
+A1636FEBD444F0D61397039ABDB39CC4D969910F46AD2EFB671C05C66B0C6FE5
+5FE8FACDACF7AD619A44B49800B287170D086BCAD5597BF592521B51603CF4BA
+A286F141942C67471B47D67FCC581CE2F96D3C8152D4A86F9BA90EE6D5F06730
+CBCAFFB91FD653675DF525C3948EEA1F09CB6CD084D7D34F00826975368373A0
+A05CBF4F7425C9F57F0EB5F1BBEBFEC259BCA347D47BC00F90EC77A06C0787F5
+6FE2264D2E37615E28C74B5B1B96B950243C32CCFCA6925F42E921819C57D387
+819BEAF8250E117B9475D4A8FAC24ACC0EC44CD4C9597F0F852781C9C1817C14
+F38F8280AC2415268B3BFFABE7AF59B50DC33F7ADB38308F67F50EA4A74B81D2
+5FC9C14894963F82D10525E0926DFCBFBE775B85DAB7A4BF4D13E422643109AA
+A93E559CBAD1DCFB01C24037672B2AA2E06433528915C03F222C8523E06A7BB5
+90049A82D9E930E77DD4BCA67A765B24E7274C45331E07D9AB8544C7112327F1
+538C7E19BB37C05C42A2AF30EE19D10E4137B75594EE6D6CDB9431B3AAA6950B
+99CE785EDE29C89F94F3C0A395DC4CE31D058732DE45B6FC3D15E12E474AAF6D
+D43D56FD939A8719B432D4ABC752E1201A8C1A66866465AD9DFD2D9B3AA029F7
+9B95EF7B4459F360F4F515D11149942717CE8137F0DCB4ED01F74E474FB91718
+4AFE6342F4D4597ACBADCB5E40EA16B86D4DADFDB970149C0177A943038CAA99
+D07C82504696F1A87046160F9C0AC7DC0F3C8496CD63B31E56F51BEF07C6E7E4
+C73FD39EE686C0B833315629060DFA6DEA06DC6BE6958C3F9BD1F007F64525BF
+7F1F1B1D17C682BCAF0B581F0B986BD12A8C843DA6CFB65E901BA8BCBFA7CE64
+9F1E86EC50417744825150D56F2FF41E8B34D07B7EA3B19CDF906BF67DFAF212
+73EAAAE9015C8DFFC0C6EB7934DF360ADAB6BF70FF5B18F2A571B9E42A113F11
+38EA6A07CE358D0B2F4EC4FA45D3C441CF21D465CE936FAA1033E7AA407DBBDC
+4A44306ACB55017E136D70DA322A115FAAE9FF0A07A3D588E48B1A571D2585BC
+C7AA26DF65D9416A3C5DE75324CBFE52A76F3B74507DE787C9E9DF41FEA9A02D
+7DD35547E56BD3FF30B12668BD2804F93CA6199B4AFBEC7EA51EFC9EE14AFDE1
+91C69B76727373D40C5D66129896314959DC47D672ED6B3F977E671E020BF01F
+1A838631CA10118F13F91CF616BA7EBAE0C06EA8AEE25C73D4CCB7203FCFB0C8
+6884A1E23FE5ADFBFB0FFF19C532C2571062CBA81D3570761E3E00BE5556CA1B
+25F2292F689E5B950288B794BAE1E15FB3284AA76731772CCD6C6085C394C5B0
+3ACF82A852A32989A638054C2E75B0E6893A880241498D3627B55F3E58761B83
+34208FA0A34738A75A67E5DEAA16597E0264A75BF6E05CE3C3B8B1B5A9BAC508
+B282B2B77CA0F5EDC38EF2D3DA6DF7646AF3C9ACB62DD0F59F50D0EDC193D847
+F8A5D40956C169468F5FC14E3D527AB047E8E5A223A8BA05270700AE1A07C3A4
+ACA5ABA29958F3CB2D1CAA9B5A0643012681D0A32048458BFBF2E3BE88C326FE
+5F6AD9C996F3C82F186B5D77B4E31498CAC8EA4F6B3AA6BF524B38FBC53A2B04
+3F27EEB7854861B3EFD8C5DF19D2DE5D9C44540AD64AC3EFE729F4BE0CD144A2
+8A1DA61C8CC27BB6B861DDBB25782E44A33EC1D507D7127B51B17C7BB260937B
+C4267B4CCEDF56B1FF949DAE7C5E5C3F061B6CE47BC4BEDAD0A78A952A33F339
+ED8654918143FE913EA90B9ADCB9B5C9C140DDE7E2E692B19A49AC15E7ABE60D
+29453E54AEA9381B981EFD66CD957936D6C7F54CBD6306B82D13B8A716DABB77
+465EC55DFBF33839D5F37B47B634CA94489BF050000ACDEE4019C668C6EDE0EB
+42985CA668123F764789075C18934790B1D1D9191E72D748F2E30E0AAAE07451
+E4D294C0106CFFBED91600DA5FFFFA3F6DA6F7C5CF3502FBB2DC37ABF30F04FD
+6283BEC78FC7865D1B428F0698672E431D2A20E9FE24B1833C0EB0E82A34A1D9
+23C4791E6F8C17911A579DE17A289D904ED8AA16C8A365481D8235613B9C71A4
+26679333F179886DF86BEA8F3FB599294CA1A9859BA59E42B061255C93ECD97C
+AC0E4A89EEB16A25A5FF625713F8A5792A2E6A0F537D3436F603D7F464B61470
+DA712B94735254FC69C4F4E0A66A36170EB151353CBCC3E55D392D78DFA3FFCA
+EFF08200F1B222D9D9C4BF8329DEBB42D651E826BEB449BF8DEDEF0F9CDA4105
+8406F1E26BB06F60B7B00E92CAD3BF4EF06B9553688B099106932B18F7239DAA
+27B747808CF11D151C28C9DA11678CC1E140DA40049190B194851F753CB82993
+349CE659FA85B8AB585EB7FF322499C5940C026FE8DEA5EBC9DE866B03C98F79
+D36AF4901182DA9E9995FE8400AF094906D52D3CFE28088B14675F2A6F846CE6
+5D5869A70EBA2AAD1D0C538E0EF7779C801F866EB96C7B5E19C67354BD364263
+B67D82983106C682E0D9A3BB0D5E60EDD6452393FF2724739D426295CD40AEED
+882153073D356E2AB1F543E20F2AC2BEDDBACA73BDB5E8610E58BE6D704E5274
+D5C252A0669C56261555D0642C0937EE08329B8BBA2F807284B8777E1C2D73F2
+31E897BAD03DF7587757BE939038E75B25137471552DE0B7B3842760F441FCAB
+0557EE93F87FC7079457AC62402B55E51ECE8D50F94566B1671675F0215C37DD
+31FFFAE9B27B48798FFBF14D18A2C6F1306522CD8E8C0D8CFC228B3F1C17A827
+1E5273E3B5B20C2792275DDD7C17053AE8DB61B679ED2780740E947D5DC47B27
+D35F9B5DE0166539FAE75DA2179F3F9EEB39ED0452E49A35A1E1083683BFAFFD
+9A066C4CEA4DE699EDF570C9208892E0ABA87784EFB455238BE1A6A376F64252
+82EA5B523A8B2E7812E3253C2B6E1CC4681656561179A4C95B48E97CA5F9A39C
+D255209D9F7D80DF55AA3FB99908B46B101D509F3BD513568A4949920DBDCC6C
+70ECD3BA39C44423D02B4E5B13E9F434545979F7ECABE6A6FBD131E169C914A4
+8063C6C9748D32E71D0A25FB40C764ED26450EF49735E12DE893F302FA491B29
+D5154B441D5C61AA4AED88F06C63D52409DE17D7D97C572F7579296D297B9942
+880FFF44810390ACD46FD1E090A6412F7BF21DA7CD3B166A845890CD887F607A
+1F04BCC7F4BC3107BCAECD61825A959B61E62795CF4E458EC63F1F2235C64D60
+C62FE46E4A913685CEB2DD7B25494832542059ED9DD0849029BC1272582D630E
+4310F978FE6569A4B9B97A7BB4BD602D5D32E79727ACF46429CFF0F7BB8EB39C
+DE55DB6246DD9DAB7863DBA6DD21EF340E19727D5AFE9026C284326BA0D4D9CA
+E015056824B392BE8B930D04BA60B58CF4A683FA14850B6B24787958D1A7A42C
+7C33C1362DF20AF31CB88F0F11BEA022C609D9575F71EE270440480E0AEF6207
+733236DBE9454F088CD4A01F63B6B2C6270DD08A13108ADA783F2E7067B7DE4C
+C34AE192B05F68B0022F5F30583D9D68754782186E5B8FF76ABC451DC9EEA08C
+52C12642165408AEB813C00DDF6C27F4053435F2CCD8CAEE50704DBA37A4AE42
+9B7960169B0C865E92D270A714449FDF13D8835FC1D4C03D7FB376ABF7201BE8
+A593576476D8AB905076237BCE2630179D158F04568CE4C85734FD0A1C8E3D90
+272F3A65B556C7C803FAE8A0C82756B99C35C06673210766A8042682C873F811
+CCDBC015005336EC438C3476B4AE13715DDF6F7034D032D29F2383E005F6FB4E
+19AFD4A02BB7A79917D54519D37BE66ABBC156464898583522A4D63FA6DEF194
+BD4B90C83470330F8B5233C24E80CB64C13C0CFFEE81E3087A4BEB84FC8B152F
+44A9FE7D4393C652799B12A2C0FC0842861B1F1B656E802CF0C40DBE95350BA6
+32341D0503CC7CC3348953723981ACFAD95E18348CBAE09B630DE4247F3F7A7D
+E4A0095D461854E4CB12840D355912AAC33A5A04C833E20005C2A71509AF51EF
+697773C2D5C8F958893B26BC64215E4EBB7350166482F29539AF54D860C68F3D
+1C60ADEA814E869E974E1B78114B091134589C089A2CBF12ECF1E31C4122155E
+A90587849A11C46DAB620284D66BBEE187B61413740176EA8F914D6923AA0A0D
+3C3383D95EC1FE1587DDFEF289B4BBA9EE208408BACBF5FA0A53BFFD88BC0529
+10631201650A258809DCBD5D136E038110AE4B818783716501CC5DDCF42ADC23
+86382A06F7FD13F6E99935F9CFA67D49BD51A2D28E1C605DEDBEFD24BA337407
+00029CDD5E8808F6EC2FE5BAF3BD3995414E9D390092ABDC355B9CD4E80A8DE0
+F104658871D0CC6A7F06CD149A0FB36F4C1F484D5A43AB44394934F65C216EB6
+C33002BF7D0283E798813065C84BB8EBF6E19A0855F0E146A7ED9B4B11C9B89E
+48465EBDA7CAB38EA818991CA0B07182AEA5438ACC95823656CE47CF932851EA
+3B0A9A2DBCD3FBD926D904749F62E27C4725410E297D9CB2CE16ED4B32AA41B6
+888B1480C538548FB6EA68D3E8221626AE219EE5E998B310D8820AC61CB9D9AE
+D5C1AEC7C3CDC305A5E88E028AD21C6DEAF272ACB93916AFB42081E9C46F0C2D
+98081D7D0CCFDF2A3062F218582CF432DD75BE9622B1DADB99B5801F709E2267
+BD5E0E1511912DA7D888FDC49C2137F65D5C1A0AE5E10961CC392307890FFA8C
+3CC9CE5B898812BB6F0AA59557E352735A2B11D6CA98017C7C118D1D460585E9
+C6A2C132A522F0632B5B66CCDD2572EE7378ABD5EEC211CF82EF19D151D290E5
+0A0B3328C699746960A0A7BBF540E6F6CD9544581D879186CA576E3CC0164930
+264C26785042123F5784D2CAE377233A1387A3B4F8D868B40171EAFE7BEA628E
+7ACC740937076C878F76BB8EDF36ABE98111D319AFF427713EF3CB8F16464228
+C083113FCEACDFAB97AA3E193E8FA750FA5024B674F63CFC58073BA959137339
+4B6958AD894CD17C4DAB82CCCCF154343270CEE203E13322D3808321FC02051F
+90CB293FC80FE9BCB853738AAD70563E124CB39F9935AF590ACF3F5FA8560169
+2572D275F36192A5ECE86B988D6133B0A1745D6D386937989850DAE1E62D09CE
+7D24EE2066814DB161F6103247EC2E8E065940F82E1E984942184E68E556A120
+23F52C75017514BD176AD60F29DB768E9F1B3DBD72C89E895432C39D2EDEB089
+3692507DCD57FCEAB7031D391E5CEC454D5266D140D7EE0CD151F9CB042E044F
+FC95CA7AC869B4B04DCE1AE9D5202C36E343B1A2AD786F5B7D0F1AD1E42C4C1B
+6E6BDBF86F022D90840FAFD81604C02689B3550AC41AE36435B29CB823D255E2
+EE9BC538502D18ECA40E1F340D0E9BF70C58E9C775D86DBB6BAE3D3EA1BCF920
+6ACACBD4D2E960723EA3376AB2B077010C1E685F759A56E9B0A84BBDBBD9A0D0
+FB4B0806861C272DE667F219D8645EE294FC321D8E373021BA63C1003CE2D689
+D5855861A575696ED7FD601D114E602735DEF72049400119E933DE8A1198DD94
+8457A24FBD19FF5D21D169FD99B6F6F6A2824F8D1653A13D5BBCB9B11E36B8F4
+2F9DAB2CAA39AA9453279F8D222EC4AC8114CAF0F7F58736D457BC01DD915ACF
+7D9B4AD3D90F93256C4C9E41CC15A43B71E26A8DAB324639FCCD3E082B580CC7
+B7F2A695D029161D2F3A2A8963EC8BDC0E6D256BA06F08B6D48682CC9ED169B3
+58B063D8D7265C15B59C3DC91EB307F33FFF73C3101AF250F3CCA40A161FB3A9
+B698F261E9F7299F2418D1DCAA1400F7BD3C74AB55316F22593595649F3E9C26
+6F903C6C0B74D96CB7F92CD33D610F0AFDE14516105B49F1A43BFA558BBEF71C
+2FE095E954125172B6CFE4C6390F701738232605A38671424723A68F13F2B94E
+2FF970C51633660D9F5B00FE64046C85722B40515F34E44F32D18ADA4C85315C
+2461D81D8F34BA7B13227E865B7C24236A16D9C6E1F428998C22A43D3D0332BC
+55AF05204EA352710B199C0F1F710C96C72370CA7203A2882310A629995B5D78
+D57D695B654A718C5268E9751C7F848CBCF87776ED10DEEEAA32F50769CF5BF6
+58455F8CB9C793290D7F8A38320743F0E87CF2BAE8A07BC2DADAA9F61ED6EF01
+6E24883E78AFD03E23D3A9E77C62147447BB772B4C80C1022727A9C863CB8A7D
+5C54C057BE3E148FDF79659CAA77229C438A163D366F5CA9F857ADF98F9377DB
+8CA7CE8F361E5A553B4541763D9A6102467A059DFE0004C350EBA6C8FAAD15A9
+3C68C30AD52BC1496C4C214B5ED4E537C3B25DF46166E1B22B0185FBA3F9507E
+7ED64C77517B077164E6661D73E441ABBE1BA0F68D8B53BC8337879EB8C08F47
+A579D32D0EDCCD91CF143F05CDE56B87E1F2868D001648513BE0FF3700732AB6
+CEC0CA78BE25810FE125B5542E407A984E758EBF4A3FCECEA2434815F64425D8
+C8D0862CD06D88B613434DA7CADDD3D6D4F1739E744B4DBB99C08CAD6112F0E5
+4FDFAC2B8D0D75A7A7AA5CFBE2C3966284E9D33CA71043357CB951808B3453B3
+B140807FBABE8F6B89A99B329D84E21F14F5D0022C0AD05D24B00CC2DD560C03
+AFC9AE7BF337FCEA66C41BC6A6D3768172C30F45DE176C1B4EA57828702857ED
+DDC1953FD25CC900941214ACC73A8878EFE63AE700ABEB0AAF8113675B12D8EF
+E370EBC067F82917498DD9A5C6B080AC066FB0B209C52448CD68713AB98D78A4
+7ED37127959969CE4C18D686B8FC5312BCC6B5F4B375DE186E927F42AEB377F4
+E96381BF6906E4A24328DA33A3C33F00C7034C53B10CEC70058D312D3EBDF1B7
+C81E0972E77259376669C71141162CDE55F5EF7E4A8A95A16AEBF41D00740055
+FA8CADB6CCAF1BF0850C4A11F905AD3287BB90D66E2878C58F00A71DFE1334B3
+3FEF4A33513070FB9AF215BD26E039563DF3BFD597B8723545C52570E863DA43
+8303766D7B0CC6EC75676C77516470F9D83908C0F91AB5DDF2041BCC68B1D3F1
+652153EE95DB246F151F63D85410B6B5FA265937B373A085AE2C42542287C17E
+7FEEC7246F98BF641ABA0006F8658956222A9E5CF6605A3A93E5C0C97F43E679
+321F598CB94963C49AE48BA497D99B304D53F40D605D17DC12D966837825B070
+6AF66368D569B2BA9FD4066A155970E0A9BFD8F9E4645A41EE98391C5A2819A4
+CA09ACF8A056B5F65A4EC08DB490EC4BCCABF6D5ED8DDADD250A704D8D0B70F5
+D54C83A4E971792EB7A807172475F195836A9184EAB13020A8924232C95C8C54
+5852CACDC34481E182F98C3A3102EB6979B8D81A2FDA248D74E76B3C8900D6EE
+9EB9AB23DCE457ABB1829C514F5AFBB43435FB2B4E83E6FB0CF79F24E93591FF
+59AFC759E491A9B569A1B1EE3D61CA858357BE7215484F4504C6098EB705BA7B
+A38C7B683FBF36EBD39987C5447C4F5074893D934C59A056D72AE4F0A363BA09
+EAC3C4AB6EECF15BAD98A0201CDB4F836206F64FE1B84E590D6D4119D2F7B548
+36A2B3EDED5A8BBCD95509EAD11F6F43FEC653F131CB4AD546A6B7096353B016
+FAE4C3C0C8AFE9E541291104425A1DBBF7091AACF5F539F29CF261F27DB2F2E9
+96B170EBD139D7D9BD009D6DC3EED26EFD5F0FD4F46F590B3D218F0F54F324A5
+C4FA31B4DA7340302287C8A3F2417F02C6324F2EF4A7BA2612F343EF11A4B4D8
+C3D6CF3DBCD272010AC01B525420CADFFBF2341F22B018515D954AA24E026A00
+AB3B5045E73440ACD6A2957BC5835009A310C7C85DA385C498D5D847469563D4
+146E97EC0FE9F8B5244B6F9C83B6E1DAFD109EB7FB1AA5AAA3A3ABCBF4B4FD5C
+07B5524EA0501EAEC5D280688D6FBF1441317C2EB2DF818120427B4FB62A6AB2
+68FB208350BE986F805CC893E6C3F0B2936152B1E7E19001913C0A9F821C345D
+6873A92FDF009CF16B72FAB99632B783DD3EE5317C30D3363C10569FED1519C6
+78F6A2343B3152C4303321F6E2158C040C7877C7514F30A15F052D3C0EB1794D
+17A5BA81039F0B0F3CB0093CF6FA0D7389DB279018806C1957154952901F41D5
+C9786A7C0EE76E57189A58925CC11B9F79C17687198674B2CDBD77AF4E0C528F
+21E588FBDAE805AB5ADE20E37242C55D6ECB9574C82A6044BBF8C649A39C5512
+D500006733919C4FDDCB5BF3F586E6C0DADDE28524039187CD1551FC7E193DD8
+B912AC9D6DAE8B1FC859C46D871FC08408E2ADAEF7A361A47DA2DC64DAE45B96
+AB720474BFE8ECB8A524FCEBA21ED5A28A01F90F6D28A7D40A4F1A9C2A7A9820
+12FE8B0E532D637F1FD9E939F124A8322AB92792AC25B2C6D5964F54FBC0E882
+9B4BBDEBB7895CCC4DE40159121E2BBEECBEFC1E83E2C386654997A9E9947B7D
+38EE4C03C5145167E554DA0A7EB0FC8F4B80D822C321D7574D05A1289494271A
+501FDE3325B7C87E1D24C34E08B799A073AC8361C9D49A02B564126065A7D550
+07E36365337A08E65AC7130BA92D6C9B97B12300F2C8886F55EE9C434F7768BE
+5B9BD13D87F2063E39747F10C2CDF8A60B9196FCAAE79FEFCA552919AE988A2B
+B16705FD84EFB22DC538ADECFCCBBE8E1F58BED0588678CE1A0005FB3F5BCB82
+E5519E9D23ED670D2D6BDE06E36D0EEEE7D78F99BFE25E1A89145B138612C8A4
+90D0B41453AFA81C62DDF3B21CAFE3C9807275BA3C5A25E74FFBD61A092958FB
+CB84C171EBA5F91D31123B578780AED7E074BCAE8DEB9C10900F2261F198ACAD
+72621D416CA2768A0851FC0F5483895FC84FD629F1C32212528C966DA662FE7B
+8DE8D4B261723F8853A5BAF63276EA472698079F7C8E09908C614A0B8BC680F5
+9EBD5DEB3866EE4DE76926BC31DCD160224A056BB6EB98843D2AA129A3B35999
+3A31A60727B74218771BC7594DD1494E8B385F037F1CEEF0E1F413507E89F426
+A88D4D599B8B7D40E7C90A2CE00EC61E35AE94FD68E165AA4B30F3163DA0B493
+18FCC396151A860D96AF51C1BCEBBCD15C711BFB5A33692D7FB570F044386748
+6BF849598D52C58F4E963263CE9A9F64E8EFABAD9FE77B69C1F62A418E7DC918
+87470BE747148D5D3B5C718F9F49E2F398E7A2CDC59216AAB2F16FDFBA741F9A
+9E0FDD43CF376DDEDC8FE833FE4CB1D5E27B7CF160F2F22A05A117F348B632CE
+B9C299669607C6A08C86187B78A6AC4A70C5D6A204153B346D2AF6E4DF9175F2
+31607B29E99B5641BF3A818AE6173008066844469A0837A35C227DA9863D9ADE
+DD2314224B8C3296B93D698D0B5F980EF4E1B62C30EC9760CBDBFC0277A242B7
+CE7989E0BA910E13734EDA04992F06A0A77E8B20C87EF6AC80A2AB7C7FEA5768
+46D2BAD6C8CF1D70B9CAD91EE7FB2F88562D6280C12A1B4D32FDA0A422E248CF
+220ADA5A2AB5597B312386A58F8A21C3ADCE6D5FEE3F9D2A4363835B07527BE5
+BABF7FD63B05217FFC7ADCF2EC311F6B91AB091C6C963255B4B8453897C5D8E4
+B67CEA88C09C23A3FEFCA3AECE9B7ECF02DF65A99750A337D1FC2F13D198247A
+D892F0D9A6A06265820AEFABB3F0729AC4AF8062B916DD3ADB87121EB799965E
+A07438A72CED4E5320E6706DC2CE33BA6085DF0F9C788A176571DA3501A15929
+C2214FFA20A0470B9CE8952CA671C1B717A57B48CC839F5DB4A6D66248D182FE
+C6D0C89A8CBE513E0AA41595376F70DC4EEA7ECA38B8E44EF6BAD64F6C15103F
+A7692126DF2BB08AA38C4B90DD6C39B0B462A4B37729CC59B85105D5C6309749
+F1C93F8B2EF214F2CBB58922F050A80C2EF0F7A0D332B5F5D0209D7EB3779828
+F94760FC65E0F1547CCEC5159B7F751637F8A73FFF9860547CDC94040F432FF3
+0BA714B6665EE9F20A8A56C3D3E6225C3CF95D24079E41797913B7BC1869D27E
+32212E244C9E9184CF56CD15A8F1EA694C92FC45997426F19201EE37CBC2B24A
+A8015D92E29308FFDF9901CFD5061DE67D85AB5E9E5752356F4C98AB864AF589
+389E6B85C439670B28609810859B5EADD6173159903FC65125EE9F444ADD967A
+CCB73B5C4E153C81110C5578C552D914E05DD3A18395087CB147B1985AABB2A5
+A2D97BD3D050EC2729E4B2E05F5204C06E266F552ECBC4472B0710D7A431C3E1
+0B7F89FBB561D42487527024D0F9AAAB4CC4233DA4900FABA883A595CD445101
+45B5F4088B21B546BCD6C0D6B757BD8114A7AFBDDEDCF923016671015D3DE3D3
+3759EE001C9828684374E20D6EECA756DE290F6A020E09D8C411353231FBD7AC
+E02EC25A5B7AB5C681FB95A03D79AA01CD91B0F58CD3E3C723BD40ABD4B9459C
+4AADA21BC33C4F5161874616818BE67923E3FD3D65BD18D4F90691F491B4EF3C
+34DBBD11D03D396A086FE67F18928C5409FC0298D21AAB0779CFA7440FD3A083
+7C3414740EF7654EEAEF51253FEAEBCD7C0D5958E1EE340A298902E4B23E5BA0
+AB47D6B8A41DCE006A4E3671840A4C077E9E948AC9C1FF7AE26D09575727C2FC
+8A2EC23A7736665DC4AE2BB65B475640BE71AC6D66BA0971128E7840654E715B
+EA8C8277C1BC221590A283EE764584DA9AEF65CBB1E52CC41736378F1E294C44
+0701F1977AD8F5F8F2D060DEB4FA32D9D9FC53408522F74640D3444BABB39209
+68C1873D6E0C0E3E10483D67CF70570F55FF4A111F0F4EB54557AAA79115E31D
+8D682671241914FC07D431201AD76319A849D53640C5E517AF616A157A056CF0
+ECBBA141AED25FF648829604626D52BE98AA9B29EF2E2382ADCF9704D0B2216E
+D7408C359B159E84389B5454AD8E10E4C62C592E052590DFEBE546B02E2C100B
+599FFA2942872097FB093540BF7786E7D45A8B5EEAD6D1C1118FEED2635012CA
+178A40DF6F626F6596CC773954472F5D4CBC310CCC041E384304ABD270BA8ECB
+D04051004C71FEB557C434CF3773FA9750F5C2757B7F1CD17DEE48B1437B59BC
+30E690522C3045943D45EA6E51A4EBF8FCC557261689C562BF8705780986D2FA
+C866A3FC22F941DAD2820912C97510B1CBB1BA36839EEF82DCF7368E382A4EFA
+0ADD7FE767994941E9A5D7CC44570DAE3CE7A785D65AE2784B079BAA5DF1D7ED
+C870EB560B792467C72C874601061E0FB3BF003101EAF8BCF7BF01F6DC3A71BE
+32D391649160BE738A739FC07BE94A0241BB41CBE04A5F794C37E2F5C258CA81
+9126D73B4471411D4251283EC936EBE3F8C28EC36BA0E38FD4136F779635E95D
+8D5E5C4E14C680D855DDBB8C1F90FF30BDC971919C7E6A93074A36D88561114E
+6C999B1CBED051B7675B6264E27EC4A015CDE54B0A986250A21271BFF242B675
+9AD36175B01E120D43F8A60FEB9DAED5A70BB4FA975450097B966F1C95F2BA44
+3071E1057B6996F53199879DF834EC867B161334FD281CCF75CA1480F04DDC4F
+511E6EA992114990629034D590C97A6409B520A5E78BF118E11B2BB74F1374FD
+F3415AF23290A4FC3DF6683F1D5663B17260850FB1E307D670CD527E53BB2CB4
+40A4452BEE0F4BE7C62B0A7074A5303B534F3BBAEF96C818A3BCCC30B082B502
+55B5A82FC5E0C6EE660EF38167D9AFD853D48500839B16E1FEE13BB232D55040
+0805F63323C6D228E192B6DDBFC0A54C19C3059E16EA511F33278AE666C403B3
+BBEC3B9F435A9752984B43DC4DC6C5AED25A3D2E73B10B01BA097BCFD167D4EC
+937DEAF6D992D924FC03B53A70EDE75494FC0EC27A34EF8B637357BFE6081EC4
+9731750F93B4AC3D1B3B6FAE7AE7D71DE3F2C0CF4D734CD43DA41A24DA7E7C46
+A1E76C9C1005C0313797A2C620DB3EA13E924BC71B2916C308533834030CEBE2
+E2CAF5AFBC7FC6D6F0D12FFB290A461F7D262A1F620AAFF509F05705D48FCC67
+B143ECD4F2B0D61AA00A69B700209F2DE4988323112836FC1A75409516F86D16
+3D36C7B1E7C4995E19F0370586B4C6242C64E9604D541B1DBC252F782D4F5BEE
+A81FBFF9D7A49307E2265AAC20501FDE30BA6E9C949D5095DAF00ADAF7BD67A3
+77BEE10C62F19F9CC3B0763A9B1A62EBF43FAB15425E7D7AD7E29D9B40FCA346
+096549B43EF7BAAD35FA663928050E3E82551D502403105F7881257039A8D67F
+1B5934CB7FF76D879DC26D6D9F8DB1412E04A18CCC4E30600EEEF35557E73FF0
+B9583317CE899891CC608D3E5332E0CF05C754FDB2256BC946EE256607A1550C
+75907D32C995B1B54A243617AE98E2BA9C042B7ACFB4919970505E7482653F4F
+F780ACE9308C9BEA60C891C5FF175E108C45301C588D4636C09AF8D6AF016450
+F66E262673314125FD1459282BA9A0EC01A7305A8ACFB6FCC254BE58DF6CD19B
+98483D77048A3DE933F94DB60CB3D89A7404939FCCF918464032EC47402AB1C0
+DB66E1F48AADE6A3DA6D77D6124D75B84C5CF556AAAB07FCC2DB87262E5454C6
+4814F1933591DD4C29841719D334BB11281B94E5D44D234212C3A7A42C2FF04A
+9766AD45A1B0498D0DE841D0DCD7C02428806F6F158B7C69B92743892FC693AE
+4A147EE4E79D6F47017DB95262BBC9787D330D3A4A8A85EAFB909E197177EC4E
+F2DF74F543EB7D97B5EB6534D7BF16D16560908D8408777D96D88741604B2697
+67E91C3041645C0843815BB87E0C6CF3BE2F8244A24017E6C2114EF0F51BFA97
+15353712C0F388552A853B285DFDE41F352F5ACF474B8D86491C2F2977FDDB43
+1F00F9C05C87ACF8D9F9B56C3617FEA2E7D8D9195C2C553A6863C734145D156E
+FCC1D17572AAAEB4B0BE5CE51D10BD4273020DFF43E0F1FD270BFEEC8B2BDC3A
+F16B43FBDFADB690685A6891B497412EDC358CED9589836AB173BD20E984CCF3
+59759CBCAE3825BE4A428BEF168DD88717837503804BDECF675BDB8174DA3EAF
+EF5ABC8BAE00FDCA6F1AFEA1C03C14902D0FD9BD67EEB2F344A374688117858C
+DFD1AB9A50E7F4BE806C5C5BAE3F07B8A7F3D4F54A29187BC6C38520895A823C
+4B5B184FBA09CAA547CD661F6B4BF98E68A630D403D214374C554737AD7D5994
+81149DB2480176D618EF15E0517D56BA02FC995E85F2DBBCBD046F723D52903F
+14B617472E7305E9F6C223D78A2F477C9D065181AA86FE051F70F7B52A3D82F7
+ECF18D48DA8C17870E8B7E543470AC7BE549759A1B27F31AB30C68ACE22BC9AC
+E147F8C182255E7262EAC0D1DD1B8FA888D0D5CE9E2780C0280C519AD761AEB9
+C5C3FE40DBC65147F680F9D2F6B9AF3BFB5D075E91CF3A092249EA71774FBDFA
+FC479A7148B477BE528C3667F0C3CD9C1CB9ADDF4F4AC8F93E1FDAAF3FE1793A
+24F95BD0EFFDCD59298BA7BD8DD48A718C660E195C765E450380F771183B302F
+F5F27514863F9FC48CBC94306556B6DAF16D54F9CEA9C45A8D28AC6CE2CF954B
+771BD117CB67E8F93D933BD0693AC61D82BA1381D51AC427425F8791B779AEC6
+20AA9905734C7688F1B1EAB3F1F713B14883C48EBA0E91A64C7EDC850C1A6D7D
+186F405C48125A77377DE45AE05B6BB2FC42849EACF6F6F9C003EA93D00B89DA
+79E540A2B9BD52113D41618D7483068F923B847718FD6C516000B5B51769787C
+8DF0B33977F61AB477861AB8D493ACCFF30D4F39511B0D9BFDE188FBDAE805AB
+5ADE2C628E6E047CCE9EC352CB63964DC90905AF18DC3C7874C337AD2184267B
+DF974A6237B97451A0C77410EFBB3A8A3D55643CA08A8EA2E0AC5F0A9375C461
+E4B343F80CEC40568C521447BDCE1A2E5D45408B47E5058D328C8BC323DAAE9B
+274E797685343E37583F2F631BB07A8B954A5124FB9B90EAA7E22DEE4EA616F0
+C65C57864A3AE70F4E7C09328B845F53AAB943138E005B560EAA306EF67AACDB
+122F74773D084FC0FE926AD1FC0C3EBC9BA82904EC2D6596EA65F4B3E4B5BEEF
+74C3CE3CD45EAC63D7202E2FB9EE03AE4DF5B30E0C78AA18F38EAC73045DF537
+03D558AFD6CF63271F3AE844614482BAC4A34CECBB873F13888C35B29652E763
+30087613B8C3CF47008FF0C2B4DCE7B4FB86D0B968AC4E98882EAB48F41F7197
+9AD42A9C46648EE7F0F270C203E125C92CD0FAF9ADCFA05AEB08A69DCCB712CE
+75D6B6BE60839492D18BA28DA2251A5E5D3D9504100501B32AB001F5D4AA2991
+ED06C8F063F93B888D504C5596CD273307730460EB46BC5FAC040123AE2837CF
+59E9BA4C2B1E83412CE3F9CB5E2FC7DB0D15607276D93B3738C549619B17C0D8
+357FD5094A703B74DB8D61525C3FC1DCCAD810F5E5278897DEFAD47FE30350D0
+C9D3D830D5447A8E52AD2DAEFFD2279EE01FC95F4C38EF18A6EE079727FF62F8
+7F4D2BE5B80CB0B14DF3281A312EEEF077584D7FD2F0C06B6047934D745F3396
+AA7ED80DD3B1E3D1FA27D68C68F1317D30FB14C6D9D5F31EEC05578C08949A0A
+866D434E4C62087DC082C036BEC3F9DAD2A26BF89687D537B58A9001CF3324A7
+75022AD2F66C9F4200A5EDE0314190F6638E8F7703B25C0912681695CEF8AE5C
+E0A8D860526C6AAD0B0C3CA9CEABA721C69D93D5240F186B849BF50843DC098D
+9F57A70E3B2F0961B304D771FFBDBE2B5B737FFCE21DB8EAC51594138F63A104
+9994DB21D186FC4C317A14FE9FE9FDA16B9B9B2F94E1E8A9DB232DF8B23C3704
+53164F61CCC22789D30C7145B6FAEC3D0501AF29B4FFE749A091BA859EE5CAE9
+9A404B19E949311CE275101FC885408CDC12C46AD88F530DEB6FC3DBC7929613
+C5FDB899B93807527A6CD8842B09E701E3C2BDCB75945C4B2E473BC4DE2C9B07
+5DBF4243D35E70B03A26DCD0EF55282E7993032441E8B6EBC5EA8923931B48AF
+3A9618E3E6759C2CF32332BE904D74B41A46B53EC579A8CD490E2D94BBE4131A
+89BDA47D0809830EAAA4C6BD50D146AC79909979E5716F768D1D95919C6AC4C1
+A63AF5CFE0C31F4E8CA5BE704EB74876DD3E8BCA2CC14DFF2C6D3F15A5A66564
+2416789B275E6FDC2E93EBAB3FE9448FB38AF02F3D37D1C9105B03A49DB0A86D
+275CD3CFF32C1250335100991700B0973F3D5E54C39D07D260C2FF3E054D2D5A
+728CA8DF72801940AF4F129FB2E5C4F32DAB16258C3DDF41B41334304C99D25C
+D164D565E687B6FBAA406E001BD778939720B725B29B0444EBB2E22AF08A50FF
+0C00EA68F9D4EC2C0DAE1D0CEDDB9C7417A413F5173326DC5CB8275021CE6F04
+5A9B58A4D50832A861CDF9C9D31525D35A943AAF66A34877DF57FB6B156AAB19
+3EF93C8C4B8394FC0A51732AF46FEC3497D2D84B19F64AFC3BC52B054231D5B9
+A34D45FDBC25501D52C6ECC63492962B685FEE3BBB6C2DD70A84D704CA35D745
+467E73C8E5B6A2DD66C370D412525628174D5E10201C84C9C4DC77D0FC4EFF73
+293ECBD31C01A74379DD9C4F90EAAE5FF84ACE13643356755405F66C7361A2AD
+8600BE9E98A52536FFA517A2D4AF896663E6B930A66E2DFFF2C57D4D7A5C9F69
+F3154F6F8375E9803060CE0D4C45AF6475E53920957BF365961DDC2DF476F74B
+5149BD0687AFE0786B18D2BACC769E28A6E2E8BB1E3F284992AD1F1DC058AF02
+CC94EE0845124DAE980E6D9ECEAAEE1849027B0684DF492F168C5DE0DEADF4D8
+9800BAEAEAC9168846D852C49387968E86D65ECE24D6AA3B60A64CF86484DE06
+F540D5FBFA86BF810EF5DA04473E8E25345AC9A12424150EB621CEED8B1EB090
+C76FA51610E7CBE23C6CDF040AD880B73F3331F85824319DDE430C00AD7F809D
+D408879B1FFFFDA10384BCC19C8F3499B63C19DCAF99A5D0C2A948A7CB69E094
+5D3A79A06DCD7FE2122D3B3E646ED2032B8F82DBAD82A8563C5667A5F015D31F
+8FA8AF22D4728672AEED085F88DD7DE8BD13B0E7D0306969AF29AD850E149889
+2B4F81D1592CC36DA27A29097B8F720F477E6F9E26DE7C265A54BE07E036B7F4
+ED5E303876C82496C2C5396679DF6A91802452F079AA8E653D13438B214AB47A
+282D714843AFF0B74BF1F72C4F7EE4A012EAEE04A82AD8B2EFAAA33A87977644
+AC4F6E5CD474A6C8B08EADCC1665E3FFD09C78FF30CB4929CA140E04795686BB
+C985F7CEB0363FA650137E7DA8226A45810CA44175E66ADA50A0743211D3FC9B
+11B4EF4B5DED09A3CA69E48E0ADCFA5EAF749DF18AEDE11F9046A8629880C9D6
+38BA9498CC17F4DECF25ABC9AD80335ACCFDC534C82A9A479EC9074A1D9A01DD
+96D464E1D630688755587DCCB5E8C1AD4032B4EFF0E645E2E2329D08128E3D11
+C8D22F4CD4E4783DAC3D6BE9AAEBC2F4AF3DDB05020796C972677AB90AD7E8EB
+9FE96669A4615BFE4BB77CC787C941B7A0FD430AD5B9D7B63A26E954A28F60CB
+E380AD0BB4724D99F3F46E73160555A2BDD7FF5BE83A2312F7B04055EBE5B2A0
+08FD96C4C90DD9A06DB0B3D5F570E8CF4E9FD7FAEF7B5042A5513C1988E63ABF
+B3C8E1D8704041E279CBBF208AC23385E97A6EAC8BC634E3F9BEDCB3EAC4C57A
+EDA544E06719AF5BEF69257CCA51FA7840BE8E21F66707EF31300DDC70717F44
+EB2DF6070007E7B93D1357ECF8ABF097B757524E92D31524638E69E63B2DB200
+4BA1E338B284936557D6DF04AB23741BCA5CE6B34099FCBA07CAA9595DAF1E8D
+F10FCA58FEBBE12F8E2FE6A0680EA5E6CE0CDBF9A1C872621CA4C10AC91E3F55
+14C3918E1D32A2078CCF4D109ACB79C3FC55E3D222B9BC8E1D0CCBA5DFF91B1D
+76367940D4CB4CDEC260F3152E03A86FEF74DA6A1DB82522B496C177A77EE9C8
+652B0B6DF023E60401AD8614ED9D77224D822F4B961EEAB6D9911922311131B4
+49167FEAD3E3EC5E251618F7D1986069847C7F1E7503E04B48DFE249135CA5D2
+8903F8C25A141CBD2E7117332EE320DE0DBF03946FBA0DA27F8DF4AF8771699F
+696C489E8AA7EEE92B7824B5A03D8B297F9C606E64BC376B10C5C606106CA8C8
+B764BFAB04512AA9510A361CE189858A9A565276CF007EC6BC1C7ADCD6C4CCE5
+CDF512143002C6C2376D3CB2624095DB10CE42032BAFBFF7FFB6BC8AC5EBE973
+02520AE31D24A36AF5C897965EE3922C280FB056A36B802E1FD49A7C590F9A3A
+2D699F0DA5D50F8EF5C01779953A5BB88EEAFD3DB8C428C6514146B1B55348E1
+E2CE1D3D4A13A84A240C40084EA97B971EFA414370BFBFAB6F6342425A324388
+7DB7E4A7BF1FB654BC7DCB56C7E1FAB0848828B86F5CC8B069055B76986391C9
+76CCF12F945173646F85C1676235855107EBAD75BDA3CB3E655BC81AFDF3F629
+F79687F72BDA04FBF6ADD00F9A1F21C0007599A177F46140D6004D06F6CDA03F
+F087938716D4D6B2806985ADCC344B17B976547AE0F745FBF4B8663EE4F39196
+4B21F9AA8442DF78B1BEF23166510DBCE4405A20DAF5AEB09C4ADBE05169A52D
+839BA7B8CC777A0E4F685686F344716E2AC2940282FBC795966BEB564B018DD8
+FC56F588AD42CC2630ACDB1957CD2F3A461AAC09E95A549144809DD7533812A5
+7A8BF8BE337EB618E11D24B0B2C34CB39BA93DBF0A588DF611669ED72B92144F
+FAC3BE40B7B1E56B38068008B17DAC0C6648E5868A965166A798B9C918B5FC67
+E60AF10D6191FCB156411ADCCC75010D56E7A87C95F7C1CB33EAAC7231BAA719
+B927473D40BB980F3E9D304567305A653290423E74BE544D39BFE92E0CE23BE9
+0ECCBDD14E74EDC3C19B121128E807299C64E68391F13A96CB1A418A450AA9C0
+982B3B3CAC83E11C8A6CABC01F5F358F2BB79578D8298FDB47151007756597FF
+0574F3357B719AC0E368A14CC91F6E65108FE1AF6797DA6AE4CA52E1B15890B0
+888D8082B70CA6B7BC5FB7AD9262CEA6FD18611AA1D7378735E923A6A45D1869
+81801E21906A4D73AF8D397B6DFA28F52355FBF16BCBACA72DAF170FE4CED247
+F8A80C1CB66BD33BBE1AD30182305ADB2A88BD5F9B435B472AD6564845EA9CD8
+84738801D498CF826C540664BC8E87B868C982E49D77916CB87E10AC669FBD19
+2CAEFD9113127041479C98CF1B2987A45A22ED99B048EB76AB183714E069D51E
+6DA757A9A4E17E07AB37FFEA7618ED5E583F4910C7EC87042E8180DDBA7CF58A
+B8417BBCCF198AFB196124807215030A9204771B3CAFA90876A5193F954D73ED
+F0BAB43D936D0617D804B6B2CACCE9FACD2035141808E583A6E4AD03FC1719B8
+7BC89A97156B32033B9A3538E348C8D7A59183132E9BADA34F1E77B2FC8CF783
+3ECF3E24FEAC7C7BE1E236A94C9C44CEC78DA17D4D33BEEAE1A76CB5D4F0DD8D
+93E332D493C6D6ECE0FC03CBBD275441D61AF9A42443355A369A0C495CDB74E5
+AE071679D9DFA6715543D3FC1B6E4F66E5557428C616047C498DA9F50EFA1683
+AADCF6B403F0EF9A78F1F8F1ACC478D0B5B66FD60322C5AFC4C79557998FC714
+41AAF6009A53424935C0EEEAED8CB4513D8CF9AD3B52CF941989591FAF2696CC
+40F1887F8EA77AEEDF67CD3BAB4BF1DB2E57087D50A1F5944942CA5CB7085240
+1929A28CF489F26F59B850FC78A647287740EF2755A91C7196E4A53063C42BC3
+575061B2CC994D41EFA131FCB266A9AD1E18DBD854F2B99846EC903AFBBEAA98
+B32671B08856D84FBB7BCF5B82D245F7DD6459CB437B4183ACA555B4B274A63E
+158F68D8873925660D260B4C7884014E735B72EF322D646C4CF5EA4917CAAA18
+3FF6ABC26D16ED118DC4F1B85B3405A6EBD15C1A186D7C7A9A8D22F6F03B5DED
+F11167C738C758092C6BEE44D03532AD27708884E6F3EBD040A906D59E81FDEB
+BF0C0AD4030D661DDC3048CF4883A59C362229EAB078978F7E62B9AFD9E329B4
+822CCFC1DCBC7D0714E5EF2B7BAA7126894612E5D1F4CE7421DB0580E8C3CCCA
+BEC8DFD6392E9575607C895CD9FA1D78E92B634D62F3FB5DA75BA65958F720A8
+C0006A580F39D8B63D7351BE480B24B3E10318BE8780D486D3AE2E510217A5A0
+3936E396AD22D01D611DDE5F0F5140BB003D24599E9238397939ABC3833B8B79
+5C2B8CF9DEA9F3DB71377EA34DFF4A7062E91BA9E090A815AAB4EE3CE94A4619
+488EB722ACB22B32C391633A9B6BFFE656C75BC7A9DEF0E02CDC56DAEA9597E9
+360562717D81560E24972ED5E8C9CDF7F54B30792829A9136D2CC9B1348504C7
+A2F500383EC033F4756FE20A8EC0B1B0643F8644C1D871AFE21412EF88BB7497
+C79E3905528B6B2F744B9C9F10988BE7D061F5A5F56C72EBFB94A5FFE994A2C5
+D0BBD6F79F2BBFC9B811D6B4AAF40FE1D3FA6DE3EC49E0F24EA9490D6E3F81E0
+B56FC8B4D6EA1A0E899A9C1ADE24693A6D7E4C214D0847E8C0D5B31FB133F4B0
+F77BC331474486F8E4A69E970054D0802BFBEFA856550D95FC2CA900F5D6D3D1
+38A892C66D541937D24D9FAF5F54F169E5E78BF181F2C2E2B2E2B5D6E0F21727
+1E420D2E69203BD76417DE9A70685382A0F3329FC26C671537CB07764D1165A7
+6E4403882716938A18DEDF1292F688F657E27FA8E5D86821978DB65B0166FC49
+E7CD5C8D1C6AE1B78EF02E8A81B51B20EF5BFA1EC1F2B80017292FBB6168CC82
+871CA253ACEF6AC823372F41CC766617377ADB19FD677C46D7CCABF870DC5DC5
+0366E0A5750ED38A2A86811F9852E9878A95D3BA0F6CE7FA2670480B6523BAA2
+ABAD6A9C2D43E2BD21F2EE7222D21DBC394EF4CA9FE693A5A77CEC2EA60645ED
+BA3BF1ACC360B253C970F7BB86281CA813563CDEE08817DBBA24059FF290B550
+4F803469E990F5ABC2F66726E7D04E00D8E634CEC60EFF5FB69ECCAC20C2986D
+65F5ECD610BAF2EA2AB937056DC724FEAE337F5777258FB5462F3C94AA7E94D0
+FCA0B0684F884D7EC6ED8BFD0AB95BD5830CB4ACBFE139AB0A0C1C288A318B59
+A9A3E79A5D1D8A13ED7F632C7E52216E16A331101EF404489B2B095C0F787063
+9370950775CA15495982D882396417FAC4FF86355E203F53B33F35D4A5175EAC
+A78FC91C980A6AA5BD49D87043C4686B224D0535C816ADD1D48BB45EE7529E64
+0EDB35B4A27C167DFE994EDFB41D9D166802E37318CB6D4CDDBC73F7CB30816D
+E9C645E32C1B7513199F8D099CF39BB8DD762B6A947AC26242B3D51B11971F72
+DA4F942EB19C883CC0749E1596CB89A1E6EACCB35594FD8E272F1DB7529B059F
+FB204FC404789EE182D117AB303A886EAACAC08999B19367801BA5622F5443E5
+1EB2903D603F215C9355DEEE42A5DD29C5CBAF1BA1FD52B9F8E1FC5DED7DE91F
+34A4461661549339B595FEF063BA44CC0DE7428E131CA38106279246F5B9FFAF
+B127B9B46B1F5E050133071924005746AD3D6AA91E4A0E75E5056AC983A6141D
+D3DE44D5B37461A76EF6A8906210456F13FCD15203A80AC071FE10B2F064145D
+0C7FCF12AC9EDAD42EDF4E327FA57D6BA92607F41B7E34A7DD27945B4AB2F0EA
+532AA886EC057F98964EC0CC1E4BE095ADCF030B1952293B7B6465919A833D52
+F24EF2D9BEE963F7A33320CE29D54471526D4592CB09B0DED834AEDCAE0B629C
+5BE4E13337BA87E9D64D744CA5CE709E528F7BBB7C35A3444D643B1ACDED2F6C
+F4CE7ABD757F477BB4F64459886814743C8872DD2312EB952D5DAD81B0A6E52E
+AF1915A81D5DE395BE25B24412ACFA3C65B7E447BC4B801B5531218BCA18B0B8
+D72809B5B3DC921B2BB0B76B91618064F45F614C3B3E0506CB24DF52FF8F2555
+6B231AD0088DBDDE51908430A8102E0246EE56870D08C960E00B9D49CFD7D751
+697625B30027C82D4B3AD0AD5CB90CEE2A2FF301608967581CC45FE77D67EFFB
+2508905DFB42A0C335D1FFF2FDA1DEBE81C39628F53601D9ABAA6211D044F930
+70378306273D11DA99BE820BFF208CE0A7A81447056FA422428A6A21389CCFDC
+5FC34E06B4EA5D9C5DA9AA401F1733E2CF6669B438134AF47130FB9838208A83
+668067B89C9025CC059E73C6B4C332E1D70BA59A83EB7E4407D000167DFDEC42
+8B86B4B1D5772DBC673CE5F8128858E46EAD3A675BB5BACF61E0D1114D5AC0A7
+D4BA9FD5C37FE37D6823A517F39B1FB14B01E38597E51BC93CB836825ED1A3B5
+B841CAF361302234A2C3560FDC71BCF6D8832A1D74AE60806863BC1F3271640D
+73A10720CD078DAF15652B50716C0BE61EBDBA0AAA8A6DAFAAA327C69C29321B
+251BF50D418596E84DC3BE92542887BC0785F6128085F019C1FE9EF33E02A968
+DB0504FAF26E033A05C4C37E5946EC500C5941F83318E765DCBCD06D4A09B208
+56F226B0C8A9C55B6EB087C936F7237FB2A3D2A262E9C6F95D454AB92801BF57
+B5788CD2C0FBAAF274BF5A8BA908CA18EC8FB5C52368DDBEC42F9C3E6FA16AD9
+6D4CB47C2359309BA3B458BD05FD4FB40EDF6B495DCE6A091E780B328BFA995F
+869B5ED92BF513511C6DD88690114C5F3626CC6824ADD9E2BBF528158995DB9C
+08888D928E420016C254485603C49FEA0D26E34850843A066F5628509183FB4F
+78C3E0FFDF61E91C984D23DBC5677442559540A798E820E3F1BCC192456E9B53
+72F2EE0EFE321115375F0E43AB35256C770F5DC063DC7DD4CC59CECE9E7F3BAE
+BD474CC7AA33FAEB2920A44D78A51D3B75964A4310F30CC0E33018D3E365F947
+A69434C67400EA09F40706320D603F292862AC24A488AAFAB0392C470C84C912
+11BD82A3A5A3B70D3DE85F3095A6AB122A930F8014AF527B71B424D29E91123B
+0934BAA13F0765A883CED744E967B810EF265AAB4F7097A817E94C580068AF35
+C141EEBC26D24754BEC2FF730ADA142BEAD3DE4292E93A359E701D90EC594E6C
+D1FC795EE82FEC8FEAB7D21C656D079645F36FC9FC9D7C8B35B0BF424FFCD466
+65CAD025F6C31398018304AF29117430B8745D8372FAE966404129C8BDD5F31B
+BD827695C491C7E6D7B15867AB4C5DF488CB9628C6C8C114293337043B1616D5
+6F6B6C5F75238B27ABBB0773565A686BFAD3593BF53BA7C8272E1C597DBA0D6F
+D16517424581069689EEBF47641F9A0E3E7367423FDD88FDFCE78426A0D3F0D9
+942F66169B84E5418C80585989E407B5415EEDD8961BABB8AE61BDD51AE60BCF
+033F5360E7294430CDEB05DFB40C382D28C9834782B68F73FE9C129B7AAEDC38
+E3B6DD8DC041408FA064E0AC4EE68A7C07D96A51A1B7C65CA28951E38B58B774
+0312CE987BBEC2B3C6F20556F7E8066353CC46D8AF15DA8D7CEC2DBA8A3038B0
+BC09C733C76D095F8BBA0EF44D6C1E397B19A866364DF8EAD8E2E0E7531C7525
+8A6451008591A02C59FC1DAA7C83A3689A79037EB90522FEE181763D496A716E
+C01C78642DFFE2589D3980574220F09B144072E6135DEF2919CC852056C82B8B
+7F8EAC363D0D89CBDFA1B40505F3D356EE16E5170FBEA46B426E3D88FEBD8E23
+59C2FEDC109DC7A300FAC3EBA750BF6071DAF7327884D3C7467A15189AF18DAE
+17F6605DDE4E2B2F3AFC641503E4DFE27F462705B356F7C17E1AA0E3D26C56EB
+DADA9BF8B1E7149459B958001093DE38391374A78BEF8951DB54A69964525693
+63C5017ADE86C0E2CA89BB581FF57D0370F8AED9C95E326F88533E690B1C591F
+ED30E893431F6F615ABB187130634BDAF94568E2E17613658D02B29A25F35F06
+7FFA714B60A56D2E9D586D4A4DBCFF440A2B47B179CD456EF099A34A56AF169E
+5CFBC9C59516407286B2E11184F91EF25925C9274A6EBCA6BF38EEEA96E27616
+5AF1E9F5E84D9888F8EE35119C43CD7F02DA23C130A2D1A753A2D1E25E0F7478
+1ED3F6BFE62714F53DB12D15138189D0DA31E79F18CDE3FC84CD6D6B5EAF9E23
+F90A1703C6C9B435623FD375F926C8D013620432174B8C765299F6F08897EF92
+F129CDBDC3006D3755D3EB5D2953E182015BED56819D5A7A1773CE22214CC7D6
+0ACECC81DB66E1C6AE9AB70B77F6DABCC09111F559DF0911A87726B44AB063FC
+1CD60C964334A97E2A6604CDA700C112450389FADEC5DCFC12980381CF6BD92D
+772BC45964247E3E39D087B52FB67077AA8197EDDA4F613DD43D1A3EB7D6F686
+8528F7024C7A22B61A33E43502CD37E91605E0EF16D28A9A2806518B839433F8
+1802738E0B1BF0C7E95C4C1500887FB099834FE6DF4CD9A9D7547341A6D8CF21
+F49B9F8E7A9D602644B31396A7270C989F1A5BA9E3E225BE1F592D02D8AECA8D
+79C304CB010A2645158654387C77AB0083D08A3C0A41B29453908AC57C181431
+101C6EF00A8A55B6CB8513DC8ADC5E2D6FDF41990E6B3DADBB607CF37411345E
+42D0DC8AE568B2DAC69CF347B18C175C0E91CD34ECBBBF3DB1B5E6CBC17AC9F2
+8F77337D91885D14FDA32EE7A7367A3A382E8A894A9AD550DE350398FFF2BEFB
+C05BB7A915B8DC4AA5AAFECCBF716F518CC608E1E76588CC77359CA228596279
+F95055FB260502B1377E1AD575D3C1FA65DC158057E071A56D2BA3BD77998B43
+938DC18257C526FF2F9625CCD7DF0AA3D50730B35720E75777DEA2175017A503
+A49509775646DC8D8926A75D64548B9E9C01AC33502A7BE04BA31441D5F39CCA
+F889AA4D6B0CBDB9023F05B39DD7CCCA53608173E9DC5D45E772A3F7B4F7C4E8
+C3F7E7DE51770B2C887F14C473EB4F1A2FA420F64F4DBA1A6B651625F2AEAEA7
+8A030BC2B65BC4237AEE381DCD24B6E9940F39EF1D4BF81DA1A25140BBA7E1ED
+FA371277B13A016B264B14833BCBD14E6B3F71FA822CD0E1B174B569ABDB6C6D
+CAFF1A208C8E409623A051033AC99A06FE1FDA685CAEFEAB404804A701A702DE
+79EFA5F9DBE3587A2B8434BAFF152B9F18C574FDA77AB286FBE21AE741813B4A
+CEA10B071946CD4EC410BEDE7C68CD0B5142C2A99C836861A5B6A07FFE60E7E4
+1201B9966CABE2B10E71888FB8FC43FDCCB882DC2792994AE178B6129F23FC45
+32BFF56904E68A53B85FB8DC55D917C7DDA412625BB28CCD6A74273F5204CC07
+962DF7D462C57DF81738A8AE709F63BAE35532607CDDBA7CAC46F6789CE52010
+D84412E3CA30A0B8DDDE45A1E9956B4A7A8199D3177B5CF715A120FBA413CFDD
+ECB451EDF3DE65A8FC8069D4D1F65890EA6D6969D8663C5909ABAC85D4941312
+CCDE68C63BAE2DC990B6D119FB0A8ECBD5A11C503A668FD66168BD051E55CCF8
+D0022F58FCD3B6020A70838B97BA5A54436F41D26F4FB60EFA36F9E632BA44A8
+A21F57BD665EEAF35BA65A4F2090F3D831E14B9164183C0565DE2352C00C1649
+0796E84BDB6B679DA065AAFFFBFA67CA8AE9D024A3700959262EB552C67FC216
+E61CEE4ADF9BADF3A38B4A618BFEF4CE0F96C5C382641C99B706A9BE793B24F8
+78CD09F4CCF19795F93B8B35AF5598470124204927C7EE6D3A87E05F40626F07
+B9521BFD489B136B01F406BCAC98D60130A298C5C455B0B2CF05465D268C55AE
+26CAB1A2D4D740EF3D90914D334910DB05B5BB62B6863A4CFAE3834014D94C38
+F8E20C677C6A8B6BFA4B1EAC29EC87CE9E3E08C458219FB6B719089AB6982F75
+ACF33109F84FC1C7F0F542FB61F78587B7010265B411CCF63F00EE397C6C9D39
+2E33E50B1182385C79773956ACCB5970A8758638FE8069401540EA209B2D5AFB
+3B20D9B33A51EECF3D65F0DA2C2063BA2A2AE9164761FFB5D1D36F2E21F29F31
+D2852443F8C6316545C9D413F64466CD7CB3D0DC23B5C282FF5E2F91B63B7486
+83800E8CF3D07434DF16557AD530DDFEACF3CEDE34C7C4ABA3278E815297C7E1
+DBCBA8FA4291D43F1D1AF0E35B0E09A2AC97F10A93AB9F2510BB690E3C635D2C
+986179ACA326D19BB958BC60382A9E8C765A978A148CF02403C2C9866D78F05C
+3DCD029540EDDFE623C9F016734B8BC19BDFB039BFF4FFF409DFF33F62508298
+B152FE332127EEF6B236AD5C1EF9B145849788311477ACC365D9E5848626DB26
+773F93F0C44AEA8B014A5A7125D09E28761A8720DA53966B251BE1C1534599F9
+B246763A28D4F9E3C52C33670EE390FCCD476419FA1C4429B31C055EB8072D74
+0C1FF3311293F931EA7F73A35E870F6D81D0FEA3CC445C841BED7089A64EA42D
+947359421B7EBDB671E2E30306912EB99A754AE5BEC90783DBB14BB0FB3FBF95
+25BF143F7C9D9D6DE690C88CFF219075D9F9698D23A5C428F7418DE625217393
+0B79113E1D56E74ECE402015E0AA9FC320E447AE0345FF429359C48D617CC9B4
+6FBF2F72C9DBC94794BD9584E23F757C49425E7665A1A97CCB278AF1016E4969
+C813A40590E738E70C5B732537F477E9B80B3860B6FFD35A631DA0B6BC84E4A3
+8C1576C9EE90FE2E5FFF30F1ADB9581C6296D442FE1D3B3526780C5F70F73E07
+0233A3C769F74334BA6560ED81163307DC4AE74060B736C49BD83A837CCD7EF7
+44EC891EA5828026982D9E56834A3663150A462939E6557A5AA30C47C4EAB037
+589BC1710A9F042AC39006A5170B0DB0A952257D231498633D99B3D405C2A4CA
+D064E43E50ADABA18A80301460C2F17965C5EA3DA09A7C96274AA1915FA9E98F
+059358763626AC7EDFAE84B026CC16BF40296FA76396148C57F5C0E219B759A9
+33A46A922233E0AD0FC248DFEAD35B8B6EA330B97BFB4A6AA6DC27DF5082AFC1
+C17A6DED72F61D0C7F4DE52A3AB13734E55A875946F6D36703BDF1B917A758B1
+C1B4D00A52E890C43A7B8C0BF725F82FD416DC8EF9BB6E0487D7682F79DAAC6A
+C9595E33481A87C6CFED013243C5BF92AAF6D700006F608E30CF70FE9E9E0835
+255F9ADC616A0218C7D4892B9188C61C801889291E17344448ED2D8C56095302
+E71CBCA27D70DC38B8BDEBCD7109D47FC1B6E6399F07AC085BE592FF9B5E4960
+02FDEF5F965785540CF412743E0C71126A68272CB23128133090E757249854BB
+3F271F2DD8D7FA66985F9C380C104FC3A1A69A0CC03E2AE81E1EB3C7A2C3C297
+BF91DD1A6E2B0D3798C3535717F8046E92EACDBBA1ABA7D68D08AD31AE673BD7
+D10BCAF3324CC5A668199904ED903BC88746F2995ED2F5B1B49C73C34607C632
+37FA574A1F09D9C42789077425B8153E8F7F36589B1EB8917C87FC29A5E97E14
+3FAB4DA5EC20C38DE0CD0863683B58DA5C412A72C1BB8280A9236A1600BAC9E4
+BB930318B55E3006E5371157B1E2567C9AC8FD1FE196AB8AA86EC2A27B5207F9
+81AF2F85115BBF22287BD8A041DCEB89B3F5DAE811F1740D010C345F53FCC8C7
+BA7C7D685ADB01AFDB0D30CE7CB0E3BA122B9C8FA4F2CF4C5BB5793439E57137
+9D2E63B6132100B459F31D822AA742DBA61B8CDACE93DA530A66C034125344F2
+DCAE69E08FE774A5E09B29466898ED616EAE3458478888DEAEE12B6C1E2B1228
+A8A7C9AD6658D0BDA20DDFB0B4D831AC61CD216A60DE294C7408F7E34487487B
+B462888649DA65F548C6EDE671FF2967FE50331006EB5E3636EA8998384CFFFE
+0CE6AE5DF4E49ACC5574C73223CA5904DABBF73437D55E2353AF9F7B17E33771
+775F67FF5C53C5D45C40E60252F70ACBDDC054CB3867AF0BA7B01EFACB67933A
+404D56C53520278826DC106956E120A34A7E2B9AFF2B46C2AB3E64FB38776E2C
+456B5901398E5BEFC7CEFC35AA61E497CCEADE62360A0EE94D0273636A6CA4F8
+F144CBA6697FE4707361E09ABBA371A5FB8D8FDD319ABEAB87A5C3AF9889AA70
+B53E3C5A9565AC1A2F275EA303D579A0221004365CE864634BBBDBF5036CBE63
+3B5358E8DDDF56C65BB54A9FDBA710A10F9E6C505A2D8D11A6A17551616EEAD5
+679126F3C7D52B17EDF2AFE286454580A34F1BD963699F1AB742DF7CD9EE4D34
+17DD8BA2497BEE1933B02EBED1161165924F04915D1A9D227B719AD876995D88
+7C67DF53C14C7FABDC5B4D773CCF361BC58413765E7DD21A439E86B74795203E
+24ED7491AE6C9FD9CF3310D3FD1E91FD3F714013722CA2B13DA3EAFC49A2506B
+58B3B2984A1933CADDFDD10C628BEA54C798AA4E0A84FB4639494814FA18D79C
+147BE5E688F182B901F9730DA6C8CF362F915F69CC74ED4B436E5DE3924D7DB1
+6B4728BC39E8F9E0841865BFB0AEDCD7404D48ADE9EAE74F6C1E9FADE513539D
+9056DF8B2F6168A86405EA4635C19E128DB67D6F7323BC14A983FF1CE808B4C1
+F9226F3C6521310DED43A16EA768C8395E6584E90C5F24857BD989C1C6C2C248
+06D4BCD3C2E271C7AF22210EC2A3EB1A73509082819760E2AE9950D761828F9C
+0D1DE7B23A9DE64AC61F48D45956B5894815F0DE950FF02FD0A4E0355900C665
+D1FE0B411D4E34B093E17AA8087B606AFE7B2E909AED96B799922953C8416148
+7C3CF96E27365C3A4CCCD78849CD9D9D498D7747EB8AE8137B16178BB67B7B36
+E41780DE90DC23072DB8916BC8C778B79215212719A88744DFF9AF40980996AF
+379552BC08C8FFDF6605FEBF9B3CFB6D3D27D07C49554DE4844981DBF08A43A5
+DDBC572CAAF60EF7F8C4137C38B057E1AD5D953FA64E6844EF770A9B19B7E643
+F376273E028EDAA0729CD722C57F05023957F93B281F91510ACBD72F476572F8
+B66681AFF60DE653F4C8BFFB5A9076447AA5676C08828D7C6AB803AE9063423E
+3FC8F0E7DF5F8238EE36A7B8DBFBB88DFDD587D5C9133B69C6E4B86D4FE42886
+F0BAA809350CC835274614E4DCFAB77A8AA83916E5B65351273A69E6F9B5DB39
+205E3A62C2C4F483B3D8BB2C4C7C72E2ECB6E024A275DBD82F5A1A9ACEDEFF4B
+9C5175BDE3DC023253026E5E321A0F5867654B8F11076CBD6D49F2A7A1F45420
+9CDD551806DF00372B4D0426EF46BEA85816AB39246F38427431D513FEF9E143
+64F3A06ED9F59F1F0C250C9C6D45FD2B6C69375E9E0B89A4478A5EC458E132FC
+433E8A93D3497DAE9E1AA0AA7CA895B8AF67913CF0D13310DB883D388AE9A35F
+F5780A0AB6D55CD9B976014689C185E9455AB5B9697DBA8B9132C517133CEA4F
+CE40FC2BD4D9DE31A6A5F60E00C781F6763DC03DE8D159CA70048B8CF6D1EBB2
+2BA6966CF523579CF5FE324AC1C7C12A50A8EE71A55B3A6078AC0EE02E877A02
+18F886CAF9FB51F29D01E3F4AB961E5515454D05490F4C57AFFC4E63C0D1FFE6
+C4BCEF8F67066A4284ADB88E569F0E7D36269A6A0DA678CAA5C1B1A4BDD3800D
+FA3E3624A3698300BE00884235A996F611644E19AF114AF29E045FF2E4BE248B
+7BE9FB19B64B2DED77D5CFF8D85A332A33EF073BC94E30BD78AACE2B40C9E04E
+1E88D9EF0F0116E27E9432D461B64FD5F4055EB420963FDA20CB8D746B6AFD30
+4C70C4DD1AE440D04C6DE4F876BA09591D1A7F7F5755DB5DBDF1AF0FBB9744A7
+051885F2F13400F77297D66BED2FB53CCE01B56A7B0F7A74DF38BBAC0BB556BC
+9EF9F4FE429DFA89650BF6453FD1B6F472427FF2F91DFC218BA4690C55CD23FA
+C7E2B86EEEA984E0DF8ABE65813C6E9068B878F22467E7D981601238F82A43AE
+4F61CD56ED2C3828D7DD53AF88655ED8E00FB33795EB13F5A166626D35A94AFA
+3EA4331C79B44C8AD4E85E8A58248B83FF91BFB89C64CAE2AA2EEB95677B075E
+3772681DF3F512E315C7266B9B6DD3C38619E8F0813451BF48660E137FC76714
+F799E17380CDE5813B4B6217B0D0A7763A754065E2CE172EE6DA76FF5038C614
+0050F3BC4DD98CFD8C0BF526ACA742F4B79B53708DD52EBE58B00CBAB52BE921
+C131A671AD85BBCDE61B97CB147D9786EB2C01DB4425E827C3297F9886BA6354
+C526D89B6B4629CF7DBC38AEF5D3EB58E92A7BBC14F796778BB3ACFC654E3CD6
+9B0C5EB8B24C3279D46CCC0A3EEBAC870EFECBAB222233E62E76022E9C80C109
+70517E245561033028135DE10E1BD8FA0BB9E5FC89AA5197CEE50A98EB778B63
+BF0E7A97BF243FC8D6952C78192F19753BE77B576486D491344D4DC5172F9655
+EC6D86C591840E8B90AB507C63A7942A88C5301C8E7C9AA2EB41BFDEBBF19DB8
+A905B90FEBB86086E2E01600FB897AA3EB954761045B00DF247C796EBD4E8E18
+41894D9F62E4C8551944FEF97BED212B29FF795A02979ABF453C0E83C00AA39B
+E95AFEFCEE23B58571795F0358912C7396AD8E05373E5DAC0F76AF1B7A5406CD
+2D82ED5E0F014AD1512DC75D71DCD22443E7A071E27A52329A04A18E12E4191C
+57DED26A8573ED0BBCF6417D993269E56241E45E05A61CE72C63252D908DBBB7
+ADCABD21921CD36B6C2B1C4A5D8E6ED8F29B8F6AC9B8097F477AD77CE01C51BA
+00BE8E44D5B3D3389E4ED09A7327763E7F50426CECA5424D243AA8BC7E7B5529
+9D14434148B294C2441DD0A926B678211EFC6A48EFE84130BD4D15BBD2CF1388
+B5EF11940CEF3CDD4AEE073AC131947B960D716973E63BB928977EEAD41B80E9
+BF08B06F0F107B4DE2828FECF7370578FC116F03ED602FFCE688FA6D25E274D5
+519B1EF07165FDB10CB32D3748C33CFB601C98D17F274887B554A596FA9B3C3E
+63A7C426779220BF013EFA2B30448FD9B20790F87A069E0704A1EB4188A4298D
+6A7ECAABF7F0454E3E7EB98650C2BB14D2B08F2265B439FB20C74BD93007DA70
+EC6C445351BD0607997666DA0A56A186859237F9BCCE4F4E594BC8A81E6E22EE
+5A58C7B349DDCF0F753B3DEF9484B841DD1428881B625A4E28CE54CF896711C9
+4D380F508081C26CC9090E09C9C6BA12FAECD7074E2549779CB6FB88EB1368A6
+F709F6A2CECFFC5CCF48CA2985BFB1CE3E0FA2CF5C3B0F612869171F3649ABE0
+20837D908FF436B01AB54EE132A8F0D0ABB4C1015FE6ED45575B1573AA3F9D64
+66B521470DCD5C73ADBDA46E86D6EC5667D2AEEB5F7938F42018E1541822E475
+B11180512375AE63EC7BB000883043513928140A23CBB26658A6B0521F8B8DBE
+2007353A924E762BD8DD3AD901D81DBADAA3DF3C2ED5AA2163167AEBD049390A
+F4459FAD558F3FBB3B805EB1EF332FB14F0C677FF9CFF7831F203383DE4CE7BB
+8CBA629180AFF36228D3997BFC97E051F2390791B6F5AC0B5AF929107EF3CEF3
+00894DE1693653C33B012583EC5FAED006BF9410510A709594D34E558DF5290C
+4A36633EA935D67A351630E6F75FCCFEC361A8298DD7C9DA2326C8EF247481EF
+20B8C91013AD02613FB321DC00C7B9EF87ED8AF212D769C0EC1D8F116950A60F
+3FB2273E4EB993A8CFD3787C86AAF54CE86DD44A9A652307B7EF8BDFF73942DF
+F52AE037D5D9FAD5E2D673F4346921B642EADD945164F8B8116C24D7A5EF8845
+0D1199AA2D6C6346075E1FEA51B351F6688DB0F9D3DA6489C34C9E1493038281
+D5929568721CF3A309C21FACDB7B4AC9BE329935446212E060629507D78CE8C4
+C5BA819D284C6AEEFD81CFF819A14C445BA6DFC9549CAAD4CF56FFB4FFD46716
+C60DA7F437EC08CEA0FD4711D745892ECC7AC2FD5422CB464D42977F991BC3DF
+52E26CCF63B0A0D73AF537712F551DF4C8A9EB5837C6CD11119603EE13228E6E
+3326A8A9484B9FBEF42D121304FD19581085459FE250BB3CFF7B689EE65EFAF9
+9CB50E6DF0DE0F2785EDA4C7B9E7AA036CAD799C8451C72C8387EE5BB933851F
+ABE54FD373AAA654DF7B5646427BB0165303DA86B8A778F4FAB052928B6ED9F6
+083D9DFFC0FBADB4BA284BF9E3D0F45337EE4E52138044E8D2D9B09D1B3BF028
+C9EAFE1E2D352CF101B1CB1546A455C3264E951519FEE78C35BACB2A4103D5F4
+78A555C6E7B706E40B55115364E3690C7A7632B74CAC15C54D97662DAB2E7549
+777A7D0F70F1D20C5DB19E77FF69AEEE8DDCC120783D327817D3BA0E2BB98D02
+123CFF3299A4475153DD03AC6ECCD53B7395EF1BBD235E4E635BD925B46E5E9E
+DD4E3818F1092525B84F504450523420B40140F7AB6FBC8441779B724B371939
+CBBC534E8AD2EAD3561DFAE319F1455D8F4D6F9A20A73A79FCAA449F067A1AAC
+90D25E25BE199A9AB789D2B130605CB19CD2F3D97130B38B6B493DF57325B885
+467EAF56A17FB05542CD9567B0E04E291EE8E9E19ED3EAEC6FB270FA3F477B65
+4B60FD0A5A0ECE6D822290233D2FD6D0ED1BBBD82E5F0222A18417773597F999
+D3619B41BDEDC612072E87FBEF1ACECF313C297F4D6B27837C60FD840353C902
+31CE101BFB0B80450E991D466C0D33093450F373EF24A82EDCED7B9D0BD658FB
+8C7422C078FFE08CACA51E7C14795759B2F8A100D042FA3BDA944E6412659973
+4037B9A540A20DABC38FB0F6A346E50E04D530115AC770669BF34FD88238EF5F
+A80C403CDA940AE1CA5213E8A06E387EEF3C7D4941D634C3B3BBEB133BABEFD4
+28D3FDB15075E1A6626F90303D4E3DD558B910308D9CF699AD02DB06629C894E
+B09D7EDDB076FBC42ECBC07B8C248F653BA031FBAE56D61762B48ECC3DE15CF8
+7FD07380AA03FA30DB29CED313D5EC2F8C21F74A337E76C097AF48463869D0A7
+20F46A5FE98359236E7DEBF231916B70AFC44E201F13215D4C0A017EA43ACA63
+F86A6458D0AA360E451DC4E3F864F33ACC0D5187DA632DCBEACF296C6C85A42B
+A31E58EFD9F8B19893B59525B1DAEC780A71CA6FD27CA22C23733382E6D46689
+9AB673C87D7C6302C34FABC19B4BD25CAF910BA2A2957DC98917CA2BFB27636C
+80F2A056CFDC2CB868CDA68F342AAC19538BA177B228B3736D6050298F868F8A
+E9F0
+0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark
diff --git a/Build/source/libs/t1lib/l047016t.xafm b/Build/source/libs/t1lib/l047016t.xafm
new file mode 100644
index 00000000000..db2b20ddd6b
--- /dev/null
+++ b/Build/source/libs/t1lib/l047016t.xafm
@@ -0,0 +1,332 @@
+StartFontMetrics 4.0
+Comment This is ./x047016t.afm created from ./x047016t.pfa by t1lib V. 5.1.2.
+Comment t1lib is copyright (c) Rainer Menzner, 1996-2001.
+Comment t1lib is distributed under the GNU General Public Library License (LGPL)
+FontName LuxiMono-Bold
+FullName Luxi Mono Bold
+FamilyName Luxi Mono
+Weight Bold
+ItalicAngle 0
+IsFixedPitch true
+FontBBox 0 -211 714 1012
+UnderlinePosition -88
+UnderlineThickness 83
+Version 1.1000
+Notice Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.
+EncodingScheme FontSpecific
+CapHeight 723
+XHeight 530
+StdHW 84
+StdVW 146
+StartCharMetrics 309
+C 32 ; WX 600 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 600 ; N exclam ; B 228 0 373 723 ;
+C 34 ; WX 600 ; N quotedbl ; B 95 506 505 771 ;
+C 35 ; WX 600 ; N numbersign ; B 24 0 576 723 ;
+C 36 ; WX 600 ; N dollar ; B 53 -96 519 819 ;
+C 37 ; WX 600 ; N percent ; B 0 -18 601 741 ;
+C 38 ; WX 600 ; N ampersand ; B 22 -18 590 741 ;
+C 39 ; WX 600 ; N quotesingle ; B 216 470 384 771 ;
+C 40 ; WX 600 ; N parenleft ; B 94 -145 504 771 ;
+C 41 ; WX 600 ; N parenright ; B 96 -145 506 771 ;
+C 42 ; WX 600 ; N asterisk ; B 75 289 525 723 ;
+C 43 ; WX 600 ; N plus ; B 48 49 552 553 ;
+C 44 ; WX 600 ; N comma ; B 216 -169 384 168 ;
+C 45 ; WX 600 ; N hyphen ; B 72 253 528 350 ;
+C 46 ; WX 600 ; N period ; B 216 0 384 168 ;
+C 47 ; WX 600 ; N slash ; B 0 -145 600 771 ;
+C 48 ; WX 600 ; N zero ; B 42 -18 558 741 ;
+C 49 ; WX 600 ; N one ; B 72 0 551 735 ;
+C 50 ; WX 600 ; N two ; B 92 0 509 742 ;
+C 51 ; WX 600 ; N three ; B 84 -18 533 741 ;
+C 52 ; WX 600 ; N four ; B 35 0 559 732 ;
+C 53 ; WX 600 ; N five ; B 114 -18 533 723 ;
+C 54 ; WX 600 ; N six ; B 52 -18 560 741 ;
+C 55 ; WX 600 ; N seven ; B 63 0 537 723 ;
+C 56 ; WX 600 ; N eight ; B 46 -18 555 741 ;
+C 57 ; WX 600 ; N nine ; B 40 -18 548 741 ;
+C 58 ; WX 600 ; N colon ; B 216 0 384 530 ;
+C 59 ; WX 600 ; N semicolon ; B 216 -169 384 530 ;
+C 60 ; WX 600 ; N less ; B 48 0 551 603 ;
+C 61 ; WX 600 ; N equal ; B 50 150 550 452 ;
+C 62 ; WX 600 ; N greater ; B 48 0 551 603 ;
+C 63 ; WX 600 ; N question ; B 62 0 542 741 ;
+C 64 ; WX 600 ; N at ; B 22 -18 594 742 ;
+C 65 ; WX 600 ; N A ; B 12 0 588 723 ;
+C 66 ; WX 600 ; N B ; B 18 0 566 723 ;
+C 67 ; WX 600 ; N C ; B 24 -18 577 741 ;
+C 68 ; WX 600 ; N D ; B 18 0 576 723 ;
+C 69 ; WX 600 ; N E ; B 18 0 572 723 ;
+C 70 ; WX 600 ; N F ; B 18 0 566 723 ;
+C 71 ; WX 600 ; N G ; B 24 -18 571 741 ;
+C 72 ; WX 600 ; N H ; B 18 0 582 723 ;
+C 73 ; WX 600 ; N I ; B 60 0 539 723 ;
+C 74 ; WX 600 ; N J ; B 54 -18 578 723 ;
+C 75 ; WX 600 ; N K ; B 18 0 600 723 ;
+C 76 ; WX 600 ; N L ; B 24 0 576 723 ;
+C 77 ; WX 600 ; N M ; B 6 0 594 723 ;
+C 78 ; WX 600 ; N N ; B 18 0 594 723 ;
+C 79 ; WX 600 ; N O ; B 24 -18 576 741 ;
+C 80 ; WX 600 ; N P ; B 18 0 585 723 ;
+C 81 ; WX 600 ; N Q ; B 24 -178 598 741 ;
+C 82 ; WX 600 ; N R ; B 18 0 594 723 ;
+C 83 ; WX 600 ; N S ; B 55 -18 547 742 ;
+C 84 ; WX 600 ; N T ; B 23 0 577 723 ;
+C 85 ; WX 600 ; N U ; B 10 -18 590 723 ;
+C 86 ; WX 600 ; N V ; B 6 0 594 723 ;
+C 87 ; WX 600 ; N W ; B 6 0 594 723 ;
+C 88 ; WX 600 ; N X ; B 6 0 594 723 ;
+C 89 ; WX 600 ; N Y ; B 7 0 594 723 ;
+C 90 ; WX 600 ; N Z ; B 54 0 546 723 ;
+C 91 ; WX 600 ; N bracketleft ; B 168 -145 505 771 ;
+C 92 ; WX 600 ; N backslash ; B 0 -145 600 771 ;
+C 93 ; WX 600 ; N bracketright ; B 94 -145 431 771 ;
+C 94 ; WX 600 ; N asciicircum ; B 71 265 529 723 ;
+C 95 ; WX 600 ; N underscore ; B 0 -96 600 0 ;
+C 96 ; WX 600 ; N grave ; B 180 626 421 783 ;
+C 97 ; WX 600 ; N a ; B 42 -12 576 542 ;
+C 98 ; WX 600 ; N b ; B 18 -12 570 771 ;
+C 99 ; WX 600 ; N c ; B 30 -12 576 542 ;
+C 100 ; WX 600 ; N d ; B 30 -12 582 771 ;
+C 101 ; WX 600 ; N e ; B 30 -12 570 542 ;
+C 102 ; WX 600 ; N f ; B 59 0 600 784 ;
+C 103 ; WX 600 ; N g ; B 45 -205 591 542 ;
+C 104 ; WX 600 ; N h ; B 18 0 585 771 ;
+C 105 ; WX 600 ; N i ; B 68 0 574 771 ;
+C 106 ; WX 600 ; N j ; B 39 -205 467 771 ;
+C 107 ; WX 600 ; N k ; B 18 0 582 771 ;
+C 108 ; WX 600 ; N l ; B 68 0 574 771 ;
+C 109 ; WX 600 ; N m ; B 12 0 591 542 ;
+C 110 ; WX 600 ; N n ; B 18 0 585 542 ;
+C 111 ; WX 600 ; N o ; B 30 -12 570 542 ;
+C 112 ; WX 600 ; N p ; B 18 -193 570 542 ;
+C 113 ; WX 600 ; N q ; B 30 -193 594 542 ;
+C 114 ; WX 600 ; N r ; B 27 0 573 542 ;
+C 115 ; WX 600 ; N s ; B 82 -12 532 542 ;
+C 116 ; WX 600 ; N t ; B 36 -12 530 650 ;
+C 117 ; WX 600 ; N u ; B 15 -12 582 530 ;
+C 118 ; WX 600 ; N v ; B 6 0 594 530 ;
+C 119 ; WX 600 ; N w ; B 6 0 594 530 ;
+C 120 ; WX 600 ; N x ; B 12 0 588 530 ;
+C 121 ; WX 600 ; N y ; B 6 -193 594 530 ;
+C 122 ; WX 600 ; N z ; B 72 0 528 530 ;
+C 123 ; WX 600 ; N braceleft ; B 71 -145 511 771 ;
+C 124 ; WX 600 ; N bar ; B 252 -145 348 771 ;
+C 125 ; WX 600 ; N braceright ; B 89 -145 529 771 ;
+C 126 ; WX 600 ; N asciitilde ; B 51 203 549 405 ;
+C 128 ; WX 600 ; N Euro ; B 12 -18 576 742 ;
+C 130 ; WX 653 ; N quotesinglbase ; B 250 -145 418 168 ;
+C 131 ; WX 600 ; N florin ; B 42 -145 558 741 ;
+C 132 ; WX 653 ; N quotedblbase ; B 152 -144 562 145 ;
+C 133 ; WX 600 ; N ellipsis ; B 40 0 561 121 ;
+C 134 ; WX 600 ; N dagger ; B 83 -145 517 723 ;
+C 135 ; WX 653 ; N daggerdbl ; B 131 -145 565 723 ;
+C 136 ; WX 600 ; N circumflex ; B 129 626 472 783 ;
+C 137 ; WX 653 ; N perthousand ; B 9 -18 714 741 ;
+C 138 ; WX 600 ; N Scaron ; B 55 -18 547 940 ;
+C 139 ; WX 600 ; N guilsinglleft ; B 132 55 458 476 ;
+C 140 ; WX 600 ; N OE ; B 12 -18 585 741 ;
+C 145 ; WX 600 ; N quoteleft ; B 216 458 384 771 ;
+C 146 ; WX 600 ; N quoteright ; B 216 457 384 771 ;
+C 147 ; WX 600 ; N quotedblleft ; B 95 482 505 771 ;
+C 148 ; WX 600 ; N quotedblright ; B 95 482 505 771 ;
+C 149 ; WX 600 ; N bullet ; B 165 277 436 548 ;
+C 150 ; WX 600 ; N endash ; B 59 260 541 332 ;
+C 151 ; WX 600 ; N emdash ; B 0 260 600 332 ;
+C 152 ; WX 600 ; N tilde ; B 128 626 471 783 ;
+C 153 ; WX 600 ; N trademark ; B 24 361 582 723 ;
+C 154 ; WX 600 ; N scaron ; B 82 -12 532 783 ;
+C 155 ; WX 600 ; N guilsinglright ; B 141 55 467 476 ;
+C 156 ; WX 600 ; N oe ; B 16 -12 576 542 ;
+C 159 ; WX 600 ; N Ydieresis ; B 7 0 594 892 ;
+C 160 ; WX 600 ; N nbspace ; B 0 0 0 0 ;
+C 161 ; WX 600 ; N exclamdown ; B 228 -193 373 530 ;
+C 162 ; WX 600 ; N cent ; B 62 -18 540 741 ;
+C 163 ; WX 600 ; N sterling ; B 58 0 540 741 ;
+C 164 ; WX 600 ; N currency ; B 15 76 586 647 ;
+C 165 ; WX 600 ; N yen ; B 9 0 591 723 ;
+C 166 ; WX 600 ; N brokenbar ; B 252 -145 348 771 ;
+C 167 ; WX 600 ; N section ; B 65 -157 536 741 ;
+C 168 ; WX 600 ; N dieresis ; B 137 627 462 735 ;
+C 169 ; WX 600 ; N copyright ; B 30 -18 570 741 ;
+C 170 ; WX 600 ; N ordfeminine ; B 75 350 545 742 ;
+C 171 ; WX 600 ; N guillemotleft ; B 36 48 564 482 ;
+C 172 ; WX 600 ; N logicalnot ; B 42 96 545 350 ;
+C 173 ; WX 600 ; N sfthyphen ; B 72 253 528 350 ;
+C 174 ; WX 600 ; N registered ; B 30 -18 570 741 ;
+C 176 ; WX 600 ; N degree ; B 155 494 444 783 ;
+C 177 ; WX 600 ; N plusminus ; B 59 0 541 590 ;
+C 178 ; WX 600 ; N twosuperior ; B 115 356 486 742 ;
+C 179 ; WX 600 ; N threesuperior ; B 119 350 482 742 ;
+C 180 ; WX 600 ; N acute ; B 180 626 421 783 ;
+C 181 ; WX 600 ; N mu ; B 18 -193 585 530 ;
+C 182 ; WX 600 ; N paragraph ; B 43 -145 492 729 ;
+C 184 ; WX 600 ; N cedilla ; B 193 -211 406 0 ;
+C 185 ; WX 600 ; N onesuperior ; B 157 356 497 741 ;
+C 186 ; WX 600 ; N ordmasculine ; B 77 350 523 741 ;
+C 187 ; WX 600 ; N guillemotright ; B 36 48 564 482 ;
+C 188 ; WX 600 ; N onequarter ; B 14 -18 580 741 ;
+C 189 ; WX 600 ; N onehalf ; B 9 -18 584 741 ;
+C 190 ; WX 600 ; N threequarters ; B 15 -18 581 742 ;
+C 191 ; WX 600 ; N questiondown ; B 53 -211 533 530 ;
+C 192 ; WX 600 ; N Agrave ; B 12 0 588 940 ;
+C 193 ; WX 600 ; N Aacute ; B 12 0 588 940 ;
+C 194 ; WX 600 ; N Acircumflex ; B 12 0 588 940 ;
+C 195 ; WX 600 ; N Atilde ; B 12 0 588 940 ;
+C 196 ; WX 600 ; N Adieresis ; B 12 0 588 892 ;
+C 197 ; WX 600 ; N Aring ; B 12 0 588 953 ;
+C 198 ; WX 600 ; N AE ; B 6 0 582 723 ;
+C 199 ; WX 600 ; N Ccedilla ; B 24 -211 577 741 ;
+C 200 ; WX 600 ; N Egrave ; B 18 0 572 940 ;
+C 201 ; WX 600 ; N Eacute ; B 18 0 572 940 ;
+C 202 ; WX 600 ; N Ecircumflex ; B 18 0 572 940 ;
+C 203 ; WX 600 ; N Edieresis ; B 18 0 572 892 ;
+C 204 ; WX 600 ; N Igrave ; B 60 0 539 940 ;
+C 205 ; WX 600 ; N Iacute ; B 60 0 539 940 ;
+C 206 ; WX 600 ; N Icircumflex ; B 60 0 539 940 ;
+C 207 ; WX 600 ; N Idieresis ; B 60 0 539 892 ;
+C 208 ; WX 600 ; N Eth ; B 0 0 577 723 ;
+C 209 ; WX 600 ; N Ntilde ; B 18 0 594 940 ;
+C 210 ; WX 600 ; N Ograve ; B 24 -18 576 940 ;
+C 211 ; WX 600 ; N Oacute ; B 24 -18 576 940 ;
+C 212 ; WX 600 ; N Ocircumflex ; B 24 -18 576 940 ;
+C 213 ; WX 600 ; N Otilde ; B 24 -18 576 940 ;
+C 214 ; WX 600 ; N Odieresis ; B 24 -18 576 892 ;
+C 215 ; WX 600 ; N multiply ; B 61 59 538 536 ;
+C 216 ; WX 600 ; N Oslash ; B 24 -18 576 741 ;
+C 217 ; WX 600 ; N Ugrave ; B 10 -18 590 940 ;
+C 218 ; WX 600 ; N Uacute ; B 10 -18 590 940 ;
+C 219 ; WX 600 ; N Ucircumflex ; B 10 -18 590 940 ;
+C 220 ; WX 600 ; N Udieresis ; B 10 -18 590 892 ;
+C 221 ; WX 600 ; N Yacute ; B 7 0 594 940 ;
+C 222 ; WX 600 ; N Thorn ; B 18 0 584 723 ;
+C 223 ; WX 600 ; N germandbls ; B 21 -12 591 784 ;
+C 224 ; WX 600 ; N agrave ; B 42 -12 576 783 ;
+C 225 ; WX 600 ; N aacute ; B 42 -12 576 783 ;
+C 226 ; WX 600 ; N acircumflex ; B 42 -12 576 783 ;
+C 227 ; WX 600 ; N atilde ; B 42 -12 576 783 ;
+C 228 ; WX 600 ; N adieresis ; B 42 -12 576 735 ;
+C 229 ; WX 600 ; N aring ; B 42 -12 576 856 ;
+C 230 ; WX 600 ; N ae ; B 24 -12 576 542 ;
+C 231 ; WX 600 ; N ccedilla ; B 30 -211 576 542 ;
+C 232 ; WX 600 ; N egrave ; B 30 -12 570 783 ;
+C 233 ; WX 600 ; N eacute ; B 30 -12 570 783 ;
+C 234 ; WX 600 ; N ecircumflex ; B 30 -12 570 783 ;
+C 235 ; WX 600 ; N edieresis ; B 30 -12 570 735 ;
+C 236 ; WX 600 ; N igrave ; B 68 0 574 783 ;
+C 237 ; WX 600 ; N iacute ; B 68 0 574 783 ;
+C 238 ; WX 600 ; N icircumflex ; B 68 0 574 783 ;
+C 239 ; WX 600 ; N idieresis ; B 68 0 574 735 ;
+C 240 ; WX 600 ; N eth ; B 34 -12 570 826 ;
+C 241 ; WX 600 ; N ntilde ; B 18 0 585 783 ;
+C 242 ; WX 600 ; N ograve ; B 30 -12 570 783 ;
+C 243 ; WX 600 ; N oacute ; B 30 -12 570 783 ;
+C 244 ; WX 600 ; N ocircumflex ; B 30 -12 570 783 ;
+C 245 ; WX 600 ; N otilde ; B 30 -12 570 783 ;
+C 246 ; WX 600 ; N odieresis ; B 30 -12 570 735 ;
+C 247 ; WX 600 ; N divide ; B 50 0 550 603 ;
+C 248 ; WX 600 ; N oslash ; B 30 -12 570 548 ;
+C 249 ; WX 600 ; N ugrave ; B 15 -12 582 783 ;
+C 250 ; WX 600 ; N uacute ; B 15 -12 582 783 ;
+C 251 ; WX 600 ; N ucircumflex ; B 15 -12 582 783 ;
+C 252 ; WX 600 ; N udieresis ; B 15 -12 582 735 ;
+C 253 ; WX 600 ; N yacute ; B 6 -193 594 783 ;
+C 254 ; WX 600 ; N thorn ; B 18 -193 570 771 ;
+C 255 ; WX 600 ; N ydieresis ; B 6 -193 594 735 ;
+C -1 ; WX 600 ; N Abreve ; B 12 0 588 940 ;
+C -1 ; WX 600 ; N Aogonek ; B 12 -181 588 723 ;
+C -1 ; WX 600 ; N Cacute ; B 24 -18 577 940 ;
+C -1 ; WX 600 ; N Ccaron ; B 24 -18 577 940 ;
+C -1 ; WX 600 ; N Dcaron ; B 18 0 576 940 ;
+C -1 ; WX 600 ; N Ecaron ; B 18 0 572 940 ;
+C -1 ; WX 600 ; N Edotaccent ; B 18 0 572 928 ;
+C -1 ; WX 600 ; N Eogonek ; B 18 -181 572 723 ;
+C -1 ; WX 600 ; N Gbreve ; B 24 -18 571 940 ;
+C -1 ; WX 600 ; N Idotaccent ; B 60 0 539 928 ;
+C -1 ; WX 600 ; N Lacute ; B 24 0 576 940 ;
+C -1 ; WX 600 ; N Lcaron ; B 24 0 576 723 ;
+C -1 ; WX 600 ; N Nacute ; B 18 0 594 940 ;
+C -1 ; WX 600 ; N Ncaron ; B 18 0 594 940 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 24 -18 576 940 ;
+C -1 ; WX 600 ; N Racute ; B 18 0 594 940 ;
+C -1 ; WX 600 ; N Rcaron ; B 18 0 594 940 ;
+C -1 ; WX 600 ; N Sacute ; B 55 -18 547 940 ;
+C -1 ; WX 600 ; N Scedilla ; B 55 -211 547 742 ;
+C -1 ; WX 600 ; N Tcaron ; B 23 0 577 940 ;
+C -1 ; WX 600 ; N Uring ; B 10 -18 590 1012 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 10 -18 590 940 ;
+C -1 ; WX 600 ; N Zacute ; B 54 0 546 940 ;
+C -1 ; WX 600 ; N Zcaron ; B 54 0 546 940 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 54 0 546 928 ;
+C -1 ; WX 600 ; N Amacron ; B 12 0 588 868 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 23 -211 577 723 ;
+C -1 ; WX 600 ; N Emacron ; B 18 0 572 868 ;
+C -1 ; WX 600 ; N Imacron ; B 60 0 539 868 ;
+C -1 ; WX 600 ; N Iogonek ; B 60 -181 539 723 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 18 -211 600 723 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 24 -211 576 723 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B 18 -211 594 723 ;
+C -1 ; WX 600 ; N Omacron ; B 24 -18 576 868 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 18 -211 594 723 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 24 -211 571 741 ;
+C -1 ; WX 600 ; N Umacron ; B 10 -18 590 868 ;
+C -1 ; WX 600 ; N Uogonek ; B 10 -181 590 723 ;
+C -1 ; WX 600 ; N abreve ; B 42 -12 576 784 ;
+C -1 ; WX 600 ; N aogonek ; B 42 -181 576 542 ;
+C -1 ; WX 600 ; N cacute ; B 30 -12 576 783 ;
+C -1 ; WX 600 ; N ccaron ; B 30 -12 576 783 ;
+C -1 ; WX 600 ; N dcaron ; B 12 -12 600 771 ;
+C -1 ; WX 600 ; N ecaron ; B 30 -12 570 783 ;
+C -1 ; WX 600 ; N edotaccent ; B 30 -12 570 771 ;
+C -1 ; WX 600 ; N eogonek ; B 30 -181 570 542 ;
+C -1 ; WX 600 ; N gbreve ; B 45 -205 591 784 ;
+C -1 ; WX 600 ; N lacute ; B 68 0 574 976 ;
+C -1 ; WX 600 ; N lcaron ; B 68 0 599 771 ;
+C -1 ; WX 600 ; N nacute ; B 18 0 585 783 ;
+C -1 ; WX 600 ; N ncaron ; B 18 0 585 783 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 30 -12 570 783 ;
+C -1 ; WX 600 ; N racute ; B 27 0 573 783 ;
+C -1 ; WX 600 ; N sacute ; B 82 -12 532 783 ;
+C -1 ; WX 600 ; N scommaaccent ; B 82 -211 532 542 ;
+C -1 ; WX 600 ; N tcaron ; B 36 -12 530 843 ;
+C -1 ; WX 600 ; N uring ; B 15 -12 582 856 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 15 -12 582 783 ;
+C -1 ; WX 600 ; N zacute ; B 72 0 528 783 ;
+C -1 ; WX 600 ; N zcaron ; B 72 0 528 783 ;
+C -1 ; WX 600 ; N zdotaccent ; B 72 0 528 771 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 36 -211 530 650 ;
+C -1 ; WX 600 ; N amacron ; B 42 -12 576 711 ;
+C -1 ; WX 600 ; N emacron ; B 30 -12 570 711 ;
+C -1 ; WX 600 ; N imacron ; B 68 0 574 711 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 18 -211 582 771 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 68 -211 574 771 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 18 -211 585 542 ;
+C -1 ; WX 600 ; N omacron ; B 30 -12 570 711 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 27 -211 573 542 ;
+C -1 ; WX 600 ; N umacron ; B 15 -12 582 711 ;
+C -1 ; WX 600 ; N uogonek ; B 15 -181 582 530 ;
+C -1 ; WX 600 ; N rcaron ; B 27 0 573 783 ;
+C -1 ; WX 600 ; N scedilla ; B 82 -211 532 542 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 45 -205 591 915 ;
+C -1 ; WX 600 ; N iogonek ; B 68 -181 574 771 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 55 -211 547 742 ;
+C -1 ; WX 600 ; N Dcroat ; B 0 0 577 723 ;
+C -1 ; WX 600 ; N Lslash ; B 24 0 576 723 ;
+C -1 ; WX 600 ; N dotlessi ; B 68 0 574 530 ;
+C -1 ; WX 600 ; N fi ; B 18 0 585 783 ;
+C -1 ; WX 600 ; N fl ; B 18 0 585 783 ;
+C -1 ; WX 600 ; N dcroat ; B 30 -12 594 771 ;
+C -1 ; WX 600 ; N lslash ; B 68 0 574 771 ;
+C -1 ; WX 600 ; N periodcentered ; B 222 229 379 385 ;
+C -1 ; WX 600 ; N minus ; B 48 253 552 350 ;
+C -1 ; WX 600 ; N fraction ; B 46 -18 554 741 ;
+C -1 ; WX 600 ; N dotaccent ; B 228 626 373 771 ;
+C -1 ; WX 600 ; N ring ; B 186 626 415 856 ;
+C -1 ; WX 600 ; N caron ; B 129 626 472 783 ;
+C -1 ; WX 600 ; N breve ; B 127 627 472 784 ;
+C -1 ; WX 600 ; N hungarumlaut ; B 103 626 498 783 ;
+C -1 ; WX 600 ; N ogonek ; B 179 -181 402 0 ;
+C -1 ; WX 600 ; N macron ; B 119 627 480 711 ;
+C -1 ; WX 333 ; N commaaccent ; B 66 -211 274 -48 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/lib/t1lib/sysconf.h.in b/Build/source/libs/t1lib/lib/t1lib/sysconf.h.in
new file mode 100644
index 00000000000..dbf4fc23d85
--- /dev/null
+++ b/Build/source/libs/t1lib/lib/t1lib/sysconf.h.in
@@ -0,0 +1,87 @@
+/* lib/t1lib/sysconf.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
+/* The size of `double', as computed by sizeof. */
+#undef SIZEOF_DOUBLE
+
+/* The size of `float', as computed by sizeof. */
+#undef SIZEOF_FLOAT
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `long double', as computed by sizeof. */
+#undef SIZEOF_LONG_DOUBLE
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if type `char' is unsigned and you are not using gcc. */
+#ifndef __CHAR_UNSIGNED__
+# undef __CHAR_UNSIGNED__
+#endif
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/Build/source/libs/t1lib/stamp-aclocal b/Build/source/libs/t1lib/stamp-aclocal
deleted file mode 100644
index 4bd6cd54c79..00000000000
--- a/Build/source/libs/t1lib/stamp-aclocal
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 27 15:54:59 CET 2009
diff --git a/Build/source/libs/t1lib/stamp-configure b/Build/source/libs/t1lib/stamp-configure
deleted file mode 100644
index 4bd6cd54c79..00000000000
--- a/Build/source/libs/t1lib/stamp-configure
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 27 15:54:59 CET 2009
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Changes b/Build/source/libs/t1lib/t1lib-5.1.2/Changes
new file mode 100644
index 00000000000..0aeb9e5b217
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Changes
@@ -0,0 +1,905 @@
+Nov 1996: t1lib-0.1-alpha
+-------------------------
+
+- first public release of t1lib with all basic functionality
+
+
+
+May 1997: t1lib-0.2-beta
+-------------------------
+
+
+- Now uses autoconf to configure the software for the system.
+
+
+- All functions put into one library.
+
+
+- ATTENTION: Argument order for the glyph-setting functions changed to be
+ consistent with the info functions. Programs that already use
+ t1lib have to be rewritten (sorry....)
+
+
+- Function for computing the width of a string added (T1_GetStringWidth()).
+
+
+- Function for computing the BoundingBox of a string added
+ (T1_GetStringBBox()).
+
+
+- Function T1_GetMetricsInfo() added. It returns a struct containing width,
+ bounding box, number of characters and horizontal position of the characters
+ in character space coordinates (afm-units).
+
+
+- Function T1_GetBBox() renamed to T1_GetCharBBox() for consistency reasons.
+
+
+- All exit() calls removed from library and replaced by appropriate error
+ return codes.
+
+
+- t1lib now optionally supports a logfile for logging of error- and
+ warning-messages at runtime. The "verbosity" of this logfile may be chosen
+ by the user.
+
+
+- Documentation more complete.
+
+
+
+July 1997: t1lib-0.3-beta
+-------------------------
+
+
+- Code for placing character bitmaps in T1_SetString() slightly advanced; the
+ restrictions concerning slanted fonts are eliminated.
+
+
+- T1_GetStringBBox()/T1_GetCharBBox() extended. It is now possible to get the
+ bounding box if the font is slanted. This is implemented by examining the
+ characters outline at 1000bp.
+
+
+- Some Bugs in the code managing linked lists of font sizes have been
+ corrected.
+
+
+- Bug in T1_CopyFont() has been corrected. This should work now.
+
+
+- The behavior during configuration file searching has been changed to
+ be compatible to well known UNIX-conventions.
+
+
+- As the main new feature in this release t1lib now has direct support
+ for X11 (optionally). There is a set of functions that act similar
+ to XDrawText(), i.e. they draw directly into a drawable (pixmap or
+ window).
+
+ - Caching of bitmaps of the X11 rastering functions is also done
+ in the X-Server for maximum performance (although it is not as
+ fast as I dreamed of, admittedly).
+
+ - X11 rastering functions use the current foreground/background
+ colors
+
+ - The X11 rastering functions implement automatical antialiasing
+ between foreground and background color
+
+ - The X11 rastering functions provide an opaque and a transparent
+ mode
+
+ - The X11 rastering functions can draw into drawable of any depth
+ (provided the depth is large enough)
+
+
+- A new target has been added to the makefiles allowing to remove
+ a t1lib-installation automatically from a system.
+
+
+
+December 1997: t1lib-0.4-beta
+-----------------------------
+
+
+- Many memory allocation bugs fixed. t1lib is now "libefence-proved".
+
+
+- Kerning and Metrics-Lookup rewritten. The corresponding functions are now
+ based on character indices rather than on character names which makes them
+ up to 8 x faster than before, depeding on data and context.
+
+
+- Raph Levien (raph@acm.org) contributed a fast algorithm for subsampling
+ which improves Antialiasing time significantly.
+
+
+- Fred L. Drake, Jr. (fdrake@acm.org) contributed a Python-interface
+ to t1lib. This allows Python programmers to make use of Adobe Type
+ 1 fonts. This package, called t1python, is distributed with t1lib in
+ an independent subdirectory of the distribution. See README.t1python
+ for more information on t1python.
+
+
+- Bitmaps and antialiased bitmaps may now be padded 8, 16 or 32 bits. This
+ allows (with some restrictions) somewhat faster concatenation of
+ characterbitmaps to stringbitmaps. The padding-value may be set and queried
+ at runtime.
+
+
+- The optional X11-interface, introduced in t1lib-0.3-beta, has been reduced
+ to a simple wrapper. X11-pixmap caching has been completely dropped since it
+ has proven to be too inefficient. However, at the level of the function
+ calls, nothing has changed.
+
+
+- Configuration of t1lib (with or without X11-interface) may be queried by
+ applicationprogrammers at compiletime or by applications at runtime.
+
+
+- Two functions for informations on fonts have been added:
+
+ 1) T1_GetFontBBox(): Return a fonts' bounding box.
+
+ 2) T1_GetAllCharNames(): Return a list of all character defined in a Type 1
+ font. This might be of interest if somebody wants
+ to set up new encodings.
+
+
+- Function T1_CloseLib() added. This function allows to completely free the
+ data-structures of t1lib. T1_CloseLib() should be called in future when an
+ application using t1lib exits.
+
+
+- Many other things not worth to be metioned ...
+
+
+
+March 1998: t1lib-0.5-beta
+--------------------------
+
+
+- Changed the license to the GNU General Public Library License (LGPL)
+
+
+- Definition of INFINITY removed from
+ lib/type1/[regions.c|regions.h|t1imager.h]. Collided with a
+ definition in math.h on OS/2.
+
+
+- Implemented proper handling of environment variables CFLAGS, LDFLAGS
+ and CC during build process.
+
+
+- Added target 'without_doc' for people who have a very rudimentary or
+ no LaTeX-System at all
+
+
+- Fixed some bugs that appeared when font files from database were not
+ found
+
+
+- Clipmask Bug in the X11-rastering functions fixed
+
+
+- Bugs in VM-reallocation (T1_LoadFont()) repeatedly fixed. It is now
+ ANSI-C compliant.
+
+
+- Alignment of VM changed. This was needed on some systems.
+
+
+- Set of functions for accessing information from FontInfo dictionary
+ is now complete. This introduces the new functions
+ T1_GetFullName(), T1_GetFamilyName(), T1_GetWeight(),
+ T1_GetItalicAngle(), T1_GetIsFixedPitch(), T1_GetVersion(),
+ T1_GetNotice().
+
+
+- ATTENTION: In the above context, T1_GetPostScriptName() has been
+ renamed to T1_GetFontName() for consistency reasons, sorry.
+
+
+- ATTENTION: All types "unsigned char (*)" have been changed to
+ char (*) in the API functions. This was necessary while adapting
+ t1lib to ANSI-standard to make it portable. Sorry for this
+ confusion.
+
+
+- New function T1_AddFont(): Fonts can now be added to the font
+ database at runtime. This means especially, one can ignore a
+ FontDataBase file thus can start t1lib-programs on single fontfiles
+ without doing a complete setup before.
+
+
+- There is now also the possibility to ignore the currently active
+ configuration file, thereby setting all search paths to the current
+ working directory and having an empty font data base. This is meant
+ for small applications that work on single files.
+
+
+- t1lib is now able to work with fonts without corresponding
+ afm-files. AFM-information can be produced from pfa- and
+ pfb-files. This, of course, refers only to character-metrics
+ information.
+
+
+- A function T1_WriteAFMFallbackFile() is provided which allows to
+ dump metrics information to a valid AFM-file.
+
+
+- New subdirectory type1afm created which contains type1afm, a program
+ to extract afm files from Type 1 font files.
+
+
+- Renamed definitions MAX, MIN, ABS, TRUE and FALSE because they
+ collided with system header files on some systems.
+
+
+- Corrected antialiasing functions. The metrics should now be as
+ correct as possible and black pixel at the right edge of the bitmaps
+ should not appear any more.
+
+
+- Handling of unencoded characters in strings (such as adieresis in
+ AdobeStandardEncoding) is now consistent in rotated and non-rotated
+ glyphs.
+
+
+- A few functions have been added to get information on the file search
+ environment and to manipulate the search paths from within applications.
+
+
+- Mixed endian setups (i.e., client and X-server on different machines
+ with different endianess) should now be handled correctly.
+
+
+- In summary t1lib should now be much more portable than before.
+
+
+- Update to t1python-0.3
+
+
+
+March 1998: t1lib-0.6-beta
+--------------------------
+
+
+- Cleaned up the sources in type1-directory
+
+
+- Functions Xalloc() and Xfree removed. x11dummy.c from list of source files
+ removed.
+
+
+- A few bugs fixed
+
+
+- Character positioning rewritten. It does now handle strings
+ correctly in which the leftmost pixels does not belong to the first
+ character and the rightmost pixels do not belong to the last character.
+
+
+- t1lib now substitutes .notdef for defined character names that have
+ no corresponding charstring. This is a workaround for some fonts in
+ the ghostscript distribution (e.g., s050000l.pfb)
+
+
+- Separated the X11-wrapper from the rest of t1-stuff. t1lib now
+ consists of two libraries and two include files.
+
+
+- Cleaned up configuration and compilation process.
+
+
+
+May 1998: t1lib-0.7-beta
+------------------------
+
+
+- Athena libraries are explicitly located for non-standard system
+
+
+- glyph-structure changed. glyph.metrics.characterWidth is replaced
+ glyph.metrics.advanceX and an entry glyph.metrics.advanceY is added.
+
+
+- Interpretation of the sign of glyph.metrics.descent has changed.
+
+
+- String-rastering functions now support Underlining, Overlining and
+ Overstriking.
+
+
+- Functions for overriding default line-parameters implemented.
+
+
+- Whitespace at beginning and ending of glyphs is now correctly recorded into
+ leftSideBearing and RightSideBearing.
+
+
+- Function T1_ConcatGlyphs() added to API. It concatenates two glyphs of
+ identical depth with an optional displacement inserted.
+
+
+- xglyph output window has changed for X-rastering functions. It is now of
+ constant size with the logical origin in the center. Too large glyphs are
+ simply clipped.
+
+
+- t1lib can be compiled and run on VMS thanks to John Hasstedt
+ (John.Hasstedt@sunysb.edu). A configure.com script for building on VMS is
+ included in the toplevel directory.
+
+
+- T1_GetMetricsInfo() and T1_GetStringBBox() fixed. Now results are correct
+ also if the leftmost pixel in a glyph doesn't belong to the first char and if
+ the rightmost pixel does not belong to the last character.
+
+
+- Leading and trailing white space in glyphs should now be recorded
+ consistently and correctly for all rastering functions.
+
+
+- xglyph can now display a character map of a font.
+
+
+- Global variable T1_errno introduced. It basically works the same way
+ as the errno in libc. This allows applications a unified
+ error-handling.
+
+
+- Update to t1python-0.7.
+
+
+
+November 1998: t1lib-0.8-beta
+-----------------------------
+
+
+- T1_GetAllCharNames() returned invalid list if the Charstrings dictionary was
+ larger than the actual number of charstrings defined (which is perfectly
+ valid, even if it does not make much sense) --> fixed.
+
+
+- 4 x Antialiasing implemented. This can improve the quality at small sizes
+ once more, at the cost of some computational and memory requirement. It is
+ possible to work with 2 x and 4 x concurrently.
+
+
+- Function T1_GetLibIdent() added to API.
+
+
+- Function T1_SetRasterFlags() added to API. It allows to selectively enable
+ or disable certain rasterizer features like, e.g., hinting.
+
+
+- xglyph extended to support 4 x antialiasing.
+
+
+- xglyph now recognizes a few commandline options, primarily intended for
+ debugging purposes.
+
+
+- xglyph is now somewhat more intelligent (and faster) if slanting,
+ extending or reencoding is applied to a font.
+
+
+- New function T1_SetDefaultEncoding(). It allows to set a default
+ encoding vector which then is applied to all subsequently loaded fonts
+ that have StandardEncoding.
+
+
+- Bug in Type 1 rasterizer corrected which prevented fonts with non-standard
+ lenIV values from being correctly decrypted (Charstring decryption).
+
+
+- Internal ISOLatin1Encoding removed from rasterizer since there's no reason
+ for mainting this encoding scheme internally
+
+
+- tlib now has notion of "Encoding Schemes". The format of encoding files is
+ extended correspondingly and is backward compatible.
+
+
+- Memory leaks eliminated, thanks to David Huggins-Daines.
+
+
+- Some slight performance improvements.
+
+
+- Kerning performance improved. Moreover, kerning pairs need no longer be
+ alphabetically sorted.
+
+
+- AFM-parser modified to work with DOS-style AFM-files.
+
+
+- Some bugs in scan-code of Type 1 rasterizer corrected. Scanner is now aware
+ of pfb-blocks and can scan files with multiple binary data segments.
+
+
+- t1lib now uses GNU-libtool, thanks to Hirotsugo Kakugawa
+ (h.kakugawa@computer.org)
+
+
+- An encoding file for IsoLatin2 charset is included thanks to Jiri
+ Pavlovsky (jirap@bajt.cz).
+
+
+- The angle-argument of the rastering functions has been replaced by a more
+ general transformation specification. This is an incompatible change to
+ previous versions, but I think it should be worth it.
+
+
+- t1lib can now handle fontfile names with arbitrary extensions and
+ even without extension.
+
+
+- t1lib compiles and runs under Win32 using the cygwin32 toolkit.
+
+
+- Maximum number of stem-hints enlarged (-> 256) because 128 were not enough
+ for complicated fonts.
+
+
+
+May 1999: t1lib-0.9
+-------------------
+
+
+- Sub-Pixel positioning for Antialiasing functions enthanced (It was in fact
+ not correct before.
+
+
+- Multiple Master fonts are rejected instead of SIGSEGV (nearly as
+ professional as supporting them ;)
+
+
+- An additional set of functions allows access, filling and manipulation of
+ outlines.
+
+
+- Functionality for non-antialiased "bytemaps".
+
+
+- "Smart Antialiasing", allows to automatically let t1lib decide what AA-level
+ to use. The switchlimits are adjustable.
+
+
+- An AFM-filename may explicitly be specified. This suppresses t1lib´s search
+ for these files. This allows interfacing with other path search systems like
+ kpathsea. This was suggested by Nicolai Langfeldt (janl@math.uio.no).
+
+
+- Some problems with aspect ratios different from 1 and transformed glyphs
+ fixed.
+
+
+- Support for Right-To-Left typesetting. This might be experimental because I
+ don't know the rules for this exactly.
+
+
+- In the context of Right-To-Left typesetting T1_ConcatGlyphs() expects one
+ additional argument "mode".
+ ATTENTION: This is an incompatible change with respect to V. 0.8.
+
+
+- abort()-calls in type1-sources are caught by longjmp(). t1lib does not
+ any longer exit a program. Rather, errors may be handled by the user.
+
+
+- If a rastering operation did not produce any black pixels, the rastering
+ fuctions do not return a NULL-glyph any longer. Rather, a glyph with the
+ correct metrics and NULL-bitmap pointer is returned. This seems to come
+ closer to accepted standards.
+
+
+- The t1python-package is currently not distributed with t1lib because the
+ interface is not up to date.
+
+
+- A lot of bugs fixed (and a lot of others introduced, of course :)
+
+
+
+
+June 1999: t1lib-0.9.1
+---------------------
+
+
+- Several Bug-fixes, some functions that have been reported to be missing by
+ users, but no general new features.
+
+
+- New functions T1_GetExtend(), T1_GetSlant() and T1_GetTransform() which give
+ access to currently active values of fontlevel transformations
+
+
+- New function T1_GetNoKernPairs() which gives access to the number of defined
+ kerningpairs.
+
+
+- New functions to query the grayvalue settings (T1_AAGetGrayValues(),
+ T1_AAHGetGrayValues() and T1_AANGetGrayValues())
+
+
+- Arbitrary linear transformations on fontlevel including caching using
+ T1_TransformFont() (on suggestion and patches by Derek B. Noonburg,
+ (derekn@foolabs.com)
+
+
+- Introduction of the initialization flag T1_NO_AFM which suppresses use of
+ AFM data. This limits the functionality of t1lib considerably but
+ applications that do not need those advanced functions can gain some
+ performance boost while loading fonts because AFM files are not parsed and
+ the mapping tables are not setup (also by Derek B. Noonburg)
+
+
+- xglyph clips output window for the function fonttable() to the physical
+ screen size. This is to prevent from freezing or exceeding resources if the
+ fonttable button had accidentally been pressed while a large size was active.
+
+
+- The utility function T1_DumpPixmap() removed from API. New function
+ T1_XImageFromGlyph() added to X11 interface. This function allows, together
+ with the Xpm-library function XpmWriteFileFromImage(), to write xpm-files
+ from glyphs of arbitrary depths, colors, etc ...
+
+
+- Functions T1_CopyOutline() and T1_FreeOutline() added to the outline interface.
+
+
+- Fixed alignment problem on 64bit architecture.
+
+
+
+September 1999: t1lib-0.9.2:
+----------------------------
+
+
+- Support for EMX-environments under MSDOS. This concerns the file locating
+ routines.
+
+
+- t1lib now allows for charstring code 15 and escape code 15 by ignoring
+ these. They may appear in some old Adobe fonts.
+
+
+- Makefiles are more independent of GNU make.
+
+
+- Finally, undefined/missing characters are handled consistent in all rastering
+ functions by substituting .notdef.
+
+
+- Several bug-fixes
+
+
+
+November 1999: t1lib-1.0:
+-------------------------
+
+
+- Bug-fixes.
+
+
+- There happen to exist different assumptions about what exactly ISOLatin1Encoding
+ is. Especially the name for char 45 (dec) is not uniquely specified in
+ ISO 8859-1. Thus t1lib provides two encoding files ISOLatin1Encoding one
+ which (PSLatin1.enc) is compatible with PostScript Level 2 and above.
+
+
+
+March 2000: t1lib-1.0.1:
+-------------------------
+
+
+- A few bug Fixes.
+
+
+- lenIV=-1 is now handled. According to an undocumented Adobe convention
+ lenIV=-1 indicates suppressing of charstring encryption.
+
+
+- Patches to compile t1lib und MS Visual C++ 6.0. In case something goes
+ wrong, please contact Nakano Hideo (hideo@mb.infoeddy.ne.jp).
+
+
+
+February 2001: t1lib-1.1.0:
+---------------------------
+
+
+- Bug Fixes.
+
+
+- Functions T1_GetFontFilePath() and T1_GetAfmFilePath() which return the
+ complete path of the files used by t1lib.
+
+
+- Fixed parser code which previously failed on ASCII-encrypted files in
+ which the hex-lines were separated by <LF><CR> instead of by <LF> (Yes,
+ there such DOSian files out there ...).
+
+
+- Multiple inclusion protection for t1lib.h
+
+
+- T1_QueryLigs() fixed. It did not work correct if successors and/or
+ ligatures were not in the current encoding.
+
+
+- New patches for VMS by Martin P. J. Zinser (zinser@decus.de).
+
+
+- Patch by Sergey Babkin (babkin@bellatlantic.net) to correct the rasterizer
+ to respect StdStemWidths.
+
+
+- General support for font subsetting.
+
+
+- Dokumentation also provided as pdf for those people who do not have LaTeX
+ installed. This is due to suggestions and patches by Nguyen-Dai Quy
+ (NDQ@iris.ltas.ulg.ac.be).
+
+
+
+April 2001: t1lib-1.1.1:
+------------------------
+
+
+- Update to libtool-1.3.5.
+
+
+- T1_GetFontBBox() also accepts specification consisting of floating point
+ numbers (as suggested by Derek B. Noonburg (derekn@foolabs.com)).
+
+
+- Within the near future the t1lib-webpage will be no longer available
+ because I will change my employer.
+
+
+- Similarly, the sources will be distributed from sunsite only from then on.
+
+
+- The Author's eMail-address will also become invalid in the near future. The
+ new and hopefully permanent eMail.address will be "Rainer.Menzner@web.de".
+
+
+
+July 2001: t1lib-1.2:
+----------------------
+
+
+- Fixed bug in subsetting code.
+
+
+- Fixed bug in AFM-parser code.
+
+
+- Fixed kerning mapping code. Kerning did not work correctly for characters
+ that appeared multiple times in an encoding vector.
+
+
+- In the same context a new function, T1_GetEncodingIndices() has been added
+ to the API. It returns an array of indices (by contrast,
+ T1_GetEncodingIndex() returns only the lowest index found).
+
+
+- Support for composite characters.
+
+
+- Additional support for dvips encoding files (thanks to suggestion and
+ contribution by Nicolai Langfeldt (janl@linpro.no).
+
+
+- Documentation is installed in PostScript and PDF format, but no longer in
+ DVI format.
+
+
+
+October 2001: t1lib-1.3:
+------------------------
+
+
+- *Really* an update to libtool-1.3.5
+
+
+- Global Font Metrics Information is loaded from AFM files in order to be able
+ to read the typographic ascender. Line ruling did not behave as
+ documented. However, problems could still exist because the typographic
+ ascender specification is optional in AFMs.
+
+
+- Reorganized search path handling and, in particular, the respective
+ documentation is more detailed.
+
+
+- The configuration file now allows multiple lines of one type of search path
+ specification and it is also possible to quote path specification in order
+ to specify paths that contains special characters like spaces, colons, etc.
+
+
+- Multiple font databases are supported.
+
+
+- T1_PrintLog() extended to accept a variable argument list.
+
+
+- The environment variable T1LIB_LOGMODE is evaluated to give the user the
+ chance to specify a loglevel and hence to detect t1lib-problems even if the
+ application programmer did not enable the log file features.
+
+
+- Further bug fixes
+
+
+
+November 2001: t1lib-1.3.1:
+---------------------------
+
+
+- Color problem in t1x11-module fixed.
+
+
+- Fixes in AFM parser. Among others, Version had been read as name, instead of
+ as string. This led to a failure to scan global font info for some standard AFMs.
+
+
+- Fixes in of OpenVMS special code
+
+
+- Further Fixes
+
+
+
+January 2003: t1lib-5.0.0:
+--------------------------
+
+
+- Forced PostScript target in the doc directory to file.
+
+
+- Subsetting code extended in order to ensure that components of
+ composite characters are also part of the subset.
+
+
+- Hinting meachanism reworked in order to get rid of some
+ rasterizing artifacts.
+
+
+- Experimental support for stroked fonts (PaintType=1)
+
+
+- Experimental support for stroking standard ATM fonts with PaintType=0.
+
+
+- For historical reasons, there happened to exist a few documented API
+ functions that did not adhere to the T1_... naming convention. After
+ considering the pro's and con's, I have decided to cleanup the interface,
+ thus making this version incompatible to the previous version. Especially
+ in the type1 subdirectory there are still a lot of global symbols, but at
+ least these are not part of the documented API. The following functions
+ are affected:
+
+ CheckForInit() --> T1_CheckForInit()
+ CheckForFontID() --> T1_CheckForFontID()
+ T1_Get_no_fonts() --> T1_GetNoFonts()
+
+ Furthermore, I have removed and made static a few functions which
+ accidentally had found their way into t1lib.h, but which had not been part
+ of the documented API.
+
+ I'm sorry if this causes inconveniences ...
+
+
+- The new version, 5.0.0, follows as consequence from the issues discussed
+ above. It is defined by the libtool quantities CURRENT, REVISION and AGE.
+
+
+- Functions for drawing rectangles.
+
+
+- Bug Fixes
+
+
+- Please also have a look at the topic "Future" in README.t1lib-5.0.0.
+
+
+
+February 2004: t1lib-5.0.1:
+---------------------------
+
+
+- Support for Flex was not adapted to the changes from 5.0.0. This led to
+ rasterization errors in fonts that use the Flex functionality --> fixed.
+
+
+- Bug Fixes
+
+
+
+April 2004: t1lib-5.0.2:
+------------------------
+
+
+- Changes not updated for this version
+
+
+
+Mai 2005: t1lib-5.1.0:
+----------------------
+
+
+- Check against MultipleMasterFonts somewhat more tolerant, so that
+ Type 1 Fonts automatically created from Multiple Master Fonts (e.g.
+ using Mmpfb) should now be acceptable.
+
+
+- The configure-machinery had been somewhat out of date and has been
+ updated. The distributed configure script has been generated by
+ AutoConf 2.59 and the redistributed libtool parts are taken from
+ GNU libtool 1.5.10.
+
+
+- Top-Level TeX-file in the doc subdirectory adapted to recent TeX
+ systems' requirements.
+
+
+- Added IsoLatin9.enc to distribution.
+
+
+- Subsetting extended so that it works for SEAC-constructed composites
+ even if no AFM composite character information is available
+
+
+- Somewhat more intelligent defaults for subsetting when composite
+ characters are included in the subset.
+
+
+- Reallocation had been broken by relocation of internal StandardEncoding
+ vector. This problem turned out on systems where realloc() actually
+ returned a different pointer.
+
+
+- Fix for outline code on 64bit systems. This involves a redefinition
+ of the T1_PATHPOINT struct. This should be uncritical because for 32bit
+ systems there is no difference, whereas on 64bit systems, this has never
+ worked correctly before.
+
+
+- DESTDIR support in Makefile.in by Volker Zell
+
+
+- Support for XLFD font database format (in which the fonts' names appear
+ in the first place on a line).
+
+
+- Further Bug Fixes
+
+
+
+December 2006: t1lib-5.1.1:
+---------------------------
+
+- DESTDIR support was missing and has been addded in install-target for type1afm.
+
+- A bug fix in Anti-Aliasing subsampling code, which could make t1lib crash
+ under certain conditions.
+
+- Small number of further fixes, in particular with respect to the build
+ mechanism.
+
+
+
+December 2007: t1lib-5.1.2:
+---------------------------
+
+- Small number of fixes reported by users. The fixes pertain to a
+ vulnerability issue, memory access issues.
+
+- More decent handling if Encoding and / or FontBBox specification are missing
+ (which is invalid with respect to the specification, but recoverablel).
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/README b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/README
new file mode 100644
index 00000000000..48f3f23f911
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/README
@@ -0,0 +1,21 @@
+This is a copy of the Charter fonts which Bitstream contributed to the X
+consortium, arranged for use with TeX. Here is the copyright notice:
+
+ (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+
+ You are hereby granted permission under all Bitstream propriety rights
+ to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream
+ Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts
+ for any purpose and without restriction; provided, that this notice is
+ left intact on all copies of such fonts and that Bitstream's trademark
+ is acknowledged as shown below on all unmodified copies of the 4 Charter
+ Type 1 fonts.
+
+ BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+I used the `afm2tfm' program which comes with Tom Rokicki's dvips to
+convert the AFM files to TFM and VF files. You can get dvips from
+labrea.stanford.edu.
+
+karl@cs.umb.edu
+Member of the League for Programming Freedom---write to lpf@uunet.uu.net.
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchb.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchb.afm
new file mode 100644
index 00000000000..31721010cfd
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchb.afm
@@ -0,0 +1,628 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0632
+Comment bitsManufacturingDate Tue Nov 6 02:14:13 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530632
+FontName CharterBT-Bold
+FullName Bitstream Charter Bold
+FamilyName Bitstream Charter
+Weight Bold
+ItalicAngle 0.00
+IsFixedPitch false
+FontBBox -166 -237 1263 963
+UnderlinePosition -109
+UnderlineThickness 91
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 488
+Ascender 740
+Descender -219
+StartCharMetrics 228
+C 32 ; WX 291 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 340 ; N exclam ; B 94 -8 247 685 ;
+C 34 ; WX 339 ; N quotedbl ; B 40 418 299 715 ;
+C 35 ; WX 736 ; N numbersign ; B 56 -24 675 710 ;
+C 36 ; WX 581 ; N dollar ; B 61 -102 533 742 ;
+C 37 ; WX 888 ; N percent ; B 36 -12 863 683 ;
+C 38 ; WX 741 ; N ampersand ; B 52 -12 725 684 ;
+C 39 ; WX 255 ; N quoteright ; B 47 395 220 698 ;
+C 40 ; WX 428 ; N parenleft ; B 90 -142 387 718 ;
+C 41 ; WX 428 ; N parenright ; B 37 -142 330 718 ;
+C 42 ; WX 500 ; N asterisk ; B 53 338 447 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 289 ; N comma ; B 30 -176 221 129 ;
+C 45 ; WX 326 ; N hyphen ; B 36 191 291 291 ;
+C 46 ; WX 289 ; N period ; B 65 -8 224 151 ;
+C 47 ; WX 491 ; N slash ; B -28 -93 472 672 ;
+C 48 ; WX 581 ; N zero ; B 39 -12 549 683 ;
+C 49 ; WX 581 ; N one ; B 108 0 495 681 ;
+C 50 ; WX 581 ; N two ; B 48 0 533 684 ;
+C 51 ; WX 581 ; N three ; B 42 -11 523 682 ;
+C 52 ; WX 581 ; N four ; B 25 -32 566 677 ;
+C 53 ; WX 581 ; N five ; B 54 -10 525 672 ;
+C 54 ; WX 581 ; N six ; B 46 -13 554 714 ;
+C 55 ; WX 581 ; N seven ; B 75 -34 556 672 ;
+C 56 ; WX 581 ; N eight ; B 41 -16 540 685 ;
+C 57 ; WX 581 ; N nine ; B 42 -54 546 683 ;
+C 58 ; WX 340 ; N colon ; B 94 -8 252 489 ;
+C 59 ; WX 340 ; N semicolon ; B 67 -176 255 489 ;
+C 60 ; WX 833 ; N less ; B 128 22 704 574 ;
+C 61 ; WX 833 ; N equal ; B 124 156 710 440 ;
+C 62 ; WX 833 ; N greater ; B 129 22 704 574 ;
+C 63 ; WX 487 ; N question ; B 35 -8 437 684 ;
+C 64 ; WX 917 ; N at ; B 74 -154 854 693 ;
+C 65 ; WX 651 ; N A ; B -12 0 670 678 ;
+C 66 ; WX 628 ; N B ; B 28 0 590 672 ;
+C 67 ; WX 638 ; N C ; B 40 -13 602 683 ;
+C 68 ; WX 716 ; N D ; B 28 0 682 672 ;
+C 69 ; WX 596 ; N E ; B 28 0 566 672 ;
+C 70 ; WX 552 ; N F ; B 25 0 529 672 ;
+C 71 ; WX 710 ; N G ; B 40 -12 691 683 ;
+C 72 ; WX 760 ; N H ; B 30 0 734 672 ;
+C 73 ; WX 354 ; N I ; B 29 0 329 672 ;
+C 74 ; WX 465 ; N J ; B 11 -13 465 672 ;
+C 75 ; WX 650 ; N K ; B 29 0 672 672 ;
+C 76 ; WX 543 ; N L ; B 27 0 533 672 ;
+C 77 ; WX 883 ; N M ; B 24 0 863 672 ;
+C 78 ; WX 727 ; N N ; B 24 0 711 672 ;
+C 79 ; WX 752 ; N O ; B 40 -17 718 687 ;
+C 80 ; WX 587 ; N P ; B 24 0 569 672 ;
+C 81 ; WX 752 ; N Q ; B 39 -179 720 687 ;
+C 82 ; WX 671 ; N R ; B 30 -7 692 672 ;
+C 83 ; WX 568 ; N S ; B 58 -12 517 683 ;
+C 84 ; WX 603 ; N T ; B 15 0 594 672 ;
+C 85 ; WX 705 ; N U ; B 20 -13 695 672 ;
+C 86 ; WX 635 ; N V ; B -21 -3 661 672 ;
+C 87 ; WX 946 ; N W ; B 1 0 945 672 ;
+C 88 ; WX 637 ; N X ; B -1 0 644 672 ;
+C 89 ; WX 610 ; N Y ; B -11 0 627 672 ;
+C 90 ; WX 592 ; N Z ; B 44 0 550 672 ;
+C 91 ; WX 443 ; N bracketleft ; B 135 -133 406 709 ;
+C 92 ; WX 491 ; N backslash ; B -8 -93 486 672 ;
+C 93 ; WX 443 ; N bracketright ; B 42 -133 312 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -152 ;
+C 96 ; WX 255 ; N quoteleft ; B 49 395 222 699 ;
+C 97 ; WX 544 ; N a ; B 40 -10 535 500 ;
+C 98 ; WX 577 ; N b ; B 9 -2 547 740 ;
+C 99 ; WX 476 ; N c ; B 34 -8 464 498 ;
+C 100 ; WX 596 ; N d ; B 36 -10 577 740 ;
+C 101 ; WX 524 ; N e ; B 37 -9 493 501 ;
+C 102 ; WX 341 ; N f ; B 30 0 412 744 ;
+C 103 ; WX 551 ; N g ; B 33 -218 555 498 ;
+C 104 ; WX 597 ; N h ; B 16 0 586 740 ;
+C 105 ; WX 305 ; N i ; B 29 0 293 724 ;
+C 106 ; WX 297 ; N j ; B -80 -215 242 724 ;
+C 107 ; WX 553 ; N k ; B 17 0 572 740 ;
+C 108 ; WX 304 ; N l ; B 22 0 292 740 ;
+C 109 ; WX 892 ; N m ; B 30 0 883 500 ;
+C 110 ; WX 605 ; N n ; B 27 0 594 499 ;
+C 111 ; WX 577 ; N o ; B 36 -9 547 499 ;
+C 112 ; WX 591 ; N p ; B 21 -219 560 500 ;
+C 113 ; WX 575 ; N q ; B 37 -218 572 499 ;
+C 114 ; WX 421 ; N r ; B 24 0 421 498 ;
+C 115 ; WX 447 ; N s ; B 40 -11 411 500 ;
+C 116 ; WX 358 ; N t ; B 18 -5 357 599 ;
+C 117 ; WX 600 ; N u ; B 22 -10 583 499 ;
+C 118 ; WX 513 ; N v ; B -7 0 535 488 ;
+C 119 ; WX 799 ; N w ; B -1 0 811 488 ;
+C 120 ; WX 531 ; N x ; B 11 0 532 488 ;
+C 121 ; WX 515 ; N y ; B -5 -219 537 486 ;
+C 122 ; WX 495 ; N z ; B 45 0 466 486 ;
+C 123 ; WX 493 ; N braceleft ; B 46 -134 421 705 ;
+C 124 ; WX 500 ; N bar ; B 207 -237 294 764 ;
+C 125 ; WX 493 ; N braceright ; B 62 -134 438 705 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 212 747 384 ;
+C 161 ; WX 340 ; N exclamdown ; B 93 -8 246 685 ;
+C 162 ; WX 581 ; N cent ; B 58 -103 504 612 ;
+C 163 ; WX 581 ; N sterling ; B 42 0 540 680 ;
+C 164 ; WX 167 ; N fraction ; B -166 -1 333 672 ;
+C 165 ; WX 595 ; N yen ; B -7 0 604 672 ;
+C 166 ; WX 581 ; N florin ; B 12 -149 535 683 ;
+C 167 ; WX 500 ; N section ; B 45 -142 455 720 ;
+C 168 ; WX 606 ; N currency ; B 36 166 571 699 ;
+C 169 ; WX 175 ; N quotesingle ; B 40 418 135 715 ;
+C 170 ; WX 475 ; N quotedblleft ; B 49 395 443 699 ;
+C 171 ; WX 449 ; N guillemotleft ; B 34 53 404 427 ;
+C 172 ; WX 255 ; N guilsinglleft ; B 34 53 207 427 ;
+C 173 ; WX 255 ; N guilsinglright ; B 37 53 211 427 ;
+C 174 ; WX 622 ; N fi ; B 30 0 605 745 ;
+C 175 ; WX 627 ; N fl ; B 30 0 616 746 ;
+C 177 ; WX 500 ; N endash ; B 0 195 500 286 ;
+C 178 ; WX 500 ; N dagger ; B 17 -130 484 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B 17 -132 484 718 ;
+C 180 ; WX 289 ; N periodcentered ; B 65 256 224 415 ;
+C 182 ; WX 491 ; N paragraph ; B 18 -79 458 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 255 ; N quotesinglbase ; B 32 -174 205 130 ;
+C 185 ; WX 475 ; N quotedblbase ; B 35 -174 429 130 ;
+C 186 ; WX 475 ; N quotedblright ; B 47 395 441 698 ;
+C 187 ; WX 449 ; N guillemotright ; B 42 53 412 427 ;
+C 188 ; WX 1000 ; N ellipsis ; B 87 -8 914 151 ;
+C 189 ; WX 1287 ; N perthousand ; B 36 -12 1263 683 ;
+C 191 ; WX 487 ; N questiondown ; B 37 -8 440 684 ;
+C 193 ; WX 500 ; N grave ; B 85 551 307 742 ;
+C 194 ; WX 500 ; N acute ; B 205 551 428 742 ;
+C 195 ; WX 500 ; N circumflex ; B 96 551 404 742 ;
+C 196 ; WX 500 ; N tilde ; B 87 570 411 723 ;
+C 197 ; WX 500 ; N macron ; B 85 603 417 676 ;
+C 198 ; WX 500 ; N breve ; B 98 567 403 719 ;
+C 199 ; WX 500 ; N dotaccent ; B 185 578 316 713 ;
+C 200 ; WX 500 ; N dieresis ; B 83 578 417 710 ;
+C 202 ; WX 500 ; N ring ; B 131 546 369 784 ;
+C 203 ; WX 500 ; N cedilla ; B 171 -230 374 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 107 551 490 742 ;
+C 206 ; WX 500 ; N ogonek ; B 176 -225 336 0 ;
+C 207 ; WX 500 ; N caron ; B 96 551 404 742 ;
+C 208 ; WX 1000 ; N emdash ; B 0 195 1000 286 ;
+C 225 ; WX 890 ; N AE ; B -59 0 863 672 ;
+C 227 ; WX 408 ; N ordfeminine ; B 30 323 402 681 ;
+C 232 ; WX 543 ; N Lslash ; B 9 0 533 672 ;
+C 233 ; WX 752 ; N Oslash ; B 40 -83 718 754 ;
+C 234 ; WX 1010 ; N OE ; B 39 -11 980 682 ;
+C 235 ; WX 433 ; N ordmasculine ; B 27 324 411 680 ;
+C 241 ; WX 768 ; N ae ; B 40 -10 735 500 ;
+C 245 ; WX 305 ; N dotlessi ; B 29 0 293 497 ;
+C 248 ; WX 304 ; N lslash ; B -3 0 328 740 ;
+C 249 ; WX 577 ; N oslash ; B 37 -83 548 571 ;
+C 250 ; WX 861 ; N oe ; B 37 -9 827 500 ;
+C 251 ; WX 642 ; N germandbls ; B 18 -9 622 743 ;
+C -1 ; WX 651 ; N Aacute ; B -12 0 670 930 ;
+C -1 ; WX 651 ; N Acircumflex ; B -12 0 670 930 ;
+C -1 ; WX 651 ; N Adieresis ; B -12 0 670 898 ;
+C -1 ; WX 651 ; N Agrave ; B -12 0 670 930 ;
+C -1 ; WX 651 ; N Aring ; B -12 0 670 963 ;
+C -1 ; WX 651 ; N Atilde ; B -12 0 670 911 ;
+C -1 ; WX 638 ; N Ccedilla ; B 40 -230 602 683 ;
+C -1 ; WX 596 ; N Eacute ; B 28 0 566 930 ;
+C -1 ; WX 596 ; N Ecircumflex ; B 28 0 566 930 ;
+C -1 ; WX 596 ; N Edieresis ; B 28 0 566 898 ;
+C -1 ; WX 596 ; N Egrave ; B 28 0 566 930 ;
+C -1 ; WX 354 ; N Iacute ; B 29 0 355 930 ;
+C -1 ; WX 354 ; N Icircumflex ; B 23 0 331 930 ;
+C -1 ; WX 354 ; N Idieresis ; B 10 0 344 898 ;
+C -1 ; WX 354 ; N Igrave ; B 12 0 329 930 ;
+C -1 ; WX 727 ; N Ntilde ; B 24 0 711 911 ;
+C -1 ; WX 752 ; N Oacute ; B 40 -17 718 930 ;
+C -1 ; WX 752 ; N Ocircumflex ; B 40 -17 718 930 ;
+C -1 ; WX 752 ; N Odieresis ; B 40 -17 718 898 ;
+C -1 ; WX 752 ; N Ograve ; B 40 -17 718 930 ;
+C -1 ; WX 752 ; N Otilde ; B 40 -17 718 911 ;
+C -1 ; WX 568 ; N Scaron ; B 58 -12 517 930 ;
+C -1 ; WX 705 ; N Uacute ; B 20 -13 695 930 ;
+C -1 ; WX 705 ; N Ucircumflex ; B 20 -13 695 930 ;
+C -1 ; WX 705 ; N Udieresis ; B 20 -13 695 898 ;
+C -1 ; WX 705 ; N Ugrave ; B 20 -13 695 930 ;
+C -1 ; WX 610 ; N Ydieresis ; B -11 0 627 898 ;
+C -1 ; WX 592 ; N Zcaron ; B 44 0 550 930 ;
+C -1 ; WX 544 ; N aacute ; B 40 -10 535 742 ;
+C -1 ; WX 544 ; N acircumflex ; B 40 -10 535 742 ;
+C -1 ; WX 544 ; N adieresis ; B 40 -10 535 710 ;
+C -1 ; WX 544 ; N agrave ; B 40 -10 535 742 ;
+C -1 ; WX 544 ; N aring ; B 40 -10 535 784 ;
+C -1 ; WX 544 ; N atilde ; B 40 -10 535 723 ;
+C -1 ; WX 476 ; N ccedilla ; B 34 -230 464 498 ;
+C -1 ; WX 524 ; N eacute ; B 37 -9 493 742 ;
+C -1 ; WX 524 ; N ecircumflex ; B 37 -9 493 742 ;
+C -1 ; WX 524 ; N edieresis ; B 37 -9 493 710 ;
+C -1 ; WX 524 ; N egrave ; B 37 -9 493 742 ;
+C -1 ; WX 305 ; N iacute ; B 29 0 331 742 ;
+C -1 ; WX 305 ; N icircumflex ; B -2 0 307 742 ;
+C -1 ; WX 305 ; N idieresis ; B -15 0 320 710 ;
+C -1 ; WX 305 ; N igrave ; B -13 0 293 742 ;
+C -1 ; WX 605 ; N ntilde ; B 27 0 594 723 ;
+C -1 ; WX 577 ; N oacute ; B 36 -9 547 742 ;
+C -1 ; WX 577 ; N ocircumflex ; B 36 -9 547 742 ;
+C -1 ; WX 577 ; N odieresis ; B 36 -9 547 710 ;
+C -1 ; WX 577 ; N ograve ; B 36 -9 547 742 ;
+C -1 ; WX 577 ; N otilde ; B 36 -9 547 723 ;
+C -1 ; WX 447 ; N scaron ; B 40 -11 411 742 ;
+C -1 ; WX 600 ; N uacute ; B 22 -10 583 742 ;
+C -1 ; WX 600 ; N ucircumflex ; B 22 -10 583 742 ;
+C -1 ; WX 600 ; N udieresis ; B 22 -10 583 710 ;
+C -1 ; WX 600 ; N ugrave ; B 22 -10 583 742 ;
+C -1 ; WX 515 ; N ydieresis ; B -5 -219 537 710 ;
+C -1 ; WX 495 ; N zcaron ; B 45 0 466 742 ;
+C -1 ; WX 800 ; N trademark ; B 111 398 710 662 ;
+C -1 ; WX 876 ; N copyright ; B 61 -50 825 730 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 175 710 421 ;
+C -1 ; WX 876 ; N registered ; B 61 -50 825 730 ;
+C -1 ; WX 833 ; N minus ; B 124 256 710 340 ;
+C -1 ; WX 716 ; N Eth ; B 15 0 682 672 ;
+C -1 ; WX 587 ; N Thorn ; B 32 0 572 672 ;
+C -1 ; WX 610 ; N Yacute ; B -11 0 627 930 ;
+C -1 ; WX 500 ; N brokenbar ; B 207 -172 294 699 ;
+C -1 ; WX 329 ; N degree ; B 20 424 309 713 ;
+C -1 ; WX 833 ; N divide ; B 124 45 710 551 ;
+C -1 ; WX 569 ; N eth ; B 34 -10 540 744 ;
+C -1 ; WX 578 ; N mu ; B -53 -206 546 433 ;
+C -1 ; WX 833 ; N multiply ; B 139 16 704 581 ;
+C -1 ; WX 899 ; N onehalf ; B 68 -1 869 677 ;
+C -1 ; WX 899 ; N onequarter ; B 68 -18 890 677 ;
+C -1 ; WX 383 ; N onesuperior ; B 71 268 327 677 ;
+C -1 ; WX 833 ; N plusminus ; B 124 7 710 590 ;
+C -1 ; WX 591 ; N thorn ; B 20 -219 562 740 ;
+C -1 ; WX 899 ; N threequarters ; B 26 -18 890 678 ;
+C -1 ; WX 383 ; N threesuperior ; B 27 261 346 678 ;
+C -1 ; WX 383 ; N twosuperior ; B 31 268 352 679 ;
+C -1 ; WX 515 ; N yacute ; B -5 -219 537 742 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 361
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A T -111
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A f -19
+KPX A t -19
+KPX A v -32
+KPX A w -46
+KPX A y -23
+KPX A fi -19
+KPX A fl -19
+KPX A quotedblright -130
+KPX B hyphen 37
+KPX B C 19
+KPX B G 19
+KPX B O 19
+KPX B S 19
+KPX B V -37
+KPX B W -19
+KPX B Y -19
+KPX B Oslash 19
+KPX B OE 19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C A -19
+KPX C S 19
+KPX C quotedblright 37
+KPX C Aring -19
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D Y -19
+KPX D Aring -19
+KPX F comma -190
+KPX F hyphen -74
+KPX F period -190
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -97
+KPX F a -79
+KPX F e -65
+KPX F i -19
+KPX F o -46
+KPX F r -37
+KPX F u -37
+KPX F y -37
+KPX F quotesinglbase -56
+KPX F quotedblbase -56
+KPX F ae -79
+KPX F oslash -46
+KPX F oe -46
+KPX F Aring -97
+KPX G hyphen 19
+KPX G T -19
+KPX G W -19
+KPX G Y -23
+KPX J A -37
+KPX J Aring -37
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -37
+KPX K Y -28
+KPX K a 19
+KPX K e -37
+KPX K o -37
+KPX K u -19
+KPX K y -102
+KPX K quotesinglbase 37
+KPX K quotedblbase 37
+KPX K Oslash -28
+KPX K OE -28
+KPX K ae 19
+KPX K oslash -37
+KPX K oe -37
+KPX K Aring -23
+KPX L quoteright -167
+KPX L T -83
+KPX L U -19
+KPX L V -120
+KPX L W -88
+KPX L Y -102
+KPX L quoteleft -74
+KPX L a 19
+KPX L e 19
+KPX L o 19
+KPX L y -56
+KPX L quotedblleft -74
+KPX L quotesinglbase 19
+KPX L quotedblbase 19
+KPX L quotedblright -167
+KPX L ae 19
+KPX L oslash 19
+KPX L oe 19
+KPX O comma -60
+KPX O hyphen 37
+KPX O period -60
+KPX O V -19
+KPX O X -19
+KPX P comma -259
+KPX P hyphen -93
+KPX P period -259
+KPX P colon -37
+KPX P semicolon -37
+KPX P A -93
+KPX P U -19
+KPX P a -37
+KPX P e -37
+KPX P o -32
+KPX P quotesinglbase -93
+KPX P quotedblbase -93
+KPX P ae -37
+KPX P oslash -32
+KPX P oe -32
+KPX P Aring -93
+KPX Q quoteright 19
+KPX Q hyphen 37
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R colon -19
+KPX R semicolon -19
+KPX R T -37
+KPX R V -56
+KPX R W -42
+KPX R Y -51
+KPX R quoteleft -37
+KPX R e -37
+KPX R o -37
+KPX R u -37
+KPX R y -46
+KPX R quotedblleft -37
+KPX R quotesinglbase 37
+KPX R quotedblbase 37
+KPX R quotedblright -37
+KPX R oslash -37
+KPX R oe -37
+KPX T quoteright 19
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -111
+KPX T T 19
+KPX T quoteleft 37
+KPX T a -97
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -97
+KPX T r -74
+KPX T s -74
+KPX T u -111
+KPX T w -74
+KPX T y -93
+KPX T quotedblleft 37
+KPX T guillemotleft -37
+KPX T guilsinglleft -37
+KPX T quotedblright 19
+KPX T ae -97
+KPX T oslash -97
+KPX T oe -97
+KPX T Aring -111
+KPX U A -32
+KPX U J -28
+KPX U Aring -32
+KPX V quoteright 37
+KPX V comma -222
+KPX V hyphen -93
+KPX V period -222
+KPX V colon -102
+KPX V semicolon -102
+KPX V A -79
+KPX V O -19
+KPX V a -111
+KPX V e -106
+KPX V i -28
+KPX V o -93
+KPX V u -65
+KPX V y -65
+KPX V quotesinglbase -74
+KPX V quotedblbase -74
+KPX V quotedblright 37
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -111
+KPX V oslash -93
+KPX V oe -93
+KPX V Aring -79
+KPX W quoteright 19
+KPX W comma -176
+KPX W hyphen -74
+KPX W period -176
+KPX W colon -88
+KPX W semicolon -88
+KPX W A -60
+KPX W a -88
+KPX W e -83
+KPX W i -37
+KPX W o -88
+KPX W r -65
+KPX W u -60
+KPX W y -42
+KPX W quotesinglbase -37
+KPX W quotedblbase -37
+KPX W quotedblright 19
+KPX W ae -88
+KPX W oslash -88
+KPX W oe -88
+KPX W Aring -60
+KPX X hyphen -37
+KPX X A -19
+KPX X C -19
+KPX X O -19
+KPX X e -37
+KPX X quotesinglbase 19
+KPX X quotedblbase 19
+KPX X Oslash -19
+KPX X OE -19
+KPX X Aring -19
+KPX Y quoteright 28
+KPX Y comma -130
+KPX Y hyphen -130
+KPX Y period -130
+KPX Y colon -125
+KPX Y semicolon -125
+KPX Y A -60
+KPX Y C -19
+KPX Y a -116
+KPX Y e -125
+KPX Y i -37
+KPX Y o -116
+KPX Y u -88
+KPX Y guillemotleft -56
+KPX Y guilsinglleft -56
+KPX Y quotesinglbase -37
+KPX Y quotedblbase -37
+KPX Y quotedblright 28
+KPX Y ae -116
+KPX Y oslash -116
+KPX Y oe -116
+KPX Y Aring -60
+KPX quoteleft A -130
+KPX quoteleft J -148
+KPX quoteleft V 56
+KPX quoteleft W 37
+KPX quoteleft X 37
+KPX quoteleft Y 37
+KPX quoteleft v 28
+KPX quoteleft w 19
+KPX quoteleft y 19
+KPX quoteleft AE -111
+KPX quoteleft Aring -130
+KPX f quoteright 74
+KPX f comma -37
+KPX f hyphen -19
+KPX f period -37
+KPX f quoteleft 37
+KPX f quotedblleft 37
+KPX f quotedblright 74
+KPX r comma -111
+KPX r period -111
+KPX r quotesinglbase -37
+KPX r quotedblbase -37
+KPX v quoteright 28
+KPX v comma -120
+KPX v period -120
+KPX v quotedblright 28
+KPX w quoteright 19
+KPX w comma -120
+KPX w period -120
+KPX w quoteleft 19
+KPX w quotedblleft 19
+KPX w quotesinglbase -37
+KPX w quotedblbase -37
+KPX w quotedblright 19
+KPX x e -19
+KPX x o -19
+KPX x oslash -19
+KPX x oe -19
+KPX y comma -134
+KPX y period -134
+KPX y quoteleft 19
+KPX y quotedblleft 19
+KPX quotedblleft A -130
+KPX quotedblleft J -148
+KPX quotedblleft V 56
+KPX quotedblleft W 37
+KPX quotedblleft X 37
+KPX quotedblleft Y 37
+KPX quotedblleft v 28
+KPX quotedblleft w 19
+KPX quotedblleft y 19
+KPX quotedblleft AE -111
+KPX quotedblleft Aring -130
+KPX guilsinglright Y -56
+KPX quotesinglbase A 19
+KPX quotesinglbase V -37
+KPX quotesinglbase X 19
+KPX quotesinglbase Y -19
+KPX quotesinglbase AE 74
+KPX quotesinglbase Aring 19
+KPX quotedblbase A 19
+KPX quotedblbase V -37
+KPX quotedblbase X 19
+KPX quotedblbase Y -19
+KPX quotedblbase AE 74
+KPX quotedblbase Aring 19
+KPX guillemotright Y -56
+KPX AE hyphen 19
+KPX Lslash quoteright -167
+KPX Lslash T -83
+KPX Lslash U -19
+KPX Lslash V -120
+KPX Lslash W -88
+KPX Lslash Y -102
+KPX Lslash quoteleft -74
+KPX Lslash a 19
+KPX Lslash e 19
+KPX Lslash o 19
+KPX Lslash y -56
+KPX Lslash quotedblleft -74
+KPX Lslash quotesinglbase 19
+KPX Lslash quotedblbase 19
+KPX Lslash quotedblright -167
+KPX Lslash ae 19
+KPX Lslash oslash 19
+KPX Lslash oe 19
+KPX Oslash comma -60
+KPX Oslash hyphen 37
+KPX Oslash period -60
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Aring quoteright -130
+KPX Aring T -111
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring f -19
+KPX Aring t -19
+KPX Aring v -32
+KPX Aring w -46
+KPX Aring y -23
+KPX Aring fi -19
+KPX Aring fl -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth Y -19
+KPX Eth Aring -19
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchbi.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchbi.afm
new file mode 100644
index 00000000000..d16eb097077
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchbi.afm
@@ -0,0 +1,645 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0633
+Comment bitsManufacturingDate Tue Nov 6 02:16:48 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530633
+FontName CharterBT-BoldItalic
+FullName Bitstream Charter Bold Italic
+FamilyName Bitstream Charter
+Weight Bold
+ItalicAngle 11.0000
+IsFixedPitch false
+FontBBox -190 -237 1243 972
+UnderlinePosition -109
+UnderlineThickness 91
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 495
+Ascender 736
+Descender -218
+StartCharMetrics 228
+C 32 ; WX 293 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 340 ; N exclam ; B 43 -8 295 685 ;
+C 34 ; WX 339 ; N quotedbl ; B 40 418 299 715 ;
+C 35 ; WX 751 ; N numbersign ; B 56 -24 689 710 ;
+C 36 ; WX 586 ; N dollar ; B 24 -105 544 745 ;
+C 37 ; WX 898 ; N percent ; B 54 -12 846 683 ;
+C 38 ; WX 730 ; N ampersand ; B 19 -13 698 685 ;
+C 39 ; WX 261 ; N quoteright ; B 63 395 269 699 ;
+C 40 ; WX 420 ; N parenleft ; B 66 -142 459 718 ;
+C 41 ; WX 420 ; N parenright ; B -62 -142 331 718 ;
+C 42 ; WX 500 ; N asterisk ; B 96 338 490 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 292 ; N comma ; B -57 -176 168 130 ;
+C 45 ; WX 320 ; N hyphen ; B 9 191 282 291 ;
+C 46 ; WX 294 ; N period ; B 22 -6 175 149 ;
+C 47 ; WX 481 ; N slash ; B -119 -93 525 672 ;
+C 48 ; WX 586 ; N zero ; B 29 -13 556 684 ;
+C 49 ; WX 586 ; N one ; B 79 0 438 681 ;
+C 50 ; WX 586 ; N two ; B -4 0 531 683 ;
+C 51 ; WX 586 ; N three ; B 11 -11 540 683 ;
+C 52 ; WX 586 ; N four ; B -2 -33 551 677 ;
+C 53 ; WX 586 ; N five ; B 19 -10 552 672 ;
+C 54 ; WX 586 ; N six ; B 31 -12 532 719 ;
+C 55 ; WX 586 ; N seven ; B 74 -34 612 672 ;
+C 56 ; WX 586 ; N eight ; B 24 -18 549 686 ;
+C 57 ; WX 586 ; N nine ; B 47 -58 558 684 ;
+C 58 ; WX 346 ; N colon ; B 49 -6 263 487 ;
+C 59 ; WX 346 ; N semicolon ; B -25 -176 263 487 ;
+C 60 ; WX 833 ; N less ; B 128 22 704 574 ;
+C 61 ; WX 833 ; N equal ; B 124 156 710 440 ;
+C 62 ; WX 833 ; N greater ; B 129 22 704 574 ;
+C 63 ; WX 492 ; N question ; B 74 -8 471 684 ;
+C 64 ; WX 936 ; N at ; B 76 -154 871 693 ;
+C 65 ; WX 634 ; N A ; B -68 0 613 678 ;
+C 66 ; WX 628 ; N B ; B -24 0 580 672 ;
+C 67 ; WX 625 ; N C ; B 36 -13 637 684 ;
+C 68 ; WX 702 ; N D ; B -26 0 661 672 ;
+C 69 ; WX 581 ; N E ; B -22 0 580 672 ;
+C 70 ; WX 539 ; N F ; B -23 0 570 671 ;
+C 71 ; WX 693 ; N G ; B 38 -12 671 685 ;
+C 72 ; WX 747 ; N H ; B -25 0 768 672 ;
+C 73 ; WX 353 ; N I ; B -21 0 370 672 ;
+C 74 ; WX 474 ; N J ; B -46 -14 497 672 ;
+C 75 ; WX 653 ; N K ; B -26 -7 695 672 ;
+C 76 ; WX 529 ; N L ; B -26 0 489 672 ;
+C 77 ; WX 894 ; N M ; B -25 0 913 672 ;
+C 78 ; WX 712 ; N N ; B -27 0 744 672 ;
+C 79 ; WX 729 ; N O ; B 37 -14 690 684 ;
+C 80 ; WX 581 ; N P ; B -24 0 583 672 ;
+C 81 ; WX 729 ; N Q ; B 36 -165 705 684 ;
+C 82 ; WX 645 ; N R ; B -22 -7 632 671 ;
+C 83 ; WX 553 ; N S ; B 23 -8 509 684 ;
+C 84 ; WX 584 ; N T ; B 37 0 628 672 ;
+C 85 ; WX 701 ; N U ; B 71 -13 735 672 ;
+C 86 ; WX 617 ; N V ; B 26 -3 677 672 ;
+C 87 ; WX 921 ; N W ; B 43 0 963 672 ;
+C 88 ; WX 608 ; N X ; B -66 0 658 672 ;
+C 89 ; WX 586 ; N Y ; B 26 0 656 672 ;
+C 90 ; WX 572 ; N Z ; B -18 0 581 672 ;
+C 91 ; WX 449 ; N bracketleft ; B 51 -133 472 709 ;
+C 92 ; WX 481 ; N backslash ; B 21 -93 505 672 ;
+C 93 ; WX 449 ; N bracketright ; B -43 -133 379 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -152 ;
+C 96 ; WX 261 ; N quoteleft ; B 76 395 282 699 ;
+C 97 ; WX 572 ; N a ; B 18 -9 548 494 ;
+C 98 ; WX 556 ; N b ; B 26 -9 508 736 ;
+C 99 ; WX 437 ; N c ; B 15 -11 410 493 ;
+C 100 ; WX 579 ; N d ; B 21 -9 558 736 ;
+C 101 ; WX 464 ; N e ; B 18 -10 431 491 ;
+C 102 ; WX 325 ; N f ; B -155 -214 447 733 ;
+C 103 ; WX 517 ; N g ; B -31 -218 528 492 ;
+C 104 ; WX 595 ; N h ; B 20 -7 561 736 ;
+C 105 ; WX 318 ; N i ; B 28 -7 294 725 ;
+C 106 ; WX 297 ; N j ; B -146 -215 285 724 ;
+C 107 ; WX 559 ; N k ; B 22 -8 544 736 ;
+C 108 ; WX 307 ; N l ; B 34 -9 280 736 ;
+C 109 ; WX 883 ; N m ; B 32 -7 852 494 ;
+C 110 ; WX 600 ; N n ; B 26 -7 569 494 ;
+C 111 ; WX 550 ; N o ; B 18 -11 501 493 ;
+C 112 ; WX 565 ; N p ; B -64 -218 519 494 ;
+C 113 ; WX 562 ; N q ; B 23 -218 516 496 ;
+C 114 ; WX 449 ; N r ; B 26 0 451 494 ;
+C 115 ; WX 403 ; N s ; B -12 -10 363 494 ;
+C 116 ; WX 366 ; N t ; B 39 -8 370 601 ;
+C 117 ; WX 599 ; N u ; B 28 -10 572 489 ;
+C 118 ; WX 492 ; N v ; B -8 -1 472 495 ;
+C 119 ; WX 768 ; N w ; B -2 0 741 495 ;
+C 120 ; WX 510 ; N x ; B -38 -7 512 495 ;
+C 121 ; WX 494 ; N y ; B -79 -216 514 494 ;
+C 122 ; WX 465 ; N z ; B -20 -14 461 503 ;
+C 123 ; WX 487 ; N braceleft ; B 47 -134 430 705 ;
+C 124 ; WX 500 ; N bar ; B 207 -237 294 764 ;
+C 125 ; WX 487 ; N braceright ; B 58 -134 441 705 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 212 747 384 ;
+C 161 ; WX 340 ; N exclamdown ; B 42 -8 294 685 ;
+C 162 ; WX 586 ; N cent ; B 45 -104 535 610 ;
+C 163 ; WX 586 ; N sterling ; B -12 0 562 677 ;
+C 164 ; WX 167 ; N fraction ; B -190 0 353 672 ;
+C 165 ; WX 601 ; N yen ; B 9 0 652 668 ;
+C 166 ; WX 586 ; N florin ; B -63 -149 586 683 ;
+C 167 ; WX 500 ; N section ; B -11 -142 490 720 ;
+C 168 ; WX 606 ; N currency ; B 36 166 571 699 ;
+C 169 ; WX 175 ; N quotesingle ; B 40 418 135 715 ;
+C 170 ; WX 481 ; N quotedblleft ; B 77 395 504 699 ;
+C 171 ; WX 450 ; N guillemotleft ; B 10 54 429 425 ;
+C 172 ; WX 266 ; N guilsinglleft ; B 10 54 228 425 ;
+C 173 ; WX 266 ; N guilsinglright ; B -13 54 205 425 ;
+C 174 ; WX 621 ; N fi ; B -154 -214 600 735 ;
+C 175 ; WX 629 ; N fl ; B -154 -214 603 736 ;
+C 177 ; WX 500 ; N endash ; B -26 195 498 286 ;
+C 178 ; WX 500 ; N dagger ; B 44 -130 511 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B -25 -132 511 718 ;
+C 180 ; WX 292 ; N periodcentered ; B 70 258 223 413 ;
+C 182 ; WX 492 ; N paragraph ; B 18 -79 467 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 261 ; N quotesinglbase ; B -54 -174 151 130 ;
+C 185 ; WX 481 ; N quotedblbase ; B -51 -174 375 130 ;
+C 186 ; WX 481 ; N quotedblright ; B 64 395 490 699 ;
+C 187 ; WX 450 ; N guillemotright ; B -13 54 406 425 ;
+C 188 ; WX 1000 ; N ellipsis ; B 41 -6 862 149 ;
+C 189 ; WX 1291 ; N perthousand ; B 54 -12 1243 683 ;
+C 191 ; WX 492 ; N questiondown ; B 6 -8 400 684 ;
+C 193 ; WX 500 ; N grave ; B 164 551 349 742 ;
+C 194 ; WX 500 ; N acute ; B 247 551 506 742 ;
+C 195 ; WX 500 ; N circumflex ; B 137 551 446 742 ;
+C 196 ; WX 500 ; N tilde ; B 132 570 486 723 ;
+C 197 ; WX 500 ; N macron ; B 137 607 482 675 ;
+C 198 ; WX 500 ; N breve ; B 167 567 477 719 ;
+C 199 ; WX 500 ; N dotaccent ; B 237 576 370 713 ;
+C 200 ; WX 500 ; N dieresis ; B 137 578 472 711 ;
+C 202 ; WX 500 ; N ring ; B 199 551 428 780 ;
+C 203 ; WX 500 ; N cedilla ; B 58 -230 279 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 150 551 578 742 ;
+C 206 ; WX 500 ; N ogonek ; B 83 -225 243 0 ;
+C 207 ; WX 500 ; N caron ; B 174 551 483 742 ;
+C 208 ; WX 1000 ; N emdash ; B -22 195 1000 286 ;
+C 225 ; WX 894 ; N AE ; B -103 0 896 672 ;
+C 227 ; WX 429 ; N ordfeminine ; B 13 318 411 671 ;
+C 232 ; WX 529 ; N Lslash ; B -26 0 489 672 ;
+C 233 ; WX 729 ; N Oslash ; B 37 -82 691 751 ;
+C 234 ; WX 1003 ; N OE ; B 37 -13 999 684 ;
+C 235 ; WX 413 ; N ordmasculine ; B 13 317 376 671 ;
+C 241 ; WX 719 ; N ae ; B 4 -9 684 494 ;
+C 245 ; WX 318 ; N dotlessi ; B 28 -7 294 494 ;
+C 248 ; WX 307 ; N lslash ; B -17 -9 331 736 ;
+C 249 ; WX 550 ; N oslash ; B 19 -87 501 568 ;
+C 250 ; WX 795 ; N oe ; B 20 -10 759 494 ;
+C 251 ; WX 622 ; N germandbls ; B -161 -214 572 738 ;
+C -1 ; WX 634 ; N Aacute ; B -68 0 613 928 ;
+C -1 ; WX 634 ; N Acircumflex ; B -68 0 613 928 ;
+C -1 ; WX 634 ; N Adieresis ; B -68 0 613 897 ;
+C -1 ; WX 634 ; N Agrave ; B -68 0 613 928 ;
+C -1 ; WX 634 ; N Aring ; B -68 0 613 972 ;
+C -1 ; WX 634 ; N Atilde ; B -68 0 613 909 ;
+C -1 ; WX 625 ; N Ccedilla ; B 36 -230 637 684 ;
+C -1 ; WX 581 ; N Eacute ; B -22 0 580 928 ;
+C -1 ; WX 581 ; N Ecircumflex ; B -22 0 580 928 ;
+C -1 ; WX 581 ; N Edieresis ; B -22 0 580 897 ;
+C -1 ; WX 581 ; N Egrave ; B -22 0 580 928 ;
+C -1 ; WX 353 ; N Iacute ; B -21 0 448 928 ;
+C -1 ; WX 353 ; N Icircumflex ; B -21 0 388 928 ;
+C -1 ; WX 353 ; N Idieresis ; B -21 0 414 897 ;
+C -1 ; WX 353 ; N Igrave ; B -21 0 370 928 ;
+C -1 ; WX 712 ; N Ntilde ; B -27 0 744 909 ;
+C -1 ; WX 729 ; N Oacute ; B 37 -14 690 928 ;
+C -1 ; WX 729 ; N Ocircumflex ; B 37 -14 690 928 ;
+C -1 ; WX 729 ; N Odieresis ; B 37 -14 690 897 ;
+C -1 ; WX 729 ; N Ograve ; B 37 -14 690 928 ;
+C -1 ; WX 729 ; N Otilde ; B 37 -14 690 909 ;
+C -1 ; WX 553 ; N Scaron ; B 23 -8 525 928 ;
+C -1 ; WX 701 ; N Uacute ; B 71 -13 735 928 ;
+C -1 ; WX 701 ; N Ucircumflex ; B 71 -13 735 928 ;
+C -1 ; WX 701 ; N Udieresis ; B 71 -13 735 897 ;
+C -1 ; WX 701 ; N Ugrave ; B 71 -13 735 928 ;
+C -1 ; WX 586 ; N Ydieresis ; B 26 0 656 897 ;
+C -1 ; WX 572 ; N Zcaron ; B -18 0 581 928 ;
+C -1 ; WX 572 ; N aacute ; B 18 -9 548 742 ;
+C -1 ; WX 572 ; N acircumflex ; B 18 -9 548 742 ;
+C -1 ; WX 572 ; N adieresis ; B 18 -9 548 711 ;
+C -1 ; WX 572 ; N agrave ; B 18 -9 548 742 ;
+C -1 ; WX 572 ; N aring ; B 18 -9 548 774 ;
+C -1 ; WX 572 ; N atilde ; B 18 -9 548 723 ;
+C -1 ; WX 437 ; N ccedilla ; B 15 -230 410 493 ;
+C -1 ; WX 464 ; N eacute ; B 18 -10 488 742 ;
+C -1 ; WX 464 ; N ecircumflex ; B 18 -10 431 742 ;
+C -1 ; WX 464 ; N edieresis ; B 18 -10 454 711 ;
+C -1 ; WX 464 ; N egrave ; B 18 -10 431 742 ;
+C -1 ; WX 318 ; N iacute ; B 28 -7 398 742 ;
+C -1 ; WX 318 ; N icircumflex ; B 28 -7 338 742 ;
+C -1 ; WX 318 ; N idieresis ; B 28 -7 364 711 ;
+C -1 ; WX 318 ; N igrave ; B 28 -7 294 742 ;
+C -1 ; WX 600 ; N ntilde ; B 26 -7 569 723 ;
+C -1 ; WX 550 ; N oacute ; B 18 -11 531 742 ;
+C -1 ; WX 550 ; N ocircumflex ; B 18 -11 501 742 ;
+C -1 ; WX 550 ; N odieresis ; B 18 -11 501 711 ;
+C -1 ; WX 550 ; N ograve ; B 18 -11 501 742 ;
+C -1 ; WX 550 ; N otilde ; B 18 -11 511 723 ;
+C -1 ; WX 403 ; N scaron ; B -12 -10 435 742 ;
+C -1 ; WX 599 ; N uacute ; B 28 -10 572 742 ;
+C -1 ; WX 599 ; N ucircumflex ; B 28 -10 572 742 ;
+C -1 ; WX 599 ; N udieresis ; B 28 -10 572 711 ;
+C -1 ; WX 599 ; N ugrave ; B 28 -10 572 742 ;
+C -1 ; WX 494 ; N ydieresis ; B -79 -216 514 711 ;
+C -1 ; WX 465 ; N zcaron ; B -20 -14 466 742 ;
+C -1 ; WX 817 ; N trademark ; B 113 398 724 663 ;
+C -1 ; WX 894 ; N copyright ; B 62 -50 842 730 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 175 710 421 ;
+C -1 ; WX 894 ; N registered ; B 62 -50 842 730 ;
+C -1 ; WX 833 ; N minus ; B 124 256 710 340 ;
+C -1 ; WX 702 ; N Eth ; B -25 0 661 672 ;
+C -1 ; WX 576 ; N Thorn ; B -26 0 553 666 ;
+C -1 ; WX 586 ; N Yacute ; B 26 0 656 928 ;
+C -1 ; WX 500 ; N brokenbar ; B 207 -172 294 699 ;
+C -1 ; WX 329 ; N degree ; B 20 424 309 713 ;
+C -1 ; WX 833 ; N divide ; B 124 45 710 551 ;
+C -1 ; WX 561 ; N eth ; B 25 -12 524 740 ;
+C -1 ; WX 578 ; N mu ; B -53 -206 546 433 ;
+C -1 ; WX 833 ; N multiply ; B 139 16 704 581 ;
+C -1 ; WX 905 ; N onehalf ; B 49 0 871 677 ;
+C -1 ; WX 905 ; N onequarter ; B 49 -19 884 677 ;
+C -1 ; WX 387 ; N onesuperior ; B 52 268 289 677 ;
+C -1 ; WX 833 ; N plusminus ; B 124 7 710 590 ;
+C -1 ; WX 565 ; N thorn ; B -64 -218 519 736 ;
+C -1 ; WX 905 ; N threequarters ; B 6 -19 884 678 ;
+C -1 ; WX 387 ; N threesuperior ; B 7 261 357 679 ;
+C -1 ; WX 387 ; N twosuperior ; B -3 268 351 679 ;
+C -1 ; WX 494 ; N yacute ; B -79 -216 514 742 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 378
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A colon 19
+KPX A semicolon 19
+KPX A S 19
+KPX A T -37
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A y -19
+KPX A quotedblright -130
+KPX B hyphen 56
+KPX B S 19
+KPX B V -19
+KPX B W -19
+KPX B Y -19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C S 19
+KPX C quotedblright 37
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D W -19
+KPX D Y -28
+KPX D Aring -19
+KPX F comma -167
+KPX F hyphen -56
+KPX F period -167
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -32
+KPX F a -60
+KPX F e -65
+KPX F i -19
+KPX F o -46
+KPX F r -19
+KPX F u -19
+KPX F quotesinglbase -37
+KPX F quotedblbase -37
+KPX F ae -60
+KPX F oslash -46
+KPX F oe -46
+KPX F Aring -32
+KPX G hyphen 19
+KPX J A -23
+KPX J Aring -23
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -42
+KPX K Y -32
+KPX K a -19
+KPX K e -19
+KPX K o -37
+KPX K u -19
+KPX K y -83
+KPX K quotesinglbase 56
+KPX K quotedblbase 56
+KPX K Oslash -28
+KPX K OE -28
+KPX K ae -19
+KPX K oslash -37
+KPX K oe -37
+KPX K Aring -23
+KPX L quoteright -185
+KPX L hyphen 56
+KPX L A 19
+KPX L O -19
+KPX L T -74
+KPX L U -37
+KPX L V -102
+KPX L W -88
+KPX L Y -88
+KPX L quoteleft -56
+KPX L u -19
+KPX L y -74
+KPX L quotedblleft -56
+KPX L quotesinglbase 19
+KPX L quotedblbase 19
+KPX L quotedblright -185
+KPX L Oslash -19
+KPX L OE -19
+KPX L Aring 19
+KPX O comma -37
+KPX O hyphen 19
+KPX O period -37
+KPX O V -19
+KPX O X -19
+KPX O Y -19
+KPX P comma -250
+KPX P hyphen -56
+KPX P period -250
+KPX P colon -19
+KPX P semicolon -19
+KPX P A -74
+KPX P U -19
+KPX P W -19
+KPX P Y -19
+KPX P a -37
+KPX P e -37
+KPX P i 19
+KPX P n 19
+KPX P o -32
+KPX P r 19
+KPX P u 19
+KPX P y 19
+KPX P quotesinglbase -93
+KPX P quotedblbase -93
+KPX P ae -37
+KPX P oslash -32
+KPX P oe -32
+KPX P Aring -74
+KPX Q quoteright 19
+KPX Q hyphen 19
+KPX Q quotesinglbase 56
+KPX Q quotedblbase 56
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R comma 19
+KPX R hyphen -19
+KPX R period 19
+KPX R C -19
+KPX R T -19
+KPX R V -19
+KPX R W -23
+KPX R Y -37
+KPX R quoteleft -19
+KPX R e -19
+KPX R o -19
+KPX R quotedblleft -19
+KPX R quotesinglbase 56
+KPX R quotedblbase 56
+KPX R quotedblright -37
+KPX R oslash -19
+KPX R oe -19
+KPX S A 19
+KPX S G 19
+KPX S O 19
+KPX S Q 19
+KPX S S -19
+KPX S Oslash 19
+KPX S OE 19
+KPX S Aring 19
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -56
+KPX T T 19
+KPX T a -116
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -97
+KPX T r -56
+KPX T s -93
+KPX T u -93
+KPX T w -93
+KPX T y -74
+KPX T guillemotleft -37
+KPX T guilsinglleft -37
+KPX T quotesinglbase -19
+KPX T quotedblbase -19
+KPX T ae -116
+KPX T oslash -97
+KPX T oe -97
+KPX T Aring -56
+KPX U A -28
+KPX U J -19
+KPX U Z -19
+KPX U Aring -28
+KPX V comma -185
+KPX V hyphen -56
+KPX V period -185
+KPX V colon -93
+KPX V semicolon -93
+KPX V A -97
+KPX V O -19
+KPX V a -93
+KPX V e -93
+KPX V i -28
+KPX V o -60
+KPX V u -32
+KPX V y -28
+KPX V quotesinglbase -37
+KPX V quotedblbase -37
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -93
+KPX V oslash -60
+KPX V oe -60
+KPX V Aring -97
+KPX W comma -134
+KPX W hyphen -37
+KPX W period -134
+KPX W colon -28
+KPX W semicolon -28
+KPX W A -28
+KPX W a -69
+KPX W e -93
+KPX W i -19
+KPX W o -69
+KPX W r -28
+KPX W u -28
+KPX W y -23
+KPX W quotesinglbase -37
+KPX W quotedblbase -37
+KPX W ae -69
+KPX W oslash -69
+KPX W oe -69
+KPX W Aring -28
+KPX X hyphen -19
+KPX X A -19
+KPX X e -37
+KPX X guilsinglright 19
+KPX X quotesinglbase 37
+KPX X quotedblbase 37
+KPX X guillemotright 19
+KPX X Aring -19
+KPX Y quoteright 19
+KPX Y comma -130
+KPX Y hyphen -111
+KPX Y period -130
+KPX Y colon -106
+KPX Y semicolon -106
+KPX Y A -46
+KPX Y a -116
+KPX Y e -116
+KPX Y i -19
+KPX Y o -97
+KPX Y u -56
+KPX Y guillemotleft -37
+KPX Y guilsinglleft -37
+KPX Y quotesinglbase -19
+KPX Y quotedblbase -19
+KPX Y quotedblright 19
+KPX Y ae -116
+KPX Y oslash -97
+KPX Y oe -97
+KPX Y Aring -46
+KPX Z hyphen 37
+KPX quoteleft A -130
+KPX quoteleft J -130
+KPX quoteleft T 19
+KPX quoteleft V 56
+KPX quoteleft W 37
+KPX quoteleft X 37
+KPX quoteleft Y 56
+KPX quoteleft AE -148
+KPX quoteleft Aring -130
+KPX f quoteright 93
+KPX f comma -83
+KPX f hyphen -19
+KPX f period -83
+KPX f quoteleft 37
+KPX f quotedblleft 37
+KPX f quotedblright 93
+KPX r comma -130
+KPX r hyphen -19
+KPX r period -130
+KPX r g -19
+KPX r h -19
+KPX v comma -46
+KPX v hyphen 37
+KPX v period -46
+KPX w comma -56
+KPX w hyphen 19
+KPX w period -56
+KPX y comma -60
+KPX y hyphen 19
+KPX y period -60
+KPX quotedblleft A -130
+KPX quotedblleft J -130
+KPX quotedblleft T 19
+KPX quotedblleft V 56
+KPX quotedblleft W 37
+KPX quotedblleft X 37
+KPX quotedblleft Y 56
+KPX quotedblleft AE -148
+KPX quotedblleft Aring -130
+KPX quotesinglbase A 37
+KPX quotesinglbase C -37
+KPX quotesinglbase D 19
+KPX quotesinglbase F 19
+KPX quotesinglbase G -19
+KPX quotesinglbase H 19
+KPX quotesinglbase J 19
+KPX quotesinglbase T -37
+KPX quotesinglbase V -56
+KPX quotesinglbase W -37
+KPX quotesinglbase X 37
+KPX quotesinglbase Y -37
+KPX quotesinglbase f 37
+KPX quotesinglbase v -37
+KPX quotesinglbase w -37
+KPX quotesinglbase fi 37
+KPX quotesinglbase fl 37
+KPX quotesinglbase AE 74
+KPX quotesinglbase germandbls 37
+KPX quotesinglbase Aring 37
+KPX quotesinglbase Eth 19
+KPX quotedblbase A 37
+KPX quotedblbase C -37
+KPX quotedblbase D 19
+KPX quotedblbase F 19
+KPX quotedblbase G -19
+KPX quotedblbase H 19
+KPX quotedblbase J 19
+KPX quotedblbase T -37
+KPX quotedblbase V -56
+KPX quotedblbase W -37
+KPX quotedblbase X 37
+KPX quotedblbase Y -37
+KPX quotedblbase f 37
+KPX quotedblbase v -37
+KPX quotedblbase w -37
+KPX quotedblbase fi 37
+KPX quotedblbase fl 37
+KPX quotedblbase AE 74
+KPX quotedblbase germandbls 37
+KPX quotedblbase Aring 37
+KPX quotedblbase Eth 19
+KPX AE hyphen 19
+KPX Lslash quoteright -185
+KPX Lslash hyphen 56
+KPX Lslash A 19
+KPX Lslash O -19
+KPX Lslash T -74
+KPX Lslash U -37
+KPX Lslash V -102
+KPX Lslash W -88
+KPX Lslash Y -88
+KPX Lslash quoteleft -56
+KPX Lslash u -19
+KPX Lslash y -74
+KPX Lslash quotedblleft -56
+KPX Lslash quotesinglbase 19
+KPX Lslash quotedblbase 19
+KPX Lslash quotedblright -185
+KPX Lslash Oslash -19
+KPX Lslash OE -19
+KPX Lslash Aring 19
+KPX Oslash comma -37
+KPX Oslash hyphen 19
+KPX Oslash period -37
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Oslash Y -19
+KPX Aring quoteright -130
+KPX Aring colon 19
+KPX Aring semicolon 19
+KPX Aring S 19
+KPX Aring T -37
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring y -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth W -19
+KPX Eth Y -28
+KPX Eth Aring -19
+KPX Thorn quoteright -37
+KPX Thorn comma -148
+KPX Thorn period -148
+KPX Thorn quotedblright -37
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchr.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchr.afm
new file mode 100644
index 00000000000..6d58e7c65a7
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchr.afm
@@ -0,0 +1,538 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0648
+Comment bitsManufacturingDate Tue Nov 6 02:52:05 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530648
+FontName CharterBT-Roman
+FullName Bitstream Charter
+FamilyName Bitstream Charter
+Weight Normal
+ItalicAngle 0.00
+IsFixedPitch false
+FontBBox -162 -237 1194 963
+UnderlinePosition -109
+UnderlineThickness 61
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 482
+Ascender 737
+Descender -218
+StartCharMetrics 228
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 338 ; N exclam ; B 112 -9 226 683 ;
+C 34 ; WX 331 ; N quotedbl ; B 43 421 288 715 ;
+C 35 ; WX 745 ; N numbersign ; B 63 -24 681 710 ;
+C 36 ; WX 556 ; N dollar ; B 57 -102 498 744 ;
+C 37 ; WX 852 ; N percent ; B 30 -12 822 683 ;
+C 38 ; WX 704 ; N ampersand ; B 53 -12 683 683 ;
+C 39 ; WX 201 ; N quoteright ; B 30 442 170 714 ;
+C 40 ; WX 417 ; N parenleft ; B 105 -142 386 718 ;
+C 41 ; WX 417 ; N parenright ; B 31 -142 311 718 ;
+C 42 ; WX 500 ; N asterisk ; B 53 337 447 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 278 ; N comma ; B 39 -169 208 107 ;
+C 45 ; WX 319 ; N hyphen ; B 47 207 272 275 ;
+C 46 ; WX 278 ; N period ; B 75 -10 203 118 ;
+C 47 ; WX 481 ; N slash ; B -29 -93 461 672 ;
+C 48 ; WX 556 ; N zero ; B 40 -12 516 683 ;
+C 49 ; WX 556 ; N one ; B 94 0 460 683 ;
+C 50 ; WX 556 ; N two ; B 42 0 506 684 ;
+C 51 ; WX 556 ; N three ; B 40 -11 492 684 ;
+C 52 ; WX 556 ; N four ; B 26 -38 539 678 ;
+C 53 ; WX 556 ; N five ; B 49 -10 489 672 ;
+C 54 ; WX 556 ; N six ; B 50 -13 526 714 ;
+C 55 ; WX 556 ; N seven ; B 70 -38 532 672 ;
+C 56 ; WX 556 ; N eight ; B 43 -16 507 685 ;
+C 57 ; WX 556 ; N nine ; B 43 -53 512 681 ;
+C 58 ; WX 319 ; N colon ; B 96 -10 224 482 ;
+C 59 ; WX 319 ; N semicolon ; B 64 -169 234 482 ;
+C 60 ; WX 833 ; N less ; B 128 37 704 560 ;
+C 61 ; WX 833 ; N equal ; B 124 175 710 421 ;
+C 62 ; WX 833 ; N greater ; B 129 37 704 560 ;
+C 63 ; WX 486 ; N question ; B 54 -9 410 683 ;
+C 64 ; WX 942 ; N at ; B 76 -154 871 693 ;
+C 65 ; WX 639 ; N A ; B -8 0 651 680 ;
+C 66 ; WX 604 ; N B ; B 32 0 559 672 ;
+C 67 ; WX 632 ; N C ; B 42 -13 588 683 ;
+C 68 ; WX 693 ; N D ; B 32 0 649 672 ;
+C 69 ; WX 576 ; N E ; B 32 0 549 672 ;
+C 70 ; WX 537 ; N F ; B 24 0 506 672 ;
+C 71 ; WX 694 ; N G ; B 42 -13 667 684 ;
+C 72 ; WX 738 ; N H ; B 32 0 706 672 ;
+C 73 ; WX 324 ; N I ; B 35 0 289 672 ;
+C 74 ; WX 444 ; N J ; B 12 -13 440 672 ;
+C 75 ; WX 611 ; N K ; B 32 0 628 672 ;
+C 76 ; WX 520 ; N L ; B 26 0 507 672 ;
+C 77 ; WX 866 ; N M ; B 30 0 835 672 ;
+C 78 ; WX 713 ; N N ; B 26 0 688 672 ;
+C 79 ; WX 731 ; N O ; B 42 -17 689 688 ;
+C 80 ; WX 558 ; N P ; B 24 0 532 672 ;
+C 81 ; WX 731 ; N Q ; B 39 -177 694 689 ;
+C 82 ; WX 646 ; N R ; B 32 -9 657 672 ;
+C 83 ; WX 556 ; N S ; B 60 -12 499 684 ;
+C 84 ; WX 597 ; N T ; B 15 0 582 672 ;
+C 85 ; WX 694 ; N U ; B 24 -12 680 672 ;
+C 86 ; WX 618 ; N V ; B -23 -5 638 672 ;
+C 87 ; WX 928 ; N W ; B 0 0 928 672 ;
+C 88 ; WX 600 ; N X ; B -9 0 610 672 ;
+C 89 ; WX 586 ; N Y ; B -14 0 607 672 ;
+C 90 ; WX 586 ; N Z ; B 45 0 540 672 ;
+C 91 ; WX 421 ; N bracketleft ; B 138 -133 376 709 ;
+C 92 ; WX 481 ; N backslash ; B 12 -93 502 672 ;
+C 93 ; WX 421 ; N bracketright ; B 45 -133 283 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -178 ;
+C 96 ; WX 201 ; N quoteleft ; B 34 441 174 713 ;
+C 97 ; WX 507 ; N a ; B 41 -7 489 492 ;
+C 98 ; WX 539 ; N b ; B 8 0 504 737 ;
+C 99 ; WX 446 ; N c ; B 37 -7 426 491 ;
+C 100 ; WX 565 ; N d ; B 36 -10 531 737 ;
+C 101 ; WX 491 ; N e ; B 37 -10 449 491 ;
+C 102 ; WX 321 ; N f ; B 28 0 381 744 ;
+C 103 ; WX 523 ; N g ; B 39 -219 513 492 ;
+C 104 ; WX 564 ; N h ; B 18 0 547 737 ;
+C 105 ; WX 280 ; N i ; B 34 0 261 709 ;
+C 106 ; WX 266 ; N j ; B -79 -218 204 709 ;
+C 107 ; WX 517 ; N k ; B 18 0 528 737 ;
+C 108 ; WX 282 ; N l ; B 26 0 262 737 ;
+C 109 ; WX 843 ; N m ; B 30 0 826 491 ;
+C 110 ; WX 568 ; N n ; B 30 0 551 491 ;
+C 111 ; WX 539 ; N o ; B 37 -10 503 491 ;
+C 112 ; WX 551 ; N p ; B 23 -218 517 491 ;
+C 113 ; WX 531 ; N q ; B 36 -218 527 492 ;
+C 114 ; WX 382 ; N r ; B 29 0 377 492 ;
+C 115 ; WX 400 ; N s ; B 41 -10 359 492 ;
+C 116 ; WX 334 ; N t ; B 24 -4 323 575 ;
+C 117 ; WX 569 ; N u ; B 26 -10 542 491 ;
+C 118 ; WX 494 ; N v ; B -6 0 508 482 ;
+C 119 ; WX 771 ; N w ; B -3 0 772 482 ;
+C 120 ; WX 503 ; N x ; B 12 0 501 482 ;
+C 121 ; WX 495 ; N y ; B -2 -218 512 482 ;
+C 122 ; WX 468 ; N z ; B 45 0 431 482 ;
+C 123 ; WX 486 ; N braceleft ; B 64 -135 418 703 ;
+C 124 ; WX 500 ; N bar ; B 219 -237 282 764 ;
+C 125 ; WX 486 ; N braceright ; B 64 -135 418 703 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 225 747 371 ;
+C 161 ; WX 338 ; N exclamdown ; B 112 -9 226 683 ;
+C 162 ; WX 556 ; N cent ; B 64 -98 464 602 ;
+C 163 ; WX 556 ; N sterling ; B 37 0 509 683 ;
+C 164 ; WX 167 ; N fraction ; B -162 0 328 672 ;
+C 165 ; WX 556 ; N yen ; B -6 0 560 672 ;
+C 166 ; WX 556 ; N florin ; B 6 -169 507 683 ;
+C 167 ; WX 500 ; N section ; B 62 -141 437 718 ;
+C 168 ; WX 606 ; N currency ; B 41 171 566 694 ;
+C 169 ; WX 170 ; N quotesingle ; B 43 421 127 715 ;
+C 170 ; WX 403 ; N quotedblleft ; B 34 441 376 713 ;
+C 171 ; WX 442 ; N guillemotleft ; B 39 67 401 413 ;
+C 172 ; WX 245 ; N guilsinglleft ; B 39 67 204 413 ;
+C 173 ; WX 245 ; N guilsinglright ; B 45 67 210 413 ;
+C 174 ; WX 574 ; N fi ; B 28 0 544 744 ;
+C 175 ; WX 579 ; N fl ; B 28 0 561 744 ;
+C 177 ; WX 500 ; N endash ; B 0 210 500 271 ;
+C 178 ; WX 500 ; N dagger ; B 17 -130 484 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B 17 -132 484 718 ;
+C 180 ; WX 278 ; N periodcentered ; B 75 271 203 400 ;
+C 182 ; WX 484 ; N paragraph ; B 25 -79 459 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 201 ; N quotesinglbase ; B 31 -165 171 107 ;
+C 185 ; WX 403 ; N quotedblbase ; B 31 -165 372 107 ;
+C 186 ; WX 403 ; N quotedblright ; B 30 442 371 714 ;
+C 187 ; WX 442 ; N guillemotright ; B 45 67 407 413 ;
+C 188 ; WX 1000 ; N ellipsis ; B 102 -10 898 118 ;
+C 189 ; WX 1225 ; N perthousand ; B 30 -12 1194 683 ;
+C 191 ; WX 486 ; N questiondown ; B 60 -9 415 683 ;
+C 193 ; WX 500 ; N grave ; B 104 546 300 737 ;
+C 194 ; WX 500 ; N acute ; B 212 546 409 737 ;
+C 195 ; WX 500 ; N circumflex ; B 107 546 393 737 ;
+C 196 ; WX 500 ; N tilde ; B 97 572 403 709 ;
+C 197 ; WX 500 ; N macron ; B 101 607 403 668 ;
+C 198 ; WX 500 ; N breve ; B 108 567 392 709 ;
+C 199 ; WX 500 ; N dotaccent ; B 196 589 304 697 ;
+C 200 ; WX 500 ; N dieresis ; B 106 589 394 691 ;
+C 202 ; WX 500 ; N ring ; B 132 546 368 782 ;
+C 203 ; WX 500 ; N cedilla ; B 179 -224 368 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 133 546 473 737 ;
+C 206 ; WX 500 ; N ogonek ; B 182 -217 330 0 ;
+C 207 ; WX 500 ; N caron ; B 107 545 393 736 ;
+C 208 ; WX 1000 ; N emdash ; B 0 210 1000 271 ;
+C 225 ; WX 866 ; N AE ; B -57 0 838 672 ;
+C 227 ; WX 380 ; N ordfeminine ; B 30 329 367 679 ;
+C 232 ; WX 520 ; N Lslash ; B 10 0 507 672 ;
+C 233 ; WX 731 ; N Oslash ; B 42 -78 689 748 ;
+C 234 ; WX 993 ; N OE ; B 42 -8 965 680 ;
+C 235 ; WX 404 ; N ordmasculine ; B 27 327 378 678 ;
+C 241 ; WX 725 ; N ae ; B 43 -10 683 492 ;
+C 245 ; WX 280 ; N dotlessi ; B 34 0 261 487 ;
+C 248 ; WX 282 ; N lslash ; B 4 0 300 737 ;
+C 249 ; WX 539 ; N oslash ; B 37 -81 503 560 ;
+C 250 ; WX 817 ; N oe ; B 36 -10 776 491 ;
+C 251 ; WX 609 ; N germandbls ; B 18 -7 581 741 ;
+C -1 ; WX 639 ; N Aacute ; B -8 0 651 934 ;
+C -1 ; WX 639 ; N Acircumflex ; B -8 0 651 934 ;
+C -1 ; WX 639 ; N Adieresis ; B -8 0 651 888 ;
+C -1 ; WX 639 ; N Agrave ; B -8 0 651 934 ;
+C -1 ; WX 639 ; N Aring ; B -8 0 651 963 ;
+C -1 ; WX 639 ; N Atilde ; B -8 0 651 906 ;
+C -1 ; WX 632 ; N Ccedilla ; B 42 -224 588 683 ;
+C -1 ; WX 576 ; N Eacute ; B 32 0 549 934 ;
+C -1 ; WX 576 ; N Ecircumflex ; B 32 0 549 934 ;
+C -1 ; WX 576 ; N Edieresis ; B 32 0 549 888 ;
+C -1 ; WX 576 ; N Egrave ; B 32 0 549 934 ;
+C -1 ; WX 324 ; N Iacute ; B 35 0 321 934 ;
+C -1 ; WX 324 ; N Icircumflex ; B 19 0 305 934 ;
+C -1 ; WX 324 ; N Idieresis ; B 18 0 306 888 ;
+C -1 ; WX 324 ; N Igrave ; B 16 0 289 934 ;
+C -1 ; WX 713 ; N Ntilde ; B 26 0 688 906 ;
+C -1 ; WX 731 ; N Oacute ; B 42 -17 689 934 ;
+C -1 ; WX 731 ; N Ocircumflex ; B 42 -17 689 934 ;
+C -1 ; WX 731 ; N Odieresis ; B 42 -17 689 888 ;
+C -1 ; WX 731 ; N Ograve ; B 42 -17 689 934 ;
+C -1 ; WX 731 ; N Otilde ; B 42 -17 689 906 ;
+C -1 ; WX 556 ; N Scaron ; B 60 -12 499 933 ;
+C -1 ; WX 694 ; N Uacute ; B 24 -12 680 934 ;
+C -1 ; WX 694 ; N Ucircumflex ; B 24 -12 680 934 ;
+C -1 ; WX 694 ; N Udieresis ; B 24 -12 680 888 ;
+C -1 ; WX 694 ; N Ugrave ; B 24 -12 680 934 ;
+C -1 ; WX 586 ; N Ydieresis ; B -14 0 607 888 ;
+C -1 ; WX 586 ; N Zcaron ; B 45 0 540 933 ;
+C -1 ; WX 507 ; N aacute ; B 41 -7 489 737 ;
+C -1 ; WX 507 ; N acircumflex ; B 41 -7 489 737 ;
+C -1 ; WX 507 ; N adieresis ; B 41 -7 489 691 ;
+C -1 ; WX 507 ; N agrave ; B 41 -7 489 737 ;
+C -1 ; WX 507 ; N aring ; B 41 -7 489 782 ;
+C -1 ; WX 507 ; N atilde ; B 41 -7 489 709 ;
+C -1 ; WX 446 ; N ccedilla ; B 37 -224 426 491 ;
+C -1 ; WX 491 ; N eacute ; B 37 -10 449 737 ;
+C -1 ; WX 491 ; N ecircumflex ; B 37 -10 449 737 ;
+C -1 ; WX 491 ; N edieresis ; B 37 -10 449 691 ;
+C -1 ; WX 491 ; N egrave ; B 37 -10 449 737 ;
+C -1 ; WX 280 ; N iacute ; B 34 0 299 737 ;
+C -1 ; WX 280 ; N icircumflex ; B -3 0 283 737 ;
+C -1 ; WX 280 ; N idieresis ; B -4 0 284 691 ;
+C -1 ; WX 280 ; N igrave ; B -6 0 261 737 ;
+C -1 ; WX 568 ; N ntilde ; B 30 0 551 709 ;
+C -1 ; WX 539 ; N oacute ; B 37 -10 503 737 ;
+C -1 ; WX 539 ; N ocircumflex ; B 37 -10 503 737 ;
+C -1 ; WX 539 ; N odieresis ; B 37 -10 503 691 ;
+C -1 ; WX 539 ; N ograve ; B 37 -10 503 737 ;
+C -1 ; WX 539 ; N otilde ; B 37 -10 503 709 ;
+C -1 ; WX 400 ; N scaron ; B 41 -10 359 736 ;
+C -1 ; WX 569 ; N uacute ; B 26 -10 542 737 ;
+C -1 ; WX 569 ; N ucircumflex ; B 26 -10 542 737 ;
+C -1 ; WX 569 ; N udieresis ; B 26 -10 542 691 ;
+C -1 ; WX 569 ; N ugrave ; B 26 -10 542 737 ;
+C -1 ; WX 495 ; N ydieresis ; B -2 -218 512 691 ;
+C -1 ; WX 468 ; N zcaron ; B 45 0 431 736 ;
+C -1 ; WX 822 ; N trademark ; B 118 398 716 663 ;
+C -1 ; WX 900 ; N copyright ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 174 710 419 ;
+C -1 ; WX 900 ; N registered ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N minus ; B 124 269 710 328 ;
+C -1 ; WX 693 ; N Eth ; B 14 0 649 672 ;
+C -1 ; WX 558 ; N Thorn ; B 35 0 534 672 ;
+C -1 ; WX 586 ; N Yacute ; B -14 0 607 934 ;
+C -1 ; WX 500 ; N brokenbar ; B 219 -172 282 699 ;
+C -1 ; WX 329 ; N degree ; B 26 434 303 710 ;
+C -1 ; WX 833 ; N divide ; B 124 66 710 531 ;
+C -1 ; WX 528 ; N eth ; B 33 -11 493 734 ;
+C -1 ; WX 547 ; N mu ; B -39 -204 532 433 ;
+C -1 ; WX 833 ; N multiply ; B 146 26 691 571 ;
+C -1 ; WX 867 ; N onehalf ; B 59 0 836 678 ;
+C -1 ; WX 867 ; N onequarter ; B 59 -22 857 678 ;
+C -1 ; WX 367 ; N onesuperior ; B 62 268 304 679 ;
+C -1 ; WX 833 ; N plusminus ; B 124 20 710 577 ;
+C -1 ; WX 551 ; N thorn ; B 20 -218 521 737 ;
+C -1 ; WX 868 ; N threequarters ; B 25 -22 857 679 ;
+C -1 ; WX 367 ; N threesuperior ; B 26 261 325 679 ;
+C -1 ; WX 367 ; N twosuperior ; B 27 268 334 679 ;
+C -1 ; WX 495 ; N yacute ; B -2 -218 512 737 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 271
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A T -111
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A f -19
+KPX A t -19
+KPX A v -32
+KPX A w -46
+KPX A y -23
+KPX A fi -19
+KPX A fl -19
+KPX A quotedblright -130
+KPX B hyphen 37
+KPX B C 19
+KPX B G 19
+KPX B O 19
+KPX B S 19
+KPX B V -37
+KPX B W -19
+KPX B Y -19
+KPX B Oslash 19
+KPX B OE 19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C A -19
+KPX C S 19
+KPX C quotedblright 37
+KPX C Aring -19
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D Y -19
+KPX D Aring -19
+KPX F comma -190
+KPX F hyphen -93
+KPX F period -190
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -97
+KPX F a -79
+KPX F e -65
+KPX F o -65
+KPX F ae -79
+KPX F oslash -65
+KPX F oe -65
+KPX F Aring -97
+KPX G hyphen 19
+KPX G T -19
+KPX G W -19
+KPX G Y -23
+KPX J A -37
+KPX J Aring -37
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -37
+KPX K Y -28
+KPX K e -19
+KPX K o -19
+KPX K u -19
+KPX K y -28
+KPX K Oslash -28
+KPX K OE -28
+KPX K oslash -19
+KPX K oe -19
+KPX K Aring -23
+KPX L quoteright -241
+KPX L T -83
+KPX L U -19
+KPX L V -120
+KPX L W -88
+KPX L Y -102
+KPX L y -19
+KPX L quotedblright -241
+KPX O comma -60
+KPX O hyphen 37
+KPX O period -60
+KPX O V -19
+KPX O X -19
+KPX P comma -259
+KPX P hyphen -93
+KPX P period -259
+KPX P colon -37
+KPX P semicolon -37
+KPX P A -93
+KPX P U -19
+KPX P a -56
+KPX P e -56
+KPX P o -51
+KPX P s -32
+KPX P ae -56
+KPX P oslash -51
+KPX P oe -51
+KPX P Aring -93
+KPX Q quoteright 19
+KPX Q hyphen 37
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R colon -19
+KPX R semicolon -19
+KPX R T -37
+KPX R V -56
+KPX R W -42
+KPX R Y -51
+KPX R quoteleft -37
+KPX R e -37
+KPX R o -37
+KPX R u -37
+KPX R y -46
+KPX R quotedblleft -37
+KPX R quotesinglbase 37
+KPX R quotedblbase 37
+KPX R quotedblright -37
+KPX R oslash -37
+KPX R oe -37
+KPX T quoteright 19
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -111
+KPX T T 19
+KPX T quoteleft 37
+KPX T a -97
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -97
+KPX T r -74
+KPX T s -74
+KPX T u -111
+KPX T w -74
+KPX T y -93
+KPX T quotedblleft 37
+KPX T guillemotleft -37
+KPX T guilsinglleft -37
+KPX T quotedblright 19
+KPX T ae -97
+KPX T oslash -97
+KPX T oe -97
+KPX T Aring -111
+KPX U A -32
+KPX U J -28
+KPX U Aring -32
+KPX V quoteright 37
+KPX V comma -222
+KPX V hyphen -93
+KPX V period -222
+KPX V colon -102
+KPX V semicolon -102
+KPX V A -79
+KPX V O -19
+KPX V a -111
+KPX V e -106
+KPX V i -28
+KPX V o -93
+KPX V u -65
+KPX V y -65
+KPX V quotedblright 37
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -111
+KPX V oslash -93
+KPX V oe -93
+KPX V Aring -79
+KPX W quoteright 19
+KPX W comma -176
+KPX W hyphen -74
+KPX W period -176
+KPX W colon -88
+KPX W semicolon -88
+KPX W A -60
+KPX W a -69
+KPX W e -83
+KPX W i -19
+KPX W o -69
+KPX W r -46
+KPX W u -42
+KPX W y -23
+KPX W quotedblright 19
+KPX W ae -69
+KPX W oslash -69
+KPX W oe -69
+KPX W Aring -60
+KPX X hyphen -37
+KPX X A -19
+KPX X C -19
+KPX X O -19
+KPX X Oslash -19
+KPX X OE -19
+KPX X Aring -19
+KPX Y comma -130
+KPX Y hyphen -130
+KPX Y period -130
+KPX Y colon -125
+KPX Y semicolon -125
+KPX Y A -60
+KPX Y C -19
+KPX Y a -97
+KPX Y e -106
+KPX Y i -37
+KPX Y o -97
+KPX Y u -69
+KPX Y ae -97
+KPX Y oslash -97
+KPX Y oe -97
+KPX Y Aring -60
+KPX quoteleft A -130
+KPX quoteleft J -167
+KPX quoteleft AE -111
+KPX quoteleft Aring -130
+KPX f quoteright 74
+KPX f comma -37
+KPX f hyphen -19
+KPX f period -37
+KPX f quotedblright 74
+KPX r comma -111
+KPX r period -111
+KPX v comma -120
+KPX v period -120
+KPX w comma -120
+KPX w period -120
+KPX y comma -134
+KPX y period -134
+KPX quotedblleft A -130
+KPX quotedblleft J -167
+KPX quotedblleft AE -111
+KPX quotedblleft Aring -130
+KPX AE hyphen 19
+KPX Lslash quoteright -241
+KPX Lslash T -83
+KPX Lslash U -19
+KPX Lslash V -120
+KPX Lslash W -88
+KPX Lslash Y -102
+KPX Lslash y -19
+KPX Lslash quotedblright -241
+KPX Oslash comma -60
+KPX Oslash hyphen 37
+KPX Oslash period -60
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Aring quoteright -130
+KPX Aring T -111
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring f -19
+KPX Aring t -19
+KPX Aring v -32
+KPX Aring w -46
+KPX Aring y -23
+KPX Aring fi -19
+KPX Aring fl -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth Y -19
+KPX Eth Aring -19
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchri.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchri.afm
new file mode 100644
index 00000000000..0f721845f66
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/bchri.afm
@@ -0,0 +1,547 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0649
+Comment bitsManufacturingDate Tue Nov 6 02:55:16 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530649
+FontName CharterBT-Italic
+FullName Bitstream Charter Italic
+FamilyName Bitstream Charter
+Weight Normal
+ItalicAngle 11.0000
+IsFixedPitch false
+FontBBox -226 -237 1175 980
+UnderlinePosition -109
+UnderlineThickness 61
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 486
+Ascender 737
+Descender -218
+StartCharMetrics 228
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 338 ; N exclam ; B 63 -9 281 683 ;
+C 34 ; WX 331 ; N quotedbl ; B 43 421 288 715 ;
+C 35 ; WX 745 ; N numbersign ; B 63 -24 681 710 ;
+C 36 ; WX 556 ; N dollar ; B 21 -102 514 744 ;
+C 37 ; WX 852 ; N percent ; B 49 -12 802 683 ;
+C 38 ; WX 704 ; N ampersand ; B 19 -12 665 684 ;
+C 39 ; WX 201 ; N quoteright ; B 51 442 227 714 ;
+C 40 ; WX 419 ; N parenleft ; B 79 -142 460 718 ;
+C 41 ; WX 419 ; N parenright ; B -67 -142 313 718 ;
+C 42 ; WX 500 ; N asterisk ; B 98 337 492 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 278 ; N comma ; B -58 -169 149 107 ;
+C 45 ; WX 319 ; N hyphen ; B 22 207 260 275 ;
+C 46 ; WX 278 ; N period ; B 25 -6 145 114 ;
+C 47 ; WX 481 ; N slash ; B -111 -93 525 672 ;
+C 48 ; WX 556 ; N zero ; B 27 -12 528 683 ;
+C 49 ; WX 556 ; N one ; B 82 0 405 683 ;
+C 50 ; WX 556 ; N two ; B -22 0 518 684 ;
+C 51 ; WX 556 ; N three ; B 0 -12 512 684 ;
+C 52 ; WX 556 ; N four ; B -1 -38 524 678 ;
+C 53 ; WX 556 ; N five ; B 3 -13 519 672 ;
+C 54 ; WX 556 ; N six ; B 31 -13 501 716 ;
+C 55 ; WX 556 ; N seven ; B 44 -38 596 672 ;
+C 56 ; WX 556 ; N eight ; B 18 -18 518 685 ;
+C 57 ; WX 556 ; N nine ; B 28 -56 523 684 ;
+C 58 ; WX 319 ; N colon ; B 46 -6 235 478 ;
+C 59 ; WX 319 ; N semicolon ; B -33 -169 235 478 ;
+C 60 ; WX 833 ; N less ; B 128 37 704 560 ;
+C 61 ; WX 833 ; N equal ; B 124 175 710 421 ;
+C 62 ; WX 833 ; N greater ; B 129 37 704 560 ;
+C 63 ; WX 486 ; N question ; B 94 -9 446 683 ;
+C 64 ; WX 942 ; N at ; B 76 -154 871 693 ;
+C 65 ; WX 606 ; N A ; B -79 0 585 677 ;
+C 66 ; WX 588 ; N B ; B -29 0 543 672 ;
+C 67 ; WX 604 ; N C ; B 41 -12 622 683 ;
+C 68 ; WX 671 ; N D ; B -28 0 623 672 ;
+C 69 ; WX 546 ; N E ; B -25 0 554 672 ;
+C 70 ; WX 509 ; N F ; B -27 0 540 671 ;
+C 71 ; WX 664 ; N G ; B 39 -12 650 684 ;
+C 72 ; WX 712 ; N H ; B -29 0 741 672 ;
+C 73 ; WX 312 ; N I ; B -23 0 333 672 ;
+C 74 ; WX 447 ; N J ; B -43 -12 472 672 ;
+C 75 ; WX 625 ; N K ; B -30 -5 660 672 ;
+C 76 ; WX 498 ; N L ; B -29 0 453 672 ;
+C 77 ; WX 839 ; N M ; B -28 0 868 672 ;
+C 78 ; WX 683 ; N N ; B -31 0 720 672 ;
+C 79 ; WX 708 ; N O ; B 40 -13 669 683 ;
+C 80 ; WX 542 ; N P ; B -29 0 543 672 ;
+C 81 ; WX 708 ; N Q ; B 40 -160 700 682 ;
+C 82 ; WX 602 ; N R ; B -30 -6 591 671 ;
+C 83 ; WX 537 ; N S ; B 9 -13 511 683 ;
+C 84 ; WX 565 ; N T ; B 43 0 610 672 ;
+C 85 ; WX 664 ; N U ; B 64 -12 705 672 ;
+C 86 ; WX 590 ; N V ; B 30 -6 649 672 ;
+C 87 ; WX 898 ; N W ; B 51 0 952 672 ;
+C 88 ; WX 569 ; N X ; B -83 0 633 672 ;
+C 89 ; WX 562 ; N Y ; B 31 0 642 672 ;
+C 90 ; WX 556 ; N Z ; B -26 0 572 672 ;
+C 91 ; WX 421 ; N bracketleft ; B 49 -133 448 709 ;
+C 92 ; WX 481 ; N backslash ; B 34 -93 489 672 ;
+C 93 ; WX 421 ; N bracketright ; B -45 -133 354 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -178 ;
+C 96 ; WX 201 ; N quoteleft ; B 70 441 247 713 ;
+C 97 ; WX 525 ; N a ; B 17 -9 488 483 ;
+C 98 ; WX 507 ; N b ; B 24 -10 453 737 ;
+C 99 ; WX 394 ; N c ; B 14 -10 370 486 ;
+C 100 ; WX 523 ; N d ; B 20 -9 501 737 ;
+C 101 ; WX 424 ; N e ; B 20 -10 378 483 ;
+C 102 ; WX 292 ; N f ; B -151 -216 404 733 ;
+C 103 ; WX 481 ; N g ; B -31 -218 480 483 ;
+C 104 ; WX 551 ; N h ; B 23 -6 505 737 ;
+C 105 ; WX 287 ; N i ; B 32 -7 255 705 ;
+C 106 ; WX 269 ; N j ; B -128 -216 249 701 ;
+C 107 ; WX 514 ; N k ; B 25 -6 494 737 ;
+C 108 ; WX 275 ; N l ; B 35 -10 241 737 ;
+C 109 ; WX 815 ; N m ; B 31 -6 773 483 ;
+C 110 ; WX 556 ; N n ; B 32 -7 515 483 ;
+C 111 ; WX 502 ; N o ; B 21 -9 450 483 ;
+C 112 ; WX 516 ; N p ; B -70 -218 461 483 ;
+C 113 ; WX 512 ; N q ; B 24 -218 463 488 ;
+C 114 ; WX 398 ; N r ; B 27 0 400 482 ;
+C 115 ; WX 370 ; N s ; B -17 -9 324 483 ;
+C 116 ; WX 333 ; N t ; B 43 -7 337 580 ;
+C 117 ; WX 553 ; N u ; B 30 -9 513 483 ;
+C 118 ; WX 454 ; N v ; B -9 -2 435 484 ;
+C 119 ; WX 713 ; N w ; B -1 0 689 485 ;
+C 120 ; WX 477 ; N x ; B -47 -9 495 486 ;
+C 121 ; WX 475 ; N y ; B -113 -218 485 485 ;
+C 122 ; WX 440 ; N z ; B -15 -12 434 490 ;
+C 123 ; WX 486 ; N braceleft ; B 64 -135 418 703 ;
+C 124 ; WX 500 ; N bar ; B 219 -237 282 764 ;
+C 125 ; WX 486 ; N braceright ; B 64 -135 418 703 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 225 747 371 ;
+C 161 ; WX 338 ; N exclamdown ; B 60 -9 278 683 ;
+C 162 ; WX 556 ; N cent ; B 41 -98 492 602 ;
+C 163 ; WX 556 ; N sterling ; B -22 0 547 683 ;
+C 164 ; WX 167 ; N fraction ; B -226 0 392 672 ;
+C 165 ; WX 556 ; N yen ; B 2 0 616 665 ;
+C 166 ; WX 556 ; N florin ; B -81 -169 563 683 ;
+C 167 ; WX 500 ; N section ; B 3 -141 475 718 ;
+C 168 ; WX 606 ; N currency ; B 41 171 566 694 ;
+C 169 ; WX 170 ; N quotesingle ; B 43 421 127 715 ;
+C 170 ; WX 403 ; N quotedblleft ; B 70 441 448 713 ;
+C 171 ; WX 442 ; N guillemotleft ; B 13 67 416 413 ;
+C 172 ; WX 245 ; N guilsinglleft ; B 13 67 218 413 ;
+C 173 ; WX 245 ; N guilsinglright ; B -7 67 199 413 ;
+C 174 ; WX 574 ; N fi ; B -151 -216 547 733 ;
+C 175 ; WX 579 ; N fl ; B -151 -216 544 737 ;
+C 177 ; WX 500 ; N endash ; B -25 210 488 271 ;
+C 178 ; WX 500 ; N dagger ; B 45 -130 512 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B -27 -132 512 718 ;
+C 180 ; WX 278 ; N periodcentered ; B 79 276 199 396 ;
+C 182 ; WX 484 ; N paragraph ; B 25 -79 459 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 201 ; N quotesinglbase ; B -65 -165 111 107 ;
+C 185 ; WX 403 ; N quotedblbase ; B -65 -165 313 107 ;
+C 186 ; WX 403 ; N quotedblright ; B 51 442 429 714 ;
+C 187 ; WX 442 ; N guillemotright ; B -7 67 397 413 ;
+C 188 ; WX 1000 ; N ellipsis ; B 52 -6 840 114 ;
+C 189 ; WX 1225 ; N perthousand ; B 49 -12 1175 683 ;
+C 191 ; WX 486 ; N questiondown ; B 27 -9 379 683 ;
+C 193 ; WX 500 ; N grave ; B 181 546 341 737 ;
+C 194 ; WX 500 ; N acute ; B 252 546 485 737 ;
+C 195 ; WX 500 ; N circumflex ; B 148 546 433 737 ;
+C 196 ; WX 500 ; N tilde ; B 143 572 474 709 ;
+C 197 ; WX 500 ; N macron ; B 154 614 465 667 ;
+C 198 ; WX 500 ; N breve ; B 177 567 464 709 ;
+C 199 ; WX 500 ; N dotaccent ; B 248 584 361 697 ;
+C 200 ; WX 500 ; N dieresis ; B 163 589 452 692 ;
+C 202 ; WX 500 ; N ring ; B 209 557 426 774 ;
+C 203 ; WX 500 ; N cedilla ; B 61 -224 267 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 175 546 569 737 ;
+C 206 ; WX 500 ; N ogonek ; B 90 -217 235 0 ;
+C 207 ; WX 500 ; N caron ; B 184 545 470 736 ;
+C 208 ; WX 1000 ; N emdash ; B -19 210 991 271 ;
+C 225 ; WX 873 ; N AE ; B -115 0 879 672 ;
+C 227 ; WX 394 ; N ordfeminine ; B 12 325 366 671 ;
+C 232 ; WX 498 ; N Lslash ; B -29 0 453 672 ;
+C 233 ; WX 708 ; N Oslash ; B 41 -74 669 744 ;
+C 234 ; WX 1007 ; N OE ; B 40 -13 1004 682 ;
+C 235 ; WX 377 ; N ordmasculine ; B 15 325 338 671 ;
+C 241 ; WX 671 ; N ae ; B 1 -10 628 483 ;
+C 245 ; WX 287 ; N dotlessi ; B 32 -7 255 483 ;
+C 248 ; WX 275 ; N lslash ; B -14 -10 293 737 ;
+C 249 ; WX 502 ; N oslash ; B 22 -80 450 548 ;
+C 250 ; WX 750 ; N oe ; B 21 -9 704 483 ;
+C 251 ; WX 574 ; N germandbls ; B -151 -216 522 739 ;
+C -1 ; WX 606 ; N Aacute ; B -79 0 585 930 ;
+C -1 ; WX 606 ; N Acircumflex ; B -79 0 585 930 ;
+C -1 ; WX 606 ; N Adieresis ; B -79 0 585 885 ;
+C -1 ; WX 606 ; N Agrave ; B -79 0 585 930 ;
+C -1 ; WX 606 ; N Aring ; B -79 0 585 980 ;
+C -1 ; WX 606 ; N Atilde ; B -79 0 585 902 ;
+C -1 ; WX 604 ; N Ccedilla ; B 41 -224 622 683 ;
+C -1 ; WX 546 ; N Eacute ; B -25 0 554 930 ;
+C -1 ; WX 546 ; N Ecircumflex ; B -25 0 554 930 ;
+C -1 ; WX 546 ; N Edieresis ; B -25 0 554 885 ;
+C -1 ; WX 546 ; N Egrave ; B -25 0 554 930 ;
+C -1 ; WX 312 ; N Iacute ; B -23 0 418 930 ;
+C -1 ; WX 312 ; N Icircumflex ; B -23 0 366 930 ;
+C -1 ; WX 312 ; N Idieresis ; B -23 0 385 885 ;
+C -1 ; WX 312 ; N Igrave ; B -23 0 333 930 ;
+C -1 ; WX 683 ; N Ntilde ; B -31 0 720 902 ;
+C -1 ; WX 708 ; N Oacute ; B 40 -13 669 930 ;
+C -1 ; WX 708 ; N Ocircumflex ; B 40 -13 669 930 ;
+C -1 ; WX 708 ; N Odieresis ; B 40 -13 669 885 ;
+C -1 ; WX 708 ; N Ograve ; B 40 -13 669 930 ;
+C -1 ; WX 708 ; N Otilde ; B 40 -13 669 902 ;
+C -1 ; WX 537 ; N Scaron ; B 9 -13 516 929 ;
+C -1 ; WX 664 ; N Uacute ; B 64 -12 705 930 ;
+C -1 ; WX 664 ; N Ucircumflex ; B 64 -12 705 930 ;
+C -1 ; WX 664 ; N Udieresis ; B 64 -12 705 885 ;
+C -1 ; WX 664 ; N Ugrave ; B 64 -12 705 930 ;
+C -1 ; WX 562 ; N Ydieresis ; B 31 0 642 885 ;
+C -1 ; WX 556 ; N Zcaron ; B -26 0 572 929 ;
+C -1 ; WX 525 ; N aacute ; B 17 -9 498 737 ;
+C -1 ; WX 525 ; N acircumflex ; B 17 -9 488 737 ;
+C -1 ; WX 525 ; N adieresis ; B 17 -9 488 692 ;
+C -1 ; WX 525 ; N agrave ; B 17 -9 488 737 ;
+C -1 ; WX 525 ; N aring ; B 17 -9 488 762 ;
+C -1 ; WX 525 ; N atilde ; B 17 -9 488 709 ;
+C -1 ; WX 394 ; N ccedilla ; B 8 -224 370 486 ;
+C -1 ; WX 424 ; N eacute ; B 20 -10 460 737 ;
+C -1 ; WX 424 ; N ecircumflex ; B 20 -10 408 737 ;
+C -1 ; WX 424 ; N edieresis ; B 20 -10 427 692 ;
+C -1 ; WX 424 ; N egrave ; B 20 -10 378 737 ;
+C -1 ; WX 287 ; N iacute ; B 32 -7 379 737 ;
+C -1 ; WX 287 ; N icircumflex ; B 32 -7 327 737 ;
+C -1 ; WX 287 ; N idieresis ; B 32 -7 346 692 ;
+C -1 ; WX 287 ; N igrave ; B 32 -7 255 737 ;
+C -1 ; WX 556 ; N ntilde ; B 32 -7 515 709 ;
+C -1 ; WX 502 ; N oacute ; B 21 -9 486 737 ;
+C -1 ; WX 502 ; N ocircumflex ; B 21 -9 450 737 ;
+C -1 ; WX 502 ; N odieresis ; B 21 -9 453 692 ;
+C -1 ; WX 502 ; N ograve ; B 21 -9 450 737 ;
+C -1 ; WX 502 ; N otilde ; B 21 -9 475 709 ;
+C -1 ; WX 370 ; N scaron ; B -17 -9 405 736 ;
+C -1 ; WX 553 ; N uacute ; B 30 -9 513 737 ;
+C -1 ; WX 553 ; N ucircumflex ; B 30 -9 513 737 ;
+C -1 ; WX 553 ; N udieresis ; B 30 -9 513 692 ;
+C -1 ; WX 553 ; N ugrave ; B 30 -9 513 737 ;
+C -1 ; WX 475 ; N ydieresis ; B -113 -218 485 692 ;
+C -1 ; WX 440 ; N zcaron ; B -15 -12 440 736 ;
+C -1 ; WX 822 ; N trademark ; B 118 398 716 663 ;
+C -1 ; WX 900 ; N copyright ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 174 710 419 ;
+C -1 ; WX 900 ; N registered ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N minus ; B 124 269 710 328 ;
+C -1 ; WX 671 ; N Eth ; B -28 0 624 672 ;
+C -1 ; WX 532 ; N Thorn ; B -30 0 518 672 ;
+C -1 ; WX 562 ; N Yacute ; B 31 0 642 930 ;
+C -1 ; WX 500 ; N brokenbar ; B 219 -172 282 699 ;
+C -1 ; WX 329 ; N degree ; B 26 434 303 710 ;
+C -1 ; WX 833 ; N divide ; B 124 66 710 531 ;
+C -1 ; WX 500 ; N eth ; B 21 -9 464 726 ;
+C -1 ; WX 547 ; N mu ; B -39 -204 532 433 ;
+C -1 ; WX 833 ; N multiply ; B 146 26 691 571 ;
+C -1 ; WX 867 ; N onehalf ; B 51 0 844 678 ;
+C -1 ; WX 867 ; N onequarter ; B 51 -22 848 678 ;
+C -1 ; WX 367 ; N onesuperior ; B 54 268 267 679 ;
+C -1 ; WX 833 ; N plusminus ; B 124 20 710 577 ;
+C -1 ; WX 516 ; N thorn ; B -70 -218 461 737 ;
+C -1 ; WX 868 ; N threequarters ; B 0 -22 848 679 ;
+C -1 ; WX 367 ; N threesuperior ; B 0 261 338 679 ;
+C -1 ; WX 367 ; N twosuperior ; B -15 268 342 679 ;
+C -1 ; WX 475 ; N yacute ; B -113 -218 485 737 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 280
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A colon 19
+KPX A semicolon 19
+KPX A S 19
+KPX A T -37
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A y -19
+KPX A quotedblright -130
+KPX B hyphen 56
+KPX B S 19
+KPX B V -19
+KPX B W -19
+KPX B Y -19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C S 19
+KPX C quotedblright 37
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D W -19
+KPX D Y -28
+KPX D Aring -19
+KPX F comma -167
+KPX F hyphen -56
+KPX F period -167
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -32
+KPX F a -42
+KPX F e -46
+KPX F o -46
+KPX F ae -42
+KPX F oslash -46
+KPX F oe -46
+KPX F Aring -32
+KPX G hyphen 19
+KPX J A -23
+KPX J Aring -23
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -42
+KPX K Y -32
+KPX K a -19
+KPX K e -56
+KPX K o -56
+KPX K u -56
+KPX K y -83
+KPX K Oslash -28
+KPX K OE -28
+KPX K ae -19
+KPX K oslash -56
+KPX K oe -56
+KPX K Aring -23
+KPX L quoteright -185
+KPX L hyphen 56
+KPX L A 19
+KPX L T -74
+KPX L U -19
+KPX L V -102
+KPX L W -88
+KPX L Y -88
+KPX L u -19
+KPX L y -37
+KPX L quotesinglbase 19
+KPX L quotedblbase 19
+KPX L quotedblright -185
+KPX L Aring 19
+KPX O comma -37
+KPX O hyphen 19
+KPX O period -37
+KPX O V -19
+KPX O X -19
+KPX O Y -19
+KPX P comma -250
+KPX P hyphen -74
+KPX P period -250
+KPX P colon -19
+KPX P semicolon -19
+KPX P A -56
+KPX P U -19
+KPX P W -19
+KPX P Y -19
+KPX P a -37
+KPX P e -56
+KPX P o -51
+KPX P s -32
+KPX P ae -37
+KPX P oslash -51
+KPX P oe -51
+KPX P Aring -56
+KPX Q quoteright 19
+KPX Q hyphen 19
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R comma 19
+KPX R hyphen -19
+KPX R period 19
+KPX R T -19
+KPX R V -19
+KPX R W -23
+KPX R Y -37
+KPX R quoteleft -19
+KPX R a -19
+KPX R e -19
+KPX R o -19
+KPX R y -19
+KPX R quotedblleft -19
+KPX R quotedblright -37
+KPX R ae -19
+KPX R oslash -19
+KPX R oe -19
+KPX S A 37
+KPX S G 19
+KPX S O 19
+KPX S Q 19
+KPX S S 19
+KPX S Oslash 19
+KPX S OE 19
+KPX S Aring 37
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -56
+KPX T T 19
+KPX T a -116
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -116
+KPX T r -74
+KPX T s -93
+KPX T u -93
+KPX T w -93
+KPX T y -74
+KPX T ae -116
+KPX T oslash -116
+KPX T oe -116
+KPX T Aring -56
+KPX U A -28
+KPX U J -19
+KPX U Z -19
+KPX U Aring -28
+KPX V comma -185
+KPX V hyphen -56
+KPX V period -185
+KPX V colon -93
+KPX V semicolon -93
+KPX V A -79
+KPX V O -19
+KPX V a -93
+KPX V e -93
+KPX V i -28
+KPX V o -60
+KPX V u -32
+KPX V y -46
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -93
+KPX V oslash -60
+KPX V oe -60
+KPX V Aring -79
+KPX W comma -134
+KPX W hyphen -37
+KPX W period -134
+KPX W colon -28
+KPX W semicolon -28
+KPX W A -28
+KPX W a -51
+KPX W e -74
+KPX W i -19
+KPX W o -51
+KPX W r -28
+KPX W u -28
+KPX W y -23
+KPX W ae -51
+KPX W oslash -51
+KPX W oe -51
+KPX W Aring -28
+KPX X hyphen -19
+KPX X A -19
+KPX X Aring -19
+KPX Y comma -130
+KPX Y hyphen -111
+KPX Y period -130
+KPX Y colon -106
+KPX Y semicolon -106
+KPX Y A -46
+KPX Y a -116
+KPX Y e -116
+KPX Y i -19
+KPX Y o -97
+KPX Y u -56
+KPX Y ae -116
+KPX Y oslash -97
+KPX Y oe -97
+KPX Y Aring -46
+KPX Z hyphen 37
+KPX quoteleft A -130
+KPX quoteleft J -130
+KPX quoteleft V 19
+KPX quoteleft AE -111
+KPX quoteleft Aring -130
+KPX f quoteright 93
+KPX f comma -83
+KPX f hyphen -19
+KPX f period -83
+KPX f quotedblright 93
+KPX r comma -130
+KPX r hyphen -19
+KPX r period -130
+KPX v comma -46
+KPX v hyphen 37
+KPX v period -46
+KPX w comma -56
+KPX w hyphen 19
+KPX w period -56
+KPX y comma -60
+KPX y hyphen 19
+KPX y period -60
+KPX quotedblleft A -130
+KPX quotedblleft J -130
+KPX quotedblleft V 19
+KPX quotedblleft AE -111
+KPX quotedblleft Aring -130
+KPX AE hyphen 19
+KPX Lslash quoteright -185
+KPX Lslash hyphen 56
+KPX Lslash A 19
+KPX Lslash T -74
+KPX Lslash U -19
+KPX Lslash V -102
+KPX Lslash W -88
+KPX Lslash Y -88
+KPX Lslash u -19
+KPX Lslash y -37
+KPX Lslash quotesinglbase 19
+KPX Lslash quotedblbase 19
+KPX Lslash quotedblright -185
+KPX Lslash Aring 19
+KPX Oslash comma -37
+KPX Oslash hyphen 19
+KPX Oslash period -37
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Oslash Y -19
+KPX Aring quoteright -130
+KPX Aring colon 19
+KPX Aring semicolon 19
+KPX Aring S 19
+KPX Aring T -37
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring y -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth W -19
+KPX Eth Y -28
+KPX Eth Aring -19
+KPX Thorn quoteright -37
+KPX Thorn comma -148
+KPX Thorn period -148
+KPX Thorn quotedblright -37
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbx10.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbx10.afm
new file mode 100644
index 00000000000..3e51f92b986
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbx10.afm
@@ -0,0 +1,751 @@
+StartFontMetrics 2.0
+FontName dcbx10
+FullName dcbx10
+FamilyName dcbx10
+Weight Medium
+ItalicAngle 0.000000
+IsFixedPitch false
+UnderlinePosition -133
+UnderlineThickness 20
+Version 1.0\(Level-B\)
+FontBBox -82, -308, 1212, 914
+Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B.
+EncodingScheme FontSpecific
+CapHeight 686
+XHeight 444
+Descender -194
+Ascender 694
+StartCharMetrics 256
+C 0 ; WX 574.83 ; N grave ; B 116 507 336 705 ;
+C 1 ; WX 574.83 ; N acute ; B 238 507 458 705 ;
+C 2 ; WX 574.83 ; N circumflex ; B 129 527 445 694 ;
+C 3 ; WX 574.83 ; N tilde ; B 96 577 478 694 ;
+C 4 ; WX 574.83 ; N dieresis ; B 101 546 473 695 ;
+C 5 ; WX 574.83 ; N hungarumlaut ; B 138 514 491 711 ;
+C 6 ; WX 869.22 ; N ring ; B 294 535 536 702 ;
+C 7 ; WX 574.83 ; N caron ; B 132 517 442 655 ;
+C 8 ; WX 574.83 ; N breve ; B 108 505 466 694 ;
+C 9 ; WX 574.83 ; N macron ; B 80 551 494 607 ;
+C 10 ; WX 319.39 ; N dotaccent ; B 79 535 239 695 ;
+C 11 ; WX 511 ; N cedilla ; B 132 -201 442 -11 ;
+C 12 ; WX 319.39 ; N ogonek ; B -10 -219 262 31 ;
+C 13 ; WX 319.39 ; N quotesinglbase ; B 78 -194 251 160 ;
+C 14 ; WX 511 ; N guilsinglleft ; B 109 40 375 432 ;
+C 15 ; WX 511 ; N guilsinglright ; B 109 40 419 432 ;
+C 16 ; WX 602.61 ; N quotedblleft ; B 132 340 564 694 ;
+C 17 ; WX 602.61 ; N quotedblright ; B 38 340 470 694 ;
+C 18 ; WX 602.61 ; N quotedblbase ; B 154 -194 586 160 ;
+C 19 ; WX 766.5 ; N guillemotleft ; B 109 40 630 432 ;
+C 20 ; WX 766.5 ; N guillemotright ; B 109 40 674 432 ;
+C 21 ; WX 574.83 ; N endash ; B 0 254 574 294 ; L hyphen emdash ;
+C 22 ; WX 1149.72 ; N emdash ; B 0 254 1149 294 ;
+C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ;
+C 24 ; WX 447.11 ; N perthousand ; B 63 -56 383 347 ;
+C 25 ; WX 319.39 ; N dotlessi ; B 34 0 277 450 ;
+C 26 ; WX 351.28 ; N dotlessj ; B -82 -194 247 450 ;
+C 27 ; WX 670.67 ; N ff ; B 31 0 750 700 ; L i ffi ; L l ffl ;
+C 28 ; WX 638.72 ; N fi ; B 31 0 603 700 ;
+C 29 ; WX 638.72 ; N fl ; B 31 0 603 700 ;
+C 30 ; WX 958.11 ; N ffi ; B 31 0 923 700 ;
+C 31 ; WX 958.11 ; N ffl ; B 31 0 923 700 ;
+C 32 ; WX 574.83 ; N visiblespace ; B 48 -111 526 251 ;
+C 33 ; WX 349.89 ; N exclam ; B 94 0 256 705 ;
+C 34 ; WX 574.83 ; N quotedbl ; B 125 360 450 711 ;
+C 35 ; WX 958.11 ; N numbersign ; B 64 -194 893 694 ;
+C 36 ; WX 574.83 ; N dollar ; B 65 -56 511 750 ;
+C 37 ; WX 958.11 ; N percent ; B 64 -56 893 750 ;
+C 38 ; WX 894.22 ; N ampersand ; B 48 -11 836 705 ;
+C 39 ; WX 319.39 ; N quoteright ; B 79 340 255 694 ; L quoteright quotedblright ;
+C 40 ; WX 447.11 ; N parenleft ; B 107 -251 382 750 ;
+C 41 ; WX 447.11 ; N parenright ; B 64 -251 339 750 ;
+C 42 ; WX 574.83 ; N asterisk ; B 73 306 501 750 ;
+C 43 ; WX 894.22 ; N plus ; B 64 -134 829 633 ;
+C 44 ; WX 319.39 ; N comma ; B 79 -194 252 160 ; L comma quotedblbase ;
+C 45 ; WX 383.22 ; N hyphen ; B 13 172 318 273 ; L hyphen endash ;
+C 46 ; WX 319.39 ; N period ; B 79 0 239 160 ;
+C 47 ; WX 574.83 ; N slash ; B 64 -250 510 750 ;
+C 48 ; WX 574.83 ; N zero ; B 45 -11 529 655 ;
+C 49 ; WX 574.83 ; N one ; B 83 0 494 655 ;
+C 50 ; WX 574.83 ; N two ; B 57 0 517 655 ;
+C 51 ; WX 574.83 ; N three ; B 48 -11 526 655 ;
+C 52 ; WX 574.83 ; N four ; B 32 0 542 656 ;
+C 53 ; WX 574.83 ; N five ; B 57 -11 517 655 ;
+C 54 ; WX 574.83 ; N six ; B 48 -11 526 655 ;
+C 55 ; WX 574.83 ; N seven ; B 64 -11 558 676 ;
+C 56 ; WX 574.83 ; N eight ; B 48 -11 526 655 ;
+C 57 ; WX 574.83 ; N nine ; B 48 -11 526 655 ;
+C 58 ; WX 319.39 ; N colon ; B 79 0 239 444 ;
+C 59 ; WX 319.39 ; N semicolon ; B 79 -194 242 444 ;
+C 60 ; WX 894.22 ; N less ; B 96 -76 797 575 ; L less guillemotleft ;
+C 61 ; WX 894.22 ; N equal ; B 64 118 829 381 ;
+C 62 ; WX 894.22 ; N greater ; B 96 -76 797 575 ; L greater guillemotright ;
+C 63 ; WX 542.94 ; N question ; B 64 0 478 700 ;
+C 64 ; WX 894.22 ; N at ; B 64 0 829 700 ;
+C 65 ; WX 869.22 ; N A ; B 22 0 808 698 ;
+C 66 ; WX 817.83 ; N B ; B 20 0 734 686 ;
+C 67 ; WX 830.33 ; N C ; B 64 -11 765 697 ;
+C 68 ; WX 881.72 ; N D ; B 20 0 798 686 ;
+C 69 ; WX 755.39 ; N E ; B 20 0 703 680 ;
+C 70 ; WX 723.44 ; N F ; B 20 0 655 680 ;
+C 71 ; WX 904 ; N G ; B 64 -11 845 697 ;
+C 72 ; WX 899.78 ; N H ; B 20 0 841 686 ;
+C 73 ; WX 436 ; N I ; B 12 0 386 686 ;
+C 74 ; WX 594.28 ; N J ; B 19 -11 527 686 ;
+C 75 ; WX 901.17 ; N K ; B 20 0 833 686 ;
+C 76 ; WX 691.5 ; N L ; B 20 0 623 686 ;
+C 77 ; WX 1091.39 ; N M ; B 20 0 1032 686 ;
+C 78 ; WX 899.78 ; N N ; B 20 0 841 686 ;
+C 79 ; WX 863.67 ; N O ; B 64 -11 799 697 ;
+C 80 ; WX 785.94 ; N P ; B 20 0 702 686 ;
+C 81 ; WX 863.67 ; N Q ; B 64 -194 805 697 ;
+C 82 ; WX 862.28 ; N R ; B 20 -11 839 686 ;
+C 83 ; WX 638.72 ; N S ; B 64 -11 574 697 ;
+C 84 ; WX 799.78 ; N T ; B 43 0 758 675 ;
+C 85 ; WX 884.5 ; N U ; B 20 -11 826 686 ;
+C 86 ; WX 869.22 ; N V ; B 7 -8 823 686 ;
+C 87 ; WX 1188.61 ; N W ; B 5 -8 1145 686 ;
+C 88 ; WX 869.22 ; N X ; B 15 0 816 686 ;
+C 89 ; WX 869.22 ; N Y ; B 0 0 830 686 ;
+C 90 ; WX 702.61 ; N Z ; B 64 0 645 686 ;
+C 91 ; WX 319.39 ; N bracketleft ; B 102 -250 293 750 ;
+C 92 ; WX 574.83 ; N backslash ; B 64 -250 510 750 ;
+C 93 ; WX 319.39 ; N bracketright ; B 25 -250 216 750 ;
+C 94 ; WX 702.61 ; N asciicircum ; B 132 458 570 632 ;
+C 95 ; WX 894.22 ; N underscore ; B 96 -308 797 -247 ;
+C 96 ; WX 319.39 ; N quoteleft ; B 63 340 239 694 ; L quoteleft quotedblleft ;
+C 97 ; WX 558.89 ; N a ; B 32 0 558 453 ;
+C 98 ; WX 638.72 ; N b ; B 35 0 600 694 ;
+C 99 ; WX 511 ; N c ; B 38 0 478 453 ;
+C 100 ; WX 638.72 ; N d ; B 38 0 603 694 ;
+C 101 ; WX 527 ; N e ; B 32 0 494 453 ;
+C 102 ; WX 351.28 ; N f ; B 31 0 430 700 ; L i fi ; L f ff ; L l fl ;
+C 103 ; WX 574.83 ; N g ; B 32 -201 558 455 ;
+C 104 ; WX 638.72 ; N h ; B 32 0 606 694 ;
+C 105 ; WX 319.39 ; N i ; B 34 0 277 695 ;
+C 106 ; WX 351.28 ; N j ; B -82 -194 247 695 ;
+C 107 ; WX 606.78 ; N k ; B 35 0 587 694 ;
+C 108 ; WX 319.39 ; N l ; B 34 0 284 694 ;
+C 109 ; WX 958.11 ; N m ; B 32 0 927 444 ;
+C 110 ; WX 638.72 ; N n ; B 32 0 606 444 ;
+C 111 ; WX 574.83 ; N o ; B 32 0 542 453 ;
+C 112 ; WX 638.72 ; N p ; B 35 -194 600 444 ;
+C 113 ; WX 606.78 ; N q ; B 38 -194 603 444 ;
+C 114 ; WX 473.5 ; N r ; B 35 0 441 444 ;
+C 115 ; WX 453.5 ; N s ; B 38 0 415 453 ;
+C 116 ; WX 447.11 ; N t ; B 21 0 382 635 ;
+C 117 ; WX 638.72 ; N u ; B 32 0 606 450 ;
+C 118 ; WX 606.78 ; N v ; B 26 0 580 444 ;
+C 119 ; WX 830.33 ; N w ; B 25 0 804 444 ;
+C 120 ; WX 606.78 ; N x ; B 22 0 586 444 ;
+C 121 ; WX 606.78 ; N y ; B 22 -194 580 444 ;
+C 122 ; WX 511 ; N z ; B 32 0 462 444 ;
+C 123 ; WX 574.83 ; N braceleft ; B 76 -250 498 750 ;
+C 124 ; WX 319.39 ; N bar ; B 129 -250 190 750 ;
+C 125 ; WX 574.83 ; N braceright ; B 76 -250 498 750 ;
+C 126 ; WX 702.61 ; N asciitilde ; B 96 577 606 694 ;
+C 127 ; WX 383.22 ; N hyphen ; B 13 172 318 273 ;
+C 128 ; WX 869.22 ; N Abreve ; B 22 0 808 894 ;
+C 129 ; WX 869.22 ; N Aogonek ; B 22 -207 856 698 ;
+C 130 ; WX 830.33 ; N Cacute ; B 64 -11 765 905 ;
+C 131 ; WX 830.33 ; N Ccaron ; B 64 -11 765 864 ;
+C 132 ; WX 881.72 ; N Dcaron ; B 20 0 798 864 ;
+C 133 ; WX 755.39 ; N Ecaron ; B 20 0 703 863 ;
+C 134 ; WX 755.39 ; N Eogonek ; B 20 -207 703 680 ;
+C 135 ; WX 904 ; N Gbreve ; B 64 -11 845 894 ;
+C 136 ; WX 691.5 ; N Lacute ; B 20 0 623 905 ;
+C 137 ; WX 691.5 ; N Lquoteright ; B 20 0 647 686 ;
+C 138 ; WX 691.5 ; N Lslash ; B 20 0 623 686 ;
+C 139 ; WX 899.78 ; N Nacute ; B 20 0 841 905 ;
+C 140 ; WX 899.78 ; N Ncaron ; B 20 0 841 863 ;
+C 141 ; WX 841.44 ; N Eng ; B 32 -11 783 686 ;
+C 142 ; WX 863.67 ; N Ohungarumlaut ; B 64 -11 799 904 ;
+C 143 ; WX 862.28 ; N Racute ; B 20 -11 839 905 ;
+C 144 ; WX 862.28 ; N Rcaron ; B 20 -11 839 864 ;
+C 145 ; WX 638.72 ; N Sacute ; B 64 -11 574 905 ;
+C 146 ; WX 638.72 ; N Scaron ; B 64 -11 574 864 ;
+C 147 ; WX 638.72 ; N Scedilla ; B 64 -201 574 697 ;
+C 148 ; WX 799.78 ; N Tcaron ; B 43 0 758 863 ;
+C 149 ; WX 799.78 ; N Tcedilla ; B 43 -201 758 675 ;
+C 150 ; WX 884.5 ; N Uhungarumlaut ; B 20 -11 826 904 ;
+C 151 ; WX 884.5 ; N Uring ; B 20 -11 826 902 ;
+C 152 ; WX 869.22 ; N Ydieresis ; B 0 0 830 894 ;
+C 153 ; WX 702.61 ; N Zacute ; B 64 0 645 905 ;
+C 154 ; WX 702.61 ; N Zcaron ; B 64 0 645 864 ;
+C 155 ; WX 702.61 ; N Zdotaccent ; B 64 0 645 894 ;
+C 156 ; WX 1010.83 ; N IJ ; B 12 -11 925 686 ;
+C 157 ; WX 436 ; N Idotaccent ; B 12 0 386 902 ;
+C 158 ; WX 638.72 ; N dbar ; B 38 0 603 694 ;
+C 159 ; WX 529 ; N section ; B 80 -194 448 700 ;
+C 160 ; WX 558.89 ; N abreve ; B 32 0 558 694 ;
+C 161 ; WX 558.89 ; N aogonek ; B 32 -219 558 453 ;
+C 162 ; WX 511 ; N cacute ; B 38 0 478 664 ;
+C 163 ; WX 511 ; N ccaron ; B 38 0 478 623 ;
+C 164 ; WX 810.22 ; N dquoteright ; B 38 0 798 694 ;
+C 165 ; WX 527 ; N ecaron ; B 32 0 494 623 ;
+C 166 ; WX 527 ; N eogonek ; B 32 -219 494 453 ;
+C 167 ; WX 574.83 ; N gbreve ; B 32 -201 558 694 ;
+C 168 ; WX 319.39 ; N lacute ; B 34 0 332 914 ;
+C 169 ; WX 502 ; N lquoteright ; B 34 0 478 694 ;
+C 170 ; WX 319.39 ; N lslash ; B 4 0 314 694 ;
+C 171 ; WX 638.72 ; N nacute ; B 32 0 606 664 ;
+C 172 ; WX 638.72 ; N ncaron ; B 32 0 606 623 ;
+C 173 ; WX 638.72 ; N eng ; B 32 -194 537 444 ;
+C 174 ; WX 574.83 ; N ohungarumlaut ; B 32 0 606 663 ;
+C 175 ; WX 473.5 ; N racute ; B 35 0 441 664 ;
+C 176 ; WX 473.5 ; N rcaron ; B 35 0 441 623 ;
+C 177 ; WX 453.5 ; N sacute ; B 38 0 415 664 ;
+C 178 ; WX 453.5 ; N scaron ; B 38 0 415 622 ;
+C 179 ; WX 453.5 ; N scedilla ; B 38 -201 415 453 ;
+C 180 ; WX 506.83 ; N tquoteright ; B 21 0 494 708 ;
+C 181 ; WX 447.11 ; N tcedilla ; B 21 -201 430 635 ;
+C 182 ; WX 638.72 ; N uhungarumlaut ; B 32 0 638 663 ;
+C 183 ; WX 638.72 ; N uring ; B 32 0 606 661 ;
+C 184 ; WX 606.78 ; N ydieresis ; B 22 -194 580 652 ;
+C 185 ; WX 511 ; N zacute ; B 32 0 462 664 ;
+C 186 ; WX 511 ; N zcaron ; B 32 0 462 623 ;
+C 187 ; WX 511 ; N zdotaccent ; B 32 0 463 694 ;
+C 188 ; WX 670.67 ; N ij ; B 43 -194 574 695 ;
+C 189 ; WX 349.89 ; N exclamdown ; B 94 -205 256 500 ;
+C 190 ; WX 542.94 ; N questiondown ; B 64 -194 478 500 ;
+C 191 ; WX 734.56 ; N sterling ; B 64 0 725 706 ;
+C 192 ; WX 869.22 ; N Agrave ; B 22 0 808 905 ;
+C 193 ; WX 869.22 ; N Aacute ; B 22 0 808 905 ;
+C 194 ; WX 869.22 ; N Acircumflex ; B 22 0 808 894 ;
+C 195 ; WX 869.22 ; N Atilde ; B 22 0 808 894 ;
+C 196 ; WX 869.22 ; N Adieresis ; B 22 0 808 894 ;
+C 197 ; WX 869.22 ; N Aring ; B 22 0 808 861 ;
+C 198 ; WX 1041.39 ; N AE ; B 22 0 989 686 ;
+C 199 ; WX 830.33 ; N Ccedilla ; B 64 -201 765 697 ;
+C 200 ; WX 755.39 ; N Egrave ; B 20 0 703 905 ;
+C 201 ; WX 755.39 ; N Eacute ; B 20 0 703 905 ;
+C 202 ; WX 755.39 ; N Ecircumflex ; B 20 0 703 894 ;
+C 203 ; WX 755.39 ; N Edieresis ; B 20 0 703 894 ;
+C 204 ; WX 436 ; N Igrave ; B 12 0 386 905 ;
+C 205 ; WX 436 ; N Iacute ; B 12 0 386 905 ;
+C 206 ; WX 436 ; N Icircumflex ; B 12 0 386 894 ;
+C 207 ; WX 436 ; N Idieresis ; B 12 0 386 894 ;
+C 208 ; WX 881.72 ; N Eth ; B 20 0 798 686 ;
+C 209 ; WX 899.78 ; N Ntilde ; B 20 0 841 894 ;
+C 210 ; WX 863.67 ; N Ograve ; B 64 -11 799 905 ;
+C 211 ; WX 863.67 ; N Oacute ; B 64 -11 799 905 ;
+C 212 ; WX 863.67 ; N Ocircumflex ; B 64 -11 799 894 ;
+C 213 ; WX 863.67 ; N Otilde ; B 64 -11 799 894 ;
+C 214 ; WX 863.67 ; N Odieresis ; B 64 -11 799 894 ;
+C 215 ; WX 1169.17 ; N OE ; B 64 -11 1117 697 ;
+C 216 ; WX 894.22 ; N Oslash ; B 64 -61 829 747 ;
+C 217 ; WX 884.5 ; N Ugrave ; B 20 -11 826 905 ;
+C 218 ; WX 884.5 ; N Uacute ; B 20 -11 826 905 ;
+C 219 ; WX 884.5 ; N Ucircumflex ; B 20 -11 826 894 ;
+C 220 ; WX 884.5 ; N Udieresis ; B 20 -11 826 894 ;
+C 221 ; WX 869.22 ; N Yacute ; B 0 0 830 905 ;
+C 222 ; WX 722 ; N Thorn ; B 20 0 638 686 ;
+C 223 ; WX 1277.44 ; N Germandbls ; B 64 -11 1212 697 ;
+C 224 ; WX 558.89 ; N agrave ; B 32 0 558 664 ;
+C 225 ; WX 558.89 ; N aacute ; B 32 0 558 664 ;
+C 226 ; WX 558.89 ; N acircumflex ; B 32 0 558 653 ;
+C 227 ; WX 558.89 ; N atilde ; B 32 0 558 694 ;
+C 228 ; WX 558.89 ; N adieresis ; B 32 0 558 652 ;
+C 229 ; WX 558.89 ; N aring ; B 32 0 558 661 ;
+C 230 ; WX 830.33 ; N ae ; B 35 0 797 453 ;
+C 231 ; WX 511 ; N ccedilla ; B 38 -201 478 453 ;
+C 232 ; WX 527 ; N egrave ; B 32 0 494 664 ;
+C 233 ; WX 527 ; N eacute ; B 32 0 494 664 ;
+C 234 ; WX 527 ; N ecircumflex ; B 32 0 494 653 ;
+C 235 ; WX 527 ; N edieresis ; B 32 0 494 652 ;
+C 236 ; WX 319.39 ; N igrave ; B -14 0 277 664 ;
+C 237 ; WX 319.39 ; N iacute ; B 34 0 332 664 ;
+C 238 ; WX 319.39 ; N icircumflex ; B -1 0 319 653 ;
+C 239 ; WX 383.22 ; N idieresis ; B -27 0 346 652 ;
+C 240 ; WX 574.83 ; N eth ; B 32 0 542 694 ;
+C 241 ; WX 638.72 ; N ntilde ; B 32 0 606 694 ;
+C 242 ; WX 574.83 ; N ograve ; B 32 0 542 664 ;
+C 243 ; WX 574.83 ; N oacute ; B 32 0 542 664 ;
+C 244 ; WX 574.83 ; N ocircumflex ; B 32 0 542 653 ;
+C 245 ; WX 574.83 ; N otilde ; B 32 0 542 694 ;
+C 246 ; WX 574.83 ; N odieresis ; B 32 0 542 652 ;
+C 247 ; WX 894.22 ; N oe ; B 32 0 861 453 ;
+C 248 ; WX 574.83 ; N oslash ; B 32 -107 542 552 ;
+C 249 ; WX 638.72 ; N ugrave ; B 32 0 606 664 ;
+C 250 ; WX 638.72 ; N uacute ; B 32 0 606 664 ;
+C 251 ; WX 638.72 ; N ucircumflex ; B 32 0 606 653 ;
+C 252 ; WX 638.72 ; N udieresis ; B 32 0 606 652 ;
+C 253 ; WX 606.78 ; N yacute ; B 22 -194 580 664 ;
+C 254 ; WX 638.72 ; N thorn ; B 34 -212 600 694 ;
+C 255 ; WX 597.06 ; N germandbls ; B 35 0 564 700 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 471
+KPX A C -31.94
+KPX A G -31.94
+KPX A O -31.94
+KPX A Q -31.94
+KPX A T -95.81
+KPX A U -31.94
+KPX A V -127.75
+KPX A W -127.75
+KPX A Y -95.81
+KPX A t -31.94
+KPX Aacute C -31.94
+KPX Aacute G -31.94
+KPX Aacute O -31.94
+KPX Aacute Q -31.94
+KPX Aacute T -95.81
+KPX Aacute U -31.94
+KPX Aacute V -127.75
+KPX Aacute W -127.75
+KPX Aacute Y -95.81
+KPX Aacute t -31.94
+KPX Abreve C -31.94
+KPX Abreve G -31.94
+KPX Abreve O -31.94
+KPX Abreve Q -31.94
+KPX Abreve T -95.81
+KPX Abreve U -31.94
+KPX Abreve V -127.75
+KPX Abreve W -127.75
+KPX Abreve Y -95.81
+KPX Abreve t -31.94
+KPX Acircumflex C -31.94
+KPX Acircumflex G -31.94
+KPX Acircumflex O -31.94
+KPX Acircumflex Q -31.94
+KPX Acircumflex T -95.81
+KPX Acircumflex U -31.94
+KPX Acircumflex V -127.75
+KPX Acircumflex W -127.75
+KPX Acircumflex Y -95.81
+KPX Acircumflex t -31.94
+KPX Adieresis C -31.94
+KPX Adieresis G -31.94
+KPX Adieresis O -31.94
+KPX Adieresis Q -31.94
+KPX Adieresis T -95.81
+KPX Adieresis U -31.94
+KPX Adieresis V -127.75
+KPX Adieresis W -127.75
+KPX Adieresis Y -95.81
+KPX Adieresis t -31.94
+KPX Agrave C -31.94
+KPX Agrave G -31.94
+KPX Agrave O -31.94
+KPX Agrave Q -31.94
+KPX Agrave T -95.81
+KPX Agrave U -31.94
+KPX Agrave V -127.75
+KPX Agrave W -127.75
+KPX Agrave Y -95.81
+KPX Agrave t -31.94
+KPX Aogonek C -31.94
+KPX Aogonek G -31.94
+KPX Aogonek O -31.94
+KPX Aogonek Q -31.94
+KPX Aogonek T -95.81
+KPX Aogonek U -31.94
+KPX Aogonek V -127.75
+KPX Aogonek W -127.75
+KPX Aogonek Y -95.81
+KPX Aogonek t -31.94
+KPX Aring C -31.94
+KPX Aring G -31.94
+KPX Aring O -31.94
+KPX Aring Q -31.94
+KPX Aring T -95.81
+KPX Aring U -31.94
+KPX Aring V -127.75
+KPX Aring W -127.75
+KPX Aring Y -95.81
+KPX Aring t -31.94
+KPX Atilde C -31.94
+KPX Atilde G -31.94
+KPX Atilde O -31.94
+KPX Atilde Q -31.94
+KPX Atilde T -95.81
+KPX Atilde U -31.94
+KPX Atilde V -127.75
+KPX Atilde W -127.75
+KPX Atilde Y -95.81
+KPX Atilde t -31.94
+KPX D A -31.94
+KPX D V -31.94
+KPX D W -31.94
+KPX D X -31.94
+KPX D Y -31.94
+KPX F A -127.75
+KPX F C -31.94
+KPX F G -31.94
+KPX F O -31.94
+KPX F Q -31.94
+KPX F a -95.81
+KPX F e -95.81
+KPX F o -95.81
+KPX F r -95.81
+KPX F u -95.81
+KPX I I 31.94
+KPX K C -31.94
+KPX K G -31.94
+KPX K O -31.94
+KPX K Q -31.94
+KPX L T -95.81
+KPX L V -127.75
+KPX L W -127.75
+KPX L Y -95.81
+KPX O A -31.94
+KPX O V -31.94
+KPX O W -31.94
+KPX O X -31.94
+KPX O Y -31.94
+KPX P A -95.81
+KPX P a -31.94
+KPX P aacute -31.94
+KPX P acircumflex -31.94
+KPX P acircumflex -31.94
+KPX P adieresis -31.94
+KPX P ae -31.94
+KPX P agrave -31.94
+KPX P aogonek -31.94
+KPX P aring -31.94
+KPX P atilde -31.94
+KPX P cacute -31.94
+KPX P comma -95.81
+KPX P e -31.94
+KPX P eacute -31.94
+KPX P ecaron -31.94
+KPX P ecircumflex -31.94
+KPX P edieresis -31.94
+KPX P egrave -31.94
+KPX P eogonek -31.94
+KPX P o -31.94
+KPX P oacute -31.94
+KPX P ocircumflex -31.94
+KPX P odieresis -31.94
+KPX P oe -31.94
+KPX P ograve -31.94
+KPX P ohungarumlaut -31.94
+KPX P otilde -31.94
+KPX P period -95.81
+KPX R C -31.94
+KPX R G -31.94
+KPX R O -31.94
+KPX R Q -31.94
+KPX R T -95.81
+KPX R U -31.94
+KPX R V -127.75
+KPX R W -127.75
+KPX R Y -95.81
+KPX R t -31.94
+KPX T A -95.81
+KPX T a -95.81
+KPX T e -95.81
+KPX T o -95.81
+KPX T r -95.81
+KPX T u -95.81
+KPX T y -31.94
+KPX V A -127.75
+KPX V C -31.94
+KPX V G -31.94
+KPX V O -31.94
+KPX V Q -31.94
+KPX V a -95.81
+KPX V e -95.81
+KPX V o -95.81
+KPX V r -95.81
+KPX V u -95.81
+KPX W A -127.75
+KPX W C -31.94
+KPX W G -31.94
+KPX W O -31.94
+KPX W Q -31.94
+KPX W a -95.81
+KPX W e -95.81
+KPX W o -95.81
+KPX W r -95.81
+KPX W u -95.81
+KPX X C -31.94
+KPX X G -31.94
+KPX X O -31.94
+KPX X Q -31.94
+KPX Y A -95.81
+KPX Y a -95.81
+KPX Y e -95.81
+KPX Y o -95.81
+KPX Y r -95.81
+KPX Y u -95.81
+KPX a j 63.87
+KPX a v -31.94
+KPX a w -31.94
+KPX a y -31.94
+KPX b c 31.94
+KPX b cacute 31.94
+KPX b ccaron 31.94
+KPX b ccedilla 31.94
+KPX b d 31.94
+KPX b e 31.94
+KPX b eacute 31.94
+KPX b ecaron 31.94
+KPX b ecircumflex 31.94
+KPX b edieresis 31.94
+KPX b egrave 31.94
+KPX b eogonek 31.94
+KPX b j 63.87
+KPX b o 31.94
+KPX b oacute 31.94
+KPX b ocircumflex 31.94
+KPX b odieresis 31.94
+KPX b oe 31.94
+KPX b ograve 31.94
+KPX b ohungarumlaut 31.94
+KPX b otilde 31.94
+KPX b q 31.94
+KPX b v -31.94
+KPX b w -31.94
+KPX b x -31.94
+KPX b y -31.94
+KPX c h -31.94
+KPX c k -31.94
+KPX f bracketright 109
+KPX f exclam 109
+KPX f parenright 109
+KPX f question 109
+KPX f quoteright 109
+KPX ff bracketright 109
+KPX ff exclam 109
+KPX ff parenright 109
+KPX ff question 109
+KPX ff quoteright 109
+KPX g j 31.94
+KPX h b -31.94
+KPX h t -31.94
+KPX h u -31.94
+KPX h uacute -31.94
+KPX h ucircumflex -31.94
+KPX h udieresis -31.94
+KPX h ugrave -31.94
+KPX h uhungarumlaut -31.94
+KPX h uring -31.94
+KPX h v -31.94
+KPX h w -31.94
+KPX h y -31.94
+KPX k a -31.94
+KPX k a -63.87
+KPX k aacute -31.94
+KPX k aacute -63.87
+KPX k acircumflex -63.87
+KPX k acircumflex -63.87
+KPX k acircumflex -31.94
+KPX k acircumflex -31.94
+KPX k adieresis -31.94
+KPX k adieresis -63.87
+KPX k ae -63.87
+KPX k ae -31.94
+KPX k agrave -63.87
+KPX k agrave -31.94
+KPX k aogonek -63.87
+KPX k aogonek -31.94
+KPX k aring -63.87
+KPX k aring -31.94
+KPX k atilde -31.94
+KPX k atilde -63.87
+KPX k c -31.94
+KPX k cacute -31.94
+KPX k cacute -31.94
+KPX k cacute -63.87
+KPX k ccaron -31.94
+KPX k ccedilla -31.94
+KPX k e -31.94
+KPX k eacute -31.94
+KPX k ecaron -31.94
+KPX k ecircumflex -31.94
+KPX k edieresis -31.94
+KPX k egrave -31.94
+KPX k eogonek -31.94
+KPX k o -31.94
+KPX k oacute -31.94
+KPX k ocircumflex -31.94
+KPX k odieresis -31.94
+KPX k oe -31.94
+KPX k ograve -31.94
+KPX k ohungarumlaut -31.94
+KPX k otilde -31.94
+KPX m b -31.94
+KPX m t -31.94
+KPX m u -31.94
+KPX m uacute -31.94
+KPX m ucircumflex -31.94
+KPX m udieresis -31.94
+KPX m ugrave -31.94
+KPX m uhungarumlaut -31.94
+KPX m uring -31.94
+KPX m v -31.94
+KPX m w -31.94
+KPX m y -31.94
+KPX n b -31.94
+KPX n t -31.94
+KPX n u -31.94
+KPX n uacute -31.94
+KPX n ucircumflex -31.94
+KPX n udieresis -31.94
+KPX n ugrave -31.94
+KPX n uhungarumlaut -31.94
+KPX n uring -31.94
+KPX n v -31.94
+KPX n w -31.94
+KPX n y -31.94
+KPX o c 31.94
+KPX o cacute 31.94
+KPX o ccaron 31.94
+KPX o ccedilla 31.94
+KPX o d 31.94
+KPX o e 31.94
+KPX o eacute 31.94
+KPX o ecaron 31.94
+KPX o ecircumflex 31.94
+KPX o edieresis 31.94
+KPX o egrave 31.94
+KPX o eogonek 31.94
+KPX o j 63.87
+KPX o o 31.94
+KPX o oacute 31.94
+KPX o ocircumflex 31.94
+KPX o odieresis 31.94
+KPX o oe 31.94
+KPX o ograve 31.94
+KPX o ohungarumlaut 31.94
+KPX o otilde 31.94
+KPX o q 31.94
+KPX o v -31.94
+KPX o w -31.94
+KPX o x -31.94
+KPX o y -31.94
+KPX p c 31.94
+KPX p cacute 31.94
+KPX p ccaron 31.94
+KPX p ccedilla 31.94
+KPX p d 31.94
+KPX p e 31.94
+KPX p eacute 31.94
+KPX p ecaron 31.94
+KPX p ecircumflex 31.94
+KPX p edieresis 31.94
+KPX p egrave 31.94
+KPX p eogonek 31.94
+KPX p j 63.87
+KPX p o 31.94
+KPX p oacute 31.94
+KPX p ocircumflex 31.94
+KPX p odieresis 31.94
+KPX p oe 31.94
+KPX p ograve 31.94
+KPX p ohungarumlaut 31.94
+KPX p otilde 31.94
+KPX p q 31.94
+KPX p v -31.94
+KPX p w -31.94
+KPX p x -31.94
+KPX p y -31.94
+KPX quoteright exclam 127.75
+KPX quoteright question 127.75
+KPX t w -31.94
+KPX t y -31.94
+KPX u w -31.94
+KPX v a -31.94
+KPX v a -63.87
+KPX v aacute -31.94
+KPX v aacute -63.87
+KPX v acircumflex -63.87
+KPX v acircumflex -31.94
+KPX v acircumflex -31.94
+KPX v acircumflex -63.87
+KPX v adieresis -31.94
+KPX v adieresis -63.87
+KPX v ae -31.94
+KPX v ae -63.87
+KPX v agrave -31.94
+KPX v agrave -63.87
+KPX v aogonek -63.87
+KPX v aogonek -31.94
+KPX v aring -63.87
+KPX v aring -31.94
+KPX v atilde -63.87
+KPX v atilde -31.94
+KPX v c -31.94
+KPX v cacute -63.87
+KPX v cacute -31.94
+KPX v cacute -31.94
+KPX v ccaron -31.94
+KPX v ccedilla -31.94
+KPX v e -31.94
+KPX v eacute -31.94
+KPX v ecaron -31.94
+KPX v ecircumflex -31.94
+KPX v edieresis -31.94
+KPX v egrave -31.94
+KPX v eogonek -31.94
+KPX v o -31.94
+KPX v oacute -31.94
+KPX v ocircumflex -31.94
+KPX v odieresis -31.94
+KPX v oe -31.94
+KPX v ograve -31.94
+KPX v ohungarumlaut -31.94
+KPX v otilde -31.94
+KPX w a -31.94
+KPX w aacute -31.94
+KPX w acircumflex -31.94
+KPX w acircumflex -31.94
+KPX w adieresis -31.94
+KPX w ae -31.94
+KPX w agrave -31.94
+KPX w aogonek -31.94
+KPX w aring -31.94
+KPX w atilde -31.94
+KPX w c -31.94
+KPX w cacute -31.94
+KPX w cacute -31.94
+KPX w ccaron -31.94
+KPX w ccedilla -31.94
+KPX w e -31.94
+KPX w eacute -31.94
+KPX w ecaron -31.94
+KPX w ecircumflex -31.94
+KPX w edieresis -31.94
+KPX w egrave -31.94
+KPX w eogonek -31.94
+KPX w o -31.94
+KPX w oacute -31.94
+KPX w ocircumflex -31.94
+KPX w odieresis -31.94
+KPX w oe -31.94
+KPX w ograve -31.94
+KPX w ohungarumlaut -31.94
+KPX w otilde -31.94
+KPX y a -31.94
+KPX y aacute -31.94
+KPX y acircumflex -31.94
+KPX y acircumflex -31.94
+KPX y adieresis -31.94
+KPX y ae -31.94
+KPX y agrave -31.94
+KPX y aogonek -31.94
+KPX y aring -31.94
+KPX y atilde -31.94
+KPX y cacute -31.94
+KPX y comma -95.81
+KPX y e -31.94
+KPX y eacute -31.94
+KPX y ecaron -31.94
+KPX y ecircumflex -31.94
+KPX y edieresis -31.94
+KPX y egrave -31.94
+KPX y eogonek -31.94
+KPX y o -31.94
+KPX y oacute -31.94
+KPX y ocircumflex -31.94
+KPX y odieresis -31.94
+KPX y oe -31.94
+KPX y ograve -31.94
+KPX y ohungarumlaut -31.94
+KPX y otilde -31.94
+KPX y period -95.81
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbxti10.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbxti10.afm
new file mode 100644
index 00000000000..a808627df1f
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcbxti10.afm
@@ -0,0 +1,2341 @@
+StartFontMetrics 2.0
+FontName dcbxti10
+FullName dcbxti10
+FamilyName dcbxti10
+Weight Medium
+ItalicAngle 0.000000
+IsFixedPitch false
+UnderlinePosition -133
+UnderlineThickness 20
+Version 1.0\(Level-B\)
+FontBBox -60, -308, 1261, 911
+Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B.
+EncodingScheme FontSpecific
+CapHeight 686
+XHeight 444
+Descender -194
+Ascender 694
+StartCharMetrics 256
+C 0 ; WX 591 ; N grave ; B 272 500 455 699 ;
+C 1 ; WX 591 ; N acute ; B 342 500 578 699 ;
+C 2 ; WX 591 ; N circumflex ; B 246 521 562 694 ;
+C 3 ; WX 591 ; N tilde ; B 236 572 609 694 ;
+C 4 ; WX 591 ; N dieresis ; B 247 555 595 695 ;
+C 5 ; WX 591 ; N hungarumlaut ; B 252 504 609 702 ;
+C 6 ; WX 948.67 ; N ring ; B 462 544 701 711 ;
+C 7 ; WX 591 ; N caron ; B 259 500 572 642 ;
+C 8 ; WX 591 ; N breve ; B 263 513 600 694 ;
+C 9 ; WX 591 ; N macron ; B 218 557 603 611 ;
+C 10 ; WX 355.44 ; N dotaccent ; B 224 544 379 695 ;
+C 11 ; WX 532.11 ; N cedilla ; B 78 -189 383 19 ;
+C 12 ; WX 355.44 ; N ogonek ; B -29 -194 232 36 ;
+C 13 ; WX 355.44 ; N quotesinglbase ; B 52 -194 242 151 ;
+C 14 ; WX 532.11 ; N guilsinglleft ; B 159 40 452 432 ;
+C 15 ; WX 532.11 ; N guilsinglright ; B 115 40 447 432 ;
+C 16 ; WX 620.39 ; N quotedblleft ; B 231 349 663 694 ;
+C 17 ; WX 620.39 ; N quotedblright ; B 156 349 588 694 ;
+C 18 ; WX 620.39 ; N quotedblbase ; B 127 -194 559 151 ;
+C 19 ; WX 767.61 ; N guillemotleft ; B 159 40 688 432 ;
+C 20 ; WX 767.61 ; N guillemotright ; B 115 40 683 432 ;
+C 21 ; WX 591 ; N endash ; B 68 254 598 294 ; L hyphen emdash ;
+C 22 ; WX 1181.94 ; N emdash ; B 68 254 1127 294 ;
+C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ;
+C 24 ; WX 473.22 ; N perthousand ; B 85 -56 400 347 ;
+C 25 ; WX 355.44 ; N dotlessi ; B 44 -8 360 452 ;
+C 26 ; WX 384.89 ; N dotlessj ; B -60 -202 346 452 ;
+C 27 ; WX 755.39 ; N ff ; B -49 -202 861 702 ; L i ffi ; L l ffl ;
+C 28 ; WX 674.28 ; N fi ; B -49 -202 679 702 ;
+C 29 ; WX 703.72 ; N fl ; B -49 -202 720 702 ;
+C 30 ; WX 1044.44 ; N ffi ; B -49 -202 1049 702 ;
+C 31 ; WX 1059.17 ; N ffl ; B -49 -202 1075 702 ;
+C 32 ; WX 591 ; N visiblespace ; B 19 -111 545 251 ;
+C 33 ; WX 386 ; N exclam ; B 104 0 400 711 ;
+C 34 ; WX 591 ; N quotedbl ; B 245 342 579 706 ;
+C 35 ; WX 944.22 ; N numbersign ; B 94 -194 913 694 ;
+C 36 ; WX 591 ; N dollar ; B 99 -56 606 750 ;
+C 37 ; WX 944.22 ; N percent ; B 141 -56 915 750 ;
+C 38 ; WX 885.33 ; N ampersand ; B 110 -17 865 711 ;
+C 39 ; WX 355.44 ; N quoteright ; B 192 349 385 694 ; L quoteright quotedblright ;
+C 40 ; WX 473.22 ; N parenleft ; B 136 -251 536 750 ;
+C 41 ; WX 473.22 ; N parenright ; B 0 -251 400 750 ;
+C 42 ; WX 591 ; N asterisk ; B 176 306 617 750 ;
+C 43 ; WX 885.33 ; N plus ; B 121 -104 826 603 ;
+C 44 ; WX 355.44 ; N comma ; B 56 -194 246 151 ; L comma quotedblbase ;
+C 45 ; WX 414.33 ; N hyphen ; B 60 174 356 271 ; L hyphen endash ;
+C 46 ; WX 355.44 ; N period ; B 88 0 243 151 ;
+C 47 ; WX 591 ; N slash ; B 2 -250 653 750 ;
+C 48 ; WX 591 ; N zero ; B 82 -17 607 661 ;
+C 49 ; WX 591 ; N one ; B 93 0 489 661 ;
+C 50 ; WX 591 ; N two ; B 57 -17 587 661 ;
+C 51 ; WX 591 ; N three ; B 77 -17 597 661 ;
+C 52 ; WX 591 ; N four ; B 23 -194 516 661 ;
+C 53 ; WX 591 ; N five ; B 88 -17 597 661 ;
+C 54 ; WX 591 ; N six ; B 101 -17 596 661 ;
+C 55 ; WX 591 ; N seven ; B 110 -17 677 661 ;
+C 56 ; WX 591 ; N eight ; B 79 -17 587 661 ;
+C 57 ; WX 591 ; N nine ; B 94 -17 590 661 ;
+C 58 ; WX 355.44 ; N colon ; B 88 0 316 444 ;
+C 59 ; WX 355.44 ; N semicolon ; B 56 -194 316 444 ;
+C 60 ; WX 885.33 ; N less ; B 150 -76 874 575 ; L less guillemotleft ;
+C 61 ; WX 885.33 ; N equal ; B 94 118 855 381 ;
+C 62 ; WX 885.33 ; N greater ; B 74 -76 797 575 ; L greater guillemotright ;
+C 63 ; WX 591 ; N question ; B 183 0 583 711 ;
+C 64 ; WX 885.33 ; N at ; B 133 -8 864 702 ;
+C 65 ; WX 865.33 ; N A ; B 22 0 755 711 ;
+C 66 ; WX 816.44 ; N B ; B 14 0 780 686 ;
+C 67 ; WX 826.44 ; N C ; B 132 -17 877 703 ;
+C 68 ; WX 875.33 ; N D ; B 14 0 834 686 ;
+C 69 ; WX 756.5 ; N E ; B 14 0 754 680 ;
+C 70 ; WX 727 ; N F ; B 14 0 740 680 ;
+C 71 ; WX 895.06 ; N G ; B 132 -17 877 703 ;
+C 72 ; WX 895.89 ; N H ; B 14 0 953 686 ;
+C 73 ; WX 471.56 ; N I ; B 7 0 537 686 ;
+C 74 ; WX 610.39 ; N J ; B 37 -17 659 686 ;
+C 75 ; WX 894.78 ; N K ; B 14 0 922 686 ;
+C 76 ; WX 697.61 ; N L ; B 14 0 638 686 ;
+C 77 ; WX 1072.5 ; N M ; B 14 0 1130 686 ;
+C 78 ; WX 895.89 ; N N ; B 14 0 953 686 ;
+C 79 ; WX 854.78 ; N O ; B 129 -17 834 703 ;
+C 80 ; WX 787 ; N P ; B 14 0 775 686 ;
+C 81 ; WX 854.78 ; N Q ; B 129 -194 834 703 ;
+C 82 ; WX 859.22 ; N R ; B 14 -17 800 686 ;
+C 83 ; WX 649.83 ; N S ; B 58 -17 672 703 ;
+C 84 ; WX 795.94 ; N T ; B 148 0 841 675 ;
+C 85 ; WX 880.61 ; N U ; B 168 -17 938 686 ;
+C 86 ; WX 865.33 ; N V ; B 167 -17 928 686 ;
+C 87 ; WX 1159.72 ; N W ; B 166 -17 1224 686 ;
+C 88 ; WX 865.33 ; N X ; B 16 0 877 686 ;
+C 89 ; WX 865.33 ; N Y ; B 161 0 934 686 ;
+C 90 ; WX 708.72 ; N Z ; B 63 0 756 686 ;
+C 91 ; WX 356 ; N bracketleft ; B 36 -250 454 750 ;
+C 92 ; WX 591 ; N backslash ; B 242 -250 413 750 ;
+C 93 ; WX 356 ; N bracketright ; B -35 -250 383 750 ;
+C 94 ; WX 708.72 ; N asciicircum ; B 231 452 662 632 ;
+C 95 ; WX 885.33 ; N underscore ; B 19 -308 666 -247 ;
+C 96 ; WX 355.44 ; N quoteleft ; B 169 349 362 694 ; L quoteleft quotedblleft ;
+C 97 ; WX 591 ; N a ; B 73 -8 596 452 ;
+C 98 ; WX 532.11 ; N b ; B 79 -8 508 694 ;
+C 99 ; WX 532.11 ; N c ; B 74 -8 505 452 ;
+C 100 ; WX 591 ; N d ; B 73 -8 606 694 ;
+C 101 ; WX 532.11 ; N e ; B 77 -8 505 452 ;
+C 102 ; WX 399.89 ; N f ; B -49 -202 506 702 ; L i fi ; L f ff ; L l fl ;
+C 103 ; WX 532.11 ; N g ; B 26 -202 534 452 ;
+C 104 ; WX 591 ; N h ; B 43 -8 596 694 ;
+C 105 ; WX 355.44 ; N i ; B 44 -8 360 694 ;
+C 106 ; WX 355.44 ; N j ; B -60 -202 383 694 ;
+C 107 ; WX 532.11 ; N k ; B 43 -8 537 694 ;
+C 108 ; WX 296.61 ; N l ; B 57 -8 312 694 ;
+C 109 ; WX 944.22 ; N m ; B 44 -8 949 452 ;
+C 110 ; WX 649.83 ; N n ; B 44 -8 655 452 ;
+C 111 ; WX 591 ; N o ; B 75 -8 566 452 ;
+C 112 ; WX 591 ; N p ; B -8 -194 567 452 ;
+C 113 ; WX 532.11 ; N q ; B 73 -194 546 452 ;
+C 114 ; WX 501.56 ; N r ; B 44 -8 529 452 ;
+C 115 ; WX 486.83 ; N s ; B 54 -8 455 452 ;
+C 116 ; WX 384.89 ; N t ; B 59 -8 390 643 ;
+C 117 ; WX 620.39 ; N u ; B 44 -8 625 452 ;
+C 118 ; WX 532.11 ; N v ; B 44 -8 524 453 ;
+C 119 ; WX 767.61 ; N w ; B 44 -8 760 453 ;
+C 120 ; WX 560.44 ; N x ; B 39 -8 570 452 ;
+C 121 ; WX 561.56 ; N y ; B 44 -202 566 452 ;
+C 122 ; WX 490.44 ; N z ; B 31 -8 509 452 ;
+C 123 ; WX 591 ; N braceleft ; B 129 -250 645 750 ;
+C 124 ; WX 355.44 ; N bar ; B 61 -250 357 750 ;
+C 125 ; WX 591 ; N braceright ; B 9 -250 525 750 ;
+C 126 ; WX 708.72 ; N asciitilde ; B 236 572 727 694 ;
+C 127 ; WX 414.33 ; N hyphen ; B 60 174 356 271 ;
+C 128 ; WX 865.33 ; N Abreve ; B 22 0 769 894 ;
+C 129 ; WX 865.33 ; N Aogonek ; B 22 -182 784 711 ;
+C 130 ; WX 826.44 ; N Cacute ; B 132 -17 877 899 ;
+C 131 ; WX 826.44 ; N Ccaron ; B 132 -17 877 843 ;
+C 132 ; WX 875.33 ; N Dcaron ; B 14 0 834 843 ;
+C 133 ; WX 756.5 ; N Ecaron ; B 14 0 754 843 ;
+C 134 ; WX 756.5 ; N Eogonek ; B 14 -182 754 680 ;
+C 135 ; WX 895.06 ; N Gbreve ; B 132 -17 877 894 ;
+C 136 ; WX 697.61 ; N Lacute ; B 14 0 674 899 ;
+C 137 ; WX 697.61 ; N Lquoteright ; B 14 0 764 686 ;
+C 138 ; WX 697.61 ; N Lslash ; B 14 0 638 686 ;
+C 139 ; WX 895.89 ; N Nacute ; B 14 0 953 899 ;
+C 140 ; WX 895.89 ; N Ncaron ; B 14 0 953 843 ;
+C 141 ; WX 837.56 ; N Eng ; B 22 -17 862 694 ;
+C 142 ; WX 854.78 ; N Ohungarumlaut ; B 129 -17 896 899 ;
+C 143 ; WX 859.22 ; N Racute ; B 14 -17 800 899 ;
+C 144 ; WX 859.22 ; N Rcaron ; B 14 -17 800 843 ;
+C 145 ; WX 649.83 ; N Sacute ; B 58 -17 672 899 ;
+C 146 ; WX 649.83 ; N Scaron ; B 58 -17 672 843 ;
+C 147 ; WX 649.83 ; N Scedilla ; B 58 -189 672 703 ;
+C 148 ; WX 795.94 ; N Tcaron ; B 148 0 841 843 ;
+C 149 ; WX 795.94 ; N Tcedilla ; B 148 -189 841 675 ;
+C 150 ; WX 880.61 ; N Uhungarumlaut ; B 168 -17 938 899 ;
+C 151 ; WX 880.61 ; N Uring ; B 168 -17 938 911 ;
+C 152 ; WX 865.33 ; N Ydieresis ; B 161 0 934 894 ;
+C 153 ; WX 708.72 ; N Zacute ; B 63 0 756 899 ;
+C 154 ; WX 708.72 ; N Zcaron ; B 63 0 756 843 ;
+C 155 ; WX 708.72 ; N Zdotaccent ; B 63 0 756 894 ;
+C 156 ; WX 1001.44 ; N IJ ; B 7 -17 1031 686 ;
+C 157 ; WX 471.56 ; N Idotaccent ; B 7 0 537 902 ;
+C 158 ; WX 591 ; N dbar ; B 73 -8 626 694 ;
+C 159 ; WX 549.33 ; N section ; B 66 -202 546 702 ;
+C 160 ; WX 591 ; N abreve ; B 73 -8 596 653 ;
+C 161 ; WX 591 ; N aogonek ; B 73 -194 596 452 ;
+C 162 ; WX 532.11 ; N cacute ; B 74 -8 539 658 ;
+C 163 ; WX 532.11 ; N ccaron ; B 74 -8 563 602 ;
+C 164 ; WX 591 ; N dquoteright ; B 73 -8 830 694 ;
+C 165 ; WX 532.11 ; N ecaron ; B 77 -8 533 602 ;
+C 166 ; WX 532.11 ; N eogonek ; B 77 -179 505 452 ;
+C 167 ; WX 532.11 ; N gbreve ; B 26 -202 561 653 ;
+C 168 ; WX 296.61 ; N lacute ; B 57 -8 485 908 ;
+C 169 ; WX 296.61 ; N lquoteright ; B 57 -8 536 694 ;
+C 170 ; WX 296.61 ; N lslash ; B 8 -8 338 694 ;
+C 171 ; WX 649.83 ; N nacute ; B 44 -8 655 658 ;
+C 172 ; WX 649.83 ; N ncaron ; B 44 -8 655 602 ;
+C 173 ; WX 649.83 ; N eng ; B 44 -202 575 452 ;
+C 174 ; WX 591 ; N ohungarumlaut ; B 75 -8 704 658 ;
+C 175 ; WX 501.56 ; N racute ; B 44 -8 529 658 ;
+C 176 ; WX 501.56 ; N rcaron ; B 44 -8 529 602 ;
+C 177 ; WX 486.83 ; N sacute ; B 54 -8 517 658 ;
+C 178 ; WX 486.83 ; N scaron ; B 54 -8 510 602 ;
+C 179 ; WX 486.83 ; N scedilla ; B 26 -189 455 452 ;
+C 180 ; WX 384.89 ; N tquoteright ; B 59 -8 529 708 ;
+C 181 ; WX 384.89 ; N tcedilla ; B 20 -189 390 643 ;
+C 182 ; WX 620.39 ; N uhungarumlaut ; B 44 -8 719 658 ;
+C 183 ; WX 620.39 ; N uring ; B 44 -8 625 670 ;
+C 184 ; WX 561.56 ; N ydieresis ; B 44 -202 570 652 ;
+C 185 ; WX 490.44 ; N zacute ; B 31 -8 518 658 ;
+C 186 ; WX 490.44 ; N zcaron ; B 31 -8 512 602 ;
+C 187 ; WX 490.44 ; N zdotaccent ; B 31 -8 509 694 ;
+C 188 ; WX 649.83 ; N ij ; B 44 -202 678 694 ;
+C 189 ; WX 386 ; N exclamdown ; B 50 -211 346 500 ;
+C 190 ; WX 591 ; N questiondown ; B 71 -211 471 500 ;
+C 191 ; WX 868.33 ; N sterling ; B 70 -8 753 708 ;
+C 192 ; WX 865.33 ; N Agrave ; B 22 0 755 899 ;
+C 193 ; WX 865.33 ; N Aacute ; B 22 0 755 899 ;
+C 194 ; WX 865.33 ; N Acircumflex ; B 22 0 755 894 ;
+C 195 ; WX 865.33 ; N Atilde ; B 22 0 777 894 ;
+C 196 ; WX 865.33 ; N Adieresis ; B 22 0 763 894 ;
+C 197 ; WX 865.33 ; N Aring ; B 22 0 755 870 ;
+C 198 ; WX 1022.56 ; N AE ; B 23 0 1022 686 ;
+C 199 ; WX 826.44 ; N Ccedilla ; B 132 -189 877 703 ;
+C 200 ; WX 756.5 ; N Egrave ; B 14 0 754 899 ;
+C 201 ; WX 756.5 ; N Eacute ; B 14 0 754 899 ;
+C 202 ; WX 756.5 ; N Ecircumflex ; B 14 0 754 894 ;
+C 203 ; WX 756.5 ; N Edieresis ; B 14 0 754 894 ;
+C 204 ; WX 471.56 ; N Igrave ; B 7 0 537 899 ;
+C 205 ; WX 471.56 ; N Iacute ; B 7 0 551 899 ;
+C 206 ; WX 471.56 ; N Icircumflex ; B 7 0 537 894 ;
+C 207 ; WX 471.56 ; N Idieresis ; B 7 0 566 894 ;
+C 208 ; WX 875.33 ; N Eth ; B 14 0 834 686 ;
+C 209 ; WX 895.89 ; N Ntilde ; B 14 0 953 894 ;
+C 210 ; WX 854.78 ; N Ograve ; B 129 -17 834 899 ;
+C 211 ; WX 854.78 ; N Oacute ; B 129 -17 834 899 ;
+C 212 ; WX 854.78 ; N Ocircumflex ; B 129 -17 834 894 ;
+C 213 ; WX 854.78 ; N Otilde ; B 129 -17 834 894 ;
+C 214 ; WX 854.78 ; N Odieresis ; B 129 -17 834 894 ;
+C 215 ; WX 1140.28 ; N OE ; B 130 -17 1139 703 ;
+C 216 ; WX 885.33 ; N Oslash ; B 130 -69 863 755 ;
+C 217 ; WX 880.61 ; N Ugrave ; B 168 -17 938 899 ;
+C 218 ; WX 880.61 ; N Uacute ; B 168 -17 938 899 ;
+C 219 ; WX 880.61 ; N Ucircumflex ; B 168 -17 938 894 ;
+C 220 ; WX 880.61 ; N Udieresis ; B 168 -17 938 894 ;
+C 221 ; WX 865.33 ; N Yacute ; B 161 0 934 899 ;
+C 222 ; WX 728.17 ; N Thorn ; B 14 0 688 686 ;
+C 223 ; WX 1238.61 ; N Germandbls ; B 58 -17 1261 703 ;
+C 224 ; WX 591 ; N agrave ; B 73 -8 596 658 ;
+C 225 ; WX 591 ; N aacute ; B 73 -8 596 658 ;
+C 226 ; WX 591 ; N acircumflex ; B 73 -8 596 653 ;
+C 227 ; WX 591 ; N atilde ; B 73 -8 596 694 ;
+C 228 ; WX 591 ; N adieresis ; B 73 -8 596 652 ;
+C 229 ; WX 591 ; N aring ; B 73 -8 596 670 ;
+C 230 ; WX 826.44 ; N ae ; B 56 -8 797 452 ;
+C 231 ; WX 532.11 ; N ccedilla ; B 74 -189 505 452 ;
+C 232 ; WX 532.11 ; N egrave ; B 77 -8 505 658 ;
+C 233 ; WX 532.11 ; N eacute ; B 77 -8 505 658 ;
+C 234 ; WX 532.11 ; N ecircumflex ; B 77 -8 518 653 ;
+C 235 ; WX 532.11 ; N edieresis ; B 77 -8 555 652 ;
+C 236 ; WX 355.44 ; N igrave ; B 44 -8 360 658 ;
+C 237 ; WX 355.44 ; N iacute ; B 44 -8 451 658 ;
+C 238 ; WX 355.44 ; N icircumflex ; B 44 -8 387 653 ;
+C 239 ; WX 355.44 ; N idieresis ; B 44 -8 466 652 ;
+C 240 ; WX 591 ; N eth ; B 75 -8 582 694 ;
+C 241 ; WX 649.83 ; N ntilde ; B 44 -8 655 694 ;
+C 242 ; WX 591 ; N ograve ; B 75 -8 566 658 ;
+C 243 ; WX 591 ; N oacute ; B 75 -8 569 658 ;
+C 244 ; WX 591 ; N ocircumflex ; B 75 -8 566 653 ;
+C 245 ; WX 591 ; N otilde ; B 75 -8 609 694 ;
+C 246 ; WX 591 ; N odieresis ; B 75 -8 584 652 ;
+C 247 ; WX 826.44 ; N oe ; B 73 -14 797 458 ;
+C 248 ; WX 591 ; N oslash ; B 44 -116 596 561 ;
+C 249 ; WX 620.39 ; N ugrave ; B 44 -8 625 658 ;
+C 250 ; WX 620.39 ; N uacute ; B 44 -8 625 658 ;
+C 251 ; WX 620.39 ; N ucircumflex ; B 44 -8 625 653 ;
+C 252 ; WX 620.39 ; N udieresis ; B 44 -8 625 652 ;
+C 253 ; WX 561.56 ; N yacute ; B 44 -202 566 658 ;
+C 254 ; WX 591 ; N thorn ; B -24 -194 560 694 ;
+C 255 ; WX 664.83 ; N germandbls ; B -43 -202 660 702 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 2061
+KPX A C -29.44
+KPX A Cacute -29.44
+KPX A Ccaron -29.44
+KPX A G -29.44
+KPX A Gbreve -29.44
+KPX A O -29.44
+KPX A Oacute -29.44
+KPX A Ocircumflex -29.44
+KPX A Odieresis -29.44
+KPX A Ograve -29.44
+KPX A Ohungarumlaut -29.44
+KPX A Oslash -29.44
+KPX A Otilde -29.44
+KPX A Q -29.44
+KPX A T -88.31
+KPX A Tcaron -88.31
+KPX A Tcedilla -88.31
+KPX A U -29.44
+KPX A Uacute -29.44
+KPX A Ucircumflex -29.44
+KPX A Udieresis -29.44
+KPX A Ugrave -29.44
+KPX A Uhungarumlaut -29.44
+KPX A Uring -29.44
+KPX A V -117.75
+KPX A W -117.75
+KPX A Y -88.31
+KPX A Ydieresis -88.31
+KPX A a -58.87
+KPX A aacute -58.87
+KPX A acircumflex -58.87
+KPX A acircumflex -58.87
+KPX A adieresis -58.87
+KPX A ae -58.87
+KPX A agrave -58.87
+KPX A aogonek -58.87
+KPX A aring -58.87
+KPX A atilde -58.87
+KPX A b -29.44
+KPX A c -58.87
+KPX A cacute -58.87
+KPX A cacute -58.87
+KPX A ccaron -58.87
+KPX A ccedilla -58.87
+KPX A d -58.87
+KPX A dbar -58.87
+KPX A e -58.87
+KPX A eacute -58.87
+KPX A ecaron -58.87
+KPX A ecircumflex -58.87
+KPX A edieresis -58.87
+KPX A egrave -58.87
+KPX A eogonek -58.87
+KPX A g -58.87
+KPX A gbreve -58.87
+KPX A h -29.44
+KPX A i -29.44
+KPX A iacute -29.44
+KPX A k -29.44
+KPX A l -29.44
+KPX A lacute -29.44
+KPX A lquoteright -29.44
+KPX A m -29.44
+KPX A n -29.44
+KPX A o -58.87
+KPX A oacute -58.87
+KPX A ocircumflex -58.87
+KPX A odieresis -58.87
+KPX A oe -58.87
+KPX A ograve -58.87
+KPX A ohungarumlaut -58.87
+KPX A oslash -58.87
+KPX A otilde -58.87
+KPX A q -58.87
+KPX A r -29.44
+KPX A t -29.44
+KPX A tcedilla -29.44
+KPX A tquoteright -29.44
+KPX A u -29.44
+KPX A uacute -29.44
+KPX A ucircumflex -29.44
+KPX A udieresis -29.44
+KPX A ugrave -29.44
+KPX A uhungarumlaut -29.44
+KPX A uring -29.44
+KPX A v -29.44
+KPX A w -29.44
+KPX Aacute C -29.44
+KPX Aacute Cacute -29.44
+KPX Aacute Ccaron -29.44
+KPX Aacute G -29.44
+KPX Aacute Gbreve -29.44
+KPX Aacute O -29.44
+KPX Aacute Oacute -29.44
+KPX Aacute Ocircumflex -29.44
+KPX Aacute Odieresis -29.44
+KPX Aacute Ograve -29.44
+KPX Aacute Ohungarumlaut -29.44
+KPX Aacute Oslash -29.44
+KPX Aacute Otilde -29.44
+KPX Aacute Q -29.44
+KPX Aacute T -88.31
+KPX Aacute Tcaron -88.31
+KPX Aacute Tcedilla -88.31
+KPX Aacute U -29.44
+KPX Aacute Uacute -29.44
+KPX Aacute Ucircumflex -29.44
+KPX Aacute Udieresis -29.44
+KPX Aacute Ugrave -29.44
+KPX Aacute Uhungarumlaut -29.44
+KPX Aacute Uring -29.44
+KPX Aacute V -117.75
+KPX Aacute W -117.75
+KPX Aacute Y -88.31
+KPX Aacute Ydieresis -88.31
+KPX Aacute a -58.87
+KPX Aacute aacute -58.87
+KPX Aacute acircumflex -58.87
+KPX Aacute acircumflex -58.87
+KPX Aacute adieresis -58.87
+KPX Aacute ae -58.87
+KPX Aacute agrave -58.87
+KPX Aacute aogonek -58.87
+KPX Aacute aring -58.87
+KPX Aacute atilde -58.87
+KPX Aacute b -29.44
+KPX Aacute c -58.87
+KPX Aacute cacute -58.87
+KPX Aacute cacute -58.87
+KPX Aacute ccaron -58.87
+KPX Aacute ccedilla -58.87
+KPX Aacute d -58.87
+KPX Aacute dbar -58.87
+KPX Aacute e -58.87
+KPX Aacute eacute -58.87
+KPX Aacute ecaron -58.87
+KPX Aacute ecircumflex -58.87
+KPX Aacute edieresis -58.87
+KPX Aacute egrave -58.87
+KPX Aacute eogonek -58.87
+KPX Aacute g -58.87
+KPX Aacute gbreve -58.87
+KPX Aacute h -29.44
+KPX Aacute i -29.44
+KPX Aacute iacute -29.44
+KPX Aacute k -29.44
+KPX Aacute l -29.44
+KPX Aacute lacute -29.44
+KPX Aacute lquoteright -29.44
+KPX Aacute m -29.44
+KPX Aacute n -29.44
+KPX Aacute o -58.87
+KPX Aacute oacute -58.87
+KPX Aacute ocircumflex -58.87
+KPX Aacute odieresis -58.87
+KPX Aacute oe -58.87
+KPX Aacute ograve -58.87
+KPX Aacute ohungarumlaut -58.87
+KPX Aacute oslash -58.87
+KPX Aacute otilde -58.87
+KPX Aacute q -58.87
+KPX Aacute r -29.44
+KPX Aacute t -29.44
+KPX Aacute tcedilla -29.44
+KPX Aacute tquoteright -29.44
+KPX Aacute u -29.44
+KPX Aacute uacute -29.44
+KPX Aacute ucircumflex -29.44
+KPX Aacute udieresis -29.44
+KPX Aacute ugrave -29.44
+KPX Aacute uhungarumlaut -29.44
+KPX Aacute uring -29.44
+KPX Aacute v -29.44
+KPX Aacute w -29.44
+KPX Abreve C -29.44
+KPX Abreve Cacute -29.44
+KPX Abreve Ccaron -29.44
+KPX Abreve G -29.44
+KPX Abreve Gbreve -29.44
+KPX Abreve O -29.44
+KPX Abreve Oacute -29.44
+KPX Abreve Ocircumflex -29.44
+KPX Abreve Odieresis -29.44
+KPX Abreve Ograve -29.44
+KPX Abreve Ohungarumlaut -29.44
+KPX Abreve Oslash -29.44
+KPX Abreve Otilde -29.44
+KPX Abreve Q -29.44
+KPX Abreve T -88.31
+KPX Abreve Tcaron -88.31
+KPX Abreve Tcedilla -88.31
+KPX Abreve U -29.44
+KPX Abreve Uacute -29.44
+KPX Abreve Ucircumflex -29.44
+KPX Abreve Udieresis -29.44
+KPX Abreve Ugrave -29.44
+KPX Abreve Uhungarumlaut -29.44
+KPX Abreve Uring -29.44
+KPX Abreve V -117.75
+KPX Abreve W -117.75
+KPX Abreve Y -88.31
+KPX Abreve Ydieresis -88.31
+KPX Abreve a -58.87
+KPX Abreve aacute -58.87
+KPX Abreve acircumflex -58.87
+KPX Abreve acircumflex -58.87
+KPX Abreve adieresis -58.87
+KPX Abreve ae -58.87
+KPX Abreve agrave -58.87
+KPX Abreve aogonek -58.87
+KPX Abreve aring -58.87
+KPX Abreve atilde -58.87
+KPX Abreve b -29.44
+KPX Abreve c -58.87
+KPX Abreve cacute -58.87
+KPX Abreve cacute -58.87
+KPX Abreve ccaron -58.87
+KPX Abreve ccedilla -58.87
+KPX Abreve d -58.87
+KPX Abreve dbar -58.87
+KPX Abreve e -58.87
+KPX Abreve eacute -58.87
+KPX Abreve ecaron -58.87
+KPX Abreve ecircumflex -58.87
+KPX Abreve edieresis -58.87
+KPX Abreve egrave -58.87
+KPX Abreve eogonek -58.87
+KPX Abreve g -58.87
+KPX Abreve gbreve -58.87
+KPX Abreve h -29.44
+KPX Abreve i -29.44
+KPX Abreve iacute -29.44
+KPX Abreve k -29.44
+KPX Abreve l -29.44
+KPX Abreve lacute -29.44
+KPX Abreve lquoteright -29.44
+KPX Abreve m -29.44
+KPX Abreve n -29.44
+KPX Abreve o -58.87
+KPX Abreve oacute -58.87
+KPX Abreve ocircumflex -58.87
+KPX Abreve odieresis -58.87
+KPX Abreve oe -58.87
+KPX Abreve ograve -58.87
+KPX Abreve ohungarumlaut -58.87
+KPX Abreve oslash -58.87
+KPX Abreve otilde -58.87
+KPX Abreve q -58.87
+KPX Abreve r -29.44
+KPX Abreve t -29.44
+KPX Abreve tcedilla -29.44
+KPX Abreve tquoteright -29.44
+KPX Abreve u -29.44
+KPX Abreve uacute -29.44
+KPX Abreve ucircumflex -29.44
+KPX Abreve udieresis -29.44
+KPX Abreve ugrave -29.44
+KPX Abreve uhungarumlaut -29.44
+KPX Abreve uring -29.44
+KPX Abreve v -29.44
+KPX Abreve w -29.44
+KPX Acircumflex C -29.44
+KPX Acircumflex Cacute -29.44
+KPX Acircumflex Ccaron -29.44
+KPX Acircumflex G -29.44
+KPX Acircumflex Gbreve -29.44
+KPX Acircumflex O -29.44
+KPX Acircumflex Oacute -29.44
+KPX Acircumflex Ocircumflex -29.44
+KPX Acircumflex Odieresis -29.44
+KPX Acircumflex Ograve -29.44
+KPX Acircumflex Ohungarumlaut -29.44
+KPX Acircumflex Oslash -29.44
+KPX Acircumflex Otilde -29.44
+KPX Acircumflex Q -29.44
+KPX Acircumflex T -88.31
+KPX Acircumflex Tcaron -88.31
+KPX Acircumflex Tcedilla -88.31
+KPX Acircumflex U -29.44
+KPX Acircumflex Uacute -29.44
+KPX Acircumflex Ucircumflex -29.44
+KPX Acircumflex Udieresis -29.44
+KPX Acircumflex Ugrave -29.44
+KPX Acircumflex Uhungarumlaut -29.44
+KPX Acircumflex Uring -29.44
+KPX Acircumflex V -117.75
+KPX Acircumflex W -117.75
+KPX Acircumflex Y -88.31
+KPX Acircumflex Ydieresis -88.31
+KPX Acircumflex a -58.87
+KPX Acircumflex aacute -58.87
+KPX Acircumflex acircumflex -58.87
+KPX Acircumflex acircumflex -58.87
+KPX Acircumflex adieresis -58.87
+KPX Acircumflex ae -58.87
+KPX Acircumflex agrave -58.87
+KPX Acircumflex aogonek -58.87
+KPX Acircumflex aring -58.87
+KPX Acircumflex atilde -58.87
+KPX Acircumflex b -29.44
+KPX Acircumflex c -58.87
+KPX Acircumflex cacute -58.87
+KPX Acircumflex cacute -58.87
+KPX Acircumflex ccaron -58.87
+KPX Acircumflex ccedilla -58.87
+KPX Acircumflex d -58.87
+KPX Acircumflex dbar -58.87
+KPX Acircumflex e -58.87
+KPX Acircumflex eacute -58.87
+KPX Acircumflex ecaron -58.87
+KPX Acircumflex ecircumflex -58.87
+KPX Acircumflex edieresis -58.87
+KPX Acircumflex egrave -58.87
+KPX Acircumflex eogonek -58.87
+KPX Acircumflex g -58.87
+KPX Acircumflex gbreve -58.87
+KPX Acircumflex h -29.44
+KPX Acircumflex i -29.44
+KPX Acircumflex iacute -29.44
+KPX Acircumflex k -29.44
+KPX Acircumflex l -29.44
+KPX Acircumflex lacute -29.44
+KPX Acircumflex lquoteright -29.44
+KPX Acircumflex m -29.44
+KPX Acircumflex n -29.44
+KPX Acircumflex o -58.87
+KPX Acircumflex oacute -58.87
+KPX Acircumflex ocircumflex -58.87
+KPX Acircumflex odieresis -58.87
+KPX Acircumflex oe -58.87
+KPX Acircumflex ograve -58.87
+KPX Acircumflex ohungarumlaut -58.87
+KPX Acircumflex oslash -58.87
+KPX Acircumflex otilde -58.87
+KPX Acircumflex q -58.87
+KPX Acircumflex r -29.44
+KPX Acircumflex t -29.44
+KPX Acircumflex tcedilla -29.44
+KPX Acircumflex tquoteright -29.44
+KPX Acircumflex u -29.44
+KPX Acircumflex uacute -29.44
+KPX Acircumflex ucircumflex -29.44
+KPX Acircumflex udieresis -29.44
+KPX Acircumflex ugrave -29.44
+KPX Acircumflex uhungarumlaut -29.44
+KPX Acircumflex uring -29.44
+KPX Acircumflex v -29.44
+KPX Acircumflex w -29.44
+KPX Adieresis C -29.44
+KPX Adieresis Cacute -29.44
+KPX Adieresis Ccaron -29.44
+KPX Adieresis G -29.44
+KPX Adieresis Gbreve -29.44
+KPX Adieresis O -29.44
+KPX Adieresis Oacute -29.44
+KPX Adieresis Ocircumflex -29.44
+KPX Adieresis Odieresis -29.44
+KPX Adieresis Ograve -29.44
+KPX Adieresis Ohungarumlaut -29.44
+KPX Adieresis Oslash -29.44
+KPX Adieresis Otilde -29.44
+KPX Adieresis Q -29.44
+KPX Adieresis T -88.31
+KPX Adieresis Tcaron -88.31
+KPX Adieresis Tcedilla -88.31
+KPX Adieresis U -29.44
+KPX Adieresis Uacute -29.44
+KPX Adieresis Ucircumflex -29.44
+KPX Adieresis Udieresis -29.44
+KPX Adieresis Ugrave -29.44
+KPX Adieresis Uhungarumlaut -29.44
+KPX Adieresis Uring -29.44
+KPX Adieresis V -117.75
+KPX Adieresis W -117.75
+KPX Adieresis Y -88.31
+KPX Adieresis Ydieresis -88.31
+KPX Adieresis a -58.87
+KPX Adieresis aacute -58.87
+KPX Adieresis acircumflex -58.87
+KPX Adieresis acircumflex -58.87
+KPX Adieresis adieresis -58.87
+KPX Adieresis ae -58.87
+KPX Adieresis agrave -58.87
+KPX Adieresis aogonek -58.87
+KPX Adieresis aring -58.87
+KPX Adieresis atilde -58.87
+KPX Adieresis b -29.44
+KPX Adieresis c -58.87
+KPX Adieresis cacute -58.87
+KPX Adieresis cacute -58.87
+KPX Adieresis ccaron -58.87
+KPX Adieresis ccedilla -58.87
+KPX Adieresis d -58.87
+KPX Adieresis dbar -58.87
+KPX Adieresis e -58.87
+KPX Adieresis eacute -58.87
+KPX Adieresis ecaron -58.87
+KPX Adieresis ecircumflex -58.87
+KPX Adieresis edieresis -58.87
+KPX Adieresis egrave -58.87
+KPX Adieresis eogonek -58.87
+KPX Adieresis g -58.87
+KPX Adieresis gbreve -58.87
+KPX Adieresis h -29.44
+KPX Adieresis i -29.44
+KPX Adieresis iacute -29.44
+KPX Adieresis k -29.44
+KPX Adieresis l -29.44
+KPX Adieresis lacute -29.44
+KPX Adieresis lquoteright -29.44
+KPX Adieresis m -29.44
+KPX Adieresis n -29.44
+KPX Adieresis o -58.87
+KPX Adieresis oacute -58.87
+KPX Adieresis ocircumflex -58.87
+KPX Adieresis odieresis -58.87
+KPX Adieresis oe -58.87
+KPX Adieresis ograve -58.87
+KPX Adieresis ohungarumlaut -58.87
+KPX Adieresis oslash -58.87
+KPX Adieresis otilde -58.87
+KPX Adieresis q -58.87
+KPX Adieresis r -29.44
+KPX Adieresis t -29.44
+KPX Adieresis tcedilla -29.44
+KPX Adieresis tquoteright -29.44
+KPX Adieresis u -29.44
+KPX Adieresis uacute -29.44
+KPX Adieresis ucircumflex -29.44
+KPX Adieresis udieresis -29.44
+KPX Adieresis ugrave -29.44
+KPX Adieresis uhungarumlaut -29.44
+KPX Adieresis uring -29.44
+KPX Adieresis v -29.44
+KPX Adieresis w -29.44
+KPX Agrave C -29.44
+KPX Agrave Cacute -29.44
+KPX Agrave Ccaron -29.44
+KPX Agrave G -29.44
+KPX Agrave Gbreve -29.44
+KPX Agrave O -29.44
+KPX Agrave Oacute -29.44
+KPX Agrave Ocircumflex -29.44
+KPX Agrave Odieresis -29.44
+KPX Agrave Ograve -29.44
+KPX Agrave Ohungarumlaut -29.44
+KPX Agrave Oslash -29.44
+KPX Agrave Otilde -29.44
+KPX Agrave Q -29.44
+KPX Agrave T -88.31
+KPX Agrave Tcaron -88.31
+KPX Agrave Tcedilla -88.31
+KPX Agrave U -29.44
+KPX Agrave Uacute -29.44
+KPX Agrave Ucircumflex -29.44
+KPX Agrave Udieresis -29.44
+KPX Agrave Ugrave -29.44
+KPX Agrave Uhungarumlaut -29.44
+KPX Agrave Uring -29.44
+KPX Agrave V -117.75
+KPX Agrave W -117.75
+KPX Agrave Y -88.31
+KPX Agrave Ydieresis -88.31
+KPX Agrave a -58.87
+KPX Agrave aacute -58.87
+KPX Agrave acircumflex -58.87
+KPX Agrave acircumflex -58.87
+KPX Agrave adieresis -58.87
+KPX Agrave ae -58.87
+KPX Agrave agrave -58.87
+KPX Agrave aogonek -58.87
+KPX Agrave aring -58.87
+KPX Agrave atilde -58.87
+KPX Agrave b -29.44
+KPX Agrave c -58.87
+KPX Agrave cacute -58.87
+KPX Agrave cacute -58.87
+KPX Agrave ccaron -58.87
+KPX Agrave ccedilla -58.87
+KPX Agrave d -58.87
+KPX Agrave dbar -58.87
+KPX Agrave e -58.87
+KPX Agrave eacute -58.87
+KPX Agrave ecaron -58.87
+KPX Agrave ecircumflex -58.87
+KPX Agrave edieresis -58.87
+KPX Agrave egrave -58.87
+KPX Agrave eogonek -58.87
+KPX Agrave g -58.87
+KPX Agrave gbreve -58.87
+KPX Agrave h -29.44
+KPX Agrave i -29.44
+KPX Agrave iacute -29.44
+KPX Agrave k -29.44
+KPX Agrave l -29.44
+KPX Agrave lacute -29.44
+KPX Agrave lquoteright -29.44
+KPX Agrave m -29.44
+KPX Agrave n -29.44
+KPX Agrave o -58.87
+KPX Agrave oacute -58.87
+KPX Agrave ocircumflex -58.87
+KPX Agrave odieresis -58.87
+KPX Agrave oe -58.87
+KPX Agrave ograve -58.87
+KPX Agrave ohungarumlaut -58.87
+KPX Agrave oslash -58.87
+KPX Agrave otilde -58.87
+KPX Agrave q -58.87
+KPX Agrave r -29.44
+KPX Agrave t -29.44
+KPX Agrave tcedilla -29.44
+KPX Agrave tquoteright -29.44
+KPX Agrave u -29.44
+KPX Agrave uacute -29.44
+KPX Agrave ucircumflex -29.44
+KPX Agrave udieresis -29.44
+KPX Agrave ugrave -29.44
+KPX Agrave uhungarumlaut -29.44
+KPX Agrave uring -29.44
+KPX Agrave v -29.44
+KPX Agrave w -29.44
+KPX Aogonek C -29.44
+KPX Aogonek Cacute -29.44
+KPX Aogonek Ccaron -29.44
+KPX Aogonek G -29.44
+KPX Aogonek Gbreve -29.44
+KPX Aogonek O -29.44
+KPX Aogonek Oacute -29.44
+KPX Aogonek Ocircumflex -29.44
+KPX Aogonek Odieresis -29.44
+KPX Aogonek Ograve -29.44
+KPX Aogonek Ohungarumlaut -29.44
+KPX Aogonek Oslash -29.44
+KPX Aogonek Otilde -29.44
+KPX Aogonek Q -29.44
+KPX Aogonek T -88.31
+KPX Aogonek Tcaron -88.31
+KPX Aogonek Tcedilla -88.31
+KPX Aogonek U -29.44
+KPX Aogonek Uacute -29.44
+KPX Aogonek Ucircumflex -29.44
+KPX Aogonek Udieresis -29.44
+KPX Aogonek Ugrave -29.44
+KPX Aogonek Uhungarumlaut -29.44
+KPX Aogonek Uring -29.44
+KPX Aogonek V -117.75
+KPX Aogonek W -117.75
+KPX Aogonek Y -88.31
+KPX Aogonek Ydieresis -88.31
+KPX Aogonek a -58.87
+KPX Aogonek aacute -58.87
+KPX Aogonek acircumflex -58.87
+KPX Aogonek acircumflex -58.87
+KPX Aogonek adieresis -58.87
+KPX Aogonek ae -58.87
+KPX Aogonek agrave -58.87
+KPX Aogonek aogonek -58.87
+KPX Aogonek aring -58.87
+KPX Aogonek atilde -58.87
+KPX Aogonek b -29.44
+KPX Aogonek c -58.87
+KPX Aogonek cacute -58.87
+KPX Aogonek cacute -58.87
+KPX Aogonek ccaron -58.87
+KPX Aogonek ccedilla -58.87
+KPX Aogonek d -58.87
+KPX Aogonek dbar -58.87
+KPX Aogonek e -58.87
+KPX Aogonek eacute -58.87
+KPX Aogonek ecaron -58.87
+KPX Aogonek ecircumflex -58.87
+KPX Aogonek edieresis -58.87
+KPX Aogonek egrave -58.87
+KPX Aogonek eogonek -58.87
+KPX Aogonek g -58.87
+KPX Aogonek gbreve -58.87
+KPX Aogonek h -29.44
+KPX Aogonek i -29.44
+KPX Aogonek iacute -29.44
+KPX Aogonek k -29.44
+KPX Aogonek l -29.44
+KPX Aogonek lacute -29.44
+KPX Aogonek lquoteright -29.44
+KPX Aogonek m -29.44
+KPX Aogonek n -29.44
+KPX Aogonek o -58.87
+KPX Aogonek oacute -58.87
+KPX Aogonek ocircumflex -58.87
+KPX Aogonek odieresis -58.87
+KPX Aogonek oe -58.87
+KPX Aogonek ograve -58.87
+KPX Aogonek ohungarumlaut -58.87
+KPX Aogonek oslash -58.87
+KPX Aogonek otilde -58.87
+KPX Aogonek q -58.87
+KPX Aogonek r -29.44
+KPX Aogonek t -29.44
+KPX Aogonek tcedilla -29.44
+KPX Aogonek tquoteright -29.44
+KPX Aogonek u -29.44
+KPX Aogonek uacute -29.44
+KPX Aogonek ucircumflex -29.44
+KPX Aogonek udieresis -29.44
+KPX Aogonek ugrave -29.44
+KPX Aogonek uhungarumlaut -29.44
+KPX Aogonek uring -29.44
+KPX Aogonek v -29.44
+KPX Aogonek w -29.44
+KPX Aring C -29.44
+KPX Aring Cacute -29.44
+KPX Aring Ccaron -29.44
+KPX Aring G -29.44
+KPX Aring Gbreve -29.44
+KPX Aring O -29.44
+KPX Aring Oacute -29.44
+KPX Aring Ocircumflex -29.44
+KPX Aring Odieresis -29.44
+KPX Aring Ograve -29.44
+KPX Aring Ohungarumlaut -29.44
+KPX Aring Oslash -29.44
+KPX Aring Otilde -29.44
+KPX Aring Q -29.44
+KPX Aring T -88.31
+KPX Aring Tcaron -88.31
+KPX Aring Tcedilla -88.31
+KPX Aring U -29.44
+KPX Aring Uacute -29.44
+KPX Aring Ucircumflex -29.44
+KPX Aring Udieresis -29.44
+KPX Aring Ugrave -29.44
+KPX Aring Uhungarumlaut -29.44
+KPX Aring Uring -29.44
+KPX Aring V -117.75
+KPX Aring W -117.75
+KPX Aring Y -88.31
+KPX Aring Ydieresis -88.31
+KPX Aring a -58.87
+KPX Aring aacute -58.87
+KPX Aring acircumflex -58.87
+KPX Aring acircumflex -58.87
+KPX Aring adieresis -58.87
+KPX Aring ae -58.87
+KPX Aring agrave -58.87
+KPX Aring aogonek -58.87
+KPX Aring aring -58.87
+KPX Aring atilde -58.87
+KPX Aring b -29.44
+KPX Aring c -58.87
+KPX Aring cacute -58.87
+KPX Aring cacute -58.87
+KPX Aring ccaron -58.87
+KPX Aring ccedilla -58.87
+KPX Aring d -58.87
+KPX Aring dbar -58.87
+KPX Aring e -58.87
+KPX Aring eacute -58.87
+KPX Aring ecaron -58.87
+KPX Aring ecircumflex -58.87
+KPX Aring edieresis -58.87
+KPX Aring egrave -58.87
+KPX Aring eogonek -58.87
+KPX Aring g -58.87
+KPX Aring gbreve -58.87
+KPX Aring h -29.44
+KPX Aring i -29.44
+KPX Aring iacute -29.44
+KPX Aring k -29.44
+KPX Aring l -29.44
+KPX Aring lacute -29.44
+KPX Aring lquoteright -29.44
+KPX Aring m -29.44
+KPX Aring n -29.44
+KPX Aring o -58.87
+KPX Aring oacute -58.87
+KPX Aring ocircumflex -58.87
+KPX Aring odieresis -58.87
+KPX Aring oe -58.87
+KPX Aring ograve -58.87
+KPX Aring ohungarumlaut -58.87
+KPX Aring oslash -58.87
+KPX Aring otilde -58.87
+KPX Aring q -58.87
+KPX Aring r -29.44
+KPX Aring t -29.44
+KPX Aring tcedilla -29.44
+KPX Aring tquoteright -29.44
+KPX Aring u -29.44
+KPX Aring uacute -29.44
+KPX Aring ucircumflex -29.44
+KPX Aring udieresis -29.44
+KPX Aring ugrave -29.44
+KPX Aring uhungarumlaut -29.44
+KPX Aring uring -29.44
+KPX Aring v -29.44
+KPX Aring w -29.44
+KPX Atilde C -29.44
+KPX Atilde Cacute -29.44
+KPX Atilde Ccaron -29.44
+KPX Atilde G -29.44
+KPX Atilde Gbreve -29.44
+KPX Atilde O -29.44
+KPX Atilde Oacute -29.44
+KPX Atilde Ocircumflex -29.44
+KPX Atilde Odieresis -29.44
+KPX Atilde Ograve -29.44
+KPX Atilde Ohungarumlaut -29.44
+KPX Atilde Oslash -29.44
+KPX Atilde Otilde -29.44
+KPX Atilde Q -29.44
+KPX Atilde T -88.31
+KPX Atilde Tcaron -88.31
+KPX Atilde Tcedilla -88.31
+KPX Atilde U -29.44
+KPX Atilde Uacute -29.44
+KPX Atilde Ucircumflex -29.44
+KPX Atilde Udieresis -29.44
+KPX Atilde Ugrave -29.44
+KPX Atilde Uhungarumlaut -29.44
+KPX Atilde Uring -29.44
+KPX Atilde V -117.75
+KPX Atilde W -117.75
+KPX Atilde Y -88.31
+KPX Atilde Ydieresis -88.31
+KPX Atilde a -58.87
+KPX Atilde aacute -58.87
+KPX Atilde acircumflex -58.87
+KPX Atilde acircumflex -58.87
+KPX Atilde adieresis -58.87
+KPX Atilde ae -58.87
+KPX Atilde agrave -58.87
+KPX Atilde aogonek -58.87
+KPX Atilde aring -58.87
+KPX Atilde atilde -58.87
+KPX Atilde b -29.44
+KPX Atilde c -58.87
+KPX Atilde cacute -58.87
+KPX Atilde cacute -58.87
+KPX Atilde ccaron -58.87
+KPX Atilde ccedilla -58.87
+KPX Atilde d -58.87
+KPX Atilde dbar -58.87
+KPX Atilde e -58.87
+KPX Atilde eacute -58.87
+KPX Atilde ecaron -58.87
+KPX Atilde ecircumflex -58.87
+KPX Atilde edieresis -58.87
+KPX Atilde egrave -58.87
+KPX Atilde eogonek -58.87
+KPX Atilde g -58.87
+KPX Atilde gbreve -58.87
+KPX Atilde h -29.44
+KPX Atilde i -29.44
+KPX Atilde iacute -29.44
+KPX Atilde k -29.44
+KPX Atilde l -29.44
+KPX Atilde lacute -29.44
+KPX Atilde lquoteright -29.44
+KPX Atilde m -29.44
+KPX Atilde n -29.44
+KPX Atilde o -58.87
+KPX Atilde oacute -58.87
+KPX Atilde ocircumflex -58.87
+KPX Atilde odieresis -58.87
+KPX Atilde oe -58.87
+KPX Atilde ograve -58.87
+KPX Atilde ohungarumlaut -58.87
+KPX Atilde oslash -58.87
+KPX Atilde otilde -58.87
+KPX Atilde q -58.87
+KPX Atilde r -29.44
+KPX Atilde t -29.44
+KPX Atilde tcedilla -29.44
+KPX Atilde tquoteright -29.44
+KPX Atilde u -29.44
+KPX Atilde uacute -29.44
+KPX Atilde ucircumflex -29.44
+KPX Atilde udieresis -29.44
+KPX Atilde ugrave -29.44
+KPX Atilde uhungarumlaut -29.44
+KPX Atilde uring -29.44
+KPX Atilde v -29.44
+KPX Atilde w -29.44
+KPX D A -29.44
+KPX D Aacute -29.44
+KPX D Abreve -29.44
+KPX D Acircumflex -29.44
+KPX D Adieresis -29.44
+KPX D Agrave -29.44
+KPX D Aogonek -29.44
+KPX D Aring -29.44
+KPX D Atilde -29.44
+KPX D V -29.44
+KPX D W -29.44
+KPX D X -29.44
+KPX D Y -29.44
+KPX D Yacute -29.44
+KPX Dcaron A -29.44
+KPX Dcaron Aacute -29.44
+KPX Dcaron Abreve -29.44
+KPX Dcaron Acircumflex -29.44
+KPX Dcaron Adieresis -29.44
+KPX Dcaron Agrave -29.44
+KPX Dcaron Aogonek -29.44
+KPX Dcaron Aring -29.44
+KPX Dcaron Atilde -29.44
+KPX Dcaron V -29.44
+KPX Dcaron W -29.44
+KPX Dcaron X -29.44
+KPX Dcaron Y -29.44
+KPX Dcaron Yacute -29.44
+KPX F A -117.75
+KPX F Aacute -117.75
+KPX F Abreve -117.75
+KPX F Acircumflex -117.75
+KPX F Adieresis -117.75
+KPX F Agrave -117.75
+KPX F Aogonek -117.75
+KPX F Aring -117.75
+KPX F Atilde -117.75
+KPX F C -29.44
+KPX F Cacute -29.44
+KPX F Ccaron -29.44
+KPX F G -29.44
+KPX F Gbreve -29.44
+KPX F O -29.44
+KPX F Oacute -29.44
+KPX F Ocircumflex -29.44
+KPX F Odieresis -29.44
+KPX F Ograve -29.44
+KPX F Ohungarumlaut -29.44
+KPX F Oslash -29.44
+KPX F Otilde -29.44
+KPX F Q -29.44
+KPX F a -88.31
+KPX F aogonek -88.31
+KPX F e -88.31
+KPX F eogonek -88.31
+KPX F o -88.31
+KPX F r -88.31
+KPX F u -88.31
+KPX K C -29.44
+KPX K Cacute -29.44
+KPX K Ccaron -29.44
+KPX K G -29.44
+KPX K Gbreve -29.44
+KPX K O -29.44
+KPX K Oacute -29.44
+KPX K Ocircumflex -29.44
+KPX K Odieresis -29.44
+KPX K Ograve -29.44
+KPX K Ohungarumlaut -29.44
+KPX K Oslash -29.44
+KPX K Otilde -29.44
+KPX K Q -29.44
+KPX L T -88.31
+KPX L Tcaron -88.31
+KPX L Tcedilla -88.31
+KPX L V -117.75
+KPX L W -117.75
+KPX L Y -88.31
+KPX L Ydieresis -88.31
+KPX L a -58.87
+KPX L aacute -58.87
+KPX L acircumflex -58.87
+KPX L acircumflex -58.87
+KPX L adieresis -58.87
+KPX L ae -58.87
+KPX L agrave -58.87
+KPX L aogonek -58.87
+KPX L aring -58.87
+KPX L atilde -58.87
+KPX L c -58.87
+KPX L cacute -58.87
+KPX L cacute -58.87
+KPX L ccaron -58.87
+KPX L ccedilla -58.87
+KPX L d -58.87
+KPX L dbar -58.87
+KPX L e -58.87
+KPX L eacute -58.87
+KPX L ecaron -58.87
+KPX L ecircumflex -58.87
+KPX L edieresis -58.87
+KPX L egrave -58.87
+KPX L eogonek -58.87
+KPX L g -58.87
+KPX L gbreve -58.87
+KPX L o -58.87
+KPX L oacute -58.87
+KPX L ocircumflex -58.87
+KPX L odieresis -58.87
+KPX L oe -58.87
+KPX L ograve -58.87
+KPX L ohungarumlaut -58.87
+KPX L oslash -58.87
+KPX L otilde -58.87
+KPX L q -58.87
+KPX O A -29.44
+KPX O Aacute -29.44
+KPX O Abreve -29.44
+KPX O Acircumflex -29.44
+KPX O Adieresis -29.44
+KPX O Agrave -29.44
+KPX O Aogonek -29.44
+KPX O Aring -29.44
+KPX O Atilde -29.44
+KPX O V -29.44
+KPX O W -29.44
+KPX O X -29.44
+KPX O Y -29.44
+KPX O Yacute -29.44
+KPX Oacute A -29.44
+KPX Oacute Aacute -29.44
+KPX Oacute Abreve -29.44
+KPX Oacute Acircumflex -29.44
+KPX Oacute Adieresis -29.44
+KPX Oacute Agrave -29.44
+KPX Oacute Aogonek -29.44
+KPX Oacute Aring -29.44
+KPX Oacute Atilde -29.44
+KPX Oacute V -29.44
+KPX Oacute W -29.44
+KPX Oacute X -29.44
+KPX Oacute Y -29.44
+KPX Oacute Yacute -29.44
+KPX Ocircumflex A -29.44
+KPX Ocircumflex Aacute -29.44
+KPX Ocircumflex Abreve -29.44
+KPX Ocircumflex Acircumflex -29.44
+KPX Ocircumflex Adieresis -29.44
+KPX Ocircumflex Agrave -29.44
+KPX Ocircumflex Aogonek -29.44
+KPX Ocircumflex Aring -29.44
+KPX Ocircumflex Atilde -29.44
+KPX Ocircumflex V -29.44
+KPX Ocircumflex W -29.44
+KPX Ocircumflex X -29.44
+KPX Ocircumflex Y -29.44
+KPX Ocircumflex Yacute -29.44
+KPX Odieresis A -29.44
+KPX Odieresis Aacute -29.44
+KPX Odieresis Abreve -29.44
+KPX Odieresis Acircumflex -29.44
+KPX Odieresis Adieresis -29.44
+KPX Odieresis Agrave -29.44
+KPX Odieresis Aogonek -29.44
+KPX Odieresis Aring -29.44
+KPX Odieresis Atilde -29.44
+KPX Odieresis V -29.44
+KPX Odieresis W -29.44
+KPX Odieresis X -29.44
+KPX Odieresis Y -29.44
+KPX Odieresis Yacute -29.44
+KPX Ograve A -29.44
+KPX Ograve Aacute -29.44
+KPX Ograve Abreve -29.44
+KPX Ograve Acircumflex -29.44
+KPX Ograve Adieresis -29.44
+KPX Ograve Agrave -29.44
+KPX Ograve Aogonek -29.44
+KPX Ograve Aring -29.44
+KPX Ograve Atilde -29.44
+KPX Ograve V -29.44
+KPX Ograve W -29.44
+KPX Ograve X -29.44
+KPX Ograve Y -29.44
+KPX Ograve Yacute -29.44
+KPX Ohungarumlaut A -29.44
+KPX Ohungarumlaut Aacute -29.44
+KPX Ohungarumlaut Abreve -29.44
+KPX Ohungarumlaut Acircumflex -29.44
+KPX Ohungarumlaut Adieresis -29.44
+KPX Ohungarumlaut Agrave -29.44
+KPX Ohungarumlaut Aogonek -29.44
+KPX Ohungarumlaut Aring -29.44
+KPX Ohungarumlaut Atilde -29.44
+KPX Ohungarumlaut V -29.44
+KPX Ohungarumlaut W -29.44
+KPX Ohungarumlaut X -29.44
+KPX Ohungarumlaut Y -29.44
+KPX Ohungarumlaut Yacute -29.44
+KPX Oslash A -29.44
+KPX Oslash Aacute -29.44
+KPX Oslash Abreve -29.44
+KPX Oslash Acircumflex -29.44
+KPX Oslash Adieresis -29.44
+KPX Oslash Agrave -29.44
+KPX Oslash Aogonek -29.44
+KPX Oslash Aring -29.44
+KPX Oslash Atilde -29.44
+KPX Oslash V -29.44
+KPX Oslash W -29.44
+KPX Oslash X -29.44
+KPX Oslash Y -29.44
+KPX Oslash Yacute -29.44
+KPX Otilde A -29.44
+KPX Otilde Aacute -29.44
+KPX Otilde Abreve -29.44
+KPX Otilde Acircumflex -29.44
+KPX Otilde Adieresis -29.44
+KPX Otilde Agrave -29.44
+KPX Otilde Aogonek -29.44
+KPX Otilde Aring -29.44
+KPX Otilde Atilde -29.44
+KPX Otilde V -29.44
+KPX Otilde W -29.44
+KPX Otilde X -29.44
+KPX Otilde Y -29.44
+KPX Otilde Yacute -29.44
+KPX P A -88.31
+KPX P Aacute -88.31
+KPX P Abreve -88.31
+KPX P Acircumflex -88.31
+KPX P Adieresis -88.31
+KPX P Agrave -88.31
+KPX P Aogonek -88.31
+KPX P Aring -88.31
+KPX P Atilde -88.31
+KPX R C -29.44
+KPX R Cacute -29.44
+KPX R Ccaron -29.44
+KPX R G -29.44
+KPX R Gbreve -29.44
+KPX R O -29.44
+KPX R Oacute -29.44
+KPX R Ocircumflex -29.44
+KPX R Odieresis -29.44
+KPX R Ograve -29.44
+KPX R Ohungarumlaut -29.44
+KPX R Oslash -29.44
+KPX R Otilde -29.44
+KPX R Q -29.44
+KPX R T -88.31
+KPX R Tcaron -88.31
+KPX R Tcedilla -88.31
+KPX R U -29.44
+KPX R Uacute -29.44
+KPX R Ucircumflex -29.44
+KPX R Udieresis -29.44
+KPX R Ugrave -29.44
+KPX R Uhungarumlaut -29.44
+KPX R Uring -29.44
+KPX R V -117.75
+KPX R W -117.75
+KPX R Y -88.31
+KPX R Ydieresis -88.31
+KPX R a -58.87
+KPX R aacute -58.87
+KPX R acircumflex -58.87
+KPX R acircumflex -58.87
+KPX R adieresis -58.87
+KPX R ae -58.87
+KPX R agrave -58.87
+KPX R aogonek -58.87
+KPX R aring -58.87
+KPX R atilde -58.87
+KPX R b -29.44
+KPX R c -58.87
+KPX R cacute -58.87
+KPX R cacute -58.87
+KPX R ccaron -58.87
+KPX R ccedilla -58.87
+KPX R d -58.87
+KPX R dbar -58.87
+KPX R e -58.87
+KPX R eacute -58.87
+KPX R ecaron -58.87
+KPX R ecircumflex -58.87
+KPX R edieresis -58.87
+KPX R egrave -58.87
+KPX R eogonek -58.87
+KPX R g -58.87
+KPX R gbreve -58.87
+KPX R h -29.44
+KPX R i -29.44
+KPX R iacute -29.44
+KPX R k -29.44
+KPX R l -29.44
+KPX R lacute -29.44
+KPX R lquoteright -29.44
+KPX R m -29.44
+KPX R n -29.44
+KPX R o -58.87
+KPX R oacute -58.87
+KPX R ocircumflex -58.87
+KPX R odieresis -58.87
+KPX R oe -58.87
+KPX R ograve -58.87
+KPX R ohungarumlaut -58.87
+KPX R oslash -58.87
+KPX R otilde -58.87
+KPX R q -58.87
+KPX R r -29.44
+KPX R t -29.44
+KPX R tcedilla -29.44
+KPX R tquoteright -29.44
+KPX R u -29.44
+KPX R uacute -29.44
+KPX R ucircumflex -29.44
+KPX R udieresis -29.44
+KPX R ugrave -29.44
+KPX R uhungarumlaut -29.44
+KPX R uring -29.44
+KPX R v -29.44
+KPX R w -29.44
+KPX Racute C -29.44
+KPX Racute Cacute -29.44
+KPX Racute Ccaron -29.44
+KPX Racute G -29.44
+KPX Racute Gbreve -29.44
+KPX Racute O -29.44
+KPX Racute Oacute -29.44
+KPX Racute Ocircumflex -29.44
+KPX Racute Odieresis -29.44
+KPX Racute Ograve -29.44
+KPX Racute Ohungarumlaut -29.44
+KPX Racute Oslash -29.44
+KPX Racute Otilde -29.44
+KPX Racute Q -29.44
+KPX Racute T -88.31
+KPX Racute Tcaron -88.31
+KPX Racute Tcedilla -88.31
+KPX Racute U -29.44
+KPX Racute Uacute -29.44
+KPX Racute Ucircumflex -29.44
+KPX Racute Udieresis -29.44
+KPX Racute Ugrave -29.44
+KPX Racute Uhungarumlaut -29.44
+KPX Racute Uring -29.44
+KPX Racute V -117.75
+KPX Racute W -117.75
+KPX Racute Y -88.31
+KPX Racute Ydieresis -88.31
+KPX Racute a -58.87
+KPX Racute aacute -58.87
+KPX Racute acircumflex -58.87
+KPX Racute acircumflex -58.87
+KPX Racute adieresis -58.87
+KPX Racute ae -58.87
+KPX Racute agrave -58.87
+KPX Racute aogonek -58.87
+KPX Racute aring -58.87
+KPX Racute atilde -58.87
+KPX Racute b -29.44
+KPX Racute c -58.87
+KPX Racute cacute -58.87
+KPX Racute cacute -58.87
+KPX Racute ccaron -58.87
+KPX Racute ccedilla -58.87
+KPX Racute d -58.87
+KPX Racute dbar -58.87
+KPX Racute e -58.87
+KPX Racute eacute -58.87
+KPX Racute ecaron -58.87
+KPX Racute ecircumflex -58.87
+KPX Racute edieresis -58.87
+KPX Racute egrave -58.87
+KPX Racute eogonek -58.87
+KPX Racute g -58.87
+KPX Racute gbreve -58.87
+KPX Racute h -29.44
+KPX Racute i -29.44
+KPX Racute iacute -29.44
+KPX Racute k -29.44
+KPX Racute l -29.44
+KPX Racute lacute -29.44
+KPX Racute lquoteright -29.44
+KPX Racute m -29.44
+KPX Racute n -29.44
+KPX Racute o -58.87
+KPX Racute oacute -58.87
+KPX Racute ocircumflex -58.87
+KPX Racute odieresis -58.87
+KPX Racute oe -58.87
+KPX Racute ograve -58.87
+KPX Racute ohungarumlaut -58.87
+KPX Racute oslash -58.87
+KPX Racute otilde -58.87
+KPX Racute q -58.87
+KPX Racute r -29.44
+KPX Racute t -29.44
+KPX Racute tcedilla -29.44
+KPX Racute tquoteright -29.44
+KPX Racute u -29.44
+KPX Racute uacute -29.44
+KPX Racute ucircumflex -29.44
+KPX Racute udieresis -29.44
+KPX Racute ugrave -29.44
+KPX Racute uhungarumlaut -29.44
+KPX Racute uring -29.44
+KPX Racute v -29.44
+KPX Racute w -29.44
+KPX T A -88.31
+KPX T Aacute -88.31
+KPX T Abreve -88.31
+KPX T Acircumflex -88.31
+KPX T Adieresis -88.31
+KPX T Agrave -88.31
+KPX T Aogonek -88.31
+KPX T Aring -88.31
+KPX T Atilde -88.31
+KPX T a -88.31
+KPX T e -88.31
+KPX T o -88.31
+KPX T r -88.31
+KPX T u -88.31
+KPX T y -88.31
+KPX Tcaron A -88.31
+KPX Tcaron Aacute -88.31
+KPX Tcaron Abreve -88.31
+KPX Tcaron Acircumflex -88.31
+KPX Tcaron Adieresis -88.31
+KPX Tcaron Agrave -88.31
+KPX Tcaron Aogonek -88.31
+KPX Tcaron Aring -88.31
+KPX Tcaron Atilde -88.31
+KPX Tcaron a -88.31
+KPX Tcaron e -88.31
+KPX Tcaron o -88.31
+KPX Tcaron r -88.31
+KPX Tcaron u -88.31
+KPX Tcaron y -88.31
+KPX Tcedilla A -88.31
+KPX Tcedilla Aacute -88.31
+KPX Tcedilla Abreve -88.31
+KPX Tcedilla Acircumflex -88.31
+KPX Tcedilla Adieresis -88.31
+KPX Tcedilla Agrave -88.31
+KPX Tcedilla Aogonek -88.31
+KPX Tcedilla Aring -88.31
+KPX Tcedilla Atilde -88.31
+KPX Tcedilla a -88.31
+KPX Tcedilla e -88.31
+KPX Tcedilla o -88.31
+KPX Tcedilla r -88.31
+KPX Tcedilla u -88.31
+KPX Tcedilla y -88.31
+KPX V A -117.75
+KPX V Aacute -117.75
+KPX V Abreve -117.75
+KPX V Acircumflex -117.75
+KPX V Adieresis -117.75
+KPX V Agrave -117.75
+KPX V Aogonek -117.75
+KPX V Aring -117.75
+KPX V Atilde -117.75
+KPX V C -29.44
+KPX V Cacute -29.44
+KPX V Ccaron -29.44
+KPX V G -29.44
+KPX V Gbreve -29.44
+KPX V O -29.44
+KPX V Oacute -29.44
+KPX V Ocircumflex -29.44
+KPX V Odieresis -29.44
+KPX V Ograve -29.44
+KPX V Ohungarumlaut -29.44
+KPX V Oslash -29.44
+KPX V Otilde -29.44
+KPX V Q -29.44
+KPX V a -88.31
+KPX V aogonek -88.31
+KPX V e -88.31
+KPX V eogonek -88.31
+KPX V o -88.31
+KPX V r -88.31
+KPX V u -88.31
+KPX W A -88.31
+KPX W Aacute -88.31
+KPX W Abreve -88.31
+KPX W Acircumflex -88.31
+KPX W Adieresis -88.31
+KPX W Agrave -88.31
+KPX W Aogonek -88.31
+KPX W Aring -88.31
+KPX W Atilde -88.31
+KPX X C -29.44
+KPX X Cacute -29.44
+KPX X Ccaron -29.44
+KPX X G -29.44
+KPX X Gbreve -29.44
+KPX X O -29.44
+KPX X Oacute -29.44
+KPX X Ocircumflex -29.44
+KPX X Odieresis -29.44
+KPX X Ograve -29.44
+KPX X Ohungarumlaut -29.44
+KPX X Oslash -29.44
+KPX X Otilde -29.44
+KPX X Q -29.44
+KPX Y A -88.31
+KPX Y Aacute -88.31
+KPX Y Abreve -88.31
+KPX Y Acircumflex -88.31
+KPX Y Adieresis -88.31
+KPX Y Agrave -88.31
+KPX Y Aogonek -88.31
+KPX Y Aring -88.31
+KPX Y Atilde -88.31
+KPX Y a -88.31
+KPX Y e -88.31
+KPX Y o -88.31
+KPX Y r -88.31
+KPX Y u -88.31
+KPX Yacute A -88.31
+KPX Yacute Aacute -88.31
+KPX Yacute Abreve -88.31
+KPX Yacute Acircumflex -88.31
+KPX Yacute Adieresis -88.31
+KPX Yacute Agrave -88.31
+KPX Yacute Aogonek -88.31
+KPX Yacute Aring -88.31
+KPX Yacute Atilde -88.31
+KPX Yacute a -88.31
+KPX Yacute e -88.31
+KPX Yacute o -88.31
+KPX Yacute r -88.31
+KPX Yacute u -88.31
+KPX b a -58.87
+KPX b aacute -58.87
+KPX b acircumflex -58.87
+KPX b acircumflex -58.87
+KPX b adieresis -58.87
+KPX b ae -58.87
+KPX b agrave -58.87
+KPX b aogonek -58.87
+KPX b aring -58.87
+KPX b atilde -58.87
+KPX b c -58.87
+KPX b cacute -58.87
+KPX b cacute -58.87
+KPX b ccaron -58.87
+KPX b ccedilla -58.87
+KPX b d -58.87
+KPX b dbar -58.87
+KPX b e -58.87
+KPX b eacute -58.87
+KPX b ecaron -58.87
+KPX b ecircumflex -58.87
+KPX b edieresis -58.87
+KPX b egrave -58.87
+KPX b eogonek -58.87
+KPX b g -58.87
+KPX b gbreve -58.87
+KPX b o -58.87
+KPX b oacute -58.87
+KPX b ocircumflex -58.87
+KPX b odieresis -58.87
+KPX b oe -58.87
+KPX b ograve -58.87
+KPX b ohungarumlaut -58.87
+KPX b oslash -58.87
+KPX b otilde -58.87
+KPX b q -58.87
+KPX c a -58.87
+KPX c aacute -58.87
+KPX c acircumflex -58.87
+KPX c acircumflex -58.87
+KPX c adieresis -58.87
+KPX c ae -58.87
+KPX c agrave -58.87
+KPX c aogonek -58.87
+KPX c aring -58.87
+KPX c atilde -58.87
+KPX c c -58.87
+KPX c cacute -58.87
+KPX c cacute -58.87
+KPX c ccaron -58.87
+KPX c ccedilla -58.87
+KPX c d -58.87
+KPX c dbar -58.87
+KPX c e -58.87
+KPX c eacute -58.87
+KPX c ecaron -58.87
+KPX c ecircumflex -58.87
+KPX c edieresis -58.87
+KPX c egrave -58.87
+KPX c eogonek -58.87
+KPX c g -58.87
+KPX c gbreve -58.87
+KPX c o -58.87
+KPX c oacute -58.87
+KPX c ocircumflex -58.87
+KPX c odieresis -58.87
+KPX c oe -58.87
+KPX c ograve -58.87
+KPX c ohungarumlaut -58.87
+KPX c oslash -58.87
+KPX c otilde -58.87
+KPX c q -58.87
+KPX cacute a -58.87
+KPX cacute aacute -58.87
+KPX cacute acircumflex -58.87
+KPX cacute acircumflex -58.87
+KPX cacute adieresis -58.87
+KPX cacute ae -58.87
+KPX cacute agrave -58.87
+KPX cacute aogonek -58.87
+KPX cacute aring -58.87
+KPX cacute atilde -58.87
+KPX cacute c -58.87
+KPX cacute cacute -58.87
+KPX cacute cacute -58.87
+KPX cacute ccaron -58.87
+KPX cacute ccedilla -58.87
+KPX cacute d -58.87
+KPX cacute dbar -58.87
+KPX cacute e -58.87
+KPX cacute eacute -58.87
+KPX cacute ecaron -58.87
+KPX cacute ecircumflex -58.87
+KPX cacute edieresis -58.87
+KPX cacute egrave -58.87
+KPX cacute eogonek -58.87
+KPX cacute g -58.87
+KPX cacute gbreve -58.87
+KPX cacute o -58.87
+KPX cacute oacute -58.87
+KPX cacute ocircumflex -58.87
+KPX cacute odieresis -58.87
+KPX cacute oe -58.87
+KPX cacute ograve -58.87
+KPX cacute ohungarumlaut -58.87
+KPX cacute oslash -58.87
+KPX cacute otilde -58.87
+KPX cacute q -58.87
+KPX ccaron a -58.87
+KPX ccaron aacute -58.87
+KPX ccaron acircumflex -58.87
+KPX ccaron acircumflex -58.87
+KPX ccaron adieresis -58.87
+KPX ccaron ae -58.87
+KPX ccaron agrave -58.87
+KPX ccaron aogonek -58.87
+KPX ccaron aring -58.87
+KPX ccaron atilde -58.87
+KPX ccaron c -58.87
+KPX ccaron cacute -58.87
+KPX ccaron cacute -58.87
+KPX ccaron ccaron -58.87
+KPX ccaron ccedilla -58.87
+KPX ccaron d -58.87
+KPX ccaron dbar -58.87
+KPX ccaron e -58.87
+KPX ccaron eacute -58.87
+KPX ccaron ecaron -58.87
+KPX ccaron ecircumflex -58.87
+KPX ccaron edieresis -58.87
+KPX ccaron egrave -58.87
+KPX ccaron eogonek -58.87
+KPX ccaron g -58.87
+KPX ccaron gbreve -58.87
+KPX ccaron o -58.87
+KPX ccaron oacute -58.87
+KPX ccaron ocircumflex -58.87
+KPX ccaron odieresis -58.87
+KPX ccaron oe -58.87
+KPX ccaron ograve -58.87
+KPX ccaron ohungarumlaut -58.87
+KPX ccaron oslash -58.87
+KPX ccaron otilde -58.87
+KPX ccaron q -58.87
+KPX d l 58.87
+KPX d lacute 58.87
+KPX d lquoteright 58.87
+KPX e a -58.87
+KPX e aacute -58.87
+KPX e acircumflex -58.87
+KPX e acircumflex -58.87
+KPX e adieresis -58.87
+KPX e ae -58.87
+KPX e agrave -58.87
+KPX e aogonek -58.87
+KPX e aring -58.87
+KPX e atilde -58.87
+KPX e c -58.87
+KPX e cacute -58.87
+KPX e cacute -58.87
+KPX e ccaron -58.87
+KPX e ccedilla -58.87
+KPX e d -58.87
+KPX e dbar -58.87
+KPX e e -58.87
+KPX e eacute -58.87
+KPX e ecaron -58.87
+KPX e ecircumflex -58.87
+KPX e edieresis -58.87
+KPX e egrave -58.87
+KPX e eogonek -58.87
+KPX e g -58.87
+KPX e gbreve -58.87
+KPX e o -58.87
+KPX e oacute -58.87
+KPX e ocircumflex -58.87
+KPX e odieresis -58.87
+KPX e oe -58.87
+KPX e ograve -58.87
+KPX e ohungarumlaut -58.87
+KPX e oslash -58.87
+KPX e otilde -58.87
+KPX e q -58.87
+KPX eacute a -58.87
+KPX eacute aacute -58.87
+KPX eacute acircumflex -58.87
+KPX eacute acircumflex -58.87
+KPX eacute adieresis -58.87
+KPX eacute ae -58.87
+KPX eacute agrave -58.87
+KPX eacute aogonek -58.87
+KPX eacute aring -58.87
+KPX eacute atilde -58.87
+KPX eacute c -58.87
+KPX eacute cacute -58.87
+KPX eacute cacute -58.87
+KPX eacute ccaron -58.87
+KPX eacute ccedilla -58.87
+KPX eacute d -58.87
+KPX eacute dbar -58.87
+KPX eacute e -58.87
+KPX eacute eacute -58.87
+KPX eacute ecaron -58.87
+KPX eacute ecircumflex -58.87
+KPX eacute edieresis -58.87
+KPX eacute egrave -58.87
+KPX eacute eogonek -58.87
+KPX eacute g -58.87
+KPX eacute gbreve -58.87
+KPX eacute o -58.87
+KPX eacute oacute -58.87
+KPX eacute ocircumflex -58.87
+KPX eacute odieresis -58.87
+KPX eacute oe -58.87
+KPX eacute ograve -58.87
+KPX eacute ohungarumlaut -58.87
+KPX eacute oslash -58.87
+KPX eacute otilde -58.87
+KPX eacute q -58.87
+KPX ecaron a -58.87
+KPX ecaron aacute -58.87
+KPX ecaron acircumflex -58.87
+KPX ecaron acircumflex -58.87
+KPX ecaron adieresis -58.87
+KPX ecaron ae -58.87
+KPX ecaron agrave -58.87
+KPX ecaron aogonek -58.87
+KPX ecaron aring -58.87
+KPX ecaron atilde -58.87
+KPX ecaron c -58.87
+KPX ecaron cacute -58.87
+KPX ecaron cacute -58.87
+KPX ecaron ccaron -58.87
+KPX ecaron ccedilla -58.87
+KPX ecaron d -58.87
+KPX ecaron dbar -58.87
+KPX ecaron e -58.87
+KPX ecaron eacute -58.87
+KPX ecaron ecaron -58.87
+KPX ecaron ecircumflex -58.87
+KPX ecaron edieresis -58.87
+KPX ecaron egrave -58.87
+KPX ecaron eogonek -58.87
+KPX ecaron g -58.87
+KPX ecaron gbreve -58.87
+KPX ecaron o -58.87
+KPX ecaron oacute -58.87
+KPX ecaron ocircumflex -58.87
+KPX ecaron odieresis -58.87
+KPX ecaron oe -58.87
+KPX ecaron ograve -58.87
+KPX ecaron ohungarumlaut -58.87
+KPX ecaron oslash -58.87
+KPX ecaron otilde -58.87
+KPX ecaron q -58.87
+KPX ecircumflex a -58.87
+KPX ecircumflex aacute -58.87
+KPX ecircumflex acircumflex -58.87
+KPX ecircumflex acircumflex -58.87
+KPX ecircumflex adieresis -58.87
+KPX ecircumflex ae -58.87
+KPX ecircumflex agrave -58.87
+KPX ecircumflex aogonek -58.87
+KPX ecircumflex aring -58.87
+KPX ecircumflex atilde -58.87
+KPX ecircumflex c -58.87
+KPX ecircumflex cacute -58.87
+KPX ecircumflex cacute -58.87
+KPX ecircumflex ccaron -58.87
+KPX ecircumflex ccedilla -58.87
+KPX ecircumflex d -58.87
+KPX ecircumflex dbar -58.87
+KPX ecircumflex e -58.87
+KPX ecircumflex eacute -58.87
+KPX ecircumflex ecaron -58.87
+KPX ecircumflex ecircumflex -58.87
+KPX ecircumflex edieresis -58.87
+KPX ecircumflex egrave -58.87
+KPX ecircumflex eogonek -58.87
+KPX ecircumflex g -58.87
+KPX ecircumflex gbreve -58.87
+KPX ecircumflex o -58.87
+KPX ecircumflex oacute -58.87
+KPX ecircumflex ocircumflex -58.87
+KPX ecircumflex odieresis -58.87
+KPX ecircumflex oe -58.87
+KPX ecircumflex ograve -58.87
+KPX ecircumflex ohungarumlaut -58.87
+KPX ecircumflex oslash -58.87
+KPX ecircumflex otilde -58.87
+KPX ecircumflex q -58.87
+KPX edieresis a -58.87
+KPX edieresis aacute -58.87
+KPX edieresis acircumflex -58.87
+KPX edieresis acircumflex -58.87
+KPX edieresis adieresis -58.87
+KPX edieresis ae -58.87
+KPX edieresis agrave -58.87
+KPX edieresis aogonek -58.87
+KPX edieresis aring -58.87
+KPX edieresis atilde -58.87
+KPX edieresis c -58.87
+KPX edieresis cacute -58.87
+KPX edieresis cacute -58.87
+KPX edieresis ccaron -58.87
+KPX edieresis ccedilla -58.87
+KPX edieresis d -58.87
+KPX edieresis dbar -58.87
+KPX edieresis e -58.87
+KPX edieresis eacute -58.87
+KPX edieresis ecaron -58.87
+KPX edieresis ecircumflex -58.87
+KPX edieresis edieresis -58.87
+KPX edieresis egrave -58.87
+KPX edieresis eogonek -58.87
+KPX edieresis g -58.87
+KPX edieresis gbreve -58.87
+KPX edieresis o -58.87
+KPX edieresis oacute -58.87
+KPX edieresis ocircumflex -58.87
+KPX edieresis odieresis -58.87
+KPX edieresis oe -58.87
+KPX edieresis ograve -58.87
+KPX edieresis ohungarumlaut -58.87
+KPX edieresis oslash -58.87
+KPX edieresis otilde -58.87
+KPX edieresis q -58.87
+KPX egrave a -58.87
+KPX egrave aacute -58.87
+KPX egrave acircumflex -58.87
+KPX egrave acircumflex -58.87
+KPX egrave adieresis -58.87
+KPX egrave ae -58.87
+KPX egrave agrave -58.87
+KPX egrave aogonek -58.87
+KPX egrave aring -58.87
+KPX egrave atilde -58.87
+KPX egrave c -58.87
+KPX egrave cacute -58.87
+KPX egrave cacute -58.87
+KPX egrave ccaron -58.87
+KPX egrave ccedilla -58.87
+KPX egrave d -58.87
+KPX egrave dbar -58.87
+KPX egrave e -58.87
+KPX egrave eacute -58.87
+KPX egrave ecaron -58.87
+KPX egrave ecircumflex -58.87
+KPX egrave edieresis -58.87
+KPX egrave egrave -58.87
+KPX egrave eogonek -58.87
+KPX egrave g -58.87
+KPX egrave gbreve -58.87
+KPX egrave o -58.87
+KPX egrave oacute -58.87
+KPX egrave ocircumflex -58.87
+KPX egrave odieresis -58.87
+KPX egrave oe -58.87
+KPX egrave ograve -58.87
+KPX egrave ohungarumlaut -58.87
+KPX egrave oslash -58.87
+KPX egrave otilde -58.87
+KPX egrave q -58.87
+KPX eogonek a -58.87
+KPX eogonek aacute -58.87
+KPX eogonek acircumflex -58.87
+KPX eogonek acircumflex -58.87
+KPX eogonek adieresis -58.87
+KPX eogonek ae -58.87
+KPX eogonek agrave -58.87
+KPX eogonek aogonek -58.87
+KPX eogonek aring -58.87
+KPX eogonek atilde -58.87
+KPX eogonek c -58.87
+KPX eogonek cacute -58.87
+KPX eogonek cacute -58.87
+KPX eogonek ccaron -58.87
+KPX eogonek ccedilla -58.87
+KPX eogonek d -58.87
+KPX eogonek dbar -58.87
+KPX eogonek e -58.87
+KPX eogonek eacute -58.87
+KPX eogonek ecaron -58.87
+KPX eogonek ecircumflex -58.87
+KPX eogonek edieresis -58.87
+KPX eogonek egrave -58.87
+KPX eogonek eogonek -58.87
+KPX eogonek g -58.87
+KPX eogonek gbreve -58.87
+KPX eogonek o -58.87
+KPX eogonek oacute -58.87
+KPX eogonek ocircumflex -58.87
+KPX eogonek odieresis -58.87
+KPX eogonek oe -58.87
+KPX eogonek ograve -58.87
+KPX eogonek ohungarumlaut -58.87
+KPX eogonek oslash -58.87
+KPX eogonek otilde -58.87
+KPX eogonek q -58.87
+KPX f bracketright 106.64
+KPX f exclam 106.64
+KPX f parenright 106.64
+KPX f question 106.64
+KPX f quoteright 106.64
+KPX ff bracketright 106.64
+KPX ff exclam 106.64
+KPX ff parenright 106.64
+KPX ff question 106.64
+KPX ff quoteright 106.64
+KPX l l 58.87
+KPX l lacute 58.87
+KPX l lquoteright 58.87
+KPX n quoteright -117.75
+KPX o a -58.87
+KPX o aacute -58.87
+KPX o acircumflex -58.87
+KPX o acircumflex -58.87
+KPX o adieresis -58.87
+KPX o ae -58.87
+KPX o agrave -58.87
+KPX o aogonek -58.87
+KPX o aring -58.87
+KPX o atilde -58.87
+KPX o c -58.87
+KPX o cacute -58.87
+KPX o cacute -58.87
+KPX o ccaron -58.87
+KPX o ccedilla -58.87
+KPX o d -58.87
+KPX o dbar -58.87
+KPX o e -58.87
+KPX o eacute -58.87
+KPX o ecaron -58.87
+KPX o ecircumflex -58.87
+KPX o edieresis -58.87
+KPX o egrave -58.87
+KPX o eogonek -58.87
+KPX o g -58.87
+KPX o gbreve -58.87
+KPX o o -58.87
+KPX o oacute -58.87
+KPX o ocircumflex -58.87
+KPX o odieresis -58.87
+KPX o oe -58.87
+KPX o ograve -58.87
+KPX o ohungarumlaut -58.87
+KPX o oslash -58.87
+KPX o otilde -58.87
+KPX o q -58.87
+KPX oacute a -58.87
+KPX oacute aacute -58.87
+KPX oacute acircumflex -58.87
+KPX oacute acircumflex -58.87
+KPX oacute adieresis -58.87
+KPX oacute ae -58.87
+KPX oacute agrave -58.87
+KPX oacute aogonek -58.87
+KPX oacute aring -58.87
+KPX oacute atilde -58.87
+KPX oacute c -58.87
+KPX oacute cacute -58.87
+KPX oacute cacute -58.87
+KPX oacute ccaron -58.87
+KPX oacute ccedilla -58.87
+KPX oacute d -58.87
+KPX oacute dbar -58.87
+KPX oacute e -58.87
+KPX oacute eacute -58.87
+KPX oacute ecaron -58.87
+KPX oacute ecircumflex -58.87
+KPX oacute edieresis -58.87
+KPX oacute egrave -58.87
+KPX oacute eogonek -58.87
+KPX oacute g -58.87
+KPX oacute gbreve -58.87
+KPX oacute o -58.87
+KPX oacute oacute -58.87
+KPX oacute ocircumflex -58.87
+KPX oacute odieresis -58.87
+KPX oacute oe -58.87
+KPX oacute ograve -58.87
+KPX oacute ohungarumlaut -58.87
+KPX oacute oslash -58.87
+KPX oacute otilde -58.87
+KPX oacute q -58.87
+KPX ocircumflex a -58.87
+KPX ocircumflex aacute -58.87
+KPX ocircumflex acircumflex -58.87
+KPX ocircumflex acircumflex -58.87
+KPX ocircumflex adieresis -58.87
+KPX ocircumflex ae -58.87
+KPX ocircumflex agrave -58.87
+KPX ocircumflex aogonek -58.87
+KPX ocircumflex aring -58.87
+KPX ocircumflex atilde -58.87
+KPX ocircumflex c -58.87
+KPX ocircumflex cacute -58.87
+KPX ocircumflex cacute -58.87
+KPX ocircumflex ccaron -58.87
+KPX ocircumflex ccedilla -58.87
+KPX ocircumflex d -58.87
+KPX ocircumflex dbar -58.87
+KPX ocircumflex e -58.87
+KPX ocircumflex eacute -58.87
+KPX ocircumflex ecaron -58.87
+KPX ocircumflex ecircumflex -58.87
+KPX ocircumflex edieresis -58.87
+KPX ocircumflex egrave -58.87
+KPX ocircumflex eogonek -58.87
+KPX ocircumflex g -58.87
+KPX ocircumflex gbreve -58.87
+KPX ocircumflex o -58.87
+KPX ocircumflex oacute -58.87
+KPX ocircumflex ocircumflex -58.87
+KPX ocircumflex odieresis -58.87
+KPX ocircumflex oe -58.87
+KPX ocircumflex ograve -58.87
+KPX ocircumflex ohungarumlaut -58.87
+KPX ocircumflex oslash -58.87
+KPX ocircumflex otilde -58.87
+KPX ocircumflex q -58.87
+KPX odieresis a -58.87
+KPX odieresis aacute -58.87
+KPX odieresis acircumflex -58.87
+KPX odieresis acircumflex -58.87
+KPX odieresis adieresis -58.87
+KPX odieresis ae -58.87
+KPX odieresis agrave -58.87
+KPX odieresis aogonek -58.87
+KPX odieresis aring -58.87
+KPX odieresis atilde -58.87
+KPX odieresis c -58.87
+KPX odieresis cacute -58.87
+KPX odieresis cacute -58.87
+KPX odieresis ccaron -58.87
+KPX odieresis ccedilla -58.87
+KPX odieresis d -58.87
+KPX odieresis dbar -58.87
+KPX odieresis e -58.87
+KPX odieresis eacute -58.87
+KPX odieresis ecaron -58.87
+KPX odieresis ecircumflex -58.87
+KPX odieresis edieresis -58.87
+KPX odieresis egrave -58.87
+KPX odieresis eogonek -58.87
+KPX odieresis g -58.87
+KPX odieresis gbreve -58.87
+KPX odieresis o -58.87
+KPX odieresis oacute -58.87
+KPX odieresis ocircumflex -58.87
+KPX odieresis odieresis -58.87
+KPX odieresis oe -58.87
+KPX odieresis ograve -58.87
+KPX odieresis ohungarumlaut -58.87
+KPX odieresis oslash -58.87
+KPX odieresis otilde -58.87
+KPX odieresis q -58.87
+KPX ograve a -58.87
+KPX ograve aacute -58.87
+KPX ograve acircumflex -58.87
+KPX ograve acircumflex -58.87
+KPX ograve adieresis -58.87
+KPX ograve ae -58.87
+KPX ograve agrave -58.87
+KPX ograve aogonek -58.87
+KPX ograve aring -58.87
+KPX ograve atilde -58.87
+KPX ograve c -58.87
+KPX ograve cacute -58.87
+KPX ograve cacute -58.87
+KPX ograve ccaron -58.87
+KPX ograve ccedilla -58.87
+KPX ograve d -58.87
+KPX ograve dbar -58.87
+KPX ograve e -58.87
+KPX ograve eacute -58.87
+KPX ograve ecaron -58.87
+KPX ograve ecircumflex -58.87
+KPX ograve edieresis -58.87
+KPX ograve egrave -58.87
+KPX ograve eogonek -58.87
+KPX ograve g -58.87
+KPX ograve gbreve -58.87
+KPX ograve o -58.87
+KPX ograve oacute -58.87
+KPX ograve ocircumflex -58.87
+KPX ograve odieresis -58.87
+KPX ograve oe -58.87
+KPX ograve ograve -58.87
+KPX ograve ohungarumlaut -58.87
+KPX ograve oslash -58.87
+KPX ograve otilde -58.87
+KPX ograve q -58.87
+KPX otilde a -58.87
+KPX otilde aacute -58.87
+KPX otilde acircumflex -58.87
+KPX otilde acircumflex -58.87
+KPX otilde adieresis -58.87
+KPX otilde ae -58.87
+KPX otilde agrave -58.87
+KPX otilde aogonek -58.87
+KPX otilde aring -58.87
+KPX otilde atilde -58.87
+KPX otilde c -58.87
+KPX otilde cacute -58.87
+KPX otilde cacute -58.87
+KPX otilde ccaron -58.87
+KPX otilde ccedilla -58.87
+KPX otilde d -58.87
+KPX otilde dbar -58.87
+KPX otilde e -58.87
+KPX otilde eacute -58.87
+KPX otilde ecaron -58.87
+KPX otilde ecircumflex -58.87
+KPX otilde edieresis -58.87
+KPX otilde egrave -58.87
+KPX otilde eogonek -58.87
+KPX otilde g -58.87
+KPX otilde gbreve -58.87
+KPX otilde o -58.87
+KPX otilde oacute -58.87
+KPX otilde ocircumflex -58.87
+KPX otilde odieresis -58.87
+KPX otilde oe -58.87
+KPX otilde ograve -58.87
+KPX otilde ohungarumlaut -58.87
+KPX otilde oslash -58.87
+KPX otilde otilde -58.87
+KPX otilde q -58.87
+KPX p a -58.87
+KPX p aacute -58.87
+KPX p acircumflex -58.87
+KPX p acircumflex -58.87
+KPX p adieresis -58.87
+KPX p ae -58.87
+KPX p agrave -58.87
+KPX p aogonek -58.87
+KPX p aring -58.87
+KPX p atilde -58.87
+KPX p c -58.87
+KPX p cacute -58.87
+KPX p cacute -58.87
+KPX p ccaron -58.87
+KPX p ccedilla -58.87
+KPX p d -58.87
+KPX p dbar -58.87
+KPX p e -58.87
+KPX p eacute -58.87
+KPX p ecaron -58.87
+KPX p ecircumflex -58.87
+KPX p edieresis -58.87
+KPX p egrave -58.87
+KPX p eogonek -58.87
+KPX p g -58.87
+KPX p gbreve -58.87
+KPX p o -58.87
+KPX p oacute -58.87
+KPX p ocircumflex -58.87
+KPX p odieresis -58.87
+KPX p oe -58.87
+KPX p ograve -58.87
+KPX p ohungarumlaut -58.87
+KPX p oslash -58.87
+KPX p otilde -58.87
+KPX p q -58.87
+KPX quoteright exclam 117.75
+KPX quoteright question 117.75
+KPX r a -58.87
+KPX r aacute -58.87
+KPX r acircumflex -58.87
+KPX r acircumflex -58.87
+KPX r adieresis -58.87
+KPX r ae -58.87
+KPX r agrave -58.87
+KPX r aogonek -58.87
+KPX r aring -58.87
+KPX r atilde -58.87
+KPX r c -58.87
+KPX r cacute -58.87
+KPX r cacute -58.87
+KPX r ccaron -58.87
+KPX r ccedilla -58.87
+KPX r d -58.87
+KPX r dbar -58.87
+KPX r e -58.87
+KPX r eacute -58.87
+KPX r ecaron -58.87
+KPX r ecircumflex -58.87
+KPX r edieresis -58.87
+KPX r egrave -58.87
+KPX r eogonek -58.87
+KPX r g -58.87
+KPX r gbreve -58.87
+KPX r o -58.87
+KPX r oacute -58.87
+KPX r ocircumflex -58.87
+KPX r odieresis -58.87
+KPX r oe -58.87
+KPX r ograve -58.87
+KPX r ohungarumlaut -58.87
+KPX r oslash -58.87
+KPX r otilde -58.87
+KPX r q -58.87
+KPX thorn a -58.87
+KPX thorn aacute -58.87
+KPX thorn acircumflex -58.87
+KPX thorn acircumflex -58.87
+KPX thorn adieresis -58.87
+KPX thorn ae -58.87
+KPX thorn agrave -58.87
+KPX thorn aogonek -58.87
+KPX thorn aring -58.87
+KPX thorn atilde -58.87
+KPX thorn c -58.87
+KPX thorn cacute -58.87
+KPX thorn cacute -58.87
+KPX thorn ccaron -58.87
+KPX thorn ccedilla -58.87
+KPX thorn d -58.87
+KPX thorn dbar -58.87
+KPX thorn e -58.87
+KPX thorn eacute -58.87
+KPX thorn ecaron -58.87
+KPX thorn ecircumflex -58.87
+KPX thorn edieresis -58.87
+KPX thorn egrave -58.87
+KPX thorn eogonek -58.87
+KPX thorn g -58.87
+KPX thorn gbreve -58.87
+KPX thorn o -58.87
+KPX thorn oacute -58.87
+KPX thorn ocircumflex -58.87
+KPX thorn odieresis -58.87
+KPX thorn oe -58.87
+KPX thorn ograve -58.87
+KPX thorn ohungarumlaut -58.87
+KPX thorn oslash -58.87
+KPX thorn otilde -58.87
+KPX thorn q -58.87
+KPX w l 58.87
+KPX w lacute 58.87
+KPX w lquoteright 58.87
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcr10.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcr10.afm
new file mode 100644
index 00000000000..e1eb535fcd7
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcr10.afm
@@ -0,0 +1,751 @@
+StartFontMetrics 2.0
+FontName dcr10
+FullName dcr10
+FamilyName dcr10
+Weight Medium
+ItalicAngle 0.000000
+IsFixedPitch false
+UnderlinePosition -133
+UnderlineThickness 20
+Version 1.0\(Level-B\)
+FontBBox -55, -250, 1054, 913
+Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B.
+EncodingScheme FontSpecific
+CapHeight 683
+XHeight 430
+Descender -194
+Ascender 694
+StartCharMetrics 256
+C 0 ; WX 499.89 ; N grave ; B 107 508 294 698 ;
+C 1 ; WX 499.89 ; N acute ; B 205 508 392 698 ;
+C 2 ; WX 499.89 ; N circumflex ; B 115 537 384 694 ;
+C 3 ; WX 499.89 ; N tilde ; B 83 572 416 668 ;
+C 4 ; WX 499.89 ; N dieresis ; B 101 565 398 669 ;
+C 5 ; WX 499.89 ; N hungarumlaut ; B 126 511 420 699 ;
+C 6 ; WX 749.83 ; N ring ; B 263 540 458 716 ;
+C 7 ; WX 499.89 ; N caron ; B 117 515 382 640 ;
+C 8 ; WX 499.89 ; N breve ; B 98 519 401 694 ;
+C 9 ; WX 499.89 ; N macron ; B 69 555 430 590 ;
+C 10 ; WX 277.72 ; N dotaccent ; B 84 559 194 669 ;
+C 11 ; WX 444.33 ; N cedilla ; B 129 -205 369 -22 ;
+C 12 ; WX 277.72 ; N ogonek ; B 9 -194 226 20 ;
+C 13 ; WX 277.72 ; N quotesinglbase ; B 112 -194 233 110 ;
+C 14 ; WX 444.33 ; N guilsinglleft ; B 94 26 330 457 ;
+C 15 ; WX 444.33 ; N guilsinglright ; B 94 26 360 457 ;
+C 16 ; WX 499.89 ; N quotedblleft ; B 148 390 466 694 ;
+C 17 ; WX 499.89 ; N quotedblright ; B 33 390 351 694 ;
+C 18 ; WX 499.89 ; N quotedblbase ; B 138 -194 456 110 ;
+C 19 ; WX 666.5 ; N guillemotleft ; B 94 26 553 457 ;
+C 20 ; WX 666.5 ; N guillemotright ; B 94 26 583 457 ;
+C 21 ; WX 499.89 ; N endash ; B 0 253 499 279 ; L hyphen emdash ;
+C 22 ; WX 999.78 ; N emdash ; B 0 253 999 279 ;
+C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ;
+C 24 ; WX 388.78 ; N perthousand ; B 55 -56 333 347 ;
+C 25 ; WX 277.72 ; N dotlessi ; B 25 0 243 441 ;
+C 26 ; WX 305.5 ; N dotlessj ; B -55 -205 201 441 ;
+C 27 ; WX 583.17 ; N ff ; B 26 0 632 705 ; L i ffi ; L l ffl ;
+C 28 ; WX 555.44 ; N fi ; B 26 0 528 705 ;
+C 29 ; WX 555.44 ; N fl ; B 26 0 528 705 ;
+C 30 ; WX 833.11 ; N ffi ; B 26 0 807 705 ;
+C 31 ; WX 833.11 ; N ffl ; B 26 0 807 705 ;
+C 32 ; WX 499.89 ; N visiblespace ; B 42 -107 457 252 ;
+C 33 ; WX 277.72 ; N exclam ; B 84 0 194 716 ;
+C 34 ; WX 499.89 ; N quotedbl ; B 117 349 383 711 ;
+C 35 ; WX 833.11 ; N numbersign ; B 56 -194 776 694 ;
+C 36 ; WX 499.89 ; N dollar ; B 57 -56 444 750 ;
+C 37 ; WX 833.11 ; N percent ; B 56 -56 776 750 ;
+C 38 ; WX 777.61 ; N ampersand ; B 42 -22 727 716 ;
+C 39 ; WX 277.72 ; N quoteright ; B 84 390 208 694 ; L quoteright quotedblright ;
+C 40 ; WX 388.78 ; N parenleft ; B 97 -250 332 750 ;
+C 41 ; WX 388.78 ; N parenright ; B 56 -250 291 750 ;
+C 42 ; WX 499.89 ; N asterisk ; B 65 320 434 750 ;
+C 43 ; WX 777.61 ; N plus ; B 56 -83 721 583 ;
+C 44 ; WX 277.72 ; N comma ; B 84 -194 205 110 ; L comma quotedblbase ;
+C 45 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ; L hyphen endash ;
+C 46 ; WX 277.72 ; N period ; B 84 0 194 110 ;
+C 47 ; WX 499.89 ; N slash ; B 56 -250 443 750 ;
+C 48 ; WX 499.89 ; N zero ; B 39 -22 460 666 ;
+C 49 ; WX 499.89 ; N one ; B 87 0 421 666 ;
+C 50 ; WX 499.89 ; N two ; B 50 0 449 666 ;
+C 51 ; WX 499.89 ; N three ; B 42 -22 457 666 ;
+C 52 ; WX 499.89 ; N four ; B 28 0 471 677 ;
+C 53 ; WX 499.89 ; N five ; B 50 -22 449 666 ;
+C 54 ; WX 499.89 ; N six ; B 42 -22 457 666 ;
+C 55 ; WX 499.89 ; N seven ; B 56 -22 485 676 ;
+C 56 ; WX 499.89 ; N eight ; B 42 -22 457 666 ;
+C 57 ; WX 499.89 ; N nine ; B 42 -22 457 666 ;
+C 58 ; WX 277.72 ; N colon ; B 84 0 194 430 ;
+C 59 ; WX 277.72 ; N semicolon ; B 84 -194 197 430 ;
+C 60 ; WX 777.61 ; N less ; B 83 -33 694 533 ; L less guillemotleft ;
+C 61 ; WX 777.61 ; N equal ; B 56 140 721 360 ;
+C 62 ; WX 777.61 ; N greater ; B 83 -33 694 533 ; L greater guillemotright ;
+C 63 ; WX 472.11 ; N question ; B 56 0 415 705 ;
+C 64 ; WX 777.61 ; N at ; B 56 -11 721 705 ;
+C 65 ; WX 749.83 ; N A ; B 18 0 703 716 ;
+C 66 ; WX 708.17 ; N B ; B 20 0 637 683 ;
+C 67 ; WX 722 ; N C ; B 56 -22 665 705 ;
+C 68 ; WX 763.72 ; N D ; B 19 0 693 683 ;
+C 69 ; WX 680.39 ; N E ; B 17 0 637 680 ;
+C 70 ; WX 652.61 ; N F ; B 17 0 596 680 ;
+C 71 ; WX 784.56 ; N G ; B 56 -22 735 705 ;
+C 72 ; WX 749.83 ; N H ; B 17 0 704 683 ;
+C 73 ; WX 361 ; N I ; B 12 0 321 683 ;
+C 74 ; WX 513.78 ; N J ; B 37 -22 465 683 ;
+C 75 ; WX 777.61 ; N K ; B 17 0 722 683 ;
+C 76 ; WX 624.83 ; N L ; B 17 0 568 683 ;
+C 77 ; WX 916.44 ; N M ; B 21 0 866 683 ;
+C 78 ; WX 749.83 ; N N ; B 17 0 704 683 ;
+C 79 ; WX 777.61 ; N O ; B 56 -22 721 705 ;
+C 80 ; WX 680.39 ; N P ; B 19 0 609 683 ;
+C 81 ; WX 777.61 ; N Q ; B 56 -194 727 705 ;
+C 82 ; WX 735.94 ; N R ; B 19 -22 718 683 ;
+C 83 ; WX 555.44 ; N S ; B 56 -22 498 705 ;
+C 84 ; WX 722 ; N T ; B 37 0 686 677 ;
+C 85 ; WX 749.83 ; N U ; B 17 -22 704 683 ;
+C 86 ; WX 749.83 ; N V ; B 5 -22 716 683 ;
+C 87 ; WX 1027.56 ; N W ; B 4 -22 995 683 ;
+C 88 ; WX 749.83 ; N X ; B 9 0 712 683 ;
+C 89 ; WX 749.83 ; N Y ; B -3 0 724 683 ;
+C 90 ; WX 611 ; N Z ; B 56 0 560 683 ;
+C 91 ; WX 277.72 ; N bracketleft ; B 103 -250 255 750 ;
+C 92 ; WX 499.89 ; N backslash ; B 56 -250 443 750 ;
+C 93 ; WX 277.72 ; N bracketright ; B 22 -250 174 750 ;
+C 94 ; WX 611 ; N asciicircum ; B 117 461 493 628 ;
+C 95 ; WX 777.61 ; N underscore ; B 83 -233 694 -193 ;
+C 96 ; WX 277.72 ; N quoteleft ; B 70 390 194 694 ; L quoteleft quotedblleft ;
+C 97 ; WX 499.89 ; N a ; B 40 -11 493 447 ;
+C 98 ; WX 555.44 ; N b ; B 26 -11 521 694 ;
+C 99 ; WX 444.33 ; N c ; B 33 -11 415 447 ;
+C 100 ; WX 555.44 ; N d ; B 33 -11 528 694 ;
+C 101 ; WX 444.33 ; N e ; B 28 -11 415 447 ;
+C 102 ; WX 305.5 ; N f ; B 26 0 354 705 ; L i fi ; L f ff ; L l fl ;
+C 103 ; WX 499.89 ; N g ; B 28 -206 485 452 ;
+C 104 ; WX 555.44 ; N h ; B 24 0 530 694 ;
+C 105 ; WX 277.72 ; N i ; B 25 0 243 669 ;
+C 106 ; WX 305.5 ; N j ; B -55 -205 201 669 ;
+C 107 ; WX 527.67 ; N k ; B 26 0 511 694 ;
+C 108 ; WX 277.72 ; N l ; B 25 0 251 694 ;
+C 109 ; WX 833.11 ; N m ; B 24 0 810 441 ;
+C 110 ; WX 555.44 ; N n ; B 24 0 530 441 ;
+C 111 ; WX 499.89 ; N o ; B 28 -11 471 447 ;
+C 112 ; WX 555.44 ; N p ; B 26 -194 521 441 ;
+C 113 ; WX 527.67 ; N q ; B 33 -194 529 441 ;
+C 114 ; WX 391.56 ; N r ; B 26 0 364 441 ;
+C 115 ; WX 394.33 ; N s ; B 33 -11 360 447 ;
+C 116 ; WX 388.78 ; N t ; B 19 -11 332 615 ;
+C 117 ; WX 555.44 ; N u ; B 24 -11 530 441 ;
+C 118 ; WX 527.67 ; N v ; B 19 -11 508 430 ;
+C 119 ; WX 722 ; N w ; B 18 -11 703 430 ;
+C 120 ; WX 527.67 ; N x ; B 12 0 516 430 ;
+C 121 ; WX 527.67 ; N y ; B 19 -205 508 430 ;
+C 122 ; WX 444.33 ; N z ; B 28 0 401 430 ;
+C 123 ; WX 499.89 ; N braceleft ; B 70 -250 429 750 ;
+C 124 ; WX 277.72 ; N bar ; B 119 -250 159 750 ;
+C 125 ; WX 499.89 ; N braceright ; B 70 -250 429 750 ;
+C 126 ; WX 611 ; N asciitilde ; B 83 572 527 668 ;
+C 127 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ;
+C 128 ; WX 749.83 ; N Abreve ; B 18 0 703 891 ;
+C 129 ; WX 749.83 ; N Aogonek ; B 18 -188 740 716 ;
+C 130 ; WX 722 ; N Cacute ; B 56 -22 665 895 ;
+C 131 ; WX 722 ; N Ccaron ; B 56 -22 665 856 ;
+C 132 ; WX 763.72 ; N Dcaron ; B 19 0 693 856 ;
+C 133 ; WX 680.39 ; N Ecaron ; B 17 0 637 856 ;
+C 134 ; WX 680.39 ; N Eogonek ; B 17 -188 637 680 ;
+C 135 ; WX 784.56 ; N Gbreve ; B 56 -22 735 891 ;
+C 136 ; WX 624.83 ; N Lacute ; B 17 0 568 895 ;
+C 137 ; WX 624.83 ; N Lquoteright ; B 17 0 568 683 ;
+C 138 ; WX 624.83 ; N Lslash ; B 17 0 568 683 ;
+C 139 ; WX 749.83 ; N Nacute ; B 17 0 704 895 ;
+C 140 ; WX 749.83 ; N Ncaron ; B 17 0 704 856 ;
+C 141 ; WX 727.61 ; N Eng ; B 24 -22 676 694 ;
+C 142 ; WX 777.61 ; N Ohungarumlaut ; B 56 -22 721 895 ;
+C 143 ; WX 735.94 ; N Racute ; B 19 -22 718 895 ;
+C 144 ; WX 735.94 ; N Rcaron ; B 19 -22 718 856 ;
+C 145 ; WX 555.44 ; N Sacute ; B 56 -22 498 895 ;
+C 146 ; WX 555.44 ; N Scaron ; B 56 -22 498 856 ;
+C 147 ; WX 555.44 ; N Scedilla ; B 56 -205 498 705 ;
+C 148 ; WX 722 ; N Tcaron ; B 37 0 686 856 ;
+C 149 ; WX 722 ; N Tcedilla ; B 37 -205 686 677 ;
+C 150 ; WX 749.83 ; N Uhungarumlaut ; B 17 -22 704 895 ;
+C 151 ; WX 749.83 ; N Uring ; B 17 -22 704 913 ;
+C 152 ; WX 749.83 ; N Ydieresis ; B -3 0 724 839 ;
+C 153 ; WX 611 ; N Zacute ; B 56 0 560 895 ;
+C 154 ; WX 611 ; N Zcaron ; B 56 0 560 856 ;
+C 155 ; WX 611 ; N Zdotaccent ; B 56 0 560 891 ;
+C 156 ; WX 860.89 ; N IJ ; B 12 -22 798 683 ;
+C 157 ; WX 361 ; N Idotaccent ; B 12 0 321 877 ;
+C 158 ; WX 555.44 ; N dbar ; B 33 -11 528 694 ;
+C 159 ; WX 444.33 ; N section ; B 69 -205 374 705 ;
+C 160 ; WX 499.89 ; N abreve ; B 40 -11 493 694 ;
+C 161 ; WX 499.89 ; N aogonek ; B 40 -194 493 447 ;
+C 162 ; WX 444.33 ; N cacute ; B 33 -11 415 643 ;
+C 163 ; WX 444.33 ; N ccaron ; B 33 -11 415 604 ;
+C 164 ; WX 674.83 ; N dquoteright ; B 33 -11 665 694 ;
+C 165 ; WX 444.33 ; N ecaron ; B 28 -11 415 604 ;
+C 166 ; WX 444.33 ; N eogonek ; B 28 -194 415 447 ;
+C 167 ; WX 499.89 ; N gbreve ; B 28 -206 485 694 ;
+C 168 ; WX 277.72 ; N lacute ; B 25 0 282 907 ;
+C 169 ; WX 402.67 ; N lquoteright ; B 25 0 386 694 ;
+C 170 ; WX 277.72 ; N lslash ; B 18 0 258 694 ;
+C 171 ; WX 555.44 ; N nacute ; B 24 0 530 643 ;
+C 172 ; WX 555.44 ; N ncaron ; B 24 0 530 604 ;
+C 173 ; WX 555.44 ; N eng ; B 24 -205 452 441 ;
+C 174 ; WX 499.89 ; N ohungarumlaut ; B 28 -11 521 643 ;
+C 175 ; WX 391.56 ; N racute ; B 26 0 364 643 ;
+C 176 ; WX 391.56 ; N rcaron ; B 26 0 364 604 ;
+C 177 ; WX 394.33 ; N sacute ; B 33 -11 360 643 ;
+C 178 ; WX 394.33 ; N scaron ; B 33 -11 360 604 ;
+C 179 ; WX 394.33 ; N scedilla ; B 33 -205 360 447 ;
+C 180 ; WX 411 ; N tquoteright ; B 19 -11 401 704 ;
+C 181 ; WX 388.78 ; N tcedilla ; B 19 -205 359 615 ;
+C 182 ; WX 555.44 ; N uhungarumlaut ; B 24 -11 549 643 ;
+C 183 ; WX 555.44 ; N uring ; B 24 -11 530 661 ;
+C 184 ; WX 527.67 ; N ydieresis ; B 19 -205 508 586 ;
+C 185 ; WX 444.33 ; N zacute ; B 28 0 401 643 ;
+C 186 ; WX 444.33 ; N zcaron ; B 28 0 401 604 ;
+C 187 ; WX 444.33 ; N zdotaccent ; B 28 0 402 669 ;
+C 188 ; WX 583.17 ; N ij ; B 33 -205 485 669 ;
+C 189 ; WX 277.72 ; N exclamdown ; B 84 -216 194 500 ;
+C 190 ; WX 472.11 ; N questiondown ; B 56 -205 415 500 ;
+C 191 ; WX 638.72 ; N sterling ; B 56 -11 620 709 ;
+C 192 ; WX 749.83 ; N Agrave ; B 18 0 703 895 ;
+C 193 ; WX 749.83 ; N Aacute ; B 18 0 703 895 ;
+C 194 ; WX 749.83 ; N Acircumflex ; B 18 0 703 891 ;
+C 195 ; WX 749.83 ; N Atilde ; B 18 0 703 891 ;
+C 196 ; WX 749.83 ; N Adieresis ; B 18 0 703 839 ;
+C 197 ; WX 749.83 ; N Aring ; B 18 0 703 872 ;
+C 198 ; WX 902.56 ; N AE ; B 18 0 860 683 ;
+C 199 ; WX 722 ; N Ccedilla ; B 56 -205 665 705 ;
+C 200 ; WX 680.39 ; N Egrave ; B 17 0 637 895 ;
+C 201 ; WX 680.39 ; N Eacute ; B 17 0 637 895 ;
+C 202 ; WX 680.39 ; N Ecircumflex ; B 17 0 637 891 ;
+C 203 ; WX 680.39 ; N Edieresis ; B 17 0 637 839 ;
+C 204 ; WX 361 ; N Igrave ; B 12 0 321 895 ;
+C 205 ; WX 361 ; N Iacute ; B 12 0 321 895 ;
+C 206 ; WX 361 ; N Icircumflex ; B 12 0 321 891 ;
+C 207 ; WX 361 ; N Idieresis ; B 12 0 321 839 ;
+C 208 ; WX 763.72 ; N Eth ; B 19 0 693 683 ;
+C 209 ; WX 749.83 ; N Ntilde ; B 17 0 704 891 ;
+C 210 ; WX 777.61 ; N Ograve ; B 56 -22 721 895 ;
+C 211 ; WX 777.61 ; N Oacute ; B 56 -22 721 895 ;
+C 212 ; WX 777.61 ; N Ocircumflex ; B 56 -22 721 891 ;
+C 213 ; WX 777.61 ; N Otilde ; B 56 -22 721 891 ;
+C 214 ; WX 777.61 ; N Odieresis ; B 56 -22 721 839 ;
+C 215 ; WX 1013.67 ; N OE ; B 56 -22 971 705 ;
+C 216 ; WX 777.61 ; N Oslash ; B 56 -57 721 740 ;
+C 217 ; WX 749.83 ; N Ugrave ; B 17 -22 704 895 ;
+C 218 ; WX 749.83 ; N Uacute ; B 17 -22 704 895 ;
+C 219 ; WX 749.83 ; N Ucircumflex ; B 17 -22 704 891 ;
+C 220 ; WX 749.83 ; N Udieresis ; B 17 -22 704 839 ;
+C 221 ; WX 749.83 ; N Yacute ; B -3 0 724 895 ;
+C 222 ; WX 624.83 ; N Thorn ; B 20 0 554 683 ;
+C 223 ; WX 1110.83 ; N Germandbls ; B 56 -22 1054 705 ;
+C 224 ; WX 499.89 ; N agrave ; B 40 -11 493 643 ;
+C 225 ; WX 499.89 ; N aacute ; B 40 -11 493 643 ;
+C 226 ; WX 499.89 ; N acircumflex ; B 40 -11 493 639 ;
+C 227 ; WX 499.89 ; N atilde ; B 40 -11 493 669 ;
+C 228 ; WX 499.89 ; N adieresis ; B 40 -11 493 586 ;
+C 229 ; WX 499.89 ; N aring ; B 40 -11 493 661 ;
+C 230 ; WX 722 ; N ae ; B 43 -11 693 447 ;
+C 231 ; WX 444.33 ; N ccedilla ; B 33 -205 415 447 ;
+C 232 ; WX 444.33 ; N egrave ; B 28 -11 415 643 ;
+C 233 ; WX 444.33 ; N eacute ; B 28 -11 415 643 ;
+C 234 ; WX 444.33 ; N ecircumflex ; B 28 -11 415 639 ;
+C 235 ; WX 444.33 ; N edieresis ; B 28 -11 415 586 ;
+C 236 ; WX 277.72 ; N igrave ; B -6 0 243 643 ;
+C 237 ; WX 277.72 ; N iacute ; B 25 0 282 643 ;
+C 238 ; WX 277.72 ; N icircumflex ; B 3 0 274 639 ;
+C 239 ; WX 333.28 ; N idieresis ; B -9 0 289 586 ;
+C 240 ; WX 499.89 ; N eth ; B 28 -11 471 694 ;
+C 241 ; WX 555.44 ; N ntilde ; B 24 0 530 669 ;
+C 242 ; WX 499.89 ; N ograve ; B 28 -11 471 643 ;
+C 243 ; WX 499.89 ; N oacute ; B 28 -11 471 643 ;
+C 244 ; WX 499.89 ; N ocircumflex ; B 28 -11 471 639 ;
+C 245 ; WX 499.89 ; N otilde ; B 28 -11 471 669 ;
+C 246 ; WX 499.89 ; N odieresis ; B 28 -11 471 586 ;
+C 247 ; WX 777.61 ; N oe ; B 28 -11 749 447 ;
+C 248 ; WX 499.89 ; N oslash ; B 33 -103 466 534 ;
+C 249 ; WX 555.44 ; N ugrave ; B 24 -11 530 643 ;
+C 250 ; WX 555.44 ; N uacute ; B 24 -11 530 643 ;
+C 251 ; WX 555.44 ; N ucircumflex ; B 24 -11 530 639 ;
+C 252 ; WX 555.44 ; N udieresis ; B 24 -11 530 586 ;
+C 253 ; WX 527.67 ; N yacute ; B 19 -205 508 643 ;
+C 254 ; WX 555.44 ; N thorn ; B 25 -205 521 694 ;
+C 255 ; WX 499.89 ; N germandbls ; B 26 -11 471 705 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 471
+KPX A C -27.77
+KPX A G -27.77
+KPX A O -27.77
+KPX A Q -27.77
+KPX A T -83.31
+KPX A U -27.77
+KPX A V -111.08
+KPX A W -111.08
+KPX A Y -83.31
+KPX A t -27.77
+KPX Aacute C -27.77
+KPX Aacute G -27.77
+KPX Aacute O -27.77
+KPX Aacute Q -27.77
+KPX Aacute T -83.31
+KPX Aacute U -27.77
+KPX Aacute V -111.08
+KPX Aacute W -111.08
+KPX Aacute Y -83.31
+KPX Aacute t -27.77
+KPX Abreve C -27.77
+KPX Abreve G -27.77
+KPX Abreve O -27.77
+KPX Abreve Q -27.77
+KPX Abreve T -83.31
+KPX Abreve U -27.77
+KPX Abreve V -111.08
+KPX Abreve W -111.08
+KPX Abreve Y -83.31
+KPX Abreve t -27.77
+KPX Acircumflex C -27.77
+KPX Acircumflex G -27.77
+KPX Acircumflex O -27.77
+KPX Acircumflex Q -27.77
+KPX Acircumflex T -83.31
+KPX Acircumflex U -27.77
+KPX Acircumflex V -111.08
+KPX Acircumflex W -111.08
+KPX Acircumflex Y -83.31
+KPX Acircumflex t -27.77
+KPX Adieresis C -27.77
+KPX Adieresis G -27.77
+KPX Adieresis O -27.77
+KPX Adieresis Q -27.77
+KPX Adieresis T -83.31
+KPX Adieresis U -27.77
+KPX Adieresis V -111.08
+KPX Adieresis W -111.08
+KPX Adieresis Y -83.31
+KPX Adieresis t -27.77
+KPX Agrave C -27.77
+KPX Agrave G -27.77
+KPX Agrave O -27.77
+KPX Agrave Q -27.77
+KPX Agrave T -83.31
+KPX Agrave U -27.77
+KPX Agrave V -111.08
+KPX Agrave W -111.08
+KPX Agrave Y -83.31
+KPX Agrave t -27.77
+KPX Aogonek C -27.77
+KPX Aogonek G -27.77
+KPX Aogonek O -27.77
+KPX Aogonek Q -27.77
+KPX Aogonek T -83.31
+KPX Aogonek U -27.77
+KPX Aogonek V -111.08
+KPX Aogonek W -111.08
+KPX Aogonek Y -83.31
+KPX Aogonek t -27.77
+KPX Aring C -27.77
+KPX Aring G -27.77
+KPX Aring O -27.77
+KPX Aring Q -27.77
+KPX Aring T -83.31
+KPX Aring U -27.77
+KPX Aring V -111.08
+KPX Aring W -111.08
+KPX Aring Y -83.31
+KPX Aring t -27.77
+KPX Atilde C -27.77
+KPX Atilde G -27.77
+KPX Atilde O -27.77
+KPX Atilde Q -27.77
+KPX Atilde T -83.31
+KPX Atilde U -27.77
+KPX Atilde V -111.08
+KPX Atilde W -111.08
+KPX Atilde Y -83.31
+KPX Atilde t -27.77
+KPX D A -27.77
+KPX D V -27.77
+KPX D W -27.77
+KPX D X -27.77
+KPX D Y -27.77
+KPX F A -111.08
+KPX F C -27.77
+KPX F G -27.77
+KPX F O -27.77
+KPX F Q -27.77
+KPX F a -83.31
+KPX F e -83.31
+KPX F o -83.31
+KPX F r -83.31
+KPX F u -83.31
+KPX I I 27.77
+KPX K C -27.77
+KPX K G -27.77
+KPX K O -27.77
+KPX K Q -27.77
+KPX L T -83.31
+KPX L V -111.08
+KPX L W -111.08
+KPX L Y -83.31
+KPX O A -27.77
+KPX O V -27.77
+KPX O W -27.77
+KPX O X -27.77
+KPX O Y -27.77
+KPX P A -83.31
+KPX P a -27.77
+KPX P aacute -27.77
+KPX P acircumflex -27.77
+KPX P acircumflex -27.77
+KPX P adieresis -27.77
+KPX P ae -27.77
+KPX P agrave -27.77
+KPX P aogonek -27.77
+KPX P aring -27.77
+KPX P atilde -27.77
+KPX P cacute -27.77
+KPX P comma -83.31
+KPX P e -27.77
+KPX P eacute -27.77
+KPX P ecaron -27.77
+KPX P ecircumflex -27.77
+KPX P edieresis -27.77
+KPX P egrave -27.77
+KPX P eogonek -27.77
+KPX P o -27.77
+KPX P oacute -27.77
+KPX P ocircumflex -27.77
+KPX P odieresis -27.77
+KPX P oe -27.77
+KPX P ograve -27.77
+KPX P ohungarumlaut -27.77
+KPX P otilde -27.77
+KPX P period -83.31
+KPX R C -27.77
+KPX R G -27.77
+KPX R O -27.77
+KPX R Q -27.77
+KPX R T -83.31
+KPX R U -27.77
+KPX R V -111.08
+KPX R W -111.08
+KPX R Y -83.31
+KPX R t -27.77
+KPX T A -83.31
+KPX T a -83.31
+KPX T e -83.31
+KPX T o -83.31
+KPX T r -83.31
+KPX T u -83.31
+KPX T y -27.77
+KPX V A -111.08
+KPX V C -27.77
+KPX V G -27.77
+KPX V O -27.77
+KPX V Q -27.77
+KPX V a -83.31
+KPX V e -83.31
+KPX V o -83.31
+KPX V r -83.31
+KPX V u -83.31
+KPX W A -111.08
+KPX W C -27.77
+KPX W G -27.77
+KPX W O -27.77
+KPX W Q -27.77
+KPX W a -83.31
+KPX W e -83.31
+KPX W o -83.31
+KPX W r -83.31
+KPX W u -83.31
+KPX X C -27.77
+KPX X G -27.77
+KPX X O -27.77
+KPX X Q -27.77
+KPX Y A -83.31
+KPX Y a -83.31
+KPX Y e -83.31
+KPX Y o -83.31
+KPX Y r -83.31
+KPX Y u -83.31
+KPX a j 55.54
+KPX a v -27.77
+KPX a w -27.77
+KPX a y -27.77
+KPX b c 27.77
+KPX b cacute 27.77
+KPX b ccaron 27.77
+KPX b ccedilla 27.77
+KPX b d 27.77
+KPX b e 27.77
+KPX b eacute 27.77
+KPX b ecaron 27.77
+KPX b ecircumflex 27.77
+KPX b edieresis 27.77
+KPX b egrave 27.77
+KPX b eogonek 27.77
+KPX b j 55.54
+KPX b o 27.77
+KPX b oacute 27.77
+KPX b ocircumflex 27.77
+KPX b odieresis 27.77
+KPX b oe 27.77
+KPX b ograve 27.77
+KPX b ohungarumlaut 27.77
+KPX b otilde 27.77
+KPX b q 27.77
+KPX b v -27.77
+KPX b w -27.77
+KPX b x -27.77
+KPX b y -27.77
+KPX c h -27.77
+KPX c k -27.77
+KPX f bracketright 77.76
+KPX f exclam 77.76
+KPX f parenright 77.76
+KPX f question 77.76
+KPX f quoteright 77.76
+KPX ff bracketright 77.76
+KPX ff exclam 77.76
+KPX ff parenright 77.76
+KPX ff question 77.76
+KPX ff quoteright 77.76
+KPX g j 27.77
+KPX h b -27.77
+KPX h t -27.77
+KPX h u -27.77
+KPX h uacute -27.77
+KPX h ucircumflex -27.77
+KPX h udieresis -27.77
+KPX h ugrave -27.77
+KPX h uhungarumlaut -27.77
+KPX h uring -27.77
+KPX h v -27.77
+KPX h w -27.77
+KPX h y -27.77
+KPX k a -27.77
+KPX k a -55.54
+KPX k aacute -27.77
+KPX k aacute -55.54
+KPX k acircumflex -55.54
+KPX k acircumflex -55.54
+KPX k acircumflex -27.77
+KPX k acircumflex -27.77
+KPX k adieresis -27.77
+KPX k adieresis -55.54
+KPX k ae -55.54
+KPX k ae -27.77
+KPX k agrave -55.54
+KPX k agrave -27.77
+KPX k aogonek -55.54
+KPX k aogonek -27.77
+KPX k aring -55.54
+KPX k aring -27.77
+KPX k atilde -27.77
+KPX k atilde -55.54
+KPX k c -27.77
+KPX k cacute -27.77
+KPX k cacute -27.77
+KPX k cacute -55.54
+KPX k ccaron -27.77
+KPX k ccedilla -27.77
+KPX k e -27.77
+KPX k eacute -27.77
+KPX k ecaron -27.77
+KPX k ecircumflex -27.77
+KPX k edieresis -27.77
+KPX k egrave -27.77
+KPX k eogonek -27.77
+KPX k o -27.77
+KPX k oacute -27.77
+KPX k ocircumflex -27.77
+KPX k odieresis -27.77
+KPX k oe -27.77
+KPX k ograve -27.77
+KPX k ohungarumlaut -27.77
+KPX k otilde -27.77
+KPX m b -27.77
+KPX m t -27.77
+KPX m u -27.77
+KPX m uacute -27.77
+KPX m ucircumflex -27.77
+KPX m udieresis -27.77
+KPX m ugrave -27.77
+KPX m uhungarumlaut -27.77
+KPX m uring -27.77
+KPX m v -27.77
+KPX m w -27.77
+KPX m y -27.77
+KPX n b -27.77
+KPX n t -27.77
+KPX n u -27.77
+KPX n uacute -27.77
+KPX n ucircumflex -27.77
+KPX n udieresis -27.77
+KPX n ugrave -27.77
+KPX n uhungarumlaut -27.77
+KPX n uring -27.77
+KPX n v -27.77
+KPX n w -27.77
+KPX n y -27.77
+KPX o c 27.77
+KPX o cacute 27.77
+KPX o ccaron 27.77
+KPX o ccedilla 27.77
+KPX o d 27.77
+KPX o e 27.77
+KPX o eacute 27.77
+KPX o ecaron 27.77
+KPX o ecircumflex 27.77
+KPX o edieresis 27.77
+KPX o egrave 27.77
+KPX o eogonek 27.77
+KPX o j 55.54
+KPX o o 27.77
+KPX o oacute 27.77
+KPX o ocircumflex 27.77
+KPX o odieresis 27.77
+KPX o oe 27.77
+KPX o ograve 27.77
+KPX o ohungarumlaut 27.77
+KPX o otilde 27.77
+KPX o q 27.77
+KPX o v -27.77
+KPX o w -27.77
+KPX o x -27.77
+KPX o y -27.77
+KPX p c 27.77
+KPX p cacute 27.77
+KPX p ccaron 27.77
+KPX p ccedilla 27.77
+KPX p d 27.77
+KPX p e 27.77
+KPX p eacute 27.77
+KPX p ecaron 27.77
+KPX p ecircumflex 27.77
+KPX p edieresis 27.77
+KPX p egrave 27.77
+KPX p eogonek 27.77
+KPX p j 55.54
+KPX p o 27.77
+KPX p oacute 27.77
+KPX p ocircumflex 27.77
+KPX p odieresis 27.77
+KPX p oe 27.77
+KPX p ograve 27.77
+KPX p ohungarumlaut 27.77
+KPX p otilde 27.77
+KPX p q 27.77
+KPX p v -27.77
+KPX p w -27.77
+KPX p x -27.77
+KPX p y -27.77
+KPX quoteright exclam 111.08
+KPX quoteright question 111.08
+KPX t w -27.77
+KPX t y -27.77
+KPX u w -27.77
+KPX v a -27.77
+KPX v a -55.54
+KPX v aacute -27.77
+KPX v aacute -55.54
+KPX v acircumflex -55.54
+KPX v acircumflex -27.77
+KPX v acircumflex -27.77
+KPX v acircumflex -55.54
+KPX v adieresis -27.77
+KPX v adieresis -55.54
+KPX v ae -27.77
+KPX v ae -55.54
+KPX v agrave -27.77
+KPX v agrave -55.54
+KPX v aogonek -55.54
+KPX v aogonek -27.77
+KPX v aring -55.54
+KPX v aring -27.77
+KPX v atilde -55.54
+KPX v atilde -27.77
+KPX v c -27.77
+KPX v cacute -55.54
+KPX v cacute -27.77
+KPX v cacute -27.77
+KPX v ccaron -27.77
+KPX v ccedilla -27.77
+KPX v e -27.77
+KPX v eacute -27.77
+KPX v ecaron -27.77
+KPX v ecircumflex -27.77
+KPX v edieresis -27.77
+KPX v egrave -27.77
+KPX v eogonek -27.77
+KPX v o -27.77
+KPX v oacute -27.77
+KPX v ocircumflex -27.77
+KPX v odieresis -27.77
+KPX v oe -27.77
+KPX v ograve -27.77
+KPX v ohungarumlaut -27.77
+KPX v otilde -27.77
+KPX w a -27.77
+KPX w aacute -27.77
+KPX w acircumflex -27.77
+KPX w acircumflex -27.77
+KPX w adieresis -27.77
+KPX w ae -27.77
+KPX w agrave -27.77
+KPX w aogonek -27.77
+KPX w aring -27.77
+KPX w atilde -27.77
+KPX w c -27.77
+KPX w cacute -27.77
+KPX w cacute -27.77
+KPX w ccaron -27.77
+KPX w ccedilla -27.77
+KPX w e -27.77
+KPX w eacute -27.77
+KPX w ecaron -27.77
+KPX w ecircumflex -27.77
+KPX w edieresis -27.77
+KPX w egrave -27.77
+KPX w eogonek -27.77
+KPX w o -27.77
+KPX w oacute -27.77
+KPX w ocircumflex -27.77
+KPX w odieresis -27.77
+KPX w oe -27.77
+KPX w ograve -27.77
+KPX w ohungarumlaut -27.77
+KPX w otilde -27.77
+KPX y a -27.77
+KPX y aacute -27.77
+KPX y acircumflex -27.77
+KPX y acircumflex -27.77
+KPX y adieresis -27.77
+KPX y ae -27.77
+KPX y agrave -27.77
+KPX y aogonek -27.77
+KPX y aring -27.77
+KPX y atilde -27.77
+KPX y cacute -27.77
+KPX y comma -83.31
+KPX y e -27.77
+KPX y eacute -27.77
+KPX y ecaron -27.77
+KPX y ecircumflex -27.77
+KPX y edieresis -27.77
+KPX y egrave -27.77
+KPX y eogonek -27.77
+KPX y o -27.77
+KPX y oacute -27.77
+KPX y ocircumflex -27.77
+KPX y odieresis -27.77
+KPX y oe -27.77
+KPX y ograve -27.77
+KPX y ohungarumlaut -27.77
+KPX y otilde -27.77
+KPX y period -83.31
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcti10.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcti10.afm
new file mode 100644
index 00000000000..b1a4c37f200
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/dcti10.afm
@@ -0,0 +1,2341 @@
+StartFontMetrics 2.0
+FontName dcti10
+FullName dcti10
+FamilyName dcti10
+Weight Medium
+ItalicAngle 0.000000
+IsFixedPitch false
+UnderlinePosition -133
+UnderlineThickness 20
+Version 1.0\(Level-B\)
+FontBBox -61, -250, 1119, 913
+Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B.
+EncodingScheme FontSpecific
+CapHeight 683
+XHeight 430
+Descender -194
+Ascender 694
+StartCharMetrics 256
+C 0 ; WX 511 ; N grave ; B 265 503 407 696 ;
+C 1 ; WX 511 ; N acute ; B 313 503 525 696 ;
+C 2 ; WX 511 ; N circumflex ; B 238 533 498 694 ;
+C 3 ; WX 511 ; N tilde ; B 221 564 546 668 ;
+C 4 ; WX 511 ; N dieresis ; B 242 565 526 669 ;
+C 5 ; WX 511 ; N hungarumlaut ; B 241 504 550 697 ;
+C 6 ; WX 831.11 ; N ring ; B 435 540 630 716 ;
+C 7 ; WX 511 ; N caron ; B 253 505 512 633 ;
+C 8 ; WX 511 ; N breve ; B 254 520 541 694 ;
+C 9 ; WX 511 ; N macron ; B 206 555 540 589 ;
+C 10 ; WX 306.61 ; N dotaccent ; B 225 559 337 669 ;
+C 11 ; WX 459.89 ; N cedilla ; B 73 -194 312 0 ;
+C 12 ; WX 306.61 ; N ogonek ; B -16 -181 192 23 ;
+C 13 ; WX 306.61 ; N quotesinglbase ; B 63 -194 217 110 ;
+C 14 ; WX 459.89 ; N guilsinglleft ; B 147 26 417 457 ;
+C 15 ; WX 459.89 ; N guilsinglright ; B 96 26 392 457 ;
+C 16 ; WX 514.33 ; N quotedblleft ; B 239 390 583 694 ;
+C 17 ; WX 514.33 ; N quotedblright ; B 150 390 494 694 ;
+C 18 ; WX 514.33 ; N quotedblbase ; B 95 -194 439 110 ;
+C 19 ; WX 664.28 ; N guillemotleft ; B 147 26 621 457 ;
+C 20 ; WX 664.28 ; N guillemotright ; B 96 26 596 457 ;
+C 21 ; WX 511 ; N endash ; B 66 253 526 279 ; L hyphen emdash ;
+C 22 ; WX 1022 ; N emdash ; B 66 253 985 279 ;
+C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ;
+C 24 ; WX 408.78 ; N perthousand ; B 78 -56 353 347 ;
+C 25 ; WX 306.61 ; N dotlessi ; B 55 -11 308 441 ;
+C 26 ; WX 332.17 ; N dotlessj ; B -61 -205 296 441 ;
+C 27 ; WX 613.17 ; N ff ; B -51 -205 732 705 ; L i ffi ; L l ffl ;
+C 28 ; WX 562.11 ; N fi ; B -51 -205 571 705 ;
+C 29 ; WX 587.61 ; N fl ; B -51 -205 613 705 ;
+C 30 ; WX 881.44 ; N ffi ; B -51 -205 890 705 ;
+C 31 ; WX 894.22 ; N ffl ; B -51 -205 919 705 ;
+C 32 ; WX 511 ; N visiblespace ; B 13 -107 482 252 ;
+C 33 ; WX 306.61 ; N exclam ; B 85 0 350 716 ;
+C 34 ; WX 511 ; N quotedbl ; B 226 338 517 706 ;
+C 35 ; WX 817.56 ; N numbersign ; B 89 -194 802 694 ;
+C 36 ; WX 511 ; N dollar ; B 89 -56 546 750 ;
+C 37 ; WX 817.56 ; N percent ; B 119 -56 821 750 ;
+C 38 ; WX 766.5 ; N ampersand ; B 101 -22 776 716 ;
+C 39 ; WX 306.61 ; N quoteright ; B 192 390 349 694 ; L quoteright quotedblright ;
+C 40 ; WX 408.78 ; N parenleft ; B 124 -250 491 750 ;
+C 41 ; WX 408.78 ; N parenright ; B -9 -250 358 750 ;
+C 42 ; WX 511 ; N asterisk ; B 169 320 558 750 ;
+C 43 ; WX 766.5 ; N plus ; B 114 -57 726 557 ;
+C 44 ; WX 306.61 ; N comma ; B 46 -194 200 110 ; L comma quotedblbase ;
+C 45 ; WX 357.67 ; N hyphen ; B 59 185 314 245 ; L hyphen endash ;
+C 46 ; WX 306.61 ; N period ; B 85 0 198 110 ;
+C 47 ; WX 511 ; N slash ; B -8 -250 592 750 ;
+C 48 ; WX 511 ; N zero ; B 89 -22 530 666 ;
+C 49 ; WX 511 ; N one ; B 89 0 437 666 ;
+C 50 ; WX 511 ; N two ; B 56 -22 525 666 ;
+C 51 ; WX 511 ; N three ; B 69 -22 536 666 ;
+C 52 ; WX 511 ; N four ; B 18 -194 449 666 ;
+C 53 ; WX 511 ; N five ; B 81 -22 541 666 ;
+C 54 ; WX 511 ; N six ; B 94 -22 541 666 ;
+C 55 ; WX 511 ; N seven ; B 116 -22 602 666 ;
+C 56 ; WX 511 ; N eight ; B 71 -22 528 666 ;
+C 57 ; WX 511 ; N nine ; B 79 -22 527 666 ;
+C 58 ; WX 306.61 ; N colon ; B 85 0 278 430 ;
+C 59 ; WX 306.61 ; N semicolon ; B 46 -194 278 430 ;
+C 60 ; WX 766.5 ; N less ; B 140 -33 767 533 ; L less guillemotleft ;
+C 61 ; WX 766.5 ; N equal ; B 89 140 749 360 ;
+C 62 ; WX 766.5 ; N greater ; B 72 -33 700 533 ; L greater guillemotright ;
+C 63 ; WX 511 ; N question ; B 168 0 525 716 ;
+C 64 ; WX 766.5 ; N at ; B 125 -11 762 705 ;
+C 65 ; WX 743.17 ; N A ; B 18 0 653 716 ;
+C 66 ; WX 703.72 ; N B ; B 22 0 694 683 ;
+C 67 ; WX 715.39 ; N C ; B 124 -22 786 705 ;
+C 68 ; WX 754.83 ; N D ; B 20 0 735 683 ;
+C 69 ; WX 678.17 ; N E ; B 19 0 703 680 ;
+C 70 ; WX 652.61 ; N F ; B 19 0 691 680 ;
+C 71 ; WX 773.44 ; N G ; B 124 -22 786 705 ;
+C 72 ; WX 743.17 ; N H ; B 19 0 814 683 ;
+C 73 ; WX 385.44 ; N I ; B 14 0 462 683 ;
+C 74 ; WX 524.89 ; N J ; B 64 -22 596 683 ;
+C 75 ; WX 768.72 ; N K ; B 19 0 820 683 ;
+C 76 ; WX 627.06 ; N L ; B 19 0 586 683 ;
+C 77 ; WX 896.44 ; N M ; B 23 0 963 683 ;
+C 78 ; WX 743.17 ; N N ; B 19 0 814 683 ;
+C 79 ; WX 766.5 ; N O ; B 122 -22 761 705 ;
+C 80 ; WX 678.17 ; N P ; B 20 0 690 683 ;
+C 81 ; WX 766.5 ; N Q ; B 122 -194 761 705 ;
+C 82 ; WX 729.28 ; N R ; B 20 -22 683 683 ;
+C 83 ; WX 562.11 ; N S ; B 48 -22 607 705 ;
+C 84 ; WX 715.39 ; N T ; B 148 0 780 677 ;
+C 85 ; WX 743.17 ; N U ; B 160 -22 814 683 ;
+C 86 ; WX 743.17 ; N V ; B 168 -22 828 683 ;
+C 87 ; WX 998.67 ; N W ; B 167 -22 1085 683 ;
+C 88 ; WX 743.17 ; N X ; B 10 0 785 683 ;
+C 89 ; WX 743.17 ; N Y ; B 161 0 835 683 ;
+C 90 ; WX 613.17 ; N Z ; B 53 0 678 683 ;
+C 91 ; WX 306.61 ; N bracketleft ; B 34 -250 420 750 ;
+C 92 ; WX 511 ; N backslash ; B 235 -250 349 750 ;
+C 93 ; WX 306.61 ; N bracketright ; B -40 -250 346 750 ;
+C 94 ; WX 613.17 ; N asciicircum ; B 219 457 580 628 ;
+C 95 ; WX 766.5 ; N underscore ; B 24 -233 584 -193 ;
+C 96 ; WX 306.61 ; N quoteleft ; B 178 390 335 694 ; L quoteleft quotedblleft ;
+C 97 ; WX 511 ; N a ; B 81 -11 512 441 ;
+C 98 ; WX 459.89 ; N b ; B 87 -11 435 694 ;
+C 99 ; WX 459.89 ; N c ; B 82 -11 444 441 ;
+C 100 ; WX 511 ; N d ; B 81 -11 536 694 ;
+C 101 ; WX 459.89 ; N e ; B 86 -11 442 441 ;
+C 102 ; WX 306.61 ; N f ; B -51 -205 426 705 ; L i fi ; L f ff ; L l fl ;
+C 103 ; WX 459.89 ; N g ; B 25 -205 463 441 ;
+C 104 ; WX 511 ; N h ; B 48 -11 512 694 ;
+C 105 ; WX 306.61 ; N i ; B 55 -11 308 656 ;
+C 106 ; WX 306.61 ; N j ; B -61 -205 333 656 ;
+C 107 ; WX 459.89 ; N k ; B 48 -11 474 694 ;
+C 108 ; WX 255.5 ; N l ; B 66 -11 282 694 ;
+C 109 ; WX 817.56 ; N m ; B 55 -11 819 441 ;
+C 110 ; WX 562.11 ; N n ; B 55 -11 563 441 ;
+C 111 ; WX 511 ; N o ; B 82 -11 485 441 ;
+C 112 ; WX 511 ; N p ; B -14 -194 486 441 ;
+C 113 ; WX 459.89 ; N q ; B 81 -194 473 441 ;
+C 114 ; WX 421.56 ; N r ; B 55 -11 462 441 ;
+C 115 ; WX 408.78 ; N s ; B 50 -11 392 441 ;
+C 116 ; WX 332.17 ; N t ; B 64 -11 347 626 ;
+C 117 ; WX 536.56 ; N u ; B 55 -11 538 441 ;
+C 118 ; WX 459.89 ; N v ; B 55 -11 466 442 ;
+C 119 ; WX 664.28 ; N w ; B 55 -11 670 442 ;
+C 120 ; WX 463.78 ; N x ; B 29 -11 491 441 ;
+C 121 ; WX 485.44 ; N y ; B 55 -205 490 441 ;
+C 122 ; WX 408.78 ; N z ; B 34 -11 439 441 ;
+C 123 ; WX 511 ; N braceleft ; B 126 -250 580 750 ;
+C 124 ; WX 306.61 ; N bar ; B 51 -250 331 750 ;
+C 125 ; WX 511 ; N braceright ; B 4 -250 458 750 ;
+C 126 ; WX 613.17 ; N asciitilde ; B 221 564 648 668 ;
+C 127 ; WX 357.67 ; N hyphen ; B 59 185 314 245 ;
+C 128 ; WX 743.17 ; N Abreve ; B 18 0 693 891 ;
+C 129 ; WX 743.17 ; N Aogonek ; B 18 -169 668 716 ;
+C 130 ; WX 715.39 ; N Cacute ; B 124 -22 786 893 ;
+C 131 ; WX 715.39 ; N Ccaron ; B 124 -22 786 844 ;
+C 132 ; WX 754.83 ; N Dcaron ; B 20 0 735 844 ;
+C 133 ; WX 678.17 ; N Ecaron ; B 19 0 703 844 ;
+C 134 ; WX 678.17 ; N Eogonek ; B 19 -169 703 680 ;
+C 135 ; WX 773.44 ; N Gbreve ; B 124 -22 786 891 ;
+C 136 ; WX 627.06 ; N Lacute ; B 19 0 626 893 ;
+C 137 ; WX 627.06 ; N Lquoteright ; B 19 0 632 683 ;
+C 138 ; WX 627.06 ; N Lslash ; B 19 0 586 683 ;
+C 139 ; WX 743.17 ; N Nacute ; B 19 0 814 893 ;
+C 140 ; WX 743.17 ; N Ncaron ; B 19 0 814 844 ;
+C 141 ; WX 720.94 ; N Eng ; B 13 -22 763 694 ;
+C 142 ; WX 766.5 ; N Ohungarumlaut ; B 122 -22 819 893 ;
+C 143 ; WX 729.28 ; N Racute ; B 20 -22 683 893 ;
+C 144 ; WX 729.28 ; N Rcaron ; B 20 -22 683 844 ;
+C 145 ; WX 562.11 ; N Sacute ; B 48 -22 607 893 ;
+C 146 ; WX 562.11 ; N Scaron ; B 48 -22 607 844 ;
+C 147 ; WX 562.11 ; N Scedilla ; B 48 -194 607 705 ;
+C 148 ; WX 715.39 ; N Tcaron ; B 148 0 780 844 ;
+C 149 ; WX 715.39 ; N Tcedilla ; B 148 -194 780 677 ;
+C 150 ; WX 743.17 ; N Uhungarumlaut ; B 160 -22 819 893 ;
+C 151 ; WX 743.17 ; N Uring ; B 160 -22 814 913 ;
+C 152 ; WX 743.17 ; N Ydieresis ; B 161 0 835 891 ;
+C 153 ; WX 613.17 ; N Zacute ; B 53 0 678 893 ;
+C 154 ; WX 613.17 ; N Zcaron ; B 53 0 678 844 ;
+C 155 ; WX 613.17 ; N Zdotaccent ; B 53 0 678 891 ;
+C 156 ; WX 845.33 ; N IJ ; B 14 -22 902 683 ;
+C 157 ; WX 385.44 ; N Idotaccent ; B 14 0 462 878 ;
+C 158 ; WX 511 ; N dbar ; B 81 -11 556 694 ;
+C 159 ; WX 459.89 ; N section ; B 53 -205 480 705 ;
+C 160 ; WX 511 ; N abreve ; B 81 -11 527 639 ;
+C 161 ; WX 511 ; N aogonek ; B 81 -181 512 441 ;
+C 162 ; WX 459.89 ; N cacute ; B 82 -11 486 641 ;
+C 163 ; WX 459.89 ; N ccaron ; B 82 -11 502 592 ;
+C 164 ; WX 511 ; N dquoteright ; B 81 -11 723 694 ;
+C 165 ; WX 459.89 ; N ecaron ; B 86 -11 477 592 ;
+C 166 ; WX 459.89 ; N eogonek ; B 86 -152 442 441 ;
+C 167 ; WX 459.89 ; N gbreve ; B 25 -205 502 639 ;
+C 168 ; WX 255.5 ; N lacute ; B 66 -11 450 905 ;
+C 169 ; WX 255.5 ; N lquoteright ; B 66 -11 467 694 ;
+C 170 ; WX 255.5 ; N lslash ; B 34 -11 288 694 ;
+C 171 ; WX 562.11 ; N nacute ; B 55 -11 563 641 ;
+C 172 ; WX 562.11 ; N ncaron ; B 55 -11 563 592 ;
+C 173 ; WX 562.11 ; N eng ; B 55 -205 494 441 ;
+C 174 ; WX 511 ; N ohungarumlaut ; B 82 -11 629 641 ;
+C 175 ; WX 421.56 ; N racute ; B 55 -11 462 641 ;
+C 176 ; WX 421.56 ; N rcaron ; B 55 -11 462 592 ;
+C 177 ; WX 408.78 ; N sacute ; B 50 -11 461 641 ;
+C 178 ; WX 408.78 ; N scaron ; B 50 -11 451 592 ;
+C 179 ; WX 408.78 ; N scedilla ; B 22 -194 392 441 ;
+C 180 ; WX 332.17 ; N tquoteright ; B 64 -11 462 704 ;
+C 181 ; WX 332.17 ; N tcedilla ; B 22 -194 347 626 ;
+C 182 ; WX 536.56 ; N uhungarumlaut ; B 55 -11 642 641 ;
+C 183 ; WX 536.56 ; N uring ; B 55 -11 538 661 ;
+C 184 ; WX 485.44 ; N ydieresis ; B 55 -205 505 638 ;
+C 185 ; WX 408.78 ; N zacute ; B 34 -11 461 641 ;
+C 186 ; WX 408.78 ; N zcaron ; B 34 -11 451 592 ;
+C 187 ; WX 408.78 ; N zdotaccent ; B 34 -11 439 670 ;
+C 188 ; WX 562.11 ; N ij ; B 55 -205 588 656 ;
+C 189 ; WX 306.61 ; N exclamdown ; B 31 -216 295 500 ;
+C 190 ; WX 511 ; N questiondown ; B 59 -216 416 500 ;
+C 191 ; WX 768.89 ; N sterling ; B 62 -11 672 709 ;
+C 192 ; WX 743.17 ; N Agrave ; B 18 0 653 893 ;
+C 193 ; WX 743.17 ; N Aacute ; B 18 0 677 893 ;
+C 194 ; WX 743.17 ; N Acircumflex ; B 18 0 653 891 ;
+C 195 ; WX 743.17 ; N Atilde ; B 18 0 704 891 ;
+C 196 ; WX 743.17 ; N Adieresis ; B 18 0 683 891 ;
+C 197 ; WX 743.17 ; N Aring ; B 18 0 653 872 ;
+C 198 ; WX 882.56 ; N AE ; B 18 0 909 683 ;
+C 199 ; WX 715.39 ; N Ccedilla ; B 124 -194 786 705 ;
+C 200 ; WX 678.17 ; N Egrave ; B 19 0 703 893 ;
+C 201 ; WX 678.17 ; N Eacute ; B 19 0 703 893 ;
+C 202 ; WX 678.17 ; N Ecircumflex ; B 19 0 703 891 ;
+C 203 ; WX 678.17 ; N Edieresis ; B 19 0 703 891 ;
+C 204 ; WX 385.44 ; N Igrave ; B 14 0 462 893 ;
+C 205 ; WX 385.44 ; N Iacute ; B 14 0 498 893 ;
+C 206 ; WX 385.44 ; N Icircumflex ; B 14 0 468 891 ;
+C 207 ; WX 385.44 ; N Idieresis ; B 14 0 504 891 ;
+C 208 ; WX 754.83 ; N Eth ; B 20 0 735 683 ;
+C 209 ; WX 743.17 ; N Ntilde ; B 19 0 814 891 ;
+C 210 ; WX 766.5 ; N Ograve ; B 122 -22 761 893 ;
+C 211 ; WX 766.5 ; N Oacute ; B 122 -22 761 893 ;
+C 212 ; WX 766.5 ; N Ocircumflex ; B 122 -22 761 891 ;
+C 213 ; WX 766.5 ; N Otilde ; B 122 -22 761 891 ;
+C 214 ; WX 766.5 ; N Odieresis ; B 122 -22 761 891 ;
+C 215 ; WX 984.78 ; N OE ; B 122 -22 1011 705 ;
+C 216 ; WX 766.5 ; N Oslash ; B 94 -62 791 745 ;
+C 217 ; WX 743.17 ; N Ugrave ; B 160 -22 814 893 ;
+C 218 ; WX 743.17 ; N Uacute ; B 160 -22 814 893 ;
+C 219 ; WX 743.17 ; N Ucircumflex ; B 160 -22 814 891 ;
+C 220 ; WX 743.17 ; N Udieresis ; B 160 -22 814 891 ;
+C 221 ; WX 743.17 ; N Yacute ; B 161 0 835 893 ;
+C 222 ; WX 627.06 ; N Thorn ; B 22 0 607 683 ;
+C 223 ; WX 1073.06 ; N Germandbls ; B 48 -22 1119 705 ;
+C 224 ; WX 511 ; N agrave ; B 81 -11 512 641 ;
+C 225 ; WX 511 ; N aacute ; B 81 -11 512 641 ;
+C 226 ; WX 511 ; N acircumflex ; B 81 -11 512 639 ;
+C 227 ; WX 511 ; N atilde ; B 81 -11 521 669 ;
+C 228 ; WX 511 ; N adieresis ; B 81 -11 518 638 ;
+C 229 ; WX 511 ; N aring ; B 81 -11 512 661 ;
+C 230 ; WX 715.39 ; N ae ; B 64 -11 693 441 ;
+C 231 ; WX 459.89 ; N ccedilla ; B 73 -194 444 441 ;
+C 232 ; WX 459.89 ; N egrave ; B 86 -11 442 641 ;
+C 233 ; WX 459.89 ; N eacute ; B 86 -11 442 641 ;
+C 234 ; WX 459.89 ; N ecircumflex ; B 86 -11 456 639 ;
+C 235 ; WX 459.89 ; N edieresis ; B 86 -11 493 638 ;
+C 236 ; WX 306.61 ; N igrave ; B 55 -11 308 641 ;
+C 237 ; WX 306.61 ; N iacute ; B 55 -11 410 641 ;
+C 238 ; WX 306.61 ; N icircumflex ; B 55 -11 348 639 ;
+C 239 ; WX 306.61 ; N idieresis ; B 55 -11 416 638 ;
+C 240 ; WX 511 ; N eth ; B 71 -11 534 694 ;
+C 241 ; WX 562.11 ; N ntilde ; B 55 -11 572 669 ;
+C 242 ; WX 511 ; N ograve ; B 82 -11 485 641 ;
+C 243 ; WX 511 ; N oacute ; B 82 -11 512 641 ;
+C 244 ; WX 511 ; N ocircumflex ; B 82 -11 485 639 ;
+C 245 ; WX 511 ; N otilde ; B 82 -11 547 669 ;
+C 246 ; WX 511 ; N odieresis ; B 82 -11 518 638 ;
+C 247 ; WX 715.39 ; N oe ; B 80 -15 693 445 ;
+C 248 ; WX 511 ; N oslash ; B 40 -109 527 540 ;
+C 249 ; WX 536.56 ; N ugrave ; B 55 -11 538 641 ;
+C 250 ; WX 536.56 ; N uacute ; B 55 -11 538 641 ;
+C 251 ; WX 536.56 ; N ucircumflex ; B 55 -11 538 639 ;
+C 252 ; WX 536.56 ; N udieresis ; B 55 -11 538 638 ;
+C 253 ; WX 485.44 ; N yacute ; B 55 -205 499 641 ;
+C 254 ; WX 511 ; N thorn ; B -34 -194 491 694 ;
+C 255 ; WX 536.56 ; N germandbls ; B -46 -205 552 705 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 2061
+KPX A C -25.55
+KPX A Cacute -25.55
+KPX A Ccaron -25.55
+KPX A G -25.55
+KPX A Gbreve -25.55
+KPX A O -25.55
+KPX A Oacute -25.55
+KPX A Ocircumflex -25.55
+KPX A Odieresis -25.55
+KPX A Ograve -25.55
+KPX A Ohungarumlaut -25.55
+KPX A Oslash -25.55
+KPX A Otilde -25.55
+KPX A Q -25.55
+KPX A T -76.65
+KPX A Tcaron -76.65
+KPX A Tcedilla -76.65
+KPX A U -25.55
+KPX A Uacute -25.55
+KPX A Ucircumflex -25.55
+KPX A Udieresis -25.55
+KPX A Ugrave -25.55
+KPX A Uhungarumlaut -25.55
+KPX A Uring -25.55
+KPX A V -102.2
+KPX A W -102.2
+KPX A Y -76.65
+KPX A Ydieresis -76.65
+KPX A a -51.1
+KPX A aacute -51.1
+KPX A acircumflex -51.1
+KPX A acircumflex -51.1
+KPX A adieresis -51.1
+KPX A ae -51.1
+KPX A agrave -51.1
+KPX A aogonek -51.1
+KPX A aring -51.1
+KPX A atilde -51.1
+KPX A b -25.55
+KPX A c -51.1
+KPX A cacute -51.1
+KPX A cacute -51.1
+KPX A ccaron -51.1
+KPX A ccedilla -51.1
+KPX A d -51.1
+KPX A dbar -51.1
+KPX A e -51.1
+KPX A eacute -51.1
+KPX A ecaron -51.1
+KPX A ecircumflex -51.1
+KPX A edieresis -51.1
+KPX A egrave -51.1
+KPX A eogonek -51.1
+KPX A g -51.1
+KPX A gbreve -51.1
+KPX A h -25.55
+KPX A i -25.55
+KPX A iacute -25.55
+KPX A k -25.55
+KPX A l -25.55
+KPX A lacute -25.55
+KPX A lquoteright -25.55
+KPX A m -25.55
+KPX A n -25.55
+KPX A o -51.1
+KPX A oacute -51.1
+KPX A ocircumflex -51.1
+KPX A odieresis -51.1
+KPX A oe -51.1
+KPX A ograve -51.1
+KPX A ohungarumlaut -51.1
+KPX A oslash -51.1
+KPX A otilde -51.1
+KPX A q -51.1
+KPX A r -25.55
+KPX A t -25.55
+KPX A tcedilla -25.55
+KPX A tquoteright -25.55
+KPX A u -25.55
+KPX A uacute -25.55
+KPX A ucircumflex -25.55
+KPX A udieresis -25.55
+KPX A ugrave -25.55
+KPX A uhungarumlaut -25.55
+KPX A uring -25.55
+KPX A v -25.55
+KPX A w -25.55
+KPX Aacute C -25.55
+KPX Aacute Cacute -25.55
+KPX Aacute Ccaron -25.55
+KPX Aacute G -25.55
+KPX Aacute Gbreve -25.55
+KPX Aacute O -25.55
+KPX Aacute Oacute -25.55
+KPX Aacute Ocircumflex -25.55
+KPX Aacute Odieresis -25.55
+KPX Aacute Ograve -25.55
+KPX Aacute Ohungarumlaut -25.55
+KPX Aacute Oslash -25.55
+KPX Aacute Otilde -25.55
+KPX Aacute Q -25.55
+KPX Aacute T -76.65
+KPX Aacute Tcaron -76.65
+KPX Aacute Tcedilla -76.65
+KPX Aacute U -25.55
+KPX Aacute Uacute -25.55
+KPX Aacute Ucircumflex -25.55
+KPX Aacute Udieresis -25.55
+KPX Aacute Ugrave -25.55
+KPX Aacute Uhungarumlaut -25.55
+KPX Aacute Uring -25.55
+KPX Aacute V -102.2
+KPX Aacute W -102.2
+KPX Aacute Y -76.65
+KPX Aacute Ydieresis -76.65
+KPX Aacute a -51.1
+KPX Aacute aacute -51.1
+KPX Aacute acircumflex -51.1
+KPX Aacute acircumflex -51.1
+KPX Aacute adieresis -51.1
+KPX Aacute ae -51.1
+KPX Aacute agrave -51.1
+KPX Aacute aogonek -51.1
+KPX Aacute aring -51.1
+KPX Aacute atilde -51.1
+KPX Aacute b -25.55
+KPX Aacute c -51.1
+KPX Aacute cacute -51.1
+KPX Aacute cacute -51.1
+KPX Aacute ccaron -51.1
+KPX Aacute ccedilla -51.1
+KPX Aacute d -51.1
+KPX Aacute dbar -51.1
+KPX Aacute e -51.1
+KPX Aacute eacute -51.1
+KPX Aacute ecaron -51.1
+KPX Aacute ecircumflex -51.1
+KPX Aacute edieresis -51.1
+KPX Aacute egrave -51.1
+KPX Aacute eogonek -51.1
+KPX Aacute g -51.1
+KPX Aacute gbreve -51.1
+KPX Aacute h -25.55
+KPX Aacute i -25.55
+KPX Aacute iacute -25.55
+KPX Aacute k -25.55
+KPX Aacute l -25.55
+KPX Aacute lacute -25.55
+KPX Aacute lquoteright -25.55
+KPX Aacute m -25.55
+KPX Aacute n -25.55
+KPX Aacute o -51.1
+KPX Aacute oacute -51.1
+KPX Aacute ocircumflex -51.1
+KPX Aacute odieresis -51.1
+KPX Aacute oe -51.1
+KPX Aacute ograve -51.1
+KPX Aacute ohungarumlaut -51.1
+KPX Aacute oslash -51.1
+KPX Aacute otilde -51.1
+KPX Aacute q -51.1
+KPX Aacute r -25.55
+KPX Aacute t -25.55
+KPX Aacute tcedilla -25.55
+KPX Aacute tquoteright -25.55
+KPX Aacute u -25.55
+KPX Aacute uacute -25.55
+KPX Aacute ucircumflex -25.55
+KPX Aacute udieresis -25.55
+KPX Aacute ugrave -25.55
+KPX Aacute uhungarumlaut -25.55
+KPX Aacute uring -25.55
+KPX Aacute v -25.55
+KPX Aacute w -25.55
+KPX Abreve C -25.55
+KPX Abreve Cacute -25.55
+KPX Abreve Ccaron -25.55
+KPX Abreve G -25.55
+KPX Abreve Gbreve -25.55
+KPX Abreve O -25.55
+KPX Abreve Oacute -25.55
+KPX Abreve Ocircumflex -25.55
+KPX Abreve Odieresis -25.55
+KPX Abreve Ograve -25.55
+KPX Abreve Ohungarumlaut -25.55
+KPX Abreve Oslash -25.55
+KPX Abreve Otilde -25.55
+KPX Abreve Q -25.55
+KPX Abreve T -76.65
+KPX Abreve Tcaron -76.65
+KPX Abreve Tcedilla -76.65
+KPX Abreve U -25.55
+KPX Abreve Uacute -25.55
+KPX Abreve Ucircumflex -25.55
+KPX Abreve Udieresis -25.55
+KPX Abreve Ugrave -25.55
+KPX Abreve Uhungarumlaut -25.55
+KPX Abreve Uring -25.55
+KPX Abreve V -102.2
+KPX Abreve W -102.2
+KPX Abreve Y -76.65
+KPX Abreve Ydieresis -76.65
+KPX Abreve a -51.1
+KPX Abreve aacute -51.1
+KPX Abreve acircumflex -51.1
+KPX Abreve acircumflex -51.1
+KPX Abreve adieresis -51.1
+KPX Abreve ae -51.1
+KPX Abreve agrave -51.1
+KPX Abreve aogonek -51.1
+KPX Abreve aring -51.1
+KPX Abreve atilde -51.1
+KPX Abreve b -25.55
+KPX Abreve c -51.1
+KPX Abreve cacute -51.1
+KPX Abreve cacute -51.1
+KPX Abreve ccaron -51.1
+KPX Abreve ccedilla -51.1
+KPX Abreve d -51.1
+KPX Abreve dbar -51.1
+KPX Abreve e -51.1
+KPX Abreve eacute -51.1
+KPX Abreve ecaron -51.1
+KPX Abreve ecircumflex -51.1
+KPX Abreve edieresis -51.1
+KPX Abreve egrave -51.1
+KPX Abreve eogonek -51.1
+KPX Abreve g -51.1
+KPX Abreve gbreve -51.1
+KPX Abreve h -25.55
+KPX Abreve i -25.55
+KPX Abreve iacute -25.55
+KPX Abreve k -25.55
+KPX Abreve l -25.55
+KPX Abreve lacute -25.55
+KPX Abreve lquoteright -25.55
+KPX Abreve m -25.55
+KPX Abreve n -25.55
+KPX Abreve o -51.1
+KPX Abreve oacute -51.1
+KPX Abreve ocircumflex -51.1
+KPX Abreve odieresis -51.1
+KPX Abreve oe -51.1
+KPX Abreve ograve -51.1
+KPX Abreve ohungarumlaut -51.1
+KPX Abreve oslash -51.1
+KPX Abreve otilde -51.1
+KPX Abreve q -51.1
+KPX Abreve r -25.55
+KPX Abreve t -25.55
+KPX Abreve tcedilla -25.55
+KPX Abreve tquoteright -25.55
+KPX Abreve u -25.55
+KPX Abreve uacute -25.55
+KPX Abreve ucircumflex -25.55
+KPX Abreve udieresis -25.55
+KPX Abreve ugrave -25.55
+KPX Abreve uhungarumlaut -25.55
+KPX Abreve uring -25.55
+KPX Abreve v -25.55
+KPX Abreve w -25.55
+KPX Acircumflex C -25.55
+KPX Acircumflex Cacute -25.55
+KPX Acircumflex Ccaron -25.55
+KPX Acircumflex G -25.55
+KPX Acircumflex Gbreve -25.55
+KPX Acircumflex O -25.55
+KPX Acircumflex Oacute -25.55
+KPX Acircumflex Ocircumflex -25.55
+KPX Acircumflex Odieresis -25.55
+KPX Acircumflex Ograve -25.55
+KPX Acircumflex Ohungarumlaut -25.55
+KPX Acircumflex Oslash -25.55
+KPX Acircumflex Otilde -25.55
+KPX Acircumflex Q -25.55
+KPX Acircumflex T -76.65
+KPX Acircumflex Tcaron -76.65
+KPX Acircumflex Tcedilla -76.65
+KPX Acircumflex U -25.55
+KPX Acircumflex Uacute -25.55
+KPX Acircumflex Ucircumflex -25.55
+KPX Acircumflex Udieresis -25.55
+KPX Acircumflex Ugrave -25.55
+KPX Acircumflex Uhungarumlaut -25.55
+KPX Acircumflex Uring -25.55
+KPX Acircumflex V -102.2
+KPX Acircumflex W -102.2
+KPX Acircumflex Y -76.65
+KPX Acircumflex Ydieresis -76.65
+KPX Acircumflex a -51.1
+KPX Acircumflex aacute -51.1
+KPX Acircumflex acircumflex -51.1
+KPX Acircumflex acircumflex -51.1
+KPX Acircumflex adieresis -51.1
+KPX Acircumflex ae -51.1
+KPX Acircumflex agrave -51.1
+KPX Acircumflex aogonek -51.1
+KPX Acircumflex aring -51.1
+KPX Acircumflex atilde -51.1
+KPX Acircumflex b -25.55
+KPX Acircumflex c -51.1
+KPX Acircumflex cacute -51.1
+KPX Acircumflex cacute -51.1
+KPX Acircumflex ccaron -51.1
+KPX Acircumflex ccedilla -51.1
+KPX Acircumflex d -51.1
+KPX Acircumflex dbar -51.1
+KPX Acircumflex e -51.1
+KPX Acircumflex eacute -51.1
+KPX Acircumflex ecaron -51.1
+KPX Acircumflex ecircumflex -51.1
+KPX Acircumflex edieresis -51.1
+KPX Acircumflex egrave -51.1
+KPX Acircumflex eogonek -51.1
+KPX Acircumflex g -51.1
+KPX Acircumflex gbreve -51.1
+KPX Acircumflex h -25.55
+KPX Acircumflex i -25.55
+KPX Acircumflex iacute -25.55
+KPX Acircumflex k -25.55
+KPX Acircumflex l -25.55
+KPX Acircumflex lacute -25.55
+KPX Acircumflex lquoteright -25.55
+KPX Acircumflex m -25.55
+KPX Acircumflex n -25.55
+KPX Acircumflex o -51.1
+KPX Acircumflex oacute -51.1
+KPX Acircumflex ocircumflex -51.1
+KPX Acircumflex odieresis -51.1
+KPX Acircumflex oe -51.1
+KPX Acircumflex ograve -51.1
+KPX Acircumflex ohungarumlaut -51.1
+KPX Acircumflex oslash -51.1
+KPX Acircumflex otilde -51.1
+KPX Acircumflex q -51.1
+KPX Acircumflex r -25.55
+KPX Acircumflex t -25.55
+KPX Acircumflex tcedilla -25.55
+KPX Acircumflex tquoteright -25.55
+KPX Acircumflex u -25.55
+KPX Acircumflex uacute -25.55
+KPX Acircumflex ucircumflex -25.55
+KPX Acircumflex udieresis -25.55
+KPX Acircumflex ugrave -25.55
+KPX Acircumflex uhungarumlaut -25.55
+KPX Acircumflex uring -25.55
+KPX Acircumflex v -25.55
+KPX Acircumflex w -25.55
+KPX Adieresis C -25.55
+KPX Adieresis Cacute -25.55
+KPX Adieresis Ccaron -25.55
+KPX Adieresis G -25.55
+KPX Adieresis Gbreve -25.55
+KPX Adieresis O -25.55
+KPX Adieresis Oacute -25.55
+KPX Adieresis Ocircumflex -25.55
+KPX Adieresis Odieresis -25.55
+KPX Adieresis Ograve -25.55
+KPX Adieresis Ohungarumlaut -25.55
+KPX Adieresis Oslash -25.55
+KPX Adieresis Otilde -25.55
+KPX Adieresis Q -25.55
+KPX Adieresis T -76.65
+KPX Adieresis Tcaron -76.65
+KPX Adieresis Tcedilla -76.65
+KPX Adieresis U -25.55
+KPX Adieresis Uacute -25.55
+KPX Adieresis Ucircumflex -25.55
+KPX Adieresis Udieresis -25.55
+KPX Adieresis Ugrave -25.55
+KPX Adieresis Uhungarumlaut -25.55
+KPX Adieresis Uring -25.55
+KPX Adieresis V -102.2
+KPX Adieresis W -102.2
+KPX Adieresis Y -76.65
+KPX Adieresis Ydieresis -76.65
+KPX Adieresis a -51.1
+KPX Adieresis aacute -51.1
+KPX Adieresis acircumflex -51.1
+KPX Adieresis acircumflex -51.1
+KPX Adieresis adieresis -51.1
+KPX Adieresis ae -51.1
+KPX Adieresis agrave -51.1
+KPX Adieresis aogonek -51.1
+KPX Adieresis aring -51.1
+KPX Adieresis atilde -51.1
+KPX Adieresis b -25.55
+KPX Adieresis c -51.1
+KPX Adieresis cacute -51.1
+KPX Adieresis cacute -51.1
+KPX Adieresis ccaron -51.1
+KPX Adieresis ccedilla -51.1
+KPX Adieresis d -51.1
+KPX Adieresis dbar -51.1
+KPX Adieresis e -51.1
+KPX Adieresis eacute -51.1
+KPX Adieresis ecaron -51.1
+KPX Adieresis ecircumflex -51.1
+KPX Adieresis edieresis -51.1
+KPX Adieresis egrave -51.1
+KPX Adieresis eogonek -51.1
+KPX Adieresis g -51.1
+KPX Adieresis gbreve -51.1
+KPX Adieresis h -25.55
+KPX Adieresis i -25.55
+KPX Adieresis iacute -25.55
+KPX Adieresis k -25.55
+KPX Adieresis l -25.55
+KPX Adieresis lacute -25.55
+KPX Adieresis lquoteright -25.55
+KPX Adieresis m -25.55
+KPX Adieresis n -25.55
+KPX Adieresis o -51.1
+KPX Adieresis oacute -51.1
+KPX Adieresis ocircumflex -51.1
+KPX Adieresis odieresis -51.1
+KPX Adieresis oe -51.1
+KPX Adieresis ograve -51.1
+KPX Adieresis ohungarumlaut -51.1
+KPX Adieresis oslash -51.1
+KPX Adieresis otilde -51.1
+KPX Adieresis q -51.1
+KPX Adieresis r -25.55
+KPX Adieresis t -25.55
+KPX Adieresis tcedilla -25.55
+KPX Adieresis tquoteright -25.55
+KPX Adieresis u -25.55
+KPX Adieresis uacute -25.55
+KPX Adieresis ucircumflex -25.55
+KPX Adieresis udieresis -25.55
+KPX Adieresis ugrave -25.55
+KPX Adieresis uhungarumlaut -25.55
+KPX Adieresis uring -25.55
+KPX Adieresis v -25.55
+KPX Adieresis w -25.55
+KPX Agrave C -25.55
+KPX Agrave Cacute -25.55
+KPX Agrave Ccaron -25.55
+KPX Agrave G -25.55
+KPX Agrave Gbreve -25.55
+KPX Agrave O -25.55
+KPX Agrave Oacute -25.55
+KPX Agrave Ocircumflex -25.55
+KPX Agrave Odieresis -25.55
+KPX Agrave Ograve -25.55
+KPX Agrave Ohungarumlaut -25.55
+KPX Agrave Oslash -25.55
+KPX Agrave Otilde -25.55
+KPX Agrave Q -25.55
+KPX Agrave T -76.65
+KPX Agrave Tcaron -76.65
+KPX Agrave Tcedilla -76.65
+KPX Agrave U -25.55
+KPX Agrave Uacute -25.55
+KPX Agrave Ucircumflex -25.55
+KPX Agrave Udieresis -25.55
+KPX Agrave Ugrave -25.55
+KPX Agrave Uhungarumlaut -25.55
+KPX Agrave Uring -25.55
+KPX Agrave V -102.2
+KPX Agrave W -102.2
+KPX Agrave Y -76.65
+KPX Agrave Ydieresis -76.65
+KPX Agrave a -51.1
+KPX Agrave aacute -51.1
+KPX Agrave acircumflex -51.1
+KPX Agrave acircumflex -51.1
+KPX Agrave adieresis -51.1
+KPX Agrave ae -51.1
+KPX Agrave agrave -51.1
+KPX Agrave aogonek -51.1
+KPX Agrave aring -51.1
+KPX Agrave atilde -51.1
+KPX Agrave b -25.55
+KPX Agrave c -51.1
+KPX Agrave cacute -51.1
+KPX Agrave cacute -51.1
+KPX Agrave ccaron -51.1
+KPX Agrave ccedilla -51.1
+KPX Agrave d -51.1
+KPX Agrave dbar -51.1
+KPX Agrave e -51.1
+KPX Agrave eacute -51.1
+KPX Agrave ecaron -51.1
+KPX Agrave ecircumflex -51.1
+KPX Agrave edieresis -51.1
+KPX Agrave egrave -51.1
+KPX Agrave eogonek -51.1
+KPX Agrave g -51.1
+KPX Agrave gbreve -51.1
+KPX Agrave h -25.55
+KPX Agrave i -25.55
+KPX Agrave iacute -25.55
+KPX Agrave k -25.55
+KPX Agrave l -25.55
+KPX Agrave lacute -25.55
+KPX Agrave lquoteright -25.55
+KPX Agrave m -25.55
+KPX Agrave n -25.55
+KPX Agrave o -51.1
+KPX Agrave oacute -51.1
+KPX Agrave ocircumflex -51.1
+KPX Agrave odieresis -51.1
+KPX Agrave oe -51.1
+KPX Agrave ograve -51.1
+KPX Agrave ohungarumlaut -51.1
+KPX Agrave oslash -51.1
+KPX Agrave otilde -51.1
+KPX Agrave q -51.1
+KPX Agrave r -25.55
+KPX Agrave t -25.55
+KPX Agrave tcedilla -25.55
+KPX Agrave tquoteright -25.55
+KPX Agrave u -25.55
+KPX Agrave uacute -25.55
+KPX Agrave ucircumflex -25.55
+KPX Agrave udieresis -25.55
+KPX Agrave ugrave -25.55
+KPX Agrave uhungarumlaut -25.55
+KPX Agrave uring -25.55
+KPX Agrave v -25.55
+KPX Agrave w -25.55
+KPX Aogonek C -25.55
+KPX Aogonek Cacute -25.55
+KPX Aogonek Ccaron -25.55
+KPX Aogonek G -25.55
+KPX Aogonek Gbreve -25.55
+KPX Aogonek O -25.55
+KPX Aogonek Oacute -25.55
+KPX Aogonek Ocircumflex -25.55
+KPX Aogonek Odieresis -25.55
+KPX Aogonek Ograve -25.55
+KPX Aogonek Ohungarumlaut -25.55
+KPX Aogonek Oslash -25.55
+KPX Aogonek Otilde -25.55
+KPX Aogonek Q -25.55
+KPX Aogonek T -76.65
+KPX Aogonek Tcaron -76.65
+KPX Aogonek Tcedilla -76.65
+KPX Aogonek U -25.55
+KPX Aogonek Uacute -25.55
+KPX Aogonek Ucircumflex -25.55
+KPX Aogonek Udieresis -25.55
+KPX Aogonek Ugrave -25.55
+KPX Aogonek Uhungarumlaut -25.55
+KPX Aogonek Uring -25.55
+KPX Aogonek V -102.2
+KPX Aogonek W -102.2
+KPX Aogonek Y -76.65
+KPX Aogonek Ydieresis -76.65
+KPX Aogonek a -51.1
+KPX Aogonek aacute -51.1
+KPX Aogonek acircumflex -51.1
+KPX Aogonek acircumflex -51.1
+KPX Aogonek adieresis -51.1
+KPX Aogonek ae -51.1
+KPX Aogonek agrave -51.1
+KPX Aogonek aogonek -51.1
+KPX Aogonek aring -51.1
+KPX Aogonek atilde -51.1
+KPX Aogonek b -25.55
+KPX Aogonek c -51.1
+KPX Aogonek cacute -51.1
+KPX Aogonek cacute -51.1
+KPX Aogonek ccaron -51.1
+KPX Aogonek ccedilla -51.1
+KPX Aogonek d -51.1
+KPX Aogonek dbar -51.1
+KPX Aogonek e -51.1
+KPX Aogonek eacute -51.1
+KPX Aogonek ecaron -51.1
+KPX Aogonek ecircumflex -51.1
+KPX Aogonek edieresis -51.1
+KPX Aogonek egrave -51.1
+KPX Aogonek eogonek -51.1
+KPX Aogonek g -51.1
+KPX Aogonek gbreve -51.1
+KPX Aogonek h -25.55
+KPX Aogonek i -25.55
+KPX Aogonek iacute -25.55
+KPX Aogonek k -25.55
+KPX Aogonek l -25.55
+KPX Aogonek lacute -25.55
+KPX Aogonek lquoteright -25.55
+KPX Aogonek m -25.55
+KPX Aogonek n -25.55
+KPX Aogonek o -51.1
+KPX Aogonek oacute -51.1
+KPX Aogonek ocircumflex -51.1
+KPX Aogonek odieresis -51.1
+KPX Aogonek oe -51.1
+KPX Aogonek ograve -51.1
+KPX Aogonek ohungarumlaut -51.1
+KPX Aogonek oslash -51.1
+KPX Aogonek otilde -51.1
+KPX Aogonek q -51.1
+KPX Aogonek r -25.55
+KPX Aogonek t -25.55
+KPX Aogonek tcedilla -25.55
+KPX Aogonek tquoteright -25.55
+KPX Aogonek u -25.55
+KPX Aogonek uacute -25.55
+KPX Aogonek ucircumflex -25.55
+KPX Aogonek udieresis -25.55
+KPX Aogonek ugrave -25.55
+KPX Aogonek uhungarumlaut -25.55
+KPX Aogonek uring -25.55
+KPX Aogonek v -25.55
+KPX Aogonek w -25.55
+KPX Aring C -25.55
+KPX Aring Cacute -25.55
+KPX Aring Ccaron -25.55
+KPX Aring G -25.55
+KPX Aring Gbreve -25.55
+KPX Aring O -25.55
+KPX Aring Oacute -25.55
+KPX Aring Ocircumflex -25.55
+KPX Aring Odieresis -25.55
+KPX Aring Ograve -25.55
+KPX Aring Ohungarumlaut -25.55
+KPX Aring Oslash -25.55
+KPX Aring Otilde -25.55
+KPX Aring Q -25.55
+KPX Aring T -76.65
+KPX Aring Tcaron -76.65
+KPX Aring Tcedilla -76.65
+KPX Aring U -25.55
+KPX Aring Uacute -25.55
+KPX Aring Ucircumflex -25.55
+KPX Aring Udieresis -25.55
+KPX Aring Ugrave -25.55
+KPX Aring Uhungarumlaut -25.55
+KPX Aring Uring -25.55
+KPX Aring V -102.2
+KPX Aring W -102.2
+KPX Aring Y -76.65
+KPX Aring Ydieresis -76.65
+KPX Aring a -51.1
+KPX Aring aacute -51.1
+KPX Aring acircumflex -51.1
+KPX Aring acircumflex -51.1
+KPX Aring adieresis -51.1
+KPX Aring ae -51.1
+KPX Aring agrave -51.1
+KPX Aring aogonek -51.1
+KPX Aring aring -51.1
+KPX Aring atilde -51.1
+KPX Aring b -25.55
+KPX Aring c -51.1
+KPX Aring cacute -51.1
+KPX Aring cacute -51.1
+KPX Aring ccaron -51.1
+KPX Aring ccedilla -51.1
+KPX Aring d -51.1
+KPX Aring dbar -51.1
+KPX Aring e -51.1
+KPX Aring eacute -51.1
+KPX Aring ecaron -51.1
+KPX Aring ecircumflex -51.1
+KPX Aring edieresis -51.1
+KPX Aring egrave -51.1
+KPX Aring eogonek -51.1
+KPX Aring g -51.1
+KPX Aring gbreve -51.1
+KPX Aring h -25.55
+KPX Aring i -25.55
+KPX Aring iacute -25.55
+KPX Aring k -25.55
+KPX Aring l -25.55
+KPX Aring lacute -25.55
+KPX Aring lquoteright -25.55
+KPX Aring m -25.55
+KPX Aring n -25.55
+KPX Aring o -51.1
+KPX Aring oacute -51.1
+KPX Aring ocircumflex -51.1
+KPX Aring odieresis -51.1
+KPX Aring oe -51.1
+KPX Aring ograve -51.1
+KPX Aring ohungarumlaut -51.1
+KPX Aring oslash -51.1
+KPX Aring otilde -51.1
+KPX Aring q -51.1
+KPX Aring r -25.55
+KPX Aring t -25.55
+KPX Aring tcedilla -25.55
+KPX Aring tquoteright -25.55
+KPX Aring u -25.55
+KPX Aring uacute -25.55
+KPX Aring ucircumflex -25.55
+KPX Aring udieresis -25.55
+KPX Aring ugrave -25.55
+KPX Aring uhungarumlaut -25.55
+KPX Aring uring -25.55
+KPX Aring v -25.55
+KPX Aring w -25.55
+KPX Atilde C -25.55
+KPX Atilde Cacute -25.55
+KPX Atilde Ccaron -25.55
+KPX Atilde G -25.55
+KPX Atilde Gbreve -25.55
+KPX Atilde O -25.55
+KPX Atilde Oacute -25.55
+KPX Atilde Ocircumflex -25.55
+KPX Atilde Odieresis -25.55
+KPX Atilde Ograve -25.55
+KPX Atilde Ohungarumlaut -25.55
+KPX Atilde Oslash -25.55
+KPX Atilde Otilde -25.55
+KPX Atilde Q -25.55
+KPX Atilde T -76.65
+KPX Atilde Tcaron -76.65
+KPX Atilde Tcedilla -76.65
+KPX Atilde U -25.55
+KPX Atilde Uacute -25.55
+KPX Atilde Ucircumflex -25.55
+KPX Atilde Udieresis -25.55
+KPX Atilde Ugrave -25.55
+KPX Atilde Uhungarumlaut -25.55
+KPX Atilde Uring -25.55
+KPX Atilde V -102.2
+KPX Atilde W -102.2
+KPX Atilde Y -76.65
+KPX Atilde Ydieresis -76.65
+KPX Atilde a -51.1
+KPX Atilde aacute -51.1
+KPX Atilde acircumflex -51.1
+KPX Atilde acircumflex -51.1
+KPX Atilde adieresis -51.1
+KPX Atilde ae -51.1
+KPX Atilde agrave -51.1
+KPX Atilde aogonek -51.1
+KPX Atilde aring -51.1
+KPX Atilde atilde -51.1
+KPX Atilde b -25.55
+KPX Atilde c -51.1
+KPX Atilde cacute -51.1
+KPX Atilde cacute -51.1
+KPX Atilde ccaron -51.1
+KPX Atilde ccedilla -51.1
+KPX Atilde d -51.1
+KPX Atilde dbar -51.1
+KPX Atilde e -51.1
+KPX Atilde eacute -51.1
+KPX Atilde ecaron -51.1
+KPX Atilde ecircumflex -51.1
+KPX Atilde edieresis -51.1
+KPX Atilde egrave -51.1
+KPX Atilde eogonek -51.1
+KPX Atilde g -51.1
+KPX Atilde gbreve -51.1
+KPX Atilde h -25.55
+KPX Atilde i -25.55
+KPX Atilde iacute -25.55
+KPX Atilde k -25.55
+KPX Atilde l -25.55
+KPX Atilde lacute -25.55
+KPX Atilde lquoteright -25.55
+KPX Atilde m -25.55
+KPX Atilde n -25.55
+KPX Atilde o -51.1
+KPX Atilde oacute -51.1
+KPX Atilde ocircumflex -51.1
+KPX Atilde odieresis -51.1
+KPX Atilde oe -51.1
+KPX Atilde ograve -51.1
+KPX Atilde ohungarumlaut -51.1
+KPX Atilde oslash -51.1
+KPX Atilde otilde -51.1
+KPX Atilde q -51.1
+KPX Atilde r -25.55
+KPX Atilde t -25.55
+KPX Atilde tcedilla -25.55
+KPX Atilde tquoteright -25.55
+KPX Atilde u -25.55
+KPX Atilde uacute -25.55
+KPX Atilde ucircumflex -25.55
+KPX Atilde udieresis -25.55
+KPX Atilde ugrave -25.55
+KPX Atilde uhungarumlaut -25.55
+KPX Atilde uring -25.55
+KPX Atilde v -25.55
+KPX Atilde w -25.55
+KPX D A -25.55
+KPX D Aacute -25.55
+KPX D Abreve -25.55
+KPX D Acircumflex -25.55
+KPX D Adieresis -25.55
+KPX D Agrave -25.55
+KPX D Aogonek -25.55
+KPX D Aring -25.55
+KPX D Atilde -25.55
+KPX D V -25.55
+KPX D W -25.55
+KPX D X -25.55
+KPX D Y -25.55
+KPX D Yacute -25.55
+KPX Dcaron A -25.55
+KPX Dcaron Aacute -25.55
+KPX Dcaron Abreve -25.55
+KPX Dcaron Acircumflex -25.55
+KPX Dcaron Adieresis -25.55
+KPX Dcaron Agrave -25.55
+KPX Dcaron Aogonek -25.55
+KPX Dcaron Aring -25.55
+KPX Dcaron Atilde -25.55
+KPX Dcaron V -25.55
+KPX Dcaron W -25.55
+KPX Dcaron X -25.55
+KPX Dcaron Y -25.55
+KPX Dcaron Yacute -25.55
+KPX F A -102.2
+KPX F Aacute -102.2
+KPX F Abreve -102.2
+KPX F Acircumflex -102.2
+KPX F Adieresis -102.2
+KPX F Agrave -102.2
+KPX F Aogonek -102.2
+KPX F Aring -102.2
+KPX F Atilde -102.2
+KPX F C -25.55
+KPX F Cacute -25.55
+KPX F Ccaron -25.55
+KPX F G -25.55
+KPX F Gbreve -25.55
+KPX F O -25.55
+KPX F Oacute -25.55
+KPX F Ocircumflex -25.55
+KPX F Odieresis -25.55
+KPX F Ograve -25.55
+KPX F Ohungarumlaut -25.55
+KPX F Oslash -25.55
+KPX F Otilde -25.55
+KPX F Q -25.55
+KPX F a -76.65
+KPX F aogonek -76.65
+KPX F e -76.65
+KPX F eogonek -76.65
+KPX F o -76.65
+KPX F r -76.65
+KPX F u -76.65
+KPX K C -25.55
+KPX K Cacute -25.55
+KPX K Ccaron -25.55
+KPX K G -25.55
+KPX K Gbreve -25.55
+KPX K O -25.55
+KPX K Oacute -25.55
+KPX K Ocircumflex -25.55
+KPX K Odieresis -25.55
+KPX K Ograve -25.55
+KPX K Ohungarumlaut -25.55
+KPX K Oslash -25.55
+KPX K Otilde -25.55
+KPX K Q -25.55
+KPX L T -76.65
+KPX L Tcaron -76.65
+KPX L Tcedilla -76.65
+KPX L V -102.2
+KPX L W -102.2
+KPX L Y -76.65
+KPX L Ydieresis -76.65
+KPX L a -51.1
+KPX L aacute -51.1
+KPX L acircumflex -51.1
+KPX L acircumflex -51.1
+KPX L adieresis -51.1
+KPX L ae -51.1
+KPX L agrave -51.1
+KPX L aogonek -51.1
+KPX L aring -51.1
+KPX L atilde -51.1
+KPX L c -51.1
+KPX L cacute -51.1
+KPX L cacute -51.1
+KPX L ccaron -51.1
+KPX L ccedilla -51.1
+KPX L d -51.1
+KPX L dbar -51.1
+KPX L e -51.1
+KPX L eacute -51.1
+KPX L ecaron -51.1
+KPX L ecircumflex -51.1
+KPX L edieresis -51.1
+KPX L egrave -51.1
+KPX L eogonek -51.1
+KPX L g -51.1
+KPX L gbreve -51.1
+KPX L o -51.1
+KPX L oacute -51.1
+KPX L ocircumflex -51.1
+KPX L odieresis -51.1
+KPX L oe -51.1
+KPX L ograve -51.1
+KPX L ohungarumlaut -51.1
+KPX L oslash -51.1
+KPX L otilde -51.1
+KPX L q -51.1
+KPX O A -25.55
+KPX O Aacute -25.55
+KPX O Abreve -25.55
+KPX O Acircumflex -25.55
+KPX O Adieresis -25.55
+KPX O Agrave -25.55
+KPX O Aogonek -25.55
+KPX O Aring -25.55
+KPX O Atilde -25.55
+KPX O V -25.55
+KPX O W -25.55
+KPX O X -25.55
+KPX O Y -25.55
+KPX O Yacute -25.55
+KPX Oacute A -25.55
+KPX Oacute Aacute -25.55
+KPX Oacute Abreve -25.55
+KPX Oacute Acircumflex -25.55
+KPX Oacute Adieresis -25.55
+KPX Oacute Agrave -25.55
+KPX Oacute Aogonek -25.55
+KPX Oacute Aring -25.55
+KPX Oacute Atilde -25.55
+KPX Oacute V -25.55
+KPX Oacute W -25.55
+KPX Oacute X -25.55
+KPX Oacute Y -25.55
+KPX Oacute Yacute -25.55
+KPX Ocircumflex A -25.55
+KPX Ocircumflex Aacute -25.55
+KPX Ocircumflex Abreve -25.55
+KPX Ocircumflex Acircumflex -25.55
+KPX Ocircumflex Adieresis -25.55
+KPX Ocircumflex Agrave -25.55
+KPX Ocircumflex Aogonek -25.55
+KPX Ocircumflex Aring -25.55
+KPX Ocircumflex Atilde -25.55
+KPX Ocircumflex V -25.55
+KPX Ocircumflex W -25.55
+KPX Ocircumflex X -25.55
+KPX Ocircumflex Y -25.55
+KPX Ocircumflex Yacute -25.55
+KPX Odieresis A -25.55
+KPX Odieresis Aacute -25.55
+KPX Odieresis Abreve -25.55
+KPX Odieresis Acircumflex -25.55
+KPX Odieresis Adieresis -25.55
+KPX Odieresis Agrave -25.55
+KPX Odieresis Aogonek -25.55
+KPX Odieresis Aring -25.55
+KPX Odieresis Atilde -25.55
+KPX Odieresis V -25.55
+KPX Odieresis W -25.55
+KPX Odieresis X -25.55
+KPX Odieresis Y -25.55
+KPX Odieresis Yacute -25.55
+KPX Ograve A -25.55
+KPX Ograve Aacute -25.55
+KPX Ograve Abreve -25.55
+KPX Ograve Acircumflex -25.55
+KPX Ograve Adieresis -25.55
+KPX Ograve Agrave -25.55
+KPX Ograve Aogonek -25.55
+KPX Ograve Aring -25.55
+KPX Ograve Atilde -25.55
+KPX Ograve V -25.55
+KPX Ograve W -25.55
+KPX Ograve X -25.55
+KPX Ograve Y -25.55
+KPX Ograve Yacute -25.55
+KPX Ohungarumlaut A -25.55
+KPX Ohungarumlaut Aacute -25.55
+KPX Ohungarumlaut Abreve -25.55
+KPX Ohungarumlaut Acircumflex -25.55
+KPX Ohungarumlaut Adieresis -25.55
+KPX Ohungarumlaut Agrave -25.55
+KPX Ohungarumlaut Aogonek -25.55
+KPX Ohungarumlaut Aring -25.55
+KPX Ohungarumlaut Atilde -25.55
+KPX Ohungarumlaut V -25.55
+KPX Ohungarumlaut W -25.55
+KPX Ohungarumlaut X -25.55
+KPX Ohungarumlaut Y -25.55
+KPX Ohungarumlaut Yacute -25.55
+KPX Oslash A -25.55
+KPX Oslash Aacute -25.55
+KPX Oslash Abreve -25.55
+KPX Oslash Acircumflex -25.55
+KPX Oslash Adieresis -25.55
+KPX Oslash Agrave -25.55
+KPX Oslash Aogonek -25.55
+KPX Oslash Aring -25.55
+KPX Oslash Atilde -25.55
+KPX Oslash V -25.55
+KPX Oslash W -25.55
+KPX Oslash X -25.55
+KPX Oslash Y -25.55
+KPX Oslash Yacute -25.55
+KPX Otilde A -25.55
+KPX Otilde Aacute -25.55
+KPX Otilde Abreve -25.55
+KPX Otilde Acircumflex -25.55
+KPX Otilde Adieresis -25.55
+KPX Otilde Agrave -25.55
+KPX Otilde Aogonek -25.55
+KPX Otilde Aring -25.55
+KPX Otilde Atilde -25.55
+KPX Otilde V -25.55
+KPX Otilde W -25.55
+KPX Otilde X -25.55
+KPX Otilde Y -25.55
+KPX Otilde Yacute -25.55
+KPX P A -76.65
+KPX P Aacute -76.65
+KPX P Abreve -76.65
+KPX P Acircumflex -76.65
+KPX P Adieresis -76.65
+KPX P Agrave -76.65
+KPX P Aogonek -76.65
+KPX P Aring -76.65
+KPX P Atilde -76.65
+KPX R C -25.55
+KPX R Cacute -25.55
+KPX R Ccaron -25.55
+KPX R G -25.55
+KPX R Gbreve -25.55
+KPX R O -25.55
+KPX R Oacute -25.55
+KPX R Ocircumflex -25.55
+KPX R Odieresis -25.55
+KPX R Ograve -25.55
+KPX R Ohungarumlaut -25.55
+KPX R Oslash -25.55
+KPX R Otilde -25.55
+KPX R Q -25.55
+KPX R T -76.65
+KPX R Tcaron -76.65
+KPX R Tcedilla -76.65
+KPX R U -25.55
+KPX R Uacute -25.55
+KPX R Ucircumflex -25.55
+KPX R Udieresis -25.55
+KPX R Ugrave -25.55
+KPX R Uhungarumlaut -25.55
+KPX R Uring -25.55
+KPX R V -102.2
+KPX R W -102.2
+KPX R Y -76.65
+KPX R Ydieresis -76.65
+KPX R a -51.1
+KPX R aacute -51.1
+KPX R acircumflex -51.1
+KPX R acircumflex -51.1
+KPX R adieresis -51.1
+KPX R ae -51.1
+KPX R agrave -51.1
+KPX R aogonek -51.1
+KPX R aring -51.1
+KPX R atilde -51.1
+KPX R b -25.55
+KPX R c -51.1
+KPX R cacute -51.1
+KPX R cacute -51.1
+KPX R ccaron -51.1
+KPX R ccedilla -51.1
+KPX R d -51.1
+KPX R dbar -51.1
+KPX R e -51.1
+KPX R eacute -51.1
+KPX R ecaron -51.1
+KPX R ecircumflex -51.1
+KPX R edieresis -51.1
+KPX R egrave -51.1
+KPX R eogonek -51.1
+KPX R g -51.1
+KPX R gbreve -51.1
+KPX R h -25.55
+KPX R i -25.55
+KPX R iacute -25.55
+KPX R k -25.55
+KPX R l -25.55
+KPX R lacute -25.55
+KPX R lquoteright -25.55
+KPX R m -25.55
+KPX R n -25.55
+KPX R o -51.1
+KPX R oacute -51.1
+KPX R ocircumflex -51.1
+KPX R odieresis -51.1
+KPX R oe -51.1
+KPX R ograve -51.1
+KPX R ohungarumlaut -51.1
+KPX R oslash -51.1
+KPX R otilde -51.1
+KPX R q -51.1
+KPX R r -25.55
+KPX R t -25.55
+KPX R tcedilla -25.55
+KPX R tquoteright -25.55
+KPX R u -25.55
+KPX R uacute -25.55
+KPX R ucircumflex -25.55
+KPX R udieresis -25.55
+KPX R ugrave -25.55
+KPX R uhungarumlaut -25.55
+KPX R uring -25.55
+KPX R v -25.55
+KPX R w -25.55
+KPX Racute C -25.55
+KPX Racute Cacute -25.55
+KPX Racute Ccaron -25.55
+KPX Racute G -25.55
+KPX Racute Gbreve -25.55
+KPX Racute O -25.55
+KPX Racute Oacute -25.55
+KPX Racute Ocircumflex -25.55
+KPX Racute Odieresis -25.55
+KPX Racute Ograve -25.55
+KPX Racute Ohungarumlaut -25.55
+KPX Racute Oslash -25.55
+KPX Racute Otilde -25.55
+KPX Racute Q -25.55
+KPX Racute T -76.65
+KPX Racute Tcaron -76.65
+KPX Racute Tcedilla -76.65
+KPX Racute U -25.55
+KPX Racute Uacute -25.55
+KPX Racute Ucircumflex -25.55
+KPX Racute Udieresis -25.55
+KPX Racute Ugrave -25.55
+KPX Racute Uhungarumlaut -25.55
+KPX Racute Uring -25.55
+KPX Racute V -102.2
+KPX Racute W -102.2
+KPX Racute Y -76.65
+KPX Racute Ydieresis -76.65
+KPX Racute a -51.1
+KPX Racute aacute -51.1
+KPX Racute acircumflex -51.1
+KPX Racute acircumflex -51.1
+KPX Racute adieresis -51.1
+KPX Racute ae -51.1
+KPX Racute agrave -51.1
+KPX Racute aogonek -51.1
+KPX Racute aring -51.1
+KPX Racute atilde -51.1
+KPX Racute b -25.55
+KPX Racute c -51.1
+KPX Racute cacute -51.1
+KPX Racute cacute -51.1
+KPX Racute ccaron -51.1
+KPX Racute ccedilla -51.1
+KPX Racute d -51.1
+KPX Racute dbar -51.1
+KPX Racute e -51.1
+KPX Racute eacute -51.1
+KPX Racute ecaron -51.1
+KPX Racute ecircumflex -51.1
+KPX Racute edieresis -51.1
+KPX Racute egrave -51.1
+KPX Racute eogonek -51.1
+KPX Racute g -51.1
+KPX Racute gbreve -51.1
+KPX Racute h -25.55
+KPX Racute i -25.55
+KPX Racute iacute -25.55
+KPX Racute k -25.55
+KPX Racute l -25.55
+KPX Racute lacute -25.55
+KPX Racute lquoteright -25.55
+KPX Racute m -25.55
+KPX Racute n -25.55
+KPX Racute o -51.1
+KPX Racute oacute -51.1
+KPX Racute ocircumflex -51.1
+KPX Racute odieresis -51.1
+KPX Racute oe -51.1
+KPX Racute ograve -51.1
+KPX Racute ohungarumlaut -51.1
+KPX Racute oslash -51.1
+KPX Racute otilde -51.1
+KPX Racute q -51.1
+KPX Racute r -25.55
+KPX Racute t -25.55
+KPX Racute tcedilla -25.55
+KPX Racute tquoteright -25.55
+KPX Racute u -25.55
+KPX Racute uacute -25.55
+KPX Racute ucircumflex -25.55
+KPX Racute udieresis -25.55
+KPX Racute ugrave -25.55
+KPX Racute uhungarumlaut -25.55
+KPX Racute uring -25.55
+KPX Racute v -25.55
+KPX Racute w -25.55
+KPX T A -76.65
+KPX T Aacute -76.65
+KPX T Abreve -76.65
+KPX T Acircumflex -76.65
+KPX T Adieresis -76.65
+KPX T Agrave -76.65
+KPX T Aogonek -76.65
+KPX T Aring -76.65
+KPX T Atilde -76.65
+KPX T a -76.65
+KPX T e -76.65
+KPX T o -76.65
+KPX T r -76.65
+KPX T u -76.65
+KPX T y -76.65
+KPX Tcaron A -76.65
+KPX Tcaron Aacute -76.65
+KPX Tcaron Abreve -76.65
+KPX Tcaron Acircumflex -76.65
+KPX Tcaron Adieresis -76.65
+KPX Tcaron Agrave -76.65
+KPX Tcaron Aogonek -76.65
+KPX Tcaron Aring -76.65
+KPX Tcaron Atilde -76.65
+KPX Tcaron a -76.65
+KPX Tcaron e -76.65
+KPX Tcaron o -76.65
+KPX Tcaron r -76.65
+KPX Tcaron u -76.65
+KPX Tcaron y -76.65
+KPX Tcedilla A -76.65
+KPX Tcedilla Aacute -76.65
+KPX Tcedilla Abreve -76.65
+KPX Tcedilla Acircumflex -76.65
+KPX Tcedilla Adieresis -76.65
+KPX Tcedilla Agrave -76.65
+KPX Tcedilla Aogonek -76.65
+KPX Tcedilla Aring -76.65
+KPX Tcedilla Atilde -76.65
+KPX Tcedilla a -76.65
+KPX Tcedilla e -76.65
+KPX Tcedilla o -76.65
+KPX Tcedilla r -76.65
+KPX Tcedilla u -76.65
+KPX Tcedilla y -76.65
+KPX V A -102.2
+KPX V Aacute -102.2
+KPX V Abreve -102.2
+KPX V Acircumflex -102.2
+KPX V Adieresis -102.2
+KPX V Agrave -102.2
+KPX V Aogonek -102.2
+KPX V Aring -102.2
+KPX V Atilde -102.2
+KPX V C -25.55
+KPX V Cacute -25.55
+KPX V Ccaron -25.55
+KPX V G -25.55
+KPX V Gbreve -25.55
+KPX V O -25.55
+KPX V Oacute -25.55
+KPX V Ocircumflex -25.55
+KPX V Odieresis -25.55
+KPX V Ograve -25.55
+KPX V Ohungarumlaut -25.55
+KPX V Oslash -25.55
+KPX V Otilde -25.55
+KPX V Q -25.55
+KPX V a -76.65
+KPX V aogonek -76.65
+KPX V e -76.65
+KPX V eogonek -76.65
+KPX V o -76.65
+KPX V r -76.65
+KPX V u -76.65
+KPX W A -76.65
+KPX W Aacute -76.65
+KPX W Abreve -76.65
+KPX W Acircumflex -76.65
+KPX W Adieresis -76.65
+KPX W Agrave -76.65
+KPX W Aogonek -76.65
+KPX W Aring -76.65
+KPX W Atilde -76.65
+KPX X C -25.55
+KPX X Cacute -25.55
+KPX X Ccaron -25.55
+KPX X G -25.55
+KPX X Gbreve -25.55
+KPX X O -25.55
+KPX X Oacute -25.55
+KPX X Ocircumflex -25.55
+KPX X Odieresis -25.55
+KPX X Ograve -25.55
+KPX X Ohungarumlaut -25.55
+KPX X Oslash -25.55
+KPX X Otilde -25.55
+KPX X Q -25.55
+KPX Y A -76.65
+KPX Y Aacute -76.65
+KPX Y Abreve -76.65
+KPX Y Acircumflex -76.65
+KPX Y Adieresis -76.65
+KPX Y Agrave -76.65
+KPX Y Aogonek -76.65
+KPX Y Aring -76.65
+KPX Y Atilde -76.65
+KPX Y a -76.65
+KPX Y e -76.65
+KPX Y o -76.65
+KPX Y r -76.65
+KPX Y u -76.65
+KPX Yacute A -76.65
+KPX Yacute Aacute -76.65
+KPX Yacute Abreve -76.65
+KPX Yacute Acircumflex -76.65
+KPX Yacute Adieresis -76.65
+KPX Yacute Agrave -76.65
+KPX Yacute Aogonek -76.65
+KPX Yacute Aring -76.65
+KPX Yacute Atilde -76.65
+KPX Yacute a -76.65
+KPX Yacute e -76.65
+KPX Yacute o -76.65
+KPX Yacute r -76.65
+KPX Yacute u -76.65
+KPX b a -51.1
+KPX b aacute -51.1
+KPX b acircumflex -51.1
+KPX b acircumflex -51.1
+KPX b adieresis -51.1
+KPX b ae -51.1
+KPX b agrave -51.1
+KPX b aogonek -51.1
+KPX b aring -51.1
+KPX b atilde -51.1
+KPX b c -51.1
+KPX b cacute -51.1
+KPX b cacute -51.1
+KPX b ccaron -51.1
+KPX b ccedilla -51.1
+KPX b d -51.1
+KPX b dbar -51.1
+KPX b e -51.1
+KPX b eacute -51.1
+KPX b ecaron -51.1
+KPX b ecircumflex -51.1
+KPX b edieresis -51.1
+KPX b egrave -51.1
+KPX b eogonek -51.1
+KPX b g -51.1
+KPX b gbreve -51.1
+KPX b o -51.1
+KPX b oacute -51.1
+KPX b ocircumflex -51.1
+KPX b odieresis -51.1
+KPX b oe -51.1
+KPX b ograve -51.1
+KPX b ohungarumlaut -51.1
+KPX b oslash -51.1
+KPX b otilde -51.1
+KPX b q -51.1
+KPX c a -51.1
+KPX c aacute -51.1
+KPX c acircumflex -51.1
+KPX c acircumflex -51.1
+KPX c adieresis -51.1
+KPX c ae -51.1
+KPX c agrave -51.1
+KPX c aogonek -51.1
+KPX c aring -51.1
+KPX c atilde -51.1
+KPX c c -51.1
+KPX c cacute -51.1
+KPX c cacute -51.1
+KPX c ccaron -51.1
+KPX c ccedilla -51.1
+KPX c d -51.1
+KPX c dbar -51.1
+KPX c e -51.1
+KPX c eacute -51.1
+KPX c ecaron -51.1
+KPX c ecircumflex -51.1
+KPX c edieresis -51.1
+KPX c egrave -51.1
+KPX c eogonek -51.1
+KPX c g -51.1
+KPX c gbreve -51.1
+KPX c o -51.1
+KPX c oacute -51.1
+KPX c ocircumflex -51.1
+KPX c odieresis -51.1
+KPX c oe -51.1
+KPX c ograve -51.1
+KPX c ohungarumlaut -51.1
+KPX c oslash -51.1
+KPX c otilde -51.1
+KPX c q -51.1
+KPX cacute a -51.1
+KPX cacute aacute -51.1
+KPX cacute acircumflex -51.1
+KPX cacute acircumflex -51.1
+KPX cacute adieresis -51.1
+KPX cacute ae -51.1
+KPX cacute agrave -51.1
+KPX cacute aogonek -51.1
+KPX cacute aring -51.1
+KPX cacute atilde -51.1
+KPX cacute c -51.1
+KPX cacute cacute -51.1
+KPX cacute cacute -51.1
+KPX cacute ccaron -51.1
+KPX cacute ccedilla -51.1
+KPX cacute d -51.1
+KPX cacute dbar -51.1
+KPX cacute e -51.1
+KPX cacute eacute -51.1
+KPX cacute ecaron -51.1
+KPX cacute ecircumflex -51.1
+KPX cacute edieresis -51.1
+KPX cacute egrave -51.1
+KPX cacute eogonek -51.1
+KPX cacute g -51.1
+KPX cacute gbreve -51.1
+KPX cacute o -51.1
+KPX cacute oacute -51.1
+KPX cacute ocircumflex -51.1
+KPX cacute odieresis -51.1
+KPX cacute oe -51.1
+KPX cacute ograve -51.1
+KPX cacute ohungarumlaut -51.1
+KPX cacute oslash -51.1
+KPX cacute otilde -51.1
+KPX cacute q -51.1
+KPX ccaron a -51.1
+KPX ccaron aacute -51.1
+KPX ccaron acircumflex -51.1
+KPX ccaron acircumflex -51.1
+KPX ccaron adieresis -51.1
+KPX ccaron ae -51.1
+KPX ccaron agrave -51.1
+KPX ccaron aogonek -51.1
+KPX ccaron aring -51.1
+KPX ccaron atilde -51.1
+KPX ccaron c -51.1
+KPX ccaron cacute -51.1
+KPX ccaron cacute -51.1
+KPX ccaron ccaron -51.1
+KPX ccaron ccedilla -51.1
+KPX ccaron d -51.1
+KPX ccaron dbar -51.1
+KPX ccaron e -51.1
+KPX ccaron eacute -51.1
+KPX ccaron ecaron -51.1
+KPX ccaron ecircumflex -51.1
+KPX ccaron edieresis -51.1
+KPX ccaron egrave -51.1
+KPX ccaron eogonek -51.1
+KPX ccaron g -51.1
+KPX ccaron gbreve -51.1
+KPX ccaron o -51.1
+KPX ccaron oacute -51.1
+KPX ccaron ocircumflex -51.1
+KPX ccaron odieresis -51.1
+KPX ccaron oe -51.1
+KPX ccaron ograve -51.1
+KPX ccaron ohungarumlaut -51.1
+KPX ccaron oslash -51.1
+KPX ccaron otilde -51.1
+KPX ccaron q -51.1
+KPX d l 51.1
+KPX d lacute 51.1
+KPX d lquoteright 51.1
+KPX e a -51.1
+KPX e aacute -51.1
+KPX e acircumflex -51.1
+KPX e acircumflex -51.1
+KPX e adieresis -51.1
+KPX e ae -51.1
+KPX e agrave -51.1
+KPX e aogonek -51.1
+KPX e aring -51.1
+KPX e atilde -51.1
+KPX e c -51.1
+KPX e cacute -51.1
+KPX e cacute -51.1
+KPX e ccaron -51.1
+KPX e ccedilla -51.1
+KPX e d -51.1
+KPX e dbar -51.1
+KPX e e -51.1
+KPX e eacute -51.1
+KPX e ecaron -51.1
+KPX e ecircumflex -51.1
+KPX e edieresis -51.1
+KPX e egrave -51.1
+KPX e eogonek -51.1
+KPX e g -51.1
+KPX e gbreve -51.1
+KPX e o -51.1
+KPX e oacute -51.1
+KPX e ocircumflex -51.1
+KPX e odieresis -51.1
+KPX e oe -51.1
+KPX e ograve -51.1
+KPX e ohungarumlaut -51.1
+KPX e oslash -51.1
+KPX e otilde -51.1
+KPX e q -51.1
+KPX eacute a -51.1
+KPX eacute aacute -51.1
+KPX eacute acircumflex -51.1
+KPX eacute acircumflex -51.1
+KPX eacute adieresis -51.1
+KPX eacute ae -51.1
+KPX eacute agrave -51.1
+KPX eacute aogonek -51.1
+KPX eacute aring -51.1
+KPX eacute atilde -51.1
+KPX eacute c -51.1
+KPX eacute cacute -51.1
+KPX eacute cacute -51.1
+KPX eacute ccaron -51.1
+KPX eacute ccedilla -51.1
+KPX eacute d -51.1
+KPX eacute dbar -51.1
+KPX eacute e -51.1
+KPX eacute eacute -51.1
+KPX eacute ecaron -51.1
+KPX eacute ecircumflex -51.1
+KPX eacute edieresis -51.1
+KPX eacute egrave -51.1
+KPX eacute eogonek -51.1
+KPX eacute g -51.1
+KPX eacute gbreve -51.1
+KPX eacute o -51.1
+KPX eacute oacute -51.1
+KPX eacute ocircumflex -51.1
+KPX eacute odieresis -51.1
+KPX eacute oe -51.1
+KPX eacute ograve -51.1
+KPX eacute ohungarumlaut -51.1
+KPX eacute oslash -51.1
+KPX eacute otilde -51.1
+KPX eacute q -51.1
+KPX ecaron a -51.1
+KPX ecaron aacute -51.1
+KPX ecaron acircumflex -51.1
+KPX ecaron acircumflex -51.1
+KPX ecaron adieresis -51.1
+KPX ecaron ae -51.1
+KPX ecaron agrave -51.1
+KPX ecaron aogonek -51.1
+KPX ecaron aring -51.1
+KPX ecaron atilde -51.1
+KPX ecaron c -51.1
+KPX ecaron cacute -51.1
+KPX ecaron cacute -51.1
+KPX ecaron ccaron -51.1
+KPX ecaron ccedilla -51.1
+KPX ecaron d -51.1
+KPX ecaron dbar -51.1
+KPX ecaron e -51.1
+KPX ecaron eacute -51.1
+KPX ecaron ecaron -51.1
+KPX ecaron ecircumflex -51.1
+KPX ecaron edieresis -51.1
+KPX ecaron egrave -51.1
+KPX ecaron eogonek -51.1
+KPX ecaron g -51.1
+KPX ecaron gbreve -51.1
+KPX ecaron o -51.1
+KPX ecaron oacute -51.1
+KPX ecaron ocircumflex -51.1
+KPX ecaron odieresis -51.1
+KPX ecaron oe -51.1
+KPX ecaron ograve -51.1
+KPX ecaron ohungarumlaut -51.1
+KPX ecaron oslash -51.1
+KPX ecaron otilde -51.1
+KPX ecaron q -51.1
+KPX ecircumflex a -51.1
+KPX ecircumflex aacute -51.1
+KPX ecircumflex acircumflex -51.1
+KPX ecircumflex acircumflex -51.1
+KPX ecircumflex adieresis -51.1
+KPX ecircumflex ae -51.1
+KPX ecircumflex agrave -51.1
+KPX ecircumflex aogonek -51.1
+KPX ecircumflex aring -51.1
+KPX ecircumflex atilde -51.1
+KPX ecircumflex c -51.1
+KPX ecircumflex cacute -51.1
+KPX ecircumflex cacute -51.1
+KPX ecircumflex ccaron -51.1
+KPX ecircumflex ccedilla -51.1
+KPX ecircumflex d -51.1
+KPX ecircumflex dbar -51.1
+KPX ecircumflex e -51.1
+KPX ecircumflex eacute -51.1
+KPX ecircumflex ecaron -51.1
+KPX ecircumflex ecircumflex -51.1
+KPX ecircumflex edieresis -51.1
+KPX ecircumflex egrave -51.1
+KPX ecircumflex eogonek -51.1
+KPX ecircumflex g -51.1
+KPX ecircumflex gbreve -51.1
+KPX ecircumflex o -51.1
+KPX ecircumflex oacute -51.1
+KPX ecircumflex ocircumflex -51.1
+KPX ecircumflex odieresis -51.1
+KPX ecircumflex oe -51.1
+KPX ecircumflex ograve -51.1
+KPX ecircumflex ohungarumlaut -51.1
+KPX ecircumflex oslash -51.1
+KPX ecircumflex otilde -51.1
+KPX ecircumflex q -51.1
+KPX edieresis a -51.1
+KPX edieresis aacute -51.1
+KPX edieresis acircumflex -51.1
+KPX edieresis acircumflex -51.1
+KPX edieresis adieresis -51.1
+KPX edieresis ae -51.1
+KPX edieresis agrave -51.1
+KPX edieresis aogonek -51.1
+KPX edieresis aring -51.1
+KPX edieresis atilde -51.1
+KPX edieresis c -51.1
+KPX edieresis cacute -51.1
+KPX edieresis cacute -51.1
+KPX edieresis ccaron -51.1
+KPX edieresis ccedilla -51.1
+KPX edieresis d -51.1
+KPX edieresis dbar -51.1
+KPX edieresis e -51.1
+KPX edieresis eacute -51.1
+KPX edieresis ecaron -51.1
+KPX edieresis ecircumflex -51.1
+KPX edieresis edieresis -51.1
+KPX edieresis egrave -51.1
+KPX edieresis eogonek -51.1
+KPX edieresis g -51.1
+KPX edieresis gbreve -51.1
+KPX edieresis o -51.1
+KPX edieresis oacute -51.1
+KPX edieresis ocircumflex -51.1
+KPX edieresis odieresis -51.1
+KPX edieresis oe -51.1
+KPX edieresis ograve -51.1
+KPX edieresis ohungarumlaut -51.1
+KPX edieresis oslash -51.1
+KPX edieresis otilde -51.1
+KPX edieresis q -51.1
+KPX egrave a -51.1
+KPX egrave aacute -51.1
+KPX egrave acircumflex -51.1
+KPX egrave acircumflex -51.1
+KPX egrave adieresis -51.1
+KPX egrave ae -51.1
+KPX egrave agrave -51.1
+KPX egrave aogonek -51.1
+KPX egrave aring -51.1
+KPX egrave atilde -51.1
+KPX egrave c -51.1
+KPX egrave cacute -51.1
+KPX egrave cacute -51.1
+KPX egrave ccaron -51.1
+KPX egrave ccedilla -51.1
+KPX egrave d -51.1
+KPX egrave dbar -51.1
+KPX egrave e -51.1
+KPX egrave eacute -51.1
+KPX egrave ecaron -51.1
+KPX egrave ecircumflex -51.1
+KPX egrave edieresis -51.1
+KPX egrave egrave -51.1
+KPX egrave eogonek -51.1
+KPX egrave g -51.1
+KPX egrave gbreve -51.1
+KPX egrave o -51.1
+KPX egrave oacute -51.1
+KPX egrave ocircumflex -51.1
+KPX egrave odieresis -51.1
+KPX egrave oe -51.1
+KPX egrave ograve -51.1
+KPX egrave ohungarumlaut -51.1
+KPX egrave oslash -51.1
+KPX egrave otilde -51.1
+KPX egrave q -51.1
+KPX eogonek a -51.1
+KPX eogonek aacute -51.1
+KPX eogonek acircumflex -51.1
+KPX eogonek acircumflex -51.1
+KPX eogonek adieresis -51.1
+KPX eogonek ae -51.1
+KPX eogonek agrave -51.1
+KPX eogonek aogonek -51.1
+KPX eogonek aring -51.1
+KPX eogonek atilde -51.1
+KPX eogonek c -51.1
+KPX eogonek cacute -51.1
+KPX eogonek cacute -51.1
+KPX eogonek ccaron -51.1
+KPX eogonek ccedilla -51.1
+KPX eogonek d -51.1
+KPX eogonek dbar -51.1
+KPX eogonek e -51.1
+KPX eogonek eacute -51.1
+KPX eogonek ecaron -51.1
+KPX eogonek ecircumflex -51.1
+KPX eogonek edieresis -51.1
+KPX eogonek egrave -51.1
+KPX eogonek eogonek -51.1
+KPX eogonek g -51.1
+KPX eogonek gbreve -51.1
+KPX eogonek o -51.1
+KPX eogonek oacute -51.1
+KPX eogonek ocircumflex -51.1
+KPX eogonek odieresis -51.1
+KPX eogonek oe -51.1
+KPX eogonek ograve -51.1
+KPX eogonek ohungarumlaut -51.1
+KPX eogonek oslash -51.1
+KPX eogonek otilde -51.1
+KPX eogonek q -51.1
+KPX f bracketright 104.28
+KPX f exclam 104.28
+KPX f parenright 104.28
+KPX f question 104.28
+KPX f quoteright 104.28
+KPX ff bracketright 104.28
+KPX ff exclam 104.28
+KPX ff parenright 104.28
+KPX ff question 104.28
+KPX ff quoteright 104.28
+KPX l l 51.1
+KPX l lacute 51.1
+KPX l lquoteright 51.1
+KPX n quoteright -102.2
+KPX o a -51.1
+KPX o aacute -51.1
+KPX o acircumflex -51.1
+KPX o acircumflex -51.1
+KPX o adieresis -51.1
+KPX o ae -51.1
+KPX o agrave -51.1
+KPX o aogonek -51.1
+KPX o aring -51.1
+KPX o atilde -51.1
+KPX o c -51.1
+KPX o cacute -51.1
+KPX o cacute -51.1
+KPX o ccaron -51.1
+KPX o ccedilla -51.1
+KPX o d -51.1
+KPX o dbar -51.1
+KPX o e -51.1
+KPX o eacute -51.1
+KPX o ecaron -51.1
+KPX o ecircumflex -51.1
+KPX o edieresis -51.1
+KPX o egrave -51.1
+KPX o eogonek -51.1
+KPX o g -51.1
+KPX o gbreve -51.1
+KPX o o -51.1
+KPX o oacute -51.1
+KPX o ocircumflex -51.1
+KPX o odieresis -51.1
+KPX o oe -51.1
+KPX o ograve -51.1
+KPX o ohungarumlaut -51.1
+KPX o oslash -51.1
+KPX o otilde -51.1
+KPX o q -51.1
+KPX oacute a -51.1
+KPX oacute aacute -51.1
+KPX oacute acircumflex -51.1
+KPX oacute acircumflex -51.1
+KPX oacute adieresis -51.1
+KPX oacute ae -51.1
+KPX oacute agrave -51.1
+KPX oacute aogonek -51.1
+KPX oacute aring -51.1
+KPX oacute atilde -51.1
+KPX oacute c -51.1
+KPX oacute cacute -51.1
+KPX oacute cacute -51.1
+KPX oacute ccaron -51.1
+KPX oacute ccedilla -51.1
+KPX oacute d -51.1
+KPX oacute dbar -51.1
+KPX oacute e -51.1
+KPX oacute eacute -51.1
+KPX oacute ecaron -51.1
+KPX oacute ecircumflex -51.1
+KPX oacute edieresis -51.1
+KPX oacute egrave -51.1
+KPX oacute eogonek -51.1
+KPX oacute g -51.1
+KPX oacute gbreve -51.1
+KPX oacute o -51.1
+KPX oacute oacute -51.1
+KPX oacute ocircumflex -51.1
+KPX oacute odieresis -51.1
+KPX oacute oe -51.1
+KPX oacute ograve -51.1
+KPX oacute ohungarumlaut -51.1
+KPX oacute oslash -51.1
+KPX oacute otilde -51.1
+KPX oacute q -51.1
+KPX ocircumflex a -51.1
+KPX ocircumflex aacute -51.1
+KPX ocircumflex acircumflex -51.1
+KPX ocircumflex acircumflex -51.1
+KPX ocircumflex adieresis -51.1
+KPX ocircumflex ae -51.1
+KPX ocircumflex agrave -51.1
+KPX ocircumflex aogonek -51.1
+KPX ocircumflex aring -51.1
+KPX ocircumflex atilde -51.1
+KPX ocircumflex c -51.1
+KPX ocircumflex cacute -51.1
+KPX ocircumflex cacute -51.1
+KPX ocircumflex ccaron -51.1
+KPX ocircumflex ccedilla -51.1
+KPX ocircumflex d -51.1
+KPX ocircumflex dbar -51.1
+KPX ocircumflex e -51.1
+KPX ocircumflex eacute -51.1
+KPX ocircumflex ecaron -51.1
+KPX ocircumflex ecircumflex -51.1
+KPX ocircumflex edieresis -51.1
+KPX ocircumflex egrave -51.1
+KPX ocircumflex eogonek -51.1
+KPX ocircumflex g -51.1
+KPX ocircumflex gbreve -51.1
+KPX ocircumflex o -51.1
+KPX ocircumflex oacute -51.1
+KPX ocircumflex ocircumflex -51.1
+KPX ocircumflex odieresis -51.1
+KPX ocircumflex oe -51.1
+KPX ocircumflex ograve -51.1
+KPX ocircumflex ohungarumlaut -51.1
+KPX ocircumflex oslash -51.1
+KPX ocircumflex otilde -51.1
+KPX ocircumflex q -51.1
+KPX odieresis a -51.1
+KPX odieresis aacute -51.1
+KPX odieresis acircumflex -51.1
+KPX odieresis acircumflex -51.1
+KPX odieresis adieresis -51.1
+KPX odieresis ae -51.1
+KPX odieresis agrave -51.1
+KPX odieresis aogonek -51.1
+KPX odieresis aring -51.1
+KPX odieresis atilde -51.1
+KPX odieresis c -51.1
+KPX odieresis cacute -51.1
+KPX odieresis cacute -51.1
+KPX odieresis ccaron -51.1
+KPX odieresis ccedilla -51.1
+KPX odieresis d -51.1
+KPX odieresis dbar -51.1
+KPX odieresis e -51.1
+KPX odieresis eacute -51.1
+KPX odieresis ecaron -51.1
+KPX odieresis ecircumflex -51.1
+KPX odieresis edieresis -51.1
+KPX odieresis egrave -51.1
+KPX odieresis eogonek -51.1
+KPX odieresis g -51.1
+KPX odieresis gbreve -51.1
+KPX odieresis o -51.1
+KPX odieresis oacute -51.1
+KPX odieresis ocircumflex -51.1
+KPX odieresis odieresis -51.1
+KPX odieresis oe -51.1
+KPX odieresis ograve -51.1
+KPX odieresis ohungarumlaut -51.1
+KPX odieresis oslash -51.1
+KPX odieresis otilde -51.1
+KPX odieresis q -51.1
+KPX ograve a -51.1
+KPX ograve aacute -51.1
+KPX ograve acircumflex -51.1
+KPX ograve acircumflex -51.1
+KPX ograve adieresis -51.1
+KPX ograve ae -51.1
+KPX ograve agrave -51.1
+KPX ograve aogonek -51.1
+KPX ograve aring -51.1
+KPX ograve atilde -51.1
+KPX ograve c -51.1
+KPX ograve cacute -51.1
+KPX ograve cacute -51.1
+KPX ograve ccaron -51.1
+KPX ograve ccedilla -51.1
+KPX ograve d -51.1
+KPX ograve dbar -51.1
+KPX ograve e -51.1
+KPX ograve eacute -51.1
+KPX ograve ecaron -51.1
+KPX ograve ecircumflex -51.1
+KPX ograve edieresis -51.1
+KPX ograve egrave -51.1
+KPX ograve eogonek -51.1
+KPX ograve g -51.1
+KPX ograve gbreve -51.1
+KPX ograve o -51.1
+KPX ograve oacute -51.1
+KPX ograve ocircumflex -51.1
+KPX ograve odieresis -51.1
+KPX ograve oe -51.1
+KPX ograve ograve -51.1
+KPX ograve ohungarumlaut -51.1
+KPX ograve oslash -51.1
+KPX ograve otilde -51.1
+KPX ograve q -51.1
+KPX otilde a -51.1
+KPX otilde aacute -51.1
+KPX otilde acircumflex -51.1
+KPX otilde acircumflex -51.1
+KPX otilde adieresis -51.1
+KPX otilde ae -51.1
+KPX otilde agrave -51.1
+KPX otilde aogonek -51.1
+KPX otilde aring -51.1
+KPX otilde atilde -51.1
+KPX otilde c -51.1
+KPX otilde cacute -51.1
+KPX otilde cacute -51.1
+KPX otilde ccaron -51.1
+KPX otilde ccedilla -51.1
+KPX otilde d -51.1
+KPX otilde dbar -51.1
+KPX otilde e -51.1
+KPX otilde eacute -51.1
+KPX otilde ecaron -51.1
+KPX otilde ecircumflex -51.1
+KPX otilde edieresis -51.1
+KPX otilde egrave -51.1
+KPX otilde eogonek -51.1
+KPX otilde g -51.1
+KPX otilde gbreve -51.1
+KPX otilde o -51.1
+KPX otilde oacute -51.1
+KPX otilde ocircumflex -51.1
+KPX otilde odieresis -51.1
+KPX otilde oe -51.1
+KPX otilde ograve -51.1
+KPX otilde ohungarumlaut -51.1
+KPX otilde oslash -51.1
+KPX otilde otilde -51.1
+KPX otilde q -51.1
+KPX p a -51.1
+KPX p aacute -51.1
+KPX p acircumflex -51.1
+KPX p acircumflex -51.1
+KPX p adieresis -51.1
+KPX p ae -51.1
+KPX p agrave -51.1
+KPX p aogonek -51.1
+KPX p aring -51.1
+KPX p atilde -51.1
+KPX p c -51.1
+KPX p cacute -51.1
+KPX p cacute -51.1
+KPX p ccaron -51.1
+KPX p ccedilla -51.1
+KPX p d -51.1
+KPX p dbar -51.1
+KPX p e -51.1
+KPX p eacute -51.1
+KPX p ecaron -51.1
+KPX p ecircumflex -51.1
+KPX p edieresis -51.1
+KPX p egrave -51.1
+KPX p eogonek -51.1
+KPX p g -51.1
+KPX p gbreve -51.1
+KPX p o -51.1
+KPX p oacute -51.1
+KPX p ocircumflex -51.1
+KPX p odieresis -51.1
+KPX p oe -51.1
+KPX p ograve -51.1
+KPX p ohungarumlaut -51.1
+KPX p oslash -51.1
+KPX p otilde -51.1
+KPX p q -51.1
+KPX quoteright exclam 102.2
+KPX quoteright question 102.2
+KPX r a -51.1
+KPX r aacute -51.1
+KPX r acircumflex -51.1
+KPX r acircumflex -51.1
+KPX r adieresis -51.1
+KPX r ae -51.1
+KPX r agrave -51.1
+KPX r aogonek -51.1
+KPX r aring -51.1
+KPX r atilde -51.1
+KPX r c -51.1
+KPX r cacute -51.1
+KPX r cacute -51.1
+KPX r ccaron -51.1
+KPX r ccedilla -51.1
+KPX r d -51.1
+KPX r dbar -51.1
+KPX r e -51.1
+KPX r eacute -51.1
+KPX r ecaron -51.1
+KPX r ecircumflex -51.1
+KPX r edieresis -51.1
+KPX r egrave -51.1
+KPX r eogonek -51.1
+KPX r g -51.1
+KPX r gbreve -51.1
+KPX r o -51.1
+KPX r oacute -51.1
+KPX r ocircumflex -51.1
+KPX r odieresis -51.1
+KPX r oe -51.1
+KPX r ograve -51.1
+KPX r ohungarumlaut -51.1
+KPX r oslash -51.1
+KPX r otilde -51.1
+KPX r q -51.1
+KPX thorn a -51.1
+KPX thorn aacute -51.1
+KPX thorn acircumflex -51.1
+KPX thorn acircumflex -51.1
+KPX thorn adieresis -51.1
+KPX thorn ae -51.1
+KPX thorn agrave -51.1
+KPX thorn aogonek -51.1
+KPX thorn aring -51.1
+KPX thorn atilde -51.1
+KPX thorn c -51.1
+KPX thorn cacute -51.1
+KPX thorn cacute -51.1
+KPX thorn ccaron -51.1
+KPX thorn ccedilla -51.1
+KPX thorn d -51.1
+KPX thorn dbar -51.1
+KPX thorn e -51.1
+KPX thorn eacute -51.1
+KPX thorn ecaron -51.1
+KPX thorn ecircumflex -51.1
+KPX thorn edieresis -51.1
+KPX thorn egrave -51.1
+KPX thorn eogonek -51.1
+KPX thorn g -51.1
+KPX thorn gbreve -51.1
+KPX thorn o -51.1
+KPX thorn oacute -51.1
+KPX thorn ocircumflex -51.1
+KPX thorn odieresis -51.1
+KPX thorn oe -51.1
+KPX thorn ograve -51.1
+KPX thorn ohungarumlaut -51.1
+KPX thorn oslash -51.1
+KPX thorn otilde -51.1
+KPX thorn q -51.1
+KPX w l 51.1
+KPX w lacute 51.1
+KPX w lquoteright 51.1
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/eufm10.afm b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/eufm10.afm
new file mode 100644
index 00000000000..a6c2b1cf13e
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/afm/eufm10.afm
@@ -0,0 +1,114 @@
+StartFontMetrics 2.0
+FontName eufm10
+FullName eufm10
+FamilyName eufm10
+Weight Medium
+ItalicAngle 0.000000
+IsFixedPitch false
+UnderlinePosition -133
+UnderlineThickness 20
+Version 1.2/19-Jan-95
+FontBBox -26, -224, 1054, 740
+Notice Copyright \(C\) 1994, 1995, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-C.
+EncodingScheme FontSpecific
+CapHeight 666
+XHeight 472
+Descender -212
+Ascender 610
+StartCharMetrics 94
+C 0 ; WX 497.5 ; N dadv ; B 75 -33 430 683 ;
+C 1 ; WX 498.28 ; N dalt ; B 35 -30 432 616 ;
+C 2 ; WX 333.28 ; N fnos ; B 29 -216 339 680 ;
+C 3 ; WX 329.22 ; N falt ; B 28 -224 318 679 ;
+C 4 ; WX 503.44 ; N galt ; B 51 -214 449 471 ;
+C 5 ; WX 333 ; N kalt ; B 25 -20 315 687 ;
+C 6 ; WX 334.11 ; N talt ; B 29 -21 347 578 ;
+C 7 ; WX 500.72 ; N ualt ; B 10 -22 515 475 ;
+C 18 ; WX 214.72 ; N quoteleft ; B 45 410 159 708 ;
+C 19 ; WX 214.72 ; N quoteright ; B 49 394 163 692 ;
+C 33 ; WX 295.72 ; N exclam ; B 90 -12 203 690 ;
+C 38 ; WX 737.83 ; N ampersand ; B 49 -12 734 698 ;
+C 39 ; WX 212 ; N quotesingle ; B 68 436 134 695 ;
+C 40 ; WX 388.67 ; N parenleft ; B 113 -186 293 737 ;
+C 41 ; WX 388.67 ; N parenright ; B 89 -187 276 735 ;
+C 42 ; WX 277.67 ; N asterisk ; B 33 449 234 692 ;
+C 43 ; WX 756.22 ; N plus ; B 47 -83 709 598 ;
+C 44 ; WX 277.67 ; N comma ; B 100 -192 215 107 ;
+C 45 ; WX 756.22 ; N minus ; B 46 236 706 275 ;
+C 46 ; WX 277.67 ; N period ; B 88 -15 201 102 ;
+C 47 ; WX 501.83 ; N slash ; B 34 -182 466 722 ;
+C 48 ; WX 501.83 ; N zero ; B 41 -13 456 493 ;
+C 49 ; WX 501.83 ; N one ; B 47 -2 460 468 ;
+C 50 ; WX 501.83 ; N two ; B 59 1 485 474 ;
+C 51 ; WX 501.83 ; N three ; B 38 -182 430 474 ;
+C 52 ; WX 501.83 ; N four ; B 10 -191 482 476 ;
+C 53 ; WX 501.83 ; N five ; B 47 -184 440 458 ;
+C 54 ; WX 501.83 ; N six ; B 45 -13 471 700 ;
+C 55 ; WX 501.83 ; N seven ; B 37 -181 498 468 ;
+C 56 ; WX 501.83 ; N eight ; B 40 -10 461 705 ;
+C 57 ; WX 501.83 ; N nine ; B 27 -182 467 469 ;
+C 58 ; WX 216.06 ; N colon ; B 49 -12 168 457 ;
+C 59 ; WX 216.06 ; N semicolon ; B 47 -190 179 458 ;
+C 61 ; WX 756.22 ; N equal ; B 54 132 725 368 ;
+C 63 ; WX 362.44 ; N question ; B 46 -11 358 693 ;
+C 65 ; WX 717.61 ; N A ; B 22 -27 708 697 ;
+C 66 ; WX 884 ; N B ; B 48 -27 820 691 ;
+C 67 ; WX 612.56 ; N C ; B 59 -24 607 685 ;
+C 68 ; WX 831.56 ; N D ; B 27 -27 745 686 ;
+C 69 ; WX 662.78 ; N E ; B 86 -24 634 685 ;
+C 70 ; WX 611.17 ; N F ; B 11 -154 612 686 ;
+C 71 ; WX 785.39 ; N G ; B 65 -27 710 691 ;
+C 72 ; WX 720.28 ; N H ; B 1 -133 644 666 ;
+C 73 ; WX 554.5 ; N I ; B 30 -27 533 686 ;
+C 74 ; WX 552.33 ; N J ; B -10 -139 522 686 ;
+C 75 ; WX 668.44 ; N K ; B 16 -27 682 681 ;
+C 76 ; WX 666 ; N L ; B 32 -26 644 686 ;
+C 77 ; WX 1049.56 ; N M ; B 27 -27 1048 692 ;
+C 78 ; WX 832.11 ; N N ; B 27 -25 825 686 ;
+C 79 ; WX 827 ; N O ; B 11 -27 745 729 ;
+C 80 ; WX 827.5 ; N P ; B 27 -219 804 692 ;
+C 81 ; WX 827 ; N Q ; B 11 -69 782 729 ;
+C 82 ; WX 828.06 ; N R ; B 27 -27 824 686 ;
+C 83 ; WX 828.61 ; N S ; B 66 -27 756 692 ;
+C 84 ; WX 669 ; N T ; B 33 -27 676 702 ;
+C 85 ; WX 645.78 ; N U ; B -26 -27 665 697 ;
+C 86 ; WX 831.33 ; N V ; B 27 -27 825 686 ;
+C 87 ; WX 1046 ; N W ; B 32 -28 1054 686 ;
+C 88 ; WX 719.22 ; N X ; B 27 -27 709 688 ;
+C 89 ; WX 832.94 ; N Y ; B 27 -218 740 686 ;
+C 90 ; WX 602 ; N Z ; B 11 -139 532 729 ;
+C 91 ; WX 277.67 ; N bracketleft ; B 117 -130 278 740 ;
+C 93 ; WX 277.67 ; N bracketright ; B -3 -132 161 738 ;
+C 94 ; WX 499.67 ; N asciicircum ; B 0 452 495 734 ;
+C 97 ; WX 500.44 ; N a ; B 65 -36 497 471 ;
+C 98 ; WX 513.17 ; N b ; B 87 -31 442 685 ;
+C 99 ; WX 389.44 ; N c ; B 72 -29 359 466 ;
+C 100 ; WX 498.56 ; N d ; B 13 -33 428 610 ;
+C 101 ; WX 400.56 ; N e ; B 70 -31 364 467 ;
+C 102 ; WX 326.28 ; N f ; B 30 -220 324 681 ;
+C 103 ; WX 503.72 ; N g ; B 16 -209 455 470 ;
+C 104 ; WX 521.28 ; N h ; B 76 -206 434 689 ;
+C 105 ; WX 279 ; N i ; B 14 -21 268 674 ;
+C 106 ; WX 280.89 ; N j ; B -9 -208 196 673 ;
+C 107 ; WX 389.44 ; N k ; B 24 -26 362 689 ;
+C 108 ; WX 279.56 ; N l ; B 98 -20 277 685 ;
+C 109 ; WX 766.78 ; N m ; B 7 -26 752 475 ;
+C 110 ; WX 526.67 ; N n ; B 17 -23 513 475 ;
+C 111 ; WX 488.83 ; N o ; B 67 -28 412 481 ;
+C 112 ; WX 500.44 ; N p ; B 12 -212 430 542 ;
+C 113 ; WX 489.11 ; N q ; B 59 -219 418 479 ;
+C 114 ; WX 389.17 ; N r ; B 15 -21 387 474 ;
+C 115 ; WX 442.67 ; N s ; B -18 -30 407 478 ;
+C 116 ; WX 333 ; N t ; B 26 -21 349 640 ;
+C 117 ; WX 517.22 ; N u ; B 8 -23 513 474 ;
+C 118 ; WX 511.78 ; N v ; B 55 -28 434 530 ;
+C 119 ; WX 773.5 ; N w ; B 45 -28 688 532 ;
+C 120 ; WX 388.67 ; N x ; B 10 -188 363 472 ;
+C 121 ; WX 498.83 ; N y ; B 45 -219 431 528 ;
+C 122 ; WX 390.56 ; N z ; B -7 -214 314 471 ;
+C 125 ; WX 214.72 ; N quotedbl ; B 8 432 196 695 ;
+C 127 ; WX 378.11 ; N onealt ; B 54 -10 254 703 ;
+C -1 ; WX 333.33 ; N hardspace ; B 333 0 334 0 ;
+C -1 ; WX 333.33 ; N space ; B 333 0 334 0 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin1.enc b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin1.enc
new file mode 100644
index 00000000000..e7ee7860fd0
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin1.enc
@@ -0,0 +1,283 @@
+%
+% t1lib-encodingfile
+%
+% This file is intended to be read by the function T1_LoadEncoding(), which is
+% part of t1lib. The syntactic format is really simple. The file contents is
+% scanned according to the following priciple:
+%
+% 1) There appears a "Encoding=[scheme]" at the beginning of a line.
+%
+% 2) Then exacly 256 lines of text must follow. These lines have to
+% start with a valid charactername, followed by at least one white
+% space character. The remaining of the line is ignored and may be
+% used for comments, e.g., for numbering of characters.
+%
+% 3) After these 256 lines all following data is ignored.
+%
+% Notice: This encoding contains what *I* believe is the ISOLatin1Encoding.
+% It differs slightly from what the PostScript interpreter believes.
+% Please note that there is no unique definition for the
+% charactername appearing at 45 (dec) in ISO 8859-1.
+%
+% (1999-11-16, RMz)
+%
+%--------------------------------------------------------------------------
+
+Encoding=ISOLatin1Encoding /* The name of the encoding scheme */
+.notdef /* '000 000 "00 */
+.notdef /* '001 001 "01 */
+.notdef /* '002 002 "02 */
+.notdef /* '003 003 "03 */
+.notdef /* '004 004 "04 */
+.notdef /* '005 005 "05 */
+.notdef /* '006 006 "06 */
+.notdef /* '007 007 "07 */
+.notdef /* '010 008 "08 */
+.notdef /* '011 009 "09 */
+.notdef /* '012 010 "0A */
+.notdef /* '013 011 "0B */
+.notdef /* '014 012 "0C */
+.notdef /* '015 013 "0D */
+.notdef /* '016 014 "0E */
+.notdef /* '017 015 "0F */
+.notdef /* '020 016 "10 */
+.notdef /* '021 017 "11 */
+.notdef /* '022 018 "12 */
+.notdef /* '023 019 "13 */
+.notdef /* '024 020 "14 */
+.notdef /* '025 021 "15 */
+.notdef /* '026 022 "16 */
+.notdef /* '027 023 "17 */
+.notdef /* '030 024 "18 */
+.notdef /* '031 025 "19 */
+.notdef /* '032 026 "1A */
+.notdef /* '033 027 "1B */
+.notdef /* '034 028 "1C */
+.notdef /* '035 029 "1D */
+.notdef /* '036 030 "1E */
+.notdef /* '037 031 "1F */
+space /* '040 032 "20 */
+exclam /* '041 033 "21 */
+quotedbl /* '042 034 "22 */
+numbersign /* '043 035 "23 */
+dollar /* '044 036 "24 */
+percent /* '045 037 "25 */
+ampersand /* '046 038 "26 */
+quoteright /* '047 039 "27 */
+parenleft /* '050 040 "28 */
+parenright /* '051 041 "29 */
+asterisk /* '052 042 "2A */
+plus /* '053 043 "2B */
+comma /* '054 044 "2C */
+hyphen /* '055 045 "2D */
+period /* '056 046 "2E */
+slash /* '057 047 "2F */
+zero /* '060 048 "30 */
+one /* '061 049 "31 */
+two /* '062 050 "32 */
+three /* '063 051 "33 */
+four /* '064 052 "34 */
+five /* '065 053 "35 */
+six /* '066 054 "36 */
+seven /* '067 055 "37 */
+eight /* '070 056 "38 */
+nine /* '071 057 "39 */
+colon /* '072 058 "3A */
+semicolon /* '073 059 "3B */
+less /* '074 060 "3C */
+equal /* '075 061 "3D */
+greater /* '076 062 "3E */
+question /* '077 063 "3F */
+at /* '100 064 "40 */
+A /* '101 065 "41 */
+B /* '102 066 "42 */
+C /* '103 067 "43 */
+D /* '104 068 "44 */
+E /* '105 069 "45 */
+F /* '106 070 "46 */
+G /* '107 071 "47 */
+H /* '110 072 "48 */
+I /* '111 073 "49 */
+J /* '112 074 "4A */
+K /* '113 075 "4B */
+L /* '114 076 "4C */
+M /* '115 077 "4D */
+N /* '116 078 "4E */
+O /* '117 079 "4F */
+P /* '120 080 "50 */
+Q /* '121 081 "51 */
+R /* '122 082 "52 */
+S /* '123 083 "53 */
+T /* '124 084 "54 */
+U /* '125 085 "55 */
+V /* '126 086 "56 */
+W /* '127 087 "57 */
+X /* '130 088 "58 */
+Y /* '131 089 "59 */
+Z /* '132 090 "5A */
+bracketleft /* '133 091 "5B */
+backslash /* '134 092 "5C */
+bracketright /* '135 093 "5D */
+asciicircum /* '136 094 "5E */
+underscore /* '137 095 "5F */
+grave /* '140 096 "60 */
+a /* '141 097 "61 */
+b /* '142 098 "62 */
+c /* '143 099 "63 */
+d /* '144 100 "64 */
+e /* '145 101 "65 */
+f /* '146 102 "66 */
+g /* '147 103 "67 */
+h /* '150 104 "68 */
+i /* '151 105 "69 */
+j /* '152 106 "6A */
+k /* '153 107 "6B */
+l /* '154 108 "6C */
+m /* '155 109 "6D */
+n /* '156 110 "6E */
+o /* '157 111 "6F */
+p /* '160 112 "70 */
+q /* '161 113 "71 */
+r /* '162 114 "72 */
+s /* '163 115 "73 */
+t /* '164 116 "74 */
+u /* '165 117 "75 */
+v /* '166 118 "76 */
+w /* '167 119 "77 */
+x /* '170 120 "78 */
+y /* '171 121 "79 */
+z /* '172 122 "7A */
+braceleft /* '173 123 "7B */
+bar /* '174 124 "7C */
+braceright /* '175 125 "7D */
+asciitilde /* '176 126 "7E */
+.notdef /* '177 127 "7F */
+.notdef /* '200 128 "80 */
+.notdef /* '201 129 "81 */
+.notdef /* '202 130 "82 */
+.notdef /* '203 131 "83 */
+.notdef /* '204 132 "84 */
+.notdef /* '205 133 "85 */
+.notdef /* '206 134 "86 */
+.notdef /* '207 135 "87 */
+.notdef /* '210 136 "88 */
+.notdef /* '211 137 "89 */
+.notdef /* '212 138 "8A */
+.notdef /* '213 139 "8B */
+.notdef /* '214 140 "8C */
+.notdef /* '215 141 "8D */
+.notdef /* '216 142 "8E */
+.notdef /* '217 143 "8F */
+dotlessi /* '220 144 "90 */
+grave /* '221 145 "91 */
+acute /* '222 146 "92 */
+circumflex /* '223 147 "93 */
+tilde /* '224 148 "94 */
+macron /* '225 149 "95 */
+breve /* '226 150 "96 */
+dotaccent /* '227 151 "97 */
+dieresis /* '230 152 "98 */
+.notdef /* '231 153 "99 */
+ring /* '232 154 "9A */
+cedilla /* '233 155 "9B */
+.notdef /* '234 156 "9C */
+hungarumlaut /* '235 157 "9D */
+ogonek /* '236 158 "9E */
+caron /* '237 159 "9F */
+space /* '240 160 "A0 */
+exclamdown /* '241 161 "A1 */
+cent /* '242 162 "A2 */
+sterling /* '243 163 "A3 */
+currency /* '244 164 "A4 */
+yen /* '245 165 "A5 */
+brokenbar /* '246 166 "A6 */
+section /* '247 167 "A7 */
+dieresis /* '250 168 "A8 */
+copyright /* '251 169 "A9 */
+ordfeminine /* '252 170 "AA */
+guillemotleft /* '253 171 "AB */
+logicalnot /* '254 172 "AC */
+hyphen /* '255 173 "AD */
+registered /* '256 174 "AE */
+macron /* '257 175 "AF */
+degree /* '260 176 "B0 */
+plusminus /* '261 177 "B1 */
+twosuperior /* '262 178 "B2 */
+threesuperior /* '263 179 "B3 */
+acute /* '264 180 "B4 */
+mu /* '265 181 "B5 */
+paragraph /* '266 182 "B6 */
+periodcentered /* '267 183 "B7 */
+cedilla /* '270 184 "B8 */
+onesuperior /* '271 185 "B9 */
+ordmasculine /* '272 186 "BA */
+guillemotright /* '273 187 "BB */
+onequarter /* '274 188 "BC */
+onehalf /* '275 189 "BD */
+threequarters /* '276 190 "BE */
+questiondown /* '277 191 "BF */
+Agrave /* '300 192 "C0 */
+Aacute /* '301 193 "C1 */
+Acircumflex /* '302 194 "C2 */
+Atilde /* '303 195 "C3 */
+Adieresis /* '304 196 "C4 */
+Aring /* '305 197 "C5 */
+AE /* '306 198 "C6 */
+Ccedilla /* '307 199 "C7 */
+Egrave /* '310 200 "C8 */
+Eacute /* '311 201 "C9 */
+Ecircumflex /* '312 202 "CA */
+Edieresis /* '313 203 "CB */
+Igrave /* '314 204 "CC */
+Iacute /* '315 205 "CD */
+Icircumflex /* '316 206 "CE */
+Idieresis /* '317 207 "CF */
+Eth /* '320 208 "D0 */
+Ntilde /* '321 209 "D1 */
+Ograve /* '322 210 "D2 */
+Oacute /* '323 211 "D3 */
+Ocircumflex /* '324 212 "D4 */
+Otilde /* '325 213 "D5 */
+Odieresis /* '326 214 "D6 */
+multiply /* '327 215 "D7 */
+Oslash /* '330 216 "D8 */
+Ugrave /* '331 217 "D9 */
+Uacute /* '332 218 "DA */
+Ucircumflex /* '333 219 "DB */
+Udieresis /* '334 220 "DC */
+Yacute /* '335 221 "DD */
+Thorn /* '336 222 "DE */
+germandbls /* '337 223 "DF */
+agrave /* '340 224 "E0 */
+aacute /* '341 225 "E1 */
+acircumflex /* '342 226 "E2 */
+atilde /* '343 227 "E3 */
+adieresis /* '344 228 "E4 */
+aring /* '345 229 "E5 */
+ae /* '346 230 "E6 */
+ccedilla /* '347 231 "E7 */
+egrave /* '350 232 "E8 */
+eacute /* '351 233 "E9 */
+ecircumflex /* '352 234 "EA */
+edieresis /* '353 235 "EB */
+igrave /* '354 236 "EC */
+iacute /* '355 237 "ED */
+icircumflex /* '356 238 "EE */
+idieresis /* '357 239 "EF */
+eth /* '360 240 "F0 */
+ntilde /* '361 241 "F1 */
+ograve /* '362 242 "F2 */
+oacute /* '363 243 "F3 */
+ocircumflex /* '364 244 "F4 */
+otilde /* '365 245 "F5 */
+odieresis /* '366 246 "F6 */
+divide /* '367 247 "F7 */
+oslash /* '370 248 "F8 */
+ugrave /* '371 249 "F9 */
+uacute /* '372 250 "FA */
+ucircumflex /* '373 251 "FB */
+udieresis /* '374 252 "FC */
+yacute /* '375 253 "FD */
+thorn /* '376 254 "FE */
+ydieresis /* '377 255 "FF */
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin2.enc b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin2.enc
new file mode 100644
index 00000000000..1867a955d4e
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin2.enc
@@ -0,0 +1,265 @@
+--------------------------------------------------------------
+I hope this is correct representation of ISO-8859-2
+encoding, which is used in most Center European languages.
+
+Drop me a mail at <jirap@bajt.cz>, if you find a bug here.
+----------------------------------------------------------
+
+Encoding=ISOLatin2Encoding
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+space
+exclam
+quotedbl
+numbersign
+dollar
+percent
+ampersand
+quoteright
+parenleft
+parenright
+asterisk
+plus
+comma
+minus
+period
+slash
+zero
+one
+two
+three
+four
+five
+six
+seven
+eight
+nine
+colon
+semicolon
+less
+equal
+greater
+question
+at
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+bracketleft
+backslash
+bracketright
+asciicircum
+underscore
+quoteleft
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+braceleft
+bar
+braceright
+asciitilde
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+dotlessi
+grave
+acute
+circumflex
+tilde
+.notdef
+breve
+.notdef
+.notdef
+.notdef
+ring
+.notdef
+.notdef
+hungarumlaut
+ogonek
+caron
+.notdef
+Aogonek
+breve
+Lslash
+currency
+Lcaron
+Sacute
+section
+dieresis
+Scaron
+Scedilla
+Tcaron
+Zacute
+hyphen
+Zcaron
+Zdotaccent
+degree
+aogonek
+ogonek
+lslash
+acute
+lcaron
+sacute
+circumflex
+cedilla
+scaron
+scedilla
+tcaron
+zacute
+hungarumlaut
+zcaron
+zdotaccent
+Racute
+Aacute
+Acircumflex
+Abreve
+Adieresis
+Lacute
+Cacute
+Ccedilla
+Ccaron
+Eacute
+Eogonek
+Edieresis
+Ecaron
+Iacute
+Icircumflex
+Dcaron
+Eth
+Nacute
+Ncaron
+Oacute
+Ocircumflex
+Ohungarumlaut
+Odieresis
+multiply
+Rcaron
+Uring
+Uacute
+Uhungarumlaut
+Udieresis
+Yacute
+Tcedilla
+germandbls
+racute
+aacute
+acircumflex
+abreve
+adieresis
+lacute
+cacute
+ccedilla
+ccaron
+eacute
+eogonek
+edieresis
+ecaron
+iacute
+icircumflex
+dcaron
+eth
+nacute
+ncaron
+oacute
+ocircumflex
+ohungarumlaut
+odieresis
+divide
+rcaron
+uring
+uacute
+uhungarumlaut
+udieresis
+yacute
+tcedilla
+dotaccent
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin9.enc b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin9.enc
new file mode 100644
index 00000000000..498cf312325
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/IsoLatin9.enc
@@ -0,0 +1,259 @@
+
+Encoding=ISOLatin9Encoding
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+space
+exclam
+quotedbl
+numbersign
+dollar
+percent
+ampersand
+quoteright
+parenleft
+parenright
+asterisk
+plus
+comma
+minus
+period
+slash
+zero
+one
+two
+three
+four
+five
+six
+seven
+eight
+nine
+colon
+semicolon
+less
+equal
+greater
+question
+at
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+bracketleft
+backslash
+bracketright
+asciicircum
+underscore
+quoteleft
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+braceleft
+bar
+braceright
+asciitilde
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+.notdef
+space
+exclamdown
+cent
+sterling
+Euro
+yen
+Scaron
+section
+scaron
+copyright
+ordfeminine
+guillemotleft
+logicalnot
+hyphen
+registered
+macron
+degree
+plusminus
+twosuperior
+threesuperior
+Zcaron
+mu
+paragraph
+bullet
+zcaron
+onesuperior
+ordmasculine
+guillemotright
+OE
+oe
+Ydieresis
+questiondown
+Agrave
+Aacute
+Acircumflex
+Atilde
+Adieresis
+Aring
+AE
+Ccedilla
+Egrave
+Eacute
+Ecircumflex
+Edieresis
+Igrave
+Iacute
+Icircumflex
+Idieresis
+Eth
+Ntilde
+Ograve
+Oacute
+Ocircumflex
+Otilde
+Odieresis
+multiply
+Oslash
+Ugrave
+Uacute
+Ucircumflex
+Udieresis
+Yacute
+Thorn
+germandbls
+agrave
+aacute
+acircumflex
+atilde
+adieresis
+aring
+ae
+ccedilla
+egrave
+eacute
+ecircumflex
+edieresis
+igrave
+iacute
+icircumflex
+idieresis
+eth
+ntilde
+ograve
+oacute
+ocircumflex
+otilde
+odieresis
+divide
+oslash
+ugrave
+uacute
+ucircumflex
+udieresis
+yacute
+thorn
+ydieresis
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/PSLatin1.enc b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/PSLatin1.enc
new file mode 100644
index 00000000000..10ec12de80e
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/PSLatin1.enc
@@ -0,0 +1,282 @@
+
+ t1lib-encodingfile
+
+This file is intended to be read by the function T1_LoadEncoding(), which is
+part of t1lib. The syntactic format is really simple. The file contents is
+scanned according to the following priciple:
+
+1) There appears a "Encoding=[scheme]" at the beginning of a line.
+
+2) Then exacly 256 lines of text must follow. These lines have to
+ start with a valid charactername, followed by at least one white
+ space character. The remaining of the line is ignored and may be
+ used for comments, e.g., for numbering of characters.
+
+3) After these 256 lines all following data is ignored.
+
+Notice: This file contains ISOLatin1Encoding as defined in the PostScript
+ language (Level 2 and above). It differs slightly from what is
+ specified in ISO 8859-1.
+
+ (1999-11-16, RMz)
+
+--------------------------------------------------------------------------
+
+Encoding=PSLatin1Encoding /* The name of the encoding scheme */
+.notdef /* '000 000 "00 */
+.notdef /* '001 001 "01 */
+.notdef /* '002 002 "02 */
+.notdef /* '003 003 "03 */
+.notdef /* '004 004 "04 */
+.notdef /* '005 005 "05 */
+.notdef /* '006 006 "06 */
+.notdef /* '007 007 "07 */
+.notdef /* '010 008 "08 */
+.notdef /* '011 009 "09 */
+.notdef /* '012 010 "0A */
+.notdef /* '013 011 "0B */
+.notdef /* '014 012 "0C */
+.notdef /* '015 013 "0D */
+.notdef /* '016 014 "0E */
+.notdef /* '017 015 "0F */
+.notdef /* '020 016 "10 */
+.notdef /* '021 017 "11 */
+.notdef /* '022 018 "12 */
+.notdef /* '023 019 "13 */
+.notdef /* '024 020 "14 */
+.notdef /* '025 021 "15 */
+.notdef /* '026 022 "16 */
+.notdef /* '027 023 "17 */
+.notdef /* '030 024 "18 */
+.notdef /* '031 025 "19 */
+.notdef /* '032 026 "1A */
+.notdef /* '033 027 "1B */
+.notdef /* '034 028 "1C */
+.notdef /* '035 029 "1D */
+.notdef /* '036 030 "1E */
+.notdef /* '037 031 "1F */
+space /* '040 032 "20 */
+exclam /* '041 033 "21 */
+quotedbl /* '042 034 "22 */
+numbersign /* '043 035 "23 */
+dollar /* '044 036 "24 */
+percent /* '045 037 "25 */
+ampersand /* '046 038 "26 */
+quoteright /* '047 039 "27 */
+parenleft /* '050 040 "28 */
+parenright /* '051 041 "29 */
+asterisk /* '052 042 "2A */
+plus /* '053 043 "2B */
+comma /* '054 044 "2C */
+minus /* '055 045 "2D */
+period /* '056 046 "2E */
+slash /* '057 047 "2F */
+zero /* '060 048 "30 */
+one /* '061 049 "31 */
+two /* '062 050 "32 */
+three /* '063 051 "33 */
+four /* '064 052 "34 */
+five /* '065 053 "35 */
+six /* '066 054 "36 */
+seven /* '067 055 "37 */
+eight /* '070 056 "38 */
+nine /* '071 057 "39 */
+colon /* '072 058 "3A */
+semicolon /* '073 059 "3B */
+less /* '074 060 "3C */
+equal /* '075 061 "3D */
+greater /* '076 062 "3E */
+question /* '077 063 "3F */
+at /* '100 064 "40 */
+A /* '101 065 "41 */
+B /* '102 066 "42 */
+C /* '103 067 "43 */
+D /* '104 068 "44 */
+E /* '105 069 "45 */
+F /* '106 070 "46 */
+G /* '107 071 "47 */
+H /* '110 072 "48 */
+I /* '111 073 "49 */
+J /* '112 074 "4A */
+K /* '113 075 "4B */
+L /* '114 076 "4C */
+M /* '115 077 "4D */
+N /* '116 078 "4E */
+O /* '117 079 "4F */
+P /* '120 080 "50 */
+Q /* '121 081 "51 */
+R /* '122 082 "52 */
+S /* '123 083 "53 */
+T /* '124 084 "54 */
+U /* '125 085 "55 */
+V /* '126 086 "56 */
+W /* '127 087 "57 */
+X /* '130 088 "58 */
+Y /* '131 089 "59 */
+Z /* '132 090 "5A */
+bracketleft /* '133 091 "5B */
+backslash /* '134 092 "5C */
+bracketright /* '135 093 "5D */
+asciicircum /* '136 094 "5E */
+underscore /* '137 095 "5F */
+quoteleft /* '140 096 "60 */
+a /* '141 097 "61 */
+b /* '142 098 "62 */
+c /* '143 099 "63 */
+d /* '144 100 "64 */
+e /* '145 101 "65 */
+f /* '146 102 "66 */
+g /* '147 103 "67 */
+h /* '150 104 "68 */
+i /* '151 105 "69 */
+j /* '152 106 "6A */
+k /* '153 107 "6B */
+l /* '154 108 "6C */
+m /* '155 109 "6D */
+n /* '156 110 "6E */
+o /* '157 111 "6F */
+p /* '160 112 "70 */
+q /* '161 113 "71 */
+r /* '162 114 "72 */
+s /* '163 115 "73 */
+t /* '164 116 "74 */
+u /* '165 117 "75 */
+v /* '166 118 "76 */
+w /* '167 119 "77 */
+x /* '170 120 "78 */
+y /* '171 121 "79 */
+z /* '172 122 "7A */
+braceleft /* '173 123 "7B */
+bar /* '174 124 "7C */
+braceright /* '175 125 "7D */
+asciitilde /* '176 126 "7E */
+.notdef /* '177 127 "7F */
+.notdef /* '200 128 "80 */
+.notdef /* '201 129 "81 */
+.notdef /* '202 130 "82 */
+.notdef /* '203 131 "83 */
+.notdef /* '204 132 "84 */
+.notdef /* '205 133 "85 */
+.notdef /* '206 134 "86 */
+.notdef /* '207 135 "87 */
+.notdef /* '210 136 "88 */
+.notdef /* '211 137 "89 */
+.notdef /* '212 138 "8A */
+.notdef /* '213 139 "8B */
+.notdef /* '214 140 "8C */
+.notdef /* '215 141 "8D */
+.notdef /* '216 142 "8E */
+.notdef /* '217 143 "8F */
+dotlessi /* '220 144 "90 */
+grave /* '221 145 "91 */
+acute /* '222 146 "92 */
+circumflex /* '223 147 "93 */
+tilde /* '224 148 "94 */
+macron /* '225 149 "95 */
+breve /* '226 150 "96 */
+dotaccent /* '227 151 "97 */
+dieresis /* '230 152 "98 */
+.notdef /* '231 153 "99 */
+ring /* '232 154 "9A */
+cedilla /* '233 155 "9B */
+.notdef /* '234 156 "9C */
+hungarumlaut /* '235 157 "9D */
+ogonek /* '236 158 "9E */
+caron /* '237 159 "9F */
+space /* '240 160 "A0 */
+exclamdown /* '241 161 "A1 */
+cent /* '242 162 "A2 */
+sterling /* '243 163 "A3 */
+currency /* '244 164 "A4 */
+yen /* '245 165 "A5 */
+brokenbar /* '246 166 "A6 */
+section /* '247 167 "A7 */
+dieresis /* '250 168 "A8 */
+copyright /* '251 169 "A9 */
+ordfeminine /* '252 170 "AA */
+guillemotleft /* '253 171 "AB */
+logicalnot /* '254 172 "AC */
+hyphen /* '255 173 "AD */
+registered /* '256 174 "AE */
+macron /* '257 175 "AF */
+degree /* '260 176 "B0 */
+plusminus /* '261 177 "B1 */
+twosuperior /* '262 178 "B2 */
+threesuperior /* '263 179 "B3 */
+acute /* '264 180 "B4 */
+mu /* '265 181 "B5 */
+paragraph /* '266 182 "B6 */
+periodcentered /* '267 183 "B7 */
+cedilla /* '270 184 "B8 */
+onesuperior /* '271 185 "B9 */
+ordmasculine /* '272 186 "BA */
+guillemotright /* '273 187 "BB */
+onequarter /* '274 188 "BC */
+onehalf /* '275 189 "BD */
+threequarters /* '276 190 "BE */
+questiondown /* '277 191 "BF */
+Agrave /* '300 192 "C0 */
+Aacute /* '301 193 "C1 */
+Acircumflex /* '302 194 "C2 */
+Atilde /* '303 195 "C3 */
+Adieresis /* '304 196 "C4 */
+Aring /* '305 197 "C5 */
+AE /* '306 198 "C6 */
+Ccedilla /* '307 199 "C7 */
+Egrave /* '310 200 "C8 */
+Eacute /* '311 201 "C9 */
+Ecircumflex /* '312 202 "CA */
+Edieresis /* '313 203 "CB */
+Igrave /* '314 204 "CC */
+Iacute /* '315 205 "CD */
+Icircumflex /* '316 206 "CE */
+Idieresis /* '317 207 "CF */
+Eth /* '320 208 "D0 */
+Ntilde /* '321 209 "D1 */
+Ograve /* '322 210 "D2 */
+Oacute /* '323 211 "D3 */
+Ocircumflex /* '324 212 "D4 */
+Otilde /* '325 213 "D5 */
+Odieresis /* '326 214 "D6 */
+multiply /* '327 215 "D7 */
+Oslash /* '330 216 "D8 */
+Ugrave /* '331 217 "D9 */
+Uacute /* '332 218 "DA */
+Ucircumflex /* '333 219 "DB */
+Udieresis /* '334 220 "DC */
+Yacute /* '335 221 "DD */
+Thorn /* '336 222 "DE */
+germandbls /* '337 223 "DF */
+agrave /* '340 224 "E0 */
+aacute /* '341 225 "E1 */
+acircumflex /* '342 226 "E2 */
+atilde /* '343 227 "E3 */
+adieresis /* '344 228 "E4 */
+aring /* '345 229 "E5 */
+ae /* '346 230 "E6 */
+ccedilla /* '347 231 "E7 */
+egrave /* '350 232 "E8 */
+eacute /* '351 233 "E9 */
+ecircumflex /* '352 234 "EA */
+edieresis /* '353 235 "EB */
+igrave /* '354 236 "EC */
+iacute /* '355 237 "ED */
+icircumflex /* '356 238 "EE */
+idieresis /* '357 239 "EF */
+eth /* '360 240 "F0 */
+ntilde /* '361 241 "F1 */
+ograve /* '362 242 "F2 */
+oacute /* '363 243 "F3 */
+ocircumflex /* '364 244 "F4 */
+otilde /* '365 245 "F5 */
+odieresis /* '366 246 "F6 */
+divide /* '367 247 "F7 */
+oslash /* '370 248 "F8 */
+ugrave /* '371 249 "F9 */
+uacute /* '372 250 "FA */
+ucircumflex /* '373 251 "FB */
+udieresis /* '374 252 "FC */
+yacute /* '375 253 "FD */
+thorn /* '376 254 "FE */
+ydieresis /* '377 255 "FF */
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dc.enc b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dc.enc
new file mode 100644
index 00000000000..a641af9553d
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dc.enc
@@ -0,0 +1,78 @@
+% This is an old version of the Cork encoding, with no value but historical.
+%
+% These are the ligs and kerns in addition to those found in the
+% AFM file. (The only ligs in the Times-Roman.afm file are the
+% fi and fl ligatures.)
+%
+% LIGKERN space l =: lslash ; space L =: Lslash ;
+% LIGKERN question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+%
+% We blow away kerns to and from spaces (TeX doesn't have a
+% space) and also remove any kerns from the numbers (although
+% the only kern pair that mentions a number in Times-Roman.afm
+% is one one.)
+%
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+%
+/DCEncoding[/test/test2 % now 256 chars follow
+% 0x00
+ /grave /acute /circumflex /tilde /dieresis /hungarumlaut %/ring /caron
+ /breve /macron /dotaccent /cedilla
+ /ogonek /quotesinglbase /guilsinglleft /guilsinglright
+% 0x10
+ /quotedblleft /quotedblright /quotedblbase /guillemotleft
+ /guillemotright /endash /emdash /.notdef
+ /zeroinferior /dotlessi /dotlessj /ff /fi /fl /ffi /ffl
+% 0x20
+ /.notdef /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /hyphen
+% 0x80
+ /Abreve /Aogonek /Cacute /Ccaron /Dcaron /Ecaron /Eogonek /Gbreve
+ /Lacute /Lcaron /Lslash /Nacute /Ncaron /Ng /Ohungarumlaut /Racute
+% 0x90
+ /Rcaron /Sacute /Scaron /Scedilla /Tcaron /Tcedilla /Uhungarumlaut /Uring
+ /Ldot /Zacute /Zcaron /Zdotaccent /IJ /Idotaccent /dbar /section
+% 0xA0
+ /abreve /aogonek /cacute /ccaron /dcaron /ecaron /eogonek /gbreve
+ /lacute /lcaron /lslash /nacute /ncaron /ng /ohungarumlaut /racute
+% 0xB0
+ /rcaron /sacute /scaron /scedilla /tcaron /tcedilla /uhungarumlaut /uring
+ /ldot /zacute /zcaron /zdotaccent /ij /exclamdown /questiondown /sterling
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /SS
+% 0xE0
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+% /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe
+ /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/germandbls ] def \ No newline at end of file
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dvips.enc b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dvips.enc
new file mode 100644
index 00000000000..ea451ff106b
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/enc/dvips.enc
@@ -0,0 +1,75 @@
+% @@psencodingfile@{
+% author = "T. Rokicki, K. Berry",
+% version = "2.0",
+% date = "22 June 1996",
+% filename = "dvips.enc",
+% email = "kb@@mail.tug.org",
+% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+% codetable = "ISO/ASCII",
+% checksum = "75 515 3715",
+% docstring = "An encoding for PostScript fonts to be used with TeX."
+% @}
+%
+% This is almost the default encoding produced by the afm2tfm program
+% that comes with the dvips distribution, when it is applied to a
+% StandardEncoding PostScript font. The positions of the accented
+% characters (which afm2tfm assigned more or less randomly in the
+% previous set of fonts) have been held fixed.
+%
+% It is almost upward-compatible with TeX text. (The primary exceptions
+% are dotaccent and hungarumlaut.) Some of the ligatures are also in
+% different positions, but this is not important, since ligature
+% positions are defined in the TFM file, not by macros.
+%
+% The character positions were assigned in this order:
+% 1) non-composite characters in the afm2tfm encoding (except dotlessj
+% was included in its plain TeX position);
+% 2) available characters in the Cork (EC) encoding;
+% 3) remaining composite characters in the base encoding (starting at
+% position 130 decimal). We don't include all the other base
+% characters because that changes the height/depth/width tables in
+% the TFM files (because more characters mean more distinct values).
+%
+% We leave the initial positions open for the Greek letters in Times-Roman.
+%
+/DvipsEncoding [
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /quotesingle /exclamdown /questiondown
+ /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring
+ /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+ /at /A /B /C /D /E /F /G
+ /H /I /J /K /L /M /N /O
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /circumflex /underscore
+ /quoteleft /a /b /c /d /e /f /g
+ /h /i /j /k /l /m /n /o
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /tilde /dieresis
+ /asciicircum /asciitilde /Ccedilla /Iacute
+ /Icircumflex /atilde /edieresis /egrave
+ /scaron /zcaron /Eth /ff /ffi /ffl /.notdef /.notdef
+ /.notdef /.notdef /Scaron /.notdef /.notdef /.notdef /.notdef /.notdef
+ /Ydieresis /.notdef /Zcaron /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /cent /sterling /fraction /yen /florin /section
+ /currency /copyright /quotedblleft /guillemotleft
+ /guilsinglleft /guilsinglright /fi /fl
+ /degree /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph /bullet
+ /quotesinglbase /quotedblbase /quotedblright /guillemotright
+ /ellipsis /perthousand /.notdef /.notdef
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /.notdef /dotaccent
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /hungarumlaut /ogonek /Idieresis
+ /emdash /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /.notdef
+ /.notdef /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /.notdef
+ /agrave /aacute /acircumflex /ordfeminine
+ /adieresis /aring /.notdef /ccedilla
+ /Lslash /eacute /ecircumflex /ordmasculine
+ /igrave /iacute /icircumflex /idieresis
+ /.notdef /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /.notdef
+ /lslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
+] def
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/README b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/README
new file mode 100644
index 00000000000..48f3f23f911
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/README
@@ -0,0 +1,21 @@
+This is a copy of the Charter fonts which Bitstream contributed to the X
+consortium, arranged for use with TeX. Here is the copyright notice:
+
+ (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+
+ You are hereby granted permission under all Bitstream propriety rights
+ to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream
+ Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts
+ for any purpose and without restriction; provided, that this notice is
+ left intact on all copies of such fonts and that Bitstream's trademark
+ is acknowledged as shown below on all unmodified copies of the 4 Charter
+ Type 1 fonts.
+
+ BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+I used the `afm2tfm' program which comes with Tom Rokicki's dvips to
+convert the AFM files to TFM and VF files. You can get dvips from
+labrea.stanford.edu.
+
+karl@cs.umb.edu
+Member of the League for Programming Freedom---write to lpf@uunet.uu.net.
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchb.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchb.pfb
new file mode 100644
index 00000000000..07011728968
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchb.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchbi.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchbi.pfb
new file mode 100644
index 00000000000..d68f639bb01
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchbi.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchr.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchr.pfb
new file mode 100644
index 00000000000..72a1606b4b4
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchr.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchri.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchri.pfb
new file mode 100644
index 00000000000..b5d4ded6b26
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/bchri.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbx10.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbx10.pfb
new file mode 100644
index 00000000000..597d6199ffe
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbx10.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbxti10.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbxti10.pfb
new file mode 100644
index 00000000000..f8c7de984ae
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcbxti10.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcr10.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcr10.pfb
new file mode 100644
index 00000000000..34cb0eaa8f5
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcr10.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcti10.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcti10.pfb
new file mode 100644
index 00000000000..54663d628f0
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/dcti10.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/eufm10.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/eufm10.pfb
new file mode 100644
index 00000000000..47b19889dbd
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Fonts/type1/eufm10.pfb
Binary files differ
diff --git a/Build/source/libs/graphite-engine/license/License_LGPLv21.txt b/Build/source/libs/t1lib/t1lib-5.1.2/LGPL
index 807db791666..92b8903ff3f 100644
--- a/Build/source/libs/graphite-engine/license/License_LGPLv21.txt
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/LGPL
@@ -1,14 +1,13 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
@@ -17,109 +16,97 @@ freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-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 and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, 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
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
+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 library, or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
- GNU LESSER GENERAL PUBLIC LICENSE
+ GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
@@ -268,7 +255,7 @@ distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
- 6. As an exception to the Sections above, you may also combine or
+ 6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
@@ -295,31 +282,23 @@ of these things:
Library will not necessarily be able to recompile the application
to use the modified definitions.)
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
+ b) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
- d) If distribution of the work is made by offering access to copy
+ c) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
- e) Verify that the user has already received a copy of these
+ d) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
+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.
@@ -368,7 +347,7 @@ Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
+You are not responsible for enforcing compliance by third parties to
this License.
11. If, as a consequence of a court judgment or allegation of patent
@@ -411,7 +390,7 @@ excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
+versions of the Library 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.
@@ -474,17 +453,17 @@ convey the exclusion of warranty; and each file should have at least the
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
+ modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
+ version 2 of the License, or (at your option) any later version.
This library 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
- Lesser General Public License for more details.
+ Library General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
@@ -500,7 +479,3 @@ necessary. Here is a sample; alter the names:
Ty Coon, President of Vice
That's all there is to it!
-
-
-
-
diff --git a/Build/source/libs/xpdf/COPYING b/Build/source/libs/t1lib/t1lib-5.1.2/LICENSE
index a43ea2126fb..a43ea2126fb 100644
--- a/Build/source/libs/xpdf/COPYING
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/LICENSE
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/Makefile.in
new file mode 100644
index 00000000000..29c3468f970
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/Makefile.in
@@ -0,0 +1,166 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# uninstall
+# without_doc
+# clean
+# distclean
+# t1python-all
+# t1python-clean
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 04/06/1997
+# Last modified: 2005-05-01
+#
+
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+ALLCFLAGS = $(CFLAGS) $(X_CFLAGS)
+SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)'
+@SET_MAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+t1lib_version = @T1LIB_VERSION@
+t1lib_revision = @T1LIB_REVISION@
+t1lib_patchlevel = @T1LIB_PATCHLEVEL@
+
+# Main target to build
+
+MAIN_TARGET = @MAIN_TARGET@
+COMMONSUBDIRS = lib \
+ type1afm \
+ examples
+DOCSUBDIRS = doc
+
+
+
+# Drop xglyph from targets if we do not have X11
+XSUBDIRS = @XSUBDIRS@
+
+
+ALLSUBDIRS = $(COMMONSUBDIRS) $(XSUBDIRS)
+
+DUMMYSUBDIRS = XXXX
+
+all: $(DUMMYSUBDIRS) $(DOCSUBDIRS)
+
+
+without_doc: $(DUMMYSUBDIRS)
+
+
+# warning the following target does only work with gcc and is no
+# official target. It generates .dependencies files and changes
+# the suffixes from .o to .lo.
+dependencies: dummy
+ for i in $(ALLSUBDIRS); do \
+ (cd $$i; make dependencies ) || exit 1; \
+ done
+
+
+
+$(DOCSUBDIRS): dummy
+ for i in $(DOCSUBDIRS); do \
+ (cd $$i; $(SUBMAKE) ) || exit 1; \
+ done
+
+
+$(DUMMYSUBDIRS): dummy
+ for i in $(ALLSUBDIRS); do \
+ (cd $$i; $(SUBMAKE) ) || exit 1; \
+ done
+
+
+install: dummy
+ for i in $(ALLSUBDIRS) $(DOCSUBDIRS); do \
+ (cd $$i; $(MAKE) install) || exit 1; \
+ done
+
+
+uninstall: dummy
+ for i in $(ALLSUBDIRS) $(DOCSUBDIRS); do \
+ (cd $$i; $(MAKE) uninstall) || exit 1; \
+ done
+ $(RM) -Rf $(datadir)/t1lib-$(t1lib_version).$(t1lib_revision)
+
+
+.PHONY: uninstall
+
+
+.PHONY: install
+
+
+.PHONY: clean
+
+
+clean: dummy
+ for i in $(ALLSUBDIRS); do \
+ (cd $$i; $(MAKE) clean) || exit 1; \
+ done
+ for i in $(DOCSUBDIRS); do \
+ (cd $$i; $(MAKE) clean) || exit 1; \
+ done
+
+
+# In order not to delete the t1python Makefile, we have to remove the
+# Makefile's one at a time:
+distclean: clean
+ $(RM) *~
+ $(RM) config.cache config.log config.status
+ $(RM) Makefile
+ $(RM) lib/Makefile
+ $(RM) lib/type1/Makefile
+ $(RM) lib/t1lib/Makefile
+ $(RM) lib/t1lib/sysconf.h
+ $(RM) type1afm/Makefile
+ $(RM) examples/Makefile
+ $(RM) xglyph/Makefile
+ $(RM) doc/Makefile
+ $(RM) libtool
+
+
+# The following two targets are for building and cleaning the python-
+# interface contributed by Fred L. Drake, Jr. They are completely
+# independent from the other t1lib-targets.
+t1python-all:
+ (cd t1python; $(MAKE); $(MAKE))
+
+
+t1python-clean:
+ (cd t1python; $(MAKE) clean)
+
+
+dummy:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/README.t1lib-5.1.2 b/Build/source/libs/t1lib/t1lib-5.1.2/README.t1lib-5.1.2
new file mode 100644
index 00000000000..55828319b09
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/README.t1lib-5.1.2
@@ -0,0 +1,223 @@
+
+ --------------------------------------------------------------------------
+ --------------------------- t1lib-README ---------------------------------
+ --------------------------------------------------------------------------
+
+/*--------------------------------------------------------------------------
+ ----- File: REAMDE.t1lib-5.1.2
+ ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+ ----- Date: 2007-12-23
+ ----- Description: This is file README.t1lib of the t1lib-package. It
+ contains an overview and brief installation
+ instructions for the t1-library.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007.
+ As of version 0.5, t1lib is distributed under the
+ GNU General Public Library License. The
+ conditions can be found in the files LICENSE and
+ LGPL, which should reside in the toplevel
+ directory of the distribution. Please note that
+ there are parts of t1lib that are subject to
+ other licenses:
+ The parseAFM-package is copyrighted by Adobe Systems
+ Inc.
+ The type1 rasterizer is copyrighted by IBM and the
+ X11-consortium.
+ ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+ ----- Credits: I want to thank IBM and the X11-consortium for making
+ their rasterizer freely available.
+ Also thanks to Piet Tutelaers for his ps2pk, from
+ which I took the rasterizer sources in a format
+ independent from X11.
+ Thanks to all people who make free software living!
+--------------------------------------------------------------------------*/
+
+
+
+About t1lib:
+------------
+
+t1lib is a library distributed under the GNU General Public Library
+License for generating character- and string-glyphs from Adobe Type 1
+fonts under UNIX. t1lib uses most of the code of the X11 rasterizer
+donated by IBM to the X11-project. But some disadvantages of the
+rasterizer being included in X11 have been eliminated. Here are some
+of the features:
+
+- t1lib is completely independent of X11 (although the program
+ provided for testing the library needs X11)
+
+- fonts are made known to library by means of a font database file at
+ runtime
+
+- searchpaths for all types of input files are configured by means
+ of a configuration file at runtime
+
+- characters are rastered as they are needed
+
+- characters and complete strings may be rastered by a simple function
+ call
+
+- when rastering strings, pairwise kerning information from .afm-files
+ may optionally be taken into account
+
+- an interface to ligature-information of afm-files is provided
+
+- a program to generate afm-files from Type 1 font files is included
+
+- rotation and arbitrary transformations are supported
+
+- there's support for extending and slanting fonts
+
+- underlining, overlining and overstriking is supported
+
+- new encoding vectors may be loaded at runtime and fonts may be
+ reencoded using these encoding vectors
+
+- antialiasing is implemented
+
+- Right-To-Left typesetting is supported
+
+- Font subsetting is easily possible
+
+- support of composite character information
+
+- stroking of character outlines with variable strokewidths
+
+- An interactive test program called "xglyph" is included in the
+ distribution. This program allows to test all of the features of the
+ library. It requires X11.
+
+
+
+Changes and New Features:
+-------------------------
+
+- See the file Changes in the T1Lib top-directory for information on new
+ features.
+
+
+
+Installation:
+-------------
+
+-----------------------------------------------------------------------------
+Note: VMS-users should examine configure.com in the toplevel directory, which
+ is a configure-script for VMS, kindly contributed by John Hasstedt
+ and now maintained by Martin Zinser.
+ This file contains notes on how to compile t1lib on VMS.
+-----------------------------------------------------------------------------
+
+
+After unpacking the archive (what you obviously did already), change
+to subdirectory t1lib-..../ and type:
+
+ ./configure
+
+This will create the Makefiles. Then type
+
+ make
+
+
+In order to use the testprogram xglyph, X11 needs to be installed on your
+system.
+
+If you have difficulties during configuring and building t1lib, cd to
+directory t1lib-.../doc and execute
+
+ $ latex t1lib_doc.tex
+ $ makeindex t1lib_doc
+ $ latex t1lib_doc.tex
+ $ latex t1lib_doc.tex
+
+This will generate the docs which contain a more detailed description
+of the build-process. LaTeX2e is required. Alternatively, you can scan the
+preformatted pdf-documentation.
+
+
+Before installing the libraries, you should test whether all things
+work correct:
+
+1) Change to subdirectory xglyph
+
+2) Start the program xglyph
+
+3) Ensure that the output-window is not hidden behind another window.
+
+4) Before doing anything other, click on button "String". The
+ string "Test" should now be rastered and displayed in the
+ output-window, using font BitstreamCharterBTRoman at 100bp without
+ kerning. If that works, most probably all works for you.
+
+5) Have a look at t1lib_doc.dvi in the doc-subdirectory of the package
+ and read the chapter on xglyph. However, most of this program is
+ self-explaining, so that you might want to omit this step.
+
+6) Play with the program and enjoy.
+
+7) If you do not have X11, you can still check whether t1lib works for
+ you. Copy one of the pfb-files from t1lib-.../Fonts/type1, say,
+ bchr.pfb, to the type1afm-subdirectory, and run
+
+ type1afm bchr.pfb
+
+ If the afm-file bchr.afm is generated, t1lib will most probably
+ work on your system.
+
+
+
+Documentation:
+--------------
+
+As mentioned above, documentation is provided in LaTeX2e-format
+subdirectory T1Lib/doc. It should have been built during the build.
+The section on runtime setup is really important,
+because programs may fail due to an invalid or incomplete runtime
+setup, although the programs itself may be correct!
+A preformatted Version is also available in pdf.
+
+
+
+How to get it:
+--------------
+
+t1lib is available at
+
+ftp://sunsite.unc.edu/pub/Linux/libs/graphics/t1lib-x.y[.z].tar.gz
+
+where x.y[.z] is the version identification.
+
+
+
+Closing:
+--------
+
+You are allowed to send the author lots of money and dozents of gifts,
+but you needn't :-)
+If you have any comments to this library, feedback is wanted. Send
+eMail to:
+
+Rainer.Menzner@web.de
+
+
+
+Future:
+-------
+
+Within the past years, my time has constantly and increasingly become spare so
+that I hardly found time to further develop t1lib. And developing free
+software is undoubtedly related to a certain amount of fun, which in turn only
+can come up if you are relaxed with respect to time ...
+
+Since t1lib now has reached a reasonably stable state, I intend to more or
+less freeze the development of new features at this point. Of course, bug
+fixes etc. should be possible further.
+
+If there is somebody out there willing to further develop t1lib, he or she is
+welcome to contact me ...
+
+
+
+Have fun,
+
+ -Rainer
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/README.t1python b/Build/source/libs/t1lib/t1lib-5.1.2/README.t1python
new file mode 100644
index 00000000000..fc87f9d5278
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/README.t1python
@@ -0,0 +1,18 @@
+
+ About t1python
+ --------------
+
+t1python is a wrapper in the Python language, written by Fred L. Drake, Jr
+(fdrake@acm.org), which makes most functionality of t1lib available from
+within Python script programs. Further information about this package is
+available at
+
+http://www.python.org/sigs/image-sig/t1lib/
+
+As opposed to some earlier versions t1python is not included in the current
+version of t1lib. This is due to time constraints of Fred and myself. Users
+interested in t1python should watch the URL above for getting information
+about newer versions of t1python.
+
+
+-Rainer
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/README.win32 b/Build/source/libs/t1lib/t1lib-5.1.2/README.win32
new file mode 100644
index 00000000000..63986330dcb
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/README.win32
@@ -0,0 +1,6 @@
+The directory win32 contains some files for compiling t1lib under MS Visual
+C++ 6.0. They are contributed by Nakano Hideo (hideo@mb.infoeddy.ne.jp).
+
+I can't tell anything about this and add it to the sources for convenience.
+
+ (RMz, 2000-03-20)
diff --git a/Build/source/libs/graphite-engine/config/config.guess b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/config.guess
index e5716eea733..7d0185e019e 100755
--- a/Build/source/libs/graphite-engine/config/config.guess
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/config.guess
@@ -1,10 +1,9 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-timestamp='2009-02-03'
+timestamp='2004-09-07'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -18,15 +17,13 @@ timestamp='2009-02-03'
#
# 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 Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# 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.
-
# Originally written by Per Bothner <per@bothner.com>.
# Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted ChangeLog entry.
@@ -56,8 +53,8 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -69,11 +66,11 @@ Try \`$me --help' for more information."
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
+ echo "$timestamp" ; exit 0 ;;
--version | -v )
- echo "$version" ; exit ;;
+ echo "$version" ; exit 0 ;;
--help | --h* | -h )
- echo "$usage"; exit ;;
+ echo "$usage"; exit 0 ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
@@ -107,7 +104,7 @@ set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -126,7 +123,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in
;;
,,*) CC_FOR_BUILD=$CC ;;
,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+esac ;'
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
@@ -161,7 +158,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
@@ -200,23 +196,55 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "${machine}-${os}${release}"
- exit ;;
+ exit 0 ;;
+ amd64:OpenBSD:*:*)
+ echo x86_64-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ cats:OpenBSD:*:*)
+ echo arm-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ luna88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips64-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
*:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
*:ekkoBSD:*:*)
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+ exit 0 ;;
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -269,43 +297,37 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
+ exit 0 ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
# of the specific Alpha model?
echo alpha-pc-interix
- exit ;;
+ exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
- exit ;;
+ exit 0 ;;
Amiga*:UNIX_System_V:4.0:*)
echo m68k-unknown-sysv4
- exit ;;
+ exit 0;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
+ exit 0 ;;
*:[Mm]orph[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
+ exit 0 ;;
*:OS/390:*:*)
echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
+ exit 0 ;;
*:OS400:*:*)
echo powerpc-ibm-os400
- exit ;;
+ exit 0 ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
+ exit 0;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
- exit ;;
+ exit 0;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
@@ -313,45 +335,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
else
echo pyramid-pyramid-bsd
fi
- exit ;;
+ exit 0 ;;
NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
- exit ;;
+ exit 0 ;;
DRS?6000:unix:4.0:6*)
echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ exit 0 ;;
+ DRS?6000:UNIX_SV:4.2*:7*)
case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
+ sparc) echo sparc-icl-nx7 && exit 0 ;;
esac ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
+ exit 0 ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval $set_cc_for_build
- SUN_ARCH="i386"
- # If there is a compiler, see if it is configured for 64-bit objects.
- # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- # This test works for both compilers.
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- SUN_ARCH="x86_64"
- fi
- fi
- echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
+ exit 0 ;;
sun4*:SunOS:*:*)
case "`/usr/bin/arch -k`" in
Series*|S4*)
@@ -360,10 +369,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
+ exit 0 ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
@@ -375,10 +384,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo sparc-sun-sunos${UNAME_RELEASE}
;;
esac
- exit ;;
+ exit 0 ;;
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
@@ -389,40 +398,40 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
- exit ;;
+ exit 0 ;;
RISC*:ULTRIX:*:*)
echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -446,33 +455,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
exit (-1);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
+ $CC_FOR_BUILD -o $dummy $dummy.c \
+ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && exit 0
echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
Motorola:PowerMAX_OS:*:*)
echo powerpc-motorola-powermax
- exit ;;
+ exit 0 ;;
Motorola:*:4.3:PL8-*)
echo powerpc-harris-powermax
- exit ;;
+ exit 0 ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
echo powerpc-harris-powermax
- exit ;;
+ exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
- exit ;;
+ exit 0 ;;
m88k:CX/UX:7*:*)
echo m88k-harris-cxux7
- exit ;;
+ exit 0 ;;
m88k:*:4*:R4*)
echo m88k-motorola-sysv4
- exit ;;
+ exit 0 ;;
m88k:*:3*:R3*)
echo m88k-motorola-sysv3
- exit ;;
+ exit 0 ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
@@ -488,29 +496,29 @@ EOF
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
- exit ;;
+ exit 0 ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
- exit ;;
+ exit 0 ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
echo m88k-motorola-sysv3
- exit ;;
+ exit 0 ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
echo m88k-tektronix-sysv3
- exit ;;
+ exit 0 ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
echo m68k-tektronix-bsd
- exit ;;
+ exit 0 ;;
*:IRIX*:*:*)
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
+ exit 0 ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
echo i386-ibm-aix
- exit ;;
+ exit 0 ;;
ia64:AIX:*:*)
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
@@ -518,7 +526,7 @@ EOF
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
+ exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
eval $set_cc_for_build
@@ -533,19 +541,15 @@ EOF
exit(0);
}
EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
else
echo rs6000-ibm-aix3.2
fi
- exit ;;
- *:AIX:*:[456])
+ exit 0 ;;
+ *:AIX:*:[45])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
@@ -558,28 +562,28 @@ EOF
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
+ exit 0 ;;
*:AIX:*:*)
echo rs6000-ibm-aix
- exit ;;
+ exit 0 ;;
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
- exit ;;
+ exit 0 ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
+ exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
- exit ;;
+ exit 0 ;;
DPX/2?00:B.O.S.:*:*)
echo m68k-bull-sysv3
- exit ;;
+ exit 0 ;;
9000/[34]??:4.3bsd:1.*:*)
echo m68k-hp-bsd
- exit ;;
+ exit 0 ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
- exit ;;
+ exit 0 ;;
9000/[34678]??:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in
@@ -641,19 +645,9 @@ EOF
esac
if [ ${HP_ARCH} = "hppa2.0w" ]
then
- eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
+ # avoid double evaluation of $set_cc_for_build
+ test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
then
HP_ARCH="hppa2.0w"
else
@@ -661,11 +655,11 @@ EOF
fi
fi
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
+ exit 0 ;;
ia64:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ia64-hp-hpux${HPUX_REV}
- exit ;;
+ exit 0 ;;
3050*:HI-UX:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -693,192 +687,158 @@ EOF
exit (0);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
echo unknown-hitachi-hiuxwe2
- exit ;;
+ exit 0 ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
echo hppa1.1-hp-bsd
- exit ;;
+ exit 0 ;;
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
- exit ;;
+ exit 0 ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
- exit ;;
+ exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
- exit ;;
+ exit 0 ;;
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
- exit ;;
+ exit 0 ;;
i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
echo ${UNAME_MACHINE}-unknown-osf1
fi
- exit ;;
+ exit 0 ;;
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
- exit ;;
+ exit 0 ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
- exit ;;
+ exit 0 ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit ;;
+ exit 0 ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
- exit ;;
+ exit 0 ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
- exit ;;
+ exit 0 ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
- exit ;;
+ exit 0 ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ exit 0 ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-e 's/\.[^.]*$/.X/'
- exit ;;
+ exit 0 ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ exit 0 ;;
CRAY*T3E:*:*:*)
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ exit 0 ;;
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ exit 0 ;;
*:UNICOS/mp:*:*)
echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ exit 0 ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ exit 0 ;;
5000:UNIX_System_V:4.*:*)
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ exit 0 ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW*:*)
+ exit 0 ;;
+ i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
+ exit 0 ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:[3456]*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- EM64T | authenticamd | genuineintel)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- IA64)
- echo ia64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
+ exit 0 ;;
+ x86:Interix*:[34]*)
+ echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+ exit 0 ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
- exit ;;
+ exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
# UNAME_MACHINE based on the output of uname instead of i386?
echo i586-pc-interix
- exit ;;
+ exit 0 ;;
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
+ exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
- exit ;;
+ exit 0 ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
+ exit 0 ;;
*:GNU:*:*)
# the GNU system
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
+ exit 0 ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
+ exit 0 ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
- exit ;;
+ exit 0 ;;
arm*:Linux:*:*)
- eval $set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
- fi
- exit ;;
- avr32*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
cris:Linux:*:*)
echo cris-axis-linux-gnu
- exit ;;
+ exit 0 ;;
crisv32:Linux:*:*)
echo crisv32-axis-linux-gnu
- exit ;;
+ exit 0 ;;
frv:Linux:*:*)
echo frv-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
ia64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
m32r*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
m68*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
mips:Linux:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -895,12 +855,8 @@ EOF
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
;;
mips64:Linux:*:*)
eval $set_cc_for_build
@@ -918,22 +874,15 @@ EOF
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
;;
- or32:Linux:*:*)
- echo or32-unknown-linux-gnu
- exit ;;
ppc:Linux:*:*)
echo powerpc-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
ppc64:Linux:*:*)
echo powerpc64-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
EV5) UNAME_MACHINE=alphaev5 ;;
@@ -947,10 +896,7 @@ EOF
objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -958,31 +904,25 @@ EOF
PA8*) echo hppa2.0-unknown-linux-gnu ;;
*) echo hppa-unknown-linux-gnu ;;
esac
- exit ;;
+ exit 0 ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
echo hppa64-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
s390:Linux:*:* | s390x:Linux:*:*)
echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
+ exit 0 ;;
sh64*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
+ exit 0 ;;
x86_64:Linux:*:*)
echo x86_64-unknown-linux-gnu
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
+ exit 0 ;;
i*86:Linux:*:*)
# The BFD linker knows what the default object file format is, so
# first see if it will tell us. cd to the root directory to prevent
@@ -1000,12 +940,15 @@ EOF
;;
a.out-i386-linux)
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit ;;
+ exit 0 ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit 0 ;;
"")
# Either a pre-BFD a.out linker (linux-gnuoldld) or
# one that does not give us useful --help.
echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit ;;
+ exit 0 ;;
esac
# Determine whether the default compiler is a.out or elf
eval $set_cc_for_build
@@ -1022,7 +965,7 @@ EOF
LIBC=gnulibc1
# endif
#else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+ #ifdef __INTEL_COMPILER
LIBC=gnu
#else
LIBC=gnuaout
@@ -1032,23 +975,16 @@ EOF
LIBC=dietlibc
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
# sysname and nodename.
echo i386-sequent-sysv4
- exit ;;
+ exit 0 ;;
i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
@@ -1056,27 +992,27 @@ EOF
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
+ exit 0 ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
+ exit 0 ;;
i*86:XTS-300:*:STOP)
echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
+ exit 0 ;;
i*86:atheos:*:*)
echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
+ exit 0 ;;
+ i*86:syllable:*:*)
echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
+ exit 0 ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
i*86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
+ exit 0 ;;
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
@@ -1084,16 +1020,15 @@ EOF
else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ exit 0 ;;
+ i*86:*:5:[78]*)
case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
+ exit 0 ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -1111,83 +1046,73 @@ EOF
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
- exit ;;
+ exit 0 ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386.
echo i386-pc-msdosdjgpp
- exit ;;
+ exit 0 ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
- exit ;;
+ exit 0 ;;
paragon:*:*:*)
echo i860-intel-osf1
- exit ;;
+ exit 0 ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
fi
- exit ;;
+ exit 0 ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
echo m68010-convergent-sysv
- exit ;;
+ exit 0 ;;
mc68k:UNIX:SYSTEM5:3.51m)
echo m68k-convergent-sysv
- exit ;;
+ exit 0 ;;
M680?0:D-NIX:5.3:*)
echo m68k-diab-dnix
- exit ;;
+ exit 0 ;;
M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ && echo i486-ncr-sysv4 && exit 0 ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
- exit ;;
+ exit 0 ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
RM*:ReliantUNIX-*:*:*)
echo mips-sni-sysv4
- exit ;;
+ exit 0 ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
- exit ;;
+ exit 0 ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
@@ -1195,84 +1120,69 @@ EOF
else
echo ns32k-sni-sysv
fi
- exit ;;
+ exit 0 ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
echo i586-unisys-sysv4
- exit ;;
+ exit 0 ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
echo hppa1.1-stratus-sysv4
- exit ;;
+ exit 0 ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
+ exit 0 ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
echo hppa1.1-stratus-vos
- exit ;;
+ exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
news*:NEWS-OS:6*:*)
echo mips-sony-newsos6
- exit ;;
+ exit 0 ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
- exit ;;
+ exit 0 ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
- exit ;;
+ exit 0 ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
echo powerpc-apple-beos
- exit ;;
+ exit 0 ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
+ exit 0 ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
SX-6:SUPER-UX:*:*)
echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
case $UNAME_PROCESSOR in
+ *86) UNAME_PROCESSOR=i686 ;;
unknown) UNAME_PROCESSOR=powerpc ;;
esac
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
if test "$UNAME_PROCESSOR" = "x86"; then
@@ -1280,25 +1190,22 @@ EOF
UNAME_MACHINE=pc
fi
echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:QNX:*:4*)
echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
NSR-?:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:NonStop-UX:*:*)
echo mips-compaq-nonstopux
- exit ;;
+ exit 0 ;;
BS2000:POSIX*:*:*)
echo bs2000-siemens-sysv
- exit ;;
+ exit 0 ;;
DS/*:UNIX_System_V:*:*)
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
@@ -1309,50 +1216,38 @@ EOF
UNAME_MACHINE="$cputype"
fi
echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
+ exit 0 ;;
*:TOPS-10:*:*)
echo pdp10-unknown-tops10
- exit ;;
+ exit 0 ;;
*:TENEX:*:*)
echo pdp10-unknown-tenex
- exit ;;
+ exit 0 ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
echo pdp10-dec-tops20
- exit ;;
+ exit 0 ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
echo pdp10-xkl-tops20
- exit ;;
+ exit 0 ;;
*:TOPS-20:*:*)
echo pdp10-unknown-tops20
- exit ;;
+ exit 0 ;;
*:ITS:*:*)
echo pdp10-unknown-its
- exit ;;
+ exit 0 ;;
SEI:*:*:SEIUX)
echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
+ exit 0 ;;
*:DragonFly:*:*)
echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
+ exit 0 ;;
*:*VMS:*:*)
UNAME_MACHINE=`(uname -p) 2>/dev/null`
case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo ${UNAME_MACHINE}-pc-aros
- exit ;;
+ A*) echo alpha-dec-vms && exit 0 ;;
+ I*) echo ia64-dec-vms && exit 0 ;;
+ V*) echo vax-dec-vms && exit 0 ;;
+ esac
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1384,7 +1279,7 @@ main ()
#endif
#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
+ printf ("arm-acorn-riscix"); exit (0);
#endif
#if defined (hp300) && !defined (hpux)
@@ -1473,12 +1368,11 @@ main ()
}
EOF
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
# Apollos put the system type in the environment.
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
# Convex versions that predate uname can use getsysinfo(1)
@@ -1487,22 +1381,22 @@ then
case `getsysinfo -f cpu_type` in
c1*)
echo c1-convex-bsd
- exit ;;
+ exit 0 ;;
c2*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit ;;
+ exit 0 ;;
c34*)
echo c34-convex-bsd
- exit ;;
+ exit 0 ;;
c38*)
echo c38-convex-bsd
- exit ;;
+ exit 0 ;;
c4*)
echo c4-convex-bsd
- exit ;;
+ exit 0 ;;
esac
fi
@@ -1513,9 +1407,7 @@ This script, last modified $timestamp, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+ ftp://ftp.gnu.org/pub/gnu/config/
If the version you run ($0) is already up to date, please
send the following data and any information you think might be
diff --git a/Build/source/libs/graphite-engine/config/config.sub b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/config.sub
index d546a94b951..edb6b663ca2 100755
--- a/Build/source/libs/graphite-engine/config/config.sub
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/config.sub
@@ -1,10 +1,9 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-timestamp='2009-02-03'
+timestamp='2004-08-29'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -22,15 +21,14 @@ timestamp='2009-02-03'
#
# 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 Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
+# 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.
-
# Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted ChangeLog entry.
#
@@ -72,8 +70,8 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -85,11 +83,11 @@ Try \`$me --help' for more information."
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
+ echo "$timestamp" ; exit 0 ;;
--version | -v )
- echo "$version" ; exit ;;
+ echo "$version" ; exit 0 ;;
--help | --h* | -h )
- echo "$usage"; exit ;;
+ echo "$usage"; exit 0 ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
@@ -101,7 +99,7 @@ while test $# -gt 0 ; do
*local*)
# First pass through any local machine types.
echo $1
- exit ;;
+ exit 0;;
* )
break ;;
@@ -120,10 +118,8 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
- kopensolaris*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
@@ -174,10 +170,6 @@ case $os in
-hiux*)
os=-hiuxwe2
;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
-sco5)
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -194,10 +186,6 @@ case $os in
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -242,28 +230,22 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
- | bfin \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
- | fido | fr30 | frv \
+ | fr30 | frv \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep | metag \
+ | m32r | m32rle | m68000 | m68k | m88k | mcore \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
| mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
| mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
| mipsisa64 | mipsisa64el \
@@ -272,25 +254,21 @@ case $basic_machine in
| mipsisa64sr71k | mipsisa64sr71kel \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
- | mt \
| msp430 \
- | nios | nios2 \
| ns16k | ns32k \
- | or32 \
+ | openrisc | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| pyramid \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+ | strongarm \
| tahoe | thumb | tic4x | tic80 | tron \
| v850 | v850e \
| we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k | z80)
+ | x86 | xscale | xstormy16 | xtensa \
+ | z8k)
basic_machine=$basic_machine-unknown
;;
m6811 | m68hc11 | m6812 | m68hc12)
@@ -300,9 +278,6 @@ case $basic_machine in
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;;
- ms1)
- basic_machine=mt-unknown
- ;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@@ -322,32 +297,28 @@ case $basic_machine in
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | bfin-* | bs2000-* \
+ | avr-* \
+ | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
+ | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | m88110-* | m88k-* | mcore-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
| mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
| mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
| mipsisa64-* | mipsisa64el-* \
@@ -356,33 +327,26 @@ case $basic_machine in
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
- | mt-* \
| msp430-* \
- | nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| pyramid-* \
| romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tron-* \
| v850-* | v850e-* | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa*-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+ | xtensa-* \
| ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
+ | z8k-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@@ -446,10 +410,6 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-bsd
;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -458,22 +418,10 @@ case $basic_machine in
basic_machine=ns32k-sequent
os=-dynix
;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
c90)
basic_machine=c90-cray
os=-unicos
;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@@ -502,8 +450,8 @@ case $basic_machine in
basic_machine=craynv-cray
os=-unicosmp
;;
- cr16)
- basic_machine=cr16-unknown
+ cr16c)
+ basic_machine=cr16c-unknown
os=-elf
;;
crds | unos)
@@ -541,14 +489,6 @@ case $basic_machine in
basic_machine=m88k-motorola
os=-sysv3
;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
dpx20 | dpx20-*)
basic_machine=rs6000-bull
os=-bosx
@@ -699,14 +639,6 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
m88k-omron*)
basic_machine=m88k-omron
;;
@@ -722,10 +654,6 @@ case $basic_machine in
basic_machine=i386-pc
os=-mingw32
;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
miniframe)
basic_machine=m68000-convergent
;;
@@ -751,9 +679,6 @@ case $basic_machine in
basic_machine=i386-pc
os=-msdos
;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
mvs)
basic_machine=i370-ibm
os=-mvs
@@ -829,8 +754,9 @@ case $basic_machine in
basic_machine=hppa1.1-oki
os=-proelf
;;
- openrisc | openrisc-*)
+ or32 | or32-*)
basic_machine=or32-unknown
+ os=-coff
;;
os400)
basic_machine=powerpc-ibm
@@ -852,14 +778,6 @@ case $basic_machine in
basic_machine=i860-intel
os=-osf
;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
pbd)
basic_machine=sparc-tti
;;
@@ -869,12 +787,6 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc
;;
@@ -931,10 +843,6 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
- rdos)
- basic_machine=i386-pc
- os=-rdos
- ;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
@@ -961,10 +869,6 @@ case $basic_machine in
sb1el)
basic_machine=mipsisa64sb1el-unknown
;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
- ;;
sei)
basic_machine=mips-sei
os=-seiux
@@ -976,9 +880,6 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
sh64)
basic_machine=sh64-unknown
;;
@@ -1068,10 +969,6 @@ case $basic_machine in
basic_machine=tic6x-unknown
os=-coff
;;
- tile*)
- basic_machine=tile-unknown
- os=-linux-gnu
- ;;
tx39)
basic_machine=mipstx39-unknown
;;
@@ -1132,10 +1029,6 @@ case $basic_machine in
basic_machine=hppa1.1-winbond
os=-proelf
;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
xps | xps100)
basic_machine=xps100-honeywell
;;
@@ -1147,10 +1040,6 @@ case $basic_machine in
basic_machine=z8k-unknown
os=-sim
;;
- z80-*-coff)
- basic_machine=z80-unknown
- os=-sim
- ;;
none)
basic_machine=none-none
os=-none
@@ -1189,10 +1078,13 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
- sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b)
basic_machine=sparc-sun
;;
cydra)
@@ -1261,28 +1153,24 @@ case $os in
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* | -cegcc* \
+ | -chorusos* | -chorusrdb* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1300,7 +1188,7 @@ case $os in
os=`echo $os | sed -e 's|nto|nto-qnx|'`
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
;;
-mac*)
@@ -1409,12 +1297,6 @@ case $os in
-kaos*)
os=-kaos
;;
- -zvmoe)
- os=-zvmoe
- ;;
- -dicos*)
- os=-dicos
- ;;
-none)
;;
*)
@@ -1437,12 +1319,6 @@ else
# system, and we'll never get to this point.
case $basic_machine in
- score-*)
- os=-elf
- ;;
- spu-*)
- os=-elf
- ;;
*-acorn)
os=-riscix1.2
;;
@@ -1452,9 +1328,9 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
@@ -1480,9 +1356,6 @@ case $basic_machine in
m68*-cisco)
os=-aout
;;
- mep-*)
- os=-elf
- ;;
mips*-cisco)
os=-elf
;;
@@ -1501,9 +1374,6 @@ case $basic_machine in
*-be)
os=-beos
;;
- *-haiku)
- os=-haiku
- ;;
*-ibm)
os=-aix
;;
@@ -1675,7 +1545,7 @@ case $basic_machine in
esac
echo $basic_machine$os
-exit
+exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/ice_find_athena.m4 b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/ice_find_athena.m4
new file mode 100644
index 00000000000..c63a9506b26
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/ice_find_athena.m4
@@ -0,0 +1,185 @@
+dnl
+dnl ice_find_athena.m4
+dnl
+dnl -----------------------------------------------------------
+dnl
+dnl * To: autoconf-collection@peti.gmd.de
+dnl * Subject: ice_find_athena.m4
+dnl * From: Andreas Zeller <zeller@ips.cs.tu-bs.de>
+dnl * Date: Sat, 29 Nov 1997 17:14:09 +0100 (MET)
+dnl * Sender: autoconf-collection-owner@peti.gmd.de
+dnl
+dnl -----------------------------------------------------------
+dnl
+dnl ICE_FIND_ATHENA
+dnl ---------------
+dnl
+dnl Find Athena libraries and headers.
+dnl Put Athena include directory in athena_includes,
+dnl put Athena library directory in athena_libraries,
+dnl and add appropriate flags to X_CFLAGS and X_LIBS.
+dnl
+dnl
+AC_DEFUN(ICE_FIND_ATHENA,
+[
+AC_REQUIRE([AC_PATH_XTRA])
+athena_includes=
+athena_libraries=
+AC_ARG_WITH(athena,
+[ --without-athena do not use Athena widgets])
+dnl Treat --without-athena like
+dnl --without-athena-includes --without-athena-libraries.
+if test "$with_athena" = "no"
+then
+athena_includes=no
+athena_libraries=no
+fi
+AC_ARG_WITH(athena-includes,
+[ --with-athena-includes=DIR Athena include files are in DIR],
+athena_includes="$withval")
+AC_ARG_WITH(athena-libraries,
+[ --with-athena-libraries=DIR Athena libraries are in DIR],
+athena_libraries="$withval")
+AC_MSG_CHECKING(for Athena)
+#
+#
+# Search the include files.
+#
+if test "$athena_includes" = ""; then
+AC_CACHE_VAL(ice_cv_athena_includes,
+[
+ice_athena_save_LIBS="$LIBS"
+ice_athena_save_CFLAGS="$CFLAGS"
+ice_athena_save_CPPFLAGS="$CPPFLAGS"
+ice_athena_save_LDFLAGS="$LDFLAGS"
+#
+LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS"
+CFLAGS="$X_CFLAGS $CFLAGS"
+CPPFLAGS="$X_CFLAGS $CPPFLAGS"
+LDFLAGS="$X_LIBS $LDFLAGS"
+#
+AC_TRY_COMPILE([
+#include <X11/Intrinsic.h>
+#include <X11/Xaw/Text.h>
+],[int a;],
+[
+# X11/Xaw/Text.h is in the standard search path.
+ice_cv_athena_includes=
+],
+[
+# X11/Xaw/Text.h is not in the standard search path.
+# Locate it and put its directory in `athena_includes'
+#
+# /usr/include/Motif* are used on HP-UX (Motif).
+# /usr/include/X11* are used on HP-UX (X and Athena).
+# /usr/dt is used on Solaris (Motif).
+# /usr/openwin is used on Solaris (X and Athena).
+# Other directories are just guesses.
+for dir in "$x_includes" "${prefix}/include" /usr/include /usr/local/include \
+ /usr/include/Motif2.0 /usr/include/Motif1.2 /usr/include/Motif1.1 \
+ /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 \
+ /usr/dt/include /usr/openwin/include \
+ /usr/dt/*/include /opt/*/include /usr/include/Motif* \
+ "${prefix}"/*/include /usr/*/include /usr/local/*/include \
+ "${prefix}"/include/* /usr/include/* /usr/local/include/*; do
+if test -f "$dir/X11/Xaw/Text.h"; then
+ice_cv_athena_includes="$dir"
+break
+fi
+done
+])
+#
+LIBS="$ice_athena_save_LIBS"
+CFLAGS="$ice_athena_save_CFLAGS"
+CPPFLAGS="$ice_athena_save_CPPFLAGS"
+LDFLAGS="$ice_athena_save_LDFLAGS"
+])
+athena_includes="$ice_cv_athena_includes"
+fi
+#
+#
+# Now for the libraries.
+#
+if test "$athena_libraries" = ""; then
+AC_CACHE_VAL(ice_cv_athena_libraries,
+[
+ice_athena_save_LIBS="$LIBS"
+ice_athena_save_CFLAGS="$CFLAGS"
+ice_athena_save_CPPFLAGS="$CPPFLAGS"
+ice_athena_save_LDFLAGS="$LDFLAGS"
+#
+LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS"
+CFLAGS="$X_CFLAGS $CFLAGS"
+CPPFLAGS="$X_CFLAGS $CPPFLAGS"
+LDFLAGS="$X_LIBS $LDFLAGS"
+#
+AC_TRY_LINK([
+#include <X11/Intrinsic.h>
+#include <X11/Xaw/Text.h>
+],[XtToolkitInitialize();],
+[
+# libXaw.a is in the standard search path.
+ice_cv_athena_libraries=
+],
+[
+# libXaw.a is not in the standard search path.
+# Locate it and put its directory in `athena_libraries'
+#
+#
+# /usr/lib/Motif* are used on HP-UX (Motif).
+# /usr/lib/X11* are used on HP-UX (X and Athena).
+# /usr/dt is used on Solaris (Motif).
+# /usr/openwin is used on Solaris (X and Athena).
+# Other directories are just guesses.
+for dir in "$x_libraries" "${prefix}/lib" /usr/lib /usr/local/lib \
+ /usr/lib/Motif2.0 /usr/lib/Motif1.2 /usr/lib/Motif1.1 \
+ /usr/lib/X11R6 /usr/lib/X11R5 /usr/lib/X11R4 /usr/lib/X11 \
+ /usr/dt/lib /usr/openwin/lib \
+ /usr/dt/*/lib /opt/*/lib /usr/lib/Motif* \
+ "${prefix}"/*/lib /usr/*/lib /usr/local/*/lib \
+ "${prefix}"/lib/* /usr/lib/* /usr/local/lib/*; do
+if test -d "$dir" && test "`ls $dir/libXaw.* 2> /dev/null`" != ""; then
+ice_cv_athena_libraries="$dir"
+break
+fi
+done
+])
+#
+LIBS="$ice_athena_save_LIBS"
+CFLAGS="$ice_athena_save_CFLAGS"
+CPPFLAGS="$ice_athena_save_CPPFLAGS"
+LDFLAGS="$ice_athena_save_LDFLAGS"
+])
+#
+athena_libraries="$ice_cv_athena_libraries"
+fi
+# Add Athena definitions to X flags
+#
+if test "$athena_includes" != "" && test "$athena_includes" != "$x_includes" && test "$athena_includes" != "no"
+then
+X_CFLAGS="-I$athena_includes $X_CFLAGS"
+fi
+if test "$athena_libraries" != "" && test "$athena_libraries" != "$x_libraries" && test "$athena_libraries" != "no"
+then
+case "$X_LIBS" in
+ *-R\ *) X_LIBS="-L$athena_libraries -R $athena_libraries $X_LIBS";;
+ *-R*) X_LIBS="-L$athena_libraries -R$athena_libraries $X_LIBS";;
+ *) X_LIBS="-L$athena_libraries $X_LIBS";;
+esac
+fi
+#
+#
+athena_libraries_result="$athena_libraries"
+athena_includes_result="$athena_includes"
+test "$athena_libraries_result" = "" &&
+ athena_libraries_result="in default path"
+test "$athena_includes_result" = "" &&
+ athena_includes_result="in default path"
+test "$athena_libraries_result" = "no" &&
+ athena_libraries_result="(none)"
+test "$athena_includes_result" = "no" &&
+ athena_includes_result="(none)"
+AC_MSG_RESULT(
+ [libraries $athena_libraries_result, headers $athena_includes_result])
+])dnl
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/install-sh b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/install-sh
new file mode 100755
index 00000000000..b777f1244cd
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/install-sh
@@ -0,0 +1,322 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2004-07-05.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c (ignored)
+-d create directories instead of installing files.
+-g GROUP $chgrpprog installed files to GROUP.
+-m MODE $chmodprog installed files to MODE.
+-o USER $chownprog installed files to USER.
+-s $stripprog installed files.
+-t DIRECTORY install into DIRECTORY.
+-T report an error if DSTFILE is a directory.
+--help display this help and exit.
+--version display version info and exit.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+ case $1 in
+ -c) shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit 0;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t) dstarg=$2
+ shift
+ shift
+ continue;;
+
+ -T) no_target_directory=true
+ shift
+ continue;;
+
+ --version) echo "$0 $scriptversion"; exit 0;;
+
+ *) # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ test -n "$dir_arg$dstarg" && break
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dstarg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dstarg"
+ shift # fnord
+ fi
+ shift # arg
+ dstarg=$arg
+ done
+ break;;
+ esac
+done
+
+if test -z "$1"; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src ;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ src=
+
+ if test -d "$dst"; then
+ mkdircmd=:
+ chmodcmd=
+ else
+ mkdircmd=$mkdirprog
+ fi
+ else
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dstarg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dstarg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst ;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+ dst=$dst/`basename "$src"`
+ fi
+ fi
+
+ # This sed command emulates the dirname command.
+ dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+ # Make sure that the destination directory exists.
+
+ # Skip lots of stat calls in the usual case.
+ if test ! -d "$dstdir"; then
+ defaultIFS='
+ '
+ IFS="${IFS-$defaultIFS}"
+
+ oIFS=$IFS
+ # Some sh's can't handle IFS=/ for some reason.
+ IFS='%'
+ set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+ IFS=$oIFS
+
+ pathcomp=
+
+ while test $# -ne 0 ; do
+ pathcomp=$pathcomp$1
+ shift
+ if test ! -d "$pathcomp"; then
+ $mkdirprog "$pathcomp"
+ # mkdir can fail with a `File exist' error in case several
+ # install-sh are creating the directory concurrently. This
+ # is OK.
+ test -d "$pathcomp" || exit
+ fi
+ pathcomp=$pathcomp/
+ done
+ fi
+
+ if test -n "$dir_arg"; then
+ $doit $mkdircmd "$dst" \
+ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+ else
+ dstfile=`basename "$dst"`
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Copy the file name to the temp name.
+ $doit $cpprog "$src" "$dsttmp" &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+ { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+ || {
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ if test -f "$dstdir/$dstfile"; then
+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+ || {
+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+ (exit 1); exit
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+ }
+ }
+ fi || { (exit 1); exit; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+ (exit 0); exit
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/Build/source/libs/graphite-engine/config/ltmain.sh b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/ltmain.sh
index 4598ec61ccf..761e1fd509a 100644
--- a/Build/source/libs/graphite-engine/config/ltmain.sh
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/ltmain.sh
@@ -1,8 +1,8 @@
# ltmain.sh - Provide generalized library-building support services.
# NOTE: Changing this file will not affect anything until you rerun configure.
#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+# Free Software Foundation, Inc.
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
#
# 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# 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
@@ -43,22 +43,14 @@ EXIT_FAILURE=1
PROGRAM=ltmain.sh
PACKAGE=libtool
-VERSION=1.5.24
-TIMESTAMP=" (1.1220.2.455 2007/06/24 02:13:29)"
-
-# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
+VERSION=1.5.10
+TIMESTAMP=" (1.1220.2.130 2004/09/19 12:13:49)"
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes.
+if test -n "${ZSH_VERSION+set}" ; then
setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
# Check that we have a working $echo.
if test "X$1" = X--no-reexec; then
@@ -96,15 +88,14 @@ rm="rm -f"
Xsed="${SED}"' -e 1s/^X//'
sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- SP2NL='tr \040 \012'
- NL2SP='tr \015\012 \040\040'
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+ SP2NL="tr '\100' '\n'"
+ NL2SP="tr '\r\n' '\100\100'"
;;
- *) # EBCDIC based system
- SP2NL='tr \100 \n'
- NL2SP='tr \r\n \100\100'
+ *) # Assume ASCII based system
+ SP2NL="tr '\040' '\012'"
+ NL2SP="tr '\015\012' '\040\040'"
;;
esac
@@ -113,19 +104,16 @@ esac
# These must not be set unconditionally because not all systems understand
# e.g. LANG=C (notably SCO).
# We save the old values to restore during execute mode.
-for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-do
- eval "if test \"\${$lt_var+set}\" = set; then
- save_$lt_var=\$$lt_var
- $lt_var=C
- export $lt_var
- fi"
-done
+if test "${LC_ALL+set}" = set; then
+ save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+ save_LANG="$LANG"; LANG=C; export LANG
+fi
# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS=" $lt_nl"
+: ${IFS="
+"}
if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
$echo "$modename: not configured to build any kind of library" 1>&2
@@ -142,62 +130,20 @@ run=
show="$echo"
show_help=
execute_dlfiles=
-duplicate_deps=no
-preserve_args=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
#####################################
# Shell function definitions:
# This seems to be the best place for them
-# func_mktempdir [string]
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible. If
-# given, STRING is the basename for that directory.
-func_mktempdir ()
-{
- my_template="${TMPDIR-/tmp}/${1-$progname}"
-
- if test "$run" = ":"; then
- # Return a directory name, but don't create it in dry-run mode
- my_tmpdir="${my_template}-$$"
- else
-
- # If mktemp works, use that first and foremost
- my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-
- if test ! -d "$my_tmpdir"; then
- # Failing that, at least try and use $RANDOM to avoid a race
- my_tmpdir="${my_template}-${RANDOM-0}$$"
-
- save_mktempdir_umask=`umask`
- umask 0077
- $mkdir "$my_tmpdir"
- umask $save_mktempdir_umask
- fi
-
- # If we're not in dry-run mode, bomb out on failure
- test -d "$my_tmpdir" || {
- $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
- exit $EXIT_FAILURE
- }
- fi
-
- $echo "X$my_tmpdir" | $Xsed
-}
-
-
# func_win32_libid arg
# return the library type of file 'arg'
#
# Need a lot of goo to handle *both* DLLs and import libs
# Has to be a shell function in order to 'eat' the argument
# that is supplied when $file_magic_command is called.
-func_win32_libid ()
-{
+func_win32_libid () {
win32_libid_type="unknown"
win32_fileres=`file -L $1 2>/dev/null`
case $win32_fileres in
@@ -208,17 +154,12 @@ func_win32_libid ()
if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
$EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
win32_nmres=`eval $NM -f posix -A $1 | \
- $SED -n -e '1,100{
- / I /{
- s,.*,import,
- p
- q
- }
- }'`
- case $win32_nmres in
- import*) win32_libid_type="x86 archive import";;
- *) win32_libid_type="x86 archive static";;
- esac
+ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+ if test "X$win32_nmres" = "Ximport" ; then
+ win32_libid_type="x86 archive import"
+ else
+ win32_libid_type="x86 archive static"
+ fi
fi
;;
*DLL*)
@@ -242,8 +183,7 @@ func_win32_libid ()
# Only attempt this if the compiler in the base compile
# command doesn't match the default compiler.
# arg is usually of the form 'gcc ...'
-func_infer_tag ()
-{
+func_infer_tag () {
if test -n "$available_tags" && test -z "$tagname"; then
CC_quoted=
for arg in $CC; do
@@ -302,25 +242,8 @@ func_infer_tag ()
}
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
- f_ex_an_ar_dir="$1"; shift
- f_ex_an_ar_oldlib="$1"
-
- $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
- $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
- if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
- exit $EXIT_FAILURE
- fi
-}
-
# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
+func_extract_archives () {
my_gentop="$1"; shift
my_oldlibs=${1+"$@"}
my_oldobjs=""
@@ -345,25 +268,15 @@ func_extract_archives ()
*) my_xabs=`pwd`"/$my_xlib" ;;
esac
my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
- my_xlib_u=$my_xlib
- while :; do
- case " $extracted_archives " in
- *" $my_xlib_u "*)
- extracted_serial=`expr $extracted_serial + 1`
- my_xlib_u=lt$extracted_serial-$my_xlib ;;
- *) break ;;
- esac
- done
- extracted_archives="$extracted_archives $my_xlib_u"
- my_xdir="$my_gentop/$my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib"
$show "${rm}r $my_xdir"
$run ${rm}r "$my_xdir"
$show "$mkdir $my_xdir"
$run $mkdir "$my_xdir"
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
- exit $exit_status
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$my_xdir"; then
+ exit $status
fi
case $host in
*-darwin*)
@@ -374,7 +287,7 @@ func_extract_archives ()
cd $my_xdir || exit $?
darwin_archive=$my_xabs
darwin_curdir=`pwd`
- darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
+ darwin_base_archive=`basename $darwin_archive`
darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
if test -n "$darwin_arches"; then
darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
@@ -383,33 +296,64 @@ func_extract_archives ()
for darwin_arch in $darwin_arches ; do
mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ # Remove the table of contents from the thin files.
+ $AR -d "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" __.SYMDEF 2>/dev/null || true
+ $AR -d "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" __.SYMDEF\ SORTED 2>/dev/null || true
cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ $AR -xo "${darwin_base_archive}"
+ rm "${darwin_base_archive}"
cd "$darwin_curdir"
- $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
done # $darwin_arches
## Okay now we have a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
+ darwin_filelist=`find unfat-$$ -type f | xargs basename | sort -u | $NL2SP`
darwin_file=
darwin_files=
for darwin_file in $darwin_filelist; do
darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
lipo -create -output "$darwin_file" $darwin_files
done # $darwin_filelist
- ${rm}r unfat-$$
+ rm -rf unfat-$$
cd "$darwin_orig_dir"
else
- cd "$darwin_orig_dir"
- func_extract_an_archive "$my_xdir" "$my_xabs"
+ cd $darwin_orig_dir
+ (cd $my_xdir && $AR x $my_xabs) || exit $?
fi # $darwin_arches
fi # $run
- ;;
+ ;;
*)
- func_extract_an_archive "$my_xdir" "$my_xabs"
- ;;
+ # We will extract separately just the conflicting names and we will
+ # no longer touch any unique names. It is faster to leave these
+ # extract automatically by $AR in one run.
+ $show "(cd $my_xdir && $AR x $my_xabs)"
+ $run eval "(cd \$my_xdir && $AR x \$my_xabs)" || exit $?
+ if ($AR t "$my_xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$my_xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$my_xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $my_xdir && $AR xN $i $my_xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$my_xdir && $AR xN $i \$my_xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+ ;;
esac
my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
done
+
func_extract_archives_result="$my_oldobjs"
}
# End of Shell function definitions
@@ -418,8 +362,6 @@ func_extract_archives ()
# Darwin sucks
eval std_shrext=\"$shrext_cmds\"
-disable_libs=no
-
# Parse our command line options once, thoroughly.
while test "$#" -gt 0
do
@@ -482,13 +424,12 @@ do
;;
--version)
- echo "\
-$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP
-
-Copyright (C) 2007 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- exit $?
+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ $echo
+ $echo "Copyright (C) 2003 Free Software Foundation, Inc."
+ $echo "This is free software; see the source for copying conditions. There is NO"
+ $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ exit $EXIT_SUCCESS
;;
--config)
@@ -497,7 +438,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
for tagname in $taglist; do
${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
done
- exit $?
+ exit $EXIT_SUCCESS
;;
--debug)
@@ -522,7 +463,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
else
$echo "disable static libraries"
fi
- exit $?
+ exit $EXIT_SUCCESS
;;
--finish) mode="finish" ;;
@@ -537,11 +478,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
preserve_args="$preserve_args $arg"
;;
- --tag)
- prevopt="--tag"
- prev=tag
- preserve_args="$preserve_args --tag"
- ;;
+ --tag) prevopt="--tag" prev=tag ;;
--tag=*)
set tag "$optarg" ${1+"$@"}
shift
@@ -573,18 +510,6 @@ if test -n "$prevopt"; then
exit $EXIT_FAILURE
fi
-case $disable_libs in
-no)
- ;;
-shared)
- build_libtool_libs=no
- build_old_libs=yes
- ;;
-static)
- build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
- ;;
-esac
-
# If this variable is set in any of the actions, the command in it
# will be execed at the end. This prevents here-documents from being
# left over by shells.
@@ -595,7 +520,7 @@ if test -z "$show_help"; then
# Infer the operation mode.
if test -z "$mode"; then
$echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
- $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
+ $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
case $nonopt in
*cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
mode=link
@@ -661,7 +586,7 @@ if test -z "$show_help"; then
for arg
do
- case $arg_mode in
+ case "$arg_mode" in
arg )
# do not "continue". Instead, add this to base_compile
lastarg="$arg"
@@ -743,10 +668,7 @@ if test -z "$show_help"; then
case $lastarg in
# Double-quote args containing other shell metacharacters.
# Many Bourne shells cannot handle close brackets correctly
- # in scan sets, and some SunOS ksh mistreat backslash-escaping
- # in scan sets (worked around with variable expansion),
- # and furthermore cannot handle '|' '&' '(' ')' in scan sets
- # at all, so we specify them separately.
+ # in scan sets, so we specify it separately.
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
lastarg="\"$lastarg\""
;;
@@ -784,10 +706,9 @@ if test -z "$show_help"; then
*.class) xform=class ;;
*.cpp) xform=cpp ;;
*.cxx) xform=cxx ;;
- *.[fF][09]?) xform=[fF][09]. ;;
+ *.f90) xform=f90 ;;
*.for) xform=for ;;
*.java) xform=java ;;
- *.obj) xform=obj ;;
esac
libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
@@ -821,14 +742,6 @@ if test -z "$show_help"; then
esac
done
- qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
- case $qlibobj in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qlibobj="\"$qlibobj\"" ;;
- esac
- test "X$libobj" != "X$qlibobj" \
- && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \
- && $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
if test "X$xdir" = "X$obj"; then
@@ -901,17 +814,12 @@ compiler."
$run $rm $removelist
exit $EXIT_FAILURE
fi
- $echo "$srcfile" > "$lockfile"
+ $echo $srcfile > "$lockfile"
fi
if test -n "$fix_srcfile_path"; then
eval srcfile=\"$fix_srcfile_path\"
fi
- qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
- case $qsrcfile in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qsrcfile="\"$qsrcfile\"" ;;
- esac
$run $rm "$libobj" "${libobj}T"
@@ -933,18 +841,18 @@ EOF
fbsd_hideous_sh_bug=$base_compile
if test "$pic_mode" != no; then
- command="$base_compile $qsrcfile $pic_flag"
+ command="$base_compile $srcfile $pic_flag"
else
# Don't build PIC code
- command="$base_compile $qsrcfile"
+ command="$base_compile $srcfile"
fi
if test ! -d "${xdir}$objdir"; then
$show "$mkdir ${xdir}$objdir"
$run $mkdir ${xdir}$objdir
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
- exit $exit_status
+ status=$?
+ if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+ exit $status
fi
fi
@@ -1016,9 +924,9 @@ EOF
if test "$build_old_libs" = yes; then
if test "$pic_mode" != yes; then
# Don't build PIC code
- command="$base_compile $qsrcfile"
+ command="$base_compile $srcfile"
else
- command="$base_compile $qsrcfile $pic_flag"
+ command="$base_compile $srcfile $pic_flag"
fi
if test "$compiler_c_o" = yes; then
command="$command -o $obj"
@@ -1147,7 +1055,6 @@ EOF
no_install=no
objs=
non_pic_objects=
- notinst_path= # paths that contain not-installed libtool libraries
precious_files_regex=
prefer_static_libs=no
preload=no
@@ -1168,32 +1075,22 @@ EOF
for arg
do
case $arg in
- -all-static | -static | -static-libtool-libs)
- case $arg in
- -all-static)
+ -all-static | -static)
+ if test "X$arg" = "X-all-static"; then
if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
$echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
fi
if test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
- prefer_static_libs=yes
- ;;
- -static)
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=built
- ;;
- -static-libtool-libs)
+ else
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
- prefer_static_libs=yes
- ;;
- esac
+ fi
build_libtool_libs=no
build_old_libs=yes
+ prefer_static_libs=yes
break
;;
esac
@@ -1368,11 +1265,6 @@ EOF
if test -z "$pic_object" || test "$pic_object" = none ; then
arg="$non_pic_object"
fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object="$pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
@@ -1456,13 +1348,6 @@ EOF
prev=
continue
;;
- darwin_framework|darwin_framework_skip)
- test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- prev=
- continue
- ;;
*)
eval "$prev=\"\$arg\""
prev=
@@ -1521,18 +1406,6 @@ EOF
continue
;;
- -framework|-arch|-isysroot)
- case " $CC " in
- *" ${arg} ${1} "* | *" ${arg} ${1} "*)
- prev=darwin_framework_skip ;;
- *) compiler_flags="$compiler_flags $arg"
- prev=darwin_framework ;;
- esac
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- continue
- ;;
-
-inst-prefix-dir)
prev=inst_prefix
continue
@@ -1559,8 +1432,7 @@ EOF
absdir=`cd "$dir" && pwd`
if test -z "$absdir"; then
$echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- absdir="$dir"
- notinst_path="$notinst_path $dir"
+ exit $EXIT_FAILURE
fi
dir="$absdir"
;;
@@ -1574,15 +1446,10 @@ EOF
esac
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$dir:"*) ;;
*) dllsearchpath="$dllsearchpath:$dir";;
esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
- esac
;;
esac
continue
@@ -1591,15 +1458,15 @@ EOF
-l*)
if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
+ *-*-cygwin* | *-*-pw32* | *-*-beos*)
# These systems don't actually have a C or math library (as such)
continue
;;
- *-*-os2*)
+ *-*-mingw* | *-*-os2*)
# These systems don't actually have a C library (as such)
test "X$arg" = "X-lc" && continue
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ *-*-openbsd* | *-*-freebsd*)
# Do not include libc due to us having libc/libc_r.
test "X$arg" = "X-lc" && continue
;;
@@ -1607,19 +1474,10 @@ EOF
# Rhapsody C and math libraries are in the System framework
deplibs="$deplibs -framework System"
continue
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
- test "X$arg" = "X-lc" && continue
- ;;
esac
elif test "X$arg" = "X-lc_r"; then
case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ *-*-openbsd* | *-*-freebsd*)
# Do not include libc_r directly, use -pthread flag.
continue
;;
@@ -1629,20 +1487,8 @@ EOF
continue
;;
- # Tru64 UNIX uses -model [arg] to determine the layout of C++
- # classes, name mangling, and exception handling.
- -model)
- compile_command="$compile_command $arg"
- compiler_flags="$compiler_flags $arg"
- finalize_command="$finalize_command $arg"
- prev=xcompiler
- continue
- ;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
- compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+ deplibs="$deplibs $arg"
continue
;;
@@ -1651,20 +1497,13 @@ EOF
continue
;;
- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
- # -r[0-9][0-9]* specifies the processor on the SGI compiler
- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
- # +DA*, +DD* enable 64-bit mode on the HP compiler
- # -q* pass through compiler args for the IBM compiler
- # -m* pass through architecture-specific compiler args for GCC
- # -m*, -t[45]*, -txscale* pass through architecture-specific
- # compiler args for GCC
- # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
- # -F/path gives path to uninstalled frameworks, gcc on darwin
- # @file GCC response files
- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
-
+ # gcc -m* arguments should be passed to the linker via $compiler_flags
+ # in order to pass architecture information to the linker
+ # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo
+ # but this is not reliable with gcc because gcc may use -mfoo to
+ # select a different linker, different libraries, etc, while
+ # -Wl,-mfoo simply passes -mfoo to the linker.
+ -m*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
@@ -1675,7 +1514,9 @@ EOF
esac
compile_command="$compile_command $arg"
finalize_command="$finalize_command $arg"
- compiler_flags="$compiler_flags $arg"
+ if test "$with_gcc" = "yes" ; then
+ compiler_flags="$compiler_flags $arg"
+ fi
continue
;;
@@ -1691,9 +1532,9 @@ EOF
-no-install)
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
# The PATH hackery in wrapper scripts is required on Windows
- # and Darwin in order for the loader to find any dlls it needs.
+ # in order for the loader to find any dlls it needs.
$echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
$echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
fast_install=no
@@ -1752,7 +1593,7 @@ EOF
continue
;;
- -static | -static-libtool-libs)
+ -static)
# The effects of -static are defined in a previous loop.
# We used to do the same as -all-static on platforms that
# didn't have a PIC flag, but the assumption that the effects
@@ -1913,11 +1754,6 @@ EOF
if test -z "$pic_object" || test "$pic_object" = none ; then
arg="$non_pic_object"
fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object="$pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
@@ -2023,9 +1859,9 @@ EOF
if test ! -d "$output_objdir"; then
$show "$mkdir $output_objdir"
$run $mkdir $output_objdir
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
- exit $exit_status
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+ exit $status
fi
fi
@@ -2088,6 +1924,7 @@ EOF
newlib_search_path=
need_relink=no # whether we're linking any uninstalled libtool libraries
notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
case $linkmode in
lib)
passes="conv link"
@@ -2134,12 +1971,12 @@ EOF
lib=
found=no
case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
if test "$linkmode,$pass" = "prog,link"; then
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
- compiler_flags="$compiler_flags $deplib"
+ deplibs="$deplib $deplibs"
fi
continue
;;
@@ -2148,6 +1985,10 @@ EOF
$echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
continue
fi
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
for search_ext in .la $std_shrext .so .a; do
@@ -2323,7 +2164,7 @@ EOF
esac # case $deplib
if test "$found" = yes || test -f "$lib"; then :
else
- $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
+ $echo "$modename: cannot find the library \`$lib'" 1>&2
exit $EXIT_FAILURE
fi
@@ -2347,8 +2188,6 @@ EOF
# it will not redefine variables installed, or shouldnotlink
installed=yes
shouldnotlink=no
- avoidtemprpath=
-
# Read the .la file
case $lib in
@@ -2447,7 +2286,6 @@ EOF
dir="$libdir"
absdir="$libdir"
fi
- test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
else
if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
dir="$ladir"
@@ -2530,16 +2368,14 @@ EOF
if test "$linkmode,$pass" = "prog,link"; then
if test -n "$library_names" &&
- { { test "$prefer_static_libs" = no ||
- test "$prefer_static_libs,$installed" = "built,yes"; } ||
- test -z "$old_library"; }; then
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
# We need to hardcode the library path
- if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ if test -n "$shlibpath_var"; then
# Make sure the rpath contains only unique directories.
case "$temp_rpath " in
*" $dir "*) ;;
*" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $absdir" ;;
+ *) temp_rpath="$temp_rpath $dir" ;;
esac
fi
@@ -2576,12 +2412,8 @@ EOF
fi
link_static=no # Whether the deplib will be linked statically
- use_static_libs=$prefer_static_libs
- if test "$use_static_libs" = built && test "$installed" = yes ; then
- use_static_libs=no
- fi
if test -n "$library_names" &&
- { test "$use_static_libs" = no || test -z "$old_library"; }; then
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
if test "$installed" = no; then
notinst_deplibs="$notinst_deplibs $lib"
need_relink=yes
@@ -2694,15 +2526,11 @@ EOF
if test "$hardcode_direct" = no; then
add="$dir/$linklib"
case $host in
- *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
- *-*-sysv4*uw2*) add_dir="-L$dir" ;;
- *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
- *-*-unixware7*) add_dir="-L$dir" ;;
+ *-*-sco3.2v5* ) add_dir="-L$dir" ;;
*-*-darwin* )
# if the lib is a module then we can not link against
# it, someone is ignoring the new warnings I added
- if /usr/bin/file -L $add 2> /dev/null |
- $EGREP ": [^:]* bundle" >/dev/null ; then
+ if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
$echo "** Warning, lib $linklib is a module, not a shared library"
if test -z "$old_library" ; then
$echo
@@ -2733,7 +2561,7 @@ EOF
add_dir="-L$dir"
# Try looking first in the location we're being installed to.
if test -n "$inst_prefix_dir"; then
- case $libdir in
+ case "$libdir" in
[\\/]*)
add_dir="$add_dir -L$inst_prefix_dir$libdir"
;;
@@ -2806,7 +2634,7 @@ EOF
add_dir="-L$libdir"
# Try looking first in the location we're being installed to.
if test -n "$inst_prefix_dir"; then
- case $libdir in
+ case "$libdir" in
[\\/]*)
add_dir="$add_dir -L$inst_prefix_dir$libdir"
;;
@@ -2867,6 +2695,8 @@ EOF
fi
fi
else
+ convenience="$convenience $dir/$old_library"
+ old_convenience="$old_convenience $dir/$old_library"
deplibs="$dir/$old_library $deplibs"
link_static=yes
fi
@@ -2984,13 +2814,13 @@ EOF
*) continue ;;
esac
case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$path $deplibs" ;;
- esac
- case " $deplibs " in
*" $depdepl "*) ;;
*) deplibs="$depdepl $deplibs" ;;
esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$deplibs $path" ;;
+ esac
done
fi # link_all_deplibs != no
fi # linkmode = lib
@@ -3228,7 +3058,7 @@ EOF
# which has an extra 1 added just for fun
#
case $version_type in
- darwin|linux|osf|windows|none)
+ darwin|linux|osf|windows)
current=`expr $number_major + $number_minor`
age="$number_minor"
revision="$number_revision"
@@ -3239,10 +3069,9 @@ EOF
age="0"
;;
irix|nonstopux)
- current=`expr $number_major + $number_minor`
+ current=`expr $number_major + $number_minor - 1`
age="$number_minor"
revision="$number_minor"
- lt_irix_increment=no
;;
esac
;;
@@ -3255,27 +3084,27 @@ EOF
# Check that each of the things are valid numbers.
case $current in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
- $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
+ $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
exit $EXIT_FAILURE
;;
esac
case $revision in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
- $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
+ $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
exit $EXIT_FAILURE
;;
esac
case $age in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
- $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
+ $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
exit $EXIT_FAILURE
;;
@@ -3301,8 +3130,7 @@ EOF
versuffix="$major.$age.$revision"
# Darwin ld doesn't like 0 for these options...
minor_current=`expr $current + 1`
- xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
- verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
;;
freebsd-aout)
@@ -3316,11 +3144,8 @@ EOF
;;
irix | nonstopux)
- if test "X$lt_irix_increment" = "Xno"; then
- major=`expr $current - $age`
- else
- major=`expr $current - $age + 1`
- fi
+ major=`expr $current - $age + 1`
+
case $version_type in
nonstopux) verstring_prefix=nonstopux ;;
*) verstring_prefix=sgi ;;
@@ -3457,11 +3282,11 @@ EOF
fi
# Eliminate all temporary directories.
- #for path in $notinst_path; do
- # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
- # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
- # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
- #done
+ for path in $notinst_path; do
+ lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+ deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+ dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+ done
if test -n "$xrpath"; then
# If the user specified any rpath flags, then add them.
@@ -3511,14 +3336,9 @@ EOF
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ *-*-openbsd* | *-*-freebsd*)
# Do not include libc due to us having libc/libc_r.
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
;;
*)
# Add libc to deplibs on all other systems if necessary.
@@ -3562,12 +3382,13 @@ EOF
int main() { return 0; }
EOF
$rm conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ $LTCC -o conftest conftest.c $deplibs
+ if test "$?" -eq 0 ; then
ldd_output=`ldd conftest`
for i in $deplibs; do
- name=`expr $i : '-l\(.*\)'`
+ name="`expr $i : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
+ if test "$name" != "" && test "$name" -ne "0"; then
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $i "*)
@@ -3602,11 +3423,13 @@ EOF
# Error occurred in the first compile. Let's try to salvage
# the situation: Compile a separate program for each library.
for i in $deplibs; do
- name=`expr $i : '-l\(.*\)'`
+ name="`expr $i : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
if test "$name" != "" && test "$name" != "0"; then
$rm conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ $LTCC -o conftest conftest.c $i
+ # Did it work?
+ if test "$?" -eq 0 ; then
ldd_output=`ldd conftest`
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
@@ -3638,7 +3461,7 @@ EOF
droppeddeps=yes
$echo
$echo "*** Warning! Library $i is needed by this library but I was not able to"
- $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** make it link in! You will probably need to install it or some"
$echo "*** library that it depends on before this library will be fully"
$echo "*** functional. Installing it before continuing would be even better."
fi
@@ -3652,7 +3475,7 @@ EOF
set dummy $deplibs_check_method
file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
for a_deplib in $deplibs; do
- name=`expr $a_deplib : '-l\(.*\)'`
+ name="`expr $a_deplib : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
if test "$name" != "" && test "$name" != "0"; then
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
@@ -3721,7 +3544,7 @@ EOF
set dummy $deplibs_check_method
match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
for a_deplib in $deplibs; do
- name=`expr $a_deplib : '-l\(.*\)'`
+ name="`expr $a_deplib : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
if test -n "$name" && test "$name" != "0"; then
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
@@ -3851,35 +3674,6 @@ EOF
deplibs=$newdeplibs
fi
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $deplibs " in
- *" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- done
- deplibs="$new_libs"
-
-
# All the library-specific variables (install_libdir is set above).
library_names=
old_library=
@@ -3924,10 +3718,7 @@ EOF
test -n "$hardcode_libdirs"; then
libdir="$hardcode_libdirs"
if test -n "$hardcode_libdir_flag_spec_ld"; then
- case $archive_cmds in
- *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;;
- *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;;
- esac
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
else
eval dep_rpath=\"$hardcode_libdir_flag_spec\"
fi
@@ -3966,7 +3757,6 @@ EOF
fi
lib="$output_objdir/$realname"
- linknames=
for link
do
linknames="$linknames $link"
@@ -3995,9 +3785,6 @@ EOF
# The command line is too long to execute in one step.
$show "using reloadable object file for export list..."
skipped_export=:
- # Break out early, otherwise skipped_export may be
- # set to false by a later but shorter cmd.
- break
fi
done
IFS="$save_ifs"
@@ -4067,8 +3854,7 @@ EOF
fi
fi
- if test "X$skipped_export" != "X:" &&
- len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+ if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
:
else
@@ -4087,7 +3873,6 @@ EOF
save_libobjs=$libobjs
fi
save_output=$output
- output_la=`$echo "X$output" | $Xsed -e "$basename"`
# Clear the reloadable object creation command queue and
# initialize k to one.
@@ -4097,13 +3882,13 @@ EOF
delfiles=
last_robj=
k=1
- output=$output_objdir/$output_la-${k}.$objext
+ output=$output_objdir/$save_output-${k}.$objext
# Loop over the list of objects to be linked.
for obj in $save_libobjs
do
eval test_cmds=\"$reload_cmds $objlist $last_robj\"
if test "X$objlist" = X ||
- { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+ { len=`expr "X$test_cmds" : ".*"` &&
test "$len" -le "$max_cmd_len"; }; then
objlist="$objlist $obj"
else
@@ -4117,9 +3902,9 @@ EOF
# the last one created.
eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
fi
- last_robj=$output_objdir/$output_la-${k}.$objext
+ last_robj=$output_objdir/$save_output-${k}.$objext
k=`expr $k + 1`
- output=$output_objdir/$output_la-${k}.$objext
+ output=$output_objdir/$save_output-${k}.$objext
objlist=$obj
len=1
fi
@@ -4139,13 +3924,13 @@ EOF
eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
fi
- # Set up a command to remove the reloadable object files
+ # Set up a command to remove the reloadale object files
# after they are used.
i=0
while test "$i" -lt "$k"
do
i=`expr $i + 1`
- delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
+ delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
done
$echo "creating a temporary reloadable object file: $output"
@@ -4193,30 +3978,13 @@ EOF
IFS="$save_ifs"
eval cmd=\"$cmd\"
$show "$cmd"
- $run eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
- fi
-
- exit $lt_exit
- }
+ $run eval "$cmd" || exit $?
done
IFS="$save_ifs"
# Restore the uninstalled library and exit
if test "$mode" = relink; then
$run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
-
- if test -n "$convenience"; then
- if test -z "$whole_archive_flag_spec"; then
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- fi
- fi
-
exit $EXIT_SUCCESS
fi
@@ -4286,14 +4054,12 @@ EOF
reload_conv_objs=
gentop=
# reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec and hope we can get by with
- # turning comma into space..
+ # -Wl from whole_archive_flag_spec
wl=
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
- eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
- reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
else
gentop="$output_objdir/${obj}x"
generated="$generated $gentop"
@@ -4400,35 +4166,6 @@ EOF
;;
esac
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $compile_deplibs " in
- *" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $compile_deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- ;;
- *) new_libs="$new_libs $deplib" ;;
- esac
- done
- compile_deplibs="$new_libs"
-
-
compile_command="$compile_command $compile_deplibs"
finalize_command="$finalize_command $finalize_deplibs"
@@ -4473,15 +4210,10 @@ EOF
fi
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$libdir:"*) ;;
*) dllsearchpath="$dllsearchpath:$libdir";;
esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
- esac
;;
esac
done
@@ -4595,25 +4327,13 @@ extern \"C\" {
# Prepare the list of exported symbols
if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$outputname.exp"
+ export_symbols="$output_objdir/$output.exp"
$run $rm $export_symbols
- $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- case $host in
- *cygwin* | *mingw* )
- $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
- ;;
- esac
+ $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
else
- $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
- $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+ $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
$run eval 'mv "$nlist"T "$nlist"'
- case $host in
- *cygwin* | *mingw* )
- $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
- ;;
- esac
fi
fi
@@ -4664,26 +4384,7 @@ extern \"C\" {
#endif
/* The mapping between symbol names and symbols. */
-"
-
- case $host in
- *cygwin* | *mingw* )
- $echo >> "$output_objdir/$dlsyms" "\
-/* DATA imports from DLLs on WIN32 can't be const, because
- runtime relocations are performed -- see ld's documentation
- on pseudo-relocs */
-struct {
-"
- ;;
- * )
- $echo >> "$output_objdir/$dlsyms" "\
const struct {
-"
- ;;
- esac
-
-
- $echo >> "$output_objdir/$dlsyms" "\
const char *name;
lt_ptr address;
}
@@ -4730,29 +4431,16 @@ static const void *lt_preloaded_setup() {
esac
# Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+ $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
# Clean up the generated files.
$show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
$run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
# Transform the symbol file into the correct name.
- case $host in
- *cygwin* | *mingw* )
- if test -f "$output_objdir/${outputname}.def" ; then
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
- else
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- fi
- ;;
- * )
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- ;;
- esac
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
;;
*)
$echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
@@ -4765,19 +4453,19 @@ static const void *lt_preloaded_setup() {
# really was required.
# Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
fi
if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
# Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
+ compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
link_command="$compile_command$compile_rpath"
# We have no uninstalled library dependencies, so finalize right now.
$show "$link_command"
$run eval "$link_command"
- exit_status=$?
+ status=$?
# Delete the generated files.
if test -n "$dlsyms"; then
@@ -4785,7 +4473,7 @@ static const void *lt_preloaded_setup() {
$run $rm "$output_objdir/${outputname}S.${objext}"
fi
- exit $exit_status
+ exit $status
fi
if test -n "$shlibpath_var"; then
@@ -4858,7 +4546,7 @@ static const void *lt_preloaded_setup() {
if test "$fast_install" != no; then
link_command="$finalize_var$compile_command$finalize_rpath"
if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
else
# fast_install is set to needless
relink_command=
@@ -4895,7 +4583,7 @@ static const void *lt_preloaded_setup() {
fi
done
relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
fi
# Quote $echo for shipping.
@@ -4925,12 +4613,10 @@ static const void *lt_preloaded_setup() {
esac
case $host in
*cygwin* | *mingw* )
- output_name=`basename $output`
- output_path=`dirname $output`
- cwrappersource="$output_path/$objdir/lt-$output_name.c"
- cwrapper="$output_path/$output_name.exe"
- $rm $cwrappersource $cwrapper
- trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+ cwrappersource=`$echo ${objdir}/lt-${output}.c`
+ cwrapper=`$echo ${output}.exe`
+ $rm $cwrappersource $cwrapper
+ trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
cat > $cwrappersource <<EOF
@@ -4955,9 +4641,6 @@ EOF
#include <malloc.h>
#include <stdarg.h>
#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/stat.h>
#if defined(PATH_MAX)
# define LT_PATHMAX PATH_MAX
@@ -4968,19 +4651,15 @@ EOF
#endif
#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-# define PATH_SEPARATOR ':'
+#define DIR_SEPARATOR '/'
#endif
#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
defined (__OS2__)
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# ifndef DIR_SEPARATOR_2
-# define DIR_SEPARATOR_2 '\\'
-# endif
-# ifndef PATH_SEPARATOR_2
-# define PATH_SEPARATOR_2 ';'
-# endif
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
#endif
#ifndef DIR_SEPARATOR_2
@@ -4990,32 +4669,17 @@ EOF
(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
#endif /* DIR_SEPARATOR_2 */
-#ifndef PATH_SEPARATOR_2
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-#else /* PATH_SEPARATOR_2 */
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-#endif /* PATH_SEPARATOR_2 */
-
#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
#define XFREE(stale) do { \
if (stale) { free ((void *) stale); stale = 0; } \
} while (0)
-/* -DDEBUG is fairly common in CFLAGS. */
-#undef DEBUG
-#if defined DEBUGWRAPPER
-# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
-#else
-# define DEBUG(format, ...)
-#endif
-
const char *program_name = NULL;
void * xmalloc (size_t num);
char * xstrdup (const char *string);
-const char * base_name (const char *name);
-char * find_executable(const char *wrapper);
-int check_executable(const char *path);
+char * basename (const char *name);
+char * fnqualify(const char *path);
char * strendzap(char *str, const char *pat);
void lt_fatal (const char *message, ...);
@@ -5025,51 +4689,29 @@ main (int argc, char *argv[])
char **newargz;
int i;
- program_name = (char *) xstrdup (base_name (argv[0]));
- DEBUG("(main) argv[0] : %s\n",argv[0]);
- DEBUG("(main) program_name : %s\n",program_name);
+ program_name = (char *) xstrdup ((char *) basename (argv[0]));
newargz = XMALLOC(char *, argc+2);
EOF
- cat >> $cwrappersource <<EOF
- newargz[0] = (char *) xstrdup("$SHELL");
+ cat >> $cwrappersource <<EOF
+ newargz[0] = "$SHELL";
EOF
- cat >> $cwrappersource <<"EOF"
- newargz[1] = find_executable(argv[0]);
- if (newargz[1] == NULL)
- lt_fatal("Couldn't find %s", argv[0]);
- DEBUG("(main) found exe at : %s\n",newargz[1]);
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = fnqualify(argv[0]);
/* we know the script has the same name, without the .exe */
/* so make sure newargz[1] doesn't end in .exe */
strendzap(newargz[1],".exe");
for (i = 1; i < argc; i++)
newargz[i+1] = xstrdup(argv[i]);
newargz[argc+1] = NULL;
-
- for (i=0; i<argc+1; i++)
- {
- DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]);
- ;
- }
-
EOF
- case $host_os in
- mingw*)
- cat >> $cwrappersource <<EOF
- execv("$SHELL",(char const **)newargz);
-EOF
- ;;
- *)
- cat >> $cwrappersource <<EOF
+ cat >> $cwrappersource <<EOF
execv("$SHELL",newargz);
EOF
- ;;
- esac
- cat >> $cwrappersource <<"EOF"
- return 127;
+ cat >> $cwrappersource <<"EOF"
}
void *
@@ -5089,148 +4731,48 @@ xstrdup (const char *string)
;
}
-const char *
-base_name (const char *name)
+char *
+basename (const char *name)
{
const char *base;
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
/* Skip over the disk name in MSDOS pathnames. */
- if (isalpha ((unsigned char)name[0]) && name[1] == ':')
+ if (isalpha (name[0]) && name[1] == ':')
name += 2;
#endif
for (base = name; *name; name++)
if (IS_DIR_SEPARATOR (*name))
base = name + 1;
- return base;
-}
-
-int
-check_executable(const char * path)
-{
- struct stat st;
-
- DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
- if ((!path) || (!*path))
- return 0;
-
- if ((stat (path, &st) >= 0) &&
- (
- /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
-#if defined (S_IXOTH)
- ((st.st_mode & S_IXOTH) == S_IXOTH) ||
-#endif
-#if defined (S_IXGRP)
- ((st.st_mode & S_IXGRP) == S_IXGRP) ||
-#endif
- ((st.st_mode & S_IXUSR) == S_IXUSR))
- )
- return 1;
- else
- return 0;
+ return (char *) base;
}
-/* Searches for the full path of the wrapper. Returns
- newly allocated full path name if found, NULL otherwise */
char *
-find_executable (const char* wrapper)
+fnqualify(const char *path)
{
- int has_slash = 0;
- const char* p;
- const char* p_next;
- /* static buffer for getcwd */
+ size_t size;
+ char *p;
char tmp[LT_PATHMAX + 1];
- int tmp_len;
- char* concat_name;
- DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
+ assert(path != NULL);
- if ((wrapper == NULL) || (*wrapper == '\0'))
- return NULL;
-
- /* Absolute path? */
+ /* Is it qualified already? */
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
- {
- concat_name = xstrdup (wrapper);
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
- else
- {
-#endif
- if (IS_DIR_SEPARATOR (wrapper[0]))
- {
- concat_name = xstrdup (wrapper);
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- }
+ if (isalpha (path[0]) && path[1] == ':')
+ return xstrdup (path);
#endif
+ if (IS_DIR_SEPARATOR (path[0]))
+ return xstrdup (path);
- for (p = wrapper; *p; p++)
- if (*p == '/')
- {
- has_slash = 1;
- break;
- }
- if (!has_slash)
- {
- /* no slashes; search PATH */
- const char* path = getenv ("PATH");
- if (path != NULL)
- {
- for (p = path; *p; p = p_next)
- {
- const char* q;
- size_t p_len;
- for (q = p; *q; q++)
- if (IS_PATH_SEPARATOR(*q))
- break;
- p_len = q - p;
- p_next = (*q == '\0' ? q : q + 1);
- if (p_len == 0)
- {
- /* empty path: current directory */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- tmp_len = strlen(tmp);
- concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
- }
- else
- {
- concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, p, p_len);
- concat_name[p_len] = '/';
- strcpy (concat_name + p_len + 1, wrapper);
- }
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
- }
- /* not found in PATH; assume curdir */
- }
- /* Relative path | not found in path: prepend cwd */
+ /* prepend the current directory */
+ /* doesn't handle '~' */
if (getcwd (tmp, LT_PATHMAX) == NULL)
lt_fatal ("getcwd failed");
- tmp_len = strlen(tmp);
- concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
-
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- return NULL;
+ size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+ p = XMALLOC(char, size);
+ sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+ return p;
}
char *
@@ -5274,16 +4816,16 @@ lt_fatal (const char *message, ...)
va_end (ap);
}
EOF
- # we should really use a build-platform specific compiler
- # here, but OTOH, the wrappers (shell script and this C one)
- # are only useful if you want to execute the "real" binary.
- # Since the "real" binary is built for $host, then this
- # wrapper might as well be built for $host, too.
- $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
- ;;
- esac
- $rm $output
- trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $run $LTCC -s -o $cwrapper $cwrappersource
+ ;;
+ esac
+ $rm $output
+ trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
$echo > $output "\
#! $SHELL
@@ -5302,20 +4844,6 @@ EOF
Xsed='${SED} -e 1s/^X//'
sed_quote_subst='$sed_quote_subst'
-# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
-if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
@@ -5447,23 +4975,23 @@ else
# Backslashes separate directories on plain windows
*-*-mingw | *-*-os2*)
$echo >> $output "\
- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+ exec \$progdir\\\\\$program \${1+\"\$@\"}
"
;;
*)
$echo >> $output "\
- exec \"\$progdir/\$program\" \${1+\"\$@\"}
+ exec \$progdir/\$program \${1+\"\$@\"}
"
;;
esac
$echo >> $output "\
- \$echo \"\$0: cannot exec \$program \$*\"
+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
exit $EXIT_FAILURE
fi
else
# The program doesn't exist.
- \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+ \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
\$echo \"This script is just a wrapper for \$program.\" 1>&2
$echo \"See the $PACKAGE documentation for more information.\" 1>&2
exit $EXIT_FAILURE
@@ -5505,63 +5033,6 @@ fi\
if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
cmds=$old_archive_from_new_cmds
else
- # POSIX demands no paths to be encoded in archives. We have
- # to avoid creating archives with duplicate basenames if we
- # might have to extract them afterwards, e.g., when creating a
- # static archive out of a convenience library, or when linking
- # the entirety of a libtool archive into another (currently
- # not supported by libtool).
- if (for obj in $oldobjs
- do
- $echo "X$obj" | $Xsed -e 's%^.*/%%'
- done | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- $echo "copying selected object files to avoid basename conflicts..."
-
- if test -z "$gentop"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
- exit $exit_status
- fi
- fi
-
- save_oldobjs=$oldobjs
- oldobjs=
- counter=1
- for obj in $save_oldobjs
- do
- objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- case " $oldobjs " in
- " ") oldobjs=$obj ;;
- *[\ /]"$objbase "*)
- while :; do
- # Make sure we don't pick an alternate name that also
- # overlaps.
- newobj=lt$counter-$objbase
- counter=`expr $counter + 1`
- case " $oldobjs " in
- *[\ /]"$newobj "*) ;;
- *) if test ! -f "$gentop/$newobj"; then break; fi ;;
- esac
- done
- $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- $run ln "$obj" "$gentop/$newobj" ||
- $run cp "$obj" "$gentop/$newobj"
- oldobjs="$oldobjs $gentop/$newobj"
- ;;
- *) oldobjs="$oldobjs $obj" ;;
- esac
- done
- fi
-
eval cmds=\"$old_archive_cmds\"
if len=`expr "X$cmds" : ".*"` &&
@@ -5575,7 +5046,20 @@ fi\
objlist=
concat_cmds=
save_oldobjs=$oldobjs
-
+ # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+ # encoded into archives. This makes 'ar r' malfunction in
+ # this piecewise linking case whenever conflicting object
+ # names appear in distinct ar calls; check, warn and compensate.
+ if (for obj in $save_oldobjs
+ do
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+ $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+ AR_FLAGS=cq
+ fi
# Is there a better way of finding the last object in the list?
for obj in $save_oldobjs
do
@@ -5586,7 +5070,7 @@ fi\
oldobjs="$objlist $obj"
objlist="$objlist $obj"
eval test_cmds=\"$old_archive_cmds\"
- if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+ if len=`expr "X$test_cmds" : ".*"` &&
test "$len" -le "$max_cmd_len"; then
:
else
@@ -5644,7 +5128,7 @@ fi\
done
# Quote the link command for shipping.
relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
if test "$hardcode_automatic" = yes ; then
relink_command=
fi
@@ -5783,11 +5267,11 @@ relink_command=\"$relink_command\""
# install_prog (especially on Windows NT).
if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
# Allow the use of GNU shtool's install command.
- $echo "X$nonopt" | grep shtool > /dev/null; then
+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
# Aesthetically quote it.
arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
esac
@@ -5796,14 +5280,14 @@ relink_command=\"$relink_command\""
shift
else
install_prog=
- arg=$nonopt
+ arg="$nonopt"
fi
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
esac
@@ -5821,31 +5305,28 @@ relink_command=\"$relink_command\""
do
if test -n "$dest"; then
files="$files $dest"
- dest=$arg
+ dest="$arg"
continue
fi
case $arg in
-d) isdir=yes ;;
- -f)
- case " $install_prog " in
- *[\\\ /]cp\ *) ;;
- *) prev=$arg ;;
- esac
- ;;
- -g | -m | -o) prev=$arg ;;
+ -f) prev="-f" ;;
+ -g) prev="-g" ;;
+ -m) prev="-m" ;;
+ -o) prev="-o" ;;
-s)
stripme=" -s"
continue
;;
- -*)
- ;;
+ -*) ;;
+
*)
# If the previous option needed an argument, then skip it.
if test -n "$prev"; then
prev=
else
- dest=$arg
+ dest="$arg"
continue
fi
;;
@@ -5854,7 +5335,7 @@ relink_command=\"$relink_command\""
# Aesthetically quote the argument.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
esac
@@ -5989,9 +5470,9 @@ relink_command=\"$relink_command\""
if test -n "$inst_prefix_dir"; then
# Stick the inst_prefix_dir data into the link command.
- relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
else
- relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
fi
$echo "$modename: warning: relinking \`$file'" 1>&2
@@ -6023,14 +5504,11 @@ relink_command=\"$relink_command\""
if test "$#" -gt 0; then
# Delete the old symlinks, and create new ones.
- # Try `ln -sf' first, because the `ln' binary might depend on
- # the symlink we replace! Solaris /bin/ln does not understand -f,
- # so we also need to try rm && ln -s.
for linkname
do
if test "$linkname" != "$realname"; then
- $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
- $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
+ $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
fi
done
fi
@@ -6043,16 +5521,7 @@ relink_command=\"$relink_command\""
IFS="$save_ifs"
eval cmd=\"$cmd\"
$show "$cmd"
- $run eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
- fi
-
- exit $lt_exit
- }
+ $run eval "$cmd" || exit $?
done
IFS="$save_ifs"
fi
@@ -6146,15 +5615,17 @@ relink_command=\"$relink_command\""
notinst_deplibs=
relink_command=
- # Note that it is not necessary on cygwin/mingw to append a dot to
- # foo even if both foo and FILE.exe exist: automatic-append-.exe
- # behavior happens only for exec(3), not for open(2)! Also, sourcing
- # `FILE.' does not work on cygwin managed mounts.
- #
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
# If there is no directory component, then add one.
- case $wrapper in
- */* | *\\*) . ${wrapper} ;;
- *) . ./${wrapper} ;;
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
esac
# Check the variables that should have been set.
@@ -6182,25 +5653,38 @@ relink_command=\"$relink_command\""
done
relink_command=
- # Note that it is not necessary on cygwin/mingw to append a dot to
- # foo even if both foo and FILE.exe exist: automatic-append-.exe
- # behavior happens only for exec(3), not for open(2)! Also, sourcing
- # `FILE.' does not work on cygwin managed mounts.
- #
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
# If there is no directory component, then add one.
- case $wrapper in
- */* | *\\*) . ${wrapper} ;;
- *) . ./${wrapper} ;;
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
esac
outputname=
if test "$fast_install" = no && test -n "$relink_command"; then
if test "$finalize" = yes && test -z "$run"; then
- tmpdir=`func_mktempdir`
+ tmpdir="/tmp"
+ test -n "$TMPDIR" && tmpdir="$TMPDIR"
+ tmpdir="$tmpdir/libtool-$$"
+ save_umask=`umask`
+ umask 0077
+ if $mkdir "$tmpdir"; then
+ umask $save_umask
+ else
+ umask $save_umask
+ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+ continue
+ fi
file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
outputname="$tmpdir/$file"
# Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
$show "$relink_command"
if $run eval "$relink_command"; then :
@@ -6220,7 +5704,7 @@ relink_command=\"$relink_command\""
fi
# remove .exe since cygwin /usr/bin/install will append another
- # one anyway
+ # one anyways
case $install_prog,$host in
*/usr/bin/install*,*cygwin*)
case $file:$destfile in
@@ -6320,7 +5804,7 @@ relink_command=\"$relink_command\""
# Exit here if they wanted silent mode.
test "$show" = : && exit $EXIT_SUCCESS
- $echo "X----------------------------------------------------------------------" | $Xsed
+ $echo "----------------------------------------------------------------------"
$echo "Libraries have been installed in:"
for libdir in $libdirs; do
$echo " $libdir"
@@ -6353,7 +5837,7 @@ relink_command=\"$relink_command\""
$echo
$echo "See any operating system documentation about shared libraries for"
$echo "more information, such as the ld(1) and ld.so(8) manual pages."
- $echo "X----------------------------------------------------------------------" | $Xsed
+ $echo "----------------------------------------------------------------------"
exit $EXIT_SUCCESS
;;
@@ -6411,10 +5895,8 @@ relink_command=\"$relink_command\""
if test -f "$dir/$objdir/$dlname"; then
dir="$dir/$objdir"
else
- if test ! -f "$dir/$dlname"; then
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit $EXIT_FAILURE
- fi
+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+ exit $EXIT_FAILURE
fi
;;
@@ -6478,12 +5960,12 @@ relink_command=\"$relink_command\""
fi
# Restore saved environment variables
- for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
- do
- eval "if test \"\${save_$lt_var+set}\" = set; then
- $lt_var=\$save_$lt_var; export $lt_var
- fi"
- done
+ if test "${save_LC_ALL+set}" = set; then
+ LC_ALL="$save_LC_ALL"; export LC_ALL
+ fi
+ if test "${save_LANG+set}" = set; then
+ LANG="$save_LANG"; export LANG
+ fi
# Now prepare to actually exec the command.
exec_cmd="\$cmd$args"
@@ -6572,17 +6054,9 @@ relink_command=\"$relink_command\""
rmfiles="$rmfiles $objdir/$n"
done
test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
- case "$mode" in
- clean)
- case " $library_names " in
- # " " in the beginning catches empty $dlname
- *" $dlname "*) ;;
- *) rmfiles="$rmfiles $objdir/$dlname" ;;
- esac
- test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
- ;;
- uninstall)
+ if test "$mode" = uninstall; then
if test -n "$library_names"; then
# Do each command in the postuninstall commands.
cmds=$postuninstall_cmds
@@ -6615,8 +6089,7 @@ relink_command=\"$relink_command\""
IFS="$save_ifs"
fi
# FIXME: should reinstall the best remaining shared library.
- ;;
- esac
+ fi
fi
;;
@@ -6840,9 +6313,9 @@ The following components of LINK-COMMAND are treated specially:
-dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
-export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
+ try to export only the symbols listed in SYMFILE
-export-symbols-regex REGEX
- try to export only the symbols matching REGEX
+ try to export only the symbols matching REGEX
-LLIBDIR search LIBDIR for required installed libraries
-lNAME OUTPUT-FILE requires the installed library libNAME
-module build a library that can dlopened
@@ -6856,11 +6329,9 @@ The following components of LINK-COMMAND are treated specially:
-release RELEASE specify package release information
-rpath LIBDIR the created library will eventually be installed in LIBDIR
-R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of uninstalled libtool libraries
- -static-libtool-libs
- do not do any dynamic linking of libtool libraries
+ -static do not do any dynamic linking of libtool libraries
-version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
+ specify library version info [each variable defaults to 0]
All other options (arguments beginning with \`-') are ignored.
@@ -6903,7 +6374,7 @@ esac
$echo
$echo "Try \`$modename --help' for more information about other modes."
-exit $?
+exit $EXIT_SUCCESS
# The TAGs below are defined such that we never get into a situation
# in which we disable both kinds of libraries. Given conflicting
@@ -6917,11 +6388,12 @@ exit $?
# configuration. But we'll never go from static-only to shared-only.
# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-disable_libs=shared
+build_libtool_libs=no
+build_old_libs=yes
# ### END LIBTOOL TAG CONFIG: disable-shared
# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-disable_libs=static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
# ### END LIBTOOL TAG CONFIG: disable-static
# Local Variables:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/mkinstalldirs b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/mkinstalldirs
new file mode 100755
index 00000000000..4f58503ea4e
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/ac-tools/mkinstalldirs
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/Build/source/libs/graphite-engine/configure b/Build/source/libs/t1lib/t1lib-5.1.2/configure
index 8a7063533cc..0a99ce128aa 100755
--- a/Build/source/libs/graphite-engine/configure
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/configure
@@ -1,88 +1,26 @@
#! /bin/sh
+# From configure.in configure.in 1.00.
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61a for silgraphite 2.3.
+# Generated by GNU Autoconf 2.59.
#
-# Report bugs to <silgraphite-devel@lists.sourceforge.net>.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2003 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
## M4sh Initialization. ##
## --------------------- ##
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
+# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
fi
+DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
@@ -92,41 +30,8 @@ else
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
+$as_unset ENV MAIL MAILPATH
PS1='$ '
PS2='> '
PS4='+ '
@@ -140,19 +45,18 @@ do
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
+if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
else
as_expr=false
fi
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -160,387 +64,157 @@ fi
# Name of the executable.
-as_me=`$as_basename -- "$0" ||
+as_me=`$as_basename "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
fi
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-test \$exitcode = 0) || { (exit 1); exit 1; }
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- case $as_dir in
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
/*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell autoconf@gnu.org about your system,
- echo including any error possibly output before this
- echo message
-}
-
-
-
+ if ("$as_dir/$as_base" -c '
as_lineno_1=$LINENO
as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
t loop
- s/-\n.*//
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
# Exit status is that of the last command.
exit
}
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir
-fi
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
+rm -f conf$$ conf$$.exe conf$$.file
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -549,28 +223,7 @@ else
as_mkdir_p=false
fi
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
+as_executable_p="test -f"
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -579,6 +232,15 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
# Check that we are running under the correct shell.
@@ -624,8 +286,8 @@ if test "X${echo_test_string+set}" != Xset; then
# find a string as large as possible, as long as the shell can cope with it
for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
# expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string=`eval $cmd`) 2>/dev/null &&
- echo_test_string=`eval $cmd` &&
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
(test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
then
break
@@ -734,199 +396,76 @@ tagnames=${tagnames+${tagnames},}CXX
tagnames=${tagnames+${tagnames},}F77
-exec 7<&0 </dev/null 6>&1
-
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+exec 6>&1
+
#
# Initializations.
#
ac_default_prefix=/usr/local
-ac_clean_files=
ac_config_libobj_dir=.
-LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
# Identity of this package.
-PACKAGE_NAME='silgraphite'
-PACKAGE_TARNAME='silgraphite'
-PACKAGE_VERSION='2.3'
-PACKAGE_STRING='silgraphite 2.3'
-PACKAGE_BUGREPORT='silgraphite-devel@lists.sourceforge.net'
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
-ac_unique_file="src/segment/GrEngine.cpp"
+ac_unique_file="lib/t1lib/t1base.c"
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
+#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_SYS_STAT_H
+#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
-#ifdef STDC_HEADERS
+#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
-# ifdef HAVE_STDLIB_H
+# if HAVE_STDLIB_H
# include <stdlib.h>
# endif
#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
# include <memory.h>
# endif
# include <string.h>
#endif
-#ifdef HAVE_STRINGS_H
+#if HAVE_STRINGS_H
# include <strings.h>
#endif
-#ifdef HAVE_INTTYPES_H
+#if HAVE_INTTYPES_H
# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
+#if HAVE_UNISTD_H
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-am__isrc
-CYGPATH_W
-PACKAGE
-VERSION
-ACLOCAL
-AUTOCONF
-AUTOMAKE
-AUTOHEADER
-MAKEINFO
-install_sh
-STRIP
-INSTALL_STRIP_PROGRAM
-mkdir_p
-AWK
-SET_MAKE
-am__leading_dot
-AMTAR
-am__tar
-am__untar
-MAINTAINER_MODE_TRUE
-MAINTAINER_MODE_FALSE
-MAINT
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-DEPDIR
-am__include
-am__quote
-AMDEP_TRUE
-AMDEP_FALSE
-AMDEPBACKSLASH
-CCDEPMODE
-am__fastdepCC_TRUE
-am__fastdepCC_FALSE
-CPP
-GREP
-EGREP
-SED
-LN_S
-ECHO
-AR
-RANLIB
-DSYMUTIL
-NMEDIT
-CXX
-CXXFLAGS
-ac_ct_CXX
-CXXDEPMODE
-am__fastdepCXX_TRUE
-am__fastdepCXX_FALSE
-CXXCPP
-F77
-FFLAGS
-ac_ct_F77
-LIBTOOL
-LSB_RELEASE
-SIZEOF_WCHAR_T
-REL_CODENAME
-LIBOBJS
-LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LDLIBS PROGEXT CFLAGS LDFLAGS T1LIB_LT_CURRENT T1LIB_LT_REVISION T1LIB_LT_AGE T1LIB_DATA_DIR T1LIB_IDENTIFIER MAIN_TARGET MAIN_HEADER OPTIONS no_x CC T1_AA_TYPE16 T1_AA_TYPE32 T1_AA_TYPE64 T1_INT16 T1_INT32 XSUBDIRS T1LIBX_OBJS T1LIBX_SRCS T1LIBX_HEADERS XOBJS T1LIB_VERSION T1LIB_REVISION T1LIB_PATCHLEVEL T1LIB_VERSIONSTRING SET_MAKE CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXX CXXFLAGS ac_ct_CXX CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LIBOBJS LTLIBOBJS'
ac_subst_files=''
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-CXX
-CXXFLAGS
-CCC
-CXXCPP
-F77
-FFLAGS'
-
# Initialize some variables set by options.
ac_init_help=
@@ -953,48 +492,34 @@ x_libraries=NONE
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
+datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
ac_prev=
-ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
+ eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
# Accept the important Cygnus configure options, so we can diagnose typos.
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
+ case $ac_option in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
@@ -1016,45 +541,33 @@ do
--config-cache | -C)
cache_file=config.cache ;;
- -datadir | --datadir | --datadi | --datad)
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
datadir=$ac_optarg ;;
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
-disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-.]/_/g'`
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
-enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-.]/_/g'`
- eval enable_$ac_useropt=\$ac_optarg ;;
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -1081,12 +594,6 @@ do
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
@@ -1111,16 +618,13 @@ do
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
-localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
@@ -1185,16 +689,6 @@ do
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
@@ -1245,22 +739,26 @@ do
ac_init_version=: ;;
-with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-.]/_/g'`
- eval with_$ac_useropt=\$ac_optarg ;;
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
-without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-.]/_/g'`
- eval with_$ac_useropt=no ;;
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
--x)
# Obsolete; use --with-x.
@@ -1280,7 +778,7 @@ do
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
Try \`$0 --help' for more information." >&2
{ (exit 1); exit 1; }; }
;;
@@ -1289,16 +787,17 @@ Try \`$0 --help' for more information." >&2
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
{ (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
export $ac_envvar ;;
*)
# FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
@@ -1307,23 +806,31 @@ done
if test -n "$ac_prev"; then
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
+ { echo "$as_me: error: missing argument to $ac_option" >&2
{ (exit 1); exit 1; }; }
fi
-# Be sure to have absolute directory names.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
do
- eval ac_val=\$$ac_var
+ eval ac_val=$`echo $ac_var`
case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
esac
- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
done
# There might be people who depend on the old broken behavior: `$host'
@@ -1337,7 +844,7 @@ target=$target_alias
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used." >&2
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
@@ -1350,76 +857,94 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { $as_echo "$as_me: error: Working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$0" ||
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$0" : 'X\(//\)[^/]' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
+ 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'`
srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
+ if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
{ (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
{ (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
#
# Report the --help message.
@@ -1428,7 +953,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures silgraphite 2.3 to adapt to many kinds of systems.
+\`configure' configures this package to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1448,6 +973,9 @@ Configuration:
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
+_ACEOF
+
+ cat <<_ACEOF
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
@@ -1465,30 +993,22 @@ Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/silgraphite]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
_ACEOF
cat <<\_ACEOF
-Program names:
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
System types:
--build=BUILD configure for building on BUILD [guessed]
@@ -1497,27 +1017,16 @@ _ACEOF
fi
if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of silgraphite 2.3:";;
- esac
+
cat <<\_ACEOF
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer
- --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors
- --disable-tracing build without support for trace Graphite logs
- --enable-debug build with debugging. (default=no)
- --disable-final build without optimizations and no debugging.
- --enable-strict treat warnings as errors, check for as much as we
- can
- --enable-profile allow profiling (default=no)
- --enable-profilefn allow functioncheck profiling (default=no)
- --enable-shared[=PKGS] build shared libraries [default=yes]
- --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-shared[=PKGS]
+ build shared libraries [default=yes]
+ --enable-static[=PKGS]
+ build static libraries [default=yes]
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
@@ -1525,19 +1034,23 @@ Optional Features:
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-x use the X Window System
+ --without-athena do not use Athena widgets
+ --with-athena-includes=DIR Athena include files are in DIR
+ --with-athena-libraries=DIR Athena libraries are in DIR
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-pic try to use only PIC/non-PIC objects [default=use
both]
- --with-tags[=TAGS] include additional configurations [automatic]
+ --with-tags[=TAGS]
+ include additional configurations [automatic]
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
@@ -1548,88 +1061,119 @@ Some influential environment variables:
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
-Report bugs to <silgraphite-devel@lists.sourceforge.net>.
_ACEOF
-ac_status=$?
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" || continue
+ test -d $ac_dir || continue
ac_builddir=.
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
case $srcdir in
- .) # We are building in place.
+ .) # No --srcdir option. We are building in place.
ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
done
fi
-test -n "$ac_init_help" && exit $ac_status
+test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-silgraphite configure 2.3
-generated by GNU Autoconf 2.61a
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 2003 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
- exit
+ exit 0
fi
-cat >config.log <<_ACEOF
+exec 5>config.log
+cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by silgraphite $as_me 2.3, which was
-generated by GNU Autoconf 2.61a. Invocation command line was
+It was created by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
_ACEOF
-exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
@@ -1648,7 +1192,7 @@ uname -v = `(uname -v) 2>/dev/null || echo unknown`
/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
@@ -1660,9 +1204,8 @@ for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
+ echo "PATH: $as_dir"
done
-IFS=$as_save_IFS
} >&5
@@ -1684,6 +1227,7 @@ _ACEOF
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
+ac_sep=
ac_must_keep_next=false
for ac_pass in 1 2
do
@@ -1694,8 +1238,8 @@ do
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
@@ -1716,7 +1260,9 @@ do
-* ) ac_must_keep_next=true ;;
esac
fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
;;
esac
done
@@ -1727,8 +1273,8 @@ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
{
@@ -1741,35 +1287,20 @@ trap 'exit_status=$?
_ASBOX
echo
# The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
+{
(set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
*)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
- esac |
- sort
-)
+ esac;
+}
echo
cat <<\_ASBOX
@@ -1780,28 +1311,22 @@ _ASBOX
echo
for ac_var in $ac_subst_vars
do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
done | sort
echo
if test -n "$ac_subst_files"; then
cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
+## ------------- ##
+## Output files. ##
+## ------------- ##
_ASBOX
echo
for ac_var in $ac_subst_files
do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
done | sort
echo
fi
@@ -1813,24 +1338,26 @@ _ASBOX
## ----------- ##
_ASBOX
echo
- cat confdefs.h
+ sed "/^$/d" confdefs.h | sort
echo
fi
test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
} >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
-' 0
+ ' 0
for ac_signal in 1 2 13 15; do
trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
# Predefined preprocessor variables.
@@ -1861,20 +1388,17 @@ _ACEOF
# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
-if test -n "$CONFIG_SITE"; then
- set x "$CONFIG_SITE"
-elif test "x$prefix" != xNONE; then
- set x "$prefix/share/config.site" "$prefix/etc/config.site"
-else
- set x "$ac_default_prefix/share/config.site" \
- "$ac_default_prefix/etc/config.site"
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
fi
-shift
-for ac_site_file
-do
+for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file"
fi
@@ -1884,52 +1408,54 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special
# files actually), so we avoid doing that.
if test -f "$cache_file"; then
- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
esac
fi
else
- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
case $ac_old_set,$ac_new_set in
set,)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
if test "x$ac_old_val" != "x$ac_new_val"; then
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { $as_echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-$as_echo "$as_me: former value: $ac_old_val" >&2;}
- { $as_echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-$as_echo "$as_me: current value: $ac_new_val" >&2;}
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
ac_cache_corrupted=:
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -1939,13 +1465,18 @@ $as_echo "$as_me: current value: $ac_new_val" >&2;}
fi
done
if $ac_cache_corrupted; then
- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
{ (exit 1); exit 1; }; }
fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
@@ -1965,671 +1496,585 @@ fi
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
+ ac_config_headers="$ac_config_headers lib/t1lib/sysconf.h:lib/t1lib/sysconf.h.in"
ac_aux_dir=
-for ac_dir in config "$srcdir"/config; do
- if test -f "$ac_dir/install-sh"; then
+for ac_dir in ac-tools $srcdir/ac-tools; do
+ if test -f $ac_dir/install-sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
- elif test -f "$ac_dir/install.sh"; then
+ elif test -f $ac_dir/install.sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
- elif test -f "$ac_dir/shtool"; then
+ elif test -f $ac_dir/shtool; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/shtool install -c"
break
fi
done
if test -z "$ac_aux_dir"; then
- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&2;}
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ac-tools $srcdir/ac-tools" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ac-tools $srcdir/ac-tools" >&2;}
{ (exit 1); exit 1; }; }
fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-# setup automake
-am__api_version='1.10'
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- done
- done
- ;;
-esac
-done
-IFS=$as_save_IFS
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftest.file`
- fi
- rm -f conftest.file
- if test "$*" != "X $srcdir/configure conftest.file" \
- && test "$*" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" >&5
-$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" >&2;}
- { (exit 1); exit 1; }; }
- fi
- test "$2" = conftest.file
- )
-then
- # Ok.
- :
-else
- { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-$as_echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
- { (exit 1); exit 1; }; }
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-test "$program_prefix" != NONE &&
- program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
- if test "${ac_cv_path_mkdir+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in mkdir gmkdir; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
- case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
- 'mkdir (GNU coreutils) '* | \
- 'mkdir (coreutils) '* | \
- 'mkdir (fileutils) '4.1*)
- ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
- break 3;;
- esac
- done
- done
-done
-IFS=$as_save_IFS
-fi
- if test "${ac_cv_path_mkdir+set}" = set; then
- MKDIR_P="$ac_cv_path_mkdir -p"
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for MKDIR_P within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- test -d ./--version && rmdir ./--version
- MKDIR_P="$ac_install_sh -d"
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
- [\\/$]* | ?:[\\/]*) ;;
- */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
+T1LIB_LT_CURRENT=6
+T1LIB_LT_REVISION=2
+T1LIB_LT_AGE=1
+T1LIB_IDENTIFIER="5.1.2"
-for ac_prog in gawk mawk nawk awk
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_AWK="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
+T1LIB_VERSION=5
+T1LIB_REVISION=1
+T1LIB_PATCHLEVEL=2
+T1LIB_VERSIONSTRING=\""5.1.2"\"
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- { $as_echo "$as_me:$LINENO: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
- test -n "$AWK" && break
-done
-{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+## Free Software Foundation, Inc.
+## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+##
+## 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.
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
+# serial 47 AC_PROG_LIBTOOL
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
- # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
- # is not polluted with repeated "-I."
- am__isrc=' -I$(srcdir)'
- # test to see if srcdir already configured
- if test -f $srcdir/config.status; then
- { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
- { (exit 1); exit 1; }; }
- fi
-fi
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
-# Define the identity of the package.
- PACKAGE='silgraphite'
- VERSION='2.3'
+# AC_PROG_LIBTOOL
+# ---------------
+# AC_PROG_LIBTOOL
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
+# _AC_PROG_LIBTOOL
+# ----------------
+# _AC_PROG_LIBTOOL
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-# Some tools Automake needs.
+# AC_LIBTOOL_SETUP
+# ----------------
+# AC_LIBTOOL_SETUP
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+# _LT_AC_SYS_COMPILER
+# -------------------
+# _LT_AC_SYS_COMPILER
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# _LT_AC_SYS_LIBPATH_AIX
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+# _LT_AC_SHELL_INIT
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+# _LT_AC_PROG_ECHO_BACKSLASH
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+# _LT_AC_LOCK
+# -----------
+# _LT_AC_LOCK
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+# AC_LIBTOOL_COMPILER_OPTION
-fi
-if test -z "$ac_cv_prog_STRIP"; then
- ac_ct_STRIP=$STRIP
- # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_STRIP"; then
- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+# AC_LIBTOOL_LINKER_OPTION
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
- if test "x$ac_ct_STRIP" = x; then
- STRIP=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.
+# _LT_AC_CHECK_DLFCN
+# --------------------
+# _LT_AC_CHECK_DLFCN
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+# _LT_AC_TRY_DLOPEN_SELF
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+# AC_LIBTOOL_DLOPEN_SELF
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+# AC_LIBTOOL_PROG_CC_C_O
-{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
- # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
- enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
-else
- USE_MAINTAINER_MODE=no
-fi
- { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-$as_echo "$USE_MAINTAINER_MODE" >&6; }
- if test $USE_MAINTAINER_MODE = yes; then
- MAINTAINER_MODE_TRUE=
- MAINTAINER_MODE_FALSE='#'
-else
- MAINTAINER_MODE_TRUE='#'
- MAINTAINER_MODE_FALSE=
-fi
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
- MAINT=$MAINTAINER_MODE_TRUE
+# AC_LIBTOOL_OBJDIR
+# -----------------
+# AC_LIBTOOL_OBJDIR
-# System checks.
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
- { (exit 1); exit 1; }; }
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-{ $as_echo "$as_me:$LINENO: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-$as_echo "$as_me: error: invalid value of canonical build" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:$LINENO: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-fi
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+# AC_LIBTOOL_SYS_LIB_STRIP
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-$as_echo "$as_me: error: invalid value of canonical host" >&2;}
- { (exit 1); exit 1; }; };;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
- am__include=include
- am__quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- am__include=.include
- am__quote="\""
- _am_result=BSD
- fi
-fi
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then
- enableval=$enable_dependency_tracking;
-fi
+# _LT_AC_TAGCONFIG
+# ----------------
+# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!). If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+# _LT_AC_LANG_CXX
+
+# _LT_AC_PROG_CXXCPP
+# ---------------
+# _LT_AC_PROG_CXXCPP
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+# _LT_AC_LANG_GCJ
+
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+
+# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars. Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+ # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+
+
+
+# old names
+
+
+
+
+
+
+
+
+# This is just to silence aclocal about the macro not being used
+
+
+
+
+
+
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+
+
+
+test -z "$LDLIBS" && LDLIBS=-lm
+test -z "$PROGEXT" && PROGEXT=""
+test -z "$CFLAGS"
+test -z "$LDFLAGS"
+
+T1LIB_DATA_DIR="${datadir}/t1lib"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
fi
- if test "x$enable_dependency_tracking" != xno; then
- AMDEP_TRUE=
- AMDEP_FALSE='#'
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
else
- AMDEP_TRUE='#'
- AMDEP_FALSE=
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
fi
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2638,10 +2083,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2652,36 +2097,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
fi
if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2692,53 +2135,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
+ CC=$ac_ct_CC
else
CC="$ac_cv_prog_CC"
fi
if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2749,36 +2177,76 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2790,18 +2258,17 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
@@ -2819,25 +2286,24 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
fi
if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
+ for ac_prog in cl
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2848,40 +2314,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
test -n "$CC" && break
done
fi
if test -z "$CC"; then
ac_ct_CC=$CC
- for ac_prog in cl.exe
+ for ac_prog in cl
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2892,92 +2356,58 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
test -n "$ac_ct_CC" && break
done
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
+ CC=$ac_ct_CC
fi
fi
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+echo "$as_me: error: no acceptable C compiler found in \$PATH
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
cat >conftest.$ac_ext <<_ACEOF
@@ -3000,147 +2430,107 @@ ac_clean_files="$ac_clean_files a.out a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort. b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions. Remove them first so a
-# subsequent execution test works.
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link_default") 2>&5
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
do
test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
;;
[ab].out )
# We found the default executable, but exeext='' is most
# certainly right.
break;;
*.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
break;;
* )
break;;
esac
done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
else
- ac_file=''
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C compiler cannot create executables
+echo "$as_me: error: C compiler cannot create executables
See \`config.log' for more details." >&2;}
{ (exit 77); exit 77; }; }
fi
ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
-# Check that the compiler produces executables we can run. If not, either
+# Check the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
# If not cross compiling, check that we can run a simple program.
if test "$cross_compiling" != yes; then
if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C compiled programs.
+echo "$as_me: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
fi
fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
rm -f a.out a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
+# Check the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
@@ -3149,31 +2539,32 @@ $as_echo "$ac_try_echo") >&5
for ac_file in conftest.exe conftest conftest.*; do
test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
break;;
* ) break;;
esac
done
else
- { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
if test "${ac_cv_objext+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3191,46 +2582,39 @@ main ()
}
_ACEOF
rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
done
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
if test "${ac_cv_c_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3251,54 +2635,50 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_compiler_gnu=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_compiler_gnu=no
+ac_compiler_gnu=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
if test "${ac_cv_prog_cc_g+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -3314,121 +2694,38 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_prog_cc_g=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
+ac_cv_prog_cc_g=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
@@ -3444,12 +2741,12 @@ else
CFLAGS=
fi
fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- $as_echo_n "(cached) " >&6
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_prog_cc_c89=no
+ ac_cv_prog_cc_stdc=no
ac_save_CC=$CC
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3483,17 +2780,12 @@ static char *f (char * (*g) (char **, int), char **p, ...)
/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
function prototypes and stuff, but not '\xHH' hex character constants.
These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
+ as 'x'. The following induces an error, until -std1 is added to get
proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
+ that's true only with -std1. */
int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
@@ -3508,187 +2800,225 @@ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
return 0;
}
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
+rm -f conftest.err conftest.$ac_objext
done
-rm -f conftest.$ac_ext
+rm -f conftest.$ac_ext conftest.$ac_objext
CC=$ac_save_CC
fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:$LINENO: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
*)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
esac
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CC" am_compiler_list=
-
-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_CC_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_CC_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
else
- am_cv_CC_dependencies_compiler_type=none
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+continue
fi
-{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
- am__fastdepCC_TRUE=
- am__fastdepCC_FALSE='#'
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
else
- am__fastdepCC_TRUE='#'
- am__fastdepCC_FALSE=
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
if test "${ac_cv_prog_CPP+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
# Double quotes because CPP needs to be expanded
for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -3715,35 +3045,35 @@ cat >>conftest.$ac_ext <<_ACEOF
#endif
Syntax error
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
-
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether nonexistent headers
+ # OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3753,34 +3083,34 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
# Broken: success on invalid input.
continue
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Passes both tests.
ac_preproc_ok=:
break
fi
-
rm -f conftest.err conftest.$ac_ext
done
@@ -3798,8 +3128,8 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
@@ -3822,35 +3152,35 @@ cat >>conftest.$ac_ext <<_ACEOF
#endif
Syntax error
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
-
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether nonexistent headers
+ # OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3860,34 +3190,34 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
# Broken: success on invalid input.
continue
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Passes both tests.
ac_preproc_ok=:
break
fi
-
rm -f conftest.err conftest.$ac_ext
done
@@ -3896,9 +3226,9 @@ rm -f conftest.err conftest.$ac_ext
if $ac_preproc_ok; then
:
else
- { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
@@ -3910,183 +3240,322 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
- # Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_GREP_found && break 3
- done
-done
-
-done
-IFS=$as_save_IFS
+echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6
-fi
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+fi;
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
else
- ac_cv_path_GREP=$GREP
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+ if test "${ac_cv_have_x+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -fr conftest.dir
+if mkdir conftest.dir; then
+ cd conftest.dir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat >Imakefile <<'_ACEOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+_ACEOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case $ac_im_incroot in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+ esac
+ case $ac_im_usrlibdir in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Intrinsic.h.
+ # First, try using that file with no special directory specified.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <X11/Intrinsic.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
fi
+if test -z "$ac_cpp_err"; then
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-
+ for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Intrinsic.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
- $as_echo_n "(cached) " >&6
+rm -f conftest.err conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lXt $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <X11/Intrinsic.h>
+int
+main ()
+{
+XtMalloc (0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+LIBS=$ac_save_LIBS
+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
- # Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/libXt.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_EGREP_found && break 3
done
done
-
-done
-IFS=$as_save_IFS
-
-
fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
- { { $as_echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
fi
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$as_me:$LINENO: result: $have_x" >&5
+echo "${ECHO_T}$have_x" >&6
+ no_x=yes
else
- ac_cv_path_EGREP=$EGREP
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
fi
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
+cat >>confdefs.h <<\_ACEOF
+#define X_DISPLAY_MISSING 1
+_ACEOF
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- $as_echo_n "(cached) " >&6
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_nospace=yes
else
- cat >conftest.$ac_ext <<_ACEOF
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_R_nospace=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_nospace = yes; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
int
main ()
@@ -4096,80 +3565,265 @@ main ()
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stdc=yes
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_space=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_header_stdc=no
+ac_R_space=no
fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_space = yes; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6
+ fi
+ fi
+ LIBS=$ac_xsave_LIBS
+ esac
+ fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <string.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay ();
+int
+main ()
+{
+XOpenDisplay ();
+ ;
+ return 0;
+}
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
:
else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_dnet_ntoa=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
fi
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <stdlib.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_stub_dnet_ntoa=yes
else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
+ fi
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_xsave_LIBS"
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ echo "$as_me:$LINENO: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
+if test "${ac_cv_func_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -4177,512 +3831,1071 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define gethostbyname innocuous_gethostbyname
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+# include <assert.h>
+#endif
+
+#undef gethostbyname
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+char (*f) () = gethostbyname;
+#endif
+#ifdef __cplusplus
+}
#endif
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
int
main ()
{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
+return f != gethostbyname;
+ ;
return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- :
+ ac_cv_func_gethostbyname=yes
else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-( exit $ac_status )
-ac_cv_header_stdc=no
+ac_cv_func_gethostbyname=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_lib_nsl_gethostbyname=no
fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
-fi
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_bsd_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
+if test $ac_cv_lib_bsd_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+ fi
+ fi
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the name server (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6
+if test "${ac_cv_func_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define connect to an innocuous variant, in case <limits.h> declares connect.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define connect innocuous_connect
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef connect
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_connect) || defined (__stub___connect)
+choke me
+#else
+char (*f) () = connect;
+#endif
+#ifdef __cplusplus
+}
+#endif
+int
+main ()
+{
+return f != connect;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_func_connect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
+ if test $ac_cv_func_connect = no; then
+ echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+int
+main ()
+{
+connect ();
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_connect=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
+ac_cv_lib_socket_connect=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+if test $ac_cv_lib_socket_connect = yes; then
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
fi
-done
-
+ fi
-{ $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then
- $as_echo_n "(cached) " >&6
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ echo "$as_me:$LINENO: checking for remove" >&5
+echo $ECHO_N "checking for remove... $ECHO_C" >&6
+if test "${ac_cv_func_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- # See if sys/param.h defines the BYTE_ORDER macro.
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/param.h>
+/* Define remove to an innocuous variant, in case <limits.h> declares remove.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define remove innocuous_remove
-int
-main ()
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef remove
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
- && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
- bogus endian macros
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_remove) || defined (__stub___remove)
+choke me
+#else
+char (*f) () = remove;
+#endif
+#ifdef __cplusplus
+}
#endif
+int
+main ()
+{
+return f != remove;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- # It does; now see whether it defined to BIG_ENDIAN or not.
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_remove=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+echo "${ECHO_T}$ac_cv_func_remove" >&6
+
+ if test $ac_cv_func_remove = no; then
+ echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
+if test "${ac_cv_lib_posix_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/param.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
int
main ()
{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
-#endif
-
+remove ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_c_bigendian=yes
-else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_posix_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_c_bigendian=no
+ac_cv_lib_posix_remove=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
+if test $ac_cv_lib_posix_remove = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ fi
- # It does not; compile a test program.
-if test "$cross_compiling" = yes; then
- # try to guess the endianness by grepping values into an object file
- ac_cv_c_bigendian=unknown
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo "$as_me:$LINENO: checking for shmat" >&5
+echo $ECHO_N "checking for shmat... $ECHO_C" >&6
+if test "${ac_cv_func_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
-short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+/* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shmat innocuous_shmat
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shmat
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shmat) || defined (__stub___shmat)
+choke me
+#else
+char (*f) () = shmat;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
int
main ()
{
- _ascii (); _ebcdic ();
+return f != shmat;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
- ac_cv_c_bigendian=yes
-fi
-if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
- if test "$ac_cv_c_bigendian" = unknown; then
- ac_cv_c_bigendian=no
- else
- # finding both strings is unlikely to happen, but who knows?
- ac_cv_c_bigendian=unknown
- fi
-fi
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shmat=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
+ac_cv_func_shmat=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+echo "${ECHO_T}$ac_cv_func_shmat" >&6
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test $ac_cv_func_shmat = no; then
+ echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_includes_default
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
int
main ()
{
+shmat ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ipc_shmat=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long int l;
- char c[sizeof (long int)];
- } u;
- u.l = 1;
- return u.c[sizeof (long int) - 1] == 1;
+ac_cv_lib_ipc_shmat=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
+if test $ac_cv_lib_ipc_shmat = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+ fi
+ fi
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber ();
+int
+main ()
+{
+IceConnectionNumber ();
;
return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_c_bigendian=no
+ ac_cv_lib_ICE_IceConnectionNumber=yes
else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-( exit $ac_status )
-ac_cv_c_bigendian=yes
+ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
+if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
fi
+ LDFLAGS=$ac_save_LDFLAGS
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
-case $ac_cv_c_bigendian in
- yes)
-cat >>confdefs.h <<\_ACEOF
-#define WORDS_BIGENDIAN 1
+
+athena_includes=
+athena_libraries=
+
+# Check whether --with-athena or --without-athena was given.
+if test "${with_athena+set}" = set; then
+ withval="$with_athena"
+
+fi;
+if test "$with_athena" = "no"
+then
+athena_includes=no
+athena_libraries=no
+fi
+
+# Check whether --with-athena-includes or --without-athena-includes was given.
+if test "${with_athena_includes+set}" = set; then
+ withval="$with_athena_includes"
+ athena_includes="$withval"
+fi;
+
+# Check whether --with-athena-libraries or --without-athena-libraries was given.
+if test "${with_athena_libraries+set}" = set; then
+ withval="$with_athena_libraries"
+ athena_libraries="$withval"
+fi;
+echo "$as_me:$LINENO: checking for Athena" >&5
+echo $ECHO_N "checking for Athena... $ECHO_C" >&6
+#
+#
+# Search the include files.
+#
+if test "$athena_includes" = ""; then
+if test "${ice_cv_athena_includes+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ice_athena_save_LIBS="$LIBS"
+ice_athena_save_CFLAGS="$CFLAGS"
+ice_athena_save_CPPFLAGS="$CPPFLAGS"
+ice_athena_save_LDFLAGS="$LDFLAGS"
+#
+LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS"
+CFLAGS="$X_CFLAGS $CFLAGS"
+CPPFLAGS="$X_CFLAGS $CPPFLAGS"
+LDFLAGS="$X_LIBS $LDFLAGS"
+#
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
_ACEOF
- ;;
- no)
- ;;
- *)
- { { $as_echo "$as_me:$LINENO: error: unknown endianness
-presetting ac_cv_c_bigendian=no (or yes) will help" >&5
-$as_echo "$as_me: error: unknown endianness
-presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
- { (exit 1); exit 1; }; } ;;
-esac
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <X11/Intrinsic.h>
+#include <X11/Xaw/Text.h>
-# Optional features
-# Check whether --enable-tracing was given.
-if test "${enable_tracing+set}" = set; then
- enableval=$enable_tracing;
-fi
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
- test "x$enable_tracing" != xno && enable_tracing=yes
+# X11/Xaw/Text.h is in the standard search path.
+ice_cv_athena_includes=
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then
- enableval=$enable_debug;
-fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-# Check whether --enable-final was given.
-if test "${enable_final+set}" = set; then
- enableval=$enable_final;
-fi
- test "x$enable_final" != xno && enable_final=yes
-# Check whether --enable-strict was given.
-if test "${enable_strict+set}" = set; then
- enableval=$enable_strict;
+# X11/Xaw/Text.h is not in the standard search path.
+# Locate it and put its directory in `athena_includes'
+#
+# /usr/include/Motif* are used on HP-UX (Motif).
+# /usr/include/X11* are used on HP-UX (X and Athena).
+# /usr/dt is used on Solaris (Motif).
+# /usr/openwin is used on Solaris (X and Athena).
+# Other directories are just guesses.
+for dir in "$x_includes" "${prefix}/include" /usr/include /usr/local/include \
+ /usr/include/Motif2.0 /usr/include/Motif1.2 /usr/include/Motif1.1 \
+ /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 \
+ /usr/dt/include /usr/openwin/include \
+ /usr/dt/*/include /opt/*/include /usr/include/Motif* \
+ "${prefix}"/*/include /usr/*/include /usr/local/*/include \
+ "${prefix}"/include/* /usr/include/* /usr/local/include/*; do
+if test -f "$dir/X11/Xaw/Text.h"; then
+ice_cv_athena_includes="$dir"
+break
fi
+done
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+#
+LIBS="$ice_athena_save_LIBS"
+CFLAGS="$ice_athena_save_CFLAGS"
+CPPFLAGS="$ice_athena_save_CPPFLAGS"
+LDFLAGS="$ice_athena_save_LDFLAGS"
-# Check whether --enable-profile was given.
-if test "${enable_profile+set}" = set; then
- enableval=$enable_profile;
fi
-# Check whether --enable-profilefn was given.
-if test "${enable_profilefn+set}" = set; then
- enableval=$enable_profilefn;
+athena_includes="$ice_cv_athena_includes"
fi
+#
+#
+# Now for the libraries.
+#
+if test "$athena_libraries" = ""; then
+if test "${ice_cv_athena_libraries+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ice_athena_save_LIBS="$LIBS"
+ice_athena_save_CFLAGS="$CFLAGS"
+ice_athena_save_CPPFLAGS="$CPPFLAGS"
+ice_athena_save_LDFLAGS="$LDFLAGS"
+#
+LIBS="$X_PRE_LIBS -lXaw -lXmu -lXext -lXt -lX11 $X_EXTRA_LIBS $LIBS"
+CFLAGS="$X_CFLAGS $CFLAGS"
+CPPFLAGS="$X_CFLAGS $CPPFLAGS"
+LDFLAGS="$X_LIBS $LDFLAGS"
+#
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <X11/Intrinsic.h>
+#include <X11/Xaw/Text.h>
+
+int
+main ()
+{
+XtToolkitInitialize();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+# libXaw.a is in the standard search path.
+ice_cv_athena_libraries=
-# Checks for programs.
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- $as_echo_n "(cached) " >&6
else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- done
- done
- ;;
-esac
-done
-IFS=$as_save_IFS
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+# libXaw.a is not in the standard search path.
+# Locate it and put its directory in `athena_libraries'
+#
+#
+# /usr/lib/Motif* are used on HP-UX (Motif).
+# /usr/lib/X11* are used on HP-UX (X and Athena).
+# /usr/dt is used on Solaris (Motif).
+# /usr/openwin is used on Solaris (X and Athena).
+# Other directories are just guesses.
+for dir in "$x_libraries" "${prefix}/lib" /usr/lib /usr/local/lib \
+ /usr/lib/Motif2.0 /usr/lib/Motif1.2 /usr/lib/Motif1.1 \
+ /usr/lib/X11R6 /usr/lib/X11R5 /usr/lib/X11R4 /usr/lib/X11 \
+ /usr/dt/lib /usr/openwin/lib \
+ /usr/dt/*/lib /opt/*/lib /usr/lib/Motif* \
+ "${prefix}"/*/lib /usr/*/lib /usr/local/*/lib \
+ "${prefix}"/lib/* /usr/lib/* /usr/local/lib/*; do
+if test -d "$dir" && test "`ls $dir/libXaw.* 2> /dev/null`" != ""; then
+ice_cv_athena_libraries="$dir"
+break
fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+done
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+#
+LIBS="$ice_athena_save_LIBS"
+CFLAGS="$ice_athena_save_CFLAGS"
+CPPFLAGS="$ice_athena_save_CPPFLAGS"
+LDFLAGS="$ice_athena_save_LDFLAGS"
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+fi
-# Check whether --enable-shared was given.
+#
+athena_libraries="$ice_cv_athena_libraries"
+fi
+# Add Athena definitions to X flags
+#
+if test "$athena_includes" != "" && test "$athena_includes" != "$x_includes" && test "$athena_includes" != "no"
+then
+X_CFLAGS="-I$athena_includes $X_CFLAGS"
+fi
+if test "$athena_libraries" != "" && test "$athena_libraries" != "$x_libraries" && test "$athena_libraries" != "no"
+then
+case "$X_LIBS" in
+ *-R\ *) X_LIBS="-L$athena_libraries -R $athena_libraries $X_LIBS";;
+ *-R*) X_LIBS="-L$athena_libraries -R$athena_libraries $X_LIBS";;
+ *) X_LIBS="-L$athena_libraries $X_LIBS";;
+esac
+fi
+#
+#
+athena_libraries_result="$athena_libraries"
+athena_includes_result="$athena_includes"
+test "$athena_libraries_result" = "" &&
+ athena_libraries_result="in default path"
+test "$athena_includes_result" = "" &&
+ athena_includes_result="in default path"
+test "$athena_libraries_result" = "no" &&
+ athena_libraries_result="(none)"
+test "$athena_includes_result" = "no" &&
+ athena_includes_result="(none)"
+echo "$as_me:$LINENO: result: libraries $athena_libraries_result, headers $athena_includes_result" >&5
+echo "${ECHO_T}libraries $athena_libraries_result, headers $athena_includes_result" >&6
+
+# Check whether --enable-shared or --disable-shared was given.
if test "${enable_shared+set}" = set; then
- enableval=$enable_shared; p=${PACKAGE-default}
+ enableval="$enable_shared"
+ p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
@@ -4701,12 +4914,12 @@ if test "${enable_shared+set}" = set; then
esac
else
enable_shared=yes
-fi
+fi;
-
-# Check whether --enable-static was given.
+# Check whether --enable-static or --disable-static was given.
if test "${enable_static+set}" = set; then
- enableval=$enable_static; p=${PACKAGE-default}
+ enableval="$enable_static"
+ p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
@@ -4725,12 +4938,12 @@ if test "${enable_static+set}" = set; then
esac
else
enable_static=yes
-fi
+fi;
-
-# Check whether --enable-fast-install was given.
+# Check whether --enable-fast-install or --disable-fast-install was given.
if test "${enable_fast_install+set}" = set; then
- enableval=$enable_fast_install; p=${PACKAGE-default}
+ enableval="$enable_fast_install"
+ p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
@@ -4749,13 +4962,66 @@ if test "${enable_fast_install+set}" = set; then
esac
else
enable_fast_install=yes
+fi;
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
if test "${lt_cv_path_SED+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
# Loop through the user's path and test for sed and gsed.
# Then use that list of sed's as ones to test for truncation.
@@ -4766,19 +5032,18 @@ do
test -z "$as_dir" && as_dir=.
for lt_ac_prog in sed gsed; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
fi
done
done
done
-IFS=$as_save_IFS
lt_ac_max=0
lt_ac_count=0
# Add /usr/xpg4/bin/sed as it is typically found on Solaris
# along with /bin/sed that truncates output.
for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
+ test ! -f $lt_ac_sed && break
cat /dev/null > conftest.in
lt_ac_count=0
echo $ECHO_N "0123456789$ECHO_C" >conftest.in
@@ -4807,23 +5072,37 @@ done
fi
SED=$lt_cv_path_SED
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
-{ $as_echo "$as_me:$LINENO: result: $SED" >&5
-$as_echo "$SED" >&6; }
-# Check whether --with-gnu-ld was given.
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
- withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+ withval="$with_gnu_ld"
+ test "$withval" = no || with_gnu_ld=yes
else
with_gnu_ld=no
-fi
-
+fi;
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -4852,14 +5131,14 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
;;
esac
elif test "$with_gnu_ld" = yes; then
- { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
else
- { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
fi
if test "${lt_cv_path_LD+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -z "$LD"; then
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
@@ -4869,7 +5148,7 @@ else
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
+ # but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
@@ -4889,21 +5168,21 @@ fi
LD="$lt_cv_path_LD"
if test -n "$LD"; then
- { $as_echo "$as_me:$LINENO: result: $LD" >&5
-$as_echo "$LD" >&6; }
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
{ (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
if test "${lt_cv_prog_gnu_ld+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
@@ -4913,20 +5192,20 @@ case `$LD -v 2>&1 </dev/null` in
;;
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
with_gnu_ld=$lt_cv_prog_gnu_ld
-{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
if test "${lt_cv_ld_reload_flag+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_ld_reload_flag='-r'
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
reload_flag=$lt_cv_ld_reload_flag
case $reload_flag in
"" | " "*) ;;
@@ -4936,81 +5215,74 @@ reload_cmds='$LD$reload_flag -o $output$reload_objs'
case $host_os in
darwin*)
if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
else
reload_cmds='$LD$reload_flag -o $output$reload_objs'
fi
;;
esac
-{ $as_echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-$as_echo_n "checking for BSD-compatible nm... " >&6; }
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
if test "${lt_cv_path_NM+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$NM"; then
# Let the user override the test.
lt_cv_path_NM="$NM"
else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
break
;;
*)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
;;
esac
- fi
- done
- IFS="$lt_save_ifs"
+ esac
+ fi
done
+ IFS="$lt_save_ifs"
test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
fi
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
NM="$lt_cv_path_NM"
-{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
else
- { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
fi
-{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
if test "${lt_cv_deplibs_check_method+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
@@ -5027,7 +5299,7 @@ lt_cv_deplibs_check_method='unknown'
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
-aix[4-9]*)
+aix4* | aix5*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -5049,28 +5321,22 @@ cygwin*)
mingw* | pw32*)
# Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
+ # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
;;
darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly*)
+freebsd* | kfreebsd*-gnu)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
@@ -5086,7 +5352,7 @@ gnu*)
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
+ case "$host_cpu" in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
@@ -5102,11 +5368,6 @@ hpux10.20* | hpux11*)
esac
;;
-interix[3-9]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
- ;;
-
irix5* | irix6* | nonstopux*)
case $LD in
*-32|*"-32 ") libmagic=32-bit;;
@@ -5118,7 +5379,7 @@ irix5* | irix6* | nonstopux*)
;;
# This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -5152,7 +5413,7 @@ osf3* | osf4* | osf5*)
lt_cv_deplibs_check_method=pass_all
;;
-rdos*)
+sco3.2v5*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -5160,7 +5421,7 @@ solaris*)
lt_cv_deplibs_check_method=pass_all
;;
-sysv4 | sysv4.3*)
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
case $host_vendor in
motorola)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
@@ -5181,20 +5442,17 @@ sysv4 | sysv4.3*)
siemens)
lt_cv_deplibs_check_method=pass_all
;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
esac
;;
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
lt_cv_deplibs_check_method=pass_all
;;
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -5205,17 +5463,14 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
# Allow CC to be a program name with arguments.
compiler=$CC
-# Check whether --enable-libtool-lock was given.
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
if test "${enable_libtool_lock+set}" = set; then
- enableval=$enable_libtool_lock;
-fi
+ enableval="$enable_libtool_lock"
+fi;
test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
# Some flags need to be propagated to the compiler or linker for good
@@ -5227,7 +5482,7 @@ ia64-*-hpux*)
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
case `/usr/bin/file conftest.$ac_objext` in
*ELF-32*)
@@ -5242,11 +5497,11 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 5245 "configure"' > conftest.$ac_ext
+ echo '#line 5500 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
if test "$lt_cv_prog_gnu_ld" = yes; then
case `/usr/bin/file conftest.$ac_objext` in
@@ -5277,21 +5532,17 @@ ia64-*-hpux*)
rm -rf conftest*
;;
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|sparc*-*linux*)
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- case `/usr/bin/file conftest.o` in
+ case "`/usr/bin/file conftest.o`" in
*32-bit*)
case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
x86_64-*linux*)
LD="${LD-ld} -m elf_i386"
;;
@@ -5308,9 +5559,6 @@ s390*-*linux*|sparc*-*linux*)
;;
*64-bit*)
case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
@@ -5334,10 +5582,10 @@ s390*-*linux*|sparc*-*linux*)
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
- { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+ echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
if test "${lt_cv_cc_needs_belf+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -5361,33 +5609,35 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
lt_cv_cc_needs_belf=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- lt_cv_cc_needs_belf=no
+lt_cv_cc_needs_belf=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -5396,61 +5646,273 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
if test x"$lt_cv_cc_needs_belf" != x"yes"; then
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
CFLAGS="$SAVE_CFLAGS"
fi
;;
-sparc*-*solaris*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
esac
need_locks="$enable_libtool_lock"
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
for ac_header in dlfcn.h
do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
else
# Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -5461,38 +5923,41 @@ $ac_includes_default
#include <$ac_header>
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_header_compiler=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_header_compiler=no
+ac_header_compiler=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -5501,106 +5966,101 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <$ac_header>
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
ac_header_preproc=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_header_preproc=no
fi
-
rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
yes:no: )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
ac_header_preproc=yes
;;
no:yes:* )
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ------------------------------------------------------ ##
-## Report this to silgraphite-devel@lists.sourceforge.net ##
-## ------------------------------------------------------ ##
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
;;
esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
eval "$as_ac_Header=\$ac_header_preproc"
fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
fi
-if test `eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'` = yes; then
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
fi
done
-ac_ext=cpp
+ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
@@ -5611,40 +6071,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- { $as_echo "$as_me:$LINENO: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
test -n "$CXX" && break
done
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_CXX"; then
ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
@@ -5655,91 +6113,57 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
test -n "$ac_ct_CXX" && break
done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
+ CXX=$ac_ct_CXX
fi
- fi
-fi
+
# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -5760,54 +6184,50 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_compiler_gnu=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_compiler_gnu=no
+ac_compiler_gnu=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CXXFLAGS=${CXXFLAGS+set}
ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
if test "${ac_cv_prog_cxx_g+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -5823,265 +6243,180 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_prog_cxx_g=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CXXFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-
+$ac_declaration
+#include <stdlib.h>
int
main ()
{
-
+exit (42);
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
:
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-
+$ac_declaration
int
main ()
{
-
+exit (42);
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cxx_g=yes
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-ac_ext=cpp
+ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-depcc="$CXX" am_compiler_list=
-
-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_CXX_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_CXX_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
- am__fastdepCXX_TRUE=
- am__fastdepCXX_FALSE='#'
-else
- am__fastdepCXX_TRUE='#'
- am__fastdepCXX_FALSE=
-fi
-
-
if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
(test "X$CXX" != "Xg++"))) ; then
- ac_ext=cpp
+ ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
if test -z "$CXXCPP"; then
if test "${ac_cv_prog_CXXCPP+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
# Double quotes because CXXCPP needs to be expanded
for CXXCPP in "$CXX -E" "/lib/cpp"
@@ -6108,35 +6443,35 @@ cat >>conftest.$ac_ext <<_ACEOF
#endif
Syntax error
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
-
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether nonexistent headers
+ # OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -6146,34 +6481,34 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
# Broken: success on invalid input.
continue
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Passes both tests.
ac_preproc_ok=:
break
fi
-
rm -f conftest.err conftest.$ac_ext
done
@@ -6191,8 +6526,8 @@ fi
else
ac_cv_prog_CXXCPP=$CXXCPP
fi
-{ $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
ac_preproc_ok=false
for ac_cxx_preproc_warn_flag in '' yes
do
@@ -6215,35 +6550,35 @@ cat >>conftest.$ac_ext <<_ACEOF
#endif
Syntax error
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
-
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether nonexistent headers
+ # OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -6253,34 +6588,34 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ac_nonexistent.h>
_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- }; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
# Broken: success on invalid input.
continue
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
# Passes both tests.
ac_preproc_ok=:
break
fi
-
rm -f conftest.err conftest.$ac_ext
done
@@ -6289,14 +6624,14 @@ rm -f conftest.err conftest.$ac_ext
if $ac_preproc_ok; then
:
else
- { { $as_echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
-ac_ext=cpp
+ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -6310,14 +6645,14 @@ ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
if test -n "$ac_tool_prefix"; then
- for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$F77"; then
ac_cv_prog_F77="$F77" # Let the user override the test.
@@ -6328,40 +6663,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
F77=$ac_cv_prog_F77
if test -n "$F77"; then
- { $as_echo "$as_me:$LINENO: result: $F77" >&5
-$as_echo "$F77" >&6; }
+ echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
test -n "$F77" && break
done
fi
if test -z "$F77"; then
ac_ct_F77=$F77
- for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_F77"; then
ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
@@ -6372,84 +6705,50 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_F77="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
ac_ct_F77=$ac_cv_prog_ac_ct_F77
if test -n "$ac_ct_F77"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
-$as_echo "$ac_ct_F77" >&6; }
+ echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
test -n "$ac_ct_F77" && break
done
- if test "x$ac_ct_F77" = x; then
- F77=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- F77=$ac_ct_F77
- fi
+ F77=$ac_ct_F77
fi
# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
+echo "$as_me:6735:" \
+ "checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
rm -f a.out
@@ -6457,10 +6756,10 @@ rm -f a.out
# input file. (Note that this only needs to work for GNU compilers.)
ac_save_ext=$ac_ext
ac_ext=F
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
-$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; }
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
if test "${ac_cv_f77_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
program main
@@ -6471,45 +6770,48 @@ else
end
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_f77_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_f77_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_compiler_gnu=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_compiler_gnu=no
+ac_compiler_gnu=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_f77_compiler_gnu=$ac_compiler_gnu
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
-$as_echo "$ac_cv_f77_compiler_gnu" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
ac_ext=$ac_save_ext
ac_test_FFLAGS=${FFLAGS+set}
ac_save_FFLAGS=$FFLAGS
FFLAGS=
-{ $as_echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
-$as_echo_n "checking whether $F77 accepts -g... " >&6; }
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
if test "${ac_cv_prog_f77_g+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
FFLAGS=-g
cat >conftest.$ac_ext <<_ACEOF
@@ -6518,36 +6820,39 @@ cat >conftest.$ac_ext <<_ACEOF
end
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_f77_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_f77_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_prog_f77_g=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_prog_f77_g=no
+ac_cv_prog_f77_g=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
-$as_echo "$ac_cv_prog_f77_g" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
if test "$ac_test_FFLAGS" = set; then
FFLAGS=$ac_save_FFLAGS
elif test $ac_cv_prog_f77_g = yes; then
@@ -6564,11 +6869,7 @@ else
fi
fi
-if test $ac_compiler_gnu = yes; then
- G77=yes
-else
- G77=
-fi
+G77=`test $ac_compiler_gnu = yes && echo yes`
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -6578,11 +6879,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
# find the maximum length of command line arguments
-{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
if test "${lt_cv_sys_max_cmd_len+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
i=0
teststring="ABCD"
@@ -6620,93 +6922,59 @@ else
lt_cv_sys_max_cmd_len=8192;
;;
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ netbsd* | freebsd* | openbsd* | darwin* )
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
elif test -x /usr/sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ lt_cv_sys_max_cmd_len=65536 # usable default for *BSD
fi
# And add a safety zone
lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
;;
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
= "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
;;
esac
fi
if test -n $lt_cv_sys_max_cmd_len ; then
- { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+ echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
else
- { $as_echo "$as_me:$LINENO: result: none" >&5
-$as_echo "none" >&6; }
+ echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
fi
-
# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
# These are sane defaults that work on at least a few old systems.
@@ -6718,6 +6986,9 @@ symcode='[BCDEGRST]'
# Regexp to match symbols that can be accessed directly from C.
sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
# Transform an extracted symbol line into a proper C declaration
lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
@@ -6739,7 +7010,7 @@ hpux*) # Its linker distinguishes data from code symbols
lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
;;
-linux* | k*bsd*-gnu)
+linux*)
if test "$host_cpu" = ia64; then
symcode='[ABCDGIRSTW]'
lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
@@ -6752,18 +7023,9 @@ irix* | nonstopux*)
osf*)
symcode='[BCDEGQRST]'
;;
-solaris*)
+solaris* | sysv5*)
symcode='[BDRT]'
;;
-sco3.2v5*)
- symcode='[DT]'
- ;;
-sysv4.2uw2*)
- symcode='[DT]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[ABDT]'
- ;;
sysv4)
symcode='[DFNSTU]'
;;
@@ -6786,11 +7048,8 @@ esac
# Try without a prefix undercore, then with it.
for ac_symprfx in "" "_"; do
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
# Write the raw and C identifiers.
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
# Check to see that the pipe works correctly.
pipe_works=no
@@ -6811,14 +7070,14 @@ EOF
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
# Now try to grab the symbols.
nlist=conftest.nm
if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
(eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && test -s "$nlist"; then
# Try sorting and uniquifying the output.
if sort "$nlist" | uniq > "$nlist"T; then
@@ -6873,7 +7132,7 @@ EOF
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && test -s conftest${ac_exeext}; then
pipe_works=yes
fi
@@ -6892,7 +7151,7 @@ EOF
echo "$progname: failed program was:" >&5
cat conftest.$ac_ext >&5
fi
- rm -rf conftest* conftst*
+ rm -f conftest* conftst*
# Do not use the global_symbol_pipe unless it works.
if test "$pipe_works" = yes; then
@@ -6908,17 +7167,17 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then
lt_cv_sys_global_symbol_to_cdecl=
fi
if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- { $as_echo "$as_me:$LINENO: result: failed" >&5
-$as_echo "failed" >&6; }
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
else
- { $as_echo "$as_me:$LINENO: result: ok" >&5
-$as_echo "ok" >&6; }
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
fi
-{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
if test "${lt_cv_objdir+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
rm -f .libs 2>/dev/null
mkdir .libs 2>/dev/null
@@ -6930,8 +7189,8 @@ else
fi
rmdir .libs 2>/dev/null
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
objdir=$lt_cv_objdir
@@ -6952,7 +7211,7 @@ esac
# Sed substitution that helps us do robust quoting. It backslashifies
# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed='sed -e s/^X//'
sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
# Same as above, but do not quote variable references.
@@ -6972,7 +7231,7 @@ rm="rm -f"
default_ofile=libtool
can_build_shared=yes
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# All known linkers require a `.a' archive for static linking (except M$VC,
# which needs '.lib').
libext=a
ltmain="$ac_aux_dir/ltmain.sh"
@@ -6982,10 +7241,10 @@ with_gnu_ld="$lt_cv_prog_gnu_ld"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
@@ -6996,36 +7255,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
AR=$ac_cv_prog_AR
if test -n "$AR"; then
- { $as_echo "$as_me:$LINENO: result: $AR" >&5
-$as_echo "$AR" >&6; }
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
fi
if test -z "$ac_cv_prog_AR"; then
ac_ct_AR=$AR
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_AR"; then
ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
@@ -7036,41 +7293,27 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
fi
fi
ac_ct_AR=$ac_cv_prog_ac_ct_AR
if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
+ AR=$ac_ct_AR
else
AR="$ac_cv_prog_AR"
fi
@@ -7078,10 +7321,10 @@ fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -7092,36 +7335,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
fi
if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
@@ -7132,41 +7373,27 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
+ RANLIB=$ac_ct_RANLIB
else
RANLIB="$ac_cv_prog_RANLIB"
fi
@@ -7174,10 +7401,10 @@ fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_STRIP+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
@@ -7188,36 +7415,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
fi
if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
@@ -7228,41 +7453,27 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
-IFS=$as_save_IFS
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- if test "x$ac_ct_STRIP" = x; then
- STRIP=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
+ STRIP=$ac_ct_STRIP
else
STRIP="$ac_cv_prog_STRIP"
fi
@@ -7277,7 +7488,6 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
test -z "$AS" && AS=as
test -z "$CC" && CC=cc
test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
test -z "$DLLTOOL" && DLLTOOL=dlltool
test -z "$LD" && LD=ld
test -z "$LN_S" && LN_S="ln -s"
@@ -7290,41 +7500,32 @@ test -z "$STRIP" && STRIP=:
test -z "$ac_objext" && ac_objext=o
# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
old_postinstall_cmds='chmod 644 $oldlib'
old_postuninstall_cmds=
if test -n "$RANLIB"; then
case $host_os in
openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
;;
*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
;;
esac
old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
fi
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
# Only perform the check for file, if the check method requires it
case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+ echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $MAGIC_CMD in
[\\/*] | ?:[\\/]*)
@@ -7342,7 +7543,7 @@ else
if test -n "$file_magic_test_file"; then
case $deplibs_check_method in
"file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
$EGREP "$file_magic_regex" > /dev/null; then
@@ -7374,19 +7575,19 @@ fi
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
- { $as_echo "$as_me:$LINENO: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
+ echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $MAGIC_CMD in
[\\/*] | ?:[\\/]*)
@@ -7404,7 +7605,7 @@ else
if test -n "$file_magic_test_file"; then
case $deplibs_check_method in
"file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
$EGREP "$file_magic_regex" > /dev/null; then
@@ -7436,11 +7637,11 @@ fi
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
else
@@ -7452,337 +7653,24 @@ fi
;;
esac
-
- case $host_os in
- rhapsody* | darwin*)
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DSYMUTIL"; then
- ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
- { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
- ac_ct_DSYMUTIL=$DSYMUTIL
- # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DSYMUTIL"; then
- ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DSYMUTIL" = x; then
- DSYMUTIL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- DSYMUTIL=$ac_ct_DSYMUTIL
- fi
-else
- DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NMEDIT"; then
- ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
- { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
- ac_ct_NMEDIT=$NMEDIT
- # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_NMEDIT"; then
- ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_NMEDIT="nmedit"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_NMEDIT" = x; then
- NMEDIT=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- NMEDIT=$ac_ct_NMEDIT
- fi
-else
- NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
-
- { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_apple_cc_single_mod=no
- if test -z "${LT_MULTI_MODULE}"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- echo "int foo(void){return 1;}" > conftest.c
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib ${wl}-single_module conftest.c
- if test -f libconftest.dylib; then
- lt_cv_apple_cc_single_mod=yes
- rm -rf libconftest.dylib*
- fi
- rm conftest.c
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
- { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- lt_cv_ld_exported_symbols_list=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- lt_cv_ld_exported_symbols_list=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
- case $host_os in
- rhapsody* | darwin1.[0123])
- _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- darwin*)
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- 10.[012]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test "$lt_cv_apple_cc_single_mod" = "yes"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
- _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
- else
- _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
- fi
- if test "$DSYMUTIL" != ":"; then
- _lt_dsymutil="~$DSYMUTIL \$lib || :"
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-
-
enable_dlopen=no
enable_win32_dll=no
-# Check whether --enable-libtool-lock was given.
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
if test "${enable_libtool_lock+set}" = set; then
- enableval=$enable_libtool_lock;
-fi
+ enableval="$enable_libtool_lock"
+fi;
test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-# Check whether --with-pic was given.
+# Check whether --with-pic or --without-pic was given.
if test "${with_pic+set}" = set; then
- withval=$with_pic; pic_mode="$withval"
+ withval="$with_pic"
+ pic_mode="$withval"
else
pic_mode=default
-fi
-
+fi;
test -z "$pic_mode" && pic_mode=default
# Use C for the default configuration in the libtool script
@@ -7803,36 +7691,83 @@ objext=o
objext=$objext
# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
+lt_simple_compile_test_code="int some_variable = 0;\n"
# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
+lt_simple_link_test_code='int main(){return(0);}\n'
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
# Allow CC to be a program name with arguments.
compiler=$CC
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
+#
+# Check for any special shared library compilation flags.
+#
+lt_prog_cc_shlib=
+if test "$GCC" = no; then
+ case $host_os in
+ sco3.2v5*)
+ lt_prog_cc_shlib='-belf'
+ ;;
+ esac
+fi
+if test -n "$lt_prog_cc_shlib"; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
+ if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then :
+ else
+ { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+ lt_cv_prog_cc_can_build_shared=no
+ fi
+fi
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
+#
+# Check to make sure the static flag actually works.
+#
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
lt_prog_compiler_no_builtin_flag=
@@ -7840,14 +7775,14 @@ if test "$GCC" = yes; then
lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_prog_compiler_rtti_exceptions=no
ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-fno-rtti -fno-exceptions"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
@@ -7855,28 +7790,26 @@ else
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7861: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7796: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7865: \$? = $ac_status" >&5
+ echo "$as_me:7800: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
lt_cv_prog_compiler_rtti_exceptions=yes
fi
fi
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
@@ -7890,8 +7823,8 @@ lt_prog_compiler_wl=
lt_prog_compiler_pic=
lt_prog_compiler_static=
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
if test "$GCC" = yes; then
lt_prog_compiler_wl='-Wl,'
@@ -7913,15 +7846,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
# PIC is the default for these OSes.
;;
- mingw* | cygwin* | pw32* | os2*)
+ mingw* | pw32* | os2*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
lt_prog_compiler_pic='-DDLL_EXPORT'
;;
@@ -7931,11 +7862,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic='-fno-common'
;;
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
@@ -7952,7 +7878,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case $host_cpu in
+ case "$host_cpu" in
hppa*64*|ia64*)
# +Z the default
;;
@@ -7981,7 +7907,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
lt_prog_compiler_pic='-qnocommon'
lt_prog_compiler_wl='-Wl,'
@@ -7989,7 +7915,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
;;
- mingw* | cygwin* | pw32* | os2*)
+ mingw* | pw32* | os2*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
lt_prog_compiler_pic='-DDLL_EXPORT'
@@ -7999,7 +7925,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_wl='-Wl,'
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case $host_cpu in
+ case "$host_cpu" in
hppa*64*|ia64*)
# +Z the default
;;
@@ -8022,41 +7948,18 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static='-Bstatic'
;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
+ linux*)
+ case $CC in
icc* | ecc*)
lt_prog_compiler_wl='-Wl,'
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-static'
;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
ccc*)
lt_prog_compiler_wl='-Wl,'
# All Alpha code is PIC.
lt_prog_compiler_static='-non_shared'
;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl=''
- ;;
- esac
- ;;
esac
;;
@@ -8066,19 +7969,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static='-non_shared'
;;
- rdos*)
- lt_prog_compiler_static='-non_shared'
+ sco3.2v5*)
+ lt_prog_compiler_pic='-Kpic'
+ lt_prog_compiler_static='-dn'
;;
solaris*)
+ lt_prog_compiler_wl='-Wl,'
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
- esac
;;
sunos4*)
@@ -8087,7 +7986,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static='-Bstatic'
;;
- sysv4 | sysv4.2uw2* | sysv4.3*)
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
lt_prog_compiler_wl='-Wl,'
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-Bstatic'
@@ -8100,17 +7999,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
fi
;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_can_build_shared=no
- ;;
-
uts4*)
lt_prog_compiler_pic='-pic'
lt_prog_compiler_static='-Bstatic'
@@ -8122,22 +8010,22 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
#
# Check to make sure the PIC flag actually works.
#
if test -n "$lt_prog_compiler_pic"; then
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
- $as_echo_n "(cached) " >&6
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- lt_cv_prog_compiler_pic_works=no
+ lt_prog_compiler_pic_works=no
ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
@@ -8145,30 +8033,28 @@ else
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8151: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8039: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:8155: \$? = $ac_status" >&5
+ echo "$as_me:8043: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works=yes
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works=yes
fi
fi
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+if test x"$lt_prog_compiler_pic_works" = xyes; then
case $lt_prog_compiler_pic in
"" | " "*) ;;
*) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
@@ -8179,7 +8065,7 @@ else
fi
fi
-case $host_os in
+case "$host_os" in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic=
@@ -8189,59 +8075,17 @@ case $host_os in
;;
esac
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works=yes
- fi
- else
- lt_cv_prog_compiler_static_works=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
if test "${lt_cv_prog_compiler_c_o+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_prog_compiler_c_o=no
$rm -r conftest 2>/dev/null
mkdir conftest
cd conftest
mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-o out/conftest2.$ac_objext"
# Insert the option either (1) after the last *FLAGS variable, or
@@ -8249,25 +8093,23 @@ else
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8255: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8099: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8259: \$? = $ac_status" >&5
+ echo "$as_me:8103: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ if test ! -s out/conftest.err; then
lt_cv_prog_compiler_c_o=yes
fi
fi
- chmod u+w . 2>&5
+ chmod u+w .
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -8278,34 +8120,34 @@ else
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
hard_links="nottested"
if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
# do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
hard_links=yes
$rm conftest*
ln conftest.a conftest.b 2>/dev/null && hard_links=no
touch conftest.a
ln conftest.a conftest.b 2>&5 || hard_links=no
ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
need_locks=warn
fi
else
need_locks=no
fi
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
runpath_var=
allow_undefined_flag=
@@ -8336,24 +8178,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
# it will be wrapped by ` (' and `)$', so one must not match beginning or
# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
# as well as any symbol that contains `d'.
- exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
# platforms (ab)use it in PIC code, but their linkers get confused if
# the symbol is explicitly referenced. Since portable code cannot
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
case $host_os in
cygwin* | mingw* | pw32*)
@@ -8364,10 +8195,6 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
with_gnu_ld=no
fi
;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
openbsd*)
with_gnu_ld=no
;;
@@ -8378,30 +8205,9 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
# See if GNU ld supports shared libraries.
case $host_os in
- aix[3-9]*)
+ aix3* | aix4* | aix5*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
@@ -8449,10 +8255,10 @@ EOF
allow_undefined_flag=unsupported
always_export_symbols=no
enable_shared_with_static_runtimes=yes
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
# If the export-symbols file already is a .def file (1st line
# is EXPORTS), use it as is; otherwise, prepend...
archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
@@ -8461,62 +8267,7 @@ EOF
echo EXPORTS > $output_objdir/$soname.def;
cat $export_symbols >> $output_objdir/$soname.def;
fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- interix[3-9]*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
else
ld_shlibs=no
fi
@@ -8532,7 +8283,7 @@ EOF
fi
;;
- solaris*)
+ solaris* | sysv5*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
cat <<EOF 1>&2
@@ -8553,33 +8304,6 @@ EOF
fi
;;
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
-
sunos4*)
archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
@@ -8587,6 +8311,31 @@ _LT_EOF
hardcode_shlibpath_var=no
;;
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_cmds="$tmp_archive_cmds"
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ else
+ archive_expsym_cmds="$tmp_archive_cmds"
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
@@ -8597,11 +8346,16 @@ _LT_EOF
;;
esac
- if test "$ld_shlibs" = no; then
- runpath_var=
- hardcode_libdir_flag_spec=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
+ if test "$ld_shlibs" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
@@ -8613,14 +8367,14 @@ _LT_EOF
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
- aix[4-9]*)
+ aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
@@ -8640,14 +8394,13 @@ _LT_EOF
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
- ;;
esac
exp_sym_flag='-bexport'
@@ -8666,7 +8419,7 @@ _LT_EOF
link_all_deplibs=yes
if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
+ case $host_os in aix4.012|aix4.012.*)
# We only want to do this on AIX 4.2 and lower, the check
# below for broken collect2 doesn't work under 4.3+
collect2name=`${CC} -print-prog-name=collect2`
@@ -8674,7 +8427,7 @@ _LT_EOF
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
- :
+ hardcode_direct=yes
else
# We have old collect2
hardcode_direct=unsupported
@@ -8685,12 +8438,8 @@ _LT_EOF
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
- ;;
esac
shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -8698,11 +8447,11 @@ _LT_EOF
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
- if test "$aix_use_runtimelinking" = yes; then
+ if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
- fi
+ fi
fi
fi
@@ -8730,55 +8479,49 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
else
# Determine the default libpath from the value encoded in an empty executable.
cat >conftest.$ac_ext <<_ACEOF
@@ -8797,45 +8540,39 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -8844,11 +8581,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -berok will link without error, but may produce a broken library.
no_undefined_flag=' ${wl}-bernotok'
allow_undefined_flag=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols=yes
# Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
+ whole_archive_flag_spec=' '
archive_cmds_need_lc=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
@@ -8881,13 +8620,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# The linker will automatically build a .lib file if we build a DLL.
old_archive_From_new_cmds='true'
# FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
fix_srcfile_path='`cygpath -w "$srcfile"`'
enable_shared_with_static_runtimes=yes
;;
darwin* | rhapsody*)
- case $host_os in
+ case "$host_os" in
rhapsody* | darwin1.[012])
allow_undefined_flag='${wl}-undefined ${wl}suppress'
;;
@@ -8914,18 +8653,19 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
link_all_deplibs=yes
if test "$GCC" = yes ; then
output_verbose_link_cmd='echo'
- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
output_verbose_link_cmd='echo'
- archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
*)
@@ -8965,7 +8705,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | kfreebsd*-gnu)
archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
@@ -8988,62 +8728,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec='${wl}-E'
;;
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
-
- hardcode_direct=yes
- export_dynamic_flag_spec='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- fi
- ;;
-
- hpux11*)
+ hpux10* | hpux11*)
if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
- ia64*)
- archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
*)
archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
;;
esac
else
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
;;
*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
;;
esac
fi
if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
-
- case $host_cpu in
- hppa*64*|ia64*)
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
hardcode_direct=no
hardcode_shlibpath_var=no
;;
+ ia64*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
hardcode_direct=yes
export_dynamic_flag_spec='${wl}-E'
@@ -9087,28 +8812,24 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
- fi
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
else
- ld_shlibs=no
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
fi
;;
@@ -9141,7 +8862,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
allow_undefined_flag=' -expect_unresolved \*'
archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
# Both c and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
@@ -9149,15 +8870,21 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_separator=:
;;
+ sco3.2v5*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
solaris*)
no_undefined_flag=' -z text'
if test "$GCC" = yes; then
- wlarc='${wl}'
archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
$CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
else
- wlarc=''
archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
@@ -9166,17 +8893,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_shlibpath_var=no
case $host_os in
solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
- fi
- ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
esac
link_all_deplibs=yes
;;
@@ -9233,45 +8951,36 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag='${wl}-z,text'
- archive_cmds_need_lc=no
+ sysv4.2uw2*)
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=no
hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag='${wl}-z ${wl}text'
if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
else
- archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag='${wl}-z,text'
- allow_undefined_flag='${wl}-z,nodefs'
- archive_cmds_need_lc=no
+ sysv5*)
+ no_undefined_flag=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec=
hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- export_dynamic_flag_spec='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
;;
uts4*)
@@ -9286,10 +8995,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
test "$ld_shlibs" = no && can_build_shared=no
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
#
# Do we need to explicitly link libc?
#
@@ -9307,22 +9021,21 @@ x|xyes)
# Test whether the compiler implicitly links with -lc since on some
# systems, -lgcc has to come before -lc. If gcc already passes -lc
# to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
$rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } 2>conftest.err; then
soname=conftest
lib=conftest
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl
- pic_flag=$lt_prog_compiler_pic
compiler_flags=-v
linker_flags=-v
verstring=
@@ -9333,7 +9046,7 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
(eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
then
archive_cmds_need_lc=no
@@ -9345,16 +9058,16 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
cat conftest.err 1>&5
fi
$rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
;;
esac
fi
;;
esac
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
library_names_spec=
libname_spec='lib$name'
soname_spec=
@@ -9368,55 +9081,17 @@ shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
if test "$GCC" = yes; then
- case $host_os in
- darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
- *) lt_awk_arg="/^libraries:/" ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
# if the path contains ";" then we assume it to be the separator
# otherwise default to the standard path separator (i.e. ":") - it is
# assumed that no part of a normal pathname contains ";" but that should
# okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
else
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
fi
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary.
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path/$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
- else
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
- lt_foo="";
- lt_count=0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo="/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[lt_foo]++; }
- if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
- sys_lib_search_path_spec=`echo $lt_search_path_spec`
else
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi
@@ -9437,7 +9112,7 @@ aix3*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
-aix[4-9]*)
+aix4* | aix5*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -9521,8 +9196,7 @@ cygwin* | mingw* | pw32*)
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
+ $install_prog $dir/$dlname \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -9552,7 +9226,7 @@ cygwin* | mingw* | pw32*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -9575,9 +9249,13 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
;;
@@ -9594,17 +9272,20 @@ freebsd1*)
dynamic_linker=no
;;
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
+kfreebsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -9622,19 +9303,14 @@ freebsd* | dragonfly*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.[01]* | freebsdelf3.[01]*)
+ freebsd3.01* | freebsdelf3.01*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ *) # from 3.2 on
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
esac
;;
@@ -9654,7 +9330,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case $host_cpu in
+ case "$host_cpu" in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -9694,18 +9370,6 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -9749,7 +9413,7 @@ linux*oldld* | linux*aout* | linux*coff*)
;;
# This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -9765,7 +9429,7 @@ linux* | k*bsd*-gnu)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -9778,6 +9442,18 @@ linux* | k*bsd*-gnu)
dynamic_linker='GNU/Linux ld.so'
;;
+knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -9815,13 +9491,8 @@ nto-qnx*)
openbsd*)
version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
+ need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
@@ -9859,8 +9530,11 @@ osf3* | osf4* | osf5*)
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
-rdos*)
- dynamic_linker=no
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
;;
solaris*)
@@ -9888,7 +9562,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.3*)
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
@@ -9921,29 +9595,6 @@ sysv4*MP*)
fi
;;
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -9955,32 +9606,12 @@ uts4*)
dynamic_linker=no
;;
esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
test "$dynamic_linker" = no && can_build_shared=no
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
hardcode_action=
if test -n "$hardcode_libdir_flag_spec" || \
test -n "$runpath_var" || \
@@ -10004,8 +9635,8 @@ else
# directories.
hardcode_action=unsupported
fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
if test "$hardcode_action" = relink; then
# Fast installation is not supported
@@ -10018,30 +9649,29 @@ fi
striplib=
old_striplib=
-{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
else
# FIXME - insert some real tests, host_os isn't really good enough
case $host_os in
darwin*)
if test -n "$STRIP" ; then
striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
;;
*)
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
;;
esac
fi
@@ -10073,10 +9703,10 @@ else
darwin*)
# if libdl is installed we need to link against it
- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
@@ -10087,54 +9717,56 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
+/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
char dlopen ();
int
main ()
{
-return dlopen ();
+dlopen ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_lib_dl_dlopen=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_lib_dl_dlopen=no
+ac_cv_lib_dl_dlopen=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
if test $ac_cv_lib_dl_dlopen = yes; then
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
else
@@ -10148,10 +9780,10 @@ fi
;;
*)
- { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
-$as_echo_n "checking for shl_load... " >&6; }
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
if test "${ac_cv_func_shl_load+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -10176,67 +9808,75 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef shl_load
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
+/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
+{
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
char shl_load ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined __stub_shl_load || defined __stub___shl_load
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
#endif
int
main ()
{
-return shl_load ();
+return f != shl_load;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_func_shl_load=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_func_shl_load=no
+ac_cv_func_shl_load=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-$as_echo "$ac_cv_func_shl_load" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
if test $ac_cv_func_shl_load = yes; then
lt_cv_dlopen="shl_load"
else
- { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
if test "${ac_cv_lib_dld_shl_load+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldld $LIBS"
@@ -10247,61 +9887,63 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
+/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
char shl_load ();
int
main ()
{
-return shl_load ();
+shl_load ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_lib_dld_shl_load=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_lib_dld_shl_load=no
+ac_cv_lib_dld_shl_load=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
if test $ac_cv_lib_dld_shl_load = yes; then
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
else
- { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
-$as_echo_n "checking for dlopen... " >&6; }
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
if test "${ac_cv_func_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -10326,67 +9968,75 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef dlopen
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
+/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
+{
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
char dlopen ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined __stub_dlopen || defined __stub___dlopen
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
#endif
int
main ()
{
-return dlopen ();
+return f != dlopen;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_func_dlopen=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_func_dlopen=no
+ac_cv_func_dlopen=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-$as_echo "$ac_cv_func_dlopen" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
if test $ac_cv_func_dlopen = yes; then
lt_cv_dlopen="dlopen"
else
- { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
if test "${ac_cv_lib_dl_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
@@ -10397,61 +10047,63 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
+/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
char dlopen ();
int
main ()
{
-return dlopen ();
+dlopen ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_lib_dl_dlopen=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_lib_dl_dlopen=no
+ac_cv_lib_dl_dlopen=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
if test $ac_cv_lib_dl_dlopen = yes; then
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
else
- { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
if test "${ac_cv_lib_svld_dlopen+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsvld $LIBS"
@@ -10462,61 +10114,63 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
+/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
char dlopen ();
int
main ()
{
-return dlopen ();
+dlopen ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_lib_svld_dlopen=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_lib_svld_dlopen=no
+ac_cv_lib_svld_dlopen=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
if test $ac_cv_lib_svld_dlopen = yes; then
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
else
- { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
if test "${ac_cv_lib_dld_dld_link+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldld $LIBS"
@@ -10527,56 +10181,58 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
+/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
char dld_link ();
int
main ()
{
-return dld_link ();
+dld_link ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_lib_dld_dld_link=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_lib_dld_dld_link=no
+ac_cv_lib_dld_dld_link=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
if test $ac_cv_lib_dld_dld_link = yes; then
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
fi
@@ -10609,15 +10265,15 @@ fi
test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
save_LDFLAGS="$LDFLAGS"
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
save_LIBS="$LIBS"
LIBS="$lt_cv_dlopen_libs $LIBS"
- { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
if test "${lt_cv_dlopen_self+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then :
lt_cv_dlopen_self=cross
@@ -10625,7 +10281,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10628 "configure"
+#line 10284 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10682,8 +10338,6 @@ int main ()
else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
/* dlclose (self); */
}
- else
- puts (dlerror ());
exit (status);
}
@@ -10691,14 +10345,14 @@ EOF
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
+ (./conftest; exit; ) 2>/dev/null
lt_status=$?
case x$lt_status in
x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
esac
else :
# compilation failed
@@ -10709,15 +10363,15 @@ rm -fr conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
if test "x$lt_cv_dlopen_self" = xyes; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
if test "${lt_cv_dlopen_self_static+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then :
lt_cv_dlopen_self_static=cross
@@ -10725,7 +10379,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10728 "configure"
+#line 10382 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10782,8 +10436,6 @@ int main ()
else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
/* dlclose (self); */
}
- else
- puts (dlerror ());
exit (status);
}
@@ -10791,14 +10443,14 @@ EOF
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
+ (./conftest; exit; ) 2>/dev/null
lt_status=$?
case x$lt_status in
x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
esac
else :
# compilation failed
@@ -10809,8 +10461,8 @@ rm -fr conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
fi
CPPFLAGS="$save_CPPFLAGS"
@@ -10831,19 +10483,19 @@ $as_echo "$lt_cv_dlopen_self_static" >&6; }
fi
-# Report which library types will actually be built
-{ $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
+# Report which librarie types wil actually be built
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
-{ $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
test "$can_build_shared" = "no" && enable_shared=no
# On AIX, shared libraries and static libraries use the same namespace, and
# are all built from PIC.
-case $host_os in
+case "$host_os" in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
@@ -10852,21 +10504,21 @@ aix3*)
fi
;;
-aix[4-9]*)
+aix4* | aix5*)
if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
test "$enable_shared" = yes && enable_static=no
fi
;;
esac
-{ $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
-{ $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes
-{ $as_echo "$as_me:$LINENO: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
# The else clause should only fire when bootstrapping the
# libtool distribution, otherwise you forgot to ship ltmain.sh
@@ -10881,7 +10533,7 @@ if test -f "$ltmain"; then
# Now quote all the things that may contain metacharacters while being
# careful not to overquote the AC_SUBSTed values. We take copies of the
# variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -10908,7 +10560,6 @@ if test -f "$ltmain"; then
predeps \
postdeps \
compiler_lib_search_path \
- compiler_lib_search_dirs \
archive_cmds \
archive_expsym_cmds \
postinstall_cmds \
@@ -10924,7 +10575,6 @@ if test -f "$ltmain"; then
module_cmds \
module_expsym_cmds \
lt_cv_prog_compiler_c_o \
- fix_srcfile_path \
exclude_expsyms \
include_expsyms; do
@@ -10959,8 +10609,8 @@ if test -f "$ltmain"; then
cfgfile="${ofile}T"
trap "$rm \"$cfgfile\"; exit 1" 1 2 15
$rm -f "$cfgfile"
- { $as_echo "$as_me:$LINENO: creating $ofile" >&5
-$as_echo "$as_me: creating $ofile" >&6;}
+ { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
cat <<__EOF__ >> "$cfgfile"
#! $SHELL
@@ -10969,7 +10619,7 @@ $as_echo "$as_me: creating $ofile" >&6;}
# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
#
# This file is part of GNU Libtool:
@@ -10987,7 +10637,7 @@ $as_echo "$as_me: creating $ofile" >&6;}
#
# 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# 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
@@ -10998,7 +10648,7 @@ $as_echo "$as_me: creating $ofile" >&6;}
SED=$lt_SED
# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e 1s/^X//"
+Xsed="$SED -e s/^X//"
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
@@ -11032,12 +10682,6 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -11049,9 +10693,6 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
# A language-specific compiler.
CC=$lt_compiler
@@ -11117,7 +10758,7 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
# Does compiler simultaneously support -c and -o options?
compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-# Must we lock files when doing compilation?
+# Must we lock files when doing compilation ?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -11205,10 +10846,6 @@ predeps=$lt_predeps
# shared library.
postdeps=$lt_postdeps
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
-
# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=$lt_compiler_lib_search_path
@@ -11297,7 +10934,7 @@ sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
+fix_srcfile_path="$fix_srcfile_path"
# Set to yes if exported symbols are required.
always_export_symbols=$always_export_symbols
@@ -11364,31 +11001,28 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
CC="$lt_save_CC"
-# Check whether --with-tags was given.
+# Check whether --with-tags or --without-tags was given.
if test "${with_tags+set}" = set; then
- withval=$with_tags; tagnames="$withval"
-fi
-
+ withval="$with_tags"
+ tagnames="$withval"
+fi;
if test -f "$ltmain" && test -n "$tagnames"; then
if test ! -f "${ofile}"; then
- { $as_echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
-$as_echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
fi
if test -z "$LTCC"; then
eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
if test -z "$LTCC"; then
- { $as_echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
-$as_echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
else
- { $as_echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
-$as_echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+ { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
fi
fi
- if test -z "$LTCFLAGS"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
- fi
# Extract list of available tagged configurations in $ofile.
# Note that this assumes the entire list is on one line.
@@ -11400,16 +11034,16 @@ $as_echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
# Check whether tagname contains only valid characters
case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
"") ;;
- *) { { $as_echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
-$as_echo "$as_me: error: invalid tag name: $tagname" >&2;}
+ *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
then
- { { $as_echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
-$as_echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+ { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
{ (exit 1); exit 1; }; }
fi
@@ -11422,7 +11056,7 @@ $as_echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
(test "X$CXX" != "Xg++"))) ; then
- ac_ext=cpp
+ ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -11441,7 +11075,6 @@ hardcode_libdir_flag_spec_CXX=
hardcode_libdir_flag_spec_ld_CXX=
hardcode_libdir_separator_CXX=
hardcode_minus_L_CXX=no
-hardcode_shlibpath_var_CXX=unsupported
hardcode_automatic_CXX=no
module_cmds_CXX=
module_expsym_cmds_CXX=
@@ -11457,47 +11090,29 @@ postdep_objects_CXX=
predeps_CXX=
postdeps_CXX=
compiler_lib_search_path_CXX=
-compiler_lib_search_dirs_CXX=
# Source file extension for C++ test sources.
-ac_ext=cpp
+ac_ext=cc
# Object file extension for compiled C++ test sources.
objext=o
objext_CXX=$objext
# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
+lt_simple_compile_test_code="int some_variable = 0;\n"
# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
# Allow CC to be a program name with arguments.
compiler=$CC
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
# Allow CC to be a program name with arguments.
lt_save_CC=$CC
lt_save_LD=$LD
@@ -11508,27 +11123,18 @@ lt_save_path_LD=$lt_cv_path_LD
if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
else
- $as_unset lt_cv_prog_gnu_ld
+ unset lt_cv_prog_gnu_ld
fi
if test -n "${lt_cv_path_LDCXX+set}"; then
lt_cv_path_LD=$lt_cv_path_LDCXX
else
- $as_unset lt_cv_path_LD
+ unset lt_cv_path_LD
fi
test -z "${LDCXX+set}" || LD=$LDCXX
CC=${CXX-"c++"}
compiler=$CC
compiler_CXX=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
# We don't want -fno-exception wen compiling C++ code, so set the
# no_builtin_flag separately
@@ -11542,18 +11148,18 @@ if test "$GXX" = yes; then
# Set up default GNU C++ configuration
-# Check whether --with-gnu-ld was given.
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
- withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+ withval="$with_gnu_ld"
+ test "$withval" = no || with_gnu_ld=yes
else
with_gnu_ld=no
-fi
-
+fi;
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -11582,14 +11188,14 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
;;
esac
elif test "$with_gnu_ld" = yes; then
- { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
else
- { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
fi
if test "${lt_cv_path_LD+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -z "$LD"; then
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
@@ -11599,7 +11205,7 @@ else
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
+ # but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
@@ -11619,21 +11225,21 @@ fi
LD="$lt_cv_path_LD"
if test -n "$LD"; then
- { $as_echo "$as_me:$LINENO: result: $LD" >&5
-$as_echo "$LD" >&6; }
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
{ (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
if test "${lt_cv_prog_gnu_ld+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
@@ -11643,8 +11249,8 @@ case `$LD -v 2>&1 </dev/null` in
;;
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
with_gnu_ld=$lt_cv_prog_gnu_ld
@@ -11694,15 +11300,15 @@ else
fi
# PORTME: fill in a description of your system's C++ link characteristics
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
ld_shlibs_CXX=yes
case $host_os in
aix3*)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- aix[4-9]*)
+ aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
@@ -11715,7 +11321,7 @@ case $host_os in
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
case $ld_flag in
*-brtl*)
@@ -11724,7 +11330,6 @@ case $host_os in
;;
esac
done
- ;;
esac
exp_sym_flag='-bexport'
@@ -11743,7 +11348,7 @@ case $host_os in
link_all_deplibs_CXX=yes
if test "$GXX" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
+ case $host_os in aix4.012|aix4.012.*)
# We only want to do this on AIX 4.2 and lower, the check
# below for broken collect2 doesn't work under 4.3+
collect2name=`${CC} -print-prog-name=collect2`
@@ -11751,7 +11356,7 @@ case $host_os in
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
- :
+ hardcode_direct_CXX=yes
else
# We have old collect2
hardcode_direct_CXX=unsupported
@@ -11762,12 +11367,8 @@ case $host_os in
hardcode_libdir_flag_spec_CXX='-L$libdir'
hardcode_libdir_separator_CXX=
fi
- ;;
esac
shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -11807,56 +11408,50 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
allow_undefined_flag_CXX="-z nodefs"
- archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
else
# Determine the default libpath from the value encoded in an empty executable.
cat >conftest.$ac_ext <<_ACEOF
@@ -11875,45 +11470,39 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -11922,26 +11511,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -berok will link without error, but may produce a broken library.
no_undefined_flag_CXX=' ${wl}-bernotok'
allow_undefined_flag_CXX=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_CXX=yes
# Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_CXX='$convenience'
+ whole_archive_flag_spec_CXX=' '
archive_cmds_need_lc_CXX=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag_CXX=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs_CXX=no
- fi
- ;;
-
chorus*)
case $cc_basename in
*)
@@ -11951,6 +11530,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
;;
+
cygwin* | mingw* | pw32*)
# _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
# as there is no search path for DLLs.
@@ -11960,7 +11540,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
enable_shared_with_static_runtimes_CXX=yes
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
# If the export-symbols file already is a .def file (1st line
# is EXPORTS), use it as is; otherwise, prepend...
archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
@@ -11969,37 +11549,65 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
echo EXPORTS > $output_objdir/$soname.def;
cat $export_symbols >> $output_objdir/$soname.def;
fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
else
ld_shlibs_CXX=no
fi
;;
darwin* | rhapsody*)
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[012])
+ allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
archive_cmds_need_lc_CXX=no
hardcode_direct_CXX=no
hardcode_automatic_CXX=yes
hardcode_shlibpath_var_CXX=unsupported
whole_archive_flag_spec_CXX=''
link_all_deplibs_CXX=yes
- allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
- if test "$GXX" = yes ; then
+
+ if test "$GXX" = yes ; then
+ lt_int_apple_cc_single_mod=no
output_verbose_link_cmd='echo'
- archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
- archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
- archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
output_verbose_link_cmd='echo'
- archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
+ archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
*)
@@ -12011,11 +11619,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
dgux*)
case $cc_basename in
- ec++*)
+ ec++)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- ghcx*)
+ ghcx)
# Green Hills C++ Compiler
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
@@ -12026,14 +11634,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
esac
;;
- freebsd[12]*)
+ freebsd12*)
# C++ shared libraries reported to be fairly broken before switch to ELF
ld_shlibs_CXX=no
;;
freebsd-elf*)
archive_cmds_need_lc_CXX=no
;;
- freebsd* | dragonfly*)
+ freebsd* | kfreebsd*-gnu)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
ld_shlibs_CXX=yes
@@ -12050,11 +11658,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# location of the library.
case $cc_basename in
- CC*)
+ CC)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- aCC*)
+ aCC)
archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
# Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when
@@ -12064,7 +11672,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library
# dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
;;
*)
if test "$GXX" = yes; then
@@ -12078,21 +11686,34 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
hpux10*|hpux11*)
if test $with_gnu_ld = no; then
- hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_CXX=:
-
- case $host_cpu in
- hppa*64*|ia64*) ;;
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+ hardcode_libdir_separator_CXX=:
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ ;;
*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
export_dynamic_flag_spec_CXX='${wl}-E'
;;
esac
fi
- case $host_cpu in
- hppa*64*|ia64*)
+ case "$host_cpu" in
+ hppa*64*)
hardcode_direct_CXX=no
hardcode_shlibpath_var_CXX=no
;;
+ ia64*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
*)
hardcode_direct_CXX=yes
hardcode_minus_L_CXX=yes # Not in the search PATH,
@@ -12102,17 +11723,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
case $cc_basename in
- CC*)
+ CC)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- aCC*)
- case $host_cpu in
- hppa*64*)
- archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ aCC)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
;;
*)
archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
@@ -12131,12 +11749,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
if test "$GXX" = yes; then
if test $with_gnu_ld = no; then
- case $host_cpu in
- hppa*64*)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ case "$host_cpu" in
+ ia64*|hppa*64*)
+ archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
;;
*)
archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
@@ -12150,25 +11765,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
esac
;;
- interix[3-9]*)
- hardcode_direct_CXX=no
- hardcode_shlibpath_var_CXX=no
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_CXX='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
irix5* | irix6*)
case $cc_basename in
- CC*)
+ CC)
# SGI C++
- archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
# Archives containing C++ object files must be created using
# "CC -ar", where "CC" is the IRIX C++ compiler. This is
@@ -12179,7 +11780,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
if test "$GXX" = yes; then
if test "$with_gnu_ld" = no; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
else
archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
fi
@@ -12190,9 +11791,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator_CXX=:
;;
- linux* | k*bsd*-gnu)
+ linux*)
case $cc_basename in
- KCC*)
+ KCC)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -12217,7 +11818,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# "CC -Bstatic", where "CC" is the KAI C++ compiler.
old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
;;
- icpc*)
+ icpc)
# Intel C++
with_gnu_ld=yes
# version 8.0 and above of icpc choke on multiply defined symbols
@@ -12229,12 +11830,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
;;
*) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
;;
esac
archive_cmds_need_lc_CXX=no
@@ -12242,16 +11839,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler
- archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-
- hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
- whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
+ cxx)
# Compaq C++
archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
@@ -12270,29 +11858,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# dependencies.
output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- no_undefined_flag_CXX=' -zdefs'
- archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
- hardcode_libdir_flag_spec_CXX='-R$libdir'
- whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-
- # Not sure whether something based on
- # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
- # would be better.
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
- ;;
- esac
- ;;
esac
;;
lynxos*)
@@ -12305,7 +11870,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
mvs*)
case $cc_basename in
- cxx*)
+ cxx)
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
@@ -12331,24 +11896,20 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
ld_shlibs_CXX=no
;;
openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct_CXX=yes
- hardcode_shlibpath_var_CXX=no
- archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- export_dynamic_flag_spec_CXX='${wl}-E'
- whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd='echo'
- else
- ld_shlibs_CXX=no
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
fi
+ output_verbose_link_cmd='echo'
;;
osf3*)
case $cc_basename in
- KCC*)
+ KCC)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -12364,14 +11925,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
;;
- RCC*)
+ RCC)
# Rational C++ 2.4.1
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- cxx*)
+ cxx)
allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator_CXX=:
@@ -12389,7 +11950,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
if test "$GXX" = yes && test "$with_gnu_ld" = no; then
allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator_CXX=:
@@ -12408,7 +11969,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
osf4* | osf5*)
case $cc_basename in
- KCC*)
+ KCC)
# Kuck and Associates, Inc. (KAI) C++ Compiler
# KCC will only create a shared library if the output file
@@ -12423,17 +11984,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# the KAI C++ compiler.
old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
;;
- RCC*)
+ RCC)
# Rational C++ 2.4.1
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- cxx*)
+ cxx)
allow_undefined_flag_CXX=' -expect_unresolved \*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
$rm $lib.exp'
hardcode_libdir_flag_spec_CXX='-rpath $libdir'
@@ -12452,7 +12013,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
if test "$GXX" = yes && test "$with_gnu_ld" = no; then
allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator_CXX=:
@@ -12473,14 +12034,27 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
+ sco*)
+ archive_cmds_need_lc_CXX=no
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
sunos4*)
case $cc_basename in
- CC*)
+ CC)
# Sun C++ 4.x
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
;;
- lcc*)
+ lcc)
# Lucid
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
@@ -12493,28 +12067,36 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
solaris*)
case $cc_basename in
- CC*)
+ CC)
# Sun C++ 4.2, 5.x and Centerline C++
- archive_cmds_need_lc_CXX=yes
no_undefined_flag_CXX=' -zdefs'
- archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
hardcode_libdir_flag_spec_CXX='-R$libdir'
hardcode_shlibpath_var_CXX=no
case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
+ solaris2.0-5 | solaris2.0-5.*) ;;
*)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'.
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker.
# Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
;;
esac
link_all_deplibs_CXX=yes
- output_verbose_link_cmd='echo'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
# Archives containing C++ object files must be created using
# "CC -xar", where "CC" is the Sun C++ compiler. This is
@@ -12522,7 +12104,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# in the archive.
old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
;;
- gcx*)
+ gcx)
# Green Hills C++ Compiler
archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
@@ -12556,73 +12138,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- ;;
- esac
fi
;;
esac
;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag_CXX='${wl}-z,text'
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
archive_cmds_need_lc_CXX=no
- hardcode_shlibpath_var_CXX=no
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- # So that behaviour is only enabled if SCOABSPATH is set to a
- # non-empty value in the environment. Most likely only useful for
- # creating official distributions of packages.
- # This is a hack until libtool officially supports absolute path
- # names for shared libraries.
- no_undefined_flag_CXX='${wl}-z,text'
- allow_undefined_flag_CXX='${wl}-z,nodefs'
- archive_cmds_need_lc_CXX=no
- hardcode_shlibpath_var_CXX=no
- hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator_CXX=':'
- link_all_deplibs_CXX=yes
- export_dynamic_flag_spec_CXX='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
;;
tandem*)
case $cc_basename in
- NCC*)
+ NCC)
# NonStop-UX NCC 3.20
# FIXME: insert proper C++ library support
ld_shlibs_CXX=no
@@ -12642,13 +12167,18 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
ld_shlibs_CXX=no
;;
esac
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
test "$ld_shlibs_CXX" = no && can_build_shared=no
GCC_CXX="$GXX"
LD_CXX="$LD"
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+
cat > conftest.$ac_ext <<EOF
class Foo
{
@@ -12662,7 +12192,7 @@ EOF
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
# Parse the compiler output and extract the necessary
# objects, libraries and library flags.
@@ -12674,7 +12204,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
# The `*' in the case matches for architectures that use `case' in
# $output_verbose_cmd can trigger glob expansion during the loop
# eval without this substitution.
- output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
+ output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
for p in `eval $output_verbose_link_cmd`; do
case $p in
@@ -12750,66 +12280,6 @@ fi
$rm -f confest.$objext
-compiler_lib_search_dirs_CXX=
-if test -n "$compiler_lib_search_path_CXX"; then
- compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-# PORTME: override above test on systems where it is broken
-case $host_os in
-interix[3-9]*)
- # Interix 3.5 installs completely hosed .la files for C++, so rather than
- # hack all around it, let's just trust "g++" to DTRT.
- predep_objects_CXX=
- postdep_objects_CXX=
- postdeps_CXX=
- ;;
-
-linux*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- #
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
- if test "$solaris_use_stlport4" != yes; then
- postdeps_CXX='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
-solaris*)
- case $cc_basename in
- CC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- # Adding this requires a known-good setup of shared libraries for
- # Sun compiler versions before 5.6, else PIC objects from an old
- # archive will be linked into the output, leading to subtle bugs.
- if test "$solaris_use_stlport4" != yes; then
- postdeps_CXX='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-esac
-
case " $postdeps_CXX " in
*" -lc "*) archive_cmds_need_lc_CXX=no ;;
esac
@@ -12818,8 +12288,8 @@ lt_prog_compiler_wl_CXX=
lt_prog_compiler_pic_CXX=
lt_prog_compiler_static_CXX=
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
# C++ specific cases for pic, static, wl, etc.
if test "$GXX" = yes; then
@@ -12840,14 +12310,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
# like `-m68040'.
lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
# PIC is the default for these OSes.
;;
- mingw* | cygwin* | os2* | pw32*)
+ mingw* | os2* | pw32*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
;;
darwin* | rhapsody*)
@@ -12859,10 +12327,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
# DJGPP does not support shared libraries at all
lt_prog_compiler_pic_CXX=
;;
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
sysv4*MP*)
if test -d /usr/nec; then
lt_prog_compiler_pic_CXX=-Kconform_pic
@@ -12871,7 +12335,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case $host_cpu in
+ case "$host_cpu" in
hppa*64*|ia64*)
;;
*)
@@ -12885,7 +12349,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
else
case $host_os in
- aix[4-9]*)
+ aix4* | aix5*)
# All AIX code is PIC.
if test "$host_cpu" = ia64; then
# AIX 5 now supports IA64 processor
@@ -12896,7 +12360,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
chorus*)
case $cc_basename in
- cxch68*)
+ cxch68)
# Green Hills C++ Compiler
# _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
;;
@@ -12905,7 +12369,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
lt_prog_compiler_pic_CXX='-qnocommon'
lt_prog_compiler_wl_CXX='-Wl,'
@@ -12914,10 +12378,10 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
dgux*)
case $cc_basename in
- ec++*)
+ ec++)
lt_prog_compiler_pic_CXX='-KPIC'
;;
- ghcx*)
+ ghcx)
# Green Hills C++ Compiler
lt_prog_compiler_pic_CXX='-pic'
;;
@@ -12925,22 +12389,22 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
esac
;;
- freebsd* | dragonfly*)
+ freebsd* | kfreebsd*-gnu)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
case $cc_basename in
- CC*)
+ CC)
lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+ lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
if test "$host_cpu" != ia64; then
lt_prog_compiler_pic_CXX='+Z'
fi
;;
- aCC*)
+ aCC)
lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
- case $host_cpu in
+ lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ case "$host_cpu" in
hppa*64*|ia64*)
# +Z the default
;;
@@ -12953,13 +12417,9 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
esac
;;
- interix*)
- # This is c89, which is MS Visual C++ (no shared libs)
- # Anyone wants to do a port?
- ;;
irix5* | irix6* | nonstopux*)
case $cc_basename in
- CC*)
+ CC)
lt_prog_compiler_wl_CXX='-Wl,'
lt_prog_compiler_static_CXX='-non_shared'
# CC pic flag -KPIC is the default.
@@ -12968,26 +12428,20 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
esac
;;
- linux* | k*bsd*-gnu)
+ linux*)
case $cc_basename in
- KCC*)
+ KCC)
# KAI C++ Compiler
lt_prog_compiler_wl_CXX='--backend -Wl,'
lt_prog_compiler_pic_CXX='-fPIC'
;;
- icpc* | ecpc*)
+ icpc)
# Intel C++
lt_prog_compiler_wl_CXX='-Wl,'
lt_prog_compiler_pic_CXX='-KPIC'
lt_prog_compiler_static_CXX='-static'
;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler.
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_pic_CXX='-fpic'
- lt_prog_compiler_static_CXX='-Bstatic'
- ;;
- cxx*)
+ cxx)
# Compaq C++
# Make sure the PIC flag is empty. It appears that all Alpha
# Linux and Compaq Tru64 Unix objects are PIC.
@@ -12995,14 +12449,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static_CXX='-non_shared'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-Bstatic'
- lt_prog_compiler_wl_CXX='-Qoption ld '
- ;;
- esac
;;
esac
;;
@@ -13012,7 +12458,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
mvs*)
case $cc_basename in
- cxx*)
+ cxx)
lt_prog_compiler_pic_CXX='-W c,exportall'
;;
*)
@@ -13023,14 +12469,14 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
osf3* | osf4* | osf5*)
case $cc_basename in
- KCC*)
+ KCC)
lt_prog_compiler_wl_CXX='--backend -Wl,'
;;
- RCC*)
+ RCC)
# Rational C++ 2.4.1
lt_prog_compiler_pic_CXX='-pic'
;;
- cxx*)
+ cxx)
# Digital/Compaq C++
lt_prog_compiler_wl_CXX='-Wl,'
# Make sure the PIC flag is empty. It appears that all Alpha
@@ -13044,15 +12490,24 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
psos*)
;;
+ sco*)
+ case $cc_basename in
+ CC)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
solaris*)
case $cc_basename in
- CC*)
+ CC)
# Sun C++ 4.2, 5.x and Centerline C++
lt_prog_compiler_pic_CXX='-KPIC'
lt_prog_compiler_static_CXX='-Bstatic'
lt_prog_compiler_wl_CXX='-Qoption ld '
;;
- gcx*)
+ gcx)
# Green Hills C++ Compiler
lt_prog_compiler_pic_CXX='-PIC'
;;
@@ -13062,12 +12517,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
sunos4*)
case $cc_basename in
- CC*)
+ CC)
# Sun C++ 4.x
lt_prog_compiler_pic_CXX='-pic'
lt_prog_compiler_static_CXX='-Bstatic'
;;
- lcc*)
+ lcc)
# Lucid
lt_prog_compiler_pic_CXX='-pic'
;;
@@ -13077,7 +12532,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
tandem*)
case $cc_basename in
- NCC*)
+ NCC)
# NonStop-UX NCC 3.20
lt_prog_compiler_pic_CXX='-KPIC'
;;
@@ -13085,14 +12540,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
esac
;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- case $cc_basename in
- CC*)
- lt_prog_compiler_wl_CXX='-Wl,'
- lt_prog_compiler_pic_CXX='-KPIC'
- lt_prog_compiler_static_CXX='-Bstatic'
- ;;
- esac
+ unixware*)
;;
vxworks*)
;;
@@ -13102,22 +12550,22 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
#
# Check to make sure the PIC flag actually works.
#
if test -n "$lt_prog_compiler_pic_CXX"; then
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- lt_cv_prog_compiler_pic_works_CXX=no
+ lt_prog_compiler_pic_works_CXX=no
ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
@@ -13125,30 +12573,28 @@ else
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13131: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12579: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:13135: \$? = $ac_status" >&5
+ echo "$as_me:12583: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works_CXX=yes
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_CXX=yes
fi
fi
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
-if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
case $lt_prog_compiler_pic_CXX in
"" | " "*) ;;
*) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
@@ -13159,7 +12605,7 @@ else
fi
fi
-case $host_os in
+case "$host_os" in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic_CXX=
@@ -13169,59 +12615,17 @@ case $host_os in
;;
esac
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works_CXX=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works_CXX=yes
- fi
- else
- lt_cv_prog_compiler_static_works_CXX=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
- :
-else
- lt_prog_compiler_static_CXX=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_prog_compiler_c_o_CXX=no
$rm -r conftest 2>/dev/null
mkdir conftest
cd conftest
mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-o out/conftest2.$ac_objext"
# Insert the option either (1) after the last *FLAGS variable, or
@@ -13229,25 +12633,23 @@ else
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13235: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12639: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:13239: \$? = $ac_status" >&5
+ echo "$as_me:12643: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ if test ! -s out/conftest.err; then
lt_cv_prog_compiler_c_o_CXX=yes
fi
fi
- chmod u+w . 2>&5
+ chmod u+w .
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -13258,38 +12660,38 @@ else
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
hard_links="nottested"
if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
# do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
hard_links=yes
$rm conftest*
ln conftest.a conftest.b 2>/dev/null && hard_links=no
touch conftest.a
ln conftest.a conftest.b 2>&5 || hard_links=no
ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
need_locks=warn
fi
else
need_locks=no
fi
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
case $host_os in
- aix[4-9]*)
+ aix4* | aix5*)
# If we're using GNU nm, then we don't want the "-C" option.
# -C means demangle to AIX nm, but means don't demangle with GNU nm
if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
@@ -13302,18 +12704,22 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
export_symbols_cmds_CXX="$ltdll_cmds"
;;
cygwin* | mingw*)
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
;;
*)
export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
esac
- exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
test "$ld_shlibs_CXX" = no && can_build_shared=no
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
#
# Do we need to explicitly link libc?
#
@@ -13331,22 +12737,21 @@ x|xyes)
# Test whether the compiler implicitly links with -lc since on some
# systems, -lgcc has to come before -lc. If gcc already passes -lc
# to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
$rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } 2>conftest.err; then
soname=conftest
lib=conftest
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl_CXX
- pic_flag=$lt_prog_compiler_pic_CXX
compiler_flags=-v
linker_flags=-v
verstring=
@@ -13357,7 +12762,7 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
(eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
then
archive_cmds_need_lc_CXX=no
@@ -13369,16 +12774,16 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
cat conftest.err 1>&5
fi
$rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
;;
esac
fi
;;
esac
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
library_names_spec=
libname_spec='lib$name'
soname_spec=
@@ -13392,7 +12797,20 @@ shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
need_lib_prefix=unknown
hardcode_into_libs=no
@@ -13410,7 +12828,7 @@ aix3*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
-aix[4-9]*)
+aix4* | aix5*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -13494,8 +12912,7 @@ cygwin* | mingw* | pw32*)
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
+ $install_prog $dir/$dlname \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -13525,7 +12942,7 @@ cygwin* | mingw* | pw32*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -13548,8 +12965,13 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
+ shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
;;
@@ -13566,17 +12988,20 @@ freebsd1*)
dynamic_linker=no
;;
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
+kfreebsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -13594,19 +13019,14 @@ freebsd* | dragonfly*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.[01]* | freebsdelf3.[01]*)
+ freebsd3.01* | freebsdelf3.01*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ *) # from 3.2 on
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
esac
;;
@@ -13626,7 +13046,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case $host_cpu in
+ case "$host_cpu" in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -13666,18 +13086,6 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -13721,7 +13129,7 @@ linux*oldld* | linux*aout* | linux*coff*)
;;
# This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -13737,7 +13145,7 @@ linux* | k*bsd*-gnu)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -13750,6 +13158,18 @@ linux* | k*bsd*-gnu)
dynamic_linker='GNU/Linux ld.so'
;;
+knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -13787,13 +13207,8 @@ nto-qnx*)
openbsd*)
version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
+ need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
@@ -13831,8 +13246,11 @@ osf3* | osf4* | osf5*)
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
-rdos*)
- dynamic_linker=no
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
;;
solaris*)
@@ -13860,7 +13278,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.3*)
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
@@ -13893,29 +13311,6 @@ sysv4*MP*)
fi
;;
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -13927,32 +13322,12 @@ uts4*)
dynamic_linker=no
;;
esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
test "$dynamic_linker" = no && can_build_shared=no
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
hardcode_action_CXX=
if test -n "$hardcode_libdir_flag_spec_CXX" || \
test -n "$runpath_var_CXX" || \
@@ -13976,8 +13351,8 @@ else
# directories.
hardcode_action_CXX=unsupported
fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
-$as_echo "$hardcode_action_CXX" >&6; }
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6
if test "$hardcode_action_CXX" = relink; then
# Fast installation is not supported
@@ -13988,6 +13363,841 @@ elif test "$shlibpath_overrides_runpath" = yes ||
enable_fast_install=needless
fi
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_dld_link=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 14000 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 14098 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
# The else clause should only fire when bootstrapping the
# libtool distribution, otherwise you forgot to ship ltmain.sh
@@ -14002,7 +14212,7 @@ if test -f "$ltmain"; then
# Now quote all the things that may contain metacharacters while being
# careful not to overquote the AC_SUBSTed values. We take copies of the
# variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -14029,7 +14239,6 @@ if test -f "$ltmain"; then
predeps_CXX \
postdeps_CXX \
compiler_lib_search_path_CXX \
- compiler_lib_search_dirs_CXX \
archive_cmds_CXX \
archive_expsym_cmds_CXX \
postinstall_cmds_CXX \
@@ -14045,7 +14254,6 @@ if test -f "$ltmain"; then
module_cmds_CXX \
module_expsym_cmds_CXX \
lt_cv_prog_compiler_c_o_CXX \
- fix_srcfile_path_CXX \
exclude_expsyms_CXX \
include_expsyms_CXX; do
@@ -14105,12 +14313,6 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -14122,9 +14324,6 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
# A language-specific compiler.
CC=$lt_compiler_CXX
@@ -14190,7 +14389,7 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
# Does compiler simultaneously support -c and -o options?
compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-# Must we lock files when doing compilation?
+# Must we lock files when doing compilation ?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -14278,10 +14477,6 @@ predeps=$lt_predeps_CXX
# shared library.
postdeps=$lt_postdeps_CXX
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
-
# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
@@ -14370,7 +14565,7 @@ sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
+fix_srcfile_path="$fix_srcfile_path_CXX"
# Set to yes if exported symbols are required.
always_export_symbols=$always_export_symbols_CXX
@@ -14461,72 +14656,39 @@ objext=o
objext_F77=$objext
# Code to be used in simple compile tests
-lt_simple_compile_test_code="\
- subroutine t
- return
- end
-"
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
# Code to be used in simple link tests
-lt_simple_link_test_code="\
- program t
- end
-"
+lt_simple_link_test_code=" program t\n end\n"
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
# Allow CC to be a program name with arguments.
compiler=$CC
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
CC=${F77-"f77"}
compiler=$CC
compiler_F77=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
-{ $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
-{ $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
test "$can_build_shared" = "no" && enable_shared=no
# On AIX, shared libraries and static libraries use the same namespace, and
# are all built from PIC.
-case $host_os in
+case "$host_os" in
aix3*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
@@ -14534,21 +14696,21 @@ aix3*)
postinstall_cmds='$RANLIB $lib'
fi
;;
-aix[4-9]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
+aix4* | aix5*)
+ test "$enable_shared" = yes && enable_static=no
;;
esac
-{ $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
-{ $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes
-{ $as_echo "$as_me:$LINENO: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+test "$ld_shlibs_F77" = no && can_build_shared=no
GCC_F77="$G77"
LD_F77="$LD"
@@ -14557,8 +14719,8 @@ lt_prog_compiler_wl_F77=
lt_prog_compiler_pic_F77=
lt_prog_compiler_static_F77=
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
if test "$GCC" = yes; then
lt_prog_compiler_wl_F77='-Wl,'
@@ -14580,15 +14742,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
# PIC is the default for these OSes.
;;
- mingw* | cygwin* | pw32* | os2*)
+ mingw* | pw32* | os2*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
lt_prog_compiler_pic_F77='-DDLL_EXPORT'
;;
@@ -14598,11 +14758,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic_F77='-fno-common'
;;
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
@@ -14619,7 +14774,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case $host_cpu in
+ case "$host_cpu" in
hppa*64*|ia64*)
# +Z the default
;;
@@ -14648,7 +14803,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
lt_prog_compiler_pic_F77='-qnocommon'
lt_prog_compiler_wl_F77='-Wl,'
@@ -14656,7 +14811,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
;;
- mingw* | cygwin* | pw32* | os2*)
+ mingw* | pw32* | os2*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
lt_prog_compiler_pic_F77='-DDLL_EXPORT'
@@ -14666,7 +14821,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_wl_F77='-Wl,'
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case $host_cpu in
+ case "$host_cpu" in
hppa*64*|ia64*)
# +Z the default
;;
@@ -14689,41 +14844,18 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static_F77='-Bstatic'
;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
+ linux*)
+ case $CC in
icc* | ecc*)
lt_prog_compiler_wl_F77='-Wl,'
lt_prog_compiler_pic_F77='-KPIC'
lt_prog_compiler_static_F77='-static'
;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-fpic'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
ccc*)
lt_prog_compiler_wl_F77='-Wl,'
# All Alpha code is PIC.
lt_prog_compiler_static_F77='-non_shared'
;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- lt_prog_compiler_wl_F77='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- lt_prog_compiler_wl_F77=''
- ;;
- esac
- ;;
esac
;;
@@ -14733,19 +14865,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static_F77='-non_shared'
;;
- rdos*)
- lt_prog_compiler_static_F77='-non_shared'
+ sco3.2v5*)
+ lt_prog_compiler_pic_F77='-Kpic'
+ lt_prog_compiler_static_F77='-dn'
;;
solaris*)
+ lt_prog_compiler_wl_F77='-Wl,'
lt_prog_compiler_pic_F77='-KPIC'
lt_prog_compiler_static_F77='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl_F77='-Qoption ld ';;
- *)
- lt_prog_compiler_wl_F77='-Wl,';;
- esac
;;
sunos4*)
@@ -14754,7 +14882,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static_F77='-Bstatic'
;;
- sysv4 | sysv4.2uw2* | sysv4.3*)
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
lt_prog_compiler_wl_F77='-Wl,'
lt_prog_compiler_pic_F77='-KPIC'
lt_prog_compiler_static_F77='-Bstatic'
@@ -14767,17 +14895,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
fi
;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_pic_F77='-KPIC'
- lt_prog_compiler_static_F77='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl_F77='-Wl,'
- lt_prog_compiler_can_build_shared_F77=no
- ;;
-
uts4*)
lt_prog_compiler_pic_F77='-pic'
lt_prog_compiler_static_F77='-Bstatic'
@@ -14789,22 +14906,22 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
-$as_echo "$lt_prog_compiler_pic_F77" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
#
# Check to make sure the PIC flag actually works.
#
if test -n "$lt_prog_compiler_pic_F77"; then
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- lt_cv_prog_compiler_pic_works_F77=no
+ lt_prog_compiler_pic_works_F77=no
ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$lt_prog_compiler_pic_F77"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
@@ -14812,30 +14929,28 @@ else
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14818: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14935: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14822: \$? = $ac_status" >&5
+ echo "$as_me:14939: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works_F77=yes
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_F77=yes
fi
fi
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_F77" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
-if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
case $lt_prog_compiler_pic_F77 in
"" | " "*) ;;
*) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
@@ -14846,7 +14961,7 @@ else
fi
fi
-case $host_os in
+case "$host_os" in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic_F77=
@@ -14856,59 +14971,17 @@ case $host_os in
;;
esac
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works_F77=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works_F77=yes
- fi
- else
- lt_cv_prog_compiler_static_works_F77=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_F77" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then
- :
-else
- lt_prog_compiler_static_F77=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_prog_compiler_c_o_F77=no
$rm -r conftest 2>/dev/null
mkdir conftest
cd conftest
mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-o out/conftest2.$ac_objext"
# Insert the option either (1) after the last *FLAGS variable, or
@@ -14916,25 +14989,23 @@ else
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14922: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14995: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14926: \$? = $ac_status" >&5
+ echo "$as_me:14999: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ if test ! -s out/conftest.err; then
lt_cv_prog_compiler_c_o_F77=yes
fi
fi
- chmod u+w . 2>&5
+ chmod u+w .
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -14945,34 +15016,34 @@ else
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
hard_links="nottested"
if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
# do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
hard_links=yes
$rm conftest*
ln conftest.a conftest.b 2>/dev/null && hard_links=no
touch conftest.a
ln conftest.a conftest.b 2>&5 || hard_links=no
ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
need_locks=warn
fi
else
need_locks=no
fi
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
runpath_var=
allow_undefined_flag_F77=
@@ -15003,24 +15074,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
# it will be wrapped by ` (' and `)$', so one must not match beginning or
# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
# as well as any symbol that contains `d'.
- exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
# platforms (ab)use it in PIC code, but their linkers get confused if
# the symbol is explicitly referenced. Since portable code cannot
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
case $host_os in
cygwin* | mingw* | pw32*)
@@ -15031,10 +15091,6 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
with_gnu_ld=no
fi
;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
openbsd*)
with_gnu_ld=no
;;
@@ -15045,30 +15101,9 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_F77='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_F77=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
# See if GNU ld supports shared libraries.
case $host_os in
- aix[3-9]*)
+ aix3* | aix4* | aix5*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs_F77=no
@@ -15116,10 +15151,10 @@ EOF
allow_undefined_flag_F77=unsupported
always_export_symbols_F77=no
enable_shared_with_static_runtimes_F77=yes
- export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
# If the export-symbols file already is a .def file (1st line
# is EXPORTS), use it as is; otherwise, prepend...
archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
@@ -15128,64 +15163,9 @@ EOF
echo EXPORTS > $output_objdir/$soname.def;
cat $export_symbols >> $output_objdir/$soname.def;
fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
-
- interix[3-9]*)
- hardcode_direct_F77=no
- hardcode_shlibpath_var_F77=no
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_F77='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
else
- ld_shlibs_F77=no
+ ld_shlibs=no
fi
;;
@@ -15199,7 +15179,7 @@ EOF
fi
;;
- solaris*)
+ solaris* | sysv5*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs_F77=no
cat <<EOF 1>&2
@@ -15220,33 +15200,6 @@ EOF
fi
;;
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs_F77=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- ld_shlibs_F77=no
- fi
- ;;
- esac
- ;;
-
sunos4*)
archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
@@ -15254,6 +15207,31 @@ _LT_EOF
hardcode_shlibpath_var_F77=no
;;
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_cmds_F77="$tmp_archive_cmds"
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ else
+ archive_expsym_cmds_F77="$tmp_archive_cmds"
+ fi
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
@@ -15264,11 +15242,16 @@ _LT_EOF
;;
esac
- if test "$ld_shlibs_F77" = no; then
- runpath_var=
- hardcode_libdir_flag_spec_F77=
- export_dynamic_flag_spec_F77=
- whole_archive_flag_spec_F77=
+ if test "$ld_shlibs_F77" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_F77=
+ fi
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
@@ -15280,14 +15263,14 @@ _LT_EOF
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L_F77=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct_F77=unsupported
fi
;;
- aix[4-9]*)
+ aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
@@ -15307,14 +15290,13 @@ _LT_EOF
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
- ;;
esac
exp_sym_flag='-bexport'
@@ -15333,7 +15315,7 @@ _LT_EOF
link_all_deplibs_F77=yes
if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
+ case $host_os in aix4.012|aix4.012.*)
# We only want to do this on AIX 4.2 and lower, the check
# below for broken collect2 doesn't work under 4.3+
collect2name=`${CC} -print-prog-name=collect2`
@@ -15341,7 +15323,7 @@ _LT_EOF
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
- :
+ hardcode_direct_F77=yes
else
# We have old collect2
hardcode_direct_F77=unsupported
@@ -15352,12 +15334,8 @@ _LT_EOF
hardcode_libdir_flag_spec_F77='-L$libdir'
hardcode_libdir_separator_F77=
fi
- ;;
esac
shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -15365,11 +15343,11 @@ _LT_EOF
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
- if test "$aix_use_runtimelinking" = yes; then
+ if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
- fi
+ fi
fi
fi
@@ -15387,55 +15365,49 @@ _LT_EOF
end
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_f77_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_f77_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
allow_undefined_flag_F77="-z nodefs"
- archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
else
# Determine the default libpath from the value encoded in an empty executable.
cat >conftest.$ac_ext <<_ACEOF
@@ -15444,45 +15416,39 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
end
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_f77_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_f77_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -15491,11 +15457,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -berok will link without error, but may produce a broken library.
no_undefined_flag_F77=' ${wl}-bernotok'
allow_undefined_flag_F77=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_F77=yes
# Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_F77='$convenience'
+ whole_archive_flag_spec_F77=' '
archive_cmds_need_lc_F77=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
@@ -15528,13 +15496,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# The linker will automatically build a .lib file if we build a DLL.
old_archive_From_new_cmds_F77='true'
# FIXME: Should let the user specify the lib program.
- old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
+ old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
enable_shared_with_static_runtimes_F77=yes
;;
darwin* | rhapsody*)
- case $host_os in
+ case "$host_os" in
rhapsody* | darwin1.[012])
allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
;;
@@ -15561,18 +15529,19 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
link_all_deplibs_F77=yes
if test "$GCC" = yes ; then
output_verbose_link_cmd='echo'
- archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
output_verbose_link_cmd='echo'
- archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
+ archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
*)
@@ -15612,7 +15581,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | kfreebsd*-gnu)
archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec_F77='-R$libdir'
hardcode_direct_F77=yes
@@ -15635,62 +15604,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec_F77='${wl}-E'
;;
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_F77=:
-
- hardcode_direct_F77=yes
- export_dynamic_flag_spec_F77='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_F77=yes
- fi
- ;;
-
- hpux11*)
+ hpux10* | hpux11*)
if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
- ia64*)
- archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
*)
archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
;;
esac
else
- case $host_cpu in
- hppa*64*)
- archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
;;
*)
- archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
;;
esac
fi
if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_F77=:
-
- case $host_cpu in
- hppa*64*|ia64*)
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+ hardcode_libdir_separator_F77=:
hardcode_direct_F77=no
hardcode_shlibpath_var_F77=no
;;
+ ia64*)
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ ;;
*)
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
hardcode_direct_F77=yes
export_dynamic_flag_spec_F77='${wl}-E'
@@ -15734,28 +15688,24 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct_F77=yes
- hardcode_shlibpath_var_F77=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_F77='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_F77='-R$libdir'
- ;;
- *)
- archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
- ;;
- esac
- fi
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_F77='${wl}-E'
else
- ld_shlibs_F77=no
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ ;;
+ *)
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ ;;
+ esac
fi
;;
@@ -15788,7 +15738,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
allow_undefined_flag_F77=' -expect_unresolved \*'
archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
# Both c and cxx compiler support -rpath directly
hardcode_libdir_flag_spec_F77='-rpath $libdir'
@@ -15796,15 +15746,21 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_separator_F77=:
;;
+ sco3.2v5*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ export_dynamic_flag_spec_F77='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
solaris*)
no_undefined_flag_F77=' -z text'
if test "$GCC" = yes; then
- wlarc='${wl}'
archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
$CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
else
- wlarc=''
archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
@@ -15813,17 +15769,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_shlibpath_var_F77=no
case $host_os in
solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract'
- fi
- ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
esac
link_all_deplibs_F77=yes
;;
@@ -15880,45 +15827,36 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag_F77='${wl}-z,text'
- archive_cmds_need_lc_F77=no
+ sysv4.2uw2*)
+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=no
hardcode_shlibpath_var_F77=no
- runpath_var='LD_RUN_PATH'
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag_F77='${wl}-z ${wl}text'
if test "$GCC" = yes; then
- archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
else
- archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_F77=no
;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag_F77='${wl}-z,text'
- allow_undefined_flag_F77='${wl}-z,nodefs'
- archive_cmds_need_lc_F77=no
+ sysv5*)
+ no_undefined_flag_F77=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec_F77=
hardcode_shlibpath_var_F77=no
- hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator_F77=':'
- link_all_deplibs_F77=yes
- export_dynamic_flag_spec_F77='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
;;
uts4*)
@@ -15933,10 +15871,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
-$as_echo "$ld_shlibs_F77" >&6; }
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6
test "$ld_shlibs_F77" = no && can_build_shared=no
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
#
# Do we need to explicitly link libc?
#
@@ -15954,22 +15897,21 @@ x|xyes)
# Test whether the compiler implicitly links with -lc since on some
# systems, -lgcc has to come before -lc. If gcc already passes -lc
# to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
$rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } 2>conftest.err; then
soname=conftest
lib=conftest
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl_F77
- pic_flag=$lt_prog_compiler_pic_F77
compiler_flags=-v
linker_flags=-v
verstring=
@@ -15980,7 +15922,7 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
(eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
then
archive_cmds_need_lc_F77=no
@@ -15992,16 +15934,16 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
cat conftest.err 1>&5
fi
$rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
-$as_echo "$archive_cmds_need_lc_F77" >&6; }
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
;;
esac
fi
;;
esac
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
library_names_spec=
libname_spec='lib$name'
soname_spec=
@@ -16015,7 +15957,20 @@ shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
need_lib_prefix=unknown
hardcode_into_libs=no
@@ -16033,7 +15988,7 @@ aix3*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
-aix[4-9]*)
+aix4* | aix5*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -16117,8 +16072,7 @@ cygwin* | mingw* | pw32*)
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
+ $install_prog $dir/$dlname \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -16148,7 +16102,7 @@ cygwin* | mingw* | pw32*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -16171,8 +16125,13 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
+ shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
;;
@@ -16189,17 +16148,20 @@ freebsd1*)
dynamic_linker=no
;;
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
+kfreebsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -16217,19 +16179,14 @@ freebsd* | dragonfly*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.[01]* | freebsdelf3.[01]*)
+ freebsd3.01* | freebsdelf3.01*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ *) # from 3.2 on
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
esac
;;
@@ -16249,7 +16206,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case $host_cpu in
+ case "$host_cpu" in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -16289,18 +16246,6 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -16344,7 +16289,7 @@ linux*oldld* | linux*aout* | linux*coff*)
;;
# This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -16360,7 +16305,7 @@ linux* | k*bsd*-gnu)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -16373,6 +16318,18 @@ linux* | k*bsd*-gnu)
dynamic_linker='GNU/Linux ld.so'
;;
+knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -16410,13 +16367,8 @@ nto-qnx*)
openbsd*)
version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
+ need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
@@ -16454,8 +16406,11 @@ osf3* | osf4* | osf5*)
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
-rdos*)
- dynamic_linker=no
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
;;
solaris*)
@@ -16483,7 +16438,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.3*)
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
@@ -16516,29 +16471,6 @@ sysv4*MP*)
fi
;;
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -16550,32 +16482,12 @@ uts4*)
dynamic_linker=no
;;
esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
test "$dynamic_linker" = no && can_build_shared=no
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
hardcode_action_F77=
if test -n "$hardcode_libdir_flag_spec_F77" || \
test -n "$runpath_var_F77" || \
@@ -16599,8 +16511,8 @@ else
# directories.
hardcode_action_F77=unsupported
fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
-$as_echo "$hardcode_action_F77" >&6; }
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6
if test "$hardcode_action_F77" = relink; then
# Fast installation is not supported
@@ -16611,6 +16523,36 @@ elif test "$shlibpath_overrides_runpath" = yes ||
enable_fast_install=needless
fi
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+
# The else clause should only fire when bootstrapping the
# libtool distribution, otherwise you forgot to ship ltmain.sh
@@ -16625,7 +16567,7 @@ if test -f "$ltmain"; then
# Now quote all the things that may contain metacharacters while being
# careful not to overquote the AC_SUBSTed values. We take copies of the
# variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -16652,7 +16594,6 @@ if test -f "$ltmain"; then
predeps_F77 \
postdeps_F77 \
compiler_lib_search_path_F77 \
- compiler_lib_search_dirs_F77 \
archive_cmds_F77 \
archive_expsym_cmds_F77 \
postinstall_cmds_F77 \
@@ -16668,7 +16609,6 @@ if test -f "$ltmain"; then
module_cmds_F77 \
module_expsym_cmds_F77 \
lt_cv_prog_compiler_c_o_F77 \
- fix_srcfile_path_F77 \
exclude_expsyms_F77 \
include_expsyms_F77; do
@@ -16728,12 +16668,6 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -16745,9 +16679,6 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
# A language-specific compiler.
CC=$lt_compiler_F77
@@ -16813,7 +16744,7 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
# Does compiler simultaneously support -c and -o options?
compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
-# Must we lock files when doing compilation?
+# Must we lock files when doing compilation ?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -16901,10 +16832,6 @@ predeps=$lt_predeps_F77
# shared library.
postdeps=$lt_postdeps_F77
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77
-
# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=$lt_compiler_lib_search_path_F77
@@ -16993,7 +16920,7 @@ sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
+fix_srcfile_path="$fix_srcfile_path_F77"
# Set to yes if exported symbols are required.
always_export_symbols=$always_export_symbols_F77
@@ -17043,6 +16970,7 @@ CC="$lt_save_CC"
if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
# Source file extension for Java test sources.
ac_ext=java
@@ -17051,58 +16979,33 @@ objext=o
objext_GCJ=$objext
# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
+lt_simple_compile_test_code="class foo {}\n"
# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }'
+lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n'
# ltmain only uses $CC for tagged configurations so make sure $CC is set.
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
# Allow CC to be a program name with arguments.
compiler=$CC
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
CC=${GCJ-"gcj"}
compiler=$CC
compiler_GCJ=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
# GCJ did not exist at the time GCC didn't implicitly link libc in.
archive_cmds_need_lc_GCJ=no
-old_archive_cmds_GCJ=$old_archive_cmds
-
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
lt_prog_compiler_no_builtin_flag_GCJ=
@@ -17110,14 +17013,14 @@ if test "$GCC" = yes; then
lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_prog_compiler_rtti_exceptions=no
ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-fno-rtti -fno-exceptions"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
@@ -17125,28 +17028,26 @@ else
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17131: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17034: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17135: \$? = $ac_status" >&5
+ echo "$as_me:17038: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
lt_cv_prog_compiler_rtti_exceptions=yes
fi
fi
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
@@ -17160,8 +17061,8 @@ lt_prog_compiler_wl_GCJ=
lt_prog_compiler_pic_GCJ=
lt_prog_compiler_static_GCJ=
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
if test "$GCC" = yes; then
lt_prog_compiler_wl_GCJ='-Wl,'
@@ -17183,16 +17084,14 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
# PIC is the default for these OSes.
;;
- mingw* | cygwin* | pw32* | os2*)
+ mingw* | pw32* | os2*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
-
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
;;
darwin* | rhapsody*)
@@ -17201,11 +17100,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic_GCJ='-fno-common'
;;
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
msdosdjgpp*)
# Just because we use GCC doesn't mean we suddenly get shared libraries
# on systems that don't support them.
@@ -17222,7 +17116,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
hpux*)
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case $host_cpu in
+ case "$host_cpu" in
hppa*64*|ia64*)
# +Z the default
;;
@@ -17251,7 +17145,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
darwin*)
# PIC is the default on this platform
# Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
lt_prog_compiler_pic_GCJ='-qnocommon'
lt_prog_compiler_wl_GCJ='-Wl,'
@@ -17259,17 +17153,17 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
;;
- mingw* | cygwin* | pw32* | os2*)
+ mingw* | pw32* | os2*)
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
-
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
;;
hpux9* | hpux10* | hpux11*)
lt_prog_compiler_wl_GCJ='-Wl,'
# PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
# not for PA HP-UX.
- case $host_cpu in
+ case "$host_cpu" in
hppa*64*|ia64*)
# +Z the default
;;
@@ -17292,41 +17186,18 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static_GCJ='-Bstatic'
;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
+ linux*)
+ case $CC in
icc* | ecc*)
lt_prog_compiler_wl_GCJ='-Wl,'
lt_prog_compiler_pic_GCJ='-KPIC'
lt_prog_compiler_static_GCJ='-static'
;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-fpic'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
ccc*)
lt_prog_compiler_wl_GCJ='-Wl,'
# All Alpha code is PIC.
lt_prog_compiler_static_GCJ='-non_shared'
;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- lt_prog_compiler_wl_GCJ='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- lt_prog_compiler_wl_GCJ=''
- ;;
- esac
- ;;
esac
;;
@@ -17336,19 +17207,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static_GCJ='-non_shared'
;;
- rdos*)
- lt_prog_compiler_static_GCJ='-non_shared'
+ sco3.2v5*)
+ lt_prog_compiler_pic_GCJ='-Kpic'
+ lt_prog_compiler_static_GCJ='-dn'
;;
solaris*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
lt_prog_compiler_pic_GCJ='-KPIC'
lt_prog_compiler_static_GCJ='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- lt_prog_compiler_wl_GCJ='-Qoption ld ';;
- *)
- lt_prog_compiler_wl_GCJ='-Wl,';;
- esac
;;
sunos4*)
@@ -17357,7 +17224,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_static_GCJ='-Bstatic'
;;
- sysv4 | sysv4.2uw2* | sysv4.3*)
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
lt_prog_compiler_wl_GCJ='-Wl,'
lt_prog_compiler_pic_GCJ='-KPIC'
lt_prog_compiler_static_GCJ='-Bstatic'
@@ -17370,17 +17237,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
fi
;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_pic_GCJ='-KPIC'
- lt_prog_compiler_static_GCJ='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl_GCJ='-Wl,'
- lt_prog_compiler_can_build_shared_GCJ=no
- ;;
-
uts4*)
lt_prog_compiler_pic_GCJ='-pic'
lt_prog_compiler_static_GCJ='-Bstatic'
@@ -17392,22 +17248,22 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
-$as_echo "$lt_prog_compiler_pic_GCJ" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
#
# Check to make sure the PIC flag actually works.
#
if test -n "$lt_prog_compiler_pic_GCJ"; then
-{ $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_GCJ+set}" = set; then
- $as_echo_n "(cached) " >&6
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- lt_cv_prog_compiler_pic_works_GCJ=no
+ lt_prog_compiler_pic_works_GCJ=no
ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
@@ -17415,30 +17271,28 @@ else
# with a dollar sign (not a hyphen), so the echo should work correctly.
# The option is referenced via a variable to avoid confusing sed.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17421: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17277: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17425: \$? = $ac_status" >&5
+ echo "$as_me:17281: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works_GCJ=yes
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_GCJ=yes
fi
fi
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_GCJ" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_GCJ" >&6; }
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
-if test x"$lt_cv_prog_compiler_pic_works_GCJ" = xyes; then
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
case $lt_prog_compiler_pic_GCJ in
"" | " "*) ;;
*) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
@@ -17449,7 +17303,7 @@ else
fi
fi
-case $host_os in
+case "$host_os" in
# For platforms which do not support PIC, -DPIC is meaningless:
*djgpp*)
lt_prog_compiler_pic_GCJ=
@@ -17459,59 +17313,17 @@ case $host_os in
;;
esac
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_GCJ+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works_GCJ=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works_GCJ=yes
- fi
- else
- lt_cv_prog_compiler_static_works_GCJ=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_GCJ" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_GCJ" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_GCJ" = xyes; then
- :
-else
- lt_prog_compiler_static_GCJ=
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
- $as_echo_n "(cached) " >&6
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_prog_compiler_c_o_GCJ=no
$rm -r conftest 2>/dev/null
mkdir conftest
cd conftest
mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-o out/conftest2.$ac_objext"
# Insert the option either (1) after the last *FLAGS variable, or
@@ -17519,25 +17331,23 @@ else
# Note that $ac_compile itself does not contain backslashes and begins
# with a dollar sign (not a hyphen), so the echo should work correctly.
lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17525: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17337: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:17529: \$? = $ac_status" >&5
+ echo "$as_me:17341: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ if test ! -s out/conftest.err; then
lt_cv_prog_compiler_c_o_GCJ=yes
fi
fi
- chmod u+w . 2>&5
+ chmod u+w .
$rm conftest*
# SGI C++ compiler will create directory out/ii_files/ for
# template instantiation
@@ -17548,34 +17358,34 @@ else
$rm conftest*
fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_GCJ" >&6; }
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
hard_links="nottested"
if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
# do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
hard_links=yes
$rm conftest*
ln conftest.a conftest.b 2>/dev/null && hard_links=no
touch conftest.a
ln conftest.a conftest.b 2>&5 || hard_links=no
ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
if test "$hard_links" = no; then
- { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
need_locks=warn
fi
else
need_locks=no
fi
-{ $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
runpath_var=
allow_undefined_flag_GCJ=
@@ -17606,24 +17416,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
# it will be wrapped by ` (' and `)$', so one must not match beginning or
# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
# as well as any symbol that contains `d'.
- exclude_expsyms_GCJ='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
# platforms (ab)use it in PIC code, but their linkers get confused if
# the symbol is explicitly referenced. Since portable code cannot
# rely on this symbol name, it's probably fine to never include it in
# preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
case $host_os in
cygwin* | mingw* | pw32*)
@@ -17634,10 +17433,6 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
with_gnu_ld=no
fi
;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
openbsd*)
with_gnu_ld=no
;;
@@ -17648,30 +17443,9 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
# If archive_cmds runs LD, not CC, wlarc should be empty
wlarc='${wl}'
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec_GCJ=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
# See if GNU ld supports shared libraries.
case $host_os in
- aix[3-9]*)
+ aix3* | aix4* | aix5*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs_GCJ=no
@@ -17719,10 +17493,10 @@ EOF
allow_undefined_flag_GCJ=unsupported
always_export_symbols_GCJ=no
enable_shared_with_static_runtimes_GCJ=yes
- export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
# If the export-symbols file already is a .def file (1st line
# is EXPORTS), use it as is; otherwise, prepend...
archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
@@ -17731,64 +17505,9 @@ EOF
echo EXPORTS > $output_objdir/$soname.def;
cat $export_symbols >> $output_objdir/$soname.def;
fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
-
- interix[3-9]*)
- hardcode_direct_GCJ=no
- hardcode_shlibpath_var_GCJ=no
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_GCJ='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
else
- ld_shlibs_GCJ=no
+ ld_shlibs=no
fi
;;
@@ -17802,7 +17521,7 @@ EOF
fi
;;
- solaris*)
+ solaris* | sysv5*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs_GCJ=no
cat <<EOF 1>&2
@@ -17823,33 +17542,6 @@ EOF
fi
;;
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs_GCJ=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- ld_shlibs_GCJ=no
- fi
- ;;
- esac
- ;;
-
sunos4*)
archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
wlarc=
@@ -17857,6 +17549,31 @@ _LT_EOF
hardcode_shlibpath_var_GCJ=no
;;
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_cmds_GCJ="$tmp_archive_cmds"
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ else
+ archive_expsym_cmds_GCJ="$tmp_archive_cmds"
+ fi
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
@@ -17867,11 +17584,16 @@ _LT_EOF
;;
esac
- if test "$ld_shlibs_GCJ" = no; then
- runpath_var=
- hardcode_libdir_flag_spec_GCJ=
- export_dynamic_flag_spec_GCJ=
- whole_archive_flag_spec_GCJ=
+ if test "$ld_shlibs_GCJ" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_GCJ=
+ fi
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
@@ -17883,14 +17605,14 @@ _LT_EOF
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L_GCJ=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct_GCJ=unsupported
fi
;;
- aix[4-9]*)
+ aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
@@ -17910,14 +17632,13 @@ _LT_EOF
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
- ;;
esac
exp_sym_flag='-bexport'
@@ -17936,7 +17657,7 @@ _LT_EOF
link_all_deplibs_GCJ=yes
if test "$GCC" = yes; then
- case $host_os in aix4.[012]|aix4.[012].*)
+ case $host_os in aix4.012|aix4.012.*)
# We only want to do this on AIX 4.2 and lower, the check
# below for broken collect2 doesn't work under 4.3+
collect2name=`${CC} -print-prog-name=collect2`
@@ -17944,7 +17665,7 @@ _LT_EOF
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
- :
+ hardcode_direct_GCJ=yes
else
# We have old collect2
hardcode_direct_GCJ=unsupported
@@ -17955,12 +17676,8 @@ _LT_EOF
hardcode_libdir_flag_spec_GCJ='-L$libdir'
hardcode_libdir_separator_GCJ=
fi
- ;;
esac
shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
else
# not using gcc
if test "$host_cpu" = ia64; then
@@ -17968,11 +17685,11 @@ _LT_EOF
# chokes on -Wl,-G. The following line is correct:
shared_flag='-G'
else
- if test "$aix_use_runtimelinking" = yes; then
+ if test "$aix_use_runtimelinking" = yes; then
shared_flag='${wl}-G'
else
shared_flag='${wl}-bM:SRE'
- fi
+ fi
fi
fi
@@ -18000,55 +17717,49 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
allow_undefined_flag_GCJ="-z nodefs"
- archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
else
# Determine the default libpath from the value encoded in an empty executable.
cat >conftest.$ac_ext <<_ACEOF
@@ -18067,45 +17778,39 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -18114,11 +17819,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# -berok will link without error, but may produce a broken library.
no_undefined_flag_GCJ=' ${wl}-bernotok'
allow_undefined_flag_GCJ=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_GCJ=yes
# Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_GCJ='$convenience'
+ whole_archive_flag_spec_GCJ=' '
archive_cmds_need_lc_GCJ=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
fi
fi
;;
@@ -18151,13 +17858,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# The linker will automatically build a .lib file if we build a DLL.
old_archive_From_new_cmds_GCJ='true'
# FIXME: Should let the user specify the lib program.
- old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
+ old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
enable_shared_with_static_runtimes_GCJ=yes
;;
darwin* | rhapsody*)
- case $host_os in
+ case "$host_os" in
rhapsody* | darwin1.[012])
allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
;;
@@ -18184,18 +17891,19 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
link_all_deplibs_GCJ=yes
if test "$GCC" = yes ; then
output_verbose_link_cmd='echo'
- archive_cmds_GCJ="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- module_cmds_GCJ="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- archive_expsym_cmds_GCJ="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- module_expsym_cmds_GCJ="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
else
- case $cc_basename in
+ case "$cc_basename" in
xlc*)
output_verbose_link_cmd='echo'
- archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
+ archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
;;
*)
@@ -18235,7 +17943,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | kfreebsd*-gnu)
archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec_GCJ='-R$libdir'
hardcode_direct_GCJ=yes
@@ -18258,62 +17966,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec_GCJ='${wl}-E'
;;
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
-
- hardcode_direct_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L_GCJ=yes
- fi
- ;;
-
- hpux11*)
+ hpux10* | hpux11*)
if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
;;
- ia64*)
- archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
*)
archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
;;
esac
else
- case $host_cpu in
- hppa*64*)
- archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
;;
*)
- archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
;;
esac
fi
if test "$with_gnu_ld" = no; then
- hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator_GCJ=:
-
- case $host_cpu in
- hppa*64*|ia64*)
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+ hardcode_libdir_separator_GCJ=:
hardcode_direct_GCJ=no
hardcode_shlibpath_var_GCJ=no
;;
+ ia64*)
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_direct_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_GCJ=yes
+ ;;
*)
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
hardcode_direct_GCJ=yes
export_dynamic_flag_spec_GCJ='${wl}-E'
@@ -18357,28 +18050,24 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
openbsd*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct_GCJ=yes
- hardcode_shlibpath_var_GCJ=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- export_dynamic_flag_spec_GCJ='${wl}-E'
- else
- case $host_os in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec_GCJ='-R$libdir'
- ;;
- *)
- archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
- ;;
- esac
- fi
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_GCJ='${wl}-E'
else
- ld_shlibs_GCJ=no
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ ;;
+ *)
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+ ;;
+ esac
fi
;;
@@ -18411,7 +18100,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
allow_undefined_flag_GCJ=' -expect_unresolved \*'
archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
# Both c and cxx compiler support -rpath directly
hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
@@ -18419,15 +18108,21 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_separator_GCJ=:
;;
+ sco3.2v5*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_GCJ=no
+ export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
solaris*)
no_undefined_flag_GCJ=' -z text'
if test "$GCC" = yes; then
- wlarc='${wl}'
archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
$CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
else
- wlarc=''
archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
@@ -18436,17 +18131,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_shlibpath_var_GCJ=no
case $host_os in
solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract'
- fi
- ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
esac
link_all_deplibs_GCJ=yes
;;
@@ -18503,45 +18189,36 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
fi
;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag_GCJ='${wl}-z,text'
- archive_cmds_need_lc_GCJ=no
+ sysv4.2uw2*)
+ archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=no
hardcode_shlibpath_var_GCJ=no
- runpath_var='LD_RUN_PATH'
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag_GCJ='${wl}-z ${wl}text'
if test "$GCC" = yes; then
- archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
else
- archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_GCJ=no
;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag_GCJ='${wl}-z,text'
- allow_undefined_flag_GCJ='${wl}-z,nodefs'
- archive_cmds_need_lc_GCJ=no
+ sysv5*)
+ no_undefined_flag_GCJ=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec_GCJ=
hardcode_shlibpath_var_GCJ=no
- hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- hardcode_libdir_separator_GCJ=':'
- link_all_deplibs_GCJ=yes
- export_dynamic_flag_spec_GCJ='${wl}-Bexport'
runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
;;
uts4*)
@@ -18556,10 +18233,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
fi
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
-$as_echo "$ld_shlibs_GCJ" >&6; }
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
test "$ld_shlibs_GCJ" = no && can_build_shared=no
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
#
# Do we need to explicitly link libc?
#
@@ -18577,22 +18259,21 @@ x|xyes)
# Test whether the compiler implicitly links with -lc since on some
# systems, -lgcc has to come before -lc. If gcc already passes -lc
# to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
$rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } 2>conftest.err; then
soname=conftest
lib=conftest
libobjs=conftest.$ac_objext
deplibs=
wl=$lt_prog_compiler_wl_GCJ
- pic_flag=$lt_prog_compiler_pic_GCJ
compiler_flags=-v
linker_flags=-v
verstring=
@@ -18603,7 +18284,7 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
(eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
then
archive_cmds_need_lc_GCJ=no
@@ -18615,16 +18296,16 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
cat conftest.err 1>&5
fi
$rm conftest*
- { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
-$as_echo "$archive_cmds_need_lc_GCJ" >&6; }
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
;;
esac
fi
;;
esac
-{ $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
library_names_spec=
libname_spec='lib$name'
soname_spec=
@@ -18638,7 +18319,20 @@ shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
-
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
need_lib_prefix=unknown
hardcode_into_libs=no
@@ -18656,7 +18350,7 @@ aix3*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
-aix[4-9]*)
+aix4* | aix5*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -18740,8 +18434,7 @@ cygwin* | mingw* | pw32*)
dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
+ $install_prog $dir/$dlname \$dldir/$dlname'
postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
@@ -18771,7 +18464,7 @@ cygwin* | mingw* | pw32*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
;;
esac
;;
@@ -18794,8 +18487,13 @@ darwin* | rhapsody*)
soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
+ shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
;;
@@ -18812,17 +18510,20 @@ freebsd1*)
dynamic_linker=no
;;
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[123]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
+kfreebsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
@@ -18840,19 +18541,14 @@ freebsd* | dragonfly*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- freebsd3.[01]* | freebsdelf3.[01]*)
+ freebsd3.01* | freebsdelf3.01*)
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ *) # from 3.2 on
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
esac
;;
@@ -18872,7 +18568,7 @@ hpux9* | hpux10* | hpux11*)
version_type=sunos
need_lib_prefix=no
need_version=no
- case $host_cpu in
+ case "$host_cpu" in
ia64*)
shrext_cmds='.so'
hardcode_into_libs=yes
@@ -18912,18 +18608,6 @@ hpux9* | hpux10* | hpux11*)
postinstall_cmds='chmod 555 $lib'
;;
-interix[3-9]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
irix5* | irix6* | nonstopux*)
case $host_os in
nonstopux*) version_type=nonstopux ;;
@@ -18967,7 +18651,7 @@ linux*oldld* | linux*aout* | linux*coff*)
;;
# This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -18983,7 +18667,7 @@ linux* | k*bsd*-gnu)
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -18996,6 +18680,18 @@ linux* | k*bsd*-gnu)
dynamic_linker='GNU/Linux ld.so'
;;
+knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -19033,13 +18729,8 @@ nto-qnx*)
openbsd*)
version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
+ need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
@@ -19077,8 +18768,11 @@ osf3* | osf4* | osf5*)
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
-rdos*)
- dynamic_linker=no
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
;;
solaris*)
@@ -19106,7 +18800,7 @@ sunos4*)
need_version=yes
;;
-sysv4 | sysv4.3*)
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
@@ -19139,29 +18833,6 @@ sysv4*MP*)
fi
;;
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
uts4*)
version_type=linux
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -19173,32 +18844,12 @@ uts4*)
dynamic_linker=no
;;
esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
test "$dynamic_linker" = no && can_build_shared=no
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
hardcode_action_GCJ=
if test -n "$hardcode_libdir_flag_spec_GCJ" || \
test -n "$runpath_var_GCJ" || \
@@ -19222,8 +18873,8 @@ else
# directories.
hardcode_action_GCJ=unsupported
fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
-$as_echo "$hardcode_action_GCJ" >&6; }
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
if test "$hardcode_action_GCJ" = relink; then
# Fast installation is not supported
@@ -19234,6 +18885,841 @@ elif test "$shlibpath_overrides_runpath" = yes ||
enable_fast_install=needless
fi
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_dld_link=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 19522 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 19620 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
# The else clause should only fire when bootstrapping the
# libtool distribution, otherwise you forgot to ship ltmain.sh
@@ -19248,7 +19734,7 @@ if test -f "$ltmain"; then
# Now quote all the things that may contain metacharacters while being
# careful not to overquote the AC_SUBSTed values. We take copies of the
# variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -19275,7 +19761,6 @@ if test -f "$ltmain"; then
predeps_GCJ \
postdeps_GCJ \
compiler_lib_search_path_GCJ \
- compiler_lib_search_dirs_GCJ \
archive_cmds_GCJ \
archive_expsym_cmds_GCJ \
postinstall_cmds_GCJ \
@@ -19291,7 +19776,6 @@ if test -f "$ltmain"; then
module_cmds_GCJ \
module_expsym_cmds_GCJ \
lt_cv_prog_compiler_c_o_GCJ \
- fix_srcfile_path_GCJ \
exclude_expsyms_GCJ \
include_expsyms_GCJ; do
@@ -19351,12 +19835,6 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -19368,9 +19846,6 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
# A language-specific compiler.
CC=$lt_compiler_GCJ
@@ -19436,7 +19911,7 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
# Does compiler simultaneously support -c and -o options?
compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
-# Must we lock files when doing compilation?
+# Must we lock files when doing compilation ?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -19524,10 +19999,6 @@ predeps=$lt_predeps_GCJ
# shared library.
postdeps=$lt_postdeps_GCJ
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_GCJ
-
# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
@@ -19616,7 +20087,7 @@ sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
+fix_srcfile_path="$fix_srcfile_path_GCJ"
# Set to yes if exported symbols are required.
always_export_symbols=$always_export_symbols_GCJ
@@ -19665,6 +20136,7 @@ CC="$lt_save_CC"
RC)
+
# Source file extension for RC test sources.
ac_ext=rc
@@ -19673,7 +20145,7 @@ objext=o
objext_RC=$objext
# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
# Code to be used in simple link tests
lt_simple_link_test_code="$lt_simple_compile_test_code"
@@ -19683,42 +20155,15 @@ lt_simple_link_test_code="$lt_simple_compile_test_code"
# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
# Allow CC to be a program name with arguments.
compiler=$CC
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-
-
# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
CC=${RC-"windres"}
compiler=$CC
compiler_RC=$CC
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
lt_cv_prog_compiler_c_o_RC=yes
# The else clause should only fire when bootstrapping the
@@ -19734,7 +20179,7 @@ if test -f "$ltmain"; then
# Now quote all the things that may contain metacharacters while being
# careful not to overquote the AC_SUBSTed values. We take copies of the
# variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
SED SHELL STRIP \
libname_spec library_names_spec soname_spec extract_expsyms_cmds \
old_striplib striplib file_magic_cmd finish_cmds finish_eval \
@@ -19761,7 +20206,6 @@ if test -f "$ltmain"; then
predeps_RC \
postdeps_RC \
compiler_lib_search_path_RC \
- compiler_lib_search_dirs_RC \
archive_cmds_RC \
archive_expsym_cmds_RC \
postinstall_cmds_RC \
@@ -19777,7 +20221,6 @@ if test -f "$ltmain"; then
module_cmds_RC \
module_expsym_cmds_RC \
lt_cv_prog_compiler_c_o_RC \
- fix_srcfile_path_RC \
exclude_expsyms_RC \
include_expsyms_RC; do
@@ -19837,12 +20280,6 @@ fast_install=$enable_fast_install
# The host system.
host_alias=$host_alias
host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
# An echo program that does not interpret backslashes.
echo=$lt_echo
@@ -19854,9 +20291,6 @@ AR_FLAGS=$lt_AR_FLAGS
# A C compiler.
LTCC=$lt_LTCC
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
# A language-specific compiler.
CC=$lt_compiler_RC
@@ -19922,7 +20356,7 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
# Does compiler simultaneously support -c and -o options?
compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
-# Must we lock files when doing compilation?
+# Must we lock files when doing compilation ?
need_locks=$lt_need_locks
# Do we need the lib prefix for modules?
@@ -20010,10 +20444,6 @@ predeps=$lt_predeps_RC
# shared library.
postdeps=$lt_postdeps_RC
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_RC
-
# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=$lt_compiler_lib_search_path_RC
@@ -20102,7 +20532,7 @@ sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
+fix_srcfile_path="$fix_srcfile_path_RC"
# Set to yes if exported symbols are required.
always_export_symbols=$always_export_symbols_RC
@@ -20146,8 +20576,8 @@ CC="$lt_save_CC"
;;
*)
- { { $as_echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
-$as_echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+ { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
@@ -20166,8 +20596,8 @@ $as_echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
chmod +x "$ofile"
else
rm -f "${ofile}T"
- { { $as_echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
-$as_echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+ { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
{ (exit 1); exit 1; }; }
fi
fi
@@ -20201,63 +20631,486 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-# Extract the first word of "lsb_release", so it can be a program name with args.
-set dummy lsb_release; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LSB_RELEASE+set}" = set; then
- $as_echo_n "(cached) " >&6
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case $LSB_RELEASE in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_LSB_RELEASE="$LSB_RELEASE" # Let the user override the test with a path.
- ;;
- *)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_LSB_RELEASE="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
done
-IFS=$as_save_IFS
- test -z "$ac_cv_path_LSB_RELEASE" && ac_cv_path_LSB_RELEASE="no"
- ;;
-esac
+
fi
-LSB_RELEASE=$ac_cv_path_LSB_RELEASE
-if test -n "$LSB_RELEASE"; then
- { $as_echo "$as_me:$LINENO: result: $LSB_RELEASE" >&5
-$as_echo "$LSB_RELEASE" >&6; }
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+
+
+echo "$as_me:$LINENO: checking whether char is unsigned" >&5
+echo $ECHO_N "checking whether char is unsigned... $ECHO_C" >&6
+if test "${ac_cv_c_char_unsigned+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((char) -1) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_char_unsigned=no
else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_char_unsigned=yes
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_char_unsigned" >&5
+echo "${ECHO_T}$ac_cv_c_char_unsigned" >&6
+if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
+ cat >>confdefs.h <<\_ACEOF
+#define __CHAR_UNSIGNED__ 1
+_ACEOF
+
fi
+echo "$as_me:$LINENO: checking for char" >&5
+echo $ECHO_N "checking for char... $ECHO_C" >&6
+if test "${ac_cv_type_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((char *) 0)
+ return 0;
+if (sizeof (char))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_char=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_type_char=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
+echo "${ECHO_T}$ac_cv_type_char" >&6
-# Checks for libraries.
+echo "$as_me:$LINENO: checking size of char" >&5
+echo $ECHO_N "checking size of char... $ECHO_C" >&6
+if test "${ac_cv_sizeof_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_char" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
+test_array [0] = 0
-# Checks for header files.
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 0
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- $as_echo_n "(cached) " >&6
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_char=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -20265,179 +21118,1178 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+$ac_includes_default
+long longval () { return (long) (sizeof (char)); }
+unsigned long ulongval () { return (long) (sizeof (char)); }
+#include <stdio.h>
#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (char))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (char))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (char))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_char=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_char=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
+echo "${ECHO_T}$ac_cv_sizeof_char" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR $ac_cv_sizeof_char
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for short" >&5
+echo $ECHO_N "checking for short... $ECHO_C" >&6
+if test "${ac_cv_type_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((short *) 0)
+ return 0;
+if (sizeof (short))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_short=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_type_short=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
+echo "${ECHO_T}$ac_cv_type_short" >&6
+
+echo "$as_me:$LINENO: checking size of short" >&5
+echo $ECHO_N "checking size of short... $ECHO_C" >&6
+if test "${ac_cv_sizeof_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_short" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
int
main ()
{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
+test_array [0] = 0
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stdc=yes
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_header_stdc=no
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
+test_array [0] = 0
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <string.h>
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
+test_array [0] = 0
+ ;
+ return 0;
+}
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
else
- ac_cv_header_stdc=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_short=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+$ac_includes_default
+long longval () { return (long) (sizeof (short)); }
+unsigned long ulongval () { return (long) (sizeof (short)); }
+#include <stdio.h>
#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (short))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (short))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (short))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+ ;
+ return 0;
+}
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_short=`cat conftest.val`
else
- ac_cv_header_stdc=no
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
fi
-rm -f conftest*
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_short=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
+echo "${ECHO_T}$ac_cv_sizeof_short" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6
+if test "${ac_cv_type_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((int *) 0)
+ return 0;
+if (sizeof (int))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_int=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_int" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
if test "$cross_compiling" = yes; then
- :
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+long longval () { return (long) (sizeof (int)); }
+unsigned long ulongval () { return (long) (sizeof (int)); }
+#include <stdio.h>
+#include <stdlib.h>
int
main ()
{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (int))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (int))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (int))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
return 0;
}
_ACEOF
rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- :
+ ac_cv_sizeof_int=`cat conftest.val`
else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-ac_cv_header_stdc=no
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_int=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6
+if test "${ac_cv_type_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((long *) 0)
+ return 0;
+if (sizeof (long))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long=no
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
+echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_long" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+test_array [0] = 0
-# Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:$LINENO: checking for size_t" >&5
-$as_echo_n "checking for size_t... " >&6; }
-if test "${ac_cv_type_size_t+set}" = set; then
- $as_echo_n "(cached) " >&6
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -20445,62 +22297,476 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
-typedef size_t ac__type_new_;
int
main ()
{
-if ((ac__type_new_ *) 0)
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
return 0;
-if (sizeof (ac__type_new_))
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+long longval () { return (long) (sizeof (long)); }
+unsigned long ulongval () { return (long) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (long))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_long=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for long long" >&5
+echo $ECHO_N "checking for long long... $ECHO_C" >&6
+if test "${ac_cv_type_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((long long *) 0)
+ return 0;
+if (sizeof (long long))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_size_t=yes
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_long_long=yes
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_type_size_t=no
+ac_cv_type_long_long=no
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_long_long" >&6
+
+echo "$as_me:$LINENO: checking size of long long" >&5
+echo $ECHO_N "checking size of long long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_long_long" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-$as_echo "$ac_cv_type_size_t" >&6; }
-if test $ac_cv_type_size_t = yes; then
- :
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-{ $as_echo "$as_me:$LINENO: checking for wchar_t" >&5
-$as_echo_n "checking for wchar_t... " >&6; }
-if test "${ac_cv_type_wchar_t+set}" = set; then
- $as_echo_n "(cached) " >&6
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -20509,58 +22775,143 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
-typedef wchar_t ac__type_new_;
+long longval () { return (long) (sizeof (long long)); }
+unsigned long ulongval () { return (long) (sizeof (long long)); }
+#include <stdio.h>
+#include <stdlib.h>
int
main ()
{
-if ((ac__type_new_ *) 0)
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (long long))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (long long))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (long long))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
return 0;
-if (sizeof (ac__type_new_))
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_long_long=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_long_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for float" >&5
+echo $ECHO_N "checking for float... $ECHO_C" >&6
+if test "${ac_cv_type_float+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((float *) 0)
+ return 0;
+if (sizeof (float))
return 0;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_wchar_t=yes
-else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_float=yes
+else
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_type_wchar_t=no
+ac_cv_type_float=no
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_wchar_t" >&5
-$as_echo "$ac_cv_type_wchar_t" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_type_float" >&5
+echo "${ECHO_T}$ac_cv_type_float" >&6
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:$LINENO: checking size of wchar_t" >&5
-$as_echo_n "checking size of wchar_t... " >&6; }
-if test "${ac_cv_sizeof_wchar_t+set}" = set; then
- $as_echo_n "(cached) " >&6
+echo "$as_me:$LINENO: checking size of float" >&5
+echo $ECHO_N "checking size of float... $ECHO_C" >&6
+if test "${ac_cv_sizeof_float+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
+ if test "$ac_cv_type_float" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
if test "$cross_compiling" = yes; then
# Depending upon the size, compute the lo and hi bounds.
cat >conftest.$ac_ext <<_ACEOF
@@ -20570,11 +22921,10 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
- typedef wchar_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+static int test_array [1 - 2 * !(((long) (sizeof (float))) >= 0)];
test_array [0] = 0
;
@@ -20582,23 +22932,27 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_lo=0 ac_mid=0
while :; do
cat >conftest.$ac_ext <<_ACEOF
@@ -20608,11 +22962,10 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
- typedef wchar_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)];
test_array [0] = 0
;
@@ -20620,54 +22973,162 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_hi=$ac_mid; break
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (float))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (float))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- cat >conftest.$ac_ext <<_ACEOF
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
- typedef wchar_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)];
test_array [0] = 0
;
@@ -20675,23 +23136,335 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_float=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+long longval () { return (long) (sizeof (float)); }
+unsigned long ulongval () { return (long) (sizeof (float)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (float))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (float))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (float))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_float=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_float=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_float" >&5
+echo "${ECHO_T}$ac_cv_sizeof_float" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_FLOAT $ac_cv_sizeof_float
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for double" >&5
+echo $ECHO_N "checking for double... $ECHO_C" >&6
+if test "${ac_cv_type_double+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((double *) 0)
+ return 0;
+if (sizeof (double))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_double=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_double=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5
+echo "${ECHO_T}$ac_cv_type_double" >&6
+
+echo "$as_me:$LINENO: checking size of double" >&5
+echo $ECHO_N "checking size of double... $ECHO_C" >&6
+if test "${ac_cv_sizeof_double+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_double" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_hi=-1 ac_mid=-1
while :; do
cat >conftest.$ac_ext <<_ACEOF
@@ -20701,11 +23474,10 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
- typedef wchar_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long) (sizeof (double))) >= $ac_mid)];
test_array [0] = 0
;
@@ -20713,49 +23485,464 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_lo=$ac_mid; break
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_double=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+long longval () { return (long) (sizeof (double)); }
+unsigned long ulongval () { return (long) (sizeof (double)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (double))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (double))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (double))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_double=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_lo= ac_hi=
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_double=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5
+echo "${ECHO_T}$ac_cv_sizeof_double" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for long double" >&5
+echo $ECHO_N "checking for long double... $ECHO_C" >&6
+if test "${ac_cv_type_long_double+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((long double *) 0)
+ return 0;
+if (sizeof (long double))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_long_double=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_type_long_double=no
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5
+echo "${ECHO_T}$ac_cv_type_long_double" >&6
+
+echo "$as_me:$LINENO: checking size of long double" >&5
+echo $ECHO_N "checking size of long double... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long_double+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_long_double" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)];
+test_array [0] = 0
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
@@ -20766,11 +23953,10 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
- typedef wchar_t ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)];
test_array [0] = 0
;
@@ -20778,46 +23964,52 @@ test_array [0] = 0
}
_ACEOF
rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_hi=$ac_mid
else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_lo=`expr '(' $ac_mid ')' + 1`
+ac_lo=`expr '(' $ac_mid ')' + 1`
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
-?*) ac_cv_sizeof_wchar_t=$ac_lo;;
-'') if test "$ac_cv_type_wchar_t" = yes; then
- { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (wchar_t)
+?*) ac_cv_sizeof_long_double=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute sizeof (wchar_t)
+echo "$as_me: error: cannot compute sizeof (long double), 77
See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_wchar_t=0
- fi ;;
+ { (exit 1); exit 1; }; } ;;
esac
else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -20825,9 +24017,8 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
- typedef wchar_t ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+long longval () { return (long) (sizeof (long double)); }
+unsigned long ulongval () { return (long) (sizeof (long double)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -20836,268 +24027,1070 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+ exit (1);
+ if (((long) (sizeof (long double))) < 0)
{
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld", i);
+ long i = longval ();
+ if (i != ((long) (sizeof (long double))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
}
else
{
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu", i);
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (long double))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
}
- /* Do not output a trailing newline, as this causes \r\n confusion
- on some platforms. */
- return ferror (f) || fclose (f) != 0;
+ exit (ferror (f) || fclose (f) != 0);
;
return 0;
}
_ACEOF
rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_sizeof_wchar_t=`cat conftest.val`
+ ac_cv_sizeof_long_double=`cat conftest.val`
else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-if test "$ac_cv_type_wchar_t" = yes; then
- { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (wchar_t)
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77
See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute sizeof (wchar_t)
+echo "$as_me: error: cannot compute sizeof (long double), 77
See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_wchar_t=0
- fi
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
+else
+ ac_cv_sizeof_long_double=0
+fi
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_wchar_t" >&5
-$as_echo "$ac_cv_sizeof_wchar_t" >&6; }
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for void *" >&5
+echo $ECHO_N "checking for void *... $ECHO_C" >&6
+if test "${ac_cv_type_void_p+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((void * *) 0)
+ return 0;
+if (sizeof (void *))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_void_p=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_type_void_p=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5
+echo "${ECHO_T}$ac_cv_type_void_p" >&6
+echo "$as_me:$LINENO: checking size of void *" >&5
+echo $ECHO_N "checking size of void *... $ECHO_C" >&6
+if test "${ac_cv_sizeof_void_p+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_void_p" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= 0)];
+test_array [0] = 0
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)];
+test_array [0] = 0
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) < 0)];
+test_array [0] = 0
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= $ac_mid)];
+test_array [0] = 0
-for ac_func in fabsf
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)];
+test_array [0] = 0
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_void_p=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+long longval () { return (long) (sizeof (void *)); }
+unsigned long ulongval () { return (long) (sizeof (void *)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
-#undef $ac_func
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (void *))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (void *))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (void *))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_void_p=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (void *), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_void_p=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
+echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
+
+
+if test "x${GCC}" = "xyes"
+then
+ CFLAGS="$CFLAGS"
+ echo "$as_me:$LINENO: checking \"for gcc strength-reduce bug\"" >&5
+echo $ECHO_N "checking \"for gcc strength-reduce bug\"... $ECHO_C" >&6
+if test "${ac_cv_c_gcc_strength_bug+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_c_gcc_strength_bug="yes"
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int main(void) {
+ static int Array[3];
+ unsigned int B = 3;
+ int i;
+ for(i=0; i<B; i++) Array[i] = i - 3;
+ exit( Array[1] != -2 );
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_gcc_strength_bug="no"
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_gcc_strength_bug="yes"
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_gcc_strength_bug" >&5
+echo "${ECHO_T}$ac_cv_c_gcc_strength_bug" >&6
+ if test "$ac_cv_c_gcc_strength_bug" = "yes"
+ then
+ CFLAGS="$CFLAGS -fno-strength-reduce"
+ fi
+fi
+
+
+echo "$as_me:$LINENO: checking \"whether external symbols need an underscore prefix\"" >&5
+echo $ECHO_N "checking \"whether external symbols need an underscore prefix\"... $ECHO_C" >&6
+if test "${ac_cv_c_extern_prefix+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ saved_libs=$LIBS
+LIBS="conftest_asm.s $LIBS"
+cat > conftest_asm.s <<EOF
+ .globl _ac_test
+_ac_test:
+ .long 0
+EOF
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+extern int ac_test;
int
main ()
{
-return $ac_func ();
+if (ac_test) return 1
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_extern_prefix="yes"
+else
+ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- eval "$as_ac_var=no"
+ac_cv_c_extern_prefix="no"
fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
+LIBS=$saved_libs
fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if test `eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+echo "$as_me:$LINENO: result: $ac_cv_c_extern_prefix" >&5
+echo "${ECHO_T}$ac_cv_c_extern_prefix" >&6
+if test "$ac_cv_c_extern_prefix" = "yes"
+then
+ cat >>confdefs.h <<\_ACEOF
+#define NEED_UNDERSCORE_PREFIX 1
_ACEOF
fi
-done
-# Checks for library functions.
+echo "$as_me:$LINENO: checking \"which ANSI integer type is 16 bit\"" >&5
+echo $ECHO_N "checking \"which ANSI integer type is 16 bit\"... $ECHO_C" >&6
+if test "${ac_16bit_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_16bit_type=
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int main(void) {
+ if (sizeof(short)==2)
+ return(0);
+ else if (sizeof(int)==2)
+ return(1);
+ else
+ return(2);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_16bit_type="short"
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_16bit_type="int"
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_16bit_type" >&5
+echo "${ECHO_T}$ac_16bit_type" >&6
+if test "$ac_16bit_type" = "short"
+then
+ T1_AA_TYPE16="-DT1_AA_TYPE16=short"
+ T1_INT16="short"
+else
+ T1_AA_TYPE16="-DT1_AA_TYPE16=int"
+ T1_INT16="int"
+fi
+
+
+
+echo "$as_me:$LINENO: checking \"which ANSI integer type is 32 bit\"" >&5
+echo $ECHO_N "checking \"which ANSI integer type is 32 bit\"... $ECHO_C" >&6
+if test "${ac_32bit_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_32bit_type=
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int main(void) {
+ if (sizeof(int)==4)
+ return(0);
+ else if (sizeof(long)==4)
+ return(1);
+ else
+ return(2);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_32bit_type="int"
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_32bit_type="long"
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_32bit_type" >&5
+echo "${ECHO_T}$ac_32bit_type" >&6
+if test "$ac_32bit_type" = "int"
+then
+ T1_AA_TYPE32="-DT1_AA_TYPE32=int"
+ T1_INT32="int"
+else
+ T1_AA_TYPE32="-DT1_AA_TYPE32=long"
+ T1_INT32="long"
+fi
+
+
+
+echo "$as_me:$LINENO: checking \"which ANSI integer type is 64 bit\"" >&5
+echo $ECHO_N "checking \"which ANSI integer type is 64 bit\"... $ECHO_C" >&6
+if test "${ac_64bit_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int main(void) {
+ if (sizeof(long)==8)
+ return(0);
+ else
+ return(1);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_64bit_type="long"
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_64bit_type="<none>"
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_64bit_type" >&5
+echo "${ECHO_T}$ac_64bit_type" >&6
+if test "$ac_64bit_type" = "long"
+then
+ T1_AA_TYPE64="-DT1_AA_TYPE64=long"
+else
+ T1_AA_TYPE64=
+fi
+
+
+CFLAGS="${CFLAGS} -DT1LIB_IDENT=\"\\\"${T1LIB_IDENTIFIER}\\\"\" -DGLOBAL_CONFIG_DIR=\"\\\"${T1LIB_DATA_DIR}\\\"\""
+
+
+echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6
+if test "${ac_cv_header_stat_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined(S_ISBLK) && defined(S_IFDIR)
+# if S_ISBLK (S_IFDIR)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISBLK) && defined(S_IFCHR)
+# if S_ISBLK (S_IFCHR)
+You lose.
+# endif
+#endif
-# Setup the build compiler flags and linker flags.
-# Enable debug
-# (note: the flags here are gcc-specific and may fail with other compilers)
-build_flags=""
-if test "$enable_debug" = yes; then
- build_flags="$build_flags -O0 -g -Wall -Wno-unknown-pragmas -Wparentheses -Werror"
-elif test "$enable_strict" = yes; then
- build_flags="$build_flags -DNDEBUG -Wall -Wno-unknown-pragmas -Wparentheses -Werror"
+#if defined(S_ISLNK) && defined(S_IFREG)
+# if S_ISLNK (S_IFREG)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISSOCK) && defined(S_IFREG)
+# if S_ISSOCK (S_IFREG)
+You lose.
+# endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "You lose" >/dev/null 2>&1; then
+ ac_cv_header_stat_broken=yes
else
- build_flags="$build_flags -DNDEBUG"
+ ac_cv_header_stat_broken=no
fi
+rm -f conftest*
-# Enable Graphite Trace logs - these are only used if a
-# LayoutEnvironment has a valid ostream pointer
-if test "$enable_tracing" = yes; then
- build_flags="$build_flags -DTRACING"
fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+echo "${ECHO_T}$ac_cv_header_stat_broken" >&6
+if test $ac_cv_header_stat_broken = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STAT_MACROS_BROKEN 1
+_ACEOF
-# Enable final
-if test "$enable_final" = yes; then
- build_flags="$build_flags -O3 -DNDEBUG"
fi
-# Enable profile
-if test "$enable_profile" = yes; then
- build_flags="$build_flags -pg "
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
fi
-if test "$enable_profilefn" = yes; then
- build_flags="$build_flags -g -finstrument-functions "
- LIBS="$LIBS -g -finstrument-functions -lfnccheck "
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
-# Find distrib codename
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
-{ $as_echo "$as_me:$LINENO: checking if already have REL_CODENAME" >&5
-$as_echo_n "checking if already have REL_CODENAME... " >&6; }
-if test -z "${REL_CODENAME}"; then
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:$LINENO: checking if have lsb_release" >&5
-$as_echo_n "checking if have lsb_release... " >&6; }
- if test "${LSB_RELEASE}" = "no"; then
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- REL_CODENAME="unstable"
- else
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- { $as_echo "$as_me:$LINENO: checking if LSB_RELEASE is empty" >&5
-$as_echo_n "checking if LSB_RELEASE is empty... " >&6; }
- if test -z ${LSB_RELEASE}; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- REL_CODENAME="unstable"
- else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- CODENAME=`${LSB_RELEASE} -c | sed -e 's/^\S*\s*//'`
- { $as_echo "$as_me:$LINENO: checking if release is sid" >&5
-$as_echo_n "checking if release is sid... " >&6; }
- if test ${CODENAME} = 'sid'; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- REL_CODENAME="unstable"
- else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- REL_CODENAME=${CODENAME}
- fi
- fi
- fi
+fi
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+ return 0;
+if (sizeof (size_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_size_t=yes
else
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_size_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned
+_ACEOF
+
fi
-CFLAGS="$CFLAGS $build_flags"
-CXXFLAGS="$CXXFLAGS $build_flags"
+if test "$no_x" = "yes"
+then
+MAIN_TARGET="libt1.la"
+MAIN_HEADER="t1lib.h"
+XSUBDIRS=""
+T1LIBX_OBJS=""
+T1LIBX_SRCS=""
+T1LIBX_HEADERS=""
+XOBJS=""
+else
+MAIN_TARGET="libt1.la libt1x.la"
+MAIN_HEADER="t1lib.h t1libx.h"
+XSUBDIRS="xglyph"
+T1LIBX_OBJS="t1lib/t1x11.lo"
+T1LIBX_SRCS="t1lib/t1x11.c"
+T1LIBX_HEADERS="t1lib/t1x11.h t1lib/t1libx.h"
+XOBJS="t1x11.lo"
+fi
-ac_config_files="$ac_config_files Makefile silgraphite.pc:installed-top.pc.in:silgraphite.pc.in silgraphite-uninstalled.pc:uninstalled-top.pc.in:silgraphite.pc.in src/Makefile test/Makefile test/RegressionTest/Makefile test/ProfileHarness/Makefile"
+if test "$no_x" = "yes"
+then
+CFLAGS="${CFLAGS} -DT1LIB_NO_X11_SUPPORT"
+MAKEFILES="Makefile \
+ lib/Makefile \
+ lib/type1/Makefile \
+ lib/t1lib/Makefile \
+ type1afm/Makefile \
+ examples/Makefile \
+ doc/Makefile"
+else
+MAKEFILES="Makefile \
+ lib/Makefile \
+ lib/type1/Makefile \
+ lib/t1lib/Makefile \
+ xglyph/Makefile \
+ type1afm/Makefile \
+ examples/Makefile \
+ doc/Makefile"
+fi
+
+
+ ac_config_files="$ac_config_files $MAKEFILES lib/t1lib/t1lib.h"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@@ -21116,59 +25109,39 @@ _ACEOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
+# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
+{
(set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \).
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
+ ;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
- esac |
- sort
-) |
+ esac;
+} |
sed '
- /^ac_cv_env_/b end
t clear
- :clear
+ : clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
cat confcache >$cache_file
else
- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
@@ -21177,88 +25150,44 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+DEFS=-DHAVE_CONFIG_H
ac_libobjs=
ac_ltlibobjs=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
-if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
- { (exit 1); exit 1; }; }
-fi
: ${CONFIG_STATUS=./config.status}
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
cat >$CONFIG_STATUS <<_ACEOF
#! $SHELL
# Generated by $as_me.
@@ -21277,77 +25206,17 @@ cat >>$CONFIG_STATUS <<\_ACEOF
## M4sh Initialization. ##
## --------------------- ##
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
+# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
fi
+DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
@@ -21357,41 +25226,8 @@ else
fi
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
+$as_unset ENV MAIL MAILPATH
PS1='$ '
PS2='> '
PS4='+ '
@@ -21405,19 +25241,18 @@ do
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
+if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
else
as_expr=false
fi
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -21425,119 +25260,159 @@ fi
# Name of the executable.
-as_me=`$as_basename -- "$0" ||
+as_me=`$as_basename "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
-# CDPATH.
-$as_unset CDPATH
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
as_lineno_1=$LINENO
as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
t loop
- s/-\n.*//
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
# Exit status is that of the last command.
exit
}
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir
-fi
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
+rm -f conf$$ conf$$.exe conf$$.file
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -21546,28 +25421,7 @@ else
as_mkdir_p=false
fi
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
+as_executable_p="test -f"
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -21576,14 +25430,31 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
exec 6>&1
-# Save the log message, to keep $[0] and so on meaningful, and to
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by silgraphite $as_me 2.3, which was
-generated by GNU Autoconf 2.61a. Invocation command line was
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -21591,19 +25462,30 @@ generated by GNU Autoconf 2.61a. Invocation command line was
CONFIG_COMMANDS = $CONFIG_COMMANDS
$ $0 $@
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
# Files that config.status was made for.
-config_files="$ac_config_files"
-config_commands="$ac_config_commands"
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
-_ACEOF
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
cat >>$CONFIG_STATUS <<\_ACEOF
+
ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
current configuration.
@@ -21611,38 +25493,35 @@ current configuration.
Usage: $0 [OPTIONS] [FILE]...
-h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
+ -V, --version print version number, then exit
-q, --quiet do not print progress messages
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
--file=FILE[:TEMPLATE]
instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
Configuration files:
$config_files
-Configuration commands:
-$config_commands
+Configuration headers:
+$config_headers
Report bugs to <bug-autoconf@gnu.org>."
-
_ACEOF
+
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-silgraphite config.status 2.3
-configured by $0, generated by GNU Autoconf 2.61a,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+config.status
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-Copyright (C) 2006 Free Software Foundation, Inc.
+Copyright (C) 2003 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
+srcdir=$srcdir
+INSTALL="$INSTALL"
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
@@ -21653,42 +25532,60 @@ while test $# != 0
do
case $1 in
--*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
ac_shift=:
;;
- *)
+ -*)
ac_option=$1
ac_optarg=$2
ac_shift=shift
;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
esac
case $ac_option in
# Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
CONFIG_FILES="$CONFIG_FILES $ac_optarg"
ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# This is an error.
- -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
{ (exit 1); exit 1; }; } ;;
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
+ *) ac_config_targets="$ac_config_targets $1" ;;
esac
shift
@@ -21704,434 +25601,386 @@ fi
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
if \$ac_cs_recheck; then
- set X '$SHELL' '$0'$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
fi
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-#
-# INIT-COMMANDS
-#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-# Handling of arguments.
+
+cat >>$CONFIG_STATUS <<\_ACEOF
for ac_config_target in $ac_config_targets
do
- case $ac_config_target in
- "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "silgraphite.pc") CONFIG_FILES="$CONFIG_FILES silgraphite.pc:installed-top.pc.in:silgraphite.pc.in" ;;
- "silgraphite-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES silgraphite-uninstalled.pc:uninstalled-top.pc.in:silgraphite.pc.in" ;;
- "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
- "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
- "test/RegressionTest/Makefile") CONFIG_FILES="$CONFIG_FILES test/RegressionTest/Makefile" ;;
- "test/ProfileHarness/Makefile") CONFIG_FILES="$CONFIG_FILES test/ProfileHarness/Makefile" ;;
-
- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "$MAKEFILES" ) CONFIG_FILES="$CONFIG_FILES $MAKEFILES" ;;
+ "lib/t1lib/t1lib.h" ) CONFIG_FILES="$CONFIG_FILES lib/t1lib/t1lib.h" ;;
+ "lib/t1lib/sysconf.h" ) CONFIG_HEADERS="$CONFIG_HEADERS lib/t1lib/sysconf.h:lib/t1lib/sysconf.h.in" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
{ (exit 1); exit 1; }; };;
esac
done
-
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
fi
# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
+# simply because there is no reason to put it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
+# Create a temporary directory, and hook for its removal unless debugging.
$debug ||
{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
trap '{ (exit 1); exit 1; }' 1 2 13 15
}
+
# Create a (secure) tmp directory for tmp files.
{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
} ||
{
- $as_echo "$me: cannot create a temporary directory in ." >&2
+ echo "$me: cannot create a temporary directory in ." >&2
{ (exit 1); exit 1; }
}
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-echo 'BEGIN {' >"$tmp/subs.awk"
_ACEOF
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF"
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/'
- echo "_ACEOF"
-} >conf$$subs.sh
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh
-
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
cat >>$CONFIG_STATUS <<_ACEOF
-cat >>"\$tmp/subs.awk" <<\CEOF
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^"]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF
-cat >>"\$tmp/subs.awk" <<CEOF
- for (key in S) S_is_set[key] = 1
- FS = ""
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
+#
+# CONFIG_FILES section.
+#
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@LDLIBS@,$LDLIBS,;t t
+s,@PROGEXT@,$PROGEXT,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@T1LIB_LT_CURRENT@,$T1LIB_LT_CURRENT,;t t
+s,@T1LIB_LT_REVISION@,$T1LIB_LT_REVISION,;t t
+s,@T1LIB_LT_AGE@,$T1LIB_LT_AGE,;t t
+s,@T1LIB_DATA_DIR@,$T1LIB_DATA_DIR,;t t
+s,@T1LIB_IDENTIFIER@,$T1LIB_IDENTIFIER,;t t
+s,@MAIN_TARGET@,$MAIN_TARGET,;t t
+s,@MAIN_HEADER@,$MAIN_HEADER,;t t
+s,@OPTIONS@,$OPTIONS,;t t
+s,@no_x@,$no_x,;t t
+s,@CC@,$CC,;t t
+s,@T1_AA_TYPE16@,$T1_AA_TYPE16,;t t
+s,@T1_AA_TYPE32@,$T1_AA_TYPE32,;t t
+s,@T1_AA_TYPE64@,$T1_AA_TYPE64,;t t
+s,@T1_INT16@,$T1_INT16,;t t
+s,@T1_INT32@,$T1_INT32,;t t
+s,@XSUBDIRS@,$XSUBDIRS,;t t
+s,@T1LIBX_OBJS@,$T1LIBX_OBJS,;t t
+s,@T1LIBX_SRCS@,$T1LIBX_SRCS,;t t
+s,@T1LIBX_HEADERS@,$T1LIBX_HEADERS,;t t
+s,@XOBJS@,$XOBJS,;t t
+s,@T1LIB_VERSION@,$T1LIB_VERSION,;t t
+s,@T1LIB_REVISION@,$T1LIB_REVISION,;t t
+s,@T1LIB_PATCHLEVEL@,$T1LIB_PATCHLEVEL,;t t
+s,@T1LIB_VERSIONSTRING@,$T1LIB_VERSIONSTRING,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CPP@,$CPP,;t t
+s,@X_CFLAGS@,$X_CFLAGS,;t t
+s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
+s,@X_LIBS@,$X_LIBS,;t t
+s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@EGREP@,$EGREP,;t t
+s,@LN_S@,$LN_S,;t t
+s,@ECHO@,$ECHO,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@F77@,$F77,;t t
+s,@FFLAGS@,$FFLAGS,;t t
+s,@ac_ct_F77@,$ac_ct_F77,;t t
+s,@LIBTOOL@,$LIBTOOL,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
CEOF
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-fi # test -n "$CONFIG_FILES"
-
-for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- ac_file_inputs="$ac_file_inputs $ac_f"
- done
+_ACEOF
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin";;
- esac
- ;;
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
esac
- ac_dir=`$as_dirname -- "$ac_file" ||
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
{ (exit 1); exit 1; }; }; }
+
ac_builddir=.
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
case $srcdir in
- .) # We are building in place.
+ .) # No --srcdir option. We are building in place.
ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
- ac_MKDIR_P=$MKDIR_P
- case $MKDIR_P in
- [\\/$]* | ?:[\\/]* ) ;;
- */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
esac
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-case `sed -n '/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
cat >>$CONFIG_STATUS <<_ACEOF
sed "$ac_vpsub
$extrasub
@@ -22139,171 +25988,252 @@ _ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-" $ac_file_inputs | $AWK -f "$tmp/subs.awk" >$tmp/out
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case $ac_file in
- -) cat "$tmp/out"; rm -f "$tmp/out";;
- *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
esac
- ;;
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
- :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
- esac
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
- case $ac_file$ac_mode in
- "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
- # Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # Grep'ing the whole file is not good either: AIX grep has a line
- # limit of 2048, but all sed's we know have understand at least 4000.
- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
- dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$mf" : 'X\(//\)[^/]' \| \
- X"$mf" : 'X\(//\)$' \| \
- X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
else
- continue
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
fi
- # Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running `make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "am__include" && continue
- am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
- # Find all dependency output files, they are included files with
- # $(DEPDIR) in their names. We invoke sed twice because it is the
- # simplest approach to changing $(DEPDIR) to its actual value in the
- # expansion.
- for file in `sed -n "
- s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$file" : 'X\(//\)[^/]' \| \
- X"$file" : 'X\(//\)$' \| \
- X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir=$dirpart/$fdir
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
{ (exit 1); exit 1; }; }; }
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
-done
- ;;
- esac
-done # for ac_tag
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
{ (exit 0); exit 0; }
_ACEOF
@@ -22332,3 +26262,13 @@ if test "$no_create" != yes; then
$ac_cs_success || { (exit 1); exit 1; }
fi
+
+
+
+echo
+echo "Configure finished!"
+echo " Do: 'make' to compile the t1lib-package."
+echo " Do: 'make without_doc' to compile if you do not have LaTeX."
+echo " Do: 'make install' to install the t1lib-package."
+echo ""
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/configure.com b/Build/source/libs/t1lib/t1lib-5.1.2/configure.com
new file mode 100755
index 00000000000..f7bf4ec16d2
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/configure.com
@@ -0,0 +1,890 @@
+$ goto start
+
+This command file writes the command files make.com in this directory, make.com
+and sysconf.h in [.lib.t1lib], make.com in [.lib.type1], and make.com in
+[.xglyph]. Executing the make.com in this directory will use the other
+make.com files to compile the C files and put them in the T1 object library in
+this directory, and compile and link xglyph.
+
+Xglyph requires the xaw and xmu libraries; I used the libraries that came with
+ghostview. This command file looks for a required header file in
+X11_ROOT:[XAW]. If it does not find it looks for an X11 directory tree
+parallel to this tree. If it does not find it there, it creates the command
+file, but you have to edit it to tell it where the files and libraries are
+before you can execute it. I linked ghostview using the static version of xmu
+and xaw, so I link to object libraries instead of sharable images. I renamed
+the xaw3d directory to xaw in the x11 tree of ghostview so I did not have to
+change xglyph.c. To run xglyph on V6.* of VMS, you need to define T1LIB_CONFIG
+to be the T1LIB.CONFIG file in the xglyph directory; it will also not show the
+timing information on V6.*.
+
+I have compiled the library and run xglyph on VMS V6.2, both VAX and Alpha; I
+used DECC V5.6. I use IEEE floating on Alpha and G floating on VAX.
+
+John Hasstedt
+Physics Department
+State University of New York at Stony Brook
+John.Hasstedt@sunysb.edu
+
+Nov-1999
+
+- Extended the functionality to check for xaw/xmu also in the X11 path (which
+ is the most Unix compatible way to store them ;-).
+- Added tests for shareable version of the Xaw/Xmu libraries, using the
+ shareable images if the appropriate logicals are defined. If not the object
+ libraries are used as before.
+- Added support for type1afm build
+- Adapted to t1lib 0.9.2
+
+Dec-1999
+
+- Added support for absolute pathnames for font files under OpenVMS
+
+Aug-2000
+
+- First cut of an incremental build
+
+Jul-2002
+
+- Create a shareable image on OpenVMS Alpha
+
+Feb-2003
+
+- Add missing initialization for xaw_root
+- Clarify description of Xglyph as >>test<< application
+- Improved method to build options file for shareable image
+ (Thanks to Hartmut Becker Hartmut.Becker@compaq.com)
+
+Feb-2004
+
+- Add DECC$NO_ROOTED_SEARCH_LISTS definition to get Xglyph compile ok
+ on later versions of Compaq C
+
+Nov-2004
+- Save and restore user environment instead of just overwriting
+- Build example applications
+- Add options processing
+- Polish shareable image creation
+- Start work on version perserving case
+
+Dec-2004
+- Moving defines into sysconf.h, avoiding quote madness
+
+Martin Zinser
+zinser@zinser.no-ip.info
+
+$start:
+$ ! If a user has a symbol cc or something else, don't use it.
+$ set symbol/scope=(nolocal,noglobal)
+$ say = "write sys$output"
+$ !
+$ say "Getting the version number"
+$ t1lib_identifier = "?.?"
+$ open/read in configure.
+$loop:
+$ read/end=done in rec
+$ if (f$element(0,"=",rec) .nes. "T1LIB_IDENTIFIER") then goto loop
+$ t1lib_identifier = f$element(1,"=",rec)
+$done:
+$ close in
+$ !
+$ say "Creating make.com"
+$ create make.com
+$ open/append out make.com
+$ copy sys$input: out
+$ deck
+$ 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
+$ s_case = False
+$!
+$! Setup variables holding "config" information
+$!
+$ ccopt = ""
+$ lopts = ""
+$!
+$! Which command parameters were given
+$!
+$ gosub check_opts
+$!
+$eod
+$ if (f$getsyi("ARCH_NAME") .eqs. "VAX")
+$ then
+$ float = "g_float"
+$ else
+$ float = "ieee_float"
+$ endif
+$ write out "$ cflags = ""/prefix=all/float=''float'"" + ccopt"
+$ copy sys$input: out
+$ deck
+$!
+$! Marker for futher work with name=as_is compilation to work around
+$! fact that DECW shareable does not contain mixed case entry points
+$! TBD: Compile t1x11 and xglyph along the lines of [--]motif_name.h+'source'
+$! Make sure to get the include path to the "jackets" right
+$!
+$ if s_case
+$ then
+$ create motif_name.h
+$ open/append outh motif_name.h
+$ copy sys$input: outh
+$ deck/dollar="$ eoh"
+#ifdef __cplusplus
+#define VMS_BEGIN_C_PLUS_PLUS extern "C" {
+#define VMS_END_C_PLUS_PLUS }
+#else
+#define VMS_BEGIN_C_PLUS_PLUS
+#define VMS_END_C_PLUS_PLUS
+#endif
+
+#include "motif_redefines.h"
+$ eoh
+$ close outh
+$ endif
+$ set default [.lib.t1lib]
+$ @make.com
+$ write sys$output "Compiling in [.lib.type1]"
+$ set default [-.type1]
+$ @make.com
+$ set default [--]
+$ write sys$output "Creating t1.olb"
+$ library/create t1.olb [.lib.t1lib]*.obj,[.lib.type1]*.obj
+$ write sys$output "Creating xglyph.exe"
+$ set default [.xglyph]
+$ @make.com
+$ set default [-]
+$ write sys$output "Creating type1afm.exe"
+$ set default [.type1afm]
+$ @make.com
+$ set default [-]
+$ write sys$output "Creating example applications"
+$ set default [.examples]
+$ @make.com
+$ set default [-]
+$!
+$! Establish the Compiling Environment
+$!
+$ Cpu_Model = F$GetSYI("HW_MODEL")
+$ open/write optf t1.opt
+$T1_L:
+$ file = f$search("[.lib.t1lib]*.obj")
+$ if file .eqs. "" then goto TY_L
+$ write optf file
+$ goto t1_l
+$TY_L:
+$ file = f$search("[.lib.type1]*.obj")
+$ if file .eqs. "" then goto end_opt
+$ write optf file
+$ goto ty_l
+$END_OPT:
+$ close/nolog optf
+$!
+$! Alpha gets a shareable image
+$!
+$ If Cpu_Model .gt. 1024
+$ Then
+$ write sys$output "Creating t1shr.exe"
+$ call anal_obj_axp t1.opt _link.opt
+$ open/append optf t1.opt
+$ if s_case then write optf "case_sensitive=YES"
+$ write optf "sys$share:decw$xlibshr.exe/share"
+$ close optf
+$ LINK_/NODEB/SHARE=t1shr.exe t1.opt/opt,_link.opt/opt
+$ endif
+$!
+$ dele/noconf *.opt;*
+$ write sys$output "Done"
+$ exit
+$!
+$!------------------------------------------------------------------------------
+$!
+$! 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 20040406 Skip over shareable images in option file
+$! 0.02 20041109 Fix option file for shareable images with case_sensitive=YES
+$!
+$ 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
+$ f= f$search(line)
+$ if f .eqs. ""
+$ then
+$ write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'"
+$ goto loop
+$ endif
+$ define/user sys$output nl:
+$ define/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
+$ define/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
+$ define/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;*
+$!
+$ EXIT_AA:
+$ if V then set verify
+$ endsubroutine
+$!------------------------------------------------------------------------------
+$!
+$! 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)
+$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) -
+ then s_case = true
+$ 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
+$ i = i + 1
+$ goto opt_loop
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$ eod
+$ close out
+$ !
+$ say "Creating [.lib.t1lib]sysconf.h"
+$ cc sys$input:'ccopt'/float='float'/object=test.obj
+#include <stdlib.h>
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("[.lib.t1lib]sysconf.h", "w");
+ if (!f) exit(EXIT_FAILURE);
+ fprintf(f, "#define SIZEOF_CHAR %d\n", sizeof(char));
+ fprintf(f, "#define SIZEOF_SHORT %d\n", sizeof(short));
+ fprintf(f, "#define SIZEOF_INT %d\n", sizeof(int));
+ fprintf(f, "#define SIZEOF_LONG %d\n", sizeof(long));
+#ifdef __VAX
+ fprintf(f, "#define SIZEOF_LONG_LONG %d\n", sizeof(long));
+#else
+ fprintf(f, "#define SIZEOF_LONG_LONG %d\n", sizeof(long long));
+#endif
+ fprintf(f, "#define SIZEOF_FLOAT %d\n", sizeof(float));
+ fprintf(f, "#define SIZEOF_DOUBLE %d\n", sizeof(double));
+#ifdef __VAX
+ fprintf(f, "#define SIZEOF_LONG_DOUBLE %d\n", sizeof(double));
+#else
+ fprintf(f, "#define SIZEOF_LONG_DOUBLE %d\n", sizeof(long double));
+#endif
+ fprintf(f, "#define SIZEOF_VOID_P %d\n", sizeof(void *));
+ exit(EXIT_SUCCESS);
+}
+$ link test
+$ run test
+$ open/append sysconf [.lib.t1lib]sysconf.h
+$ write sysconf ""
+$ write sysconf "#define T1_AA_TYPE16 short"
+$ write sysconf "#define T1_AA_TYPE32 int"
+$ write sysconf "#define T1_INT16 short"
+$ write sysconf "#define T1_INT32 int"
+$ write sysconf ""
+$ write sysconf "#define T1LIB_IDENT ", t1lib_identifier
+$ write sysconf ""
+$ write sysconf "#define GLOBAL_CONFIG_DIR ""T1_FONT_DIR"""
+$ close sysconf
+$ delete test.obj;*,test.exe;*
+$ !
+$ say "Creating [.lib.t1lib]make.com"
+$ copy sys$input: [.lib.t1lib]make.com
+$ deck
+$ call make parseafm.obj "cc ''cflags' parseafm" -
+ parseafm.c
+$ call make t1aaset.obj "cc ''cflags' t1aaset" -
+ t1aaset.c
+$ call make t1afmtool.obj "cc ''cflags' t1afmtool" -
+ t1afmtool.c
+$ call make t1base.obj "cc ''cflags' t1base" -
+ t1base.c
+$ call make t1delete.obj "cc ''cflags' t1delete" -
+ t1delete.c
+$ call make t1enc.obj "cc ''cflags' t1enc" -
+ t1enc.c
+$ call make t1env.obj "cc ''cflags' t1env" -
+ t1env.c
+$ call make t1finfo.obj "cc ''cflags' t1finfo" -
+ t1finfo.c
+$ call make t1load.obj "cc ''cflags' t1load" -
+ t1load.c
+$ call make t1outline.obj "cc ''cflags' t1outline" -
+ t1outline.c
+$ call make t1set.obj "cc ''cflags' t1set" -
+ t1set.c
+$ call make t1subset.obj "cc ''cflags' t1subset" -
+ t1subset.c
+$ call make t1trans.obj "cc ''cflags' t1trans" -
+ t1trans.c
+$ call make t1x11.obj "cc ''cflags' t1x11" -
+ t1x11.c
+$ exit
+$!
+$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
+$ V = 'F$Verify(0)
+$! P1 = What we are trying to make
+$! P2 = Command to make it
+$! P3 - P8 What it depends on
+$
+$ If F$Search(P1) .Eqs. "" Then Goto Makeit
+$ Time = F$CvTime(F$File(P1,"RDT"))
+$arg=3
+$Loop:
+$ Argument = P'arg
+$ If Argument .Eqs. "" Then Goto Exit
+$ El=0
+$Loop2:
+$ File = F$Element(El," ",Argument)
+$ If File .Eqs. " " Then Goto Endl
+$ AFile = ""
+$Loop3:
+$ OFile = AFile
+$ AFile = F$Search(File)
+$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+$ Goto Loop3
+$NextEL:
+$ El = El + 1
+$ Goto Loop2
+$EndL:
+$ arg=arg+1
+$ If arg .Le. 8 Then Goto Loop
+$ Goto Exit
+$
+$Makeit:
+$ VV=F$VERIFY(0)
+$ write sys$output P2
+$ 'P2
+$ VV='F$Verify(VV)
+$Exit:
+$ If V Then Set Verify
+$ENDSUBROUTINE
+$eod
+$ !
+$ say "Creating [.lib.type1]make.com"
+$ create [.lib.type1]make.com
+$ deck
+$!
+$! Just some general variables
+$!
+$ true = 1
+$ false = 0
+$ tmpnam = "temp_" + f$getjpi("","pid")
+$ tc = tmpnam + ".c"
+$!
+$ gosub check_function
+$!
+$ call make arith.obj "cc ''cflags' arith" -
+ arith.c
+$ call make curves.obj "cc ''cflags' curves" -
+ curves.c
+$ call make fontfcn.obj "cc ''cflags' fontfcn" -
+ fontfcn.c
+$ call make hints.obj "cc ''cflags' hints" -
+ hints.c
+$ call make lines.obj "cc ''cflags' lines" -
+ lines.c
+$ call make objects.obj "cc ''cflags' objects" -
+ objects.c
+$ call make paths.obj "cc ''cflags' paths" -
+ paths.c
+$ call make regions.obj "cc ''cflags' regions" -
+ regions.c
+$ call make scanfont.obj "cc ''cflags' scanfont" -
+ scanfont.c
+$ call make spaces.obj "cc ''cflags' spaces" -
+ spaces.c
+$ call make t1io.obj "cc ''cflags' t1io" -
+ t1io.c
+$ call make t1snap.obj "cc ''cflags' t1snap" -
+ t1snap.c
+$ call make t1stub.obj "cc ''cflags' t1stub" -
+ t1stub.c
+$ call make token.obj "cc ''cflags' token" -
+ token.c
+$ call make type1.obj "cc ''cflags' type1" -
+ type1.c
+$ call make util.obj "cc ''cflags' util" -
+ util.c
+$ exit
+$!
+$!------------------------------------------------------------------------------
+$!
+$! Check if a specific function needs to be implemented
+$!
+$CHECK_FUNCTION:
+$!
+$! bstring --> memset ...
+$!
+$ func = "bstring"
+$ hfile = ""
+$ open/write tmpc 'tc
+$ write tmpc "#include <string.h>"
+$ write tmpc "#include <stdlib.h>"
+$ write tmpc "int main(){"
+$ write tmpc " memset(NULL,1,1);"
+$ write tmpc "}"
+$ close tmpc
+$ gosub cc_prop_check
+$!
+$ return
+$!
+$!------------------------------------------------------------------------------
+$!
+$! Check for properties of C/C++ compiler
+$!
+$CC_PROP_CHECK:
+$ cc_prop = false
+$ set message/nofac/noident/nosever/notext
+$ on error then continue
+$ cc 'all_cflags' 'tmpnam'
+$ if $status then cc_prop = true
+$ set message/fac/ident/sever/text
+$ delete/nolog 'tmpnam'.*;*
+$ if cc_prop
+$ then
+$ if (func .nes. "")
+$ then
+$ write sys$output "Function ''func' implemented in C RTL"
+$ else
+$ write sys$output "h-file ''hfile' part of C RTL"
+$ endif
+$ else
+$ if (func .nes. "")
+$ then
+$ CALL MAKE 'func'.OBJ "CC ''cflags' ''func'.C" 'func'.C
+$ endif
+$ if (hfile .nes. "") then copy 'hfile'.h_in 'hfile'.h
+$ endif
+$ return
+$!
+$!------------------------------------------------------------------------------
+$!
+$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
+$ V = 'F$Verify(0)
+$! P1 = What we are trying to make
+$! P2 = Command to make it
+$! P3 - P8 What it depends on
+$
+$ If F$Search(P1) .Eqs. "" Then Goto Makeit
+$ Time = F$CvTime(F$File(P1,"RDT"))
+$arg=3
+$Loop:
+$ Argument = P'arg
+$ If Argument .Eqs. "" Then Goto Exit
+$ El=0
+$Loop2:
+$ File = F$Element(El," ",Argument)
+$ If File .Eqs. " " Then Goto Endl
+$ AFile = ""
+$Loop3:
+$ OFile = AFile
+$ AFile = F$Search(File)
+$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+$ Goto Loop3
+$NextEL:
+$ El = El + 1
+$ Goto Loop2
+$EndL:
+$ arg=arg+1
+$ If arg .Le. 8 Then Goto Loop
+$ Goto Exit
+$
+$Makeit:
+$ VV=F$VERIFY(0)
+$ write sys$output P2
+$ 'P2
+$ VV='F$Verify(VV)
+$Exit:
+$ If V Then Set Verify
+$ENDSUBROUTINE
+$eod
+$ !
+$ say "Creating [.xglyph]make.com"
+$ xaw_root = ""
+$ check_xaw = "X11_ROOT,X11"
+$ check_rel = f$parse("[-.x11]") - "].;"
+$ if (check_rel .nes. "")
+$ then
+$ define rel_loc "''check_rel'.]"
+$ check_xaw = check_xaw + ",rel_loc"
+$ endif
+$ i = 0
+$SEARCH_XAW:
+$ dir = f$element(i,",",check_xaw)
+$ if (dir.nes.",")
+$ then
+$ if ( f$search("''dir':[xaw]label.h") .nes. "" ) then xaw_root = dir
+$ i = i + 1
+$ goto search_xaw
+$ endif
+$ create [.xglyph]make.com
+$ open/append out [.xglyph]make.com
+$ if (xaw_root .eqs. "")
+$ then
+$ say "I could not locate the xaw and xmu files. In case you want"
+$ say "to build the Xglyph test application you need to edit"
+$ say "[.xglyph]make.com to add appropriate paths."
+$ write out "$ type/nopage sys$input"
+$ write out "In case you want to build the Xglyph test application you"
+$ write out "need to edit this file to delete the exit command and define"
+$ write out "the dir symbol for the location of the xmu and xaw libraries."
+$ write out "$ exit"
+$ write out "$ xaw_root = ""<disk>:[dir.X11"""
+$ else
+$ write out "$ xaw_root = ""''xaw_root'"""
+$ endif
+$ copy sys$input: out
+$ deck
+$ if (f$getsyi("ARCH_NAME") .eqs. "VAX")
+$ then
+$ olb_dir = "exe"
+$ else
+$ olb_dir = "exe_alpha"
+$ endif
+$ save_x11_dir = f$trnlnm("x11_directory")
+$ save_xmu_dir = f$trnlnm("xmu_directory")
+$ save_xaw_dir = f$trnlnm("xaw_directory")
+$ save_olb_dir = f$trnlnm("olb_directory")
+$ save_dnrsl = f$trnlnm("decc$no_rooted_search_lists")
+$ if (xaw_root.nes."X11") then define x11 'xaw_root',decw$include:
+$ define x11_directory decw$include:
+$ define xmu_directory 'xaw_root':[xmu]
+$ define xaw_directory 'xaw_root':[xaw]
+$ define olb_directory 'xaw_root':['olb_dir']
+$ define DECC$NO_ROOTED_SEARCH_LISTS 1
+$ open/write optf xglyph.opt
+$ write optf "xglyph.obj"
+$ write optf "[-]t1.olb/library"
+$ write optf "sys$share:decc$shr.exe/share"
+$ write optf "sys$share:decw$xextlibshr/share"
+$ write optf "sys$share:decw$xlibshr/share"
+$ write optf "sys$share:decw$xtlibshrr5/share"
+$ if (f$trnlnm("xaw3dlibshr").nes."")
+$ then
+$ write optf "xaw3dlibshr/share"
+$ else
+$ write optf "olb_directory:xaw3dlib/library"
+$ endif
+$ if (f$trnlnm("xmulibshr").nes."")
+$ then
+$ write optf "xmulibshr/share"
+$ else
+$ write optf "olb_directory:xmulib/library"
+$ endif
+$ close optf
+$ call make xglyph.obj "cc ''cflags' xglyph.c" -
+ xglyph.c
+$ call make xglyph.obj "link xglyph.opt/option" -
+ xglyph.obj [-]t1.olb
+$ if (save_x11_dir .nes. "")
+$ then
+$ define x11_directory 'save_x11_dir'
+$ else
+$ deassign x11_directory
+$ endif
+$ if (save_xmu_dir .nes. "")
+$ then
+$ define xmu_directory 'save_xmu_dir'
+$ else
+$ deassign xmu_directory
+$ endif
+$ if (save_xaw_dir .nes. "")
+$ then
+$ define xaw_directory 'save_xaw_dir'
+$ else
+$ deassign xaw_directory
+$ endif
+$ if (save_olb_dir .nes. "")
+$ then
+$ define olb_directory 'save_olb_dir'
+$ else
+$ deassign olb_directory
+$ endif
+$ if (save_dnrsl .nes. "")
+$ then
+$ define DECC$NO_ROOTED_SEARCH_LISTS 'save_dnrsl'
+$ else
+$ deassign DECC$NO_ROOTED_SEARCH_LISTS
+$ endif
+$ exit
+$!
+$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
+$ V = 'F$Verify(0)
+$! P1 = What we are trying to make
+$! P2 = Command to make it
+$! P3 - P8 What it depends on
+$
+$ If F$Search(P1) .Eqs. "" Then Goto Makeit
+$ Time = F$CvTime(F$File(P1,"RDT"))
+$arg=3
+$Loop:
+$ Argument = P'arg
+$ If Argument .Eqs. "" Then Goto Exit
+$ El=0
+$Loop2:
+$ File = F$Element(El," ",Argument)
+$ If File .Eqs. " " Then Goto Endl
+$ AFile = ""
+$Loop3:
+$ OFile = AFile
+$ AFile = F$Search(File)
+$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+$ Goto Loop3
+$NextEL:
+$ El = El + 1
+$ Goto Loop2
+$EndL:
+$ arg=arg+1
+$ If arg .Le. 8 Then Goto Loop
+$ Goto Exit
+$
+$Makeit:
+$ VV=F$VERIFY(0)
+$ write sys$output P2
+$ 'P2
+$ VV='F$Verify(VV)
+$Exit:
+$ If V Then Set Verify
+$ENDSUBROUTINE
+$eod
+$ close out
+$ say "Creating [.type1afm]make.com"
+$ create [.type1afm]make.com
+$ open/append out [.type1afm]make.com
+$ copy sys$input: out
+$ deck
+$ call make type1afm.obj "cc ''cflags' type1afm.c" -
+ type1afm.c
+$ call make type1afm.exe "link type1afm,[-]t1/library" -
+ type1afm.obj [-]t1.olb
+$ exit
+$!
+$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
+$ V = 'F$Verify(0)
+$! P1 = What we are trying to make
+$! P2 = Command to make it
+$! P3 - P8 What it depends on
+$
+$ If F$Search(P1) .Eqs. "" Then Goto Makeit
+$ Time = F$CvTime(F$File(P1,"RDT"))
+$arg=3
+$Loop:
+$ Argument = P'arg
+$ If Argument .Eqs. "" Then Goto Exit
+$ El=0
+$Loop2:
+$ File = F$Element(El," ",Argument)
+$ If File .Eqs. " " Then Goto Endl
+$ AFile = ""
+$Loop3:
+$ OFile = AFile
+$ AFile = F$Search(File)
+$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+$ Goto Loop3
+$NextEL:
+$ El = El + 1
+$ Goto Loop2
+$EndL:
+$ arg=arg+1
+$ If arg .Le. 8 Then Goto Loop
+$ Goto Exit
+$
+$Makeit:
+$ VV=F$VERIFY(0)
+$ write sys$output P2
+$ 'P2
+$ VV='F$Verify(VV)
+$Exit:
+$ If V Then Set Verify
+$ENDSUBROUTINE
+$eod
+$ close out
+$ say "Creating [.examples]make.com"
+$ create [.examples]make.com
+$ open/append out [.examples]make.com
+$ copy sys$input: out
+$ deck
+$ call make subset.obj "cc ''cflags' subset.c" -
+ subset.c
+$ call make subset.exe "link subset,[-]t1/library" -
+ subset.obj [-]t1.olb
+$ call make t1example1.obj "cc ''cflags' /include=[-.lib.t1lib] t1example1.c" -
+ t1example1.c
+$ call make t1example1.exe "link t1example1,[-]t1/library" -
+ t1example1.obj [-]t1.olb
+$ exit
+$!
+$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
+$ V = 'F$Verify(0)
+$! P1 = What we are trying to make
+$! P2 = Command to make it
+$! P3 - P8 What it depends on
+$
+$ If F$Search(P1) .Eqs. "" Then Goto Makeit
+$ Time = F$CvTime(F$File(P1,"RDT"))
+$arg=3
+$Loop:
+$ Argument = P'arg
+$ If Argument .Eqs. "" Then Goto Exit
+$ El=0
+$Loop2:
+$ File = F$Element(El," ",Argument)
+$ If File .Eqs. " " Then Goto Endl
+$ AFile = ""
+$Loop3:
+$ OFile = AFile
+$ AFile = F$Search(File)
+$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+$ Goto Loop3
+$NextEL:
+$ El = El + 1
+$ Goto Loop2
+$EndL:
+$ arg=arg+1
+$ If arg .Le. 8 Then Goto Loop
+$ Goto Exit
+$
+$Makeit:
+$ VV=F$VERIFY(0)
+$ write sys$output P2
+$ 'P2
+$ VV='F$Verify(VV)
+$Exit:
+$ If V Then Set Verify
+$ENDSUBROUTINE
+$eod
+$ close out
+$ say "Creating [.examples]t1libvms.config"
+$ create [.examples]t1libconf.fdl
+$ open/append out [.examples]t1libconf.fdl
+$ copy sys$input: out
+$ deck
+IDENT "T1lib config file"
+
+FILE
+ ORGANIZATION sequential
+
+RECORD
+ BLOCK_SPAN yes
+ CARRIAGE_CONTROL carriage_return
+ FORMAT stream_lf
+
+$eod
+$ close out
+$ create/fdl=[.examples]t1libconf.fdl [.examples]t1libvms.config
+$ open/append out [.examples]t1libvms.config
+$ copy sys$input: out
+$ deck
+This is a configuration file for t1lib
+
+FONTDATABASE=FontDataBase
+ENCODING=[-.fonts.enc];sys$disk:[]
+AFM=[-.fonts.afm];sys$disk:[]
+TYPE1=[-.fonts.type1];sys$disk:[]
+$eod
+$ close out
+$ exit
diff --git a/Build/source/libs/t1lib/configure.in b/Build/source/libs/t1lib/t1lib-5.1.2/configure.in
index f20594ae17e..eade4c0f10d 100644
--- a/Build/source/libs/t1lib/configure.in
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/configure.in
@@ -1,11 +1,54 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl
+dnl This file configure.in is part of the t1lib-package (V. 1.0).
+dnl
+dnl Author: Rainer Menzner (Rainer.Menzner@web.de)
+dnl Date: 06/25/1997
+dnl Last Modified: 2007-12-21
+dnl
+
AC_REVISION([configure.in 1.00])
-AC_INIT(t1base.c)
-AC_CONFIG_HEADERS(sysconf.h:sysconf.h.in)
-AC_CONFIG_AUX_DIR(../../config)
+AC_INIT(lib/t1lib/t1base.c)
+AC_CONFIG_HEADER(lib/t1lib/sysconf.h:lib/t1lib/sysconf.h.in)
+AC_CONFIG_AUX_DIR(ac-tools)
+
+
+dnl We set CFLAGS in order to have complete control over compiler
+dnl switches during development
+dnl CFLAGS="$CFLAGS -g -Wall"
+
+
+dnl The following variables specify version information of the
+dnl library. Starting with V. 1.0.0 the libtool scheme is used
+dnl as intended by its authors.
+dnl
+dnl Note: The name of the shared library on Linux is build as
+dnl libt1.so.$(T1LIB_LT_CURRENT)-$(T1LIB_LT_AGE).$(T1LIB_LT_AGE).$(T1LIB_LT_REVISION)
+
+dnl Since I'm forgetful sometimes, I quote the libtool infopage here:
+dnl
+dnl 1. Start with version information of `0:0:0' for each libtool library.
+dnl
+dnl 2. Update the version information only immediately before a public
+dnl release of your software. More frequent updates are unnecessary,
+dnl and only guarantee that the current interface number gets larger
+dnl faster.
+dnl
+dnl 3. If the library source code has changed at all since the last
+dnl update, then increment REVISION (`C:R:A' becomes `C:r+1:A').
+dnl
+dnl 4. If any interfaces have been added, removed, or changed since the
+dnl last update, increment CURRENT, and set REVISION to 0.
+dnl
+dnl 5. If any interfaces have been added since the last public release,
+dnl then increment AGE.
+dnl
+dnl 6. If any interfaces have been removed since the last public release,
+dnl then set AGE to 0.
-define( MACRO_T1LIB_LT_CURRENT, 5)
+define( MACRO_T1LIB_LT_CURRENT, 6)
define( MACRO_T1LIB_LT_REVISION, 2)
-define( MACRO_T1LIB_LT_AGE, 0)
+define( MACRO_T1LIB_LT_AGE, 1)
dnl -----------------------------------------------------------
@@ -30,6 +73,17 @@ T1LIB_REVISION=builtin(eval, MACRO_T1LIB_LT_AGE)
T1LIB_PATCHLEVEL=builtin(eval, MACRO_T1LIB_LT_REVISION)
T1LIB_VERSIONSTRING=\"MACRO_T1LIB_IDENTIFIER\"
+
+dnl We use this file by Andreas Zeller to check for libXaw
+builtin(include, ac-tools/ice_find_athena.m4)
+builtin(include, ac-tools/aclocal.m4)
+
+dnl We want these before the checks, so the checks can modify their values.
+test -z "$LDLIBS" && LDLIBS=-lm AC_SUBST(LDLIBS)
+test -z "$PROGEXT" && PROGEXT="" AC_SUBST(PROGEXT)
+test -z "$CFLAGS" AC_SUBST(CFLAGS)
+test -z "$LDFLAGS" AC_SUBST(LDFLAGS)
+
T1LIB_DATA_DIR="${datadir}/t1lib"
dnl The following variables should be used
@@ -39,27 +93,38 @@ AC_SUBST(T1LIB_LT_REVISION)
AC_SUBST(T1LIB_LT_AGE)
AC_SUBST(T1LIB_DATA_DIR)
AC_SUBST(T1LIB_IDENTIFIER)
-
+AC_SUBST(MAIN_TARGET)
+AC_SUBST(MAIN_HEADER)
+AC_SUBST(OPTIONS)
+AC_SUBST(no_x)
+AC_SUBST(CC)
+AC_SUBST(T1_AA_TYPE16)
+AC_SUBST(T1_AA_TYPE32)
+AC_SUBST(T1_AA_TYPE64)
+AC_SUBST(T1_INT16)
+AC_SUBST(T1_INT32)
+AC_SUBST(XSUBDIRS)
+AC_SUBST(T1LIBX_OBJS)
+AC_SUBST(T1LIBX_SRCS)
+AC_SUBST(T1LIBX_HEADERS)
+AC_SUBST(XOBJS)
AC_SUBST(T1LIB_VERSION)
AC_SUBST(T1LIB_REVISION)
AC_SUBST(T1LIB_PATCHLEVEL)
AC_SUBST(T1LIB_VERSIONSTRING)
-
-
-AC_SUBST(T1_AA_TYPE16)
-AC_SUBST(T1_AA_TYPE32)
-AC_SUBST(T1_AA_TYPE64)
+
+dnl **** Check for some programs and libraries ****
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_CPP
AC_PATH_XTRA
+ICE_FIND_ATHENA
+AM_PROG_LIBTOOL
AC_PROG_INSTALL
-AC_PROG_RANLIB
-
-sinclude(../../texk/kpathsea/withenable.ac)
dnl **** Check for some compiler/system characteristics
+
AC_C_CHAR_UNSIGNED
AC_CHECK_SIZEOF(char,0)
AC_CHECK_SIZEOF(short,0)
@@ -72,8 +137,10 @@ AC_CHECK_SIZEOF(long double,0)
AC_CHECK_SIZEOF(void *,0)
dnl **** Check for gcc strength-reduce bug ****
+
if test "x${GCC}" = "xyes"
then
+dnl We don'use
CFLAGS="$CFLAGS"
AC_CACHE_CHECK( "for gcc strength-reduce bug", ac_cv_c_gcc_strength_bug,
AC_TRY_RUN([
@@ -111,8 +178,9 @@ if test "$ac_cv_c_extern_prefix" = "yes"
then
AC_DEFINE(NEED_UNDERSCORE_PREFIX)
fi
-
+
dnl **** Check which ANSI integer type is 16 bit
+
AC_CACHE_CHECK( "which ANSI integer type is 16 bit", ac_16bit_type,
AC_TRY_RUN([
int main(void) {
@@ -126,12 +194,15 @@ int main(void) {
if test "$ac_16bit_type" = "short"
then
T1_AA_TYPE16="-DT1_AA_TYPE16=short"
+ T1_INT16="short"
else
T1_AA_TYPE16="-DT1_AA_TYPE16=int"
+ T1_INT16="int"
fi
dnl **** Check which ANSI integer type is 32 bit
+
AC_CACHE_CHECK( "which ANSI integer type is 32 bit", ac_32bit_type,
AC_TRY_RUN([
int main(void) {
@@ -145,12 +216,15 @@ int main(void) {
if test "$ac_32bit_type" = "int"
then
T1_AA_TYPE32="-DT1_AA_TYPE32=int"
+ T1_INT32="int"
else
T1_AA_TYPE32="-DT1_AA_TYPE32=long"
+ T1_INT32="long"
fi
dnl **** Check which ANSI integer type is 64 bit
+
AC_CACHE_CHECK( "which ANSI integer type is 64 bit", ac_64bit_type,
AC_TRY_RUN([
int main(void) {
@@ -166,8 +240,8 @@ else
T1_AA_TYPE64=
fi
-AC_SUBST(T1LIB_IDENTIFIER)
-AC_SUBST(T1LIB_DATA_DIR)
+
+CFLAGS="${CFLAGS} -DT1LIB_IDENT=\"\\\"${T1LIB_IDENTIFIER}\\\"\" -DGLOBAL_CONFIG_DIR=\"\\\"${T1LIB_DATA_DIR}\\\"\""
dnl **** Check for functions and header files ****
@@ -175,5 +249,73 @@ AC_HEADER_STAT()
AC_C_CONST()
AC_TYPE_SIZE_T()
-KPSE_CONFIG_FILES([Makefile])
-AC_OUTPUT
+dnl **** with or without X11 ****
+
+if test "$no_x" = "yes"
+then
+MAIN_TARGET="libt1.la"
+MAIN_HEADER="t1lib.h"
+XSUBDIRS=""
+T1LIBX_OBJS=""
+T1LIBX_SRCS=""
+T1LIBX_HEADERS=""
+XOBJS=""
+else
+MAIN_TARGET="libt1.la libt1x.la"
+MAIN_HEADER="t1lib.h t1libx.h"
+XSUBDIRS="xglyph"
+T1LIBX_OBJS="t1lib/t1x11.lo"
+T1LIBX_SRCS="t1lib/t1x11.c"
+T1LIBX_HEADERS="t1lib/t1x11.h t1lib/t1libx.h"
+XOBJS="t1x11.lo"
+fi
+
+
+dnl **** Generate output files ****
+
+dnl Some new versions of autonconf do not seem to set
+dnl -DX_DISPLAY_MISSING -> we do it by hand:
+if test "$no_x" = "yes"
+then
+CFLAGS="${CFLAGS} -DT1LIB_NO_X11_SUPPORT"
+MAKEFILES="Makefile \
+ lib/Makefile \
+ lib/type1/Makefile \
+ lib/t1lib/Makefile \
+ type1afm/Makefile \
+ examples/Makefile \
+ doc/Makefile"
+else
+MAKEFILES="Makefile \
+ lib/Makefile \
+ lib/type1/Makefile \
+ lib/t1lib/Makefile \
+ xglyph/Makefile \
+ type1afm/Makefile \
+ examples/Makefile \
+ doc/Makefile"
+fi
+
+
+AC_OUTPUT([
+$MAKEFILES \
+lib/t1lib/t1lib.h
+])
+
+
+
+echo
+echo "Configure finished!"
+echo " Do: 'make' to compile the t1lib-package."
+echo " Do: 'make without_doc' to compile if you do not have LaTeX."
+echo " Do: 'make install' to install the t1lib-package."
+echo ""
+dnl echo " Do: 'make t1python-all' to compile the t1python-package."
+dnl echo ""
+
+dnl Local Variables:
+dnl comment-start: "dnl "
+dnl comment-end: ""
+dnl comment-start-skip: "\\bdnl\\b\\s *"
+dnl compile-command: "autoconf"
+dnl End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/doc/Makefile.in
new file mode 100644
index 00000000000..0ac44e50f40
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/Makefile.in
@@ -0,0 +1,108 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# uninstall
+# clean
+# pdf (this is internally used only because it
+# interferes with the all-target)
+# ps (now=all-target)
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 04/06/1997
+# Last modified: 2004-12-12
+#
+
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+ALLCFLAGS = $(CFLAGS) $(X_CFLAGS)
+SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)'
+@SET_MAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+
+# targets to build
+
+
+all: t1lib_doc.ps
+
+
+t1lib_doc.dvi: t1lib_doc.tex intro.tex getstart.tex xglyph.tex ut1lib.tex xinterface.tex internals.tex type1afm.tex
+ latex t1lib_doc.tex
+ makeindex t1lib_doc
+ latex t1lib_doc.tex
+ latex t1lib_doc.tex
+
+
+.PHONY: clean
+
+
+ps: t1lib_doc.ps
+
+
+t1lib_doc.ps: t1lib_doc.dvi
+ dvips -o t1lib_doc.ps t1lib_doc
+
+
+pdf: t1lib_doc.tex intro.tex getstart.tex xglyph.tex ut1lib.tex xinterface.tex internals.tex type1afm.tex
+ pdflatex t1lib_doc.tex
+ makeindex t1lib_doc
+ pdflatex t1lib_doc.tex
+ pdflatex t1lib_doc.tex
+
+
+clean: dummy
+ $(RM) \#*\# *~ *.log *.aux *.bak *.dvi *.toc *.ilg *.idx *.ind *.out t1lib_doc.ps
+
+
+install: dummy
+ if (test -f t1lib_doc.ps) \
+ then \
+ $(MKINSTALLDIRS) $(DESTDIR)@T1LIB_DATA_DIR@/doc; \
+ $(INSTALL_DATA) t1lib_doc.ps $(DESTDIR)@T1LIB_DATA_DIR@/doc; \
+ fi;
+ if (test -f t1lib_doc.pdf) \
+ then \
+ $(MKINSTALLDIRS) $(DESTDIR)@T1LIB_DATA_DIR@/doc; \
+ $(INSTALL_DATA) t1lib_doc.pdf $(DESTDIR)@T1LIB_DATA_DIR@/doc; \
+ fi;
+
+
+uninstall: dummy
+ $(RM) -R $(DESTDIR)@T1LIB_DATA_DIR@/doc
+
+
+dummy:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.eps
new file mode 100644
index 00000000000..e863f33d1aa
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.eps
@@ -0,0 +1,97 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: Tee.tif
+%%CreationDate: Sat May 1 18:58:31 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 29 19
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+29.000000 19.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 29 19 8 3 0 1 2 "false 3 colorimage"
+/line 87 string def
+29 19 8
+[29 0 0 -19 0 19]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff707070707070808080606060
+606060808080606060a0a0a0ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff404040ffffffffffff808080808080ffffffc0c0c0808080
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0d0d0
+ffffffffffff808080808080fffffff0f0f0e0e0e0e0e0e0909090909090f0f0f0
+ffffffffffffffffffb0b0b0808080c0c0c0ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff808080808080
+ffffffffffffd0d0d0404040f0f0f0d0d0d0303030ffffffffffff606060a0a0a0
+ffffff505050b0b0b0ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff808080808080ffffffffffff505050b0b0b0
+ffffffffffff404040d0d0d0d0d0d0303030ffffffffffffc0c0c0505050ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff808080808080ffffffffffff000000808080808080808080808080e0e0e0
+808080404040808080808080808080a0a0a0ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff808080808080ffffff
+ffffff000000f0f0f0ffffffffffffffffffffffff808080707070ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff808080808080ffffffffffff606060808080ffffff
+ffffffffffffe0e0e0e0e0e0101010f0f0f0ffffffffffffe0e0e0ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0a0a0
+202020303030c0c0c0fffffff0f0f0404040707070808080606060e0e0e0ffffff
+a0a0a0404040808080707070909090ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.pdf
new file mode 100644
index 00000000000..e363d5b5872
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/Tee.pdf
@@ -0,0 +1,51 @@
+%PDF-1.2
+%Çì¢
+4 0 obj
+<</Length 5 0 R/Filter /FlateDecode>>
+stream
+xœí“Á ‚0†9÷Äo)r# QnU^M<›èÁ¡#8èOŸi‰ ‹&üMèëëë×öõ…mûô—«¸£Å‰uRdûE„­¢eÜd…ù‘äa›ÉʼnÜ!Nf*§•(ÖôšõçºYi­ÏVl”e9›¦)Ú
+F]×lL‘1¦‡mšæiõ°ÂÐWU…ì;œï°¼n üìtÉQJ?Û]¾±r|œ#°žçéŽ|ÁwžáoÚÃvSʳ(˜¨oX®47Å/èû¾Û Ã!L\Šˆ=~e,Ç•]=31œøQ!#N>ë§$6…Ø£½{)Äendstream
+endobj
+5 0 obj
+258
+endobj
+3 0 obj
+<<
+/Type /Page
+/MediaBox [0 0 29 19]
+/Parent 2 0 R
+/Resources << /ProcSet [/PDF /ImageC]
+>>
+/Contents 4 0 R
+>>
+endobj
+2 0 obj
+<< /Type /Pages /Kids [
+3 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<< /Type /Catalog /Pages 2 0 R
+>>
+endobj
+6 0 obj
+<< /CreationDate (D:20010110083014)
+/Producer (GNU Ghostscript 5.10)
+>>
+endobj
+xref
+0 7
+0000000000 65535 f
+0000000547 00000 n
+0000000488 00000 n
+0000000362 00000 n
+0000000015 00000 n
+0000000343 00000 n
+0000000596 00000 n
+trailer
+<< /Size 7 /Root 1 0 R /Info 6 0 R
+>>
+startxref
+683
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.eps
new file mode 100644
index 00000000000..39135ee10a7
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.eps
@@ -0,0 +1,28 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+gsave
+[ 1.1 0.2 -0.3 -0.8 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.pdf
new file mode 100644
index 00000000000..e828fd1bb2f
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/arbitrary.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.eps
new file mode 100644
index 00000000000..098ee7204d3
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.eps
@@ -0,0 +1,2251 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: concatglyphs.tif
+%%CreationDate: Wed May 5 18:26:15 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 177 137
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+177.000000 137.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 177 137 8 3 0 1 2 "false 3 colorimage"
+/line 531 string def
+177 137 8
+[177 0 0 -137 0 137]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.pdf
new file mode 100644
index 00000000000..f49d1585499
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatglyphs.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.eps
new file mode 100644
index 00000000000..5825d72c139
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.eps
@@ -0,0 +1,2251 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: concatoutlines.tif
+%%CreationDate: Wed May 5 18:26:33 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 177 137
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+177.000000 137.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 177 137 8 3 0 1 2 "false 3 colorimage"
+/line 531 string def
+177 137 8
+[177 0 0 -137 0 137]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.pdf
new file mode 100644
index 00000000000..4de3406f446
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/concatoutlines.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.eps
new file mode 100644
index 00000000000..3e570a4d56b
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.eps
@@ -0,0 +1,28 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+gsave
+[ 1.4 0 0 1 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.pdf
new file mode 100644
index 00000000000..bcaef5b12e2
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extenth.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.eps
new file mode 100644
index 00000000000..08c0c031e59
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.eps
@@ -0,0 +1,28 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+gsave
+[ 1 0 0 1.4 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.pdf
new file mode 100644
index 00000000000..078a597431b
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/extentv.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/getstart.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/getstart.tex
new file mode 100644
index 00000000000..7c118ad74d8
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/getstart.tex
@@ -0,0 +1,489 @@
+%----------------------------------------------------------------------------
+% ----- File: getstart.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2005-05-18
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library License. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the toplevel
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independent from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+
+\newpage
+\section{Getting Started}
+\subsection{Building, Installing and Removing the \tonelib-Package}
+\label{compiling}%
+As of version 0.2-beta, the \verb+autoconf+-package is used to configure and
+build the library. \verb+imake+ is no longer supported. Furthermore, starting
+with version 0.8-beta GNU \verb+libtool+ is used for managing library-specific
+stuff.
+
+Here is how to build and install \tonelib:
+\begin{enumerate}
+\item Change to \verb+T1+-directory.
+\item Run \verb+./configure+. This will check your system's setup and generate
+ the \verb+Makefile+s. By default, shared and static versions of the
+ libraries are built.
+
+ Specifying \verb+--disable-shared+ or \verb+--disable-static+ as a
+ commandline option to \verb+configure+ will suppress the generation of the
+ respective library type. Of course, these rules are superseded by the
+ capability of the system to manage those library types.
+
+ If you know shared libraries are supported on your system but
+ \verb+configure+ says that no dll can be built, some compiler option
+ may be setup incorrect. Please refer to (\ref{libtoolproblems}).
+
+ If the X11 window system is installed on the target system \tonelib\ is
+ automatically build with special X11 support. In cases where this is
+ explicitly not desired the commandline option
+ \verb+--without-x+ may be used to configure a library without extended X11
+ support. In this case the test program \verb+xglyph+ is also not build since
+ it needs X11.
+\item Run \verb+make+. This will build all the stuff including the
+ documentation. If you do not have \LaTeXe\, run
+ \verb+make without_doc+. This will skip generating the documentation.
+\item Type \verb+make install+ to install the package. You'll
+ probably need to be superuser for installing the package at the standard
+ locations. However, the files may be
+ located wherever the user wants, as long as the compiler
+ finds them at compile time. So, place them where you want.
+
+ The following files are installed when doing a \verb+make install+:
+ \begin{itemize}
+ \item \verb+lib/libt1.a+ and/or \verb+lib/libt1.so.+{\em v}\verb+.+{\em
+ r}\verb+.+{\em p} if the system supports shared libraries. In
+ the latter case, also two symbolic links to the shared library,
+ \verb+libt1.so.+{\em v} and \verb+libt1.so+, are generated. Here,
+ {\em v} and {\em r} mean version and revision of the shared
+ library. {\em p} is the patch level. Library and links are
+ installed in the directory
+ specified by the \verb+autoconf+-variable \verb+libdir+ which is by
+ default \verb+/usr/local/lib+.
+ \item The same as above holds for \verb+lib/libt1x.a+ or
+ \verb+lib/libt1x.so.+{\em v}\verb+.+{\em r}\verb+.+{\em p}
+ respectively, which contain the X11 interface functions. This
+ library is only installed if X11 support was possible and not
+ suppressed.
+ \item \verb+lib/t1lib.h+ and optionally \verb+lib/t1libx.h+. They are installed
+ in the directory pointed to by the \verb+autoconf+-variable \verb+includedir+
+ which is by default\\
+ \verb+/usr/local/include+.
+ \item The test program \verb+xglyph/xglyph+. If shared libraries are
+ supported (and not suppressed by \verb+--with-static-lib+) this
+ executable is dynamically linked to \verb+libt1.so+ and
+ \verb+libt1x.so+. It is installed in the directory pointed to by
+ the \verb+autoconf+-variable \verb+bindir+ (by default
+ \verb+/usr/local/bin+).
+ \item The converter \verb+type1afm+. The same applies as above for
+ \verb+xglyph+.
+ \item A subdirectory named \verb+t1lib-+{\em v}\verb+.+{\em r} is created in
+ the directory pointed to by the \verb+autoconf+-variable \verb+datadir+ (default
+ \verb+/usr/local/share+) and a default global configuration file
+ \verb+t1lib.config+ is installed there. Note that this configuration is
+ not of any use. It has to be setup by the administrator to specify the
+ paths to the system's Type 1 fonts and AFM files as well as any
+ \tonelib\ encoding files. Notice also that the global configuration file
+ is not installed if it already exists. This is to prevent from deletion of
+ an existent setup.
+ \item A subdirectory \verb+doc+ is created in the directory where the global
+ configuration file resides (see above). The \LaTeXe-documentation
+ \verb+t1lib_doc.dvi+ as well as all needed graphics files is installed
+ there. The \LaTeXe-sources are not installed!
+ \item If you ever want to remove \tonelib\ from your system this can be
+ achieved by calling \verb+make uninstall+. This reverts all steps
+ described above. Of course, this works only if \tonelib\ has not been
+ reconfigured using different parameters since the time of install.
+ \end{itemize}
+\end{enumerate}
+
+The top level \verb+Makefile+ further supports the targets \verb+clean+ and
+\verb+distclean+. The latter is an extension of \verb+clean+ which also
+removes the makefiles as well as the log and cache files of the configuration
+process. It forces thus a new call to \verb+configure+.
+
+A \verb+make clean+ is needed, for example, if someone experiments with static
+and shared libraries since the object files for shared libraries require the
+additional position independent code options.
+
+The directory \verb+T1/parse_afm+ is not needed at all, it is included only
+for completeness. The parts needed from this have been copied to the
+\verb+lib/t1lib+-subdirectory.
+
+
+\subsection{Notes on Using GNU {\tt libtool}}
+\label{libtoolproblems}%
+\verb+libtool+ might get confused by heterogenous compiler setups. This is the
+case, for example, on our Solaris system where by default \verb+gcc+ is used
+in combination with the system specific linker. This configuration leads to
+\verb+libtool+ reporting that no shared library can be built which definitely
+is wrong. In most cases such problems can be solved by fiddling with the
+environment entries \verb+CC+, \verb+CFLAGS+, \verb+LD+ and \verb+LDFLAGS+.
+
+\verb+libtool+ hides the real objects in subdirectories named \verb+.libs+.
+This means, after a successful build, \verb+libt1.so+ is located in
+\verb+T1/lib/.libs+. Similarly, if shared libraries are built the executable
+\verb+T1/xglyph/xglyph+ is a simple wrapper to \verb+T1/xglyph/.libs/xglyph+.
+
+
+\subsection{Runtime-Setup}
+\label{runtimesetup}%
+\subsubsection{Searchpath and Environment Setup}
+\verb+t1lib+ basically needs four types of files:
+\begin{itemize}
+\item \verb+.afm+-files: These contain font metric descriptions as
+ well as kerning and ligature information for a particular font.
+\item \verb+.pfa+-/\verb+.pfb+-files: These contain the character
+ outline descriptions. Type 1 font files may also lack any extension in their
+ filename. This is the habit on NeXTStep, for example.
+\item \verb+.enc+-files: These contain encoding arrays in a special but
+ simple form. They are only needed if someone wants to load a special
+ encoding to reencode a font.
+\item A font database file. The library needs at least one font
+ database file specification. See below for a description of this
+ font database file. Optionally, multiple font database files can be
+ specified.
+\end{itemize}
+In order to tell \tonelib\ where these files are located in the
+filesystem, a configuration file usually has to be set up by the user.
+At time of initialization (see \ref{initialization} on page
+\pageref{initialization}) the library tries to locate all data it
+needs immediately or possibly later. The
+following actions take place in order:
+\begin{enumerate}
+\item The library tries to read the variable \verb+T1LIB_CONFIG+ from
+ the program's environment.
+ The value of this variable is expected to be the
+ pathname of a configuration file for \verb+t1lib+.
+\item If the variable \verb+T1LIB_CONFIG+ exists, the file pointed to
+ by this variable will be tried to be opened. In case no environment
+ variable exists, the library will attempt to open a file called
+ \verb+.t1librc+ in the user's home directory.
+ If this file as well does
+ not exist, the global configuration file \verb+t1lib.config+ is tried to be
+ opened.\footnote{The filenames for the user's and the global configuration
+ file as well as the name of the environment entry are default names
+ defined in {\ttfamily lib/t1lib/t1misc.h}. They may be redefined by the
+ user at compile time if necessary.}
+ If all these attempts to open a configuration file did not
+ succeed, all searchpaths are left at defaults (\verb+.+) and the font database
+ file is setup to be \verb+./FontDataBase+. If this file cannot be
+ opened, the call to \verb+T1_InitLib()+ returns a NULL-pointer thus
+ indicating an error condition. The program should then exit because
+ \tonelib\ would not be able to do anything without an association of font
+ IDs to font files.
+\item Assuming a configuration file has been found and opened at any of the
+ above three locations, this file
+ is parsed and all relevant information in this file is recorded.
+\item Using the paths specified in the configuration file, the
+ font database is opened and processed. The existence of every Type 1
+ file that might later be needed is ensured. The existence of the
+ corresponding AFM file is not verified during
+ initialization, because this information is not ultimatively
+ critical when generating a character bitmap.\footnote{For example, a
+ program may generate a character table of a Type 1 font without
+ having AFM information.} Aside from this, \tonelib\ can generate the
+ required part of the AFM information on the fly.
+\end{enumerate}
+
+
+\subsubsection{The {\ttfamily t1lib} Configuration File}
+\label{subsubsec:configfile}
+
+It is the purpose of the configuration file to setup search paths and font
+databases. The format of this file is quite simple and straightforward:
+\begin{itemize}
+\item Each line starting exactly with \verb+ENCODING=+ is read in. The
+ remainder of the line is expected to be a list of searchpath
+ specifications for encoding files. No white space may appear
+ between \verb+=+ and the path specification(s).
+ Multiple paths may be specified by separating
+ the single paths with colons.\footnote{A colon is the default path separator
+ on UNIX systems. For certain other Operating Systems the path separator
+ may be a semicolon.} The path specification(s) may be
+ followed by any white space characters.
+\item Each line starting exactly with \verb+AFM=+ is read in. The
+ remainder of the line is expected to be a list of searchpath
+ specifications for Adobe Font Metric files. No white space may
+ appear between \verb+=+ and the path specification(s).
+ Multiple paths may be specified by separating
+ the single paths with colons. The path specification(s) may be
+ followed by any white space characters.
+\item Each line starting exactly with \verb+TYPE1=+ is read in. The
+ remainder of the line is expected to be a list of searchpath
+ specifications for Type 1 font files. No white space may
+ space between \verb+=+ and the path specification(s).
+ Multiple paths may be specified by separating
+ the single paths with colons. The path specification(s) may be
+ followed by any white space characters.
+\item Each line starting exactly with \verb+FONTDATABASE=+ must specify a
+ colon-separated list of font database filenames on the remainder of the
+ line. No white space is allowed between \verb+=+ and the path specification,
+ but trailing white space is allowed.
+\item Each line starting exactly with \verb+FONTDATABASEXLFD=+ must specify a
+ colon-separated list of font database filenames that adhere to the XLFD (X11
+ Logical Font Definition) on the remainder of the line. No white space is
+ allowed between \verb+=+ and the path specification, but trailing white
+ space is allowed.
+
+ This keyword is not an independent key word, rather, it allows to specify a
+ special alternative type of font database---a type that usually exists as
+ part of every X11 system. Standard and XLFD font database files may be
+ specified both in one configuration file. They interact in a way, that if an
+ XLFD font database file is specified, this overwrites the default standard
+ font database setup before the configuration is read.
+\item All other lines are ignored by the library.
+\end{itemize}
+
+A configuration file may contain multiple path declarations of one type. In this
+case, a list of path elements is built internally in the same order that the
+specifications appear in the configuration file. For example, the statement
+\begin{verbatim}
+TYPE1=/usr/X11/fonts/Type1:/home/user/fonts/Type1
+\end{verbatim}
+is equivalent to the two statements
+\begin{verbatim}
+TYPE1=/usr/X11/fonts/Type1
+TYPE1=/home/user/fonts/Type1
+\end{verbatim}
+
+In order to specify paths that incorporate {\em unusual} characters like white
+space or the path separator, it is possible to quote the path string element
+using double quotes ``\verb+"+''. All characters after the leading quotation
+mark are verbatim read to the path until the closing quotation mark
+appears. The double quotes may also become part of a path
+specification by using the escape sequence ``\verb+\"+''. Hence, the following
+statement specifies a correct albeit somewhat unusual search path:
+\begin{verbatim}
+TYPE1=/usr/X11/fonts/Type1:"/home/user/My \"Best\" Fonts/Type1"
+\end{verbatim}
+
+Here is an example of how a user could do the runtime setup: \\[2mm]
+{\bfseries Example}: \\
+Create a file, say, named \verb+t1.config+ with the following
+contents in your HOME-directory:
+\begin{verbatim}
+# This is a configuration file for t1lib
+ These two lines are considered to be comments
+
+FONTDATABASE=/home/user/test/myprog/FontDataBase
+ENCODING=/usr/local/lib/fonts/type1/enc:.
+AFM=/usr/local/lib/fonts/type1/afm:.
+TYPE1=/usr/local/lib/fonts/type1/outlines:.
+\end{verbatim}
+After this, make the environment variable \verb+T1LIB_CONFIG+ point
+to this file, i.e., \\
+\verb+setenv T1LIB_CONFIG ~/t1.config+\\
+ for \verb+tcsh+, or\\
+\verb+export T1LIB_CONFIG=~/t1.config+\\
+for \verb+bash+. Provided that the path specifications in the
+configuration file are correct, the setup is done. When setting
+\verb+T1LIB_CONFIG+ in an interactive shell as described above, the shell does
+the tilde expansion. Notice that \tonelib\ never does tilde expansion.
+
+
+\subsubsection{The Font Database File}
+\label{fontdatabase}%
+This is one more file important at startup time. I call it
+``font database file'' because it makes fonts declared in this file
+known to the library. Moreover, the association {\em declared font
+ $\Longleftrightarrow$ FontID} is done using information from this
+file. The format specification of this file is relatively free. Here are
+the exact rules:
+\begin{itemize}
+\item Line 1 contains a positive integer specifying the
+ number of fonts declared in that file. This is as in the
+ \verb+fonts.dir+ files of the X11-system.
+\item All remaining lines contain declarations of one font each. The
+ only thing taken from such a line is the last string
+ (delimited by white space) in it. It is assumed to be a
+ filename of the format {\em basename}\verb+.+{\em someextension}.
+ Furthermore, the {\em basename}-part is assumed to be the basename
+ of a fontfile name. After such a string has been parsed, the
+ {\em extension} is cut off and replaced in turn with \verb+.pfa+ and
+ \verb+.pfb+. The initialization routine tries to open a font
+ file with one of the resulting filenames.
+
+ Since V.~0.9 the ``\verb+.+'' as well as the ``{\em someextension}'' may be
+ missing completely. Moreover, \tonelib\ looks for Type 1 Font files whose
+ name do not have any extension at all. This is due to conventions of some
+ UNIX-systems.
+\item The remaining of the line, i.e., from beginning to the start of the
+ filename string is completely ignored and may contain some
+ information for other programs or be empty.
+\end{itemize}
+The format described above may seem to be underspecified, but it has
+been chosen to be compatible with the \verb+SciFonts+-fileformat,
+which is used during the initialization of the SciTeXt word
+processor. \\[2mm]
+{\bfseries Example 1}: A minimal font database file for 4 fonts:
+
+{\footnotesize
+\begin{verbatim}
+4
+isvl.afm
+isvli.afm
+isvd.afm
+isvdi.afm
+\end{verbatim}
+}%
+
+This file is {\em minimal}, because it contains just the information
+needed, and nothing not needed by \tonelib.
+
+{\bfseries Example 2}: A more
+realistic example, which allows an application to match a fully
+qualified X11 fontname to a FontID in \tonelib. This is also a
+valid font database file:
+
+{\footnotesize\hfuzz=30pt\relax
+\begin{verbatim}
+4
+Souvenir Souvenir-Light --- -itc-souvenir-light-r-normal--#-0-0-0-p-0-iso8859-1 isvl.afm
+" Souvenir-LightItalic -*- -itc-souvenir-light-i-normal--#-0-0-0-p-0-iso8859-1 isvli.afm
+" Souvenir-Demi *-- -itc-souvenir-demi-r-normal--#-0-0-0-p-0-iso8859-1 isvd.afm
+" Souvenir-DemiItalic **- -itc-souvenir-demi-i-normal--#-0-0-0-p-0-iso8859-1 isvdi.afm
+\end{verbatim}
+}%
+
+\subsubsection{Alternative Runtime Setups}
+The runtime setup described above is the most simple principle of
+getting started. However, there might be applications that deal with
+only one font file. A good example is the \verb+type1afm+-utility
+which is described in section \ref{type1afm}. In such situations it seems to
+be overkill to read a font database file and several load paths. For
+this reason there are alternative ways to specify what should be read
+from where. Their description is deferred to section
+\ref{initialization}.
+
+\subsection{A Very Simple Programming Example}
+\label{programmingexample}
+The following code is a very simple programming example of how to use
+\tonelib. It even runs on an ASCII-terminal. It is provided in the
+\verb+examples+-subdirectory of the distribution as \verb+t1example1.c+.
+This program must be compiled to object format and then linked with
+the library \verb+libt1.a+ or \verb+libt1.so+, respectively. On most systems
+the commandline
+\begin{verbatim}
+ cc -o t1example1 -I ../lib t1example1.c -L../lib -lt1 -lm
+\end{verbatim}
+should do it. For convenience reasons a \verb+Makefile.in+ is included in the
+examples directory and the stuff is built automatically.
+
+At runtime, a
+well defined setup must be found, i.e., a configuration file with path
+definitions and a font database file. These also are located in the
+\verb+examples+ subdirectory.
+
+\begin{verbatim}
+#include <stdio.h>
+#include <stdlib.h>
+#include <t1lib.h> /* All needed declarations */
+
+int main( void)
+{
+
+ GLYPH *glyph;
+ int i;
+
+ /* Set our environment to an existent config file directory */
+ putenv( "T1LIB_CONFIG=./t1lib.config");
+
+ /* Pad bitmaps to 16 bits, the default being 8 bits */
+ T1_SetBitmapPad( 16);
+
+ /* Initialize t1lib and return if error occurs. No logfile will be
+ generated */
+ if ((T1_InitLib(NO_LOGFILE)==NULL)){
+ fprintf(stderr, "Initialization of t1lib failed\n");
+ return(-1);
+ }
+
+ /* For every font in the database, generate a glyph for the string
+ "Test" at 25 bp. Use Kerning. Then dump an ASCII representation
+ of the glyph to stdout */
+ for( i=0; i<T1_Get_no_fonts(); i++){
+ glyph=T1_SetString( i, "Test", 0, 0, T1_KERNING, 25.0, NULL);
+ T1_DumpGlyph( glyph);
+ }
+
+ /* Close library and free all data */
+ T1_CloseLib();
+
+ return( 0);
+
+}
+\end{verbatim}
+
+We assume that in the current directory there is a file
+\verb+FontDataBase+ which declares two fonts, Souvenir Light and a bold
+italic variant and further, that these fonts and their
+AFM files can be found using the paths from the configuration
+file.
+If the resulting program is run, it produces some output like the following on
+\verb+stdout+:
+\newpage
+\begin{verbatim}
+Dataformat: T1_bit=0, T1_byte=1, T1_wordsize=16, T1_pad=16
+GlyphInfo: h=18, w=44, paddedW=48
+.XXXXXXXXXXXXXX. ................ ................
+XXX....XX....XXX ................ ................
+X......XX......X ................ ........X.......
+.......XX....... ................ ........X.......
+.......XX....... ................ .......XX.......
+.......XX....... ................ .......XX.......
+.......XX....... ...XXXX.......XX XXX..XXXXXXX....
+.......XX....... .XX...XX.....XX. ..XX...XX.......
+.......XX....... XX.....XX...XX.. ...X...XX.......
+.......XX....... XX.....XX...XX.. .......XX.......
+.......XX......X X......XX...XXX. .......XX.......
+.......XX......X X....XXX.....XXX XXX....XX.......
+.......XX......X XXXXXXX.......XX XXXX...XX.......
+.......XX......X XX.............. ..XXX..XX.......
+.......XX......X X............... ...XX..XX.......
+.......XX....... XX......XX..X... ...XX..XX.......
+.......XX....... XXX....X....XX.. ..XX...XX.......
+.....XXXXXX..... ..XXXXX.......XX XXX....XXXXX....
+Dataformat: T1_bit=0, T1_byte=1, T1_wordsize=16, T1_pad=16
+GlyphInfo: h=18, w=51, paddedW=64
+.XXXXXXXXXXXXXXX X............... ................ ................
+.XXXXXXXXXXXXXXX X............... ................ ................
+.XX....XXXX....X X............... ...............X X...............
+.X.....XXXX..... X............... ...............X X...............
+......XXXXX..... ................ ..............XX X...............
+......XXXXX..... ................ ..............XX X...............
+......XXXX...... ....XXXXXX...... .XXXXX.....XXXXX XXX.............
+......XXXX...... ..XXXXXXXXXX...X XXXXXXXX...XXXXX XXX.............
+......XXXX...... .XXXX...XXXX..XX XX...XXX....XXXX ................
+......XXXX...... XXXX....XXXX..XX XX....XX....XXXX ................
+.....XXXXX...... XXXX...XXXX...XX XXXX........XXXX ................
+.....XXXXX.....X XXX..XXXXX.....X XXXXXX......XXXX ................
+.....XXXX......X XXXXXXXX........ XXXXXXXX....XXXX ................
+.....XXXX......X XXX............. ..XXXXXX...XXXX. ................
+.....XXXX......X XXX.......X..XX. ....XXXX...XXXX. ................
+.....XXXX....... XXXX....XXX.XXXX ....XXXX...XXXXX XX..............
+....XXXXXX...... XXXXXXXXXX...XXX XXXXXXX....XXXXX XX..............
+...XXXXXXX...... ..XXXXXX.......X XXXXX......XXXX. ................
+\end{verbatim}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "t1lib_doc"
+%%% TeX-master: "ut1lib"
+%%% End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/internals.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/internals.tex
new file mode 100644
index 00000000000..9f232dbf598
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/internals.tex
@@ -0,0 +1,679 @@
+%----------------------------------------------------------------------------
+% ----- File: internals.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2003-03-01
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library License. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the toplevel
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independent from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+
+\newpage
+\section{Internals (incomplete)}
+\label{internals}%
+\vskip1cm
+\hrule
+\vskip0.5cm
+\begin{center}
+\sffamily\large
+{\Huge\bfseries Note!}\\
+This section is still very incomplete and some facts are not true
+anymore. This should be kept in mind. Currently I have no time to
+write this section. But I try to keep figure \ref{figure:t1data}
+consistent to the current releases. This may lead to inconsistencies
+between the text and the figure.
+\end{center}
+\hrule
+\vskip1cm
+In this section, some information on internals of \tonelib\ is given. There is
+no need for an average user to read this section although having understood
+what is going on internally might be helpful if problems occur.
+
+The basic idea of this section is to describe the data structures and to give
+information on when they are initialized, allocated and referenced. Figure
+\ref{figure:t1data} shows an image of the data-structures for the special case that
+the font with ID 0 has already been loaded and several size-instances have
+already been created.
+%-- Figure: The data structures of t1lib
+\begin{figure}
+\begin{center}
+\includegraphics*[angle=90]{t1_data}
+\end{center}
+\hrule\vskip3mm\small
+\caption{\label{figure:t1data}The internal data structures of \tonelib. The
+underlying substructures are shown only for the first font
+{\tt FontID=0}.}
+\end{figure}
+As the figure indicates, the complete area may be split into three
+different sub-areas, thereby pointing out their logical functions.
+
+\subsection{Level 0: Global Data}
+\label{globaldata}%
+This area contains information needed for the overall organization of the
+\tonelib. Its contents and its size are thus determined at the time
+\tonelib\ is initialized. This is done based on the contents of the
+configuration file and the fontdatabase file. The entries in detail are:
+\begin{itemize}
+\item {\tt Filename-Searchpaths}: This entry essentially does not depend on
+ any other data. It consists of 4 \verb+\0+-terminated strings that are read
+ from the configuration file. They are referenced internally by the global
+ symbols
+ \verb+PFAB_ptr+, \verb+AFM_ptr+, \verb+ENC_ptr+ and \verb+FDB_ptr+
+ respectively. All these are declared as \verb+unsigned char *+. These
+ strings are used by \tonelib\ to locate the respective file types. If no
+ configuration file exists or some path declaration is missing, the
+ corresponding searchpath is set to ``\verb+.+'', causing \tonelib\ to only
+ search the current working directory.
+\item \verb+no_fonts_ini+: This value is assigned after examining the
+ fontdatabase file. It is meant to store the number of fonts initially
+ declared in the fontdatabase file. In other words, it is assigned the
+ integer number located on the first line of the fontdatabase file.
+\item \verb+no_fonts+: The number of actually allocated fonts. Initially, this
+ quantity is identical to \verb+no_fonts_ini+. But if one creates a new
+ logical font by calling \verb+T1_CopyFont()+ this counter is incremented to
+ keep track of allocated fonts. \verb+no_fonts+ thus represents most large
+ \verb+FontID+ minus 1 that makes sense to specify to any function of
+ \tonelib.
+\item \verb+no_fonts_limit+: The number of fonts for which memory is currently
+ allocated. This also is initially set to \verb+no_fonts_ini+ and is
+ automatically enlarged to a multiple of the initial value if a call to
+ \verb+T1_CopyFont()+ requires additional memory for logical fonts (see
+ \ref{logicalfonts}).
+\item \verb+bitmap_pad+: This variable contains the number of bits to which
+ scanlines of bitmaps and antialiased bitmaps are padded. It is set during
+ initialization, either to a default value or to the value the application
+ specified before starting initialization using
+ \verb+T1_SetBimapPad()+. Allowed values are currently `8', `16' and `32'.
+\item \verb+endian+: During initialization the hardware is checked for
+ representation of data in memory. If Big Endian is used, \verb+endian+ is
+ set to \verb+1+ and otherwise it is set to \verb+0+. \verb+endian+ is needed
+ at several times when an application or \tonelib\ itself must know the
+ byte order of words and long words.
+\item \verb+pFontArray+: This a pointer to an array of structures whose type
+ is referred to as \\
+ \verb+FONTPRIVATE+ in \tonelib. The contents of these
+ structures will be described below. After \tonelib\ has been
+ initialized, memory is allocated for exactly \verb+no_fonts_ini+
+ structures. This memory pool may be enlarged later if the one wants to make
+ use of logical fonts, for example. The data in these structures initially is
+ not specified. It is written with meaningful values when a font is loaded
+ into memory. The index to access this array-elements is the well known font
+ identification number (\verb+FontID+).
+\item \verb+pFontFileNameIDArray+: A pointer to a memory area where the
+ font file names corresponding to the \verb+FontID+s are stored. During
+ initialization, \tonelib\ looks for font files with extension \verb+.pfa+
+ and \verb+.pfb+. The basename of the file found is stored in this area and
+ if the font is to be loaded later, its font file name is looked up here.
+\end{itemize}
+We should now discuss the entries of the structures of type
+\verb+FONTPRIVATE+. The term \verb+FONTPRIVATE+ indicates that every font
+needs its own structure area. As mentioned earlier, this area is initialized
+when the corresponding font is loaded.
+\begin{itemize}
+\item \verb+pAFMData+: A pointer to a memory area where Adobe Font Metric data
+ of the font is stored. The memory area itself is build by the
+ \verb+parse_afm+-package which is supplied by Adobe System and included in
+ \tonelib. This happens while a font is loaded. In case there is no AFM file
+ for the font in question, this pointer is given the value \verb+NULL+.
+\item \verb+pType1Data+: A pointer to the data area where the Type 1
+ information is stored. The known PostScript Type 1 objects
+ Charstrings-dictionary, Subroutines, Othersubroutines and
+ Fontinfo-dictionary are located here. The memory is filled with data during
+ parsing the font file when the font is loaded.
+\item \verb+pFontEnc+: A pointer to an optional external encoding
+ vector. During initialization, this pointer is set to \verb+NULL+, thus
+ indicating that by default the font's internal encoding should be used.
+ If a font is reencoded using a previously loaded encoding vector from an
+ encoding file, this pointer simply is assigned the address of a valid
+ encoding array somewhere in memory.
+\item \verb+vm_base+: The base address of the virtual memory required by the
+ font. Unlike the original rasterizer, which allocated virtual memory in
+ chunks of a fixed size, t1lib uses another principle. Since it is \`a
+ priori not obvious how many virtual memory a font consumes, \tonelib\ tries
+ to load a font repeatedly and increases the amount of virtual memory during
+ every trial. In order not to waste memory, the memory is reallocated to the
+ needed size when the font is completely loaded. Finally, the starting
+ address of the virtual memory is needed when a font is to be unloaded and
+ the memory it consumes is to be given back to system.
+\item \verb+pFontSizeDeps+: A pointer to the area where the size dependent
+ data is to be stored. This data essentially consists of generated glyphs
+ plus some administrative item (see \ref{sizedependentfontdata}).
+\item \verb+FontMatrix+: A matrix of four \verb+double+-values specifying the
+ font matrix. If the FontInfo-dictionary of the font file defines a
+ FontMatrix, it is copied to this location. If not, a default matrix is
+ used which does no transformation and scales to $1/1000$~bp.
+\item \verb+FontTransform+: A matrix that will be concatenated with the
+ FontMatrix to produce the final transformation of the characters. It is this
+ matrix that is modified if a font is to be slanted or extended.
+\item \verb+slant+: A slant factor for the current font. Note that this
+ value is initially 0, even for italic font. Only artificially slanting a
+ font leads to values different from 0.
+\item \verb+extend+: The horizontal extension factor for the current font. Its
+ default value is 1 and the font is thus rendered at its natural width.
+\item \verb+physical+: This is a switch that marks a font either being
+ ``physical'' or ``logical''. A physical font by definition is a font for
+ which a Type 1 font file is available and for which thus Level 1
+ (size-independent) data is present (see Fig.\ 5.1). In contrast, the term
+ ``logical font'' refers to a structure of type \verb+FONTPRIVATE+ whose
+ entry \verb+pType1Data+ points to Level 1 data of another (physical)
+ font. This \verb+FONTPRIVATE+-structure is created by calling
+ \verb+T1_CopyFont()+ with the identification number of an existing physical
+ font as argument (see \ref{logicalfonts}).
+\item \verb+refcount+: This counter keeps track on how much logical fonts
+ refer to the physical font that is represented by the current structure of
+ type \verb+FONTPRIVATE+. In this since, \verb+refcount+ is only meaningful for
+ physical fonts. It is necessary to keep track of the reference of logical
+ fonts because if this font would be removed from memory by calling
+ \verb+T1_DeleteFont()+, the Level 1 font data memory area would be given back
+ to the system but the logical fonts referring to that font would still
+ expect to find Type 1 or Font Metric data at this address. By checking
+ \verb+refcount+, \verb+T1_DeleteFont()+ can check for logical fonts referring
+ to the font in question and prevent from removing this font from memory.
+
+ In structures describing logical fonts, \verb+refcount+ is used to
+ store the information which physical font this logical font is
+ referring to. This information is also needed by
+ \verb+T1_DeleteFont()+ since when removing logical fonts, the
+ reference counter of the corresponding physical font has to be
+ decremented.
+\item \verb+space_position+: This variable stores the encoding index of the
+ ``space''-character of the current font. If the space character does not
+ appear in the current font's encoding, \verb+space_position+ is assigned
+ -1. It follows that \verb+space_position+
+ is assigned when (1) a font loaded and (2) every time a
+ font is reencoded. Why is it convenient to store the position of the space
+ character in the encoding vector? The properties of the space character are
+ set apart from the other characters' properties not only by the fact that it
+ does not produce any colored pixels but also by that it may shrink and
+ stretch in \tonelib. As a consequence a space character is treated by simply
+ inserting a horizontal escapement of the width of the space
+ character---corrected by the quantity \verb+space_off+ that a user may
+ specify (see \ref{generatingbitmaps}). This involves always checking every
+ character for being the space character and since the encoding principle is
+ used in \tonelib, every check needs a call to \verb+strcmp()+. This overhead
+ is avoided if the position of space is stored.
+\end{itemize}
+\subsection{Level 1: Size-Independent Font Data}
+\label{sizeindependentfontdata}%
+Size-independent data may be split into three categories as indicated in
+figure \ref{figure:t1data}. The external encoding is optional and is generated
+by loading an encoding file as described in \ref{encoding}. It is simply an
+array of 256 pointers to \verb+unsigned char+ and an ensemble of 256
+\verb+\0+-terminated strings. Each pointer references one of the 256 strings
+in order. The strings are the characters' names to be defined in a
+\tonelib-encoding file.
+
+The internal Type 1 data structures hold all data specified in a type font
+file. I do not want to describe these data structures here, because this could
+fill a book. Adobe has made the description of the Type 1 font format
+available to the public.
+
+The Adobe Font Metrics area is entirely created by the
+\verb+parse_afm+-package. Adobe has made this available by means of the file
+\verb+parseAFM.shar+ which is a shell-archive and included in \tonelib\ in the
+subdirectory \verb+parse_afm+.
+
+\subsection{Level 2: Size-Dependent Font Data}
+\label{sizedependentfontdata}%
+
+$\ldots$
+
+\newpage
+
+\section{Stroked Characters}
+\label{strokingimplementation}%
+This section is only meant for the reader interested in details about the
+algorithm used to create stroked versions from outlines intended to be
+filled. It can help to understand the code I added to \verb+type1.c+, which
+may seem a little bit strange.
+
+The basic idea to achieve stroked outlines was to map the stroking operation
+to a simple filling operation as already implemented by the rasterizer. Why
+did I choose this approach? Well, the actual reason for doing so was that I
+felt like doing so. One of the pivotal problems in this context turned out to
+be the computation of a third order Bezier curve, being located {\em in
+ parallel} to a given third order Bezier curve---a problem set which
+everybody on the net said to be impossible to solve. After some experimenting
+I had to admit that these people actually were right: It is not possible to
+solve this problem in general, in particular because tracing a given cubic
+Bezier spline using a finite pen width might produce delimiting curves which
+aren't Bezier splines at all. In particular, the angular range and the pen
+width in relation to the original curve's bend are of importance.
+
+However, under some constraints, which usually are fulfilled by adhering to
+the Adobe design rules for Type 1 Fonts and by choosing reasonable stroke
+widths, it is possible to approximate these delimiting curves by cubic Bezier
+splines.
+
+\subsection{Approach}
+Type 1 character outline descriptions consist of mathematically thin defining curves
+and lines with an associated running direction. By convention, regions left of
+these defining curves are painted and regions right of these curves are left
+blank. For each properly defined character, this way, a finite area to be filled
+results by applying this rule, especially because for filled characters every
+subpath must be closed. Figure~\ref{figure:stroking1}~\fbox{A} shows the
+character ``8'' from the ComputerModern Roman font as an example.
+\begin{figure}[t]
+\hfill
+\fbox{A}\includegraphics[scale=0.5]{t1dump/t1dump_eight}
+\hfill
+\fbox{B}\includegraphics[scale=0.5]{t1dump/t1dump_o}
+\hfill\break
+\hrule\vskip3mm\small
+\caption{\label{figure:stroking1}\fbox{A} Character ``8'' from font
+ ComputerModern Roman. The arrows indicate the direction of the paths. From
+ the outer subpath it follows that the inner region will be filled (left of the
+ path). From this massive black region, the holes are cut by means of the two
+ inner subpaths (and their direction). \fbox{B} The principle of creating a
+ stroked character by filling a newly created set of subpaths which surround
+ the original path in an appropriate manor.}
+\end{figure}
+We find three subpaths which by means of their direction relations yield the
+filled character.
+
+When talking about {\em stroking}, we mean tracing a pen of finite width along
+these subpaths. When doing so, a new finite (more complex) region of ink is
+built. Actually we can consider this filled region being the result of filling
+a newly created path that consists of two subpaths surrounding the original
+path and having appropriate directions. These newly created subpaths are
+referred as the {\em right path} and the {\em left path}.
+Figure~\ref{figure:stroking1} \fbox{B} illustrates this idea for the
+character ``o''. The original path is represented by dashed curves whereas
+left paths and right paths are shown as solid curves. The respective
+directions are indicated by arrows.
+
+Now, what are the steps required to compute a right path or left path from a
+given path and given a certain strokewidth? Firstly, for each path segment two
+{\em parallel paths} the right and the left path, located half the strokewidth
+right and left of the original path have to be computed. This is shown for the
+character ``t'' in Figure~\ref{figure:stroking2}, \fbox{A}.
+\begin{figure}[t]
+\hfill
+\fbox{A}\includegraphics[scale=0.5]{t1dump/t1dump_t_1}
+\hfill
+\fbox{B}\includegraphics[scale=0.5]{t1dump/t1dump_t_2}
+\hfill\break
+\hrule\vskip3mm\small
+\caption{\label{figure:stroking2}\fbox{A} Character ``t'' from font
+ ComputerModern Roman. The original path is shown in a thick dashed
+ style. Each segment is surrounded by a parallel path to the right hand side
+ and a parallel path to the left hand side.
+ \fbox{B} Required additional connection segments in order to complete the
+ outline path.}
+\end{figure}
+
+In particular, it turns out that in order to connect two parallel right or
+left paths of two neighboring original path segments, additional path segments
+are required. Therefore, in a second step, these parallel path
+segments---which in general may be disjoint---have to be connected
+appropriately. These additional path segments are shown in \fbox{B} of the
+figure. We term these path segments {\em Prolongation Segments}. They
+are always built as straight lines. It is also obvious, that for convex edges,
+prolongation actually is what it indicates, and for concave edges, some trick
+must be applied so that prolongation yields a path that actually {\em
+ shortens} the respective parallel path segments.
+
+\subsection{Computation of Parallel Paths}
+\label{parallelpaths}%
+For straight lines, the notion of a parallel path in distance $w/2$ immediately
+becomes evident, but what about Bezier curves? Let us define the parallel of a
+curve as the infinite set of points, that results from tracing along the
+curve and for each point of the curve computing the point which in direction
+orthogonally to the curve's tangent at the respective location is just the
+distance $w/2$ apart.
+
+The {\em parallel curve} resulting from the principle above actually no longer
+is a third order Bezier curve. But if a few additional constraints hold, it
+can be approximated quite well by such a third order Bezier curve:
+\begin{itemize}
+\item The curvature should not exceed an angular range of 90 degrees. This
+ condition automatically is fulfilled for Type 1 fonts which adhere to the
+ Adobe recommendations.
+\item The strokewidth $w$ the curve should be drawn width is small compared to
+ the extension and the curvature of the curve. This principle usually is
+ fulfilled by nature because tracing a character outline path with a very
+ thick pen won't lead to a good representation of the character.
+\end{itemize}
+In the following, we will describe how to compute a parallel Bezier curve
+defined by four points $\vec{A}'$, $\vec{B}'$, $\vec{C}'$ and $\vec{D}'$,
+given an original Bezier curve defined by four points $\vec{A}$, $\vec{B}$,
+$\vec{C}$ and $\vec{D}$ and a strokewidth $w$. The computation of parallel
+straight lines results as the special case of only respecting the points
+$\vec{A}$ and $\vec{D}$ from these considerations.
+
+Figure~\ref{figure:stroking3} represents the basis of our discussion.
+\begin{figure}[t]
+\centerline{\includegraphics[scale=0.7]{t1dump/parallelpath_sk}}
+\hrule\vskip3mm\small
+\caption{\label{figure:stroking3}Construction of parallel Bezier path
+ segments. The original curve is shown in dashed style and the light gray
+ area indicates the thick Bezier curve segment that later will result from
+ filling between left and right parallel path. Furthermore, important
+ intermediate points are shown. A detailed discussion is given in the text.}
+\end{figure}
+It shows the original mathematically thin Bezier segment defined by the points
+$\vec{A}$, $\vec{B}$, $\vec{C}$ and $\vec{D}$ in dashed style. The
+counterpart of $\vec{A}$ in the parallel path follows from simple geometric
+considerations, as illustrated for the point $\vec{A}'$. It lies half the
+strokewidth $w$ away from $\vec{A}$ and the direction is determined by the
+location of point $\vec{B}$. For the two coordinates of $\vec{A}'$ we find
+\begin{equation}
+ \label{eq:eq1}
+ A'_x = A_x + \frac{w}{2}\frac{B_y - A_y}{|\vec{B} - \vec{A}|}
+\end{equation}
+and
+\begin{equation}
+ \label{eq:eq2}
+ A'_y = A_x - \frac{w}{2}\frac{B_x - A_x}{|\vec{B} - \vec{A}|}.
+\end{equation}
+Corresponding equations can be derived for the point $\vec{D}'$, so that, up to now, we
+are able to compute parallel straight line segments. It remains to compute two
+control points, $\vec{B}'$ and $\vec{C}'$, in a way that the resulting Bezier
+curve appears as parallel to the original curve in the sense defined above.
+
+In order to make the path at point $\vec{A}'$ actually parallel to the orginal
+path at $\vec{A}$, we require $\vec{B}' - \vec{A}'$ to be parallel to $\vec{B}
+- \vec{A}$. From this we can derive an equation that expresses the fact that
+$\vec{B}'$ lies somewhere on the straight line that runs through point
+$\vec{A}'$ and has the direction $\vec{B} - \vec{A}$, i.e.,
+\begin{equation}
+ \label{eq:eq3}
+ \vec{B}' = \vec{A}' + \mu_B (\vec{B} - \vec{A}),
+\end{equation}
+and correspondingly
+\begin{equation}
+ \label{eq:eq4}
+ \vec{C}' = \vec{D}' + \mu_C (\vec{C} - \vec{D})\phantom{,}
+\end{equation}
+for point $\vec{C}'$. Here, $\mu_B$ and $\mu_C$ are two positive quantities, whose
+exact values are still to be determined.
+
+In order to compute $\mu_B$ and $\mu_C$, we consider a third point on the
+curve. Using a well-known algorithm that iteratively approximates a Bezier
+curve via straight line segments, we can easily determine the coordinates of
+the point that---in the parameter equation $f(t)$ of a Bezier
+curve---corresponds to the parameter $t=1/2$. It can be considered as a {\em
+ middle point} of the curve segment. In Figure~\ref{figure:stroking3}, this
+point is named $\vec{P}_6$. It can be computed by computing some intermediate
+points:
+\begin{equation}
+ \label{eq:eq5}
+ \vec{P}_1 = \frac{1}{2} ( \vec{A} + \vec{B} )
+\end{equation}
+\begin{equation}
+ \label{eq:eq6}
+ \vec{P}_2 = \frac{1}{2} ( \vec{B} + \vec{C} )
+\end{equation}
+\begin{equation}
+ \label{eq:eq7}
+ \vec{P}_3 = \frac{1}{2} ( \vec{C} + \vec{D} )
+\end{equation}
+\begin{equation}
+ \label{eq:eq8}
+ \vec{P}_4 = \frac{1}{2} ( \vec{P}_1 + \vec{P}_2 )
+\end{equation}
+\begin{equation}
+ \label{eq:eq9}
+ \vec{P}_5 = \frac{1}{2} ( \vec{P}_2 + \vec{P}_3 )
+\end{equation}
+and finally
+\begin{equation}
+ \label{eq:eq10}
+ \vec{P}_6 = \frac{1}{2} ( \vec{P}_4 + \vec{P}_5 )
+ = \frac{1}{8} ( \vec{A} + 3 \vec{B} + 3 \vec{C} + \vec{D} )
+\end{equation}
+Using the same geometrical considerations as in Eqs.~\ref{eq:eq1} and
+\ref{eq:eq2}, we can now compute a unit vector, $\vec{n}_6$, perpendicular to
+the curve at $\vec{P}_6$ and obtain
+\begin{equation}
+ \label{eq:eq11}
+ n_{6x} = \frac{ P_{5y} - P_{4y} }{\sqrt{(P_{5x}-P_{4x})^2 + (P_{5y}-P_{4y})^2}}
+\end{equation}
+\begin{equation}
+ \label{eq:eq12}
+ n_{6y} = - \frac{ P_{5x} - P_{4x} }{\sqrt{(P_{5x}-P_{4x})^2 + (P_{5y}-P_{4y})^2}}
+\end{equation}
+$\vec{P}'_6$ can now be computed as
+\begin{equation}
+ \label{eq:eq13}
+ \vec{P}'_6 = \vec{P}_6 + \vec{N}_6,
+\end{equation}
+where $\vec{N}_6 = \frac{w}{2} \vec{n}_6$, i.e., the vector orthogonal to the
+curve at $\vec{P}_6$ with a length of half the strokewidth $w$. As before, we
+have to require that the slope of the curve $\vec{P}_6$ equals the one at
+$\vec{P}'_6$, i.e., with respect to Figure~\ref{figure:stroking3} we find
+\begin{eqnarray*}
+ \vec{P}'_5 - \vec{P}'_4 & = & \nu \left( \vec{P}_5 - \vec{P}_4 \right) \\
+ \frac{\vec{P}'_2 + \vec{P}'_3}{2} -
+ \frac{\vec{P}'_1 + \vec{P}'_2}{2}
+ & = & \nu \left(
+ \frac{\vec{P}_2 + \vec{P}_3}{2} -
+ \frac{\vec{P}_1 + \vec{P}_2}{2} \right) \\
+ \frac{\vec{C}' + \vec{D}'}{2} -
+ \frac{\vec{A}' + \vec{B}'}{2}
+ & = & \nu \left(
+ \frac{\vec{C} + \vec{D}}{2} -
+ \frac{\vec{A} + \vec{B}}{2} \right)
+\end{eqnarray*}
+and hence finally
+\begin{equation}
+ \label{eq:eq14}
+ \vec{C}' + \vec{D}' - \vec{A}' - \vec{B}' = \nu \left(
+ \vec{C} + \vec{D} - \vec{A} - \vec{B} \right)\;.
+\end{equation}
+We have thus expressed the slope condition at $\vec{P}_6$ in terms of the
+characteristic points of a Bezier curve and a factor, $\nu$, still to be
+determined (cf.~Eqs.~\ref{eq:eq3} and \ref{eq:eq4}). On the way to
+Eq.~\ref{eq:eq14}, we made use of the well-known geometrical relations
+\hbox{Eqs.~\ref{eq:eq5} -- \ref{eq:eq9}}.
+
+Based on the same considerations that led to Eq.~\ref{eq:eq10}, we can write
+the corresponding equation for the point $\vec{P}'_6$:
+\begin{equation}
+ \label{eq:eq15}
+ \vec{P}'_6 = \frac{1}{2} ( \vec{P}'_4 + \vec{P}'_5 )
+ = \frac{1}{8} ( \vec{A}' + 3 \vec{B}' + 3 \vec{C}' + \vec{D}' )
+\end{equation}
+Exploiting Eq.~\ref{eq:eq13} and solving for $\vec{C}'$, we can reorganize
+Eq.~\ref{eq:eq15}:
+\begin{equation}
+ \label{eq:eq16}
+ \vec{C}' = \frac{8 (\vec{N}_6 + \vec{P}_6) - \vec{A}' - \vec{D}'}{3} -
+ \vec{B}'
+\end{equation}
+From this equation, we are able eliminate $\vec{B}'$ by substituting the
+transformed slope condition for point $\vec{P}'_6$ (Eq.~\ref{eq:eq14}). We
+obtain
+\begin{eqnarray}
+ \nonumber
+ \vec{C}' &=& \frac{8 (\vec{N}_6 + \vec{P}_6) - \vec{A}' - \vec{D}'}{3}
+ + \left[ \nu \left( \vec{C} + \vec{D} - \vec{A} - \vec{B} \right)
+ - \vec{C}' - \vec{D}' + \vec{A}' \right] \\
+ \nonumber
+ 2\, \vec{C}' &=& \frac{8 (\vec{N}_6 + \vec{P}_6) - \vec{A}' - \vec{D}'}{3}
+ + \vec{A}' - \vec{D}' +
+ \nu \left( \vec{C} + \vec{D} - \vec{A} - \vec{B}\right) \\
+ \label{eq:eq17}
+ \vec{C}' &=&
+ \underbrace{\frac{4 (\vec{N}_6 + \vec{P}_6) + \vec{A}' - 2 \vec{D}'}{3}}
+ _{\mbox{$\vec{l}_C$}}
+ + \frac{\nu}{2} \underbrace{\left( \vec{C} + \vec{D} - \vec{A} -
+ \vec{B}\right)}
+ _{\mbox{$\vec{d}_C$}} \,.
+\end{eqnarray}
+Here, for the sake of brevity, we introduced a location vector, $\vec{l}_C$,
+and a direction vector, $\vec{d}_C$, which together with the parameter $\nu$
+define the point $\vec{C}'$.
+
+Considering Eqs.~\ref{eq:eq4} and \ref{eq:eq17}, we finally found two
+independent relations for $\vec{C}'$, that linearly depend on two quantities,
+$\mu_C$ and $\frac{\nu}{2}$. Therefore, by substituting the right hand sides
+of (\ref{eq:eq4}) and (\ref{eq:eq17}), we obtain the following $2 \times
+2$ system of linear equations:
+\begin{equation}
+ \label{eq:eq18}
+ \left[
+ \begin{array}{cc}
+ (\vec{C}-\vec{D}) & \vec{d}_C
+ \end{array}
+ \right]
+ \left(
+ \begin{array}{cc}
+ \mu_C \\
+ \nu/2
+ \end{array}
+ \right)
+ = \left( \vec{l}_C - \vec{D}' \right)
+\end{equation}
+Formally, all vectors appearing in this equation are column vectors. The
+solution of the system can be written as
+\begin{equation}
+ \label{eq:eq19}
+ \left(
+ \begin{array}{cc}
+ \mu_C \\
+ \nu/2
+ \end{array}
+ \right)
+ =
+ \left[
+ \begin{array}{cc}
+ (\vec{C}-\vec{D}) & \vec{d}_C
+ \end{array}
+ \right]^{-1}
+ \left( \vec{l}_C - \vec{D}' \right)\, .
+\end{equation}
+Once $\vec{C}'$ has been computed, it is easy to compute $\vec{B}'$, by making
+use of Eq.~\ref{eq:eq16}.
+
+A few remarks about the approach described above are appropriate.
+\begin{itemize}
+\item It is also possible to first compute the point $\vec{B}'$ and then use
+ Eq.~\ref{eq:eq16} to compute $\vec{C}'$.
+\item The numerical stability at the respective end of the curve determines
+ the preference of which point to compute first. A criterion for the
+ numerical stability is the absolute value of determinant of the $2 \times 2$
+ matrix in Eq.~\ref{eq:eq18}.
+\item This determinant may become zero in which case the curve transforms into
+ a straight line. These cases must be treated extraordinarily.
+\item There are a number of further exceptional cases, e.g., if point $\vec{C}$
+ equals $\vec{D}$. Then the slope at this end of the curve is not enforced by
+ point $\vec{C}$.
+\item A good solution, that is, a {\em parallel curve}, will only result, if
+ the set of assumptions discussed previously holds. If the resulting curve
+ does not appear {\em parallel} to the original curve, the parallel curve
+ cannot be approximated by a third order Bezier spline.
+\end{itemize}
+
+
+\subsection{Connection of Path Segments and Prolongation}
+\label{connectingpaths}
+In order to actually obtain delimiting paths for character outlines, the
+parallel paths have to be connected to a continuous path. This raises the
+problem of line joining. When connecting two neighboring parallel path
+segments, we have to distinguish between two qualitatively different
+situations.
+\begin{enumerate}
+\item Convex Corner\\
+ When tracing along two neighboring parallel path segments, we turn to the
+ left and a convex corner appears. In these cases, we prolongate the end of
+ the first path and the beginning of the second path using straight lines and
+ compute an intersection between these prolongation segments. The resulting
+ lengths of both prolongation segments will be positive.
+\item Concave Corner\\
+ When tracing along two neighboring parallel path segments, we turn to the
+ right and a concave corner results. In these cases, the two neighboring
+ parallel path segments intersect by nature and actually would have to be
+ trimmed to their intersection point. Trimming on the other hand would make
+ it impossible to feed the resulting curve in the standard format into the
+ rasterizer. We therefore use a trick that saves us computing an intersection
+ and recomputing the Bezier control points. From the ideal end point of the
+ first parallel path we insert a straight prolongation to the connection
+ point of the original path segments and a second straight prolongation
+ segment from there to the starting point of the second parallel path
+ segment. Then, the area left of the path is ensured to be within the extents
+ that finally are to be filled with ink.
+\end{enumerate}
+We will now explain this principle using the example shown in
+Figure~\ref{figure:stroking4}.
+\begin{figure}[t]
+\centerline{\includegraphics[scale=1.1]{t1dump/t1dump_B}}
+\vskip3mm\hrule\vskip3mm\small
+\caption{\label{figure:stroking4}A small excerpt at the middle right from the
+ character ``B'' of ComputerModern Roman. The ideal mathematical outline of
+ the filled character is shown in thick dashed style. Left and right path of
+ the character's outline representation are shown in medium solid
+ style. Prolongation is indicated by large dashes of medium thickness.}
+\end{figure}
+The interesting part is in the middle right. The original path---shown in bold
+dashed style---steps into the figure in the lower right as the end of a curve
+segment $p_1$. At the following connection point, the path strongly turns to
+the right so that a concave corner results and continues with a further curve
+segment $p_2$. This path is now to be surrounded in a symmetrical manner by
+one right and one left path. For $p_1$, we find the right path as a parallel
+curve segment above the original path. It has been computed as described in
+the previous section. For $p_2$, the right path is a parallel curve segment
+located in an appropriate distance below $p_2$. The two neighboring right path
+segments are disjoint because of the concavity of the resulting corner. Hence,
+rule 2 from above applies in order to connect them using straight prolongation
+lines, in the figure shown in wide dashes of a medium linewidth: From the end
+of right path 1, we prolongate to the point where the original segments $p_1$ and
+$p_2$ join, and from there, a second prolongation to the beginning of right
+path 2 is inserted. The direction is indicated by arrows. Obviously, even the
+right path alone produces a closed region in this case, but this does not
+cause problems here.
+
+The left path runs into the direction opposite to the original path. By
+nature, the curvature at the point under consideration now is convex. Hence,
+according to rule 1, the neighboring left paths' segments are prolongated to
+their common intersection point, respecting the ending direction of left
+path 1 and the starting direction of left path 2.
+
+The kind of corner at two neighboring parallel path segments $p_1$ and $p_2$
+can be computed analytically. Let $\vec{T}_1$ be the tangent vector at the end
+point of $p_1$ and $\vec{T}_2$ be the tangent vector at the starting point of
+$p_2$. Assuming that both $\vec{T}_1$ and $\vec{T}_2$ are column vectors, we
+can use the determinant of the square matrix constructed by these vectors to
+determine the corner type:
+\begin{equation}
+ \label{eq:eq20}
+ d =
+ \left|
+ \begin{array}{cc}
+ \vec{T}_1 & \vec{T}_2
+ \end{array}
+ \right|
+\end{equation}
+If $d<0$, the corner type is concave whereas for $d>0$, the corner type is
+convex. For the special case $d=0$, the slope at the joining point is
+continuous, so that effectively $\vec{T}_1$ and $\vec{T}_2$ linearly depend on
+each other. For those cases, prolongation is not required at all, because if
+the neighboring segments in the original path join, neighboring segments in the
+left and right path will do so too.
+
+The kind of joining lines described above is known as {\em mitered line
+ joining}. \tonelib\ does not impose a limit on the width of mitered corners,
+so that the operation \tonelib\ implements is identical to what PostScript
+does by default, i.e., using a line join type of 0 and an infinite miter
+limit.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "t1lib_doc"
+%%% End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/intro.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/intro.tex
new file mode 100644
index 00000000000..6d290fd89c4
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/intro.tex
@@ -0,0 +1,217 @@
+%----------------------------------------------------------------------------
+% ----- File: intro.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2001-06-03
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library License. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the toplevel
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independent from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+
+\newpage
+\section{Introduction}
+\subsection{What Does \tonelib\ Do?}
+\tonelib\ is a library written in the C programming language
+allowing a programmer to generate bitmaps from Adobe (TM) Type 1 fonts
+quite easily. These bitmaps are returned in a data structure
+with type {\ttfamily GLYPH}. This special
+{\ttfamily GLYPH}-type is also used in the X11 window system to
+describe character bitmaps. It contains the bitmap data as well as
+some metric information. But \tonelib\ is in itself entirely independent
+of the X11-system or any other graphical user interface.
+
+Given that the X11-system is probably the most frequently used
+window system in the UNIX-world, and furthermore assuming that most
+graphical applications run under window systems, it appears that
+\tonelib\ implements functionality already provided by the
+graphical user interface,
+the X11-system. Thus the question arises: Why not use X11 directly for
+rastering characters? Well, the answer is quite simple; the X11 Font
+machinery appears to be too {\em static} in order to use it for
+certain purposes. Moreover X11-calculations and positioning of
+characters are based on bitmap
+dimensions and are thus subject to error accumulation.
+
+Here is a list of features which are supported in the current release
+of \tonelib.
+\begin{itemize}
+\item Rasterizing is done as characters get requested. The X11-server,
+ in contrast,
+ rasters a font completely at a given size
+ when it is loaded. {\em Rastering on demand} saves time when the
+ font is loaded the first time and saves memory since often only the
+ alphabetic letters and a few other characters are needed.
+\item The encoding mechanism of PostScript is fully supported. The
+ user may use the fonts' internal or some other encoding.
+ Additional encoding files can be loaded at runtime and fonts can be
+ reencoded at runtime. The syntax of encoding files is
+ straight-forward and simple.
+\item The library makes use of Adobe Font Metric data in the form of
+ AFM files. This may seem a disadvantage, but in order
+ to make decent typesetting possible, some more information than that
+ contained in Type 1 font files is needed. Besides, Adobe makes
+ these AFM files freely available on their ftp-server for all
+ registered Type 1 fonts.
+\item In case AFM files are missing, \tonelib\ is able to generate
+ metrics information in charspace accuracy by rastering each
+ character at 1000~bp.
+\item In addition to generation of character bitmaps, there is a way
+ to directly raster strings of any length in a given font.
+ The space-width may explicitly be corrected by the user. This
+ may be needed by word processing applications.
+\item Strings may be rastered
+ optionally using pairwise kerning information from
+ the AFM file. Kerning is an important feature of good
+ quality typesetting.
+ Kerning information can also be requested by the user without
+ rasterization.
+\item Ligature information is made available to the user in an
+ efficient way. Use of Ligatures is another characteristic of good
+ typesetting. As to my
+ knowledge, only \TeX\ and all related macro-packages are able to
+ handle ligatures in a natural and efficient way.
+\item Rotation and arbitrary transformation on the fly is supported.
+\item \tonelib\ supports antialiasing. In this case, a pixel is
+ represented as a byte, word or double word. Antialiasing is
+ implemented by subsampling with factor 2 or 4 alternatively.
+ If you use the X11-interface introduced in \tonelib\ V.\ 0.3-beta,
+ even colored antialiasing between any pair of colors is provided in a
+ completely transparent way.
+\item In addition to transformation on the fly, two transformation
+ types---{\em slanting} and {\em extending}---are possible on the fontlevel
+ including bitmap caching. Horizontal expansion of fonts is fully supported
+ and since version 0.3-beta also {\em slanting} of fonts is nearly fully
+ supported. For restrictions and drawbacks of slanting fonts see
+ \ref{transformations} on page \pageref{transformations}.
+\item Paths, the library searches for the different needed file types
+ are specified at runtime by means of a
+ configuration file. They may thus be changed without needing to
+ recompile the application. For example, the directories of the
+ X11-system's Type 1 font files may be specified there in order to use
+ these fonts with the library. A user may have his own configuration file and
+ as a fallback/default there is a system wide configuration file. This should
+ be setup when the library is installed.
+\item Since of version 0.3-beta a special set of functions is provided which
+ implements a more comfortable X11-interface. This is due to the fact that
+ X11 is the only standard window system in the UNIX world. However, as before
+ \tonelib\ may be compiled and used without even having X11 installed.
+\item Some decorations like {\em underlining} are supported by simply setting
+ a flag for the rastering functions.
+\item {\em Right To Left} typesetting is supported.
+\item Font subsetting is easily achieved using a high level function. This
+ makes it easier for application to efficiently export Postscript files.
+\item Composite character information can be retrieved. Moreover, \tonelib\
+ transparently handles and realizes composite character definitions from AFM
+ files.
+\end{itemize}
+There are also some problems and features not yet
+implemented, but likely to be implemented in the future.
+The main problem up to now is:
+\begin{itemize}
+\item The font cache isn't a font cache really. At this time all
+ bitmaps are saved by always allocating more memory from the
+ system. No automatic removal of bitmaps no longer needed is
+ done. However, the user has the possibility of explicitly
+ removing data, if he thinks it is not needed anymore.
+\end{itemize}
+
+\subsection{Copyrights and Credits}
+There are some copyrights on parts of the library and there are some
+programmers (or corporations) which I want to give credit.
+The library uses:
+\begin{itemize}
+\item[--] all internal parts of the X11-rasterizer donated to
+ the X11-project by IBM. This rasterizer does the {\em real} hard
+ work of scan-conversion.
+\item[--] the modifications to the rasterizer done by Piet
+ Tutelaers in his ps2pk-package. The main purpose was decoupling the
+ sources from the X11-system sources.
+\item[--] the \verb+parse_AFM+ software which was made freely available
+ by Adobe. This is used to parse the AFM files (what
+ a surprise) and to generate the data structures the information is
+ saved in.
+\end{itemize}
+
+Raph Levien (\verb+raph@acm.org+) contributed an algorithm for
+sampling down non-antialiased bitmaps to antialiased bitmaps in a very
+efficient manor. This makes antialiasing a lot faster.
+
+Fred L.\ Drake, Jr. (\verb+fdrake@acm.org+) wrote a Python interface to
+\tonelib, which is distributed with \tonelib. This wrapper is called
+\verb+t1python+ and allows Python-programmers to use Type 1 fonts. I
+can not tell anything more on this topic since I do not know the
+Python language. All questions concerning the Python interface should
+thus be addressed to Fred L.\ Drake, Jr.
+
+Evgeny Stambulchik (\verb+fnevgeny@plasma-gate.weizmann.ac.il+), maintainer of
+the \verb+grace+-project---a descendent of \verb+xmgr+, never gets tired of
+finding and reporting (and fixing) bugs in \tonelib. Other members of this
+project spent time in porting \tonelib\ to further systems:
+\begin{itemize}
+\item Ed Vigmond (\verb+vigmonde@IGB.UMontreal.CA+): IRIX-port,
+\item John Hasstedt (\verb+John.Hasstedt@sunysb.edu+): VMS-port,
+\item Alexander Mai (\verb+st002279@hrzpub.tu-darmstadt.de+): OS/2-port.
+\end{itemize}
+
+Hirotsugo Kakugawa (\verb+h.kakugawa@computer.org+) added support for GNU
+\verb+libtool+ to \tonelib.
+
+David Huggins-Daines (\verb+bn711@freenet.carleton.ca+) spent effort in
+finding memory leaks and maintains a Debian-package of \tonelib.
+
+
+\begin{center}
+ \Large Thanks to all these people \\
+ and to all those contributors not mentioned here!
+\end{center}
+
+\subsection{Motivation}
+The idea of writing this library was due to the SciTeXt-project which
+was founded in 1996. They needed a font raster system with some more
+functionality than X11 provided. You may find that some things (for
+example the format of the font database file) is really closely
+related to SciTeXt. In February '{}97 the SciTeXt developers decided to
+migrate from C to Java and did not need a font rasterizer any more. Since I
+thought there could be other applications for this library I continued the
+work on it and voila.
+
+I have removed the history description which followed at this place in some
+previous versions. The history can be roughly viewed in the file \verb+Changes+
+which is located in the toplevel directory of the distribution.
+
+
+\subsection{How to Reach the Author/How to Get \tonelib}
+If you have questions, comments or bug reports, you can reach me by
+eMail. The address is
+\begin{center}
+\verb+Rainer.Menzner@web.de+
+\end{center}
+If you have bug-reports, it would be best if you could reproduce the error
+using the test program \verb+xglyph+ (see \ref{xglyph}).
+
+\tonelib\ is available by anonymous ftp as\\[5mm]
+\verb+ftp://sunsite.unc.edu/pub/Linux/libs/graphics/t1lib-+$x.y[.z]$\verb+.tar.gz+
+\\[5mm]
+Here, $x.y.z$ is the version identifier and the brackets around $z$ indicate
+that this entry is optional.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "t1lib_doc"
+%%% End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.eps
new file mode 100644
index 00000000000..9b72ea6aa86
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.eps
@@ -0,0 +1,519 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GIMP PostScript file plugin V 1.05 by Peter Kirchgessner
+%%Title: /home/rainer/tmp/manipulate.eps
+%%CreationDate: Thu Apr 15 20:22:23 1999
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%Pages: 1
+%%BoundingBox: 14 14 440 186
+%%EndComments
+%%BeginProlog
+% Use own dictionary to avoid conflicts
+5 dict begin
+%%EndProlog
+%%Page: 1 1
+% Translate for offset
+14.173228 14.173228 translate
+% Translate to begin of first scanline
+0.000000 170.919327 translate
+425.196850 -170.919327 scale
+% Variable to keep one line of raster data
+/scanline 76 string def
+% Image geometry
+607 244 1
+% Transformation matrix
+[ 607 0 0 244 0 0 ]
+{ currentfile scanline readhexstring pop }
+image
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff907fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff107fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff187fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff387fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff387fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff387fffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3cffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3effffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3effffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3effffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffe7e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffff07e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffc07e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffc07e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffff1807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffc1807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffe01807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc01807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7bffc01807e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc63ffc01827e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffc01a37e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffc03ffc01a3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ff803ffc05a3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ff003ffc05a3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ff003ffc07e3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01fe003ffd07e3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fe003ffd07e3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fe003fff87e3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fe003fff87e3fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fe003fff87e7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fe003fff87e7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fe003fff87c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffc007e01ffff87c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffc3fffff8307e07ffff83c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffc1fffff8787e47ffff83c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff81fffff8787fc7ffff83c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff80fffff8787fc7ffff83c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffbff00fffff8fc3fc7ffffc3c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffff9ff00fffff8fc3fc7ffffc3c7fe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff78ff00fffff0fc3fc7ffffc3cffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffe787e007ffff0fc3fc7ffffc3cffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffe787e007ffff0fe3fc7ffffc38ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffc707e007ffff1fe3fc7ffffc38ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffc707e187ffff1fe3fc7ffffc38ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe1ffc707e387ffff1fe3fc7ffffc38ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffc1ff8707c3c3ffff1fe3fc7ffffc18ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff80ff8707c7c3ffff1fe1fc7ffffc18ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff80ff0707c7c3ffff1fe1fc7ffffe18ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff007f0607c7e3fffe1fe1fc7ffffe19ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffdfffffffffffffffffffffffff3ff007f0607c7e3fffe3ff1fc7ffffe19ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff9ffffffffffffffffffffffffe3fe007e0607c7e3fffe3ff1fc7ffffe19ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff1ffffffffffffffffffffffffe3fe007e06078fe3fffe3ff1fc7ffffe11ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffe1ffffffffffffffffffffffbfc3fe003e06078fe3fffe3ff1fc7ffffe11ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffc1ffffffffffffffffffffff3f83fe003e06078fe3fffe3ff1fc7ffffe11ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff81fffffffffffffffffffffe3f03fc183e04078ff3fffe3ff1fc7ffffe11ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff81fffffffffffffffffffffc3f03fc3c3ec4078ff1fffe3ff1fc7ffffe11ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff81fffffffffffffffffffffc3f03fc7c3fc4078ff1fffe3ff1fc7fffff11ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff81ffffffffffffffffffc3f83f03fc7c3fc4278ff1fffe3ff1fc7fffff01ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff81ffffffffffffffffff00f03f03fcfe3fc4779ff1fffe3ff1fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff81fffffffffffffffffe00f03f03f8fe3fc4ff9ff1fffe3ff1fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff1fffffffffffffffffc00f03f03f8fe3fc0ff1ff1fffe3ff0fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff1fffffffffffffffffc00f03f03f8fe3fc1ff1ff1fffe3ff8fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff1fffffffffffffffff800f03f03f8fe3fc1ff1ff1fffe7ff8fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff1fffffffffffffc7ff800f03f03f8fe1fc3ff1ff1fffc7ff8fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+efffffffffff1fffffffffffff03ff800f03fe3f8fe1fc3ff1ff1fffc7ff8fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+cfffffffffff0fffffffffffff01ff000f03fe3f8fe1fc3ff1ff1fffc7ff8fc7fffff03ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+8fffffffffff0ffffffffffffe00ff0f0f03fe3f8fe1fc3ff1ff1fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0fffffffffff0ffffffffffffe00fe0f8fe3fe3f8ff1fc3ff1ff1fffc7ff8fc7fffff87ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+0fffffffffff0ffffffffffffc00fe1f8fe3fe3f8ff1fc7ff1ff1fffc7ff8fc7fffff87ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+0ffffffff3ff0ffffffffffffc00fe3f8fe3fe3f8ff1fc7ff1ff1fffc7ff8fc7fffff87ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+0ffffffff3ff0ffffffffffffc00fe3f8fe3fe3f8ff1fc7ff1ff1fffc7ff8fc7fffff87ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+0ffffffff3ff0ffffff0fffff870fc3f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff87ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffc
+0ffffffff3ff0fffffe07ffff870fc7f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffc
+8ffffffff3ff0fffffe07ffff8f8fc7f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffff
+8ffffffff3ff0fffffc03ffff8f8fc7f8fe3fe3f8ff1fc7ff3ff1fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff
+8ffffffff3ff0fffffc03ffff9f8fc7f8fe3fe3fbff1fc7ff3fc1fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff
+8ffffffff3ff0f8fff803ffff1f8fc7f8fe3fe3ffff1fc7fe3801fffc7ff8fc7fffffc3ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff
+8ffffffff3ff0f07ff801ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff
+8ffffffff3ff0e07ff041ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ffff
+8ffffffff3ff0e03ff0e1ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87ffff
+8fffffffe3ff0c03ff1f1ffff1f8f8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87f9ff
+87ffffffe3ff0c03ff1f0ffff1fcf8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87f9ff
+87ffffffe3ff0803fe3f8ffff1fcf8ff8fe3fe3ffff1fc7fe0001fffc7ff8fc7fffff83ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff9ff
+87ffffffe30f0981fe3f8ffff1fcf8ff8fe3fe3fffe1fc7fe0001fffc7ff8fc7fffff81ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff
+87ffffffe00f01c1fe3f8ffff1fcf9ff8fe3fe3fffc1fc7fe0001fffc7ff8fc7fffff81ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff
+87ffffffc00f03e1fe3f8ffff1fff1ff8fe3fe3fffc1fc7fe0001fffc7ff8fc7fffff81ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff
+87ffffff800f03e1fe7f8ffff1fff1ff8fe3fe3fff81fc7fe001ffffc7ff8fc7fffff01ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff
+87c7ffff000f07e1fc7fcffff1fff1ff8fe3fe3fff01fc7fe07fffffc7ff8fc7fffff01ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff
+8783ffff000f07f1fc7fcffff1fff1ff8fe3fe3ffe01fc7fe3ffffffc7ff8fc7fffff01ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff
+8703ffff007f0ff1fc7fc7fff1fff1ff8fe3fe3ffe01fc7fe3ffffffc7ff8fc7fffff01ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff
+8601ffff03ff0ff1fc7fc7fff1fff1ff8fe3fe3ffc01fc7fe3ffffffc7ff8fc7fffff01ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff
+8601ffffe3ff1ff1fc7fc7fff0fff1ff8fe3fe3ffc01fc7fe3ffffffc7ff8fc7fffff11ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ff
+8401ffffe3ff1ff1fc7fc7fff0fff1ff8fe3fe3ff801fc7fe3ffffffc7ff8fc7fffff11ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff187
+80e0ffffe3ff1ff1fcffc7fff0fff1ff8fe3fe3ff001fc7fe3ffffffc7ff8fc7fffff30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfe007
+81e0ffffe3ff1ff1fcffc7fff07ff1ff8fe3fe3ff021fc7fe3ffffffc7ff8fc7fffff30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffff8fc007
+81f0ffffe3ff1ff1f8ffc7fff07ff1ff8fe3fe3fe061fc7fe3ffffffc7ff8fc7ffffe30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffff8fffffffffffffffffffffff0f8007
+83f0ffffe3ff1ff1f8ffc7fff03ff1ff8fe3fe3fe061fc7fe3ffffffc7ff8fc7ffffe30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffffffe70f8007
+83f8ffffe3ff1ff1f8ffc7fff01ff1ff8fe3fe3fe0e1fc7fe3ffffffc7ff8fc7ffffe30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffffffffffc060f807f
+87f8ffffe3ff1ff1f8ffc7fff81ff1ff8fe3fe3fc1e1fc7fe3ffffffc7ff8fc7ffffe30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffffffffffc040f91ff
+87f8ffffe3ff1ff1f8f807fff80ff1ff8fe3fe3fc1e1fc7fe3ffffffc7ff8fc7ffffe30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffffffff8fc040ff1ff
+8ff8ffffe3ff1ff1f80007fff80ff1ff8fe3fe3fc3e1fc7fe3ffffffc7ff8fc7ffffe30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffff0ffffffffffffffff9f8fc040ff1ff
+8ff8ffffe3ff1ff1f80007fff807f1ff8fe3fe3f83e1fc7fe3ffffffc7ff8fc7ffffe30ffe
+ffffffffffffffffffffffffffffffffffffffffffffffff8ffffffffffffffe01f8fd1c0ff1ff
+8ff8ffffe3ff1ff1f80007fffc07f1ff8fe3fe3f87e1fc7fe1ffffffc7ff8fc7ffffe30ffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01f0ff3c0ff1ff
+8ff8ffffe3ff1ff1f80007fffc07f1ff8fe3fe3f87e1fc7fe1ffffffc7ff0fc7ffffe787fe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0fdffc01f0ff3f8ff1ff
+8ff8ffffe3ff1ff1f80007fffe03f1ff8fe3fe3f8fe1fc7fe1ffffffc7ff1fc7ffffe787fe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8003ffc0ff0ff3f8ff1ff
+8ff8ffffe3ff1ff1f80007fffe03f1ff8fe3fe3f8fe1fc7fe1ffffffc7ff1fc7ffffc787fe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0003ffd8ff0ff3f8ff1ff
+8ff8ffffe3ff1ff1f807ffffff03f1ff8fe3fe3f0ff1fc7ff1ffffffc3ff1fc7ffffc787fe
+fffffffffffffffffffffffffffffffffffffffffffffffffffff1ffe0003fff8ff07f3f8ff1ff
+8ff8ffffe3ff1ff1f8ffffffff01f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe
+fffffffffffffffffffffffffffffffffffffffffffffffffffbc0ffe1807fff8ff07e3f8ff1ff
+8ff8ffffe3ff1ff1f8ffffffff81f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe
+ffffffffffffffffffffffffffffffffffffffffffffffffdfe3807fc3c3ffff87e47e3f8ff1ff
+8ff8ffffe3ff1ff1f8ffffffff81f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe
+ffffffffffffffffffffffffffffffffffffffffffffffff9fc3007fc7e3ffff87e47e7f8ff1ff
+8ff8ffffe3ff1ff1f8ffffffffc1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe
+fffffffffffffffffffffffffffffffffffffffffffffffe1f82383fc7e3ffff87e47e7f8ff1ff
+8ff8ffffe3ff1ff1f8ffffffffe1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe
+fffffffffffffffffffffffffffffffffffffffffffffe0c1f007c3f8fe1ffff87e47e7f8ff1ff
+8ff8ffffe3ff1ff1f8ffffffffe1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffc787fe
+fffffffffffffffffffffffffffffffffffffffffffdf8081f00fc3f8ff1ffffc7e47e7f8ff1ff
+8ff8ffffe3ff1ff1f8ffffffffe1f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffffcf83fe
+fffffffffffffffffffffffffffffffffffffffffbf1f8081f01fe3f8ff1ffffc7e63e7f8ff1ff
+8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffff8f83fe
+f800001fffffffffffffffffffffffffffff07f803f1fa381fe3fe3f8ff1ffffc7ee3e7f8ff1ff
+8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff1ffffffe3ff1fc7ffff8f83fe
+f800001ffffffffff9fffffffffffffff7fe01f803f1fe7b1fe3fe3f8ff1ffffc7ce3c7f8ff1ff
+8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff0ffffffe3fe1fc7ffff8fc3fe
+f9fc7f1ffffffffff9fffffffffffff9e1f800f91fe0fe7f1fe3fe3f8ff1ffffc3ce3cff8ff1ff
+8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff0ffffffe3fe1fc7ffff8fc3fe
+f9fc7f9ffffffffff9fffffffff07fe1c1f8f87f1fe0fe7f1fe3fe3f8ff1ffffc3ce3cff8ff1ff
+8ff8ffffe3ff1ff1f8fffffffff0f1ff8fe3fe3f1ff1fc7ff0ffefffe1fe3fc7ffff8fc3fe
+f9fc7f9ffffffffff1ffffffffc000c1c1f1fc3f0fe0fe7f1fe3fe3f8ff1ffffc3ce3cff8ff1ff
+8ff8ffffe3ff1ff1f8fffffffff8f1ff8fe3fe3f1ff1fc7ff0ffefffe1fe3fc7ffff8fc3fe
+f9fc7f9ffffffffff1ffffffff80008181e1fe3f0fe0fc7f1fe3fe3f8ff1ffffe3ce3cff8ff1ff
+8ff8ffffe3ff1ff1f87ffffff3f8f0ff8fe3fe3f1ff1fc7ff0ffefffe1fe3fc7ffff8fc3fe
+fffc7ffffffffffff107ffffff1f1ff00de3fe3f0fc8fcff1fe3fe3f8fe3ffffe3ce1cff8ff1ff
+8ff8ffffe3ff1ff1f87ffffff3f8f0ff8fe3fe3f1ff1fc7ff0ffdffff1fe3fc7ffff8fc3fe
+fffc7ffe03f007018007fffffe3f8ff07fe3ff1f8fc87cff1fe3fe3f8fe3ffffe39f1cff8ff1ff
+8ff8ffffe3ff1ff1f87ffffff3f8f0ff8fe3fe3f1ff1fc7ff8ffdffff1fe3fc7ffff8fc3fe
+fffc7ffc01f00601800ffffffe3f8ff0ffc7ff1f8fcc7cff1fe3fe3f87e3ffffe39f18ff8ff1ff
+8ff8ffffe3ff1ff1fc7ffffff3f8f0ff8fe3fe3f1ff1fc7ff87fdffff1fc3fc7ffff1fc1fe
+fffc7ff8f8f61f8ff1fffffffe3f8ff1ffc7ff1f87cc7cff1fe3fe3fc7c3ffffe39f19ff8ff1ff
+8ff8ffffe3ff1ff1fc7ffffff3f8f8ff8fe3fe3f1fe1fc7ff87f9ffff1fc3fc7ffff1fc1fe
+fffc7ff1fc7e0f9ff1fffffffc7f8ff1ffc7ff1f879c78ff1fe3fe3fc3c7ffffe19f19ff8ff1ff
+8ff8ffffe3ff1ff1fc7ffffff3f8f8ff8fe3fe3f1fe1fc7ff87f9ffff0fc3fc7ffff1fc1fe
+fffc7fe3fe7f0f1ff1fffffffc7f8ff1ffc7ff1fc79c79ff1fe3fe3fc187ffffe19f19ff8ff1ff
+8ff8ffffe3ff1ff1fc7ffffff3f9f87f8fe1fe3f1fe1fc7ff87f9ffff0fc7fc7ffff1fc1fe
+fffc7fe3fe3f863ff1fffffffc7f8ff1ffc7ff8fc79e39ff1fe3fe3fe00ffffff19f19ff8ff1ff
+8ff8ffffe3ff1ff1fc3ff7fff3f9f87f8fe1fc3f1fc1fc7ff87f1ffff0f87fc7ffff1fc1fe
+fffc7fe7fe3f867ff1fffffffc3f8ff1ffc7ff8fc79e39ff1fe3fe3fe01ffffff13f09ff8ff1ff
+8ff8ffffe3ff1ff1fc3ff7fff3f1f87f8fe1fc3f0fc1fc7ff83f1ffff0f87f87ffff1b813e
+fffc7fc7fe3fc07ff1fffffffe3f8ff1ffc7ff8fc33e39ff1fe3fe3ff03ffffff13f89ff8ff1ff
+8ff8ffffe3ff1ff1fc3ff7fff3f1f87f8fe1fc3f0f81fc7ff83f1ffff8787e86fffd13803e
+fffc7fc0003fe0fff1fffffffe3f1ff1ffc7ff1fc33e31ff1fe3fe3ff8fffffff13f81ff8ff1ff
+8ff8ffffe3ff1ff1fc3fe7fff3f1f83f8fe1f83f0f81fc7ffc3e1ffff8707e86fffc07803e
+fffc7fc0003fe0fff1fffffffe1e1ff1ffc7ff1fe33e33ff1fe3fe3ff9fffffff13f83ff8ff1ff
+8ff8ffffe3ff1ff1fe1fe7fff3f1f83f0ff0f83f0f11fc7ffc1e1ffff8307e00fffc07803e
+fffc7fc7ffffe0fff1ffffffff003ff1ffc7ff1fe33f13ff1fe3fe3ff3fffffff03f83ff8ff1ff
+8ff8ffffe3ff1ff1fe1fc7fff3f1fc1e0ff0f23f07116c27fc0c1ffff800fe00fffc07803e
+fffc7fc7ffffe07ff1ffffffff807ff1ffc7ff1fe27f13ff1fe3fe3ff3fffffff03f83ff8ff1ff
+8ff8ffffe1ff1ff1fe1fc7fff3e1fc1c0ff0e23700306007fc003ffff800fe00fffc07803e
+fffc7fc7ffffc43ff1ffffffffe1fff1ffc7ff1fe07f13ff1fe3fe3ff1fffffff87f83ff8ff1ff
+8ff8ffffe1ff1ff1fe0f87fff1e3fc000ff0420780306007fc003ffffc00fe00fffc07803e
+fffc7fc3ffff8c3ff1ffffffffcffff1ffc3fe3fe07f03ff1fe3fe3ff03ffffff87f83ff8ff0ff
+8ff8ffffe0ef0bb0df0707fff083fc000ff0060780306007fe003ffffc00fe00fffc07803e
+fffc7fe3ffff9e1ff1ffffffffcffff1ffe3fe3ff07f07ff1fe3fe3ff007fffff87fc3ff8ff0f7
+87f86fffe0090b803f000ffff003fe000ff0060780706007fe007ffffc01fe00fffc07803e
+fffc7fe3ffff1e0ff1ffffffff87fff1ffe1fc3ff0ff87ff1fe3fe3ff003fffff87fc3fd05f004
+81c01fffe00803803f000ffff003fe000ff0060780706007fe007ffffc01fe00fffc07803e
+fffc7fe1ffbe3f0ff1ff87ffff803ff1fff1f87ff0ff87ff1fe1fe1bf001fffff87fc7fc01f004
+01c01fffe00803803f801ffff007fe010ff80e0780706007fe007ffffe01fe00fffc07803e
+fffc7ff07e3c7f07f0ff03ffffc00ff0eff070fff0ff87f803007007f700fffff87fc7fc01f004
+01c01ffff00803803f803ffff007ff010ff80e07c0f06007ff00fffffe01fe00fffc07803e
+ffe007f800700e00f00703ffffb807801ff801fff8ff8ff803007007ef80fffff8ffc7fc01f80c
+01c01ffff01803803fc03ffff80fff030ff81e07c1f06007ff00fffffe03fe00fffc07803e
+ffe007fe01f01e00f80f83fffe7f03801ffe03fff9ff8ff803007007cfe07ffffcffc7fc01f81c
+01c01ffff87803803fc07ffffc0fff870ffc1e07c1f06007ff81ffffff03fe00fffc07803e
+ffffffffffffffffffffe3fffc7fc3ffffffffffffffffffffffffff8ff87fffffffffffffffff
+ffffffffffffffffffe0fffffe1fffef0ffc3fffe3ffffffff83ffffff07fffffffffffffe
+ffffffffffffffffffffe3fffc7fe3ffffffffffffffffffffffffff9ff87fffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffe7fffffffffffffc7ffffff8ffffffffffffffe
+ffffffffffffffffffffe3fffcffe3ffffffffffffffffffffffffff1ffc7fffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffe7fff8ffe3ffffffffffffffffffffffffff1ffc7fffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffcffff87fe3ffffffffffffffffffffffffff1ffc7fffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffff9ffff87fe7ffffffffffffffffffffffffff1ffc7fffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+fffffffffffffffffffe3ffffc3fc7ffffffffffffffffffffffffff1ffc7fffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+fffffffffffffffffffefffffc1f8fffffffffffffffffffffffffff1ffcffffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+fffffffffffffffffffffffffe001fffffffffffffffffffffffffff1ff8ffffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffff007fffffffffffffffffffffffffff0ff8ffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffe3ffffffffffffffffffffffffffff0ff9ffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff87f1ffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff83e3ffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8007ffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00fffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff8ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
+showpage
+%%Trailer
+end
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.pdf
new file mode 100644
index 00000000000..2ac054ecd41
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/manipulate.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.eps
new file mode 100644
index 00000000000..a5fe55456e4
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.eps
@@ -0,0 +1,28 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+gsave
+[ -1 0 0 1 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.pdf
new file mode 100644
index 00000000000..41b1c725863
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorh.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.eps
new file mode 100644
index 00000000000..7032a25f4ac
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.eps
@@ -0,0 +1,28 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+gsave
+[ 1 0 0 -1 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.pdf
new file mode 100644
index 00000000000..114d9602ed6
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/mirrorv.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.eps
new file mode 100644
index 00000000000..b1249dd8268
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.eps
@@ -0,0 +1,6539 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: outlineproblems1.tif
+%%CreationDate: Wed May 5 18:52:15 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 871 82
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+871.000000 82.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 871 82 8 3 0 1 2 "false 3 colorimage"
+/line 2613 string def
+871 82 8
+[871 0 0 -82 0 82]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000000000000000000000000000000000ffffffffffffffffff000000
+000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffff000000000000
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000ffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffff000000000000000000ffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffff000000000000000000ffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000ffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffff000000
+000000ffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+000000000000000000000000000000000000000000ffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000
+000000000000000000000000000000ffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffff000000000000000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.pdf
new file mode 100644
index 00000000000..a3fab25ea4a
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems1.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.eps
new file mode 100644
index 00000000000..d398fc235dc
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.eps
@@ -0,0 +1,6064 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: outlineproblems2.tif
+%%CreationDate: Wed May 5 18:52:22 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 871 76
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+871.000000 76.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 871 76 8 3 0 1 2 "false 3 colorimage"
+/line 2613 string def
+871 76 8
+[871 0 0 -76 0 76]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+ffffff000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffff000000000000ffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffff000000000000ffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000ffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffff000000000000ffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+000000000000ffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffff000000ffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffff000000000000000000000000000000000000000000000000
+000000000000ffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000ffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.pdf
new file mode 100644
index 00000000000..2273c3de6e4
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems2.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.eps
new file mode 100644
index 00000000000..8eccabe1ac7
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.eps
@@ -0,0 +1,5985 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: outlineproblems3.tif
+%%CreationDate: Wed May 5 18:52:27 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 871 75
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+871.000000 75.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 871 75 8 3 0 1 2 "false 3 colorimage"
+/line 2613 string def
+871 75 8
+[871 0 0 -75 0 75]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffff000000000000000000
+000000000000ffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffff000000ffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000ffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000ffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffff000000000000000000ffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000ffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffff000000000000000000ffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000
+000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffff000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffff000000000000ffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffff000000000000000000000000
+000000ffffffffffff000000ffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.pdf
new file mode 100644
index 00000000000..454fa98c951
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems3.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.eps
new file mode 100644
index 00000000000..60fb5347eea
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.eps
@@ -0,0 +1,6777 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: outlineproblems4.tif
+%%CreationDate: Wed May 5 18:52:32 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 871 85
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+871.000000 85.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 871 85 8 3 0 1 2 "false 3 colorimage"
+/line 2613 string def
+871 85 8
+[871 0 0 -85 0 85]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffff000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffff000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffff000000000000ffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffff000000ffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffff000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffff000000ffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffff000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffff000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffff000000ffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffff000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffff000000ffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffff000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffff000000ffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffff000000000000ffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffff000000ffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffff000000ffffff
+ffffffffffffffffff000000ffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+000000ffffffffffffffffffffffff000000ffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+000000000000ffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffff000000ffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffff000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffff000000ffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000
+000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffff000000ffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffff000000ffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffff000000ffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffff000000ffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffff000000000000ffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000ffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffff000000ffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffff000000ffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffff000000000000ffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000ffffff000000000000000000000000ffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000ffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffff000000000000000000ffffff000000000000000000
+000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffff000000000000000000ffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffff000000000000000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffff000000000000000000ffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000
+000000ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000ffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+000000000000000000ffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffff000000000000000000000000
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffff000000ffffffffffff
+000000000000ffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffff000000000000000000ffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffff000000ffffff
+ffffff000000000000000000ffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000
+000000ffffffffffff000000000000ffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffff000000000000ffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffff000000ffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffff000000000000000000ffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000ffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffff000000000000ffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+000000ffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000ffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffff000000ffffff000000000000ffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000
+000000ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffff000000000000000000000000ffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000ffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffff000000000000000000
+000000ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffff000000000000ffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.pdf
new file mode 100644
index 00000000000..e8d15dc9373
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems4.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.eps
new file mode 100644
index 00000000000..bd1b0439383
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.eps
@@ -0,0 +1,6554 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: tiff2ps
+%%Title: outlineproblems5.tif
+%%CreationDate: Wed May 5 18:52:37 1999
+%%DocumentData: Clean7Bit
+%%Origin: 0 0
+%%BoundingBox: 0 0 873 82
+%%LanguageLevel: 1
+%%Pages: (atend)
+%%EndComments
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave
+100 dict begin
+873.000000 82.000000 scale
+/bwproc {
+ rgbproc
+ dup length 3 idiv string 0 3 0
+ 5 -1 roll {
+ add 2 1 roll 1 sub dup 0 eq {
+ pop 3 idiv
+ 3 -1 roll
+ dup 4 -1 roll
+ dup 3 1 roll
+ 5 -1 roll put
+ 1 add 3 0
+ } { 2 1 roll } ifelse
+ } forall
+ pop pop pop
+} def
+/colorimage where {pop} {
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def
+} ifelse
+%ImageData: 873 82 8 3 0 1 2 "false 3 colorimage"
+/line 2619 string def
+873 82 8
+[873 0 0 -82 0 82]
+{currentfile line readhexstring pop} bind
+false 3 colorimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffff000000000000000000000000000000000000000000ffffff
+ffffffffffff000000000000ffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffff000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffff000000000000
+000000ffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffff000000000000000000ffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffff000000000000000000
+000000ffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000ffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffff000000000000ffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000ffffff000000000000000000
+000000000000000000000000ffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000ffffffffffffffffffffffff000000000000000000ffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000ffffff000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffff
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000ffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000ffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffff000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffff000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffff000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000ffffffffffffffffffffffff000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000ffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000ffffff
+ffffffffffff000000000000000000ffffffffffff000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000ffffffffffffffffff000000000000000000000000
+000000000000000000ffffffffffff000000000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffff000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+000000000000000000000000000000000000000000ffffffffffff000000000000
+000000000000000000000000000000000000000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000ffffffffffff
+000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000
+000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+end
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.pdf
new file mode 100644
index 00000000000..40c9629661f
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlineproblems5.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.eps
new file mode 100644
index 00000000000..ecd148cd611
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.eps
@@ -0,0 +1,255 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: outlines.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 1
+%%CreationDate: Fri Apr 23 17:07:56 1999
+%%For: rainer@mman2 (Rainer Menzner)
+%%Orientation: Portrait
+%%BoundingBox: 0 0 252 156
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+-22.0 156.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+%%EndProlog
+
+$F2psBegin
+10 setmiterlimit
+n -1000 3475 m -1000 -1000 l 5342 -1000 l 5342 3475 l cp clip
+ 0.06299 0.06299 sc
+7.500 slw
+% Ellipse
+n 450 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 1350 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 900 1800 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 900 900 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 1350 450 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 1620 180 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 2880 180 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 3150 450 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 3600 900 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 3600 1800 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 3150 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 4050 2250 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Polyline
+n 3150 2250 m 1350 2250 l gs col0 s gr
+% Polyline
+ [60] 0 sd
+n 450 2250 m 1350 2250 l gs col0 s gr [] 0 sd
+% Polyline
+ [60] 0 sd
+n 1350 2250 m 4050 2250 l gs col0 s gr [] 0 sd
+% Polyline
+ [15 45] 45 sd
+n 1350 2250 m 900 1800 l gs col0 s gr [] 0 sd
+% Polyline
+ [15 45] 45 sd
+n 1350 450 m 900 900 l gs col0 s gr [] 0 sd
+% Polyline
+ [15 45] 45 sd
+n 1350 450 m 1620 180 l gs col0 s gr [] 0 sd
+% Polyline
+ [15 45] 45 sd
+n 3150 450 m 2880 180 l gs col0 s gr [] 0 sd
+% Polyline
+ [15 45] 45 sd
+n 3150 450 m 3600 900 l gs col0 s gr [] 0 sd
+% Polyline
+ [15 45] 45 sd
+n 3150 2250 m 3600 1800 l gs col0 s gr [] 0 sd
+% Polyline
+n 1350 2250 m 1348 2248 l 1344 2243 l 1336 2235 l 1325 2222 l 1309 2205 l
+ 1290 2184 l 1268 2159 l 1244 2132 l 1218 2102 l 1192 2072 l
+ 1167 2041 l 1142 2011 l 1119 1981 l 1098 1953 l 1078 1925 l
+ 1060 1899 l 1044 1873 l 1030 1849 l 1016 1824 l 1005 1800 l
+ 994 1775 l 984 1750 l 975 1725 l 967 1701 l 960 1676 l
+ 954 1650 l 948 1624 l 942 1596 l 937 1568 l 933 1539 l
+ 929 1509 l 926 1478 l 924 1447 l 922 1415 l 921 1382 l
+ 921 1350 l 921 1318 l 922 1285 l 924 1253 l 926 1222 l
+ 929 1191 l 933 1161 l 937 1132 l 942 1104 l 948 1076 l
+ 954 1050 l 960 1024 l 967 999 l 975 975 l 984 950 l
+ 994 925 l 1005 900 l 1016 876 l 1030 851 l 1044 827 l
+ 1060 801 l 1078 775 l 1098 747 l 1119 719 l 1142 689 l
+ 1167 659 l 1192 628 l 1218 598 l 1244 568 l 1268 541 l
+ 1290 516 l 1309 495 l 1325 478 l 1336 465 l 1344 457 l
+ 1348 452 l 1350 450 l gs col0 s gr
+% Polyline
+n 1350 450 m 1352 449 l 1356 445 l 1363 439 l 1373 431 l 1387 419 l
+ 1405 406 l 1425 390 l 1448 374 l 1471 357 l 1496 340 l
+ 1521 324 l 1546 309 l 1571 295 l 1595 283 l 1620 272 l
+ 1645 262 l 1671 253 l 1697 245 l 1725 237 l 1754 231 l
+ 1785 225 l 1809 221 l 1834 217 l 1860 214 l 1887 211 l
+ 1915 208 l 1945 205 l 1975 202 l 2007 200 l 2040 198 l
+ 2073 196 l 2108 195 l 2143 194 l 2178 193 l 2214 193 l
+ 2250 192 l 2286 193 l 2322 193 l 2357 194 l 2392 195 l
+ 2427 196 l 2460 198 l 2493 200 l 2525 202 l 2555 205 l
+ 2585 208 l 2613 211 l 2640 214 l 2666 217 l 2691 221 l
+ 2715 225 l 2746 231 l 2775 237 l 2803 245 l 2829 253 l
+ 2855 262 l 2880 272 l 2905 283 l 2929 295 l 2954 309 l
+ 2979 324 l 3004 340 l 3029 357 l 3052 374 l 3075 390 l
+ 3095 406 l 3113 419 l 3127 431 l 3137 439 l 3144 445 l
+ 3148 449 l 3150 450 l gs col0 s gr
+% Polyline
+n 3150 450 m 3152 452 l 3156 457 l 3164 465 l 3175 478 l 3191 495 l
+ 3210 516 l 3232 541 l 3256 568 l 3282 598 l 3308 628 l
+ 3333 659 l 3358 689 l 3381 719 l 3402 747 l 3422 775 l
+ 3440 801 l 3456 827 l 3470 851 l 3484 876 l 3495 900 l
+ 3506 925 l 3516 950 l 3525 975 l 3533 999 l 3540 1024 l
+ 3546 1050 l 3552 1076 l 3558 1104 l 3563 1132 l 3567 1161 l
+ 3571 1191 l 3574 1222 l 3576 1253 l 3578 1285 l 3579 1318 l
+ 3579 1350 l 3579 1382 l 3578 1415 l 3576 1447 l 3574 1478 l
+ 3571 1509 l 3567 1539 l 3563 1568 l 3558 1596 l 3552 1624 l
+ 3546 1650 l 3540 1676 l 3533 1701 l 3525 1725 l 3516 1750 l
+ 3506 1775 l 3495 1800 l 3484 1824 l 3470 1849 l 3456 1873 l
+ 3440 1899 l 3422 1925 l 3402 1953 l 3381 1981 l 3358 2011 l
+ 3333 2041 l 3308 2072 l 3282 2102 l 3256 2132 l 3232 2159 l
+ 3210 2184 l 3191 2205 l 3175 2222 l 3164 2235 l 3156 2243 l
+ 3152 2248 l 3150 2250 l gs col0 s gr
+/Helvetica-Narrow ff 150.00 scf sf
+360 2160 m
+gs 1 -1 sc (P1) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+1440 2430 m
+gs 1 -1 sc (P2) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+630 1800 m
+gs 1 -1 sc (P3) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+630 900 m
+gs 1 -1 sc (P4) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+1080 450 m
+gs 1 -1 sc (P5) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+1710 135 m
+gs 1 -1 sc (P6) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+2970 180 m
+gs 1 -1 sc (P7) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+3285 450 m
+gs 1 -1 sc (P8) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+3690 945 m
+gs 1 -1 sc (P9) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+3690 1890 m
+gs 1 -1 sc (P10) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+3060 2475 m
+gs 1 -1 sc (P11) col0 sh gr
+/Helvetica-Narrow ff 150.00 scf sf
+4050 2475 m
+gs 1 -1 sc (P12) col0 sh gr
+$F2psEnd
+rs
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.fig b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.fig
new file mode 100644
index 00000000000..e19102c8c0e
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.fig
@@ -0,0 +1,60 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 450 2250 45 45 450 2250 495 2250
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 1350 2250 45 45 1350 2250 1395 2250
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 900 1800 45 45 900 1800 945 1800
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 900 900 45 45 900 900 945 900
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 1350 450 45 45 1350 450 1395 450
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 1620 180 45 45 1620 180 1665 180
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 2880 180 45 45 2880 180 2925 180
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3150 450 45 45 3150 450 3195 450
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3600 900 45 45 3600 900 3645 900
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3600 1800 45 45 3600 1800 3645 1800
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 3150 2250 45 45 3150 2250 3195 2250
+1 3 0 1 0 7 100 0 0 0.000 1 0.0000 4050 2250 45 45 4050 2250 4095 2250
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+ 3150 2250 1350 2250
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
+ 450 2250 1350 2250
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
+ 1350 2250 4050 2250
+2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2
+ 1350 2250 900 1800
+2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2
+ 1350 450 900 900
+2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2
+ 1350 450 1620 180
+2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2
+ 3150 450 2880 180
+2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2
+ 3150 450 3600 900
+2 1 2 1 0 7 100 0 -1 3.000 0 0 -1 0 0 2
+ 3150 2250 3600 1800
+3 0 0 1 0 7 100 0 -1 0.000 0 0 0 4
+ 1350 2250 900 1800 900 900 1350 450
+ 0.000 1.000 1.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 0 0 4
+ 1350 450 1620 180 2880 180 3150 450
+ 0.000 1.000 1.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 0 0 4
+ 3150 450 3600 900 3600 1800 3150 2250
+ 0.000 1.000 1.000 0.000
+4 0 0 100 0 20 10 0.0000 4 120 195 360 2160 P1\001
+4 0 0 100 0 20 10 0.0000 4 120 195 1440 2430 P2\001
+4 0 0 100 0 20 10 0.0000 4 120 195 630 1800 P3\001
+4 0 0 100 0 20 10 0.0000 4 120 195 630 900 P4\001
+4 0 0 100 0 20 10 0.0000 4 120 195 1080 450 P5\001
+4 0 0 100 0 20 10 0.0000 4 120 195 1710 135 P6\001
+4 0 0 100 0 20 10 0.0000 4 120 195 2970 180 P7\001
+4 0 0 100 0 20 10 0.0000 4 120 195 3285 450 P8\001
+4 0 0 100 0 20 10 0.0000 4 120 195 3690 945 P9\001
+4 0 0 100 0 20 10 0.0000 4 120 285 3690 1890 P10\001
+4 0 0 100 0 20 10 0.0000 4 120 285 3060 2475 P11\001
+4 0 0 100 0 20 10 0.0000 4 120 285 4050 2475 P12\001
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.pdf
new file mode 100644
index 00000000000..8e624afb407
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/outlines.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.eps
new file mode 100644
index 00000000000..c7acb8acbf7
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.eps
@@ -0,0 +1,32 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+/sin30 30 sin def
+/minussin30 30 sin neg def
+/cos30 30 cos def
+
+gsave
+[ cos30 sin30 minussin30 cos30 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.pdf
new file mode 100644
index 00000000000..ced50697595
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/rotate.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.eps
new file mode 100644
index 00000000000..f5cdc726141
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.eps
@@ -0,0 +1,28 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+gsave
+[ 1 0 0.5 1 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.pdf
new file mode 100644
index 00000000000..1efd0ca955f
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearh.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.eps
new file mode 100644
index 00000000000..6b6e63e981a
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.eps
@@ -0,0 +1,28 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 200 200
+%%EndComments
+
+/TimesRoman findfont 150 scalefont setfont
+100 100 translate
+
+gsave
+[ 1 0.5 0 1 0 0] concat
+
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) show
+grestore
+
+[ 3 3 ] 2 setdash
+0 0 moveto
+100 0 rlineto
+0 0 moveto
+0 100 rlineto
+stroke
+0 0 moveto
+(g) true charpath
+stroke
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.pdf
new file mode 100644
index 00000000000..822a8a70e65
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/shearv.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.eps
new file mode 100644
index 00000000000..4eb2421f10c
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.eps
@@ -0,0 +1,745 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: t1_data.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
+%%CreationDate: Fri Oct 16 19:05:50 1998
+%%For: rainer@mman (Rainer Menzner)
+%%Orientation: Portrait
+%%BoundingBox: 0 0 612 467
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+-13.0 469.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica-Narrow-Bold /Helvetica-Narrow-Bold-iso isovec ReEncode
+/Helvetica-Narrow /Helvetica-Narrow-iso isovec ReEncode
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+%%EndProlog
+
+$F2psBegin
+10 setmiterlimit
+n -1000 8437 m -1000 -1000 l 10912 -1000 l 10912 8437 l cp clip
+ 0.06299 0.06299 sc
+% Polyline
+7.500 slw
+n 6750 1125 m 7650 1125 l 7650 675 l 6750 675 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+7200 855 m
+gs 1 -1 sc (External Encoding) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+7200 1005 m
+gs 1 -1 sc (\(optional\)) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 7740 1125 m 8640 1125 l 8640 675 l 7740 675 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+8190 855 m
+gs 1 -1 sc (Internal Type 1) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+8190 1005 m
+gs 1 -1 sc (Data Structures) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 5310 1935 m 5940 1935 l 5940 1710 l 5310 1710 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5625 1845 m
+gs 1 -1 sc (KernMap) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 6210 1935 m 6840 1935 l 6840 1710 l 6210 1710 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+6525 1845 m
+gs 1 -1 sc (EncMap) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 7650 4365 m 8550 4365 l 8550 3870 l 7650 3870 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+8100 4140 m
+gs 1 -1 sc (glyphs[256]) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+gs clippath
+7479 3840 m 7623 3870 l 7479 3900 l 7665 3900 l 7665 3840 l cp
+clip
+n 5940 3555 m 6750 3555 l 6750 3870 l 7650 3870 l gs col0 s gr gr
+
+% arrowhead
+n 7479 3840 m 7623 3870 l 7479 3900 l 7503 3870 l 7479 3840 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 7650 3105 m 8550 3105 l 8550 2610 l 7650 2610 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+8100 2880 m
+gs 1 -1 sc (glyphs[256]) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+gs clippath
+7479 2580 m 7623 2610 l 7479 2640 l 7665 2640 l 7665 2580 l cp
+clip
+n 5940 2295 m 6750 2295 l 6750 2610 l 7650 2610 l gs col0 s gr gr
+
+% arrowhead
+n 7479 2580 m 7623 2610 l 7479 2640 l 7503 2610 l 7479 2580 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 4950 6075 m 5940 6075 l gs col0 s gr
+% Polyline
+n 4950 6255 m 5940 6255 l gs col0 s gr
+% Polyline
+n 4950 6435 m 5940 6435 l gs col0 s gr
+% Polyline
+n 4950 6615 m 5940 6615 l gs col0 s gr
+% Polyline
+n 4950 6795 m 5940 6795 l gs col0 s gr
+% Polyline
+n 4950 5895 m 5940 5895 l 5940 6975 l 4950 6975 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 6030 m
+gs 1 -1 sc (pFontCache) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 6210 m
+gs 1 -1 sc (pNextFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 6390 m
+gs 1 -1 sc (pPrevFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 6570 m
+gs 1 -1 sc (pCharSpaceLocal) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 6750 m
+gs 1 -1 sc (float size) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 6930 m
+gs 1 -1 sc (int antialias) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 7650 6795 m 8550 6795 l 8550 6300 l 7650 6300 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+8100 6570 m
+gs 1 -1 sc (glyphs[256]) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+gs clippath
+7479 6270 m 7623 6300 l 7479 6330 l 7665 6330 l 7665 6270 l cp
+clip
+n 5940 5985 m 6750 5985 l 6750 6300 l 7650 6300 l gs col0 s gr gr
+
+% arrowhead
+n 7479 6270 m 7623 6300 l 7479 6330 l 7503 6300 l 7479 6270 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 4950 3645 m 5940 3645 l gs col0 s gr
+% Polyline
+n 4950 3825 m 5940 3825 l gs col0 s gr
+% Polyline
+n 4950 4005 m 5940 4005 l gs col0 s gr
+% Polyline
+n 4950 4185 m 5940 4185 l gs col0 s gr
+% Polyline
+n 4950 4365 m 5940 4365 l gs col0 s gr
+% Polyline
+n 4950 3465 m 5940 3465 l 5940 4545 l 4950 4545 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 3600 m
+gs 1 -1 sc (pFontCache) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 3780 m
+gs 1 -1 sc (pNextFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 3960 m
+gs 1 -1 sc (pPrevFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 4140 m
+gs 1 -1 sc (pCharSpaceLocal) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 4320 m
+gs 1 -1 sc (float size) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 4500 m
+gs 1 -1 sc (int antialias) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 4950 2385 m 5940 2385 l gs col0 s gr
+% Polyline
+n 4950 2565 m 5940 2565 l gs col0 s gr
+% Polyline
+n 4950 2745 m 5940 2745 l gs col0 s gr
+% Polyline
+n 4950 2925 m 5940 2925 l gs col0 s gr
+% Polyline
+n 4950 3105 m 5940 3105 l gs col0 s gr
+% Polyline
+n 4950 2205 m 5940 2205 l 5940 3285 l 4950 3285 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 2340 m
+gs 1 -1 sc (pFontCache) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 2520 m
+gs 1 -1 sc (pNextFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 2700 m
+gs 1 -1 sc (pPrevFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 2880 m
+gs 1 -1 sc (pCharSpaceLocal) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 3060 m
+gs 1 -1 sc (float size) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+5445 3240 m
+gs 1 -1 sc (int antialias) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 450 2655 m 2070 2655 l gs col0 s gr
+% Polyline
+n 450 2475 m 2070 2475 l 2070 4455 l 450 4455 l cp gs col0 s gr
+% Polyline
+n 450 2835 m 2070 2835 l gs col0 s gr
+% Polyline
+n 450 3015 m 2070 3015 l gs col0 s gr
+% Polyline
+n 450 3195 m 2070 3195 l gs col0 s gr
+% Polyline
+n 450 3375 m 2070 3375 l gs col0 s gr
+% Polyline
+n 450 3915 m 2070 3915 l gs col0 s gr
+% Polyline
+n 450 4095 m 2070 4095 l gs col0 s gr
+% Polyline
+n 450 4275 m 2070 4275 l gs col0 s gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 2610 m
+gs 1 -1 sc (struct DeviceSpecifics) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 2790 m
+gs 1 -1 sc (int T1_Up) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 2970 m
+gs 1 -1 sc (int T1aa_bpp) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 3150 m
+gs 1 -1 sc (int SetFuncRequestID) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 3510 m
+gs 1 -1 sc (Filename) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 3690 m
+gs 1 -1 sc (Searchpath) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 3870 m
+gs 1 -1 sc (Stuff) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 4050 m
+gs 1 -1 sc (char err_warn_msg_buf[1024]) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 4230 m
+gs 1 -1 sc (FILE *t1lib_log_file) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 4410 m
+gs 1 -1 sc (int t1lib_log_level) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 135.00 scf sf
+1260 3330 m
+gs 1 -1 sc (int T1_errno) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 450 630 m 1530 630 l gs col0 s gr
+% Polyline
+n 450 810 m 1530 810 l gs col0 s gr
+% Polyline
+n 450 990 m 1530 990 l gs col0 s gr
+% Polyline
+n 450 1170 m 1530 1170 l gs col0 s gr
+% Polyline
+n 450 1350 m 1530 1350 l gs col0 s gr
+% Polyline
+n 450 450 m 1530 450 l 1530 1710 l 450 1710 l cp gs col0 s gr
+% Polyline
+n 450 1530 m 1530 1530 l gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+990 585 m
+gs 1 -1 sc (int no_fonts_ini) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+990 765 m
+gs 1 -1 sc (int no_fonts) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+990 945 m
+gs 1 -1 sc (int no_fonts_limit) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+990 1125 m
+gs 1 -1 sc (int bitmap_pad) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+990 1305 m
+gs 1 -1 sc (int endian) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+990 1665 m
+gs 1 -1 sc (pFontArray) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+990 1485 m
+gs 1 -1 sc (char **default_enc) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 2700 6300 m 3870 6300 l gs col0 s gr
+% Polyline
+n 2700 6480 m 3870 6480 l gs col0 s gr
+% Polyline
+n 2700 6660 m 3870 6660 l gs col0 s gr
+% Polyline
+n 2700 6840 m 3870 6840 l gs col0 s gr
+% Polyline
+n 2700 7020 m 3870 7020 l gs col0 s gr
+% Polyline
+n 2700 6120 m 3870 6120 l gs col0 s gr
+% Polyline
+n 2700 5940 m 3870 5940 l gs col0 s gr
+% Polyline
+n 2700 5760 m 3870 5760 l gs col0 s gr
+% Polyline
+n 2700 5580 m 3870 5580 l gs col0 s gr
+% Polyline
+n 2700 5400 m 3870 5400 l 3870 7200 l 2700 7200 l cp gs col0 s gr
+% Polyline
+n 2700 7200 m 2700 7380 l gs col0 s gr
+% Polyline
+n 3870 7200 m 3870 7380 l gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 5535 m
+gs 1 -1 sc (pFontFileName) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 6255 m
+gs 1 -1 sc (pKernMap) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 6075 m
+gs 1 -1 sc (pEncMap) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 5895 m
+gs 1 -1 sc (pType1Data) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 5715 m
+gs 1 -1 sc (pAFMData) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 6435 m
+gs 1 -1 sc (pFontEnc) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 6615 m
+gs 1 -1 sc (vm_base) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 6795 m
+gs 1 -1 sc (pFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 6975 m
+gs 1 -1 sc (double FontMatrix[4]) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 7155 m
+gs 1 -1 sc (double FontTransform[4]) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 7335 m
+gs 1 -1 sc (float slant) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 2700 1215 m 3870 1215 l gs col0 s gr
+% Polyline
+n 2700 1395 m 3870 1395 l gs col0 s gr
+% Polyline
+n 2700 1575 m 3870 1575 l gs col0 s gr
+% Polyline
+n 2700 1755 m 3870 1755 l gs col0 s gr
+% Polyline
+n 2700 1935 m 3870 1935 l gs col0 s gr
+% Polyline
+n 2700 2115 m 3870 2115 l gs col0 s gr
+% Polyline
+n 2700 2295 m 3870 2295 l gs col0 s gr
+% Polyline
+n 2700 2475 m 3870 2475 l gs col0 s gr
+% Polyline
+n 2700 2655 m 3870 2655 l gs col0 s gr
+% Polyline
+n 2700 2835 m 3870 2835 l gs col0 s gr
+% Polyline
+n 2700 3015 m 3870 3015 l gs col0 s gr
+% Polyline
+n 2700 3195 m 3870 3195 l gs col0 s gr
+% Polyline
+n 2700 1035 m 3870 1035 l gs col0 s gr
+% Polyline
+n 2700 855 m 3870 855 l gs col0 s gr
+% Polyline
+n 2700 675 m 3870 675 l gs col0 s gr
+% Polyline
+n 2700 495 m 3870 495 l gs col0 s gr
+% Polyline
+n 2700 3555 m 3870 3555 l gs col0 s gr
+% Polyline
+n 2700 3735 m 3870 3735 l gs col0 s gr
+% Polyline
+n 2700 3915 m 3870 3915 l gs col0 s gr
+% Polyline
+n 2700 4095 m 3870 4095 l gs col0 s gr
+% Polyline
+n 2700 3375 m 3870 3375 l gs col0 s gr
+% Polyline
+n 2700 315 m 3870 315 l 3870 4275 l 2700 4275 l cp gs col0 s gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 450 m
+gs 1 -1 sc (pFontFileName) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 1170 m
+gs 1 -1 sc (pKernMap) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 990 m
+gs 1 -1 sc (pEncMap) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 810 m
+gs 1 -1 sc (pType1Data) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 630 m
+gs 1 -1 sc (pAFMData) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 1350 m
+gs 1 -1 sc (pFontEnc) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 1530 m
+gs 1 -1 sc (vm_base) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 1710 m
+gs 1 -1 sc (pFontSizeDeps) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 1890 m
+gs 1 -1 sc (double FontMatrix[4]) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 2430 m
+gs 1 -1 sc (float extend) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 2610 m
+gs 1 -1 sc (float UndrLnPos) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 2790 m
+gs 1 -1 sc (float UndrLnThick) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 2970 m
+gs 1 -1 sc (float OvrLnPos) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 3150 m
+gs 1 -1 sc (float OvrLnThick) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 3330 m
+gs 1 -1 sc (float OvrStrkPos) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 3510 m
+gs 1 -1 sc (float OverStrkThick) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 3690 m
+gs 1 -1 sc (unsigned short physical) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 3870 m
+gs 1 -1 sc (unsigned short refcount) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 4050 m
+gs 1 -1 sc (short space_position) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 4230 m
+gs 1 -1 sc (short info_flags) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 2250 m
+gs 1 -1 sc (float slant) dup sw pop 2 div neg 0 rm col0 sh gr
+% Ellipse
+n 5400 5310 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5400 5490 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+0.000 slw
+% Ellipse
+n 3298 4577 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr
+% Ellipse
+n 3298 4712 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr
+% Ellipse
+n 3285 5310 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr
+% Ellipse
+n 3285 5175 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr
+% Ellipse
+n 3298 4410 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr
+% Polyline
+7.500 slw
+gs clippath
+2529 375 m 2673 405 l 2529 435 l 2715 435 l 2715 375 l cp
+clip
+n 1530 1440 m 2070 1440 l 2070 405 l 2700 405 l gs col0 s gr gr
+
+% arrowhead
+n 2529 375 m 2673 405 l 2529 435 l 2553 405 l 2529 375 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+8220 504 m 8190 648 l 8160 504 l 8160 690 l 8220 690 l cp
+clip
+n 3870 765 m 4950 765 l 4950 405 l 8190 405 l 8190 675 l gs col0 s gr gr
+
+% arrowhead
+n 8220 504 m 8190 648 l 8160 504 l 8190 528 l 8220 504 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+9210 504 m 9180 648 l 9150 504 l 9150 690 l 9210 690 l cp
+clip
+n 3870 585 m 4500 585 l 4500 315 l 9180 315 l 9180 675 l gs col0 s gr gr
+
+% arrowhead
+n 9210 504 m 9180 648 l 9150 504 l 9180 528 l 9210 504 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+ [60] 0 sd
+n 4275 45 m 4275 7425 l gs col0 s gr [] 0 sd
+% Polyline
+ [60] 0 sd
+n 4275 1080 m 6525 1080 l 6525 1215 l 9900 1215 l gs col0 s gr [] 0 sd
+% Polyline
+n 8730 1125 m 9630 1125 l 9630 675 l 8730 675 l cp gs col0 s gr
+% Polyline
+ [60] 0 sd
+n 225 45 m 9900 45 l 9900 7425 l 225 7425 l cp gs col0 s gr [] 0 sd
+% Polyline
+ [60] 0 sd
+n 4275 2115 m 9900 2115 l gs col0 s gr [] 0 sd
+% Polyline
+gs clippath
+6579 870 m 6723 900 l 6579 930 l 6765 930 l 6765 870 l cp
+clip
+n 3870 1305 m 4050 1305 l 4050 900 l 6750 900 l gs col0 s gr gr
+
+% arrowhead
+n 6579 870 m 6723 900 l 6579 930 l 6603 900 l 6579 870 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+5430 1539 m 5400 1683 l 5370 1539 l 5370 1725 l 5430 1725 l cp
+clip
+n 3870 1125 m 4140 1125 l 4140 1260 l 5400 1260 l 5400 1710 l gs col0 s gr gr
+
+% arrowhead
+n 5430 1539 m 5400 1683 l 5370 1539 l 5400 1563 l 5430 1539 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6330 1539 m 6300 1683 l 6270 1539 l 6270 1725 l 6330 1725 l cp
+clip
+n 3870 945 m 4185 945 l 4185 1215 l 6300 1215 l 6300 1710 l gs col0 s gr gr
+
+% arrowhead
+n 6330 1539 m 6300 1683 l 6270 1539 l 6300 1563 l 6330 1539 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4779 3525 m 4923 3555 l 4779 3585 l 4965 3585 l 4965 3525 l cp
+clip
+n 5940 2475 m 6300 2475 l 6300 3420 l 4500 3420 l 4500 3555 l 4950 3555 l gs col0 s gr gr
+
+% arrowhead
+n 4779 3525 m 4923 3555 l 4779 3585 l 4803 3555 l 4779 3525 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4798 2378 m 4928 2311 l 4835 2425 l 4980 2309 l 4943 2262 l cp
+clip
+n 5940 3915 m 6120 3915 l 6120 3330 l 4725 3330 l 4725 2475 l 4950 2295 l gs col0 s gr gr
+
+% arrowhead
+n 4798 2378 m 4928 2311 l 4835 2425 l 4835 2387 l 4798 2378 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4779 5955 m 4923 5985 l 4779 6015 l 4965 6015 l 4965 5955 l cp
+clip
+n 4500 5535 m 4500 5985 l 4950 5985 l gs col0 s gr gr
+
+% arrowhead
+n 4779 5955 m 4923 5985 l 4779 6015 l 4803 5985 l 4779 5955 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 5940 6345 m 6120 6345 l 6120 5580 l gs col0 s gr
+% Polyline
+gs clippath
+4798 3638 m 4928 3571 l 4835 3685 l 4980 3569 l 4943 3522 l cp
+clip
+n 6120 5085 m 6120 4680 l 6120 4590 l 4725 4590 l 4725 3735 l 4950 3555 l gs col0 s gr gr
+
+% arrowhead
+n 4798 3638 m 4928 3571 l 4835 3685 l 4835 3647 l 4798 3638 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 5940 3735 m 6300 3735 l 6300 4680 l 4500 4680 l 4500 5085 l gs col0 s gr
+% Polyline
+gs clippath
+4779 2265 m 4923 2295 l 4779 2325 l 4965 2325 l 4965 2265 l cp
+clip
+n 3870 1845 m 4050 1845 l 4050 2295 l 4950 2295 l gs col0 s gr gr
+
+% arrowhead
+n 4779 2265 m 4923 2295 l 4779 2325 l 4803 2295 l 4779 2265 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 4275 5445 m 4277 5446 l 4283 5448 l 4292 5452 l 4306 5457 l 4323 5463 l
+ 4344 5471 l 4366 5479 l 4389 5487 l 4411 5495 l 4434 5503 l
+ 4456 5510 l 4477 5517 l 4499 5524 l 4520 5530 l 4542 5537 l
+ 4566 5543 l 4590 5550 l 4608 5555 l 4626 5560 l 4646 5565 l
+ 4667 5570 l 4688 5575 l 4711 5581 l 4735 5586 l 4759 5592 l
+ 4785 5597 l 4812 5603 l 4840 5608 l 4868 5614 l 4897 5619 l
+ 4927 5624 l 4956 5628 l 4986 5633 l 5017 5637 l 5047 5641 l
+ 5077 5644 l 5106 5647 l 5136 5649 l 5165 5651 l 5194 5653 l
+ 5223 5654 l 5251 5655 l 5280 5655 l 5309 5655 l 5338 5654 l
+ 5367 5653 l 5397 5651 l 5427 5649 l 5458 5647 l 5489 5644 l
+ 5521 5641 l 5553 5638 l 5585 5634 l 5618 5630 l 5650 5626 l
+ 5682 5622 l 5714 5618 l 5745 5613 l 5776 5609 l 5806 5604 l
+ 5835 5600 l 5863 5596 l 5890 5592 l 5916 5588 l 5941 5584 l
+ 5964 5581 l 5987 5578 l 6009 5575 l 6030 5573 l 6056 5570 l
+ 6081 5567 l 6106 5566 l 6130 5564 l 6154 5564 l 6178 5563 l
+ 6203 5564 l 6229 5564 l 6255 5565 l 6282 5567 l 6310 5569 l
+ 6336 5571 l 6361 5573 l 6384 5575 l 6403 5577 l 6417 5578 l
+ 6427 5579 l 6432 5580 l 6435 5580 l gs col0 s gr
+% Polyline
+n 4275 5040 m 4278 5040 l 4283 5042 l 4292 5043 l 4306 5046 l 4324 5050 l
+ 4344 5053 l 4367 5058 l 4390 5062 l 4413 5067 l 4436 5071 l
+ 4458 5075 l 4481 5079 l 4503 5083 l 4525 5087 l 4548 5091 l
+ 4572 5096 l 4598 5100 l 4616 5103 l 4636 5107 l 4656 5110 l
+ 4678 5114 l 4700 5117 l 4724 5121 l 4749 5125 l 4775 5129 l
+ 4802 5133 l 4830 5137 l 4859 5141 l 4888 5145 l 4919 5148 l
+ 4949 5152 l 4980 5155 l 5011 5159 l 5042 5162 l 5073 5164 l
+ 5104 5167 l 5134 5169 l 5165 5171 l 5194 5172 l 5224 5173 l
+ 5253 5174 l 5281 5175 l 5310 5175 l 5339 5175 l 5367 5174 l
+ 5396 5173 l 5426 5172 l 5455 5171 l 5486 5169 l 5516 5167 l
+ 5547 5164 l 5578 5162 l 5609 5159 l 5641 5155 l 5672 5152 l
+ 5703 5148 l 5733 5145 l 5763 5141 l 5792 5137 l 5820 5133 l
+ 5848 5129 l 5874 5125 l 5899 5121 l 5924 5117 l 5947 5114 l
+ 5969 5110 l 5990 5107 l 6011 5103 l 6030 5100 l 6057 5096 l
+ 6082 5091 l 6107 5087 l 6131 5083 l 6155 5079 l 6179 5075 l
+ 6204 5071 l 6230 5067 l 6257 5062 l 6283 5058 l 6309 5053 l
+ 6333 5050 l 6353 5046 l 6370 5043 l 6381 5042 l 6387 5040 l
+ 6390 5040 l gs col0 s gr
+/Helvetica-Narrow-Bold-iso ff 225.00 scf sf
+4500 225 m
+gs 1 -1 sc (Level 1: Size-Independent Font Data) col0 sh gr
+/Helvetica-Narrow-Bold-iso ff 225.00 scf sf
+450 225 m
+gs 1 -1 sc (Level 0: Global Data Area) col0 sh gr
+/Helvetica-Narrow-Bold-iso ff 225.00 scf sf
+4500 7290 m
+gs 1 -1 sc (Level 2: Size-Dependent Font Data) col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+9180 990 m
+gs 1 -1 sc (DataStructures) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+9180 855 m
+gs 1 -1 sc (Adobe Font Metric) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-Bold-iso ff 225.00 scf sf
+6795 1440 m
+gs 1 -1 sc (Level 1b: Mapping Tables) col0 sh gr
+/Helvetica-Narrow-Bold-iso ff 225.00 scf sf
+1305 2340 m
+gs 1 -1 sc (Global Variables) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 150.00 scf sf
+3285 4905 m
+gs 1 -1 sc (Structure-Array of) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 150.00 scf sf
+3285 5085 m
+gs 1 -1 sc (size no_fonts_limit) dup sw pop 2 div neg 0 rm col0 sh gr
+/Helvetica-Narrow-iso ff 120.00 scf sf
+3285 2070 m
+gs 1 -1 sc (double FontTransform[4]) dup sw pop 2 div neg 0 rm col0 sh gr
+$F2psEnd
+rs
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.fig b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.fig
new file mode 100644
index 00000000000..7a0a3e18613
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.fig
@@ -0,0 +1,349 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4
+100.00
+Single
+0
+1200 2
+6 6750 675 7650 1125
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 6750 1125 7650 1125 7650 675 6750 675 6750 1125
+4 1 0 0 0 20 8 0.0000 4 120 1065 7200 855 External Encoding\001
+4 1 0 0 0 20 8 0.0000 4 120 555 7200 1005 (optional)\001
+-6
+6 7740 675 8640 1125
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 7740 1125 8640 1125 8640 675 7740 675 7740 1125
+4 1 0 0 0 20 8 0.0000 4 120 810 8190 855 Internal Type 1\001
+4 1 0 0 0 20 8 0.0000 4 105 855 8190 1005 Data Structures\001
+-6
+6 5310 1710 5940 1935
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 5310 1935 5940 1935 5940 1710 5310 1710 5310 1935
+4 1 0 0 0 20 8 0.0000 4 105 510 5625 1845 KernMap\001
+-6
+6 6210 1710 6840 1935
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 6210 1935 6840 1935 6840 1710 6210 1710 6210 1935
+4 1 0 0 0 20 8 0.0000 4 105 465 6525 1845 EncMap\001
+-6
+6 5940 3555 8550 4365
+6 7650 3870 8550 4365
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 7650 4365 8550 4365 8550 3870 7650 3870 7650 4365
+4 1 0 0 0 20 8 0.0000 4 120 660 8100 4140 glyphs[256]\001
+-6
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4
+ 2 1 1.00 60.00 120.00
+ 5940 3555 6750 3555 6750 3870 7650 3870
+-6
+6 5940 2295 8550 3105
+6 7650 2610 8550 3105
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 7650 3105 8550 3105 8550 2610 7650 2610 7650 3105
+4 1 0 0 0 20 8 0.0000 4 120 660 8100 2880 glyphs[256]\001
+-6
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4
+ 2 1 1.00 60.00 120.00
+ 5940 2295 6750 2295 6750 2610 7650 2610
+-6
+6 4950 5895 5940 6975
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 6075 5940 6075
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 6255 5940 6255
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 6435 5940 6435
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 6615 5940 6615
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 6795 5940 6795
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 4950 5895 5940 5895 5940 6975 4950 6975 4950 5895
+4 1 0 0 0 20 8 0.0000 4 120 690 5445 6030 pFontCache\001
+4 1 0 0 0 20 8 0.0000 4 120 1140 5445 6210 pNextFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 1140 5445 6390 pPrevFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 990 5445 6570 pCharSpaceLocal\001
+4 1 0 0 0 20 8 0.0000 4 105 495 5445 6750 float size\001
+4 1 0 0 0 20 8 0.0000 4 105 630 5445 6930 int antialias\001
+-6
+6 5940 5985 8550 6795
+6 7650 6300 8550 6795
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 7650 6795 8550 6795 8550 6300 7650 6300 7650 6795
+4 1 0 0 0 20 8 0.0000 4 120 660 8100 6570 glyphs[256]\001
+-6
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4
+ 2 1 1.00 60.00 120.00
+ 5940 5985 6750 5985 6750 6300 7650 6300
+-6
+6 4950 3465 5940 4545
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 3645 5940 3645
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 3825 5940 3825
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 4005 5940 4005
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 4185 5940 4185
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 4365 5940 4365
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 4950 3465 5940 3465 5940 4545 4950 4545 4950 3465
+4 1 0 0 0 20 8 0.0000 4 120 690 5445 3600 pFontCache\001
+4 1 0 0 0 20 8 0.0000 4 120 1140 5445 3780 pNextFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 1140 5445 3960 pPrevFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 990 5445 4140 pCharSpaceLocal\001
+4 1 0 0 0 20 8 0.0000 4 105 495 5445 4320 float size\001
+4 1 0 0 0 20 8 0.0000 4 105 630 5445 4500 int antialias\001
+-6
+6 4950 2205 5940 3285
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 2385 5940 2385
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 2565 5940 2565
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 2745 5940 2745
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 2925 5940 2925
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 4950 3105 5940 3105
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 4950 2205 5940 2205 5940 3285 4950 3285 4950 2205
+4 1 0 0 0 20 8 0.0000 4 120 690 5445 2340 pFontCache\001
+4 1 0 0 0 20 8 0.0000 4 120 1140 5445 2520 pNextFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 1140 5445 2700 pPrevFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 990 5445 2880 pCharSpaceLocal\001
+4 1 0 0 0 20 8 0.0000 4 105 495 5445 3060 float size\001
+4 1 0 0 0 20 8 0.0000 4 105 630 5445 3240 int antialias\001
+-6
+6 315 2475 2205 4455
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 2655 2070 2655
+2 2 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 5
+ 450 2475 2070 2475 2070 4455 450 4455 450 2475
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 2835 2070 2835
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 3015 2070 3015
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 3195 2070 3195
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 3375 2070 3375
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 3915 2070 3915
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 4095 2070 4095
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 450 4275 2070 4275
+4 1 0 0 0 20 9 0.0000 4 120 1410 1260 2610 struct DeviceSpecifics\001
+4 1 0 0 0 20 9 0.0000 4 120 615 1260 2790 int T1_Up\001
+4 1 0 0 0 20 9 0.0000 4 120 810 1260 2970 int T1aa_bpp\001
+4 1 0 0 0 20 9 0.0000 4 120 1395 1260 3150 int SetFuncRequestID\001
+4 1 0 0 0 20 9 0.0000 4 90 570 1260 3510 Filename\001
+4 1 0 0 0 20 9 0.0000 4 120 705 1260 3690 Searchpath\001
+4 1 0 0 0 20 9 0.0000 4 90 300 1260 3870 Stuff\001
+4 1 0 0 0 20 9 0.0000 4 120 1860 1260 4050 char err_warn_msg_buf[1024]\001
+4 1 0 0 0 20 9 0.0000 4 120 1170 1260 4230 FILE *t1lib_log_file\001
+4 1 0 0 0 20 9 0.0000 4 120 1065 1260 4410 int t1lib_log_level\001
+4 1 0 0 0 20 9 0.0000 4 105 750 1260 3330 int T1_errno\001
+-6
+6 450 450 1530 1710
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 450 630 1530 630
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 450 810 1530 810
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 450 990 1530 990
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 450 1170 1530 1170
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 450 1350 1530 1350
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 450 450 1530 450 1530 1710 450 1710 450 450
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 450 1530 1530 1530
+4 1 0 0 0 20 8 0.0000 4 120 915 990 585 int no_fonts_ini\001
+4 1 0 0 0 20 8 0.0000 4 120 705 990 765 int no_fonts\001
+4 1 0 0 0 20 8 0.0000 4 120 1005 990 945 int no_fonts_limit\001
+4 1 0 0 0 20 8 0.0000 4 120 840 990 1125 int bitmap_pad\001
+4 1 0 0 0 20 8 0.0000 4 105 555 990 1305 int endian\001
+4 1 0 0 0 20 8 0.0000 4 120 645 990 1665 pFontArray\001
+4 1 0 0 0 20 8 0.0000 4 120 1005 990 1485 char **default_enc\001
+-6
+6 2565 5400 4005 7380
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 6300 3870 6300
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 6480 3870 6480
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 6660 3870 6660
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 6840 3870 6840
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 7020 3870 7020
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 6120 3870 6120
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 5940 3870 5940
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 5760 3870 5760
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 5580 3870 5580
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 2700 5400 3870 5400 3870 7200 2700 7200 2700 5400
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 7200 2700 7380
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 3870 7200 3870 7380
+4 1 0 0 0 20 8 0.0000 4 120 840 3285 5535 pFontFileName\001
+4 1 0 0 0 20 8 0.0000 4 105 585 3285 6255 pKernMap\001
+4 1 0 0 0 20 8 0.0000 4 105 540 3285 6075 pEncMap\001
+4 1 0 0 0 20 8 0.0000 4 120 660 3285 5895 pType1Data\001
+4 1 0 0 0 20 8 0.0000 4 120 600 3285 5715 pAFMData\001
+4 1 0 0 0 20 8 0.0000 4 120 570 3285 6435 pFontEnc\001
+4 1 0 0 0 20 8 0.0000 4 120 495 3285 6615 vm_base\001
+4 1 0 0 0 20 8 0.0000 4 120 870 3285 6795 pFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 1170 3285 6975 double FontMatrix[4]\001
+4 1 0 0 0 20 8 0.0000 4 120 1365 3285 7155 double FontTransform[4]\001
+4 1 0 0 0 20 8 0.0000 4 105 555 3285 7335 float slant\001
+-6
+6 2610 315 3960 4275
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 1215 3870 1215
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 1395 3870 1395
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 1575 3870 1575
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 1755 3870 1755
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 1935 3870 1935
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 2115 3870 2115
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 2295 3870 2295
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 2475 3870 2475
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 2655 3870 2655
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 2835 3870 2835
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 3015 3870 3015
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 3195 3870 3195
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 1035 3870 1035
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 855 3870 855
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 675 3870 675
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 495 3870 495
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 3555 3870 3555
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 3735 3870 3735
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 3915 3870 3915
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 4095 3870 4095
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+ 2700 3375 3870 3375
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 2700 315 3870 315 3870 4275 2700 4275 2700 315
+4 1 0 0 0 20 8 0.0000 4 120 840 3285 450 pFontFileName\001
+4 1 0 0 0 20 8 0.0000 4 105 585 3285 1170 pKernMap\001
+4 1 0 0 0 20 8 0.0000 4 105 540 3285 990 pEncMap\001
+4 1 0 0 0 20 8 0.0000 4 120 660 3285 810 pType1Data\001
+4 1 0 0 0 20 8 0.0000 4 120 600 3285 630 pAFMData\001
+4 1 0 0 0 20 8 0.0000 4 120 570 3285 1350 pFontEnc\001
+4 1 0 0 0 20 8 0.0000 4 120 495 3285 1530 vm_base\001
+4 1 0 0 0 20 8 0.0000 4 120 870 3285 1710 pFontSizeDeps\001
+4 1 0 0 0 20 8 0.0000 4 120 1170 3285 1890 double FontMatrix[4]\001
+4 1 0 0 0 20 8 0.0000 4 105 675 3285 2430 float extend\001
+4 1 0 0 0 20 8 0.0000 4 105 945 3285 2610 float UndrLnPos\001
+4 1 0 0 0 20 8 0.0000 4 105 1005 3285 2790 float UndrLnThick\001
+4 1 0 0 0 20 8 0.0000 4 105 870 3285 2970 float OvrLnPos\001
+4 1 0 0 0 20 8 0.0000 4 105 930 3285 3150 float OvrLnThick\001
+4 1 0 0 0 20 8 0.0000 4 105 960 3285 3330 float OvrStrkPos\001
+4 1 0 0 0 20 8 0.0000 4 105 1080 3285 3510 float OverStrkThick\001
+4 1 0 0 0 20 8 0.0000 4 120 1320 3285 3690 unsigned short physical\001
+4 1 0 0 0 20 8 0.0000 4 120 1335 3285 3870 unsigned short refcount\001
+4 1 0 0 0 20 8 0.0000 4 120 1185 3285 4050 short space_position\001
+4 1 0 0 0 20 8 0.0000 4 120 900 3285 4230 short info_flags\001
+4 1 0 0 0 20 8 0.0000 4 105 555 3285 2250 float slant\001
+-6
+1 3 0 1 0 0 0 0 20 0.000 1 0.0000 5400 5310 45 45 5400 5310 5445 5310
+1 3 0 1 0 0 0 0 20 0.000 1 0.0000 5400 5490 45 45 5400 5490 5445 5490
+1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3298 4577 45 45 3298 4577 3343 4577
+1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3298 4712 45 45 3298 4712 3343 4712
+1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3285 5310 45 45 3285 5310 3330 5310
+1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3285 5175 45 45 3285 5175 3330 5175
+1 3 0 0 0 0 0 0 20 0.000 1 0.0000 3298 4410 45 45 3298 4410 3343 4410
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4
+ 2 1 1.00 60.00 120.00
+ 1530 1440 2070 1440 2070 405 2700 405
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 5
+ 2 1 1.00 60.00 120.00
+ 3870 765 4950 765 4950 405 8190 405 8190 675
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 5
+ 2 1 1.00 60.00 120.00
+ 3870 585 4500 585 4500 315 9180 315 9180 675
+2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 4275 45 4275 7425
+2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 4
+ 4275 1080 6525 1080 6525 1215 9900 1215
+2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 8730 1125 9630 1125 9630 675 8730 675 8730 1125
+2 2 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 5
+ 225 45 9900 45 9900 7425 225 7425 225 45
+2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
+ 4275 2115 9900 2115
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4
+ 2 1 1.00 60.00 120.00
+ 3870 1305 4050 1305 4050 900 6750 900
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 1 0 5
+ 2 1 1.00 60.00 120.00
+ 3870 1125 4140 1125 4140 1260 5400 1260 5400 1710
+2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 1 0 5
+ 2 1 1.00 60.00 120.00
+ 3870 945 4185 945 4185 1215 6300 1215 6300 1710
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 6
+ 2 1 1.00 60.00 120.00
+ 5940 2475 6300 2475 6300 3420 4500 3420 4500 3555 4950 3555
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 6
+ 2 1 1.00 60.00 120.00
+ 5940 3915 6120 3915 6120 3330 4725 3330 4725 2475 4950 2295
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 3
+ 2 1 1.00 60.00 120.00
+ 4500 5535 4500 5985 4950 5985
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 3
+ 5940 6345 6120 6345 6120 5580
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 6
+ 2 1 1.00 60.00 120.00
+ 6120 5085 6120 4680 6120 4590 4725 4590 4725 3735 4950 3555
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5
+ 5940 3735 6300 3735 6300 4680 4500 4680 4500 5085
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 4
+ 2 1 1.00 60.00 120.00
+ 3870 1845 4050 1845 4050 2295 4950 2295
+3 0 0 1 0 7 0 0 -1 0.000 0 0 0 5
+ 4275 5445 4500 5535 5265 5715 6120 5535 6435 5580
+ 0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 0 0 -1 0.000 0 0 0 5
+ 4275 5040 4500 5085 5310 5220 6120 5085 6390 5040
+ 0.000 1.000 1.000 1.000 0.000
+4 0 0 0 0 22 15 0.0000 4 210 3840 4500 225 Level 1: Size-Independent Font Data\001
+4 0 0 0 0 22 15 0.0000 4 165 2655 450 225 Level 0: Global Data Area\001
+4 0 0 0 0 22 15 0.0000 4 210 3675 4500 7290 Level 2: Size-Dependent Font Data\001
+4 1 0 0 0 20 8 0.0000 4 105 825 9180 990 DataStructures\001
+4 1 0 0 0 20 8 0.0000 4 105 1050 9180 855 Adobe Font Metric\001
+4 0 0 0 0 22 15 0.0000 4 210 2670 6795 1440 Level 1b: Mapping Tables\001
+4 1 0 0 0 22 15 0.0000 4 165 1725 1305 2340 Global Variables\001
+4 1 0 0 0 20 10 0.0000 4 150 1320 3285 4905 Structure-Array of\001
+4 1 0 0 0 20 10 0.0000 4 150 1305 3285 5085 size no_fonts_limit\001
+4 1 0 0 0 20 8 0.0000 4 120 1365 3285 2070 double FontTransform[4]\001
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.pdf
new file mode 100644
index 00000000000..95a4090cdfe
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1_data.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath.eps
new file mode 100644
index 00000000000..f9f53e5bf7a
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath.eps
@@ -0,0 +1,327 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: (Created manually by RMz, 2003-01-15. Illustration of t1lib parallel path construction)
+%%Title: Parallel Path Construction
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 600 500
+%%EndComments
+%
+% 3.
+
+gsave
+
+/xa 100 def
+/ya 100 def
+/xb 100 def
+/yb 400 def
+/xc 500 def
+/yc 750 def
+/xd 500 def
+/yd 100 def
+
+% 4.
+/xa 100 def
+/ya 300 def
+/xb 100 def
+/y5 400 def
+/xc 500 def
+/yc 300 def
+/xd 300 def
+/yd 300 def
+
+
+% 2.
+/xa 100 def
+/ya 100 def
+/xb 100 def
+/yb 400 def
+/xc 300 def
+/yc 550 def
+/xd 500 def
+/yd 600 def
+
+% 1.
+/xa 55 def
+/ya 40 def
+/xb 120 def
+/yb 200 def
+/xc 300 def
+/yc 400 def
+/xd 550 def
+/yd 445 def
+
+/TimesRoman findfont 25 scalefont setfont
+/line1 20 string def
+
+
+
+
+
+/linewidth 100 def
+
+% compute distance from Bezier_A to Bezier_B
+/dista xb xa sub dup mul yb ya sub dup mul add sqrt def
+
+% compute distance from Bezier_C to Bezier_D
+/distd xd xc sub dup mul yd yc sub dup mul add sqrt def
+
+/diameter linewidth 2 div def
+
+% compute resulting limit values of thick curve at end points
+/dxa yb ya sub diameter mul dista div def
+/dya xb xa sub diameter mul dista div neg def
+/dxd yd yc sub diameter mul distd div def
+/dyd xd xc sub diameter mul distd div neg def
+
+% draw curve as rendered by ghostscript
+0.9 0.9 0.9 setrgbcolor
+xa ya moveto
+xb yb xc yc xd yd curveto
+%linewidth 40 div setlinewidth
+linewidth setlinewidth
+0 setlinecap
+stroke
+
+0.0 0.0 0.0 setrgbcolor
+xa ya moveto
+xb yb xc yc xd yd curveto
+1 setlinewidth
+0 setlinecap
+[4 4] 0 setdash
+stroke
+
+
+% reset dash
+[] 0 setdash
+
+% correct right path end points
+/xar xa dxa add def
+/yar ya dya add def
+/xdr xd dxd add def
+/ydr yd dyd add def
+
+% correct left path end points
+/xal xa dxa sub def
+/yal ya dya sub def
+/xdl xd dxd sub def
+/ydl yd dyd sub def
+
+
+/x1 xa xb add 0.5 mul def
+/y1 ya yb add 0.5 mul def
+/x2 xb xc add 0.5 mul def
+/y2 yb yc add 0.5 mul def
+/x3 xc xd add 0.5 mul def
+/y3 yc yd add 0.5 mul def
+/x4 xa xb 2 mul add xc add 4 div def
+/y4 ya yb 2 mul add yc add 4 div def
+/x5 xd xc 2 mul add xb add 4 div def
+/y5 yd yc 2 mul add yb add 4 div def
+/x6 xa xb 3 mul add xc 3 mul add xd add 8 div def
+/y6 ya yb 3 mul add yc 3 mul add yd add 8 div def
+
+0 0 0 setrgbcolor
+newpath xa ya 4.0 0 360 arc closepath fill
+newpath xb yb 4.0 0 360 arc closepath fill
+newpath xc yc 4.0 0 360 arc closepath fill
+newpath xd yd 4.0 0 360 arc closepath fill
+
+0 0 0 setrgbcolor
+newpath x1 y1 3.0 0 360 arc closepath fill
+newpath x2 y2 3.0 0 360 arc closepath fill
+newpath x3 y3 3.0 0 360 arc closepath fill
+
+0 0 0 setrgbcolor
+newpath x4 y4 2.0 0 360 arc closepath fill
+newpath x5 y5 2.0 0 360 arc closepath fill
+
+0 0 0 setrgbcolor
+newpath x6 y6 4.0 0 360 arc closepath stroke
+
+
+% compute right-side normal vector
+/nabs diameter x5 x4 sub dup mul y5 y4 sub dup mul add sqrt div def
+
+/nxr y5 y4 sub nabs mul def
+/nyr x4 x5 sub nabs mul def
+
+0 0 0 setrgbcolor
+newpath x6 nxr add y6 nyr add 4.0 0 360 arc closepath stroke
+newpath x6 nxr sub y6 nyr sub 4.0 0 360 arc closepath stroke
+
+% calculate location and direction vectors of lines to intersect
+/bloc1x 4 nxr x6 add mul xar 2 mul sub xdr add 3 div def
+/bloc1y 4 nyr y6 add mul yar 2 mul sub ydr add 3 div def
+/bdir1x xc xd add xa sub xb sub def
+/bdir1y yc yd add ya sub yb sub def
+/bloc2x xar def
+/bloc2y yar def
+/bdir2x xb xa sub def
+/bdir2y yb ya sub def
+
+% calculate determinant and inverse
+/bdet bdir2x bdir1y mul bdir2y bdir1x mul sub def
+
+%bdet 0.0 eq
+bdet abs 0.001 le
+{
+ /xbr xb nxr add def
+ /ybr yb nyr add def
+ /bnu 0.0 def
+ /bmu 0.0 def
+}
+{
+ /binvdet 1 bdet div def
+
+ % calculate inverse of dir matrix
+ /binvdir2x bdir1y binvdet mul def
+ /binvdir2y bdir2y binvdet mul neg def
+ /binvdir1x bdir1x binvdet mul neg def
+ /binvdir1y bdir2x binvdet mul def
+
+ % calculate mu and nu value (nu actually is not required)
+ /bmu binvdir2x bloc1x bloc2x sub mul binvdir1x bloc1y bloc2y sub mul add def
+ /bnu binvdir2y bloc1x bloc2x sub mul binvdir1y bloc1y bloc2y sub mul add def
+
+ /xbr bloc2x bmu bdir2x mul add def
+ /ybr bloc2y bmu bdir2y mul add def
+}
+ifelse
+
+
+
+% calculate location and direction vectors of lines to intersect
+/cloc1x 4 nxr x6 add mul xar add xdr 2 mul sub 3 div def
+/cloc1y 4 nyr y6 add mul yar add ydr 2 mul sub 3 div def
+/cdir1x xc xd add xa sub xb sub def
+/cdir1y yc yd add ya sub yb sub def
+/cloc2x xdr def
+/cloc2y ydr def
+/cdir2x xc xd sub def
+/cdir2y yc yd sub def
+
+% calculate determinant and inverse
+/cdet cdir2x cdir1y mul cdir2y cdir1x mul sub def
+
+%cdet 0.0 eq
+cdet abs 0.001 le
+{
+ % curve is just a straight line
+ /xcr xc nxr add def
+ /ycr yc nyr add def
+ /cmu 0.0 def
+}
+{
+ /cinvdet 1 cdet div def
+
+ % calculate inverse of dir matrix
+ /cinvdir2x cdir1y cinvdet mul def
+ /cinvdir2y cdir2y cinvdet mul neg def
+ /cinvdir1x cdir1x cinvdet mul neg def
+ /cinvdir1y cdir2x cinvdet mul def
+
+ % calculate mu and nu value (mu actually is not required)
+ /cmu cinvdir2x cloc1x cloc2x sub mul cinvdir1x cloc1y cloc2y sub mul add def
+ /cnu cinvdir2y cloc1x cloc2x sub mul cinvdir1y cloc1y cloc2y sub mul add def
+
+ /xcr cloc2x cmu cdir2x mul add def
+ /ycr cloc2y cmu cdir2y mul add def
+}
+ifelse
+
+
+% Analyse coefficients and decide how to compute displacements
+bmu 0.1 le
+{
+ /xbr 8 nxr x6 add mul xar sub xdr sub 3 div xcr sub def
+ /ybr 8 nyr y6 add mul yar sub ydr sub 3 div ycr sub def
+}
+if
+
+cmu 0.1 le
+{
+ /xcr 8 nxr x6 add mul xar sub xdr sub 3 div xbr sub def
+ /ycr 8 nyr y6 add mul yar sub ydr sub 3 div ybr sub def
+}
+if
+
+
+% define delta values
+/dxb xbr xb sub def
+/dyb ybr yb sub def
+/dxc xcr xc sub def
+/dyc ycr yc sub def
+
+
+0.5 setlinewidth
+
+% show tangent at t=0.5 and their shifted counterparts
+[32 32] 0 setdash
+x4 y4 moveto
+x5 y5 lineto
+stroke
+x4 nxr add y4 nyr add moveto
+x5 nxr add y5 nyr add lineto
+x4 nxr sub y4 nyr sub moveto
+x5 nxr sub y5 nyr sub lineto
+stroke
+[] 0 setdash
+
+0 0 0 setrgbcolor
+1 setlinewidth
+
+% stroke right curve
+xar yar moveto
+xb dxb add yb dyb add xc dxc add yc dyc add xdr ydr curveto
+stroke
+% stroke left curve
+xal yal moveto
+xb dxb sub yb dyb sub xc dxc sub yc dyc sub xdl ydl curveto
+stroke
+
+%0.2 0.5 0.8 setrgbcolor
+%newpath bloc2x bloc2y 5.0 0 360 arc closepath fill
+%bloc2x 10 bdir2x mul sub bloc2y 10 bdir2y mul sub moveto
+%bloc2x 10 bdir2x mul add bloc2y 10 bdir2y mul add lineto stroke
+
+%0.5 0.5 0.5 setrgbcolor
+%newpath bloc1x bloc1y 5.0 0 360 arc closepath fill
+%bloc1x 10 bdir1x mul sub bloc1y 10 bdir1y mul sub moveto
+%bloc1x 10 bdir1x mul add bloc1y 10 bdir1y mul add lineto stroke
+
+
+% draw tangents
+0 0 0 setrgbcolor
+%1 setlinewidth
+%[5 5] 0 setdash
+0.5 setlinewidth
+[4 4] 0 setdash
+xa ya moveto xb yb lineto stroke
+xd yd moveto xc yc lineto stroke
+[] 0 setdash
+xar yar moveto xb dxb add yb dyb add lineto stroke
+xdr ydr moveto xc dxc add yc dyc add lineto stroke
+xal yal moveto xb dxb sub yb dyb sub lineto stroke
+xdl ydl moveto xc dxc sub yc dyc sub lineto stroke
+
+% draw auxiliary lines
+[8 8] 0 setdash
+xb yb moveto xc yc lineto stroke
+[16 16] 0 setdash
+x1 y1 moveto x2 y2 lineto stroke
+x2 y2 moveto x3 y3 lineto stroke
+
+
+% draw resulting points
+0 0 0 setrgbcolor
+newpath xar yar 4.0 0 360 arc closepath fill
+newpath xb dxb add yb dyb add 4.0 0 360 arc closepath fill
+newpath xc dxc add yc dyc add 4.0 0 360 arc closepath fill
+newpath xdr ydr 4.0 0 360 arc closepath fill
+newpath xal yal 4.0 0 360 arc closepath fill
+newpath xb dxb sub yb dyb sub 4.0 0 360 arc closepath fill
+newpath xc dxc sub yc dyc sub 4.0 0 360 arc closepath fill
+newpath xdl ydl 4.0 0 360 arc closepath fill
+
+
+grestore
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.eps
new file mode 100644
index 00000000000..ccb61e87ee9
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.eps
@@ -0,0 +1,850 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%For: Rainer Menzner
+%%CreationDate: Sun Feb 9 17:57:06 2003
+%%Title: parallelpath_sk.eps
+%%Creator: Sketch 0.6.8
+%%Pages: 1
+%%BoundingBox: 8 92 614 598
+%%Extensions: CMYK
+%%DocumentSuppliedResources: (atend)
+%%DocumentNeededResources: font Helvetica
+%%EndComments
+
+%%BeginProlog
+%%BeginResource: procset Linux-Sketch-Procset 1.0 2
+/SketchDict 100 dict def
+SketchDict begin
+/bd { bind def } bind def
+/x { exch } bd
+/xd { exch def } bd
+/PI 3.14159265358979323846264338327 def
+/radgrad { 180 mul PI div } bd
+/skstartmatrix matrix currentmatrix def
+/tmpmat matrix def
+/ISOLatin1Encoding dup where
+{ pop pop }
+{ [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand
+/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period
+/slash /zero /one /two /three /four /five /six /seven /eight /nine /colon
+/semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J
+/K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
+/bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i
+/j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
+/asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /dotlessi /grave /acute /circumflex /tilde /macron /breve
+/dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek
+/caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen
+/registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu
+/paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright
+/onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex
+/Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex
+/Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve
+/Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute
+/Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute
+/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute
+/ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde
+/ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
+/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def
+}
+ifelse
+/arct dup where
+{pop pop}
+{
+/arct {arcto pop pop pop pop} bd
+}
+ifelse
+/size 0 def
+/fontname 0 def
+/newfont 0 def
+/sf {
+/size xd
+/fontname xd
+fontname findfont
+dup /Encoding get StandardEncoding eq
+{
+dup
+length dict /newfont xd
+{
+1 index
+/FID ne
+{ newfont 3 1 roll put }
+{ pop pop }
+ifelse
+} forall
+newfont /Encoding ISOLatin1Encoding put
+fontname newfont definefont
+}
+if
+size scalefont setfont
+} bd
+/pusht {matrix currentmatrix} bd
+/popt {setmatrix} bd
+/pushc {gsave} bd
+/popc {grestore} bd
+/rgb {setrgbcolor} bd
+/w { setlinewidth } bd
+/j { setlinejoin } bd
+/J { setlinecap } bd
+/d { setdash } bd
+/F { eofill } bd
+/f { closepath F } bd
+/S {
+pusht
+skstartmatrix setmatrix stroke
+popt
+} bd
+/s { closepath S } bd
+/m { moveto } bd
+/l { lineto } bd
+/c { curveto } bd
+/txt {
+/tmpmat tmpmat currentmatrix def
+dup type /arraytype eq {concat} {translate} ifelse
+0 0 m
+tmpmat
+} bd
+/T {txt x show popt} bd
+/P {txt x true charpath popt} bd
+/TP {txt x dup show 0 0 m true charpath popt} bd
+/C {newpath 0 360 arc} bd
+/R {
+2 copy m
+x 2 index l
+x 2 index x l
+l
+closepath
+} bd
+/ellipse {
+dup type /arraytype eq
+{
+pusht x concat
+0 0 1.0 C
+popt
+}
+{
+pusht 5 1 roll
+4 -1 roll concat
+newpath
+dup 2 eq {
+0 0 m
+} if
+3 1 roll
+radgrad x
+radgrad x
+0 0 1 5 -2 roll
+arc
+0 ne { closepath } if
+popt
+}
+ifelse
+} bd
+/radius1 0 def
+/radius2 0 def
+/factor 0 def
+/rect {
+dup type /arraytype eq
+{
+pusht x concat
+0 0 m 1 0 l 1 1 l 0 1 l closepath
+popt
+}
+{
+/radius2 xd
+/radius1 xd
+pusht x concat
+radius1 radius2 div 1 scale
+0 radius2 m
+0 1 radius2 1 radius2 arct
+radius2 radius1 div
+dup 1 1 index 0 radius2 arct
+0 0 0 radius2 arct
+0 0 0 1 radius2 arct
+closepath
+popt
+}
+ifelse
+} bd
+/buf 0 def
+/width 0 def
+/height 0 def
+/skcimg {
+/tmpmat tmpmat currentmatrix def
+{ concat } if
+/height xd
+/width xd
+/buf width 3 mul string def
+width height scale
+width height 8
+[width 0 0 height neg 0 height]
+{ currentfile buf readhexstring pop } bind
+false 3 colorimage
+tmpmat setmatrix
+} bd
+/skgimg {
+/tmpmat tmpmat currentmatrix def
+{ concat } if
+/height xd
+/width xd
+/buf width string def
+width height scale
+width height 8
+[width 0 0 height neg 0 height]
+{ currentfile buf readhexstring pop } bind
+image
+tmpmat setmatrix
+} bd
+/rclip {
+4 2 roll m
+dup 0 x rlineto
+x 0 rlineto
+neg 0 x rlineto
+closepath
+clip
+} bd
+/skeps {
+10 dict begin
+/sk_state save def
+concat
+3 index neg 3 index neg translate
+rclip
+0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
+10 setmiterlimit [ ] 0 setdash
+newpath
+/sk_dict_count countdictstack def
+/sk_count count 1 sub def
+userdict begin
+/showpage { } def
+/languagelevel where
+{
+pop
+languagelevel 1 ne
+{
+false setstrokeadjust
+false setoverprint
+} if
+} if
+} bd
+/skepsend {
+count sk_count sub { pop } repeat
+countdictstack sk_dict_count sub { end } repeat
+sk_state restore
+end
+} bd
+/gradidx 0 def
+/gradient {
+3 mul array
+/gradidx 0 def
+} bd
+/$ {
+3 index gradidx 5 -1 roll put
+2 index gradidx 1 add 4 -1 roll put
+1 index gradidx 2 add 3 -1 roll put
+/gradidx gradidx 3 add def
+} bd
+/! {
+3
+{
+dup dup gradidx dup 3 1 roll 3 sub get put
+/gradidx gradidx 1 add def
+}
+repeat
+} bd
+/gradcolor {
+3 mul dup 2 add 1 exch % idx 1 idx+2
+{
+1 index exch % array array i
+get % array component
+exch % component array
+}
+for
+4 1 roll
+} bd
+/x0 0 def /y0 0 def /x1 0 def /y1 0 def
+/left 0 def /right 0 def /top 0 def /bottom 0 def
+/numcolors 0 def
+/axial {
+/y1 xd /x1 xd /y0 xd /x0 xd
+dup length 3 idiv /numcolors xd
+pusht exch % ctm array
+x0 x1 ne y0 y1 ne or
+{
+x0 y0 translate
+[x1 x0 sub y1 y0 sub dup neg 2 index 0 0] concat
+clippath flattenpath pathbbox
+/top xd /right xd /bottom xd /left xd
+newpath
+0 gradcolor rgb clippath f
+0 1 numcolors 1 sub
+{
+dup numcolors div
+3 1 roll
+gradcolor rgb
+exch
+bottom right top R f
+}
+for
+}
+if
+pop
+popt
+} bd
+/r0 0 def /r1 0 def /dr 0 def
+/radial {
+/r1 xd /r0 xd /y0 xd /x0 xd
+/dr r1 r0 sub def
+dup length 3 idiv /numcolors xd
+pusht exch % ctm array
+r0 r1 ne
+{
+x0 y0 translate
+clippath flattenpath pathbbox
+/top xd /right xd /bottom xd /left xd
+newpath
+dr 0 gt {numcolors 1 sub}{0} ifelse gradcolor rgb
+clippath f
+dr 0 gt {numcolors 1 sub -1 0} { 0 1 numcolors 1 sub} ifelse
+{
+dup numcolors div dr mul r0 add
+3 1 roll
+gradcolor rgb
+exch
+0 0 3 -1 roll C f
+}
+for
+}
+if
+pop
+popt
+} bd
+/max {
+2 copy lt {exch} if pop
+} bd
+/conical {
+pusht 5 1 roll
+3 1 roll /y0 xd /x0 xd
+x0 y0 translate
+radgrad rotate
+dup length 3 idiv /numcolors xd
+clippath flattenpath pathbbox newpath
+4 { abs 4 1 roll} repeat
+3 { max } repeat
+2 mul
+dup scale
+0 gradcolor rgb
+0 0 1 0 360 arc f
+1 1 numcolors 1 sub
+{
+dup numcolors div 180 mul
+3 1 roll
+gradcolor rgb
+exch
+0 0 moveto
+0 0 1 4 -1 roll dup neg arc
+closepath f
+}
+for
+pop
+popt
+} bd
+/XStep 0 def /YStep 0 def /imagedata 0 def /components 0 def
+/tileimage2 {
+exch 4 2 roll
+/height xd
+/width xd
+mark
+/components 2 index
+/PatternType 1
+/PaintType 1
+/TilingType 1
+/BBox [0 0 width height]
+/XStep width
+/YStep height
+/PaintProc {
+begin
+XStep YStep 8
+matrix
+imagedata
+false
+components
+colorimage
+end
+}
+counttomark 2 div cvi dup dict begin
+{ def } repeat
+pop currentdict end
+dup
+/imagedata
+4 -1 roll
+width height mul mul string
+currentfile exch readhexstring pop
+put
+exch
+makepattern
+setpattern
+clippath
+eofill
+} bd
+/tileimage1 {
+concat
+/components xd
+/height xd
+/width xd
+/imagedata
+currentfile
+width height mul components mul string
+readhexstring pop
+def
+clippath flattenpath pathbbox
+/top xd /right xd /bottom xd /left xd
+left width div floor width mul
+bottom height div floor height mul
+translate
+top bottom sub height div ceiling cvi
+{
+gsave
+right left sub width div ceiling cvi
+{
+width height 8 matrix
+components 1 eq
+{
+{ imagedata }
+image
+}
+{
+imagedata
+false components
+colorimage
+}
+ifelse
+width 0 translate
+}
+repeat
+grestore
+0 height translate
+}
+repeat
+} bd
+/makepattern where
+{
+pop
+/tileimage /tileimage2 load def
+}
+{
+/tileimage /tileimage1 load def
+}
+ifelse
+end
+%%EndResource
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+
+10.433 setmiterlimit
+%%EndSetup
+
+%%Page: 1 1
+SketchDict begin
+0 0 600 500 [1 0 0 1 11.0594 95.5815]
+skeps
+%%BeginDocument: /home/rmz/src/t1lib-5.0.0/doc/t1dump/parallelpath.eps
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: (Created manually by RMz, 2003-01-15. Illustration of t1lib parallel path construction)
+%%Title: Parallel Path Construction
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 600 500
+%%EndComments
+%
+% 3.
+
+gsave
+
+/xa 100 def
+/ya 100 def
+/xb 100 def
+/yb 400 def
+/xc 500 def
+/yc 750 def
+/xd 500 def
+/yd 100 def
+
+% 4.
+/xa 100 def
+/ya 300 def
+/xb 100 def
+/y5 400 def
+/xc 500 def
+/yc 300 def
+/xd 300 def
+/yd 300 def
+
+
+% 2.
+/xa 100 def
+/ya 100 def
+/xb 100 def
+/yb 400 def
+/xc 300 def
+/yc 550 def
+/xd 500 def
+/yd 600 def
+
+% 1.
+/xa 55 def
+/ya 40 def
+/xb 120 def
+/yb 200 def
+/xc 300 def
+/yc 400 def
+/xd 550 def
+/yd 445 def
+
+/TimesRoman findfont 25 scalefont setfont
+/line1 20 string def
+
+
+
+
+
+/linewidth 100 def
+
+% compute distance from Bezier_A to Bezier_B
+/dista xb xa sub dup mul yb ya sub dup mul add sqrt def
+
+% compute distance from Bezier_C to Bezier_D
+/distd xd xc sub dup mul yd yc sub dup mul add sqrt def
+
+/diameter linewidth 2 div def
+
+% compute resulting limit values of thick curve at end points
+/dxa yb ya sub diameter mul dista div def
+/dya xb xa sub diameter mul dista div neg def
+/dxd yd yc sub diameter mul distd div def
+/dyd xd xc sub diameter mul distd div neg def
+
+% draw curve as rendered by ghostscript
+0.9 0.9 0.9 setrgbcolor
+xa ya moveto
+xb yb xc yc xd yd curveto
+%linewidth 40 div setlinewidth
+linewidth setlinewidth
+0 setlinecap
+stroke
+
+0.0 0.0 0.0 setrgbcolor
+xa ya moveto
+xb yb xc yc xd yd curveto
+1 setlinewidth
+0 setlinecap
+[4 4] 0 setdash
+stroke
+
+
+% reset dash
+[] 0 setdash
+
+% correct right path end points
+/xar xa dxa add def
+/yar ya dya add def
+/xdr xd dxd add def
+/ydr yd dyd add def
+
+% correct left path end points
+/xal xa dxa sub def
+/yal ya dya sub def
+/xdl xd dxd sub def
+/ydl yd dyd sub def
+
+
+/x1 xa xb add 0.5 mul def
+/y1 ya yb add 0.5 mul def
+/x2 xb xc add 0.5 mul def
+/y2 yb yc add 0.5 mul def
+/x3 xc xd add 0.5 mul def
+/y3 yc yd add 0.5 mul def
+/x4 xa xb 2 mul add xc add 4 div def
+/y4 ya yb 2 mul add yc add 4 div def
+/x5 xd xc 2 mul add xb add 4 div def
+/y5 yd yc 2 mul add yb add 4 div def
+/x6 xa xb 3 mul add xc 3 mul add xd add 8 div def
+/y6 ya yb 3 mul add yc 3 mul add yd add 8 div def
+
+0 0 0 setrgbcolor
+newpath xa ya 4.0 0 360 arc closepath fill
+newpath xb yb 4.0 0 360 arc closepath fill
+newpath xc yc 4.0 0 360 arc closepath fill
+newpath xd yd 4.0 0 360 arc closepath fill
+
+0 0 0 setrgbcolor
+newpath x1 y1 3.0 0 360 arc closepath fill
+newpath x2 y2 3.0 0 360 arc closepath fill
+newpath x3 y3 3.0 0 360 arc closepath fill
+
+0 0 0 setrgbcolor
+newpath x4 y4 2.0 0 360 arc closepath fill
+newpath x5 y5 2.0 0 360 arc closepath fill
+
+0 0 0 setrgbcolor
+newpath x6 y6 4.0 0 360 arc closepath stroke
+
+
+% compute right-side normal vector
+/nabs diameter x5 x4 sub dup mul y5 y4 sub dup mul add sqrt div def
+
+/nxr y5 y4 sub nabs mul def
+/nyr x4 x5 sub nabs mul def
+
+0 0 0 setrgbcolor
+newpath x6 nxr add y6 nyr add 4.0 0 360 arc closepath stroke
+newpath x6 nxr sub y6 nyr sub 4.0 0 360 arc closepath stroke
+
+% calculate location and direction vectors of lines to intersect
+/bloc1x 4 nxr x6 add mul xar 2 mul sub xdr add 3 div def
+/bloc1y 4 nyr y6 add mul yar 2 mul sub ydr add 3 div def
+/bdir1x xc xd add xa sub xb sub def
+/bdir1y yc yd add ya sub yb sub def
+/bloc2x xar def
+/bloc2y yar def
+/bdir2x xb xa sub def
+/bdir2y yb ya sub def
+
+% calculate determinant and inverse
+/bdet bdir2x bdir1y mul bdir2y bdir1x mul sub def
+
+%bdet 0.0 eq
+bdet abs 0.001 le
+{
+ /xbr xb nxr add def
+ /ybr yb nyr add def
+ /bnu 0.0 def
+ /bmu 0.0 def
+}
+{
+ /binvdet 1 bdet div def
+
+ % calculate inverse of dir matrix
+ /binvdir2x bdir1y binvdet mul def
+ /binvdir2y bdir2y binvdet mul neg def
+ /binvdir1x bdir1x binvdet mul neg def
+ /binvdir1y bdir2x binvdet mul def
+
+ % calculate mu and nu value (nu actually is not required)
+ /bmu binvdir2x bloc1x bloc2x sub mul binvdir1x bloc1y bloc2y sub mul add def
+ /bnu binvdir2y bloc1x bloc2x sub mul binvdir1y bloc1y bloc2y sub mul add def
+
+ /xbr bloc2x bmu bdir2x mul add def
+ /ybr bloc2y bmu bdir2y mul add def
+}
+ifelse
+
+
+
+% calculate location and direction vectors of lines to intersect
+/cloc1x 4 nxr x6 add mul xar add xdr 2 mul sub 3 div def
+/cloc1y 4 nyr y6 add mul yar add ydr 2 mul sub 3 div def
+/cdir1x xc xd add xa sub xb sub def
+/cdir1y yc yd add ya sub yb sub def
+/cloc2x xdr def
+/cloc2y ydr def
+/cdir2x xc xd sub def
+/cdir2y yc yd sub def
+
+% calculate determinant and inverse
+/cdet cdir2x cdir1y mul cdir2y cdir1x mul sub def
+
+%cdet 0.0 eq
+cdet abs 0.001 le
+{
+ % curve is just a straight line
+ /xcr xc nxr add def
+ /ycr yc nyr add def
+ /cmu 0.0 def
+}
+{
+ /cinvdet 1 cdet div def
+
+ % calculate inverse of dir matrix
+ /cinvdir2x cdir1y cinvdet mul def
+ /cinvdir2y cdir2y cinvdet mul neg def
+ /cinvdir1x cdir1x cinvdet mul neg def
+ /cinvdir1y cdir2x cinvdet mul def
+
+ % calculate mu and nu value (mu actually is not required)
+ /cmu cinvdir2x cloc1x cloc2x sub mul cinvdir1x cloc1y cloc2y sub mul add def
+ /cnu cinvdir2y cloc1x cloc2x sub mul cinvdir1y cloc1y cloc2y sub mul add def
+
+ /xcr cloc2x cmu cdir2x mul add def
+ /ycr cloc2y cmu cdir2y mul add def
+}
+ifelse
+
+
+% Analyse coefficients and decide how to compute displacements
+bmu 0.1 le
+{
+ /xbr 8 nxr x6 add mul xar sub xdr sub 3 div xcr sub def
+ /ybr 8 nyr y6 add mul yar sub ydr sub 3 div ycr sub def
+}
+if
+
+cmu 0.1 le
+{
+ /xcr 8 nxr x6 add mul xar sub xdr sub 3 div xbr sub def
+ /ycr 8 nyr y6 add mul yar sub ydr sub 3 div ybr sub def
+}
+if
+
+
+% define delta values
+/dxb xbr xb sub def
+/dyb ybr yb sub def
+/dxc xcr xc sub def
+/dyc ycr yc sub def
+
+
+0.5 setlinewidth
+
+% show tangent at t=0.5 and their shifted counterparts
+[32 32] 0 setdash
+x4 y4 moveto
+x5 y5 lineto
+stroke
+x4 nxr add y4 nyr add moveto
+x5 nxr add y5 nyr add lineto
+x4 nxr sub y4 nyr sub moveto
+x5 nxr sub y5 nyr sub lineto
+stroke
+[] 0 setdash
+
+0 0 0 setrgbcolor
+1 setlinewidth
+
+% stroke right curve
+xar yar moveto
+xb dxb add yb dyb add xc dxc add yc dyc add xdr ydr curveto
+stroke
+% stroke left curve
+xal yal moveto
+xb dxb sub yb dyb sub xc dxc sub yc dyc sub xdl ydl curveto
+stroke
+
+%0.2 0.5 0.8 setrgbcolor
+%newpath bloc2x bloc2y 5.0 0 360 arc closepath fill
+%bloc2x 10 bdir2x mul sub bloc2y 10 bdir2y mul sub moveto
+%bloc2x 10 bdir2x mul add bloc2y 10 bdir2y mul add lineto stroke
+
+%0.5 0.5 0.5 setrgbcolor
+%newpath bloc1x bloc1y 5.0 0 360 arc closepath fill
+%bloc1x 10 bdir1x mul sub bloc1y 10 bdir1y mul sub moveto
+%bloc1x 10 bdir1x mul add bloc1y 10 bdir1y mul add lineto stroke
+
+
+% draw tangents
+0 0 0 setrgbcolor
+%1 setlinewidth
+%[5 5] 0 setdash
+0.5 setlinewidth
+[4 4] 0 setdash
+xa ya moveto xb yb lineto stroke
+xd yd moveto xc yc lineto stroke
+[] 0 setdash
+xar yar moveto xb dxb add yb dyb add lineto stroke
+xdr ydr moveto xc dxc add yc dyc add lineto stroke
+xal yal moveto xb dxb sub yb dyb sub lineto stroke
+xdl ydl moveto xc dxc sub yc dyc sub lineto stroke
+
+% draw auxiliary lines
+[8 8] 0 setdash
+xb yb moveto xc yc lineto stroke
+[16 16] 0 setdash
+x1 y1 moveto x2 y2 lineto stroke
+x2 y2 moveto x3 y3 lineto stroke
+
+
+% draw resulting points
+0 0 0 setrgbcolor
+newpath xar yar 4.0 0 360 arc closepath fill
+newpath xb dxb add yb dyb add 4.0 0 360 arc closepath fill
+newpath xc dxc add yc dyc add 4.0 0 360 arc closepath fill
+newpath xdr ydr 4.0 0 360 arc closepath fill
+newpath xal yal 4.0 0 360 arc closepath fill
+newpath xb dxb sub yb dyb sub 4.0 0 360 arc closepath fill
+newpath xc dxc sub yc dyc sub 4.0 0 360 arc closepath fill
+newpath xdl ydl 4.0 0 360 arc closepath fill
+
+
+grestore
+%%EndDocument
+skepsend
+/Helvetica 12 sf
+(A)
+48 127 0 0 0 rgb
+T
+(A')
+108 98 T
+(B)
+117 293 T
+(C)
+306 501 T
+(D)
+572 541 T
+(D')
+582 485 T
+(C')
+348 434 T
+(B')
+177 248 T
+(P1)
+82 211 T
+(P2)
+204 394 T
+(P3)
+432 524 T
+(P4)
+146 308 T
+(P5)
+321 461 T
+(P6)
+256 376 T
+newpath
+130.394 294.803 m
+130.394 136.063 l
+65.1969 136.063 l
+1 w
+0 j
+0 J
+[4 4 ] 0 d
+S
+newpath
+68.0315 136.063 m
+113.386 116.22 l
+113.386 136.063 l
+S
+(w/2)
+74 115 T
+(P6')
+283 331 T
+(A'')
+14 138 T
+(B'')
+79 334 T
+(C'')
+274 549 T
+(D'')
+561 581 T
+(P6'')
+198 428 T
+%%PageTrailer
+showpage
+%%Trailer
+end
+%%DocumentSuppliedResources: procset Linux-Sketch-Procset 1.0 2
+%%EOF
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.pdf
new file mode 100644
index 00000000000..79a12f1a68c
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.sk b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.sk
new file mode 100644
index 00000000000..91e751533a5
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/parallelpath_sk.sk
@@ -0,0 +1,124 @@
+##Sketch 1 2
+document()
+layout('A4',0)
+layer('Ebene 1',1,1,0,0,(0,0,0))
+eps((11.0594,95.5815),'parallelpath.eps')
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('A',(48.6889,127.34))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("A'",(108.399,98.9939))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('B',(117.18,293.277))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('C',(306.795,501.208))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('D',(572.904,541.071))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("D'",(582.6,485.048))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("C'",(348.812,434.412))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("B'",(177.512,248.028))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('P1',(82.704,211.398))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('P2',(204.094,394.016))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('P3',(432.847,524.91))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('P4',(146.899,308.758))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('P5',(321.878,461.346))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('P6',(256.159,376.234))
+lw(1)
+ld((4, 4))
+b()
+bs(130.394,294.803,0)
+bs(130.394,136.063,0)
+bs(65.1969,136.063,0)
+lw(1)
+ld((4, 4))
+b()
+bs(68.0315,136.063,0)
+bs(113.386,116.22,0)
+bs(113.386,136.063,0)
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt('w/2',(74.8713,115.976))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("P6'",(283.465,331.654))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("A''",(14.1732,138.898))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("B''",(79.3701,334.488))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("C''",(274.961,549.921))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("D''",(561.26,581.102))
+fp((0,0,0))
+le()
+lw(1)
+Fn('Helvetica')
+txt("P6''",(198.425,428.031))
+guidelayer('Hilfslinien',1,0,0,1,(0,0,1))
+grid((0,0,2.83465,2.83465),1,(0,0,1),'Gitter')
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.eps
new file mode 100644
index 00000000000..79384002049
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.eps
@@ -0,0 +1,813 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: t1lib (edited manually by RMz, 2003-03-01)
+%%Title: Type1Char Character Dump
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 400 280
+%%DocumentPaperSizes: a4
+%%EndComments
+%!
+/T1LibDict 100 dict def
+T1LibDict begin
+% Setup the size from the type1 module
+/t1SetupSize {
+ /size exch def
+} def
+
+% Prepare the page. Compute scales and fill the charspace unit square
+% background
+/t1PreparePage {
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Start of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % Setup a standard linewidth
+ /t1dumpstdlinewidth 0.6 def
+ % Setup a scale for drawing direction arrows
+ /arrowscale 1.5 def
+
+ % Should we draw the device pixel grid? (1=yes, otherwise no)
+ /t1drawgrid 0 def
+ % Should we draw stems? (1=yes, otherwise no)
+ /t1drawstems 0 def
+ % Should we draw alignment zones? (1=yes, otherwise no)
+ /t1drawzones 0 def
+ % Should we fill the charspace unit square? (1=yes, otherwise no)
+ /t1fillunitsquare 0 def
+ % Should we fill the device page? (1=yes, otherwise no)
+ /t1fillpage 0 def
+ % Should we show path segment On-Curve points? (1=yes, otherwise no)
+ /t1showoncurvepoints 0 def
+ % Should we show path segment Off Curve points? (1=yes, otherwise no)
+ /t1showoffcurvepoints 0 def
+ % Should we show Bezier tangets and their defining points? (1=yes, otherwise no)
+ /t1showbeziertangents 0 def
+
+ % Define a few colors
+ /t1linecolor { 0.0 0.0 0.0 } def
+ /t1hlinecolor { 1.0 0.0 0.0 } def
+ /t1slinecolor { 0.0 0.0 0.0 } def
+ /t1movecolor { 1.0 1.0 1.0 } def
+ /t1hmovecolor { 1.0 0.0 0.0 } def
+ /t1smovecolor { 1.0 1.0 1.0 } def
+ /t1curvecolor { 0.0 0.0 0.0 } def
+ /t1hcurvecolor { 1.0 0.0 0.0 } def
+ /t1scurvecolor { 0.0 0.0 0.0 } def
+ /t1sprolongatecolor { 0.0 0.0 0.0 } def
+ /t1stemcolor { 0.0 0.0 1.0 } def
+ /t1alignedstemcolor { 1.0 0.0 1.0 } def
+ /t1bottomzonecolor { 1.0 1.0 0.0 } def
+ /t1topzonecolor { 1.0 1.0 0.0 } def
+ /t1arrowcolor { 0.0 0.0 0.0 } def
+ /t1harrowcolor { 1.0 0.0 0.0 } def
+ /t1sarrowcolor { 0.0 0.0 0.0 } def
+ /t1sbwcolor { 0.0 0.0 0.0 } def
+ /t1closepathcolor { 0.0 0.0 0.0 } def
+ /t1hclosepathcolor { 1.0 0.0 0.0 } def
+ /t1sclosepathcolor { 0.0 0.0 0.0 } def
+ /t1pagecolor { 0.7 0.7 0.7 } def
+ /t1unitsquarecolor { 0.4 0.4 0.4 } def
+ /t1gridcolor { 0.0 0.0 0.0 } def
+
+ % Line scale relative to the standard linewidth
+ /t1linescale 2.5 def
+ /t1hlinescale 0.4 def
+ /t1slinescale 1.0 def
+ /t1movescale 0.0 def
+ /t1hmovescale 0.0 def
+ /t1smovescale 0.0 def
+ /t1curvescale 2.5 def
+ /t1hcurvescale 0.4 def
+ /t1scurvescale 1.0 def
+ /t1curvetangentscale 0.5 def
+ /t1sprolongatescale 1.0 def
+ /t1stemscale 0.5 def
+ /t1alignedstemscale 0.5 def
+ /t1bottomzonescale 0.5 def
+ /t1topzonescale 0.5 def
+ /t1closepathscale 0.4 def
+ /t1hclosepathscale 0.4 def
+ /t1sclosepathscale 0.4 def
+ /t1gridscale 0.5 def
+
+ % Line dash specifications (stems and zones are not configurable!)
+ /t1linedash { [2 2] 0 } def
+ /t1hlinedash { [] 0 } def
+ /t1slinedash { [] 0 } def
+ /t1movedash { [2 2] 0 } def
+ /t1hmovedash { [2 2] 0 } def
+ /t1smovedash { [2 2] 0 } def
+ /t1curvedash { [2 2] 0 } def
+ /t1hcurvedash { [] 0 } def
+ /t1scurvedash { [] 0 } def
+ /t1sprolongatedash { [3 3] 0 }def
+ /t1closepathdash { [] 0 } def
+ /t1hclosepathdash { [] 0 } def
+ /t1sclosepathdash { [] 0 } def
+ /t1griddash { [3 3] 0 } def
+
+ % Define a clipping rectangle ROI (in charspace coordinates)
+ /t1ROIxmin 405 def
+ /t1ROIxmax 505 def
+ /t1ROIymin 320 def
+ /t1ROIymax 340 def
+% /t1ROIxmin 0 def
+% /t1ROIxmax 600 def
+% /t1ROIymin -100 def
+% /t1ROIymax 800 def
+
+ % Device values (in bp). These must match the Bounding Box Statement!
+ /xmindev 0 neg def
+ /xmaxdev 400 def
+ /ymindev 0 neg def
+ /ymaxdev 280 def
+ /dxdev 1 def
+ /dydev 1 def
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % End of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % logical pixel values
+ /xminpixel t1ROIxmin 1000.0 div size mul def
+ /xmaxpixel t1ROIxmax 1000.0 div size mul def
+ /yminpixel t1ROIymin 1000.0 div size mul def
+ /ymaxpixel t1ROIymax 1000.0 div size mul def
+ /dxpixel 1 def
+ /dypixel 1 def
+
+ % compute scales and set minimum scale
+ /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def
+ /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def
+ scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse
+
+ % Fill device page
+ xmindev ymindev moveto
+ xmaxdev 0 rlineto
+ 0 ymaxdev rlineto
+ xmaxdev neg 0 rlineto
+ 0 ymaxdev neg rlineto
+ closepath
+ clip
+ t1fillpage 1 eq
+ {
+ t1pagecolor setrgbcolor
+ fill
+ } if
+
+ % reassign device values
+ /xmindev xminpixel scale mul def
+ /xmaxdev xmaxpixel scale mul def
+ /ymindev yminpixel scale mul def
+ /ymaxdev ymaxpixel scale mul def
+ /dxdev dxpixel scale mul def
+ /dydev dypixel scale mul def
+
+ % translate coordinate system
+ xminpixel scale mul neg yminpixel scale mul neg translate
+
+ % Fill unit square of charspace coordinate system
+ t1fillunitsquare 1 eq
+ {
+ t1unitsquarecolor setrgbcolor
+ 0 0 moveto
+ size scale mul 0 rlineto
+ 0 size scale mul rlineto
+ size scale mul neg 0 rlineto
+ 0 size scale mul neg rlineto
+ closepath fill
+ } if
+} def
+
+/t1FinishPage {
+ t1drawgrid 1 eq
+ {
+ t1gridcolor setrgbcolor
+ t1gridscale setlinewidth
+ t1griddash setdash
+ % draw grid and align to the point (0,0)
+ 0 dxdev xmaxdev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dxdev neg xmindev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dydev ymaxdev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ 0 dydev neg ymindev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ } if
+} def
+
+% Define three arrow routines available for later providing the output with directions
+/t1arrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1arrowcolor setrgbcolor
+ currx curry translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1harrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1harrowcolor setrgbcolor
+ currhx currhy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1sarrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1sarrowcolor setrgbcolor
+ currsx currsy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale t1dumpstdlinewidth neg mul mul rlineto
+ 6 arrowscale t1dumpstdlinewidth mul mul 2 arrowscale t1dumpstdlinewidth mul mul rlineto
+ 6 arrowscale t1dumpstdlinewidth mul mul neg 2 arrowscale t1dumpstdlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+
+/t1rlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1linecolor setrgbcolor
+ t1linedash setdash
+ t1linescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+} def
+
+/t1srlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1slinecolor setrgbcolor
+ t1slinedash setdash
+ t1slinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1sprolongate {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1sprolongatecolor setrgbcolor
+ t1sprolongatedash setdash
+ t1sprolongatescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1hintedrlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hlinecolor setrgbcolor
+ t1hlinedash setdash
+ t1hlinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+} def
+
+/t1rmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1movecolor setrgbcolor
+ t1movedash setdash
+ t1movescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+ /startx currx def
+ /starty curry def
+} def
+
+/t1srmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1smovecolor setrgbcolor
+ t1smovedash setdash
+ t1smovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+ /startsx currsx def
+ /startsy currsy def
+} def
+
+/t1hintedrmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hmovecolor setrgbcolor
+ t1hmovedash setdash
+ t1hmovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+ /starthx currhx def
+ /starthy currhy def
+} def
+
+/t1rrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1curvecolor setrgbcolor
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+
+ newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currx curry moveto
+ currx x2 add curry y2 add lineto
+ stroke
+ currx x2 x3 add add curry y2 y3 add add moveto
+ currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ currx curry moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currx currx x2 x3 x4 add add add def
+ /curry curry y2 y3 y4 add add add def
+} def
+
+/t1srrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1scurvecolor setrgbcolor
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currsx currsy moveto
+ currsx x2 add currsy y2 add lineto
+ stroke
+ currsx x2 x3 add add currsy y2 y3 add add moveto
+ currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ currsx currsy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currsx currsx x2 x3 x4 add add add def
+ /currsy currsy y2 y3 y4 add add add def
+} def
+
+/t1hintedrrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hcurvecolor setrgbcolor
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currhx currhy moveto
+ currhx x2 add currhy y2 add lineto
+ stroke
+ currhx x2 x3 add add currhy y2 y3 add add moveto
+ currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ currhx currhy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currhx currhx x2 x3 x4 add add add def
+ /currhy currhy y2 y3 y4 add add add def
+} def
+
+/t1sbw {
+ /wy exch scale mul def
+ /wx exch scale mul def
+ /sby exch scale mul def
+ /sbx exch scale mul def
+ t1sbwcolor setrgbcolor
+ newpath sbx sby 3 0 360 arc closepath fill
+ newpath wx wy 3 0 360 arc closepath fill
+ /currx sbx def
+ /curry sby def
+ /currhx sbx def
+ /currhy sby def
+ /currsx sbx def
+ /currsy sby def
+} def
+
+/t1closepath {
+ t1closepathdash setdash
+ t1closepathscale t1dumpstdlinewidth mul setlinewidth
+ t1closepathcolor setrgbcolor
+ currx curry moveto
+ startx starty lineto
+ stroke
+} def
+
+/t1sclosepath {
+ t1sclosepathdash setdash
+ t1sclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1sclosepathcolor setrgbcolor
+ currsx currsy moveto
+ startsx startsy lineto
+ stroke
+} def
+
+/t1hintedclosepath {
+ t1hclosepathdash setdash
+ t1hclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1hclosepathcolor setrgbcolor
+ currhx currhy moveto
+ starthx starthy lineto
+ stroke
+} def
+
+/t1vstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1alignedvstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1hstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1alignedhstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1bottomzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1bottomzonescale t1dumpstdlinewidth mul setlinewidth
+ t1bottomzonecolor setrgbcolor
+ [] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+/t1topzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1topzonescale t1dumpstdlinewidth mul setlinewidth
+ t1topzonecolor setrgbcolor
+ [2 2] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+end
+
+% Next follows drawing code from charstring commands:
+T1LibDict begin
+
+gsave
+15.000001 t1SetupSize
+t1PreparePage
+-0.329987 0.000000 t1bottomzone
+10.244583 10.574570 t1topzone
+6.464737 6.719727 t1topzone
+9.989594 10.154587 t1topzone
+-3.089874 -2.909882 t1bottomzone
+0.539978 0.000000 0.539978 0.000000 t1sbw
+2.789886 5.489777 t1srmoveto
+0.112495 -0.000000 t1sprolongate
+0.000000 3.689850 t1srlineto
+0.000000 0.426294 -0.027113 0.061186 0.649588 0.000000 t1srrcurveto
+1.859924 0.000000 t1srlineto
+1.370460 0.000000 0.496964 -1.199817 0.000000 -0.757604 t1srrcurveto
+0.000000 -0.906489 -0.692951 -1.200926 -1.594456 0.000000 t1srrcurveto
+-2.174911 0.000000 t1srlineto
+-0.000000 -0.112495 t1sprolongate
+t1sclosepath
+-0.112495 -0.112495 t1srmoveto
+0.112495 -0.000000 t1sprolongate
+2.174911 0.000000 t1srlineto
+1.735409 0.000000 0.776989 1.318972 0.000000 1.013433 t1srrcurveto
+0.000000 0.832331 -0.552993 1.350080 -1.539422 0.000000 t1srrcurveto
+-1.859924 0.000000 t1srlineto
+-0.760355 0.000000 -0.087111 -0.148805 0.000000 -0.563666 t1srrcurveto
+0.000000 -3.689850 t1srlineto
+-0.000000 -0.112495 t1sprolongate
+t1sclosepath
+2.287407 0.112495 t1srmoveto
+1.364944 -0.134995 t1srmoveto
+0.021624 -0.110398 t1sarrowhead t1sprolongate
+1.486204 0.291112 t1sarrowhead 1.094566 0.991078 0.000000 1.183112 t1srrcurveto
+0.000000 1.384597 -1.449269 1.262795 -1.993091 0.000000 t1srrcurveto
+-5.489777 0.000000 t1srlineto
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.112495 t1sprolongate
+0.000000 -0.464981 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+0.359985 0.000000 t1srlineto
+1.121659 0.000000 -0.049202 -0.140224 0.000000 -0.452251 t1srrcurveto
+0.000000 -7.904678 t1srlineto
+0.000000 -0.452251 0.049202 -0.140224 -1.121659 0.000000 t1srrcurveto
+-0.359985 0.000000 t1srlineto
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.112495 t1sprolongate
+0.000000 -0.464981 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+5.879761 0.000000 t1srlineto
+2.045333 0.000000 1.412026 1.374159 0.000000 1.483225 t1srrcurveto
+0.000000 1.378456 -1.290667 1.158998 -1.704620 0.184283 t1srrcurveto
+-0.012091 -0.111844 t1sarrowhead t1sprolongate
+t1sclosepath
+-0.749328 -0.032142 t1srmoveto
+0.737237 -0.079701 t1sprolongate
+1.625245 -0.175702 t1sarrowhead 1.169233 -1.090910 0.000000 -1.231438 t1srrcurveto
+0.000000 -1.336660 -1.287864 -1.295733 -1.944504 0.000000 t1srrcurveto
+-5.879761 0.000000 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+0.000000 0.464981 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+-0.000000 -0.112495 t1sprolongate
+0.359985 0.000000 t1srlineto
+1.188247 0.000000 0.109200 0.189762 0.000000 0.627705 t1srrcurveto
+0.000000 7.904678 t1srlineto
+0.000000 0.627705 -0.109200 0.189762 -1.188247 0.000000 t1srrcurveto
+-0.359985 0.000000 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+0.000000 0.464981 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+-0.000000 -0.112495 t1sprolongate
+5.489777 0.000000 t1srlineto
+1.906750 0.000000 1.310619 -1.197105 0.000000 -1.225297 t1srrcurveto
+0.000000 -1.036798 -0.975350 -0.928844 -1.423677 -0.278865 t1srrcurveto
+-0.727704 -0.142540 t1sarrowhead t1sprolongate
+t1sclosepath
+0.749328 0.032142 t1srmoveto
+-0.929962 -4.777306 t1srmoveto
+-1.874924 0.000000 t1srlineto
+-0.649588 0.000000 0.027113 0.061186 0.000000 0.426294 t1srrcurveto
+0.000000 4.094833 t1srlineto
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.112495 t1sprolongate
+2.819885 0.000000 t1srlineto
+1.397939 0.000000 0.604479 -1.316665 0.000000 -0.970742 t1srrcurveto
+0.000000 -1.013388 -0.739705 -1.169023 -1.472705 0.000000 t1srrcurveto
+t1sclosepath
+-0.000000 -0.224991 t1srmoveto
+1.617169 0.000000 0.820232 1.290877 0.000000 1.116525 t1srrcurveto
+0.000000 1.039176 -0.655469 1.473221 -1.571940 0.000000 t1srrcurveto
+-2.819885 0.000000 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+-0.000000 -0.112495 t1sprolongate
+0.000000 -4.094833 t1srlineto
+0.000000 -0.563666 0.087111 -0.148805 0.760355 0.000000 t1srrcurveto
+1.874924 0.000000 t1srlineto
+t1sclosepath
+0.000000 0.112495 t1srmoveto
+t1FinishPage
+0.539978 0.000000 0.539978 0.000000 t1sbw
+2.789886 5.489777 t1rmoveto
+0.000000 3.689850 t1rlineto
+0.000000 0.494980 0.029999 0.104996 0.704971 0.000000 t1rrcurveto
+1.859924 0.000000 t1rlineto
+1.454941 0.000000 0.524979 -1.274948 0.000000 -0.794968 t1rrcurveto
+0.000000 -0.959961 -0.734970 -1.259949 -1.664932 0.000000 t1rrcurveto
+t1closepath
+1.364944 -0.134995 t1rmoveto
+1.454941 0.284988 1.034958 0.959961 0.000000 1.109955 t1rrcurveto
+0.000000 1.304947 -1.379944 1.229950 -1.949921 0.000000 t1rrcurveto
+-5.489777 0.000000 t1rlineto
+0.000000 -0.464981 t1rlineto
+0.359985 0.000000 t1rlineto
+1.154953 0.000000 0.029999 -0.164993 0.000000 -0.539978 t1rrcurveto
+0.000000 -7.904678 t1rlineto
+0.000000 -0.539978 -0.029999 -0.164993 -1.154953 0.000000 t1rrcurveto
+-0.359985 0.000000 t1rlineto
+0.000000 -0.464981 t1rlineto
+5.879761 0.000000 t1rlineto
+1.994919 0.000000 1.349945 1.334946 0.000000 1.409943 t1rrcurveto
+0.000000 1.304947 -1.229950 1.124954 -1.664932 0.179993 t1rrcurveto
+t1closepath
+-0.929962 -4.889801 t1rmoveto
+-1.874924 0.000000 t1rlineto
+-0.704971 0.000000 -0.029999 0.104996 0.000000 0.494980 t1rrcurveto
+0.000000 4.094833 t1rlineto
+2.819885 0.000000 t1rlineto
+1.484940 0.000000 0.629974 -1.394943 0.000000 -1.004959 t1rrcurveto
+0.000000 -1.064957 -0.779968 -1.229950 -1.544937 0.000000 t1rrcurveto
+t1closepath
+t1FinishPage
+grestore
+
+end
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.pdf
new file mode 100644
index 00000000000..46c9267a59e
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_B.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.eps
new file mode 100644
index 00000000000..115c41696bc
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.eps
@@ -0,0 +1,708 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: t1lib (edited manually by RMz, 2003-01-15)
+%%Title: Type1Char Character Dump
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 280 400
+%%EndComments
+%!
+/T1LibDict 100 dict def
+T1LibDict begin
+% Setup the size from the type1 module
+/t1SetupSize {
+ /size exch def
+} def
+
+% Prepare the page. Compute scales and fill the charspace unit square
+% background
+/t1PreparePage {
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Start of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % Setup a standard linewidth
+ /t1dumpstdlinewidth 1.0 def
+ % Setup a scale for drawing direction arrows
+ /arrowscale 1.5 def
+
+ % Should we draw the device pixel grid? (1=yes, otherwise no)
+ /t1drawgrid 0 def
+ % Should we draw stems? (1=yes, otherwise no)
+ /t1drawstems 0 def
+ % Should we draw alignment zones? (1=yes, otherwise no)
+ /t1drawzones 0 def
+ % Should we fill the charspace unit square? (1=yes, otherwise no)
+ /t1fillunitsquare 0 def
+ % Should we fill the device page? (1=yes, otherwise no)
+ /t1fillpage 0 def
+ % Should we show path segment On-Curve points? (1=yes, otherwise no)
+ /t1showoncurvepoints 0 def
+ % Should we show path segment Off Curve points? (1=yes, otherwise no)
+ /t1showoffcurvepoints 0 def
+ % Should we show Bezier tangets and their defining points? (1=yes, otherwise no)
+ /t1showbeziertangents 0 def
+
+ % Define a few colors
+ /t1linecolor { 0.0 0.0 0.0 } def
+ /t1hlinecolor { 1.0 0.0 0.0 } def
+ /t1slinecolor { 1.0 1.0 1.0 } def
+ /t1movecolor { 0.0 0.0 0.0 } def
+ /t1hmovecolor { 1.0 0.0 0.0 } def
+ /t1smovecolor { 1.0 1.0 1.0 } def
+ /t1curvecolor { 0.0 0.0 0.0 } def
+ /t1hcurvecolor { 1.0 0.0 0.0 } def
+ /t1scurvecolor { 0.0 0.0 1.0 } def
+ /t1sprolongatecolor { 1.0 0.0 1.0 } def
+ /t1stemcolor { 0.0 0.0 1.0 } def
+ /t1alignedstemcolor { 1.0 0.0 1.0 } def
+ /t1bottomzonecolor { 1.0 1.0 0.0 } def
+ /t1topzonecolor { 1.0 1.0 0.0 } def
+ /t1arrowcolor { 0.0 0.0 0.0 } def
+ /t1harrowcolor { 1.0 0.0 0.0 } def
+ /t1sarrowcolor { 0.0 0.0 1.0 } def
+ /t1sbwcolor { 0.0 0.0 0.0 } def
+ /t1closepathcolor { 0.0 0.0 0.0 } def
+ /t1hclosepathcolor { 1.0 0.0 0.0 } def
+ /t1sclosepathcolor { 0.0 0.0 1.0 } def
+ /t1pagecolor { 0.7 0.7 0.7 } def
+ /t1unitsquarecolor { 0.4 0.4 0.4 } def
+ /t1gridcolor { 0.0 0.0 0.0 } def
+
+ % Line scale relative to the standard linewidth
+ /t1linescale 0.8 def
+ /t1hlinescale 0.4 def
+ /t1slinescale 0.4 def
+ /t1movescale 0.4 def
+ /t1hmovescale 0.4 def
+ /t1smovescale 0.4 def
+ /t1curvescale 0.8 def
+ /t1hcurvescale 0.4 def
+ /t1scurvescale 0.4 def
+ /t1curvetangentscale 0.5 def
+ /t1sprolongatescale 0.4 def
+ /t1stemscale 0.5 def
+ /t1alignedstemscale 0.5 def
+ /t1bottomzonescale 0.5 def
+ /t1topzonescale 0.5 def
+ /t1closepathscale 0.8 def
+ /t1hclosepathscale 0.4 def
+ /t1sclosepathscale 0.4 def
+ /t1gridscale 0.5 def
+
+ % Line dash specifications (stems and zones are not configurable!)
+ /t1linedash { [] 0 } def
+ /t1hlinedash { [] 0 } def
+ /t1slinedash { [] 0 } def
+ /t1movedash { [2 2] 0 } def
+ /t1hmovedash { [2 2] 0 } def
+ /t1smovedash { [2 2] 0 } def
+ /t1curvedash { [] 0 } def
+ /t1hcurvedash { [] 0 } def
+ /t1scurvedash { [] 0 } def
+ /t1sprolongatedash { [1 1] 0 }def
+ /t1closepathdash { [] 0 } def
+ /t1hclosepathdash { [] 0 } def
+ /t1sclosepathdash { [] 0 } def
+ /t1griddash { [3 3] 0 } def
+
+ % Define a clipping rectangle ROI (in charspace coordinates)
+ /t1ROIxmin 0 def
+ /t1ROIxmax 500 def
+ /t1ROIymin -50 def
+ /t1ROIymax 700 def
+
+ % Device values (in bp). These must match the Bounding Box Statement!
+ /xmindev 0 neg def
+ /xmaxdev 280 def
+ /ymindev 0 neg def
+ /ymaxdev 400 def
+ /dxdev 1 def
+ /dydev 1 def
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % End of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % logical pixel values
+ /xminpixel t1ROIxmin 1000.0 div size mul def
+ /xmaxpixel t1ROIxmax 1000.0 div size mul def
+ /yminpixel t1ROIymin 1000.0 div size mul def
+ /ymaxpixel t1ROIymax 1000.0 div size mul def
+ /dxpixel 1 def
+ /dypixel 1 def
+
+ % compute scales and set minimum scale
+ /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def
+ /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def
+ scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse
+
+ % Fill device page
+ xmindev ymindev moveto
+ xmaxdev 0 rlineto
+ 0 ymaxdev rlineto
+ xmaxdev neg 0 rlineto
+ 0 ymaxdev neg rlineto
+ closepath
+ clip
+ t1fillpage 1 eq
+ {
+ t1pagecolor setrgbcolor
+ fill
+ } if
+
+ % reassign device values
+ /xmindev xminpixel scale mul def
+ /xmaxdev xmaxpixel scale mul def
+ /ymindev yminpixel scale mul def
+ /ymaxdev ymaxpixel scale mul def
+ /dxdev dxpixel scale mul def
+ /dydev dypixel scale mul def
+
+ % translate coordinate system
+ xminpixel scale mul neg yminpixel scale mul neg translate
+
+ % Fill unit square of charspace coordinate system
+ t1fillunitsquare 1 eq
+ {
+ t1unitsquarecolor setrgbcolor
+ 0 0 moveto
+ size scale mul 0 rlineto
+ 0 size scale mul rlineto
+ size scale mul neg 0 rlineto
+ 0 size scale mul neg rlineto
+ closepath fill
+ } if
+} def
+
+/t1FinishPage {
+ t1drawgrid 1 eq
+ {
+ t1gridcolor setrgbcolor
+ t1gridscale setlinewidth
+ t1griddash setdash
+ % draw grid and align to the point (0,0)
+ 0 dxdev xmaxdev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dxdev neg xmindev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dydev ymaxdev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ 0 dydev neg ymindev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ } if
+} def
+
+% Define three arrow routines available for later providing the output with directions
+/t1arrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1arrowcolor setrgbcolor
+ currx curry translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1harrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1harrowcolor setrgbcolor
+ currhx currhy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1sarrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1sarrowcolor setrgbcolor
+ currsx currsy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+
+/t1rlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1linecolor setrgbcolor
+ t1linedash setdash
+ t1linescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+} def
+
+/t1srlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1slinecolor setrgbcolor
+ t1slinedash setdash
+ t1slinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1sprolongate {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1sprolongatecolor setrgbcolor
+ t1sprolongatedash setdash
+ t1sprolongatescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1hintedrlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hlinecolor setrgbcolor
+ t1hlinedash setdash
+ t1hlinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+} def
+
+/t1rmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1movecolor setrgbcolor
+ t1movedash setdash
+ t1movescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+ /startx currx def
+ /starty curry def
+} def
+
+/t1srmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1smovecolor setrgbcolor
+ t1smovedash setdash
+ t1smovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+ /startsx currsx def
+ /startsy currsy def
+} def
+
+/t1hintedrmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hmovecolor setrgbcolor
+ t1hmovedash setdash
+ t1hmovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+ /starthx currhx def
+ /starthy currhy def
+} def
+
+/t1rrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1curvecolor setrgbcolor
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+
+ newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currx curry moveto
+ currx x2 add curry y2 add lineto
+ stroke
+ currx x2 x3 add add curry y2 y3 add add moveto
+ currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ currx curry moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currx currx x2 x3 x4 add add add def
+ /curry curry y2 y3 y4 add add add def
+} def
+
+/t1srrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1scurvecolor setrgbcolor
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currsx currsy moveto
+ currsx x2 add currsy y2 add lineto
+ stroke
+ currsx x2 x3 add add currsy y2 y3 add add moveto
+ currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ currsx currsy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currsx currsx x2 x3 x4 add add add def
+ /currsy currsy y2 y3 y4 add add add def
+} def
+
+/t1hintedrrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hcurvecolor setrgbcolor
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currhx currhy moveto
+ currhx x2 add currhy y2 add lineto
+ stroke
+ currhx x2 x3 add add currhy y2 y3 add add moveto
+ currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ currhx currhy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currhx currhx x2 x3 x4 add add add def
+ /currhy currhy y2 y3 y4 add add add def
+} def
+
+/t1sbw {
+ /wy exch scale mul def
+ /wx exch scale mul def
+ /sby exch scale mul def
+ /sbx exch scale mul def
+ t1sbwcolor setrgbcolor
+ newpath sbx sby 3 0 360 arc closepath fill
+ newpath wx wy 3 0 360 arc closepath fill
+ /currx sbx def
+ /curry sby def
+ /currhx sbx def
+ /currhy sby def
+ /currsx sbx def
+ /currsy sby def
+} def
+
+/t1closepath {
+ t1closepathdash setdash
+ t1closepathscale t1dumpstdlinewidth mul setlinewidth
+ t1closepathcolor setrgbcolor
+ currx curry moveto
+ startx starty lineto
+ stroke
+} def
+
+/t1sclosepath {
+ t1sclosepathdash setdash
+ t1sclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1sclosepathcolor setrgbcolor
+ currsx currsy moveto
+ startsx startsy lineto
+ stroke
+} def
+
+/t1hintedclosepath {
+ t1hclosepathdash setdash
+ t1hclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1hclosepathcolor setrgbcolor
+ currhx currhy moveto
+ starthx starthy lineto
+ stroke
+} def
+
+/t1vstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1alignedvstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1hstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1alignedhstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1bottomzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1bottomzonescale t1dumpstdlinewidth mul setlinewidth
+ t1bottomzonecolor setrgbcolor
+ [] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+/t1topzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1topzonescale t1dumpstdlinewidth mul setlinewidth
+ t1topzonecolor setrgbcolor
+ [2 2] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+end
+
+% Next follows drawing code from charstring commands:
+T1LibDict begin
+
+gsave
+20.000001 t1SetupSize
+t1PreparePage
+-0.439758 0.000000 t1bottomzone
+13.652496 14.092255 t1topzone
+8.615265 8.955078 t1topzone
+13.312683 13.532562 t1topzone
+-4.117737 -3.877869 t1bottomzone
+0.839539 0.000000 0.839539 0.000000 t1sbw
+2.418671 9.134979 t1arrowhead t1rmoveto
+-0.919495 0.599670 t1arrowhead -0.079956 0.679626 0.000000 0.339813 t1rrcurveto
+0.000000 1.219330 t1arrowhead 1.299286 0.839539 1.419220 0.000000 t1rrcurveto
+1.459198 0.000000 t1arrowhead 1.279297 -1.039429 0.000000 -1.439209 t1rrcurveto
+0.000000 -1.139374 t1arrowhead -0.779572 -0.959473 -1.199341 -0.699615 t1rrcurveto
+t1closepath
+0.439758 -0.299835 t1arrowhead t1rmoveto
+1.439209 0.739594 t1arrowhead 0.979462 1.039429 0.000000 1.319275 t1rrcurveto
+0.000000 1.838989 t1arrowhead -1.779022 1.139374 -1.819000 0.000000 t1rrcurveto
+-1.998901 0.000000 t1arrowhead -1.619110 -1.479187 0.000000 -1.858978 t1rrcurveto
+0.000000 -0.359802 t1arrowhead 0.039978 -0.899506 0.839539 -0.939484 t1rrcurveto
+0.219879 -0.239868 t1arrowhead 0.739594 -0.499725 0.499725 -0.339813 t1rrcurveto
+-1.159363 -0.579681 t1arrowhead -1.719055 -1.119385 0.000000 -1.978912 t1rrcurveto
+0.000000 -2.118835 t1arrowhead 2.038879 -1.339264 2.098846 0.000000 t1rrcurveto
+2.258759 0.000000 t1arrowhead 1.898956 1.659088 0.000000 2.138824 t1rrcurveto
+0.000000 0.719604 t1arrowhead -0.219879 0.899506 -0.759583 0.839539 t1rrcurveto
+-0.379791 0.419769 t1arrowhead -0.319824 0.199890 -1.279297 0.799561 t1rrcurveto
+t1closepath
+-1.998901 -0.839539 t1arrowhead t1rmoveto
+0.559692 -0.339813 t1arrowhead 0.939484 -0.599670 0.959473 -0.619659 t1rrcurveto
+0.559692 -0.379791 t1arrowhead 0.939484 -0.599670 0.000000 -1.219330 t1rrcurveto
+0.000000 -1.479187 t1arrowhead -1.499176 -1.039429 -1.639099 0.000000 t1rrcurveto
+-1.719055 0.000000 t1arrowhead -1.439209 1.239319 0.000000 1.659088 t1rrcurveto
+0.000000 1.159363 t1arrowhead 0.639648 1.279297 1.699066 0.939484 t1rrcurveto
+t1closepath
+t1FinishPage
+grestore
+
+end
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.pdf
new file mode 100644
index 00000000000..a8d982eff02
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_eight.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.eps
new file mode 100644
index 00000000000..8c6509e5524
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.eps
@@ -0,0 +1,747 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: t1lib (edited manually by RMz, 2003-03-01)
+%%Title: Type1Char Character Dump
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 280 400
+%%EndComments
+%!
+/T1LibDict 100 dict def
+T1LibDict begin
+% Setup the size from the type1 module
+/t1SetupSize {
+ /size exch def
+} def
+
+% Prepare the page. Compute scales and fill the charspace unit square
+% background
+/t1PreparePage {
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Start of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % Setup a standard linewidth
+ /t1dumpstdlinewidth 1.0 def
+ % Setup a scale for drawing direction arrows
+ /arrowscale 1.2 def
+
+ % Should we draw the device pixel grid? (1=yes, otherwise no)
+ /t1drawgrid 0 def
+ % Should we draw stems? (1=yes, otherwise no)
+ /t1drawstems 0 def
+ % Should we draw alignment zones? (1=yes, otherwise no)
+ /t1drawzones 0 def
+ % Should we fill the charspace unit square? (1=yes, otherwise no)
+ /t1fillunitsquare 0 def
+ % Should we fill the device page? (1=yes, otherwise no)
+ /t1fillpage 0 def
+ % Should we show path segment On-Curve points? (1=yes, otherwise no)
+ /t1showoncurvepoints 0 def
+ % Should we show path segment Off Curve points? (1=yes, otherwise no)
+ /t1showoffcurvepoints 0 def
+ % Should we show Bezier tangets and their defining points? (1=yes, otherwise no)
+ /t1showbeziertangents 0 def
+
+ % Define a few colors
+ /t1linecolor { 0.0 0.0 0.0 } def
+ /t1hlinecolor { 1.0 0.0 0.0 } def
+ /t1slinecolor { 1.0 1.0 1.0 } def
+ /t1movecolor { 0.0 0.0 0.0 } def
+ /t1hmovecolor { 1.0 0.0 0.0 } def
+ /t1smovecolor { 0.0 0.0 0.0 } def
+ /t1curvecolor { 0.0 0.0 0.0 } def
+ /t1hcurvecolor { 1.0 0.0 0.0 } def
+ /t1scurvecolor { 0.0 0.0 0.0 } def
+ /t1sprolongatecolor { 1.0 0.0 1.0 } def
+ /t1stemcolor { 0.0 0.0 1.0 } def
+ /t1alignedstemcolor { 1.0 0.0 1.0 } def
+ /t1bottomzonecolor { 1.0 1.0 0.0 } def
+ /t1topzonecolor { 1.0 1.0 0.0 } def
+ /t1arrowcolor { 0.0 0.0 0.0 } def
+ /t1harrowcolor { 1.0 0.0 0.0 } def
+ /t1sarrowcolor { 0.0 0.0 0.0 } def
+ /t1sbwcolor { 0.0 0.0 0.0 } def
+ /t1closepathcolor { 0.0 0.0 0.0 } def
+ /t1hclosepathcolor { 1.0 0.0 0.0 } def
+ /t1sclosepathcolor { 0.0 0.0 1.0 } def
+ /t1pagecolor { 0.7 0.7 0.7 } def
+ /t1unitsquarecolor { 0.4 0.4 0.4 } def
+ /t1gridcolor { 0.0 0.0 0.0 } def
+
+ % Line scale relative to the standard linewidth
+ /t1linescale 0.4 def
+ /t1hlinescale 0.4 def
+ /t1slinescale 0.4 def
+ /t1movescale 0.1 def
+ /t1hmovescale 0.4 def
+ /t1smovescale 0.1 def
+ /t1curvescale 0.4 def
+ /t1hcurvescale 0.4 def
+ /t1scurvescale 0.4 def
+ /t1curvetangentscale 0.5 def
+ /t1sprolongatescale 0.4 def
+ /t1stemscale 0.5 def
+ /t1alignedstemscale 0.5 def
+ /t1bottomzonescale 0.5 def
+ /t1topzonescale 0.5 def
+ /t1closepathscale 0.4 def
+ /t1hclosepathscale 0.4 def
+ /t1sclosepathscale 0.4 def
+ /t1gridscale 0.5 def
+
+ % Line dash specifications (stems and zones are not configurable!)
+ /t1linedash { [4 4] 0 } def
+ /t1hlinedash { [] 0 } def
+ /t1slinedash { [] 0 } def
+ /t1movedash { [2 2] 0 } def
+ /t1hmovedash { [2 2] 0 } def
+ /t1smovedash { [2 2] 0 } def
+ /t1curvedash { [4 4] 0 } def
+ /t1hcurvedash { [] 0 } def
+ /t1scurvedash { [] 0 } def
+ /t1sprolongatedash { [1 1] 0 }def
+ /t1closepathdash { [] 0 } def
+ /t1hclosepathdash { [] 0 } def
+ /t1sclosepathdash { [] 0 } def
+ /t1griddash { [3 3] 0 } def
+
+ % Define a clipping rectangle ROI (in charspace coordinates)
+ /t1ROIxmin 0 def
+ /t1ROIxmax 400 def
+ /t1ROIymin -50 def
+ /t1ROIymax 700 def
+
+ % Device values (in bp). These must match the Bounding Box Statement!
+ /xmindev 0 neg def
+ /xmaxdev 280 def
+ /ymindev 0 neg def
+ /ymaxdev 400 def
+ /dxdev 1 def
+ /dydev 1 def
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % End of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % logical pixel values
+ /xminpixel t1ROIxmin 1000.0 div size mul def
+ /xmaxpixel t1ROIxmax 1000.0 div size mul def
+ /yminpixel t1ROIymin 1000.0 div size mul def
+ /ymaxpixel t1ROIymax 1000.0 div size mul def
+ /dxpixel 1 def
+ /dypixel 1 def
+
+ % compute scales and set minimum scale
+ /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def
+ /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def
+ scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse
+
+ % Fill device page
+ xmindev ymindev moveto
+ xmaxdev 0 rlineto
+ 0 ymaxdev rlineto
+ xmaxdev neg 0 rlineto
+ 0 ymaxdev neg rlineto
+ closepath
+ clip
+ t1fillpage 1 eq
+ {
+ t1pagecolor setrgbcolor
+ fill
+ } if
+
+ % reassign device values
+ /xmindev xminpixel scale mul def
+ /xmaxdev xmaxpixel scale mul def
+ /ymindev yminpixel scale mul def
+ /ymaxdev ymaxpixel scale mul def
+ /dxdev dxpixel scale mul def
+ /dydev dypixel scale mul def
+
+ % translate coordinate system
+ xminpixel scale mul neg yminpixel scale mul neg translate
+
+ % Fill unit square of charspace coordinate system
+ t1fillunitsquare 1 eq
+ {
+ t1unitsquarecolor setrgbcolor
+ 0 0 moveto
+ size scale mul 0 rlineto
+ 0 size scale mul rlineto
+ size scale mul neg 0 rlineto
+ 0 size scale mul neg rlineto
+ closepath fill
+ } if
+} def
+
+/t1FinishPage {
+ t1drawgrid 1 eq
+ {
+ t1gridcolor setrgbcolor
+ t1gridscale setlinewidth
+ t1griddash setdash
+ % draw grid and align to the point (0,0)
+ 0 dxdev xmaxdev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dxdev neg xmindev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dydev ymaxdev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ 0 dydev neg ymindev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ } if
+} def
+
+% Define three arrow routines available for later providing the output with directions
+/t1arrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1arrowcolor setrgbcolor
+ currx curry translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale t1dumpstdlinewidth neg mul mul rlineto
+ 6 arrowscale t1dumpstdlinewidth mul mul 2 arrowscale t1dumpstdlinewidth mul mul rlineto
+ 6 arrowscale t1dumpstdlinewidth mul mul neg 2 arrowscale t1dumpstdlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1harrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1harrowcolor setrgbcolor
+ currhx currhy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1sarrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1sarrowcolor setrgbcolor
+ currsx currsy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale t1dumpstdlinewidth neg mul mul rlineto
+ 6 arrowscale t1dumpstdlinewidth mul mul 2 arrowscale t1dumpstdlinewidth mul mul rlineto
+ 6 arrowscale t1dumpstdlinewidth mul mul neg 2 arrowscale t1dumpstdlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+
+/t1rlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1linecolor setrgbcolor
+ t1linedash setdash
+ t1linescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+} def
+
+/t1srlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1slinecolor setrgbcolor
+ t1slinedash setdash
+ t1slinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1sprolongate {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1sprolongatecolor setrgbcolor
+ t1sprolongatedash setdash
+ t1sprolongatescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1hintedrlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hlinecolor setrgbcolor
+ t1hlinedash setdash
+ t1hlinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+} def
+
+/t1rmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1movecolor setrgbcolor
+ t1movedash setdash
+ t1movescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+ /startx currx def
+ /starty curry def
+} def
+
+/t1srmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1smovecolor setrgbcolor
+ t1smovedash setdash
+ t1smovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+ /startsx currsx def
+ /startsy currsy def
+} def
+
+/t1hintedrmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hmovecolor setrgbcolor
+ t1hmovedash setdash
+ t1hmovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+ /starthx currhx def
+ /starthy currhy def
+} def
+
+/t1rrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1curvecolor setrgbcolor
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+
+ newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currx curry moveto
+ currx x2 add curry y2 add lineto
+ stroke
+ currx x2 x3 add add curry y2 y3 add add moveto
+ currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ currx curry moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currx currx x2 x3 x4 add add add def
+ /curry curry y2 y3 y4 add add add def
+} def
+
+/t1srrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1scurvecolor setrgbcolor
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currsx currsy moveto
+ currsx x2 add currsy y2 add lineto
+ stroke
+ currsx x2 x3 add add currsy y2 y3 add add moveto
+ currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ currsx currsy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currsx currsx x2 x3 x4 add add add def
+ /currsy currsy y2 y3 y4 add add add def
+} def
+
+/t1hintedrrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hcurvecolor setrgbcolor
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currhx currhy moveto
+ currhx x2 add currhy y2 add lineto
+ stroke
+ currhx x2 x3 add add currhy y2 y3 add add moveto
+ currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ currhx currhy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currhx currhx x2 x3 x4 add add add def
+ /currhy currhy y2 y3 y4 add add add def
+} def
+
+/t1sbw {
+ /wy exch scale mul def
+ /wx exch scale mul def
+ /sby exch scale mul def
+ /sbx exch scale mul def
+ t1sbwcolor setrgbcolor
+ newpath sbx sby 3 0 360 arc closepath fill
+ newpath wx wy 3 0 360 arc closepath fill
+ /currx sbx def
+ /curry sby def
+ /currhx sbx def
+ /currhy sby def
+ /currsx sbx def
+ /currsy sby def
+} def
+
+/t1closepath {
+ t1closepathdash setdash
+ t1closepathscale t1dumpstdlinewidth mul setlinewidth
+ t1closepathcolor setrgbcolor
+ currx curry moveto
+ startx starty lineto
+ stroke
+} def
+
+/t1sclosepath {
+ t1sclosepathdash setdash
+ t1sclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1sclosepathcolor setrgbcolor
+ currsx currsy moveto
+ startsx startsy lineto
+ stroke
+} def
+
+/t1hintedclosepath {
+ t1hclosepathdash setdash
+ t1hclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1hclosepathcolor setrgbcolor
+ currhx currhy moveto
+ starthx starthy lineto
+ stroke
+} def
+
+/t1vstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1alignedvstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1hstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1alignedhstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1bottomzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1bottomzonescale t1dumpstdlinewidth mul setlinewidth
+ t1bottomzonecolor setrgbcolor
+ [] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+/t1topzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1topzonescale t1dumpstdlinewidth mul setlinewidth
+ t1topzonecolor setrgbcolor
+ [2 2] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+end
+
+% Next follows drawing code from charstring commands:
+T1LibDict begin
+
+gsave
+20.000001 t1SetupSize
+t1PreparePage
+-0.439758 0.000000 t1bottomzone
+13.652496 14.092255 t1topzone
+8.615265 8.955078 t1topzone
+13.312683 13.532562 t1topzone
+-4.117737 -3.877869 t1bottomzone
+0.559692 0.000000 0.559692 0.000000 t1sbw
+9.005051 4.277649 t1srmoveto
+0.000000 2.635088 -2.059844 2.192259 -2.507646 0.000000 t1srrcurveto
+-2.589196 0.000000 t1sarrowhead -1.998282 -2.253895 0.000000 -2.573452 t1srrcurveto
+0.000000 -2.662721 2.147325 -1.984725 2.420165 0.000000 t1srrcurveto
+2.501468 0.000000 t1sarrowhead 2.086011 2.026044 0.000000 2.621402 t1srrcurveto
+t1sclosepath
+-0.299835 0.000000 t1srmoveto
+0.000000 -2.455808 -1.951770 -1.891803 -2.335873 0.000000 t1srrcurveto
+-2.257264 0.000000 t1sarrowhead -2.010390 1.853166 0.000000 2.494445 t1srrcurveto
+0.000000 2.423801 1.879586 2.103710 2.408057 0.000000 t1srrcurveto
+2.329696 0.000000 t1sarrowhead 1.937959 -2.045412 0.000000 -2.482100 t1srrcurveto
+t1sclosepath
+0.149918 -0.000000 t1srmoveto
+-4.417572 -3.847885 t1srmoveto
+-0.808825 0.000000 -0.829075 0.393694 -0.511556 0.871540 t1srrcurveto
+-0.129291 -0.075888 t1sprolongate
+0.130347 0.074061 t1sprolongate
+-0.475605 0.837065 t1sarrowhead -0.004550 1.172020 0.000000 0.735306 t1srrcurveto
+0.000000 0.791693 0.003844 1.036104 0.457587 0.838909 t1srrcurveto
+-0.131612 0.071788 t1sprolongate
+0.129291 -0.075888 t1sprolongate
+0.510742 0.870153 t1sarrowhead 0.888167 0.395081 0.750547 0.000000 t1srrcurveto
+0.828025 0.000000 0.810390 -0.413156 0.492055 -0.813783 t1srrcurveto
+0.493212 -0.815696 t1sarrowhead 0.004874 -1.109989 0.000000 -0.775217 t1srrcurveto
+0.000000 -0.730684 -0.003321 -1.039578 -0.420610 -0.841221 t1srrcurveto
+-0.000299 -0.000599 t1sprolongate
+-0.000294 -0.000601 t1sprolongate
+-0.415892 -0.850688 t1sarrowhead -0.828838 -0.544427 -0.939312 0.000000 t1srrcurveto
+t1sclosepath
+-0.000000 -0.299835 t1srmoveto
+1.059589 0.000000 0.930195 0.614936 0.463625 0.948323 t1srrcurveto
+-0.134684 0.065845 t1sprolongate
+0.134090 -0.067045 t1sprolongate
+0.458906 0.917812 t1sarrowhead -0.003321 1.119235 0.000000 0.708525 t1srrcurveto
+0.000000 0.743948 0.004874 1.208737 -0.546217 0.903359 t1srrcurveto
+-0.547374 0.905273 t1sarrowhead -0.908665 0.466361 -0.931008 0.000000 t1srrcurveto
+-0.848574 0.000000 -0.990800 -0.444457 -0.568665 -0.968836 t1srrcurveto
+-0.001193 -0.002032 t1sprolongate
+-0.001128 -0.002068 t1sprolongate
+-0.501886 -0.920124 t1sarrowhead 0.003844 -1.122710 0.000000 -0.767450 t1srrcurveto
+0.000000 -0.703903 -0.004550 -1.266640 0.523846 -0.921968 t1srrcurveto
+0.000521 -0.000918 t1sprolongate
+0.000534 -0.000910 t1sprolongate
+0.567850 -0.967449 t1sarrowhead 0.929958 -0.445844 0.910231 0.000000 t1srrcurveto
+t1sclosepath
+0.000000 0.149918 t1srmoveto
+t1FinishPage
+0.559692 0.000000 0.559692 0.000000 t1sbw
+8.855133 4.277649 t1rmoveto
+0.000000 2.558594 t1arrowhead -1.998901 2.118835 -2.418671 0.000000 t1rrcurveto
+-2.498627 0.000000 -1.938934 -2.178802 0.000000 -2.498627 t1rrcurveto
+0.000000 -2.578583 t1arrowhead 2.078857 -1.918945 2.338715 0.000000 t1rrcurveto
+2.418671 0.000000 2.018890 1.958923 0.000000 2.538605 t1rrcurveto
+t1closepath
+-4.417572 -3.997803 t1rmoveto
+-0.859528 0.000000 t1arrowhead -0.879517 0.419769 -0.539703 0.919495 t1rrcurveto
+-0.499725 0.879517 0.000000 1.219330 0.000000 0.719604 t1rrcurveto
+0.000000 0.779572 t1arrowhead 0.000000 1.079407 0.479736 0.879517 t1rrcurveto
+0.539703 0.919495 0.939484 0.419769 0.799561 0.000000 t1rrcurveto
+0.879517 0.000000 t1arrowhead 0.859528 -0.439758 0.519714 -0.859528 t1rrcurveto
+0.519714 -0.859528 0.000000 -1.159363 0.000000 -0.759583 t1rrcurveto
+0.000000 -0.719604 t1arrowhead 0.000000 -1.079407 -0.439758 -0.879517 t1rrcurveto
+-0.439758 -0.899506 -0.879517 -0.579681 -0.999451 0.000000 t1rrcurveto
+t1closepath
+t1FinishPage
+grestore
+
+end
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.pdf
new file mode 100644
index 00000000000..5d5230bcb9c
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_o.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.eps
new file mode 100644
index 00000000000..e818872f398
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.eps
@@ -0,0 +1,799 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: t1lib (edited manually by RMz, 2003-01-15)
+%%Title: Type1Char Character Dump
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 280 400
+%%DocumentPaperSizes: a4
+%%EndComments
+%!
+/T1LibDict 100 dict def
+T1LibDict begin
+% Setup the size from the type1 module
+/t1SetupSize {
+ /size exch def
+} def
+
+% Prepare the page. Compute scales and fill the charspace unit square
+% background
+/t1PreparePage {
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Start of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % Setup a standard linewidth
+ /t1dumpstdlinewidth 1.0 def
+ % Setup a scale for drawing direction arrows
+ /arrowscale 3.0 def
+
+ % Should we draw the device pixel grid? (1=yes, otherwise no)
+ /t1drawgrid 0 def
+ % Should we draw stems? (1=yes, otherwise no)
+ /t1drawstems 0 def
+ % Should we draw alignment zones? (1=yes, otherwise no)
+ /t1drawzones 0 def
+ % Should we fill the charspace unit square? (1=yes, otherwise no)
+ /t1fillunitsquare 0 def
+ % Should we fill the device page? (1=yes, otherwise no)
+ /t1fillpage 0 def
+ % Should we show path segment On-Curve points? (1=yes, otherwise no)
+ /t1showoncurvepoints 0 def
+ % Should we show path segment Off Curve points? (1=yes, otherwise no)
+ /t1showoffcurvepoints 0 def
+ % Should we show Bezier tangets and their defining points? (1=yes, otherwise no)
+ /t1showbeziertangents 0 def
+
+ % Define a few colors
+ /t1linecolor { 0.0 0.0 0.0 } def
+ /t1hlinecolor { 1.0 0.0 0.0 } def
+ /t1slinecolor { 0.0 0.0 0.0 } def
+ /t1movecolor { 0.0 0.0 0.0 } def
+ /t1hmovecolor { 0.0 0.0 0.0 } def
+ /t1smovecolor { 0.0 0.0 0.0 } def
+ /t1curvecolor { 0.0 0.0 0.0 } def
+ /t1hcurvecolor { 1.0 0.0 0.0 } def
+ /t1scurvecolor { 0.0 0.0 0.0 } def
+ /t1sprolongatecolor { 1.0 1.0 1.0 } def
+ /t1stemcolor { 0.0 0.0 1.0 } def
+ /t1alignedstemcolor { 1.0 0.0 1.0 } def
+ /t1bottomzonecolor { 1.0 1.0 0.0 } def
+ /t1topzonecolor { 1.0 1.0 0.0 } def
+ /t1arrowcolor { 0.0 0.0 0.0 } def
+ /t1harrowcolor { 1.0 0.0 0.0 } def
+ /t1sarrowcolor { 0.0 0.0 1.0 } def
+ /t1sbwcolor { 0.0 0.0 0.0 } def
+ /t1closepathcolor { 0.0 0.0 0.0 } def
+ /t1hclosepathcolor { 1.0 0.0 0.0 } def
+ /t1sclosepathcolor { 0.0 0.0 1.0 } def
+ /t1pagecolor { 0.7 0.7 0.7 } def
+ /t1unitsquarecolor { 0.4 0.4 0.4 } def
+ /t1gridcolor { 0.0 0.0 0.0 } def
+
+ % Line scale relative to the standard linewidth
+ /t1linescale 1.2 def
+ /t1hlinescale 0.4 def
+ /t1slinescale 0.4 def
+ /t1movescale 0.4 def
+ /t1hmovescale 0.4 def
+ /t1smovescale 0.4 def
+ /t1curvescale 1.2 def
+ /t1hcurvescale 0.4 def
+ /t1scurvescale 0.4 def
+ /t1curvetangentscale 0.5 def
+ /t1sprolongatescale 0.0 def
+ /t1stemscale 0.5 def
+ /t1alignedstemscale 0.5 def
+ /t1bottomzonescale 0.5 def
+ /t1topzonescale 0.5 def
+ /t1closepathscale 0.8 def
+ /t1hclosepathscale 0.4 def
+ /t1sclosepathscale 0.4 def
+ /t1gridscale 0.5 def
+
+ % Line dash specifications (stems and zones are not configurable!)
+ /t1linedash { [2 2] 0 } def
+ /t1hlinedash { [] 0 } def
+ /t1slinedash { [] 0 } def
+ /t1movedash { [2 2] 0 } def
+ /t1hmovedash { [2 2] 0 } def
+ /t1smovedash { [2 2] 0 } def
+ /t1curvedash { [2 2] 0 } def
+ /t1hcurvedash { [] 0 } def
+ /t1scurvedash { [] 0 } def
+ /t1sprolongatedash { [1 1] 0 }def
+ /t1closepathdash { [2 2] 0 } def
+ /t1hclosepathdash { [] 0 } def
+ /t1sclosepathdash { [] 0 } def
+ /t1griddash { [3 3] 0 } def
+
+ % Define a clipping rectangle ROI (in charspace coordinates)
+ /t1ROIxmin 0 def
+ /t1ROIxmax 300 def
+ /t1ROIymin -50 def
+ /t1ROIymax 650 def
+
+ % Device values (in bp). These must match the Bounding Box Statement!
+ /xmindev 0 neg def
+ /xmaxdev 280 def
+ /ymindev 0 neg def
+ /ymaxdev 400 def
+ /dxdev 1 def
+ /dydev 1 def
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % End of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % logical pixel values
+ /xminpixel t1ROIxmin 1000.0 div size mul def
+ /xmaxpixel t1ROIxmax 1000.0 div size mul def
+ /yminpixel t1ROIymin 1000.0 div size mul def
+ /ymaxpixel t1ROIymax 1000.0 div size mul def
+ /dxpixel 1 def
+ /dypixel 1 def
+
+ % compute scales and set minimum scale
+ /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def
+ /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def
+ scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse
+
+ % Fill device page
+ xmindev ymindev moveto
+ xmaxdev 0 rlineto
+ 0 ymaxdev rlineto
+ xmaxdev neg 0 rlineto
+ 0 ymaxdev neg rlineto
+ closepath
+ clip
+ t1fillpage 1 eq
+ {
+ t1pagecolor setrgbcolor
+ fill
+ } if
+
+ % reassign device values
+ /xmindev xminpixel scale mul def
+ /xmaxdev xmaxpixel scale mul def
+ /ymindev yminpixel scale mul def
+ /ymaxdev ymaxpixel scale mul def
+ /dxdev dxpixel scale mul def
+ /dydev dypixel scale mul def
+
+ % translate coordinate system
+ xminpixel scale mul neg yminpixel scale mul neg translate
+
+ % Fill unit square of charspace coordinate system
+ t1fillunitsquare 1 eq
+ {
+ t1unitsquarecolor setrgbcolor
+ 0 0 moveto
+ size scale mul 0 rlineto
+ 0 size scale mul rlineto
+ size scale mul neg 0 rlineto
+ 0 size scale mul neg rlineto
+ closepath fill
+ } if
+} def
+
+/t1FinishPage {
+ t1drawgrid 1 eq
+ {
+ t1gridcolor setrgbcolor
+ t1gridscale setlinewidth
+ t1griddash setdash
+ % draw grid and align to the point (0,0)
+ 0 dxdev xmaxdev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dxdev neg xmindev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dydev ymaxdev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ 0 dydev neg ymindev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ } if
+} def
+
+% Define three arrow routines available for later providing the output with directions
+/t1arrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1arrowcolor setrgbcolor
+ currx curry translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1harrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1harrowcolor setrgbcolor
+ currhx currhy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1sarrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1sarrowcolor setrgbcolor
+ currsx currsy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+
+/t1rlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1linecolor setrgbcolor
+ t1linedash setdash
+ t1linescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+} def
+
+/t1srlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1slinecolor setrgbcolor
+ t1slinedash setdash
+ t1slinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1sprolongate {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1sprolongatecolor setrgbcolor
+ t1sprolongatedash setdash
+ t1sprolongatescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1hintedrlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hlinecolor setrgbcolor
+ t1hlinedash setdash
+ t1hlinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+} def
+
+/t1rmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1movecolor setrgbcolor
+ t1movedash setdash
+ t1movescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+ /startx currx def
+ /starty curry def
+} def
+
+/t1srmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1smovecolor setrgbcolor
+ t1smovedash setdash
+ t1smovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+ /startsx currsx def
+ /startsy currsy def
+} def
+
+/t1hintedrmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hmovecolor setrgbcolor
+ t1hmovedash setdash
+ t1hmovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+ /starthx currhx def
+ /starthy currhy def
+} def
+
+/t1rrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1curvecolor setrgbcolor
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+
+ newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currx curry moveto
+ currx x2 add curry y2 add lineto
+ stroke
+ currx x2 x3 add add curry y2 y3 add add moveto
+ currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ currx curry moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currx currx x2 x3 x4 add add add def
+ /curry curry y2 y3 y4 add add add def
+} def
+
+/t1srrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1scurvecolor setrgbcolor
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currsx currsy moveto
+ currsx x2 add currsy y2 add lineto
+ stroke
+ currsx x2 x3 add add currsy y2 y3 add add moveto
+ currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ currsx currsy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currsx currsx x2 x3 x4 add add add def
+ /currsy currsy y2 y3 y4 add add add def
+} def
+
+/t1hintedrrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hcurvecolor setrgbcolor
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currhx currhy moveto
+ currhx x2 add currhy y2 add lineto
+ stroke
+ currhx x2 x3 add add currhy y2 y3 add add moveto
+ currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ currhx currhy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currhx currhx x2 x3 x4 add add add def
+ /currhy currhy y2 y3 y4 add add add def
+} def
+
+/t1sbw {
+ /wy exch scale mul def
+ /wx exch scale mul def
+ /sby exch scale mul def
+ /sbx exch scale mul def
+ t1sbwcolor setrgbcolor
+ newpath sbx sby 3 0 360 arc closepath fill
+ newpath wx wy 3 0 360 arc closepath fill
+ /currx sbx def
+ /curry sby def
+ /currhx sbx def
+ /currhy sby def
+ /currsx sbx def
+ /currsy sby def
+} def
+
+/t1closepath {
+ t1closepathdash setdash
+ t1closepathscale t1dumpstdlinewidth mul setlinewidth
+ t1closepathcolor setrgbcolor
+ currx curry moveto
+ startx starty lineto
+ stroke
+} def
+
+/t1sclosepath {
+ t1sclosepathdash setdash
+ t1sclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1sclosepathcolor setrgbcolor
+ currsx currsy moveto
+ startsx startsy lineto
+ stroke
+} def
+
+/t1hintedclosepath {
+ t1hclosepathdash setdash
+ t1hclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1hclosepathcolor setrgbcolor
+ currhx currhy moveto
+ starthx starthy lineto
+ stroke
+} def
+
+/t1vstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1alignedvstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1hstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1alignedhstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1bottomzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1bottomzonescale t1dumpstdlinewidth mul setlinewidth
+ t1bottomzonecolor setrgbcolor
+ [] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+/t1topzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1topzonescale t1dumpstdlinewidth mul setlinewidth
+ t1topzonecolor setrgbcolor
+ [2 2] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+end
+
+% Next follows drawing code from charstring commands:
+T1LibDict begin
+
+gsave
+15.000001 t1SetupSize
+t1PreparePage
+-0.329987 0.000000 t1bottomzone
+10.244583 10.574570 t1topzone
+6.464737 6.719727 t1topzone
+9.989594 10.154587 t1topzone
+-3.089874 -2.909882 t1bottomzone
+-0.164993 0.374985 t1hstem
+0.000000 1.000000 t1alignedhstem
+2.414902 0.299988 t1hstem
+2.000000 1.000000 t1alignedhstem
+5.999756 0.464981 t1hstem
+5.000000 1.000000 t1alignedhstem
+8.924637 0.299988 t1hstem
+9.000000 1.000000 t1alignedhstem
+1.559937 1.034958 t1vstem
+2.000000 1.000000 t1alignedvstem
+4.604813 0.374985 t1vstem
+4.000000 1.000000 t1alignedvstem
+0.284988 0.000000 0.284988 0.000000 t1sbw
+2.309906 5.999756 t1srmoveto
+0.000000 -0.112495 t1sprolongate
+2.144913 0.000000 t1srlineto
+0.112495 0.000000 t1sprolongate
+0.000000 0.112495 t1sprolongate
+0.000000 0.464981 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+-2.144913 0.000000 t1srlineto
+-0.000000 -0.112495 t1sprolongate
+0.112495 -0.000000 t1sprolongate
+0.000000 2.759888 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+-0.374985 0.000000 t1srlineto
+-0.111132 0.000000 t1sprolongate
+-0.001355 -0.111124 t1sprolongate
+-0.014942 -1.225209 -0.444926 -1.502841 -1.367155 -0.055802 t1srrcurveto
+-0.107908 -0.004404 t1sprolongate
+0.000000 -0.107997 t1sprolongate
+0.000000 -0.329987 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+1.274948 0.000000 t1srlineto
+-0.000000 0.112495 t1sprolongate
+-0.112495 -0.000000 t1sprolongate
+0.000000 -4.139832 t1srlineto
+0.000000 -1.938169 1.481412 -0.199244 0.566005 0.000000 t1srrcurveto
+1.163073 0.000000 0.434362 1.158258 0.000000 0.979156 t1srrcurveto
+0.000000 0.854965 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+-0.374985 0.000000 t1srlineto
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.112495 t1sprolongate
+0.000000 -0.824966 t1srlineto
+0.000000 -1.086171 -0.432363 -0.481265 -0.460100 0.000000 t1srrcurveto
+-0.872319 0.000000 -0.020145 1.203144 0.000000 0.304295 t1srrcurveto
+0.000000 4.169830 t1srlineto
+-0.112495 0.000000 t1sprolongate
+t1sclosepath
+-0.112495 0.112495 t1srmoveto
+-0.000000 -0.112495 t1sprolongate
+0.000000 -4.169830 t1srlineto
+0.000000 -0.205685 -0.020145 -1.526745 1.137599 0.000000 t1srrcurveto
+0.649854 0.000000 0.467600 0.658688 0.000000 1.133739 t1srrcurveto
+0.000000 0.824966 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+-0.000000 -0.112495 t1sprolongate
+0.374985 0.000000 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.854965 t1srlineto
+0.000000 -0.940766 -0.405604 -0.971656 -0.966840 0.000000 t1srrcurveto
+-0.513951 0.000000 -1.308475 0.160742 0.000000 1.751680 t1srrcurveto
+0.000000 4.139832 t1srlineto
+-0.000000 0.112495 t1sprolongate
+-0.112495 -0.000000 t1sprolongate
+-1.274948 0.000000 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+0.000000 0.329987 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+0.004588 -0.112402 t1sprolongate
+1.572725 0.064193 0.455038 1.707028 0.015057 1.234691 t1srrcurveto
+-0.112487 0.001372 t1sprolongate
+-0.000000 -0.112495 t1sprolongate
+0.374985 0.000000 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+0.000000 -2.759888 t1srlineto
+-0.000000 -0.112495 t1sprolongate
+0.112495 -0.000000 t1sprolongate
+2.144913 0.000000 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.464981 t1srlineto
+0.112495 -0.000000 t1sprolongate
+-0.000000 0.112495 t1sprolongate
+-2.144913 0.000000 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+t1sclosepath
+0.112495 -4.282326 t1srmoveto
+t1FinishPage
+0.284988 0.000000 0.284988 0.000000 t1sbw
+2.309906 5.999756 t1rmoveto
+2.144913 0.000000 t1rlineto
+0.000000 0.464981 t1rlineto
+-2.144913 0.000000 t1rlineto
+0.000000 2.759888 t1rlineto
+-0.374985 0.000000 t1rlineto
+-0.014999 -1.229950 -0.449982 -1.604935 -1.469940 -0.059998 t1rrcurveto
+0.000000 -0.329987 t1rlineto
+1.274948 0.000000 t1rlineto
+0.000000 -4.139832 t1rlineto
+0.000000 -1.844925 1.394943 -0.179993 0.539978 0.000000 t1rrcurveto
+1.064957 0.000000 0.419983 1.064957 0.000000 0.959961 t1rrcurveto
+0.000000 0.854965 t1rlineto
+-0.374985 0.000000 t1rlineto
+0.000000 -0.824966 t1rlineto
+0.000000 -1.109955 -0.449982 -0.569977 -0.554977 0.000000 t1rrcurveto
+-1.004959 0.000000 0.000000 1.364944 0.000000 0.254990 t1rrcurveto
+t1closepath
+t1FinishPage
+grestore
+
+end
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.pdf
new file mode 100644
index 00000000000..394ac9e1389
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_1.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.eps b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.eps
new file mode 100644
index 00000000000..50c2e102146
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.eps
@@ -0,0 +1,799 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: t1lib (edited manually by RMz, 2003-02-08)
+%%Title: Type1Char Character Dump
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 280 400
+%%DocumentPaperSizes: a4
+%%EndComments
+%!
+/T1LibDict 100 dict def
+T1LibDict begin
+% Setup the size from the type1 module
+/t1SetupSize {
+ /size exch def
+} def
+
+% Prepare the page. Compute scales and fill the charspace unit square
+% background
+/t1PreparePage {
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Start of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % Setup a standard linewidth
+ /t1dumpstdlinewidth 1.0 def
+ % Setup a scale for drawing direction arrows
+ /arrowscale 3.0 def
+
+ % Should we draw the device pixel grid? (1=yes, otherwise no)
+ /t1drawgrid 0 def
+ % Should we draw stems? (1=yes, otherwise no)
+ /t1drawstems 0 def
+ % Should we draw alignment zones? (1=yes, otherwise no)
+ /t1drawzones 0 def
+ % Should we fill the charspace unit square? (1=yes, otherwise no)
+ /t1fillunitsquare 0 def
+ % Should we fill the device page? (1=yes, otherwise no)
+ /t1fillpage 0 def
+ % Should we show path segment On-Curve points? (1=yes, otherwise no)
+ /t1showoncurvepoints 0 def
+ % Should we show path segment Off Curve points? (1=yes, otherwise no)
+ /t1showoffcurvepoints 0 def
+ % Should we show Bezier tangets and their defining points? (1=yes, otherwise no)
+ /t1showbeziertangents 0 def
+
+ % Define a few colors
+ /t1linecolor { 0.0 0.0 0.0 } def
+ /t1hlinecolor { 1.0 0.0 0.0 } def
+ /t1slinecolor { 1.0 1.0 1.0 } def
+ /t1movecolor { 0.0 0.0 0.0 } def
+ /t1hmovecolor { 0.0 0.0 0.0 } def
+ /t1smovecolor { 1.0 1.0 1.0 } def
+ /t1curvecolor { 0.0 0.0 0.0 } def
+ /t1hcurvecolor { 1.0 0.0 0.0 } def
+ /t1scurvecolor { 1.0 1.0 1.0 } def
+ /t1sprolongatecolor { 0.0 0.0 0.0 } def
+ /t1stemcolor { 0.0 0.0 1.0 } def
+ /t1alignedstemcolor { 1.0 0.0 1.0 } def
+ /t1bottomzonecolor { 1.0 1.0 0.0 } def
+ /t1topzonecolor { 1.0 1.0 0.0 } def
+ /t1arrowcolor { 0.0 0.0 0.0 } def
+ /t1harrowcolor { 1.0 0.0 0.0 } def
+ /t1sarrowcolor { 0.0 0.0 1.0 } def
+ /t1sbwcolor { 0.0 0.0 0.0 } def
+ /t1closepathcolor { 0.0 0.0 0.0 } def
+ /t1hclosepathcolor { 1.0 0.0 0.0 } def
+ /t1sclosepathcolor { 0.0 0.0 1.0 } def
+ /t1pagecolor { 0.7 0.7 0.7 } def
+ /t1unitsquarecolor { 0.4 0.4 0.4 } def
+ /t1gridcolor { 0.0 0.0 0.0 } def
+
+ % Line scale relative to the standard linewidth
+ /t1linescale 1.2 def
+ /t1hlinescale 0.4 def
+ /t1slinescale 0.0 def
+ /t1movescale 0.4 def
+ /t1hmovescale 0.4 def
+ /t1smovescale 0.0 def
+ /t1curvescale 1.2 def
+ /t1hcurvescale 0.4 def
+ /t1scurvescale 0.0 def
+ /t1curvetangentscale 0.5 def
+ /t1sprolongatescale 0.4 def
+ /t1stemscale 0.5 def
+ /t1alignedstemscale 0.5 def
+ /t1bottomzonescale 0.5 def
+ /t1topzonescale 0.5 def
+ /t1closepathscale 0.8 def
+ /t1hclosepathscale 0.4 def
+ /t1sclosepathscale 0.4 def
+ /t1gridscale 0.5 def
+
+ % Line dash specifications (stems and zones are not configurable!)
+ /t1linedash { [2 2] 0 } def
+ /t1hlinedash { [] 0 } def
+ /t1slinedash { [] 0 } def
+ /t1movedash { [2 2] 0 } def
+ /t1hmovedash { [2 2] 0 } def
+ /t1smovedash { [2 2] 0 } def
+ /t1curvedash { [2 2] 0 } def
+ /t1hcurvedash { [] 0 } def
+ /t1scurvedash { [] 0 } def
+ /t1sprolongatedash { [] 0 }def
+ /t1closepathdash { [2 2] 0 } def
+ /t1hclosepathdash { [] 0 } def
+ /t1sclosepathdash { [] 0 } def
+ /t1griddash { [3 3] 0 } def
+
+ % Define a clipping rectangle ROI (in charspace coordinates)
+ /t1ROIxmin 0 def
+ /t1ROIxmax 300 def
+ /t1ROIymin -50 def
+ /t1ROIymax 650 def
+
+ % Device values (in bp). These must match the Bounding Box Statement!
+ /xmindev 0 neg def
+ /xmaxdev 280 def
+ /ymindev 0 neg def
+ /ymaxdev 400 def
+ /dxdev 1 def
+ /dydev 1 def
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % End of Customizable Section
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % logical pixel values
+ /xminpixel t1ROIxmin 1000.0 div size mul def
+ /xmaxpixel t1ROIxmax 1000.0 div size mul def
+ /yminpixel t1ROIymin 1000.0 div size mul def
+ /ymaxpixel t1ROIymax 1000.0 div size mul def
+ /dxpixel 1 def
+ /dypixel 1 def
+
+ % compute scales and set minimum scale
+ /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def
+ /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def
+ scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse
+
+ % Fill device page
+ xmindev ymindev moveto
+ xmaxdev 0 rlineto
+ 0 ymaxdev rlineto
+ xmaxdev neg 0 rlineto
+ 0 ymaxdev neg rlineto
+ closepath
+ clip
+ t1fillpage 1 eq
+ {
+ t1pagecolor setrgbcolor
+ fill
+ } if
+
+ % reassign device values
+ /xmindev xminpixel scale mul def
+ /xmaxdev xmaxpixel scale mul def
+ /ymindev yminpixel scale mul def
+ /ymaxdev ymaxpixel scale mul def
+ /dxdev dxpixel scale mul def
+ /dydev dypixel scale mul def
+
+ % translate coordinate system
+ xminpixel scale mul neg yminpixel scale mul neg translate
+
+ % Fill unit square of charspace coordinate system
+ t1fillunitsquare 1 eq
+ {
+ t1unitsquarecolor setrgbcolor
+ 0 0 moveto
+ size scale mul 0 rlineto
+ 0 size scale mul rlineto
+ size scale mul neg 0 rlineto
+ 0 size scale mul neg rlineto
+ closepath fill
+ } if
+} def
+
+/t1FinishPage {
+ t1drawgrid 1 eq
+ {
+ t1gridcolor setrgbcolor
+ t1gridscale setlinewidth
+ t1griddash setdash
+ % draw grid and align to the point (0,0)
+ 0 dxdev xmaxdev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dxdev neg xmindev {
+ /xval exch def
+ xval ymindev moveto
+ xval ymaxdev lineto
+ stroke
+ } for
+ 0 dydev ymaxdev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ 0 dydev neg ymindev {
+ /yval exch def
+ xmindev yval moveto
+ xmaxdev yval lineto
+ stroke
+ } for
+ } if
+} def
+
+% Define three arrow routines available for later providing the output with directions
+/t1arrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1arrowcolor setrgbcolor
+ currx curry translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1harrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1harrowcolor setrgbcolor
+ currhx currhy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+/t1sarrowhead {
+ /tmpy exch def
+ /tmpx exch def
+ gsave
+ t1sarrowcolor setrgbcolor
+ currsx currsy translate
+ tmpy tmpx atan rotate
+ newpath
+ 0 0 moveto
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto
+ closepath
+ fill
+ grestore
+ tmpx
+ tmpy
+} def
+
+/t1rlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1linecolor setrgbcolor
+ t1linedash setdash
+ t1linescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+} def
+
+/t1srlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1slinecolor setrgbcolor
+ t1slinedash setdash
+ t1slinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1sprolongate {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1sprolongatecolor setrgbcolor
+ t1sprolongatedash setdash
+ t1sprolongatescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+} def
+
+/t1hintedrlineto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hlinecolor setrgbcolor
+ t1hlinedash setdash
+ t1hlinescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+} def
+
+/t1rmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1movecolor setrgbcolor
+ t1movedash setdash
+ t1movescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currx curry moveto
+ x2 y2 rlineto
+ stroke
+ /currx currx x2 add def
+ /curry curry y2 add def
+ /startx currx def
+ /starty curry def
+} def
+
+/t1srmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1smovecolor setrgbcolor
+ t1smovedash setdash
+ t1smovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currsx currsy moveto
+ x2 y2 rlineto
+ stroke
+ /currsx currsx x2 add def
+ /currsy currsy y2 add def
+ /startsx currsx def
+ /startsy currsy def
+} def
+
+/t1hintedrmoveto {
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hmovecolor setrgbcolor
+ t1hmovedash setdash
+ t1hmovescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ currhx currhy moveto
+ x2 y2 rlineto
+ stroke
+ /currhx currhx x2 add def
+ /currhy currhy y2 add def
+ /starthx currhx def
+ /starthy currhy def
+} def
+
+/t1rrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1curvecolor setrgbcolor
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+
+ newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currx curry moveto
+ currx x2 add curry y2 add lineto
+ stroke
+ currx x2 x3 add add curry y2 y3 add add moveto
+ currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1curvedash setdash
+ t1curvescale t1dumpstdlinewidth mul setlinewidth
+ currx curry moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currx currx x2 x3 x4 add add add def
+ /curry curry y2 y3 y4 add add add def
+} def
+
+/t1srrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1scurvecolor setrgbcolor
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoffcurvepoints 1 eq
+ {
+ newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currsx currsy moveto
+ currsx x2 add currsy y2 add lineto
+ stroke
+ currsx x2 x3 add add currsy y2 y3 add add moveto
+ currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1scurvedash setdash
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth
+ currsx currsy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currsx currsx x2 x3 x4 add add add def
+ /currsy currsy y2 y3 y4 add add add def
+} def
+
+/t1hintedrrcurveto {
+ /y4 exch scale mul def
+ /x4 exch scale mul def
+ /y3 exch scale mul def
+ /x3 exch scale mul def
+ /y2 exch scale mul def
+ /x2 exch scale mul def
+ t1hcurvecolor setrgbcolor
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showoncurvepoints 1 eq
+ {
+ newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill
+ } if
+ t1showbeziertangents 1 eq
+ {
+ [2 2] 0 setdash
+ t1curvetangentscale currentlinewidth mul setlinewidth
+ currhx currhy moveto
+ currhx x2 add currhy y2 add lineto
+ stroke
+ currhx x2 x3 add add currhy y2 y3 add add moveto
+ currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto
+ stroke
+ } if
+ t1hcurvedash setdash
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth
+ currhx currhy moveto
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto
+ stroke
+ /currhx currhx x2 x3 x4 add add add def
+ /currhy currhy y2 y3 y4 add add add def
+} def
+
+/t1sbw {
+ /wy exch scale mul def
+ /wx exch scale mul def
+ /sby exch scale mul def
+ /sbx exch scale mul def
+ t1sbwcolor setrgbcolor
+ newpath sbx sby 3 0 360 arc closepath fill
+ newpath wx wy 3 0 360 arc closepath fill
+ /currx sbx def
+ /curry sby def
+ /currhx sbx def
+ /currhy sby def
+ /currsx sbx def
+ /currsy sby def
+} def
+
+/t1closepath {
+ t1closepathdash setdash
+ t1closepathscale t1dumpstdlinewidth mul setlinewidth
+ t1closepathcolor setrgbcolor
+ currx curry moveto
+ startx starty lineto
+ stroke
+} def
+
+/t1sclosepath {
+ t1sclosepathdash setdash
+ t1sclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1sclosepathcolor setrgbcolor
+ currsx currsy moveto
+ startsx startsy lineto
+ stroke
+} def
+
+/t1hintedclosepath {
+ t1hclosepathdash setdash
+ t1hclosepathscale t1dumpstdlinewidth mul setlinewidth
+ t1hclosepathcolor setrgbcolor
+ currhx currhy moveto
+ starthx starthy lineto
+ stroke
+} def
+
+/t1vstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1alignedvstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ stemstart ymindev moveto
+ stemstart ymaxdev lineto
+ stroke
+ [2 2] 0 setdash
+ stemwidth stemstart add ymindev moveto
+ stemwidth stemstart add ymaxdev lineto
+ stroke
+ } if
+} def
+
+/t1hstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1stemscale t1dumpstdlinewidth mul setlinewidth
+ t1stemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1alignedhstem {
+ t1drawstems 1 eq
+ {
+ /stemwidth exch scale mul def
+ /stemstart exch scale mul def
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth
+ t1alignedstemcolor setrgbcolor
+ [] 0 setdash
+ xmindev stemstart moveto
+ xmaxdev stemstart lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev stemwidth stemstart add moveto
+ xmaxdev stemwidth stemstart add lineto
+ stroke
+ } if
+} def
+
+/t1bottomzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1bottomzonescale t1dumpstdlinewidth mul setlinewidth
+ t1bottomzonecolor setrgbcolor
+ [] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [2 2] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+/t1topzone {
+ t1drawzones 1 eq
+ {
+ /bottom exch scale mul def
+ /top exch scale mul def
+ t1topzonescale t1dumpstdlinewidth mul setlinewidth
+ t1topzonecolor setrgbcolor
+ [2 2] 0 setdash
+ xmindev bottom moveto
+ xmaxdev bottom lineto
+ stroke
+ [] 0 setdash
+ xmindev top moveto
+ xmaxdev top lineto
+ stroke
+ } if
+} def
+
+end
+
+% Next follows drawing code from charstring commands:
+T1LibDict begin
+
+gsave
+15.000001 t1SetupSize
+t1PreparePage
+-0.329987 0.000000 t1bottomzone
+10.244583 10.574570 t1topzone
+6.464737 6.719727 t1topzone
+9.989594 10.154587 t1topzone
+-3.089874 -2.909882 t1bottomzone
+-0.164993 0.374985 t1hstem
+0.000000 1.000000 t1alignedhstem
+2.414902 0.299988 t1hstem
+2.000000 1.000000 t1alignedhstem
+5.999756 0.464981 t1hstem
+5.000000 1.000000 t1alignedhstem
+8.924637 0.299988 t1hstem
+9.000000 1.000000 t1alignedhstem
+1.559937 1.034958 t1vstem
+2.000000 1.000000 t1alignedvstem
+4.604813 0.374985 t1vstem
+4.000000 1.000000 t1alignedvstem
+0.284988 0.000000 0.284988 0.000000 t1sbw
+2.309906 5.999756 t1srmoveto
+0.000000 -0.112495 t1sprolongate
+2.144913 0.000000 t1srlineto
+0.112495 0.000000 t1sprolongate
+0.000000 0.112495 t1sprolongate
+0.000000 0.464981 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+-2.144913 0.000000 t1srlineto
+-0.000000 -0.112495 t1sprolongate
+0.112495 -0.000000 t1sprolongate
+0.000000 2.759888 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+-0.374985 0.000000 t1srlineto
+-0.111132 0.000000 t1sprolongate
+-0.001355 -0.111124 t1sprolongate
+-0.014942 -1.225209 -0.444926 -1.502841 -1.367155 -0.055802 t1srrcurveto
+-0.107908 -0.004404 t1sprolongate
+0.000000 -0.107997 t1sprolongate
+0.000000 -0.329987 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+1.274948 0.000000 t1srlineto
+-0.000000 0.112495 t1sprolongate
+-0.112495 -0.000000 t1sprolongate
+0.000000 -4.139832 t1srlineto
+0.000000 -1.938169 1.481412 -0.199244 0.566005 0.000000 t1srrcurveto
+1.163073 0.000000 0.434362 1.158258 0.000000 0.979156 t1srrcurveto
+0.000000 0.854965 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+-0.374985 0.000000 t1srlineto
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.112495 t1sprolongate
+0.000000 -0.824966 t1srlineto
+0.000000 -1.086171 -0.432363 -0.481265 -0.460100 0.000000 t1srrcurveto
+-0.872319 0.000000 -0.020145 1.203144 0.000000 0.304295 t1srrcurveto
+0.000000 4.169830 t1srlineto
+-0.112495 0.000000 t1sprolongate
+t1sclosepath
+-0.112495 0.112495 t1srmoveto
+-0.000000 -0.112495 t1sprolongate
+0.000000 -4.169830 t1srlineto
+0.000000 -0.205685 -0.020145 -1.526745 1.137599 0.000000 t1srrcurveto
+0.649854 0.000000 0.467600 0.658688 0.000000 1.133739 t1srrcurveto
+0.000000 0.824966 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+-0.000000 -0.112495 t1sprolongate
+0.374985 0.000000 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.854965 t1srlineto
+0.000000 -0.940766 -0.405604 -0.971656 -0.966840 0.000000 t1srrcurveto
+-0.513951 0.000000 -1.308475 0.160742 0.000000 1.751680 t1srrcurveto
+0.000000 4.139832 t1srlineto
+-0.000000 0.112495 t1sprolongate
+-0.112495 -0.000000 t1sprolongate
+-1.274948 0.000000 t1srlineto
+0.000000 -0.112495 t1sprolongate
+0.112495 0.000000 t1sprolongate
+0.000000 0.329987 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+0.004588 -0.112402 t1sprolongate
+1.572725 0.064193 0.455038 1.707028 0.015057 1.234691 t1srrcurveto
+-0.112487 0.001372 t1sprolongate
+-0.000000 -0.112495 t1sprolongate
+0.374985 0.000000 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+0.000000 -2.759888 t1srlineto
+-0.000000 -0.112495 t1sprolongate
+0.112495 -0.000000 t1sprolongate
+2.144913 0.000000 t1srlineto
+0.000000 0.112495 t1sprolongate
+-0.112495 0.000000 t1sprolongate
+0.000000 -0.464981 t1srlineto
+0.112495 -0.000000 t1sprolongate
+-0.000000 0.112495 t1sprolongate
+-2.144913 0.000000 t1srlineto
+-0.112495 -0.000000 t1sprolongate
+t1sclosepath
+0.112495 -4.282326 t1srmoveto
+t1FinishPage
+0.284988 0.000000 0.284988 0.000000 t1sbw
+2.309906 5.999756 t1rmoveto
+2.144913 0.000000 t1rlineto
+0.000000 0.464981 t1rlineto
+-2.144913 0.000000 t1rlineto
+0.000000 2.759888 t1rlineto
+-0.374985 0.000000 t1rlineto
+-0.014999 -1.229950 -0.449982 -1.604935 -1.469940 -0.059998 t1rrcurveto
+0.000000 -0.329987 t1rlineto
+1.274948 0.000000 t1rlineto
+0.000000 -4.139832 t1rlineto
+0.000000 -1.844925 1.394943 -0.179993 0.539978 0.000000 t1rrcurveto
+1.064957 0.000000 0.419983 1.064957 0.000000 0.959961 t1rrcurveto
+0.000000 0.854965 t1rlineto
+-0.374985 0.000000 t1rlineto
+0.000000 -0.824966 t1rlineto
+0.000000 -1.109955 -0.449982 -0.569977 -0.554977 0.000000 t1rrcurveto
+-1.004959 0.000000 0.000000 1.364944 0.000000 0.254990 t1rrcurveto
+t1closepath
+t1FinishPage
+grestore
+
+end
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.pdf
new file mode 100644
index 00000000000..bb5f24dec0f
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1dump/t1dump_t_2.pdf
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.pdf b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.pdf
new file mode 100644
index 00000000000..2e46706773f
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.pdf
@@ -0,0 +1,17329 @@
+%PDF-1.2
+6 0 obj
+<< /S /GoTo /D (section.1) >>
+endobj
+8 0 obj
+(Introduction)
+endobj
+10 0 obj
+<< /S /GoTo /D (subsection.1.1) >>
+endobj
+12 0 obj
+(What Does t1lib Do?)
+endobj
+14 0 obj
+<< /S /GoTo /D (subsection.1.2) >>
+endobj
+16 0 obj
+(Copyrights and Credits)
+endobj
+18 0 obj
+<< /S /GoTo /D (subsection.1.3) >>
+endobj
+20 0 obj
+(Motivation)
+endobj
+22 0 obj
+<< /S /GoTo /D (subsection.1.4) >>
+endobj
+24 0 obj
+(How to Reach the Author/How to Get t1lib)
+endobj
+26 0 obj
+<< /S /GoTo /D (section.2) >>
+endobj
+28 0 obj
+(Getting Started)
+endobj
+30 0 obj
+<< /S /GoTo /D (subsection.2.1) >>
+endobj
+32 0 obj
+(Building, Installing and Removing the t1lib-Package)
+endobj
+34 0 obj
+<< /S /GoTo /D (subsection.2.2) >>
+endobj
+36 0 obj
+(Notes on Using GNU libtool)
+endobj
+38 0 obj
+<< /S /GoTo /D (subsection.2.3) >>
+endobj
+40 0 obj
+(Runtime-Setup)
+endobj
+42 0 obj
+<< /S /GoTo /D (subsubsection.2.3.1) >>
+endobj
+44 0 obj
+(Searchpath and Environment Setup)
+endobj
+46 0 obj
+<< /S /GoTo /D (subsubsection.2.3.2) >>
+endobj
+48 0 obj
+(The t1lib Configuration File)
+endobj
+50 0 obj
+<< /S /GoTo /D (subsubsection.2.3.3) >>
+endobj
+52 0 obj
+(The Font Database File)
+endobj
+54 0 obj
+<< /S /GoTo /D (subsubsection.2.3.4) >>
+endobj
+56 0 obj
+(Alternative Runtime Setups)
+endobj
+58 0 obj
+<< /S /GoTo /D (subsection.2.4) >>
+endobj
+60 0 obj
+(A Very Simple Programming Example)
+endobj
+62 0 obj
+<< /S /GoTo /D (section.3) >>
+endobj
+64 0 obj
+(The Program xglyph)
+endobj
+66 0 obj
+<< /S /GoTo /D (subsection.3.1) >>
+endobj
+68 0 obj
+(Common Parameter Dialogs and Toggle Buttons)
+endobj
+70 0 obj
+<< /S /GoTo /D (subsection.3.2) >>
+endobj
+72 0 obj
+(Buttons that Influence the X11 Rastering Functions)
+endobj
+74 0 obj
+<< /S /GoTo /D (subsection.3.3) >>
+endobj
+76 0 obj
+(Buttons that Generate Actions)
+endobj
+78 0 obj
+<< /S /GoTo /D (subsection.3.4) >>
+endobj
+80 0 obj
+(The Message Window)
+endobj
+82 0 obj
+<< /S /GoTo /D (subsection.3.5) >>
+endobj
+84 0 obj
+(The Output Window)
+endobj
+86 0 obj
+<< /S /GoTo /D (subsection.3.6) >>
+endobj
+88 0 obj
+(xglyph Commandline Parameters)
+endobj
+90 0 obj
+<< /S /GoTo /D (subsection.3.7) >>
+endobj
+92 0 obj
+(Fonts Included in the t1lib-Package)
+endobj
+94 0 obj
+<< /S /GoTo /D (subsection.3.8) >>
+endobj
+96 0 obj
+(Some General Remarks on xglyph)
+endobj
+98 0 obj
+<< /S /GoTo /D (section.4) >>
+endobj
+100 0 obj
+(The Program type1afm)
+endobj
+102 0 obj
+<< /S /GoTo /D (section.5) >>
+endobj
+104 0 obj
+(Using t1lib)
+endobj
+106 0 obj
+<< /S /GoTo /D (subsection.5.1) >>
+endobj
+108 0 obj
+(Compiling and Linking t1lib-Programs)
+endobj
+110 0 obj
+<< /S /GoTo /D (subsection.5.2) >>
+endobj
+112 0 obj
+(Querying and Setting Fundamental Configuration Parameters of t1lib)
+endobj
+114 0 obj
+<< /S /GoTo /D (subsection.5.3) >>
+endobj
+116 0 obj
+(Initialization of t1lib and Related Things)
+endobj
+118 0 obj
+<< /S /GoTo /D (subsubsection.5.3.1) >>
+endobj
+120 0 obj
+(Standard Initialization)
+endobj
+122 0 obj
+<< /S /GoTo /D (subsubsection.5.3.2) >>
+endobj
+124 0 obj
+(Fine Control over Font Databases and File Search Paths)
+endobj
+126 0 obj
+<< /S /GoTo /D (subsubsection.5.3.3) >>
+endobj
+128 0 obj
+(Adding Fonts to the Database)
+endobj
+130 0 obj
+<< /S /GoTo /D (subsubsection.5.3.4) >>
+endobj
+132 0 obj
+(Summary of Search Path Handling)
+endobj
+134 0 obj
+<< /S /GoTo /D (subsubsection.5.3.5) >>
+endobj
+136 0 obj
+(Bypassing the t1lib File Search Machinery)
+endobj
+138 0 obj
+<< /S /GoTo /D (subsection.5.4) >>
+endobj
+140 0 obj
+(The t1lib-Logfile)
+endobj
+142 0 obj
+<< /S /GoTo /D (subsection.5.5) >>
+endobj
+144 0 obj
+(Generating Bitmaps)
+endobj
+146 0 obj
+<< /S /GoTo /D (subsection.5.6) >>
+endobj
+148 0 obj
+(Loading Fonts Explicitly)
+endobj
+150 0 obj
+<< /S /GoTo /D (subsection.5.7) >>
+endobj
+152 0 obj
+(Functions for Encoding Handling)
+endobj
+154 0 obj
+<< /S /GoTo /D (subsection.5.8) >>
+endobj
+156 0 obj
+(Deleting Data)
+endobj
+158 0 obj
+<< /S /GoTo /D (subsection.5.9) >>
+endobj
+160 0 obj
+(Underlining, Overlining and Overstriking)
+endobj
+162 0 obj
+<< /S /GoTo /D (subsection.5.10) >>
+endobj
+164 0 obj
+(Common Information on Fonts and Characters)
+endobj
+166 0 obj
+<< /S /GoTo /D (subsubsection.5.10.1) >>
+endobj
+168 0 obj
+(Information from FontInfo-Dictionary)
+endobj
+170 0 obj
+<< /S /GoTo /D (subsubsection.5.10.2) >>
+endobj
+172 0 obj
+(Metric Information on Glyphs)
+endobj
+174 0 obj
+<< /S /GoTo /D (subsubsection.5.10.3) >>
+endobj
+176 0 obj
+(Character-Encoding Relation)
+endobj
+178 0 obj
+<< /S /GoTo /D (subsubsection.5.10.4) >>
+endobj
+180 0 obj
+(Administrative Information)
+endobj
+182 0 obj
+<< /S /GoTo /D (subsection.5.11) >>
+endobj
+184 0 obj
+(Transformation of Fonts)
+endobj
+186 0 obj
+<< /S /GoTo /D (subsubsection.5.11.1) >>
+endobj
+188 0 obj
+(Fontlevel Transformations)
+endobj
+190 0 obj
+<< /S /GoTo /D (subsubsection.5.11.2) >>
+endobj
+192 0 obj
+(Transformation at Rastering Time)
+endobj
+194 0 obj
+<< /S /GoTo /D (subsubsection.5.11.3) >>
+endobj
+196 0 obj
+(t1lib and PostScript: Notes on Transformation Matrices)
+endobj
+198 0 obj
+<< /S /GoTo /D (subsection.5.12) >>
+endobj
+200 0 obj
+(Stroking of Character Outlines)
+endobj
+202 0 obj
+<< /S /GoTo /D (subsection.5.13) >>
+endobj
+204 0 obj
+(Antialiasing)
+endobj
+206 0 obj
+<< /S /GoTo /D (subsubsection.5.13.1) >>
+endobj
+208 0 obj
+(General Description)
+endobj
+210 0 obj
+<< /S /GoTo /D (subsubsection.5.13.2) >>
+endobj
+212 0 obj
+(Setting Operating Parameters)
+endobj
+214 0 obj
+<< /S /GoTo /D (subsubsection.5.13.3) >>
+endobj
+216 0 obj
+(Smart Antialiasing)
+endobj
+218 0 obj
+<< /S /GoTo /D (subsubsection.5.13.4) >>
+endobj
+220 0 obj
+(Caching of Antialiased Character Glyphs)
+endobj
+222 0 obj
+<< /S /GoTo /D (subsection.5.14) >>
+endobj
+224 0 obj
+(Interface to Outlines)
+endobj
+226 0 obj
+<< /S /GoTo /D (subsubsection.5.14.1) >>
+endobj
+228 0 obj
+(Outline Format)
+endobj
+230 0 obj
+<< /S /GoTo /D (subsubsection.5.14.2) >>
+endobj
+232 0 obj
+(Using Outlines)
+endobj
+234 0 obj
+<< /S /GoTo /D (subsubsection.5.14.3) >>
+endobj
+236 0 obj
+(Manipulation of Outlines)
+endobj
+238 0 obj
+<< /S /GoTo /D (subsection.5.15) >>
+endobj
+240 0 obj
+(Logical Fonts)
+endobj
+242 0 obj
+<< /S /GoTo /D (subsection.5.16) >>
+endobj
+244 0 obj
+(Missing or Invalid AFM Files)
+endobj
+246 0 obj
+<< /S /GoTo /D (subsubsection.5.16.1) >>
+endobj
+248 0 obj
+(Remarks on AFM Files)
+endobj
+250 0 obj
+<< /S /GoTo /D (subsubsection.5.16.2) >>
+endobj
+252 0 obj
+(Generation of AFM Information)
+endobj
+254 0 obj
+<< /S /GoTo /D (subsubsection.5.16.3) >>
+endobj
+256 0 obj
+(Writing AFM Files)
+endobj
+258 0 obj
+<< /S /GoTo /D (subsection.5.17) >>
+endobj
+260 0 obj
+(Font Subsetting)
+endobj
+262 0 obj
+<< /S /GoTo /D (subsubsection.5.17.1) >>
+endobj
+264 0 obj
+(Font File Organization and Subsetting)
+endobj
+266 0 obj
+<< /S /GoTo /D (subsubsection.5.17.2) >>
+endobj
+268 0 obj
+(Functions for Subsetting)
+endobj
+270 0 obj
+<< /S /GoTo /D (subsubsection.5.17.3) >>
+endobj
+272 0 obj
+(Further Functions for Subsetting)
+endobj
+274 0 obj
+<< /S /GoTo /D (subsection.5.18) >>
+endobj
+276 0 obj
+(Composite Characters)
+endobj
+278 0 obj
+<< /S /GoTo /D (subsubsection.5.18.1) >>
+endobj
+280 0 obj
+(General remarks)
+endobj
+282 0 obj
+<< /S /GoTo /D (subsubsection.5.18.2) >>
+endobj
+284 0 obj
+(Accessing Composite Character Data)
+endobj
+286 0 obj
+<< /S /GoTo /D (subsubsection.5.18.3) >>
+endobj
+288 0 obj
+(Transparent Handling of Composite Characters and User Extensions)
+endobj
+290 0 obj
+<< /S /GoTo /D (subsubsection.5.18.4) >>
+endobj
+292 0 obj
+(Caveats)
+endobj
+294 0 obj
+<< /S /GoTo /D (subsection.5.19) >>
+endobj
+296 0 obj
+(Error Handling)
+endobj
+298 0 obj
+<< /S /GoTo /D (subsubsection.5.19.1) >>
+endobj
+300 0 obj
+(Type 1 Font File Scan-Errors)
+endobj
+302 0 obj
+<< /S /GoTo /D (subsubsection.5.19.2) >>
+endobj
+304 0 obj
+(Path Generation Errors)
+endobj
+306 0 obj
+<< /S /GoTo /D (subsubsection.5.19.3) >>
+endobj
+308 0 obj
+(t1lib-Errors)
+endobj
+310 0 obj
+<< /S /GoTo /D (subsection.5.20) >>
+endobj
+312 0 obj
+(Other Useful Functions)
+endobj
+314 0 obj
+<< /S /GoTo /D (section.6) >>
+endobj
+316 0 obj
+(The X11-Interface)
+endobj
+318 0 obj
+<< /S /GoTo /D (subsection.6.1) >>
+endobj
+320 0 obj
+(Why a Special X11-Interface?)
+endobj
+322 0 obj
+<< /S /GoTo /D (subsection.6.2) >>
+endobj
+324 0 obj
+(Initialization of the X11-Interface)
+endobj
+326 0 obj
+<< /S /GoTo /D (subsection.6.3) >>
+endobj
+328 0 obj
+(Rastering Functions)
+endobj
+330 0 obj
+<< /S /GoTo /D (subsection.6.4) >>
+endobj
+332 0 obj
+(Creating XPM-Files from t1lib-Glyphs)
+endobj
+334 0 obj
+<< /S /GoTo /D (subsection.6.5) >>
+endobj
+336 0 obj
+(Limits of the X11 Interface)
+endobj
+338 0 obj
+<< /S /GoTo /D (section.7) >>
+endobj
+340 0 obj
+(Internals \(incomplete\))
+endobj
+342 0 obj
+<< /S /GoTo /D (subsection.7.1) >>
+endobj
+344 0 obj
+(Level 0: Global Data)
+endobj
+346 0 obj
+<< /S /GoTo /D (subsection.7.2) >>
+endobj
+348 0 obj
+(Level 1: Size-Independent Font Data)
+endobj
+350 0 obj
+<< /S /GoTo /D (subsection.7.3) >>
+endobj
+352 0 obj
+(Level 2: Size-Dependent Font Data)
+endobj
+354 0 obj
+<< /S /GoTo /D (section.8) >>
+endobj
+356 0 obj
+(Stroked Characters)
+endobj
+358 0 obj
+<< /S /GoTo /D (subsection.8.1) >>
+endobj
+360 0 obj
+(Approach)
+endobj
+362 0 obj
+<< /S /GoTo /D (subsection.8.2) >>
+endobj
+364 0 obj
+(Computation of Parallel Paths)
+endobj
+366 0 obj
+<< /S /GoTo /D (subsection.8.3) >>
+endobj
+368 0 obj
+(Connection of Path Segments and Prolongation)
+endobj
+370 0 obj
+<< /S /GoTo /D (equation.20) >>
+endobj
+372 0 obj
+(Function Index)
+endobj
+374 0 obj
+<< /S /GoTo /D [373 0 R /Fit ] >>
+endobj
+378 0 obj <<
+/Length 379 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ¥R;OÃ0Þû+<:Rsõ_ÉØ"ŠtA bHÛ"”¤J³þ<ç8€y¸‡¿ï»‡BñAáIøÌùL욊x^ćwùˆ4Vƒ5!ú˜’& ²"Õ2gÆÿ¢¡Hå"õrEAbUÌkÌð™Åa„ûYàm½M‹ëÅšXÆ€6.ܧ–ÀêÐOzÄÞ'ɪ?Õ]›¤š¼´€ ‚kå[0NnÊz=Ìæñ†”²S-С `ƵH¤¼A§ÜX`É o%wÔ—ý9Zº>:WU[õåP·OAMhð–ÙZáwì‹ç²/wC5áWõДÇÓ¤ÒwÍHã0wßxË}·e”’UÀ:Y$åùÈÆ”•Í:Éäá5Éá4Íd¾,w¥4‹{d¢ø]Y·±£\nªö5Lœ]Ÿï…¹T^¤Ž‚Ô¿?Ó;˜@“‡endstream
+endobj
+379 0 obj
+339
+endobj
+373 0 obj <<
+/Type /Page
+/Contents 378 0 R
+/Resources 377 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 383 0 R
+>> endobj
+1 0 obj
+ << /Type /Encoding /Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] >>
+endobj
+2 0 obj
+ << /Type /Font /Subtype /Type1 /Name /ZaDb /BaseFont /ZapfDingbats >>
+endobj
+3 0 obj
+ << /Type /Font /Subtype /Type1 /Name /Helv /BaseFont /Helvetica /Encoding 1 0 R >>
+endobj
+4 0 obj
+ << /Fields [] /DR << /Font << /ZaDb 2 0 R /Helv 3 0 R >> >> /DA (/Helv 10 Tf 0 g ) /NeedAppearances true >>
+endobj
+376 0 obj <<
+/D [373 0 R /XYZ 72 786.278 null]
+>> endobj
+375 0 obj <<
+/D [373 0 R /XYZ 72 761.372 null]
+>> endobj
+377 0 obj <<
+/Font << /F19 380 0 R /F21 381 0 R /F23 380 0 R /F24 382 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+388 0 obj <<
+/Length 389 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚí\]sÛ¸}ϯУ4Sa‰oà©c;qÖÝd7ngÚ>p%ZâX"=•ûë{I4MÀM»¦ek2ë¢܃{Ï=÷BxäÁ?<’d$•@DªÑlýÌ¿«QùèxÍŒdœ"βg;NË‘SÊ‘<|ñî§SÂG˜!ÊÄèâ2{1ÿ×ø$Ž&”ŒÓÀüÙLþsñ·w.ª«y£)aˆñüþÌ |mùè—âÒb„=¤=]¿4žL5áã3så$žLáï|;KCøÎÆ×(Ž8Ñ»'GF’™q÷3k^~Êh6HŒ¦Ö†·Îs×\Ì{„Œ_ú)Ì„Òñ{˜‘ã _3¸Yûœ"ˆKQ|8Å«ð3èÎÅ)ÓbÐûø¯Í»Æ”"©ÔîUáˆz¸¶(Î) É”{^íÓÚ~ñ‘ï zéÆòM üþå»­,
+ýgNçOãjÒØDº¯?›@¨[š§é20Ž¶é2N~Ê>£›Ÿù¤Ž¸Hà¥ÍÀxg2‚˜èÀÒd_¢^ÓG?€Åz^”´°/Ÿ#†ÏaÓ0Z€•Ÿ§~’sk~E”wˆAÙnÑx'¡“í„®äIÅ获áj3ú‹ «gÑ&õW+3Ex^ÅÛ¯Á:ÎvÁ÷â-³\Ljc¾ƒüä¤dˆÓ/Ù®3›ì*÷á‹ÀO),w¯©FZ‹—àÁ-bw†{ÅW9˜g$û5Nƒ‚‚AxÍíÿmSAáã¯ßPÀ€R\Y€ÆñÊZé!B:– 7˜›Èç°W´ìõ$Àá}pSò²¯Û(§ïá:˜žéöºyKZ"OtHìÐu}Èò
+³_8y—ÀiM‰ÞŠ{ÿö0[l“:ðø4\vHrÙEiÂø¡æj,¹ê=(ph 8¹ 8¨œ¦€ë(ÕJ?õÿð7åû.0Õíž%ÒB¾†@ô
+ÔÈI-vØš¢PÝ4E–'e¯£XnB"©ž OeJ‘çȸ„LÉyv®¯W…°ó%‰‰¿^WIð‡~þ®E*DZÕE«yèÚw\4ç½öù· ôGÂ%G?\É¡FÉ1ÑBUævpÍV¸øØÅêæziÝ6Qí‚gÅÆÁ›1Nvi=˜ÛbL4ÃOoèÓJì9‰×kÄØ؈.0ñ
+Xpªm”ׯmÛKŠ4Õ]Ô¹•]Y Ý+aÆrHcÓvc ¢
+¾¨®* Gž¶™sS®S•T·^ß\…Q™‚ÕÉ©«dTe•¯•t¿æÖ°&~¨(êÃïY8ºhW¤ gÑlµEFmuç¬ØhBÖÓÖ=Œ<ÑE~%ÒÏ=™>zöÁ!Cú&U€ë<.%>C†WekÏÚO®nëÚXqŽXž³´h
+臅[!Á®¥º”—<®ö9X”…Û‡»6\èà•‚ö÷mÜØýpçU# `¨Çæ~ÞŠ
+Sï4¤¦b/9„Õ§ôŒõêS!b¸¢2¯7(¥`b?™›mÝ€’¥-Ãçî"’(Ìßh§#E„‘}DDÙ»tZ)'E*›ÄE(È|Ïþ+Ëm§yaÍÕ¦Ò,Áå +¦NmzâªÓ_2EÎO—–C¡G^—C…Àfñÿ_”kv}šÓ~––ÃZºl6:šÏ+Rà.ʃ U]­ê@²ê.º]¶èÀÚ>t=,Êæ¢óízí—$Àê;UÕvªW}¬?¹sáÒ›:ñ
+µU'`Ž’Ë8)OeÍÌïÂÜ‚ê>¦‹$S‚vëžf‡"þNpè!ÁQZß«àVÏ’^Wê/:y ÂÎÃkõ”hXº^]¬  !]@è[4ðåàño…lf^lbÊ77i^¹2jà9‚ŠNÜXªýt4O—R3:$°3jœS8‹ º¬ë器Vt»ËVª¢îÉÒOü™«wŒ°¬viÖ`
+¿tÅqRê~?úņÔRà5<™
+æ0÷e¯mƒgæïÃœ„ø g¿
+ש%Gk¹§?£#E;o16cóž¶&ÆÖŸðÙ³òDÊ=ÛücÖrå8® d
+ßøUœ½{òÆ<&ÞðÔ€ rÕÓ"yPµä!¯œ»ª©’uK2‘Ìï0¿Øü̘ÿh¾Vä­q6»î¬('ÚëÄ·ÆÇLú-ï·Ã òxvÐ0#{ùùÒÄ6Í
+å!.y§ßËÓê B=
+Åñ#»tÉhJÒkíúÉ/ÂÇv¦dÄÞ±¶æÛÿ`42Æendstream
+endobj
+389 0 obj
+2480
+endobj
+387 0 obj <<
+/Type /Page
+/Contents 388 0 R
+/Resources 386 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 383 0 R
+/Annots [ 390 0 R 392 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R ]
+>> endobj
+390 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 725.955 157.529 733.53]
+/Subtype /Link
+/A << /S /GoTo /D (section.1) >>
+>> endobj
+392 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 712.405 222.151 719.981]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.1) >>
+>> endobj
+395 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 696.735 224.848 706.432]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.2) >>
+>> endobj
+396 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 685.307 165.575 692.762]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.3) >>
+>> endobj
+397 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 669.031 330.832 679.94]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.1.4) >>
+>> endobj
+398 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 645.179 175.355 654.875]
+/Subtype /Link
+/A << /S /GoTo /D (section.2) >>
+>> endobj
+399 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 631.629 370.18 641.326]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.1) >>
+>> endobj
+400 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 618.08 258.59 627.656]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.2) >>
+>> endobj
+401 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 604.531 185.424 614.107]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.3) >>
+>> endobj
+402 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 590.982 318.878 600.679]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.2.3.1) >>
+>> endobj
+403 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 577.433 290.211 587.13]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.2.3.2) >>
+>> endobj
+404 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 566.005 261.908 573.581]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.2.3.3) >>
+>> endobj
+405 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 550.335 281.939 560.031]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.2.3.4) >>
+>> endobj
+406 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 536.785 297.181 546.482]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.4) >>
+>> endobj
+407 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 512.024 200.544 522.024]
+/Subtype /Link
+/A << /S /GoTo /D (section.3) >>
+>> endobj
+408 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 498.778 346.211 508.475]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.1) >>
+>> endobj
+409 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 485.229 362.302 494.926]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.2) >>
+>> endobj
+410 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 473.801 261.711 481.377]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.3) >>
+>> endobj
+411 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 458.131 218.121 467.827]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.4) >>
+>> endobj
+412 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 444.581 214.06 454.278]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.5) >>
+>> endobj
+413 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 430.729 275.059 440.729]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.6) >>
+>> endobj
+414 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 417.483 289.423 427.18]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.7) >>
+>> endobj
+415 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 403.631 278.166 413.631]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.8) >>
+>> endobj
+416 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 379.173 211.998 389.173]
+/Subtype /Link
+/A << /S /GoTo /D (section.4) >>
+>> endobj
+417 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 355.018 152.508 364.714]
+/Subtype /Link
+/A << /S /GoTo /D (section.5) >>
+>> endobj
+418 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 341.468 305.241 351.165]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.1) >>
+>> endobj
+419 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 327.919 453.483 337.616]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2) >>
+>> endobj
+420 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 314.37 316.847 324.067]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3) >>
+>> endobj
+421 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 302.942 256.575 310.518]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.1) >>
+>> endobj
+422 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 289.393 418.484 296.969]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.2) >>
+>> endobj
+423 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 273.723 292.727 283.42]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.3) >>
+>> endobj
+424 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 260.173 314.939 269.87]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.4) >>
+>> endobj
+425 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 246.624 357.787 256.321]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.5) >>
+>> endobj
+426 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 233.075 199.817 242.772]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4) >>
+>> endobj
+427 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 219.526 209.833 229.102]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+428 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 205.977 231.242 215.674]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.6) >>
+>> endobj
+429 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 192.428 271.727 202.125]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7) >>
+>> endobj
+430 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 178.879 180.424 188.576]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8) >>
+>> endobj
+431 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 165.329 309.999 175.026]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.9) >>
+>> endobj
+432 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 153.902 337.757 161.477]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10) >>
+>> endobj
+433 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 138.231 328.757 147.928]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.1) >>
+>> endobj
+434 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 124.682 292.196 134.379]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.2) >>
+>> endobj
+435 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 111.133 287.817 120.83]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3) >>
+>> endobj
+436 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 99.705 279.696 107.281]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.4) >>
+>> endobj
+437 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 86.156 228.939 93.732]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+385 0 obj <<
+/D [387 0 R /XYZ 72 786.278 null]
+>> endobj
+384 0 obj <<
+/D [387 0 R /XYZ 72 739.61 null]
+>> endobj
+386 0 obj <<
+/Font << /F25 380 0 R /F26 391 0 R /F15 393 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+441 0 obj <<
+/Length 442 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚí\]sÛ6}ϯÐ#õ ”ÀÅg_:Ù4Îfo:µ2éL»ŒB[œP”‡¢;m~ýHÉ$%Á´Æ6Çú0mAÄÁ½çœ{< õž2’#"äd±z'öçˤzö‹~Ï^I FÍ«#Î(&(”b2†$gæzó¾ùí—Iõì—ÿš¿øá ³ ‘
+Õd~Y¾?ÿüGÀÆOgœÒàl*i°Î¦DEÿeãt: Á|*!È£ls¹ÎWQ‘¬³Íôóÿ¼x=¯Ç‚™BX’ãƒfHj/Û?.4±0Üy Jµß¼çïàÏ7…€™ð7åÀÌàÖ¶×ÜØàHõD±¨hO½ ¢Â<Bð[´)â<É®ìËy²Š[W
+1ýAGG.ÄߧDVë’TõšwxÞËÏÿገ €º!˜«
+œ&ŸìE·þ upEÙg‹“_MYoŠ‹Ež\?êû¦Aõßuolh±x‚=8ÃÁyTäÉ"nÅ•F‹TaIsëE¯‰gý'Â:¯”ß/ èÕÎ .Š|ýÅ-f¬/íܼZFy´ÐËܾ|S¤IÖž,ˆß:—H)ñTSÀžL@)¬0øi€Ñ3"€EÆKK ’(M¢AHøDƒÈƒ³p2õ(cü@ÿº÷@ê ß/µÈAS TDóMœÅy”Ú`òs¼)3ƒ øÍÑAˆpÈO! ü)Ä“¾  kVÍ%(ϼˆ‹¢f‘ﯧ3"’¢NF%‘ÐyhëDÔ‘{$"ÔC~
+!\ ÊF˜e#ïÖWÉ¢ò,lJ±ü¤5ÿR"!¥—/-ž¥(¹¯Æ¢i,‰pP,q‹¥ód³Í<k§M,ÝýkÊx %ŒÓ//ÏΉIÒŽHÃuròñÇ¢?ϵw¶…+'È@¼"³¿Å«(ÿÒ¨–9`À`PŽ„¢Õ IѱóXAvýóm)¾¶@*P¼Í¶EÔ戥B¼<uªÇ 漇ôrFRÕòŠŠ~4ý9y²uÄ¢ƒ‰¼Œîè}ÜQAåÂòŠÝ. Œ‹›OWWi/ÔÓ.}Ðj¶wá@0¸W…VÐA3Œèj܆KAÞçWZÝQÄ®×çÜ–Zí*Ÿî@x,•ÜV’kE÷8§ìLûM¶° žå”^Vúä@(aXq¯PÂ(ŒlÓl`PÀ.(òbYUÑö£„B‰ÂˆJê#VßA¬~ÆÆ ‰ç°_ÒÒŠWë•iÇ0]œIá’@]XmÓNÀ^E‰B&Ç>°NÃk°œ ^ÈÎî®Ü™Í‘éâ>Ý‚IŽŸ±IÚ’(qŇ„ë‰G1^.qí~²Ã±Å5FEÔ¦“px™l¦©¸|~„R   ±yä:Êc-'T%'þ­5CÚî3?œiÊkj±ñacBƒ×q¶éÚ”\ã„a/Ù!ï “–îCúM—xºêæ*[ƒ0;¿¢veK¿K±Ý˜1Zn¨A9¢²ñužW ^Úa)qX íð#z¾ zä°% U‘ƹ‰9ÿØàÛøŽmpßoEAp±ˆ²Y ½Ž~pæç~sÄù2%N×>84c´}ÿÅÒµð6j_{fŸê¤¨¾`d܉æ <0$zïM%Òµñ™‹ö„ %ü4…f·0VDNß<,ñ€`Ih‰Ìû­Ï©ÆåMÚåy¶,/~8ÈÖ7 ÉFÏëtž—¼Gݵ<dƒLf„"ÊäAÌÞÕ—8)‚ùÒ-sÇxö6›®÷,´L/î×K zH·=ðÎÈVÕhF͆(€þQ¶ì:¡^—%%s¢Ûñ-·-o‘Dî`÷¥·5~j7© ?ÕÈžÏâ8]“š¤Ã©¿²©ÄÊÛ,)7^}íhJ*–Ž¬· ÒnMb~[È)’‚Óß76Àa£q>LÙ:½7‘’Ðo?§ÒŸ7:L@ÁØ¡2¯ò8Úîÿý×ó™mp³¥æ|½êP˜…n×…¿ س b굉ðqwUwª{õÕK1uçˆ9ؼKVIQõI»M:.û”De·Ï~_
+bÔ·qZâçÅä;Oœß,÷%íÂ’vÃÓ‰A¥Kßÿ Y˜d‹õê:‹X¿j«Qˆùlì½(‘Gù»:=5wû¿Ð¼õ&]²ätVV1Ñ<\xu ËÑyˆ<`=GÔŒ¾ìÐs‘|5‰ÿ;§^?»åÌ·¼úÎâ}èUUœ¶|û;+2$> d?—èP:\ÍŸz¢ÃH„—_@§wX(DÞMz
+ÐÀ‡­‹“à"¾Z™l+‚JoOàÍ×é:»êÜJ˜–*Œúd[J¾÷hÕª<蛨z‘p¥:wn󞾚ËfgSÅ+×ÔdRþwÇáÃûäP­dÕ­SX;?UïD–ç·Ï€  ôhÅSß…ÝbmÞ£UxÏÿ9Hçªendstream
+endobj
+442 0 obj
+2232
+endobj
+440 0 obj <<
+/Type /Page
+/Contents 441 0 R
+/Resources 439 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 383 0 R
+/Annots [ 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R ]
+>> endobj
+443 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 750.413 272.636 757.989]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.1) >>
+>> endobj
+444 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 734.742 312.969 744.439]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.2) >>
+>> endobj
+445 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 721.193 423.271 730.89]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.11.3) >>
+>> endobj
+446 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 707.644 260.878 717.341]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.12) >>
+>> endobj
+447 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 694.095 170.484 703.792]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.13) >>
+>> endobj
+448 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 680.546 243.56 690.243]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.13.1) >>
+>> endobj
+449 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 666.997 291.696 676.572]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.13.2) >>
+>> endobj
+450 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 653.448 238.151 663.144]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.13.3) >>
+>> endobj
+451 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 639.898 344.681 649.595]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.13.4) >>
+>> endobj
+452 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 628.47 212.03 636.046]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.14) >>
+>> endobj
+453 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 614.921 222.484 622.497]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.14.1) >>
+>> endobj
+454 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 599.251 219.09 608.948]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.14.2) >>
+>> endobj
+455 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 585.702 268.424 595.399]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.14.3) >>
+>> endobj
+456 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 572.153 177.151 581.85]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.15) >>
+>> endobj
+457 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 558.604 253.969 568.3]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.16) >>
+>> endobj
+458 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 547.176 260.181 554.751]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.16.1) >>
+>> endobj
+459 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 533.626 302.59 541.202]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.16.2) >>
+>> endobj
+460 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 517.956 239.666 527.653]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.16.3) >>
+>> endobj
+461 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 504.407 189.121 514.104]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.17) >>
+>> endobj
+462 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 490.858 332.393 500.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.17.1) >>
+>> endobj
+463 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 477.309 265.333 487.006]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.17.2) >>
+>> endobj
+464 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 463.76 304.939 473.456]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.17.3) >>
+>> endobj
+465 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 450.21 219.393 459.907]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.18) >>
+>> endobj
+466 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 438.782 227.075 446.358]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.18.1) >>
+>> endobj
+467 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 423.112 326.636 432.809]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.18.2) >>
+>> endobj
+468 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 409.563 476.605 419.26]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.18.3) >>
+>> endobj
+469 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 398.135 185.696 405.589]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.18.4) >>
+>> endobj
+470 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 382.465 186.121 392.162]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.19) >>
+>> endobj
+471 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 368.915 288.666 378.612]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.19.1) >>
+>> endobj
+472 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 357.488 261.348 365.063]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.19.2) >>
+>> endobj
+473 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [113.454 343.938 210.635 351.393]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.19.3) >>
+>> endobj
+474 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 330.389 224.666 337.965]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.20) >>
+>> endobj
+475 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 305.931 188.635 313.507]
+/Subtype /Link
+/A << /S /GoTo /D (section.6) >>
+>> endobj
+476 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 290.261 255.605 299.958]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.1) >>
+>> endobj
+477 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 278.833 273.484 286.408]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.2) >>
+>> endobj
+478 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 263.162 209.06 272.738]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.3) >>
+>> endobj
+479 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 249.613 305.378 259.31]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.4) >>
+>> endobj
+480 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 238.185 243.09 245.761]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.6.5) >>
+>> endobj
+481 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 211 210.568 221.909]
+/Subtype /Link
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+482 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 200.178 214.136 207.754]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.1) >>
+>> endobj
+483 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 184.508 289.363 194.204]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.2) >>
+>> endobj
+484 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 170.958 281.636 180.655]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.3) >>
+>> endobj
+485 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 148.621 194.538 156.197]
+/Subtype /Link
+/A << /S /GoTo /D (section.8) >>
+>> endobj
+486 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 132.951 159.545 142.648]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.1) >>
+>> endobj
+487 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 119.402 259.605 129.099]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.2) >>
+>> endobj
+488 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [88.363 105.853 340.817 115.55]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.8.3) >>
+>> endobj
+489 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 83.516 167.764 91.091]
+/Subtype /Link
+/A << /S /GoTo /D (equation.20) >>
+>> endobj
+438 0 obj <<
+/D [440 0 R /XYZ 72 786.278 null]
+>> endobj
+439 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+493 0 obj <<
+/Length 494 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZK“㶾ûü…¹…S5¢ €Ïäà²co¼±7å²åØ©$ i˜¥H$w<þõé(R£õTnÞÔT A°4úù¡!u“ÀŸº)ôMQæ±.Ê›úø‘ºá¿·7¡õô1eš™8KñíÂM Ü˜,.ó é?Û~ôñ+ݨ46i~³Ýív÷ÏHÝn”Òiôº»5*}»çnªÇ¦ïnÿ½ýëǯLq£T\eÛè4.2Å£ã0þ‡;ÂÐ">ç)Ü £ËÅh•¨8+µ¬=ª¶¹¿²ð­S#DŸ÷Ÿ0‰’$®’
+I6Êäq ;Úè$Ϊôr>•-ˆ’Jæk`/7‘ÅGÁoý¾¨èÑ7ãè:&hä9>8nü™'ß¼=›îÀ­í“=•ŽlÛö·ºŒçïv=Îy™·ççÁuÎÛÑ!ã 3æö£0€áûf<Úpê"Úûþˆ­<út×ßßn Ëñ—%Y²}ÿ¿o‘‰§Ó™¤ŒäË««h”)ššQæpvhÚ§ÛÒDñí¦ÐY´}pƒ ^°‘GÖK¯wãä;·Ã·ŒD†óX~ììhiW ï'­hCÃèÁ¼&œÂj|àÖ¸bù¹Ò«"ÎuÐã_¾þÇ7_^Q¶.ãÜäBóÄÛÒzQFÎ^F®nl{e…¼Œ3ó?­°93]FŽáÅ@ íÐsÏ4 ˆè['{}íÿ¨ƒÙõ¨˜GaõiÝÛÚ
+Y‡Ö&NÓ•4wn¨}sÖ×`‚õ-ðÁz[hlØ%Ú‹Q1IôzB´„2mÓ ÜCl`[±©e‰Ì
+È¥ûôÐÔ`S´¨ÛÏœ¡«9¿·µ‹Y‰*‹ ØÏr·iÞ‘DaÚ
+C½ØǽÅpô\Ídk\C*ÂȺkÀ¥Yâ+¯oÂlÃgó…ïÃ:€ò0<ùÞóç=Gu[×Ó9”½qœ¾â¾t¼J*™‡±A9\¤’½³q„ì\•D°bÙ[êýHÁ˜9™I2J£zò^8S@J¤æ$5í¯„+øƒÒ^ˆWP >úb;Ÿ#é›$Nê¿pâ
+•úàn²Ð9b§\°>rt
+«}bM*8žï†z<Á…,° ¹%Íò¨¶OvÆÐ;;@&!ž}‘s¶| ºn†‹S¾)ÃüÐ8Ï/Þù¢u CÏj”r¢XÊH2<ɹñg&¥¤W΂¨Â&Ëå&a\#Ï"es Ô8n
+2™«å/TĆ€ï"1[YzFŸCs߆õÄUSÉÉ赈+{€³²¦Šp&Uå²DB¢X¤øi{QùQTaÃÇþ|„€·³ (© ©jŽö€2ªè37Àqo@Ƶ^©I¦¯#×ä°Iš[.q% €‹‡Ô&‰cIÓZÍ€³aâFÕ~< Ú‘
+NWiAP(y±æ¥ÓeÍ §gý銞s!™W¥p00‡K»‡¯bÃÀq@$ÃÉÖÏTQÅyº¬àù0‹
+È"ÇÙ¢T­R룊ú#[Ö‚nLq²lB~â¼å¥D©s‡T¸Ï’´ÆS\$µøŠf¿
+sê’Ïqk'ïÇù|`CÆ~©È01a<X‡"A`îûi¢ú,—4±ãî T-9I׻ΚyÊù&èù>VF9—ž‡ÙùL. ÝšõÓ¸
+ÿœ«W¶U~ÝDWÆäFcä—p8â–T ð0tF6¹DÅpÙfŠY~’
+ˆï‰S
+´k»Ð×.¥¬Ey&”Z:üîÞæ:Ð…F%º¦Ñ ~ò!%¿íÇÙ-̲8B~Õ@?ê°Ý°r¡æçÛL¢M3¬ŠÓy¨´¼O\ZÇ`Øß”¸.n–_Æ×Å|³¨/ Ë[ß±´`‡àz© >”a¸ À#Á6÷œšŸ]»«w'0d¹ ÑÞ†’┌<Ù%.éåny×Oè4ág#¸…+÷±»(.6ÁaƒOÙⶲ¦ô"i,»Ýˆæ‘ò³ hí!”O@¦%ÊÈkÊÛR-màØŠÿ_:z½çYžˆÝéJø”«¬DŒ5«¨¿ºçänéض›j.ч+g¯ÂÄ&Ó/ÛF–…;¸¿Ç<_›üâb´¨£<‹_ tLQ÷mïÃòö¹è³2
+ð5ŽuüÊ#É`ùâ=à­Ê6ru®›h½a}7µ¾I¾7W—0ÅÉ®/›VQÓüJÔ,T\–/ÞÁA6NRóRdK/—ѺŠÓª|$ø/áùùûendstream
+endobj
+494 0 obj
+3220
+endobj
+492 0 obj <<
+/Type /Page
+/Contents 493 0 R
+/Resources 491 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 383 0 R
+>> endobj
+490 0 obj <<
+/D [492 0 R /XYZ 72 786.278 null]
+>> endobj
+5 0 obj <<
+/D [492 0 R /XYZ 72 761.372 null]
+>> endobj
+9 0 obj <<
+/D [492 0 R /XYZ 72 739.61 null]
+>> endobj
+491 0 obj <<
+/Font << /F25 380 0 R /F37 380 0 R /F38 495 0 R /F27 394 0 R /F15 393 0 R /F39 496 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+501 0 obj <<
+/Length 502 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÝã¶Oö_Ø·È@¬I}ö©IÚC.¹‡d hŠ‚kÑkveÉ äÛÛKÿøΗdy­½m€´ÍÁ¢†CŠäÌüæƒVW üÔU¡¯Š2uQ^möŸ¨+þÝ]­o€Æœifâ,Å·g×#çÚdq™gÏñ«<6¹áy¿¸þäÅKc®TWIuu½%žëúoÑV¿þú“¿\Oò8ͲçWƒlélr•-Lþª]­µÖ‘­k?øŽÞ’hè˜:ÛöÛ.ìíا¢NF ;ÇŸ•=¬Ê4ú ÞÓ4VºŒîWºˆ>0 1=ै\ÿ/Ü"l¿š­Ðàé$FÖÙ7¶|{ËŒg[1Uœ%Zøl[/Ì¥ÇíºwƒkëåyÒ4®t!Œ´"¨NâÂ諵BÁVü‰
+Ë0¬ª?ãÀçæ(¼£ãâ8(‘€*™E —s,Ø•‡o¸2
+} n“©{;2ÊŽø…ãy3c+¡GýŸ4®BÅ&ýl‹ 5å,SEŒ¢&àŸëÛO¥Ç>É^Dã\¨· •“  È Oø<LXÉ•
+²›)ÕN26›$;±Î•-aœY¦$Úo<EDÀõéãà+ÖžsøL\h¡ׇ»õAn³ÈÝÜR4c21J\#F3—ºq8Éþz±i¶}Ád¬üÇRÉ2õÝ1lœp‚É©ÿTg¥þ_=õøÿHý2Pe\êRX
+F‹½m»0%[cô7«’ðeýì£üXîlÆHqKhÊÂh¨PvþÈÓš*zNìæÏÁr‰ÿkÉÊèkZ‹ÒO süªAmkí> Ö2‰U©ÎÄŠ½•) Õ9‘òæaØQUÂÑÙ=wÝȘôó™rƒ.åï
+LD*“)ÜA,Uá—N@c1åôÙŸâÌ&
+endobj
+502 0 obj
+3100
+endobj
+500 0 obj <<
+/Type /Page
+/Contents 501 0 R
+/Resources 499 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 383 0 R
+/Annots [ 503 0 R 504 0 R ]
+>> endobj
+503 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [347.484 707.644 366.878 717.341]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+504 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [411.12 707.644 422.029 717.341]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+498 0 obj <<
+/D [500 0 R /XYZ 72 786.278 null]
+>> endobj
+13 0 obj <<
+/D [500 0 R /XYZ 72 310.83 null]
+>> endobj
+499 0 obj <<
+/Font << /F33 497 0 R /F15 393 0 R /F39 496 0 R /F27 394 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+508 0 obj <<
+/Length 509 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕYKsܸ¾où Ê)T•‰!@ u’×OÙëlÊÖn9µ»Ì3ƒˆCNø°$W~|ºÑàˆ#Q–+·-l
+nr§QÜËÆmçÝPßvKfËaN¡©¾‡—gd¿~ø¼ÿ }f}>¯ì `ÖŒ#í>¦ÏÜËE{»>I„ÐÅù¶ýº–¬âÒ´»®7eÏʹ´ÀµhKªõçO q§WJ¥±P ŸB¼÷¼umÓwÃàB½7WÃÆ`J¿FÀ2HMO¤’ó%[vå7_›óU³ÛP2°¦ÝÌ:gZ¨É­ép(0]Á£nØnO“릥Á›ü2w^°,ï
+¹ŠÖC:QƒN¾#õ=4Ç4¾9˜4ÇBIƒ’o$¹oÇ~6‰}DÉR©¦±¹5õ•·ª¢ü ¿Æ÷HØÚŸ&϶;²¤LQø"WC<¥]Î3jˆ‘ÂÞ«¹uË¡oÚp4µ "ÓQÍ¿ Ü °#¦ fÎ
+¬¡XÒhNQ0u
+l…¼fô„HXVdA Ã"r¥Å"4Í©üƒßëÖ…ú.Õ¡nB2Xµ5èe2Uˆ<:2±(7Dè‰y}Z¹Kl%ìç>>®»pÙõÖQ3Îõhx®›¡öHƒ|Ñíñ—…b3=ƒÞ¯%”¹ÖﱡŸus&øj d–ÆTjá8‹®tIDm|å´ÐÂh=Ô+T«©\š&Q8­ßúfS§ÑgΉ„RšØjÔ ò/Ô@3ÐüÎPWôPŠi
+A`ìs|6Þ†,Qo:¢"y°ÅÅÌvè¦ð¡ÆþP!ïF&TgÓIê‰\šÞ,Mæð• ³T7«+±ê–h«
+ü›>p¢‚~¬œ‰â‚7è¾n‡.:
+ð€”¶›‰úãu³©n÷Û¹W(¨a‹Ió‘tÖ>hëñ Vgú$NK”D3Ñ;TÖGï¿Ñf§s=¼|¼‡œ#lîùœ/½×à|×Ë› oácÒ‡Ò’Ó²
+ñ¸_®}£t~»k† ë~æºÙKF%¹Ñ‚°
+vœ-ÝPw®· ŠI|‚Yì‡åâ'W7 ¸r·
+¢ÒžF$€Û}ªcT4’›=õšåXe Àt Ž/µ~êULÉ™>õ.¦îŸ# ÝÊ"<dÿL¶Cendstream
+endobj
+509 0 obj
+2582
+endobj
+507 0 obj <<
+/Type /Page
+/Contents 508 0 R
+/Resources 506 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 383 0 R
+/Annots [ 511 0 R ]
+>> endobj
+511 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [131.878 261.92 137.332 272.829]
+/Subtype /Link
+/A << /S /GoTo /D (section.3) >>
+>> endobj
+505 0 obj <<
+/D [507 0 R /XYZ 72 786.278 null]
+>> endobj
+17 0 obj <<
+/D [507 0 R /XYZ 72 515.97 null]
+>> endobj
+21 0 obj <<
+/D [507 0 R /XYZ 72 357.77 null]
+>> endobj
+506 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F20 510 0 R /F37 380 0 R /F38 495 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+520 0 obj <<
+/Length 521 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ[ë¶~Oú}‰ sÅ›Dõ­)rkÒ6H¶@Š¦(´¶v-¬,’|výï;Ã!)ɦwOŠ4Ákš ‡œÛ7Có›þøM.nr“1‘››Íþ~CO7~ô Ì¥Ò’i…ßÞ \{ʵÔÌdé?»ûäö ¡o¸bRe7w–önû¯D¬Öœ •|YcÝ>®Ö2WÉcÙÕvõÜ~!óÎY¡5½¶ŠåšÓËŒ»×?;ÖÍÞ‡ Dòu;ŒeÓ8†")Û-tò}µïVR$ïÃZã®rë˜Ù:"KY.µräM}‘F‘.Ñú;d\nV’'O«L&å£ãÌaã)+ÒßY‹‚3U(¤LÃ'¾û§„QEÒ=à§IÞ¯„Iª~¨»–&R&Ö÷«µÈ“j,q“ZN’‹|ÆŸƒP*ÍœPåqì6]ûDvxî…?€àÀýi¥3+¸§hõãPmifìhxþ”rõxì-iîNžÜ£&h´spz}ÙŸVF',"²P†eF8Qê}ù=8š/R}³æ`_šhRkÛ‘2›®}¬zÇÃÁžX‡¶ÄVkåÉ+#“c’õû®¯ð$ ¢½‹x®Ç–j€‰”«ƒj ¥¿üÛ?"[’º`Zx-ÀþÇ®kbJPŒçžÌïÆ7¬÷Ðõøì=•,Oí]–|_¶å#I-¥?ãõ€›Î’jS£‚6ø7xü=ùž±Bf >_UV‰@f
+®Ž7Öνgqj ›H¤t!8„‡ºœ{—G¯)4 »Ð…°"ü@ÁâÈà ƒLÄž9ÜGí5˜ëPÞ7ÕÚI{y
+(Úû:ŵó˜ù\óK†´Ó8Ã~KØ™p@ø! Aí!>nT4ÑFÆ…àq÷ÄÄ)3ï}¯™!ä ÎŒZFQg}™°‰§¯<éL9 À´³(Ê%
+2BDkµ3±îé•°•óà‹DJù!Ö‰ÑH JŒT§ÖwåHëY<3[Ê­¥%`œs‹Û”­ËÌd5Sš£ÛÛYîp€ØÔ÷¤Ù“§<ñúsaæëvÓõ˜Àà”RÉwMUzÝõÕñ ÂO©NÏ Øœ ë°lÆ1SPŽO!¡øÑ7¯æ&qΣÅõìtHHh
+uÇY첈 qˆ@uÙÐ íÜ,ñ4ÆBB™E40\ðýóŽÐ¤ÁýZà9}ª¤z94õ¦­TF€™D°­†šÜÕø(ƒlg1ü"T9Ž@o
+ÓËCµúá)Ô—
+úºõ!ÓCôó?=å±FòÃCß=öe̪¸âP²z«zylN‡]̬òЪ¦(›Áù7ém^@À…á$ªÝÓ¶ª¶N\Øð%‚U©bJ
+i`®ËµÚ;ó¶]‰"S=)s¤S®T^¹àÃS} ´ëÑ /߃_SàµòOâ1}$ßQ¿¨ïÜ\ç ëB1#ôÅÉ/z Æ9àÿ4ôèàÜäO_Ü©â¬mo™ÐÞ™"Oþ‰•uwüÔ“Cܼ‡’ã„ß„ _ô¶çà‘¢|H[é!?ô4ú5<•ìÌcêYOÒ!;W™L²ij½á$"AütTë½v[ö[z¹é¬(kXQª4O¾ê0ƒ=[Ç}¿²@€ PjZ ³–­å¾tØŸ„Œ‡_g„¥ÅÅHkóº«3çÉØmŽÌWØÞUO#+GI6<  E~bŸGÊÍè‰Á ©Âc”·µIDØ]ì‰Èâä‰Ø±¨÷•õ=‘üйM¹©Â
+îmÂ(—›˜Â"øá\üe "Éš}™óÐ5 !ÂàÌá”mźk3X
+bS¦ÜûX׃¥¡•c áè=¤ŒIèôß>ÄRXÊd€ûÍ•tέäT‹(™-€åà»’Ç¡$v S`n,ÄèT®ù“4å8ÚH§s‹?ÁÇT‘:\ˆ#à¸*Q §=~£ØÒ5دÂi‚Oƒcî_¥EòIJ½¸7xS¬Œ‡ÖákZ…boò ÷ñsM9Ÿ,)²V0,+–5¸_ô­¦•É((ÈA¾½ˆ÷† ÛƒœóŒI-^‘¼
+õs¯ïÞ[ðÐ×Ø0*žÝFôoU}Ï»:œ¤”¡¼Ÿuü\—:²^ØÀíqèo›nS6·ñ†I7|—(Ü-‡’Uò_W²Š\ëˆÕʽi op¦$èhšoíâü®k¶–DxìxQ°k¨-åyöz‰æÃP¾â¯¶Øñ^\r‹‡Í…r~•É‡ØéžPÿε½À–€|fáBæØÓ¡z }]HÐp`»5HREÕ?XT‰SÇv08÷%=> ½ -7ٵ͉˜ÎŒýúp¶Ö¼9ÁªOSÒÆ»a¨ï›jqO4ëÕøk Ì917ƒóÉ
+Á±Š!¸<µ]z׃=*^>ìßJ3¡CîošË½•‡CS‡Î™¿xŠ€g|~1k=)ïú  L^Í øÛì®gØoQo«Àß0©7Ûëùù2BLÙ]Yà¿×hÈ<endstream
+endobj
+521 0 obj
+3242
+endobj
+519 0 obj <<
+/Type /Page
+/Contents 520 0 R
+/Resources 518 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 524 0 R
+/Annots [ 522 0 R ]
+>> endobj
+522 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [462.484 526.401 476.423 537.31]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.2) >>
+>> endobj
+517 0 obj <<
+/D [519 0 R /XYZ 72 786.278 null]
+>> endobj
+25 0 obj <<
+/D [519 0 R /XYZ 72 761.372 null]
+>> endobj
+29 0 obj <<
+/D [519 0 R /XYZ 72 736.82 null]
+>> endobj
+513 0 obj <<
+/D [519 0 R /XYZ 72 659.937 null]
+>> endobj
+514 0 obj <<
+/D [519 0 R /XYZ 72 635.3 null]
+>> endobj
+515 0 obj <<
+/D [519 0 R /XYZ 72 463.541 null]
+>> endobj
+516 0 obj <<
+/D [519 0 R /XYZ 72 427.552 null]
+>> endobj
+518 0 obj <<
+/Font << /F25 380 0 R /F37 380 0 R /F38 495 0 R /F15 393 0 R /F27 394 0 R /F28 523 0 R /F30 512 0 R /F33 497 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+528 0 obj <<
+/Length 529 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZK䶾;‡ü…I.Ñ
+\Ôñ\ö®kxÑQÝRçxpÔXmPF'xdQd*ø+ îèùp ƒOó Ï7 b%²4gŠóØ•]»ßàÔ€BÈ°V -q*´T7;‰ú•ó)Ù$*úºxh¶Ö31œHØqUŒìgk5˜PJ&û)¶qåöŹ·gLò £»óÐß5]Y4wáèÝÆÔ¹‰¶óÔòv§¥‰Š¶Â†Š
+z ú¾Ç¦{(lëÎç§XšÇs_Œu×b§Œ°gs¿;%aA‡–gäõMàA×[JV%õB+tŽŠ0ŒEÓ „uî¥Ù;q»K”‰¾ëFGDã¡Ãxøð9¿¹œfm;¦ïöÔQ´¬2ørh }3’Ä™5¿ëù;0•AåëèIv GƒϧÐOxxmÆ΢:Öm=ŒÀ[×óÏ3j»²Þ?ñ
+á«S1†5õ46< £;þ‡µŒîý¢§%KÒï$^ dß‘ý੘œuÁdÑ«×ßRƒä†ùù'wM³ìͦÜp:I.lž-ΆôµF"×–?†ªnW¬€`L£ìëÒ1ÍÐ ëá“ÆAVa/E4úX'«#x®&ʵ†vJ*OR•¬4_÷ü‰®hÀUOÔé>€=ÏFG÷‡0Wx¢‘ìÔ»_ý¡ú3ä‰ö}w¤Våç™{.A¯¿Úë¯úçi´!U—¡hÎh—g"Sù§ìL‚]¶ˆÏ•-MEšZu冦)%”² ?ƒsOÑÇ$}°“¬+YE“Èè=z!"H‚¯ô“]*•Iâ…¯ Ʊˆãµ&ön¨+´5¥•÷ýƒÃ؇Â%ßÒÝÂ?ÒôߨU2­rôÉ> ¢kžzÓ™Y~Zg|1G¤ÈÉLtïyLDœ žÍü}5ußÌ?Þî¤#Å ^š½Œ†>âNê‰ÿ¼±º6ƒ÷‰fW‘á—ç#«qTÿ¹¤ãT.½ÊÏ oQýZoÅ–Îd
+÷|ȳ#÷Ð[P‡ŒZç*BQ€ ã\äh3sxì‹Ó¡.2¼ÙS‹·o°½¥«Ðz
+^Ævnˆ v&ÁÈP"ùoŠ-%±åb#©eR“7sïKbS$¶ä#ÄF4»¡;÷%íßFˆ@üæÈiêEÿÓ¦'2fÒŸ€'úýmb ΡAžé…woµ*õÑ0÷.z¼›‡gïŽ ÞŠ”Z‹\D¤LdÂD%ˆ%@ÄçžÞ`;  zK'€• ­àKQ"W‡š÷QØÁµX6‰7€žL
+ˆå"È¿`2&H@Ȥ½‡21|ۨѰ‚4ç‘d"·Š÷ø-È_7[iˆ…’!øîÏ=úDœ£û k2@‘›˜Ù÷,ý£ƒÞ-“ÉE*CfU6®h·$
+¨S*xXÊWÏ›Iõ….P–‘Apµ•W›µ‘M:9{Ì«jG
+º2@¥{L%±×}(Ž§Æq7&(Ø;tG×µ~¸œföuÀY¼¯á젉Ы¤^/U߉兊fo×}íXϳT$ù:°+R&æJŽÎ£üµÑ
+qÇúñÀŠk¤ ,RÝÔyð¬4sÕ ÚÄÝ£k;ô‡D{<AxîéÍWP’,g
+<åžHñùV(Éî¾xýæÕ×o· àòÖæ¥YÞ|¹Å‡…û%”¬¦ý›/¯±bây"±é
+¥;|#<ÐÈâš¾ ½T!è[ó²~,Ƴ¯ü"zl#‹]€EžïU±l*zPb¢é
+ĉùF]žÁoPÊ¿çÝl\b¥A®"þˆ_müˆõ´/^ë݆5å\ùæI~ndrÒ «/tòcÅá·¢/J§°«;
+endobj
+529 0 obj
+3398
+endobj
+527 0 obj <<
+/Type /Page
+/Contents 528 0 R
+/Resources 526 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 524 0 R
+>> endobj
+525 0 obj <<
+/D [527 0 R /XYZ 72 786.278 null]
+>> endobj
+33 0 obj <<
+/D [527 0 R /XYZ 72 458.656 null]
+>> endobj
+37 0 obj <<
+/D [527 0 R /XYZ 72 313.702 null]
+>> endobj
+41 0 obj <<
+/D [527 0 R /XYZ 72 292.809 null]
+>> endobj
+526 0 obj <<
+/Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F39 496 0 R /F28 523 0 R /F30 512 0 R /F37 380 0 R /F38 495 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+540 0 obj <<
+/Length 541 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[ܶ~ÏKÿ¼Eveñ&Qúà$Þ`Ç)РТ-íŒvGˆæRIcgûë{nÔe¤õبS´@°ÀŠ"ÈCžÃï|<µJàO­2½Ê|ëֻ̯/ÔŠÿ~^…ÒwPÇ’Ö™ØY|» x$¯‹}êPþ«»/^Þ(·RIœ'ùêîdï6‹n÷/®¶Ñ¡Ù” MÔ¸ª+ëúÅ?îþøòFg£/3ûÜÉ窫{štot¬2%Bï·eSJŸÛ²¥¢‹þž([—-×A †ÁµÖEWn¸¦Ú÷ŸrA>|j»rw…UiTpËú°ÇÆÇSStÕ¾Ó"ΧöTÔõ*¼ºVI'i
+\¯œTݨPšñ"¤itêdQÉ•mÙaÁG§#>´‚®O,ÉúÔ©-›øŵ³6z…í´W;8<pMµ¯ºª¨«mS\—´e‰~ñú®7ªö.ÎÛë
+6ÅjlüyJß}ÀÎ.6ç}BW¹É/;ˆå"ö|ÿ¬‹Ç™òVÅÆpŸ¦´Ng:³Ì³:?ß,¬:3¸nS4O¼ð]S‘3¢ÀÄ8Ø@^MdäŸ œäø6EWp©B‹'>Ú—å»TITív如ê'–94ü<’Ú¶ºM5ˆ¡Y“Fw[æáPÃÐ0òûjÿÈÝkt +~ÆV‘>ÖÅZŠ´}h@Øà¿?_ÏaŽ7ƒ»ä °&ØòùµVñù8>¶Þ]v5[g/õNk¢³t°ŸÎl°ŸÎxïb{S,969V½{á
+àÓó%5™üøP¼Ð>Nûµœyè
+!R^'Õ¿ª“ÞÂâYؤ´¶X¸àyUÿ‘~g ¶f"[þRµ]{…Ž” ƒ³`Y¦"÷#G ½ü¼GG|
+º¢çÌ”…š `qŽ¿×±€*¸ë6,PSk—MœxøÆ‚_‰WîË l€,SDB¬Õ€ª-ÉØhêYE›&›n=Ój†•ÈY ¨í1ÂÚ$Lª‹ÈÃQú¢µ€')æqL–¡ù$“‰ ë@Ûº†ÉÏmé’8±½3“Ë7ëC‚œ6Vä§mbƒ ш/[.o;©ÝT lçÌÈ[Ø(שËÅ×\o?;Q³>ÞãJ–lEm8Ž•Ô˜Âzw\O«HîdHaJ ©Ÿ,Äc}¸/°/ãæÈ`M¯Âƪ<VþCÕ㲫[߯PË11øœIÙrfÄÒð¥7#ú×9Êó8ÑHr§6{Ž’ñÉËû­‹Åy6‰u3¶QÁ
+~Ì1=ÍLM…69Ö´§õx o¯„ý`uY€Ã[ "-ĬZëòA>/ä¹)ŠS݉ ²ÞÅØX›ùqX8ßBq¦³)ÃÃAö¢uïÁ k¬7Y’‡C
+ˆrvùÜkUîň; Êö²ã3¥…bÚfÅ© y#Ï‚"öØŸV¢âûªƒIt,NKƒbm+g’Š71C¶³±ÎÏ0à!µÞñáíö›vÊ §ÍrÚžs2còXÃ
+çRõy8™ùU9Ù«¶=íd1=¹&<ækÚï4à”€í‰{Ž‡e:Ì  Ca´ùdNžû)°rþ·Â ©•»¦óÝ»pŒ³`‚mSŠ;Áù‹ëVBçÀ«óƒÁ˜›‡#Á±hZ> ÑÎ PÓ”uÉÄjøí˜ý®'ýš”†ÂÎÖxæÜüwؼýU=çÇ–Ý&7b´\G!ÎA±Ʊ®p!h}sÃË­òÅÒ *'¨+áÐAt´ám›r9ÞåfÌs¸‚
+}.¹Éºl[æÜJ`Ója|å~-¯èœHþJvD¢ÎðzGþ{ ‘«?z®IŒK»êqè:¼RNƒ‹÷ã>0EBdN³ãBûöÔˆž¦?O§2R36œQ 'Ù)iÓ”bŒOLôêæ{–ì=6•
+™ú`M¨Ûœš¾—iâ†ÀÇI4AÏsݧû 𠀑
+¼Ãä” ÁºQ×HºQæý6
+5D.Îûr¨MÏÎΧ”b]HªÅ1ÏJßCücæÏñÍ—j;a¢oE÷[òChGú,Ú8æ×G¡®E³àî2? /E<7•ØHÂiÉBPJBêGØJØì9oT.µ!q=š=ÝŒá³^°É¾Ç(É{
+:éÙXJób®§£³qèöŒ§e}
+”$J
+è\šM“vtŪD±D‘8Q35IòˆšD3ˆ¢Ì«ÍaÈÇ@à ҭ@Ïß—]S­¹<à+æ¸ß¸Vð•ÔW„žz|Åúßðõ“ðUgºÇW,Ëð:S‚¯š²×Œ¯0ï¶#Qn¿€P(ÜÛåû¹`Ë¡°6ÌË=B‘Vì¤7¹ÀÈÈ|¹„L!+’ƒVúÿ
+˜ðÖ€·9æp`·˜ðŒü0!¦çáPr÷×?½VKÞm|l¼AŽËЄ%‚&ç’ÎÇЄ¯œ%y·‘ÎyßÛš…ràÞx¤9ãwÆ'£L.¼üh‚—åshº…Øò
+CÈ 9—~ ÅQzÈ'#Pr^@ j(Ñ` JÐù
+é†7C-Ÿ…Ú~DùíL"¿†ÓK¿þ7tô34© ä'GWLè"'/w¦˜õâ±(oh u•;Ê;óBša!R} ~uuÿ’R?ðWµëx;_zg5º’tôk´'¾‰BGå]dG]|iÊ3uúßHÚ°R–mÃ=2Ÿõaw¬øÎE…ßJB©zà/÷%f¯ñ—ÞõÙ°‘Y̽…ø‰¿.è“ü Ø^ʿŃ1 Ta’æŠ*ønée2íQК ¾FqÖ&®ø„¬aJªç ðyX>ÅÀC§£{? cË;I÷†t¢ÕãtâÒÉÜûå1±<¯ð×4rÅ"窱ŠOÁPè_ät%AVJUd>âÏ}ôãÛÛ¿pGüû]„KŸºÁ4\ÙtE%`$©ÿAV*$»±îÏÜ ¾äƒR¤ÇsÛh¤®ØÔ$‘øõĕŤm¹«hN“nz7Ór€¿ÆB`¹Hî´¶qr9žÏ~Ý¢óØæþy~÷o’ƒ/endstream
+endobj
+541 0 obj
+3459
+endobj
+539 0 obj <<
+/Type /Page
+/Contents 540 0 R
+/Resources 538 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 524 0 R
+/Annots [ 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R ]
+>> endobj
+542 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [357.704 734.136 371.643 745.045]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3) >>
+>> endobj
+543 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [416.972 734.136 427.881 745.045]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3) >>
+>> endobj
+544 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [398.297 621.663 403.03 633.182]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.1) >>
+>> endobj
+545 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [463.089 454.992 467.821 466.209]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.2) >>
+>> endobj
+546 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [239.339 314.716 244.071 326.539]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.3) >>
+>> endobj
+537 0 obj <<
+/D [539 0 R /XYZ 72 786.278 null]
+>> endobj
+530 0 obj <<
+/D [539 0 R /XYZ 72 716.71 null]
+>> endobj
+531 0 obj <<
+/D [539 0 R /XYZ 72 680.645 null]
+>> endobj
+533 0 obj <<
+/D [539 0 R /XYZ 72 551.858 null]
+>> endobj
+534 0 obj <<
+/D [539 0 R /XYZ 72 513.672 null]
+>> endobj
+45 0 obj <<
+/D [539 0 R /XYZ 72 426.178 null]
+>> endobj
+532 0 obj <<
+/D [539 0 R /XYZ 88.587 132.837 null]
+>> endobj
+535 0 obj <<
+/D [539 0 R /XYZ 88.587 110.919 null]
+>> endobj
+536 0 obj <<
+/D [539 0 R /XYZ 88.587 99.96 null]
+>> endobj
+538 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F28 523 0 R /F26 391 0 R /F33 497 0 R /F29 547 0 R /F40 548 0 R /F43 549 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+553 0 obj <<
+/Length 554 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕY_o9ïË}… ÷â
+»®Ä©)Ãa€@¸ž(i¨þd€Q`Ô
+K[u\º³ØÔÔi
+ sÆ;´Ôž
+îŽBoç œ…ò=4
+§…aJV’¼“M‚;Ž³ÎZ¢8ï>–x‘à´ÃÎâùpëÅÎÓ“·ÇÞÊ,KMÛ¶4‚Ž
+óPqZSnDX˜ C×)*N3qAµLDvž£É.ë†Ì¸Æ̜Πó~Ö¤àsXÀ}åÒ…ö"Ìö˜j‰—°ÑMÃg–åVø%»ÔÏqJ©_.Éö¡¥[fž9›LbDCOÁωs2Ë0'SÅlY®¶-èÔpÕƒíoûÚ%Ù†No¡×ÚÆ%©Ø÷.áæ–îÛnnUïyç€v䃅X5öjNrÏVÒË%ƾ</(atáO;ѪSK˜F"M‡I¶^[zo(ŸºÃB+±“ðìƒPm[Ý|¡ š°Ã¹Â¨¶4‚±™÷tï”ð¸·H°Ù¢<9}YÖ퓧Ÿƒ£ç\[P cî…þ5ëÔ&i§vô»[íƒh‚Yu[S³‘e½eŸÎ mÂésBÅh| IGÝ¾ß ‚ ŸÁ¦€]ë™3íRãbÌÚÏÅjÁÁ™
+í=›yÄNb%T÷ Cš1S‘’so+˜È{ÜÐsr7Ò’6ÿFqÜFÚ£ˆ£:I"[âPÓ$8‰Æ`žëÆJ®~)höÞ0½wá·sŒB‘Ê-膬ùXú¹zÌeK%E.³?"˜½ì9çOp籊é>Þ˜ÖÒŸ±Ûãš—ÏynŠwïM3xî†ô 8Æ}štö ƒ~ %Í!W>©Þ—+NÉOãdC×8ö ¦éWluIËc.– úvu&ffÄݧHYƒW\ÝsCý{~ ^Ãò¹šø¡„‡³š–SÒ,šð–rVce*Ð]žû¢“•²©uq?æBc!3ïc]Ñk¨FCÎhàG‰g|!_Èë=ëúýçO7ÓUh¨›Ã£F›†‚èÿËdÿJfGåìùVSCÊéMZhS®‡Q;VÂûÂ]û’Ar²1-/°5uøãjLwT[@öïGÌ´‹n~ ~Ær¸òÁ›.ȳó}oàÕíl{Ø5õý ñõ›oð±yîToîÞ~~÷áîqY/u9ÑÊa9Çx5òž¿¾ýôÔ*½Þ^‰ÇS·ÇÖ{ë´E«ŸL}¯)\“‘-a«»t Ó_o½d¢_‹¦®¶¦ÿ‡¤9[)ôÂÃuXú À g>µ˜ËÞüûíç»Û?Œý,¢ø ´œDýÃŽÙ¸÷^XˆW#LÀF‰ñI(
+êÁI¸s‰Hr/·]¶›‘}”‚žÏ]Y†ÑÍ 'I0À|ÛÕ˜Nœ
+ðú»xŸf=îØZèÇY÷nÑ’³É Õ{
++xk]uòRå
+8ù‘¬(WÞ|Ûip¹uåŠá䮶ŲsÚŽR‘9LºàÉnÿD3¡ru6"ª|‰÷˜Vx^ñœQvNB!z9©ÀëäÏUÕdx`ÏÕÕdpz„BžÕu»ßIÿ endstream
+endobj
+554 0 obj
+2590
+endobj
+552 0 obj <<
+/Type /Page
+/Contents 553 0 R
+/Resources 551 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 524 0 R
+>> endobj
+550 0 obj <<
+/D [552 0 R /XYZ 72 786.278 null]
+>> endobj
+551 0 obj <<
+/Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F39 496 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+558 0 obj <<
+/Length 559 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕYIsܸ¾;‡ü•sa»L97§<ªÑÌ$‡XI¹*Îj¢ÕŒ¹t¸HV~}Þpi±eÏR5Õ%ëððÞ÷ˆ«~âJË+&ÔéÕ¾~%®ø÷ùÊ•~†6«(P1Ö¾2Ðw#ýHi¢püŸo_}w-“+Y˜]ÝhìmñOOQí|!”ðnfçGiä]ï²Äk›]$½[ÞçC~—÷Ô{×eevÿºýé»k¡V4}*SDùöXö0\¥3 h¸P·-}
+E\;¬>í|©½¶òf'SZÚsû퇼ÆW†²6ÁÎW2ôn¸eŸW-í„O"Šp ™1©Ì+æc`?-þš+w°vê™}>RwNdêü3îÆôxd<¤@þftHGNG‘W˜}•w¦ÀšôʿˆØ⎋åÏM‹d®­ýmUÞuy÷´K•Õ±ðþl£9´Ÿî- TÉ<#ï{ ÛÙ—ùPÂÎ芢lqEQ¢¥{ù…ÙÁµã–wJzTÁ­Çžk°Ó£ÅôDHÏþªp'±±r„qÁ°ë†n†›÷é Ž<IM˜z‹M¨½±/›{.–Í¡íj>%4(ïе5gnã æv€ÌQV¸¡Ÿ'òˆþdo½Ä±û‰lñÀ_G-E—·m©`Ί€©žH>|{ˆ•”t†¶ÇÞ†D?Š½Üèþ"ó%ßÜÖ•é¿G‚¯~¸Td/­¾
+" ¢$b¬ Ý_Ý¢Óý?žÓWA¬ÔׇŠâg ÀÄ)ñÚd&=ŸÈÛ·¬ÔyÙôÜ‘ó‡ï íKâ$Ü/Y³Ì½é¸a¾¬Ã N&æaˆ5þ¿#qÓð&qÀBU±yVUìDUer(XZOÈXö\ûI ð*{¾@¤‚_ÜI·Ô Î(€cYö ‚õAQvj
+X\"ú\'bu’:l 4Làþ¾­ÉF™/ƒiúÉÀ­d ì›NõDÐO”›>ËØÁÎ;ô<Ðl‚Û0)éj½, ²4½¸ùÕZ«Íû'ðN˜3díÃxæ;VȾC§õ3¬­
+Z‡±k˜³åpÜ1'K;òíVFnw¸às2R™Ö3•»-*JéZøn¾
+
+X¢
+¹å¦Àì‰ñÅÌ2¾<sæЦ<g6íþè| ™,aø,’’©ÊæñTrN`ŠM(ÈdÊ™*—lMVÉÖd‘D?÷·ÝÛˆ•.¸ÍLŽ“L»¤¾àjÆ!`ðŸO'#¶ý€µ¯ióLqÝkÛ8e–6ýÄï~lVÈ,Ð3 nÌÉ3OÚ(&IP,öîÁm •ì… ô¸úxüŽ.ºÒÏ/„|ñV<_Ž'/S¢ÇRíݸË3öå0N×îž>R¨ÉZ³D,*˼Æç’Ò÷ÐÊCÉx[>åü™„ƒ*MV—±´@záêj&°'» ;ËÚ«ZZJ³{”6åÌmÇö/ÂÐ9ï9\Ô“V õ©0ã>êq#ežrJ¨X2lÛí¢æ7);öÈIñ3 ìíXÙ@w¿(õ–;[Ìñ9¦ìpc¤5”?,­“Ïxrñ®œÞŸ
+s0£g¿ã’PÆq CN€„YúëeRÑ3šøÜÙoËgJ¤!R±€`)ÊÄ×2'RŠ ¢”⋹!Î’à¿HùBnæ ­qœendstream
+endobj
+559 0 obj
+2887
+endobj
+557 0 obj <<
+/Type /Page
+/Contents 558 0 R
+/Resources 556 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 524 0 R
+/Annots [ 560 0 R 561 0 R ]
+>> endobj
+560 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [246.132 134.539 251.586 144.236]
+/Subtype /Link
+/A << /S /GoTo /D (section.4) >>
+>> endobj
+561 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [395.787 107.44 409.726 117.137]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3) >>
+>> endobj
+555 0 obj <<
+/D [557 0 R /XYZ 72 786.278 null]
+>> endobj
+49 0 obj <<
+/D [557 0 R /XYZ 72 761.372 null]
+>> endobj
+53 0 obj <<
+/D [557 0 R /XYZ 72 195.909 null]
+>> endobj
+556 0 obj <<
+/Font << /F26 391 0 R /F15 393 0 R /F39 496 0 R /F33 497 0 R /F27 394 0 R /F43 549 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+565 0 obj <<
+/Length 566 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚXmoÛ6þÞý #û¢´#R¢%!Í€¶K2¯^R,î€aÙ¦m®’hè%i6ô¿ïŽ/¶”*iQør:Þ=÷Ü#&tÀÅl'cÂâd´(žÑ‘ùù8r£·°f,#áì+†¾³ôCN’1Gû׳gÇça<¢”¤œf+m;[þå1ú”²È{uè‡qäýq˜Fž¨îqƽkYlsavÞUj]eE!Ë5.„ÞÙ§Lïþ=ûõøœò H¤Æ»ÏÂS®Ï˜mÀgÌ[©<W‡,õî´\Z¨CŸ%ÞÒZÈŸÔËÌôööt08«m08ÞvƒÁ7„ F歹YÜ(tpgeÛÚ†ÌâNÈ-‰ã±…¥¡¹œ$Æ2ä‚ õ&9@@¸±'J|ÊD$¢läS,Gªß¨ÚŒ8DXšgfŸ¯®ßL4¿¤•åà> ˜öŽR¿bæá­\Š¥Ý±>šÍPb,JIG6f S=[t¡±µóëvn*#+±hÖ@ǽڟ¥KY7•œ·T6q–’)í%žÕ‘Á~ÂÒâ64JÁ³ð|¯d¢eƒ™Xó¶n k1 (Š™,T±•9ↆH|*°áÜûò4f+U™cœõ*«—rY~ÔÄ´;w²Ù˜[‘Ÿ0¡Ѻ
+Õ…èzº˜þùî{Ò:¿ßnNÚ'O‚q ] k¥ÚÊ Dy++U½ßX•Å›Œ6ø7‚Ý.4ÌJ®Í¥ÉB²’>
+1쳡ã/CîC?AÁÈrù¯p_¨ÝÇHk*´Êâ.WÿªR¶Vj±h«š˜É¥M6Wë}!î¤cìÜÜ\hlz´“ÃZ”¢2úÑÉÓïZBº0Kü…ä1‰©œãìòêfzuq>™ža槧—ï§SáoŸÊ³WÛ
+ˆºÂ÷¡;!5[žƒ:V‡uº«/ZexÝû@èìs¤{)× â>ÝÛøÑ|~¢\çtq+¯AÃ]“•ieÝæã0¶õµ‹Ø»ÎSõÀÞº‹Ôì`&êæÀz³10n+½µŒx_[_oEU‚3»<Ó]d[lûͦL÷¶pg„FÏvWÿž<íªá"î¤ãjªÚæq^9¨jß9ò48±£—À° Ñܔꡮ-ñ¨ÛñâIré€NM‹^k8;§8¢i í$xð„Wßžý~9¹¼8r·çè}2¬
+?´xþþȵ~'ßäÊÕÓý©Ñ‹U%¿\Ó# ‡Ô‹»0µSÛÀ Ö¾,:9tÌ??¼€7ÎÆúoϯükƒ1JB:î\
+endobj
+566 0 obj
+1670
+endobj
+564 0 obj <<
+/Type /Page
+/Contents 565 0 R
+/Resources 563 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 524 0 R
+>> endobj
+562 0 obj <<
+/D [564 0 R /XYZ 72 786.278 null]
+>> endobj
+57 0 obj <<
+/D [564 0 R /XYZ 72 761.372 null]
+>> endobj
+563 0 obj <<
+/Font << /F37 380 0 R /F15 393 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+570 0 obj <<
+/Length 571 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ…TKÜ ¾Ï¯È‘H  !Io]µ#õuêH=´=Ð<&h3aD`Gý÷µvšÕ*ŒýÙþü ,+ácY󦕔7mÖŸv,‹ß]öOú ºˆ¬jAë
+o¯
+Ùu”WüµwË9£0ÆøÀ_~°L<Oħœ×/ÿþYkendstream
+endobj
+571 0 obj
+536
+endobj
+569 0 obj <<
+/Type /Page
+/Contents 570 0 R
+/Resources 568 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 572 0 R
+>> endobj
+567 0 obj <<
+/D [569 0 R /XYZ 72 786.278 null]
+>> endobj
+568 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+576 0 obj <<
+/Length 577 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÍW[KÃ0~߯ȣw\²¤k…¾ˆÔׂDdÚ ‡Î‰Æüõv½ž¦ ½lS[h›Óäû’“/ç$œ £›³±`c×1vÙó¢ÇYr¿²ìë6²%5¥’ÛRMÅT.xžÃ#®£ìõí
+¤R ÕYÐ;¹cƇà =Ìâ*Axt>YMfËÏÅduÚ(¡Žþø4_ùÃ㢸YM}^”×ËÏðkþÙœÂø1 £rÿ!¸‰€|;L/&¸zÛ|¼\¿Ï–)þ‹ÏÝ´ÙÚ—2ýŒš‡ÓðΗ®°tAÒ´Ëb%p*FÛ"DWöÄ®hiç0ùƒÙ» Úá  ¿‡ÿ
+endobj
+577 0 obj
+552
+endobj
+575 0 obj <<
+/Type /Page
+/Contents 576 0 R
+/Resources 574 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 572 0 R
+>> endobj
+573 0 obj <<
+/D [575 0 R /XYZ 72 786.278 null]
+>> endobj
+574 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+581 0 obj <<
+/Length 582 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÍZéë¶ïçhÿԢό(’:ZäC®×lÓ#À[ Ú¢ÐÚ´Wˆ,¹’¼G?¾sQ’×Ú}¯ ‚ ¬xŒÈápŽßŒ¬W1üéU–¬²<UI–¯6‡ôŠÿ¾]…Ö×0Æ”Öå,öÞC¸”kãTž:¤ÿìæ£ß&n¥­26]ÝìˆöfûÏÈ\­µNltsç¯Ö&K£oºvß•‡«ßüéã·ÖÎ^2¥ÓL^|Ü×OÇ;&K²•ŽUH¶tkx—\Pk7£6™Êó°fÕ‰‰J~ íÕ:É£¶æîÃ]µ¹‚þwå·ØóôŽm?p«Ýá3‰:PîNÍf¨Ú¦¬«áÊÄÑÝ%÷‰)”I…ŸA×ÕíÓ Phº­ýÄ1=yë$:õ¾c®ªá®= k°,\Q\(ƒ¬4ÞYA+6ÞoGéyWâIï«f¾ÍCW ²sÙÈ+Hù £Ü¥Plyó'fÒ‡ïzj¶¾ëYOŸKOóqË6ȳDÙ•Ê>O£[¸Ù,ò»¶óêjÆ)( Ý~ž®¿/{~q\¡)žIªf[mÊÁ÷ß#ÛB÷­i­,ºx$¬8Ü]%Ü÷Ú¦\œªzËÍêŒu¹ XfSY(Å}áÜuM’‚á¶á'sˆ²ÛûÛýS?x”}Zˆìq!”mš†•ó¨?$‹¶“÷îèÜÐhZñǺÚT± }žox‰mÕ— [8¼³.ú´®ŽÒøïûQþïÛS·!ãÉ]Tvž=qªÁË|VË­ß•§zàÁû+—Fe}
+KõB4Ü•DaÃýÙ™:BgC „rît§†—e͟딜†—4†^ÎYéydÒn“ UÀÌÏÈå•è
+-ªSU€±ÏW¾†ýmŒìõ[)ï…ClË6T[l¾"œ+ëΗÛ'yÚƒgÒ’›S?´i·Í¿bm÷§ŽXÁÁ$‘Z6"má†<{”*¨ð¦‚…er×ò±#Y8ʶÊ[:†qZ6xƒ9ŽNWââ¨Á‘=ÀÄt+.‰@ní‹3»®=pk\¥?ñ=l«Îo†”ìÒ±‚€h”,Dsך+]ßJžh¾¨úÐU·§é
+ÁŒŠ]~vò¿ß‘m$Ž9öf£Ì)Sïe(S…Î…
+⨧0ô-žî¡ã†¸RÁæ@v_umsÀv LáùÆå£ÓXÅ6DÂýçëÏþóùßþúöú Le‰Jr-´âˆ;|ÊvÛ–/‘ þù{1Šô¬S©us‡Moƒ‹*·äXSÜ[z®‡¨º ÇÐÀš¶ ÇøD}LñTþïªý©´ËUš·IÓiw–Þ™XÉå2Zd´ÚŽ‰¶íø)ŠÎ›d±ÊÍ´Ü+i/¨.RKøÃk®ÑØÑ™\Ø-»eÃcâÀœºnR
+-Š ‹Ê_ƒ¶`30Ÿ!ð›“èt‰Ý #pÍ] °£c¾`<`ßž»¤¢ðܴ䣤æR,›6š„ ³[ßoÀñ²l™ j^ŒÌ€Jÿ€Ðé¶÷aÀÐ\Y D\3¢g²
+­Í|³ñ‹h+Ÿ@ÔüÌÐÏLî! á
+²vH'ž]EuðÁ=
+U×»Š1¼MGÕ‡9Qý™ÑÁ`0Ÿí’ù g
+®A˜…Ä;N퇚Ø›?ÀÂ>E‚̹.ƒé$uïF®žEÙ4ƒ#†rÐRÚ™«$QxÌ°q‡Ìàú &i¡=0-ª =CL9ßÈMÈ7òoÀ!—’ÓOèÒ²ŸÑF3ƒ-ÂA§”-‹xÒW
+èàóc¼ù‹xü—//ݶjÀNÖDzB{Š1>ºxAxE®l„óø‡«µNÓèi ª¤*Op‚Å4oH– OHH›~×vò
+Š1ö[¬ ±v®Ð+“œ]•°!!&À˜ŸAqÆS
+—áª÷þy8ЙJM¶Z;K¥tð‘œYÇBëëWü¦SZ_¬Y€+¶ïÿø ™
+}=}Õ1‡ÂÃó³l¬ÒXVø?Ù¾dši^dúåµ.¹ p L”ÓéÏÉGr·Â2‰¹¨N8Ž°ù å_>¾A ]h> åEª´Í_Þˆbt¶’Ç%Ÿg±<û°ÅWX´‚ÕU8iäØMÉŠðYòcVŒ€Þ°±3UÀSt %ÕÃqJSK9•E`Ë"`йà^L$ž!m|£Z²U8:Ô?3¬b÷àK,óÙDjÎ8&uÊÄNFcï“`AÚ÷~æ™`ˆ
+,šjlBÔ;ÑÇ«ÑQo‡;à?ƒþNêú P6á$¼BÄ–
+»—Ù,
+endobj
+582 0 obj
+3283
+endobj
+580 0 obj <<
+/Type /Page
+/Contents 581 0 R
+/Resources 579 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 572 0 R
+/Annots [ 584 0 R 585 0 R ]
+>> endobj
+584 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [116.909 227.21 136.303 236.361]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+585 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [180.545 227.21 191.454 236.361]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+578 0 obj <<
+/D [580 0 R /XYZ 72 786.278 null]
+>> endobj
+61 0 obj <<
+/D [580 0 R /XYZ 72 761.372 null]
+>> endobj
+65 0 obj <<
+/D [580 0 R /XYZ 72 559.634 null]
+>> endobj
+579 0 obj <<
+/Font << /F25 380 0 R /F44 495 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R /F33 497 0 R /F26 391 0 R /F30 512 0 R /F34 583 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+589 0 obj <<
+/Length 590 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÍZÝܶO€ö_XøIܪ¢(êEÜ&.IQ#¾¢’<è$Þ®j­´‘´>Ûõßù¢¤ÝÕƇK ¼äpH©™ß|ðÔ*€j•„«$ý0IWÅî+µâ¯W®õ=И32Ú7ö>¸vœkûQb>Ưb_Çš×ýëíWz¡õJ~d«Û{â¹-òþxõËíw_}{;N3~dÌeip8Z)å«dÃjiº
+|¥«Î®îetmüDÅB1Ò4áa·Gê§Q8“,Œ$ûÑöWkjï§o^ÞüâÄ4‰áå-ÖÚ× Ó:ö•2 Ž·)|Êøa¦GI`ι$·[{µŽ”ò:Û·õa¨Úû×ÞóïÀ @8 ûÃ
+ÓòNQ€º¶¥L:4µí{Ùo\áP7âÞ¡)mÇìEÛôôr$-"sÃ+ÂðåEãÂ×bnÛ|í…T a›Óº wÉ죫(ðS•Ê§™WÍpûnR›ÐxáÅóŽ”%‰HéyÚe«ýUôXmú
+ºŽ¢Ð»!û3htx´½gŠj –7eÞ¡uÁÁþ­“On §„ßœ
+SÉFÀ€­£ˆj=C{Ä°šRÖL²d •QìÌ<véÒ`ŸØ\³¤³ˆŽ6;-y^Фyü~òQ8£tôüÙq]u.‚ã›Ó”F뙥ô€€- ü0VŸØ£Uœ@Pž,
+óUÄ>BÅÆj=Ë=y °á©„}@Ì»»
+~Ä n§¶Í†"5ÂО]_]#b(pz5õ°IÆue\~M³\XÏk{?,ÕvvÑMCHu}b³òž>3Ò[œÊöŒ-“/ž^E¦ªF4V¶µ«lëé/›ë‡AZ¢ü0TŸÈ\¿—dÒ=o$~¤Í#Íô\°§˜©Ä‰Å&àgh7”Áë$EG›`TDŒ)*Ç`™¹îvUce 0/СŽ;û¼êª^XÙ‹»:A¯<å¹D¸ïÚݹíIIÒxÏ_ücIÚ¢{a4³0 ‹îaE³åÚ#ù¨b8*soÛB8%õ­\Âìc¬n–Q}¦ö€<DÏ?ø ¶ö\ò2²·}UÐV†^9‘ãxÍED˜­QœÑIbxdxZŒ>1¿«Ç$îø†a
+GÀ¨¬ãµÍ{Iɽ=>›ÈÖL@Þ´RK ¸fá@¿ pê»»YÉ-„’YP‚cvíj@ÁQû̽Ÿn‚uDÌ1¼Ä8¡n9NÅuÛ ©×eôˆµ¯bý(ôˆž„ÑcÑò©èS¡ÇÕ&½Ž*óhø8“ìwÀ‡ŠÅÍ0|¨|¨|D:øPÉ*9õèÄÎ@D¹ÔIÅ“õÍöä ÔJùÚ=Â
+endobj
+590 0 obj
+3020
+endobj
+588 0 obj <<
+/Type /Page
+/Contents 589 0 R
+/Resources 587 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 572 0 R
+>> endobj
+586 0 obj <<
+/D [588 0 R /XYZ 72 786.278 null]
+>> endobj
+587 0 obj <<
+/Font << /F33 497 0 R /F26 391 0 R /F15 393 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+594 0 obj <<
+/Length 595 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÍZÝÛ¸¿çô¡ÿ‚Û'ˆuâ—H=&‡K{í¡ÜmM´¶lëV–\IÎ&ÿ}g8CY¶åõfÑ DRäpf8ü͇,f üÄÌÊ™ui,­›-w¯ÄŒ~³Ðú;ŒÑLmTl4önL\„™ •ÆÚš[óE«TÝ·w¯¾§ÔL$q–d³»µŸs·úwôÇùîþöêÇ»a™‰µ1×¹Á×z&D,ìL%±°.V™›µÅlÍo&¶"åq`Ã9K¯Ã.vZÞâì÷ùÔ}7©þØ”iœJs}‹…Š•s³E a&8 ,À›ÔŽµ³/yø>l›Å"1WŦ·7Å2ÖÙM¹ß':ñ2G
+øý³D·Ï]ßýn[vó…R&º?ô}Sc[EyU5s™Eþ]õ >u´œKmózSP¿ß´ø±-û²ÞÐêUÙ˾$b8)ïQ¸ïßI;â@¦.N3½¨Ê{šu§’±t)Oz,«Šh:Þ¸¬q\kã4µ§ œÞî»â¿‡¢žKõ4 ¢e‚iÔõ-Ë £6ïú"tM´>Ô^¢îõÉ­Šu~¨zZtG¸ÊK¢²Itœâü<7"*Ö¸0M¢»¹µ²c²è×¹±6Û~B©M´‘³ ‹+!±q
+Œ¥è<ÏÉ ³ÍzÂPà>eÚÝ°éâT͠θ«“Ñ>_¢ <ÌMå\5¤Ë©¨nP—DËfWÐÐcÙo±%¢5Ø2\‡¾£¥Þ¢ýä¼ej%M(ê†_ã•O4
+Ôñg嬛vÊHLk­XŽS
++d²/}šxæ`âÙÂí‰zî™^rùÎÔ ñퟪ†ðÚ@ÄkÒÛ§ªSù‚S}ófñs3W"zn(8{{ú)0_27ädYœ¤îÙÉi„ Ù`rvá‹|Ø>„ãÂøüEÿÜþ°±„ö:é˜Ø
+"Cd†I‘9‘ü¾
+1®.óš£Pؽ/0iÉÆ
+m‘wJÒ@ô’^šß¹J
+ç^w{ÐOAg? ¥»ºMSÐo» &@ÆúÒÆg†)(:FJ‰½¦¼Lô_ö9øæ!(Ó±@}RZ¤½äk°è–¦Ï ±9_Öê˜#kqZ½ÔŠ*1ðìËž*˜Ø—¡\×ãУGƒ¢æÇÅè„É
+ ;xœoe†J D¥2M¿P¥å-œ8˜ÖÃʸX»gÖ[.Ù;ûYŒBÿÛ5ÔFÈuŒñ‡¦¤’Ác ›ï$F÷{ôÝ3 –"øvò'R|YBX0MŠ)0§¥€7ïü4åf½õ6íƒÌ,GKˆpyÕl0?ÖüQÛBÙ骩v!K::Öã'¡`àÂkCb!»Î`  4|ˆt{M iäXJŽvùè†{t÷9áìµH0 Ö½>[¸"¸y*ãð»HöÐñmfc÷™¿@Ó‰¨è½Pš"­?OÕ è–+®8®¨§«)ê"|ҵћ›5j!o¾H‰„e8¦—*Úù¡ð‘‡J.ýPvå}5YÎ"¬CW´W d̈­¿:’LÊ's±ÿË·¶y˜SI,¾ñµÃ€º`ëÀL ×áY
+
+endobj
+595 0 obj
+2922
+endobj
+593 0 obj <<
+/Type /Page
+/Contents 594 0 R
+/Resources 592 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 572 0 R
+>> endobj
+591 0 obj <<
+/D [593 0 R /XYZ 72 786.278 null]
+>> endobj
+69 0 obj <<
+/D [593 0 R /XYZ 72 470.758 null]
+>> endobj
+73 0 obj <<
+/D [593 0 R /XYZ 72 178.047 null]
+>> endobj
+592 0 obj <<
+/Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F39 496 0 R /F26 391 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+599 0 obj <<
+/Length 600 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]oãÈ èãö¡ÁèË)ÀzNó!ô˜ÝîÛî
+\è­bOlamɧMÒ__rÈ‘-ËN²éˆ83‡Crø%ËY rfÕÌf©P6›-¶oäŒþ¾Îô̦I´H ŽAœÓ|6׉ÈÒñß]½ùñ£Lf2yœÏ®n<îÕòŸQQ-/æ*É"·)v­ãAWnBy亅 ¨lé¹*¿](À¯µäg·vl]Û+¤2º-«e}¡ò訙GŸnˆJÁ¯¹¦©mTÃ#‹‹¾iÜò- ¬Tó¨Þ, kQWÊFìØ]{ñ¯«¿ÃYæÅ“û3Õ°‡Öü2ußíúauÀŽMT4ŒôÕŸj×ñ4Êñ ZN¥uêE“¢ðûÕôî°oߺF ƒo>\íõ£,è[zR“zR§L…N5©Ý«QëjüËñ.‰0IrÞXpÙ 80ðv g³ÆÍnxyž)yZ&"µ†VÙȌ:àL¥'8ûµkÊj؃3[-ÏRžk¡³ —“8;Á× CÆ“V˜4{د֨.›èºï:°€U´r•kŠÎù¥µì1Ên[ì­ç¼6M¬£–Nâ'ÛÚgäå—X¼68[VûWÂc)L¦ƒ¨S+òdt¤€ð˜°ulDf“öÕEžF®íæc±§FH4¹‡ÄnƒØ§<€LrÈÂIyÏ—e±©W$³k§k¼%wþ& Ùç˜хý„¼E±\–]‰*Òpåýu‚Ù¦h;G¢Çá¯ÿºhŠ̶oq2ãËÛTŒóý`S®Š®÷—^n]×NK£m´îiPy.oiÐDG
+ZNzW-Ü)wƒZ—q0”<j\Ûo:šôVt¸Xï¼HÐøJ2Æ<ú'qëÜÄSÈÜ
+m¬wqîíçqõë,@?=  -ì1Q`<×ùyÏpžp)Á‹ƒÕx/Ž§™ù°÷ç¼8êÆèptÀÞß.Š&8×®Iì,Ã’%Â7D
+A’ÙèÀhnËÖ¡ æ
+#ÚÔ6ŠÝ®©wM ž†Â K
+Á‡Cʉ¸tÁ @€ÏE*Í+‰i.O%rpÏìh@‰~F丼¼Ð2zW=ðh2ÀIΓaÜÙ”»}øˆEš#´Ô¯Aà³ô…"ðåå8$‰°OŒÀS¾&˜lýÁˆð®îÖàrŠ©ø„«Ó:)(cn™ËhYÓ¤»ï¾¹ h Ÿ•æµÃRÙXÕÕ® $vÄŸ² \uO©¢kvEÓµ‚¼ÒU ZW°Ñôæ.Ë?»Æ{ü¹6¦mÙvxKMNNÂXv
+Úž¶‰GkŸ¥œ+Ûž"„„<
+J¶IJüNv¸Ï­A&|Äm0Æ)w¯Í÷‚„¤ÑÊ‚ü=s«AŠ)PÍ’§VÚÖFé•}ZzuÅÉ”†°ßW LBÐñê$º.ÚrQl|"5†Ï®`š*˜à„
+^ô •¶û¥ã¬‰Þܾúþê£àˆÔ©Íç¿ì[‚‡‹ìãû*z…ÛÉ´…öªˆ[8{(À2ŒÓ6`xpXħä&Ë#<±O±
+€ïbR:J¨P}ºUREÎ,
+¢é[báÅšE_÷ë ­ófáeSøR•“H |¾ Yí"˜òz>1AÖ5ŠÅ iÌe !ûxu.mmèœöñÂõlmw×ñhY¶‹¾m¹¦6œc…(
+rt á‰û:
+ëêƒXΰ<tÀ°B<äa¿ [2‹>ïZóiÜfç)JÉó84ÈæÒd"Nì¸Ov\›TCý´ƒŠ?ô„viÊù”¿ï p$Cœ6ÝRÑ5R¸?zÉ7î7¼•ß£ßâÿk®Xá|™6T—›tï²NÔJc{%ÿ ië|v…­]lœžPIÎ*Ö‰ï‡& ÖK‚n|G
+õ†‰ŸÚ™pø¼–Høž~ó\—'œ_J¢ÛupP%?[MïÛ£Ÿ
+endobj
+600 0 obj
+2792
+endobj
+598 0 obj <<
+/Type /Page
+/Contents 599 0 R
+/Resources 597 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 572 0 R
+/Annots [ 601 0 R 602 0 R 603 0 R ]
+>> endobj
+601 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [271.365 667.055 285.304 677.964]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.7) >>
+>> endobj
+602 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [520.087 374.217 525.541 383.914]
+/Subtype /Link
+/A << /S /GoTo /D (section.6) >>
+>> endobj
+603 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [139.878 360.667 150.787 369.819]
+/Subtype /Link
+/A << /S /GoTo /D (section.6) >>
+>> endobj
+596 0 obj <<
+/D [598 0 R /XYZ 72 786.278 null]
+>> endobj
+597 0 obj <<
+/Font << /F15 393 0 R /F33 497 0 R /F26 391 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+608 0 obj <<
+/Length 609 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZYãÆòè<ä/(O¦€U›ÝÍÓ@|-°6œÁ
+¥fòmRËI°L±ÊU™ÏÅ*¹^"Q¹…¦ŸÜ´â5¹ý±ë}w¹ÆþÍz“ÆÙŒY½k‡¡V3¬äúÒýÓ®€YÞsËÑaí….`cÀhh,îAØYuGà¡Þ·õ/±N*×¢:ŒŒ·õ富¬áïc=s$¦±V?û†I&@0¶p’$ 'ÁùŽd˜¨(5®M®Eý³Å…þÔwûÞy»PØŸÛ–¤ÂZ¡™@Œsüéý0Ñíè*ä
+ù~²ÿI‚R
+Øi#rºÜ‹èMô
+‡TF[‰aÓëöçñDP–',„Mff±°ˆƒ<¾ˆƒ bHuƒÕ]ŠDô Ú/c4°Ö &¼Ü÷‹K?q“‚¼¦f8=M̆&BUXe[ÿ„%D ØCápXìN°7Â¥ºÍª<ùH&øT0ËOZsa¶E¤ !Ù5¨¿]Ãa)ò6Åeô|öl9Eq™ I¨pjRuèw ÃváqFÁm݉Dݦ–+ ü†ÂPÿF¥Œ¹=ïÚ7/§›%ÐCl„ïÈ͂ŸšóÀãÓÁ½¤PÊa™”?ä´Êtx7Y Úámg_¸w/¦á=ñ#Þð™ï¶,.©µÐ#°¶ÜãÙÈ?…Žáä( KERR4{#&Àm¹d3 n:vٵ䜅éHþos> |´WƇnäsÉ!ýØ×Õ (rM:Y kÓÙ~ÄVó\BH4_”µV%Q&Ï}¦mà×OrÈÕ‹ËÊǃ'.Ø+•Ç¾+˜ct“òY„æù%† +Ž­æ½Í-ØùDàÿOwPH¥';’À$47 Ì«Åý‹2…^œý©¢Lø)£¦Û×y¦ˆÌ}MÒKJ×r‡`èà Šäàk÷¤áeHà-ºdŒ´ƒ6|˜Pd¢²cÒªs°9¸ºçfdµwM'M©œÃäDÌ~¸ [“
+ç"Ð%('È8)B!çÆÒ<?ÂtŒŤY¨Šº$ÏY²‹(± ¥œL"qeèÀ/ú#ªE6AMqÙgq‰`f“VM}ߪ;Çü
+§1‚XštÊsb¦Ê–j Uòï² Æ@Gìáâ“ä{2ºõ$ TÞ-Æê¨õÏ2]8ŸØm'ÛŸé™íÏ$¡[HB÷¸ƒNË¥“VƒJ³â¸*2Ý 8ŒŽ?×Þ>4‘ω…nNjgN6Ç õžCjMH>™™Î½ðGqpÕÉvkÂËZ7{ÐÙ=¥/µJ’òSJ«)H€)øÈø²¶ëRÅÀÏ…¶ºAü¬
+î*lX6I'Çèiªtr›¡&Ÿc¦T:ÚºÑ=:ÖÝXÎLÏ.!fAXC%Ì”šX§ã…? ƒ
+ À¤< 
+¥ßà ~+½ÅYpË[Ï… /"ìËäXØìÎ}c/EûVðÉf÷M©á8t¥¼FÖüþ}–ø¿±Rþ¹FñtÐ3ICt…ªò!ªEç‰]L.Ž¿³3{ß·]ï·W#%2JgWŽ‘Qôx®Z _>$Pše QÃ*ç6„âÞLüPw
+A578þ½#[£%B‡/ÆbŽ'ÊÒtÁT}×Hð¬ ìãy¿Ÿª“+ô¬vX’ׇ$D”¿á¾®í¹Dmr>ÜÇÌy¼ƒYB¹
+endobj
+609 0 obj
+3309
+endobj
+607 0 obj <<
+/Type /Page
+/Contents 608 0 R
+/Resources 606 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 611 0 R
+/Annots [ 610 0 R ]
+>> endobj
+610 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [296.294 650.985 301.026 662.201]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.4) >>
+>> endobj
+605 0 obj <<
+/D [607 0 R /XYZ 72 786.278 null]
+>> endobj
+77 0 obj <<
+/D [607 0 R /XYZ 72 761.372 null]
+>> endobj
+81 0 obj <<
+/D [607 0 R /XYZ 72 482.296 null]
+>> endobj
+85 0 obj <<
+/D [607 0 R /XYZ 72 283.448 null]
+>> endobj
+604 0 obj <<
+/D [607 0 R /XYZ 88.587 93.518 null]
+>> endobj
+606 0 obj <<
+/Font << /F37 380 0 R /F15 393 0 R /F33 497 0 R /F28 523 0 R /F27 394 0 R /F38 495 0 R /F29 547 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+615 0 obj <<
+/Length 616 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåZKܸ¾;‡ü…/Ñ
+ t;r<lÑëüR’G¨Ðo›vLy|ºmu'Hè­ÙýŽ¦:¸¯¶~ÀouëìYømgûŸÊ§ø­É ûm¢£C¹^“›ñaò0,’å¢^™'`Q–ºÜm™þ&~ËiÆ
+ 6&œ ð¢ÀVODÏ40ùÖ‚c¥Æ°cù‡¥o(&oǼï‹4ÅÌoŽ´Êƒ¢<‡×ø|”À3‡Üž#õÌ_ã±F¦þF¤¯©§™H(D:{(á@v>lîã.Ý¡¬ü:Ò<úsÓ»Ê/º9pÆáœä“-˜Î´ ^¹/`+Çð‚›Öþ¨š?è”°®ÄñXpM’
+¤cFÄ4ŽU[¢_|\õj ˜†ô4fûÞ‘( 2EwÃÚ^gíéÎË$ƒùõ¨Ç‘¡ôÿ.CaíÑsß4ú$¢ø
+¨·bªÈêÌÈ9Öº³ˆ¡ ¬ª¦]âRE¹Hâ$øî{@À vKdƒZ\ìÙ¯—Šä"–"d¬¿àÁæý=ƒÍrÛ.ó~ñ‡$®ö¹¥º”±Á·iÃî›!Mãt<5.« ó
+*(š,Â1|Ûƒ?ïÂgd ]¾º‚~®5Ö6òÜS|
+’þ0‹íÛ­åb Š÷t­¸Òs„R„VoÚ
+ýÀwþ» ¸¢F|•…ˆ¶“J—)¹g¤o2c‰'™×=e.gËökÁ¹p“QÜ ¬Ë¾\ZQéj4EÆß2üBNEèýô±¦Ú,t׶ì¸IúèËwÙ–•92fµøš^h¬-îÙÞïõé+<3•j Ó[G Ýà þvt™, i$¬ŠqÖWÆî }m§}-Š)ÚEàÊÐjÁ¼ËxTkÝ”èB©ÑßÙqŠ<8ô“ãøü3:ûóÀ™¾[Œ““à_ªÄù<s“†ÆE+oŽÿéÂѬèK\&”œ°15‹»¦aÙxûfBé
+ß^B?ÅÈ|MRf»à]Ÿw`é™4s :îgR.ßÊy˜Ï—0‚öú^ð‰ŠÓ4}è»ÆÂÀñËÝ£èûr_í_íQå|½™æQž°^ù|ÖûSÙoÿv÷C³x®zêj‹8ÏýÖ/”H'-VOdrVÝÁߢÉVü+€endstream
+endobj
+616 0 obj
+2598
+endobj
+614 0 obj <<
+/Type /Page
+/Contents 615 0 R
+/Resources 613 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 611 0 R
+/Annots [ 617 0 R 618 0 R ]
+>> endobj
+617 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [261.453 523.532 275.392 533.229]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.2) >>
+>> endobj
+618 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [306.816 406.342 320.755 417.251]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4) >>
+>> endobj
+612 0 obj <<
+/D [614 0 R /XYZ 72 786.278 null]
+>> endobj
+613 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+622 0 obj <<
+/Length 623 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZKä¶rtù ƒ\¬¶eñ!QÊmýØxã à bµÄ™V-u$µg׿>õ¢ZšÖÌxç°ÁbÑY"‹dÕW_•F]%ðO]9}åò,Ö.¿ªŸ©+þ÷î*´¾ƒ>–´©‰S‹O/î‚äΤqž¥/É«,6™áy¿¼ùì‹7Æ\©$.’âêæ–dnêF¿»þ×ÍŸ>ûæf~-mš¾¬ ŠÙÅäÚmL¾ÛÕ~ºû¶é&\æ‹7*]He:.ŠBDÿp½K‹,zݶ×;›ÑtïGM•DM7Néšp ÇîÊqòCó³äž†f‘c9LMujKqiÃR?ŽåQPG·C@ ¯v¢ÔNáY¤ZÓ]kX×_7%ÎmŒŠ`ñãˆMõ·ø{Ö¨œš¾ã.T
+¥IkjÀ4MW¶1,lMôVäú¡Æ}DÏ]§ºÆ©ìjxÖEÄ “œõ9´Aµ“•Â°ØáÈ:•ð“á¡õCº»Ç§l1sÓÝqm!“ÓÅÆ ®ñáx½Ó.¢®"R<r {u¦ð4Ji(žG¾j~H”­Â1Àëž9˜¿ —ír)may¹Æب9[ð¼óù|MD³ÁoÒà©>²fPœPýšX7|
+>SÝûêÝßü@GÛU~ÃuTbâdá:Yb¢:Z«LÔù€Ð²Ëßúj¢~\ÇDÿPŠàXd()GoO]…ÓŒ`©Y®¢×¿RÖu³c_-V¦oÀ}D§éxBÓHuôÐtufó€Ï–ï ~«ÁƒGÕüÀVo²BÏr
+2QܳMÂéøY„£U½¼;ëÍa¡ºà Úî‚€1y4¨<%çb,Á'1Wh7€ç‘$Ñ_zB"XˆÛ žÓ~qZ™¦ëEnà§æ‡RF ¸(Z8?îgï˳ȿg¬à¼âK¹¹Î MK¿€Cë`ËÔª‡’ôéø‘T†_&ýԌ;õÜ‹À)3ì@ãvboäað6žZxqwÕ£—NžûMtßÀ€Ìyš»Îøò† içD+—GƒŸqbj~º–〠gœ›Ühûq‚ÛI]!΀_ák÷e׌îïûS‹ê¸,Y>pÿ®Ï+tüÛÔ¾äY hw/7{¹‰[ð!Þ»œ«e_Þ…ác°S>žÔ±Þ½’Cªh“u8É2 \ñŒü —èM%×Ý1H¬Åh%€Cž©Úf¿%:3“‰ÐÓøY$±ÎÔ§ƒŸ_õÇoúMÞ‘§ÐÊÏàiò`/Zë<µVQè;è©Zì©ÐîÙ´ÞqÝ86ŽC/®:pG¸jº{­2¤ðÊå½iåRQðFý;ìå‡$Mà¿ÚØ`\Ûܬ­QÖEŸH²è-i
+nzlüÈí²m)ªò\!"‰‹ër*÷å襻çÞÎ?pGÛ߉i†Ù
+™- Àn£±-ˤåaó¬À´í‰‹€Ä°$6HL½AE‚Q©“_ˆNs ‚ç 7%±G¥(K
+‰—9ÀÒ£šñP§Båñ*8”ÞTzÎ<qdÁŒñq‘yrš)Š,¯ñ&ÜÓÚ´)L
+>»]a+‘QŸÄ;? ““hZŽ!¼JþÄçÃÁµÎõœóúœ´Ð‡`øí×1wÏ
+?o™ Žomè8öÐL÷ìœ%ÿÜ÷Có³¬HQú=ÒNeB‚Ì#ìçàwI’2pn4ŒÇ²°8àÖÃ}çì ²š¶• —¨Ÿ&lÖ+ÂäQ|NL±k.?˜·°»äŸÀù шkÆ“®ÂCÁžåjˆ(.Mø¸­ÉÂqÓ n¥Òê€/o¤ÎÛV²}=ßs«¶å» .4*Ö›/`»ÓLèà·Ü üª0±ÍÒIÕv„ÄOÍ‚ŸÂµŸÊ¦m‰¢€RgC†H†ë–ý­(f|Ç”$VÉÚѸ¸9­ëÁ—g»Gê(\rôþ1|)€½¶²Ë\ìl†ø„Ý8øî*´¾{&¸B·“ªíÓ ø\¨f\1)ìT'FÓÐßñr7Ri
+»¦D3= c>—!âØ¿rˆâ§E·À ‰u-–\À˜ª‚0Zõ©áéÂÆ‚ÆòÎlþÕ¹Dt©{V
+ÐÀèÎ% éyè\›N¶À{‰S'é9 j¶=1½ÙÖKªSŒsMW’ñZçé:^šº¦BuLwlHÉm€!¶XÜo>'õÐ T
+O)ñ££ë<‘Ì«üùºFª–Éï»…Kj›ÁáÐ2‰“\oq‚„M!¬ºgKÕÀ>aŽÌºÿQ-ç`Pν œ8áY†Œ™‡Ó:ìžuƒP[¬®p‰Ê*o»vàe¯¯um•æ5ðÃÙÈMŠà‡E~ÎÉ‹lýA±˜ë™Uy¢‚rQ„×Ü…GB×ãçüÚ=%|ò>hFÔ—Z0øó÷A’“ZôÅÄL§xË-g©Øy~åbà/TZâ ΑJ6éAœAt;K¡ þøúsôÂW+¿¶
+ÃŽ}ä›»Èó°ûbøÀ¸±E.’àðtMôgu0%ü¼—~½¡ª£p‰{FUP0×Ù\ÙR‘î[t‚3-”Yœ),ŒgŠœïb©†[:J†ëN¹„*kuÔ–ÃýÉ ¥?«ÀŸ”±×'Èz¿ç^ÒÃ.þD %Q’éxÒÛ’þ<zª¾›‘þâʦ’Q¢é
+ãGгçÏÈïî†þÄÊ©ÇŸZÂwü~ðA
+)×±yïÛ1fÛ¡Š•P2¢½¹’è&Dq°± 8RóÇI†“ˆ»;© Î4/Ww…Ã䎜",u©~×/R R
+endobj
+623 0 obj
+3447
+endobj
+621 0 obj <<
+/Type /Page
+/Contents 622 0 R
+/Resources 620 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 611 0 R
+/Annots [ 624 0 R 625 0 R ]
+>> endobj
+624 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [215.787 402.917 235.181 410.493]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.14) >>
+>> endobj
+625 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [450.047 178.285 469.441 188.285]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.13) >>
+>> endobj
+619 0 obj <<
+/D [621 0 R /XYZ 72 786.278 null]
+>> endobj
+620 0 obj <<
+/Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F26 391 0 R /F39 496 0 R /F28 523 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+631 0 obj <<
+/Length 632 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕYmܶþží_¸Þ'`É¢HI”¿9‰8/m`
+M?ðvy·êi¥¤ÍùêþøεÚ]Ù‡Aà€[Š‘ÃáÙgFê"…?uQf¥-’¬´«íê‚ÿî/Bë;ècI“ë$7øô„`$c'¶ÈŸ’WE¢ Íó~yýÅó×Z_¨4©Òêâú–d®×ÿˆþtõÏëo¿xu=½–'&ÏŸÖÅÌlò¬\˜<ŽW¿ºùò+·ÚÔí®õüµÊg¢•J
+‹ü‹«¸È²èzSW±ÉtÔíƺk±­"ߺ›ÆËÀÊ­®²2¢Ii´»Åß,ríUf£±vMí¿æN–u½[¾ç®»æq·’«¸T*z}eMÔɈC-/bQ,VhôŠÔ[×Ãj? ¤˜–ÖÄß‘ôÕEÕð÷Ø4Ñàý©i•N“,;Ì ¶Ãn¼¿­ïØžGF
+öÌxÓœN›•‰œ}òÈ>=l?×ìt{2(n¥wkz¼Ý·+< Ù¨ë=ï½íFn¸?x°îš'ºÁCxdQ²™Tå6Q©>²)Ÿprº§XÙ<Ñ%ØJIú{û;?¾K,@ݦ‰²ê
+³§OÕÓ¬ùª°™”](eª’O‡-8ìw¼í®G»+ B~ðîŒ.%Ü) hXßùq` >+è½Ù× ½•"*\}·!F!R¾ù@\»žææFã8ìû£¹w˜!òANýÔªœ½yÒeRN¶¨Eé­G¾Sí N°IÒ4Ñ©=ì [þWpúÁ¸‚Ê6øhÁÍõÜý0¢Ph趸¿”½& odšS€l5LV•Ë‘%ƒ0n&ž÷©È¢Ub«` ²/.'½mÊhÛõ|Ž:ú«¨³êöýà1ª¤EØCö£Ü³Â&:;P0/rß`ÈsµqWE%
+5ÝÊ5pÇàR´/m’Ù­ÃcyäÉ'Ó£+8umADF¢°¿Ô}×n¹-Îã—«6Ø×ȃ—l n
+ÄDƒ¯ß¼ûñû—ÿ„G¬æábÌ£’
+¯Ï-ø»X¦E§T%™Ò$¨“ò*V*3àž*pO핼™0Ñ›vÕì×´—2‡øÈ¿žÝÎfW…JÒ î3$é
+ØEªŸæÑZ ÀbÞ ÎÖ±
+80¦/¯ã™ M™Ò1âïÛnëZ¸øyšGoFðB+yø²kÖ,B^ØÅ2ü<]&¦v˜
+Úœ‚à Ës˜…ƸI¦š ü˜%x@ö6”Â8Hþ)껺•„58Üöí”ÁÖ-øß­ãt(.Á—ý¥éªÓð‰|í\Ý<ÆšBãöõåGüñvcc õ½¼ü¸ 6ŽüíR ÔŠ'qžé ²ª8eÿ8ARúU·ÝíO?ÈA‚1ãùAÍòVNækŒkkn¿Jø÷;:Çý¸ÁGv'øÚÈKè#PÙiÖ
+‰Óe`ºUr\PÂë² †JŠ*$.·‹zàŽÓ§v¬gjüñϺ´!fP•åàO°Ê²‘Í™öH½Æ"Cukðe(Y2 ‡„¯,ùJ±¦_×­ë1ê—0H·Ñ“Â&¾Šm¹MNJmµP¡gÌ…º–iV<‰qüR5Cî-‚^Ïär_Tž%nݘêäƨ‹Cï{ž¡ßÜòÔ³Üí(n} À¢¨W¯ÜzÃV‹(X$,¨¤ÆÙsA«ÃÅÃ7Œv4™°¬þ^ÊI
+œºpš9|§÷?ïky
+™ÑÇR×ã̜؃óíŠy³Mãåƒï€¦þÝP‡B¯ñÈbèzÏד,דpX §04àIBî^ß2á–Ì“€&²B yN×z#
+
+Æ<Z¯æ ‡ÄBBã©ëÍÐ}Q£Uña«R^Ì1„” £«ÁÃÂvŽ#FÅjµï—òô$±’€¼ã„òŽo|ë{¬kà’oýÖõ÷’‘tíRêQeÉ“%‡˜¥æ9 LŠåÆ»ÞmüKßzžLááJ–fžÂÃœÿÚ#·j>
+endobj
+632 0 obj
+2900
+endobj
+630 0 obj <<
+/Type /Page
+/Contents 631 0 R
+/Resources 629 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 611 0 R
+/Annots [ 633 0 R ]
+>> endobj
+633 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [229.497 734.742 257.375 744.439]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.13.4) >>
+>> endobj
+628 0 obj <<
+/D [630 0 R /XYZ 72 786.278 null]
+>> endobj
+89 0 obj <<
+/D [630 0 R /XYZ 72 557.087 null]
+>> endobj
+626 0 obj <<
+/D [630 0 R /XYZ 72 518.062 null]
+>> endobj
+627 0 obj <<
+/D [630 0 R /XYZ 72 470.569 null]
+>> endobj
+93 0 obj <<
+/D [630 0 R /XYZ 72 317.791 null]
+>> endobj
+629 0 obj <<
+/Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R /F38 495 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+637 0 obj <<
+/Length 638 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚVÛŽã6 }Ÿ¯È£ÔZëæ P,ÐmwívÑMŸ¶ƒBI”ØÇJ}™Ùüý’¢œq2(ü ‰¢(’:<4_$ðñE&Yž2‘å‹ÍáŽ/è{\Œ³Ï #M¥%Ó
+Wo(Æ£f,5ËSúVwïî…^pŤJ«×]m¿Fjs.T´*í2–YýÙº}kˇÕoïî•š5ÆÓ,ìOGËÍ.(ŠlÁV$*Æ£f £ÔbFŸë‰¾*˜Ðy°[uàO#ƒƒŽºêp¬-‰6îp0Ͷ®K›½[Æ"‹\Mûÿ$:1k =©pÐOu4ý™Ô;7´›³i8–G[ 6x0^š`ÃÔµ[Âîsp ¯EùÞ6¶5½Å íEÌ1û…Å4 ˜$ÑO÷_pÂÁC®|4 ܵî@RCÃ
+ï8½ÿ–Dœ†kp¯§ƒGz!¶Œ•”ѯ=éø¼áHª¶ÙÚm¸Èµá ™v”PÐ}.]˜àór §a:{í]>ç]1 %@ûø)\t  ù”ß-H=W}IObÊL.Ž¡Ê Æx^°TŒXäuµž–L¤iPBtøLÀ ®/mKö;·ëýãú´öÚÙÖþ7Tíè͵|Eä gyž^ ¡;QrÍ7²¯õ:&ÈÈX&®
+&ÖBG_ãúf?B¾û]U[þ>l%âý•Š ÆØÃL~./¼_æ*Â )Á#k6K
+¯#ÀÄñÝ¡^WýÑ@k´P,3ŧ¡豪ꙺƒâTZ ¤õT†ð ° h†anh˜>£,nö*ìCþ× í®øï|ú÷—þþ4ãBš²,]0ÝùšÚŠj’€ ŸQÂ'/Î$ØÝVÝ£I
+™›fh•ºs]SŒ÷:¶TÁA=å3ÞΦ0r>éÅ‘Ö”?rÁ¸†W ¿Eú8I½¢$ À/nSÒmcÔÚ¯ÌÅâÐð[ ¿{@œ‰|‹êðg
+endobj
+638 0 obj
+1209
+endobj
+636 0 obj <<
+/Type /Page
+/Contents 637 0 R
+/Resources 635 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 611 0 R
+/Annots [ 639 0 R 640 0 R ]
+>> endobj
+639 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [108.424 600.749 127.818 610.446]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.16) >>
+>> endobj
+640 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [213.605 545.946 227.544 556.856]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4) >>
+>> endobj
+634 0 obj <<
+/D [636 0 R /XYZ 72 786.278 null]
+>> endobj
+97 0 obj <<
+/D [636 0 R /XYZ 72 761.372 null]
+>> endobj
+635 0 obj <<
+/Font << /F25 380 0 R /F44 495 0 R /F27 394 0 R /F15 393 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+644 0 obj <<
+/Length 645 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ[oܺ~Oú ô¡2¥Å‹nç-)N€´I›Ö>E€ž"W\¯­´•´±ýï;Ãj©µìMúÔY’"‡3ä\>ÎD^Äð'/2u‘å©PY~±Þ½’ô÷õ·þc4Ó$Z${g&®üÌ•NDž&8ÿíÍ««w*¹Fh“^ÜlÜÜ›ê_Qr¹’R™è—¡nï.ÿ}óç«wÆóÒBäYÆ“GÙÔ·4I±Xq“V<k¥`]¢ÜÜ›m=\®tGƒ]u×R§²Ãº"+•EÖMQßò¾eÝP{Û]ª<º§ÎØÑâÃ`iw•»+h¦Er†G•‹T§<I\®R©£÷Dv[^ª"ú†ZûÚVó½Ý¯cÒ pœ½µôm¿£!/~^àdt!´†K‘x9…ã¢ë+ÛÃ<­£’~Z‹kƒ’ò—{d«;4u[öH[«ˆyFZR¶—ÔgZz¢eæ´ÌpBÂ'Må'Œl­»½AЙj8y)Š$!%Z©B¨8'U’•éOÝn_7¨P+Iæ,K¢uûuR3”d õägûéXd‰Ÿ´úÔww}¹–RÅRÈ4džH@7pÁdBG{Z†r–#µÜÙ”-þ;4ÓJæO% ƒ–lún"Ã3€ï¾ìIîÝ%(ùaà êvÝ*{² Ü?û¾.GK‹¶¶­pBáùêâ8Z»Óe•ëk!rž#í–ZG-…™p_QϽbß×ãö¨¤®1g&ÏXœÚÎ`dt BX¢ýOAkÀöV¼ÏXžÐû,å‚5²í7%31˜Ë€¿\žìa÷Š†é€±Åvtbù2Q"MÎY¾Ö"Ž OÚ×ßðº±lˆ2Ú,JgRvY8øXÛ¦âvY}»LR¯åe^7]Oö^™S¸'gò2O€»b&{ÕµÄk4†µÊ$|\0‚ÇåFúr€ã!ûñPí ë\)ü0kç³è~k{¦7‘qÛÄmlrš,9yæ¦kšã~Ú T û¯¬Ç»ˆ£´ØcûVÅßÛnœùí}‰—FBùBónûêç›)–!)Ä”Bž‹z2:Õ]´Ó:Pí~ºA"ŒÓŸ3Ôqš ˆÏôËï Üd|©&K£_ciš%åÍ
+‘Hê®Ø.h¯‰Åäáþrpoš†6©,RokV“q oëmÉJ»·üo Ç&_‚ò%Ø*{[R"e¨ìÇ8†¸@ç.¹f• ÅéICÀ˜£
+¾Qp‡¹D¬¦„»"Í¥%뎜Úçë
+ш  ÁšTôÉ™4ü²ICËUp>IGï.sˆ]=\T¿ëzûz‰=§ZùòÇL pˆ†ÂP
+Švõù¹CL©Å”7¤@5+ž÷TS¨*›P×#åÃømy°Åˆä½IÕÇ-nš ™wyAºZ âÙ>ãï’XäIö²r¦“3RË%Îý
+ue?ASô 7õ´p›/ –
+´&ŸàÙ\“Q§9ýt7o<KÒ Â>7‹È Oá ëoðá®yÜ/ù/}6
+ :ZDï7Kê• 0 ¾ƒmÇ"«¸{‚Kñôì´ºôØç{bŸyˆ“'×Hñ,¤b&wâC¦Î„Vs•;ôþQ3%7½¾“WŒU€£×¼ñ6Šy†ñÊúš“¤³$Æ«j¶Î¨jé‰7Í”c=U[Ò¹\8Hÿ¿(-¸7™«sZ[·£WÙ/΃ ׇý¾ëÇ_ã$¦oߺº‚žôLsΤ
+!Õ`'~䢷›W o€å.r!!*jüÑ ŸW5S‡ÛÊóŒ>«±0
+ 럊éå
+ìÓ‹ÀHæø<ÊU°¶še¦ŽitÎW‡…ÈŠ¨”Œxñ¬§r Ž÷Ü€K 9x­P <{毼®¥”ÂãèÔS®tÖ¨¢
+òjžPþΧÊÀ‹Êymòº£\°/µ+û¯uœºf^ç qg[Û»ZJGU‰% Qw”cŽIá÷¶wåž qž:Ž†-$M¤£Ì)PÞs…bIãLiqØ+sTÛÓBT Aï ÅTÝ ;MXÆÑrw’;îAšz-K]5ÃåÒÄ;¹Ô„¯Y^í<QjOƒm aÁ=zR@hƒÝOªc¯õ0u¾Æ…Û¾~°M`àÄr×Vü¨wÉ üõ™€Æ–.ëçÑPßµ5ÒF§„N–¦ÞÖã”-p%uÉ5–1Se,ãzs_]5]{wïên½. b¢·#%r21G´ Np± Ú÷e{wš¬ÜÙ]Guש¸*gw‘ë1`.§š¯<NôÉ©Q/Ër±÷dŠ8=}9Õౚ[U= ZÑV'Û´ö‹Á·ÎìýåÒÒÍèô´J‡C¼†•Dûº¥N}ßj7EM
+ŠiøKž[el`ª€ÕMjéwW¢¯[úŸ&ìa áË:5BúPø¡GW“:ú¹­jn!±0¯ðNÇ1CÁ‚ªVó’oo=ÖÂò1Þ‡;EU—b^u¡‘Óµà!ø{À/ä`ðcç?_?µVœ½ŽrtËY´¥nÍ”9\ŸV_14€@g²ÑJI¡?¿ |•9ÝBÁ)õB¾û¿Ó¥UÕendstream
+endobj
+645 0 obj
+3068
+endobj
+643 0 obj <<
+/Type /Page
+/Contents 644 0 R
+/Resources 642 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 611 0 R
+>> endobj
+641 0 obj <<
+/D [643 0 R /XYZ 72 786.278 null]
+>> endobj
+101 0 obj <<
+/D [643 0 R /XYZ 72 761.372 null]
+>> endobj
+105 0 obj <<
+/D [643 0 R /XYZ 72 697.251 null]
+>> endobj
+109 0 obj <<
+/D [643 0 R /XYZ 72 401.657 null]
+>> endobj
+642 0 obj <<
+/Font << /F25 380 0 R /F44 495 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F38 495 0 R /F33 497 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+649 0 obj <<
+/Length 650 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[ܶ~÷¯Ø7k"Þty´“¸uÖA½@ 4EªÕpvXk¤‰¤ñzóë{.¤.³šµ AŠVI‘<÷JàO\eò*ËÓXfùUux&®øïÃUh½…>ž©ŠÆ·ÏLÜ„™eâ<58ÿÕͳo^ s%’¸HŠ«›ͽÙþ#jÊáÔ•õõF‹,úàš-¶ò¨Ýñs[%·:{ìlo›k™GC9¸¶ñ3ýó•»ÃF}ßl]Ùð‚‡²º–Y´wíãëM–$ÑKžuW?÷Ï{žÖWeSã+;ëõ=~^âžýõ?oþ§Þ$¯ Ó—µ»k,œY)¹Ÿ*úáý«×®ë‡Í@߯7°†}ƒ:jZžt(‡ÁvÜný‡÷ûr£ã¹q×o^ËlÆ;™ŠXäÂspµ»åY + b•~’ëyûîÔ4®¹‹‰8W‘-HúBç2Ú—È\E·LE¦æ:êK·å%Ž€Îø©42‰ú¡sÕP?ð÷Û–èùû¶áøþx Í¡ågCòÄ1–´—½ÝòJ$µ7é¸ØÆ~¿Î‚
+I" •2E†ºuá<¢ø pö%,[Ì—UiXÛHõD {ë:?±+ñó~ûxmRP“¥OuTµÄŽ-/ë‚àÆšãÄŸø¥‚Y<V¹]‹g…çU¡ñ´²dYœÉ/Бäs]þz]Á—„ Ô*^_ƒÂì§òp¬I·¥ˆÜne¡M¬ õ%(ü$ظçõ‰A-ND6ŽýÁÆÕÒÆé q†õ;Ïb­Ä‚$ÂœD_Í(B4u4}ã$;èà-eØ™ “èfï§ý]nl]¬Y9˜gðíîÔT(ä°öihÁì]UÖµß~_6Ûš–JáÔÄxX«j»ÎVé\¡= ï'w¥Ò}åc¶§I¬À
+`*òô_ØÊI‡Et,·¬à¦ £Å¾Ÿf‘HùÔ>T’ßÁÑü€È‘÷°óh\"ñÝí­ÿliW"ºwu°îÄÄ…\:¬
+|:Àé¤ÑÑ¡í¨.ÔBû{Éf¤‘l38::™æÑíiàá‚l“'õG&ÉÅ÷Ó‘§ÁŽU9X°Q"‡0^áw6ÜYúçÖöUç<·+6 ÊϾ¿ƒ( &B#Áy¬Àz †b7~¸
+­·OÄU›•5 U\à—#á)ÐzçÕ·#ñÂslyÚ½ö<öƒRt3heæQ=›<"ô—½W)vwðÕÌÕ¤iô†}¨­Ÿ÷¬×*™['E¬uÐþO+šGi?ž§¬\ZK09½í!Լóe•¨GR2yN2 ’ ÀÞÉ22?£"ÚaŠ«üΣ"³‚Ž‰kÇí|£ìîìà¿%=Ãv®
+ÆÛƯÕöˆg®½kVÔíìÔz´ØßAc”’*VâŠA /˜=“Ž–ÑŸÛ¡íÚºä¯Ó<Y‘‘RI,óÏÉ(Œ'¼ ˃vQÁaB7?µ'pœ|Jð°$T¥
+«\ïðñVP‚`;Ÿ<+"³˜… 5Ks(PéÜïàü$KŽœƒÍ‘Öœ£˜ÇEbøÃQ̲ÄD{––Š›«èå_Þ¿á¾e;Žw–¡t,
+\ü6x¦šŸˆ{Qi“1}€NàÏÖ°ïiÂÏdœI–ÇFùáúRþ4Y‘†äÿL¯L΂πíwîîÔÙÝ2&NFàiÛq`ø·êŠ cÐ&ûZWnòÍŽO ÖHRà·PÒX2k=gŒÆ9=?=šM£Y"Åì¸P“yáBƒô §œ:-“º<{7Âqš©e±³çÜÌÆ\?|ÌâB†
+D4ùÒ¡ lF_ðè Çò¬ý·­@/Vø‘+@X@k¶ëšv…)r_£Ïê¾=%ŽÐ€Ü kQƒåi‡CÐÒbqÈ—Í¥|"¤¿œlçÁí˜}„$¬ˆü–3§'Î ŸÃãKX4…â¡Ö±)Äï…ÿ°
+…?¶î¿Ó/EÀúë/EÀÙÓ÷BŒESãÉtqpÕ[¦©¯ë¥fÒ59¯Ï£Ó•Â œ*³¼(©3vOÈÖDuämÇ_aÐ3|Zî(Y§³<†´Ép\²z”Í.mkà²>3×6`9£ßNýÉÇT%g®_é‘J4ÀÆ–¾pF #’þ’e‚ÇÉtö»å¨ßÙ®²µ}[Ÿ¨¼Ž:½«ÛÒÏúôsG5"lϺ°û’õÿ·Þ¯²ÞüsÖK§HçzX F¯¹¾æGûòÞˆ±Ñ¢ÅwØžT»:uü¶%5ÀvF|°x)sOU(üÀz‹ûxŸRg|›*>ðrç¸è׬W鉈íÑá0Íï`fÕ®BÍŽÿóê$Êäø!ö$%Bý>ö·Èî8ºO¶æžqÏ‘X`Ú±¬ü¾ö°k¿ŒàÇíq<œ[»²ž¢e1ÝóèyíKSŒgÇÆô;Ðýið Þýa×Òeàe»2Ì ú€ï|Ï“%Í~…˜ ؃wäØÓCrƇÙÚÍ
+)«5[Ÿ‹Ã\´ÿÉ
+²Ì|’ˆ .QW»½–¤<á'ŸµÄïàAŘ–
+íkº(æš
+&îyÈ™`Ï3@ ñt‘?ŠYøÿ„¡(f)ÆjT(„SÌbõ¶m4ä‚ñ¾¦Ôîòˆx‚]\MJ£woñi|ašÿ̃º~µ›­EM-šŠƒ¬©¸‚¿G1³\^ví|6ƒn˜l?.Äüƒ>y°µ&â×råñÇ2ωR¬ ‚_Á’v-rîžûø5Ÿ.EB@úø6Êg²õʼˆ˜þ¥¥â ¦ŸVE’ú˜ÍiÂÕ({ÞóŒ‘18–ÎýÒè°×Äl»"ü–[LMÁ©ýœƒ{yöZò% ©æÙ×Wkzëñ6ËWU‹<ÔïohDªPYج/ }\pØ·t‹MJ?U qÊý$£dèi콯‹ŒÌ’eš?ù:”ijw(ˆ{Gwž& $;’-S_± Þºð´bk
+´0RX…뺘ÖA*ÐØ‘W°r²Vm
+G?ÌR™™ß@ã™-GE.³Q§¯kÃÜð{
+ìü VF¦òz–†+ît¹A(8úú¹ß¯UWÊIîgc= ,î;[ÛÁ¾¬ë÷òž°µMøtN4!DkÏS)â<Ã{¶TÆ&/~Ëï,òµßYèßò3 Æ®®a ÀۤПûõ¥Šâü§º|ôëI·©æò¹ÿw¥¼‡endstream
+endobj
+650 0 obj
+3523
+endobj
+648 0 obj <<
+/Type /Page
+/Contents 649 0 R
+/Resources 647 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 653 0 R
+/Annots [ 651 0 R 652 0 R ]
+>> endobj
+651 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [85.014 639.898 98.953 649.595]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+652 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [93.878 84.937 107.818 95.846]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8) >>
+>> endobj
+646 0 obj <<
+/D [648 0 R /XYZ 72 786.278 null]
+>> endobj
+647 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F30 512 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+661 0 obj <<
+/Length 662 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ½ZÝs㶿þšô!tÇb€ Ⱦ9i|q“ÚÄ3}hÚX¢,ÎI¤Âó9Ó?¾»Ø?$ʾܤ=°ØßîJ,"ø‰…‘ “&¡4ébµ#ô{¿ð­ï¡FÆZ…:Æ·W.c•„I¤K¥Ã4Ñ8þëû7_] ½Q˜EÙâ~ãÆÞ¯ÿÜVm±Ê/–J™ ÝÚ[ ´rj¬óýç:oª]×UIßÊ<_s«âyKißä-5¬îv4¬ØàSûe ,³±Ý®¥Þé::¨64ËH|(èCQ^üëþ¯‹¥HÂL%ðDeîXÛª.~2 Z‹«&q`KÜn"ƒ2 òî?­‹:_ñŠ‰
+Š†ºï¾©ã~K]*Øte?Pöu±·u±{æîWhórí8ÓÚŠ r³òƒ­ýMU»ãD“ƒØÃaûÄ%q-%ƒ§¢ÝbK–ÃÁ›¬
+7€£oº}uzî$^šÃe¤BaÔ©NM®E¦aû¤A—¸żÊ0¥¶õ3.™’J#&›7´ù‘àçk¼?)ƒ·y™×`ÉŸ‰k2NCë G<{í{8Ø%Š4_¥J“àÐÕø9 ª†{H{’aÈñÝ©”M2ªø™ƒ3™áŽ†¦N_᎒aÇ<ˆ”6uJ›¢× 7”]ÎkÛš7h›¦rG\l£ Óß×™¦‘œðd´
+øgZÅÙa|»ùË— _K£ÑÒåØð±hÀƒ¬Ük ˆáP»ZåMS<»¢E¥x¦ÑÈÃØ;nìŽoý1ð¥à§Ýá)\«i:ç‡Ü
+<‡Ì'öÐuVQ Ç^Š,îw¸O¼há—¶
+J»w- ØÖpþÄqY íl· 5V*!‚{wžCï!€ðCz¯o|^ïêúo“nz!7 Ø]ÕÚ)ÙÉÀ­EʼO€5‰-Ør²c¼:Ÿzç÷e…3ŸJvÈìWÙó`«Øçg-ݵNÀõ”¸©Ç®f‰°×3¸ãÄ:æûÕc1Å·µmíƒmÜ7=š©ƒÃÎð™Þ,¯‡(
+J}kXØJ÷1J0ÁûHiámà¾{ïÁUJFéôRbÒd#bøæ÷Ží)açÆÒÈ[Ù `ìÎûØËPëÄ™ï
+mOb8SÐØ$€›ôy¥<¯¨í‰TŽ4u‚Ú¼¦~¨
+ع–:øÓ½x‡aæÅÃÏ‘Ž¨³([jìªGè~£KÔ×,@%°V¸sQç‹Í˜0Õ‹42Y(|¨™ÏK@² ÷ûÓÔÐç!±±W¢KF€ýI”š9Éõ êLÃLzЉ‡òG8"¬Ò0¯×SÅ¡‚ÀO+æö ûRÐ^&¡€ù§Çìf-ˆ„H_¶$sU·—ƒâ}
+º†ó¸š¹pD„2õáÈÊ2” <¹Ï™Ô`ãú¸ß)Œwól0ž<h g² ÆhJ;¨ õôv–Õr?e0@Š€¥29v”¸Rr‚…ÀÿÆ.߀7vÕò0~úô‚„£ *÷Á°w†5]ÜŠ5u¸ y&¬I2¸g/\盢Ìgø e‚‡5DÚûS’Å=E(…Ûsy”;¯gˆØ‘÷ ÙãÅuûË™E
+O;O%<ŽÌ8åt%†Z(èèQgN'M(Tü)KDhzijº¨zÓ¸°t@M&xt¿ƒ„aÁøìŒ?žXž$ñxD¨ ‚ÙÁÓäJvæY(3ù[ò*Ë~+N`š1?Çpd ¾EǡȒߎRÿFl|ž0L¯\~BcÞd¦Læb×9U‘F2¥›··w?~ûî›»Ûë›s—G×Ñ8¯;c×€;ÂL‰^ßÝÞÿåêþêë«ŸæÈ. ÇÒž;‚×?ÀF”Ì
+Bþ3ðÜ™c¦½ŠÿgÎÀV¼±øÂ9kGžÀ}rFÒª’/:L—ŒôC–
+cÖE³êš†l׸bÆ)é†Î¡XQ§ïò sžsŠJÚ8 šÄéçØ鉽‘¨ÙggN\ç®`¨Ø žsy3:–
+óYJ
+5«äéç)9év2)ËfX8.ÈLÁ›p9XBÖ"ø©a²õšŠ;GåSq7‚R‰‰¥¼ÞS xÓÓ”Itª}: ö¹uhVÿoZR†*…qY"8àƒe£qÐޖšÔ.ë|‚Cy§ô ãSA8¢¡€†^©äI)ûØCc“*uJŽÓGRQúÈŒÒG.›xµk*<¨–¨Ë8kÄ%N룰™üãj×­9o8)ðïMR,Pb#›÷º ’q_šü4Œ(0¿ˆe˜ôPèÓ0¢ˆPêÌ(l…­ßlèÉYo<h:A`t‰¡ŽÙç-0Ðk_"
+ÔÐÃê>z‡¶˜džñ½õ†ÿéhŒõpPÅ“-=z\L¯Ç±²_ˆ“ Ã"‚ÿc€Ëñ>@yòË•õyU `í±äììäº$¥À%‡Q¢ŸË’ÿÓ˺Í?¢x«phîÅ•oM§äZu晕NٜΫ¾Ð°Ã(þô †7`i­q$­©Hâ¶PtŸêlü*@~÷Îîi)0ô·&y/ -èkØÔ‡u@þë‡u:Íùpt¹*}}—Sæ°í]NŽ³ê\l‹0ÒØÌþ©IýJ¸¹$|4d·^~PHëa_¯ÊjüûȪú?8Þƒ- Á§lÞ[‚É}bô(’Ã̼þ·!¡ç¿îÊ’@°
+endobj
+662 0 obj
+3588
+endobj
+660 0 obj <<
+/Type /Page
+/Contents 661 0 R
+/Resources 659 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 653 0 R
+/Annots [ 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R ]
+>> endobj
+663 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [72 657.837 85.939 667.534]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.3) >>
+>> endobj
+664 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.787 522.345 207.727 532.042]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.3) >>
+>> endobj
+665 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [173.725 360.142 187.665 369.839]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.4) >>
+>> endobj
+666 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [256.922 319.495 284.801 329.192]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.13.4) >>
+>> endobj
+667 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [243.333 267.419 271.211 274.995]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.16.2) >>
+>> endobj
+658 0 obj <<
+/D [660 0 R /XYZ 72 786.278 null]
+>> endobj
+113 0 obj <<
+/D [660 0 R /XYZ 72 705.928 null]
+>> endobj
+117 0 obj <<
+/D [660 0 R /XYZ 72 252.154 null]
+>> endobj
+654 0 obj <<
+/D [660 0 R /XYZ 72 170.759 null]
+>> endobj
+655 0 obj <<
+/D [660 0 R /XYZ 72 134.694 null]
+>> endobj
+656 0 obj <<
+/D [660 0 R /XYZ 72 98.327 null]
+>> endobj
+659 0 obj <<
+/Font << /F15 393 0 R /F37 380 0 R /F38 495 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+674 0 obj <<
+/Length 675 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÝã¶ÏKÿ…E_¢ΊHQ¢Ô·»\6ØærW$›¾´EÀµe[8YrEùö6}狲lëv›ôR X`Å!E œùÍÐê*?ueõ•-òXÛâj¹ûB]ñßû«PúÚXÒdiœ¬=#¸’‹4‹‹<{N^¥qš¦<ï«»/¾ºQÙ•Jâ2)¯îÖ$s·úGdâëÝýõ‹oîÆqElŠìùåd±ÉÌs³¿¼^À¢e×þ3QfsèÝPw-6ê[šŠjÏO_¹~y­óh[­¤G¤‡­ˆ®»¦é®u=Ô톛º~Uõ9ÿŽäj¡uœ©ü¿PTRªÉ§€Ö.?åOçó£>—žîðëŒÎ¢}ß]/´–•÷_b“ª¿öCÝwíŽËË¢Òð
+³ 0z¼Ç~Ôv¬» †•‡-2¾ÄùêFÛÉZ´)c­ó°"õæöÕÏ_¿{{sû- Ÿ,ܸòTd]»â÷ÔëðâC»ze“Gõàq< w£(¯
+a\ÒÈ×Y¹æpƒ›®Ëh¨ú}_  N:G$0€Z·«¸£[sû(0;5r–øª:ßÙ4±±6z\)l*¥ïžØN§çsÂTeZ~.Ÿž ©.é"5Y¬
+((g©ù`ü·G™¨íø9n”–´ÁꈞTå²— qðUÿ¥çò¶£-ÑUÝWË¡<CUðÍbF¬˜BGEÜåËA«™‘‚½5ZËòãA5õ=L{y`+
+eƒœ ½„Ó”ž¢ý¶\:O
+,藊󻌦#Kc
+–MÔåyÈÓѦ,€¾FïÚæqF‘'nWƒÔ®WM‘=x` ÕG·«gÏ8L |au¬tùyˆrö»e"€´sÄÖŽxÒ&5iARÀ"pì‹BÅŽûF `ebEdd+â}å@‰ îñŽ&6N™(¶°?¤äø\Uƒ«›Pö˾–µšÙ^tΈ4€»øŸHÖ%Í‚CDô·Ð¬à·VeHýŠ8Iõh´ŒN"·FŠj*#¿tmKàÇ¡× €·o€±bMEMínGfŠÃhs…¿'ãæzbÊš<Ô(UŽRn{[ãiò,°u\³õB!Q<P¬î¹Ú/.} ¡ÓKÃdT¬òl¤ÿ?ßÂ;ßÔ÷7BÛl©°Ÿ3ip}Ëå‡zØriŽ³”`ÂŒŒûÓ›7sŒÅÆydÁ]ÍZ¤ÍHK€Öª^‚µ¡íH­l¼²F­¹¦þELvn„#ì}©ô©1<ÏÙ“œQµÈa1&ÿ<ö$ÿ?Ø“2‹HU‡þkÐcGN˜Ô¥Ñæ¹yU-0)+^Š«ÀÂÄ a· ò@Á+2!`žßvCF¡«á‹šóõ²žl\ϸ€OûZ±ÿ;tS‡à)Žþº6`Ò:!Þ¿T}7à,{‹4ý™Ò*öwO«úƒÌm˜‘S„6_ \ –SátTs!¹L›gb†TS¶‰…ÂkÆ£E´¢È…3rúPäò°R·,KÄ°aÏ…]G[Y”èÒ·QH/ÒÌ~Àµ§gI„‘Ž+¶©\òCX‚!"> uŽ •X'Ž ÙSÒ“ãLpŠû}CÖ¤k Ï™¸Db³ÚÙ &Þ\喇§WãôGª Èl/7ãꟲ†zBÅcAÜG‰
+®p~ 2;øÂèõÌÊO5˜–)P÷¸¼9#S¨¸,ƼÄã¾Rn½›6ÂX™cÎk.1§ÀTC8sµ(“Xçê×sF3Üšßš•CÞGàa[/£[ÖGœäÉ|½aK52ðD²-‚Ü°Æ=N'ž˜kc|[r†Ê‹PßídÂÑ&æ öéÉM6gè°ÍÓCµåÅäìéñ9¿MRõˆ’óà/ÛŒ»Y
+¿rì' ‰¡%ùþQW¹™˜¬Ñ!g
+¦ åBבqcmž'ÅI–fWo¶ÁMÏW § Çø¶F櫽[q›_ãpýà5rÎõ%Á¢>Üûê߇Á¿ æ{ð›Þí)q¡3N‰âX0c\¯‘J‘I*Ç,Þ³Øv\4ô°Qäò’F+ÿ¡F.@­%²¬P8·ø©6'Ÿçx&Ôslù;Æ‹]ÈOý.âŽ<G×i¬¯
+ü{tSSÐ_¤Ñ×°¼û黆:¬~ÀÌ'R°`ÈeY [Lô:„UXÕ˜˜¶‘i$È-×ÿv ´•RF—f —™ÄYÉ˼©{?¼ÀO·díµåkm¡¾‹Þ.€NKºIÛ<¢Ë
+7süÌN¯pÎÉõÝ‹)9[•ÇešŸ
+×M·™çi™ 3ÔÛ€·³¿j{LœŒÁ2…Õ—³‚åÑqªÏn¾}ûî‡oä*ïæöÍ73“—èWÇ›Léè’Òcò“’F’ZÅvÜ\|ApìSQõ)B=„¡î%%±¬q{8¥Ç}8™å„±L²X
+p^> J‘‡AÀxóîíÝë—w/_½üqŽ*AÏpL|Ã:-ã1-Ñÿz‚#–%'‡ý¾ ƒ\¾@ï1=
+KO®°ƒìEV
+ÑJaa.ö; êp'”½:¦äèUk~®í2„§Xå
+†¯³ä&PRF)=Öèâ“&hçîQ¼?ÌÜÎ1`š¤`µŸÍQk°Ü)YØ'Ú^\°
+endobj
+675 0 obj
+3181
+endobj
+673 0 obj <<
+/Type /Page
+/Contents 674 0 R
+/Resources 672 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 653 0 R
+/Annots [ 676 0 R 677 0 R 678 0 R ]
+>> endobj
+676 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [430.514 711.621 444.453 722.53]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.3) >>
+>> endobj
+677 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [112 548.969 134.424 556.255]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.2.3.3) >>
+>> endobj
+678 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [226.639 352.27 232.093 363.179]
+/Subtype /Link
+/A << /S /GoTo /D (section.4) >>
+>> endobj
+671 0 obj <<
+/D [673 0 R /XYZ 72 786.278 null]
+>> endobj
+657 0 obj <<
+/D [673 0 R /XYZ 72 761.372 null]
+>> endobj
+668 0 obj <<
+/D [673 0 R /XYZ 72 580.55 null]
+>> endobj
+669 0 obj <<
+/D [673 0 R /XYZ 72 499.355 null]
+>> endobj
+670 0 obj <<
+/D [673 0 R /XYZ 72 461.169 null]
+>> endobj
+121 0 obj <<
+/D [673 0 R /XYZ 72 285.535 null]
+>> endobj
+672 0 obj <<
+/Font << /F15 393 0 R /F33 497 0 R /F27 394 0 R /F26 391 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+682 0 obj <<
+/Length 683 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZY“ÛÆγò'˜'cS"Œ¹p<®¢Ýò:>¶¤}HUœRA$VDL,
+(dø°¦åù”C £C_7ï®þöðõ³›‡I­cSðj‹ËÂ_Þ¥b•kÞ8ÚÍlDÝ€èN»èA½y] ·m3¼„Mx›ðCâî[mÊŽK|¬·USî°SùE/]œóeZN &òEW-ŸÁÙĹ[±SvaòXi3Ó ãMæ;TçyÆýÓ'±MÍb©âÔe£\ÆÌÈu‹‹;9ü<.´•~ÎËpÂ6ÎÁ¸‘n”ÓØØÄUéÌ:—&6P^¦±‚ñçrz9€OfR8[ PùÓçã÷{F[Äù¸ÎºmJ3ѳ4ö¤ŸmÍê]uÒÝroÉýСòQy…–
+þ³„6õ\äÔf"W]×´ÌÀfBÇ+BæãFã |þPÚ¹™ÀñvœéæÕ«7ßß¿ùîû‡7÷7¯¾½{x¸y93¯Ò..À´ÇÆYo¯rµWÄD
+9†‡rËëX±‰dj4‹|Ú7“ÀÙ9{´oSœÒ6 ¬ kxvøß$=«ýŽŒYl
+`û‰Ç¶o¹4n¯¶ù¨ÇONÏXÅ‹ ’òIR~ä
+nÒs(æ¹levä_²,Ú¡|‡^˜L!*Õn?ÐÊÿ
+t&‹î„™(™2âötÔVà IH•Oã‰ë6Sö°ãw~h%Òýtåà´êmùv+À&Ü2
+ašö0M Êd¥a'új n)zòþ_³Ñ§hj„“LtÇÆ»ÔIJÀ:4ºÑcëñ&CȃŽýöstæâl°w_v0zÍ™M)Às¯)h3q,Zhèt‚Up¥ªaº¹ RP`§&Pp}óÝË7÷×_Í©-\ž¿švvÁÈOOüî_Ý<ŃØëqhfLh97Ø+AËVð¦U¾KÉ‘Mp¤V…Aúúz·§
+ðoÉÆ™Odãìçfãòÿ^L©‹X£’'…ûMn¿ø|ÍÿÏ÷_zg
+ÊnÀOö„ö(x[ç=!WÝŽ^šBèúôØNZ7À…¯[Àˆ ì+Äeƒ Ûîgä‘”GÕ5”Y„…ø£0›ù˜€¥¾8þs3×L˺±)È¡e¡÷Ç'‘¾i… ü}µ¢¢˜¢wk¸žK"ËCäì
+
+»œF›}9lúØ¿QœÝDÑ|^UKTù—N(ïaÆxœ*¬2ÿŒ[)yh»&6ô®3=ãåuî±×#L•É=ˆ èâ5Š²¹fÒ˜ÃÇýL¥½JŠXÁ”—A Féì P’ÇYú9˜Äĉµÿ˜$|\j“†Ztþd¦²_þJˆV7_²˜§«F70ˆ¯Á
+
+äðub²ð£#oÅV¾€Pþ±šZ<⺷&%à ^ö£å()þ ¬T¹
+endobj
+683 0 obj
+3112
+endobj
+681 0 obj <<
+/Type /Page
+/Contents 682 0 R
+/Resources 680 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 653 0 R
+>> endobj
+679 0 obj <<
+/D [681 0 R /XYZ 72 786.278 null]
+>> endobj
+680 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+688 0 obj <<
+/Length 689 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZÝÛ¸Oú/ø­róÄ/‰º·¤Ùí¥Eï—úÐ+Ŧ×ÂÉÒV’ãìýõáú°eïM‹^ ¦ÈáÎÇo†Ë1üã‹T,R“0‘šÅzÿŠ/èßÏ‹Ðú3ô¥Ò’i…_Ï®”LXëÅJjfôoï_}sËõ‚Ç,‹³ÅýÖÑÞoþÝ|élµ)ª‡åJJu;‹ ýsUº¶ŒZ›7ë¥H£ÝcÞíZìѧåJ˜ÈnëÆ.ÿ~ÿ§one6bÏ 4¡‡É« ÑL¶  %x Ùv¶¡åŠªèŠ¼,~É»¢®h_EKÛz„UÓ¨nÛâSéwzhq÷ÀþÕÍý !˜Ìè7QÙe™]–#çŒAòvòéŒüŠª[®´ÐÑ=ÿøf³¹¯o‹Ò~@íî@X?Å:¦ñžeØ==Ú×'ýûzúÖ»¼¡ÖÊ÷ñpÈ•f)lf•1¯°Q8°Y4v±}*ÀŒ^ÆLâœ^–êÌð„“Òø I1S‰Eb±’½¤œ‘Ãí̸_åÇQá ',@Ðæõtý9¥bRÂ9á¸<™Ù'ìKB{•0óÏÏÎ|R™€.
+J±/H˜¸tM¿Û®›Â‹Ìo1'5¨Q›>ãÖqÐQF›ÿáÇß… ëzOJ¿â™`pW“«þTT>¦€[C{9?£6às‚zƒO¿»}óöãÝ›ûïfŽ™燉öõ 3ð7q2ðzsû—+¬âTž†Ë 3ŒdZ Ün¾ÿÃUnjl£‰ùi[YlP»džÎ¹•$^“€¦C;—TSÇ;H¥=¸.Ò¯L² ÐÅX¾Ö  sÌQÊhÂ_Š¶#c‡Þ©"SßqW¬qÿI›’ƒÞ^kÑævvNPn^`auξS¦GîÎ+=z¡¢÷ñßãNmG¬UÀâsF²’ÐŽã©`ðòïîn¾wéÆŒb"Üm=k{’¥‰éå7Wùih™^5W2ÇrÆÏuQ aU*<ìƒÎʱÁ½‹“IÖ»¸]Ò Áâo>$×÷7…ãtƒ¸‘%<6vB¯xêA|‘!Õ±!ˆâWhAD êÑäÀãéÜM–DŠjíÙ8MäÉÀ.=g7Õµuð0âÌ~«ÚOª‘­ØÌØcSt¸ÌJƵÕDOs~¬9MG¾a;ir½\¦àÜÄè~c‘ƒ.¸êöP­=v†/ I¸ ø£K‹¥‹5
+C äÕˆšÀÅhžƒû®£n<ýÖ t¹1@°l")˜wÀ1\&“qhBƒ“BŒ1—„
+Î1DÊŽ—×Îo‰‚¶>±ŒWù\@<<Ëj4Ü:’§œ%æ?˜ÕŒÐÍ?ÚîÙ¬‘À¥%û÷r”ä¥)ŠúßNQÔWJQ¶dz†´œRwÈ &* £+9€/Ƀ¯³«POHâïxæ ,\©ôè²%îÇy3BèÃÆhË…§mlwh
+„Ó ´ûeN°,Ëža¥^†ßÀÎ3q È…Ûwo_Ä,¤X(Å> $OÁ–¿
+‰§J§(úý'B‚ìbH1ò`Œ]ð7“†ÐŠdxÉØsºÂkü4¤ŽH‡½ :r$Þç]À*øy,*ÏÅycZÉiL¼²æ XèkòR¿Ã¹O´sA¼(!½z0…†€éì˺­ý¼ô‰
+`'´68­n6ó9æÙqö• p;F|-íL|©vöVQ9¥0/ÓÎñ¾Éî;ˆès[„;LŸhã3ìÁ§Y_«ÛXžA¯£)C‘ZŸY$ä÷…!W ¤eACš°‡NÆ`
+ß(›Žð#\z·ôx©ˆÂ¸3@^ò
+@L™LåK"@fþß±gïf,ó™#¥‚A\•‡œ*Gs^ÂÅ^ç ¤<} r+Ð#‘+é2*ØÞfÛº,]>sôOL Ä.5 «æFýëN™¯í·§*»W”î3/_ V™È‘âÎ^òoOù“Å<û®†djÄüÂó?Ê(>À™Ç¯iAà^w‘
+?cÌáÀqg]qoºê(ze“èDëšÊJ¹Ã©Øc«úð°›A–{ ¸ù‰êà.Áï®vŒÐ8pûp—!Xå%~µ,P*A"A£«_Ó‹íÒ\¿Ë^ïÈH•×=7À‚;-.UùÆÀ#”ÎwO€º{?JY’¬ZÙãÇ÷ïf\zÃDŽêV°Ü¸.9²nð!cý¶ÞBro\„Õ±5·€0o[¯…[Ðy,º]˜íÔTö[àö
+>Ûk_“0¾ÊŽ!í6Þ™§¤*s[Ĭ‘ñ˜O”d%ævªYŸ|_zg‘ý»ÐJ^bÑÿÙJã½Ä dçD¶¤69]no¨a#Å÷Þ"ôÄJD~";—Ð!ðÕJŸ¥uʧuû}îV3’ÒUÈÝ\ív ÌwÔ‡mB0úÄ€²Ïƒ®dvþUEh**²X™£æ.ð¡È–j#ãú~û2 ŽÌ!b•w'Ë´ö3ý©D^úŽ.pJ¹uÿÄᦆ§(ÌAe½·®yîI po{Ø%ü_cx@»ËC\iHÁéPׇtg¿‡ÒúxR¹üîøíňÁÅD,ŸsêBp&1g¸îÖEvºo…¸6þ A‚ˆÔendstream
+endobj
+689 0 obj
+2977
+endobj
+687 0 obj <<
+/Type /Page
+/Contents 688 0 R
+/Resources 686 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 653 0 R
+>> endobj
+685 0 obj <<
+/D [687 0 R /XYZ 72 786.278 null]
+>> endobj
+125 0 obj <<
+/D [687 0 R /XYZ 72 408.62 null]
+>> endobj
+129 0 obj <<
+/D [687 0 R /XYZ 72 148.374 null]
+>> endobj
+686 0 obj <<
+/Font << /F15 393 0 R /F39 496 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+697 0 obj <<
+/Length 698 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZKoÜȾû’¿ ä4xh6›d7kxÝIVNÙ h [ÆRKr,k}êÕ|h8’µØ] lö»««ëñUõ¨«þÔ•I®ŒÍ£ÄØ«ýñºâ¿ÏW¡ôWhã‘i¦£,ÅÚ waäNg‘ͳ—Æ+i­yÝ÷×oÞ}TÙ•Š£".®®oiÌuù¯Š¶ÿ¾þË›ï¯Çy6Jmö29Y”félõ$_Yý½¿m;¿Ýi›n~lª¡ruõ‹ª¶Á]ÏHÚ)<aAS?ø[wª˜›Øͽ=­—›¦•ÎÇ-üçníýpº¶»4Õ›ïÝ»<lïêšÇ´·ÜÒ6~Ù0<Ó•˜]In£8·r¤kõŸO~ˆ¢è§8‹áŸZ9IžGñ'Üžš=žXè/}¿ïª›í.1_âd¸PFy¦çw<¤ÝÂ_è„0_çÜM]õßsƒãϾ=Þ×~ðõ#×ÿÀ…Î÷÷°Ì2¾àr²29•™9§´ œ‚!ÄhaNÍÖ9¥s "?1껲|žQ;™AÏÎØ•Ñ_ß”RÁ]¡P\8tà™xlÕ,æã«8N㎮i|÷*N×ñˆ}çÝ@l51±2/l‰—·”ZÙ_'›Š8¥7÷ÿRµ§žï%±•öq¤ÿZõƒ/Ï®x“\íL•ü6úžü®úþÝV« j¢ÕÂxPü÷þ®jšª¹ã*‰Ð¼ÿ•†a.«a=l}¼gŦtsK7 ,~8TóIŽ»§+8¸2ÜÎ Cj†ò‘+¢­¾áyþë}]í«!\)ËMɧžOªõ%‰çÒþMÖÄ ÃÎW„åŠô5j‡+ªbÅ>Ùä|ï+68ÔÂÆП`aÔ—m–N H§›ëCÕó°ðýIét͘*Ù°u´B[™Ñ„ü™—âk„]Ed`ñX¥µã Ö6Ž—Ƴ÷®Û£ŽÎ¤¤—‹mʲlÅ…
+d½ûØ6Ã7¸÷®÷+4ZYˆ!  …[bð*"I%¬së\Öo°*׿~ëßU¿?œ:ÑcýëÕ6É‚êaÉ×þŠw5`C¶A½ã®Û®=r‰X‹û¶Á»¿;u¼+4&Ah@‹›°øv]EæÛ]#Û¡±¥3ð^K£N^;‚°_´ð±ÙÜœð†c‹&¾÷ݤ3qAÛa×´ÖV·Ãá ‹ ÅÈâÓ~dà¸ÕÝ‹¡kJYø×rË!¬Z»að]4?„Xb§Íлá–X”-¹HÚ“ÓeÙñ² •¿§Í–pSüÖôè0ÐÒ¹\ŠŒû[Ë–ýÞ‰3 é’Ig°t†k¼Ú³ Ú£Héïë(oáffîo®IdáX¸,ùÄGÏü懑IØÌv7¥ñjãGwKÌ«}ù¢‚~‡â5 ÄkÁåà@›wpRjÑÞ×k¦ÓFÆä¯AÇ&*²àÖÍq’D™Î^çѦ5g b&8B…xÏõ€gl»Ï|6×sëÉ-Brj;5;v/IŠî·X°ªÄ»cÉÌbÅ2¹KaößÛ¡Ú‹ 7°þ07qüýaêS~>òîÏ~`ƒÛï}ßW7¬5ÁÏ;W¸¤¦t])‹†yw®ú"aà—zv`})\Ê6?ŠÃj›z‰{ ´à`#[Ð…õ€rª jÜ3:¸ÉsË(åÊÒ ô*ƒoAð¼ð-ŒÂg”»¿µw½(9ÇWÐöq[`´µÈ(ÖkÐï‚„Ža&]2i¹&6AO6á%mÿGƒrª•Â¹dZT,±5è-_#T)–‚/o…`Ÿ1€RÙÔpƒ ƒbøµðmÈI?påˆRx"F@íf„ï@Ùܯ–ÜD”°%gxîŸ÷µ(þÿÁÃ!ßrˆ¿ŽÅ­ŠR•½2²¶îètT•$Ùˆ|v‚„#i":ÉT©Ûæ]3Й;^Aõ¹tú8£m24N‹ Û&‘5Ù‚mg¯¬ªëÁ²ÊEƒŸ?uQ®"Ä‚É¥(³
+ôC/‘ø×ûB ›Š{„ÙÛR™Ú¼¼ÇB$¸n[•*
+’9¸Ïcg e³aB¢
+t«h÷Åd™t
+„°ø©íʱô×ÿmÆ””ÑO®}ïBŠÆ¤ì§YzŠŠ³š4²©Ymˆ—AC…"ÌÜ°óÁS¤q<Y)Äû
+,·øiÔ*±0Ò㺪—IDO² ëã©°eÕb»_ tdÚôå‹(&1ËçÅÌ`Ý.ÓC&ãÉS:ˆ0þ#ŠHÛíñ^Îé3ETŒ)«‹äH³°°$
+_=þËßoÆwà_­ý(0nzòaƒÍµž]bÂâů5•¼©Œ'#lÅ­EX(<Œp#.»f vr’…w}Æ&,•6–/ B—YlmÆ· #™cŸø
+endobj
+698 0 obj
+3164
+endobj
+696 0 obj <<
+/Type /Page
+/Contents 697 0 R
+/Resources 695 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 653 0 R
+>> endobj
+694 0 obj <<
+/D [696 0 R /XYZ 72 786.278 null]
+>> endobj
+684 0 obj <<
+/D [696 0 R /XYZ 72 761.372 null]
+>> endobj
+690 0 obj <<
+/D [696 0 R /XYZ 72 689.612 null]
+>> endobj
+691 0 obj <<
+/D [696 0 R /XYZ 72 626.449 null]
+>> endobj
+692 0 obj <<
+/D [696 0 R /XYZ 72 562.68 null]
+>> endobj
+693 0 obj <<
+/D [696 0 R /XYZ 72 500.123 null]
+>> endobj
+133 0 obj <<
+/D [696 0 R /XYZ 72 351.587 null]
+>> endobj
+695 0 obj <<
+/Font << /F15 393 0 R /F26 391 0 R /F27 394 0 R /F39 496 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+702 0 obj <<
+/Length 703 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZÝoä¶ïó½ô_XôI.nñKúàô>àĽwòÐZ«õ²·+m$í9î_ßÎP¶l_
+´E I†äpf~3ëþÄ*“«,Oc™å«òðB¬èïÓ*´¾ƒ1¢ÔFÅFcïµViœ&fµV&ÎSƒôß\½øê0+‘ÄER¬®¶žöjó×è§íÏÖJ'Qiklˆèúl-³¨¢Î¦©+z¿mZjô;~wu&óèî8%ôØ6õ™,¢žz?'Bï«Ž:ŽŸvß5ÄäQÓuîz_…ïy®ó7¡óx‰=Ýî\y³îè¥myuUmªÍÙß®¾]­E*…'Ê­ð›mp‡JE–4qÕ®'ËU:º¶ëâ³µÖ:ºò{…Áí©.{tÀûÅë«QÚRƪ€']Oœâã&D,rIëJf åjXž‘&º?TýùöðÆí«wöPýœ˜„^ 4ošº¿xõ’:åζÔú£Ý>Öô‰;Y›8ƒ×9¬¿`5ƒÕÀ®òU[­¶/@¡âܬŠ8q* “jáõ:Ãÿ4¢ÏóŒ^j™Ä:U °X(=ìU©…½¾ÁµÝSØ<.¤æ÷¸ã°…{,@˜¾è†m*+Û„ÝŠtak+h¯ááû‡Û û
+‘?m\v¿oÐFn;Ô&°œ†ž]ÕcC)áHÙŽûª¯høh{Ðl­À*¶üe ô¡UÁAƒl±û¦¾qõ ½s _ŽJŽ=·©j\ZïØŒÿèÚ[4‰u¦…D%tÎÇ«×Â!¡áŒ‰ê%Ù¡6 ‰˜"ÎóùÌ[_ë6~Ñ* ®%/Ak­ÚÚîi¤«l;Ø<ôõlíºX«1X«÷.ðv0WÏ6Œ¢LðyM†ON ÷m»…)Ã
+\ïìÞýÃ2ŸÄsêýž’ÙfXúà³cjxÐDþP ™Ž‹âyyæ±Bc$Ð×}cÁÉá–AA.zl«þÔÖžBG =Ü–ÞÁiড3£ÖÝì¼Ð[[o J&E,U°¨ß-Z¦ÎÃ{AœA{ëºÊ¯²ˆ.jšbÌÞö(i¯ J‰8aGm<—ÒvÕ‚ÌÀÕê´à™À ‚îÔÍ‚tç*HíÖáîe–2âÈ,;Þ±aǶ9¶ÎöÕþî,O#Ä
+Ãt¬Ðð
+O
+½íí5¥ïílG €qßBC±õ‚4U
+˜šÈ/fQu`oÖº
+ ›ä‘ƒG‡ðg*€ó–Ýñj8Qz²‹Ç°ÞÄ4tçpØêßõÀ-ûe`¿é<ä“n„zÒU¦¿ÓEœšì¿‹éÙÓ)ôÌ= ÉdñJ2ÄÀø/§ª½£&é• Á¬Ø}„(ï™Ñ#ÀFLPí]< .~$åØy€Kž±áÅ„™ç&d¸ødÖ;»Y
+ƒý.8©’½¨¡õ?\\
+9ä(<¸0=—
+ðS>ðƒ
+
+ÄñÝ\ÙËÎ
+­ïžð_à+ïóYªx¼²ð83tÆl à‡ÁO¨º[ÐæBÇ)‚/~’JžYŸ­…”UÓGùä#“ÇIˆˆ{±w× ŒU‚I4ëË憳 ‡ŠŽ k˜’B{ú®öaDvœzt¤j0ÄrÍÕÛ%ãO
+³Ýâ 9ò§Ý£'ôíšÛbu-²ô9pÑ@hƒ^·¾9¹n‡še´ˆ4>`½Ó¢|Gc¨
+øœß §$’LF¯mÈmc?¯ïãŽ9ÚΗ+Š¨t„?~Ñ&IâDf³Ýÿ,”mÙWäí÷øú»N‹XB¶
+Ÿ«8—ñŒ‡S©ñɬó÷÷§¡þYÿm8LÌõ’ÿ~èDøÕ%î-…½‰¯NO€02¬Ì N'’®.°Q6uç
+y€>òé]‚‡b¢
+Xl+K­[çGJý€lš®ÿP¶îÈSlÈùÚ–
+z0BñJ!#æ4½Ü½§«§ Þgn„¾PØVaБ¯ÜpžÒüy˜ÒùQé¨R…=òÿØâãÇo'ÿ6 7è<Üf³\—c†Ÿù˜dÌa´‚³t5§ËÉÈ„o%OÜõ–hº04bp7|Ã;}Ü:K¿ö)l©¡‚E6ræš9©¨¯lRCUÄFŽ•
+ÈË?¾~ÿþû÷K™yk]Lnœþ$°˜ñré²9‹IE¹þtþþÝÅ»· |!7.5å+ßWçW®.þ¼tEVÄÊäSÎ*”_ð—^"bvg°|ý¢â៦|õú›ß. (•³hªñB* ¢óýàfCMï$Âùù»]NðøJ¹›Ý/ðUûï–.‘«_ïM5s9\|È™¦)LH²š+9UsJÖI2YÙ
+endobj
+703 0 obj
+3411
+endobj
+701 0 obj <<
+/Type /Page
+/Contents 702 0 R
+/Resources 700 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 707 0 R
+/Annots [ 704 0 R 705 0 R ]
+>> endobj
+704 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [452.726 508.991 466.665 519.9]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7) >>
+>> endobj
+705 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [123.871 432.842 137.81 442.539]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3) >>
+>> endobj
+699 0 obj <<
+/D [701 0 R /XYZ 72 786.278 null]
+>> endobj
+137 0 obj <<
+/D [701 0 R /XYZ 72 493.877 null]
+>> endobj
+700 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F37 380 0 R /F38 495 0 R /F45 706 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+711 0 obj <<
+/Length 712 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíisÛÆõ»ÿA¿±éêˆìË™~𥊓©Ôº¦ãˆ%‰X
+ëÙ\‹Ð˜A­'Äy‰¼}öRF£9Ф2nÅò"¡
+HBOš¥RÁ"¯*<…óX…|è2<nvoqÜ 7µhÜ·÷
+ÌG{‚C
+â–zñà >·7»ÕÃ&9Ú©0Yb9Ë¡+„W=ø‰®‡`>×&Ä‘7.:Ÿ‘Z #©‹)Ž¥Pi²gøyÉâ^5ÀEk)²‚Ý/ú’ÏNP\†Ì’*%=à hÜ ½N™“„49þæ¤M2’¼oFÞˆ•Ã ç3ȶu±û05éØ¥³-ι‡lsÐÆ^‰Ö ¥O_Ô¡‹†‰±‹¦ðл  ÷»Ú‰‚/Ø’n˜T{þ=i­ó‚yÕ[ŸuMx,$C: Æ~°›/{D‡M<'ƒnJ` ²ÿæ$Æà”T¼·ƒ1€\“ªI3ÆŒB11Lô¬Aô2éÌ‚Ú`+=åŸØ$;ö±˜6qxÊÀ‰ÆÑ8äŽ]Ÿ`òO†øÍ©(î,‚;9yÖ»µÛ7ëŸÕ’ÆÁ}+ȱz:M<}Ü–UÅãû0 ðÀÒj*{p[ËåçíºÜt¶Z:CdBv*fú®gkry 6GÜ”¬Ãæþ<ôæâ jÇgVÜç¼%š[xåí:gaXt Å_$L„û)w’þ¯
+áoÀyc)¼¯‚øpë÷Ë]½x[¶îÏOæ6ÝêmÿÁO–ÎnPñKýÑ"Ú|¢"R‡v*ƒ‚â$QžÉýnNy*)Â!ò‘MGTOâÇ%¦îHÐ1‹¸ÀÑ&ó@œð!ØryçSw†
+1•˜f"'“
+¬è• ÞAe ã¶fZ˶Ùp 5vJ.Ã7õŽ®}9•&‚‡rIWä“Áô¡AùÔ÷èVD$¡×oQo9ˆÆRz ¬Šé©" òèÔ;Ûgˆ²1oXÖ¶p^.Üý€«`cŒÁWøz`!ÛväTâÈ›¹õ+É÷Äšï ¢ã¢@ª’hQ £}·€Üÿ¡i–³«¼]í|
+Öñ%! ˜SUñ¦’ËHȦ§ô Ugæ³M
+«÷düÒ›ñPvË®P´ó7MûŽøIɺÈGÙnÑ–îZ°pΈ»£Ë‚ÇȦÞ{¶ý}‘¯``ÜŠ»I(2Ž-iH·šËËåQf5D—:¯ö¨\ÒÆÓœ¸ÜåŠ>—\QrÚº»ªu>YIÇPn‡é*UXhy•ú{ÆĈVŽeúC.x¶È¹Öˆ0DºØ‚Uìí‡|³­0š:`®H á3nšsåÈ ð¿m¿ÏFŽD“"NüIú°ªî¶ëO>œŠÎ9jJx‰àèjœ„ñný`7¸v” ÎD(… ÌKfTÕNä$Éèb„oí¯®Ÿ\_\]_Ly€4í™@ÄiðdÓP(†fçËE2‰w«ì¯¡òÖ!¥á2çöŠ¯Ëq­Û¨!_À«sžr•‚â{B8ÁÅV¯@ éáÅ1~ˆ%oxÕ:ß/žpÙ¥ÐõÁ² :#ÄÃwÇ3]o7Üâ`€èúÖ¥YÊ¥e0ÖBÅEçAù« %Ã}+µùÕo¸=~Á.½vtŒ+ÕÓÀ}òá¯íùŽë½zÁ·ÒÝJÞWôÄZdqöCŠÆ°¯yL CY’Žóc<>Wtt r(ê~…†/w7¤Á¯ dúX%5õt
+o¦R‡‘†¢>*$¼Ù¥ß~¤®Ú‡…c©Ñá3™(7S[÷[ý‹õt"ž€9ÇŸ"Ÿ||èﶶ°K~
+endobj
+712 0 obj
+3189
+endobj
+710 0 obj <<
+/Type /Page
+/Contents 711 0 R
+/Resources 709 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 707 0 R
+>> endobj
+708 0 obj <<
+/D [710 0 R /XYZ 72 786.278 null]
+>> endobj
+141 0 obj <<
+/D [710 0 R /XYZ 72 231.36 null]
+>> endobj
+709 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F46 713 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+717 0 obj <<
+/Length 718 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZKÜÆÎY>ä/,r 7Ø¡É~‘tCXŽbÁ àb!Ê¡—ì!4CHŽ¤ÿžª®j>f¸»¶o¦Ù]¬®®Ç×UÅM¯øK¯2q•å&Y~U^¤Wô÷þ*Œ~€9¢TZÆZáÓ3„%“ØHyµ‘:ÎFúoo_|ýRdWiIqu{ïio«ÿDu3\o´ÐQåúÒ5߯ÿ{ûXÛ¤¸]±¤Ù»û᧺rß:ÛÕÍöIÚ®Þî%ÖKZ[}°Mé~~’!½%¢MšÆJ«éÿˆðà†®.û5fÚº"¢?_¶Íð7[îÜ«æ¾]#>5}½m¿°o›-îŽÇgeøþõÛý}d*D¬Sã×ïê¡Çé¯_¦zf‘Ç©,‚MúëÊ“ÈÂOVDÇëÈ¢¶n®E ®£Ù¡%¢açh8ì‘Æ•l|½ÉsÝ®­‡Únk›ú3žÑO7ø›Gûºqý œ$5Q?Øn¨ñìHñ±v¼?ðõJ`Ñš;¢Ì&rÝ¡íÁ|2‘ž'ˆ¤¤Œ¾³%e‡ é(—L’èXr{šFñ÷ÔŸì~ÿ@;v®w¬‰Šà´¹òn¯îiÆ+
+ëjà½Ûó5fÅ ½8*jZ>mè7˜e‹†AŠÃ5Xë´êãÞ3¼‹ŒrP©L“°é„ùÚÎÑàh«ŠN&XÛHùÙumï_O£¾%ÊagY‡
+Í¢ÝÄ•(¼íÂAnz$¥ nå¨wäo§¦²ÝÃu®#P¤†W~lä«Çµà£h9YÆ;ÛÓ ié÷`»mÝðä`ßãÞ®¡GÔy3r¶e {ò®·—;€FAÄ<*ËÓ±ö
+ô2­åP7õÙ@Þ
+­UP ÷1±'›|Ô˜›0Q¶?ËßT“ %Mõ»ö´¯è½É`ðî‡km@µu…1dð˜íi»óûgÑ-:Àñ.=ЀÃ߬x)FæidºÙÎÏ<BdM´¥£Eºɽsúˆ»ý~9‹(ŒÌúz8Ù¡n›@½s³·Lútï’Tù[J*·¼Ã©qMÙz š\gÅéw™H4ç#œ½?ÝõÈB€ „wè:S­ù¥†Ä°ÏÅ
+žŠAßõp"Z
+!ƒ5ç 5$eúù<Y²‡†ôx•9E¶äë¼Ð}:îmãÃ’&<Lùƒ×Áá4à f¡pq°¥ºS9¬¸ž˜6Á÷®„ŒŒÓB3Ù„‘=½HãÛîÀ²ŠÑûE®|:ƒ$xÑaXãxhià‡_d³ãà,FqÊ6ÁÏà¸IQÌ/Aº<¥/.ºz¼Ðž»~[(BØOžÊà~YbÌH=²yÑ]ëVòµ[œÏÉxûŽ/öº ²úößœ{ÑF
+ˆ¼D@=UÄ&UϹd
+ÁŸ »ô§ßÿFgÕ¾ÐHž®åØibë+¹ßÉ“8ÍS¦þµ¤–¦éIa»½ê#éç`=L=ÐSHY/µÀ¹ÙK\=3‚™3ÓûLÕ‹)“yÂRˆX‰
+(±X•_Èó„¯Ò˜O¸)‘<ð°ôsVwø•ñªfáæWµ·ešDŸ6%•×m5–õ™sRp£ˆj@‡*àöѬ"&:_áùŒ‰þÙ0ï’Ë3X§:'{àåz ßw©TÈž(©{ðZ
+b¬—û‹\âwû’nôóf꪿ìj9ó7š'
+oô®þÜ’…,Ö›jŽYž$äü„¬èx¾ªPá¾V³¼LqÞ«¨Ÿ¤Ô™·±“‘DsÙÐ
+endobj
+718 0 obj
+2831
+endobj
+716 0 obj <<
+/Type /Page
+/Contents 717 0 R
+/Resources 715 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 707 0 R
+/Annots [ 719 0 R ]
+>> endobj
+719 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [383.211 481.891 388.666 491.588]
+/Subtype /Link
+/A << /S /GoTo /D (section.6) >>
+>> endobj
+714 0 obj <<
+/D [716 0 R /XYZ 72 786.278 null]
+>> endobj
+715 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+723 0 obj <<
+/Length 724 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZ_sä¶ ïó½ô+ìÛɯ"Š”(åí’æ7I›iÜ™všN‡–¸^Õú³'iÏç~ú¨•veû’·Œg¼‚$
+zkjÇ;Ƀª9Ô¶áµÙ2¼Ú&± ~èzÛa×Gügûk¨ƒqo{ûv ‘†˜¶MÕò’ïM[Xz÷f$ê¡k\Ÿ:äB'é»GÞ?´î®¶8/11e ¢Â]EËíà¤R»ãxì‘VÆ°µÚšÁ¡£i˜Ë”%3ÅK4¶AáD6¸¢þTJÖèÝá°¢ó8
+3‘Í•.'ÅÂÂÆŽ~‡±ëyÚ‘æ—AiãžÖÜí˜Ü¯í®s
+óØ,žßÅ ÐIã&ºi§R…Ž)nÄw¹Ð­ %´·i(`üå>§Ó®B6…È^>ôïЗŹ~‘M7 ç‹OQ:§“{½âÕ…”¡’Þg“…¬G‚-'bîÙaVC?¯’<lUÒtUiéÌW?GBÎÑÝŽ þŸâŒãà<¾È=CÊÇ‚›‘º Ã|ÀÎî-“ö]î@‹ÜÉÂDSÜ!=FóX}Òw»¢h°óûß­ˆ„[D 8ð<:z9ØpšêålçÜD¦ÎB§ÃI`Yà=”‘^RL_Ú¢7ÎáÖ㓧ê_pÄ5£ÿÎïPWµå@¡ó0ŽÏãÐi ¶èÚ’Ú¦¿?6¬ì5ÓŠt¨Ó”÷ä½ÌÊÞÁAf¹7®Ò‚nªÖ4 ­^_:j-=œ‚C%h±eÑàÞ @ >˹4¡£î´[o7àxò%0D“%)F5}]â“‘—¥
+#¡ùHøÈ×pqóà )í'2™ÀyOÔ9 Æ…ÁvTÄÂÆ,y¡¶…œmAE‚ó„€.¨-MbiT„&ë–u•M£âÙ(]Íæœ[Âð–:[ÓXâJ<!3"ŽÝƒcTÙñ®d ßÐôz2`9›žýIC€™ö”ƒ Ž9±¹÷ÎænF99|ïÝK + Z)
+>>Õ>#ûÅI¼XMâÕç$ñ*É?/‰xò;Nÿ»we¨G|Фø…ýW®€(zËéñùq̲0Š¼yͲ·KÍlež†qº4m'óÂRŽžß²qPôˆR²´Wê–­ƒ|ÜŠ‹Hµ£_Š‘¾To”L¬ ‘¨œ}7ÎÈL»`šÌ˜îy€q‰þJ­l „E Èö]Ós1âYDoœjàM¬¹£´÷½%y(µ8U@5+GÂOm)¶ÖôH ‡Ž3ô´BºgÇAb†sËxf_à”«û¼VyYöcº¯¨\†nöî|¡W9Éì uP•‰ÐëðB{b2˜S}´¤.
+_z*ÆZênlÓõOÄ
+0P]àw²ŽlÉ&Ó «û–sêYé<C“ÀCï,/;‰Û«4]ÀÚ¦Q¼sŸØ‰\{`묆&Ô³ ù$O+é艼4\ûÒAîäýSÙwq‡τ
+ËJÖ©³pT:e:A)_ÿ 1L!„kùPpÍ€fV€é >3­/6‡šÑìôÏÀíD)Wʉ_^D 8ÊÀ±ºb3nâÕû mðÅrÖïÏçI Ø$¯Ç¤„׋1éfœïŒr܇a*wpi^¯Ÿù¾YâÃÑ컧ʼ¦[²¨ëÎЙÅD÷†km7>SÕ÷äBÖa¬¹VJDú[ñîܶ0sà’GѶ´çÕ›Ò ¼ñ|•§_”ÔŒ[ÅwK]”Ý$iuP çB'\1ÐùÖÍÊÁ'Ï ª2?_•rċ駕ÕUûàÊ |zêj—.¿öäIây›ˆLÕoäØŹ¾8v؇x)y™ˆNÉKNÀ§†N±(=0{£ó”"ÀKëà]ìLßÝ5c2
+þñꩨ“Ð)WHcƒn@é­Ÿ²ùŽÞšškC˜Ý/”í–²]9Û\KÑ# ¶ÞÁR3©¹ Y•/Gn•7Lì¤
+¶¦XܾŲ¤àˆÐè+±ÁïÎ]<b‹ÎM8IMk¢}ÕL+IƒoTñ˱jÖÔý*!T>/Í b¬k[^SÎå|¤@dÈëÁTƒö}õ‘ðƒð¾O¨Nƒ6Ujs(O”µq^ñí'“ú+N`ëDGE Zî P:†pZÁ1zÌ2Vœe<Ñ«ÁŽœbähu˜éÑ ¾Ü9:ÏŸsÊ ýšªÄsç.uœâa%¿¦P’'¬Rém‚–Äí!?íhWJ%¸4—"\$}r©á8 S¥Oiîg(˜ÆþJŠGXW`kTÑÉ
+endobj
+724 0 obj
+3488
+endobj
+722 0 obj <<
+/Type /Page
+/Contents 723 0 R
+/Resources 721 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 707 0 R
+/Annots [ 725 0 R 726 0 R 727 0 R ]
+>> endobj
+725 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [91.394 694.095 110.787 703.792]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.13) >>
+>> endobj
+726 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [316.938 518.646 330.878 529.555]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7) >>
+>> endobj
+727 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [257.414 451.506 276.808 461.203]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+720 0 obj <<
+/D [722 0 R /XYZ 72 786.278 null]
+>> endobj
+721 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+732 0 obj <<
+/Length 733 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZK“ÛÆÎY9ä/lùlJcx¹*YÖJËrj½yUœRÍ’à Ð
+!) ½¶¼X?[8«ò˜«8µ6WÚØ9ëTñŒNUžgLpTb¬l±0…2Öz€æ¹®Ãϯt2š0NæQá '[€¢X7Ð ‡-ØžY§3Œ.¬²Ð^¤JÃú󓆃À>™[4@¡óá^Ã9ªîèÒhß6—¦ˆ>V«r¥.ÎdÑuÏSK_c#‰îà/‹JmêˆÛrÅ“¨ü±/ëUýxiò¨l»ª©yY³f‰LŒÛ¤páö0KlÖ/Á`§BœðŸæ`a1œG·á­ó;iù.ŒTO<E5ÈsG&»°`b±1Ëõûý¶*a §ó¨oð¿ˆz|
+6|{Ø•5îÑw3§Ò&ÝÁ`è6ÎœµVÇTÏgöÉT8'^Ÿ™L¦83¦ñõjNÂFi¶nÚÌ^ §sG¹f±Ž¾<ôrb–ĺ|@Ç‘_­ªTë·8‘žHD„$ò5 ±ÄNÄ[—%Šµ6Ú€%©9!¦ª@[-cÿ5'I° «G†í€yä9Ž£®lY“06HcwÈèO}nË}[vÈ~õø„hOÔ ÔU½ª–¶ªñ¶I@o YÚ¶ä)ž)ëeCö¶6d£[öM âM]Jf{~ðE’¨4Íøä {aØúüÔ:ƒ¸N½ØûŒ¿/ÁÙ›Bóõ†ÿ jSÄ_€réÞ’ÂD|ˆn{ÝôLYíöÛŸ¸Ùo¼ Šø™@¶÷[Ú“@ÃXÍ4 </I£Ñy`[}=ÏóßdךMFN6ÖýK™Ý®.s5-wÊ=0ŠÅd†•Ã/›ÝþÀ’€Þ7¢‡²E¾’$ºivÄb’Eë†uÖqwÙ° ûªæµÃ–‡ýž}`»ô$¼$^·eù§_ûÝÎóèº~C¾‹f@xç‘÷j:ºCÐ[ˆù¯’.<¸Bþ]B<ûxÛprb[赋®e¡ç¿Aª¸WÃÿG/îÀÎIcr¨®D ¹\Î ´/‘÷í¡œr×Éâ Jí =?YBîö|ñN'‚XÁ£Û—Ä\PNÝ࿸Á¬-+<5ÎôméûÜR8u§Ñªß¦z°e¤ ¶Œ;IÃFdõ´Ó¦ä©—‹õ¡^’Îï¡u…J‹p¿@ p ŸˆKHoÞË)–l‰hŠBÙÌMÀŒ 6¿±R›ÜT’'Y›pæœðŠ`$4‰² ‡´iàŠ‚ìÈ5îš®ç‘Cw o ÛMì§;}Ö^¼DÈA“‰h»1ÿ‘›…}Q¼çŠ=>‚ü<ÜN¶nF҉ؘ‚ WåzN±ŠCPý µ€ŠÏÁÕõü„g÷‚–”Ypü5)š¤ èª~‰‚Û`_‡Ñ㛘/îÁ`}K¼£`ûƒG3éx35ê¦^ ¤¤äÂ(kòiØV
+v›y¨á<
+ÿO*+!B„°µ+=ÖàiEÝfG%£Ç"ýL1ÁµL‘$à|‹L anÉN^äX#÷è¸z6Ý“—LÕ$œ«É+TXz‹ÁRõ.¼ƒ
+åž—:1:‘%…TØÀ‡:,D+؊Τ%±œJb—Ä À*P”À­¶£Ò™ÔÉ
+ 99zoÈ¢ïÊž¢³á¾á0øÃÄËèC…y“2T1 ^ãômuÜiU“{ÎœÁWœ\“W“àÒ\Þ\â'÷›~q{™A&½x{‰øxÝÏœЫQ.žº]0y%»‘F€Øù8Åà *€ƒ7>rŽ.;pÎ],Io ~[ã$<ðêN`?ö&Vû­_›¼LsܳtŽ1/º`^ábÁðÜæ¨8™>Áå8´õûŽ©Fï±iŽ³“Éz<·ð…=j‹Ê˜tHÜCZV”Áà²0Ìžc/+±Xsî÷<YI§,†ºOÍs}¨Ó ¯/2ã$Æa91PîJ Xv\ò¡·08rÄSjÊåAT(á`JKç¶hóX¥Yú˜-ÊÛ!ó +5pßg}ò.M²²¸8‰8Âðü©‚Õ1…oYÁE'œ¦"Œ^Qâx¨K€&¡½³ˆÙ¸çdaS
+/’"•bógRVjâô¿‘]WËÅpìçüU —p
+*á
+©ûÂðç†T€ÈØƌͪìtG ={Âã<ººÔó ”•[üˆQAvñ)/ã[HõÉwÉ‚—¥¥OV˜ìY5ËX£Œyâpÿš\ë¬endstream
+endobj
+733 0 obj
+3790
+endobj
+731 0 obj <<
+/Type /Page
+/Contents 732 0 R
+/Resources 730 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 707 0 R
+/Annots [ 734 0 R 735 0 R ]
+>> endobj
+734 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [363.726 359.886 368.458 371.102]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.5) >>
+>> endobj
+735 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [133.06 77.771 144.836 87.784]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.3.7) >>
+>> endobj
+729 0 obj <<
+/D [731 0 R /XYZ 72 786.278 null]
+>> endobj
+728 0 obj <<
+/D [731 0 R /XYZ 88.587 102.977 null]
+>> endobj
+730 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R /F28 523 0 R /F39 496 0 R /F29 547 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+740 0 obj <<
+/Length 741 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕYsÛÆù=™iÿ§/…2"‚]\‹¾¥IܨqŽ­¶Î4Κ\’ˆ@€@Ëʯïw-’òÚñÈ\ìñữ…ZEðO­r½ÊMêܬ6ÇÏÔŠÿÝ­üè{˜ãI‡i‚O/l\ûë8 M–¾´_eaœÅ ÷Ï·Ÿ}ù*ŽW*
+‹¨XÝîhÏíößÁï¯þsû×Ͼ½Ž¥a’¦/cƒÛ’ p/
+Ùú§«uÇÁíÁá º¾-ë=ŽuÐ7<÷áj­ó@6´¶ë]ë¶|®ìx–·Æó­Í•6ÁGüϵ<S•µÛ†I‡# 1 ¿:LUöÿÃàw·oo¾_bqž” ‹ßÙ£ðå
+¬Épq&BñÒ „vjzÜž7Ü×(*å¸ó§H%Ñø¡”·õ‚ToïÈhgöŒs³e;Ùþ€6iv¤ðk«Šl-¶µ7mŠƒÚ9PÔƬ@G³±½]u¼
+o:âZeݹ¶g@ÝÉnd‡ÈLŒ ÷cøÚcsfŸ+øØÙ+‰‚hn( +–Ô Ç‰Nºî\õ>ëo*Ç[f4DPòÛ…˜¼/™ì8x(]µèáU‘KG¥[Nve½q³—OM ÜðÞ¿—ͳ+É}.гٜÙà®tÁâÐ…b˜8q*?¹ªãIÆG¨liÀ3m…á<Ž„8Ü4xz|p"žeS‚¨x’&´MâÜòkj7À“×l[¢ïþƒ%¹[ ¥Ä¸“Ä…d‰î}DÃpèŽñ‘3$Ñ.œ2Á¡Y©ÍÔŠIvŒK>&<ð#íxTÊY6#ºƒ¶S˜Ñž'ë ÿzÃE·Ï edâºnJ Ç3‘t|(û£=±ZlmoyĶ”R‚MhÅ•’b4/Ë®I
+¾bsHGÜ6–_,9Ï#!Ž‰‰fî¨ã)™AÝ#FÁ|ѾµÇ#¡”äEP‰8+^ß6b!õåìqôAŒ¹öÌÅ7:p€µ1Eð®á¹é«À ÊZ+¾Èû²n„®Ü×%zBt óHZÕÔ{ä´ÎIkþŠÈÀ)_ÇÌX<oùÇ3ÐÉlë,ڂ΂ïįë|PÆk¶TAF¶‡¶Míxæþàjžóù5ì À.‘$²Aˆüd”oi`Ž­÷a£åà1¸ã„ûål+¢úâZÄ Iœ qTÆ0äx‰¯ýÝRx^›È=
+Ø–™±³oÐp‹â‰Š'ŽÃXûjlÄ‚ŒSýÆõ¼èI£õë:äsÑPOQJ¸XÉÄ©/wîÅ Ä»ÚgCø4×4~ðѨgHÛ¨õøäeŒ;HÝqÒG>Q™|TvÑ¢SœÒs®
+ µÔ^Ä[4Éiƒ7 š
+±Î:”»~†#÷q0fRíÓ2œÐìÙ2_c÷Ä{­,b¯•éqq†N öÃ7
+~¤‹‡3¯R^¨‡Œ#±ÝÍ`Bÿ9镦2˜nÏ5÷T‘)ß"äœèOÜ”º ‹q"wC¾‹éàðdSîÄÒ¦&‚c%R‚º9ïÅ2*Wuˆ©±‰“ú4@SÊ›öÞü.+H8Â4~¡ ™u '4ܲ—ÅKš¡úzDÍØk mGìqw^+ÈÒG=)Æ4VÃ¥A8Ó„¨0ee׾Ϣó^5ÐM³˜8 óLññ„Qì“–(R—U_í!ùæ·ðˆ7 J," cÑx% &›åö¶¬y(~0VãÎÚÝËpþlñI£êǤú¸t,÷®A8­O‹Ð3c1z$ÆHûÀ<m‚·2›NØlÇ:qzOą〸¿neÏLש}_É}ÉTjRF6è@î/ë³Ô·‡š±ÝŠ.œëÍxi2b½¬ wïÇÓô…évb%$l?sÁ¦|wyÇ«¡žÇÖvž„…~æ’÷™‹_*£_º›ýËëÿþÝ€N%•~ xa*ÍseÝóàUS÷7ß\óîj¬Ìw寎ï=TdB£æUídã}¹í—産¿^ðÕ€Îíß¾º}{óžw~1Ô–>ËG–­Sºäƒ\"4Ú¨
+’g{?Ñ&È®0ãÆá!¯zMœ¶ìè® ,êaHO/˜±¢Æž½§öÕ‚jÑ&`P¿ø­¶ŠÍ‹NaZXü!DYƒ…ËݘÑ>‹–Ë(t‚EÜð(éùxñi°°P¡Nó§R¡<<Tʨ‚ÆRÐS:L0èA°‡´{ÈŠ
+à|‘›‹Ï¾|•D°³ŒÓhüâÏF…ÿ¨,ãÊ
+ðÀŸ,Ö¾×r.ÏÛÑÆG‡÷ß8ÈO›‡›£Ý»yüŸ¾ r>•ù3{ùb ¦ðm"x¥ïNÙø= Lï<JÃÆòÈwÕ°Q®2‹Ìq
+endobj
+741 0 obj
+3970
+endobj
+739 0 obj <<
+/Type /Page
+/Contents 740 0 R
+/Resources 738 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 707 0 R
+/Annots [ 742 0 R 743 0 R ]
+>> endobj
+742 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [294.467 702.958 308.406 712.958]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.9) >>
+>> endobj
+743 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [476.15 649.064 480.882 660.28]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.6) >>
+>> endobj
+737 0 obj <<
+/D [739 0 R /XYZ 72 786.278 null]
+>> endobj
+736 0 obj <<
+/D [739 0 R /XYZ 88.587 106.908 null]
+>> endobj
+738 0 obj <<
+/Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F28 523 0 R /F34 583 0 R /F30 512 0 R /F39 496 0 R /F29 547 0 R /F40 548 0 R /F43 549 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+750 0 obj <<
+/Length 751 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚµZmã¶úñò úmÑOÞb­ˆ¤^¨
+$‹‰°D>=9þfÓæû-Œ¾¢±dq¨×X©XtÂ:Û"YÑ s<¼™‘$“xñ¡n¨ùP;ÁvòŒmbÒpÕ~ÛÅnÙýrÈÛëX/æö¥UjtpI$çþ?ºÞ-ËõlK>êáÃÅÆüT¬p2Ò0wOm•U óg!Û®ÜÔÒ)†Go,md,´Ýɼ­¥ûÄŠ¨‹­ˆ5f•³cÃ%þÅ#œFõ$c»|ïWÕHO.M†¡¬ëxfƒ4ñîö3´A¢½,™ sÝ´å:ðn,…[ŸªÏ÷d­ Æ5‚ÄG:ë‚W‰nçNšl35í0NØUcø\øI‚Þœá&ª»½tþÆáër##?צmÈ"A+½xsmávÜÊ µÝ¾*ÜÔäɨ·i×…#`ùá¹nsâ÷À› §
+@þ/±ƒ>’#KCœoKýØf³º|ˆ1IÆŒ~§Œ´÷ìjyÅP :p“¦Î1‚lÕ´-ûâ4ò’<H³ž» CQT¿à%l$q4¡%ЊnæœNÄ©#¼èuáCR}ÂÍétWÃ%M¥7ëšU)û¢kN9³óÙpÒq¨o)¶Äj‘ßuMuèIŽp{›O80êY—ð^<a'm9ÂØ°%·ÅšN"NÜI`|pÞDS<
+£+ò_<œj8”ó9´ B3]ÃdŠ8ˆb¿œÅ¹X'‹|YªPäU7³ƒ·ô…uøÊF^}uûJ¥tB¡ q+Hžé8ÿ«¶¸º2ÆA“+Aš=Ÿè™ŽWðÙœÝB>˜ÄÑ ‚aGìÿ#m“¹S•ˆêójq<mM”ˆjÌ >Í9·/Rö A©³MD›¾)ZŸ‚®º?ICP,¿û5èù€5È+^‚8CëõÅÃû¼ë;ðÎK0Dgt/
+—ù‹ïš¾ð#Þº¾¬ÈwfêˆÛ×ÅÇr冊¦™šxº¶`'Ìyb¤Â‘ŸŒ”:¦Ô€·’XX´äU‰º+úÃ^FKÇÀ¹9z¥ ÐÐ.(!-^½Œý;‘#göy+ùjuhq2›Zø5:zïe§çIW|̹¢Ø>‹ßSøššö-²! …Ýœ–#:3:<âœÓ#=Á ,‹X
+Ò+ñ^ÕÍ…-J!b=‘^Y÷Bùø¾¹¿w †Î§¹Î]³¾¯òWnÑY"*&±uU}=Fë°Dsd•A¤Í•±Âcf ÅUÁi[€Á Ü_Fa%†=Pœ™AŽ4íåøf¶6” €aj¤—ÓŸñ^©ÂjRÚIJIÞÙB—ä<0ž
+¿?ß©ßø¤¤ÊÊ>Ÿ¶¬¨j£“äct’:'@Ý\÷AÏŠ¥  .°Ë…O­oÊ–«ˆ‰« Ћ+ø%®î9‚¿>T½T}Ñd=’"(³x²ÝþÐû%H/œÐ àd[®f¢ñÇk಼:H2¹˜•Iæ]UŒb
+
+eÞS$á«j}Ò”6„¡«ºeÓ+DyÖ§) ìŠ–Ãad•7«cÔ.(ŸŽ¬»B'’ID§±]JŒ¬Oúé~1xõ]C1ißÔ¹t%>~ß—Eud9wûaH6ÀÆ«šzÂɵP»9쎂UrãGOÁh\.i¤çøYÂý“ô¸BJ‚`E铤!J.ø¨Üñ°-ýG,Ôtäé 9»p¬¯G–Ö1õó•SM€âz(¯ˆïòè&vU<Ašº:Íõ€uæŒÐÉPñGòòî«7·ïo¿ÿ··_s;wYÃâ½Ü?a˜a¦Žü˜1$Æ/ñó•W} ŠGïcÄùç´ä¢šáËX½?¢b`eœ€"Üvî6,_ªÍÎ]GZ`¬Ì¼€.âãý§ÙPìC[Ë!iµxÛK·ÞuÑÊ·7ÔäÄZÐ;,¹xn]†œ” è7”×½Ž+
+Ye®=ÝEÄ9¯ðÆUœúèت¦e ®2Ÿñ… sÒ 'r4gu`‰«ŠoªtLªÅŸ#Æ‘++Ð Ý$ìóãUuò¬òZvÁ\B‘PŠ:ªážVÄ.TZUŽ.ÒóŠ˜Ë²a¹Zt›ÿŽ+3
+=$£›þ„«¾ð‰G8|}w"_ù$+³Á‰¸ÍŸ†›„‰]Î:éëk_ÌãÝç ϧééDš>—ÑÏ$ÿí$jendstream
+endobj
+751 0 obj
+3809
+endobj
+749 0 obj <<
+/Type /Page
+/Contents 750 0 R
+/Resources 748 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 752 0 R
+>> endobj
+747 0 obj <<
+/D [749 0 R /XYZ 72 786.278 null]
+>> endobj
+744 0 obj <<
+/D [749 0 R /XYZ 72 323.984 null]
+>> endobj
+745 0 obj <<
+/D [749 0 R /XYZ 72 302.093 null]
+>> endobj
+746 0 obj <<
+/D [749 0 R /XYZ 72 266.653 null]
+>> endobj
+748 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F39 496 0 R /F33 497 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+756 0 obj <<
+/Length 757 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåZ[oãÆ~ß—þ½….VçFömÓ®ÓMœ4H•E45²ˆ¥H…—8î¯ï9sfHJ¢íî Ô) ,‡sãœÛw¾9Z¾Šá¯L²2©f‰IWÅá_ÑßûUh} }4S*Á”Ä·g&®¥ÐLÇjµŠ¥Záü/6¯>¿æjÅc–ÅÙj³ss7ÛD›½míÕZ•>EÔÔ¾ãÐЈvC]ôeSã[õû¼§þ;[Û6ïmG ŽWëÄDMY_%iÔÛÖw÷Ÿ]=÷Ý®~Ú|õêíf:p’0‘ÑSËìqù—™sÆÓ„tãdMÌ‚¬_Þüý»?_­U¢¢ßoø?ÿؾÄ#ý«x>vç;y8éZ1;®3ÆãÔ[¾§NW­]í^ÎYªV)ã0MàC, ¯SfTæ¸fijh|2]̤`9K1
+#Ä‚0×x¸3£¦,K¤G¡‚ g[€¶¬çr
+É„
+¼ÎÒÌ¡³-MØ‚cÁÛÕŸõÔ³Ïq“_ð?Û/SÁ9»®¼-«²Ç)4ÒìèùÞ-³Ç²¾£Žñ“ä¹Ø–QÕÔwá
+ =1ðt /Šf ê@è¬=W9$>~ tJnƒêCëë'ô ËÅŦ¤-ù¸!ß aìÒù8tÌÎûÔ ð>ÀæòiÆðò&ª·òyN8&
+è$_uAÚœ«Ïeéi.˜=Cøv¿… ®Ë¾Ì«ò_¶;ÑÁ%^ˆ tí\š¶rÇ@ÃÝB )R Íd>?Gœœ‡¾·`>È-‰F¤ Ä`ñ•>Ý ±A&r'ÌÜ iØ™(ž¦åsÐÞÒàp‡h¸)D¿w˜‚¯wS^õ÷-ˆ×ØÅ£o¸¹ñÂh–!iœAŠË˜*oB™ðÓBzü€Þ²Þ–x"ìÅOOÛ¶M‹ÇÉDô†º<#ÀæÌ&Nâ׸•<ûÀ­§ø‘œÖyÚîë•N7Ëç°¸Û7C5näÄ^ S»Öº¯¿Œ_Ãx£‡ÿ].½“2jbY×°Ù³, n ÜÌîK@«–e\C2¦¹ø M/ö`Õì¿ÂYˆjƒw– )Øœ=– ÓA’ÁCøë«5牌nš|뙲€;R&á:{4‹X°ŒÞþz¬Ê¢ìr]*)ÆÍ™Ê(’~è°ZFº´è@QRbFëÖ ½×dJhiFNº©¸å ­©àxØ"â-1G“+ú­§)ÍćЭʺ°ÞÿÉóf'ÙïÇ}s
+8æ
+&-§_´æK‰¹ÂA´4'÷Ú-ÖêD— ?B0† íy±y)žH—aö;¡¨ ×b8'@Ç*æ–ÆOÁs~ 7óØ6àz‡ŽzïË~OýÑÔ;ý,á97ôÔAcš›åmGòT^+–Šu¸ß6A‰9=æ¡sA€ök¨íE=ÃI±ïnü¨S…N‹¹-‘Q燒ª€ð†KÚ®GÓ
+ </…8l±Üÿ-¡¡Æ‚]çݧ9;±w…ç~<à²m[7 ö”™Ç œw_VÕ®³þRÁ>ÇÖßÆS=ž3ñ‹Ø<û£a’p&¸~¯ÄEå/GL’'ððß’ÁN¶endstream
+endobj
+757 0 obj
+2418
+endobj
+755 0 obj <<
+/Type /Page
+/Contents 756 0 R
+/Resources 754 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 752 0 R
+/Annots [ 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R ]
+>> endobj
+758 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [204.393 594.648 223.787 605.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.13) >>
+>> endobj
+759 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [262.271 500.003 276.21 510.912]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8) >>
+>> endobj
+760 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [371.878 400.582 385.817 411.491]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7) >>
+>> endobj
+761 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [255.575 378.067 274.969 388.976]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+762 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [514.483 222.638 519.937 232.335]
+/Subtype /Link
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+753 0 obj <<
+/D [755 0 R /XYZ 72 786.278 null]
+>> endobj
+145 0 obj <<
+/D [755 0 R /XYZ 72 484.738 null]
+>> endobj
+754 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+766 0 obj <<
+/Length 767 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝYKoãȾOù Þ‚¡‡ýâ#@ždŒM° b#9ìì–Z1"é%)?òëSÕUÝ$%YÆÈ!³Y]¬î®®ÇW%q‘ÀŸ¸ÈäE–§±Ìò‹UýN\Ðß× ?ú3ЈSoo0.=çR™8O ò¼}÷áZeBÄ…1·Ç{»þ)2q¶X
+!ut½(t´oVCÕ6ýb©2mÚ&úÔ¬Z‰h]5÷HÒÑ÷e³ÞáÛÏ·?|¸æB$q‘${)“ØÆ­p…¤ŠjÛ,d¡x»F’ŒlÙí*Û]⛎†­e²[ xy5)àãÕB¦Ñ¶lª¾&®}ïÅT =ƒ€¿-dµýp³êª‡a¹+›û}yÏ“ån×âü﫤Ǧm:°¨Ï…'¨ÌÂdÕÒ J\P Õmgq¤`éÒÑD$MJ¤uõÛñ™‰ŽÁºr5Ø®‡Sk…Û¶íþ~K_·Íîå@NIk
+ƒ¿ÏtQ¡{ä¶Ó£
+à|+Ø™s9 ~JÿÝ®’;cÄyïMßÂZâÊ‘ûDƒC‡/Çý‹ßÀÚ‚¶5Å \ YÓvêrm‰ãkCÝÐëÀûEíÛ?Ü@Wv`£*1h¯EäÆi´êl9Ðnà ÝŸ³#.q'èø-m»¶äSÀK…6®’, 6k¦V¤––„×"ØŽ£„``¢vãB
+²®máë.H>8×Í$`C0i¬];E)¼ê¡Â`ƒÃ'§c먇°³[Óww]…Z6/ôÊK» bn25[cäÁ1ú1>²àyx« Š4F>'ÐÓÙm\á—âØ^E]ƒw;[€gÉìW7üìúLôÁ>4òë:‹èÇ–?ëû}ýàõ„<[µûäÑWMYóz Î6ý„¿ã 4: 'Nó½íX]ôR^o:êö;ÛÏnFFýªlV•UL»ù=.óîÓmHìxñFÄÒ¨·
+eäI2•.25Aƹ‹üxBF¸Â4 2þWhÞ¼Aþü¥\í]H­ÁG¼?¨ ýN¯ÿtæ´Ã¶íðút6=±
+– MÐüõ9KxYWà÷=b!Ó¹¬,È
+7p=3…ƒ¨íëèIvº©š•ë´™è1=¡î=Õ_KÓXçò­ö¤|ãK‡w°}ãúZ[=ÜÖ¤¬¤¹£C£ƒ`LìYŠëssÆ |{9QŸ Îñþ嬵¹~¬úyœ‚ŠB™šbÒ½Ó ¹DÏ»wuùÕeÛžª(×ã†s•uÁ5Û¦\²“:r™œË.sÜ‚Ÿœç,|\]íH®…ßÒ4wâ ª su¯Œþ¹µ q=”]ÿJa±TÅꀴ:ÂùNI!èBr¦Þü)’:΃uœéÐÊÄ_SgÙW©";ÀF\µ¾ð/Ï|x.ú½¶%u•òP3
+endobj
+767 0 obj
+2458
+endobj
+765 0 obj <<
+/Type /Page
+/Contents 766 0 R
+/Resources 764 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 752 0 R
+>> endobj
+763 0 obj <<
+/D [765 0 R /XYZ 72 786.278 null]
+>> endobj
+149 0 obj <<
+/D [765 0 R /XYZ 72 761.372 null]
+>> endobj
+764 0 obj <<
+/Font << /F37 380 0 R /F15 393 0 R /F39 496 0 R /F27 394 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+774 0 obj <<
+/Length 775 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZK䶾ï¯èK
+:éÇêÔ­Ü&•q¢t`Ö±lü9øôBFI„ª]÷ze“ÄR^Ú‹ºº‰~ßÔ®µ½C~‰4º¾¥¢þÁâ­„ˆ¤Îh°DÎŒròg9Úƒ£ÁÃs«¾jŽr&Í¢Û=Íš ˜w²­Ã³!GT Ì›±æPuÈÈ×psÀQÜ´@apÑV¦IÔ ÷]_õC²‘p¬{<ÛÓ
+K„±*ÂuãcÓïÜ~…+JƺJ6€Q_Õ´-€e3õ s´ÎWØÌÂË‹$ú¼«v¼lß6‡@àp
+4"°ÂÒ4‘±Ê¯žSãôš'¬Å´IÕѸsª]†å9’
+k37šÀVÙˆý}À,ÃáGëvíÁ›?è˽ßÕóå£ç 0=Õ2ªzZÛí‘¡‚ GÍç–¥ÇxTÂ
+‡†Ã ¾-bÄ)Ëã´È7­Ûì_A˜çz“Ǧ¥øHW†·9øfîÎæåùá)Jb•¸¥™«ñZiºr­·+ŠŒÐï®° |ÓBOóÆkbžkç„s¥™f 1µrÍp cPk$ÌùóYà)Šž…5©®I»ÈK¦:¨”Š:gÛÑÂàýd{nÍ’" [qô­>ìY6G\ð~€Ô‡·–“U"Á¡eûuGº¶Þ®8èêÇ°ÞdžósK…×y¬!0 Ë€)Ø‹c6¡õõ3Œ’qº$ ¤
+u=-¿Nk5g„”1„ ï¾øöËÛw¿{1\`'®MJ9žÑ?\Û6>ǃ6á^Y-â¤Ê–YeÛÖRÂFó˜{⊲/Ja”‚è§G¡0튟 €4 '•"W2ɱúÑíàìL÷:¨Ä¿)Lxv»Ö'ÁØS>wª:j(7Õ”úEÓ}ç3ølæx8?‰‰ZzÝ5ƒ70W\^œ&â½ýBz„,:^QDgaVˆ½a4tÉŽè`„Óz¨æ!Ì8ܺÉñ$ fD¡š:?V«îÓ…"Ä)€Æôävîmsìçˆ5/ì@0›7î‹
+BÈ(²µô 5
+´º˜§¶·dРGC ’aOUrÀ @IôM~À`ô±ëy!Hz÷§o¾Y¹…ÌàÁÆ‚óœt7¦€±fW•¶w gê*¸æSŸ…ô}Ba‚‡vNõ
+8 gaÛ|æøŠN£ƒÿÐzÍ4 —l·ðX¯‹`uçÇVIm.
+¸ ÎlKJŽ3ïYšØþüû/nýÍn·?º¶ñ…I).q›`18ÙGÍD­_FC½DÝ`µ£vO]ïcŒiáO ŠE^Ä9Pݪ"(Ô/WÇžâ]°ñ/Ež Š?;ý§¢âì#*Ö??*^Ï3y¾Ëm;2VŸç)9-™‡Z• FŒ]Ž¬_,>f.ì½DEìåIƒc:HÓW €
+½3^}V¿»Œ“–¨B“¼‹ÑÖ@xÀCu±3yè^è#6ö“>\3(Æ’Ö a>áLìdÅ;Þ¼£§WŠ"Ô«isßa‡¾9€×*ýgÉKm:‡„9Ðð§JüQ ¶Fü&?BEI#©ù‚¾¾rAìgƒ“Á˜U ,?yUýÕp•x‘`~ëÝBfQžèÅÖ]C­Å ’P@˜ Ùš¨­ø_˜ç jD¶£yHb¥¾˜‹XÉô'¸~ç"Ô!·¶}?¯ç«‹:RaG²L(;Q*fVtZjäô…a)Ѐõ,²tú•ÙѲTW¤@Uö¡ô·"Ûc@¤ðµ$hÇ&¯gßPÒÙ×–ßtô’0ŠúºÐcÕñŠ­à³/
+—×½•DLzÍŸ$ü©ÕF Ìðg{—¡¨±Â‹Bü¥S$Z€ *L~Q6{óV%Fg™q,´ðk“Ym\AŽ…"øÿž~€ØÒ@뺡¦ß ŽatÓ/ß”ÿ[1¼¸ÔÝkß+`¸°EHyf1+ðc¯W êCêR  «£½í™rT\pTìÚK1î™8)²—œ:Æe
+ÂañÒD)Eœb‚ñ¼ÿWÉò<2•±”ÏÄÿ
+endobj
+775 0 obj
+3349
+endobj
+773 0 obj <<
+/Type /Page
+/Contents 774 0 R
+/Resources 772 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 752 0 R
+/Annots [ 776 0 R 777 0 R ]
+>> endobj
+776 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [130.569 519.858 144.509 530.767]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.3) >>
+>> endobj
+777 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [247.791 452.718 252.524 463.934]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.7) >>
+>> endobj
+771 0 obj <<
+/D [773 0 R /XYZ 72 786.278 null]
+>> endobj
+769 0 obj <<
+/D [773 0 R /XYZ 72 259.32 null]
+>> endobj
+770 0 obj <<
+/D [773 0 R /XYZ 72 236.805 null]
+>> endobj
+768 0 obj <<
+/D [773 0 R /XYZ 88.587 99.449 null]
+>> endobj
+772 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F28 523 0 R /F29 547 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+783 0 obj <<
+/Length 784 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZK㸾Ï%@~ê`¬_•Û³“L2ØCº÷’ÝE ¶å±0²ä•äôÌþú|Å"eÉ–»'È&@A-Š,‘¬b=¾*Z¬ü‰U&W™Mc™ÙÕæðJ¬øïã*´þ‚>¦ÔFÅFÓÛ „k­Ò8MÌj­LlSCôxxõÕ[aV"‰ó$_=ìíÃöûè¯eÙlÚ»µÌ£mÕ|¸[+i¢‚Y´k›;ôü6ï¤Êž_=ͦmúj[vÅc]RO‡öÔ¥ÿ®ÝqÿPJîé«fã›ÃÞ7Åñ8®?Ðl~}AsýÃ-í¿iùùˆ]gèüñáÏ«µHã\¥x’”rÇZW¶Ý‡¢©~.·ñÝÚ$Yô®Á—Æ`é*lÞuô´/»’‡ª»ªžß{g’Ä1‹ÎcWµ]Emáte_–žoþöÅÀCÌ>žoOU]ó<aç®»›œ@¹e‚SO² Æ’K}ëd¨“¨Šf[tD¯0Ï`â‹%¶Úî5á8S’>Ÿ#MT6=Í©r,žEßW¦ö\¡u,º¡Úœê¢û‚5ÃD~â}9eÆ8^¶å®8Õ4¹Í¯&C׌š¥+©÷3S´w2¬Ù=uÕ0~ʃg–Ù5EÍ=Ï.D$‚–öTlî ·{~sgÉJi
+ÿ¬Ûb»pN^×ÕxÔ¤-ÜÁ{Sj¢ñJž5E íËát„êj­£ûrÎÔ{Oq–!z¯DF›¢™mƒ_ˆ/í«’9ßrï¨s¯¾y8;)cÈdµÎÒØjsÛ÷ÜöGBÄÂJö[ÎÉlÁU ¸0°ýñwðú†û,7?$&ááÍžôZ¿ûÝdT„¯Mœau ,ÀN‹ƒ »êÊÕîÜclÍÊÆdŠjaxmã,õýp-Öf<|v²I¬S'Z¬)µÀÚ[ÚÛ…ûµq.µ'æ S@vßt#›JÇ0¸q+–ö‰})´×i,„^`3ðy2r›Â>*þDNÒíqv‚ÒÄi.=M8’–u+“{ºK]•ÞãRðéûÓÁ)%E‚–q9 Ov ïYÔÕvaS"U±6Aƒ¨«Ç…-)‹,»½¥¹…/(ã±onº²Â6G¯tÞݦ€·w¡IfIœÂf¢]Ú´Œ ’„¼‡syF Ö e=y¼0_`ÏÓ-›ÕYóf“ h†1½'O. ‡zŽþD¦‰c•$AÅÞ–š& —ŒóùÙ…ZòcÂFï¦ëàÛ:Äßë]¯%lËØ|&¯da‹0ñ4èSE>[PŒpj„€É¶¢…éÕk—H£Ý©þ!š7L£KGm•i8‹õ¢„tló <-§§ª/‰MD<‡4Ü~JnÔÅàC{Øý’! •ÅÓã/»®i— I¦oÏB7Tº8ºY¾³†ƒ°`[hÃT¨ß¶èØŸv˜…Bš6>¸PWÅÏOº0ê¢`9ûêŒyÜ=?ûÁ¢,6›
+0lŠäºvä êrWëªs
+[-W{wÅ%øŽ}‡b¼æJ'µo›ETcä–ƒÂ!µ5á~ÐÚèPZ—¥Ò7dŒ\¢í®æ0V~:ÖÕ¦ò;tEŽx;Ïü©B‚–«Á`û»5"3•¨F]=v…ÛI’D|õôÑÓ´<×HÛŠ;\x ¤Ȭ„Laªù/P[ÉÿÚ
+ѾoÞÞYíJF, g6àõxêBr˜æ3ƒüBíI‹nêß³yÝÄç(ƒªjº<ô÷„wÞ‰ éÔlËÎ]³î½yûXfËÛ–^)A>Ö#@±%m÷…”n’vé)Vœà™ñ¶ýµ/Æ”~—}_È;‡žÓ½-Ýl *èÛPáöL\¨åyªã\ˆ‹ªˆ»pÏÏe’ùO4]fütª:gÚž7Ñh¸×,é|.i zIã[Ä•%GÕ¼€0ÜÁ- Ùù|ˆ|äÚž+L׳j躕_PA™šÂB쮃/"„ÈãÄÙæYfSoO.c„­c̸Y0‚Kd…bè<Îtöß¹ovN¾¼‡\oÖ‰^óˈÐ÷÷L~U=‚¼òçªG$®ô™êQ†ÿâKÊG2ÊüJnž³/JRG—D-wf¾HZ5›ú´-ûYyUÁd‡‘Ï“À‰üý ×^;n
+Ý0¾dÀœ»ŒYÂÒÙ
+$Þt¶ÐèTží0_Ñ픽ºãøê­NH/ÓÔù¥Xá¾MX|_“Ó‘Ñø:õB¸ùE8ÏP”ÂÁ„‹ðÉbk?e†Ç9ú¿°ª/‡ûìÖ+)Q å1Qª;•¯y<ü¬M+þ©÷†YŽôs1Þ"K ðІPQíÙOb ¨?´]5ìü-Æo¹Ão ¿Dc p¿ÍËýoº¨ÖVw¿erªúë$>œ°ubÒ—`OB÷ê%B$?±"çð¼Ukqô”ôîÆ
+ÿ9N2¯endstream
+endobj
+784 0 obj
+3243
+endobj
+782 0 obj <<
+/Type /Page
+/Contents 783 0 R
+/Resources 781 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 752 0 R
+/Annots [ 785 0 R 786 0 R 787 0 R ]
+>> endobj
+785 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [246.729 558.99 251.461 570.206]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.8) >>
+>> endobj
+786 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [347.007 231.941 351.739 243.157]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.9) >>
+>> endobj
+787 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [448.393 217.786 453.847 228.695]
+/Subtype /Link
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+780 0 obj <<
+/D [782 0 R /XYZ 72 786.278 null]
+>> endobj
+153 0 obj <<
+/D [782 0 R /XYZ 72 279.729 null]
+>> endobj
+778 0 obj <<
+/D [782 0 R /XYZ 88.587 109.331 null]
+>> endobj
+779 0 obj <<
+/D [782 0 R /XYZ 88.587 98.372 null]
+>> endobj
+781 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F28 523 0 R /F30 512 0 R /F39 496 0 R /F37 380 0 R /F29 547 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+792 0 obj <<
+/Length 793 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZ[ã¶~ß—þ?jŠ±"Þ$*6M&ݦm‚fТhŠBcÑcudÉ•äÝL}Ï…’)[žÙ-Š )»¢HŠ—sùÎÇC‹Ub•ÉUfÓXfvµÙ¿+þ{Z¥o Ž{j£b£ñí•Žk­Ò8MÌj­LlSƒý¿¸óÙ0+‘Äy’¯î·Ô÷¾ükô¶¿Yk™G¥ë7]õp³–6r%×U ?{·ª¶¹ùÛýoß|u?M$DgÒ¯+°úi5–¾yaÖì|,kc®ïíúH·°D£¢açü>Š¡À’ú¡;n†cçü7°¨Šª©šGߧú—[—î
+¨™œ–s(º¡Ú뢃®™Œ¶í4b¦¢¢ÃUf:j»Ç¢¹K~-zÿäG]5O7¸ r|ï‡çüìNf ¤’0±ö’¸ÿÒÕnpßÃÀ?$&‚¿šI.q’eþ£¡xÂõ‘Œ2m¦»b\4WºÅ”E®«ŸY
+ÞßÀúªÆëL¥ êìRp"{³ÆË
+1I¬S‚‰Sc§-)µ°¥»°q.GØš#Õl™æÔoÚ§Ò±R°OØ®HÖ¹V±‚ò:|Ö û÷ãdhÀzˆìå@ùŽ<-vsìúê=Á& ¡¯D3¶ÑûLUš²%ck`Éve°‘-Y¥š- Þ³Íd»KÐc%Tú*ö€¤Ò¡bõ~ÇÈb¢} ñ{x`á—â€xßUÅ੪­Ç|3:{
+C‹Oyöá[+)ˆ@¹hÆuB¯ºm]{Ia(¿—<p^xóH…_Ö}Nnk.‘Aˆ7H÷ Yˆk« ”G !h8©œ]³iiá¥ãª‚{œB?¿u\ø°«6X¿ãW
+>PÂ83ur‚:íŠÞÏPw®(Ÿ¹Öo¾¡¶G×`$ p¡…ŽÞ5Ü­(Ë
+ås»°»@/FFCW4ýD}P&Áx8½Ã7á# ¸kº«ÊÁÇ Z ôK›ðÈ…:¬³¡ °j(q÷#ÊýÊX6ÎÒ1¸vîŸÇ
+Ñ–È“ðmGÏÁwÕ´\OÚûP³©~H„Þ`KÀ@Îüo- ” Or\Dí+4 ˜cœŠÓÒÏQE[`cuÝ/Ì~ÚO¥}6³DŽ´¯åJzfQ5ô\ñöíÆfŒwPÃt ç~ŒLPKB=îñoçVÄ2ÏfbÁ`´¥L â0K¦ ¸úªÙÔÇÒ3A%žxøH_ó‘ˆéPLÇ!ˆG¡ûÀZIÔ½õ,“˜RQN"®P½ëº± »ò´Ñ¡ ]¡9KÌ9 ”˜‹µ}_=ÔŽMhðF6qrèk;_ð1Á›ïèõìk86`KnþP »ÀÎåŒö eÏí~Û7¦~{XDçùûÂÆŽ½÷³ÿáÓÙ|:W?%ýÁÀö“Sõ±Ô'ûߦ>æc©}Y-Ú¸1°93¢ö#{º©´ …U*€{¸äã}¢…0
+HôúýØû[T;W—£qðÓã¸UÑ+¢Ë~N¢{{÷ûsr~ê0„۟˜•¼ýÙžQ[œLÆÎTîS&Ö5Ä̵°”è’I |£(4î*`Õgî¨Âuí<[ãŽûåÄð•7X1foxäX;ŒkëŸ÷XFÚl|u5LÃ]Òõ¾Úˆ#Z˸ª,ÐÖÚí=ñá
+•9T]WàΞù•X™çIÃúaf© 'ÐTÄ™²_ßþáþ»?¾ûÓÛû¯
+¿8, >Ì[ywËË¢œùdl€N™9&PŸ¤ìSŸÝ”mëÝÀLvhG‡ƒZQ³¡O¸þ*ýóÎaV ú#EÂÁdÊÌTÒ w{¬¹­õ}À6W`w
+ Þ8õ‹éÀ‰UÁ?»dï4ÓtD›Ù‰J !ø'r‰œh„yŠŒìVú#=I\KÊ´™ ã!DÖº-Ê1]<UãáÔýx¨«M5çô+_oMtUà÷œCNåó ,ÈK çjÃçlXŸ
+ûØ%
+ŸüÀ]¡ þ>”3¼Ž ùòs ¾™ˆÞrS˜JÉåÈ¥j_
+röŒ •ÜcLë\¦×š ¬>Œ~}µA Åš
+s¬KGŸ>;±Q6ç+ úŒ¢b8#«õü–‰Ô*Ƚ`àÆ'æc²>¶WÊpL^¸+Êà¤'äÇ…9¼2Ã@¼Ÿt\Èõ¸œÆ¯Ï'
+Ýýl0ü…f°Y‚1×ú¤ÄÜ7Eï–²oK ü‘%‡ó{–Ni7ŸÜB£K<åZ4F;š6!8ö °šyÞùÉÕºÎm(ÎàëÈ4ϦÈgÞ“O—wô‚‚!:ÉÀ dˆÑß¼€T2ϱš|Ì4KéÇÈ[ÈÈ–‰¥Cð¯–Ʊãy?ñé6냢 ©/ÕŽ¼’ùè,„Ù`Óø2Çâ_æ
+¹˜f8Ù;6>ð=ÁåVdÎW )LØ“þ{Ï ßzTÊlœè3÷¯NåùÕé”zlJypžŽH^ÿMU.âPŸ`èÅÌ‚ž2 l86ƒÚs
+ãO×î<1–RÒè[&~š¤ß]çÜ×õóawÊù}ý»¿|÷.þòÑ7]dýX¹×³~˜Ë^Èúá-ÂÇ$ýh\ÿŸÜwÚ—¹Ã)ï/ôt‚Vùwíóf>-ÌÌïæV‹@4…DÐð¯ÛÃó¤ákÜ_AÄåðP‰xâ‰(ð g+ãó3ÞY@Àò941» ÞïÚ#%Pà&ÞBO䘃)>E6ÿ-Oq€Ó
+endobj
+793 0 obj
+3203
+endobj
+791 0 obj <<
+/Type /Page
+/Contents 792 0 R
+/Resources 790 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 752 0 R
+/Annots [ 794 0 R 795 0 R 796 0 R 797 0 R ]
+>> endobj
+794 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [206.657 748.292 212.112 757.989]
+/Subtype /Link
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+795 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [423.502 364.272 428.956 375.181]
+/Subtype /Link
+/A << /S /GoTo /D (section.7) >>
+>> endobj
+796 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [93.818 283.583 102.784 294.799]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.10) >>
+>> endobj
+797 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [104.977 77.771 121.36 88.73]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.15) >>
+>> endobj
+789 0 obj <<
+/D [791 0 R /XYZ 72 786.278 null]
+>> endobj
+788 0 obj <<
+/D [791 0 R /XYZ 88.587 81.059 null]
+>> endobj
+790 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F39 496 0 R /F28 523 0 R /F30 512 0 R /F29 547 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+801 0 obj <<
+/Length 802 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåZYã¸~Ÿ
+³Š¨šÑÒ`eœ©Fëè«c+‰†Ñí+Øͯ±£€-hŠi[Ü*‡•¼ôu5­¢B70 μJQø¥?ûÃ-l| Ÿ(aªâ$—|Cб?Úñ\ÿŽ²9aKšæ caiï–ˆ‹XÙUâ_ÞuµýøÒö(ÅLQ ¬2‹þj«±é» “@Ájµ.§ËƒD±?Ü„ÖW/HYƒÉžMKÐuÝg\§†÷
+­¼B©H!„ÔÑpF»½´V2ÏãRË¡½ë@®¥ÞÖ^E éµªÌ"ƒò|Â?}SÓФ‘0ÜZóUG¥"²¦º…ÙЬ
+4ˆæôk&é­IapDÒÏž>u¬÷ç7êa©¢aÓï[ÞøÁ+¤åy=jhXìUzYýüt³ ž|*)é‚žKÍ@=agby‰{Î&˜Ø4Q‘QÕöƒ ¹Ñ6ÎxFÉ”mf’í`ÛuN,•j"Ét$‹ïõ¹®¬d!c•à{d, ~üWâÆ[¼è×ÍÃ1^<b,†~Ä ¡+_ y,sùc"Cg:ÿÿˆ ÁTZ­A‰$Ú¶ŽoWy¢¢wkïzúݹþ¡µÛ&ö>2TÕÞ¡Õª4J¨¿áñàÚ=1Ýoxƒ§[ ΠÝógÊ«ººÁ
+‡a‚¼ëåukÜäùÀ^wfÜøp
+ífM–^7¿°Îv¸ñHf¾vý–Æ&‡QÛµÙ·#­ïยóØ;¥TôµÆ×'>B͹‚KÉ¥)rKuÌj£2—Z“FŽˆX Å¢òv•¦BEƒ@éÚ¦î่Þ?Ý‚ÿ
+ا؛åÚ‚çw€#š,í /²I¬!¬áNc
+nqÁ%Xqž5ßïv^»{7Ø(¢ýɹ ؃&ÙŽgyFgÃ%ýºf烑b‡£)"¡ãaÔmø,Ž ÙNpc˱”í•Aû“ÃAÐdV°ø²”ʇ(ƒç=ð`í¼>wôÙó/É L}`:‘á10üfÜšÝé.Eôh;ë«Á1µN(XAÿ³kF’[–ƒ:B3^¶ùq?:÷¥n;Ó="‹Šœ[Ä5h<¶‡Ýæ7ËÃ5MGmA®Î|nêqã¹YƒÁ,¨üI‹=À£fk» 
+X¡íMmëÏÏc2î
+a)É>™B¤™œEÞŸõ«ó t¬´þtN‰ÓÔ<¬g Äg¦¾`àÓ<ÄÇÏAXÀœ°Â'àîÉF!Ëh¼§IHP[›
+ùöôjà1¯ªÐÍ/l^Þ0 *]w·…Š˜ñM·îib îD˜
+r
+ 'ÖÚëø4Š<¹
+ɨEËs Å.-à³ä½Om•^DØ@ÌdŽó4ÎuÈ1K9$´TH!¿X"!ãlÊRÍ…<ÿnŠæyÎþµ°Œbè~@ ¥Oןì™aVò88B·Ä)âB/\Zùtªw“=ô]=œru˜©ÔñiJêóÂËïÑ™úpBß°>Ÿ€)Yx‡³ÀiÄ6“÷Ú/â$ 5¯’Ã6öGG‡[ž«‘ ѧEà´dÄn…œÏœV¡#„Õ
+ú*†›ì£ Ç¸~ïýs)BÚ ­sÿQŠ#ØGð,Øž0'¯^N^ºÂ|Pösú¹##<ã'!ÞYp¸î£ ¯MÁûü||Ô)
+> §E¬T: §
+:yß4¦éèæIœJù¢gÓ²˜YÃõ—m¹p´uœç IJ݆
+W
+î‹3Æaò'Š+N4c¿‘¡kö[ 2®ö‘Io<ÅàfS|^ n–ú™;ÍñÕÉ¿LõŽlF_VIÈ¡Â ×YÒ(v¬£o×<nX㉈ëÂÐÙZÁؽ*×f’h‚JEôñʪÖÒcv~ŸJUÿÚWÔxŸžŠÂ_oÅ8Ï,•BLM°¨«<×@R¾2 [’ÁÒ›™­÷Žûj;T®aÆòÂK]ÌñáÇ;æ¤,ÿ÷ªøš.ö°÷±¬p¤ƒû_V¾¾%Ë +•ÙÓËÇŒ³b«“
+2qö<ÙnkÆðÄrÔIróšV¶ÆYj\F‡“‰Uq&2½èái8Ék=Ä~ÆšþÕ8á \ø
+_ïP :½¢ùj‡à`ˆC ! Å'Äæv*¢Á‡ Ælu hREDPég…¦:|ùˆ… –®£Æš÷H€  Å–$ZÃl¨™bÇ .¨ÀÆÍ¿—0
+ü}!?0¥ˆ³$Ñ0ž矚Ú2uC?¡žÏPßÂEœâ«ñI&è¨Üj?îÚ¦jÆP½…”‰®ËàLŠ‹ÐÂ3¦²m9{(ÐÅ©dÉq·à7 ô›Ÿ×낼a([·š»ÅÀ
+ õeiz~]x?þ‹ÄEådŠ©Y ù'ë»ëèÏfõE8 .¡ÈIˆê'ÿv!âøendstream
+endobj
+802 0 obj
+3305
+endobj
+800 0 obj <<
+/Type /Page
+/Contents 801 0 R
+/Resources 799 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 806 0 R
+/Annots [ 803 0 R 804 0 R 805 0 R ]
+>> endobj
+803 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [430.559 694.403 449.953 705.312]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.18) >>
+>> endobj
+804 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [156.414 245.282 184.293 254.979]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.16.3) >>
+>> endobj
+805 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [263.683 218.184 291.562 227.881]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.16.3) >>
+>> endobj
+798 0 obj <<
+/D [800 0 R /XYZ 72 786.278 null]
+>> endobj
+157 0 obj <<
+/D [800 0 R /XYZ 72 559.575 null]
+>> endobj
+799 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F37 380 0 R /F26 391 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+814 0 obj <<
+/Length 815 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíÛrÛÆõÝ_Á·€3&ì—¾¥ŽÕªNœŒ­¤M§‘KcP
+±…s=\Ϧ6¡­!·ñ@—†ñ* c8Φçð¤¬@Dœõ|Œhõ|ÕÆ_ß‹Á†Æ‚´TZõyèjW®?T®m¿XÑg±"óLVÔ::`ºãAãÚÛ%œ ܺ+?.qÀ—6 P5<ÝÖ RTK•³:2˜ÂZ¤¼ÈÈ f䜤ÓÕsXLi/X2Ž$Àl¢½TÃå*Ñipµs3è´3òÞ
+g0Ú(Œ­‡+š›ãÁU(ŽŽÙ.[–CѶ°³)Öü{ LÂ
+æ¤T˜˜|±ŠÑpsñ^
+z[/·÷¼RnDÍåºØóÒ-!—4Ùò™?:¾Ãe¿±kœãá¦l»²Z Qhs<jŽ{)Ær/Ä´Ö(
+°ÎajšºbP#w‰AäCÎÁ5á2fE=ÓZDaÚw1=/P;Xé1˜¾fƒe¦êÊñ`Ò5À
+u
+ƒeKÔyå«ò nkBeÔéLß°-@˜I³ld iªÞ¡+èÛèô½ß£üp|Wr59m™Àcmžü¾–)ÕaO}Ñò•R´Ã —Ãͱž¨ÝÕÇ=’% w#°x=<åöغ0 ñ"·jÄ0±²2©ºI'•É„Å܆Ê4
+Yà§
+lr?)N‘qÄt ®­Múxw§ÂÔèù+FÙæ¡;À0¢Ô#Ô‡+–‚Ag Á}`g™Á&`ØéTû¢ëÐë”͇FÓ»Û{ê^
+Ò[Ë%À¾<}àâ°Âù¶FƒF ¸.–4@Ò VÛš1lJº¹hîy^¨±o}ë(zÈôZ }ÓÔs(ˆÀøŽZ4£2%vÐñ<é£“ë§ æǪn!轄ÛLùò:47YÌá $°©ý.=Td¾xÎ(.XÒÕK|
+±ÜÅÃ:U«¼nÛòšÊvÀFr€-æ·¨nÜgI?µ&9‡ËlRñüC&5Ãå¡Ül|Ç@M#
+‹Z°_y{1äõ±“»N{Ì5Lµ¹í5îPs¾â€ºü·Àlœ˜}å(Y/º"”•b¥’c¨Çra¥òPÅš¨·P‡-¡öôU}8±".+4ÿr”ŠbR¨ô–9&Â%ÝòÇp¼ÚøÖ$½sg¸lÍ%ÝìHÆíñºuk¹ÈX`§]7åuÿ
+endobj
+815 0 obj
+2620
+endobj
+813 0 obj <<
+/Type /Page
+/Contents 814 0 R
+/Resources 812 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 806 0 R
+/Annots [ 816 0 R ]
+>> endobj
+816 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [179.666 149.485 199.06 159.182]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.19) >>
+>> endobj
+811 0 obj <<
+/D [813 0 R /XYZ 72 786.278 null]
+>> endobj
+161 0 obj <<
+/D [813 0 R /XYZ 72 332.868 null]
+>> endobj
+807 0 obj <<
+/D [813 0 R /XYZ 72 266.745 null]
+>> endobj
+808 0 obj <<
+/D [813 0 R /XYZ 72 246.35 null]
+>> endobj
+809 0 obj <<
+/D [813 0 R /XYZ 72 194.615 null]
+>> endobj
+810 0 obj <<
+/D [813 0 R /XYZ 72 145.002 null]
+>> endobj
+812 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+820 0 obj <<
+/Length 821 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZ_s㸠ßOá·Ê5—â‘zÌÎ6ô®;}Hçz77ŠM¯Õ“¥œ$ß%÷é ¤$Ûr’vÛí\&¢HàNºàð—.ŒX›1aìb½“.èï§E}sD©´dZáÛ3„«H¹’šÙL#ýûÛ7ï®E¶H9Ëy¾¸ÝzÚÛÍ?Í`.]®ÒT§ÉM½mÚ}Ñ—M½\I«’mÛìit½Ì³¦¥Lz$[}(×HW´ËnÿòæO·£
+yÒ—èțёÁÓó¤ÙÑ(ßý´Nܺüž§Êmp?8%×슞“ÓV/|'UÒ´ø”IAÿö[¿¦$bÈÊ-=i_xn–¸ÁrG\ëÆOˆ¤jŠÛ0/ 4GãLd¹õl OönßxÝ`¼õ2eyØÄD“€R~z0Œý†@Ñõ
+º–·ð,¹BÞà60ßùóÂuSwî烫×î-îÈÇO'Jk1* +^-x6uõ8²é‹Á¸qpžŠ^W9=
+íí…êpRDbUåwÍ uÁÄ}¹w욈?
+¦Ÿ¦ÏÔ¦7pèÊÚ<ñÅû¾[Z• ‚âœÿ4I1¯¬ ð‡ SÔ£µ ôY@4ÁæaG
+2ˆàÇ%y„¦‹0  Ë„þr0°…´âœ`à¦/ªr}UªÜ+üo±€rºÔÓiã—%8pQB>¡BA ¦ô¤qv¤urp5ÒMƒKS®î÷ ’sb+ð.è ˆW î‚1¤Lò±BÁÅÍ‹þ„ýÞ5"È9xI
+`$suù7ŒËÜйÁçÉU
+¸6ƒb;h(m4‡zzB6ô „Ó¢öx™òñ«I€·rãB•Ú5³¯øg:¤a“¥“Ÿ<o>Ìå
+<ì9ÍT6 ‹=ŠîPáJ`´¥IH„4±F>pa/Ö½kQ³¥gA´c÷ÈÙº@…Ù+Ü¿ª‚+ø²!º_Ë~G„ LÙFY¶®ÅF
+­·¯hn ¢y]Ü©ÐÆ"UÈà䋳F3:3ËC ‚Az…šbÓf(nñŒ³”ÁêEq<
+ƒG¨–uÙwÕÌ™ïƒ-ÅP˜´ÝŒ+ˆL3Ž·/3790Zý
+endobj
+821 0 obj
+2074
+endobj
+819 0 obj <<
+/Type /Page
+/Contents 820 0 R
+/Resources 818 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 806 0 R
+/Annots [ 822 0 R ]
+>> endobj
+822 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [478.083 291.566 497.477 302.475]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+817 0 obj <<
+/D [819 0 R /XYZ 72 786.278 null]
+>> endobj
+165 0 obj <<
+/D [819 0 R /XYZ 72 761.372 null]
+>> endobj
+818 0 obj <<
+/Font << /F26 391 0 R /F27 394 0 R /F33 497 0 R /F15 393 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+826 0 obj <<
+/Length 827 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZ_“Û¶÷§Ð[x‹&€ Û'»íeÜL:y¸¶M§Ã£ Ç©’”OJ¿|v± þ‘xg×ÓÌ$s
+¶MK®Ù[ìÅ0YÐwáÍ?ïþüú66^BŠP)É{Q•÷D5“(eÇš‰ZÛÛº#1ýÎIAYƒè}Þ— m­Dt}ÓÚŸ¼ ö:­¿„ª<‹¾³Õö|¨8èʺàñw¨Ñj-&I
+<£Ìé’wÝ÷)¥†åØÊ ì¨Ýƒ|ì©«ƒÂÙ¾ávg©ãTJƒþ+^¾ÉûÜØ‹?ݤC¥5\
+#“<}O_±¡Hc2wµ³ëðW»­šÕ±îÄ¿¾¶ý_ëm«²¶ß5]‰‡ü}¤#"(k¦¼mêþÝaBxµA]ü×Éf²C™¥«Ö®¶/ÖJ†©^e¡r%ÓP
+‘>¾»šFc>ÖÙ½ÙüpÖ…4G4~¸Yƒ)òU"E4[¢ä%€`$J[”„’ž ‡¾rVá¡ü€£¶¦Ï’yâý*DéÚÁ)šáhSºäíù&ÕAx³62†:
+ìF­®Qâ‡HaàawÀÆ°CD#j
+<ÿ€OfG†'ªÒÄIÐ!ÌÄ7k¸
+|k_aYï¦Ïs 9>µ2øº:vÝS
+ÛÕvœbÀ¹Û•[~Î'üðOý;Ý­K£ù¡žÂÖÝÎqÂvì‘ ~ÄÓZ3®-Žmk‡­Â
+\dPʹPÆÉ÷+ßûæw¤C}ÅS†™zºÌþ4/ô!‰Þ{R—ׇ”@tM½ß^ˆY£Ÿ‰É ÉK|‘Ok,£G æÁ$LæXõÓ3ÃßDAw¨Éæ¾PŠ„|!:-_v” />‚ÑœéË91h÷hrc¾#;
+šºâçÆ¡<Ùj=ì>UÁ“ã†LÜ™9™†‹кs€|¦­éɆ”×…Y$¢ZDâßÌê%†ÂNÿûh;ô^xU&©i— qV€Ý .ó:9·RøWؒ˾p<p…Wu/“<x[…©É ÛÌ øeÒ¼·o›Óež‡c?Kš§%iÞOúøÒQtqð26féMp—ð,pôY–N¢Ù’«Ä_Ö2რ$„ÀÓ ÿøC[Qꎈ—` õudâúÇ Mù¥ƒRÅଲ9–.sN=æœ:õqru*‘¼<•HQrj®²hÅ p= gÀœ4ÀŠñ‡øèöyUÙ®÷q£ès@:OæUùP/Vj ÖUìë› ÷-£É]˜ˆªðnáiá²’0–Þl×Ä)¯7 œÐî"õçN`à^Ð:?Q šG×¹83ÜBd09|rÀ#™»s×Ûýeq,l]TMg9œøäÇLÌùsÜHksö± ¦ÒfvŒTJ×¾> ®4ËP³ý¡;C÷+]Šzú"¾ž^~Òp2]åÆ¢M¦ÇÚš§À»Üž¹B¢)£ÀNå’ÖGª;òÝ.Uáñê Æ^ ãY·ô=Éó1vA¤©m Ó&÷Q–Ê20•Ó‚CÛ<´ù~Oþ'ø±ÒgüHåÚ¥}|E?Dä,azª¬ÔÖ¤I.°æ¶0û’¦ ª°Â²PžÄ_⪊Šø\‰qU™cÑÏìgŦ_—‚GÖbþòžØõˆæwO•`ÒbÃgÕ@‰ÁGBs>ØÝR”å­^›Æ({2ìgy趫êô{8º¯_òPóh9z;ƒs½Óú0ü¬* /_/•“G¶çOb{^f;=O
+endobj
+827 0 obj
+2516
+endobj
+825 0 obj <<
+/Type /Page
+/Contents 826 0 R
+/Resources 824 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 806 0 R
+/Annots [ 828 0 R ]
+>> endobj
+828 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [251.484 314.898 265.424 324.898]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+823 0 obj <<
+/D [825 0 R /XYZ 72 786.278 null]
+>> endobj
+169 0 obj <<
+/D [825 0 R /XYZ 72 444.487 null]
+>> endobj
+824 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+832 0 obj <<
+/Length 833 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZÝo䶿üû9¸Õ‰_¢Ô<å’¸pƒkž>4EAïr½Âi¥>bûÚþïጴҮì; @ ?,E‡3üÍC‹UbeåÊfi,m¶Ú^‰ý}X ¥Ÿ Ž$µQ±Ñøõ ÁµVi¬ÒÕZ™8K Š¿½}õæZÚ•Hâ<ÉW·» z»ý{TTÝÕÚHõÍã·Wk™BñÍ7\u<ú†ŠMq¿gÁÇõ±n‹®¨+úþæÍÕ?nÿêÖ'˜Ÿ«}ú<µOËj×ÂÆ"3åÿ!‰·ok˜2½¹f¶´µ±Î‚ì ¨SIm\ë±”GÝÞsÕ•´ÑÞ5nÓá|Tb£¢%™ªî¨ÂW›¦ŸE[¿¥^uC¿UMß]¿£Š­ëÜ\‹»‚Ž¿^™4rEéîJÿê…Œu¸ ŠkzäÁâá«sEUT÷¤¬®Ê'*}ôMÍša„Ë=o|×7•ßÆ¡M¤qŽN0¸Å•Ë,Fî«mFf:TÙq2(„«™…I5‡-ÚrõŽ~]…¿&ò¯Ú`6¬†åšÈ•=´wíiHØN_‘Rw<–©ÔQW“L7ÌoÇûÀ#òH¿ô¾EÿˆÖþ¾¨6ØÙâ†CWßð”l%±ZóðÈ<‰ÚÒÑa †çhéÓ5žëû÷_Zµà¸èÊàÐ eytðŽl…ÂÝÞu4‰ºIèô‰híQMÝûü¥íØ
+ fÄ`¬Ñ~:;·ŸI¢‡¢,©Ä‹§¾'/YkaÀ'‚AjøÝ%aÅ#‚‡~é‹•h˜uq`uþñHÚÁh穾eƒ@‘Ì
+½f®ýzjFÃì`ÊJáÚº²¨ð ª4: Þ¾í¨i\RáÄ´ÅÖ7´p½÷Þ“s(l‹vÓ·äAuEZGËÐQƒG'ïàL_ýx;"¬|IÓ ¦–RR#Äb=¶~X ¥ŸvÏ°‰`×ÄBœky¬rý<¾?¯ æ(†¹7¼^%ØÖé®ßR&‹¥V3çªw(¬`ÏŠ6>ŸÖZ¥*NsX­ÒqbÓçÃÏó!I
+¸`r5n¢R ›x½³8—úä+É°Ž3`%ý&>ÅkÃsáJ¬H&ºV±‚ò:¯Ö +"óXb,b’ä¿¡#!3¸ô$¬ý½;’ý¿#}Ž#‹R‚„°ã:ÁXO˼¢ãÈfC¼J±ë« BcKD¤ñÇ„+”èH‚9 xF}8–þ0o¬gB€º“0<FC$4óqêêLyéIº$ñzGrä‚-†6hýâùEÈ<B8=xŒ§
+JîÏ
+g¼C¥$ôL¢µM¸‡¸gŠP s"µ8…KJçšû>l7A•EÛ…½°hÔ¢¡ÚË“V' šUl\Ird,9lú¬c¨}¢ÒÞaÇ“õTô°'Ú*áQ–ãXdjh\ 6ÀÏË…LŒ¯” ç¦õþ<̦Yp\<¢©Î¾„Q˜ B¡€Fæ_J(.‰@–¾
+^L)% øk³é¡N^/í£"0xÊË;ˆ1‡óɆLU¸æ@‰òëe¿h¹5„(ð,“Jx´4.P·t:®¤¤ þP–³.8™ÛPm¸Sp¶Mª`£Ð|?¸¦ ¯
+‡Ä× `LT:jKÏP#4..G¦6ÎÆ;ŸÒÚ–AXÃÞMˆ¨:Ê||FeøMd¬ó9ɯïÀ?©'‡Ê•KƒOí‹û=5ú¯ê&äÔ´ŽÞöìÃg#XvéÛ–¸?¨©ÓSäàÏS?RòÜ&Ž={¡ž^ Ýƒí¤‘Ÿúç ìD…8ôb¶@Ûó!¤’±”æùlØä§fgendstream
+endobj
+833 0 obj
+2678
+endobj
+831 0 obj <<
+/Type /Page
+/Contents 832 0 R
+/Resources 830 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 806 0 R
+/Annots [ 834 0 R 835 0 R ]
+>> endobj
+834 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [410.849 631.362 430.243 642.271]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+835 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [140.909 460.239 154.848 471.148]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+829 0 obj <<
+/D [831 0 R /XYZ 72 786.278 null]
+>> endobj
+830 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+839 0 obj <<
+/Length 840 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåÙŽÜÆñ]_1hfµ¤Ø+
+à YC– ȾY†AÍôîâc^mòó®êªæ1ÃÙ•ó—`±êê®û‰Ub•ÈU’Æ¡LÒÕöðB¬èïóÊ>ÀAj£B£qö ` MfY j•\†¿ŒCˆP¤’îúËí‹772Y‰(Ì¢lu{ç`nw?®‹ªÛFšõ­øù;Û}°MUT÷#Ñò°SWÝû¿^Ód»Ï›q$W% ›Ÿn¿ñ·Û ¸?ÈB÷àm¡ÊÒUcWw/­ÂÔ¬ÒP
+u¬V
+#­Ê•Z üßöæF˜É0]jÞGxNP
+gñº±]ßTn+Yw{K0ù¡î«L×Íë;øŒk$|Z¸«›“£íq жø mw´ºÝÈd âηåǼhˆk3•Sq2ôìuŠ³ %ÙD(¯v ˆ¤u:A#Ð
+O*ˆR1p•€Z@v!þ79Ù?{Û<þPÜ·¿;%s–A"”fS+á®®Ú~»µ-èn{†äêª,îsp¶]Ê㤠c“>‘È †Üær&ý¹lšLý_%sjfBàVG· C°Æ
+Â2 aw¥ÜRWŸÀxi2ºY
+aŽ£Ä^#Œ,w¨cAn&A7ã¬Ì2Ä }<àœl¯.[‚yØ[´Lôq4ÁÖ‚ˆÖõä\MFq Foæ¯qþ#_ ,j
+àWK .xÂ÷‚‚ý•œ
+¹oêþØ^p‚:2ó§c°€¤ ùt4\pÑ€sš¶pyu,‹áΛMªÜÀ~ÉQŒðF-õú£Pú®xI[#oì±!îhõ¡èö4¢È
+êvO‚ä´WKsZÛàÒDQ”rKXw¹%,Œ¹%Lè¼u(šíhÃ%txlp²¨˜;„6ä!¿"vq·i»áIéìI1)«DýsÙ 9hœRO&Y·mA)e¬§þ –dKÌj¶ØŒâæx±ÀÊX„ë3…›Š²rêMNpšÈ¶”;z貆|·ƒã-Ù¹¦Ì%VžÚ!±oi$´@Ô¤Âd“br©–”nįñÅ$赌ÒÓ,¶eµ&÷T®Ù'ø ïj°ki…ÔÁÒãh
+I„&Þ£ŠÒBÞ4®ø|äSΘ<à#Çô%“†ì&”ë’%!dÏ ã‚™pRŒy!UüÛ.°EFa*ÅWrÆWÉ`X`M©ssK…“«iJªÜŽ·8⪠*+¨³¶–9¦Lw‡€æ™i¦àn©žÇKƘ„*žeéΧÇqpqq=2ÙÃu¨ö 2¨ÿSIÁéP• ®rÛ7õõ:.Øjë’«ÁÕ’Ù`·…@\tŒ±IC×k¶¿X:eŸ\±ŽžZfšÛGŽºÖu˜Ì\!†D–9‘ÑÜÒ¡‡¦è:êÃQKw¹S¥æ7™éM48eQº¶„áÜa/øÁ |~œ}M4 <ìŒ —¢¢,èɨáS뉒ǮsƒCûœYcÎ$ô-ÍÊœú²*;¯–i™jŸûÃpC#j,qÏb;âLŽ'½¯ÁñÃÞú†I"ÁzÍIQî: ê’ á¦d ‚Á$"à!¢OŸôa+&òý,3m .ø”,u¿\v*‚ª¹1;D”csQqë¿žCØEª °³eÉ#6Š@Ei¨õ<Æ0·¥CDt¬""nMéW)õO¬¸ïú@xãü:Ät?(9©Ë|¼ô¤ ^‹K³¾›ª ,áæØ Òq§Ãç°ñ.•†Þù>Û)½Ôßl}#uÖM¤1õF‡îªòm"쳞v!Ïú«\ bÞ¶Û£gEÔ¿Šjkýk‡Æ’3-ÎÜZk±Ÿ§ á¤Ñ”Ó§/FõS uY±EÇ~M»{îäI9MM}ßäN4à,ußœõ«L¨ öY Ÿù¯ºU„á™fÕ¤e„¦Ì$ì½]Ð…¡wUý  \,Ažô³Þ½º{5€A¼Œ2{sE@ßYF<6Ô+›h7. îz¤ìhp
+Øýú‚2Âè&éÍÂ+ï&)ñئ‹®Ï!ý#°ÈK,æD¥3¢ŽÍÀ/gŽô@NH©áuçp
+endobj
+840 0 obj
+2736
+endobj
+838 0 obj <<
+/Type /Page
+/Contents 839 0 R
+/Resources 837 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 806 0 R
+/Annots [ 841 0 R ]
+>> endobj
+841 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [311.56 694.403 330.954 705.312]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+836 0 obj <<
+/D [838 0 R /XYZ 72 786.278 null]
+>> endobj
+837 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+845 0 obj <<
+/Length 846 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZmoÜÆîgÿŠë§R®á¾ï¢È·S7F€¶ê§$(hjå#|Gª$ϲÒþøÎììòåŽ'¹Ah!H\îûÎÎ<óÌPlSÀÛ¾1VçÜØMuxÆ6ôó~“Jß@õ”JäJâÛ·©çV¨Üj…ý{ýì‹WLmX‘»Âm®oCßë›ï²~h;sµBgeç±` ²êŠÊusõÃõ¿xÅÍl´¹–6NqÍþö§£ïÞÔïúï UÀ/£1‹m‘³4$¿Â]f×»+n³cÿ‚–vþvr(¯¸ÉâKÓTx{µ…Ú¸ÇÛÎûnbá
+Vdö{¸ê6Üñ³¯®'%R¹Tj³Õpip‚‹*wY ƒë椮Aý¢IêWÁ殶Š«ì9Èçk?àn¿-%D u3PáUÛ ¯ÿ‚^¦XbI˜xػŶ6çÑj`¹pvÓùÍí³­ «Ë ¡7Â挋•æ­¿,60[k¨}2³"—Z€Üs&&#b唯Öî9w\Æö¥:,¦
+U{¸ÛûƒA íI§s+_Î zoÁÕ¾Žã'°4.NbPËqä=®ãûГ$Rs@ÐØÿ܈Oà­æ¾vT";ƒBOé«úû‚IŸì9 4¶ƒ¡Î@SBF—ló¹²3¤.e4Ër6
+Áò¼Ñ"ÎÕ‰°96£‰ 1æ'Yœ7€€[ZÐ ¶ A $
+·í1ÐEÎÂ`Ú.]A¨8…}è<?0B9=ÁÝÒsœ,ÀšK3Ñ>DÚ›`Mp9 ŠÔó_·ŒF¥S|>`÷ü íêÊ÷ÿÇ»ÏïPÑ&¼›ÔJ¢±†'4¾éc³  3ÓNIHg—H'à2gH'… H‡Ýiz$§œŒ
+z'Ó©ÊÞ‡.zâ>
+´W»»£€¶”kø`‡+aèØÀ“Q;5j5l\'N¨å©ÝcÛÜî±Kˆ%±Ðù¿²Ñ(·V
+^g÷'O»©›ªóeO;€wàç*¸õkÚ)ËÐIuè
+±Gãßméü N@À@á.PßQ ¬Gg´ÚZÔèD‡¡f&\ê
+ã&&;‚AKM†Š$T1
+õ\±9¸L.ùŠ-'žÀ­D/…üy’¡‘^¿ÜïSBô2·^#Ñg?f?…ŸÂ¢Y®•ùß`Ñ”ßgéûª«‰
+½…g}–A7:wšn_±òý&•¾yd8Òé\`T<ìÅO?—'{A[ŽQ§MäÚ.]nOuÄ÷¡ š°ÕQ~j&ƒÊ‰J",%Ï^R·ëð)çnÞ™QËat¯P·¤¬ÜŽ©Ž­+rë–n¿=ûºAæÅûæJÇžÝÛzèJ$€\±,œâxÀmÄ-wÔ/«páQ˜iÔŽ(̎ߊB)xñ0 ­•€^&¸ô7ÿ ™‡œ7}ãŠ[«€Ÿôо–Š­Ãû¡l|{ìG/ ŒÌþœÙ/X¤>OƒŒüÖ'fÛ×7>Ñß‘WÝÃÝà#‡¥‹i»èFM$:Ó}vƒ0 KL7ªÈùi·÷!ßMßÌ:¿Äý@®ÒËþjÈA%•ÀQíäšè ÚcBþ]M÷F¯Ë;¤q%5Íô*o|˜Î÷ùš[£E8˜“/¶[_õ­Ö$š
+9¡}&ÿ‚E½ 2ˆ+~[MIxñã×
+‚vû$“ß Å”BÄ•®Ófæ ¶‘2†\¨‹_Sðhô8ý€³ŒE‘z‡œ0t
+ñ<>gá;wëi
+ƒßÐÝÜõ¯pQö]Rœh©5ád¸)Š¹!àZuÜBÌ=@Ãr\lmi0e<øJJìck„ˆéŒù™~ÕSBR°O€D
+ ÆRœà
+‚õØ´P²#Õ£ØvŒÙL$„žÂÎ<öH±ß\Õ1$ŒnD¥…ŽJÝ/œ#,¡Ø§v+§‘œÓç–«×0Ç‚­Œ'½ê˜p]ŨÃ!âé˜n‚+uBœÆ£Ø•+ ‚(¢|ØÔ2‘}+Ð53Ùˆ:C ³ÇÈáœb žx¼{?ÎME¾îø\üòéBú«ºcµæ—JLŽˆÙLjP~ ßÙyÞñåg^ ùjqŽÅc1‹ïþc‰Ùz _l๋ ^‚ÙÁóدåØþ¿ç?ÍOH8¡œ@îó°t‡€ˆV/Ýš¤D}ŒÎÈ;îëj…+ņ`Íu_\¸!c9K„ÁÅyTå4&:”Í‹Âü<aÕÝÐýfE)ƈª^kÍJ¹PXïËÇB¹pŸ«;ú²X«°Gá8 Lÿ]ýÃ/¿DûÆ™þ±»†xA€qðSÿ;Æ9 g]*¤;]‡cª«Ë!Ê¿
+endobj
+846 0 obj
+2926
+endobj
+844 0 obj <<
+/Type /Page
+/Contents 845 0 R
+/Resources 843 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 848 0 R
+/Annots [ 847 0 R ]
+>> endobj
+847 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [148.96 335.304 162.899 345.001]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7) >>
+>> endobj
+842 0 obj <<
+/D [844 0 R /XYZ 72 786.278 null]
+>> endobj
+173 0 obj <<
+/D [844 0 R /XYZ 72 719.174 null]
+>> endobj
+843 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F39 496 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+852 0 obj <<
+/Length 853 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZÝܶï³ÿŠE€º$ˈ_ú@Ñ×íµ§F6OqPÈ×+X+]%­¯W ÿ{g8¤–ÚÕÞÙFr΃qÀ‰£ÑÌpæÇrù*†?¾JÅ*Í&ÒlUîŸñý½[ùÖK#J¥%Ó
+{®•L˜LVk©Y–h$ÿËæÙw×"]ñ˜åq¾Úl-é¦ú9ºíëvܾŽuüÕ‹]Ñ#ôß^­µÐÑ+zþÙu‡×\ªö«o©[»çíØÿ\ÿ øŸ®~Ù|l×Í-ûú›ohxÍ9SZÍ&ÿ‡3ß]sÈdZk!˜æ‰%ÛìÌÕZJí;ëï±-£m×Sc;;#‘Êèöj-Ò¨«Û+‘E£éâP´6Ä‘°¼:P¼(ª-öÆsE¦î­zðƒÅX—n¬%ágF]ó„åhù@É ÿ×ßÍø¼iм¯àíµ¨½‚•[†NATâ€B$"ªG|ÆQoöEݺÁ÷W:‰Š¦®hî@j× uIÙ„GÛC[Žu×Ò°U FË¢iLE퉴5ÿÝP½7V’Ì®„[L’3Tô0\’8‰†]wha¬£¶©±í¡éqg¿ cÓ‚Æ°V=Õ[¢²‚@¿ê`)³È ào’ 7~DEƒ‰ÉègOןxÝ¢I1žçÎæ¯~úᇅ…¢J;`c?R·U]£tôÆ‘™bêÄ8G×UàmΟŠ¦7Eåú•Ø˜–ˆÐ\C†Ïþ¶9†6„EbŒ –óËHp Àx&E.À…7¹ï«î%DÇEÝ[ïuài®»v¼ù«wi”w­Y
+|×)<„C.ø&“y¶êÍjû 0Šez•CË•„raÞ—©Ÿ€Øʲ”æP3•H°Kt:©$å‚J× Ëš±\øh›‡åŒØLs}¤›ô”ŠI z‚º
+¹Ë ±± …\BjaÑ à˽X™²)¬ßc¯nOØ؇ÄÅX¼)Cÿc¥„Œ6 l–’d—¥¼µ@êýûPoHö,xÚÑmßí©EiNFßœ:MݺaThFç5£ÞQVÏ£±^žFÿèî±ÓÄô˜wÁLíxÍ‘3HíÌ5¼%êî
+|ÑÔ¹¶³D'ŽJÈFH\Ä¥s`͸?âê‹îö#ñT:ÍX¬×cNA„_Þ—²8·Þ‡£8÷nå[/ðH
+ŽPâ²Vm*¶6sV9øp { þ e9¿dÔuf‘žÏ'Ø ã”'¤½J|²Q±R¥šÏÆgu`o˜‚µÆ‚2¡–º.&;R¿(Ë‹*¨0 Pr!(Û@Â…Í—&ŽÙëbv0†4è¼h v› NžåA¹¸'™®ºàóâuÜ…“Sý ÷ÖXÚ°Œ”!Âa’3ʨ¶2¥ÍòJëç…
+WPÅ඀<}šúÅΔ﮻þ¼õËýyöhô+>ù°‡nÅÑ®¯ìnM Lð¤£cïhèngÀSû¥T;ÎÁ;|
+=ò¦~³T;'žˆÒG,ÃÛ–N7#}nÊ°;ê-uO•ÁJžÀSq&ôüàgVÝïŠ[ ›ðÅ'ÒS 1_MÔKø­î‹n¡2ïœXuh¤»z0ìRšl£0{Ú(œŽ¾œ|þó{¦ä"Ñío]i»¸<ÇbË–sôœö
+H0»¢r{ÀXŒÇÕ&›RÉÂm¶ÚwXè—µÏóÔ…ƒ¸$a O?ò<Àò»qóL‡1¼3ßW1¦µp¥¾?Õâ(ò¹T ‡Üðq¡2_DE|À–?¡À½·†v—&Ø ˆÐª¦Â,
+k>ÐöBßqä¨8Fé)#„´<®ë–Š%YÖ°¯ÓK®`·Ês&r=³ÐTÃ;dÙ.¸7Q'@”žC”?+¼³#y™©/ ¼EÂ)éÀò!¼Û3~bLÙÐIJ³”¼87^”p3›\ò]F¤òD Z{)æÛÍxÆó õ&Iå®è {¿¦ÔÍy]7/$~u„V_úZäa®$¦
+b NAç8:vf9@£âžîµpüüˆy_,Nd Yüd§†düÒMK϶£o”Pi"ÅþØfQº@³¦é¹÷¦…|<<'1Ý”Ps¨ÛÒº*7>Þ¼wð‹tþ" ;ÿå‡ÇcuFç×ÏÉß" Õ!Ï®mœt!ä@÷p‹Ï,øÐÒ©ˆ»oÃÉÂ÷øº ØqGÑ.IÊ¡?üXŒ»'OõÔ‡Iöûõ¡@’~PªyDPté°®NAî.¡&œ +MNªŸ!£Æúµ–x*ÙL°œnaÍ©e=Uëàµc=B!jŸ#2øÍ/‰èDëcA)?Bì@Ø™
+endobj
+853 0 obj
+2504
+endobj
+851 0 obj <<
+/Type /Page
+/Contents 852 0 R
+/Resources 850 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 848 0 R
+/Annots [ 854 0 R 855 0 R ]
+>> endobj
+854 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [264.26 476.597 283.654 487.506]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.15) >>
+>> endobj
+855 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [188.524 463.048 210.948 473.957]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.3.3) >>
+>> endobj
+849 0 obj <<
+/D [851 0 R /XYZ 72 786.278 null]
+>> endobj
+177 0 obj <<
+/D [851 0 R /XYZ 72 563.243 null]
+>> endobj
+850 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+859 0 obj <<
+/Length 860 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåZKoäƾoþÄ —P†f¿Øäq“xƒm°u‹ƒ€"{$ÂrLrV«ÅþøTuUó1âhm :L³_¬ª®þê«¢Ä.?±³rg³4–6Û•Ç7bG?ïBë裙ڨØh|úÂÄ}˜¹W&ÎRƒóÿt÷æ«wÂìDçI¾»;ø¹wÕߣñÑõîf¯”ŽÜÇzl›¨íðWEoß}Gƒ?%B7<ñÐõ4
+‹CO{#óhäjÜ•Ú÷7{i#WçÁÏMÖ*ª[ØèXŒ5,†=ÝÀÔb …®u}1ºŠiŽž_ ™ç›Üý Ù Ô8÷
+(„Ly¢4ÑX}ËÎ]^ÜÌ‹ OókaYÓ•«ni×f\(KI :õ,Ý0Ôí­{,ªÕB×ÒæU=÷ãÁ iÝÖc]4õ'2ÅK•Pƒøf¯µ‰ÞÝd:šÍß l²Ü€K¿z'íâ˜E¢ã41|Øw⟮ïálýÄ•?è<ÖFó¼šÏ íF:™Á± IJ±Šä3~ö{Ô.—ä3¹ð²€u’±Åa¬wã¹o½æ0ãäÍÒÕä4ÞU`αÀƒx¦¶>¨èл°Œ\rï´ùÑ»ž×yÑáwÁš%Oì¨o|¤QÎm‰ÆJ¥q®Ò•Íï‚Ÿ cOç
+f(š¡£^²·lž©õáƤ0¡®hêùÄgÔ­®ŠŠZ÷q¤VY4 ;÷!L
+û®|óõÝ|» œ“ÙímgÚ\Ç‚ëø D,2I8âqaå0ÊÇŽÅ€›þ¼æ¯nü¶¾_¹vü)1 |èê
+žDD³°×ÞÂd¼‚÷Ä*Ïv½ÛÞ쵊3³Ëc#ÔNeÞ^Ãze5ÀÉd™¥ñà’X§è‚qj²I ¥6Ôx·áêYœËàé¨MÐáb °“fž7é©t¬”Å“°"Ýs¯bí} ¡7ô zÀ>½N a_‡é;ò p±àø¤ù^ù!Ã>sj8(p5¶¿_0<y²1 áË5pëÞ:E§|‰'2Ë@ù4ÑÔ÷Òi —r\°·ûXO ¢„JEp{è/»sS‘`
+népp‡ž‡`þC×vG‡"9‚·Ò:0ИæÌ4-UÄiÒ
+}Òsú¥µ¦ÃܺvbA®xsÄ”—Àû¥ËðŒ¯,>AŒõ‚Èhé:[oiÕ$’­Ó%ÆJaÚæ>:eÆÌÄhàÍ
+*Q–2–àñÔ3ŽÎ±+ L=¡Ü”ZD6°u¬?RpH¸ø¿‹3†”*'X(l÷ë¡ûz<'ŒWàÈŸ[B°´Á'°Õ‚¢3þzŸÑÂr—Úž r€=}¾:{¤³ÇVØËû
+ÐKÐÚàÜeX1il "3¤6¹ÇLìűŸw¡õÍ+ø Ir¹'ä-*××?“\ß Ñ” Âk+f¥ÓÛé–zÞÖ)|i$L¨©àœ„Ô|Aræø‹4çȦ åí‰tÁêÞš¢¤Wzþ鸾~îû½VB\?/ÝgþÔàé¥N"ñ™ËZðöZú$«©½@ÐÍ•Ž³ÿ
+9uÜtÖo`}Îf*º Ù w›åБäѪ#%êö€„sŸk‡lû
+^=çvVÍ ùRÝeaP3÷û¡×ŦøÛÛlJ_ú­©æã¹¥çù£Ÿ¼]×> :ükptÞ!¦ ¥Ïñ¢
+ˆßE Šš¯y9®¸äåJ¬’{Ç…Ôû)„]Ö‚lþ…:’±L´6*:ÐJCÍ3œ‘sÞËlœØl]?~?®ÍVu­[‰Lß‹¸,`ÓXâÙÅÑ^’p=æU0™&x‰ˆ3)ÿ;,üG4Ìo%áÞšÛ\äùXxúÂÂÿ}߆øËú”¥‡`D‚'Ký°K(b›°6܉Ñ5Í@[³sš¨¤qá“ ¦ ÛìÃM/*Š”Aóú—ÒHlN7ùã†8pqT8}ÙyGeÑ-¿JnMôPâêß»øÒÌdß,@®f’Ο³CI‚
+ÒÙôm¿:—#õ„ºôJ «€½ÈWlšƒÍy˜ãmš]±ˆÿÉÃù<oŠcûŠ=¦O3S†j¬l€5!G?b]2X˜‹¯5T•òßV€JbLÄ:ºˆæï,—µéÌ€ßÁ:.#m‚r*²eÝy püR Ç~é_\¤±ÂûõúŘ¯å´£‚4×Ùá¿
+endobj
+860 0 obj
+3002
+endobj
+858 0 obj <<
+/Type /Page
+/Contents 859 0 R
+/Resources 857 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 848 0 R
+/Annots [ 861 0 R ]
+>> endobj
+861 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [128.757 245.064 148.151 255.973]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.10) >>
+>> endobj
+856 0 obj <<
+/D [858 0 R /XYZ 72 786.278 null]
+>> endobj
+181 0 obj <<
+/D [858 0 R /XYZ 72 612.857 null]
+>> endobj
+185 0 obj <<
+/D [858 0 R /XYZ 72 508.853 null]
+>> endobj
+857 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F37 380 0 R /F39 496 0 R /F26 391 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+865 0 obj <<
+/Length 866 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåZ[ä8~Ÿ‘à/”æeÓh’‰í\‘x˜…˜`[€Ä¢UºâêŠ&•Ij»gµ?žss®ÕÝ µ4åØÇöññ¹|çxÔ.„?µKõ.Í’@§Ùnz¥vü÷içZ¿‡>¦ŒbÄ~½@è;JßÄA–ÄHÿåí«wT¼Sa‡ùîö@´·åß½÷M;mwã›4÷ªæFgÞ`»sg‡b¨Úû3¯êá7 ½áX Üz@B‹måõ@jyóÛ¯ß}0ál•§A&²SÏ .² ÏeøW°X{CÑ|Æá•ÕŒLb„úõ•ÅÒ Tn5XC½…så=Àñì•õ"Rž=³žR7œD`ç¨kÿSÓbó¡áþj(êjïÍ}-”í‡ëà 6ùÎWx?9-ËËãZ–}@´* r“,(¿¾ô({zE/¿w7>L¡Ý¿'nðÄ*ö€!Ø,÷úêë—ö d¹g›Òò<»,†‚ÉNÅN½ÏÜk¦t³Jyö±ê‡Å¬¢)y3=ÄxîÆO¸ÔÈéb±º-J[7~dbïcäQ$ù‘c:ñ¾èI8±²ŒèLär^ºÆ–x\£<Rà‡Š‰#ÏWOÊð}Ïz~]r¹»] èë‚]5÷lí™æØnmh7§smO"([rç~}ÅËgz¥Á>£P9³°m²Õ?0_§B¶åÌ?û¡í˜“¾]X(ô+r§ƒqäÑB*ÓýƒŒ§+#AwÜ”ÓÍÉ\è6uõ"}uøÌ"3šX
+G ÃÕp*Î=*rˆ– ¢æª9´ÝI´÷ã_X<O'¼Ãl
+ÈÄÉ{b"¦‹ÀÎÆîmßÝç›L{t"å}ùY¸^ØîTðÀõ 6œ-Nj-ÌLc_È.U9ånãVŽU¼¶@ZŠ4¿¼ Ó‚Ûã°V·—¦dåŒXÑÅ<bž ›yONzŽ9qhÒeö á“%‡Ñh QB×µêÏ<ãØvÕréEÍ}ý¾¨…دaßœ:ßÌ^FD©Â¹7d 4JglCõ½‹ÃhÁþ¾åCupLP{tLÈŽŽ½ÚeÏ+ -ÿ¢Fãïx6þ$Ë„ãŽ"ªQz:r%é¡Êáu³¹â„J6jd#Š•ÅèW—Cì€^îÛÓù2๑͡w½yN›§tu¹f–sö8ð³°qZz©yØuèÚ·þ³­ÆYëû@ï¹=ä¥a¦raʬTU´éw,CI°3|Ið Q†¼å«¯nG¸‡Ûd&ÈÓè%`.Š”„Æ\„?_o¨à‹°É¢ÙâWÑæ(œ„™Hë› Ó1QDÔél™<Ò0rO™èJÔŒƒT;TGÎ!W‹K¯Â:ô@ é¹µá0]…î îøþ&³©/–{I › ¦ÒÓ©@' rŒ›¸¥}‰„ÁiÍ­Ûm
+Žé¡ªÉ[(ÑGr@ ÓÕ©ª‹Ž?Èd"Öwøa/Ð ÕžöÀËØ€ßíQVØ8Ápãõlw8:t_úiòÄË©`*Œ.L½òv[(« ¤m6 \Aâˆr
+¨p ­~Q¶ÌcæLŽ(rR5£ÖªfFE_ƒÎíÉ¢u®Ï)ÊF—#Ç™ÄW[*Ù¤YZ&‹øîöì¡ê‹D½|–ÑBʸ'§ ¾p°7±õ˜&@Ã"™Ç…píb Çí0ÎZK'ËñTfÉzÿÜK¨Æ–—¾ 3`်„‘1áìÅy.v‡ÇG‚µr£è‡ÞÖ‡'û7U³ÇÉIâ<’ˆ7Iæ_TòÎ$•€øܵw?ñ‡ø\hÉxº‘W¯å•ˆ/†YKûHÒ¥¨zî«ä—°<>á)ÕÎ3
+N¿B Xtg±aÐK!ÎÃ_ÎA¸íæÜÛsfʶ û€ùßbû…
+Uê¥;Ã*Q¤"W2QÆ“Ú%wÛGŠˆÌ)
+
+±ÎZõ÷vrå<ÅÊ9Ú1?„‹Çƒ…J(È%³ÄåŠ|×¢D¬ë™¼
+Ù®´ý¾«$l•ÌžD1E”b'€@bC0m´‚Íà—úŸ´Ìì%äBê¿ðØõ…XæF>àéäh<¾6Éù „ôjîó¦)O
+Rç ·iö¢ £Ù«£d•/&Œ7OKQH! 
+wŸ…Î
+g¯l]W•ð Ÿ}äXßžªè“6fåiükp²ÐÉA.>Ó~Ü#Ò#‘bâknˆ¨Ç¢3½
+*XE‹ÓÔû5«¬Ëke†j5Y†páJ±2
+endobj
+866 0 obj
+3259
+endobj
+864 0 obj <<
+/Type /Page
+/Contents 865 0 R
+/Resources 863 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 848 0 R
+>> endobj
+862 0 obj <<
+/D [864 0 R /XYZ 72 786.278 null]
+>> endobj
+863 0 obj <<
+/Font << /F15 393 0 R /F30 512 0 R /F39 496 0 R /F33 497 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+879 0 obj <<
+/Length 880 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÍYëãHÿ¾üOαéu¿ÜmN|Ø·0Ü– X„<Žgb6±ƒíÜL„ø߯ª«ÛÄ™™Ý;ÄiFJ?«««ëñ«2_ÄðÇF,ŒM˜0v‘ï_ñý}\„Ö70F+•–L+ì=³p¥´eiš@C1%Íõõ×ipθtÖWëWoÞ ³à1Kãt±¾skÖ›¿G›úx»+–+-t´æÿü}Ñýy—U݇XÇ4XV5ÞÕUwó;˜àˬÿøêëõ«•fˆ® ü98ÉÔ.šbq÷j¥$³z‘2ÍåBZÆ…œ™†ýÒ(?Áf­¡ùA1S‰\¬8K´íï#åÌ}Þ!soÞq=šQ
+åçñbág$@`öõëú{JÅ$¼^—'3|®$“Ð^%Œs5sÏp c$¼©€Üô÷˜ðîÑݱ©–+)EÔm lÈ(?6MQ-…:(»¢j˺¢nVm¨ÑÂŽ–}¿ÔI”íŽEË– QðÒâݱÊ;Üï¯Ú‹\3¥áiDÌ´°ÿ;õ•[÷výþæoc\7YÕÞÕÍþ'WCõŒÊ—ª¡ùy«¡~©Ú§Õð½Sõ†“bc¢‡n&<Xæ” ÆâÚMùHó™£ ¢Œºm×s ìÉÕwžÊR˜ètX®à§ ÉL”FŠ„ÅIr©:—²N‹mXù°-sdvKÇ<”»µná(KG-VÒ‚<´€çEJÉ;mÞ”~™·­ÒÛ¦è²rGÆzK­À2½)oñ¿pfÆü­’‰¨ñ%,¨&ž¨áM˜X®à y´^¦It&ZiÁΑ¶UÑû¬íŠ¦¬î©».÷ÅŒ,b2ãT“ض%>£%º §ô
+NÏi¸®ü¼sB®±ÛÕK‘FžBÖÜ–pBs"ÂÓÃÐ3%FEoÝcÄ“W8gKHî ÈO<º«1LÇÁxýµ0,5N-˜`,ÕDyŽ„`Dµ} ¯‘$Ñé‚ìÑÖ^’›Hÿ‚ÜÈìyOJ1¡äˆÒz†RÊ@GF„ðÕ„tF…?÷å÷¨ä…Œ@öhGy/3qMf)gR÷2›ÞvÂ
+h<7øHïÔœ{:6‡„eùR~Ž* hžPò¬ò®$B9Œõœ¥\þ(íù,¦Ä¥<Á#*»š% -úåìë'Ò‰C h0xP™Æ3Ü
+I%!ü†º]çÐQSP•X
+Þû2.HáRsÊ-n;¶À‹Ž‰ ¶¡ot¶ÞãVƒá$kÝ L êÔÑ-ÛÖÇ݆ø i´[¹)Û Œl3s%w†„ÍU]­z9:ï T耬ÉrPRdO8¦Üv'Ú•áO:£Ï8ê¢,¢°Gˆ5NÔ Õ\“ëØì__Â…[¯åá¹Æ”Ó?ÃȆGF:)§¹€áv&óv^úç @­l¹ê (™HŠêsq‚Á /kÒ1êÂœDÛ–·å®ì¼ŽâZ´]ü-JXì÷»lß 3BÇ/º‚!4rxìaØ¡/Ã`¬ú0ˆ=Ò4òŠ—Ù–û¶Ø!;†Gîù— È.‡ 
+3îç6”íˆ0OÆçCï5]™wX$Àþˆè=僓Ãqðkù±ÅÛòÔsÊM„JÛ`= ;YsܺÃMp/yFªîv‚7¿f-²‚jåõ~ïøé…£ý’iôžÌ\윂}uÊ®}ÁI ÌÂÖ1³èlmLUL˜Ê³`˜¥_(Tu7cˆJ§ùOl
+Í]ZïÜ‘»éëQ2%%Ç!†ò¸q¨JÓ
+„TŸK_³½8Œ®š–bÁ­ÛÅ~CU<3´AÜeµ =— ÀÙWÝl0«Ô×öTŸ#ý„$öˆ(9ì²¼ØÐh¸¶{By]AŒ+ª
+eÒ³"ãN†Î¨\ï×ÌäV±e²ÿœq×Åô»á´z¢˜Lä^!·.ÎB=‹<ÚR1…:ûÛóQ‚%®VwíãKKA{›á®1œõÞÉ9 ©FþIz/ìâ»óTCqÒµýNŒÞWñð_—Žù“ú  ”+ú@“uD¡& Î}Gh¨1qWê>≺Oï>=s«!8¤Ï+!8“øíöih¥åùIB
+&„¾Ý~
+endobj
+880 0 obj
+2721
+endobj
+878 0 obj <<
+/Type /Page
+/Contents 879 0 R
+/Resources 877 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 848 0 R
+/Annots [ 883 0 R ]
+>> endobj
+883 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [223.636 234.809 229.09 244.506]
+/Subtype /Link
+/A << /S /GoTo /D (figure.1) >>
+>> endobj
+876 0 obj <<
+/D [878 0 R /XYZ 72 786.278 null]
+>> endobj
+189 0 obj <<
+/D [878 0 R /XYZ 72 632.949 null]
+>> endobj
+877 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F26 391 0 R /F30 512 0 R /F34 583 0 R /F31 881 0 R /F28 523 0 R /F1 882 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+887 0 obj <<
+/Length 888 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåXÛŽÛ6}ßý¡Or°b5äð¢}hÑi‹}H",t‹Bµi[¨-9’ìæë3%_ey·M/@a,$q†s93<C,1ý Ð<ÐF1®M0]_AàýÛÏ´æ5Q
+&Ñ}]PŒz͈#KbuI_H¦¤ "ˆ[ÓÁ» f²•õOZ}·Uï¾~±†à‡òêÕUðj+‘0žÈà‰†øCøTCâÄPĵb5¥ç@Iœâ÷)ér@Lð$A:ouÓÙ/a
+¿ÝäUUV/o²¦ÊïïbÓL"BïÄ·bãÄo–6;ÙükúÓÕót0ƒœÜ0 æiâçÂ\~.ÌÕ_ǼEíöäÏï[Ì^žƒÜ‹oÇ1Gd2ù“ëS¤Œdš«§"eN‘£éìã‘z]6Yc¡ÐÂ'M«¬¨çeµ#2 Jªg(yÇ(œÂ‰ *ÌwõªhROôqˆëE¾x_YªOBøf!ò0p>lòi¶ò{Ÿ­7+[Ó—ˆC
+Ò/7Ën㦲3{væWæï‹i“—…ÛÂÍn˶ʚ¼Xt&ú¬3§í•×€)y£Ô)Ê^m^¸Å#ˆSAu—O«üw¯t/5ªSºv‰ˆ0ÛlVy±àaSúEŸ”Àp:¡X–Y•MÙ\|ÅŽÔÅH<¬/’»¤ÒQ]謢¡öó
+endobj
+888 0 obj
+1072
+endobj
+886 0 obj <<
+/Type /Page
+/Contents 887 0 R
+/Resources 885 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 848 0 R
+>> endobj
+868 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 889 0 R
+/Length 890 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+890 0 obj
+29
+endobj
+891 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 892 0 R
+>>
+>>
+/Length 893 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ}T9’T1 Í}
+‡ðÑbyI©â
+Maæ¯÷Âm4§úpÊ•šj(MÁ¥K/C­%r á2à3…<‚¹pkÛò¦Õ<
+1—á1Á๥\F`‰"-ÿ<0MNIµé/âÝ å4²PHNK^鎚ԉôðÜN …;CQúðh5´Q±ð| Cƒ\º‡Èè "½«D™—[î=ë%Lœ>Ã’E7Fß瀘r¨ÒêhŽ¨%…àÖ.Cè\”n󞥹‚0ŽœQN륟°­ |A¿z†8–IË86Åmöl ô ¡‹÷ÿŽ„¾`TPs£f=²œ±e½\½a|蚢{ù™
+endobj
+893 0 obj
+573
+endobj
+892 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+889 0 obj <<
+/XObject << /Im1 891 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+869 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 894 0 R
+/Length 895 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+895 0 obj
+29
+endobj
+896 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 897 0 R
+>>
+>>
+/Length 898 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚT¹’“1 îý.¡àG‡å£Ý`I:†* Ç)¶âõWŸä?ÙÄþ$ë>–®„¿}ßîåµpýU˜ê?ˆj÷"üû~\`^Ê«óÂʾn÷út-?÷ÊFõú½¤ Ýø]ïï~¼¿¾”O×ú\¾T%|¿V¡úíÿKò/…™»š‚—À½14l®ã/Ê› ;šÂÌ_o…ÛhNõá”+5ÕPš‚K—:^‡ZKäÂ-dÀg
+ysâÖ¶åM«y
+w†¢ôáÑjh¢bá'ø†¹t‘ÑDzW7ˆ2/·Ü{ÖKÜqO' ˜8;$|(†%‹nŒ¾Ï1åP¥ÕÑQK
+Á­]†Ð9)ÝæO:=Ksa9!¢œÖ'J?a[ø‚~õ q4,’–qlŠÛìÙ@èBïÿ }Á¨ $:æFÍzd8cËz¹zÃøÐ9E·ò3z­ —Á5{N$Õ5"”ÖQû$Âöã¥û®=ý€>Pp=1/ã¬ÃaÇ|bU6á“6ê$9”x}F].Ê’÷ˆQ¢(g¸;ú™Kv?ñŠ¾É ,¡3ã„&LË5u~“Ü,‘\¤Ø;3lÁÃaÃ^6Ë2
+endobj
+898 0 obj
+573
+endobj
+897 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+894 0 obj <<
+/XObject << /Im2 896 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+870 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 899 0 R
+/Length 900 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+900 0 obj
+29
+endobj
+901 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 902 0 R
+>>
+>>
+/Length 903 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚUT¹r1 íù,“fƒƒàÑz&àH]&•2¹Æ*\ù÷ƒpåD–v@<
+N÷Æ`Ø\Ç?’=$6@v(˜ÁÌOo…Ûh.õá’“šj¦à¥K/ÏC­%r†p è™ÂÉœ¸µíyËjž
+J¢cnԬǭgnY/§7ŒSt+¿0טp0\³çDR]#RiµO!|?Nº/ãÚÓè‡Ñó2Î: vÌ &Qe >i£N’C‰·ÐgÔÕá¢,y%Šr¦»³Ÿ¹d÷¯è› ºB1^@h´\S×7ÉÍÉEŠ°ó†m ylØËfY`]Qßļ×pn/Ýo 9YÀ¸çœD~j3{yKDó{ {üº”çòørDendstream
+endobj
+903 0 obj
+587
+endobj
+902 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+899 0 obj <<
+/XObject << /Im3 901 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+871 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 904 0 R
+/Length 905 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+905 0 obj
+29
+endobj
+906 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 907 0 R
+>>
+>>
+/Length 908 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚUT¹r1 íù,“fƒƒàÑz&àH]&•2¹Æ*\ù÷ƒpG–v@<
+N÷Æ`Ø\Ç;É› ;L‚`槷Âm4—úpÉIM5HSðÒ¥Ž—ç¡Ö9C¸… ôLadNÜÚö¼e5O€[8”ån¤)-­Dœ*¦BŒ‡Ûð˜PðÜV΄x¢¸–˜&g¼”Úôñžr:Y($§'¯ GMêÄõðÜ. E8CQúðl5Ø€¨XÄ ½…£AnÝÃdô“ÞÕ¢ÌË=÷žõÜ3&Î Š‰É¢£ïsÀL9¨´:š#j)!¹µËœSÒíþ”3²4'ã‘"Êé}¢ô¾µA/èWïÑGÃáÒ2Ž-q›=¾!uñþß0€à F%Ñ17jÖãÖ3·¬—ÓƇÎ)º•_˜ Èk L¸ ®Ùs"©®©´ŽÚ§¾'Ý—qíéô‚Ãè‰yg† ;æ “¨²Ÿ´Q'É¡Ä[è3êêpQ–¼GŽE9ÓÝÙÏ\²û‰WôMa ]¡/ 4aZ®©ë›äf‰ä"ÅØyÃ6<6ìe³,°®¨obÞk¸·—î7Ðœ,`ÜsN"?µ™½¼%¢ù=†=þ]Êsù øˆDendstream
+endobj
+908 0 obj
+588
+endobj
+907 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+904 0 obj <<
+/XObject << /Im4 906 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+872 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 909 0 R
+/Length 910 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+910 0 obj
+29
+endobj
+911 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 912 0 R
+>>
+>>
+/Length 913 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ]T¹r1 íù,“fC\<ZÏä©Ë¤R&×X…+ÿ~ð
+endobj
+913 0 obj
+591
+endobj
+912 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+909 0 obj <<
+/XObject << /Im5 911 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+873 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 914 0 R
+/Length 915 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+915 0 obj
+29
+endobj
+916 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 917 0 R
+>>
+>>
+/Length 918 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ]T9’1 Ìù
+†v2ÆA‚dê*?`-e.GrùªU°‘¿o4ÀQÉÖJ3Ý$Ž&
+endobj
+918 0 obj
+596
+endobj
+917 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+914 0 obj <<
+/XObject << /Im6 916 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+874 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 919 0 R
+/Length 920 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+920 0 obj
+29
+endobj
+921 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 922 0 R
+>>
+>>
+/Length 923 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚUT9’1 Ìù
+†và1‚Gê*?`-e.GrùªU°‘¿o4ÀQYZi¦›ÄE ¹tp%üí÷í^Þ
+×ß…©þõQǽðìý ­lN_Ÿ¶°rn¿–Kyóˆ¶_·{ýt-¿ôʲŽE­^x:l µúጀñ»Þßý|ýS>_ëKùZ•ðýV…ê÷§ÌòÀÏÅKrýRx·)Ø ÜÃÃæ:þcö`l:€ì@YF f¾{+ÜFsÖ‡3wjªá4/]Þ ¾¼µ–È=„[Ø`)ìQ̉[Û‘7Wó¸E@YFšâÑÒJÄ]EÂTˆñp <·•{""QË?L“3_²6}G|:¤œAÉ Æ+ÓQ“:qü
+åŒ>Ñú‰ØÚ°.˜Wï1GÃáÐ2ŽÍ¸Íž„¿¡tñùß @ø ¤‚–è˜5ëqêÀY[öËÝäC§Šnå4¾Ö€ÂeÀpÍžŠ¤ºF”Ò:zŸ$b?vº9ÜêtAÁÀaÌļ³C…ú„U6q¥:I%Þ¤Ïè«ÃEÙò5J4å,wW?ó’ÝO¼bn2—Ðò¦å5õõ&y³Dò"Å°ó„m x$l¸—Ͳ Àº¢¿‰y_Ãu¸½t?¦²€qÎ-ìD}j3guKdós {üº”—òtð}endstream
+endobj
+923 0 obj
+593
+endobj
+922 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+919 0 obj <<
+/XObject << /Im7 921 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+875 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 200.999 200.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 924 0 R
+/Length 925 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+925 0 obj
+29
+endobj
+926 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 200 200]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 927 0 R
+>>
+>>
+/Length 928 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚmT¹ŽÜ0 íý*“b¢Ž6@>`3Ó©&ȱØ)¶Úß) ã±ôHñÓÎ…ð¬ýþØ^7.ü}Û^ s‘rÑrÇi£}vkåÂ4w€ÇÆÁ{ÇzùŸÔÉ
+»Ðµ<ÁE¸?¶û£|¾mŸ¾¶ÂÍÊí§Çá¡ <åB»t<@ÔÕ(ÞÛãï·çíËÍ~+Jø/BåÇæ¦ß|IIòPäÄ/ÿðc“ä_7îd…mN·Š°5÷w”›v ÛšÂÌOï×^jÝ)Wªª¡4›N¿H›‡ZMäÂ5dÀg
+ysàZ—åE«y
+endobj
+928 0 obj
+618
+endobj
+927 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Times-Roman
+>>
+endobj
+924 0 obj <<
+/XObject << /Im8 926 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+884 0 obj <<
+/D [886 0 R /XYZ 72 786.278 null]
+>> endobj
+867 0 obj <<
+/D [886 0 R /XYZ 119.696 314.795 null]
+>> endobj
+885 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R /F33 497 0 R /F30 512 0 R /F28 523 0 R >>
+/XObject << /Fm1 868 0 R /Fm2 869 0 R /Fm3 870 0 R /Fm4 871 0 R /Fm5 872 0 R /Fm6 873 0 R /Fm7 874 0 R /Fm8 875 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+932 0 obj <<
+/Length 933 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZmã¶îç+Ðßà~“‹#¾‰T‹
+­L¯…ÈÒž$ßÚýõ™áPZÙ–w÷Ò4M‹â€5_†CÎ gŽŽ/øÇF,ŒM™0vQì^ñýû~1´¾‚1¢TZ2­°÷ a¬´eY–BC1%Íuúë<8gÜ
+Úë³Õ«OÞ³à Ë’l±ÚxšÕú¯ÑŠÿcõõëÕ·oÿ²ŒµÐÑï`à‹Cïêõw_ç}[þ–脦.Hwžà†z›ªÉ{j:\ßÃB¾üûêO¯¾X½Š53°}l™J€ƒ1™ÙEë›W±’ÌêEÆ™.¤e\È™éØÀ_&xʬ54ÿ¨µ„©T.bÁ¸Ô£ÜRÎÈýöÉ®'s r¡Â<Š=HpÆ«aÝH7J)“`+–§3çŒ%“ÐŽSƹš‘søPD,€‚ÛQŽ“³ŽöÛºÎ-c)U´Ù×E_6u‡]åUÕ,E=ÐlÞÞ–}›·Gìò¨+òª¬ïh®¬ñWDý6°j]w¿Œ…‰pü°ÄM Û¨i×e÷Ž–­ËÖùÙüUEåæˆ{xžy_ÌÑ 2/ù˧1Ÿ±‰ÖàÅ<ëyÑWG’ïXºjÝѱveÛ6m‡Gèˆ8ä‘pì6ˆg¯×PDù¡ìÁBé“s½YZí[àÒîšÖ£ËT"ÓÙj:õ õK`ü€š0Ðæu·iZ¸"Á":†•xˆÀâR¡0¸vAƒµFšš~˾sÕ&ì^¯ÇI/øZ†~34 EÔà±±ÉÏ·D£e©ìˆtø©ÜšÖt[—£~oH’®Êk”¶'MA˜çUׄo«òýÞ…ßÁDoûSþ$cÓuåmNé¸ÜÒ û­ìÔ[Fo ~¾ï‚9壽¯B¸šcˆÐLi %p-•þyÃê;Ôá—?:ªzÌUžeÿbX}iTU¿ì¨ª¢¨ŠWëŠçˆ„iaþžóÝ¿ÃsþŸŽZÇy L¤;1+ H͆F¶Ÿþ ‘2rŸW46‰ªÂ¤¾p|iêeÞäg"„õËg'9S€‰£-òtï÷ö}~óÚ{é4™p0 3©~=³…a Ï&:P†»ä§8Ktú¿ŒY3ðÛå8ŽtÆ[J„Ô))é¸ö¾u=¦&Ì»À58Bb.ÓŸÐò&À‚Úy}Wù¬Ç)'ùùŽ~w.ïö­g­QµÍŽÆGFCÒ*=.²þd@Ií¶/ ¯dÜå0ðĤ& ¹ÁõÜ:FEµ»Ë§|äJ]f¾Ï/P `!›F˜”ym|æÉÙa$Lßs.e93æ9,ƒ}¼'uÄøº iÖŒ.ÂÕ Û”•žz‘äúºÁ)xú4Khq™M|ߟÒãhxÓSóÑÒØó–&7>ãFˆ+Î/±ÇÙÞÐS=54¡U5ç78|fï÷mÓ{ I›a4Á-Àò÷Û
+ÿþ¿£¥äñuÞ®©w
+T®Pj t~oNòsÊ6¡
+µ#È,@’²u©¦Ãa½G²°¨s=
+×uTÕ3š¼9"ý1‘H98ë‡wøÍÃa˶¨ÜÍ ä$L Zq‡Å ¾ÕP(ìŽdøü0Å'([Ù–b¨2W^­Èp™2)ÒŸ‹¬Í¿Žx߶’ 3½|Rf@Kq<Ìjwºì8·ì8‡t@S:סN y#3â °#5üd/‚;
+éÅ£‹¤3rhàÅä ú€ žŽY¤çUyˆÒSða¹=AVFß,34]ÿ®hËûþ÷`X.¢?7„E`Þß ø]-³4:‡VEÞ3á’Ϩ86r«¤šT@X€PB`uã Lû €CùšrMC¥6ð@h¢œbK³ï©…”àXá<7 R,zû`„uÛf_ηm (ë#u×eWì».h¬ËM<w- OÔ(r¬¬â]ù»sõŒ‰lÊÆçæÄB'
+Ìû/bdªè
+^ÑßxÍ †¢± @š
+ÊYD‰ñŽÑMµßÕ´%3_©òsטÎ
+lg°\ïiÌâ–™€€'=f÷1}¶¨€W5~$C¥–ÓÍà‚2³ÿBÓõ7÷HçöDÁçÞ UÔØ…ø“Ì|¿BoÉ$UCçBÅDA*ÆvàØ¡ÎTÇØ¿¦cp¥›?«b9Q±ÿ6£´g¯\N’QŒ¼¦)w P*ˆ”™<õH”k 3/šP8k˜É<.€ßðæÓ€ØÀkjçCPƒÇ Æ~O®Ü.è(¾º™+!AÂsÂŒàþÚ-„° ýôѨÎìïa§‚•"o„DLq@øÜ–Í@èP¶+©xDT^+ðû¡töo‡7Á€Û‹|ß ¨}ôÄ󃂆¯“
+H»«%f˜aÁ÷Cáéd#@~yë¿m¦`ü~&ïØ{¿ozwö¥-ã2rmY’ÁÓZ¤ð~J=£×D§D8†…_…xD°ðf:»w—æRˆÅb\ðéåƒ …
+n)©Šf] !lð¤¹kŠ°Ëdg‘Üó3ÑzŽ‘?Å”,ÏêQB¡§ñÙÆGˆyI…
+¨ä„ÏÌ‹ %~YÇ
+ ØÌÊçþG€ì|ñøÉŠ—Öç[¬)ùT~e‡
+endobj
+933 0 obj
+2620
+endobj
+931 0 obj <<
+/Type /Page
+/Contents 932 0 R
+/Resources 930 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 934 0 R
+>> endobj
+929 0 obj <<
+/D [931 0 R /XYZ 72 786.278 null]
+>> endobj
+193 0 obj <<
+/D [931 0 R /XYZ 72 249.403 null]
+>> endobj
+930 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R /F1 882 0 R /F26 391 0 R /F31 881 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+938 0 obj <<
+/Length 939 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZÝܶ÷Kÿ…ëStÀ-#~èƒ}°[uÓ$†³EšÂw¹·‚µÒFÒÚ¹ |g8C}ìêöì¢(RðŠÔ’3¿ùÍèäM ÿäM¦n²<*Ëo6‡gò†þ}¸ Oß@IšD‹Ä`ë ÁU\éDäi‚ò/ÖϾ~%“ Û›õÎË®·ÿŒvms¸]ie¢~ïð!‰Þܪ<jºþ‡M[{zù÷¢¾?÷ŽZoÝε®Þøf}[Ô8äTTôú§8‰Ÿo›÷·+•Eî;3³¥é_4Ð |
+þ‰…`
+›j2‘à˜ ÀL{™Ÿb/Ù“TÊaÕV—lT+›dt·71XëÜjaï°Èpoãš
+
+<ÓÒÄßÂ=À…Büâ@•$QQVÅûÊawrnQÊfhQ8À[”úŽzKj¹¶.*Œ~8¸;’±lÊÝ òF€â^útpp ÔÁÀzZÆêTH¼éMQÖýúáè–àB\
+AÙ‘e½-7EOؚ™$³IèÖ¼+ª„íàÒöoqƒü{:fhmzP]â-wÔ…·3›‚ÝŸ®ªã>ŠÝØÈ#¬Å“Œš´ܬBÏlæ.̱ ® ‹Úò~ï/è·¦¥ž²®?²TŠrío¢À‡IÇ<'µ@–˳ùFx’Ö$Ý7Ô3@vzx©/ô©ì÷Ax= ÚëšzŽE g|ªŠönaGdæù‘ž$<Px%Þ:_üôîlØ5½C”Í£ƒ'ÄÏ>ïX°l½m™èǽ«ivÚ¨÷Pœ`~åË;òÚhsjI{Ü•w…¶ÕXŽÐ[%'F¨ã/^—5ïÄy*
+¯ðXȇax »Ã'^£G=ˆÄ{z"“Ä JVУ_Œ}ßu½ð;”)DÇt¶ÍYŽDmÑõwÉ;¯w¦x 6lòY€Ä TÚæžâ|V
+Æ$¶ýÎ,3ÚgÃ$yDhêhu [ £Äñ§îDA e7õaŠ£MâÂþ5'ªžT8z˜°:|Ýw®ÚÑópؘ<0®Q7ŸáçSAnQö¦°ÀŽÇ4ÏÓ÷£ßߥQ¥JX;Ý•Õ²¸é]ý£¸RA?xÒŸÈ%á´OÍ;*賤Ûóž»%M‡Lî*‘
+BØ:ˆ<{¹J$1æE Øô©b
+
+²+t êÞc÷ë¿Üõnm5lb•xú°Ê…âL_è@¡m~Óº›Ý3ÈDžørz£ALé…׫ þ—üÈAžgô~üø Œa¥ sJ®Ó†W‹ŸRì`ոᰇ³)¸Ø?údا6BkØ'lW¦ z®´Ðð¼J…”faŸT‘i*fJ™_G¬¿:4þ…<!‰~LWµäÈ™HMÈeÊ-'”uÄ08òËi"si~'Õ5sA™¡1—â€Atñ "Ixc0¡¥eä’œÁl_²õ+ŒšžúSë¸L ‰Åç)``ŵŒƒyØ’à,úX6íì»,àdOr‰IGÏñݤgÿŠÑpƒg5©Zbߧ²ªÆ%ùƒÀ´Ê‡-âj*gþ¨°Òø~`äùz¨þú7\|?¯äŸWOmÂz(k&ÕF;#Cñ—_íNõ&Ô÷Âùúz-L“DYÓï¦èÕ‹©rÓž6ˆób©FŸÖTÈU/
+‹©<ÑpØê›…‚ 2€ŸÊ>^¼d&c¿qºeßÑ
+ç¾`¨ŠK:m0§꽎,à+4CZfÍK´¯{ú‹ ¢A Õe‘’p÷áÈ_úbÀOEÉ÷ýIÑ#ù¡<ðÓ'_O[L#’!#ÿÇà;£mè°ˆ=üw*uCÚuå¯nµu¨º…t06¥…ûضèñNM àÍ™,6!Ýú¥Äòö*KSô5…7M½åïF“G 
+endobj
+939 0 obj
+3397
+endobj
+937 0 obj <<
+/Type /Page
+/Contents 938 0 R
+/Resources 936 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 934 0 R
+/Annots [ 940 0 R 941 0 R ]
+>> endobj
+940 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [289.423 334.083 294.878 344.992]
+/Subtype /Link
+/A << /S /GoTo /D (section.8) >>
+>> endobj
+941 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [328.211 334.083 339.12 344.992]
+/Subtype /Link
+/A << /S /GoTo /D (section.8) >>
+>> endobj
+935 0 obj <<
+/D [937 0 R /XYZ 72 786.278 null]
+>> endobj
+197 0 obj <<
+/D [937 0 R /XYZ 72 618.481 null]
+>> endobj
+936 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F30 512 0 R /F26 391 0 R /F43 549 0 R /F1 882 0 R /F37 380 0 R /F39 496 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+945 0 obj <<
+/Length 946 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåÉrã¸5çÎ!¿ #]eq ‰¹u2vÊ™é¥ÜJrȤºh ’™¡I7—v<_Ÿ·
+ü„Hâñµb j»ï Ú¦©ê™{)fq2º—„϶¶ãEWÏ Vq¨T6 ¾¸¾þxõö/¯¸úîãå»·«Yò…Ppco(!bOƒ?·¤c¸ìXi$ŠÆëðB¦*hŠŽ™à „vuªÉì‰eÆSîE ›·¶Z[^²òÖm[Ü”î(ïÜoušøÈ›®¸CýÐ&Fýà³ÊvÀZÚß‚þãR én‘
+`D‡&2
+n¥ô€àÎmóy°¡bvÌ#Ç)æí¡dÏ™1½³hX–õ®Xçåˆðy'–ÌÀf…~†Œ²œŠYPk†¶µnóÁ®CE‡(ƒo‚
+rÐO™È‘ýÏZËïñëPiý|¹`ê9çÍ°=†WÍoÏ–‰ôYTu“drq² AXaÍX„±£ÁW_bE¥£ œùr,BÆe¤·ûÄw‡‰~”#\ìT*Gp4 $TðbU9ÎÇÜçw ”®ÔôA8ÌgôÙ„Iäïû>'¼z¼·s Õab< å7YTF¨/hŸBõY÷ k¨ñÉQvL/ž½¸˜Pä šù’
+΀N£$ÒÆ&géã¬ÕÞÙÜ-ÛÍQQ7ŒS‹‰øL@¼À¤œ¾ÜG“p/\Åbé®dæsk%²±ÚŠÃR‰_eµÙTm“ùP™‰t0¹Üõ<DF
+KÙ µp>W(Éq¡„Ç›ô v¨ƒJqïëTgÀ·êŽ £˜+„Ò±_¥.úà뢿"{OFç¼Ù–uîÎIÒöÁ½uT5A‘ùdÍSžª™2-^R3Aº!õÿGÍÆ?%‚þ~®£nB5Ð4Î õ °7òHîr³RE#óÁ³:\²%á
+- ÷ÖÎ8ŽrL€Ù6õ[=ѺHp`÷ü8@9Ÿé*ÄzÕñoáè(ª¥«j" sjyp«{(>È!˜ˆ“fŸ×µ÷ìਯ
+j»Á’},|7–›¢±knêàûõÝ=Íq#ØÑö.3‚ŠU˜d¾˜ß¼¤bíAñw–ý|¥Þº”PNÃÖ4c×£V"În"E­V<﨣CÞ+ÁNð Énpš
+jïBqÓ;ɴ쇑ú HiÊc7åÉ(Ù3Éh¢35á‡?òåE?â":M:¦ÓH7ÐÀó¡Ôeðz¶›¡4¨ß fIZ„±ôpÜÙG¤;×'tWÉùô¶ðiÜ‘šÔ+ÚCp˜¦ÓJ¾±yËóA7™~2!³ÑD/Õ)k…t“,%Í|3BhðZB|I7âüðC£Š´GòK°á± , ôl¸>Õ™/«³‘(Ž/ºŒö£§ÝÙÉ}ß¿¾~ýæbuq=we©÷ýœ¢Úë¼£t€&o4/IH0øSÙ]N­]Œ§l$Bò¡îÅÛÜ-\G„Òضn6°.°þá\VA^T4Ê<Ÿ£ÐÝqTu2}ïÞ|ûnõñýÅõ›«ÕêbV"±áÎ$½†Ýš”º5$3÷.à hÆ™ƒôNDÇéðU6>À‘ïfGNî±—;îÈÃc?(:w)”»èÄ+?ã(&ÕÁÆ:ÎU;LkRlò.ç•ýgÑvèÉâ,qc£ÔeôøØ•„4Jõ¡ØxS¸·H é'Ê7'˜xŽ88RâQîÀœÎx¹‡[Ë\ó#;1jÊð9„
+N©±•UJÄÞ›’Já¶/Ê£¤ÔÁkj×e¾]'\‚_°uÈ'èJq¶…n
+H’›ÇC¡û`z`w3C›4ÔYeÞQ¨ÂõºhÖý]ÛáÌ‹BH2 ÚýxŒ’ pËÿ‚¡§ù¤a¡Fe"ðtèÀmø
+Ãt ¢ZCe:c÷SÌèÈœÏùx…p˲ðņ+\ã,!É­×Åf¨¨×FY—$…C±)Úu߶\Ä“¢›Ôup«ª®~·C“™%g?È­GU—Ó+Ø>]²¹ú®s•[Yž»2p;z{è··u_ºRp_Á‹4'š;c÷ÿMá2§IùÈL>9*^ù&̨أq8+èxž3àÎ9çÊ7°O&£BÃRšçG®Ó5ºªÝôÌÝÃópøw Éÿ.ÁÇó³2.÷—"Ó$dÿ½’pT؇eO…§¦eñNËäK§eé×ÿŸgÈ(ól›/Æþ>~ïéQ§‡
+™eÇO4Œþ·‰)ƒendstream
+endobj
+946 0 obj
+3071
+endobj
+944 0 obj <<
+/Type /Page
+/Contents 945 0 R
+/Resources 943 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 934 0 R
+/Annots [ 947 0 R 948 0 R ]
+>> endobj
+947 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [394.423 613.108 413.817 624.017]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.15) >>
+>> endobj
+948 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [445.938 613.108 456.847 624.017]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.15) >>
+>> endobj
+942 0 obj <<
+/D [944 0 R /XYZ 72 786.278 null]
+>> endobj
+943 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+952 0 obj <<
+/Length 953 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZéÛÆúÑù'„
+%‚Qò¡-¾^Ò Np0ž‘ᛲÈSñ2hì×é@[Ëaóï‘­Œñ†¡¢»Ð»ièWÃ> •¬-ù'm¼D²ï/òm˜Q ÷ŸRm ¸Ô¯»Ïy ;Ý-ƒ¦`¼\­NpR²žÜ ¾Ûê Šlª©Ï¢Œ$e#fëA§WèôHB )ü®›ÚsëN6ª`«¦îªµoé(qðí®b»áqÚ¡P 3ÆÆ9žá”·(¹Òq£o1Tq÷[ØЩe%H'|“K‘äðŽ;r–¢/êÉØÁ¸ °ÑQá÷xl›c[Á`‡FX{žNö
+s¶­3ª(wѳ+'†ãþ]y8î=f“Ó±Ny½Ý55Èø[$Ùœökž#ÞÂc«m‚O¯u.›üšç˜ Ä­m¨%ØaÞ Ç]rñ!.÷ž3Q]ýB è…ì
+Ô˜ž
+FúáˆËyø|AIb“iØ8TÚÎ ZÓzFkÏf"Šƒ êUÔ^â‚‹MíyÞ ©6±†N³™.u¬¡½Ìb¨gä ‚`9ìøž•Ù×r^õXD|ºí|ÙÑ‚ë‹Ù{¹¬,R Ç®¦Yeß C‘1Ë•o6›Ëå‡f½Ù—Ûë™pðï0EP¬*ò‡L1up©RØ"œu;úkÄÓûùÿ°Fû¶Æ/‡ã$k|éWýc¶xÏ >!ˆ½­Öýîþú¯¶»þú~Qþ/š—‰J4¯<¶.{ؼL®>ɼ\œÛìÛ¼ìætrLÖ Gšº‡A¥ Ý ò"Ü]ÈfJH Ûv…,»¹™…'(?óŒÏ™ßÝ™ú¸0€Ÿuy Â60.«`î¹Tˆàª qT¥úÉñØ dpì 3ž–ãág#G™Õ‚!ùa±ôqê©`8Êò¥)ow¢ïSWnE'•h
+wÝå›+k%Gâûoܧ}_1+è3güƇݬNmëd ®¨ @çÜñþC÷ED!l‚€Šá;›¶Q͸å5ÿÚ3¦‘sGÙupBÜG™¶Td‘"TƒbHÍ#r°¨ÌN°Nðö7·ƒàÿ|Æ›°‹Ñ=ì^jFì°d‰Ï‡ˆØY¸“b»¢¯ à õñ=[ÐɆß
+¨oj{Ø{c(¶Þ*jå
+…—wP„`K‰µ;=?ScsÑÃ*veéÕºËÅÀvóâ|¤è<Iͤ~ ”$%úÕ|Uy Š)Êî5o¡yÄðM€ÊqÒU ¯:Áb ºA&œ"سŒ”⬭ ÆÑ¢Qà;žðPlSÒ'rU7A"|5¬'XÖxÄ"²HŽ âÙÊ‹–oV«¦]_Xl8w í*”и@´¢ø
+<<Å–`³4 ²
+~ÝW‡Ð'—¥<C÷ئ0™9ˆ$dݵ,fzj¢rà;·‡¿Ÿ:Ùk&9¯¦¤C­y‘$LèQ˜Ü[ Ž]õ‚IjÆÜ]2>-´¼w–•n¶H-ˆà·@e÷¡ïîcÝ· ˜Ð±? .8¼ìüè‚žñ–pÇÝœ3p|
+Šæ.é"ƒ*‡ló¼O¸•¬^•?æB—˜m">_Æ,]Ð-L63ÑÓÀ 4wú¡è Ez2¿ “‹—_LxÉNàe†XÌYØy~áÊ C¬0¼®:0™UÏSFj‡9ƒÛgv‚­fj‚­fæÌX°Õ¥Õ’ñpíª9O\o•²ÿYÓös®˜P£å½ ‚u̜졑Ç~uƒÑ9½¦6¢Ê=¤WwͶ.jðˆ]x£A; û8#ášr§xÁ€KÈ–{ ’gÐ[®¼ ¤f¦g*NmUHƒ¼Ò°…YJ‹n”¡gÝœîö~‰\Ö<{
+…Ó!Á'×ô}sฬΠM߆¢ââ9òüaÐjëîÔòƒ|áÄúL&åªÉ°€é¨+Ãg&f×öåðª3ÞT݉žÃ`Ùö&.
+ɸ¼À)í©®å
+”ìßõ?áô(ý³;oýèÉ
+Ù\8äŠÊÍ\³“uý1±ïPÖTß;pr~e¤…ô5ÑÙ*yðÂÁ©¨E UmøK1Ù*'yc;ïrKµY†ÿEß{!n‡*‡+³zìê©àb­ÓGáë.)­àžo?~¹ý'Èìtendstream
+endobj
+953 0 obj
+3250
+endobj
+951 0 obj <<
+/Type /Page
+/Contents 952 0 R
+/Resources 950 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 934 0 R
+/Annots [ 954 0 R ]
+>> endobj
+954 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [494.463 320.367 508.402 330.367]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+949 0 obj <<
+/D [951 0 R /XYZ 72 786.278 null]
+>> endobj
+201 0 obj <<
+/D [951 0 R /XYZ 72 719.477 null]
+>> endobj
+205 0 obj <<
+/D [951 0 R /XYZ 72 698.281 null]
+>> endobj
+950 0 obj <<
+/Font << /F15 393 0 R /F30 512 0 R /F27 394 0 R /F37 380 0 R /F26 391 0 R /F39 496 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+958 0 obj <<
+/Length 959 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZKãÆrÜü 9ÀªÍ~‘샳÷ÞE<ˆv`PgÄ EÊ$µ³“_Ÿª®jŠ”¨™1,$ì²ÙÏê¾*J.bø“‹T-Ò,*ÍëÝ+¹ ¿ûE(}uÔÓX-¬Á·g:.CÏ¥¶"K,ösóê›·Ò.d,\ì7·¾ïÍæ—èf›×÷ÝÕR§6êzþ-ßo±d¢ŠÏeQ¿†— š·µçÕ]Ó–ývG6E·nËÕÕReQ±á.øšFÍÔ}ÆÿüÐ$*k“S7jjilÓq§]^7-õÛæ,O_ÔôÚû*_Ãjÿ¸ù+ìd)qËÎïh…s>B7­ý2ðØ],‡56l©æ6ïú¢¥rÕÐò÷‡ýr¼5-Q\Xà›·*̤HtÂØË
+öî{MX+¸UÅþ.h©X˜%ï¤ÏÏŒF-ìÄÅ2‘Á„8Ú
+¨TWK)­Œ~*ú¾¬ïðJLôqO'˜‡:}º‚š¼Íwì°›‘ ŽKÅÂ:ã'¿Þï«r ã›Z›h×T8ø ÑIÄ—Ùo©^ѤZEà Ȍ÷û§™e¥‚m¤Ü!¯74—™™K%"Éô˧Â{í˼*óŽNæÍÛUÙ·yëAE»òK±K0ÆE?=”=éÂЛ6Xô¨'Wƒ¢é ôXÀê‡+¯Ô¨tK™aR;ѽ©XÍ[v¬‡k¸- Rø Õ¼¸0Ù«ïnŽæk…±0«sBÚä²±_
+8ã(.1/Ñ °AÔYÐ2,–Ö‡¶ –p.š%åe¬º†Jƒ‚ãË-ñ€¨Åk‰? eŒ° Àø0Ê®;°[è0ÝCß\‚ë<´ûjpýî ®?7åæÿ ýAÚÄÈBûC[{ÕŠõD-¡mŸSõ½Cõ, EOlvÊGL|‰àà>¬øWª8çA(”g$Ž ö
+n
+M£;Ä×~›ã6 Ȥê#üÂK·§c\—¿ÆÒx †ÚÛY§Àåe©|Æoƒã ¾ŒjàóÕãœÅÍÔcüøãws ›Ž"13U"ÒôE3-µƒ˜59ENЪô~ÃÚQE…U6}“¤×‡mb1|ÝyÍcé¼±²nèÙV]wO
+€–qÉXënà:Á¢2ào܉¬
+mÑgãILtW=î·¯g›ûˆuÐÏ£*Â…KVt
+^T´"^×6ª“Ѻ©šö„þqGåÜš‡Øë±/vùžGÕ›æ#4·¼f712n ¿h4±†Ñ^ì‘tàùÐmõÆ núBWö‡~ý7CF‚ç[SŸ ¬„üùÑW&c»€ ÖM aeQÿ Õ
+]LöÍÌ4¨ø"3fŠñ þ<yÑ'~âÏÒYVKÙ ßx¥*å‚î0ÔÍÛ¬"_=Ê!®rnŠ!úâ MK1—⟠É^NÆ ëÛrÝû{ƒ¥Ù)5÷^+jªDLÅ®USßù(A!NœPq:M¤yŒ!Ìù~¾wdÃ[Êü4Œ¡B€¾C²» ïá°
+‚•ÉpíË/žªqåØt稷´ÀÙÌWÌ”¼)ûîSÑ~Bag&«ý~Ž‰;!Á¼/3q¤¦éL<©u/aâZÄFÿo0q >ÅüÐM²u>uÙŽCf¶ˆiÚí#Õli(k5:"xä^¥ îí˜%¤ÑA±íeŶsŠE×Aèc.Љg7ãçÉ$®²Ð@éæ˜dLáÛ1Ë¡œŽ2ïâH&¾ #e°A±ÁÀ/:½Iú¨hypyK]i,<¾ŸÒa^¢¤c)Úšx¾rV¡¡%r9<œ0VØ·‘Ù‡*:Qv‰H”ÉèH‡ýk*å›M‹áƆ_=nÆQkZý³X÷¡á[â¢B°Ú\
+û5<?m–êCO5×-^œèÆ8nBH̤7•Å(´÷ØÃqÔ…õg‹Så†úÍGVÐ# vòQ .åa!8«—;Œ¿ ¬ý¡§Fï ‰³Xô”¥>÷täKu´)Û‚Ù,¼a—sCƒ‡Ì(Nž[ó `ÌQûèñü'8瀖
+8 ÚÝÓcÝ=ÁŸ¾({Ù1ÿãqƒendstream
+endobj
+959 0 obj
+2888
+endobj
+957 0 obj <<
+/Type /Page
+/Contents 958 0 R
+/Resources 956 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 934 0 R
+/Annots [ 960 0 R 961 0 R ]
+>> endobj
+960 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [94.621 282.186 108.561 293.095]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+961 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [155.032 282.186 165.941 293.095]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+955 0 obj <<
+/D [957 0 R /XYZ 72 786.278 null]
+>> endobj
+209 0 obj <<
+/D [957 0 R /XYZ 72 719.477 null]
+>> endobj
+956 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+965 0 obj <<
+/Length 966 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZK“Û¸¾ûW趜ÔK<Iææ¤üJRöa§²‡ÝÔ$Ak(RKRO~}ºÑ
+¿>3q®tΊÂ@C1%³ëó¯ïÁ9ã¹ Z¹{ñýk‘ÍxÊŠ´˜Ý­ýœ»ÕOIY÷7s-trÇyùò׿iíã?mupÝÏ©NiìPwå¦v+úªšzC­‡mÙ»Û›ÝýmÆeÆ”³9Ç#~ïkË6@"Ó´.ýâ:=Y¡?»@|‰Ee—÷pdŽk^¼º{1×,ƒ+›Édªƒìà>™,òYëfës%Y®AF†¥ÙLæŒ 95n+tF¸ayžÑ„£¸S¦ŒœÍuÆèG”˜”{ ~ÿšëÑ(‹PaÅÏq¶¨„†uüá¬R1 Z†Gæf‚Ñ9ÜAŽwÁ8W'}2 Z+`φsœðz<G®’¦½™ -@7"OnD–¸–8?QW¸b9œp±ßOÜ/X!ãá>Þh“x-ÆýeÒÔÕ#¶xÒou $s$é¹X”}˜o[G]‡Î­ØÍ\ñ –ÃÛr³¥ +÷ÑïQ…•5~õ¥­JÛ•¨]Dµìhá}Y¯¨¯YSè*.y<n„Z;7
+Af‰,liÀ}Úñ%q­KÄESÖÈt"Å^[‡ß6Ü2}ÂÝ_*…©<jÙP\*]ð¬eXñ]÷çhPƒekÐ) y&û•0þ'D˶ê¦à¯`h]G?Ä‚§À/g™ùè“,Uêùò§‘ï!Hñ±R^*£,K#ÇQ@
+Ü÷Dî¿9r9Gj–æÙr´o Üüá~•pŸ/šzË5ÿÂýVQÒ[×R¥ú¼æSÀÇìù©4[û;%aûä1‹É#„½m{jÚÕ
+’ÌŽ>¼ƒÁÎ:üŽŠP4<‘˜œ¥<æWÊNBøÍ™éV ëƒ=ø;2¹ð  {9„0½=eàà gú¸°*%§B©¯¶eß»:ÿÈ;ã„Û5íchüÂô³é''<éû}UºP‡\ …»4újC"’nq’cÃʇ²ªŽìM屚Âo£ÂPLp>Î O,{ª
+U¼i=„w
+²X^¹BIrf21¦ôöó¤r–óll`þ,>”GRâIŠ
+ QçcŠïÿ[Š#…
+ª£ÀøQga}ˆ!Q”J“š*DªtŒÜ‡Â6ŒmpM5)ÿ¹¸V-ã
+¬Æd_bÈ€J*¢*PÎ
+cR*¨·
+6¥Fyv.mUy%…»¦š34‡tÁ„…è´(˜á§dï0òNµ/¢ô[ ªT%Ê*ÐÄT
+fÜ6qdΩˇ¾°°u˜mù9•^ðǵÀíÚ¶n¦+‰BF,$ËAšÇ9Åü9°ËeÓ®€ef®ð"Γ˜÷<”£I)ítH‡˜–'Oñ
+–•i_hÁÍãE“O†¨AðÄ'7^&¦ ÓÀï*üÒ‹5¶Žç£3@—=ôÍÎz{|ûW“• q@½
+s©8Fº°hNÇ™_!Ðèý“±ÖCÔ˜¥I¤<,%Å8zŠ™<:|ògE„}«òô³ÿ—#gS‘§s“ž“píBèëÿÐó&5ê™endstream
+endobj
+966 0 obj
+2560
+endobj
+964 0 obj <<
+/Type /Page
+/Contents 965 0 R
+/Resources 963 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 934 0 R
+>> endobj
+962 0 obj <<
+/D [964 0 R /XYZ 72 786.278 null]
+>> endobj
+213 0 obj <<
+/D [964 0 R /XYZ 72 199.968 null]
+>> endobj
+963 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F26 391 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+973 0 obj <<
+/Length 974 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝYKoÛʺtþ„D¼œ‡ìÎMóêM\ÄÀEÑ´4²ˆP¢LRvÝ_ßó˜¡H™–²ê¢ðBÙ33ç}¾3³þÄÌÊ™ÍÒXÚl¶Ü^‰ÿý˜…ѯ0ǔڨØhüº@¸” ©ã<I/Ñg"¶¨E–Çyž#ùì~&^昻ï7ø‰_ÞoóÙ_ë«ß®f¿]-Â)\)=³r–Ä*Ïf›­ìJebcžô—8L¸ 6ç³›5‘Þ¬þ½/ï›/T*#ùçùÂ$:ºÙЄŠÚ®)ww¼ø](}3ÏTäÜkœÑÑ÷Ä$›r9—Y´a¢²å]8áƒk¶ÅŽÇHX7+þZ×Íñàίá8ÁKMÑv®qž°èøW(þ½Ý¿ÁAÚž9=ÿ×Íß~y¯Ô@B­Mœ˜ÔËù'¦é`H•™!p lveQ•^ÏLE_ê®\¢PJ{锊Vå+à“7ðLãökqÊF]Ñ•õ®å…zÍ¿ýÞ%’lŠ¦X‚¬<…šp¯cäôêÝÍÀÂÄ©½äf@§’8Ëtoq•OXüz.M´;
+8¡cca§'èèSÇ—m½-n+2|ÝÎe=ù·.•WH±#
+-É ˆtú
+ª¬ïî&)x}YT•W\}ª—…‰µ1„2Nõ™è~YcBÄ"“l¤0i'Vî@J»\_sÝ·mÑt¯W#€—zš×È•=·À¥…c~ÔTØ.´Š33Ëc#ÔLe±
+f¶'Q¯“X§
+|%NMvt5ô6‡´"µ_G¹‚ 'G€ÊŒ0Gº^N¥c¥,ÅŠt‚Ï…ŠŒi,„ž3ÈçX!)Bdç“%*‰èþ€a›CØvŒOÌøÈši5Àúd¥ %(Ðuh6õ¡Záù ù¬üe®„ nxžß'0„ é\çï¾MݘÇi’ô>Ȩxó²n ¡ì)fêݪåk!hUpÒÄ)H§L€óèÄ™øòõ©m>ɃgIAÎ;L“ÏùRÖ_ÊfQIÃÀoŸ5aÜm(“#ÕÆO- ¥ÏœÒ'Lœ&_œM£Ê=`²t•'jù·u~×íK6W*ÕQx
+ÞÏîÁUc)#OâDe”þª]ÝUÀ‰°<ª¯äpôÎaÈ ŒÁJ›²EX•G×kÊò8»)ä¤Ãïö±ì¸ð`ÊWø+½—Òð¹b´JX‘¸ ÅtΟ"¬ÃŒtˆ@0”' íj¨»h<p®ß7nÇóŒ(›OZÈz=Áê²+ùþn»²òVÛž&øHWüP.‹Æà­®ëü ùÑgªš}îÇaï½ ËД8ź¯¬…¯¹uU7£ò»»óå˜Ù£Á~ÏA½CMà±Ær5F ‘ ,’: üJN©¨*·e×ò2•}Ê>L4îþ
+ˆYÊÀD=Å'6F££>ý}²…˜“çö$!¬¦’S9´œò‹Uß`
+9 °w ˜Ói!¤…yeƧˆ{q™}H •Ë8ƒníD’¹‚ZJøÀD]•À.Ï6Œ½ˆ åße1Æ°žpÒ?
+L8 Å‚ ~&Ø DõI%æc»–®dÏ…
+|'z[“!|EjfÑ¿DØ ‚¹eMæ1-AIi†1 }Ý6Ø †=Ge˜^ÈN=†ÓžW ؼ¼Û„Ç2øDí”cƒyƒ³ƒÿJ³ÅŠ‹ûUqç§)G'!Q‘VëaWÞ¼}xÉ5ÂÌHU~•Ÿ÷;híá£Ý”k~ë€mÇgºQK =Hõy/ü›Cb®¡6íl+˜ŠÓ›$`z)ÍËIå¿ïù‰endstream
+endobj
+974 0 obj
+2399
+endobj
+972 0 obj <<
+/Type /Page
+/Contents 973 0 R
+/Resources 971 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 976 0 R
+/Annots [ 975 0 R ]
+>> endobj
+968 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 30 20]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 977 0 R
+/Length 978 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+978 0 obj
+29
+endobj
+979 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 29 19]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+>>
+/Length 980 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚí“Á ‚0†9÷Äo)r# QnU^M<›èÁ¡#8èOŸiNN$þMèkûú•¾÷G Å}ûõ·»x¢¥™¤Äö«8Š{%ë´w(*!Ë3ÉÓ¾J3y€Ÿ,TIQméó×Âõ°ÒZ_­Ø¨ëz&6Ïs6´Œ¶mÙ˜#cÌ
+endobj
+980 0 obj
+255
+endobj
+977 0 obj <<
+/XObject << /Im9 979 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+975 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [393.34 169.824 398.794 179.521]
+/Subtype /Link
+/A << /S /GoTo /D (figure.2) >>
+>> endobj
+970 0 obj <<
+/D [972 0 R /XYZ 72 786.278 null]
+>> endobj
+967 0 obj <<
+/D [972 0 R /XYZ 120.726 535.822 null]
+>> endobj
+217 0 obj <<
+/D [972 0 R /XYZ 72 217.517 null]
+>> endobj
+971 0 obj <<
+/Font << /F15 393 0 R /F33 497 0 R /F39 496 0 R /F27 394 0 R /F26 391 0 R >>
+/XObject << /Fm9 968 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+990 0 obj <<
+/Length 991 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZYã¸ò¸òü²ˆk)’:˜<Ín2É$AÈ4°Ù`![´-´,yuÌLçק.ÊòÑÓ¹Ð@›*–xëøª¨d¥à/Yåz•Y¬óbµ=~•¬øïiZsÚÔĩŧW×smÒ¸ÈRäÿöñ«oÞ%é*Q±Snõ¸#ÞÇêïÑÐýÃÚØ"Úõåv¬»¶lð9‹Êc7µºˆF|Σn't~<ÕŸ}ÃÍR8šÙ?ñÃPÿÓñÃ?ÿôÕïçÅi­c“8Þü´
+­ó.ÔÊÄ.uóâu±Êc—/—ž$×£±ËrØwxóKbJcí
+^ÇËÒù¾å=/B€VÏÍCÙVW½§¾Û4þÈÔz`bÍB컇µÎ£jÚú
+×½Zk“ÅiaWëÏËÑ„ã…imùrû
+ž!ädw&-’XÍ ä%·¾)3aapæŒþÈ‘Õ¥Ha¢Šò ¤lB|ö÷û5[„3" ~|
+¼<š­ÓÑû]pOt„©‚ š¤åž©ÚÁ - $òœ-Ý m¨ì¾ÜYÛÒB§Wý›»'ƒzµ<™~üœË4¾€M;3Ÿ8Ep˜öåø T+e®òkÏ€ÓBv“ D̓`Š­#mθ ™Zcù$é
+͔魇Ž ¬å&ä’‡±]X‹¦¢ZN³±N.5Ž9àqáC§)jCkÂvȳˆ,g-]·( µ¢gÜÞ–-§ƒ© ®²hšÙ週A6ˆ£¢1<€P¶í4wAPßA;lQ £¡ˆÑ1¤œès n‰GGÃñ¶!dhDq̺ÕÆ´à9tÖí7Köñ'-o¼dA8¿½¥ÏL:$¨‚Üî#,šÒÒvKfž‡*P6ç’R°zB h‚¸1¥ÃGvÜغ,µ!åPïi}Øö¿„wÞgìôqØ0MÕM›‘Œ 4äÂ<• çIždE#w.†ó +Øœ¥PŠ¼;lœ$¡ló¹úXß îàH”]ԨɲèÔ””_f9È©kÄUg7ÕR$eÅ6'ÿ\ɆŸáàýÈÃFÅu3¦Ïò¹zE;_¢Û~#F®’KÊ ¸á”º÷o.¢‡^ pJ:çHQ³8ÁÉäè:
+” °v`ËZâb`bm A{@D šÃ2È%átþý46u€ÞUì_VMV3‚ìïá%ëb§³×Q  Š”ÐqnMµK~$«ÇÆÂGî˜Ãq‘°õHŽñ\ˆH™pOÇÛ
+Ã2‚§dTöÂRò»è¼4ØKŸHuNHy˜…Œ‘׌©ãv뇗\‹@_UŽ%X“SM#•Ü
+÷ë<Í%¥B2_ðà<m#3ʨÜÏ©’AO'DªÍóØHõ‘À–üŠ‡ ¬aæâv¶PF‚e]O¡’Ô•˜†ûÝ#ˆ½NHÀΔÍÁÑ@ÎålöŸg979NÛ4ýoSÀR  q7 ©'V PÊ¢BVªÌ¢Ð¤F¡C®ìR…¾o)W&I8‡PYÄuZ,™öØæê‘
+·…ИZ&;q·Ÿiq¢rFy Ž%e@:11è½ÊÏ#^”Ή‰¡B5H7y“FÚØ&nÞØÿávVÿ/·³2ð×.gª\\kHú0*—•uºÁ¤ Ý®&áÖNl †mÍe?2•,û̦EˆF)16)1²°S#pÉ[½Ÿ“å‘9)ÓJŠPð.Þ ¹ý쫺%Äy¸0reÕäëÈõ?¦ÊJЃZFñ<Öʉ¸~{'‚Û¸°¡_q}{m­Ž>Ô„EÊ“ #‰i®/úDŠf¾„è+f!}fÅæFnKàQktÆÅë‚Š×8WWu~¹Õ›‚&G'&©ÒË'Я©ƒ Áù–WÀXõ w‡›5ì_\êÀèFyàê]ÄQï8â
+J*çb5`ßøÛ¬êDE7 NЀŸó8„“°Rîu‘ jdgƒÖ9,rf´Û‚õ«{5³8Ï36îBÊ 2-
+éÒxÌžy¤¾Z¨PbòÙ -™D2{ø2 ‚¬E"ÂÄ¥o|­¸Ø8¿F¿’ˆ`>BrÁà¶x!äJ!
+endobj
+991 0 obj
+4047
+endobj
+989 0 obj <<
+/Type /Page
+/Contents 990 0 R
+/Resources 988 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 976 0 R
+/Annots [ 992 0 R 993 0 R 994 0 R 995 0 R ]
+>> endobj
+992 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [294.319 748.292 303.286 759.508]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.11) >>
+>> endobj
+993 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [122.441 531.505 136.38 541.202]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.3) >>
+>> endobj
+994 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [319.427 305.559 324.882 315.256]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3) >>
+>> endobj
+995 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [459.301 291.404 468.268 303.226]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.12) >>
+>> endobj
+987 0 obj <<
+/D [989 0 R /XYZ 72 786.278 null]
+>> endobj
+221 0 obj <<
+/D [989 0 R /XYZ 72 407.847 null]
+>> endobj
+969 0 obj <<
+/D [989 0 R /XYZ 88.587 141.006 null]
+>> endobj
+984 0 obj <<
+/D [989 0 R /XYZ 88.587 119.088 null]
+>> endobj
+988 0 obj <<
+/Font << /F15 393 0 R /F28 523 0 R /F33 497 0 R /F39 496 0 R /F27 394 0 R /F37 380 0 R /F30 512 0 R /F34 583 0 R /F29 547 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1000 0 obj <<
+/Length 1001 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕXKÛF ¾oý :Ê@<ѼôÐCƒfÑ´I“ F‹¢)‚±¬µ‘¥$w»íŸ/9ɲ-¯7z(A43É!?~¤Ìƒþxˆ Ic&’4È·W< ¿Aÿô#쑤Ғi…« ‚ó^r.Ë¢ø’¼à,Žã`Îe̲,Cñç‹«§×\<Y°¸q¢‹Õï¡yi>ûcñÃÕ‹Å K&¥$Ï‚Ogøÿa÷Ó ë7ž^oy|W_½»
+Þí]‰“‘ ‘óN,Ï8‘Éì³àƒs¡9
+Â&˜ÒÂœa2Kƒ¦nö!îEUÆøþ^Ûõ®)fs©’P>›ÍU¢ÂÅÝL¤a›i˜×Unº¢‚+ÚYÚnknÛ'°ÒÜGüHÔÖm­êÊ+_š¶WÐzEþmÞûƒÒv­Ö¸ŠCS­0˜à0`
+ˆ”BT(@Ŧ8ˆ­_ÜøïÚwöOL¦—Èg" 7¦1yW4'áQ®>†6¤„‹&@‚qÁ‘OS5À_ÄÕŒ+0â üf¸XªÂëY‡u³5º|§¹ˆ˜†Ð¢’çÅMí¢%âp]n…
+m…Qè°Ž„íö¶,¶íõû«¢3¶liѹÃú¨ŠÆ”´h»f—w”Xºƒ~C®pngs³w‚{Áá>èMKg«¢Í»$q‚_YÚÝæ×Ü^pÿ;[–ø¤±¶[»*Z9?ñ¡u×¢ç£Ü»·Æ¹§­»MÝzíƒ"#ÿœÆM
+î*ZÚj¯Üaò?2V,ÎÈ6äQ¹l÷ôq(¥‡ ®Ž5j(.uç51¨à˜qüLÛî¶þ¹Û”ÀÕ$b€·:ks±X#©ª,\7Öq%Ý{àBí™ 6ˆ®,ܳäÆ´ž.˦0«{óyv¬$››¦±DÃ.üèrʱ´+o™¨FÉA5Ö“ô³›…½º%.îI¾-º –îéàYû’h©¤d4Š¢ÒŽ²(”o½
+=7æò?A‘±M0 œBêë)pêËd9Âðy¼¾v…Få:?ŒH3@žŽºCni~CqÉH#°§Ké]ðo¿]|¿øí틯ßüòb"QæH{yläÏH9Ù‘˜77ìgìzã€ãw¼¯‰÷Øbc‰jp‰0ßõjÏ®èDƒÍtÌtù®i<!Cb“¤Gik==Ö£ï$í ‰+ÛÞ–&w…”ŒFxnë­ª¿‚’
+&:Äéð¦§4áË
+'`éU%rh;S÷áQÊ"¡ï#Òó”Å'.£X‚•?Èü3a¨¯æófÔØŒ˜*8–fGÄxjæÊDÊ/3„÷¸~¼>eÇ6ˆýèJOÙYZs9–>Çø-à oôC >ç¦-è+0pßS‡dü==€( Ž7M½¥'ŽŽ'Ÿ–ëÆ®qžÁsäÜ#¾€ï¹àù1¸÷oŽŒ =®Ù½‰ò;dˆ¢ZípqT¸çGzî‹Àm £
+RuÔÎñ›z¢ã¼7ÝÎ\z¢›¿zùÓc»9šôÝÍú! oä4<:˜ÁŽŸ8ñ¨ÛÐQç{XŽ=í¿ØI¤4ý×$Õgé`•K#*SÖë{Z8½YäMÂÆ9®ÀŽ)jwN˨ÝMµ!c@Güß´¶HÒü Ž7ŧm\ À+ø꤇ƒ”'Du1ÔÞKßÿ„Θã
+endobj
+1001 0 obj
+1729
+endobj
+999 0 obj <<
+/Type /Page
+/Contents 1000 0 R
+/Resources 998 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 976 0 R
+/Annots [ 1002 0 R ]
+>> endobj
+982 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 177.999 137.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1003 0 R
+/Length 1004 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1004 0 obj
+30
+endobj
+1005 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 177 137]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/XObject <<
+/R6 1006 0 R
+>>
+>>
+/Length 1007 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+endobj
+1007 0 obj
+50
+endobj
+1006 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 177
+/Height 137
+/BitsPerComponent 8
+/Length 1008 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíÝÁrÛ0 „aŸûþïëöÔñĉC‚
+FWŸ5r?A›q§ 4e€Åôòm÷-J‰5 ²°ì-S˜ŠØo*h¢·úù*²þ”µ×¿ÿf ¦Ž¥Ü`˜9´¯êçÛ²’ÁþSYsƒöozú>øë YA{ÿ_A0‡­²£q—È5.æ0³èJ'~—«‘
+-Á0gÌÌE"0Â`ÀCiìKE×~Q÷ù´x¸M5Ó%ÃÖ"Qj±ŒZolÊw£ø5bb› ‘Þ(~þvw²bû'YT8$y2ÏÐMx8–
+0‹Dc3‰‡ ¥ üQz“³å›6cÆ–½´^`XˆÄÌËÌaç ¥¦éµÃò¶0±9¯ 6Ab‡:‚áÃc–QàáN»Æ`Mu’òP‡„«™WAbΤàЬ¦ÂÕ« U|x¸â×f:†«4é©öä¡+.È:"e̼Dç0Ç(˜Ãµ:É%wÇ0‡ý‡‹,*Ü~uÏžû²ñp¹®²‚
+oß;‰gÃx¸\1NÎøcÏe7**Þa†Üð°ùL‘NEï¿¥Lk¿û*²¾ÚHØv/˜?¤p†Üú–l9`XÌ9Ÿ{ûæ$]d:`XÛ ìS&/°X»Yôe¯æ¯=Ì4/Ãø«¯RBéÏEw(n“NrÐ%²Ú·Wì3YŒì)1‚çAm;fv}NÝ&ñ0g²Hù´sè­5ªÇÌÄòÅ6‹XŸ‰‡ÜÍ¢‰ŠôI'Yj¹Ë[z‹ sX;¬¢"v¬BY«c‡UH¨73¶M–c“9lFUÅH¤€‡{SáyP{R1mäOäAùnCÅsøê& 1'wŠ Wi?æ¨
+endobj
+1008 0 obj
+971
+endobj
+1003 0 obj <<
+/XObject << /Im10 1005 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+983 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 177.999 137.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1009 0 R
+/Length 1010 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1010 0 obj
+30
+endobj
+1011 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 177 137]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/XObject <<
+/R6 1012 0 R
+>>
+>>
+/Length 1013 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+endobj
+1013 0 obj
+50
+endobj
+1012 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 177
+/Height 137
+/BitsPerComponent 8
+/Length 1014 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíÝɲÛ0 DQ¯óÿÿ«déTžc
+0 <Tò0µù
+¢Ë¯ááê9ÉnWUfPau&×è#À°ó,bž<<Š™ûÒ_=è`x“×áâaóž"œ
+mæ½þûTDE Ûæ‚ú&…9ÄÆw2dË©
+<l;yH:Æ6ùT>0¬FeÅÌHϦÂMö¤¢¬åäAøCÅ5½{…‡$jæNcÃ]Êš
+KAïTX"""""ú£_¿>ÕÜXendstream
+endobj
+1014 0 obj
+965
+endobj
+1009 0 obj <<
+/XObject << /Im11 1011 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+986 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 252.999 156.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1015 0 R
+/Length 1016 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1016 0 obj
+30
+endobj
+1017 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 252 156]
+/Resources <<
+/ProcSet [ /PDF /ImageB /Text ]
+/Font <<
+/A 1018 0 R
+>>
+>>
+/Length 1019 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZÍŽv7 îWJKná,K¥9ÄùÏ$. bvmWSU*âC*³àöyìÄvδˆÒ]_ÍbÞøMÿ>¶3.:ÿ¬ß/ïï:¿;]=„tRŽW‹å|ï”Ø®ÐÎ6.
+#ŸDùJmœ5]¹änë—#·u`QRY'&[®^£”.ŒA#>`7ÌåËa"L‚ ¸Ž¿Uáåøöó#ãcÆâß©áëQñ]£M+%L™j®Wˆ›NáJµl:U|âíº!DÙ¿N¯•Ý§„%VusUG/__/Áôì]pñÖã(óz¤V®XÊ™c½¨C#P¸
+6¥¯Ró™¢"á7.dKDO"9`¨Ëc ëy(!Ó<° Èæyƒ.q`‰`TDep×A|ôz¹»ÆHW›Z£µ+'WkT„I6µtéjÙ†%µ1Ðõ¼ÁÕ¢=®…H—ß KWË6,Á]‡›»J¯× êUòŽ5\}TÄܯèÉ<—ëkʼnuÖ`Cx;PÄy÷:›B–ÝÊ{­)tƒJ6Oß¿ÁÞ/_™×£G:×(¬Ê8ÌG=;ãà5â$¶% qÔm2Øó:1)­Åubrðõ¼'Œ‚PâÆ¡e¹Óî˜ë—Ã¥X;LÊÉá­â¨ÇUîõ ã•ë¦›S¦dTøZ3É©Œ|mºQi}žÐµÌ‹ƒ­õ^§LɜÔÜïPÝ\ŠµÃ¤\Þè!Ž{\åฆ\,iƒ§L  †Æ²gEj@r ÔðAö¯ïÑ·Êv=®kMs§ Øùv¡ˆI`;TÂÅà®ÂôÙ#êõzÄ€j6†d#¬zæ‚8¬ÞÆ€±a+Ð/8Š:ö4ä„qXk­—JЂª ´àê^’Uß1…t7-Äaª™»ÌZ^#¬ŽUyjG«·zÏ«rùŽ)·sXkíH°ZVe -­^áM¯
+á;–Æá¦ÅÍe¦ÙŠ6Jn¹Èœeîš-·m˜´ì·“ÁZÚÌg”5ƒ92Ú :QšúýÐŽßU¸ƒâ#é… Kep2ºZF™REšÏú‘‡Š°«9`;Ðèò e°–v«Q–\Æ`Šm7¨Z&‚~¿´ãwf~=¢^œ]ËåþP£ƒÃ¢üãøÛñ%·«|~}†ó›Ã^»þ¿C÷-lÀ%ÿí‹Ø 9cRüÚ>ý }/˜pñÓH߬ñ3xË>û¸ÿÉÂ{eáÍãÏfaõ÷'êñC·Vï¦üož«‘Ÿ7™’®ÑÙsÇJgJ»@ÎB£Ä­q¼€3LAÜWâÖ—ù±ž½VIÁJaDáA“Q,wÚJC¸ø‚ø+Šòð
+n~ §@äžéŒ¨3=7¦ uxŠ“ÅÉcÀõŒ°Y”Ë3.í¥Ÿ‰ råË3«éLзfœ‘B!Å3áÆœùîÌvC”'HÕY©Œ°¯TÎÔLÌwgÒð)r!…™‚Â9ZGi…âbŠLð\nÿð!’”Æ™M‚À=FO\ЊPàÅJCFF–&uxÖʽs›Êô_!Ÿ¦Ž½ CÜXb¸j6èÉ(ƒÉCŽBIpQ= ì'†H-À `‚M$ÒTÖ»e ;èrf$TŒ“'ŸÜI(0möCS&~³èg•Â#—#ƒ_\BJUè’[ß( œ«
+87;Å|Z<mlw5ÈÞÖ©)OƒÌ±ÆMæÎÓZ›^<Y×^7Ý;c…Ä›š§#‹Ê Í„½cZˆ»™û
+4Xª™ÍÇzqŠD%!»åa®N¿ I¯°^öĦ7TîÇw"ôà‡%~í‹Ë¨-°b<ñòŸ®Øu-"u™À±%H8Jü-æi…1ŒÙàÊÄWµ:`e>Ü­øͪòäÜéµ
+˜ BeùÑŠ:Äá,®é‰ß…¹SÄæ*§à#ù [(ëP…ÀóÙ&\ÇCKú¨™Ù~#0xûS(ÄX#… §dô‰ù Òóž!é{ŠÄÅ`¨‰òGž6fôzÅ"l «‰ÔÝÖ«RoBmgÑC¬B÷„<¢P¤N²“I/[8§:áXÒd¾2"J„-qqé“"‡¨0â3¡_’ß„úyÕ#Z”+$¨ˆÂy1ʾ'¢\‹É‚Œ«m»)BíwaÎm˜k_¹)•€°)ïZ3BÞ ÃÀÆ™èÆËŒD7³7äeS€\‰3&–Ÿˆñ'ÑæJ´…vwS–SßB‚
+c9maDm‡ZT•¶ð£RçsƒE¨¼ñ¥=Š­Q³H—W>‰tͪ‘Ñ}Kà\+[RQ-•Óßj óäDÿ1e¶ü¥0Ì{Ž£mªb0ÃâzXò† áep
+ì³!µR7HBoˆ„¦ ¶@‰â*ƒ¶·(Câ4¶­–5!-(¥Ék¨Á-Šor8–SnRÄ&®ÕÔ©îS§5öjm@! ×­~ Ÿl‚~Vc
+µdµ74œ°¥7
+è˜áÈ­—ˆŒið‡µ |ËÖ‘Ä€^¨á] (hu·Æ&òs¢À›ŸÈÈãzƒJeÆÞD‚\Þ-y-‚e½%²ù¼a%1€zSJæèôÆÏ(Ö*ÅHåãM¦Þå¨ÊãͪÊì ­êåM¯êî±ÚÇzçeAï®ÕÈÞ«#¼KW_Y#¿¼é­¾:ÜÇ
+VØØP¡ås‡ŸÏ& >¿hÛˆ£qîSæ‚OJš.>L­tòyKÎg2MJŸÛ4qm´ÓÜöéOóß'DÛ" FlÒ4¨±itB‘«†U6ÒžÙØûvŽfüi+ÿ’µ~½¼?ÿò|üéÏ'ÏßúÿZOüŠ¢
+Œ ëw¿ÿê_"3Ouñ~÷‡)zÌgÐ}"ú_ŸÏ/Ž/Žÿ
+endobj
+1019 0 obj
+2542
+endobj
+1018 0 obj
+<<
+/Type /Font
+/Name /A
+/Subtype /Type3
+/Encoding 1020 0 R
+/FirstChar 0
+/LastChar 15
+/CharProcs <<
+/a13 1021 0 R
+/a12 1022 0 R
+/a11 1023 0 R
+/a10 1024 0 R
+/a9 1025 0 R
+/a8 1026 0 R
+/a7 1027 0 R
+/a5 1028 0 R
+/a3 1029 0 R
+/a1 1030 0 R
+/a0 1031 0 R
+/a14 1032 0 R
+/a15 1033 0 R
+/a4 1034 0 R
+/a2 1035 0 R
+/a6 1036 0 R
+>>
+/FontBBox [ 0 -3 46 68 ]
+/FontMatrix [ 1 0 0 1 0 0 ]
+/Widths [ 0 0 51 0 44 0 52 0 0 0 0 0 0 0 35 43 ]
+>>
+endobj
+1020 0 obj
+<<
+/Type /Encoding
+/Differences [ 0 /a0 /a1 /a2 /a3 /a4 /a5 /a6 /a7 /a8 /a9 /a10 /a11 /a12 /a13 /a14 /a15 /a16 /a17 /a18 /a19 /a20 /a21 /a22 /a23 /a24 /a25 /a26 /a27 /a28 /a29 /a30 /a31 /a32 /a33 /a34 /a35 /a36 /a37 /a38 /a39 /a40 /a41 /a42 /a43 /a44 /a45 /a46 /a47 /a48 /a49 /a50 /a51 /a52 /a53 /a54 /a55 /a56 /a57 /a58 /a59 /a60 /a61 /a62 /a63 /a64 /a65 /a66 /a67 /a68 /a69 /a70 /a71 /a72 /a73 /a74 /a75 /a76 /a77 /a78 /a79 /a80 /a81 /a82 /a83 /a84 /a85 /a86 /a87 /a88 /a89 /a90 /a91 /a92 /a93 /a94 /a95 /a96 /a97 /a98 /a99 /a100 /a101 /a102 /a103 /a104 /a105 /a106 /a107 /a108 /a109 /a110 /a111 /a112 /a113 /a114 /a115 /a116 /a117 /a118 /a119 /a120 /a121 /a122 /a123 /a124 /a125 /a126 /a127 /a128 /a129 /a130 /a131 /a132 /a133 /a134 /a135 /a136 /a137 /a138 /a139 /a140 /a141 /a142 /a143 /a144 /a145 /a146 /a147 /a148 /a149 /a150 /a151 /a152 /a153 /a154 /a155 /a156 /a157 /a158 /a159 /a160 /a161 /a162 /a163 /a164 /a165 /a166 /a167 /a168 /a169 /a170 /a171 /a172 /a173 /a174 /a175 /a176 /a177 /a178 /a179 /a180 /a181 /a182 /a183 /a184 /a185 /a186 /a187 /a188 /a189 /a190 /a191 /a192 /a193 /a194 /a195 /a196 /a197 /a198 /a199 /a200 /a201 /a202 /a203 /a204 /a205 /a206 /a207 /a208 /a209 /a210 /a211 /a212 /a213 /a214 /a215 /a216 /a217 /a218 /a219 /a220 /a221 /a222 /a223 /a224 /a225 /a226 /a227 /a228 /a229 /a230 /a231 /a232 /a233 /a234 /a235 /a236 /a237 /a238 /a239 /a240 /a241 /a242 /a243 /a244 /a245 /a246 /a247 /a248 /a249 /a250 /a251 /a252 /a253 /a254 /a255 ]
+>>
+endobj
+1021 0 obj
+<<
+/Length 1037 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1037 0 obj
+161
+endobj
+1022 0 obj
+<<
+/Length 1038 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1038 0 obj
+180
+endobj
+1023 0 obj
+<<
+/Length 1039 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1039 0 obj
+183
+endobj
+1024 0 obj
+<<
+/Length 1040 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+NÎåròäÒ÷ôU()*MÕªÓ÷
+endobj
+1040 0 obj
+139
+endobj
+1025 0 obj
+<<
+/Length 1041 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1041 0 obj
+182
+endobj
+1026 0 obj
+<<
+/Length 1042 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1042 0 obj
+166
+endobj
+1027 0 obj
+<<
+/Length 1043 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1043 0 obj
+138
+endobj
+1028 0 obj
+<<
+/Length 1044 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1044 0 obj
+175
+endobj
+1029 0 obj
+<<
+/Length 1045 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1045 0 obj
+164
+endobj
+1030 0 obj
+<<
+/Length 1046 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1046 0 obj
+115
+endobj
+1031 0 obj
+<<
+/Length 1047 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1047 0 obj
+134
+endobj
+1032 0 obj
+<<
+/Length 1048 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36U0€ÃC.
+endobj
+1048 0 obj
+16
+endobj
+1033 0 obj
+<<
+/Length 1049 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31V0€ÃC.
+endobj
+1049 0 obj
+16
+endobj
+1034 0 obj
+<<
+/Length 1050 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31Q0€ÃC.
+endobj
+1050 0 obj
+16
+endobj
+1035 0 obj
+<<
+/Length 1051 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35T0€ÃC.
+endobj
+1051 0 obj
+16
+endobj
+1036 0 obj
+<<
+/Length 1052 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35R0€ÃC.
+endobj
+1052 0 obj
+16
+endobj
+1015 0 obj <<
+/XObject << /Im12 1017 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1002 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [436.697 273.278 442.151 282.975]
+/Subtype /Link
+/A << /S /GoTo /D (figure.4) >>
+>> endobj
+997 0 obj <<
+/D [999 0 R /XYZ 72 786.278 null]
+>> endobj
+981 0 obj <<
+/D [999 0 R /XYZ 120.235 575.273 null]
+>> endobj
+985 0 obj <<
+/D [999 0 R /XYZ 242.922 342.548 null]
+>> endobj
+225 0 obj <<
+/D [999 0 R /XYZ 72 320.502 null]
+>> endobj
+998 0 obj <<
+/Font << /F15 393 0 R /F26 391 0 R /F30 512 0 R /F31 881 0 R /F33 497 0 R /F27 394 0 R /F28 523 0 R >>
+/XObject << /Fm10 982 0 R /Fm11 983 0 R /Fm12 986 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1056 0 obj <<
+/Length 1057 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZYã6~ÏÃî_0öI ´ž•`f‚ìì‘$~ÙÝ,M·…¨-¯¤žîN²ÿ}«X¤,ÙrÛ“c hS¼Š,ÖñU‘bÆáOÌ29ËlÊdfgËÛOÄŒþ¾›ÅÒß Žzj£˜Ñøu¦ã<öœ+ÃljÎõ)S©¢yŸ/>ùô¥R3ÁYÎóÙbíû,VÿNþxõŸÅ_?y±è‡¦9¿ì¦“ 31ùs÷}éšyënnÝöJš¤k¯æ*³É7ÜðîJÚäqw5—Yâ°:KþŒ‹ùô¥Ìs )×:̸ß¾y¶øËâŸo^|ûüÅ¿^½øŠ†ŒÈ ®·y´Äg4ÿbãZG+(šPXÞ5ï®dž„ϸÖÖÊ®æ&KqTÙÐí¦ˆ ²³¹”† àë\àÑäž^é÷(’•û† ½u+üäÉ[¿]*ԣ튦+·7T‰Û¤.·¸šŽz ŸŠê‡~|˜»Û8*Àê\®¥Ó³l\ã ×ðiú–ººíjD<£a8•ç©âž*+˜µYàé›Ðå¶gŒs |`ˆ<vY¹¶›:›œY‚Ø÷+¶+â¥æ–¥¹ñÒËl–ë”*Yִ¦®°Bì·X¹ÍYfÒó O-Ñ|>±êÌkò¾Ïõ”ès1™/&Éð<ÔZôb+u²®ïšýÆ÷'Ö{Hª¡ Ô슦¸ukBzM¿÷›¢£RZ–EUyaÅyè§Û”M8!5ËDJ§cüêêfåp1JEDzNÚ]Un;´+¹dB¢ã,ÕÞ*b-¶}7‹¥½yá3År“÷æEÚž“ѸuH²<ÍÀ<Æ‘Oš]fµ=g¿ž‹°§ÆµwUPU%ƒÍ°IhÝ-±¸…u]U5Jä}ÑÔÁt€Î»ö³ÃÅÏ7,W)fÄyó.A&‡æ]¦;øáLºõ³Íû«Ž¶æíXK¼(º+t‚F°i;bÜu:V"Uåú5Na—¥×žÐ·²92gŠ{½
+ƒŽ„s.qÒŒ¥?"¾ƒŸæºòv¢Ûì™þ¤mŠ_Æôs¶Ý€¥Í¶ý > òíÕ_ ‘ AÃ#«±tS{Yv-ué6M}w×<§cÀÚC#=Á{pOêŒ_Uï+ðJ1@ŸNö€6"«3ž‘H[{Ò3
+8mC®Ñöð‡YVlozˆâ[êÈËÀ¥=#P•ÁìùT­›úö@Ä›Ø@ºrŽLÐ
+€{õHß}üÈã©áÄe Mþ@ÔÔŽŒ¿Ã˜”‹8'Ê U½Ýºe׃×Þè† Ê®¬·S€ð}Ià±aSxCM*Ô³€m!ÖÎ|¬M¶_üKFòµ·¬Zx ë鹨aï8páͲó¡TÕw]˜†”ÛýЛ»Æ¼0–InA¼RÆ)2‘œ>mýS'àœ•8'JSh<ÄÆ…O¤S®OÀ¹Ý„OGÞKN(&ÄzJœÕdân/$£~52#x¤OQy¦™ v3$@`ö‹’ù˜–þD¦ÍµäÌ°¡í¸`[Ù‡9;AÆBÜ#&xþÙ#tù‡a›à“|ËÓô—•:!NÐÃä¹ÉtòeÝ•Ë%n-K“2þ¶Ô⊶ôþÊæ·mù¶Škê^ë(]ïN ± ¶öjžÔÞAÅ0| ™°”é<ç)›bÛ§¨MP˜6°
+¦À*XG3ûÇ"öÛgûH.Ej\2€å—„±ö‚» ûìHÓìr2'¢åàЬ}ÚuJ!Ïç”ÎGË*7ƒÈ°ˆR}RL5ŠéÄõÒ>™3”ßá®öuÀåÇ+k|*G€ae¯ ”Iî7M5O½Ÿ„ŸÃè ªöÑ7!âÌ(÷æV~˜ë€êxoI¹ž¸(ª£9RJVÀo?ºnÊï:€^‘ò© Ë<g¦Oj> è
+Û9Þ†m¬ã}¤fZ˱Ÿži´ýÓ^ñÙjåQñ5M®£_k¢§+ÛCÃ\AoŠæ.¿÷j%æb¼ì ÷5ù´§Ü%ÌpíûnW=~vRP!6ƒ{ó9)UHz4€ ‘cÒ_x|)Ñ(*RöÙ’9K5èØpääZÝv_/›r×ý8@R.H¯ÔÆ«ƒ/=áHæTÊ„‰†öqBæ Ë¢H΋<|$”CÁÊUí/¿·¿ßøz‹Ø]Z ;`µ}£‚Lnšr…¤ ì΃±ÀN½aÁŽ‡°ÃÁÁ·aî&Œçú–,†ñÇHFiP‚4Ú„µÇ2 á^É"îÊWµS^X<C8ƒÑ±b -È3|ƒa“o„Òk´$W¢zoà×_Ó[›ŒÉL¼Ž©Ó,J\UƒÞO¸«Œ ×æ9®l6æŠ'SðÐXG †¥m©IEvBçLä2\ÙûÐ.=BÎ÷½|ˆe1Z"&öN|z–ƒJ¹…ÀÅ!˜Û&ÌÒü%2,j.¾b1%.9M…™¤õ÷]ˆS0ì…žÐ;LÜ×ñ„£.·Å²©Û‰wŬJ÷Ï—¯ñӛׯ¾\ ëÚyÇ3·8³½)é±Öhîðdf|
+¾<xýUsáqO9sˆÉï–Ý]㎽¸‚ãÙ˜è‘ð{Òh?mÈÍðö$›0äÝãέ觘†–CeŸÂË`ôƒ7B ý)I½>ŸÈ4Œ»<~m0Uèø?êž
+ßÿõ÷\AñþܘV{K üÿÇ€£Ã<ÛaŠcŠPÁ6¼}/-D¹³-åÉGD|r
+ˆÃ‚tcP
+A®5n¶¼aˬB'iS¹×ÅÔ3ÇG5‡Ïß>}©yp¬>˜µÌÂ`ž_°hðO°%øG`]Ä›<ŸF*qÿ½ 
+û«¥º‚~¼UËc¤¢-‹6Ásï»b¤ÙBS†Ii`]=n}æQ¨ e9J™ÿô]9÷°«ê¥:J±r¸ÇAÐ=ŒØ³¼šíÓáiâ¯Àbîs"åvèw ° yJŸˆÅ
+/ÑF$m]•+ò0·„‘V´ë…2³á؈ѕ/ wÈ5Ì',)ÆöÐßlx$˜{ð´Ø?ð>†”a9·Eß̽“Ê#%óÈ}?”pÞ‘{Úø·mCî¹?,Ë‚Ó‚äÀr .nÉéþâV‹^áÃ…¯î f(ègíî±
+endobj
+1057 0 obj
+3139
+endobj
+1055 0 obj <<
+/Type /Page
+/Contents 1056 0 R
+/Resources 1054 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 976 0 R
+/Annots [ 1058 0 R 1059 0 R ]
+>> endobj
+1058 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [191.393 707.644 200.36 718.86]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.13) >>
+>> endobj
+1059 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [281.48 551.829 286.935 561.526]
+/Subtype /Link
+/A << /S /GoTo /D (figure.4) >>
+>> endobj
+1053 0 obj <<
+/D [1055 0 R /XYZ 72 786.278 null]
+>> endobj
+996 0 obj <<
+/D [1055 0 R /XYZ 88.587 135.023 null]
+>> endobj
+1054 0 obj <<
+/Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F30 512 0 R /F31 881 0 R /F28 523 0 R /F26 391 0 R /F39 496 0 R /F29 547 0 R /F40 548 0 R /F51 382 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1063 0 obj <<
+/Length 1064 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíYKsã6®Úãü
+©-‹!|eOãY;ëÍŒ=•pRûH*EKÄŠô‚ÔÌ8©ü÷t£>d(Næ°§”„€f£Ñýu÷š-"øc‹”/Ò, yš-Ö‡lAïnô5Ì‘¤ŒEKüõŒàJÆY˜çÉb%â0KâóòçuÄ¡ŒcÚê²xñÅ5O,
+ó(_[#Rlþôj£¶ËUÌã ëõqÝÓø¡ì÷ÚTc'~^þPüsÁh•‹ÃäFÅz_jAe3bÑLâØtÕ®Q’å·u¹›ÉÇF¼Û·ÚnªÕViÕ¬U÷GôvÕOÈŽuÛôêSï{å7]ò׺jÞÆ[eçÝ«`?¾}YüãíÝÍm±\qEÁF9Ñ•Çó¿BûÞ·W_½¹º-Íœ‡1K†(ãô×,ž€€h™BÕ-W"ªú½Ò$<CŒd!—NÚnYüûíÕoî¾»ò(Ïe˜‹ÄÊ·>p’ˆç¯on½Y˜ˆØʇ…I(„°ëˆ-ß‘¹‘Ì…_GîÖGôy4Å)d<ÿš‘Ï l6%<
+3¨+$bqêQ´’àL³<J­ ¦ŒU³äYÐ+Ý”uýˆs,8v˜¸z‹4†ØÓ@F•«µÏÑ,…Ãs\Ìÿዧð½%>Dð
+¼á‰ÏÂHäÏÀ
+e#¬æiu(«¦jväJ‘
+ȧlÖg€rô~‡À‘2x‰ó"¸T?UJ¯œ|Lò‚¢ ïA YëêÞÛ¤<¬ )/„ 4 ¶m]·«h—™öüí|qUŒ…Ø4²ôÿOOîÍ©ÿ$)ÓÞi À3ÜÄ/ü9”äYÑKß<b¯~ù¼úÏÍÕ7SŽs’pŽñÐ6wâªöØMj«+k"´ëCiR%³©’ÕFQCªÖeMS¦âsï„áEš8–Õnoª'Í IÈecôÝÕQˆj6”ù$sg¤§­×•#s&Ó0:Õ¥—X‘ 8Ç+ØPK_yte!´"»þq_­Ñ^8‡“tÔ½ÕºÚ>ÒŒ9
+zVCŽ>´à<>hC>
+ÇLþfyÍ9.’cõû.‡eü922ÉNêš0ñ•ê_A‹¶Îü>Š#Z«#¹†¶}ó÷‹'ÝFëv£.ˆ°À}*†r;Eà¶nË~¤
+C',Þ¼,¾¹ù—µšPÓa3ƒ½™ó x$…#@{ S™ÙÏNp>¸‘f ­Û+) |$&" ¾uÐ í<KÂ,KiyüN…2AÃã0Éäà?¸†?õßµ·Íäܵ4ôž;ʼn
+P<Ü%§'p))B e‰ÇЕ¡.VIÈ žžÓô¤Ø% qˆsœ0 ‹ƒË”U6^øÑnéÙ»ÕRïŽ54>œ2e+妚ßÍøŽ¯GçažMz÷¶¹Ÿf&&ÞÝËW.ï Ÿâ8 n[¨þŠ,°|fj¯ùFa;j`j½²-4µlÏ
+“r]¢zx)·÷
+_ݵ4Ò
+ʳ6ŒÖ÷À‘ÁÊÙPzÌB©Ü2š¢Ü\K*MzšÒÞ¤sºÛá³À²8iá Ƭ–j”¶:r¼ÿ ¥3Ã)(=Èhä—Ð\þâñ:–éÐi”¬ÜìwºÂMIWL‘Äxª†FôacS’›þÑ® ^ yÒµm©}gÕÕ'»ØÒ£ÇýÆYFŸ0Ó=”&Þ°…‰¼ó¾™ì•áih>7'œÏ¯Nèj€Ñ†¥ T8ʪUÙˆÔÕõtÄD[Üêl™CŒˆP§–ÜáÌC ;\XNÞt½*7$br ƒÓ¬Ât¤Íck‡mê—ÓÑ]x¢ì {ËÐl[Z©`í×XWM` z«7ƒ¨qþ,}\@±E6ï†zA´Ô)Ížìl21Nm<gZèp{ßUŽ?ÑÍÜlÚhÜliªQÈHJ 숖nT¶©J“OîÖ_ÕõÈ7(Áð „;!Œ›Cj^‰ùÐ;» îí+“ÐLú¾#9íá¡V½¾o ßÖeãÙßÒ…åÓ'„Àø*ÆôÜ¿Yðë…À¾ñÛ?‰OwàH~x|þ9¿W2§ÿendstream
+endobj
+1064 0 obj
+2161
+endobj
+1062 0 obj <<
+/Type /Page
+/Contents 1063 0 R
+/Resources 1061 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 976 0 R
+>> endobj
+1060 0 obj <<
+/D [1062 0 R /XYZ 72 786.278 null]
+>> endobj
+229 0 obj <<
+/D [1062 0 R /XYZ 72 286.104 null]
+>> endobj
+1061 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R /F26 391 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1068 0 obj <<
+/Length 1069 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZmÛ¸þ¾¿Âí'm±Ö‰"©—i{{ÝÞ[ÑlMQp%z­F–|¢´ÉÞ¯¿)K¶Öñµ—´@Š"’3’óòp†[EðÇVi¼J³$ŒÓlUì®ØŠþÞ®|ëk#N!y(ö>À¸2 ó<†O_æYc!ËbZë·÷W_ÜÆéŠEaå«ûå¹/ÿܳ~ÿ—ûoî¾ûòz-cü¾Òý뾫šÇ®ý&’Q«¦§ÆmÛôw¿¿¡N±U›mì¼›#îZ77×ÿ¸ÿãŠex¬tµf¨ˆÜî n›Gb3{Uèv³9ž¾kËM­ID4›¼©[å¸Lõ£v3á ÷ß¾ºÿóÝ_ݶúN5fÓv;8
+C1W_Þ_­e˜‚NÖ\†qž9ã€ÂB½N¯6WkÁÃL‚Y%|ųÅ|‰‹0‡…%a–¥Äp0h
+±Žó0æ|´ 4Omr‹;üâ–É ô GG{øƒ‰
+­Ì9Ú ~ã ÷TÕ=;Ý\ÇyЪÜWù~Cg¹0ËÒPdâàȯ½ßÎ4×cQÁÜœÐzÔ:–xB>s¬ÛªQuý<Û*Þ0.Z
+Š_ œŠHŠ>eeö5¸±=Pô4:žç:΂§k™ªªÕCíÄ>àð3µÇµ6CSôUÛx Ž®$C!ÑçÀTù§G†oÛ'}!.Œ£¥®{õ~qôùl°³4‹p²ŒüÅ">fa
+v>ñÂHœ x . w&Ã\ô3 wtó8×…9?ŽVâº)uI#}Kßüÿ•Á`<ÙÆJ(Ú¦P0Qy¡Â¢’\4šðz-bÜõDn´. Ƀ0v«m55Ž
+Ï/¿}d^Õ” ’ ™:Šè—y¶GâÞ Øض]õ£Ó‚ªi —ƒH]_ž´€±©½dÌ`ÄÉÙì—,¢:›[à8XSõÆAžÄ_n¯3tíxãÄnñôÐ"…l/qÇq€µpj
+x›“ïª~»ä hìo£…ÓÂ… ç'š£ÌÂ_SÚpLEÛ•c¾;ZÈ} >ˆ|dŽB–”ͬƒÏò–Ç°£l¶£WÝCr:›…°Vi hÔ'({@Bs@fx±¢Ø±æpŠKÓJÍÿ´yÍïì1\ZcyÍ ï^õ[¶›8-.òÇ‹)˜@ž-:@ñ¹š$ð袚ˆ2ÿLjŽïZ¸(4&øfŠ‚áˆÁ­£TÙ<©l7ÑÆ»ÛV¶•û@ÇŒ“L{¼Æ;{OÑh¡›~¿§pA|1›ð?Uf€í4áP]¯7ªðµÁ<DÜmCAaÆ §|Ù—Ü;ÜÀ°s•
+Ø«XÝaä>hvžÄÄ#Ü”Ç'Q 6îôŒÃH|»ò­¯ÏèžK¤~ñµãeIèE¾8YwíTA¯Gl´¤r’!–/¸È¦®Ær¸$.
+öÕ{]ÛÚM€nb*âžzõÖWPØuo.1 ³+Âüâè8FÛÙS¦ÒÒ› àVÀ3ržLóþWÍ Gh—ŸrØ×UáÓžøßJu ¥NEú©3ýóeÐò†äÿÇŸ…!½šˆ”þ«èSBµo³h»º±{¦l¢­ü‹GÄ–zÖû°Ñ)µ"%ÄW&Sû6‚„wèÓm÷Ö-ç/F»t]ž€g[iDÅ
+6¼Ï%€TÊÚ.$1F?Njº(Á{ú‡¤£±E§[0*ä¹ùXF#T@h“ÒPìá© JÚI¼Fr¯QŠ¯J›¡&Bµ¡/å ĦnŠÔèäÚü
+¾eK¼Ÿe@Zg¡ » )_œ‰lWÂjÚ°y¥à6ç—®FØØwtOÚ"ù3·úú¨%ÈRµiÇÚÌ ;í1Ô&žöS ô¥à’ØÃôCKù*Ïg–%¤È¥_®·yªJ»÷ß@5 ´Ÿoz8¼5!Ž–ÿÁóxÂÃ8—\ŸÚªÑó¶Óúã¢jòy ê/UÞõ9@ \ÒƇXgßĦž$ 
+êÊô®öjÜ«Æ ì„Œ w<Ù¦1™Ç& ÙÚkð²\<ˆ©Ë˱@µ6=Å‘œÄùBu¸Näˆ&“ç3NÁe
+ròõJøÈ2ÜŒ
+íôQÍÚcèÒ…3[s +~cXãÒÈcý¼ßŸ8ÚY¬÷\çmÔN×Ïÿ­ ë«oþö§?’«Ûª®VÝvü«×GªÛd~)<|&¯D®œ™º DYB¿'àÿfÄ1 9îôüIrò¾‚U|æ=ä'±^Tßendstream
+endobj
+1069 0 obj
+2219
+endobj
+1067 0 obj <<
+/Type /Page
+/Contents 1068 0 R
+/Resources 1066 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 976 0 R
+/Annots [ 1070 0 R ]
+>> endobj
+1070 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [332.241 439.56 337.696 450.47]
+/Subtype /Link
+/A << /S /GoTo /D (figure.3) >>
+>> endobj
+1065 0 obj <<
+/D [1067 0 R /XYZ 72 786.278 null]
+>> endobj
+1066 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1077 0 obj <<
+/Length 1078 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåY[oܺ~ϯXô¥ÚÖË#Š7±@\49I›6çœnQMÈZÙ«F+mt±ãóë;ÃÉÚµl§úT°(jH‡ßÌ|Õ«þäÊ%+—Z‘¸t•^Éý}^­?BIj£„Ñøö‚àf”Ü$Zøؾ$/¥ðF¯6ÒAÃ{_}YIÓw~Bï—iw|÷æ Õê÷Í«_­~|µ'J¡MÂ
+'«X(Ÿ®Úbu=O•ð)HêTh¯ŸRðw[XAš•Œa~µ½£·»DoÊ›¡-Ö¥Td~³Þh­£Kzíú¶¬o¨}Wö{jÕM]•u‘µÕ=vȨ˳ªØa[Gy³Þ$iÔ´»²Îú¢ënÿðêõvR7±RXk¿ÁôÊ8ac´‰|QÜ€¡ Œòð|朞=;™&¤X0WâÌõýû¿ÿðv½1‰‰~µ•Ÿ./ß”UõaèÑ$cÓ'øòá¯Û÷ïþüšEY¿¿ vY÷Ô84»ë*»Qr´ìÂÁ²/$,»pê­DjV)˜Ä®>ÔÂçM*œå~iEšºSÌlt,´U`-k=mX©%| ngØI…O4ÇM[8›,j`Ü$7mSi¡”Ã3srIOÐKA{c…„ñ·9îæqÊB@B¦Ó>q¾Ýe ðV&ºì¦À¦v„×¢£×ºéI¤.ÑØ•Õk¸§îâë±Ê
+A
+Ñåƒèûµ‘QqÝ/è’HPÙó”}°ÅlæÀfEßC|
+Û2A¹éÈ9 çvÈ
+{!´ü’îÖš~¦7 •‚ ‰v¦uœ+tc„Œ ]½ÁInñhõÇZ”˜¶„Ó–<CÞÔÝp'¹É:É> Îa¾! uUż;™pÒÑk×Ï&§ÂÌ?ul†ÎÏb¤å=÷\·Sýp2ðDFSæe?f7‚”=A=ò«bû·5(°ó?euyªŒP¼ÑG¸n¢8_,Œ7/a4‘~ÿàhoË]ÐìšCØHUå¡ g¤À²×CKùXÁ Œ¦<ôk¼§¡ÁÉ)Öh*>?DžÖ TFmדlØ<³ªº Y2z ­–²ËO’õŸŸ,˜šóF åp|P&ÏÚ,ï•
+/»±AqdBªG‚ʳà?U^Øi¢î¾ƒl€í”åÁ Ú#
+÷Ìây
+õ>Ô­dö¯‹Ô?•c|¡äÞ””N:š~TòV` œo‚ºõnaaÌ+ÉÈŒî×U‰zb]¢µP¡«SƒÇ]Ô0©Šx|2˜^IäÔÇÈ M4ÂX:o©9Z ³Gì»c‡± Y 6è`ƒF>XÇd£Ø9¡ÏeMóeW]S =Ëžc·!(Œ!Ò6JÛeÒ
+üN¡ ZÁ]á¹Ï/õÎsL\À3RBçžÁ³à'ü}¶3\ÃáÄãÒ\$L«.ÁW o“gð ¥®~b™Ñ·eÎkÐ.Û.Ã#p:°Š*PñZyB¿Æ(wNoÐ YÖ¡óøÿÝÈmSî¦{K>²~ÿÌ…H{¤ï‹Wé WîÿãêCëÕ‡{þêc×pFÑ°ø
+™¦º§[…»@$°ˆ 6®(Z!‡ W$E—·%wò¥È¿†Ž/J¸<>Ð!+ƒU2¢È(
+üçÁq[*бC,]k`(ºÅÀY~çwˆ$DZµY(³ªÔÂpìÅ´øªwEê4×®Ÿhs³óp1]¯<áåjÌž›]ÙÌñ©vò€P@ÉÌy?ÔÁå­ èØÒ#/7c´%JmÈžnÒ8„Iç Ýðl5õÎ,Óc|u’‰¹árRÔPöÙUUÐ0ÊÐà¼ÖuåU¨Ø¡kŠÔ¼)+¼:½19ÌXá£û_kElƒZ>UÊ=Ü+áˆ>éÊ ïæØ–ú|ðPëпyäsñÍCéofámÑ}B-àÂM <ñ0;ÑTø` Oö#h壻 ÞAAŒÀ2>Ëd(™‘LE~Ú|æ^žIC¸£?/`¬¹
+{àß ([…k¡SN¶+»c•¡+߯9 (—0Ú˜³àƒý7E]´¡<|å¢Ú@Û‘¸ÙPñUÜ™Õ=yñTlÂ4§¬dÁ³•‘BK{êÚJOp é› …ñ"“0É;”ùíOÀªàÛXÆ)¼e
+†àâ]ú8~÷FÇ! Úð›@øI
+endobj
+1078 0 obj
+2758
+endobj
+1076 0 obj <<
+/Type /Page
+/Contents 1077 0 R
+/Resources 1075 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1083 0 R
+/Annots [ 1079 0 R 1080 0 R 1081 0 R 1082 0 R ]
+>> endobj
+1073 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 426.998 172.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1084 0 R
+/Length 1085 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1085 0 obj
+30
+endobj
+1086 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 426 172]
+/Resources <<
+/ProcSet [ /PDF /ImageB ]
+/XObject <<
+/R6 1087 0 R
+>>
+>>
+/Length 1088 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+endobj
+1088 0 obj
+59
+endobj
+1087 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceGray
+/Width 607
+/Height 244
+/BitsPerComponent 1
+/Length 1089 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíÛOoãÆ
+G¶Ev´Bk©Õ·,\[ùΖxˆ":¶,^[ÓÖô'µ´xuvW‹ƒÇ.,oe%ÛZh1×XaeòÝ®£ôùõó–%jk V¾µ,Ÿ©Ã–®a.Æòö,õ\[Ð4,TV¼´ðf‹{D m­ôv‹yä:nYúúÖ2ùªn×n´J•yDÅŒ6,SwT®­b£õf¢òˆ‚5¸a w´Î‹ˆ& ¬ÿÿèo%M cѶ5ÝÍ’øÓämV¾“%Ÿ`ï.ºëš?žÐã¤Òm­Ùh­õ¦Ë—•õÏ£[gÅ#É=·¢ Êÿ½ÀEmý{wk^K¯!2¥üÝÒúæð6‹iËô ãDε­yν9Î$]XÉ7‡jëli1šO9§;Y—*7½ZË*M;Ä›N¡ˆF,¾yÃ!üebi-‹êö[o)A«¨ ƒ Æì‡:˜|%”±
+m=¿Ý:¯ûÑ•%úQ¨Ûœaàˆø«Ó•uv«Å[Äá‡~„*KGÉøëÊë™m‰¶EÁ2{xª-Îÿ‹õÐ(3B`k+M´õ£›VU+à\[g «t¦-Akë³c%¦5¼Ñb–UHŠ°m¥Ÿ}b¬éx½5ç4Îm‹ZyE,+N?ÿ…±2òe‘×µ%žj +ÆWÖXf’
+Ò²`v•äñ «¬,¤-b,8†G`¥’L¨5öqrTYŒhëoµ†•ÅO¯Ôõû‘¶&ÉTea3^ÉÑO¥'LI†MëB[r¹±ÄXÇ`‰°eTVqô3cÍ5²-‰+ 1x¬¬÷E½…WYÊ#•EÞ7Ö•Ž m+K ö¾÷›Ÿˆ'`y²aÑjnSc}K×ZùÂÊÅsľý¹÷áËPÀÒÞ²þnî x¶±²ÚÒßã´i¡±* á!öQÕ–°,˜)¬,]Ï%p/Ð`yÅŒ•]¾û—ó0Tl¤­‡Æ’- fðçxiiƒ†•j+ëõ˜ÿVe߈‡ dek‹B¾×°PY55J(î ƒOŒëúö`8Á*{l´rõ7È¥tIÁ©Âh¬\~À|m¥“ø +‚û<”>âO—–´,68¤!ƒR*}vÉŽ¡óÀ;_{ ‹‹€¥Œ5a/C½_»²²{ÇO=‚õ×0ÂÜWRŒu©7¯Xü‰±ž¥ûrHˆ„Ó…¬,é³£‘’4ˆ° `}«¬TùÂXϵÅO´Eu#rŒDm uι°¬W˜ÛÃÎñ9½‘kdfûê RýÃÃhU£È¦U4ó¹5Ö¢,‘tÙ—\Ö K5-,覧‘´ÙYîÌšÁõweuáÆ’0IIêÈÒû‹qËRÏQo>4ÓMÌ»[Êkžâj›–Ãz«hýòy«Ý -ÝY£Â…î¬ rgeØõö³»µq¯noí­½ÕÕBwÓâ.-oí­ÖcèÐR{«¿õƒÿU‰‹üendstream
+endobj
+1089 0 obj
+1881
+endobj
+1084 0 obj <<
+/XObject << /Im13 1086 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1079 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [276.28 397.667 304.159 408.576]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.13.3) >>
+>> endobj
+1080 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [138.06 148.135 147.027 159.351]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.14) >>
+>> endobj
+1081 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [456.225 148.135 461.679 159.351]
+/Subtype /Link
+/A << /S /GoTo /D (figure.5) >>
+>> endobj
+1082 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [82.751 91.278 99.134 100.565]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.11) >>
+>> endobj
+1074 0 obj <<
+/D [1076 0 R /XYZ 72 786.278 null]
+>> endobj
+1072 0 obj <<
+/D [1076 0 R /XYZ 215.695 540.879 null]
+>> endobj
+233 0 obj <<
+/D [1076 0 R /XYZ 72 342.361 null]
+>> endobj
+1071 0 obj <<
+/D [1076 0 R /XYZ 88.587 105.524 null]
+>> endobj
+1075 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F39 496 0 R /F26 391 0 R /F30 512 0 R /F28 523 0 R /F34 583 0 R /F29 547 0 R /F40 548 0 R >>
+/XObject << /Fm13 1073 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1099 0 obj <<
+/Length 1100 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚå]oÛÈñÝ¿BOmXî—¼ >Ô¾K/q‚œîm¯him¡I¤bûŠþ÷ÎììR¤DÛqQô¥0`îÇìì|ÏìˆÏbøã3#f&M˜0ély{Ägô÷eF?ÁA*-™V8{p®tʲ,bJšÇáÇÁ9ã© »¾_½ºfÆc–ÅÙlqí`«¿G_ëbu<×BG þù}^›m™wöcÞ­uÜo}øeñîíå9ÍO6°}züÅ_f\¦´˜Í9²–íáD'·=V˜r\*ëêÆcº?LNiPT º‡M8Äñº£óÅÑ\3¬Ì…`‰N½LO&³tÖØÙõÑ\I–ê
+1~‰5ðŠ
+páêJ@1¨?añn]¸Š}MÓ¶ƒ²ÓWò-!É=dƒ™ê’uÝÔ< •a@•rW­À|¨#EE¶[r:OÁ©Š®›üfL—Ùe¨ùé ½°v'ÍïÂÓ±ÛGc2’Uëä?é$Àë1Îøs6ñVx| Ÿ¢‰Lé¬?“Ø=ˆQÏà`éÑÎÁ¡rþI} (àµ]¿ª·W¥¥ã«û×á$¸B Fqÿ "@Ä~²"º÷T½‘¿õ$FG¯Nh±…âÆ_âÁ–uHÊ4¿z /öx^M\rB´  ’@ð|‚±¹¡ÀõIc“¡7—¿¼{7%· G~°ÝÏ]Uñr ä㢮º·>Åár7rös}k ÜwœàEÇÍ8Oŧñ) þéüÓåÛËNDúS¤Ï¹Lƒ#gþ9=nxmhÆ_šÏm2ꊹំ̧„x>Ñ#ÿ[îö‡nʇáÔéÜÿ¾^]—ùÍÏ„ò^¤þýú
+ÌŒzpR>Ba¦×±ãèÒû}~»)ý$§Ô?hÛt^66_a¨Ï2ÊÝ®à]…Ü(j–Ð0ÂY`WŃ µ"T*¦ª;£[ áÛ¶óÖ°lO˺ÚQ×&¡¢«¼ïßå;Š:jצ¡+¾•#d(Ú jû-—›`ã÷˜«ŠÒN]-ãnÚ53tÿJo6`E=-!/
+_õ9òÀŠ?(;r,®‹vBcþZ—ï0qP.Qþ*Ÿ‰¶mA †QñY`.SÉRj†þZÒÓ>rwòà5û]â ꘧šÄØ25OôˆSfô7µˆ¡¾Qÿ'â3W L5Ô*`WÎ\¡ ¿+ȲÑ3“ÎN·¹Ò Ô4¨Ñ÷£ó#µgfà,ž(Õ < Ís}_”¯LpJÄUƒÖÕ€_<g»6n¼{ù_€Œ !2àtëH« Ý^R
+»{)H¼/(C8ܯ$±R&hê_Ã’{+â·¯–q{éš®ÚÖ–>ßcgfœ/ÏðA¦£k{‡ƒ$º±•mò’V—õmx}¶´zõÛŽ ú(íb '–6)n°Ù4õ¦)rb,6ÑYÙ­©™'BàsèP% ðXíí~¸‚ا3&ðg~jØDqÏÖ'm>I÷oR€~õã?æýhÃ
+endobj
+1100 0 obj
+2326
+endobj
+1098 0 obj <<
+/Type /Page
+/Contents 1099 0 R
+/Resources 1097 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1083 0 R
+>> endobj
+1096 0 obj <<
+/D [1098 0 R /XYZ 72 786.278 null]
+>> endobj
+1097 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1104 0 obj <<
+/Length 1105 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚµY[oì¶~÷¯XäIÎêH¼J)ú¢5ÚÀ@’ µÚ]ÂZi£Ë±_ß¹ÒÊ+Û p
+?,I ‡Ã™3ét“À_º±bc3 ›mÊÓMºá¿ÇMh}c,©´ŒµÂÞ‚Û ¹*Îó‘|kiaVŠ‚»¿ù|—êMšÀÔ|s¿'¡ûÝÏQñK¢ÓÛ_ïÿ}óûin*c)%Û´ù Uч𠣿ÍëðÀç»Sª6oo~ºÙü4 šŒ4›­`»~ß”‡7LÉeþ§MÑ«¦à¦Ð”ä#SÊUSDl…ýÓ¦˜wL±`Šyß”ÝWôŠ]5%#SôǪ¾¢W²É4!1–LÉ•õ'B€™g›®ÚìÖ’¨õùŽ»s‡±«n·2‘ùöv :£û# Ȩ:×øã/©T÷·0X=<RÔîÐT»ÐiƒdÁ?½k¼š§[‘Á¨°ÑlùÑýØ”ƒk›o°›Dcï
+dt¾Ý”ªs-4²È/Ôî½=‰NøXRW'É'håš>L‡v‰îÐ*§Ý
+–Jr’*ýôDEéâÃ.|@½,pvÏUÝc[FE³ã([ÍJŠCás¸q9ïÉ GnÍ®êj×À–ãÛ­’©÷9(ñnÃeNçÚ ãÎwÙ‹=KÉdewÓZR’id ´û²«*j«¨«ú¶Ñïhwü§ Päq&ô‡‰svÄY¦Þ‡—ƒ=T'Xl+"°÷‚K¾ƒC1ϲy¬¤ŸyŸþ÷‡¢qç±.†êÇb8âŽBX_­–Âñ’"äêºnq'ô„
+ÈÈkÁ"†‘!TÔR`àó ¡<ö…`›æilõ"Œ\„mê1Ëc¯,ºj?ÖØI" þîZÂ>6û³ýÁ|GŒŽS•M«óCÊxœ’Ç÷ïļ֨c¥ÕÇ…SŠ`±wRßóѳû°•¹€Ï,Ž Gï“s×>
+&qz#!H}-|1á–ÿÜŽ4Å·=1ÉÔ2ª9•iNºøÛ®®C³+ÜáHåŸÅ™ó°eʱû‚hèSBÔÄÓ¨öãµÛ±ösk÷H30}¼Cßuí)˜»Ìí~“PŒÊ±ï™­dši`Åí²mÊ"1_¶Jû±Ä•Ü›üI¤§çÁ²h¸AA¤–?»¬{Çt†=mE[¡¬µ g”a¿÷ÜqûëÊÄ!
+û³;¡åã‰`[''ìù•ΫS=/“¢äÚ+x‘Äž þéÅ9ð0 9Ôy±þTP˜úﵜi©æju¹ä"‰^G†ÖËCuÌí…‰0z¦-Mr¡<T^œ½Í~I×
+- KB!3X¨÷Cr*$ªaYÕïºæñ‰¡¼º¿Àm"¶¹ñ){Hk÷°r[‘"ε—"ŒøøâvÄÚ@·PÎé&M&^ç=×1Wêª3€·
+Þ†qÚ¤Éå@þ€,Rvî<8N\8hÃñ&e=£¶¢*
+ßèHX³rÞl¬¾´2RS¥&–g%^lWÙœ±ÐñïEÎ’x>
+D iÖÌ_ ¸ó¡Mˆu*^!g ùrÕò/¯adàáò:i¤`;nL # uȨµ‚iIJ§: ò. <ò,ø:y‘;er â,›Qü£L¶±qné&' ^Èb#-‰¬]Û³XBc–ùëÊ:p³OŒ|wy¹ŽX]Ç€ô,s¤»Ý— S›­‚3™³(]->Ìȹ(ªËl…5ƒ¼Ô+âÐë3³²·LÇ™H—›“jÚ\ðÈæšÁ‘\m6®a«[[ù¦›óX)±µéÛnÆ·Võ5-Y „‚òÂL·:#УÇè•TáêA>>V/<X„ëPá¥Ó{nøìÉåb+„•µ‹öÏv&¾<¢6AÔÚóFj¼:eJ1GÅ«Ó#”
+|yÙ¦ÚˆCóNG¿â~H°&¼`=_ùßÄzWþ_ê Ò³…þr )Æ„‡¶ m0GgÙµºE¬P¾TÇÊ$«
+f$þåêM>rçJ÷@ˆéV¤ùÙ<­$ˆIŸª–¿FÇá%LEÄQEÆœf;¾Éëp%×ÑØó|=ƒm…›( "4½‚Vï<«Ú4Îèÿ' ijÒ.=3o•l:þŽcÖîy!í»‚L§$Ôü0#Á?]áI|
+endobj
+1105 0 obj
+2634
+endobj
+1103 0 obj <<
+/Type /Page
+/Contents 1104 0 R
+/Resources 1102 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1083 0 R
+/Annots [ 1106 0 R 1107 0 R 1108 0 R ]
+>> endobj
+1091 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 871.997 83]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1109 0 R
+/Length 1110 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1110 0 obj
+30
+endobj
+1111 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 871 82]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/XObject <<
+/R6 1112 0 R
+>>
+>>
+/Length 1113 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+.ù\@
+endobj
+1113 0 obj
+52
+endobj
+1112 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 871
+/Height 82
+/BitsPerComponent 8
+/Length 1114 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíÝKì&Ñ{ÿû•#ì‰#üZ ª@prÜ_—º.
+`ïôVÀ–­›4¶„Þç;ÝÃpêȨdwj"Ø»_üy}ùðí]ŸFþ”4S
+¼«ægø~\ iA˾(pæpÇË“Æ‹Ò1èÖ.
+œ 9?·;ˆZ6Ï!A3\¥;OÂ×ÆÞ±Ý@3*ƒ¶—ÆŸîôöñ~‡årHÆÀÍÛnøÇ·‘ÆY•ÁM`¿>¢å²Žñ~`F­&FÐ ƒmŠ4¶»ÖK+Cû¨áþC´P¬’þµîq_RtG}u½4®“óÀRÒX¿…ù-Ò˜úw–ª þfK'¥bz<nSÛ p¤1nÝáÒxÙ{ÒH#f‘ÆËÃañN³ÚØÿ;u‘€]J¯†}Iwç¥r#ü“‹¥ñɳÎ!Ûyklê¥Qð"¼iÌj˜õCÂû?H &O4:¼w€ù.i|còLÜòif–4ö] Ù‹ð6R +#i$À}ߺB‡{²4ÖkO£fHãO-L’FJ‰‘Úû´º®–œ#M‰4’F0ÆuVÐ…ŸâµñjꌯÉÏq[ë[&ê„ÔÛõÇþÏ[ 9ë€4’Æ ¦{w…œøAÒ¸”1^ùç4&…
+Vpxü„Š)s°á
+÷tQ}Ô7~4î:¶E “|{åÜÊü:iYýØ=Ø_ÄaÆÏuLÒ`Ò˜7Uè*Ý…“´8[ŠbÝiÍ5!áw+Fjì·b)“Æ+t¡ElÅËèÕPÕB[À lþ§Iãu»j¥£}£Ã$-dmœhÝc\\ùSSשvl…)œ·Hãà¼ßjg!®¼!Š%0!q´‚4f_ ëÞ—
+øãµèÛ±Bl y12¾º&j=ÕQÒØ7ƒ=~0Bv?õ
+iì8…lƒÎti,›ø"‰´ò¼Êƺ¸ÚTÒ\iì¾QrÚzç€ ~ûýÕyÝ…ÈÛ=ýéâ¿ïí¸ÐƒýTê¸ IïÿéÓ»YÇk_Ù?ûdi,Ûo>Ò±®0ÜxËp&ð“IãMJ˜<Ï˨;Ë#“6'SM\CÛ1GW?Ìì0بž"Oo–]ç­æš{iVû³+o„é^‚²ÔÔD÷1P«5Ì)ÝÖ~Òø(v:‚.F5ç¨`Ü‹]¦ŽQ_Ñ7ó–:Ý7±Ÿz‘™<ímÏÌ7®ÉÌ>¬yäηel•á™7-ùhR(\°¯ û&*²Ÿ4v÷#ݺUÒx¿°6dÏ츉%õ‰±{Í’¦àfIcÒ&ÙYÓYƘ±}ý6ÿwÊyýl’7ö­‘¬H¯Rëï¿o/í5Q#íC_ Úѹä]ëʽƒSµ 6íâU…eµ}Ýý–Wä-§”ŒŒ¼j:šÀU4s‰É3žêŸÙ§1/[™c¯ ž¢X£F\6W&ÞoZù{I#úæßN¾ÙKyW–öG½öø&ëÀÜŽÝZ¼ é(iì˜ÔÅ:Ò8þKYWO‘ÆkøÄë°¥† ª£’¹ãyŽ4^O–²äv”4Îêmw•Æ+n¯Þ.ëœùF£¤±l²±ñè`5‡lŸByµ4~:èÒyÒؘŸ©òIÕQÈÌ•Æzo\A'º÷Òx â×7²¸?úF{ÇÊQ<Ø †ï‰+ É{mΪðu·]¦ì^_V8iŒý
+ÒX¹2j)i¼Ÿ®ÑÀ±G8Gí3"©š±Òà@i4sHÃÇ}¤ñÒø(²D
+ÐÒÖR7×TJc£€MYï7¾÷3À!Òhiâ£×²À©'ë¬Õ©¿M>×7ë`„§sò¸Ò»PæOåpüÇ'Ýý’ƹSC5Òh³ó 3q”Úw*ø¬Êu(eÁ8»0Ïì•@F.­ÓÖfIcˆ­5&Øâ3³¤Ñüá9“WùŸ.h™Õo
+joÇËÜë<‡.Ùy/IöÒ1w×Ý5üÜ¥þ裕ö{¥qð®½ÛÍçDM¬Wt$Û:‹-[*üR»˜›gå½ ,2cP9?Ð-#‘8bG? ä4il<ÙL¼££^µHc™ºdüͤ1°‘¦–<]VNòìúè(•î'…eÀxÝ1¯4Þ×
+‘Ž‘´év­)~eŒëHcýV;‰l¬Ž5_+QwœÛ_¿™4^On É|ÄT[ÞXélImí4it£@¶4^_öHfdìÈúù©þÕâe•óiU¯íUz©NýàìT—$
+endobj
+1114 0 obj
+2664
+endobj
+1109 0 obj <<
+/XObject << /Im14 1111 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1092 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 871.997 77]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1115 0 R
+/Length 1116 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1116 0 obj
+30
+endobj
+1117 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 871 76]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/XObject <<
+/R6 1118 0 R
+>>
+>>
+/Length 1119 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+.ù\@
+endobj
+1119 0 obj
+51
+endobj
+1118 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 871
+/Height 76
+/BitsPerComponent 8
+/Length 1120 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíË’$' Ekíÿÿ_¼p8bbº+¤«pîÒ®©Î‚‹8!„B!„B!„B!„B!„B!„B!„4úü/á'B!„Ðy¸8ƒ‚KF!„Bçá¢áF„B¡ ‰hD!„B@#B!„’
+iÐœÈÓk7£¼ß#–Wœ=m>3…LÌŸqBãaFeô5tqÐH>µ r,:iv‚FU I
+¿Y“‘™NßÅuòiq µFòaz¼E Ï¿ôÖV£¡®…Fg戀F -ùت=Ku¤„ßkà"U(4NîØ'ÿ
+ŽbãqZl¯‚Æ!]lÂûúª94ÂÒ[<[¸HH—ÞxÎù¾ ËÉ ó$h$áˆDZlï
+;¼®¢4úÛ窙‹öo«å—{Ï|Þž¿j Kd>§6ØÆÝQÃzîòæÊÏøò
+LGuƒFÛm*Û«Í4EÑ3µ1¿4Ž¹"¡9ÚZ¢péMÕ¿æŸP{O£­JFH™Çìü4$—eF *Û¿þßáx·` 4ªÌ`Æ]š(í =ç­j¡ñK$Oæ‚Fy÷È‚å•-öΟ’öRøÖhwN÷¯+G ñh¼
+·õù5¥èㆄÑsà”ŸNñ#æu0 “ñ¶$÷Ù ÿÚ¢  ¶óï¹p–5ÕÐ(éG hüD¾®´ák#úhëËyÒ Ño†ˆ¨üÂYÄÛ8bÁ»dK~ÚR}léÇ^åÃÕ¨47C£¥rŽgYùfhÌy<‰ü³‚Žn-á4ÐøÚ†£ÁŠž¼³œÐhs㦓ZP›å‰A“Е  ñZhŒÞ¾tOãódOz˜¶ÍãBh̼éÚFw«‡¸%r ÑÌ3ÓwPÇ0Ï7Â%Œå ‰±ý·¶…Æ“lv4Ê'¦ ×²üúœBhÌI¾v9“FŒ#òU>ÂÚæ«[„;c9ÁjŽ¨¡ÐXó=©ö©ž÷=žGŒ} qòJ·¸Ä6 €«?#hìÛ£'Pí÷GCcþ!÷„)&îcÏ‘_[^ž1•Ä¼/ Ã6°ªý~æjgæˆ>fra[£%kæ°R‰R%雺ë€0× foŒÇEçœ'4û33Í 5Þ1ÐXU¸³ý­W²^îÜeËDh,i=§ó;ÇÏfù [¸“cþÌ߃Ơ? 4úK"¡nôgµ´}Ãóœ+h—‚|ùÏS¾kH;É϶Q:q‹NÄ`lŽÙ9Ðx=æCcÐTL¨‚Æ“Jv[<öóÀQ}ä!ºœQ-,n¤90%³Ûî™f‡ßÕ'—ŸŸ¡Fé-%;²3ó5\YX+Û ÷jÕÑ<퉳í%Ùù–°öš¿ gÒ“3iyßÁŒjøî.’’æÇAê\l¯-k8'å3*
+pT~(ørttÞ‰$„Æ×|¶'4^x&:§Žá|Ûu|†¿Õ™Ðå% 94šÃWŸŒ Sê3ÚžÚåS¼sªePÌ÷”¡‰<‰OÄèZ2ûð|þYBÕ€òT­‰rªFÖBcòÝ}@c·Ê ÐøüÉ×°,9æÏ h.–
+8ªüº¯ºívn\ª.™!:ɽù<B‚'ƒÎýyþm´cq……m~64Êc©g˜0(j³­ˆÝ{AãÏÍ™ÌÑÉИ"œõL4T¶Ô^á™K.÷ÆKi) Ð(¹ä\Ë3MÉ£ÑñZhd6ω'­â§gÒßâ’¢KR]94JríÐQ‰£r"Þ1иt^5Z%i5sz“Pçœ>Ðh>ãOÕâP·¤[X~¦9ϟמ{Ífz_ÛÂ-
+™ q[×Hß““ö$K÷b¼{¦x¿ñp¦’‡‘%<À7X.:"á–³—zô 8ÐhhaìwvÎå/Ñà¢qÜkÍÞ¦§€ÆÕ=64ø%ÁJk¡V3àê“KÒv ‘„˼͕¿ÓWòøôÎYt†Í‚&}ícñf Ïÿeö'áZÕ_ˆ…pZ4¦p”Š6ñ:çóúy,dÔ Ôývá'^Â6~3¤½/íb*¿…–Ê)ˆØex iç’ãäœþúa† rNÜÌéèÙ?i¡¥†-QÝÎW¶=Š¸©†yjŽ‘Õ¢ („B!„B!„B!„B!„B!„B!„Бúç_ÒP‹7endstream
+endobj
+1120 0 obj
+2935
+endobj
+1115 0 obj <<
+/XObject << /Im15 1117 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1093 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 871.997 76]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1121 0 R
+/Length 1122 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1122 0 obj
+30
+endobj
+1123 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 871 75]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/XObject <<
+/R6 1124 0 R
+>>
+>>
+/Length 1125 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+.ù\@
+endobj
+1125 0 obj
+52
+endobj
+1124 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 871
+/Height 75
+/BitsPerComponent 8
+/Length 1126 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíɶä6síÿÿ_õ®N»SIbâ®Ë~)
+ =B!„B!„B!„B!„B!„B!„B!„>Ÿ‹€B!„^pñX „B!ôáF„B!tp#B!T'F³¨27² !„P‘èÌ: ÊÜÈj „BEâ2KÈhBýíYô_bÄ0BøCš"úïŽ`)ÐCÏB½B#ŽñÏÊ°@#Âð!ô|9vÁ7²숩¯^ð\k7 5BBãr÷È"ìL
+fãÁí£-§¦?Ï 4¢š³$ˆ'æÑVû<boÛÌ~<Ý>Úßÿx!:þý˜@#ªÉæô ˆÌƒÈÈÕþ|ƶЇ|Ë’¦¾z1nUß
+¶RL_»æ‚ µÙ2¿=8‹G&­öϲ;‘˜5ÛÕ\=ÔË?û|×ZW‰ô„]U6°Ì[OuœHlo3¬ñ¤²ô²g±“IÙ¨,`AŒ/ÿ+ ÙâßçUÛh¼ŠìWqœ-  ³¡Qv-sSX`A#¿}AÿzïÃò¦óÇdaƒwyhÞsį)ÝÔ<bõ¹í†ÊXÊF B癈,OÙ³Û=‘4Îp,†Äø·µLÚ¶O´¤†öÞü#^êÁk¥¤£m
+t ­W5þ÷7ê• `\^=BØmµm4¼z}Y¦{µ*§4Ýnbh|Ê àýœi*4
+øMú•C¨¡£w_¡K_X§v… 7­>Ç ^@†³ËŒ1ÐøÌÍèõ—K»¯>¶ =ŠŸ½ÀÆoHŽÉg’Þ¿ÔÙÈýæ&D•Ö©]áö’lÓSW=7nƒÆç`ø€àØz
+¢ñ1uªH²êÊ/ù
+Š®®iiµû¿V!C‚jF+Û_~1?ÛvE³Ã˜¢9žî‹Žß.<@cµ9WWÇñ‘ÐXg­b~혓ÍÈ`mÒ×^ol‡?U31Ƶkºàj§C£¦K?Ú0ŸýÙnÔ®WD爥¬Ð–Å!×_Ø«‡Ö6íÚ
+m7âÛ|§›Ø›í0ç,bô°‡…ШÉýrcbCSnÌ‚FWnÔŒc²ú…Víñ)[Fãm"GŠMú.C04*gkœì¯Dkί„7“¿>cæ3¤@£kýJl3#ÑÑäNŠëðaÐèÄxÓH²ˆñÑÝ>‹œ—b2ì4æîgî^«3ŠPú b>MÂ5‡ †RR÷ÕÿV<ê'ý ãü·ÙôÔFÛ´ÍMƒ÷.Œ˜;„â\µßí:8D˜4P9y†
+PtÒÕ)¾{è± Ó}šU5²Së}#èÿÏuòY}D†F“¬ªËXuýÍ €ßâÓ™s‡lbÒ“¸ñe@™G¥@c÷—%(¹Û°S 6ìyŸ{^S6ê5‚FaŸ¿tÃÇ1w æ3ŠÓ§mžž„FMç‰SAŠ»ûö\®Sά µxPV&ò^Š ØŒ“ZR7Âc1Ý%ë<Q–:]’M÷æA\éð•!åN¨¸Þ"NÍ<œ°aÐñ¾­ï·ÞÀÕ‰ÝH
+-˜W‡œÚoıһxî¬ã³2‘ÇÓÒ?oAN¼,&nÁuMœ Ñðþ×Sf¬UY ¥ýÒi/+¹Òø[x'Û–-å®Ñ܉{</ˆs.AY 1¾¿#h4œxó­JéíC¼Ï¼‚¡±B­Ì# tçÆ÷"|eh,ÒíixQ®Kã“Ó«<ßbÞmÅ·™d–ßË)Yqh Q'®ÁÝʽ\9ŸÃÂr|ωßùK@¡Àêñƒ¹Q¹ÂnÌsYepüóÉ/߶%µÛ5/Õächu­¡ñùuK÷£WëZ€Í½=}[¹-å~]íçq›·ùs¯¹–ú=ÎÐ5ÿLpÿSõéޯO
+>€‚õø8ÛéaÃ0[ÿ/Ç,]Ah,KN~[³Ç똇˜ü[Ÿnv Únœúƒ+eШé½l7‚Øð ÁjŒjüZ¥#ÊŒiÕ‡d"žÏ9¯Éüä ¡qç½Î
+h,µqZ7|z§E}‹$zhô0Ú"èèG¤Õ2toëü‘'OnÕt=rU³ÆM·ûä‡á}ÃÛ-œ²Vކɶûí«ÆÝ`sû&é
+4n†Æo&g KHÛ5öõ
+éíF]¬Kv~gâ§lCü³²¼ož¶l€FÈYl0&Wzg_#
+û²Õ°¡ Sw*´ù}!‘lëð_.4B㪥vúfë n´]„ÁßbУs‰]Å@ã
+!„B!„B!„B!„B!„B!„BêŸÿVhÜKendstream
+endobj
+1126 0 obj
+3407
+endobj
+1121 0 obj <<
+/XObject << /Im16 1123 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1094 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 871.997 86]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1127 0 R
+/Length 1128 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1128 0 obj
+30
+endobj
+1129 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 871 85]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/XObject <<
+/R6 1130 0 R
+>>
+>>
+/Length 1131 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+.ù\@
+endobj
+1131 0 obj
+52
+endobj
+1130 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 871
+/Height 85
+/BitsPerComponent 8
+/Length 1132 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíÍ’$­ Ekí÷_¼²Ãᯋú½dž»œ˜éÉ!„k!„B!„B!„B!„B!„B!„B!„PŽ>ÿCB!„öÄ4"„B¡ŸÄ4"„B¡ŸÄ4"„ð!„~#Á!Ü®
+Р½ar‰¯V"BhD"Ɔá!D¤@á²Ø¶‡Á!„@èO{ûç28,B×q„šƒFøßq`Ј‚ö4þìä{Å2—2H_nŒ@½ív|ØoÁZÖ)Â!#„‚+”¨`Å=爀Ј֎Дµ×…iT(ÚMnpðo™zÍ0Jß×Û׬r Å®®Ã }›çÃ}{Û—ÿÙ+R!פ¼ß’ûœè§ß›ú¥~.
+ ÑÖAGßzÁ™XÜFeôK ÔÏAÓß+]ÄýÐ(ëE‰8Y¬¸)£Y5ÿû…ʤ ­ ‘éÙ(i&:4K§4Óû‚Ÿz‹ýB©teB{>x”§ÒA°oãÛOLÆmrÿ¨
+nan„ÆEškîF ^3Z ²òþQˆn9qõó:Ÿ´9HY›‚÷q¾½®(’˜ÎŸ$Ù=A!8é KX k/ŠS³6/›¤ÚÃÈüŠ£…Ôr°ç¦£æ̪U Mí75aÌ׌èÙÐøÉ–1D¦OïÍVuŽ¡à]xñ8uZÜû*0³ï%VnÆæûvb(ú P$ùÿ;‚NvÚ†E'âì㞉 x”fÅ¡ÑÙ×ï¥uJmÁ}p»‘òmƒv%˜ùÑÆ‹œêøæÈ>³jÐ8 ¥j>¶Ú•%¦«`jöE†!ÅoGÍôϯßf§\=’:»û‹UnIûkB£þp5Gç#hœ½•c™ô§–FÛGxäÿc ±È2â”4^TŸÿ*0s[ó@éXΑBã’¿ž,˜N¿WûɈýnrÛÖho‡ÆêîvŽ8ÕP m_×Щù…ÒÙ’Tû_ë( ÑMŒ@£q ^—˜mÞŒè@£ï
+’zâÖ Ew€F 17Ëç8ê­‹Î@ã¥Ð˜n™‰Ð˜¸£9r§_Õy¹ì4¸”¦×D Sb;¯
+»ÒÉžE qÕÔ½+§¿mG¨#X¸%ÞZŠÐ”¡q¹::<çTtÞ<ªè{§û(“ >õ¥q!ƒ°‘X{_§·ÆF’KÆëKîUŸ•9é/ø´`¡ûy©Ç@c$zV0öÉtˆ1Çv‘äçxŸ–Ó¦{ÚÍ5xc7¡MEçSÆsÏ£ýÇVǬñX/J=°Û=-ÞȸUçLì^×¾êÝ÷°èG_JAjûÊ.0žÊöOA£¯V'qÆí]d}éS{{64þ¼_™ êvm ÑÙâ½s“Æ Ðx]åö“ ±bSöéãÐh ÁÇNù­!¥<E-¥ GBcEhÐìcéþÝK¡ÑÑm°;œHƒÄAh´4åFG˜«ŽÎËPê\—ð¯h(š8õ:Q È2ÿL}§@cð«ŒsêÈõ5D ³9Òî4cÑ þ´U‘÷h4_„YI­ RÊïíŒAb4æð‹¸ÑR\áƒÆ‡õºÉEˆŠý~VS–]9~ë~ßÙø$Z»û'õc™Ú÷ãåQPHY‰¾ÅQ¦˜ǧ¸Â“çv[­ËÌý§›?y4¦ïÝšSÓýИXîÛ"Mü¿ŨÍÐè.Ž/O@cÊÞ h,…Æ8x4`¿ý’ïiYNgQ“4:®àõÇý‘4#ÐèÞQŽäÄ­(eëmAÙg@cзßm•nϬp§)é§Ìîb¹³Ù¶5îÇK{š.Ñ¡¥|Øi4<âÆ΢¦:h¬Xž¥ëbªû–;ß°¿c;œ²wÉ1no#þ*«CHiyjbº58Îé>ªôw^îH§ë}Ç€êèÜîû÷§ÚþÄ»\VX¦¯y`ƒYfГ´Ac0ïm¦I&wB£ñöŸ4îÝrº:uÉ7žšÛß Ï%Øxzª?矞ÒÑÜØžv°éù6G’ðñÐèXDñ¿©ÐÒmœ¹–é>ÉŠ7íLÆ”ígEk>{…U34öï”}^±!·y”fl>.?…F£ ÷nuý<³6•îÈò§1|bT@ãjé‚Ušl| 4ÿ÷Ü|Že¢s34Q0~x°JäÔÆ|œÙ
+'Ô=÷(}# ‰µGðôa̪Bq”¤og,ç¹ pMtYI÷ÌEÅó§¥&­êÒ¼ Ä,íNo¶u˜X—þ98‰—}Ž¶äqÍþ?½ò”ÚgV@©NgõSS]kµ‘dcÏýbßtËä÷Ë—Ll˜fl³–ôú5Ôš¯s;Q¬¼¾"éØ$ÆÕ~Å`oäéŒܾÅñ,1ßXáÌuYи†sŒ3^QqþéyM'16Ñ¢f“=—ÜÐx1Ž@£¯P$·À -Í(«ìxº¨ƒÐQö,×éݘf´#P–3Ͻ8°÷cYÙÒÿ½ií#öt‘Oÿ²oîDrŒh¬;-}64­£Ù’¤81S ÀN¡;71­ÎYÑ
+h,úÂh\yWt7?°SÒM=[¤æ®/G#Vw=JÕ¸ñ¨
+h´ï@‹V™»S|îŠ.¡Ç}`yëC㕱#å?¡±m;ãK3ê@cz?„gCcóNyÅZÝD°xÝñe¹Ñ!%ÙXT"+Ëö¾¶Z²Q„+ú4ÙŒãì;îB‹®§qnÿªeèG²ˆey,% š§Ò·~j¶]Yy¹:h4–D¦OM1q7åÎ{îbì¼v1 뼿îH²ñÓÞ‹þFh!Æ£ÿ:½S™݉CãšÖ·zÅý%‚”˜X¤”Øì4s(«à%Äfh\IïöŠ¤ãÐXîmHÛê¨öÆáÚlö q5¾f%ëäY½ž][4ö4ç|4®ìFîE_¸ 7Oë`Õ¥ÍN#Wç—° mçBcƒ 7 H齞¶Í¦»È³ÔÚ×DÁCÊ 57|Ûìht¸q5¾Xñhln¡\Ñ© h¼WàE˜fhü–¬<©[,†ÆÎOŠ¤×rôŸP8º¶æÎ ÐYƒGcF q–ƒþ¡®ud‰Ie5ÿ“ Ñ8Î?ãŽÔþkjj~V¶W½»+O4K[|_÷tŠ ±Óó4§-K¯#õó¹µþÚuÙêAc€¡qš–Œ§ß
+¯²×K—¡ç-Á½§BU9<‰GOA¦½%¨ Æ©)ŽOmFdkyo²Qç>¾ZJGí~\ÑÌϯehtw©ªK qŸ¬Æ‡×&7¤öþîOAhT³({?(Ù<Ì4ëEˆ1×ë¸Íõ²æ|shï]ƒw¥_Š ô!_‡ÓÆ»ºY¼·‚Emþ\á D$¡'ƒâOµ
+&t²yÆÌE€­v[çåÐøçX)^B‰v0“ê` 4žòƨÐSã…Â<7â¦]“Z‡^å0úsOªoj…—ä^.ò* Úi$U›Mn09¸ø¹1.
+i.ŒÎéÐ(»‘¹h±ð6.óæäÆ]þŠM¥¦§"‡Wç·{€oùùa¼q
+endobj
+1132 0 obj
+4029
+endobj
+1127 0 obj <<
+/XObject << /Im17 1129 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1095 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 873.997 83]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1133 0 R
+/Length 1134 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1134 0 obj
+30
+endobj
+1135 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 873 82]
+/Resources <<
+/ProcSet [ /PDF /ImageC ]
+/XObject <<
+/R6 1136 0 R
+>>
+>>
+/Length 1137 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3Ð3T0
+.ù\@
+endobj
+1137 0 obj
+52
+endobj
+1136 0 obj
+<<
+/Type /XObject
+/Name /R6
+/Subtype /Image
+/ColorSpace /DeviceRGB
+/Width 873
+/Height 82
+/BitsPerComponent 8
+/Length 1138 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíÝ˲ë¨EQ·ïÿÿ¯*âV§"αŒ 3yhÌîöö£Å$Aøº
+àìôÖÀÁ×8ul‰¾Ïwº§ä’WÈÔD.ð†Ñyðíõ¥Ä·ÿú40ò¡dšÖ
+ìuægøD>JMoAË^(°Š¸‚éå©cÈ—Ò1w]
+öˆ“Ô1ö7JÆwPÇ2“A ]d7ÎéGX¿¿®»¦TÜ>©ù3¥äXt#Îìë{cã΢öÎÒá—RÇuŽ§Ž+{cGÁáøɻᷲä5W§çOY§ž¢ÝE¿Œ>\Pu¼þ§i?òƒ\Ô‘:RÇW©ãÏ0ZÙZÞm’:ý*Õ1¯/Ø&NFÞƒº%uLº ó*Š•&Œ¨cìñ3ÔQæ¤6øÙGýÄEv¡iðu'Úòˆc :IÒ†ÃuRtb-q<[$ùËðnÿm…zJYoÙòàÜá`VÓÈ‚ñî€9ìxä- Æ~wá!ú„~¨«ý;*Š‰·É Úã\u|4ÜãêØqxTe ý0u,hÃ)U”G_ëôß{ç°þÍ×/¤ÎUÇuL/$ÍÂÕ±{ݪXæ˶_† +áÐÓwÈ»^[¯˜¨ŽWΡ:•ê˜=dÄNù š®£òPãN»dÝê{„ÂtOtÆ #¬`Õxü,‹)õØp‘{ºå>ê <¿@Oá"ÐL¾=rngÞNGvEvOù—2™ñs “”˜:æ•M¥»q’î5ÎV£XƒZs—HøÊÅHýÖ,eêx…n½ˆíxÓ½úy
+¢®Ð–£r/ÿ·©ãu»¥c
+ŒÖÊQ~;uì®ç£²SÛã
+ê8ÑÀPÇkàп¾ùÅ_÷<H2†ée±–ÝòOç¤S2ú|oâ~›ÔQ€SÇŒ— Ž•;¦–RÇûU?&†nõÿ¶P’³Ô1<B3vú½PU©£ª#uì ®ñ`!8iôi¹ < *Õ±QÃòvPŽM’°²Ó¶,nZܘ+i#½e‘©ô”…ãðºÃKd쑾Záñ©"Ž¿ùð÷Xuœ[ ªQÇŸ“ ×õF93qÆÚ±uyb— ÜðC<ÀÄšK‹ Ô1{¯fËrÉš[ÊÔQܽ6mò.§]b×@Æ€ƒ³=¤X”ä0u¼ñ¡áÛ_=Õ£ÖÞW×ñÅòÛ‡˜¡åªßù,I€ê•U‚nuì¾ÓäqzuüÓ—ÛîåDìRë‹šØ@Ù¡$U€õGŠ<yª[yÅGân廓®´U<‘N-SËÄÛdî+Æ•ê(7€ÃÆ‹šŠUǨ5èöǦŽ×ó_>rQǧ2~ÇM¥¹%]qoSGKÏ
+endobj
+1138 0 obj
+2582
+endobj
+1133 0 obj <<
+/XObject << /Im18 1135 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1106 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [237.148 386.215 242.602 395.912]
+/Subtype /Link
+/A << /S /GoTo /D (figure.6) >>
+>> endobj
+1107 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [453.41 317.864 458.865 328.773]
+/Subtype /Link
+/A << /S /GoTo /D (figure.6) >>
+>> endobj
+1108 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [102.333 101.683 107.788 111.38]
+/Subtype /Link
+/A << /S /GoTo /D (figure.6) >>
+>> endobj
+1101 0 obj <<
+/D [1103 0 R /XYZ 72 786.278 null]
+>> endobj
+1090 0 obj <<
+/D [1103 0 R /XYZ 121.366 462.595 null]
+>> endobj
+1102 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F30 512 0 R /F28 523 0 R /F34 583 0 R >>
+/XObject << /Fm14 1091 0 R /Fm15 1092 0 R /Fm16 1093 0 R /Fm17 1094 0 R /Fm18 1095 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1144 0 obj <<
+/Length 1145 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚµZëoä¶ïçË?áoÕ^E$õ ôC.©ÛK( ´@S´D{…ÓJ i×>÷Çw^”´k-ðò1’Ãyüftê*êªÐW…Íc]Ø«jÿN]ñ¿W¡õcÊ43q–bï Âm Üš,¶y†ôïoß}}cŠ+¥â2Ë®nï‰ö¶þW”Å*Ûl•Ò&úkÿÐT®ÝlMa¢›M™F}·1*:Ž›ßþðõÊ®T—IÉë·:‰³2#.Ž›­Î‹hì÷þØìýˆ]íÝFÑ3vòè~lä™°ó•G7<3á±gš,°Ñãf&tüsGÑe$Û¸®ÆF 🎾«}Í\úÇæÕ‘'
+`œå‘·d66{<å©=ºÎ÷§±}ÞØ,ŠñÎxK…Â,é–·k"8©±Iä;w×zl«h<U¸ÍŽ{Ußý”¨ôá4¸cÓw#ʳŒžšã®?¹Óy_7Ýs:
+ÇÚW­„åq'pñQÆq£'üÓó
+Q¦£j›»e14\ ÑaèñFMM3éâ §®B™!‹w¼U:‹SPÛm‘Äû‹ðe£
+Ö¿¼f¸ð)L(”îqá`’Ùµ€JWý¡!¿¬Cƒ!û϶žFË]T_¦é:žÐp¢¿—…;˜Õ‡fÓñävžWÔ|V\¦E5éÚÞqŠ‚bã虩ëzØ}à [,¢Š\E¼Ù¦Ð¹ gëüSK»Ãƒ'ylðå¦[ Þ‘k3‰]šoRDƒ¿÷ZWR¢ÙÓؽ«ŽLKFØî``t{Ïć]y”@
+†U¦ð‚ë‡Q"Ü]sÜ»·éÁà÷Áw~›‚¸t9H-烱ß32
+BÕrO ìïV¡njƒR+‡Ñ€ÏõÙ;ü­kß™rÉnnvØ!Úd ðíšÊ8KBr3¥kŸÁE£“Ôz2¢W êÑyu””jJËà7€Z­—TëE&†=ÎĸMi.üºš3_àñظ5´ZjNêôm]¿¡M€o ëgi[0•¥üæ ¿˜ÂþÕSøÂ6A_ X@ßÙ©êMI5‰†—@„ºãÀ¸âC¼™/W,JÐ{Ú5!)GšF8¸ÀB- %j]£³7!©ÐgYèEù²F‚ƒÈËâ …
+«E!AušGCšæ:ñ7
+
+I¦ânCõ
+üåle”ÍF¦çIèï·!ÀÑVPü
+˜µ„5fã/½ì\IC¾Ÿ£ãà(“+ Ã
+rù.Œ°ŒuôO¥dÄ:òP=û'ѬÙÝ“P$Ä(¥\4àù‰Y
+z‡¡Ü~䞤ЪzÒµrYt.ÃCÃ<c̲ò9Ë‚M€œaÏD;7®ÜE"<eÖ ·€<@Fz"]JùÂô¬•Êë[bˆÀPã5£b›ü&Ft18×ìÛðÌ,ç
+æÅ[諸úüªÞÉå>šàì+šó¡|9Ýendstream
+endobj
+1145 0 obj
+3270
+endobj
+1143 0 obj <<
+/Type /Page
+/Contents 1144 0 R
+/Resources 1142 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1083 0 R
+>> endobj
+1141 0 obj <<
+/D [1143 0 R /XYZ 72 786.278 null]
+>> endobj
+237 0 obj <<
+/D [1143 0 R /XYZ 72 761.372 null]
+>> endobj
+241 0 obj <<
+/D [1143 0 R /XYZ 72 389.76 null]
+>> endobj
+245 0 obj <<
+/D [1143 0 R /XYZ 72 270.086 null]
+>> endobj
+1139 0 obj <<
+/D [1143 0 R /XYZ 72 177.263 null]
+>> endobj
+1140 0 obj <<
+/D [1143 0 R /XYZ 72 127.649 null]
+>> endobj
+1142 0 obj <<
+/Font << /F37 380 0 R /F15 393 0 R /F27 394 0 R /F33 497 0 R /F39 496 0 R /F26 391 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1154 0 obj <<
+/Length 1155 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZK¯ÛÆÞ»@»ïJèÆ`1œ_Ù9nœ¸i‚..àE]445÷Š¸©”må×÷¼†"õ°ŒÂFk¶†óâÌy|ç;‡V‹þ¨Eªi–„:Íåö‰ZðŸÇ…oý}<ÓÆ&Œ->ݘ¸²6LòÅÊÄa–Ä8ÿ»»'ß¼TñBEaå‹»{š{·þgÐj\¿\Y•ÃÆm{W¿[ê4p}¸\%¹ ^ 8˜Õ8i©³`/O»å
+žÚ¾¯ÞÖŽ'-•ív·|'lÍÝ=/qͺj¤«ÝÊ4^S UÛõò_wƒs®^=§óº?´ÝâÀ“ïïŽwÖ)ÈPó•ãü–ˆ`?c ‹òºhÌÙk²Ðfñm Ä¡ídw“_ØýïÕC1ì»e¬¼:äUsßv[ºú·øæ“c)hfôz\þr™Ù íPhQðç¤;T%?u®èÛ¦†»æA麡¨*Qs›¢+ÊÁÉÚ‡®ÝïP—QãF{?¸Æﶫ‹Ò­I+ˆ©JÞ⦇åÊhÔ|+´'|,šµ4øç¾mpòÀOo"eÑf°½-Ðæd—µÃ¡F†zÇöØAÌ_jmDj´!ÅßM»„‹¿§Eïð}xWhZy3Èf ûj¨ÞaËÕžQÖ®è.˜ÝûMKãE˜NDˆ]^„Øî7í¾ÆKÇ1f…GÀ‡ô(Gš6Ê Úǽ';±<ƒÜ z”X`7>.|ëhÑ„9ûY Îi˜§SûSñ¹uçI.äW~ÜÄ“ÈÞr ±ÑaßJžÀ(M27¸7Ú™—‰Àw"5=+Í€nº}Y5©Êè qnMâ4ìªãÎßöE] ¨Ò/Ȭv¬‰Þ `Î9|ÀÒ0IÍçÅûEñãE…wV6øÉu !)>Ü£B“e²ÇÝ]Fg 8ĸ ;lÀ)´B×YT[Áz
+6‚ÖòØÞó2Dù Pžràà@¸ztwìUÁ
+^
+@æ`Œùà'ܹ)ö9lÉ´ºæmç¸ËëÆY¨EA<Õ©{ÂhxùPv›Ñú“šÀ9ÃT¥BTê%$k±
+~`qñÛ‘£ÁŸ¿ü™“ }Ácpç(Œ!Hâοp …¸_;ŠÇ6™Â?<£²•ÁïDe6•Aƒ`㩈ÐA2Å)s°)Ù¬€È\9颋À”¶h“‘-&ž-"Ž«œc×{5†¨D…Q|;ˆ$¡I¦A"Ê9Ìÿéô5þ‹r1B½Þ8
+éÑÑ$Añ¡Ã˦LdþÛ£=Â4Ú 8rÅ:ŒqýÀAzÀÏe•Pê]}’qãähÊÓsÅä8¿¨ª0¥&¨Û° L!¦óìËý¶, ¨N»—MOC\)ŽRrÇltGÜ’jR0}Ìɱãd
+kYÅx“ÚÆ¿fØ´½ßÒtöéêüð'ñÄÀj×”Âjè61°°×¡(‰‰LÑ <s¬@ûÞ |)vü4,¡Óât5Å–<‚Nèd‡cþ‘ª±šÒÓrOp¤m.ÝĹ³æjäêß?¸áy]#[ùÏð&Š#ø«.–®òP[œqbïÜ©G¨$ ±€¼E@#Òk%Žå>ÐgÎ*'i˜¥ùuO»¾^™‹ÉDd"¡rõšÚÄ_±«®0˜c ! …·RMôÀs·-±ƒ&…y'¶tœsÊA´§yȉª‘q£˜/^mBM•›O+^üïë{Î 6šüˆú´J‰]Åzݹ¾çô[OÊg“eÞb ’˧(€ý ]0U*„ÔÙ :ÞZI‚§)wãqE‘¼v‡á)σï܆÷!§Õ ãFøË˱õíx¥Giì$fMó# RIðt3mãQ ý®(}—$Myܸ?À ¶Øƪbå…<ÙËž÷ücõDgê¤z¢3Æ>h
+Ç&Êùp²«+úŠ®ŸéyD6TAO•bÖê%FWHÙ¥Øíºv×UÁ©þÚ_Oæqò¸ÏÝÆ]ɨw\4$ÑℯN‹®FÒ-œà>ìꪬ_Xå² xJú»ëÚëIÁsj”¯Á)‹Ä‹\­±ž6@ ´Bú/ÝóŒK>°Ž£„òÁ¼‚×úJ_ Z•guRPrVø•bº²ìeRŒWæ„àÎBˆ à㾪žK¬å‚ƒCnu,^4,&Vc™ÛAÛ½ÔG&ZZõ®ô‰ÀÍðâ^ÊWe…[–DÕØlÑør“ÌÅÆ`#ðÕ²êyo+U2“Ó­ü¡3ØÜKZÌ°#æ¼´á‘Áï LjÜ7¹X.<ñÀ“ö\5³Ñ1Ë,JÏèüÈ
+Æñ^¢ÞùeD{Õµó^ò®VÎÇ‚ÆÖAnTö+oê±g›†ä¼ÎdGâyòg–
+ÿW0£`Ñ튡NŸ$¹ÒÄ“[_Dø˜ O¬}”õ‰Ýžà™àÏ,¥»&o@£¾À}…ΔfÄÒtZ)®…B£ß—¥£„Ëv•ôzM¤R…ƒ_€aþþúÚOêݶõRцú
+Ö÷¬Š¨s Y¿'Ö}Ýîv‡Ëe/“û/Ç”îÉ×Vù"—å’òà{:L¶züN&ßä4òò99™Ã'©š¸iöµèš`¦’@y_Tu,Ò ëzvÁ+Îê<~½OÄ¥Ðs‚cö¯€T²ó.ù
+ž¡ƒ_﫧rè¾å.ÙS>æËé¤âqÃZœ¥ðчtṟle¤le`sH-³
+endobj
+1155 0 obj
+2974
+endobj
+1153 0 obj <<
+/Type /Page
+/Contents 1154 0 R
+/Resources 1152 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1083 0 R
+/Annots [ 1156 0 R 1157 0 R ]
+>> endobj
+1156 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [390.103 685.335 399.069 696.551]
+/Subtype /Link
+/A << /S /GoTo /D (Hfootnote.15) >>
+>> endobj
+1157 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [267.387 348.35 295.266 359.259]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.10.3) >>
+>> endobj
+1151 0 obj <<
+/D [1153 0 R /XYZ 72 786.278 null]
+>> endobj
+1146 0 obj <<
+/D [1153 0 R /XYZ 72 732.484 null]
+>> endobj
+1148 0 obj <<
+/D [1153 0 R /XYZ 72 667.406 null]
+>> endobj
+1149 0 obj <<
+/D [1153 0 R /XYZ 72 620.119 null]
+>> endobj
+1150 0 obj <<
+/D [1153 0 R /XYZ 72 568.59 null]
+>> endobj
+249 0 obj <<
+/D [1153 0 R /XYZ 72 459.296 null]
+>> endobj
+1147 0 obj <<
+/D [1153 0 R /XYZ 88.587 92.018 null]
+>> endobj
+1152 0 obj <<
+/Font << /F15 393 0 R /F39 496 0 R /F28 523 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F29 547 0 R /F40 548 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1166 0 obj <<
+/Length 1167 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ½ZKÜÆÎY9ç¾7s Í~ña %öÂJûà  Œ^NÏ!9æC+åקª«š¹Zlc!±ŸÕÝÕõøªzÄMâ&“7YžÆ2ËoÊÓ+qCïnBéÐF#µQ±ÑX{aà.ŒÜ)ç©Áñ½õù07"‰‹¤¸¹?ø±÷ûÿDo‡ÛJdÔÛ±ÞSùáv'³ÈaEEM;8ß.¢áhyô£k\g‡ªy¤úÉ ]UÒ„ª9´Ý :Û˜æhÔÓ-µ·2>RÃÞõeWáryäxqKÕ‡½Çÿxƒ}çk=Uû걩~L„.ms+‹h¸ýïýßáL;‡/üÙì©œ„»V*jôªU¨4%-Ö}¤1%îõh;[®£¦£íy~KSf>A¥³=Œô§€!–—I’ðàsì·(Ò¸PébŸoþ€Q0äó;™]Ü”,â,IùºîÅOß~÷Ó›»ÒÀÅ•‹Üð@`±D·êi gÛ÷´AgX/•±)Ô¼ÔÛ¦¾©~LLÿÄÆšig@‚f¼Þ ™Æ)È8õ¢†Ë^Q œð©ªkÚvã*àH:¸Óy˜6ï¿í™n ¡*³å䧈““Mà‡®½ðh”i¤ª'9vÔŒó}ó…Ç·;%Ñý±â¹á;öî0Ö4Þï¾ý™DÙ3Çœ©ÝžÏuUzz~¶ˆžŽ .0ôH÷L
+±´ÙW“CRŠ—Rä™&>Ã~÷1s$]¸6ç‚Œb«ÛFD?ÜiÔUì¸rÍ'ÌUtWá®9‡Ä°Šš,uƒ’*á´{4LX¼ð*þýˆ¾ËžØÙWÃÔëO`ÏxŒ_Ûˆ·XòÆÏo©a:.6[µ§jË[™ÖB‹Ïâ²–•ËXëô%1q*Bµ)|_í‰1
+Sjã`w7—Ç…Ô“ë¿t× À9#fˆ0ŸSéX© /&éÆ>w*VPÞ¥1èÑÆ9Ã9€N†æ Pˆüeè©…‰žðrz*Û†¾^;@ÞØÖRãÝ66’•÷- þ| $•ªz[­Øôq X>–*€ºû-¥
+ó) ô˜7OHçñô¨Ð¹2ì5§"ÜÀJž€-4K%÷à8É£oÿõÍ7hR’‚” µ³{²IFüÃVGŒï*o)¡à+Ð
+Ô—wFmÔ‡ôÊÖ£‹=ÍÊ—oÿ5rœoÀa¿a• ØÀ  3y}•;UÀd¿SX‘ê‚~ù
+_KF¸ý@U`ç€_Žµ%¤B1kôõ¹¼pé…Öà²Ç„µí5¹¦T>´<¡VÆ xŽÐʆ~¥±-ѼWe¦sb”¹‘ãàp†. ó!ü}ÞŽe)
+d,ŵ!e³X0÷µYWy1KØl»
+òŽ$ È‚sx“"Ù¾IQþ„<¶¸ñI¡'߶ü%l6øÃf
+”xþ¡D>t_l1!Ëb=éú›¾D¼ÕmðA›8ù'r÷˜†¹XðäK÷<E&Q›OPGSÏõï¯]õx¶6–À0ñ ÉüÍžŸ%dÒxnšb¾ë$
+35#;üîÝÁuþmH«ŒŸ^0úð”,ÓŸ˜@_¸`nÀÂÑ“ÄïahÌoUèœR7l)0Ù-ÓÐzi‚ezõ¶(Ù¼K4•¦TÍ‚²Žh•;÷óXÑ;õPÁ2$œž‰x(Û£9룦¬šXF$yæšÁ¤2dƒÔFd€t DH³'ª:PâɸG`cH¾£ ’£0{}¦)ÊØq¯â‚ϦÀÀ’ â 4’„YA© ˜á)JÔ©SÇz ²g|-~²¨®zîð „t†Ú»}u¢¼MOË0fÐCZ†iØ(cíõ-ÍCЗ‰…éÈ F¦i¶Š†üF·Þ¬7€”kRó[€~ûøeàÅyž ø¿&W6'où \úg΂)r‚þéy4/"W7‡mËtµáýã<[Ÿ–³CUB€¸>š?˳SoóAÝPiýX¿‚Ž#¾)¬Ï‹u$”-žö'W >eŒŽžæ?R„–Ï°šY¾h[³¸½Ñ³<šïs·q8&d“PHZb¡(¢ïîžÞ¥r40>ÔSCáùA“„6hòvòPêÜ5|žsÛ˜uR(K=CTª§ Âg ×ɦ
+ü3!œ4Å÷ƒ†ÞÕ”Rp^oy°âÅ›!Vgà ç7`¤ÍRðmÝvUïáy1ýÀeð?ðÝqϬõñ¿fË'”ö ,žëpôþ Ôé‘žJŽ·2VõàMY¡–6d
+˦r
+ˆßìÛ÷=Ëx¸ºÍ4Gþk<7a–L Ìx I)8ù$Êäõ2#?´þ©›šˆendstream
+endobj
+1167 0 obj
+3218
+endobj
+1165 0 obj <<
+/Type /Page
+/Contents 1166 0 R
+/Resources 1164 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1083 0 R
+>> endobj
+1163 0 obj <<
+/D [1165 0 R /XYZ 72 786.278 null]
+>> endobj
+253 0 obj <<
+/D [1165 0 R /XYZ 72 626.755 null]
+>> endobj
+1158 0 obj <<
+/D [1165 0 R /XYZ 72 506.485 null]
+>> endobj
+1159 0 obj <<
+/D [1165 0 R /XYZ 72 470.42 null]
+>> endobj
+1160 0 obj <<
+/D [1165 0 R /XYZ 72 395.829 null]
+>> endobj
+1161 0 obj <<
+/D [1165 0 R /XYZ 72 330.545 null]
+>> endobj
+1162 0 obj <<
+/D [1165 0 R /XYZ 72 269.503 null]
+>> endobj
+1164 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1175 0 obj <<
+/Length 1176 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZIÛȾåàò¹„ tsXU\}³“iŒdr˜F2@ÄÕT©Å˜"5$å¶ç×çmEQ"ÕmÏØ@èÀZ^moý^•ÔE?u‘é‹,OCååö™ºàßÛ _ú ´1eœ˜0‰±öᵧ¼6I˜§ Ò¿¼}öÍJ.TQqq»&ÚÛÕ?ƒ‡MU^ê<Ø\^›´ªž¿+Ûû¦úÙ­ÂËë$ÑÁ·ï.u¸î÷¯÷Ý°qVòÀ5e{y “¬ªæþ
+Ú²,X¹×‘Š·b’;\CÆÂ@n\· 6²ôлzÍåVf¶»]]-Íaù³ï]G æ¸óÝþNu­ðøÎÖ8ÈÒH<š‰ƒ­íÞb¦5&°4ð›MØ“g¡ÒJxtÓ6Ã;WVkàѱ2ÍÃL§BÒ.`yX(u´™[<w¬€‹|ì®rKK'E¨u,ÓýÑî¾sÕýfXX7Q0u"„W 3ean¤ûG™…ÖÑ—®YôæsIÅþܶY-̪u¨b-$rççJÒP©q®Nß´´ þ¾®?`•epݶ"mÁ./i,[f¨‰ò0×34a~ÕŽ4ϱÖ)þL j¨ˆ5¤ æÝßo¸šøih{Xpï«~@e~øC5ù¦òw]{g諸.M;Íã
+@¤5X;šâD¦ups™‚9HàÞÛí®vWK¹X[Üƾ¯Jt}Ø
+×IÂàP'1F÷Œ£{8îSüóÐÁub¼øt\®¶ –’QHÇBçÖ®ë[à¼C+ÝB6´;î°uußlGDÓÈ ;ÚF; íVzŽˆòÍõî2AȱGÍT;é®”CõŽô¾öà!Œ DX¯l»‘¶mVc»:Ýc Àüµ2ñÏmã~88ªBJ‘
+$Ó»NöCÝš­#‰§P©ïPXxÃ(%T}´ c
+ï(¹GÌ9ì°\_:1P&ÃdGÚo8‹he–}Û“Ý
+¿&r¡—^‚sÐ6ò»Â3ä‡V`ÈüTœ–dIðöw”ŠHÛl×YŸ~@uM J³ö`át?@ä÷ƒ°“Øô¼Hü Ó§—gˆ iÎ4ïø´*‚Ñ4^à3ÊY Ë+î9ø ¬m;0߀µ=S“õ`=ã_ÏTúÆã|$\¿9Ë¡Ìœ{ÆŸc~@rîF±úúÞ7À¬aßØÁ±{öÏDGª ÕI²‹ÕvÍ3ù`æfFµŠ!n‘'áV`Ä<52IæcÎõ+s·¢0‡™½<DE5uÇa¡BÀ#ÙŸ
+µÒ‹âiV|º7%€}âc#Tuu·0›Ñ“x6ÎœR1H¸w‚ÐÚýÀ…‹=Æî4 ´ªj·ÝZ¦/ êý[qHM¼Ù¹^f½;ퟟo*.ë§Ó1Âr€µx#£f 1ãüÀ·ÅÙoб‘spâ*ÖØðË>
+
+Üi;[r„Ç!rá… ÄzNïë¡ÀÈ
+ÕÀßµ&Ð-Q~jÔ¶»gîÙ‡kL ¹Û“Ëv»_>=÷н¯q¦¼ð¹zžóÑÒ@j§î HѬ¹„  ¿¼9(Ì@‰ÆÀÜkª”#p~zYÖmÏG-¼ÛXŒ< ˆí]Az¼œŠfŸˆÀ«±à®Vb ¶ï÷[?lL–!Ô®À1r•ƒ
+(ùà1ù) á‹èøioÙƒ(ÉP¤œÓð©Š?úë/ªþ< ÀoIÌèó¶ç¶‡“;MíY…Uõ[×9ÂÀFïÈ  k¸gqª Ð$Ú
+)l9wòPØ7Ÿê,Œª«Æ¯Äo:2_îçëܶE9 :ø®;H|Á‹šŽ}ÌnVíèh9Š‰Ñ€nÃñâÕߥNvqî0Èñ{Šæ N/ƒS•™\oÉû›ú÷?ºjp°Û[×/mùöR, W†æʤâ4Ô‰W;b˜Æ‹(`hI(Uç
+6Ò©ötï) í¸]Ò¹®k;.–(¹¶Åº¿ÂBòÎ ûŽSç¾(wíµ¿±3€3Š#ìºjġë»9KƒçóÁŸp³¯à2?Z²ø0Ó'ï!ß·¬6ÂrR’II¨`uõ˜ÚR(½ë÷%^AËÓ/¶<€ ®ù?x¹^Ôx%+7•IÚ˜E¯œ”ä kÿχÁM#uÄAèðk+ÛKáH÷®À9õúë½_UÄ‹¥|óã†X€Wb&|†OEïù:’7–ˆðëkÊuéëw52o&{à#Ð,JÖk|NG'»ç¿ À>ùoÐÁª4ÞÍM–
+endobj
+1176 0 obj
+2796
+endobj
+1174 0 obj <<
+/Type /Page
+/Contents 1175 0 R
+/Resources 1173 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1177 0 R
+>> endobj
+1172 0 obj <<
+/D [1174 0 R /XYZ 72 786.278 null]
+>> endobj
+1168 0 obj <<
+/D [1174 0 R /XYZ 72 441.543 null]
+>> endobj
+1169 0 obj <<
+/D [1174 0 R /XYZ 72 391.929 null]
+>> endobj
+1170 0 obj <<
+/D [1174 0 R /XYZ 72 315.217 null]
+>> endobj
+1171 0 obj <<
+/D [1174 0 R /XYZ 72 279.152 null]
+>> endobj
+1173 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1181 0 obj <<
+/Length 1182 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕYKܸ¾;@òæ¶jÀ­•¨÷Þœ`g³I»ÀC6Äڔäñøק^”(uíL“Å"YdU}UE…wü…w™ºËòÔWY~Wß„wü÷þζþ 4挓ÈObì}…qo9÷Qâçiò5þ0õ£4âuÿúðæûû(º ¿Š»‡ñ<Ôÿñþ²ûïÃ?Þüø0OKü8I¾. ²ÅÎâ*»±ø>ÂÕ¿¿g0 eäøa·cå=œôn©Ü;ôÝ~Fî5þfÞ‡IcÓwBð·ðÚ¾¬uÍ“Lywÿ Sêr,™t*nt½0=îöð_kYð¨;mÊQ×>J4̨õAwͨÛg<ÊÝ^¤ß‡¨‹‚Î@ÌI앸\yÚ˜Þp³ê»ºÉ¡‹ûfž®ÊiÀó&‰×Œ<Ò
+º=èUýÔÖ«™nÊÖÐõ[:Q°:‹n`1^ùVÚ àphÙ{xG­Œàeào]žË#j;ýÍUQàŠFšO¨ø¹×tÃôçªÑÖpúð ‚ŸyÜè¡ŸL¥ß=EB‡ø¯;ŠP!0ù™;UI§ˆ¹.¿\Z¼uÖO¤¼á$WmkØÝòŒ¶?ÚÃòÂ<²Å
+À\Z²æ’ìOh½Òi1‰FÌt¶Çj2f6x$Ð"½y"¡nŒ®ÆÞ<ïòØ{Ùz¢ØcõÌ'ù¦
+—«ô¶
+6Ìd!´&h™HìÊ³Þ ë®â^“R4°íkæ•hsHSщ±Q÷6¬4‚JR­Ïà
+|˜Z©šÃ^ÇcÃ\
+V²]3s8Ÿ cLžy—àƒ |ÜQ- (ʘ¨¼§†œ?w…"d•µÛrœ§#*Ü(¡×wD¶ïÜZþ¹t
+Ó¹)ñ°Ø‡¨3ç˜ýp hÄÁ$ð€ƒÌ9MÓÍÙ-à(r™”.ãu½þâó7Ó|Ä
+ýkN"f–)oƉgIˆ.¥Xfï  Dó|a‹‚® šö\Îò Í@ 2~Yû(.Št-Q6úŒ« 4´Xˆ[$ðµe9NÒUíTkÉ>L¥drcci 1¸/Ió™Íh§%á÷é$9
+¬øop%ÃÉøqxÙ’9(ßcÙÏù»“˜B/ß^.’$|Çü˜Š¿’ä¯âELyŽ>6ìqœ ìǹë ÄCªe–Gþ’ÀJÂt „7Œb ‘¼±•@ck%@ËlÁ4¹C¶
+—åÊiÀ4þŠâS¾'®
+¯† Åïn¢¢ “
+•d+>àJ­72•8ò3•
+[/­OÍ eß>Îý P«Íðù8ÁT™,8N
+6—²‡Ì±ˆÒÕ‰^®GâÀ‡†¼¯»a1Ñ‚waÁ»°à]ÈëÇûÆs´ Y„L;)Q‘´ >ó¿ð2^ŠmxÁÏ^Ðøö¢2’yeøzè‹nÇø?îíwcÜšc]&߯HEØ•H$3{ù`<¿È=Êbó `šNô^Æïxl£©‚ñv-˜«Ù+$.yæeÃ×EØ whl®Ÿ—o䈹k”Ø]?ÙÓë´¼R/¸
+endobj
+1182 0 obj
+2893
+endobj
+1180 0 obj <<
+/Type /Page
+/Contents 1181 0 R
+/Resources 1179 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1177 0 R
+>> endobj
+1178 0 obj <<
+/D [1180 0 R /XYZ 72 786.278 null]
+>> endobj
+257 0 obj <<
+/D [1180 0 R /XYZ 72 604.41 null]
+>> endobj
+261 0 obj <<
+/D [1180 0 R /XYZ 72 501.313 null]
+>> endobj
+1179 0 obj <<
+/Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1186 0 obj <<
+/Length 1187 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚZ[oÛ8~ïþ ¿ÕÔ‘ÔõaÒ6²Óm‹Ô³À`vPÈ’œhkK]šfпçFݬ´ÝE€˜")òð\¾s¡ÔÊ…?µ
+õ*ŒG‡Ñ*=>S+þû´²­_ gz¾q|Ÿ¾3qcgnŒïDó_nŸý|­ƒ•rØWÛ=ÍÝf¿¯}G…Ž¾Ø(å«õõE¬»2m‹ªl.6&2ë}UsãC·kò¶-Ê»‹?¶ÿøùZù“Õ6Úuüا5·÷yÃ[Z¯n¨u{¡£õÃ…×wP;ÁÞÇF¦TüNµk“¢Ä¶ h¨áÍóŒgì«òBÇ°& îëêÈ­¤äßüKÑ¥ôôoWy‡Ü¹Øxž‹´ñ]“×<žòk&ú®‚Šû3¡´}š6?áÙñ´
+YÓiwtXÝÈhéõÃ}‘âÀ=ÔùŸ]Qç}J2 ï<ùþ:ËÓúñÔu^ÕwIYüEGð °¡Ìøͼ´sy Ús‹ÇÂ}Ö`7– h‘sòñÐZ†Èn çÃ`}_ÜÝsëÆåß‹žà“ϲƒ^âL&žÁóCÑÞW]Ë“îIÜŸY00ɾô©¬æÙ¸$†¶÷2Ï_'»‹ tÉ:–vËAS ˆÖ=ÐÞÈ[ƒºžŸq¤/ƳÊDü&UÖáH•ÃÐ â@¬£U‡b· ïFƒÉ™tª‰üÏE†òŘ@c&ÁÏ®¶ƒúzµ‰ŒÅêi‹~ÚÊ•rT¤ غÃëNïPr_û럶ê#›ðuU¶(tî/Ê–Ø}óú?ŒÞ;&Í'âÓJ‰ëPM8Û•MqW¢]NÛ’»æŬóP”ùC‘µ÷/D4]èP¡ì±uL¾ìUú©)þÊÿ—÷~Úu{|‡4[¸\M/vB?D:&ŽVu¾Ú?£q" È××+9J›¥qXÁsCQE!O@Øu¼À¬ð…€%LR2fAJ× 9±öd¥eÏ1[ÔÀ‡÷úyýY碢…*X tcíMà(å-œÔÖ M
+}@S8Á‰ö¡S¢•E† ‡_p1‡¬¸h"05ìíæ}(V!ä›Ê 9M«zx‡ÉcˆÃI󶇛,ß'ñK\~Émù¦ª¿r S
+³Å±HE?\ÎÍ!wî–¢j9‘eIö¹8-úå(Ïd“çGØIöØ–U_Ökݓ˃äAê"®’vncûÝíóÞHfVioä}ω Ċײ7 U|æ®ßݾºúx{uõöÕ»×W k+:ž¯{;e@õ]Hû§•˜IZ`Ö‡<É(œ÷$1ðD1X"‹7‘9S-èb†¥-=°ÈØÚ? KBʼnƒõ+6ás“(;ETAÈ`gˆ»sÑ5§h–æNKÁ9Ôœ¼AC^•Y8ÊþK‚}rFOKS…X”ùž0µöaËSÂôãô™0?üróþÛ²TN¨ƒ‘«joöËfá÷1ÁQJ† ÜÃç™h‰ˆ×S(~ú@®{´ÀIn{¿ýøòæíåíoOj§y/¢bü캿Q@ !¥³Ðu,¾¡Kâ8¿¼µ+Ê„Ê3^ e˜uõîšM~wÄÜ! L:ZÌ%kox ‹ž*Ð(çIŠZçRá =Y>Ô}5«Øâã`‚-@qä— ›
+v
+éÑÀ³ßLÓ®ægT=œÃÇ–åÍÒG;Ê ßµ¾éí¯oÞ,¥n«q¾Œû°^ yhÉ œ¤çøq4dÇ@wY-‰9‚pÛŸm@O-_;áo"'KN ©S]$È]Ü|vÑ‚*à„³‹xdñm¥æ±à ¢çѶì>uS’ñãï}`"ȇ°6@È¡J2¼X8_>
+endobj
+1187 0 obj
+3843
+endobj
+1185 0 obj <<
+/Type /Page
+/Contents 1186 0 R
+/Resources 1184 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1177 0 R
+>> endobj
+1183 0 obj <<
+/D [1185 0 R /XYZ 72 786.278 null]
+>> endobj
+265 0 obj <<
+/D [1185 0 R /XYZ 72 761.372 null]
+>> endobj
+1184 0 obj <<
+/Font << /F26 391 0 R /F15 393 0 R /F27 394 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1191 0 obj <<
+/Length 1192 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÍZKsä¶ÎyÅT.¡\;0|•µä(Ù]»lÙ—8¥¢f0ÖÎ
+V”ò×Ó€hµNUªR:
+üα¼PYô|±Nr•‡®áÑýÅZå‘åIg{¨¨ªy¡ßWvC½é«¦ë<Ï¢ëj'®Ö*MAN /‰r+診<ž/ò$zºH.
+..òÓÇ¿¿zws}sõMèq,òøìZw -SºF†×À ]CË,ªv¼¯ß[lðå}Ùv}[Õ¸–D[ûK,“ºÂÛñÊ®iƒ€á¨%Q7ýÖîü& ­Ý¶M3¶|6¼ÀÏ+ÉO‰Pz)¿CCJÙ”½Ý‚¼“$‰nIZ눠\wÕÖ¶vËë}ÿ£BqSÉk»²/<´mÛ´d²+™’&èdC_¢
+Î4·Û´•ãiË;Jž¹_/³@“n¿¯:f*÷ëN0ªë`C^g
+NÒ ÷`bRQ!Læ÷ÍéŸÓ\'Ê€búqâé¾6FÈ\N,®·Uk7}Ó>³H¢¨2º ¶äýÀÆL¤s&UÄ•„hÃJ&ôÅZJ#£ë‹"†¶@˜X(Ö\“Uà ‰~$Áôè
+° ,6Ÿ°Ë°Q7¡$ •ç'0¸‚AßH£Çé$€ÃØ®ˆçWرr’$ƒ¤/"ŸÁ¢ŸÐþJJ²™C#°jëfxØsf=Ú#')ØÀé6t¸Ø^§4ŸžsèeF¤*ÿMHbi¢¦[}îHgY*@ó?¡AÒ5'Ð…˜n¨ ˆiÎ*RO¨p[Qr(áê¹ ‚V X™¥zn>þ|ùþæ›»ëï>ÞMb‰(2=¿Žô0†8ÝMš‘©¿¶›huzCSn­»G¥B$ÒB©¥H– ùÃ凫۫`Í
+ËK6Æ)é]#MÂy+NÀæð Mй_¯` 9JSÌ*g.ÇÙ  D²¤ø­9­{á½eÞoå„·`:7ºcÙûZ²‡V§åŽK= ¹ƒ$5g¦erô­T6X`tí:p!l¨n‹BIå{o9vÞ”ŽÞ5ÇGd,jºŠT”Áš¯ß»WlÜ×Mb
+?ôí°qQÞk1MR?Þ½y´sMžµH]zîÍ×[»(žÑ¼­·£åh™GÝ3áyN@Í¡£0Up˜‚ÇxÛŠ"®œšÄ0„Š<”)žùNùèÎÀ.(íw¼eě̼SQS[ÎÁÔVŠp:¼qO ŽN|…ès[
+ÏN¾›ŽÿÂAxi²]žŠ€±ïaà~Ì¿çZ!±£ÖâÄÐORãSŒÉ£ŽÈd¦p«p¹fܽ] ºì¹øŒLÐä#lpo‡ÛÀZI‘}à—²ŒV —N'3Jã9W*
+&çËŒmv­—Í tu/l,²gß{Çš~7(IŠY|ã590k×äÀ!ÒJÀÞÆ$ÁË¥_=2=þ#{"ÏSîç¦oß´ø8ôþüËq¶/ç_†§·Óå—óÀÕÆ–ÚŠaÆÁÑBy°áZgE€ÿ9™ÁÍa
+ª4 >ù)f´JUœ¸_ç÷û›©²›“1àÂEâ¶pܺ=ÔBÿOr¯^¶8•ç°ƒC`ˬ‰m5RôÐZ‡ÄJ·±¶½m˾œ½;ÆGß|ò ²ä=-î8ÐY×Sºõ½ª)E0î~¡!¤U"Š´øoBLá•~Pÿühñ¿6¨ëãLÉu{f2þ×)‹1~_©Ô¯ý ‘‚è ±™òù.H–žž PʼüOJÿ$TZbendstream
+endobj
+1192 0 obj
+3150
+endobj
+1190 0 obj <<
+/Type /Page
+/Contents 1191 0 R
+/Resources 1189 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1177 0 R
+>> endobj
+1188 0 obj <<
+/D [1190 0 R /XYZ 72 786.278 null]
+>> endobj
+269 0 obj <<
+/D [1190 0 R /XYZ 72 678.527 null]
+>> endobj
+273 0 obj <<
+/D [1190 0 R /XYZ 72 349.17 null]
+>> endobj
+277 0 obj <<
+/D [1190 0 R /XYZ 72 285.814 null]
+>> endobj
+1189 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F26 391 0 R /F33 497 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1196 0 obj <<
+/Length 1197 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZKoÜȾûW r h¸ì›LNŠ×Êzƒ];ÝâÀ fz4ÌrH…ä¬,AþzêÑÍáK– 9: »»š]U]õÕƒ›þÄÆÊÍÒXÚl³;½þûyžþsL©ŠÆÑ „[­ÒX¥›­2q–$ÿýí«on¤Ýˆ$Γ|s{ ÒÛý_¢²î_o4Ñ®9=ìŽEû»×½ý·˧Dõùô¡t;×­QÝŠOoÞÿðáÓ‡woß¼eúß<Œ¨·BÄÚhÞchË?™,ì|óÝõOŸÞýxóž6|s#̈㭉-ˆ°•2Öš·çZwŤáTkP,K[y¥IbkmÐD÷z«‰ú£Ã RïÝçðÈ¿~ÍD®Þ5¯·2‹öe}S*úå5 Ý®oZ§Qs˜ìÑÄíiº²wL´ÃMÀ\±ë]¯‰"Gyý¯éG'"Îs;ÖoǺ]ù1¶m•PѱÁSq £SQãè‰G|_ø¬£¢u<Ùº¿ŸËÖíq$¢¾áÙ»sY…©£§œ‹ˆ§ÍDë´ÑíÑ/öDz¥—$‘«ÜÉ/6êy­ìø¥ÅŠ­á)6jJâÞ ”©fÖàDâ߶-‚p0Ä!2šãW¸ ¥âTæ^çS³^êÝj²j&¾âM‡¦&±ÏEÅÓ•«ïû#>{é`ý¾dÃñ,ß1¿+L¥"άù
+C0Ô –¤ÑÛ‚¯QK IÔT£ø:àAéècb´b¥TÔ=ðJîXß, ^hYv¼­©ßS5=O¡ßà \sÇO|%9ˆ˜©hÍà%(?ùjÝgÚÒ³±whë5™«’#…¾z{{ÁH@‘1RÈ4™}SŸÇY€3‘IÆãç¶zp{w` ëúö¼ëWìù47È9ôÒý|œ÷®ê‹Ï/“<­À±'œá1©ýE,Nië;8B§ @
+ÖlFËXš
+ˆóÝ®-ï.Ùd{ÿÁ=2Íá\ÓŽŽç½Bà‰¤ÌŽÃDA¼ã.éí+Yb;ÎÍ°¶úŒÔgOô2úXÙÓ‡cbZŠ9 ¹-rêžx®uP§Ô>%§ÒÉÈòµ`lÞ;n#*>hNày>£ô9®<4m UnáSPŸº²èd¨­óP[S vE. u¨í ŸÛÖqbÆ+“¼"æÊk:…ù¨®V32 uT0囦îß}ûL•„
+•0j«8ì)ˆ¥ÔŠX7kynœËà1(Waö
+ЛæB7ˆ‰ý(e©S)Öø¾0mӢŠ˜AxE[€p"øjIŽY$ð¡ 2Xì’PÇÛñù£ÒH>»ààòÙKŸyr„óˆšVÂ/šZONßrúŽ h}àƒÀgP·ZQÔŠÓå•ÖFsn;wÅ=,jø~¿ MLç݇
+MŒD5ÿú€ž `Ëu&}î˜tŒ0è¿ŸQªÞVú=_3ª°,0‘ÿݧVù2£È' ,¥œ5¦6&ÜàW…qƒD‡ êy×´Èvd$}€
+KµÒ±ÑËŽ À—CEU½ÔÒ–. È@eΙœXý¿¢?]û4¢gqèÊkÆϱÓøOÑ)ý?:tÒøÒ¾ôŸtìb$_†1kçf%•Œ%5žž9áßh€_Iendstream
+endobj
+1197 0 obj
+2764
+endobj
+1195 0 obj <<
+/Type /Page
+/Contents 1196 0 R
+/Resources 1194 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1177 0 R
+>> endobj
+1193 0 obj <<
+/D [1195 0 R /XYZ 72 786.278 null]
+>> endobj
+281 0 obj <<
+/D [1195 0 R /XYZ 72 313.424 null]
+>> endobj
+1194 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R /F26 391 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1201 0 obj <<
+/Length 1202 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZYoäÆÎó¾ä/è-T aØÙì—
+/7±‚›=/ÖÖWP°:(: ŠR`¹¼Ø䔥1MÞõMë8a:uœ:¢¨î¾èËþwèwýú®Y² ìÒ± vY—ñ€¬i2dþ7d-Éø³Â¦þ€ÿ?À´&ðä?÷YÉÅ®¦]E³í ǵÁÇ&ÏxU%Ü WQðkÞÔÀ%£™KØ“÷…&oû²ãEËuŸ.ã8ÈÊbÇÃ?ô×W5ÿžlÆ.·­R‚Ýen4:Ï«é^bÚʾî+XWé„éTB´ ‘~Ž€\q¥&PíÚ³2Aê4víÉI‰;ø˲“:M‚›Š«·Y‹â®mP£$j8]×’7Mݬ!*ñ¾]®“Á¼Ê€i§¼Bc7þV¼Jªze J'¤ëçhóŽ÷"ç÷ã*
+å\Ÿ²ã±©M‘‘ÑE¨ÏC#’ÐÂyL‡Ü’u
+°ã^]^–\ÊHiP[?ò˜Œ¥«î;&e4p¤nÕ=,!aok6HAQy¶½®«îæ˦)ÚAF
+0qÍ‘ˆ­à‚ÛMÆS)ç8íiVa{»ü‡HèªðûΖB“£[Zh¥‡©xM?˜…"ª5°ºp Ü’LÂg_øãç>o
+’$Þ·ÈI ûÅ«ÛÑÍÄ¡݈H…V«ó^鼧"©dFjÆóhà#œZ,c”Ö›ö¦ÞTYù6÷CGÜ4ô᣹â-1À—t~@½Õ6àœg:BeÓ‹&¿Ø¿
+Œ H-nV$+tnT¨ ¼IB!Ööé÷óÔU°¡B¤Š›å(ý)~þ)öø£è69Wy˜ AŸ‡?x´ßu i¯4úŒÑ— wrPÉsV_‰0ÑÞ5 E¤õ#^È“ãÔä-7REº……2ëH±šó+T4;¶ƒ•+‹-;4Òk ¼JQ6&z]¸ýcuö j‹¥›‚z¶èÚ»¦wFkêýI—¹Îãô óÝPhÚܵ—P<Â5 §áŒe<:†SU¥oÆâ:³þe‹.BÄÁ¡øx‡öM¯ÐN,V„ía’~†ÿ…¹é@•Pä˜VpArÿ_Kø¡¢HÁE„‰ï˜lÀxÌdÄ
+pæöÃVXèÑ{PˆX v´u¶giù—Ê:Û!l щ m,O]¢¶vœ,
+ÓÏ}Ñ ‰Æ/tÈØmüdIµ t†u tfG`œÿO¸}žÁ§ƒ¨82+KRNlÀý;êOüùà¸Ï¸ƒr£ÿužŽüå·ß¼}ÿòÏ×ïÞß¼yý-;ƒßCýŸòî%0EûK€âÿObC¥ø4®æ_’†&¶Ïñ%*ŒØÝþoø­ãIlÐ%ã'Ðk‰0ô$=ðÀøäY¢ºïË…W«
+|Cý¡ËŠŠ'×)€«ç ÿô> LWs˜>˜{†êÊÛé…Á'
+WŒÂU”¸½ª(žž$6¸õ[
+‹9ÊÚ¨"· ;
+OÛ’ŠDéDE–gœ»co&Ž]³ù#Û¿ïÝ1GÓløkéå¡XÔìÏ©ýÇp——]öËzžEÄñ$@9‰Ò•K³ñòÌä¥sòžÁÆÜSô¶2e:ñr@ßZ.‚éÌ4«¤ô˜È8uX;Éj)9
+å|Ç… #êf7\€ÔÌÊlpŸuá¼í!?Ôd9 ¹Ì³ŸÓ‡´"J“KõÁœßå«é³ÕàlS
+ȧb—/ÁK›¨#+‹îRE­í)
+‰Ñ·u6ýOÈ„}ñpƒWÞO%ĆÚÂõþ>ìß‘«ø=…³Õšñ„Âð{±xŠÁ—øè1e ‘AéTPʘ(£^Î;¤’ïªiº3ï2°h{<öZ‚„1€(ú©ôl‚ö1GFþ¢$ùØ©Žåð”BN²J0#F´€Uù¢[GÖ±àLMŒ¤àˆÞ}ùÜÖ¦í Ž”q`íV¨Zq¸‰_îí¿)s~챺“èÑ[^‘,NL¸3qãÇ‚£‡Y§W Æ]5$gúÎÚ¬]üHcf'tö£á¬ìÒ.A¤`åKi×y2ƒªÅx%CNŒ7²¡õ‡;\çü+%þ(ºjàŠUœkÐ};Ú¸¿öyóðLç($Z5IÊâ‚‹¤,Ór]bž 3£è1y(ƒÓKܲ~w)R€gúIž¼²¸ƒôq¶
+gŽ¦|á‰^¤ŠóR!y ½¼àÏI@-É
+ØÕtˆˆâÉköojä.I6²¸}Œ¿`Ÿ­ñôÓ“X´®ˆ‡Z¸7R{¦Që~‰OLäÓr*’Ù³˜Úí¿
+ÞÔ>8{£œódž*ð—qìææ,\¹}à ûT&XJpùdí ÌI8,ÁïIùH®ùì’¡¥endstream
+endobj
+1202 0 obj
+3571
+endobj
+1200 0 obj <<
+/Type /Page
+/Contents 1201 0 R
+/Resources 1199 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1177 0 R
+/Annots [ 1203 0 R ]
+>> endobj
+1203 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [306.514 294.732 320.454 305.641]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.8) >>
+>> endobj
+1198 0 obj <<
+/D [1200 0 R /XYZ 72 786.278 null]
+>> endobj
+1199 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1209 0 obj <<
+/Length 1210 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ­Z[oä¶~ϯ0òRð("Eê’>9Æn²m6l\´@·XÈ3ºi*jÖë"@þzÏMI#Çøa(òˆ<<×ïY]Dð§.R}‘fI¨Óìb½ÿJ]ðߧ‹~ôW˜cJcãÐ|z†pÕS®bf‰Eúïn¿úæµN.TæQ~q»%ÚÛÍ?ª,Œ/WJYÜ^æIе?­«/ã8è.Wq?õ¦*ë{|2A³åß›f€‘_vŽ)ovE[¬;×z|Ö¼È ó®åÑ«/«}ÙÔþò_·ùæµ²¾V:
+mn‰»k_npc•Û¶Ùó¨ÛõSpP?UÈhM<élàI¥ÁúR§AÏNÙ ¬·M»/:à‚'öÅ%¼ôÈ›ÜÑrJ±^;ï^Cåð"3­ÓÓq’‡yœ‹H;U•w WÓY˜Ä‰]-l“„V¥Ïlë0ÊúMÖq*ÓP ­ª>§ÅâØ5xÃuQU¿’L“€*×¹êŸmÐô­ó ãi<”ÝŽG­ó,Q‡Ò¦WùEE Étû«H>É;^ŸÈÝó\¹%Ž£ «%*/M‚‘2õ-'«(³«™j× ªøyÁßüú&¼\Ù4[S“Éûòó¥(4MÁ$y¶¬}WÔkw…f™ ^?z^w_Š}Y;9g'ooO£ áv«…[½…ÓA
+Æ)W´´ƒ°•®îÊÙZ¸Ò-Í%a”€›†±Ì¾fÕÅiö+ÿè;·÷ _“¤¤dg¤)TDœuÓñ î[¾UÓè»H]ðâÆ‘m”l `îtµsÒ ÍÜñëMéÀ|Ë¥@„v  ¤ Ä?2èÅã| nóÈ<= >
+Ï®Á#L`˱˜èNq¢Áwþs,[Ò<݉ÊDˉyª(m/‹t,Q|)AzWmyË5DÑ®=‚ƒmx‘M+³@‹ó@H<I؃彃PÀÃFö‡³–¤œ›PåZ„÷AŃdÝ-ˆÙDaÔÆ•+Ñ2²,1Žó‡¶Üƒ°?£g9tàLo…4G ÀŸ±ßåAU~"Z4Û( OâòømÝÌRÜù>äG<xã›!ÂÔ
+³‘A®»{ÐÎ…ôxsº“œ¥ÔUj3ºÑo|W‚šQ±ýüõ×¼ÛCYU"HÀY¤'ä‡g çü[xù埻ª¨?á0›Ypƒl·ŽéP$8U7L<3nõ¤/%
+|}H,MòîÝ) “TM¤qýú- Ðò]9“¢á×!š`ÓDµ¸w„ØÀ媪Acy`
+ƒEÁøÐ’É~È)L! —‚‘asìø•2xkˆÉÙ öaÀéóü%öažL 0Æ}¾©1a¤zSº^Ø \1 3e¦8á‚ó«Ðd½ýþ{ËÓ!FÜW‡9¤å}m*û{rž5)ÍfÁ±+«ò¿ŽÙ¹’¬èÁNõ`%ôà
+/}
+ÉlmŸëLÀn`ê£T4‹âìï*œŸA(²Ï7>0Ñ™çÝ“!Ç„VgBT1
+l>a‚20 ĉ‰-üI¨jr+¡`'ô3}ãW¤ë+4$!s£—Ú’0 &T9®U\I®©*¢Žÿ
+¬"Ðõ¢ú$³²<ú)Šˆð{þÍT/í;ë†åêUŸU`кîØ2R}Ž‘ã[Ù¸¨|sÞWäP•Ò"aK ŠŽÔÇí¥Š*“Y 0£ÖÖðQÛÈGí›?d¾„Ý\ÑýÞ7g~ùºBåÝïúj£ÿòO(1“¥ %Fz^b¤Üy‡ß‡rÃß[¡‘ϲÔâÀž'„È{{¡Ü“šzÒ¶ôŽJ$xÛøn Þìû/f'Kú€Ë½ùõgí¯¡í`¨¬¤¨àE2 ›ž¨ÙzÇmµ®øtyj@¬Y±Cîˆm:þbiG-VÌjd1 jnÀÂÌiU°95`Ï-!W Њ½†Ñå¦è
+j堵¬̥‚=¡OÉÝ8QT£ˆ ‹€ã8çeX:ÁIŒaiºÿò„OÜ"º‚¦¦xj‹ ßlÝÊn9ÁT)ºòLj¬™y/}úÂcâŠæÓœ
++X9Ë·Úœ•FðʬÚÔZþ-×@ÑÞý»ß¥u[¨¡ê5ºE
+Áøq{pBo*ϳRb§ pŠ?Ą̃¦ÂGYøËá1å1ñÊ2
+endobj
+1210 0 obj
+3319
+endobj
+1208 0 obj <<
+/Type /Page
+/Contents 1209 0 R
+/Resources 1207 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1211 0 R
+>> endobj
+1206 0 obj <<
+/D [1208 0 R /XYZ 72 786.278 null]
+>> endobj
+285 0 obj <<
+/D [1208 0 R /XYZ 72 761.372 null]
+>> endobj
+1204 0 obj <<
+/D [1208 0 R /XYZ 72 463.518 null]
+>> endobj
+1205 0 obj <<
+/D [1208 0 R /XYZ 72 371.135 null]
+>> endobj
+289 0 obj <<
+/D [1208 0 R /XYZ 72 195.501 null]
+>> endobj
+1207 0 obj <<
+/Font << /F26 391 0 R /F15 393 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1215 0 obj <<
+/Length 1216 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝÛnÜÆõ=Ú_ú.à¥93¼MÞTCjÜFv`«E‹¦(îH"Ì%·$׶òõ=·áeE[yLÁæ\ÎÌœ9÷sfÕYê,ÓgYž†:ËÏÊý7êŒÿ>œùÖßaŒ!ãÄ„IŒ½g
+mdÏ®ïæz÷ŸàO›ÿ^ÿ훋ëqYÆIò<6Ï6WÉÊæ×n³5&šbO-´wøÍ‚ÁO•íþ°Ùê<hûj rý‡¢+ÊÁu öPôÜZþÞ¢,M\S°¶ÁÎíx™.‹c0qTÏ”í±Þ Zí°€æÓ‹²t}eà"[…d·t¡Ðî>U½ 7Û,6Áå&ƒc‡£û¶s/6À¤ ¶…¯ÑAÕl
+¢'×7 PMðiSž:hq»øŸëºjçHøcVø#²ÌÉÍ ày×µû“½Î/¯¸°5ñDö
+ó4ù œ”u§ ÇÄclWÚ[©$ øÄ$^8 à$ÊØ–ƒ$<•3¥t˜#T]Ý®ˆ”‰C£= +ÄßèW{”±®sµû¸IÒ …`æF šª… å€!N$v©úr†÷ H‚­Š³P%fÍ+ ñ’ÉÍA/E_ÃÄEqÛLÆ('£Pu 5™´
+!Á@…±UÏR…™‰¨¯öxÓc=k}ýȈP<€gñ5øÎ&JB­“Å)^È2‘¬,}J9˜«I& @È·àY¯ê((`>¿'I^Ô‰G¦äyPøu‡C]•…øÂ,ñSî³Èn7ÈÙ?nH”‡÷eWŠÍÉšufã
+âÚ6$NQê)
+4;RÏuù©wrÛ}aM`ô°lÈÑšž¿Ì Xä5«¯n1D -ñΆOâÀY­ É-8×QÃäh/ý¡(å$æ|{l¼:zBêóÊÝ$&‡S
+þø]¹ÇŽvœ$!mÃÞ\¡K×T±\ê¶àì a+öãf"”Ò~Û[6#ÚJMhg€6#&gU#PÚ&øÙul‡\Oô´ì{V­%ã—虞$´}¹NGÃ$1¾Äô-Ìî¼LHRSÊ:Öc
+g$pZÏ2ä(ÃعœØl¦OŒæÂù¢’Ž{ŸØ_b,‚›{{‰C‹àñ
+}2úº‘¹nG~W¶<7o‘-Ÿ¤ËŸcS¡}&þC8á•f¼iƒžfˆaÆäÒÁè<åϘÜ×í-¦ûØæ»wUŠ¿Yæqî3IuH
+{ŒIg·5à+[6Ð'Ï HøFœ+?jd‚d† î¨Îc´wª0,öüL²
+ Ÿ ÞxwÊÝÎÉQ³ìY“ióYÁÉE ¸ù\égÂq į·õò"²GY˜«ç¤züŒØCÄ‘fÄk$ p€èJRÁ’¡'ŸÎ@LœY_ÆQ¼? P$F\¶½e˜ME
+&ö\¶]éq4/¬EÄ“Fv(×
+l°ºk Úƒ£ÅæÌm­0b-D‰ü%
+¤äy†?³ ÿ*‰ 6аbš1z»b(n‹^æŠ7„ÞÙÁâÛcUcÙ0…è䵬$99ª¥?½%‘è"5þˆxtûªï91…­äît
+endobj
+1216 0 obj
+3340
+endobj
+1214 0 obj <<
+/Type /Page
+/Contents 1215 0 R
+/Resources 1213 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1211 0 R
+>> endobj
+1212 0 obj <<
+/D [1214 0 R /XYZ 72 786.278 null]
+>> endobj
+293 0 obj <<
+/D [1214 0 R /XYZ 72 552.504 null]
+>> endobj
+297 0 obj <<
+/D [1214 0 R /XYZ 72 353.656 null]
+>> endobj
+1213 0 obj <<
+/Font << /F33 497 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F26 391 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1220 0 obj <<
+/Length 1221 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZYoÜÈ~ß—ü!Oàá’ÝÍkÐîÊ»ÞulÞ²@‘=BrÂÃZ'>u5‡ÔPrò(°ú¨¾«¾úª8áE
+†S½eñºmîüËѱwÕ´ÃÞÊ~:›÷­¬
+¶š× ‚M~°\ÚµuÝâÎzlHa,µ?!þ
+Sߤé´Î8Tu¿¶ŒöÁ^Dì˜x¢ûËÔêΑBб
+n3 ¼cgáòFB Ñ-6ÍP1¨Á)–O0”…ç¸åØ‘ª*x‚cÞ¡•VdˆP¬in[3›”Wk~@m¼2?€”¾Ø^<;Øô`*õSPZœ"òÃÌW—0{z.µòòaª ½Ÿlð‹
+ˆuã]#‚­+(‹
+ü(ã?ò0[GédGÕPMN'ÊÖá;òN$ÀxmÇCJnaÛŒRÆÑžËÞÔJsGÕü(V—ËÌî~u”ÀýÒ ¡T€m ÝXÈq <ã¹þw
+<ç>ïr ² rÒrM¥Ú'6åü¥Ý­±œÀœÔ+!RJûJg‹KÉëaߎ
+ ü·”Hƒ/;&<ÊØåJl¤ü´ØÞï…DQm<J|óý(ýÕŽLµ:…=üL¼óÇ´o•ïFêÐœÏYï©FTHøqSS€ýxÛÕ0Œ³Î5âÙ¦­º`-ÈÖ®U8rF€YC1-‚Z“ôw~®JËLåiMb? Õ‹AÑíß?\‡7Wß¿ÿ¸]EQå‘š¡¨uâ¨Ø£ùMâ›À)q~ QŽ£ åy‹ßìÆF¨šâêÉfѬ…uBÔ òR´cp±¦€6!_Zõ¯iº-tôSH‚êd`>bI1e 08$X„ŽÍ Y.të¼ LN^ßÛW¬Ѐñe!>`‹˜ë ’F Æ褮ú&ƒ•‡‚°>šñ„}=m‡‡0O¾–ˆjdiŒ™Bilv%û€ø`m‡¤ ÖbZ±šß!¶×v:¾‰€7¼Ù¹Ù*‘u°Å±ìy$Ç °LÎu{7¨V"6
+^Å&pÎÏâÖ
++::¯ÝýȪÇ52K˜¬¹n{rÃPCÆ‹{’)ïºw™§Š®‡ØÎa|Ãj‰ ÃÁ»#×Ñ<ŽM]ÝãyìtËq˜yïwÜ ‘eד¨vú›(O’…Nÿy.¯X= ð‡½';ÝVØ‚²eꪎ
+™7s}½
+-òp,].U~àCC¦SÄáÞž'.TÞ 6 Xn›±óþ•~}&; A³ñõÙ´‰Ÿ&éÓÞêéùÐY¬ìà…Áµéóˆ]¯9"ãÇA4¥Öj òçSÂD±v‰µÍ“!=ø_™PûHA3UC¸dLâøùD¥É€vl;.Z';é&ƒ(ËÍ_5©³‰uìû`9¸à¶v·FµuèÇ&>?õâ8‹S£Q¦”X©:žy%!!iRŒ_¥j¡Éýwƒ(ßCE‘-¨cp ª] ¦PÈ k¸ ºÑý±~ºÜ9O $ìïƒö}qš~7r¶ Ë­ŒÚþœ–M“)J^N2âÍ»¿]½}óãÍë÷ï¶o~\ÍÊ!“žS³0nA„K)‰Ø¬@4Îò
+Pƒéáoä¸@´@2¨.ã#bV‘Îäc|àÒXŒZäͤ)n‡sMA;ÐÊ}À’c€ÈJM)”†RÎBáQ¬†@€ýSÔöŠë•ŒÊé”_¸Rää”>MÖŠNI=Rìh{Ž%`*ðèßϼèB?!ª–– `p*Îa\¸s¤ÈîÄ >P„6åØyÞžìP´øî±ÚÁ–LæÇ
+mW®Ç(E9;Ì.<â˜K][  b•¤ú¥¼¥Nõ¸u–^"„/Œ­ÆÀßœÿÈÉÇp6;fO„ÃÝ°;ʾUÂfúzC…ÿÜžº¼¹³OôÍpÛù·…}¿ù‘9:GÈO^©ÈGÂ1ç¯ Ñ:X@tìå’ÆZq?
+E DSf‹¥³ÅÌó‹¥Àv²D¦úóÚZÊ•ûŠ3é¥ÜÈ(K¬rŠøUæŽÑ´7pmÃêGÊHY2±Š'UüåÀÑ“Û.ï$‡î¶€Œç‚oäÞ¥©†êä
+0Bu„<‘¦]b?×ã¥ÎŒ¦XôJéíù­¡âoXŠTé¥ñ›W¯þr½½^Íákã« ™S÷Õ#/þÕ
+
+ŒŸ ík—Ò 0舔÷‹,»4_ìõôãùLÌáÜÍ«µtrùq<iÖÍmSäÃOõ—ã¾&íˆyMüy†dÚ™äÑ™ šÀ6ô571L¿1h%
+endobj
+1221 0 obj
+3199
+endobj
+1219 0 obj <<
+/Type /Page
+/Contents 1220 0 R
+/Resources 1218 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1211 0 R
+/Annots [ 1222 0 R ]
+>> endobj
+1222 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [355.575 346.298 383.453 357.207]
+/Subtype /Link
+/A << /S /GoTo /D (subsubsection.5.14.3) >>
+>> endobj
+1217 0 obj <<
+/D [1219 0 R /XYZ 72 786.278 null]
+>> endobj
+301 0 obj <<
+/D [1219 0 R /XYZ 72 629.216 null]
+>> endobj
+305 0 obj <<
+/D [1219 0 R /XYZ 72 331.033 null]
+>> endobj
+1218 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F33 497 0 R /F26 391 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1226 0 obj <<
+/Length 1227 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝZ[sÛ¸~ÏKÿ‚ßJwVXâF}s»ë6±3±Òv¦íxh‰²8‘H•¤6ëýñ=€H™¶“ÇìxÆ@\¿ó ÄORøã'¹8ÉMÆDnNÛ7ü„þ>Ÿ„ÒßAF-•–L+|{¥á,´œIÍL¦_kÏ3&3IýþeþæÇK)OxÊljOæ+×f¾üwò‡ÓÿÎÿöæb?ÓLiýúl°™t.ò‰ÎçüâãÇ»›w×7ó»ß_ÍçoqÄ/¹|À…eÊXÿÙRrÿùŸOgJæÉY}:“"MšÝéLäIÙ}ÕxY¿.z(q›|9&):ó¤n¼´Øl¬€ZørIƒK;ÜÂ~ráw½©,ô‹¥j[NÌY[¦¥ñ_­iÜ4¹§–5~Ge30ÚŒãÙY׶-ÿ·/»¾\2\Læë
+?NSXX۴еɢÙo–X4оÛoú°I–¬Bƒò—b»Û”^\­HZÔþ¹Ûmª…ß&ì¤o«²£º¾¡Ñº²§BAòºüBï÷U¿-vnéhæ»b¹¬êh%yòó©Ö°»û_eR¬ú²¥ma677a›z¾©î'öR
+P1ÚKè÷Ò¸½t¯U]õU±©~Å;B-lºëa¦,˸úntãìÝ»›ó»÷ï'6ÅX–æÙP'dÐ P#ì
+›<N
+ýfW*BgA—ܾ‡ h¿;VìÃ÷_uù™†Hë),#ƒe2Y’^Ì´g1àæE±ï¦`iÀ@øç9`‚/™îÛ¹Îpš™G_6Ps’;Mµ“n°4æÛ0’ˆKòhÝþ DO&ñÜb1„a)7£Ý{Á—JÄ#Àfû¾Ùȱ¼
+Ã’¥mI¸j›-}4Ñ¢oà¸Ë@VŠ ‚9Rè¶ζÑ4 =­Çà¸õ#5F Azk£ùŽ–¶öl°hºžÈÙ’$Ûݾ¸šˆP46Ï;Œ< :þ^ÆO×·.ί.¯¦£l0 &ÕCwQÇ([hñläGp=Œ*°ôkMgȸÝEÛS3ü\ǘ\»xŸÁ{‡"ÙãÅb߶©ÂÄF±Aí­@À’:„
+¹…e»*¾î (£K5Ỷr+‡bÌ2ÀÔ±ó;þ¹*¾&:¿-{èåCÑÛîÚÜãêwÒó›÷nn¯æwç?MG/†e#Àš
+(’Õψ%Û@Sçj¿qÑ‚3>*•páË®mÀl1KÕñ«T»°Ÿˆ°}ѹØš8KˆA|: báx=øÝÑz°Yôc°WôÔ@¬š½s…rIzŸÓ(OAœAH™S}ãÜö-¨d7E®9K#ƒs‡Ê„¼a4Æ:‹Üë$<ï‹%~d©òÌ¥_\Ó£˜‡ÔV¸ÈÏ%éð-ÆnÐæ`ÔeÊt––NvÔòAòBP´‡É墧 uI•”2q÷òâO˜´ôѾî€9:àƒ>f­[8زõ©î¯[üw˜O41Ÿˆ’Þ“(, ¶³érNˆƒ†/<p{~±éõùÍÛ«ë¿NÒ€`bìÚA<q Îu}B$0ÎÈ¡(⃈˜ýð¶ªSH˜=‰7v/³i4«€U¾ôˆÎ¼M>û`Rç,Wãœs±~ —ýÛ[lü«·³ã´b&¼Ÿ©ÜEÛ’D¸®¶sn§ôw#™¿(£ì{»ì¦V—eÌfâ[²æaBÖMè7—Íxœ“÷}!Üký4|-¬fÚšg³Dà'ï6d>¡Xþšã’
+endobj
+1227 0 obj
+3265
+endobj
+1225 0 obj <<
+/Type /Page
+/Contents 1226 0 R
+/Resources 1224 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1211 0 R
+>> endobj
+1223 0 obj <<
+/D [1225 0 R /XYZ 72 786.278 null]
+>> endobj
+309 0 obj <<
+/D [1225 0 R /XYZ 72 143.718 null]
+>> endobj
+1224 0 obj <<
+/Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F39 496 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1231 0 obj <<
+/Length 1232 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíYYoÛH~ÏËþ½ µˆzد}sÛñŽcŽØÁî" Ä–D„" q<¿~«ºº)ê°,°ÁŽ10`öQ}Tu_•øć?>‰Ä$ŠC&¢x²Ü¾âúû2q­_`Œ(U Y °÷ áL1K’Š)=Nÿøœ3 :ëÍüÕÏ"špŸ%~2™¯ Í<û§——ÝtˆÀ›óÏo7zùå¼Ìò´ü—ø4þµÊ3èñé¿çu>5 X;Í"øËœÂdO=Y½š)Éâ`’°€Ë‰ŒòÄ4¬—‘²<dqÑüN>S¡œÌ8 ƒx`BÊL\àå~¾àÁhä'”Gn[€”X7Ð |JÅ$Ùåá‰{Î$“О…Œsu‚OÇìIxH<øØ»«ãc¾ÉÛéL&Â[õå²Ë«{¾·M§"ò°Ã½Åtéõ­ÎhEWÑôIá!ñ󅆺&mÞV·öju0¿I›ì~*/m4ÉjOg¤ˆà-œP;^ä‹‚—‚%Üi—=©éË2/×ÄMU²é,ä °kN™Ìdè³ TðÖ MYÙè®o})¼¯Ó ôÒ¢Ç[J‰›ß- ‡îý×J˜ ÝÕWUC[]ç]WØmIñ±Í½´ÌNœÁý€©Øm¿÷7ùúø„mJ•Ãs0§sƒîÃ9  ãIü¿3~´íÁúßõÛú²x¨7;Û¿¼þíã{jþum§ŽA¸?áÐ2¢'AÌ¢ð{ü€d¾R/ÄÄßåx8ö<ð¶ùz3±×Ñ$z‚Øx¡'XõÑ‘êE¦ýzM–ã¨Öf¼Óm‡£Ç:.BxÏ yÆƉ˜!"°f%ïÊÞ*=²·7Êß³Oo¯Ì]¯¨ßèºÑ­.ѺtFN@$R’€œ€Jè|úˆ¸ñU"ä«°aô‘æj㫼4²A‡h(+ú.С=œ2gÏ(cËíwÂAüñŸWÜ¢í@¦à5í%û®î;”‡Þ™= =ö¾¬›ª/-]Ó5ñ¡‘lO$:#‘ð(f
+Œj,’îv’
+}ç˜ï7¹ñ{(}@g´»£ ¤»£ yñ`ülV̸îÑû_±FèÀœ¸9A‰p·³U§jRT‚ãÍyýÿ[·&~Á"ïZ·&í¨µ¬¸kmè+âIáó‘ªI•’ûª†Ç)ß÷–=¬,Qi:¨Ó,³Á+ÂX˜Xô&I‘ÞÖIÈ8¾è·v
+Åg¾e«F?%½OÚhÃobÕÛ±ámo²nªu“n·ÖlAlãÛëo鶦HïU”
+Ä×@A@ Ñùà(Î}™¸Ö/O8$ÁÔá–px"“Ç¡ì㛡}(å]•;rvÐZ¦­áÀ½= íd?Æ–~“¶Ä°…Dº¤.¸gzç
+#6‘À6>Ѿ§ò8ð_)Æ8ß–#°‡˜h£‹šniÞÁ|wÖGDôØ°tU•žv*;x]Z
+¹£å¬o{ð0öB­»
+cÂ곕sJtž‰1¯.onïÎ?_ÜÞ½=s{ýî(Œ‹ÈÈv&ó!mþC1uöáêú·³kè~8¿™?ÍšøC±öþêf~usù"Xzwþæ×ËÏ&Ey ÊGìÜ_^ÝÞ¼ ÷ùx6ÿ‚Þçâö…8býÁ©h>pÄ™ÜÂò“è@2‘¹ÆNP#ˆo+XRµ¯
+6
+°ö€ð±+ ÀÇ\´Õ…†<
+Å>b€œ%!?´ëG ³8I1@ÌàŽ¦ŸõK“-쥡"ޕر½j
+€M]|û£ص˜4Km2»ÀûP5Ú8:›Ö¡¹ƒ'ØåG>: žÈ$¾¤€­ªov|}ejÕ-5Ç
+é«ý]ëLßWV Ê±¥†ú÷ë."ÓVUœì@_+›¶YWÆwæ˾H›™Ò${4`r3?VÏÅ4J.±þôtá(–‡ ÌðÄQó? É|endstream
+endobj
+1232 0 obj
+2587
+endobj
+1230 0 obj <<
+/Type /Page
+/Contents 1231 0 R
+/Resources 1229 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1211 0 R
+/Annots [ 1233 0 R ]
+>> endobj
+1233 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [127.454 588.389 141.393 598.086]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.2.4) >>
+>> endobj
+1228 0 obj <<
+/D [1230 0 R /XYZ 72 786.278 null]
+>> endobj
+1229 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1237 0 obj <<
+/Length 1238 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝYI¯ä¶¾Û@òrR¯e‰Ôz2ƈy1ðs2@&>‰ÝÍŒ–¶–éÿúÔFµz™y×8èCSÅ"Y*V}µ(~ˆà?äê!/²PåÅCÕ~?ðïÃý4æLR¦ >½Â¸õœ[†E–"ÿÏß|÷V¥qê${xÞïsý¯ ÛlãX%ÁóÁn¶:Ï‚wq¼}ê6Z“v¦²›?ÿõ»·1,ŽÂ2*yñVÁN©¢-ÞŒ¸² úÿÿ#Äÿ"ˆB½}ÙlUØÉð.*_íRäa)‘cŠ÷rç(­Â<+…ÉuU?aË<è3Y9xì[¾ˆ‚ñÈçUÎ4<·›»jr}7²LÓÁL<ªLÇ­ù°Á5¼Cãv–¬˜ºë&‚vPȇm¬"¸5PrŒÊ.I¼ãÐïÓ¶vAi¤ƒ¿ŽV¦q0õø¯A a:X!Ön¬æqù`ÖMü?ú¹©q¬‚zaË]?Y¡Ë»
+ÀYÀ0BMà Äa‰ŠeO)C³§da,îöÏzª$OÃ?ƒñêøl¼É­/~ÿgŒÂ´ä‹|Ó PûÚLNæØŽã&Øï
+#4\uá'ø4d
+ó4“÷¶Û…ˆo¦
+NXÛ+)Vj‰ã µÄ˜)XEÇc(ñ¿á]ÎÙÓû(N*!ºßäŒwÌ?ظzWÑ[3
+:ôoRG!B½YÐv¥¸.Ø 缧T‹ƒ >r(¿}©•é$q.9&ŽêÁ h'|* "‘Êq)ö“ìP‚éž;@•£ÓtI Ñ,9Ľ$2”É;# PPH¿««B!8„ĨβÍy_'Ïñ
+¤½4uˆZœåiVÜdy÷½›~ÏqŠ‚Åàö®c&ZsNöÓÄáa’ìIÐ[|¥ç'SUýÌ”/Cw Gÿ~ ;¿€îËŒ ëž™8@ ¶¤R˜•­êŠº04ÂY,eÂ9‡Æÿ ÝuýÇðSÂO™¥w&Ã| ÞÒ¯6÷y"õ¬Æo¶t†«„\AŽ))(Vz™ž„YAX¾J` ÞiØ>y†\KŒáÃèÿÂèÄ÷Q™RŽú3*ôý,8ئâ{¾ÜóaT
+&¨9D„f0‘ië´%)/QbU¿Fëj#KÛãfÌX3q7ô-Z˜ÆÒ
+öq¥­i毥:™cð„ÿ}yÂ+OKoy™Äå´¼´<QS!jÊ"ÔR¼®‘I|KR¬ñ5Õ0±¿ÙØ˱¢uœ>’ߥå"À2'i»RÁó½~âXÕ­Ûá?3þ¿Û^8’@v 1*=ôŽ—†Éì}ÈX»oí9Tâ É9~¿Ùæqü¼¤ÇÈ eâù‚¤bDE»¾x0Ž4ŽðìÛ÷p–,Í~ i:3ÍG&9:Jj”[jôNò!È=Õ›¾'ôÍÿ›|[lgP¿n¯•gH’„ì`ÝÀ3ç¼›l=ÁtE •Õ#§&.´á#g2KJç·j £–ë„pâöæ‰ öKîGãιðsG– 'ÿÈÈE UÜAÆÂgÌ<f?#¹pÝ<®ÏuÂ…ÄÁt#äÉT¯¹Öâ²@àÇ"‡$¾{AêöEC fÀ0Yž„A@Ö \yÍÕËQ
+Ÿ«Ã–+Õ €-2Ïp ×îÕÜLŽ:À Éðø¡|W`¿®¸ÛȳŸ<ò:l›ŠD—°_¿X\\$åXÞvÅëZ·15§ÃRùîmOq 6äF8 VQVƒ›î­yð°6>wáÉ5"¼¿™ uÅ{¢Uü]0c$ϸElñýÉÌ| Ì|3SWåÃ#Í9Ù¬ÙŽnß±Q«ó‰0!WšI—gï´ t¡ "ˆ}ϵÜÀè?qkîxÜ@¬„Û¸EŠ­_|™ðºuo Xi û0¦¤è‚Ù—yºn#˜QHW}ñØ|m–¾É NþÈc*³náPåE¸àæW¾˜a d&ú^ §Ga²ú^ËMæã½ZØH„„TÉ·--߶”|ÛzâMî·¥ö¤–ö-Ô{Ÿ¶^ý²õÌ _’ÈgðßΞx0¡ïÜûtÇy˜ªWÕw{µpó¯(I²àCw¢Œ8H p™LiÉI>B½ótNmds˜J á?ý S
+endobj
+1238 0 obj
+2957
+endobj
+1236 0 obj <<
+/Type /Page
+/Contents 1237 0 R
+/Resources 1235 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1211 0 R
+>> endobj
+1234 0 obj <<
+/D [1236 0 R /XYZ 72 786.278 null]
+>> endobj
+313 0 obj <<
+/D [1236 0 R /XYZ 72 761.372 null]
+>> endobj
+317 0 obj <<
+/D [1236 0 R /XYZ 72 670.148 null]
+>> endobj
+321 0 obj <<
+/D [1236 0 R /XYZ 72 157.947 null]
+>> endobj
+1235 0 obj <<
+/Font << /F25 380 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F33 497 0 R /F39 496 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1242 0 obj <<
+/Length 1243 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíZmÛ¸þ¾ýþ¨=¬yâ›^
+ôC.i®{w‚dQ¤èV–má´¢+Ê»Ùûõá²dkÍ¡—^_ ¦Fä3ópž%|þHÅ"Í&ÒlQÞ]ðýùiF߃Œf*-™Vøô‰‰K¥3–ç S2}zþÓ:4SZÓVßÜ\|ýZ¤ ³<Î7k7åfõ·¨nûË¥:ºáÞUý{Îß]qgŒuL/^Õv×ôðÕŠž®èñ/µÝuï®.ÿ~óÝ‚‹üvp48w[í[[oÚjEÓ‡WÕ®ßz}/Mcº»bGO¥‚³pÔzñÇ›‹x±‚%:󾋘É<[tÕb}±”ãB.–`:üø§¹  C‚#èOX–¥4c€T,•àx©s98QÊ'¾ÆÓ}ýšëÑ;ŸPþ=:3q¤‚s¦¹>Ì …ý%ÄLIy2sÐ¥dÆË„qXjj0$Ø!`Ï΃Áwƾ̩íåRrõÛŠ/‘F¦n/EõU‡Rõæhší»}ÙﻊޛµŸÞÓö—"V»]S—E_›r8BiÚ¶*{•[`ØåRÉ,ºîI晶¬0—Þ’10-ž?‹ª²þ1æÊé’2ÚVî RE·Î¼ª,öÖIð`N1Ì*Ðä{üËÔ+/£cà­H™·$]E¾ª
+8sóèw"%u»ñë ýε~ šÃ¾Ç.g´IX.¹ƒðÁTº£3–)‹'ÊG§v¯ÍÑ´Q€…’ÎèÑ{vwBŒ$ʶu‰Z·3À<
+#¸“:1§­ª@ŠC%€ S½Xfx÷5²ŠñåO‹0úž˜n¢<0f\+å9$õtmö´6´Ä^)(“üðŽ<þ¤„{M!ì' ã¹¢õôHcà“a½tA ¤ÜûIÌR óq²F 9'–dó„WÜ:©­z&©„:m®n€\³qÝ
+å¶/ 
+Wpé …ò%ä"ÿÛQ8S·,WÑÒSÄ¡š
+eåÔ¸v1Çz©hÌ Ë|‡z ¶-º=ñ“M9%Ë~Nº´(áUSæ\áÃǃ5
+§B³<Ï> §_Q:9ÖW~¹q߸;Hf½ž9ïº)6¿ìUÆ2•žƒ½ä,áü ìA…Ù3`-Uš‰ÿÃþóaÿ˜è_ úÀ°ý ò½ôóÒô Ï‚õ¡^ ÿº7}n¶ýÜÚφ´LòO@šKuÒ±x&¢eüÜý›í¾ý~É‚ã$òßHÁ!ÿg
+ŽçôðZKÒOýO !8“¸ßùf?ÓÇå·Ào»B?ý½ÿŸÒ
+KÓendstream
+endobj
+1243 0 obj
+2342
+endobj
+1241 0 obj <<
+/Type /Page
+/Contents 1242 0 R
+/Resources 1240 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1245 0 R
+/Annots [ 1244 0 R ]
+>> endobj
+1244 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [498.875 613.108 518.269 624.017]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.13) >>
+>> endobj
+1239 0 obj <<
+/D [1241 0 R /XYZ 72 786.278 null]
+>> endobj
+325 0 obj <<
+/D [1241 0 R /XYZ 72 422.697 null]
+>> endobj
+1240 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1252 0 obj <<
+/Length 1253 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZY“ÛÆ~—ÿ+OÜÔÂ\8ô&Å‘";.»¤M•\qÊ…%gIdA€@ín’Ÿ>fpØ]:‘S•â3==3=Ý_€X„ð‹X.â$
+dœ,ÖûbÁ¿Û…o} }L©
+ŒÆ§gWÚ$AšFÐÐVñãôó"‰äµÞ\½xùVÆ i˜.®nˆæjó×å»?ÿøß.VFšåï¯Äϯ_´íǶÎËí§ŸBòÈ×uv—]–Ÿ6—üÿîü¿]»Ž¼l¹±¯6ö´ïþ´ãáòâoWß,„Šmäb%P6)mª£y[•íû¯ÝÌõ.«ÝNÚá)Ç–Ì3q+ªrËÍ![Ûêæff¿7E¶M64÷¦¨2GÔäÿð‡A]}÷úêÃûOn?m•ÍMUïAf¹¼øãÕ‹• bùJ'A¢cwùp!J“Em7/VZ‰Y¬”"!* „TsÀBCˆ(H’˜ z… )ø—A ·îï\©™;‹;|ùV˜Á¨›Ôn/Þä„(•y]wX¥zŠgÑÌFW*PÐ^E€ùÓ“úƒÈ4 œG™ ýÿŸêý»n¿´Öÿ¼±M;Q}×Kú/ Xzr†þOtqªê’»|Óî¦3w6ßîÚMÿÕ:­žSi¡ôÓ*Jq¦J«Ðüÿª´ë±’@!’ús¼/›Öf› _´¬nðß,íý¡Èò2GSB/íç /mýÐ¼dÚm³¼¸Ä‡tyw!“¥Åv úPŽ$oÖǦáîª,¸»ÝUå…óÖîn¶;ÔleµÝä_ÙÚ–È»%=ZTR5±®ö@®ƒåFÓfå&«ñpÊ,ë NŠ(\€·Spƒ‰ZV5“º-æUÉÏ$‰!¯CVg{ ¾Ñ‘Ë4 ¢(õªA64£x¿ _Lu9Ã'
+b7Š®g æ=ÃE› [}’KèÇÙoý‡{鸀Ÿ›a!b‡{±
+ؾ$ÂŽHGwµ³sb€Í›ÈÍÞx6s))à˜§ëŒ l+V +ÄuþS(´E ˆµ3=þ$7€ý…t Ã~{s†ŠŸîvùŸwø({&­½oã ^ó²æÉò®x0‘\¾wP“¤
+(ªzîÇÑR+ŠüzŒ%$sKŽ Y€" hœbѾ»bõñËOÎSi:åKÚdâ7é¬4EhÔÍÏýù¤‘GzLP 3À)£’ANÕ¡Ým|Ÿ—t v–ìƒc¢t0-wÓ¹#Ð:#–Ù/ǹ N7ª£œãÇiÚ!3ñ*æIO¶lçp¶ Ew:Ò³Gî
+²:VP‰ïKËÝkFMœ›ï³m^Úñ‚À²á¿3^¦¶»¹8&Ã%­ðŸñßD„¨¹M‘“2#éÎÃm&
+*1><÷Wä‡}ÖÜ·S¡ÎÁ¨±«ÄŽÞ2hxd`Gîü–¿`Žò(+“èʱ;ã‹PjÈÁ‘L5:;½93ˆºŸÁþ4HãgÃý¤Kîža±±xÄ’µƒV€|Ž]šœƒ)•$ ,RÔª´…»k¸„BŠ’†ýäªÎ·$‡Ä6Ðñ R±¨’ÔG·Ðê•
+ÒÚéôäeσ¼•I‚_ÕÇÛ1ÅÛs† OJ~>߈ 5p*Þž5Dǽd·ìùXBÅ'Å@“=´\dØ #ÒŠY¹ÒL»¦Š4F"§£‡ÚK Zû|»óŠzKƒFvÀ‰
+×vRÓs9É7Óº{•6i1Ä&ôPqè¨gLèŠFü8<+<’üªúÖqàÎ"oÛÂ1V®pÁ(Å}AŠ ­ÚvÇiç<}‡Ò#äÇIÊÈ…Lý‹öI
+øƒÔ¼ÆOBé-ëéCaÙ;¿sËù¤#ŽzÏ…9رó2d‚ñÀ‘Àm˜‡™3Ðδh.
+ۺȕ¡Ã]©«ñªpé &ïJ'J,bˆ )H
+À1ÀZA”ðRf€\—Œ=ÍåÌ:XºŽÎ_æÝÌ2XdŽÏX&>™7³Ëàç ç/s=YFÃÜ/.´ùeäsBƒVŒïð:¢.I­4z'pÆRç.˜ÂCLÕ•Š‚02_äo
+ï]ÔUïí&·!œèKŽ ?³Á§b¼iè“ÿS·
+ r^|ÕÖù¡pÕ8ŒÉ}°‚òóÅé4+ã*À9¦ðû…Æä#ý· ]ÁOõùÈ4j˜$¢î­`ÑÝ›NN†-ÿ"òðÁKEWÉð™ Nö§ðÙ‘/ªem'Àa”
+ ˆ»ÚBî
+endobj
+1253 0 obj
+3516
+endobj
+1251 0 obj <<
+/Type /Page
+/Contents 1252 0 R
+/Resources 1250 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1245 0 R
+/Annots [ 1254 0 R ]
+>> endobj
+1254 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [291.815 564.018 305.755 574.018]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+1249 0 obj <<
+/D [1251 0 R /XYZ 72 786.278 null]
+>> endobj
+1246 0 obj <<
+/D [1251 0 R /XYZ 72 248.207 null]
+>> endobj
+1247 0 obj <<
+/D [1251 0 R /XYZ 72 212.143 null]
+>> endobj
+1248 0 obj <<
+/D [1251 0 R /XYZ 72 176.078 null]
+>> endobj
+1250 0 obj <<
+/Font << /F27 394 0 R /F33 497 0 R /F15 393 0 R /F39 496 0 R /F30 512 0 R /F31 881 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1258 0 obj <<
+/Length 1259 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝYmoãÆþ~ùп äKéÀâq—¯J‘m'×^ÛCë .š¢X‹+‰8ŠTHêdýñ}fgH‘2íëè‡Ì}™}›y晕ZøS‹T/Ò,ñuš-ÖûWjÁï}é÷hcÉ(ý8¢ÚG—½ä2Œý,‰Iþ··¯^ߨx¡¬·'{›ÿÝ»?vWË(Ð^·³\h¬)©z÷f}¥3ïý¶©UNmÊË–;»ZÆ5¦j¦±Õú‘[Š–%~:Ì™ŸYHÐlwnšzÏ}§Äü«e‡Þ×uÕÚŸŽ"Y>ž·öÛßaÇKEG[¹oËÇÃîj†Úk­Ý·TŒÝ¶Â0ò:õ,WÚcãŽ`sª+tbúG*‡žáO·+*.•Åvw¥W´Qªn3’æië&·O{z}¦ ¥üU³V—zåkº&~tµTJGÞ×PjWT[L’†ÞÝ»?,oŠÒÒ–ÓˆUÁse£¹ì"Q©ÜS§Êâ~fÅ0ðÓDd–ß‘JZ–šÜöR«ÔÓ…ÀW±¿¥G£·v»«éüiB»ãŠd“©»TúVuǽíñpetN¯hˋƮݵQ
+u;Ñéh'Æ™&ÉÓSMö«3? {!ØF 5ýÙÀškÌ¥dîÌðªÇ®(‹Ž.ð‘Û7ÇjíNG&´Ô™öaSK‚:C'kRÚ;4–왦U
+¦ãöBZ*»¶mkš_Á€È5¨½´°”Ôû@Sñhñ**ŒtŒZ½á!C÷»âaoTDï2¾žÌ£¼º’žaÙº‚Ÿº‡9v»ºé5‘EÞµzݼ8Ç°4 ·ÑÐÁ²˜´E‘ Äø%®7gÁA©®V´_Ò^}{{F¡Ø`¡0ÿÐWAø<h=d0r•i<`CêìîÍÞl±ÇXÇÞ·êŸ\¿O9oø1ˆîüîíßÞ}/r[éRý¶±ÝÓ/WØìJ°Kûá*[4v±yµŒB?‹™¯ Ò'œé^fÎ]»Jü,K¹ûŒÍ%! Ù¢h8XÎìfÆ/2¥#駓õG¸˜š‹1nŽF~ø Óª¹}b_ð®Å2ñÆ?=fÌ“Â?áMÌ^Ž0oÈ}¢Œ=Àù*¦âïRT€ó-R‡j4Üðá*N<Sù ž¨,ðLþðdÙG¬à‘Vjî‹®aŸŽb/·‡nGÞÁä9Cw”ˆ×¹‚ Q¶eZêft `
+l³EÉÕÏObrÿ*TðïQ@I£ÐA›»µH‡ˆ´Éä¼›º,k:áIîa²vÚÉ-[À¦1ÛýÀiH ÝÕT;µ\•W¬iÙš;¾ Ì@LËÝÊEK€ ÜewµíqÏîB†a¤™ï…CSƒšì¹sû0EÕÛâôúdÜÀøt-Ã;9i^v’TÕ{R
+\þ:7ùŠç„î¾ÁJMýx±'ûÜÌŸt­—´W¢ºÖˆ‡‰û %'
+ö^Âûr‚p©Þq Ä”ƒ6×ÌžJ-öÁìÎ0tð ë1¦AêØŽRigd ÃGúš÷ŽÊ ¦‘!›ZF8}Šza’"rõ!ÿ‰Ÿ»e?l‚à5ã·$JLä s+oðkg¿l¹¶7ÐA þšÈî®°Î M2«Öv Ñ%–ƒ„'«ŽÇ¶3s˜Tû!(“øzŽ€µ„½ßЮ4†
+J¾0õ4Zï²½’«)&*øJV4bçh¦Bb³ÛB$ÿ5¡PÝI0ßÕÇRØ¢HÁ_2\T$kÛâ¾”&f J˜gžˆJvF'iY
+G©€稓ÎF†™HÀ¡)p½¸àPý¢ˆÝä±*ö¾}XƒÌ> yô*j WŽnÓ‡¹Ê
+!ÆÁ‘¦¤¥æo._N ÉT·d¼œºž±&5)©§ºTá;t‚ìhËk2vJx&±R±-'Tv]0¿=oH tÂLÖªõ\òSì±\w¬&׊‹ýPalw¬à‡åã¿î4Ñ¿écfzÎOå9Gƒ¸ *Ä^c`- ëÕ>¢ 첋@žLNžËðàj–óK8o;à‰iäéf´u+qPT‰¿
+§©Ð-m¼î³‡½?´ï§8ìºè×Õõð ÚNSŒÓƒœþ<·%Þpý™³`"(õÅxb\sOOŽõ…±vÎó‘÷rœ˜ùÅ‹¯1¿¸\…³š¾ÆÇË^|"ù‹9×cNé-]ÑXÎÐtO?äõú½èOq4Ê8‘ܺ.ëæi^¦S§fÇñÏ@M‚!ôéê@1Ù/Lf
+deð‘GÏ™P•ŽùÙÝ79ÝÚ‡î^€D®&$òy…&?…Þл0èÿÛÉ¥ÑEƒ‰i¤4#b<yG¦w'2fA®kòÓ“¨ä1¡>˜5½Mgü6ý`œo(A"ƒX)Só#áè7$X.þ»˜lmu–ô¶àÌJú¦h…–#èXþiî5ýRç_êz¯?6ë—¶é8m/)¿¥`‘²'P-û‘„1ôúXXäöËgï-ÍÒiVkå‡ôý²n³ôr *¢õ w÷o~ðc»endstream
+endobj
+1259 0 obj
+2552
+endobj
+1257 0 obj <<
+/Type /Page
+/Contents 1258 0 R
+/Resources 1256 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1245 0 R
+>> endobj
+1255 0 obj <<
+/D [1257 0 R /XYZ 72 786.278 null]
+>> endobj
+329 0 obj <<
+/D [1257 0 R /XYZ 72 719.477 null]
+>> endobj
+333 0 obj <<
+/D [1257 0 R /XYZ 72 313.395 null]
+>> endobj
+1256 0 obj <<
+/Font << /F15 393 0 R /F37 380 0 R /F38 495 0 R /F27 394 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1263 0 obj <<
+/Length 1264 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ…‘=kÃ0†w/ý Ú*A}±N–×@3´«†Béà&25qâ ;-ô×W¶ìPL©Ñp<zïÕ‰“,Nr$¹Ñ€¹!ûSÂI<G2gÏ¡I©(9T+`:“©P`´Z㹡EÔÝÚd³‚𠊬 ¶{x¥wìÍ>%övMTjÝÍ€É_â\ý!¾cFÒëyß×í¹c©‚öe³ K1§ÎW­?ÅN92’ÖÕ̺˜ø²ë¯¿ÀCCÛksJ¤ïAÉЉ½”~Ð.e^bèœÿdãhO‚ðQ"‚âztnƒÍûÉrSWî!¦UÛ;X®ì& ‹PâÚî9ˆ0he{Æ,¡@@üçw~
+endobj
+1264 0 obj
+272
+endobj
+1262 0 obj <<
+/Type /Page
+/Contents 1263 0 R
+/Resources 1261 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1245 0 R
+>> endobj
+1260 0 obj <<
+/D [1262 0 R /XYZ 72 786.278 null]
+>> endobj
+1261 0 obj <<
+/Font << /F33 497 0 R /F15 393 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1270 0 obj <<
+/Length 1271 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZK“㶾où J.æ¤V ‰¾íz½©‰—«<·8µÆHЈµ)“ÔÎŽ}ú’’8;qNqÍA`h
+~u\š‚ÆÞí+8œ*MÔûÍPµ ŒÄ¡ªklÚè“ïž°¥£IÜãš­Œnž[;·zínTuž?švàÆЄ䚧CËc⛵ɇ=٨߷§Z˜ßÃOɤ8Á<åJÅi’Ê©r:UÇÐ0âP5[dª³è›S×ùf¨Ÿ¸ç²hï>y&4-S†ê ”(6zìªÁK'í ;EZÂüíià·2µ{⹃påýú#wÿ”¤æá2í¤,cèZ­U%é)’±óã*´¾“›Ÿß줻Aßaà‹’KÔ\­–˜oÚ¦¯ú„HR_ëRƒæiS8î°mXê|ìÎ×Þõ¾¡ÝÂ<Ž<ñ³_@Fú&Ko*OsJRé€3oP3¼\º, ÿY®…4t¶±é
+â ±µIT\%¿ˆ3•}ɧ±X²)F¹¥àPe9—Û-ÙT”'I‚ò¼Æ¯\¬F')t×vÌ°ˆZ™
+ú Gž|ðhwlá*Ÿ-©t§y* i]Ýó¨³i¸Ú$“AaOÕ'’"«´†Ûñç®0MwÓx¿e
+l—IN6ê3ê܃gEQ™Š“<'M±¦¤eO½Ç©6£[Æߎî(lÿК||¸z
+c‹iø®mDÝñë±ö<àöSœ™€åÉ‚®F›}âAž}Ã}uë¶t‘8Žµª
+¶ Ä© @©8ƒtà c–3€g^ŽšCòÃ×G}²ïmÛÈú¤ÂÞÈçËÞ8à[ðÄÉY\¸iy»•—0L¬4Ü$l)µç@7Ç)Ák¡·¼'÷†TžƒžÀŽ¬HÅÕ3ŠÔš4Hú(7òõe$˜9`“ÄIöbr
+‘ñ<(h½þø?FœË4ðLó÷Uíwðë½ë6û£öý‚.¤)bX#“¾F%ÏÃÍÑ=ñû¾G
+æI ”HYuQ ‚û¢$•˜½–'ýfAS\#žˆèëD½àI÷4˜™@ ÙÞÜž$ å
+Ž›°g³`™…ÜPËÙ~JµI% âÄAk¶;!ÀÂ,x[YK¢&d/l·@bÜŠ#w]{à[)4®ô§Žº™[Ì‚ÁX׉ùäX͹™ FÒä,! [0˜é‰ûy@|—íþé€bçHÝÖý’û
+ÌûäùzÌj˜¼i»ñH-@Jfˆ Ñéâñö²PaFV½GÐVp¶†ôLKZkÀ
+g´÷p.þƒ¾Ö%¤_ç)
+—f0—*5m÷qį۪Eh!¼€|â«°«
+”Àæ#êhÛm)¡²pÐá9ÛFT9IxŽFCQè˜Â¸åƒRÊ5¯^´m.˜á†»^ì ®!_Aà…ãÎðìsbÊ8KÍïÈ@^ÂDË\ŠbY‘PPôùLôØÁ…1À”›á$`ˆj³´å‘£‚ÖôÂÔü¢Êt,¯•Ñ/'Çë!€ÕŒk¡ô»õÒ»‘bÆZ¶«‰µ*~ƒ¿˜À:O ~lÀw¬4â¯ädFꔲaZã±a§ª
+p¶>–àSú,KØvrûn)l‡mØk$ÃMC=É qŽ£ÄõÁ{É­¹Pe¸l˜cÙp÷4ïÑSÞ6¯,I!jñ="Óq9‰/UYÎP΢‹^)8¯ß¨«‡KàžÄi‘NŽmÂò‹S£ÃTgz[‚)Â|yƒ1Ñã¾"íßóçÁZ~±µãsî Ñ#Gyic^`]Ý·¬²²é«ðIï³x®ÞÚ|Ùý*ÎÆקÜ_Žcí,³¶V–…½†ˆ›°´|CV$³+ÄO
+§z¨ŽµŸã°Æx)=X ðûüÈsˆ†A¢·“ò×#ÙbŽžÌŽþ_:ÐbÊ;ÿË©êBéÊm·šzÓñ¾qu.š^•‚g(Lúo†Þ_?£”ŠŠžhwIYüög§öúe;Ö¥yÞ¾žç†r¹ö ’ þØ[ÈþÿÂ}5ÜñÃÑm—⻸É!èb|OEçºÊݓު䲆®Â£ ^†¨ŠŸ—pä=¡iNË=3Çä~ãħý|^*©ReY­mHÐæÕn~¢puÅ5b…Å©0[Y©yc¤±e§“rJ‚C+EnDa~pêø½ÖS‘ÚÉ ºÊLä+Æý8‹^€ ¾DÓçÖï˜<ÓfÆ‹}ä8̶z‘Wç?ÖÓÈ5> ILf¯mÖ½Ô©åvœ5¡\ÞoÒ‹ó0£çÒwþÃLþãG?¼­@¬?¸í\H™ž=b0
+€ÚLù?MH±endstream
+endobj
+1271 0 obj
+3295
+endobj
+1269 0 obj <<
+/Type /Page
+/Contents 1270 0 R
+/Resources 1268 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1245 0 R
+/Annots [ 1274 0 R 1275 0 R 1276 0 R ]
+>> endobj
+1274 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [465.234 645.672 471.087 656.299]
+/Subtype /Link
+/A << /S /GoTo /D (figure.7) >>
+>> endobj
+1275 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [378.027 527.131 383.482 536.828]
+/Subtype /Link
+/A << /S /GoTo /D (figure.7) >>
+>> endobj
+1276 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [491.907 142.771 511.301 153.68]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.15) >>
+>> endobj
+1267 0 obj <<
+/D [1269 0 R /XYZ 72 786.278 null]
+>> endobj
+337 0 obj <<
+/D [1269 0 R /XYZ 72 761.372 null]
+>> endobj
+341 0 obj <<
+/D [1269 0 R /XYZ 72 471.219 null]
+>> endobj
+1268 0 obj <<
+/Font << /F25 380 0 R /F55 1272 0 R /F53 1273 0 R /F15 393 0 R /F27 394 0 R /F37 380 0 R /F33 497 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1280 0 obj <<
+/Length 1281 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ•“Ënƒ0E÷|…—°À±ÇïJÝT)RÛU%vmy@‚J@£*_ƒ¡M£<T™…=>ž{Ç("nP¤
+endobj
+1281 0 obj
+380
+endobj
+1279 0 obj <<
+/Type /Page
+/Contents 1280 0 R
+/Resources 1278 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1245 0 R
+>> endobj
+1266 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 612.998 467.998]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1282 0 R
+/Length 1283 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1283 0 obj
+30
+endobj
+1284 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 612 467]
+/Resources <<
+/ProcSet [ /PDF /ImageB /Text ]
+/Font <<
+/A 1285 0 R
+>>
+>>
+/Length 1286 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚí< ·^EuJîå˽ß]šV£hü"´E’{œ÷ƒ€‰€R `(A Ä¾À𺡅4J°6ö¡«¦´¥­}?ÁÚU«íÏë~Ìž3sîw£¡7«,V‹ÜsöÙ³gÏÌ~ÎìùÔ 
+ÿ+?³þüº^<½î†hœñ‹Ï¯;môìÂæ¤>„!ë…IvpÞ/^øìúƒëÏ/4Q‘?ŸYÜ~rý£_èÅÉÓëB|œöC^8£¿8yæ¦w]õî•=9ùÌzBœ“OÜ´:»_2½î­ÍO=·ñ®ùÞù©VöÍ®™_‹ŸMVåûü:|ß´Ú,²EÈÑw]?qÓ¾ùþ“ŒO­µã—}s&O0øãøö‰“‹Ö]t~p»7òd†8Žü'°Ÿ,£$&½¹Ä¬¼çÀ{WöÏWßÿ>°6n‘~¾þkeŒ‰ñ×~ðC{xLe–®.sB/ œIn`Òõ·:?TçÀ ¢ÖE=À¼Ù@âB; ’.{¬ÉƒYXŸà_˜„ÏW¹ï$31¿áàÚ|ÿØ„¹i÷úOÿ•þ‹\õ}ºÒÝBg§—eÝ­=x «|/Œ¶CÀ¯+âæÊZá’Þ8;´ò“,—úS³ŸžŸºi~ê#•§@/^GªAµ0ÆZd¥<LW€+€$¬ÅÛ)JÔ”XÚ„=7± 6À|šój€Ögª¥ÈÖ“Ræv„<Hc#ÚæJbf
+ q>m™&à€+º<äè,´XÁ†ÁƒôŒXi±¼±ƒÑºÁH‹åTþˆ%ËÀP±
+9H
+´Å\¾ÖŒmvl5÷¾ùȾÙÞ9{5_D}sX›ñ¾q¾JÑ€ØiM.q¿úèVgYhh7/ÞÕH ðÁÃ׶îά¬ªë}?»½Më xЖéØ«È=å(®Ñm4$µ¸­F¢!9Ûnœ¯±‡×¡¶ß?§Á¬öa>H\²éœ4Ô$rdS¢–âÁ÷Aˆ°lA oreƒgf쾋`B¡×:­¾ ‘
+a`ŠN^úñÐ6§)B±+–/¨]õšQ6QøК¬¨&þ0šÞFc&Nõ®4° ›—!þS®µymô>Û˜¼
+Ønñ€‘Á›Ø˜¢±µ (<­m,Ñv”Be{·ÛŒÖ¢ ‡G«"Ϊ0#¡µcé°tˆƒim¢@:,åíZû*Kb¿K V2N3.^¶µ³o_kçÞºµ3»`íܵv"
+¤Ã
+`zbÚ%ùµ Úÿ7ÒëÞV¾úí/½Úó†Ud%Në&0WJ‰`é”àˆ íT‘A1Y¹Á؆@ZB&f5$ßbH‡b\l±
+¤Ãò9«ÜbH‡ùÛ]‹U –Öà˜B‹U Ý4ä9],l]®¶ 8ÑA]Ò,½…v@Ê’ÞºrÛ,ûØáãW·“.¸"·ÍŽoÜñ‰;WŽoÜ&_Šv}ò(½[/ˆ‰ÅQ×Øñvþ~×JÞø™{î^¹÷ØÏÞs'a†$BLjEûî:ˆ÷ݽrÿû7î=ö©;0:ÌÉŽ„ï8q|#}@ݺqבÛÔÏ©ã<v+ðŒ=‰ÈA¨Œ™´˜TG<ÀÛñM ??vבû}úžãÜ?¬séÿŽcÇ7î?qKÞ¦>pçÊýÀÆÃedtwœÈܺòIÂ6eZémÓ£²2ÉÛ?¼rÿ±[fÇOÜòè-<ÏeíÞŸ¿¾ð³ŒùÞŸ¾/Í£âGO¢Å…þÝ+ŸÙø…_<ðKÜOªþöÅóQvý~yãWžxüh>z÷ ¢†w+ò)èí¡V\>»ñØ{7>ùÈíSÝÔ•ñ™—8?r÷‡¸½nûôµÏcÓ>7
+HÛÂ=ˆëì8ÃÀ„戔ÚYð6Žó,šPf–߬ }v›­r&[öhÉZˆ‰c…´JêtÌèѬé°$'®Eb@‹c3<(Ó ¤ÃJ6¡%%+ ƒŒÕ¿F`<@XßÙPMàèµ’*Ë´/÷6-ÁäÔ‰€ Ù7;ÍÞÉ,6õ6gU}w*~ôÐÊiÞtuöZ^f£—»ªÙpºûæK{I²1¿·ß˜/Î7옩¾5ÆÙ#Ƽd÷ÿÉûè5ÙÜSLEÞqLOñ¸ëIÁžÒ;S;¸!Äéù~ðîש˜wÊ*Œ¾œdh™
+%oeülS•ðý³r6¦Þ7¿þÙ5¶V…[cµ‚9¬ÔfOoÝ|ä†3€[Ò Q¦‚ë0ɨ‡e”Ì
+úgÝbH‡å“|kÒa•£Í«@:,ëá[k4ÒaÕ•ŠUOT,m;Öµð]óŠÒå…ż֤¯š×.é+X5é«X]Ò'¦Z’¾ÑT·I_±nʦAµ´ÒaÀb¢Ú<†tX^:³X –M5H èx¯ •÷z
+¤Ãª kÅêÖ‚UÖŠÕ%¬«¦È«K‘‹ )I¬øƒþÖ]ö;çgµÿïÞYÎÁâQŽÍ?ÜC˜L›y]h»
+NƒcbCA±ùQèþÕg1H¾ú×|Ø«ìUûÊ,xÓH;n±) 0'G÷ÎßsàFŽ·m.8 /ÏY —:así®Ý gÝÊÕ
+£9 !€††R¨† ËÇ~Ë{3²Š!C
+òÎ}4C‹¶S ™öM;yüÞŒ­b—B¡G\àÕ~ŒÖ~=ä)©Z`$Æ4öCgêP ¡ ï¢Û#„µ¤ÀÖaìCìÇÈ…`—B¡G?8gaFb;8§WY²Ni<ú®—÷fp£°^)È;÷Ñ Îaýç|âÒ¿7ƒ«Â¥PèÇÑ‹eÖ†óùQz±*®Q·r¢Zµ^¡”ï¢LÒ¼¼—™Ì&RƒÒ¾”ªÔÊ{#’Cx.ú!и&ET²i®y¢§¶
+
+ŠXH¿swd6~Ç †dŽxј¬ßéa»Êé\n“ÐS§,ˆ‰×+3Ƀ
+Ñq¥tÑ:•Ê2°Î ÏGH(:˜tºËãX,†Û†V\ã‘ BR!+o Ç+Tx
+—"ú'€8îÜ*,+@@Ùk²ÊP¶¨1~µÅ/ж€+Î߆ Û8°{Iž<´ƒUg1×( )þ¸zv–…ºx°L“'D€.ÆÕ&>eæ&è°ë©óVýu®!Šr¤ø…JoÁd×v„µ%ɵ¼XÜ©k¹2#ãÍ‹]Gm1F ÍÄ@€Îò[çÎ).{ç×áoÍÄv ð‰$¸.“Ͷ¦YJ‹¿Bâ)Ë ^ z ëÑŽ¤Qj¬ÿ¥L#X_Ch„Ïâ)±²€‚§ð,Ž"Ã6(݉9xŠBX47
+c£-07äDŸÀOÐNõ¨râ'ªV‚Ÿð¬ÚEqÁM°Í­ºMn"ÚONƒ¼jÀI°-¯6¼„¡³Úò¹1Eà$[ˆb­øDj ùˆ£G>E¯F›<­N±œà 4ÙÀjZmcëBc~’ñ·F NÄ’'+n1…Pa\ÞíȈZàý߯îÜ‹Ÿ?î /ÿó_¼ð›¿õ%ýÛOœ{ñwŽýîW¾|á÷>wî•—ázú—?÷Õ¯ýþ…¯_À¿ßøƒ‹¯~õÄE.Œôò£}@ë<ÓúC õGüÒW¾~áµ Ï¿tðÿä«Ç.þÙŸþù7Ÿ=÷ÊÅrÿŽŽï¥%sñê_¼Òrñ¿<÷…—_„¾‰— H‘«W±4Óâ†þ ¸×ßœ•‚àlÿ?ôýb3yº~x«ÏŸš×bóù W¹SÜAù!æ\$¿ ™–Ž÷â¹W`^|íÂ/üÕ__<ÿò…—/| áoþîo¿vñük^zôÜ+/•èv~[6“üê?üãÅóß¾ô•¢{,ñâ²ÕR¯y#|köÏ^?ò-õFø¶úª’•ÌÿzæðFø·Ù¿ÿÇ›³ï”iÐK5·ß=ñ=š—R*üŸ4Ü°Øä!|ûü÷Õ›³¨ïyS}ö:‘Å]úø].;ÜÜ÷_¥þ–ß¿Wêoéå¿_¤W² öë|=ŸJySz›ÜÎ*¿­ô?(`¶endstream
+endobj
+1286 0 obj
+6056
+endobj
+1285 0 obj
+<<
+/Type /Font
+/Name /A
+/Subtype /Type3
+/Encoding 1287 0 R
+/FirstChar 0
+/LastChar 184
+/CharProcs <<
+/a184 1288 0 R
+/a183 1289 0 R
+/a182 1290 0 R
+/a181 1291 0 R
+/a180 1292 0 R
+/a179 1293 0 R
+/a178 1294 0 R
+/a177 1295 0 R
+/a175 1296 0 R
+/a174 1297 0 R
+/a173 1298 0 R
+/a172 1299 0 R
+/a171 1300 0 R
+/a170 1301 0 R
+/a169 1302 0 R
+/a168 1303 0 R
+/a167 1304 0 R
+/a166 1305 0 R
+/a165 1306 0 R
+/a163 1307 0 R
+/a162 1308 0 R
+/a160 1309 0 R
+/a159 1310 0 R
+/a157 1311 0 R
+/a155 1312 0 R
+/a153 1313 0 R
+/a151 1314 0 R
+/a149 1315 0 R
+/a147 1316 0 R
+/a146 1317 0 R
+/a143 1318 0 R
+/a142 1319 0 R
+/a141 1320 0 R
+/a139 1321 0 R
+/a138 1322 0 R
+/a136 1323 0 R
+/a135 1324 0 R
+/a133 1325 0 R
+/a132 1326 0 R
+/a131 1327 0 R
+/a130 1328 0 R
+/a128 1329 0 R
+/a126 1330 0 R
+/a125 1331 0 R
+/a124 1332 0 R
+/a122 1333 0 R
+/a119 1334 0 R
+/a117 1335 0 R
+/a116 1336 0 R
+/a114 1337 0 R
+/a113 1338 0 R
+/a111 1339 0 R
+/a110 1340 0 R
+/a106 1341 0 R
+/a105 1342 0 R
+/a104 1343 0 R
+/a103 1344 0 R
+/a102 1345 0 R
+/a101 1346 0 R
+/a99 1347 0 R
+/a98 1348 0 R
+/a97 1349 0 R
+/a96 1350 0 R
+/a95 1351 0 R
+/a94 1352 0 R
+/a93 1353 0 R
+/a92 1354 0 R
+/a91 1355 0 R
+/a90 1356 0 R
+/a87 1357 0 R
+/a86 1358 0 R
+/a85 1359 0 R
+/a84 1360 0 R
+/a83 1361 0 R
+/a82 1362 0 R
+/a81 1363 0 R
+/a79 1364 0 R
+/a78 1365 0 R
+/a76 1366 0 R
+/a75 1367 0 R
+/a73 1368 0 R
+/a72 1369 0 R
+/a71 1370 0 R
+/a70 1371 0 R
+/a68 1372 0 R
+/a67 1373 0 R
+/a66 1374 0 R
+/a65 1375 0 R
+/a64 1376 0 R
+/a62 1377 0 R
+/a61 1378 0 R
+/a60 1379 0 R
+/a58 1380 0 R
+/a57 1381 0 R
+/a56 1382 0 R
+/a55 1383 0 R
+/a53 1384 0 R
+/a52 1385 0 R
+/a51 1386 0 R
+/a50 1387 0 R
+/a47 1388 0 R
+/a45 1389 0 R
+/a42 1390 0 R
+/a41 1391 0 R
+/a40 1392 0 R
+/a39 1393 0 R
+/a38 1394 0 R
+/a37 1395 0 R
+/a36 1396 0 R
+/a35 1397 0 R
+/a34 1398 0 R
+/a33 1399 0 R
+/a32 1400 0 R
+/a29 1401 0 R
+/a27 1402 0 R
+/a25 1403 0 R
+/a23 1404 0 R
+/a22 1405 0 R
+/a21 1406 0 R
+/a20 1407 0 R
+/a19 1408 0 R
+/a18 1409 0 R
+/a17 1410 0 R
+/a16 1411 0 R
+/a15 1412 0 R
+/a14 1413 0 R
+/a13 1414 0 R
+/a10 1415 0 R
+/a9 1416 0 R
+/a8 1417 0 R
+/a6 1418 0 R
+/a5 1419 0 R
+/a3 1420 0 R
+/a1 1421 0 R
+/a0 1422 0 R
+/a89 1423 0 R
+/a49 1424 0 R
+/a54 1425 0 R
+/a59 1426 0 R
+/a88 1427 0 R
+/a112 1428 0 R
+/a44 1429 0 R
+/a4 1430 0 R
+/a134 1431 0 R
+/a2 1432 0 R
+/a11 1433 0 R
+/a7 1434 0 R
+/a28 1435 0 R
+/a107 1436 0 R
+/a24 1437 0 R
+/a12 1438 0 R
+/a31 1439 0 R
+/a43 1440 0 R
+/a48 1441 0 R
+/a46 1442 0 R
+/a80 1443 0 R
+/a63 1444 0 R
+/a115 1445 0 R
+/a108 1446 0 R
+/a74 1447 0 R
+/a77 1448 0 R
+/a30 1449 0 R
+/a69 1450 0 R
+/a150 1451 0 R
+/a145 1452 0 R
+/a100 1453 0 R
+/a109 1454 0 R
+/a26 1455 0 R
+/a118 1456 0 R
+/a120 1457 0 R
+/a121 1458 0 R
+/a176 1459 0 R
+/a127 1460 0 R
+/a123 1461 0 R
+/a137 1462 0 R
+/a156 1463 0 R
+/a129 1464 0 R
+/a140 1465 0 R
+/a144 1466 0 R
+/a164 1467 0 R
+/a152 1468 0 R
+/a148 1469 0 R
+/a154 1470 0 R
+/a161 1471 0 R
+/a158 1472 0 R
+>>
+/FontBBox [ 0 -77 85 111 ]
+/FontMatrix [ 1 0 0 1 0 0 ]
+/Widths [ 0 0 33 0 31 0 0 35 0 0 0 34 39 0 0 0 0 0 0 0 0 0 0 0 38 0 60 0 36 0 52 41 0 0 0 0 0 0 0 0 0 0 0 42 30 0 45 0 43 25 0 0 0 0 26 0 0 0 0 27 0 0 0 47 0 0 0 0 0 54 0 0 0 0 50 0 0 51 0 0 46 0 0 0 0 0 0 0 28 24 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 37 49 59 0 0 29 0 0 48 0 0 63 0 64 65 0 72 0 0 0 71 0 77 0 0 0 0 32 0 0 73 0 0 79 0 0 0 84 57 0 0 90 0 56 0 89 0 92 0 76 0 97 0 0 95 0 0 85 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0 ]
+>>
+endobj
+1287 0 obj
+<<
+/Type /Encoding
+/Differences [ 0 /a0 /a1 /a2 /a3 /a4 /a5 /a6 /a7 /a8 /a9 /a10 /a11 /a12 /a13 /a14 /a15 /a16 /a17 /a18 /a19 /a20 /a21 /a22 /a23 /a24 /a25 /a26 /a27 /a28 /a29 /a30 /a31 /a32 /a33 /a34 /a35 /a36 /a37 /a38 /a39 /a40 /a41 /a42 /a43 /a44 /a45 /a46 /a47 /a48 /a49 /a50 /a51 /a52 /a53 /a54 /a55 /a56 /a57 /a58 /a59 /a60 /a61 /a62 /a63 /a64 /a65 /a66 /a67 /a68 /a69 /a70 /a71 /a72 /a73 /a74 /a75 /a76 /a77 /a78 /a79 /a80 /a81 /a82 /a83 /a84 /a85 /a86 /a87 /a88 /a89 /a90 /a91 /a92 /a93 /a94 /a95 /a96 /a97 /a98 /a99 /a100 /a101 /a102 /a103 /a104 /a105 /a106 /a107 /a108 /a109 /a110 /a111 /a112 /a113 /a114 /a115 /a116 /a117 /a118 /a119 /a120 /a121 /a122 /a123 /a124 /a125 /a126 /a127 /a128 /a129 /a130 /a131 /a132 /a133 /a134 /a135 /a136 /a137 /a138 /a139 /a140 /a141 /a142 /a143 /a144 /a145 /a146 /a147 /a148 /a149 /a150 /a151 /a152 /a153 /a154 /a155 /a156 /a157 /a158 /a159 /a160 /a161 /a162 /a163 /a164 /a165 /a166 /a167 /a168 /a169 /a170 /a171 /a172 /a173 /a174 /a175 /a176 /a177 /a178 /a179 /a180 /a181 /a182 /a183 /a184 /a185 /a186 /a187 /a188 /a189 /a190 /a191 /a192 /a193 /a194 /a195 /a196 /a197 /a198 /a199 /a200 /a201 /a202 /a203 /a204 /a205 /a206 /a207 /a208 /a209 /a210 /a211 /a212 /a213 /a214 /a215 /a216 /a217 /a218 /a219 /a220 /a221 /a222 /a223 /a224 /a225 /a226 /a227 /a228 /a229 /a230 /a231 /a232 /a233 /a234 /a235 /a236 /a237 /a238 /a239 /a240 /a241 /a242 /a243 /a244 /a245 /a246 /a247 /a248 /a249 /a250 /a251 /a252 /a253 /a254 /a255 ]
+>>
+endobj
+1288 0 obj
+<<
+/Length 1473 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1473 0 obj
+134
+endobj
+1289 0 obj
+<<
+/Length 1474 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+V°´³ãòtQгÿ°08p¹zr
+endobj
+1474 0 obj
+102
+endobj
+1290 0 obj
+<<
+/Length 1475 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+NÎåròäÒ÷ôU()*MÕªÓ÷P0Õw
+pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQ°®ÀÄ ÀåêÉ
+endobj
+1475 0 obj
+102
+endobj
+1291 0 obj
+<<
+/Length 1476 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+OÎåròäÒ÷ôU()*MÕ*Ô÷
+endobj
+1476 0 obj
+126
+endobj
+1292 0 obj
+<<
+/Length 1477 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1477 0 obj
+135
+endobj
+1293 0 obj
+<<
+/Length 1478 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1478 0 obj
+110
+endobj
+1294 0 obj
+<<
+/Length 1479 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1479 0 obj
+157
+endobj
+1295 0 obj
+<<
+/Length 1480 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1480 0 obj
+116
+endobj
+1296 0 obj
+<<
+/Length 1481 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1481 0 obj
+151
+endobj
+1297 0 obj
+<<
+/Length 1482 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1482 0 obj
+161
+endobj
+1298 0 obj
+<<
+/Length 1483 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1483 0 obj
+169
+endobj
+1299 0 obj
+<<
+/Length 1484 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+‰ßþúêß¿©ÿiÿþ«×¼­ÏþŸRºþ=P dÿïzïß樂·ëßý×k÷_ýþ·tãëûqÿã>02p¹zr
+endobj
+1484 0 obj
+162
+endobj
+1300 0 obj
+<<
+/Length 1485 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQP[8ÿÿF.WO.
+endobj
+1485 0 obj
+103
+endobj
+1301 0 obj
+<<
+/Length 1486 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+\®ž\
+endobj
+1486 0 obj
+156
+endobj
+1302 0 obj
+<<
+/Length 1487 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1487 0 obj
+150
+endobj
+1303 0 obj
+<<
+/Length 1488 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+OÎåròäÒ÷ôU()*MÕ*Ô÷
+endobj
+1488 0 obj
+124
+endobj
+1304 0 obj
+<<
+/Length 1489 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1489 0 obj
+122
+endobj
+1305 0 obj
+<<
+/Length 1490 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1490 0 obj
+120
+endobj
+1306 0 obj
+<<
+/Length 1491 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+»Î£šp0'lmTÛD¯B&.WO.
+endobj
+1491 0 obj
+190
+endobj
+1307 0 obj
+<<
+/Length 1492 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1492 0 obj
+186
+endobj
+1308 0 obj
+<<
+/Length 1493 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1493 0 obj
+202
+endobj
+1309 0 obj
+<<
+/Length 1494 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1494 0 obj
+109
+endobj
+1310 0 obj
+<<
+/Length 1495 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1495 0 obj
+209
+endobj
+1311 0 obj
+<<
+/Length 1496 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1496 0 obj
+164
+endobj
+1312 0 obj
+<<
+/Length 1497 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1497 0 obj
+182
+endobj
+1313 0 obj
+<<
+/Length 1498 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1498 0 obj
+131
+endobj
+1314 0 obj
+<<
+/Length 1499 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1499 0 obj
+187
+endobj
+1315 0 obj
+<<
+/Length 1500 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1500 0 obj
+188
+endobj
+1316 0 obj
+<<
+/Length 1501 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+oò¬ÕPøм`Þ\õåáË×Æí}_õ7nÿŸ¼ö_öÿƒSùÿwÿÿ÷÷ßO &¹í_ï×g¿ºõ6?::»mê†Ý^[O˜$m¼µuõ­­YW Ö:s]1Xpбibaƒ—«'
+endobj
+1501 0 obj
+223
+endobj
+1317 0 obj
+<<
+/Length 1502 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+ÜÌçkª»7oúíóöï­ýÿïÿßÚÿ¿þýG«ÿÿ»þÿÿúûÿ®_ÿ¶þÒö·U72›­_}ëêÛ¨­YW Öh,xÀÄ ÀåêÉ
+endobj
+1502 0 obj
+190
+endobj
+1318 0 obj
+<<
+/Length 1503 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1503 0 obj
+201
+endobj
+1319 0 obj
+<<
+/Length 1504 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1504 0 obj
+174
+endobj
+1320 0 obj
+<<
+/Length 1505 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1505 0 obj
+182
+endobj
+1321 0 obj
+<<
+/Length 1506 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1506 0 obj
+117
+endobj
+1322 0 obj
+<<
+/Length 1507 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1507 0 obj
+126
+endobj
+1323 0 obj
+<<
+/Length 1508 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+5
+?¿üªµ¯µ›¿§ú÷OžõŽf_~ù»ê÷ë·ÿýÿÿßQûwý×»ÿoýºõßõÌÄÖÃÜ]¿~г¿ž ägoØÛ*p¨™•A€‘ËÕ“
+V$endstream
+endobj
+1508 0 obj
+185
+endobj
+1324 0 obj
+<<
+/Length 1509 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+†únúÎÎnú.66úÞ
+º†úÎù9¥¹yÅ@evv\ž.
+ª‡™[$gè TÀËU¯qÙsX9¾|yéå÷µñ¯ÿþ­úÿ¿þÿÿëÿÿý/ýý?únþÖ«mÛÄ$Âl¿ßäu|¿õÚµÙ‰‰k 6$lüX¸\=¹
+endobj
+1509 0 obj
+176
+endobj
+1325 0 obj
+<<
+/Length 1510 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1510 0 obj
+141
+endobj
+1326 0 obj
+<<
+/Length 1511 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1511 0 obj
+103
+endobj
+1327 0 obj
+<<
+/Length 1512 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1512 0 obj
+106
+endobj
+1328 0 obj
+<<
+/Length 1513 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1513 0 obj
+139
+endobj
+1329 0 obj
+<<
+/Length 1514 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1514 0 obj
+114
+endobj
+1330 0 obj
+<<
+/Length 1515 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1515 0 obj
+237
+endobj
+1331 0 obj
+<<
+/Length 1516 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1516 0 obj
+116
+endobj
+1332 0 obj
+<<
+/Length 1517 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1517 0 obj
+122
+endobj
+1333 0 obj
+<<
+/Length 1518 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+†únúÎÎnú.66úÞ
+º†úÎù9¥¹yÅ@evv\ž.
+fÜÿqL
+\®ž\
+endobj
+1518 0 obj
+101
+endobj
+1334 0 obj
+<<
+/Length 1519 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+‘HÎåròäÒ÷ôU()*MÕªÔ÷
+endobj
+1519 0 obj
+168
+endobj
+1335 0 obj
+<<
+/Length 1520 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+÷jª÷–̾üß?ð׿]ÿŸˆùÖÿÿÿD\}ë¿õÿ³ÿ‡]ÿ™[6µ»ïúÖì[[³®®È:Ô&"báÀÈ ÀåêÉ
+endobj
+1520 0 obj
+183
+endobj
+1336 0 obj
+<<
+/Length 1521 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1521 0 obj
+111
+endobj
+1337 0 obj
+<<
+/Length 1522 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1522 0 obj
+161
+endobj
+1338 0 obj
+<<
+/Length 1523 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1523 0 obj
+143
+endobj
+1339 0 obj
+<<
+/Length 1524 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1524 0 obj
+120
+endobj
+1340 0 obj
+<<
+/Length 1525 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1525 0 obj
+140
+endobj
+1341 0 obj
+<<
+/Length 1526 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1526 0 obj
+124
+endobj
+1342 0 obj
+<<
+/Length 1527 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1527 0 obj
+147
+endobj
+1343 0 obj
+<<
+/Length 1528 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1528 0 obj
+142
+endobj
+1344 0 obj
+<<
+/Length 1529 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+\®ž\
+endobj
+1529 0 obj
+134
+endobj
+1345 0 obj
+<<
+/Length 1530 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQ0Šoà`hàrõä
+endobj
+1530 0 obj
+102
+endobj
+1346 0 obj
+<<
+/Length 1531 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1531 0 obj
+140
+endobj
+1347 0 obj
+<<
+/Length 1532 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1532 0 obj
+130
+endobj
+1348 0 obj
+<<
+/Length 1533 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1533 0 obj
+124
+endobj
+1349 0 obj
+<<
+/Length 1534 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1534 0 obj
+108
+endobj
+1350 0 obj
+<<
+/Length 1535 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+6p04p¹zr
+endobj
+1535 0 obj
+110
+endobj
+1351 0 obj
+<<
+/Length 1536 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1536 0 obj
+140
+endobj
+1352 0 obj
+<<
+/Length 1537 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1537 0 obj
+157
+endobj
+1353 0 obj
+<<
+/Length 1538 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1538 0 obj
+159
+endobj
+1354 0 obj
+<<
+/Length 1539 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1539 0 obj
+112
+endobj
+1355 0 obj
+<<
+/Length 1540 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1540 0 obj
+162
+endobj
+1356 0 obj
+<<
+/Length 1541 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1541 0 obj
+165
+endobj
+1357 0 obj
+<<
+/Length 1542 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1542 0 obj
+129
+endobj
+1358 0 obj
+<<
+/Length 1543 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1543 0 obj
+133
+endobj
+1359 0 obj
+<<
+/Length 1544 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+øÁÐÀÁåêÉ
+endobj
+1544 0 obj
+103
+endobj
+1360 0 obj
+<<
+/Length 1545 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1545 0 obj
+103
+endobj
+1361 0 obj
+<<
+/Length 1546 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1546 0 obj
+146
+endobj
+1362 0 obj
+<<
+/Length 1547 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1547 0 obj
+148
+endobj
+1363 0 obj
+<<
+/Length 1548 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1548 0 obj
+119
+endobj
+1364 0 obj
+<<
+/Length 1549 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1549 0 obj
+150
+endobj
+1365 0 obj
+<<
+/Length 1550 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1550 0 obj
+158
+endobj
+1366 0 obj
+<<
+/Length 1551 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1551 0 obj
+132
+endobj
+1367 0 obj
+<<
+/Length 1552 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+pV0ÔwÓwvvÓw °±Ñ÷VÐ5ÔwÎÏ)ÍÍ+*²³ãòtQ0“úßÀÁÐÀåêÉ
+endobj
+1552 0 obj
+102
+endobj
+1368 0 obj
+<<
+/Length 1553 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1553 0 obj
+113
+endobj
+1369 0 obj
+<<
+/Length 1554 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1554 0 obj
+107
+endobj
+1370 0 obj
+<<
+/Length 1555 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1555 0 obj
+120
+endobj
+1371 0 obj
+<<
+/Length 1556 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1556 0 obj
+121
+endobj
+1372 0 obj
+<<
+/Length 1557 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1557 0 obj
+147
+endobj
+1373 0 obj
+<<
+/Length 1558 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+;‹endstream
+endobj
+1558 0 obj
+183
+endobj
+1374 0 obj
+<<
+/Length 1559 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1559 0 obj
+109
+endobj
+1375 0 obj
+<<
+/Length 1560 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1560 0 obj
+140
+endobj
+1376 0 obj
+<<
+/Length 1561 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1561 0 obj
+145
+endobj
+1377 0 obj
+<<
+/Length 1562 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1562 0 obj
+150
+endobj
+1378 0 obj
+<<
+/Length 1563 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1563 0 obj
+142
+endobj
+1379 0 obj
+<<
+/Length 1564 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1564 0 obj
+122
+endobj
+1380 0 obj
+<<
+/Length 1565 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1565 0 obj
+116
+endobj
+1381 0 obj
+<<
+/Length 1566 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1566 0 obj
+119
+endobj
+1382 0 obj
+<<
+/Length 1567 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+õ5ñ/¿únoÕ
+/nÖ¦
+endobj
+1567 0 obj
+150
+endobj
+1383 0 obj
+<<
+/Length 1568 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1568 0 obj
+115
+endobj
+1384 0 obj
+<<
+/Length 1569 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1569 0 obj
+105
+endobj
+1385 0 obj
+<<
+/Length 1570 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1570 0 obj
+137
+endobj
+1386 0 obj
+<<
+/Length 1571 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+ü­z}½eãë¨C‡8¸\=¹
+endobj
+1571 0 obj
+128
+endobj
+1387 0 obj
+<<
+/Length 1572 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1572 0 obj
+129
+endobj
+1388 0 obj
+<<
+/Length 1573 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1573 0 obj
+119
+endobj
+1389 0 obj
+<<
+/Length 1574 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1574 0 obj
+157
+endobj
+1390 0 obj
+<<
+/Length 1575 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1575 0 obj
+114
+endobj
+1391 0 obj
+<<
+/Length 1576 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1576 0 obj
+107
+endobj
+1392 0 obj
+<<
+/Length 1577 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1577 0 obj
+160
+endobj
+1393 0 obj
+<<
+/Length 1578 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1578 0 obj
+149
+endobj
+1394 0 obj
+<<
+/Length 1579 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1579 0 obj
+147
+endobj
+1395 0 obj
+<<
+/Length 1580 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1580 0 obj
+108
+endobj
+1396 0 obj
+<<
+/Length 1581 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1581 0 obj
+121
+endobj
+1397 0 obj
+<<
+/Length 1582 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1582 0 obj
+141
+endobj
+1398 0 obj
+<<
+/Length 1583 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1583 0 obj
+153
+endobj
+1399 0 obj
+<<
+/Length 1584 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1584 0 obj
+149
+endobj
+1400 0 obj
+<<
+/Length 1585 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1585 0 obj
+122
+endobj
+1401 0 obj
+<<
+/Length 1586 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1586 0 obj
+169
+endobj
+1402 0 obj
+<<
+/Length 1587 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1587 0 obj
+143
+endobj
+1403 0 obj
+<<
+/Length 1588 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1588 0 obj
+114
+endobj
+1404 0 obj
+<<
+/Length 1589 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1589 0 obj
+148
+endobj
+1405 0 obj
+<<
+/Length 1590 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1590 0 obj
+103
+endobj
+1406 0 obj
+<<
+/Length 1591 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá
+æú@9}§
+endobj
+1591 0 obj
+99
+endobj
+1407 0 obj
+<<
+/Length 1592 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1592 0 obj
+135
+endobj
+1408 0 obj
+<<
+/Length 1593 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1593 0 obj
+146
+endobj
+1409 0 obj
+<<
+/Length 1594 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+%E¥©úá@uú@I}§
+endobj
+1594 0 obj
+130
+endobj
+1410 0 obj
+<<
+/Length 1595 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1595 0 obj
+164
+endobj
+1411 0 obj
+<<
+/Length 1596 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1596 0 obj
+107
+endobj
+1412 0 obj
+<<
+/Length 1597 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1597 0 obj
+139
+endobj
+1413 0 obj
+<<
+/Length 1598 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1598 0 obj
+144
+endobj
+1414 0 obj
+<<
+/Length 1599 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1599 0 obj
+141
+endobj
+1415 0 obj
+<<
+/Length 1600 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1600 0 obj
+101
+endobj
+1416 0 obj
+<<
+/Length 1601 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1601 0 obj
+158
+endobj
+1417 0 obj
+<<
+/Length 1602 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1602 0 obj
+121
+endobj
+1418 0 obj
+<<
+/Length 1603 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1603 0 obj
+118
+endobj
+1419 0 obj
+<<
+/Length 1604 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1604 0 obj
+148
+endobj
+1420 0 obj
+<<
+/Length 1605 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1605 0 obj
+115
+endobj
+1421 0 obj
+<<
+/Length 1606 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1606 0 obj
+146
+endobj
+1422 0 obj
+<<
+/Length 1607 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3P0
+endobj
+1607 0 obj
+120
+endobj
+1423 0 obj
+<<
+/Length 1608 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ32Q0€ÃC.
+endobj
+1608 0 obj
+16
+endobj
+1424 0 obj
+<<
+/Length 1609 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ32U0€ÃC.
+endobj
+1609 0 obj
+16
+endobj
+1425 0 obj
+<<
+/Length 1610 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ32S0€ÃC.
+endobj
+1610 0 obj
+16
+endobj
+1426 0 obj
+<<
+/Length 1611 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ32W0€ÃC.
+endobj
+1611 0 obj
+16
+endobj
+1427 0 obj
+<<
+/Length 1612 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3²P0€ÃC.
+endobj
+1612 0 obj
+16
+endobj
+1428 0 obj
+<<
+/Length 1613 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3²T0€ÃC.
+endobj
+1613 0 obj
+16
+endobj
+1429 0 obj
+<<
+/Length 1614 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36P@ÀC.
+endobj
+1614 0 obj
+15
+endobj
+1430 0 obj
+<<
+/Length 1615 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36T0€ÃC.
+endobj
+1615 0 obj
+16
+endobj
+1431 0 obj
+<<
+/Length 1616 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36R0€ÃC.
+endobj
+1616 0 obj
+16
+endobj
+1432 0 obj
+<<
+/Length 1617 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36V0€ÃC.
+endobj
+1617 0 obj
+16
+endobj
+1433 0 obj
+<<
+/Length 1618 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36Q0€ÃC.
+endobj
+1618 0 obj
+16
+endobj
+1434 0 obj
+<<
+/Length 1619 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36U0€ÃC.
+endobj
+1619 0 obj
+16
+endobj
+1435 0 obj
+<<
+/Length 1620 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36S0€ÃC.
+endobj
+1620 0 obj
+16
+endobj
+1436 0 obj
+<<
+/Length 1621 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ36W0€ÃC.
+endobj
+1621 0 obj
+16
+endobj
+1437 0 obj
+<<
+/Length 1622 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3¶P0€ÃC.
+endobj
+1622 0 obj
+16
+endobj
+1438 0 obj
+<<
+/Length 1623 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3¶T0€ÃC.
+endobj
+1623 0 obj
+16
+endobj
+1439 0 obj
+<<
+/Length 1624 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31T0€ÃC.
+endobj
+1624 0 obj
+16
+endobj
+1440 0 obj
+<<
+/Length 1625 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31R0€ÃC.
+endobj
+1625 0 obj
+16
+endobj
+1441 0 obj
+<<
+/Length 1626 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31V0€ÃC.
+endobj
+1626 0 obj
+16
+endobj
+1442 0 obj
+<<
+/Length 1627 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31U0€ÃC.
+endobj
+1627 0 obj
+16
+endobj
+1443 0 obj
+<<
+/Length 1628 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31S0€ÃC.
+endobj
+1628 0 obj
+16
+endobj
+1444 0 obj
+<<
+/Length 1629 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ31W0€ÃC.
+endobj
+1629 0 obj
+16
+endobj
+1445 0 obj
+<<
+/Length 1630 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3±P0€ÃC.
+endobj
+1630 0 obj
+16
+endobj
+1446 0 obj
+<<
+/Length 1631 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3±T0€ÃC.
+endobj
+1631 0 obj
+16
+endobj
+1447 0 obj
+<<
+/Length 1632 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35P@ÀC.
+endobj
+1632 0 obj
+15
+endobj
+1448 0 obj
+<<
+/Length 1633 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35T0€ÃC.
+endobj
+1633 0 obj
+16
+endobj
+1449 0 obj
+<<
+/Length 1634 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35R0€ÃC.
+endobj
+1634 0 obj
+16
+endobj
+1450 0 obj
+<<
+/Length 1635 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35Q0€ÃC.
+endobj
+1635 0 obj
+16
+endobj
+1451 0 obj
+<<
+/Length 1636 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35S0€ÃC.
+endobj
+1636 0 obj
+16
+endobj
+1452 0 obj
+<<
+/Length 1637 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ35W0€ÃC.
+endobj
+1637 0 obj
+16
+endobj
+1453 0 obj
+<<
+/Length 1638 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3µP0€ÃC.
+endobj
+1638 0 obj
+16
+endobj
+1454 0 obj
+<<
+/Length 1639 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3µT0€ÃC.
+endobj
+1639 0 obj
+16
+endobj
+1455 0 obj
+<<
+/Length 1640 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ33P@ÀC.
+endobj
+1640 0 obj
+15
+endobj
+1456 0 obj
+<<
+/Length 1641 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ33V0€ÃC.
+endobj
+1641 0 obj
+16
+endobj
+1457 0 obj
+<<
+/Length 1642 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ33Q0€ÃC.
+endobj
+1642 0 obj
+16
+endobj
+1458 0 obj
+<<
+/Length 1643 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ33U0€ÃC.
+endobj
+1643 0 obj
+16
+endobj
+1459 0 obj
+<<
+/Length 1644 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3³P0€ÃC.
+endobj
+1644 0 obj
+16
+endobj
+1460 0 obj
+<<
+/Length 1645 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ37T0€ÃC.
+endobj
+1645 0 obj
+16
+endobj
+1461 0 obj
+<<
+/Length 1646 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ37R0€ÃC.
+endobj
+1646 0 obj
+16
+endobj
+1462 0 obj
+<<
+/Length 1647 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ37V0€ÃC.
+endobj
+1647 0 obj
+16
+endobj
+1463 0 obj
+<<
+/Length 1648 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ37S0€ÃC.
+endobj
+1648 0 obj
+16
+endobj
+1464 0 obj
+<<
+/Length 1649 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ37W0€ÃC.
+endobj
+1649 0 obj
+16
+endobj
+1465 0 obj
+<<
+/Length 1650 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ3·T0€ÃC.
+endobj
+1650 0 obj
+16
+endobj
+1466 0 obj
+<<
+/Length 1651 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ³0Q0€ÃC.
+endobj
+1651 0 obj
+16
+endobj
+1467 0 obj
+<<
+/Length 1652 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ³0U0€ÃC.
+endobj
+1652 0 obj
+16
+endobj
+1468 0 obj
+<<
+/Length 1653 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ³°T0€ÃC.
+endobj
+1653 0 obj
+16
+endobj
+1469 0 obj
+<<
+/Length 1654 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ³4P@ÀC.
+endobj
+1654 0 obj
+15
+endobj
+1470 0 obj
+<<
+/Length 1655 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ³4R0€ÃC.
+endobj
+1655 0 obj
+16
+endobj
+1471 0 obj
+<<
+/Length 1656 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ³4U0€ÃC.
+endobj
+1656 0 obj
+16
+endobj
+1472 0 obj
+<<
+/Length 1657 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ³4W0€ÃC.
+endobj
+1657 0 obj
+16
+endobj
+1282 0 obj <<
+/XObject << /Im19 1284 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1277 0 obj <<
+/D [1279 0 R /XYZ 72 786.278 null]
+>> endobj
+1265 0 obj <<
+/D [1279 0 R /XYZ 120.194 102.296 null]
+>> endobj
+1278 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R >>
+/XObject << /Fm19 1266 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1661 0 obj <<
+/Length 1662 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZKoÜȾû ¿@·P€‡Ë~ð mlÊ®½‹X›²A {4Œ8ä,’µ¿>U]ÕMrDYNN6ˆÝÍê«ëñUÕˆ³þÄY*ÏÒ, ešm¯ÄýݹÖ0F”:Va¬±÷áÆQnTfIü½HB•(Z÷ûëWß]*u&¢0ò³ë¥¹.ÿüáüß×{õöÚO‹CÇ/ŸÉôlq™®,nš²*Üá»KÏ”†³i¦úóùFå:x3vUs{¾‘JUS UQW¿CÕ646ì 6T°/ºòá\fAÑñHÕãSÛs™{³Å—wøÏ”ôb×vDÙ™cgzÓàËÁ/®‚vGϲ
+^“ßÌ¡íÏ3„ø!À}:ûFàmäö ®`¶R"ø¾º¥Æ[úð’¹=Ž½)_/ÌQ
+r"_dYæ©c™[³76€9íÊÊZ„2NyŠXY3•Êø}Ñ”¸T´Àèî¡ê ­\ 4L[J·¥XßRHf©[3ZÙ3Séή¬Âüÿ‹1¥)©] |WIÊ|qW½¹G)1]Q#-ˆAu0v‰<xØ›† ÷<ëjË‚¢T€ ­|uš…IÎçD]ݬZ†Êy5ô¦ÞÑ<ÏØÔ»kZÎ>ÜÞPãCm»Òt| ^åWñÞ}@I,B„‘H‰±Ý¼n+§*°j„“ÂS3°‘$•›D…ÌÈ×olŽ—m3\t]ñ¸&usƒ£µ®÷$::(ˆGÐxàaEÖ¬PÎí“Dž°…½ êÿUÐݸÆŽd X»oI…t0XrZ‡ÜÎÙ™®#±mÕ¯Ù†¿a.Ì—?½¿þùïWÿ¸¸~»òÑ LPN,«fMpX
+›D:¥ >=«“t"æOÛèFÚn
+mv½3Bû orçè-O*j8ÎkaÝŒ‘ÛI`­OÅv¨WŽ+u¦‘â#4íÇHqÿö\9n*ÂD»ãN Žh)IžÙEå0EÍuÞYŹ•sP{’öšÆ^¦¡sãE:¦©‹îÖÞEœuAŠ/*¼ä8emà òÎ$= Yцù‡âî|Z{ìÝÔ/ßÞ‚¹­©³cÙêí*‰‰¸£ù´±-.¹8kcy‘“|JvèYJ=KLÊ™Db¾é¯6‹éja¸išÚç̶ú5Ú”¼ÙÕÀÓ™þ¡«†ÁðvÕ°§ÖÁ œÝX¯þþ<N@†F«Ú»"Zã¤'fPÏÚü*ÈéiûHÐÒ›9nÙh8©,,]5¥ùDSq±ÝšÞÞTüq‹“¥ËƒÇ©Ía¦á:÷ÀËú5V
+K¤GLtAl;7×#9+”¶Õ8¢Ù,iY˜Kµ`ÛÜ&9t6á± ¡ÀKoráPÖ¾æ}†~;MŸ£÷ÕÓ^
+x,ºÞ|,v‡µˆB+«lŽ…ÍÍÝY”{Ëg|ØW6U·_¨1ébžœÉ37 Ø’cð$òdÁý` ÒiÆ> Eç½­G²ÚiòL(,ÒPë쌅cXœó°ß¾8é| À'Z㇡£Ì<;ŒéœòÙ¯z¹-lx”¢¡²6ŸÑ´ìÍ€Q¶ÀM þO}A‹¹y81l=~ƒ„ε.²#¹ËŽLŽì¶" Êßoâãš–«(›% ßÿòã/C‰o?Muýx4âótš¦J€ƒˆÏ³OÍ“æhOKví8@‡XëÑM1>—ÙDw½ÌIa+h^Õ€¨8Ó’õ¨=4N%E“VþV²R.…‰²'ÁÏ6Éض]uhìd{•§¸=>PÃã8øÙZW›gÁ_÷`fDâýÜ7¬ÀÈ6 ^£YÁ‡ñ¦kÇ¡jLoGDð*L? ¯e ¬mHâ……ÆoŸïŠc d°Æ •$ŒÐ61„CoÊgZb>­"Ö†w¤”€J4ߎ•.Ô€Q4«Ø™š{©ºÙÄ\Kâ y~ÞÝ[yß·Íö ¼},5ª“JWs½)þ”s½© Ú£•„šz[uÜS`ê¶$ ¬€€Làô…"™jZ*OÈÊ™×çœùÊuÌ™—˜ 1:Y/Ä@(ì½ï—XÖ×´(¦Ä´oEp™>Ak‡—õä•‘ª4»b¬GbhÔy—?ùµø+ˆ@zÊ@â8†[X?^o&h•QA-$…8™Ù4>&φ=Jˉ 3ÓŽ6C›â—RÍqš{ìÌ}ÕŽ½M… ÷°}rbš®œ6ÙuíÞ -¸œôÔ‘ö¢áÒ. Ð2Zq·ZŠ ¯G<R8Ê¢ï«[V [x.ËÎ&õ°ƒðÒÒƒ½rUR÷ä»´ÈçU¤èÛƒñnD2‚Z§“BéªQI“0…èðë7*÷‡˜¦X³)QåbAÍQ+Ø;Zzâ>[pŸ²IÆÆ}Õ #êpeŠ)R¬Oÿ6VÉ›ôZ¶˜ë̹}üÒÔÕʈ9¡k»ê¶Be#óBÇž ^W
+:t±ˆZ/ž†ÐÑ |ŒÁð Ðcæ¶Á¬ŽYáƒgAøO´
+ôïVö1§g1·%ÕîiÝ¢±õè½9‚iÝV”òO€®¡TS5ð³§çÏãˆs˜1ÎÖP ÐföqP°Ð*> ì];ªe<Roâ¬0eD·Á<õc¬ˆLžé¥sÿLÝ8sÇ9¥ÙWiŠÛ±%©R°ð÷ÚþâŒ&^býHƒ~4^Û`bOkzë ‡vœ¯b³tz&¸¸ŸG:0“ñ å%éÄ‹´ä,¿‚BÚ'´>Rp´#}MšöZ°áü1”z[þNõÌÔX7Ê¿ AB¤”‘ŽÕ©ÓÚÜÜÕóT9ý~
+ÿKÊ~ŠY55³™òŸ‘K²
+6'›0ýtDx˜Ðg–_„‘`
+nMc:ÖcìÖǽKQÔ£û•Rëê Ey
+Î×`¯¡²ª"¢{Óh¥Ã#ÅðõìHéV­¹àëò~Øš@ œÎb­Ø~'¾GÍkO‚).…ô78«8`
+endobj
+1662 0 obj
+3495
+endobj
+1660 0 obj <<
+/Type /Page
+/Contents 1661 0 R
+/Resources 1659 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1664 0 R
+/Annots [ 1663 0 R ]
+>> endobj
+1663 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [482.362 133.989 496.302 144.898]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.7.3) >>
+>> endobj
+1658 0 obj <<
+/D [1660 0 R /XYZ 72 786.278 null]
+>> endobj
+1659 0 obj <<
+/Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1668 0 obj <<
+/Length 1669 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZK䶾;‡ü…/Ö
+¹÷z‘
+¸6”¹§rd7k1“€#,1l³ÌÊfQ­ç9ö5›O®
+ñ žË㑬¶ã&µ5 ®Ù¸¥„âz0ËÝ·¾›d K/,eB;_Hylƒ¿"Ã!7\EN’ÖN¢¡þÍíjÐ#_”˜=èTL]cÁ¥Z¦;ön˜qh&GÎ83õ}ˆÍy„
+§A=·àO´L\ÊôÅ0¾Â!Fè÷ã Sò=ï6œ
+µ%§[±ïí•/}˶cuÞv€J'çs*?mœžžÑáÜ ¦9ì"«åPéG`PwÊî´é´ŸTØT“"ž$œé¹á-i©;b!FÀ¿å^2L)à}‡Üx@t9M&ZÄ<rÅ‹¬HÉErƒSqÔ°pf-aýIþž2°ýúЖƒÖtU-taŠ–ƒÂÊ/4kŒ6‚Ñæ­ã4Ì’G™§'³D|ù- u[ºW+eQ˜EæùKÐIÖ Cl
+Û¢hF§(»¢å¿;5\g×
+KÐÅ–tÜ!dïcsl÷“¶®tÃPô\Å«Ån/NÒ:Kvâùâ/;êP Ùpmé„Qé÷âtiˆ²…¸$XW'2}€_5á]$g‹ˆ·D4ð¨Qv»SS1Ù­w—p¶Þ:v„p7r@†´èÆíòÂ,^8åÓ¦
+nOã24ƒÞ )–aÙ°qÓ$=Y*Ê%t>-Pœå¸¶¸W$×4ÜãÞ‰"—£ä:þ%ç›è/œgìV<Üg5^_çqÐ-“ß¹±o˜Êr¼P:Ï_@KU> áÆ&¿D„Š}6Ìñ¹nËxcæ%H°‚ÿ-HIý/I¦©¼² ·:8s^°‰(ÌZg‹
+T7šž'N­WðþK@ö­7Ê,Ì”¹ø’m>1çÀƒ9`K1òÌ_Nüm0
+endobj
+1669 0 obj
+3521
+endobj
+1667 0 obj <<
+/Type /Page
+/Contents 1668 0 R
+/Resources 1666 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1664 0 R
+/Annots [ 1670 0 R 1671 0 R 1672 0 R 1673 0 R ]
+>> endobj
+1670 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [121.151 544.648 140.545 555.557]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.15) >>
+>> endobj
+1671 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [504.329 237.7 518.269 248.609]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.5) >>
+>> endobj
+1672 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [450.459 147.851 455.913 157.548]
+/Subtype /Link
+/A << /S /GoTo /D (figure.7) >>
+>> endobj
+1673 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [451.036 134.302 464.975 143.999]
+/Subtype /Link
+/A << /S /GoTo /D (subsection.5.7) >>
+>> endobj
+1665 0 obj <<
+/D [1667 0 R /XYZ 72 786.278 null]
+>> endobj
+345 0 obj <<
+/D [1667 0 R /XYZ 72 182.393 null]
+>> endobj
+1666 0 obj <<
+/Font << /F33 497 0 R /F27 394 0 R /F15 393 0 R /F37 380 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1677 0 obj <<
+/Length 1678 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ•UÉnÛ0½ç+t¤€Šw±·©n§úÖ-1•Ù2$9Aúõ!iÇvÜ…³ðqö¡XVÂÇ2Ã3SiÊM•Õë+–Åï>ÛsŸ@‘R ª$J¯
+¡h¥âß-¯®Le¬¤¶´Ùò.`—Í7²l}^H©I·ÉyEf?n\E–¨xÚæ7$X$›]ÄLó¸«çÝè§xÒ}O\ŸÌÑVE|Ý}/™ôÍÁq¼ÅùÜ«!wÄfá$
+šµ©û]ãÒ¥ø*C¥Þ»œYKø2®Br ¼:)^·9›½i{ÐÀTÔó0>]ðg%Õú¿»N#@€%F-3ÄÄ$¼Ú ^[nŠ
+endobj
+1678 0 obj
+745
+endobj
+1676 0 obj <<
+/Type /Page
+/Contents 1677 0 R
+/Resources 1675 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1664 0 R
+>> endobj
+1674 0 obj <<
+/D [1676 0 R /XYZ 72 786.278 null]
+>> endobj
+349 0 obj <<
+/D [1676 0 R /XYZ 72 664.978 null]
+>> endobj
+1675 0 obj <<
+/Font << /F15 393 0 R /F27 394 0 R /F37 380 0 R /F30 512 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1685 0 obj <<
+/Length 1686 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ½]oã¸ñ=¿ÂèË)ÀZ'~H¢î¥Ø½vÑí¡(® pÝ>(‘%Ÿ$_6‡þøÎeÙq6¸¶(Xäp8œï2j•ÁŸZ•zUº"Õ¥[mö7jÅ«8ú`Œis“ægo ®#æZÛ´ÊŠ×ðmž™]­•«Ò</V
+°á“¥¦r«Á¯¶3†ÎtZ9'KʤÖhƘ™siUÁ‰ªª`Pá‘în¾ý¨ò•Ê€‰ju·%Ô»æÉûÛÞýùæw7J¥ªD>zu…úڤƕ+ù¼ä/žtò¢bͬ~Œœâ ?ϸøöã^g«?ô7?Þ¬~¼Ah‹¬Zkð <Ógñú«ŒÎŒT:-tÉG¼®€³²´TÅoPÀ%_'(•ÿf¨Yk]ØÔ
+$²Î¢D–%b¬02Ú¾ÇðË-Ÿ¶JîÛzƒ"<ò:óø&yv"¾ë[?2©zð<Ø'Üãög!ïëndÂÌa‰
+Êü”!Gdä…9±1àlT SírЛ¤.œ0tØ¡Žq„a†z›xºíÊp
+ .½Ä¦'To•ì~Å¡~Â’íÛ¢ŒnY E¦#%?ƒ#ÊfÊŒ£MO:0´)=¯ÍÁ w%ˆù‰?[ß
+  bfD<#ç¹MþÚ ”Á‹È`°
+›c[ÜHðlêãHd!ê #a/©9$Z³w-$ãʱ9ÞcÁЕšÝKWЮ°à8ƒž€Ú11;wa’uÑjdz§Ð`‡Ã=)ÍQ+»@L¾7ž!oXl&?‡ìÈ\,¼Ñá~Ò}31ª0{¥-9Äê]ÙðÛ¶”åËäSÇû¤ÈwØ]±0
+W
+ëŸz¹ª•s2x‡¤Kî`X˜……ÅTŽ½‡4l#¡º3»Ø4Æ *4s†[·Çv¾ò@Íe·ÔÍ›ì{(~‹Ø•Âòû¦?¥“{Ù1<t¯v Ñï°y.•ŠÛ5Y‡H×èE@ž-hWÁ¶Å]ó…ÆÜ-õÐS°ëtÍá óSÅsòÔ”)2zN@`ö.ÓœMé–¨‡@¦¾„ýõŽ[2ºÃ2rð¾4ûËì."ÞÚ8Äq8Wè7%PR©}%¾ÂU˜øêR¥Z¾þ¤J.@ï¥Íw¯Üx²4¯¤'%suwš
+»%åIj[ïyÃ⥟Åcñʈãøf¬åU[çñ™7.žñÍ¢[_¼êÍÒÙ2U&ëYOk•U¼e–Ê^¤NµÎ_÷Õ‹VUendstream
+endobj
+1686 0 obj
+2672
+endobj
+1684 0 obj <<
+/Type /Page
+/Contents 1685 0 R
+/Resources 1683 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1664 0 R
+/Annots [ 1687 0 R ]
+>> endobj
+1680 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 280.999 400.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1688 0 R
+/Length 1689 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1689 0 obj
+30
+endobj
+1690 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 280 400]
+/Resources <<
+/ProcSet [ /PDF ]
+>>
+/Length 1691 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝVMnõ6 Ü¿Sø‚Hê‡<F‘eÑU
+à·èª×ïP²d?Ûºþ
+[(³ôAE|ÒósÁžw·¢ìw›8£†ž²¬ÖÉÔu4ñV÷ŽåÊ?¸.©o[²–ÆÀs+tHÀ¤8Ï+Õ‚÷
+z(WìýâŒl‡æ´#F›õÉÓ܇‚e´ ª
+:Î%œYk &VŒQÀN ':¤éì© §V'‰“€À8¦ÄŽ.•rSö–ðp®Øûeê±³Ï-è«nœè
+5eŠ8Gv¦Z çî©(ªb ÂòtL>Ê]éæ:VèJÙ‰ü‰:0>#Û´1§C®mÒÕ‹Íúài ˜aEù ù A ‰Ú:ÖgåØ¡ÜĹ!‡r›C¹ )ìÈúäÉ : ó@8A´Ì–ŒL*Ó\A9©öü\0ÜÊçÐ Ù0c DŸ6룧´ ŽT<]Š× ÄA φ½ÿµ7ú‚ò¹
+endobj
+1691 0 obj
+1151
+endobj
+1688 0 obj <<
+/XObject << /Im20 1690 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1681 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 280.999 400.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1692 0 R
+/Length 1693 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1693 0 obj
+30
+endobj
+1694 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 280 400]
+/Resources <<
+/ProcSet [ /PDF ]
+>>
+/Length 1695 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíXK®$'Ü÷)ꈄäw‚YÛ^Ž¼zVK–^-¼òõUPÝofkË3Oj•$ä‡Èkd³üü~쿲ýùTŒ ²¹MŒiÛ/${ã|Ø$“¥l®4 Ñãû1þxˆw&fIÈ¢Aæ50ãD‚5¶ä­kð˾Ï8wqJ¤ECZ×xþ§mû¾9Ë¿ßÌ?É¿]o·Ö(ˆXÐ&ãÓöùø ÓÚÅ„ås—w"X¿ÖŠñTXÔp[ž–ôáÔ-ÐÞ$™ÀçC\´ƒÄç5%Ù<ïZ¢:#š¯•-LKp¡-ÞDßÇçÖëVlïH,
+ÎhX •’6§°Cºáèźœè’#À´a¸\èœ6ày×’\€§´/œ¿%&KÎçpʉÚOÀÙàMrÈ k4ÀõQÔ$¹2¼ § oЕásSݹZ$† ÷¹ÏZ
+vCGN;K³yŽÂœ oCôùpŸpÜ£›æ®X7Ûã ¹{ÒÌ_!- Rå
+Gþt&ñ¬»lP(ÿqi±bû…AÉÂF£ª”ç+LâV€'äZt_eÅ"¹7À–
+@£½@§ŒTÀ"'R9²8 §•3š%_P€á.‰ÍƒÑ„T¹çç–wàX‘-ÀƒP-
+Öƒ^fö™¨òFL7{M“ïæÕŽHßò_ý\7éÛ ‘ o8Ù­ZID Tˆdª¤‘¦QÔ·âa™mÉäQ˜±½Í‹ mã«c:!‡ÑÑ …œÅ:(§ ™ŒêTƒÅMƒ$‘xDwÖM)[/t%Â+<´<(È4«›®qÍêVhgÌ5- ‰8Ä<HPªl²p Øè&”£_eSX]¸`Õ hº¹H…¡ICîá<£74®!êIxNØØû®)Ó>hR$¥Åú!SÛ8œ¼Úp⣱,Z)Ÿ@Æ!Hµø¸<á| gjdI _%Å*Šr;3Nj5¢4F_±&ìaªº.5b‚íêIàh
+¥"ƒÂ»€`ϵ& ëc *-þ–w­µM•ÿ”Ù<[ßP»ü>øoÅö qH.ìˆZÇ£ ¾­
+{:Ðü†R ¥åK'.¢{E<Nõ¡¹gÁš”‚½ˆHq]jÄèÄR¹ ] Ï×ÞüÌÖ{$— !ªk¨ÜxÓ
+FÅéÔMª
+œˆ3R˜;'3-Dõ’ oûJ[?¦ÃÛLìÆøÿ%á_jÛ‹wƒŸ¹ ™ÕYê’Á2 aÇ?ÉðåB-ÿƇˆ»î†8fwd¹a>*ÊuQkÃé¢Ö ž?ôë׌ÓJ Ö|7]lç5uB>/BÛ–‘IæùJÓ°ÉNüµØ†ð*Š·ÿ^+ŽñT?ŒÕ ý³ 9ýÄû‹Ê5­:¹ä½—秀û »»àxøgè’©ýŽ»‚®I§ªj^¥Æ]¯ØÚKžHŽ(`Pe>Ô‹`èÁ~9 Ãå0Ô6öñ…•ç#Ü™—Œ>+Ñ‚!ÁÐâÈç%pñiHL‹Ì󅦎ÄÀTe3·µ‹™ö‹ÙG¿¬épYc‡˜Š¤UÞ˜„/VÈ Þ‡ ;Æs‡Ò°á¥&ˆo ÂùÜuÊ o5휺ù±æÒį¼Áë'˜ÅK(K—Ð:ØR È•£cZ0ö§0{(«/€mq…
+©§ÓQƒê
+endobj
+1695 0 obj
+1709
+endobj
+1692 0 obj <<
+/XObject << /Im21 1694 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1687 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [253.501 94.919 258.955 109.148]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8) >>
+>> endobj
+1682 0 obj <<
+/D [1684 0 R /XYZ 72 786.278 null]
+>> endobj
+1679 0 obj <<
+/D [1684 0 R /XYZ 124.505 518.117 null]
+>> endobj
+353 0 obj <<
+/D [1684 0 R /XYZ 72 440.858 null]
+>> endobj
+357 0 obj <<
+/D [1684 0 R /XYZ 72 184.923 null]
+>> endobj
+1683 0 obj <<
+/Font << /F15 393 0 R /F25 380 0 R /F27 394 0 R /F39 496 0 R /F37 380 0 R >>
+/XObject << /Fm20 1680 0 R /Fm21 1681 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1702 0 obj <<
+/Length 1703 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ½YÝã¶ß¿ÂÈKµÀY'RE(Š\šÒ´E’.‡¦Z›»VÖ–ö$ù6Wäï|Q’¿Ö½¢)ü Š‡ÃùøÍX-2ø©E©¥³©.Ýbµ»Q þ=-âè[˜cJSäiaðí
+á2R.µI}f/Ñ›"µ™Y,•óiQØ…jxdiîÝ¢ ‹‡‘Bg:õÎÉ'•§&×L1
+çRïaGå= <nùîîæí{U,TBøÅÝ‘Þ­ÿ‘|yûÏ»?ß|}w£TªJ”¸û3Ü—yš»r!SùâîÀ§°ž5³ø
+:
+âujuÉ[\VÀ»QYZ*û
+8–kR€RÅg+ °ÔÖ¤90_ÂöÞ8±¶³›M´&Oua_?ëûúqß…Ûe®³Äÿ>Ü”`rùLáÇ–Ç߯*¼€ýÌ5uÿïí­H³«—üÕ¦êªÕ:<»J~R¹¾`=<tíŽgÚæVûdà·¯ÚÝóVüµ½]ê2Y‡®á?´»ªIo—ÆdÉÝ&0uÛÕuSm™ä¹6<ª{þÞoÚ[í’—†_ëÕ°XZ›fŠî¹0ž$­€ Ï“aS¯pÁ¾êd]õ›°æq?Ü‚<Ÿ¶d0É×QnäkxÜ8‡¥sÀI
+ÐåCè(@á[ÕãÓ’à§å\j 1 Ì)¨9= ÏtêW€mW²„N‹ÛœgŸÜ´’I^ç^ëGî¨С`¦£ø¦Á›Êr…-ÓÒµ"ž{‘Ý·¯D2w̱HMQ\.(r
+ÆÖÇ;­e._ñè¡í¦ §ÁA¸—<æTꕺ‚˜#Þk¿€ -FÌfí܉¬‰N#Š$ð½ Ï0‚ç‘Øa“#Øã•Áxµï>R|—Å/›
+äɹƉÆζ¡\kʉÏÌÓPô
+#É’—66\qÏNÂ/byëôŒ3ÞmbUG?<tO¾Ü9`=ŒYŒacAš D‡çùij´9Àd»å´ÿ/ÿÌÄs™Ó›È J/[^îðçëý¨ÏŠÏì|FvúÚU—w ­µã¦ÅÌ
+ K(7„'‡Ø‚Ã.2Z-Ï8gË
+N,U¾ü÷d¡öÕW½œk´˜`€E aRržüˆ9[´ ¡{7R÷1ù¡ú0û‰Y•Ù¡úO³v™¥Eì|Çͬë+iç@Õ÷÷€³Èd8—±UV¦.7óò…Ê:´Klä*P!cüÔóUâ,&ÕlØg4>ƒW@„=B”àÄßÈ\ÝG¦}Ë£öžKÏvß¿‘¸RBÕ¦ÌQÁNu2(”$ V-)‡ýãœ+’°~ G
+ZÃɦe4”Q(ƒ6tš€ä˜?FX‰d”#`‚ÿP5«Ø›Èfr£¤&‹ÍÄ2”?œóiLÅÉkf[ïva-€D;˜JųñIøE3®rž{îiby XÈ^žx „¸Y”Z>ï¿j©Y,qy•Ln“¿Yµïù¹Ô#”6’t«ÚýÃ|Vüq¬UE
+ë”™”ÚMu”nåAéVÎer\+IU2ñtÇ<¹Ê)ìDvŽ×‹ü=´9sD‚F>Ÿ*z|E€9lÚG„/½üÛâã=ùÙUüäáªæ1Œû™‰7Ó’s1‚(¨¾sX߉R Á§Ÿ9@Îw~ÅSwÅSÜä)Ô @P~úßÄ”¦=ÖöÚŸZ+¨§í5øà‹“.a®S­_)®þ YDEendstream
+endobj
+1703 0 obj
+2719
+endobj
+1701 0 obj <<
+/Type /Page
+/Contents 1702 0 R
+/Resources 1700 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1664 0 R
+/Annots [ 1704 0 R 1705 0 R ]
+>> endobj
+1697 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 280.999 400.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1706 0 R
+/Length 1707 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1707 0 obj
+30
+endobj
+1708 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 280 400]
+/Resources <<
+/ProcSet [ /PDF ]
+>>
+/Length 1709 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíX9Î=Íû>å}91"¢FHHD\Ÿ*¯åêe†ôÃ'üæ½ry©Å£¤
+ÿ·ÏýØ~nZüØ´MÒ‡(Lò2j'ŽXe¤IFh㥶^X]ZµïÛxß²–9';ˆb¡ûû6¥vAt Ưsôñ¾u/£ûÝ,ðuìÛ÷zm_„Qø÷óÛæįmØ«Í «ÁnÔÒ:ñßöÎühµÂ¿ªU åLª5IºT´ªh猜û›”—Á-ªë9µÌ­Ò"œ¹ î£LM„]ZˆD GhíâQƒÈŠ éìÒÊ!»KM?ŸÌ…v.ˆcà—²ÀÏ ëäãL•9Ëž6‹1‰69°j6½§¬»{5UÉÁ¦Õô¥[…é„IY¸nÑr YF&a”’öúºsαÅkú€2XL¬ç´Ô]TIãþÚ²GûÃn®Ìc Ī IÂ7èPÅâÀŽ‰ðD]çÕ˼À™T;ÔcGËEá1{pαùì¤ o$F$ʹ ÇkéÔsòàœ©ÊhÎ׈àµíeV±5– / ò¥R˜Ñ1â—›À0صtD•á6d×JKƒx×ycµÂ°c Újø|ŒaƤÚ
+ ëœóV®Îƒ‹zµ}íc¢VÃ^­3rŒ²æÊO~1Q)U’Ìb»a“屜㺼 2xáÚ-Ö6–ÓìãzÂ+VrdÆ]ª–S`5ŽqN˜jrµÂ0’Û_Æ/g^÷Øjñ鮸?K?°VäBWr2„bЮ§²›bǘDû´œ3U}ËJ‰da)ˆºhE†¬ª”Ö
+ÃŽ‰¼ZƤE´ #,¡hÝÄÆBé©æ®uZˆDI}J'ÏÓÙós"9­¤!=åUÛ+6YÁz™`Ò
+›rÓ´3t{*Kçð2À¢6A&‰p#­…6$ã3Ÿ©-1´ê÷ígΗôÝ "ÝÎÓïI£ÝéÏï‹“j:±™9)ë.+ŸU¯_bœIµ˜1Í’Ñ;FŸF“uûhªù<›ªÖ -YÃ0÷¼*Ï1Æ!ª×ež1éCœhFXyƒsÈ.¿®çŒyÝ \·÷­ÀÉÙ¥ý8ëš´øÿW¯¿tmïýÆe.û×?Œ‰Çˆ~ïG˜÷²é]îôו„°€Å{XqèvE‚—¸ýºì-Ú^m;š ½°86YË»˜aÄVÆBà]lpa”f9Ï.¬—.¬a˜mi‡ª5’ê®÷qŒû¼;i6§/o¶¤ÖL/oÆ›,™KûÒ1[ºÉù¾¨ÃåyQ!rƒ*Ї)áI¬¹­>.¹ü¿Ž“Ûotw¯ôendstream
+endobj
+1709 0 obj
+1155
+endobj
+1706 0 obj <<
+/XObject << /Im22 1708 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1698 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 280.999 400.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1710 0 R
+/Length 1711 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1711 0 obj
+30
+endobj
+1712 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 280 400]
+/Resources <<
+/ProcSet [ /PDF ]
+>>
+/Length 1713 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíX¹Ž1 íç+òQîã ¨Q BBb
+*~{rÙžìj·Á"­òüÆqâ3k´Uúïó:~Vý8¬/:¦¬\‰:Û ®‰xã´+NYµõQyÛÖty_ŸGµºÖâ'’‘@4ŒõØã<&’ª¶!©¡ÁE¾ÇXŸÇ°b2†Ý]ƒ<Çy|ÿ·Ï¦>_”3øÿ+8ôÛ1õÎÓÖˆ· 7[íƒúy|>Ìý]û"¨ßýÊÊýîf»ÉàF‹‰:ÆÆ=P·”!;€®šC„³ŒÛ Ñâfø²Øœ‰â=Û»Cä4”47ç2rS„=¶—2Ê^ÆJ ,0ø•±¦B¶Ø>תKâ d„]‚ƒiº¶ìd,áÿÅ..¥0ò0àeªº~ Œ-1d9]¤X1F{€Rv¹æ–ÂðO'¯’ËÍKÉj n’.ïÌß·p²â²ëH˜:æFŠ nÝ°<±k! ö6<D¥Œ°EÊž½•"»z®§mŽJÙuÄ´KÛ"Â]Æ
+8Ñê`ö)*e‹]QMl1*1ª3êj æY,¸QAÖic°&bœæ¹F?J î%ç ùª‚g«ƒ °Ú!Þ×mßÜ´욈õ~‹¬2ÊN›=_†•ã!qÖ¬,\†çˆ`Œeìi!ÛÂ=Ý£¬uªi¶1w‚3[¬ˆMOCÒ)ªÐcÐú|{h¬›×8v×¥ŠçŸ_õšTR­y®kÁä¯M‹ÀHåÜä™”½Ô²êÓ‡W›"yނ;¡Þu(Ù0ŠÊ£ ùj“dR¶Øã:îæ"0Â2%Ù«
+ͧ¼F\îkꮆE¼èd‹®a"K0¸)f¯s s=ÂäÖ"°k!»$2š$xFX.CSÎD#!3å®Ñ‰—î^6–3Ŷvd”¦“c‹•|Ô6KÐËÄñÝ⬊cM«âÀ@ ôGËD’‡cYt)ä×ZÒ¢(±k"Û6&d„Mb^b£Ù8ÆšDÈ®5àŠ<
+³éå›æÀ€…mǹý´)d„Mÿ´@Ȩ½dL:p
+8,FN!ƒiÇTºžGr;C<y ¼â«kCŒtÜ‘²5¼‘éQ@„ù0Jq24šœƒ¼µ¥ÄV¢,YûžìÝ+@Ê(+‘c•r`tX_¬Ç#h²×Ó`±  ›ŒøÃZ–еû‡€ö®ù }´‘¨am²SÊÈm²SÊ^ꉣý¾Ü …)›öûü¶oN[ãÿ¿züg{”ûWÿÖÏ¿Ý<öÎè5Kßö¨[Õ{©gú†/ø°HXð±Ë«”@K@‹p®P²½œû–ÃÚ ß´F?›³e,‰-{Ý ŒèªØ$ ¼îL¹{„¬kŽék6Çt ‹œ¿G®ùUÁô¾ó\}O2¦-[Þ8̽oàd¯$Ž-VÄ
+βñîÚÊßóØšºÛ’ Ý "Ô€±,·(Š×¸6rüßçÉÇã"èJSendstream
+endobj
+1713 0 obj
+1142
+endobj
+1710 0 obj <<
+/XObject << /Im23 1712 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1704 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [327.734 373.331 333.189 387.56]
+/Subtype /Link
+/A << /S /GoTo /D (figure.8) >>
+>> endobj
+1705 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [290.029 292.036 295.484 306.265]
+/Subtype /Link
+/A << /S /GoTo /D (figure.9) >>
+>> endobj
+1699 0 obj <<
+/D [1701 0 R /XYZ 72 786.278 null]
+>> endobj
+1696 0 obj <<
+/D [1701 0 R /XYZ 119.553 518.117 null]
+>> endobj
+361 0 obj <<
+/D [1701 0 R /XYZ 72 169.644 null]
+>> endobj
+1700 0 obj <<
+/Font << /F15 393 0 R /F39 496 0 R /F37 380 0 R /F30 512 0 R >>
+/XObject << /Fm22 1697 0 R /Fm23 1698 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1719 0 obj <<
+/Length 1720 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕXK³£¶ÞŸMþ»‹«Æ=Pvs’LU’UªÎ.¹ °­ ñLùíéV 6cŸ;¹›”«ŒZ-uë믱 † 4tª"®Ó ?>±€~‚±õ ô‘¤LD”H|{ ¸%·\F&V䙌”ÁV$2bF£xð1ˆ#íÆÇ'ô~¼Lñß¾;rüÐ<ýúüú´Å‘0©ß/è­-ƒÝ´ÃQ’«HJÔôüÊX°vl‚—“|)~ ßÙýЖ›-OuÈâï6[ÉYø}Sw};ä½mjjvô<emVUeEoÏ埶l±m`¤?`K…]¹?–õ†«°ï"Th—ƒ[" ›ÖîmU$™íž†~Ðvôì öžýÚÖ?‹¬;”Åæ¿/?ÃÞ· Í7Ά®ßp~®@`"Ìê‚ýÁõÈ°²ûöÑÓë¾ÍPÿg/Þ–õÛº°yÖ—ÝÕôþ`sœðúG«Kæ äÌôQGæ[(nIêl«Š:Û²*/°k›ãܸÄÙö{ÌdUÙzŽLxø\¡ÃÒ|v Ãr06–»[Þ~n'³±:;zëp:i,Âw›T†C ö¶Ç¦-߀@ÊC{<¡ßáÈú¬ž©ã€^0æXŒòêHÖ’dG{×®×x¼)÷`¿aQö™­J<;ÁÃÂvùÐu€8ŠØB„{Kþ®éÕú'6ÊO}„‹>ýø2‹'@a¤•y«*2BAà˜(MÔýÈALÃ:ß¾f6ÊY”ˆÔ‹œ6 '¸p{‡>t„ŽŸ¿Ð®’Håç<ÜásÐá-NæbãÔÚ:·§Ê½ÆaöžŽ]t‰,„DÞpöŸIOÝгjê½ _PäbžÙ¸€m ’jÚ‚„؈|<Ò-‹El6?ØK0ÀÁ*mÂç!ÃXhwøŒQ¹d<Ü•gjdEa‘cÐ926aîx'›„MU $EZ¯/Ïjj¹%½d§SÛàÌOö¸,húÇÁö^€cæ`»rŒ¨ƒW´Zw6/T fTðÝ5ü¶#¬d ž¾„B J~B¬Àï›ëU
+É11îÇûQï<•ªt‚™ÒS˜ã@AÙ«|¥M81wô8õ˜¹«QŽö`À>Ç5!Y”µK2ŽÓŒŒtjæé×åR\FŒ›Æ×c®8º‘ñD(¡ LãÈœ¯uÝHË0}”Y ¥F¦B¡z¶®wKž [˜…@ž9¦‹ÛÁGèð …@NÕt5Cõ…ƒ­òU¶Îvlù©dQû™:ç5 úhªéÍmSÿ§'ÙªÌ
+ °Ñ¤R…ûƧ+ü/¨¯-Oö°ˆñ̇?ô;Öp ¯ÕDßÞ®ˆNsŒ0HÉ\8©ŸPÔ·tþ2QSU.eœÁko°Oàæ)ŠaÜWj0¥(»¼µSˆsLL‡ôâ,9ÜÐ{‰ŒSá%x<å .˜Á¢Äƒ¯\Ar<wÔ»k†–ZäêÆ—aÝJüñ(–˜ #m¸³û/ï×…P¢]÷[?WS9FnÄR@bOÈ­ñJðÂ|“
+E·^%Zùž½Ç…i¤øz
+Kä?åÙ4’Æ|=Ó
+-1-0ꫳï5ÑB”xõîžI^î Ý¡\®±ÊOSO‰)qïÈ€{š \95­ 6ýÚ Übt:í2Ĉ½º»À¥Éœ’S9ÖúКÊ`~ªF")=º¯lïËæXö-þNhI,o¨Tpì ²P8Èùî†Öh©1ífQ?¬xGJ•˜|5ªÿi!{û‘>Ær¢"“>¼éçð¥!˜zD[FÝ,°1çw¾ÔÿŸ=!endstream
+endobj
+1720 0 obj
+2049
+endobj
+1718 0 obj <<
+/Type /Page
+/Contents 1719 0 R
+/Resources 1717 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1664 0 R
+/Annots [ 1721 0 R ]
+>> endobj
+1715 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 606.998 506.998]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1722 0 R
+/Length 1723 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1723 0 obj
+30
+endobj
+1724 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 606 506]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/Font <<
+/R6 1725 0 R
+>>
+>>
+/Length 1726 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ­X=¯eµí÷¯H÷ ¸!‰óY2€¨f˜+½bDuР9HTü}–'Ù‰„ÞOÌÕÁŽ½l'Žílg½qüŸþ>ž×_×üý÷"g(™'ÿ&GÙ|¾²#¿ý?Ö?_¿]^Î6ç[öæÇË›ß/ïœ3_©:›Z4‘’­ž±| f™à„eÈu:*’Ò±
+ý¸>^ Ÿ Áÿ~‹¿þÿžÃ‰29© ¨l² 6×dbéÓ®Ò+¥j±+K"©18žl Ñ j»A?®áÅàL/áŒãq½a?ʶχ]óƇX¦Åu³v°èùààÚðm˜4 …ÉÏŒøÖ6 ƒf ݇%Q€r˜xCJ–ídŸ7NwŒ\GêøÊ…9ql0BkÀ¢‡ÙÅéŽ)
+…K ¤ng!Žnr"äƒ Å›™N"rÓõNÃr.dc¹I¤aÒ~j('â>á\&B,» ¥¡1¼ÃËpÄ¡Ñ9ä”Gä›9¸É¨ÙF™1œ  É±@p¡/wfËRî:÷º©/:wùňiꇰáw’ñÕþXχzÞñ9¨Oœàò×4aP]×y+óô”þ MÜ/W» …ÆÊR i%=¬UHy_£%>LôgVC-Ð*!0ÿå$HŸîS²w‘l%>›ßŸá?NÅd1ß;xÃîQÂéÕfRÆ)ùÂS‹ôrž’=I)EØq&VÄ”"v…"2ÁäŠnlÞ ´F\0È
++úÁžP•¾é|éñð‚øxþþ¦o†ŒÌ=ò¬» o^|£~jÂËüiQ7Y|ŠxŠ÷“Æ4­~XOKàè&æΔ]ûpýù/{öendstream
+endobj
+1726 0 obj
+1821
+endobj
+1725 0 obj
+<<
+/Type /Font
+/Name /R6
+/Subtype /Type1
+/BaseFont /Helvetica
+>>
+endobj
+1722 0 obj <<
+/XObject << /Im24 1724 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1721 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [123.724 106.036 134.633 115.733]
+/Subtype /Link
+/A << /S /GoTo /D (figure.10) >>
+>> endobj
+1716 0 obj <<
+/D [1718 0 R /XYZ 72 786.278 null]
+>> endobj
+1714 0 obj <<
+/D [1718 0 R /XYZ 124.464 380.735 null]
+>> endobj
+1717 0 obj <<
+/Font << /F15 393 0 R /F39 496 0 R /F33 497 0 R /F30 512 0 R /F34 583 0 R >>
+/XObject << /Fm24 1715 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1743 0 obj <<
+/Length 1744 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÝ\I“ÛÆöY? g9eî}qJÛ±*N.9(§8hˆ™AD##iR.ÿö¼×ÝXÙ
+¼;B¸ª)W\&FI¤ÿþÝ«oÞR¹ $±Ä.ÞÝ9Úwë,ªnVÜÐå&Ïöþê!ÝÜÁ•¶Ëê!óMûª,>Ü0³Ì>çëêáæŸïþòÍ[N:ÝQÎÂEèô³§è HY¤
+)vöù†iõŒÃå]Yl#}K•PÎ,ÑR»·E¢ÅŠ%Dàߺù»ø¨œËzÔÝÚF–ë¼Ìn«¼ØùÛ<°`UY¹ÍwY ß™dÔMq³‚æÛ´}¿¸ 3£4ÑT/V%aÝà@­—E¾Ã¾ªÈ29I7‡Ë„®doßGÖiÃXXfr³B,ßÞ¾,J˜çaÖxÑp¾ð ·~E¹Îwiå”
+²Xé„ꉲ˜Y kWÖ/òMŒC4‘´V·ïÆð³
+§ë
+£M«@ã86¶1Ûß×íuÀLñn ®²/àÀö¾¸U; ¿û<¼aµí9÷~,Ø'TĹÊ/&ÚÚ–È×äÎì‹möù!óa›/ ‡fX SX†±´äZ|¤véØV>y<„meñôîæ8ƱX¡d/¥ôëvu:œÙCº,´-ØÅ\„€Ü£qôÅŸË/Rü׾Ȗ'Yƒ-TˆqEÜÓEÓ‹¾¦ÑÃt·7H—DÀ–èMÜÊ¥”çÇ«cSÀô¢3…¯e€8È
+.E³ÿø;äKí¨GC'BÖìcŒqµ^œª¯½ÃT}=. ­Á]éºLÚÓ0¼íåCÀ(cBÿÛ| ïHºt¥kŽF 7 0±*‘4¥ …ãáCp¦‚É„ 2ÿnñQ©®1`µBP_+Trù6¿ò•ª€.5…hk¨;.
+¬f黶úÙÔ(ºÉJ05ŠW¯IVüÍ¿ÍLã¶Á#! !‰Šˆ$Ä]€45Ÿ+Ïg_ù ¶50¸ Qkíišó9Hïžør5Übå$$[¦*Ô°Ž^üU¶ÎÓ*œ‘é#­ý·1®Xš‹ªÓB`³EtÙB£ÑL«.[ÞøØýÒv¸Á  nT2w×ìñp׳¦ã@§fìþ‚cT¸á tÊ7ªæ\9¦0^+Eêìyä°‹Rl~Ùíà`H`GÃlXâYÉ€¼(`
+&€U
+†„)+`úS*sÀøT c':1>¢a,îÄFUL:ãG4L £×T1£Åüôy¨bmMãëéšÆ¬c5 yDÇ,îÓê˜
+«_Raí•NÅ1Ôy;(î<Œ;Û¯ îh<ƒ9Õ1«Ë3–6©Á”JŽkyC„ò ÿ›ŽYŒè¹šã˜Ùu³œë˜!§6µdlbˆJFái]ZŸ¨•M #ÓB1WI+ʼnY%˜ «XÚ¢ÔÌ?)3•XŒr²rþÀChIÿkÐ㉾(}¡$êù¬ûô㺞/”â™
+R¼Ø§[w¥–÷Y±Íª2¿Å“nÌU‘|²>* ¨À"ñ–›ñþÇûä€)ÔßÕO¯ï ûBsšÁ–{Ô¶ÂÞJÿ4w"”>g¦,6Syf’iÓî"ÔU=¼Û ¡µ>ŒH}ÛÓ.¯¼$|]ö¶*ÊØv㊱´rùסùrwà/x{:§0Ù_¯Ûê ¬£ôUÂl·ÎoŸ6ié#nUô¾·½#²£'*%ÿ ^®ÄjÜ·^-MŠ÷UšÇÏR3ת÷U]Œ ÞÙ¹fÕ/ã_Õ @Â0 D‹Îg/3b°œœÈô—hjÞ)ó‘ÀÔ,ÐÀVTVZµGM ¥HŒmIF1Öúðä¿ÉiÍîcû=ŒUè¬(‡~ã±Û“¬ðè§ÒÓNfÆöØüÄhZS.ûdhÆ,ÄÉú*pJ‘d¡7Ž?ÅóÑ#™Ïª%
+øa„½T:Â+ñ÷*Ÿb^Ìßç¨Óµú,ööã3w5W„Nœž‰ZèE¨…°„(vŠöz¤"6éYõ ÏÿhqPbˆónö¼c–€ùØL¯û;3j)øZ«ùKèlÂå:’H.Oî–‡r–d~«x8ínÕÀæ¸[vUwû;ÃcîöTööÜ­0y;wËÎt·ì:I"ر Gÿ3ÜõåT˧¬>X*ÇólYÐ
+endobj
+1744 0 obj
+3422
+endobj
+1742 0 obj <<
+/Type /Page
+/Contents 1743 0 R
+/Resources 1741 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1748 0 R
+/Annots [ 1745 0 R 1746 0 R 1747 0 R ]
+>> endobj
+1745 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [197.712 386.324 208.621 398.997]
+/Subtype /Link
+/A << /S /GoTo /D (figure.10) >>
+>> endobj
+1746 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [322.372 176.102 327.826 185.799]
+/Subtype /Link
+/A << /S /GoTo /D (equation.1) >>
+>> endobj
+1747 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [351.184 176.102 356.639 185.799]
+/Subtype /Link
+/A << /S /GoTo /D (equation.2) >>
+>> endobj
+1740 0 obj <<
+/D [1742 0 R /XYZ 72 786.278 null]
+>> endobj
+1727 0 obj <<
+/D [1742 0 R /XYZ 245.077 721.804 null]
+>> endobj
+1728 0 obj <<
+/D [1742 0 R /XYZ 243.414 674.798 null]
+>> endobj
+1729 0 obj <<
+/D [1742 0 R /XYZ 244.773 536.586 null]
+>> endobj
+1730 0 obj <<
+/D [1742 0 R /XYZ 244.865 503.163 null]
+>> endobj
+1731 0 obj <<
+/D [1742 0 R /XYZ 262.296 370.917 null]
+>> endobj
+1732 0 obj <<
+/D [1742 0 R /XYZ 262.098 341.703 null]
+>> endobj
+1733 0 obj <<
+/D [1742 0 R /XYZ 261.842 312.489 null]
+>> endobj
+1734 0 obj <<
+/D [1742 0 R /XYZ 259.062 283.274 null]
+>> endobj
+1735 0 obj <<
+/D [1742 0 R /XYZ 259.062 254.06 null]
+>> endobj
+1736 0 obj <<
+/D [1742 0 R /XYZ 200.712 214.152 null]
+>> endobj
+1737 0 obj <<
+/D [1742 0 R /XYZ 211.37 149.614 null]
+>> endobj
+1738 0 obj <<
+/D [1742 0 R /XYZ 207.275 106.128 null]
+>> endobj
+1741 0 obj <<
+/Font << /F15 393 0 R /F30 512 0 R /F34 583 0 R /F31 881 0 R /F33 497 0 R /F39 496 0 R /F28 523 0 R /F1 882 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1758 0 obj <<
+/Length 1759 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚí\Íã¶_ô˜Ssi¯î̓¬Yñ›Ü"‡lš h¶‡zhzÐz4ca=öFöìdÓ¿½ï‘”õEY²¬Ù h°ÀŽ,QÔ#ùÞï}’t‘À?ºÐl¡"L›Åúá3ºðÿÞ-Ê«?Á=ßRHN¤À_ WBRb¹]¬8'4q¿~óÙo¿åð4!6±‹7w®í›Û¿/ÿsó7\¬(Q [¬ÑR»ûÅûðŽXhb5¾aˆ¤vÁ‰•ÖµH| fN- IÕb¥ˆæÔµQ¾ •µ/•]À—`ìØfîn€T¾Üío˜Y>á±|{³bz™ùëýÃûÇcvëÛ¥‡@[}<TB%¢-k› 2çÆ&+MXÒ?6M´â06eý—¾ŒQ
+«Bõ¢"g` jDh’àH %×gh ÐAÕæ‹8 ŒÙ. Œð î``„2BB£{ Àj$üÛ|öÍ›Š™9fÆ~á‰êciǶÁ•lû]"ÊáÚîšZ­%&^ VÔ¸™/Å$ú½§MVd‘‘rI$| gÌÄ'Ò O¤ê]K¸RB,ªF%CÑS?)€%Ìú&OåŒ(¸‚´Iø,` ´J`nÌ¢Èw§yP0_ÈT衧I¨ZN‹ _ªÔ¿êG/4rg°Š14ÖŠi|›—7+Éé2' —Ç à°lù"[÷…ÿ½/Ž›ýý~—nñw²<îýýÓ ëÇ¿ã¦ÇÈX“ÄZÙ]Ë~˜3‚)F,fbum„OùqƒÑeêéÚf»ûòÖþÎÿݤÛp…£qqxÅñ{ÖΣñáXìß¹!>å·ÐGw|ÒbTLÒfšˆðœÀŒ ½üê
+W WG
+g
+Ñsk%ÑjµCàîº]€/¦@mY¦C`_ ø»D$±nÀ 7Ë)—cæ-ns¨³’V·çX»s†êIŽ
+L:‰—Õ 3CçBxfnEYQ«Q~™i
+#™i¦UÔEÒ²AÃë †±ØLãÄ ^3Ó=¬L9Ã)1 Õz†³ ×TÄ1œÓˆ4 `pˆ¸ž¹ô2COJÃÃ^à$­&a/ÅE—];ªD ÌÊxFtl&H¢+Ä„ùàQ6ÊC&µàõ1™²™÷W S£1ß¡Á8Hw.Í–›l·®;—évû1:x°„\ æRòØ5ga·ãºÅÀ j4À™¦‡3ÍYØíÐÐ`² =.•60-™ÌœÅÄyH(YÑô°¢9‹‰CKa˜¬Ó…2˜¶ÊØPÃyȺÆÌ,06ŽYx³w-mè}6à}X3Ç×&Þ/pmâ?ïQ €B«Z³W ¸ë’
+A—Ùù‰öé˜ä§`('nÓ}9û¤çÄX5e0T\eïï+ð–£<Œâ!½ ¹)‘H—o¬³üã!ØH.½Ãy=¦œ$l·«w!ùJî³ýCv,ò5fôðÍ"Û¦$ÿ<Æš+ª½Ã1™7elÅåL‰ˆ¶;Gó“NYK{!™ý=‘€Rl~ÔUµ5{zx—ÉÒÁ·,ÑQØå!}À+é
+5ź‰Y<ÙU+šÀÈ„`³QkKyŠŽÊ–ScŠ4âD¨`c¹yb„xμžÊë•9ƒrξ˜!6O–4ʃ%™Î>É1å"ƒ%oDd‘š§Kï
+‡fXn.XZå‚’‘J«q1À‹Ý~0ö™·²ºÑ3JÍ¡ÀIѧJ=&
+†è™ƒ!ÓbÐçi€÷m#
+óäÀ¤Qe`nš‹(grx‘ðo~x¿Ýƒ?‡zŽsSçš“„O2Pù³–œ"v‡ýöC
+Aä¿Hδ'¤Gê1•7úÚšÏóªPϤ
+'×u̧
+§WдT!H(ÓŽA™9«1àö—AK;F vßÝt¼µ–SÛÄw¹e®Z]Ÿ<5cŒünò”ÍVrEòtÿMMžŽÒˆc’§¼ õº¹‚}•×‚NöÁôp
+°N[nË£Õ/Ü8 
+®„žE%šö°í8\Dz³p[hAzüqhßš•dNÕ
+7 ×Eì¶#b2H'ˆ‡m¨ÙFtD;…ÏÀ"墯.ÙW@ÀK‚MÍèÞ
+œä¨^Ê ?ã5(¸qÀ0~EDmBJuFеÍwYZøílxtØê ÿë¬W /]wÀÃøi2ô2ì9øþ1õˆ›óìð²g‡œâ¥Øþªƒ8
+Æć,L´Q8]TÒ]»p§t"jçeLLx¢\ù8 ø‹2q¿wÓ`¹9@þ˜³ZÁ%¥;1‹•-á¾€7x¾Xy¼S˜'¶åŽ€Vž˜±r÷€XùýÆguÝÏMØM—ˆ ‡°*wÕÞŽîvE8X.žžg‡…óÙÔ°Ư(
+ð\)qÅq±!@;îb+Ó³ÂzÞ¬ðËúÞ†°ñÁg…]ZP3$ †¬ÞÓ© -¶w—ò²Â ?ð‹a?Ûõtøx8fX9ÁåiÛ…i]ÖP^u[Ì
+ëÆc”Ösq-EªŒrâbjiûxu³¾$9Àûâvs7[C@/>iGÌýK‡³šIµ¬'ø^ÐYWÕÒ0ˆw€þàójsv+»pǤàáb"xÌqìC®x´î\ÍWJ”›WÛn,z¿½«àW¬(å½ûªñ
+ kG®|ÙíÉ׎ Ä…%ÀµÁˆÆá]Wß Ä}œ´fǾø4ÅÄÍD¬%ê> ‚j­eÉɧišyœ:f\,¸°k_<8S
+.Ò3Ë´Ü«Xy.N‡ƒó>˜i0t¡‘ÃSÜØèëÂ@ižöÝø•® n¯÷ÛLJ¿®õì4/CÍöJB³êm¯5U©jU ¨Ž³š:Ëók«•ˆþE~<f»æ‰µ ÁQ9±ä·ÇÈøl"N?µŒ³Ñ2>“®ç™MÕ5£ÄüB×4Ðëkd}$/"g¹JSZ#´óxZßØ1€×:Ž×æ“ൎ/¤y¼î„¹eàçÞN„v-žoF§¢ºձ♩¡ö üvN7cXÓñCpŒìŒçð_²ÈÏendstream
+endobj
+1759 0 obj
+4215
+endobj
+1757 0 obj <<
+/Type /Page
+/Contents 1758 0 R
+/Resources 1756 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1748 0 R
+/Annots [ 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R ]
+>> endobj
+1760 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [220.978 686.632 231.887 699.955]
+/Subtype /Link
+/A << /S /GoTo /D (figure.10) >>
+>> endobj
+1761 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [327.153 520.715 332.607 531.624]
+/Subtype /Link
+/A << /S /GoTo /D (equation.3) >>
+>> endobj
+1762 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [357.269 520.715 362.723 531.624]
+/Subtype /Link
+/A << /S /GoTo /D (equation.4) >>
+>> endobj
+1763 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [466.619 520.715 477.528 531.624]
+/Subtype /Link
+/A << /S /GoTo /D (equation.14) >>
+>> endobj
+1764 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [305.423 507.772 310.878 517.347]
+/Subtype /Link
+/A << /S /GoTo /D (equation.5) >>
+>> endobj
+1765 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [323.605 507.772 329.06 517.347]
+/Subtype /Link
+/A << /S /GoTo /D (equation.9) >>
+>> endobj
+1766 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [319.475 494.222 330.384 503.919]
+/Subtype /Link
+/A << /S /GoTo /D (equation.10) >>
+>> endobj
+1767 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [145.03 438.412 155.939 451.085]
+/Subtype /Link
+/A << /S /GoTo /D (equation.13) >>
+>> endobj
+1768 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [360.341 438.412 371.25 451.085]
+/Subtype /Link
+/A << /S /GoTo /D (equation.15) >>
+>> endobj
+1769 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [156.645 367.91 167.554 381.233]
+/Subtype /Link
+/A << /S /GoTo /D (equation.14) >>
+>> endobj
+1770 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [173.754 203.397 179.209 216.07]
+/Subtype /Link
+/A << /S /GoTo /D (equation.4) >>
+>> endobj
+1771 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [204.633 203.397 215.542 216.07]
+/Subtype /Link
+/A << /S /GoTo /D (equation.17) >>
+>> endobj
+1772 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [494.735 188.207 500.19 200.151]
+/Subtype /Link
+/A << /S /GoTo /D (equation.4) >>
+>> endobj
+1773 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [76.242 175.693 87.151 186.602]
+/Subtype /Link
+/A << /S /GoTo /D (equation.17) >>
+>> endobj
+1755 0 obj <<
+/D [1757 0 R /XYZ 72 786.278 null]
+>> endobj
+1739 0 obj <<
+/D [1757 0 R /XYZ 263.922 750.413 null]
+>> endobj
+1749 0 obj <<
+/D [1757 0 R /XYZ 197.152 573.379 null]
+>> endobj
+1750 0 obj <<
+/D [1757 0 R /XYZ 195.122 478.166 null]
+>> endobj
+1751 0 obj <<
+/D [1757 0 R /XYZ 221.002 424.922 null]
+>> endobj
+1752 0 obj <<
+/D [1757 0 R /XYZ 133.303 340.871 null]
+>> endobj
+1753 0 obj <<
+/D [1757 0 R /XYZ 202.629 162.463 null]
+>> endobj
+1754 0 obj <<
+/D [1757 0 R /XYZ 194.546 101.346 null]
+>> endobj
+1756 0 obj <<
+/Font << /F30 512 0 R /F34 583 0 R /F28 523 0 R /F15 393 0 R /F31 881 0 R /F33 497 0 R /F1 882 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1781 0 obj <<
+/Length 1782 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚÕZIãÆrœòtdÓ4káv´'`âC ¤’8Ru‹iŠ”IʳÀÈoÏÛŠ,JìV19 hÖòj{õÞ÷–’Ú$ð§6¹ÞäEë¼Øl¯Ô†ÿ7¾ô´1¥MMœZ¬]!¼õ”·&‹,Eúî^}÷V¥•ÄeRnîî‰ön÷ÏèïíÖÝüûîoß½5IЭË8UçiNdÿEšÍ­Š3£7·sûk7y\æ8²ˆS8Œ‰Ë´$Š„)‹g±5¸¿‰h_ 7·Æ˜èýÍ­."çZ®n»Ãñ4ºÝk®Ö£|‰ÚF®>qiìÖN”صY;6gúaåL…VWÎãË,<Ók"8Ð'.ªÇº}àòip¼õî¿:úñק}õãÝt•&ƒèœï°ùqãK?=s¯*;Ÿ ižŸ§§Š™O&SÐצP¼øŒßóYîÝ>KïUÿ(·SáeæQw’[÷Ž ÕñØwÕöF—Ñž[vnØöµ\þN¨¸Ú!ÿ~盛9öu5º ÎÝš.Íä¸í8a%xNiT›Ì0wˆƬpâ/çˤ±MÓë*‰d6˜|•Íï΄»j†ŽKGæã0Ôï·”÷%ÊöøþÛÓèºE~kš¡l\(KšQœk†eÍ(žÑ ýmסfTíŽEöØžiÚ€À%¹úzZ
+·[°–Hÿá%×jµ¨õ§ƒëëmÕpÓ0Vïëì
+ð5Í
+ ]‹‡B£P3%·û§1ž” ´·•c_H”X¨XqÇIYþˆ(¾"®XÊ…öiSÆ&Ñß”ö¡¬è¢¸¼ql<T7 ÍŸ°’{o ¤Øa©Œ>»¾ã^’Ê€Ã·Õ ¤$2ÔDºWF¾½¯ÚÄü0ð¢7×*3
+ ü4Áÿ•ž;HÓ“4º?õps=WÜÇ­;Ž
+Bah:>ª×Ùæàa¥ Á¬&¯¸–Øǵ"u¨˜'Q? íF?fë…6Œ8®sØ‘Úu†«k gåIì õÂ~z&ð:zè$ðÀÿ;n#c ‚­Ón¯O›î‚šJP fn
+¤†˜XÀÓoR°»=ý}I“¨q Þ¢ vk®³Ž3?œÖ)¢uÓ𞺶ùÄ›
++uªW<ËÉKöP;òâgg}Ú&hE_?Ô ]P›ÌÅíÌ>VÞäXe å=V}ÕÐías¦žÛª4ó½À
+ºøⱸû?
+ٳ̢¯ìùpC vyˆÖ‰ë$ù™žÇåYÈ+¸ê£ÈØ3–PΑø[Ðì,×y~ÎIh!ÆÀ€wuª‡=Ï)ú0oS}8$Ø35 ý®Ç
+C8“DŽD…¦ü3F`“=;;ÜPƒ\´=m”MÀ"•W-’co® u±NÛâk™¤7,RÌÛ¬ûoº¾uýÊÙY ,bhÝ*V*TX,“ ¾ºŽûÖe{fYÀ, X:“›¥r‘Ø ¢wê[YK–àà
+»™ˆÐiªu[Ù*0!|d*³ÈÑN Ê@g¬¢8}«òÉÅ…§ýÁè£Ç/7 áN@ %ž)dž­Â(U~€·Ëcˆ¤ƒ…i…§Š§6ʳD3á´;.{'˜È=:€aK#i ˜Fبæ4T-7ŠÏçúÁ>ö
+¶Í‚€
+x¹{á¤Ñfæ ­&€;&À*ÎÙ uhû5ìÖµŒ¸ZŒÖ^Ö] úü<-{=~ð8‹‹"YÒÚ'}ž€2‰u¦¾Žþëÿ·þo«ó ø
+,¬£À–R þà€ÆÀάÉŸfÀV‘[eè"_ûC+ƒSÊùK‘+9¿ÎLp~ÈçÇÒR8qŽ…¦]
+¦wð4Ø¿¶þà^¼OE…ÉÂïîÔHçÒ¸j°Æ” ž)m}}8¸T:ùî]Ý3ñ%àTË·˜³w7è1LǬ€ÁÝÇ/Q‘ùRЧ¢3eÅâÐq¨§$ôŽ‡DõµÓÓvÒæaȽs2xZ)
+Ê“i+¡'ï1\h‘ fb8ÿn^Ö¿H<ʳøns‚ŸÌðMai›yÇÔvl{¡‚™ÓcïR€Ð|ó³­ôÊkwq´<ÜàÈê i4ìyÒ–«<¡ÞÖhe.ÞQ“8ËsàJZÄI’ÿ·õ5ßJnm^ˆãh#êÈ"0ô£O¡q‘Kà–Pš{Ñ¡Þí)÷^ËpÁ¢ô aúÇr€ó;±³vÎóŠk€¶ «»jØ“DX|ˆ çÆýÆâ8ïÇ[Ì»BY¢{¡Zý¤MÅ8¹éf½ç <ôž€‚~1“{|Í=çé”Ó©¸=°’g±üZ:X(Îy6¢ÐÅô( NkQrv˜,£V’@6ÎÞÌ4h?s}ïhÞu
+V¹i˜éSb»ÈQ¥gFù‡t>öd;n1•­t¹L€•kH×Á¦¢o:H±“ï^,wÈ^4ÔÚÙtWü¹pLÙv³cJ±cê­øn6冊èäÄè ¢øéËà}%̓Äâž^èÊ5Zë¾ä3ys}î³Yaç Öd ¬
+
+Ãßðé|þ w2Ñå/¾°ø\{^O¯\X¢”§ïKY¬²ç1¬øRé§@Òú­-äŽvÊáaκ€•ï˜¢È\ẌUf±)–FmyYàn6ÌA8ËigÍŽQ"¨2ü!w`Úµ¢©`·(`Óqì»öXÆêe ÿepa1·ª<Ë<@ÃzäÛ…~ò·±cz_üÐiö’8-ôµü‹Ö*6êêo¼Êòâ''ÐU?“áù{õýendstream
+endobj
+1782 0 obj
+3336
+endobj
+1780 0 obj <<
+/Type /Page
+/Contents 1781 0 R
+/Resources 1779 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1748 0 R
+/Annots [ 1783 0 R 1784 0 R 1785 0 R 1786 0 R ]
+>> endobj
+1783 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [439.927 748.292 450.837 760.964]
+/Subtype /Link
+/A << /S /GoTo /D (equation.16) >>
+>> endobj
+1784 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [412.343 712.227 423.252 724.9]
+/Subtype /Link
+/A << /S /GoTo /D (equation.16) >>
+>> endobj
+1785 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [300.393 662.613 311.302 672.31]
+/Subtype /Link
+/A << /S /GoTo /D (equation.18) >>
+>> endobj
+1786 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [409.949 179.632 420.858 189.329]
+/Subtype /Link
+/A << /S /GoTo /D (figure.11) >>
+>> endobj
+1778 0 obj <<
+/D [1780 0 R /XYZ 72 786.278 null]
+>> endobj
+365 0 obj <<
+/D [1780 0 R /XYZ 72 525.605 null]
+>> endobj
+1774 0 obj <<
+/D [1780 0 R /XYZ 72 448.053 null]
+>> endobj
+1775 0 obj <<
+/D [1780 0 R /XYZ 72 355.671 null]
+>> endobj
+1779 0 obj <<
+/Font << /F15 393 0 R /F30 512 0 R /F34 583 0 R /F33 497 0 R /F39 496 0 R /F37 380 0 R /F28 523 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1790 0 obj <<
+/Length 1791 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚµYKoÜȾ;‚Èe)`ÕÛ/’M# '16ÉɺÅ9PdKØCŽù­K~{ªºŠÎ %yí†ÍbuuUõWn©HŸŠ2e.:sQ¹¥"ú{Í£¿8mbDbñíÆë™óZ[‘Ëô%þTd0Tˆ>DJð'~õÃÂÍ„Þîuý±{õó«èçW×,ÃÁz†5Õ‘&wQ£nób ™MPЛ¥’HI˜›G7wó¦úWü¶¾Ÿzumu+õúê:5:þ=¾»xØMƒÃ,öŸJßF¢#ǧÁ¾®ª†Ç}}¿»ÒyÌ<w}·?ã.¯@Æ®è‹rô=‘Þ)cßüš¤wwDûC·?LÀñ·îê^+ß·Wÿ¾ù è}­Ðô<èÿÏn_´âê:Éd|ƒ+˜,ëÊ “x_ÀºðS—3¥›Æ¦n=¿ÜÑsÜ1áT¶i|…oUÍVª"C=ÐîC;>¶LngAu°ï=½VÅ°#aI<Œøá±ñbÃŽŸüxÌ8-ò;µö¤q&>€%ô!( OR¦œ¨ùÝ@Ä£(Ëz?øGðF×½èYÄÚx­ù¹÷U=홥kꊇϙò¾kºö~^Å(ò™± µ‚}ƒC
+¸VØ¿y¤m1NK™§•Sÿp•¤qøH
+xI8`c‹ž×ò‰DóŒD뀟Ëø}MM!g.—s‡@_Qø è"lî_˜~€fÚÜf~£Ö2©Ò@8™åŸ_
+e×Lû–vDA8í¤“0£'å¤j} AKí`×ÒS¸T
+lF±
+eQ1©‚ O\™<};òN&RKøUç²UœðK.RXž½Œùófb„*N—Œ3˜Å¿Ù€›c—c²Ä^7{]+€[«¨‘šN¤Ðe[=_è¯XŽóÅ@œwT .jem…;ÕòwßPËÓ³@–ftýÑÍ“—”Âܦë†~i¡k<Y™…ÓÞ†Q©Zmº4FÒÚ%ÄA–$›4wå(|hº£’:|. xC@Ç™\ž–dJfˌ̆‰TL'8?óZC7‹,xŠÿ¶çt †¦n£Õ5;êöq¹øœ #ŒTß®ï,8á$6%E¼7+ú«†Ã‹wÞ:‚@¯ÒÒÓtïÌT¼©ÁS§ m& ?Œ».T"ŒÂ–H{~sãh‘‹n æ>LpŒªH‚©Ð„znÒæKèëë»ëà6R'/å!­œH\N ëé ¤¤<_BãÿYýtªû)¢Îendstream
+endobj
+1791 0 obj
+2173
+endobj
+1789 0 obj <<
+/Type /Page
+/Contents 1790 0 R
+/Resources 1788 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1748 0 R
+>> endobj
+1777 0 obj <<
+/Type /XObject
+/Subtype /Form
+/BBox [-1 -1 400.999 280.999]
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/Resources 1792 0 R
+/Length 1793 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ+ä2T0
+endobj
+1793 0 obj
+30
+endobj
+1794 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/Matrix [1 0 0 1 0 0]
+/BBox [0 0 400 280]
+/Resources <<
+/ProcSet [ /PDF ]
+>>
+/Length 1795 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚíYË®$' Ý÷WÔ4âià ²Ž²¼Êª£‘FºµÈ*¿Ÿc((U=ì’hFjù”ÍËæ`ûje6ÍÿŽß×þøóa¶¯§ñÑ1ú46i½í“S~cÄ;
+u‘©i@~›HŠ¤F^ÆÈbžjÓSÏQ’ça¹Ú´•4 ·Œá†y¾ü'öh¶_›Õüÿw8øÇ0rÝutV+G›I.+o¶ÏÇo] 1k†´ýµª²µf( Öm²ù£Ô7sÑž ©ƒ­•6
+ÙäŠTÍ ¹°mì=¡û‰UFÿ”j‚äÀéhëCQ§ïya[dâ9ƒò!‰çÝ£}eeÅs6‡ã#<¹ïJxä/.ŸúžU³®æJÏšûGûø¸ËÇŠq'µ\&ßÅä9›b"ЖËë&×|«’îŒíñ¹ˆ5¤PÒ|‹ƒ ÀjªùkÄ[‘jðÌÓ¬8ŒÙpÂ$¤S%s•/¦&PÖQç 
+NŽY§¥
+ÙS‡8BJÓ«
+šoi¹6W¥wZKï!åÖüŠR¥îç@ôkŒRÑ×MÿƒþAÿƒ–Ù;y'•MÅ_ ä¹O_áB^Ô}Ú®4çV©¦È âtPóˆ0²g{ªÊÝí驪À@X¦RWC3gª¾‹%;¼8c{GRÙKÚ\¡‚Üw[O-ÈžHoÒ¸vï¿°mendstream
+endobj
+1795 0 obj
+1815
+endobj
+1792 0 obj <<
+/XObject << /Im25 1794 0 R >>
+/ProcSet [ /PDF ]
+>> endobj
+1787 0 obj <<
+/D [1789 0 R /XYZ 72 786.278 null]
+>> endobj
+1776 0 obj <<
+/D [1789 0 R /XYZ 128.284 418.427 null]
+>> endobj
+369 0 obj <<
+/D [1789 0 R /XYZ 263.359 156.415 null]
+>> endobj
+1788 0 obj <<
+/Font << /F15 393 0 R /F30 512 0 R /F28 523 0 R /F1 882 0 R >>
+/XObject << /Fm25 1777 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1799 0 obj <<
+/Length 1800 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚ•TMoÛ0 ½÷Wø¨
+Al]’#š7=FÚ`É
+endobj
+1800 0 obj
+600
+endobj
+1798 0 obj <<
+/Type /Page
+/Contents 1799 0 R
+/Resources 1797 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1748 0 R
+>> endobj
+1796 0 obj <<
+/D [1798 0 R /XYZ 72 786.278 null]
+>> endobj
+1797 0 obj <<
+/Font << /F15 393 0 R /F39 496 0 R /F27 394 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1805 0 obj <<
+/Length 1806 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåœíoœ6Çß÷¯¸—´RüöË\’Ko½dÑrK+mÓDÁÉYá R%ûëgCNK×Îö–(ªD*|ðïñk0ó嘅pÒÀƒ!ÅÛ7`ÖüÜÎvGåÿ5gb‚<‚Õo='¾ÛùbùAßù¾<1ð°Õ‰óõ›÷ Hf
+Ç'S™Û‡2GU4Jî¢@‚¡=-â[ÚÏ«Åq± 혴1ÆõÍ-#"]g¯ó…Hù%ŠxÓ㶑©5ä£ oO²DDÙ´¤G…b8¡v–ujÐE^(›^;©%0ÛO-A´a—™¨\$ž)¤ÏQ*}UVù-_¤Ñ“®5°”Ò¼ä+ñ¥3Ä2*¡Övx`”«âñ®*{+eGÚŒyGÕiúx·)]/²W55¨OsWeoP
+M48ÄZƒs”ß=ö‰†Œ7`öŒ÷î±6Ý>½ì_pAû\ˆdÿ„«©¢aŠÅ,ŽyÊ+~˜¦—âOGþ‰5ÿlhO²8Oº5s´ˆY¦í‰G¦DÃU ­â˜Ê~]`úÖ0ï·w®âî„.f Ð­({ºRC”î§üëÏ-'ÏGnI¬Ùkƒùá,ª
+ñàdÕAÖV-5°W.a±5X½Õh/ 8ZœåÛ;55®T©³QÔr[ÚÌF…ƒx]¥˜ UàÀ£(ÿÿæÛŸgNyu¸8SboŸÌk®´]ì M Y
+æÚlf±îÙÑöYñ–èºê?íÚð}š¾
+Ðe¹<¹UìÈ|±Eg]VQ*âÃì&u£+`«ºÂG^dÝ¢‚Ɣ鸚5œ¸ýiPf]ñlyÕ7û÷>û=A8¸~L1Š/Ë„wΛ
+HÄ·¨ü­DÆ/òR¨†¸‰GÈb<R´ëˆo3^–nôdS?8ãU!âr™]çnâo`3þžå_¹S›Ø¤=Ï•¨\—+°ìÝ$ƒ:7ÉŒ ÉÁÄ=2l±ª‡Kù•Ù̯繪$."Q”n¼–íÇŽ‰l%bî@
+endobj
+1806 0 obj
+1747
+endobj
+1804 0 obj <<
+/Type /Page
+/Contents 1805 0 R
+/Resources 1803 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1748 0 R
+/Annots [ 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R 1814 0 R 1815 0 R 1816 0 R 1817 0 R 1818 0 R 1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R ]
+>> endobj
+1807 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.756 711.087 192.665 720.784]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1808 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [204.665 697.538 215.574 707.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1809 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 683.685 204.119 693.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1810 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 670.136 209.846 680.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1811 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 656.587 209.846 666.587]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1812 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 643.038 209.846 653.038]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1813 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 629.489 209.846 639.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1814 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [204.665 616.243 215.574 625.94]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1815 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 602.694 169.756 612.391]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1816 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 589.144 175.483 598.841]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1817 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 575.292 204.119 585.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.59) >>
+>> endobj
+1818 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 562.046 175.483 571.743]
+/Subtype /Link
+/A << /S /GoTo /D (page.58) >>
+>> endobj
+1819 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 548.497 169.756 558.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1820 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 534.948 175.483 544.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1821 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 521.399 209.846 531.096]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1822 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 507.85 198.392 517.546]
+/Subtype /Link
+/A << /S /GoTo /D (page.60) >>
+>> endobj
+1823 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [170.301 493.997 181.21 503.997]
+/Subtype /Link
+/A << /S /GoTo /D (page.57) >>
+>> endobj
+1824 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 480.448 186.938 490.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.85) >>
+>> endobj
+1825 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 467.202 186.938 476.899]
+/Subtype /Link
+/A << /S /GoTo /D (page.66) >>
+>> endobj
+1826 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [147.393 453.653 158.302 463.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1827 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 440.104 204.119 449.801]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1828 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [216.119 426.555 227.028 436.252]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1829 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [216.119 413.006 227.028 422.702]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1830 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [170.301 399.456 181.21 409.153]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1831 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 385.907 198.392 395.604]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1832 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 372.358 186.938 382.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1833 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 358.506 204.119 368.506]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1834 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 345.26 164.029 354.957]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1835 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 331.408 186.938 341.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.36) >>
+>> endobj
+1836 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 318.161 198.392 327.858]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1837 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 304.309 164.029 314.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.69) >>
+>> endobj
+1838 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 290.76 169.756 300.76]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1839 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [170.301 277.211 181.21 287.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1840 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 263.965 198.392 273.662]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1841 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 250.113 198.392 260.113]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1842 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 236.867 175.483 246.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1843 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 223.317 175.483 233.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1844 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 209.465 169.756 219.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1845 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 195.916 164.029 205.916]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1846 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 182.67 175.483 192.367]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1847 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.756 169.121 192.665 178.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1848 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.756 155.572 192.665 165.269]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1849 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [170.301 142.023 181.21 151.719]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1850 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 128.17 209.846 138.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.42) >>
+>> endobj
+1851 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 114.621 169.756 124.621]
+/Subtype /Link
+/A << /S /GoTo /D (page.41) >>
+>> endobj
+1852 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [170.301 101.375 181.21 111.072]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1853 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 87.826 198.392 97.523]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1854 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 711.087 442.597 720.784]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1855 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [437.416 697.538 448.325 707.235]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1856 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [420.234 683.685 431.143 693.685]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1857 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [414.507 670.439 425.416 680.136]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1858 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [414.507 656.89 425.416 666.587]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1859 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 643.341 442.597 653.038]
+/Subtype /Link
+/A << /S /GoTo /D (page.64) >>
+>> endobj
+1860 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [425.961 629.489 436.87 639.489]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+1861 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [420.234 616.243 431.143 625.94]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1862 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [437.416 602.391 448.325 612.391]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1863 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [477.506 588.841 488.415 598.841]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1864 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [443.143 575.292 454.052 585.292]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1865 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [454.597 561.743 465.506 571.743]
+/Subtype /Link
+/A << /S /GoTo /D (page.48) >>
+>> endobj
+1866 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [448.87 548.194 459.779 558.194]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1867 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [403.052 534.948 413.961 544.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1868 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [420.628 534.948 431.537 544.645]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1869 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [425.961 521.096 436.87 531.096]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1870 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [448.87 507.85 459.779 517.546]
+/Subtype /Link
+/A << /S /GoTo /D (page.28) >>
+>> endobj
+1871 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [414.507 494.3 425.416 503.997]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1872 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [437.416 480.751 448.325 490.448]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1873 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [437.416 467.202 448.325 476.899]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1874 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [414.507 453.653 425.416 463.35]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1875 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [414.507 440.104 425.416 449.801]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1876 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [437.416 426.555 448.325 436.252]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1877 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 412.702 442.597 422.702]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [408.78 399.153 419.689 409.153]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [397.325 385.907 408.234 395.604]
+/Subtype /Link
+/A << /S /GoTo /D (page.75) >>
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [414.507 372.358 425.416 382.055]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [437.416 358.809 448.325 368.506]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1882 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [443.143 345.26 454.052 354.957]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1883 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 331.711 442.597 341.408]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1884 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 318.161 442.597 327.858]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1885 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [460.324 304.309 471.233 314.309]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1886 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [408.78 291.063 419.689 300.76]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1887 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 277.514 442.597 287.211]
+/Subtype /Link
+/A << /S /GoTo /D (page.49) >>
+>> endobj
+1888 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [403.052 263.965 413.961 273.662]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1889 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [425.961 250.113 436.87 260.113]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1890 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [443.143 236.564 454.052 246.564]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1891 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 223.014 442.597 233.014]
+/Subtype /Link
+/A << /S /GoTo /D (page.46) >>
+>> endobj
+1892 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [425.961 209.768 436.87 219.465]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1893 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 196.219 442.597 205.916]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1894 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [420.234 182.67 431.143 192.367]
+/Subtype /Link
+/A << /S /GoTo /D (page.52) >>
+>> endobj
+1895 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [466.051 169.121 476.961 178.818]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1896 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [471.779 155.572 482.688 165.269]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1897 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [408.78 142.023 419.689 151.719]
+/Subtype /Link
+/A << /S /GoTo /D (page.45) >>
+>> endobj
+1898 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [403.052 128.17 413.961 138.17]
+/Subtype /Link
+/A << /S /GoTo /D (page.44) >>
+>> endobj
+1899 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [391.598 114.924 402.507 124.621]
+/Subtype /Link
+/A << /S /GoTo /D (page.25) >>
+>> endobj
+1900 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [431.688 101.375 442.597 111.072]
+/Subtype /Link
+/A << /S /GoTo /D (page.77) >>
+>> endobj
+1901 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [420.234 87.523 431.143 97.523]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1802 0 obj <<
+/D [1804 0 R /XYZ 72 786.278 null]
+>> endobj
+1801 0 obj <<
+/D [1804 0 R /XYZ 72 724.167 null]
+>> endobj
+1803 0 obj <<
+/Font << /F25 380 0 R /F27 394 0 R /F15 393 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1905 0 obj <<
+/Length 1906 0 R
+/Filter /FlateDecode
+>>
+stream
+xÚåš[oÛ6€ßó+ô¸ Ë«H=&µtuÏZÝ0°6c ÖÅä`ý÷#} ººÚ¢€†Û %}:â9„¨_ÈáØᘠg_!çðÚ8§OŸôo‡‘”À¨ùV3ðú4òš0 \fÆßWï}Ì='xÞ –_ ÐßãT.ý4)þ„ ê7z÷Wðû{±Fs
+ôVùÕ ¸¯{ |80óÕü¸qNŸ>vþŸÍvNøÏ›:Ž©‡ô0€Øs®‘aõ0®Â…Œ&iašÌ+X†:¨ ax„wÁ´3."ê6æ}I¸ÝE²PY¬«h¡
+(­7ÚíTnèÕ•ï“C+Ê9B³Ýv›fU"af£´¼¸"€QX|ÆL% ä5­6S¥’EºT5ÊÔ[N"žµœ4UÚ Â—:‡è/ýr{¨i¡e©¶ªö†Ê¨5Ô™aõ´+¢0QƒD•ÙCUÅÍs쇑z”±ªÕ`Þƒx nF{±ÜNärˆÀbj3°5úà
+m¥ëÎô™íÏî…F—r¯jŽˆsûBxÆ:µ¥jÆ;õ,wQ1255LVƒ!…Ö„pOü.ÔTåi´3͈*7D”h9,EÖ;7]ËsÕ…ÚYd“gJf‹u];3àyåÀZÕÌú± ð.¡ƒÀ8m¬åðNòVæjæ—Ñáö´ó±W9‰yUÎB”îwn™1¶ZUŸ±–§S7qˆ
+÷ìðš‰Æ½ºñ ÀÄñ,–ÞÚÏ„‰vFÊé_»ñõwendstream
+endobj
+1906 0 obj
+1072
+endobj
+1904 0 obj <<
+/Type /Page
+/Contents 1905 0 R
+/Resources 1903 0 R
+/MediaBox [0 0 595.273 841.887]
+/Parent 1952 0 R
+/Annots [ 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R ]
+>> endobj
+1907 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 748.292 164.029 757.989]
+/Subtype /Link
+/A << /S /GoTo /D (page.37) >>
+>> endobj
+1908 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 734.439 209.846 744.439]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1909 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 720.89 198.392 730.89]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1910 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.756 707.644 192.665 717.341]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1911 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.756 694.095 192.665 703.792]
+/Subtype /Link
+/A << /S /GoTo /D (page.53) >>
+>> endobj
+1912 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 680.546 186.938 690.243]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1913 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 666.694 164.029 676.694]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1914 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [210.392 653.145 221.301 663.144]
+/Subtype /Link
+/A << /S /GoTo /D (page.76) >>
+>> endobj
+1915 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 639.595 169.756 649.595]
+/Subtype /Link
+/A << /S /GoTo /D (page.47) >>
+>> endobj
+1916 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 626.046 204.119 636.046]
+/Subtype /Link
+/A << /S /GoTo /D (page.23) >>
+>> endobj
+1917 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 612.8 186.938 622.497]
+/Subtype /Link
+/A << /S /GoTo /D (page.39) >>
+>> endobj
+1918 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 599.251 186.938 608.948]
+/Subtype /Link
+/A << /S /GoTo /D (page.67) >>
+>> endobj
+1919 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 585.702 186.938 595.399]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1920 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 572.153 186.938 581.85]
+/Subtype /Link
+/A << /S /GoTo /D (page.65) >>
+>> endobj
+1921 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 558.604 198.392 568.3]
+/Subtype /Link
+/A << /S /GoTo /D (page.30) >>
+>> endobj
+1922 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 544.751 186.938 554.751]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1923 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [147.393 531.505 158.302 541.202]
+/Subtype /Link
+/A << /S /GoTo /D (page.33) >>
+>> endobj
+1924 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 517.956 164.029 527.653]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1925 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [210.392 504.104 221.301 514.104]
+/Subtype /Link
+/A << /S /GoTo /D (page.40) >>
+>> endobj
+1926 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [221.846 490.858 232.755 500.555]
+/Subtype /Link
+/A << /S /GoTo /D (page.24) >>
+>> endobj
+1927 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [204.665 477.309 215.574 487.006]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1928 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 463.76 204.119 473.456]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1929 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [216.119 450.21 227.028 459.907]
+/Subtype /Link
+/A << /S /GoTo /D (page.27) >>
+>> endobj
+1930 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 436.661 204.119 446.358]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1931 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [198.937 423.112 209.846 432.809]
+/Subtype /Link
+/A << /S /GoTo /D (page.43) >>
+>> endobj
+1932 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [170.301 409.26 181.21 419.26]
+/Subtype /Link
+/A << /S /GoTo /D (page.31) >>
+>> endobj
+1933 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 395.711 198.392 405.711]
+/Subtype /Link
+/A << /S /GoTo /D (page.82) >>
+>> endobj
+1934 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [147.393 382.465 158.302 392.162]
+/Subtype /Link
+/A << /S /GoTo /D (page.35) >>
+>> endobj
+1935 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 368.915 164.029 378.612]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1936 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 355.063 169.756 365.063]
+/Subtype /Link
+/A << /S /GoTo /D (page.34) >>
+>> endobj
+1937 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 341.514 175.483 351.514]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1938 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.756 327.965 192.665 337.965]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1939 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [187.483 314.719 198.392 324.416]
+/Subtype /Link
+/A << /S /GoTo /D (page.56) >>
+>> endobj
+1940 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 301.17 186.938 310.867]
+/Subtype /Link
+/A << /S /GoTo /D (page.84) >>
+>> endobj
+1941 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 287.621 186.938 297.318]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1942 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [176.029 274.071 186.938 283.768]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1943 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [158.847 260.522 169.756 270.219]
+/Subtype /Link
+/A << /S /GoTo /D (page.50) >>
+>> endobj
+1944 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [153.12 246.973 164.029 256.67]
+/Subtype /Link
+/A << /S /GoTo /D (page.81) >>
+>> endobj
+1945 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 233.424 175.483 243.121]
+/Subtype /Link
+/A << /S /GoTo /D (page.55) >>
+>> endobj
+1946 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [164.574 219.875 175.483 229.572]
+/Subtype /Link
+/A << /S /GoTo /D (page.74) >>
+>> endobj
+1947 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [170.301 206.326 181.21 216.023]
+/Subtype /Link
+/A << /S /GoTo /D (page.63) >>
+>> endobj
+1948 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [181.756 192.777 192.665 202.473]
+/Subtype /Link
+/A << /S /GoTo /D (page.51) >>
+>> endobj
+1949 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 179.227 204.119 188.924]
+/Subtype /Link
+/A << /S /GoTo /D (page.54) >>
+>> endobj
+1950 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [221.846 165.678 232.755 175.375]
+/Subtype /Link
+/A << /S /GoTo /D (page.71) >>
+>> endobj
+1951 0 obj <<
+/Type /Annot
+/Border [0 0 0] /H /I /C [1 0 0]
+/Rect [193.21 151.826 204.119 161.826]
+/Subtype /Link
+/A << /S /GoTo /D (page.86) >>
+>> endobj
+1902 0 obj <<
+/D [1904 0 R /XYZ 72 786.278 null]
+>> endobj
+1903 0 obj <<
+/Font << /F27 394 0 R /F15 393 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1273 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 1953 0 R
+/BaseFont 1959 0 R
+/FontDescriptor 1960 0 R
+>> endobj
+1953 0 obj
+[ 529 816 762 593 653 686 707 762 707 762 707 571 523 523 795 795 230 258 490 490 490 490 490 647 435 469 707 762 490 840 949 762 230 311 490 816 490 816 741 272 381 381 490 762 272 326 272 490 490 490 490 490 490 490 490 490 490 490 272 272 311 762 462 462 653 647 650 626 704 583 556 653 686 266 459 674 529 850 686 722 623 722 630 544 668 667 647 919 647 647 598 283 490 283 490 272 272 469 502 435 502 435 299 490 502 230 258 475 230 774 502 490 502 502 333 375 354 502 448 666 448 448 425 490 979 490 490 490 ]
+endobj
+1954 0 obj <<
+/Length 1955 0 R
+/Length1 1956 0 R
+/Length2 1957 0 R
+/Length3 1958 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMSS12 1.0
+%%CreationDate: 1991 Aug 20 17:33:47
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSS12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /BUXHDC+CMSS12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 46 /period put
+dup 55 /seven put
+dup 66 /B put
+dup 67 /C put
+dup 73 /I put
+dup 84 /T put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+readonly def
+/FontBBox{-62 -251 978 758}readonly def
+/UniqueID 5000804 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+‚úBª±XŸ}`¨¬z–¿ŒZ¯æÔ'¦ýÞ¢þð¸«Ã|m¶,‹@tÍl8TÌf头Åù
+Uã«œ@fÍ'?æíy.*&·$dž“)ÈôbSET
+™áÝŒ?‘Ôoß²­Ûo&ÿûX¸Š%¶ïâk¶\ä¥
+ï¤[…† D£lc#‡•¦ðKNÆàØtr¾›/I&TKÓP~w6¿Z!bfƒ:
+§àõŽåÚ¿Ôgà­¶»0,®ÞGÚ(k×#µ%o?)Awù¨‹•¥(„nYÚôj){÷ê]0S^Ä­Œ`Œ
+}vð:*#-x”†ûÉJjvò_È£úè‰8„_³6]×z"¨úõÞ¢Ká£zFR¢ôøbÕˆ6&®iÁuÒ¹ˆ½c-„$ÿ´\Îb”ε2‡­¬vÓ§%"GrÒ‚òSì×ÎütÃTÔC?®ÇþH׬.^xÚLí~Ïm<E«™¦¨åÿúµÐŠIëÎ ¯ÕÚ®MPëÓKÈu¦ù¶ÍØÇ[ൊèƒáõsôլ߄âØ£ô3&6¼[§åƒü…é£ì)-hýpéR\º14
+÷%UcyÛõëˆ6$.i‹þä–ä.³?4b›w÷E©™Í~>ÿÁeª…§´_7ÇÒƒYpŸ{6fµ©¢„’¯¨±8€.K·Z:=`G4B’‡Q©ã¡"À^šMW.¾Àf?*¦§«7…¯2Ú¿9ƒ!I»Ú‡`­!L‘eF…£V›û ¦c3–qó`Àƒjç½—[D&Ö4xÖ¾ñë:ôÄ%âb¸*œõ=Q˜gGäŽUåo-Wp?8™¤Ê/L}Ò öÂåÑ­Oÿ+›]«,
+Ø}J‰t“ ÍSÉ̬ùÉ¢Ö‚½" 7€Ä^þáŠÉ(,MäQóª°KÈÄq6Öõ
+E–è õË´/°8i5©U}ç ÿÌ!Œ>¹ È©£`YѨ¤;Åû¥ßÓi¶¯°äa›C¢i›2²Øóã°sÐôaàsÊÖŠ wü%ÓÑIÅçØ’?SluaØvHæÌ*r§ˆS8¾•ÊÒXuzŽ16%ò{Ñò+¶QûÛþ^à9ù³õà“D«!
+Âß$³õ÷Jùô­æ„Äé÷¿vW-†—-§¥ŸÙ-˜Ò7NÜñ3ö-x'r‹ür°¬ÕŒoÁæàí£”.‰©©ÏmåíĘFÛxL¸süÉÕ)PmåF]qŽ€¹ì¦ËØÚÕèɪšIëÓQ+Û@ä¼£
+·ÇOH;1¸x;CÊ
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+1955 0 obj
+5846
+endobj
+1956 0 obj
+1196
+endobj
+1957 0 obj
+4118
+endobj
+1958 0 obj
+532
+endobj
+1959 0 obj
+/BUXHDC+CMSS12
+endobj
+1960 0 obj <<
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/FontName 1959 0 R
+/ItalicAngle 0
+/StemV 76
+/XHeight 444
+/FontBBox [ -62 -251 978 758 ]
+/Flags 4
+/CharSet (/fi/period/seven/B/C/I/T/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y)
+/FontFile 1954 0 R
+>> endobj
+1272 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 1961 0 R
+/BaseFont 1967 0 R
+/FontDescriptor 1968 0 R
+>> endobj
+1961 0 obj
+[ 581 917 856 672 733 794 794 856 794 856 794 642 586 586 892 892 256 286 550 550 550 550 550 733 489 565 794 856 550 947 1069 856 256 367 558 917 550 1029 831 306 428 428 550 856 306 367 306 550 550 550 550 550 550 550 550 550 550 550 306 306 367 856 519 519 733 733 733 703 794 642 611 733 794 331 519 764 581 978 794 794 703 794 703 611 733 764 733 1039 733 733 672 343 558 343 550 306 306 525 561 489 561 511 336 550 561 256 286 531 256 867 561 550 561 561 372 422 404 561 500 744 500 500 476 550 1100 550 550 550 ]
+endobj
+1962 0 obj <<
+/Length 1963 0 R
+/Length1 1964 0 R
+/Length2 1965 0 R
+/Length3 1966 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMSSBX10 1.0
+%%CreationDate: 1991 Aug 20 16:43:06
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSSBX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /TADAAA+CMSSBX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 33 /exclam put
+dup 78 /N put
+dup 101 /e put
+dup 111 /o put
+dup 116 /t put
+readonly def
+/FontBBox{-71 -250 1099 780}readonly def
+/UniqueID 5000806 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å–
+]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 1Üh©{]N À${ãéEV´žN¯n©Ÿ @Q”ôØÖDòáðè õÇÕ•…Á®FÐ%¦|Õ¥žËÞ*¯‡÷%©„5‰3…Ænm« 2tº\Ü™-—fÛ9bÔ†âh%P¯ÞËËv¢ŠAw[.ôv|¤(cn¦ž€³¡Ó0`¹ð%–ï$1ôS'Ë»Ëc] ÆF—gYå.°že· §¡n¶^½&-½¦–Mk‹Â ¹rÚX Éúg¡¢k›Éq*šZø#CÑkÌT/‰ÒŒ ¨‡\é Ѩúúeø“ÊF/Ú©n*q«È©¢ ç®°äZ:ÞWê#·R’B{(-œ!×e¨Æ‚z÷tºï¢MË-²$Ê<T ƒbÉÉÈÒY¿£Y×(ŸÆ–9x´l·Dü–Õñ¥“dnlLnR
+ª©qh2Å><8î1£é™_°‚ºø?Îö:Se(ƒ”(­ŠhòT¶\ìjÛÛµ$Ôc“ˆ7J\tÄmòý0Ƕ•í2¿ûQNDK±ó¾öCÒ»ü²”©‡‰-
+Q+å¹ØDmöóò“E''EË#Úz¢æÿYSrJ:GQýÔå Óÿ¦öÉ]œ–.oEBm@!‹=‰D¢tzð•YvøÝ“Ê3“åt¥Ÿ
+39!ñ‚.Øeå‡A*yR¥Ž‡H[”ÅÉód{èÎèÕlÿQíh¡lÏÙL[§ã¢Î¶ªc˜‡7‹W0™ýáý:•N6‚™í1È,][Ï3Á_†½#M脾E—){“3Æɼ“åHŒ Ø©ßÙ‹¿Èbà±@³PÌ’uö²¹SôEP"{Ê®m• oL£÷ÎÃÑ]“nà„
+΃ÅøâMmÇÍÞ JÝW¶«¸Rc+RM«4]kÆPÁÙòMvÚ­K”á2Ÿ“KrQ}·à´u!¹-w¯|²0‚J¼ŠæŸF¹ìÇÆ­_¿*TàϨf­nÊó†;#u›JuÒ] }-8ÕðA¾…û{¾O=çâ÷N­ûí÷äsñnh1Pžo V©G$ÑÈ\ó ³Ðþ/þþůNúOƒÁH¢–üLb>[šñ+z©IØ@Ä·´ÛT£W«J-#öl»2O¹Ü€± ‹‹ešA.ͯ3Ag§ã³,é?ÙC<JeÆvi%YUçJU7¢Ž¾½ÛÏGè(‰×ç³Û
+LË©·
+Ž€ÏÒ<ËzqõJ»]¦:¬òMˆEyx±LªBÂüf]yú4¡í½X3,Ò†”Ú³–åÂ8ïM!‰o•84P3•b0µ;mÊh¥¯3í]Goô"›˜i.±-òI×\_ñE€nÕ„Uî…•$ÆûóïübT²Xùs8Êd£êp¤VýGÛ"º,_òV`’=«ŒæëÕ<Þ6u³Â"Ž,Ÿ.
+ÕàÐÀÛ™ÿÕrq ¤*t&?­@êàü›É¦ïü§•6t^œbyl =Mé‚’èµî¶W .á‚Ö¯÷Ê/ë—ÈPEmIXÕ 6Ÿ¡•@mQú:C4£sp…)¡„ÿ@ã\ŽaœÆéeMïÚýõ)¢'‘P ïòÕÊGQ>eèqÙ~¾¼®„À7k†¾50000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+1963 0 obj
+2970
+endobj
+1964 0 obj
+829
+endobj
+1965 0 obj
+1609
+endobj
+1966 0 obj
+532
+endobj
+1967 0 obj
+/TADAAA+CMSSBX10
+endobj
+1968 0 obj <<
+/Ascent 694
+/CapHeight 694
+/Descent -194
+/FontName 1967 0 R
+/ItalicAngle 0
+/StemV 136
+/XHeight 458
+/FontBBox [ -71 -250 1099 780 ]
+/Flags 4
+/CharSet (/exclam/N/e/o/t)
+/FontFile 1962 0 R
+>> endobj
+882 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 1969 0 R
+/BaseFont 1975 0 R
+/FontDescriptor 1976 0 R
+>> endobj
+1969 0 obj
+[ 458 458 417 417 472 472 472 472 583 583 472 472 333 556 578 578 597 597 736 736 528 528 583 583 583 583 750 750 750 750 1044 1044 792 792 583 583 639 639 639 639 806 806 806 806 1278 1278 811 811 875 875 667 667 667 667 667 667 889 889 889 889 889 889 889 667 875 875 875 875 611 611 833 1111 472 556 1111 1511 1111 1511 1111 1511 1056 944 472 833 833 833 833 833 1444 1278 556 1111 1111 1111 1111 1111 944 1278 556 1000 1444 556 1000 1444 472 472 528 528 528 528 667 667 1000 1000 1000 1000 1056 1056 1056 778 667 667 450 450 450 450 778 778 ]
+endobj
+1970 0 obj <<
+/Length 1971 0 R
+/Length1 1972 0 R
+/Length2 1973 0 R
+/Length3 1974 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMEX10 001.101
+%%CreationDate: 1992 Jul 23 21:22:48
+%%RevisionDate: 1997 Feb 16 10:50:33
+% Copyright (C) 1992, 1997 Y&Y, Inc. All Rights Reserved.
+% Please note: This font is NOT in the public domain.
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (001.101) readonly def
+/Notice (Copyright (c) 1992, 1997 Y&Y, Inc. All Right Reserved. (978) 371-3286) readonly def
+/FullName (CMEX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /IVCHLA+CMEX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /vextendsingle put
+dup 16 /parenleftBig put
+dup 17 /parenrightBig put
+dup 32 /parenleftBigg put
+dup 33 /parenrightBigg put
+dup 48 /parenlefttp put
+dup 49 /parenrighttp put
+dup 64 /parenleftbt put
+dup 65 /parenrightbt put
+dup 66 /parenleftex put
+dup 67 /parenrightex put
+dup 104 /bracketleftBig put
+dup 105 /bracketrightBig put
+dup 113 /radicalBig put
+dup 122 /bracehtipdownleft put
+dup 123 /bracehtipdownright put
+dup 124 /bracehtipupleft put
+dup 125 /bracehtipupright put
+readonly def
+/FontBBox{-24 -2960 1454 772}readonly def
+/UniqueID 5092766 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+IºrV0ºø^ÅEí²–7€½Ã“;k?ƒ‚­ú¨ 0\j,2dÜz=ýsÈ%áÛ†zêS'ØS3/å!:¸B>Í vÊFÍ R ù Ô¡Ô!ü) ¯Æ^ßÑõ•…gç½i³ýhßSš…KÒ'59›ïE·mo‘
+Ôëò÷¾_Í··Y f ·«©M½‚¡òâ²qm5B"ôò–LõvR5A•[,œÆe]³k7ÄHeµj¬²èþU™9«#œ(âýc’º²zðI Ω«n~#ÆOÚ)Ûˆ0/3úÛ™\Ì*–àhØ— üûÞÞ{€úóš£|ýGÛÏÅ#54%µZ™‘Dß‘‡¸¨\ªë?y£÷ÄÿÌúöáìÿÌ“"›Ø¹qÉW
+ê¶+ŽKð¤,Ûž‰®˜*ž„èO‡LÙeíF”dR¸VHJÄg|s[åìzˆƒ˜Õ½¾ôêA0P.Îc.m"ÿ‰ü"–Ëø™èîÐ4_PzäôDe¼1!gôhû¥œ!c½·Ê÷w·¢Q} ü‰opÇ{Õ‰í”r1£†È¥ʈ¸O¹RFŒÛn™hˆÖqB?IIÐTá “\« \›Wÿ×g°Nc*K•Ó’£àÌpùª&öBtt žd9+¹É¾þ3*:‰ÛgdͯáQœ˜HÆ3òMÞ2<qü:o^.½Ë ´F*\ÖuNÄ¥­¼ØUm%[X.½µÎl—÷â1o^¬éO(‚¢$Õ@-Ò“¨].Y¨µ©lŒ§á¬k÷wÚž;ÉXÄ“ &Ó5Ý{A6ƒ¶ÛqV‡9ɪi§mUÇ7_¨“´-½ãï¥8”½ø!ýqˆçÁ­ŽiÐùàã"°Ÿ)Am?7¾ñeŒÛ
+Cr(&¢z¾È^Î"_ZzŠÍ+†Z0¸%È¡7”Â#ßi©†e†ÖõXƒÒ¦›š°îÊôω‰´—TBèš‹!L¸§iK=¶8¿Î²Üì´îíÊÙšPõP—CòßÖ³[¯oÁ¥z£‹!ôæÑeØCûp]\柰IQ·$¤OƒÃ
+T°ÑÝÚåN²ýÊbå¦8üÝ´(N÷ƒC<Ћå2c †4”ÕíöyБzG'Д…¶bå;w$ÊlEÙ‰úãôášàV*NlYN!‘3¯
+Lªß•o§h"›°’‰{ä¤ü²_¤(çúÀ—N`f"õ™µ„­%»¬ ï~)·S³´§¢ÁÐê…;a¤»äÜ›o¼™~6εÁW!›ˆ÷Œ3 $æEõ¦WLùE½:U'Õ±šaµUg²ÆˆùˆZ‘…‚Burk§ÚIf@ÿÉ™†žNƒa0Tíü!? þ˜÷9RGw7Ú¿­XgÏþߧRyø›Ïõƒ?ÃàV¸^m¦ò høYoýæí‘V\b9þh$`‰èËê›-\~òÙ{o؆…deÝ’g_EÂêSO­€ Ý¡E£I«Î©bÖÓÖw`¶
+Ö‚ƒä ]œãÇîÿ¨Ž `nŸ²mo«x@ÍÏà ÜÁ®ù±4²@óz}§\ ÍßR¶æ#Ø;¾l~‡MºoóUÜA
+ãÚÏ*“ÿ.˜~û©z§Úð˜µ@h³—ÔhIêðÂÉ%ø½4›ûØ[9«TB´×"Eå
+‡]û”¨) f# †š¨óªÃJözN­‹¶~CòH aR€5ˆ$— ÊámUšÁJœî­ ÄÏ)/ú‘êÞû 7«62Ðu Çù
+Ä©’ørfé±…ä—´Ûÿ!å@~Y,á\!øðT
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+1971 0 obj
+5014
+endobj
+1972 0 obj
+1367
+endobj
+1973 0 obj
+3115
+endobj
+1974 0 obj
+532
+endobj
+1975 0 obj
+/IVCHLA+CMEX10
+endobj
+1976 0 obj <<
+/Ascent 40
+/CapHeight 0
+/Descent -1760
+/FontName 1975 0 R
+/ItalicAngle 0
+/StemV 47
+/XHeight 431
+/FontBBox [ -24 -2960 1454 772 ]
+/Flags 4
+/CharSet (/vextendsingle/parenleftBig/parenrightBig/parenleftBigg/parenrightBigg/parenlefttp/parenrighttp/parenleftbt/parenrightbt/parenleftex/parenrightex/bracketleftBig/bracketrightBig/radicalBig/bracehtipdownleft/bracehtipdownright/bracehtipupleft/bracehtipupright)
+/FontFile 1970 0 R
+>> endobj
+881 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 1977 0 R
+/BaseFont 1983 0 R
+/FontDescriptor 1984 0 R
+>> endobj
+1977 0 obj
+[ 643 885 806 737 783 873 823 620 708 655 817 682 596 547 470 430 467 533 496 376 612 620 639 522 467 610 544 607 472 576 632 660 694 661 491 632 882 544 389 692 1063 1063 1063 1063 295 295 531 531 531 531 531 531 531 531 531 531 531 531 295 295 826 531 826 531 560 796 801 757 872 779 672 828 873 461 580 896 723 1020 843 806 674 836 800 646 619 719 619 1002 874 616 720 413 413 413 1063 1063 434 564 455 460 547 493 510 506 612 362 430 553 317 940 645 514 535 474 479 491 384 615 517 762 598 525 494 350 400 673 531 295 ]
+endobj
+1978 0 obj <<
+/Length 1979 0 R
+/Length1 1980 0 R
+/Length2 1981 0 R
+/Length3 1982 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMMI8 1.100
+%%CreationDate: 1996 Jul 23 07:53:54
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /OEDBGB+CMMI8 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 23 /nu put
+dup 66 /B put
+dup 67 /C put
+dup 71 /G put
+dup 82 /R put
+dup 84 /T put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 105 /i put
+dup 110 /n put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+readonly def
+/FontBBox{-24 -250 1110 750}readonly def
+/UniqueID 5087383 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å–
+]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÖ¨ð[G¯•ï(©ÅaÛܘÄ|õRPé6n¶ý=: ªbãÕÙ9s2m4{~ÜC‘ÉßD…¸ü˜Ô%Åx’Ý÷Sd,Õ&©jÎÚA x"±ÐŸ—”æmѬ,+;ÆþÅboB|Õ®œTÇ÷bÃoI³Âåæ*ûVÜî‡DZ©BÁJæÑþ©ÏŸª2a{YŒå‡ï0Qâ(÷/e@­™§AòGÆ€挄éÑп™ª]w}ˆ§ÓÎÒêgô®a輕çÚ8.‚ݲ° ÝcS,tã¾^ÅU ¼»j³‚†×q.’o†–ƒr¸!N›]@Ájß
+ýGÄ“75uÆÊ‘ämˆÞ$æ‚ÞÄKWêŠøNWÔVF2PØ,KPË» 6™2aƒóÔbw;S³ÉæÛBÖ³ö{‚ Õu&D“C½ùúÏhN¾ã›e^±½L2Ib^ÇžY6þ2Ùò"CSò¤l5Xï!ok²£º÷R¾ì6ÄD UjïìôTº|»§S{ËëÂG3:‰‰6A…|Ùõžº °£ÙºJ 3•3kLÚK¦EnMpúÙ½«·òq¼lHÙßZo®xV Þ<HÔzg |T}˜­8ŸÒD”ÓeÖ *¾¼Çžq'¬Aq—¶“ïïÖ£”)ŒØ Ï¨†ãN6‹LÝNÙô̪] zZ`€aŠ–Õ²?úŸpÜ£¼ ›”i©oP}WúúÍÉðYÏØP¹¡eE“åÿ¢éóÀ¶†È\뫃FO&ÀIì pò]Éã™üº™Äà&•9IŠk~’à©ù"ÓÛÛ½Úv½­¢£ šŒ'‹lçj£NÊ_¬pF–&ÀJÞ‡\ƒ{
+kô@0'KlY=³˜•ì›!Éem.:Ì©6®E)Åuv`ª]›vÞÕyA~eÿi^AôªÒàG‚´÷Ã#ü.zìl´ ™„0 ož®äŒß{§MŸŠÚÒé”iû}¸ðA<Ñf3e.¡Eߟ‹qNÍK»K?JŒXVXxÆ»®ëõ+0:Ô ŸPz’Ü2=6gÖ;šý¢q9ÄTŠ·µÂ4ž Ü}è€ó «uó|·xF£#OOUÞ„"¸-”.¶ÈW(¥q<Nz*sU~µú>#L’èöŸã³’jýë 
+lÁßOæ†VÖ´ÖÊꉅZûº}LØ-r:é=ÐûVóŸŽ”0 E›Òãy¸\MŽM§Óc¬Þ½3¾¿¡B"Ìʽf>Hš„™åïi±ìï ÁCëÑ›YXŒËÉ¡J½
+öN rWwº1&¸•&]c˜¾ášùV£R?úyMY}ŸX{¢î¡øSÌ^3u ݯtÃCþ/fÂgrg`<=Ýg„.kþ}*Ï1@–ÌZaj /‡QˆŒÀкÌý(‡¿ËÈ?kô¶¯9x¬wl2\„sýèŽ þøݵ©Ÿ—ù
+ãRyîÍz€¬aUMüðÇ}€‚)ßdÁ^@ar9Ø| ZnWúÕ •˜@ˆCB5µ´ß›2Ðë[£ ÿvhgû{ÇZÙ›ˆÿcÝ4_§n#Îúk=¬¶…±RÀyB*B?„ÝÇÁûäíÆ¿«³«=<<Ý¡-^ó:/z¹ñTø|æðr~öêš/ˆÉO+¬ì˜=(lš€ÔU,Jj\D|©
+Eêo@팫Ù3`£ÿDu^¿ƒÌ¦ð:ÂáÿêN„#KDË&Ùãå9J±'o7CðÚ"ËRb#Èd©Ù袂þÀÊÙ㳇·
+\¥Èß1{Gh†RÝÓà¥2nËî•`GîÞºä©ÔuÁ eˆ=àq™A†²oÉ-Þ".,í¶“á|\;…š€\˜8‚!X/rAp¾NfI’ìæjƆð/qåÇNŒG—#…Ýâ¶$§ÿ6»ç2QÅ/MyÓ9ú ¯Xû¯Y4ȶ²—w® æ9^3+ã—mkX*Ô¼üdd82+¿õL9ZØr<ct\IÊ.I êDqÄéI«>¶ÇŸÞþ—t" jo¯6XŽ>YvXú` Äü– T3F”·^¿/½ÙŸÄ¤ÍcYGðïG!Œ”£Ôëç+¬è›.yl»pQ¤úÿ•y97jk9–Ž- ûhÚ
+| )OeáWÚ‘üvL! þ§s†=kÚ)ö“[m«
+ëH𣔯³Æ)#1†¬éS[¥'¸ñéãtèhà4½…¯Öï‘t{;ëØlH¬4k¤´†cd=À‡õ=^
+ÆêïNz-­´¹âm®ÅÌ!ÄîQ¤GÉU& 6âÀt9ç×L}íeóA(|íF@×aHçzÄjYÜhˆ¤š3²Ù25ƒ#Ï)R7,Æ·¹€×î(´Ã>//`³³Û‘0†´Ýý£+mŠÛò\Ûµ,UïMŽ3ó謞¬¨ºÖ~»ÚM‘+Hé ¢”|%÷Ò.’J7F¶g¥áÎU’~Lú/|þl€<SVðK|û;„M}³‘ˆœü6ÒÖxÑjï’ cÑ­A¾93íý³Z“î«—míª#B+Ýäå–×_±¶+r]Y™×dËeä>²*e‹Fí’öU«¡8ñ¦Èâ v¶ä%Ñw‰~‚WbÑly¾À‘kO—Ú|dѱ@#uê+ج<&û“œ¡1Í0gQdÐCõ„ Òô°/‡h°a¹Qá'¦^+Íœ­~ÂM¢þ­2ýÉ£L/Þs‡Ünê Χ›qÿî².w£…r0Îp@{ ì U+fOÉBEáseÌúOÿÈJBzý¡52ž$:ÍÚn(7ÜßëA×ò»yz(•b_~R–0éñE¾÷–ë÷zRëJ3CkÌ7@ûéŒRççi‘¹âžöϹ/Ýöw»ˆz3žæâÉ­ã8”í¾| ”žXlÈOìØÉO›¥¡k[ÜyÚ<Ôf§\m3K.i†sOÍmö—`eòÙ°¤¥‘xhŠg/~P½¿Æ½ê¤°ÏæK[
+Äô˜@5áFžB‘ [vØ,Ši×äq'cK
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+1979 0 obj
+6252
+endobj
+1980 0 obj
+1017
+endobj
+1981 0 obj
+4703
+endobj
+1982 0 obj
+532
+endobj
+1983 0 obj
+/OEDBGB+CMMI8
+endobj
+1984 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 1983 0 R
+/ItalicAngle -14
+/StemV 78
+/XHeight 431
+/FontBBox [ -24 -250 1110 750 ]
+/Flags 4
+/CharSet (/nu/B/C/G/R/T/c/d/e/i/n/r/s/t/u/w/x/y)
+/FontFile 1978 0 R
+>> endobj
+713 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 1985 0 R
+/BaseFont 1991 0 R
+/FontDescriptor 1992 0 R
+>> endobj
+1985 0 obj
+[ 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 ]
+endobj
+1986 0 obj <<
+/Length 1987 0 R
+/Length1 1988 0 R
+/Length2 1989 0 R
+/Length3 1990 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMTT8 1.0
+%%CreationDate: 1991 Aug 20 16:46:05
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /LMJFEL+CMTT8 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 33 /exclam put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 61 /equal put
+dup 67 /C put
+dup 68 /D put
+dup 70 /F put
+dup 73 /I put
+dup 74 /J put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 95 /underscore put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+readonly def
+/FontBBox{-5 -232 545 699}readonly def
+/UniqueID 5000830 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+<5€Î;Q×B˜A”Ôñx€ ‰/¶çaÿCÆ?’Vµéô"{x"+ªÔÕ,wF-ð’"œlžE»Ÿí|ÕØ´×+àá)i¯êþñp`<Û‘Ë$1s±šVM);€£Ruô÷ŠMܘô¡ÿõ’F=”I`û1kåð9`ù±òËÌÔHeãˆñÔ+ü•qÌ`Ï#Ç%`˸ƒZ ¢þgk;H°“˲ÀÅ:ñ~ųr©w¿Õ/ûpb´þ *Ôï\Œv#ì“$¢Ë;@/ÌÎR¿Èf/Š9Õñ´—çÎ4ájŠ”
+Ë#½–†xú zWR¶+ÃANŒfaBä²dê^¢hŸVÔûO=ÆÊéºûUÌ.
+—I‡€ðȾï A®ÖjT–Œ·›ßdEäßë<¹•O©ímÀuû„4¾\éõ™
+=pÄ[ç¶N²ò&†Ó(v“û`G²*D+jAEX› ì½;¯„SY­)ÿ³q™\{fUŸ[åv9vpå©Vd^ô£V«¶"æGtC*þa<ä$+`©
+¤§v﨎UAëJÃá“U&\þƒ¤U?V
+3Öï17žšRÇ\w·ª‹ò'r¯›äJr"ã¿“rœ2âHºÅš%òF †Â,R×Ö!ÆU*ôGkëñú7KâЪgy?@Gce(³ÈtÃE.yV†¾)3E¶òF•új1¬ûÏ<œÔÀŽŒvPŒ´÷f'…¥ûøÛT@,ÑMø¤=ÜtÉ·
+¹ÏLû(}žó«Aý#^oSžù-Ô<9'½u V±`2&ÐÇ@‡+·¾Åüiy凰ºaÚÆ6¶ÝMhöÙÜF(¨._~
+gš—´D¢yßµùxQªoÓ=«îfcû+¥È2Tïoòœæ
+ã§"‡!4í¹ÂÜ<Æ‚¢ì‹^_áÂ…àe,v ÌÉÁ©2 ª›ÊòmYõžþ´·çãD4¸w´]LéW«pë{'1h¼o=vRmvÆ`ÒC­¸%H”r«ADÕ)IFE£¯–WɼØ4 ÃàÁÒÆØÑèâ%•:QRè×ì]<VctM}sxM IL
+?à¸ÎÙ1ÑQ®â9{bþ­6[µÀ®øÀÁîÅ–°Á°N5V8´q¥~Vœ¢z³ÛU´n,1TÀdV^K-ÂìPï•-ÇÀÅ› v6€hƒðèçAYüª(¢`.Ç+4o-Ëð¦…Í–¿Õ¾Å„TŠ‰TVwJÓ·=½TøÙÏ M9û¸Ý‚ÊèkWÁí#XýI¤¼ö˜€ ¢Ðí{NZ¦‹ykèE©nÕç¸ÎßWFpÜäß¼2²ä¹8b#åžNM‡Ü?@+g¤ÿKæŽe\DçL–ø öbÖe ¦JJc-—¾j
++@Nä Çׂ0=ºPï\òý;žßTkºÒAÒ íÄ ÞÂVP’V¥ø¤€ŒÞ´OwÅY
+6ü÷2y_n4®—¦¡IÙ™_C¥°Oa ìèŠ#2ÃËþg­Uß’õ«‚Ó’[¾Í/ 䲕YÐ.È
+6óT.Ï­Éæ€:…ì
+\Z Úv©‚!ûxÔZ¤mcWæ|KbÂ¥ª¼‹‡ûÇH¬
+ö;¸£c"î„ÜWX/Fv††s§´jÛ… ‘Ó0Ì«©A˜/ƒ¨’¢O^ˆT¤|Ú­ eïõ…i>l]´·3„ÆÍÕ¾àB”D¦ÚmòªL] Ã÷wT*§z=[PVj }L“ ï+½½ùêp@ð¦ËÂÔÛEy­QÑQ%¿,+0 Ü(>á…Ó¤¡ìK¤Eü˜wˆÍÐ:hRŒ4£ÔÅ£õ[ǬÒ@O­p-Ã( T”ÂRØÞiøVø^ó\jeÏÁ¶ dû®ÐX:ÐÖi5`¥r¡×«’–-ûH8¤Má+â‰D£ÄqÆÎ ø«óEîZ¨|fƒ‰xh®(oWyòVÚãB²1áíáñ6ý2Õô®FZŒ‹h¼ÛÇî÷¥ãæróÉ%ÿí‰BÎíÖê»0àÄâÁ“C4&ýZœpVd'8ähJn¤ú/ÌY7€×ü—Ë9+#wtQù›oCIOAuRç•äI•~øÏÃ9†ExùCíg,ae×…ôgVJu"àÂH•ÔÕáÔüEž¸z³^õËßQ9ñ­éÕyŒB›#
+¶Á} ê\½F M
+Óów7ìi4æz›tÛÓµ±uùz
+…âH/U~NäDï¤Îħ€$ãd? €¤Ÿf‰,bW³­ó7x%ÜhHé{©‹K¶nr_ÀonÌ1ŸÁc_H"Û@Ã<•¾Ô0\„tpÜg—ÙØœ÷ž©LÑ B‘@bBB ÆüFdK¡¦÷w$«ÑƒØ(hé<E©ëv'¥¿êî²®öŠÚ°ç! ðÊ;Gïu¢ˆå_/ç­Q#ƒˆh5¶µˆ°_ý`rJȺ;îþû%k€ž¦>ýÌÏ[ô Öꦊó!9_¯¢j%™Mëå°jKñ S´UË1ówñ¿íB«hfŒ®l‡áÿ9šû€ú²XÅ¢ÝóÚ&ó¼'Gî("ðî›~¯U^ÐkøwŸœ¿a ¯&ƒë¤q[h ‘qÛ¬Þ/ ß³™)ù¢ ˆÖBßM{VÅ5ä'ñË>{¸KÀ«¬{a
+aHK ‰ÀÑcl˜äÐÿG^: QÐNM®x‹Í'Pë@H1ÿÏ“&¨ô§“)Áy¬L.?†Á|Ÿl]×1Ü2(p³8/9{t$»¸æȪ!÷Y^­{S~³Âeʪ¢¢
+ôëJrï…×(”~ó©ïó i†Ùà4
+$×1ámJ¬$~†&þÌh„]øf•véÈ"×mÐJ'½ˆ…îq”+mHUtêDDXu¦E~p§RAaáLæžÎ05]|³®fSJ>D߬ÎáÑaýW{f'=ÇQS‘–lë°ê€çð
+pÅ|S§¥(~d-Ù÷,é¼gsIšŒºèq$¸¬ñÖö'ÓJLÞ®?) îÖÖÞàŠn U
+¬8Fìcã› 7÷m’{¥UlúŒñ&£¢#O ×æƱSº=O[çñ˨üš¶*ãAõš€äDg–
+ ËÅrTútwý\ùa¶lDE+½&9çÒ†~›Ájà%Šÿ;Z¥y²>®à‚VI Á„±‡.|qíbæäß6©ìFQë#UoH¥ƒË³çœ9þ-î®$édÄ«Aè~;I~…\¶VGI²d0ªÆ˜é¡Bã›”´ì{D"ß'×f5ªg…cþÅÃVÇÚ²3ÊÑ’ •™› ”Òu*×`ë†[ùX“TÀDú…ã•ÊyR˜¦³üoŠÚ¼¢
+˜]íö ra sø6iâÍ›% Æóæ%
+´‹ÿ³D@üÓÙNÝú»%u¥ÇŠFŠa”vWq7@¨!£æ&Aûâ—€)–gTâá¨n“•!Æw…Ý”Æاøèá<^óm“I+¹(ºCÿ |Ét‰ÔKdÎÚg³îQûµØÐKš´E§›À–*n;¤Òwâa?~pƒF³uŠR`4>:'ÆO9ÑÜö{FaÄ´H†ÈXÂÚ|@5`-’þ•ð°ç²Éñ•ÊwÙ¢š;eÊ$¬KŽë~eÎUˆ$Èpƒ>%sôuâ½bÖ’Dè`A(못µUAÒvGÃSj·ûx·8Cí žۥã‰ûóÐ,*W–,€‹)%qó¸Âú¹¥ø}Mn:*‘‰N¡ÜÿšÁÁ£Ža*\›¯¼[îÑG Ñûê¿p@¢ìPŠ" ™þ®‚(°,gE0¸ÜäXèÓ’Ì8ª÷’d¿ŽÏ­ÏoµÛœå4Ç1íy­Ÿ”wÈëìO©èäK¯¬oQq
+îˆy‘¾Ê[p>™èÉMbý¢2'ŠÿŒYcÆ LaP5ÝãŒS<_ r
+ÔoTÚôÿY£„ ŽÙ®mIxk Ÿ¤¿þC_=þ9"‘•5 Pý¢ÂCƒ¤rß5;6c£`Ò´?œU[IÓõ:GÅo(UÜ>Á³ß ¥€ª”:y"«—¿XÍ)ÆŠ©•~×3´”ÀÙ–8ž3^zæ¸ïø÷ø)-Àln.EN‘$ÖuFMM˜«x!íшõ$ í¥ô€`[?ðõíÀ»¶§ðO$G^±!×U¤ÿÕèÜyœIXÔoî¡Ô=Ÿ]Ùw25rÆzŸ)Às@g8Å^wÍe ¤
+©Ò£—Ÿ¬Ý¾ôAÐ?’{Oæ=Çl–w*GF¸ˆk{CñeJÕEQ‚¬ æ#ˆðGMHÎÍÀq(°<íAW®2Y½%óXv·/‘›Œ¦é
+™~©äV¡Ò]ç¬Iz΄Ìû}Fº¬R`óÔÓ‚î5«}:™9 ‰þVpAñ½Š]݃ ­¢ëÕ˜ÑyϦ”æ
+iÓ\DÌÁ Lj•]ÒÖ/NR8±“xì2Ë—š]ÝÅ&Zp›ŽçyN Xâ!‡YŸ„Êù¤)MµÇHë{ß=6· ¿æ,=èeèû'±Ïddczt¡^rGº>oŽø™£âì`I<ãb%u¹•N‡-aB¢ž×Tm‚J1¤ª™ü‚ÀÀu+âö§zÂŽ$À'/Òñ <ÿ#VTVÐÂN‚•d/ÌzR×¢];<^0•Âhö&ÈÆ™ƒ±˜°Ô-K‘E$´¾¢§jŸC<2WBùx_F¦ ÚL•ÿ
+”‘‹Ù"xçg[tûÖÞ‹ZLIfÆÊ¡x-®Ô’¨1òéˆBMV7Òzó¦Ç$¦B!Ìv¬‹¦“D&!Ýî|3Æ•8|¯¼Éõ: +u¿îÙ*Up->€ºaìÄ£@‘þ_ó$U”|ËF”ÞwFXÌŸq2ºŸ@¾s|Iäî´—2ÙªâÚËTô†@WÉ…”êµ5—=|÷†ÙV@… lSÂ5¦Ó^Eû‡PÑäËë×m
+¿¹‡š.gO¶åj€l¬³ée 98óŒà‘b¯ÔÊiƒ·Ñ}’›°2k¦îÅ–~V)ßdxâª]{ÒÐCZ¥ÍØøðÇš|µ¸Y ×Øn©¶þìW2ÀWÊÀ·ß²ž^¬¥åP{¾k£‚¢Ô`Lÿ+¸Ï_Ž²ÛÙÛëÙovõÌ> _‘‚.Ùè­Êièëñ
+6
+8z¬ÔúÝöÔ+³¯Ô£™\„õõéåÙ+Ž®¸ßºQš‘? °p¸7‹övrê^cøÊ.¤PFd­ P*ÆUâ†ÿE^o½Ïß_Ïå†~¾Ö0ø#¡{)uß'åâN t5Ô-»lÃ%Ñ£¼ô¿…ê(NýsfÝ«Žà5ê•ìgyõ¶úž4
+ À s—{¬Æ‘0áLêëîA&¿*ºÝI
+_
+7Úà¿.?âüæ
+- ³ÚAº?/°ÿyÓ[â{Céyãh¥õiªQßÝ.@úär×ÞÎëŸÖQ£ÕÜ^XÍ0gbÁ¯õ%1s†]ý3[Ø»àä–'Òéï$ô¥Z$㕼%--3øØJ̯J熕cwˆ]ö¦Òhá!ÍšiÚ‹ÿS'Àߥçè
+ô榕T¤1>)!H¶ã{Ù‘™%éÉ)Ä(eHZ÷„zE%LªSæ9 eþ9&î#ÙRžÎ
+t›
+½›ü0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+1987 0 obj
+11016
+endobj
+1988 0 obj
+1612
+endobj
+1989 0 obj
+8872
+endobj
+1990 0 obj
+532
+endobj
+1991 0 obj
+/LMJFEL+CMTT8
+endobj
+1992 0 obj <<
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/FontName 1991 0 R
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/FontBBox [ -5 -232 545 699 ]
+/Flags 4
+/CharSet (/exclam/parenleft/parenright/comma/hyphen/period/zero/one/two/three/four/five/seven/eight/nine/colon/equal/C/D/F/I/J/L/M/N/S/T/U/V/W/X/underscore/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/w/x/y/z)
+/FontFile 1986 0 R
+>> endobj
+706 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 1993 0 R
+/BaseFont 1999 0 R
+/FontDescriptor 2000 0 R
+>> endobj
+1993 0 obj
+[ 625 833 778 694 667 750 722 778 722 778 722 583 556 556 833 833 278 306 500 500 500 500 500 809 444 500 722 778 500 903 1014 778 278 278 500 833 500 833 778 278 389 389 500 778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 278 778 472 472 778 750 708 722 764 681 653 785 750 361 514 778 625 917 750 778 681 778 736 556 722 750 750 1028 750 750 611 278 500 278 500 278 278 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 500 1000 500 500 500 ]
+endobj
+1994 0 obj <<
+/Length 1995 0 R
+/Length1 1996 0 R
+/Length2 1997 0 R
+/Length3 1998 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMSL10 1.0
+%%CreationDate: 1991 Aug 20 16:40:20
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSL10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch false def
+end readonly def
+/FontName /FYAFTR+CMSL10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 47 /slash put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 58 /colon put
+dup 68 /D put
+dup 69 /E put
+dup 73 /I put
+dup 76 /L put
+dup 87 /W put
+dup 97 /a put
+dup 98 /b put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 117 /u put
+dup 118 /v put
+readonly def
+/FontBBox{-62 -250 1123 750}readonly def
+/UniqueID 5000798 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å–
+]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ
+1›kÙX”)¹Ô $Ü“%ÙÔÌDóù—©žlÀgg5ëÍhZ¬‘BÚþÇ‹´ü/!™½ôby(Nö
+ß‹¥
+ 2½W¡Mæš} šÃoó/ŠPpó)ƒ»
+Óq
+L
+#ÈùcQŸXñ\’¦û÷¾ùýî;Ö;3þíU(ø9%ƒÂ–fUAƦßÓØþzTFU¢%¤óGÙu{7Ï íè·%ìÆQtè»Ì‹k««
+0sàÑu0.Å»þÐêݺVK2™|¬)º(…–ÑŸÀä%ø@xéx½”›€ž®{îMYÒtj óhèÉîêÅ8ëehöàÏ5 ‡®dÀ¦ÑVGgÿ趛WåAƒë«SˆÒðÏŸ=¶HxU‹‰ÿÖå½]×G^%\c3˜…Œü}4Oƒ7`n$=‚¶kL¿±‘™Ö[“¨œýv³a\ç°¨jEï~'»U×8‡ŽnsÐJcãkiNë¾÷8 5‡SbçB•Aïó]Õƒ tv17kª.²á†>Ôåzüä¿Ó„²/Z÷ÐË@ ¬§y°P''ƇD–FšÍdcž:[ªôþ¥¼¤6½!œ˜`”\O¾®¡LµõäÖnñQZã:À 1¢;|œ)ö¢ÙbêµÒ²½ý[]VV¨‚X¶ì0®†<Áæh±² \àjhànF¹ù ˆ0Ì3ðüá²úGüü¡ý… 9Vb½—ãà¨z¿Ï ës…¶æ”!zŒñˆ0Cø®³SæfmcÑ?¯{‚«ö­ÝXýü[Ÿa¿éH÷H™d1س„žbëù¥«Ck
+55Ó9Åu³d¦œµCàs§ÍWsA «Û­ÇJ úå»óÒ²ì|f|ƒ×¹18=DOe4¦§»ÕQY÷{ÏÂ$H̶@ª›Ã˜2}yä^£ÀkkßÛ©Í(©šªÔfF²Ö0Ë šÉ¹C>½þp8`§ãlú\YôiÓùÏuvÞí‹+!–R"…÷×߀‹}u/ÇI‹Îª„dè4ôOï5×Òª(É[ÛŒ/}ÃÉ=ÎñÆ?Gi‰ùRqç_¡†»‡BðuW®1dêϺ“™^œÄÉ–p•yÁ¯jfãy§Õ¾dT ( Þ¢½7๴´Œ‘†áa*çý»¹–r¬“òÏJØO8Ù{'¯ÌÆNÕ´ÔPì¯Ö‹à°äèì°ê.Àh—å "ÍB¤‚16-ƒ_4
+ö1¹ØBÎao']äE:U๬m«"f­nÖ‰ì±üf•ÿ#û˜NÇ»!è„ùRÞÚÒ‹&inìÊñªi4{£ 0´OÀx8º]cMð
+ïBäë÷å€Aï„ù]¼¶Šã%¾.n šüë÷è™Y€¼ZÈV
+Í O]öÀ»_)-ÅŒz©¯-¼TÛ™Qâž ì¹X`‚qé(¨v6€|OnqK3G°_b¡‘ÁÄð°ÅÕ|f:Žní‹stÍÉ%ßdJ›ÃÈŒ%
+l…{'–CÆD5¹¾÷ÈÈ9Ý-sõñ ïmÌ(‚ *—uQs¹&ß4¾´×ì⸵g1ñoš¶ªàMœœµw10\á¡Ú›‡$"8f xgáA^î_aÁû¹‘W`Z’øQ±üvYÐ|-QmZÒ3N‹ôiYë’wóu¹ëêÌV;ë¼ ji6öª±t;qúß×»H=^¤5[*Õœ9«ÝH–¨ÍXÐŒ±j|°ãZ9=¾bÁq•C.HÅý8»wíEQy·øVÿ?–ÁÏiÕ,€;ú\v˜ùÉüs[›ô2BóYC'þºa¡§ÀZ>ÌÄ41ZÒ(v" 2ºø) D$Ñ/
+
+<Nõ¸#8E#ñ'»^õ¤„ò25®Ågiô¤ (<5üE}*¾ så¨ k©bC‡.´%‹Þ`+ó3-û¶ œ—šoÉP«ž÷m6EÌÞb§*ž6¶0 ¢ã„—ã¨î´?ÁÖ˜&±kYX0ÀçêóÃÑÕ„qðºAå¿›+“gÚU 'òßè#“5„EÂÝT&^?æ;tX'¶äèx-H¥
+MœF ?Í[‚âÝWiå
+ÍD4p¹9õN©±—Ñ÷4-ùFih 
+Œgg•)âè¿Û=…
+oÜì ÿžÍ »²‚¹)ÃH“¯U¥ìV}×΋'ÔÅ:ðBñbrX„8g«ÕƒP_2ÌôbßaÓZª•)3֬䆣åÏH5½•¨‰îxw6ɽlÑç¦7X‹ËÜZNQ6Nqú#8ðÚN’€ÁæÜÆœ˜@.耮9² JË•ÉA°•ð¨@h2AM¾0 ‰LÆ7Q8.%Ò‡ݹZ |B²Ò¬$ÀÒ.Þ¤°0ó¹³)N¿‹’q„ÌÝô¬Þ ¸ åŽF¬Ùd}!“ Áš!‹Ž7£ü”:ƒèÙ–?¶|whDⳫSípØ#ÿGŸê®Ní¸œ¾Swx£lýFëzípž%éÅxXoŸ˜ ä^ëZbJ‚º„¾…ÀÝ‹^ºÉÌÀp‘¬;ØuQIyèJ‡‘—Ù‚ F@R-¸äÈO·‰»Q3›ðórï¢~8oðnœßä"_ ,¤ÕSŒ|°ý‹$Iþ—ISênKt»–eS߯¾¢UI[7½èp€ÔNDØ(Ûx<zúå$0JgÏ—>¢®Q]
+64õ-CÀ~e¬õ¥ -b$ÿ>ÃdÎtRåBoß»T0ÝÔë2–iÝ1ø¬égø_¨Ýª}.ú§­Ïà×
+$,€¬¡Xl»Ó²¬û±ÇÚ1›MWí=*ö½¼ðó³¢ Ž¤mÜu£¦¦J«xs~[)|ƒ ­„ M]½zCR‡ÝeËgJÓWêÒ¶qµÕÕNiöyã­âu3þðAö¼Ç1xœ—aԹǜW/6àY'>»‰Kˆ¨–¼2‡°’šøð£,úç3¡GûAœ„6fÕH“ãõ8¶ÄhL¶¸ñ›é»îm©ý¡§k-Ò^¥&W:ÓÏiÞœjyŒñ6-“D%ôá^Žö¾îý©ì:áqHT*#þöÞpaÑVƘ€š‰ƒçž#
+ø-d^ÕaŒf Q3øòr ÷Ù·¢îCщ¢D.QÞ-;[õmS5§aÜJJà‹Ë ;-¯~·d 2œò²à)Mý£aƶq hÖ@’ç¯Dé,S_º(í€e'Þ€ÍM&Ìþ£ú—Ô«¶ËÊ]©;?‹LZÄ9Vêç–åhÀ-—†@"F 'ŠlÛqµ['¡ƒÈ[FY"ÍÍŠ”ßDlýÈ_zÏ‚mi«GÙkUÇÝÇ–xÄn~ðxì1¢èx³ÅTÐP%#ÿY+jy”tÙîªûÕ§pa‹.^1RIËÞ5±cHgÉTÎÖåTаä'T& 7öTF;ÒÀ[#`k‚jÅ•¯7ž6ûØ‹>#P.ç’>I5l›?Ãüúý¡7xB2ª§uEÖ†²œÏË!Ea‰ì—ÜðŽ³§~JüKQëŸj kRòÇC%ìº KÇ ¡Ü¹åt
+1ó¿6úúÒð R¶7‚$ï+°“‰¦Šúf<I¥MƒjWîö~Ù0œJ»…’[zï#µ} \nFïZ«‰Tß_"`Øé*˜ÀÕ
+äS®tï³›´dÊâ•9}ƒ‚œ„â%gƒXÍ))œ-§J‚f…2;3º^kñ§L›I•>.9¹­˜Öƒ‹]‡è‚¥¸¼ÑšD•1NJTŠžíµð©J ²FçSœ=ôéƒÔ‘ÿRj4‰>Uïr!˜ü¥­À±§|Ö†¡s/I;•«ãÓä´Sí<é #ëvZbaÒ¹ãë؆ÞX³ˆ…¹´2,ZÞÅÎMsÞ•Ö}ð:wGï¦!¶87Ï©0TÈÞ;ø‡?˜[C¾Óoݬ$zõwÁËK»
+J"f \·¼ak=½é ÑŠ§4mO ¶Üß»$ßç¬À?Ã?úŒ§º™Hšì’ü}ý!¯¥ï&ø”=[N)¿äöïÁ™ôR¥e†ËkÇ0&/áÆV•>¨OÙDß*Ÿé¾òaŒ˜ Ö&§RjcY°_D#s ˜týnf•‰S~O‡@¨RRâ<yÊyüzuÈ`õ'$°Êÿ\-–µ:ÒaWõ]§ûÃèÌ×[ñlwOâ£ú×ôóýE&ò9»Ó^¬u=ö6¨“äx‹Ä G¿½=tÔo_r(IøúÿE*6ž´ö§¤'ßîž\´ZÆÒŒ™ºÕ-Ú#Ž Ú¢‹+6Ö“Oa*E%ªqî•ŸUf;jÒÒ3ÔÎDoó?Iý7!®ã­ßÒU*¤F‚–êl bïË)1ŸR·GF÷Hå­¢m`ðÒ8:êÊ#
+çE\¥îéÏñ¯¯_spthlIõ±l éñÜêZD Î|vÃT®ºçoÖÑ*[fR †ã"ìž®•ëhh3^ø.i†súiÀ ·Œ~[žÆï+¼\i‹zî žŽ¹ºÓØ{V·§ߘ3 âˆ]%ŠÕ¼‹mA
+|¸BGÔCp@9W÷R|ô9ÿuµ)‚gf}« °¹\+þØ# Ÿ¹®^i«ÂÔdXÔ¡JO¼¾†£SS‡ø´Æ ®0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+1995 0 obj
+7031
+endobj
+1996 0 obj
+1132
+endobj
+1997 0 obj
+5367
+endobj
+1998 0 obj
+532
+endobj
+1999 0 obj
+/FYAFTR+CMSL10
+endobj
+2000 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 1999 0 R
+/ItalicAngle -9
+/StemV 79
+/XHeight 431
+/FontBBox [ -62 -250 1123 750 ]
+/Flags 4
+/CharSet (/slash/one/two/three/four/colon/D/E/I/L/W/a/b/e/f/g/i/l/m/n/o/r/s/u/v)
+/FontFile 1994 0 R
+>> endobj
+583 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2001 0 R
+/BaseFont 2007 0 R
+/FontDescriptor 2008 0 R
+>> endobj
+2001 0 obj
+[ 826 295 826 531 826 531 826 826 826 826 826 826 826 1063 531 531 826 826 826 826 826 826 826 826 826 826 826 826 1063 1063 826 826 1063 1063 531 531 1063 1063 1063 826 1063 1063 649 649 1063 1063 1063 826 288 1063 708 708 944 944 0 0 590 590 708 531 767 767 826 826 649 849 695 563 822 561 758 631 904 585 720 807 731 1265 869 842 743 868 907 643 586 663 656 1055 756 706 764 708 708 708 708 708 649 649 472 472 472 472 531 531 413 413 295 531 531 649 531 295 885 796 885 444 708 708 826 826 472 472 472 649 826 826 826 826 ]
+endobj
+2002 0 obj <<
+/Length 2003 0 R
+/Length1 2004 0 R
+/Length2 2005 0 R
+/Length3 2006 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMSY8 001.100
+%%CreationDate: 1997 Aug 23 16:21:32
+% Copyright (C) 1997 Y&Y, Inc. All Rights Reserved.
+% Notice: This font is not in the public domain
+% Notice: Computer Modern fonts were designed by Donald E. Knuth
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (001.100) readonly def
+/Notice (Copyright (c) 1996 Y&Y, Inc. All Right Reserved. http://www.YandY.com) readonly def
+/FullName (CMSY8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /BDAAAA+CMSY8 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /minus put
+dup 14 /openbullet put
+dup 48 /prime put
+readonly def
+/FontBBox{-30 -955 1185 779}readonly def
+/UniqueID 5096649 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+!–7+z,߉ñ1¼O5$´HGc"Ì^·8@ùòÁÕmu<¹ÿÆJ>Gê¶Ü8ö¢¬õ‚lŒ<ày|ŸŠÏÈn'Q°sLŸ2Ž>c©øÖÆY+6)?;;² Ü«&Þ ­Û2†Ñ…ƒ­*¶ŠÁõqä:÷hfˆ.Ü[bXZ‘‹¥ðgÌÜ-A­!((Æ5ªœé2ÓL÷ÿu|¿ Ø®p P]L¯ȨÞèq^ hˆ¥*"Q¦pL¦³ÈÀwªÉ~àJž£6H1TÊð¢tl*é¹®’ÌK"T‰´ KÍøK¹în$þ}ßâ‹
+¨eÄhnÜ>¾w§kö±J'Kh,©î^í¹ƒCÂØgC˜o@Ïì ¤ÑË%»MÒLV×ìĪᤂª`0að
+—GAXHÑÀà0–à„*)Ôî7%„D΢³~LÆüÃlÿŒˆA^£,©ª?äVöÌP$‹j™Ðšà ²¶ç‡$†`†®B¯¹>ë#ÕÛ{i㙶H¥óI._zùR„­BhÓ µü}ü±ÎGöê¶ăcØþôE(ŸÐ2™ZŸÐx
+ kcÑx̱æN|Œ0æœr¾uÉ0›'“ûáË>™”‰Šž‰g°)i&xŸ2m@SÈÒK\H*Ç3ÿq}C‡ÊýÀQâÑCá½sM®Pn>“`¾Ic¥Ôÿn´Çˆû ¾ã³ÚÆêÿ“_Ba/©û`0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2003 0 obj
+2730
+endobj
+2004 0 obj
+963
+endobj
+2005 0 obj
+1235
+endobj
+2006 0 obj
+532
+endobj
+2007 0 obj
+/BDAAAA+CMSY8
+endobj
+2008 0 obj <<
+/Ascent 750
+/CapHeight 683
+/Descent 0
+/FontName 2007 0 R
+/ItalicAngle -14
+/StemV 46
+/XHeight 431
+/FontBBox [ -30 -955 1185 779 ]
+/Flags 4
+/CharSet (/minus/openbullet/prime)
+/FontFile 2002 0 R
+>> endobj
+549 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2009 0 R
+/BaseFont 2015 0 R
+/FontDescriptor 2016 0 R
+>> endobj
+2009 0 obj
+[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ]
+endobj
+2010 0 obj <<
+/Length 2011 0 R
+/Length1 2012 0 R
+/Length2 2013 0 R
+/Length3 2014 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMTT9 1.0
+%%CreationDate: 1991 Aug 20 16:46:24
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /LPMCRJ+CMTT9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 34 /quotedbl put
+dup 35 /numbersign put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 52 /four put
+dup 53 /five put
+dup 56 /eight put
+dup 57 /nine put
+dup 68 /D put
+dup 73 /I put
+dup 76 /L put
+dup 83 /S put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 121 /y put
+readonly def
+/FontBBox{-6 -233 542 698}readonly def
+/UniqueID 5000831 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+yÂabÑ"x+äpïLÛ¦»/³I¼¯‹UNYë9¼‚¿C× Y/Ì€å õ0Ùåçeê,)»|5ªUŽLYÏÍ¿7˜¦œ®SíÙF <«o3PÎ2]<A¹õ 1¡w€éü´`7ê´¼i7wñʨrG)W„÷B&I¼>LÃ3—Ó^NA}êY »$Žpï0Fí¥¥&7¾Äá¢fá’ xQKñÐ [òbíry½nó,–žs1j@©:Þ٨뾌øV†Â‰7ô‚ð øp—«¶ÿãú¦Oú]íoáUºÔÁ×Å_©¤áuÐþmJ4 i Ät¡ƒ'8‚Ž_ %èÿDœ™zÁÑQè¢T^oD †Lªâ¢2J[&>œTbßt6§Ÿ-Û=ðaÍY?å˜dƒOÂo¬Ä5*°ñˆ›¹Ì_âŧJ·
+Ó‚ž4Éz O¹´$ôKƯ'ì¦ïËo»³cIÉÿYN•+
+‡ ¾©g4­u–gƒä¼œÚìN!å¿Àg¼PyZUÌžï˜
+Eq”ZØ挣„z§,ߌøÏ£xÚòÂ!¼b>d˜(6á´Cêšž¯,7Qjû—eh-­(v½*kÛî¿v—”kI‡¦ø­¦D ˜R ØqãR³ÆÀ[o8÷†Ó(a9á)›ú>n¤gåÕX±Å5¾UGFoc²Î¿8DÅÔgoM
+x6Ü\¼Ötþ7Í[%8´;÷è0(RËJä«W_mš@Ö”A«€oo²ÌTüî–ëi§S¦£Àv1 |ja{îOþü7c§ç·¹ûáçOU–ãÒ3n÷ª~
+>zÜ‹e“+"ÊÉ­‡öì¾…
+:U…a‡`>ãtì?§sî0ºj#ëb8ÜðË
+¤~Nè¡þtâv@8c7íA¶ˆƒófd/
+ŒcpkÚ<%gÀ¢LØîŸÓöÌ¥'™d¯»—•×ƒ¸jðÅãüéF»ž>./nJì+ =pL¨ê§&T 4XÊ/e°^¬»}+IÌß>eò à}ôK°““¸iæM%ñ~3ÅŸmüÄ%âçþÝ|Ýl¤øY|
+*œô«Ù)=pîÕ¯˜f©hy–ËÕçÃÁS°SÊþ×6 r]Ö{ d|²‚¾÷yɬáEÓíÕÖUgнsÔ¿BÇjqZa"f­xDóIÍ
+’ +a{¬ˆWu(nò–ý·¢›£`$
+'®zc +J.R%ë~µË/öƪ
+þ×Ç@Åáê/ddêkÚSèd.b:/k7È‹ÊÃùæcRL1úý6;”Eà+ÿF|dýVåï X<5÷ÿG–*óÏÑ0%;©¶‚€°ÔoþÖÞg
+#Êø¥zˆsä´6Ïa"Í ^Òfiþ½ˆ m;•<™ûû3>¢™n1*ìhs}Qq„ûlRkžµç°[ôâ^B`ÓmýѼÛÚ}<ÙYìb nžÒìšÂb E ¶Àùüp~Œð{¾ß{ÕÀø´¾ØžVÖÓNUáÜZ$EUÙºöaKl
+¹ÓGRËc.j}'%œ°çÈþ¢þ¶F•Û‘D¹d›ªç…«Ö̺Vºd%LÙXißE,ëßm ¿Ù1ÏeC)tH€Iô'6jYÔ¶¼øµxjÄx_ÏGõ‡ß^îÒ,´²˜Ñ¡¿»{¤ºþp (8‚w«1Ÿæù8ÂÅÑcwœbRÇPÝ\í’Ð2
+ô™0ŠÐ=W!YL~¬®þw¶+Æt΄¤ ìNï;Á¨`
+«IåôÖ¸ã8¦yxttenÑ‘Ä«À¨D¦­IóḺ:M!¾\ølÖDò=
+[ÕsTy½³UÕùzš±srü)ÌŽ%<CüNèÆž´Nœ+ZBþ@ @YÐmcº‚P‡}ž0Õ|›qÿÛ}¡œ?¸M85AÓ©Ú\„±“X´j3rª¬:öëù[üÒ}#ÀÇI˜V16?œ×ðÒ]\?,‘“¡£9åÚÁ:ö‡hë|À[÷ã%Ú´†ÍübV<ÌÕPÊÌËÙèäO4EKQ2þÚËÊDÓK$A~°ã0}Ó?å›Br~ bÞba=¾}d•Œ5ˆ‰“¤ºu¥¸>Úâ
+ˆÝGWó'£qçc{ꀇB•ŸPe2ýip”PîÊTPXÇeÿ}GD_££«<ÇþÖ?¿“BéÌâþTX~•ðÑmI³9S0æý¡sC„bV­&ŽQë Co9d!étäR¦ÒÌó¯u½?}ñàØÿL
+œX+\±¶h«Aß‘ýW¤òhºm¡aº+¯6.¥ýáxIj}•¹Ëµ¾þ ô!.ÃüÚ]÷šþ]UW×[Ë’’]tÒ'ä’áy'¨Ë¯Swð0¡œÑæ‰@ZüºˆŽt,ŒH¿~ªkÿdö|ñ~,T¶ù~ƒ2CzäÄt„»ï,è!µ¤ÖÐkƪoq`Ôâ(磃ìáh}Ú™4µ?è_F`ܽgLJëê3;̯¶Åk;:Åþ n®¢¢
+¤XBDÉZ0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2011 0 obj
+8356
+endobj
+2012 0 obj
+1376
+endobj
+2013 0 obj
+6448
+endobj
+2014 0 obj
+532
+endobj
+2015 0 obj
+/LPMCRJ+CMTT9
+endobj
+2016 0 obj <<
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/FontName 2015 0 R
+/ItalicAngle 0
+/StemV 74
+/XHeight 431
+/FontBBox [ -6 -233 542 698 ]
+/Flags 4
+/CharSet (/quotedbl/numbersign/parenleft/parenright/asterisk/hyphen/period/slash/zero/one/four/five/eight/nine/D/I/L/S/X/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/y)
+/FontFile 2010 0 R
+>> endobj
+548 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2017 0 R
+/BaseFont 2023 0 R
+/FontDescriptor 2024 0 R
+>> endobj
+2017 0 obj
+[ 642 857 799 714 685 771 742 799 742 799 742 600 571 571 857 857 286 314 514 514 514 514 514 771 457 514 742 799 514 928 1042 799 286 286 514 857 514 857 799 286 400 400 514 799 286 343 286 514 514 514 514 514 514 514 514 514 514 514 286 286 286 799 485 485 799 771 728 742 785 699 671 807 771 371 528 799 642 942 771 799 699 799 757 571 742 771 771 1056 771 771 628 286 514 286 514 286 286 514 571 457 571 457 314 514 571 286 314 542 286 857 571 514 571 542 402 405 400 571 542 742 542 542 457 514 1028 514 514 514 ]
+endobj
+2018 0 obj <<
+/Length 2019 0 R
+/Length1 2020 0 R
+/Length2 2021 0 R
+/Length3 2022 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMR9 1.0
+%%CreationDate: 1991 Aug 20 16:39:59
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /VXPPDG+CMR9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /ff put
+dup 12 /fi put
+dup 14 /ffi put
+dup 34 /quotedblright put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 65 /A put
+dup 66 /B put
+dup 68 /D put
+dup 70 /F put
+dup 73 /I put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 87 /W put
+dup 88 /X put
+dup 92 /quotedblleft put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 124 /emdash put
+readonly def
+/FontBBox{-39 -250 1036 750}readonly def
+/UniqueID 5000792 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+ .UŸm;›·3YZàê`“ù†7z– ñ*¡µ%ÍŸ§AþÕJ2¾ÍU¨hÝcšCpø2,Ë숛§#Ë@üJ©
+èsêÞ8,©Ï ûeð«íýšd»?Ms.š‰"ôA#
+pÃ9É–v*³\œXšé K ˆ Q­F7Áq “èÝ{N{G„“¹¦0oÛ?¦×8ª±Iû²
+,Eêó9#U*’¢;f‰%>d­2ŠÚ\m|E*ÝKÉ w £Wê€ÔžC
+±t8y4pʸ•h<N?Í¥.6AUÐþ‚NŒþÏFt÷㼊22µ ¾ßðÕÊl7\!LïXZ¾ Ó4Ü÷%%¥/CT2)e³IoólC Ê‹&eã¬I楜b%cF–ÆZ‡CžöXgë/˜#kú”é©þ?£ÄÔø6`ðÖÄ;~ ±l¯¡q_åTÜ!ç'×)ÕsòÃ.
+%Ù«rCÞ‹™ÖEõgKÈxúlÚÆõRû&`Ô î‡ŠÑP8®Ëö-¤çOËÝo<C?*¤Ã°^ÐÝ÷½){(ûò˜Y ãæÌÕżÀÜXÀÝ=îÝÇPYøüÎ1éÜS8g02^¯½QÜɸÔèÑÐîÊ™5¦ä¡×daº!»"Äfl¬c°Æ'X~êmÃÙ(Ä3
+FÛ,tý¹½: âçŸ2~ÏÒ”ùŽ/ •™ÎN —[GS éNMCäh2x¤ JJßåçÏ/Ã#ÆËùßÜÜ–¬hHíC„±Š9i¾ÎÄ7:¤6¤6€€|†àµK¸3G._1ª³M©Eê²fÌ<eÒ±>°c‘ÖŒ’‘kd#à‡~ÕÖëxí —H·ËÆ´»/Û&Tì¶ÃË æîGãn „²ÆAÐÚ£||æ¶, š5l’™VòÛ˜à„=SlÆôk€d¯„ï{ô*w͉ÞÔÜûíxº>“ââjmà¤Õ…h¼«—oè"3óæï~iÜ×¾ºþ¸?Î#á L¯ŒÌò}“ÒP]½m— f§Y;Ö0m”+ÜÉ‹žQÎÁëKÒwìfõE@ÓÖ–oaþ+ž‡E?o̼mÔ¥˜©S†žXBÜÕeGÌ]Ì­xv2¡g©)¦ø}|Ö|÷DÓ|[§Hž#3»K}Ãò>CãUOÙ²’mŽ8¹ñ¼ùƒü»ë¡ÛÇâ7º¼š4‚â¨ÅµžE²…ÇëÓcã\¢ß¥ %@ÛT¨g—Z+ÃÉlúÂ…îlT{Ç.ã|ý3Ù´+EïŽÞYÓ<+wêõ±P ÇaÇ8æL0?.ƒÄÏý%tÝ—ÓG?Ñ \O¢˜UQÇJ´“|£pŸ\×á42 ȦûTí.ôIÔ¶¹ìÔ#Ý¿J÷AîŒâ‚8ˇ6^j›2°Ã6Ëy›¦elû¦ åUÒÑ…7Þx¢ó¦Ý 7YOï…ln„ô±¹måC?*©À¶Ë%×7øÄ¢VVmU9-uÊàeÄ­³kiÂC‰©¢¸wôÕûûô¸;Š±Ÿˆà}³vàr›‘J üBãr3L’}ð§Þð±DmS64§„9LvéŽä­7˪ê+|í8‚ÒëÏ|©T1ðk[Åúµ–k]P»›ìib(yˆQh]SEº‹¥Ð~êQ Ó½ò#kXë
+ZØûîªô[$o7G«™D
+á‚i”+oÅd}lHQÎCF§õyyèŸz´p7bå9B|å…ψÐÈä ïÅ ÞÇ°ˆCºÜÇsZ(ìð
+ˆøvt+/£íAZaQAgÞE…mT‚+@ó í_€bR÷œ`_Å¢l ¯–Õ-aãcôÊ%
+íñ$ Œ9LUd4k!±× ~råŽt¯jjü·îÁÑùQïOÑc1¥·Gw"qÒëájÀÛ£LeÔ>ërG`È×öí/{òlu(jñÀ%l”ÜÇê÷Ä ËÓ[¬µg>dyPÓm÷ c ŽHYÄkÊC †‰üo­zBP¶Ý_#˜½PLr©ÅL›ÎRL`3‘‘R»B8xÒžO“ŒÅÞÂîÞæЪUQë…áÙ‰l³)«PÜú @¦±7Ðè½€¬l®º²Ä¤ï+T¿$}ÒO;brÃbœäk+ò( ýœEìåIUE#†0æÎ÷¾eºV~ÐJûéÜ,캠5»$ÒŸªüIv„·ú Dí8d•äÂÊòÏÅK«Ê¸¥½ëÏßSîI¨K-êƒ|m úödÎ/ýÁ8’ä6kDÙöú–0<ÕC¿O×à\6°Ñç›BÆ*~iùÜ+[Õî+’)\­3®W=öëA­ï9Sôáˆ8FÆN}I&šŸÏºR”6Gúµ6A‰U5›`×9 û*Y ù%çÊ+Ø(…3›€RÎ\+†¤^3ʘϡ!ÿ”@Þ™Ú —òIÓ©Sˆ ¹t‘¤¿.áÇ´ų±™ø‚ñ,öÁÇzÅSXÝt!iíÆ ”>¹ËXq
+¸.±½Ík‘Z»3^îë$‰8|ÀñîÀ©¨Váns?É;)æ¢àpg£þ)ñ@n+ù˜Û­‰ÇýÐw þq×ð *ïM[8ORýÙ‡Ž¤@gÏ.CzÇdÊÓ
+ÆLf!2ŒšÍ^ÜôZ©c¢Xe¾¬ç3¯ìz覵XB$ÍEB{†C‡6çz;ë¬f ³þ‚Æ’"“´õ
+Ÿá?ýÆž7=MR–+ûPÜE7åýãÂN
+â¥_›‰>h8®un6ê%ÑÐÈ­÷>¡ö Â”—å9%„  ©4ï1Ô§z#ȾGÚ gÞ)x“#B¼Š0ù‹¸&ça»¢“–æPô9φ’‡É±D7àC€=JOÒè´džMOC‰ô‘F¨£›øKû4Ê6è9àC@ UÕ
+XU^<„&Í{‹~XµK^È»'¢ù„@¡–Žî ÞRnâP)ØnÜjÏ-üg5h™"„îh6ÞÐÈF}Qb¹2Ä™&ŸF?âw‹’'ÿ0Z˜Áû#ä-Ò\Þs`Öyu¢øÎ1/Àþ{ 5$u‡µÊ–Ä«E¹‹™¯‹ÆU æO5}Sª¤ÚÇ··¶š ƒ_…ŽÅ0ýá %YïôÉN¸ì¸›F³È=¢¨GxÇ®íÞ!ܧYök£ÊÓû þϽÍâíg ÚœU
+ (‰ÜuÅÇg½÷ŸŸ´€ßž8Ëâqòµ³¼ ‚X¹Ètr0Ï<!uÂU•
+†n¥Mæö—“‡]„õã„gUðgÚ·2žØO“ "ïa:ÊÕT÷Ìh`bÎW‚¼Gé×)ŒXŽ7÷õÌ)Ö_yPpÞ@Nà²b<¸Ôh>ý*þÙüFÀö‘T \͹dè[«PFŸ±}cÐG.•mO곘‘/÷Á¸öŽD¦ó‡L–q G¡ÿ©"œIqf°>¼å;bFoÄØF,˜¤± !Ä›˜uçÁ°~ü­†N-qœÀξÌ
+ÁJ=‚(Dð1]‹«^ãyaœ
+ª™j0x›æ¼ÑôÐÜì¿¿@Ç–Š’aœÆ°ƒ„hß2 ¯;÷[†7aò[‘“¶@FÝlµ½ƒ†„QÞ¶_]3š>ãÉ-k&;KE-º?ä¢ôNwxµ«æ/'IU:Mu`âÔ©mói{¬ya™ÞwÔ6µë0jz¼Eû<ÁN]×7÷ï ›ÄÚË™jèç~Ã~¿W5óB|@‚²™Íùkó #Âêˆ ¬ )gù#A‹¹~µ‰n¢–Ѐ°Z…ðT-ñ@üͳdÔ¢±—É®wW6þ©{u‡äAf—~wc%)ˆ´vÑM¹–›¥ä°>CÈ>„2˜>¶*Xƒ¡>'qDÛ…sÕı´ ÜŒÞáø°¯N§3pà®Ó›#–ã’›þß¡8.T¿Q¨ñÛ›‡Y~,KQå9JñK݉„‚Þó+ä·îZÆ]ÄÛ›wN×P\Q´G÷Áñ}d@;ÌMr2„H‰èn\¯ÜSQ8aJåÊN.´ÆĬ¤‚1×ðn§+ ’6’"õ7ôt‡Iº{J^ ,àqWjÉYËJ䦑ýˆ9/[ÜÑàå2‚©DvñªÀÉï¾È‘{Q´öê›ø$GOS¯‰¸EŸ£ìîOj³ê~KS+!‘ï$  eÞßx€"PrÏ£’ì¾÷Ÿ;
+qœ“ökX¼=ňaKžôoú‚ʞ7ì/ÁüÆpá_N¹ Ä–Ëúü‰¨‚ñì¯È3ñ·ƒIïX k² eâ ás#Ú¡@±“›@ &.–'PB°³:QV±ÔcBOü'×ÖoñP"O’níÔ…æ –T°v¾ŸļÜ.eSL
+@á—%®C¥ Ç@$*j,¯éÓ܌ݩ€J¨Ï‹žüО©Õ—¶ŽÜ9ÎîG0‡òObÁ“¼©âŸÝçÑ¿>åe„Càw[gíËz)ÒºÌt¸õ/ûÎe8Š¼²°ÃÁ*t2‡—x…˜H“‰çþüCf⊆õ"‰„•ŽÝкþ%üdÀxLù¦B>IA«ÖÕ70lV^ÆöG
+ë<K©\.g'ÚËnÆînz˜7#ƒX9·P0ÒPðþcÇk$¾ÂËk´´åVù"™«(ýÒ6ñ¢*#ÏŠ“"éD›·[’@ÉŒg6èo§„P1Ï.$UÕñ&vÔ~”:¼^múÒŸ@#@Ô í/ËZ¦”…ùo&W‚÷)—Œ†8 E;'„¡ª[ËW×¥ñ 0I>#0ÛÜËSÂW--)¢æôœW‡?®³£èƒºh{!6›jÝÎaŸÐQ+I=lúYVz}iì(ƒ;òÛ#Ej3•­‡í%Ãk- uƳÕEÓÃ_‡3oí àÎæt›ö—«_Ý/^,¯×„ÿ†Å°LÛ·×ÅrtT²TŸç¬§9ÁSÙäUjÌhÐÐçÞ'šht݇ds*bf?dnÀÖ|>­hC-Ö¤Ïl6¤‡z™)ïüÊ×ëÅ—}ˆ€JFpgG§3Ôá «ßÖÖO9GO”oëÒPN<¢:>‡Ùî;-Ñ*¹hŽÛϾ™H<¶Ï*ÉúçŽDÿ±[ƒÞœTwÙ®„8ï/9¬ÉÀØ ZFÿtñÈîn£9ÌбZ,Á=Ž*Mo@ÏOKJ m Ãc¾)>ýéºËÿŸuoÌR§o:ÚljÇb!x¬ƒçÏ‘¹‚ÿ‡ãÑY ÑS’PΈ’b¸÷Ï-,°‘Œ/E¹±4+Ï-6¡¯'*36²É„8œÃ¥Ðí´ÑŒÉO‹éežëí˜ð]æ׫0ÿ7¡–Uõ†99Þ|B<Jß¡ì?º)D?©cÜèŽ4ìÇ’¨oMŸvÃ~|MjÅÍùô±¨ ôGlõˆV6"ЋCÝÇK>E8ty(<ÍŒeëB7ïþ=Ÿ¿ÛI’&w>ä¬6z×Q
+ðÔRÖ=ðNJ]àUôüt,9Á&]áN€_0HQ/ý÷ûÏ;du7Iáø­Âýr‹$¹§/¥¥òzûnßµ}Z^«ˆpö†±âÙtÒu·g!ÿUÌZuʵ<ó¥R'!‰T­Ñ¼Ÿ
+®ŽX…Â_Àƒ‡amŽÿÆ]å«yjaËæß@Í´9xZ
+¯“¿þ¡Í[@3¸;/ò¿ï]aOuÉ#ôƹv¨oÛùÉÏêuα ¹Ó\ˆCp7X BÓ™! .eµ‹úŸ© ê§ kèæ ÷ZBZ›CXgÑ@ܲt,ä~e¾Î`
+ô(¼¹hÁÌw¿HdÍ8Eµ‹ÿ;·ÜiÔâ’ýÂ
+ ¦&|Ù^6g1€pNض(Â:£»'+\½îɱÿœö%^Þ¹Àíâ’˜”zbQyèÇL l|'@ÇãtˆL×î㥕–¸)O“^«üª©œŽïƒûô$Ø)¿²|p mtôýÚÇw¸Öoø«­vÊHÚ³Ëyd£CmÁ>¢Ï ³"tËÿ)+k ¾ÓæíÄýØê¾>å²3 Z¤°…h@Tv’Oœš¢~6SÒØ+¾€R•u‰±Ø(eE}µÍƒ<u‘•‚ôò/¥2Ḓ½6Ó—Ü?öæÏž•ÛI
+¦Çž•{¥þÏU.䌺/Nünó|hJ|6h €…‚½þÍÖ¶1JÊ3•6xs½Ñ«tr Ýño·M^{í~+E¢ùo¤*\<å&7[N'ÀM@Ϧ’¦ÎlŽzòÂ2)]‘+]ëx{…ÝU
+iæoŸ®ŸüÌíZ¤¤f#ÃÂ^tÞ‹U‰TûÖvjïà»ÆÎúÁû[Ø*³U®£HÅ^W62Ù&6€snW¬æZ½<•>Ò?2;‡èªQqÃA{+¯¥žü¬»¼=³Ú¹ªà1}ÞøíÌ •Õf¾ËÞ4ýØÕÛ½æÔq|Í_Žû†:“x‘À4­z+ú¡£Ê˜ [%¥ùäøƒ]C ?³]“«‘Ó¿'5ù?\.äuz%
+´r¿ßÈ}µQùâóÔÆ|-IúŒÒÝÚSŠuªå½ÑÔ}Û ý»¿òÔ°[l9_ìõ1õ¶|(S=ä€úú/ñÀ?¹i0™<Eõ†¿åŠ
+×€½6vù.Sý©/wv±:„Jª,“S¬×Ãñ”߇íÈý XØ‘££3ˆFïƒÃæ{HuPä!§³.®Ù7Þi+^äï#¬J í‰O`õàxåÈ 0çU”Õ$ÄÇž*žN’dĤø¾ˆþ! `8ðYâOY6ísŽØÕpþO(I£Óí:;oâÜ0^)Á3e Œ¹2»ÐÃ5Í¢‹®¬‹RYÝ­âb.ni`Q38¡ç··nG3ÌáÕÎ+ÄØçxæ¿YC±–5–Ûzàtxš›ŒêŽ6ºìQð¯-½I7©ŠNqß•RE¡ÃT@S ‰º! ¥îóŸBöúÊÆp;Ÿ¹å¸ÎžÚi—~ªµçÅò¤g=(¸ îSáÃzÅÜ@üìCÞÔU»¼iþ AT=„l‘›x¸U´ýofxšÛ*ù £`â‹ù§Vg,ÀI•eïÔù’I ¶Úû–%‡Ãõ©Ð™$Íy%uçŠÝ­µ?@îIpy‡ëju­©Dq‰–y=
+©.© ¸ìgµ¡ÛŽïqwïlŠç
+í_kÑ’
+äøVr>\ñÛïb^ÐíÖ ulWøÇb±~àÑ£åMºIs¿Ü]çœ%a{b±"«dœŸPCK/^w{4·'Là¤éO5Nðànƒ"ÌÂøG(ŸÖ™ ÕÓË1ÆTã›G4XÅW^½¸Wÿ–¾Ã­z°~²`»‚Ï;ö¹)×Q©wƒP®U?³yéXý!ëà‘Â%>¹2óºöî fò»æè6œ`H”ó…ÇqDsD_
+ˆ¼ªŸƒbbUµX†;ÓþCNÕ'ìûy0âÝåòÀwþŒ?®J˜1c2;ãql¢i“[r4Ç]àÛ<yæ¡’ì"âÇ'$œÇ™³Œ8¦:è¬äm?F=æÝÅ
+€¡C-¶Ÿ³É*&ߥK˜7oVïxŒ`ÇØ3‘·À
+‚ wô.Ʊ.:Œ; ½0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2019 0 obj
+12493
+endobj
+2020 0 obj
+1673
+endobj
+2021 0 obj
+10288
+endobj
+2022 0 obj
+532
+endobj
+2023 0 obj
+/VXPPDG+CMR9
+endobj
+2024 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2023 0 R
+/ItalicAngle 0
+/StemV 74
+/XHeight 431
+/FontBBox [ -39 -250 1036 750 ]
+/Flags 4
+/CharSet (/ff/fi/ffi/quotedblright/quoteright/parenleft/parenright/comma/hyphen/period/one/two/three/five/six/seven/A/B/D/F/I/M/N/O/P/S/T/U/W/X/quotedblleft/quoteleft/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/emdash)
+/FontFile 2018 0 R
+>> endobj
+547 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2025 0 R
+/BaseFont 2031 0 R
+/FontDescriptor 2032 0 R
+>> endobj
+2025 0 obj
+[ 754 1000 935 831 805 896 870 935 870 935 870 736 704 704 1055 1055 352 384 611 611 611 611 611 896 546 611 870 935 611 1078 1207 935 352 352 611 1000 611 1000 935 352 481 481 611 935 352 417 352 611 611 611 611 611 611 611 611 611 611 611 352 352 352 935 579 579 935 896 851 870 916 818 786 942 896 443 624 929 754 1091 896 935 818 935 883 676 870 896 896 1220 896 896 741 352 611 352 611 352 352 611 676 546 676 546 384 611 676 352 384 643 352 1000 676 611 676 643 481 488 481 676 643 870 643 643 546 611 1222 611 611 611 ]
+endobj
+2026 0 obj <<
+/Length 2027 0 R
+/Length1 2028 0 R
+/Length2 2029 0 R
+/Length3 2030 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMR6 1.0
+%%CreationDate: 1991 Aug 20 16:39:02
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR6) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /REFDAA+CMR6 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+readonly def
+/FontBBox{-20 -250 1193 750}readonly def
+/UniqueID 5000789 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+~ õÐâOPQùÍìá
+÷áOñ\Oóü¤}ÙÍ<zêQ}# íL TRh¤ú<c8ºlñL=ãºòê5)nãØÖIbwáÿ`vþdȨÃAŸ§tG=c"?úAË®`œ=—k“ß´šÜ|Nðsù8Ý©öQöÌ÷•UšD˯„§m˜<ïX# T­HltÄ¢Wüp:Ï‘‚Ð¥—¥ö€¶äï”­ø¿‘¥ j€m¶NÉf6©ƒ—Ò*t“.·4jœK^éSË<€ªcKü(ª“ŒpKÚÄÑ5QÌþ+'„¾‹õE멯ԛy#{œV1P¼0é‹°n¬u]j¤æˆïâ ª± þ
+Î^Ã;åëCý÷’ÿT—Që§Ìò”Ê[I/¨=ØG6n»õ0æX9ƒqŸåç(Cïîkéí .FŸsH/Â&V©|ï7¡*¬MÐq5½£Ö'Á¤KpÞî<úèNe—ºõ+Ô¸O¦‚©ª3‹cVu)'F¤jµµ³³Ð W´Þï‡l-¡ÌÚCB£tN!B¯)ÄSë¶]îaÚÿ(ƒ:·ß÷º­‹,ËR;I
+„
+ùÑ_hI]ÇÂw¨­º¡¶¶þUU‚Ãv3È%kêìBCø{€ó–·Á´³@|ndâ#ÕEýžd[f=¿E²X¸§\L2‚_ÒG‘µ¾Räûã|Åì‰äýrœ@»#×þ6û*.«œ¤u^Ÿõ×T´ã!(˜Í˜ä¼*ä]{K n‰õ¦€
+ºb:=E LÄae-·ËeÍ$á“•QR C§ëvÕ¼¦í¬×YeQ3±&´£}ì'‘Ò‹
+p<%xÖ»½3賟d]ÊS†8Þ•ub˜>‚ ,ùò§>%¶ÖÙƒ7Vh-¸ãEH²wu€Qþë:&Ú«pƒ³v¡Œ²(6Ç®z‘)•½¼¾œ³'nýæ®æZø=lø —K3Ñý‰‘©¯÷…¾\Ii“äº|ÂÐ7ð\ƒŒX”/Ìs9&Y7;ódü_Óè±D
+¥/qŠPÿö‡áY•I§3oê© T }x¶•`©þnÈVËû)"›Ø·Œß`Dʼ—[sÛ7¯Ðï-\õš±Ó×™ÞÍuÞ½ÄÛ%!¶ðµÔÙ#ÓÜÆÎÆÂÈá~-¦uß±_•Yj¸®>¼ß1 `¦)_5|³ ‰—EíÿŒ–rmM¯3eJçÏåoÊ¿c’„ÚÒGâ:C1œ«B¨¶pºøŸêƒ/$ø³‰
+©S¥ÜÏÜá/dÚ†ëœáО§7õ»ó}¿óªöÆ,ÚÙüÎTÃw-¦ 0Ž¿÷¢J}¬
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2027 0 obj
+4133
+endobj
+2028 0 obj
+911
+endobj
+2029 0 obj
+2690
+endobj
+2030 0 obj
+532
+endobj
+2031 0 obj
+/REFDAA+CMR6
+endobj
+2032 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2031 0 R
+/ItalicAngle 0
+/StemV 83
+/XHeight 431
+/FontBBox [ -20 -250 1193 750 ]
+/Flags 4
+/CharSet (/zero/one/two/three/four/five/six/seven/eight/nine)
+/FontFile 2026 0 R
+>> endobj
+523 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2033 0 R
+/BaseFont 2039 0 R
+/FontDescriptor 2040 0 R
+>> endobj
+2033 0 obj
+[ 664 885 826 737 708 796 767 826 767 826 767 620 590 590 885 885 295 325 531 531 531 531 531 796 472 531 767 826 531 959 1077 826 295 295 531 885 531 885 826 295 413 413 531 826 295 354 295 531 531 531 531 531 531 531 531 531 531 531 295 295 295 826 502 502 826 796 752 767 811 723 693 834 796 383 545 825 664 973 796 826 723 826 782 590 767 796 796 1091 796 796 649 295 531 295 531 295 295 531 590 472 590 472 325 531 590 295 325 561 295 885 590 531 590 561 414 419 413 590 561 767 561 561 472 531 1063 531 531 531 ]
+endobj
+2034 0 obj <<
+/Length 2035 0 R
+/Length1 2036 0 R
+/Length2 2037 0 R
+/Length3 2038 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMR8 1.0
+%%CreationDate: 1991 Aug 20 16:39:40
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /YLKGAA+CMR8 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 65 /A put
+readonly def
+/FontBBox{-36 -250 1070 750}readonly def
+/UniqueID 5000791 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+ŒÕWÇåת>©~ºÓ–Ñ¿ÏJmdv‡Aíê
+[û¿4|ܾ.×V–z¶ÛÄ_¢£1. F¥ýf« |Xÿîĸ9^Rw]
+ü×ÛŠ³31S\D¤ËKZÍW`– äP”Š^êÝ3ê ’eÛŽÈ Í8`2?Òl;ˆÈŠ!eXxh
+Dfú@=$»—*I¸BÁ€äÒXÉÔ!ÐWx-b1ƒ £™³ÅòòÝC; p™À}½âhÐÿíQi¼Ð=H²ðX­bØgŒbmÇ£óR,™º–>ù_ŠÑ¸°ÓQ!
+äÂÅZØž¶Ar“]< £˜óîîÃQ–jt8ï?îB,mN3v լǵ+í˜Kú­6ï t‹Ð{äAJc—Q%ÒrúØ?væÿø60¾RmXsŤ+pú‘Ǹiñ:þUësõ‚ƒ‡“¸Ì)káÜÏPýWË\~Ú;
+ó"ëßÖÒÌÐfl"®øîd~åé•ESáËñçŠÛH“füN.ì;ãAðåßO°¯ÄÀ¥ž <· \r¯l˜5_ÐÂc™©m@vÆw.¾âIâKGAæPCŠ6žr¢´|ê:’Ó±méëõE£åÚÀÕ7¾9Ìx¥fùÜbä§#O€Ó@G>ŽšÑ7sˆæ,š‘+Ë úé{È Ë'%)äWÁ¦c&Üj`W©rÅuxN¨eMÞÿ+ÔMa¯x0ÜÑ¡Ò•Ë=u®óÜ«“wÛ{ö¾p¡A¤ÀÕ8Ð)ÂÔ¤lJI
+&C4Oë+›9§Vyà|N[ù8§_©À†]%ùb“°5NUŸÖ/µDŒT$ õærÝ7DéNl»GÄ´f¨Zuâ#ZÕ1ü÷ñæõ(ø;¹k¸‰eÝ¢KŒç)Çù±(¹ÒÝRšåé\ Ìr=Çj@òÂ^ŽR¤[î`À4)Á¨N.ÔZ?ª_½ø.[VîOgË’u5/ÄÀIáJ¶ô­ A3Vh>WZê2¡ Ñ"KÀµ“ ¡Å>ñŠ ÁŽÁ”
+«³¼¯e2h‚,gµ:W/Xà®ND,ŒázÂÆð]KLˆ·Í×PæH£žªâöeHÍdÿsó/Ÿ\ŸmÁ&ì>‹¬Ê“S [ƒ#îÍ'‡ðÓÎÁG®“„ùK®åwîöÄEØè¡Dk@¾“‡¶dnÆÏz†®ÒµôïÖ5TRèwë»Lœï»~~!^þ²×–ê3±ÿ³+Œ<-`úÌK–qJêÂ9•ÅZÚrû×7jJ¼Wƒ</ˆÅy‹ä fà »öª¸¡‡ÀZy›¨¶W¸œò›{›Ì6ÛæcÆœ3¬7¡jÇGV€…¹ÑÖú´¬]0áÑXœ F¾…K×äo˜Rc‘?Úˬ$ÿ‰OD↓!í5ËñPŒküšFJŸÐPöJú‹Œn”žŠ™òýë
+_”þ}´¥Kú±dm䄈xM=­ˆö´M¬7`$¡Æ^éP ¿©º®Ëi&«rA¿¯’E¿¸š ,ÜweÜ<VW–ºœ’j“@ÝpöÞÕ¿16}§À Ü·_~úº[Hê¤cIP
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2035 0 obj
+4323
+endobj
+2036 0 obj
+925
+endobj
+2037 0 obj
+2866
+endobj
+2038 0 obj
+532
+endobj
+2039 0 obj
+/YLKGAA+CMR8
+endobj
+2040 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2039 0 R
+/ItalicAngle 0
+/StemV 76
+/XHeight 431
+/FontBBox [ -36 -250 1070 750 ]
+/Flags 4
+/CharSet (/zero/one/two/three/four/five/six/seven/eight/nine/A)
+/FontFile 2034 0 R
+>> endobj
+512 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2041 0 R
+/BaseFont 2047 0 R
+/FontDescriptor 2048 0 R
+>> endobj
+2041 0 obj
+[ 615 833 763 694 742 831 780 583 667 612 772 640 566 518 444 406 438 497 469 354 576 583 603 494 438 570 517 571 437 540 596 626 651 622 466 591 828 517 363 654 1000 1000 1000 1000 278 278 500 500 500 500 500 500 500 500 500 500 500 500 278 278 778 500 778 500 531 750 759 715 828 738 643 786 831 440 555 849 681 970 803 763 642 791 759 613 584 683 583 944 828 581 683 389 389 389 1000 1000 417 529 429 433 520 466 490 477 576 345 412 521 298 878 600 485 503 446 451 469 361 572 485 716 572 490 465 322 384 636 500 278 ]
+endobj
+2042 0 obj <<
+/Length 2043 0 R
+/Length1 2044 0 R
+/Length2 2045 0 R
+/Length3 2046 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /SGMUNA+CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /alpha put
+dup 12 /beta put
+dup 22 /mu put
+dup 23 /nu put
+dup 34 /epsilon put
+dup 58 /period put
+dup 59 /comma put
+dup 60 /less put
+dup 61 /slash put
+dup 62 /greater put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 78 /N put
+dup 80 /P put
+dup 84 /T put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 102 /f put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 110 /n put
+dup 112 /p put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 126 /vector put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+/UniqueID 5087385 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å–
+]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ
+1›kÙXž9JS:6ÔV ™
+é:ùm— ,MZ+²¸Ç’\Ex
+: áØã9pEz–~ÿ„öØGu E¸Ì[Ùn窙ÝÉài9ヽ¤u#=X­&>¿¯Â~J~П°ƒUöêtå0°t1Cò¨qs-bØ5±ŸÒÇýð„Õ 4AšÆG˧÷OE1Ü»Ú"®ê?»»@~
+ÌR½Æ ¢”ÌO“ë‹öÔ>›¨XÕO8‘ŠÈ' IVÕ‘ðTnPü¯¦ÛÐ ‘#õìÔ«3³ÛL®3z‰ŽÙ›oH9@ÉuDøˆêðËë JÀsÐf*¨+ ­5èx/…Jöl ÀþñÍÑdc!¹=2~SØŒ è%ú•ªW½qºWå†c…Óú÷ð¬¾ç–È+ÃúžT¡bUìÖp©Uã±b“f†±%ñÝ™i²eµ÷["–?”íêè™PkH¥&õ›j÷OëoÄ;ã§uB‡ÈL·]rÚAÈqÉÚ¶‰’9¯È‹6ciéµSD•Þ×Æ#<ñƒ,1šVÍ ¬‡åµfÛƒ–Óx#û8—zWº¯º×ú1eôÊÃLTˆ¶V‘Ë[IËqr«¶i™È}×ï/¡Ã¦]É÷1¨Ç•èÍ&W5«=Å7¦Ï}þÜCÑŠoo¼/ ÓóÅ–ÆÒˆ„¸6{Ú·T–ÚÚñOò{…Ç‚3ÿ
+·Ì½üHqh¼8ňÛî/Nh–p
+»gyçöáÌ_+8&5´…ãNË°Gd3W­L™ #äjqâÃ
+gïýA/Î{͇kPÅ/ášÂ ÷‹=8QÇ5WPI^‡rö|•9ð/$#ˆd±4å/í“DÀ@Hg‚#E>‡í0ѺìQ€‹KO‡uPîñn{Ó¬ëÂâ–Q— ‚õJ×_Ž¸£(¶N< dÔ¤"g G;Û´ ¶|L‰øô0~‘jÖD ˆ¬³ˆ=¹·¿sÁ}³¼´$~+è/­ÁI}ù^$ˆò^0×OÕ#]:bÍÑäJˆ+Û扼ËñW¿È&÷rˆÇËüV»»¹:Ç–¤ý@ gµ¾¾¡‡àáŠU7¢+6Lw• ß¶xf¥­[‡øïñ}
+‰.—+áö{›OÐÚVÌš
+n{?Iÿ ž` …Î*fõÙ%¥hü6hQNºÁfD]Õ~%Þ©ù~Ì=j_2«IŽÉ(Mj¸'ßhªÛØÁqÔ£›ä.ö éý¯iðw2QY¡µ+ËZ1ùœþø~Öèu,W/Ð ©LáM/W¶rFTˆÌEzȧ(Rj¸ˆûô ýÁJ¢ùu IëðøSzö6·±³Ê1¡§xR²÷ ¢×‹d‘cN?U¯cŒç*rܸÛ4¼Ñ˹Ӡ3Mœªb÷2×I\Pô&¤íL£{WÑ÷{σ¨òpcÍž1(Íåh•±_\G1ü¿²5j¹wª ²qŽ·.CžŒñ6ð½W¹ÊÃq³ß9³*€„´4
+Œ"cˆé¥fžËsÿS>î-Ôñ]÷ÿ£ònOÚ:žÑ¾Ù¶Ýýú›:qkƒ”ÑY£Ç÷JDä¬Ý–ÖMø pÈ'ÆÃÒÓ¨›®55Rt%´÷ìù´eëJ5W‚Ø8s®÷ß·\çâpMj--0ÃSyÊ›øºô¨û)«uµûŶ°yjõ Š>Ž¦?çËm4"£h…<Ë"–wVã—¯—DÆ’‹>ø:éW°•Afsƒa¦”‘HŸRj¾ojÿ}ý%µ¡ñ܇¸#Í 2›N:|¡W…¹ÑZRÉbL«£+Ùö†9Œ{çS4SàŽ†A¢¹|SÖΑPòi6-Îè&¹ÊNèåhùr`ðÒ%¢Žù5lšI¦¾‚Š²¾ŒÆÒà‰¼4­÷ÁNÚ{#&ŒieR lŠ{Õruiû,o fGlê=!Š‡Ø.®¦=¼ W¿x;ðW(e˜óÄ(¶Û÷kO¹Å%chæ”dœä3@â,K s’¡D«2Xfhµ¼ 5M…6þ:Óæf#Ç&<Éâ²ìvö÷?,tÐË5>ämPØô÷Ä7=åD°‘¶ i•”
+š”•¦f)™anðH•]û ±²xŸ€8æÁÌt,œfÛ8ñÅ"èæ.MD‰{ßzT&ܬ¢£~ƒMñ}¬ dê=>ŽÍ(¬v/Âz¥­üQáÜ÷R¸z3‘ðÞù¸0Ø”÷&ø„ú†}°+úéà'ošÓ—]²“Ö¢;Þ(ƒ&q§PŒ»ˆÌ‘Ù!)ù+­Üü”ü–·%Ÿ=¿~+’‰×Šã‘tÊá[ûÁ$}J‹ãDÎè‚Œõ oþnŒÛ¤Ãavý*XA?xˆçGWl¾pPáv¸,D°ÀÞtü¢„"‹vu'gh»¿šŠ6 |÷õ9öÅ”lØ‹‰+9’ÕÐà¯þRA[ã¯ôqW=a͹DD¹¿¾šÏìF™Vø 7V­Ï>5{Oõt×W°oI7‡ ôÃðøÀ·ÈõЭ?Zó›+¾«.;0óÉZŠ'4ñ©†ÙOÔd‘§ôsXP P—’
+‚žñaÈ0½û¸”z¥MªêþZä•uö»
+±O»g
++ûƒÔB>ñÎÞ©mòêûH†¡Ì4–œØ2XáV Ð5y[ÏHO”îÍ=Fˆ šE§Ü©'¾ˆ„&DÂ^±Y¥/åÂ
+@ëwöYÉ ¹â·¾°Èa9ê´Ñ”sÎF`>¥yr÷"¿Ž¢–Õ´åHD®ím›Û•}ðò>./ öeÐêÓ½FkEö%Ûl›í¹¥¶).uu¥ÙžÄõ¹f}š°"N‘¿Èè,°ÁîÐn%wÙ¤½n*T,®˜±–YMq®˜°u?ˆO=Ý”–4f¦ô
+~È]‡«¨Zh®<ý³¾LV$Ð'ÏÕ24õ‹ÏVØ•¶zdW‰ô.`cÓZUõà
+hH¦i 7¡¯ÉfÛb;÷Y¤ü¤±}˜ì@¦UGÂ&)¦MÆr¾±ÔŽE¦vk¶‰>*¹M"¦×榕jü]Ìô´`¯äYOm¢\çýVpb]cæìâ¢ÒC—ƒMé߃o
+~n¡ö÷‘Э+ŒMÙâ#`ÂþomÊžÓLtÚMœ"‰N!¦OgЧŴµEm˜O‚&Üï±
+
+é ©ÿþµ±]P[b²Øë³äìæW±Ê„’ê *Ÿ¾·ÈB{øb^V´ï‹¢jv\”Ó(®`Z*Üê~·¨ª@S‚‰nŠ«½nˆ?_Æ~Ú—çì‘ý&%
+\â@wL%é0÷Û{€_R
+ð }/Ö¶û]*'…ãIò{WQéÁ nWšÎLhdòWÝXºÞ*·áÇg]kVÂÞòƒˆÚɇ¡ºx|PH!-fi\ZêèwÊèeåŠn"Ï,ØZÛ–-·ÔÒÚ —¤Úšf˘‰Ø,z¤YƒxÚ@9Íý…Ä®Êö]˾½´IbœØÍòŠí A˜†;Jðq[mê|$@:>|]ƒU“[¶6_‰ø­1'o/|‚ÔóÓ~[Ôóü~,å^I“ìI;å9Ôï?CÝØ
+ȼäB!±Ž¦tÆÙñFm,ªv<¶¨¢„ýr:?낾ñ´ ±Âh‘6šÐõN7I”À:¬_ð„B@m¨°Ws©¬IÄï`ûWÙ!2â¯bu–o²pJµðóÉ“è OOQ3Å:? 0gqåRt$§V±9§`ÑÆÿmÓÈgcï˜kÚ¹¦¾³™²5M‘7¶«¸wäZKÕ“ ²¦>•×'£Ä\Yq÷±?%o2½ ‘H`M½ Gja1çd2rxÏì6[Á.­_bç®ï½‰óJ‰ý¢Jòš´pq–A-ý.hký ×D[Ê.W£Æ¨>/ÉßRåRäX’ËZho÷Ñ%b¢þrkOcO=?Æ”ãg“5üO;Î]1gs7ôØ¿ÎrövþBJG¯A ¢.MÙÀ u˜ŠÙ½„vð]›g€Â÷ ðLcZ‰ W€Ç_tóöÙ$Y 0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2043 0 obj
+9390
+endobj
+2044 0 obj
+1303
+endobj
+2045 0 obj
+7555
+endobj
+2046 0 obj
+532
+endobj
+2047 0 obj
+/SGMUNA+CMMI10
+endobj
+2048 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2047 0 R
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/FontBBox [ -32 -250 1048 750 ]
+/Flags 4
+/CharSet (/alpha/beta/mu/nu/epsilon/period/comma/less/slash/greater/A/B/C/D/N/P/T/a/b/c/d/f/h/i/l/n/p/s/t/u/w/x/y/z/vector)
+/FontFile 2042 0 R
+>> endobj
+510 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2049 0 R
+/BaseFont 2055 0 R
+/FontDescriptor 2056 0 R
+>> endobj
+2049 0 obj
+[ 612 816 762 680 653 734 707 762 707 762 707 571 544 544 816 816 272 299 490 490 490 490 490 734 435 490 707 762 490 884 993 762 272 272 490 816 490 816 762 272 381 381 490 762 272 326 272 490 490 490 490 490 490 490 490 490 490 490 272 272 272 762 462 462 762 734 693 707 748 666 639 768 734 353 503 761 612 897 734 762 666 762 721 544 707 734 734 1006 734 734 598 272 490 272 490 272 272 490 544 435 544 435 299 490 544 272 299 517 272 816 544 490 544 517 381 386 381 544 517 707 517 517 435 490 979 490 490 490 ]
+endobj
+2050 0 obj <<
+/Length 2051 0 R
+/Length1 2052 0 R
+/Length2 2053 0 R
+/Length3 2054 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMR12 1.0
+%%CreationDate: 1991 Aug 20 16:38:05
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /TXXFID+CMR12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 33 /exclam put
+dup 84 /T put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+readonly def
+/FontBBox{-34 -251 988 750}readonly def
+/UniqueID 5000794 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+4•Ü5h¨LÉ#q§‰:4pPý¦ì÷?gÒ |GJS†nœˆæ^i2º‡§6†ê°“‰øM˜ Ęz0í”.²° ¿õ¼Ç ôâvÃ3›1¶ê»°xCj »7}0a¢ ¹‡–¸`~ì¼i”Eê¨fÃŽ
+{Ë Î³òÞ±Ž´è!÷+ýN7œ7_©¯À+—šk·‚S”ǺíJ"à
+JÞ®;UŒTsC×1,‘2çÈÛ€xVV\­è,÷7±ŒeÇgÏ.át ECi#ŒÚ¥¤%¤K¯lä"omõx-òéi*Ln—²[?$h'`°ð†‰ëŒ«RϽ/džN°M<¦Ècj´.°fšÎ ¿`±²U&Z­ áDHu7YÒä‡ïK|/9~1²SÁ²|O(¡BÇW^q%KÃK˜g=æ“kÁ5|z1NjjÔÒ‰7>WücÙ‚.XkÍ/šv[6Ûj¤EŸjÔøëÖ æ€Ý¿;.¹;{€YãÆt2 )œzòèÓ…®Œ
+Rxðy<҂D q”`i“W.Ò’kFÌ%Ù‹
+áã¤M]9å9Ýɤ4Òñ‹b45ÄÆ~j-ˆxiQÆ€§25+jaÝW|œ ë2¨—™Úç1£hþK¥ ÞE¥aeYŸMì™êФ")·ŸtÐÔ$XWXcÄ|þkA•¹“eÉ”L"¼§µ$/mü~(áu¸ëSaô~hf©t"]¸g44:ü³Ç h eV:jå7´±®°ey`X—¾*µõB2bE¥+̘cÇvb½‚¾³úUwìQ4¼nã
+ƒ¯]Šëfý¼@ÿ¥<Ó—ÙP”šÞeÿc7•á‰&\§¥B•Æ|³Ü*ôŠš, §nïÛopjD½ýá|bvžÜ&²Ó±[ÀŒ^¡€ô¾ñz¿$jÇò@»i¿Ú’]/[D\?kÖ ÞZNõ%~ÕáXg;>©è£Fh”û¨®KËßyheñÏþz„ ŒÆÝס¦AJoP(kEŠ\ˆÚ‹Í”Ìùº'}jpñMo
+Vyîëê²2 *‘RÆÕªZkµó?$ú›º€6å#ꋹ? 8¢A‰ÍfÅÃxClœ &Ì&ˆÚN ‹¹ÎÕ3hë½µ«´ïã׊cè]t,lM;¾!¯žvIÉŸfð†,<7‘ð?z‘´§N«†‰!dV †m5Ó‹ö@ZQN«å“Ào³ë*: »ºfAVÕK®Á\É|›¸ŽÚñ¾ui”dù
+pJèQVÕ†ªÐ µ:á)”ÕX®¦^]á×i~H1&i¬‘;Ù.}^š¯¼q˜¾À^ßjâü&Ô“°OÎéê‹wfôT{Rd†ÿ õ.[¬ye!&<iuÁÑ>äM`öÇ6JÙdï»ý‚n+Iõ™ß`Ó÷dÏ~Í‹ßÍ’íÈ"Û"
+ýUì¹²®Ì§«Ò˜(3?¥F}ÖD#œ<cƒ-YÉ„ÖaÈùƒž@,äÄë ’©fÐë×ÆVdŽNfÎPSmbá(Wº½8Ï^3w=ÿ%†ˆ»ã¼ŠoÁ 9Šè=opeíÖð¡ #BÇz
+u]UÜAý3A-‡“-tÔˆ›Wž·áqaˆ0M0ÒÞbišÊÜ„cYjƒÔMfõ½/” s¡›XáìÛa¥:¦7TQ‡Ò¥l»Ö5ýº­Ü¾dINbj);€ú,}@iSNI^@«Ä Ý‹ùBÉØaÍe•þlŸG¬¤cM¿Ù¸†zu ³
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2051 0 obj
+5446
+endobj
+2052 0 obj
+1028
+endobj
+2053 0 obj
+3886
+endobj
+2054 0 obj
+532
+endobj
+2055 0 obj
+/TXXFID+CMR12
+endobj
+2056 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2055 0 R
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/FontBBox [ -34 -251 988 750 ]
+/Flags 4
+/CharSet (/exclam/T/a/b/c/d/e/h/i/k/l/m/n/o/p/r/s/t/u)
+/FontFile 2050 0 R
+>> endobj
+497 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2057 0 R
+/BaseFont 2063 0 R
+/FontDescriptor 2064 0 R
+>> endobj
+2057 0 obj
+[ 778 278 778 500 778 500 778 778 778 778 778 778 778 1000 500 500 778 778 778 778 778 778 778 778 778 778 778 778 1000 1000 778 778 1000 1000 500 500 1000 1000 1000 778 1000 1000 611 611 1000 1000 1000 778 275 1000 667 667 889 889 0 0 556 556 667 500 722 722 778 778 611 798 657 527 771 528 719 595 845 545 678 762 690 1201 820 796 696 817 848 606 545 626 613 988 713 668 725 667 667 667 667 667 611 611 444 444 444 444 500 500 389 389 278 500 500 611 500 278 833 750 833 417 667 667 778 778 444 444 444 611 778 778 778 778 ]
+endobj
+2058 0 obj <<
+/Length 2059 0 R
+/Length1 2060 0 R
+/Length2 2061 0 R
+/Length3 2062 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMSY10 001.100
+%%CreationDate: 1997 Aug 23 16:21:30
+% Copyright (C) 1997 Y&Y, Inc. All Rights Reserved.
+% Notice: This font is not in the public domain
+% Notice: Computer Modern fonts were designed by Donald E. Knuth
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (001.100) readonly def
+/Notice (Copyright (c) 1996 Y&Y, Inc. All Right Reserved. http://www.YandY.com) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /FVYAAA+CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /minus put
+dup 2 /multiply put
+dup 6 /plusminus put
+dup 15 /bullet put
+dup 21 /greaterequal put
+dup 25 /approxequal put
+dup 32 /arrowleft put
+dup 33 /arrowright put
+dup 40 /arrowdblleft put
+dup 41 /arrowdblright put
+dup 70 /F put
+dup 106 /bar put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+/UniqueID 5096651 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+ßJÃÚ{=ã–ýœ%Öû7µ®þPJ÷aŸ ](@¨¿Ú"¾®1¹­òòr,Éæý’ƘŸRp­–T¡Û{4šüèaPÖWç gû8:k’ª2î(m,A‹­ gR,}ÍAVÞ·BºÓl
+¯z•&Pöh€cÅj†¯Bú/Ù3%ð‰¶»WÁ7]—<ÿX½…%¶ ò˜lõ«†{L+î §nzIhÝcÓž=
+ÍãSûà“ ÙvñѵDó½5FŒ¿Cò’ÃŒ$§FöpíÀ\€`y£<õyÝ&pDv‘ƒm);lÿ®>³)Óxƒ)Ýc­gÖbzøYX2÷ØEHÎføÕvæžR0QB 뽎wÊ¡+(ZÞT£…-Ü 'ĆòÛÍP,ôÙÊì6v…”a a®” htÇ;rr²²Nñy'ÃQç
+eUýÂ
+J0пáN‚‘ ¤clÎ!T63ÅgÔ_NŽ_eXà^!£I“¬åžÁ“NY$¹³€ “ïc/8ÍÑÈÈå‰C¦¦ÙáÊ,ï4÷•Gðø˜rœîd×=#Šžñ‰Ÿ•tѼ×ãëÛnK3¿%\š·ËI-þb•ÒovrÕeK%oc±¹Ò‰$î©Ûxž@€¸*>³ž[½ÃGî—gãë@b!Ùå kÿÊ¡1' 38sCÒÒéËsL€
+ˆ³a ܱeœ)éˆs`¯·3™‘qNŠ!§—€OCó—ÚÙ¦@“öEMu¯&”‚XVÆ:˜ºê‹’{Â7ž7¤ge'°ió§Å<ä/ËQ¶K™Åp0Äw àB4Aê­‰æ‡èðë,¯…l%£%kƒ†4àW[0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2059 0 obj
+4385
+endobj
+2060 0 obj
+1161
+endobj
+2061 0 obj
+2692
+endobj
+2062 0 obj
+532
+endobj
+2063 0 obj
+/FVYAAA+CMSY10
+endobj
+2064 0 obj <<
+/Ascent 750
+/CapHeight 683
+/Descent 0
+/FontName 2063 0 R
+/ItalicAngle -14
+/StemV 40
+/XHeight 431
+/FontBBox [ -29 -960 1116 775 ]
+/Flags 4
+/CharSet (/minus/multiply/plusminus/bullet/greaterequal/approxequal/arrowleft/arrowright/arrowdblleft/arrowdblright/F/bar)
+/FontFile 2058 0 R
+>> endobj
+496 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2065 0 R
+/BaseFont 2071 0 R
+/FontDescriptor 2072 0 R
+>> endobj
+2065 0 obj
+[ 627 818 767 692 664 743 716 767 716 767 716 613 562 588 882 894 307 332 511 511 511 511 511 831 460 537 716 716 511 883 985 767 256 307 514 818 769 818 767 307 409 409 511 767 307 358 307 511 511 511 511 511 511 511 511 511 511 511 307 307 307 767 511 511 767 743 704 716 755 678 653 774 743 386 525 769 627 897 743 767 678 767 729 562 716 743 743 999 743 743 613 307 514 307 511 307 307 511 460 460 511 460 307 460 511 307 307 460 256 818 562 511 511 460 422 409 332 537 460 664 464 486 409 511 1022 511 511 511 ]
+endobj
+2066 0 obj <<
+/Length 2067 0 R
+/Length1 2068 0 R
+/Length2 2069 0 R
+/Length3 2070 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMTI10 1.00B
+%%CreationDate: 1992 Feb 19 19:56:16
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /SLLRHK+CMTI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 39 /quoteright put
+dup 45 /hyphen put
+dup 58 /colon put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 78 /N put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 87 /W put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+readonly def
+/FontBBox{-163 -250 1146 969}readonly def
+/UniqueID 5000828 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å–
+]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ
+1›kÙXž9Hÿ°´ç!.ÉvÖP™ØN 7§§qÃjÒj7!ì6CžìàÉ«T´w.]Ê‚ÐÔ¬Çô/´“ª£¿JÖìá†1]¾œýËèÓè0'Í:ú Ôf¨èÊqdÏU³2úÔ4‚tÔ¡Ë?@Ë^g+‚ Øþ0ùð[ðõµÌ
+K–îT•B/ºU¾é¿ÙFM˜zÄÒ7Âú† .UÎ{7‚£KÂ.=ãUÙ¯ñžI ŽC¸^ì訹…ƒ$ÒO7Ûù—-tæìG„rzÀ œJ:ÓÚ"½ia~
+ÚõT"ò*Ê^MÍMùüч¥f·ûf0EM ÖÆÅ
+z8uÆËøìwió*?ÁÀrºÞÉw”Ôé
+Ä4*RƒäX§&’RôT»dR³žÕM3m ’ŽœÑ«&­ƒë ž.ÇP¢d8;]»F |H!µòÉ%Té ã[-¿Í˜€šŽÉü‘Þž †E|p¬°Vëù$MÀ¥»ÔUá]n1€1RÏP°¿}
+dó¡‚
+í¼.{®µIþQŒ7™Æà‰µÕÖ^N-+C ßú#̲]•\MØ…1
+pk2
+²\t,o)•2TúTÚ®æÔw‡}¼ÒŽšµv°êqý
+±+ò¡/*KÇv½š=†Là¼6®?€•š<iU2À ˜çò \ÖE[ÐKV÷äþQ\Ó½qÚKŒi[ô s*äƒæ"- rÊ*]ÎÅÉ7j—/ñ1‡°[ ñ,Úç7˜Î5›(”µD¤%õÙ/ V©
+_zgÐ1é»mDV>´ñðÏnºmÙgºp?ûÝôúI|T'áÓÙh×b;þWV2w„eþ_Ñ—#–¶—°[¢XÌÿY@FHúIE#ÝÏN p¶ùÖIŒŽhÞÛÑæ§õp[
++N AR-áö‰oú¼wT”{xüjÚ{”“éUõBÂÈyÃ4€§
+(!Äy k¾Û2x™CC¯üw™°›Û=ì ‰ìi{Íôj€RmÇìÏ`ŒBòsßDúBX¾ÿ¨ý4<s¿r(ñ:&¬APf¬ÈÂr¤ÅKˆ¶„ÃI"Gu²«Lr?Œï”ÁD\ý¨WE¹±]Ÿ¿#Ô7{}GC>è_>5Èåªìu6½ùgZe°hÆæ6㋹wƒ[Ìmæsbõ<­áí‹ èD-­ôx×Ä¢Ÿ•ÑÉ Á0,ªùÑû|Ë6ÜàÁ½¹•5ô2e
+EÖ²uLº Í°µ/&¦ÐøQ•/æã—ÎC)ÿ+‹ÊÛû”¨Ž­½‡.)?b¿È±«÷ÑŒ‡Æ(ø`< ÿî¾—ÑàÎ}“,»YòÛ´®4\4@Ó é+ˆk’Ÿ] ö² Ü¥!_º~”9~ȯx…ÁiÉ)–r1ùÏ ycä*+Ì»¥.2¬0×ÀË]Õ§N×ô@ƒö14a…Ï™s¥nìî
+~Ä"§ö•:ùÿðÎ+fól×Jp¦/iúy
+QE ¨Övƒ;N8½¡Ñ"L$[°9çH`c©òöîŸéB”sÓ•Ó¬Šú·ÏØLó\3ý‘åÚZªEÔxÇ5îk,îÜÉgÞ=öýßf.‡°“_¿áS]yMÖ]Ò* úF>CˆCg<¦’Q2W¥¥ânãûsÃ{Ïçèû!îxᄾòÒÀt*±¹°dðy¥›þ®5YÉ„F£Ño¬JÅaïR,bCÔ…ñdÚ‰À—~´§Uà H;«ßà'‰ÖÊøëVËðÚ‘W9mAg÷—¯É'€65oæx(¶cWO›:ʽ‰gWˆ:Ÿ˜©Q%V¹h„ºä+‡ì^£ƒ¸H†Ü<C¡¬5ã·'LºGV<íÔ‚ZhñDbA£gvÀŠúPÌ=÷Z¹‘š…Ízô+)U>í^QIö÷éW Tk)«Äѯ°eQ ’4°‘™¢ÚßXÚ®ÎY˜¥½Õ|â´ˆ€¦Ú2º^'êvâk½}‡$1èØÙ¯¿¢Xm™/œmÝË€ :Ó‘âfné¬M¿f—:É'Q
+g Óz|eG©²8'‡u°2¡Uý4ךכÐ'SRµ_»“ú¤Ùõ.›™øDp\Ä-M#Ð^ Qíýš:»Å§êDâXMUâ* µðuUwò›î_ëÛ¸
+—rÃ4p“M/¬å¸Tš­X)“ðCÍ ª´5Èž4?]6pÃû9½YZ²8Ï—ë+u5n@ÆEúÀ!±-À´nêôrâI•0Â3~ä©ay1F´hð»µsä8!„Æ ¤Ö ?É»}”zqóº&´ÔÂ*aZBCYU±52?Oxš‰D¹¹Þa«Å‘ÆÌŽ \òã1cW"òÐ
+|Øî+Ïà¢bu·Ýau’wÑ{s~‘ÙàYÔHÐ.ýËÒŽÄ~ª}•ñ^>•ü¥ÕXLÇÕ ö´[NIÓS÷Ø\]¦Œ"Õ½Ã<‡y
+½ÂIŠ%
+/ŒÿšÉ€cgOŠ÷pqƒS…þ-yñJÓCeüîp¹IÎÚPÎeqhÊM¢  \=ZvÓÓ,t'ä÷wÀÀ/ÐH½Äw›LtÝQ\>£‹¦ò)mΆ62ÉRÎÆ^ôìo÷̲~¯ø%(Îl3vrÊF‚c±«ªÇòŒ Ë+øøq]äÌCÔWû1xÐɾ5Nc"‰ÖGà3nöÊF
+œœ5³š]© ª_JyÝú4§Ò\/¬CACXðú{`cÛ…¨k®”µƒØä…ú o3>ºúÃwSÒ´FµÎŒ&S×m=n`doòid³‡¬59®‹ ð#þûçþ•ùêÜ¥’¡QzæÁÚ Qó×ï*×¢5ûr¾œþù²ö^›þ"Ÿ’ ãåËEìÄÝX8%±]j/•6B˜†GË„%Iµ1u@É7ôŠü ›‰#95¦D½{› Ó¶%ø•žjÿëðANü™Í¨shv”)¶²Ø«Aæê†@Š‰Û0å€-‡õ›­­ÙcÐm2Ì,ã&ÒŒ397ý÷äІ1Ü;ˆ¥ªC1ý@^¹5÷ –,ô¾ïS¡Ëº5y¿ÂFÙ¥ Æ»‹^xÜÒÈ¡¦íñ*‹™úx¿±}Õѯ¬¥`rM7¡uN,]t‰%]#î ýÔ'¥â›Â¨4MYè^·t,Æ3¬-ªÑþmã»EØ­p‚!®õ‰'$-¥tðl³MCZ§£a¤¾Š*ÊÖ2œf«ªÍʤš² 4LH8¬ä•|\c L0^‰íï‚çŽÊ® ÜìzäÅ–Ø–í[໾ÒüQËê3VËôï|›_p¥þ¢UhÈ´tÜů=‰ùzv¸ÑªyÓÙÒ«eє݊ºY˜8>.c´…éD×y¸ÅýE`.É‚·ãìí{„úê¦w6QQë¨R`Ê_vÏ\z
+¾Hr2É$ž|^¨kVÕmÇ_çʬö{¾u’UZ«È¡—ÃͺšëÿËd_ëõ˘ƒÖh1Êj=06ZØ û®§3Ñ(N‡NßCgÀZq‘}íÓŽ+Ùþ¡çj-2Ô¾£ŒÜæ+f ÏŽÇ?×fÖ—xñðàÿ¼m,ŒÃ¬ž:¾£Ap*»ë#®\¹ú^Uv‡:vÚ•Ÿ¯QÛH´Œ%‡¯„ý7ѽ(õv2
+ô¾ãS±VþUZÃçÎC•µyi†û¬òQEìŸÂßoYÿÃJÖ›Æ.7Š1ó‘ö‘;1Ù˜$p†»ÃBÿÖ‰ozg*e%Ql?i¢i~­‹ÂÓBÉŒ¤ +7lí†+îõ‚Ý6¨[ps‡ódf(žör5¾É³ß£ G׳›<LCö¡œì´+‰3òtºu Zµ’fî ƒ.—4îâ×}ýí#,×\‰d2˜µêœêl5œ;çÔtñ/V8Àįմ©b<Ã@˜£[mpPDÑÛvváߪ%­¤(ŸéDc†ØBÍäN„ŽûÖ¼~˜«²©}Ѷs8¡ŽÅ¸˧*.–°æ!®}›yáúµ/î'.r#•ÛU.¯oôÖ*ÄDf=(°ÊêÁ„Í`O†’*q#ÊÊ”hyr {I¾ÓUDgŸ¢Óz–sÏ÷>@bÃ8MÝ–i>}m(ã]ò¨–Ø"æÆzÚˆ«*áΣækg4£LedÅA{”í«ÐÛkÚÎÿ¬›¥¼µÓk5Ì\ûu] Bɉ5ÍÛȘÇKŒm®©kßk‹õ2öâRnâ"±ÃÛXÖ™d› X©]9¾™Ðî¯-ˆL›‚VîÂØñœvPåfH®À¹`õc/‘P5ù'g
+îÈ‘¾*+P HoO|Y›Ç[ÊŽ®8³^àݳ<Šß¦’ÉÄw¹,„Ú(ìö<j'ê5oå{Ž~­þÅ*»
+Tûˆ(å+i‚18%1ã,5¯vÅ.äTìïðz‘nþg*„W-²pë×-n‚DþÁ17bW
+…¯Íaº\ìä€Ü혹[[\É4ÓÒM\’ãʇ·³¥¯’U®¯ÉëîkÈáÜûãõØÕ`0>Ð{/µKymW„ëKsý‹vMW `]
+¼IøWµ¥ûÿ/Î×cÀñ
+ø‚â"”©µï’ íYê.©(ú•.³À£®¡gY2â¾7M È–“Èâ`–¾†|Ð=¡ì&»÷E ÐÜJЭ{«N>‘N3Z4‡³{5‚÷µYéKC‚º7O‘¢Át5Ž5Q‘Úx¼ 2{IÊ–»3>B¶{®Á…Ϭ¸Ó|î2ï’ðp-eCº¢ÑÄQ8 -]ü;é‰c¹­ÛР{JèÇÃøöÉí¹D:»p²HÄ}sÔ¦ŠBF:Ÿši…ø°Cbó0\¤_ÖØ£7þv'¹«"¿—˜j§ÏGú?ÉÝN
+öòBÏy
+¾4Àæ2$DÑÙ“6“d"‰5XMñy\ݢݺ'ìíûÞ„I§®€BúQp
+‘sLÛÏ„ «˜|¹Ç[>†/Êm*‹M©
+ÀCY2X.~<ïv"éAÑ{zÖÛÁÿ?bm6‘ Á7‡†­("8îȯl
+k5³TñÖ£TEñm:ר—[ggLÍVý·C‰98gº‚(ªP«Ôiwóñê‰ð£Ný„¸ÇU¤”¥gÉ.-U°Lº¯?9L™
+sSë^±ãÔûïêÚz[B_¿)¹²ë¸¬J§?¦·“Ñ…‘…+áÉ¡/ß]ÁÁZž{¿nœ_0•HaÔÆH)ø)¸V{lÀ/‰×Õåuß‹ÖL’×Ù—„Iíл'!V¾0wä»`EþÉ¿+´¿©)Ös0} «’8…Ÿ=Û(Ü ²“'–=ºÇOGC“*0X“%“òyRm½•g7>ÚÁU|‘AÇOqôq–½ŒC>TI×ÓIj`.Üe­Îð ®´|—f»çñ È3ë”W͵óø±ä:ICÞ¬O]¡"d@¡£t’æwÊQG³ÜRÏwÑŠ<«ô¡ûŠ”apçEm*UŠ'Î(2²4{µ`ƒÆå¡Qæ^|«(òà’íX$´Zñ¬Înßç·0›Ð¸¢cD}»ù×ëÑŒÝÖffò!Ö›„ö®D}ÐYu‰M0Ù¡þª®é´
+Âyý<!¥pRý[]ÝrI®tëêFÖ»Yx:#{‘¸?`SÿðÉ,4{ís¿RXçþ:§mÙæמ ,Îþ&·¶g Ê9$‰Ö†V¦Ê‡*—‹3K1j®UÐ{ †êå5~içC‰yGÆðžÿO9²c°Tê÷fÀ×asÖT{›,xÁ3Ú¦J%‡9äÅEÅߢ¦áš’ ÒÔ.K Ú„ºœ×0è£éÞñZ̸֔[‘°U© Ýc]PÊbŒÅÝÜHz®[Œvè_›É„ð}¤˜XZmU©òô“z€ÜÓΕWÑU‘öÏZ¤’/«U££º#‹W¿æF†C3-K¸‰`Á˜~‰ëft:ëÜk
+h"aÄŠI=ò¥@«.!÷£¡`-ó8þ9@ÈI0šÄÇÂHJ£+ÞÛº\Æ$ÓŒ7ÞMºY[yÚ¢5ŽdëTÈÜ2oóPxžaŸ¤&O8Þ¸È9&.ÉNÕ)‘ìfœf\¼
+eSš„f[C¢q«°
++_ȈÐð;çÏOŽ7WVÛÅBô9û0ïîôzˆ5ºáPPŸ¶¹x8TÐ%mØ;¬,&?¯PF*QQ¦çþ?i¦ð¥õ[u)ý@ü—nõË&´fn•“9…`é¯a-Ì"º^VçôC‚éy¢.Üõs6ݽ?Cõ#a Ñ¨·×QÆýÈPêNˆÃêþf8oue’â§6Qp€Å+Kä‹(ÊŠnÆ€kKXd„ÿðÔQìvE(ú·\LiH­ÿÚøÐöƒñ* üÌC¶`AP "÷Ýü£_ÓÎ|SÁÇ6jðP¿†ÕÎ7”vA/Ž¼ÐÖ¾ÏRÞ1+ÆÌ£ ×ÖO„…½)Aæ”ÿÄŸ¤Tóí—Liq
+åš4f0HÝp¯vosöÖoiP­Gà†$Î Ñ=b©É8íg>Üí× ]åÿSuñHÍ«Öü°üV)C›[_œb¢íp(“l]‚˜yæ1›Å‹ªüŽ2“U¼
+÷S.o'yê-öø“âcÁ×l;…(DÿL‰²T<
+EÀ
+Ȧ»%ŽíðWÌNMã(ùÂä¡éJ7)aPøÎÜã2¢´ݤM½¾Œ«‰iÜH‰ù>ö¥à(¬ &.V6(TûWëNàÆC Ëcïþžäï=QÎÎäðø£
+ägEïÙžÒ
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2067 0 obj
+12906
+endobj
+2068 0 obj
+1442
+endobj
+2069 0 obj
+10932
+endobj
+2070 0 obj
+532
+endobj
+2071 0 obj
+/SLLRHK+CMTI10
+endobj
+2072 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2071 0 R
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/FontBBox [ -163 -250 1146 969 ]
+/Flags 4
+/CharSet (/fi/quoteright/hyphen/colon/A/B/C/D/E/F/G/H/I/K/L/N/P/R/S/T/W/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y)
+/FontFile 2066 0 R
+>> endobj
+495 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2073 0 R
+/BaseFont 2079 0 R
+/FontDescriptor 2080 0 R
+>> endobj
+2073 0 obj
+[ 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 515 ]
+endobj
+2074 0 obj <<
+/Length 2075 0 R
+/Length1 2076 0 R
+/Length2 2077 0 R
+/Length3 2078 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMTT12 1.0
+%%CreationDate: 1991 Aug 20 16:45:46
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /QXQEGA+CMTT12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 49 /one put
+dup 97 /a put
+dup 98 /b put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 111 /o put
+dup 112 /p put
+dup 116 /t put
+dup 120 /x put
+dup 121 /y put
+readonly def
+/FontBBox{-1 -234 524 695}readonly def
+/UniqueID 5000833 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+±?S±ºyþ_aŠOg+Àkã%;ËY›ú`AûÕXGSpÖ“©Y%š&™ºn—Ï@C[ŽŠKBcCáEßå(Ôà”µ7ã@$æÍàêšøŠ2` 5Õ±ÛSX/ «zÞ)Ϻ ’Õ©Frßùsó›ýWáaå-¡´3È"aäy™}ö“]*z•÷¢]³Â¶ª2k˜,2ƲXg‡׳Ž
+¬4F¥òÈßÚ5ÙrÎ Z
+ã{1x_‹'ÆK_±Ý?É]=Ôw÷>.zù†Aä¿I¦¹—{à )dŒ§ w„i˜ÎMñG¶µ™´yH‰°i­0Kÿõ^þ¨c¢GŽûÁ¢g¥DkÕm”¼é‡¿à´2oè-±Ç㵯ª@Õ(­ç³P±1æá@Gç8ï8¾hVdž¬Á{Ê“•ý<+ÔÇ‹%‡µVù '£÷]{’¹7C¢õ`64–¹8J&‘Â(‡˜„æHQÁ‘¹idÐýZO{vuQ‰/ 5•ßê»ʫ)jûì£ÄÚü Üf/—>Ë·ÓÅK¥¦
+ γ•-CæÐÔ¿«‹r°]Ï‹ÞÜÂ6˜p–µï¶/?WÞ°qÁýÑÞzo>ÄöڥȲ6F¨Ê¤™ëÛÇJ« #a†zjFuY{ɤïåã-Ù“°i #6•ð½müœ°)½qšoƒT¡ÉŠ9Ï+ó=„ßò Äò­hûì
+7w7ø<OE«&[Ôjž€0S¬#Üø5®oj;~•® j³@vPµ&â.˜¿âTUMu‰oq#nHéÐz„âSé]}ÂÆî~Ï3Þ&3µÐÑEbèþÈý©
+Ä9`lŸÌ…Ùß… ŠŒø•CÌ
+ù;ÚB™ÐgLCïòŸŸS/ñ¨Ôg÷·èxÐU¼^Ðm†–µ–¾†ò¬{ÝÕïÆS]8)¼˜,“¼F摶Ìjïo¯ñZÊÏRöOøY úi¯! $Ü[b(¹g²Šåè+ün}¡nÉÂ’äàÜS³¹wËDgÂn
+SúÐO#±Ô­wçõ·À¡<ÝÇ…õ\ŠI’þ€G7ꑽäÿ¬'0…ÚN—÷qœ³"Fî¨`ˆ%ýH%R”Ú¡Ò&eøà¢6kZÀÔÂñg)ùÉßÒh4kY˜ÚPB‘"UQfœbýþøî«•ÊݘñԆȹ:þZ×¡í“ Ö¾{oØÙT­EHX5&Ó¡_ªƒtºr[°Hâ]VgÚÚ¶LÅ„yË(û„Ž‹Æ+8\7-7otÑ ²uÞcj¸å¤¿Š´GùŒµ°¡¸ä œ ]”uöw5bÊÝ`„0Ó^ì_CëîßI,mœ(îjê~xˆQõíw (°ÁØ=ËwR”Ièwì"°Áäÿ
+0¸%-È%ë“JÏ(ŸãÂO± (Ø©5qôvœ,-V>Æiˆcw‡Så9ç–Cg§7úЙ‚ •¡ š[Ô©GðA
+%ßô6ÐR
+¿x ä®ç¹Æ+)Ð"aQ$ô”ôöÌÌìl´¾ä9qeÚ”åAän«‹ç• KÍ|Y4öQûzŠœÆQcÛƒ^k(…ßûÊ£á³HF¨¹`$TÿìNuxÞ£>ÜùßÖæøJFEº$˜ÂÖ1Â¥ð3z%;‰áß2§µ"&Òo –‰kR¤ïáäÒA_ig‹L®l̨ CQ–‡½ª×0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2075 0 obj
+4782
+endobj
+2076 0 obj
+968
+endobj
+2077 0 obj
+3282
+endobj
+2078 0 obj
+532
+endobj
+2079 0 obj
+/QXQEGA+CMTT12
+endobj
+2080 0 obj <<
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/FontName 2079 0 R
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/FontBBox [ -1 -234 524 695 ]
+/Flags 4
+/CharSet (/one/a/b/e/f/g/h/i/l/m/o/p/t/x/y)
+/FontFile 2074 0 R
+>> endobj
+394 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2081 0 R
+/BaseFont 2087 0 R
+/FontDescriptor 2088 0 R
+>> endobj
+2081 0 obj
+[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ]
+endobj
+2082 0 obj <<
+/Length 2083 0 R
+/Length1 2084 0 R
+/Length2 2085 0 R
+/Length3 2086 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /JWHVAP+CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 33 /exclam put
+dup 34 /quotedbl put
+dup 35 /numbersign put
+dup 37 /percent put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 61 /equal put
+dup 62 /greater put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 92 /backslash put
+dup 93 /bracketright put
+dup 95 /underscore put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /braceleft put
+dup 124 /bar put
+dup 125 /braceright put
+dup 126 /asciitilde put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueID 5000832 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+û;Òà¬Á¡ Kèr^
+ãí…´ŠË""žb3™É=çÙ5sJÚÚzbÁÔJÕ>£[Wåеü H ä2"ÛŽüÕÓùº0O¨y9.à¼Àá¦t³¡ü:=×$E€Çª Æ]t¥þoŒ¿`%
+Ì'EK¿—ÊKœƒ¥fr•‡RíK^yá†`vO^†ðžúŸv…òõ~ÈZwR‡³ iÞNMWçÐ3HS¢p+§T,q!s0Ï(عÆ;U–©´+3çÙ"”J8q3ƒÓdŠJñ`£°Èó7›¤7+åkX©Ö»øvšuGga懨ÀOü|?Ja \´âL‚p¢©|–äj¸ ž5ú Õ¬õÎÐò–hE·…ÎRý5’ÙÊ} Ëd˜߀˜Ø?eu6°¾æ¬sÔjDh*ï/Ó"„qJêrƨý«Wxíë #‹˜1™]¾Õ.²kKy;‰¥ö"%oÚ×ÓÜó(UÛY’Oâý![xµÔéíá;å–oÜÿ_*íAˆ*O˵c¬¨TtEîQ ã®&…Ä+KÔŒ PJ>è–»—¦CÔç¬êy–_Ùò–¥¿5žÔXKåÓà" ÉðÛÙè¨0¾Šá,pö–r0Æáý ÇBZo•¼3ë ¿ijŽ>žrÌ:ÅÔ«vÃÔÊö0…ùð¨ÓààIÄ7vç qŸtÀ@©'*ST‡g¶‚“8Eô.ÞZÚQpì׊Pæ%²äxž^òaé&(-X–%¯O¨ÀfµCmT¹sŸCJzª´Zøפ…4¥k^H… J=o¸áì9vM¹ÓLg'ªÏ!ï¬Txå}á’¥©ô–M ì©F Ä{è'óãçtV ¾2‰A´NX
+¿]>—g?Ò&¥)” ¸RÖ¿¿L#<;ž ‡,Þm‚bÁ6ÀÒ °9Âo¤Q²}|Œ±±&s%,E·< úOä½H 9¶À‡^>\sðgÍÄîÜì=YA¶®‹«Ëp-q–ÎÅ–yÕAÖ¿†F<hT“wõ5µ– «ð¤WG'Yóžì|@~dšõgO\©®ßÞõ™‰‘Ûñ ÔÈXøA¯%_ZG“ÛžÙn|Ÿ$ãë<ü$<èTïÒçÎ#¡:aaàsÕžþ ™ãÓ2:å ($`²*¦ŠŸ
+LÄố€gýfFõÊ·q•éÝg¨qøAX®­ùù‡òåF%О×ö;×Öˆdf½d;nF³ ÐRU«
+)„¦!y予ÛÕ,ÿ¬Ó7=õ†~.Çjdrj•î¢«¾§†SFŒ&{ûæäm›æZ÷öŸ©ïv·Û
+ËùYqó#n9’Ñ>ÑÇ!Üw«èaµÌy´Fã(md-^u_Ò®/Å_!ÖàÐ"¥*ëÅÚþÑz×çä†}]x³ªÇ¸ì‰ç#¹d>mnzA^³ HŠÝJÊøþxGÕ¨ÝZ’O4Èì–~øûçwŒ³ƒÂû#Ê!ë4ufÇСŠüéçÁxӒλì×ÖÅ™`™I6­ú×ÍË¢¢Pµ XÿñÝ¿b³ÙjzQ S P ©Râ"[b@2¥ rgÝžð™þ¼§Ø¾¨Ë ôƒky,ŸW/,ëè
+¼¾Ú÷|ÁÑ;öFaÿUšå#õó4Dµx£à¨eî>%CCÉÙBUG´Hiª P×¢vuðÔƒ+€\êciÉPô-}pË4øû6à°º
+xìp\¼'²ÈpÜ„­%Çÿé<RºrVB=¾LÉ&‡iávÝ2
+ùœ(Þ‹t©ˆ±C(W9²¨Ý4`Lã YôôÍÔÂc"D5uå>ü2lûxSůì‘CÎL6—;âƒc8ìÝê•%a4\ax\BÒç)Ÿ¨>£ ¯Q‡ ?׿‰qŠ<4å×Nó
+pœSZQnëM
+“ŠóZ’w²X¼<Çð6¯b:¥Œ@ðe*ZUzí½Pµ>WÊï™qLu=‚ï êŸÏ-ûÌÐñÏtëxUÜB|ã'Åã1k¯¼6áØÒŸÆ&eø{ÿ?4é ®$R±Øf«òÉ~[G|ŸÌÈ@Qy†Çöpv‹÷¹~P«‹d¸
+6ŒžPpŒL A3nrqþ°×rwy7øim¡DZå–NÚÙ¢
+¶E}ÍäÕ°:›â×WnÄóÃõ§ºk/TT»Q®É$˜Xׯq‚Ô9é€` Þu5oÉ}l!;ëÙv¡Ô=&ûà>$îŽs¹et¹ÃþHqúãª[5A°Ë툖øuŽŽñÀKš¬1]¾Ò½ ñS~~”1wÕ1Q1†ê^0ÅV]YÿþºcŒÓs?ÉÛ2oÁÿ “q£&ˆ µe5l+yxÛY­Èá(•ÉÑÔ;Wý…t#^ˆ­_•vG£1Ð9¸Ìøy±2Né%p­ÛÉ” 'Š3™íUW-Ì–²Ñ³ôò;øÕ°Ñ­:W½LŒý@ÊžìÞçE.ìнÕ狯½éQ¼áhí(¥hëðEÀŠ’“'Þ{±°'oi‰Î¡hƒÿUTÂŽEç
+
+눋H>ØÓciôP¦ mð£ŠãþµYãq=B Yã;{ÐMÚI¾28eà°,±.’:K
+¾ìï'Mhq\w‰1Ä'S¬tk,Oì{Œw†6¶Á&¸= 0ð{lG}SØÿJÖfÝt~4«Ü‚´B¾@¾»Æ;³—‚X¤
+ë6vËn9Àêu¿ÀY”á×ãïDCLTÂùöHæ8T ª”Åa»‰ücG^&nÄZ4M‹[P‰Ð±T¦7L,rEÇ(ËcàÊ“fÂCü&û
+ÁâX?ÇEHÊ”gïC2=øBûL{Ÿíš“×xCw^‘@4m$ yÂ-Ÿƒß*æAÞ3½—³bJígn1²)ÒÛ9t?!جðÀÎ kýW7—€lëŽ;aoÈ´!pYW& …Ø ‰ˆrI:[Ÿ~”pêâß j/³›7ZònÔOP»†…7p/òBµ­^äuñöDz>wÓRK=§,ù9¸J—d^éÈ
+M[½ñåfÖ!J •JÀÖ²ˆégŠö#‚Þu‹ìVí·‘€‚}«\€žF|;È­]ˆM]ñ¬Ž±üuº(•GáQY¥X#K—w4³µ —ðç1(xÞëD­Ñ¸ßx¨ä0¤å!u4¥•sPBÇŽbŸÌŽ.Õ$Q£³´ ÁoŽ\¨6ÝN:‘Ö˜5„-Œ!\z‰9°~kîÈytc|J@­ï¾âÖ“÷Ž‘á>¨Á#‰ sJ/H+fz>uü0¢±¯_mVNÿÔÀ†Q÷í ;Ì9£¿ ý »í4ÇíTv’B<¥ÒZ®×üb Z{"Ñe=˜ 85ûÜ_LÞ5j0¹
+²/»-âË o?˜`c¨QLúÛ¥â®t¬–µöÅP<¾ÈN‹¾§à[*@=pû´ÙÌ; 0;¤W‘Ž™À‹È7\tVÌ!´GÌš6Àh-+íËiÈž;D%œÎKO¶§1xðÓ‡1ïg²#`wé­¾°(|¥e£íãã.ÌHB%yèÖ8bgÉû¾A©%t7¤ã,lqÆY ²z®ÁŸbÌ Ðná°³°ë÷ ø-ű3ÐðÕdÒù÷¾Ä~­v/«j„ù
+úÆ<ûq㥟ŸôøkÛJŒ‘Ã2Ô€gOûEZØb¨ ~­å…>ý‘´|1c,ÜÇ"ƒ´–– ¨¢\ä'¨1[Ë7Œ•Õ¦›3Š#Ée/ÖƒãbcÚñOîóЬñ¿!Ò»Âʨô|5ÅF!žŸiùt]«îZ^”"t@dÈY'_ sÒî¾½^a·g ×7››dúC îÑ<úaU­0K Ê¯_)Óžþä)ý ;÷iÎû¶)5±O,
+ÝÈýjØ=û£¿»&`/²ý`àí—x[Éflb׿i‹OÁÓPü3°¡e¸an,tØ íqqT]¯ ;=QÚæÉú¢~FD¶ör!þ0“wW:­Sd̆ŠÞW˜·¶?ùýæW¬à°Ð…Êø&æ‘çCZJ flˆ¼±nOø©ļD^PDw¼ðà9†â¡yåÛ´"!h”œ¼"ï-iÝà\VÛÉ ìÉ(â8ÃQ¢ÎYüÒ}µŪæ|ò¢Û‹K‹ÂʦûÈ~.|˜E%PÒäË…˜ ïçŠÁ¾#M/e㘀]G›G‘N&‡”[Y^ŒQg öKbÉ»Yºm0ŽŠwtXN«ú°ŠA£]føXü–©8ÞB÷)·‡<ÂM•ŽîY?«Õß £ÿ]vcuÚh=øÊßV'µ}ò‡
+ç’ÒþvÛf”TEÀ2Ê ÝØ{™WÄôÃ2–ýDm0Eû®Bo@?‘d•{ò(Û¿J™ªAšéˆÊÙµ„R³½–ƒÄoLÉ“”Æ$lØ|Úî6¼;²ôJÓÞÌr"ç¼Uš­w½Ò:y—HŸÁÛúýÄÐ2Ýó÷­LäÞòÖ-åÈ‘Ž:éK^ 4þJTúÑ7æc‡›É3ÖªyÐýà†Z%ü€a©üôkñA[°6r¨…2üißÊo“\Q lQ-ê¹>ÛŸ]í-ðÛ£1‰”ݳ
+äuc¥Ùcø0­'Ê]¿ªà°B° ÙÌÈþÓ Š
+Jýÿ¸#-. þõaÉÖ!i“
+÷rØÄÙ .¯&+2×E›³þrŸCÍëeâE3Ùà*ãiÍ$#î›ØêkÐçü)·/6€š ¿Ät1Åûðî^ô5kA!ô€}I…¬´l»7F¹Ê=jõÕl­?ÿæ“lã¦D7CJ“ê IöŒ,‚ƒ†˜ØÍAÑ J,çºÖjJBÔC¬l6Ô¾£TÝ:Oˆ ²$ÉÐu14`|qå\þ§XÑ.ëK¿­iØf
+}¤ü£u{y•a”J¶Ë/§n¶‚³¿ÜIëƤRI1}k>UZB4ØI!ç-¶†àÉq÷š»¤·ŸOše¿üNdæ,Kì–À®Æâï2)«~â
+ ²ÿè ’þR‹˜y{Æ–›g}OëxMÈMJTSÃÄ}Ÿh* ¾.bÛ9 ÿZ¤5B©¨4™ž´ÿ\£…ÔŸ0ü|{¦08¬
+ÏodB­";Ññ~ ULj[뤇4µr—TÏOøQtN:ÕXoX¼ÓÙ¨4#±<Ç ÍÀ^!#òß$ƒgèö«¹‹º <}ªì
+i´7C£¥_Nˆ&©tÎ
+üX”JôuûA0†’ ‡—(WB/ ×Fñ Ì¯%Í`ä*qð)ç®K¦y™5
+'¾ÛÉXÎS
+¿«-Rlv¤ËǸ۶Y1è'6×+ZÆí>î¬er ¸Æ©“ãWþµ¶‘&¢äd—6KíüÎÕ÷o$ËP`æB™n°F¸‹^ØxdGU¬¾fTa¸d É&²½í̱ éHí…þXÝ™bŽµˆ`±fmÕ·«Êlæ1ìP¶6XÒµ5î=&—%`^¾Ã`¢_+“Wí@ªfF6ñD$bf"PîŠjîr”æW6#µßõG¬€ÈÕœÞɸöð½ž?KË4´øP0;I]•×Ú¼žØJ;H¤6 ž?§+¿Ý5{òÌ,8v¶^\ìG&ÎœZ[ååm *Íހؓ
+•Vü[÷
+ÄÐœ¿WÑ$Ù&$’ºäÙË“ÇÌ'vÉ
+‚ míT?}±^È[ø>hîÒ9ÀòõëžÆ”t<¦Î·a#L)é¨8Gƒ±–3V¨™
+U!-õnäÀOBk|É¢Œ…PjÓÏ6¶´Tv^wS‘¡ªÐ=˜òÙ OK:P³éËÙãÀÛÛÖŽ|a‚Ó=Ð'õ›ÕDM/Ç«¤ßQ¿?‡ZpYGžjïW½*DQÿ¦J—å£q <ìAôM`;Îl5Û¸WÎÆ zõç\rkÄ1­µùP²ŠInêÌð$ÏÊXf€‹ ¹`|>±Àå1TçA“Ÿq8øæ¿îtk0=.ˆ]©Ý“-É¿õ¯•Ê÷ªÁ­­5l:²Ê3°°,‰©Ç°®LëFÜt佞×A]hÔ´¢Ÿ”gvv8±nÕ‘µ€>zÒ®É&™5]Ë°iÃúöã  =¹ÎN[%¦Vh¯ïé&ÔÝ/
+
+`©¾ÐÞÓÍ™…5å^¾AÙjW]Ý/©ä%ÿؤ»ç¢
+„Káæ?H¿Ù¥Ç)<—ª”r^Zö̺ûù®ÖùÏÔ”ˆ_ÓÛ1u?iKº0U³†Pö.g‹CàzÌYaIÐPDílR÷àË5ñááH"„ ím9Ï äºPGV ùÎ’ç$0·¦Ø‚©ƒƒß¨¼>‰ ÒRa•XÎÁ°à‘Û|øų®>i›Q нI)hº\)áIž rÄÁñ’—-[Ñ°ñvrlŒ­Ð5T3P~Tƒ0üñ ,r6;$×Òlpç´åFZÂh3ÈÔ{G:_ãS’güGš³ùªÇRS-,j-Nôá\õe‹áò«Ia eÕʦÊ
+0 ‚Ö7'€¿Ó÷’… Ò—áXËÊMMÖÿøà„¿Äí–ZÐâ_•\s6cg¢—çT\wÔXÿæKìÀ§}«X‘”Öò¹ÒNü_Ë\xª•sç¯Ì!P
+Í/ &öI‚d%P’D|uNµº@ê²µîd—„áz¼ ,ѯ
+|¬ûß}mÍì
+³»¹!`.Vžì1Þ/SÉ ÏKzeý¼íX˜¤£<ÌõÞÀßÀ.{•BïdeÁòxAÐûnæ/D6|Ü^fCHÊï»-nÔ®ƒØ§ìPþ—3ü d[£Ò›v8!ie<dÈ+ƒ —§·0®'½êÊ®çüÐÖâF•ãm¯lí†`Lô.Û¬Sã}—µ°9q]xѬó³0¨™ÎHÉ,Ó{!$(uXáVb%ÜzFZ)Y¬ÕõICPIaAèÛ‚UYýdvÛ$ªi¦¿©ü&DÀÐæ‰ôe[ØO…'ÇH¸ŸgîCt6ÎïÀº©åµ
+¡=§zwæØ„§³)ï/ò—•^4ÚÕÆØe@Üä\¶5±tsvº
+ŠêÒˆÄÏ»ÕÃË°eHžŽû;H@<œèa=¾R$̶ LÄ‚½ìÄššÌ">ÓÖ=ÂÎ(nG#B…¨˜í8qóV-Ü ®ûZr#¾²Ë“iÊ&9À
+ü¡u¬Ö•RÏ3ñ"ú¦×+½|ˆïí€Ý
+Ê¡‹„B%üiåBP‚;©Rûڴᮢå8òG,‡·éžÅ9:ˆçj–ÈÊa`Rë
+{%€ùgôÛB–Já»ÈÁt=…Êf[ý|_O¸M«,hµ¾•šÎ#}–ÂOï6P ËÊO–xö'u— gmø{0ñ”hNÏÙÆõµRÂ7c'ÈÄuõ—sÑ«ùI D¼/¶‚>Ò.\gþÞõæˆ`Æ~§zcû¾IŠž^£ünÔÝøt™Ëq1òsQ³–²`……™u¥BЗnZ‚šþñ>R Ú55Kfœnæ·¦b¢oˆËv×Äb™aóê®
+kñgÆ¢¾ñ7'H"Jš°ŒVÑa9MØM§Ç¹ÓN7ßâêà1 tõòžM|}Ž?°äÝWuˆˆ³Æ˵:Í’ƒÎÙ¨Û]%55ìC÷ì÷wy9c÷EÚ5»|ÌϦ&ZvAžÏ¤
+Áóö04u)¿FHm±°W"”×·˜Þáõ¢MêÞµêÕc7ÉL¥(ç¾'v;}(¦âB _ÍÛ(ÒRLÎÉ¿8Õ]NYò'©à\Ó´ŠË ‘ìyûVl*a`Hâu2×LgáþÂÔ_»unhöVóçvDfLÒéå CJ·{÷ªîOõ½Ç±`7¶ây÷ŽJ¶e龎h§yH@·ÂSso?&œm
+EƒBzòÅ$<÷{q®¾–!ÙG©%>üeX&âvŒ”4Ù¬ü;'­Ãíw×dV`HX¾‰8h(¨Ã¯c©é†¿VR.ñ/힎HÈЬ-<3À¤ :ëJy  ®Ï•hV”&Ç+O®¬Æåq«\hžpüš×ëõãFu²×¡ø¢•‘,]Š–÷5êv3à9&
+yÆДR%2õ*Óú•´Æ„²ûtpÑA \jþ’´±4Ÿ*кbë=¸ýÇzÉs!ÝŠj<—tH·Ñ§·î"Å!'í
+õ†ÍW¤,Þƒž$û“k†3ŒJ²eÏ5í
+ÉZƒ_ç£S‹Ëi/"x<,«v¥ÏÐ}Q›W‡¾Îž%3æYøP8Äñœr†ð­Þ¼Ê×B¿×U?lYQ%”‚…‰n—‡Yí@m8b1°†?°ßg
+®o@Õ-C±8¤3)M>Kn›¶™)“¸j['Ù<‚´3{»M\ÈÎìIaÆÉPÚ«n yY>µúû™–îöí ýS¿YwítZ [B\Ê6ÂMÊ~ª–u©ÇŠ)Âéq:\R-;RÍBïlm¿Ùçu&¯ùðÏUsä mk’: ƒõX]u&òh§'·ÍÕ4høøâÈI
+ðÅnõ<T
+?K¬ûïįèYõ¥oß ^-Ö¢5ÐØkåÒÓfÚä\Þ
+™ B³(³Ft÷K›p°ÕŒYÃ_÷ãvŸ¤†a)‚#ÌQÖ3§
+Ÿp&,Q›Ç3jPFÁ…hyÜYð#¼ËüªÏ—on‹kGmíã«lÁ¿7¡q‘ÞŒîKž*Bî”G'nVS>Ž'Q­”lWs 5¸Ùj;}“<Ì‚•Â©û²JÎýZ Çß*òðQ¡±C`´«e«ŒŒ=ç2ó¤ë "&æLôõˆ0ºZJÀëB‘™…)"H!x¦8v‚•PÚáÃ跙ԭ9úñ¥R&Æíw%0qµæE¡WS¸kRXo Âv!ÒŒžðTß:¬ÇNÀdkô­N‘ŠIxé¿…:ÑøôZm½ùgâ®vÍÏ_Ð~f£Oo$ñ©0&}¶>[ñúéAë“7=ëøëáÓ £~Æ—
+¤˜+CN¢ÛЧŠ#/TönچDŽª¥{Æ°¯c;•1ÚKÓù¦ÓnÜ÷àÆwFm`ðedr9˜(ùj}jýQ!r(Ì/)!Ï•C>ÃD_ ï
+¯¡g?^(©wØn£¡H¹ÊGs:$BÀ´KèK¨hÖ h¯E~< ÁˆŸùãò€–èõ»Ê•sÖê “aŸŒi|‡ÞßÎwrAl^[G H”;r8+üQ˦Iž­û~ücRƒö¿`”Å} ö½·5«»G:ÉB×
+]V³åÈåÈÚ‹Rñh w/ÔÛ!¦I2ñ¬lQcxæ\•
+‰% "GŒ¥s†‹We.ðZΓÑs]‹æ˜,­tîUí¡©ÛÑ˗ijGÒË´?cÝgZ2(½¸ŽÁ+CítFÔf•€×²‰jŒ¿ð%­ø†F­}‘ªMà0„]Oô1„‡•Ü\Aõ#÷­«W%îap
+¦Âü´™,DÅúóJ1UÔ1!ºä Ù7ý!¶«£š>©sšª¼r¸ÈÆ®$ ø¡ë… QØ ‚E#ô"gaZ2âs÷Å"d=?¬£¨»—¸í¿_Í6Ëa³;ÕJÍðz1»î›»¦xRSÞ‹MæDÌŒþ"çF»evèÜ3-zRÙ•˜õu®—]ò¬¥™]š2Ê›¨TǃÃä&Ô08N«rucIž¥œ±žT¬©êB…µŒ !a§’¬Hco³áe«¾úŠ XÕKb>µa“/Ú)@"ßË82 . ó‰l¿ï¼ÄgÆ,ö@8:’†tfNÕ¤£ŠçõŽHÑD žŽ %‡qå&P^ƒ¬ë|—¾iÆÀðóƒÒª }Kl3%n;Î.ŒûÓz=Õ(£Î‚vGtvqÓ±Ågó°{ ½L´è®Ïâø‡þ›—%cùÐ!¹Ýa ¦˜=¤AÙœ§,Þn,
+}è:ˆ`L/ªÈ‹9Oò%¿Ðò$&È'RqñQ„vñwÑÅ Àv¤»\::ò¬@#iøHË
+/ø¥¹Ü˜
+è»HB“*×q±«h.$Ï]#ù’$½Á¶)Îæ1Ém @›ÁÏô?VùjëÏÊx»µ£¤¶4ó‰…)î7Û·ú­
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2083 0 obj
+17294
+endobj
+2084 0 obj
+2231
+endobj
+2085 0 obj
+14531
+endobj
+2086 0 obj
+532
+endobj
+2087 0 obj
+/JWHVAP+CMTT10
+endobj
+2088 0 obj <<
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/FontName 2087 0 R
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/FontBBox [ -4 -235 731 800 ]
+/Flags 4
+/CharSet (/exclam/quotedbl/numbersign/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde)
+/FontFile 2082 0 R
+>> endobj
+393 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2089 0 R
+/BaseFont 2095 0 R
+/FontDescriptor 2096 0 R
+>> endobj
+2089 0 obj
+[ 625 833 778 694 667 750 722 778 722 778 722 583 556 556 833 833 278 306 500 500 500 500 500 750 444 500 722 778 500 903 1014 778 278 278 500 833 500 833 778 278 389 389 500 778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 278 778 472 472 778 750 708 722 764 681 653 785 750 361 514 778 625 917 750 778 681 778 736 556 722 750 750 1028 750 750 611 278 500 278 500 278 278 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 500 1000 500 500 500 ]
+endobj
+2090 0 obj <<
+/Length 2091 0 R
+/Length1 2092 0 R
+/Length2 2093 0 R
+/Length3 2094 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /YRLTXJ+CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /Gamma put
+dup 11 /ff put
+dup 12 /fi put
+dup 13 /fl put
+dup 14 /ffi put
+dup 18 /grave put
+dup 25 /germandbls put
+dup 26 /ae put
+dup 33 /exclam put
+dup 34 /quotedblright put
+dup 37 /percent put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 63 /question put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 92 /quotedblleft put
+dup 93 /bracketright put
+dup 94 /circumflex put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /endash put
+dup 124 /emdash put
+dup 127 /dieresis put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueID 5000793 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+"p?”ÿ{u@š]A}¦s
+iãújB)ü~Ob ÄÆ<PéžžµLKÄRr/Ž@ñáBŽy.¯à\ZPÓŒRMüÒMT|¿%ÝocÞ@R§­S¶A¢~ä”x„Î5fI?¡ž
+*† {aU†q0=殨NEvvæ»´*š$¬¼>°Ê{z;þ¨Oí9ÌûmT[²¼Äž^—d«”UlÔð$ïW›h
+Hs(çãùÃ}ˆ²„CE à¼îê
+i×2Ç¡ƒmc\0ÀkíC'sp)åºX0¹èŠ@$Ã2jÒóOGµG9´ˆ%­f™÷ÑêLJìD@¿mª
+vî¬Ë|Î
+7
+L‰³ÒUí/ÇGGS©ƒL@PŸÌEdáõ·Ô‘ÏŸ5ß: :""lØ5ùȸéM-‹á/Êê5p¼ªÿ
+€EÐ>Äc‹ÃfÕèŸV=Íÿ[miGU>L’áfqcÏD t—˜.¯2'§-ì;p[ÌMŸôRÓÓ+¹êS"Ñ÷#bpôøë¯`1Ôi0ò³…ÕzàžéÀ‚C€±D] ~+KX>`·Ÿ¼ìÆoþÝì÷™ø9ûN(V%úåU™¿Ø0H¼?ìÓª~¾'XèPŠl¡ þ+MŽkг‚p(ã¹éIŠ-«Žþhqœ®—.í¹=fKr涄.¯¸¬y<,=l2ž“Ï0êùÃÀ‰¼F¼nd°¶¯ì¿ÛQ6£_ª@ësPNœÑ†¨&Ðÿù- ±ß&D¤r!Û€ÌOp]ìñŠÜ!&|šÊhŽî]–×ëÍDD•_GJÒ
+X¾‘i]AÈZT+Jd ‡€o˜v;ýEKÅÌu¾õ&Àg•Mñ`i˜p»jÂܳ¤Vfʳác[·Ò r{Ó¾—mIc¼„ MOQûÕÍçþoÂTAV»±Œ.­fMË®—2ÕØM(ŠÑ£Ç#ÚÇ{d¤„»ù›² }Hû¯.©þæ„ÃãËÖzóðƒM‡ _ÊQ`ë
+½ÊÇ
+ŠúšçzÚ¯»$Er=Xí*;ëÍl­O²2çۀś%.Ð#÷<¡Kr±9<<<€ÄgGX–s:y1óÂQÍl(öó}GŠ,ŨÉÒâáëìcäÝ×¹^L‹tœ±ÐAeMInó;q¢y#&á×g›ÞÆ;v ö=½gŽr±Ç7åîlŧíJ• ïZNyÕK)ŠB*#<SuÓ?ÇQò
+îë®·ù¬&y¿»†û®Îúê’W·Ûi*)qÓçé8-—ÂEé‚Ò‰‰ˤl¾y±vóx§¨„'#VÛýj~νqh üïgB36(*ð‰Ô­É
+“nü/x„sW¯3øà6W¼¸G‹3•è»-+ća
+ J«NÕÙò9¨ØŸµ6‡Ý$±úÕ=ê—K¥.%€¼$[€oÚ©¨ð]â ñ! ¿™‡cip»d
+¹*ÚqD¯Ò¹®ÂS¤5š I¨má7g5uí¼ªë›"L@pÕ
+ ÎøßÇöŒwˆ¶…ñÅy.l”¾Î©úì‡UP¥žØù(³ò-c˜Ã7Íí.Ž+>%Ôß/ÛŸ›¦Ë?Œ£Tî׉¤˜GÁðKQïó„,]Æ~o;õú¡GM!ŸØM†jŽçG`žiÿ
+Bî ;ÙÔv£ A^¬:õLÈ
+ká6ërÄ@¢‰¦xÕ‚~³LõC!B‘Èru¢Ù}ÒŸ5cK°ŠWJ0äT€ôÌ’ÅË€àEÓ¼²£“ªð8¾i’®;Ÿ}q÷[vr’‹Wˆ4˜!kç6 ¦owc–:Ÿ§²ÙbQ$¥*„ˆ“<·Œ!¨Ðû¡N†’FXÓ‘‹éAß9êxï^-¢ôÒß  ¼»/€J¸DLÿ¾ˆ;ÒR°éexô’Ûy~A·¿‰¡AKŒçÆÜëšò`zJGH×Ò—<©:À¯ðÎŽ4IPMÿ
+ÐùÓ@qÍdÊB‹é
+ò,äÔâüsõíú„š*‰àÒYô/o%ÌKg^¦6\{~›FßrŸU‹2÷Š8 úŸÜ˜˜ÑRûK¢¾©Ð ÑÑkëÆ-~ÿ7äPr®›`ÉÿãË—Öù´–%&5Â>YÀ¥Ÿàk©jý
+}ü|plƒVë6Öç³"TñÎÄê­)é¸kF¡LrÀh˜’°v¥è[÷£üIÖù|ˆ˜6
+P¹è¥»×)Ÿg'ó“wXÑ,†6¯Û†šH£»Jÿ×õ#ñÅW‰R.B¸;ÅÛUf%áÚóÍõH?¯#!ræ­:´y5X÷ýÄ
+åü%³åYÁ •¦>zâ˜n ¨•_ s±†KªÀLÇÈþ³}ž• 9­j¾ncWR·“ŽÎý€íæâ÷?Ã-Y"`Œ%W`nLý†þ¢±¬eÂùü…:ξ±ÓŠ®ˆ/Xô{VÇ“€î;»Ü;TjQТ˜yËm©èÄÔ -hW—д- U¯Åu÷®§÷" 6ÌÞ:Ec¡øïæ²:×Q§›NC¢ Ö< ~
+XP]`ô€Ç÷ç¡M{žóŽÉ͇Õ ­‡Õ^`®Ft’QÂòÙaôŠå ,»j$jrÎAéF=;¿'â†oœšW¦¹Md×J(1÷á&FlÔ¿è‡ÊNå3Þ¾d]–íõ¬NÑ ³·¿L%N/p×´8ÓÑvjòèp8…3šfòQqY5%[Þ£Jâmtø[›å&WC¦y:ÙsËÓÍî”67{Aq§Ç4š!«¼aD!89ã2°ÕÌ?6/•áä©ìBÖ¯’myºÆ°À䯀2pž‹BxrO–»º!þÃKãÍ'£¤wãvByö—š%¶nNœ²ßQ²·æ‡ài3¢·›óBM‹áoIwС.g\üFH¯é’Yªmxž¢ú©vv Îäd,êÀ;
+1nvð»dœ+½¸Ú黫ǖÄöm
+µnkçY&Ý_ 6ªt˜ƒšaD®³fá!s±>›xZ˜?æTØê¿{‚€ÌÚ{6bæùœQê§ê¦ù [0ƒfÚ3—aRb²ò«H²UC`²w¤5LEœ,«å–vdxåãª}ün[êï¯-<!‘û먱lôx>uƒÃ}Ö^ß:(Ï'˜f­Í»¿QžÁH]ƒîw'4Ú`W>ÃâAQ°¬
+ÈL 'sbNÔÈ­ûëXvB@þõš´q¶ÏJÉÞ{+¯è>óV~$
+EοÀ„À†~ç„ï)¡¼X`8\à óÌpó\¹Ã ´nZ5~ ÞŒ1 ì¿Ü\¬¹§ó5G*@„iÖ²+1}V”´¥DcÈÓÌç‘U#Ç9ºf.Û ïÎAjD3LC
+È׊Oi·[½%hR™ÿç¢=¦ƒ+EðYØLCÕû.“˜‰×@—jøÆ%h s&beÞ…$^b”¯¼„ÚEõh¸ Xü ¤Æ7byݬÆ^P±Ÿzã¸åPë]߉¦÷íÁ2|¾7h__ë,Ðõa\ƒ**©­ÎRuâ$ú‡/ ´";ÞƒÎ$Uá…ÈBÝZ/Px繟&ßGG¯]+רØ÷T51ÏðO–âüÄÖs=”0eÀ3ç¯(ýh1 `Ŧ ï´FÎù4ßÔiXƒO?«PQ éÐå´VßÄž8KønNBÚŒ`~:Ì:Ä(—‚YY0‘#U™’¦;Ø«&çÓNÙÿ -¾é©?6P‚šUƒ¼ôeYFúÔgDîj;r-%Þ‘b´ ÔÞ÷Ð+ò£¼Üƒy4Î1>×ð mÙ`6/Ô2D¨ä«b$˜<G1– ýz1ÚÖ¤Ñ} UKõQÐÂp×”{xq§"O)ÇUÊ‹·¯ ÐWδ
+‰
+éFñÀëÔ*·î†¡›_©
+LjNÊíÍæª,«”R0¢.ÆŒ%tíG
+›µø54=½ËyšÁÛ7k’ MôÕMç’P3J·VØ›EÛõˆ"Q¥³l˜gZøÕV®}q&Fg9°|gî;gø9€:ˆ^šï¨e”ø‘–Vù»ó¯—/î¡çN…Úþšý­ •Ê×y*jbÑî.`4+[©AJ2~ºO„¾”ü»5N?O¡Ò~a÷þ{‹¼•.æÒÜn²^Æ;Éœ¬4ÅsŒÅ+|XýÄ’wSÝ@Äß­*ãtw L­á—,ýp#>Z¯)£Žl>Ç´Ë<ñ¼`Y*ãWÎgUš‘·(¡ë¥ ò£-ÀŒÕ‰»od>ŽÌZß i˜ ¯,:Ýõò9ÕÚ€é{û]bÔð:‚Ù3ÅÙD],TN<ˆW_?; $˜û©~*)ñSË‚)›»éçëTgxõ\MM”þfÿN÷·H!§4R'…\³T‘JÎwë@|PpïTج‰Ra¸]™~ËáÌoHœ çòSæ/,·¨BQ]3 ò£I•€àú:ä¼¥««CØminÀ®¹h‚--­·²¯pú!_ú·’nùT0‘ïÀÒz–¿‚Cª‰†gÊSc›-¯­å×¼k¨(Ø[bc$2Àn¤Q¿Øâ^{]v<ÙªM #:ÕdRŽXn'"hÁþ¹6(
+Ü™¨Jà•qÞx¾Ê‰k‡M`RfÙIÐGN“¯]œ¢ì”Rt3yõÊS
+e|`”.A|)h"QŸè>˜¬ëyôz>ü­{É.Àïš ÚÆò’Þ. ÄC„þ¬º~“Âj•)€…¼½™]oFø\lÈœ{’yt¥Žï1¾µ5º¼½¸¶D˸S‹0KÇ‹æQÖF˜;ðç´…oŽA«:9N#5à–Æ™¨¸×YSòªý. ÄûÔ8 JÓðB+²‘ÄÅûÍÆ~Qì87ªö—‰ÄÌâGº¦ð«FªÇ±5‰öS!L\…nOz¦ý±žzto"0ó½ŸjÍÓÓ2e<bòQXÕšSY°‰úYó4ñ]Î $ÉIÃd,)bÇÝ[çÙ Pxõ¸>Ó¾¡•þÒUÎÖmíljI2›zI>YƒÞÁ|ȉ–­=¹FÒÊ')Æõ¥Ås—zF·SZ²¶",ºŠô¢¤„X»µ£<hþ•¦)^k«:\§bFâ©Lh$—·ŠLçõ sÖË´Þ‚œÃ]œCm>êìÌÁÃzÊòá$;šRÕŸÆ>î`¢ž¡Q½<‚rs´´…òSXc,‚Ø”Ós=?a¨üúL?ÿ¡ìrÕc[,'ª;Û¾ØeCÒzŒuV%skxrXÊ”¿µRðIwr¤EßD…È?1£Ä¯K ÎH“½Ì\Êy1Å(ù`?¾ ˜A¸ìL—ŽÈ|;Ã|ë¶ÖÙ&SPs]A—ÑøsçÌJõ:«Ä¹gêt ’i¸Ÿ{53}c:;¸ACe‘“ÝŠ†‘—SVYˆp"!‡ÇÊ€i›®ìLmm_uûDk|¿`m-à0´Gdò5»×J9MÆäoŽ±Î pŽ·«àókw:<î·˜YþÊ2”<Êô_d¤°,SIL0~\rñ^®Ó${kSMy1¼%>O0¯<ñÚ(|«Ô— )êI=ÎJ¾m³¯¡Ú©PW„µvàðô)³«(4ƒ02¿iÍpŽ@×´Q–KhnÌ«®¸ê¿†ä._g
+ÕY0ªÔ'†?©ï†Õz±/ó¾0ž#Ž^žÖü‚ÜÕ}ŽõTãd‘åKªxÞ2‰n6y- KæWÜêR B}3ü<ºÞººã*ïù’È<Hÿý8JÝIðíÝÄnR ¨£3Õ¹5¯ñ\;Pfµ.ä-y˜¤3lº­R¹òh­ 1¤þÛ¯ŒÉ¨9#2/å\±‡-žÁk†0·Ò
+~†ÕÏ»#µÈ0CaãÉŒ=Þ?˜…ú‰ã­c÷å”äf¥j'ËL7%FãVrÝ[D²™êHdû?b.Ô»A­ÁJ!Wƒ‡¥|wO&q³CÆòÍ^La¹À½ª VœšxÇ-vÑ´Ó»»—ÂÛTgŽúîEUŸËðÎQ8¤ù•= Ýr†XcÀˆÓ¤)•ö²)uL¶ëÚEtÊ…P  n«±öß‘hAo|ßç@%5£½N©€Üþ„÷ª–|ÍÉð8„òÍÔõê€4åa3v|D¡Ç"{¯è÷ìøäF‹y ±v@A—–nç¡’‘$Ö9…P£‡ˆJom÷²–T‡°£¼(/1±’h9»±ÙµßŠõ×çæƒäÌB£ÝóùÞˆQ#M(8ÕXH3ž!1ºôØïg6 OÇÞM;"Í»áEð4Û.NŠ¸È‰Ùj'L¿-TÁþ$btÉ`Yj ÊnæÑãÝœdn¶âaÝ£Û
+sê¹Â3ÌòùÖ³SR€qý!
+Æf ã^H•’û}ª6Xß<)îW.k|ÈÃoÊ•U=êÞ4˜E§½ëô…R l]êSøV®ê@¨ƒë%¦U
+sTŠtÚ>Õ ýåRY`¦¤îkF‡…éÃÓ+Š[ÐËÝ^ÅCB‚¾ƒŒqéù4Ÿ[þô¤–%t$©'6oŒSF„Ì3·'òó»•ÍÌ·`^‚ø²Cß`ï§rMˆÛÌ*rP±eo΃é kŒK$µ¡RÁ^ÂÂ<€ÉŸJX£
+ZœˆüÕËó:Û\Ë!üÌïØVÏðˆá Ÿ‚YâDñ4j¢YÐÍú©SM"BzK=.6Óƒ
+Ë"’Ìà­óxÏb´âK8}ÝPtlq —ãÙÁÿCÂW–|ì¨E½î’ DÎÞsò„"–žüIÂòßhÒಓ“¬óI&&5°¬'ä´vò€“¶übKЇ†áÑE™-jÙœ “ò™cÓ5׸š+,1)°Ó<’'_¢C„EðR?>ô×CIJÌm‰'µÙ9º7ÌÏš‰ÙÛ$R5œQuû™q—ìžœhËxáxõTÝèŸ(V¥G·âúªÚþíö˜r‡Ø»Á±Øõ·T‡œÎ‰ø1ÿÞ}–[5ZR9×ùAÕœ±‡ÿÀðÃeX)ŸÉ/+÷9Ûa«.º9-ÕWµ¸v¨êñ« *iƒ›zbÈ _
+ ÕÀÖ| h©“Ágb|@íU°Êbb^ø˜*€’ÿâá±;´qlj›ûŸzÌíë(oG©-*ü85O³
+QþSuÍ=Ë•(v×’5ió™×ùl˜ÿÜÇ ›˜´'´*ƒÉRÚQl˜\þ3QBIÚkèñî
+ ô–¡ô`[tLdÏx겯¥ö9øEn\¾}—4UÎâ¾ÓOOäÅàbG³0r]ïÙÅHEvYw9C
+à×ÇÌ P¸
+9 È#Âf]› ¾ ®0âäÜŒ<pÆžÕõêKmsD¿hFeéÚ£{Yõ\çpêoÞO/?ÕÑB öD5Üv«‰éû4 ¥Jã|ùtu8påDÏ-i•Ô›fŽÊåKKÖ¤ÕÝ÷4 KÛ];ßÄFëá$ Óºt맨À¦O¼WÄ6Wï:Ê;+›´`G}¡Œ[4;ß ^nñskyÍù»$«&ÇÇOáïÐwýÝ
+M·<ö$¡‰\!?ÙL-ÉÆe Fùp?| Æ´qع£gxFàQž‚$ñ÷70Õ)ÛZöš)sƒ1ŒîÉ8l”QÍ>Ý:Ò
+]¡ÖÆNUþÌÕ4ö÷³$ •JŠÖ—÷cð‹¨}
+=<ÒÊРÆœÝ~žHcÙ™Z41´ °H%¢®‰þ?# Ûˆâ@™îîIþ&¸ŽÐ€ó*‰jd¸KIF{Õë÷ÿä›t:S ‹»¾Ô¤n‰ôU÷×ÙgÒ*[´pìs[`¿:,ä5çü
+Äå ®Äè»X=La>0¤?'0šÚƒ•÷iÓí¾NíÀ­6n•Ôbëz¶Çª’$iˆéžÝú×ÄUH€"–ÝÄ8„r@•²®°ˆœÉKÈ£Âb ”#ôrL—f‡õ§2Íã³Éc§Sž A7ëvŸ¤Á؈Î,Ÿ'BWå>]ÍöŽ;|LßMyÔ
+~šv_:‰H1À(k&Äxç¹ö"±Ów³¦·úê,šp[ÑÞƒÝ"Óé2©Ï†à¿úÃlªŸÙ05]-˜…GIÃ)hŒÁÿ╦úÉ×öÛ¡>|H»^ÆvVŽOƒîzU`KíÊ"`ô¡Í›ÞCtÎZ Húç-0·œ€‹¯ Æž#;j×ë¤B9–\ðB N~Àv™:'FÂêÓ{‡cÍn…K `x\™ŸÖ¨ËÍÏÉoÄBÑ]ÐKSh±hƒ‹Âf„Êß=ñåðŽ1WǬ­U6Z›„4è+fâÅïã#RUóÐ]Û§çBhnj ~¦‡vÚv¢Mý¦ìsÕ Íƒ®;Æk^†àyÖRO©ëð
+ZTót„UCÔ†/¨†O‘Ç®
+Þ6[º c”“¤;õÂܧ#\© ¢PÆÕ¨ º‹ø`çÂäjf|ÞoéHT/›k~GâÇoØËÌV/ÛÒrðNhZ|2à`U™3¶¨ä{Ù3ôG>ëÈ]˜ˆtcy+@ªŒïÑf)°ÃYì[!¼ÅÒ ßN4öÀŒëéÙ&m$ &fÃŒEA¶ü•à»Í¢¨¾Ù†Ó°"§Lž,éŘt8‹Ã¥ùÊuÐG²eŽ%ïb©úà 4Žßµ•jÂ'5VíHéSÒÚKLóÇVŠYwp.?éHŠ ”DiFÝ‚Ÿ¼ìhë"dâþZ綤Ž¾¦ Aq°«…@‰âÀÊÄP¬(WYÚÎHãCwÌo›NÓ·
+C5­âb
+uÞOôŸÇ,ÙmæšØ_>BîXãÁáyR}d¿1ŽwJŽ^áÚïöì£Ùš¬ìJæS03 Ud8rï—ÔÀصâ¨êr•* öèûÏù+<_Eå
+Ö6Cê´6B¶Ëi»ÀÊÐÕ"{¿|lêü¿²'O¯" ø¡x‡¾œ†€VÖÔ…v½¢&rßž¬Â'…ÔAÌLIìËötËÿ€ÛìÁùgW“9Çw‘Ÿçš‚óÄOÇ
+-¤‡p~¤`ýÿÚ®õ¬/[Ó^Už—óá§ìŠg›ôÅP+Ò4zKá„cº2]•ÓŒ¿tôÿŽåïËi¾Ž/¬7ëE—˜ùçGÉ–á¾qË\D*²4Ú/@D—›Ì—ëúÌw!">™¥é”z @oåÖVO¿P{`P=Û›þ~žëç¨CèJ ívF³2`Ò#ª1’Ø= º¨k*ÿË]Ü • ‚?GÙ3™®ŠrG«Ú†1æñ¥3ÃPy+EoIÐ-ü¡ ¨K`´mQU ­õƒ'ƒQª¥qáB¬’µ Ý7r¶Šá6mñ%×=ÝÛ±;ìë§Áz=ÒÎèb;¡Ð[+¬¶ÈÇÑ)¬8õrŠ˜
+î.±ËǹêD"TC&.c!&(Ò–ÓÿNÝë“Ë*œ”À­Ò_Ña#oÿÇ^8õïù1 ¦š)‘7p´bNqGü‘ɺ¨×É_Qû ô„Ñ:¤1ˆóU£š¿#…‡ÏŽ qÂJtKZ™D×SÀìï\–[ÎoeP ™Ç &~õKo¶šæÍ–ÒýÉ
+íuGbâ8½#ä q½Å¡NMþESK½£(øÿÕz‡¹ð`ô©vÞ›ø\ðwÄWBøhhp0Í*[ë
+=øËH.ÛÙ˃¾Ê\ y·dè<»Vc¼ãîDu€T‹¿`žd̓,¡DÎMð8:fhRü“æ†3 ä"6IU"^˜ tawvB"xÚµú3ŠÏïIÜEêäEb3vOÊHïk{"bH¾¬V´U§{éJsÓrE ïU_îÊÓœùï ]c= _*^úˆAø¯¥:9ÂyMË
+Øù¸‹?DíÌÊSoÈé­*ž;rMˆÒsŒ‚ w™¨í¿ÁåšLëð~ çþ›ˆ®°‚ÇŠ
+HM¥q\UVÌg}RÆö(ÕI…µØȆ¼¢¶XÂlË—->Àäܵƒ.&„=Œn Ù ö^è:M{ÔÔ:1´i‹^Ú²{  o:[Hª£âÅñÇB-)Ñš†FYAUh”¿J ?qãK3+‡÷x†Cíð]sQ]`Tâp9N` ;Ç<ëp¤¡,"|=ù5í¥EY=·çåü å.èqèÛ:ë«8T¶Î?!¢¥›"aGú\ ½ß!ó2k.®ºà[;¸µk,œ¯”‹úC\™´]h&ôòäV3¬¾#ïá÷·‹µPg(oÁ¸ì 9“j¬F™Ñ è2QìÌ&Ž€R¹e_MøÅVEhÃuu±˜ÃÒì$iïw4DP TШë;¯
+ˆSöï{‚Eؤ,I°ˆE£´(¨@µ{¨©cr9=$]ùQiÞÆ!Œáì=uA 7}q<k+ ƒvš¹Aã^­æì=Éž`ó_dßYü«žV¹å7; ëj|À:èŸ\@ ¾òSÓ‘‰ûÕ}¢óñøsV«†€S¢“ÌV!écsÖàà1@§‹FŽ]Rbmjœ¼uýÝA¼ÊË\ú;’L Lø€ª~>‚ë-G>VBGµ²|–|7¥ˆ:ÔOQfQ~âpžïšMØ0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2091 0 obj
+19646
+endobj
+2092 0 obj
+2288
+endobj
+2093 0 obj
+16826
+endobj
+2094 0 obj
+532
+endobj
+2095 0 obj
+/YRLTXJ+CMR10
+endobj
+2096 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2095 0 R
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/FontBBox [ -251 -250 1009 969 ]
+/Flags 4
+/CharSet (/Gamma/ff/fi/fl/ffi/grave/germandbls/ae/exclam/quotedblright/percent/quoteright/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/dieresis)
+/FontFile 2090 0 R
+>> endobj
+391 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2097 0 R
+/BaseFont 2103 0 R
+/FontDescriptor 2104 0 R
+>> endobj
+2097 0 obj
+[ 692 958 894 806 767 900 831 894 831 894 831 671 639 639 958 958 319 351 575 575 575 575 575 869 511 597 831 894 575 1042 1169 894 319 350 603 958 575 958 894 319 447 447 575 894 319 383 319 575 575 575 575 575 575 575 575 575 575 575 319 319 350 894 543 543 894 869 818 831 882 756 724 904 900 436 594 901 692 1092 900 864 786 864 862 639 800 885 869 1189 869 869 703 319 603 319 575 319 319 559 639 511 639 527 351 575 639 319 351 607 319 958 639 575 639 607 474 454 447 639 607 831 607 607 511 575 1150 575 575 575 ]
+endobj
+2098 0 obj <<
+/Length 2099 0 R
+/Length1 2100 0 R
+/Length2 2101 0 R
+/Length3 2102 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMBX10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:06
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /DUKMHY+CMBX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /ff put
+dup 12 /fi put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 45 /hyphen put
+dup 46 /period put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 87 /W put
+dup 88 /X put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /endash put
+readonly def
+/FontBBox{-301 -250 1164 946}readonly def
+/UniqueID 5000768 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+ìišu¸'
+³N(ºÆè-ÛCå :Éß’w .BÀ÷½ÆÙ béw0$[ŽŽ‰¹"P˜œU£~NY®*ž6¶4Ÿ¢À›±õôC>NïÇ^?˜0ë^~o¾&f¬Z9Œ-ò(*ÏŸÊVV9
+ƒ|J™ì7@ØsÏï.$‹DÊF“§‚YMÐi+M¿ÄÍ즒ÄDý¾÷¼SW[ò'1ç÷qy4­qZÃ;]6y·„É@FæÍ<
+ØÑöV&±N3ÏÚn²‚]ÄDúb a[Àsÿ½üÊKõ kÔƒý†9ùèÐ$[F=e ñ,&Ȩî)uv–Ãñ1DØêVIj­a©Iç#«µ…™“ò
+5Ík~ ­…QÎäa’MÃjFJ¡±L3úû†.0ÆlÅVemÙ;Œ Ynžâ±ª´y÷ú£Ry­´h¦$¾&Õ'¿õíàgYŽ‹x¤¼û Qi-°¾»“ o —´7âŇka¥c¢g92ÂX3ú£]²*Þ#5ÓkîÉÕ°àÌQa?a°¸»éYÇtVSQj)ng„Èùàk‰(Fº3㊮FÕÝH~Q¸G Zxš8=÷9IB“rü•Ó{
+±µëÊ”°†Ÿ´”
+Ž"L#ý¨á$²æ‹ôÓÿWbÒá8¶´y¦$; 7í*XÊL,q¦—è±]8
+"Q¸SIJö†œb •û“yþÔ¶Åÿ!Õ k8 PÔáD—Œ³Ýµ%ÕC¢
+×Csãùíç§÷@ÀÂJ;¬s„.m¨PñüQDbÃ-6x~[`VãV`*Ú*²¯–¬ âõJ’ýI¤®¦ÝS"ïŸ%Ê<ùu
+ùKGQlÓ‹w±ÑÓ
+&Š[Äœ‹$•kçwjÜÖßÍðÝ‹TÊXT1’½¿1¿€(ŒuÜ¡uõ\yøöþ¨“å¿áÚ[¹^_Š#W•€ ¨ïô–HûuÍðrF(÷!p%Þ³‹9%{ þus©†
+<ŠD Ÿ¿Uràp¹ÇÜ”LÐHùÐd}¡²÷Òò¿{¿®{g¡mÀëö‹fbYâ˜NjÁG9ÖÜê¹²€„Cñ šÍ±rÞnî¿v¥=Ônÿ¾@ç>8A=9VqË«[™Kå.Ò
+·ØÇꓘŸu„õgÁJï÷ÿv ßåjW}NÅØZ
+Ã.! ì…1~àNå*Ô?’漎K‡1ºw‹‘
+–*À-³&Ÿ5[0<Ù.µML©Ì€ÇÿšYÝ’›D× iÕc©Á1úµÂX¸Ã;Ùl¢"ÝÇáÉ{Á®6QŽrsõwI¢·£Ïéö1™¤n›¬íp ¹´ÖvöXЋ4Ûptr©“N°0j6yA´%šÃ#b>Ù
+Ð]Íþ±®­¯ ˆ»˜<íI×…\©í6óÒJVˆå+4+¢›UØ© >Ò¦
+z? íÜOp¬ÚP‡;fŒœšˆHJSwè~LÉsòÏ2x^ŽJÙ«Òñ1X;yŠêZi¸#ôÖÌ)æÕ<Ö³Ä
+-,ꋲÛ‚ñä)æsŸë—Ÿ7¥}QØïftþ²>Š¥-N
+n–$Úæê (’óÐ%W-ú1=6_¸Ë©pŽáûz© SÌpÁ¯ÏNœE|$"
+Æ å”GÿLÝŸ®X VÿèÈ¡o©”þsCOó©—®Øbí¨ã¿p¿JÊ:{¡ÔáÃ|)#Ó…g>5¬xeã‰ÏzJËfŸælèUfÛy{N¡ˆà1x{<C0PÖþÐÑÔq&Ç"GA¥Þ—ÎÞ}ö°v/bL¨¤d/̯Ϛ xA“Zòïýâ-»KÄ@Ô÷›—lð„€ˆfd“!·œ{‚3cÀM™óÞñNîd¼4(V¹%w˜Cò©âT¸X|¾Mž·ç¯Õ«$/Ú}“$÷.ƒ7òÝ}„ŒQÓ7€W­Ûç€Ð@+ V
+øÂòÂK+z®¨ŸÑwsÙÎòV‹M¶ywS¢Uæ ZtãKb0µzZ7•™ºUŽŒÇtrÐGwáîA´ç$"Hr`”Lso T§Â[§™p«Ô²@²†Ë¿Í. À-ö´ ~$ô>²»‡Ä~Šø+ââdÆ>z]{²{¤@-R@JÖv])õ„)³x?ÊCDJ79—0Û9},Oð¿ýê·(ãe@¥xYã£ÅMkíwøñiµová;2ôã5‡;Ý7%HÅÎí­BîïLø´Zí&æ$ŒZM´‡âùðüÕ,!€oTÑ^4í¢v¦ä×%çqÅ\¤ÄfD×æn¶tîésÒü.}èû®Þz¡Ý­¼µRgÙLºá[2>>‘í©ú;½Ñ LèiÄaÌäm%£ÿ#  t1½keÖð™ ¾5‘ ¹­ðÊb3¦Vo‡ºÙŒZ0‹¸&¦hçº5ÒQå7mU¢|zG5QëÖv†Y#K£U14;!Á¸¾…l‹~FYd‰<tj¨àÏÆsZÞðþ­(ó¦µÔ%”†>)'}j¿õM©¢ )¨]tËŶW¬à·Ãh^žk)üä¸,Ýf"cମ&ˆÍ,$9ƒVñ:N¤ßBá`yÑæºsçúS}}=ðŽ?PÒÃéÛ‹Ÿ†ãøÁ¤ü«Uw
+ñT©Y4Bw_gé”
+(‡7vŒ‡I¯þ SçÞÁµ`¯Ï*¹ƽ½3G•]@!g_H¾Úæ)f‘¦{<\¤û¡¹+Un¨D÷yñFH¡gd
+zíªËUÝoLæM7Núñ¨bs md«“L‚D(  ® ÄqʾG¡v–vâ{yÌsKÙS6gë‚äiµì“þ
+ðJ§'Î »äAh
+<CO7¥_͉Ø CY…'|òd³L Rªƒ:a
+6æŽ
+y¤¹XK¾‰±mɬ7.¦cuÕ¾öŠ*7IPu•½i`Í7Ï<^8Anx èáôÏË_Ƀd{¾¾‹‘Á¥Íé[ªr ÈàZ4ÒbWÑÕŽ’ÎiA‘ÙÁÓôÃãø:ú=¦lŠ†ÓL†³ý’Ž‚ß;—ݼÿØ9!Ù‡ì€ÙF¦ÁBg:ðëÇPc„sÌ5ÍÀt‰DÙ^ëÝ¥ˆ¢à,g>„®'˜ü†>ú•’½ˆ>Hbº™éhÇl<Š,õ±Ý¤Ù ä%á(>DYužÆº=„ÿ­³wa}’Õ2Ú|]·§ÎÓ/£öÐ00ˆ¸<2åx:ƒ×.½*\w²„«=6M ¥›PVhT‡vjcÛ’nþ~°¯Î&ŒÁÑ%†Ž“BUo@wÆC‰by*t Ê5¬öÚ»Wá¾Y¡:z»¾¨ˆÃòWË Õô<Ô(ÐëFö°ÀÆYv¯ 8ð¾ÙUôvüg4_Ê­ xþŽì°pX)²tÕrè:zw—SÏ^.r9úH
+ⳟfOJÐÑvìÍö’)ê{;¤ŽÃ{ö6|ÃÄG';I¦4!›eȯ‚–"ܘlÁ1Vâ{R™¦05@Öÿ§èÒ!?ÆY‚~c–|èq 7²[³IsEáä<=äþå>Ø–'¡ª‹2‘ÝÔÇ}ª´šM›ˆê‹GÿºS@'Ÿ[¼Û$/Ì2Pá-œÏªtë`kÌès7`j W…KÃ
+aúøl æ/q,nÍb$Pøl!™Ë²ÞhŠõíWdâR/yzÝv•Ã>³o·egQBýæÆÂùsÜ+Fφg)Bxžßy>ž6× à×Øžsp|
+‰‘ºÕÁNÏ3ZCÓVy'm$bl/–;ì!ÈfATº)í&üà‰…JhÚ+ú.á}J}ðÝ÷§û­‚w­îu´Îe–r¯Ž_ bdW¶?„hŠÚãˆÿdQü“Ë|¯¢Oׄmb¾o²ušÄÍØŒ“ù(o˜ó˜Í
+6ðœ3¨zÍ^°nÄÞ…ÍÚ³Õî(‡c¨@¨¿öÀ¥—ëî ²ýÎþÁ8Ò—CJï–‘)_¿¡@‘‡È(Ø ¨žðVê`cÀjØ©8‰TœÿMÝ÷Å/93†šÜäÆ}<°²ýÇ›Â
+æ5¯Bäë
+ËX÷8ÎüHTzï%ÞWÊ .»}oãÇD–ÿª
+å(eñ»­"ô£8Š¨ð,\©è‡ëàÍÂûZy[Aj“6ØŒåÏ…fDoç¹æˆyË’É7i†ÑpmàEØZA®JŠ½&ÓiòϪe€_1¢3‰ç3!(ë7§­Â±_S)î­ÚëKâ`5n4ŒŽ^g¡JqÊ´§šg™ãœ×¨,';.%§E}E»dS/hy&sÌBˆ8È¢A즖žNÌ“e71ò;Ó°&héë¸ÒPw^Íf³.ªæ‡÷Ï
+ú¾ƒ9¡:¡t€IsÌ¡Ö¯¨³,rÝ\>àzÇŽ·œ.@‚² íé|¶:H±ñì+Puo?öÄ#²`¯÷S21Š…QŸ€OVÕ¬U=ëýÞ*6ŽÀ‚ךָ;Qjè®I’¸Oü“ÍÌœŸy!Œ§æŸb91aéúåÊ,3ÛmÉ žûË}Õü(Ù.4™ÔÕmaF¡\¨E TkÞHß³IžÆ|•/—’«-;Âi)WÆ#|¢ uˆÃœw¡Ü¿¿ Ì´P¯³$Ù]ŽÉ4ƒ ­gN‡ý«]Uò¿$‰¡b6õ¥Ì˜4ŸL\|°±,*×íÊ8j7+ 4eນº`÷ßë¥[‘I—Þ*]G™ £PWIAEŒ ©qsþ$8tÍÒ²@›ÝZpl@§‘àKcÞ’Èì3MÏé|Ý‹t1þžûwáä ºÞ»’Ñ£°Ú¬r©³US#â” ;ígàú¾\.ŒdϦ‰Qu°a×o/ý–0BsS_=¨­ñ„G—¥~Áž´O
+ú©<UòÖ•¤5<‰i½ì÷‚i’º³M+Ú¯ì~ŸÞ)-=•š=¶-õ¥%ëÙyŒ=“>ϼ ÙT{ê^û
+ËÄ250MbA”G“§à“ à~a]˜à&°9?CEŠìB†+" Z’ÌÛ'Xsº×6ñu¤ªbæ÷(ä ~­—7ù®¹LCÿ‰LÍyÎ=då (FñZÞaSžw\u&}£ÁOÒ¸ö1òóïöVÄ
+Žë|¶iIØmà®™SÜŒålm
+'­
+³r~y¦ýkŽn{s™³¿ÆŒF97|’’ä¯ÙÍòŒ¶m\Á¦8^ˆ÷]¯æy0uªG<â ÙBºhÝBQ½z>ÿÚ¤Ÿ~`S‹ˆžm¬4Az2¦Žžµì µŽl÷µ_Dw?m‰ìç;jA4¼ãÉ l ÁΤÇ|,_
+eÉBm~&y&x솗›?þ(kšs¯p»?_IÕézhJïe™Ñ ¦Îg–· ¶¡Ü ¤ª'Ëe
+²‰KòÖLã†~Ÿ¸Ñ»lxŽÊ󽶶àå›HLn
+.¼r7šÆA"xÊ·¯“Ý׊CÄüXúPIÀ:²l>Ѩü#^ `aÿ=v^$Ÿð1çrK¸pìàu‰ÑO‘|Ãï[+z÷ÅN±i"w³l}“ߨ#i„—Á2¶´Á´H a}¿ä{}2"£
+ø È (~Ë‘ö•RR¢AÝ`›` ïž;‹ ^2’”™¡§Î‰ØØÑfÀ0î’dO@.ªË&0ÖÊ‚ùý¾°S¸ªñ™ƒÿšôO!$éTQCªÖ*¹~ˆ´ÆÃä?Snµºr<ü‘!UÉIQ·€¸ ¢©_VžšoY>ÊÛÖ¾çG®ð¢ž>µå­¸š¾ä²½xÀ”®Ô¢>´wrí^«N·ZìF݉kªxzº`ÿ˯mÊMxs5Êd “¿
+O•)KøÔ­!¬ŒkÏ1‚r4V¤Ý)PÄòÂ00E\ˬƽß°>’ÔÎÉýVÿ…Y
+Žþ„ðh»"'C@Ðç«Âc5¡çñùqi
+iþº6ˆvX\:„›†C»êRÿµÊ¨ãŠ‰MÜ™$ÕW©¤Ùs3,kô…°ËGòRaÓe?à&’Cbî´¡›ð¡„üJ²:êFB%Ñ觵¿oËé Ð&†VL±”8Šµc˜¢ÐTïíD.â fì‹Ù¬H¶7€PÔ¤¢_ º{ ãïY+,1taMèñF™“^Aø‘ó?…`<SxEÛMl§Þ=‘.¤UQé(£P§­êõÔR ˆnVþý‚æaáÝ Õç¢Ëªû 'p*¯_A
+´k:F§ÃÔ B—Ü÷±Ó>«÷Јݼ^ÑlP<µÿa ²9Kš›’C᎔ïûÔ4Õa†IðÇÍ¡¬ò×!÷ðcyRc®0(Ômv èf‰”I¶Þ¼•ÄE;‰L;%->î¼´!—X¦Eä;D`»¦Ÿ;Zá›Ù±—úN! Öc$™7:¡±Åÿ°úÁÌ÷_i‰wÛú¹Î0‘S†g¬‹8Ø0™Ê<í¹gåu£Át‚a92üQÈY•T‹I”
+@íúÅd1 ñÍ!x<fÛ¶¬öÙ»FP ;YãhÏ3=ÍÜáëµK:¤UàGÇæþ"KžûÜÎRh¾Þ/*©#{ú…ü%/õÁK¼¦ä–)‘ì¬M×Ô‰. M8Úe>óÏhÙy±Å }‘ÙP¬XJèIø>ðžìÒp%~² “d4V¡ç–§<!£ß"qÝÈéÈå*NÓëxrŸæ›&ÂLÁ>N/\µÿÝZñxLIjŽtŠÌÍÈdâ‚R>MpÖeÖ›k¢;H›úÍš–`Uú Ì|ö·ë=‡sį u1ûsb…Aä8t’Ç@-š¸À‚î‡õ¸wwB‹U…³- ËyqNЬï£è¶?ÕÄcƒ«†4äÿÍS¬ëzˆ~smd
+fvRiÔ(m÷ÆÖÁôBžÍSç°ÑSÇê­R{›Á†¡N]1€³Â…wÃr5¿ûa¸~B‰R&cž'$y§q¬36E–tïk­ÙD ŽònëDGªâýÅè¡\Aµâ‚Iâ;ÄŸF$¢,¨
+Dí¢ÒG"±…ŽÛû •'ë„Hë û¨Øù0ç‹CîKQŒOÞ ¸1Š™5 ý[›ŸýéìÄZ:ÏéRóÐ#êŒWÁÃüó¯¢ü\zþùÁxp”ô}_‡@êgŸxœ‹N
+ê–g¡‰ŠÍ‘™^´P¼ h¬¥QÌÙèˆE2Ö†Âe%K/@’NGl·´%k¦Þä_P i1[9.v9€¾æ’d{=ÇV'³µn¬£a¯Ãüôà¼ØŠc£`ùXÇð 0oç?–œÜYØó_.6·8º‰õLB›ÑQ$ó&r<ü¦._Yµ!7™ŽõÞ¢ILp€äÇ<lžP"»”g“ù9`ªÖÃûPp_¢ G?ºyÔñök["«uwÃ!Ù Xz=ÎP’¹ñŽ
+#ü,Ãÿ“¢°Àv­¶@äÅzõ¯ÞYÓÊkúsn‹“SÅ ¢K&Ïféˆ$‰ï{6Hgd
+å7#•:ij‰H`80 }²UÛqI,¼Œ.õŸÂÔˆå8i±}6Ä7üU/¤cqŒVƒ½Ø€ùA;2±dÑZã¢r¬pú?÷Ú“ñM´ÄÁ)ûˆØ«k~?Ž—y¯²¶Ñߘ•Ò`õ!žÕq›”WòUú.Ìx¤jp$•TÏϨ>ŸŸìxúêí¾[á».ŒAÑêQüm̘JWêeÊh@±*å–Lä[…/1óÙFüªí{¥à©Þ"ÍÕhQ«ñRÏvÝ=÷™÷§ Îbœœ@ŽÆ]‚^ ÁóÎÝÄèsêäEŽJW‹¶äÞYÈ[“Ó>Â>máÅÛêýXþ.É«ã ·¹@Òf' òÀI»èl$
+¿ ëÌÌÝ_ ^Â~umqîP´»+ŽçAr0BíÒ`¹6Ω|·×]Å°ûÎ)³%ÿãb@pâÊœ*üöfƒ1“ÁTh­”N 9'ɈÑ…/b¸×(UÈÊ®Çá'nïw¹ßUÀ™$Ç}NÕUºAÝŽ"Xâ 'ÔC¾ˆhûrŒlñé=ÝGµÛvbÉ;¶4¯ç;aÞ˜i£Ÿ^¬c â£]2Ú'›úD’àÑÄÉ]nŽ^$}÷’Øv¢,¬tŒEî ž¤¿R¢DFwÏò×h€þhúV‚¿¢ë5ºðcE²o²xGœ‹_Új¸žAjÖz ¼ºV›FÙ
+è t¬ï<ÄðäÎ
+B|Ľ*8×m¯ô¦ð…²)öÞÞe/ÞD±p§=GŽh¾´ Úeù¬Èµ°Ø¿L+—JtâÓ}ÈžèÒtPmA2Õ“¾
+8–ˆL‘‰ŽáÓ”¾Þü@
+´ÁĉóÇçìl ,1ët+ÏøÕjwŽz#él ~Ä PS©ËNØÐaìiææà¿qïÖ
+àÿ ÌÁ˜8x]0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2099 0 obj
+14775
+endobj
+2100 0 obj
+1786
+endobj
+2101 0 obj
+12457
+endobj
+2102 0 obj
+532
+endobj
+2103 0 obj
+/DUKMHY+CMBX10
+endobj
+2104 0 obj <<
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/FontName 2103 0 R
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/FontBBox [ -301 -250 1164 946 ]
+/Flags 4
+/CharSet (/ff/fi/parenleft/parenright/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/W/X/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash)
+/FontFile 2098 0 R
+>> endobj
+382 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2105 0 R
+/BaseFont 2111 0 R
+/FontDescriptor 2112 0 R
+>> endobj
+2105 0 obj
+[ 683 903 844 756 728 814 786 844 786 844 786 553 553 319 319 524 302 424 553 553 553 553 553 814 494 916 736 824 636 975 1092 844 319 319 553 903 553 903 844 319 436 436 553 844 319 378 319 553 553 553 553 553 553 553 553 553 553 553 319 319 844 844 844 524 844 814 771 786 829 742 713 851 814 406 567 843 683 989 814 844 742 844 800 611 786 814 814 1106 814 814 669 319 553 319 553 319 319 613 580 591 624 558 536 641 613 302 424 636 513 747 613 636 558 636 602 458 591 613 613 836 613 613 502 553 1106 553 553 553 ]
+endobj
+2106 0 obj <<
+/Length 2107 0 R
+/Length1 2108 0 R
+/Length2 2109 0 R
+/Length3 2110 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMCSC10 1.0
+%%CreationDate: 1991 Aug 18 17:46:49
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMCSC10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /AJLCAA+CMCSC10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 66 /B put
+dup 77 /M put
+dup 82 /R put
+dup 97 /a put
+dup 101 /e put
+dup 105 /i put
+dup 110 /n put
+dup 114 /r put
+dup 122 /z put
+readonly def
+/FontBBox{14 -250 1077 750}readonly def
+/UniqueID 5000772 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å–
+]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÕ™=ü 0)xfáÍ
+0ëv“7ϱ9 ¥ÀàE(O&k¡{ä‡Ç›”úÆÖHF„ſꇼÌwÔ
+ÑR^•ã
+ߌ
+Â}s$)žé€èPòͶ'–/CÕ¦xÄBCÍéxS½Æ«Eý\ ­'M¯‰’ŸX<ÉÌÂKßÆ‹’U«¥òm-Æ|poq•wÖZçF¦ 0@æË$¹Í­‡®8¢ûðä«Ò§@ñçù]ÈÊPËØp-ŽVÐÙ/vÎ R«Û‘ã$8Ò»óæ¤ {
+ˆ®«JMí²$Ï–eKAôCvÚû–MªèYw¦ßú¢„„G{I#ϤËçñBnÛ1±”I+6ô“êœe¼a·d´É¶~C>«þ]çœÚEÄš—vöT:.„hÕj»¯?l²¸ãVGºkÚRYI(‰Í˹CdZ3 Œ YºIc ×Lp ¯sýð²ÏÈå[rÃ7¸7®\ªPý÷*ÅPß® V+
+!&a¾iqVjì·x5Ùøa£~@e!Ðj÷ýá
+6delt¤{+æêz€ù¾¹Á-|ИƒX¤Wð[CÎÊF„5‰Û å `Å(Út¶Ž"Ì•P´wq,¨Ã*cþ”ÆÑ®‰!_F½¡d|ê©ìú\óC%J¢ˆpø9mÿz<’ðáÈ3õ%~aW¤}?+–Ø¡žså'†wËp*S¾ÿ04Cî´’cû¶Òn%=áuú¨d2Kú
+Øü|ú-Š¿ä#L²+V†çÉ)KC¸§¡æÀâÔÌßC9b¦,ãpdˆsýu ]yÚo[¯t”†·–÷:×ÊõT8¼d
+=ã•Í*åX£G„1Ö->þK¹ BÜ¿Úx'\6
+]G¨EKO”ÝFH¾Ôò™¸óßžu;¥)Lî'§‰…•$øõq¦yUØB“§ú%V+:úýŸiÃVº°ßÑväáØ5§ÊË‚5¬‹€hp
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2107 0 obj
+3893
+endobj
+2108 0 obj
+880
+endobj
+2109 0 obj
+2481
+endobj
+2110 0 obj
+532
+endobj
+2111 0 obj
+/AJLCAA+CMCSC10
+endobj
+2112 0 obj <<
+/Ascent 514
+/CapHeight 683
+/Descent -144
+/FontName 2111 0 R
+/ItalicAngle 0
+/StemV 72
+/XHeight 431
+/FontBBox [ 14 -250 1077 750 ]
+/Flags 4
+/CharSet (/B/M/R/a/e/i/n/r/z)
+/FontFile 2106 0 R
+>> endobj
+381 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2113 0 R
+/BaseFont 2119 0 R
+/FontDescriptor 2120 0 R
+>> endobj
+2113 0 obj
+[ 612 816 762 680 653 734 707 762 707 762 707 571 544 544 816 816 272 299 490 490 490 490 490 793 435 490 707 762 490 884 993 762 272 272 490 816 490 816 762 272 381 381 490 762 272 326 272 490 490 490 490 490 490 490 490 490 490 490 272 272 272 762 462 462 762 734 693 707 748 666 639 768 734 353 503 761 612 897 734 762 666 762 721 544 707 734 734 1006 734 734 598 272 490 272 490 272 272 490 544 435 544 435 299 490 544 272 299 517 272 816 544 490 544 517 381 386 381 544 517 707 517 517 435 490 979 490 490 490 ]
+endobj
+2114 0 obj <<
+/Length 2115 0 R
+/Length1 2116 0 R
+/Length2 2117 0 R
+/Length3 2118 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMSL12 1.0
+%%CreationDate: 1991 Aug 20 16:40:41
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSL12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch false def
+end readonly def
+/FontName /CNILPA+CMSL12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 44 /comma put
+dup 46 /period put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 53 /five put
+dup 56 /eight put
+dup 77 /M put
+dup 86 /V put
+dup 97 /a put
+dup 101 /e put
+dup 105 /i put
+dup 110 /n put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 123 /endash put
+readonly def
+/FontBBox{-56 -251 1102 750}readonly def
+/UniqueID 5000799 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª)s™§„̾…´™;.ëÞ;Ôr·ÏTeò…ji«–íK­/df5à¶A|Ç{S/…ØÇ )¡šSïcë\^ÈŸÆÂm‰çÙäp·+ïÚ#õßv¾¯Lé17¢íŠ©×Öýó~kÍàÙ ˜d#å–
+]Ÿ»L•eVèßËúìGo£oÙ¥È\šõþÙÂÝÒkÜ ™9‹ŸMÖ¨ð[G¯•ï(©ÅaÛܘÄ|õUûÑÎ÷8ï¸ékKaÙÁ¢O_Ⲟøž¤2 Ëã"«’nºÚ¬ýÅxG@˜*Ü–¿ß5†øÁ.onX‹D"mˇÞü3ÍÇ9ÎBóÍ9X¡Úg#£¿àüjÎ8•i`à¢ø!›Ê0µfšnôŽOÃ+¼ÃÊ|ÂÇa]¬ÇqåŸÜº0óI²¾ôìkE]#½îÆi³¿RX…{”+÷$`Œº¨7Ë’¤r¸”!ÔºbHÔô÷ªÚNî´³ÕzL/A·æiš§MŸGC¬h
+¡‹V{½Š+ÌêÁy\ËQˆÇ|['ßñXYAÍ&—1”xžÙµ'‘6¨¹ÐÙ—ž^€ùZ"8Q¼àë¹OÚèó/è‰wMrúáyõ¯98Tû©ssKÊåMÓ=ê0±¼ª’ÙkÛÆ®•ã`:Ú ²¥*Ýù5þê§YQ]ó&ˆÐé[7Î#éôZErv‹«tdØ¡¿{ïíþÄär
+Âе\ö¹{Áà]bɺy;t€œ~:ÆïåÖã^º”„v}hbÎ{¬ A/ÇÎV;¾ˆÇñ0 uèéw.^±¨ $?º/ºÊfWç HôíuLî{rÂÑÆOo%bûvƒ•wÍ
+‰ðå^dJŒiÑà†YÆ´ÉF8Þ˜gî,øIØjœKÔ/ñ2ߧ³›„ÚÝÕwšˆî81ì‡¦Þ œ¤•[ð#µh䬯/ §ersúœbj­Â°ûr…ŒÊ¨¥† òĵdú‰
+8419õ"ì¥M3(ó4¡h£ë£}Ý5žÿž(ó¢Â)ð¢C—•mb3ü L-ýË|$ªÉZÊè]fKC\$o à¡ÿ¯b?;<åþâ0ˆdei†+Ÿ*ä]îcï¨à[rú³²@ï 6}{Ù0ÀâòAèI÷Lm3AéÔ»A¤S-Ì<µ¶g$˜À{ÑÙ8î)+?Sqçb ë!l–§ià±±Îæ”5·sÏ¿+?ñ$ 'Vx_ZÖÅúSoñ³‡(µ,R&䉮H[¿etŒ¤ö²éÈ= àÐÅUgG ižc tfβy¾ÕŠ
+RÇ„ÐkéI½ÝÄxÈ üd«ö#D/4ï¹×ú9•ØÞu6”’ê+‡ß´ñÛ6CfkÚ³¸Ë•È„ž"i*dcˆ§µ[äÑûnüJÝ">I[ Y06Ý°PÑ.×.žË_ ƒŒªsp®×B òW–t@Â÷B˜þ•üJ¾™'yÑO·[ku’úó,dmÚa‚31Ñ¿îbÖ õ®X";pVb…Sy6øÓ¡Ö›:0Ge7Zsoð!E”#6}îµ< ¯¨øã ØíÒ—œ®£G”Š¼Á²ÂQ™6> œ0S%B,1Ÿ¶òåkðY<$ðÉÔÂÀA
+ËëÒ´ç±¾
+@¨,k Êþ…¨d|æ{°uúˆ04èd
+‚ö„ÚÂEü7êÔî$ÓÅ®]OD-!yPl¸ý|Øß‚:Æy=ꢑ"\z¥`ËùeD( ¹×ª=
+VSG1o_le”TEÀôJùíZ}aË5øšž´då•PÒF"˜,šù_uñd³pÑ=Å[ɖÆ\h°ûê é†9óUö$!`i|…ʤ‘Ǹ9³<F³ò5L‡êŒ Áè¹2ÙüEÌŠI}w%M+Ü5e4I{ý†”Þ 9¤Ž/üõ{.üƒOÖ­3ÏÖuÄ2¿¼D%?¨ª¯áUªÐY@üåYƒò¿ Zƒ‡F°Y3G­Ÿ£k)·ú@L§ùwKÄÄ‚&^u&§F¦z4qëߌåtšq–Éóï9F7;µ63?O…¥J½-<HÓô2XÏíø#š÷IþŠæ÷¤]Ë@Yi¤þvŽfÜ©F’²ª:ˆÔêËá_ ”gmAG”S:5ŽBÍ Á¤+PèÞ³^·HÕ@.P»É¸#2Üjâ°ž`)Tã…îciÍø6"~îØW8ÅP,j§°n­7ø–aKO‡½èhíÍQT;Êtª³íl£#©•×ìmxýV¨îµe/—û;Íd†ä=´­Û\k}aÙ9ç×
+Û=ÀC‚\K/ÔqÑË]æý¸jÊØím
+§ÃP‰à+ÔZ6tõE7 ƪQȧݟ^`%:S•~ÈfYŒrÀ!=ÚŽ€ëE^¬z#a
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2115 0 obj
+5235
+endobj
+2116 0 obj
+1024
+endobj
+2117 0 obj
+3679
+endobj
+2118 0 obj
+532
+endobj
+2119 0 obj
+/CNILPA+CMSL12
+endobj
+2120 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName 2119 0 R
+/ItalicAngle -9
+/StemV 72
+/XHeight 431
+/FontBBox [ -56 -251 1102 750 ]
+/Flags 4
+/CharSet (/comma/period/zero/one/two/five/eight/M/V/a/e/i/n/o/r/s/endash)
+/FontFile 2114 0 R
+>> endobj
+380 0 obj <<
+/Type /Font
+/Subtype /Type1
+/FirstChar 0
+/LastChar 127
+/Widths 2121 0 R
+/BaseFont 2127 0 R
+/FontDescriptor 2128 0 R
+>> endobj
+2121 0 obj
+[ 676 937 875 787 750 880 812 875 812 875 812 656 625 625 937 937 312 344 562 562 562 562 562 850 500 574 812 875 562 1019 1144 875 312 343 581 937 562 937 875 312 437 437 562 875 312 375 312 562 562 562 562 562 562 562 562 562 562 562 312 312 343 875 531 531 875 850 800 812 862 738 707 884 880 419 581 881 676 1067 880 845 769 845 839 625 782 865 850 1162 850 850 687 312 581 312 562 312 312 547 625 500 625 513 344 562 625 312 344 594 312 937 625 562 625 594 459 444 437 625 594 812 594 594 500 562 1125 562 562 562 ]
+endobj
+2122 0 obj <<
+/Length 2123 0 R
+/Length1 2124 0 R
+/Length2 2125 0 R
+/Length3 2126 0 R
+>>
+stream
+%!PS-AdobeFont-1.1: CMBX12 1.0
+%%CreationDate: 1991 Aug 20 16:34:54
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /JKBRSN+CMBX12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 13 /fl put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 63 /question put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+readonly def
+/FontBBox{-53 -251 1139 750}readonly def
+/UniqueID 5000769 def
+currentdict end
+currentfile eexec
+ÙÖoc;„j—¶†©~E£Ðª*Bg·N³ÀÓ½ ƒØ‘l¦ÊKq*Þ²Xú«šææwüsŠ¼|QÍFïq˜Õþæv`æšz¹XòšMyåp"÷ƒë»¶Ôôì5OÒÞË©”Y¤ÅðÆë¡P(DTçÜ!
+6=h¤qDVð<ã` EŠkÀ³ªE“NrraÆŒJGø ×~Lò{6ö¶ó¬IŽE6ùà¯U'õãÌy 0„gK>&)o>2\U]$XWŠ‰ç-1f£Å×@³«±'ÏB 1mùW‡= LðÛ%§5t¤Þ.O-]NŽ CTÏ4Û>&wÁ”vN­XÅ…ôžñCþŸßÙ
+ó„¼eô_ðâð…ÔØ¡nõ`À’ÿ7CMúÌQˆÛƒZ¿k¬=ÔmïÏâÃè ‹ia%‡3ÅJ?3°^!ôuŸ§øáx;'UˆiíÓâ _2=Gùf™R¼*SyMm°)³UU²Óš¬5Œo6[
+„[Lý.L–VQ>†3H(ËïîšT(aÅç×ÿœ9RžÏ–©í…­VÙ¥”%yê’÷WrÞÓÛoc=WÀ׃šqóÄ´þž.]h.“šmùY¡É%U³Ôötî­8pH’6ú?,{ÚŠáøZ¥‘eɯ®Kù#ÏïÝnú>5`o•™Í›ÂÏØ–½cFДè¾ õ]&f$5áðrŒqæ8Ÿ”óËùª ¹\EõÖ,<ª"×± Oé¡œ믌'´ÞXp¢H'« °áA”ìWUT\æN>ˆ¼Ì¾CЊÂð퀠#†Ì5—rC¶ÁŸ
+¨W€V1{ÐÓÏóBgÚ$=œII„‚“¶:ïGlžõßÓ•gj¦Í®w¦P)@Û×æ¾ÅúíY$ˆqq½¦§´ ô_%…LÑ&Ö”B#‚rI¿—öA7äX]¯^£{ Q²SA–µ^Ì Ï4äjL†Æœ•˜Ã­‰
+Ãé 2•l%ˆ‰BÁ‡"µËôÒìŽ$Büh„”I÷ßÚ39ðHO3Bi®Üy'ºh¨èV].s6Ý&?ŽZpX4Þçì8Ä%Ü›ÍAo†¨A_FR²Q8%‚ Q}d–M#Â2-òðÍZ.ðv[É‚rN†^(ÏìhÜ¡¹!}@¡ýkéëZÓŸæ)æ²KéHï¦!ÿ–o(䪔Hßr¿«T„…ÌÒTp¼|q¦ž&ˆ1ˆQIäêTýð… \ó£ë\ØÒ¾BÍÉPHY•íƧXoR"«¨|îy_ä,u^k_¦IáŸ
+쎠æ®òxdûbÜ ø]…ÖeDJrn1Ï1:L™®Ò ~º/V nY«èª/¡[¯öÞŽª2âh— [ MÏ"™}¢ 雇÷­ƒ?ðÊ8 U½Û£Œu)?m²t+!έ~~¼]غ˜bf¯ÌÕ$6îͼ¹k˜¨ÇNkT™kdzqnô;ˆ)6µó,ëÄ7@
+,ÔO Og'!) æØ"Õ¯--e81ïèÀþjüaWC“"Úfÿ`ÐKÚ/Ó¨:ˆó ”aY|)ÒZîlÆ—b?¸Õ¨¥…ð2²è¡‡&?$ª ’aÇ­«&«™¥8›Ç³ÝzñŽÛÝà…âßz}»äËBZøï×ÍÀlJ¨ÖXxµxöƒl‡}AyÇ 7‰lÑúˆÊ/ä5œT–É»q¥k/<¾ër²´£ÊuÆå¸Ç™{p|¬¼G1öX¦ÍZß'®BçU °Á³GA-ôÒ¡² òæŠ&U£õw)‘%ÌY_εˆKãžã—ò}Eòš;¼W ÍXåxY1‚=[WÌá`ƒˆ‘kD,bæ:ÅøVqÈ[î¢N¸ 2
+·{²K¬õËw±}ªiÏ;Ý©–ViÄ1/k%ªÙåŒÎݹÚà=¶Ø"ëIÎ\o:œP2ûÁÜVrî+ðóÐ7_Nˆûõþz@•Ðh®Ö>º§G¸ˆeV fÉQI–5†–ø¡ÕŠ“ž:#ùÊû=ä0 È±åE:î™V±@Hly¾© ªØyzNYžŽ”Ÿ¢aw*—)ïkõ/nØÔaH8ñDåÔYZ”*ÎøMR,>+ö6–¶÷^e{7¥Üm5*‡ °>££ªšæ”Õ+³«ã’Ó6Äh»½1 *[¤—ÖÇ„ÉkŽüjéGŒkÙíDt‹PÇê{£¦&£[¢Næ³¼—OΧÑ_ Ù(_ÕîyŒ°C©€$[B_6úö‘h@‚KÙiyÀ«vTgF.ØÎ1F¼UUÝÖ’ÊHðÁ‡ÇGÂ…#Öý¤ui3
+’•Úb€‹ŽÓÎ
+tÈ!ТP8duÐn¥pê儉u aÞÌ›:óÞ…•r~È¢ÝPƒ.l
+²¿ÁOÐý°Z´Ô׸A!êõA’iý{÷O
+zÇjÄg+Ó¤
+‚sgûŽ|¶C4¾åo„pošÁ ½ r ôßoÛz·ëσG¨ó—C¤ÂËóë@Lsu/U ‘„[Êël¿<µ#Ô¯56‘PSU…Óèß,—zÉ\|p%B®ÛPd…Ù‹‰l
+`:Æa ëЊ/´XÀŒž^v×ëg¼²ãÓ(:X½&Qíl¹ÑŽNÜÒÁ߆
+µ³ð"Ó¤v°N~÷Jvc¾†ÿСYS±üõ£¬ -YX»+û
+ûH…籸š;k Á¢=Cžèå¦3[1TY :d¡ÙƒÖcûå2êÆûE÷)ÂåÕŸñÝ7ξ|x„3Þ½ìòÖÕ‘æð»]jz—·Œ-ó©P‹ÕgŽ´‚ZÕ]:…-d× kSå\Ëw$+.ç{pkZ
+@Ì™ÁØäàUÑ<sç¶Õã£CWúô6º/n”¥Ò@p!´i™›'Zɶ( ïne¹Rîì±ã¤ãËŸîvùúÕ¬óáaüÀ‰àa¡¿¿Äão4Ë)¿y ÄÖim•-%Üœ]—dÒÖò­énrÕ‚Â˶£a±ß°p|%âË#ÕB¹©Tëõ@È°g¢-§$ë¿ ˆWX®ÆS…Œ§o’`O£-"Ãhãís¥3ùÆ2ôú„ãͲÕjî‡gø„•î§dhÇp·~Õ‘uÏý\yÒ´– ëpËñ“ìrÀ1­l_£ÜÐá ü&Ú†‡“glùŽ>6Ò0ø¶à´ñ’²ã¾LS ÎAg {kË‚<+”ª(¯CLó79}y ¨Ä™µ&â㣠0 EÀikÆ^ÞáÞFõ*× ëÚÙú÷•35}nÑÇåæN¥ ‰nÃ.%§4f… θZY2"œ×&¥ ˆÇÅÛ.袵pÅ5î×8¿
+Òö–¦Ò²á`H
+DL5®iÌÇb'|øo'¶™”Gùë†ç>_ìýïÔ§Åö¹Áb‘1†¢@ jÜCQõ’ÔÑ´ÿR/Úº_æQ+úªP.„I/VŸqk*ÛTó#ÎÆød_–<é–
+(ócSdzŒmq©hJM|¢Ÿ”•Ö
+®)˦
+0Vmn÷*0í‡ü™@pºŽf³ï3Áéžü÷IèY¨-;&œòËó
+qÀõä Áá«c^ww.ÜA:ÈVB¶€ö/lfŸYÅžp$"è3—™—,=Yyð·Ôµí7<WÒÁÚÇ û<TÿèØYYsk¤"¤±ÝXô­Ù9t:qv'Ñ°ÕRã ÚEó”-:e¿· ÃYW_Ÿ}fbh#±AA&1躊æ4UŠ¸»
+GaUø}‘ÏÅ]ô:ÙãKÕÆ/#{«é… 2¢†Ë„±--1ÀºZÕê8˜X‚šÛò
+lQ4iı M˜Ó+«;+Þ
+“nÇžƒÚÑsO¥bžG‡†å„XÔ7d«¯[?v
+ºƒó¿© {¸3ä­"ÙØP]¸“’Uì¿Z®’³/+³Ä¡>d<#Óg"ê9n­ÓW#íüÁ$òÒÂQâ¡%«Ž°0ÁU•Åú4â«]ߟhcò}Xhø™&dI,~º«þ{%lºy;—¦”?±RÃÈ¡ñóÂ=Kl©0küT æψ°¢èI|Ã_tR6FÖS ˜r¸CWɤ‘ o´Ã¦A'Ѧ ññô¿@)i€ÈžÒ†ê3àŽY ñ\À¿fךæÏæ48c~'g9o‰=H;n Ý˜^«ÅTù6ö'ÇØp³`ïá·¢PñaкHœU¯Q./nÒ·EØd÷$Ãy…D‰3ÔºžÂ²ÑôÓE¶_
+êMŠàÚ½«ºaÐai3]g5ž¹A“$êI:…ܤá…÷Œgãg/»Ém]ŽMŽèèoàû­òŸ~H“ ïÀ‹â™³^o.nQƒ˜nb—-"6HXÇ{áS•tÝ›i4ì£þZpå[ÔRu½Kǧr]2&4°?‹Y?gÆ'Û¶¦(`OTŒMщJ›’‹t#£ ZêÁîà?Ù&ûåïF…ŸïðÄ´}Ûrî/gª©1OÐ6êª32.šÑ¿0"ú…´#’–s‘þedIõókæ$P;ƒ0)îåt÷Gœ51AßPÊ£¨ÚpSÙöu¶ÅzÆý=ì~Ó0>ŠƒYËÿ?ó¥ŽNiuÐоÔ\¾,G͈â?黽Þ¼œv¡ò‹m,øX ï\¾@Ú¶å–Ì}S+ð>ûÍÔœõPvL×YŽ¹çž,"PK¡¡Tb=NÆãc—bÀ°ê'ÖIOt}x„z}‹pL¸€˜%¾üÃi-ªUÄ&UMj¢•³õ•§”±ìå+Ô« 1OïëTH¹á[˜¢—zt¡A‰{èAƒ"LfÖ°DŠêþãCÈUö½iË{š„fn§ÅãÃRõΫõ/Œú?²P« à îX=ÞSÏóÄsè LS(µ¡µQh &Þ”æñÙ˜)Áô=]\§FBÚy¿¡vò;ý_î´EVKMÛ)ŒuVV;rù jþþò­Õs8ûÉxcÒràƒ!Ÿ4-$õŠ/òyÏ¢uvêrjÔ¡Ó<³Í­ÌÅ¢§ˆ,6BNœÃ@D »H)ª’3É<èÞ‡†É~‘U#KNø1ò.¥Ãò:årÇa2ž‚\ÄçN†×£ˆ6fÊM T½¬¢ÉƒÏãÙì©4á€ðA½ªo+ý°áÌ“Ù^0+\·ä+‰ 9¿Õ^˜7? Îâ'Iu¬C•,à`"cÓ®Ã`Þý(ã§H/®T£¼zyÞ¢MgÒ`‰¶ÕL™oKùþ˨X>”ŠÏÖ%¹|V×u dê7‹:[„¡{Q^Z¡jW ByWcxîàÕ±|èÙ@RÓÒÚôøK-h—e”ªyg‹û‡€I4™Ð7 Â4®p*³È8“УèWþ_Ûî˜H¸…Âáѳz‘HCÞËh:Äï¡Ñ±€)n‘®:Çyïߌ:NZµÁ‚ì{ó0Xªƒ;\!(NÝ”d1ËþÞàoÆ1Ú³{Ǩ/èäxGF>÷ÇXÉcu½V·6˜¤q›´ãZ¬¸ÌÂòÊM7íâ×æª[á5%ð)˜Raæ
+ܘ(ÅücZ)_ðOŒ§~Ë›lW^Š½W‘i[2³M8ó9Xéø¬£3¯s@i½§çW÷J®øÿlØ;‘ œ¥Ifz™|X.JÅæáÄ7¶îK%Ô‘Z]BHmÙp|ÜÏð¾!UçÓ&Šs€ZMŒ©„lìŠ#ë1uy­—¬¡4Ù_¶ìÞ@4·å²†çÂcßmMØfw²{-Sà–Ó´î?³½uè[t‡
+7dçÖ"¬h~Á0”*¼Á¨ïÚòd«ÒrL»"®º·WbUÊ•‚AÎyK|H³¤sjHÛþ9±[ówèÓšïÎí \lì>Ä!1‹ÿzÉM7<nÁ N·ˆ
+ ò*Æ`€ƒeÚ© EâP‚XWœSÌ®ùµ )gÙ©Ù^<Oç¯3*c©™ kÚï^Š¯â‚8#‚c†mõÅq!œ´ù»”âdûj÷†ƒ¥ú½‰÷¾–¡+ªYü(È´[²cZ¤Úô©U­š æ;(Þa96ó7R•ôÿ03Q
+ntOÔ¥½_Ž3HU<Õ~Â@ ŒÏ,ÒÃ¥ñ
+¶k»z>Wå»å½”T“˜*° ³,ÙqÃ¥KŠèöh±Þdü2]AžV7þ²‘ÐrXÒª«Ùã6§Ü#Áƒ Lïµr
+¡È»o¡ÉE«‰`Ä“Ãv}—TWsÊž™ÿƒ"¿’"ÜæÒË.í›í,(£[„°úÀÙdo” ¯Ò+]ɇâÝŸÀÞ$Š¹–ŒYœ|!8ÊVì¬ÑÙ°÷&ßË^El„¤`}Pr±üQU/o@O-½´é}§s¸+xÆ;)'<‹]Ü Ys_ŸžÀ£Ôê…”Pu]]¬SYçø^:²â4š†ÂTPœp=ø`d{JF˜ÏìÑËh•Ü®B>½æ–ù¬‚û•äMîf>GÏAjøJiaG‰‘%5XéÄ=;™Ñà…L¦·ig£Gj´MdnÅ–‚Jm›p¶A¢º#j%·£Ëþ³jwÇ
+Z3aû0ë¿/k,©&áNo,6¥óK?->‘'1i‰sT%ÎØŽBñÈñgZåïžÇUá
+¿‹<R YÌì·½jõ?’¤áéÄ™´«[ÁÙ^UH3–Õ$~Ç \:añHfsЗŽW ã@÷ݿҼƒXrÔk·} Kò vh%ŠÙ
+ßÂÑ8Ì°ÇݼÁZL{$€öVi!ZÛ` Ù_¨§í€8`¨s«>Á¤Ô)ÜIÏïÉ¥ì'Á÷E¬©ýÐÿ©öÁr*e¯þõ]zÒ'âø¨ONˆúHuôÕÀE´ÓlŒ.² b|ƒ&8µ´ÐÉÿÏ~GΞ8\–bcû–áX’¡‹ à/››âD—ÝPn7¶Vý^s/ FØûqa –”×Q÷äIùÐÙ‚ÉkòwÍrÎÉ­‹·¥6ÁulèÆ+ –tX­[õåµxÅ© m=+g¡]ÍøÍù ²}‰ˆœ'¬¯Žj“H‘86©J•ÆvwB9‹ÀÃJ*Šmc»É,{—ËîãdÉ? ÆÓË¢ØÌF]5Uñëa¶»t«wÓ¹žÑ•a±|»ˆaçŸ<€K[& ãT?Þ}A!ÜfF[ò}QˆÁ²îUz}!NÝ#/j¦VçôÞF–'û2 oÿŸ‚îWe¥õBd²A! Â{Üf#t_ œ³™€±
+`'/ƒ‹£S¡à{È㌜ʷtEkÍŠ›ž û>1hK™®‹ b’¯V@õÇ5jí+Ý;â[W'ªÓ
+ÍI¾œ^€ R=åëC€4nIä°‹‰à.*r®¤ Xº™d;?ÛªÏÁ“-*ói E´ô¢ý´t6`,Çl›ƒ*esR„Rj\T„†ç "T\þÙ*+%ÞHoEºO\4Bä]­ÊçO\EFÁ°b2ì4´³T˜¡–"ÏmÖ³¤näeGçU ¼ t¡pä•õjµëiHeÜEŽ‰„p¡†^4îM®‰H³ÿý¡
+”RqpçÓ{ éV
+a,ïãŠ#øf 1ïÜeò©ÖE†}5*ïçÇñ’3óÁ?†o¥t‡–M4$ï|B¾ºµý©Œ©æIó¾«ñ
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+endstream
+endobj
+2123 0 obj
+13219
+endobj
+2124 0 obj
+1768
+endobj
+2125 0 obj
+10919
+endobj
+2126 0 obj
+532
+endobj
+2127 0 obj
+/JKBRSN+CMBX12
+endobj
+2128 0 obj <<
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/FontName 2127 0 R
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/FontBBox [ -53 -251 1139 750 ]
+/Flags 4
+/CharSet (/fi/fl/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/question/A/B/C/D/E/F/G/H/I/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z)
+/FontFile 2122 0 R
+>> endobj
+383 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2129 0 R
+/Kids [373 0 R 387 0 R 440 0 R 492 0 R 500 0 R 507 0 R]
+>> endobj
+524 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2129 0 R
+/Kids [519 0 R 527 0 R 539 0 R 552 0 R 557 0 R 564 0 R]
+>> endobj
+572 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2129 0 R
+/Kids [569 0 R 575 0 R 580 0 R 588 0 R 593 0 R 598 0 R]
+>> endobj
+611 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2129 0 R
+/Kids [607 0 R 614 0 R 621 0 R 630 0 R 636 0 R 643 0 R]
+>> endobj
+653 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2129 0 R
+/Kids [648 0 R 660 0 R 673 0 R 681 0 R 687 0 R 696 0 R]
+>> endobj
+707 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2129 0 R
+/Kids [701 0 R 710 0 R 716 0 R 722 0 R 731 0 R 739 0 R]
+>> endobj
+752 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2130 0 R
+/Kids [749 0 R 755 0 R 765 0 R 773 0 R 782 0 R 791 0 R]
+>> endobj
+806 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2130 0 R
+/Kids [800 0 R 813 0 R 819 0 R 825 0 R 831 0 R 838 0 R]
+>> endobj
+848 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2130 0 R
+/Kids [844 0 R 851 0 R 858 0 R 864 0 R 878 0 R 886 0 R]
+>> endobj
+934 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2130 0 R
+/Kids [931 0 R 937 0 R 944 0 R 951 0 R 957 0 R 964 0 R]
+>> endobj
+976 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2130 0 R
+/Kids [972 0 R 989 0 R 999 0 R 1055 0 R 1062 0 R 1067 0 R]
+>> endobj
+1083 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2130 0 R
+/Kids [1076 0 R 1098 0 R 1103 0 R 1143 0 R 1153 0 R 1165 0 R]
+>> endobj
+1177 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2131 0 R
+/Kids [1174 0 R 1180 0 R 1185 0 R 1190 0 R 1195 0 R 1200 0 R]
+>> endobj
+1211 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2131 0 R
+/Kids [1208 0 R 1214 0 R 1219 0 R 1225 0 R 1230 0 R 1236 0 R]
+>> endobj
+1245 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2131 0 R
+/Kids [1241 0 R 1251 0 R 1257 0 R 1262 0 R 1269 0 R 1279 0 R]
+>> endobj
+1664 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2131 0 R
+/Kids [1660 0 R 1667 0 R 1676 0 R 1684 0 R 1701 0 R 1718 0 R]
+>> endobj
+1748 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2131 0 R
+/Kids [1742 0 R 1757 0 R 1780 0 R 1789 0 R 1798 0 R 1804 0 R]
+>> endobj
+1952 0 obj <<
+/Type /Pages
+/Count 1
+/Parent 2131 0 R
+/Kids [1904 0 R]
+>> endobj
+2129 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2132 0 R
+/Kids [383 0 R 524 0 R 572 0 R 611 0 R 653 0 R 707 0 R]
+>> endobj
+2130 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 2132 0 R
+/Kids [752 0 R 806 0 R 848 0 R 934 0 R 976 0 R 1083 0 R]
+>> endobj
+2131 0 obj <<
+/Type /Pages
+/Count 31
+/Parent 2132 0 R
+/Kids [1177 0 R 1211 0 R 1245 0 R 1664 0 R 1748 0 R 1952 0 R]
+>> endobj
+2132 0 obj <<
+/Type /Pages
+/Count 103
+/Kids [2129 0 R 2130 0 R 2131 0 R]
+>> endobj
+2133 0 obj <<
+/Type /Outlines
+/First 7 0 R
+/Last 371 0 R
+/Count 9
+>> endobj
+371 0 obj <<
+/Title 372 0 R
+/A 370 0 R
+/Parent 2133 0 R
+/Prev 355 0 R
+>> endobj
+367 0 obj <<
+/Title 368 0 R
+/A 366 0 R
+/Parent 355 0 R
+/Prev 363 0 R
+>> endobj
+363 0 obj <<
+/Title 364 0 R
+/A 362 0 R
+/Parent 355 0 R
+/Prev 359 0 R
+/Next 367 0 R
+>> endobj
+359 0 obj <<
+/Title 360 0 R
+/A 358 0 R
+/Parent 355 0 R
+/Next 363 0 R
+>> endobj
+355 0 obj <<
+/Title 356 0 R
+/A 354 0 R
+/Parent 2133 0 R
+/Prev 339 0 R
+/Next 371 0 R
+/First 359 0 R
+/Last 367 0 R
+/Count -3
+>> endobj
+351 0 obj <<
+/Title 352 0 R
+/A 350 0 R
+/Parent 339 0 R
+/Prev 347 0 R
+>> endobj
+347 0 obj <<
+/Title 348 0 R
+/A 346 0 R
+/Parent 339 0 R
+/Prev 343 0 R
+/Next 351 0 R
+>> endobj
+343 0 obj <<
+/Title 344 0 R
+/A 342 0 R
+/Parent 339 0 R
+/Next 347 0 R
+>> endobj
+339 0 obj <<
+/Title 340 0 R
+/A 338 0 R
+/Parent 2133 0 R
+/Prev 315 0 R
+/Next 355 0 R
+/First 343 0 R
+/Last 351 0 R
+/Count -3
+>> endobj
+335 0 obj <<
+/Title 336 0 R
+/A 334 0 R
+/Parent 315 0 R
+/Prev 331 0 R
+>> endobj
+331 0 obj <<
+/Title 332 0 R
+/A 330 0 R
+/Parent 315 0 R
+/Prev 327 0 R
+/Next 335 0 R
+>> endobj
+327 0 obj <<
+/Title 328 0 R
+/A 326 0 R
+/Parent 315 0 R
+/Prev 323 0 R
+/Next 331 0 R
+>> endobj
+323 0 obj <<
+/Title 324 0 R
+/A 322 0 R
+/Parent 315 0 R
+/Prev 319 0 R
+/Next 327 0 R
+>> endobj
+319 0 obj <<
+/Title 320 0 R
+/A 318 0 R
+/Parent 315 0 R
+/Next 323 0 R
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 314 0 R
+/Parent 2133 0 R
+/Prev 103 0 R
+/Next 339 0 R
+/First 319 0 R
+/Last 335 0 R
+/Count -5
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 310 0 R
+/Parent 103 0 R
+/Prev 295 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 306 0 R
+/Parent 295 0 R
+/Prev 303 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 302 0 R
+/Parent 295 0 R
+/Prev 299 0 R
+/Next 307 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 298 0 R
+/Parent 295 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 294 0 R
+/Parent 103 0 R
+/Prev 275 0 R
+/Next 311 0 R
+/First 299 0 R
+/Last 307 0 R
+/Count -3
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 290 0 R
+/Parent 275 0 R
+/Prev 287 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 286 0 R
+/Parent 275 0 R
+/Prev 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 282 0 R
+/Parent 275 0 R
+/Prev 279 0 R
+/Next 287 0 R
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 278 0 R
+/Parent 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 274 0 R
+/Parent 103 0 R
+/Prev 259 0 R
+/Next 295 0 R
+/First 279 0 R
+/Last 291 0 R
+/Count -4
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 270 0 R
+/Parent 259 0 R
+/Prev 267 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 266 0 R
+/Parent 259 0 R
+/Prev 263 0 R
+/Next 271 0 R
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 262 0 R
+/Parent 259 0 R
+/Next 267 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 258 0 R
+/Parent 103 0 R
+/Prev 243 0 R
+/Next 275 0 R
+/First 263 0 R
+/Last 271 0 R
+/Count -3
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 254 0 R
+/Parent 243 0 R
+/Prev 251 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 250 0 R
+/Parent 243 0 R
+/Prev 247 0 R
+/Next 255 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 246 0 R
+/Parent 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 242 0 R
+/Parent 103 0 R
+/Prev 239 0 R
+/Next 259 0 R
+/First 247 0 R
+/Last 255 0 R
+/Count -3
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 238 0 R
+/Parent 103 0 R
+/Prev 223 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 234 0 R
+/Parent 223 0 R
+/Prev 231 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 230 0 R
+/Parent 223 0 R
+/Prev 227 0 R
+/Next 235 0 R
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 226 0 R
+/Parent 223 0 R
+/Next 231 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 222 0 R
+/Parent 103 0 R
+/Prev 203 0 R
+/Next 239 0 R
+/First 227 0 R
+/Last 235 0 R
+/Count -3
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 218 0 R
+/Parent 203 0 R
+/Prev 215 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 214 0 R
+/Parent 203 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 210 0 R
+/Parent 203 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 206 0 R
+/Parent 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 202 0 R
+/Parent 103 0 R
+/Prev 199 0 R
+/Next 223 0 R
+/First 207 0 R
+/Last 219 0 R
+/Count -4
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 198 0 R
+/Parent 103 0 R
+/Prev 183 0 R
+/Next 203 0 R
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 194 0 R
+/Parent 183 0 R
+/Prev 191 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 190 0 R
+/Parent 183 0 R
+/Prev 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 186 0 R
+/Parent 183 0 R
+/Next 191 0 R
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 182 0 R
+/Parent 103 0 R
+/Prev 163 0 R
+/Next 199 0 R
+/First 187 0 R
+/Last 195 0 R
+/Count -3
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 178 0 R
+/Parent 163 0 R
+/Prev 175 0 R
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 174 0 R
+/Parent 163 0 R
+/Prev 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 170 0 R
+/Parent 163 0 R
+/Prev 167 0 R
+/Next 175 0 R
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 166 0 R
+/Parent 163 0 R
+/Next 171 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 162 0 R
+/Parent 103 0 R
+/Prev 159 0 R
+/Next 183 0 R
+/First 167 0 R
+/Last 179 0 R
+/Count -4
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 158 0 R
+/Parent 103 0 R
+/Prev 155 0 R
+/Next 163 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 154 0 R
+/Parent 103 0 R
+/Prev 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 150 0 R
+/Parent 103 0 R
+/Prev 147 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 146 0 R
+/Parent 103 0 R
+/Prev 143 0 R
+/Next 151 0 R
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 142 0 R
+/Parent 103 0 R
+/Prev 139 0 R
+/Next 147 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 138 0 R
+/Parent 103 0 R
+/Prev 115 0 R
+/Next 143 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 134 0 R
+/Parent 115 0 R
+/Prev 131 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 130 0 R
+/Parent 115 0 R
+/Prev 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 126 0 R
+/Parent 115 0 R
+/Prev 123 0 R
+/Next 131 0 R
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 122 0 R
+/Parent 115 0 R
+/Prev 119 0 R
+/Next 127 0 R
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 118 0 R
+/Parent 115 0 R
+/Next 123 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 114 0 R
+/Parent 103 0 R
+/Prev 111 0 R
+/Next 139 0 R
+/First 119 0 R
+/Last 135 0 R
+/Count -5
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 110 0 R
+/Parent 103 0 R
+/Prev 107 0 R
+/Next 115 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 106 0 R
+/Parent 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 102 0 R
+/Parent 2133 0 R
+/Prev 99 0 R
+/Next 315 0 R
+/First 107 0 R
+/Last 311 0 R
+/Count -20
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 98 0 R
+/Parent 2133 0 R
+/Prev 63 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 94 0 R
+/Parent 63 0 R
+/Prev 91 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 90 0 R
+/Parent 63 0 R
+/Prev 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 86 0 R
+/Parent 63 0 R
+/Prev 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 82 0 R
+/Parent 63 0 R
+/Prev 79 0 R
+/Next 87 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 78 0 R
+/Parent 63 0 R
+/Prev 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 74 0 R
+/Parent 63 0 R
+/Prev 71 0 R
+/Next 79 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 70 0 R
+/Parent 63 0 R
+/Prev 67 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 66 0 R
+/Parent 63 0 R
+/Next 71 0 R
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 62 0 R
+/Parent 2133 0 R
+/Prev 27 0 R
+/Next 99 0 R
+/First 67 0 R
+/Last 95 0 R
+/Count -8
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 58 0 R
+/Parent 27 0 R
+/Prev 39 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 54 0 R
+/Parent 39 0 R
+/Prev 51 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 50 0 R
+/Parent 39 0 R
+/Prev 47 0 R
+/Next 55 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 46 0 R
+/Parent 39 0 R
+/Prev 43 0 R
+/Next 51 0 R
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 42 0 R
+/Parent 39 0 R
+/Next 47 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 38 0 R
+/Parent 27 0 R
+/Prev 35 0 R
+/Next 59 0 R
+/First 43 0 R
+/Last 55 0 R
+/Count -4
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 34 0 R
+/Parent 27 0 R
+/Prev 31 0 R
+/Next 39 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 30 0 R
+/Parent 27 0 R
+/Next 35 0 R
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 26 0 R
+/Parent 2133 0 R
+/Prev 7 0 R
+/Next 63 0 R
+/First 31 0 R
+/Last 59 0 R
+/Count -4
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 22 0 R
+/Parent 7 0 R
+/Prev 19 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 18 0 R
+/Parent 7 0 R
+/Prev 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 14 0 R
+/Parent 7 0 R
+/Prev 11 0 R
+/Next 19 0 R
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 10 0 R
+/Parent 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 6 0 R
+/Parent 2133 0 R
+/Next 27 0 R
+/First 11 0 R
+/Last 23 0 R
+/Count -4
+>> endobj
+2134 0 obj <<
+/Names [(Doc-Start) 375 0 R (Hfootnote.1) 532 0 R (Hfootnote.10) 788 0 R (Hfootnote.11) 969 0 R (Hfootnote.12) 984 0 R (Hfootnote.13) 996 0 R (Hfootnote.14) 1071 0 R (Hfootnote.15) 1147 0 R (Hfootnote.2) 535 0 R (Hfootnote.3) 536 0 R (Hfootnote.4) 604 0 R (Hfootnote.5) 728 0 R (Hfootnote.6) 736 0 R (Hfootnote.7) 768 0 R (Hfootnote.8) 778 0 R (Hfootnote.9) 779 0 R (Item.1) 513 0 R (Item.10) 627 0 R (Item.11) 654 0 R (Item.12) 655 0 R (Item.13) 656 0 R (Item.14) 657 0 R (Item.15) 668 0 R (Item.16) 669 0 R (Item.17) 670 0 R (Item.18) 684 0 R (Item.19) 690 0 R (Item.2) 514 0 R (Item.20) 691 0 R (Item.21) 692 0 R (Item.22) 693 0 R (Item.23) 744 0 R (Item.24) 745 0 R (Item.25) 746 0 R (Item.26) 769 0 R (Item.27) 770 0 R (Item.28) 807 0 R (Item.29) 808 0 R (Item.3) 515 0 R (Item.30) 809 0 R (Item.31) 810 0 R (Item.32) 1139 0 R (Item.33) 1140 0 R (Item.34) 1146 0 R (Item.35) 1148 0 R (Item.36) 1149 0 R (Item.37) 1150 0 R (Item.38) 1158 0 R (Item.39) 1159 0 R (Item.4) 516 0 R (Item.40) 1160 0 R (Item.41) 1161 0 R (Item.42) 1162 0 R (Item.43) 1168 0 R (Item.44) 1169 0 R (Item.45) 1170 0 R (Item.46) 1171 0 R (Item.47) 1204 0 R (Item.48) 1205 0 R (Item.49) 1246 0 R (Item.5) 530 0 R (Item.50) 1247 0 R (Item.51) 1248 0 R (Item.52) 1774 0 R (Item.53) 1775 0 R (Item.6) 531 0 R (Item.7) 533 0 R (Item.8) 534 0 R (Item.9) 626 0 R (equation.1) 1727 0 R (equation.10) 1736 0 R (equation.11) 1737 0 R (equation.12) 1738 0 R (equation.13) 1739 0 R (equation.14) 1749 0 R (equation.15) 1750 0 R (equation.16) 1751 0 R (equation.17) 1752 0 R (equation.18) 1753 0 R (equation.19) 1754 0 R (equation.2) 1728 0 R (equation.20) 369 0 R (equation.3) 1729 0 R (equation.4) 1730 0 R (equation.5) 1731 0 R (equation.6) 1732 0 R (equation.7) 1733 0 R (equation.8) 1734 0 R (equation.9) 1735 0 R (figure.1) 867 0 R (figure.10) 1714 0 R (figure.11) 1776 0 R (figure.2) 967 0 R (figure.3) 981 0 R (figure.4) 985 0 R (figure.5) 1072 0 R (figure.6) 1090 0 R (figure.7) 1265 0 R (figure.8) 1679 0 R (figure.9) 1696 0 R (page.1) 376 0 R (page.10) 550 0 R (page.100) 1787 0 R (page.101) 1796 0 R (page.102) 1802 0 R (page.103) 1902 0 R (page.11) 555 0 R (page.12) 562 0 R (page.13) 567 0 R (page.14) 573 0 R (page.15) 578 0 R (page.16) 586 0 R (page.17) 591 0 R (page.18) 596 0 R (page.19) 605 0 R (page.2) 385 0 R (page.20) 612 0 R (page.21) 619 0 R (page.22) 628 0 R (page.23) 634 0 R (page.24) 641 0 R (page.25) 646 0 R (page.26) 658 0 R (page.27) 671 0 R (page.28) 679 0 R (page.29) 685 0 R (page.3) 438 0 R (page.30) 694 0 R (page.31) 699 0 R (page.32) 708 0 R (page.33) 714 0 R (page.34) 720 0 R (page.35) 729 0 R (page.36) 737 0 R (page.37) 747 0 R (page.38) 753 0 R (page.39) 763 0 R (page.4) 490 0 R (page.40) 771 0 R (page.41) 780 0 R (page.42) 789 0 R (page.43) 798 0 R (page.44) 811 0 R (page.45) 817 0 R (page.46) 823 0 R (page.47) 829 0 R (page.48) 836 0 R (page.49) 842 0 R (page.5) 498 0 R (page.50) 849 0 R (page.51) 856 0 R (page.52) 862 0 R (page.53) 876 0 R (page.54) 884 0 R (page.55) 929 0 R (page.56) 935 0 R (page.57) 942 0 R (page.58) 949 0 R (page.59) 955 0 R (page.6) 505 0 R (page.60) 962 0 R (page.61) 970 0 R (page.62) 987 0 R (page.63) 997 0 R (page.64) 1053 0 R (page.65) 1060 0 R (page.66) 1065 0 R (page.67) 1074 0 R (page.68) 1096 0 R (page.69) 1101 0 R (page.7) 517 0 R (page.70) 1141 0 R (page.71) 1151 0 R (page.72) 1163 0 R (page.73) 1172 0 R (page.74) 1178 0 R (page.75) 1183 0 R (page.76) 1188 0 R (page.77) 1193 0 R (page.78) 1198 0 R (page.79) 1206 0 R (page.8) 525 0 R (page.80) 1212 0 R (page.81) 1217 0 R (page.82) 1223 0 R (page.83) 1228 0 R (page.84) 1234 0 R (page.85) 1239 0 R (page.86) 1249 0 R (page.87) 1255 0 R (page.88) 1260 0 R (page.89) 1267 0 R (page.9) 537 0 R (page.90) 1277 0 R (page.91) 1658 0 R (page.92) 1665 0 R (page.93) 1674 0 R (page.94) 1682 0 R (page.95) 1699 0 R (page.96) 1716 0 R (page.97) 1740 0 R (page.98) 1755 0 R (page.99) 1778 0 R (section*.1) 384 0 R (section*.2) 1801 0 R (section.1) 5 0 R (section.2) 25 0 R (section.3) 61 0 R (section.4) 97 0 R (section.5) 101 0 R (section.6) 313 0 R (section.7) 337 0 R (section.8) 353 0 R (subsection.1.1) 9 0 R (subsection.1.2) 13 0 R (subsection.1.3) 17 0 R (subsection.1.4) 21 0 R (subsection.2.1) 29 0 R (subsection.2.2) 33 0 R (subsection.2.3) 37 0 R (subsection.2.4) 57 0 R (subsection.3.1) 65 0 R (subsection.3.2) 69 0 R (subsection.3.3) 73 0 R (subsection.3.4) 77 0 R (subsection.3.5) 81 0 R (subsection.3.6) 85 0 R (subsection.3.7) 89 0 R (subsection.3.8) 93 0 R (subsection.5.1) 105 0 R (subsection.5.10) 161 0 R (subsection.5.11) 181 0 R (subsection.5.12) 197 0 R (subsection.5.13) 201 0 R (subsection.5.14) 221 0 R (subsection.5.15) 237 0 R (subsection.5.16) 241 0 R (subsection.5.17) 257 0 R (subsection.5.18) 273 0 R (subsection.5.19) 293 0 R (subsection.5.2) 109 0 R (subsection.5.20) 309 0 R (subsection.5.3) 113 0 R (subsection.5.4) 137 0 R (subsection.5.5) 141 0 R (subsection.5.6) 145 0 R (subsection.5.7) 149 0 R (subsection.5.8) 153 0 R (subsection.5.9) 157 0 R (subsection.6.1) 317 0 R (subsection.6.2) 321 0 R (subsection.6.3) 325 0 R (subsection.6.4) 329 0 R (subsection.6.5) 333 0 R (subsection.7.1) 341 0 R (subsection.7.2) 345 0 R (subsection.7.3) 349 0 R (subsection.8.1) 357 0 R (subsection.8.2) 361 0 R (subsection.8.3) 365 0 R (subsubsection.2.3.1) 41 0 R (subsubsection.2.3.2) 45 0 R (subsubsection.2.3.3) 49 0 R (subsubsection.2.3.4) 53 0 R (subsubsection.5.10.1) 165 0 R (subsubsection.5.10.2) 169 0 R (subsubsection.5.10.3) 173 0 R (subsubsection.5.10.4) 177 0 R (subsubsection.5.11.1) 185 0 R (subsubsection.5.11.2) 189 0 R (subsubsection.5.11.3) 193 0 R (subsubsection.5.13.1) 205 0 R (subsubsection.5.13.2) 209 0 R (subsubsection.5.13.3) 213 0 R (subsubsection.5.13.4) 217 0 R (subsubsection.5.14.1) 225 0 R (subsubsection.5.14.2) 229 0 R (subsubsection.5.14.3) 233 0 R (subsubsection.5.16.1) 245 0 R (subsubsection.5.16.2) 249 0 R (subsubsection.5.16.3) 253 0 R (subsubsection.5.17.1) 261 0 R (subsubsection.5.17.2) 265 0 R (subsubsection.5.17.3) 269 0 R (subsubsection.5.18.1) 277 0 R (subsubsection.5.18.2) 281 0 R (subsubsection.5.18.3) 285 0 R (subsubsection.5.18.4) 289 0 R (subsubsection.5.19.1) 297 0 R (subsubsection.5.19.2) 301 0 R (subsubsection.5.19.3) 305 0 R (subsubsection.5.3.1) 117 0 R (subsubsection.5.3.2) 121 0 R (subsubsection.5.3.3) 125 0 R (subsubsection.5.3.4) 129 0 R (subsubsection.5.3.5) 133 0 R]
+/Limits [(Doc-Start) (subsubsection.5.3.5)]
+>> endobj
+2135 0 obj <<
+/Kids [2134 0 R]
+>> endobj
+2136 0 obj <<
+/Dests 2135 0 R
+>> endobj
+2137 0 obj <<
+/Type /Catalog
+/Pages 2132 0 R
+/Outlines 2133 0 R
+/Names 2136 0 R
+ /PageMode /UseOutlines /URI << /Base () >> /ViewerPreferences << >>
+/OpenAction 374 0 R
+>> endobj
+2138 0 obj <<
+ /Author () /Title () /Subject () /Creator (LaTeX with hyperref package) /Producer (pdfTeX13.d) /Keywords ()
+/Creator (TeX)
+/Producer (pdfTeX-0.13d)
+/CreationDate (D:20050518211800)
+>> endobj
+xref
+0 2139
+0000000000 65535 f
+0000009833 00000 n
+0000011151 00000 n
+0000011238 00000 n
+0000011338 00000 n
+0000036423 00000 n
+0000000009 00000 n
+0000736800 00000 n
+0000000054 00000 n
+0000036478 00000 n
+0000000084 00000 n
+0000736727 00000 n
+0000000135 00000 n
+0000040411 00000 n
+0000000173 00000 n
+0000736641 00000 n
+0000000224 00000 n
+0000043624 00000 n
+0000000265 00000 n
+0000736555 00000 n
+0000000316 00000 n
+0000043679 00000 n
+0000000345 00000 n
+0000736482 00000 n
+0000000396 00000 n
+0000047583 00000 n
+0000000455 00000 n
+0000736357 00000 n
+0000000501 00000 n
+0000047639 00000 n
+0000000535 00000 n
+0000736283 00000 n
+0000000586 00000 n
+0000051770 00000 n
+0000000656 00000 n
+0000736196 00000 n
+0000000707 00000 n
+0000051826 00000 n
+0000000752 00000 n
+0000736072 00000 n
+0000000803 00000 n
+0000051882 00000 n
+0000000835 00000 n
+0000735998 00000 n
+0000000891 00000 n
+0000056928 00000 n
+0000000942 00000 n
+0000735911 00000 n
+0000000998 00000 n
+0000063827 00000 n
+0000001045 00000 n
+0000735824 00000 n
+0000001101 00000 n
+0000063883 00000 n
+0000001142 00000 n
+0000735750 00000 n
+0000001198 00000 n
+0000066022 00000 n
+0000001243 00000 n
+0000735676 00000 n
+0000001294 00000 n
+0000071895 00000 n
+0000001346 00000 n
+0000735550 00000 n
+0000001392 00000 n
+0000071951 00000 n
+0000001429 00000 n
+0000735476 00000 n
+0000001480 00000 n
+0000078788 00000 n
+0000001542 00000 n
+0000735389 00000 n
+0000001593 00000 n
+0000078844 00000 n
+0000001662 00000 n
+0000735302 00000 n
+0000001713 00000 n
+0000086492 00000 n
+0000001761 00000 n
+0000735215 00000 n
+0000001812 00000 n
+0000086548 00000 n
+0000001849 00000 n
+0000735128 00000 n
+0000001900 00000 n
+0000086604 00000 n
+0000001936 00000 n
+0000735041 00000 n
+0000001987 00000 n
+0000097785 00000 n
+0000002035 00000 n
+0000734954 00000 n
+0000002086 00000 n
+0000097955 00000 n
+0000002140 00000 n
+0000734880 00000 n
+0000002191 00000 n
+0000099973 00000 n
+0000002240 00000 n
+0000734789 00000 n
+0000002286 00000 n
+0000103484 00000 n
+0000002326 00000 n
+0000734656 00000 n
+0000002373 00000 n
+0000103541 00000 n
+0000002404 00000 n
+0000734577 00000 n
+0000002456 00000 n
+0000103598 00000 n
+0000002512 00000 n
+0000734484 00000 n
+0000002564 00000 n
+0000112807 00000 n
+0000002650 00000 n
+0000734352 00000 n
+0000002702 00000 n
+0000112864 00000 n
+0000002764 00000 n
+0000734273 00000 n
+0000002821 00000 n
+0000117428 00000 n
+0000002864 00000 n
+0000734180 00000 n
+0000002921 00000 n
+0000124348 00000 n
+0000002995 00000 n
+0000734087 00000 n
+0000003052 00000 n
+0000124404 00000 n
+0000003100 00000 n
+0000733994 00000 n
+0000003157 00000 n
+0000128309 00000 n
+0000003208 00000 n
+0000733915 00000 n
+0000003265 00000 n
+0000132526 00000 n
+0000003326 00000 n
+0000733822 00000 n
+0000003378 00000 n
+0000136185 00000 n
+0000003415 00000 n
+0000733729 00000 n
+0000003467 00000 n
+0000161569 00000 n
+0000003505 00000 n
+0000733636 00000 n
+0000003557 00000 n
+0000164471 00000 n
+0000003601 00000 n
+0000733543 00000 n
+0000003653 00000 n
+0000172965 00000 n
+0000003704 00000 n
+0000733450 00000 n
+0000003756 00000 n
+0000181813 00000 n
+0000003789 00000 n
+0000733357 00000 n
+0000003841 00000 n
+0000185085 00000 n
+0000003901 00000 n
+0000733225 00000 n
+0000003954 00000 n
+0000188026 00000 n
+0000004016 00000 n
+0000733146 00000 n
+0000004074 00000 n
+0000191168 00000 n
+0000004130 00000 n
+0000733053 00000 n
+0000004188 00000 n
+0000201455 00000 n
+0000004236 00000 n
+0000732960 00000 n
+0000004294 00000 n
+0000204786 00000 n
+0000004341 00000 n
+0000732881 00000 n
+0000004399 00000 n
+0000208415 00000 n
+0000004445 00000 n
+0000732749 00000 n
+0000004498 00000 n
+0000208472 00000 n
+0000004541 00000 n
+0000732670 00000 n
+0000004599 00000 n
+0000215510 00000 n
+0000004644 00000 n
+0000732577 00000 n
+0000004702 00000 n
+0000230135 00000 n
+0000004754 00000 n
+0000732498 00000 n
+0000004812 00000 n
+0000234368 00000 n
+0000004886 00000 n
+0000732405 00000 n
+0000004939 00000 n
+0000242120 00000 n
+0000004989 00000 n
+0000732273 00000 n
+0000005042 00000 n
+0000242177 00000 n
+0000005074 00000 n
+0000732194 00000 n
+0000005132 00000 n
+0000245899 00000 n
+0000005171 00000 n
+0000732101 00000 n
+0000005229 00000 n
+0000248903 00000 n
+0000005277 00000 n
+0000732008 00000 n
+0000005335 00000 n
+0000252772 00000 n
+0000005373 00000 n
+0000731929 00000 n
+0000005431 00000 n
+0000257985 00000 n
+0000005490 00000 n
+0000731797 00000 n
+0000005543 00000 n
+0000272724 00000 n
+0000005584 00000 n
+0000731718 00000 n
+0000005642 00000 n
+0000279466 00000 n
+0000005676 00000 n
+0000731625 00000 n
+0000005734 00000 n
+0000288949 00000 n
+0000005768 00000 n
+0000731546 00000 n
+0000005826 00000 n
+0000319015 00000 n
+0000005870 00000 n
+0000731453 00000 n
+0000005923 00000 n
+0000319073 00000 n
+0000005956 00000 n
+0000731321 00000 n
+0000006009 00000 n
+0000319130 00000 n
+0000006057 00000 n
+0000731242 00000 n
+0000006115 00000 n
+0000323310 00000 n
+0000006155 00000 n
+0000731149 00000 n
+0000006213 00000 n
+0000327097 00000 n
+0000006262 00000 n
+0000731070 00000 n
+0000006320 00000 n
+0000334168 00000 n
+0000006357 00000 n
+0000730938 00000 n
+0000006410 00000 n
+0000334225 00000 n
+0000006445 00000 n
+0000730859 00000 n
+0000006503 00000 n
+0000338536 00000 n
+0000006560 00000 n
+0000730766 00000 n
+0000006618 00000 n
+0000342141 00000 n
+0000006662 00000 n
+0000730687 00000 n
+0000006720 00000 n
+0000342199 00000 n
+0000006772 00000 n
+0000730555 00000 n
+0000006825 00000 n
+0000342256 00000 n
+0000006865 00000 n
+0000730476 00000 n
+0000006923 00000 n
+0000345488 00000 n
+0000006958 00000 n
+0000730383 00000 n
+0000007016 00000 n
+0000353414 00000 n
+0000007070 00000 n
+0000730290 00000 n
+0000007128 00000 n
+0000353590 00000 n
+0000007212 00000 n
+0000730211 00000 n
+0000007270 00000 n
+0000357372 00000 n
+0000007297 00000 n
+0000730079 00000 n
+0000007350 00000 n
+0000357430 00000 n
+0000007384 00000 n
+0000730000 00000 n
+0000007442 00000 n
+0000361287 00000 n
+0000007490 00000 n
+0000729907 00000 n
+0000007548 00000 n
+0000361345 00000 n
+0000007590 00000 n
+0000729828 00000 n
+0000007648 00000 n
+0000365078 00000 n
+0000007680 00000 n
+0000729749 00000 n
+0000007733 00000 n
+0000371671 00000 n
+0000007775 00000 n
+0000729616 00000 n
+0000007822 00000 n
+0000371729 00000 n
+0000007859 00000 n
+0000729537 00000 n
+0000007911 00000 n
+0000371787 00000 n
+0000007959 00000 n
+0000729444 00000 n
+0000008011 00000 n
+0000374795 00000 n
+0000008066 00000 n
+0000729351 00000 n
+0000008118 00000 n
+0000382102 00000 n
+0000008157 00000 n
+0000729258 00000 n
+0000008209 00000 n
+0000382160 00000 n
+0000008265 00000 n
+0000729179 00000 n
+0000008317 00000 n
+0000387081 00000 n
+0000008364 00000 n
+0000729046 00000 n
+0000008411 00000 n
+0000387139 00000 n
+0000008455 00000 n
+0000728967 00000 n
+0000008507 00000 n
+0000446351 00000 n
+0000008547 00000 n
+0000728874 00000 n
+0000008599 00000 n
+0000447550 00000 n
+0000008654 00000 n
+0000728795 00000 n
+0000008706 00000 n
+0000454852 00000 n
+0000008759 00000 n
+0000728662 00000 n
+0000008806 00000 n
+0000454910 00000 n
+0000008844 00000 n
+0000728583 00000 n
+0000008896 00000 n
+0000461920 00000 n
+0000008924 00000 n
+0000728490 00000 n
+0000008976 00000 n
+0000484253 00000 n
+0000009025 00000 n
+0000728411 00000 n
+0000009077 00000 n
+0000489454 00000 n
+0000009141 00000 n
+0000728331 00000 n
+0000009190 00000 n
+0000009713 00000 n
+0000009224 00000 n
+0000011520 00000 n
+0000011463 00000 n
+0000011577 00000 n
+0000009276 00000 n
+0000009692 00000 n
+0000711134 00000 n
+0000704732 00000 n
+0000699716 00000 n
+0000725674 00000 n
+0000022085 00000 n
+0000022028 00000 n
+0000022141 00000 n
+0000014267 00000 n
+0000011688 00000 n
+0000014245 00000 n
+0000014759 00000 n
+0000683608 00000 n
+0000014910 00000 n
+0000662456 00000 n
+0000643670 00000 n
+0000015071 00000 n
+0000015232 00000 n
+0000015393 00000 n
+0000015553 00000 n
+0000015705 00000 n
+0000015865 00000 n
+0000016024 00000 n
+0000016185 00000 n
+0000016352 00000 n
+0000016518 00000 n
+0000016685 00000 n
+0000016852 00000 n
+0000017013 00000 n
+0000017165 00000 n
+0000017326 00000 n
+0000017487 00000 n
+0000017648 00000 n
+0000017809 00000 n
+0000017969 00000 n
+0000018130 00000 n
+0000018290 00000 n
+0000018451 00000 n
+0000018603 00000 n
+0000018755 00000 n
+0000018916 00000 n
+0000019077 00000 n
+0000019237 00000 n
+0000019404 00000 n
+0000019571 00000 n
+0000019737 00000 n
+0000019903 00000 n
+0000020070 00000 n
+0000020231 00000 n
+0000020392 00000 n
+0000020553 00000 n
+0000020714 00000 n
+0000020875 00000 n
+0000021036 00000 n
+0000021198 00000 n
+0000021366 00000 n
+0000021534 00000 n
+0000021701 00000 n
+0000021868 00000 n
+0000032772 00000 n
+0000032829 00000 n
+0000024583 00000 n
+0000022252 00000 n
+0000024561 00000 n
+0000025091 00000 n
+0000025259 00000 n
+0000025427 00000 n
+0000025594 00000 n
+0000025756 00000 n
+0000025918 00000 n
+0000026085 00000 n
+0000026253 00000 n
+0000026421 00000 n
+0000026589 00000 n
+0000026749 00000 n
+0000026917 00000 n
+0000027084 00000 n
+0000027252 00000 n
+0000027413 00000 n
+0000027573 00000 n
+0000027741 00000 n
+0000027908 00000 n
+0000028076 00000 n
+0000028238 00000 n
+0000028406 00000 n
+0000028574 00000 n
+0000028741 00000 n
+0000028902 00000 n
+0000029070 00000 n
+0000029238 00000 n
+0000029405 00000 n
+0000029573 00000 n
+0000029735 00000 n
+0000029903 00000 n
+0000030071 00000 n
+0000030239 00000 n
+0000030401 00000 n
+0000030553 00000 n
+0000030714 00000 n
+0000030875 00000 n
+0000031035 00000 n
+0000031195 00000 n
+0000031355 00000 n
+0000031503 00000 n
+0000031664 00000 n
+0000031825 00000 n
+0000031986 00000 n
+0000032138 00000 n
+0000032299 00000 n
+0000032460 00000 n
+0000032620 00000 n
+0000036366 00000 n
+0000036532 00000 n
+0000036246 00000 n
+0000032927 00000 n
+0000036224 00000 n
+0000637756 00000 n
+0000623630 00000 n
+0000618021 00000 n
+0000040354 00000 n
+0000040466 00000 n
+0000039881 00000 n
+0000036682 00000 n
+0000039859 00000 n
+0000040029 00000 n
+0000040192 00000 n
+0000043567 00000 n
+0000043734 00000 n
+0000043271 00000 n
+0000040590 00000 n
+0000043249 00000 n
+0000611430 00000 n
+0000043411 00000 n
+0000600817 00000 n
+0000047694 00000 n
+0000047751 00000 n
+0000047806 00000 n
+0000047863 00000 n
+0000047526 00000 n
+0000047920 00000 n
+0000047225 00000 n
+0000043884 00000 n
+0000047203 00000 n
+0000047365 00000 n
+0000595339 00000 n
+0000725792 00000 n
+0000051713 00000 n
+0000051938 00000 n
+0000051593 00000 n
+0000048096 00000 n
+0000051571 00000 n
+0000056701 00000 n
+0000056757 00000 n
+0000056984 00000 n
+0000056814 00000 n
+0000056871 00000 n
+0000057045 00000 n
+0000057106 00000 n
+0000056644 00000 n
+0000057165 00000 n
+0000055672 00000 n
+0000052114 00000 n
+0000055650 00000 n
+0000055844 00000 n
+0000056006 00000 n
+0000056168 00000 n
+0000056326 00000 n
+0000056485 00000 n
+0000590045 00000 n
+0000576233 00000 n
+0000566627 00000 n
+0000060137 00000 n
+0000060194 00000 n
+0000060017 00000 n
+0000057328 00000 n
+0000059995 00000 n
+0000063770 00000 n
+0000063939 00000 n
+0000063304 00000 n
+0000060318 00000 n
+0000063282 00000 n
+0000063452 00000 n
+0000063609 00000 n
+0000065965 00000 n
+0000066078 00000 n
+0000065845 00000 n
+0000064076 00000 n
+0000065823 00000 n
+0000066930 00000 n
+0000066987 00000 n
+0000066810 00000 n
+0000066176 00000 n
+0000066789 00000 n
+0000725910 00000 n
+0000067842 00000 n
+0000067899 00000 n
+0000067722 00000 n
+0000067072 00000 n
+0000067701 00000 n
+0000071838 00000 n
+0000072007 00000 n
+0000071366 00000 n
+0000067984 00000 n
+0000071344 00000 n
+0000562762 00000 n
+0000071514 00000 n
+0000071676 00000 n
+0000075422 00000 n
+0000075479 00000 n
+0000075302 00000 n
+0000072183 00000 n
+0000075280 00000 n
+0000078731 00000 n
+0000078900 00000 n
+0000078611 00000 n
+0000075590 00000 n
+0000078589 00000 n
+0000082560 00000 n
+0000082617 00000 n
+0000081928 00000 n
+0000079037 00000 n
+0000081906 00000 n
+0000082084 00000 n
+0000082246 00000 n
+0000082403 00000 n
+0000086660 00000 n
+0000086435 00000 n
+0000086720 00000 n
+0000086136 00000 n
+0000082728 00000 n
+0000086114 00000 n
+0000086276 00000 n
+0000726028 00000 n
+0000090052 00000 n
+0000090109 00000 n
+0000089580 00000 n
+0000086883 00000 n
+0000089558 00000 n
+0000089728 00000 n
+0000089890 00000 n
+0000094227 00000 n
+0000094284 00000 n
+0000093753 00000 n
+0000090207 00000 n
+0000093731 00000 n
+0000093901 00000 n
+0000094064 00000 n
+0000097841 00000 n
+0000097898 00000 n
+0000097728 00000 n
+0000098011 00000 n
+0000097420 00000 n
+0000094421 00000 n
+0000097398 00000 n
+0000097560 00000 n
+0000099916 00000 n
+0000100029 00000 n
+0000099443 00000 n
+0000098135 00000 n
+0000099421 00000 n
+0000099591 00000 n
+0000099754 00000 n
+0000103427 00000 n
+0000103655 00000 n
+0000103307 00000 n
+0000100140 00000 n
+0000103285 00000 n
+0000107907 00000 n
+0000107964 00000 n
+0000107440 00000 n
+0000103818 00000 n
+0000107418 00000 n
+0000107588 00000 n
+0000107748 00000 n
+0000726146 00000 n
+0000112921 00000 n
+0000112978 00000 n
+0000113035 00000 n
+0000117201 00000 n
+0000112750 00000 n
+0000113091 00000 n
+0000111762 00000 n
+0000108075 00000 n
+0000111740 00000 n
+0000111934 00000 n
+0000112090 00000 n
+0000112252 00000 n
+0000112414 00000 n
+0000112582 00000 n
+0000117258 00000 n
+0000117314 00000 n
+0000117371 00000 n
+0000117144 00000 n
+0000117485 00000 n
+0000116508 00000 n
+0000113228 00000 n
+0000116486 00000 n
+0000116664 00000 n
+0000116825 00000 n
+0000116988 00000 n
+0000120940 00000 n
+0000120997 00000 n
+0000120820 00000 n
+0000117609 00000 n
+0000120798 00000 n
+0000128025 00000 n
+0000124291 00000 n
+0000124461 00000 n
+0000124171 00000 n
+0000121095 00000 n
+0000124149 00000 n
+0000128082 00000 n
+0000128139 00000 n
+0000128196 00000 n
+0000128252 00000 n
+0000127968 00000 n
+0000128366 00000 n
+0000127848 00000 n
+0000124585 00000 n
+0000127826 00000 n
+0000132469 00000 n
+0000132583 00000 n
+0000132000 00000 n
+0000128490 00000 n
+0000131978 00000 n
+0000132148 00000 n
+0000132308 00000 n
+0000554555 00000 n
+0000726264 00000 n
+0000136128 00000 n
+0000136241 00000 n
+0000136008 00000 n
+0000132720 00000 n
+0000135986 00000 n
+0000542247 00000 n
+0000139592 00000 n
+0000139649 00000 n
+0000139295 00000 n
+0000136365 00000 n
+0000139273 00000 n
+0000139435 00000 n
+0000143990 00000 n
+0000144047 00000 n
+0000143347 00000 n
+0000139760 00000 n
+0000143325 00000 n
+0000143503 00000 n
+0000143665 00000 n
+0000143827 00000 n
+0000148570 00000 n
+0000148513 00000 n
+0000148631 00000 n
+0000148047 00000 n
+0000144158 00000 n
+0000148025 00000 n
+0000148195 00000 n
+0000148354 00000 n
+0000153387 00000 n
+0000153330 00000 n
+0000153448 00000 n
+0000152863 00000 n
+0000148794 00000 n
+0000152841 00000 n
+0000153011 00000 n
+0000153173 00000 n
+0000157722 00000 n
+0000157779 00000 n
+0000157836 00000 n
+0000157665 00000 n
+0000157893 00000 n
+0000157545 00000 n
+0000153637 00000 n
+0000157523 00000 n
+0000726382 00000 n
+0000161512 00000 n
+0000161626 00000 n
+0000160534 00000 n
+0000158017 00000 n
+0000160512 00000 n
+0000160706 00000 n
+0000160869 00000 n
+0000161030 00000 n
+0000161192 00000 n
+0000161355 00000 n
+0000164414 00000 n
+0000164528 00000 n
+0000164294 00000 n
+0000161737 00000 n
+0000164272 00000 n
+0000168739 00000 n
+0000168626 00000 n
+0000168682 00000 n
+0000168569 00000 n
+0000168799 00000 n
+0000168100 00000 n
+0000164652 00000 n
+0000168078 00000 n
+0000168248 00000 n
+0000168410 00000 n
+0000173022 00000 n
+0000173083 00000 n
+0000172908 00000 n
+0000173143 00000 n
+0000172278 00000 n
+0000168936 00000 n
+0000172256 00000 n
+0000172434 00000 n
+0000172592 00000 n
+0000172751 00000 n
+0000177474 00000 n
+0000177417 00000 n
+0000177534 00000 n
+0000176621 00000 n
+0000173319 00000 n
+0000176599 00000 n
+0000176785 00000 n
+0000176942 00000 n
+0000177099 00000 n
+0000177258 00000 n
+0000181756 00000 n
+0000181870 00000 n
+0000181101 00000 n
+0000177697 00000 n
+0000181079 00000 n
+0000181257 00000 n
+0000181420 00000 n
+0000181588 00000 n
+0000726500 00000 n
+0000185142 00000 n
+0000185199 00000 n
+0000185255 00000 n
+0000185312 00000 n
+0000185028 00000 n
+0000185369 00000 n
+0000184726 00000 n
+0000182007 00000 n
+0000184704 00000 n
+0000184866 00000 n
+0000187969 00000 n
+0000188083 00000 n
+0000187666 00000 n
+0000185493 00000 n
+0000187644 00000 n
+0000187806 00000 n
+0000191111 00000 n
+0000191225 00000 n
+0000190809 00000 n
+0000188194 00000 n
+0000190787 00000 n
+0000190949 00000 n
+0000194599 00000 n
+0000194656 00000 n
+0000194126 00000 n
+0000191349 00000 n
+0000194104 00000 n
+0000194274 00000 n
+0000194437 00000 n
+0000197891 00000 n
+0000197948 00000 n
+0000197589 00000 n
+0000194754 00000 n
+0000197567 00000 n
+0000197729 00000 n
+0000201398 00000 n
+0000201512 00000 n
+0000201097 00000 n
+0000198072 00000 n
+0000201075 00000 n
+0000201237 00000 n
+0000726618 00000 n
+0000204729 00000 n
+0000204843 00000 n
+0000204252 00000 n
+0000201649 00000 n
+0000204230 00000 n
+0000204400 00000 n
+0000204562 00000 n
+0000208358 00000 n
+0000208529 00000 n
+0000208055 00000 n
+0000204954 00000 n
+0000208033 00000 n
+0000208195 00000 n
+0000212157 00000 n
+0000212214 00000 n
+0000212037 00000 n
+0000208679 00000 n
+0000212015 00000 n
+0000226934 00000 n
+0000217046 00000 n
+0000218258 00000 n
+0000219470 00000 n
+0000220696 00000 n
+0000221923 00000 n
+0000223153 00000 n
+0000224388 00000 n
+0000225620 00000 n
+0000215453 00000 n
+0000215567 00000 n
+0000215158 00000 n
+0000212338 00000 n
+0000215136 00000 n
+0000534846 00000 n
+0000528442 00000 n
+0000215298 00000 n
+0000226877 00000 n
+0000226996 00000 n
+0000216926 00000 n
+0000215755 00000 n
+0000216904 00000 n
+0000218189 00000 n
+0000217265 00000 n
+0000217285 00000 n
+0000218105 00000 n
+0000218084 00000 n
+0000219401 00000 n
+0000218477 00000 n
+0000218497 00000 n
+0000219317 00000 n
+0000219296 00000 n
+0000220627 00000 n
+0000219689 00000 n
+0000219709 00000 n
+0000220543 00000 n
+0000220522 00000 n
+0000221854 00000 n
+0000220915 00000 n
+0000220935 00000 n
+0000221770 00000 n
+0000221749 00000 n
+0000223084 00000 n
+0000222142 00000 n
+0000222162 00000 n
+0000223000 00000 n
+0000222979 00000 n
+0000224319 00000 n
+0000223372 00000 n
+0000223392 00000 n
+0000224235 00000 n
+0000224214 00000 n
+0000225551 00000 n
+0000224607 00000 n
+0000224627 00000 n
+0000225467 00000 n
+0000225446 00000 n
+0000226808 00000 n
+0000225839 00000 n
+0000225859 00000 n
+0000226724 00000 n
+0000226703 00000 n
+0000230078 00000 n
+0000230192 00000 n
+0000229958 00000 n
+0000227239 00000 n
+0000229936 00000 n
+0000726736 00000 n
+0000234311 00000 n
+0000234425 00000 n
+0000233850 00000 n
+0000230354 00000 n
+0000233828 00000 n
+0000233998 00000 n
+0000234155 00000 n
+0000238244 00000 n
+0000238301 00000 n
+0000237770 00000 n
+0000234600 00000 n
+0000237748 00000 n
+0000237918 00000 n
+0000238081 00000 n
+0000242063 00000 n
+0000242234 00000 n
+0000241761 00000 n
+0000238412 00000 n
+0000241739 00000 n
+0000241901 00000 n
+0000245842 00000 n
+0000245956 00000 n
+0000245371 00000 n
+0000242384 00000 n
+0000245349 00000 n
+0000245519 00000 n
+0000245680 00000 n
+0000248846 00000 n
+0000248960 00000 n
+0000248726 00000 n
+0000246067 00000 n
+0000248704 00000 n
+0000252710 00000 n
+0000251722 00000 n
+0000258042 00000 n
+0000252653 00000 n
+0000252829 00000 n
+0000251582 00000 n
+0000249084 00000 n
+0000251560 00000 n
+0000252498 00000 n
+0000726854 00000 n
+0000252429 00000 n
+0000251931 00000 n
+0000251951 00000 n
+0000252408 00000 n
+0000272600 00000 n
+0000260326 00000 n
+0000262125 00000 n
+0000258103 00000 n
+0000272662 00000 n
+0000263918 00000 n
+0000257928 00000 n
+0000258164 00000 n
+0000257127 00000 n
+0000252981 00000 n
+0000257105 00000 n
+0000257291 00000 n
+0000257451 00000 n
+0000257612 00000 n
+0000257768 00000 n
+0000276756 00000 n
+0000272543 00000 n
+0000272781 00000 n
+0000260184 00000 n
+0000258353 00000 n
+0000260161 00000 n
+0000272386 00000 n
+0000262053 00000 n
+0000260548 00000 n
+0000260569 00000 n
+0000260874 00000 n
+0000260853 00000 n
+0000262031 00000 n
+0000263846 00000 n
+0000262347 00000 n
+0000262368 00000 n
+0000262673 00000 n
+0000262652 00000 n
+0000263824 00000 n
+0000272314 00000 n
+0000264140 00000 n
+0000264161 00000 n
+0000266962 00000 n
+0000266939 00000 n
+0000267401 00000 n
+0000268886 00000 n
+0000269148 00000 n
+0000269429 00000 n
+0000269713 00000 n
+0000269953 00000 n
+0000270236 00000 n
+0000270503 00000 n
+0000270742 00000 n
+0000271018 00000 n
+0000271283 00000 n
+0000271499 00000 n
+0000271734 00000 n
+0000271850 00000 n
+0000271966 00000 n
+0000272082 00000 n
+0000272198 00000 n
+0000269126 00000 n
+0000269407 00000 n
+0000269691 00000 n
+0000269931 00000 n
+0000270214 00000 n
+0000270481 00000 n
+0000270720 00000 n
+0000270996 00000 n
+0000271261 00000 n
+0000271477 00000 n
+0000271712 00000 n
+0000271829 00000 n
+0000271945 00000 n
+0000272061 00000 n
+0000272177 00000 n
+0000272293 00000 n
+0000276697 00000 n
+0000276818 00000 n
+0000276229 00000 n
+0000272988 00000 n
+0000276206 00000 n
+0000276382 00000 n
+0000276541 00000 n
+0000279407 00000 n
+0000279524 00000 n
+0000279284 00000 n
+0000277021 00000 n
+0000279261 00000 n
+0000282256 00000 n
+0000282315 00000 n
+0000281957 00000 n
+0000279636 00000 n
+0000281934 00000 n
+0000282101 00000 n
+0000289007 00000 n
+0000288885 00000 n
+0000285459 00000 n
+0000288826 00000 n
+0000289070 00000 n
+0000285287 00000 n
+0000282427 00000 n
+0000285264 00000 n
+0000288180 00000 n
+0000288348 00000 n
+0000288508 00000 n
+0000288665 00000 n
+0000726975 00000 n
+0000288108 00000 n
+0000285682 00000 n
+0000285703 00000 n
+0000286017 00000 n
+0000285996 00000 n
+0000288085 00000 n
+0000315181 00000 n
+0000294912 00000 n
+0000298401 00000 n
+0000302160 00000 n
+0000306392 00000 n
+0000311246 00000 n
+0000291842 00000 n
+0000291901 00000 n
+0000291718 00000 n
+0000289290 00000 n
+0000291695 00000 n
+0000315122 00000 n
+0000315245 00000 n
+0000294749 00000 n
+0000292013 00000 n
+0000294726 00000 n
+0000314653 00000 n
+0000314810 00000 n
+0000314966 00000 n
+0000298329 00000 n
+0000295130 00000 n
+0000295151 00000 n
+0000295457 00000 n
+0000295436 00000 n
+0000298306 00000 n
+0000302088 00000 n
+0000298619 00000 n
+0000298640 00000 n
+0000298945 00000 n
+0000298924 00000 n
+0000302065 00000 n
+0000306320 00000 n
+0000302378 00000 n
+0000302399 00000 n
+0000302705 00000 n
+0000302684 00000 n
+0000306297 00000 n
+0000311174 00000 n
+0000306610 00000 n
+0000306631 00000 n
+0000306937 00000 n
+0000306916 00000 n
+0000311151 00000 n
+0000314581 00000 n
+0000311464 00000 n
+0000311485 00000 n
+0000311791 00000 n
+0000311770 00000 n
+0000314558 00000 n
+0000319188 00000 n
+0000319247 00000 n
+0000318956 00000 n
+0000319306 00000 n
+0000318832 00000 n
+0000315460 00000 n
+0000318809 00000 n
+0000323075 00000 n
+0000323368 00000 n
+0000323134 00000 n
+0000323193 00000 n
+0000323252 00000 n
+0000323016 00000 n
+0000323430 00000 n
+0000322533 00000 n
+0000319457 00000 n
+0000322510 00000 n
+0000322687 00000 n
+0000322848 00000 n
+0000327155 00000 n
+0000327214 00000 n
+0000327272 00000 n
+0000327331 00000 n
+0000327390 00000 n
+0000327038 00000 n
+0000327449 00000 n
+0000326914 00000 n
+0000323594 00000 n
+0000326891 00000 n
+0000330655 00000 n
+0000330714 00000 n
+0000330773 00000 n
+0000330832 00000 n
+0000330596 00000 n
+0000330891 00000 n
+0000330472 00000 n
+0000327574 00000 n
+0000330449 00000 n
+0000727100 00000 n
+0000334109 00000 n
+0000334283 00000 n
+0000333985 00000 n
+0000330990 00000 n
+0000333962 00000 n
+0000338477 00000 n
+0000338594 00000 n
+0000338353 00000 n
+0000334408 00000 n
+0000338330 00000 n
+0000342082 00000 n
+0000342314 00000 n
+0000341958 00000 n
+0000338706 00000 n
+0000341935 00000 n
+0000345429 00000 n
+0000345546 00000 n
+0000345305 00000 n
+0000342439 00000 n
+0000345282 00000 n
+0000349639 00000 n
+0000349698 00000 n
+0000349331 00000 n
+0000345658 00000 n
+0000349308 00000 n
+0000349476 00000 n
+0000353472 00000 n
+0000353531 00000 n
+0000353355 00000 n
+0000353648 00000 n
+0000353231 00000 n
+0000349810 00000 n
+0000353208 00000 n
+0000727225 00000 n
+0000357313 00000 n
+0000357488 00000 n
+0000357189 00000 n
+0000353747 00000 n
+0000357166 00000 n
+0000361228 00000 n
+0000361403 00000 n
+0000360914 00000 n
+0000357613 00000 n
+0000360891 00000 n
+0000361059 00000 n
+0000365019 00000 n
+0000365136 00000 n
+0000364895 00000 n
+0000361528 00000 n
+0000364872 00000 n
+0000368258 00000 n
+0000368317 00000 n
+0000367950 00000 n
+0000365261 00000 n
+0000367927 00000 n
+0000368095 00000 n
+0000371612 00000 n
+0000371845 00000 n
+0000371488 00000 n
+0000368429 00000 n
+0000371465 00000 n
+0000374736 00000 n
+0000374853 00000 n
+0000374427 00000 n
+0000371983 00000 n
+0000374404 00000 n
+0000374572 00000 n
+0000727350 00000 n
+0000378950 00000 n
+0000379009 00000 n
+0000379068 00000 n
+0000378891 00000 n
+0000379127 00000 n
+0000378583 00000 n
+0000374965 00000 n
+0000378560 00000 n
+0000378728 00000 n
+0000382043 00000 n
+0000382218 00000 n
+0000381919 00000 n
+0000379265 00000 n
+0000381896 00000 n
+0000382840 00000 n
+0000382899 00000 n
+0000382716 00000 n
+0000382343 00000 n
+0000382694 00000 n
+0000437596 00000 n
+0000387955 00000 n
+0000387022 00000 n
+0000387197 00000 n
+0000386382 00000 n
+0000382985 00000 n
+0000386359 00000 n
+0000524347 00000 n
+0000517328 00000 n
+0000386545 00000 n
+0000386702 00000 n
+0000386859 00000 n
+0000437537 00000 n
+0000437660 00000 n
+0000387831 00000 n
+0000387350 00000 n
+0000387809 00000 n
+0000437465 00000 n
+0000388178 00000 n
+0000388199 00000 n
+0000394514 00000 n
+0000394491 00000 n
+0000397790 00000 n
+0000399275 00000 n
+0000399510 00000 n
+0000399713 00000 n
+0000399916 00000 n
+0000400143 00000 n
+0000400379 00000 n
+0000400590 00000 n
+0000400848 00000 n
+0000401065 00000 n
+0000401317 00000 n
+0000401579 00000 n
+0000401849 00000 n
+0000402112 00000 n
+0000402316 00000 n
+0000402573 00000 n
+0000402824 00000 n
+0000403049 00000 n
+0000403272 00000 n
+0000403493 00000 n
+0000403784 00000 n
+0000404071 00000 n
+0000404374 00000 n
+0000404584 00000 n
+0000404894 00000 n
+0000405159 00000 n
+0000405442 00000 n
+0000405674 00000 n
+0000405962 00000 n
+0000406251 00000 n
+0000406575 00000 n
+0000406866 00000 n
+0000407168 00000 n
+0000407443 00000 n
+0000407726 00000 n
+0000407944 00000 n
+0000408171 00000 n
+0000408457 00000 n
+0000408734 00000 n
+0000408976 00000 n
+0000409180 00000 n
+0000409387 00000 n
+0000409627 00000 n
+0000409842 00000 n
+0000410180 00000 n
+0000410397 00000 n
+0000410620 00000 n
+0000410822 00000 n
+0000411091 00000 n
+0000411375 00000 n
+0000411587 00000 n
+0000411849 00000 n
+0000412093 00000 n
+0000412314 00000 n
+0000412555 00000 n
+0000412780 00000 n
+0000413028 00000 n
+0000413271 00000 n
+0000413506 00000 n
+0000413709 00000 n
+0000413950 00000 n
+0000414181 00000 n
+0000414406 00000 n
+0000414615 00000 n
+0000414826 00000 n
+0000415067 00000 n
+0000415325 00000 n
+0000415585 00000 n
+0000415798 00000 n
+0000416061 00000 n
+0000416327 00000 n
+0000416557 00000 n
+0000416791 00000 n
+0000416995 00000 n
+0000417199 00000 n
+0000417446 00000 n
+0000417695 00000 n
+0000417915 00000 n
+0000418166 00000 n
+0000418425 00000 n
+0000418658 00000 n
+0000418861 00000 n
+0000419075 00000 n
+0000419283 00000 n
+0000419504 00000 n
+0000419726 00000 n
+0000419974 00000 n
+0000420258 00000 n
+0000420468 00000 n
+0000420709 00000 n
+0000420955 00000 n
+0000421206 00000 n
+0000421449 00000 n
+0000421672 00000 n
+0000421889 00000 n
+0000422109 00000 n
+0000422360 00000 n
+0000422576 00000 n
+0000422782 00000 n
+0000423020 00000 n
+0000423249 00000 n
+0000423479 00000 n
+0000423699 00000 n
+0000423957 00000 n
+0000424172 00000 n
+0000424380 00000 n
+0000424641 00000 n
+0000424891 00000 n
+0000425139 00000 n
+0000425348 00000 n
+0000425570 00000 n
+0000425812 00000 n
+0000426066 00000 n
+0000426316 00000 n
+0000426539 00000 n
+0000426809 00000 n
+0000427053 00000 n
+0000427268 00000 n
+0000427517 00000 n
+0000427721 00000 n
+0000427920 00000 n
+0000428156 00000 n
+0000428403 00000 n
+0000428634 00000 n
+0000428899 00000 n
+0000429107 00000 n
+0000429347 00000 n
+0000429592 00000 n
+0000429834 00000 n
+0000430036 00000 n
+0000430295 00000 n
+0000430517 00000 n
+0000430736 00000 n
+0000430985 00000 n
+0000431201 00000 n
+0000431448 00000 n
+0000431669 00000 n
+0000431785 00000 n
+0000431901 00000 n
+0000432017 00000 n
+0000432133 00000 n
+0000432249 00000 n
+0000432365 00000 n
+0000432480 00000 n
+0000432596 00000 n
+0000432712 00000 n
+0000432828 00000 n
+0000432944 00000 n
+0000433060 00000 n
+0000433176 00000 n
+0000433292 00000 n
+0000433408 00000 n
+0000433524 00000 n
+0000433640 00000 n
+0000433756 00000 n
+0000433872 00000 n
+0000433988 00000 n
+0000434104 00000 n
+0000434220 00000 n
+0000434336 00000 n
+0000434452 00000 n
+0000434567 00000 n
+0000434683 00000 n
+0000434799 00000 n
+0000434915 00000 n
+0000435031 00000 n
+0000435147 00000 n
+0000435263 00000 n
+0000435379 00000 n
+0000435494 00000 n
+0000435610 00000 n
+0000435726 00000 n
+0000435842 00000 n
+0000435958 00000 n
+0000436074 00000 n
+0000436190 00000 n
+0000436306 00000 n
+0000436422 00000 n
+0000436538 00000 n
+0000436654 00000 n
+0000436770 00000 n
+0000436886 00000 n
+0000437002 00000 n
+0000437117 00000 n
+0000437233 00000 n
+0000437349 00000 n
+0000399488 00000 n
+0000399691 00000 n
+0000399894 00000 n
+0000400121 00000 n
+0000400357 00000 n
+0000400568 00000 n
+0000400826 00000 n
+0000401043 00000 n
+0000401295 00000 n
+0000401557 00000 n
+0000401827 00000 n
+0000402090 00000 n
+0000402294 00000 n
+0000402551 00000 n
+0000402802 00000 n
+0000403027 00000 n
+0000403250 00000 n
+0000403471 00000 n
+0000403762 00000 n
+0000404049 00000 n
+0000404352 00000 n
+0000404562 00000 n
+0000404872 00000 n
+0000405137 00000 n
+0000405420 00000 n
+0000405652 00000 n
+0000405940 00000 n
+0000406229 00000 n
+0000406553 00000 n
+0000406844 00000 n
+0000407146 00000 n
+0000407421 00000 n
+0000407704 00000 n
+0000407922 00000 n
+0000408149 00000 n
+0000408435 00000 n
+0000408712 00000 n
+0000408954 00000 n
+0000409158 00000 n
+0000409365 00000 n
+0000409605 00000 n
+0000409820 00000 n
+0000410158 00000 n
+0000410375 00000 n
+0000410598 00000 n
+0000410800 00000 n
+0000411069 00000 n
+0000411353 00000 n
+0000411565 00000 n
+0000411827 00000 n
+0000412071 00000 n
+0000412292 00000 n
+0000412533 00000 n
+0000412758 00000 n
+0000413006 00000 n
+0000413249 00000 n
+0000413484 00000 n
+0000413687 00000 n
+0000413928 00000 n
+0000414159 00000 n
+0000414384 00000 n
+0000414593 00000 n
+0000414804 00000 n
+0000415045 00000 n
+0000415303 00000 n
+0000415563 00000 n
+0000415776 00000 n
+0000416039 00000 n
+0000416305 00000 n
+0000416535 00000 n
+0000416769 00000 n
+0000416973 00000 n
+0000417177 00000 n
+0000417424 00000 n
+0000417673 00000 n
+0000417893 00000 n
+0000418144 00000 n
+0000418403 00000 n
+0000418636 00000 n
+0000418839 00000 n
+0000419053 00000 n
+0000419261 00000 n
+0000419482 00000 n
+0000419704 00000 n
+0000419952 00000 n
+0000420236 00000 n
+0000420446 00000 n
+0000420687 00000 n
+0000420933 00000 n
+0000421184 00000 n
+0000421427 00000 n
+0000421650 00000 n
+0000421867 00000 n
+0000422087 00000 n
+0000422338 00000 n
+0000422554 00000 n
+0000422760 00000 n
+0000422998 00000 n
+0000423227 00000 n
+0000423457 00000 n
+0000423677 00000 n
+0000423935 00000 n
+0000424150 00000 n
+0000424358 00000 n
+0000424619 00000 n
+0000424869 00000 n
+0000425117 00000 n
+0000425326 00000 n
+0000425548 00000 n
+0000425790 00000 n
+0000426044 00000 n
+0000426294 00000 n
+0000426517 00000 n
+0000426787 00000 n
+0000427031 00000 n
+0000427246 00000 n
+0000427495 00000 n
+0000427699 00000 n
+0000427899 00000 n
+0000428134 00000 n
+0000428381 00000 n
+0000428612 00000 n
+0000428877 00000 n
+0000429085 00000 n
+0000429325 00000 n
+0000429570 00000 n
+0000429812 00000 n
+0000430014 00000 n
+0000430273 00000 n
+0000430495 00000 n
+0000430714 00000 n
+0000430963 00000 n
+0000431179 00000 n
+0000431426 00000 n
+0000431647 00000 n
+0000431764 00000 n
+0000431880 00000 n
+0000431996 00000 n
+0000432112 00000 n
+0000432228 00000 n
+0000432344 00000 n
+0000432459 00000 n
+0000432575 00000 n
+0000432691 00000 n
+0000432807 00000 n
+0000432923 00000 n
+0000433039 00000 n
+0000433155 00000 n
+0000433271 00000 n
+0000433387 00000 n
+0000433503 00000 n
+0000433619 00000 n
+0000433735 00000 n
+0000433851 00000 n
+0000433967 00000 n
+0000434083 00000 n
+0000434199 00000 n
+0000434315 00000 n
+0000434431 00000 n
+0000434546 00000 n
+0000434662 00000 n
+0000434778 00000 n
+0000434894 00000 n
+0000435010 00000 n
+0000435126 00000 n
+0000435242 00000 n
+0000435358 00000 n
+0000435473 00000 n
+0000435589 00000 n
+0000435705 00000 n
+0000435821 00000 n
+0000435937 00000 n
+0000436053 00000 n
+0000436169 00000 n
+0000436285 00000 n
+0000436401 00000 n
+0000436517 00000 n
+0000436633 00000 n
+0000436749 00000 n
+0000436865 00000 n
+0000436981 00000 n
+0000437096 00000 n
+0000437212 00000 n
+0000437328 00000 n
+0000437444 00000 n
+0000441681 00000 n
+0000441740 00000 n
+0000441373 00000 n
+0000437776 00000 n
+0000441350 00000 n
+0000441518 00000 n
+0000727475 00000 n
+0000446292 00000 n
+0000446409 00000 n
+0000445475 00000 n
+0000441852 00000 n
+0000445452 00000 n
+0000445647 00000 n
+0000445811 00000 n
+0000445972 00000 n
+0000446129 00000 n
+0000447491 00000 n
+0000447608 00000 n
+0000447367 00000 n
+0000446521 00000 n
+0000447345 00000 n
+0000454788 00000 n
+0000450639 00000 n
+0000452327 00000 n
+0000454729 00000 n
+0000454968 00000 n
+0000450494 00000 n
+0000447720 00000 n
+0000450471 00000 n
+0000454573 00000 n
+0000452255 00000 n
+0000450862 00000 n
+0000450883 00000 n
+0000452232 00000 n
+0000454501 00000 n
+0000452550 00000 n
+0000452571 00000 n
+0000454478 00000 n
+0000461856 00000 n
+0000458113 00000 n
+0000459805 00000 n
+0000461797 00000 n
+0000461978 00000 n
+0000457959 00000 n
+0000455138 00000 n
+0000457936 00000 n
+0000461484 00000 n
+0000461640 00000 n
+0000459733 00000 n
+0000458336 00000 n
+0000458357 00000 n
+0000459710 00000 n
+0000461412 00000 n
+0000460028 00000 n
+0000460049 00000 n
+0000461389 00000 n
+0000467120 00000 n
+0000464431 00000 n
+0000467061 00000 n
+0000467184 00000 n
+0000464286 00000 n
+0000462135 00000 n
+0000464263 00000 n
+0000466903 00000 n
+0000466831 00000 n
+0000464654 00000 n
+0000464675 00000 n
+0000466748 00000 n
+0000466725 00000 n
+0000471561 00000 n
+0000471625 00000 n
+0000471689 00000 n
+0000471753 00000 n
+0000471817 00000 n
+0000471881 00000 n
+0000471945 00000 n
+0000472009 00000 n
+0000472073 00000 n
+0000472136 00000 n
+0000472200 00000 n
+0000472263 00000 n
+0000479351 00000 n
+0000471502 00000 n
+0000472327 00000 n
+0000470863 00000 n
+0000467339 00000 n
+0000470840 00000 n
+0000471026 00000 n
+0000471184 00000 n
+0000471343 00000 n
+0000727600 00000 n
+0000479415 00000 n
+0000479479 00000 n
+0000479543 00000 n
+0000479607 00000 n
+0000479671 00000 n
+0000479735 00000 n
+0000479292 00000 n
+0000479799 00000 n
+0000476807 00000 n
+0000472490 00000 n
+0000476784 00000 n
+0000477069 00000 n
+0000477227 00000 n
+0000477386 00000 n
+0000477545 00000 n
+0000477705 00000 n
+0000477864 00000 n
+0000478022 00000 n
+0000478182 00000 n
+0000478341 00000 n
+0000478500 00000 n
+0000478659 00000 n
+0000478817 00000 n
+0000478976 00000 n
+0000479134 00000 n
+0000484311 00000 n
+0000484370 00000 n
+0000489390 00000 n
+0000486979 00000 n
+0000484194 00000 n
+0000484429 00000 n
+0000483387 00000 n
+0000479949 00000 n
+0000483364 00000 n
+0000483559 00000 n
+0000483719 00000 n
+0000483877 00000 n
+0000484036 00000 n
+0000489331 00000 n
+0000489517 00000 n
+0000486855 00000 n
+0000484580 00000 n
+0000486832 00000 n
+0000489259 00000 n
+0000487202 00000 n
+0000487223 00000 n
+0000489236 00000 n
+0000490483 00000 n
+0000490542 00000 n
+0000490359 00000 n
+0000489658 00000 n
+0000490337 00000 n
+0000508315 00000 n
+0000508256 00000 n
+0000508374 00000 n
+0000492490 00000 n
+0000490641 00000 n
+0000492467 00000 n
+0000493481 00000 n
+0000493637 00000 n
+0000493793 00000 n
+0000493948 00000 n
+0000494104 00000 n
+0000494260 00000 n
+0000494416 00000 n
+0000494572 00000 n
+0000494727 00000 n
+0000494883 00000 n
+0000495039 00000 n
+0000495194 00000 n
+0000495350 00000 n
+0000495506 00000 n
+0000495662 00000 n
+0000495818 00000 n
+0000495973 00000 n
+0000496128 00000 n
+0000496284 00000 n
+0000496440 00000 n
+0000496595 00000 n
+0000496750 00000 n
+0000496906 00000 n
+0000497062 00000 n
+0000497217 00000 n
+0000497373 00000 n
+0000497529 00000 n
+0000497684 00000 n
+0000497838 00000 n
+0000497994 00000 n
+0000498150 00000 n
+0000498305 00000 n
+0000498459 00000 n
+0000498614 00000 n
+0000498770 00000 n
+0000498926 00000 n
+0000499082 00000 n
+0000499238 00000 n
+0000499394 00000 n
+0000499549 00000 n
+0000499704 00000 n
+0000499860 00000 n
+0000500016 00000 n
+0000500171 00000 n
+0000500325 00000 n
+0000500481 00000 n
+0000500636 00000 n
+0000500790 00000 n
+0000500946 00000 n
+0000501102 00000 n
+0000501258 00000 n
+0000501414 00000 n
+0000501569 00000 n
+0000501725 00000 n
+0000501880 00000 n
+0000502035 00000 n
+0000502191 00000 n
+0000502347 00000 n
+0000502503 00000 n
+0000502659 00000 n
+0000502814 00000 n
+0000502970 00000 n
+0000503126 00000 n
+0000503281 00000 n
+0000503435 00000 n
+0000503589 00000 n
+0000503745 00000 n
+0000503901 00000 n
+0000504056 00000 n
+0000504212 00000 n
+0000504368 00000 n
+0000504524 00000 n
+0000504679 00000 n
+0000504835 00000 n
+0000504991 00000 n
+0000505147 00000 n
+0000505302 00000 n
+0000505458 00000 n
+0000505614 00000 n
+0000505770 00000 n
+0000505924 00000 n
+0000506080 00000 n
+0000506236 00000 n
+0000506391 00000 n
+0000506547 00000 n
+0000506703 00000 n
+0000506858 00000 n
+0000507014 00000 n
+0000507169 00000 n
+0000507325 00000 n
+0000507481 00000 n
+0000507636 00000 n
+0000507790 00000 n
+0000507946 00000 n
+0000508102 00000 n
+0000517183 00000 n
+0000517242 00000 n
+0000509647 00000 n
+0000508473 00000 n
+0000509624 00000 n
+0000510188 00000 n
+0000510343 00000 n
+0000510499 00000 n
+0000510653 00000 n
+0000510809 00000 n
+0000510965 00000 n
+0000511121 00000 n
+0000511276 00000 n
+0000511432 00000 n
+0000511588 00000 n
+0000511743 00000 n
+0000511897 00000 n
+0000512053 00000 n
+0000512209 00000 n
+0000512364 00000 n
+0000512518 00000 n
+0000512674 00000 n
+0000512830 00000 n
+0000512985 00000 n
+0000513141 00000 n
+0000513297 00000 n
+0000513453 00000 n
+0000513607 00000 n
+0000513762 00000 n
+0000513917 00000 n
+0000514073 00000 n
+0000514226 00000 n
+0000514382 00000 n
+0000514538 00000 n
+0000514693 00000 n
+0000514849 00000 n
+0000515005 00000 n
+0000515161 00000 n
+0000515317 00000 n
+0000515472 00000 n
+0000515628 00000 n
+0000515784 00000 n
+0000515940 00000 n
+0000516094 00000 n
+0000516250 00000 n
+0000516406 00000 n
+0000516561 00000 n
+0000516717 00000 n
+0000516872 00000 n
+0000517028 00000 n
+0000727725 00000 n
+0000517468 00000 n
+0000518002 00000 n
+0000523960 00000 n
+0000523983 00000 n
+0000524006 00000 n
+0000524029 00000 n
+0000524051 00000 n
+0000524084 00000 n
+0000524487 00000 n
+0000525025 00000 n
+0000528107 00000 n
+0000528130 00000 n
+0000528152 00000 n
+0000528175 00000 n
+0000528197 00000 n
+0000528232 00000 n
+0000528581 00000 n
+0000529146 00000 n
+0000534272 00000 n
+0000534295 00000 n
+0000534318 00000 n
+0000534341 00000 n
+0000534363 00000 n
+0000534396 00000 n
+0000534985 00000 n
+0000535527 00000 n
+0000541891 00000 n
+0000541914 00000 n
+0000541937 00000 n
+0000541960 00000 n
+0000541982 00000 n
+0000542014 00000 n
+0000542386 00000 n
+0000542920 00000 n
+0000554048 00000 n
+0000554072 00000 n
+0000554095 00000 n
+0000554118 00000 n
+0000554140 00000 n
+0000554172 00000 n
+0000554694 00000 n
+0000555231 00000 n
+0000562374 00000 n
+0000562397 00000 n
+0000562420 00000 n
+0000562443 00000 n
+0000562465 00000 n
+0000562498 00000 n
+0000562901 00000 n
+0000563447 00000 n
+0000566289 00000 n
+0000566312 00000 n
+0000566334 00000 n
+0000566357 00000 n
+0000566379 00000 n
+0000566411 00000 n
+0000566766 00000 n
+0000567300 00000 n
+0000575768 00000 n
+0000575791 00000 n
+0000575814 00000 n
+0000575837 00000 n
+0000575859 00000 n
+0000575891 00000 n
+0000576372 00000 n
+0000576909 00000 n
+0000589514 00000 n
+0000589538 00000 n
+0000589561 00000 n
+0000589585 00000 n
+0000589607 00000 n
+0000589638 00000 n
+0000590184 00000 n
+0000590729 00000 n
+0000594974 00000 n
+0000594997 00000 n
+0000595019 00000 n
+0000595042 00000 n
+0000595064 00000 n
+0000595095 00000 n
+0000595478 00000 n
+0000596015 00000 n
+0000600450 00000 n
+0000600473 00000 n
+0000600495 00000 n
+0000600518 00000 n
+0000600540 00000 n
+0000600571 00000 n
+0000600956 00000 n
+0000601496 00000 n
+0000610998 00000 n
+0000611021 00000 n
+0000611044 00000 n
+0000611067 00000 n
+0000611089 00000 n
+0000611122 00000 n
+0000611569 00000 n
+0000612104 00000 n
+0000617662 00000 n
+0000617685 00000 n
+0000617708 00000 n
+0000617731 00000 n
+0000617753 00000 n
+0000617785 00000 n
+0000618160 00000 n
+0000618705 00000 n
+0000623202 00000 n
+0000623225 00000 n
+0000623248 00000 n
+0000623271 00000 n
+0000623293 00000 n
+0000623326 00000 n
+0000623769 00000 n
+0000624304 00000 n
+0000637322 00000 n
+0000637346 00000 n
+0000637369 00000 n
+0000637393 00000 n
+0000637415 00000 n
+0000637448 00000 n
+0000637895 00000 n
+0000638429 00000 n
+0000643323 00000 n
+0000643346 00000 n
+0000643368 00000 n
+0000643391 00000 n
+0000643413 00000 n
+0000643446 00000 n
+0000643809 00000 n
+0000644343 00000 n
+0000661749 00000 n
+0000661773 00000 n
+0000661796 00000 n
+0000661820 00000 n
+0000661842 00000 n
+0000661875 00000 n
+0000662595 00000 n
+0000663132 00000 n
+0000682890 00000 n
+0000682914 00000 n
+0000682937 00000 n
+0000682961 00000 n
+0000682983 00000 n
+0000683015 00000 n
+0000683747 00000 n
+0000684286 00000 n
+0000699173 00000 n
+0000699197 00000 n
+0000699220 00000 n
+0000699244 00000 n
+0000699266 00000 n
+0000699299 00000 n
+0000699855 00000 n
+0000700392 00000 n
+0000704397 00000 n
+0000704420 00000 n
+0000704442 00000 n
+0000704465 00000 n
+0000704487 00000 n
+0000704521 00000 n
+0000704871 00000 n
+0000705406 00000 n
+0000710753 00000 n
+0000710776 00000 n
+0000710799 00000 n
+0000710822 00000 n
+0000710844 00000 n
+0000710877 00000 n
+0000711273 00000 n
+0000711812 00000 n
+0000725143 00000 n
+0000725167 00000 n
+0000725190 00000 n
+0000725214 00000 n
+0000725236 00000 n
+0000725269 00000 n
+0000727805 00000 n
+0000727925 00000 n
+0000728046 00000 n
+0000728172 00000 n
+0000728255 00000 n
+0000736910 00000 n
+0000743339 00000 n
+0000743380 00000 n
+0000743420 00000 n
+0000743601 00000 n
+trailer
+<<
+/Size 2139
+/Root 2137 0 R
+/Info 2138 0 R
+>>
+startxref
+743808
+%%EOF
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.tex
new file mode 100644
index 00000000000..271daa7758c
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/t1lib_doc.tex
@@ -0,0 +1,98 @@
+%----------------------------------------------------------------------------
+% ----- File: t1lib_doc.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2005-05-18
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library Lincense. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the toplevel
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independ from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+\documentclass[11pt,a4paper]{article}
+\usepackage[english]{babel}
+\usepackage{makeidx}
+\topmargin-1cm
+\oddsidemargin0cm
+\textwidth16cm
+\textheight24cm
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Added by NGUYEN-DAI Quy and edited by RMz)
+%%
+%% - Adapted to recent TeX developments according to suggestions
+%% of Reinhard Kotucha, a well-known TeX-Guru (2004-11-27, RMz)
+%%
+\ifx\pdfoutput\undefined\chardef\pdfoutput=0 \fi
+\ifcase\pdfoutput
+ \usepackage{graphicx}
+\or
+ \usepackage{graphicx}
+ \usepackage[a4paper,pageanchor,hyperfigures,breaklinks,%
+ colorlinks,citecolor=blue,urlcolor=red,linkcolor=magenta]{hyperref}
+ \pdfcompresslevel=9
+\fi
+\setcounter{tocdepth}{3}
+\setcounter{secnumdepth}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%--- Some definitions
+\def\tonelib{{\mdseries\ttfamily t1lib}}\relax
+\def\libversion{5.1.0}\relax
+\def\libdate{Mai, 18, 2005}\relax
+\def\precorr{\par\vbox\bgroup}\relax
+\def\postcorr{\unskip\vskip-2mm\hrule
+\vbox to 0pt{\kern-17.7pt\parskip0pt\noindent\llap{\fbox{$\mathcal{F}()\Rightarrow$}\kern0pt}\vss}
+\vskip3mm\egroup\noindent}\relax
+\makeindex
+%
+%- hyphenation exceptions:
+\hyphenation{bit-maps bit-map}
+%
+\begin{document}
+\thispagestyle{empty}
+\begin{center}
+\leavevmode
+\vskip2cm
+{\Huge\bfseries T1Lib}\\[5mm]
+
+{\Large\sl Version \libversion\ -- \libdate}\\[2.5cm]
+
+{\LARGE\bf A Library for Generating}\\[5mm]
+{\LARGE\bf Character Bitmaps from}\\[5mm]
+{\LARGE\bf Adobe Type 1 Fonts}\\[2cm]
+{\Large\sc Rainer Menzner}\\[2mm]
+\end{center}
+\newpage
+\tableofcontents
+%-- Introduction
+\input intro.tex
+%-- Getting started
+\input getstart.tex
+%-- Program xglyph
+\input xglyph.tex
+%-- Program type1afm
+\input type1afm.tex
+%-- Using t1lib
+\input ut1lib.tex
+%-- X11-Interface
+\input xinterface.tex
+%-- Internals
+\input internals.tex
+%-- Print an alphabetically sorted function index
+\def\indexname{Function Index\addcontentsline{toc}{section}{\hskip1emFunction Index}}%
+\printindex
+\end{document}
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/type1afm.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/type1afm.tex
new file mode 100644
index 00000000000..9b43561d42a
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/type1afm.tex
@@ -0,0 +1,53 @@
+%----------------------------------------------------------------------------
+% ----- File: type1afm.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2001-04-01
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library Lincense. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the toplevel
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independ from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+
+\newpage
+\section{The Program {\ttfamily type1afm}}
+\label{type1afm}%
+\verb+type1afm+ is a simple commandline tool (about 150 lines C source
+code) that allows to generate an AFM file from a Type 1 font
+program. It is intended for people who want to use Type 1 font files
+that come without AFM files with \tonelib\ (or other software that
+requires AFM files). The syntax is \\[0.5cm]
+\verb+type1afm [-l] <fontfile1> [<fontfile2> <fontfile3> ...] +\\[0.5cm]
+For each fontfile specified on the commandline, an AFM file with the
+corresponding name is generated in the current directory.
+Most of the work is done in \tonelib-internal functions. See section
+\ref{missingafmfiles} on how AFM information is generated and written
+to files.
+
+It is usually not desireable to leave a logfile wherever the utility
+has been executed. Thus by default no logfile is generated. This
+behaviour can be changed by specifying the optional parameter
+\verb+-l+. This causes a logfile with \verb+T1LOG_DEBUG+ as loglevel
+to be written to the disk. Its name will be \verb+t1lib.log+ (see
+\ref{logfile}).
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "t1lib_doc"
+%%% End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/ut1lib.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/ut1lib.tex
new file mode 100644
index 00000000000..b0fd2b42fe0
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/ut1lib.tex
@@ -0,0 +1,4083 @@
+%----------------------------------------------------------------------------
+% ----- File: ut1lib.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2005-05-18
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library License. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the top level
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independ from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+
+\newpage
+\section{Using \tonelib}
+This section describes in detail how to use \tonelib. I have tried to
+to describe the stuff in the order a new user would learn best and a new user
+would need to use the functions.
+
+
+\subsection{Compiling and Linking \tonelib-Programs}
+\label{compilingprograms}%
+A program that wants to use functions from the library must include
+the appropriate headers at compile time and then be linked with the
+appropriate libraries. Since V. 0.6-beta the X11 interface is separated
+from the \tonelib\ pivotal stuff. This yields advantages for programs that
+don't use the X11 rastering functions on systems where X11 is
+installed.
+The following applies to programs that do not use the X11 rastering
+functions:
+\begin{itemize}
+\item Include the file \verb+t1lib.h+. All definitions and declarations
+ needed at compile time are included in this file.
+\item \verb+libt1.a+ or \verb+libt1.so+ respectively must be linked to the
+ program.
+\end{itemize}
+In contrast, a program that uses the X11 interface must adhere to the
+following scheme:
+\begin{itemize}
+\item \verb+t1lib.h+ and \verb+t1libx.h+ must be included in this
+ order. Furthermore, \verb+t1libx.h+ includes \verb+X11/Xlib.h+ if
+ it is not already included.
+\item The libraries \verb+libt1.a+/\verb+libt1.so+ and
+ \verb+libt1x.a+/\verb+libt1x.so+ must be linked to the executable.
+ The correct order is \verb+-lt1x -lt1+ since the X interface uses
+ functions from the latter. Also, the X11 library must appear in the
+ library list after \verb+-lt1x+.
+\end{itemize}
+The Makefiles for \verb+xglyph+ and \verb+type1afm+ are typical
+examples for both configurations.
+
+
+\subsection{Querying and Setting Fundamental Configuration Parameters of \tonelib}
+\label{queryconfiguration}%
+It might be necessary to know whether \tonelib\ is compiled with or without
+X11 interface. At compile time a programmer can check for the X11 interface by
+stating
+\begin{verbatim}
+#ifdef T1LIB_X11_SUPPORT
+\end{verbatim}
+after including \verb+t1libx.h+. If \verb+T1LIB_X11_SUPPORT+ is not defined,
+the X11 interface is not configured and compiled.
+
+At runtime, a program can check for the X11 interface by a call to
+\precorr
+\begin{verbatim}
+ int T1_QueryX11Support( void)
+\end{verbatim}\index{\verb+T1_QueryX11Support()+}\postcorr
+It returns \verb+1+ if the X11 interface is present and \verb+0+ otherwise.
+
+Notice that querying X11 support at runtime and compile time tends to
+be pretty useless starting with V.~0.6-beta. Any decision can be done
+by examining the existence of the \verb+t1x+-library and the
+\verb+t1libx.h+ header file. The definition and the function described
+above are thus only provided for compatibility with pre-0.6 versions
+of \tonelib.
+
+Some remarks on the general data format of bitmaps and should be given
+here. \tonelib\ internally always generates bitmaps in the way that appears to
+be natural for them: The first pixel corresponds to the least significant bit
+in a byte (or word/longword). Bytes are always arranged in memory the way,
+that the first byte is at the lowest address and the next byte at the
+following address. This convention is called LSBFirst which stands for Least
+Significant Bit/Byte First. It is the natural way of data alignment on
+machines with {\em Little Endian} data representation. In contrast MSBFirst
+stands for Most Significant Bit/Byte First which is the natural kind of data
+representation on Big Endian machines.
+A glyph's scanlines are always aligned in LSBFirst-type, no matter on what
+machine \tonelib\ is running.
+
+What has been said above, strictly does only apply to non antialiased glyphs,
+i.e., real bitmaps. Antialiased glyphs have their gray values coded in the
+representation that is natural for the machine \tonelib\ is running on. For
+example, if \tonelib\ runs on a Big Endian machine, the gray values are in Big
+Endian. The X11 displaying functions automatically handle this correct.
+
+Scanlines of \tonelib-glyphs may be padded to 8, 16 or 32 bit. Padding to
+higher values will consume more memory for the glyphs, but might speed up
+concatenating of bitmaps as described in \ref{generatingbitmaps}. This applies
+to machines with Little Endian representation as, for example, Intel's
+$x$86 series. On these machines 16 or 32 bits can be placed into the
+target bitmap in one step. On machines with Big Endian representation, for
+example, Motorola 680$x$0 series, this is currently not possible. However,
+using a higher padding value could still yield a better performance since the
+application could work on larger units than a byte.
+
+The default padding value in \tonelib\ is 8 bit. The padding value can be
+specified at runtime by means of calling
+\precorr
+\begin{verbatim}
+ int T1_SetBitmapPad( int pad)
+\end{verbatim}\index{\verb+T1_SetBitmapPad()+}\postcorr
+\verb+pad+ must be one of `8', `16' or `32'. The call will only be successful
+if executed before initialization of \tonelib. This a security mechanism which
+prevents from having glyphs with distinct padding values. The return value is
+0 if successful and -1 if \verb+pad+ was invalid or \tonelib\ had already been
+initialized.
+
+There is a further restriction concerning the padding value. Setting it to 32
+is only possible if the machine has an ANSI C integer type of 64 bits. This
+condition is automatically checked by the \verb+configure+ script of \tonelib.
+If such an integer type is not present (or has to be emulated as e.g.\
+\verb+long long+ in \verb+gcc+) there would not result any performance gain.
+If a specified padding value is rejected, \verb+T1_errno+ is set
+appropriately.
+
+An application can query the current padding value by calling
+\precorr
+\begin{verbatim}
+ int T1_GetBitmapPad( void)
+\end{verbatim}\index{\verb+T1_GetBitmapPad()+}\postcorr
+The returned value is the padding value. This function can be called before or
+after initialization of \tonelib.
+
+Another function usually be called near
+initialization is
+\precorr
+\begin{verbatim}
+ int T1_SetDeviceResolutions(float x_res, float y_res)
+\end{verbatim}\index{\verb+T1_SetDeviceResolutions()+}\postcorr
+This function allows setting the resolution of
+your device (screen). The values must be given in dpi. The default
+resolution, 72 dpi, implies that a pixel in device space equals 1
+bp. This function may be called before or after initialization. The
+only restriction is that no size dependent data must be
+available. Changing the resolution when bitmaps are already cached would
+result in inconsistent bitmap-sizes for bitmaps generated before and
+after the call to \verb+T1_SetDeviceResolutions()+.
+The function checks whether initialization has already been done. If
+not, all is OK since no size-dependent data for any font can exist. If
+initialization has been done, it checks for every font whether size
+dependent data exists. If there's any size dependent data for any
+font, \verb+T1_SetDeviceResolutions()+ will return \verb+-1+ without
+having set the new resolution. Otherwise the specified resolution will
+be set and the function will return \verb+0+.
+If you really need to set
+another resolution in the middle of a session, all size-specific data
+should explicitly be removed from memory beforehand. This can be
+achieved using \verb+T1_DeleteAllSizes()+ (see \ref{deletingdata}).
+
+Notice that the device resolution need not be set at all if the default
+resolution of 72 dpi in horizontal and vertical direction is OK. This function
+is primarily intended to be prepared for applications with a device aspect
+ratio different from 1.
+
+\subsection{Initialization of \tonelib\ and Related Things}
+\label{initialization}%
+In this section we should cover the initialization, part of which has already
+been described in \ref{runtimesetup} in some more detail. This gives the user
+the chance to fine-tune the initialization for specific applications.
+
+Prior to be able to do anything useful with \tonelib, the library has to be
+initialized. Generally speaking, the purpose of the initialization is to tell
+\tonelib\ which font files are associated with which font ID's. The existence
+or accessibility of the font files is also assured at this point. Hence, file
+name search paths for Type 1 font files, AFM files and encoding files have
+also to be known at this time.
+
+The configuration file and the font database file play a central r\^ole
+during initialization. While the configuration file contains path
+specifications and a font database specification, the font database file
+specifies the relation between font ID's and font filenames.
+The format of both these files is described in \ref{runtimesetup} and not
+repeated here.
+
+A further purpose of the initialization is to set certain flags that prevent
+other quantities from being modified at a later time. For example, the padding
+value must be unique to all glyphs and consequently it is not allowed to be
+changed after initialization has been performed.
+
+The initialization is started by a call to the function
+\precorr
+\begin{verbatim}
+ void *T1_InitLib( int log)
+\end{verbatim}\index{\verb+T1_InitLib()+}\postcorr
+The parameter \verb+log+ can be interpreted as a mode specification that
+influences certain parts of the initialization. In fact it should consist of
+one or more \verb+#define+s from \verb+t1lib.h+. At minimum, \verb+log+
+should be either \verb+LOGFILE+ or \verb+NO_LOGFILE+. If \verb+LOGFILE+ is
+specified, a log file is written while the application runs, and
+\verb+NO_LOGFILE+ suppresses the generation of a logfile. For information the
+\tonelib-logfile see \ref{logfile}. In addition to this,
+\verb+IGNORE_CONFIGFILE+ and \verb+IGNORE_FONTDATABASE+ can be bitwise OR'ed
+(using ``\verb+|+'') to the \verb+log+-value. The purpose of this is described
+later in this section. A further flag that might find its way into the value
+of \verb+log+ is \verb+T1_AA_CACHING+. A discussion of this topic is given in
+\ref{aacaching}.
+The \verb+T1_NO_AFM+ completely suppresses usage of AFM data, no matter if an
+AFM file could have been found using the current search paths or not. This
+saves time for loading a font and is recommended if an application is known to
+be restricted on functions that do not access AFM data. The consequences of
+using this flag are covered somewhat more detailed in \ref{generatingafminfo}.
+
+
+\subsubsection{Standard Initialization}
+\label{standardinitialization}%
+The term ``standard initialization'' means, that none of the path manipulating
+and font database manipulating actions described later has been
+performed. Also, a standard initialization excludes the use of
+\verb+IGNORE_CONFIGFILE+ and \verb+IGNORE_FONTDATABASE+. If these conditions
+are met, the following happens at initialization time:
+\begin{enumerate}
+\item The padding value, either being the default value or a value specified
+ by the user before, is assigned.
+\item Next, depending on the value of \verb+log+, a logfile is tried to be
+ opened. From this point on, depending on the loglevel and the value of
+ \verb+log+ the actions are logged.
+\item The endianess of the machine \tonelib\ is running on is checked.
+\item A configuration file is searched in the following order:
+ \begin{itemize}
+ \item The process' environment is checked for the entry \verb+T1LIB_CONFIG+
+ and if found, its value is interpreted as the filename of the configuration
+ file (see \ref{runtimesetup}).
+ \item If no file was found, the user's home directory is searched for a file
+ named \verb+.t1librc+. In case it exists, it is used as a
+ \tonelib-configuration file.
+ \item If still no configuration file was found, the global configuration
+ file will be tried to be opened.
+ \item If this also does not succeed, all file search paths are left to be
+ ``.'' and the default font database is \verb+FontDataBase+.
+ \end{itemize}
+ It should be noted that the first match wins when searching the configuration
+ file. Only the first one found is examined.
+\item The font database file(s) are tried to be opened and read. This process
+ is in detail described in \ref{fontdatabase}.
+
+ If after scanning the complete list of font databases, no font definitions
+ have been performed, \verb+T1_InitLib()+ will return with a \verb+NULL+
+ pointer indicating the initialization has failed.
+\item The number of fonts declared in the database is stored. Note that this
+ number of declared fonts must be greater than zero.
+\item A flag is set to indicate \tonelib\ is initialized and the pointer to
+ the top most area of the global data structures is returned to the
+ application. This pointer is guaranteed to be not \verb+NULL+.
+\end{enumerate}
+For some applications, the described initialization scheme appears to be too
+inflexible and overkill. It is well suited for large applications that use
+lots of fonts and where it should be possible to add new fonts without
+modifying the application itself. For small commandline applications like
+\verb+type1afm+ (see \ref{type1afm}), which are designed to read a few font file
+names from the commandline, the overhead in configuration file searching and
+path reading is much too large. Moreover, to insist on a font database file
+might grow to a real disadvantage. In the subsequent paragraphs we should thus
+discuss how we can deviate from the initialization scheme described above.
+
+\subsubsection{Fine Control over Font Databases and File Search Paths}
+\label{manipulatingpaths}%
+First, it is important to mention that it is generally possible to force
+\verb+T1_InitLib()+ to skip steps 4 and / or 5 as described above.
+
+The configuration file is discarded by OR'ing the parameter \verb+log+ of
+\verb+T1_InitLib()+ with \verb+IGNORE_CONFIGFILE+.
+The default paths or the paths explicitly specified by the application before
+are then left untouched during initialization.
+
+Discarding the font database specification from the configuration file is
+achieved by bitwise OR'ing \verb+log+ with \verb+IGNORE_FONTDATABASE+. The
+result after initialization will be an empty database. This is valid in V.\
+0.5 and newer since fonts may be added to the database at runtime.
+
+Using the two flags described above, an installed setup can be ignored and an
+application may have complete control over its search paths. There are a
+number of functions for this purpose and each of these functions allows to
+specify exactly {\em one} path element at a given time. Using special
+characters like white space or path separators in a path element is thus not
+an issue.
+
+The font database may explicitly be specified by the
+application using \precorr
+\begin{verbatim}
+ int T1_SetFontDataBase( char *filename)
+\end{verbatim}\index{\verb+T1_SetFontDataBase()+}\postcorr
+\verb+filename+ is the pointer to a string containing the name of the font
+database file that is to be examined. This function replaces any set of font
+databases setup previously and is thus usually to be called before
+\verb+T1_InitLib()+. A call to this function after initialization will return
+the result -1 and \verb+T1_errno+ will be set to
+\verb+T1ERR_OP_NOT_PERMITTED+. For the special case that the font database is
+still epmty after initialization this function may also be called after
+initialization. But in any case, the database must be empty! For the latter
+cases, fonts specified in the new database file are then immediately inserted
+into the database. In case of success, the number of available fonts is returned.
+
+There is also the function \precorr
+\begin{verbatim}
+ int T1_AddFontDataBase( int mode, char *filename)
+\end{verbatim}\index{\verb+T1_AddFontDataBase()+}\postcorr
+It can be called at any time and \verb+filename+ is the string of the new font
+database's file name. If called before initialization, the parameter
+\verb+mode+ can be either \verb+T1_APPEND_PATH+ or \verb+T1_PREPEND_PATH+ and
+the name of the new font database simply is either appended or prepended to
+the existing list of font databases. Then, the function returns $0$.
+
+If the function is called after initialization, the parameter \verb+mode+ is
+ignored and the new database is appended in any case, because this is the only
+meaningful action. Furthermore, the new database is immediately loaded and the
+function returns a number indicating the number of available fonts
+(which can also be 0). In the case of an error, \verb+T1_AddFontDataBase()+
+returns $-1$.
+
+There is also a pair of functions that act on the list of XLFD font database
+files,
+\precorr
+\begin{verbatim}
+ int T1_SetFontDataBaseXLFD( char *filename)
+\end{verbatim}\index{\verb+T1_SetFontDataBaseXLFD()+}\postcorr
+\precorr
+\begin{verbatim}
+ int T1_AddFontDataBaseXLFD( char *filename)
+\end{verbatim}\index{\verb+T1_AddFontDataBaseXLFD()+}\postcorr
+These functions have exactly the same syntax and semantics as the functions
+just described above. Standard font database files and XLFD font database
+files are handled in separate lists internally, so that setting the XLFD font
+database will not affect explicit standard font database settings. However,
+the default standard font database (\verb+./FontDataBase+) will be cleared
+when at least one XLFD font database is specified. This is because the default
+font database is meant as a fallback, and the fallback case is no longer given
+if a XLFD font database has been specified.
+
+A similar manipulation as just described for font database files, is
+possible for the searchpaths. (Re-)Defining a search
+path is done by calling
+\precorr
+\begin{verbatim}
+ int T1_SetFileSearchPath( int type, char *pathname)
+\end{verbatim}\index{\verb+T1_SetFileSearchPath()+}\postcorr
+before calling \verb+T1_InitLib()+, or respectively, before the database
+contains any fonts. An attempt to set the file searchpaths when the database
+is no longer empty is denied. The reason is that it is not wise to override
+the searchpaths which had been valid previously during the verification of the
+existence of font files. Such paths should thus not be removed. The parameter
+\verb+pathname+ points to the string that contains the pathname that should be
+used as searchpath. The parameter \verb+type+ is any OR'ed combination of
+\verb+T1_PFAB_PATH+, \verb+T1_AFM_PATH+ and \verb+T1_ENC_PATH+. These tell the
+function to set the search paths for Type 1 font files, AFM files and encoding
+files, respectively. In case of an error \verb+-1+ is returned and otherwise
+\verb+0+.
+
+Extending the file searchpaths before {\em and} after initialization
+is possible using
+\precorr
+\begin{verbatim}
+ int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname)
+\end{verbatim}\index{\verb+T1_AddToFileSearchPath()+}\postcorr
+This might be useful to locate font files that were of no interest
+at the time of initialization.
+\verb+pathname+ is the pointer to the string that should be added to the
+searchpaths. Only {\em one} particular path element may be specified in one
+call. What searchpaths are affected is determined by the parameter
+\verb+pathtype+. Again, similar to described above, any
+OR'ed combination of \verb+T1_PFAB_PATH+, \verb+T1_AFM_PATH+ and
+\verb+T1_ENC_PATH+ is valid. There are two ways to extend an existing
+searchpath which are specified by the \verb+mode+ parameter. It must be either
+\verb+T1_APPEND_PATH+ or \verb+T1_PREPEND_PATH+, which causes the new path
+element to be appended or prepended to the existent path respectively.
+Since an existent path specification is not overwritten by
+\verb+T1_AddToFileSearchPath()+, this function may be called at any time
+before or after initialization.
+
+It might also be of interest to query the current file search
+paths and font databases. \tonelib\ provides
+\precorr
+\begin{verbatim}
+ char *T1_GetFileSearchPath( int type)
+\end{verbatim}\index{\verb+T1_GetFileSearchPath()+}\postcorr
+for querying search paths. Again, the parameter \verb+type+ determines what
+search path is returned. Exactly one of \verb+T1_PFAB_PATH+,
+\verb+T1_AFM_PATH+, \verb+T1_ENC_PATH+ and \verb+T1_FDB_PATH+ should be
+specified. If more than one path is specified, the first match wins and only
+one path is returned. The types will be checked in the order
+\verb+T1_PFAB_PATH+, \verb+T1_AFM_PATH+, \verb+T1_ENC_PATH+ and
+\verb+T1_FDB_PATH+. Here, \verb+T1_FDB_PATH+ indicates an interest in the list
+of font databases. The paths are separated using the current path separator.
+
+
+\subsubsection{Adding Fonts to the Database}
+\label{addingfonts}%
+Extending the font database is possible at any time after initialization. In
+addition to using \verb+T1_AddFontDataBase()+ (see above), it is done via a
+call to \precorr
+\begin{verbatim}
+ int T1_AddFont( char *fontfilename)
+\end{verbatim}\index{\verb+T1_AddFont()+}\postcorr
+\verb+fontfilename+ is the pointer to the filename string. The following
+actions take place:
+\begin{itemize}
+\item The font file is searched using the current search path specifications.
+\item If the file has been located, it is checked whether the font database
+ contains enough memory to hose an additional font.
+ If so, the font filename
+ is stored and the function returns \verb+new_ID+, which is the font ID that
+ will be associated with this font in the future.
+\item If there was no free memory for an additional font, the memory is
+ reallocated to a greater size. This involves also resetting the new
+ area. Finally the value \verb+new_ID+ is returned.
+\end{itemize}
+If a negative value is returned the function failed. \verb+-1+ indicates the
+font file could not be located. \verb+-2+ or \verb+-3+ are returned if a
+memory allocation failure occurs.
+
+
+\subsubsection{Summary of Search Path Handling}
+
+Since the exact handling of search path specifications at the several stages
+may appear somewhat confusing we shall summarize the exact rules now:
+\begin{enumerate}
+\item {\bfseries Before Initialization}\\
+ Default paths are not yet setup. Each call of one of the \verb+T1_Set...()+
+ functions described above establishes a completely new respective path. Each
+ call of one of the \verb+T1_Add...()+ functions extends the respective path
+ in the desired manner, or creates a new respective path if previously no
+ path existed.
+\item {\bfseries At the Beginning of the Initialization}\\
+ Each path type for which a path had not already been explicitly created
+ using the\\ \verb+T1_Set...()+ or \verb+T1_Add...()+ functions receives a
+ default value. This is ``\verb+.+'' for the file search paths and
+ \verb+./FontDataBase+ for the font database.
+\item {\bfseries During Initialization}\\
+ Each path element read from the configuration file overwrites an existing
+ respective default path but preserves an existing respective explicitly
+ setup path by appending to the latter. The newly setup search path is used
+ to locate files while scanning the font database file(s).
+\item {\bfseries After Inititialization but before the Database is being
+ filled}\\
+ At this stage, all \verb+T1_Set...()+ and \verb+T1_Add...()+ functions still
+ work as described under~(1). Notice that this phase usually is not
+ accessible when using the standard initialization scheme. It only becomes
+ accessible if no fonts have been added during initialization.
+\item {\bfseries After at least one Font is insterted into the Database}\\
+ Once there are fonts in the database, the paths setup up
+ to now must be preserved in any case. Hence, the \verb+T1_Set...()+ may not
+ be called any longer. The \verb+T1_Add...()+ functions {\em extend} the
+ current set of search paths. In particular, possibly existing default search
+ path elements, then, are not overwritten any longer because they might have
+ been used before to verify the existance of required files.
+\end{enumerate}
+A call to \verb+T1_AddFontDataBase()+ will not only append the specified
+file name to the existing list of databases, but will also immediately
+locate the fonts specified therein and assign additional font IDs.
+
+
+\subsubsection{Bypassing the \tonelib\ File Search Machinery}
+\label{afmfilenames}%
+Usually, \tonelib\ takes care for locating files according to the path
+specifications in the configuration file. There might, however, arise the need
+to explicitly tell \tonelib\ which particular file to use. Forcing \tonelib\ to
+use particular Type 1 font files can be achieved using the function
+\verb+T1_AddFont()+, described just above. If a pathname passed to this
+function is a complete path, \tonelib\ will use this complete path to locate
+the font file, forgetting about its own search path list. A filename path is
+assumed to be complete if
+\begin{itemize}
+\item it starts with the directory separator character, usually
+ ``\verb+/+''. In this case it is an {\em absolute} path specification, meaning
+ that the start point is at the root of the filesystem, or
+\item if it starts with ``\verb+./+'' or ``\verb+../+'' (where it is assumed
+ that ``\verb+/+'' is the directory separator character). Here we have a {\em
+ relative} path specification in which ``\verb+.+'' refers to the current
+ working directory while ``\verb+..+'' refers to the parent directory of the
+ current working directory. Since the notion of the {\em current working
+ directory} is fundamental for every process that has access to a
+ filesystem, a relative path specification also uniquely identifies one
+ particular file in the filesystem.
+\end{itemize}
+If a font file whose complete path had been specified could not be found by
+\tonelib, the paths from the configuration file are searched as a fallback
+mechanism.
+
+What can be done for the Type 1 font files is also possible for AFM files,
+which are needed on a per-font basis. The function
+\precorr
+\begin{verbatim}
+ int T1_SetAfmFileName( int FontID, char *afm_name)
+\end{verbatim}\index{\verb+T1_SetAfmFileName()+}\postcorr
+allows to set the complete path of the AFM file belonging to the font
+identified by \verb+FontID+, overriding the internal
+search mechanism. This function is to be called after initialization but
+before the font \verb+FontID+ is loaded. It returns 0 if all goes right and
+$-1$ otherwise. In the latter case \verb+T1_errno+ will also be set
+appropriately. Notice that \verb+FontID+ must also be valid with respect to
+its upper limit, it is an error condition if the font database has less than
+\verb+FontID+ entries.
+
+There is also the function
+\precorr
+\begin{verbatim}
+ char *T1_GetAfmFileName( int FontID)
+\end{verbatim}\index{\verb+T1_GetAfmFileName()+}\postcorr
+which allows to query the AFM filename of a font. It returns a pointer to the
+filename if it had explicitly been specified or \verb+NULL+
+otherwise. \verb+NULL+ will also be returned if \verb+FontID+ was invalid. In
+this case also \verb+T1_errno+ will be set.
+
+Just for the sake of completeness we should mention that what has been said
+about absolute and relative path specification
+also applies to pathnames for encoding files (see \ref{encoding}).
+
+
+
+
+\subsection{The \tonelib-Logfile}
+\label{logfile}%
+Since version 0.2-beta \tonelib\ supports a runtime logfile.
+It implements an uncomplicated way to keep track of errors,
+warnings, statistics and debug messages without overloading stdout/stderr. As
+seen in \ref{initialization} the user must specify whether or not to use a
+logfile when calling \verb+T1_InitLib()+. Specifying \verb+LOGFILE+ as
+argument leads to using a logfile and \verb+NO_LOGFILE+ suppresses the use of a
+logfile.
+
+The name of this logfile is by default \verb+t1lib.log+. This name is defined
+in \verb+t1misc.h+ and can be changed there as the user likes.
+
+Basically \tonelib\ distinguishes 4 types of runtime messages. Each type is
+associated a ``loglevel'':
+\begin{itemize}
+\item {\sl Errormessages/Level1:}\/ They are considered that important that the user is
+ in any case informed. Example: During initialization the memory allocation for
+ one of the basic data structures of \tonelib\ failed.
+\item {\sl Warningmessages/Level2:}\/ They are considered important but it is not
+ absolutely necessary to inform the user. Example: An AFM file could not be
+ loaded for a given font. This imposes several restrictions on what can be
+ done with that font but it is possible to generate bitmaps.
+\item {\sl Infomessages/Level3:}\/ They do not indicate a problem. Rather, the user
+ is notified about some facts and statistics that might be of
+ interest. Example: After loading a font the consumption of virtual memory is
+ displayed.
+\item {\sl Debugmessages/Level4:}\/ These can be pointers, numerical data
+ etc. Example: Print out the pointers that point to the memory area where the
+ PostScript dictionaries for a font just loaded are located.
+\end{itemize}
+The decision what message to put into the logfile is done by examining the
+value of an integer variable whose values can be \verb+T1LOG_ERROR+ (=1),
+\verb+T1LOG_WARNING+ (=2), \verb+T1LOG_STATISTIC+ (=3) or \verb+T1LOG_DEBUG+
+(=4). All messages whose level is below or equal to this value are put into the
+logfile. The user may set this loglevel by calling
+\precorr
+\begin{verbatim}
+ void T1_SetLogLevel( int level)
+\end{verbatim}\index{\verb+T1_SetLogLevel()+}\postcorr
+The default value is \verb+T1LOG_WARNING+ which means that error and warning
+messages are stored in the logfile.
+
+If the usage of a logfile has been specified, \tonelib\ tries first to open
+it in the current directory. If this fails for some reason \tonelib\ tries
+to create it in the user's home directory. If this fails too, an error message
+is printed to stderr and no logfile is used.
+
+If the application programmer chose not to create a logfile, it would be hardly
+possible for a user to track down possible problems, e.g. in file
+searching. To overcome this disadvantage, the user may set an environment
+variable \verb+T1LIB_LOGMODE+ at runtime. This variable is evaluated by
+\tonelib\ when \verb+T1_InitLib()+ is called. If its value is one of the
+four strings \verb+logDebug+, \verb+logStatistic+ \verb+logWarning+ and
+\verb+logError+, the respective loglevel is set by \tonelib\ and a log file is
+created, even if the programmer chose not to do so. However, if the programmer
+had altered the log level after calling \verb+T1_InitLib()+, this cannot be
+catched by setting the environment variable. A log file is created anyhow so
+that at least error messages will be logged.
+
+The user himself may also put some messages into the logfile. This can be
+achieved using
+\precorr
+\begin{verbatim}
+ void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...)
+\end{verbatim}\index{\verb+T1_PrintLog()+}\postcorr
+where \verb+func_ident+ is a pointer to a string identifying the function that
+generates the message. \verb+msg_txt+ points to the text string to put
+out. The distinction between a function identifier and a message text is only
+formal, indicating the user should identify the function that generates the
+message.
+
+The string \verb+msg_txt+ may contain format character sequences, \verb+%..+ ,
+as known from the \verb+printf+- or \verb+scanf+ standard \verb+C+
+functions. In this case, the ellipses indicate that a variable list of further
+arguments may follow. The \verb+level+ specification works as
+described above: The message is only put out if the internal loglevel is
+equal or greater than \verb+level+.
+
+Here is a typical example of a log file after a (short)
+\verb+xglyph+-session in which the loglevel was set
+\verb+T1LOG_STATISTIC+. Among several informative messages of type S, also two
+messages of type W have been generated. They stem from trying to
+raster the character ``\ss'' which was not in the current encoding.
+\par\noindent
+{%
+\tiny
+\begin{verbatim}
+(S) (Mon Jul 14 18:27:34 1997) T1_InitLib(): Initialization started
+(S) (Mon Jul 14 18:27:34 1997) T1_InitLib(): Initialization succesfully finished
+(S) (Mon Jul 14 18:27:44 1997) T1_LoadFont(): VM for Font 0: 35132 bytes
+(S) (Mon Jul 14 18:27:44 1997) CreateNewFontSize(): New Size 100.000000 created for FontID 0 (antialias=0)
+(S) (Mon Jul 14 18:27:53 1997) CreateNewFontSize(): New Size 100.000000 created for FontID 0 (antialias=1)
+(S) (Mon Jul 14 18:27:53 1997) CreateNewFontSize(): New Size 200.000000 created for FontID 0 (antialias=0)
+(W) (Mon Jul 14 18:27:53 1997) T1_SetChar(): No black pixels found for character 223 from font 0, returning NULL
+(W) (Mon Jul 14 18:27:53 1997) T1_SetStringX(): T1_SetChar() returned NULL-pointer!
+(S) (Mon Jul 14 18:27:55 1997) T1_DeleteSize(): Size 200.000000 deleted for FontID 0 (antialias=0)
+(S) (Mon Jul 14 18:27:55 1997) T1_DeleteSize(): Size 100.000000 deleted for FontID 0 (antialias=0)
+(S) (Mon Jul 14 18:27:55 1997) T1_DeleteSize(): Size 100.000000 deleted for FontID 0 (antialias=1)
+\end{verbatim}
+}
+
+\subsection{Generating Bitmaps}
+\label{generatingbitmaps}%
+At this point, you are able to generate a bitmap.
+As said before, a character- or string-bitmap is given to the user as
+an object of type \verb+GLYPH+. We should briefly explain \verb+GLYPH+
+here. The type is defined by
+\begin{verbatim}
+typedef struct
+{
+ char *bits;
+ struct
+ {
+ int ascent;
+ int descent;
+ int leftSideBearing;
+ int rightSideBearing;
+ int advanceX;
+ int advanceY;
+ } metrics;
+ void *pFontCacheInfo;
+ unsigned long bpp;
+} GLYPH;
+\end{verbatim}
+\verb+bits+ is a pointer to the bitmap data. The
+bitmap is organized in lines, starting with the uppermost line.
+Each bitmap pixel is usually represented by one bit. If the width of
+the
+bitmap is not an integer multiple of 8, the lines are padded with
+zeros, so that each line starts at a byte boundary. Note that the
+bitmap has no margins taken into account. The bitmap occupies the
+minimum area the character needs to be painted.
+
+The bitmap pointer may also be
+the \verb+NULL+-pointer. In this case, the glyph contains no foreground
+pixels. The metrics of the corresponding glyph should be valid,
+though. Typically, this appears for the space character as well as in
+situations where an undefined or unencoded character had been substituted by
+the \verb+.notdef+-character within the rastering functions.
+
+Note that the \verb+pixmap+-entry which has been present in version 0.3-beta,
+has been removed with version 0.4-beta. See the discussion on the X11-interface
+in \ref{x11interface} for an explanation of this.
+
+The struct \verb+metrics+ contains metric information that is needed
+to position the character and to describe the character origin
+with respect to the bitmap. The members in detail:
+\begin{itemize}
+\item \verb+metrics.ascent+: describes how many lines the bitmap
+ ranges above the line $y=0$.
+\item \verb+metrics.descent+: describes how many lines the bitmap
+ ranges below the line $y=0$. Width below $y=0$ counts negative so that the
+ difference \verb+ascent+ $-$ \verb+descent+ is the
+ total height of the bitmap, the number of lines.
+\item \verb+metrics.leftSideBearing+: The amount of spacing between
+ the origin of a character and the x-coordinate of its leftmost
+ painted pixel. One could also name it ``left margin'' of the
+ character.
+\item \verb+metrics.rightSideBearing+: The horizontal difference between
+ the origin of a character and the x-coordinate of its rightmost
+ painted pixel. This definition stands in contrast to some other
+ interpretations of the right side bearing, where it is assumed as the
+ difference between the glyph's width and its right most pixel.
+\item \verb+metrics.advanceX+: The amount of position increment in
+ horizontal direction after this character
+ bitmap (or string bitmap) has been placed. It is almost always
+ larger than the bitmap width because most characters contain a
+ certain amount of margins. Note that this value is not suitable for internal
+ computations of character positions since it contains the horizontal
+ escapement rounded to the pixel grid. Using this value for such computations
+ leads to accumulating positioning errors.
+\item \verb+metrics.advanceY+: The amount of position increment in
+ vertical direction after this character
+ bitmap (or string bitmap) has been placed. Upper direction counts positive.
+\end{itemize}
+As seen, the width of the bitmap is given as the difference between
+\verb+rightSideBearing+ and \verb+leftSideBearing+ and the values
+\verb+metrics.leftSideBearing+, \verb+metrics.descent+,\\
+\verb+metrics.rightSideBearing+ and \verb+metrics.ascent+ effectively describe
+the bounding box of the glyph.
+
+The entry \verb+pFontCacheInfo+ is not currently used but will
+probably later when font caching is really
+implemented. Moreover, there's a certain chance that some other
+entry will be added in future releases.
+
+The member \verb+bpp+ is used to store the depth of the bitmap. For
+true bitmaps, it is always 1. See \ref{antialiasing} for an
+explanation.
+
+There are three basic functions which produce pointer to glyph objects. In
+order to generate the glyph for a single character you would use the
+function
+\precorr
+\begin{verbatim}
+ GLYPH *T1_SetChar( int FontID, char charcode,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_SetChar()+}\postcorr
+As in most other functions, \verb+FontID+ is a valid identification
+number of a font. It can range from 0 to $n-1$, where $n$ is number of
+fonts declared in the font database file.
+
+The second argument \verb+charcode+ determines the character that will
+be rasterized.
+As mentioned earlier, the encoding mechanism is used for
+accessing the output character. This means, if \verb+'A'+ is given as
+the character code, the machine representation of \verb+'A'+ is used
+as an index into the current encoding vector. In this encoding vector,
+the characters' name is looked up. Encoding vectors may be changed by
+the user (see \ref{encoding}).
+
+
+The parameter \verb+size+ is interpreted in Postscript's bigpoint-unit
+(bp). By default,
+1 bp equals one device pixel.
+
+\verb+transform+ specifies the transformation that will be applied to the
+character before rastering. If this pointer is \verb+NULL+, no transformation
+is used. Otherwise it should point to a valid \tonelib-transformation matrix.
+Please refer to \ref{transformations} for information on how to easily create
+\verb+T1_TMATRIX+ matrices.
+Hinting is only performed if the transformation is a pure rotation and if the
+the angle is one of 0, 90, 180 or 270 degrees. Otherwise font level and
+character level hinting information is ignored.
+
+Bitmaps of transformed characters are never saved in
+cache memory since I assume that they are rarely needed. The overhead
+to manage transformed characters in cache would be overkill and would
+significantly increase memory consuming. Anyhow, this would only work
+for some dedicated transformations.
+
+\verb+T1_SetChar()+ in fact does some more things than simply
+rastering the specified character:
+\begin{itemize}
+\item It checks whether the font in question is already loaded. If not,
+ it is loaded.
+\item If the size dependent data structures for the size in question
+ do not exist, it creates them and inserts them in the linked list of
+ size dependent data structures.
+\item It checks if the character is already existent in cache. If so,
+ it returns the data from cache.
+\end{itemize}
+
+Some words concerning memory management: The memory used by
+the \verb+GLYPH+-structure is static in this function. The memory
+required for the bitmap is also allocated by the function itself.
+This means, the user doesn't need to free any memory by
+himself. Every time \verb+T1_SetChar()+ is called, it starts by giving the
+memory needed for the last generated glyph free or respectively
+setting metric values to 0. Thus, do not free the
+returned glyph pointer since later \verb+T1_SetChar()+ will free
+memory that is no more allocated and probably used for some other purpose.
+If you really like to free the memory, set the pointer to \verb+NULL+
+afterwards.
+
+If an error occurs at some point, \verb+T1_SetChar()+ returns a
+NULL-pointer to the user.
+
+Frequently it is advantageous to raster a series of
+characters at once. This has the advantage that internal accuracy may
+be used and the overhead for the user is minimal. For such cases, the
+function
+\precorr
+\begin{verbatim}
+ GLYPH *T1_SetString( int FontID, char *string, int len,
+ long spaceoff, int modflag,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_SetString()+}\postcorr
+is provided.
+It can be considered an extended version of \verb+T1_SetChar()+. The
+same as said above applies to the arguments \verb+FontID+,
+\verb+size+ and \verb+transform+. But a few additional arguments are
+needed here.
+
+\verb+string+ is a series of bytes representing the indices into the current
+encoding vector.
+The \verb+len+-parameter is needed because we cannot imply that string
+is always an object like a string in C. For example, the Computer
+Modern Roman fonts contain the uppercase Greek Gamma (\char0) at
+position 0 in their internal encoding. In a string to be typeset the
+value 0 is thus a valid value and deserves no special
+treatment. Hence, we cannot not use the C-function \verb+strlen()+ to
+compute the length of the string. However, since in most usual encodings
+the special value 0 is not encoded (``\verb+.notdef+''), it makes
+sense to switch between
+standard situations and non-standard situations:
+\begin{itemize}
+\item If \verb+string+ is a string conforming with C-semantics,
+ \verb+len+ can be set to 0. Then, the length of the string is
+ internally computed.
+\item If \verb+string+ contains one or more control characters which make
+ processing impossible, the \verb+len+-value must be specified
+ explicitly.
+\end{itemize}
+
+The \verb+spaceoff+ parameter is important for word processing
+purposes. The value specified here is interpreted as an offset to the
+space width used during rastering. It is interpreted in charspace
+units, i.e., $1/1000$ bp. Every time a space character is requested,
+this amount of horizontal escapement is added to the natural
+spacewidth of the current font. Note that the space character itself
+is actually not rastered. All requests to the character with the
+charactername ``\verb+space+'' are caught by \tonelib\ and converted
+to a simple horizontal escapement. For computation of the resulting
+spacewidth, the width of the space-character is taken from the
+AFM data and merged with the specified offset, which may also be
+negative.\footnote{One consequence of this handling is, that---with a
+ little tricking---fonts that do not define a space character
+ themselves may be used for typesetting. This applies to the
+ dc-fonts, which only define a visible space, but no real space (see
+ \ref{fonts}).}
+
+The \verb+modflag+ argument may be used to specify some option to the
+rastering function. It is generally 0 or an OR'ed combination of the following
+names:
+\begin{itemize}
+\item \verb+T1_KERNING+: As the name implies, this argument
+ determines that pairwise kerning information from the AFM file is to be taken
+ into account during string rastering. Not specifying \verb+T1_KERNING+
+ means: ``omit kerning''. It is generally
+ recommended to use kerning information since this improves the optical
+ appearance. However, many lower quality fonts do not have kerning
+ information. With \tonelib\ V.\ 0.4-beta, kerning information is accessible
+ much faster than before because it is based on char codes rather than on
+ characternames.
+\item \verb+T1_RIGHT_TO_LEFT+: Setting this flag will invert the writing
+ direction. In {\em Right-To-Left} mode the escapement in writing direction
+ (left) is inserted before placing the character with the result that the
+ character laps over to the left side. This principle is kept for all
+ characters in the string. Note that metrics of fonts that are intended for
+ {\em Right-To-Left} typesetting have the same meaning as for fonts intended
+ for standard ({\em Left-To-Right}) typesetting.
+\item \verb+T1_UNDERLINE+: The string to be rastered is to be underlined
+ according to the line specifications of the current font.
+\item \verb+T1_OVERLINE+: The string to be rastered is to be over lined.
+\item \verb+T1_OVERSTRIKE+: Same here for overstriking.
+\end{itemize}
+For a description of underlining and such, see \ref{underlining}. Notice also
+that the \verb+modflag+ argument is a replacement of the \verb+kerning+
+argument from pre-0.7 versions of \tonelib.
+
+Concerning glyph-memory considerations, the same applies as said under
+the description of \verb+T1_SetChar()+: Never free a pointer to memory
+which was returned by \verb+T1_SetString()+. Or, alternatively, if freeing
+the pointer cannot be avoided set it to NULL after freeing it.\footnote{For
+ example, {\tt XDestroyImage()} gives the pixel memory for the image
+ data free although it might not have been allocated by any X11-function.}
+
+There are two generic ways how a string-glyph can be produced. The first is to
+take the paths of all characters needed, concatenate them, insert space and
+kerning amounts as needed and raster the resulting whole path. This will yield
+the best results since the average position accuracy of the pixels will be
+optimal. This applies especially for rotated strings. The drawback is, that
+every character must be rastered every time it is needed. There is no way to
+access the bitmap data of a character inside a rastered string separate from
+others. And the caching of string-glyphs at this programming level doesn't
+make any sense. So this principle takes significantly longer than
+concatenating bitmaps from a cache area. However, it is done when the
+specified rotation angle is not equal to $0^\circ$ or when even further
+transformation are to be applied. This condition should limit the total
+number of situations when this happens to an amount we can easily bear.
+
+If the \verb+transform+-argument is \verb+NULL+ we know transformations or
+rotation should not be applied and another approach is used. We are then able
+to construct the resulting bitmap by adjusting already existent bitmaps into
+proper positions. If a character does not already exist in the cache, it is
+generated just the way \verb+T1_SetChar()+ works. The calculation of the
+character-bitmap positions in the output bitmap is done with
+char space-precision. Nonetheless, there may be differences in the output
+compared with output of the above method. These are caused by the fact that
+rounding to pixel accuracy has already been achieved when generating the
+character bitmap. Thus, the output of the above principle should always be
+better since the positions of the black pixels are rounded with respect to the
+whole string, and not with respect to a single character glyph. On the other
+hand, concatenating character glyphs takes significantly less time than
+rastering a complete string. Theoretically, differences of up to two pixels
+horizontal shift may appear in the output of the two principles. You can
+check the effect by running the program \verb+xglyph+. Specify a string of
+enough length and raster it at angle $0^\circ$. Then specify a very small
+angle from 0 different, say, $0.001^\circ$, and raster the string again with
+the new setting. You might find that the representation of the string is a
+little different now.
+
+The third function that creates a glyph object is
+\precorr
+\begin{verbatim}
+ GLYPH* T1_SetRect( int FontID, float size,
+ float width, float height,
+ T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_SetRect()+}\postcorr
+Calling this function yields a filled rectangle. It is intended for situations
+where a \TeX-style \verb+\vrule+ would be appropriate, or, for equations in
+mathematical typesetting.
+
+First, the argument \verb+FontID+ identifies a valid font. At this time, it is
+not obvious why a valid font is required in order to create a rectangular
+glyph. The reason is, that some of the parameters that are associated to a
+particular font are also relevant for creating rectangles in the context of
+that font. Hence, specifying a font identifier in this case is a means of
+stating ``{\em draw a rectangle that visually fits to the style of the font
+ \verb+FontID+}''. Aside from this, I assume that each application that uses
+\tonelib\ deals with at least {\em one} font so that the \verb+FontID+
+parameter actually does not hurt.
+
+The size of the rectangle is to be specified in charspace units by means of
+the parameters \verb+width+ and \verb+height+, and is moreover subject to
+scaling through the parameter \verb+size+. By definition, the typographical
+fundamental area of a font, known as the {\em em-square}, is just as high and
+as wide as the design size of the font. In charspace units, this rectangle
+exactly maps to a $1000 \times 1000$ grid. Or alternatively spoken, one
+charspace unit is 0.001bp (Big Point). For example, in order to draw an
+em-square for some font at 13 points, the correct parameters are
+\hbox{\verb+size+ $= 13$}, \hbox{\verb+width+ $= 1000$} and
+\hbox{\verb+height+ $= 1000$}. If absolute physical dimensions are desired,
+the scaling explicitly must be calculated by the user. For instance, in order to
+produce a $ 1 \mathrm{cm} \times 1 \mathrm{cm}$ square we find
+\begin{displaymath}
+h = w = 1\mathrm{cm} \frac{72\mathrm{bp}/\mathrm{in} \times
+ 1000\mathrm{cs}/\mathrm{bp}}{2.54\mathrm{cm}/\mathrm{in}}
+\approx 28346\;\mathrm{cs.}
+\end{displaymath}
+Here ``cs'' designates charspace units and \verb+size+ is assumed to be $1$.
+Note that still the device resolution must be properly setup in order to make
+the dimensions appear accurately on the device.
+
+The parameter \verb+transform+ is a pointer to a \tonelib\ transformation
+matrix. If it is \verb+NULL+, the current transformation of the font in
+question is used. Depending on the kind of actual transformation, the
+rectangle might also image as a nonrectangular shape. This happens, if the
+current font is slanted, then the rectangle will be skewed.
+
+Glyphs produced by the rectangle function are never cached because there is
+no means in doing so. With respect to memory management, the same applies as
+for \verb+T1_SetChar()+ and \verb+T1_SetString()+. Since rectangles rarely are
+used to produce normal text flow, the glyphs produced by the rectangle
+function do not cause any escapement.
+
+
+If two glyphs with arbitrary orientation exist,
+\precorr
+\begin{verbatim}
+ GLYPH *T1_ConcatGlyphs( GLYPH *glyph1, GLYPH *glyph2,
+ int x_off, int y_off, int modflag)
+\end{verbatim}\index{\verb+T1_ConcatGlyphs()+}\postcorr
+can be used to concatenate them. First the size of the resulting glyph is
+computed and its metric values are filled. Then, the two glyphs are placed at
+their appropriate positions in the newly created bitmap. In order to be able
+to work, the following conditions must be met:
+\begin{enumerate}
+\item Either glyph must be different from \verb+NULL+.
+\item Both glyphs must have identical \verb+bpp+-values. If antialiased and
+ non-antialiased glyphs are to be concatenated, have a look at
+\item There must be enough memory for the new glyph (naturally).
+\end{enumerate}
+The quantities \verb+x_off+ and \verb+y_off+ describe the $x$- and
+$y$-component of an optional offset to be inserted between the two
+glyphs. This offset is interpreted as device pixels. The \verb+modflag+
+argument is used to specify the direction in which the two glyphs are to be
+concatenated. That is, only the bit \verb+T1_LEFT_TO_RIGHT+ /
+\verb+T1_RIGHT_TO_LEFT+ is respected by this function.
+
+If problems occur, \verb+NULL+ is returned.
+It is generally not recommended to produce large glyphs with this function
+because the char space precision in placing the character bitmaps is lost. For
+example, three times rounding up an advance by 0.3 pixels accumulates to 1
+pixel position error. A similar effect shows up when two rotated and underlined
+glyphs are concatenated with this function. There might be a slight shift in the
+baseline at the point where the two glyphs touch.
+
+A dilemma occurs, if two antialiased bitmaps have distinct background
+colors. Then, it is not clear what the transparent color
+is. \verb+T1_ConcatGlyphs()+ always assumes the {\em current} background color
+to be transparent.
+
+
+There is one more function that generates pointers to glyphs:
+\precorr
+\begin{verbatim}
+ GLYPH *T1_CopyGlyph(GLYPH *glyph)
+\end{verbatim}\index{\verb+T1_CopyGlyph()+}\postcorr
+As mentioned earlier, the user doesn't have the possibility of keeping
+the
+glyphs longer than to the next call of the respective rastering function. If
+someone wants to keep a bitmap some time longer,
+\verb+T1_CopyGlyph()+ may be used
+to copy the glyph to another area which is then completely under user's
+control. This function simply does the following:
+\begin{itemize}
+\item Allocates the memory for the glyph-structure.
+\item If bitmap data is present, it allocates memory for the bitmap data,
+ taking the member \verb+bpp+ into account (see \ref{antialiasing}).
+\item Copies the structure and the bitmap data to the respective locations.
+\item Initializes the pointer \verb+glyph.bits+.
+\end{itemize}
+
+Return value is the pointer to the allocated glyph-structure. If something
+goes wrong, NULL is returned to indicate an error. A glyph pointer,
+returned by a call to this function should be freed by a call to
+\verb+T1_FreeGlyph()+ (see \ref{deletingdata}).
+
+
+\subsection{Loading Fonts Explicitly}
+\label{loading}%
+Usually there is no need for a user to load a font into memory since this is
+done automatically as needed by the rastering functions. But there are two
+situations where it makes sense to explicitly load a font before generating
+any size dependent data:
+\begin{itemize}
+\item A font is to be reencoded immediately after loading (see \ref{encoding}).
+\item A font is to be transformed (see \ref{transformations}).
+\end{itemize}
+These operations require a font being loaded but not having any size specific
+data. Loading a font explicitly is done by the function
+\precorr
+\begin{verbatim}
+ int T1_LoadFont( int FontID)
+\end{verbatim}\index{\verb+T1_LoadFont()+}\postcorr
+Loading a font involves several actions:
+\begin{itemize}
+\item Locating and loading the Type 1 font file.
+\item Locating and loading the font metrics data from AFM file.
+\item Computing and filling the values of the \verb+FONTPRIVATE+ structure as
+ described in section \ref{internals}.
+\item Setting up some tables for fast access of metrics information.
+\end{itemize}
+\verb+T1_LoadFont()+ returns \verb+0+ if successful or \verb+-1+ if the font
+could not be loaded. A failure may be due to \tonelib\ not having been
+initialized or due to problems with file locations and file parsing. If a font
+refuses to load, the logfile should be examined first. Furthermore, in case of
+a failure \verb+T1_errno+ will be set appropriately.
+
+
+\subsection{Functions for Encoding Handling}
+\label{encoding}%
+As mentioned earlier, the encoding mechanism used in the
+PostScript-language allows a font to contain more than 256 different
+characters, although only 256 are accessible at a given time. The
+characters which are accessible are given by the elements of the
+current {\em encoding vector}. In order to maximize flexibility,
+\tonelib\ allows for changing the current encoding vector. This is
+also called ``Reencoding a font''. A new encoding vector is defined
+and made known to the library by creating an encoding-file and loading
+its contents into memory.
+Before describing the functions needed for this, we should
+briefly describe the format of an encoding file.
+
+An encoding file is an ASCII text file. No
+assumptions about filename extensions are made. Here are the rules for
+scanning the file:
+\begin{itemize}
+\item The file contents are completely ignored until a line is encountered
+ that starts with the string \verb+Encoding=+. This string may optionally be
+ immediately followed by a string that is assumed to be the identifier of the
+ {\em encoding scheme} that this file defines. Any further text on this line
+ is ignored.
+\item Now, 256 lines have to follow, each line describing one
+ character's name. The string ranging from the beginning of the line
+ to the first white space character is assumed to be a character
+ name. The remainder of the lines is ignored and may (should) be used
+ for comments, thereby describing the current character code.
+\item All further lines of text are ignored.
+\end{itemize}
+As well known from PostScript, non-existent characters have to be
+named \verb+.notdef+.
+
+Here's an example of such an encoding file:
+\begin{verbatim}
+Sample encoding file for t1lib!
+The first two lines are considered to be comments!
+Encoding=ISOLatin1Encoding
+.notdef /* '000 000 "00 */
+.notdef /* '001 001 "01 */
+.notdef /* '002 002 "02 */
+ . .
+ . .
+ . .
+greater /* '076 062 "3E */
+question /* '077 063 "3F */
+at /* '100 064 "40 */
+A /* '101 065 "41 */
+B /* '102 066 "42 */
+ . .
+ . .
+ . .
+yacute /* '375 253 "FD */
+thorn /* '376 254 "FE */
+ydieresis /* '377 255 "FF */
+\end{verbatim}
+
+Since V.~1.2, \tonelib\ is also able to load encoding files in the format used
+by \verb+dvips+. This makes a large set of existing encoding files available
+to the user. When parsing \verb+dvips+ encoding files, \tonelib\ requires
+PostScript syntax. This means white space may be interspersed freely and
+line comments are defined by the character \%. The mark-characters, \verb+[+
+and\verb+]+, are considered as special tokens and need not be preceded or
+followed by white space. Similarly, the literal escape character \verb+/+
+delimits a preceding token without interspersed white space. When parsing
+\verb+dvips+ encoding files, \tonelib\ tolerates less than 256 character name
+definitions. If characters are missing, they are substituted by \verb+.notdef+
+until the counter reaches $256$. Aside from comments, no PostScript tokens are
+allowed after the encoding definition in a \verb+dvips+ encoding file is
+complete.
+
+With the defining terms above, it turns out that a file which has successfully
+been scanned as a \verb+dvips+ encoding file, cannot specify a valid \tonelib\
+encoding after the PostScript encoding definition is complete (because no
+valid character name can start with \% and because at least a line such as
+\verb+Encoding=+, would have to follow the PostScript encoding). Hence the
+file format are mutually exclusive and it is possible to read both format
+using one function. In a first pass \tonelib\ tries to read the file as a
+\verb+dvips+ encoding file, and if that fails, it assumes to have a \tonelib\
+encoding file.
+
+
+Once such an encoding file of either type has been created, it can be loaded
+into memory. This is done with the function
+\precorr
+\begin{verbatim}
+ char **T1_LoadEncoding( char *filename)
+\end{verbatim}\index{\verb+T1_LoadEncoding()+}\postcorr
+The function will use the search path definitions read from
+the configuration file during initialization (see
+\ref{runtimesetup}, \verb+ENCODING=+). If no
+errors occur, an array of pointers to strings is created and
+initialized. The start address of this pointer array is returned as a
+double pointer to a char. This pointer is intended
+to be used to reencode a font via \verb+T1_ReencodeFont()+. If the encoding
+data structure could not be created, \verb+NULL+ is returned to indicate the
+error.
+
+The memory allocated by \verb+T1_LoadEncoding()+ is organized in two
+continuous blocks. One block is the pointer array of size 257\footnote{This
+ number results from 256 charactername pointers plus one pointer to the
+ encoding scheme identifier.} and the
+other block contains the character name strings plus the encoding scheme
+specification, separated by
+ASCII-zeros.
+This memory can be returned to the system using the function
+\precorr
+\begin{verbatim}
+ int T1_DeleteEncoding( char **Encoding)
+\end{verbatim}\index{\verb+T1_DeleteEncoding()+}\postcorr
+\tonelib\ does not check whether a valid pointer value was passed. So be
+careful to pass the correct pointer. An error in this function should almost
+always be followed by a segmentation violation.
+
+A newly loaded encoding is applied to an existent font by
+calling
+\precorr
+\begin{verbatim}
+ int T1_ReencodeFont( int FontID, char **Encoding)
+\end{verbatim}\index{\verb+T1_ReencodeFont()+}\postcorr
+\verb+FontID+ must be a valid font identification and
+\verb+Encoding+ a pointer returned from a
+successful call to \verb+T1_LoadEncoding()+.
+
+There are two requirements
+in order to reencode a font:
+\begin{enumerate}
+\item The font must already have been loaded into memory.
+\item No size-dependent data exists for this font. If
+ it does, it must be removed explicitly prior to calling
+ \verb+T1_ReencodeFont()+.
+\end{enumerate}
+
+It follows that there are two ways to reencode a font. The first is
+to load a font explicitly and reencode it before any size dependent
+data is created. The second is to use an automatically loaded font
+and delete all of its size dependent data before reencoding it.
+
+The user may also specify the special pointer NULL as the
+\verb+Encoding+-argument. This would reencode the font to its internal
+encoding vector.
+
+In case of success, the function returns 0, otherwise -1 is returned.
+
+Reencoding a font takes a considerable amount of time since the mapping tables
+have to be reorganized. In situations where it is \`a priori foreseeable that the
+font will be reencoded using some standard encoding vector, it makes sense to
+assign that particular encoding vector as the default encoding vector,
+thereby overwriting the internal encoding vector of each font at load time
+before the mapping tables are setup. Setting the default encoding can be
+achieved using
+\precorr
+\begin{verbatim}
+ int T1_SetDefaultEncoding( char **Encoding)
+\end{verbatim}\index{\verb+T1_SetDefaultEncoding()+}\postcorr
+Here \verb+Encoding+ encoding is assumed to be a valid \tonelib\ encoding
+vector, e.g., created by a call to \verb+T1_LoadEncoding+.
+\verb+T1_SetDefaultEncoding()+ has to be called after initialization. It
+returns \verb+0+ if this condition is fulfilled and \verb+-1+
+otherwise. In the latter case \verb+T1_errno+ is set appropriately.
+Notice that the internal encoding of the font is still accessible by
+reencoding the font using \verb+NULL+ as encoding specification (see above).
+Note further that the default encoding vector is only applied to those font
+that have \verb+StandardEncoding+ as internal encoding. This is to prevent
+fonts like ZapfDingbats, Symbol or Sonata\footnote{A musical notation font.}
+from being reencoded automatically at load time because this would be
+surely inappropriate for such fonts.
+
+It is also possible to query the encoding scheme that the font associated with
+\verb+FontID+ uses. This is achieved with the function
+\precorr
+\begin{verbatim}
+ char *T1_GetEncodingScheme( int FontID)
+\end{verbatim}\index{\verb+T1_GetEncodingScheme()+}\postcorr
+The return value is a pointer to a string which describes the encoding scheme
+in question. The are 3 possible cases:
+\begin{itemize}
+\item The font uses Adobe StandardEncoding, which is internally known by the
+ rasterizer. Then, \verb+StandardEncoding+ is returned.
+\item The font defines its own encoding by \hbox{\verb+dup+ $n$ {\em
+ LiteralName} \verb+put+} statements. In this case no particular name is
+ associated with the encoding scheme and \verb+FontSpecific+ is returned.
+\item The encoding is externally loaded by \verb+T1_LoadEncoding()+. Then the
+ encoding scheme entry of this file is returned. If this (optional) entry is
+ not specified in the file, \verb+Unspecified+ is returned.
+\end{itemize}
+Notice that the name of the encoding scheme is also accessible as
+\verb+Encoding[256]+ where \verb+Encoding+ is the pointer returned by a
+successful call to \verb+T1_LoadEncoding()+.
+
+\subsection{Deleting Data}
+\label{deletingdata}%
+In frequently appearing cases, it may be wise to return some memory
+which was explicitly
+or automatically allocated by the library back to the
+system.\footnote{This is especially true, since there is presently no
+ caching algorithm which automatically takes care of this.} For
+this purpose
+some functions are available. To understand how size dependent
+data for a font is organized, see (\ref{internals}).
+
+The memory amount required by the size-dependent data of \verb+size+
+and font \verb+FontID+ is freed by calling the function
+\precorr
+\begin{verbatim}
+ int T1_DeleteSize( int FontID, float size)
+\end{verbatim}\index{\verb+T1_DeleteSize()+}\postcorr
+The data deleted includes the metric
+information for 256 characters, some pointers, associated bitmap data (if
+already existent) as well as the font matrix for that size.
+
+As described in section \ref{internals}, the data structures containing
+size-dependent information of a particular font are organized as a
+linked list. \verb+T1_DeleteSize()+ takes care that a properly linked
+list is left after deleting the data.
+
+If the combination of \verb+size+ and \verb+FontID+ does not exist, -1
+is returned. If the operation was successful, the return value is 0.
+
+For the purpose of removing all size-dependent data for a particular
+font, there is the function
+\precorr
+\begin{verbatim}
+ int T1_DeleteAllSizes( int FontID)
+\end{verbatim}\index{\verb+T1_DeleteAllSizes()+}\postcorr
+It recursively removes all size-dependent data for the font
+\verb+FontID+. This may be appropriate if a user knows some font not
+to be needed any longer. This function is also to be used, if one intends to
+reencode a font for
+which size dependent data has already been generated. In addition,
+ font transformations
+such as {\em slanting} and {\em extending}
+require a font having no size-specific data.
+\verb+T1_DeleteAllSizes()+ recursively calls \verb+T1_DeleteSize()+ to
+do its job.
+It returns the number of sizes removed (including 0 if no sizes were
+existent) or -1 if an error occurred.
+
+It is also possible to remove the entire data associated with a
+particular font from memory using
+\precorr
+\begin{verbatim}
+ int T1_DeleteFont( int FontID)
+\end{verbatim}\index{\verb+T1_DeleteFont()+}\postcorr
+\verb+T1_DeleteFont()+ goes one step beyond the above functions and
+removes all the data associated with the font \verb+FontID+. This
+includes:
+\begin{itemize}
+\item All size dependent data.
+\item All data from the Type 1 font program, held in memory.
+\item All AFM data kept in memory.
+\end{itemize}
+The memory reserved for a font in hierarchy-level 1 is not returned to
+the system since it is simply one element in the array of structures of
+type \verb+FONTPRIVATE+ (see \ref{internals}). But all entries in this
+structure are reset to initial values.
+
+Whether it is useful or not, a font that has been removed using
+\verb+T1_DeleteFont()+ may also be loaded again, explicitly or
+implicitly.
+
+There is a restriction, which has not yet been mentioned: A font may only be
+removed if it is a physical font (to be explained later) to which no logical
+fonts refer or if it is a logical font.\footnote{See \ref{logicalfonts} for
+ explanation of logical fonts.} A reference counter is maintained in each
+physical font to check for this. If the font to be removed is a logical font,
+the \verb+FONTPRIVATE+ area is reset and the reference counter of the
+referenced physical font is decremented. Of course, size dependent data is
+removed in every case.
+
+\verb+T1_DeleteFont()+ returns 0 if the font has been removed correctly or if
+the font was not loaded. $n$ ($>0$) is returned if
+the font was physical and was referenced by $n$ logical fonts. A
+return value -1 indicates an invalid \verb+FontID+.
+
+The function
+\precorr
+\begin{verbatim}
+ int T1_FreeGlyph( GLYPH *glyph)
+\end{verbatim}\index{\verb+T1_FreeGlyph()+}\postcorr
+returns memory allocated by
+\verb+T1_CopyGlyph()+ back to the system. This function should not be
+applied to the pointer to a glyph returned by one of the rastering
+functions. As said earlier, these functions manage the memory areas by
+themselves.
+
+Similarly, the function
+\precorr
+\begin{verbatim}
+ int T1_FreeCompCharData( T1_COMP_CHAR_INFO *cci)
+\end{verbatim}\index{\verb+T1_FreeCompCharData()+}\postcorr
+returns memory associated to the composite caracter data structures, as
+allocated and returned by \verb+T1_GetCompCharData()+ or
+\verb+T1_GetCompCharDataByIndex()+ (see
+Section~\ref{subsec:CompositeCharacters}), to the system. In order to avoid
+memory leaks, each call of the latter two functions should be followed by a
+call to this function.
+
+
+In order to close the library and return all memory to the system,
+\precorr
+\begin{verbatim}
+ int T1_CloseLib( void)
+\end{verbatim}\index{\verb+T1_CloseLib()+}\postcorr
+should be used. If no problems occur, 0 is returned. The value 1 indicates
+problems during freeing data. In this case the logfile should be examined.
+After having freed all data the file search paths, if different from the
+defaults, are restored. Last, the logfile is closed.
+
+
+\subsection{Underlining, Overlining and Overstriking}
+\label{underlining}%
+\tonelib\ supports underlining, overlining and overstriking for the string
+rastering functions. These lines are always drawn on the fly as the bitmaps
+are generated. In writing direction, the lines range from the glyph's origin
+to the glyph's width. The vertical dimensions are set the following way by
+default when a font is loaded:
+\begin{itemize}
+\item {\bf Underlining}: Underline position and thickness are taken from the
+ Fontinfo dictionary of the respective font. The rule is vertically centered
+ with respect to the mathematical line given by the position value.
+\item {\bf Overlining}: The position is computed to be $y=a+|u|$ where $a$
+ corresponds to the typographic ascender and $u$ is the underline position
+ from the Fontinfo dictionary. As above, the rule is vertically centered
+ around this position value. The thickness is set to underline thickness.
+\item {\bf Overstriking}: The position is $y=a/2$ where again $a$ is the
+ typographic ascender of the font and vertical alignment of the rule is done
+ by centering around the computed position. The thickness is set to underline
+ thickness.
+\end{itemize}
+As all information in AFM files, thickness and position specifications are
+interpreted in charspace units.
+
+Notice that the typographic ascender is not determined by the Type 1 font
+program. It has to be guessed by \tonelib. The problem of guessing the
+typographic ascender is discussed in more detail in \ref{writingafmfiles}.
+When loading a font, this typographic ascender is assumed to be the vertical
+coordinate of the upper right corner of the bounding box of the letter ``d''.
+This is not as advanced as the procedure described in \ref{writingafmfiles},
+but it suffices because the underlining positions can later be overwritten by
+the user (see below).
+
+From the mathematical point of view, the line rules are an integral part of
+the rastered path. It follows that line rules may appear sheared if a font has
+been artificially slanted and the size and/or thickness is sufficiently large.
+
+A look into real Type 1 font files shows that even fonts of the same family
+possess incompatible values for underlining. For example, Bitstream Charter
+Roman defines underline thickness to be 61 and its bold variant assigns a
+value of 90. Underlining text consisting of Roman and bold words will not be
+very pleasing using these values. For this reason \tonelib\ provides a way for
+explicitly setting and overwriting the default values for line ruling on a
+per-font level. The functions
+\precorr
+\begin{verbatim}
+ int T1_SetLinePosition( int FontID, int linetype, float value)
+\end{verbatim}\index{\verb+T1_SetLinePosition()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ int T1_SetLineThickness( int FontID, int linetype, float value)
+\end{verbatim}\index{\verb+T1_SetLineThickness()+}\postcorr
+set the respective value for font \verb+FontID+ to \verb+value+.
+The \verb+linetype+ argument is assumed to be an OR'ed combination of
+\verb+T1_UNDERLINE+, \verb+T1_OVERLINE+ and \verb+T1_OVERSTRIKE+. While it
+generally does not make sense to specify identical positions for two or three
+distinct line rule types, it is meaningful to specify identical thickness
+values for two or all rules types. However both functions accept combinations
+of linetype specification.
+It follows that consistent line ruling for several fonts can be achieved by
+setting the line rule parameters of the involved fonts to identical respective
+values.
+
+Currently active line rule parameters can be queried using the functions
+\precorr
+\begin{verbatim}
+ float T1_GetLinePosition( int FontID, int linetype)
+\end{verbatim}\index{\verb+T1_GetLinePosition()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ float T1_GetLineThickness( int FontID, int linetype)
+\end{verbatim}\index{\verb+T1_GetLineThickness()+}\postcorr
+In case more than one line rule type is specified for
+\verb+linetype+ the first matching value is returned,
+since obviously the functions can only return {\em one} value. The order the
+argument is checked is \verb+T1_UNDERLINE+, \verb+T1_OVERLINE+ and
+finally \verb+T1_OVERSTRIKE+.
+
+These functions called with \verb+T1_UNDERLINE+ as line type argument should
+not be confused with the functions \verb+T1_GetUnderlinePosition()+ and
+\verb+T1_GetUnderlineThickness()+ respectively. The latter functions will
+always return the values from the Fontinfo dictionary as opposed to the former
+which will return the currently active values.
+
+Since line ruling is done on the fly, it is possible to change the involved
+parameters in the middle of a session without confusing the cache or removing
+size dependent data.
+
+
+\subsection{Common Information on Fonts and Characters}
+\label{common}%
+This subsection describes some functions making common information
+available. This includes Type 1 and AFM data. Thus, these
+functions partially depend on the existence of AFM data. In order not
+to have to specify this data every time, here are a few conventions:
+\begin{enumerate}
+\item \verb+FontID+ is the valid ID of a declared font.
+\item All functions that require a character index as argument
+ use the currently active encoding vector to determine the
+ character's name
+ belonging to this index and use the character's name to search for the
+ information required.
+\item Some functions do not allow to use the return value for error
+ checking. For this reason every function described in this subsection will
+ set \verb+T1_errno+ appropriately if something goes wrong. See
+ \ref{errorhandling} for the description of the possible values of
+ \verb+T1_errno+.
+\item None of the functions described in this subsection will load a font
+ automatically.
+\end{enumerate}
+
+\subsubsection{Information from FontInfo-Dictionary}
+\label{fontinfodict}%
+\precorr
+\begin{verbatim}
+ char *T1_GetFontName( int FontID)
+\end{verbatim}\index{\verb+T1_GetFontName()+}\postcorr
+This function returns the string object \verb+FontName+ from the
+fontinfo-dictionary of the specified font or a NULL pointer if the font is not
+loaded.
+
+The memory for the returned string is static in this function and should thus
+not be freed by the user. As another consequence, the returned
+string is only constant until the function is called the next time.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetFullName( int FontID)
+\end{verbatim}\index{\verb+T1_GetFullName()+}\postcorr
+This function returns the string object \verb+FullName+ from the
+fontinfo-dictionary of the specified font or a NULL pointer if the font is not
+loaded.
+
+The memory for the returned string is static in this function and should thus
+not be freed by the user. As another consequence, the returned
+string is only constant until the function is called the next time.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetFamilyName( int FontID)
+\end{verbatim}\index{\verb+T1_GetFamilyName()+}\postcorr
+This function returns the string object \verb+FamilyName+ from the
+fontinfo-dictionary of the specified font or a NULL pointer if the font is not
+loaded.
+
+The memory for the returned string is static in this function and should thus
+not be freed by the user. As another consequence, the returned
+string is only constant until the function is called the next time.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetWeight( int FontID)
+\end{verbatim}\index{\verb+T1_GetWeight()+}\postcorr
+It returns the Weight entry from fontinfo dictionary. It is a string
+entry and represents a verbatim classification of the font rather than
+a numerical quantity. In case of an error \verb+NULL+ is returned.
+
+\precorr
+\begin{verbatim}
+ float T1_GetItalicAngle( int FontID)
+\end{verbatim}\index{\verb+T1_GetItalicAngle()+}\postcorr
+The returned value is the italic angle of the font in degrees as a
+float. Notice that the meaning of ItalicAngle is related to the slanting
+of fonts, but not in the sense of \tonelib\ (see
+\ref{transformations}).
+An italic font may be artificially slanted and an artificially slanted
+font in the sense of \tonelib\ may have an italic angle of zero.
+
+\precorr
+\begin{verbatim}
+ int T1_GetIsFixedPitch( int FontID)
+\end{verbatim}\index{\verb+T1_GetIsFixedPitch()+}\postcorr
+This function returns 0 if the font's spacing is proportional and 1 if
+it is fixed.
+
+\precorr
+\begin{verbatim}
+ BBox T1_GetFontBBox( int FontID)
+\end{verbatim}\index{\verb+T1_GetFontBBox()+}\postcorr
+This function returns the bounding box of the font identified by
+\verb+FontID+. It is the bounding box that
+results if all characters of a font are overlayed with their reference point
+falling on the point (0,0). All values are in charspace units. The members
+\verb+lly+ and \verb+urx+ represent the fonts overall descent and ascent,
+respectively.
+
+The font's bounding box is part of the AFM information as well as member in
+the font's private dictionary. It turns out that the information from
+\verb+.afm+- and \verb+.pfa+/\verb+.pfb+-file is not consistent for some
+fonts. \tonelib\ returns the information stored in the font-file itself, since
+I assume it is more consistent to the font's data.
+
+\precorr
+\begin{verbatim}
+ float T1_GetUnderlinePosition( int FontID)
+\end{verbatim}\index{\verb+T1_GetUnderlinePosition()+}\postcorr
+This function returns the underline position of the specified font as given in
+the fontinfo-dictionary. The value is to be interpreted in charspace
+units. If the font is not loaded, 0 is returned since an
+underline position of 0 can be considered impossible for most fonts.
+
+\precorr
+\begin{verbatim}
+ float T1_GetUnderlineThickness( int FontID)
+\end{verbatim}\index{\verb+T1_GetUnderlineThickness()+}\postcorr
+This function returns the thickness of the underlining rule for this font or 0
+if the font is not loaded. 0 is a safe index for an error since a rule of
+height 0 would not be visible anyhow.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetVersion( int FontID)
+\end{verbatim}\index{\verb+T1_GetVersion()+}\postcorr
+The version string from the Type 1 font file is returned. The memory
+where the string is located is managed by the function itself.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetNotice( int FontID)
+\end{verbatim}\index{\verb+T1_GetNotice()+}\postcorr
+The notice string from the Type 1 font file is returned. Again the
+user should not touch the memory where the string is located.
+
+\subsubsection{Metric Information on Glyphs}
+\label{metricinformation}%
+\precorr
+\begin{verbatim}
+ int T1_GetCharWidth( int FontID, char char1)
+\end{verbatim}\index{\verb+T1_GetCharWidth()+}\postcorr
+The character width according to the AFM information is returned in charspace
+units. If no AFM information is available, 0 is returned.
+
+The width of a
+character is the amount of horizontal escapement that the next character is
+shifted to the right with respect to the current position. This information is
+not given in the character's bounding box. Also, the width corresponds to the
+entry \verb+characterWidth+ in the \verb+glyph+-structure, as described in
+\ref{generatingbitmaps}. But since \verb+T1_GetCharWidth()+, returns its
+result in charspace units, the accuracy is much higher than using the value
+of the \verb+glyph+-structure which has only pixel-accuracy.
+
+If there is an extension specified for the font in question, the characters
+width is corrected correspondingly.
+
+\precorr
+\begin{verbatim}
+ BBox T1_GetCharBBox( int FontID, char char1)
+\end{verbatim}\index{\verb+T1_GetCharBBox()+}\postcorr
+The character's bounding box of \verb+char1+ is returned with the elements to
+be interpreted in charspace units. The bounding box of a character is defined
+to be smallest rectangle aligned parallel to the $x$- and $y$-axis of
+the character
+coordinate system which encloses the painted area of the character
+completely. This rectangle is completely specified by specifying its
+lower left and its upper
+right corner. From a programmer's point of view, a characters bounding
+box is defined by the following struct of type \verb+BBox+:
+\begin{verbatim}
+typedef struct
+{
+ int llx; /* lower left x-position */
+ int lly; /* lower left y-position */
+ int urx; /* upper right x-position */
+ int ury; /* upper right y-position */
+} BBox;
+\end{verbatim}
+In case the character is not encoded or no AFM data is available, a box
+containing only zeros is returned.
+
+The bounding box is corrected if an extension value has been applied
+to the font in question.
+
+Since version 0.3-beta, slanted fonts are fully supported, meaning that for
+slanted fonts too a correct bounding box will be returned. This is however
+quite time expensive since the characters' real outline must be considered.
+See the discussion on slanting a font (\ref{transformations}) for an
+explanation of this.
+
+
+\precorr
+\begin{verbatim}
+ int T1_GetStringWidth( int FontID, char *string,
+ int len, long spaceoff, int kerning)
+\end{verbatim}\index{\verb+T1_GetStringWidth()+}\postcorr
+\precorr
+\begin{verbatim}
+ BBox T1_GetStringBBox( int FontID, char *string,
+ int len, long spaceoff, int kerning)
+\end{verbatim}\index{\verb+T1_GetStringBBox()+}\postcorr
+These two functions represent the complement to the above functions on the level
+of strings. All parameters that take influence on the resulting width and
+bounding box must be given in the argument list. Their meaning is identical to
+the meaning they have when calling string rastering functions (see
+\ref{generatingbitmaps}).
+
+
+\precorr
+\begin{verbatim}
+ METRICSINFO T1_GetMetricsInfo( int FontID, char *string,
+ int len, long spaceoff, int kerning)
+\end{verbatim}\index{\verb+T1_GetMetricsInfo()+}\postcorr
+In certain situations bounding box and width of a glyph are required both. In
+these cases it is more convenient to call \verb+T1_GetMetricsInfo()+ which
+returns a structure that contains all information. \verb+METRICSINFO+ is
+defined in \verb+t1lib.h+ as:
+\begin{verbatim}
+typedef struct
+{
+ int width;
+ BBox bbox;
+ int numchars;
+ int *charpos;
+} METRICSINFO;
+\end{verbatim}
+All numbers are to be interpreted in character space units --- they are
+directly taken from AFM data. \verb+width+ is the glyph's width and
+\verb+bbox+ its bounding box which in turn is a struct as defined some
+paragraphs above.
+
+\verb+numchars+ is assigned number of characters in string. If the argument
+\verb+len+ is different from 0, \verb+numchars+ is assigned that value.
+
+\verb+charpos+ is a pointer to an integer array of size \verb+numchars+
+allocated by \verb+T1_GetMetricsInfo()+. During execution this array is filled
+step by step with the horizontal escapement in character space units of the
+respective character relative to the start point of the string glyph which
+corresponds to 0. \verb+charpos+ remains valid until
+\verb+T1_GetMetricsInfo()+ is called the next time. The user should not
+free this memory because this is handled automatically.
+
+The terms concerning the bounding box of slanted fonts mentioned under the
+description of \verb+T1_GetCharBBox()+ apply here as well. The first and the
+last character of \verb+string+ have to be observed spending high effort.
+But nevertheless the correct bounding box is returned.
+
+\precorr
+\begin{verbatim}
+ int T1_GetKerning( int FontID, char char1, char char2)
+\end{verbatim}\index{\verb+T1_GetKerning()+}\postcorr
+This function returns the amount of kerning for the specified character
+pair \verb+char1+ and \verb+char2+. If an extension has been specified
+for the font (see \ref{transformations}), the amount of
+kerning is automatically corrected using the extension factor. The
+value returned has to be interpreted in charspace units.
+
+If no AFM information is available for the font in question, simply 0
+is returned. The same applies if the font is not loaded.
+
+The implementation of this function requires that the kerning pairs in
+the AFM file are sorted in alphabetical order. I am not sure
+whether this condition is found in the specification of the AFM file
+format. If this function doesn't work although AFM kerning data is
+available, this might be the reason.
+
+\precorr
+\begin{verbatim}
+ int T1_QueryLigs( int FontID, char char1,
+ char **successors, char **ligatures)
+\end{verbatim}\index{\verb+T1_QueryLigs()+}\postcorr
+This function implements the interface to the ligature information in
+the AFM data. Ligatures are special character-symbols which are
+substituted if special pairs,
+triples or whatever groups of characters appear in a string. For example,
+``f{}i'' is replaced with the ligature ``fi''. In this example, the ``i'' is
+called {\em successor} and the ``fi'' is the associated ligature.
+
+\verb+char1+ is the character
+which has to be checked for ligatures, i.e., the first character of a possible
+ligature group. \verb+successors+ and \verb+ligatures+ should be addresses of
+pointers to \verb+char+s. These pointers are modified by the
+\verb+T1_QueryLigs()+.
+
+First, \verb+T1_QueryLigs()+ checks how many ligatures are defined for the
+character given by \verb+char1+. Assuming this number is $n$, it then
+defines memory for two arrays of type \verb+char+ with size
+$n$. These arrays are filled with the indices of the
+successor-characters and with
+the indices of the associated ligatures, respectively. The current
+encoding vector is used for this. The addresses of these two arrays
+are written to the
+addresses of the respective pointers \verb+successors+ and \verb+ligatures+.
+They are thus later available to the user in order to access the memory where
+the successor-character and ligatures are specified. The value $n$ is returned
+in order to tell the user how many ligatures were found and to give
+the user information about the end of the two arrays.
+
+If the font is not loaded or AFM data is not available, -1 is returned.
+
+Since this may seem to be a little complicated, here is a programming example:
+\begin{verbatim}
+char *succ, *lig;
+int n_lig, i;
+char char1='f';
+
+/* Get ligature information of character 'f' in font 0: */
+n_lig=T1_QueryLig( 0, char1, &suc, &lig);
+
+/* print out indices of characters and their ligatures */
+for ( i=0; i<n_lig; i++;){
+ printf("First char: %d, + next char: %d --> ligatur: %d\n",
+ char1,
+ succ[i],
+ lig[i]);
+\end{verbatim}
+
+Notice that the arrays where the successor indices and the respective
+ligature indices are stored are static in
+\verb+T1_QueryLigs()+. Thus, they may not be freed and moreover they
+are only valid until the next time \verb+T1_QueryLigs()+ is called.
+
+
+\subsubsection{Character-Encoding Relation}
+\label{characterencodingrelation}%
+
+\precorr
+\begin{verbatim}
+ char *T1_GetCharName( int FontID, char char1)
+\end{verbatim}\index{\verb+T1_GetCharName()+}\postcorr
+This function returns the name of the character indexed by \verb+char1+
+according to the current encoding vector. As said above, the memory where the
+string
+is stored is static to this function so that the user should not free the
+returned pointer. If the font is not loaded, NULL is returned.
+
+\precorr
+\begin{verbatim}
+ int T1_GetEncodingIndex( int FontID, char *char1)
+\end{verbatim}\index{\verb+T1_GetEncodingIndex()+}\postcorr
+This function is the complement to the above function. It returns the lowest
+index of the character with the specified name in the current encoding vector
+as an \verb+int+. If the charactername is not found in the current encoding
+vector or if the font is not loaded, the value -1 is returned.
+
+\precorr
+\begin{verbatim}
+ int *T1_GetEncodingIndices( int FontID, char *char1)
+\end{verbatim}\index{\verb+T1_GetEncodingIndices()+}\postcorr
+This function is an extension of the above function. It is meant for cases
+where all appearences of \verb+char1+ in the encoding vector are requested.
+The return value is an integer array whose elements contain the encoding
+indices where \verb+char1+ appears in increasing order. The first negative
+entry in this array indicates that no more valid indices will follow. In the
+most extreme case we can think of (i.e., where the complete encoding vector is
+occupied by {\em one} character), \verb+T1_GetEncodingIndices()+ will return
+an array of size 257 where the first 256 elements bear their own index and the
+257th element is $-1$. If font \verb+FontID+ is not loaded, this function
+returns \verb+NULL+ and \verb+T1_errno+ will be set appropriately. If
+\verb+char1+ was not found in the encoding vector, a valid array is returned
+but the first element will be $-1$.
+
+
+\precorr
+\begin{verbatim}
+ char **T1_GetAllCharNames( int FontID)
+\end{verbatim}\index{\verb+T1_GetAllCharNames()+}\postcorr
+As described in \ref{encoding}, not all characters of a font need to be
+encoded. A Type 1 may contain the outlines of an arbitrary number of
+characters, but only 256 can be encoded---and thus
+accessed---simultaneously. Since the characternames are inside the encrypted
+portion of
+the Type 1 font file, there is no easy way to find out which characters a font
+defines.
+
+\tonelib\ provides \verb+T1_GetAllCharNames()+ for situations where a
+programmer needs to know what characters are defined in the font file
+identified by \verb+FontID+. The value returned is a pointer to an array of
+\verb+char+ pointers which in turn point to the characternames.
+The array's size is $(n+1)$ where $n$ is the number of defined outlines. The
+$(n+1$)th pointer is \verb+NULL+ to indicate the end of the array.
+An application programmer may use these characternames to construct a
+specialized encoding vector. Here is an example of how to use
+\verb+T1_GetAllCharNames()+. It prints a list of all defined characternames in
+font 0.
+\begin{verbatim}
+ char **ptr;
+ int i;
+ .
+ .
+ .
+ ptr=T1_GetAllCharNames( 0);
+ i=0;
+ while (ptr[i]!=NULL){
+ printf("Charstring %d = %s\n", i, ptr[i]);
+ i++;
+ }
+\end{verbatim}
+
+The memory for storing the pointers and the charactername strings is static in\\
+\verb+T1_GetAllCharNames()+. Thus it remains valid until the function is
+called the next time. The user should not free this memory or if he does, he
+should set the pointer to \verb+NULL+ to indicate the memory has already been
+freed.
+
+\precorr
+\begin{verbatim}
+ int T1_GetNoKernPairs( int FontID)
+\end{verbatim}\index{\verb+T1_GetNoKernPairs()+}\postcorr
+This function returns the number of kerning pairs defined for the font
+identified by \verb+FontID+. The number -1 is returned if an error occured and
+\verb+T1_errno+ will be set. All positive numbers including 0 should be
+considered valid return values.
+
+
+\subsubsection{Administrative Information}
+\label{administrativeinformation}%
+
+
+\precorr
+\begin{verbatim}
+ int T1_GetNoFonts( void)
+\end{verbatim}\index{\verb+T1_GetNoFonts()+}\postcorr
+Usually, this function returns the number of fonts declared in the font
+database file, i.e., the integer quantity from the first line of the font
+database file. However, if some new fonts have been created using
+\verb+T1_CopyFont()+ (see \ref{logicalfonts}) or if some fonts have
+been added to the database
+after initialization (see \ref{addingfonts}), these are also taken into
+account. The number returned by \verb+T1_GetNoFonts()+ minus 1
+is thus the largest valid font ID specification.
+
+\precorr
+\begin{verbatim}
+ int T1_CheckForInit( void)
+\end{verbatim}\index{\verb+T1_CheckForInit()+}\postcorr
+Use this function in order to check whether \tonelib\ is initialized. It
+returns $0$ if initialization has already happened and $-1$ otherwise.
+
+\precorr
+\begin{verbatim}
+ int T1_CheckForFontID( int FontID)
+\end{verbatim}\index{\verb+T1_CheckForFontID()+}\postcorr
+This functions gives information on the load status of the font associated to
+\verb+FontID+. It returns $0$ if the font \verb+FontID+ has not yet been loaded,
+$1$ if it has already been loaded. Finally, a return value of $-1$ indicates
+that either \verb+FontID+ is an invalid specification or \tonelib\ is not
+initialized.
+
+
+\precorr
+\begin{verbatim}
+ char *T1_GetFontFileName( int FontID)
+\end{verbatim}\index{\verb+T1_GetFontFileName()+}\postcorr
+This function returns a pointer to the fontfilename identified by
+\verb+FontID+. In no case, this pointer may be freed since the memory is
+static to this function. The string also is only valid up to the next call of
+this function.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetFontFilePath( int FontID)
+\end{verbatim}\index{\verb+T1_GetFontFilePath()+}\postcorr
+This function returns a pointer to the fully qualified path of the font file
+identified by \verb+FontID+. In no case, this pointer may be freed since the
+memory is static to this function. The string also is only valid up to the
+next call of this function.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetAFMFilePath( int FontID)
+\end{verbatim}\index{\verb+T1_GetAFMFilePath()+}\postcorr
+This function returns a pointer to the fully qualified path of the AFM file of
+the font identified by \verb+FontID+, as used by \tonelib. In case of an error
+\verb+NULL+ is returned. It may also happen that there exists no AFM file for
+the font either because AFM information was generated on the fly at the time
+the font was loaded, or because AFM processing had been disabled at
+initialization time. For those cases \verb+T1_errno+ is not set.
+
+In no case, the returned pointer may be freed since the memory is static to
+this function. The string also is only valid up to the next call of this
+function.
+
+\precorr
+\begin{verbatim}
+ char *T1_GetLibIdent( void)
+\end{verbatim}\index{\verb+T1_GetLibIdent()+}\postcorr
+This function returns the identifier string for the version of \tonelib. For
+example, this could be \verb+0.8-beta+. The string is static in this function
+and should thus not be freed by the user.
+
+
+\subsection{Transformation of Fonts}
+\label{transformations}%
+Transformation of
+Type 1 fonts is generally accomplished by means of concatenating
+so-called transformation matrices. For example, rotation is
+equivalent to concatenation of
+the standard transformation matrix with a special matrix whose elements are
+trigonometric functions evaluated at the rotation angle. In the sense of
+\tonelib, we distinguish between {\em fontlevel transformations} and {\em
+ characterlevel transformations}.
+
+\subsubsection{Fontlevel Transformations}
+\tonelib\ supports three transformations that operate globally on a font's data.
+After applying such a transformation to a font all characters generated from
+then on will be rendered according to that transformation. Moreover, these
+transformed characters are saved in cache for fast future access. This
+principle is thus meant for transformed fonts which are semantically used as
+ordinary text fonts. Creating a font Times-Oblique by slanting a Times-Roman
+would be a typical example.
+
+The first fontlevel transformation is called ``extension'' since it extents a font
+horizontally---makes its characters wider. A font is extended by a call to the
+function
+\precorr
+\begin{verbatim}
+ int T1_ExtendFont( int FontID, double extend)
+\end{verbatim}\index{\verb+T1_ExtendFont()+}\postcorr
+A font that is to be extended may not have size dependent data. If size
+dependent data exists, it must
+explicitly be removed before applying an extension-factor. This is simply a
+security mechanism which prevents the user from mixing up extended and
+non-extended bitmaps. If the font is not loaded or size-dependent data is
+existent, -1 is returned. Otherwise, the function returns 0.
+
+All information on character metrics is automatically adapted to an
+extension-factor different from 1 (see \ref{common}).
+
+Applying an extension-factor to a font is implemented by replacing the current
+extension-factor---initially 1---with the supplied value. Thus, an extension
+can be deleted by specifying a factor 1. Moreover, extending a font two
+times, say, with factor 2, does not yield a font extended by 4. Rather the
+last specified extension, here 2, is applied.
+
+The second type of fontlevel transformation supported by \tonelib\ is {\em
+ slanting}. It is done by a call to the function \precorr
+\begin{verbatim}
+ int T1_SlantFont( int FontID, double slant)
+\end{verbatim}\index{\verb+T1_SlantFont()+}\postcorr
+The slant-factor $s$ tells the rastering algorithm to advance the $x$-coordinate
+of a given point by the product of $s$ with the $y$-coordinate of that
+point. Such fonts are sometimes called {\em oblique}. Another interpretation
+is that we state: $s=\tan(\alpha)$, where $\alpha$ is the well-known
+italic-angle of the font.
+
+Just as above, no size-dependent data may be existent and the font must be
+loaded. In that case 0 is returned, otherwise -1.
+
+As above, the slanting operation is implemented by {\em setting} the
+slant-factor so that a slant may be reset by means of specifying a
+slant-factor of 0.
+
+There is one thing that makes handling of slanted fonts more difficult than
+handling of extended fonts. When
+typesetting strings by concatenating bitmaps, exact information on character
+metrics is necessary. By slanting a character the character's width is not
+affected. But the bounding box is. And while extension---which means
+strictly horizontal scaling independent of the respective
+y-coordinate---simply leads to an extension of the bounding box, there is no
+way to compute the
+bounding box of a slanted character from the bounding box of the respective
+unslanted character. Here is an example.
+\begin{itemize}
+\item Let the character be \verb+\+. When slanting this character with a
+ value of 1, the resulting character will be similar to a vertical line. The
+ bounding box will thus be small in horizontal direction.
+\item If character is \verb+/+, the resulting slanted
+ character will tend to be more horizontal. Thus the resulting bounding box
+ will be much extended in horizontal direction.
+\end{itemize}
+In conclusion
+we can say that the effect of slanting on the bounding box of
+a given character depends on the shape of the character itself.
+
+Since version 0.3-beta the problem with the bounding box of slanted characters
+is handled as follows. The character in question is internally rastered at
+1000 bp and the bounding box of the resulting ``edgelist'' is examined. But no
+bitmap is generated for the character, this limits the computational effort.
+However the difference in time performance between getting a bounding box from
+a ``simple-shaped'' slanted character like ``i'' and getting a bounding box of
+a ``complex-shaped'' character like ``Q'' is clearly noticeable.
+
+The positioning algorithm for string bitmaps has been slightly improved in
+\tonelib\ V.\ 0.3-beta so that now exclusively bitmap metrics are used where
+the bounding boxes are needed. The limitation of slanted fonts appears thus
+only if a user explicitly requests a bounding box of a character/string in an
+artificially slanted font.
+
+The third and most common type of fontlevel transformation allows arbitrary
+linear transformations. This is done by a call to the function
+\precorr
+\begin{verbatim}
+ int T1_TransformFont( int FontID, T1_TMATRIX *matrix)
+\end{verbatim}\index{\verb+T1_TransformFont()+}
+\postcorr
+The transformation is specified by \verb+matrix+ (as described below).
+This function acts by setting the font's transformation matrix to the
+matrix pointed to by \verb+matrix+.
+
+As a final consequence of what has been described so far in this section it
+turns out that \verb+T1_TransformFont()+ overrides whatever slant and extension
+values might have been set before. Conversely, if \verb+T1_SlantFont()+ or
+\verb+T1_ExtendFont()+ are applied to a font after a call to
+\verb+T1_TransformFont()+, the respective values are simply overridden, there
+will be no concatenation. In the following description of transformation
+matrices and their usage, we will also describe how to concatenate an
+arbitrary series of linear transformations.
+
+There are also functions for querying the current values of the quantities
+described above for fontlevel transformations.
+\precorr
+\begin{verbatim}
+ double T1_GetExtend( int FontID)
+\end{verbatim}\index{\verb+T1_GetExtend()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ double T1_GetSlant( int FontID)
+\end{verbatim}\index{\verb+T1_GetExtend()+}\postcorr
+return the current extension and slant values. The function
+\precorr
+\begin{verbatim}
+ T1_TMATRIX T1_GetTransform( int FontID)
+\end{verbatim}\index{\verb+T1_GetTransform()+}\postcorr
+Returns the current transformation matrix as a structure of type
+\verb+T1_TMATRIX+ which will be described in detail in the next subsubsection.
+
+\subsubsection{Transformation at Rastering Time}
+This kind of transformation is the most generic one and allows arbitrary
+transformations. A transformation $(x',y')^T$ of a given location $(x,y)^T$ is
+given by the following set of linear equations:
+\begin{eqnarray*}
+x' & = a_{11} x + a_{21} y \\
+y' & = a_{12} x + a_{22} y
+\end{eqnarray*}
+Here, the matrix
+\begin{displaymath}
+\mathbf{A}=
+\left(
+\begin{array}{cc}
+a_{11} & a_{21} \\
+a_{12} & a_{22}
+\end{array}
+\right)
+\end{displaymath}
+is referred to as the {\em transformation matrix}. In \tonelib\ the following
+type definition is used for such transformation matrices:
+\begin{verbatim}
+typedef struct
+{
+ double cxx; /* corresponds to a11 */
+ double cyx; /* corresponds to a21 */
+ double cxy; /* corresponds to a12 */
+ double cyy; /* corresponds to a22 */
+} T1_TMATRIX;
+\end{verbatim}
+Each of the rastering functions expects to get a pointer to an object of type
+\verb+T1_MATRIX+, or \verb+NULL+ if no transformation is to be applied.
+If any transformation has been specified, the resulting glyph is never kept in
+cache memory. Thus, if for some reason caching should be disabled for
+non-transformed characters, simply a pointer to the
+unity matrix
+%$\left(
+%\begin{array}{cc}
+%1.0 & 0 \\
+%0 & 1.0
+%\end{array}
+%\right)$
+could be specified to the rastering function to achieve this.
+
+The user has the possibility of either allocating and creating the
+transformation matrices by himself or to use predefined functions of
+\tonelib. There are 8 different functions for generating transformed
+characters. Figure \ref{figure:transformations} gives an example of each
+function using the character ``g''.
+
+\begin{figure}[t]
+\hfill
+\includegraphics[scale=0.5]{mirrorh}
+\hfill
+\includegraphics[scale=0.5]{mirrorv}
+\hfill
+\includegraphics[scale=0.5]{shearh}
+\hfill\break
+\noindent\vrule width 0pt\hfill\verb+T1_MirrorHMatrix()+\hfill
+\verb+T1_MirrorVMatrix()+\hfill
+\verb+T1_ShearHMatrix()+\hfill\break
+% line 2
+\vskip0.5cm
+\hfill
+\includegraphics[scale=0.5]{shearv}
+\hfill
+\includegraphics[scale=0.5]{extenth}
+\hfill
+\includegraphics[scale=0.5]{extentv}
+\hfill\break
+\noindent\vrule width 0pt\hfill\verb+T1_ShearVMatrix()+\hfill
+\verb+T1_ExtendHMatrix()+\hfill
+\verb+T1_ExtendVMatrix()+\hfill\break
+% line 3
+\vskip0.5cm
+\hfill
+\includegraphics[scale=0.5]{rotate}
+\hfill
+\includegraphics[scale=0.5]{arbitrary}
+\hfill\break
+\noindent\vrule width 0pt\hfill\verb+T1_RotateMatrix()+\hfill
+\verb+T1_TransformMatrix()+\hfill\break
+\vskip3mm
+\hrule\vskip3mm\small
+\caption{\label{figure:transformations}Typical examples for the predefined
+ functions for generating transformation matrices in \tonelib, applied to the
+ character ``g''.}
+\end{figure}
+
+Before describing each particular function we should discuss the first
+argument because this is common to all matrix transformation functions. This
+first argument, in case it is not \verb+NULL+, is expected to be a pointer to
+an already existent valid \verb+T1_TMATRIX+ object. The transformation to be
+applied is then done by multiplying the existent matrix with the new
+matrix. In other words, the existent matrix is replaced by the concatenation of
+the two matrices. If a \verb+NULL+ is specified as argument, the new matrix is
+allocated by the respective function and then set to the concatenation of the
+unity matrix with the desired transformation. Thus, to remove a matrix from
+memory, the pointer simply has to be given to \verb+free()+, no matter how
+many transformations have been applied to this matrix before.
+
+We should now describe the functions for generating transformation matrices:
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_MirrorHMatrix( T1_TMATRIX *matrix)
+\end{verbatim}\index{\verb+T1_MirrorHMatrix()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_MirrorVMatrix( T1_TMATRIX *matrix)
+\end{verbatim}\index{\verb+T1_MirrorVMatrix()+}\postcorr
+simply change the sign of the matrix coefficients $a_{11}$ and $a_{22}$
+respectively. This has the optical effect of mirroring the character at the
+horizontal line $y=0$ or at the vertical line $x=0$, respectively. These
+functions represent a specialized form of
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_ExtendHMatrix( T1_TMATRIX *matrix, float extent)
+\end{verbatim}\index{\verb+T1_ExtendHMatrix()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_ExtendVMatrix( T1_TMATRIX *matrix, float extent)
+\end{verbatim}\index{\verb+T1_ExtendVMatrix()+}\postcorr
+These functions allow arbitrary scaling in the respective coordinate
+direction. Specifying \\
+\verb+extent=-1+ exactly yields mirroring at the
+corresponding axis.
+
+Furthermore, there are two transformations where one coordinate depends on
+itself and on the other coordinate. This is called shearing, slanting or also
+obliqueing. It is possible in both directions using the functions
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_ShearHMatrix( T1_TMATRIX *matrix, float shear)
+\end{verbatim}\index{\verb+T1_ShearHMatrix()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_ShearVMatrix( T1_TMATRIX *matrix, float shear)
+\end{verbatim}\index{\verb+T1_ShearVMatrix()+}\postcorr
+In case of horizontal shearing, the factor \verb+shear+ is equal to
+$\tan(\alpha)$, where $\alpha$ may be interpreted as the italic angle. It is
+measured from the positive vertical axis in mathematical negative direction.
+Correspondingly, for vertical shearing \verb+shear+ equals $\tan(\beta)$,
+where $\beta$ is the angle measured from the horizontal axis in mathematically
+positive direction.
+
+Rotation of glyphs is achieved using
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_RotateMatrix( T1_TMATRIX *matrix, float angle)
+\end{verbatim}\index{\verb+T1_RotateMatrix()+}\postcorr
+This function evaluates the trigonometric functions at the value of
+\verb+angle+ and concatenates the transformation matrix with
+\begin{displaymath}
+\left(
+\begin{array}{cc}
+\cos(\alpha) & -\sin(\alpha) \\
+\sin(\alpha) & \cos(\alpha)
+\end{array}
+\right)
+\end{displaymath}
+$\alpha$ is expected to be specified in degrees. It is measured according
+standard mathematical conventions.
+
+There is one more function which allows to set all matrix coefficients
+explicitly. It gives thus complete control over the transformation. This might
+be necessary to typeset text in a circle, for example. The syntax of this
+function is
+\precorr
+\begin{verbatim}
+ T1_TMATRIX *T1_TransformMatrix( T1_TMATRIX *matrix,
+ float cxx, float cyx,
+ float cxy, float cyy)
+\end{verbatim}\index{\verb+T1_TransformMatrix()+}\postcorr
+
+\subsubsection{{\tt t1lib} and PostScript: Notes on Transformation Matrices}
+In order to avoid confusion about transformation matrices, we should briefly
+discuss the differences between \tonelib- and PostScript transformation
+matrices. In \tonelib-nomenclature a coordinate description is assumed to be
+represented by a column vector $(x,y)^T$. In contrast, PostScript assumes a
+coordinate to be represented by a row vector $(x,y)$. This leads to an
+exchanged meaning of the second and third matrix element between \tonelib\ and
+PostScript. From the mathematical point of view this is caused by matrix
+transposition. To make this clear, let me quote the matrix
+\begin{displaymath}
+\mathbf{A}_{\mbox{\footnotesize PostScript}}=
+\left(
+\begin{array}{ccc}
+a & b & 0\\
+c & d & 0\\
+t_x & t_y & 1
+\end{array}
+\right)
+\end{displaymath}
+from the PostScript Language Reference Manual (Adobe, Red Book). If we forget
+about translation which in this sense is not implemented by \tonelib, we only
+have to consider the top left submatrix consisting of $a$, $b$, $c$ and $d$.
+The \tonelib-equivalent to this matrix would be written as
+\begin{displaymath}
+\mathbf{A}_{\mbox{\tt\footnotesize t1lib}}=
+\left(
+\begin{array}{cc}
+a & c \\
+b & d \\
+\end{array}
+\right)
+\end{displaymath}
+I.e., the meaning of $b$ and $c$ is exchanged. Notice that font matrices as
+found in Type 1 font files have to be interpreted according to the PostScript
+notation. But a user should never come close to something other than the
+\tonelib\ transformation matrices
+
+
+\subsection{Stroking of Character Outlines}
+\label{stroking}%
+Most available Type 1 fonts internally specify the numeric value
+\verb+PaintType+ as $0$. This indicates that the mathematical outline
+definitions of the characters consist of paths that represent the left and
+right---or inner and outer---borders of the character area to be filled with
+ink. In particular, this means that every subpath of a character definition
+must be closed. When filling characters, the curves that describe the outline
+are infinitely thin and the area between paths is of interest.
+
+By contrast, there are fonts that specify \verb+PaintType+ as $1$. These are
+also known as {\em stroked fonts}. Basically, their characters' shapes are
+generated by travelling along the mathematically thin defining curves using a
+pen with some finite width. The penwidth used here usually is specified in the
+font itself by means of the quantity \verb+StrokeWidth+.
+
+Using a somewhat unusual implementation, \tonelib\ can
+\begin{itemize}
+\item image stroked fonts with \verb+PaintType+ 1,
+\item stroke fonts that have \verb+PaintType+ 0,
+\item deal with variable strokewidths for both paint types.
+\end{itemize}
+In particular at low resolutions and when using large penwidths, the results
+of stroking may fall short of the quality of other general graphics tools like
+e.g.~native PostScript interpreters. Also hinting generally is disabled when
+creating stroked character outlines. For the interested reader, the
+implementation of stroking is outlined in \ref{strokingimplementation}
+(page~\pageref{strokingimplementation}).
+
+The process of stroking in \tonelib\ is treated similar to the process of
+transformation. Therefore, firstly, a font can be generally switched to be a
+stroked font. This is achieved using
+\precorr
+\begin{verbatim}
+ int T1_StrokeFont( int FontID, int dostroke)
+\end{verbatim}\index{\verb+T1_StrokeFont()+}\postcorr
+Here, \verb+FontID+ identifies the font to be switched. The parameter
+\verb+dostroke+ determines the future rastering behavior. If it equals 0, the
+font's characters will be filled and for any other value the characters will
+be stroked. The function returns 0 in case of success.
+\verb+T1_StrokeFont()+ requires the font \verb+FontID+ to be loaded. If the
+font is not loaded \verb+T1_errno+ will be set appropriately and the function
+returns -1. After switching a font to {\em stroked}, its characters are cached
+as usual. It is therefore important that, at the time where
+\verb+T1_StrokeFont()+ is called, no size-dependent data does exist. If this
+condition is violated, the function will fail too and set \verb+T1_errno+ to
+\verb+T1ERR_OP_NOT_PERMITTED+.
+
+The second method to control the rasterizer mode for the font \verb+FontID+ is
+to use the function pair
+\precorr
+\begin{verbatim}
+ int T1_SetStrokeFlag( int FontID)
+\end{verbatim}\index{\verb+T1_SetStrokeFlag()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ int T1_ClearStrokeFlag( int FontID)
+\end{verbatim}\index{\verb+T1_ClearStrokeFlag()+}\postcorr
+for enabling and disabling stroking, respectively. These two functions return
+0 on successful completion and -1 in case of a failure. They can only fail if
+\verb+FontID+ is not valid, in which case \verb+T1_errno+ is set to
+\verb+T1ERR_INVALID_FONTID+. Using these functions, switching the stroking is
+hence possible at any time. The netto effect is that caching will be disabled
+if the actually selected rasterizer mode does not match the one of the cached
+characters. The performance then will degrade for the rasterizer mode that is
+not the base mode of the font in question.
+
+If stroked characters and filled characters are required for one particular
+font while preserving good performance, using logical fonts is the tool of
+choice (see Sec.~\ref{logicalfonts}, page~\pageref{logicalfonts}).
+
+The currently active rasterizer mode for the font \verb+FontID+ can also be
+queried. This is done using
+\precorr
+\begin{verbatim}
+ int T1_GetStrokeMode( int FontID)
+\end{verbatim}\index{\verb+T1_GetStrokeMode()+}\postcorr
+If \verb+FontID+ is not valid, $-1$ is returned and \verb+T1_errno+ is set to
+\verb+T1ERR_INVALID_FONTID+. In any other case, the following values may be
+returned:
+\begin{itemize}
+\item \verb+0+: The rasterizer mode is {\em Fill} and filled characters are
+ cached. For stroked fonts with a \verb+PaintType+ of $1$, of course, the
+ characters are stroked and these stroked characters are cached anyhow.
+\item \verb+1+: Stroking is enabled, while filled characters are cached. Each
+ rasterization request is performed on the fly, as for nontrivial
+ transformations.
+\item \verb+2+: Filling is enabled but stroked characters are
+ cached. Rasterization again is performed on the fly.
+\item \verb+3+: Stroking is enabled and stroked characters are cached.
+\end{itemize}
+
+The width of the virtual pen used to trace the character outlines can also be
+adjusted. The function
+\precorr
+\begin{verbatim}
+ int T1_SetStrokeWidth( int FontID, float strokewidth)
+\end{verbatim}\index{\verb+T1_SetStrokeWidth()+}\postcorr
+sets up \verb+strokewidth+ as the pen width used to stroke characters from
+font \verb+FontID+. It is interpreted in charspace units and hence directly
+comparable to the \verb+StrokeWidth+ parameter of stroked fonts.
+If this function succeeds, $0$ is returned. The function call might
+also be unsuccessful, in which case $-1$ is returned. The value of
+\verb+T1_errno+ then gives a hint to the reason of the failure. If set to
+\verb+T1ERR_INVALID_FONTID+, the font was not loaded. The value
+\verb+T1ERR_INVALID_PARAMETER+ indicates that a negative strokewidths has
+been specified. Finally, \verb+T1ERR_OP_NOT_PERMITTED+ may appear if stroked
+characters are cached for the font in question, size dependent data exists,
+and the requested strokewidth did not equal the one used at the time where
+the cache data initially has been built. Allowing to setup an arbitrary
+strokewidth under the latter circumstances might fillup the cache for one font
+with characters rasterized using inconsistent strokewidths, which has to be
+avoided. From this discussion it becomes suggesting not to cache stroked
+character at all, if stroking should be done using variable strokewidths.
+
+The pen width for a given font \verb+FontID+ may be queried at any time using
+\precorr
+\begin{verbatim}
+ float T1_GetStrokeWidth( int FontID)
+\end{verbatim}\index{\verb+T1_GetStrokeWidth()+}\postcorr
+If the value $0.0$ is returned, this either indicates that the characters are
+filled or that the font in question is not loaded. Then, \verb+T1_errno+ is
+also set to \verb+T1ERR_INVALID_FONTID+.
+
+
+\subsection{Antialiasing}
+\label{antialiasing}%
+\subsubsection{General Description}
+When fonts are displayed on screen at low sizes, the shapes of characters often
+get damaged because of rounding errors---a pixel can generally present two
+states: painted or non-painted. But the human eye can be fooled in a
+way that it
+``thinks'' sub-pixel accuracy is given on the screen. This is done by
+considering which pixels are filled with ink to what degree and
+giving the
+physical pixel an appropriate shade of gray. For example, a pixel whose area
+would be covered 50\% would get a 50\% gray shade. This technique is called
+{\em antialiasing}.
+
+There are several ways to implement antialiasing. \tonelib\ implements
+antialiasing by internally generating a bitmap larger than needed
+and then subsampling. Depending on the subsampling factor which may be 2 or 4,
+this principle yields glyphs with
+5 or 17 shades of gray including black and white.
+
+There are three functions for generating antialiased glyphs:
+\precorr
+\begin{verbatim}
+ GLYPH *T1_AASetChar( int FontID, char charcode,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_AASetChar()+}\postcorr
+\precorr
+\begin{verbatim}
+ GLYPH *T1_AASetString( int FontID, char *string, int len,
+ long spaceoff, int modflag,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_AASetString()+}\postcorr
+\precorr
+\begin{verbatim}
+ GLYPH* T1_AASetRect( int FontID, float size,
+ float width, float height,
+ T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_AASetRect()+}\postcorr
+Note the ``\verb+AA+'' in the functions names which stand for
+\underline{A}nti\underline{A}liasing. The usage is identical to the usage of
+the functions \verb+T1_SetChar()+, \verb+T1_SetString()+ and
+\verb+T1_SetRect()+. So see \ref{generatingbitmaps} for an explanation of the
+arguments and their interpretation.
+
+When an antialiased glyph is requested, the supplied \verb+size+-value is
+multiplied by the current subsampling factor. For now, let us assume it is 2.
+Then the respective function for generating non-antialiased glyphs
+is called with all other arguments unchanged. The result is a bitmap twice as
+high and twice as wide as the user requested. Now, a $2\times2$ mask is moved
+over this bitmap and the number of painted pixels in this mask is considered
+at each place. According to the number of painted pixels one of 5 different
+gray shades is assigned to the resulting pixel. Since the mask is moved with
+an increment of 2 pixels in horizontal and vertical direction, the bitmap is
+at the same time subsampled by 2. Thus, the resulting bitmap is just of the
+size the user requested and its pixels each contain one of 5 gray shades.
+
+Conceptually, the same applies for subsampling with 4. In this case the mask is
+of size $4\times4$ and there will be 17 distinct gray shades including black
+and white. The computational effort is considerably larger so that 4 $\times$
+subsampling should only be used for very small sizes.
+
+When moving the mask over double-sized bitmap it is aligned properly with
+respect to the characters' baseline (zero height) rather than with the
+characters' top or bottom line. This principle ensures, that the most important
+visual guideline in running text, the baseline, is represented in a consistent
+manor. This is especially important if one is using a serif-font.
+Thanks to Raph Levien, the algorithm described above in a verbose manor has
+been replaced by a much
+faster lookup-algorithm in \tonelib\ V.\ 0.4-beta.
+
+\subsubsection{Setting Operating Parameters}
+Applications can use both $2\times$ and $4\times$ antialiasing arbitrary
+mixed. Switching between the two modes is achieved using
+\precorr
+\begin{verbatim}
+ int T1_AASetLevel( int level)
+\end{verbatim}\index{\verb+T1_AASetLevel()+}\postcorr
+The argument \verb+level+ should be either \verb+T1_AA_LOW+ ($=2$) or
+\verb+T1_AA_HIGH+ ($=4$). Any other values are ignored and \verb+T1_errno+ is
+set appropriately. This function is to be called after initialization. The
+default value after initialization is \verb+T1_AA_LOW+. The current value can
+also be queried by issuing a call to
+\precorr
+\begin{verbatim}
+ int T1_AAGetLevel( void)
+\end{verbatim}\index{\verb+T1_AASetLevel()+}\postcorr
+The returned value is current level. Switching between the two antialiasing
+modes should be quite fast since apart from a little error checking
+essentially only one simple variable is set.
+
+There is one more value that may be specified for \verb+level+, namely
+\verb+T1_AA_NONE+. \verb+T1_AA_NONE+ is identical to 1 which means that no
+subsampling at all is done. But the resulting glyph, having only fore- and
+background colors is returned as a bytemap instead of as a bitmap. This is
+intended for situtations where an antialiased glyph should be concatenated
+with a (possibly large) non-antialiased glyph using the function
+\verb+T1_ConcatGlyphs()+. In that case, the depths of the two glyphs have to
+be identical. There is probably not much more sense in setting \verb+level+ to
+\verb+T1_AA_NONE+.
+
+As described before, the result of the \verb+T1_AASet..()+ functions is
+strictly spoken no longer a
+bitmap since more than one bit is used to
+represent one pixel. The function
+\precorr
+\begin{verbatim}
+ int T1_AASetBitsPerPixel( int bpp)
+\end{verbatim}\index{\verb+T1_AASetBitsPerPixel()+}\postcorr
+allows the user to specify how many bits should be used to represent one
+pixel. Allowed values for \verb+bpp+ are 8, 16, 24 and 32. However, if 24 is
+specified, internally 32 will be used since the pixel are then addressed as
+objects of type \verb+long+. Antialiased glyphs may grow quite large,
+especially when
+using \verb+bpp+ = 32. The value of \verb+bpp+ is written into the member
+\verb+bpp+ of the \verb+glyph+-structure (see \ref{generatingbitmaps} on page
+\pageref{generatingbitmaps}). That way a user can check whether a
+glyph is antialiased or not. It is possible to work with antialiased
+and non-antialiased glyphs at the same time.
+It is also possible to directly query the value of bits per pixel by using
+\precorr
+\begin{verbatim}
+ int T1_AAGetBitsPerPixel( void)
+\end{verbatim}\index{\verb+T1_AAGetBitsPerPixel()+}\postcorr
+The value returned is the number of bits per pixel used.
+
+In order to make the handling of antialiased glyphs as flexible as possible,
+the values to be written into the pixels for different gray values
+may (and must) be explicitly specified. For low level antialiasing this is
+done by calling the function
+\precorr
+\begin{verbatim}
+ int T1_AASetGrayValues( unsigned long white,
+ unsigned long gray75,
+ unsigned long gray50,
+ unsigned long gray25,
+ unsigned long black)
+\end{verbatim}\index{\verb+T1_AASetGrayValues()+}\postcorr
+For lower \verb+bpp+ values only the lower bits are used. For high level
+antialiasing this kind of graylevel specification is not economical since 17
+arguments
+would have to be specified. Instead, another function is used which expects a
+pointer an array of \verb+unsigned long+'s:
+\precorr
+\begin{verbatim}
+ int T1_AAHSetGrayValues( unsigned long *grayvals)
+\end{verbatim}\index{\verb+T1_AAHSetGrayValues()+}\postcorr
+The array \verb+grayvals+ points to must contain 17 entries. Element 0 is
+expected to specify the background color's pixel value and element 16
+represents the foreground color. Calling one of these two functions involves
+also a new setup of the lookup tables. It should thus only be done if some
+color value really has changed.
+
+In case the antialiasing level is set to \verb+T1_AA_NONE+ as described
+above, the function
+\precorr
+\begin{verbatim}
+ int T1_AANSetGrayValues( unsigned long bg, unsigned long fg)
+\end{verbatim}\index{\verb+T1_AANSetGrayValues()+}\postcorr
+must be used to set foreground and background color. In conclusion, it turns
+out that each antialiasing level has its own lookup tables which have to be
+initialized as soon as either foreground color, background color or both have
+changed.
+
+Each of the three graylevel sets described above can also be queried by the
+user. This is done using one of the functions
+\precorr
+\begin{verbatim}
+ int T1_AAGetGrayValues( long *pgrayvals)
+\end{verbatim}\index{\verb+T1_AAGetGrayValues()+}\postcorr
+\precorr
+\begin{verbatim}
+ int T1_AAHGetGrayValues( long *pgrayvals)
+\end{verbatim}\index{\verb+T1_AAHGetGrayValues()+}\postcorr
+\precorr
+\begin{verbatim}
+ int T1_AANGetGrayValues( long *pgrayvals)
+\end{verbatim}\index{\verb+T1_AANGetGrayValues()+}\postcorr
+Here, \verb+pgrayvals+ is the start address of an array of \verb+long+-values
+to which the respective grayvalues are written. This memory must thus be
+supplied by the user. These functions will write 5
+(\verb+T1_AAGetGrayValues+), 17 (\verb+T1_AAHGetGrayValues+) and 2
+(\verb+T1_AANGetGrayValues+) respectively to the location given by
+\verb+pgrayvals+. These functions are to be called after initialization. If
+something goes wrong -1 is returned and \verb+T1_errno+ will be set
+accordingly. Otherwise 0 is returned.
+
+
+\subsubsection{Smart Antialiasing}
+\label{smartantialiasing}%
+Antialiasing improves legibility for small sizes but is not that much useful
+for large sizes. To make a compromise between computation time, system
+resources and optical appearance it might be advantageous to use
+\verb+T1_AA_HIGH+ for small sizes, \verb+T1_AA_LOW+ for medium sizes and
+\verb+T1_AA_NONE+ for large sizes. Of course, for large sizes the
+non-antialiasing functions could be used which still need less resources.
+
+In order to free the user from having to switch the antialiasing level explicitly,
+\tonelib\ can be told to do this switching
+automatically, depending on the size requested. This is called {\em Smart
+ Antialiasing}. It is disabled by default and can be toggled by a call to
+\precorr
+\begin{verbatim}
+ int T1_AASetSmartMode( int smart)
+\end{verbatim}\index{\verb+T1_AASetSmartMode()+}\postcorr
+The quantity \verb+smart+ should be either be \verb+T1_YES+ (which corresponds
+to 1) or \verb+T1_NO+ (which corresponds to 0. Notice that the current
+antialiasing level as set by \verb+T1_AASetLevel()+ is not affected by
+this. After having switched off smart antialiasing the former antialiasing
+level is restored. When smart antialiasing is active still has to take care
+for setting the lookup tables after a color change has happened.
+
+The numerical limits of the requested size at which \tonelib\ will switch
+between the different antialiasing levels may be specified using
+\precorr
+\begin{verbatim}
+ int T1_AASetSmartLimits( float limit1, float limit2)
+\end{verbatim}\index{\verb+T1_AASetSmartLimits()+}\postcorr
+Here, \verb+limit1+ is the value of size at which \tonelib\ switches from
+\verb+T1_AA_HIGH+ to \verb+T1_AA_LOW+ and \verb+limit2+ is the value of size
+at which \tonelib\ switches from \verb+T1_AA_LOW+ to \verb+T1_AA_NONE+. The
+default values are 20.0 for \verb+limit1+ and 60.0 for \verb+limit2+. This
+means for sizes smaller than 20.0 \verb+T1_AA_HIGH+ will be used and for sizes
+equal to or greater than 60.0 \verb+T1_AA_NONE+ will be used. The intermediate
+range is covered by \verb+T1_AA_LOW+. These values are suitable for
+applications that display on screen when the device resolution has been left
+at the default value of 72 dpi.
+
+
+\subsubsection{Caching of Antialiased Character Glyphs}
+\label{aacaching}%
+Generally, antialiased glyphs are not cached in \tonelib\ because this
+involves several problems which are hardly to solve. One main problem is shown
+in figure \ref{figure:subpixelpositioning}.
+\begin{figure}
+\centerline{\includegraphics[scale=10]{Tee}}\relax
+\vskip3mm
+\hrule\vskip3mm\small
+\caption{\label{figure:subpixelpositioning} The string ``Tee'' (which is the
+ German word for ``tea'') rastered at 13~bp, using $4\times$ antialiasing.
+ Notice the different representations of the character ``e''.}
+\end{figure}
+Obviously the character ``e'' appears twice in different representations. This
+is intentional and is referred to as sub pixel positioning. In the left ``e''
+the letter is perceived somewhat more to the left with respect to the pixels
+that represent the character. Conversely, the second ``e'' seems to lie
+somewhat more to the right within the pixels. The advantage of this technique
+is that characters can be shifted by some fractional amount of a pixel at low
+sizes.\footnote{The opinions whether this and antialiasing in general is of
+ advantage for readability vary, so please consider this the opinion of the
+ author. } On the other hand the problem is introduced that each character
+can have more than one representation in graylevels, depending on how much
+subpixel shift is needed.
+
+One further problem caused by subsampling is that certain information is
+irreversibly lost in the graylevel representation. For example, if you have a
+graylevel pixel of intensity 50\% (whatever the real color is), then, in case
+of $2\times$ antialiasing, you will know that in the $2\times 2$ input bitmap
+two pixels had been set to foreground, but you would not know {\em which} two
+these had been. But this information is important for concatenating and
+blitting of antialiased bitmaps: it may well happen that two pixels with 50\%
+gray that lie over each other had to produce an output pixel of 50\%, 75\%
+or 100\% gray (where 100\% gray means full foreground intensity).
+
+To avoid these problems, \tonelib\ generally does not cache antialiased
+glyphs. Instead, it works on true bitmaps which are then subsampled at the
+last possible stage to an antialiased glyph. Applications that do not use
+anything more than the functions that yield char bitmaps or bytemaps, could
+profit from caching of antialiased characters. Such applications could specify
+\verb+T1_AA_CACHING+ as an additional ingredient to the \verb+log+ argument of
+the function \verb+T1_InitLib()+ which initializes \tonelib. This is done by
+OR'ing the value of \verb+log+ with \verb+T1_AA_CACHING+ as described in
+\ref{initialization}. If this flag had been specified at initialization time,
+\verb+T1_AASetChar()+ will cache the bytemaps it has generated and will take
+them from cache in future requests.
+
+When caching antialiased glyphs, each size gets up to four distinct cache
+areas, one for bitmaps and one for $1\times$, $2\times$ and $4\times$ subsampled
+bytemaps each. As soon as a string-generating function is called these cached
+antialiased glyphs cannot be used for the reasons discussed before. The
+developer of an application should thus carefully think about whether
+a possibly marginal performance gain is really worth this much higher
+effort. If in doubt, simply check it out. Applications like \verb+xdvi+ which
+place isolated character glyphs on a sheet could use this feature, however, and
+profit from it.
+
+
+\subsection{Interface to Outlines}
+\label{outlines}%
+Although \tonelib\ is meant for generating bitmaps from Type 1 outline fonts,
+there is a set of functions for accessing outline data.
+There are several reasons for this. Firstly, outline
+descriptions are, within the given arithmetic constraints, mathematically exact.
+Secondly and related to the previous point, in certain cases where exact
+subpixel positioning is needed, the functionality of grid-fitting before
+rasterization is needed. This can only be done accurately based on
+outlines. To illustrate this, consider figure \ref{figure:whyoutlines}.
+% -parameters for this figure: size 50.0
+% angle 35
+% arg: --checkConcat[Glyphs|Outlines]
+%
+\begin{figure}[t]
+\hfill
+a) \includegraphics[scale=1.0]{concatglyphs}
+\hfill
+b) \includegraphics[scale=1.0]{concatoutlines}
+\hfill\break
+\vskip3mm
+\hrule\vskip3mm\small
+\caption{\label{figure:whyoutlines}Two concatenated bitmaps, a) concatenation
+ done based on bitmaps by blitting and b) based on outlines and then filled.}
+\end{figure}
+When looking at the concatenated glyph a), it appears that the underline rule
+has a small step where the two words touch.\footnote{Depending on the
+ resolution and quality of the hardcopy you are reading, the effect might be
+ hardly or not all noticeable.} The reason is, that the second part of the
+glyph had been rastered with respect to a pixel coordinate of exactly $(0,0)$.
+Since the start of the second word in the resulting glyph does not exactly
+fall on an integer pixel location, bitmap blitting causes an artifact in the
+visual line of the underlining rule. Strings rotated at angles that are not
+multiples of $90^\circ$ are prone to produce such effects. In contrast the
+concatenated glyph b) does not show such effects because both partial glyphs
+are placed mathematically exact and then filled. Thirdly, if the outline of a
+character is available, it can be used for whatever. For example, the outline
+can be filled by another rasterizer, it can by altered, it can be stroked and
+so on. \tonelib\ makes outlines as they are internally used by the rasterizer
+available. We will discuss how to interprete and access outlines in the
+remainder of this section.
+\subsubsection{Outline Format}
+\label{outlineformat}%
+Before going into implementation details the general structure of a Type 1
+outline is described. We will consider the simple fictive character whose
+outline is shown in figure \ref{figure:generaloutline}.
+\begin{figure}[t]
+\hfill
+\includegraphics[scale=1.0]{outlines}
+\hfill\break
+\vskip3mm
+\hrule\vskip3mm\small
+\caption{\label{figure:generaloutline}The outline of a fictive character.}
+\end{figure}
+We assume that scaling, grid fitting and hinting has already been carried out.
+Then, the outline is given by set of points $P_i$ and segments connecting those
+points. There are:
+\begin{itemize}
+\item Move-segments (type = \verb+T1_PATHTYPE_MOVE+): These are straight
+ segments which cause the current position to be displaced by some offset.
+ Since the starting point of a segment is always implicitly the current
+ point, only one argument is needed, $P_{dest}$, the destination point. In
+ the figure, $P_1$--$P_2$ and $P_{2}$--$P_{12}$ are Move-segments. In this
+ simple case they displace from the characters origin to some starting point
+ of the outline and from the ending point of the outline to the point where
+ the next character would have to be placed (the horizontal escapement).
+\item Line-segments (type = \verb+T1_PATHTYPE_LINE+): These are part of the
+ path to be filled later. In analogy to the Move-segment, one argument,
+ $P_{dest}$, is required for Line-segments. In the figure, $P_{11}$--$P_2$ is
+ a Line-segment.
+\item Bezier-segments (type = \verb+T1_PATHTYPE_BEZIER+): These are curve
+ segments. Their shape is defined by a starting point (always the current
+ point here), an ending point $P_{dest}$ and two control points $P_B$,
+ $P_C$. These four points are the parameters of what is called a third order
+ Bezier spline.\footnote{The mathematical defining equation represents a
+ special case of a Bernstein polynom which was exploited by {\sc Bezier} in
+ the context of solid modeling. The curve especially has the property that
+ it may be approximated efficiently by straight line segments in a few
+ iterations.} The resulting curve has the following
+ properties:
+ \begin{itemize}
+ \item It starts at the first point $P_{current}$.
+ \item It ends at the fourth point $P_{dest}$.
+ \item The line that goes through the points $P_{current}$ and $P_{B}$ is the
+ tangent to the curve from the right side at the starting point $P_{current}$.
+ \item In analogy, the line that goes through the points $P_{C}$ and
+ $P_{dest}$ is the tangent to the curve from the left side at the ending
+ point $P_{dest}$.
+ \item The resulting curve will be enclosed completely by the convex area
+ that is defined by connecting the definition points with straight line
+ segments.
+ \end{itemize}
+ Our fictive character outline in figure \ref{figure:generaloutline}
+ has three Bezier-segments, $P_{2}$--$P_{3}$--$P_{4}$--$P_{5}$,
+ $P_{5}$--$P_{6}$--$P_{7}$--$P_{8}$ and
+ $P_{8}$--$P_{9}$--$P_{10}$--$P_{11}$. Notice that it is easily possible to
+ achieve a smooth tangent transition from one curve-segment to the next by
+ choosing the involved points from a straight line.
+\end{itemize}
+For Type 1 fonts in general, the following rules for interpreting coordinate
+specifications hold:
+\begin{itemize}
+\item All point specifications are relative to the {\em current
+ point}.
+\item For Bezier-segments, $P_{B}$, $P_{C}$ and $P_{dest}$ all are relative to
+ $P_{current}$.
+\item Initially, i.e. when a character outline is started, the current point
+ is at the origin $(0,0)$ of the character.
+\end{itemize}
+Additionally, for this special rasterizer implementation, the following terms
+apply:
+\begin{itemize}
+\item The vertical coordinate is---in contrast to PostScript---inverted, i.e.,
+ the $y$-axis points down.
+\item Once hinted and gridfitted, the outline point coordinates are described
+ in {\em fractional pixels}. A ``fractpel'' is of type \verb+long+ and
+ describes the location in $2^{16}$th fractions of a pixel. To convert from
+ pixel to fractional pixel and vice versa, the macros
+ \verb+T1_TOPATHPOINT(p)+\index{\verb+T1_TOPATHPOINT()+} and
+ \verb+T1_NEARESTPOINT(fp)+\index{\verb+T1_NEARESTPOINT()+} are provided.
+\end{itemize}
+
+Before describing the functions for retrieving outlines the format in which
+outlines are presented in C will be described. A point specification is done
+in the following structure:
+\begin{verbatim}
+typedef struct {
+ T1_int32 x;
+ T1_int32 y;
+} T1_PATHPOINT;
+\end{verbatim}
+\verb+x+ and \verb+y+ are fractional pixels as described above.
+
+An outline is represented by a linked list of structures which describe path
+segments of the type described above.
+Line- and Move-segments are described by the following structure:
+\begin{verbatim}
+typedef struct pathsegment {
+ char type;
+ unsigned char flag;
+ short references;
+ unsigned char size;
+ unsigned char context;
+ struct pathsegment *link;
+ struct pathsegment *last;
+ T1_PATHPOINT dest;
+} T1_PATHSEGMENT;
+\end{verbatim}
+\verb+type+ is either \verb+T1_PATHTYPE_MOVE+ or
+\verb+T1_PATHTYPE_LINE+. \verb+flag+, \verb+references+, \verb+size+ and
+\verb+context+ are internally used by the rasterizer. \verb+link+ is a pointer
+to the next segment structure or \verb+NULL+ in case it is the last structure
+in the list. Finally, the \verb+last+-entry is a pointer to
+the last structure in the linked list. \verb+last+ is only set in the first
+segment and is reset to \verb+NULL+ in the remaining segment structures.
+A Bezier-segment is described by the following structure:
+\begin{verbatim}
+typedef struct bezierpathsegment {
+ char type;
+ unsigned char flag;
+ short references;
+ unsigned char size;
+ unsigned char context;
+ T1_PATHSEGMENT *link;
+ T1_PATHSEGMENT *last;
+ T1_PATHPOINT dest;
+ T1_PATHPOINT B;
+ T1_PATHPOINT C;
+} T1_BEZIERSEGMENT;
+\end{verbatim}
+Obviously, the format is identical to that for straight path segments, extended
+by the entries \verb+B+ and \verb+C+ which specify the control points as
+described earlier in this subsection.
+The common return type for the outline retrieving functions is a pointer to
+\verb+T1_OUTLINE+, which is in fact identical to \verb+T1_PATHSEGMENT+. This
+purely for convention. Although it is quite unlikely, an outline might start
+with a Bezier-segment. To access Bezier-segment elements, a cast must be used.
+
+
+\subsubsection{Using Outlines}
+\label{usingoutlines}%
+\tonelib\ provides three functions for retrieving outlines. The first is
+\precorr
+\begin{verbatim}
+ T1_OUTLINE *T1_GetCharOutline( int FontID, char charcode,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_GetCharOutline()+}\postcorr
+The meaning of the arguments is as in the \verb+T1_SetChar()+-function.
+Notice that the size specification is also required here. Outlines are, by
+their nature in Type~1, generally defined in a $1000\times 1000$ grid and then
+scaled down by the fontmatrix to 1 bp. The space is known as the
+charspace. The reason for specifying a size at this place, instead of scaling
+the outline later, is, that hinting is performed according to the scaled
+outline. The returned outline is then hinted for the given size. If necessary,
+it may still be scaled later.
+
+The outline for a complete string can be retrieved by
+\precorr
+\begin{verbatim}
+ T1_OUTLINE *T1_GetStringOutline( int FontID, char *string, int len,
+ long spaceoff, int modflag,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_GetStringOutline()+}\postcorr
+The meaning of the arguments is as in \verb+T1_SetString()+.
+
+Finally the ``outline'' for a displacement is available by the function
+\precorr
+\begin{verbatim}
+ T1_OUTLINE *T1_GetMoveOutline( int FontID, int deltax, int deltay, int modflag,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_GetMoveOutline()+}\postcorr
+This function is intended to be used for concatenation of outlines. It needs
+all the arguments because some quantities which are given on the font level
+are required for constructing the outline. \verb+deltax+ and \verb+deltay+ are
+the horizontal and vertical displacement measured in charspace units. From the
+\verb+modflag+-argument, especially the underlining parameters are
+evaluated. Although $x$- and $y$-displacement may be specified, the resulting
+outline is still subject to scaling with \verb+size+ and transformation
+according to \verb+transform+.
+
+Arbitrary outlines may be concatenated by using the function
+\precorr
+\begin{verbatim}
+ T1_OUTLINE *T1_ConcatOutlines( T1_OUTLINE *path1,
+ T1_OUTLINE *path2)
+\end{verbatim}\index{\verb+T1_ConcatOutlines()+}\postcorr
+Notice that this concatenation is done with high precision so that we can
+expect that visual artefacts are reduced to a minimum (remember figure
+\ref{figure:whyoutlines}).
+
+Scaling of outlines is done by the function
+\precorr
+\begin{verbatim}
+ T1_OUTLINE *T1_ScaleOutline( T1_OUTLINE *path, float scale)
+\end{verbatim}\index{\verb+T1_ScaleOutline()+}\postcorr
+\verb+T1_ScaleOutline+ does nothing more than linearly scaling the coordinate
+data with \verb+scale+ and storing the result in fractional pixels. No care is
+taken for hinting (see above).
+
+An outline may be duplicated using the function
+\precorr
+\begin{verbatim}
+ T1_OUTLINE *T1_CopyOutline( T1_OUTLINE *path)
+\end{verbatim}\index{\verb+T1_CopyOutline()+}\postcorr
+This is a direct entrypoint into the rasterizer. It works by allocating and
+duplicating each segment of \verb+path+. This function may be useful if one
+wants to do several things with one outline because the process of filling an
+outline also consumes that outline.
+
+An outline that that a user decides not to fill can be destroyed by the
+function
+\precorr
+\begin{verbatim}
+ void T1_FreeOutline( T1_OUTLINE *path)
+\end{verbatim}\index{\verb+T1_FreeOutline()+}\postcorr
+It iterates through the segment list and frees each segment.
+This must not be done after filling an outline because the filling process
+consumes the outline!
+
+Finally, there are two functions that produce glyphs from outlines, namely
+\precorr
+\begin{verbatim}
+ GLYPH *T1_FillOutline( T1_OUTLINE *path, int modflag)
+\end{verbatim}\index{\verb+T1_FillOutline()+}\postcorr
+and
+\precorr
+\begin{verbatim}
+ GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag)
+\end{verbatim}\index{\verb+T1_AAFillOutline()+}\postcorr
+Their usage does not need any explanation. The value of \verb+modflag+ is
+required for {\em Right-To-Left} typesetting. If the bit
+\verb+T1_RIGHT_TO_LEFT+ is set, the dimension of the glyph are recomputed
+accordingly. All other bits from \verb+modflag+ are ignored such that in the
+usual case of {\em Left-To-Right} typesetting simply 0 can be specified.
+While \verb+T1_FillOutline()+ produces bitmaps of depth 1,
+\verb+T1_AAFillOutline()+ produces antialiased bytemaps of the current
+graphics depth. It should be mentioned that Smart Antialiasing (see
+\ref{smartantialiasing}) does not work with this function. The reason is that
+\tonelib\ has no notion of the quantity ``size'' when it gets the outline to
+process. Hence, Smart Antialiasing can't work in this case. As noted above,
+the outline is consumed by the filling functions so that there is no need to
+free it explicitly.
+
+
+\subsubsection{Manipulation of Outlines}
+\label{outlinemanipulation}%
+\tonelib\ provides some limited further functionality to process
+outlines. First of all, a user would expect a character to be defined in a
+coordinate system in which $x$ points to the right and $y$ points up. Further,
+a representation of the glyph where all points are specified in absolute
+coordinates would be advantageous for manipulating outline-points. This is
+because most transformations, linear or nonlinear, need to have an absolute
+$x$-value to compute an $y$-value or vice versa. The function
+\precorr
+\begin{verbatim}
+ void T1_AbsolutePath( T1_OUTLINE *rpath)
+\end{verbatim}\index{\verb+T1_AbsolutePath()+}\postcorr
+does exactly what has been described just before, (a) conversion of relative
+coordinates into absolute coordinates and (b) inverting the
+$y$-direction.
+
+Once a path has been converted into an absolute path, it is
+suitable for possibly nonlinear manipulation.\footnote{A linear manipulation
+ of path points would rather be realized using the transformation matrices as
+ described in \ref{transformations}.}
+As an example of what can be done, have a look at figure \ref{figure:manipulation}.
+\begin{figure}[t]
+\hfill
+\includegraphics[scale=1.0]{manipulate}
+\hfill\break
+\vskip3mm
+\hrule\vskip3mm\small
+\caption{\label{figure:manipulation}A string with nonlinearly scaled coordinates.}
+\end{figure}
+The string displayed has been generated by essentially applying the
+transformation $y'= y(1+cx^2)$, with appropriate $c$. To allow such
+transformations by the user, \tonelib\ provides the function
+\precorr
+\begin{verbatim}
+ void T1_ManipulatePath( T1_OUTLINE *path,
+ void (*manipulate)(long *x,long *y, int type))
+\end{verbatim}\index{\verb+T1_ManipulatePath()+}\postcorr
+Here, \verb+path+ should be an absolute path as described above. Notice that
+\tonelib\ has no way to check whether the path is relative or absolute, this
+is in the responsibility of the user. The second argument is a pointer to a
+function that has a return type of \verb+void+ and that expects three
+arguments: two pointers to \verb+long+-values one integer \verb+type+.
+\verb+T1_ManipulatePath()+ works by iterating through all outline points of
+\verb+path+ and calling the function \verb+*manipulate()+ for each outline
+point. When the function \verb+*manipulate()+ is called, \verb+x+ and \verb+y+
+are pointers to the $x$- and $y$-coordinates respectively of the outline point
+to be processed. That way, \verb+*manipulate()+ can alter the outline
+points arbitrarily. The \verb+type+-argument will be set to the segment type
+by \verb+T1_ManipulatePath()+. As described earlier, the segment type can be
+one of \verb+T1_PATHTYPE_MOVE+, \verb+T1_PATHTYPE_LINE+ and
+\verb+T1_PATHTYPE_BEZIER+. Of course, the function \verb+manipulate()+ has to
+be written by the user. To make it clear, we consider a function which
+stretches an outline horizontally by 1.5. The code fragment for this could be:
+\begin{verbatim}
+ .
+ .
+ .
+void h_stretch( long *x, long *y, int type)
+{
+ double dx;
+
+ dx=(double)*x;
+ dx *=1.5; /* scale x coordinate by 1.5 */
+ *x=(long)dx;
+}
+ .
+ .
+ .
+T1_OUTLINE *path=NULL;
+path=T1_GetStringOutline(FontID,(char *)SomeString,
+ 0,0,T1_KERNING,20.0,NULL);
+T1_AbsolutePath( path);
+T1_ManipulatePath( path, &h_stretch);
+T1_RelativePath( path);
+glyph=T1_FillOutline( path, Modflag);
+ .
+ .
+ .
+\end{verbatim}
+
+As the example above already has shown, an absolute path, manipulated or not,
+must converted back to a relative path before it finally can be interpreted by
+the rasterizer. This conversion is done using
+\precorr
+\begin{verbatim}
+ void T1_RelativePath( T1_OUTLINE *apath)
+\end{verbatim}\index{\verb+T1_RelativePath()+}\postcorr
+As already mentioned with respect to \verb+T1_AbsolutePath()+, \tonelib\ cannot
+check whether the \verb+path+ specified is really absolute. The user has to
+take care for this.
+
+A few general comments about manipulating paths are appropriate. Although the
+mechanism implemented by \verb+T1_ManipulatePath()+ allows arbitrary
+manipulation of path points, one must be very careful in doing so. Figure
+\ref{figure:outlineproblems} exhibits some of the problems that may arise. A text
+string aligned to a sine function is displayed.
+%- parameters of figure: string: Text aligned along a sine wave function
+% size: 50
+% kerning on
+\begin{figure}[t]
+\hfill
+a) \includegraphics[scale=0.5]{outlineproblems1} % period=500,
+\hfill\break
+
+\hfill
+b) \includegraphics[scale=0.5]{outlineproblems2} % period=200
+\hfill\break
+
+\hfill
+c) \includegraphics[scale=0.5]{outlineproblems3} % period=100
+\hfill\break
+
+\hfill
+d) \includegraphics[scale=0.5]{outlineproblems4} % period=50
+\hfill\break
+
+\hfill
+e) \includegraphics[scale=0.5]{outlineproblems5} % period=500
+\hfill\break
+\hrule\vskip3mm\small
+\caption{\label{figure:outlineproblems}The string ``Text aligned along a sine wave
+ function'' using a period of (a) 500, (b) 200, (c) 100, (d) 50 pixels and
+ (e) again 500 pixels with underlining. The sine amplitude was 30 pixels
+ (in screen resolution).}
+\end{figure}
+In part (a), a pleasing smooth text flow is shown and this also applies for
+(b) where the period of the sine has been reduced to 200 pixels. In (c), where
+the period has been reduced to 100 pixels, some artefacts already show up. For
+example, the top bar of the uppercase ``T'' has noticeable variance in
+thickness. In (d), where the period has been reduced again, the result is
+hardly readable. Another artefact appears in figure
+\ref{figure:outlineproblems} (e): since the underlining rule is defined by
+four points only, these points and nothing else is transformed with the result
+that the out coming line is still straight and not curved as we would
+like. From this discussion we conclude, that such transformations can only be done
+with reasonable results if the maximum distance between the outline points of
+a shape is small compared to the variance of the outline points that the
+transformation results in. This rule, although being very fuzzy and
+non-mathematical, should give a good estimation of which transformations are valid.
+
+Another completely independent topic is that, at the level where \tonelib\
+provides outlines, their representation is strictly descriptive with respect
+to points and their connections. There are no such things like
+\verb+closepath+-segments which would take care that a path is really closed,
+no matter what the transformation had been. This means, that identical points
+$P_1 = P_2$ have to be transformed to identical points $P_1'=P_2'$, no matter
+where they appear in the outline. However,
+if the transformation is done by by a function $(x',y')=f(x,y)$ as suggested,
+this should never be a problem.
+
+Finally, one should remember that all computations in the user function
+\verb+manipulate()+ have to be done in units of fractional pixels, rather than in
+pixels. When designing a sine wave as in figure \ref{figure:outlineproblems},
+this must be taken into account with respect to periodicity.
+
+\subsection{Logical Fonts}
+\label{logicalfonts}%
+It sometimes may be necessary to have a font and an extended or slanted
+variant simultaneously. To enable such configurations without needing to
+declare the fonts two or even more times in the font database file,
+\tonelib\ provides the function
+\precorr
+\begin{verbatim}
+ int T1_CopyFont( int FontID)
+\end{verbatim}\index{\verb+T1_CopyFont()+}\postcorr
+It copies the top level data structure of the font given by \verb+FontID+ to
+another location. The newly created font refers in fact to the same
+physical memory as the font \verb+FontID+ as far as Type 1 and AFM data are
+concerned. However, no size specific data is copied from font \verb+FontID+,
+you can thus do with the new font whatever you want to. It will get its own
+size-specific memory area when the first bitmap is generated using its ID.
+
+It is also possible to reencode a copied font without affecting the
+original font. This is possible because a logical font gets its own
+mapping tables. This allows configurations with one font at different
+encodings simultaneously.
+
+In order to keep track that another font is referring to data from
+font \verb+FontID+, a reference counter is managed for every font. The
+reference counter for font \verb+FontID+ is incremented after a call to
+\verb+T1_CopyFont()+.
+
+If the font \verb+FontID+ is not loaded into memory, the function returns $-1$.
+
+Only {\em physical} fonts---those fonts defined in the font database
+file or added via \verb+T1_AddFont()+---may be copied to another
+font. If a user tries to copy a font
+which is already logical, the function returns $-2$.
+
+If no memory is available for the new font the function return $-3$. But
+this should not happen.
+
+If all goes the right way, \verb+T1_CopyFont()+ returns an integer---lets call
+it \verb+new_ID+---which is from now on a valid font identification number.
+
+\subsection{Missing or Invalid AFM Files}
+\label{missingafmfiles}%
+\tonelib\ heavily relies on AFM information every time the relative position
+of bitmaps is of importance. Because AFM information is of high resolution,
+accumulating positioning errors are avoided in contrast to what the X11 text
+drawing functions do. On the other hand, there are many freely available
+Type~1 font programs that come without AFM files. This problem has been
+addressed in \tonelib\ 0.5. \tonelib\ is now able to generate AFM information
+on the fly and it even can generate AFM files from Type 1 font files.
+
+\subsubsection{Remarks on AFM Files}
+\label{remarksonafmfiles}%
+Information in AFM files is only relevant for placing character glyphs but not
+for rasterizing. The metric values are based on the same coordinate system as
+used in Type 1 font files, the so called {\em charspace coordinate system}.
+One unit is $1/1000 \mbox{bp}$ when a font is not scaled or scaled to 1~bp,
+respectively.
+
+Information in AFM files can divided into several groups:
+\begin{enumerate}
+\item {\em Global Font Information:} This information is generally not needed
+ to place characters. Furthermore, most of this information is also
+ contained in a Type 1 font file itself. This area is thus of marginal
+ importance for \tonelib.
+\item {\em Character Width's and Bounding Boxes:} These both are crucial for
+ accurately placing the character glyphs. Fortunately, these are dimensions
+ are exactly defined by the character outlines themselves. It is thus
+ possible to compute them spending some computational effort.
+\item {\em Ligature Information:} For \ae sthetic reasons, certain character
+ groups are often replaced by ligatures and a font file may define several
+ ligatures. It is however not intuitively clear what character groups should
+ be replaced by what ligatures.\footnote{Well, at least not without some
+ expert knowledge like ``I know this ligature's name is `f{}i', so I
+ replace every series of `f' and `i' with it.''}
+ Fortunately, ligatures are not crucially needed for quality typesetting.
+\item {\em Pair Kerning Information:} This information is quite important for
+ \ae sthetic reasons but it is entirely independent from the outline
+ descriptions and can thus not be extracted from a font file.
+\item {\em Track Kerning Information:} This information gives hints of how to
+ typeset text generally closer or wider at varying point sizes.
+ \tonelib\ does not use track kerning
+ information and I personally do not consider using track kerning a good
+ typographical style.
+\item {\em Composite Character Data:} This is needed to construct characters
+ from two single characters. Typical examples are accented
+ characters. \tonelib\ currently does not deal with composite
+ characters. Most of the composite characters needed are already existent
+ internally.
+\end{enumerate}
+To come to a conclusion, for our purposes it is sufficient to generate the
+characters' widths and their bounding boxes and we have all information we
+need to construct string glyphs.
+
+\subsubsection{Generation of AFM Information}
+\label{generatingafminfo}%
+Next lets consider how to generate the AFM information. It is a series of
+entirely independent steps:
+\begin{itemize}
+\item When we generate AFM information, we want to do this once and forever
+ when the font is loaded. Consequently all characters, have to be examined,
+ not only those that are currently encoded.
+ We start by fetching all character names the font defines. This done with
+ \verb+T1_GetAllCharNames()+ (see \ref{characterencodingrelation}). This
+ yields a list of possibly more than 256 character names.
+\item Each of the character addressed by the names above is now rastered at
+ size 1000~bp. By rastering at 1000~bp we match exactly the charspace
+ coordinate system which the character outline descriptions are
+ based on. Width and bounding box are easily examined and saved at
+ appropriate places.
+\item The kerning pair area and ligatures are explicitly set to zero.
+\end{itemize}
+At the end of this procedure, there is a data area identical to what would
+have been built when reading an AFM file without kerning-section and ligature
+specifications.
+
+The decision of building AFM data is done on the fly without any user
+interaction. Here is what happens on the metrics-area when loading a font:
+\begin{itemize}
+\item \tonelib\ tries to open an AFM file reading metrics and kerning pair
+ information.
+\item If this does not succeed, it tries to rescan the AFM file in a {\em
+ sloppy} way, only requesting metrics information.
+\item If this fails too, metrics information is generated on the fly as
+ described above.
+\end{itemize}
+It should be noted that generating metric information the way described above
+takes significant amount of time since every character has to be rastered at
+1000~bp.
+
+%~derekn
+If the \verb+T1_NO_AFM+ flag is passed to \verb+T1_InitLib()+,
+\tonelib\ will neither attempt to open AFM files nor generate AFM
+information. This is useful to speed up applications which do not
+need the metrics data. However, this slows down access to certain features,
+mostly related to the string processing functions, and completely disables the
+features that only are contained in AFM files (like kerning and ligatures).
+
+Obivously, the \tonelib\ functions that use
+the AFM data will not work correctly in this case and should not be
+used.
+%~derekn
+
+\subsubsection{Writing AFM Files}
+\label{writingafmfiles}%
+In order to reduce the situations where AFM data has to be generated on the
+fly, \tonelib\ provides the following function:
+\precorr
+\begin{verbatim}
+ int T1_WriteAFMFallbackFile( int FontID)
+\end{verbatim}\index{\verb+T1_WriteAFMFallbackFile()+}\postcorr
+It writes an AFM file for the font identified by \verb+FontID+. This is done
+executing the following steps:
+\begin{enumerate}
+\item The AFM filename is constructed by taking the fontfilename, cutting off
+ the extension and appending \verb+.afm+.
+\item A pointer array of size $256 + n$, where $n=\mbox{number of
+ characters}$, is
+ allocated and set to NULL. The leading 256 entries are reserved to point to
+ encoded
+ characters' metrics. The remaining entries are intended to point to metrics
+ of unencoded characters. We see that this is a worst case speculation: The
+ pointer array is large enough for the extremely unusual case that no
+ characters are encoded.
+\item Next the function steps through all character names and gets their
+ encoding index $i$. If $i\geq0$, the character is encoded and the $i$th
+ pointer element in the array is set to point to the metrics of this
+ character. If $i=-1$, the character is not encoded and the lowest unused
+ pointer in the second area is set to point to the metrics of this character.
+\item Next the AFM file is opened and the header information as well as a
+ comment by \tonelib\ are written. There are 5 entries that are not trivially
+ to extract from the font file: \verb+Ascender+, \verb+Descender+,
+ \verb+XHeight+, \verb+CapHeight+ and \verb+EncodingScheme+. Their
+ discussion is deferred to later in this section.
+\item After the header, the metrics information is written in the format
+ required for AFM files. This is done by stepping through the pointer array
+ until the first NULL pointer in the unencoded characters' area is
+ reached.
+\end{enumerate}
+The result is a list of char-dimensions entries which is leaded by the encoded
+characters in ascending order of their encoding index, followed by a list of
+unencoded characters in alphabetical order.
+
+As seen above, the current encoding takes influence on the order the
+characters appear in the AFM file. One should thus not produce AFM files from
+reencoded fonts, although this is possible. This yields non-standard AFM files
+and gives no performance gain, even not when used with \tonelib.
+
+The entry \verb+EncodingScheme+ is not always contained in the fontfile
+itself. It is generated by comparison between encodings. \tonelib\ has only one
+builtin encoding, \verb+AdobeStandardEncoding+, which
+is recognized. Every further encoding, defined
+by the font itself or applied by a user, is always marked as
+\verb+FontSpecific+.
+
+The entries \verb+CapHeight+, \verb+XHeight+ \verb+Ascender+ and
+\verb+Descender+ are not fully determined by a Type 1 font file
+although they are existent with high probability. As rough definitions
+can be considered:
+\begin{itemize}
+\item \verb+CapHeight+: The height a capital `H' reaches to.
+\item \verb+XHeight+: The height a lower case `x' reaches to.
+\item \verb+Ascender+: The height a lower case `d' reaches to.
+\item \verb+Descender+: The depth a lower case `p' reaches down.
+\end{itemize}
+It is obvious that these definitions make only sense in certain font
+definitions. For example, a musical notation font might not necessarily
+define an ascender since no capital letters are provided.
+
+In the Type 1 notion these dimensions are referred to as top alignment
+and bottom alignment values respectively. The corresponding alignment
+``zone'', i.e., an interval, is defined by the alignment height and a
+corresponding overshoot position. The alignment zones are specified in
+the BlueValues array for top alignment zones and the OtherBlues
+array for bottom alignment zones. A Type 1 font may define up to 7 top
+alignment zones and 5 bottom alignment zones. It is unfortunately not
+defined which of these alignment zones refer to \verb+CapHeight+,
+\verb+XHeight+, \verb+Ascender+ and \verb+Descender+.
+
+\tonelib\ tries to get out of this dilemma by making a best guess:
+\begin{enumerate}
+\item For each of the characters `H', `x' and `d' it fetches the
+ largest y-value and compares the result with each alignment zone in
+ the BlueValues array. The alignment zone closest to the observed
+ character dimension is assumed a candidate for the respective
+ quantity.
+\item It checks whether the difference between the alignment zone just
+ selected and the character dimension is within a certain tolerance
+ area. This tolerance width is $\pm 30$ charspace units. If the
+ result is positive, the quantity in question is assigned the
+ numerical value of the standard height (not the overshoot) of this
+ alignment zone. Since we are currently considering top
+ alignment zone, this will always be the lower value.
+\item If the value is out of tolerance or the font even does not
+ define the character, the corresponding entry in the AFM file is left
+ out.
+\item A comparable procedure is then done for \verb+Descender+, this
+ time examining the OtherBlues array.
+\end{enumerate}
+Note that if the values do not seem to be correct, the corresponding
+lines can be removed from the AFM file without doing any harm. These
+entries are optional only.
+
+\verb+T1_WriteAFMFallBackFile()+ can indicate a number of error
+conditions by returning appropriate values. These are:
+\begin{itemize}
+\item \verb+0+: No error occurred, AFM file was successfully written.
+\item \verb+-1+: The AFM data for the font in question has been
+ generated by reading an AFM file, there is no need to generate a new
+ one. If you really want to force an AFM file to be written, take
+ care that \tonelib\ does not find an AFM file when loading the
+ font.
+\item \verb+-2+: The font in question is not loaded.
+\item \verb+-3+: The font in question is loaded but AFM data has not
+ been generated. This definitely is an error condition because it
+ indicates not all characters of the font could be rastered, either
+ because the font file is damaged or because there were
+ insufficient system resources. In any case the application should
+ generate a logfile and this file should be examined.
+\item \verb+-4+: The AFM file could not be opened. This could be a
+ permission problem or something else. The file is always opened in
+ the current working directory.
+\item \verb+-5+: The file has successfully been opened but there was
+ an error writing to the file.
+\item \verb+-6+: A memory allocation error occurred. This should not
+ happen because it indicates there are no system resources.
+\end{itemize}
+
+
+
+\subsection{Font Subsetting}
+\label{Font Subsetting}%
+When applications have to setup Postscript files for printing, the problem is
+that these files often grow large. Each font which is not known to the
+Postscript interpeter, i.e., usually each font that is not part of the set of
+35 standard fonts, has to be downloaded as part of the file. The size of a
+particular font file often can be reduced by font subsetting, because usually
+only a small subset of the available character descriptions is actually
+needed.
+
+
+
+\subsubsection{Font File Organization and Subsetting}
+\label{Font File Organization and Subsetting}%
+
+Each Type~1 font file is a special Postscript program defining three
+Postscript-dictionaries:
+\begin{itemize}
+\item \verb+FontInfo+\\
+ Global font information like font and family name and encoding scheme is
+ stored here. This data is required even for a subsetted font. However, as
+ will be described later, the encoding scheme may be reduced to those
+ characters that are in the desired subset.
+\item \verb+Private+\\
+ This dictionary is in the encrypted part of the file and stores global font
+ data too. This data includes quantities parameterizing hinting and
+ subroutines that might be called by the character descriptions. This data is
+ required also.
+\item \verb+Charstrings+\\
+ For each character defined in the font a binary and encrypted byte string
+ (charstring) coding the character outline is stored in this dictionary. The
+ number of charstrings may be considerably larger than the size of the
+ encoding vector. This dictionary usually constitutes the largest part of the
+ font file and, consequently, it is the place to reduce storage requirements.
+\end{itemize}
+The main principle in subsetting is to decrypt the font and reorganize it,
+leaving out charstrings that are not required in the current context. For
+example, if a document uses only the character 'A' from the font Garamond,
+then this font may be subsetted preserving the character outline for 'A'
+only. The resulting file, which will be much smaller than the original file,
+can then be included verbatim into the Postscript file containing the
+document. At the same time, optionally, the encoding vector could be redefined
+to contain only the entry for 'A' at the appropriate location and
+\verb+.notdef+ otherwise.
+
+A still more consequent subsetting would involve leaving out those subroutines
+from the \verb+Private+-dictionary that are not needed by the preserved
+charstrings. Leaving out some subroutines on the other hand would require to
+interprete and check all charstrings for the subroutines they require and all
+preserved charstrings would have to be adapted to the reorganized index. Since
+the subroutines usually do not consume that much memory this is not considered
+worth the effort.
+
+\subsubsection{Functions for Subsetting}
+\label{Functions for Subsetting}%
+
+There are two ways to obtain a subsetted font from an existing file. The user
+can (1)~do it step by step which requires reading, decrypting, reorganizing
+and encrypting of the font file, and (2)~use a high level function to do it
+without having to know anything about the details. For font subsetting,
+\tonelib\ provides the function
+\precorr
+\begin{verbatim}
+ char *T1_SubsetFont( int FontID, char *mask,
+ unsigned int flags, int linewidth,
+ unsigned long maxblocksize,
+ unsigned long *bufsize)
+\end{verbatim}\index{\verb+T1_SubsetFont()+}\postcorr
+It returns a pointer to a memory block containing the subset data. The memory
+is allocated in the function and it is the responsability of the user to
+free this memory. The parameter \verb+FontID+ as usual is used to tell
+\tonelib\ which file or font is to be used for the operation.
+
+\verb+mask+ points to an array of characters which has to be setup by the
+user. This array must comprise exactly 256 characters and for the index of
+each non-zero entry the charstring resulting from the current encoding is
+preserved in the subsetted font. To give an instance, if the subset should
+consist in the character 'A' only and we assume the current font specifies
+\verb+StandardEncoding+, then the \verb+mask+-array should be initialized to
+zeroes and \verb+mask['A']=1+ or some other non-zero value.
+
+The \verb+flags+ parameter allows to control the subsetting operation. It
+usually should be set to \verb+T1_SUBSET_DEFAULT+. In this case, the subset is
+ASCII-hex encrypted, that is, as in a \verb+.pfa+-file. It is thus well-suited
+for the verbatim insertion into a Postscript file. If the source font file in
+question defines the encoding to be \verb+StandardEncoding+, the encoding is
+not adjusted to the subset specified by \verb+mask+. By contrast, if the font
+defines a \verb+FontSpecific+ encoding, this encoding will be adjusted
+according to the subset. This default behavior---which mimics what
+e.g.~\verb+dvips+ seems to do---may be overwritten by OR'ing \verb+flags+ with
+\verb+T1_SUBSET_FORCE_REENCODE+, which leads to adjusting the encoding vector
+in any case. Conversely, reencoding can be suppressed unconditionally by OR'ing
+\verb+flags+ with \verb+T1_SUBSET_SKIP_REENCODE+. If \verb+flags+ is OR'ed
+with \verb+T1_SUBSET_ENCRYPT_BINARY+, a buffer of mixed ASCII, binary and EOF
+segment types is created and encryption is performed in binary mode. The
+buffer's contents in this case represents a valid compact binary format file
+(\verb+.pfb+). It is considerably smaller than a comparable \verb+.pfa+-file
+but it is not suitable to be inserted into Postscript files.
+
+The parameter \verb+linewidth+ is used to specify the line length if ASCII-hex
+encryption is used. Since---according to the Adobe speification---the first 8
+encrypted bytes have to be stored one after the other without interspersed
+white space, the allowed range of \verb+linwidth+ is limited to 8 at the lower
+bound. It is also limited at the upper bound by 1024, because writing that
+long lines does not preserve the readability of the produced file.
+
+The parameter \verb+maxblocksize+ is important if binary encryption is
+used. Then, this value specifies the maximum allowed segment size. For similar
+reasons as discussed above, this value must be equal to or larger
+than~4. There is no limit at the upper bound, because the maximum segment size
+can be derived automatically follows from the target font file.
+
+\verb+bufsize+ must be a valid pointer to an \verb+unsigned long int+ in the
+context of the calling function. The size of the memory area to which the
+function returns a pointer, is written to \verb+bufsize+. The calling function
+needs this number to process to buffers contents, e.g., to write it to a file.
+
+If errors occur in this function, \verb+NULL+ is returned and \verb+T1_errno+
+is set to an appropriate value. If the font corresponding to \verb+FontID+ is
+not loaded, \verb+T1_errno+ is set to \verb+T1ERR_INVALID_FONTID+.
+\verb+T1ERR_INVALID_PARAMETER+ is used to indicate that one of the further
+arguments is out of range. \verb+T1ERR_ALLOC_MEM+ and
+\verb+T1ERR_FILE_OPEN_ERR+ may also be set in this function. Finally,
+\verb+T1ERR_UNSPECIFIED+ may also be set if the charstring definition for
+\verb+.notdef+ could not be located. This is considered to be a fatal error.
+
+An example of how to use the function described above is given in the file
+\verb+subset.c+ in the \verb+examples/+ subdirectory of the distribution.
+
+\subsubsection{Further Functions for Subsetting}
+\label{Further Functions for Subsetting}%
+
+For the sake of completeness, there are a few further functions in the
+subsetting module. The function
+\precorr
+\begin{verbatim}
+ char *T1_GetCharString( int FontID, char *charname, int *len)
+\end{verbatim}\index{\verb+T1_GetCharString()+}\postcorr
+returns a pointer to the charstring of the character with name \verb+charname+
+of the font identified by \verb+FontID+. In case of an error, \verb+NULL+ is
+returned and \verb+T1_errno+ is set to \verb+T1ERR_ALLOC_ERR+ if there was not
+enough memory for storing the charstring, \verb+T1ERR_UNSPECIFIED+ if the
+charstring was not found in the dictionary, \verb+T1ERR_INVALID_FONTID+ if the
+font in question is not loaded or \verb+T1ERR_INVALID_PARAMETER+ if
+\verb+charname+ or \verb+len+ is \verb+NULL+. The memory pointer which is
+returned is managed static in this function. Thus, it should not be free'd by
+the user, or, in case the memory block is free'd, the pointer must be set to
+\verb+NULL+.
+
+In order to decrypt a charstring, the \verb+lenIV+-value of the font in
+question must be known. It can be obtained using the function
+\precorr
+\begin{verbatim}
+ int T1_GetlenIV( int FontID)
+\end{verbatim}\index{\verb+T1_GetLenIV()+}\postcorr
+The returned value indicates how many leading random bytes are used for
+charstring encryption in the font \verb+FontID+. According to an undocumented
+Adobe convention, the value $-1$ is also valid and indicates that the
+charstring is not encrypted at all. Hence the return value $-2$ is used to
+indicate an error. In this case, \verb+T1_errno+ is set to
+\verb+T1ERR_INVALID_FONTID+, which indicates that the font in question is not
+loaded.
+
+
+\subsection{Composite Characters}
+\label{subsec:CompositeCharacters}%
+
+This section discusses the composite character information that may be present
+in AFM files and how this information is represented, accessed and handled in
+\tonelib.
+
+\subsubsection{General remarks}
+\label{subsubsec:General Remarks}%
+
+Composite characters are defined by the fact that they are constructed from at
+least two independent symbols. In practice there frequently appear two
+components, a base character and an accent, e.g., as in ``\"A''. Usually, the
+accents (or secondary pieces) of a composite character are typeset first
+without causing any horizontal escapement and finally the base character
+itself is typeset and causes its escapement to become the escapement of the
+whole composite character. Although some people recommend that the character
+definition of an accent itself should not cause escapement, this generally is
+not respected in real fonts and \tonelib\ does not require this condition to
+be fulfilled.
+
+In order to construct a composite character the characters to be put together
+have to be known and metric information about how to put these characters
+together has to be known too. \tonelib\ defines two structures as new data types
+for this purpose. The first is
+\begin{verbatim}
+typedef struct
+ {
+ int compchar;
+ int numPieces;
+ T1_COMP_PIECE *pieces;
+ } T1_COMP_CHAR_INFO;
+\end{verbatim}
+Here, \verb+compchar+ is the index in the encoding vector of the composite
+character. \verb+numPieces+ specifies how many pieces are
+required to build the composite character. The third element is a pointer to
+an array of type \verb+T1_COMP_PIECE+, whose actual length is given by
+\verb+numPieces+: Each piece (or symbol) receives one slot in this
+array. \verb+T1_COMP_PIECE+ is defined by
+\begin{verbatim}
+ typedef struct
+ {
+ int piece;
+ int deltax;
+ int deltay;
+ } T1_COMP_PIECE;
+\end{verbatim}
+It contains the encoding index of the symbol in \verb+piece+ and information
+where to place this symbol with respect to the composite character's orgin in
+\verb+deltax+ and \verb+deltay+. The first slot is filled by what I refer to
+as the base character, it is the one that causes spacing. As can be seen in
+these data structures, composite character handling in \tonelib\ is based on
+encoding indices rather than on character names, which, by contrast, are used
+for the definition of composite character data in AFM files.
+
+The presence of composite character information in AFM files does not tell
+anything about whether a font has an internal definition of this character or
+not. For example, the font \verb+TimesRoman+ internally defines the CharString
+\verb+Adieresis+ and hence this font provides the letter ``\"A'', assuming an
+appropriate encoding, without any knowledge about composite
+characters. However, the file \verb+TimesRoman.afm+ may still
+provide composite character information for \verb+Adieresis+, just to tell an
+application that this glyph consists of more elementary pieces and how to
+construct it. On the other hand, if \verb+TimesRoman+ had no
+CharString-definition for \verb+Adieresis+, the composite character
+information of \verb+Adieresis+ provides an application with enough
+information to be able construct \verb+Adiereis+ from the elementary units
+\verb+A+ and \verb+dieresis+ that the font provides.
+
+
+\subsubsection{Accessing Composite Character Data}
+\label{subsubsec:Accessing Composite CHaracter Data}%
+
+This section describes a few functions that provide access to composite
+character data of a font file. The data they return can be considered a
+mapping of the original AFM data with respect to the current encoding. As
+usual, \verb+FontID+ must be the identifier of a font loaded into memory,
+otherwise an appropriate error indicator is returned. The functions described
+in the following may also return some other error types.
+
+Firstly,
+\precorr
+\begin{verbatim}
+ int T1_GetNoCompositeChars( int FontID)
+\end{verbatim}\index{\verb+T1_GetNoCompositeChars()+}\postcorr
+tells the user how many composite character definitions are given in the AFM
+file. This, of course, does not depend on the current encoding vector and it
+is even possible that the current encoding vector does not incorporate any
+composite character at all.
+
+The function
+\precorr
+\begin{verbatim}
+ int T1_QueryCompositeChar( int FontID, char char1)
+\end{verbatim}\index{\verb+T1_QueryCompositeChar()+}\postcorr
+checks whether composite character information exists for the encoding index
+\verb+char1+. If so, it returns the index within in the AFM composite
+character data array as a number equal to or greater than zero. If the result
+is valid but no composite character information has been found for
+\verb+char1+, $-1$ is returned. In case of an error, $-2$ is returned and
+\verb+T1_errno+ is set to an appropriate value.
+
+The previous function does not tell anything about whether the font
+\verb+FontID+ incorporates a character definition for the composite char or
+not. This can be queried using
+\precorr
+\begin{verbatim}
+ int T1_IsInternalChar( int FontID, char char1)
+\end{verbatim}\index{\verb+T1_IsInternalChar()+}\postcorr
+It returns $1$ if there exists a CharString for \verb+char1+ and $0$ if not.
+In the latter case, the application is responsible for the construction of the
+composite character (see later). \verb+T1_IsInternalChar()+ also might return
+$-1$ and set \verb+T1_errno+, which indicates that the font in question is not
+loaded.
+
+The information required to construct a composite character is retrieved by
+calling the function
+\precorr
+\begin{verbatim}
+ T1_COMP_CHAR_INFO *T1_GetCompCharData( int FontID, char char1)
+\end{verbatim}\index{\verb+T1_GetCompCharData()+}\postcorr
+It returns a pointer to a meaningfully filled struct of type
+\verb+T1_COMP_CHAR_INFO+ as described above. The composite character and the
+number
+of pieces as well as a pointer to the array of type \verb+T1_COMP_PIECE+ are
+stored in this structure. Once this information is obtained the composite
+character can be constructed by
+\begin{itemize}
+\item placing the accent symbols in a loop that ranges from $1$ to
+ \verb+numPieces+$-1$. In practice this loop will often be executed only
+ once. The initial current point must always be restored. In this loop
+ positioning information is accessed by \verb+ptr->pieces[+$i$\verb+].deltax+
+ and \verb+ptr->pieces[+$i$\verb+].deltay+, where \verb+ptr+ is the pointer
+ returned by the above function.
+\item placing the base character (\verb+pieces[0]+), which then also causes
+ the horizontal escapement of the composite character.
+\end{itemize}
+
+In cases where \verb+char1+ is not a composite
+character, the \verb+compchar+ entry is set to \verb+char1+ itself and
+\verb+numPieces+ becomes $1$, as would be expected. The \verb+pieces+ pointer
+is then set to \verb+NULL+. In case of errors, this function returns
+\verb+NULL+ and \verb+T1_errno+ is setup correspondingly.
+
+The pointer returned by this function should always be free'd using
+\verb+T1_FreeCompCharData()+ in order to avoid memory leaks (see also
+Section~\ref{deletingdata}).
+
+A function that provides the same functionality is
+\precorr
+\begin{verbatim}
+ T1_COMP_CHAR_INFO *T1_GetCompCharDataByIndex( int FontID, int index)
+\end{verbatim}\index{\verb+T1_GetCompCharDataByIndex()+}\postcorr
+In this case, the information is requested by means of an index \verb+index+
+in the AFM composite character data array. This function is thus well-suited
+for scanning the complete composite character information of a given font in a
+given encoding. \verb+index+ may, for example, be obtained by a call to
+\verb+T1_QueryCompCharData()+ as described above. The valid range for
+\verb+index+ is from $0$ to the value returned by
+\verb+T1_GetNoCompositeChars()+ minus one. The range of \verb+index+ is
+validated and in case of an error \verb+T1_errno+ is to
+\verb+T1ERR_INVALID_PARAMETER+. There may also appear other errors and under any
+erroneous condition, \verb+NULL+ is returned.
+
+The parameter \verb+compchar+ of the \verb+T1_COMP_CHAR_INFO+ structure that
+is referenced by the returned pointer, bears somewhat more information for
+this function than in the case of \\
+\verb+T1_GetCompCharData()+. As said it contains the index in the encoding
+vector where the composite glyph is encoded. It may also have the vaue $-1$,
+which means that the composite character is not encoded. Note that this is not
+an error condition.
+
+
+\subsubsection{Transparent Handling of Composite Characters and User Extensions}
+\label{subsubsec:Transparent Handling of Composite Characters and User
+ Extensions}%
+
+Aside from the fact that composite character information may be accessed in
+\tonelib, \tonelib\ can automatically---and completely transparently with
+respect to the user---compose characters if it finds information on how to do
+so. To give an instance, let us examine the font ComputerModern Roman
+(cmr10). Because this font is specially encoded for the use with early (7-bit)
+\TeX-systems, it does not incorporate a definition for \verb+Adieresis+. The
+definition simply was not required because \TeX\ itself constructed the
+composite character by means of its \verb+\accent+-primitive. If a font like
+cmr10 is reencoded e.g.~to IsoLatin1 encoding, the character ``\"A'' will show
+up as a blank because there is no definition for \verb+Adieresis+. Now, if the
+corresponding AFM file is extended with the following lines, it becomes
+possible to access an \verb+Adieresis+:
+\begin{verbatim}
+StartComposites 1
+CC Adieresis 2; PCC A 0 0; PCC dieresis 100 200;
+EndComposites
+\end{verbatim}
+This line in an AFM file provides information about how to construct an
+\verb+Adieresis+ from the \verb+A+ and \verb+dieresis+ glyphs, and \tonelib\
+can utilize this information to construct the requested glyph without that
+this will be be noticed by the user.
+
+Composite character are treated just the same way as standard characters.
+They are cached, they can be scaled, transformed etc. Let us assume that the
+cache is still empty and a character, identified by its encoding index, now is
+to be rastered. The following happens in the rastering function:
+\begin{enumerate}
+\item \tonelib\ looks up the character's name in the encoding vector and tries
+ to locate the CharString for that character. If this succeeds all works as
+ usual, notwithstanding the fact that there might have been composite
+ character information for that char. This means, font-internal
+ CharString-definitions have highest priority: One cannot, for example,
+ re-define an \verb+Adieresis+ by raising the umlaut ``\"{ }'' via a composite
+ character definition, if \verb+Adieresis+ is defined internally.
+\item However, if the CharString is not found, composite character information
+ is examined and if possible, elementary units are used to construct the
+ requested composite character by concatenating paths.
+\end{enumerate}
+In any case, the resulting character is put into the cache and is from then on
+available as any other character. If pieces of a composite character are not
+found in the CharStrings dictionary, those pieces are substituted by
+\verb+.notdef+, so that for extreme cases the whole composite character might
+be substituted by a \verb+.notdef+. Then, an appropriate message is put into
+the log file with priority \verb+T1LOG_WARNING+ and \verb+T1_errno+ is set to
+\verb+T1ERR_COMPOSITE_CHAR+.
+
+In the same way \tonelib\ composes characters without user intervention, the
+functions for character metrics are aware of composite character information
+and the returned result are also valid for those functions.
+
+
+\subsubsection{Caveats}
+\label{subsubsec:Caveats}%
+
+Although handling of composite character is widely automated, problems may
+arise. Most importantly it is the responsibility of the user to take care that
+font file and AFM file provide consistent data. Alas, this is not always true
+for existing font and AFM files. If, for example, an AFM file is extended by
+composite character definitions and these composite character definitions
+reference symbols that are not defined in the CharsStrings dictionary, errors
+will result. If composite character information is added to an AFM file, the
+following rules have to be respected:
+\begin{itemize}
+\item The name of the composite character has to be encoded because it could
+ not be accessed otherwise. Furthermore, no internal definition in the
+ CharStrings dictionary may exist because this would override the composite
+ character definition from the AFM file.
+\item The user should verify that all components of a composite character
+ definition have entries in the CharStrings dictionary. This can be checked
+ for example by using\\ \verb+T1_GetAllCharNames()+ or by disassembling the font
+ file.
+\item Even being more restrictive, the user should take care that all pieces
+ of a composite character are encoded. For \tonelib\, this is really
+ irrelevant because, internally, characters may be accessed by the name of
+ their CharString. This means \tonelib\ simultaneously has access to all
+ characters defined in a font. However, an application that exports PostScript
+ files can only access character definitions via their position in the
+ encoding vector. Composing a character from pieces of different encodings
+ will require two font definitions in a exported PostScript file for
+ typesetting one character, which cannot be termed a clean strategy.
+\end{itemize}
+
+
+\subsection{Error Handling}
+\label{errorhandling}%
+Although every function usually returns meaningful values, there are
+situations where indicating an error via the return value is not possible. For
+example, requesting a charspace bounding box from a char of a font which is not
+loaded will return a bounding box containing all zeroes. This cannot be
+considered an error-condition since for characters like ``space'' it is
+correct to return a bounding box containing all zeroes. Furthermore, there's no
+consistent scheme which value should indicate what type of error. In order to
+allow a unified error handling in applications, the global variable
+\verb+T1_errno+ has been introduced.
+
+The functionality of \verb+T1_errno+ is analogous to that of the global
+\verb+errno+ in C programs. \verb+T1_errno+ is once set to 0 when the library
+is initialized and never reset by any \tonelib-function. It is set to specific
+values when specific types of errors appear. An application may then act
+appropriately and reset \verb+T1_errno+.
+The errors that might appear can be roughly split into three categories as
+described below.
+
+\subsubsection{Type 1 Font File Scan-Errors}
+These types of errors can only appear at the time a font file is loaded.
+These kinds of errors are indicated by negative values:
+\begin{itemize}
+\item \verb+T1ERR_SCAN_FONT_FORMAT+ (-5): A Multiple Master Font was attempted
+ to be loaded. These are not supported by \tonelib.
+\item \verb+T1ERR_SCAN_FILE_OPEN_ERR+ (-4): This value indicates that the Type
+ 1 font file could not be opened by the parser. It usually does not mean that
+ the file does not exist because this problem would have shown up at the time
+ the font database had been built. It is more likely a permission problem.
+ Anyhow, the C library variable \verb+errno+ should be examined for getting
+ an idea of what the problem was.
+\item \verb+T1ERR_SCAN_OUT_OF_MEMORY+ (-3): A Type 1 font program required
+ more than 262144 bytes of VM. This is a limit imposed by \tonelib\ because
+ it usually means there goes something wrong. Typical values of VM
+ consumption are between 30000 and 60000 bytes depending on the fonts'
+ complexity. If this limit really does not suffice the constant
+ \verb+MAXTRIAL+ (defined in \verb+lib/type1/fontfcn.c+) may be set to some
+ larger value.
+\item \verb+T1ERR_SCAN_ERROR+ (-2): An error occurred during scanning the font
+ file. It usually means that the font file is damaged or does not comply to
+ the conventions of Type 1 font files. For example, an encountered token might
+ have been too long. Another reason could be, a literal name follows a literal
+ name where a number was expected. There is no way to recover from this
+ error. One last resort could be to disassemble the font (e.g., using
+ \verb+t1disasm+ from the \verb+t1utils+ package) and scan the resulting
+ human-readable file for possible violations of the Type 1 font format
+ specifications. However, some knowledge about the format is in force.
+\item \verb+T1ERR_SCAN_FILE_EOF+ (-1): A premature end of file was encountered
+ during parsing. The file is damaged.
+\end{itemize}
+
+
+\subsubsection{Path Generation Errors}
+Small positive number are reserved for errors that might appear during path
+construction and rasterization.
+\begin{itemize}
+\item \verb+T1ERR_PATH_ERROR+ (1): An error occurred during path
+ construction. The font file is most probably damaged.
+\item \verb+T1ERR_PARSE_ERROR+ (2): This kind of error describes a kind of
+ ``semantic'' error in the font file. A typical candidate for this is a font
+ that does not define a character named \verb+.notdef+, although this is
+ required by the format specification. Since under usual conditions the
+ \verb+.notdef+ character is never accessed, this error would not show
+ up. But if for some reason the \verb+.notdef+ has to be substituted for some
+ other character the problem becomes evident.
+\item \verb+T1ERR_TYPE1_ABORT+ (3): The \verb+abort()+-function of the
+ rasterizer has been called. This may happen at several places during
+ hinting, converting to edgelists etc. There is a certain chance that
+ unfreed memory has been left. If this error appears and a logfile is used,
+ an error string giving some more info is placed into the logfile.
+
+ This error should not appear, normally. If it does, either the font file is
+ damaged or the font contains invalid outline descriptions such as unclosed
+ paths. Especially the latter is quite unlikely. Of course this error can be
+ raised, when an outline has been modified manually in an invalid way and is
+ then rastered (see.~\ref{outlinemanipulation}).
+\end{itemize}
+
+\subsubsection{\tonelib-Errors}
+The remaining types of errors are detected by the management of \tonelib. Their
+numbering starts with 10 (decimal). The list could be extended in future
+releases.
+\begin{itemize}
+\item \verb+T1ERR_INVALID_FONTID+ (10): An invalid font ID has been
+ specified. The exact meaning of this error depends on the specific
+ situation, in any case the operation requested cannot be realized with the
+ identified font. Possible reasons are:
+ \begin{itemize}
+ \item The font ID points to a font which is not loaded and which must be
+ loaded in order to perform the operation.
+ \item The specified font ID is a number which is generally out of the range
+ of the valid font IDs, either because it is $<0$ or because it is $>$ the
+ value of \verb+no_fonts+.
+ \item The library is not yet initialized so that no font ID at all is valid.
+ \end{itemize}
+\item \verb+T1ERR_INVALID_PARAMETER+ (11): One or more of the parameters
+ specified to a function call were assigned invalid values. For example, a
+ size-value specified to a rastering function must always be $>0$. Just the
+ same way, \verb+T1_ConcatGlyphs()+ cannot concatenate two glyphs if one of
+ them is the \verb+NULL+ pointer.
+\item \verb+T1ERR_OP_NOT_PERMITTED+ (12): An operation that was not allowed
+ {\em at that time} has been requested. This error could result, for example,
+ if an application tries to set a new bitmap padding value after \tonelib\
+ has been initialized.
+\item \verb+T1ERR_ALLOC_MEM+ (13): This error indicates that \tonelib\ ran out
+ of memory and a memory allocation failed. This error should not appear.
+\item \verb+T1ERR_FILE_OPEN_ERR+ (14): A file that was needed could not be
+ opened by \tonelib. The file might have been necessary for reading data or
+ writing data. For example, \verb+T1_WriteAFMFallbackFile()+ returns this
+ value if the AFM file could not be opened for writing and
+ \verb+T1_LoadEncoding()+ returns it if the encoding file specified as
+ argument could not be opened. Notice that there is no indication of the
+ reason why the file opening failed. The C library
+ variable \verb+errno+ should be examined to analyze this further.
+
+ It should be mentioned that \verb+T1ERR_FILE_OPEN_ERR+ is only set if a file
+ operation failed which was really in force. This means that at the time a
+ font is loaded a missing AFM file does not cause \verb+T1_errno+ caused to
+ be set to \verb+T1ERR_FILE_OPEN_ERR+. This is because \tonelib\ can
+ automatically recover from this by generating AFM information on the fly (at
+ the cost of computation time).
+\item \verb+T1ERR_UNSPECIFIED+ (15): This value indicates nothing apart from
+ that an error occurred and this error was not one the other errors. It can
+ be considered a fallback.
+\item \verb+T1ERR_NO_AFM_DATA+ (16): A function has been called which needs
+ AFM information and AFM information is not available, either because all
+ attempts to generate AFM data failed or because the flag \verb+T1_NO_AFM+
+ has been specified as part of the flag for \verb+T1_InitLib()+.
+\item \verb+T1ERR_X11+ (17): An error in an X11 library function occured. This
+ could be caused by calling a function of the X11 interface without prior
+ initialization of the X11 interface via \verb+T1_SetX11Params()+.
+\item \verb+T1ERR_COMPOSITE_CHAR+ (18): A request to compose a composite
+ character could not be fulfilled without problems because at least one part
+ of the composite character was not found in the \verb+CharStrings+
+ dictionary. This is bad because it indicates that font file and AFM file do
+ match. Further errors or unsatisfactory rastering results have to be
+ expected.
+\item \verb+T1ERR_SCAN_ENCODING+ (19): Scanning an encoding file failed. Since
+ \tonelib\ uses a fallback approach---DVIPS-encoding is tried first and
+ afterwards \tonelib-encoding---it is not clear at which place exactly a
+ failure occured. However, further hints about what \tonelib\ thought about
+ the file in question may be found in the log file.
+\end{itemize}
+In analogy to the Standard C Library function \verb+strerror()+, \tonelib\
+provides the function
+\precorr
+\begin{verbatim}
+ const char *T1_StrError( int t1err)
+\end{verbatim}\index{\verb+T1_StrError()+}\postcorr
+It returns a pointer to a string describing the error corresponding to
+\verb+t1err+. Usually, the argument should be directly specified as
+\verb+T1_errno+. The memory where the returned string is stored is static in
+\tonelib\ so that it may not be \verb+free()+'d.
+
+
+\subsection{Other Useful Functions}
+\label{otherfunctions}%
+This subsection describes a few functions that had not been described up to
+now but which however could be useful.
+
+\precorr
+\begin{verbatim}
+ int T1_CheckEndian( void)
+\end{verbatim}\index{\verb+T1_CheckEndian()+}\postcorr
+This function may be used to check the endianess of the hardware \tonelib\ is
+running on. The return value is \verb+0+ for Little Endian and \verb+1+ for
+Big Endian machines.
+
+\precorr
+\begin{verbatim}
+ void T1_DumpGlyph( GLYPH *glyph)
+\end{verbatim}\index{\verb+T1_DumpGlyph()+}\postcorr
+This function might be useful for debugging and testing \tonelib. It dumps an
+ASCII representation of the glyph pointed to by \verb+glyph+ to the standard
+output. A background pixel is represented by \verb+.+ while a foreground pixel
+is represented by \verb+X+. After the number of bits that correspond to the
+current padding value, an empty column is inserted. See the output of the
+programming example in \ref{programmingexample}. In this case the padding
+values has been 16.
+
+Note that the size of the glyph should be small enough that its padded width
+does not exceed the terminals line width. Otherwise the result might become
+illegible.
+
+\precorr
+\begin{verbatim}
+ void T1_DumpPath( T1_OUTLINE *path)
+\end{verbatim}\index{\verb+T1_DumpPath()+}\postcorr
+This function dumps a description of an outline to the standard output. It is
+exclusively intended for debugging purposes.
+
+
+\precorr
+\begin{verbatim}
+ void T1_SetRasterFlags( int flags)
+\end{verbatim}\index{\verb+T1_SetRasterFlags()+}\postcorr
+This function allows to enable or disable certain features of the
+rasterizer. Let me emphasize that this is exclusively intended for debugging
+and error tracking. The default value of \verb+flags+ is 0 which means that no
+debugging output is shown and hinting is performed as suggested in the {\em Adobe
+Type Font Format}. However there may arise situations where fiddling with the
+\verb+flags+ might be helpful in rasterizer and font debugging.
+
+\verb+flags+ usually is an OR'ed combination of the following definitions:
+\begin{itemize}
+\item \verb+T1_IGNORE_FORCEBOLD+
+\item \verb+T1_IGNORE_FAMILYALIGNMENT+
+\item \verb+T1_IGNORE_HINTING+
+\item \verb+T1_DEBUG_LINE+
+\item \verb+T1_DEBUG_REGION+
+\item \verb+T1_DEBUG_PATH+
+\item \verb+T1_DEBUG_FONT+
+\item \verb+T1_DEBUG_HINT+
+\end{itemize}
+The \verb+T1_IGNORE_...+ types allow to selectively disable hinting. They
+might be useful if parts of a font are not properly rendered. For example,
+substituting a font's alignment zones by the family's alignment zones might
+result in visual artifacts if the values for \verb+FamilyBlues+ are not
+correct. Disabling family alignment might reveal the problem in such cases.
+
+The \verb+T1_DEBUG_...+ types produce debugging output from the intermediate
+rasterizing steps. Notice that to understand this output a thorough
+understanding of what happens in the rasterizer is in force. Moreover, be
+prepared that thousands of lines might be written to the terminal, depending
+on the particular option.
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "t1lib_doc"
+%%% End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/xglyph.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/xglyph.tex
new file mode 100644
index 00000000000..08a214484ff
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/xglyph.tex
@@ -0,0 +1,490 @@
+%----------------------------------------------------------------------------
+% ----- File: xglyph.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2003-01-04
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library License. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the toplevel
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independent from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+
+\newpage
+\section{The Program {\ttfamily xglyph}}
+\label{xglyph}%
+\verb+xglyph+ is a tool which makes most of the functionality of
+\tonelib\ visible to the user without the need of having to write an
+own program and without the need of having to understand most of the
+library
+before. This program---as the name indicates---needs X11. It is thus only
+build if X11 is installed on the target system and if X11 support has not
+explicitly been disabled. All
+necessary resources are set internally to default values so that the
+program can be run out of the box without any installation.
+
+In case the user did not already create a custom configuration file and an
+associated font database file, the program should be started from the
+subdirectory \verb+xglyph+ of the distribution. When starting, \verb+xglyph+
+checks for the environment entry \verb+T1LIB_CONFIG+ and if it does not exist
+it adds the association \verb+T1LIB_CONFIG=./t1lib.config+ to the
+environment. In other words it expects a valid configuration file in the
+current directory.
+
+There are several widgets which may be categorized into 5 types.
+
+\subsection{Common Parameter Dialogs and Toggle Buttons}
+These buttons modify the internal state of the program by setting some global
+variables. These variables affect the execution of all rastering functions in
+contrast to the buttons described in the next subsection which only take
+influence on the X11 rastering functions. When changing
+one of the following parameters nothing seems to happen at first. All
+actions are deferred to the time when an action button is
+clicked. Here is a list of the dialogs and toggles:
+\begin{itemize}
+\item \fbox{{\bfseries FontID}}\\
+ This dialog allows to specify the font ID that will be used when
+ the next action takes place. The allowed IDs range from 0 to $n-1$,
+ where $n$ is the number of fonts declared in the font database
+ file. If using the default configuration file together with the
+ default font database file, 8 fonts are declared. If an invalid ID
+ is specified, the next action generates an error message.
+\item \fbox{{\bfseries Font-Size}}\\
+ Here, the size of the font is specified. The value is interpreted in
+ bigpoints, the default PostScript unit. If the size specified is
+ invalid, an appropriate error message is generated at the time of
+ the next action.
+\item \fbox{{\bfseries Slant-Factor}}\\
+ A slant factor $s$ may be specified. It is interpreted the following
+ way. A point described by the coordinate-pair $(x,y)$ is transformed
+ to the point with the coordinates $(x+sy,y)$. For instance,
+ specifying a slant factor $s=1$ will generate a font slanted by
+ $45^\circ$. Since version 0.3-beta slanted are nearly fully supported.
+ For a discussion of the remaining problems see
+ \ref{transformations} on page
+ \pageref{transformations}.
+\item \fbox{{\bfseries Extension-Factor}}\\
+ Horizontal extension of a font may be realized using this
+ dialog. The default value is 1 which means the characters are
+ presented at their natural width. Specification of an invalid value
+ will generate an error message at the time of the next action.
+\item \fbox{{\bfseries Transformation-Matrix}}\\
+ This dialog gives complete Control over the transformation matrix that will
+ be used in consequent rasterizations. The values have to be specified
+ separated by commas. A specified rotation is still applied after this
+ matrix.
+\item \fbox{{\bfseries Res [DPI]}}\\
+ The resolution of the output device (screen) may be specified in
+ this dialog. Using the default value of 72 dpi means one bp in size
+ corresponds to exactly one device pixel.
+\item \fbox{{\bfseries S-Width}}\\
+ This dialog field allows to setup the penwidth used for stroking
+ characters. If this field is zero, which is the default, the characters are
+ filled, unless, the font under consideration is a stroked font, that is, it
+ has \verb+PaintType = 1+.
+\item \fbox{{\bfseries Encoding-File}}\\
+ The name of an encoding file may be specified. Included in the
+ distribution is only one file, \verb+IsoLatin1.enc+. It contains the
+ standard X11 encoding in a format acceptable by \tonelib. If no name
+ is given here, or the file with the name given here cannot not be
+ parsed as an encoding file, the encoding is switched back to the fonts
+ internal encoding. Again, this is done at the time of the next
+ action.
+\item \fbox{{\bfseries Angle}}\\
+ The angle at which the next character or string is rastered is
+ specified here. There are no restrictions concerning the angle. Rotation is
+ applied after setting the transformation matrix (see above).
+\item \fbox{{\bfseries Space-Off}}\\
+ The value specified here represents an offset added to the
+ spacewidth when rastering the next string. For this, it is
+ interpreted in PostScript charspace units and thus subject to
+ scaling.
+\item \fbox{{\bfseries Character}}\\
+ A number between 0 and 255 inclusive should be specified here. It is
+ used as the index into the current encoding vector when rasterizing
+ a character. This gives the user access to all currently encoded
+ characters, regardless of the current X11 keyboard mapping. If an
+ index is given whose encoding entry would produce no black pixels,
+ an error message is generated at the next character-rastering
+ time. The default value is 65, which corresponds
+ to the character ``A'' in most encoding vectors.
+\item \fbox{{\bfseries Test-String}}\\
+ In this dialog, a complete string may be specified. It will be
+ rastered when the next string-rastering button is pressed. It can be
+ of arbitrary length (well, almost). If this field is left empty, the
+ standard string ``Test'' will be used for rastering.
+\item \fbox{{\bfseries Kerning}}\\
+ This is a toggle button. Its state determines whether pairwise
+ kerning information from the AFM file will be used to correct the
+ horizontal spacing during string rastering or not. A typical example
+ is the word ``Test''; enabling kerning should---at least in
+ fonts of good quality---move the ``T'' and the ``e'' significantly
+ closer together.
+\item \fbox{{\bfseries Ligature}}\\
+ This is a toggle button. Its state specifies whether the
+ string is checked for ligatures prior to rastering it.
+ Suitable character sequences are replaced with the corresponding
+ ligature. For a good example, you should switch to
+ font ID 4 and type in the string \verb+--difficult---+. If ligature
+ detection is switched on, the two hyphens should be converted to an
+ en-dash ``--'', the three hyphens should be converted to an em-dash
+ ``---'' and the character series ``\verb+ffi+'' should be replaced
+ with the ligature ``ffi'', rather than to be displayed as ``f{}f{}i''.
+\item \fbox{$|\longrightarrow$} / \fbox{$\longleftarrow|$} This button allows
+ to change the writing direction that \tonelib\ will use in subsequent calls
+ to the string rastering functions, the default being {\em Left To Right} as
+ used in most European languages. This item is simply meant to demonstrate the
+ capabilities of \tonelib. The package does not come with fonts that are
+ intended to be used for {\em Right To Left} typesetting.
+\item \fbox{{\bfseries Underline}}\\
+ This toggle button determines whether strings are underlined or not.
+\item \fbox{{\bfseries Overline}}\\
+ Same as above for overlining.
+\item \fbox{{\bfseries Overstrike}}\\
+ Same as above for overstriking.
+\item \fbox{{\bfseries AA-Low}}/\fbox{{\bfseries AA-High}}\\
+ This button allows to select the subsampling factor for antialiasing in
+ subsequent rastering operations. {\em AA-Low} means subsampling by factor 2
+ which gives 5 gray values including black and white, whereas {\em AA-High}
+ means subsampling by 4 which yields 17 gray values including black and
+ white.
+\end{itemize}
+Notice that, aside from the latter, the toggle buttons only affect the string
+rastering functions.
+
+\subsection{Buttons that Influence the X11 Rastering Functions}
+The X11 rastering functions introduced in version 0.3-beta provide a
+considerably higher level of abstraction than the standard rastering
+functions. To show the effect in \verb+xglyph+, a few additional buttons are
+provided.
+\begin{itemize}
+\item \fbox{{\bfseries Transparent}}/\fbox{{\bfseries Opaque}}\\
+ This button allows to switch between transparent and opaque mode in the X11
+ rastering functions. In transparent mode, only non-background pixels are
+ drawn and all other pixels are left untouched. In opaque mode the entire
+ area that the bitmap will require is first filled with the background color
+ and then the bitmap is placed on this area.
+\item \fbox{{\bfseries Foreground}}\\
+ This is a label field with six color fields to the right and one color field
+ to the left. Clicking on one of the color fields located on the right side
+ will set the foreground color to the respective value (white, black, gray,
+ red, green or blue). The color field on the left side always shows the
+ current color selection.
+\item \fbox{{\bfseries Background}}\\
+ This also is a label field with six color fields to the right and one color
+ field to the left. It works in analogy to the above and sets the current
+ background color. Note that in order make the background color active, the
+ drawing mode must be set to ``opaque''.
+\end{itemize}
+
+\subsection{Buttons that Generate Actions}
+There are 10 buttons generating actions visible to the user.
+\begin{itemize}
+\item \fbox{{\bfseries Char}}\\
+ This button generates a bitmap of the character specified in the
+ \fbox{{\bfseries Character}}-dialog box. All parameters changed
+ earlier become effective at this time. The resulting bitmap is then
+ shown in the output window of \verb+xglyph+. Some information about
+ the generated bitmap and elapsed
+ time etc.\ is given in the message window. If an error occurred,
+ the old contents of the output window are kept and a message is given
+ to the user.
+\item \fbox{{\bfseries String}}\\
+ This button generates a bitmap of the string specified in the
+ \fbox{{\bfseries Test-String}}-dialog box. In addition to rastering
+ characters, kerning and ligature settings may now take influence on
+ the result of the operation (see \ref{fonts}). If no error occurs,
+ the bitmap is shown in the output window and additional information is
+ shown in the message area. Otherwise, an appropriate error message is
+ given.
+\item \fbox{{\bfseries AAChar}}
+\item \fbox{{\bfseries AAString}}\\
+ Both of these buttons do exactly the same as their non-antialiased
+ counterparts. The only difference consists in the generation of an
+ antialiased bitmap. The result is not a bitmap in fact.
+ There are at least 8 bits per pixel and at most 32 bits per
+ pixel in the resulting glyph. This depends on the depth of the
+ X11-visual you use when starting xglyph. The result may consume
+ quite a bit of memory
+ if a {\ttfamily TrueColor} or {\tt DirectColor} visual is
+ active.
+\item \fbox{{\bfseries CharX}}
+\item \fbox{{\bfseries StringX}}
+\item \fbox{{\bfseries AACharX}}
+\item \fbox{{\bfseries AAStringX}}\\
+ These functions basically do the same as the counterparts lacking the ``X''
+ in the name. But internally the X11 rastering functions are called to
+ produce the output bitmap/pixmap. As a consequence the current foreground
+ color, background color and drawing mode are taken into account. For a more
+ complete discussion of the X11 rastering functions see \ref{x11interface} on
+ page \pageref{x11interface}.
+\item \fbox{{\bfseries Font Table}}\\
+ A character table of size $16 \times 16$ is shown in the output
+ window. Each cell contains an antialiased representation of the character
+ indexed by the field number. The function \verb+T1_AASetCharX()+ is
+ used for drawing these characters. Current foreground and background colors
+ are respected as well as are most other parameters accepted by the character
+ rastering functions. Only the angle specification
+ is ignored since I assume that it is not very useful to have an overview
+ over a font at any angle different from 0. Notice that the default size
+ (100) is probably too large to make the output window fit on the screen. No
+ care is taken about this. The recommended size for viewing a font's
+ character map is
+ between 20 and 30 points at 72 dpi resolution.
+\item \fbox{{\bfseries About}}\\
+ Shows an `about' message
+ telling you that you are using \verb+xglyph+ and \tonelib\ in the current
+ version.
+\item \fbox{{\bfseries Exit Program}}\\
+ This button does what it says and exits the program.
+\end{itemize}
+
+\subsection{The Message Window}
+This area is located below the dialog box for the test
+string. Information potentially useful to the user is given here.
+There should be nothing needed to be said about the info---it is
+self-explaining.
+But two things should be noted:
+\begin{itemize}
+\item The elapsed time that is displayed is exactly the time spent in
+ the respective rastering function. There might
+ have been other actions in force which might make the user believe the
+ time value given as being incorrect.\footnote{For example, there might have
+ been size-dependent data to be deleted and recreated, or an encoding
+ file might have needed
+ to be loaded before rastering.} Moreover, the transfer to the
+ X-server may become significant if 32 bits per pixel are used, the
+ image is large and
+ the program is running on a remote machine.
+\item The message \verb+t1lib: Couldn't generate Bitmap, T1_errno=...!+ simply
+ tells the user that no bitmap could be generated. There may be
+ several reasons. E.g., the \verb+FontID+-value given might have been
+ out of range. Another possibility is that you have specified a
+ character index which has no encoded character associated. The value of
+ \verb+T1_errno+ might give a hint of what the problem was.
+\end{itemize}
+If a character map is displayed, the message window is giving no
+information apart from the font name and the final value of
+\verb+T1_errno+ because there have been executed
+up to 256 rastering operation and it would be impossible to keep track
+of all single operations.
+
+\subsection{The Output Window}
+The output window shows the output of the rastering operations. Its type is
+different for the standard and the X11 rastering functions. For the standard
+rastering functions, it is always adapted to the size of the glyph which is
+displayed plus a margin of 5 pixels on each side. For this reason, leading and
+trailing white space is not shown in the output window, it only shows up in
+the glyph's metrics in the message windows.
+
+The X11 rastering functions
+generate an output window of constant size (\hbox{600 $\times $ 400} pixels)
+with a logical origin in its center. This center is marked by a cross-hair of
+color cyan. The glyph is placed with respect to this origin. If it is too
+large to fit, the glyph simply is clipped. A second cross-hair is shown at the
+place where the origin of the next glyph would be located in color magenta.
+
+If a character map of a font is displayed, the output window contains
+a map of $16\times 16$ cells whose size depends on the metrics of the
+font that is displayed.
+
+
+\subsection{{\tt xglyph} Commandline Parameters}
+The syntax of the \verb+xglyph+ commandline is
+\begin{verbatim}
+ xglyph [options] [fontfile1 [fontfile2 [...]]]
+\end{verbatim}
+If no options and no font files are specified on the commandline \verb+xglyph+
+reads the fonts from the font database file. The details depend on which
+configuration file is found and on this file's contents. If at least one font
+file is specified on the commandline, the font database---being existent and
+accessible or not---is ignored and the database is built using the fonts from
+the commandline. \verb+fontfile1+ is assigned the font ID 0, \verb+fontfile2+
+is assigned the ID 1 and so forth. Files that cannot be opened for some reason
+are simply skipped.
+
+\verb+xglyph+ also recognizes a few options. Notice that these options are not
+intended for an average user. Rather, they provide a means of (a) controlling
+debugging output from the rasterizer, (b) controlling generation and verbosity
+of the \tonelib-logfile, (c) disabling certain features of the rasterizer and
+(d) checking some \tonelib\ functions which otherwise would not be required
+because of the limited functionality of \verb+xglyph+.
+
+All commandline arguments that start with ``\verb+--+'' are considered to be
+options to \verb+xglyph+. The following is a complete list of valid options
+and a brief description of their effect:
+\begin{itemize}
+\item\verb+--help+: Display the commandline syntax of \verb+xglyph+ as well as
+ a brief list of the available options for an average user and exit.
+\item\verb+--Help+: Display the commandline syntax of \verb+xglyph+ as well as
+ a brief list of all available options.
+\item\verb+--noGrid+: The cross-hairs marking start and end position of a
+ glyph in the output of one of the X11 rastering functions will be
+ suppressed. This might be useful at small sizes because the grid overwrites
+ the glyphs' pixels.
+\item\verb+--setPad+: The padding value \verb+xglyph+ should use can be
+ specified here. This has to be followed by either ``8'', ``16'' or ``32'',
+ separated by a space. Notice that the value ``32'' might be rejected as
+ described in \ref{queryconfiguration}. The value actually used can be found
+ by writing a logfile and examining this after a session.
+\item\verb+--logError+:
+\item\verb+--logWarning+:
+\item\verb+--logStatistic+:
+\item\verb+--logDebug+: These options firstly instruct \verb+xglyph+ to create
+ a \tonelib\ logfile and secondly set the loglevel to the respective value
+ (see \ref{logfile}). Without specifying one of these options, no logfile
+ will be generated.
+\item\verb+--ignoreForceBold+: Instructs the rasterizer to ignore a {\tt
+ ForceBold} hint in the Type 1 font file.
+\item\verb+--ignoreFamilyAlignment+: Instructs the rasterizer always to
+ compute font level alignment according to \verb+BlueValues+ and
+ \verb+OtherBlues+, even if \verb+FamilyBlues+ and \\
+ \verb+FamilyOtherBlues+
+ exist and all conditions for substitution are fulfilled for that combination
+ of font and size.
+\item\verb+--ignoreHinting+: Instructs the rasterizer to omit hinting completely.
+\item\verb+--ignoreAFM+: The use of AFM information is ignored, no matter
+ whether it could be accessed via an appropriate AFM file or
+ self-generated. When using this option the string functions would not
+ work. It may, however, be useful because self-generation of AFM data fails
+ as soon as at least one character of all defined characters can not be
+ processed and thus, the font will refuse to load. Using this option,
+ consequently, one has access to all character that are processible, e.g.,
+ for generating a font table.
+ characters that can be rasterized
+\item\verb+--debugLine+:
+\item\verb+--debugRegion+:
+\item\verb+--debugPath+:
+\item\verb+--debugFont+:
+\item\verb+--debugHint+: All these instruct the rasterizer to write particular
+ debug messages from intermediate steps of rasterization to the terminal. In
+ order to understand and interprete them, a thorough understanding of the
+ Type 1 font format specification and this special rasterizer implementation
+ is crucial.
+\item\verb+--checkPerformance+: This option affects the X11 string rastering
+ functions. An additional output window is created and the output of
+ before-mentioned functions is directly written into this window. Note that
+ this window is not managed as might be expected. Text is only drawn at the
+ visible parts and after partially or completely hiding and again
+ raising the respective areas are lost. This mechanism should simply give an
+ idea of how fast the X11 rastering function work, admittedly a critical
+ topic in \tonelib.
+\item\verb+--checkCopyFont+: This option is used to check the proper
+ functioning of the \verb+T1_CopyFont()+ function. It copies all fonts from
+ the database to new logical fonts and slants these fonts by 0.3. Finally an
+ additional fontfile is added to the database. For each step the new font ID
+ is printed to the terminal and the initial and final number of fonts are
+ printed.
+\item\verb+--checkConcatGlyphs+: This option affects the buttons \fbox{\bf
+ String} and \fbox{\bf AAString}. The requested string glyph is generated
+ twice, first time using the current value of font ID and second time using
+ this
+ values plus 1. Both resulting glyphs are concatenated and the result is
+ shown in the output window.
+\item\verb+--checkConcatOutlines+: This option, too, affects the standard
+ string rastering functions. The current test string will be fetched as an
+ outline using the current font ID. The result is then concatenated with a
+ horizontal movement of 1000 charspace unit which is followed by the
+ identical string using a font ID advanced by 1. The result of the
+ concatenated outlines is then filled and converted to a \tonelib-glyph.
+ For details on outline handling and what it is meant for see \ref{outlines}.
+
+ When \verb+--checkConcatGlyphs+ and \verb+--checkConcatOutlines+ both are
+ specified on commandline, the \verb+--checkConcatGlyphs+ is respected.
+\item\verb+--checkBadCharHandling+: This option provides a means of
+ examining the effects of problematic/bad characters on string handling in
+ \tonelib with \verb+xglyph+. It affects only the \fbox{\bf String} button.
+ The character to be specified in the test character field is inserted in
+ the middle of the test string. This enables the user to insert arbitrary
+ character codes in the middle of a test string and to watch the effect in
+ \verb+T1_SetString()+. For example, starting \verb+xglyph+ with this
+ option exclusively and immediately clicking \fbox{\bf String} will show
+ the string {\em TeAt} in the output window because the character `s' has
+ been overwritten by character $65_{10}$ (`A'), the default test character.
+\item\verb+--checkDefaultEncoding+: This option proves that the default
+ encoding feature works correct. If set, all fonts should be encoded in
+ IsoLatin1 encoding immediately after startup and without any slow down at
+ startup.
+\item\verb+--checkSmartAntialiasing+: Enables smart antialiasing as described
+ in \ref{antialiasing}. The effect is that \tonelib\ will determine the
+ antialiasing level by itself. For sizes below 20~bp, $4\times$ antialiasing
+ will be used and up to 60~bp $2\times$ antialiasing is used. For size of
+ 60~bp and larger a ``bytemap'' is created which in fact consists only of
+ pure background and foreground pixels. When this options has been
+ specified, toggling the antialiasing level has no effect.
+\item\verb+--checkAACaching+: This option enables caching of antialiased
+ character glyphs. For a discussion of this issue see \ref{aacaching}. The
+ string rastering functions are not affected by this option.
+\item \verb+--checkSetRect+: This option allows to check the rectangle drawing
+ functions of \tonelib. If specified, the character drawing buttons will
+ produce an em unit square of the current font instead of the expected
+ character.
+\item \verb+--cacheStrokedGlyphs+: If this option is specified, \verb+xglyph+
+ will cache stroked glyphs whereas filled ones are not cached.
+\end{itemize}
+For those who are wondering about special X11 options like ``\verb+-display+'',
+\verb+xglyph+ does not support these. The widgets are built straight ahead and
+the layout is fixed. \verb+xglyph+ is meant to be a tool for testing some of
+the functionalities of \tonelib\ and nothing more. Of course, a display other
+than \verb+localhost:0.0+ may be specified by environment variable
+\verb+DISPLAY+.
+
+
+\subsection{Fonts Included in the \tonelib-Package}
+\label{fonts}%
+Included in the \tonelib-package are 8 fonts of two families which
+are freely available.
+\begin{enumerate}
+\item The CharterBT-fonts in Roman, Italic, Bold and BoldItalic
+ variants. These are good quality fonts containing kerning
+ information. Notable kerning pairs are ``T''--``e'', ``A''--``V''
+ and ``A''--``T''.
+\item The ComputerModern-fonts by Donald E.~Knuth in the variants
+ Roman, Italic, BoldExtended and BoldExtendedItalic. In addition to
+ kerning information, there are many ligatures in these
+ fonts. Most people will know about the present ligatures from using
+ \TeX, the typesetting system. Notable examples are:
+ \verb+--+ $\rightarrow$ ``--'',
+ \verb+---+ $\rightarrow$ ``---'',
+ \verb+fi+ $\rightarrow$ ``fi'' and
+ \verb+ffi+ $\rightarrow$ ``ffi''.
+ These fonts have the disadvantage that no ordinary space character
+ is included, only a visible space. \TeX\ itself does not need a
+ dedicated space character.
+\end{enumerate}
+Note that working with ligatures requires the ligatures to be
+encoded at the positions they are expected. Thus, if you reencode one of the
+dc-fonts with the IsoLatin1-encoding funny effects may occur.
+
+\subsection{Some General Remarks on {\tt xglyph}}
+The program \verb+xglyph+ is just intended to check whether \tonelib\ works on
+a particular system. It is written straight forward and does not care much on
+performance and such. Especially, it is not a typical application for a
+rasterizer library. The bitmaps are generated and then the output window is
+adapted to the size of the bitmap/pixmap generated by the rastering
+function. This contradicts the X11 principle of ``drawing into a drawable''
+and requires some overhead if one wants a fitted output window. In that sense,
+the performance of the X11 rastering functions is not directly comparable to
+the performance of the standard rastering functions. This should always be
+kept in mind.
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "t1lib_doc"
+%%% End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/doc/xinterface.tex b/Build/source/libs/t1lib/t1lib-5.1.2/doc/xinterface.tex
new file mode 100644
index 00000000000..3e9c048c673
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/doc/xinterface.tex
@@ -0,0 +1,294 @@
+%----------------------------------------------------------------------------
+% ----- File: xinterface.tex
+% ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+% ----- Date: 2003-01-04
+% ----- Description: This file is part of the t1lib-documentation.
+% ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+% As of version 0.5, t1lib is distributed under the
+% GNU General Public Library Lincense. The
+% conditions can be found in the files LICENSE and
+% LGPL, which should reside in the toplevel
+% directory of the distribution. Please note that
+% there are parts of t1lib that are subject to
+% other licenses:
+% The parseAFM-package is copyrighted by Adobe Systems
+% Inc.
+% The type1 rasterizer is copyrighted by IBM and the
+% X11-consortium.
+% ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+% ----- Credits: I want to thank IBM and the X11-consortium for making
+% their rasterizer freely available.
+% Also thanks to Piet Tutelaers for his ps2pk, from
+% which I took the rasterizer sources in a format
+% independ from X11.
+% Thanks to all people who make free software living!
+%----------------------------------------------------------------------------
+
+\newpage
+\section{The X11-Interface}
+\label{x11interface}
+As of V.\ 0.3-beta \tonelib\ incorporates some special functions that can make
+life easier for X11 programmers. Prior to further discussions it should be
+noted that these functions, which itself use functions \verb+Xlib+ are
+fully optional so that \tonelib\ can still be compiled and used on systems
+without X11.
+
+\subsection{Why a Special X11-Interface?}
+Although it initially was an explicit goal to make the library independent of
+X11, there are some strong arguments voting for a subset of functions adapted
+to X11 features. Here are some of them.
+\begin{itemize}
+\item X11 can be considered a standard under UNIX and graphical applications
+ under UNIX would to a high probability rely on X11. For this reason it would
+ not degrade portability much when using X11 features.
+\item The standard rastering functions of \tonelib\ strictly use the principle
+ of {\em generating bitmaps}. The rastering functions return bitmaps of a
+ specific size with reference point at upper left corner and additional
+ geometric information to tell the user how to position the bitmap correctly
+ with respect to the current point. A more natural approach would be to have
+ functions that draw on some existent {\em area} at a position and
+ orientation to be specified with the logical origin of the text taken into
+ account.
+\item The standard functions do not deal with color at all. This is especially
+ complicated in the case of antialiased fonts. If some application wanted to
+ use an existent (already cached) font, all characters would have to be
+ removed from memory and recreated using the new color values.
+\item In case of antialiasing the user has to make a decision on the depth of
+ the bitmaps. But what if an X-application uses drawables of different depths?
+ Such configurations could raise the programming effort up infinity (well,
+ alomst).
+\item The standard functions cache their bitmaps locally, i.e., on the machine
+ where the X11-client runs. Every characters bitmap has thus to be
+ transferred to the X11 server again and again. This might cause an
+ performance degradation, especially if the client runs on a remote machine
+ with a slow or heavy-loaded network connection.
+\end{itemize}
+Taken these arguments into account I decided to create an additional
+``special'' set of functions that allow uncomplicated usage under the X11
+window system, similar to the \verb+Xlib+-function \verb+X11DrawText()+.
+The approach used in V.~0.3-beta has been a quite elegant solution
+to the problems considered above. Unfortunately, it has been too slow to be
+usable in practice. Furthermore, caching in the X11-server produced some
+overhead and difficulties. According to my experiences server caching would
+only be advantageous for very large characters such as 500 bp and more. As a
+consequence, the X11 interface is redesigned and reduced to a {\em simple
+ wrapper} which deals with all but the last of the above items, from
+\tonelib\ V.~0.4-beta up.
+
+
+\subsection{Initialization of the X11-Interface}
+There are a few things \tonelib\ must know in order to be able to do its job
+properly. These parameters are defined by a functioncall to
+\precorr
+\begin{verbatim}
+int T1_SetX11Params( Display *display, Visual *visual,
+ unsigned int depth, Colormap colormap)
+\end{verbatim}\index{\verb+T1_SetX11Params()+}\postcorr
+\verb+display+ is the pointer to the structure of the display the application
+is connected to. It is once specified here because this avoids the need of
+repeatedly having to specify this pointer.
+
+\verb+visual+ is the pointer to the structure of the visual on which
+\tonelib\ should create
+the XImages that will be transferred to the X server when using antialiasing. In
+most cases it should be safe to specify \verb+DefaultVisual(...)+.
+
+The \verb+depth+-argument specifies the depth that \tonelib\ will use when
+creating antialiased pixmaps. It is thus identical to the value \verb+bpp+
+supplied to \verb+T1_AASetBitsPerPixel()+ (see \ref{antialiasing}).
+The depth must be one of the depth supported by
+the visual as specified above.
+
+\verb+colormap+ is the specification of an X11 colomap. It is needed because
+\tonelib\ might need to allocate some more colors for antialiasing
+purposes. The same colormap that the application uses should be specified
+here. If the application uses no special color handling,
+\verb+DefaultColormap(...)+ is probably the right value.
+
+As mentioned before, the X11 rastering functions put the characters with their
+origin at the specified point. This behavior, being the default, can be
+switched by calling
+\precorr
+\begin{verbatim}
+ void T1_LogicalPositionX( int pos_switch)
+\end{verbatim}\index{\verb+T1_LogicalPositionX()+}\postcorr
+Specifying \verb+pos_switch+=0 has the effect that in subsequent calls to X11
+rastering functions the result will be placed with the upper left corner at
+the specified position. The default behavior can be restored by calling this
+function again with some non-zero value.
+
+\subsection{Rastering Functions}
+In analogy to the standard rastering functions the \tonelib\ X11 interface
+provides six functions for generating character and string bitmaps, rectangles
+as well as their antialiased equivalents:
+\precorr
+\begin{verbatim}
+ GLYPH *T1_SetCharX( Drawable d, GC gc, int mode, int x, int y,
+ int FontID, char charcode,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_SetCharX()+}\postcorr
+\precorr
+\begin{verbatim}
+ GLYPH *T1_SetStringX( Drawable d, GC gc, int mode, int x, int y,
+ int FontID, char *string, int len,
+ long spaceoff, int modflag,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_SetStringX()+}\postcorr
+\precorr
+\begin{verbatim}
+ GLYPH *T1_SetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest,
+ int FontID, float size,
+ float width, float height,
+ T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_SetRectX()+}\postcorr
+\precorr
+\begin{verbatim}
+ GLYPH *T1_AASetCharX( Drawable d, GC gc, int mode, int x, int y,
+ int FontID, char charcode,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_AASetCharX()+}\postcorr
+\precorr
+\begin{verbatim}
+ GLYPH *T1_AASetStringX( Drawable d, GC gc, int mode, int x, int y,
+ int FontID, char *string, int len,
+ long spaceoff, int modflag,
+ float size, T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_AASetStringX()+}\postcorr
+\precorr
+\begin{verbatim}
+ GLYPH *T1_AASetRectX( Drawable d, GC gc, int mode, int x_dest, int y_dest,
+ int FontID, float size,
+ float width, float height,
+ T1_TMATRIX *transform)
+\end{verbatim}\index{\verb+T1_AASetRectX()+}\postcorr
+
+
+Instead of explaining everything in detail, we will discuss only those items
+that are different from the standard rastering. For discussion of the
+parameters \verb+FontID+, \verb+charcode+, \verb+string+, \verb+len+,
+\verb+spaceoff+, \verb+modflag+, \verb+size+ and \verb+transform+ see
+\ref{generatingbitmaps}.
+
+The \verb+drawable+ parameter specifies the X11 drawable into which the text
+will be drawn. It may be either a pixmap or a window.
+
+\verb+gc+ is the graphics context in which the operation should take
+place. Obviously, the most importamt components of the graphics context are the
+current foreground and background color. \tonelib\ uses these colors to draw
+the text/background.
+
+The value of \verb+mode+ determines whether {\em opaque} or {\em transparent}
+mode is used. In opaque mode all pixels including background pixels are
+drawn. This means the whole area of the bounding box of the character/string
+is painted. In transparent mode, only non-background pixels are drawn so that
+underlying graphics are minimum affected. One could imagine that as drawing the
+text on a transparent slide and overlay the result with the existent
+graphics. Using transparent mode should be somewhat slower, especially for the
+antialiasing functions since the information which pixels are background and
+which not has to be generated first. Moreover, the clipmask of the current
+graphics context is modified when drawing text in transparent mode.
+
+\verb+x+ and \verb+y+ define the position coordinates where the origin of the
+text will be located in the drawable. \tonelib\ does no checking of this
+position so that bad positioned text might not appear at all in the drawable
+without getting an error---it is simply clipped to the limits of the
+drawable.
+
+The non-antialiasing functions will take the fore- and background color from
+the specified graphics context.
+The antialiasing rastering functions work a little different. They also
+respect the current foreground and background color. The ``graylevel'' colors
+are computed on the fly and allocated in the colormap specified by the user in
+the call to \verb+T1_SetX11Params()+. The term graylevel has been quoted since
+these are in fact no graylevels at all. They are just discrete colors from a
+smooth bleed between the foreground and the background color. The colors are
+computed the following according to the following scheme:
+\begin{enumerate}
+\item The current foreground and background color are split into their
+ respective RGB components, lets call them $f_R$, $f_G$, $f_B$, $b_R$, $b_G$
+ and $b_B$.
+\item Intermediate values are computed between each pair of color components
+ $f_R$--$b_R$, $f_G$--$b_G$ and $f_B$--$b_B$ by making a linear
+ interpolation.
+\item For each newly created RGB-triple (currently 3) a pixel color is
+ allocated in the colormap specified by the user in a way that the pixel
+ colors match the theoretical values best.
+\end{enumerate}
+
+A general comment on antialiasing: If using transparent mode antialiasing
+may produce the opposite effect of what is wanted, depending on the color of
+the underlying graphics. You can use the program \verb+xglyph+ to check the
+effect: Start \verb+xglyph+ and prior to doing anything else click on button
+\fbox{AAStringX}. The resulting glyph is antialiased against the background
+color white but the real background due to transparency is quite different
+from white. Consequently the glyph seems to be surrounded by a thin light gray
+border.
+
+
+\subsection{Creating XPM-Files from \tonelib-Glyphs}
+\label{xpmfiles}
+The creation XPM files is not supported directly in \tonelib. Rather, there is
+a utility function which prepares what is necessary and leaves the creation of
+the Pixmap file to the one and only authority, to the Pixmap library. The
+required function is:
+\precorr
+\begin{verbatim}
+ XImage *T1_XImageFromGlyph( GLYPH *glyph)
+\end{verbatim}\index{\verb+T1_XImageFromGlyph()+}\postcorr
+It creates an X11 image from a valid \tonelib-glyph of arbitrary depth,
+padding and antialiasing configuration and returns the pointer to the newly
+created structure. This image can later be dumped into an XPM file using the
+XPM library function \verb+XpmWriteFileFromImage()+. The following code
+fragment shows how easy this really is. It assumes that the program containing
+that code is additionally linked with the XPM library.
+\begin{verbatim}
+ .
+ .
+ .
+ ximage=T1_XImageFromGlyph( glyph); /* generate ximage containg the glyph */
+ /* write pixmap file */
+ XpmWriteFileFromImage( display, "glyphtest.xpm", ximage, NULL, NULL);
+ ximage->data=NULL;
+ XDestroyImage( ximage);
+ .
+ .
+ .
+\end{verbatim}
+As already shown in this example code, the user has to take care for that
+\verb+XDestroyImage()+ does not free the glyph's bitmap. This achieved by
+setting \verb+ximage->data+ to \verb+NULL+.
+
+Having an XPM file from a \tonelib-glyph it should easily be possible to
+create graphic files of arbitrary formats, e.g., by using \verb+xv+.
+
+\subsection{Limits of the X11 Interface}
+A few words about what the X11 interface can do and cannot do are appropriate,
+I think. Except for that a few global variables of \tonelib\ are accessible,
+the whole code of the X11 interface could as well be part of an application
+instead of being part of \tonelib. In other words, \tonelib\ is not able to do
+anything an application program could not do. This applies especially to
+performance improvements. Unfortunately---but consequently, the X11 rastering
+functions are not faster than the standard rastering functions.
+
+To come to a conclusion, this is what the X rastering functions offer to the
+user:
+\begin{itemize}
+\item Save the user entirely from thinking about color.
+\item Offers a set functions comparable to \verb+XDrawText()+.
+\item Frees the user from having to think about transparency and opacity.
+\item Implements antialiasing between any given pair of foreground/background
+ colours.
+\end{itemize}
+And here is what they not provide:
+\begin{itemize}
+\item Functions that perform as if the rasterizer would be part of the X
+ server.
+\end{itemize}
+That's life, folks.
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "t1lib_doc"
+%%% End:
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/etc/README b/Build/source/libs/t1lib/t1lib-5.1.2/etc/README
new file mode 100644
index 00000000000..8d6940996e1
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/etc/README
@@ -0,0 +1,4 @@
+This directory is intended as a container for files which have turned
+to be handy during development. It is not for using t1lib.
+
+ 2002-12-08, RMz
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/etc/charpath2.ps b/Build/source/libs/t1lib/t1lib-5.1.2/etc/charpath2.ps
new file mode 100644
index 00000000000..223cb0da925
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/etc/charpath2.ps
@@ -0,0 +1,517 @@
+% 3.
+/xa 100 def
+/ya 100 def
+/xb 100 def
+/yb 400 def
+/xc 500 def
+/yc 750 def
+/xd 500 def
+/yd 100 def
+
+% 4.
+/xa 100 def
+/ya 300 def
+/xb 100 def
+/y5 400 def
+/xc 500 def
+/yc 300 def
+/xd 300 def
+/yd 300 def
+
+% 1.
+/xa 100 def
+/ya 100 def
+/xb 300 def
+/yb 150 def
+/xc 300 def
+/yc 500 def
+/xd 550 def
+/yd 600 def
+
+% 2.
+/xa 100 def
+/ya 100 def
+/xb 100 def
+/yb 400 def
+/xc 300 def
+/yc 550 def
+/xd 500 def
+/yd 600 def
+
+
+
+%% t1lib test
+%100 100 translate
+
+/TimesRoman findfont 25 scalefont setfont
+/line1 20 string def
+
+% t1lib test . segment 1
+/xa 139.000000 def
+/ya 118.000000 def
+/xb 104.000000 def
+/yb 118.000000 def
+/xc 75.000000 def
+/yc 90.000000 def
+/xd 75.000000 def
+/yd 54.000000 def
+
+% t1lib test . segment 2
+/xa 75.000000 def
+/ya 54.000000 def
+/xb 75.000000 def
+/yb 18.000000 def
+/xc 104.000000 def
+/yc -9.000000 def
+/xd 139.000000 def
+/yd -9.000000 def
+
+% t1lib test Bitstream Charter BT Roman Character R: curve ppoints 19 ... 22
+/xa 404.000000 def
+/ya 192.000000 def
+/xb 425.000000 def
+/yb 128.000000 def
+/xc 429.000000 def
+/yc 63.000000 def
+/xd 477.000000 def
+/yd 21.000000 def
+
+% test a straight line, slope 45 degrees
+/xa 100.0 def
+/ya 100.0 def
+/xb 150.0 def
+/yb 125.0001 def
+/xc 200.0 def
+/yc 150.0 def
+/xd 250.0 def
+/yd 175.0 def
+
+% t1lib test Bitstream Charter BT Roman Character R: curve ppoints 29 ... 32
+/xa 656.000000 def
+/ya 39.000000 def
+/xb 653.000000 def
+/yb 39.000000 def
+/xc 650.000000 def
+/yc 39.000000 def
+/xd 647.000000 def
+/yd 39.000000 def
+
+% t1lib test Bitstream Charter BT Roman Character R: curve ppoints 29 ... 32
+/xa 656.000000 def
+/ya 39.000000 def
+/xb 653.000000 def
+/yb 39.000000 def
+/xc 650.000000 def
+/yc 39.000000 def
+/xd 647.000000 def
+/yd 39.000000 def
+
+% t1lib test Bitstream Charter BT Roman Character R: curve ppoints 19 ... 22
+/xa 404.000000 def
+/ya 192.000000 def
+/xb 425.000000 def
+/yb 128.000000 def
+/xc 429.000000 def
+/yc 63.000000 def
+/xd 477.000000 def
+/yd 21.000000 def
+
+/xa 404.000000 def
+/ya 192.000000 def
+%/xb 424.90100 def % critical location where tmp2 approx. equals btmp3
+/xb 424.90666 def % critical location where tmp2 approx. equals btmp3
+/yb 128.000000 def
+/xc 429.000000 def
+/yc 63.000000 def
+/xd 477.000000 def
+/yd 21.000000 def
+
+
+/xa 305.000000 def
+/ya 652.000000 def
+/xb 395.000000 def
+/yb 652.000000 def
+/xc 507.000000 def
+/yc 648.000000 def
+/xd 507.000000 def
+/yd 503.000000 def
+
+/xa 435.000000 00 sub def
+/ya 340.000000 def
+/xb 532.000000 00 sub def
+/yb 364.000000 def
+/xc 610.000000 00 sub def
+/yc 425.000000 def
+/xd 610.000000 00 sub def
+/yd 503.000000 def
+
+/xa 458.000000 def
+/ya 357.000000 def
+/xb 555.000000 def
+/yb 376.000000 def
+/xc 624.000000 def
+/yc 440.000000 def
+/xd 624.000000 def
+/yd 514.000000 def
+
+/xa 327.000000 def
+/ya 89.000000 def
+/xb 335.000000 def
+/yb 78.000000 def
+/xc 348.000000 def
+/yc 62.000000 def
+/xd 348.000000 def
+/yd 56.000000 def
+
+
+/linewidth 30 def
+
+% compute distance from Bezier_A to Bezier_B
+/dista xb xa sub dup mul yb ya sub dup mul add sqrt def
+
+% compute distance from Bezier_C to Bezier_D
+/distd xd xc sub dup mul yd yc sub dup mul add sqrt def
+
+/diameter linewidth 2 div def
+
+% compute resulting limit values of thick curve at end points
+/dxa yb ya sub diameter mul dista div def
+/dya xb xa sub diameter mul dista div neg def
+/dxd yd yc sub diameter mul distd div def
+/dyd xd xc sub diameter mul distd div neg def
+
+% draw curve as rendered by ghostscript
+xa ya moveto
+xb yb xc yc xd yd curveto
+%linewidth 40 div setlinewidth
+linewidth setlinewidth
+0 setlinecap
+stroke
+
+% correct right path end points
+/xar xa dxa add def
+/yar ya dya add def
+/xdr xd dxd add def
+/ydr yd dyd add def
+
+% correct left path end points
+/xal xa dxa sub def
+/yal ya dya sub def
+/xdl xd dxd sub def
+/ydl yd dyd sub def
+
+
+/x1 xa xb add 0.5 mul def
+/y1 ya yb add 0.5 mul def
+/x2 xb xc add 0.5 mul def
+/y2 yb yc add 0.5 mul def
+/x3 xc xd add 0.5 mul def
+/y3 yc yd add 0.5 mul def
+/x4 xa xb 2 mul add xc add 4 div def
+/y4 ya yb 2 mul add yc add 4 div def
+/x5 xd xc 2 mul add xb add 4 div def
+/y5 yd yc 2 mul add yb add 4 div def
+/x6 xa xb 3 mul add xc 3 mul add xd add 8 div def
+/y6 ya yb 3 mul add yc 3 mul add yd add 8 div def
+
+0 0 0 setrgbcolor
+newpath xa ya 2.0 0 360 arc closepath fill
+newpath xb yb 2.0 0 360 arc closepath fill
+newpath xc yc 2.0 0 360 arc closepath fill
+newpath xd yd 2.0 0 360 arc closepath fill
+
+1 0 0 setrgbcolor
+newpath x1 y1 2.0 0 360 arc closepath fill
+newpath x2 y2 2.0 0 360 arc closepath fill
+newpath x3 y3 2.0 0 360 arc closepath fill
+
+0 1 0 setrgbcolor
+newpath x4 y4 2.0 0 360 arc closepath fill
+newpath x5 y5 2.0 0 360 arc closepath fill
+
+0 0 1 setrgbcolor
+newpath x6 y6 2.0 0 360 arc closepath fill
+
+
+% compute right-side normal vector
+/nabs diameter x5 x4 sub dup mul y5 y4 sub dup mul add sqrt div def
+
+/nxr y5 y4 sub nabs mul def
+/nyr x4 x5 sub nabs mul def
+
+
+% calculate location and direction vectors of lines to intersect
+/bloc1x 4 nxr x6 add mul xar 2 mul sub xdr add 3 div def
+/bloc1y 4 nyr y6 add mul yar 2 mul sub ydr add 3 div def
+/bdir1x xc xd add xa sub xb sub def
+/bdir1y yc yd add ya sub yb sub def
+/bloc2x xar def
+/bloc2y yar def
+/bdir2x xb xa sub def
+/bdir2y yb ya sub def
+
+% calculate determinant and inverse
+/bdet bdir2x bdir1y mul bdir2y bdir1x mul sub def
+
+%bdet 0.0 eq
+bdet abs 0.001 le
+{
+ /xbr xb nxr add def
+ /ybr yb nyr add def
+ /bnu 0.0 def
+ /bmu 0.0 def
+}
+{
+ /binvdet 1 bdet div def
+
+ % calculate inverse of dir matrix
+ /binvdir2x bdir1y binvdet mul def
+ /binvdir2y bdir2y binvdet mul neg def
+ /binvdir1x bdir1x binvdet mul neg def
+ /binvdir1y bdir2x binvdet mul def
+
+ % calculate mu and nu value (nu actually is not required)
+ /bmu binvdir2x bloc1x bloc2x sub mul binvdir1x bloc1y bloc2y sub mul add def
+ /bnu binvdir2y bloc1x bloc2x sub mul binvdir1y bloc1y bloc2y sub mul add def
+
+ /xbr bloc2x bmu bdir2x mul add def
+ /ybr bloc2y bmu bdir2y mul add def
+}
+ifelse
+
+
+
+% calculate location and direction vectors of lines to intersect
+/cloc1x 4 nxr x6 add mul xar add xdr 2 mul sub 3 div def
+/cloc1y 4 nyr y6 add mul yar add ydr 2 mul sub 3 div def
+/cdir1x xc xd add xa sub xb sub def
+/cdir1y yc yd add ya sub yb sub def
+/cloc2x xdr def
+/cloc2y ydr def
+/cdir2x xc xd sub def
+/cdir2y yc yd sub def
+
+% calculate determinant and inverse
+/cdet cdir2x cdir1y mul cdir2y cdir1x mul sub def
+
+%cdet 0.0 eq
+cdet abs 0.001 le
+{
+ % curve is just a straight line
+ /xcr xc nxr add def
+ /ycr yc nyr add def
+ /cmu 0.0 def
+}
+{
+ /cinvdet 1 cdet div def
+
+ % calculate inverse of dir matrix
+ /cinvdir2x cdir1y cinvdet mul def
+ /cinvdir2y cdir2y cinvdet mul neg def
+ /cinvdir1x cdir1x cinvdet mul neg def
+ /cinvdir1y cdir2x cinvdet mul def
+
+ % calculate mu and nu value (mu actually is not required)
+ /cmu cinvdir2x cloc1x cloc2x sub mul cinvdir1x cloc1y cloc2y sub mul add def
+ /cnu cinvdir2y cloc1x cloc2x sub mul cinvdir1y cloc1y cloc2y sub mul add def
+
+ /xcr cloc2x cmu cdir2x mul add def
+ /ycr cloc2y cmu cdir2y mul add def
+}
+ifelse
+
+
+% Analyse coefficients and decide how to compute displacements
+bmu 0.1 le
+{
+ /xbr 8 nxr x6 add mul xar sub xdr sub 3 div xcr sub def
+ /ybr 8 nyr y6 add mul yar sub ydr sub 3 div ycr sub def
+}
+if
+
+cmu 0.1 le
+{
+ /xcr 8 nxr x6 add mul xar sub xdr sub 3 div xbr sub def
+ /ycr 8 nyr y6 add mul yar sub ydr sub 3 div ybr sub def
+}
+if
+
+
+%
+
+
+% display debug info on page
+10 625 moveto
+(xa = ) show xa line1 cvs show
+10 600 moveto
+(ya = ) show ya line1 cvs show
+10 575 moveto
+(xb = ) show xb line1 cvs show
+10 550 moveto
+(yb = ) show yb line1 cvs show
+10 525 moveto
+(xc = ) show xc line1 cvs show
+10 500 moveto
+(yc = ) show yc line1 cvs show
+10 475 moveto
+(xd = ) show xd line1 cvs show
+10 450 moveto
+(yd = ) show yd line1 cvs show
+
+% display debug info on page
+10 425 moveto
+(xar = ) show xar line1 cvs show
+10 400 moveto
+(yar = ) show yar line1 cvs show
+10 375 moveto
+(xbr = ) show xbr line1 cvs show
+10 350 moveto
+(ybr = ) show ybr line1 cvs show
+10 325 moveto
+(xcr = ) show xcr line1 cvs show
+10 300 moveto
+(ycr = ) show ycr line1 cvs show
+10 275 moveto
+(xdr = ) show xdr line1 cvs show
+10 250 moveto
+(ydr = ) show ydr line1 cvs show
+
+10 1150 moveto
+(bdir1x = ) show bdir1x line1 cvs show
+10 1125 moveto
+(bdir1y = ) show bdir1y line1 cvs show
+10 1100 moveto
+(bdir2x = ) show bdir2x line1 cvs show
+10 1075 moveto
+(bdir2y = ) show bdir2y line1 cvs show
+10 1050 moveto
+(cdir1x = ) show cdir1x line1 cvs show
+10 1025 moveto
+(cdir1y = ) show cdir1y line1 cvs show
+10 1000 moveto
+(cdir2x = ) show cdir2x line1 cvs show
+10 975 moveto
+(cdir2y = ) show cdir2y line1 cvs show
+
+210 1150 moveto
+(bloc1x = ) show bloc1x line1 cvs show
+210 1125 moveto
+(bloc1y = ) show bloc1y line1 cvs show
+210 1100 moveto
+(bloc2x = ) show bloc2x line1 cvs show
+210 1075 moveto
+(bloc2y = ) show bloc2y line1 cvs show
+210 1050 moveto
+(cloc1x = ) show cloc1x line1 cvs show
+210 1025 moveto
+(cloc1y = ) show cloc1y line1 cvs show
+210 1000 moveto
+(cloc2x = ) show cloc2x line1 cvs show
+210 975 moveto
+(cloc2y = ) show cloc2y line1 cvs show
+
+10 925 moveto
+(bdet = ) show bdet line1 cvs show
+10 900 moveto
+(cdet = ) show cdet line1 cvs show
+
+10 850 moveto
+(bmu = ) show bmu line1 cvs show
+10 825 moveto
+(cmu = ) show cmu line1 cvs show
+10 800 moveto
+(bnu = ) show bnu line1 cvs show
+10 775 moveto
+(cnu = ) show cnu line1 cvs show
+
+210 850 moveto
+(nabs = ) show nabs line1 cvs show
+210 825 moveto
+(nxr = ) show nxr line1 cvs show
+210 800 moveto
+(nyr = ) show nyr line1 cvs show
+
+10 700 moveto
+(P1 = \( ) show x1 line1 cvs show ( , ) show y1 line1 cvs show ( \)) show
+10 675 moveto
+(P2 = \( ) show x2 line1 cvs show ( , ) show y2 line1 cvs show ( \)) show
+10 650 moveto
+(P3 = \( ) show x3 line1 cvs show ( , ) show y3 line1 cvs show ( \)) show
+
+310 700 moveto
+(P4 = \( ) show x4 line1 cvs show ( , ) show y4 line1 cvs show ( \)) show
+310 675 moveto
+(P5 = \( ) show x5 line1 cvs show ( , ) show y5 line1 cvs show ( \)) show
+310 650 moveto
+(P6 = \( ) show x6 line1 cvs show ( , ) show y6 line1 cvs show ( \)) show
+
+
+% define delta values
+/dxb xbr xb sub def
+/dyb ybr yb sub def
+/dxc xcr xc sub def
+/dyc ycr yc sub def
+
+
+2 setlinewidth
+
+% show shifted line
+x4 nxr add y4 nyr add moveto
+x5 nxr add y5 nyr add lineto
+x4 nxr sub y4 nyr sub moveto
+x5 nxr sub y5 nyr sub lineto
+stroke
+
+1 0 0 setrgbcolor
+0.5 setlinewidth
+
+% stroke right curve
+xar yar moveto
+xb dxb add yb dyb add xc dxc add yc dyc add xdr ydr curveto
+stroke
+% stroke left curve
+xal yal moveto
+xb dxb sub yb dyb sub xc dxc sub yc dyc sub xdl ydl curveto
+stroke
+
+%0.2 0.5 0.8 setrgbcolor
+%newpath bloc2x bloc2y 5.0 0 360 arc closepath fill
+%bloc2x 10 bdir2x mul sub bloc2y 10 bdir2y mul sub moveto
+%bloc2x 10 bdir2x mul add bloc2y 10 bdir2y mul add lineto stroke
+
+%0.5 0.5 0.5 setrgbcolor
+%newpath bloc1x bloc1y 5.0 0 360 arc closepath fill
+%bloc1x 10 bdir1x mul sub bloc1y 10 bdir1y mul sub moveto
+%bloc1x 10 bdir1x mul add bloc1y 10 bdir1y mul add lineto stroke
+
+0 0 1 setrgbcolor
+%1 setlinewidth
+%[5 5] 0 setdash
+0.1 setlinewidth
+[1 0] 0 setdash
+xa ya moveto xb yb lineto stroke
+xd yd moveto xc yc lineto stroke
+xar yar moveto xb dxb add yb dyb add lineto stroke
+xdr ydr moveto xc dxc add yc dyc add lineto stroke
+xal yal moveto xb dxb sub yb dyb sub lineto stroke
+xdl ydl moveto xc dxc sub yc dyc sub lineto stroke
+
+%xa diameter add ya moveto
+%xa diameter add yb diameter 2 div sub xc diameter 2 div add yc diameter sub xd yd diameter sub curveto
+%stroke
+
+%xa diameter sub ya moveto
+%xa diameter sub yb diameter 2 div add xc diameter 2 div sub yc diameter add xd yd diameter add curveto
+%stroke
+
+%/TimesItalic findfont 500 scalefont setfont
+%/Hershey-Gothic-English findfont 500 scalefont setfont
+%100 400 moveto
+%(a) true charpath stroke
+%0 0 0 setrgbcolor
+%0.5 setlinewidth
+%100 400 moveto
+%(a) true charpath stroke
+%(T) show
+
+showpage
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/examples/.dependencies b/Build/source/libs/t1lib/t1lib-5.1.2/examples/.dependencies
new file mode 100644
index 00000000000..95607702a79
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/examples/.dependencies
@@ -0,0 +1,2 @@
+subset.lo: subset.c ../lib/t1lib/t1lib.h
+t1example1.lo: t1example1.c
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/examples/FontDataBase b/Build/source/libs/t1lib/t1lib-5.1.2/examples/FontDataBase
new file mode 100644
index 00000000000..1173e1ef7e2
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/examples/FontDataBase
@@ -0,0 +1,10 @@
+8
+bchr.afm
+bchri.afm
+bchb.afm
+bchbi.afm
+dcr10.afm
+dcti10.afm
+dcbx10.afm
+dcbxti10.afm
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/examples/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/examples/Makefile.in
new file mode 100644
index 00000000000..b301db5d309
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/examples/Makefile.in
@@ -0,0 +1,112 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# uninstall
+# clean
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 10/16/1998
+# Last modified: 2001-04-01
+#
+
+
+LIBTOOL = ../libtool
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+
+# targets to build
+
+INCDIR = -I../lib
+
+TARGET1 = t1example1
+TARGET2 = subset
+
+OBJS1 = \
+ t1example1.lo
+
+SRCS1 = \
+ t1example1.c
+
+OBJS2 = \
+ subset.lo
+
+SRCS2 = \
+ subset.c
+
+T1LIB = ../lib/libt1.la
+
+.SUFFIXES: .lo
+.c.lo:
+ $(LIBTOOL) --mode=compile \
+ $(CC) $(INCDIR) -c $(CPPFLAGS) $(CFLAGS) $<
+
+all: $(TARGET1) $(TARGET2)
+
+
+$(TARGET1): $(OBJS1) ../lib/t1lib.h
+ $(LIBTOOL) --mode=link \
+ $(CC) -o $(TARGET1) $(LDFLAGS) $(OBJS1) $(T1LIB) $(LDLIBS)
+
+$(TARGET2): $(OBJS2) ../lib/t1lib.h
+ $(LIBTOOL) --mode=link \
+ $(CC) -o $(TARGET2) $(LDFLAGS) $(OBJS2) $(T1LIB) $(LDLIBS)
+
+.c.o:
+ $(LIBTOOL) --mode=compile \
+ $(CC) $(INCDIR) -c $(CPPFLAGS) $(CFLAGS) $?
+
+.PHONY: clean
+
+dependencies: dummy
+ gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies
+
+clean: dummy
+ $(RM) $(TARGET1) $(TARGET2) *.o *.lo .libs/* *~ \#*\# *.log *.bak
+ -rmdir .libs
+
+install: dummy
+
+uninstall: dummy
+
+dummy:
+
+
+# Dependencies of object files
+include .dependencies
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/examples/subset.c b/Build/source/libs/t1lib/t1lib-5.1.2/examples/subset.c
new file mode 100644
index 00000000000..a39c838a13e
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/examples/subset.c
@@ -0,0 +1,236 @@
+/*--------------------------------------------------------------------------
+ ----- File: subset.c
+ ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+ ----- Date: 2007-12-22
+ ----- Description: This file is part of t1lib. The program subset reads
+ a font file name and a string from the commandline
+ and creates a subset of the font which is sufficient
+ to display the string. It is an example of how to use
+ font subsetting.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007.
+ As of version 0.5, t1lib is distributed under the
+ GNU General Public Library Lincense. The
+ conditions can be found in the files LICENSE and
+ LGPL, which should reside in the toplevel
+ directory of the distribution. Please note that
+ there are parts of t1lib that are subject to
+ other licenses:
+ The parseAFM-package is copyrighted by Adobe Systems
+ Inc.
+ The type1 rasterizer is copyrighted by IBM and the
+ X11-consortium.
+ ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+ ----- Credits: I want to thank IBM and the X11-consortium for making
+ their rasterizer freely available.
+ Also thanks to Piet Tutelaers for his ps2pk, from
+ which I took the rasterizer sources in a format
+ independent from X11.
+ Thanks to all people who make free software living!
+--------------------------------------------------------------------------*/
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+/* Note: We include t1lib.h from lib/t1lib. That way the objectfile does only
+ need to be rebuild when the header itself changes and not each time the
+ library has been recompiled */
+#include "../lib/t1lib/t1lib.h"
+
+
+void printusage( void);
+
+
+int main(int argc, char *argv[])
+{
+
+ int i, j, result;
+ int realargs=0;
+ int logfile=0;
+ char mask[256];
+ int flags=T1_SUBSET_DEFAULT;
+ char *subset=NULL;
+ unsigned long ofsize=0;
+ FILE *ofp=stdout;
+
+ char** encoding = 0;
+ char* encodingfile = 0;
+ int doreencode = 0;
+ int reresult = 0;
+
+
+ if (argc==1){
+ printusage();
+ return(0);
+ }
+
+ /* If we want to log anything, then log all */
+ T1_SetLogLevel(T1LOG_DEBUG);
+
+ realargs=argc-1;
+
+ for (j=1; j<argc; j++) {
+ if (argv[j][0]=='-') {
+ if (strcmp( argv[j], "-l")==0) {
+ realargs -=1;
+ logfile=1;
+ }
+ else if (strcmp( argv[j], "-a")==0) {
+ /* default case */
+ realargs -=1;
+ }
+ else if (strcmp( argv[j], "-b")==0) {
+ realargs -=1;
+ flags |=T1_SUBSET_ENCRYPT_BINARY;
+ }
+ else if (strcmp( argv[j], "-f")==0) {
+ realargs -=1;
+ flags |=T1_SUBSET_FORCE_REENCODE;
+ }
+ else if (strcmp( argv[j], "-s")==0) {
+ realargs -=1;
+ flags |=T1_SUBSET_SKIP_REENCODE;
+ }
+ else if (strcmp( argv[j], "-e")==0) {
+ --realargs;
+ if ( j == argc-1 ) {
+ fprintf(stderr, "subset: Option \"-e\": Missing filename argument.\n");
+ printusage();
+ return 1;
+ }
+ ++j;
+ encodingfile=argv[j];
+ doreencode=1;
+ --realargs;
+ }
+ else {
+ fprintf(stderr, "subset: Unknown option: %s\n", argv[j]);
+ printusage();
+ return( 1);
+ }
+ }
+ else {
+ i=j; /* this is assumed to be the first font file name */
+ break;
+ }
+ }
+
+
+ if (realargs<2) {
+ fprintf( stderr, "subset: Need at least one font file and one string\n");
+ printusage();
+ return( 1);
+ }
+
+
+ if (logfile!=0) {
+ if ((T1_InitLib( LOGFILE |
+ IGNORE_CONFIGFILE |
+ IGNORE_FONTDATABASE)==NULL)) {
+ fprintf(stderr, "subset: Initialization of t1lib failed (T1_errno=%d)\n",
+ T1_errno);
+ return(1);
+ }
+ }
+ else {
+ if ((T1_InitLib( NO_LOGFILE |
+ IGNORE_CONFIGFILE |
+ IGNORE_FONTDATABASE)==NULL)){
+ fprintf(stderr, "subset: Initialization of t1lib failed (T1_errno=%d)\n", T1_errno);
+ return(1);
+ }
+ }
+
+ /* Load encoding file if specified */
+ if ( doreencode != 0 ) {
+ if ( (encoding = T1_LoadEncoding( encodingfile)) == NULL ) {
+ fprintf( stderr, "subset: Could not load Encoding File %s (T1_errno=%d, %s).\n",
+ encodingfile, T1_errno, T1_StrError(T1_errno));
+ exit( 0);
+ }
+ }
+
+
+ /* First, build font data base */
+ for (i=j; i<argc-1; i++){
+ if ((result=T1_AddFont( argv[i]))<0)
+ fprintf( stderr, "subset: Could not load font file %s (T1_errno=%d)\n",
+ argv[i], T1_errno);
+ }
+ if (T1_GetNoFonts()<1){
+ fprintf( stderr, "subset: Nothing to do\n");
+ T1_CloseLib();
+ return( 2);
+ }
+
+ /* second, setup subsetting mask from commandline string */
+ for ( i=0; i<256; i++) {
+ mask[i]=0;
+ }
+ for (i=0; i<strlen(argv[argc-1]); i++) {
+ mask[(unsigned char)argv[argc-1][i]]=1;
+ }
+
+ /* third, load fonts, generate subset and write it stdout. */
+ for( i=0; i<T1_GetNoFonts(); i++){
+ fprintf( stderr, "Loading %s ... ", T1_GetFontFileName(i));
+ fflush(stdout);
+ if ((T1_LoadFont(i))){
+ fprintf(stderr, "failed\n");
+ continue;
+ }
+ else {
+ fprintf(stderr, "finished\n");
+ }
+
+ /* Reencode font */
+ if ( doreencode != 0 ) {
+ if ( (reresult = T1_ReencodeFont( i, encoding)) != 0 ) {
+ fprintf( stderr, "Warning Reencoding font %d failed (%d)!\n", i, reresult);
+ }
+ }
+
+ fprintf( stderr, "Processing ... ");
+ fflush(stderr);
+ if ((subset=T1_SubsetFont(i, mask, flags, 64, 16384, &ofsize))==NULL) {
+ fprintf(stderr, "failed (T1_errno: %d)\n", T1_errno);
+ }
+ else {
+ fwrite(subset, 1, ofsize, ofp);
+ fprintf(stderr, "finished, wrote %lu bytes\n", ofsize);
+ }
+ fprintf( stderr, "Removing font %d ... ", i);
+ fflush(stderr);
+ if ((T1_DeleteFont( i))){
+ fprintf(stderr, "failed\n");
+ }
+ else {
+ fprintf(stderr, "finished\n");
+ }
+ }
+
+ T1_CloseLib();
+ return( 0);
+}
+
+
+void printusage( void)
+{
+ fprintf(stdout, "Usage: subset [-l|-a|-b|-f|-s|-e <encfile>] <fontfile1> [<fontfile2> ...] string\n");
+ fprintf(stdout, "\n");
+ fprintf(stdout, "Subset source fontfile(s) according to `string' and write result\nto stdout (T1Lib-%s)!\n\n",
+ T1_GetLibIdent());
+ fprintf(stdout, "Options: -l Write a log-file t1lib.log.\n");
+ fprintf(stdout, " -a Create ASCII-encrypted file (default).\n");
+ fprintf(stdout, " -b Create Binary-enrypted file.\n");
+ fprintf(stdout, " -f Force reencoding of the font subset, even if\n");
+ fprintf(stdout, " the source font uses internal StandardEncoding.\n");
+ fprintf(stdout, " -s Skip reencoding of the font subset, even if the\n");
+ fprintf(stdout, " source font defines a font-specific encoding.\n");
+ fprintf(stdout, " -e <encodingfile> Load an encoding from specified file and reencode\n");
+ fprintf(stdout, " source font before starting to create the subset.\n");
+ fprintf(stdout, " This option also implies [-f].\n");
+
+ return;
+}
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/examples/t1example1.c b/Build/source/libs/t1lib/t1lib-5.1.2/examples/t1example1.c
new file mode 100644
index 00000000000..66c44afa144
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/examples/t1example1.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <t1lib.h> /* All needed declarations */
+
+#ifdef VMS
+# define LOCAL_CONFIG "t1libvms.config"
+#else
+# define LOCAL_CONFIG "./t1lib.config"
+#endif
+int main( void)
+{
+
+ GLYPH *glyph;
+ int i;
+ char * my_config = malloc(25);
+
+ sprintf(my_config, "T1LIB_CONFIG=%s",LOCAL_CONFIG);
+
+ /* Set our environment to an existent config file directory */
+ putenv( my_config);
+
+ /* Pad bitmaps to 16 bits, the default being 8 bits */
+ T1_SetBitmapPad( 16);
+
+ /* Initialize t1lib and return if error occurs. No logfile will be
+ generated */
+ if ((T1_InitLib(NO_LOGFILE)==NULL)){
+ fprintf(stderr, "Initialization of t1lib failed\n");
+ return(-1);
+ }
+
+ /* For every font in the database, generate a glyph for the string
+ "Test" at 25 bp. Use Kerning. Then dump an ASCII representation
+ of the glyph to stdout */
+ for( i=0; i<T1_GetNoFonts(); i++){
+ printf("FontID=%d, Font=%s\n", i, T1_GetFontFilePath(i));
+ printf("FontID=%d, Metrics=%s\n", i, T1_GetAfmFilePath(i));
+ glyph=T1_SetString( i, "Test", 0, 0, T1_KERNING, 25.0, NULL);
+ T1_DumpGlyph( glyph);
+ }
+
+ /* Close library and free all data */
+ T1_CloseLib();
+
+ return( 0);
+
+}
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/examples/t1lib.config b/Build/source/libs/t1lib/t1lib-5.1.2/examples/t1lib.config
new file mode 100644
index 00000000000..af15422fa19
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/examples/t1lib.config
@@ -0,0 +1,6 @@
+This is a configuration file for t1lib
+
+FONTDATABASE=./FontDataBase
+ENCODING=../Fonts/enc:.
+AFM=../Fonts/afm:.
+TYPE1=../Fonts/type1:.
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/lib/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/lib/Makefile.in
new file mode 100644
index 00000000000..89e5e86f170
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/Makefile.in
@@ -0,0 +1,186 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# uninstall
+# clean
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 06/20/1997
+# Last modified: 2006-11-05
+#
+# Contributions by H.Kakugawa to use libtool!
+
+LIBTOOL = ../libtool
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+ALLCFLAGS = $(CFLAGS)
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+t1lib_version = @T1LIB_VERSION@
+t1lib_revision = @T1LIB_REVISION@
+t1lib_patchlevel = @T1LIB_PATCHLEVEL@
+T1_AA_TYPE16 = @T1_AA_TYPE16@
+T1_AA_TYPE32 = @T1_AA_TYPE32@
+T1_AA_TYPE64 = @T1_AA_TYPE64@
+SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS) $(T1_AA_TYPE16) $(T1_AA_TYPE32) $(T1_AA_TYPE64)' 'OPTIONS=$(OPTIONS)'
+@SET_MAKE@
+
+
+
+# targets to build:
+
+MAIN_TARGET = @MAIN_TARGET@
+MAIN_HEADER = @MAIN_HEADER@
+
+TYPE1_OBJS = \
+ type1/arith.lo \
+ type1/curves.lo \
+ type1/fontfcn.lo \
+ type1/hints.lo \
+ type1/lines.lo \
+ type1/objects.lo \
+ type1/paths.lo \
+ type1/regions.lo \
+ type1/scanfont.lo \
+ type1/spaces.lo \
+ type1/t1io.lo \
+ type1/t1snap.lo \
+ type1/t1stub.lo \
+ type1/token.lo \
+ type1/type1.lo \
+ type1/util.lo
+
+
+T1LIB_OBJS = \
+ t1lib/t1finfo.lo \
+ t1lib/t1base.lo \
+ t1lib/t1delete.lo \
+ t1lib/t1enc.lo \
+ t1lib/t1env.lo \
+ t1lib/t1load.lo \
+ t1lib/t1set.lo \
+ t1lib/t1trans.lo \
+ t1lib/t1aaset.lo \
+ t1lib/t1afmtool.lo \
+ t1lib/t1outline.lo \
+ t1lib/t1subset.lo \
+ t1lib/parseAFM.lo
+
+
+T1LIBX_OBJS = @T1LIBX_OBJS@
+
+
+LIBSUBDIRS = \
+ type1 \
+ t1lib
+
+
+all: $(MAIN_TARGET)
+
+
+
+$(TYPE1_OBJS): type1_target
+$(T1LIB_OBJS) $(T1LIBX_OBJS): t1lib_target
+
+
+type1_target:
+ @set -e; (cd type1; $(SUBMAKE) ) || exit 1
+
+
+t1lib_target:
+ @set -e; (cd t1lib; $(SUBMAKE) ) || exit 1
+
+
+libt1.la: $(TYPE1_OBJS) $(T1LIB_OBJS)
+ $(LIBTOOL) --mode=link \
+ $(CC) $(LDFLAGS) -o $@ $(TYPE1_OBJS) $(T1LIB_OBJS) \
+ -version-info @T1LIB_LT_CURRENT@:@T1LIB_LT_REVISION@:@T1LIB_LT_AGE@ \
+ -lm -no-undefined -rpath $(libdir)
+ cp t1lib/t1lib.h .
+
+
+libt1x.la: $(T1LIBX_OBJS)
+ $(LIBTOOL) --mode=link \
+ $(CC) $(LDFLAGS) -o $@ $(T1LIBX_OBJS) \
+ -version-info @T1LIB_LT_CURRENT@:@T1LIB_LT_REVISION@:@T1LIB_LT_AGE@ \
+ libt1.la $(X_LIBS) $(XPM_LIB) $(XLIB) -no-undefined -rpath $(libdir)
+ cp t1lib/t1libx.h .
+
+
+.PHONY: clean
+
+
+dependencies: dummy
+ for i in $(LIBSUBDIRS); do \
+ (cd $$i; $(MAKE) dependencies) || exit 1; \
+ done
+
+
+clean: dummy
+ for i in $(LIBSUBDIRS); do \
+ (cd $$i; $(MAKE) clean) || exit 1; \
+ done
+ -$(RM) -f libt1*.la libt1*.a libt1*.so* *~ t1lib*.h .libs/*
+ -rmdir .libs
+
+
+install: dummy
+ $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
+ $(MKINSTALLDIRS) $(DESTDIR)$(includedir)
+ $(MKINSTALLDIRS) $(DESTDIR)@T1LIB_DATA_DIR@
+ $(LIBTOOL) --mode=install \
+ $(INSTALL_DATA) $(MAIN_TARGET) $(DESTDIR)$(libdir)
+ $(LIBTOOL) --mode=install \
+ $(INSTALL_DATA) $(MAIN_HEADER) $(DESTDIR)$(includedir)
+ if (test -f $(DESTDIR)@T1LIB_DATA_DIR@/t1lib.config) \
+ then \
+ echo "Alert: Global configuration file exists, installation skipped!"; \
+ else \
+ $(LIBTOOL) --mode=install $(INSTALL_DATA) t1lib.config $(DESTDIR)@T1LIB_DATA_DIR@; \
+ fi;
+
+
+uninstall: dummy
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libt1.la
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libt1x.la
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(includedir)/t1lib.h
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(includedir)/t1libx.h
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)@T1LIB_DATA_DIR@/t1lib.config
+
+
+dummy:
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib.config b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib.config
new file mode 100644
index 00000000000..5c587c45002
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib.config
@@ -0,0 +1,8 @@
+This is the global configuration file for t1lib.
+Note that it is not of any use if not setup by the system administrator.
+
+For information on how to set up these things see the t1lib-manual.
+
+ENCODING=.
+AFM=.
+TYPE1=.
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/.dependencies b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/.dependencies
new file mode 100644
index 00000000000..5cdba86135f
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/.dependencies
@@ -0,0 +1,80 @@
+parseAFM.lo: parseAFM.c parseAFM.h t1base.h t1misc.h
+t1aaset.lo: t1aaset.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1aaset.h \
+ t1set.h t1load.h t1finfo.h t1base.h t1outline.h
+t1afmtool.lo: t1afmtool.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h ../type1/blues.h t1types.h sysconf.h t1extern.h \
+ t1misc.h t1finfo.h t1base.h t1set.h t1load.h t1afmtool.h
+t1base.lo: t1base.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h sysconf.h t1base.h t1types.h t1global.h t1misc.h \
+ t1env.h t1delete.h
+t1delete.lo: t1delete.c ../type1/types.h parseAFM.h ../type1/objects.h \
+ ../type1/spaces.h ../type1/util.h ../type1/fontfcn.h t1types.h \
+ sysconf.h t1extern.h t1misc.h t1delete.h t1load.h t1finfo.h t1base.h
+t1enc.lo: t1enc.c ../type1/ffilest.h ../type1/types.h ../type1/Xstuff.h \
+ ../type1/fontmisc.h ../type1/fontstruct.h ../type1/font.h \
+ ../type1/fsmasks.h ../type1/fontfile.h ../type1/fontxlfd.h parseAFM.h \
+ ../type1/objects.h ../type1/spaces.h ../type1/util.h \
+ ../type1/fontfcn.h ../type1/paths.h ../type1/regions.h t1types.h \
+ sysconf.h t1extern.h t1misc.h t1enc.h t1env.h t1base.h t1finfo.h
+t1env.lo: t1env.c ../type1/types.h parseAFM.h ../type1/objects.h \
+ ../type1/spaces.h ../type1/util.h ../type1/fontfcn.h \
+ ../type1/fontmisc.h sysconf.h t1types.h t1extern.h t1misc.h t1env.h \
+ t1base.h
+t1finfo.lo: t1finfo.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1finfo.h \
+ t1base.h t1set.h t1load.h
+t1load.lo: t1load.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/blues.h ../type1/paths.h \
+ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1load.h \
+ t1env.h t1set.h t1base.h t1finfo.h t1afmtool.h
+t1outline.lo: t1outline.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1set.h \
+ t1load.h t1finfo.h t1base.h t1outline.h
+t1set.lo: t1set.c ../type1/ffilest.h ../type1/types.h ../type1/Xstuff.h \
+ ../type1/fontmisc.h ../type1/fontstruct.h ../type1/font.h \
+ ../type1/fsmasks.h ../type1/fontfile.h ../type1/fontxlfd.h parseAFM.h \
+ ../type1/objects.h ../type1/spaces.h ../type1/util.h \
+ ../type1/fontfcn.h ../type1/paths.h ../type1/regions.h t1types.h \
+ sysconf.h t1extern.h t1misc.h t1set.h t1load.h t1finfo.h t1base.h
+t1subset.lo: t1subset.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1finfo.h \
+ t1base.h t1delete.h t1subset.h
+t1trans.lo: t1trans.c ../type1/ffilest.h ../type1/types.h \
+ ../type1/Xstuff.h ../type1/fontmisc.h ../type1/fontstruct.h \
+ ../type1/font.h ../type1/fsmasks.h ../type1/fontfile.h \
+ ../type1/fontxlfd.h parseAFM.h ../type1/objects.h ../type1/spaces.h \
+ ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1trans.h \
+ t1base.h
+t1x11.lo: t1x11.c ../type1/types.h parseAFM.h ../type1/objects.h \
+ ../type1/spaces.h ../type1/util.h ../type1/fontfcn.h ../type1/paths.h \
+ ../type1/regions.h t1types.h sysconf.h t1extern.h t1misc.h t1set.h \
+ t1aaset.h t1load.h t1finfo.h t1x11.h t1base.h
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/Makefile.in
new file mode 100644
index 00000000000..a6c24785b06
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/Makefile.in
@@ -0,0 +1,106 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# clean
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 06/20/1997
+# Last modified: 2001-04-01
+#
+# Modified by H.Kakugawa to use libtool
+
+LIBTOOL = ../../libtool
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+ALLCFLAGS = $(CFLAGS)
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+T1_AA_TYPE16 = @T1_AA_TYPE16@
+T1_AA_TYPE32 = @T1_AA_TYPE32@
+T1_AA_TYPE64 = @T1_AA_TYPE64@
+SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS) $(T1_AA_TYPE16) $(T1_AA_TYPE32) $(T1_AA_TYPE64)' 'OPTIONS=$(OPTIONS)'
+@SET_MAKE@
+
+
+
+OBJS = \
+ t1finfo.lo \
+ t1base.lo \
+ t1delete.lo \
+ t1enc.lo \
+ t1env.lo \
+ t1load.lo \
+ t1set.lo \
+ t1trans.lo \
+ t1aaset.lo \
+ t1afmtool.lo \
+ t1outline.lo \
+ t1subset.lo \
+ parseAFM.lo
+
+XOBJS = @XOBJS@
+
+.SUFFIXES: .c .o .lo
+.c.lo:
+ $(LIBTOOL) --mode=compile \
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
+
+.c.o:
+ $(LIBTOOL) --mode=compile \
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
+
+all: $(OBJS) $(XOBJS)
+
+.PHONY: clean
+
+dependencies: dummy
+ gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies
+
+clean: dummy
+ -$(RM) *.lo *.o .libs/*
+ -$(RM) *~ *.bak \#*\#
+ -rmdir .libs
+
+
+install: dummy
+
+
+dummy:
+
+
+# Dependencies of object files
+include .dependencies
diff --git a/Build/source/libs/t1lib/parseAFM.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/parseAFM.c
index 6a31d7f3443..6a31d7f3443 100644
--- a/Build/source/libs/t1lib/parseAFM.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/parseAFM.c
diff --git a/Build/source/libs/t1lib/parseAFM.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/parseAFM.h
index 9b583a19ac8..9b583a19ac8 100644
--- a/Build/source/libs/t1lib/parseAFM.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/parseAFM.h
diff --git a/Build/source/libs/t1lib/sysconf.h.in b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/sysconf.h.in
index 1809d651b9e..1809d651b9e 100644
--- a/Build/source/libs/t1lib/sysconf.h.in
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/sysconf.h.in
diff --git a/Build/source/libs/t1lib/t1aaset.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1aaset.c
index 0244ca25c1d..86adc766620 100644
--- a/Build/source/libs/t1lib/t1aaset.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1aaset.c
@@ -2,11 +2,11 @@
----- File: t1aaset.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
Subsampling based on code by Raph Levien (raph@acm.org)
- ----- Date: 2003-01-02
+ ----- Date: 2007-12-21
----- Description: This file is part of the t1-library. It contains
functions for antialiased setting of characters
and strings of characters.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -52,6 +52,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
#include "t1types.h"
@@ -962,11 +963,21 @@ GLYPH *T1_AASetChar( int FontID, char charcode, float size,
offset=0;
target_ptr=aaglyph.bits;
- /* We must check for n_vert==1 because the computation above is not
- valid in this case */
- if (n_vert==1)
- v_start=v_start < v_end ? v_start : v_end;
+ /* We must check for n_vert==1 because then both v_start and v_end could / will
+ affect the same AA scan line. Because I'm forgetful, a reminder:
+ v_end | 000000000000000000000
+ | 111111111111111111111 ^
+ Y 111111111111111111111 |
+ 000000000000000000000 | v_start
+
+ In order to count the v_end from bottom to top, we express it as (T1aa_level-v_end).
+ The number of rows to take into account is then v_start-(T1aa_level-v_end).
+ */
+ if (n_vert==1) {
+ v_start=v_start - (T1aa_level - v_end);
+ }
+
ptr = glyph->bits;
for (i = 0; i < n_vert; i++) {
if (i==0)
@@ -1184,10 +1195,12 @@ GLYPH *T1_AASetString( int FontID, char *string, int len,
offset=0;
target_ptr=aastring_glyph.bits;
- /* We must check for n_vert==1 because the computation above is not
- valid in this case */
- if (n_vert==1)
- v_start=v_start < v_end ? v_start : v_end;
+ /* We must check for n_vert==1 because then both v_start and v_end could / will
+ affect the same AA scan line.
+ */
+ if (n_vert==1) {
+ v_start=v_start - (T1aa_level - v_end);
+ }
ptr = glyph->bits;
for (i = 0; i < n_vert; i++) {
@@ -1395,10 +1408,12 @@ GLYPH* T1_AASetRect( int FontID, float size,
offset=0;
target_ptr=aaglyph.bits;
- /* We must check for n_vert==1 because the computation above is not
- valid in this case */
- if (n_vert==1)
- v_start=v_start < v_end ? v_start : v_end;
+ /* We must check for n_vert==1 because then both v_start and v_end could / will
+ affect the same AA scan line.
+ */
+ if (n_vert==1) {
+ v_start=v_start - (T1aa_level - v_end);
+ }
ptr = glyph->bits;
for (i = 0; i < n_vert; i++) {
@@ -1544,7 +1559,7 @@ int T1_AAGetGrayValues( long *pgrayvals)
-/* Get the current setting of graylevels for 2x antialiasing. The 17
+/* Get the current setting of graylevels for 4x antialiasing. The 17
values are stored at address pgrayvals in order from background to
foreground */
int T1_AAHGetGrayValues( long *pgrayvals)
@@ -1562,14 +1577,14 @@ int T1_AAHGetGrayValues( long *pgrayvals)
}
for ( i=0; i<17; i++) { /* bg (i=0) to fg (i=16) */
- pgrayvals[i]=gv[i];
+ pgrayvals[i]=gv_h[i];
}
return( 0);
}
-/* Get the current setting of graylevels for 2x antialiasing. The 2
+/* Get the current setting of graylevels for no antialiasing. The 2
values are stored at address pgrayvals in order from background to
foreground */
int T1_AANGetGrayValues( long *pgrayvals)
@@ -1584,8 +1599,8 @@ int T1_AANGetGrayValues( long *pgrayvals)
T1_errno=T1ERR_INVALID_PARAMETER;
return(-1);
}
- pgrayvals[0]=gv[0]; /* background */
- pgrayvals[1]=gv[1]; /* foreground */
+ pgrayvals[0]=gv_n[0]; /* background */
+ pgrayvals[1]=gv_n[1]; /* foreground */
return( 0);
}
@@ -1818,10 +1833,12 @@ GLYPH *T1_AAFillOutline( T1_OUTLINE *path, int modflag)
offset=0;
target_ptr=aaglyph.bits;
- /* We must check for n_vert==1 because the computation above is not
- valid in this case */
- if (n_vert==1)
- v_start=v_start < v_end ? v_start : v_end;
+ /* We must check for n_vert==1 because then both v_start and v_end could / will
+ affect the same AA scan line.
+ */
+ if (n_vert==1) {
+ v_start=v_start - (T1aa_level - v_end);
+ }
ptr = glyph->bits;
for (i = 0; i < n_vert; i++) {
diff --git a/Build/source/libs/t1lib/t1aaset.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1aaset.h
index 1415ee5ce28..1415ee5ce28 100644
--- a/Build/source/libs/t1lib/t1aaset.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1aaset.h
diff --git a/Build/source/libs/t1lib/t1afmtool.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1afmtool.c
index 4e2cf1365b6..9a1fae36377 100644
--- a/Build/source/libs/t1lib/t1afmtool.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1afmtool.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1afmtool.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2002-08-17
+ ----- Date: 2007-12-23
----- Description: This file is part of the t1-library. It contains
functions for generating a fallback set of afm data
from type 1 font files.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -52,6 +52,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
#include "../type1/blues.h"
@@ -89,6 +90,13 @@ FontInfo *T1_GenerateAFMFallbackInfo( int FontID)
char **charnames;
int nochars=0;
FontInfo *pAFMData;
+
+ /* When generaing fallback info, we accumulate a font bounding box that
+ could be useful when the font's definition is missing or trivial. */
+ int acc_llx=0;
+ int acc_lly=0;
+ int acc_urx=0;
+ int acc_ury=0;
/* We return to this if something goes wrong deep in the rasterizer */
@@ -236,6 +244,21 @@ FontInfo *T1_GenerateAFMFallbackInfo( int FontID)
pAFMData->cmi[i].charBBox.ury =0;
}
pAFMData->cmi[i].ligs=NULL;
+
+ /* Accumulate bounding box of font */
+ if ( pAFMData->cmi[i].charBBox.llx < acc_llx ) {
+ acc_llx=pAFMData->cmi[i].charBBox.llx;
+ }
+ if ( pAFMData->cmi[i].charBBox.lly < acc_lly ) {
+ acc_lly=pAFMData->cmi[i].charBBox.lly;
+ }
+ if ( pAFMData->cmi[i].charBBox.urx > acc_urx ) {
+ acc_urx=pAFMData->cmi[i].charBBox.urx;
+ }
+ if ( pAFMData->cmi[i].charBBox.ury > acc_ury ) {
+ acc_ury=pAFMData->cmi[i].charBBox.ury;
+ }
+
/* We are done with area, so get rid of it. Solves the REALLY
HUGE memory leak */
KillRegion (area);
@@ -246,6 +269,24 @@ FontInfo *T1_GenerateAFMFallbackInfo( int FontID)
nochars, FontID);
T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf,
T1LOG_STATISTIC);
+
+ /* Check whether the bounding box we computed could be better than that
+ specified in the font file itself. Id so, we overwrite it. */
+ if ( pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[0].data.integer == 0 &&
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[1].data.integer == 0 &&
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[2].data.integer == 0 &&
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[3].data.integer == 0 ) {
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[0].data.integer = acc_llx;
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[1].data.integer = acc_lly;
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[2].data.integer = acc_urx;
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[3].data.integer = acc_ury;
+
+ sprintf( err_warn_msg_buf,
+ "Substituted accumulated FontBBox [%d,%d,%d,%d] for trivial FontBBox of font %d!",
+ acc_llx, acc_lly, acc_urx, acc_ury, FontID);
+ T1_PrintLog( "T1_GenerateAFMFallbackInfo()", err_warn_msg_buf,
+ T1LOG_WARNING);
+ }
/* make sure to free S */
if (S) {
diff --git a/Build/source/libs/t1lib/t1afmtool.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1afmtool.h
index 6d54751d98a..6d54751d98a 100644
--- a/Build/source/libs/t1lib/t1afmtool.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1afmtool.h
diff --git a/Build/source/libs/t1lib/t1base.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1base.c
index d2d28dc6fd4..269d2aa2dd1 100644
--- a/Build/source/libs/t1lib/t1base.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1base.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1base.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2004-03-04
+ ----- Date: 2005-05-17
----- Description: This file is part of the t1-library. It contains basic
routines to initialize the data structures used
by the t1-library.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -55,6 +55,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
@@ -138,8 +139,12 @@ void *T1_InitLib( int log)
char *logfilepath=NULL;
char *envlogreq=NULL;
int usrforcelog=0;
-
-
+
+ /* Check against multiple initialization. */
+ if ( T1_Up != 0 ) {
+ T1_errno=T1ERR_OP_NOT_PERMITTED;
+ return NULL;
+ }
/* Reset T1_errno */
T1_errno=0;
@@ -318,14 +323,31 @@ void *T1_InitLib( int log)
if (result>-1)
pFontBase->no_fonts+=result;
i++;
-
}
- if (result == 0){
+ if ( (result == 0) && (i != 0)){
T1_PrintLog( "T1_InitLib()", "No fonts from Font Database File(s) found (T1_errno=%d)",
T1LOG_ERROR, T1_errno);
return(NULL);
}
+ result=0;
+ /* Read XLFD fontdatabase(s) */
+ i=0;
+ while (T1_FDBXLFD_ptr[i]!=NULL) {
+ if ((result=intT1_scanFontDBaseXLFD(T1_FDBXLFD_ptr[i]))==-1){
+ T1_PrintLog( "T1_InitLib()", "Fatal error scanning XLFD Font Database File %s",
+ T1LOG_WARNING, T1_FDB_ptr[i]);
+ }
+ if (result>-1)
+ pFontBase->no_fonts+=result;
+ i++;
+ }
+ if ( (result == 0) && (i != 0)){
+ T1_PrintLog( "T1_InitLib()", "No fonts from XLFD Font Database File(s) found (T1_errno=%d)",
+ T1LOG_ERROR, T1_errno);
+ return(NULL);
+ }
+
/* Initialize the no_fonts... values */
pFontBase->no_fonts_ini=pFontBase->no_fonts;
pFontBase->no_fonts_limit=pFontBase->no_fonts;
@@ -347,7 +369,7 @@ void *T1_InitLib( int log)
- initializes an array that allows to acces these names by an
index number, the font_ID
- returns -1 on fatal error and the number of fonts located
- successfullly
+ successfully
*/
int intT1_scanFontDBase( char *filename)
{
@@ -470,13 +492,139 @@ int intT1_scanFontDBase( char *filename)
}
+/* intT1_scanFontDBaseXLFD():
+ - opens the file with the font definitions,
+ - reads the number of fonts defined and saves this in FontBase,
+ - allocates memory for all the filenames of the Type1 files
+ - tests for .pfa und .pfb files and saves the name found
+ - initializes an array that allows to acces these names by an
+ index number, the font_ID
+ - returns -1 on fatal error and the number of fonts located
+ successfully.
+
+ This function is identical to intT1_scanFontDBase() with the
+ difference that it expects the database file to be in XLFD format,
+ that is, the font's name comes in the first place stead of in
+ the last.
+ */
+int intT1_scanFontDBaseXLFD( char *filename)
+{
+ int fd;
+ int filesize, i, j, l, m;
+ int found=0, located=0;
+ char *filebuffer;
+ int nofonts=0;
+ FONTPRIVATE* fontarrayP=NULL;
+
+#ifndef O_BINARY
+# define O_BINARY 0x0
+#endif
+
+ if ((fd=open( filename, O_RDONLY | O_BINARY))<3){
+ T1_PrintLog( "intT1_scanFontDBaseXLFD()", "XLFD Font Database File %s not found!",
+ T1LOG_WARNING, filename);
+ T1_errno=T1ERR_FILE_OPEN_ERR;
+ return(-1);
+ }
+
+ /* Get the file size */
+ filesize=lseek( fd, 0, 2);
+ /* Reset fileposition to start */
+ lseek (fd, 0, 0);
+
+ if ((filebuffer=(char *)malloc(filesize*sizeof(char)
+ )) == NULL){
+ T1_PrintLog( "intT1_scanFontDBaseXLFD()",
+ "Couldn't allocate memory for loading XLFD font database file %s",
+ T1LOG_ERROR, filename);
+ T1_errno=T1ERR_ALLOC_MEM;
+ return(-1);
+ }
+
+ i=read( fd, filebuffer, filesize);
+ close(fd); /* Close XLFD font database file */
+
+ i=j=l=m=0;
+
+ while (i<filesize) {
+ if (filebuffer[i]=='\n'){ /* We are at the end of line */
+ if (j==0) { /* Read the first line as the number of fonts */
+ filebuffer[i]=0;
+ sscanf( &filebuffer[0], "%d", &nofonts);
+ filebuffer[i]='\n'; /* Because it gives a better feeling */
+ /* (Re)Allocate memory for 'no_fonts' structures: */
+ if ((FontBase.pFontArray=(FONTPRIVATE *)
+ realloc( FontBase.pFontArray, (FontBase.no_fonts+nofonts)*sizeof(FONTPRIVATE))) == NULL) {
+ T1_PrintLog( "inT1_scanFontDBaseXLFD()",
+ "Failed to allocate memory for FONTPRIVATE-area while scanning %s",
+ T1LOG_ERROR, filename);
+ T1_errno=T1ERR_ALLOC_MEM;
+ return(-1);
+ }
+ /* setup pointer to newly allocated area and do a reset */
+ fontarrayP=&(FontBase.pFontArray[FontBase.no_fonts]);
+ memset(fontarrayP, 0, nofonts*sizeof(FONTPRIVATE));
+ located=1; /* In order to increment m */
+ }
+ else { /* We are in the second or higher line */
+ /* l indexes the beginning of the line */
+ while (isspace((int)filebuffer[l])){
+ l++;
+ }
+ /* We are at the first printable character of a line;
+ scan the first white space terminated string as font
+ file name. */
+ sscanf( &(filebuffer[l]), "%s", &(linebuf[0]));
+ /* We print error string before testing because after the call
+ to test_for_t1_file() filename is substituted by an emty
+ string if the file was not found: */
+ sprintf( err_warn_msg_buf, "Type 1 Font file %s.[pfa/pfb] not found (FontID=%d, SearchPath=%s)",
+ linebuf, m-1, T1_GetFileSearchPath(T1_PFAB_PATH));
+ if ((test_for_t1_file( &linebuf[0]))){
+ T1_PrintLog( "intT1_scanFontDBase()", err_warn_msg_buf, T1LOG_WARNING);
+ located=0;
+ }
+ else{
+ /* linebuf contains now the valid Type1 filename; let's
+ now copy this string into the appropriate place in the
+ FONTPRIVATE-struct: */
+ found++;
+ located=1;
+ if ((fontarrayP[m-1].pFontFileName=(char *)
+ calloc( strlen( &linebuf[0])+1, sizeof(char))) == NULL){
+ T1_PrintLog( "intT1_scanFontDBaseXLFD()",
+ "Failed to allocate memory for Filename %s (FontID=%d)",
+ T1LOG_ERROR, &linebuf[0], m-1);
+ T1_errno=T1ERR_ALLOC_MEM;
+ return(-1);
+ }
+ strcpy( fontarrayP[m-1].pFontFileName, &linebuf[0]);
+ }
+ }
+ j++; /* Advance line counter */
+ if ((located))
+ m++;
+ /* Store index to new line */
+ l = i + 1;
+ }
+ if (j>nofonts) /* to ignore especially white space at end */
+ break;
+ i++; /* Step further in file position */
+ }
+ /* Return the memory for file reading */
+ free(filebuffer);
+
+ return( found);
+}
+
+
/* T1_CloseLib(): Close the library and free all associated memory */
int T1_CloseLib( void)
{
int i, j, error=0;
- if (T1_Up){
+ if ( T1_Up != 0 ) {
for (i=pFontBase->no_fonts; i; i--){
/* Free filename only if not NULL and if the font is physical!
Do it before removing the font since the physical information
diff --git a/Build/source/libs/t1lib/t1base.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1base.h
index a14b73afafa..561abae429c 100644
--- a/Build/source/libs/t1lib/t1base.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1base.h
@@ -1,10 +1,10 @@
/*--------------------------------------------------------------------------
----- File: t1base.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2002-12-08
+ ----- Date: 2002-05-16
----- Description: This file is part of the t1-library. It contains
declarations and definitions for t1base.c
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -29,6 +29,7 @@
void *T1_InitLib( int log);
int intT1_scanFontDBase( char *filename);
+int intT1_scanFontDBaseXLFD( char *filename);
int T1_CloseLib( void);
int T1_AddFont( char *fontfilename);
void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...);
@@ -57,6 +58,7 @@ extern int T1_Type1OperatorFlags;
extern void *T1_InitLib( int log);
extern int intT1_scanFontDBase( char *filename);
+extern int intT1_scanFontDBaseXLFD( char *filename);
extern int T1_CloseLib( void);
extern int T1_AddFont( char *fontfilename);
extern void T1_PrintLog( char *func_ident, char *msg_txt, int level, ...);
diff --git a/Build/source/libs/t1lib/t1delete.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1delete.c
index fea216b3222..fea216b3222 100644
--- a/Build/source/libs/t1lib/t1delete.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1delete.c
diff --git a/Build/source/libs/t1lib/t1delete.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1delete.h
index 62c42aac818..62c42aac818 100644
--- a/Build/source/libs/t1lib/t1delete.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1delete.h
diff --git a/Build/source/libs/t1lib/t1enc.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1enc.c
index 4e3ec2aa717..2ec19592ac3 100644
--- a/Build/source/libs/t1lib/t1enc.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1enc.c
@@ -1,10 +1,10 @@
/*--------------------------------------------------------------------------
----- File: t1enc.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2003-01-05
+ ----- Date: 2005-05-01
----- Description: This file is part of the t1-library. It contains
functions encoding handling at runtime.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -50,6 +50,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
diff --git a/Build/source/libs/t1lib/t1enc.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1enc.h
index df9a07ad95f..df9a07ad95f 100644
--- a/Build/source/libs/t1lib/t1enc.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1enc.h
diff --git a/Build/source/libs/t1lib/t1env.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1env.c
index 282b68b339a..6a68c0a4bd9 100644
--- a/Build/source/libs/t1lib/t1env.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1env.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1env.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2002-11-27
+ ----- Date: 2007-12-22
----- Description: This file is part of the t1-library. It implements
the reading of a configuration file and path-searching
of type1-, afm- and encoding files.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -74,6 +74,7 @@ static int pfab_no=-1;
static int afm_no=-1;
static int enc_no=-1;
static int fdb_no=-1;
+static int fdbxlfd_no=-1;
static char path_sep_char='\0';
static char path_sep_string[2];
@@ -91,6 +92,7 @@ static char T1_afm[]="sys$disk:[]";
static char T1_enc[]="sys$disk:[]";
#endif
char T1_fdb[]="FontDataBase";
+char T1_fdbxlfd[]=""; /* By default, we do not search XLFD databases. */
/* keywords recognized in config file */
@@ -98,6 +100,7 @@ static const char enc_key[]="ENCODING";
static const char pfab_key[]="TYPE1";
static const char afm_key[]="AFM";
static const char fdb_key[]="FONTDATABASE";
+static const char fdbxlfd_key[]="FONTDATABASEXLFD";
/* qstrncpy(): Copy bytes from srcP to to destP. srcP is count bytes long
@@ -164,6 +167,12 @@ void intT1_SetupDefaultSearchPaths( void)
strcpy(T1_FDB_ptr[0],T1_fdb);
fdb_no=0;
}
+
+ if (fdbxlfd_no==-1) {
+ /* The XLFD font data base defaults to be empty */
+ T1_FDBXLFD_ptr=(char**) calloc( 1, sizeof(char*));
+ fdbxlfd_no=0;
+ }
}
@@ -177,39 +186,53 @@ void intT1_FreeSearchPaths( void)
if (T1_PFAB_ptr!=NULL) {
while (T1_PFAB_ptr[i]!=NULL) {
free(T1_PFAB_ptr[i]);
- T1_PFAB_ptr[i]=NULL;
+ T1_PFAB_ptr[i++]=NULL;
}
free( T1_PFAB_ptr);
+ T1_PFAB_ptr=NULL;
}
i=0;
if (T1_AFM_ptr!=NULL) {
while (T1_AFM_ptr[i]!=NULL) {
free(T1_AFM_ptr[i]);
- T1_AFM_ptr[i]=NULL;
+ T1_AFM_ptr[i++]=NULL;
}
free( T1_AFM_ptr);
+ T1_AFM_ptr=NULL;
}
i=0;
if (T1_ENC_ptr!=NULL) {
while (T1_ENC_ptr[i]!=NULL) {
free(T1_ENC_ptr[i]);
- T1_ENC_ptr[i]=NULL;
+ T1_ENC_ptr[i++]=NULL;
}
free( T1_ENC_ptr);
+ T1_ENC_ptr=NULL;
}
i=0;
if (T1_FDB_ptr!=NULL) {
while (T1_FDB_ptr[i]!=NULL) {
free(T1_FDB_ptr[i]);
- T1_FDB_ptr[i]=NULL;
+ T1_FDB_ptr[i++]=NULL;
}
free( T1_FDB_ptr);
+ T1_FDB_ptr=NULL;
+ }
+ i=0;
+ if (T1_FDBXLFD_ptr!=NULL) {
+ while (T1_FDBXLFD_ptr[i]!=NULL) {
+ free(T1_FDBXLFD_ptr[i]);
+ T1_FDBXLFD_ptr[i++]=NULL;
+ }
+ free( T1_FDBXLFD_ptr);
+ T1_FDBXLFD_ptr=NULL;
}
/* indicate t1lib non-initialized */
pfab_no=-1;
afm_no=-1;
enc_no=-1;
fdb_no=-1;
+ fdbxlfd_no=-1;
return;
}
@@ -242,7 +265,7 @@ int intT1_ScanConfigFile( void)
env_str=getenv(ENV_CONF_STRING);
linecnt=1;
- if (env_str==NULL) {
+ if (!env_str) {
/* environment variable not set, try to open default file
in user's home directory and afterwards global config file */
if ((usershome=getenv("HOME"))!=NULL) {
@@ -285,7 +308,7 @@ int intT1_ScanConfigFile( void)
}
else{
sprintf( err_warn_msg_buf, "Using %s as Configfile (global)",
- cnffilepath);
+ globalcnffilepath);
T1_PrintLog( "ScanConfigFile()", err_warn_msg_buf, T1LOG_STATISTIC);
}
}
@@ -358,7 +381,7 @@ int intT1_ScanConfigFile( void)
idestP=&enc_no;
curr_key=(char*)enc_key;
}
- else if (strncmp( "TYPE1", &linebuf[j], 5)==0) {
+ else if (strncmp( pfab_key, &linebuf[j], 5)==0) {
/* setup target */
destP=&T1_PFAB_ptr;
idestP=&pfab_no;
@@ -370,6 +393,23 @@ int intT1_ScanConfigFile( void)
idestP=&afm_no;
curr_key=(char*)afm_key;
}
+ else if (strncmp( fdbxlfd_key, &linebuf[j], 16)==0) {
+ /* The handling here is somewhat specific. XLFD font database
+ specifications may coexist with standard font database
+ specification. However, if the standard font database is
+ the default value, an existing XLFD specification clears
+ this default value. Let this precede the standard fdb because
+ otherwise, this code would never be reached. */
+ if (fdb_no==0) { /* default paths are currently setup, get rid of them */
+ free(T1_FDB_ptr[0]);
+ T1_FDB_ptr[0]=NULL;
+ }
+
+ /* setup target */
+ destP=&T1_FDBXLFD_ptr;
+ idestP=&fdbxlfd_no;
+ curr_key=(char*)fdbxlfd_key;
+ }
else if (strncmp( fdb_key, &linebuf[j], 12)==0) {
/* setup target */
destP=&T1_FDB_ptr;
@@ -386,7 +426,10 @@ int intT1_ScanConfigFile( void)
if (ignoreline==0) {
/* Check for an explicitly assigned value */
if (*idestP==0) { /* default paths are currently setup, get rid of them */
- free((*destP)[0]);
+ if ((*destP)[0]!=NULL) {
+ free((*destP)[0]);
+ (*destP)[0]=NULL;
+ }
}
else { /* append to existing paths */
T1_PrintLog( "ScanConfigFile()",
@@ -558,7 +601,7 @@ char *intT1_Env_GetCompletePath( char *FileName,
/* cut a trailing directory separator */
j=strlen(pathbuf);
if (pathbuf[j-1]==DIRECTORY_SEP_CHAR)
- pathbuf[j--]='\0';
+ pathbuf[--j]='\0';
/* Add the directory separator: */
#ifdef VMS
{ char *p= strrchr(pathbuf, DIRECTORY_SEP_CHAR);
@@ -567,7 +610,24 @@ char *intT1_Env_GetCompletePath( char *FileName,
}
#endif
strcat( pathbuf, DIRECTORY_SEP);
- /* And finally the filename: */
+ /* And finally the filename.
+ The following is fix against a vulnerability given by passing in
+ large filenames, cf.:
+
+ http://www.securityfocus.com/bid/25079
+
+ or
+
+ http://packetstormsecurity.nl/0707-advisories/t1lib.txt
+
+ If current pathbuf + StrippedName + 1 byte for NULL is bigger than
+ pathbuf log a warning and try next pathbuf */
+ if ( strlen(pathbuf) + strlen(StrippedName) + 1 > sizeof(pathbuf) ) {
+ T1_PrintLog( "intT1_Env_GetCompletePath()", "Omitting suspicious long candidate path in order to prevent buffer overflow.",
+ T1LOG_WARNING);
+ i++;
+ continue;
+ }
strcat( pathbuf, StrippedName);
/* Check for existence of the path: */
@@ -1042,3 +1102,142 @@ int T1_AddFontDataBase( int mode, char *filename)
}
+
+/* T1_SetFontDataBaseXLFD(): Set a new name for the XLFD font database. It
+ replaces the default name (which is empty and any names specified
+ previously with this function.
+ Return value: 0 if OK, and -1 if filename not valid or an allocation
+ error occurred */
+int T1_SetFontDataBaseXLFD( char *filename)
+{
+ int pathlen;
+ int i;
+ int result=0;
+
+
+ /* check filename */
+ if (filename==NULL) {
+ T1_errno=T1ERR_INVALID_PARAMETER;
+ return -1;
+ }
+
+ /* this function must be called before any font is in the database, that is, usually,
+ before initialization! */
+ if ( pFontBase!=NULL && pFontBase->no_fonts>0) {
+ T1_errno=T1ERR_OP_NOT_PERMITTED;
+ return -1;
+ }
+
+
+ pathlen=strlen(filename)+1;
+ /* Throw away a possibly existing font database-statement */
+ if (fdbxlfd_no==-1) {
+ T1_FDBXLFD_ptr=NULL; /* realloc() will do a malloc() */
+ }
+ else {
+ /* throw away current paths */
+ i=0;
+ while (T1_FDBXLFD_ptr[i]!=NULL) {
+ free (T1_FDBXLFD_ptr[i++]);
+ }
+ }
+
+ if ((T1_FDBXLFD_ptr=(char**)realloc( T1_FDBXLFD_ptr, 2*sizeof(char*)))==NULL) {
+ T1_errno=T1ERR_ALLOC_MEM;
+ return -1;
+ }
+
+ if ((T1_FDBXLFD_ptr[0]=(char*)malloc(pathlen*sizeof(char)))==NULL) {
+ T1_errno=T1ERR_ALLOC_MEM;
+ return -1;
+ }
+ strcpy( T1_FDBXLFD_ptr[0], filename);
+ T1_FDBXLFD_ptr[1]=NULL;
+ fdb_no=1;
+
+ /* Load XLFD database immediately if t1lib already is initailzed */
+ if (T1_CheckForInit()==0) {
+ if ((result=intT1_scanFontDBaseXLFD(T1_FDBXLFD_ptr[0]))==-1) {
+ T1_PrintLog( "T1_AddFontDataBaseXLFD()", "Fatal error scanning XLFD Font Database File %s (T1_errno=%d)",
+ T1LOG_WARNING, T1_FDBXLFD_ptr[0], T1_errno);
+ }
+ if (result>-1)
+ pFontBase->no_fonts+=result;
+ result=pFontBase->no_fonts;
+ }
+ return result;
+
+}
+
+
+/* T1_AddFontDataBaseXLFD(): Add a new XLFD font database file to the list. If
+ the lib is already initialzed, then the new database is immediately loaded.
+ Otherwise it is simply appended to the list and loaded at the time of
+ initialization.
+ Returns: -1 an error occured
+ 0 successfully inserted but not loaded because lib not initilized
+ n>0 the highest defined FontID
+*/
+int T1_AddFontDataBaseXLFD( int mode, char *filename)
+{
+ int i;
+ int pathlen;
+ int result=0;
+ char* newpath;
+
+
+ if (filename==NULL) {
+ T1_errno=T1ERR_INVALID_PARAMETER;
+ return(-1);
+ }
+
+ pathlen=strlen(filename);
+
+ /* Allocate memory for string */
+ if ((newpath=(char*)malloc( (pathlen+1)*sizeof(char)))==NULL) {
+ T1_errno=T1ERR_ALLOC_MEM;
+ return(-1);
+ }
+ strcpy( newpath, filename);
+ /* Check for and handle the existing path configuration */
+ if (fdb_no==0) { /* defauls setup, free the path */
+ free( T1_FDB_ptr[0]);
+ }
+ if (fdbxlfd_no==-1) { /* not initialized! */
+ fdbxlfd_no=0;
+ T1_FDBXLFD_ptr=NULL; /* realloc() will do the malloc()! */
+ }
+
+ if ((T1_FDBXLFD_ptr=(char**)realloc( T1_FDBXLFD_ptr, (++fdbxlfd_no+1)*sizeof(char*)))==NULL) {
+ T1_errno=T1ERR_ALLOC_MEM;
+ return(-1);
+ }
+ /* Insert the new database. If t1lib is already initialzed, the database can only
+ be appended. Otherwise. prepending is also possible.*/
+ if ((mode & T1_PREPEND_PATH) && (T1_CheckForInit()!=0) ) { /* prepend */
+ i=fdbxlfd_no-2;
+ while (i>=0) {
+ T1_FDBXLFD_ptr[i+1]=T1_FDBXLFD_ptr[i];
+ i--;
+ }
+ T1_FDBXLFD_ptr[0]=newpath;
+ result=0;
+ }
+ else { /* append */
+ T1_FDBXLFD_ptr[fdbxlfd_no-1]=newpath;
+ if (T1_CheckForInit()==0) {
+ if ((result=intT1_scanFontDBaseXLFD(T1_FDBXLFD_ptr[fdbxlfd_no-1]))==-1) {
+ T1_PrintLog( "T1_AddFontDataBase()", "Fatal error scanning Font Database File %s (T1_errno=%d)",
+ T1LOG_WARNING, T1_FDBXLFD_ptr[fdbxlfd_no-1], T1_errno);
+ }
+ if (result>-1)
+ pFontBase->no_fonts+=result;
+ result=pFontBase->no_fonts;
+ }
+ }
+ T1_FDBXLFD_ptr[fdbxlfd_no]=NULL;
+ return result;
+
+}
+
+
diff --git a/Build/source/libs/t1lib/t1env.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1env.h
index d332500be77..11e94d870f2 100644
--- a/Build/source/libs/t1lib/t1env.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1env.h
@@ -1,10 +1,10 @@
/*--------------------------------------------------------------------------
----- File: t1env.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2001-09-26
+ ----- Date: 2005-05-16
----- Description: This file is part of the t1-library. It contains
declarations and definitions for t1env.c
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -37,6 +37,8 @@ int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname);
char *T1_GetFileSearchPath( int type);
int T1_SetFontDataBase( char *filename);
int T1_AddFontDataBase( int mode, char *filename);
+int T1_SetFontDataBaseXLFD( char *filename);
+int T1_AddFontDataBaseXLFD( int mode, char *filename);
#else
@@ -49,6 +51,8 @@ extern int T1_AddToFileSearchPath( int pathtype, int mode, char *pathname);
extern char *T1_GetFileSearchPath( int type);
extern int T1_SetFontDataBase( char *filename);
extern int T1_AddFontDataBase( int mode, char *filename);
+extern int T1_SetFontDataBaseXLFD( char *filename);
+extern int T1_AddFontDataBaseXLFD( int mode, char *filename);
#endif
diff --git a/Build/source/libs/t1lib/t1extern.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1extern.h
index e0f4b47af30..27a65fba030 100644
--- a/Build/source/libs/t1lib/t1extern.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1extern.h
@@ -1,10 +1,10 @@
/*--------------------------------------------------------------------------
----- File: t1extern.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2001-10-03
+ ----- Date: 2005-05-16
----- Description: This file is part of the t1-library. It contains
external declarations used by the t1-library.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -89,6 +89,7 @@ extern char **T1_PFAB_ptr;
extern char **T1_AFM_ptr;
extern char **T1_ENC_ptr;
extern char **T1_FDB_ptr;
+extern char **T1_FDBXLFD_ptr;
/* We use a uchar buffer for error and warning messages: */
extern char err_warn_msg_buf[1024];
diff --git a/Build/source/libs/t1lib/t1finfo.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1finfo.c
index 211abf360c4..c0464f205ef 100644
--- a/Build/source/libs/t1lib/t1finfo.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1finfo.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1finfo.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2003-01-04
+ ----- Date: 2005-05-01
----- Description: This file is part of the t1-library. It contains
functions for accessing afm-data and some other
fontinformation data.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -51,6 +51,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
diff --git a/Build/source/libs/t1lib/t1finfo.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1finfo.h
index 7334f0130c8..7334f0130c8 100644
--- a/Build/source/libs/t1lib/t1finfo.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1finfo.h
diff --git a/Build/source/libs/t1lib/t1global.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1global.h
index c62ed2d5c0a..52e872e2512 100644
--- a/Build/source/libs/t1lib/t1global.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1global.h
@@ -1,7 +1,7 @@
/*--------------------------------------------------------------------------
----- File: t1global.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2001-04-01
+ ----- Date: 2005-05-16
----- Description: This file is part of the t1-library. It contains
global declarations used by the t1-library.
----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001.
@@ -99,6 +99,7 @@ char** T1_PFAB_ptr=NULL;
char** T1_AFM_ptr=NULL;
char** T1_ENC_ptr=NULL;
char** T1_FDB_ptr=NULL;
+char** T1_FDBXLFD_ptr=NULL;
/* We use a uchar buffer for error and warning messages: */
char err_warn_msg_buf[1024];
diff --git a/Build/source/libs/t1lib/t1lib.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1lib.h.in
index 1c578c6cb1d..c4d1add8add 100644
--- a/Build/source/libs/t1lib/t1lib.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1lib.h.in
@@ -1,7 +1,7 @@
/*--------------------------------------------------------------------------
----- File: t1lib.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2004-02-04
+ ----- Date: 2004-12-19
----- Description: This file is part of the t1-library. It must be
included by the user of the t1lib. It contains
function declarations and some basic data types, the
@@ -39,11 +39,14 @@ extern "C" {
#endif
/* Version information filled in by configure */
-#define T1LIB_VERSION 5
-#define T1LIB_REVISION 0
-#define T1LIB_PATCHLEVEL 1
-#define T1LIB_VERSIONSTRING "5.0.1"
+#define T1LIB_VERSION @T1LIB_VERSION@
+#define T1LIB_REVISION @T1LIB_REVISION@
+#define T1LIB_PATCHLEVEL @T1LIB_PATCHLEVEL@
+#define T1LIB_VERSIONSTRING @T1LIB_VERSIONSTRING@
+/* Data Type information filled in by configure. */
+typedef @T1_INT16@ T1_int16;
+typedef @T1_INT32@ T1_int32;
/* the data structure which contains the character bitmap description */
typedef struct
@@ -189,14 +192,14 @@ extern int T1_errno;
/* definitions for outline handling */
#define FRACTBITS 16 /* number of fractional bits in 'fractpel' */
/* From/to conversion of pels/fractpels */
-#define T1_TOPATHPOINT(p) (((long)p)<<FRACTBITS)
+#define T1_TOPATHPOINT(p) (((T1_int32)p)<<FRACTBITS)
#define PPHALF (1<<(FRACTBITS-1))
#define T1_NEARESTPOINT(fp) (((fp)+PPHALF)>>FRACTBITS)
/* A fractional point */
typedef struct {
- long x;
- long y;
+ T1_int32 x;
+ T1_int32 y;
} T1_PATHPOINT;
diff --git a/Build/source/libs/t1lib/t1libx.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1libx.h
index e29e1543e46..e29e1543e46 100644
--- a/Build/source/libs/t1lib/t1libx.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1libx.h
diff --git a/Build/source/libs/t1lib/t1load.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1load.c
index cce22e72c7f..ba9156e1672 100644
--- a/Build/source/libs/t1lib/t1load.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1load.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1load.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2002-11-27
+ ----- Date: 2007-12-23
----- Description: This file is part of the t1-library. It contains
functions for loading fonts and for managing size
dependent data.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2007.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -28,12 +28,16 @@
#define T1LOAD_C
-/*
- SU: Enabling this causes a segfault on OSF1/V5.1 alpha. Since it
- appears to be an optimization only, I've disabled it until Rainer
- has a fix.
- */
-/* #define ANSI_REALLOC_VM */
+#define ANSI_REALLOC_VM
+
+/* Note: On some systems, like e.g. my Linux box, realloc() frequently returns
+ the identical pointer, if the memory chunk is *decreased* in size. As
+ a consequence, pointer shifting (as implemented below) would never
+ actually appear. The following definition enforces pointer shifting,
+ and hence allows to check pointer shifting on every system. Do not
+ activate this, it is meant for testing only!
+*/
+/* #define ANSI_REALLOC_ENFORCE_POINTERSHIFTING */
#include <stdio.h>
#include <sys/types.h>
@@ -58,6 +62,7 @@
#include "../type1/util.h"
#include "../type1/fontfcn.h"
#include "../type1/blues.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
@@ -82,7 +87,7 @@ extern char not_def[]; /* for checking the ".notdef"-string */
int T1_LoadFont( int FontID)
{
- int i, j, k, l, m;
+ int i, j, k, l, m, n;
char *FileName, *FileNamePath;
int mode; /* This is used by the type1-library for error reporting */
char *charname;
@@ -155,6 +160,40 @@ int T1_LoadFont( int FontID)
free(FileNamePath);
+ /* Set some default for FontBBox and Encoding if the font does not provide
+ correct data. Strictly taken, these fonts do not adhere to the Type1
+ specification. However, it is easy to work around and find reasonable
+ defaults. This solution has been proposed by the Debian community (see
+ http://bugs.debian.org/313236). */
+ /* 1. FontBBox. We set default values of 0 which is recommended by Adobe
+ in cases where the font does not make use of the SEAC primitive. Later on,
+ if AFM fallback info is computed, these settings might be overwritten with
+ meaningful values. */
+ if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP == NULL) {
+ if ((pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP =
+ (psobj *)vm_alloc(4 * sizeof(psobj))) == NULL) {
+ T1_PrintLog( "T1_LoadFont()", "Error allocating memory for fontbbox objects (FontID=%d)",
+ T1LOG_ERROR, FontID);
+ T1_errno=T1ERR_ALLOC_MEM;
+ return(-1);
+ }
+ for (n = 0; n < 4; n++) {
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[n].type = OBJ_INTEGER;
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[n].len = 0;
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[FONTBBOX].value.data.arrayP[n].data.integer = 0;
+ }
+ T1_PrintLog( "T1_LoadFont()", "Missing FontBBox, adding a trivial one in order to avoid crashes (FontID=%d)",
+ T1LOG_WARNING, FontID);
+ }
+ /* 2. Encoding. In this case, we simply fallback to Standard Encoding. */
+ if (pFontBase->pFontArray[FontID].pFontEnc == NULL &&
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.arrayP == NULL) {
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[ENCODING].value.data.valueP = (char *) StdEncArrayP;
+ T1_PrintLog( "T1_LoadFont()", "Missing, invalid or undefined Encoding, setting up Standard Encoding in order to avoid crashes (FontID=%d)",
+ T1LOG_WARNING, FontID);
+ }
+
+
/* Store the base address of virtual memory and realloc in order not
to waste too much memory: */
pFontBase->pFontArray[FontID].vm_base=vm_base;
@@ -163,7 +202,12 @@ int T1_LoadFont( int FontID)
/* Get size of VM, ... */
tmp_size=((unsigned long)vm_used - (unsigned long)vm_base);
/* ... realloc to that size ... */
- tmp_ptr=(char *)realloc(vm_base, tmp_size);
+#ifdef ANSI_REALLOC_ENFORCE_POINTERSHIFTING
+ tmp_ptr=(char *)malloc( tmp_size);
+ memcpy( tmp_ptr, vm_base, tmp_size);
+#else
+ tmp_ptr=(char *)realloc(vm_base, tmp_size);
+#endif
/* ... and shift all pointers refering to that area */
if (tmp_ptr > vm_base){
shift= (unsigned long)tmp_ptr - (unsigned long)vm_base;
@@ -216,24 +260,18 @@ int T1_LoadFont( int FontID)
}
/* The encoding needs special treatment: */
if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_ENCODING){
- /* If a builtin encoding is used, it is sufficient to shift the pointer
- to the Encoding since the character-namestrings of builtin encodings
- are static and thus located on the heap.
- For font-specific encoding, character-namestrings reside in VM and
- thus each entry has to be shifted.
- Caution: We still have to shift the builtin encoding-pointer, since
- they also point to are located in VM: */
- ldummy=(long)StdEncArrayP;
- ldummy +=shift;
- StdEncArrayP=(psobj *)ldummy;
- ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP;
- ldummy +=shift;
- pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy;
+ /* If builtin StandardEncoding is used, we do nothing here. Standard Encoding
+ is now located once for all fonts on the heap. For font-specific encodings
+ we have to move all pointers appropriately, because this is entirely located
+ in VM */
if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP
- == StdEncArrayP){ /* Font uses builtin standard encoding */
+ == StdEncArrayP){ /* Font uses builtin StandardEncoding */
;
}
else{ /* Font-specific encoding */
+ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP;
+ ldummy +=shift;
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy;
for (k=0; k<256; k++){
ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP[k].data.arrayP;
/* The ".notdef" is also static and may not be shifted (Thanks, Derek ;) */
@@ -351,24 +389,18 @@ int T1_LoadFont( int FontID)
}
/* The encoding needs special treatment: */
if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.type==OBJ_ENCODING){
- /* If a builtin encoding is used, it is sufficient to shift the pointer
- to the Encoding since the character-namestrings of builtin encodings
- are static and thus located on the heap.
- For font-specific encoding, character-namestrings reside in VM and
- thus each entry has to be shifted.
- Caution: We still have to shift the builtin encoding-pointer, since
- they also point to are located in VM: */
- ldummy=(long)StdEncArrayP;
- ldummy -=shift;
- StdEncArrayP=(psobj *)ldummy;
- ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP;
- ldummy -=shift;
- pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy;
+ /* If builtin StandardEncoding is used, we do nothing here. Standard Encoding
+ is now located once for all fonts on the heap. For font-specific encodings
+ we have to move all pointers appropriately, because this is entirely located
+ in VM */
if (pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP
- == StdEncArrayP){ /* Font uses builtin encoding */
+ == StdEncArrayP){ /* Font uses builtin StandardEncoding */
;
}
else{ /* Font-specific encoding */
+ ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP;
+ ldummy -=shift;
+ pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.valueP=(char *)ldummy;
for (k=0; k<256; k++){
ldummy=(long)pFontBase->pFontArray[FontID].pType1Data->fontInfoP[j].value.data.arrayP[k].data.arrayP;
/* The ".notdef" is also static and may not be shifted (Thanks, Derek ;) */
@@ -441,6 +473,11 @@ int T1_LoadFont( int FontID)
(unsigned long)vm_base);
T1_PrintLog( "T1_LoadFont()", err_warn_msg_buf, T1LOG_DEBUG);
}
+#ifdef ANSI_REALLOC_ENFORCE_POINTERSHIFTING
+ /* If pointer shifting had been enforced by allocating from
+ scratch using malloc() free the previous vm. */
+ free( vm_base);
+#endif
#endif
/* Generate a message how much VM the current font consumes */
diff --git a/Build/source/libs/t1lib/t1load.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1load.h
index 534a18b5b1d..534a18b5b1d 100644
--- a/Build/source/libs/t1lib/t1load.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1load.h
diff --git a/Build/source/libs/t1lib/t1misc.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1misc.h
index c45c55962e4..e92c3b89dea 100644
--- a/Build/source/libs/t1lib/t1misc.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1misc.h
@@ -1,7 +1,7 @@
/*--------------------------------------------------------------------------
----- File: t1misc.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2004-03-03
+ ----- Date: 2004-11-27
----- Description: This file is part of the t1-library. It contains
some miscellaneous definitions.
----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004.
@@ -55,7 +55,13 @@
/* The maximum length of a PostScript name of a font: */
#define MAXPSNAMELEN 256
-#define MAXPATHLEN 4096
+#ifndef MAXPATHLEN
+# ifdef PATH_MAX
+# define MAXPATHLEN PATH_MAX
+# else
+# define MAXPATHLEN 4096
+# endif
+#endif
/* The default resolution used by the library */
#define DEFAULT_RES 72.0
diff --git a/Build/source/libs/t1lib/t1outline.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1outline.c
index 23942780dd3..f71018a451f 100644
--- a/Build/source/libs/t1lib/t1outline.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1outline.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1outline.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2002-12-02
+ ----- Date: 2005-05-01
----- Description: This file is part of the t1-library. It contains
functions for getting glyph outline descriptions of
strings and characters.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -52,8 +52,8 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
-#include "../type1/regions.h"
#include "../type1/paths.h"
+#include "../type1/regions.h"
#include "t1types.h"
diff --git a/Build/source/libs/t1lib/t1outline.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1outline.h
index c7d2bd3023f..c7d2bd3023f 100644
--- a/Build/source/libs/t1lib/t1outline.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1outline.h
diff --git a/Build/source/libs/t1lib/t1set.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1set.c
index 30e9a4a1be4..2e7da1f6d41 100644
--- a/Build/source/libs/t1lib/t1set.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1set.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1set.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2003-01-02
+ ----- Date: 2005-05-01
----- Description: This file is part of the t1-library. It contains
functions for setting characters and strings of
characters.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -52,6 +52,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
@@ -1121,6 +1122,9 @@ GLYPH *T1_SetString( int FontID, char *string, volatile int len,
endmask = (char) ~(0xFF << ((start+string_glyph.metrics.advanceX) % 8));
Target_c= (unsigned char *)(string_glyph.bits +(i*paddedW/8)
+ (start / 8));
+ if (!Target_c) {
+ continue;
+ }
j=middle;
if (j == 0)
*Target_c++ |= startmask & endmask;
@@ -1146,6 +1150,9 @@ GLYPH *T1_SetString( int FontID, char *string, volatile int len,
endmask = (char) ~(0xFF << ((start+string_glyph.metrics.advanceX) % 8));
Target_c= (unsigned char *)(string_glyph.bits +(i*paddedW/8)
+ (start / 8));
+ if (!Target_c) {
+ continue;
+ }
j=middle;
if (j == 0)
*Target_c++ |= startmask & endmask;
@@ -1171,6 +1178,9 @@ GLYPH *T1_SetString( int FontID, char *string, volatile int len,
endmask = (char) ~(0xFF << ((start+string_glyph.metrics.advanceX) % 8));
Target_c= (unsigned char *)(string_glyph.bits +(i*paddedW/8)
+ (start / 8));
+ if (!Target_c) {
+ continue;
+ }
j=middle;
if (j == 0)
*Target_c++ |= startmask & endmask;
diff --git a/Build/source/libs/t1lib/t1set.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1set.h
index e2fd80a0218..e2fd80a0218 100644
--- a/Build/source/libs/t1lib/t1set.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1set.h
diff --git a/Build/source/libs/t1lib/t1subset.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1subset.c
index 59d30207d1f..da427b2b826 100644
--- a/Build/source/libs/t1lib/t1subset.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1subset.c
@@ -1,10 +1,10 @@
/*--------------------------------------------------------------------------
----- File: t1subset.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2002-12-08
+ ----- Date: 2005-05-01
----- Description: This file is part of the t1-library. It contains
functions for subsetting type 1 fonts.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -50,6 +50,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
@@ -82,6 +83,7 @@
#define SEGMENT_EOF 3
+extern psobj *StdEncArrayP; /* For accessing StandardEncoding */
static char *charstringP;
static int charstringL;
@@ -195,8 +197,6 @@ static int make_pfb_segment_header( char *ptr, int type, unsigned long size)
-/* A function for reading a Type 1 font file. eexec-decryption
- is done on the fly. */
char *T1_SubsetFont( int FontID,
char *mask,
unsigned int flags,
@@ -223,6 +223,7 @@ char *T1_SubsetFont( int FontID,
char *csdone; /* stores which charstrings already have been written */
int currstring_no=0;
char *charnameP;
+ char charnamebuf[257];
unsigned char cipher;
char rdstring[3];
char ndstring[3];
@@ -250,6 +251,11 @@ char *T1_SubsetFont( int FontID,
int nocharstrings=0;
char encmask[256]; /* Mask after resolving composite characters */
T1_COMP_CHAR_INFO* cci = NULL;
+
+ /* variables for checking SEAC's */
+ int qs_num = 0;
+ unsigned char qs_piece1 = 0;
+ unsigned char qs_piece2 = 0;
/* Otherwise we would get invalid accesses later */
@@ -266,24 +272,76 @@ char *T1_SubsetFont( int FontID,
return(NULL);
}
-
- /* First, we check how many characters have to find their way into the
- subsetted file. We take possibly existing composite character
- definitions by the user into account. */
+ /* Reset resulting encoding mask */
+ for ( j=0; j<256; j++) {
+ encmask[j] = 0;
+ }
+
+ /* Build encmask, a mask, where all required elementary character
+ definitions required are tagged. Font internal SEAC definitions
+ are evaluated at first priority, and as a fallback, also user
+ specified composite character data is taken into account.
+ */
for ( j=0; j<256; j++) {
if ( mask[j] != 0 ) {
- /* check whether addressed character is an internal character of
- the font */
- if ( cci != NULL )
- T1_FreeCompCharData( cci);
-
- cci = T1_GetCompCharData( FontID, j);
-
- if ( cci != NULL ) {
- nocharstrings += cci->numPieces;
+ /* In any case, tag slot j itself */
+ encmask[j] |= 0x01;
+ /* Now check against correctly defined SEAC (Standard
+ Encoding Accented Character). */
+ if ( (qs_num = T1int_QuerySEAC( FontID,
+ j,
+ &qs_piece1,
+ &qs_piece2
+ )) > 1 ) {
+ /* We have a SEAC --> reserve 2 additional slots,
+ the basechar and the accent. The index numbers in this case
+ always refer to to StandardEncoding, which is not necessarily
+ the font's current encoding. We indicate this by using bit 2
+ 0x2 inverse sign. */
+ encmask[qs_piece1] |= 0x2;
+ encmask[qs_piece2] |= 0x2;
}
else {
- ++nocharstrings;
+ /* OK, it is no a SEAC, but we still check against AFM composite character
+ data definition. This is non-standard, but we give the user the chance
+ to access all single character definitions in order construct arbitrary
+ composite characters. */
+ if ( cci != NULL ) {
+ T1_FreeCompCharData( cci);
+ }
+ cci = T1_GetCompCharData( FontID, j);
+
+ if ( (cci != NULL) && (cci->numPieces > 1) ) {
+ /* Tag all components that are required to construct
+ the composite character j. */
+ for ( p=0; p<cci->numPieces; p++) {
+ encmask[cci->pieces[p].piece] |= 0x1;
+ }
+ }
+ }
+ } /* if ( mask[j] != 0 ) */
+ } /* for ... mask */
+
+
+ /* Inspect encmask, get number of atomic charstrings and check for
+ ".notdef" being encoded. */
+ for ( j=0; j<256; j++) {
+ if ( (encmask[j] & 0x01) != 0 ) {
+ ++nocharstrings;
+ /* Obtain name from current encoding */
+ charnameP=T1_GetCharName( FontID, j);
+ }
+ if ( (encmask[j] & 0x02) != 0 ) {
+ ++nocharstrings;
+ /* Obtain name from StandardEncoding */
+ strncpy( charnamebuf, (StdEncArrayP[j]).data.nameP, (StdEncArrayP[j]).len);
+ charnamebuf[StdEncArrayP[j].len] = '\0';
+ charnameP=charnamebuf;
+ }
+ if ( encmask[j] != 0 ) {
+
+ if ( strcmp(charnameP, ".notdef") == 0 ) {
+ notdefencoded=1;
}
}
}
@@ -342,10 +400,25 @@ char *T1_SubsetFont( int FontID,
T1LOG_DEBUG);
}
- /* Encoding handling */
+ /* Encoding handling follows.
+ Note: If the font file defines StandardEncoding (as we will check shortly),
+ but the font has been reencoded by t1lib, we enforce reencoding
+ in any case so that all characters are accessible eventually in
+ the subset.
+ */
+ if ( pFontBase->pFontArray[FontID].pFontEnc != NULL ) {
+ T1_PrintLog( "T1_SubsetFont()", "Font is reencoded by t1lib, enforcing Reencoding of subset",
+ T1LOG_DEBUG);
+ /* Set flag to enforce reenocde in case of StandardEncoding */
+ flags |= T1_SUBSET_FORCE_REENCODE;
+ /* Reset flag to enforce reenocde in case of StandardEncoding */
+ flags &= ~T1_SUBSET_SKIP_REENCODE;
+ }
+
if (strstr( &(filebuf[i-retval]), "/Encoding")!=NULL) {
if (strstr( &(filebuf[i-retval]), "StandardEncoding")!=NULL) {
stdenc=1;
+
if ((flags & T1_SUBSET_FORCE_REENCODE)!=0) {
/* we ignore the current line ... */
i-=retval;
@@ -362,8 +435,11 @@ char *T1_SubsetFont( int FontID,
}
}
else {
- /* The encoding is explicitly defined in the font file. We skip the
- whole definition unless reencoding should be skipped. */
+ /* The encoding is explicitly defined in the font file. We skip copying
+ the whole definition because we will reencode the subset later, unless
+ reencoding should be skipped by means of the flag settings. If the font
+ has been reencoded by t1lib, we enforce reencoding in order to ensure
+ that all characters in the subset will be accessible (see above). */
stdenc=0;
retval=T1Gets(&(filebuf[i]), 1025, ifp);
i+=retval;
@@ -395,38 +471,15 @@ char *T1_SubsetFont( int FontID,
if ( reencode!=0) {
k=0;
- /* Reset resulting encoding mask */
- for ( j=0; j<256; j++) {
- encmask[j] = 0;
- }
-
- /* Resolve composite characters and their components */
+ /* Write actually required encoding slots. We only encode the
+ characters required from the current fonts encoding. Characters
+ from StandardEncoding required by composite chars are not encoded. */
for ( j=0; j<256; j++) {
- if (mask[j]!=0) {
- if ( cci != NULL)
- T1_FreeCompCharData( cci);
- cci = T1_GetCompCharData( FontID, j);
- if ( (cci != NULL) && (cci->numPieces > 1) ) {
- /* Tag all components that are required to construct
- the composite character j. */
- for ( p=0; p<cci->numPieces; p++) {
- encmask[cci->pieces[p].piece] = 1;
- }
- }
- /* Tag character j in encoding definition */
- encmask[j] = 1;
- }
- }
-
- /* Write actually required encoding slots */
- for ( j=0; j<256; j++) {
- if (encmask[j]!=0) {
+ if ( (encmask[j] & 0x01) !=0 ) {
charnameP=T1_GetCharName( FontID, j);
i+=sprintf( &(filebuf[i]), "dup %d /%s put\n", j,
charnameP);
k++;
- if (strcmp(charnameP, ".notdef")==0)
- notdefencoded=1;
}
}
@@ -441,7 +494,7 @@ char *T1_SubsetFont( int FontID,
} /* end of if (...encoding handling...) */
- /* Extract the names are used for the charstring definitions.
+ /* Extract the names that are used for the charstring definitions.
We will later need them! */
if (strstr( &(filebuf[i-retval]), "/RD")!=NULL) {
sprintf( rdstring, "RD");
@@ -463,12 +516,14 @@ char *T1_SubsetFont( int FontID,
i-dindex);
T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf,
T1LOG_DEBUG);
+
/* if .notdef is not in the encoding mask, we have to reserve
room for the additional charstring .notdef. Note that still
nocharstrings is an upper bound estimation, which is reached
in cases where no characters are encoded more than one time. */
- if (notdefencoded==0)
- nocharstrings++;
+ if ( notdefencoded == 0 ) {
+ nocharstrings++;
+ }
i+=sprintf( &(filebuf[i]), "2 index /CharStrings %d dict dup begin\n",
nocharstrings);
@@ -508,58 +563,25 @@ char *T1_SubsetFont( int FontID,
/* Now, step through the specifier matrix and write only the
necessary charstrings. */
for ( j=0; j<256; j++) {
- if (mask[j]!=0) {
- charnameP=T1_GetCharName( FontID, j);
+ if (encmask[j]!=0) {
+ if ( (encmask[j] & 0x01) != 0 ) {
+ /* Obtain name from current encoding */
+ charnameP=T1_GetCharName( FontID, j);
+ }
+ else {
+ /* Obtain name from StandardEncoding */
+ strncpy( charnamebuf, (StdEncArrayP[j]).data.nameP, (StdEncArrayP[j]).len);
+ charnamebuf[StdEncArrayP[j].len] = '\0';
+ charnameP=charnamebuf;
+ }
if ((currstring_no=locateCharString( FontID, charnameP))==0) {
- /* This might be a composite character, check and handle this case ... */
- if ( cci != NULL )
- T1_FreeCompCharData( cci);
-
- cci = T1_GetCompCharData( FontID, j);
- if ( (cci != NULL) && (cci->numPieces > 1) ) {
- /* composite character, loop through pieces and look for the components */
- for ( p=0; p<cci->numPieces; p++) {
-
- charnameP=T1_GetCharName( FontID, cci->pieces[p].piece);
- if ((currstring_no=locateCharString( FontID, charnameP))==0) {
- /* Character component not found. Try next ... */
- T1_PrintLog( "T1_SubsetFont()", "Could not locate component CS ""%s"" for index %d",
- T1LOG_WARNING, charnameP, cci->pieces[p].piece);
- }
- else {
- /* Add component to subset and process charstring only if it has not
- already been done */
- if (csdone[currstring_no-1]==0) {
- k=i;
- i+=sprintf( &(filebuf[i]), "/%s %d %s ", charnameP, charstringL, rdstring);
- memcpy(&(filebuf[i]), charstringP, charstringL);
- i+=charstringL;
- i+=sprintf( &(filebuf[i]), " %s\n", ndstring);
- csdone[currstring_no-1]=1;
- T1_PrintLog( "T1_SubsetFont()",
- "Processing of component CS ""%s"" for index %d successful (len=%d bytes, line=%d bytes)",
- T1LOG_DEBUG, charnameP, cci->pieces[p].piece, charstringL, i-k);
- }
- else {
- sprintf( err_warn_msg_buf, "Skipped multiple processing of component CS ""%s"" (index %d)",
- charnameP, cci->pieces[p].piece);
- T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf,
- T1LOG_DEBUG);
- }
- }
- }
- continue;
- }
- else {
- /* Character not found and no composite. This is mysterious, but causes no harm
- because .notdef will be substituted */
- sprintf( err_warn_msg_buf, "Could not locate CS ""%s"" for index %d",
- charnameP, j);
- T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf,
- T1LOG_WARNING);
- continue;
- }
-
+ /* Atomic character not found. This is mysterious, but causes no harm
+ because .notdef will be substituted */
+ sprintf( err_warn_msg_buf, "Could not locate CS ""%s"" for index %d",
+ charnameP, j);
+ T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf,
+ T1LOG_WARNING);
+ continue;
}
/* Process charstring only if it has not already been done */
if (csdone[currstring_no-1]==0) {
@@ -570,8 +592,8 @@ char *T1_SubsetFont( int FontID,
i+=sprintf( &(filebuf[i]), " %s\n", ndstring);
csdone[currstring_no-1]=1;
sprintf( err_warn_msg_buf,
- "Processing of CS ""%s"" for index %d successful (len=%d bytes, line=%d bytes)",
- charnameP, j, charstringL, i-k);
+ "Processing of CS ""%s"" for index %d (EncMaskFlag=0x%X) successful (len=%d bytes, line=%d bytes)",
+ charnameP, j, encmask[j], charstringL, i-k);
T1_PrintLog( "T1_SubsetFont()", err_warn_msg_buf,
T1LOG_DEBUG);
}
diff --git a/Build/source/libs/t1lib/t1subset.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1subset.h
index 9ab7e716c0a..8564bc83d81 100644
--- a/Build/source/libs/t1lib/t1subset.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1subset.h
@@ -1,10 +1,10 @@
/*--------------------------------------------------------------------------
----- File: t1subset.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2001-04-01
+ ----- Date: 2004-12-02
----- Description: This file is part of the t1-library. It contains
declarations and definitions for t1subset.c.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -49,6 +49,12 @@ extern int T1GetTrailer(char *string, int size, FILE *f);
extern int T1Close( FILE *f);
extern void T1io_reset( void);
+extern int T1int_QuerySEAC( int FontID,
+ unsigned char index,
+ unsigned char* piece1,
+ unsigned char* piece2
+ );
+
char *T1_SubsetFont( int FontID,
char *mask,
unsigned int flags,
diff --git a/Build/source/libs/t1lib/t1trans.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1trans.c
index 998c4bd16c5..764c01f42bf 100644
--- a/Build/source/libs/t1lib/t1trans.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1trans.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1trans.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2003-01-04
+ ----- Date: 2005-05-01
----- Description: This file is part of the t1-library. It contains
functions for transforming fonts and setting
line-parameters.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -51,6 +51,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
diff --git a/Build/source/libs/t1lib/t1trans.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1trans.h
index 1d8685b98a4..1d8685b98a4 100644
--- a/Build/source/libs/t1lib/t1trans.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1trans.h
diff --git a/Build/source/libs/t1lib/t1types.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1types.h
index 156e702b58a..20a4641343c 100644
--- a/Build/source/libs/t1lib/t1types.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1types.h
@@ -1,10 +1,10 @@
/*--------------------------------------------------------------------------
----- File: t1types.h
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2001-06-04
+ ----- Date: 2004-12-09
----- Description: This file is part of the t1-library. It contains
type definitions used by the t1-library.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2001.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2004.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -28,6 +28,7 @@
#define T1TYPES_H
+#include "sysconf.h"
typedef struct
{
@@ -164,14 +165,14 @@ typedef struct
#define FRACTBITS 16 /* number of fractional bits in 'fractpel' */
/* From/to conversion of pels/fractpels */
-#define T1_TOPATHPOINT(p) (((long)p)<<FRACTBITS)
+#define T1_TOPATHPOINT(p) (((T1_AA_TYPE32)p)<<FRACTBITS)
#define PPHALF (1<<(FRACTBITS-1))
#define T1_NEARESTPOINT(fp) (((fp)+PPHALF)>>FRACTBITS)
/* A fractional point */
typedef struct {
- long x;
- long y;
+ T1_AA_TYPE32 x;
+ T1_AA_TYPE32 y;
} T1_PATHPOINT;
diff --git a/Build/source/libs/t1lib/t1x11.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1x11.c
index cda82ef986a..d5a7ef525f7 100644
--- a/Build/source/libs/t1lib/t1x11.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1x11.c
@@ -1,11 +1,11 @@
/*--------------------------------------------------------------------------
----- File: t1x11.c
----- Author: Rainer Menzner (Rainer.Menzner@web.de)
- ----- Date: 2003-01-02
+ ----- Date: 2005-05-01
----- Description: This file is part of the t1-library. It contains
functions for generating glyphs with data in
X11-Pixmap format.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2005.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
conditions can be found in the files LICENSE and
@@ -47,6 +47,7 @@
#include "../type1/spaces.h"
#include "../type1/util.h"
#include "../type1/fontfcn.h"
+#include "../type1/paths.h"
#include "../type1/regions.h"
#include "t1types.h"
diff --git a/Build/source/libs/t1lib/t1x11.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1x11.h
index e6413085c1e..e6413085c1e 100644
--- a/Build/source/libs/t1lib/t1x11.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/t1lib/t1x11.h
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/.dependencies b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/.dependencies
new file mode 100644
index 00000000000..117efab1c59
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/.dependencies
@@ -0,0 +1,28 @@
+arith.lo: arith.c types.h objects.h spaces.h arith.h
+bstring.lo: bstring.c
+curves.lo: curves.c types.h objects.h spaces.h paths.h regions.h \
+ curves.h lines.h arith.h
+fontfcn.lo: fontfcn.c t1imager.h types.h fontmisc.h util.h fontfcn.h \
+ paths_rmz.h spaces_rmz.h ../t1lib/parseAFM.h ../t1lib/t1types.h \
+ ../t1lib/sysconf.h ../t1lib/t1extern.h ../t1lib/t1misc.h \
+ ../t1lib/t1base.h ../t1lib/t1finfo.h
+hints.lo: hints.c types.h objects.h spaces.h paths.h regions.h hints.h
+lines.lo: lines.c types.h objects.h spaces.h paths.h regions.h lines.h
+objects.lo: objects.c types.h objects.h spaces.h paths.h regions.h \
+ fonts.h pictures.h strokes.h cluts.h
+paths.lo: paths.c types.h objects.h spaces.h paths.h regions.h fonts.h \
+ pictures.h strokes.h trig.h
+regions.lo: regions.c types.h objects.h spaces.h paths.h regions.h \
+ curves.h lines.h pictures.h fonts.h hints.h strokes.h
+scanfont.lo: scanfont.c t1stdio.h types.h util.h token.h fontfcn.h \
+ blues.h ../t1lib/t1misc.h
+spaces.lo: spaces.c types.h objects.h spaces.h paths.h pictures.h \
+ fonts.h arith.h trig.h
+t1io.lo: t1io.c t1stdio.h types.h t1hdigit.h
+t1snap.lo: t1snap.c objects.h types.h spaces.h paths.h
+t1stub.lo: t1stub.c objects.h types.h
+token.lo: token.c types.h t1stdio.h util.h digit.h token.h tokst.h \
+ hdigit.h
+type1.lo: type1.c types.h objects.h spaces.h paths.h fonts.h pictures.h \
+ util.h fontfcn.h blues.h
+util.lo: util.c types.h util.h fontmisc.h
diff --git a/Build/source/libs/type1/CHANGES b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/CHANGES
index 25e772128b0..25e772128b0 100644
--- a/Build/source/libs/type1/CHANGES
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/CHANGES
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/Makefile.in
new file mode 100644
index 00000000000..241f12436f9
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/Makefile.in
@@ -0,0 +1,106 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# clean
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 04/06/1997
+# Last modified: 2001-04-01
+#
+# Modified by H.Kakugawa to use libtool
+
+LIBTOOL = ../../libtool
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+ALLCFLAGS = $(CFLAGS)
+SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)'
+@SET_MAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+
+# targets to build:
+
+OBJS = \
+ arith.lo \
+ curves.lo \
+ fontfcn.lo \
+ hints.lo \
+ lines.lo \
+ objects.lo \
+ paths.lo \
+ regions.lo \
+ scanfont.lo \
+ spaces.lo \
+ t1io.lo \
+ t1snap.lo \
+ t1stub.lo \
+ token.lo \
+ type1.lo \
+ util.lo
+
+
+.SUFFIXES: .c .o .lo
+.c.lo:
+ $(LIBTOOL) --mode=compile \
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
+
+.c.o:
+ $(LIBTOOL) --mode=compile \
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
+
+
+all: $(OBJS)
+
+.PHONY: clean
+
+dependencies: dummy
+ gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies
+
+clean: dummy
+ -$(RM) *.lo *.o .libs/*
+ -$(RM) *~ *.bak \#*\#
+ -rmdir .libs
+
+install: dummy
+
+
+dummy:
+
+
+# Dependencies of object files
+include .dependencies
+
diff --git a/Build/source/libs/type1/README b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/README
index 4ce796d75c4..4ce796d75c4 100644
--- a/Build/source/libs/type1/README
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/README
diff --git a/Build/source/libs/type1/README.RMz b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/README.RMz
index ec55697354d..ec55697354d 100644
--- a/Build/source/libs/type1/README.RMz
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/README.RMz
diff --git a/Build/source/libs/type1/Xstuff.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/Xstuff.h
index 523767da378..523767da378 100644
--- a/Build/source/libs/type1/Xstuff.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/Xstuff.h
diff --git a/Build/source/libs/type1/arith.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/arith.c
index 4d60c83d569..4d60c83d569 100644
--- a/Build/source/libs/type1/arith.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/arith.c
diff --git a/Build/source/libs/type1/arith.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/arith.h
index ef63b80c567..ef63b80c567 100644
--- a/Build/source/libs/type1/arith.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/arith.h
diff --git a/Build/source/libs/type1/blues.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/blues.h
index a5cdafb8b72..a5cdafb8b72 100644
--- a/Build/source/libs/type1/blues.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/blues.h
diff --git a/Build/source/libs/type1/bstring.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/bstring.c
index b17c5bdb918..c6a06016f36 100644
--- a/Build/source/libs/type1/bstring.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/bstring.c
@@ -2,10 +2,8 @@
* A simple memset() in case your ANSI C does not provide it
*/
-#if 0 /* not needed for xdvik */
memset(void *s, int c, int length)
{ char *p = s;
while (length--) *(p++) = c;
}
-#endif
diff --git a/Build/source/libs/type1/cluts.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/cluts.h
index fe51e02f9aa..fe51e02f9aa 100644
--- a/Build/source/libs/type1/cluts.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/cluts.h
diff --git a/Build/source/libs/type1/curves.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/curves.c
index b79f084de48..b79f084de48 100644
--- a/Build/source/libs/type1/curves.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/curves.c
diff --git a/Build/source/libs/type1/curves.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/curves.h
index 80a73be2dd6..80a73be2dd6 100644
--- a/Build/source/libs/type1/curves.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/curves.h
diff --git a/Build/source/libs/type1/digit.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/digit.h
index 4ed89c765c3..4ed89c765c3 100644
--- a/Build/source/libs/type1/digit.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/digit.h
diff --git a/Build/source/libs/type1/ffilest.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/ffilest.h
index 6a13d034088..6a13d034088 100644
--- a/Build/source/libs/type1/ffilest.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/ffilest.h
diff --git a/Build/source/libs/type1/font.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/font.h
index 8de6e908f31..8de6e908f31 100644
--- a/Build/source/libs/type1/font.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/font.h
diff --git a/Build/source/libs/type1/fontfcn.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfcn.c
index 380e8d14e6a..4c5b8e5d628 100644
--- a/Build/source/libs/type1/fontfcn.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfcn.c
@@ -46,17 +46,24 @@
#include "../t1lib/t1base.h"
#include "../t1lib/t1finfo.h"
+/* Note: The argument decodeonly is used to make Type1Char() decode only
+ such that later certain characterictics of the pass can be queried
+ (here, information about the parts of a seac).
+*/
extern xobject Type1Char(psfont *env, struct XYspace *S,
psobj *charstrP, psobj *subrsP,
psobj *osubrsP,
struct blues_struct *bluesP,
int *modeP, char *name,
- float strokewidth );
+ float strokewidth,
+ int decodeonly);
extern xobject Type1Line(psfont *env, struct XYspace *S,
float line_position,
float line_thickness,
float line_length,
float strokewidth);
+extern int T1int_Type1QuerySEAC( unsigned char* base,
+ unsigned char* accent);
void objFormatName(psobj *objP, int length, char *valueP);
extern void T1io_reset( void);
@@ -107,7 +114,7 @@ struct edgelist {
/***================================================================***/
static char CurCharName[257]="";
static char BaseCharName[257]="";
-char CurFontName[MAXPATHLEN];
+char CurFontName[MAXPATHLEN+1];
char *CurFontEnv;
char *vm_base = NULL;
@@ -177,7 +184,7 @@ char *env;
FontP->BluesP = NULL;
/* This will load the font into the FontP */
strncpy(CurFontName,env, MAXPATHLEN);
- CurFontName[MAXPATHLEN-1] = '\0';
+ CurFontName[MAXPATHLEN] = '\0';
FontP->FontFileName.len = strlen(CurFontName);
FontP->FontFileName.data.nameP = CurFontName;
T1io_reset();
@@ -375,7 +382,7 @@ xobject fontfcnB(int FontID, int modflag,
/* get CharString and character path */
theStringP = &(CharStringsDictP[basechar].value);
tmppath2 = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL,
- FontP->BluesP,mode,CurCharName,strokewidth);
+ FontP->BluesP,mode,CurCharName,strokewidth,0);
/* if Type1Char reported an error, then return */
if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR)
return(NULL);
@@ -416,7 +423,7 @@ xobject fontfcnB(int FontID, int modflag,
strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len);
CurCharName[charnameP->len]='\0';
charpath=(struct segment *)Type1Char(FontP,S,theStringP,SubrsArrayP,NULL,
- FontP->BluesP,mode,CurCharName,strokewidth);
+ FontP->BluesP,mode,CurCharName,strokewidth,0);
/* return if Type1Char reports an error */
if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR)
return(NULL);
@@ -753,7 +760,7 @@ xobject fontfcnB_string( int FontID, int modflag,
/* get CharString and character path */
theStringP = &(CharStringsDictP[basechar].value);
tmppath2 = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL,
- FontP->BluesP,mode,CurCharName,strokewidth);
+ FontP->BluesP,mode,CurCharName,strokewidth,0);
strcpy( BaseCharName, CurCharName);
/* if Type1Char reports an error, clean up and return */
if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR) {
@@ -829,7 +836,7 @@ xobject fontfcnB_string( int FontID, int modflag,
strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len);
CurCharName[charnameP->len]='\0';
tmppath5=(struct segment *)Type1Char(FontP,S,theStringP,SubrsArrayP,NULL,
- FontP->BluesP,mode,CurCharName,strokewidth);
+ FontP->BluesP,mode,CurCharName,strokewidth,0);
/* return if Type1Char reports an error */
if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR)
return(NULL);
@@ -1051,7 +1058,7 @@ xobject fontfcnB_ByName( int FontID, int modflag,
/* get CharString and character path */
theStringP = &(CharStringsDictP[basechar].value);
tmppath2 = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL,
- FontP->BluesP,mode,CurCharName, 0.0f);
+ FontP->BluesP,mode,CurCharName, 0.0f, 0);
/* if Type1Char reported an error, then return */
if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR)
return(NULL);
@@ -1092,7 +1099,7 @@ xobject fontfcnB_ByName( int FontID, int modflag,
strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len);
CurCharName[charnameP->len]='\0';
charpath=(struct segment *)Type1Char(FontP,S,theStringP,SubrsArrayP,NULL,
- FontP->BluesP,mode,CurCharName,0.0f);
+ FontP->BluesP,mode,CurCharName,0.0f,0);
/* return if Type1Char reports an error */
if ( *mode == FF_PARSE_ERROR || *mode==FF_PATH_ERROR)
return(NULL);
@@ -1169,3 +1176,91 @@ xobject fontfcnRect( float width,
return((xobject) charpath);
}
+
+
+
+/* T1int_QuerySEAC(): Query for Type of character definition of index "index".
+
+ Returns: 0 if charstring for currenc[index] not defined
+ 1 if charstring defines a self-containing character
+ 2 if charstring references other definition by means of
+ the SEAC directive.
+*/
+int T1int_QuerySEAC( int FontID,
+ unsigned char index,
+ unsigned char* basepiece,
+ unsigned char* accpiece
+ )
+{
+
+ psobj *charnameP; /* points to psobj that is name of character*/
+ int thischar;
+ int mode = 0;
+
+ psdict *CharStringsDictP; /* dictionary with char strings */
+ psobj CodeName; /* used to store the translation of the name*/
+ psobj *SubrsArrayP;
+ psobj *theStringP;
+ char **ev;
+ struct XYspace *S;
+ struct segment *path=NULL; /* the path for this character */
+
+
+ /* set the global font pointer to the address of already allocated
+ structure and setup pointers*/
+ FontP=pFontBase->pFontArray[FontID].pType1Data;
+ CharStringsDictP = FontP->CharStringsP;
+ SubrsArrayP = &(FontP->Subrs);
+ charnameP = &CodeName;
+
+ /* get encoding */
+ ev=pFontBase->pFontArray[FontID].pFontEnc;
+
+ if (ev==NULL){ /* font-internal encoding should be used */
+ charnameP->len = FontP->fontInfoP[ENCODING].value.data.arrayP[index].len;
+ charnameP->data.stringP = (unsigned char *) FontP->fontInfoP[ENCODING].value.data.arrayP[index].data.arrayP;
+ }
+ else{ /* some user-supplied encoding is to be used */
+ charnameP->len = strlen(ev[index]);
+ charnameP->data.stringP = (unsigned char *) ev[index];
+ }
+ strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len);
+ CurCharName[charnameP->len]='\0';
+
+
+ /* search the chars string for this charname as key */
+ thischar = SearchDictName(CharStringsDictP,charnameP);
+ /* thischar is now the index of the base character in the CharStrings
+ dictionary */
+
+ if ( thischar <= 0 ) {
+ /* CharString not defined, return */
+ return 0;
+ }
+
+ /* Setup NULL-space, not needed when paths aren't created */
+ S = NULL;
+
+
+ /* we provide the Type1Char() procedure with the name of the character
+ to rasterize for debugging purposes */
+ strncpy( (char *)CurCharName, (char *)charnameP->data.stringP, charnameP->len);
+ CurCharName[charnameP->len]='\0';
+ /* get CharString and character path */
+ theStringP = &(CharStringsDictP[thischar].value);
+
+ path = (struct segment *) Type1Char(FontP,S,theStringP,SubrsArrayP,NULL,
+ FontP->BluesP,&mode,CurCharName,0, 1);
+
+ /* if Type1Char reported an error, then return */
+ if ( mode == FF_PARSE_ERROR || mode==FF_PATH_ERROR) {
+ return -1;
+ }
+
+ if ( T1int_Type1QuerySEAC( basepiece, accpiece) > 0 ) {
+ return 2;
+ }
+
+ return 1;
+
+}
diff --git a/Build/source/libs/type1/fontfcn.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfcn.h
index 55275ad8560..55275ad8560 100644
--- a/Build/source/libs/type1/fontfcn.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfcn.h
diff --git a/Build/source/libs/type1/fontfile.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfile.h
index 166aac3a01e..166aac3a01e 100644
--- a/Build/source/libs/type1/fontfile.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontfile.h
diff --git a/Build/source/libs/type1/fontmisc.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontmisc.h
index e6a68332755..e6a68332755 100644
--- a/Build/source/libs/type1/fontmisc.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontmisc.h
diff --git a/Build/source/libs/type1/fonts.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fonts.h
index cf29c3c8f25..cf29c3c8f25 100644
--- a/Build/source/libs/type1/fonts.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fonts.h
diff --git a/Build/source/libs/type1/fontstruct.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontstruct.h
index e38cab3f1d9..39c40f477f4 100644
--- a/Build/source/libs/type1/fontstruct.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontstruct.h
@@ -1,3 +1,4 @@
+/* $Header: fontstruct.h,v 1.10 91/07/22 15:37:41 keith Exp $ */
/***********************************************************
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
diff --git a/Build/source/libs/type1/fontxlfd.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontxlfd.h
index 282ad6ca5d9..282ad6ca5d9 100644
--- a/Build/source/libs/type1/fontxlfd.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fontxlfd.h
diff --git a/Build/source/libs/type1/fsmasks.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fsmasks.h
index 7904ab85922..7904ab85922 100644
--- a/Build/source/libs/type1/fsmasks.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/fsmasks.h
diff --git a/Build/source/libs/type1/hdigit.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hdigit.h
index 064fb2d67c2..064fb2d67c2 100644
--- a/Build/source/libs/type1/hdigit.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hdigit.h
diff --git a/Build/source/libs/type1/hints.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hints.c
index 0eedd4ae75d..0eedd4ae75d 100644
--- a/Build/source/libs/type1/hints.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hints.c
diff --git a/Build/source/libs/type1/hints.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hints.h
index 79a96b42527..79a96b42527 100644
--- a/Build/source/libs/type1/hints.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/hints.h
diff --git a/Build/source/libs/type1/lines.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/lines.c
index 2b3587e602b..8e1e4517eb4 100644
--- a/Build/source/libs/type1/lines.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/lines.c
@@ -43,6 +43,7 @@ The included files are:
#include "types.h"
#include "objects.h"
#include "spaces.h"
+#include "paths.h"
#include "regions.h"
#include "lines.h"
diff --git a/Build/source/libs/type1/lines.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/lines.h
index 44b0da1a178..44b0da1a178 100644
--- a/Build/source/libs/type1/lines.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/lines.h
diff --git a/Build/source/libs/type1/objects.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/objects.c
index e0e6c728157..c413a0f3594 100644
--- a/Build/source/libs/type1/objects.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/objects.c
@@ -542,7 +542,7 @@ struct xobject *t1_Copy(obj)
return(NULL);
if (ISPATHTYPE(obj->type))
- obj = (struct xobject *) CopyPath(obj);
+ obj = (struct xobject *) CopyPath((struct segment *)obj);
else
switch (obj->type) {
case SPACETYPE:
@@ -584,7 +584,7 @@ struct xobject *Destroy(obj) /* non-ANSI avoids overly strict type checking */
return(NULL);
}
if (ISPATHTYPE(obj->type))
- KillPath(obj);
+ KillPath((struct segment *)obj);
else {
switch (obj->type) {
case REGIONTYPE:
diff --git a/Build/source/libs/type1/objects.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/objects.h
index 6ad86d584f4..13cbae78029 100644
--- a/Build/source/libs/type1/objects.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/objects.h
@@ -288,7 +288,7 @@ We define other routines formatting parameters
void t1_DumpArea(); /* dump a region structure */
void t1_DumpText(); /* dump a textpath structure */
-void t1_DumpPath(); /* dump a path list */
+void T1_DumpPath(); /* dump a path list */
void t1_DumpSpace(); /* dump a coordinate space structure */
void t1_DumpEdges(); /* dump a region's edge list */
void t1_FormatFP(); /* dump a format a "fractpel" coordinate */
diff --git a/Build/source/libs/type1/paths.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths.c
index 47e221f7554..8e7368178b2 100644
--- a/Build/source/libs/type1/paths.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths.c
@@ -1049,21 +1049,23 @@ void PathDelta(p, pt)
register struct segment *p; /* input path */
register struct fractpoint *pt; /* pointer to x,y to set */
{
- struct fractpoint mypoint; /* I pass this to TextDelta */
- register fractpel x,y; /* working variables for path current point */
-
- for (x=y=0; p != NULL; p=p->link) {
- x += p->dest.x;
- y += p->dest.y;
- if (p->type == TEXTTYPE) {
- TextDelta(p, &mypoint);
- x += mypoint.x;
- y += mypoint.y;
- }
- }
-
- pt->x = x;
- pt->y = y;
+ register fractpel x,y; /* working variables for path current point */
+
+ for (x=y=0; p != NULL; p=p->link) {
+ x += p->dest.x;
+ y += p->dest.y;
+ if (p->type == TEXTTYPE) {
+ struct fractpoint mypoint;
+
+ mypoint.x = mypoint.y = 0;
+ TextDelta(p, &mypoint);
+ x += mypoint.x;
+ y += mypoint.y;
+ }
+ }
+
+ pt->x = x;
+ pt->y = y;
}
/*
diff --git a/Build/source/libs/type1/paths.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths.h
index a09debac579..5cf317f89a9 100644
--- a/Build/source/libs/type1/paths.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths.h
@@ -52,11 +52,46 @@
#define QueryPath(p,t,B,C,D,r) t1_QueryPath(p,t,B,C,D,r)
#define QueryBounds(p,S,x1,y1,x2,y2) t1_QueryBounds(p,S,x1,y1,x2,y2)
+/*SHARED*/
+
+struct segment {
+ XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
+ unsigned char size; /* size of the structure */
+ unsigned char context; /* index to device context */
+ struct segment *link; /* pointer to next structure in linked list */
+ struct segment *last; /* pointer to last structure in list */
+ struct fractpoint dest; /* relative ending location of path segment */
+};
+#define ISCLOSED(flag) ((flag)&0x80) /* subpath is closed */
+#define LASTCLOSED(flag) ((flag)&0x40) /* last segment in closed subpath */
+
+/*
+ NOTE: The ISCLOSED flag is set on the MOVETYPE segment before the
+ subpath proper; the LASTCLOSED flag is set on the last segment (LINETYPE)
+ in the subpath
+
+ We define the ISPATHANCHOR predicate to test that a path handle
+ passed by the user is valid:
+*/
+
+#define ISPATHANCHOR(p) (ISPATHTYPE(p->type)&&p->last!=NULL)
+
+/*
+ For performance reasons, a user's "location" object is identical to
+ a path whose only segment is a move segment. We define a predicate
+ to test for this case. See also :hdref refid=location..
+*/
+
+#define ISLOCATION(p) ((p)->type == MOVETYPE && (p)->link == NULL)
+
+/*END SHARED*/
+
+
struct segment *t1_Loc(); /* create a location object (or "move" segment) */
struct segment *t1_ILoc(); /* integer argument version of same */
struct segment *t1_Line(); /* straight line path segment */
-struct segment *t1_Join(); /* join two paths or regions together */
+struct segment *t1_Join(struct segment *,struct segment *); /* join two paths or regions together */
struct segment *t1_ClosePath(); /* close a path or path set */
struct conicsegment *t1_Conic(); /* conic curve path segment */
struct conicsegment *t1_RoundConic(); /* ditto, specified another way */
@@ -86,8 +121,8 @@ void t1_QueryBounds(); /* Query the bounding box of a path */
#define Hypoteneuse(dx,dy) t1_Hypoteneuse(dx,dy)
#define BoxPath(S,h,w) t1_BoxPath(S,h,w)
-struct segment *t1_CopyPath(); /* duplicate a path */
-void t1_KillPath(); /* destroy a path */
+struct segment *t1_CopyPath(struct segment *); /* duplicate a path */
+void t1_KillPath(struct segment *); /* destroy a path */
struct segment *t1_PathXform(); /* transform a path arbitrarily */
void t1_PathDelta(); /* calculate the ending point of a path */
struct segment *t1_PathSegment(); /* produce a MOVE or LINE segment */
@@ -101,39 +136,6 @@ struct segment *t1_BoxPath(); /* returns a rectangular path */
#define ConsumePath(p) MAKECONSUME(p,KillPath(p))
#define UniquePath(p) MAKEUNIQUE(p,CopyPath(p))
-/*END SHARED*/
-/*SHARED*/
-
-struct segment {
- XOBJ_COMMON /* xobject common data define 3-26-91 PNM */
- unsigned char size; /* size of the structure */
- unsigned char context; /* index to device context */
- struct segment *link; /* pointer to next structure in linked list */
- struct segment *last; /* pointer to last structure in list */
- struct fractpoint dest; /* relative ending location of path segment */
-} ;
-
-#define ISCLOSED(flag) ((flag)&0x80) /* subpath is closed */
-#define LASTCLOSED(flag) ((flag)&0x40) /* last segment in closed subpath */
-
-/*
-NOTE: The ISCLOSED flag is set on the MOVETYPE segment before the
-subpath proper; the LASTCLOSED flag is set on the last segment (LINETYPE)
-in the subpath
-
-We define the ISPATHANCHOR predicate to test that a path handle
-passed by the user is valid:
-*/
-
-#define ISPATHANCHOR(p) (ISPATHTYPE(p->type)&&p->last!=NULL)
-
-/*
-For performance reasons, a user's "location" object is identical to
-a path whose only segment is a move segment. We define a predicate
-to test for this case. See also :hdref refid=location..
-*/
-
-#define ISLOCATION(p) ((p)->type == MOVETYPE && (p)->link == NULL)
/*END SHARED*/
/*SHARED*/
diff --git a/Build/source/libs/type1/paths_rmz.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths_rmz.h
index 208e9185dcb..208e9185dcb 100644
--- a/Build/source/libs/type1/paths_rmz.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/paths_rmz.h
diff --git a/Build/source/libs/type1/pictures.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/pictures.h
index 13e44fcc9ee..13e44fcc9ee 100644
--- a/Build/source/libs/type1/pictures.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/pictures.h
diff --git a/Build/source/libs/type1/regions.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/regions.c
index bda5faf4f5f..006f5bd6b1b 100644
--- a/Build/source/libs/type1/regions.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/regions.c
@@ -46,8 +46,8 @@ The included files are:
#include "types.h"
#include "objects.h"
#include "spaces.h"
-#include "regions.h"
#include "paths.h"
+#include "regions.h"
#include "curves.h"
#include "lines.h"
#include "pictures.h"
diff --git a/Build/source/libs/type1/regions.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/regions.h
index 75e48a93fc0..304be069c46 100644
--- a/Build/source/libs/type1/regions.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/regions.h
@@ -35,7 +35,7 @@
#define Complement(area) t1_Complement(area)
#define Overlap(a1,a2) t1_OverLap(a1,a2)
-struct region *t1_Interior(); /* returns the interior of a closed path */
+struct region *t1_Interior(struct segment *,int); /* returns the interior of a closed path */
struct region *t1_Union(); /* set union of paths or regions */
struct region *t1_Intersect(); /* set intersection of regions */
struct region *t1_Complement(); /* complement of a region */
diff --git a/Build/source/libs/type1/scanfont.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/scanfont.c
index f6c58411205..c92b1cb134b 100644
--- a/Build/source/libs/type1/scanfont.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/scanfont.c
@@ -30,6 +30,7 @@
/* Author: Katherine A. Hitchcock IBM Almaden Research Laboratory */
#include <string.h>
+#include <stdlib.h>
#include "t1stdio.h"
#include "util.h"
#include "token.h"
@@ -268,6 +269,12 @@ static psobj *MakeEncodingArrayP(encodingTable)
boolean Init_BuiltInEncoding()
{
+ if ( StdEncArrayP != NULL) {
+ /* Note: We should not run into this case because multiple
+ initialization should be caught by T1_InitLib(). */
+ return FALSE;
+ }
+
StdEncArrayP = MakeEncodingArrayP(StdEnc);
if (StdEncArrayP==NULL)
return( FALSE);
@@ -1218,7 +1225,7 @@ int scan_font(FontP)
{
- char filename[MAXPATHLEN];
+ char filename[MAXPATHLEN+1];
FILE *fileP;
char *nameP;
int namelen;
@@ -1237,7 +1244,7 @@ int scan_font(FontP)
}
if ( namelen >= MAXPATHLEN ) {
/* Hopefully, this will lead to a file open error */
- namelen = MAXPATHLEN - 1; /* - 1 added by SU */
+ namelen = MAXPATHLEN;
}
strncpy(filename,nameP,namelen);
filename[namelen] = '\0';
@@ -1286,10 +1293,14 @@ int scan_font(FontP)
tokenStartP[tokenLength] = '\0';
/* At this point we check for the font not being a
Multiple Master Font. If it is, we return an error.
- (RMz, 01/29/1999) */
- if (strncmp(tokenStartP, "BlendAxisTypes", 14)==0){
- rc=SCAN_MMFONT;
- break;
+ However, we restrict searching for forbidden keywords
+ to FontInfo, in order not to make assumptions about
+ internal PostScript routine names. (RMz, 2004-11-27) */
+ if ( !InPrivateDict ) {
+ if (strncmp(tokenStartP, "BlendAxisTypes", 14)==0){
+ rc=SCAN_MMFONT;
+ break;
+ }
}
if (InPrivateDict ) {
if (0== strncmp(tokenStartP,"Subrs",5) ) {
diff --git a/Build/source/libs/type1/spaces.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces.c
index 667150dc5bf..667150dc5bf 100644
--- a/Build/source/libs/type1/spaces.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces.c
diff --git a/Build/source/libs/type1/spaces.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces.h
index 7d751f4e8a8..7d751f4e8a8 100644
--- a/Build/source/libs/type1/spaces.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces.h
diff --git a/Build/source/libs/type1/spaces_rmz.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces_rmz.h
index 85b809da393..85b809da393 100644
--- a/Build/source/libs/type1/spaces_rmz.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/spaces_rmz.h
diff --git a/Build/source/libs/type1/strokes.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/strokes.h
index 59076329847..59076329847 100644
--- a/Build/source/libs/type1/strokes.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/strokes.h
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1chardump b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1chardump
new file mode 100644
index 00000000000..40fbd9aa09a
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1chardump
@@ -0,0 +1,697 @@
+/*--------------------------------------------------------------------------
+ ----- File: t1chardump
+ ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+ ----- Date: 2003-03-02
+ ----- Description: This file is part of the t1-library. It contains
+ code responsible for dumping outline data to a
+ PostScript file (used only for debugging.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ As of version 0.5, t1lib is distributed under the
+ GNU General Public Library Lincense. The
+ conditions can be found in the files LICENSE and
+ LGPL, which should reside in the toplevel
+ directory of the distribution. Please note that
+ there are parts of t1lib that are subject to
+ other licenses:
+ The parseAFM-package is copyrighted by Adobe Systems
+ Inc.
+ The type1 rasterizer is copyrighted by IBM and the
+ X11-consortium.
+ ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+ ----- Credits: I want to thank IBM and the X11-consortium for making
+ their rasterizer freely available.
+ Also thanks to Piet Tutelaers for his ps2pk, from
+ which I took the rasterizer sources in a format
+ independent from X11.
+ Thanks to all people who make free software living!
+--------------------------------------------------------------------------*/
+
+fputs( "\
+%!PS-Adobe-2.0 EPSF-1.2\n\
+%%Creator: t1lib\n\
+%%Title: Type1Char Character Dump\n\
+%%Pages: 1\n\
+%%PageOrder: Ascend\n\
+%%BoundingBox: 0 0 596 842\n\
+%%DocumentPaperSizes: a4\n\
+%%EndComments\n\
+%!\n\
+/T1LibDict 100 dict def \n\
+T1LibDict begin\n\
+% Setup the size from the type1 module\n\
+/t1SetupSize {\n\
+ /size exch def\n\
+} def\n\
+\n\
+% Prepare the page. Compute scales and fill the charspace unit square\n\
+% background\n\
+/t1PreparePage {\n\
+\n\
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\
+ %\n\
+ % Start of Customizable Section\n\
+ %\n\
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\
+\n\
+ % Setup a standard linewidth\n\
+ /t1dumpstdlinewidth 1.0 def\n\
+ % Setup a scale for drawing direction arrows\n\
+ /arrowscale 3.0 def\n\
+\n\
+ % Should we draw the device pixel grid? (1=yes, otherwise no)\n\
+ /t1drawgrid 1 def\n\
+ % Should we draw stems? (1=yes, otherwise no)\n\
+ /t1drawstems 1 def\n\
+ % Should we draw alignment zones? (1=yes, otherwise no)\n\
+ /t1drawzones 1 def\n\
+ % Should we fill the charspace unit square? (1=yes, otherwise no)\n\
+ /t1fillunitsquare 1 def\n\
+ % Should we fill the device page? (1=yes, otherwise no)\n\
+ /t1fillpage 1 def\n\
+ % Should we show path segment On-Curve points? (1=yes, otherwise no)\n\
+ /t1showoncurvepoints 1 def\n\
+ % Should we show path segment Off Curve points? (1=yes, otherwise no)\n\
+ /t1showoffcurvepoints 1 def\n\
+ % Should we show Bezier tangets and their defining points? (1=yes, otherwise no)\n\
+ /t1showbeziertangents 1 def\n\
+\n\
+ % Define a few colors\n\
+ /t1linecolor { 0.0 0.0 0.0 } def\n\
+ /t1hlinecolor { 1.0 0.0 0.0 } def\n\
+ /t1slinecolor { 1.0 1.0 1.0 } def\n\
+ /t1movecolor { 0.0 0.0 0.0 } def\n\
+ /t1hmovecolor { 1.0 0.0 0.0 } def\n\
+ /t1smovecolor { 1.0 1.0 1.0 } def\n\
+ /t1curvecolor { 0.0 0.0 0.0 } def\n\
+ /t1hcurvecolor { 1.0 0.0 0.0 } def\n\
+ /t1scurvecolor { 0.0 0.0 1.0 } def\n\
+ /t1sprolongatecolor { 1.0 0.0 1.0 } def\n\
+ /t1stemcolor { 0.0 0.0 1.0 } def\n\
+ /t1alignedstemcolor { 1.0 0.0 1.0 } def\n\
+ /t1bottomzonecolor { 1.0 1.0 0.0 } def\n\
+ /t1topzonecolor { 1.0 1.0 0.0 } def\n\
+ /t1arrowcolor { 0.0 0.0 0.0 } def\n\
+ /t1harrowcolor { 1.0 0.0 0.0 } def\n\
+ /t1sarrowcolor { 0.0 0.0 1.0 } def\n\
+ /t1sbwcolor { 0.0 0.0 0.0 } def\n\
+ /t1closepathcolor { 0.0 0.0 0.0 } def\n\
+ /t1hclosepathcolor { 1.0 0.0 0.0 } def\n\
+ /t1sclosepathcolor { 0.0 0.0 1.0 } def\n\
+ /t1pagecolor { 0.7 0.7 0.7 } def\n\
+ /t1unitsquarecolor { 0.4 0.4 0.4 } def\n\
+ /t1gridcolor { 0.0 0.0 0.0 } def\n\
+\n\
+ % Line scale relative to the standard linewidth
+ /t1linescale 0.4 def\n\
+ /t1hlinescale 0.4 def\n\
+ /t1slinescale 0.4 def\n\
+ /t1movescale 0.4 def\n\
+ /t1hmovescale 0.4 def\n\
+ /t1smovescale 0.4 def\n\
+ /t1curvescale 0.4 def\n\
+ /t1hcurvescale 0.4 def\n\
+ /t1scurvescale 0.4 def\n\
+ /t1curvetangentscale 0.5 def\n\
+ /t1sprolongatescale 0.4 def\n\
+ /t1stemscale 0.5 def\n\
+ /t1alignedstemscale 0.5 def\n\
+ /t1bottomzonescale 0.5 def\n\
+ /t1topzonescale 0.5 def\n\
+ /t1closepathscale 0.4 def\n\
+ /t1hclosepathscale 0.4 def\n\
+ /t1sclosepathscale 0.4 def\n\
+ /t1gridscale 0.5 def\n\
+\n\
+ % Line dash specifications (stems and zones are not configurable!)
+ /t1linedash { [] 0 } def\n\
+ /t1hlinedash { [] 0 } def\n\
+ /t1slinedash { [] 0 } def\n\
+ /t1movedash { [2 2] 0 } def\n\
+ /t1hmovedash { [2 2] 0 } def\n\
+ /t1smovedash { [2 2] 0 } def\n\
+ /t1curvedash { [] 0 } def\n\
+ /t1hcurvedash { [] 0 } def\n\
+ /t1scurvedash { [] 0 } def\n\
+ /t1sprolongatedash { [1 1] 0 }def\n\
+ /t1closepathdash { [] 0 } def\n\
+ /t1hclosepathdash { [] 0 } def\n\
+ /t1sclosepathdash { [] 0 } def\n\
+ /t1griddash { [3 3] 0 } def\n\
+\n\
+ % Define a clipping rectangle ROI (in charspace coordinates)\n\
+ /t1ROIxmin -200 def\n\
+ /t1ROIxmax 1200 def\n\
+ /t1ROIymin -500 def\n\
+ /t1ROIymax 1200 def\n\
+\n\
+ % Device values (in bp). These must match the Bounding Box Statement!\n\
+ /xmindev 0 neg def\n\
+ /xmaxdev 596 def\n\
+ /ymindev 0 neg def\n\
+ /ymaxdev 842 def\n\
+ /dxdev 1 def\n\
+ /dydev 1 def\n\
+\n\
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\
+ %\n\
+ % End of Customizable Section\n\
+ %\n\
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\
+\n\
+ % logical pixel values\n\
+ /xminpixel t1ROIxmin 1000.0 div size mul def\n\
+ /xmaxpixel t1ROIxmax 1000.0 div size mul def\n\
+ /yminpixel t1ROIymin 1000.0 div size mul def\n\
+ /ymaxpixel t1ROIymax 1000.0 div size mul def\n\
+ /dxpixel 1 def\n\
+ /dypixel 1 def\n\
+\n\
+ % compute scales and set minimum scale\n\
+ /scalex xmaxdev xmindev sub xmaxpixel xminpixel sub div def\n\
+ /scaley ymaxdev ymindev sub ymaxpixel yminpixel sub div def\n\
+ scalex scaley gt { /scale scaley def } { /scale scalex def } ifelse\n\
+\n\
+ % Fill device page\n\
+ xmindev ymindev moveto\n\
+ xmaxdev 0 rlineto\n\
+ 0 ymaxdev rlineto\n\
+ xmaxdev neg 0 rlineto\n\
+ 0 ymaxdev neg rlineto\n\
+ closepath\n\
+ clip\n\
+ t1fillpage 1 eq\n\
+ {\n\
+ t1pagecolor setrgbcolor\n\
+ fill\n\
+ } if\n\
+\n\
+ % reassign device values\n\
+ /xmindev xminpixel scale mul def\n\
+ /xmaxdev xmaxpixel scale mul def\n\
+ /ymindev yminpixel scale mul def\n\
+ /ymaxdev ymaxpixel scale mul def\n\
+ /dxdev dxpixel scale mul def\n\
+ /dydev dypixel scale mul def\n\
+\n\
+ % translate coordinate system \n\
+ xminpixel scale mul neg yminpixel scale mul neg translate\n\
+ \n\
+ % Fill unit square of charspace coordinate system \n\
+ t1fillunitsquare 1 eq\n\
+ {\n\
+ t1unitsquarecolor setrgbcolor\n\
+ 0 0 moveto\n\
+ size scale mul 0 rlineto\n\
+ 0 size scale mul rlineto\n\
+ size scale mul neg 0 rlineto\n\
+ 0 size scale mul neg rlineto\n\
+ closepath fill\n\
+ } if\n\
+} def\n\
+\n\
+/t1FinishPage {\n\
+ t1drawgrid 1 eq\n\
+ {\n\
+ t1gridcolor setrgbcolor\n\
+ t1gridscale setlinewidth\n\
+ t1griddash setdash\n\
+ % draw grid and align to the point (0,0)\n\
+ 0 dxdev xmaxdev {\n\
+ /xval exch def\n\
+ xval ymindev moveto\n\
+ xval ymaxdev lineto\n\
+ stroke\n\
+ } for\n\
+ 0 dxdev neg xmindev {\n\
+ /xval exch def\n\
+ xval ymindev moveto\n\
+ xval ymaxdev lineto\n\
+ stroke\n\
+ } for\n\
+ 0 dydev ymaxdev {\n\
+ /yval exch def\n\
+ xmindev yval moveto\n\
+ xmaxdev yval lineto\n\
+ stroke\n\
+ } for\n\
+ 0 dydev neg ymindev {\n\
+ /yval exch def\n\
+ xmindev yval moveto\n\
+ xmaxdev yval lineto\n\
+ stroke\n\
+ } for\n\
+ } if\n\
+} def\n\
+\n\
+% Define three arrow routines available for later providing the output with directions\n\
+/t1arrowhead {\n\
+ /tmpy exch def\n\
+ /tmpx exch def\n\
+ gsave\n\
+ t1arrowcolor setrgbcolor\n\
+ currx curry translate\n\
+ tmpy tmpx atan rotate\n\
+ newpath\n\
+ 0 0 moveto\n\
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto\n\
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto\n\
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto\n\
+ closepath\n\
+ fill\n\
+ grestore\n\
+ tmpx\n\
+ tmpy\n\
+} def\n\
+/t1harrowhead {\n\
+ /tmpy exch def\n\
+ /tmpx exch def\n\
+ gsave\n\
+ t1harrowcolor setrgbcolor\n\
+ currhx currhy translate\n\
+ tmpy tmpx atan rotate\n\
+ newpath\n\
+ 0 0 moveto\n\
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto\n\
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto\n\
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto\n\
+ closepath\n\
+ fill\n\
+ grestore\n\
+ tmpx\n\
+ tmpy\n\
+} def\n\
+/t1sarrowhead {\n\
+ /tmpy exch def\n\
+ /tmpx exch def\n\
+ gsave\n\
+ t1sarrowcolor setrgbcolor\n\
+ currsx currsy translate\n\
+ tmpy tmpx atan rotate\n\
+ newpath\n\
+ 0 0 moveto\n\
+ 0 2 arrowscale currentlinewidth neg mul mul rlineto\n\
+ 6 arrowscale currentlinewidth mul mul 2 arrowscale currentlinewidth mul mul rlineto\n\
+ 6 arrowscale currentlinewidth mul mul neg 2 arrowscale currentlinewidth mul mul rlineto\n\
+ closepath\n\
+ fill\n\
+ grestore\n\
+ tmpx\n\
+ tmpy\n\
+} def\n\
+\n\
+/t1rlineto {\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1linecolor setrgbcolor\n\
+ t1linedash setdash\n\
+ t1linescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ currx curry moveto\n\
+ x2 y2 rlineto\n\
+ stroke\n\
+ /currx currx x2 add def\n\
+ /curry curry y2 add def\n\
+} def\n\
+\n\
+/t1srlineto {\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1slinecolor setrgbcolor\n\
+ t1slinedash setdash\n\
+ t1slinescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ currsx currsy moveto\n\
+ x2 y2 rlineto\n\
+ stroke\n\
+ /currsx currsx x2 add def\n\
+ /currsy currsy y2 add def\n\
+} def\n\
+\n\
+/t1sprolongate {\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1sprolongatecolor setrgbcolor\n\
+ t1sprolongatedash setdash\n\
+ t1sprolongatescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ currsx currsy moveto\n\
+ x2 y2 rlineto\n\
+ stroke\n\
+ /currsx currsx x2 add def\n\
+ /currsy currsy y2 add def\n\
+} def\n\
+\n\
+/t1hintedrlineto {\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1hlinecolor setrgbcolor\n\
+ t1hlinedash setdash\n\
+ t1hlinescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ currhx currhy moveto\n\
+ x2 y2 rlineto\n\
+ stroke\n\
+ /currhx currhx x2 add def\n\
+ /currhy currhy y2 add def\n\
+} def\n\
+\n\
+/t1rmoveto {\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1movecolor setrgbcolor\n\
+ t1movedash setdash\n\
+ t1movescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currx x2 add curry y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ currx curry moveto\n\
+ x2 y2 rlineto\n\
+ stroke\n\
+ /currx currx x2 add def\n\
+ /curry curry y2 add def\n\
+ /startx currx def\n\
+ /starty curry def\n\
+} def\n\
+\n\
+/t1srmoveto {\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1smovecolor setrgbcolor\n\
+ t1smovedash setdash\n\
+ t1smovescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currsx x2 add currsy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ currsx currsy moveto\n\
+ x2 y2 rlineto\n\
+ stroke\n\
+ /currsx currsx x2 add def\n\
+ /currsy currsy y2 add def\n\
+ /startsx currsx def\n\
+ /startsy currsy def\n\
+} def\n\
+\n\
+/t1hintedrmoveto {\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1hmovecolor setrgbcolor\n\
+ t1hmovedash setdash\n\
+ t1hmovescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currhx x2 add currhy y2 add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ currhx currhy moveto\n\
+ x2 y2 rlineto\n\
+ stroke\n\
+ /currhx currhx x2 add def\n\
+ /currhy currhy y2 add def\n\
+ /starthx currhx def\n\
+ /starthy currhy def\n\
+} def\n\
+\n\
+/t1rrcurveto {\n\
+ /y4 exch scale mul def\n\
+ /x4 exch scale mul def\n\
+ /y3 exch scale mul def\n\
+ /x3 exch scale mul def\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1curvecolor setrgbcolor\n\
+ t1curvedash setdash\n\
+ t1curvescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoffcurvepoints 1 eq\n\
+ {\n
+ newpath currx x2 add curry y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\
+ newpath currx x2 x3 add add curry y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currx x2 x3 x4 add add add curry y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ t1showbeziertangents 1 eq\n\
+ {\n\
+ [2 2] 0 setdash\n\
+ t1curvetangentscale currentlinewidth mul setlinewidth\n\
+ currx curry moveto\n\
+ currx x2 add curry y2 add lineto\n\
+ stroke\n\
+ currx x2 x3 add add curry y2 y3 add add moveto\n\
+ currx x2 x3 x4 add add add curry y2 y3 y4 add add add lineto\n\
+ stroke\n\
+ } if\n\
+ t1curvedash setdash\n\
+ t1curvescale t1dumpstdlinewidth mul setlinewidth\n\
+ currx curry moveto\n\
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto\n\
+ stroke\n\
+ /currx currx x2 x3 x4 add add add def\n\
+ /curry curry y2 y3 y4 add add add def\n\
+} def\n\
+\n\
+/t1srrcurveto {\n\
+ /y4 exch scale mul def\n\
+ /x4 exch scale mul def\n\
+ /y3 exch scale mul def\n\
+ /x3 exch scale mul def\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1scurvecolor setrgbcolor\n\
+ t1scurvedash setdash\n\
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoffcurvepoints 1 eq\n\
+ {\n\
+ newpath currsx x2 add currsy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\
+ newpath currsx x2 x3 add add currsy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ t1showbeziertangents 1 eq\n\
+ {\n\
+ [2 2] 0 setdash\n\
+ t1curvetangentscale currentlinewidth mul setlinewidth\n\
+ currsx currsy moveto\n\
+ currsx x2 add currsy y2 add lineto\n\
+ stroke\n\
+ currsx x2 x3 add add currsy y2 y3 add add moveto\n\
+ currsx x2 x3 x4 add add add currsy y2 y3 y4 add add add lineto\n\
+ stroke\n\
+ } if\n\
+ t1scurvedash setdash\n\
+ t1scurvescale t1dumpstdlinewidth mul setlinewidth\n\
+ currsx currsy moveto\n\
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto\n\
+ stroke\n\
+ /currsx currsx x2 x3 x4 add add add def\n\
+ /currsy currsy y2 y3 y4 add add add def\n\
+} def\n\
+\n\
+/t1hintedrrcurveto {\n\
+ /y4 exch scale mul def\n\
+ /x4 exch scale mul def\n\
+ /y3 exch scale mul def\n\
+ /x3 exch scale mul def\n\
+ /y2 exch scale mul def\n\
+ /x2 exch scale mul def\n\
+ t1hcurvecolor setrgbcolor\n\
+ t1hcurvedash setdash\n\
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currhx x2 add currhy y2 add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\
+ newpath currhx x2 x3 add add currhy y2 y3 add add 1.0 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ t1showoncurvepoints 1 eq\n\
+ {\n\
+ newpath currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add 1.5 currentlinewidth mul 0 360 arc closepath fill\n\
+ } if\n\
+ t1showbeziertangents 1 eq\n\
+ {\n\
+ [2 2] 0 setdash\n\
+ t1curvetangentscale currentlinewidth mul setlinewidth\n\
+ currhx currhy moveto\n\
+ currhx x2 add currhy y2 add lineto\n\
+ stroke\n\
+ currhx x2 x3 add add currhy y2 y3 add add moveto\n\
+ currhx x2 x3 x4 add add add currhy y2 y3 y4 add add add lineto\n\
+ stroke\n\
+ } if\n\
+ t1hcurvedash setdash\n\
+ t1hcurvescale t1dumpstdlinewidth mul setlinewidth\n\
+ currhx currhy moveto\n\
+ x2 y2 x2 x3 add y2 y3 add x2 x3 x4 add add y2 y3 y4 add add rcurveto\n\
+ stroke\n\
+ /currhx currhx x2 x3 x4 add add add def\n\
+ /currhy currhy y2 y3 y4 add add add def\n\
+} def\n\
+\n\
+/t1sbw {\n\
+ /wy exch scale mul def\n\
+ /wx exch scale mul def\n\
+ /sby exch scale mul def\n\
+ /sbx exch scale mul def\n\
+ t1sbwcolor setrgbcolor\n\
+ newpath sbx sby 3 0 360 arc closepath fill\n\
+ newpath wx wy 3 0 360 arc closepath fill\n\
+ /currx sbx def\n\
+ /curry sby def\n\
+ /currhx sbx def\n\
+ /currhy sby def\n\
+ /currsx sbx def\n\
+ /currsy sby def\n\
+} def\n\
+\n\
+/t1closepath {\n\
+ t1closepathdash setdash\n\
+ t1closepathscale t1dumpstdlinewidth mul setlinewidth\n\
+ t1closepathcolor setrgbcolor\n\
+ currx curry moveto\n\
+ startx starty lineto\n\
+ stroke\n\
+} def\n\
+\n\
+/t1sclosepath {\n\
+ t1sclosepathdash setdash\n\
+ t1sclosepathscale t1dumpstdlinewidth mul setlinewidth\n\
+ t1sclosepathcolor setrgbcolor\n\
+ currsx currsy moveto\n\
+ startsx startsy lineto\n\
+ stroke\n\
+} def\n\
+\n\
+/t1hintedclosepath {\n\
+ t1hclosepathdash setdash\n\
+ t1hclosepathscale t1dumpstdlinewidth mul setlinewidth\n\
+ t1hclosepathcolor setrgbcolor\n\
+ currhx currhy moveto\n\
+ starthx starthy lineto\n\
+ stroke\n\
+} def\n\
+\n\
+/t1vstem {\n\
+ t1drawstems 1 eq\n\
+ {\n\
+ /stemwidth exch scale mul def\n\
+ /stemstart exch scale mul def\n\
+ t1stemscale t1dumpstdlinewidth mul setlinewidth\n\
+ t1stemcolor setrgbcolor\n\
+ [] 0 setdash\n\
+ stemstart ymindev moveto\n\
+ stemstart ymaxdev lineto\n\
+ stroke\n\
+ [2 2] 0 setdash\n\
+ stemwidth stemstart add ymindev moveto\n\
+ stemwidth stemstart add ymaxdev lineto\n\
+ stroke\n\
+ } if\n\
+} def\n\
+\n\
+/t1alignedvstem {\n\
+ t1drawstems 1 eq\n\
+ {\n\
+ /stemwidth exch scale mul def\n\
+ /stemstart exch scale mul def\n\
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth\n\
+ t1alignedstemcolor setrgbcolor\n\
+ [] 0 setdash\n\
+ stemstart ymindev moveto\n\
+ stemstart ymaxdev lineto\n\
+ stroke\n\
+ [2 2] 0 setdash\n\
+ stemwidth stemstart add ymindev moveto\n\
+ stemwidth stemstart add ymaxdev lineto\n\
+ stroke\n\
+ } if\n\
+} def\n\
+\n\
+/t1hstem {\n\
+ t1drawstems 1 eq\n\
+ {\n\
+ /stemwidth exch scale mul def\n\
+ /stemstart exch scale mul def\n\
+ t1stemscale t1dumpstdlinewidth mul setlinewidth\n\
+ t1stemcolor setrgbcolor\n\
+ [] 0 setdash\n\
+ xmindev stemstart moveto\n\
+ xmaxdev stemstart lineto\n\
+ stroke\n\
+ [2 2] 0 setdash\n\
+ xmindev stemwidth stemstart add moveto\n\
+ xmaxdev stemwidth stemstart add lineto\n\
+ stroke\n\
+ } if\n\
+} def\n\
+\n\
+/t1alignedhstem {\n\
+ t1drawstems 1 eq\n\
+ {\n\
+ /stemwidth exch scale mul def\n\
+ /stemstart exch scale mul def\n\
+ t1alignedstemscale t1dumpstdlinewidth mul setlinewidth\n\
+ t1alignedstemcolor setrgbcolor\n\
+ [] 0 setdash\n\
+ xmindev stemstart moveto\n\
+ xmaxdev stemstart lineto\n\
+ stroke\n\
+ [2 2] 0 setdash\n\
+ xmindev stemwidth stemstart add moveto\n\
+ xmaxdev stemwidth stemstart add lineto\n\
+ stroke\n\
+ } if\n\
+} def\n\
+\n\
+/t1bottomzone {\n\
+ t1drawzones 1 eq\n\
+ {\n\
+ /bottom exch scale mul def\n\
+ /top exch scale mul def\n\
+ t1bottomzonescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1bottomzonecolor setrgbcolor\n\
+ [] 0 setdash\n\
+ xmindev bottom moveto\n\
+ xmaxdev bottom lineto\n\
+ stroke\n\
+ [2 2] 0 setdash\n\
+ xmindev top moveto\n\
+ xmaxdev top lineto\n\
+ stroke\n\
+ } if\n\
+} def\n\
+\n\
+/t1topzone {\n\
+ t1drawzones 1 eq\n\
+ {\n\
+ /bottom exch scale mul def\n\
+ /top exch scale mul def\n\
+ t1topzonescale t1dumpstdlinewidth mul setlinewidth\n\
+ t1topzonecolor setrgbcolor\n\
+ [2 2] 0 setdash\n\
+ xmindev bottom moveto\n\
+ xmaxdev bottom lineto\n\
+ stroke\n\
+ [] 0 setdash\n\
+ xmindev top moveto\n\
+ xmaxdev top lineto\n\
+ stroke\n\
+ } if\n\
+} def\n\
+\n\
+end\n\
+\n\
+% Next follows drawing code from charstring commands:\n", fp);
diff --git a/Build/source/libs/type1/t1hdigit.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1hdigit.h
index 9979ef55ceb..9979ef55ceb 100644
--- a/Build/source/libs/type1/t1hdigit.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1hdigit.h
diff --git a/Build/source/libs/type1/t1imager.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1imager.h
index 2761493e9ed..2761493e9ed 100644
--- a/Build/source/libs/type1/t1imager.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1imager.h
diff --git a/Build/source/libs/type1/t1intf.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1intf.h
index 21eb910d2ad..21eb910d2ad 100644
--- a/Build/source/libs/type1/t1intf.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1intf.h
diff --git a/Build/source/libs/type1/t1io.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1io.c
index dd69bf6539c..079327fe0bb 100644
--- a/Build/source/libs/type1/t1io.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1io.c
@@ -82,8 +82,8 @@ STATIC unsigned char TheBuffer[F_BUFSIZ];
/* Our routines */
F_FILE *T1Open(), *T1eexec();
-int T1Close();
-int T1Read(), T1Getc(), T1Ungetc();
+int T1Close(F_FILE *);
+int T1Read(), T1Getc(F_FILE *), T1Ungetc(int,F_FILE *);
void T1io_reset(void);
STATIC int T1Decrypt(), T1Fill();
diff --git a/Build/source/libs/type1/t1snap.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1snap.c
index 988539b49cb..988539b49cb 100644
--- a/Build/source/libs/type1/t1snap.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1snap.c
diff --git a/Build/source/libs/type1/t1stdio.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1stdio.h
index f5a2c18f110..f9ad8e97e25 100644
--- a/Build/source/libs/type1/t1stdio.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1stdio.h
@@ -76,7 +76,7 @@ typedef struct F_FILE {
)
extern FILE *T1Open(), *T1eexec();
-extern int T1Close(), T1Ungetc(), T1Read();
+extern int T1Close(F_FILE *), T1Ungetc(int,F_FILE *), T1Read();
#define fclose(f) T1Close(f)
#define fopen(name,mode) T1Open(name,mode)
diff --git a/Build/source/libs/type1/t1stub.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1stub.c
index 01ae1ade94d..01ae1ade94d 100644
--- a/Build/source/libs/type1/t1stub.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/t1stub.c
diff --git a/Build/source/libs/type1/token.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/token.c
index f9efc379cac..f9efc379cac 100644
--- a/Build/source/libs/type1/token.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/token.c
diff --git a/Build/source/libs/type1/token.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/token.h
index 6fcfa0e63ce..6fcfa0e63ce 100644
--- a/Build/source/libs/type1/token.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/token.h
diff --git a/Build/source/libs/type1/tokst.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/tokst.h
index 31a9fd04b02..31a9fd04b02 100644
--- a/Build/source/libs/type1/tokst.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/tokst.h
diff --git a/Build/source/libs/type1/trig.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/trig.h
index 3b0577c6750..3b0577c6750 100644
--- a/Build/source/libs/type1/trig.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/trig.h
diff --git a/Build/source/libs/type1/type1.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/type1.c
index 7018882cc67..392016c690e 100644
--- a/Build/source/libs/type1/type1.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/type1.c
@@ -282,6 +282,12 @@ static void PSDumpProlog( FILE* fp);
static void PSDumpEpilog( FILE* fp);
#endif
+/* variables for querying SEAC from external */
+static int isseac = 0;
+static unsigned char seacbase = 0;
+static unsigned char seacaccent = 0;
+
+
/**********************************/
/* Type1 Constants and Structures */
/**********************************/
@@ -454,11 +460,6 @@ static int Sbw();
static int CallOtherSubr();
static int SetCurrentPoint();
-/*****************************************/
-/* statics for Flex procedures (FlxProc) */
-/*****************************************/
-static struct segment *FlxOldPath; /* save path before Flex feature */
-
/******************************************************/
/* statics for Font level hints (Blues) (see blues.h) */
/******************************************************/
@@ -1942,6 +1943,10 @@ static int Seac(asb, adx, ady, bchar, achar)
int Code;
long pindex = 0;
+ isseac = 1;
+ seacaccent = achar;
+ seacbase = bchar;
+
IfTrace4((FontDebug), "SEAC %f %f %f %d ", asb, adx, ady, bchar);
IfTrace1((FontDebug), "%d\n", achar);
@@ -2316,9 +2321,6 @@ static void FlxProc1()
/* Returns currentpoint on stack */
static void FlxProc2()
{
- struct segment *CurrentPoint;
- DOUBLE CurrentX, CurrentY;
-
/* Push CurrentPoint on fake PostScript stack */
PSFakePush( ppoints[numppoints-1].x);
PSFakePush( ppoints[numppoints-1].y);
@@ -2403,7 +2405,8 @@ struct xobject *Type1Char(psfont *env, struct XYspace *S,
psobj *osubrsP,
struct blues_struct *bluesP,
int *modeP, char *charname,
- float strokewidth)
+ float strokewidth,
+ int decodeonly)
{
int Code;
long i = 0;
@@ -2414,6 +2417,11 @@ struct xobject *Type1Char(psfont *env, struct XYspace *S,
#endif
struct segment* p;
+ /* Reset SEAC querying variables */
+ isseac = 0;
+ seacbase = 0;
+ seacaccent = 0;
+
/* Reset point list */
ppoints = NULL;
numppoints = 0;
@@ -2429,6 +2437,10 @@ struct xobject *Type1Char(psfont *env, struct XYspace *S,
path = NULL;
apath = NULL;
errflag = FALSE;
+
+ if ( S == NULL ) {
+ S=(struct XYspace *) IDENTITY;
+ }
/* Make parameters available to all Type1 routines */
currentchar=charname;
@@ -2440,22 +2452,23 @@ struct xobject *Type1Char(psfont *env, struct XYspace *S,
ModeP = modeP;
blues = bluesP;
-
- QuerySpace( S, &scxx, &scyx, &scxy, &scyy); /* Transformation matrix */
- p = ILoc( S, 1, 0);
- QueryLoc(p, IDENTITY, &xp, &yp);
- up = FABS(xp);
-
- size = scxx * 1000.0;
+
+ if ( decodeonly == 0 ) {
+ QuerySpace( S, &scxx, &scyx, &scxy, &scyy); /* Transformation matrix */
+ p = ILoc( S, 1, 0);
+ QueryLoc(p, IDENTITY, &xp, &yp);
+ up = FABS(xp);
+
+ size = scxx * 1000.0;
#ifdef DUMPDEBUGPATH
- sprintf( fnbuf, "t1dump_%s_%f.eps", charname, size);
- psfile = fopen( fnbuf, "wb");
- if ( psfile != NULL ) {
- PSDumpProlog( psfile);
- fprintf( psfile, "T1LibDict begin\n\ngsave\n%f t1SetupSize\nt1PreparePage\n", size);
- }
-
+ sprintf( fnbuf, "t1dump_%s_%f.eps", charname, size);
+ psfile = fopen( fnbuf, "wb");
+ if ( psfile != NULL ) {
+ PSDumpProlog( psfile);
+ fprintf( psfile, "T1LibDict begin\n\ngsave\n%f t1SetupSize\nt1PreparePage\n", size);
+ }
#endif
+ }
/* compute the alignment zones */
SetRasterFlags();
@@ -2475,13 +2488,17 @@ struct xobject *Type1Char(psfont *env, struct XYspace *S,
wsoffsetX = wsoffsetY = 0; /* No shift to preserve whitspace. */
wsset = 0; /* wsoffsetX,Y haven't been set yet. */
-
for (;;) {
if (!DoRead(&Code)) break;
Decode(Code);
if (errflag) break;
}
+ if ( decodeonly != 0 ) {
+ /* OK, character description is now on stack, finish ... */
+ return NULL;
+ }
+
/* We now have a point list in absolute charspace coordinates. Adjust
non-hinted points to suppress hinting artifacts and generate path. */
for ( i=0; i<numppoints; i++ ) {
@@ -2687,14 +2704,14 @@ static void handleCurrentSegment( long pindex)
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1rmoveto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1rmoveto %% pindex = %ld\n", dx1*up, dy1*up, pindex);
#endif
if ( ProcessHints ) {
IfTrace2((FontDebug), "RMoveTo(h) %f %f\n", adx1, ady1);
B = Loc(CharSpace, adx1, ady1);
#ifdef DUMPDEBUGPATH
if ( psfile != NULL ) {
- fprintf( psfile, "%f %f t1hintedrmoveto\n", adx1*up, ady1*up);
+ fprintf( psfile, "%f %f t1hintedrmoveto %% pindex = %ld\n", adx1*up, ady1*up, pindex);
}
#endif
}
@@ -2715,14 +2732,14 @@ static void handleCurrentSegment( long pindex)
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1rlineto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1rlineto %% pindex = %ld\n", dx1*up, dy1*up, pindex);
#endif
if ( ProcessHints ) {
IfTrace2((FontDebug), "RLineTo(h) %f %f\n", adx1, ady1);
B = Loc(CharSpace, adx1, ady1);
#ifdef DUMPDEBUGPATH
if ( psfile != NULL ) {
- fprintf( psfile, "%f %f t1hintedrlineto\n", adx1*up, ady1*up);
+ fprintf( psfile, "%f %f t1hintedrlineto %% pindex = %ld\n", adx1*up, ady1*up, pindex);
}
#endif
}
@@ -2752,10 +2769,11 @@ static void handleCurrentSegment( long pindex)
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f %f %f %f %f t1rrcurveto\n",
+ fprintf( psfile, "%f %f %f %f %f %f t1rrcurveto %% pindex = %ld\n",
dx1*up, dy1*up,
dx2*up, dy2*up,
- dx3*up, dy3*up);
+ dx3*up, dy3*up,
+ pindex);
#endif
if (ProcessHints) {
IfTrace4((FontDebug), "RRCurveTo %f %f %f %f ",
@@ -2766,10 +2784,11 @@ static void handleCurrentSegment( long pindex)
D = Loc(CharSpace, adx3, ady3);
#ifdef DUMPDEBUGPATH
if ( psfile != NULL ) {
- fprintf( psfile, "%f %f %f %f %f %f t1hintedrrcurveto\n",
+ fprintf( psfile, "%f %f %f %f %f %f t1hintedrrcurveto %% pindex = %ld\n",
adx1*up, ady1*up,
adx2*up, ady2*up,
- adx3*up, ady3*up);
+ adx3*up, ady3*up,
+ pindex);
}
#endif
}
@@ -2784,18 +2803,19 @@ static void handleCurrentSegment( long pindex)
/* Since XIMAGER is not completely relative, */
/* we need to add up the delta values */
- C = Join(C, Dup(B));
- D = Join(D, Dup(C));
- path = Join(path, Bezier(B, C, D));
+ C = Join(C, (struct segment *)Dup(B));
+ D = Join(D, (struct segment *)Dup(C));
+ path = Join(path, (struct segment *)Bezier(B, C, D));
break;
case PPOINT_SBW:
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f %f %f t1sbw\n",
+ fprintf( psfile, "%f %f %f %f t1sbw %% pindex = %ld\n",
ppoints[pindex].x*up, ppoints[pindex].y*up, /* sidebearings */
- ppoints[pindex].ax*up, ppoints[pindex].ay*up /* escapements */
+ ppoints[pindex].ax*up, ppoints[pindex].ay*up, /* escapements */
+ pindex
);
#endif
path = Join(path, Loc(CharSpace, ppoints[pindex].x, ppoints[pindex].y));
@@ -2806,9 +2826,9 @@ static void handleCurrentSegment( long pindex)
IfTrace0((FontDebug), "DoClosePath\n");
#ifdef DUMPDEBUGPATH
if ( psfile != NULL ) {
- fprintf( psfile, "t1closepath\n");
+ fprintf( psfile, "t1closepath %% pindex = %ld\n", pindex);
if ( ProcessHints )
- fprintf( psfile, "t1hintedclosepath\n");
+ fprintf( psfile, "t1hintedclosepath %% pindex = %ld\n", pindex);
}
#endif
@@ -2828,7 +2848,7 @@ static void handleCurrentSegment( long pindex)
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fputs( "t1FinishPage\ngrestore\n", psfile);
+ fprintf( psfile, "t1FinishPage\ngrestore %% pindex = %ld\n", pindex);
#endif
break;
@@ -2896,6 +2916,10 @@ static void createStrokePath( double strokewidth, int subpathclosed)
one path interior and one path exterior to the path under consideration in
a way, that the resulting thick curve has a thickness of strokewidth. */
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, "\ncreateStrokePath(strokewidth=%f, subpathclosed=%d): Searching partial paths ...\n\n",
+ strokewidth, subpathclosed);
+#endif
if ( subpathclosed == 0 ) {
/* We have a stroked font */
/* loop through all subpaths */
@@ -3049,6 +3073,15 @@ static void createClosedStrokeSubPath( long startind, long stopind,
closepathatfirst = 0;
}
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ if ( closepathatfirst == 1 ) {
+ fprintf( stderr, "createClosedStrokeSubPath(): Starting up, ClosePath is at first PPoint (does not cause a line segment) ...\n");
+ }
+ else {
+ fprintf( stderr, "createClosedStrokeSubPath(): Starting up, ClosePath is not at first PPoint (causes a closing line segment) ...\n");
+ }
+#endif
+
/* For each path point in the list, we have to define a set of points, to the
left and to the right of the current curve. The positions of these
@@ -3059,12 +3092,15 @@ static void createClosedStrokeSubPath( long startind, long stopind,
and lines to the neighbouring points is required. We start by calculating
these and by filling in the path point entries dist2prev and dist2next for
the respective points. */
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, "Computing geometric distances between path points ...\n");
+#endif
lastind = computeDistances( startind, stopind, subpathclosed);
-
#ifdef DEBUG_OUTLINE_SURROUNDING
fprintf( stderr, "startind=%ld, lastind=%ld, stopind=%ld\n", startind, lastind, stopind);
#endif
+
/********************************************************************************
********************************************************************************
*****
@@ -3076,6 +3112,9 @@ static void createClosedStrokeSubPath( long startind, long stopind,
/* Next we step through the path points of the current subpath and compute the
points' transformations. From these newly computed points,
the path is constructed. */
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, "Computing geometric transformation points and resulting intersection points for right path ...\n\n");
+#endif
for ( i=startind; i<=lastind; ) {
/* Be aware of cycling! */
if ( i == startind ) {
@@ -3118,16 +3157,15 @@ static void createClosedStrokeSubPath( long startind, long stopind,
}
#ifdef DEBUG_OUTLINE_SURROUNDING
- fprintf( stderr, "PP %ld (%s): (%f,%f), shape=%s;\n", i, pptypes[ppoints[i].type],
+ fprintf( stderr, "\nCurrent PathPoint: PP %ld (%s): (%f,%f), shape=%s;\n", i, pptypes[ppoints[i].type],
ppoints[i].x, ppoints[i].y, ppshapes[ppoints[i].shape]);
- fprintf( stderr, " Right: prev (%f,%f); next (%f,%f)\n",
+ fprintf( stderr, " RightPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n",
ppoints[i].x+ppoints[i].dxpr, ppoints[i].y+ppoints[i].dypr,
- ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr);
- fprintf( stderr, " Left: prev (%f,%f); next (%f,%f)\n",
+ ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr,
+ ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir);
+ fprintf( stderr, " LeftPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n\n",
ppoints[i].x-ppoints[i].dxpr, ppoints[i].y-ppoints[i].dypr,
- ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr);
- fprintf( stderr, " Res: Right (%f,%f); Left (%f,%f)\n\n",
- ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir,
+ ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr,
ppoints[i].x-ppoints[i].dxir, ppoints[i].y-ppoints[i].dyir);
#endif
@@ -3150,17 +3188,15 @@ static void createClosedStrokeSubPath( long startind, long stopind,
}
#ifdef DEBUG_OUTLINE_SURROUNDING
- fprintf( stderr, "PP %ld (%s): (%f,%f), shape=%s; \n",
- i, pptypes[ppoints[i].type], ppoints[i].x, ppoints[i].y,
- ppshapes[ppoints[i].shape]);
- fprintf( stderr, " Right: prev (%f,%f); next (%f,%f)\n",
+ fprintf( stderr, "\nCurrent PathPoint: PP %ld (%s): (%f,%f), shape=%s;\n", i, pptypes[ppoints[i].type],
+ ppoints[i].x, ppoints[i].y, ppshapes[ppoints[i].shape]);
+ fprintf( stderr, " RightPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n",
ppoints[i].x+ppoints[i].dxpr, ppoints[i].y+ppoints[i].dypr,
- ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr);
- fprintf( stderr, " Left: prev (%f,%f); next (%f,%f)\n",
+ ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr,
+ ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir);
+ fprintf( stderr, " LeftPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n\n",
ppoints[i].x-ppoints[i].dxpr, ppoints[i].y-ppoints[i].dypr,
- ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr);
- fprintf( stderr, " Res: Right (%f,%f); Left (%f,%f)\n\n",
- ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir,
+ ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr,
ppoints[i].x-ppoints[i].dxir, ppoints[i].y-ppoints[i].dyir);
#endif
@@ -3189,17 +3225,15 @@ static void createClosedStrokeSubPath( long startind, long stopind,
}
#ifdef DEBUG_OUTLINE_SURROUNDING
- fprintf( stderr, "PP %ld (%s): (%f,%f), shape=%s;\n",
- i, pptypes[ppoints[i].type], ppoints[i].x, ppoints[i].y,
- ppshapes[ppoints[i].shape]);
- fprintf( stderr, " Right: prev (%f,%f); next (%f,%f)\n",
+ fprintf( stderr, "\nCurrent PathPoint: PP %ld (%s): (%f,%f), shape=%s;\n", i, pptypes[ppoints[i].type],
+ ppoints[i].x, ppoints[i].y, ppshapes[ppoints[i].shape]);
+ fprintf( stderr, " RightPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n",
ppoints[i].x+ppoints[i].dxpr, ppoints[i].y+ppoints[i].dypr,
- ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr);
- fprintf( stderr, " Left: prev (%f,%f); next (%f,%f)\n",
+ ppoints[i].x+ppoints[i].dxnr, ppoints[i].y+ppoints[i].dynr,
+ ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir);
+ fprintf( stderr, " LeftPath: prev (%f,%f); next (%f,%f); res (%f,%f)\n\n",
ppoints[i].x-ppoints[i].dxpr, ppoints[i].y-ppoints[i].dypr,
- ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr);
- fprintf( stderr, " Res: Right (%f,%f); Left (%f,%f)\n\n",
- ppoints[i].x+ppoints[i].dxir, ppoints[i].y+ppoints[i].dyir,
+ ppoints[i].x-ppoints[i].dxnr, ppoints[i].y-ppoints[i].dynr,
ppoints[i].x-ppoints[i].dxir, ppoints[i].y-ppoints[i].dyir);
#endif
@@ -3236,6 +3270,9 @@ static void createClosedStrokeSubPath( long startind, long stopind,
}
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, "\nTransformation of PathPoints finished. Starting to construct paths ...\n\n");
+#endif
/* We now have computed the resulting shift values for each path point of the current
subpath's right path. The values for the left path follow by negation.
@@ -3268,7 +3305,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srmoveto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1srmoveto %% pindex = %ld\n", dx1*up, dy1*up, startind);
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, B);
@@ -3291,7 +3328,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
dy1 = ppoints[i].y + ppoints[i].dypr - (ppoints[i-1].y + ppoints[i-1].dynr);
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srlineto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, i);
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, Line(B));
@@ -3325,10 +3362,11 @@ static void createClosedStrokeSubPath( long startind, long stopind,
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f %f %f %f %f t1srrcurveto\n",
+ fprintf( psfile, "%f %f %f %f %f %f t1srrcurveto %% pindex = %ld\n",
dx1*up, dy1*up,
dx2*up, dy2*up,
- dx3*up, dy3*up);
+ dx3*up, dy3*up,
+ i);
#endif
IfTrace4((FontDebug), "RRCurveTo %f %f %f %f ",
dx1, dy1, dx2, dy2);
@@ -3337,9 +3375,9 @@ static void createClosedStrokeSubPath( long startind, long stopind,
C = Loc(CharSpace, dx2, dy2);
D = Loc(CharSpace, dx3, dy3);
- C = Join(C, Dup(B));
- D = Join(D, Dup(C));
- path = Join(path, Bezier(B, C, D));
+ C = Join(C, (struct segment *)Dup(B));
+ D = Join(D, (struct segment *)Dup(C));
+ path = Join(path, (struct segment *)Bezier(B, C, D));
/* 3. Check and handle starting node */
linkNode( i, PATH_END, PATH_RIGHT);
@@ -3384,7 +3422,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
dy1 = ppoints[startind].y + ppoints[startind].dypr - (ppoints[lastind].y + ppoints[lastind].dynr);
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srlineto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, startind);
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, Line(B));
@@ -3397,7 +3435,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
/* Now close path formally. Anyhow, this won't cause a line segment! */
#ifdef DUMPDEBUGPATH
if ( psfile != NULL ) {
- fprintf( psfile, "t1sclosepath\n");
+ fprintf( psfile, "t1sclosepath %% Right Path finished, stepping to Left Path\n");
}
#endif
tmpseg = Phantom(path);
@@ -3434,7 +3472,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srmoveto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1srmoveto %% pindex = %ld\n", dx1*up, dy1*up, startind);
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, B);
@@ -3453,7 +3491,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srlineto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, stopind);
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, Line(B));
@@ -3537,7 +3575,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
(ppoints[segstartind].y - ppoints[segstartind].dypr);
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srlineto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1srlineto %% pindex = %ld\n", dx1*up, dy1*up, segendind);
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, Line(B));
@@ -3580,10 +3618,11 @@ static void createClosedStrokeSubPath( long startind, long stopind,
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f %f %f %f %f t1srrcurveto\n",
+ fprintf( psfile, "%f %f %f %f %f %f t1srrcurveto %% pindex = %ld\n",
dx1*up, dy1*up,
dx2*up, dy2*up,
- dx3*up, dy3*up);
+ dx3*up, dy3*up,
+ i);
#endif
IfTrace4((FontDebug), "RRCurveTo %f %f %f %f ",
dx1, dy1, dx2, dy2);
@@ -3592,9 +3631,9 @@ static void createClosedStrokeSubPath( long startind, long stopind,
C = Loc(CharSpace, dx2, dy2);
D = Loc(CharSpace, dx3, dy3);
- C = Join(C, Dup(B));
- D = Join(D, Dup(C));
- path = Join(path, Bezier(B, C, D));
+ C = Join(C, (struct segment *)Dup(B));
+ D = Join(D, (struct segment *)Dup(C));
+ path = Join(path, (struct segment *)Bezier(B, C, D));
/* 3. Check and handle ending node */
linkNode( ip-3, PATH_END, PATH_LEFT);
@@ -3629,8 +3668,16 @@ static void createClosedStrokeSubPath( long startind, long stopind,
}
#ifdef DUMPDEBUGPATH
- if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srlineto\n", dx1*up, dy1*up);
+ if ( psfile != NULL ) {
+ if ( subpathclosed != 0 ) {
+ fprintf( psfile, "%f %f t1srlineto %% (Inverted ClosePath, subpathclosed=1) pindex = %ld\n",
+ dx1*up, dy1*up, lastind);
+ }
+ else {
+ fprintf( psfile, "%f %f t1srlineto %% (Inverted ClosePath, subpathclosed=0) pindex = %ld\n",
+ dx1*up, dy1*up, i);
+ }
+ }
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, Line(B));
@@ -3689,7 +3736,7 @@ static void createClosedStrokeSubPath( long startind, long stopind,
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1srmoveto\n", dx1*up, dy1*up);
+ fprintf( psfile, "%f %f t1srmoveto %% pindex = %ld\n", dx1*up, dy1*up, lastind);
#endif
B = Loc(CharSpace, dx1, dy1);
path = Join(path, B);
@@ -3836,9 +3883,10 @@ static long handleNonSubPathSegments( long pindex)
case PPOINT_SBW:
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f %f %f t1sbw\n",
+ fprintf( psfile, "%f %f %f %f t1sbw %% pindex = %ld\n",
ppoints[pindex].x*up, ppoints[pindex].y*up, /* sidebearings */
- ppoints[pindex].ax*up, ppoints[pindex].ay*up /* escapements */
+ ppoints[pindex].ax*up, ppoints[pindex].ay*up, /* escapements */
+ pindex
);
#endif
path = Join(path, Loc(CharSpace, ppoints[pindex].x, ppoints[pindex].y));
@@ -3994,10 +4042,13 @@ static void transformOnCurvePathPoint( double strokewidth,
Anyways, I have never seen such fonts.
This function is called for Bezier_B points and computes displacements for the B
- and C points at once. Fortunately, index cycling cannot happen here.
+ and C points at once. Fortunately, index cycling cannot happen here. When
+ computing the B' C' off-curve points, special care against numerical instability
+ is required. We assume that at least one of the two points can be computed
+ in a stable way.
The new Bezier B' and C' points can be considered as four degrees of freedom and we have
- to find 4 equations to be able to compute them.
+ to find 4 equations to be able to compute them.
1) We require the tangents slope at point A' to be identical to the slope at the
point A of the ideally thin mathematical curve.
@@ -4030,6 +4081,7 @@ static void transformOnCurvePathPoint( double strokewidth,
*/
static void transformOffCurvePathPoint( double strokewidth, long currind)
{
+ double dtmp;
double diameter;
double dx;
double dy;
@@ -4169,10 +4221,12 @@ static void transformOffCurvePathPoint( double strokewidth, long currind)
fprintf( stderr, "transformOffCurvePathPoint():\n");
fprintf( stderr, " A=(%f,%f), B=(%f,%f), C=(%f,%f), D=(%f,%f)\n",
pax, pay, pbx, pby, pcx, pcy, pdx, pdy);
- fprintf( stderr, "%% DebugInfo: Curve from PP %ld ... PP %ld ... PP %ld ... PP %ld. StrokeWidth=%f.\n",
+ fprintf( stderr, " PathInfo: Curve from PP %ld ... PP %ld ... PP %ld ... PP %ld. StrokeWidth=%f.\n",
currind-1, currind, currind+1, currind+2, strokewidth);
+ /*
fprintf( stderr, "/xa %f def\n/ya %f def\n/xb %f def\n/yb %f def\n/xc %f def\n/yc %f def\n/xd %f def\n/yd %f def\n",
pax, pay, pbx, pby, pcx, pcy, pdx, pdy);
+ */
fprintf( stderr, " As=(%f,%f), Ds=(%f,%f)\n",
paxs, pays, pdxs, pdys);
fprintf( stderr, " p6=(%f,%f)\n", p6x, p6y);
@@ -4190,6 +4244,45 @@ static void transformOffCurvePathPoint( double strokewidth, long currind)
bdir2x = pbx - pax;
bdir2y = pby - pay;
bdet = (bdir2x * bdir1y) - (bdir2y * bdir1x);
+
+#define DET_QUOTIENT_UPPER_THRESHOLD (1.05)
+#define DET_QUOTIENT_LOWER_THRESHOLD (1.0/DET_QUOTIENT_UPPER_THRESHOLD)
+
+ /* Life has shown, that the "reliability" of the determinant has to be
+ ensured. Otherwise, serious distortions might be introduced.
+ In order to ensure numerical stability, we do not only check whether
+ the detrminant is about zero, but we also check whether the two partial
+ expressions that are subtracted when computing the determinant are of
+ about the same size. If this is the case, we explicitly reset the
+ determinant and eventually compute this off-curve point based on the
+ other off-curve point later. */
+ if ( (bdir2x != 0.0) && (bdir1y != 0.0) ) {
+ dtmp = (bdir2y*bdir1x)/(bdir2x*bdir1y);
+ if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) &&
+ (DET_QUOTIENT_UPPER_THRESHOLD > dtmp)
+ ) {
+ /* Determinant appears to be unreliable, reset it exactly to zero. */
+ bdet = 0.0;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Determinant quotient check for bdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n",
+ dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD);
+#endif
+ }
+ }
+ else if ( (bdir2y != 0.0) && (bdir1x != 0.0) ) {
+ dtmp = (bdir2x*bdir1y)/(bdir2y*bdir1x);
+ if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) &&
+ (DET_QUOTIENT_UPPER_THRESHOLD > dtmp)
+ ) {
+ /* Determinant appears to be unreliable, reset it exactly to zero. */
+ bdet = 0.0;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Determinant quotient check for bdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n",
+ dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD);
+#endif
+ }
+ }
+
#ifdef DEBUG_OUTLINE_SURROUNDING
fprintf( stderr, " bloc1x=%f, bloc1y=%f, bloc2x,=%f bloc2y=%f\n",
@@ -4204,6 +4297,10 @@ static void transformOffCurvePathPoint( double strokewidth, long currind)
pbys = pby + ny;
bmu = 0.0;
bnu = 0.0;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Determinant check for bdet failed: bdet=%16.16f. Computing Bs based on normal vector, resetting bmu, bnu.\n",
+ bdet);
+#endif
}
else {
/* Calculate required part of inverse matrix */
@@ -4233,6 +4330,41 @@ static void transformOffCurvePathPoint( double strokewidth, long currind)
cdir2y = pcy - pdy;
cdet = (cdir2x * cdir1y) - (cdir2y * cdir1x);
+ /* Life has shown, that the "reliability" of the determinant has to be
+ ensured. Otherwise, serious distortions might be introduced.
+ In order to ensure numerical stability, we do not only check whether
+ the detrminant is about zero, but we also check whether the two partial
+ expressions that are subtracted when computing the determinant are of
+ about the same size. If this is the case, we explicitly reset the
+ determinant and eventually compute this off-curve point based on the
+ other off-curve point later. */
+ if ( (cdir2x != 0.0) && (cdir1y != 0.0) ) {
+ dtmp = (cdir2y*cdir1x)/(cdir2x*cdir1y);
+ if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) &&
+ (DET_QUOTIENT_UPPER_THRESHOLD > dtmp)
+ ) {
+ /* Determinant appears to be unreliable, reset it exactly to zero. */
+ cdet = 0.0;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Determinant quotient check for cdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n",
+ dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD);
+#endif
+ }
+ }
+ else if ( (cdir2y != 0.0) && (cdir1x != 0.0) ) {
+ dtmp = (cdir2x*cdir1y)/(cdir2y*cdir1x);
+ if ( (DET_QUOTIENT_LOWER_THRESHOLD < dtmp) &&
+ (DET_QUOTIENT_UPPER_THRESHOLD > dtmp)
+ ) {
+ /* Determinant appears to be unreliable, reset it exactly to zero. */
+ cdet = 0.0;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Determinant quotient check for cdet failed: dtmp=%16.16f, lower limit=%f, upper limit=%f.\n --> Determinant does not seem to be stable, resetting to zero.\n",
+ dtmp, DET_QUOTIENT_LOWER_THRESHOLD, DET_QUOTIENT_UPPER_THRESHOLD);
+#endif
+ }
+ }
+
#ifdef DEBUG_OUTLINE_SURROUNDING
fprintf( stderr, " cloc1x=%f, cloc1y=%f, cloc2x,=%f cloc2y=%f\n",
cloc1x, cloc1y, cloc2x, cloc2y);
@@ -4246,6 +4378,10 @@ static void transformOffCurvePathPoint( double strokewidth, long currind)
pcys = pcy + ny;
cmu = 0.0;
cnu = 0.0;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Determinant check for cdet failed: cdet=%16.16f. Computing Cs based on normal vector, resetting cmu, cnu.\n",
+ cdet);
+#endif
}
else {
/* Calculate required part of inverse matrix */
@@ -4272,13 +4408,21 @@ static void transformOffCurvePathPoint( double strokewidth, long currind)
/* Analyse coefficients and decide on numerical stability. If suggesting,
overwrite, using another relation. Here, we assume that at least the
solution at *one* end of the curve is stable. */
- if ( bmu < 0.1 ) {
+ if ( fabs(bmu) < 0.1 ) {
pbxs = ((8 * (nx + p6x) - paxs - pdxs) / 3.0) - pcxs;
pbys = ((8 * (ny + p6y) - pays - pdys) / 3.0) - pcys;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Coefficient check for bmu failed: bmu=%16.16f. Computing Bs based on Cs.\n",
+ bmu);
+#endif
}
- if ( cmu < 0.1 ) {
+ if ( fabs(cmu) < 0.1 ) {
pcxs = ((8 * (nx + p6x) - paxs - pdxs) / 3.0) - pbxs;
pcys = ((8 * (ny + p6y) - pays - pdys) / 3.0) - pbys;
+#ifdef DEBUG_OUTLINE_SURROUNDING
+ fprintf( stderr, " Warning: Coefficient check for cmu failed: cmu=%16.16f. Computing Cs based on Bs.\n",
+ cmu);
+#endif
}
@@ -4290,6 +4434,10 @@ static void transformOffCurvePathPoint( double strokewidth, long currind)
pbx, pbxs, pbxs-pbx, pby, pbys, pbys-pby);
fprintf( stderr, " pcx=%f, pcxs=%f, cxshift=%f, pcy=%f, pcys=%f, cyshift=%f\n",
pcx, pcxs, pcxs-pcx, pcy, pcys, pcys-pcy);
+ fprintf( stderr, " Summary: A =(%f,%f), B =(%f,%f), C =(%f,%f), D =(%f,%f)\n",
+ pax, pay, pbx, pby, pcx, pcy, pdx, pdy);
+ fprintf( stderr, " As=(%f,%f), Bs=(%f,%f), Cs=(%f,%f), Ds=(%f,%f)\n\n",
+ paxs, pays, pbxs, pbys, pcxs, pcys, pdxs, pdys);
#endif
ppoints[currind].dxir = pbxs - pbx;
ppoints[currind].dyir = pbys - pby;
@@ -4315,7 +4463,7 @@ static void intersectRight( long index, double halfwidth, long flag)
prolongations at the path point under consideration, we use
the Hesse Normal Form, multiplied with r.
- dx * x + dy + y + r^2 = 0
+ dx * x + dy * y + r^2 = 0
Here, r is the distance from the origin, that is, from the path point
under consideration. */
@@ -4349,31 +4497,42 @@ static void intersectRight( long index, double halfwidth, long flag)
and also must touch at atleast one location,
so that there are an infinite number of solutions. In this case,
we compute the average position and are done. */
- if ( (det = ((dyprev * dxnext) - (dynext * dxprev))) == 0.0 ) {
+ if ( fabs( (det = ((dyprev * dxnext) - (dynext * dxprev))) ) < 0.00001 ) {
ppoints[index].dxir = 0.5 * (dxprev + dxnext);
ppoints[index].dyir = 0.5 * (dyprev + dynext);
#ifdef DEBUG_OUTLINE_SURROUNDING
- fprintf( stderr, "intersectRight(0): dxprev=%f, dxnext=%f, dxres=%f, dyprev=%f, dynext=%f, dyres=%f\n",
- dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir);
+ fprintf( stderr, "intersectRight(0):\n dxprev=%f, dxnext=%f, dxres=%f,\n dyprev=%f, dynext=%f, dyres=%f,\n det=%16.16f\n",
+ dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir, det);
+ fprintf( stderr, " --> Computation based on averaging [dxprev,dyprev] and [dxnext,dynext]\n");
+ fprintf( stderr, " Right intersection point shift: (%f,%f), absolute shift length: %f.\n\n",
+ ppoints[index].dxir, ppoints[index].dyir,
+ sqrt(ppoints[index].dxir*ppoints[index].dxir + ppoints[index].dyir*ppoints[index].dyir));
#endif
return;
}
-
/* OK, there seems to be a unique solution, compute it */
if ( dxprev != 0.0 ) {
ppoints[index].dyir = r2 * (dxnext - dxprev) / det;
ppoints[index].dxir = (r2 - (dyprev * ppoints[index].dyir)) / dxprev; /* - ? */
#ifdef DEBUG_OUTLINE_SURROUNDING
- fprintf( stderr, "intersectRight(1): dxprev=%f, dxnext=%f, dxres=%f, dyprev=%f, dynext=%f, dyres=%f\n",
- dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir);
+ fprintf( stderr, "intersectRight(1):\n dxprev=%f, dxnext=%f, dxres=%f,\n dyprev=%f, dynext=%f, dyres=%f,\n det=%16.16f\n",
+ dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir, det);
+ fprintf( stderr, " --> Computation based on previous path point.\n");
+ fprintf( stderr, " Right intersection point shift: (%f,%f), absolute shift length: %f.\n\n",
+ ppoints[index].dxir, ppoints[index].dyir,
+ sqrt(ppoints[index].dxir*ppoints[index].dxir + ppoints[index].dyir*ppoints[index].dyir));
#endif
}
else {
ppoints[index].dyir = -r2 * (dxprev - dxnext) / det;
ppoints[index].dxir = (r2 - (dynext * ppoints[index].dyir)) / dxnext; /* - ? */
#ifdef DEBUG_OUTLINE_SURROUNDING
- fprintf( stderr, "intersectRight(2): dxprev=%f, dxnext=%f, dxres=%f, dyprev=%f, dynext=%f, dyres=%f\n",
- dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir);
+ fprintf( stderr, "intersectRight(2):\n dxprev=%f, dxnext=%f, dxres=%f,\n dyprev=%f, dynext=%f, dyres=%f,\n det=%16.16f\n",
+ dxprev, dxnext, ppoints[index].dxir, dyprev, dynext, ppoints[index].dyir, det);
+ fprintf( stderr, " --> Computation based on next path point.\n");
+ fprintf( stderr, " Right intersection point shift: (%f,%f), absolute shift length: %f.\n\n",
+ ppoints[index].dxir, ppoints[index].dyir,
+ sqrt(ppoints[index].dxir*ppoints[index].dxir + ppoints[index].dyir*ppoints[index].dyir));
#endif
}
@@ -4400,7 +4559,7 @@ static void linkNode( long index, int position, int orientation)
dx = ppoints[index].dxnr;
dy = ppoints[index].dynr;
#ifdef DEBUG_OUTLINE_SURROUNDING
- fprintf( stderr, " Right Path Concave at PP %ld. Prolongation from onCurve to ideal: (%f,%f)\n",
+ fprintf( stderr, "RP: Concave at PP %ld. Prolongation from onCurve to ideal: (%f,%f)\n",
index, dx, dy);
#endif
}
@@ -4491,7 +4650,7 @@ static void linkNode( long index, int position, int orientation)
if ( (dx != 0.0) || (dy != 0.0) ) {
#ifdef DUMPDEBUGPATH
if ( psfile != NULL )
- fprintf( psfile, "%f %f t1sprolongate\n", dx*up, dy*up);
+ fprintf( psfile, "%f %f t1sprolongate %% pindex = %ld\n", dx*up, dy*up, index);
#endif
B = Loc( CharSpace, dx, dy);
path = Join(path, Line(B));
@@ -4500,3 +4659,18 @@ static void linkNode( long index, int position, int orientation)
return;
}
+
+
+int T1int_Type1QuerySEAC( unsigned char* base,
+ unsigned char* accent)
+{
+ if ( isseac == 0 ) {
+ return 0;
+ }
+
+ *base = seacbase;
+ *accent = seacaccent;
+
+ return isseac;
+}
+
diff --git a/Build/source/libs/type1/types.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/types.h
index aa13d94ee61..aa13d94ee61 100644
--- a/Build/source/libs/type1/types.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/types.h
diff --git a/Build/source/libs/type1/util.c b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/util.c
index e02a8d5c2bb..e02a8d5c2bb 100644
--- a/Build/source/libs/type1/util.c
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/util.c
diff --git a/Build/source/libs/type1/util.h b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/util.h
index 76a8affc03a..76a8affc03a 100644
--- a/Build/source/libs/type1/util.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/lib/type1/util.h
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/README.RMz b/Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/README.RMz
new file mode 100644
index 00000000000..ae7ece16740
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/README.RMz
@@ -0,0 +1,9 @@
+Dear Folks,
+
+this directory contains the shell-archive with the parseAFM-package by
+Adobe Systems Inc. The shell archive is only located here for
+completeness. The files used by the t1-library (parseAFM.c,
+parseAFM.h) have been extracted and copied to the t1lib-subdirectory.
+Thus, no make is done in this directory.
+
+ (08/11/1996, RMz)
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/parseAFM.shar b/Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/parseAFM.shar
new file mode 100644
index 00000000000..6eb3f7155a8
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/parse_afm/parseAFM.shar
@@ -0,0 +1,2059 @@
+#!/bin/sh
+# This is a shell archive (produced by GNU sharutils 4.1.6).
+# To extract the files from this archive, save it to some FILE, remove
+# everything before the `!/bin/sh' line above, then type `sh FILE'.
+#
+# Made on 1996-10-25 16:19 EDT by <rainer@mman>.
+# Source directory was `/usr/home/rainer/src/T1/parse_afm'.
+#
+# Existing files will *not* be overwritten unless `-c' is specified.
+#
+# This shar contains:
+# length mode name
+# ------ ---------- ------------------------------------------
+# 280 -rw-r--r-- makefile
+# 43280 -rw-r--r-- parseAFM.c
+# 11502 -rw-r--r-- parseAFM.h
+# 12210 -rw-r--r-- parseAFMclient.c
+#
+save_IFS=${IFS}
+IFS="${IFS}:"
+gettext_dir=FAILED
+locale_dir=FAILED
+for dir in $PATH
+do
+ if test "$gettext_dir" = "FAILED" && test -f $dir/gettext \
+ && ($dir/gettext --version >/dev/null 2>&1)
+ then
+ set `$dir/gettext --version 2>&1`
+ if test "$3" = "GNU"
+ then
+ gettext_dir=$dir
+ fi
+ fi
+ if test "$locale_dir" = "FAILED" && test -f $dir/shar \
+ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
+ then
+ locale_dir=`$dir/shar --print-text-domain-dir`
+ fi
+done
+IFS=$save_IFS
+if test "$locale_dir" = "FAILED" || test "$gettext_dir" = "FAILED"
+then
+ echo=echo
+else
+ TEXTDOMAINDIR=$locale_dir
+ export TEXTDOMAINDIR
+ TEXTDOMAIN=sharutils
+ export TEXTDOMAIN
+ echo="$gettext_dir/gettext --shell-script"
+fi
+touch -am 1231235999 $$.touch >/dev/null 2>&1
+if test ! -f 1231235999 && test -f $$.touch; then
+ shar_touch=touch
+else
+ shar_touch=:
+ echo
+ $echo 'WARNING: not restoring timestamps. Consider getting and'
+ $echo "installing GNU \`touch', distributed in GNU File Utilities..."
+ echo
+fi
+rm -f 1231235999 $$.touch
+#
+if mkdir _sh00599; then
+ $echo 'x -' 'creating lock directory'
+else
+ $echo 'failed to create lock directory'
+ exit 1
+fi
+# ============= makefile ==============
+if test -f 'makefile' && test X"$1" != X"-c"; then
+ $echo 'x -' SKIPPING 'makefile' '(file already exists)'
+else
+ $echo 'x -' extracting 'makefile' '(text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'makefile' &&
+X
+parseAFM: parseAFM.o parseAFMclient.o makefile
+X cc -g -o parseAFM parseAFM.o parseAFMclient.o -lm;\
+X shar makefile parseAFM.c parseAFM.h parseAFMclient.c > parseAFM.shar
+X
+parseAFMclient.o: parseAFMclient.c
+X cc -g -c parseAFMclient.c
+X
+parseAFM.o: parseAFM.c
+X cc -g -c parseAFM.c
+X
+SHAR_EOF
+ $shar_touch -am 1018085596 'makefile' &&
+ chmod 0644 'makefile' ||
+ $echo 'restore of' 'makefile' 'failed'
+ shar_count="`wc -c < 'makefile'`"
+ test 280 -eq "$shar_count" ||
+ $echo 'makefile:' 'original size' '280,' 'current size' "$shar_count"
+fi
+# ============= parseAFM.c ==============
+if test -f 'parseAFM.c' && test X"$1" != X"-c"; then
+ $echo 'x -' SKIPPING 'parseAFM.c' '(file already exists)'
+else
+ $echo 'x -' extracting 'parseAFM.c' '(text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'parseAFM.c' &&
+/*
+X * (C) 1988, 1989, 1990 by Adobe Systems Incorporated. All rights reserved.
+X *
+X * This file may be freely copied and redistributed as long as:
+X * 1) This entire notice continues to be included in the file,
+X * 2) If the file has been modified in any way, a notice of such
+X * modification is conspicuously indicated.
+X *
+X * PostScript, Display PostScript, and Adobe are registered trademarks of
+X * Adobe Systems Incorporated.
+X *
+X * ************************************************************************
+X * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
+X * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
+X * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
+X * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
+X * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
+X * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
+X * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+X * ************************************************************************
+X */
+X
+/* parseAFM.c
+X *
+X * This file is used in conjuction with the parseAFM.h header file.
+X * This file contains several procedures that are used to parse AFM
+X * files. It is intended to work with an application program that needs
+X * font metric information. The program can be used as is by making a
+X * procedure call to "parseFile" (passing in the expected parameters)
+X * and having it fill in a data structure with the data from the
+X * AFM file, or an application developer may wish to customize this
+X * code.
+X *
+X * There is also a file, parseAFMclient.c, that is a sample application
+X * showing how to call the "parseFile" procedure and how to use the data
+X * after "parseFile" has returned.
+X *
+X * Please read the comments in parseAFM.h and parseAFMclient.c.
+X *
+X * History:
+X * original: DSM Thu Oct 20 17:39:59 PDT 1988
+X * modified: DSM Mon Jul 3 14:17:50 PDT 1989
+X * - added 'storageProblem' return code
+X * - fixed bug of not allocating extra byte for string duplication
+X * - fixed typos
+X * modified: DSM Tue Apr 3 11:18:34 PDT 1990
+X * - added free(ident) at end of parseFile routine
+X * modified: DSM Tue Jun 19 10:16:29 PDT 1990
+X * - changed (width == 250) to (width = 250) in initializeArray
+X */
+X
+#include <stdio.h>
+#include <errno.h>
+#include <sys/file.h>
+#include <math.h>
+#include "parseAFM.h"
+X
+#define lineterm EOL /* line terminating character */
+#define normalEOF 1 /* return code from parsing routines used only */
+X /* in this module */
+#define Space "space" /* used in string comparison to look for the width */
+X /* of the space character to init the widths array */
+#define False "false" /* used in string comparison to check the value of */
+X /* boolean keys (e.g. IsFixedPitch) */
+X
+#define MATCH(A,B) (strncmp((A),(B), MAX_NAME) == 0)
+X
+X
+X
+/*************************** GLOBALS ***********************/
+X
+static char *ident = NULL; /* storage buffer for keywords */
+X
+X
+/* "shorts" for fast case statement
+X * The values of each of these enumerated items correspond to an entry in the
+X * table of strings defined below. Therefore, if you add a new string as
+X * new keyword into the keyStrings table, you must also add a corresponding
+X * parseKey AND it MUST be in the same position!
+X *
+X * IMPORTANT: since the sorting algorithm is a binary search, the strings of
+X * keywords must be placed in lexicographical order, below. [Therefore, the
+X * enumerated items are not necessarily in lexicographical order, depending
+X * on the name chosen. BUT, they must be placed in the same position as the
+X * corresponding key string.] The NOPE shall remain in the last position,
+X * since it does not correspond to any key string, and it is used in the
+X * "recognize" procedure to calculate how many possible keys there are.
+X */
+X
+static enum parseKey {
+X ASCENDER, CHARBBOX, CODE, COMPCHAR, CAPHEIGHT, COMMENT,
+X DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES,
+X ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN,
+X FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME, ISFIXEDPITCH,
+X ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME,
+X NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES,
+X STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS,
+X STARTTRACKKERN, TRACKKERN, UNDERLINEPOSITION,
+X UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT,
+X NOPE };
+X
+/* keywords for the system:
+X * This a table of all of the current strings that are vaild AFM keys.
+X * Each entry can be referenced by the appropriate parseKey value (an
+X * enumerated data type defined above). If you add a new keyword here,
+X * a corresponding parseKey MUST be added to the enumerated data type
+X * defined above, AND it MUST be added in the same position as the
+X * string is in this table.
+X *
+X * IMPORTANT: since the sorting algorithm is a binary search, the keywords
+X * must be placed in lexicographical order. And, NULL should remain at the
+X * end.
+X */
+X
+static char *keyStrings[] = {
+X "Ascender", "B", "C", "CC", "CapHeight", "Comment",
+X "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites",
+X "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern",
+X "FamilyName", "FontBBox", "FontName", "FullName", "IsFixedPitch",
+X "ItalicAngle", "KP", "KPX", "L", "N",
+X "Notice", "PCC", "StartCharMetrics", "StartComposites",
+X "StartFontMetrics", "StartKernData", "StartKernPairs",
+X "StartTrackKern", "TrackKern", "UnderlinePosition",
+X "UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight",
+X NULL };
+X
+/*************************** PARSING ROUTINES **************/
+X
+/*************************** token *************************/
+X
+/* A "AFM File Conventions" tokenizer. That means that it will
+X * return the next token delimited by white space. See also
+X * the `linetoken' routine, which does a similar thing but
+X * reads all tokens until the next end-of-line.
+X */
+X
+static char *token(stream)
+X FILE *stream;
+{
+X int ch, idx;
+X
+X /* skip over white space */
+X while ((ch = fgetc(stream)) == ' ' || ch == lineterm ||
+X ch == ',' || ch == '\t' || ch == ';');
+X
+X idx = 0;
+X while (ch != EOF && ch != ' ' && ch != lineterm
+X && ch != '\t' && ch != ':' && ch != ';')
+X {
+X ident[idx++] = ch;
+X ch = fgetc(stream);
+X } /* while */
+X
+X if (ch == EOF && idx < 1) return ((char *)NULL);
+X if (idx >= 1 && ch != ':' ) ungetc(ch, stream);
+X if (idx < 1 ) ident[idx++] = ch; /* single-character token */
+X ident[idx] = 0;
+X
+X return(ident); /* returns pointer to the token */
+X
+} /* token */
+X
+X
+/*************************** linetoken *************************/
+X
+/* "linetoken" will get read all tokens until the EOL character from
+X * the given stream. This is used to get any arguments that can be
+X * more than one word (like Comment lines and FullName).
+X */
+X
+static char *linetoken(stream)
+X FILE *stream;
+{
+X int ch, idx;
+X
+X while ((ch = fgetc(stream)) == ' ' || ch == '\t' );
+X
+X idx = 0;
+X while (ch != EOF && ch != lineterm)
+X {
+X ident[idx++] = ch;
+X ch = fgetc(stream);
+X } /* while */
+X
+X ungetc(ch, stream);
+X ident[idx] = 0;
+X
+X return(ident); /* returns pointer to the token */
+X
+} /* linetoken */
+X
+X
+/*************************** recognize *************************/
+X
+/* This function tries to match a string to a known list of
+X * valid AFM entries (check the keyStrings array above).
+X * "ident" contains everything from white space through the
+X * next space, tab, or ":" character.
+X *
+X * The algorithm is a standard Knuth binary search.
+X */
+X
+static enum parseKey recognize(ident)
+X register char *ident;
+{
+X int lower = 0, upper = (int) NOPE, midpoint, cmpvalue;
+X BOOL found = FALSE;
+X
+X while ((upper >= lower) && !found)
+X {
+X midpoint = (lower + upper)/2;
+X if (keyStrings[midpoint] == NULL) break;
+X cmpvalue = strncmp(ident, keyStrings[midpoint], MAX_NAME);
+X if (cmpvalue == 0) found = TRUE;
+X else if (cmpvalue < 0) upper = midpoint - 1;
+X else lower = midpoint + 1;
+X } /* while */
+X
+X if (found) return (enum parseKey) midpoint;
+X else return NOPE;
+X
+} /* recognize */
+X
+X
+/************************* parseGlobals *****************************/
+X
+/* This function is called by "parseFile". It will parse the AFM File
+X * up to the "StartCharMetrics" keyword, which essentially marks the
+X * end of the Global Font Information and the beginning of the character
+X * metrics information.
+X *
+X * If the caller of "parseFile" specified that it wanted the Global
+X * Font Information (as defined by the "AFM File Specification"
+X * document), then that information will be stored in the returned
+X * data structure.
+X *
+X * Any Global Font Information entries that are not found in a
+X * given file, will have the usual default initialization value
+X * for its type (i.e. entries of type int will be 0, etc).
+X *
+X * This function returns an error code specifying whether there was
+X * a premature EOF or a parsing error. This return value is used by
+X * parseFile to determine if there is more file to parse.
+X */
+X
+static BOOL parseGlobals(fp, gfi)
+X FILE *fp;
+X register GlobalFontInfo *gfi;
+{
+X BOOL cont = TRUE, save = (gfi != NULL);
+X int error = ok;
+X register char *keyword;
+X
+X while (cont)
+X {
+X keyword = token(fp);
+X
+X if (keyword == NULL)
+X /* Have reached an early and unexpected EOF. */
+X /* Set flag and stop parsing */
+X {
+X error = earlyEOF;
+X break; /* get out of loop */
+X }
+X if (!save)
+X /* get tokens until the end of the Global Font info section */
+X /* without saving any of the data */
+X switch (recognize(keyword))
+X {
+X case STARTCHARMETRICS:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X default:
+X break;
+X } /* switch */
+X else
+X /* otherwise parse entire global font info section, */
+X /* saving the data */
+X switch(recognize(keyword))
+X {
+X case STARTFONTMETRICS:
+X keyword = token(fp);
+X gfi->afmVersion = (char *) malloc(strlen(keyword) + 1);
+X strcpy(gfi->afmVersion, keyword);
+X break;
+X case COMMENT:
+X keyword = linetoken(fp);
+X break;
+X case FONTNAME:
+X keyword = token(fp);
+X gfi->fontName = (char *) malloc(strlen(keyword) + 1);
+X strcpy(gfi->fontName, keyword);
+X break;
+X case ENCODINGSCHEME:
+X keyword = token(fp);
+X gfi->encodingScheme = (char *)
+X malloc(strlen(keyword) + 1);
+X strcpy(gfi->encodingScheme, keyword);
+X break;
+X case FULLNAME:
+X keyword = linetoken(fp);
+X gfi->fullName = (char *) malloc(strlen(keyword) + 1);
+X strcpy(gfi->fullName, keyword);
+X break;
+X case FAMILYNAME:
+X keyword = linetoken(fp);
+X gfi->familyName = (char *) malloc(strlen(keyword) + 1);
+X strcpy(gfi->familyName, keyword);
+X break;
+X case WEIGHT:
+X keyword = token(fp);
+X gfi->weight = (char *) malloc(strlen(keyword) + 1);
+X strcpy(gfi->weight, keyword);
+X break;
+X case ITALICANGLE:
+X keyword = token(fp);
+X gfi->italicAngle = atof(keyword);
+X if (errno == ERANGE) error = parseError;
+X break;
+X case ISFIXEDPITCH:
+X keyword = token(fp);
+X if (MATCH(keyword, False))
+X gfi->isFixedPitch = 0;
+X else
+X gfi->isFixedPitch = 1;
+X break;
+X case UNDERLINEPOSITION:
+X keyword = token(fp);
+X gfi->underlinePosition = atoi(keyword);
+X break;
+X case UNDERLINETHICKNESS:
+X keyword = token(fp);
+X gfi->underlineThickness = atoi(keyword);
+X break;
+X case VERSION:
+X keyword = token(fp);
+X gfi->version = (char *) malloc(strlen(keyword) + 1);
+X strcpy(gfi->version, keyword);
+X break;
+X case NOTICE:
+X keyword = linetoken(fp);
+X gfi->notice = (char *) malloc(strlen(keyword) + 1);
+X strcpy(gfi->notice, keyword);
+X break;
+X case FONTBBOX:
+X keyword = token(fp);
+X gfi->fontBBox.llx = atoi(keyword);
+X keyword = token(fp);
+X gfi->fontBBox.lly = atoi(keyword);
+X keyword = token(fp);
+X gfi->fontBBox.urx = atoi(keyword);
+X keyword = token(fp);
+X gfi->fontBBox.ury = atoi(keyword);
+X break;
+X case CAPHEIGHT:
+X keyword = token(fp);
+X gfi->capHeight = atoi(keyword);
+X break;
+X case XHEIGHT:
+X keyword = token(fp);
+X gfi->xHeight = atoi(keyword);
+X break;
+X case DESCENDER:
+X keyword = token(fp);
+X gfi->descender = atoi(keyword);
+X break;
+X case ASCENDER:
+X keyword = token(fp);
+X gfi->ascender = atoi(keyword);
+X break;
+X case STARTCHARMETRICS:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X case NOPE:
+X default:
+X error = parseError;
+X break;
+X } /* switch */
+X } /* while */
+X
+X return(error);
+X
+} /* parseGlobals */
+X
+X
+X
+/************************* initializeArray ************************/
+X
+/* Unmapped character codes are (at Adobe Systems) assigned the
+X * width of the space character (if one exists) else they get the
+X * value of 250 ems. This function initializes all entries in the
+X * char widths array to have this value. Then any mapped character
+X * codes will be replaced with the width of the appropriate character
+X * when parsing the character metric section.
+X
+X * This function parses the Character Metrics Section looking
+X * for a space character (by comparing character names). If found,
+X * the width of the space character will be used to initialize the
+X * values in the array of character widths.
+X *
+X * Before returning, the position of the read/write pointer of the
+X * file is reset to be where it was upon entering this function.
+X */
+X
+static int initializeArray(fp, cwi)
+X FILE *fp;
+X register int *cwi;
+{
+X BOOL cont = TRUE, found = FALSE;
+X long opos = ftell(fp);
+X int code = 0, width = 0, i = 0, error = 0;
+X register char *keyword;
+X
+X while (cont)
+X {
+X keyword = token(fp);
+X if (keyword == NULL)
+X {
+X error = earlyEOF;
+X break; /* get out of loop */
+X }
+X switch(recognize(keyword))
+X {
+X case COMMENT:
+X keyword = linetoken(fp);
+X break;
+X case CODE:
+X code = atoi(token(fp));
+X break;
+X case XWIDTH:
+X width = atoi(token(fp));
+X break;
+X case CHARNAME:
+X keyword = token(fp);
+X if (MATCH(keyword, Space))
+X {
+X cont = FALSE;
+X found = TRUE;
+X }
+X break;
+X case ENDCHARMETRICS:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X case NOPE:
+X default:
+X error = parseError;
+X break;
+X } /* switch */
+X } /* while */
+X
+X if (!found)
+X width = 250;
+X
+X for (i = 0; i < 256; ++i)
+X cwi[i] = width;
+X
+X fseek(fp, opos, 0);
+X
+X return(error);
+X
+} /* initializeArray */
+X
+X
+/************************* parseCharWidths **************************/
+X
+/* This function is called by "parseFile". It will parse the AFM File
+X * up to the "EndCharMetrics" keyword. It will save the character
+X * width info (as opposed to all of the character metric information)
+X * if requested by the caller of parseFile. Otherwise, it will just
+X * parse through the section without saving any information.
+X *
+X * If data is to be saved, parseCharWidths is passed in a pointer
+X * to an array of widths that has already been initialized by the
+X * standard value for unmapped character codes. This function parses
+X * the Character Metrics section only storing the width information
+X * for the encoded characters into the array using the character code
+X * as the index into that array.
+X *
+X * This function returns an error code specifying whether there was
+X * a premature EOF or a parsing error. This return value is used by
+X * parseFile to determine if there is more file to parse.
+X */
+X
+static parseCharWidths(fp, cwi)
+X FILE *fp;
+X register int *cwi;
+{
+X BOOL cont = TRUE, save = (cwi != NULL);
+X int pos = 0, error = ok;
+X register char *keyword;
+X
+X while (cont)
+X {
+X keyword = token(fp);
+X /* Have reached an early and unexpected EOF. */
+X /* Set flag and stop parsing */
+X if (keyword == NULL)
+X {
+X error = earlyEOF;
+X break; /* get out of loop */
+X }
+X if (!save)
+X /* get tokens until the end of the Char Metrics section without */
+X /* saving any of the data*/
+X switch (recognize(keyword))
+X {
+X case ENDCHARMETRICS:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X default:
+X break;
+X } /* switch */
+X else
+X /* otherwise parse entire char metrics section, saving */
+X /* only the char x-width info */
+X switch(recognize(keyword))
+X {
+X case COMMENT:
+X keyword = linetoken(fp);
+X break;
+X case CODE:
+X keyword = token(fp);
+X pos = atoi(keyword);
+X break;
+X case XYWIDTH:
+X /* PROBLEM: Should be no Y-WIDTH when doing "quick & dirty" */
+X keyword = token(fp); keyword = token(fp); /* eat values */
+X error = parseError;
+X break;
+X case XWIDTH:
+X keyword = token(fp);
+X if (pos >= 0) /* ignore unmapped chars */
+X cwi[pos] = atoi(keyword);
+X break;
+X case ENDCHARMETRICS:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X case CHARNAME: /* eat values (so doesn't cause parseError) */
+X keyword = token(fp);
+X break;
+X case CHARBBOX:
+X keyword = token(fp); keyword = token(fp);
+X keyword = token(fp); keyword = token(fp);
+X break;
+X case LIGATURE:
+X keyword = token(fp); keyword = token(fp);
+X break;
+X case NOPE:
+X default:
+X error = parseError;
+X break;
+X } /* switch */
+X } /* while */
+X
+X return(error);
+X
+} /* parseCharWidths */
+X
+X
+/************************* parseCharMetrics ************************/
+X
+/* This function is called by parseFile if the caller of parseFile
+X * requested that all character metric information be saved
+X * (as opposed to only the character width information).
+X *
+X * parseCharMetrics is passed in a pointer to an array of records
+X * to hold information on a per character basis. This function
+X * parses the Character Metrics section storing all character
+X * metric information for the ALL characters (mapped and unmapped)
+X * into the array.
+X *
+X * This function returns an error code specifying whether there was
+X * a premature EOF or a parsing error. This return value is used by
+X * parseFile to determine if there is more file to parse.
+X */
+X
+static parseCharMetrics(fp, fi)
+X FILE *fp;
+X register FontInfo *fi;
+{
+X BOOL cont = TRUE, firstTime = TRUE;
+X int error = ok, count = 0;
+X register CharMetricInfo *temp = fi->cmi;
+X register char *keyword;
+X
+X while (cont)
+X {
+X keyword = token(fp);
+X if (keyword == NULL)
+X {
+X error = earlyEOF;
+X break; /* get out of loop */
+X }
+X switch(recognize(keyword))
+X {
+X case COMMENT:
+X keyword = linetoken(fp);
+X break;
+X case CODE:
+X if (count < fi->numOfChars)
+X {
+X if (firstTime) firstTime = FALSE;
+X else temp++;
+X temp->code = atoi(token(fp));
+X count++;
+X }
+X else
+X {
+X error = parseError;
+X cont = FALSE;
+X }
+X break;
+X case XYWIDTH:
+X temp->wx = atoi(token(fp));
+X temp->wy = atoi(token(fp));
+X break;
+X case XWIDTH:
+X temp->wx = atoi(token(fp));
+X break;
+X case CHARNAME:
+X keyword = token(fp);
+X temp->name = (char *) malloc(strlen(keyword) + 1);
+X strcpy(temp->name, keyword);
+X break;
+X case CHARBBOX:
+X temp->charBBox.llx = atoi(token(fp));
+X temp->charBBox.lly = atoi(token(fp));
+X temp->charBBox.urx = atoi(token(fp));
+X temp->charBBox.ury = atoi(token(fp));
+X break;
+X case LIGATURE: {
+X Ligature **tail = &(temp->ligs);
+X Ligature *node = *tail;
+X
+X if (*tail != NULL)
+X {
+X while (node->next != NULL)
+X node = node->next;
+X tail = &(node->next);
+X }
+X
+X *tail = (Ligature *) calloc(1, sizeof(Ligature));
+X keyword = token(fp);
+X (*tail)->succ = (char *) malloc(strlen(keyword) + 1);
+X strcpy((*tail)->succ, keyword);
+X keyword = token(fp);
+X (*tail)->lig = (char *) malloc(strlen(keyword) + 1);
+X strcpy((*tail)->lig, keyword);
+X break; }
+X case ENDCHARMETRICS:
+X cont = FALSE;;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X case NOPE:
+X default:
+X error = parseError;
+X break;
+X } /* switch */
+X } /* while */
+X
+X if ((error == ok) && (count != fi->numOfChars))
+X error = parseError;
+X
+X return(error);
+X
+} /* parseCharMetrics */
+X
+X
+X
+/************************* parseTrackKernData ***********************/
+X
+/* This function is called by "parseFile". It will parse the AFM File
+X * up to the "EndTrackKern" or "EndKernData" keywords. It will save the
+X * track kerning data if requested by the caller of parseFile.
+X *
+X * parseTrackKernData is passed in a pointer to the FontInfo record.
+X * If data is to be saved, the FontInfo record will already contain
+X * a valid pointer to storage for the track kerning data.
+X *
+X * This function returns an error code specifying whether there was
+X * a premature EOF or a parsing error. This return value is used by
+X * parseFile to determine if there is more file to parse.
+X */
+X
+static parseTrackKernData(fp, fi)
+X FILE *fp;
+X register FontInfo *fi;
+{
+X BOOL cont = TRUE, save = (fi->tkd != NULL);
+X int pos = 0, error = ok, tcount = 0;
+X register char *keyword;
+X
+X while (cont)
+X {
+X keyword = token(fp);
+X
+X if (keyword == NULL)
+X {
+X error = earlyEOF;
+X break; /* get out of loop */
+X }
+X if (!save)
+X /* get tokens until the end of the Track Kerning Data */
+X /* section without saving any of the data */
+X switch(recognize(keyword))
+X {
+X case ENDTRACKKERN:
+X case ENDKERNDATA:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X default:
+X break;
+X } /* switch */
+X else
+X /* otherwise parse entire Track Kerning Data section, */
+X /* saving the data */
+X switch(recognize(keyword))
+X {
+X case COMMENT:
+X keyword = linetoken(fp);
+X break;
+X case TRACKKERN:
+X if (tcount < fi->numOfTracks)
+X {
+X keyword = token(fp);
+X fi->tkd[pos].degree = atoi(keyword);
+X keyword = token(fp);
+X fi->tkd[pos].minPtSize = atof(keyword);
+X if (errno == ERANGE) error = parseError;
+X keyword = token(fp);
+X fi->tkd[pos].minKernAmt = atof(keyword);
+X if (errno == ERANGE) error = parseError;
+X keyword = token(fp);
+X fi->tkd[pos].maxPtSize = atof(keyword);
+X if (errno == ERANGE) error = parseError;
+X keyword = token(fp);
+X fi->tkd[pos++].maxKernAmt = atof(keyword);
+X if (errno == ERANGE) error = parseError;
+X tcount++;
+X }
+X else
+X {
+X error = parseError;
+X cont = FALSE;
+X }
+X break;
+X case ENDTRACKKERN:
+X case ENDKERNDATA:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X case NOPE:
+X default:
+X error = parseError;
+X break;
+X } /* switch */
+X } /* while */
+X
+X if (error == ok && tcount != fi->numOfTracks)
+X error = parseError;
+X
+X return(error);
+X
+} /* parseTrackKernData */
+X
+X
+/************************* parsePairKernData ************************/
+X
+/* This function is called by "parseFile". It will parse the AFM File
+X * up to the "EndKernPairs" or "EndKernData" keywords. It will save
+X * the pair kerning data if requested by the caller of parseFile.
+X *
+X * parsePairKernData is passed in a pointer to the FontInfo record.
+X * If data is to be saved, the FontInfo record will already contain
+X * a valid pointer to storage for the pair kerning data.
+X *
+X * This function returns an error code specifying whether there was
+X * a premature EOF or a parsing error. This return value is used by
+X * parseFile to determine if there is more file to parse.
+X */
+X
+static parsePairKernData(fp, fi)
+X FILE *fp;
+X register FontInfo *fi;
+{
+X BOOL cont = TRUE, save = (fi->pkd != NULL);
+X int pos = 0, error = ok, pcount = 0;
+X register char *keyword;
+X
+X while (cont)
+X {
+X keyword = token(fp);
+X
+X if (keyword == NULL)
+X {
+X error = earlyEOF;
+X break; /* get out of loop */
+X }
+X if (!save)
+X /* get tokens until the end of the Pair Kerning Data */
+X /* section without saving any of the data */
+X switch(recognize(keyword))
+X {
+X case ENDKERNPAIRS:
+X case ENDKERNDATA:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X default:
+X break;
+X } /* switch */
+X else
+X /* otherwise parse entire Pair Kerning Data section, */
+X /* saving the data */
+X switch(recognize(keyword))
+X {
+X case COMMENT:
+X keyword = linetoken(fp);
+X break;
+X case KERNPAIR:
+X if (pcount < fi->numOfPairs)
+X {
+X keyword = token(fp);
+X fi->pkd[pos].name1 = (char *)
+X malloc(strlen(keyword) + 1);
+X strcpy(fi->pkd[pos].name1, keyword);
+X keyword = token(fp);
+X fi->pkd[pos].name2 = (char *)
+X malloc(strlen(keyword) + 1);
+X strcpy(fi->pkd[pos].name2, keyword);
+X keyword = token(fp);
+X fi->pkd[pos].xamt = atoi(keyword);
+X keyword = token(fp);
+X fi->pkd[pos++].yamt = atoi(keyword);
+X pcount++;
+X }
+X else
+X {
+X error = parseError;
+X cont = FALSE;
+X }
+X break;
+X case KERNPAIRXAMT:
+X if (pcount < fi->numOfPairs)
+X {
+X keyword = token(fp);
+X fi->pkd[pos].name1 = (char *)
+X malloc(strlen(keyword) + 1);
+X strcpy(fi->pkd[pos].name1, keyword);
+X keyword = token(fp);
+X fi->pkd[pos].name2 = (char *)
+X malloc(strlen(keyword) + 1);
+X strcpy(fi->pkd[pos].name2, keyword);
+X keyword = token(fp);
+X fi->pkd[pos++].xamt = atoi(keyword);
+X pcount++;
+X }
+X else
+X {
+X error = parseError;
+X cont = FALSE;
+X }
+X break;
+X case ENDKERNPAIRS:
+X case ENDKERNDATA:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X case NOPE:
+X default:
+X error = parseError;
+X break;
+X } /* switch */
+X } /* while */
+X
+X if (error == ok && pcount != fi->numOfPairs)
+X error = parseError;
+X
+X return(error);
+X
+} /* parsePairKernData */
+X
+X
+/************************* parseCompCharData **************************/
+X
+/* This function is called by "parseFile". It will parse the AFM File
+X * up to the "EndComposites" keyword. It will save the composite
+X * character data if requested by the caller of parseFile.
+X *
+X * parseCompCharData is passed in a pointer to the FontInfo record, and
+X * a boolean representing if the data should be saved.
+X *
+X * This function will create the appropriate amount of storage for
+X * the composite character data and store a pointer to the storage
+X * in the FontInfo record.
+X *
+X * This function returns an error code specifying whether there was
+X * a premature EOF or a parsing error. This return value is used by
+X * parseFile to determine if there is more file to parse.
+X */
+X
+static parseCompCharData(fp, fi)
+X FILE *fp;
+X register FontInfo *fi;
+{
+X BOOL cont = TRUE, firstTime = TRUE, save = (fi->ccd != NULL);
+X int pos = 0, j = 0, error = ok, ccount = 0, pcount = 0;
+X register char *keyword;
+X
+X while (cont)
+X {
+X keyword = token(fp);
+X if (keyword == NULL)
+X /* Have reached an early and unexpected EOF. */
+X /* Set flag and stop parsing */
+X {
+X error = earlyEOF;
+X break; /* get out of loop */
+X }
+X if (ccount > fi->numOfComps)
+X {
+X error = parseError;
+X break; /* get out of loop */
+X }
+X if (!save)
+X /* get tokens until the end of the Composite Character info */
+X /* section without saving any of the data */
+X switch(recognize(keyword))
+X {
+X case ENDCOMPOSITES:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X default:
+X break;
+X } /* switch */
+X else
+X /* otherwise parse entire Composite Character info section, */
+X /* saving the data */
+X switch(recognize(keyword))
+X {
+X case COMMENT:
+X keyword = linetoken(fp);
+X break;
+X case COMPCHAR:
+X if (ccount < fi->numOfComps)
+X {
+X keyword = token(fp);
+X if (pcount != fi->ccd[pos].numOfPieces)
+X error = parseError;
+X pcount = 0;
+X if (firstTime) firstTime = FALSE;
+X else pos++;
+X fi->ccd[pos].ccName = (char *)
+X malloc(strlen(keyword) + 1);
+X strcpy(fi->ccd[pos].ccName, keyword);
+X keyword = token(fp);
+X fi->ccd[pos].numOfPieces = atoi(keyword);
+X fi->ccd[pos].pieces = (Pcc *)
+X calloc(fi->ccd[pos].numOfPieces, sizeof(Pcc));
+X j = 0;
+X ccount++;
+X }
+X else
+X {
+X error = parseError;
+X cont = FALSE;
+X }
+X break;
+X case COMPCHARPIECE:
+X if (pcount < fi->ccd[pos].numOfPieces)
+X {
+X keyword = token(fp);
+X fi->ccd[pos].pieces[j].pccName = (char *)
+X malloc(strlen(keyword) + 1);
+X strcpy(fi->ccd[pos].pieces[j].pccName, keyword);
+X keyword = token(fp);
+X fi->ccd[pos].pieces[j].deltax = atoi(keyword);
+X keyword = token(fp);
+X fi->ccd[pos].pieces[j++].deltay = atoi(keyword);
+X pcount++;
+X }
+X else
+X error = parseError;
+X break;
+X case ENDCOMPOSITES:
+X cont = FALSE;
+X break;
+X case ENDFONTMETRICS:
+X cont = FALSE;
+X error = normalEOF;
+X break;
+X case NOPE:
+X default:
+X error = parseError;
+X break;
+X } /* switch */
+X } /* while */
+X
+X if (error == ok && ccount != fi->numOfComps)
+X error = parseError;
+X
+X return(error);
+X
+} /* parseCompCharData */
+X
+X
+X
+X
+/*************************** 'PUBLIC' FUNCTION ********************/
+X
+X
+/*************************** parseFile *****************************/
+X
+/* parseFile is the only 'public' procedure available. It is called
+X * from an application wishing to get information from an AFM file.
+X * The caller of this function is responsible for locating and opening
+X * an AFM file and handling all errors associated with that task.
+X *
+X * parseFile expects 3 parameters: a vaild file pointer, a pointer
+X * to a (FontInfo *) variable (for which storage will be allocated and
+X * the data requested filled in), and a mask specifying which
+X * data from the AFM File should be saved in the FontInfo structure.
+X *
+X * The file will be parsed and the requested data will be stored in
+X * a record of type FontInfo (refer to ParseAFM.h).
+X *
+X * parseFile returns an error code as defined in parseAFM.h.
+X *
+X * The position of the read/write pointer associated with the file
+X * pointer upon return of this function is undefined.
+X */
+X
+extern int parseFile (fp, fi, flags)
+X FILE *fp;
+X FontInfo **fi;
+X FLAGS flags;
+{
+X
+X int code = ok; /* return code from each of the parsing routines */
+X int error = ok; /* used as the return code from this function */
+X
+X register char *keyword; /* used to store a token */
+X
+X
+X /* storage data for the global variable ident */
+X ident = (char *) calloc(MAX_NAME, sizeof(char));
+X if (ident == NULL) {error = storageProblem; return(error);}
+X
+X (*fi) = (FontInfo *) calloc(1, sizeof(FontInfo));
+X if ((*fi) == NULL) {error = storageProblem; return(error);}
+X
+X if (flags & P_G)
+X {
+X (*fi)->gfi = (GlobalFontInfo *) calloc(1, sizeof(GlobalFontInfo));
+X if ((*fi)->gfi == NULL) {error = storageProblem; return(error);}
+X }
+X
+X /* The AFM File begins with Global Font Information. This section */
+X /* will be parsed whether or not information should be saved. */
+X code = parseGlobals(fp, (*fi)->gfi);
+X
+X if (code < 0) error = code;
+X
+X /* The Global Font Information is followed by the Character Metrics */
+X /* section. Which procedure is used to parse this section depends on */
+X /* how much information should be saved. If all of the metrics info */
+X /* is wanted, parseCharMetrics is called. If only the character widths */
+X /* is wanted, parseCharWidths is called. parseCharWidths will also */
+X /* be called in the case that no character data is to be saved, just */
+X /* to parse through the section. */
+X
+X if ((code != normalEOF) && (code != earlyEOF))
+X {
+X (*fi)->numOfChars = atoi(token(fp));
+X if (flags & (P_M ^ P_W))
+X {
+X (*fi)->cmi = (CharMetricInfo *)
+X calloc((*fi)->numOfChars, sizeof(CharMetricInfo));
+X if ((*fi)->cmi == NULL) {error = storageProblem; return(error);}
+X code = parseCharMetrics(fp, *fi);
+X }
+X else
+X {
+X if (flags & P_W)
+X {
+X (*fi)->cwi = (int *) calloc(256, sizeof(int));
+X if ((*fi)->cwi == NULL)
+X {
+X error = storageProblem;
+X return(error);
+X }
+X }
+X /* parse section regardless */
+X code = parseCharWidths(fp, (*fi)->cwi);
+X } /* else */
+X } /* if */
+X
+X if ((error != earlyEOF) && (code < 0)) error = code;
+X
+X /* The remaining sections of the AFM are optional. This code will */
+X /* look at the next keyword in the file to determine what section */
+X /* is next, and then allocate the appropriate amount of storage */
+X /* for the data (if the data is to be saved) and call the */
+X /* appropriate parsing routine to parse the section. */
+X
+X while ((code != normalEOF) && (code != earlyEOF))
+X {
+X keyword = token(fp);
+X if (keyword == NULL)
+X /* Have reached an early and unexpected EOF. */
+X /* Set flag and stop parsing */
+X {
+X code = earlyEOF;
+X break; /* get out of loop */
+X }
+X switch(recognize(keyword))
+X {
+X case STARTKERNDATA:
+X break;
+X case ENDKERNDATA:
+X break;
+X case STARTTRACKKERN:
+X keyword = token(fp);
+X if (flags & P_T)
+X {
+X (*fi)->numOfTracks = atoi(keyword);
+X (*fi)->tkd = (TrackKernData *)
+X calloc((*fi)->numOfTracks, sizeof(TrackKernData));
+X if ((*fi)->tkd == NULL)
+X {
+X error = storageProblem;
+X return(error);
+X }
+X } /* if */
+X code = parseTrackKernData(fp, *fi);
+X break;
+X case STARTKERNPAIRS:
+X keyword = token(fp);
+X if (flags & P_P)
+X {
+X (*fi)->numOfPairs = atoi(keyword);
+X (*fi)->pkd = (PairKernData *)
+X calloc((*fi)->numOfPairs, sizeof(PairKernData));
+X if ((*fi)->pkd == NULL)
+X {
+X error = storageProblem;
+X return(error);
+X }
+X } /* if */
+X code = parsePairKernData(fp, *fi);
+X break;
+X case STARTCOMPOSITES:
+X keyword = token(fp);
+X if (flags & P_C)
+X {
+X (*fi)->numOfComps = atoi(keyword);
+X (*fi)->ccd = (CompCharData *)
+X calloc((*fi)->numOfComps, sizeof(CompCharData));
+X if ((*fi)->ccd == NULL)
+X {
+X error = storageProblem;
+X return(error);
+X }
+X } /* if */
+X code = parseCompCharData(fp, *fi);
+X break;
+X case ENDFONTMETRICS:
+X code = normalEOF;
+X break;
+X case NOPE:
+X default:
+X code = parseError;
+X break;
+X } /* switch */
+X
+X if ((error != earlyEOF) && (code < 0)) error = code;
+X
+X } /* while */
+X
+X if ((error != earlyEOF) && (code < 0)) error = code;
+X
+X if (ident != NULL) { free(ident); ident = NULL; }
+X
+X return(error);
+X
+} /* parseFile */
+SHAR_EOF
+ $shar_touch -am 1018085596 'parseAFM.c' &&
+ chmod 0644 'parseAFM.c' ||
+ $echo 'restore of' 'parseAFM.c' 'failed'
+ shar_count="`wc -c < 'parseAFM.c'`"
+ test 43280 -eq "$shar_count" ||
+ $echo 'parseAFM.c:' 'original size' '43280,' 'current size' "$shar_count"
+fi
+# ============= parseAFM.h ==============
+if test -f 'parseAFM.h' && test X"$1" != X"-c"; then
+ $echo 'x -' SKIPPING 'parseAFM.h' '(file already exists)'
+else
+ $echo 'x -' extracting 'parseAFM.h' '(text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'parseAFM.h' &&
+/*
+X * (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved.
+X *
+X * This file may be freely copied and redistributed as long as:
+X * 1) This entire notice continues to be included in the file,
+X * 2) If the file has been modified in any way, a notice of such
+X * modification is conspicuously indicated.
+X *
+X * PostScript, Display PostScript, and Adobe are registered trademarks of
+X * Adobe Systems Incorporated.
+X *
+X * ************************************************************************
+X * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
+X * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
+X * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
+X * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
+X * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
+X * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
+X * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+X * ************************************************************************
+X */
+X
+/* ParseAFM.h
+X *
+X * This header file is used in conjuction with the parseAFM.c file.
+X * Together these files provide the functionality to parse Adobe Font
+X * Metrics files and store the information in predefined data structures.
+X * It is intended to work with an application program that needs font metric
+X * information. The program can be used as is by making a procedure call to
+X * parse an AFM file and have the data stored, or an application developer
+X * may wish to customize the code.
+X *
+X * This header file defines the data structures used as well as the key
+X * strings that are currently recognized by this version of the AFM parser.
+X * This program is based on the document "Adobe Font Metrics Files,
+X * Specification Version 2.0".
+X *
+X * AFM files are separated into distinct sections of different data. Because
+X * of this, the parseAFM program can parse a specified file to only save
+X * certain sections of information based on the application's needs. A record
+X * containing the requested information will be returned to the application.
+X *
+X * AFM files are divided into five sections of data:
+X * 1) The Global Font Information
+X * 2) The Character Metrics Information
+X * 3) The Track Kerning Data
+X * 4) The Pair-Wise Kerning Data
+X * 5) The Composite Character Data
+X *
+X * Basically, the application can request any of these sections independent
+X * of what other sections are requested. In addition, in recognizing that
+X * many applications will want ONLY the x-width of characters and not all
+X * of the other character metrics information, there is a way to receive
+X * only the width information so as not to pay the storage cost for the
+X * unwanted data. An application should never request both the
+X * "quick and dirty" char metrics (widths only) and the Character Metrics
+X * Information since the Character Metrics Information will contain all
+X * of the character widths as well.
+X *
+X * There is a procedure in parseAFM.c, called parseFile, that can be
+X * called from any application wishing to get information from the AFM File.
+X * This procedure expects 3 parameters: a vaild file descriptor, a pointer
+X * to a (FontInfo *) variable (for which space will be allocated and then
+X * will be filled in with the data requested), and a mask specifying
+X * which data from the AFM File should be saved in the FontInfo structure.
+X *
+X * The flags that can be used to set the appropriate mask are defined below.
+X * In addition, several commonly used masks have already been defined.
+X *
+X * History:
+X * original: DSM Thu Oct 20 17:39:59 PDT 1988
+X * modified: DSM Mon Jul 3 14:17:50 PDT 1989
+X * - added 'storageProblem' return code
+X * - fixed typos
+X */
+X
+#include <stdio.h>
+X
+X
+X
+/* your basic constants */
+#define TRUE 1
+#define FALSE 0
+#define EOL '\n' /* end-of-line indicator */
+#define MAX_NAME 4096 /* max length for identifiers */
+#define BOOL int
+#define FLAGS int
+X
+X
+X
+/* Flags that can be AND'ed together to specify exactly what
+X * information from the AFM file should be saved.
+X */
+#define P_G 0x01 /* 0000 0001 */ /* Global Font Info */
+#define P_W 0x02 /* 0000 0010 */ /* Character Widths ONLY */
+#define P_M 0x06 /* 0000 0110 */ /* All Char Metric Info */
+#define P_P 0x08 /* 0000 1000 */ /* Pair Kerning Info */
+#define P_T 0x10 /* 0001 0000 */ /* Track Kerning Info */
+#define P_C 0x20 /* 0010 0000 */ /* Composite Char Info */
+X
+X
+/* Commonly used flags
+X */
+#define P_GW (P_G | P_W)
+#define P_GM (P_G | P_M)
+#define P_GMP (P_G | P_M | P_P)
+#define P_GMK (P_G | P_M | P_P | P_T)
+#define P_ALL (P_G | P_M | P_P | P_T | P_C)
+X
+X
+X
+/* Possible return codes from the parseFile procedure.
+X *
+X * ok means there were no problems parsing the file.
+X *
+X * parseError means that there was some kind of parsing error, but the
+X * parser went on. This could include problems like the count for any given
+X * section does not add up to how many entries there actually were, or
+X * there was a key that was not recognized. The return record may contain
+X * vaild data or it may not.
+X *
+X * earlyEOF means that an End of File was encountered before expected. This
+X * may mean that the AFM file had been truncated, or improperly formed.
+X *
+X * storageProblem means that there were problems allocating storage for
+X * the data structures that would have contained the AFM data.
+X */
+#define ok 0
+#define parseError -1
+#define earlyEOF -2
+#define storageProblem -3
+X
+X
+X
+/************************* TYPES *********************************/
+/* Below are all of the data structure definitions. These structures
+X * try to map as closely as possible to grouping and naming of data
+X * in the AFM Files.
+X */
+X
+X
+/* Bounding box definition. Used for the Font BBox as well as the
+X * Character BBox.
+X */
+typedef struct
+{
+X int llx; /* lower left x-position */
+X int lly; /* lower left y-position */
+X int urx; /* upper right x-position */
+X int ury; /* upper right y-position */
+} BBox;
+X
+X
+/* Global Font information.
+X * The key that each field is associated with is in comments. For an
+X * explanation about each key and its value please refer to the AFM
+X * documentation (full title & version given above).
+X */
+typedef struct
+{
+X char *afmVersion; /* key: StartFontMetrics */
+X char *fontName; /* key: FontName */
+X char *fullName; /* key: FullName */
+X char *familyName; /* key: FamilyName */
+X char *weight; /* key: Weight */
+X float italicAngle; /* key: ItalicAngle */
+X BOOL isFixedPitch; /* key: IsFixedPitch */
+X BBox fontBBox; /* key: FontBBox */
+X int underlinePosition; /* key: UnderlinePosition */
+X int underlineThickness; /* key: UnderlineThickness */
+X char *version; /* key: Version */
+X char *notice; /* key: Notice */
+X char *encodingScheme; /* key: EncodingScheme */
+X int capHeight; /* key: CapHeight */
+X int xHeight; /* key: XHeight */
+X int ascender; /* key: Ascender */
+X int descender; /* key: Descender */
+} GlobalFontInfo;
+X
+X
+/* Ligature definition is a linked list since any character can have
+X * any number of ligatures.
+X */
+typedef struct _t_ligature
+{
+X char *succ, *lig;
+X struct _t_ligature *next;
+} Ligature;
+X
+X
+/* Character Metric Information. This structure is used only if ALL
+X * character metric information is requested. If only the character
+X * widths is requested, then only an array of the character x-widths
+X * is returned.
+X *
+X * The key that each field is associated with is in comments. For an
+X * explanation about each key and its value please refer to the
+X * Character Metrics section of the AFM documentation (full title
+X * & version given above).
+X */
+typedef struct
+{
+X int code, /* key: C */
+X wx, /* key: WX */
+X wy; /* together wx and wy are associated with key: W */
+X char *name; /* key: N */
+X BBox charBBox; /* key: B */
+X Ligature *ligs; /* key: L (linked list; not a fixed number of Ls */
+} CharMetricInfo;
+X
+X
+/* Track kerning data structure.
+X * The fields of this record are the five values associated with every
+X * TrackKern entry.
+X *
+X * For an explanation about each value please refer to the
+X * Track Kerning section of the AFM documentation (full title
+X * & version given above).
+X */
+typedef struct
+{
+X int degree;
+X float minPtSize,
+X minKernAmt,
+X maxPtSize,
+X maxKernAmt;
+} TrackKernData;
+X
+X
+/* Pair Kerning data structure.
+X * The fields of this record are the four values associated with every
+X * KP entry. For KPX entries, the yamt will be zero.
+X *
+X * For an explanation about each value please refer to the
+X * Pair Kerning section of the AFM documentation (full title
+X * & version given above).
+X */
+typedef struct
+{
+X char *name1;
+X char *name2;
+X int xamt,
+X yamt;
+} PairKernData;
+X
+X
+/* PCC is a piece of a composite character. This is a sub structure of a
+X * compCharData described below.
+X * These fields will be filled in with the values from the key PCC.
+X *
+X * For an explanation about each key and its value please refer to the
+X * Composite Character section of the AFM documentation (full title
+X * & version given above).
+X */
+typedef struct
+{
+X char *pccName;
+X int deltax,
+X deltay;
+} Pcc;
+X
+X
+/* Composite Character Information data structure.
+X * The fields ccName and numOfPieces are filled with the values associated
+X * with the key CC. The field pieces points to an array (size = numOfPieces)
+X * of information about each of the parts of the composite character. That
+X * array is filled in with the values from the key PCC.
+X *
+X * For an explanation about each key and its value please refer to the
+X * Composite Character section of the AFM documentation (full title
+X * & version given above).
+X */
+typedef struct
+{
+X char *ccName;
+X int numOfPieces;
+X Pcc *pieces;
+} CompCharData;
+X
+X
+/* FontInfo
+X * Record type containing pointers to all of the other data
+X * structures containing information about a font.
+X * A a record of this type is filled with data by the
+X * parseFile function.
+X */
+typedef struct
+{
+X GlobalFontInfo *gfi; /* ptr to a GlobalFontInfo record */
+X int *cwi; /* ptr to 256 element array of just char widths */
+X int numOfChars; /* number of entries in char metrics array */
+X CharMetricInfo *cmi; /* ptr to char metrics array */
+X int numOfTracks; /* number to entries in track kerning array */
+X TrackKernData *tkd; /* ptr to track kerning array */
+X int numOfPairs; /* number to entries in pair kerning array */
+X PairKernData *pkd; /* ptr to pair kerning array */
+X int numOfComps; /* number to entries in comp char array */
+X CompCharData *ccd; /* ptr to comp char array */
+} FontInfo;
+X
+X
+X
+/************************* PROCEDURES ****************************/
+X
+/* Call this procedure to do the grunt work of parsing an AFM file.
+X *
+X * "fp" should be a valid file pointer to an AFM file.
+X *
+X * "fi" is a pointer to a pointer to a FontInfo record sturcture
+X * (defined above). Storage for the FontInfo structure will be
+X * allocated in parseFile and the structure will be filled in
+X * with the requested data from the AFM File.
+X *
+X * "flags" is a mask with bits set representing what data should
+X * be saved. Defined above are valid flags that can be used to set
+X * the mask, as well as a few commonly used masks.
+X *
+X * The possible return codes from parseFile are defined above.
+X */
+X
+extern int parseFile ( /* FILE *fp; FontInfo **fi; FLAGS flags; */ );
+SHAR_EOF
+ $shar_touch -am 1018085596 'parseAFM.h' &&
+ chmod 0644 'parseAFM.h' ||
+ $echo 'restore of' 'parseAFM.h' 'failed'
+ shar_count="`wc -c < 'parseAFM.h'`"
+ test 11502 -eq "$shar_count" ||
+ $echo 'parseAFM.h:' 'original size' '11502,' 'current size' "$shar_count"
+fi
+# ============= parseAFMclient.c ==============
+if test -f 'parseAFMclient.c' && test X"$1" != X"-c"; then
+ $echo 'x -' SKIPPING 'parseAFMclient.c' '(file already exists)'
+else
+ $echo 'x -' extracting 'parseAFMclient.c' '(text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'parseAFMclient.c' &&
+/*
+X * (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved.
+X *
+X * This file may be freely copied and redistributed as long as:
+X * 1) This entire notice continues to be included in the file,
+X * 2) If the file has been modified in any way, a notice of such
+X * modification is conspicuously indicated.
+X *
+X * PostScript, Display PostScript, and Adobe are registered trademarks of
+X * Adobe Systems Incorporated.
+X *
+X * ************************************************************************
+X * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
+X * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
+X * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
+X * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
+X * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
+X * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
+X * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+X * ************************************************************************
+X */
+X
+/* parseAFMclient.c
+X *
+X * This file is an example of how an application might use the provided
+X * AFM Parser (parseAFM.c).
+X *
+X * In a nutshell, the client of the parser (like this file) chooses
+X * the AFM File that it wishes to have parsed, opens the file for
+X * reading (and does any/all error handling associated with that task),
+X * and passes the resulting file pointer to the procedure "parseFile"
+X * (in parseAFM.c). In addition to the file pointer, the client also
+X * needs to pass a pointer to a FontInfo record type (for which storage
+X * will be allocated and data filled in), and a mask representing which
+X * sections of the AFM should be saved in the FontInfo record.
+X *
+X * In the procedure "main", the mask is built from command line switches,
+X * but your application, of course, can set that mask any way you prefer.
+X * "main" then calls the "parseFile" procedure (of parseAFM.c) to do the
+X * grunt work, and checks the error codes upon "parseFile"'s return.
+X *
+X * The rest of this sample application is a collection of print routines
+X * that show how to reference each of the sections of data and a
+X * "freeStorage" routine (that many unix programmers may feel they
+X * don't need but is included for portability to other systems that do
+X * need to manage storage). The print procedures are there just to
+X * give meaning to this application, and hopefully your application
+X * will use the data collected from the AFM file in a more useful way.
+X *
+X * History:
+X * original: DSM Thu Oct 20 17:39:59 PDT 1988
+X * modified: DSM Mon Jul 3 14:17:50 PDT 1989
+X * - added 'storageProblem' check in main
+X */
+X
+#include <stdio.h>
+#include "parseAFM.h"
+X
+X
+/*************************** GLOBALS ***************************/
+FontInfo *fi;
+FLAGS myflags = 0;
+X
+X
+/*************************** printGlobals **********************/
+X
+printGlobals()
+{
+X printf("\nThis AFM is of Version %s\n", fi->gfi->afmVersion);
+X printf("The font name is %s\n", fi->gfi->fontName);
+X printf("The full name is %s\n", fi->gfi->fullName);
+X printf("The family name is %s\n", fi->gfi->familyName);
+X printf("The weight is %s\n", fi->gfi->weight);
+X printf("Italic Angle is %3.1f\n", fi->gfi->italicAngle);
+X if (fi->gfi->isFixedPitch)
+X printf("This font IS fixed-pitch\n");
+X else
+X printf("This font is NOT fixed-pitch\n");
+X printf("Underline position is %d\n", fi->gfi->underlinePosition);
+X printf("Underline thickness is %d\n", fi->gfi->underlineThickness);
+X printf("Version is %s\n", fi->gfi->version);
+X printf("FontBBox is [%d, %d, %d, %d]\n",
+X fi->gfi->fontBBox.llx, fi->gfi->fontBBox.lly,
+X fi->gfi->fontBBox.urx, fi->gfi->fontBBox.ury);
+X printf("%s\n", fi->gfi->notice);
+X printf("Encoding Scheme is %s\n", fi->gfi->encodingScheme);
+X printf("CapHeight is %d\n", fi->gfi->capHeight);
+X printf("XHeight is %d\n", fi->gfi->xHeight);
+X printf("Descender is %d\n", fi->gfi->descender);
+X printf("Ascender is %d\n\n", fi->gfi->ascender);
+X
+} /* printGlobals */
+X
+X
+/*************************** printCharWidths *********************/
+printCharWidths()
+{
+X int i = 0;
+X printf("Here come some character widths ...\n");
+X for (i = 0; i < 256; ++i)
+X printf(" code: %3d width: %4d\n", i, fi->cwi[i]);
+X printf("\n");
+X
+} /* printCharWidths */
+X
+X
+/*************************** printAllCharMetrics *****************/
+printAllCharMetrics()
+{
+X int i = 0;
+X CharMetricInfo *temp = fi->cmi;
+X Ligature *node = temp->ligs;
+X
+X printf("Here come some character metrics ...\n");
+X for (i = 0; i < fi->numOfChars; ++i)
+X {
+X printf(
+X " code: %3d x-width: %4d y-width: %4d name: %-12s bbox: [%d, %d, %d, %d]\n",
+X temp->code, temp->wx, temp->wy, temp->name, temp->charBBox.llx,
+X temp->charBBox.lly, temp->charBBox.urx, temp->charBBox.ury);
+X for (node = temp->ligs; node != NULL; node = node->next)
+X {
+X printf(" Ligatures: successor: %s ligature: %s\n",
+X node->succ, node->lig);
+X }
+X temp++;
+X } /* for */
+X printf("\n");
+X
+} /* printAllCharMetrics */
+X
+X
+/*************************** printKernPairData ******************/
+printKernPairData()
+{
+X int i = 0;
+X PairKernData *pkd = fi->pkd;
+X
+X if (fi->numOfPairs != 0)
+X {
+X printf("Here comes the pair kerning data ...\n");
+X for (i = 0; i < fi->numOfPairs; ++i)
+X printf(
+X " char 1: %-12s char 2: %-12s x-amount: %d y-amount: %d\n",
+X pkd[i].name1, pkd[i].name2, pkd[i].xamt, pkd[i].yamt);
+X }
+X else printf("There isn't any pair kerning data.\n");
+X printf("\n");
+X
+} /* printKernPairData */
+X
+X
+/*************************** printKernTrackData *******************/
+printKernTrackData()
+{
+X int i = 0;
+X TrackKernData *tkd = fi->tkd;
+X
+X if (fi->numOfTracks != 0)
+X {
+X printf("Here comes the track kerning data ...\n");
+X for (i = 0; i < fi->numOfTracks; ++i)
+X printf(
+X " degree: %d min-pt: %5.2f min-kern: %5.2f max-pt: %5.2f max-kern: %5.2f\n",
+X tkd[i].degree, tkd[i].minPtSize, tkd[i].minKernAmt,
+X tkd[i].maxPtSize, tkd[i].maxKernAmt);
+X }
+X else printf("There isn't any track kerning data.\n");
+X printf("\n");
+X
+} /* printKernTrackData */
+X
+X
+/*************************** printCompCharData ********************/
+printCompCharData()
+{
+X int i = 0, j = 0;
+X CompCharData *ccd = fi->ccd;
+X
+X if (fi->numOfComps != 0)
+X {
+X printf("Here comes the composite character data ...\n");
+X for (i = 0; i < fi->numOfComps; ++i)
+X {
+X printf(" comp char: %-12s pieces: %d\n",
+X ccd[i].ccName, ccd[i].numOfPieces);
+X for (j = 0; j < ccd[i].numOfPieces; ++j)
+X printf(
+X " Part # %d Name: %-12s Delta X: %d Delta Y: %d\n",
+X (j + 1), ccd[i].pieces[j].pccName,
+X ccd[i].pieces[j].deltax, ccd[i].pieces[j].deltay);
+X }
+X }
+X else printf("There aren't any composites characters. \n");
+X printf("\n");
+X
+} /* printCompCharData */
+X
+X
+X
+/*************************** freeStorage ***********************/
+X
+freeStorage()
+{
+X if (fi != NULL)
+X {
+X if (fi->gfi != NULL)
+X {
+X free(fi->gfi->afmVersion); fi->gfi->afmVersion = NULL;
+X free(fi->gfi->fontName); fi->gfi->fontName = NULL;
+X free(fi->gfi->fullName); fi->gfi->fullName = NULL;
+X free(fi->gfi->familyName); fi->gfi->familyName = NULL;
+X free(fi->gfi->weight); fi->gfi->weight = NULL;
+X free(fi->gfi->version); fi->gfi->version = NULL;
+X free(fi->gfi->notice); fi->gfi->notice = NULL;
+X free(fi->gfi->encodingScheme); fi->gfi->encodingScheme = NULL;
+X free(fi->gfi); fi->gfi = NULL;
+X }
+X
+X if (fi->cwi != NULL)
+X { free(fi->cwi); fi->cwi = NULL; }
+X
+X if (fi->cmi != NULL)
+X {
+X int i = 0;
+X CharMetricInfo *temp = fi->cmi;
+X Ligature *node = temp->ligs;
+X
+X for (i = 0; i < fi->numOfChars; ++i)
+X {
+X for (node = temp->ligs; node != NULL; node = node->next)
+X {
+X free(node->succ); node->succ = NULL;
+X free(node->lig); node->lig = NULL;
+X }
+X
+X free(temp->name); temp->name = NULL;
+X temp++;
+X }
+X
+X free(fi->cmi); fi->cmi = NULL;
+X }
+X
+X if (fi->tkd != NULL)
+X { free(fi->tkd); fi->tkd = NULL; }
+X
+X if (fi->pkd != NULL)
+X {
+X free(fi->pkd->name1); fi->pkd->name1 = NULL;
+X free(fi->pkd->name2); fi->pkd->name2 = NULL;
+X free(fi->pkd); fi->pkd = NULL;
+X }
+X
+X if (fi->ccd != NULL)
+X {
+X int i = 0, j = 0;
+X CompCharData *ccd = fi->ccd;
+X
+X for (i = 0; i < fi->numOfComps; ++i)
+X {
+X for (j = 0; j < ccd[i].numOfPieces; ++j)
+X {
+X free(ccd[i].pieces[j].pccName);
+X ccd[i].pieces[j].pccName = NULL;
+X }
+X
+X free(ccd[i].ccName); ccd[i].ccName = NULL;
+X }
+X
+X free(fi->ccd); fi->ccd = NULL;
+X }
+X
+X free(fi);
+X
+X } /* if */
+X
+} /* freeStorage */
+X
+X
+/*************************** printValues **************************/
+X
+printValues()
+{
+X if ((myflags & P_G) && (fi->gfi != NULL)) printGlobals();
+X if ((myflags & (P_M ^ P_W)) && (fi->cmi != NULL)) printAllCharMetrics();
+X else if ((myflags & P_W) && (fi->cwi != NULL)) printCharWidths();
+X if ((myflags & P_P) && (fi->pkd != NULL)) printKernPairData();
+X if ((myflags & P_T) && (fi->tkd != NULL)) printKernTrackData();
+X if ((myflags & P_C) && (fi->ccd != NULL)) printCompCharData();
+X
+} /* printValues */
+X
+X
+X
+/*************************** main *********************************/
+X
+main (argc, argv)
+X int argc;
+X char **argv;
+{
+X char *filename, *prog = *argv;
+X FILE *fp;
+X
+X ++argv; --argc;
+X while (argc > 0 && **argv == '-')
+X {
+X switch ((*argv)[1])
+X {
+X case 'g': /* save Globals */
+X myflags |= P_G;
+X break;
+X case 'w': /* save Char Widths */
+X myflags |= P_W;
+X break;
+X case 'm': /* save All Char Metrics */
+X myflags |= P_M;
+X break;
+X case 'p': /* save Kern Pair Data */
+X myflags |= P_P;
+X break;
+X case 't': /* save Kern Track Data */
+X myflags |= P_T;
+X break;
+X case 'c': /* save Comp Char Data */
+X myflags |= P_C;
+X break;
+X default:
+X printf(" usage: parseAFM [-g] [-w] [-p] [-t] [-c] [AFM File]\nOR: usage: parseAFM [-g] [-m] [-p] [-t] [-c] [AFM File]\n");
+X exit(0);
+X }
+X ++argv; --argc;
+X }
+X
+X if (!argc)
+X {
+X printf(" usage: parseAFM [-g] [-w] [-p] [-t] [-c] [AFM File]\nOR: usage: parseAFM [-g] [-m] [-p] [-t] [-c] [AFM File]\n");
+X exit(0);
+X }
+X else
+X filename = *argv;
+X
+X if (!filename[0])
+X {
+X printf ("*** ERROR: can't open. filename is missing.\n",
+X filename );
+X return 0;
+X }
+X
+X fp = fopen(filename, "r" );
+X if (fp == NULL)
+X {
+X printf ("*** ERROR: can't find: %s\n", filename );
+X exit(1);
+X }
+X
+X switch (parseFile(fp, &fi, myflags))
+X {
+X case parseError:
+X printf("*** ERROR: problem in parsing the AFM File.\n");
+X case ok:
+X fclose(fp);
+X printValues();
+X freeStorage();
+X break;
+X case earlyEOF:
+X printf("The AFM File ended prematurely.\n");
+X break;
+X case storageProblem:
+X printf("*** ERROR: problem allocating storage.\n");
+X break;
+X default:
+X break;
+X }
+X
+} /* main */
+SHAR_EOF
+ $shar_touch -am 1018085596 'parseAFMclient.c' &&
+ chmod 0644 'parseAFMclient.c' ||
+ $echo 'restore of' 'parseAFMclient.c' 'failed'
+ shar_count="`wc -c < 'parseAFMclient.c'`"
+ test 12210 -eq "$shar_count" ||
+ $echo 'parseAFMclient.c:' 'original size' '12210,' 'current size' "$shar_count"
+fi
+rm -fr _sh00599
+exit 0
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/.dependencies b/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/.dependencies
new file mode 100644
index 00000000000..21e95604656
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/.dependencies
@@ -0,0 +1 @@
+type1afm.lo: type1afm.c ../lib/t1lib/t1lib.h
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/Makefile.in
new file mode 100644
index 00000000000..61611e174c6
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/Makefile.in
@@ -0,0 +1,104 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# uninstall
+# clean
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 02/19/1997
+# Last modified: 2006-11-05
+#
+# Modified by H.Kakugawa to use libtool
+
+LIBTOOL = ../libtool
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+ALLCFLAGS = $(CFLAGS)
+SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)'
+@SET_MAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+
+# targets to build
+
+MAIN_TARGET = @MAIN_TARGET@
+
+OBJS = \
+ type1afm.lo
+
+SRCS = \
+ type1afm.c
+
+T1LIB = ../lib/libt1.la
+
+
+all: type1afm
+
+type1afm: $(OBJS) ../lib/t1lib.h
+ $(LIBTOOL) --mode=link \
+ $(CC) -o type1afm $(LDFLAGS) $(OBJS) $(T1LIB) $(LDLIBS)
+
+.SUFFIXES: .lo
+.c.lo:
+ $(LIBTOOL) --mode=compile \
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
+
+.PHONY: clean
+
+dependencies: dummy
+ gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies
+
+clean: dummy
+ $(RM) type1afm *.o *.lo .libs/* *~ \#*\# *.log *.bak
+ -rmdir .libs
+
+install: dummy
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(LIBTOOL) --mode=install \
+ $(INSTALL_PROGRAM) type1afm $(DESTDIR)$(bindir)/type1afm
+
+
+uninstall: dummy
+ $(LIBTOOL) --mode=uninstall \
+ $(RM) $(DESTDIR)$(bindir)/type1afm
+
+
+dummy:
+
+# Dependencies of object files
+include .dependencies
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/type1afm.c b/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/type1afm.c
new file mode 100644
index 00000000000..bf95410c35b
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/type1afm/type1afm.c
@@ -0,0 +1,140 @@
+/*--------------------------------------------------------------------------
+ ----- File: type1afm.c
+ ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+ ----- Date: 2002-11-27
+ ----- Description: This file is part of t1lib. The program type1afm
+ extracts metrics information from Type 1 font files
+ and dumps it to afm files.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2002.
+ As of version 0.5, t1lib is distributed under the
+ GNU General Public Library Lincense. The
+ conditions can be found in the files LICENSE and
+ LGPL, which should reside in the toplevel
+ directory of the distribution. Please note that
+ there are parts of t1lib that are subject to
+ other licenses:
+ The parseAFM-package is copyrighted by Adobe Systems
+ Inc.
+ The type1 rasterizer is copyrighted by IBM and the
+ X11-consortium.
+ ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+ ----- Credits: I want to thank IBM and the X11-consortium for making
+ their rasterizer freely available.
+ Also thanks to Piet Tutelaers for his ps2pk, from
+ which I took the rasterizer sources in a format
+ independent from X11.
+ Thanks to all people who make free software living!
+--------------------------------------------------------------------------*/
+
+
+#include <stdio.h>
+#include <string.h>
+/* Note: We include t1lib.h from lib/t1lib. That way the objectfile does only
+ need to be rebuild when the header itself changes and not each time the
+ library has been recompiled */
+#include "../lib/t1lib/t1lib.h"
+
+
+void printusage( void);
+
+
+int main(int argc, char *argv[])
+{
+
+ int i, j, result;
+ int rasterflags=0;
+
+
+ if (argc==1){
+ printusage();
+ return(0);
+ }
+
+ /* If we want to log anything, then log all */
+ T1_SetLogLevel(T1LOG_DEBUG);
+ /* Check whether logfile is requested */
+ if (strcmp( argv[1], "-l")==0){
+ if (argc==2){
+ printusage();
+ return(0);
+ }
+ j=2;
+ if ((T1_InitLib( LOGFILE |
+ IGNORE_CONFIGFILE |
+ IGNORE_FONTDATABASE)==NULL)){
+ fprintf(stderr, "Initialization of t1lib failed\n");
+ return(1);
+ }
+ }
+ else{
+ j=1;
+ if ((T1_InitLib( NO_LOGFILE |
+ IGNORE_CONFIGFILE |
+ IGNORE_FONTDATABASE)==NULL)){
+ fprintf(stderr, "Initialization of t1lib failed\n");
+ return(1);
+ }
+ }
+
+ /* First, build font data base */
+ for (i=j; i<argc; i++){
+ if ((result=T1_AddFont( argv[i]))<0)
+ fprintf( stderr, "type1afm: Could not load font file %s (%d)\n",
+ argv[i], result);
+ }
+ if (T1_GetNoFonts()<1){
+ fprintf( stderr, "type1afm: Nothing to do\n");
+ T1_CloseLib();
+ return(-1);
+ }
+
+ /* switch rasterizer to disable hinting */
+ rasterflags |= T1_IGNORE_FORCEBOLD;
+ rasterflags |= T1_IGNORE_FAMILYALIGNMENT;
+ rasterflags |= T1_IGNORE_HINTING;
+ T1_SetRasterFlags( rasterflags);
+
+
+ /* Second, load fonts and generate afm files */
+ for( i=0; i<T1_GetNoFonts(); i++){
+ fprintf( stdout, "Loading %s ... ", T1_GetFontFileName(i));
+ fflush(stdout);
+ if ((T1_LoadFont(i))){
+ fprintf(stdout, "failed\n");
+ continue;
+ }
+ else{
+ fprintf(stdout, "finished\n");
+ }
+ fprintf( stdout, "Processing ... ");
+ fflush(stdout);
+ if ((result=T1_WriteAFMFallbackFile( i))){
+ fprintf(stdout, "failed (Error: %d)\n", result);
+ }
+ else{
+ fprintf(stdout, "finished\n");
+ }
+ fprintf( stdout, "Removing font %d ... ", i);
+ fflush(stdout);
+ if ((T1_DeleteFont( i))){
+ fprintf(stdout, "failed\n");
+ }
+ else{
+ fprintf(stdout, "finished\n");
+ }
+ }
+
+ T1_CloseLib();
+ return( 0);
+}
+
+
+void printusage( void)
+{
+ fprintf(stdout, "Usage: type1afm [-l] <fontfile1> [<fontfile2> ...]\n");
+ fprintf(stdout, "\n");
+ fprintf(stdout, "Generate afm-file from Adobe Type 1 font file (T1lib-%s)!\n",
+ T1_GetLibIdent());
+ fprintf(stdout, "Options: -l Write a log-file t1lib.log\n");
+}
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_DLL.dsp b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_DLL.dsp
new file mode 100644
index 00000000000..936ee6db305
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_DLL.dsp
@@ -0,0 +1,481 @@
+# Microsoft Developer Studio Project File - Name="T1_DLL" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** $BJT=8$7$J$$$G$/$@$5$$(B **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=T1_DLL - Win32 Debug MD
+!MESSAGE $B$3$l$OM-8z$J%a%$%/%U%!%$%k$G$O$"$j$^$;$s!#(B $B$3$N%W%m%8%'%/%H$r%S%k%I$9$k$?$a$K$O(B NMAKE $B$r;HMQ$7$F$/$@$5$$!#(B
+!MESSAGE [$B%a%$%/%U%!%$%k$N%(%/%9%]!<%H(B] $B%3%^%s%I$r;HMQ$7$F<B9T$7$F$/$@$5$$(B
+!MESSAGE
+!MESSAGE NMAKE /f "T1_DLL.mak".
+!MESSAGE
+!MESSAGE NMAKE $B$N<B9T;~$K9=@.$r;XDj$G$-$^$9(B
+!MESSAGE $B%3%^%s%I(B $B%i%$%s>e$G%^%/%m$N@_Dj$rDj5A$7$^$9!#Nc(B:
+!MESSAGE
+!MESSAGE NMAKE /f "T1_DLL.mak" CFG="T1_DLL - Win32 Debug MD"
+!MESSAGE
+!MESSAGE $BA*Br2DG=$J%S%k%I(B $B%b!<%I(B:
+!MESSAGE
+!MESSAGE "T1_DLL - Win32 Release" ("Win32 (x86) Dynamic-Link Library" $BMQ(B)
+!MESSAGE "T1_DLL - Win32 Debug" ("Win32 (x86) Dynamic-Link Library" $BMQ(B)
+!MESSAGE "T1_DLL - Win32 Release MD" ("Win32 (x86) Dynamic-Link Library" $BMQ(B)
+!MESSAGE "T1_DLL - Win32 Debug MD" ("Win32 (x86) Dynamic-Link Library" $BMQ(B)
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "T1_DLL - 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 "Lib"
+# PROP Intermediate_Dir "DLL_Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1.pdb" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x411 /d "NDEBUG"
+# ADD RSC /l 0x411 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Lib/T1.dll"
+
+!ELSEIF "$(CFG)" == "T1_DLL - 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 "Lib"
+# PROP Intermediate_Dir "DLL_Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1d.pdb" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x411 /d "_DEBUG"
+# ADD RSC /l 0x411 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Lib/T1d.dll" /pdbtype:sept
+
+!ELSEIF "$(CFG)" == "T1_DLL - Win32 Release MD"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "T1_DLL___Win32_Release_MD"
+# PROP BASE Intermediate_Dir "T1_DLL___Win32_Release_MD"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Lib"
+# PROP Intermediate_Dir "DLLMD_Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1.pdb" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1MD.pdb" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x411 /d "NDEBUG"
+# ADD RSC /l 0x411 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Lib/T1.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Lib/T1MD.dll"
+
+!ELSEIF "$(CFG)" == "T1_DLL - Win32 Debug MD"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "T1_DLL___Win32_Debug_MD"
+# PROP BASE Intermediate_Dir "T1_DLL___Win32_Debug_MD"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Lib"
+# PROP Intermediate_Dir "DLLMD_Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1d.pdb" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "T1_DLL_EXPORTS" /YX /Fd"Lib/T1MDd.pdb" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x411 /d "_DEBUG"
+# ADD RSC /l 0x411 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Lib/T1d.dll" /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Lib/T1MDd.dll" /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "T1_DLL - Win32 Release"
+# Name "T1_DLL - Win32 Debug"
+# Name "T1_DLL - Win32 Release MD"
+# Name "T1_DLL - Win32 Debug MD"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\lib\type1\arith.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\curves.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontfcn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\hints.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\lines.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\objects.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\parseAFM.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\paths.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\regions.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\scanfont.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\spaces.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\t1.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1aaset.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1afmtool.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1base.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1delete.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1enc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1env.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1finfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1io.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1load.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1outline.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1set.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1snap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1stub.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1trans.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\token.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\type1.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\util.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\lib\type1\arith.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\blues.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\cluts.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\curves.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\digit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\ffilest.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\font.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontfcn.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontmisc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fonts.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontstruct.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontxlfd.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fsmasks.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\hdigit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\hints.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\lines.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\objects.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\parseAFM.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\paths.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\paths_rmz.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\pictures.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\regions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\spaces.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\spaces_rmz.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\strokes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\sysconf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1aaset.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1afmtool.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1base.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1delete.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1enc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1env.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1extern.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1finfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1global.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1hdigit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1imager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1load.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1misc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1outline.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1set.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1stdio.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1trans.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1x11.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\token.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\tokst.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\trig.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\util.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\Xstuff.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/Build/source/libs/freetype2/builds/win32/visualc/freetype.dsw b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_DLL.dsw
index b149e769b5a..65da8e09121 100644
--- a/Build/source/libs/freetype2/builds/win32/visualc/freetype.dsw
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_DLL.dsw
@@ -1,29 +1,29 @@
-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>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# $B7Y9p(B: $B$3$N%o!<%/%9%Z!<%9(B $B%U%!%$%k(B $B$rJT=8$^$?$O:o=|$7$J$$$G$/$@$5$$(B!
+
+###############################################################################
+
+Project: "T1_DLL"=.\T1_DLL.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_Static.dsp b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_Static.dsp
new file mode 100644
index 00000000000..cb36b191258
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_Static.dsp
@@ -0,0 +1,458 @@
+# Microsoft Developer Studio Project File - Name="T1_Static" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** $BJT=8$7$J$$$G$/$@$5$$(B **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=T1_Static - Win32 Debug MD
+!MESSAGE $B$3$l$OM-8z$J%a%$%/%U%!%$%k$G$O$"$j$^$;$s!#(B $B$3$N%W%m%8%'%/%H$r%S%k%I$9$k$?$a$K$O(B NMAKE $B$r;HMQ$7$F$/$@$5$$!#(B
+!MESSAGE [$B%a%$%/%U%!%$%k$N%(%/%9%]!<%H(B] $B%3%^%s%I$r;HMQ$7$F<B9T$7$F$/$@$5$$(B
+!MESSAGE
+!MESSAGE NMAKE /f "T1_Static.mak".
+!MESSAGE
+!MESSAGE NMAKE $B$N<B9T;~$K9=@.$r;XDj$G$-$^$9(B
+!MESSAGE $B%3%^%s%I(B $B%i%$%s>e$G%^%/%m$N@_Dj$rDj5A$7$^$9!#Nc(B:
+!MESSAGE
+!MESSAGE NMAKE /f "T1_Static.mak" CFG="T1_Static - Win32 Debug MD"
+!MESSAGE
+!MESSAGE $BA*Br2DG=$J%S%k%I(B $B%b!<%I(B:
+!MESSAGE
+!MESSAGE "T1_Static - Win32 Release" ("Win32 (x86) Static Library" $BMQ(B)
+!MESSAGE "T1_Static - Win32 Debug" ("Win32 (x86) Static Library" $BMQ(B)
+!MESSAGE "T1_Static - Win32 Release MD" ("Win32 (x86) Static Library" $BMQ(B)
+!MESSAGE "T1_Static - Win32 Debug MD" ("Win32 (x86) Static Library" $BMQ(B)
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "T1_Static - 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 "Lib"
+# PROP Intermediate_Dir "Static_Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib\T1_Static.pdb" /FD /c
+# ADD BASE RSC /l 0x411 /d "NDEBUG"
+# ADD RSC /l 0x411 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "T1_Static - 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 "Lib"
+# PROP Intermediate_Dir "Static_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 /nologo /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib/T1_Staticd.pdb" /FD /GZ /c
+# ADD BASE RSC /l 0x411 /d "_DEBUG"
+# ADD RSC /l 0x411 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Lib\T1_Staticd.lib"
+
+!ELSEIF "$(CFG)" == "T1_Static - Win32 Release MD"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "T1_Static___Win32_Release_MD"
+# PROP BASE Intermediate_Dir "T1_Static___Win32_Release_MD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Lib"
+# PROP Intermediate_Dir "StaticMD_Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib\T1_StaticMD.pdb" /FD /c
+# ADD BASE RSC /l 0x411 /d "NDEBUG"
+# ADD RSC /l 0x411 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Lib\T1_StaticMD.lib"
+
+!ELSEIF "$(CFG)" == "T1_Static - Win32 Debug MD"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "T1_Static___Win32_Debug_MD"
+# PROP BASE Intermediate_Dir "T1_Static___Win32_Debug_MD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Lib"
+# PROP Intermediate_Dir "StaticMD_Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib/T1_Staticd.pdb" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /Fd"Lib/T1_StaticMDd.pdb" /FD /GZ /c
+# ADD BASE RSC /l 0x411 /d "_DEBUG"
+# ADD RSC /l 0x411 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"Lib\T1_Staticd.lib"
+# ADD LIB32 /nologo /out:"Lib\T1_StaticMDd.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "T1_Static - Win32 Release"
+# Name "T1_Static - Win32 Debug"
+# Name "T1_Static - Win32 Release MD"
+# Name "T1_Static - Win32 Debug MD"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\lib\type1\arith.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\curves.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontfcn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\hints.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\lines.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\objects.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\parseAFM.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\paths.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\regions.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\scanfont.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\spaces.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1aaset.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1afmtool.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1base.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1delete.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1enc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1env.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1finfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1io.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1load.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1outline.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1set.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1snap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1stub.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1trans.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\token.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\type1.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\util.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\lib\type1\arith.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\blues.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\cluts.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\curves.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\digit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\ffilest.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\font.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontfcn.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontmisc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fonts.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontstruct.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fontxlfd.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\fsmasks.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\hdigit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\hints.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\lines.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\objects.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\parseAFM.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\paths.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\paths_rmz.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\pictures.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\regions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\spaces.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\spaces_rmz.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\strokes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\sysconf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1aaset.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1afmtool.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1base.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1delete.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1enc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1env.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1extern.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1finfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1global.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1hdigit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1imager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1load.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1misc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1outline.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1set.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\t1stdio.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1trans.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\t1lib\t1x11.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\token.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\tokst.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\trig.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\util.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lib\type1\Xstuff.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/Build/source/libs/freetype2/builds/win32/visualce/freetype.dsw b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_Static.dsw
index b149e769b5a..a9f4f0e95e9 100644
--- a/Build/source/libs/freetype2/builds/win32/visualce/freetype.dsw
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/win32/T1_Static.dsw
@@ -1,29 +1,29 @@
-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>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# $B7Y9p(B: $B$3$N%o!<%/%9%Z!<%9(B $B%U%!%$%k(B $B$rJT=8$^$?$O:o=|$7$J$$$G$/$@$5$$(B!
+
+###############################################################################
+
+Project: "T1_Static"=".\T1_Static.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/Build/source/libs/t1lib/t1win32.h b/Build/source/libs/t1lib/t1lib-5.1.2/win32/sysconf.h
index 3aaa857b011..9c56a8b4c24 100644
--- a/Build/source/libs/t1lib/t1win32.h
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/win32/sysconf.h
@@ -1,9 +1,11 @@
/*--------------------------------------------------------------------------
- ----- File: t1win32.h
+ ----- File: sysconf.h.in
----- Author: Rainer Menzner (rmz@neuroinformatik.ruhr-uni-bochum.de)
- ----- Date: 08/20/1998
- ----- Description: This file is part of the t1-library. It contains
- definitions and declarations for t1x11.c.
+ ----- Date: 02/24/1998
+ ----- Description: This file is part of the t1-library. Some system
+ dependent definitions are stored here. sysconf.h
+ is generated from this file automatically by the
+ configure-script.
----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-1998.
As of version 0.5, t1lib is distributed under the
GNU General Public Library Lincense. The
@@ -24,27 +26,26 @@
independent from X11.
Thanks to all people who make free software living!
--------------------------------------------------------------------------*/
+
-#include <windows.h>
+#undef __CHAR_UNSIGNED__
+#define SIZEOF_CHAR 1
+#define SIZEOF_SHORT 2
+#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
+#define SIZEOF_LONG_LONG 8
+#define SIZEOF_FLOAT 4
+#define SIZEOF_DOUBLE 8
+#define SIZEOF_LONG_DOUBLE 12
+#define SIZEOF_VOID_P 4
-int T1_SetWin32Params(HDC hDc);
-GLYPH *T1_SetCharX( HDC hDc, int mode, int x, int y,
- int FontID, char charcode,
- float size, T1_TMATRIX *transform);
-GLYPH *T1_SetStringX( HDC hDc, int mode, int x, int y,
- int FontID, char *string, int len,
- long spaceoff, int modflag,
- float size, T1_TMATRIX *transform);
-GLYPH *T1_AASetCharX( HDC hDc, int mode, int x, int y,
- int FontID, char charcode,
- float size, T1_TMATRIX *transform);
-GLYPH *T1_AASetStringX( HDC hDc, int mode, int x, int y,
- int FontID, char *string, int len,
- long spaceoff, int modflag,
- float size, T1_TMATRIX *transform);
-int T1_ComputeAAColorsX( unsigned long fg,
- unsigned long bg,
- int nolevels);
-int T1_GetDepthOfDrawable( HDC hDc );
-void T1_LogicalPositionX( int pos_switch);
+#if defined(_MSC_VER)
+# define T1LIB_IDENT "1.0"
+# define GLOBAL_CONFIG_DIR "/usr/local/share/t1lib-1.0"
+# define T1_AA_TYPE16 short
+# define T1_AA_TYPE32 int
+#endif
+#if defined(_MSC_VER) && !defined(_WIN32)
+# define _WIN32 1
+#endif
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/win32/t1.def b/Build/source/libs/t1lib/t1lib-5.1.2/win32/t1.def
new file mode 100644
index 00000000000..ba9e2a7beab
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/win32/t1.def
@@ -0,0 +1,110 @@
+EXPORTS
+ T1_AAFillOutline
+ T1_AAGetLevel
+ T1_AAHSetGrayValues
+ T1_AANSetGrayValues
+ T1_AASetBitsPerPixel
+ T1_AASetChar
+ T1_AASetGrayValues
+ T1_AASetLevel
+ T1_AASetSmartLimits
+ T1_AASetSmartMode
+ T1_AASetString
+ T1_AbsolutePath
+ T1_AddFont
+ T1_AddToFileSearchPath
+ T1_CheckEndian
+ T1_CloseLib
+ T1_ComputeLineParameters
+ T1_ConcatGlyphs
+ T1_ConcatOutlines
+ T1_CopyFont
+ T1_CopyGlyph
+ T1_DeleteAllSizes
+ T1_DeleteEncoding
+ T1_DeleteFont
+ T1_DeleteSize
+ T1_DumpGlyph
+ T1_DumpPath
+ ;T1_DumpPixmap
+ T1_ExtendFont
+ T1_ExtendHMatrix
+ T1_ExtendVMatrix
+ T1_FillOutline
+ T1_FreeGlyph
+ T1_GenerateAFMFallbackInfo
+ T1_Get_no_fonts
+ T1_GetAfmFileName
+ T1_GetAllCharNames
+ T1_GetBitmapPad
+ T1_GetCharBBox
+ T1_GetCharName
+ T1_GetCharOutline
+ T1_GetCharWidth
+ T1_GetEncodingIndex
+ T1_GetEncodingScheme
+ T1_GetFamilyName
+ T1_GetFileSearchPath
+ T1_GetFontBBox
+ T1_GetFontFileName
+ T1_GetFontName
+ T1_GetFullName
+ T1_GetIsFixedPitch
+ T1_GetItalicAngle
+ T1_GetKerning
+ T1_GetLibIdent
+ T1_GetLinePosition
+ T1_GetLineThickness
+ T1_GetMetricsInfo
+ T1_GetMoveOutline
+ T1_GetNotice
+ T1_GetStringBBox
+ T1_GetStringOutline
+ T1_GetStringWidth
+ T1_GetUnderlinePosition
+ T1_GetUnderlineThickness
+ T1_GetVersion
+ T1_GetWeight
+ T1_InitLib
+ T1_LoadEncoding
+ T1_LoadFont
+ T1_ManipulatePath
+ T1_MirrorHMatrix
+ T1_MirrorVMatrix
+ T1_PrintLog
+ T1_QueryLigs
+ T1_QueryX11Support
+ T1_ReencodeFont
+ T1_RelativePath
+ T1_RotateMatrix
+ T1_ScaleOutline
+ T1_SetAfmFileName
+ T1_SetBitmapPad
+ T1_SetChar
+ T1_SetDefaultEncoding
+ T1_SetDeviceResolutions
+ T1_SetFileSearchPath
+ T1_SetFontDataBase
+ T1_SetLinePosition
+ T1_SetLineThickness
+ T1_SetLogLevel
+ T1_SetRasterFlags
+ T1_SetString
+ T1_ShearHMatrix
+ T1_ShearVMatrix
+ T1_SlantFont
+ T1_TransformMatrix
+ T1_WriteAFMFallbackFile
+; T1_AADoLine
+; T1_AAInit
+; T1_DoLine
+; T1Close
+; T1Decrypt
+; T1eexec
+; T1Fill
+; T1Getc
+; T1io_reset
+; T1lib_parseFile
+; T1Open
+; T1Read
+; T1Ungetc
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/.dependencies b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/.dependencies
new file mode 100644
index 00000000000..9ea114d8c76
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/.dependencies
@@ -0,0 +1 @@
+xglyph.lo: xglyph.c ../lib/t1lib/t1lib.h ../lib/t1lib/t1libx.h
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/FontDataBase b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/FontDataBase
new file mode 100644
index 00000000000..1173e1ef7e2
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/FontDataBase
@@ -0,0 +1,10 @@
+8
+bchr.afm
+bchri.afm
+bchb.afm
+bchbi.afm
+dcr10.afm
+dcti10.afm
+dcbx10.afm
+dcbxti10.afm
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/Makefile.in b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/Makefile.in
new file mode 100644
index 00000000000..8da9b63c56a
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/Makefile.in
@@ -0,0 +1,109 @@
+# Makefile.in
+#
+# This file is part of the t1lib-package! See documentation and Readme files
+# of the t1lib-package for copyright restrictions.
+#
+# Targets provided:
+# all (default)
+# install
+# uninstall
+# clean
+#
+# Author: Rainer Menzner (Rainer.Menzner@web.de)
+# Date: 04/06/1997
+# Last modified: 2004-12-12
+#
+# Modified by H.Kakugawa to use libtool
+
+LIBTOOL = ../libtool
+SHELL = /bin/sh
+CC = @CC@
+CPP = @CPP@
+CFLAGS = @CFLAGS@
+OPTIONS = @OPTIONS@
+X_LIBS = @X_LIBS@
+TOPSRC = @top_srcdir@
+XPM_LIB = -lXpm
+XLIB = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
+LDFLAGS = @LDFLAGS@
+LDLIBS = @LDLIBS@
+AR = ar rc
+RANLIB = @RANLIB@
+RM = rm -f
+X_CFLAGS = @X_CFLAGS@
+YACC = @YACC@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+ALLCFLAGS = $(CFLAGS)
+SUBMAKE = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(ALLCFLAGS)' 'OPTIONS=$(OPTIONS)'
+@SET_MAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @top_srcdir@/ac-tools/mkinstalldirs
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+includedir = @includedir@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+mandir = @mandir@/man1
+manext = .1
+no_x = @no_x@
+
+
+# targets to build
+
+MAIN_TARGET = @MAIN_TARGET@
+
+OBJS = \
+ xglyph.lo
+
+SRCS = \
+ xglyph.c
+
+T1LIB = ../lib/libt1.la
+T1LIBX = ../lib/libt1x.la
+XAWLIB = -lXaw -lXt -lXmu
+
+
+all: xglyph
+
+
+xglyph: $(OBJS) $(T1LIBX) $(T1LIB)
+ $(LIBTOOL) --mode=link \
+ $(CC) -o xglyph $(LDFLAGS) $(OBJS) $(T1LIBX) $(T1LIB) \
+ $(X_LIBS) $(XAWLIB) $(XLIB) $(LDLIBS)
+
+.SUFFIXES: .lo
+.c.lo:
+ $(LIBTOOL) --mode=compile \
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
+
+
+.PHONY: clean
+
+
+dependencies: dummy
+ gcc -MM *.c | sed 's/\.o:/.lo:/g' > .dependencies
+
+clean: dummy
+ $(RM) xglyph *.lo *.o .libs/* *~ \#*\# *.log *.bak
+ -rmdir .libs
+
+
+install: dummy
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) xglyph $(DESTDIR)$(bindir)/xglyph
+
+
+uninstall: dummy
+ $(LIBTOOL) --mode=uninstall $(RM) -f $(DESTDIR)$(bindir)/xglyph
+
+
+dummy:
+
+# Dependencies of object files (generated by "gcc -MM *.c"):
+include .dependencies
+
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/bchr.pfb b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/bchr.pfb
new file mode 100644
index 00000000000..72a1606b4b4
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/bchr.pfb
Binary files differ
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/t1lib.config b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/t1lib.config
new file mode 100644
index 00000000000..db9f6dc5508
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/t1lib.config
@@ -0,0 +1,6 @@
+This is a configuration file for t1lib
+
+TYPE1=.:../Fonts/type1
+FONTDATABASE=./FontDataBase
+ENCODING=.:../Fonts/enc
+AFM=.:../Fonts/afm
diff --git a/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/xglyph.c b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/xglyph.c
new file mode 100644
index 00000000000..f062132fcfb
--- /dev/null
+++ b/Build/source/libs/t1lib/t1lib-5.1.2/xglyph/xglyph.c
@@ -0,0 +1,4736 @@
+/*--------------------------------------------------------------------------
+ ----- File: xglyph.c
+ ----- Author: Rainer Menzner (Rainer.Menzner@web.de)
+ ----- Date: 2003-01-02
+ ----- Description: This file is part of the t1-library. The program xglyph
+ allows viewing of character- and string-glyphs. Diverse
+ parameters may be interactively configured.
+ ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-2003.
+ As of version 0.5, t1lib is distributed under the
+ GNU General Public Library Lincense. The
+ conditions can be found in the files LICENSE and
+ LGPL, which should reside in the toplevel
+ directory of the distribution. Please note that
+ there are parts of t1lib that are subject to
+ other licenses:
+ The parseAFM-package is copyrighted by Adobe Systems
+ Inc.
+ The type1 rasterizer is copyrighted by IBM and the
+ X11-consortium.
+ ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
+ ----- Credits: I want to thank IBM and the X11-consortium for making
+ their rasterizer freely available.
+ Also thanks to Piet Tutelaers for his ps2pk, from
+ which I took the rasterizer sources in a format
+ independent from X11.
+ Thanks to all people who make free software living!
+--------------------------------------------------------------------------*/
+
+/* definitions for activating special tests for features of t1lib
+ via commandline arguments: */
+#define CHECK_PERFORMANCE 0x0001
+#define CHECK_T1_COPYFONT_T1_ADDFONT 0x0002
+#define CHECK_CONCATGLYPHS 0x0004
+#define CHECK_CONCATOUTLINES 0x0008
+#define CHECK_FOR_BAD_CHARS 0x0010
+#define CHECK_DEFAULT_ENCODING 0x0020
+#define CHECK_SMART_AA 0x0040
+#define NO_GRID 0x0080
+#define CHECK_AA_CACHING 0x0100
+#define CHECK_CACHE_STROKED 0x0200
+#define CHECK_SET_RECT 0x0400
+
+/* #define SHOW_MANIPULATE_PATHS */
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/Command.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Dialog.h>
+#include <X11/Xaw/Box.h>
+#include <X11/Xaw/Toggle.h>
+#include <X11/Shell.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/List.h>
+
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+
+/* The following stuff is necessary for compiling and running
+ xglyph on VMS. Submitted by John Hasstedt (John.Hasstedt@sunysb.edu),
+ who did the VMS-port of t1lib. */
+#if defined(__VMS) && __CRTL_VER < 70000000
+# define putenv(p) \
+printf("You must define T1LIB_CONFIG before running this program\n"); \
+exit;
+# define gettimeofday(p1,p2)
+#endif
+
+
+/* Note: We include t1lib.h and t1libx.h from lib/t1lib. That way the
+ objectfile does only need to be rebuild when the header itself
+ changes and not each time the library has been recompiled */
+#include "../lib/t1lib/t1lib.h"
+#include "../lib/t1lib/t1libx.h"
+
+#ifndef PI
+#define PI 3.1415927
+#endif
+
+/* utility functions */
+BBox ComputeRotBBox( BBox, float);
+long time_diff(struct timeval *, struct timeval *);
+
+/* fallback-function */
+void exitprog( Widget, XtPointer, XtPointer);
+void togglekerning( Widget, XtPointer, XtPointer);
+void toggleligatur( Widget, XtPointer, XtPointer);
+void toggler2l( Widget, XtPointer, XtPointer);
+void toggleunderline( Widget, XtPointer, XtPointer);
+void toggleoverline( Widget, XtPointer, XtPointer);
+void toggleoverstrike( Widget, XtPointer, XtPointer);
+void showchar( Widget , XtPointer , XtPointer );
+void showstring( Widget , XtPointer , XtPointer );
+void aashowchar( Widget , XtPointer , XtPointer );
+void aashowstring( Widget , XtPointer , XtPointer );
+void showcharX( Widget , XtPointer , XtPointer );
+void showstringX( Widget , XtPointer , XtPointer );
+void aashowcharX( Widget , XtPointer , XtPointer );
+void aashowstringX( Widget , XtPointer , XtPointer );
+void showabout( Widget , XtPointer , XtPointer );
+void toggleopacity( Widget, XtPointer, XtPointer);
+void setcolor( Widget, XtPointer, XtPointer);
+void fonttable( Widget, XtPointer, XtPointer);
+void toggleaalevel( Widget, XtPointer, XtPointer);
+int ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels);
+void printusage( int max);
+int CheckTransform( void);
+
+
+
+
+#define DOUBLEMARGIN 10
+#define SIMPLEMARGIN 5
+#define XOUTPUT_HALFVSIZE 200
+#define XOUTPUT_HALFHSIZE 300
+#define XGLYPH_PAD 16
+#define T1LIBENCFILE "IsoLatin1.enc"
+#define MAXENCODINGS 10
+#define TESTFONTFILE "eufm10.pfb"
+#define SHOWGRID
+#define CROSS_SIZE 6
+
+#define PAD(bits, pad) (((bits)+(pad)-1)&-(pad))
+#define DIALOGWIDTH 170
+#define DIALOGHEIGHT 20
+#define ACTIONBUTTONHEIGHT 20
+#define APPLICATIONHEIGHT 690
+#define EDITABLE_COLOR "red"
+#define MESSAGEBOXHEIGHT 180
+#define AAMAXPLANES 17
+#define GRAY0 WhitePixel(display, screen_number)
+#define GRAY1 gray1.pixel
+#define GRAY2 gray2.pixel
+#define GRAY3 gray3.pixel
+#define GRAY4 BlackPixel(display, screen_number)
+
+#define min(a,b) (a < b ? a : b)
+#define max(a,b) (a > b ? a : b)
+
+
+#define DEFAULT_SIZE "100.0"
+#define DEFAULT_CHAR "65"
+
+/* Global variables for rasterizer parameters */
+float Size=400.0, Slant=0.0, Extent=1.0, Angle=0.0;
+int Modflag=0;
+int FontID=0, Caching=1, DeviceResolution=72;
+int StrokeWidth;
+int nofonts;
+
+long Space=0;
+int Opacity=0;
+int aalevel;
+char TestString[1024]="Test";
+int TestChar=70;
+char EncodingFile[128]="";
+char LastEncodingFile[128]="";
+struct
+{
+ char *encfilename;
+ char **encoding;
+}
+encstruct[MAXENCODINGS];
+
+int *last_resolution;
+float *lastExtent;
+float *lastSlant;
+int LigDetect=0;
+unsigned long fg, bg, outbg;
+Pixmap tmp_pixmap=0;
+Pixmap white_pixmap=0;
+
+
+Pixmap perf_pixmap;
+Pixmap pixmap;
+XImage *ximage;
+XColor edit_color, gray0, gray1, gray2, gray3, gray4;
+XColor white, black, gray, red, green, blue, pink4, yellow,
+ gridcolor1, gridcolor2,wozu;
+XColor aacolors[AAMAXPLANES];
+unsigned long aapixels[AAMAXPLANES];
+
+XGCValues xgcvalues;
+
+
+unsigned short dummy;
+char input;
+int overallwidth;
+char commandline[256];
+GLYPH *glyph;
+GLYPH *glyph1, *glyph2;
+char **Encoding=NULL;
+unsigned int height, width;
+char statusstring[1024];
+T1_TMATRIX matrix;
+T1_TMATRIX *matrixP;
+static char msg_buf[256];
+
+
+/* How t1lib pads lines: */
+int t1_pad=0;
+
+/* When to swap bytes in aa-pixels? */
+int xglyph_byte_order;
+
+/* The following is for time measurements: */
+struct timeval time_start, time_stop;
+struct timeval *time_ptr_start, *time_ptr_stop;
+void *void_ptr;
+
+
+
+/* Global X(t)-stuff */
+Display *display;
+Screen *screen;
+int screennumber;
+int depth;
+Widget TopLevel;
+Widget OutputWindow;
+Widget Output;
+Widget OutputWindow2;
+Widget Output2;
+Widget dialogfontid;
+Widget dialogsize;
+Widget dialogslant;
+Widget dialogextent;
+Widget dialogangle;
+Widget dialogteststring;
+Widget dialogtestcharacter;
+Widget dialogdevres;
+Widget dialogstroke;
+Widget dialogencfile;
+Widget dialogspace;
+Widget dialogtmatrix;
+Widget labelstatus;
+Widget fgcolorbutton;
+Widget bgcolorbutton;
+
+
+/* color setting widgets */
+Widget fgwhitebutton;
+Widget fgblackbutton;
+Widget fggraybutton;
+Widget fgredbutton;
+Widget fggreenbutton;
+Widget fgbluebutton;
+Widget bgwhitebutton;
+Widget bgblackbutton;
+Widget bggraybutton;
+Widget bgredbutton;
+Widget bggreenbutton;
+Widget bgbluebutton;
+Widget fglabel;
+Widget bglabel;
+Widget colorbox;
+Widget fgstatus;
+Widget bgstatus;
+
+
+Widget optionsbox;
+
+
+/* Commandline handling */
+char *xglyphoptions[]={"--help", /* 0 */
+ "--Help", /* 1 */
+ "--noGrid", /* 2 */
+ "--setPad", /* 3 */
+ "--logError", /* 4 */
+ "--logWarning", /* 5 */
+ "--logStatistic", /* 6 */
+ "--logDebug", /* 7 */
+ "--ignoreForceBold", /* 8 */
+ "--ignoreFamilyAlignment", /* 9 */
+ "--ignoreHinting", /* 10 */
+ "--ignoreAFM", /* 11 */
+ "--debugLine", /* 12 */
+ "--debugRegion", /* 13 */
+ "--debugPath", /* 14 */
+ "--debugFont", /* 15 */
+ "--debugHint", /* 16 */
+ "--checkPerformance", /* 17 */
+ "--checkCopyFont", /* 18 */
+ "--checkConcatGlyphs", /* 19 */
+ "--checkConcatOutlines", /* 20 */
+ "--checkBadCharHandling", /* 21 */
+ "--checkDefaultEncoding", /* 22 */
+ "--checkSmartAntialiasing", /* 23 */
+ "--checkAACaching", /* 24 */
+ "--checkSetRect", /* 25 */
+ "--cacheStrokedGlyphs", /* 26 */
+ NULL};
+int extraflags=0;
+
+/* #define SHOW_MANIPULATE_PATHS */
+#ifdef SHOW_MANIPULATE_PATHS
+void mymanipulate( long *x, long *y, int type)
+{
+ double corr;
+ double dx, dy;
+
+ dx=(double)*x;
+ dy=(double)*y;
+
+ /* we have to scale down because we deal with fractional pels */
+ /*
+ corr=0.000000000000004*dx*dx;
+ dy *=1.0+corr;
+ */
+ /*
+#define PERIOD 500.0
+ corr=65536.0*0.5*sin(2*PI/PERIOD/65536.0*dx);
+ dy +=corr*30.0;
+ */
+ *y=(long)dy;
+
+}
+#endif
+
+
+
+int main( int argc, char **argv)
+{
+
+
+ XtAppContext TopLevelApp;
+ Arg args[10];
+
+
+ int i, j, numopts=0;
+
+ Widget kerningbutton;
+ Widget ligaturbutton;
+ Widget r2lbutton;
+ Widget showcharbutton;
+ Widget showstringbutton;
+ Widget aashowcharbutton;
+ Widget aashowstringbutton;
+ Widget showcharbuttonX;
+ Widget showstringbuttonX;
+ Widget aashowcharbuttonX;
+ Widget aashowstringbuttonX;
+ Widget stringlabel;
+ Widget aboutbutton;
+ Widget opacitybutton;
+ Widget underlinebutton;
+ Widget overstrikebutton;
+ Widget overlinebutton;
+ Widget transbox;
+ Widget fonttablebutton;
+ Widget aalevelbutton;
+
+
+ Widget exitbutton;
+
+ Widget box;
+
+
+ int rasterflags=0, initflags=0, optfound;
+ int loglevel=0;
+
+ i=0;
+ j=0;
+
+ while (xglyphoptions[i++]!=NULL)
+ numopts++;
+
+ for ( i=1; i<argc; i++){
+ if (strncmp(&(argv[i][0]), "--", 2)==0){
+ j=0;
+ optfound=0;
+ while ( (j<numopts) && optfound==0){
+ if (strcmp(argv[i],xglyphoptions[j])==0){
+ switch (j){
+ case 0:
+ printusage( 8); /* Show 8 options */
+ exit(0);
+ case 1:
+ printusage( 0); /* Show all options */
+ exit(0);
+ case 2:
+ extraflags |= NO_GRID;
+ optfound=1;
+ break;
+ case 3:
+ /* We have to examine one further argument */
+ i++;
+ if (strcmp( argv[i], "8")==0)
+ t1_pad=8;
+ else if (strcmp( argv[i], "16")==0)
+ t1_pad=16;
+ else if (strcmp( argv[i], "32")==0)
+ t1_pad=32;
+ else{
+ fprintf( stderr, "xglyph: Invalid padding specification %s\n",
+ argv[i]);
+ exit(-1);
+ }
+ optfound=1;
+ break;
+ case 4:
+ loglevel = T1LOG_ERROR;
+ loglevel |= (0x01 << 8);
+ optfound=1;
+ break;
+ case 5:
+ loglevel = T1LOG_WARNING;
+ loglevel |= (0x01 << 8);
+ optfound=1;
+ break;
+ case 6:
+ loglevel = T1LOG_STATISTIC;
+ loglevel |= (0x01 << 8);
+ optfound=1;
+ break;
+ case 7:
+ loglevel = T1LOG_DEBUG;
+ loglevel |= (0x01 << 8);
+ optfound=1;
+ break;
+ case 8:
+ rasterflags |= T1_IGNORE_FORCEBOLD;
+ optfound=1;
+ break;
+ case 9:
+ rasterflags |= T1_IGNORE_FAMILYALIGNMENT;
+ optfound=1;
+ break;
+ case 10:
+ rasterflags |= T1_IGNORE_HINTING;
+ optfound=1;
+ break;
+ case 11:
+ initflags |= T1_NO_AFM;
+ optfound=1;
+ break;
+ case 12:
+ rasterflags |= T1_DEBUG_LINE;
+ optfound=1;
+ break;
+ case 13:
+ rasterflags |= T1_DEBUG_REGION;
+ optfound=1;
+ break;
+ case 14:
+ rasterflags |= T1_DEBUG_PATH;
+ optfound=1;
+ break;
+ case 15:
+ rasterflags |= T1_DEBUG_FONT;
+ optfound=1;
+ break;
+ case 16:
+ rasterflags |= T1_DEBUG_HINT;
+ optfound=1;
+ break;
+ case 17:
+ extraflags |= CHECK_PERFORMANCE;
+ optfound=1;
+ break;
+ case 18:
+ extraflags |= CHECK_T1_COPYFONT_T1_ADDFONT;
+ optfound=1;
+ break;
+ case 19:
+ extraflags |= CHECK_CONCATGLYPHS;
+ optfound=1;
+ break;
+ case 20:
+ extraflags |= CHECK_CONCATOUTLINES;
+ optfound=1;
+ break;
+ case 21:
+ extraflags |= CHECK_FOR_BAD_CHARS;
+ optfound=1;
+ break;
+ case 22:
+ extraflags |= CHECK_DEFAULT_ENCODING;
+ optfound=1;
+ break;
+ case 23:
+ extraflags |= CHECK_SMART_AA;
+ optfound=1;
+ break;
+ case 24:
+ extraflags |= CHECK_AA_CACHING;
+ optfound=1;
+ break;
+ case 25:
+ extraflags |= CHECK_SET_RECT;
+ optfound = 1;
+ break;
+ case 26:
+ extraflags |= CHECK_CACHE_STROKED;
+ optfound = 1;
+ break;
+ default: /* should not be reached */
+ break;
+ }
+ } /* end of "if (strcmp.." */
+ j++;
+ }
+ if (optfound==0){
+ fprintf( stderr, "xglyph: Unknown option %s\n",
+ argv[i]);
+ exit(-1);
+ }
+ }
+ else /* string doesn't start with "--" -> no option */
+ break;
+ }
+
+
+ /* Assign address of time parameter */
+ time_ptr_start=&time_start;
+ time_ptr_stop=&time_stop;
+
+ /* Check for environment entry. If not set, set it to current
+ directory so that configuration file is found there */
+ if (getenv("T1LIB_CONFIG")==NULL){
+ putenv( "T1LIB_CONFIG=./t1lib.config");
+ }
+
+
+ /* Set log-level: */
+ T1_SetLogLevel( loglevel & (~(0x01<<8)));
+
+
+ /* Get padding value if not set from commandline. For 32 bit architectures
+ like Intel, 16 might be the best padding default value: */
+ if (t1_pad==0)
+ t1_pad=16;
+ if (T1_SetBitmapPad( t1_pad)!=0){
+ t1_pad=T1_GetBitmapPad();
+ }
+
+
+ /* Initialize t1-library. If xglyph is called with arguments
+ that are no options, we assume that the arguments are font
+ files and ignore the fontdata base file. At this point the value of
+ "i" is the number of commandline arg that is supposed to contain a
+ fontfile name (or it is argc, if no files where specified).
+
+ Note further that "loglevel" contains (1) info whether to create a log
+ file in the first bit of the higher byte of the lower word and
+ (2) info which loglevel to set. (3) It further may contain more
+ initialization flags.
+ */
+ if ((extraflags & CHECK_AA_CACHING)){
+ loglevel |= (T1_AA_CACHING<<8);
+ }
+
+ if (i==argc){
+ if (T1_InitLib( (loglevel>>8) | initflags )==NULL){
+ fprintf(stderr,"Initialization of t1lib failed (T1_errno=%d)!\n",
+ T1_errno);
+ return(-1);
+ }
+ }
+ else{ /* There are still arguments which we interprete as fontfile names */
+ if (T1_InitLib( (loglevel>>8) | initflags | IGNORE_FONTDATABASE )==NULL){
+ fprintf(stderr,"Initialization of t1lib failed (T1_errno=%d)!\n",
+ T1_errno);
+ return(-1);
+ }
+ /* We start adding fonts as the i-th commandline arguments */
+ for ( j=i; j<argc; j++){
+ T1_AddFont( argv[j]);
+ }
+ }
+
+ /* We return if no fonts could be installed */
+ if ((j=T1_GetNoFonts())<=0){
+ fprintf(stderr,"xglyph: No fonts in database (T1_errno=%d)!\n", T1_errno);
+ return(-1);
+ }
+
+ /* Set the raster parameters */
+ T1_SetRasterFlags( rasterflags);
+
+
+ /* Load alternate encoding and associate it with filename: */
+ encstruct[0].encoding=T1_LoadEncoding(T1LIBENCFILE);
+ encstruct[0].encfilename=(char *)malloc(strlen(T1LIBENCFILE)+1);
+ strcpy( encstruct[0].encfilename, T1LIBENCFILE);
+ for ( i=1; i<MAXENCODINGS; i++){
+ encstruct[i].encoding=NULL;
+ encstruct[i].encfilename=NULL;
+ }
+
+
+ /* If requested, set a default encoding vector */
+ if (extraflags & CHECK_DEFAULT_ENCODING){
+ T1_SetDefaultEncoding( encstruct[0].encoding);
+ }
+
+
+ if( extraflags & CHECK_T1_COPYFONT_T1_ADDFONT){
+ {
+ int k;
+
+ /* The following code is to test the T1_CopyFont()-function. It
+ generates logical fonts with IDs twice the ID of the original
+ font which are then slanted by 0.3. */
+ nofonts=T1_GetNoFonts();
+ printf("Initial number of fonts: %d\n", nofonts);
+
+ for (i=0; i< nofonts; i++){
+ T1_LoadFont(i);
+ if ((k=T1_CopyFont(i))<0){
+ fprintf(stderr,"T1_CopyFont() unsuccessful (k=%d), for FontID=%d\n", k, i);
+ }else{
+ T1_SlantFont(k,0.3);
+ fprintf(stderr,"Slanted Font under FontID %d generated\n", k);
+ }
+ }
+ fprintf( stderr, "T1_AddFont() returned newID %d for fontfile %s!\n",
+ T1_AddFont( TESTFONTFILE), TESTFONTFILE);
+
+ nofonts=T1_GetNoFonts();
+ printf("Final number of fonts: %d\n", nofonts);
+ }
+ }
+
+ /* Setup arrays for the last... values */
+ nofonts=T1_GetNoFonts();
+ if ( (last_resolution=(int *) malloc ( nofonts * sizeof(int)))==NULL){
+ fprintf( stderr, "xglyph: memory allocation error\n");
+ exit(1);
+ }
+ else
+ for (i=0; i<nofonts; i++)
+ last_resolution[i]=72;
+ if ( (lastSlant=(float *) malloc ( nofonts * sizeof(float)))==NULL){
+ fprintf( stderr, "xglyph: memory allocation error\n");
+ exit(1);
+ }
+ else
+ for (i=0; i<nofonts; i++)
+ lastSlant[i]=0.0;
+ if ( (lastExtent=(float *) malloc ( nofonts * sizeof(float)))==NULL){
+ fprintf( stderr, "xglyph: memory allocation error\n");
+ exit(1);
+ }
+ else
+ for (i=0; i<nofonts; i++)
+ lastExtent[i]=1.0;
+
+ if (extraflags & CHECK_SMART_AA)
+ T1_AASetSmartMode( T1_YES);
+
+ /* If checking caching of stroked characters is enabled via command line,
+ we call T1_StrokeFont() on each font in the database. This is valid
+ here since we do not already have glyph data. */
+ if ( extraflags & CHECK_CACHE_STROKED ) {
+ for ( i=0; i<nofonts; i++) {
+ T1_LoadFont(i);
+ T1_StrokeFont( i, 1);
+ }
+ }
+
+ /* Initialize application */
+ TopLevel = XtAppInitialize(&TopLevelApp, (String) "Xglyph", (XrmOptionDescList) NULL,
+ (Cardinal) 0,
+ &argc,
+ argv,
+ (String *) NULL,
+ (ArgList) NULL,
+ (Cardinal) 0);
+ i=0;
+ XtSetArg(args[i], XtNheight, APPLICATIONHEIGHT); i++;
+ XtSetValues(TopLevel,args,i);
+
+ /* Create window for graphics output */
+ Output = XtCreatePopupShell( "Xglyph-Output", topLevelShellWidgetClass,
+ TopLevel, NULL,0);
+
+ OutputWindow = XtCreateManagedWidget("xglyph-Output",labelWidgetClass, Output,
+ NULL, 0);
+
+
+ /* Get display/screen pointer and screennumber */
+ display = XtDisplay(OutputWindow);
+ screen = XtScreen(OutputWindow);
+ screennumber = DefaultScreen(display);
+ depth = DefaultDepth(display,screennumber);
+
+
+ /* In case client and server have different endian architecture,
+ we have to care for the 16 and 32 bit aa-pixels to have the
+ correct byte order */
+ if (T1_CheckEndian()==0)
+ xglyph_byte_order=0;
+ else
+ xglyph_byte_order=1;
+
+
+ if( extraflags & CHECK_PERFORMANCE){
+ perf_pixmap=0;
+ /* The following is for testing only */
+ Output2 = XtCreatePopupShell( "Xglyph-Output2", topLevelShellWidgetClass,
+ TopLevel, NULL,0);
+
+ OutputWindow2 = XtCreateManagedWidget("xglyph-Output2",labelWidgetClass, Output2,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 800 ); i++;
+ XtSetArg( args[i], XtNheight, 600 ); i++;
+ XtSetValues(OutputWindow2,args,i);
+ }
+
+
+ /* Get colors and assign pixel values: */
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), EDITABLE_COLOR,
+ &edit_color, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "green",
+ &green, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "blue",
+ &blue, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "black",
+ &gray4, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "gray25",
+ &gray3, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "gray50",
+ &gray2, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "gray75",
+ &gray1, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "white",
+ &gray0, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "yellow",
+ &yellow, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "pink4",
+ &pink4, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "cyan",
+ &gridcolor1, &wozu);
+ XAllocNamedColor(display, DefaultColormap(display,screennumber), "magenta",
+ &gridcolor2, &wozu);
+ white=gray0;
+ black=gray4;
+ gray=gray1;
+ red=edit_color;
+ /* Fill the aacolors and aapixels-array */
+ ComputeAAColorsX( black.pixel, white.pixel, AAMAXPLANES);
+
+
+ /* Set default colors for X11 rastering functions */
+ fg=black.pixel;
+ bg=white.pixel;
+
+
+ T1_AASetBitsPerPixel(DefaultDepth(display,screennumber));
+ /* T1_LogicalPositionX( 0); */
+
+
+ /* The box-widget for all the buttons */
+ box=XtCreateManagedWidget("xglyph", boxWidgetClass, TopLevel, NULL, 0);
+
+ i=0;
+ XtSetArg(args[i], XtNheight,400); i++;
+ XtSetValues(box,args,i);
+
+
+ /* A dialogbox for the fontID-specification */
+ dialogfontid=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "FontID:"); i++;
+ XtSetArg(args[i], XtNvalue, "0"); i++;
+ XtSetValues(dialogfontid,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogfontid,"value"),args,i);
+
+
+
+ /* A dialogbox for the font-Size */
+ dialogsize=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Font-Size [bp]:"); i++;
+ XtSetArg(args[i], XtNvalue, DEFAULT_SIZE); i++;
+ XtSetValues(dialogsize,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogsize,"value"),args,i);
+
+
+
+ /* A dialogbox for the font slant specification */
+ dialogslant=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Slant:"); i++;
+ XtSetArg(args[i], XtNvalue, "0.0"); i++;
+ XtSetValues(dialogslant,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH / 2 - 8); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogslant,"value"),args,i);
+
+
+
+ /* A dialogbox for the font-extension */
+ dialogextent=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Extension:"); i++;
+ XtSetArg(args[i], XtNvalue, "1.0"); i++;
+ XtSetValues(dialogextent,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH / 2 - 8); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogextent,"value"),args,i);
+
+
+
+ /* transformation matrix dialog widget */
+ dialogtmatrix = XtCreateManagedWidget( "dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Transformation-Matrix:"); i++;
+ XtSetArg(args[i], XtNvalue, "1.0, 0.0, 0.0, 1.0"); i++;
+ XtSetValues(dialogtmatrix,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogtmatrix,"value"),args,i);
+
+
+
+ /* A dialogbox for the device resolution */
+ dialogdevres=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Res [DPI]"); i++;
+ XtSetArg(args[i], XtNvalue, "72"); i++;
+ XtSetValues(dialogdevres,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH / 2 - 8); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogdevres,"value"),args,i);
+
+
+
+ /* A dialogbox for the strokewidth */
+ dialogstroke=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "S-Width"); i++;
+ if ( extraflags & CHECK_CACHE_STROKED ) {
+ XtSetArg(args[i], XtNvalue, "10");
+ i++;
+ }
+ else {
+ XtSetArg(args[i], XtNvalue, "0");
+ i++;
+ }
+ XtSetValues(dialogstroke,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH / 2 - 8); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogstroke,"value"),args,i);
+
+
+
+ /* A dialogbox for the encoding filename */
+ dialogencfile=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Encoding-File:"); i++;
+ XtSetArg(args[i], XtNvalue, ""); i++;
+ XtSetValues(dialogencfile,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogencfile,"value"),args,i);
+
+
+
+ /* A dialogbox for the angle */
+ dialogangle=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Angle [deg]:"); i++;
+ XtSetArg(args[i], XtNvalue, "0.0"); i++;
+ XtSetValues(dialogangle,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogangle,"value"),args,i);
+
+
+
+ /* A dialogbox for the space-offset in strings */
+ dialogspace=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Space-Off [1/1000 bp]:"); i++;
+ XtSetArg(args[i], XtNvalue, "0"); i++;
+ XtSetValues(dialogspace,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogspace,"value"),args,i);
+
+
+
+ /* A dialogbox for the character */
+ dialogtestcharacter=XtCreateManagedWidget("dialog1", dialogWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNlabel, "Character (decimal):"); i++;
+ XtSetArg(args[i], XtNvalue, DEFAULT_CHAR); i++;
+ XtSetValues(dialogtestcharacter,args,i);
+ i=0;
+ XtSetArg(args[i], XtNwidth,DIALOGWIDTH); i++;
+ XtSetArg(args[i], XtNheight,DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNresize, FALSE); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(XtNameToWidget(dialogtestcharacter,"value"),args,i);
+
+
+
+ /* The box for color selecting buttons for the
+ X11-rastering functions */
+ optionsbox=XtCreateManagedWidget("box", boxWidgetClass, box, NULL, 0);
+
+ i=0;
+ XtSetArg(args[i], XtNheight, DIALOGHEIGHT); i++;
+ XtSetArg(args[i], XtNwidth, DIALOGWIDTH + 30); i++;
+ XtSetValues(optionsbox,args,i);
+ /* The toggle widget for kerning (un-)setting */
+ kerningbutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "Kerning" ); i++;
+ XtSetValues(kerningbutton,args,i);
+ XtAddCallback( kerningbutton, XtNcallback,
+ (XtCallbackProc) togglekerning, (XtPointer) 0 );
+
+
+ /* The toggle widget for ligatur-detection (un-)setting */
+ ligaturbutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "Ligature" ); i++;
+ XtSetValues(ligaturbutton,args,i);
+ XtAddCallback( ligaturbutton, XtNcallback,
+ (XtCallbackProc) toggleligatur, (XtPointer) 0 );
+
+
+ /* The toggle widget for the typesetting direction switch message */
+ r2lbutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "|-->" ); i++;
+ XtSetValues(r2lbutton,args,i);
+ XtAddCallback( r2lbutton, XtNcallback,
+ (XtCallbackProc) toggler2l, (XtPointer) 0 );
+
+
+ /* The toggle widget for underlining (un-)setting */
+ underlinebutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "Underline" ); i++;
+ XtSetValues(underlinebutton,args,i);
+ XtAddCallback( underlinebutton, XtNcallback,
+ (XtCallbackProc) toggleunderline, (XtPointer) 0 );
+
+
+ /* The toggle widget for underlining (un-)setting */
+ overlinebutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "Overline" ); i++;
+ XtSetValues(overlinebutton,args,i);
+ XtAddCallback( overlinebutton, XtNcallback,
+ (XtCallbackProc) toggleoverline, (XtPointer) 0 );
+
+
+ /* The toggle widget for underlining (un-)setting */
+ overstrikebutton = XtCreateManagedWidget("toggle", toggleWidgetClass, optionsbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "Overstrike" ); i++;
+ XtSetValues(overstrikebutton,args,i);
+ XtAddCallback( overstrikebutton, XtNcallback,
+ (XtCallbackProc) toggleoverstrike, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current character using
+ the current settings */
+ showcharbutton = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 60 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "Char"); i++;
+ XtSetValues(showcharbutton,args,i);
+ XtAddCallback( showcharbutton, XtNcallback,
+ (XtCallbackProc) showchar, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current string using
+ the current settings */
+ showstringbutton = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 60 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "String"); i++;
+ XtSetValues(showstringbutton,args,i);
+ XtAddCallback( showstringbutton, XtNcallback,
+ (XtCallbackProc) showstring, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current character using
+ the current settings and antialiasing */
+ aashowcharbutton = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 120 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "AAChar"); i++;
+ XtSetValues(aashowcharbutton,args,i);
+ XtAddCallback( aashowcharbutton, XtNcallback,
+ (XtCallbackProc) aashowchar, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current string using
+ the current settings and antialiasing */
+ aashowstringbutton = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 120 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "AAString"); i++;
+ XtSetValues(aashowstringbutton,args,i);
+ XtAddCallback( aashowstringbutton, XtNcallback,
+ (XtCallbackProc) aashowstring, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current character using
+ the current settings */
+ showcharbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 60 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "CharX"); i++;
+ XtSetValues(showcharbuttonX,args,i);
+ XtAddCallback( showcharbuttonX, XtNcallback,
+ (XtCallbackProc) showcharX, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current string using
+ the current settings */
+ showstringbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 60 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "StringX"); i++;
+ XtSetValues(showstringbuttonX,args,i);
+ XtAddCallback( showstringbuttonX, XtNcallback,
+ (XtCallbackProc) showstringX, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current character using
+ the current settings and antialiasing */
+ aashowcharbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 120 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "AACharX"); i++;
+ XtSetValues(aashowcharbuttonX,args,i);
+ XtAddCallback( aashowcharbuttonX, XtNcallback,
+ (XtCallbackProc) aashowcharX, (XtPointer) 0 );
+
+
+ /* The button to raster and display the current string using
+ the current settings and antialiasing */
+ aashowstringbuttonX = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 120 ); i++;
+ XtSetArg( args[i], XtNheight, ACTIONBUTTONHEIGHT ); i++;
+ XtSetArg( args[i], XtNlabel, "AAStringX"); i++;
+ XtSetValues(aashowstringbuttonX,args,i);
+ XtAddCallback( aashowstringbuttonX, XtNcallback,
+ (XtCallbackProc) aashowstringX, (XtPointer) 0 );
+
+
+ /* The box for color trasp/op and fonttable button */
+ transbox=XtCreateManagedWidget("box", boxWidgetClass, box, NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNheight,20); i++;
+ XtSetArg(args[i], XtNwidth,90); i++;
+ XtSetValues(transbox,args,i);
+
+
+ /* The button to display an AA font table */
+ fonttablebutton = XtCreateManagedWidget("Com", commandWidgetClass, transbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 80 ); i++;
+ XtSetArg( args[i], XtNheight, 15 ); i++;
+ XtSetArg( args[i], XtNlabel, "Font Table"); i++;
+ XtSetValues(fonttablebutton,args,i);
+ XtAddCallback( fonttablebutton, XtNcallback,
+ (XtCallbackProc) fonttable, (XtPointer) 0 );
+
+
+ /* The toggle widget for opacity/transparency */
+ opacitybutton = XtCreateManagedWidget("toggle", toggleWidgetClass, transbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 80 ); i++;
+ XtSetArg( args[i], XtNheight, 15 ); i++;
+ XtSetArg( args[i], XtNlabel, "Transparent" ); i++;
+ XtSetValues(opacitybutton,args,i);
+ XtAddCallback( opacitybutton, XtNcallback,
+ (XtCallbackProc) toggleopacity, (XtPointer) 0 );
+ outbg=pink4.pixel; /* the initial bgcolor for transparent mode */
+
+
+ /* The toggle widget for opacity/transparency */
+ aalevelbutton = XtCreateManagedWidget("toggle", toggleWidgetClass, transbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 80 ); i++;
+ XtSetArg( args[i], XtNheight, 15 ); i++;
+ XtSetArg( args[i], XtNlabel, "AA-Low" ); i++;
+ XtSetValues(aalevelbutton,args,i);
+ XtAddCallback( aalevelbutton, XtNcallback,
+ (XtCallbackProc) toggleaalevel, (XtPointer) 0 );
+ aalevel=T1_AA_LOW; /* the initial bgcolor for transparent mode */
+
+
+ /* The box for color selecting buttons for the
+ X11-rastering functions */
+ colorbox=XtCreateManagedWidget("box", boxWidgetClass, box, NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNheight,20); i++;
+ XtSetArg(args[i], XtNwidth,280); i++;
+ XtSetValues(colorbox,args,i);
+ /* FG-label */
+ fgstatus = XtCreateManagedWidget("label", labelWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, fg); i++;
+ XtSetValues(fgstatus,args,i);
+
+ fglabel = XtCreateManagedWidget("label", labelWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 80 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "Foreground"); i++;
+ XtSetValues(fglabel,args,i);
+
+ fgwhitebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, white.pixel); i++;
+ XtSetValues(fgwhitebutton,args,i);
+ XtAddCallback( fgwhitebutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ fgblackbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, black.pixel); i++;
+ XtSetValues(fgblackbutton,args,i);
+ XtAddCallback( fgblackbutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ fggraybutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, gray.pixel); i++;
+ XtSetValues(fggraybutton,args,i);
+ XtAddCallback( fggraybutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ fgredbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, red.pixel); i++;
+ XtSetValues(fgredbutton,args,i);
+ XtAddCallback( fgredbutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ fggreenbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, green.pixel); i++;
+ XtSetValues(fggreenbutton,args,i);
+ XtAddCallback( fggreenbutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ fgbluebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, blue.pixel); i++;
+ XtSetValues(fgbluebutton,args,i);
+ XtAddCallback( fgbluebutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ /* BG-label */
+ bgstatus = XtCreateManagedWidget("label", labelWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, bg); i++;
+ XtSetValues(bgstatus,args,i);
+
+ bglabel = XtCreateManagedWidget("label", labelWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 80 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "Background"); i++;
+ XtSetValues(bglabel,args,i);
+
+ bgwhitebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, white.pixel); i++;
+ XtSetValues(bgwhitebutton,args,i);
+ XtAddCallback( bgwhitebutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ bgblackbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, black.pixel); i++;
+ XtSetValues(bgblackbutton,args,i);
+ XtAddCallback( bgblackbutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ bggraybutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, gray.pixel); i++;
+ XtSetValues(bggraybutton,args,i);
+ XtAddCallback( bggraybutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ bgredbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, red.pixel); i++;
+ XtSetValues(bgredbutton,args,i);
+ XtAddCallback( bgredbutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ bggreenbutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, green.pixel); i++;
+ XtSetValues(bggreenbutton,args,i);
+ XtAddCallback( bggreenbutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+ bgbluebutton = XtCreateManagedWidget("Com", commandWidgetClass, colorbox,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 20 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, ""); i++;
+ XtSetArg( args[i], XtNbackground, blue.pixel); i++;
+ XtSetValues(bgbluebutton,args,i);
+ XtAddCallback( bgbluebutton, XtNcallback,
+ (XtCallbackProc) setcolor, (XtPointer) 0 );
+
+
+
+ /* Label for the next box */
+ stringlabel=XtCreateManagedWidget("Label", labelWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNlabel, "Test-String:"); i++;
+ XtSetValues(stringlabel,args,i);
+
+
+
+
+ /* An input-box for the test-string */
+ dialogteststring=XtCreateManagedWidget("dialog1", asciiTextWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight,30); i++;
+ XtSetArg(args[i], XtNwrap, XawtextWrapLine); i++;
+ XtSetArg(args[i], XtNeditType, XawtextEdit ); i++;
+ XtSetArg(args[i], XtNforeground, edit_color.pixel); i++;
+ XtSetValues(dialogteststring,args,i);
+
+
+
+ /* Label for the next box */
+ labelstatus=XtCreateManagedWidget("Label", labelWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, "No Messages!"); i++;
+ XtSetValues(labelstatus,args,i);
+
+
+
+ /* The button to exit the program */
+ exitbutton = XtCreateManagedWidget("Com2", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 100 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNx, 0 ); i++;
+ XtSetArg( args[i], XtNy, 0 ); i++;
+ XtSetArg( args[i], XtNlabel, " Exit Program"); i++;
+ XtSetValues(exitbutton,args,i);
+ XtAddCallback( exitbutton, XtNcallback,
+ (XtCallbackProc) exitprog, (XtPointer) 0 );
+
+
+ /* The About widget for the about message */
+ aboutbutton = XtCreateManagedWidget("Com", commandWidgetClass, box,
+ NULL, 0);
+ i=0;
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "About" ); i++;
+ XtSetValues(aboutbutton,args,i);
+ XtAddCallback( aboutbutton, XtNcallback,
+ (XtCallbackProc) showabout, (XtPointer) 0 );
+
+
+ XtRealizeWidget(TopLevel);
+ XtPopup(Output,XtGrabNone);
+
+ if( extraflags & CHECK_PERFORMANCE){
+ XtPopup(Output2,XtGrabNone);
+ }
+
+
+ /* Set parameters for X11-support */
+ T1_SetX11Params( display, DefaultVisual(display, screennumber),
+ DefaultDepth( display, screennumber),
+ DefaultColormap(display, screennumber));
+
+
+ /* Create a dummy-pixmap because we need one to destroy before
+ the next is created! */
+ pixmap = XCreatePixmap(display,
+ XtWindow(OutputWindow),
+ 200,
+ 200,
+ DefaultDepth(display,screennumber)
+ );
+
+
+
+ XtAppMainLoop(TopLevelApp);
+
+ return(0);
+
+}
+
+
+/* Compute the BBox of a rotated box: */
+BBox ComputeRotBBox( BBox inbox, float angle)
+{
+
+ int i;
+ BBox resultbox={ 0, 0, 0, 0};
+ struct point
+ {
+ double x;
+ double y;
+ } p[4], P[4];
+
+ double sinalpha, cosalpha;
+
+ sinalpha=sin((double)angle*PI/180);
+ cosalpha=cos((double)angle*PI/180);
+
+ /* initialize points */
+ p[0].x=(double) inbox.llx;
+ p[0].y=(double) inbox.lly;
+ p[1].x=(double) inbox.urx;
+ p[1].y=(double) inbox.lly;
+ p[2].x=(double) inbox.urx;
+ p[2].y=(double) inbox.ury;
+ p[3].x=(double) inbox.llx;
+ p[3].y=(double) inbox.ury;
+
+ /*
+ fprintf( stderr, "InBox: (%f,%f), (%f,%f), (%f,%f), (%f,%f)\n",
+ p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y,
+ p[3].x, p[3].y);
+ */
+ /* Compute tranformed points */
+ P[0].x=p[0].x*cosalpha-p[0].y*sinalpha;
+ P[0].y=p[0].x*sinalpha+p[0].y*cosalpha;
+ P[1].x=p[1].x*cosalpha-p[1].y*sinalpha;
+ P[1].y=p[1].x*sinalpha+p[1].y*cosalpha;
+ P[2].x=p[2].x*cosalpha-p[2].y*sinalpha;
+ P[2].y=p[2].x*sinalpha+p[2].y*cosalpha;
+ P[3].x=p[3].x*cosalpha-p[3].y*sinalpha;
+ P[3].y=p[3].x*sinalpha+p[3].y*cosalpha;
+ /*
+ fprintf( stderr, "RotPoints: (%f,%f), (%f,%f), (%f,%f), (%f,%f)\n",
+ P[0].x, P[0].y, P[1].x, P[1].y, P[2].x, P[2].y,
+ P[3].x, P[3].y);
+ */
+
+ /* Get BBox: */
+ for (i=0; i<4; i++){
+ if (P[i].x < (float) resultbox.llx)
+ resultbox.llx=(int) floor(P[i].x +0.5);
+ if (P[i].x > (float) resultbox.urx)
+ resultbox.urx=(int) floor(P[i].x +0.5);
+ if (P[i].y < (float) resultbox.lly)
+ resultbox.lly=(int) floor(P[i].y +0.5);
+ if (P[i].y > (float) resultbox.ury)
+ resultbox.ury=(int) floor(P[i].y +0.5);
+ }
+
+ return(resultbox);
+
+}
+
+
+
+
+void exitprog(Widget exitbutton, XtPointer client_data , XtPointer call_data)
+{
+
+ int i;
+
+ for (i=0; i< T1_GetNoFonts(); i++){
+ /* printf("Enc-Scheme=%s\n", T1_GetEncodingScheme( i));*/
+ ;
+ }
+
+ T1_CloseLib();
+
+ exit(0);
+}
+
+
+void togglekerning( Widget kerningbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues(kerningbutton,args,1);
+
+ if ((state))
+ Modflag |= T1_KERNING;
+ else
+ Modflag &= ~T1_KERNING;
+
+}
+
+
+
+void toggleligatur( Widget ligaturbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues(ligaturbutton,args,1);
+
+ LigDetect=state;
+
+}
+
+
+
+void toggler2l( Widget r2lbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues(r2lbutton,args,1);
+
+ if ((state))
+ Modflag |= T1_RIGHT_TO_LEFT;
+ else
+ Modflag &= ~T1_RIGHT_TO_LEFT;
+
+ /* Invert state */
+ i=0;
+ if (state){
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "<--|" ); i++;
+ }
+ else{
+ XtSetArg( args[i], XtNwidth, 55 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+ XtSetArg( args[i], XtNlabel, "|-->" ); i++;
+ }
+ XtSetValues(r2lbutton,args,i);
+}
+
+
+
+void toggleunderline( Widget underlinebutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues(underlinebutton,args,1);
+
+ if ((state))
+ Modflag |= T1_UNDERLINE;
+ else
+ Modflag &= ~T1_UNDERLINE;
+
+}
+
+
+
+void toggleoverline( Widget overlinebutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues( overlinebutton,args,1);
+
+ if ((state))
+ Modflag |= T1_OVERLINE;
+ else
+ Modflag &= ~T1_OVERLINE;
+
+}
+
+
+
+void toggleoverstrike( Widget overstrikebutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues( overstrikebutton,args,1);
+
+ if ((state))
+ Modflag |= T1_OVERSTRIKE;
+ else
+ Modflag &= ~T1_OVERSTRIKE;
+
+}
+
+
+
+void toggleopacity( Widget opacitybutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues(opacitybutton,args,1);
+
+ i=0;
+ XtSetArg( args[i], XtNstate, state); i++;
+ XtSetArg( args[i], XtNwidth, 80 ); i++;
+ XtSetArg( args[i], XtNheight, 20 ); i++;
+
+ Opacity=state;
+
+ /* Invert state */
+ if (state){
+ XtSetArg( args[i], XtNlabel, "Opaque" ); i++;
+ XtSetValues(opacitybutton,args,i);
+ outbg=bg;
+ }
+ else{
+ XtSetArg( args[i], XtNlabel, "Transparent" ); i++;
+ XtSetValues(opacitybutton,args,i);
+ outbg=pink4.pixel;
+ }
+
+}
+
+
+
+/* Toggle the antialiasing level */
+void toggleaalevel( Widget aalevelbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char state=0;
+ Arg args[10];
+
+
+ /* Get state of toggle Button: */
+ i=0;
+ XtSetArg(args[i], XtNstate, &state); i++;
+ XtGetValues( aalevelbutton,args,1);
+
+ i=0;
+ XtSetArg( args[i], XtNstate, state); i++;
+ XtSetArg( args[i], XtNwidth, 80 ); i++;
+ XtSetArg( args[i], XtNheight, 15 ); i++;
+
+
+ /* Invert state */
+ if (state){
+ XtSetArg( args[i], XtNlabel, "AA-High" ); i++;
+ XtSetValues(aalevelbutton,args,i);
+ aalevel=T1_AA_HIGH;
+ }
+ else{
+ XtSetArg( args[i], XtNlabel, "AA-Low" ); i++;
+ XtSetValues(aalevelbutton,args,i);
+ aalevel=T1_AA_LOW;
+ }
+
+}
+
+
+
+/* Set a new fore/background color */
+void setcolor( Widget widget, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ Arg args[10];
+
+ /* foreground colors */
+ if (widget==fgwhitebutton){
+ fg=white.pixel;
+ i=0;
+ XtSetArg( args[i], XtNbackground, fg ); i++;
+ XtSetValues(fgstatus,args,i);
+ return;
+ }
+ if (widget==fgblackbutton){
+ fg=black.pixel;
+ i=0;
+ XtSetArg( args[i], XtNbackground, fg ); i++;
+ XtSetValues(fgstatus,args,i);
+ return;
+ }
+ if (widget==fggraybutton){
+ fg=gray.pixel;
+ i=0;
+ XtSetArg( args[i], XtNbackground, fg ); i++;
+ XtSetValues(fgstatus,args,i);
+ return;
+ }
+ if (widget==fgredbutton){
+ fg=red.pixel;
+ i=0;
+ XtSetArg( args[i], XtNbackground, fg ); i++;
+ XtSetValues(fgstatus,args,i);
+ return;
+ }
+ if (widget==fggreenbutton){
+ fg=green.pixel;
+ i=0;
+ XtSetArg( args[i], XtNbackground, fg ); i++;
+ XtSetValues(fgstatus,args,i);
+ return;
+ }
+ if (widget==fgbluebutton){
+ fg=blue.pixel;
+ i=0;
+ XtSetArg( args[i], XtNbackground, fg ); i++;
+ XtSetValues(fgstatus,args,i);
+ return;
+ }
+ /* background colors */
+ if (widget==bgwhitebutton){
+ bg=white.pixel;
+ if (Opacity)
+ outbg=bg;
+ i=0;
+ XtSetArg( args[i], XtNbackground, bg ); i++;
+ XtSetValues(bgstatus,args,i);
+ return;
+ }
+ if (widget==bgblackbutton){
+ bg=black.pixel;
+ if (Opacity)
+ outbg=bg;
+ i=0;
+ XtSetArg( args[i], XtNbackground, bg ); i++;
+ XtSetValues(bgstatus,args,i);
+ return;
+ }
+ if (widget==bggraybutton){
+ bg=gray.pixel;
+ if (Opacity)
+ outbg=bg;
+ i=0;
+ XtSetArg( args[i], XtNbackground, bg ); i++;
+ XtSetValues(bgstatus,args,i);
+ return;
+ }
+ if (widget==bgredbutton){
+ bg=red.pixel;
+ if (Opacity)
+ outbg=bg;
+ i=0;
+ XtSetArg( args[i], XtNbackground, bg ); i++;
+ XtSetValues(bgstatus,args,i);
+ return;
+ }
+ if (widget==bggreenbutton){
+ bg=green.pixel;
+ if (Opacity)
+ outbg=bg;
+ i=0;
+ XtSetArg( args[i], XtNbackground, bg ); i++;
+ XtSetValues(bgstatus,args,i);
+ return;
+ }
+ if (widget==bgbluebutton){
+ bg=blue.pixel;
+ if (Opacity)
+ outbg=bg;
+ i=0;
+ XtSetArg( args[i], XtNbackground, bg ); i++;
+ XtSetValues(bgstatus,args,i);
+ return;
+ }
+ /* we shouldn't get here */
+ return;
+
+}
+
+
+
+void showchar( Widget showcharbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i, j;
+ Arg args[10];
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ XSetForeground( display, DefaultGC( display, screennumber), black.pixel);
+ XSetBackground( display, DefaultGC( display, screennumber), white.pixel);
+ /* Reset T1_errno: */
+ T1_errno=0;
+ gettimeofday(time_ptr_start, void_ptr);
+ if ( extraflags & CHECK_SET_RECT )
+ glyph=T1_SetRect( FontID, Size, 1000.0, 1000.0, matrixP);
+ else
+ glyph=T1_SetChar( FontID, TestChar, Size, matrixP);
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ if (glyph==NULL){
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+
+ height=glyph->metrics.ascent - glyph->metrics.descent;
+ overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing;
+ width=overallwidth;
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_GetCharName(FontID,(char)TestChar),
+ T1_errno);
+
+ if (glyph->bits !=NULL) {
+ ximage=XCreateImage( display,
+ DefaultVisual(display, screennumber),
+ 1, /* depths for bitmap is 1 */
+ XYBitmap, /* XYBitmap or XYPixmap */
+ 0, /* No offset */
+ glyph->bits,
+ width,
+ height,
+ t1_pad, /* lines padded to bytes */
+ 0 /*PAD(width,8)/8*/ /* number of bytes per line */
+ );
+ /* Force bit and byte order */
+ ximage->bitmap_bit_order=0;
+ ximage->byte_order=0;
+ XFreePixmap(display,pixmap);
+ pixmap = XCreatePixmap(display,
+ XtWindow(TopLevel),
+ width,
+ height,
+ DefaultDepth(display,screennumber)
+ );
+ XPutImage(display,
+ pixmap,
+ DefaultGC( display, screennumber),
+ ximage,
+ 0,
+ 0,
+ 0,
+ 0,
+ width,
+ height
+ );
+ XDestroyImage(ximage);
+ }
+
+
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++;
+ XtSetArg( args[i], XtNforeground, BlackPixel(display,screennumber)); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetValues(Output ,args,i);
+
+ glyph->bits=NULL; /* Since XDestroyImage() free's this also! */
+}
+
+
+
+void showstring( Widget showstringbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i,j,k,l,m,none_found;
+ Arg args[10];
+ char *theString='\0';
+ char *ligtheString='\0';
+ char *succs, *ligs;
+ char buf_char;
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ i=0;
+ XtSetArg(args[i], XtNstring, &theString); i++;
+ XtGetValues(dialogteststring,args,i);
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Now comes the ligatur handling */
+ if (strcmp(theString,"")==0)
+ theString=(char *) TestString;
+ i=strlen(theString);
+ ligtheString=(char *)malloc((i+1)*sizeof(char));
+ if (LigDetect){
+ for (j=0,m=0;j<i;j++,m++){ /* Loop through the characters */
+ if ((k=T1_QueryLigs( FontID, theString[j], &succs, &ligs))>0){
+ buf_char=theString[j];
+ while (k>0){
+ none_found=1;
+ for (l=0;l<k;l++){ /* Loop through the ligatures */
+ if (succs[l]==theString[j+1]){
+ buf_char=ligs[l];
+ j++;
+ none_found=0;
+ break;
+ }
+ }
+ if (none_found)
+ break;
+ k=T1_QueryLigs( FontID, buf_char, &succs, &ligs);
+ }
+ ligtheString[m]=buf_char;
+ }
+ else{ /* There are no ligatures */
+ ligtheString[m]=theString[j];
+ }
+ }
+ ligtheString[m]=0;
+ }
+ else {
+ strcpy(ligtheString,theString);
+ }
+
+ /*
+ {
+ METRICSINFO metrics;
+
+ metrics=T1_GetMetricsInfo(FontID,(char *)ligtheString,0,Space,(Modflag & T1_KERNING));
+ printf("String's width: %d\n", metrics.width);
+ printf("String's BBox: llx = %d\n", metrics.bbox.llx);
+ printf(" lly = %d\n", metrics.bbox.lly);
+ printf(" urx = %d\n", metrics.bbox.urx);
+ printf(" ury = %d\n", metrics.bbox.ury);
+ printf("Number of chars in string: %d\n", metrics.numchars);
+ for (i=0;i<metrics.numchars;i++)
+ printf("Position of %d. character in string: %d afm-units\n", i+1, metrics.charpos[i]);
+ }
+ */
+
+ /*
+ {
+ int i,j;
+ T1_COMP_CHAR_INFO *ccd;
+ T1_COMP_PIECE *cp;
+
+ printf("Number of composite characters in font: %d\n",
+ j=T1_GetNoCompositeChars(FontID));
+ for (i=0; i<j; i++) {
+ ccd=T1_GetCompCharDataByIndex( FontID, i);
+ if (ccd==NULL) {
+ printf("AFM-ind=%d, ccd=%p, T1_errno=%d\n", i, ccd, T1_errno);
+ T1_errno=0;
+ }
+ else {
+ printf( "AFM-ind=%d: Compchar %s (%d), has %d pieces:\n",
+ i,
+ ccd->compchar > -1 ? T1_GetCharName( FontID, ccd->compchar) : "not_enc",
+ ccd->compchar,
+ ccd->numPieces);
+
+ printf( " basechar %s (%d)\n",
+ ccd->pieces[0].piece > -1 ? T1_GetCharName( FontID, ccd->pieces[0].piece) : "not_enc",
+ ccd->pieces[0].piece);
+ printf( " accent %s (%d)\n",
+ ccd->pieces[1].piece > -1 ? T1_GetCharName( FontID, ccd->pieces[1].piece) : "not_enc",
+ ccd->pieces[1].piece);
+ }
+ T1_FreeCompCharData( ccd);
+ }
+
+ }
+ */
+
+
+
+ XSetForeground( display, DefaultGC( display, screennumber), black.pixel);
+ XSetBackground( display, DefaultGC( display, screennumber), white.pixel);
+ /* Reset T1_errno: */
+ T1_errno=0;
+ gettimeofday(time_ptr_start, void_ptr);
+
+ if( extraflags & CHECK_CONCATGLYPHS){
+ glyph2=T1_SetString(FontID,(char *)ligtheString,0,Space,Modflag,Size,matrixP);
+ glyph1=T1_CopyGlyph( glyph2);
+ glyph2=T1_SetString(FontID+1,(char *)ligtheString,0,Space,Modflag,Size,matrixP);
+ glyph=T1_ConcatGlyphs( glyph1, glyph2, 0, 0, Modflag);
+ }
+ else if( extraflags & CHECK_CONCATOUTLINES){
+ {
+ T1_OUTLINE *path=NULL;
+ path=T1_GetStringOutline(FontID,(char *)ligtheString,
+ 0,Space,Modflag,Size,matrixP);
+ if (path==NULL){
+ return;
+ }
+#ifdef SHOW_MANIPULATE_PATHS
+ T1_AbsolutePath( path);
+ T1_ManipulatePath( path, &mymanipulate);
+ T1_RelativePath( path);
+#else
+ T1_ConcatOutlines( path,
+ T1_GetStringOutline(FontID+1,(char *)ligtheString,
+ 0,Space,Modflag,Size,matrixP));
+#endif
+ glyph=T1_FillOutline( path, Modflag);
+ }
+ }
+ else{
+ if( extraflags & CHECK_FOR_BAD_CHARS){
+ sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar);
+ ligtheString[strlen(ligtheString)/2]=(unsigned char) TestChar;
+ }
+ glyph=T1_SetString(FontID,(char *)ligtheString,0,Space,Modflag,Size,matrixP);
+ }
+
+
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ free(ligtheString);
+
+ if ( glyph ==NULL ) {
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+
+ height=glyph->metrics.ascent - glyph->metrics.descent;
+ overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing;
+ width=overallwidth;
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_errno);
+
+ if (glyph->bits != NULL) {
+ ximage=XCreateImage( display,
+ DefaultVisual(display, screennumber),
+ 1, /* depths for bitmap is 1 */
+ XYBitmap, /* XYBitmap or XYPixmap */
+ 0, /* No offset */
+ glyph->bits,
+ width,
+ height,
+ t1_pad, /* lines padded to bytes */
+ 0 /*PAD(width,8)/8*/ /* number of bytes per line */
+ );
+ /* Force bit and byte order */
+ ximage->bitmap_bit_order=LSBFirst;
+ ximage->byte_order=LSBFirst;
+ XFreePixmap(display,pixmap);
+ pixmap = XCreatePixmap(display,
+ XtWindow(TopLevel),
+ width,
+ height,
+ DefaultDepth(display,screennumber)
+ );
+ XPutImage(display,
+ pixmap,
+ DefaultGC( display, screennumber),
+ ximage,
+ 0,
+ 0,
+ 0,
+ 0,
+ width,
+ height
+ );
+ XDestroyImage(ximage);
+ }
+
+
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++;
+ XtSetValues(Output ,args,i);
+
+ glyph->bits=NULL; /* Since XDestroyImage() free's this also! */
+}
+
+
+
+void aashowchar( Widget showcharbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i, j;
+ Arg args[10];
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Reset T1_errno: */
+ T1_errno=0;
+ /* Set antialiasing level */
+ T1_AASetLevel( aalevel);
+ /* Set the colors for Anti-Aliasing */
+ T1_AASetGrayValues( aapixels[0], /* white */
+ aapixels[4],
+ aapixels[8],
+ aapixels[12],
+ aapixels[16] ); /* black */
+ T1_AAHSetGrayValues( aapixels);
+ T1_AANSetGrayValues( aapixels[0], aapixels[16]);
+ gettimeofday(time_ptr_start, void_ptr);
+ if ( extraflags & CHECK_SET_RECT )
+ glyph=T1_AASetRect( FontID, Size, 1000.0, 1000.0, matrixP);
+ else
+ glyph=T1_AASetChar( FontID, (char)TestChar, Size, matrixP);
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ if (glyph==NULL) {
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+
+ height=glyph->metrics.ascent - glyph->metrics.descent;
+ overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing;
+ width=overallwidth;
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_GetCharName(FontID,(char)TestChar),
+ T1_errno);
+
+
+ /*
+ printf("glyph->bits=%u\n", glyph->bits);
+ printf("glyph->metrics.leftSideBearing=%u\n", glyph->metrics.leftSideBearing);
+ printf("glyph->metrics.rightSideBearing=%u\n", glyph->metrics.rightSideBearing);
+ printf("glyph->metrics.advanceX=%u\n", glyph->metrics.advanceX);
+ printf("glyph->metrics.ascent=%u\n", glyph->metrics.ascent);
+ printf("glyph->metrics.descent=%u\n", glyph->metrics.descent);
+ printf("glyph->pFontCacheInfo=%u\n", glyph->pFontCacheInfo);
+ */
+
+ if (glyph->bits != NULL) {
+ ximage=XCreateImage( display,
+ DefaultVisual(display, screennumber),
+ DefaultDepth(display,screennumber), /* depths for bitmap is 1 */
+ ZPixmap, /* XYBitmap or XYPixmap */
+ 0, /* No offset */
+ glyph->bits,
+ width,
+ height,
+ t1_pad, /* lines padded to bytes */
+ 0 /*PAD(width,8)/8*/ /* number of bytes per line */
+ );
+ ximage->byte_order=xglyph_byte_order;
+ XFreePixmap(display,pixmap);
+ pixmap = XCreatePixmap(display,
+ XtWindow(TopLevel),
+ width,
+ height,
+ DefaultDepth(display,screennumber) /* 8 */ /* depth */
+ );
+ XPutImage(display,
+ pixmap,
+ DefaultGC( display, screennumber),
+ ximage,
+ 0,
+ 0,
+ 0,
+ 0,
+ width,
+ height
+ );
+ XDestroyImage(ximage);
+ }
+
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, WhitePixel(display,screennumber)); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetValues(Output ,args,i);
+
+ glyph->bits=NULL; /* Since XDestroyImage() free's this also! */
+}
+
+
+
+void aashowstring( Widget showstringbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i,j,k,l,m,none_found;
+ Arg args[10];
+ char *theString='\0';
+ char *ligtheString='\0';
+ char *succs, *ligs;
+ char buf_char;
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ i=0;
+ XtSetArg(args[i], XtNstring, &theString); i++;
+ XtGetValues(dialogteststring,args,i);
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Now comes the ligatur handling */
+ if (strcmp(theString,"")==0)
+ theString=(char *) TestString;
+ i=strlen(theString);
+ ligtheString=(char *)malloc((i+1)*sizeof(char));
+ if (LigDetect){
+ for (j=0,m=0;j<i;j++,m++){ /* Loop through the characters */
+ if ((k=T1_QueryLigs( FontID, theString[j], &succs, &ligs))>0){
+ buf_char=theString[j];
+ while (k>0){
+ none_found=1;
+ for (l=0;l<k;l++){ /* Loop through the ligatures */
+ if (succs[l]==theString[j+1]){
+ buf_char=ligs[l];
+ j++;
+ none_found=0;
+ break;
+ }
+ }
+ if (none_found)
+ break;
+ k=T1_QueryLigs( FontID, buf_char, &succs, &ligs);
+ }
+ ligtheString[m]=buf_char;
+ }
+ else{ /* There are no ligatures */
+ ligtheString[m]=theString[j];
+ }
+ }
+ ligtheString[m]=0;
+ }
+ else {
+ strcpy(ligtheString,theString);
+ }
+
+ /* Reset T1_errno: */
+ T1_errno=0;
+ /* Set antialiasing level */
+ T1_AASetLevel( aalevel);
+ /* Set the colors for Anti-Aliasing */
+ T1_AASetGrayValues( aapixels[0], /* white */
+ aapixels[4],
+ aapixels[8],
+ aapixels[12],
+ aapixels[16] ); /* black */
+ T1_AAHSetGrayValues( aapixels);
+ T1_AANSetGrayValues( aapixels[0], aapixels[16]);
+ gettimeofday(time_ptr_start, void_ptr);
+
+ if( extraflags & CHECK_CONCATGLYPHS){
+ glyph2=T1_AASetString(FontID,(char *)ligtheString,0,Space,Modflag,Size,matrixP);
+ glyph1=T1_CopyGlyph( glyph2);
+ glyph2=T1_AASetString(FontID+1,(char *)ligtheString,0,Space,Modflag,Size,matrixP);
+ glyph=T1_ConcatGlyphs( glyph1, glyph2, 0, 0, Modflag);
+ }
+ else if( extraflags & CHECK_CONCATOUTLINES){
+ {
+ T1_OUTLINE *path=NULL;
+ path=T1_GetStringOutline(FontID,(char *)ligtheString,
+ 0,Space,Modflag,Size,matrixP);
+ T1_ConcatOutlines( path,
+ T1_GetMoveOutline( FontID, 1000, 0, Modflag, Size, matrixP));
+ T1_ConcatOutlines( path,
+ T1_GetStringOutline(FontID+1,(char *)ligtheString,
+ 0,Space,Modflag,Size,matrixP));
+ glyph=T1_AAFillOutline( path, Modflag);
+ }
+ }
+ else{
+ glyph=T1_AASetString(FontID,(char *)ligtheString,0,Space,Modflag,Size,matrixP);
+ }
+
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ free(ligtheString);
+
+
+ if ( glyph == NULL){
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ height=glyph->metrics.ascent - glyph->metrics.descent;
+ overallwidth=glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing;
+ width=overallwidth;
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_errno);
+
+
+ /*
+ printf("glyph->bits=%u\n", glyph->bits);
+ printf("glyph->metrics.leftSideBearing=%u\n", glyph->metrics.leftSideBearing);
+ printf("glyph->metrics.rightSideBearing=%u\n", glyph->metrics.rightSideBearing);
+ printf("glyph->metrics.advanceX=%u\n", glyph->metrics.advanceX);
+ printf("glyph->metrics.ascent=%u\n", glyph->metrics.ascent);
+ printf("glyph->metrics.descent=%u\n", glyph->metrics.descent);
+ printf("glyph->pFontCacheInfo=%u\n", glyph->pFontCacheInfo);
+ */
+
+ if (glyph->bits != NULL) {
+ ximage=XCreateImage( display,
+ DefaultVisual(display, screennumber),
+ DefaultDepth(display,screennumber),
+ ZPixmap, /* XYBitmap or XYPixmap */
+ 0, /* No offset */
+ glyph->bits,
+ width,
+ height,
+ t1_pad, /* lines padded to bytes */
+ 0 /* number of bytes per line */
+ );
+ ximage->byte_order=xglyph_byte_order;
+ XFreePixmap(display,pixmap);
+ pixmap = XCreatePixmap(display,
+ XtWindow(TopLevel),
+ width,
+ height,
+ DefaultDepth(display,screennumber)
+ );
+ XPutImage(display,
+ pixmap,
+ DefaultGC( display, screennumber),
+ ximage,
+ 0,
+ 0,
+ 0,
+ 0,
+ width,
+ height
+ );
+ XDestroyImage(ximage);
+ }
+
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, WhitePixel( display, screennumber)); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, height + DOUBLEMARGIN); i++;
+ if (glyph->bits != NULL) {
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ }
+ else {
+ XtSetArg( args[i], XtNbitmap, 0); i++;
+ }
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, WhitePixel( display, screennumber)); i++;
+ XtSetValues(Output ,args,i);
+
+ glyph->bits=NULL; /* Since XDestroyImage() free's this also! */
+}
+
+
+
+void showcharX( Widget showcharbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i, j;
+ Arg args[10];
+ int tmp_width, tmp_height;
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ tmp_width=2 * XOUTPUT_HALFHSIZE;
+ tmp_height=2 * XOUTPUT_HALFVSIZE;
+
+ if (tmp_pixmap==0)
+ tmp_pixmap=XCreatePixmap( display,
+ XtWindow(TopLevel),
+ tmp_width,
+ tmp_height,
+ depth
+ );
+ /* Put some background in pixmap for demonstration of transparent-mode: */
+ if (Opacity==0){
+ XSetForeground( display, DefaultGC( display, screennumber), pink4.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ XSetForeground( display, DefaultGC( display, screennumber), yellow.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ tmp_width/4, tmp_height/4, tmp_width/2, tmp_height/2);
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ }
+ else{
+ XSetForeground( display, DefaultGC( display, screennumber), bg);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ }
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ XSetBackground( display, DefaultGC( display, screennumber), bg);
+ /* Synchronize display in order to make the time measurement more acurate */
+ XSync( display, True);
+ /* Reset T1_errno: */
+ T1_errno=0;
+ gettimeofday(time_ptr_start, void_ptr);
+ if ( extraflags & CHECK_SET_RECT )
+ glyph=T1_SetRectX( tmp_pixmap, DefaultGC( display, screennumber), Opacity,
+ XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE, /* x_dest, y_dest */
+ FontID, Size, 1000.0, 1000.0, matrixP);
+ else
+ glyph=T1_SetCharX( tmp_pixmap, DefaultGC( display, screennumber), Opacity,
+ XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE, /* x_dest, y_dest */
+ FontID, TestChar, Size, matrixP);
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ if ((extraflags & NO_GRID)==0){
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor1.pixel);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE, 0, /* X1, Y1 */
+ XOUTPUT_HALFHSIZE, 2 * XOUTPUT_HALFVSIZE);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, XOUTPUT_HALFVSIZE, /* X1, Y1 */
+ 2 * XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE);
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor2.pixel);
+ if (glyph!=NULL){
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX - CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE);
+ }
+ }
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+
+ /* Check for errors */
+ if (glyph==NULL) {
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_GetCharName(FontID,(char)TestChar),
+ T1_errno);
+
+ /* Finally, set the resources: */
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetValues(Output ,args,i);
+
+}
+
+
+
+void showstringX( Widget showstringbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i,j,k,l,m,none_found;
+ Arg args[10];
+ int tmp_width, tmp_height;
+
+ char *theString='\0';
+ char *ligtheString='\0';
+ char *succs, *ligs;
+ char buf_char;
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ i=0;
+ XtSetArg(args[i], XtNstring, &theString); i++;
+ XtGetValues(dialogteststring,args,i);
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Now comes the ligatur handling */
+ if (strcmp(theString,"")==0)
+ theString=(char *) TestString;
+ i=strlen(theString);
+ ligtheString=(char *)malloc((i+1)*sizeof(char));
+ if (LigDetect){
+ for (j=0,m=0;j<i;j++,m++){ /* Loop through the characters */
+ if ((k=T1_QueryLigs( FontID, theString[j], &succs, &ligs))>0){
+ buf_char=theString[j];
+ while (k>0){
+ none_found=1;
+ for (l=0;l<k;l++){ /* Loop through the ligatures */
+ if (succs[l]==theString[j+1]){
+ buf_char=ligs[l];
+ j++;
+ none_found=0;
+ break;
+ }
+ }
+ if (none_found)
+ break;
+ k=T1_QueryLigs( FontID, buf_char, &succs, &ligs);
+ }
+ ligtheString[m]=buf_char;
+ }
+ else{ /* There are no ligatures */
+ ligtheString[m]=theString[j];
+ }
+ }
+ ligtheString[m]=0;
+ }
+ else {
+ strcpy(ligtheString,theString);
+ }
+
+ tmp_width=2 * XOUTPUT_HALFHSIZE;
+ tmp_height=2 * XOUTPUT_HALFVSIZE;
+
+ if (tmp_pixmap==0)
+ tmp_pixmap=XCreatePixmap( display,
+ XtWindow(TopLevel),
+ tmp_width,
+ tmp_height,
+ depth
+ );
+ /* Put some background in pixmap for demonstration of transparent-mode: */
+ if (Opacity==0){
+ XSetForeground( display, DefaultGC( display, screennumber), pink4.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ XSetForeground( display, DefaultGC( display, screennumber), yellow.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ tmp_width/4, tmp_height/4, tmp_width/2, tmp_height/2);
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ }
+ else{
+ XSetForeground( display, DefaultGC( display, screennumber), bg);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ }
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ XSetBackground( display, DefaultGC( display, screennumber), bg);
+ /* Synchronize display in order to make the time measurement more acurate */
+ XSync( display, True);
+ /* Reset T1_errno: */
+ T1_errno=0;
+ /* Draw the string into temporary pixmap */
+ gettimeofday(time_ptr_start, void_ptr);
+
+ if( extraflags & CHECK_PERFORMANCE){
+ j=0;
+ for (i=0; j<600; i++){
+ j=(int)(Size*1.2*i);
+ glyph=T1_SetStringX( XtWindow(OutputWindow2), DefaultGC( display, screennumber), Opacity,
+ 0, j, /* x_dest, y_dest */
+ FontID, (char *)ligtheString,
+ 0, Space, Modflag, Size, matrixP);
+ }
+ }
+ else{
+ glyph=T1_SetStringX( tmp_pixmap, DefaultGC( display, screennumber), Opacity,
+ XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE,
+ FontID, (char *)ligtheString,
+ 0, Space, Modflag, Size, matrixP);
+ }
+
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ if ((extraflags & NO_GRID)==0){
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor1.pixel);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE, 0, /* X1, Y1 */
+ XOUTPUT_HALFHSIZE, 2 * XOUTPUT_HALFVSIZE);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, XOUTPUT_HALFVSIZE, /* X1, Y1 */
+ 2 * XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE);
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor2.pixel);
+ if (glyph!=NULL){
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX - CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE);
+ }
+ }
+
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+
+ /* Free the ligature-converted string */
+ free(ligtheString);
+
+ /* Check for errors */
+ if (glyph==NULL) {
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_errno);
+
+
+ /* Finally, set resources */
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(Output ,args,i);
+
+}
+
+
+
+void aashowcharX( Widget showcharbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i, j;
+ Arg args[10];
+ int tmp_width, tmp_height;
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogtestcharacter), "%d", &TestChar);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ tmp_width=2 * XOUTPUT_HALFHSIZE;
+ tmp_height=2 * XOUTPUT_HALFVSIZE;
+
+ if (tmp_pixmap==0)
+ tmp_pixmap=XCreatePixmap( display,
+ XtWindow(TopLevel),
+ tmp_width,
+ tmp_height,
+ depth
+ );
+ /* Put some background in pixmap for demonstration of transparent-mode: */
+ if (Opacity==0){
+ XSetForeground( display, DefaultGC( display, screennumber), pink4.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ XSetForeground( display, DefaultGC( display, screennumber), yellow.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ tmp_width/4, tmp_height/4, tmp_width/2, tmp_height/2);
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ }
+ else{
+ XSetForeground( display, DefaultGC( display, screennumber), bg);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ }
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ XSetBackground( display, DefaultGC( display, screennumber), bg);
+ /* Synchronize display in order to make the time measurement more acurate */
+ XSync( display, True);
+ /* Reset T1_errno: */
+ T1_errno=0;
+ /* Set antialiasing level */
+ T1_AASetLevel( aalevel);
+ gettimeofday(time_ptr_start, void_ptr);
+ if ( extraflags & CHECK_SET_RECT )
+ glyph=T1_AASetRectX( tmp_pixmap, DefaultGC( display, screennumber), Opacity,
+ XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE, /* x_dest, y_dest */
+ FontID, Size, 1000.0, 1000.0, matrixP);
+ else
+ glyph=T1_AASetCharX( tmp_pixmap, DefaultGC( display, screennumber), Opacity,
+ XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE, /* x_dest, y_dest */
+ FontID, TestChar, Size, matrixP);
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ if ((extraflags & NO_GRID)==0){
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor1.pixel);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE, 0, /* X1, Y1 */
+ XOUTPUT_HALFHSIZE, 2 * XOUTPUT_HALFVSIZE);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, XOUTPUT_HALFVSIZE, /* X1, Y1 */
+ 2 * XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE);
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor2.pixel);
+ if (glyph!=NULL){
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX - CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE);
+ }
+ }
+
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+
+ /* Check for errors */
+ if (glyph==NULL) {
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nCharactername: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_GetCharName(FontID,(char)TestChar),
+ T1_errno);
+
+ /* Finally, set the resources: */
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetValues(Output ,args,i);
+
+}
+
+
+
+void aashowstringX( Widget showstringbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i,j,k,l,m,none_found;
+ Arg args[10];
+ int tmp_width, tmp_height;
+
+ char *theString='\0';
+ char *ligtheString='\0';
+ char *succs, *ligs;
+ char buf_char;
+
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ if (CheckTransform()==0 && Angle==0.0){
+ matrixP=NULL;
+ }
+ else{
+ matrixP=T1_RotateMatrix( &matrix, Angle);
+ }
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)!=0){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ else
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ i=0;
+ XtSetArg(args[i], XtNstring, &theString); i++;
+ XtGetValues(dialogteststring,args,i);
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Now comes the ligatur handling */
+ if (strcmp(theString,"")==0)
+ theString=(char *) TestString;
+ i=strlen(theString);
+ ligtheString=(char *)malloc((i+1)*sizeof(char));
+ if (LigDetect){
+ for (j=0,m=0;j<i;j++,m++){ /* Loop through the characters */
+ if ((k=T1_QueryLigs( FontID, theString[j], &succs, &ligs))>0){
+ buf_char=theString[j];
+ while (k>0){
+ none_found=1;
+ for (l=0;l<k;l++){ /* Loop through the ligatures */
+ if (succs[l]==theString[j+1]){
+ buf_char=ligs[l];
+ j++;
+ none_found=0;
+ break;
+ }
+ }
+ if (none_found)
+ break;
+ k=T1_QueryLigs( FontID, buf_char, &succs, &ligs);
+ }
+ ligtheString[m]=buf_char;
+ }
+ else{ /* There are no ligatures */
+ ligtheString[m]=theString[j];
+ }
+ }
+ ligtheString[m]=0;
+ }
+ else {
+ strcpy(ligtheString,theString);
+ }
+
+ tmp_width=2 * XOUTPUT_HALFHSIZE;
+ tmp_height=2 * XOUTPUT_HALFVSIZE;
+
+ if (tmp_pixmap==0)
+ tmp_pixmap=XCreatePixmap( display,
+ XtWindow(TopLevel),
+ tmp_width,
+ tmp_height,
+ depth
+ );
+
+ /* Put some background in pixmap for demonstration of transparent-mode: */
+ if (Opacity==0){
+ XSetForeground( display, DefaultGC( display, screennumber), pink4.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ XSetForeground( display, DefaultGC( display, screennumber), yellow.pixel);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ tmp_width/4, tmp_height/4, tmp_width/2, tmp_height/2);
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ }
+ else{
+ XSetForeground( display, DefaultGC( display, screennumber), bg);
+ XFillRectangle( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, 0, tmp_width, tmp_height);
+ }
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ XSetBackground( display, DefaultGC( display, screennumber), bg);
+ /* Synchronize display in order to make the time measurement more acurate */
+ XSync( display, True);
+ /* Reset T1_errno: */
+ T1_errno=0;
+ /* Set antialiasing level */
+ T1_AASetLevel( aalevel);
+ /* Draw the string into temporary pixmap */
+ gettimeofday(time_ptr_start, void_ptr);
+
+ if( extraflags & CHECK_PERFORMANCE){
+ j=0;
+ for (i=0; j<600; i++){
+ j=(int)(Size*1.2*i);
+ glyph=T1_AASetStringX( XtWindow(OutputWindow2), DefaultGC( display, screennumber), Opacity,
+ 0, j, /* x_dest, y_dest */
+ FontID, (char *)ligtheString,
+ 0, Space, Modflag, Size, matrixP);
+ }
+ }
+ else{
+ glyph=T1_AASetStringX( tmp_pixmap, DefaultGC( display, screennumber), Opacity,
+ XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE, /* x_dest, y_dest */
+ FontID, (char *)ligtheString,
+ 0, Space, Modflag, Size, matrixP);
+ }
+
+ gettimeofday(time_ptr_stop, void_ptr);
+
+ if ((extraflags & NO_GRID)==0){
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor1.pixel);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE, 0, /* X1, Y1 */
+ XOUTPUT_HALFHSIZE, 2 * XOUTPUT_HALFVSIZE);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ 0, XOUTPUT_HALFVSIZE, /* X1, Y1 */
+ 2 * XOUTPUT_HALFHSIZE, XOUTPUT_HALFVSIZE);
+ XSetForeground( display, DefaultGC( display, screennumber), gridcolor2.pixel);
+ if (glyph!=NULL){
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX - CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX + CROSS_SIZE,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY);
+ XDrawLine( display, tmp_pixmap, DefaultGC( display, screennumber),
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY - CROSS_SIZE,
+ XOUTPUT_HALFHSIZE + glyph->metrics.advanceX,
+ XOUTPUT_HALFVSIZE - glyph->metrics.advanceY + CROSS_SIZE);
+ }
+ }
+
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+
+ /* Free the ligature-converted string */
+ free(ligtheString);
+
+ /* Check for errors */
+ if (glyph==NULL) {
+ sprintf(statusstring, "t1lib: Couldn't generate Bitmap,\n(%s)", T1_StrError(T1_errno));
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Prepare status message: */
+ sprintf(statusstring,"Elapsed time: %ld Microseconds\nLeftSideBearing: %d\nRightSideBearing: %d\nAscent: %d\nDescent: %d\nAdvanceX: %d\nAdvanceY: %d\nBits Per Pixel: %ld\nImage Size: %ld Bytes\nPostScript Fontname: %s\nT1_errno: %d\n",
+ time_diff(time_ptr_start,time_ptr_stop),
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.ascent,
+ glyph->metrics.descent,
+ glyph->metrics.advanceX,
+ glyph->metrics.advanceY,
+ glyph->bpp,
+ PAD(glyph->bpp*(glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing),XGLYPH_PAD)/8*(glyph->metrics.ascent-glyph->metrics.descent),
+ T1_GetFontName(FontID),
+ T1_errno);
+
+
+
+ /* Finally, set resources */
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, tmp_width + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNheight, tmp_height + DOUBLEMARGIN); i++;
+ XtSetArg( args[i], XtNbitmap, tmp_pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(Output ,args,i);
+
+}
+
+
+void fonttable( Widget fonttablebutton, XtPointer client_data, XtPointer call_data)
+{
+
+ int i, j;
+
+ Arg args[10];
+ static Pixmap pixmap=0;
+ int x, y;
+ int CellLeftMargin, CellTopMargin;
+ int ColAdvance, RowAdvance;
+ int width, height;
+ int FontID, DeviceResolution;
+ float Size, Extent, Slant;
+ float scale;
+
+ BBox fontbbox, tmpbbox;
+
+ sscanf( XawDialogGetValueString(dialogfontid),"%d", &FontID);
+ sscanf( XawDialogGetValueString(dialogsize),"%f", &Size);
+ sscanf( XawDialogGetValueString(dialogangle),"%f", &Angle);
+ sscanf( XawDialogGetValueString(dialogspace),"%ld", &Space);
+ sscanf( XawDialogGetValueString(dialogdevres),"%d", &DeviceResolution);
+ sscanf( XawDialogGetValueString(dialogstroke),"%d", &StrokeWidth);
+
+ if (FontID<0 || FontID>=T1_GetNoFonts()) {
+ sprintf(statusstring, "t1lib: FontID out of range!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* Ensure that font is loaded before any operation on the font */
+ if ( T1_CheckForFontID( FontID) < 1 ) {
+ T1_LoadFont( FontID);
+ }
+
+ if ( StrokeWidth == 0.0f ) {
+ T1_ClearStrokeFlag( FontID);
+ }
+ else {
+ T1_SetStrokeFlag( FontID);
+ if ( T1_SetStrokeWidth( FontID, StrokeWidth) != 0 ) {
+ sprintf( statusstring, "t1lib: Unable to setup strokewidth");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+ }
+
+ /* We don't obey rotation when displaying a fonttable */
+ matrixP=NULL;
+
+ if (DeviceResolution!=last_resolution[FontID]){
+ /* Delete all size dependent data for that font */
+ for ( i=0; i<T1_GetNoFonts(); i++)
+ T1_DeleteAllSizes( i);
+ /* Establish new device resolution */
+ T1_SetDeviceResolutions(DeviceResolution,DeviceResolution);
+ /* Store current resolution */
+ last_resolution[FontID]=DeviceResolution;
+ }
+ i=sscanf( XawDialogGetValueString(dialogencfile),"%s", (char *)EncodingFile);
+ if (i==EOF) EncodingFile[0]=0;
+ if (strcmp(EncodingFile,LastEncodingFile)!=0){ /* encoding has changed */
+ if (strcmp( EncodingFile, "")==0){ /* -> reset to internal encoding */
+ for (i=0; i<T1_GetNoFonts(); i++){
+ T1_DeleteAllSizes(i);
+ T1_ReencodeFont( i, NULL);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( NULL);
+ }
+ else{
+ for (i=0; i<MAXENCODINGS; ){
+ if ( encstruct[i].encfilename != NULL)
+ if (strcmp( encstruct[i].encfilename, EncodingFile)==0){
+ i++;
+ break;
+ }
+ i++;
+ }
+ if (i==MAXENCODINGS){ /* Encoding from that file was not
+ already loaded -> so load it */
+ i=0;
+ while (encstruct[i].encfilename != NULL)
+ i++;
+ encstruct[i].encoding=T1_LoadEncoding(EncodingFile);
+ encstruct[i].encfilename=(char *)malloc(strlen(EncodingFile)+1);
+ if (encstruct[i].encoding==NULL){
+ free( encstruct[i].encfilename);
+ encstruct[i].encfilename=NULL;
+ }
+ i++;
+ }
+ else
+ for (j=0; j<T1_GetNoFonts(); j++){
+ T1_DeleteAllSizes(j);
+ T1_ReencodeFont( j, encstruct[i-1].encoding);
+ }
+ /* Take care that newly loaded fonts are encoded according to current
+ encoding */
+ T1_SetDefaultEncoding( encstruct[i-1].encoding);
+ }
+ strcpy( LastEncodingFile, EncodingFile);
+ }
+ sscanf( XawDialogGetValueString(dialogslant),"%f", &Slant);
+ if (Slant!=lastSlant[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_SlantFont( FontID, Slant);
+ lastSlant[FontID]=Slant;
+ }
+ sscanf( XawDialogGetValueString(dialogextent),"%f", &Extent);
+ if (Extent!=lastExtent[FontID]){
+ /* Delete all size dependent data */
+ T1_DeleteAllSizes(FontID);
+ T1_LoadFont(FontID);
+ T1_ExtendFont( FontID, Extent);
+ lastExtent[FontID]=Extent;
+ }
+
+ if (Size<=0.0){
+ sprintf(statusstring, "t1lib: Size must be positive!");
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+ return;
+ }
+
+ /* We have read all parameters, now lets get font bbox in order to be
+ able to compute the cell-metrics */
+ T1_LoadFont( FontID);
+ fontbbox=T1_GetFontBBox( FontID);
+
+ /* we check for a valid fontbbox, otherwise we compute it ourselves */
+ if ( fontbbox.llx==0 &&
+ fontbbox.lly==0 &&
+ fontbbox.urx==0 &&
+ fontbbox.ury==0 ){
+ T1_PrintLog( "fonttable()", "Re-Computing FontBBox", T1LOG_DEBUG);
+ for (i=0; i<256; i++){
+ tmpbbox=T1_GetCharBBox( FontID, i);
+ if (tmpbbox.llx<fontbbox.llx)
+ fontbbox.llx=tmpbbox.llx;
+ if (tmpbbox.lly<fontbbox.lly)
+ fontbbox.lly=tmpbbox.lly;
+ if (tmpbbox.urx>fontbbox.urx)
+ fontbbox.urx=tmpbbox.urx;
+ if (tmpbbox.ury>fontbbox.ury)
+ fontbbox.ury=tmpbbox.ury;
+ }
+ }
+
+ /* We scale the font bounding box according to extent, slant and
+ device resolution. For the slant, we assume that the font contains
+ at least one character which reaches to the upper right corner and
+ the same for lower left corner. */
+ scale=DeviceResolution/72.0;
+ fontbbox.urx=fontbbox.urx+(int)((float)fontbbox.ury*Slant);
+ fontbbox.llx=fontbbox.llx+(int)((float)fontbbox.lly*Slant);
+ fontbbox.urx=(int)((float)fontbbox.urx*Extent);
+ fontbbox.llx=(int)((float)fontbbox.llx*Extent);
+ fontbbox.llx=(int)((float)fontbbox.llx*scale);
+ fontbbox.urx=(int)((float)fontbbox.urx*scale);
+ fontbbox.lly=(int)((float)fontbbox.lly*scale);
+ fontbbox.ury=(int)((float)fontbbox.ury*scale);
+
+ /* Left and top margin of the char-origins with respect upper left corner
+ of cell */
+ CellTopMargin=SIMPLEMARGIN + fontbbox.ury;
+ if (fontbbox.llx < 0){
+ CellLeftMargin= - fontbbox.llx;
+ }
+ else{
+ CellLeftMargin=0;
+ }
+ /* How much to advance in which direction when incrementing */
+ ColAdvance=CellLeftMargin + fontbbox.urx ;
+ RowAdvance=CellTopMargin - fontbbox.lly ;
+ /* Scale the charspace values */
+ CellTopMargin = (int) floor((double)CellTopMargin*Size/1000.0+0.5)+SIMPLEMARGIN;
+ CellLeftMargin = (int) floor((double)CellLeftMargin*Size/1000.0+0.5)+SIMPLEMARGIN;
+ ColAdvance = (int) floor((double)ColAdvance*Size/1000.0+0.5)+DOUBLEMARGIN;
+ RowAdvance = (int) floor((double)RowAdvance*Size/1000.0+0.5)+DOUBLEMARGIN;
+ /* Overall width and height of map */
+ width=1+(16*ColAdvance);
+ height=1+(16*RowAdvance);
+
+ /* We clip to a window as large as the screen in this function */
+ if (width > 1024)
+ width=WidthOfScreen(screen);
+ if (height > 768)
+ height=HeightOfScreen(screen);
+
+ /* Create pixmap of appropriate size, */
+ if (pixmap!=0)
+ XFreePixmap( display, pixmap);
+ pixmap=XCreatePixmap( display,
+ XtWindow(TopLevel),
+ width,
+ height,
+ depth
+ );
+ /* We always use opaque mode */
+ XSetForeground( display, DefaultGC( display, screennumber), bg);
+ XFillRectangle( display, pixmap, DefaultGC( display, screennumber),
+ 0, 0, width, height);
+ XSetForeground( display, DefaultGC( display, screennumber), fg);
+ XSetBackground( display, DefaultGC( display, screennumber), bg);
+
+ /* Draw cell grid: */
+ for (j=0; j<17; j++){
+ XDrawLine( display, pixmap, DefaultGC( display, screennumber),
+ j*ColAdvance, 0,
+ j*ColAdvance, height);
+ }
+ for (j=0; j<17; j++){
+ XDrawLine( display, pixmap, DefaultGC( display, screennumber),
+ 0, j*RowAdvance,
+ width, j*RowAdvance);
+ }
+
+ /* Reset T1_errno: */
+ T1_errno=0;
+ /* Set antialiasing level */
+ T1_AASetLevel( aalevel);
+ /* Draw characters into pixmap */
+ for ( i=0; i<16; ) { /* row-loop */
+ for ( j=0; j<16; j++) {
+ x=1+(j*ColAdvance)+CellLeftMargin;
+ y=1+CellTopMargin+(i*RowAdvance);
+ glyph=T1_AASetCharX( pixmap, DefaultGC( display, screennumber), 1,
+ x, y, FontID, (char) (i*16+j), Size, matrixP);
+ if (x>width) {
+ sprintf( msg_buf, "Clipping row %d horizontally at column %d", i, j);
+ T1_PrintLog( "fonttable()", msg_buf, T1LOG_STATISTIC);
+ break;
+ }
+
+ }
+ if (y>height) {
+ sprintf( msg_buf, "Clipping vertically at row %d", i);
+ T1_PrintLog( "fonttable()", msg_buf, T1LOG_STATISTIC);
+ break;
+ }
+ i++;
+ }
+
+ /* If font was not loadable */
+ if (T1_GetFontName( FontID)==NULL)
+ sprintf(statusstring, "t1lib: Can't get font name, T1_errno=%d!", T1_errno);
+ else
+ sprintf(statusstring,"Font %s, final T1_errno = %d\n %s",
+ T1_GetFontName( FontID), T1_errno, T1_StrError(T1_errno));
+
+ /* Finally, set resources */
+ i=0;
+ XtSetArg(args[i], XtNbitmap,NULL); i++;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, XtUnspecifiedPixmap); i++;
+ XtSetArg(args[i], XtNlabel, statusstring); i++;
+ XtSetValues(labelstatus,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width); i++;
+ XtSetArg( args[i], XtNheight, height); i++;
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(OutputWindow ,args,i);
+
+ i=0;
+ XtSetArg( args[i], XtNwidth, width); i++;
+ XtSetArg( args[i], XtNheight, height); i++;
+ XtSetArg( args[i], XtNbitmap, pixmap); i++;
+ XtSetArg( args[i], XtNresize, 1);i++;
+ XtSetArg( args[i], XtNinternalWidth, 0); i++;
+ XtSetArg( args[i], XtNinternalHeight, 0); i++;
+ XtSetArg( args[i], XtNbackground, outbg); i++;
+ XtSetValues(Output ,args,i);
+
+
+}
+
+
+
+/* This function shows the About-message */
+void showabout( Widget aboutbutton, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ Arg args[10];
+ Pixmap about=0;
+ XGCValues xgcvalues;
+ GC gc;
+ static char ident[80]="";
+
+#define T1GCMASK GCForeground | GCBackground
+
+ if (about==0) {
+ about=XCreatePixmap( display, XtWindow(TopLevel),
+ 380, MESSAGEBOXHEIGHT, depth);
+ }
+ gc=DefaultGC( display, screennumber);
+
+ XGetGCValues( display, gc, T1GCMASK, &xgcvalues);
+ fg=xgcvalues.foreground;
+ bg=xgcvalues.background;
+
+ XSetForeground( display, gc, white.pixel);
+ XFillRectangle( display, about, gc, 0, 0, 380, MESSAGEBOXHEIGHT);
+ XSetForeground( display, gc, black.pixel);
+ XSetBackground( display, gc, white.pixel);
+
+ /* Set antialiasing level */
+ T1_AASetLevel( aalevel);
+ sprintf( ident, "This is xglyph, T1Lib Version %s", T1_GetLibIdent());
+ glyph=T1_AASetStringX( about, gc, 1, 10, 30, /* x_dest, y_dest */
+ 0, ident,
+ 0, 0.0, T1_UNDERLINE | T1_KERNING, 20.0, NULL);
+ glyph=T1_AASetStringX( about, gc, 1, 10, 60, /* x_dest, y_dest */
+ 0, "xglyph is an interactive tool for illustrating some",
+ 0, 0.0, T1_KERNING, 15.0, NULL);
+ glyph=T1_AASetStringX( about, gc, 1, 10, 80, /* x_dest, y_dest */
+ 0, "of the T1Lib features. T1Lib is distributed under",
+ 0, 0.0, T1_KERNING, 15.0, NULL);
+ glyph=T1_AASetStringX( about, gc, 1, 10, 100, /* x_dest, y_dest */
+ 0, "the GNU General Public Library License (LGPL).",
+ 0, 0.0, T1_KERNING, 15.0, NULL);
+ glyph=T1_AASetStringX( about, gc, 1, 10, 133, /* x_dest, y_dest */
+ 0, "Enjoy it!",
+ 0, 0.0, T1_KERNING, 15.0, NULL);
+ XSetForeground( display, gc, fg);
+ XSetBackground( display, gc, bg);
+
+ i=0;
+ XtSetArg(args[i], XtNwidth,380); i++;
+ XtSetArg(args[i], XtNheight, MESSAGEBOXHEIGHT); i++;
+ XtSetArg(args[i], XtNbackgroundPixmap, about); i++;
+ XtSetArg(args[i], XtNlabel, ""); i++;
+ XtSetValues(labelstatus,args,i);
+}
+
+
+
+/* This function returns a time difference in Microseconds, provided that
+ the time difference is not greater than approximately 35 minutes. */
+long time_diff(struct timeval *time_ptr_start, struct timeval *time_ptr_stop)
+{
+ return((time_ptr_stop->tv_sec -
+ time_ptr_start->tv_sec)*1000000
+ +(time_ptr_stop->tv_usec -
+ time_ptr_start->tv_usec));
+}
+
+
+/* T1_ComputeAAColorsX(): Compute the antialiasing colors in dependency
+ of foreground and background */
+int ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels)
+{
+
+ static unsigned long last_fg;
+ static unsigned long last_bg;
+ unsigned long delta_red, delta_green, delta_blue;
+ int i;
+ int nocolors=0;
+
+
+ aacolors[0].pixel=bg;
+ aacolors[nolevels-1].pixel=fg;
+
+ if ((fg==last_fg)&&(bg==last_bg))
+ return(nocolors);
+
+ /* Get RGB values for fore- and background */
+ XQueryColor( display, DefaultColormap(display,screennumber), &aacolors[0]);
+ XQueryColor( display, DefaultColormap(display,screennumber), &aacolors[nolevels-1]);
+ delta_red = (aacolors[nolevels-1].red - aacolors[0].red)/(nolevels-1);
+ delta_green = (aacolors[nolevels-1].green - aacolors[0].green)/(nolevels-1);
+ delta_blue = (aacolors[nolevels-1].blue - aacolors[0].blue)/(nolevels-1);
+ aapixels[0]=aacolors[0].pixel;
+ aapixels[nolevels-1]=aacolors[nolevels-1].pixel;
+
+ for (i=1; i<nolevels-1; i++){
+ aacolors[i].red = aacolors[i-1].red + delta_red;
+ aacolors[i].green = aacolors[i-1].green + delta_green;
+ aacolors[i].blue = aacolors[i-1].blue + delta_blue;
+ /* Allocate color in current palette */
+ if (XAllocColor( display, DefaultColormap(display,screennumber),
+ &aacolors[i])!=0){
+ aapixels[i]=aacolors[i].pixel;
+ nocolors++;
+ }
+
+ }
+
+ return(nocolors);
+
+}
+
+
+
+void printusage( int max)
+{
+ int i=0;
+
+ if (max==0)
+ max=100000; /* should be large enough :) */
+
+ fprintf(stdout, "xglyph -- t1lib Version %s\n\n", T1_GetLibIdent());
+ fprintf(stdout, "Usage: xglyph [options] [fontfile1 [fontfile2 [...]]]\n\n");
+ fprintf(stdout, "where options is one of:\n");
+ while ( xglyphoptions[i]!=NULL && i<max){
+ if (i==3) /* We print the possible values here. */
+ fprintf( stdout, "\t\t%s {8,16,32}\n", xglyphoptions[i++]);
+ else
+ fprintf( stdout, "\t\t%s\n", xglyphoptions[i++]);
+ }
+
+ fprintf(stdout, "For additional information see the t1lib manual!\n");
+ return;
+}
+
+
+int CheckTransform( void)
+{
+
+ int err;
+ float x1, x2, x3, x4;
+
+ err=sscanf( XawDialogGetValueString(dialogtmatrix), "%f,%f,%f,%f",
+ &x1, &x2, &x3, &x4 );
+ if ( (x1 == (float) 1.0) &&
+ (x2 == (float) 0.0) &&
+ (x3 == (float) 0.0) &&
+ (x4 == (float) 1.0) ){
+ matrix.cxx=x1;
+ matrix.cyx=x2;
+ matrix.cxy=x3;
+ matrix.cyy=x4;
+ return( 0);
+ }
+ else{
+ matrix.cxx=x1;
+ matrix.cyx=x2;
+ matrix.cxy=x3;
+ matrix.cyy=x4;
+ return( 1);
+ }
+}
+
diff --git a/Build/source/libs/t1lib/t1lib.ac b/Build/source/libs/t1lib/t1lib.ac
deleted file mode 100644
index f25bc344a7a..00000000000
--- a/Build/source/libs/t1lib/t1lib.ac
+++ /dev/null
@@ -1,99 +0,0 @@
-if test "$needs_libt1" = no; then
- LIBT1CPPFLAGS=
- LDLIBT1=
- LIBT1DEP=
-else
- EXTRA_LIBT1_INCLUDE=
- EXTRA_LIBT1_LIBDIR=
-
- if test "$with_system_t1lib" = yes; then
- if test "x$with_t1lib_libdir" != x; then
- EXTRA_LIBT1_LIBDIR="-L$with_t1lib_libdir"
- fi
- if test "x$with_t1lib_include" != x; then
- EXTRA_LIBT1_INCLUDE="-I$with_t1lib_include"
- fi
- fi
-
- OLD_LDFLAGS=$LDFLAGS
- OLD_CPP=$CPP
- OLDCPPFLAGS=$CPPFLAGS
- OLD_LIBS=$LIBS
-
- LDFLAGS="$LDFLAGS $EXTRA_LIBT1_LIBDIR"
- CPP="$CPP $EXTRA_LIBT1_INCLUDE"
- CPPFLAGS="$CPPFLAGS $EXTRA_LIBT1_INCLUDE"
-
- if test "$with_system_t1lib" = yes; then
- AC_CHECK_LIB(t1, T1_AddFont,
- t1lib=-lt1,
- AC_MSG_WARN(Standard T1 library not found. Compiling my own.)
- with_system_t1lib=no,
- -lz -lm)
- fi
-
- LIBS="-lt1 -lm $LIBS"
- if test "$with_system_t1lib" = yes; then
- AC_MSG_CHECKING(whether installed T1 lib is >= v 5.0.0 )
- AC_TRY_RUN([
-#include <stdlib.h>
-#include "t1lib.h"
-#define BUFLEN 128
-int main() {
- char *t1libId = T1_GetLibIdent();
- char testbuf[BUFLEN];
- char *p = testbuf;
- int i;
- int version_num;
- /* T1_GetLibIdent() might return something like '0.8-beta2';
- convert the leading numbers to a single digit: */
- for (i = 0; i < BUFLEN - 1; i++) {
- if (t1libId[i] >= '0' && t1libId[i] <= '9')
- *p++ = t1libId[i];
- else if (t1libId[i] != '.' && t1libId[i] != '_' && t1libId[i] != '-')
- break;
- }
- *p = '\0';
- version_num = strtoul(testbuf, (char **)NULL, 10);
- /* xdvik needs >= 5.0.0.
- Try to deal with version strings with 1 or more digits. */
- if (version_num >= 500
- || (version_num < 100 && version_num >= 50)
- || (version_num < 10 && version_num >= 5))
- exit(0);
- exit(1);
-}
- ],
- ac_compile_t1lib=0,
- ac_compile_t1lib=1,
- ac_compile_t1lib=1
- )
- if test $ac_compile_t1lib = 0; then
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT([no, will compile my own version])
- with_system_t1lib=no
- fi
- fi
-
- LDFLAGS=$OLD_LDFLAGS
- CPP=$OLD_CPP
- CPPFLAGS=$OLDCPPFLAGS
- LIBS=$OLD_LIBS
-
- if test "$with_system_t1lib" != yes; then
- LIBT1CPPFLAGS='-I$(LIBT1DIR) -I$(LIBT1SRCDIR) -I$(LIBT1DIR)/../type1 -I$(LIBT1SRCDIR)/../type1'
- LDLIBT1='$(LIBT1DIR)/libt1.a $(LIBT1DIR)/../type1/libtype1.a'
- LIBT1DEP='$(LIBT1DIR)/libt1.a $(LIBT1DIR)/../type1/libtype1.a'
- using_system_t1lib=no
- else
- LIBT1CPPFLAGS="$EXTRA_LIBT1_INCLUDE"
- LDLIBT1="$EXTRA_LIBT1_LIBDIR -lt1"
- LIBT1DEP=
- using_system_t1lib=yes
- fi
-fi
-
-AC_SUBST(LIBT1CPPFLAGS)
-AC_SUBST(LDLIBT1)
-AC_SUBST(LIBT1DEP)
diff --git a/Build/source/libs/t1lib/t1win32.c b/Build/source/libs/t1lib/t1win32.c
deleted file mode 100644
index 2e1608b96fe..00000000000
--- a/Build/source/libs/t1lib/t1win32.c
+++ /dev/null
@@ -1,791 +0,0 @@
-/*--------------------------------------------------------------------------
- ----- File: t1win32.c
- ----- Author: Rainer Menzner (rmz@neuroinformatik.ruhr-uni-bochum.de)
- modified for win32 by Fabrice Popineau (Fabrice.Popineau@supelec.fr)
- ----- Date: 1999-06-24
- ----- Description: This file is part of the t1-library. It contains
- functions for generating glyphs with data in
- Win32 dib format.
- ----- Copyright: t1lib is copyrighted (c) Rainer Menzner, 1996-1998.
- As of version 0.5, t1lib is distributed under the
- GNU General Public Library Lincense. The
- conditions can be found in the files LICENSE and
- LGPL, which should reside in the toplevel
- directory of the distribution. Please note that
- there are parts of t1lib that are subject to
- other licenses:
- The parseAFM-package is copyrighted by Adobe Systems
- Inc.
- The type1 rasterizer is copyrighted by IBM and the
- X11-consortium.
- ----- Warranties: Of course, there's NO WARRANTY OF ANY KIND :-)
- ----- Credits: I want to thank IBM and the X11-consortium for making
- their rasterizer freely available.
- Also thanks to Piet Tutelaers for his ps2pk, from
- which I took the rasterizer sources in a format
- independent from X11.
- Thanks to all people who make free software living!
---------------------------------------------------------------------------*/
-
-#define T1WIN32_C
-
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include <windows.h>
-
-#include "../type1/types.h"
-#include "parseAFM.h"
-#include "../type1/objects.h"
-#include "../type1/spaces.h"
-#include "../type1/util.h"
-#include "../type1/fontfcn.h"
-#include "../type1/regions.h"
-
-#include "t1types.h"
-#include "t1extern.h"
-#include "t1set.h"
-#include "t1aaset.h"
-#include "t1load.h"
-#include "t1finfo.h"
-#include "t1misc.h"
-#include "t1win32.h"
-#include "t1base.h"
-
-
-
-#define T1GCMASK GCForeground | GCBackground
-
-/* As a fall back */
-#ifndef T1_AA_TYPE16
-#define T1_AA_TYPE16 short
-#endif
-#ifndef T1_AA_TYPE32
-#define T1_AA_TYPE32 int
-#endif
-
-
-
-/* The three important X11 parameters t1lib has to deal with: */
-static HDC *T1_display=NULL; /* Must be accessible from t1delete.c */
-static Colormap T1_colormap;
-static unsigned int T1_depth;
-static int T1_byte_order;
-static int lastlevel=0;
-static unsigned long oldfg_n=0, oldbg_n=0, oldfg_l=0, oldbg_l=0;
-static unsigned long oldfg_h=0, oldbg_h=0, oldfg=0, oldbg=0;
-
-
-extern int T1aa_SmartOn; /* from t1aaset.c */
-extern float T1aa_smartlimit1;
-extern float T1aa_smartlimit2;
-
-
-
-static XColor aacolors[AAMAXPLANES];
-static unsigned long aapixels[AAMAXPLANES];
-
-
-/* The following parameter determines whether t1lib will use logical
- positioning of chars and string (place the origin at specified
- destination-point) or absolute positioning with respect to the
- origin (upper left corner) of the generated bitmap/pixmap. */
-static int T1_lposition=1;
-
-
-
-/* T1_SetX11Params(): Set X11-parameters which t1lib has to know in order
- to properly generate pixmaps from characters */
-int T1_SetWin32Params( HDC hDc,
- unsigned int depth,
- Colormap colormap)
-{
-
- T1_display =display;
- T1_visual =visual;
- T1_depth =depth;
- T1_colormap =colormap;
-
- if (T1_CheckEndian()==0)
- T1_byte_order=0;
- else
- T1_byte_order=1;
-
- /* For bug hunting: */
- if (ImageByteOrder( T1_display)==0)
- T1_PrintLog( "T1_SetX11Params()",
- "X-Server uses Little Endian data representation",
- T1LOG_DEBUG);
- else
- T1_PrintLog( "T1_SetX11Params()",
- "X-Server uses Big Endian data representation",
- T1LOG_DEBUG);
-
- return(0);
-}
-
-
-
-/* T1_SetCharX(): Generate an object of type GLYPH, i.e, a glyph with
- a pixmap ID instead of a pointer to a bitmap: */
-
-GLYPH *T1_SetCharX( HDC hDc, int mode, int x_dest, int y_dest,
- int FontID, char charcode,
- float size, T1_TMATRIX *transform)
-{
- GLYPH *pglyph;
- static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0};
-
- int height, width;
- Pixmap clipmask=0;
- int opaque;
-
-
- xglyph.metrics.leftSideBearing=0;
- xglyph.metrics.rightSideBearing=0;
- xglyph.metrics.advanceX=0;
- xglyph.metrics.advanceY=0;
- xglyph.metrics.ascent=0;
- xglyph.metrics.descent=0;
- xglyph.pFontCacheInfo=NULL;
-
-
- opaque=mode;
-
-
- if ((pglyph=T1_SetChar( FontID, charcode, size, transform))==NULL){
- T1_PrintLog( "T1_SetCharX()",
- "T1_SetChar() returned NULL-pointer!",
- T1LOG_WARNING);
- return(NULL);
- }
-
- /* Check for empty bitmap */
- if (pglyph->bits==NULL) {
- xglyph=*pglyph;
- return( &xglyph);
- }
-
- width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing;
- height=pglyph->metrics.ascent-pglyph->metrics.descent;
-
-
- clipmask=XCreateBitmapFromData( T1_display,
- d,
- (char *)pglyph->bits,
- PAD(width, pFontBase->bitmap_pad),
- height
- );
-
- /* Correct position */
- if (T1_lposition){
- x_dest += pglyph->metrics.leftSideBearing;
- y_dest -= pglyph->metrics.ascent;
- }
-
- if (opaque==0){
- XSetClipMask(T1_display, gc, clipmask);
- XSetClipOrigin(T1_display, gc, x_dest, y_dest);
- }
-
- XCopyPlane( T1_display, clipmask, d, gc, 0, 0,
- width, height, x_dest, y_dest, 0x01);
-
- if (clipmask){
- XFreePixmap( T1_display, clipmask);
- clipmask=0;
- XSetClipMask(T1_display, gc, None);
- XSetClipOrigin(T1_display, gc, 0, 0);
- }
-
- pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */
- xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing;
- xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing;
- xglyph.metrics.advanceX=pglyph->metrics.advanceX;
- xglyph.metrics.advanceY=pglyph->metrics.advanceY;
- xglyph.metrics.ascent=pglyph->metrics.ascent;
- xglyph.metrics.descent=pglyph->metrics.descent;
- xglyph.bpp=pglyph->bpp;
-
- return( &xglyph);
-
-
-}
-
-
-
-/* T1_SetStringX(...): Draw a string of characters into an X11 drawable */
-GLYPH *T1_SetStringX( HDC hDc, int mode, int x_dest, int y_dest,
- int FontID, char *string, int len,
- long spaceoff, int modflag, float size,
- T1_TMATRIX *transform)
-{
- GLYPH *pglyph;
- static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0};
-
- int height, width;
- Pixmap clipmask=0;
- int opaque;
-
-
- xglyph.metrics.leftSideBearing=0;
- xglyph.metrics.rightSideBearing=0;
- xglyph.metrics.advanceX=0;
- xglyph.metrics.advanceY=0;
- xglyph.metrics.ascent=0;
- xglyph.metrics.descent=0;
- xglyph.pFontCacheInfo=NULL;
-
-
- opaque=mode;
-
-
- if ((pglyph=T1_SetString( FontID, string, len,
- spaceoff, modflag, size,
- transform))==NULL){
- T1_PrintLog( "T1_SetStringX()",
- "T1_SetString() returned NULL-pointer!",
- T1LOG_WARNING);
- return(NULL);
- }
-
- /* Check for empty bitmap */
- if (pglyph->bits==NULL) {
- xglyph=*pglyph;
- return( &xglyph);
- }
-
- width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing;
- height=pglyph->metrics.ascent-pglyph->metrics.descent;
-
- clipmask=XCreateBitmapFromData( T1_display,
- d,
- (char *)pglyph->bits,
- PAD(width, pFontBase->bitmap_pad), /* width */
- height
- );
-
- /* Correct position */
- if (T1_lposition){
- x_dest += pglyph->metrics.leftSideBearing;
- y_dest -= pglyph->metrics.ascent;
- }
-
- if (opaque==0){
- XSetClipMask(T1_display, gc, clipmask);
- XSetClipOrigin(T1_display, gc, x_dest, y_dest);
- }
-
- XCopyPlane( T1_display, clipmask, d, gc, 0, 0,
- width, height, x_dest, y_dest, 0x01);
-
- if (clipmask){
- XFreePixmap( T1_display, clipmask);
- clipmask=0;
- XSetClipMask(T1_display, gc, None);
- XSetClipOrigin(T1_display, gc, 0, 0);
- }
-
- pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */
- xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing;
- xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing;
- xglyph.metrics.advanceX=pglyph->metrics.advanceX;
- xglyph.metrics.advanceY=pglyph->metrics.advanceY;
- xglyph.metrics.ascent=pglyph->metrics.ascent;
- xglyph.metrics.descent=pglyph->metrics.descent;
- xglyph.bpp=pglyph->bpp;
-
- return( &xglyph);
-
-
-}
-
-
-
-/* T1_AASetCharX(): Generate an object of type GLYPH, i.e, a glyph with
- a pixmap ID instead of a pointer to a bitmap: */
-
-GLYPH *T1_AASetCharX( HDC hDc, int mode, int x_dest, int y_dest,
- int FontID, char charcode,
- float size, T1_TMATRIX *transform)
-{
- int j, k;
-
- GLYPH *pglyph;
- XImage *ximage;
-
- static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0};
-
- int height, width, width_pad;
-
- XGCValues xgcvalues;
- static unsigned long fg, bg, oldfg=0, oldbg=0;
- static unsigned long oldfg_l=0, oldbg_l=0, oldfg_h=0, oldbg_h=0;
-
- Pixmap clipmask=0;
- int clipmask_h, clipmask_v, line_off;
- char *clipmask_ptr;
-
- int opaque;
-
-
-
- xglyph.metrics.leftSideBearing=0;
- xglyph.metrics.rightSideBearing=0;
- xglyph.metrics.advanceX=0;
- xglyph.metrics.advanceY=0;
- xglyph.metrics.ascent=0;
- xglyph.metrics.descent=0;
- xglyph.pFontCacheInfo=NULL;
-
-
- opaque=mode;
-
- xglyph.bpp=T1_depth;
-
- /* In order to be able to contruct the pixmap we need to know
- foreground and background color as well the copy function */
- XGetGCValues( T1_display, gc, T1GCMASK, &xgcvalues);
- fg=xgcvalues.foreground;
- bg=xgcvalues.background;
-
-
- /* At this point we must compute the colors that are needed to do
- antialiasing between fore- and background. The following function
- fills the static aacolors */
- if (T1aa_SmartOn==0)
- j=T1_AAGetLevel();
- else if (size>=T1aa_smartlimit2)
- j=1;
- else if (size>=T1aa_smartlimit1)
- j=2;
- else
- j=4;
- if ( j!=lastlevel || fg!=oldfg || bg!=oldbg ){
- switch ( j){
- case 1:
- if ( fg!=oldfg_n || bg!=oldbg_n){
- oldfg_n=fg;
- oldbg_n=bg;
- /* computing colors is not necessary here */
- T1_AANSetGrayValues( bg, fg);
- }
- break;
- case 2:
- if ( fg!=oldfg_l || bg!=oldbg_l){
- oldfg_l=fg;
- oldbg_l=bg;
- T1_ComputeAAColorsX( fg, bg, AAMAXPLANES);
- T1_AASetGrayValues(aapixels[0], /* white */
- aapixels[4],
- aapixels[8],
- aapixels[12],
- aapixels[16] ); /* black */
- }
- break;
- case 4:
- if ( fg!=oldfg_h || bg!=oldbg_h){
- oldfg_h=fg;
- oldbg_h=bg;
- T1_ComputeAAColorsX( fg, bg, AAMAXPLANES);
- T1_AAHSetGrayValues( aapixels);
- }
- break;
- }
- lastlevel=j;
- oldfg=fg;
- oldbg=bg;
- }
-
- if ((pglyph=T1_AASetChar( FontID, charcode, size,
- transform))==NULL){
- T1_PrintLog( "T1_AASetCharX()",
- "T1_AASetChar() returned NULL-pointer!",
- T1LOG_WARNING);
- return(NULL);
- }
-
- /* Check for empty bitmap */
- if (pglyph->bits==NULL) {
- xglyph=*pglyph;
- return( &xglyph);
- }
-
- width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing;
- height=pglyph->metrics.ascent-pglyph->metrics.descent;
-
-
- /* Correct position */
- if (T1_lposition){
- x_dest += pglyph->metrics.leftSideBearing;
- y_dest -= pglyph->metrics.ascent;
- }
-
- if (opaque==0){
- clipmask_v=height;
- clipmask_h=width;
- width_pad=PAD(width*T1aa_bpp, pFontBase->bitmap_pad)/T1aa_bpp;
- clipmask_ptr=(char *)calloc((PAD(clipmask_h, 8)>>3) * clipmask_v, sizeof( char));
- if (clipmask_ptr==NULL){
- T1_errno=T1ERR_ALLOC_MEM;
- return(NULL);
- }
- /* Note: We pad the clipmask always to byte boundary */
- if (pglyph->bpp==8)
- for ( k=0; k<clipmask_v; k++){
- line_off=k*(PAD(clipmask_h, 8)>>3);
- for (j=0; j<clipmask_h; j++){
- if (((char *)(pglyph->bits))[k*width_pad+j]!=bg)
- clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8));
- }
- }
- else if (pglyph->bpp==16)
- for ( k=0; k<clipmask_v; k++){
- line_off=k*(PAD(clipmask_h, 8)>>3);
- for (j=0; j<clipmask_h; j++){
- if (((T1_AA_TYPE16 *)(pglyph->bits))[k*width_pad+j]!=(T1_AA_TYPE16)bg)
- clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8));
- }
- }
- else
- for ( k=0; k<clipmask_v; k++){
- line_off=k*(PAD(clipmask_h, 8)>>3);
- for (j=0; j<clipmask_h; j++){
- if (((T1_AA_TYPE32 *)(pglyph->bits))[k*width_pad+j]!=(T1_AA_TYPE32)bg)
- clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8));
- }
- }
-
- clipmask=XCreateBitmapFromData( T1_display,
- d,
- (char *)clipmask_ptr,
- width,
- height
- );
- free( clipmask_ptr);
- XSetClipMask(T1_display, gc, clipmask);
- XSetClipOrigin(T1_display, gc, x_dest, y_dest);
-
- }
- ximage=XCreateImage( T1_display,
- T1_visual,
- T1_depth,
- ZPixmap, /* XYBitmap or XYPixmap */
- 0, /* No offset */
- (char *)pglyph->bits,
- width,
- height,
- pFontBase->bitmap_pad,
- 0 /*PAD(width,8)/8*/ /* number of bytes per line */
- );
- ximage->byte_order=T1_byte_order;
- XPutImage(T1_display,
- d,
- gc,
- ximage,
- 0,
- 0,
- x_dest,
- y_dest,
- width,
- height
- );
- XDestroyImage(ximage);
- if (clipmask){
- XFreePixmap( T1_display, clipmask);
- clipmask=0;
- XSetClipMask(T1_display, gc, None);
- XSetClipOrigin(T1_display, gc, 0, 0);
- }
-
- pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */
- xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing;
- xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing;
- xglyph.metrics.advanceX=pglyph->metrics.advanceX;
- xglyph.metrics.advanceY=pglyph->metrics.advanceY;
- xglyph.metrics.ascent=pglyph->metrics.ascent;
- xglyph.metrics.descent=pglyph->metrics.descent;
- xglyph.bpp=pglyph->bpp;
-
- return( &xglyph);
-
-
-}
-
-
-
-/* T1_AASetStringX(...): Draw a string of characters into an X11 drawable */
-GLYPH *T1_AASetStringX( HDC hDc, int mode, int x_dest, int y_dest,
- int FontID, char *string, int len,
- long spaceoff, int modflag, float size,
- T1_TMATRIX *transform)
-{
- int j, k;
-
- GLYPH *pglyph;
- XImage *ximage;
-
-
- static GLYPH xglyph={NULL,{0,0,0,0,0,0},NULL,0};
-
- int height, width, width_pad;
-
- XGCValues xgcvalues;
- static unsigned long fg, bg;
-
-
- Pixmap clipmask=0;
- int clipmask_h, clipmask_v, line_off;
- char *clipmask_ptr;
-
- int opaque;
-
-
- xglyph.metrics.leftSideBearing=0;
- xglyph.metrics.rightSideBearing=0;
- xglyph.metrics.advanceX=0;
- xglyph.metrics.advanceY=0;
- xglyph.metrics.ascent=0;
- xglyph.metrics.descent=0;
- xglyph.pFontCacheInfo=NULL;
-
-
- opaque=mode;
-
-
- /* In order to be able to contruct the pixmap we need to know
- foreground and background color as well the copy function */
- XGetGCValues( T1_display, gc, T1GCMASK, &xgcvalues);
- fg=xgcvalues.foreground;
- bg=xgcvalues.background;
-
- xglyph.bpp=T1_depth;
-
- /* At this point we must compute the colors that are needed to do
- antialiasing between fore- and background. The following function
- fills the static aacolors */
- if (T1aa_SmartOn==0)
- j=T1_AAGetLevel();
- else if (size>=T1aa_smartlimit2)
- j=1;
- else if (size>=T1aa_smartlimit1)
- j=2;
- else
- j=4;
- if ( j!=lastlevel || fg!=oldfg || bg!=oldbg ){
- switch ( j){
- case 1:
- if ( fg!=oldfg_n || bg!=oldbg_n){
- oldfg_n=fg;
- oldbg_n=bg;
- /* computing colors is not necessary here */
- T1_AANSetGrayValues( bg, fg);
- }
- break;
- case 2:
- if ( fg!=oldfg_l || bg!=oldbg_l){
- oldfg_l=fg;
- oldbg_l=bg;
- T1_ComputeAAColorsX( fg, bg, AAMAXPLANES);
- T1_AASetGrayValues(aapixels[0], /* white */
- aapixels[4],
- aapixels[8],
- aapixels[12],
- aapixels[16] ); /* black */
- }
- break;
- case 4:
- if ( fg!=oldfg_h || bg!=oldbg_h){
- oldfg_h=fg;
- oldbg_h=bg;
- T1_ComputeAAColorsX( fg, bg, AAMAXPLANES);
- T1_AAHSetGrayValues( aapixels);
- }
- break;
- }
- lastlevel=j;
- oldfg=fg;
- oldbg=bg;
- }
-
-
- if ((pglyph=T1_AASetString( FontID, string, len,
- spaceoff, modflag, size,
- transform))==NULL){
- T1_PrintLog( "T1_AASetStringX()",
- "T1_AASetString() returned NULL-pointer!",
- T1LOG_WARNING);
- return(NULL);
- }
-
- /* Check for empty bitmap */
- if (pglyph->bits==NULL) {
- xglyph=*pglyph;
- return( &xglyph);
- }
-
- width=pglyph->metrics.rightSideBearing-pglyph->metrics.leftSideBearing;
- height=pglyph->metrics.ascent-pglyph->metrics.descent;
-
-
- /* Correct position */
- if (T1_lposition){
- x_dest += pglyph->metrics.leftSideBearing;
- y_dest -= pglyph->metrics.ascent;
- }
-
- if (opaque==0){
- clipmask_v=height;
- clipmask_h=width;
- width_pad=PAD(width*T1aa_bpp, pFontBase->bitmap_pad)/T1aa_bpp;
- clipmask_ptr=(char *)calloc((PAD(clipmask_h, 8)>>3) * clipmask_v, sizeof( char));
- if (clipmask_ptr==NULL){
- T1_errno=T1ERR_ALLOC_MEM;
- return(NULL);
- }
- /* Note: We pad the clipmask always to byte boundary */
- if (pglyph->bpp==8)
- for ( k=0; k<clipmask_v; k++){
- line_off=k*(PAD(clipmask_h, 8)>>3);
- for (j=0; j<clipmask_h; j++){
- if (((char *)(pglyph->bits))[k*width_pad+j]!=bg)
- clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8));
- }
- }
- else if (pglyph->bpp==16)
- for ( k=0; k<clipmask_v; k++){
- line_off=k*(PAD(clipmask_h, 8)>>3);
- for (j=0; j<clipmask_h; j++){
- if (((T1_AA_TYPE16 *)(pglyph->bits))[k*width_pad+j]!=(T1_AA_TYPE16)bg)
- clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8));
- }
- }
- else
- for ( k=0; k<clipmask_v; k++){
- line_off=k*(PAD(clipmask_h, 8)>>3);
- for (j=0; j<clipmask_h; j++){
- if (((T1_AA_TYPE32 *)(pglyph->bits))[k*width_pad+j]!=(T1_AA_TYPE32)bg)
- clipmask_ptr[line_off+(j>>3)] |= (0x01<<(j%8));
- }
- }
-
- clipmask=XCreateBitmapFromData( T1_display,
- d,
- (char *)clipmask_ptr,
- width,
- height
- );
- free( clipmask_ptr);
- XSetClipMask(T1_display, gc, clipmask);
- XSetClipOrigin(T1_display, gc, x_dest, y_dest);
-
- }
- ximage=XCreateImage( T1_display,
- T1_visual,
- T1_depth,
- ZPixmap, /* XYBitmap or XYPixmap */
- 0, /* No offset */
- (char *)pglyph->bits,
- width,
- height,
- pFontBase->bitmap_pad, /* lines padded to bytes */
- 0 /*PAD(width,8)/8*/ /* number of bytes per line */
- );
- ximage->byte_order=T1_byte_order;
- XPutImage(T1_display,
- d,
- gc,
- ximage,
- 0,
- 0,
- x_dest,
- y_dest,
- width,
- height
- );
- XDestroyImage(ximage);
- if (clipmask){
- XFreePixmap( T1_display, clipmask);
- clipmask=0;
- XSetClipMask(T1_display, gc, None);
- XSetClipOrigin(T1_display, gc, 0, 0);
- }
-
- pglyph->bits=NULL; /* Since XDestroyImage() free's this also! */
- xglyph.metrics.leftSideBearing=pglyph->metrics.leftSideBearing;
- xglyph.metrics.rightSideBearing=pglyph->metrics.rightSideBearing;
- xglyph.metrics.advanceX=pglyph->metrics.advanceX;
- xglyph.metrics.advanceY=pglyph->metrics.advanceY;
- xglyph.metrics.ascent=pglyph->metrics.ascent;
- xglyph.metrics.descent=pglyph->metrics.descent;
- xglyph.bpp=pglyph->bpp;
-
- return( &xglyph);
-
-
-}
-
-
-
-/* T1_ComputeAAColorsX(): Compute the antialiasing colors in dependency
- of foreground and background */
-int T1_ComputeAAColorsX( unsigned long fg, unsigned long bg, int nolevels)
-{
-
- static unsigned long last_fg;
- static unsigned long last_bg;
- unsigned long delta_red, delta_green, delta_blue;
- int i;
- int nocolors=0;
-
-
- aacolors[0].pixel=bg;
- aacolors[nolevels-1].pixel=fg;
-
- if ((fg==last_fg)&&(bg==last_bg))
- return(nocolors);
-
- /* Get RGB values for fore- and background */
- XQueryColor( T1_display, T1_colormap, &aacolors[0]);
- XQueryColor( T1_display, T1_colormap, &aacolors[nolevels-1]);
- delta_red = (aacolors[nolevels-1].red - aacolors[0].red)/(nolevels-1);
- delta_green = (aacolors[nolevels-1].green - aacolors[0].green)/(nolevels-1);
- delta_blue = (aacolors[nolevels-1].blue - aacolors[0].blue)/(nolevels-1);
- aapixels[0]=aacolors[0].pixel;
- aapixels[nolevels-1]=aacolors[nolevels-1].pixel;
-
-
- for (i=1; i<nolevels-1; i++){
- aacolors[i].red = aacolors[i-1].red + delta_red;
- aacolors[i].green = aacolors[i-1].green + delta_green;
- aacolors[i].blue = aacolors[i-1].blue + delta_blue;
- /* Allocate color in current palette */
- if (XAllocColor( T1_display, T1_colormap, &aacolors[i])!=0){
- aapixels[i]=aacolors[i].pixel;
- nocolors++;
- }
-
- }
-
- return(nocolors);
-
-}
-
-
-
-/* Set the positioning switch */
-void T1_LogicalPositionX( int pos_switch)
-{
- if (pos_switch)
- T1_lposition=1;
- else
- T1_lposition=0;
- return;
-}
-
diff --git a/Build/source/libs/t1lib/type1afm.test b/Build/source/libs/t1lib/type1afm.test
new file mode 100755
index 00000000000..7875fcb4fe3
--- /dev/null
+++ b/Build/source/libs/t1lib/type1afm.test
@@ -0,0 +1,14 @@
+#! /bin/sh
+
+rm -f l047016t.afm
+
+test -f x047016t.pfa \
+ || cp $srcdir/l047016t.pfa x047016t.pfa \
+ || exit 1
+
+./type1afm ./x047016t.pfa || exit 1
+
+sed x047016t.afm -e '/^Comment File creation date:/d' >l047016t.afmx \
+ && diff l047016t.afmx $srcdir/l047016t.xafm \
+ || exit 1
+
diff --git a/Build/source/libs/t1lib/withenable.ac b/Build/source/libs/t1lib/withenable.ac
deleted file mode 100644
index cc7076168d9..00000000000
--- a/Build/source/libs/t1lib/withenable.ac
+++ /dev/null
@@ -1,10 +0,0 @@
-AC_ARG_WITH([system-t1lib],
-[ --with-system-t1lib Use installed T1lib])
-
-AC_ARG_WITH([t1lib_libdir],
-[ --with-t1lib-libdir=DIR
- Specify the location of T1lib library files (libt1.a)])
-
-AC_ARG_WITH([t1lib_include],
-[ --with-t1lib-include=DIR
- Specify the location of T1lib header files])
diff --git a/Build/source/libs/type1/ChangeLog b/Build/source/libs/type1/ChangeLog
deleted file mode 100644
index 327c56808ff..00000000000
--- a/Build/source/libs/type1/ChangeLog
+++ /dev/null
@@ -1,7 +0,0 @@
-2008-01-31 Peter Breitenlohner <peb@mppmu.mpg.de>
-
- Convert from autoconf-2.13 to autoconf-2.59+:
- * Makefile.in: Add @configure_input@ line.
- * aclocal.m4 (new): Generated (aclocal -I ../../texk/m4).
- * configure: Regenerated (autoconf).
-
diff --git a/Build/source/libs/type1/Makefile.in b/Build/source/libs/type1/Makefile.in
deleted file mode 100644
index 9a0f60148f4..00000000000
--- a/Build/source/libs/type1/Makefile.in
+++ /dev/null
@@ -1,24 +0,0 @@
-# @configure_input@
-
-kpse_include ../../texk/make/common.mk
-kpse_include ../../texk/make/programs.mk
-kpse_include ../../texk/make/library.mk
-kpse_include ../../texk/make/paths.mk
-
-OBJS = arith.o bstring.o curves.o fontfcn.o hints.o lines.o objects.o \
- paths.o regions.o scanfont.o spaces.o t1io.o t1snap.o t1stub.o token.o \
- type1.o util.o
-
-libtype1.a: $(OBJS)
- rm -f $@
- $(AR) $(ARFLAGS) $@ $(OBJS)
- $(RANLIB) $@
-
-all: libtype1.a
-uninstall:
-
-kpse_include ../../texk/make/clean.mk
-clean::
- rm -f libtype1.a
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/Build/source/libs/type1/acconfig.h b/Build/source/libs/type1/acconfig.h
deleted file mode 100644
index cb10e2f695c..00000000000
--- a/Build/source/libs/type1/acconfig.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Define to determine the integer type to be used in bitmaps. The type used
- will be "unsigned BMTYPE". */
-#define BMTYPE int
-
-/* Define to the length (in bytes) of the above type. */
-#define BMBYTES 4
-
-/* Define if your C compiler does not do string concatenation. */
-#undef CC_K_AND_R
-
-/* Define if your system has STREAMS (and if X uses it). */
-#undef HAVE_STREAMS
-
-/* Define if you are using SunOS 4.x. */
-#undef SUNOS4
-
-/* Define if you are using Linux 2.1.xxx -- 2.2.8,
- or if you find it necessary. */
-#undef FLAKY_SIGPOLL
-
-/* Define if your system has <poll.h> and poll(). */
-#undef HAVE_POLL
-
-/* Define if your system has waitpid(). */
-#undef HAVE_WAITPID
-
-/* Define if your system has putenv(). */
-#undef HAVE_PUTENV
-
-/* Define to use the Xaw toolkit. */
-#undef XAW
-
-/* Define this and XAW to use the Xaw3d toolkit. */
-#undef XAW3D
-
-/* Define to use the Motif toolkit. */
-#undef MOTIF
-
-/* Define to enable greyscale anti-aliasing for shrunken bitmaps. */
-#undef GREY
-
-/* Define to enable radio buttons on the side of the window for common
- commands. */
-#undef BUTTONS
-
-/* Define to enable calling of mktexpk to automatically create missing
- pixel files. */
-#undef MKTEXPK
-
-/* Define to enable old-style MakeTeXPK scripts to automatically create missing
- pixel files. */
-#undef MAKETEXPK
-
-/* Define to point to the mktexpk or MakeTeXPK script (optional). */
-#undef MKTEXPK_PATH
-
-/* Define to enable gf format files (in addition to pk format). */
-#undef USE_GF
-
-/* Define to enable PostScript support via ghostscript. */
-#undef PS_GS
-
-/* Define to point to the ghostscript interpreter (optional). */
-#undef GS_PATH
-
-/* Define to enable PostScript support via Display PostScript. */
-#undef PS_DPS
-
-/* Define to enable PostScript support via NeWS (Sun OpenWindows). */
-#undef PS_NEWS
-
-/* Define to enable support for a configuration file. Its value must be a
- colon-separated list of paths to search. */
-#undef DEFAULT_CONFIG_PATH
-
-/* Define to enable support for a configuration file (as above), including
- support for the variables $SELFAUTODIR and $SELFAUTOPARENT. */
-#undef SELFAUTO
-
-/* Define to enable support for an additional app-defaults file (located with
- the texmf hierarchy). */
-#undef EXTRA_APP_DEFAULTS
-
-/* Define to use DOS-style names for font files (e.g., dpi300/cmr10.pk instead
- of cmr10.300pk). */
-#undef DOSNAMES
-
-/* Define to use A4 as the default paper size. */
-#undef A4
-
-/* Define to enable right-to-left typesetting. */
-#undef TEXXET
-
-/* Define to set a default mfmode and resolution. */
-#undef MFMODE
-
-/* Define to use hypertex */
-#undef HTEX
-
-/* ??? */
-#undef LDT1LIB
-
-#undef MAKE_OMEGA_OCP_BY_DEFAULT
-#undef MAKE_OMEGA_OFM_BY_DEFAULT
-#undef MAKE_TEX_MF_BY_DEFAULT
-#undef MAKE_TEX_PK_BY_DEFAULT
-#undef MAKE_TEX_TFM_BY_DEFAULT
-
-/* Define to compile in statusline */
-#undef STATUSLINE
-
-/* Define to compile in t1lib */
-#undef T1LIB
-
-#undef HAVE_CC_CONCAT
-
-#undef HAVE_VSNPRINTF
-
-#undef NOTOOL
diff --git a/Build/source/libs/type1/aclocal.m4 b/Build/source/libs/type1/aclocal.m4
deleted file mode 100644
index 76aba4fa64e..00000000000
--- a/Build/source/libs/type1/aclocal.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_include([../../texk/m4/kpse_inc.m4])
-m4_include([../../texk/m4/kpse_maint.m4])
diff --git a/Build/source/libs/type1/c-auto.in b/Build/source/libs/type1/c-auto.in
deleted file mode 100644
index 23b534f4fea..00000000000
--- a/Build/source/libs/type1/c-auto.in
+++ /dev/null
@@ -1,10 +0,0 @@
-/* c-auto.in. Generated automatically from configure.in by autoheader. */
-
-#undef MAKE_OMEGA_OCP_BY_DEFAULT
-#undef MAKE_OMEGA_OFM_BY_DEFAULT
-#undef MAKE_TEX_MF_BY_DEFAULT
-#undef MAKE_TEX_PK_BY_DEFAULT
-#undef MAKE_TEX_TFM_BY_DEFAULT
-
-/* Define if you have the memset function. */
-#undef HAVE_MEMSET
diff --git a/Build/source/libs/type1/configure b/Build/source/libs/type1/configure
deleted file mode 100755
index c9e4cb96c87..00000000000
--- a/Build/source/libs/type1/configure
+++ /dev/null
@@ -1,4744 +0,0 @@
-#! /bin/sh
-# From configure.in configure.in 1.00.
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell bug-autoconf@gnu.org about your system,
- echo including any error possibly output before this message.
- echo This can help us improve future autoconf versions.
- echo Configuration will now proceed without shell functions.
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="t1stub.c"
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-texmfmain
-ARFLAGS
-AR
-LD
-MAINT
-RANLIB
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-SET_MAKE
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_maintainer_mode
-with_mktexmf_default
-with_mktexpk_default
-with_mktextfm_default
-with_mkocp_default
-with_mkofm_default
-with_mktexfmt_default
-with_mktextex_default
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
- { (exit 1); exit 1; }; } ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { $as_echo "$as_me: error: working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --without-mktexmf-default do not run mktexmf if MF source missing
- --without-mktexpk-default do not run mktexpk if PK font missing
- --without-mktextfm-default do not run mktextfm if TFM file missing
- --without-mkocp-default do not run mkocp if OCP file missing
- --without-mkofm-default do not run mkofm if OFM file missing
- --with-mktexfmt-default run mktexfmt if format file missing
- --with-mktextex-default run mktextex if TeX source missing
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.63
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_aux_dir=
-for ac_dir in ../../config "$srcdir"/../../config; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ../../config \"$srcdir\"/../../config" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in ../../config \"$srcdir\"/../../config" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-ac_config_headers="$ac_config_headers c-auto.h:c-auto.in"
-
-
-{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
- fi
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:$LINENO: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-
-for ac_func in memset
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- eval "$as_ac_var=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_var'}
- $as_echo "$as_val"'`
- if test "x$as_val" = x""yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
- # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
- enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
-else
- USE_MAINTAINER_MODE=no
-fi
-
- { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-$as_echo "$USE_MAINTAINER_MODE" >&6; }
- if test "x$USE_MAINTAINER_MODE" = xyes; then
- MAINT=
- else
- MAINT='#M#'
- fi
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for loader (symbol LD)" >&5
-$as_echo_n "checking for loader (symbol LD)... " >&6; }
-if test "${cf_cv_subst_LD+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$LD" && LD=ld
-cf_cv_subst_LD=$LD
-fi
-
-LD=${cf_cv_subst_LD}
-{ $as_echo "$as_me:$LINENO: result: $LD" >&5
-$as_echo "$LD" >&6; }
-
-
-{ $as_echo "$as_me:$LINENO: checking for archiver (symbol AR)" >&5
-$as_echo_n "checking for archiver (symbol AR)... " >&6; }
-if test "${cf_cv_subst_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$AR" && AR=ar
-cf_cv_subst_AR=$AR
-fi
-
-AR=${cf_cv_subst_AR}
-{ $as_echo "$as_me:$LINENO: result: $AR" >&5
-$as_echo "$AR" >&6; }
-
-
-{ $as_echo "$as_me:$LINENO: checking for archiver options (symbol ARFLAGS)" >&5
-$as_echo_n "checking for archiver options (symbol ARFLAGS)... " >&6; }
-if test "${cf_cv_subst_ARFLAGS+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$ARFLAGS" && ARFLAGS=rc
-cf_cv_subst_ARFLAGS=$ARFLAGS
-fi
-
-ARFLAGS=${cf_cv_subst_ARFLAGS}
-{ $as_echo "$as_me:$LINENO: result: $ARFLAGS" >&5
-$as_echo "$ARFLAGS" >&6; }
-
-
-
-
-# Check whether --with-mktexmf-default was given.
-if test "${with_mktexmf_default+set}" = set; then
- withval=$with_mktexmf_default;
-else
- with_mktexmf_default=yes
-fi
-
-
-# Check whether --with-mktexpk-default was given.
-if test "${with_mktexpk_default+set}" = set; then
- withval=$with_mktexpk_default;
-else
- with_mktexpk_default=yes
-fi
-
-
-# Check whether --with-mktextfm-default was given.
-if test "${with_mktextfm_default+set}" = set; then
- withval=$with_mktextfm_default;
-else
- with_mktextfm_default=yes
-fi
-
-
-# Check whether --with-mkocp-default was given.
-if test "${with_mkocp_default+set}" = set; then
- withval=$with_mkocp_default;
-else
- with_mkocp_default=yes
-fi
-
-
-# Check whether --with-mkofm-default was given.
-if test "${with_mkofm_default+set}" = set; then
- withval=$with_mkofm_default;
-else
- with_mkofm_default=yes
-fi
-
-
-# Check whether --with-mktexfmt-default was given.
-if test "${with_mktexfmt_default+set}" = set; then
- withval=$with_mktexfmt_default;
-fi
-
-
-# Check whether --with-mktextex-default was given.
-if test "${with_mktextex_default+set}" = set; then
- withval=$with_mktextex_default; with_mktextex_default=yes
-else
- with_mktextex_default=no
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking where the main texmf tree is located" >&5
-$as_echo_n "checking where the main texmf tree is located... " >&6; }
-case $prefix in
- */) prefix=`echo "$prefix" | sed 's@/*$@@'`;;
-esac
-texmfmain=
-if test "x$datadir" != 'x${prefix}/share'; then
- # First case, datadir is defined...
- eval p=\"$datadir\"
- # Unconditionally set the directory, but...
- texmfmain=`echo "$p/texmf" | sed 's,//*,/,g'`
- # ... do complain if it wasn't found.
- if test -d "$texmfmain"; then
- { $as_echo "$as_me:$LINENO: result: \"$texmfmain\"" >&5
-$as_echo "\"$texmfmain\"" >&6; }
- else
- true # be silent dnl AC_MSG_RESULT([not found])
- fi
-else
- # Second case, datadir is default...
- if test "x$prefix" = "xNONE"; then
- p="$ac_default_prefix"
- else
- eval p=\"$prefix\"
- fi
- for e in share/texmf lib/texmf texmf; do
- if test -d "$p/$e"; then
- texmfmain='${prefix}'/"$e"
- break
- fi
- done
- if test -z "$texmfmain" && test "x$prefix" = "xNONE"; then
- # Still no texmfmain found, no prefix set, perhaps kpsewhich is
- # installed and can help us out.
- texmfmain=`kpsewhich --expand-path='$TEXMFMAIN'` 2>/dev/null
- fi
- texmfmain=`echo "$texmfmain" | sed 's,//*,/,g'`
- if test -n "$texmfmain"; then
- { $as_echo "$as_me:$LINENO: result: \"$texmfmain\"" >&5
-$as_echo "\"$texmfmain\"" >&6; }
- else
- eval texmfmain="$datadir/texmf"
- # (be silent) dnl AC_MSG_RESULT([not found])
- fi
-fi
-
-
-
-if test "x${GCC}" = "xyes"
-then
- CFLAGS="$CFLAGS"
- { $as_echo "$as_me:$LINENO: checking \"for gcc strength-reduce bug\"" >&5
-$as_echo_n "checking \"for gcc strength-reduce bug\"... " >&6; }
-if test "${ac_cv_c_gcc_strength_bug+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_c_gcc_strength_bug="yes"
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int main(void) {
- static int Array[3];
- unsigned int B = 3;
- int i;
- for(i=0; i<B; i++) Array[i] = i - 3;
- exit( Array[1] != -2 );
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_c_gcc_strength_bug="no"
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_c_gcc_strength_bug="yes"
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_gcc_strength_bug" >&5
-$as_echo "$ac_cv_c_gcc_strength_bug" >&6; }
- if test "$ac_cv_c_gcc_strength_bug" = "yes"
- then
- CFLAGS="$CFLAGS -fno-strength-reduce"
- fi
-fi
-
-ac_config_files="$ac_config_files Makefile.aux:Makefile.in"
-ac_config_files="$ac_config_files Makefile:Makefile.aux"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# Save the log message, to keep $[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTION]... [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.63,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- { $as_echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "c-auto.h") CONFIG_HEADERS="$CONFIG_HEADERS c-auto.h:c-auto.in" ;;
- "Makefile.aux") CONFIG_FILES="$CONFIG_FILES Makefile.aux:Makefile.in" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.aux" ;;
-
- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $as_echo "$as_me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=' '
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
- { (exit 1); exit 1; }; }
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
- { (exit 1); exit 1; }; }
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
-$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- ac_file_inputs="$ac_file_inputs '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; } ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
- esac \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$tmp/config.h" "$ac_file" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
-$as_echo "$as_me: error: could not create -" >&2;}
- { (exit 1); exit 1; }; }
- fi
- ;;
-
-
- esac
-
-
- case $ac_file$ac_mode in
- "Makefile.aux":F) # Discard the file just generated and first resolve kpse_include's
- kpse_input=`case Makefile.in in
- [\\/$]*) # Absolute
- test -f "Makefile.in" || { { $as_echo "$as_me:$LINENO: error: cannot find input file: Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- echo "Makefile.in";;
- *) # Relative
- if test -f "Makefile.in"; then
- # Build tree
- echo "Makefile.in"
- elif test -f "$srcdir/Makefile.in"; then
- # Source tree
- echo "$srcdir/Makefile.in"
- else
- # /dev/null tree
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac` || { (exit 1); exit 1; }
-# Replace lines of the form "kpse_include foo" with the contents of foo:
-# first, from the kpse_include lines construct a list of file names.
-# From that list, we construct a second list of those files that exist.
-# Then we construct a list of sed commands for including those files,
-# and a sed command that removes the kpse_include lines. We don't attempt
-# to read non-existent files because some (buggy) versions of sed choke
-# on this. Have to use sed because old (Ultrix, SunOs) awk does not support
-# getline or system. (Anyway, configure scripts aren't supposed to use awk.)
-# Can't use only one -e and commands {dr foo} because foo has to be last.
-# Be careful, because the filename may contain /.
-# Be careful with whitespace; we need to use echo.
-kpse_file_substs=`sed -n '/^kpse_include/s%[ ]*\(.*\)%\1%p' "$kpse_input"`
-if test x"$kpse_file_substs" = x; then
- { $as_echo "$as_me:$LINENO: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`Makefile.in'
- without any \`kpse_include' directives" >&5
-$as_echo "$as_me: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`Makefile.in'
- without any \`kpse_include' directives" >&2;}
-fi
-# Create the sed command line ...
-# Input lines containing "@configure_input@" are output twice,
-# first with our modifications and then unmodified.
-kpse_substs="sed -e '/@configure_input@/ { h; \
- s,@configure_input@,Makefile.aux. Generated from `echo Makefile.in |
- sed 's,.*/,,'` by configure.,; G; }'"
-for kpse_inc in $kpse_file_substs; do
- kpse_read=`case $kpse_inc in
- [\\/$]*) # Absolute
- if test -f "$kpse_inc"; then
- echo "$kpse_inc"
- fi;;
- *) # Relative
- if test -f "$kpse_inc"; then
- # Build tree
- echo "$kpse_inc"
- elif test -f "$srcdir/$kpse_inc"; then
- # Source tree
- echo "$srcdir/$kpse_inc"
- fi;;
- esac`
- if test -n "$kpse_read"; then
- kpse_mung=`echo $kpse_inc | sed 's,/,%,g'`
- kpse_substs="$kpse_substs -e '/^kpse_include $kpse_mung$/r $kpse_read'"
- fi
-done
-# ... and fix the whitespace and escaped slashes.
-kpse_substs=`echo "$kpse_substs" | sed -e 's,%,\\\/,g' \
- -e 's/kpse_include /kpse_include[ ]*/g'`
-(eval $kpse_substs -e '"/^kpse_include/d"' "$kpse_input") > Makefile.aux
- ;;
-
- esac
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/Build/source/libs/type1/configure.in b/Build/source/libs/type1/configure.in
deleted file mode 100644
index afd8eda1885..00000000000
--- a/Build/source/libs/type1/configure.in
+++ /dev/null
@@ -1,37 +0,0 @@
-AC_REVISION([configure.in 1.00])
-AC_INIT(t1stub.c)
-AC_CONFIG_AUX_DIR(../../config)
-AC_CONFIG_HEADERS(c-auto.h:c-auto.in)
-
-AC_PROG_MAKE_SET
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_RANLIB
-AC_CHECK_FUNCS(memset)
-
-sinclude(../../texk/kpathsea/withenable.ac)
-
-dnl **** Check for gcc strength-reduce bug ****
-if test "x${GCC}" = "xyes"
-then
- CFLAGS="$CFLAGS"
- AC_CACHE_CHECK( "for gcc strength-reduce bug", ac_cv_c_gcc_strength_bug,
- AC_TRY_RUN([
-int main(void) {
- static int Array[[3]];
- unsigned int B = 3;
- int i;
- for(i=0; i<B; i++) Array[[i]] = i - 3;
- exit( Array[[1]] != -2 );
-}],
- ac_cv_c_gcc_strength_bug="no",
- ac_cv_c_gcc_strength_bug="yes",
- ac_cv_c_gcc_strength_bug="yes") )
- if test "$ac_cv_c_gcc_strength_bug" = "yes"
- then
- CFLAGS="$CFLAGS -fno-strength-reduce"
- fi
-fi
-
-KPSE_CONFIG_FILES([Makefile])
-AC_OUTPUT
diff --git a/Build/source/libs/type1/stamp-aclocal b/Build/source/libs/type1/stamp-aclocal
deleted file mode 100644
index dde4cbd9781..00000000000
--- a/Build/source/libs/type1/stamp-aclocal
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 27 15:55:00 CET 2009
diff --git a/Build/source/libs/type1/stamp-configure b/Build/source/libs/type1/stamp-configure
deleted file mode 100644
index dde4cbd9781..00000000000
--- a/Build/source/libs/type1/stamp-configure
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 27 15:55:00 CET 2009
diff --git a/Build/source/libs/xpdf/ANNOUNCE b/Build/source/libs/xpdf/ANNOUNCE
deleted file mode 100644
index 1184040894f..00000000000
--- a/Build/source/libs/xpdf/ANNOUNCE
+++ /dev/null
@@ -1,34 +0,0 @@
-Subject: ANNOUNCE: Xpdf 3.02 - a PDF viewer for X
-
-
-Glyph & Cog, LLC is pleased to announce a new version of Xpdf, the
-open source Portable Document Format (PDF) viewer for X. The Xpdf
-project also includes a PDF text extractor, PDF-to-PostScript
-converter, and various other utilities.
-
-Xpdf runs under the X Window System on Unix, VMS, and OS/2. The non-X
-components (pdftops, pdftotext, etc.) also run on Win32 systems and
-should run on pretty much any system with a decent C++ compiler.
-
-Major changes:
-* Anti-aliased vector graphics, including stroke adjustment.
-* Support for PDF 1.6 and PDF 1.7, including AES decryption and
- OpenType fonts.
-* User-configurable key/mouse bindings.
-* Improved full-screen mode, with the ability to toggle on the fly.
-
-See the `CHANGES' file for a complete list of changes.
-
-Source (C++ and C) is available, and it should be fairly easy to
-compile for UNIX, VMS, OS/2, and Win32.
-
-More information, source code, and precompiled binaries are on the
-xpdf web page and ftp site:
-
- http://www.foolabs.com/xpdf/
- ftp://ftp.foolabs.com/pub/xpdf/
-
-For information on commercial licensing and consulting, please see the
-Glyph & Cog web site:
-
- http://www.glyphandcog.com/
diff --git a/Build/source/libs/xpdf/CHANGES b/Build/source/libs/xpdf/CHANGES
deleted file mode 100644
index 0378f0da537..00000000000
--- a/Build/source/libs/xpdf/CHANGES
+++ /dev/null
@@ -1,1762 +0,0 @@
-0.2 (95-dec-12)
----------------
-First public release.
-
-
-0.3 (96-jan-13)
----------------
-LZW patent workaround.
-Implemented inline images.
-Fixed (mostly) disjoint polygon fills.
-Added remote server stuff.
-Added page number on command line.
-Fixed problem with font encodings which caused character misalignment.
-Fixed inverted CCITT decoding and inverted image mask drawing.
-Now compiles under gcc 2.7.x (ignore those stupid 'unused parameter'
- warnings).
-Many minor bug fixes and optimizations.
-
-
-0.4 (96-apr-24)
----------------
-Implemented DCT filter.
-Implemented PostScript output; wrote pdftops program.
-Implemented links.
-Implemented font rotation -- I was wrong: X11R6 servers *do* support
- font rotation (by specifying a matrix in place of a size).
-Added bindings for Home/End, Page Up/Down, arrow keys.
-Added initialZoom resource and -z option.
-Added geometry resource and -g option.
-Fixed image size off-by-one bug.
-Fixed bug where page content is reference to an array of streams.
-Cleaned up uninitialized variables which were causing random problems
- on various platforms.
-Manually skip whitespace before calling atoi() for startxref.
-Replaced calls to XrmCombineFileDatabase() with calls to
- XrmGetFileDatabase() and XrmMergeDatabases() so it will work under
- older versions of X.
-Fixed problem with reading multiple xref tables in updated PDF files.
-Check for encryption and print appropriate error message.
-Rudimentary dithering of images.
-Fixed bug in CCITTFax filter (pass mode followed by horizontal mode).
-Optimized drawImage() and drawImageMask().
-Changed several things to ease porting:
- - changed '__inline' to 'inline' (to adhere to the ANSI standard)
- - surrounded interface/implementation pragmas with #ifdef _GNUC__
- - got rid of empty array initializer lists
- - moved Operator type definition from Gfx.cc to Gfx.h
- - renamed String, uint, etc.
- - ability to uncompress to file (NO_POPEN and USE_GZIP flags)
- - added definitions of XK_Page_Up/Down and XPointer for old versions
- of X
-For VMS port:
- - use correct Xdefaults name for VMS, get rid of ltkGetHomeDir()
- - added '#include <stddef.h>' before all X includes
- - renamed files with multiple periods in their names
-Fixed window resizing infinite oscillation bug.
-Fixed problem with string-type (as opposed to stream-type) indexed
- color space lookup tables (which are used in inline images).
-If an X font is not found, try smaller and then larger sizes (this is
- useful for old or broken X servers which can't scale bitmap fonts).
-Added -rgb (color cube size) option.
-Various minor bug fixes.
-
-
-0.5 (96-may-23)
----------------
-Fixed bug in LTKWindow which broke the remote server mode.
-Fixed PostScript output:
- - doesn't seg fault if file is unwritable.
- - incorrect DSC comment - need colon in '%%Page:'.
- - use 'imagemask' command for masks.
- - output filters in the correct order.
- - Stream::isBinary() checks the next-to-bottom, not top, stream.
- - if page width > height, rotate it 90 degrees.
- - if page is larger than paper size, scale it down.
-Set default MediaBox to 8.5" x 11" to deal with non-compliant PDF
- files which don't specify a MediaBox.
-Added DEBUG_MEM stuff in gmem.c and gmempp.cc.
-Fixed memory leaks:
- - LTKWindow didn't delete the LTKBox.
- - LinkAction needs a virtual destructor.
-Use $(RANLIB) variable in goo/Makefile and ltk/Makefile.
-Allocate image data after calling XCreateImage, using
- image->bytes_per_line -- works in 24-bit mode now.
-DCTStream rounds width of rowBuf lines up to the next multiple of
- mcuWidth, so last MCU doesn't run off end of buffer.
-Increase size of block (from 255 to 1024 bytes) read at end of file to
- search for 'startxref'.
-Skip past garbage at start of file, look for '%PDF'.
-Moved more compiler options out of Makefiles into Makefile.config.
-Top-level Makefile uses '$(MAKE)' instead of 'make' for making
- subdirectories.
-Space/PageDown/Next and Backspace/PageUp/Previous now moves to
- next/previous page if already scrolled to bottom/top of current
- page.
-
-
-0.5a (96-jul-09)
-----------------
-[not a public release]
-For PDF 1.2 (a.k.a. Amber, a.k.a. Acrobat 3) support:
- - look for trailer after first xref instead of at end of file.
-Deal with font subsets by converting character names of the form
- 'Cnnnn' to the appropriate character from the standard encoding.
-Extract encoding from embedded Type 1 fonts.
-Kludge to fill one-pixel thick polygons.
-Changed X font encoding to use endash for hyphen (gets rid of too-long
- hyphens).
-Handle Resources key in Pages dictionaries (needed for pstoedit
- output).
-Fix comment handling in Parser (needed for pstoedit output).
-Move Bezier curve conversion from GfxState to XOutputDev; look at
- flatness parameter in GfxState.
-Change all of the path functions in XOutputDev (stroke, fill, clip) to
- use the same path transformation/conversion function.
-Rewrote PostScript output driver as a subclass of OutputDev; removed
- duplicated code (ps_ functions) from Gfx.
-Fixed bug in xref code with small (< 1024 bytes) PDF files.
-Implemented BX/EX operators.
-Added PDFDoc class.
-
-
-0.6 (96-nov-12)
----------------
-Add support for PostScript output to stdout (-) and to a command
- (|lpr); added -ps option and psFile resource.
-Decryption is implemented but not included in the distribution due to
- legal restrictions: the decryption algorithm is a trade secret of
- RSA, Inc., and the U.S.A. still has bogus export controls on
- cryptography software.
-Added .xpdfrc config file:
- - Added fontmap parameter: user can map PDF font names to X fonts.
- - Added fontpath parameter: search for Type 1 font if encoding is
- not in PDF file.
-Incremental display: display is updated after every 200 commands.
-Added forward and backward by-10-page buttons.
-Links:
- - Implement links with "Launch" actions that point to PDF files.
- - Draw borders around links.
- - Handle links with named destinations.
- - GoToR links specify a page number instead of a page reference.
-Optimizations:
- - Rewrote Stream to use buffering, and added lookChar() functions;
- rewrote Lexer to take advantage of this.
- - Use hash tables for name->code mapping in font encodings.
- - Made XOutputDev::doCurve() iterative, changed /2 to *0.5, and
- changed the flatness test.
-Added file name to window title.
-Implemented RunLength filter.
-Implemented forms.
-Convert ObjType to an enum.
-Changed isDict("Pages") to isDict() (in Catalog.cc) to deal with
- incorrect PDF files.
-Changed color selection so that very pale colors don't map to white.
-Fixed bug in CCITTFax filter (multiple make-up codes).
-In GString::clear(): need to set length to 0 before calling resize().
-Base initial window size on first displayed page, not page 1; deal
- correctly with rotated pages.
-Added ltkGetIntResource() and LTKApp::getIntResource().
-PostScript output fixes:
- - Escape backslashes in strings.
- - When doing ASCII85 encoding, keep both chars of EOF marker ('~>')
- on same line.
- - Add extra line '%-EOD-' after image data streams; call wrapper
- functions for image and imagemask which look for this line -- this
- should fix the 'too much data in stream' bug.
- - Font tags can be reused for different fonts on different pages --
- so use font object reference (number/generation) instead.
-Initialize character widths to zero (this caused crashes on OSF/1).
-Handle image masks which go outside of pixmap.
-Makefile.config changes:
- - Remove -o in C++ compile rule.
- - Add $(AR) variable.
-Code which read char widths from font dictionary read all but the last
- width.
-Add 'return 0;' to main() in xpdf and pdftops.
-Allow fonts to use StandardEncoding.
-Convert man pages to VMS help files.
-
-0.7 (97-may-28)
----------------
-Implemented FlateDecode filter (for PDF 1.2).
-Basic xref table reconstruction for damaged files
-New pdftotext program converts PDF to plain text.
-Implemented menus in LTK; added a menu to xpdf.
-Added open and save functions; allow xpdf to start without any PDF
- file.
-Implemented text find.
-Implemented text select/copy.
-Change mouse cursor when it's over a link.
-Embed Type 1 fonts in PostScript output.
-Moved rotate functions to menu; added quit to menu.
-Fixed stroke color bug in PostScript output (was using fill color
- instead of stroke color; this sometimes caused lines to be missing
- (white) in PostScript output).
-Support Launch-type links -- pops up a dialog before executing
- anything. Expects the A (action) dictionary to contain a Unix
- dictionary with F (file) and P (paremeter) keys just like the Win
- dictionary.
-A moveto op all by itself should just be discarded, instead of
- generating a subpath with one point (this was causing seg faults).
-Balanced parentheses in strings don't need to be escaped.
-Tj operator in PostScript prolog didn't check for zero when dividing
- by length of string.
-Implemented selection in LTK; TextIn widgets support dragging/copy/
- paste.
-Handle font subsets that use hex character codes.
-Added icon pixmap; added the XPMLIB and NO_XPM variables to
- Makefile.config.
-Fixed subtle bug in use of horizontal scaling parameter (it affects
- only the width of drawn characters, not positioning done in text
- space).
-Memory testing (with DEBUG_MEM):
- - gmalloc now fills memory blocks with garbage to catch unitialized
- fields.
- - gfree fills memory blocks with garbage to catch uses of freed
- blocks.
-Handle image masks which go off the pixmap on the top and/or left.
-Fixed inline functions which had two return statements (to make the
- HP, SCO, and other cfront-based compilers happy).
-Fixed bug which caused seg faults when following a link to a different
- file (info in LinkGoto object was used after link was deleted by
- loadFile).
-If page content is an array of streams, the streams are concatenated;
- objects and commands can span multiple streams.
-If file open fails, try lower-casing and upper-casing the file name.
-Commands should end when lexer sees a '/' character.
-GString::append(char *, int) was broken.
-Changed LTKScrollingCanvas redraw to be more efficient: copy as much
- as possible from window before copying from off-screen pixmap.
-Ignore gs (set extended graphics state) operator.
-Handle colorspaces (CalGray/RGB are treated as DeviceGray/RGB; the
- weird colorspaces are not yet implemented).
-Named destinations (for links) can be strings as well as names; deal
- with the names tree in the catalog.
-Clip to the page CropBox.
-Added '-q' to gzip options (to suppress warnings, in case user has -v
- in GZIP env var).
-Added 'include Makefile.config' to top-level Makefile.
-Added INSTALL variable to Makefile.config; used in top-level
- Makefile.
-Always initialize LinkDest left/bottom/top/right/zoom fields (bogus
- floating point values were causing crashes on Alpha).
-Added Makefile.config options for Digital Unix (DEC compilers), HP-UX
- (HP compilers), SCO Unix, and Evans & Sutherland ES/OS.
-Added flag to set stream mode in fopen call for VMS.
-Rewrote Link module.
-Pages with no contents shouldn't cause an error message.
-In PostScript output: pdfImM needs to set fill color before doing
- imagemask.
-If font doesn't specify character widths, use widths from built-in
- font, based on font flags.
-Fixed LTK scrollbar to delay before repeating and to control the
- period between repeats.
-Removed window/widget copy() methods (they were untested and unused).
-Unknown filter types produce a single error message instead of a
- stream of errors.
-Added a dummy target in top-level Makefile so making individual
- executables (e.g., 'make pdftops') should now work.
-Added optional xpdf-flip.ltk with buttons on right side instead of
- bottom of window.
-
-0.7a (98-feb-22)
-----------------
-Moved find command from menu to toolbar button ('f' key still works).
-Support TrueColor visuals.
-Added a -cmap option and a installCmap resource to install a private
- colormap.
-Mouse button 2 pans the window.
-Selecting a URI link now executes a configurable command (from the
- urlCommand resource).
-Added a "link info" display which shows the URL or file for the link
- under the mouse.
-Don't draw (or convert to PostScript) text drawn in render modes 3 and
- 7 -- this is invisible text, used by Acrobat Capture; this text is
- still passed to the TextPage object so that selection works.
-Recognize (and quietly ignore) marked content operators (BMC, BDC,
- EMC, MP, DP).
-Recognize new color-setting operators (scn, SCN).
-Added A4_PAPER option.
-Embed external Type 1 font files (this currently only works with PFA
- files).
-Added "-level1" option (in xpdf and pdftops) to generate Level 1
- PostScript.
-Setup autoconf -- replaced Makefile.config. Added SELECT_TAKES_INT
- flag, and use configure to autodetect (for HP-UX).
-Fixed appendToPath() to behave reasonably when appending ".." to root
- directory.
-Fixed array size in FlateStream::compHuffmanCodes() (was causing xpdf
- to crash under OSF/1).
-ASCII85Stream, ASCIIHexStream, and DCTStream didn't check for EOF and
- could run past the end of the stream in damaged files.
-Handle hex escapes (#xx) in names. Still allow the name /# for
- backward-compatibility.
-Check for NULL characters in encoding array in GfxFont.cc (was calling
- strcmp() with NULL which crashed under Solaris).
-PageAttrs::PageAttrs() didn't initialize crop box boundaries.
-Changed uses of lookup() to lookupNF() in XRef.cc.
-Fixed type checking of operators which take a variable number of
- args.
-Gfx::buildImageStream() doesn't need to check for parser (since I got
- rid of the bogus array-of-command thing).
-XOutputFont matches on font reference instead of font tag (similar to
- PSOutputDev fix).
-Fixed bug in position calculation for multi-char substitutions in
- XOutputDev.
-Cleaned up local variables which hid class variables.
-Optimized variable length decoding in CCITTFaxStream.
-Set link border width to zero if Border dictionary entry is missing.
-Throw away zero-length strings in TextOutputDev -- they don't have
- valid xMin/xMax values.
-Swapped order of XLIBS and XPMLIB in xpdf/Makefile.
-Deleted 'LTKApp::' in function declaration in LTKApp.h.
-Changed '(XKeyEvent *)&event' to '&event.xkey' in LTKApp.cc.
-Check that the link rectangle coordinates are in the correct order,
- and swap if necessary.
-TextOutputDev didn't set text to NULL, which caused pdftotext to
- segfault if it couldn't open it's output file.
-Fixed a hash table search bug in GfxFontEncoding::getCharCode().
-Cleaned up colorspace code: rewrote GfxColorSpace and added
- GfxImageColorMap; cleaned up PSOutputDev::doImage.
-Handle named colorspaces in images.
-Correctly set the default color after a colorspace change.
-Old setcolor operators now set the colorspace.
-Fixed bug with uncompressed blocks in FlateStream.
-Fixed bug with fixed Huffman code table in FlateStream.
-Added hash table of X windows (for LTKWindow and LTKWidget) to LTKApp
- and replaced calls to XQueryTree with hash table searches -- this
- avoids a roundtrip to the server for each event and also fixes the
- problem where XQueryTree crashed if the window no longer existed
- (with leftover events from a destroyed window). (Thanks to Yair
- Lenga for the suggestion.)
-Create a new GC for selection -- xor black and white (instead of LTK
- foreground and background).
-Fixed crash with blank lines in .xpdfrc.
-Allow spaces in font descriptors in fontmap lines in .xpdfrc.
-Check for bogus object number in XRef::fetch().
-Use MacRomanEncoding for TrueType fonts that don't specify an
- encoding.
-Certain PDF generators apparently don't include FontDescriptors for
- Arial, TimesNewRoman, and CourierNew -- set GfxFont flags
- appropriately.
-Fixed a bug in width guessing in GfxFont -- sans serif and serif were
- swapped.
-Rewrote XRef::readXRef() to avoid using a parser to read the xref
- entries.
-Added NO_TEXT_SELECT option.
-Ignore APPn/COM/etc. markers in DCT streams.
-Replaced select() with XMultiplexInput() in LTKApp.cc for VMS.
-Handle WM_DELETE_WINDOW protocol -- if you ask the window manager to
- delete the xpdf window, xpdf will exit cleanly; other
- windows/dialogs are simply closed.
-Optimized DCT decoder; switched to integer arithmetic.
-The "/Type /Annots" field in an annotation dictionary is optional.
-Check for null nameTree in Catalog::findDest().
-In XOutputDev, search user font map before default font map.
-Added "normal" SETWIDTH parameter to all font descriptors in
- XOutputDev (some systems have a narrow-width Helvetica font).
-Added FOPEN_READ_BIN and FOPEN_WRITE_BIN to support Win32.
-Added a hack which allows better font substitution for some Type 3
- fonts. Also allow character names of the form /nn and /nnn.
-Added <strings.h> and <bstring.h> to LTKApp.cc (needed by AIX and IRIX
- for bzero() declaration for FD_ZERO).
-
-0.80 (98-nov-27)
-----------------
-Support for some Japanese fonts (Type 0 fonts using the Adobe-Japan1-2
- character collection, horizontal only).
-Added pdfinfo application.
-Added pdftopbm application.
-Added pdfimages application.
-Added -papercolor option and .paperColor resource.
-Fixed divide-by-zero problem in XOutputDev Type 3 font matrix kludge.
-Font subset char names can be 'Bxx' as well as 'Cxx' and 'Gxx'.
-Fixed bug in color space conversion in DCTStream filter (YCC->RGB was
- correct, YCCK->CMYK was broken).
-Added XRef::getDocInfo() and PDFDoc::getDocInfo() to support pdfinfo.
-Optimized GfxImageColorMap.
-Lexer::getStream(), getPos(), and setPos() check for null stream.
-Decryption code now does strings as well as streams.
-ASCII85 decoder rounds short tuples up instead of down.
-CropBox and MediaBox can be non-integers.
-PostScript output:
- - Use a rectangle operator.
- - Call setpagedevice with page size.
- - Insert %%PageOrientation comments.
- - Add paper size flags (-paperw and -paperh) to xpdf and pdftops.
- - If HAVE_POPEN is not defined, and user tries to print to '|...',
- the PSOutputDev destructor tried to write to the PS file.
- - Added support for forms (pdftops -form).
-Removed error messages for empty paths in stroke, fill, etc. operators.
-Don't allow flatnesses less than 1 in XOutputDev (this speeds up
- rendering a little bit when there are lots of tiny curves).
-Moved the font subset character name guessing from GfxFont to
- XOutputDev and TextOutputDev - now these files print correctly.
-Cast argument to XFree() to XPointer; add XPointer definition where
- necessary (portability fixes).
-Various minor VMS fixes.
-Changes to configure script and Makefiles:
- - Print a warning if X is missing.
- - Use C++ when checking select() argument type (HP-UX).
- - Use 0 instead of NULL when checking select().
- - Default to gcc instead of c++.
- - Get rid of AC_C_INLINE -- this is meant for C, not C++.
- - Changed -USE_GZIP to -DUSE_GZIP.
- - Added ability to compile ouside of the source tree.
- - Added .cc.o rule to {goo,ltk,xpdf}/Makefile.in.
- - Added @LIBS@ to XLIBS in xpdf/Makefile.in.
- - In top-level Makefile.in: added '-' to clean commands; added
- distclean rule.
- - Create install directories.
- - Use INSTALL_DATA (instead of INSTALL) for man pages.
- - Changed xpdf-ltk.h rule to avoid leaving an empty file when
- ltkbuild fails.
- - Change things so that by default, ltkbuild is not built and
- xpdf-ltk.h is not rebuilt.
- - Use AM_PROG_CC_STDC to add compiler flags for ANSI C.
- - Modify autoconf's builtin macros to check for xlC.
- - Use Steve Robbins' smr_CHECK_LIB to test for pixmap library (Xpm)
- -- this should fix the problems on systems that have the library
- but not the include file.
- - Added better test for sys/select.h, sys/bsdtypes.h, strings.h,
- bstring.h.
- - New VMS make scripts from Martin P.J. Zinser.
- - Moved dependences into Makefile.in -- this gets rid of problems
- with 'cc -MM' (which is gcc-specific) and 'include Makefile.dep'
- (which isn't supported by all make implementations). Also changed
- all non-system include files to '#include "..."' (from '<...>').
-Tweaked the TextOutputDev heuristics slightly.
-Modify Gfx to use a stack of resources -- this is necessary for Form
- XObjects, which can define their own local resources; also modified
- PSOutputDev to dump fonts used by forms.
-Look for excessively large MediaBox (compared to CropBox) and shrink
- it to CropBox.
-Minor fix to scrolling when dragging a selection.
-Various patches for pdftex and Win32 support.
-Deal with Separation colorspaces by using their alternate colorspace
- entry.
-Added PBMOutputDev for pdftopbm application.
-Added ImageOutputDev for pdfimages application.
-Separated XOutputDev into LTKOutputDev + XOutputDev.
-Added support for 1-D and mixed 1-D/2-D (Group 3) decoding to
- CCITTDecode filter.
-Added resetImage(), getImagePixel(), and skipImageLine() to Stream
- class; used these in XOutputDev, PSOutputDev, and ImageOutputDev.
-Implemented predictor for LZW and Flate filters.
-In pdfImM1 in PSOutputDev prolog: div should be idiv.
-Changed output from printUsage() function in parseargs to look nicer.
-
-0.90 (99-aug-02)
-----------------
-Added Type 1/1C font rendering, using t1lib.
-Added "backward" and "forward" buttons.
-Added fit-page and fit-page-width zoom factors; replaced zoom-in and
- zoom-out buttons with a zoom popup menu.
-Type 1C fonts are converted to Type 1 and embedded in PostScript.
-Support vertical Japanese text.
-Added Japanese text support (EUC-JP) to pdftotext.
-Bumped PDF version to 1.3. Added stub functions for ri and sh
- operators. (But there are still some missing 1.3 features.)
-Added -raw option to pdftotext.
-Minor changes to allow compiling under MS Visual C++ 5.0.
-Top-level makefile: changed 'mkdir -p' to '-mkdir -p'.
-Configure script: added X_CFLAGS to smr_CHECK_LIB(Xpm).
-Added Xpm_CFLAGS to xpdf/Makefile.in (this is needed to get the -I for
- the xpm includes).
-Rewrote code that handles font encodings; added support for Type 1C
- fonts.
-In the setpagedevice dictionary in PostScript output - added a
- /Policies entry which tells the PS interpreter to scale the page to
- fit the available paper.
-Changed PageUp behavior slightly: move to bottom (instead of top) of
- previous page.
-TextPage used character's dx (width + char space) instead of just its
- width.
-Read base URI from document Catalog (for URI-type links).
-Minor change to configure script to avoid using 'unset'.
-Fixed bugs in CropBox inheritance.
-Fixed a bug in resource stack handling for form objects.
-Display forms even if they have a missing/incorrect FormType.
-Fixed a bug in stream predictors -- the predictor parameters (width,
- comps, bits) don't need to match the actual image parameters.
- Completely rearranged the predictor code.
-Fixed PostScript output to correctly handle stream predictors.
-Don't segfault on empty (zero-page) documents.
-Added the xpdf.viKeys feature.
-Added the ffi and ffl ligatures to XOutputDev and TextOutputDev.
-Pdftotext and pdfimages now check okToCopy().
-Added a '-q' flag to all programs (except pdfinfo) to suppress
- messages and errors.
-Deal with DeviceN colorspaces by using their alternate colorspace
- entry.
-Change PostScript output so setpagedevice is only called once, at the
- very beginning of the document (to avoid problems on duplex
- printers).
-Changes to configure script and makefiles for DOS/DJGPP.
-FontEncoding::getCharCode() looked for (code>0) instead of (code>=0).
-Added keypad arrow keys, etc. to xpdf.
-Minor changes to gfile.{h,cpp} (<windows.h>) to compile under VC++.
-Fixed CCITTFaxStream to correctly handle all parameters.
-Modifications to gfile.{h,cc} for Acorn.
-Some minor changes for OS/2.
-Added 'SHELL = /bin/sh' to Makefiles.
-Compare file version to pdfVersionNum+0.0001 to avoid floating point
- precision problems.
-Added LDFLAGS to Makefiles.
-Removed strip entirely from configure and Makefiles.
-Fixed a bug in choosing the correct DCTStream color transform.
-
-0.91 (2000-aug-14)
-------------------
-Added TrueType font rendering, using FreeType.
-Support for Chinese fonts (Type 0 fonts using the Adobe-GB1-2
- character collection).
-Decryption code is included with the main distribution (now that the
- US export regulations are a little bit less irrational).
-Added (very basic) support for generating PostScript with Japanese
- fonts -- only tested with ghostscript so far.
-Added support for generating EPS files (pdftops -eps).
-Much-improved image filtering in xpdf (for downsampling and for
- transforms other than 0/90/180/270-degree rotations).
-Implemented a basic full-screen (presentation) mode (xpdf
- -fullscreen). (There is currently no way to switch between window
- and full-screen modes on the fly -- this will be fixed in a later
- release.)
-Added "reload" menu item.
-Do a better job with anti-aliased Type 1 fonts on non-white
- backgrounds.
-Handle Lab color spaces.
-Handle non-null user passwords.
-Avoid security hole with tmpnam()/fopen() -- added openTempFile() in
- goo/gfile.cc. [Thanks to Joseph S. Myers for pointing this out.]
-Filter out quote marks (' and ") in URLs before running urlCommand to
- avoid a potential security hole. [Thanks to Frank Doepper for
- pointing this out.]
-Fixed TrueColor detection to look at the complete list of available
- visuals, not just the default visual.
-In gfile.h, changed NAMLEN(dirent) macro to NAMLEN(d).
-Removed copyright character from start-up banners.
-In the open and save dialogs, if the open/save button is pressed with
- no file name, the dialog is not canceled.
-Added Xpm_CFLAGS to ltk/Makefile.
-XOutputDev::updateLineAttrs was using dashLength before it was
- defined.
-In top-level Makefile.in, use INSTALL_PROGRAM instead of INSTALL.
-In man page, recommend -q instead of -err in .mailcap.
-Changes for GNOME / Bonobo support:
- - Separated Stream classes into BaseStream and FilterStream trees.
- - Got rid of all FileStream-specific stuff.
- - Added a PDFDoc constructor that takes a BaseStream* instead of a
- file name.
-Allow newlines inside strings (Photoshop does this).
-Don't require whitespace between tokens in consecutive content
- streams (for pages that specify an array of streams).
-Look at MissingWidth when constructing font character widths array.
-Fixed a bug that caused incorrect PostScript output for images that
- use 8-bit indexed color spaces with < 256 colors in the palette.
-Handle case where embedded font file is bad (this was seg faulting).
-Minor changes for Windows/pdftex.
-Work around a bug in PDF files from the IBM patent server.
-Fixed bugs in PostScript form generation: use pdfStartPage instead of
- pdfSetup; problem with inline images.
-Minor bug fix in FlateStream::loadFixedCodes().
-Added %%DocumentMedia and %%PageMedia comments to the PostScript so
- that gsview (a Windows frontend for ghostscript) gets the right
- paper size.
-Draw AcroForm fields that have appearance annotations.
-Bounds check gray, CMYK, and RGB values (in GfxColor).
-Moved the link border drawing code into Page (from PDFDoc).
-Minor modifications for pdftohtml.
-PSOutputDev: use the Type 3 font scaling kludge from XOutputDev.
-Separation color spaces were handled incorrectly in images.
-Fixed a bug with form bounding boxes.
-Modified the t1lib support -- replace libt1x code with my own code.
- Type 1 and TrueType fonts are now handled similarly, and clipping
- works on Type 1 fonts.
-Don't print copyright banner (xpdf); add -v switch to get copyright
- and version info (all apps); get rid of -err switch (xpdf).
-Automatically reload the PDF file if it has been changed, i.e., if the
- modification time is different.
-Fixed a memory (malloc size) bug in CCITTFaxStream.
-Fixed two bugs in FontEncoding::hash() -- handle zero-length character
- names (which were found in a (buggy?) PDF file), and handle
- character names with high-bit-set characters (use unsigned ints).
-Added PDFDoc::isLinearized() and corresponding code in pdfinfo.cc.
-Handle files with an incorrect page count in the Pages dictionary
- (FOP, from the Apache project produces a page count of 0).
-Handle TrueType equivalents to the Base14 fonts (Arial, TimesNewRoman,
- CourierNew) -- Adobe's tools use these names without embedding the
- fonts.
-Tweaked the Type 3 font sizing kludge.
-Changed pdfimages (ImageOutputDev) so it doesn't output JPEG files for
- 4-component color spaces, since these seem to confuse most image
- viewers.
-Added support for generating OPI comments (pdftops -opi).
-In XOutputDev::drawImage() and drawImageMask(), check for images that
- are completely off-page.
-Use the provided alternate or a default (DeviceGray/RGB/CMYK) color
- space for ICCBased color spaces.
-Incorporated MacOS-specific code from Leonard Rosenthol.
-Configure script switches to C++ for the strings.h/bstring.h test.
-Gfx::opRestore() calls clearPath() to handle (apparently) buggy PDF
- files produced by FreeHand.
-The /Type field in most dictionaries is optional (PDF 1.3 change).
-Move printCommands variable definition into Gfx.cc.
-If page is smaller than paper, center the PostScript output.
-Fix a minor bug in the SELECT_TAKES_INT detection in the configure
- script.
-TextOutputDev filters out control characters.
-Changed enough occurrences of 'char *' to 'const char *' to keep gcc
- 2.95 from barfing.
-Support for Latin-2 and Latin-5 in pdftotext (however, this will only
- work if the PDF file contains correct font encodings, which seems to
- be rare).
-TextOutputDev converts "eightoldstyle" to "eight", etc.
-Don't use the return value from sprintf() -- most systems return the
- length, but some return the string.
-Minor fixes for SunOS 4.
-Configure script looks for both select() and fd_set in sys/select.h.
-Configure script checks for gethostbyname() in -lbsd (for LynxOS).
-Fix missing closepath bug in PostScript output.
-Change PostScript portrait/landscape mode selection so it only uses
- landscape if the page width is greater than the paper width.
-Tweaked the VMS code in makePathAbsolute().
-
-0.91a (2000-oct-11)
--------------------
-Implemented separable CMYK PostScript output (the -level1sep switch to
- pdftops).
-Implemented Pattern color spaces with tiling patterns (polygon fills
- only).
-Implemented Stamp annotations.
-Implemented Named link actions.
-Fixed a really dumb bug in the TrueColor code in SFont (which affects
- both Type 1 and TrueType font rendering on 16-bit displays).
-Rewrote the GfxColorSpace / GfxColor code.
-Switched from djgppcfg to dj_make.bat (from Michael Richmond).
-Bug in the Type 1 encoding parser -- couldn't handle lines of the form
- 'dup NNN/name put' (with no space between the code and the name).
-Fixed the mkstemp() test in configure.in -- switched from
- AC_TRY_COMPILE to AC_TRY_LINK and added <unistd.h>.
-Added DESTDIR to top-level Makefile.in.
-Fixed an incorrect OPI comment in PSOutputDev.
-Minor tweak to the CCITTFax code to avoid writing past the end of an
- array on an invalid data stream.
-Xpdf crashed if the user selected 'reload' when no document was
- loaded.
-Look for character names of the form "xx" (two hex digits with no
- leading alphabetic char) and 'cNNN' (decimal digits with a leading
- alphabetic char that happens to be a hex digit).
-FlateStream didn't correctly handle zero-length streams.
-Xref reconstruction didn't handle the case where the opening "<<"
- immediately followed "trailer" with no intervening whitespace.
-Fix the %%DocumentSuppliedResources comment in EPS output.
-Scale annotations to fit their rectangles.
-Added Stream::close() to handle cases (e.g., patterns) where a Stream
- object is used multiple times before it is deleted.
-Added the topLevel arg to Gfx::go() so it doesn't call out->dump() for
- every pattern element (and form).
-Rearranged the GfxResources class.
-Clean up white space handling in Lexer.
-Make the dpi parameter to PDFDoc::displayPage etc. a double - this
- avoids margin gaps with fit-page and fit-width.
-Fix a rounding problem in xpdf.cc that was causing the window to
- sometimes be one pixel too small.
-Fixed a minor bug in dealing with Base-14 TrueType font names.
-Fixed Lab -> RGB color space conversion.
-Added support for opacity values (from PDF 1.4) to GfxState and
- OutputDev. [Thanks to Leonard Rosenthol.]
-Implemented type 2 functions; rearranged the Function class
- hierarchy.
-
-0.91b (2000-oct-29)
--------------------
-Print a warning about Type 3 fonts (XOutputDev, PSOutputDev).
-Added the scroll lock behavior to 'n' and 'p' keys in xpdf.
-Change FileStream buffer size to a #define'd constant.
-Renamed Pattern to GfxPattern to avoid clashes with Windows and MacOS
- types.
-Added CNS (Big5) Chinese font support (CHINESE_CNS_SUPPORT); renamed
- CHINESE_SUPPORT to CHINESE_GB_SUPPORT.
-
-0.91c (2000-nov-19)
--------------------
-Fix an endianness problem in the Type 1 font code which resulted in an
- incorrect display with "-t1lib plain" on big-endian systems.
-CCITTFax stream decoder will skip over extra zero bits at end of line,
- even if EncodedByteAlign flag wasn't set.
-Added Big5 support to pdftotext (with CHINESE_CNS_SUPPORT enabled).
-Fixed a typo in the CNS/Big5 encoding translation table.
-Change the form code in PSOutputDev to store images in arrays of
- strings.
-The xref reconstruction (for damaged files) now also looks for
- 'endstream' tags, and the parser uses this information when setting
- up stream objects.
-In pdfinfo, convert Unicode chars in the 00xx range into 8-bit chars;
- print a warning if there are any other Unicode chars.
-
-0.92 (2000-dec-03)
-------------------
-Fixed %%BeginResource comment (for xpdf procset) in PostScript
- output.
-Added "-title" switch and "xpdf.title" resource to set the window
- title.
-Check for <freetype.h> in addition to <freetype/freetype.h>.
-Upgraded the configure script to smr_macros 0.2.4 - this should fix a
- bug where configure wasn't correctly finding t1lib.
-
-0.92a (2000-dec-17)
--------------------
-Added 'extern "C" { ... }' in various places for ANSI C++ compliance.
-Tweaked the code that figures out DPI for fit-to-page and fit-to-width
- modes.
-Fixed the image transformation code in XOutputDev -- no more missing
- lines.
-Implemented color key image masking in XOutputDev.
-
-0.92b (2001-jan-07)
--------------------
-Fixed a bug in the error-checking code in the Separation/DeviceN color
- space parsing functions. [Thanks to Lidia Mirkin.]
-Added wheel mouse support (mouse buttons 4 and 5). [Thanks to
- Thorsten Schreiner.]
-Added preliminary support for FreeType 2 (disabled by default).
-
-0.92c (2001-jun-04)
--------------------
-Fixed a bug in the new image transformation code.
-Look for character names of the form "<letter><digit><digit>", instead
- of looking for names beginning with a few specific letters.
-T1FontFile::T1FontFile wasn't initializing vars, and ~T1FontFile
- wasn't checking before calling T1_DeleteFont -- this caused crashes
- if it tried to open a nonexistent font file.
-Catalog::Catalog didn't set baseURI to NULL early enough.
-Tweak the check for strings.h in the configure script.
-Yet another fix for the image rotation code in XOutputDev --
- off-by-one problem when upsampling.
-Handle Type 1/1C encodings when using FreeType 2.
-Allow FreeType2 to render user-supplied Type 1 base fonts.
-Opening a new file from full-screen mode tried to scroll.
-Fixed a bug in GfxFont constructor (missing check for NULL base font
- name).
-Don't crash if a Type 1 font's FontBBox is non-integer.
-Pdfinfo prints page size.
-Tweak for the alpha hack in T1Font/TTFont: sample the middle pixel
- instead of the top-left pixel.
-Automatically activate the text input widget in the find window.
-Changed a Japanese char code mapping in XOutputDev and TextOutputDev:
- period was being incorrectly mapped to small circle (end-of-sentence
- character).
-Add the 0/+/-/z/w key bindings to control the zoom setting.
-Fixed ImageOutputDev (pdfimages) to correctly handle inline image
- masks.
-Extract ascent/descent info from font descriptor.
-
-0.92d (2001-jun-26)
--------------------
-Embed TrueType fonts in PostScript output. (Added a "-noembtt" flag
- to pdftops.)
-Extract encoding from TrueType fonts.
-Moved Function classes to a separate file (Function.h/cc).
-Implemented multi-dimensional sampled Functions.
-Implemented Type 4 (PostScript calculator) Functions.
-For Type 0 fonts, FontDescriptor is in descendant font, not parent.
- [Thanks to Lidia Mirkin.]
-Added the "-htmlmeta" option to pdftotext.
-In TextOutputDev, when computing the number of blank lines to insert,
- do a sanity check on the result.
-If both FlateDecode and some other filter (e.g., DCTDecode) were
- applied to an image stream, getPSFilter() crashed instead of just
- returning NULL.
-Handle the /Identity function.
-
-0.92e (2001-aug-23)
--------------------
-Widths in font dict should override built-in font widths.
-Changed "rotate left/right" menu items to "rotate
- clockwise/counterclockwise".
-The link parsing code choked if the Border array was incorrect (too
- short).
-Modified PSOutputDev to output CMYK for fill/stroke colors.
-
-0.93 (2001-oct-25)
-------------------
-Implement PDF 1.4 (128-bit) decryption.
-Bump supported PDF version number to 1.4.
-Text output for Simplified Chinese. [Thanks to Cheung Siu Fai.]
-Read an app-defaults file for Xpdf.
-Read a system-wide config file (<prefix>/etc/xpdfrc) if ~/.xpdfrc
- doesn't exist.
-Accept and verify owner password; if correct, allow all actions.
-Added a "-level2sep" option to pdftops to generate Level 2 separable
- PostScript. The PostScript separation convention operators are used
- to handle custom (spot) colors. [Thanks to Thomas Freitag for help
- on this.]
-Add support for FreeType 2 to the configure script. Warning: this
- requires FT 2.0.5 or newer.
-Fixed the bounding rectangle overlap test in the disconnected subpath
- fill hack in XOutputDev.
-Stupid typo in font name table in PSOutputDev.
-Changing the zoom setting with a keyboard shortcut didn't update the
- displayed setting.
-Modified the mouse wheel support and added the second wheel (mouse
- buttons 6 and 7). [Thanks to Michal Pasternak.]
-Character and word spacing is affected by horizontal scaling (display
- and PS output). [Thanks to Eddy Ng.]
-Rotation specified by the text matrix, character spacing, and
- horizontal scaling interacted incorrectly (display and PS output).
-Some broken Type 1/1C fonts have a zero BBox -- kludge around this by
- assuming a largeish BBox.
-Handle PDF files with an incorrect (too small) xref table size.
-Allow "-?" and "--help" as aliases for "-h" (all apps).
-Correctly handle unescaped parens in strings in Lexer.
-Fixed a bug in LTK where a menu got posted multiple times if you right
- clicked while a page was being rendered.
-Removed a comma inside a string in configure.in.
-Kludge around broken PDF files that use char 32 but encode it as
- .notdef instead of space.
-Clean up various compiler warnings: use constructor args like "fooA"
- if there is a field named "foo". Everything now compiles cleanly
- under gcc 2.91.66, 2.95.2, and 3.0.1.
-Page objects now read all of the page rectangles (MediaBox, CropBox,
- BleedBox, TrimBox, ArtBox), as requested by the pdfTeX folks.
- Added a new PDFRectangle struct to hold these.
-Use XOutputDev's Type 3 font size hack in TextOutputDev too, so it
- does a little better job of extracting text in Type 3 fonts.
-Modify pdfimages to write one-bit images as PBM files.
-Work around a bug in cygwin's implementation of fseek.
-
-0.93a (2001-nov-21)
--------------------
-Implemented the sh (shaded fill) operator for the axial shading type.
-Minor fixes to avoid compiler warnings.
-Cleaned up global variables -- moved many into instance vars and
- function args.
-Minor fixes for OS/2.
-Fix the system config file path for VMS.
-Fix an uninitialized var in XOutputDev that caused crashes on Alphas.
-Don't incrementally update the display in full-screen mode.
-For Type 1/1C fonts, use the FontBBox from the PDF FontDescriptor
- (instead of the one in the font file) if present -- this avoids
- problems with fonts that have non-standard FontMatrixes.
-Add the Euro character to WinAnsiEncoding.
-Track the bounding box of the clip region to make rendering patterns
- more efficient.
-Fix openTempFile() for Win32.
-
-0.93b (2001-dec-11)
--------------------
-Added a duplex option to PSOutputDev and a -duplex switch to pdftops.
-Added XRef::PDFgetDocInfoNF() for pdftex project.
-Updated the VMS build script.
-
-0.93c (2001-dec-12)
--------------------
-Completely rewrote the code that handles font encodings:
- - everything is Unicode-based
- - 16-bit fonts are handled much more cleanly
- - text output encoding can be set more flexibly
-New .xpdfrc config files.
-
-1.00 (2002-feb-01)
-------------------
-More work on the font encoding rewrite:
- - use the ToUnicode font dict entry
- - pdfinfo and pdftotext (with '-htmlmeta') convert info strings to
- the selected text encoding
-Added key bindings for forward ('v') and backward ('b').
-Added the pdffonts program which lists the fonts used in a PDF file.
-Fixed several problems in the TrueType font embedding code (for
- PostScript output).
-Accept named destination on command line.
-Added several new items to pdfinfo: file size, PDF version, tagged
- (yes or no), XML metadata (with the -meta option).
-Pdftops didn't get the portrait/landscape setting correct for PDF
- files with rotated pages.
-The TrueTypeFontFile class (including the Type 42 converter) now
- understands cmap format 6.
-Improved the "about" window -- mention the GPL, add a list of key
- bindings.
-Added Zcaron and zcaron characters to WinAnsiEncoding.
-The '0' keyboard shortcut didn't update the zoom popup menu.
-Handle the complete list of alternate names for the Base14 fonts.
-Fixed substitute font scaling in XOutputDev - scale only the width,
- not the height.
-Implemented stitching (type 3) functions.
-Handle the case of moveto/closepath/clip, which defines an empty
- clipping region.
-Move dependences into separate Makefile.dep files; get rid of the
- distdepend target.
-Move all of the configure-script-generated -D options out of the
- Makefiles and into a top-level .h file (aconf.h).
-Cleaned up the FreeType 1/2 detection code in the configure script.
-Pdfinfo prints dates in a more readable format.
-Fixed a bug in the Paeth image predictor.
-Handle annotations with multiple states.
-Another workaround for buggy X servers: clip points that are way out
- of bounds.
-Added libpaper support (for Debian).
-Generate PostScript DSC resource comments for PS (not just EPS)
- files.
-The save and restore (q/Q) operators shouldn't save/restore the path.
-Performance optimization: disable pattern drawing in TextOutputDev.
-
-1.00a (2002-feb-25)
--------------------
-Added an optimized special case for one-bit images in XOutputDev.
-Implemented CID TrueType font embedding; added a psEmbedCIDTrueType
- option.
-The initialZoom X resource was broken.
-The reverse MacRoman encoding should return 32 for "space" (not 202,
- which is an alternate encoding).
-Tweaks to the FreeType 2 support: only disable hinting if the bytecode
- interpreter is disabled (i.e., disable autohinting but not bytecode
- hinting); add some padding to the glyph cache for CJK fonts.
-Added level3 and level3Sep options for the psLevel setting and
- corresponding -level3 and -level3Sep options to pdftops.
-Added a -level2 option to pdftops for consistency.
-Avoid a divide by zero in pdftotext. [Thanks to William Bader.]
-Added a Greek language support package. [Thanks to Alexandros
- Diamantidis and Maria Adaloglou.]
-Don't bother trying to extract a "builtin" encoding from a TrueType
- font.
-Accept either a page number or a page reference in a link
- destination.
-Update the fontFixedWidth flag in GfxFont after reading the char
- widths (used by the Acorn RiscOS port).
-Removed yet another (illegal but not caught by gcc) class specified
- from a .h file.
-Avoid using snprintf - it's not available everywhere.
-Improved the CMYK->RGB transform.
-Use mkstemps where available.
-
-1.01 (2002-may-20)
-------------------
-Implemented Type 3 fonts.
-Implemented PostScript CID font embedding; added a
- psEmbedCIDPostScriptFonts option.
-Implemented PostScript 16-bit font substitution; added psNamedFont16
- and psFont16 options.
-Moved the initialZoom setting from X resources to the xpdfrc file.
-Implemented the radial shading type in the sh (shaded fill) operator.
- [Thanks to Mike Sweet.]
-Added an 'include' command to the xpdfrc format.
-Added the displayNamedCIDFontX option so different fonts can be used
- within one character collection.
-Added a simple reverse video mode (-rv switch, xpdf.reverseVideo
- resource).
-Implemented stroked text in XOutputDev (with t1lib and FreeType2).
- [Thanks to Leonard Rosenthol.]
-Implemented stroked text in PSOutputDev.
-Added a built-in Unicode map for UCS-2.
-New key binding in xpdf: 'g' activates the page number text field.
-PSOutputDev will now embed external TrueType fonts in addition to
- external Type 1 fonts.
-The psEmbedType1Fonts and psEmbedTrueTypeFonts options were missing
- the "Fonts" suffix.
-Documentation in xpdf.1 for -freetype option was wrong.
-Added the Big5ascii Unicode map to the Chinese-traditional support
- package (maps 7-bit ASCII straight through). [Thanks to Lawrence
- Lai.]
-Modified the EUC-CN and EUC-JP encodings to pass 7-bit ASCII straight
- through. [Thanks to Lawrence Lai.]
-Avoid a divide by zero in XOutputDev. [Thanks to Simon Burge.]
-Remove old code in openTempFile that removed an extension from the
- name returned by tmpnam.
-Tweak the scrolling behavior when switching pages. [Thanks to Case
- Jones.]
-In the code that guesses character names (for font subsets), also
- handle names of the form 'ABnnn'. [Thanks to Colin Granville.]
-Fix the transform code for annotations.
-Improved the CMap file parser to handle more general PostScript
- lexical conventions.
-Added '-enc' option to pdfinfo.
-Added the small caps and oldstyle numbers from Adobe's Unicode
- corporate use area to the Latin1 and ASCII7 Unicode maps.
-The code in TextOutputDev that guesses Type 3 font size could generate
- a zero size, which resulted in div-by-zero errors.
-Various tools (including Adobe's) occasionally embed Type 1 fonts but
- label them Type 1C - so check for a '%!' at the start.
-Some tools embed Type 1C fonts with an extra whitespace char at the
- beginning - just skip over it.
-Fixed a typo in the Simplified Chinese add-to-xpdfrc file.
-Updates to dj_make.bat and the djgpp build instructions.
-Added a Turkish language support package.
-Updated VMS build scripts. [Thanks to Martin Zinser.]
-Modify the incremental display update code to redraw less often if
- most of the commands are vector graphics, as opposed to text and
- images.
-Tweak the Type 1 font bbox code to look at the bboxes in both the PDF
- font object and the embedded font file.
-Fixed the ETenms-B5-H CMap file (for traditional Chinese) to map the
- Latin characters to their proportional versions.
-Added an optional displayCIDFontX entry for one of the Arphic TrueType
- fonts in the traditional Chinese 'add-to-xpdfrc' file.
-Remove leading '-' on include statements in Makefiles.
-Added psASCIIHex parameter.
-Added the GBK Unicode map to the simplified Chinese language pack.
-Pdftotext now opens the text file in binary mode to avoid Microsoft's
- annoying automatic end-of-line translation stuff.
-Added an executeCommand function in goo/gfile.cc. [Thanks to Mikhail
- Kruk.]
-The %ALDImagePosition OPI comment was wrong if the page was scaled to
- a different paper size.
-The OPI code was saving the default transform matrix before calling
- setpagedevice, which can change the matrix.
-Fixed a crash when an inline image dictionary contains garbage.
-Upgraded to autoconf 2.53.
-Use unsigned int file offsets, to allow access to PDF files in the 2-4
- GB size range; use fseek64/ftell64 if available.
-Fixed two floating point exception cases that came up with broken PDF
- files.
-Avoid a crash when printing an error message regarding an unnamed
- font.
-Default link border width should be 1. [Thanks to Michael Pfeiffer.]
-Minor tweak to build with FreeType 2.1.0.
-Handle "weird" characters in PostScript font names.
-PSOutputDev now handles PostScript XObjects.
-Added several more page attributes for the pdftex project.
-Transferred the copyright to Glyph & Cog, LLC.
-
-2.00 (2002-nov-04)
-------------------
-Switched to the Motif toolkit.
-Support multiple open documents (in separate windows).
-Added document outlines to the viewer.
-Modified the text extraction (placement) algorithm.
-Implemented the JBIG2 decoder.
-Added a Latin2 language support package.
-Added support for movie annotations.
-Switched back to native LZW decompression code.
-Text extraction from Type 3 fonts was (partly) broken.
-The owner password checking code was missing a step in the case of
- 128-bit encryption.
-Added the 'printCommands' option to the xpdfrc file.
-Added key binding for '?' to bring up the about/help dialog.
-In TextOutputDev, ignore any text that's outside the page bounding
- box.
-Text extraction throws away "tiny" characters after the first 20000
- per page, to avoid really slow runtimes with PDF files that use
- special fonts to do shading or cross-hatching; added the
- 'textKeepTinyChars' option to disable this behavior.
-Text extraction discards duplicated text (fake boldface, shadow
- effects).
-Added ctrl-F as a key binding for find.
-Added a "find next" function, bound to ctrl-G.
-Added ctrl-P as a key binding for print.
-Modified the DCT decoder to handle progressive and non-interleaved
- JPEG streams.
-Added key bindings for ctrl-Home and ctrl-End.
-Allow the initialZoom setting to be made in either the xpdfrc file or
- as an X resource.
-Added a Hebrew language support package. [Thanks to Roy Arav.]
-The "make distclean" target now creates (empty) Makefile.dep files in
- the three subdirectories.
-Initialize XRef::ownerPasswordOk.
-Correctly handle stroking of Type 3 fonts in PSOutputDev.
-Generate correct PostScript for fonts with "weird" character names
- (e.g., "(").
-Generate correct PostScript for images using Indexed color spaces with
- DeviceN base color spaces.
-Added lowercase Roman numerals to ISO-2022-CN.unicodeMap (simplified
- Chinese support package).
-Tweak the image scaling code to better handle flipped (top-bottom
- and/or left-right) images.
-Generate correct PostScript code for inline images and images in Type
- 3 fonts which are too large for a single PS string.
-Correctly handle indexed color spaces whose base color spaces have
- component ranges other than [0,1].
-Optimized the DCT decoder.
-Fixed mistakes in the list of key bindings in the about/help dialog.
-Optimized the Flate decoder.
-Add literal names for punctuation and digits to the Unicode name
- table.
-Cygwin's popen wants mode "r", not "rb".
-Fixed a bug in the Type 4 function parser (the "if" operator wasn't
- parsed correctly).
-Fix a bug in PS output for TrueType fonts with no PDF encoding.
-Make the bbox size in FTFont more liberal (to avoid problems with
- fonts that have incorrect bboxes).
-Reverse the colors in PBM files generated by pdfimages, so the common
- case (an image mask filled with black) comes out correct.
-Add fseeko/ftello support which is basically identical to
- fseek64/ftell64. [Thanks to Nassib Nassar.]
-Modified column assignment in text extractor to account for characters
- that convert to multiple characters in the output encoding.
-Fix TrueType fonts which have an incorrect cmap table length.
-Work around a pragma bug in the version of gcc that ships with MacOS X
- 10.2. [Thanks to Frank Siegert and Andrew Stone.]
-Fix a problem that was causing an infinite loop when a damaged content
- stream contains an 'ID' command inside a dictionary.
-Handle the case where systempapername() returns NULL (libpaper
- support).
-Handle fonts which are defined directly in the font resource
- dictionary rather than as separate objects.
-Track process colors in Level 1 separable PostScript.
-Pdfinfo now checks the return value from mktime to avoid seg faults in
- flakey strftime implementations.
-If duplex is not enabled in PostScript output, leave the duplex
- setting alone, allowing the spooler to insert its own setting.
-Added three missing fclose calls.
-Change the default encoding for TrueType fonts (used when the PDF file
- doesn't specify an encoding) from MacRomanEncoding to
- WinAnsiEncoding.
-Move X_CFLAGS to the end of the list in CXXFLAGS (in Makefile.in) to
- avoid some of the FreeType2 include path problems.
-Fixed an obscure bug in the LZW decoder. [Thanks to Martin
- Schroeder.]
-Fixed a bug in decryption when using the newer (PDF 1.4) algorithm
- with shorter-than-128-bit keys.
-Minor optimization for image data streams: the ImageStream class can
- return an entire buffered line.
-
-2.01 (2002-dec-05)
-------------------
-Redesigned the text extraction process:
- - process the text into "reading order"
- - added a "-layout" flag to pdftotext to switch back to the old
- style, where physical layout is maintained
- - use of the "-raw" flag is no longer recommended
-Added the -reload option for xpdf (in remote mode).
-Added support for external CID fonts; added the displayCIDFontT1 and
- displayNamedCIDFontT1 commands to the xpdfrc file.
-Handle the case of moveto/newpath/clip, which defines an empty
- clipping region (just like moveto/closepath/clip).
-Accept XYZ link destinations with missing array elements.
-Fix some problems with state save/restore triggered by Type 3 fonts
- that reference other fonts.
-Accept bogus font names based on "Symbol": Symbol,{Bold,Italic,
- BoldItalic}.
-Fixed color and font resource names in the xpdf man page.
-Was using delete instead of gfree in OutlineItem::~OutlineItem.
-Set the busy cursor in the find dialog while searching.
-Map variants of the copyright, trademark, and registered trademark
- symbols to the proper Unicode codes, not to Adobe's corporate use
- area codes.
-Fixed a floating point exception bug in TextOutputDev (check for a
- too-small denominator).
-Fixed a typo in TextOutputDev, in the code that generating blank lines
- to add vertical whitespace.
-Config files whose last line didn't end with a LF (or CR+LF) weren't
- being handled correctly.
-The code that handled CIDToGIDMaps in Type 2 CIDFonts was broken.
-Check the per-glyph bounding box in Type 3 fonts, and don't try to
- cache glyphs with bogus bboxes.
-Allow ToUnicode CMaps to use fewer than four hex digits in the Unicode
- char indexes.
-Added multithreading protection to the GlobalParams class.
-Fixed a bug in end-of-stream detection with the TIFF predictor.
-Added some characters to MacRomanEncoding to match up with Apple's
- definition.
-
-2.02 (2003-mar-24)
-------------------
-Rewrote the text extractor code that assembles words into lines to
- better handle vertically overlapping lines.
-Add the "match" option for paper size (in PostScript output).
-Added support for external 16-bit TrueType fonts; added the
- displayCIDFontTT and displayNamedCIDFontTT commands to the xpdfrc
- file.
-Added an Arabic language support package.
-Added the Windows-1255 encoding to the Hebrew language package.
-A missing NULL check was causing a crash when closing the file in a
- single window (which clears out the window, but leaves it open).
-Deal with TrueType fonts whose glyph data is out of order - this
- affected both FreeType rasterization and PostScript generation.
-Munge font names in PSOutputDev to avoid names that are problematic
- for ghostscript because they start with an out-of-limits number
- (e.g., 1e999foo).
-Modify the TrueType font encoding deciphering algorithm in yet another
- attempt to match up with Acrobat's behavior.
-Bounds check the indexHigh value in indexed color spaces.
-The text extractor no longer bothers trying to get an average
- character width for Type 3 fonts, since it generally doesn't work
- very well (because Type 3 metrics are unreliable).
-Don't crash if the user hits ctrl-G ("find again") before doing a
- find.
-Set the button pixmap foreground color correctly.
-Handle text drawn backward on 180 degree rotated pages.
-Added a magic call to XtUngrabButton after calling XmCreatePopupMenu
- which appears to prevent some very odd problems (idea taken from the
- DDD source code).
-Fix the MacOS X fix (needed to include <AvailabilityMacros.h>).
-Fixed a bunch of Motif 1.x / X11R5 incompatibilities. [Thanks to
- William Bader and Albert Chin-A-Young.]
-Fixed various bugs in previously untested code in the JBIG2 decoder.
-Modify the XPDFCore destructor to avoid a bogus warning message from
- OpenMotif 2.2.
-Modified the Type 1C font parser to do proper bounds checking.
-Fixed the bounds checking in the TrueType font parser.
-Text extractor shouldn't do block merging in physical layout mode.
-Fixed a problem in PSOutputDev in level2sep mode with images in a
- Separation color space and with a non-default Decode array.
-Text extraction with "-raw" was concatenating lines from the bottom of
- one column and the top of the next.
-Handle Type 1C subroutines in the font converters.
-Correctly handle progressive JPEG images whose scans are slightly
- different sizes (e.g., the Y scan rounds up to a multiple of 8
- pixels and the Cb/Cr scans round up to 16 pixels).
-Avoid a potential divide-by-zero problem in TextOutputDev.
-Modified the T1Font and FTFont modules to correctly handle glyphs that
- are larger than the font's claimed bounding box.
-Tweak dupMaxDeltaX parameter in TextOutputDev to avoid triggering on
- double characters.
-Improved detection in pdfinfo for ISO paper sizes. [Thanks to Hartmut
- Henkel.]
-Xpdf wasn't responding to the TARGETS atom, which prevented pasting
- the selection into various applications. [Thanks to Phillip Ezolt.]
-Handle XObjects with recursive references in their Resources
- dictionaries (in PSOutputDev).
-Change PSOutputDev to deal with invalid PDF files that use
- non-embedded TrueType fonts with no encoding.
-Check for undersized Widths arrays in fonts.
-Add bounds checking code to Array class.
-Updated VMS build scripts. [Thanks to Martin Zinser.]
-Tweak the TrueType font handling code (again):
- - char codes in symbolic fonts may or may not be offset by 0xf000
- - discard empty tables because they sometimes confuse FreeType
-Fixed bounds checking in the Flate decoder.
-Removed a bogus error message for exponential functions without
- explicit C0/C1 values. [Thanks to Hartmut Henkel.]
-Handle the other Unicode cmap type (platform=0) in TrueType fonts.
-Added support for the SGI Motif horizontal paned window widget.
- [Thanks to Felix Ritter.]
-Ignore extra elements in link destination arrays.
-Accept external Type 1 font files with a suffix of ".ps" or no suffix
- at all.
-Add a bounds check in the DCT decoder.
-Added instructions for building xpdf.exe under cygwin/XFree86.
-Tweaked the word separation parameter for raw-mode text extraction.
-
-2.03 (2003-oct-10)
-------------------
-Rewrote the text extractor to:
- - do a better job with rotated text;
- - handle right-to-left scripts;
- - be faster.
-Changed the zoom setting to use a percentage (relative to 72 dpi)
- instead of a zoom "factor".
-If the PDF file has an outline, open the outline pane initially.
-Added -f and -l options to pdfinfo; print multiple page sizes.
-The HAVE_XTAPPSETEXITFLAG test in XPDFApp.cc was backwards.
-The BitsPerComponent entry is optional in image mask objects.
-Render any annotation with an appearance stream, instead of just
- Widget and Stamp annotations.
-Fix a bug in the TrueType font checker: the test for an unsorted
- 'loca' table was wrong.
-Modify the TrueType cmap selection algorithm yet again to try to match
- Adobe's behavior.
-Changed sqrt(2) to sqrt(2.0) in pdfinfo.cc to make various compilers
- happy.
-Fixed a deadlock problem (when MULTITHREADING is set); cleaned up some
- other problems with the locking code.
-Fixed a bug in the interpolation code for type 0 (sampled) functions.
-Implemented type 1 (function-based) shaded fills.
-Fixed some stupid bugs in the JBIG2 decoder (introduced with the
- previous optimization work).
-Fixed a typo in the code that parses vertical font metrics for CID
- fonts that was causing a seg fault.
-Fixed a couple of bugs that were causing seg faults with badly damaged
- PDF files.
-Limit the number of nested Forms to avoid infinite recursion (in buggy
- PDF files).
-Add a special case for rectangular clip regions - make sure these
- don't drop pixels on the right and bottom edges.
-Tell FreeType not to use glyph bitmaps when in anti-aliased mode.
-Read all of the border style info for links.
-All of the shaded fill types now do at least one bisection to avoid
- problems when the colors at the endpoints of the domain are the
- same.
-If the Length2 parameter for an embedded Type 1 font was incorrect
- (too small), pdftops was losing font data.
-Deal with (broken) DCT streams that use the same component ID number
- for different components.
-The MediaBox page attribute was not being inherited correctly.
-Fixed a bug in the Type 1C font converter related to local
- subroutines.
-The Type 1C -> Type 1 font converter was allocating the font dictionary
- one slot too small.
-Added a missing private dictionary entry to Type 1 fonts generated by
- the Type 1C converter. [Thanks to Michael Shell.]
-Fixed bugs in the tiling pattern fill code.
-Try the TrueType 0xf000 char code offset hack for the MacRoman
- encoding too (in addition to MS Symbol).
-Update the font metrics info for the Base 14 fonts to include the Euro
- character.
-SECURITY HOLE: Escape various characters in URLs before running a web
- browser (or movie viewer). [Fixed in 2.02p11]
-SECURITY HOLE: In the dialog used to verify "launch" links, provide a
- scrolling view if the command to be run is excessively long. [Fixed
- in 2.02p11]
-Added an option to disable insertion of page breaks (form feed
- characters) in extracted text (pdftotext -nopgbrk; xpdfrc
- "textPageBreaks" option).
-Check for 8-bit fonts that specify an out-of-range FirstChar or
- LastChar.
-Correctly handle an obsolete Type 2 charstring op (in the Type
- 1C-to-Type 1 font converter). [Thanks to Helge Blischke.]
-Use the font encoding info to fill in holes in the ToUnicode map.
-Added character names for Bulgarian (in the Cyrillic support pacakage)
- and Greek.
-Handle clipping to text in xpdf and pdftops.
-Fix color space detection in DCT decoder. [Thanks to Dwight Kelly.]
-Added the "unicodeToUnicode" xpdfrc option, intended (initially) for
- Arabic support.
-Handle the case in PSOutputDev where two font objects refer to the
- same embedded TrueType font, but with different encodings. [Thanks
- to Frank Siegert.]
-Kill any pre-existing path before drawing a form (or annotation).
-Save state before rendering page content; restore state afterward.
-Fix Stream::reset/close to work correctly with encoder streams; fix
- PSOutputDev to use Stream::close consistently.
-Fix a seg fault when hitting the 'back' button after closing a file.
-GfxState::getStrokeGray was returning the fill gray value (this only
- affected Level 1 PS output).
-Change PSOutputDev to reuse dictionaries in Level 1 mode (since Level
- 1 PS interpreters don't do garbage collection). [Thanks to Frank
- Siegert.]
-PSOutputDev was generating incorrect translations for landscape-mode
- pages.
-Implemented shading pattern color spaces.
-PSOutputDev wasn't correctly handling Type 3 fonts which used image
- resources (as opposed to inline images). [Thanks to Frank Siegert.]
-The fix from 1.00 which clipped out-of-bounds points was a bit too
- aggressive.
-Do proper Floyd-Steinberg dithering in XOutputDev.
-Don't automatically check for a null owner password (to match Adobe's
- behavior).
-Allow the FlateDecode filter in Level 3 PostScript output.
-Fixed small bugs in the Type 1C -> Type 1 converter and Type 1C ->
- Type 0 converter. [Thanks to Tom Kacvinsky.]
-Work around another weird Motif problem with the right button menu
- (which was sometimes causing the menu to not be displayed).
-Make the code that handles fonts defined directly in the resource dict
- more robust.
-Add a brief description of the outline pane to the xpdf man page.
-Ignore extra operands to content stream operators.
-Fixed a bug in the CCITTFax decoder.
-Allow the Count entry in a Pages dictionary to be a real number
- (because some PDF generators actually do this).
-Shading pattern fills weren't being clipped correctly.
-Incorrect shallow copies in GfxRadialShading and StitchingFunction.
-The StitchingFunction destructor wasn't checking for funcs being
- NULL.
-Change the TrueType code-to-GID mapping code so it looks at the
- TrueType 'post' table.
-Set the print command in the print dialog once at startup, don't
- change it each time a file is (re)loaded.
-Generate the %%BoundingBox comment in regular PostScript files (not
- just EPS files).
-Fixed a bug in the Unicode CMap parser.
-
-3.00 (2004-jan-22)
-------------------
-New PDF rasterizer ("Splash").
-Added support for PDF 1.5:
- - JPX (JPEG 2000) decoder
- - XRef streams
- - object streams
- - DeviceN color spaces with up to 32 components
- - Added new CMaps to the CJK language support packages
-Replaced pdftopbm with pdftoppm (which can generate PBM, PGM, and PPM
- files).
-Reorganized the font file parser code into a new library ("Fofi").
-Removed support for FreeType 1.x.
-Removed support for X server fonts - Xpdf (and pdftoppm) will now
- search for the URW fonts (from ghostscript).
-Changed the "-t1lib" and "-freetype" switches; replaced the
- "t1libControl" and "freetypeControl" config file options with
- "enableT1lib", "enableFreeType", and "antialias".
-Added the "-box" option to pdfinfo.
-Added imageable area support to PSOutputDev (for CUPS); added the
- "psImageableArea" config file option.
-Added the "-nocrop", "-expand", "-noshrink", and "-nocenter" switches
- to pdftops; added the "psCrop", "psExpandSmaller", "psShrinkLarger",
- and "psCenter" config file options.
-Dictionary size was in PostScript code generated for Type 3 fonts.
-The PS code generated for images in Type 3 characters was broken.
-Tweaked the text extractor.
-Accept xref entries that are one byte too short (matching Adobe's
- behavior).
-Change things so "xpdf -h" and "xpdf -v" work if DISPLAY isn't set.
-Fix a problem in the damaged file repair code that handles the trailer
- dictionary.
-Use the "Last" entries in "Outlines" objects - this avoids a problem
- with PDF files generated by buggy software that, e.g., sets the last
- item's Next pointer to point to itself.
-PSOutputDev was not handling DeviceN color spaces correctly in Level 2
- images.
-Fixed a stupid little bug that broke PS output for JBIG2 images.
-Work around a Lesstif bug: set up an extra callback so hitting <Enter>
- in the find dialog performs a search. [Thanks to Elliott Hughes.]
-Pdftops was crashing on zero page PDF files.
-Add an AC_PREREQ call to configure.in.
-Change the 'find' dialog so the text entry box resizes with the
- dialog.
-Skip extraneous zero bits at the start of a CCITTFax stream.
-The PostScript text clipping operator was missing a 'newpath'.
- [Thanks to Frank Siegert.]
-Fix a bug in tiling patterns with bboxes that don't start at (0,0).
-Fix a bug in Type 3 font handling with rotated text.
-The tiled pattern fill code was destroying the current path, which
- broke the fill+stroke operators when the fill color space was a
- tiled pattern.
-ICCBased color spaces don't always set their Ranges values correctly,
- so just use the values from the alternate color space.
-Modified GHash to accept int or void* - this avoids some conversion
- warnings.
-Check for missing Type 3 CharProcs - avoid a segfault.
-Pdffonts now marks all Type 3 fonts as embedded.
-Outline entries with no Title string weren't being handled correctly,
- resulting in segfaults.
-PSOutputDev now forces the text horizontal scale factor to be non-zero
- to avoid singular font matrices in the PS code.
-Tweaked the error recovery in the CCITTFax decoder.
-The LZW/Flate predictor should treat any Predictor value (in the
- stream dictionary) >= 10 identically.
-PSOutputDev and pdffonts check for NULL font objects (which can
- happen, e.g., because of missing CMap files).
-Swap the left and right mouse wheel button numbers.
-EPS output ("pdftops -eps") now uses the CropBox instead of the
- MediaBox as the EPS bounding box.
-
-3.01 (2005-aug-17)
-------------------
-Added the continuous view mode, including the '-cont' switch and the
- 'continuousView' config file option.
-At high zoom levels, don't rasterize the entire page - this avoids
- problems running out of memory.
-Added "search backward" and "match case" options to the find dialog.
-Support explicitly masked images and soft masked images.
-Add support to DCTStream for 16-bit quant tables.
-Don't segfault if the user clicks on an outline entry with a broken
- destination.
-Changed the makefiles and configure script to skip building pdftoppm
- (in addition to xpdf) if X, Motif, or FreeType is not found; changed
- the error message in the configure script to match.
-Move an inline function in JArithmeticDecoder.cc to avoid compiler
- errors.
-Fixed a bug in the rasterizer that was sometimes causing infinite
- loops with round line caps on vertical lines.
-Various rasterizer optimizations.
-Look for intermediate resize events - try to avoid lagging when the
- user is doing an opaque resize.
-The FormType key in Form XObjects is optional.
-Handle external 16-bit TrueType fonts correctly, using the Unicode
- cmap.
-Add class declarations to TextOutputDev.h to work with stricter C++
- compilers.
-Support FreeType's weird include file stuff (ft2build.h, etc.).
-Fixed a bug handling empty paths.
-Fixed a text positioning problem in PostScript output.
-Handle TrueType collections in FoFiTrueType.cc.
-FoFiTrueType constructor was reporting a failure if the post table was
- bad - this should be non-fatal.
-Type 1 font parser was missing a NULL test.
-Mask chars passed to isdigit in goo/parseargs.c to avoid problems with
- signed chars.
-Added more error checking to the CCITTFax decoder.
-Fixed a bug (computing the MCU size) in the DCT decoder.
-Change a test in the Splash stroke code to avoid x86 floating point
- weirdness.
-Reorganized the decryption code to allow security handler plugins;
- removed the NO_DECRYPTION #ifdefs.
-Added a plugin interface, initially just for security handlers.
-Support color key masked images and explicitly masked images in PS
- output (Level 2 only).
-When checking for aliases of the Base 14 fonts, ignore spaces in the
- specified font name.
-Handle encrypted PDF files that are missing the file ID string.
-Handle tiling patterns more efficiently in the PostScript output.
-Rewrote the code that handles color spaces in PostScript output.
-Fixed a bug in the Type 1C font parser - zero-length indexes (and
- zero-length names) weren't handled correctly.
-Handle shaded fills more efficiently in the PostScript output.
-Implement the remaining shading types (4-7).
-Rearranged the Splash color modes.
-Add the EarlyChange parameter to LZWStream when generating PostScript.
-Check for zero values in line dash arrays in PSOutputDev.
-Fixed an uninitialized variable in JArithmeticDecoder which was
- causing crashes.
-Treat unknown CMap names as identity mappings (to match Adobe's
- behavior).
-Fixed bugs in the XRef parser related to XRef streams in updated
- files.
-Added a missing call to FT_Done_Glyph which was causing a memory leak.
- [Thanks to Dave Formanek.]
-Fixed a bug in text copying that was causing the last word to be
- dropped on some pages.
-Tweaked the image width/height computation in Splash::drawImage and
- Splash::fillImageMask to make striped images work better.
-Ignore minus signs in the middle of numbers (to match Adobe's
- behavior).
-Missing '%s' in format strings for dates in pdftotext '-htmlmeta'
- mode.
-Change the TrueType code-to-GID mapping code so it looks at the
- standard name-to-Unicode mapping before the ToUnicode mapping
- defined in the font object.
-Added a matteColor setting (command line option and X resource).
-Tweaked the CMYK->RGB transform.
-Fix some problems in tracking the character position (to match up with
- Adobe's highlight file format).
-Handle moveto/closepath/stroke correctly.
-Check for singular text matrices and font size of zero in PSOutputDev.
-Clip PS output to the size of the page (avoiding any gibberish that
- lies outside the MediaBox, in the case where the MediaBox is smaller
- than the paper).
-If the line dash element in an annotation's Border array is of an
- invalid type (i.e., not an array), don't draw the link at all (this
- matches Adobe's behavior).
-Don't remap small caps and oldstyle glyphs in the name-to-Unicode
- table - it messes up TrueType font encodings.
-Pdftoppm wasn't setting the paper color correctly in mono and gray
- modes (this only showed up on big-endian machines).
-Missing NULL check was causing crashes when attempting to read non-PDF
- files that happened to contain the string '%PDF'.
-Fixed a problem in the text extractor that was breaking up words.
-Handle vertical text (CJK fonts) in PS output with TrueType fonts that
- are missing the vertical metrics tables.
-Handle the case where a font object and the corresponding embedded
- font are different types.
-Handle basic crypt filter functionality.
-Added more value checking in the XRef parser, to avoid potential
- security problems.
-Updated the CJK language support packages: replaced the
- displayCIDFontX references with displayCIDFontTT; added pointers to
- free TrueType fonts.
-Added a missing error message when SplashOutputDev can't parse an
- embedded TrueType font file.
-PDFCore and TextOutputDev now correctly handle searching for Unicode
- strings, including real Unicode case-folding.
-Throw away tiling pattern fills that are completely outside the clip
- region.
-The JPEG 2000 inverse reversible multiple component transform code was
- wrong.
-Fixed some bugs in shading pattern fills: clipping was wrong, and
- background color was not implemented.
-Added tool tips for the toolbar buttons.
-Decrease the max depth of recursive patch mesh filling if the pattern
- has a large number of patches.
-Highlight the find text whenever the find dialog is mapped.
-Handle page boundary boxes with reversed coordinates.
-Fixed a bug in the text extractor code that handles duplicated text.
-Optimization work on SampledFunction::transform().
-Use the CropBox instead of the MediaBox as the display region.
-Dither for PseudoColor (8-bit) displays.
-Fix a bug in DCTStream that was causing an infinite loop with
- corrupted DCT image data.
-Fix a bug in the ToUnicode CMap parser.
-Fix a bug in the text extractor - negative font sizes weren't being
- handled correctly.
-Fix a bug in the text extractor - in certain cases, out-of-bounds text
- could cause crashes (generally only in damaged PDF files).
-Fix a read-past-end-of-array bug in the JBIG2 decoder.
-Fix a case where pdftops was generating lines longer than 255 chars.
-Optimize redraws - don't regenerate the XImage every time redrawRect
- is called.
-The ASCII85 decoder wasn't skipping whitespace properly.
-Optimize text extraction: skip (non-inline) image setup entirely.
-Added initial transparency support (stroke/fill alpha and blend mode).
-Added support for the overprint setting in PostScript output.
-Fixed various buffer overflow bugs.
-Handle negative font sizes and horizontal scaling correctly - this
- affected PSOutputDev for all text operators, as well as the TJ
- operator for all OutputDevs.
-Fixed a buffer overflow in the CCITTFax decoder.
-Fixed an out-of-order entry in the list of font name aliases.
-Fixed a backward loop in the PostScriptFunction code.
-Treat a zero-length base URI the same way as a nonexistent base URI.
-Add a divide-by-zero check in TextOutputDev (the problem was happening
- in cases of mixed horizontal and vertical text).
-PSOutputDev wasn't rounding the page bounding box coordinates
- correctly.
-Support the SOF1 marker in DCT (JPEG) image streams.
-Minor changes to GlobalParams.h and JPXStream.h because some compilers
- don't like anonymous structs inside anonymous unions.
-Xpdf now complains about a negative page number.
-Changed GString::cmp and GString::cmpN to correctly handle '\0' chars
- in the middle of strings.
-Fixed the radial shading code; corrected the handling of the 'extend'
- parameters.
-Added the gmallocn and greallocn functions.
-Fixed a bug in the TIFF image component predictor which shows up with
- components that are not 1 or 8 bits wide.
-Optimized FlateStream::loadFixedCodes().
-For non-embedded Base-14 fonts, don't use the ascent/descent/bbox
- values from the FontDescriptor - various PDF generators get them
- wrong.
-Fixed a bug in the text extractor - words on the same line (especially
- in tables) were being split vertically onto multiple lines.
-Automatically select the correct radio button ("print with command"
- vs. "print to file") in the print dialog.
-Don't create the "open" and "save as" dialogs until needed - this
- avoids stat-ing every file in the directory at startup.
-Changed the Big5 and Big5ascii encodings (in the traditional Chinese
- language support package) to include characters from the Unicode
- database (which aren't mentioned in the Adobe character collection
- documentation).
-Added the '-pagecrop' switch to pdftops.
-Tweaked the RGB->gray and CMYK->gray conversion functions to match the
- PDF spec.
-The JPEG 2000 decoder wasn't correctly handling codeblocks split
- across multiple packets/layers.
-Fixed a typecast that caused compile errors on 64-bit systems.
-The CMap parser wasn't handling the 'cidchar' construct.
-Handle the case in PSOutputDev where two font objects refer to the
- same embedded 16-bit TrueType font, but with different CIDToGIDMaps.
-Changed the configure script to report more accurate warnings when
- it can't find X / Motif / FreeType.
-Encryption with revision=2 always uses a 40-bit key, regardless of the
- specified Length value.
-Yet another minor change to the TrueType font encoding deciphering
- algorithm.
-Don't completely invalidate the Catalog if one (or more) of the page
- objects are bogus -- just skip over those pages.
-Removed the workaround in pdftops for too-small Length2 values in Type
- 1 fonts -- it was causing problems on various PostScript printers.
-Started adding error checking to the JBIG2 decoder (this is nowhere
- near complete yet).
-Extended the "unicodeToUnicode" config option to also apply to CID
- fonts.
-Added the narrow Latin characters to the Adobe-Korea1.cidToUnicode
- file in the Korean language support package.
-Fixed the code that handles page rotation in PSOutputDev.
-When converting a Type 1C glyph to a Type 1 glyph, insert closepath
- operators as appropriate.
-Check for a sane 'loca' table in TrueType fonts (FoFiTrueType::parse).
-Fix PSOutputDev to correctly handle the case of an empty name in a
- font encoding.
-
-3.02 (2007-feb-27)
-------------------
-Added anti-aliasing for vector graphics; added the vectorAntialias
- xpdfrc option; added the "-aaVector" switch to xpdf and pdftoppm.
-Implemented stroke adjustment (always enabled by default, ignoring the
- SA parameter, to match Adobe's behavior), and added the strokeAdjust
- xpdfrc command.
-Support PDF 1.6 and PDF 1.7.
-Added support for AES decryption.
-Added support for OpenType fonts (only tested with 8-bit CFF data so
- far).
-Added user-configurable key/mouse bindings - the bind/unbind xpdfrc
- commands.
-Cleaned up the full-screen mode code and added the ability to toggle
- it on the fly (the default key binding is alt-f).
-Pdfimages with the -j option now writes JPEG files for 1-component
- (grayscale) DCT images, in addition to 3-component (RGB) images.
-Fixed bugs in handling sampled (type 0) functions with 32-bit
- samples.
-Fixed some things to support DeviceN color spaces with up to 32
- colorants.
-Pdftops now constructs the %%Creator and %%Title DSC comments from the
- relevant information in the PDF Info dictionary.
-Tweak the TrueType font encoding deciphering algorithm.
-Added the "mapUnkownCharNames" xpdfrc option.
-Fix a bug (that only showed up with certain window managers) in the
- intermediate resize event optimization. [Thanks to Michael Rogers.]
-Check for a broken/missing embedded font (this was causing xpdf to
- crash).
-Added support for transfer functions in PostScript output.
-Be a bit more tolerant of Link destinations that contain null values
- for positioning parameters.
-Use ordered dot dithering instead of clustered dot dithering at
- resolutions below 300 dpi (for monochrome output).
-Fixed security holes (bounds checking issues) in several places.
-Don't bother creating a SplashFont (allocating memory) for fonts that
- are only used for hidden text - this avoids problems with fonts of
- unreasonably large sizes.
-Clipping in TextOutputDev was off for characters on the left edge of
- the page.
-The scn and SCN operators weren't correctly handling colors with more
- than four components.
-FoFiType1::writeEncoded wasn't always correctly finding the end of the
- encoding.
-Use the ColorTransform parameter in the DCTDecode stream dictionary.
-Type 3 fonts are allowed to have a bbox of [0 0 0 0], which means
- "unspecified" -- don't issue error messages in that case.
-Perform the transform (to device space) in Splash instead of in
- SplashOutputDev -- this is needed to correctly handle round joins
- and caps on stroked paths.
-PSOutputDev now rasterizes any pages that use transparency.
-Limit the crop, bleed, trim, and art boxes to the edges of the media
- box (per the PDF spec).
-Change GString to increase the allocation increment by powers of two.
-Handle whitespace in hex strings in CMap files/streams.
-Use strings instead of names for separation colorant names in
- PSOutputDev.
-For explicitly masked images where the mask is higher resolution than
- the image, use the soft mask code.
-Avoid problems with very large x-steps in the PostScript output for
- tiling pattern fills.
-Avoid a divide-by-zero in stitching functions which have a subfunction
- with empty bounds.
-Honor the "Hidden", "NoView", and "Print" flags on annotations.
-Rewrote the pixel rendering code in Splash to use a single set of
- pixel pipeline functions.
-Added support for transparency groups and soft masks.
-Fixed the transparency blend functions to match the addendum published
- by Adobe.
-Changed Splash/SplashBitmap to store alpha in a separate plane.
-Setting the color space now selects the correct default color for that
- color space.
-Remove the mutex lock from GlobalParams::getErrQuiet() to avoid a
- deadlock when parseCIDToUnicode() or parseUnicodeToUnicode() calls
- it from inside a locked section.
-Added error checking (on the argument count) in the sc/SC/scn/SCN
- operators.
-Skip over notdef glyphs in TrueType fonts (which sometimes get drawn
- as little boxes), to match Adobe's behavior.
-Painting operations in a Separation color space with the "None"
- colorant or a DeviceN color space with all colorants set to "None"
- never mark the page.
-Fixed an obscure bug in the JPX decoder - it wasn't reading the extra
- stuffing byte in the case where the last byte of a packet header was
- 0xff.
-Change the TrueType font parser (FoFiTrueType) to change the glyph
- count rather than report an error if the 'loca' table is too small.
-Fixed a couple of bugs in the JBIG2 decoder.
-Added stochastic clustered dot dithering.
-Added the screenType, screenSize, screenDotRadius, screenGamma,
- screenBlackThreshold, and screenWhiteThreshold xpdfrc settings.
-PSOutputDev now correctly handles invalid Type 3 charprocs which don't
- start with a d0 or d1 operator
-FreeType 2.2.x support - get rid of the FT_INTERNAL_OBJECTS_H include,
- and add some 'const' declarations.
-Handle PDFDocEncoding in Info dictionary strings.
-Tweak the xref repair code - ignore whitespace at the start of lines
- when looking for objects.
-Added the "-exec" switch to xpdf.
-Removed the xpdf.viKeys X resource.
-Changed the color key / explicit masked image code in PSOutputDev to
- generate better PS code, including a Level 3 option.
-Tweaked the DEBUG_MEM code for performance.
-Move the JBIG2 global stream reading code into reset() instead of the
- constructor - this way, pdftotext doesn't end up reading the global
- stream.
-Added the "-preload" option to pdftops and the psPreload xpdfrc
- command.
-Added the "zoom to selection" command (on the popup menu).
-Fix a bug (in xpdf/pdftoppm/pdftops) with tiling patterns whose bbox
- size is different from their xStep/yStep.
-Implemented stroke with pattern color spaces.
-Following a link to a page whose CropBox was different from the
- MediaBox was resulting in an incorrect scroll position.
-Parse truncated date strings from the Info dictionary correctly.
-Change FoFiType1 to handle Type 1 fonts with two /Encoding keys.
-Extend the PSOutputDev shaded fill code to handle DeviceCMYK shaded
- fills in level2sep and level3sep modes.
-Detect infinite loops in the Page tree.
-Optimized the ASCII85Encoder code.
-Tweaked the text extractor to do a better job of lining up rows of
- text.
-Leave images compressed (or re-compress them with RLE) in PostScript
- output when setting up images for forms and Type 3 fonts (or with
- -preload).
-Extend FoFiType1 to handle Type 1 fonts with octal character codes in
- their encodings.
-Use a custom string formatter to avoid problems with locale-based decimal
- formatting (commas instead of periods) in PS output.
-Allow comments in PostScript-type functions.
-Change the TrueType font parser (FoFiTrueType) to delete glyf table
- entries that are too short.
diff --git a/Build/source/libs/xpdf/ChangeLog b/Build/source/libs/xpdf/ChangeLog
deleted file mode 100644
index 0b3f809f2b2..00000000000
--- a/Build/source/libs/xpdf/ChangeLog
+++ /dev/null
@@ -1,10 +0,0 @@
-2008-01-31 Peter Breitenlohner <peb@mppmu.mpg.de>
-
- Convert from autoconf-2.13 to autoconf-2.59+:
- * Makefile.in, fofi/Makefile.in, goo/Makefile.in,
- xpdf/Makefile.in: Add @configure_input@ lines.
- * acinclude.m4 (new): Renamed from aclocal.m4,
- replaced AC_DEFUN(FOO,...) by AC_DEFUN([FOO],...).
- * aclocal.m4 (new): Generated (aclocal -I ../../texk/m4).
- * configure: Regenerated (autoconf).
-
diff --git a/Build/source/libs/xpdf/INSTALL b/Build/source/libs/xpdf/INSTALL
deleted file mode 100644
index 6c6db871129..00000000000
--- a/Build/source/libs/xpdf/INSTALL
+++ /dev/null
@@ -1,248 +0,0 @@
-Xpdf
-====
-
-version 3.02
-2007-feb-27
-
-The Xpdf software and documentation are
-copyright 1996-2007 Glyph & Cog, LLC.
-
-Email: derekn@foolabs.com
-WWW: http://www.foolabs.com/xpdf/
-
-
-Compiling xpdf
---------------
-
-Xpdf is written in C++ (with a little bit of C). It should work with
-any ANSI-compliant C++ and C compilers. The systems and compilers
-it's been tested with are listed on the xpdf web page.
-
-Xpdf requires the Motif (or Lesstif) toolkit.
-
-The following notes give specific instructions for compiling on
-different systems.
-
-
-**************
-*** UNIX ***
-**************
-
-* Install t1lib (if desired). The resulting library (libt1) and
- include files (t1lib.h and t1libx.h) should be placed somewhere on
- the standard search paths. Alternatively, when you configure xpdf,
- you can use the following options to tell configure where to find
- the t1lib files:
-
- --with-t1-library=PATH
- --with-t1-includes=PATH
-
-* Install FreeType 2 (this is required). WARNING: You must have
- version 2.0.5 or newer. Some older versions of XFree86 ship with an
- older version of FreeType, which means you'll need to explicitly set
- include and library paths to get the correct version:
-
- --with-freetype2-library=PATH
- --with-freetype2-includes=PATH
-
- (The include path is the directory which contains the freetype2
- directory, i.e., do NOT include "freetype2" in the
- --with-freetype2-includes path. For example, with the default
- installation, the library path is /usr/local/lib and the include
- path is /usr/local/include/freetype2.)
-
-* If you have Motif (or Lesstif) installed in a non-standard place,
- you can use the following options to tell configure where to find
- it:
-
- --with-Xm-library=PATH
- --with-Xm-includes=PATH
-
-* Run the configure script:
-
- ./configure
-
- This should produce a set of makefiles customized for your system.
- The configure script accepts the following options (in addition to
- the usual things accepted by autoconf configure scripts):
-
- --prefix=PREFIX
- Changes the directory where xpdf is installed. The default is
- /usr/local.
-
- --enable-a4-paper
- Switches the default paper size for PostScript output (xpdf
- and pdftops) to A4. The default is Letter size.
-
- --enable-no-text-select
- With this option, xpdf will not copy text. (This is only
- useful on closed systems where the user can't get at the PDF
- file directly.)
-
- --enable-opi
- Enables support for generation of OPI (Open Prepress
- Interface) comments with pdftops.
-
- --sysconfdir=DIR
- Look for the system-wide xpdfrc config file in this directory.
- The default is PREFIX/etc.
-
- --with-appdef-dir=DIR
- Use the specified app-defaults directory. The default is
- /usr/lib/X11/app-defaults.
-
- If you need to pass specific options to the C and/or C++ compiler,
- you can set the CFLAGS and/or CXXFLAGS environment variables before
- running the configure script. Any options given that way will be
- added to the CFLAGS/CXXFLAGS used by all of the Xpdf makefiles.
-
-* Type 'make'. This should build the executables:
-
- xpdf/xpdf
- xpdf/pdftops
- xpdf/pdftotext
- xpdf/pdfinfo
- xpdf/pdffonts
- xpdf/pdftoppm
- xpdf/pdfimages
-
-* If desired, type 'make install' to install the binaries and man
- pages.
-
-The old Makefile.config and Makefiles are no longer provided or
-supported. If you really want to manually configure Xpdf (which is
-not recommended), the files that need to be created are aconf.h,
-Makefile, goo/Makefile, fofi/Makefile, splash/Makefile, and
-xpdf/Makefile, all of which are generated from the corresponding '.in'
-files.
-
-If you want to run a quick test, there is a tiny PDF file included
-with xpdf, as misc/hello.pdf .
-
-
-*************
-*** VMS ***
-*************
-
-* The 'stddef.h' include file which comes with older versions of gcc
- may be missing a definition for wchar_t. In this case, add the
- following lines:
- -----
- File GNU_CC:[INCLUDE]STDDEF.H;2
- 44 /* Wide characters, not yet supported by VAXCRTL [match VAXC's <stddef.
- 45 #if !defined(_WCHAR_T) && !defined(_WCHAR_T_)
- 46 typedef unsigned int wchar_t;
- 47 #endif
- 48 #define _WCHAR_T
- 49 #define _WCHAR_T_
- 50
- -----
-
-* Read the instructions at the top of vms_make.com.
-
-* Type '@vms_make' in the top-level directory. You'll probably want
- to use some of the options described in the file.
-
-* The executables will be left in '[.xpdf]'.
-
-If you want to run a quick test, there is a tiny PDF file included
-with xpdf, as misc/hello.pdf .
-
-
-**************
-*** OS/2 ***
-**************
-
-Xpdf is known to run under OS/2 with the EMX runtime environment and
-XFree86. Using a proper autoconf port you can generate a valid
-configure script version.
-
-
-***************
-*** Win32 ***
-***************
-
-The non-X programs (pdftops, pdftotext, pdfinfo, pdffonts, pdfimages,
-and pdftoppm) will compile with both gcc (from cygwin), djgpp (the
-Delorie port of gcc) and Microsoft Visual C++.
-
-With cygwin, the build procedure is the same as for Unix:
-
- * Open a shell.
-
- * ./configure
-
- * make
-
- * make install
-
-It is also possible to build the Xpdf viewer with the cygwin XFree86
-port (thanks to Michael A. Richmond for these instructions):
-
- * make sure you have the lesstif, XFree86-base, and XFree86-prog
- cygwin packages installed (all from the "XFree86" category)
-
- * to build t1lib:
- - cd T1Lib-x.y
- - ./configure --without-x
- - make without_doc
- - make install
- (this should install /usr/local/include/t1lib.h and
- /usr/local/lib/libt1.a)
-
- * to build xpdf:
- - cd xpdf-x.yy
- - ./configure --with-t1-library=/usr/local/lib
- --with-t1-includes=/usr/local/include
- --with-freetype2-library=/usr/X11R6/lib
- --with-freetype2-includes=/usr/X11R6/include/freetype2
- --with-Xm-library=/usr/X11R6/lib
- --with-Xm-includes=/usr/X11R6/include
- (all on one line)
- - make
- (this should build xpdf.exe, in addition to the command line
- utilities)
-
-With djgpp:
-
- * Open a DOS window.
-
- * ./dj_make
-
- * djgpp is a DOS/Windows port of gcc, available from
- http://www.delorie.com/
-
-With djgpp, for DOS 6 (instead of Win32):
-
- * ./dj_make
-
- * cd xpdf
-
- * strip pdftops.exe
-
- * exe2coff pdftops.exe
-
- * copy /B c:\djgpp\bin\cwsdstub.exe+pdftops pdftops.exe
-
- * upx pdftops.exe
- - if you want compressed executables
-
- * and similarly for the other executables
-
- * cwsdstub.exe comes from djgpp/v2misc/csdpmi5b.zip on any of the
- djgpp ftp mirrors; exe2coff is part of the standard djgpp install
-
- * upx comes from http://upx.sourceforge.net/
-
-With the Microsoft tools:
-
- * Open a DOS window.
-
- * Type "cl". If you get the message "Bad command or file name", you
- must run VCVARS32.BAT. (The location of this BAT file can be
- determined with Explorer.)
-
- * Type "ms_make"
-
-The dj_make and ms_make scripts don't build pdftoppm -- you'll need to
-install t1lib and FreeType 2 before you can compile pdftoppm.
diff --git a/Build/source/libs/xpdf/Makefile.in b/Build/source/libs/xpdf/Makefile.in
deleted file mode 100644
index 07eac14a849..00000000000
--- a/Build/source/libs/xpdf/Makefile.in
+++ /dev/null
@@ -1,18 +0,0 @@
-# @configure_input@
-
-all:
- (cd xpdf; $(MAKE) libxpdf.a)
- (cd goo; $(MAKE) libGoo.a)
- (cd fofi; $(MAKE) libfofi.a)
-
-mostlyclean clean depend:
- (cd xpdf; $(MAKE) $@)
- (cd goo; $(MAKE) $@)
- (cd fofi; $(MAKE) $@)
-
-distclean maintainer-clean extraclean: clean
- (cd xpdf; $(MAKE) $@)
- (cd goo; $(MAKE) $@)
- (cd fofi; $(MAKE) $@)
- rm -f Makefile config.cache config.log config.status aconf.h
- rm -f fofi/Makefile.aux goo/Makefile.aux xpdf/Makefile.aux
diff --git a/Build/source/libs/xpdf/README b/Build/source/libs/xpdf/README
deleted file mode 100644
index 71fd62e319d..00000000000
--- a/Build/source/libs/xpdf/README
+++ /dev/null
@@ -1,405 +0,0 @@
-Xpdf
-====
-
-version 3.02
-2007-feb-27
-
-The Xpdf software and documentation are
-copyright 1996-2007 Glyph & Cog, LLC.
-
-Email: derekn@foolabs.com
-WWW: http://www.foolabs.com/xpdf/
-
-The PDF data structures, operators, and specification are
-copyright 1985-2006 Adobe Systems Inc.
-
-
-What is Xpdf?
--------------
-
-Xpdf is an open source viewer for Portable Document Format (PDF)
-files. (These are also sometimes also called 'Acrobat' files, from
-the name of Adobe's PDF software.) The Xpdf project also includes a
-PDF text extractor, PDF-to-PostScript converter, and various other
-utilities.
-
-Xpdf runs under the X Window System on UNIX, VMS, and OS/2. The non-X
-components (pdftops, pdftotext, etc.) also run on Win32 systems and
-should run on pretty much any system with a decent C++ compiler.
-
-Xpdf is designed to be small and efficient. It can use Type 1 or
-TrueType fonts.
-
-
-Distribution
-------------
-
-Xpdf is licensed under the GNU General Public License (GPL), version
-2. In my opinion, the GPL is a convoluted, confusing, ambiguous mess.
-But it's also pervasive, and I'm sick of arguing. And even if it is
-confusing, the basic idea is good.
-
-In order to cut down on the confusion a little bit, here are some
-informal clarifications:
-
-- I don't mind if you redistribute Xpdf in source and/or binary form,
- as long as you include all of the documentation: README, man pages
- (or help files), and COPYING. (Note that the README file contains a
- pointer to a web page with the source code.)
-
-- Selling a CD-ROM that contains Xpdf is fine with me, as long as it
- includes the documentation. I wouldn't mind receiving a sample
- copy, but it's not necessary.
-
-- If you make useful changes to Xpdf, please make the source code
- available -- post it on a web site, email it to me, whatever.
-
-If you're interested in commercial licensing, please see the Glyph &
-Cog web site:
-
- http://www.glyphandcog.com/
-
-
-Compatibility
--------------
-
-Xpdf is developed and tested on a Linux 2.4 x86 system.
-
-In addition, it has been compiled by others on Solaris, AIX, HP-UX,
-Digital Unix, Irix, and numerous other Unix implementations, as well
-as VMS and OS/2. It should work on pretty much any system which runs
-X11 and has Unix-like libraries. You'll need ANSI C++ and C compilers
-to compile it.
-
-The non-X components of Xpdf (pdftops, pdftotext, pdfinfo, pdffonts,
-pdftoppm, and pdfimages) can also be compiled on Win32 systems. See
-the Xpdf web page for details.
-
-If you compile Xpdf for a system not listed on the web page, please
-let me know. If you're willing to make your binary available by ftp
-or on the web, I'll be happy to add a link from the Xpdf web page. I
-have decided not to host any binaries I didn't compile myself (for
-disk space and support reasons).
-
-If you can't get Xpdf to compile on your system, send me email and
-I'll try to help.
-
-Xpdf has been ported to the Acorn, Amiga, BeOS, and EPOC. See the
-Xpdf web page for links.
-
-
-Getting Xpdf
-------------
-
-The latest version is available from:
-
- http://www.foolabs.com/xpdf/
-
-or:
-
- ftp://ftp.foolabs.com/pub/xpdf/
-
-Source code and several precompiled executables are available.
-
-Announcements of new versions are posted to several newsgroups
-(comp.text.pdf, comp.os.linux.announce, and others) and emailed to a
-list of people. If you'd like to receive email notification of new
-versions, just let me know.
-
-
-Running Xpdf
-------------
-
-To run xpdf, simply type:
-
- xpdf file.pdf
-
-To generate a PostScript file, hit the "print" button in xpdf, or run
-pdftops:
-
- pdftops file.pdf
-
-To generate a plain text file, run pdftotext:
-
- pdftotext file.pdf
-
-There are four additional utilities (which are fully described in
-their man pages):
-
- pdfinfo -- dumps a PDF file's Info dictionary (plus some other
- useful information)
- pdffonts -- lists the fonts used in a PDF file along with various
- information for each font
- pdftoppm -- converts a PDF file to a series of PPM/PGM/PBM-format
- bitmaps
- pdfimages -- extracts the images from a PDF file
-
-Command line options and many other details are described in the man
-pages (xpdf.1, etc.) and the VMS help files (xpdf.hlp, etc.).
-
-
-Upgrading from Xpdf 2.xx
-------------------------
-
-WARNING: Xpdf 3.00 switched to a new PDF rasterizer, which no longer
-uses X fonts. You'll need a set of Base-14 fonts -- the URW fonts
-distributed with ghostscript can be used for this. Xpdf will search
-for the URW fonts, but if you have them installed in a non-standard
-directory, you'll need to set up an xpdfrc config file to point to
-them. For full details, please see the xpdfrc(5) man page.
-
-
-Compiling Xpdf
---------------
-
-See the separate file, INSTALL.
-
-
-Bugs
-----
-
-If you find a bug in Xpdf, i.e., if it prints an error message,
-crashes, or incorrectly displays a document, and you don't see that
-bug listed here, please send me email, with a pointer (URL, ftp site,
-etc.) to the PDF file.
-
-
-Acknowledgments
----------------
-
-Thanks to:
-
-* Patrick Voigt for help with the remote server code.
-* Patrick Moreau, Martin P.J. Zinser, and David Mathog for the VMS
- port.
-* David Boldt and Rick Rodgers for sample man pages.
-* Brendan Miller for the icon idea.
-* Olly Betts for help testing pdftotext.
-* Peter Ganten for the OS/2 port.
-* Michael Richmond for the Win32 port of pdftops and pdftotext and the
- xpdf/cygwin/XFree86 build instructions.
-* Frank M. Siegert for improvements in the PostScript code.
-* Leo Smiers for the decryption patches.
-* Rainer Menzner for creating t1lib, and for helping me adapt it to
- xpdf.
-* Pine Tree Systems A/S for funding the OPI and EPS support in
- pdftops.
-* Easy Software Products for funding several improvements to the
- PostScript output code.
-* Tom Kacvinsky for help with FreeType and for being my interface to
- the FreeType team.
-* Theppitak Karoonboonyanan for help with Thai support.
-* Leonard Rosenthol for help and contributions on a bunch of things.
-* Alexandros Diamantidis and Maria Adaloglou for help with Greek
- support.
-* Lawrence Lai for help with the CJK Unicode maps.
-
-Various people have contributed modifications made for use by the
-pdftex project:
-
-* Han The Thanh
-* Martin Schröder of ArtCom GmbH
-
-
-References
-----------
-
-Adobe Systems Inc., _PDF Reference, sixth edition: Adobe Portable
-Document Format version 1.7_.
-http://www.adobe.com/devnet/pdf/pdf_reference.html
-[The manual for PDF version 1.7.]
-
-Adobe Systems Inc., "Errata for the PDF Reference, sixth edition,
-version 1.7", October 16, 2006.
-http://www.adobe.com/devnet/pdf/pdf_reference.html
-[The errata for the PDF 1.7 spec.]
-
-Adobe Systems Inc., _PostScript Language Reference_, 3rd ed.
-Addison-Wesley, 1999, ISBN 0-201-37922-8.
-[The official PostScript manual.]
-
-Adobe Systems, Inc., _The Type 42 Font Format Specification_,
-Adobe Developer Support Technical Specification #5012. 1998.
-http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf
-[Type 42 is the format used to embed TrueType fonts in PostScript
-files.]
-
-Adobe Systems, Inc., _Adobe CMap and CIDFont Files Specification_,
-Adobe Developer Support Technical Specification #5014. 1995.
-http://www.adobe.com/supportservice/devrelations/PDFS/TN/5014.CIDFont_Spec.pdf
-[CMap file format needed for Japanese and Chinese font support.]
-
-Adobe Systems, Inc., _Adobe-Japan1-4 Character Collection for
-CID-Keyed Fonts_, Adobe Developer Support Technical Note #5078.
-2000.
-http://partners.adobe.com/asn/developer/PDFS/TN/5078.CID_Glyph.pdf
-[The Adobe Japanese character set.]
-
-Adobe Systems, Inc., _Adobe-GB1-4 Character Collection for
-CID-Keyed Fonts_, Adobe Developer Support Technical Note #5079.
-2000.
-http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf
-[The Adobe Chinese GB (simplified) character set.]
-
-Adobe Systems, Inc., _Adobe-CNS1-3 Character Collection for
-CID-Keyed Fonts_, Adobe Developer Support Technical Note #5080.
-2000.
-http://partners.adobe.com/asn/developer/PDFS/TN/5080.CNS_CharColl.pdf
-[The Adobe Chinese CNS (traditional) character set.]
-
-Adobe Systems Inc., _Supporting the DCT Filters in PostScript Level
-2_, Adobe Developer Support Technical Note #5116. 1992.
-http://www.adobe.com/supportservice/devrelations/PDFS/TN/5116.PS2_DCT.PDF
-[Description of the DCTDecode filter parameters.]
-
-Adobe Systems Inc., _Open Prepress Interface (OPI) Specification -
-Version 2.0_, Adobe Developer Support Technical Note #5660. 2000.
-http://partners.adobe.com/asn/developer/PDFS/TN/5660.OPI_2.0.pdf
-
-Adobe Systems Inc., CMap files.
-ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
-[The actual CMap files for the 16-bit CJK encodings.]
-
-Adobe Systems Inc., Unicode glyph lists.
-http://partners.adobe.com/asn/developer/type/unicodegn.html
-http://partners.adobe.com/asn/developer/type/glyphlist.txt
-http://partners.adobe.com/asn/developer/type/corporateuse.txt
-http://partners.adobe.com/asn/developer/type/zapfdingbats.txt
-[Mappings between character names to Unicode.]
-
-Adobe Systems Inc., OpenType Specification v. 1.4.
-http://partners.adobe.com/public/developer/opentype/index_spec.html
-[The OpenType font format spec.]
-
-Aldus Corp., _OPI: Open Prepress Interface Specification 1.3_. 1993.
-http://partners.adobe.com/asn/developer/PDFS/TN/OPI_13.pdf
-
-Anonymous, RC4 source code.
-ftp://ftp.ox.ac.uk/pub/crypto/misc/rc4.tar.gz
-ftp://idea.sec.dsi.unimi.it/pub/crypt/code/rc4.tar.gz
-[This is the algorithm used to encrypt PDF files.]
-
-T. Boutell, et al., "PNG (Portable Network Graphics) Specification,
-Version 1.0". RFC 2083.
-[PDF uses the PNG filter algorithms.]
-
-CCITT, "Information Technology - Digital Compression and Coding of
-Continuous-tone Still Images - Requirements and Guidelines", CCITT
-Recommendation T.81.
-http://www.w3.org/Graphics/JPEG/
-[The official JPEG spec.]
-
-A. Chernov, "Registration of a Cyrillic Character Set". RFC 1489.
-[Documentation for the KOI8-R Cyrillic encoding.]
-
-Roman Czyborra, "The ISO 8859 Alphabet Soup".
-http://czyborra.com/charsets/iso8859.html
-[Documentation on the various ISO 859 encodings.]
-
-L. Peter Deutsch, "ZLIB Compressed Data Format Specification version
-3.3". RFC 1950.
-[Information on the general format used in FlateDecode streams.]
-
-L. Peter Deutsch, "DEFLATE Compressed Data Format Specification
-version 1.3". RFC 1951.
-[The definition of the compression algorithm used in FlateDecode
-streams.]
-
-Morris Dworkin, "Recommendation for Block Cipher Modes of Operation",
-National Institute of Standards, NIST Special Publication 800-38A,
-2001.
-[The cipher block chaining (CBC) mode used with AES in PDF files.]
-
-Federal Information Processing Standards Publication 197 (FIPS PUBS
-197), "Advanced Encryption Standard (AES)", November 26, 2001.
-[AES encryption, used in PDF 1.6.]
-
-Jim Flowers, "X Logical Font Description Conventions", Version 1.5, X
-Consortium Standard, X Version 11, Release 6.1.
-ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XLFD/xlfd.PS.Z
-[The official specification of X font descriptors, including font
-transformation matrices.]
-
-Foley, van Dam, Feiner, and Hughes, _Computer Graphics: Principles and
-Practice_, 2nd ed. Addison-Wesley, 1990, ISBN 0-201-12110-7.
-[Colorspace conversion functions, Bezier spline math.]
-
-Robert L. Hummel, _Programmer's Technical Reference: Data and Fax
-Communications_. Ziff-Davis Press, 1993, ISBN 1-56276-077-7.
-[CCITT Group 3 and 4 fax decoding.]
-
-ISO/IEC, _Information technology -- Lossy/lossless coding of bi-level
-images_. ISO/IEC 14492, First edition (2001-12-15).
-http://webstore.ansi.org/
-[The official JBIG2 standard. The final draft of this spec is
-available from http://www.jpeg.org/jbighomepage.html.]
-
-ISO/IEC, _Information technology -- JPEG 2000 image coding system --
-Part 1: Core coding system_. ISO/IEC 15444-1, First edition
-(2000-12-15).
-http://webstore.ansi.org/
-[The official JPEG 2000 standard. The final committee draft of this
-spec is available from http://www.jpeg.org/JPEG2000.html, but there
-were changes made to the bitstream format between that draft and the
-published spec.]
-
-ITU, "Standardization of Group 3 facsimile terminals for document
-transmission", ITU-T Recommendation T.4, 1999.
-ITU, "Facsimile coding schemes and coding control functions for Group 4
-facsimile apparatus", ITU-T Recommendation T.6, 1993.
-http://www.itu.int/
-[The official Group 3 and 4 fax standards - used by the CCITTFaxDecode
-stream, as well as the JBIG2Decode stream.]
-
-B. Kaliski, "PKCS #5: Password-Based Cryptography Specification,
-Version 2.0". RFC 2898.
-[Defines the padding scheme used with AES encryption in PDF files.]
-
-Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, "Practical
-Fast 1-D DCT Algorithms with 11 Multiplications". IEEE Intl. Conf. on
-Acoustics, Speech & Signal Processing, 1989, 988-991.
-[The fast IDCT algorithm used in the DCTDecode filter.]
-
-Microsoft, _TrueType 1.0 Font Files_, rev. 1.66. 1995.
-http://www.microsoft.com/typography/tt/tt.htm
-[The TrueType font spec (in MS Word format, naturally).]
-
-V. Ostromoukhov, R.D. Hersch, "Stochastic Clustered-Dot Dithering",
-Conf. Color Imaging: Device-Independent Color, Color Hardcopy, and
-Graphic Arts IV, 1999, SPIE Vol. 3648, 496-505.
-http://diwww.epfl.ch/w3lsp/publications/colour/scd.html
-[The stochastic dithering algorithm used in Xpdf.]
-
-P. Peterlin, "ISO 8859-2 (Latin 2) Resources".
-http://sizif.mf.uni-lj.si/linux/cee/iso8859-2.html
-[This is a web page with all sorts of useful Latin-2 character set and
-font information.]
-
-Charles Poynton, "Color FAQ".
-http://www.inforamp.net/~poynton/ColorFAQ.html
-[The mapping from the CIE 1931 (XYZ) color space to RGB.]
-
-R. Rivest, "The MD5 Message-Digest Algorithm". RFC 1321.
-[MD5 is used in PDF document encryption.]
-
-Thai Industrial Standard, "Standard for Thai Character Codes for
-Computers", TIS-620-2533 (1990).
-http://www.nectec.or.th/it-standards/std620/std620.htm
-[The TIS-620 Thai encoding.]
-
-Unicode Consortium, "Unicode Home Page".
-http://www.unicode.org/
-[Online copy of the Unicode spec.]
-
-W3C Recommendation, "PNG (Portable Network Graphics) Specification
-Version 1.0".
-http://www.w3.org/Graphics/PNG/
-[Defines the PNG image predictor.]
-
-Gregory K. Wallace, "The JPEG Still Picture Compression Standard".
-ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz
-[Good description of the JPEG standard. Also published in CACM, April
-1991, and submitted to IEEE Transactions on Consumer Electronics.]
-
-F. Yergeau, "UTF-8, a transformation format of ISO 10646". RFC 2279.
-[A commonly used Unicode encoding.]
diff --git a/Build/source/libs/xpdf/ac/withenable.ac b/Build/source/libs/xpdf/ac/withenable.ac
deleted file mode 100644
index 84f89f7d835..00000000000
--- a/Build/source/libs/xpdf/ac/withenable.ac
+++ /dev/null
@@ -1,3 +0,0 @@
-## libs/xpdf/ac/withenable.ac
-## configure options and TL libraries required for xpdf
-KPSE_WITH_LIB([xpdf], , [tree])
diff --git a/Build/source/libs/xpdf/acinclude.m4 b/Build/source/libs/xpdf/acinclude.m4
deleted file mode 100644
index 88d388800f9..00000000000
--- a/Build/source/libs/xpdf/acinclude.m4
+++ /dev/null
@@ -1,274 +0,0 @@
-# <<< smr.m4 from smr_macros 0.2.4 >>>
-
-dnl ####################### -*- Mode: M4 -*- ###########################
-dnl smr.m4 --
-dnl
-dnl Copyright (C) 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
-dnl Copyright (C) 1998 Steve Robbins <stever@cs.mcgill.ca>
-dnl
-dnl This file is free software; you can redistribute it and/or modify it
-dnl under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2 of the License, or
-dnl (at your option) any later version.
-dnl
-dnl This file is distributed in the hope that it will be useful, but
-dnl WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-dnl General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this file; if not, write to:
-dnl
-dnl Free Software Foundation, Inc.
-dnl Suite 330
-dnl 59 Temple Place
-dnl Boston, MA 02111-1307, USA.
-dnl ####################################################################
-
-
-dnl NOTE: The macros in this file are extensively documented in the
-dnl accompanying `smr_macros.texi' Texinfo file. Please see the
-dnl Texinfo documentation for the definitive specification of how
-dnl these macros are supposed to work. If the macros work
-dnl differently than the Texinfo documentation says they should,
-dnl then the macros (and not the Texinfo documentation) has the
-dnl bug(s).
-
-dnl This is a convenient macro which translates illegal characters for
-dnl bourne shell variables into legal characters. It has the same
-dnl functionality as sed 'y%./+-:%__p__%'.
-AC_DEFUN([smr_safe_translation], [patsubst(patsubst([$1], [+], [p]), [./-:], [_])])
-
-AC_DEFUN([smr_SWITCH],
-[
- dnl Define convenient aliases for the arguments since there are so
- dnl many of them and I keep confusing myself whenever I have to edit
- dnl this macro.
- pushdef([smr_name], $1)
- pushdef([smr_help_string], $2)
- pushdef([smr_default], $3)
- pushdef([smr_yes_define], $4)
- pushdef([smr_no_define], $5)
-
- dnl Do some sanity checking of the arguments.
- ifelse([regexp(smr_default, [^\(yes\|no\)$])], -1, [AC_MSG_ERROR($0: third arg must be either yes or no)])
-
- dnl Create the help string
- pushdef([smr_lhs], [--ifelse(smr_default, yes, disable, enable)-smr_name])dnl
- pushdef([smr_rhs], [ifelse(smr_default, yes, disable, enable) smr_help_string (default is smr_default)])dnl
-
- dnl Add the option to `configure --help'. We don't need to supply the
- dnl 4th argument to AC_ARG_ENABLE (i.e. the code to set the default
- dnl value) because that is done below by AC_CACHE_CHECK.
- AC_ARG_ENABLE([smr_name],
- AC_HELP_STRING([smr_lhs], [smr_rhs]),
- smr_cv_enable_[]smr_name=$enableval)
-
- dnl We cache the result so that the user doesn't have to remember
- dnl which flags they passed to `configure'.
- AC_CACHE_CHECK([whether to enable smr_help_string],
- smr_cv_enable_[]smr_name,
- smr_cv_enable_[]smr_name=smr_default)
-
- ifelse(smr_yes_define, , , test x"[$]smr_cv_enable_[]smr_name" = xyes && AC_DEFINE(smr_yes_define))
- ifelse(smr_no_define, , , test x"[$]smr_cv_enable_[]smr_name" = xno && AC_DEFINE(smr_no_define))
-
- dnl Sanity check the value assigned to smr_cv_enable_$1 to force it to
- dnl be either `yes' or `no'.
- if test ! x"[$]smr_cv_enable_[]smr_name" = xyes; then
- if test ! x"[$]smr_cv_enable_[]smr_name" = xno; then
- AC_MSG_ERROR([smr_lhs must be either yes or no])
- fi
- fi
-
- popdef([smr_name])
- popdef([smr_help_string])
- popdef([smr_default])
- popdef([smr_yes_define])
- popdef([smr_no_define])
- popdef([smr_lhs])
- popdef([smr_rhs])
-])
-
-
-AC_DEFUN([smr_ARG_WITHLIB],
-[
- dnl Define convenient aliases for the arguments since there are so
- dnl many of them and I keep confusing myself whenever I have to edit
- dnl this macro.
- pushdef([smr_name], $1)
- pushdef([smr_libname], ifelse($2, , smr_name, $2))
- pushdef([smr_help_string], $3)
- pushdef([smr_safe_name], smr_safe_translation(smr_name))
-
- dnl Add the option to `configure --help'. We don't need to supply the
- dnl 4th argument to AC_ARG_WITH (i.e. the code to set the default
- dnl value) because that is done below by AC_CACHE_CHECK.
- AC_ARG_WITH(smr_safe_name-library,
- AC_HELP_STRING([--with-smr_safe_name-library[[=PATH]]],
- [use smr_name library ifelse(smr_help_string, , , (smr_help_string))]),
- smr_cv_with_[]smr_safe_name[]_library=$withval)
-
- dnl We cache the result so that the user doesn't have to remember
- dnl which flags they passed to `configure'.
- AC_CACHE_CHECK([whether to use smr_name library],
- smr_cv_with_[]smr_safe_name[]_library,
- smr_cv_with_[]smr_safe_name[]_library=maybe)
-
-
- case x"[$]smr_cv_with_[]smr_safe_name[]_library" in
- xyes | xmaybe)
- smr_safe_name[]_LIBS="-l[]smr_libname"
- with_[]smr_safe_name=[$]smr_cv_with_[]smr_safe_name[]_library
- ;;
- xno)
- smr_safe_name[]_LIBS=
- with_[]smr_safe_name=no
- ;;
- *)
- if test -f "[$]smr_cv_with_[]smr_safe_name[]_library"; then
- smr_safe_name[]_LIBS=[$]smr_cv_with_[]smr_safe_name[]_library
- elif test -d "[$]smr_cv_with_[]smr_safe_name[]_library"; then
- smr_safe_name[]_LIBS="-L[$]smr_cv_with_[]smr_safe_name[]_library -l[]smr_libname"
- else
- AC_MSG_ERROR([argument must be boolean, file, or directory])
- fi
- with_[]smr_safe_name=yes
- ;;
- esac
-
- popdef([smr_name])
- popdef([smr_libname])
- popdef([smr_help_string])
- popdef([smr_safe_name])
-])
-
-
-AC_DEFUN([smr_ARG_WITHINCLUDES],
-[
- dnl Define convenient aliases for the arguments since there are so
- dnl many of them and I keep confusing myself whenever I have to edit
- dnl this macro.
- pushdef([smr_name], $1)
- pushdef([smr_header], $2)
- pushdef([smr_extra_flags], $3)
- pushdef([smr_safe_name], smr_safe_translation(smr_name))
-
- dnl Add the option to `configure --help'. We don't need to supply the
- dnl 4th argument to AC_ARG_WITH (i.e. the code to set the default
- dnl value) because that is done below by AC_CACHE_CHECK.
- AC_ARG_WITH(smr_safe_name-includes,
- AC_HELP_STRING([--with-smr_safe_name-includes[[=DIR]]],
- [set directory for smr_name headers]),
- smr_cv_with_[]smr_safe_name[]_includes=$withval)
-
- dnl We cache the result so that the user doesn't have to remember
- dnl which flags they passed to `configure'.
- AC_CACHE_CHECK([where to find the smr_name header files],
- smr_cv_with_[]smr_safe_name[]_includes,
- smr_cv_with_[]smr_safe_name[]_includes=)
-
- if test ! x"[$]smr_cv_with_[]smr_safe_name[]_includes" = x; then
- if test -d "[$]smr_cv_with_[]smr_safe_name[]_includes"; then
- smr_safe_name[]_CFLAGS="-I[$]smr_cv_with_[]smr_safe_name[]_includes"
- else
- AC_MSG_ERROR([argument must be a directory])
- fi
- else
- smr_safe_name[]_CFLAGS=
- fi
-
- dnl This bit of logic comes from the autoconf AC_PROG_CC macro. We
- dnl need to put the given include directory into CPPFLAGS temporarily,
- dnl but then restore CPPFLAGS to its old value.
- smr_test_CPPFLAGS="${CPPFLAGS+set}"
- smr_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS [$]smr_safe_name[]_CFLAGS smr_extra_flags"
-
- dnl If the header file smr_header exists, then define
- dnl HAVE_[]smr_header (in all capitals).
- AC_CHECK_HEADERS([smr_header],
- smr_have_[]smr_safe_name[]_header=yes,
- smr_have_[]smr_safe_name[]_header=no)
-
- if test x"$smr_test_CPPFLAGS" = xset; then
- CPPFLAGS=$smr_save_CPPFLAGS
- else
- unset CPPFLAGS
- fi
-
- popdef([smr_name])
- popdef([smr_header])
- popdef([smr_extra_flags])
- popdef([smr_safe_name])
-])
-
-
-AC_DEFUN([smr_CHECK_LIB],
-[
- dnl Define convenient aliases for the arguments since there are so
- dnl many of them and I keep confusing myself whenever I have to edit
- dnl this macro.
- pushdef([smr_name], $1)
- pushdef([smr_libname], ifelse($2, , smr_name, $2))
- pushdef([smr_help_string], $3)
- pushdef([smr_function], $4)
- pushdef([smr_header], $5)
- pushdef([smr_extra_libs], $6)
- pushdef([smr_extra_flags], $7)
- pushdef([smr_prototype], $8)
- pushdef([smr_safe_name], smr_safe_translation(smr_name))
-
- dnl Give the user (via "configure --help") an interface to specify
- dnl whether we should use the library or not, and possibly where we
- dnl should find it.
- smr_ARG_WITHLIB([smr_name], [smr_libname], [smr_help_string])
-
- if test ! x"$with_[]smr_safe_name" = xno; then
-
- # If we got this far, then the user didn't explicitly ask not to use
- # the library.
-
- dnl If the caller of smr_CHECK_LIB specified a header file for this
- dnl library, then give the user (via "configure --help") an
- dnl interface to specify where this header file can be found (if it
- dnl isn't found by the compiler by default).
- ifelse(smr_header, , , [smr_ARG_WITHINCLUDES(smr_name, smr_header, smr_extra_flags)])
-
- # We need only look for the library if the header has been found
- # (or no header is needed).
- if test [$]smr_have_[]smr_safe_name[]_header != no; then
-
- AC_CHECK_LIB(smr_libname,
- smr_function,
- smr_have_[]smr_safe_name[]_library=yes,
- smr_have_[]smr_safe_name[]_library=no,
- [$]smr_safe_name[]_CFLAGS [smr_extra_flags] [$]smr_safe_name[]_LIBS [smr_extra_libs],
- [ifelse(smr_prototype, , , [[#]include <smr_header>])],
- smr_prototype)
- fi
-
- if test x"[$]smr_have_[]smr_safe_name[]_library" = xyes; then
- AC_MSG_RESULT([using smr_name library])
- else
- smr_safe_name[]_LIBS=
- smr_safe_name[]_CFLAGS=
-
- if test x"$with_[]smr_safe_name" = xmaybe; then
- AC_MSG_RESULT([not using smr_name library])
- else
- AC_MSG_WARN([requested smr_name library not found!])
- fi
- fi
- fi
-
- popdef([smr_name])
- popdef([smr_libname])
- popdef([smr_help_string])
- popdef([smr_function])
- popdef([smr_header])
- popdef([smr_extra_libs])
- popdef([smr_extra_flags])
- popdef([smr_prototype])
- popdef([smr_safe_name])
-])
diff --git a/Build/source/libs/xpdf/aclocal.m4 b/Build/source/libs/xpdf/aclocal.m4
deleted file mode 100644
index f96d644b7f5..00000000000
--- a/Build/source/libs/xpdf/aclocal.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_include([../../texk/m4/kpse_inc.m4])
-m4_include([acinclude.m4])
diff --git a/Build/source/libs/xpdf/aconf-dj.h b/Build/source/libs/xpdf/aconf-dj.h
deleted file mode 100644
index fa92df3b2b4..00000000000
--- a/Build/source/libs/xpdf/aconf-dj.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * aconf-dj.h
- *
- * Copyright 2002-2003 Glyph & Cog, LLC
- */
-
-#ifndef ACONF_H
-#define ACONF_H
-
-/*
- * Use A4 paper size instead of Letter for PostScript output.
- */
-#undef A4_PAPER
-
-/*
- * Do not allow text selection.
- */
-#undef NO_TEXT_SELECT
-
-/*
- * Include support for OPI comments.
- */
-#undef OPI_SUPPORT
-
-/*
- * Directory with the Xpdf app-defaults file.
- */
-#undef APPDEFDIR
-
-/*
- * Full path for the system-wide xpdfrc file.
- */
-#undef SYSTEM_XPDFRC
-
-/*
- * Various include files and functions.
- */
-#define HAVE_DIRENT_H 1
-#undef HAVE_SYS_NDIR_H
-#undef HAVE_SYS_DIR_H
-#undef HAVE_NDIR_H
-#undef HAVE_SYS_SELECT_H
-#undef HAVE_SYS_BSDTYPES_H
-#undef HAVE_STRINGS_H
-#undef HAVE_BSTRING_H
-#define HAVE_POPEN 1
-#undef HAVE_MKSTEMP
-#undef SELECT_TAKES_INT
-#undef HAVE_FSEEK64
-
-/*
- * This is defined if using libXpm.
- */
-#undef HAVE_X11_XPM_H
-
-/*
- * This is defined if using t1lib.
- */
-#undef HAVE_T1LIB_H
-
-/*
- * One of these is defined if using FreeType (version 1 or 2).
- */
-#undef HAVE_FREETYPE_H
-#undef HAVE_FREETYPE_FREETYPE_H
-
-/*
- * This is defined if using FreeType version 2.
- */
-#undef FREETYPE2
-
-/*
- * This is defined if using libpaper.
- */
-#undef HAVE_PAPER_H
-
-#endif
diff --git a/Build/source/libs/xpdf/aconf-win32.h b/Build/source/libs/xpdf/aconf-win32.h
deleted file mode 100644
index 0bdc7636623..00000000000
--- a/Build/source/libs/xpdf/aconf-win32.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * aconf-win32.h
- *
- * Copyright 2002-2003 Glyph & Cog, LLC
- */
-
-#ifndef ACONF_H
-#define ACONF_H
-
-#include <aconf2.h>
-
-/*
- * Use A4 paper size instead of Letter for PostScript output.
- */
-#undef A4_PAPER
-
-/*
- * Do not allow text selection.
- */
-#undef NO_TEXT_SELECT
-
-/*
- * Include support for OPI comments.
- */
-#undef OPI_SUPPORT
-
-/*
- * Enable multithreading support.
- */
-#define MULTITHREADED 1
-
-/*
- * Enable C++ exceptions.
- */
-#define USE_EXCEPTIONS 1
-
-/*
- * Enable word list support.
- */
-#undef TEXTOUT_WORD_LIST
-
-/*
- * Use fixed point (instead of floating point) arithmetic.
- */
-#undef USE_FIXEDPOINT
-
-/*
- * Directory with the Xpdf app-defaults file.
- */
-#undef APPDEFDIR
-
-/*
- * Full path for the system-wide xpdfrc file.
- */
-#undef SYSTEM_XPDFRC
-
-/*
- * Various include files and functions.
- */
-#undef HAVE_DIRENT_H
-#undef HAVE_SYS_NDIR_H
-#undef HAVE_SYS_DIR_H
-#undef HAVE_NDIR_H
-#undef HAVE_SYS_SELECT_H
-#undef HAVE_SYS_BSDTYPES_H
-#undef HAVE_STRINGS_H
-#undef HAVE_BSTRING_H
-#undef HAVE_POPEN
-#undef HAVE_MKSTEMP
-#undef HAVE_MKSTEMPS
-#undef SELECT_TAKES_INT
-#undef HAVE_FSEEKO
-#undef HAVE_FSEEK64
-#undef _FILE_OFFSET_BITS
-#undef _LARGE_FILES
-#undef _LARGEFILE_SOURCE
-#undef HAVE_XTAPPSETEXITFLAG
-
-/*
- * This is defined if using libXpm.
- */
-#undef HAVE_X11_XPM_H
-
-/*
- * This is defined if using t1lib.
- */
-#undef HAVE_T1LIB_H
-
-/*
- * One of these is defined if using FreeType (version 1 or 2).
- */
-#undef HAVE_FREETYPE_H
-#define HAVE_FREETYPE_FREETYPE_H 1
-
-/*
- * This is defined if using FreeType version 2.
- */
-#define FREETYPE2
-
-/*
- * This is defined if using libpaper.
- */
-#undef HAVE_PAPER_H
-
-/*
- * Enable support for loading plugins.
- */
-#undef ENABLE_PLUGINS
-
-/*
- * Defined if the Splash library is avaiable.
- */
-#undef HAVE_SPLASH
-
-/*
- * Enable support for CMYK output.
- */
-#undef SPLASH_CMYK
-
-#endif
diff --git a/Build/source/libs/xpdf/aconf.h.in b/Build/source/libs/xpdf/aconf.h.in
deleted file mode 100644
index b6c63518f53..00000000000
--- a/Build/source/libs/xpdf/aconf.h.in
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * aconf.h
- *
- * Copyright 2002-2003 Glyph & Cog, LLC
- */
-
-#ifndef ACONF_H
-#define ACONF_H
-
-#include <aconf2.h>
-
-/*
- * Use A4 paper size instead of Letter for PostScript output.
- */
-#undef A4_PAPER
-
-/*
- * Do not allow text selection.
- */
-#undef NO_TEXT_SELECT
-
-/*
- * Include support for OPI comments.
- */
-#undef OPI_SUPPORT
-
-/*
- * Enable multithreading support.
- */
-#undef MULTITHREADED
-
-/*
- * Enable C++ exceptions.
- */
-#undef USE_EXCEPTIONS
-
-/*
- * Enable word list support.
- */
-#undef TEXTOUT_WORD_LIST
-
-/*
- * Use fixed point (instead of floating point) arithmetic.
- */
-#undef USE_FIXEDPOINT
-
-/*
- * Directory with the Xpdf app-defaults file.
- */
-#undef APPDEFDIR
-
-/*
- * Full path for the system-wide xpdfrc file.
- */
-#undef SYSTEM_XPDFRC
-
-/*
- * Various include files and functions.
- */
-#undef HAVE_DIRENT_H
-#undef HAVE_SYS_NDIR_H
-#undef HAVE_SYS_DIR_H
-#undef HAVE_NDIR_H
-#undef HAVE_SYS_SELECT_H
-#undef HAVE_SYS_BSDTYPES_H
-#undef HAVE_STRINGS_H
-#undef HAVE_BSTRING_H
-#undef HAVE_POPEN
-#undef HAVE_MKSTEMP
-#undef HAVE_MKSTEMPS
-#undef SELECT_TAKES_INT
-#undef HAVE_FSEEKO
-#undef HAVE_FSEEK64
-#undef _FILE_OFFSET_BITS
-#undef _LARGE_FILES
-#undef _LARGEFILE_SOURCE
-#undef HAVE_XTAPPSETEXITFLAG
-
-/*
- * This is defined if using libXpm.
- */
-#undef HAVE_X11_XPM_H
-
-/*
- * This is defined if using t1lib.
- */
-#undef HAVE_T1LIB_H
-
-/*
- * One of these is defined if using FreeType 2.
- */
-#undef HAVE_FREETYPE_H
-#undef HAVE_FREETYPE_FREETYPE_H
-
-/*
- * This is defined if using libpaper.
- */
-#undef HAVE_PAPER_H
-
-/*
- * Enable support for loading plugins.
- */
-#undef ENABLE_PLUGINS
-
-/*
- * Defined if the Splash library is avaiable.
- */
-#undef HAVE_SPLASH
-
-/*
- * Enable support for CMYK output.
- */
-#undef SPLASH_CMYK
-
-#endif
diff --git a/Build/source/libs/xpdf/aconf2.h b/Build/source/libs/xpdf/aconf2.h
deleted file mode 100644
index b51de1e9cb6..00000000000
--- a/Build/source/libs/xpdf/aconf2.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * aconf2.h
- *
- * This gets included by aconf.h, and contains miscellaneous global
- * settings not directly controlled by autoconf. This is a separate
- * file because otherwise the configure script will munge any
- * #define/#undef constructs.
- *
- * Copyright 2002-2003 Glyph & Cog, LLC
- */
-
-#ifndef ACONF2_H
-#define ACONF2_H
-
-/*
- * This controls the use of the interface/implementation pragmas.
- */
-#ifdef __GNUC__
-#define USE_GCC_PRAGMAS
-#endif
-/* There is a bug in the version of gcc which ships with MacOS X 10.2 */
-#if defined(__APPLE__) && defined(__MACH__)
-# include <AvailabilityMacros.h>
-#endif
-#ifdef MAC_OS_X_VERSION_MAX_ALLOWED
-# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2
-# undef USE_GCC_PRAGMAS
-# endif
-#endif
-
-/*
- * Make sure WIN32 is defined if appropriate.
- */
-#if defined(_WIN32) && !defined(WIN32)
-# define WIN32
-#endif
-
-#endif
diff --git a/Build/source/libs/xpdf/configure b/Build/source/libs/xpdf/configure
deleted file mode 100755
index 294636ec35c..00000000000
--- a/Build/source/libs/xpdf/configure
+++ /dev/null
@@ -1,5576 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell bug-autoconf@gnu.org about your system,
- echo including any error possibly output before this message.
- echo This can help us improve future autoconf versions.
- echo Configuration will now proceed without shell functions.
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="xpdf/Array.cc"
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-ARFLAGS
-AR
-RANLIB
-ac_ct_CXX
-CXXFLAGS
-CXX
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_a4_paper
-enable_opi
-enable_multithreaded
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CXX
-CXXFLAGS
-CCC'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
- { (exit 1); exit 1; }; }
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
- { (exit 1); exit 1; }; } ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { $as_echo "$as_me: error: working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-a4-paper use A4 paper size instead of Letter for
- PostScript output
- --enable-opi include support for OPI comments
- --enable-multithreaded include support for multithreading
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.63
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_aux_dir=
-for ac_dir in ../../config "$srcdir"/../../config; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ../../config \"$srcdir\"/../../config" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in ../../config \"$srcdir\"/../../config" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-ac_config_headers="$ac_config_headers aconf.h"
-
-
-# Check whether --enable-a4-paper was given.
-if test "${enable_a4_paper+set}" = set; then
- enableval=$enable_a4_paper; cat >>confdefs.h <<\_ACEOF
-#define A4_PAPER 1
-_ACEOF
-
-fi
-
-# Check whether --enable-opi was given.
-if test "${enable_opi+set}" = set; then
- enableval=$enable_opi; cat >>confdefs.h <<\_ACEOF
-#define OPI_SUPPORT 1
-_ACEOF
-
-fi
-
-# Check whether --enable-multithreaded was given.
-if test "${enable_multithreaded+set}" = set; then
- enableval=$enable_multithreaded; cat >>confdefs.h <<\_ACEOF
-#define MULTITHREADED 1
-_ACEOF
-
-fi
-
-
-if test "$sysconfdir" = '${prefix}/etc'; then
- if test "x$prefix" = xNONE; then
- system_xpdfrc="$ac_default_prefix/etc/xpdfrc"
- else
- system_xpdfrc="$prefix/etc/xpdfrc"
- fi
-else
- system_xpdfrc="$sysconfdir/xpdfrc"
-fi
-cat >>confdefs.h <<_ACEOF
-#define SYSTEM_XPDFRC "$system_xpdfrc"
-_ACEOF
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:$LINENO: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
- fi
- fi
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:$LINENO: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5
-$as_echo_n "checking for library containing strerror... " >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strerror ();
-int
-main ()
-{
-return strerror ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' cposix; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_search_strerror=$ac_res
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_strerror+set}" = set; then
- break
-fi
-done
-if test "${ac_cv_search_strerror+set}" = set; then
- :
-else
- ac_cv_search_strerror=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
-$as_echo "$ac_cv_search_strerror" >&6; }
-ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-(
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:$LINENO: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cxx_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CXXFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cxx_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-) && {
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:$LINENO: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cxx_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CXXFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cxx_g=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-} || {
- { $as_echo "$as_me:$LINENO: WARNING: No C++ compiler: xpdf can not be compiled." >&5
-$as_echo "$as_me: WARNING: No C++ compiler: xpdf can not be compiled." >&2;}
- true
-}
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-{ $as_echo "$as_me:$LINENO: checking for archiver (symbol AR)" >&5
-$as_echo_n "checking for archiver (symbol AR)... " >&6; }
-if test "${cf_cv_subst_AR+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$AR" && AR=ar
-cf_cv_subst_AR=$AR
-fi
-
-AR=${cf_cv_subst_AR}
-{ $as_echo "$as_me:$LINENO: result: $AR" >&5
-$as_echo "$AR" >&6; }
-
-
-{ $as_echo "$as_me:$LINENO: checking for archiver options (symbol ARFLAGS)" >&5
-$as_echo_n "checking for archiver options (symbol ARFLAGS)... " >&6; }
-if test "${cf_cv_subst_ARFLAGS+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
-
-test -z "$ARFLAGS" && ARFLAGS=rc
-cf_cv_subst_ARFLAGS=$ARFLAGS
-fi
-
-ARFLAGS=${cf_cv_subst_ARFLAGS}
-{ $as_echo "$as_me:$LINENO: result: $ARFLAGS" >&5
-$as_echo "$ARFLAGS" >&6; }
-
-
-
-
-
-
-
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
- as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_Header'}
- $as_echo "$as_val"'`
- if test "x$as_val" = x""yes; then
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-_ACEOF
-
-ac_header_dirent=$ac_hdr; break
-fi
-
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
- { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if test "${ac_cv_search_opendir+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' dir; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_search_opendir=$ac_res
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_opendir+set}" = set; then
- break
-fi
-done
-if test "${ac_cv_search_opendir+set}" = set; then
- :
-else
- ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-else
- { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if test "${ac_cv_search_opendir+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' x; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- ac_cv_search_opendir=$ac_res
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_opendir+set}" = set; then
- break
-fi
-done
-if test "${ac_cv_search_opendir+set}" = set; then
- :
-else
- ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-fi
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-{ $as_echo "$as_me:$LINENO: checking for mkstemp" >&5
-$as_echo_n "checking for mkstemp... " >&6; }
-if test "${xpdf_cv_func_mkstemp+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <unistd.h>
-int
-main ()
-{
-mkstemp("foo");
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- xpdf_cv_func_mkstemp=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- xpdf_cv_func_mkstemp=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_func_mkstemp" >&5
-$as_echo "$xpdf_cv_func_mkstemp" >&6; }
-if test "$xpdf_cv_func_mkstemp" = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_MKSTEMP 1
-_ACEOF
-
-fi
-{ $as_echo "$as_me:$LINENO: checking for mkstemps" >&5
-$as_echo_n "checking for mkstemps... " >&6; }
-if test "${xpdf_cv_func_mkstemps+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <unistd.h>
-int
-main ()
-{
-mkstemps("foo", 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then
- xpdf_cv_func_mkstemps=yes
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- xpdf_cv_func_mkstemps=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_func_mkstemps" >&5
-$as_echo "$xpdf_cv_func_mkstemps" >&6; }
-if test "$xpdf_cv_func_mkstemps" = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_MKSTEMPS 1
-_ACEOF
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_config_files="$ac_config_files Makefile"
-
-ac_config_files="$ac_config_files xpdf/Makefile.aux:xpdf/Makefile.in"
-ac_config_files="$ac_config_files xpdf/Makefile:xpdf/Makefile.aux"
-ac_config_files="$ac_config_files goo/Makefile.aux:goo/Makefile.in"
-ac_config_files="$ac_config_files goo/Makefile:goo/Makefile.aux"
-ac_config_files="$ac_config_files fofi/Makefile.aux:fofi/Makefile.in"
-ac_config_files="$ac_config_files fofi/Makefile:fofi/Makefile.aux"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# Save the log message, to keep $[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.63. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTION]... [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.63,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- { $as_echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "aconf.h") CONFIG_HEADERS="$CONFIG_HEADERS aconf.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "xpdf/Makefile.aux") CONFIG_FILES="$CONFIG_FILES xpdf/Makefile.aux:xpdf/Makefile.in" ;;
- "xpdf/Makefile") CONFIG_FILES="$CONFIG_FILES xpdf/Makefile:xpdf/Makefile.aux" ;;
- "goo/Makefile.aux") CONFIG_FILES="$CONFIG_FILES goo/Makefile.aux:goo/Makefile.in" ;;
- "goo/Makefile") CONFIG_FILES="$CONFIG_FILES goo/Makefile:goo/Makefile.aux" ;;
- "fofi/Makefile.aux") CONFIG_FILES="$CONFIG_FILES fofi/Makefile.aux:fofi/Makefile.in" ;;
- "fofi/Makefile") CONFIG_FILES="$CONFIG_FILES fofi/Makefile:fofi/Makefile.aux" ;;
-
- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- $as_echo "$as_me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=' '
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
- { (exit 1); exit 1; }; }
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
- break
- elif $ac_last_try; then
- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
- { (exit 1); exit 1; }; }
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
-$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- ac_file_inputs="$ac_file_inputs '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; } ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
- esac \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$tmp/config.h" "$ac_file" \
- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
- { (exit 1); exit 1; }; }
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
-$as_echo "$as_me: error: could not create -" >&2;}
- { (exit 1); exit 1; }; }
- fi
- ;;
-
-
- esac
-
-
- case $ac_file$ac_mode in
- "xpdf/Makefile.aux":F) # Discard the file just generated and first resolve kpse_include's
- kpse_input=`case xpdf/Makefile.in in
- [\\/$]*) # Absolute
- test -f "xpdf/Makefile.in" || { { $as_echo "$as_me:$LINENO: error: cannot find input file: xpdf/Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: xpdf/Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- echo "xpdf/Makefile.in";;
- *) # Relative
- if test -f "xpdf/Makefile.in"; then
- # Build tree
- echo "xpdf/Makefile.in"
- elif test -f "$srcdir/xpdf/Makefile.in"; then
- # Source tree
- echo "$srcdir/xpdf/Makefile.in"
- else
- # /dev/null tree
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: xpdf/Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: xpdf/Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac` || { (exit 1); exit 1; }
-# Replace lines of the form "kpse_include foo" with the contents of foo:
-# first, from the kpse_include lines construct a list of file names.
-# From that list, we construct a second list of those files that exist.
-# Then we construct a list of sed commands for including those files,
-# and a sed command that removes the kpse_include lines. We don't attempt
-# to read non-existent files because some (buggy) versions of sed choke
-# on this. Have to use sed because old (Ultrix, SunOs) awk does not support
-# getline or system. (Anyway, configure scripts aren't supposed to use awk.)
-# Can't use only one -e and commands {dr foo} because foo has to be last.
-# Be careful, because the filename may contain /.
-# Be careful with whitespace; we need to use echo.
-kpse_file_substs=`sed -n '/^kpse_include/s%[ ]*\(.*\)%\1%p' "$kpse_input"`
-if test x"$kpse_file_substs" = x; then
- { $as_echo "$as_me:$LINENO: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`xpdf/Makefile.in'
- without any \`kpse_include' directives" >&5
-$as_echo "$as_me: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`xpdf/Makefile.in'
- without any \`kpse_include' directives" >&2;}
-fi
-# Create the sed command line ...
-# Input lines containing "@configure_input@" are output twice,
-# first with our modifications and then unmodified.
-kpse_substs="sed -e '/@configure_input@/ { h; \
- s,@configure_input@,xpdf/Makefile.aux. Generated from `echo xpdf/Makefile.in |
- sed 's,.*/,,'` by configure.,; G; }'"
-for kpse_inc in $kpse_file_substs; do
- kpse_read=`case $kpse_inc in
- [\\/$]*) # Absolute
- if test -f "$kpse_inc"; then
- echo "$kpse_inc"
- fi;;
- *) # Relative
- if test -f "$kpse_inc"; then
- # Build tree
- echo "$kpse_inc"
- elif test -f "$srcdir/$kpse_inc"; then
- # Source tree
- echo "$srcdir/$kpse_inc"
- fi;;
- esac`
- if test -n "$kpse_read"; then
- kpse_mung=`echo $kpse_inc | sed 's,/,%,g'`
- kpse_substs="$kpse_substs -e '/^kpse_include $kpse_mung$/r $kpse_read'"
- fi
-done
-# ... and fix the whitespace and escaped slashes.
-kpse_substs=`echo "$kpse_substs" | sed -e 's,%,\\\/,g' \
- -e 's/kpse_include /kpse_include[ ]*/g'`
-(eval $kpse_substs -e '"/^kpse_include/d"' "$kpse_input") > xpdf/Makefile.aux
- ;;
- "goo/Makefile.aux":F) # Discard the file just generated and first resolve kpse_include's
- kpse_input=`case goo/Makefile.in in
- [\\/$]*) # Absolute
- test -f "goo/Makefile.in" || { { $as_echo "$as_me:$LINENO: error: cannot find input file: goo/Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: goo/Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- echo "goo/Makefile.in";;
- *) # Relative
- if test -f "goo/Makefile.in"; then
- # Build tree
- echo "goo/Makefile.in"
- elif test -f "$srcdir/goo/Makefile.in"; then
- # Source tree
- echo "$srcdir/goo/Makefile.in"
- else
- # /dev/null tree
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: goo/Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: goo/Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac` || { (exit 1); exit 1; }
-# Replace lines of the form "kpse_include foo" with the contents of foo:
-# first, from the kpse_include lines construct a list of file names.
-# From that list, we construct a second list of those files that exist.
-# Then we construct a list of sed commands for including those files,
-# and a sed command that removes the kpse_include lines. We don't attempt
-# to read non-existent files because some (buggy) versions of sed choke
-# on this. Have to use sed because old (Ultrix, SunOs) awk does not support
-# getline or system. (Anyway, configure scripts aren't supposed to use awk.)
-# Can't use only one -e and commands {dr foo} because foo has to be last.
-# Be careful, because the filename may contain /.
-# Be careful with whitespace; we need to use echo.
-kpse_file_substs=`sed -n '/^kpse_include/s%[ ]*\(.*\)%\1%p' "$kpse_input"`
-if test x"$kpse_file_substs" = x; then
- { $as_echo "$as_me:$LINENO: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`goo/Makefile.in'
- without any \`kpse_include' directives" >&5
-$as_echo "$as_me: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`goo/Makefile.in'
- without any \`kpse_include' directives" >&2;}
-fi
-# Create the sed command line ...
-# Input lines containing "@configure_input@" are output twice,
-# first with our modifications and then unmodified.
-kpse_substs="sed -e '/@configure_input@/ { h; \
- s,@configure_input@,goo/Makefile.aux. Generated from `echo goo/Makefile.in |
- sed 's,.*/,,'` by configure.,; G; }'"
-for kpse_inc in $kpse_file_substs; do
- kpse_read=`case $kpse_inc in
- [\\/$]*) # Absolute
- if test -f "$kpse_inc"; then
- echo "$kpse_inc"
- fi;;
- *) # Relative
- if test -f "$kpse_inc"; then
- # Build tree
- echo "$kpse_inc"
- elif test -f "$srcdir/$kpse_inc"; then
- # Source tree
- echo "$srcdir/$kpse_inc"
- fi;;
- esac`
- if test -n "$kpse_read"; then
- kpse_mung=`echo $kpse_inc | sed 's,/,%,g'`
- kpse_substs="$kpse_substs -e '/^kpse_include $kpse_mung$/r $kpse_read'"
- fi
-done
-# ... and fix the whitespace and escaped slashes.
-kpse_substs=`echo "$kpse_substs" | sed -e 's,%,\\\/,g' \
- -e 's/kpse_include /kpse_include[ ]*/g'`
-(eval $kpse_substs -e '"/^kpse_include/d"' "$kpse_input") > goo/Makefile.aux
- ;;
- "fofi/Makefile.aux":F) # Discard the file just generated and first resolve kpse_include's
- kpse_input=`case fofi/Makefile.in in
- [\\/$]*) # Absolute
- test -f "fofi/Makefile.in" || { { $as_echo "$as_me:$LINENO: error: cannot find input file: fofi/Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: fofi/Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- echo "fofi/Makefile.in";;
- *) # Relative
- if test -f "fofi/Makefile.in"; then
- # Build tree
- echo "fofi/Makefile.in"
- elif test -f "$srcdir/fofi/Makefile.in"; then
- # Source tree
- echo "$srcdir/fofi/Makefile.in"
- else
- # /dev/null tree
- { { $as_echo "$as_me:$LINENO: error: cannot find input file: fofi/Makefile.in" >&5
-$as_echo "$as_me: error: cannot find input file: fofi/Makefile.in" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac` || { (exit 1); exit 1; }
-# Replace lines of the form "kpse_include foo" with the contents of foo:
-# first, from the kpse_include lines construct a list of file names.
-# From that list, we construct a second list of those files that exist.
-# Then we construct a list of sed commands for including those files,
-# and a sed command that removes the kpse_include lines. We don't attempt
-# to read non-existent files because some (buggy) versions of sed choke
-# on this. Have to use sed because old (Ultrix, SunOs) awk does not support
-# getline or system. (Anyway, configure scripts aren't supposed to use awk.)
-# Can't use only one -e and commands {dr foo} because foo has to be last.
-# Be careful, because the filename may contain /.
-# Be careful with whitespace; we need to use echo.
-kpse_file_substs=`sed -n '/^kpse_include/s%[ ]*\(.*\)%\1%p' "$kpse_input"`
-if test x"$kpse_file_substs" = x; then
- { $as_echo "$as_me:$LINENO: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`fofi/Makefile.in'
- without any \`kpse_include' directives" >&5
-$as_echo "$as_me: WARNING: No need to use \`KPSE_CONFIG_FILES' for input \`fofi/Makefile.in'
- without any \`kpse_include' directives" >&2;}
-fi
-# Create the sed command line ...
-# Input lines containing "@configure_input@" are output twice,
-# first with our modifications and then unmodified.
-kpse_substs="sed -e '/@configure_input@/ { h; \
- s,@configure_input@,fofi/Makefile.aux. Generated from `echo fofi/Makefile.in |
- sed 's,.*/,,'` by configure.,; G; }'"
-for kpse_inc in $kpse_file_substs; do
- kpse_read=`case $kpse_inc in
- [\\/$]*) # Absolute
- if test -f "$kpse_inc"; then
- echo "$kpse_inc"
- fi;;
- *) # Relative
- if test -f "$kpse_inc"; then
- # Build tree
- echo "$kpse_inc"
- elif test -f "$srcdir/$kpse_inc"; then
- # Source tree
- echo "$srcdir/$kpse_inc"
- fi;;
- esac`
- if test -n "$kpse_read"; then
- kpse_mung=`echo $kpse_inc | sed 's,/,%,g'`
- kpse_substs="$kpse_substs -e '/^kpse_include $kpse_mung$/r $kpse_read'"
- fi
-done
-# ... and fix the whitespace and escaped slashes.
-kpse_substs=`echo "$kpse_substs" | sed -e 's,%,\\\/,g' \
- -e 's/kpse_include /kpse_include[ ]*/g'`
-(eval $kpse_substs -e '"/^kpse_include/d"' "$kpse_input") > fofi/Makefile.aux
- ;;
-
- esac
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/Build/source/libs/xpdf/configure.in b/Build/source/libs/xpdf/configure.in
deleted file mode 100644
index bb2cae33626..00000000000
--- a/Build/source/libs/xpdf/configure.in
+++ /dev/null
@@ -1,94 +0,0 @@
-AC_INIT(xpdf/Array.cc)
-AC_CONFIG_AUX_DIR(../../config)
-AC_CONFIG_HEADERS(aconf.h)
-
-dnl ##### Optional features.
-AC_ARG_ENABLE([a4-paper],
-[ --enable-a4-paper use A4 paper size instead of Letter for
- PostScript output],
-[AC_DEFINE(A4_PAPER)])
-AC_ARG_ENABLE(opi,
-[ --enable-opi include support for OPI comments],
-[AC_DEFINE(OPI_SUPPORT)])
-AC_ARG_ENABLE([multithreaded],
-[ --enable-multithreaded include support for multithreading],
-[AC_DEFINE(MULTITHREADED)])
-
-dnl ##### Path to xpdfrc.
-dnl This ugly kludge to get the sysconfdir path is needed because
-dnl autoconf doesn't actually set the prefix variable until later.
-if test "$sysconfdir" = '${prefix}/etc'; then
- if test "x$prefix" = xNONE; then
- system_xpdfrc="$ac_default_prefix/etc/xpdfrc"
- else
- system_xpdfrc="$prefix/etc/xpdfrc"
- fi
-else
- system_xpdfrc="$sysconfdir/xpdfrc"
-fi
-AC_DEFINE_UNQUOTED(SYSTEM_XPDFRC, "$system_xpdfrc")
-
-dnl ##### Checks for programs.
-AC_PROG_CC
-AC_ISC_POSIX
-(
- AC_PROG_CXX
-) && {
- AC_PROG_CXX
-} || {
- AC_MSG_WARN(No C++ compiler: xpdf can not be compiled.)
- true
-}
-
-AC_PROG_RANLIB
-
-dnl These are standard among *NIX systems, but not when cross-compiling
-AC_DEFUN([CF_SUBST],
-[AC_MSG_CHECKING(for $1 (symbol $2))
-AC_CACHE_VAL(cf_cv_subst_$2,[
-test -z "[$]$2" && $2=$3
-cf_cv_subst_$2=[$]$2])
-$2=${cf_cv_subst_$2}
-AC_MSG_RESULT([$]$2)
-AC_SUBST($2)
-])dnl
-CF_SUBST(archiver,AR,ar)
-CF_SUBST(archiver options,ARFLAGS,rc)
-
-AC_HEADER_DIRENT
-
-dnl ##### Switch over to C++. This will make the checks below a little
-dnl ##### bit stricter (requiring function prototypes in include files).
-dnl ##### (99% of xpdf is written in C++.)
-AC_LANG_CPLUSPLUS
-
-dnl # This should use 'AC_CHECK_FUNCS(mkstemp)' but that fails if
-dnl # the mkstemp exists in the library but isn't declared in the
-dnl # include file (e.g., in cygwin 1.1.2).
-AC_CACHE_CHECK([for mkstemp],
-xpdf_cv_func_mkstemp,
-[AC_TRY_LINK([#include <stdlib.h>
-#include <unistd.h>],
-[mkstemp("foo");],
-xpdf_cv_func_mkstemp=yes, xpdf_cv_func_mkstemp=no)])
-if test "$xpdf_cv_func_mkstemp" = yes; then
- AC_DEFINE(HAVE_MKSTEMP)
-fi
-dnl # Check for mkstemps, just like mkstemp.
-AC_CACHE_CHECK([for mkstemps],
-xpdf_cv_func_mkstemps,
-[AC_TRY_LINK([#include <stdlib.h>
-#include <unistd.h>],
-[mkstemps("foo", 0);],
-xpdf_cv_func_mkstemps=yes, xpdf_cv_func_mkstemps=no)])
-if test "$xpdf_cv_func_mkstemps" = yes; then
- AC_DEFINE(HAVE_MKSTEMPS)
-fi
-
-dnl ##### Back to C for the library tests.
-AC_LANG_C
-
-dnl ##### Write the makefiles.
-AC_CONFIG_FILES([Makefile])
-KPSE_CONFIG_FILES([xpdf/Makefile goo/Makefile fofi/Makefile])
-AC_OUTPUT
diff --git a/Build/source/libs/xpdf/fofi/FoFiBase.cc b/Build/source/libs/xpdf/fofi/FoFiBase.cc
deleted file mode 100644
index 28d0b8ca874..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiBase.cc
+++ /dev/null
@@ -1,156 +0,0 @@
-//========================================================================
-//
-// FoFiBase.cc
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include "gmem.h"
-#include "FoFiBase.h"
-
-//------------------------------------------------------------------------
-// FoFiBase
-//------------------------------------------------------------------------
-
-FoFiBase::FoFiBase(char *fileA, int lenA, GBool freeFileDataA) {
- fileData = file = (Guchar *)fileA;
- len = lenA;
- freeFileData = freeFileDataA;
-}
-
-FoFiBase::~FoFiBase() {
- if (freeFileData) {
- gfree(fileData);
- }
-}
-
-char *FoFiBase::readFile(char *fileName, int *fileLen) {
- FILE *f;
- char *buf;
- int n;
-
- if (!(f = fopen(fileName, "rb"))) {
- return NULL;
- }
- fseek(f, 0, SEEK_END);
- n = (int)ftell(f);
- fseek(f, 0, SEEK_SET);
- buf = (char *)gmalloc(n);
- if ((int)fread(buf, 1, n, f) != n) {
- gfree(buf);
- fclose(f);
- return NULL;
- }
- fclose(f);
- *fileLen = n;
- return buf;
-}
-
-int FoFiBase::getS8(int pos, GBool *ok) {
- int x;
-
- if (pos < 0 || pos >= len) {
- *ok = gFalse;
- return 0;
- }
- x = file[pos];
- if (x & 0x80) {
- x |= ~0xff;
- }
- return x;
-}
-
-int FoFiBase::getU8(int pos, GBool *ok) {
- if (pos < 0 || pos >= len) {
- *ok = gFalse;
- return 0;
- }
- return file[pos];
-}
-
-int FoFiBase::getS16BE(int pos, GBool *ok) {
- int x;
-
- if (pos < 0 || pos+1 >= len) {
- *ok = gFalse;
- return 0;
- }
- x = file[pos];
- x = (x << 8) + file[pos+1];
- if (x & 0x8000) {
- x |= ~0xffff;
- }
- return x;
-}
-
-int FoFiBase::getU16BE(int pos, GBool *ok) {
- int x;
-
- if (pos < 0 || pos+1 >= len) {
- *ok = gFalse;
- return 0;
- }
- x = file[pos];
- x = (x << 8) + file[pos+1];
- return x;
-}
-
-int FoFiBase::getS32BE(int pos, GBool *ok) {
- int x;
-
- if (pos < 0 || pos+3 >= len) {
- *ok = gFalse;
- return 0;
- }
- x = file[pos];
- x = (x << 8) + file[pos+1];
- x = (x << 8) + file[pos+2];
- x = (x << 8) + file[pos+3];
- if (x & 0x80000000) {
- x |= ~0xffffffff;
- }
- return x;
-}
-
-Guint FoFiBase::getU32BE(int pos, GBool *ok) {
- Guint x;
-
- if (pos < 0 || pos+3 >= len) {
- *ok = gFalse;
- return 0;
- }
- x = file[pos];
- x = (x << 8) + file[pos+1];
- x = (x << 8) + file[pos+2];
- x = (x << 8) + file[pos+3];
- return x;
-}
-
-Guint FoFiBase::getUVarBE(int pos, int size, GBool *ok) {
- Guint x;
- int i;
-
- if (pos < 0 || pos + size > len) {
- *ok = gFalse;
- return 0;
- }
- x = 0;
- for (i = 0; i < size; ++i) {
- x = (x << 8) + file[pos + i];
- }
- return x;
-}
-
-GBool FoFiBase::checkRegion(int pos, int size) {
- return pos >= 0 &&
- pos + size >= pos &&
- pos + size <= len;
-}
diff --git a/Build/source/libs/xpdf/fofi/FoFiBase.h b/Build/source/libs/xpdf/fofi/FoFiBase.h
deleted file mode 100644
index b78840b2a00..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiBase.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//========================================================================
-//
-// FoFiBase.h
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FOFIBASE_H
-#define FOFIBASE_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-
-//------------------------------------------------------------------------
-
-typedef void (*FoFiOutputFunc)(void *stream, char *data, int len);
-
-//------------------------------------------------------------------------
-// FoFiBase
-//------------------------------------------------------------------------
-
-class FoFiBase {
-public:
-
- virtual ~FoFiBase();
-
-protected:
-
- FoFiBase(char *fileA, int lenA, GBool freeFileDataA);
- static char *readFile(char *fileName, int *fileLen);
-
- // S = signed / U = unsigned
- // 8/16/32/Var = word length, in bytes
- // BE = big endian
- int getS8(int pos, GBool *ok);
- int getU8(int pos, GBool *ok);
- int getS16BE(int pos, GBool *ok);
- int getU16BE(int pos, GBool *ok);
- int getS32BE(int pos, GBool *ok);
- Guint getU32BE(int pos, GBool *ok);
- Guint getUVarBE(int pos, int size, GBool *ok);
-
- GBool checkRegion(int pos, int size);
-
- Guchar *fileData;
- Guchar *file;
- int len;
- GBool freeFileData;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/fofi/FoFiEncodings.cc b/Build/source/libs/xpdf/fofi/FoFiEncodings.cc
deleted file mode 100644
index 37a17f5df37..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiEncodings.cc
+++ /dev/null
@@ -1,994 +0,0 @@
-//========================================================================
-//
-// FoFiEncodings.cc
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include "FoFiEncodings.h"
-
-//------------------------------------------------------------------------
-// Type 1 and 1C font data
-//------------------------------------------------------------------------
-
-char *fofiType1StandardEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclam",
- "quotedbl",
- "numbersign",
- "dollar",
- "percent",
- "ampersand",
- "quoteright",
- "parenleft",
- "parenright",
- "asterisk",
- "plus",
- "comma",
- "hyphen",
- "period",
- "slash",
- "zero",
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "colon",
- "semicolon",
- "less",
- "equal",
- "greater",
- "question",
- "at",
- "A",
- "B",
- "C",
- "D",
- "E",
- "F",
- "G",
- "H",
- "I",
- "J",
- "K",
- "L",
- "M",
- "N",
- "O",
- "P",
- "Q",
- "R",
- "S",
- "T",
- "U",
- "V",
- "W",
- "X",
- "Y",
- "Z",
- "bracketleft",
- "backslash",
- "bracketright",
- "asciicircum",
- "underscore",
- "quoteleft",
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "g",
- "h",
- "i",
- "j",
- "k",
- "l",
- "m",
- "n",
- "o",
- "p",
- "q",
- "r",
- "s",
- "t",
- "u",
- "v",
- "w",
- "x",
- "y",
- "z",
- "braceleft",
- "bar",
- "braceright",
- "asciitilde",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "exclamdown",
- "cent",
- "sterling",
- "fraction",
- "yen",
- "florin",
- "section",
- "currency",
- "quotesingle",
- "quotedblleft",
- "guillemotleft",
- "guilsinglleft",
- "guilsinglright",
- "fi",
- "fl",
- NULL,
- "endash",
- "dagger",
- "daggerdbl",
- "periodcentered",
- NULL,
- "paragraph",
- "bullet",
- "quotesinglbase",
- "quotedblbase",
- "quotedblright",
- "guillemotright",
- "ellipsis",
- "perthousand",
- NULL,
- "questiondown",
- NULL,
- "grave",
- "acute",
- "circumflex",
- "tilde",
- "macron",
- "breve",
- "dotaccent",
- "dieresis",
- NULL,
- "ring",
- "cedilla",
- NULL,
- "hungarumlaut",
- "ogonek",
- "caron",
- "emdash",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "AE",
- NULL,
- "ordfeminine",
- NULL,
- NULL,
- NULL,
- NULL,
- "Lslash",
- "Oslash",
- "OE",
- "ordmasculine",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "ae",
- NULL,
- NULL,
- NULL,
- "dotlessi",
- NULL,
- NULL,
- "lslash",
- "oslash",
- "oe",
- "germandbls",
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-char *fofiType1ExpertEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclamsmall",
- "Hungarumlautsmall",
- NULL,
- "dollaroldstyle",
- "dollarsuperior",
- "ampersandsmall",
- "Acutesmall",
- "parenleftsuperior",
- "parenrightsuperior",
- "twodotenleader",
- "onedotenleader",
- "comma",
- "hyphen",
- "period",
- "fraction",
- "zerooldstyle",
- "oneoldstyle",
- "twooldstyle",
- "threeoldstyle",
- "fouroldstyle",
- "fiveoldstyle",
- "sixoldstyle",
- "sevenoldstyle",
- "eightoldstyle",
- "nineoldstyle",
- "colon",
- "semicolon",
- "commasuperior",
- "threequartersemdash",
- "periodsuperior",
- "questionsmall",
- NULL,
- "asuperior",
- "bsuperior",
- "centsuperior",
- "dsuperior",
- "esuperior",
- NULL,
- NULL,
- NULL,
- "isuperior",
- NULL,
- NULL,
- "lsuperior",
- "msuperior",
- "nsuperior",
- "osuperior",
- NULL,
- NULL,
- "rsuperior",
- "ssuperior",
- "tsuperior",
- NULL,
- "ff",
- "fi",
- "fl",
- "ffi",
- "ffl",
- "parenleftinferior",
- NULL,
- "parenrightinferior",
- "Circumflexsmall",
- "hyphensuperior",
- "Gravesmall",
- "Asmall",
- "Bsmall",
- "Csmall",
- "Dsmall",
- "Esmall",
- "Fsmall",
- "Gsmall",
- "Hsmall",
- "Ismall",
- "Jsmall",
- "Ksmall",
- "Lsmall",
- "Msmall",
- "Nsmall",
- "Osmall",
- "Psmall",
- "Qsmall",
- "Rsmall",
- "Ssmall",
- "Tsmall",
- "Usmall",
- "Vsmall",
- "Wsmall",
- "Xsmall",
- "Ysmall",
- "Zsmall",
- "colonmonetary",
- "onefitted",
- "rupiah",
- "Tildesmall",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "exclamdownsmall",
- "centoldstyle",
- "Lslashsmall",
- NULL,
- NULL,
- "Scaronsmall",
- "Zcaronsmall",
- "Dieresissmall",
- "Brevesmall",
- "Caronsmall",
- NULL,
- "Dotaccentsmall",
- NULL,
- NULL,
- "Macronsmall",
- NULL,
- NULL,
- "figuredash",
- "hypheninferior",
- NULL,
- NULL,
- "Ogoneksmall",
- "Ringsmall",
- "Cedillasmall",
- NULL,
- NULL,
- NULL,
- "onequarter",
- "onehalf",
- "threequarters",
- "questiondownsmall",
- "oneeighth",
- "threeeighths",
- "fiveeighths",
- "seveneighths",
- "onethird",
- "twothirds",
- NULL,
- NULL,
- "zerosuperior",
- "onesuperior",
- "twosuperior",
- "threesuperior",
- "foursuperior",
- "fivesuperior",
- "sixsuperior",
- "sevensuperior",
- "eightsuperior",
- "ninesuperior",
- "zeroinferior",
- "oneinferior",
- "twoinferior",
- "threeinferior",
- "fourinferior",
- "fiveinferior",
- "sixinferior",
- "seveninferior",
- "eightinferior",
- "nineinferior",
- "centinferior",
- "dollarinferior",
- "periodinferior",
- "commainferior",
- "Agravesmall",
- "Aacutesmall",
- "Acircumflexsmall",
- "Atildesmall",
- "Adieresissmall",
- "Aringsmall",
- "AEsmall",
- "Ccedillasmall",
- "Egravesmall",
- "Eacutesmall",
- "Ecircumflexsmall",
- "Edieresissmall",
- "Igravesmall",
- "Iacutesmall",
- "Icircumflexsmall",
- "Idieresissmall",
- "Ethsmall",
- "Ntildesmall",
- "Ogravesmall",
- "Oacutesmall",
- "Ocircumflexsmall",
- "Otildesmall",
- "Odieresissmall",
- "OEsmall",
- "Oslashsmall",
- "Ugravesmall",
- "Uacutesmall",
- "Ucircumflexsmall",
- "Udieresissmall",
- "Yacutesmall",
- "Thornsmall",
- "Ydieresissmall"
-};
-
-//------------------------------------------------------------------------
-// Type 1C font data
-//------------------------------------------------------------------------
-
-char *fofiType1CStdStrings[391] = {
- ".notdef",
- "space",
- "exclam",
- "quotedbl",
- "numbersign",
- "dollar",
- "percent",
- "ampersand",
- "quoteright",
- "parenleft",
- "parenright",
- "asterisk",
- "plus",
- "comma",
- "hyphen",
- "period",
- "slash",
- "zero",
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "colon",
- "semicolon",
- "less",
- "equal",
- "greater",
- "question",
- "at",
- "A",
- "B",
- "C",
- "D",
- "E",
- "F",
- "G",
- "H",
- "I",
- "J",
- "K",
- "L",
- "M",
- "N",
- "O",
- "P",
- "Q",
- "R",
- "S",
- "T",
- "U",
- "V",
- "W",
- "X",
- "Y",
- "Z",
- "bracketleft",
- "backslash",
- "bracketright",
- "asciicircum",
- "underscore",
- "quoteleft",
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "g",
- "h",
- "i",
- "j",
- "k",
- "l",
- "m",
- "n",
- "o",
- "p",
- "q",
- "r",
- "s",
- "t",
- "u",
- "v",
- "w",
- "x",
- "y",
- "z",
- "braceleft",
- "bar",
- "braceright",
- "asciitilde",
- "exclamdown",
- "cent",
- "sterling",
- "fraction",
- "yen",
- "florin",
- "section",
- "currency",
- "quotesingle",
- "quotedblleft",
- "guillemotleft",
- "guilsinglleft",
- "guilsinglright",
- "fi",
- "fl",
- "endash",
- "dagger",
- "daggerdbl",
- "periodcentered",
- "paragraph",
- "bullet",
- "quotesinglbase",
- "quotedblbase",
- "quotedblright",
- "guillemotright",
- "ellipsis",
- "perthousand",
- "questiondown",
- "grave",
- "acute",
- "circumflex",
- "tilde",
- "macron",
- "breve",
- "dotaccent",
- "dieresis",
- "ring",
- "cedilla",
- "hungarumlaut",
- "ogonek",
- "caron",
- "emdash",
- "AE",
- "ordfeminine",
- "Lslash",
- "Oslash",
- "OE",
- "ordmasculine",
- "ae",
- "dotlessi",
- "lslash",
- "oslash",
- "oe",
- "germandbls",
- "onesuperior",
- "logicalnot",
- "mu",
- "trademark",
- "Eth",
- "onehalf",
- "plusminus",
- "Thorn",
- "onequarter",
- "divide",
- "brokenbar",
- "degree",
- "thorn",
- "threequarters",
- "twosuperior",
- "registered",
- "minus",
- "eth",
- "multiply",
- "threesuperior",
- "copyright",
- "Aacute",
- "Acircumflex",
- "Adieresis",
- "Agrave",
- "Aring",
- "Atilde",
- "Ccedilla",
- "Eacute",
- "Ecircumflex",
- "Edieresis",
- "Egrave",
- "Iacute",
- "Icircumflex",
- "Idieresis",
- "Igrave",
- "Ntilde",
- "Oacute",
- "Ocircumflex",
- "Odieresis",
- "Ograve",
- "Otilde",
- "Scaron",
- "Uacute",
- "Ucircumflex",
- "Udieresis",
- "Ugrave",
- "Yacute",
- "Ydieresis",
- "Zcaron",
- "aacute",
- "acircumflex",
- "adieresis",
- "agrave",
- "aring",
- "atilde",
- "ccedilla",
- "eacute",
- "ecircumflex",
- "edieresis",
- "egrave",
- "iacute",
- "icircumflex",
- "idieresis",
- "igrave",
- "ntilde",
- "oacute",
- "ocircumflex",
- "odieresis",
- "ograve",
- "otilde",
- "scaron",
- "uacute",
- "ucircumflex",
- "udieresis",
- "ugrave",
- "yacute",
- "ydieresis",
- "zcaron",
- "exclamsmall",
- "Hungarumlautsmall",
- "dollaroldstyle",
- "dollarsuperior",
- "ampersandsmall",
- "Acutesmall",
- "parenleftsuperior",
- "parenrightsuperior",
- "twodotenleader",
- "onedotenleader",
- "zerooldstyle",
- "oneoldstyle",
- "twooldstyle",
- "threeoldstyle",
- "fouroldstyle",
- "fiveoldstyle",
- "sixoldstyle",
- "sevenoldstyle",
- "eightoldstyle",
- "nineoldstyle",
- "commasuperior",
- "threequartersemdash",
- "periodsuperior",
- "questionsmall",
- "asuperior",
- "bsuperior",
- "centsuperior",
- "dsuperior",
- "esuperior",
- "isuperior",
- "lsuperior",
- "msuperior",
- "nsuperior",
- "osuperior",
- "rsuperior",
- "ssuperior",
- "tsuperior",
- "ff",
- "ffi",
- "ffl",
- "parenleftinferior",
- "parenrightinferior",
- "Circumflexsmall",
- "hyphensuperior",
- "Gravesmall",
- "Asmall",
- "Bsmall",
- "Csmall",
- "Dsmall",
- "Esmall",
- "Fsmall",
- "Gsmall",
- "Hsmall",
- "Ismall",
- "Jsmall",
- "Ksmall",
- "Lsmall",
- "Msmall",
- "Nsmall",
- "Osmall",
- "Psmall",
- "Qsmall",
- "Rsmall",
- "Ssmall",
- "Tsmall",
- "Usmall",
- "Vsmall",
- "Wsmall",
- "Xsmall",
- "Ysmall",
- "Zsmall",
- "colonmonetary",
- "onefitted",
- "rupiah",
- "Tildesmall",
- "exclamdownsmall",
- "centoldstyle",
- "Lslashsmall",
- "Scaronsmall",
- "Zcaronsmall",
- "Dieresissmall",
- "Brevesmall",
- "Caronsmall",
- "Dotaccentsmall",
- "Macronsmall",
- "figuredash",
- "hypheninferior",
- "Ogoneksmall",
- "Ringsmall",
- "Cedillasmall",
- "questiondownsmall",
- "oneeighth",
- "threeeighths",
- "fiveeighths",
- "seveneighths",
- "onethird",
- "twothirds",
- "zerosuperior",
- "foursuperior",
- "fivesuperior",
- "sixsuperior",
- "sevensuperior",
- "eightsuperior",
- "ninesuperior",
- "zeroinferior",
- "oneinferior",
- "twoinferior",
- "threeinferior",
- "fourinferior",
- "fiveinferior",
- "sixinferior",
- "seveninferior",
- "eightinferior",
- "nineinferior",
- "centinferior",
- "dollarinferior",
- "periodinferior",
- "commainferior",
- "Agravesmall",
- "Aacutesmall",
- "Acircumflexsmall",
- "Atildesmall",
- "Adieresissmall",
- "Aringsmall",
- "AEsmall",
- "Ccedillasmall",
- "Egravesmall",
- "Eacutesmall",
- "Ecircumflexsmall",
- "Edieresissmall",
- "Igravesmall",
- "Iacutesmall",
- "Icircumflexsmall",
- "Idieresissmall",
- "Ethsmall",
- "Ntildesmall",
- "Ogravesmall",
- "Oacutesmall",
- "Ocircumflexsmall",
- "Otildesmall",
- "Odieresissmall",
- "OEsmall",
- "Oslashsmall",
- "Ugravesmall",
- "Uacutesmall",
- "Ucircumflexsmall",
- "Udieresissmall",
- "Yacutesmall",
- "Thornsmall",
- "Ydieresissmall",
- "001.000",
- "001.001",
- "001.002",
- "001.003",
- "Black",
- "Bold",
- "Book",
- "Light",
- "Medium",
- "Regular",
- "Roman",
- "Semibold"
-};
-
-Gushort fofiType1CISOAdobeCharset[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
-};
-
-Gushort fofiType1CExpertCharset[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
-};
-
-Gushort fofiType1CExpertSubsetCharset[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
-};
diff --git a/Build/source/libs/xpdf/fofi/FoFiEncodings.h b/Build/source/libs/xpdf/fofi/FoFiEncodings.h
deleted file mode 100644
index 50e285d7c8e..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiEncodings.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//========================================================================
-//
-// FoFiEncodings.h
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FOFIENCODINGS_H
-#define FOFIENCODINGS_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-
-//------------------------------------------------------------------------
-// Type 1 and 1C font data
-//------------------------------------------------------------------------
-
-extern char *fofiType1StandardEncoding[256];
-extern char *fofiType1ExpertEncoding[256];
-
-//------------------------------------------------------------------------
-// Type 1C font data
-//------------------------------------------------------------------------
-
-extern char *fofiType1CStdStrings[391];
-extern Gushort fofiType1CISOAdobeCharset[229];
-extern Gushort fofiType1CExpertCharset[166];
-extern Gushort fofiType1CExpertSubsetCharset[87];
-
-#endif
diff --git a/Build/source/libs/xpdf/fofi/FoFiTrueType.cc b/Build/source/libs/xpdf/fofi/FoFiTrueType.cc
deleted file mode 100644
index f8a1aa3478e..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiTrueType.cc
+++ /dev/null
@@ -1,2027 +0,0 @@
-//========================================================================
-//
-// FoFiTrueType.cc
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "gtypes.h"
-#include "gmem.h"
-#include "GString.h"
-#include "GHash.h"
-#include "FoFiType1C.h"
-#include "FoFiTrueType.h"
-
-//
-// Terminology
-// -----------
-//
-// character code = number used as an element of a text string
-//
-// character name = glyph name = name for a particular glyph within a
-// font
-//
-// glyph index = GID = position (within some internal table in the font)
-// where the instructions to draw a particular glyph are
-// stored
-//
-// Type 1 fonts
-// ------------
-//
-// Type 1 fonts contain:
-//
-// Encoding: array of glyph names, maps char codes to glyph names
-//
-// Encoding[charCode] = charName
-//
-// CharStrings: dictionary of instructions, keyed by character names,
-// maps character name to glyph data
-//
-// CharStrings[charName] = glyphData
-//
-// TrueType fonts
-// --------------
-//
-// TrueType fonts contain:
-//
-// 'cmap' table: mapping from character code to glyph index; there may
-// be multiple cmaps in a TrueType font
-//
-// cmap[charCode] = gid
-//
-// 'post' table: mapping from glyph index to glyph name
-//
-// post[gid] = glyphName
-//
-// Type 42 fonts
-// -------------
-//
-// Type 42 fonts contain:
-//
-// Encoding: array of glyph names, maps char codes to glyph names
-//
-// Encoding[charCode] = charName
-//
-// CharStrings: dictionary of glyph indexes, keyed by character names,
-// maps character name to glyph index
-//
-// CharStrings[charName] = gid
-//
-
-//------------------------------------------------------------------------
-
-#define ttcfTag 0x74746366
-
-//------------------------------------------------------------------------
-
-struct TrueTypeTable {
- Guint tag;
- Guint checksum;
- int offset;
- int origOffset;
- int len;
-};
-
-struct TrueTypeCmap {
- int platform;
- int encoding;
- int offset;
- int len;
- int fmt;
-};
-
-struct TrueTypeLoca {
- int idx;
- int origOffset;
- int newOffset;
- int len;
-};
-
-#define cmapTag 0x636d6170
-#define glyfTag 0x676c7966
-#define headTag 0x68656164
-#define hheaTag 0x68686561
-#define hmtxTag 0x686d7478
-#define locaTag 0x6c6f6361
-#define nameTag 0x6e616d65
-#define os2Tag 0x4f532f32
-#define postTag 0x706f7374
-
-static int cmpTrueTypeLocaOffset(const void *p1, const void *p2) {
- TrueTypeLoca *loca1 = (TrueTypeLoca *)p1;
- TrueTypeLoca *loca2 = (TrueTypeLoca *)p2;
-
- if (loca1->origOffset == loca2->origOffset) {
- return loca1->idx - loca2->idx;
- }
- return loca1->origOffset - loca2->origOffset;
-}
-
-static int cmpTrueTypeLocaIdx(const void *p1, const void *p2) {
- TrueTypeLoca *loca1 = (TrueTypeLoca *)p1;
- TrueTypeLoca *loca2 = (TrueTypeLoca *)p2;
-
- return loca1->idx - loca2->idx;
-}
-
-static int cmpTrueTypeTableTag(const void *p1, const void *p2) {
- TrueTypeTable *tab1 = (TrueTypeTable *)p1;
- TrueTypeTable *tab2 = (TrueTypeTable *)p2;
-
- return (int)tab1->tag - (int)tab2->tag;
-}
-
-//------------------------------------------------------------------------
-
-struct T42Table {
- char *tag; // 4-byte tag
- GBool required; // required by the TrueType spec?
-};
-
-// TrueType tables to be embedded in Type 42 fonts.
-// NB: the table names must be in alphabetical order here.
-#define nT42Tables 11
-static T42Table t42Tables[nT42Tables] = {
- { "cvt ", gTrue },
- { "fpgm", gTrue },
- { "glyf", gTrue },
- { "head", gTrue },
- { "hhea", gTrue },
- { "hmtx", gTrue },
- { "loca", gTrue },
- { "maxp", gTrue },
- { "prep", gTrue },
- { "vhea", gFalse },
- { "vmtx", gFalse }
-};
-#define t42HeadTable 3
-#define t42LocaTable 6
-#define t42GlyfTable 2
-#define t42VheaTable 9
-#define t42VmtxTable 10
-
-//------------------------------------------------------------------------
-
-// Glyph names in some arbitrary standard order that Apple uses for
-// their TrueType fonts.
-static char *macGlyphNames[258] = {
- ".notdef", "null", "CR", "space",
- "exclam", "quotedbl", "numbersign", "dollar",
- "percent", "ampersand", "quotesingle", "parenleft",
- "parenright", "asterisk", "plus", "comma",
- "hyphen", "period", "slash", "zero",
- "one", "two", "three", "four",
- "five", "six", "seven", "eight",
- "nine", "colon", "semicolon", "less",
- "equal", "greater", "question", "at",
- "A", "B", "C", "D",
- "E", "F", "G", "H",
- "I", "J", "K", "L",
- "M", "N", "O", "P",
- "Q", "R", "S", "T",
- "U", "V", "W", "X",
- "Y", "Z", "bracketleft", "backslash",
- "bracketright", "asciicircum", "underscore", "grave",
- "a", "b", "c", "d",
- "e", "f", "g", "h",
- "i", "j", "k", "l",
- "m", "n", "o", "p",
- "q", "r", "s", "t",
- "u", "v", "w", "x",
- "y", "z", "braceleft", "bar",
- "braceright", "asciitilde", "Adieresis", "Aring",
- "Ccedilla", "Eacute", "Ntilde", "Odieresis",
- "Udieresis", "aacute", "agrave", "acircumflex",
- "adieresis", "atilde", "aring", "ccedilla",
- "eacute", "egrave", "ecircumflex", "edieresis",
- "iacute", "igrave", "icircumflex", "idieresis",
- "ntilde", "oacute", "ograve", "ocircumflex",
- "odieresis", "otilde", "uacute", "ugrave",
- "ucircumflex", "udieresis", "dagger", "degree",
- "cent", "sterling", "section", "bullet",
- "paragraph", "germandbls", "registered", "copyright",
- "trademark", "acute", "dieresis", "notequal",
- "AE", "Oslash", "infinity", "plusminus",
- "lessequal", "greaterequal", "yen", "mu1",
- "partialdiff", "summation", "product", "pi",
- "integral", "ordfeminine", "ordmasculine", "Ohm",
- "ae", "oslash", "questiondown", "exclamdown",
- "logicalnot", "radical", "florin", "approxequal",
- "increment", "guillemotleft", "guillemotright", "ellipsis",
- "nbspace", "Agrave", "Atilde", "Otilde",
- "OE", "oe", "endash", "emdash",
- "quotedblleft", "quotedblright", "quoteleft", "quoteright",
- "divide", "lozenge", "ydieresis", "Ydieresis",
- "fraction", "currency", "guilsinglleft", "guilsinglright",
- "fi", "fl", "daggerdbl", "periodcentered",
- "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex",
- "Ecircumflex", "Aacute", "Edieresis", "Egrave",
- "Iacute", "Icircumflex", "Idieresis", "Igrave",
- "Oacute", "Ocircumflex", "applelogo", "Ograve",
- "Uacute", "Ucircumflex", "Ugrave", "dotlessi",
- "circumflex", "tilde", "overscore", "breve",
- "dotaccent", "ring", "cedilla", "hungarumlaut",
- "ogonek", "caron", "Lslash", "lslash",
- "Scaron", "scaron", "Zcaron", "zcaron",
- "brokenbar", "Eth", "eth", "Yacute",
- "yacute", "Thorn", "thorn", "minus",
- "multiply", "onesuperior", "twosuperior", "threesuperior",
- "onehalf", "onequarter", "threequarters", "franc",
- "Gbreve", "gbreve", "Idot", "Scedilla",
- "scedilla", "Cacute", "cacute", "Ccaron",
- "ccaron", "dmacron"
-};
-
-//------------------------------------------------------------------------
-// FoFiTrueType
-//------------------------------------------------------------------------
-
-FoFiTrueType *FoFiTrueType::make(char *fileA, int lenA) {
- FoFiTrueType *ff;
-
- ff = new FoFiTrueType(fileA, lenA, gFalse);
- if (!ff->parsedOk) {
- delete ff;
- return NULL;
- }
- return ff;
-}
-
-FoFiTrueType *FoFiTrueType::load(char *fileName) {
- FoFiTrueType *ff;
- char *fileA;
- int lenA;
-
- if (!(fileA = FoFiBase::readFile(fileName, &lenA))) {
- return NULL;
- }
- ff = new FoFiTrueType(fileA, lenA, gTrue);
- if (!ff->parsedOk) {
- delete ff;
- return NULL;
- }
- return ff;
-}
-
-FoFiTrueType::FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA):
- FoFiBase(fileA, lenA, freeFileDataA)
-{
- tables = NULL;
- nTables = 0;
- cmaps = NULL;
- nCmaps = 0;
- nameToGID = NULL;
- parsedOk = gFalse;
-
- parse();
-}
-
-FoFiTrueType::~FoFiTrueType() {
- gfree(tables);
- gfree(cmaps);
- if (nameToGID) {
- delete nameToGID;
- }
-}
-
-int FoFiTrueType::getNumCmaps() {
- return nCmaps;
-}
-
-int FoFiTrueType::getCmapPlatform(int i) {
- return cmaps[i].platform;
-}
-
-int FoFiTrueType::getCmapEncoding(int i) {
- return cmaps[i].encoding;
-}
-
-int FoFiTrueType::findCmap(int platform, int encoding) {
- int i;
-
- for (i = 0; i < nCmaps; ++i) {
- if (cmaps[i].platform == platform && cmaps[i].encoding == encoding) {
- return i;
- }
- }
- return -1;
-}
-
-Gushort FoFiTrueType::mapCodeToGID(int i, int c) {
- Gushort gid;
- int segCnt, segEnd, segStart, segDelta, segOffset;
- int cmapFirst, cmapLen;
- int pos, a, b, m;
- GBool ok;
-
- if (i < 0 || i >= nCmaps) {
- return 0;
- }
- ok = gTrue;
- pos = cmaps[i].offset;
- switch (cmaps[i].fmt) {
- case 0:
- if (c < 0 || c >= cmaps[i].len - 6) {
- return 0;
- }
- gid = getU8(cmaps[i].offset + 6 + c, &ok);
- break;
- case 4:
- segCnt = getU16BE(pos + 6, &ok) / 2;
- a = -1;
- b = segCnt - 1;
- segEnd = getU16BE(pos + 14 + 2*b, &ok);
- if (c > segEnd) {
- // malformed font -- the TrueType spec requires the last segEnd
- // to be 0xffff
- return 0;
- }
- // invariant: seg[a].end < code <= seg[b].end
- while (b - a > 1 && ok) {
- m = (a + b) / 2;
- segEnd = getU16BE(pos + 14 + 2*m, &ok);
- if (segEnd < c) {
- a = m;
- } else {
- b = m;
- }
- }
- segStart = getU16BE(pos + 16 + 2*segCnt + 2*b, &ok);
- segDelta = getU16BE(pos + 16 + 4*segCnt + 2*b, &ok);
- segOffset = getU16BE(pos + 16 + 6*segCnt + 2*b, &ok);
- if (c < segStart) {
- return 0;
- }
- if (segOffset == 0) {
- gid = (c + segDelta) & 0xffff;
- } else {
- gid = getU16BE(pos + 16 + 6*segCnt + 2*b +
- segOffset + 2 * (c - segStart), &ok);
- if (gid != 0) {
- gid = (gid + segDelta) & 0xffff;
- }
- }
- break;
- case 6:
- cmapFirst = getU16BE(pos + 6, &ok);
- cmapLen = getU16BE(pos + 8, &ok);
- if (c < cmapFirst || c >= cmapFirst + cmapLen) {
- return 0;
- }
- gid = getU16BE(pos + 10 + 2 * (c - cmapFirst), &ok);
- break;
- default:
- return 0;
- }
- if (!ok) {
- return 0;
- }
- return gid;
-}
-
-int FoFiTrueType::mapNameToGID(char *name) {
- if (!nameToGID) {
- return 0;
- }
- return nameToGID->lookupInt(name);
-}
-
-Gushort *FoFiTrueType::getCIDToGIDMap(int *nCIDs) {
- FoFiType1C *ff;
- Gushort *map;
- int i;
-
- *nCIDs = 0;
- if (!openTypeCFF) {
- return NULL;
- }
- i = seekTable("CFF ");
- if (!checkRegion(tables[i].offset, tables[i].len)) {
- return NULL;
- }
- if (!(ff = FoFiType1C::make((char *)file + tables[i].offset,
- tables[i].len))) {
- return NULL;
- }
- map = ff->getCIDToGIDMap(nCIDs);
- delete ff;
- return map;
-}
-
-int FoFiTrueType::getEmbeddingRights() {
- int i, fsType;
- GBool ok;
-
- if ((i = seekTable("OS/2")) < 0) {
- return 4;
- }
- ok = gTrue;
- fsType = getU16BE(tables[i].offset + 8, &ok);
- if (!ok) {
- return 4;
- }
- if (fsType & 0x0008) {
- return 2;
- }
- if (fsType & 0x0004) {
- return 1;
- }
- if (fsType & 0x0002) {
- return 0;
- }
- return 3;
-}
-
-void FoFiTrueType::convertToType42(char *psName, char **encoding,
- Gushort *codeToGID,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- GString *buf;
- GBool ok;
-
- if (openTypeCFF) {
- return;
- }
-
- // write the header
- ok = gTrue;
- buf = GString::format("%!PS-TrueTypeFont-{0:2g}\n",
- (double)getS32BE(0, &ok) / 65536.0);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
-
- // begin the font dictionary
- (*outputFunc)(outputStream, "10 dict begin\n", 14);
- (*outputFunc)(outputStream, "/FontName /", 11);
- (*outputFunc)(outputStream, psName, strlen(psName));
- (*outputFunc)(outputStream, " def\n", 5);
- (*outputFunc)(outputStream, "/FontType 42 def\n", 17);
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- buf = GString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n",
- bbox[0], bbox[1], bbox[2], bbox[3]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/PaintType 0 def\n", 17);
-
- // write the guts of the dictionary
- cvtEncoding(encoding, outputFunc, outputStream);
- cvtCharStrings(encoding, codeToGID, outputFunc, outputStream);
- cvtSfnts(outputFunc, outputStream, NULL, gFalse);
-
- // end the dictionary and define the font
- (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40);
-}
-
-void FoFiTrueType::convertToType1(char *psName, char **newEncoding,
- GBool ascii, FoFiOutputFunc outputFunc,
- void *outputStream) {
- FoFiType1C *ff;
- int i;
-
- if (!openTypeCFF) {
- return;
- }
- i = seekTable("CFF ");
- if (!checkRegion(tables[i].offset, tables[i].len)) {
- return;
- }
- if (!(ff = FoFiType1C::make((char *)file + tables[i].offset,
- tables[i].len))) {
- return;
- }
- ff->convertToType1(psName, newEncoding, ascii, outputFunc, outputStream);
- delete ff;
-}
-
-void FoFiTrueType::convertToCIDType2(char *psName,
- Gushort *cidMap, int nCIDs,
- GBool needVerticalMetrics,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- GString *buf;
- Gushort cid;
- GBool ok;
- int i, j, k;
-
- if (openTypeCFF) {
- return;
- }
-
- // write the header
- ok = gTrue;
- buf = GString::format("%!PS-TrueTypeFont-{0:2g}\n",
- (double)getS32BE(0, &ok) / 65536.0);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
-
- // begin the font dictionary
- (*outputFunc)(outputStream, "20 dict begin\n", 14);
- (*outputFunc)(outputStream, "/CIDFontName /", 14);
- (*outputFunc)(outputStream, psName, strlen(psName));
- (*outputFunc)(outputStream, " def\n", 5);
- (*outputFunc)(outputStream, "/CIDFontType 2 def\n", 19);
- (*outputFunc)(outputStream, "/FontType 42 def\n", 17);
- (*outputFunc)(outputStream, "/CIDSystemInfo 3 dict dup begin\n", 32);
- (*outputFunc)(outputStream, " /Registry (Adobe) def\n", 24);
- (*outputFunc)(outputStream, " /Ordering (Identity) def\n", 27);
- (*outputFunc)(outputStream, " /Supplement 0 def\n", 20);
- (*outputFunc)(outputStream, " end def\n", 10);
- (*outputFunc)(outputStream, "/GDBytes 2 def\n", 15);
- if (cidMap) {
- buf = GString::format("/CIDCount {0:d} def\n", nCIDs);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- if (nCIDs > 32767) {
- (*outputFunc)(outputStream, "/CIDMap [", 9);
- for (i = 0; i < nCIDs; i += 32768 - 16) {
- (*outputFunc)(outputStream, "<\n", 2);
- for (j = 0; j < 32768 - 16 && i+j < nCIDs; j += 16) {
- (*outputFunc)(outputStream, " ", 2);
- for (k = 0; k < 16 && i+j+k < nCIDs; ++k) {
- cid = cidMap[i+j+k];
- buf = GString::format("{0:02x}{1:02x}",
- (cid >> 8) & 0xff, cid & 0xff);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "\n", 1);
- }
- (*outputFunc)(outputStream, " >", 3);
- }
- (*outputFunc)(outputStream, "\n", 1);
- (*outputFunc)(outputStream, "] def\n", 6);
- } else {
- (*outputFunc)(outputStream, "/CIDMap <\n", 10);
- for (i = 0; i < nCIDs; i += 16) {
- (*outputFunc)(outputStream, " ", 2);
- for (j = 0; j < 16 && i+j < nCIDs; ++j) {
- cid = cidMap[i+j];
- buf = GString::format("{0:02x}{1:02x}",
- (cid >> 8) & 0xff, cid & 0xff);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "\n", 1);
- }
- (*outputFunc)(outputStream, "> def\n", 6);
- }
- } else {
- // direct mapping - just fill the string(s) with s[i]=i
- buf = GString::format("/CIDCount {0:d} def\n", nGlyphs);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- if (nGlyphs > 32767) {
- (*outputFunc)(outputStream, "/CIDMap [\n", 10);
- for (i = 0; i < nGlyphs; i += 32767) {
- j = nGlyphs - i < 32767 ? nGlyphs - i : 32767;
- buf = GString::format(" {0:d} string 0 1 {1:d} {{\n", 2 * j, j - 1);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format(" 2 copy dup 2 mul exch {0:d} add -8 bitshift put\n",
- i);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format(" 1 index exch dup 2 mul 1 add exch {0:d} add"
- " 255 and put\n", i);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, " } for\n", 8);
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- } else {
- buf = GString::format("/CIDMap {0:d} string\n", 2 * nGlyphs);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format(" 0 1 {0:d} {{\n", nGlyphs - 1);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream,
- " 2 copy dup 2 mul exch -8 bitshift put\n", 42);
- (*outputFunc)(outputStream,
- " 1 index exch dup 2 mul 1 add exch 255 and put\n", 50);
- (*outputFunc)(outputStream, " } for\n", 8);
- (*outputFunc)(outputStream, "def\n", 4);
- }
- }
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- buf = GString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n",
- bbox[0], bbox[1], bbox[2], bbox[3]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/PaintType 0 def\n", 17);
- (*outputFunc)(outputStream, "/Encoding [] readonly def\n", 26);
- (*outputFunc)(outputStream, "/CharStrings 1 dict dup begin\n", 30);
- (*outputFunc)(outputStream, " /.notdef 0 def\n", 17);
- (*outputFunc)(outputStream, " end readonly def\n", 19);
-
- // write the guts of the dictionary
- cvtSfnts(outputFunc, outputStream, NULL, needVerticalMetrics);
-
- // end the dictionary and define the font
- (*outputFunc)(outputStream,
- "CIDFontName currentdict end /CIDFont defineresource pop\n",
- 56);
-}
-
-void FoFiTrueType::convertToCIDType0(char *psName,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- FoFiType1C *ff;
- int i;
-
- if (!openTypeCFF) {
- return;
- }
- i = seekTable("CFF ");
- if (!checkRegion(tables[i].offset, tables[i].len)) {
- return;
- }
- if (!(ff = FoFiType1C::make((char *)file + tables[i].offset,
- tables[i].len))) {
- return;
- }
- ff->convertToCIDType0(psName, outputFunc, outputStream);
- delete ff;
-}
-
-void FoFiTrueType::convertToType0(char *psName, Gushort *cidMap, int nCIDs,
- GBool needVerticalMetrics,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- GString *buf;
- GString *sfntsName;
- int n, i, j;
-
- if (openTypeCFF) {
- return;
- }
-
- // write the Type 42 sfnts array
- sfntsName = (new GString(psName))->append("_sfnts");
- cvtSfnts(outputFunc, outputStream, sfntsName, needVerticalMetrics);
- delete sfntsName;
-
- // write the descendant Type 42 fonts
- n = cidMap ? nCIDs : nGlyphs;
- for (i = 0; i < n; i += 256) {
- (*outputFunc)(outputStream, "10 dict begin\n", 14);
- (*outputFunc)(outputStream, "/FontName /", 11);
- (*outputFunc)(outputStream, psName, strlen(psName));
- buf = GString::format("_{0:02x} def\n", i >> 8);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/FontType 42 def\n", 17);
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- buf = GString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n",
- bbox[0], bbox[1], bbox[2], bbox[3]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/PaintType 0 def\n", 17);
- (*outputFunc)(outputStream, "/sfnts ", 7);
- (*outputFunc)(outputStream, psName, strlen(psName));
- (*outputFunc)(outputStream, "_sfnts def\n", 11);
- (*outputFunc)(outputStream, "/Encoding 256 array\n", 20);
- for (j = 0; j < 256 && i+j < n; ++j) {
- buf = GString::format("dup {0:d} /c{1:02x} put\n", j, j);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "readonly def\n", 13);
- (*outputFunc)(outputStream, "/CharStrings 257 dict dup begin\n", 32);
- (*outputFunc)(outputStream, "/.notdef 0 def\n", 15);
- for (j = 0; j < 256 && i+j < n; ++j) {
- buf = GString::format("/c{0:02x} {1:d} def\n",
- j, cidMap ? cidMap[i+j] : i+j);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "end readonly def\n", 17);
- (*outputFunc)(outputStream,
- "FontName currentdict end definefont pop\n", 40);
- }
-
- // write the Type 0 parent font
- (*outputFunc)(outputStream, "16 dict begin\n", 14);
- (*outputFunc)(outputStream, "/FontName /", 11);
- (*outputFunc)(outputStream, psName, strlen(psName));
- (*outputFunc)(outputStream, " def\n", 5);
- (*outputFunc)(outputStream, "/FontType 0 def\n", 16);
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- (*outputFunc)(outputStream, "/FMapType 2 def\n", 16);
- (*outputFunc)(outputStream, "/Encoding [\n", 12);
- for (i = 0; i < n; i += 256) {
- buf = GString::format("{0:d}\n", i >> 8);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- (*outputFunc)(outputStream, "/FDepVector [\n", 14);
- for (i = 0; i < n; i += 256) {
- (*outputFunc)(outputStream, "/", 1);
- (*outputFunc)(outputStream, psName, strlen(psName));
- buf = GString::format("_{0:02x} findfont\n", i >> 8);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40);
-}
-
-void FoFiTrueType::convertToType0(char *psName,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- FoFiType1C *ff;
- int i;
-
- if (!openTypeCFF) {
- return;
- }
- i = seekTable("CFF ");
- if (!checkRegion(tables[i].offset, tables[i].len)) {
- return;
- }
- if (!(ff = FoFiType1C::make((char *)file + tables[i].offset,
- tables[i].len))) {
- return;
- }
- ff->convertToType0(psName, outputFunc, outputStream);
- delete ff;
-}
-
-void FoFiTrueType::writeTTF(FoFiOutputFunc outputFunc,
- void *outputStream, char *name,
- Gushort *codeToGID) {
- // this substitute cmap table maps char codes 0000-ffff directly to
- // glyphs 0000-ffff
- static char cmapTab[36] = {
- 0, 0, // table version number
- 0, 1, // number of encoding tables
- 0, 1, // platform ID
- 0, 0, // encoding ID
- 0, 0, 0, 12, // offset of subtable
- 0, 4, // subtable format
- 0, 24, // subtable length
- 0, 0, // subtable version
- 0, 2, // segment count * 2
- 0, 2, // 2 * 2 ^ floor(log2(segCount))
- 0, 0, // floor(log2(segCount))
- 0, 0, // 2*segCount - 2*2^floor(log2(segCount))
- (char)0xff, (char)0xff, // endCount[0]
- 0, 0, // reserved
- 0, 0, // startCount[0]
- 0, 0, // idDelta[0]
- 0, 0 // pad to a mulitple of four bytes
- };
- static char nameTab[8] = {
- 0, 0, // format
- 0, 0, // number of name records
- 0, 6, // offset to start of string storage
- 0, 0 // pad to multiple of four bytes
- };
- static char postTab[32] = {
- 0, 1, 0, 0, // format
- 0, 0, 0, 0, // italic angle
- 0, 0, // underline position
- 0, 0, // underline thickness
- 0, 0, 0, 0, // fixed pitch
- 0, 0, 0, 0, // min Type 42 memory
- 0, 0, 0, 0, // max Type 42 memory
- 0, 0, 0, 0, // min Type 1 memory
- 0, 0, 0, 0 // max Type 1 memory
- };
- static char os2Tab[86] = {
- 0, 1, // version
- 0, 1, // xAvgCharWidth
- 0, 0, // usWeightClass
- 0, 0, // usWidthClass
- 0, 0, // fsType
- 0, 0, // ySubscriptXSize
- 0, 0, // ySubscriptYSize
- 0, 0, // ySubscriptXOffset
- 0, 0, // ySubscriptYOffset
- 0, 0, // ySuperscriptXSize
- 0, 0, // ySuperscriptYSize
- 0, 0, // ySuperscriptXOffset
- 0, 0, // ySuperscriptYOffset
- 0, 0, // yStrikeoutSize
- 0, 0, // yStrikeoutPosition
- 0, 0, // sFamilyClass
- 0, 0, 0, 0, 0, // panose
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, // ulUnicodeRange1
- 0, 0, 0, 0, // ulUnicodeRange2
- 0, 0, 0, 0, // ulUnicodeRange3
- 0, 0, 0, 0, // ulUnicodeRange4
- 0, 0, 0, 0, // achVendID
- 0, 0, // fsSelection
- 0, 0, // usFirstCharIndex
- 0, 0, // usLastCharIndex
- 0, 0, // sTypoAscender
- 0, 0, // sTypoDescender
- 0, 0, // sTypoLineGap
- 0, 0, // usWinAscent
- 0, 0, // usWinDescent
- 0, 0, 0, 0, // ulCodePageRange1
- 0, 0, 0, 0 // ulCodePageRange2
- };
- GBool missingCmap, missingName, missingPost, missingOS2;
- GBool unsortedLoca, badCmapLen, abbrevHMTX;
- int nZeroLengthTables;
- int nHMetrics, advWidth, lsb;
- TrueTypeLoca *locaTable;
- TrueTypeTable *newTables;
- char *newNameTab, *newCmapTab, *newHHEATab, *newHMTXTab;
- int nNewTables, cmapIdx, cmapLen, glyfLen, newNameLen, newCmapLen, next;
- int newHHEALen, newHMTXLen;
- Guint locaChecksum, glyfChecksum, fileChecksum;
- char *tableDir;
- char locaBuf[4], checksumBuf[4];
- GBool ok;
- Guint t;
- int pos, i, j, k, n;
-
- if (openTypeCFF) {
- return;
- }
-
- // check for missing tables
- // (Note: if the OS/2 table is missing, the Microsoft PCL5 driver
- // will embed a PCL TrueType font with the pitch field set to zero,
- // which apparently causes divide-by-zero errors. As far as I can
- // tell, the only important field in the OS/2 table is
- // xAvgCharWidth.)
- missingCmap = (cmapIdx = seekTable("cmap")) < 0;
- missingName = seekTable("name") < 0;
- missingPost = seekTable("post") < 0;
- missingOS2 = seekTable("OS/2") < 0;
-
- // read the loca table, check to see if it's sorted
- locaTable = (TrueTypeLoca *)gmallocn(nGlyphs + 1, sizeof(TrueTypeLoca));
- unsortedLoca = gFalse;
- i = seekTable("loca");
- pos = tables[i].offset;
- ok = gTrue;
- for (i = 0; i <= nGlyphs; ++i) {
- if (locaFmt) {
- locaTable[i].origOffset = (int)getU32BE(pos + i*4, &ok);
- } else {
- locaTable[i].origOffset = 2 * getU16BE(pos + i*2, &ok);
- }
- if (i > 0 && locaTable[i].origOffset < locaTable[i-1].origOffset) {
- unsortedLoca = gTrue;
- }
- // glyph descriptions must be at least 12 bytes long (nContours,
- // xMin, yMin, xMax, yMax, instructionLength - two bytes each);
- // invalid glyph descriptions (even if they're never used) make
- // Windows choke, so we work around that problem here (ideally,
- // this would parse the glyph descriptions in the glyf table and
- // remove any that were invalid, but this quick test is a decent
- // start)
- if (i > 0 &&
- locaTable[i].origOffset - locaTable[i-1].origOffset > 0 &&
- locaTable[i].origOffset - locaTable[i-1].origOffset < 12) {
- locaTable[i-1].origOffset = locaTable[i].origOffset;
- unsortedLoca = gTrue;
- }
- locaTable[i].idx = i;
- }
-
- // check for zero-length tables
- nZeroLengthTables = 0;
- for (i = 0; i < nTables; ++i) {
- if (tables[i].len == 0) {
- ++nZeroLengthTables;
- }
- }
-
- // check for an incorrect cmap table length
- badCmapLen = gFalse;
- cmapLen = 0; // make gcc happy
- if (!missingCmap) {
- cmapLen = cmaps[0].offset + cmaps[0].len;
- for (i = 1; i < nCmaps; ++i) {
- if (cmaps[i].offset + cmaps[i].len > cmapLen) {
- cmapLen = cmaps[i].offset + cmaps[i].len;
- }
- }
- cmapLen -= tables[cmapIdx].offset;
- if (cmapLen > tables[cmapIdx].len) {
- badCmapLen = gTrue;
- }
- }
-
- // check for an abbreviated hmtx table (this is completely legal,
- // but confuses the Microsoft PCL5 printer driver, which generates
- // embedded fonts with the pitch field set to zero)
- i = seekTable("hhea");
- nHMetrics = getU16BE(tables[i].offset + 34, &ok);
- abbrevHMTX = nHMetrics < nGlyphs;
-
- // if nothing is broken, just write the TTF file as is
- if (!missingCmap && !missingName && !missingPost && !missingOS2 &&
- !unsortedLoca && !badCmapLen && !abbrevHMTX && nZeroLengthTables == 0 &&
- !name && !codeToGID) {
- (*outputFunc)(outputStream, (char *)file, len);
- goto done1;
- }
-
- // sort the 'loca' table: some (non-compliant) fonts have
- // out-of-order loca tables; in order to correctly handle the case
- // where (compliant) fonts have empty entries in the middle of the
- // table, cmpTrueTypeLocaOffset uses offset as its primary sort key,
- // and idx as its secondary key (ensuring that adjacent entries with
- // the same pos value remain in the same order)
- glyfLen = 0; // make gcc happy
- if (unsortedLoca) {
- qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca),
- &cmpTrueTypeLocaOffset);
- for (i = 0; i < nGlyphs; ++i) {
- locaTable[i].len = locaTable[i+1].origOffset - locaTable[i].origOffset;
- }
- locaTable[nGlyphs].len = 0;
- qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca),
- &cmpTrueTypeLocaIdx);
- pos = 0;
- for (i = 0; i <= nGlyphs; ++i) {
- locaTable[i].newOffset = pos;
- pos += locaTable[i].len;
- if (pos & 3) {
- pos += 4 - (pos & 3);
- }
- }
- glyfLen = pos;
- }
-
- // compute checksums for the loca and glyf tables
- locaChecksum = glyfChecksum = 0;
- if (unsortedLoca) {
- if (locaFmt) {
- for (j = 0; j <= nGlyphs; ++j) {
- locaChecksum += locaTable[j].newOffset;
- }
- } else {
- for (j = 0; j <= nGlyphs; j += 2) {
- locaChecksum += locaTable[j].newOffset << 16;
- if (j + 1 <= nGlyphs) {
- locaChecksum += locaTable[j+1].newOffset;
- }
- }
- }
- pos = tables[seekTable("glyf")].offset;
- for (j = 0; j < nGlyphs; ++j) {
- n = locaTable[j].len;
- if (n > 0) {
- k = locaTable[j].origOffset;
- if (checkRegion(pos + k, n)) {
- glyfChecksum += computeTableChecksum(file + pos + k, n);
- }
- }
- }
- }
-
- // construct the new name table
- if (name) {
- n = strlen(name);
- newNameLen = (6 + 4*12 + 2 * (3*n + 7) + 3) & ~3;
- newNameTab = (char *)gmalloc(newNameLen);
- memset(newNameTab, 0, newNameLen);
- newNameTab[0] = 0; // format selector
- newNameTab[1] = 0;
- newNameTab[2] = 0; // number of name records
- newNameTab[3] = 4;
- newNameTab[4] = 0; // offset to start of string storage
- newNameTab[5] = 6 + 4*12;
- next = 0;
- for (i = 0; i < 4; ++i) {
- newNameTab[6 + i*12 + 0] = 0; // platform ID = Microsoft
- newNameTab[6 + i*12 + 1] = 3;
- newNameTab[6 + i*12 + 2] = 0; // encoding ID = Unicode
- newNameTab[6 + i*12 + 3] = 1;
- newNameTab[6 + i*12 + 4] = 0x04; // language ID = American English
- newNameTab[6 + i*12 + 5] = 0x09;
- newNameTab[6 + i*12 + 6] = 0; // name ID
- newNameTab[6 + i*12 + 7] = i + 1;
- newNameTab[6 + i*12 + 8] = i+1 == 2 ? 0 : ((2*n) >> 8); // string length
- newNameTab[6 + i*12 + 9] = i+1 == 2 ? 14 : ((2*n) & 0xff);
- newNameTab[6 + i*12 + 10] = next >> 8; // string offset
- newNameTab[6 + i*12 + 11] = next & 0xff;
- if (i+1 == 2) {
- memcpy(newNameTab + 6 + 4*12 + next, "\0R\0e\0g\0u\0l\0a\0r", 14);
- next += 14;
- } else {
- for (j = 0; j < n; ++j) {
- newNameTab[6 + 4*12 + next + 2*j] = 0;
- newNameTab[6 + 4*12 + next + 2*j + 1] = name[j];
- }
- next += 2*n;
- }
- }
- } else {
- newNameLen = 0;
- newNameTab = NULL;
- }
-
- // construct the new cmap table
- if (codeToGID) {
- newCmapLen = 44 + 256 * 2;
- newCmapTab = (char *)gmalloc(newCmapLen);
- newCmapTab[0] = 0; // table version number = 0
- newCmapTab[1] = 0;
- newCmapTab[2] = 0; // number of encoding tables = 1
- newCmapTab[3] = 1;
- newCmapTab[4] = 0; // platform ID = Microsoft
- newCmapTab[5] = 3;
- newCmapTab[6] = 0; // encoding ID = Unicode
- newCmapTab[7] = 1;
- newCmapTab[8] = 0; // offset of subtable
- newCmapTab[9] = 0;
- newCmapTab[10] = 0;
- newCmapTab[11] = 12;
- newCmapTab[12] = 0; // subtable format = 4
- newCmapTab[13] = 4;
- newCmapTab[14] = 0x02; // subtable length
- newCmapTab[15] = 0x20;
- newCmapTab[16] = 0; // subtable version = 0
- newCmapTab[17] = 0;
- newCmapTab[18] = 0; // segment count * 2
- newCmapTab[19] = 4;
- newCmapTab[20] = 0; // 2 * 2 ^ floor(log2(segCount))
- newCmapTab[21] = 4;
- newCmapTab[22] = 0; // floor(log2(segCount))
- newCmapTab[23] = 1;
- newCmapTab[24] = 0; // 2*segCount - 2*2^floor(log2(segCount))
- newCmapTab[25] = 0;
- newCmapTab[26] = 0x00; // endCount[0]
- newCmapTab[27] = (char)0xff;
- newCmapTab[28] = (char)0xff; // endCount[1]
- newCmapTab[29] = (char)0xff;
- newCmapTab[30] = 0; // reserved
- newCmapTab[31] = 0;
- newCmapTab[32] = 0x00; // startCount[0]
- newCmapTab[33] = 0x00;
- newCmapTab[34] = (char)0xff; // startCount[1]
- newCmapTab[35] = (char)0xff;
- newCmapTab[36] = 0; // idDelta[0]
- newCmapTab[37] = 0;
- newCmapTab[38] = 0; // idDelta[1]
- newCmapTab[39] = 1;
- newCmapTab[40] = 0; // idRangeOffset[0]
- newCmapTab[41] = 4;
- newCmapTab[42] = 0; // idRangeOffset[1]
- newCmapTab[43] = 0;
- for (i = 0; i < 256; ++i) {
- newCmapTab[44 + 2*i] = codeToGID[i] >> 8;
- newCmapTab[44 + 2*i + 1] = codeToGID[i] & 0xff;
- }
- } else {
- newCmapLen = 0;
- newCmapTab = NULL;
- }
-
- // generate the new hmtx table and the updated hhea table
- if (abbrevHMTX) {
- i = seekTable("hhea");
- pos = tables[i].offset;
- newHHEALen = 36;
- newHHEATab = (char *)gmalloc(newHHEALen);
- for (i = 0; i < newHHEALen; ++i) {
- newHHEATab[i] = getU8(pos++, &ok);
- }
- newHHEATab[34] = nGlyphs >> 8;
- newHHEATab[35] = nGlyphs & 0xff;
- i = seekTable("hmtx");
- pos = tables[i].offset;
- newHMTXLen = 4 * nGlyphs;
- newHMTXTab = (char *)gmalloc(newHMTXLen);
- advWidth = 0;
- for (i = 0; i < nHMetrics; ++i) {
- advWidth = getU16BE(pos, &ok);
- lsb = getU16BE(pos + 2, &ok);
- pos += 4;
- newHMTXTab[4*i ] = advWidth >> 8;
- newHMTXTab[4*i + 1] = advWidth & 0xff;
- newHMTXTab[4*i + 2] = lsb >> 8;
- newHMTXTab[4*i + 3] = lsb & 0xff;
- }
- for (; i < nGlyphs; ++i) {
- lsb = getU16BE(pos, &ok);
- pos += 2;
- newHMTXTab[4*i ] = advWidth >> 8;
- newHMTXTab[4*i + 1] = advWidth & 0xff;
- newHMTXTab[4*i + 2] = lsb >> 8;
- newHMTXTab[4*i + 3] = lsb & 0xff;
- }
- } else {
- newHHEATab = newHMTXTab = NULL;
- newHHEALen = newHMTXLen = 0; // make gcc happy
- }
-
- // construct the new table directory:
- // - keep all original tables with non-zero length
- // - fix the cmap table's length, if necessary
- // - add missing tables
- // - sort the table by tag
- // - compute new table positions, including 4-byte alignment
- // - (re)compute table checksums
- nNewTables = nTables - nZeroLengthTables +
- (missingCmap ? 1 : 0) + (missingName ? 1 : 0) +
- (missingPost ? 1 : 0) + (missingOS2 ? 1 : 0);
- newTables = (TrueTypeTable *)gmallocn(nNewTables, sizeof(TrueTypeTable));
- j = 0;
- for (i = 0; i < nTables; ++i) {
- if (tables[i].len > 0) {
- newTables[j] = tables[i];
- newTables[j].origOffset = tables[i].offset;
- if (checkRegion(tables[i].offset, newTables[i].len)) {
- newTables[j].checksum =
- computeTableChecksum(file + tables[i].offset, tables[i].len);
- if (tables[i].tag == headTag) {
- // don't include the file checksum
- newTables[j].checksum -= getU32BE(tables[i].offset + 8, &ok);
- }
- }
- if (newTables[j].tag == cmapTag && codeToGID) {
- newTables[j].len = newCmapLen;
- newTables[j].checksum = computeTableChecksum((Guchar *)newCmapTab,
- newCmapLen);
- } else if (newTables[j].tag == cmapTag && badCmapLen) {
- newTables[j].len = cmapLen;
- } else if (newTables[j].tag == locaTag && unsortedLoca) {
- newTables[j].len = (nGlyphs + 1) * (locaFmt ? 4 : 2);
- newTables[j].checksum = locaChecksum;
- } else if (newTables[j].tag == glyfTag && unsortedLoca) {
- newTables[j].len = glyfLen;
- newTables[j].checksum = glyfChecksum;
- } else if (newTables[j].tag == nameTag && name) {
- newTables[j].len = newNameLen;
- newTables[j].checksum = computeTableChecksum((Guchar *)newNameTab,
- newNameLen);
- } else if (newTables[j].tag == hheaTag && abbrevHMTX) {
- newTables[j].len = newHHEALen;
- newTables[j].checksum = computeTableChecksum((Guchar *)newHHEATab,
- newHHEALen);
- } else if (newTables[j].tag == hmtxTag && abbrevHMTX) {
- newTables[j].len = newHMTXLen;
- newTables[j].checksum = computeTableChecksum((Guchar *)newHMTXTab,
- newHMTXLen);
- }
- ++j;
- }
- }
- if (missingCmap) {
- newTables[j].tag = cmapTag;
- if (codeToGID) {
- newTables[j].checksum = computeTableChecksum((Guchar *)newCmapTab,
- newCmapLen);
- newTables[j].len = newCmapLen;
- } else {
- newTables[j].checksum = computeTableChecksum((Guchar *)cmapTab,
- sizeof(cmapTab));
- newTables[j].len = sizeof(cmapTab);
- }
- ++j;
- }
- if (missingName) {
- newTables[j].tag = nameTag;
- if (name) {
- newTables[j].checksum = computeTableChecksum((Guchar *)newNameTab,
- newNameLen);
- newTables[j].len = newNameLen;
- } else {
- newTables[j].checksum = computeTableChecksum((Guchar *)nameTab,
- sizeof(nameTab));
- newTables[j].len = sizeof(nameTab);
- }
- ++j;
- }
- if (missingPost) {
- newTables[j].tag = postTag;
- newTables[j].checksum = computeTableChecksum((Guchar *)postTab,
- sizeof(postTab));
- newTables[j].len = sizeof(postTab);
- ++j;
- }
- if (missingOS2) {
- newTables[j].tag = os2Tag;
- newTables[j].checksum = computeTableChecksum((Guchar *)os2Tab,
- sizeof(os2Tab));
- newTables[j].len = sizeof(os2Tab);
- ++j;
- }
- qsort(newTables, nNewTables, sizeof(TrueTypeTable),
- &cmpTrueTypeTableTag);
- pos = 12 + nNewTables * 16;
- for (i = 0; i < nNewTables; ++i) {
- newTables[i].offset = pos;
- pos += newTables[i].len;
- if (pos & 3) {
- pos += 4 - (pos & 3);
- }
- }
-
- // write the table directory
- tableDir = (char *)gmalloc(12 + nNewTables * 16);
- tableDir[0] = 0x00; // sfnt version
- tableDir[1] = 0x01;
- tableDir[2] = 0x00;
- tableDir[3] = 0x00;
- tableDir[4] = (char)((nNewTables >> 8) & 0xff); // numTables
- tableDir[5] = (char)(nNewTables & 0xff);
- for (i = -1, t = (Guint)nNewTables; t; ++i, t >>= 1) ;
- t = 1 << (4 + i);
- tableDir[6] = (char)((t >> 8) & 0xff); // searchRange
- tableDir[7] = (char)(t & 0xff);
- tableDir[8] = (char)((i >> 8) & 0xff); // entrySelector
- tableDir[9] = (char)(i & 0xff);
- t = nNewTables * 16 - t;
- tableDir[10] = (char)((t >> 8) & 0xff); // rangeShift
- tableDir[11] = (char)(t & 0xff);
- pos = 12;
- for (i = 0; i < nNewTables; ++i) {
- tableDir[pos ] = (char)(newTables[i].tag >> 24);
- tableDir[pos+ 1] = (char)(newTables[i].tag >> 16);
- tableDir[pos+ 2] = (char)(newTables[i].tag >> 8);
- tableDir[pos+ 3] = (char) newTables[i].tag;
- tableDir[pos+ 4] = (char)(newTables[i].checksum >> 24);
- tableDir[pos+ 5] = (char)(newTables[i].checksum >> 16);
- tableDir[pos+ 6] = (char)(newTables[i].checksum >> 8);
- tableDir[pos+ 7] = (char) newTables[i].checksum;
- tableDir[pos+ 8] = (char)(newTables[i].offset >> 24);
- tableDir[pos+ 9] = (char)(newTables[i].offset >> 16);
- tableDir[pos+10] = (char)(newTables[i].offset >> 8);
- tableDir[pos+11] = (char) newTables[i].offset;
- tableDir[pos+12] = (char)(newTables[i].len >> 24);
- tableDir[pos+13] = (char)(newTables[i].len >> 16);
- tableDir[pos+14] = (char)(newTables[i].len >> 8);
- tableDir[pos+15] = (char) newTables[i].len;
- pos += 16;
- }
- (*outputFunc)(outputStream, tableDir, 12 + nNewTables * 16);
-
- // compute the file checksum
- fileChecksum = computeTableChecksum((Guchar *)tableDir,
- 12 + nNewTables * 16);
- for (i = 0; i < nNewTables; ++i) {
- fileChecksum += newTables[i].checksum;
- }
- fileChecksum = 0xb1b0afba - fileChecksum;
-
- // write the tables
- for (i = 0; i < nNewTables; ++i) {
- if (newTables[i].tag == headTag) {
- if (checkRegion(newTables[i].origOffset, newTables[i].len)) {
- (*outputFunc)(outputStream, (char *)file + newTables[i].origOffset, 8);
- checksumBuf[0] = fileChecksum >> 24;
- checksumBuf[1] = fileChecksum >> 16;
- checksumBuf[2] = fileChecksum >> 8;
- checksumBuf[3] = fileChecksum;
- (*outputFunc)(outputStream, checksumBuf, 4);
- (*outputFunc)(outputStream,
- (char *)file + newTables[i].origOffset + 12,
- newTables[i].len - 12);
- } else {
- for (j = 0; j < newTables[i].len; ++j) {
- (*outputFunc)(outputStream, "\0", 1);
- }
- }
- } else if (newTables[i].tag == cmapTag && codeToGID) {
- (*outputFunc)(outputStream, newCmapTab, newTables[i].len);
- } else if (newTables[i].tag == cmapTag && missingCmap) {
- (*outputFunc)(outputStream, cmapTab, newTables[i].len);
- } else if (newTables[i].tag == nameTag && name) {
- (*outputFunc)(outputStream, newNameTab, newTables[i].len);
- } else if (newTables[i].tag == nameTag && missingName) {
- (*outputFunc)(outputStream, nameTab, newTables[i].len);
- } else if (newTables[i].tag == postTag && missingPost) {
- (*outputFunc)(outputStream, postTab, newTables[i].len);
- } else if (newTables[i].tag == os2Tag && missingOS2) {
- (*outputFunc)(outputStream, os2Tab, newTables[i].len);
- } else if (newTables[i].tag == hheaTag && abbrevHMTX) {
- (*outputFunc)(outputStream, newHHEATab, newTables[i].len);
- } else if (newTables[i].tag == hmtxTag && abbrevHMTX) {
- (*outputFunc)(outputStream, newHMTXTab, newTables[i].len);
- } else if (newTables[i].tag == locaTag && unsortedLoca) {
- for (j = 0; j <= nGlyphs; ++j) {
- if (locaFmt) {
- locaBuf[0] = (char)(locaTable[j].newOffset >> 24);
- locaBuf[1] = (char)(locaTable[j].newOffset >> 16);
- locaBuf[2] = (char)(locaTable[j].newOffset >> 8);
- locaBuf[3] = (char) locaTable[j].newOffset;
- (*outputFunc)(outputStream, locaBuf, 4);
- } else {
- locaBuf[0] = (char)(locaTable[j].newOffset >> 9);
- locaBuf[1] = (char)(locaTable[j].newOffset >> 1);
- (*outputFunc)(outputStream, locaBuf, 2);
- }
- }
- } else if (newTables[i].tag == glyfTag && unsortedLoca) {
- pos = tables[seekTable("glyf")].offset;
- for (j = 0; j < nGlyphs; ++j) {
- n = locaTable[j].len;
- if (n > 0) {
- k = locaTable[j].origOffset;
- if (checkRegion(pos + k, n)) {
- (*outputFunc)(outputStream, (char *)file + pos + k, n);
- } else {
- for (k = 0; k < n; ++k) {
- (*outputFunc)(outputStream, "\0", 1);
- }
- }
- if ((k = locaTable[j].len & 3)) {
- (*outputFunc)(outputStream, "\0\0\0\0", 4 - k);
- }
- }
- }
- } else {
- if (checkRegion(newTables[i].origOffset, newTables[i].len)) {
- (*outputFunc)(outputStream, (char *)file + newTables[i].origOffset,
- newTables[i].len);
- } else {
- for (j = 0; j < newTables[i].len; ++j) {
- (*outputFunc)(outputStream, "\0", 1);
- }
- }
- }
- if (newTables[i].len & 3) {
- (*outputFunc)(outputStream, "\0\0\0", 4 - (newTables[i].len & 3));
- }
- }
-
- gfree(newHMTXTab);
- gfree(newHHEATab);
- gfree(newCmapTab);
- gfree(newNameTab);
- gfree(tableDir);
- gfree(newTables);
- done1:
- gfree(locaTable);
-}
-
-void FoFiTrueType::cvtEncoding(char **encoding,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- char *name;
- GString *buf;
- int i;
-
- (*outputFunc)(outputStream, "/Encoding 256 array\n", 20);
- if (encoding) {
- for (i = 0; i < 256; ++i) {
- if (!(name = encoding[i])) {
- name = ".notdef";
- }
- buf = GString::format("dup {0:d} /", i);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, name, strlen(name));
- (*outputFunc)(outputStream, " put\n", 5);
- }
- } else {
- for (i = 0; i < 256; ++i) {
- buf = GString::format("dup {0:d} /c{1:02x} put\n", i, i);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- }
- (*outputFunc)(outputStream, "readonly def\n", 13);
-}
-
-void FoFiTrueType::cvtCharStrings(char **encoding,
- Gushort *codeToGID,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- char *name;
- GString *buf;
- char buf2[16];
- int i, k;
-
- // always define '.notdef'
- (*outputFunc)(outputStream, "/CharStrings 256 dict dup begin\n", 32);
- (*outputFunc)(outputStream, "/.notdef 0 def\n", 15);
-
- // if there's no 'cmap' table, punt
- if (nCmaps == 0) {
- goto err;
- }
-
- // map char name to glyph index:
- // 1. use encoding to map name to char code
- // 2. use codeToGID to map char code to glyph index
- // N.B. We do this in reverse order because font subsets can have
- // weird encodings that use the same character name twice, and
- // the first definition is probably the one we want.
- k = 0; // make gcc happy
- for (i = 255; i >= 0; --i) {
- if (encoding) {
- name = encoding[i];
- } else {
- sprintf(buf2, "c%02x", i);
- name = buf2;
- }
- if (name && strcmp(name, ".notdef")) {
- k = codeToGID[i];
- // note: Distiller (maybe Adobe's PS interpreter in general)
- // doesn't like TrueType fonts that have CharStrings entries
- // which point to nonexistent glyphs, hence the (k < nGlyphs)
- // test
- if (k > 0 && k < nGlyphs) {
- (*outputFunc)(outputStream, "/", 1);
- (*outputFunc)(outputStream, name, strlen(name));
- buf = GString::format(" {0:d} def\n", k);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- }
- }
-
- err:
- (*outputFunc)(outputStream, "end readonly def\n", 17);
-}
-
-void FoFiTrueType::cvtSfnts(FoFiOutputFunc outputFunc,
- void *outputStream, GString *name,
- GBool needVerticalMetrics) {
- Guchar headData[54];
- TrueTypeLoca *locaTable;
- Guchar *locaData;
- TrueTypeTable newTables[nT42Tables];
- Guchar tableDir[12 + nT42Tables*16];
- GBool ok;
- Guint checksum;
- int nNewTables;
- int length, pos, glyfPos, i, j, k;
- Guchar vheaTab[36] = {
- 0, 1, 0, 0, // table version number
- 0, 0, // ascent
- 0, 0, // descent
- 0, 0, // reserved
- 0, 0, // max advance height
- 0, 0, // min top side bearing
- 0, 0, // min bottom side bearing
- 0, 0, // y max extent
- 0, 0, // caret slope rise
- 0, 1, // caret slope run
- 0, 0, // caret offset
- 0, 0, // reserved
- 0, 0, // reserved
- 0, 0, // reserved
- 0, 0, // reserved
- 0, 0, // metric data format
- 0, 1 // number of advance heights in vmtx table
- };
- Guchar *vmtxTab;
- GBool needVhea, needVmtx;
- int advance;
-
- // construct the 'head' table, zero out the font checksum
- i = seekTable("head");
- pos = tables[i].offset;
- if (!checkRegion(pos, 54)) {
- return;
- }
- memcpy(headData, file + pos, 54);
- headData[8] = headData[9] = headData[10] = headData[11] = (Guchar)0;
-
- // read the original 'loca' table, pad entries out to 4 bytes, and
- // sort it into proper order -- some (non-compliant) fonts have
- // out-of-order loca tables; in order to correctly handle the case
- // where (compliant) fonts have empty entries in the middle of the
- // table, cmpTrueTypeLocaPos uses offset as its primary sort key,
- // and idx as its secondary key (ensuring that adjacent entries with
- // the same pos value remain in the same order)
- locaTable = (TrueTypeLoca *)gmallocn(nGlyphs + 1, sizeof(TrueTypeLoca));
- i = seekTable("loca");
- pos = tables[i].offset;
- ok = gTrue;
- for (i = 0; i <= nGlyphs; ++i) {
- locaTable[i].idx = i;
- if (locaFmt) {
- locaTable[i].origOffset = (int)getU32BE(pos + i*4, &ok);
- } else {
- locaTable[i].origOffset = 2 * getU16BE(pos + i*2, &ok);
- }
- }
- qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca),
- &cmpTrueTypeLocaOffset);
- for (i = 0; i < nGlyphs; ++i) {
- locaTable[i].len = locaTable[i+1].origOffset - locaTable[i].origOffset;
- }
- locaTable[nGlyphs].len = 0;
- qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca),
- &cmpTrueTypeLocaIdx);
- pos = 0;
- for (i = 0; i <= nGlyphs; ++i) {
- locaTable[i].newOffset = pos;
- pos += locaTable[i].len;
- if (pos & 3) {
- pos += 4 - (pos & 3);
- }
- }
-
- // construct the new 'loca' table
- locaData = (Guchar *)gmallocn(nGlyphs + 1, (locaFmt ? 4 : 2));
- for (i = 0; i <= nGlyphs; ++i) {
- pos = locaTable[i].newOffset;
- if (locaFmt) {
- locaData[4*i ] = (Guchar)(pos >> 24);
- locaData[4*i+1] = (Guchar)(pos >> 16);
- locaData[4*i+2] = (Guchar)(pos >> 8);
- locaData[4*i+3] = (Guchar) pos;
- } else {
- locaData[2*i ] = (Guchar)(pos >> 9);
- locaData[2*i+1] = (Guchar)(pos >> 1);
- }
- }
-
- // count the number of tables
- nNewTables = 0;
- for (i = 0; i < nT42Tables; ++i) {
- if (t42Tables[i].required ||
- seekTable(t42Tables[i].tag) >= 0) {
- ++nNewTables;
- }
- }
- vmtxTab = NULL; // make gcc happy
- advance = 0; // make gcc happy
- if (needVerticalMetrics) {
- needVhea = seekTable("vhea") < 0;
- needVmtx = seekTable("vmtx") < 0;
- if (needVhea || needVmtx) {
- i = seekTable("head");
- advance = getU16BE(tables[i].offset + 18, &ok); // units per em
- if (needVhea) {
- ++nNewTables;
- }
- if (needVmtx) {
- ++nNewTables;
- }
- }
- }
-
- // construct the new table headers, including table checksums
- // (pad each table out to a multiple of 4 bytes)
- pos = 12 + nNewTables*16;
- k = 0;
- for (i = 0; i < nT42Tables; ++i) {
- length = -1;
- checksum = 0; // make gcc happy
- if (i == t42HeadTable) {
- length = 54;
- checksum = computeTableChecksum(headData, 54);
- } else if (i == t42LocaTable) {
- length = (nGlyphs + 1) * (locaFmt ? 4 : 2);
- checksum = computeTableChecksum(locaData, length);
- } else if (i == t42GlyfTable) {
- length = 0;
- checksum = 0;
- glyfPos = tables[seekTable("glyf")].offset;
- for (j = 0; j < nGlyphs; ++j) {
- length += locaTable[j].len;
- if (length & 3) {
- length += 4 - (length & 3);
- }
- if (checkRegion(glyfPos + locaTable[j].origOffset, locaTable[j].len)) {
- checksum +=
- computeTableChecksum(file + glyfPos + locaTable[j].origOffset,
- locaTable[j].len);
- }
- }
- } else {
- if ((j = seekTable(t42Tables[i].tag)) >= 0) {
- length = tables[j].len;
- if (checkRegion(tables[j].offset, length)) {
- checksum = computeTableChecksum(file + tables[j].offset, length);
- }
- } else if (needVerticalMetrics && i == t42VheaTable) {
- vheaTab[10] = advance / 256; // max advance height
- vheaTab[11] = advance % 256;
- length = sizeof(vheaTab);
- checksum = computeTableChecksum(vheaTab, length);
- } else if (needVerticalMetrics && i == t42VmtxTable) {
- length = 4 + (nGlyphs - 1) * 4;
- vmtxTab = (Guchar *)gmalloc(length);
- vmtxTab[0] = advance / 256;
- vmtxTab[1] = advance % 256;
- for (j = 2; j < length; j += 2) {
- vmtxTab[j] = 0;
- vmtxTab[j+1] = 0;
- }
- checksum = computeTableChecksum(vmtxTab, length);
- } else if (t42Tables[i].required) {
- //~ error(-1, "Embedded TrueType font is missing a required table ('%s')",
- //~ t42Tables[i].tag);
- length = 0;
- checksum = 0;
- }
- }
- if (length >= 0) {
- newTables[k].tag = ((t42Tables[i].tag[0] & 0xff) << 24) |
- ((t42Tables[i].tag[1] & 0xff) << 16) |
- ((t42Tables[i].tag[2] & 0xff) << 8) |
- (t42Tables[i].tag[3] & 0xff);
- newTables[k].checksum = checksum;
- newTables[k].offset = pos;
- newTables[k].len = length;
- pos += length;
- if (pos & 3) {
- pos += 4 - (length & 3);
- }
- ++k;
- }
- }
-
- // construct the table directory
- tableDir[0] = 0x00; // sfnt version
- tableDir[1] = 0x01;
- tableDir[2] = 0x00;
- tableDir[3] = 0x00;
- tableDir[4] = 0; // numTables
- tableDir[5] = nNewTables;
- tableDir[6] = 0; // searchRange
- tableDir[7] = (Guchar)128;
- tableDir[8] = 0; // entrySelector
- tableDir[9] = 3;
- tableDir[10] = 0; // rangeShift
- tableDir[11] = (Guchar)(16 * nNewTables - 128);
- pos = 12;
- for (i = 0; i < nNewTables; ++i) {
- tableDir[pos ] = (Guchar)(newTables[i].tag >> 24);
- tableDir[pos+ 1] = (Guchar)(newTables[i].tag >> 16);
- tableDir[pos+ 2] = (Guchar)(newTables[i].tag >> 8);
- tableDir[pos+ 3] = (Guchar) newTables[i].tag;
- tableDir[pos+ 4] = (Guchar)(newTables[i].checksum >> 24);
- tableDir[pos+ 5] = (Guchar)(newTables[i].checksum >> 16);
- tableDir[pos+ 6] = (Guchar)(newTables[i].checksum >> 8);
- tableDir[pos+ 7] = (Guchar) newTables[i].checksum;
- tableDir[pos+ 8] = (Guchar)(newTables[i].offset >> 24);
- tableDir[pos+ 9] = (Guchar)(newTables[i].offset >> 16);
- tableDir[pos+10] = (Guchar)(newTables[i].offset >> 8);
- tableDir[pos+11] = (Guchar) newTables[i].offset;
- tableDir[pos+12] = (Guchar)(newTables[i].len >> 24);
- tableDir[pos+13] = (Guchar)(newTables[i].len >> 16);
- tableDir[pos+14] = (Guchar)(newTables[i].len >> 8);
- tableDir[pos+15] = (Guchar) newTables[i].len;
- pos += 16;
- }
-
- // compute the font checksum and store it in the head table
- checksum = computeTableChecksum(tableDir, 12 + nNewTables*16);
- for (i = 0; i < nNewTables; ++i) {
- checksum += newTables[i].checksum;
- }
- checksum = 0xb1b0afba - checksum; // because the TrueType spec says so
- headData[ 8] = (Guchar)(checksum >> 24);
- headData[ 9] = (Guchar)(checksum >> 16);
- headData[10] = (Guchar)(checksum >> 8);
- headData[11] = (Guchar) checksum;
-
- // start the sfnts array
- if (name) {
- (*outputFunc)(outputStream, "/", 1);
- (*outputFunc)(outputStream, name->getCString(), name->getLength());
- (*outputFunc)(outputStream, " [\n", 3);
- } else {
- (*outputFunc)(outputStream, "/sfnts [\n", 9);
- }
-
- // write the table directory
- dumpString(tableDir, 12 + nNewTables*16, outputFunc, outputStream);
-
- // write the tables
- for (i = 0; i < nNewTables; ++i) {
- if (i == t42HeadTable) {
- dumpString(headData, 54, outputFunc, outputStream);
- } else if (i == t42LocaTable) {
- length = (nGlyphs + 1) * (locaFmt ? 4 : 2);
- dumpString(locaData, length, outputFunc, outputStream);
- } else if (i == t42GlyfTable) {
- glyfPos = tables[seekTable("glyf")].offset;
- for (j = 0; j < nGlyphs; ++j) {
- if (locaTable[j].len > 0 &&
- checkRegion(glyfPos + locaTable[j].origOffset, locaTable[j].len)) {
- dumpString(file + glyfPos + locaTable[j].origOffset,
- locaTable[j].len, outputFunc, outputStream);
- }
- }
- } else {
- // length == 0 means the table is missing and the error was
- // already reported during the construction of the table
- // headers
- if ((length = newTables[i].len) > 0) {
- if ((j = seekTable(t42Tables[i].tag)) >= 0 &&
- checkRegion(tables[j].offset, tables[j].len)) {
- dumpString(file + tables[j].offset, tables[j].len,
- outputFunc, outputStream);
- } else if (needVerticalMetrics && i == t42VheaTable) {
- dumpString(vheaTab, length, outputFunc, outputStream);
- } else if (needVerticalMetrics && i == t42VmtxTable) {
- dumpString(vmtxTab, length, outputFunc, outputStream);
- gfree(vmtxTab);
- }
- }
- }
- }
-
- // end the sfnts array
- (*outputFunc)(outputStream, "] def\n", 6);
-
- gfree(locaData);
- gfree(locaTable);
-}
-
-void FoFiTrueType::dumpString(Guchar *s, int length,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- GString *buf;
- int pad, i, j;
-
- (*outputFunc)(outputStream, "<", 1);
- for (i = 0; i < length; i += 32) {
- for (j = 0; j < 32 && i+j < length; ++j) {
- buf = GString::format("{0:02x}", s[i+j] & 0xff);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (i % (65536 - 32) == 65536 - 64) {
- (*outputFunc)(outputStream, ">\n<", 3);
- } else if (i+32 < length) {
- (*outputFunc)(outputStream, "\n", 1);
- }
- }
- if (length & 3) {
- pad = 4 - (length & 3);
- for (i = 0; i < pad; ++i) {
- (*outputFunc)(outputStream, "00", 2);
- }
- }
- // add an extra zero byte because the Adobe Type 42 spec says so
- (*outputFunc)(outputStream, "00>\n", 4);
-}
-
-Guint FoFiTrueType::computeTableChecksum(Guchar *data, int length) {
- Guint checksum, word;
- int i;
-
- checksum = 0;
- for (i = 0; i+3 < length; i += 4) {
- word = ((data[i ] & 0xff) << 24) +
- ((data[i+1] & 0xff) << 16) +
- ((data[i+2] & 0xff) << 8) +
- (data[i+3] & 0xff);
- checksum += word;
- }
- if (length & 3) {
- word = 0;
- i = length & ~3;
- switch (length & 3) {
- case 3:
- word |= (data[i+2] & 0xff) << 8;
- case 2:
- word |= (data[i+1] & 0xff) << 16;
- case 1:
- word |= (data[i ] & 0xff) << 24;
- break;
- }
- checksum += word;
- }
- return checksum;
-}
-
-void FoFiTrueType::parse() {
- Guint topTag;
- int pos, ver, i, j;
-
- parsedOk = gTrue;
-
- // look for a collection (TTC)
- topTag = getU32BE(0, &parsedOk);
- if (!parsedOk) {
- return;
- }
- if (topTag == ttcfTag) {
- pos = getU32BE(12, &parsedOk);
- if (!parsedOk) {
- return;
- }
- } else {
- pos = 0;
- }
-
- // check the sfnt version
- ver = getU32BE(pos, &parsedOk);
- if (!parsedOk) {
- return;
- }
- openTypeCFF = ver == 0x4f54544f; // 'OTTO'
-
- // read the table directory
- nTables = getU16BE(pos + 4, &parsedOk);
- if (!parsedOk) {
- return;
- }
- tables = (TrueTypeTable *)gmallocn(nTables, sizeof(TrueTypeTable));
- pos += 12;
- for (i = 0; i < nTables; ++i) {
- tables[i].tag = getU32BE(pos, &parsedOk);
- tables[i].checksum = getU32BE(pos + 4, &parsedOk);
- tables[i].offset = (int)getU32BE(pos + 8, &parsedOk);
- tables[i].len = (int)getU32BE(pos + 12, &parsedOk);
- if (tables[i].offset + tables[i].len < tables[i].offset ||
- tables[i].offset + tables[i].len > len) {
- parsedOk = gFalse;
- }
- pos += 16;
- }
- if (!parsedOk) {
- return;
- }
-
- // check for tables that are required by both the TrueType spec and
- // the Type 42 spec
- if (seekTable("head") < 0 ||
- seekTable("hhea") < 0 ||
- seekTable("maxp") < 0 ||
- seekTable("hmtx") < 0 ||
- (!openTypeCFF && seekTable("loca") < 0) ||
- (!openTypeCFF && seekTable("glyf") < 0) ||
- (openTypeCFF && seekTable("CFF ") < 0)) {
- parsedOk = gFalse;
- return;
- }
-
- // read the cmaps
- if ((i = seekTable("cmap")) >= 0) {
- pos = tables[i].offset + 2;
- nCmaps = getU16BE(pos, &parsedOk);
- pos += 2;
- if (!parsedOk) {
- return;
- }
- cmaps = (TrueTypeCmap *)gmallocn(nCmaps, sizeof(TrueTypeCmap));
- for (j = 0; j < nCmaps; ++j) {
- cmaps[j].platform = getU16BE(pos, &parsedOk);
- cmaps[j].encoding = getU16BE(pos + 2, &parsedOk);
- cmaps[j].offset = tables[i].offset + getU32BE(pos + 4, &parsedOk);
- pos += 8;
- cmaps[j].fmt = getU16BE(cmaps[j].offset, &parsedOk);
- cmaps[j].len = getU16BE(cmaps[j].offset + 2, &parsedOk);
- }
- if (!parsedOk) {
- return;
- }
- } else {
- nCmaps = 0;
- }
-
- // get the number of glyphs from the maxp table
- i = seekTable("maxp");
- nGlyphs = getU16BE(tables[i].offset + 4, &parsedOk);
- if (!parsedOk) {
- return;
- }
-
- // get the bbox and loca table format from the head table
- i = seekTable("head");
- bbox[0] = getS16BE(tables[i].offset + 36, &parsedOk);
- bbox[1] = getS16BE(tables[i].offset + 38, &parsedOk);
- bbox[2] = getS16BE(tables[i].offset + 40, &parsedOk);
- bbox[3] = getS16BE(tables[i].offset + 42, &parsedOk);
- locaFmt = getS16BE(tables[i].offset + 50, &parsedOk);
- if (!parsedOk) {
- return;
- }
-
- // make sure the loca table is sane (correct length and entries are
- // in bounds)
- if (!openTypeCFF) {
- i = seekTable("loca");
- if (tables[i].len < 0) {
- parsedOk = gFalse;
- return;
- }
- if (tables[i].len < (nGlyphs + 1) * (locaFmt ? 4 : 2)) {
- nGlyphs = tables[i].len / (locaFmt ? 4 : 2) - 1;
- }
- for (j = 0; j <= nGlyphs; ++j) {
- if (locaFmt) {
- pos = (int)getU32BE(tables[i].offset + j*4, &parsedOk);
- } else {
- pos = getU16BE(tables[i].offset + j*2, &parsedOk);
- }
- if (pos < 0 || pos > len) {
- parsedOk = gFalse;
- }
- }
- if (!parsedOk) {
- return;
- }
- }
-
- // read the post table
- readPostTable();
-}
-
-void FoFiTrueType::readPostTable() {
- GString *name;
- int tablePos, postFmt, stringIdx, stringPos;
- GBool ok;
- int i, j, n, m;
-
- ok = gTrue;
- if ((i = seekTable("post")) < 0) {
- return;
- }
- tablePos = tables[i].offset;
- postFmt = getU32BE(tablePos, &ok);
- if (!ok) {
- goto err;
- }
- if (postFmt == 0x00010000) {
- nameToGID = new GHash(gTrue);
- for (i = 0; i < 258; ++i) {
- nameToGID->add(new GString(macGlyphNames[i]), i);
- }
- } else if (postFmt == 0x00020000) {
- nameToGID = new GHash(gTrue);
- n = getU16BE(tablePos + 32, &ok);
- if (!ok) {
- goto err;
- }
- if (n > nGlyphs) {
- n = nGlyphs;
- }
- stringIdx = 0;
- stringPos = tablePos + 34 + 2*n;
- for (i = 0; i < n; ++i) {
- j = getU16BE(tablePos + 34 + 2*i, &ok);
- if (j < 258) {
- nameToGID->removeInt(macGlyphNames[j]);
- nameToGID->add(new GString(macGlyphNames[j]), i);
- } else {
- j -= 258;
- if (j != stringIdx) {
- for (stringIdx = 0, stringPos = tablePos + 34 + 2*n;
- stringIdx < j;
- ++stringIdx, stringPos += 1 + getU8(stringPos, &ok)) ;
- if (!ok) {
- goto err;
- }
- }
- m = getU8(stringPos, &ok);
- if (!ok || !checkRegion(stringPos + 1, m)) {
- goto err;
- }
- name = new GString((char *)&file[stringPos + 1], m);
- nameToGID->removeInt(name);
- nameToGID->add(name, i);
- ++stringIdx;
- stringPos += 1 + m;
- }
- }
- } else if (postFmt == 0x00028000) {
- nameToGID = new GHash(gTrue);
- for (i = 0; i < nGlyphs; ++i) {
- j = getU8(tablePos + 32 + i, &ok);
- if (!ok) {
- goto err;
- }
- if (j < 258) {
- nameToGID->removeInt(macGlyphNames[j]);
- nameToGID->add(new GString(macGlyphNames[j]), i);
- }
- }
- }
-
- return;
-
- err:
- if (nameToGID) {
- delete nameToGID;
- nameToGID = NULL;
- }
-}
-
-int FoFiTrueType::seekTable(char *tag) {
- Guint tagI;
- int i;
-
- tagI = ((tag[0] & 0xff) << 24) |
- ((tag[1] & 0xff) << 16) |
- ((tag[2] & 0xff) << 8) |
- (tag[3] & 0xff);
- for (i = 0; i < nTables; ++i) {
- if (tables[i].tag == tagI) {
- return i;
- }
- }
- return -1;
-}
diff --git a/Build/source/libs/xpdf/fofi/FoFiTrueType.h b/Build/source/libs/xpdf/fofi/FoFiTrueType.h
deleted file mode 100644
index cf06ae78a9e..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiTrueType.h
+++ /dev/null
@@ -1,174 +0,0 @@
-//========================================================================
-//
-// FoFiTrueType.h
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FOFITRUETYPE_H
-#define FOFITRUETYPE_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "FoFiBase.h"
-
-class GString;
-class GHash;
-struct TrueTypeTable;
-struct TrueTypeCmap;
-
-//------------------------------------------------------------------------
-// FoFiTrueType
-//------------------------------------------------------------------------
-
-class FoFiTrueType: public FoFiBase {
-public:
-
- // Create a FoFiTrueType object from a memory buffer.
- static FoFiTrueType *make(char *fileA, int lenA);
-
- // Create a FoFiTrueType object from a file on disk.
- static FoFiTrueType *load(char *fileName);
-
- virtual ~FoFiTrueType();
-
- // Returns true if this an OpenType font containing CFF data, false
- // if it's a TrueType font (or OpenType font with TrueType data).
- GBool isOpenTypeCFF() { return openTypeCFF; }
-
- // Return the number of cmaps defined by this font.
- int getNumCmaps();
-
- // Return the platform ID of the <i>th cmap.
- int getCmapPlatform(int i);
-
- // Return the encoding ID of the <i>th cmap.
- int getCmapEncoding(int i);
-
- // Return the index of the cmap for <platform>, <encoding>. Returns
- // -1 if there is no corresponding cmap.
- int findCmap(int platform, int encoding);
-
- // Return the GID corresponding to <c> according to the <i>th cmap.
- Gushort mapCodeToGID(int i, int c);
-
- // Returns the GID corresponding to <name> according to the post
- // table. Returns 0 if there is no mapping for <name> or if the
- // font does not have a post table.
- int mapNameToGID(char *name);
-
- // Return the mapping from CIDs to GIDs, and return the number of
- // CIDs in *<nCIDs>. This is only useful for CID fonts. (Only
- // useful for OpenType CFF fonts.)
- Gushort *getCIDToGIDMap(int *nCIDs);
-
- // Returns the least restrictive embedding licensing right (as
- // defined by the TrueType spec):
- // * 4: OS/2 table is missing or invalid
- // * 3: installable embedding
- // * 2: editable embedding
- // * 1: preview & print embedding
- // * 0: restricted license embedding
- int getEmbeddingRights();
-
- // Convert to a Type 42 font, suitable for embedding in a PostScript
- // file. <psName> will be used as the PostScript font name (so we
- // don't need to depend on the 'name' table in the font). The
- // <encoding> array specifies the mapping from char codes to names.
- // If <encoding> is NULL, the encoding is unknown or undefined. The
- // <codeToGID> array specifies the mapping from char codes to GIDs.
- // (Not useful for OpenType CFF fonts.)
- void convertToType42(char *psName, char **encoding,
- Gushort *codeToGID,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Convert to a Type 1 font, suitable for embedding in a PostScript
- // file. This is only useful with 8-bit fonts. If <newEncoding> is
- // not NULL, it will be used in place of the encoding in the Type 1C
- // font. If <ascii> is true the eexec section will be hex-encoded,
- // otherwise it will be left as binary data. If <psName> is
- // non-NULL, it will be used as the PostScript font name. (Only
- // useful for OpenType CFF fonts.)
- void convertToType1(char *psName, char **newEncoding, GBool ascii,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Convert to a Type 2 CIDFont, suitable for embedding in a
- // PostScript file. <psName> will be used as the PostScript font
- // name (so we don't need to depend on the 'name' table in the
- // font). The <cidMap> array maps CIDs to GIDs; it has <nCIDs>
- // entries. (Not useful for OpenType CFF fonts.)
- void convertToCIDType2(char *psName, Gushort *cidMap, int nCIDs,
- GBool needVerticalMetrics,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Convert to a Type 0 CIDFont, suitable for embedding in a
- // PostScript file. <psName> will be used as the PostScript font
- // name. (Only useful for OpenType CFF fonts.)
- void convertToCIDType0(char *psName,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Convert to a Type 0 (but non-CID) composite font, suitable for
- // embedding in a PostScript file. <psName> will be used as the
- // PostScript font name (so we don't need to depend on the 'name'
- // table in the font). The <cidMap> array maps CIDs to GIDs; it has
- // <nCIDs> entries. (Not useful for OpenType CFF fonts.)
- void convertToType0(char *psName, Gushort *cidMap, int nCIDs,
- GBool needVerticalMetrics,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Convert to a Type 0 (but non-CID) composite font, suitable for
- // embedding in a PostScript file. <psName> will be used as the
- // PostScript font name. (Only useful for OpenType CFF fonts.)
- void convertToType0(char *psName,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Write a clean TTF file, filling in missing tables and correcting
- // various other errors. If <name> is non-NULL, the font is renamed
- // to <name>. If <codeToGID> is non-NULL, the font is re-encoded,
- // using a Windows Unicode cmap. If <name> is NULL and the font is
- // complete and correct, it will be written unmodified. (Not useful
- // for OpenType CFF fonts.)
- void writeTTF(FoFiOutputFunc outputFunc, void *outputStream,
- char *name = NULL, Gushort *codeToGID = NULL);
-
-private:
-
- FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA);
- void cvtEncoding(char **encoding,
- FoFiOutputFunc outputFunc,
- void *outputStream);
- void cvtCharStrings(char **encoding,
- Gushort *codeToGID,
- FoFiOutputFunc outputFunc,
- void *outputStream);
- void cvtSfnts(FoFiOutputFunc outputFunc,
- void *outputStream, GString *name,
- GBool needVerticalMetrics);
- void dumpString(Guchar *s, int length,
- FoFiOutputFunc outputFunc,
- void *outputStream);
- Guint computeTableChecksum(Guchar *data, int length);
- void parse();
- void readPostTable();
- int seekTable(char *tag);
-
- TrueTypeTable *tables;
- int nTables;
- TrueTypeCmap *cmaps;
- int nCmaps;
- int nGlyphs;
- int locaFmt;
- int bbox[4];
- GHash *nameToGID;
- GBool openTypeCFF;
-
- GBool parsedOk;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/fofi/FoFiType1.cc b/Build/source/libs/xpdf/fofi/FoFiType1.cc
deleted file mode 100644
index efad5ee4eb7..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiType1.cc
+++ /dev/null
@@ -1,252 +0,0 @@
-//========================================================================
-//
-// FoFiType1.cc
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "gmem.h"
-#include "FoFiEncodings.h"
-#include "FoFiType1.h"
-
-//------------------------------------------------------------------------
-// FoFiType1
-//------------------------------------------------------------------------
-
-FoFiType1 *FoFiType1::make(char *fileA, int lenA) {
- return new FoFiType1(fileA, lenA, gFalse);
-}
-
-FoFiType1 *FoFiType1::load(char *fileName) {
- char *fileA;
- int lenA;
-
- if (!(fileA = FoFiBase::readFile(fileName, &lenA))) {
- return NULL;
- }
- return new FoFiType1(fileA, lenA, gTrue);
-}
-
-FoFiType1::FoFiType1(char *fileA, int lenA, GBool freeFileDataA):
- FoFiBase(fileA, lenA, freeFileDataA)
-{
- name = NULL;
- encoding = NULL;
- parsed = gFalse;
-}
-
-FoFiType1::~FoFiType1() {
- int i;
-
- if (name) {
- gfree(name);
- }
- if (encoding && encoding != fofiType1StandardEncoding) {
- for (i = 0; i < 256; ++i) {
- gfree(encoding[i]);
- }
- gfree(encoding);
- }
-}
-
-char *FoFiType1::getName() {
- if (!parsed) {
- parse();
- }
- return name;
-}
-
-char **FoFiType1::getEncoding() {
- if (!parsed) {
- parse();
- }
- return encoding;
-}
-
-void FoFiType1::writeEncoded(char **newEncoding,
- FoFiOutputFunc outputFunc, void *outputStream) {
- char buf[512];
- char *line, *line2, *p;
- int i;
-
- // copy everything up to the encoding
- for (line = (char *)file;
- line && strncmp(line, "/Encoding", 9);
- line = getNextLine(line)) ;
- if (!line) {
- // no encoding - just copy the whole font file
- (*outputFunc)(outputStream, (char *)file, len);
- return;
- }
- (*outputFunc)(outputStream, (char *)file, line - (char *)file);
-
- // write the new encoding
- (*outputFunc)(outputStream, "/Encoding 256 array\n", 20);
- (*outputFunc)(outputStream,
- "0 1 255 {1 index exch /.notdef put} for\n", 40);
- for (i = 0; i < 256; ++i) {
- if (newEncoding[i]) {
- sprintf(buf, "dup %d /%s put\n", i, newEncoding[i]);
- (*outputFunc)(outputStream, buf, strlen(buf));
- }
- }
- (*outputFunc)(outputStream, "readonly def\n", 13);
-
- // find the end of the encoding data
- //~ this ought to parse PostScript tokens
- if (!strncmp(line, "/Encoding StandardEncoding def", 30)) {
- line = getNextLine(line);
- } else {
- // skip "/Encoding" + one whitespace char,
- // then look for 'def' preceded by PostScript whitespace
- p = line + 10;
- line = NULL;
- for (; p < (char *)file + len; ++p) {
- if ((*p == ' ' || *p == '\t' || *p == '\x0a' ||
- *p == '\x0d' || *p == '\x0c' || *p == '\0') &&
- p + 4 <= (char *)file + len &&
- !strncmp(p + 1, "def", 3)) {
- line = p + 4;
- break;
- }
- }
- }
-
- // some fonts have two /Encoding entries in their dictionary, so we
- // check for a second one here
- if (line) {
- for (line2 = line, i = 0;
- i < 20 && line2 && strncmp(line2, "/Encoding", 9);
- line2 = getNextLine(line2), ++i) ;
- if (i < 20 && line2) {
- (*outputFunc)(outputStream, line, line2 - line);
- if (!strncmp(line2, "/Encoding StandardEncoding def", 30)) {
- line = getNextLine(line2);
- } else {
- // skip "/Encoding" + one whitespace char,
- // then look for 'def' preceded by PostScript whitespace
- p = line2 + 10;
- line = NULL;
- for (; p < (char *)file + len; ++p) {
- if ((*p == ' ' || *p == '\t' || *p == '\x0a' ||
- *p == '\x0d' || *p == '\x0c' || *p == '\0') &&
- p + 4 <= (char *)file + len &&
- !strncmp(p + 1, "def", 3)) {
- line = p + 4;
- break;
- }
- }
- }
- }
-
- // copy everything after the encoding
- if (line) {
- (*outputFunc)(outputStream, line, ((char *)file + len) - line);
- }
- }
-}
-
-char *FoFiType1::getNextLine(char *line) {
- while (line < (char *)file + len && *line != '\x0a' && *line != '\x0d') {
- ++line;
- }
- if (line < (char *)file + len && *line == '\x0d') {
- ++line;
- }
- if (line < (char *)file + len && *line == '\x0a') {
- ++line;
- }
- if (line >= (char *)file + len) {
- return NULL;
- }
- return line;
-}
-
-void FoFiType1::parse() {
- char *line, *line1, *p, *p2;
- char buf[256];
- char c;
- int n, code, i, j;
-
- for (i = 1, line = (char *)file;
- i <= 100 && line && (!name || !encoding);
- ++i) {
-
- // get font name
- if (!name && !strncmp(line, "/FontName", 9)) {
- strncpy(buf, line, 255);
- buf[255] = '\0';
- if ((p = strchr(buf+9, '/')) &&
- (p = strtok(p+1, " \t\n\r"))) {
- name = copyString(p);
- }
- line = getNextLine(line);
-
- // get encoding
- } else if (!encoding &&
- !strncmp(line, "/Encoding StandardEncoding def", 30)) {
- encoding = fofiType1StandardEncoding;
- } else if (!encoding &&
- !strncmp(line, "/Encoding 256 array", 19)) {
- encoding = (char **)gmallocn(256, sizeof(char *));
- for (j = 0; j < 256; ++j) {
- encoding[j] = NULL;
- }
- for (j = 0, line = getNextLine(line);
- j < 300 && line && (line1 = getNextLine(line));
- ++j, line = line1) {
- if ((n = line1 - line) > 255) {
- n = 255;
- }
- strncpy(buf, line, n);
- buf[n] = '\0';
- for (p = buf; *p == ' ' || *p == '\t'; ++p) ;
- if (!strncmp(p, "dup", 3)) {
- for (p += 3; *p == ' ' || *p == '\t'; ++p) ;
- for (p2 = p; *p2 >= '0' && *p2 <= '9'; ++p2) ;
- if (*p2) {
- c = *p2;
- *p2 = '\0';
- code = atoi(p);
- *p2 = c;
- if (code == 8 && *p2 == '#') {
- code = 0;
- for (++p2; *p2 >= '0' && *p2 <= '7'; ++p2) {
- code = code * 8 + (*p2 - '0');
- }
- }
- if (code < 256) {
- for (p = p2; *p == ' ' || *p == '\t'; ++p) ;
- if (*p == '/') {
- ++p;
- for (p2 = p; *p2 && *p2 != ' ' && *p2 != '\t'; ++p2) ;
- *p2 = '\0';
- encoding[code] = copyString(p);
- }
- }
- }
- } else {
- if (strtok(buf, " \t") &&
- (p = strtok(NULL, " \t\n\r")) && !strcmp(p, "def")) {
- break;
- }
- }
- }
- //~ check for getinterval/putinterval junk
-
- } else {
- line = getNextLine(line);
- }
- }
-
- parsed = gTrue;
-}
diff --git a/Build/source/libs/xpdf/fofi/FoFiType1.h b/Build/source/libs/xpdf/fofi/FoFiType1.h
deleted file mode 100644
index 843352b2a43..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiType1.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//========================================================================
-//
-// FoFiType1.h
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FOFITYPE1_H
-#define FOFITYPE1_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "FoFiBase.h"
-
-//------------------------------------------------------------------------
-// FoFiType1
-//------------------------------------------------------------------------
-
-class FoFiType1: public FoFiBase {
-public:
-
- // Create a FoFiType1 object from a memory buffer.
- static FoFiType1 *make(char *fileA, int lenA);
-
- // Create a FoFiType1 object from a file on disk.
- static FoFiType1 *load(char *fileName);
-
- virtual ~FoFiType1();
-
- // Return the font name.
- char *getName();
-
- // Return the encoding, as an array of 256 names (any of which may
- // be NULL).
- char **getEncoding();
-
- // Write a version of the Type 1 font file with a new encoding.
- void writeEncoded(char **newEncoding,
- FoFiOutputFunc outputFunc, void *outputStream);
-
-private:
-
- FoFiType1(char *fileA, int lenA, GBool freeFileDataA);
-
- char *getNextLine(char *line);
- void parse();
-
- char *name;
- char **encoding;
- GBool parsed;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/fofi/FoFiType1C.cc b/Build/source/libs/xpdf/fofi/FoFiType1C.cc
deleted file mode 100644
index 3b28f3210c8..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiType1C.cc
+++ /dev/null
@@ -1,2603 +0,0 @@
-//========================================================================
-//
-// FoFiType1C.cc
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "gmem.h"
-#include "GString.h"
-#include "FoFiEncodings.h"
-#include "FoFiType1C.h"
-
-//------------------------------------------------------------------------
-
-static char hexChars[17] = "0123456789ABCDEF";
-
-//------------------------------------------------------------------------
-// FoFiType1C
-//------------------------------------------------------------------------
-
-FoFiType1C *FoFiType1C::make(char *fileA, int lenA) {
- FoFiType1C *ff;
-
- ff = new FoFiType1C(fileA, lenA, gFalse);
- if (!ff->parse()) {
- delete ff;
- return NULL;
- }
- return ff;
-}
-
-FoFiType1C *FoFiType1C::load(char *fileName) {
- FoFiType1C *ff;
- char *fileA;
- int lenA;
-
- if (!(fileA = FoFiBase::readFile(fileName, &lenA))) {
- return NULL;
- }
- ff = new FoFiType1C(fileA, lenA, gTrue);
- if (!ff->parse()) {
- delete ff;
- return NULL;
- }
- return ff;
-}
-
-FoFiType1C::FoFiType1C(char *fileA, int lenA, GBool freeFileDataA):
- FoFiBase(fileA, lenA, freeFileDataA)
-{
- name = NULL;
- encoding = NULL;
- privateDicts = NULL;
- fdSelect = NULL;
- charset = NULL;
-}
-
-FoFiType1C::~FoFiType1C() {
- int i;
-
- if (name) {
- delete name;
- }
- if (encoding &&
- encoding != fofiType1StandardEncoding &&
- encoding != fofiType1ExpertEncoding) {
- for (i = 0; i < 256; ++i) {
- gfree(encoding[i]);
- }
- gfree(encoding);
- }
- if (privateDicts) {
- gfree(privateDicts);
- }
- if (fdSelect) {
- gfree(fdSelect);
- }
- if (charset &&
- charset != fofiType1CISOAdobeCharset &&
- charset != fofiType1CExpertCharset &&
- charset != fofiType1CExpertSubsetCharset) {
- gfree(charset);
- }
-}
-
-char *FoFiType1C::getName() {
- return name ? name->getCString() : (char *)NULL;
-}
-
-char **FoFiType1C::getEncoding() {
- return encoding;
-}
-
-Gushort *FoFiType1C::getCIDToGIDMap(int *nCIDs) {
- Gushort *map;
- int n, i;
-
- // a CID font's top dict has ROS as the first operator
- if (topDict.firstOp != 0x0c1e) {
- *nCIDs = 0;
- return NULL;
- }
-
- // in a CID font, the charset data is the GID-to-CID mapping, so all
- // we have to do is reverse it
- n = 0;
- for (i = 0; i < nGlyphs; ++i) {
- if (charset[i] > n) {
- n = charset[i];
- }
- }
- ++n;
- map = (Gushort *)gmallocn(n, sizeof(Gushort));
- memset(map, 0, n * sizeof(Gushort));
- for (i = 0; i < nGlyphs; ++i) {
- map[charset[i]] = i;
- }
- *nCIDs = n;
- return map;
-}
-
-void FoFiType1C::convertToType1(char *psName, char **newEncoding, GBool ascii,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- int psNameLen;
- Type1CEexecBuf eb;
- Type1CIndex subrIdx;
- Type1CIndexVal val;
- GString *buf;
- char buf2[256];
- char **enc;
- GBool ok;
- int i;
-
- if (psName) {
- psNameLen = strlen(psName);
- } else {
- psName = name->getCString();
- psNameLen = name->getLength();
- }
-
- // write header and font dictionary, up to encoding
- ok = gTrue;
- (*outputFunc)(outputStream, "%!FontType1-1.0: ", 17);
- (*outputFunc)(outputStream, psName, psNameLen);
- if (topDict.versionSID != 0) {
- getString(topDict.versionSID, buf2, &ok);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- }
- (*outputFunc)(outputStream, "\n", 1);
- // the dictionary needs room for 12 entries: the following 9, plus
- // Private and CharStrings (in the eexec section) and FID (which is
- // added by definefont)
- (*outputFunc)(outputStream, "12 dict begin\n", 14);
- (*outputFunc)(outputStream, "/FontInfo 10 dict dup begin\n", 28);
- if (topDict.versionSID != 0) {
- (*outputFunc)(outputStream, "/version (", 10);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") readonly def\n", 15);
- }
- if (topDict.noticeSID != 0) {
- getString(topDict.noticeSID, buf2, &ok);
- (*outputFunc)(outputStream, "/Notice (", 9);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") readonly def\n", 15);
- }
- if (topDict.copyrightSID != 0) {
- getString(topDict.copyrightSID, buf2, &ok);
- (*outputFunc)(outputStream, "/Copyright (", 12);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") readonly def\n", 15);
- }
- if (topDict.fullNameSID != 0) {
- getString(topDict.fullNameSID, buf2, &ok);
- (*outputFunc)(outputStream, "/FullName (", 11);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") readonly def\n", 15);
- }
- if (topDict.familyNameSID != 0) {
- getString(topDict.familyNameSID, buf2, &ok);
- (*outputFunc)(outputStream, "/FamilyName (", 13);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") readonly def\n", 15);
- }
- if (topDict.weightSID != 0) {
- getString(topDict.weightSID, buf2, &ok);
- (*outputFunc)(outputStream, "/Weight (", 9);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") readonly def\n", 15);
- }
- if (topDict.isFixedPitch) {
- (*outputFunc)(outputStream, "/isFixedPitch true def\n", 23);
- } else {
- (*outputFunc)(outputStream, "/isFixedPitch false def\n", 24);
- }
- buf = GString::format("/ItalicAngle {0:.4g} def\n", topDict.italicAngle);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format("/UnderlinePosition {0:.4g} def\n",
- topDict.underlinePosition);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format("/UnderlineThickness {0:.4g} def\n",
- topDict.underlineThickness);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "end readonly def\n", 17);
- (*outputFunc)(outputStream, "/FontName /", 11);
- (*outputFunc)(outputStream, psName, psNameLen);
- (*outputFunc)(outputStream, " def\n", 5);
- buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/FontType 1 def\n", 16);
- buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] readonly def\n",
- topDict.fontMatrix[0], topDict.fontMatrix[1],
- topDict.fontMatrix[2], topDict.fontMatrix[3],
- topDict.fontMatrix[4], topDict.fontMatrix[5]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] readonly def\n",
- topDict.fontBBox[0], topDict.fontBBox[1],
- topDict.fontBBox[2], topDict.fontBBox[3]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- if (topDict.uniqueID != 0) {
- buf = GString::format("/UniqueID {0:d} def\n", topDict.uniqueID);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
-
- // write the encoding
- (*outputFunc)(outputStream, "/Encoding ", 10);
- if (!newEncoding && encoding == fofiType1StandardEncoding) {
- (*outputFunc)(outputStream, "StandardEncoding def\n", 21);
- } else {
- (*outputFunc)(outputStream, "256 array\n", 10);
- (*outputFunc)(outputStream,
- "0 1 255 {1 index exch /.notdef put} for\n", 40);
- enc = newEncoding ? newEncoding : encoding;
- for (i = 0; i < 256; ++i) {
- if (enc[i]) {
- buf = GString::format("dup {0:d} /{1:s} put\n", i, enc[i]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- }
- (*outputFunc)(outputStream, "readonly def\n", 13);
- }
- (*outputFunc)(outputStream, "currentdict end\n", 16);
-
- // start the binary section
- (*outputFunc)(outputStream, "currentfile eexec\n", 18);
- eb.outputFunc = outputFunc;
- eb.outputStream = outputStream;
- eb.ascii = ascii;
- eb.r1 = 55665;
- eb.line = 0;
-
- // write the private dictionary
- eexecWrite(&eb, "\x83\xca\x73\xd5");
- eexecWrite(&eb, "dup /Private 32 dict dup begin\n");
- eexecWrite(&eb, "/RD {string currentfile exch readstring pop}"
- " executeonly def\n");
- eexecWrite(&eb, "/ND {noaccess def} executeonly def\n");
- eexecWrite(&eb, "/NP {noaccess put} executeonly def\n");
- eexecWrite(&eb, "/MinFeature {16 16} def\n");
- eexecWrite(&eb, "/password 5839 def\n");
- if (privateDicts[0].nBlueValues) {
- eexecWrite(&eb, "/BlueValues [");
- for (i = 0; i < privateDicts[0].nBlueValues; ++i) {
- buf = GString::format("{0:s}{1:d}",
- i > 0 ? " " : "", privateDicts[0].blueValues[i]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[0].nOtherBlues) {
- eexecWrite(&eb, "/OtherBlues [");
- for (i = 0; i < privateDicts[0].nOtherBlues; ++i) {
- buf = GString::format("{0:s}{1:d}",
- i > 0 ? " " : "", privateDicts[0].otherBlues[i]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[0].nFamilyBlues) {
- eexecWrite(&eb, "/FamilyBlues [");
- for (i = 0; i < privateDicts[0].nFamilyBlues; ++i) {
- buf = GString::format("{0:s}{1:d}",
- i > 0 ? " " : "", privateDicts[0].familyBlues[i]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[0].nFamilyOtherBlues) {
- eexecWrite(&eb, "/FamilyOtherBlues [");
- for (i = 0; i < privateDicts[0].nFamilyOtherBlues; ++i) {
- buf = GString::format("{0:s}{1:d}", i > 0 ? " " : "",
- privateDicts[0].familyOtherBlues[i]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[0].blueScale != 0.039625) {
- buf = GString::format("/BlueScale {0:.4g} def\n",
- privateDicts[0].blueScale);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].blueShift != 7) {
- buf = GString::format("/BlueShift {0:d} def\n", privateDicts[0].blueShift);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].blueFuzz != 1) {
- buf = GString::format("/BlueFuzz {0:d} def\n", privateDicts[0].blueFuzz);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].hasStdHW) {
- buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[0].stdHW);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].hasStdVW) {
- buf = GString::format("/StdVW [{0:.4g}] def\n", privateDicts[0].stdVW);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].nStemSnapH) {
- eexecWrite(&eb, "/StemSnapH [");
- for (i = 0; i < privateDicts[0].nStemSnapH; ++i) {
- buf = GString::format("{0:s}{1:.4g}",
- i > 0 ? " " : "", privateDicts[0].stemSnapH[i]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[0].nStemSnapV) {
- eexecWrite(&eb, "/StemSnapV [");
- for (i = 0; i < privateDicts[0].nStemSnapV; ++i) {
- buf = GString::format("{0:s}{1:.4g}",
- i > 0 ? " " : "", privateDicts[0].stemSnapV[i]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[0].hasForceBold) {
- buf = GString::format("/ForceBold {0:s} def\n",
- privateDicts[0].forceBold ? "true" : "false");
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].forceBoldThreshold != 0) {
- buf = GString::format("/ForceBoldThreshold {0:.4g} def\n",
- privateDicts[0].forceBoldThreshold);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].languageGroup != 0) {
- buf = GString::format("/LanguageGroup {0:d} def\n",
- privateDicts[0].languageGroup);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[0].expansionFactor != 0.06) {
- buf = GString::format("/ExpansionFactor {0:.4g} def\n",
- privateDicts[0].expansionFactor);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
-
- // set up subroutines
- ok = gTrue;
- getIndex(privateDicts[0].subrsOffset, &subrIdx, &ok);
- if (!ok) {
- subrIdx.pos = -1;
- }
-
- // write the CharStrings
- buf = GString::format("2 index /CharStrings {0:d} dict dup begin\n",
- nGlyphs);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- for (i = 0; i < nGlyphs; ++i) {
- ok = gTrue;
- getIndexVal(&charStringsIdx, i, &val, &ok);
- if (ok) {
- getString(charset[i], buf2, &ok);
- if (ok) {
- eexecCvtGlyph(&eb, buf2, val.pos, val.len, &subrIdx, &privateDicts[0]);
- }
- }
- }
- eexecWrite(&eb, "end\n");
- eexecWrite(&eb, "end\n");
- eexecWrite(&eb, "readonly put\n");
- eexecWrite(&eb, "noaccess put\n");
- eexecWrite(&eb, "dup /FontName get exch definefont pop\n");
- eexecWrite(&eb, "mark currentfile closefile\n");
-
- // trailer
- if (ascii && eb.line > 0) {
- (*outputFunc)(outputStream, "\n", 1);
- }
- for (i = 0; i < 8; ++i) {
- (*outputFunc)(outputStream, "0000000000000000000000000000000000000000000000000000000000000000\n", 65);
- }
- (*outputFunc)(outputStream, "cleartomark\n", 12);
-}
-
-void FoFiType1C::convertToCIDType0(char *psName,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- int *cidMap;
- GString *charStrings;
- int *charStringOffsets;
- Type1CIndex subrIdx;
- Type1CIndexVal val;
- int nCIDs, gdBytes;
- GString *buf;
- char buf2[256];
- GBool ok;
- int gid, offset, n, i, j, k;
-
- // compute the CID count and build the CID-to-GID mapping
- nCIDs = 0;
- for (i = 0; i < nGlyphs; ++i) {
- if (charset[i] >= nCIDs) {
- nCIDs = charset[i] + 1;
- }
- }
- cidMap = (int *)gmallocn(nCIDs, sizeof(int));
- for (i = 0; i < nCIDs; ++i) {
- cidMap[i] = -1;
- }
- for (i = 0; i < nGlyphs; ++i) {
- cidMap[charset[i]] = i;
- }
-
- // build the charstrings
- charStrings = new GString();
- charStringOffsets = (int *)gmallocn(nCIDs + 1, sizeof(int));
- for (i = 0; i < nCIDs; ++i) {
- charStringOffsets[i] = charStrings->getLength();
- if ((gid = cidMap[i]) >= 0) {
- ok = gTrue;
- getIndexVal(&charStringsIdx, gid, &val, &ok);
- if (ok) {
- getIndex(privateDicts[fdSelect[gid]].subrsOffset, &subrIdx, &ok);
- if (!ok) {
- subrIdx.pos = -1;
- }
- cvtGlyph(val.pos, val.len, charStrings,
- &subrIdx, &privateDicts[fdSelect[gid]], gTrue);
- }
- }
- }
- charStringOffsets[nCIDs] = charStrings->getLength();
-
- // compute gdBytes = number of bytes needed for charstring offsets
- // (offset size needs to account for the charstring offset table,
- // with a worst case of five bytes per entry, plus the charstrings
- // themselves)
- i = (nCIDs + 1) * 5 + charStrings->getLength();
- if (i < 0x100) {
- gdBytes = 1;
- } else if (i < 0x10000) {
- gdBytes = 2;
- } else if (i < 0x1000000) {
- gdBytes = 3;
- } else {
- gdBytes = 4;
- }
-
- // begin the font dictionary
- (*outputFunc)(outputStream, "/CIDInit /ProcSet findresource begin\n", 37);
- (*outputFunc)(outputStream, "20 dict begin\n", 14);
- (*outputFunc)(outputStream, "/CIDFontName /", 14);
- (*outputFunc)(outputStream, psName, strlen(psName));
- (*outputFunc)(outputStream, " def\n", 5);
- (*outputFunc)(outputStream, "/CIDFontType 0 def\n", 19);
- (*outputFunc)(outputStream, "/CIDSystemInfo 3 dict dup begin\n", 32);
- if (topDict.registrySID > 0 && topDict.orderingSID > 0) {
- ok = gTrue;
- getString(topDict.registrySID, buf2, &ok);
- if (ok) {
- (*outputFunc)(outputStream, " /Registry (", 13);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") def\n", 6);
- }
- ok = gTrue;
- getString(topDict.orderingSID, buf2, &ok);
- if (ok) {
- (*outputFunc)(outputStream, " /Ordering (", 13);
- (*outputFunc)(outputStream, buf2, strlen(buf2));
- (*outputFunc)(outputStream, ") def\n", 6);
- }
- } else {
- (*outputFunc)(outputStream, " /Registry (Adobe) def\n", 24);
- (*outputFunc)(outputStream, " /Ordering (Identity) def\n", 27);
- }
- buf = GString::format(" /Supplement {0:d} def\n", topDict.supplement);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "end def\n", 8);
- if (topDict.hasFontMatrix) {
- buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n",
- topDict.fontMatrix[0], topDict.fontMatrix[1],
- topDict.fontMatrix[2], topDict.fontMatrix[3],
- topDict.fontMatrix[4], topDict.fontMatrix[5]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- } else if (privateDicts[0].hasFontMatrix) {
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- } else {
- (*outputFunc)(outputStream,
- "/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38);
- }
- buf = GString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n",
- topDict.fontBBox[0], topDict.fontBBox[1],
- topDict.fontBBox[2], topDict.fontBBox[3]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/FontInfo 1 dict dup begin\n", 27);
- (*outputFunc)(outputStream, " /FSType 8 def\n", 16);
- (*outputFunc)(outputStream, "end def\n", 8);
-
- // CIDFont-specific entries
- buf = GString::format("/CIDCount {0:d} def\n", nCIDs);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/FDBytes 1 def\n", 15);
- buf = GString::format("/GDBytes {0:d} def\n", gdBytes);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/CIDMapOffset 0 def\n", 20);
- if (topDict.paintType != 0) {
- buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
-
- // FDArray entry
- buf = GString::format("/FDArray {0:d} array\n", nFDs);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- for (i = 0; i < nFDs; ++i) {
- buf = GString::format("dup {0:d} 10 dict begin\n", i);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/FontType 1 def\n", 16);
- if (privateDicts[i].hasFontMatrix) {
- buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n",
- privateDicts[i].fontMatrix[0],
- privateDicts[i].fontMatrix[1],
- privateDicts[i].fontMatrix[2],
- privateDicts[i].fontMatrix[3],
- privateDicts[i].fontMatrix[4],
- privateDicts[i].fontMatrix[5]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- } else {
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- }
- buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/Private 32 dict begin\n", 23);
- if (privateDicts[i].nBlueValues) {
- (*outputFunc)(outputStream, "/BlueValues [", 13);
- for (j = 0; j < privateDicts[i].nBlueValues; ++j) {
- buf = GString::format("{0:s}{1:d}",
- j > 0 ? " " : "", privateDicts[i].blueValues[j]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- }
- if (privateDicts[i].nOtherBlues) {
- (*outputFunc)(outputStream, "/OtherBlues [", 13);
- for (j = 0; j < privateDicts[i].nOtherBlues; ++j) {
- buf = GString::format("{0:s}{1:d}",
- j > 0 ? " " : "", privateDicts[i].otherBlues[j]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- }
- if (privateDicts[i].nFamilyBlues) {
- (*outputFunc)(outputStream, "/FamilyBlues [", 14);
- for (j = 0; j < privateDicts[i].nFamilyBlues; ++j) {
- buf = GString::format("{0:s}{1:d}",
- j > 0 ? " " : "",
- privateDicts[i].familyBlues[j]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- }
- if (privateDicts[i].nFamilyOtherBlues) {
- (*outputFunc)(outputStream, "/FamilyOtherBlues [", 19);
- for (j = 0; j < privateDicts[i].nFamilyOtherBlues; ++j) {
- buf = GString::format("{0:s}{1:d}", j > 0 ? " " : "",
- privateDicts[i].familyOtherBlues[j]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- }
- if (privateDicts[i].blueScale != 0.039625) {
- buf = GString::format("/BlueScale {0:.4g} def\n",
- privateDicts[i].blueScale);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].blueShift != 7) {
- buf = GString::format("/BlueShift {0:d} def\n",
- privateDicts[i].blueShift);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].blueFuzz != 1) {
- buf = GString::format("/BlueFuzz {0:d} def\n", privateDicts[i].blueFuzz);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].hasStdHW) {
- buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[i].stdHW);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].hasStdVW) {
- buf = GString::format("/StdVW [{0:.4g}] def\n", privateDicts[i].stdVW);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].nStemSnapH) {
- (*outputFunc)(outputStream, "/StemSnapH [", 12);
- for (j = 0; j < privateDicts[i].nStemSnapH; ++j) {
- buf = GString::format("{0:s}{1:.4g}",
- j > 0 ? " " : "", privateDicts[i].stemSnapH[j]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- }
- if (privateDicts[i].nStemSnapV) {
- (*outputFunc)(outputStream, "/StemSnapV [", 12);
- for (j = 0; j < privateDicts[i].nStemSnapV; ++j) {
- buf = GString::format("{0:s}{1:.4g}",
- j > 0 ? " " : "", privateDicts[i].stemSnapV[j]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- }
- if (privateDicts[i].hasForceBold) {
- buf = GString::format("/ForceBold {0:s} def\n",
- privateDicts[i].forceBold ? "true" : "false");
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].forceBoldThreshold != 0) {
- buf = GString::format("/ForceBoldThreshold {0:.4g} def\n",
- privateDicts[i].forceBoldThreshold);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].languageGroup != 0) {
- buf = GString::format("/LanguageGroup {0:d} def\n",
- privateDicts[i].languageGroup);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (privateDicts[i].expansionFactor != 0.06) {
- buf = GString::format("/ExpansionFactor {0:.4g} def\n",
- privateDicts[i].expansionFactor);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "currentdict end def\n", 20);
- (*outputFunc)(outputStream, "currentdict end put\n", 20);
- }
- (*outputFunc)(outputStream, "def\n", 4);
-
- // start the binary section
- offset = (nCIDs + 1) * (1 + gdBytes);
- buf = GString::format("(Hex) {0:d} StartData\n",
- offset + charStrings->getLength());
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
-
- // write the charstring offset (CIDMap) table
- for (i = 0; i <= nCIDs; i += 6) {
- for (j = 0; j < 6 && i+j <= nCIDs; ++j) {
- if (i+j < nCIDs && cidMap[i+j] >= 0) {
- buf2[0] = (char)fdSelect[cidMap[i+j]];
- } else {
- buf2[0] = (char)0;
- }
- n = offset + charStringOffsets[i+j];
- for (k = gdBytes; k >= 1; --k) {
- buf2[k] = (char)(n & 0xff);
- n >>= 8;
- }
- for (k = 0; k <= gdBytes; ++k) {
- buf = GString::format("{0:02x}", buf2[k] & 0xff);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- }
- (*outputFunc)(outputStream, "\n", 1);
- }
-
- // write the charstring data
- n = charStrings->getLength();
- for (i = 0; i < n; i += 32) {
- for (j = 0; j < 32 && i+j < n; ++j) {
- buf = GString::format("{0:02x}", charStrings->getChar(i+j) & 0xff);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (i + 32 >= n) {
- (*outputFunc)(outputStream, ">", 1);
- }
- (*outputFunc)(outputStream, "\n", 1);
- }
-
- gfree(charStringOffsets);
- delete charStrings;
- gfree(cidMap);
-}
-
-void FoFiType1C::convertToType0(char *psName,
- FoFiOutputFunc outputFunc,
- void *outputStream) {
- int *cidMap;
- Type1CIndex subrIdx;
- Type1CIndexVal val;
- int nCIDs;
- GString *buf;
- Type1CEexecBuf eb;
- GBool ok;
- int fd, i, j, k;
-
- // compute the CID count and build the CID-to-GID mapping
- nCIDs = 0;
- for (i = 0; i < nGlyphs; ++i) {
- if (charset[i] >= nCIDs) {
- nCIDs = charset[i] + 1;
- }
- }
- cidMap = (int *)gmallocn(nCIDs, sizeof(int));
- for (i = 0; i < nCIDs; ++i) {
- cidMap[i] = -1;
- }
- for (i = 0; i < nGlyphs; ++i) {
- cidMap[charset[i]] = i;
- }
-
- // write the descendant Type 1 fonts
- for (i = 0; i < nCIDs; i += 256) {
-
- //~ this assumes that all CIDs in this block have the same FD --
- //~ to handle multiple FDs correctly, need to somehow divide the
- //~ font up by FD; as a kludge we ignore CID 0, which is .notdef
- fd = 0;
- for (j = i==0 ? 1 : 0; j < 256 && i+j < nCIDs; ++j) {
- if (cidMap[i+j] >= 0) {
- fd = fdSelect[cidMap[i+j]];
- break;
- }
- }
-
- // font dictionary (unencrypted section)
- (*outputFunc)(outputStream, "16 dict begin\n", 14);
- (*outputFunc)(outputStream, "/FontName /", 11);
- (*outputFunc)(outputStream, psName, strlen(psName));
- buf = GString::format("_{0:02x} def\n", i >> 8);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- (*outputFunc)(outputStream, "/FontType 1 def\n", 16);
- if (privateDicts[fd].hasFontMatrix) {
- buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n",
- privateDicts[fd].fontMatrix[0],
- privateDicts[fd].fontMatrix[1],
- privateDicts[fd].fontMatrix[2],
- privateDicts[fd].fontMatrix[3],
- privateDicts[fd].fontMatrix[4],
- privateDicts[fd].fontMatrix[5]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- } else if (topDict.hasFontMatrix) {
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- } else {
- (*outputFunc)(outputStream,
- "/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38);
- }
- buf = GString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n",
- topDict.fontBBox[0], topDict.fontBBox[1],
- topDict.fontBBox[2], topDict.fontBBox[3]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- if (topDict.paintType != 0) {
- buf = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "/Encoding 256 array\n", 20);
- for (j = 0; j < 256 && i+j < nCIDs; ++j) {
- buf = GString::format("dup {0:d} /c{1:02x} put\n", j, j);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- if (j < 256) {
- buf = GString::format("{0:d} 1 255 {{ 1 index exch /.notdef put }} for\n",
- j);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "readonly def\n", 13);
- (*outputFunc)(outputStream, "currentdict end\n", 16);
-
- // start the binary section
- (*outputFunc)(outputStream, "currentfile eexec\n", 18);
- eb.outputFunc = outputFunc;
- eb.outputStream = outputStream;
- eb.ascii = gTrue;
- eb.r1 = 55665;
- eb.line = 0;
-
- // start the private dictionary
- eexecWrite(&eb, "\x83\xca\x73\xd5");
- eexecWrite(&eb, "dup /Private 32 dict dup begin\n");
- eexecWrite(&eb, "/RD {string currentfile exch readstring pop}"
- " executeonly def\n");
- eexecWrite(&eb, "/ND {noaccess def} executeonly def\n");
- eexecWrite(&eb, "/NP {noaccess put} executeonly def\n");
- eexecWrite(&eb, "/MinFeature {16 16} def\n");
- eexecWrite(&eb, "/password 5839 def\n");
- if (privateDicts[fd].nBlueValues) {
- eexecWrite(&eb, "/BlueValues [");
- for (k = 0; k < privateDicts[fd].nBlueValues; ++k) {
- buf = GString::format("{0:s}{1:d}",
- k > 0 ? " " : "",
- privateDicts[fd].blueValues[k]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[fd].nOtherBlues) {
- eexecWrite(&eb, "/OtherBlues [");
- for (k = 0; k < privateDicts[fd].nOtherBlues; ++k) {
- buf = GString::format("{0:s}{1:d}",
- k > 0 ? " " : "",
- privateDicts[fd].otherBlues[k]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[fd].nFamilyBlues) {
- eexecWrite(&eb, "/FamilyBlues [");
- for (k = 0; k < privateDicts[fd].nFamilyBlues; ++k) {
- buf = GString::format("{0:s}{1:d}", k > 0 ? " " : "",
- privateDicts[fd].familyBlues[k]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[fd].nFamilyOtherBlues) {
- eexecWrite(&eb, "/FamilyOtherBlues [");
- for (k = 0; k < privateDicts[fd].nFamilyOtherBlues; ++k) {
- buf = GString::format("{0:s}{1:d}", k > 0 ? " " : "",
- privateDicts[fd].familyOtherBlues[k]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[fd].blueScale != 0.039625) {
- buf = GString::format("/BlueScale {0:.4g} def\n",
- privateDicts[fd].blueScale);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].blueShift != 7) {
- buf = GString::format("/BlueShift {0:d} def\n",
- privateDicts[fd].blueShift);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].blueFuzz != 1) {
- buf = GString::format("/BlueFuzz {0:d} def\n",
- privateDicts[fd].blueFuzz);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].hasStdHW) {
- buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[fd].stdHW);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].hasStdVW) {
- buf = GString::format("/StdVW [{0:.4g}] def\n", privateDicts[fd].stdVW);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].nStemSnapH) {
- eexecWrite(&eb, "/StemSnapH [");
- for (k = 0; k < privateDicts[fd].nStemSnapH; ++k) {
- buf = GString::format("{0:s}{1:.4g}",
- k > 0 ? " " : "", privateDicts[fd].stemSnapH[k]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[fd].nStemSnapV) {
- eexecWrite(&eb, "/StemSnapV [");
- for (k = 0; k < privateDicts[fd].nStemSnapV; ++k) {
- buf = GString::format("{0:s}{1:.4g}",
- k > 0 ? " " : "", privateDicts[fd].stemSnapV[k]);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- eexecWrite(&eb, "] def\n");
- }
- if (privateDicts[fd].hasForceBold) {
- buf = GString::format("/ForceBold {0:s} def\n",
- privateDicts[fd].forceBold ? "true" : "false");
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].forceBoldThreshold != 0) {
- buf = GString::format("/ForceBoldThreshold {0:.4g} def\n",
- privateDicts[fd].forceBoldThreshold);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].languageGroup != 0) {
- buf = GString::format("/LanguageGroup {0:d} def\n",
- privateDicts[fd].languageGroup);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
- if (privateDicts[fd].expansionFactor != 0.06) {
- buf = GString::format("/ExpansionFactor {0:.4g} def\n",
- privateDicts[fd].expansionFactor);
- eexecWrite(&eb, buf->getCString());
- delete buf;
- }
-
- // set up the subroutines
- ok = gTrue;
- getIndex(privateDicts[fd].subrsOffset, &subrIdx, &ok);
- if (!ok) {
- subrIdx.pos = -1;
- }
-
- // start the CharStrings
- eexecWrite(&eb, "2 index /CharStrings 256 dict dup begin\n");
-
- // write the .notdef CharString
- ok = gTrue;
- getIndexVal(&charStringsIdx, 0, &val, &ok);
- if (ok) {
- eexecCvtGlyph(&eb, ".notdef", val.pos, val.len,
- &subrIdx, &privateDicts[fd]);
- }
-
- // write the CharStrings
- for (j = 0; j < 256 && i+j < nCIDs; ++j) {
- if (cidMap[i+j] >= 0) {
- ok = gTrue;
- getIndexVal(&charStringsIdx, cidMap[i+j], &val, &ok);
- if (ok) {
- buf = GString::format("c{0:02x}", j);
- eexecCvtGlyph(&eb, buf->getCString(), val.pos, val.len,
- &subrIdx, &privateDicts[fd]);
- delete buf;
- }
- }
- }
- eexecWrite(&eb, "end\n");
- eexecWrite(&eb, "end\n");
- eexecWrite(&eb, "readonly put\n");
- eexecWrite(&eb, "noaccess put\n");
- eexecWrite(&eb, "dup /FontName get exch definefont pop\n");
- eexecWrite(&eb, "mark currentfile closefile\n");
-
- // trailer
- if (eb.line > 0) {
- (*outputFunc)(outputStream, "\n", 1);
- }
- for (j = 0; j < 8; ++j) {
- (*outputFunc)(outputStream, "0000000000000000000000000000000000000000000000000000000000000000\n", 65);
- }
- (*outputFunc)(outputStream, "cleartomark\n", 12);
- }
-
- // write the Type 0 parent font
- (*outputFunc)(outputStream, "16 dict begin\n", 14);
- (*outputFunc)(outputStream, "/FontName /", 11);
- (*outputFunc)(outputStream, psName, strlen(psName));
- (*outputFunc)(outputStream, " def\n", 5);
- (*outputFunc)(outputStream, "/FontType 0 def\n", 16);
- if (topDict.hasFontMatrix) {
- buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n",
- topDict.fontMatrix[0], topDict.fontMatrix[1],
- topDict.fontMatrix[2], topDict.fontMatrix[3],
- topDict.fontMatrix[4], topDict.fontMatrix[5]);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- } else {
- (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
- }
- (*outputFunc)(outputStream, "/FMapType 2 def\n", 16);
- (*outputFunc)(outputStream, "/Encoding [\n", 12);
- for (i = 0; i < nCIDs; i += 256) {
- buf = GString::format("{0:d}\n", i >> 8);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- (*outputFunc)(outputStream, "/FDepVector [\n", 14);
- for (i = 0; i < nCIDs; i += 256) {
- (*outputFunc)(outputStream, "/", 1);
- (*outputFunc)(outputStream, psName, strlen(psName));
- buf = GString::format("_{0:02x} findfont\n", i >> 8);
- (*outputFunc)(outputStream, buf->getCString(), buf->getLength());
- delete buf;
- }
- (*outputFunc)(outputStream, "] def\n", 6);
- (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40);
-
- gfree(cidMap);
-}
-
-void FoFiType1C::eexecCvtGlyph(Type1CEexecBuf *eb, char *glyphName,
- int offset, int nBytes,
- Type1CIndex *subrIdx,
- Type1CPrivateDict *pDict) {
- GString *buf;
- GString *charBuf;
-
- // generate the charstring
- charBuf = new GString();
- cvtGlyph(offset, nBytes, charBuf, subrIdx, pDict, gTrue);
-
- buf = GString::format("/{0:s} {1:d} RD ", glyphName, charBuf->getLength());
- eexecWrite(eb, buf->getCString());
- delete buf;
- eexecWriteCharstring(eb, (Guchar *)charBuf->getCString(),
- charBuf->getLength());
- eexecWrite(eb, " ND\n");
-
- delete charBuf;
-}
-
-void FoFiType1C::cvtGlyph(int offset, int nBytes, GString *charBuf,
- Type1CIndex *subrIdx, Type1CPrivateDict *pDict,
- GBool top) {
- Type1CIndexVal val;
- GBool ok, dFP;
- double d, dx, dy;
- Gushort r2;
- Guchar byte;
- int pos, subrBias, start, i, k;
-
- start = charBuf->getLength();
- if (top) {
- charBuf->append((char)73);
- charBuf->append((char)58);
- charBuf->append((char)147);
- charBuf->append((char)134);
- nOps = 0;
- nHints = 0;
- firstOp = gTrue;
- openPath = gFalse;
- }
-
- pos = offset;
- while (pos < offset + nBytes) {
- ok = gTrue;
- pos = getOp(pos, gTrue, &ok);
- if (!ok) {
- break;
- }
- if (!ops[nOps - 1].isNum) {
- --nOps; // drop the operator
- switch (ops[nOps].op) {
- case 0x0001: // hstem
- if (firstOp) {
- cvtGlyphWidth(nOps & 1, charBuf, pDict);
- firstOp = gFalse;
- }
- if (nOps & 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hstem", nOps);
- }
- d = 0;
- dFP = gFalse;
- for (k = 0; k < nOps; k += 2) {
- // convert Type 2 edge hints (-20 or -21) to Type 1 ghost hints
- if (ops[k+1].num < 0) {
- d += ops[k].num + ops[k+1].num;
- dFP |= ops[k].isFP | ops[k+1].isFP;
- cvtNum(d, dFP, charBuf);
- cvtNum(-ops[k+1].num, ops[k+1].isFP, charBuf);
- } else {
- d += ops[k].num;
- dFP |= ops[k].isFP;
- cvtNum(d, dFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- d += ops[k+1].num;
- dFP |= ops[k+1].isFP;
- }
- charBuf->append((char)1);
- }
- nHints += nOps / 2;
- nOps = 0;
- break;
- case 0x0003: // vstem
- if (firstOp) {
- cvtGlyphWidth(nOps & 1, charBuf, pDict);
- firstOp = gFalse;
- }
- if (nOps & 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 vstem", nOps);
- }
- d = 0;
- dFP = gFalse;
- for (k = 0; k < nOps; k += 2) {
- // convert Type 2 edge hints (-20 or -21) to Type 1 ghost hints
- if (ops[k+1].num < 0) {
- d += ops[k].num + ops[k+1].num;
- dFP |= ops[k].isFP | ops[k+1].isFP;
- cvtNum(d, dFP, charBuf);
- cvtNum(-ops[k+1].num, ops[k+1].isFP, charBuf);
- } else {
- d += ops[k].num;
- dFP |= ops[k].isFP;
- cvtNum(d, dFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- d += ops[k+1].num;
- dFP |= ops[k+1].isFP;
- }
- charBuf->append((char)3);
- }
- nHints += nOps / 2;
- nOps = 0;
- break;
- case 0x0004: // vmoveto
- if (firstOp) {
- cvtGlyphWidth(nOps == 2, charBuf, pDict);
- firstOp = gFalse;
- }
- if (openPath) {
- charBuf->append((char)9);
- openPath = gFalse;
- }
- if (nOps != 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 vmoveto", nOps);
- }
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- charBuf->append((char)4);
- nOps = 0;
- break;
- case 0x0005: // rlineto
- if (nOps < 2 || nOps % 2 != 0) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 rlineto", nOps);
- }
- for (k = 0; k < nOps; k += 2) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- charBuf->append((char)5);
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0006: // hlineto
- if (nOps < 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hlineto", nOps);
- }
- for (k = 0; k < nOps; ++k) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- charBuf->append((char)((k & 1) ? 7 : 6));
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0007: // vlineto
- if (nOps < 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 vlineto", nOps);
- }
- for (k = 0; k < nOps; ++k) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- charBuf->append((char)((k & 1) ? 6 : 7));
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0008: // rrcurveto
- if (nOps < 6 || nOps % 6 != 0) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 rrcurveto", nOps);
- }
- for (k = 0; k < nOps; k += 6) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf);
- cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf);
- charBuf->append((char)8);
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x000a: // callsubr
- if (nOps >= 1) {
- subrBias = (subrIdx->len < 1240)
- ? 107 : (subrIdx->len < 33900) ? 1131 : 32768;
- k = subrBias + (int)ops[nOps - 1].num;
- --nOps;
- ok = gTrue;
- getIndexVal(subrIdx, k, &val, &ok);
- if (ok) {
- cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse);
- }
- } else {
- //~ error(-1, "Too few args to Type 2 callsubr");
- }
- // don't clear the stack
- break;
- case 0x000b: // return
- // don't clear the stack
- break;
- case 0x000e: // endchar / seac
- if (firstOp) {
- cvtGlyphWidth(nOps == 1 || nOps == 5, charBuf, pDict);
- firstOp = gFalse;
- }
- if (openPath) {
- charBuf->append((char)9);
- openPath = gFalse;
- }
- if (nOps == 4) {
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- cvtNum(ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[3].num, ops[3].isFP, charBuf);
- charBuf->append((char)12)->append((char)6);
- } else if (nOps == 0) {
- charBuf->append((char)14);
- } else {
- //~ error(-1, "Wrong number of args (%d) to Type 2 endchar", nOps);
- }
- nOps = 0;
- break;
- case 0x000f: // (obsolete)
- // this op is ignored, but we need the glyph width
- if (firstOp) {
- cvtGlyphWidth(nOps > 0, charBuf, pDict);
- firstOp = gFalse;
- }
- nOps = 0;
- break;
- case 0x0010: // blend
- //~ error(-1, "Unimplemented Type 2 charstring op: %d", file[i]);
- nOps = 0;
- break;
- case 0x0012: // hstemhm
- // ignored
- if (firstOp) {
- cvtGlyphWidth(nOps & 1, charBuf, pDict);
- firstOp = gFalse;
- }
- if (nOps & 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hstemhm", nOps);
- }
- nHints += nOps / 2;
- nOps = 0;
- break;
- case 0x0013: // hintmask
- // ignored
- if (firstOp) {
- cvtGlyphWidth(nOps & 1, charBuf, pDict);
- firstOp = gFalse;
- }
- if (nOps > 0) {
- if (nOps & 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hintmask/vstemhm",
- //~ nOps);
- }
- nHints += nOps / 2;
- }
- pos += (nHints + 7) >> 3;
- nOps = 0;
- break;
- case 0x0014: // cntrmask
- // ignored
- if (firstOp) {
- cvtGlyphWidth(nOps & 1, charBuf, pDict);
- firstOp = gFalse;
- }
- if (nOps > 0) {
- if (nOps & 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 cntrmask/vstemhm",
- //~ nOps);
- }
- nHints += nOps / 2;
- }
- pos += (nHints + 7) >> 3;
- nOps = 0;
- break;
- case 0x0015: // rmoveto
- if (firstOp) {
- cvtGlyphWidth(nOps == 3, charBuf, pDict);
- firstOp = gFalse;
- }
- if (openPath) {
- charBuf->append((char)9);
- openPath = gFalse;
- }
- if (nOps != 2) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 rmoveto", nOps);
- }
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- charBuf->append((char)21);
- nOps = 0;
- break;
- case 0x0016: // hmoveto
- if (firstOp) {
- cvtGlyphWidth(nOps == 2, charBuf, pDict);
- firstOp = gFalse;
- }
- if (openPath) {
- charBuf->append((char)9);
- openPath = gFalse;
- }
- if (nOps != 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hmoveto", nOps);
- }
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- charBuf->append((char)22);
- nOps = 0;
- break;
- case 0x0017: // vstemhm
- // ignored
- if (firstOp) {
- cvtGlyphWidth(nOps & 1, charBuf, pDict);
- firstOp = gFalse;
- }
- if (nOps & 1) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 vstemhm", nOps);
- }
- nHints += nOps / 2;
- nOps = 0;
- break;
- case 0x0018: // rcurveline
- if (nOps < 8 || (nOps - 2) % 6 != 0) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 rcurveline", nOps);
- }
- for (k = 0; k < nOps - 2; k += 6) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf);
- cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf);
- charBuf->append((char)8);
- }
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k].isFP, charBuf);
- charBuf->append((char)5);
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0019: // rlinecurve
- if (nOps < 8 || (nOps - 6) % 2 != 0) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 rlinecurve", nOps);
- }
- for (k = 0; k < nOps - 6; k += 2) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k].isFP, charBuf);
- charBuf->append((char)5);
- }
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf);
- cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf);
- charBuf->append((char)8);
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x001a: // vvcurveto
- if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 vvcurveto", nOps);
- }
- if (nOps % 2 == 1) {
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- cvtNum(ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[3].num, ops[3].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[4].num, ops[4].isFP, charBuf);
- charBuf->append((char)8);
- k = 5;
- } else {
- k = 0;
- }
- for (; k < nOps; k += 4) {
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- charBuf->append((char)8);
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x001b: // hhcurveto
- if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hhcurveto", nOps);
- }
- if (nOps % 2 == 1) {
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[3].num, ops[3].isFP, charBuf);
- cvtNum(ops[4].num, ops[4].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- charBuf->append((char)8);
- k = 5;
- } else {
- k = 0;
- }
- for (; k < nOps; k += 4) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- charBuf->append((char)8);
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x001d: // callgsubr
- if (nOps >= 1) {
- k = gsubrBias + (int)ops[nOps - 1].num;
- --nOps;
- ok = gTrue;
- getIndexVal(&gsubrIdx, k, &val, &ok);
- if (ok) {
- cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse);
- }
- } else {
- //~ error(-1, "Too few args to Type 2 callgsubr");
- }
- // don't clear the stack
- break;
- case 0x001e: // vhcurveto
- if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 vhcurveto", nOps);
- }
- for (k = 0; k < nOps && k != nOps-5; k += 4) {
- if (k % 8 == 0) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- charBuf->append((char)30);
- } else {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- charBuf->append((char)31);
- }
- }
- if (k == nOps-5) {
- if (k % 8 == 0) {
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf);
- } else {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- }
- charBuf->append((char)8);
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x001f: // hvcurveto
- if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hvcurveto", nOps);
- }
- for (k = 0; k < nOps && k != nOps-5; k += 4) {
- if (k % 8 == 0) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- charBuf->append((char)31);
- } else {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- charBuf->append((char)30);
- }
- }
- if (k == nOps-5) {
- if (k % 8 == 0) {
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- } else {
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[k].num, ops[k].isFP, charBuf);
- cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf);
- cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf);
- cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf);
- cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf);
- }
- charBuf->append((char)8);
- }
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0c00: // dotsection (should be Type 1 only?)
- // ignored
- nOps = 0;
- break;
- case 0x0c03: // and
- case 0x0c04: // or
- case 0x0c05: // not
- case 0x0c08: // store
- case 0x0c09: // abs
- case 0x0c0a: // add
- case 0x0c0b: // sub
- case 0x0c0c: // div
- case 0x0c0d: // load
- case 0x0c0e: // neg
- case 0x0c0f: // eq
- case 0x0c12: // drop
- case 0x0c14: // put
- case 0x0c15: // get
- case 0x0c16: // ifelse
- case 0x0c17: // random
- case 0x0c18: // mul
- case 0x0c1a: // sqrt
- case 0x0c1b: // dup
- case 0x0c1c: // exch
- case 0x0c1d: // index
- case 0x0c1e: // roll
- //~ error(-1, "Unimplemented Type 2 charstring op: 12.%d", file[i+1]);
- nOps = 0;
- break;
- case 0x0c22: // hflex
- if (nOps != 7) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hflex", nOps);
- }
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- cvtNum(ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[3].num, ops[3].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- charBuf->append((char)8);
- cvtNum(ops[4].num, ops[4].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[5].num, ops[5].isFP, charBuf);
- cvtNum(-ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[6].num, ops[6].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- charBuf->append((char)8);
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0c23: // flex
- if (nOps != 13) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 flex", nOps);
- }
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- cvtNum(ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[3].num, ops[3].isFP, charBuf);
- cvtNum(ops[4].num, ops[4].isFP, charBuf);
- cvtNum(ops[5].num, ops[5].isFP, charBuf);
- charBuf->append((char)8);
- cvtNum(ops[6].num, ops[6].isFP, charBuf);
- cvtNum(ops[7].num, ops[7].isFP, charBuf);
- cvtNum(ops[8].num, ops[8].isFP, charBuf);
- cvtNum(ops[9].num, ops[9].isFP, charBuf);
- cvtNum(ops[10].num, ops[10].isFP, charBuf);
- cvtNum(ops[11].num, ops[11].isFP, charBuf);
- charBuf->append((char)8);
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0c24: // hflex1
- if (nOps != 9) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 hflex1", nOps);
- }
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- cvtNum(ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[3].num, ops[3].isFP, charBuf);
- cvtNum(ops[4].num, ops[4].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- charBuf->append((char)8);
- cvtNum(ops[5].num, ops[5].isFP, charBuf);
- cvtNum(0, gFalse, charBuf);
- cvtNum(ops[6].num, ops[6].isFP, charBuf);
- cvtNum(ops[7].num, ops[7].isFP, charBuf);
- cvtNum(ops[8].num, ops[8].isFP, charBuf);
- cvtNum(-(ops[1].num + ops[3].num + ops[7].num),
- ops[1].isFP | ops[3].isFP | ops[7].isFP, charBuf);
- charBuf->append((char)8);
- nOps = 0;
- openPath = gTrue;
- break;
- case 0x0c25: // flex1
- if (nOps != 11) {
- //~ error(-1, "Wrong number of args (%d) to Type 2 flex1", nOps);
- }
- cvtNum(ops[0].num, ops[0].isFP, charBuf);
- cvtNum(ops[1].num, ops[1].isFP, charBuf);
- cvtNum(ops[2].num, ops[2].isFP, charBuf);
- cvtNum(ops[3].num, ops[3].isFP, charBuf);
- cvtNum(ops[4].num, ops[4].isFP, charBuf);
- cvtNum(ops[5].num, ops[5].isFP, charBuf);
- charBuf->append((char)8);
- cvtNum(ops[6].num, ops[6].isFP, charBuf);
- cvtNum(ops[7].num, ops[7].isFP, charBuf);
- cvtNum(ops[8].num, ops[8].isFP, charBuf);
- cvtNum(ops[9].num, ops[9].isFP, charBuf);
- dx = ops[0].num + ops[2].num + ops[4].num + ops[6].num + ops[8].num;
- dy = ops[1].num + ops[3].num + ops[5].num + ops[7].num + ops[9].num;
- if (fabs(dx) > fabs(dy)) {
- cvtNum(ops[10].num, ops[10].isFP, charBuf);
- cvtNum(-dy, ops[1].isFP | ops[3].isFP | ops[5].isFP |
- ops[7].isFP | ops[9].isFP, charBuf);
- } else {
- cvtNum(-dx, ops[0].isFP | ops[2].isFP | ops[4].isFP |
- ops[6].isFP | ops[8].isFP, charBuf);
- cvtNum(ops[10].num, ops[10].isFP, charBuf);
- }
- charBuf->append((char)8);
- nOps = 0;
- openPath = gTrue;
- break;
- default:
- //~ error(-1, "Illegal Type 2 charstring op: %04x",
- //~ ops[nOps].op);
- nOps = 0;
- break;
- }
- }
- }
-
- // charstring encryption
- if (top) {
- r2 = 4330;
- for (i = start; i < charBuf->getLength(); ++i) {
- byte = charBuf->getChar(i) ^ (r2 >> 8);
- charBuf->setChar(i, byte);
- r2 = (byte + r2) * 52845 + 22719;
- }
- }
-}
-
-void FoFiType1C::cvtGlyphWidth(GBool useOp, GString *charBuf,
- Type1CPrivateDict *pDict) {
- double w;
- GBool wFP;
- int i;
-
- if (useOp) {
- w = pDict->nominalWidthX + ops[0].num;
- wFP = pDict->nominalWidthXFP | ops[0].isFP;
- for (i = 1; i < nOps; ++i) {
- ops[i-1] = ops[i];
- }
- --nOps;
- } else {
- w = pDict->defaultWidthX;
- wFP = pDict->defaultWidthXFP;
- }
- cvtNum(0, gFalse, charBuf);
- cvtNum(w, wFP, charBuf);
- charBuf->append((char)13);
-}
-
-void FoFiType1C::cvtNum(double x, GBool isFP, GString *charBuf) {
- Guchar buf[12];
- int y, n;
-
- n = 0;
- if (isFP) {
- if (x >= -32768 && x < 32768) {
- y = (int)(x * 256.0);
- buf[0] = 255;
- buf[1] = (Guchar)(y >> 24);
- buf[2] = (Guchar)(y >> 16);
- buf[3] = (Guchar)(y >> 8);
- buf[4] = (Guchar)y;
- buf[5] = 255;
- buf[6] = 0;
- buf[7] = 0;
- buf[8] = 1;
- buf[9] = 0;
- buf[10] = 12;
- buf[11] = 12;
- n = 12;
- } else {
- //~ error(-1, "Type 2 fixed point constant out of range");
- }
- } else {
- y = (int)x;
- if (y >= -107 && y <= 107) {
- buf[0] = (Guchar)(y + 139);
- n = 1;
- } else if (y > 107 && y <= 1131) {
- y -= 108;
- buf[0] = (Guchar)((y >> 8) + 247);
- buf[1] = (Guchar)(y & 0xff);
- n = 2;
- } else if (y < -107 && y >= -1131) {
- y = -y - 108;
- buf[0] = (Guchar)((y >> 8) + 251);
- buf[1] = (Guchar)(y & 0xff);
- n = 2;
- } else {
- buf[0] = 255;
- buf[1] = (Guchar)(y >> 24);
- buf[2] = (Guchar)(y >> 16);
- buf[3] = (Guchar)(y >> 8);
- buf[4] = (Guchar)y;
- n = 5;
- }
- }
- charBuf->append((char *)buf, n);
-}
-
-void FoFiType1C::eexecWrite(Type1CEexecBuf *eb, char *s) {
- Guchar *p;
- Guchar x;
-
- for (p = (Guchar *)s; *p; ++p) {
- x = *p ^ (eb->r1 >> 8);
- eb->r1 = (x + eb->r1) * 52845 + 22719;
- if (eb->ascii) {
- (*eb->outputFunc)(eb->outputStream, &hexChars[x >> 4], 1);
- (*eb->outputFunc)(eb->outputStream, &hexChars[x & 0x0f], 1);
- eb->line += 2;
- if (eb->line == 64) {
- (*eb->outputFunc)(eb->outputStream, "\n", 1);
- eb->line = 0;
- }
- } else {
- (*eb->outputFunc)(eb->outputStream, (char *)&x, 1);
- }
- }
-}
-
-void FoFiType1C::eexecWriteCharstring(Type1CEexecBuf *eb,
- Guchar *s, int n) {
- Guchar x;
- int i;
-
- // eexec encryption
- for (i = 0; i < n; ++i) {
- x = s[i] ^ (eb->r1 >> 8);
- eb->r1 = (x + eb->r1) * 52845 + 22719;
- if (eb->ascii) {
- (*eb->outputFunc)(eb->outputStream, &hexChars[x >> 4], 1);
- (*eb->outputFunc)(eb->outputStream, &hexChars[x & 0x0f], 1);
- eb->line += 2;
- if (eb->line == 64) {
- (*eb->outputFunc)(eb->outputStream, "\n", 1);
- eb->line = 0;
- }
- } else {
- (*eb->outputFunc)(eb->outputStream, (char *)&x, 1);
- }
- }
-}
-
-GBool FoFiType1C::parse() {
- Type1CIndex fdIdx;
- Type1CIndexVal val;
- int i;
-
- parsedOk = gTrue;
-
- // some tools embed Type 1C fonts with an extra whitespace char at
- // the beginning
- if (len > 0 && file[0] != '\x01') {
- ++file;
- --len;
- }
-
- // find the indexes
- getIndex(getU8(2, &parsedOk), &nameIdx, &parsedOk);
- getIndex(nameIdx.endPos, &topDictIdx, &parsedOk);
- getIndex(topDictIdx.endPos, &stringIdx, &parsedOk);
- getIndex(stringIdx.endPos, &gsubrIdx, &parsedOk);
- if (!parsedOk) {
- return gFalse;
- }
- gsubrBias = (gsubrIdx.len < 1240) ? 107
- : (gsubrIdx.len < 33900) ? 1131 : 32768;
-
- // read the first font name
- getIndexVal(&nameIdx, 0, &val, &parsedOk);
- if (!parsedOk) {
- return gFalse;
- }
- name = new GString((char *)&file[val.pos], val.len);
-
- // read the top dict for the first font
- readTopDict();
-
- // for CID fonts: read the FDArray dicts and private dicts
- if (topDict.firstOp == 0x0c1e) {
- if (topDict.fdArrayOffset == 0) {
- nFDs = 1;
- privateDicts = (Type1CPrivateDict *)gmalloc(sizeof(Type1CPrivateDict));
- readPrivateDict(0, 0, &privateDicts[0]);
- } else {
- getIndex(topDict.fdArrayOffset, &fdIdx, &parsedOk);
- if (!parsedOk) {
- return gFalse;
- }
- nFDs = fdIdx.len;
- privateDicts = (Type1CPrivateDict *)
- gmallocn(nFDs, sizeof(Type1CPrivateDict));
- for (i = 0; i < nFDs; ++i) {
- getIndexVal(&fdIdx, i, &val, &parsedOk);
- if (!parsedOk) {
- return gFalse;
- }
- readFD(val.pos, val.len, &privateDicts[i]);
- }
- }
-
- // for 8-bit fonts: read the private dict
- } else {
- privateDicts = (Type1CPrivateDict *)gmalloc(sizeof(Type1CPrivateDict));
- readPrivateDict(topDict.privateOffset, topDict.privateSize,
- &privateDicts[0]);
- }
-
- // check for parse errors in the private dict(s)
- if (!parsedOk) {
- return gFalse;
- }
-
- // get the charstrings index
- if (topDict.charStringsOffset <= 0) {
- parsedOk = gFalse;
- return gFalse;
- }
- getIndex(topDict.charStringsOffset, &charStringsIdx, &parsedOk);
- if (!parsedOk) {
- return gFalse;
- }
- nGlyphs = charStringsIdx.len;
-
- // for CID fonts: read the FDSelect table
- if (topDict.firstOp == 0x0c1e) {
- readFDSelect();
- if (!parsedOk) {
- return gFalse;
- }
- }
-
- // read the charset
- if (!readCharset()) {
- parsedOk = gFalse;
- return gFalse;
- }
-
- // for 8-bit fonts: build the encoding
- if (topDict.firstOp != 0x0c14 && topDict.firstOp != 0x0c1e) {
- buildEncoding();
- if (!parsedOk) {
- return gFalse;
- }
- }
-
- return parsedOk;
-}
-
-void FoFiType1C::readTopDict() {
- Type1CIndexVal topDictPtr;
- int pos;
-
- topDict.firstOp = -1;
- topDict.versionSID = 0;
- topDict.noticeSID = 0;
- topDict.copyrightSID = 0;
- topDict.fullNameSID = 0;
- topDict.familyNameSID = 0;
- topDict.weightSID = 0;
- topDict.isFixedPitch = 0;
- topDict.italicAngle = 0;
- topDict.underlinePosition = -100;
- topDict.underlineThickness = 50;
- topDict.paintType = 0;
- topDict.charstringType = 2;
- topDict.fontMatrix[0] = 0.001;
- topDict.fontMatrix[1] = 0;
- topDict.fontMatrix[2] = 0;
- topDict.fontMatrix[3] = 0.001;
- topDict.fontMatrix[4] = 0;
- topDict.fontMatrix[5] = 0;
- topDict.hasFontMatrix = gFalse;
- topDict.uniqueID = 0;
- topDict.fontBBox[0] = 0;
- topDict.fontBBox[1] = 0;
- topDict.fontBBox[2] = 0;
- topDict.fontBBox[3] = 0;
- topDict.strokeWidth = 0;
- topDict.charsetOffset = 0;
- topDict.encodingOffset = 0;
- topDict.charStringsOffset = 0;
- topDict.privateSize = 0;
- topDict.privateOffset = 0;
- topDict.registrySID = 0;
- topDict.orderingSID = 0;
- topDict.supplement = 0;
- topDict.fdArrayOffset = 0;
- topDict.fdSelectOffset = 0;
-
- getIndexVal(&topDictIdx, 0, &topDictPtr, &parsedOk);
- pos = topDictPtr.pos;
- nOps = 0;
- while (pos < topDictPtr.pos + topDictPtr.len) {
- pos = getOp(pos, gFalse, &parsedOk);
- if (!parsedOk) {
- break;
- }
- if (!ops[nOps - 1].isNum) {
- --nOps; // drop the operator
- if (topDict.firstOp < 0) {
- topDict.firstOp = ops[nOps].op;
- }
- switch (ops[nOps].op) {
- case 0x0000: topDict.versionSID = (int)ops[0].num; break;
- case 0x0001: topDict.noticeSID = (int)ops[0].num; break;
- case 0x0c00: topDict.copyrightSID = (int)ops[0].num; break;
- case 0x0002: topDict.fullNameSID = (int)ops[0].num; break;
- case 0x0003: topDict.familyNameSID = (int)ops[0].num; break;
- case 0x0004: topDict.weightSID = (int)ops[0].num; break;
- case 0x0c01: topDict.isFixedPitch = (int)ops[0].num; break;
- case 0x0c02: topDict.italicAngle = ops[0].num; break;
- case 0x0c03: topDict.underlinePosition = ops[0].num; break;
- case 0x0c04: topDict.underlineThickness = ops[0].num; break;
- case 0x0c05: topDict.paintType = (int)ops[0].num; break;
- case 0x0c06: topDict.charstringType = (int)ops[0].num; break;
- case 0x0c07: topDict.fontMatrix[0] = ops[0].num;
- topDict.fontMatrix[1] = ops[1].num;
- topDict.fontMatrix[2] = ops[2].num;
- topDict.fontMatrix[3] = ops[3].num;
- topDict.fontMatrix[4] = ops[4].num;
- topDict.fontMatrix[5] = ops[5].num;
- topDict.hasFontMatrix = gTrue; break;
- case 0x000d: topDict.uniqueID = (int)ops[0].num; break;
- case 0x0005: topDict.fontBBox[0] = ops[0].num;
- topDict.fontBBox[1] = ops[1].num;
- topDict.fontBBox[2] = ops[2].num;
- topDict.fontBBox[3] = ops[3].num; break;
- case 0x0c08: topDict.strokeWidth = ops[0].num; break;
- case 0x000f: topDict.charsetOffset = (int)ops[0].num; break;
- case 0x0010: topDict.encodingOffset = (int)ops[0].num; break;
- case 0x0011: topDict.charStringsOffset = (int)ops[0].num; break;
- case 0x0012: topDict.privateSize = (int)ops[0].num;
- topDict.privateOffset = (int)ops[1].num; break;
- case 0x0c1e: topDict.registrySID = (int)ops[0].num;
- topDict.orderingSID = (int)ops[1].num;
- topDict.supplement = (int)ops[2].num; break;
- case 0x0c24: topDict.fdArrayOffset = (int)ops[0].num; break;
- case 0x0c25: topDict.fdSelectOffset = (int)ops[0].num; break;
- }
- nOps = 0;
- }
- }
-}
-
-// Read a CID font dict (FD) - this pulls out the private dict
-// pointer, and reads the private dict. It also pulls the FontMatrix
-// (if any) out of the FD.
-void FoFiType1C::readFD(int offset, int length, Type1CPrivateDict *pDict) {
- int pos, pSize, pOffset;
- double fontMatrix[6];
- GBool hasFontMatrix;
-
- hasFontMatrix = gFalse;
- pSize = pOffset = 0;
- pos = offset;
- nOps = 0;
- while (pos < offset + length) {
- pos = getOp(pos, gFalse, &parsedOk);
- if (!parsedOk) {
- return;
- }
- if (!ops[nOps - 1].isNum) {
- if (ops[nOps - 1].op == 0x0012) {
- if (nOps < 3) {
- parsedOk = gFalse;
- return;
- }
- pSize = (int)ops[0].num;
- pOffset = (int)ops[1].num;
- break;
- } else if (ops[nOps - 1].op == 0x0c07) {
- fontMatrix[0] = ops[0].num;
- fontMatrix[1] = ops[1].num;
- fontMatrix[2] = ops[2].num;
- fontMatrix[3] = ops[3].num;
- fontMatrix[4] = ops[4].num;
- fontMatrix[5] = ops[5].num;
- hasFontMatrix = gTrue;
- }
- nOps = 0;
- }
- }
- readPrivateDict(pOffset, pSize, pDict);
- if (hasFontMatrix) {
- pDict->fontMatrix[0] = fontMatrix[0];
- pDict->fontMatrix[1] = fontMatrix[1];
- pDict->fontMatrix[2] = fontMatrix[2];
- pDict->fontMatrix[3] = fontMatrix[3];
- pDict->fontMatrix[4] = fontMatrix[4];
- pDict->fontMatrix[5] = fontMatrix[5];
- pDict->hasFontMatrix = gTrue;
- }
-}
-
-void FoFiType1C::readPrivateDict(int offset, int length,
- Type1CPrivateDict *pDict) {
- int pos;
-
- pDict->hasFontMatrix = gFalse;
- pDict->nBlueValues = 0;
- pDict->nOtherBlues = 0;
- pDict->nFamilyBlues = 0;
- pDict->nFamilyOtherBlues = 0;
- pDict->blueScale = 0.039625;
- pDict->blueShift = 7;
- pDict->blueFuzz = 1;
- pDict->hasStdHW = gFalse;
- pDict->hasStdVW = gFalse;
- pDict->nStemSnapH = 0;
- pDict->nStemSnapV = 0;
- pDict->hasForceBold = gFalse;
- pDict->forceBoldThreshold = 0;
- pDict->languageGroup = 0;
- pDict->expansionFactor = 0.06;
- pDict->initialRandomSeed = 0;
- pDict->subrsOffset = 0;
- pDict->defaultWidthX = 0;
- pDict->defaultWidthXFP = gFalse;
- pDict->nominalWidthX = 0;
- pDict->nominalWidthXFP = gFalse;
-
- // no dictionary
- if (offset == 0 || length == 0) {
- return;
- }
-
- pos = offset;
- nOps = 0;
- while (pos < offset + length) {
- pos = getOp(pos, gFalse, &parsedOk);
- if (!parsedOk) {
- break;
- }
- if (!ops[nOps - 1].isNum) {
- --nOps; // drop the operator
- switch (ops[nOps].op) {
- case 0x0006:
- pDict->nBlueValues = getDeltaIntArray(pDict->blueValues,
- type1CMaxBlueValues);
- break;
- case 0x0007:
- pDict->nOtherBlues = getDeltaIntArray(pDict->otherBlues,
- type1CMaxOtherBlues);
- break;
- case 0x0008:
- pDict->nFamilyBlues = getDeltaIntArray(pDict->familyBlues,
- type1CMaxBlueValues);
- break;
- case 0x0009:
- pDict->nFamilyOtherBlues = getDeltaIntArray(pDict->familyOtherBlues,
- type1CMaxOtherBlues);
- break;
- case 0x0c09:
- pDict->blueScale = ops[0].num;
- break;
- case 0x0c0a:
- pDict->blueShift = (int)ops[0].num;
- break;
- case 0x0c0b:
- pDict->blueFuzz = (int)ops[0].num;
- break;
- case 0x000a:
- pDict->stdHW = ops[0].num;
- pDict->hasStdHW = gTrue;
- break;
- case 0x000b:
- pDict->stdVW = ops[0].num;
- pDict->hasStdVW = gTrue;
- break;
- case 0x0c0c:
- pDict->nStemSnapH = getDeltaFPArray(pDict->stemSnapH,
- type1CMaxStemSnap);
- break;
- case 0x0c0d:
- pDict->nStemSnapV = getDeltaFPArray(pDict->stemSnapV,
- type1CMaxStemSnap);
- break;
- case 0x0c0e:
- pDict->forceBold = ops[0].num != 0;
- pDict->hasForceBold = gTrue;
- break;
- case 0x0c0f:
- pDict->forceBoldThreshold = ops[0].num;
- break;
- case 0x0c11:
- pDict->languageGroup = (int)ops[0].num;
- break;
- case 0x0c12:
- pDict->expansionFactor = ops[0].num;
- break;
- case 0x0c13:
- pDict->initialRandomSeed = (int)ops[0].num;
- break;
- case 0x0013:
- pDict->subrsOffset = offset + (int)ops[0].num;
- break;
- case 0x0014:
- pDict->defaultWidthX = ops[0].num;
- pDict->defaultWidthXFP = ops[0].isFP;
- break;
- case 0x0015:
- pDict->nominalWidthX = ops[0].num;
- pDict->nominalWidthXFP = ops[0].isFP;
- break;
- }
- nOps = 0;
- }
- }
-}
-
-void FoFiType1C::readFDSelect() {
- int fdSelectFmt, pos, nRanges, gid0, gid1, fd, i, j;
-
- fdSelect = (Guchar *)gmalloc(nGlyphs);
- if (topDict.fdSelectOffset == 0) {
- for (i = 0; i < nGlyphs; ++i) {
- fdSelect[i] = 0;
- }
- } else {
- pos = topDict.fdSelectOffset;
- fdSelectFmt = getU8(pos++, &parsedOk);
- if (!parsedOk) {
- return;
- }
- if (fdSelectFmt == 0) {
- if (!checkRegion(pos, nGlyphs)) {
- parsedOk = gFalse;
- return;
- }
- memcpy(fdSelect, file + pos, nGlyphs);
- } else if (fdSelectFmt == 3) {
- nRanges = getU16BE(pos, &parsedOk);
- pos += 2;
- gid0 = getU16BE(pos, &parsedOk);
- pos += 2;
- for (i = 1; i <= nRanges; ++i) {
- fd = getU8(pos++, &parsedOk);
- gid1 = getU16BE(pos, &parsedOk);
- if (!parsedOk) {
- return;
- }
- pos += 2;
- if (gid0 > gid1 || gid1 > nGlyphs) {
- //~ error(-1, "Bad FDSelect table in CID font");
- parsedOk = gFalse;
- return;
- }
- for (j = gid0; j < gid1; ++j) {
- fdSelect[j] = fd;
- }
- gid0 = gid1;
- }
- } else {
- //~ error(-1, "Unknown FDSelect table format in CID font");
- for (i = 0; i < nGlyphs; ++i) {
- fdSelect[i] = 0;
- }
- }
- }
-}
-
-void FoFiType1C::buildEncoding() {
- char buf[256];
- int nCodes, nRanges, encFormat;
- int pos, c, sid, nLeft, nSups, i, j;
-
- if (topDict.encodingOffset == 0) {
- encoding = fofiType1StandardEncoding;
-
- } else if (topDict.encodingOffset == 1) {
- encoding = fofiType1ExpertEncoding;
-
- } else {
- encoding = (char **)gmallocn(256, sizeof(char *));
- for (i = 0; i < 256; ++i) {
- encoding[i] = NULL;
- }
- pos = topDict.encodingOffset;
- encFormat = getU8(pos++, &parsedOk);
- if (!parsedOk) {
- return;
- }
- if ((encFormat & 0x7f) == 0) {
- nCodes = 1 + getU8(pos++, &parsedOk);
- if (!parsedOk) {
- return;
- }
- if (nCodes > nGlyphs) {
- nCodes = nGlyphs;
- }
- for (i = 1; i < nCodes; ++i) {
- c = getU8(pos++, &parsedOk);
- if (!parsedOk) {
- return;
- }
- if (encoding[c]) {
- gfree(encoding[c]);
- }
- encoding[c] = copyString(getString(charset[i], buf, &parsedOk));
- }
- } else if ((encFormat & 0x7f) == 1) {
- nRanges = getU8(pos++, &parsedOk);
- if (!parsedOk) {
- return;
- }
- nCodes = 1;
- for (i = 0; i < nRanges; ++i) {
- c = getU8(pos++, &parsedOk);
- nLeft = getU8(pos++, &parsedOk);
- if (!parsedOk) {
- return;
- }
- for (j = 0; j <= nLeft && nCodes < nGlyphs; ++j) {
- if (c < 256) {
- if (encoding[c]) {
- gfree(encoding[c]);
- }
- encoding[c] = copyString(getString(charset[nCodes], buf,
- &parsedOk));
- }
- ++nCodes;
- ++c;
- }
- }
- }
- if (encFormat & 0x80) {
- nSups = getU8(pos++, &parsedOk);
- if (!parsedOk) {
- return;
- }
- for (i = 0; i < nSups; ++i) {
- c = getU8(pos++, &parsedOk);;
- if (!parsedOk) {
- return;;
- }
- sid = getU16BE(pos, &parsedOk);
- pos += 2;
- if (!parsedOk) {
- return;
- }
- if (encoding[c]) {
- gfree(encoding[c]);
- }
- encoding[c] = copyString(getString(sid, buf, &parsedOk));
- }
- }
- }
-}
-
-GBool FoFiType1C::readCharset() {
- int charsetFormat, c, pos;
- int nLeft, i, j;
-
- if (topDict.charsetOffset == 0) {
- charset = fofiType1CISOAdobeCharset;
- } else if (topDict.charsetOffset == 1) {
- charset = fofiType1CExpertCharset;
- } else if (topDict.charsetOffset == 2) {
- charset = fofiType1CExpertSubsetCharset;
- } else {
- charset = (Gushort *)gmallocn(nGlyphs, sizeof(Gushort));
- for (i = 0; i < nGlyphs; ++i) {
- charset[i] = 0;
- }
- pos = topDict.charsetOffset;
- charsetFormat = getU8(pos++, &parsedOk);
- if (charsetFormat == 0) {
- for (i = 1; i < nGlyphs; ++i) {
- charset[i] = (Gushort)getU16BE(pos, &parsedOk);
- pos += 2;
- if (!parsedOk) {
- break;
- }
- }
- } else if (charsetFormat == 1) {
- i = 1;
- while (i < nGlyphs) {
- c = getU16BE(pos, &parsedOk);
- pos += 2;
- nLeft = getU8(pos++, &parsedOk);
- if (!parsedOk) {
- break;
- }
- for (j = 0; j <= nLeft && i < nGlyphs; ++j) {
- charset[i++] = (Gushort)c++;
- }
- }
- } else if (charsetFormat == 2) {
- i = 1;
- while (i < nGlyphs) {
- c = getU16BE(pos, &parsedOk);
- pos += 2;
- nLeft = getU16BE(pos, &parsedOk);
- pos += 2;
- if (!parsedOk) {
- break;
- }
- for (j = 0; j <= nLeft && i < nGlyphs; ++j) {
- charset[i++] = (Gushort)c++;
- }
- }
- }
- if (!parsedOk) {
- gfree(charset);
- charset = NULL;
- return gFalse;
- }
- }
- return gTrue;
-}
-
-int FoFiType1C::getOp(int pos, GBool charstring, GBool *ok) {
- static char nybChars[16] = "0123456789.ee -";
- Type1COp op;
- char buf[65];
- int b0, b1, nyb0, nyb1, x, i;
-
- b0 = getU8(pos++, ok);
- op.isNum = gTrue;
- op.isFP = gFalse;
-
- if (b0 == 28) {
- x = getU8(pos++, ok);
- x = (x << 8) | getU8(pos++, ok);
- if (x & 0x8000) {
- x |= ~0xffff;
- }
- op.num = x;
-
- } else if (!charstring && b0 == 29) {
- x = getU8(pos++, ok);
- x = (x << 8) | getU8(pos++, ok);
- x = (x << 8) | getU8(pos++, ok);
- x = (x << 8) | getU8(pos++, ok);
- if (x & 0x80000000) {
- x |= ~0xffffffff;
- }
- op.num = x;
-
- } else if (!charstring && b0 == 30) {
- i = 0;
- do {
- b1 = getU8(pos++, ok);
- nyb0 = b1 >> 4;
- nyb1 = b1 & 0x0f;
- if (nyb0 == 0xf) {
- break;
- }
- buf[i++] = nybChars[nyb0];
- if (i == 64) {
- break;
- }
- if (nyb0 == 0xc) {
- buf[i++] = '-';
- }
- if (i == 64) {
- break;
- }
- if (nyb1 == 0xf) {
- break;
- }
- buf[i++] = nybChars[nyb1];
- if (i == 64) {
- break;
- }
- if (nyb1 == 0xc) {
- buf[i++] = '-';
- }
- } while (i < 64);
- buf[i] = '\0';
- op.num = atof(buf);
- op.isFP = gTrue;
-
- } else if (b0 >= 32 && b0 <= 246) {
- op.num = b0 - 139;
-
- } else if (b0 >= 247 && b0 <= 250) {
- op.num = ((b0 - 247) << 8) + getU8(pos++, ok) + 108;
-
- } else if (b0 >= 251 && b0 <= 254) {
- op.num = -((b0 - 251) << 8) - getU8(pos++, ok) - 108;
-
- } else if (charstring && b0 == 255) {
- x = getU8(pos++, ok);
- x = (x << 8) | getU8(pos++, ok);
- x = (x << 8) | getU8(pos++, ok);
- x = (x << 8) | getU8(pos++, ok);
- if (x & 0x80000000) {
- x |= ~0xffffffff;
- }
- op.num = (double)x / 65536.0;
- op.isFP = gTrue;
-
- } else if (b0 == 12) {
- op.isNum = gFalse;
- op.op = 0x0c00 + getU8(pos++, ok);
-
- } else {
- op.isNum = gFalse;
- op.op = b0;
- }
-
- if (nOps < 49) {
- ops[nOps++] = op;
- }
-
- return pos;
-}
-
-// Convert the delta-encoded ops array to an array of ints.
-int FoFiType1C::getDeltaIntArray(int *arr, int maxLen) {
- int x;
- int n, i;
-
- if ((n = nOps) > maxLen) {
- n = maxLen;
- }
- x = 0;
- for (i = 0; i < n; ++i) {
- x += (int)ops[i].num;
- arr[i] = x;
- }
- return n;
-}
-
-// Convert the delta-encoded ops array to an array of doubles.
-int FoFiType1C::getDeltaFPArray(double *arr, int maxLen) {
- double x;
- int n, i;
-
- if ((n = nOps) > maxLen) {
- n = maxLen;
- }
- x = 0;
- for (i = 0; i < n; ++i) {
- x += ops[i].num;
- arr[i] = x;
- }
- return n;
-}
-
-void FoFiType1C::getIndex(int pos, Type1CIndex *idx, GBool *ok) {
- idx->pos = pos;
- idx->len = getU16BE(pos, ok);
- if (idx->len == 0) {
- // empty indexes are legal and contain just the length field
- idx->offSize = 0;
- idx->startPos = idx->endPos = pos + 2;
- } else {
- idx->offSize = getU8(pos + 2, ok);
- if (idx->offSize < 1 || idx->offSize > 4) {
- *ok = gFalse;
- }
- idx->startPos = pos + 3 + (idx->len + 1) * idx->offSize - 1;
- if (idx->startPos < 0 || idx->startPos >= len) {
- *ok = gFalse;
- }
- idx->endPos = idx->startPos + getUVarBE(pos + 3 + idx->len * idx->offSize,
- idx->offSize, ok);
- if (idx->endPos < idx->startPos || idx->endPos > len) {
- *ok = gFalse;
- }
- }
-}
-
-void FoFiType1C::getIndexVal(Type1CIndex *idx, int i,
- Type1CIndexVal *val, GBool *ok) {
- int pos0, pos1;
-
- if (i < 0 || i >= idx->len) {
- *ok = gFalse;
- return;
- }
- pos0 = idx->startPos + getUVarBE(idx->pos + 3 + i * idx->offSize,
- idx->offSize, ok);
- pos1 = idx->startPos + getUVarBE(idx->pos + 3 + (i + 1) * idx->offSize,
- idx->offSize, ok);
- if (pos0 < idx->startPos || pos0 > idx->endPos ||
- pos1 <= idx->startPos || pos1 > idx->endPos ||
- pos1 < pos0) {
- *ok = gFalse;
- }
- val->pos = pos0;
- val->len = pos1 - pos0;
-}
-
-char *FoFiType1C::getString(int sid, char *buf, GBool *ok) {
- Type1CIndexVal val;
- int n;
-
- if (sid < 391) {
- strcpy(buf, fofiType1CStdStrings[sid]);
- } else {
- sid -= 391;
- getIndexVal(&stringIdx, sid, &val, ok);
- if (*ok) {
- if ((n = val.len) > 255) {
- n = 255;
- }
- strncpy(buf, (char *)&file[val.pos], n);
- buf[n] = '\0';
- } else {
- buf[0] = '\0';
- }
- }
- return buf;
-}
diff --git a/Build/source/libs/xpdf/fofi/FoFiType1C.h b/Build/source/libs/xpdf/fofi/FoFiType1C.h
deleted file mode 100644
index eec27555494..00000000000
--- a/Build/source/libs/xpdf/fofi/FoFiType1C.h
+++ /dev/null
@@ -1,233 +0,0 @@
-//========================================================================
-//
-// FoFiType1C.h
-//
-// Copyright 1999-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FOFITYPE1C_H
-#define FOFITYPE1C_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "FoFiBase.h"
-
-class GString;
-
-//------------------------------------------------------------------------
-
-struct Type1CIndex {
- int pos; // absolute position in file
- int len; // length (number of entries)
- int offSize; // offset size
- int startPos; // position of start of index data - 1
- int endPos; // position one byte past end of the index
-};
-
-struct Type1CIndexVal {
- int pos; // absolute position in file
- int len; // length, in bytes
-};
-
-struct Type1CTopDict {
- int firstOp;
-
- int versionSID;
- int noticeSID;
- int copyrightSID;
- int fullNameSID;
- int familyNameSID;
- int weightSID;
- int isFixedPitch;
- double italicAngle;
- double underlinePosition;
- double underlineThickness;
- int paintType;
- int charstringType;
- double fontMatrix[6];
- GBool hasFontMatrix; // CID fonts are allowed to put their
- // FontMatrix in the FD instead of the
- // top dict
- int uniqueID;
- double fontBBox[4];
- double strokeWidth;
- int charsetOffset;
- int encodingOffset;
- int charStringsOffset;
- int privateSize;
- int privateOffset;
-
- // CIDFont entries
- int registrySID;
- int orderingSID;
- int supplement;
- int fdArrayOffset;
- int fdSelectOffset;
-};
-
-#define type1CMaxBlueValues 14
-#define type1CMaxOtherBlues 10
-#define type1CMaxStemSnap 12
-
-struct Type1CPrivateDict {
- double fontMatrix[6];
- GBool hasFontMatrix;
- int blueValues[type1CMaxBlueValues];
- int nBlueValues;
- int otherBlues[type1CMaxOtherBlues];
- int nOtherBlues;
- int familyBlues[type1CMaxBlueValues];
- int nFamilyBlues;
- int familyOtherBlues[type1CMaxOtherBlues];
- int nFamilyOtherBlues;
- double blueScale;
- int blueShift;
- int blueFuzz;
- double stdHW;
- GBool hasStdHW;
- double stdVW;
- GBool hasStdVW;
- double stemSnapH[type1CMaxStemSnap];
- int nStemSnapH;
- double stemSnapV[type1CMaxStemSnap];
- int nStemSnapV;
- GBool forceBold;
- GBool hasForceBold;
- double forceBoldThreshold;
- int languageGroup;
- double expansionFactor;
- int initialRandomSeed;
- int subrsOffset;
- double defaultWidthX;
- GBool defaultWidthXFP;
- double nominalWidthX;
- GBool nominalWidthXFP;
-};
-
-struct Type1COp {
- GBool isNum; // true -> number, false -> operator
- GBool isFP; // true -> floating point number, false -> int
- union {
- double num; // if num is true
- int op; // if num is false
- };
-};
-
-struct Type1CEexecBuf {
- FoFiOutputFunc outputFunc;
- void *outputStream;
- GBool ascii; // ASCII encoding?
- Gushort r1; // eexec encryption key
- int line; // number of eexec chars left on current line
-};
-
-//------------------------------------------------------------------------
-// FoFiType1C
-//------------------------------------------------------------------------
-
-class FoFiType1C: public FoFiBase {
-public:
-
- // Create a FoFiType1C object from a memory buffer.
- static FoFiType1C *make(char *fileA, int lenA);
-
- // Create a FoFiType1C object from a file on disk.
- static FoFiType1C *load(char *fileName);
-
- virtual ~FoFiType1C();
-
- // Return the font name.
- char *getName();
-
- // Return the encoding, as an array of 256 names (any of which may
- // be NULL). This is only useful with 8-bit fonts.
- char **getEncoding();
-
- // Return the mapping from CIDs to GIDs, and return the number of
- // CIDs in *<nCIDs>. This is only useful for CID fonts.
- Gushort *getCIDToGIDMap(int *nCIDs);
-
- // Convert to a Type 1 font, suitable for embedding in a PostScript
- // file. This is only useful with 8-bit fonts. If <newEncoding> is
- // not NULL, it will be used in place of the encoding in the Type 1C
- // font. If <ascii> is true the eexec section will be hex-encoded,
- // otherwise it will be left as binary data. If <psName> is non-NULL,
- // it will be used as the PostScript font name.
- void convertToType1(char *psName, char **newEncoding, GBool ascii,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Convert to a Type 0 CIDFont, suitable for embedding in a
- // PostScript file. <psName> will be used as the PostScript font
- // name.
- void convertToCIDType0(char *psName,
- FoFiOutputFunc outputFunc, void *outputStream);
-
- // Convert to a Type 0 (but non-CID) composite font, suitable for
- // embedding in a PostScript file. <psName> will be used as the
- // PostScript font name.
- void convertToType0(char *psName,
- FoFiOutputFunc outputFunc, void *outputStream);
-
-private:
-
- FoFiType1C(char *fileA, int lenA, GBool freeFileDataA);
- void eexecCvtGlyph(Type1CEexecBuf *eb, char *glyphName,
- int offset, int nBytes,
- Type1CIndex *subrIdx,
- Type1CPrivateDict *pDict);
- void cvtGlyph(int offset, int nBytes, GString *charBuf,
- Type1CIndex *subrIdx, Type1CPrivateDict *pDict,
- GBool top);
- void cvtGlyphWidth(GBool useOp, GString *charBuf,
- Type1CPrivateDict *pDict);
- void cvtNum(double x, GBool isFP, GString *charBuf);
- void eexecWrite(Type1CEexecBuf *eb, char *s);
- void eexecWriteCharstring(Type1CEexecBuf *eb, Guchar *s, int n);
- GBool parse();
- void readTopDict();
- void readFD(int offset, int length, Type1CPrivateDict *pDict);
- void readPrivateDict(int offset, int length, Type1CPrivateDict *pDict);
- void readFDSelect();
- void buildEncoding();
- GBool readCharset();
- int getOp(int pos, GBool charstring, GBool *ok);
- int getDeltaIntArray(int *arr, int maxLen);
- int getDeltaFPArray(double *arr, int maxLen);
- void getIndex(int pos, Type1CIndex *idx, GBool *ok);
- void getIndexVal(Type1CIndex *idx, int i, Type1CIndexVal *val, GBool *ok);
- char *getString(int sid, char *buf, GBool *ok);
-
- GString *name;
- char **encoding;
-
- Type1CIndex nameIdx;
- Type1CIndex topDictIdx;
- Type1CIndex stringIdx;
- Type1CIndex gsubrIdx;
- Type1CIndex charStringsIdx;
-
- Type1CTopDict topDict;
- Type1CPrivateDict *privateDicts;
-
- int nGlyphs;
- int nFDs;
- Guchar *fdSelect;
- Gushort *charset;
- int gsubrBias;
-
- GBool parsedOk;
-
- Type1COp ops[49]; // operands and operator
- int nOps; // number of operands
- int nHints; // number of hints for the current glyph
- GBool firstOp; // true if we haven't hit the first op yet
- GBool openPath; // true if there is an unclosed path
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/fofi/Makefile.dep b/Build/source/libs/xpdf/fofi/Makefile.dep
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/Build/source/libs/xpdf/fofi/Makefile.dep
+++ /dev/null
diff --git a/Build/source/libs/xpdf/fofi/Makefile.in b/Build/source/libs/xpdf/fofi/Makefile.in
deleted file mode 100644
index ec6454346f3..00000000000
--- a/Build/source/libs/xpdf/fofi/Makefile.in
+++ /dev/null
@@ -1,91 +0,0 @@
-# @configure_input@
-
-#========================================================================
-#
-# fofi library Makefile
-#
-# Copyright 1996 Derek B. Noonburg
-#
-#========================================================================
-
-# ------------------------------------------------------------------------
-# Changed by Martin Schröder <martin@pdftex.org>
-# $Id: Makefile.in 421 2008-04-26 21:59:55Z oneiros $
-# Changelog:
-# ------------------------------------------------------------------------
-# r390 | oneiros | 2008-03-23 16:51:58 +0100 (So, 23 Mär 2008) | 2 lines
-#
-# Merge changes since r357 to everything but pdftexdir from trunk into stable
-#
-# ------------------------------------------------------------------------
-# r41 | ms | 2005-08-25 14:00:00 +0200 (Do, 25 Aug 2005) | 2 lines
-#
-# 1.30.2
-#
-# ------------------------------------------------------------------------
-# r33 | ms | 2005-08-01 14:01:00 +0200 (Mo, 01 Aug 2005) | 2 lines
-#
-# 1.30.0
-#
-# ------------------------------------------------------------------------
-# r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-#
-# 1.20a
-#
-# ------------------------------------------------------------------------
-# r10 | ms | 2004-09-06 14:00:00 +0200 (Mo, 06 Sep 2004) | 1 line
-#
-# 1.20
-# ------------------------------------------------------------------------
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-srcdirparent = $(srcdir)/..
-goodir = $(srcdirparent)/goo
-
-kpathsea_include_dir = -I../../../texk -I$(srcdir)/../../../texk
-ALLCXXFLAGS = $(CXXFLAGS) @DEFS@ -I.. -I$(srcdirparent) -I../goo -I$(goodir) -I. -I$(srcdir) $(kpathsea_include_dir)
-CXXFLAGS = @CXXFLAGS@
-CC = @CC@
-CXX = @CXX@
-CFLAGS = @CFLAGS@
-
-kpse_include ../../texk/make/library.mk
-
-
-#------------------------------------------------------------------------
-
-.SUFFIXES:
-.SUFFIXES: .cc .c .o
-
-.cc.o:
- $(CXX) $(ALLCXXFLAGS) -c $<
-
-FOFI_OBJS = FoFiBase.o FoFiEncodings.o FoFiTrueType.o FoFiType1.o FoFiType1C.o
-
-libfofi.a: $(FOFI_OBJS)
- rm -f $@
- $(AR) $(ARFLAGS) $@ $(FOFI_OBJS)
- $(RANLIB) $@
-
-#------------------------------------------------------------------------
-
-mostlyclean clean:
- rm -f $(FOFI_OBJS) libfofi.a
- rm -f Makefile.bak
-
-distclean maintainer-clean extraclean: clean
- rm -f Makefile
-
-#------------------------------------------------------------------------
-
-depend:
- srcdirparent=`(cd $(srcdirparent) >/dev/null; pwd)`; \
- $(CXX) $(ALLCXXFLAGS) -MM $(srcdir)/*.cc \
- | sed 's|$(srcdir)|$$(srcdir)|' \
- | sed 's|'$$srcdirparent/'|$$(srcdirparent)/|g' \
- | sed 's|$$(srcdirparent)/goo/|$$(goodir)/|g' \
- > $(srcdir)/depend.mk
-
-kpse_include fofi/depend.mk
diff --git a/Build/source/libs/xpdf/fofi/depend.mk b/Build/source/libs/xpdf/fofi/depend.mk
deleted file mode 100644
index acaccc2ee99..00000000000
--- a/Build/source/libs/xpdf/fofi/depend.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-FoFiBase.o: $(srcdir)/FoFiBase.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/FoFiBase.h \
- $(goodir)/gtypes.h
-FoFiEncodings.o: $(srcdir)/FoFiEncodings.cc \
- ../aconf.h $(srcdirparent)/aconf2.h \
- $(srcdir)/FoFiEncodings.h \
- $(goodir)/gtypes.h
-FoFiTrueType.o: $(srcdir)/FoFiTrueType.cc \
- ../aconf.h $(srcdirparent)/aconf2.h \
- $(goodir)/gtypes.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(goodir)/GHash.h \
- $(srcdir)/FoFiTrueType.h \
- $(srcdir)/FoFiBase.h
-FoFiType1.o: $(srcdir)/FoFiType1.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/FoFiEncodings.h \
- $(goodir)/gtypes.h \
- $(srcdir)/FoFiType1.h \
- $(srcdir)/FoFiBase.h
-FoFiType1C.o: $(srcdir)/FoFiType1C.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/FoFiEncodings.h \
- $(goodir)/gtypes.h \
- $(srcdir)/FoFiType1C.h \
- $(srcdir)/FoFiBase.h
diff --git a/Build/source/libs/xpdf/goo/FixedPoint.cc b/Build/source/libs/xpdf/goo/FixedPoint.cc
deleted file mode 100644
index 47c2834a34b..00000000000
--- a/Build/source/libs/xpdf/goo/FixedPoint.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-//========================================================================
-//
-// FixedPoint.cc
-//
-// Fixed point type, with C++ operators.
-//
-// Copyright 2004 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#if USE_FIXEDPOINT
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include "FixedPoint.h"
-
-#define ln2 ((FixedPoint)0.69314718)
-
-FixedPoint FixedPoint::sqrt(FixedPoint x) {
- FixedPoint y0, y1, z;
-
- if (x.val <= 0) {
- y1.val = 0;
- } else {
- y1.val = x.val == 1 ? 2 : x.val >> 1;
- do {
- y0.val = y1.val;
- z = x / y0;
- y1.val = (y0.val + z.val) >> 1;
- } while (::abs(y0.val - y1.val) > 1);
- }
- return y1;
-}
-
-FixedPoint FixedPoint::pow(FixedPoint x, FixedPoint y) {
- FixedPoint t, t2, lnx0, lnx, z0, z;
- int d, n, i;
-
- if (y.val <= 0) {
- z.val = 0;
- } else {
- // y * ln(x)
- t = (x - 1) / (x + 1);
- t2 = t * t;
- d = 1;
- lnx = 0;
- do {
- lnx0 = lnx;
- lnx += t / d;
- t *= t2;
- d += 2;
- } while (::abs(lnx.val - lnx0.val) > 2);
- lnx.val <<= 1;
- t = y * lnx;
- // exp(y * ln(x))
- n = floor(t / ln2);
- t -= ln2 * n;
- t2 = t;
- d = 1;
- i = 1;
- z = 1;
- do {
- z0 = z;
- z += t2 / d;
- t2 *= t;
- ++i;
- d *= i;
- } while (::abs(z.val - z0.val) > 2 && d < (1 << fixptShift));
- if (n >= 0) {
- z.val <<= n;
- } else if (n < 0) {
- z.val >>= -n;
- }
- }
- return z;
-}
-
-int FixedPoint::mul(int x, int y) {
-#if 1 //~tmp
- return ((FixPtInt64)x * y) >> fixptShift;
-#else
- int ah0, ah, bh, al, bl;
- ah0 = x & fixptMaskH;
- ah = x >> fixptShift;
- al = x - ah0;
- bh = y >> fixptShift;
- bl = y - (bh << fixptShift);
- return ah0 * bh + ah * bl + al * bh + ((al * bl) >> fixptShift);
-#endif
-}
-
-int FixedPoint::div(int x, int y) {
-#if 1 //~tmp
- return ((FixPtInt64)x << fixptShift) / y;
-#else
-#endif
-}
-
-GBool FixedPoint::divCheck(FixedPoint x, FixedPoint y, FixedPoint *result) {
-#if 1 //~tmp
- FixPtInt64 z;
-
- z = ((FixPtInt64)x.val << fixptShift) / y.val;
- if ((z == 0 && x != 0) ||
- z >= ((FixPtInt64)1 << 31) || z < -((FixPtInt64)1 << 31)) {
- return gFalse;
- }
- result->val = z;
- return gTrue;
-#else
-#endif
-}
-
-#endif // USE_FIXEDPOINT
diff --git a/Build/source/libs/xpdf/goo/FixedPoint.h b/Build/source/libs/xpdf/goo/FixedPoint.h
deleted file mode 100644
index abcb212101d..00000000000
--- a/Build/source/libs/xpdf/goo/FixedPoint.h
+++ /dev/null
@@ -1,155 +0,0 @@
-//========================================================================
-//
-// FixedPoint.h
-//
-// Fixed point type, with C++ operators.
-//
-// Copyright 2004 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FIXEDPOINT_H
-#define FIXEDPOINT_H
-
-#include <aconf.h>
-
-#if USE_FIXEDPOINT
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gtypes.h"
-
-#define fixptShift 16
-#define fixptMaskL ((1 << fixptShift) - 1)
-#define fixptMaskH (~fixptMaskL)
-
-typedef long long FixPtInt64;
-
-class FixedPoint {
-public:
-
- FixedPoint() { val = 0; }
- FixedPoint(const FixedPoint &x) { val = x.val; }
- FixedPoint(double x) { val = (int)(x * (1 << fixptShift) + 0.5); }
- FixedPoint(int x) { val = x << fixptShift; }
- FixedPoint(long x) { val = x << fixptShift; }
-
- operator float()
- { return (float) val * ((float)1 / (float)(1 << fixptShift)); }
- operator double()
- { return (double) val * (1.0 / (double)(1 << fixptShift)); }
- operator int()
- { return val >> fixptShift; }
-
- int getRaw() { return val; }
-
- FixedPoint operator =(FixedPoint x) { val = x.val; return *this; }
-
- int operator ==(FixedPoint x) { return val == x.val; }
- int operator ==(double x) { return *this == (FixedPoint)x; }
- int operator ==(int x) { return *this == (FixedPoint)x; }
- int operator ==(long x) { return *this == (FixedPoint)x; }
-
- int operator !=(FixedPoint x) { return val != x.val; }
- int operator !=(double x) { return *this != (FixedPoint)x; }
- int operator !=(int x) { return *this != (FixedPoint)x; }
- int operator !=(long x) { return *this != (FixedPoint)x; }
-
- int operator <(FixedPoint x) { return val < x.val; }
- int operator <(double x) { return *this < (FixedPoint)x; }
- int operator <(int x) { return *this < (FixedPoint)x; }
- int operator <(long x) { return *this < (FixedPoint)x; }
-
- int operator <=(FixedPoint x) { return val <= x.val; }
- int operator <=(double x) { return *this <= (FixedPoint)x; }
- int operator <=(int x) { return *this <= (FixedPoint)x; }
- int operator <=(long x) { return *this <= (FixedPoint)x; }
-
- int operator >(FixedPoint x) { return val > x.val; }
- int operator >(double x) { return *this > (FixedPoint)x; }
- int operator >(int x) { return *this > (FixedPoint)x; }
- int operator >(long x) { return *this > (FixedPoint)x; }
-
- int operator >=(FixedPoint x) { return val >= x.val; }
- int operator >=(double x) { return *this >= (FixedPoint)x; }
- int operator >=(int x) { return *this >= (FixedPoint)x; }
- int operator >=(long x) { return *this >= (FixedPoint)x; }
-
- FixedPoint operator -() { return make(-val); }
-
- FixedPoint operator +(FixedPoint x) { return make(val + x.val); }
- FixedPoint operator +(double x) { return *this + (FixedPoint)x; }
- FixedPoint operator +(int x) { return *this + (FixedPoint)x; }
- FixedPoint operator +(long x) { return *this + (FixedPoint)x; }
-
- FixedPoint operator +=(FixedPoint x) { val = val + x.val; return *this; }
- FixedPoint operator +=(double x) { return *this += (FixedPoint)x; }
- FixedPoint operator +=(int x) { return *this += (FixedPoint)x; }
- FixedPoint operator +=(long x) { return *this += (FixedPoint)x; }
-
- FixedPoint operator -(FixedPoint x) { return make(val - x.val); }
- FixedPoint operator -(double x) { return *this - (FixedPoint)x; }
- FixedPoint operator -(int x) { return *this - (FixedPoint)x; }
- FixedPoint operator -(long x) { return *this - (FixedPoint)x; }
-
- FixedPoint operator -=(FixedPoint x) { val = val - x.val; return *this; }
- FixedPoint operator -=(double x) { return *this -= (FixedPoint)x; }
- FixedPoint operator -=(int x) { return *this -= (FixedPoint)x; }
- FixedPoint operator -=(long x) { return *this -= (FixedPoint)x; }
-
- FixedPoint operator *(FixedPoint x) { return make(mul(val, x.val)); }
- FixedPoint operator *(double x) { return *this * (FixedPoint)x; }
- FixedPoint operator *(int x) { return *this * (FixedPoint)x; }
- FixedPoint operator *(long x) { return *this * (FixedPoint)x; }
-
- FixedPoint operator *=(FixedPoint x) { val = mul(val, x.val); return *this; }
- FixedPoint operator *=(double x) { return *this *= (FixedPoint)x; }
- FixedPoint operator *=(int x) { return *this *= (FixedPoint)x; }
- FixedPoint operator *=(long x) { return *this *= (FixedPoint)x; }
-
- FixedPoint operator /(FixedPoint x) { return make(div(val, x.val)); }
- FixedPoint operator /(double x) { return *this / (FixedPoint)x; }
- FixedPoint operator /(int x) { return *this / (FixedPoint)x; }
- FixedPoint operator /(long x) { return *this / (FixedPoint)x; }
-
- FixedPoint operator /=(FixedPoint x) { val = div(val, x.val); return *this; }
- FixedPoint operator /=(double x) { return *this /= (FixedPoint)x; }
- FixedPoint operator /=(int x) { return *this /= (FixedPoint)x; }
- FixedPoint operator /=(long x) { return *this /= (FixedPoint)x; }
-
- static FixedPoint abs(FixedPoint x) { return make(::abs(x.val)); }
-
- static int floor(FixedPoint x) { return x.val >> fixptShift; }
-
- static int ceil(FixedPoint x)
- { return (x.val & fixptMaskL) ? ((x.val >> fixptShift) + 1)
- : (x.val >> fixptShift); }
-
- static int round(FixedPoint x)
- { return (x.val + (1 << (fixptShift - 1))) >> fixptShift; }
-
- static FixedPoint sqrt(FixedPoint x);
-
- static FixedPoint pow(FixedPoint x, FixedPoint y);
-
- // Compute *result = x/y; return false if there is an underflow or
- // overflow.
- static GBool divCheck(FixedPoint x, FixedPoint y, FixedPoint *result);
-
-private:
-
- static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return x; }
-
- static int mul(int x, int y);
- static int div(int x, int y);
-
- int val; // 16.16 fixed point
-};
-
-#endif // USE_FIXEDPOINT
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/GHash.cc b/Build/source/libs/xpdf/goo/GHash.cc
deleted file mode 100644
index b51a7643029..00000000000
--- a/Build/source/libs/xpdf/goo/GHash.cc
+++ /dev/null
@@ -1,380 +0,0 @@
-//========================================================================
-//
-// GHash.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include "gmem.h"
-#include "GString.h"
-#include "GHash.h"
-
-//------------------------------------------------------------------------
-
-struct GHashBucket {
- GString *key;
- union {
- void *p;
- int i;
- } val;
- GHashBucket *next;
-};
-
-struct GHashIter {
- int h;
- GHashBucket *p;
-};
-
-//------------------------------------------------------------------------
-
-GHash::GHash(GBool deleteKeysA) {
- int h;
-
- deleteKeys = deleteKeysA;
- size = 7;
- tab = (GHashBucket **)gmallocn(size, sizeof(GHashBucket *));
- for (h = 0; h < size; ++h) {
- tab[h] = NULL;
- }
- len = 0;
-}
-
-GHash::~GHash() {
- GHashBucket *p;
- int h;
-
- for (h = 0; h < size; ++h) {
- while (tab[h]) {
- p = tab[h];
- tab[h] = p->next;
- if (deleteKeys) {
- delete p->key;
- }
- delete p;
- }
- }
- gfree(tab);
-}
-
-void GHash::add(GString *key, void *val) {
- GHashBucket *p;
- int h;
-
- // expand the table if necessary
- if (len >= size) {
- expand();
- }
-
- // add the new symbol
- p = new GHashBucket;
- p->key = key;
- p->val.p = val;
- h = hash(key);
- p->next = tab[h];
- tab[h] = p;
- ++len;
-}
-
-void GHash::add(GString *key, int val) {
- GHashBucket *p;
- int h;
-
- // expand the table if necessary
- if (len >= size) {
- expand();
- }
-
- // add the new symbol
- p = new GHashBucket;
- p->key = key;
- p->val.i = val;
- h = hash(key);
- p->next = tab[h];
- tab[h] = p;
- ++len;
-}
-
-void GHash::replace(GString *key, void *val) {
- GHashBucket *p;
- int h;
-
- if ((p = find(key, &h))) {
- p->val.p = val;
- delete key;
- } else {
- add(key, val);
- }
-}
-
-void GHash::replace(GString *key, int val) {
- GHashBucket *p;
- int h;
-
- if ((p = find(key, &h))) {
- p->val.i = val;
- delete key;
- } else {
- add(key, val);
- }
-}
-
-void *GHash::lookup(GString *key) {
- GHashBucket *p;
- int h;
-
- if (!(p = find(key, &h))) {
- return NULL;
- }
- return p->val.p;
-}
-
-int GHash::lookupInt(GString *key) {
- GHashBucket *p;
- int h;
-
- if (!(p = find(key, &h))) {
- return 0;
- }
- return p->val.i;
-}
-
-void *GHash::lookup(char *key) {
- GHashBucket *p;
- int h;
-
- if (!(p = find(key, &h))) {
- return NULL;
- }
- return p->val.p;
-}
-
-int GHash::lookupInt(char *key) {
- GHashBucket *p;
- int h;
-
- if (!(p = find(key, &h))) {
- return 0;
- }
- return p->val.i;
-}
-
-void *GHash::remove(GString *key) {
- GHashBucket *p;
- GHashBucket **q;
- void *val;
- int h;
-
- if (!(p = find(key, &h))) {
- return NULL;
- }
- q = &tab[h];
- while (*q != p) {
- q = &((*q)->next);
- }
- *q = p->next;
- if (deleteKeys) {
- delete p->key;
- }
- val = p->val.p;
- delete p;
- --len;
- return val;
-}
-
-int GHash::removeInt(GString *key) {
- GHashBucket *p;
- GHashBucket **q;
- int val;
- int h;
-
- if (!(p = find(key, &h))) {
- return 0;
- }
- q = &tab[h];
- while (*q != p) {
- q = &((*q)->next);
- }
- *q = p->next;
- if (deleteKeys) {
- delete p->key;
- }
- val = p->val.i;
- delete p;
- --len;
- return val;
-}
-
-void *GHash::remove(char *key) {
- GHashBucket *p;
- GHashBucket **q;
- void *val;
- int h;
-
- if (!(p = find(key, &h))) {
- return NULL;
- }
- q = &tab[h];
- while (*q != p) {
- q = &((*q)->next);
- }
- *q = p->next;
- if (deleteKeys) {
- delete p->key;
- }
- val = p->val.p;
- delete p;
- --len;
- return val;
-}
-
-int GHash::removeInt(char *key) {
- GHashBucket *p;
- GHashBucket **q;
- int val;
- int h;
-
- if (!(p = find(key, &h))) {
- return 0;
- }
- q = &tab[h];
- while (*q != p) {
- q = &((*q)->next);
- }
- *q = p->next;
- if (deleteKeys) {
- delete p->key;
- }
- val = p->val.i;
- delete p;
- --len;
- return val;
-}
-
-void GHash::startIter(GHashIter **iter) {
- *iter = new GHashIter;
- (*iter)->h = -1;
- (*iter)->p = NULL;
-}
-
-GBool GHash::getNext(GHashIter **iter, GString **key, void **val) {
- if (!*iter) {
- return gFalse;
- }
- if ((*iter)->p) {
- (*iter)->p = (*iter)->p->next;
- }
- while (!(*iter)->p) {
- if (++(*iter)->h == size) {
- delete *iter;
- *iter = NULL;
- return gFalse;
- }
- (*iter)->p = tab[(*iter)->h];
- }
- *key = (*iter)->p->key;
- *val = (*iter)->p->val.p;
- return gTrue;
-}
-
-GBool GHash::getNext(GHashIter **iter, GString **key, int *val) {
- if (!*iter) {
- return gFalse;
- }
- if ((*iter)->p) {
- (*iter)->p = (*iter)->p->next;
- }
- while (!(*iter)->p) {
- if (++(*iter)->h == size) {
- delete *iter;
- *iter = NULL;
- return gFalse;
- }
- (*iter)->p = tab[(*iter)->h];
- }
- *key = (*iter)->p->key;
- *val = (*iter)->p->val.i;
- return gTrue;
-}
-
-void GHash::killIter(GHashIter **iter) {
- delete *iter;
- *iter = NULL;
-}
-
-void GHash::expand() {
- GHashBucket **oldTab;
- GHashBucket *p;
- int oldSize, h, i;
-
- oldSize = size;
- oldTab = tab;
- size = 2*size + 1;
- tab = (GHashBucket **)gmallocn(size, sizeof(GHashBucket *));
- for (h = 0; h < size; ++h) {
- tab[h] = NULL;
- }
- for (i = 0; i < oldSize; ++i) {
- while (oldTab[i]) {
- p = oldTab[i];
- oldTab[i] = oldTab[i]->next;
- h = hash(p->key);
- p->next = tab[h];
- tab[h] = p;
- }
- }
- gfree(oldTab);
-}
-
-GHashBucket *GHash::find(GString *key, int *h) {
- GHashBucket *p;
-
- *h = hash(key);
- for (p = tab[*h]; p; p = p->next) {
- if (!p->key->cmp(key)) {
- return p;
- }
- }
- return NULL;
-}
-
-GHashBucket *GHash::find(char *key, int *h) {
- GHashBucket *p;
-
- *h = hash(key);
- for (p = tab[*h]; p; p = p->next) {
- if (!p->key->cmp(key)) {
- return p;
- }
- }
- return NULL;
-}
-
-int GHash::hash(GString *key) {
- char *p;
- unsigned int h;
- int i;
-
- h = 0;
- for (p = key->getCString(), i = 0; i < key->getLength(); ++p, ++i) {
- h = 17 * h + (int)(*p & 0xff);
- }
- return (int)(h % size);
-}
-
-int GHash::hash(char *key) {
- char *p;
- unsigned int h;
-
- h = 0;
- for (p = key; *p; ++p) {
- h = 17 * h + (int)(*p & 0xff);
- }
- return (int)(h % size);
-}
diff --git a/Build/source/libs/xpdf/goo/GHash.h b/Build/source/libs/xpdf/goo/GHash.h
deleted file mode 100644
index 31aba9325ff..00000000000
--- a/Build/source/libs/xpdf/goo/GHash.h
+++ /dev/null
@@ -1,78 +0,0 @@
-//========================================================================
-//
-// GHash.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef GHASH_H
-#define GHASH_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-
-class GString;
-struct GHashBucket;
-struct GHashIter;
-
-//------------------------------------------------------------------------
-
-class GHash {
-public:
-
- GHash(GBool deleteKeysA = gFalse);
- ~GHash();
- void add(GString *key, void *val);
- void add(GString *key, int val);
- void replace(GString *key, void *val);
- void replace(GString *key, int val);
- void *lookup(GString *key);
- int lookupInt(GString *key);
- void *lookup(char *key);
- int lookupInt(char *key);
- void *remove(GString *key);
- int removeInt(GString *key);
- void *remove(char *key);
- int removeInt(char *key);
- int getLength() { return len; }
- void startIter(GHashIter **iter);
- GBool getNext(GHashIter **iter, GString **key, void **val);
- GBool getNext(GHashIter **iter, GString **key, int *val);
- void killIter(GHashIter **iter);
-
-private:
-
- void expand();
- GHashBucket *find(GString *key, int *h);
- GHashBucket *find(char *key, int *h);
- int hash(GString *key);
- int hash(char *key);
-
- GBool deleteKeys; // set if key strings should be deleted
- int size; // number of buckets
- int len; // number of entries
- GHashBucket **tab;
-};
-
-#define deleteGHash(hash, T) \
- do { \
- GHash *_hash = (hash); \
- { \
- GHashIter *_iter; \
- GString *_key; \
- void *_p; \
- _hash->startIter(&_iter); \
- while (_hash->getNext(&_iter, &_key, &_p)) { \
- delete (T*)_p; \
- } \
- delete _hash; \
- } \
- } while(0)
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/GList.cc b/Build/source/libs/xpdf/goo/GList.cc
deleted file mode 100644
index fb5fd62847c..00000000000
--- a/Build/source/libs/xpdf/goo/GList.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-//========================================================================
-//
-// GList.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "gmem.h"
-#include "GList.h"
-
-//------------------------------------------------------------------------
-// GList
-//------------------------------------------------------------------------
-
-GList::GList() {
- size = 8;
- data = (void **)gmallocn(size, sizeof(void*));
- length = 0;
- inc = 0;
-}
-
-GList::GList(int sizeA) {
- size = sizeA;
- data = (void **)gmallocn(size, sizeof(void*));
- length = 0;
- inc = 0;
-}
-
-GList::~GList() {
- gfree(data);
-}
-
-void GList::append(void *p) {
- if (length >= size) {
- expand();
- }
- data[length++] = p;
-}
-
-void GList::append(GList *list) {
- int i;
-
- while (length + list->length > size) {
- expand();
- }
- for (i = 0; i < list->length; ++i) {
- data[length++] = list->data[i];
- }
-}
-
-void GList::insert(int i, void *p) {
- if (length >= size) {
- expand();
- }
- if (i < length) {
- memmove(data+i+1, data+i, (length - i) * sizeof(void *));
- }
- data[i] = p;
- ++length;
-}
-
-void *GList::del(int i) {
- void *p;
-
- p = data[i];
- if (i < length - 1) {
- memmove(data+i, data+i+1, (length - i - 1) * sizeof(void *));
- }
- --length;
- if (size - length >= ((inc > 0) ? inc : size/2)) {
- shrink();
- }
- return p;
-}
-
-void GList::sort(int (*cmp)(const void *obj1, const void *obj2)) {
- qsort(data, length, sizeof(void *), cmp);
-}
-
-void GList::expand() {
- size += (inc > 0) ? inc : size;
- data = (void **)greallocn(data, size, sizeof(void*));
-}
-
-void GList::shrink() {
- size -= (inc > 0) ? inc : size/2;
- data = (void **)greallocn(data, size, sizeof(void*));
-}
diff --git a/Build/source/libs/xpdf/goo/GList.h b/Build/source/libs/xpdf/goo/GList.h
deleted file mode 100644
index e4d8ff8f1c2..00000000000
--- a/Build/source/libs/xpdf/goo/GList.h
+++ /dev/null
@@ -1,96 +0,0 @@
-//========================================================================
-//
-// GList.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef GLIST_H
-#define GLIST_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-
-//------------------------------------------------------------------------
-// GList
-//------------------------------------------------------------------------
-
-class GList {
-public:
-
- // Create an empty list.
- GList();
-
- // Create an empty list with space for <size1> elements.
- GList(int sizeA);
-
- // Destructor - does not free pointed-to objects.
- ~GList();
-
- //----- general
-
- // Get the number of elements.
- int getLength() { return length; }
-
- //----- ordered list support
-
- // Return the <i>th element.
- // Assumes 0 <= i < length.
- void *get(int i) { return data[i]; }
-
- // Append an element to the end of the list.
- void append(void *p);
-
- // Append another list to the end of this one.
- void append(GList *list);
-
- // Insert an element at index <i>.
- // Assumes 0 <= i <= length.
- void insert(int i, void *p);
-
- // Deletes and returns the element at index <i>.
- // Assumes 0 <= i < length.
- void *del(int i);
-
- // Sort the list accoring to the given comparison function.
- // NB: this sorts an array of pointers, so the pointer args need to
- // be double-dereferenced.
- void sort(int (*cmp)(const void *ptr1, const void *ptr2));
-
- //----- control
-
- // Set allocation increment to <inc>. If inc > 0, that many
- // elements will be allocated every time the list is expanded.
- // If inc <= 0, the list will be doubled in size.
- void setAllocIncr(int incA) { inc = incA; }
-
-private:
-
- void expand();
- void shrink();
-
- void **data; // the list elements
- int size; // size of data array
- int length; // number of elements on list
- int inc; // allocation increment
-};
-
-#define deleteGList(list, T) \
- do { \
- GList *_list = (list); \
- { \
- int _i; \
- for (_i = 0; _i < _list->getLength(); ++_i) { \
- delete (T*)_list->get(_i); \
- } \
- delete _list; \
- } \
- } while (0)
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/GMutex.h b/Build/source/libs/xpdf/goo/GMutex.h
deleted file mode 100644
index 7fa93d85e06..00000000000
--- a/Build/source/libs/xpdf/goo/GMutex.h
+++ /dev/null
@@ -1,49 +0,0 @@
-//========================================================================
-//
-// GMutex.h
-//
-// Portable mutex macros.
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef GMUTEX_H
-#define GMUTEX_H
-
-// Usage:
-//
-// GMutex m;
-// gInitMutex(&m);
-// ...
-// gLockMutex(&m);
-// ... critical section ...
-// gUnlockMutex(&m);
-// ...
-// gDestroyMutex(&m);
-
-#ifdef WIN32
-
-#include <windows.h>
-
-typedef CRITICAL_SECTION GMutex;
-
-#define gInitMutex(m) InitializeCriticalSection(m)
-#define gDestroyMutex(m) DeleteCriticalSection(m)
-#define gLockMutex(m) EnterCriticalSection(m)
-#define gUnlockMutex(m) LeaveCriticalSection(m)
-
-#else // assume pthreads
-
-#include <pthread.h>
-
-typedef pthread_mutex_t GMutex;
-
-#define gInitMutex(m) pthread_mutex_init(m, NULL)
-#define gDestroyMutex(m) pthread_mutex_destroy(m)
-#define gLockMutex(m) pthread_mutex_lock(m)
-#define gUnlockMutex(m) pthread_mutex_unlock(m)
-
-#endif
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/GString.cc b/Build/source/libs/xpdf/goo/GString.cc
deleted file mode 100644
index b397cd5736e..00000000000
--- a/Build/source/libs/xpdf/goo/GString.cc
+++ /dev/null
@@ -1,759 +0,0 @@
-//========================================================================
-//
-// GString.cc
-//
-// Simple variable-length string type.
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: GString.cc 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r196 | oneiros | 2007-07-11 13:56:21 +0200 (Mi, 11 Jul 2007) | 2 lines
-*
-* Merge r195 (compilation problems on IRIX) into stable
-*
-* ------------------------------------------------------------------------
-* r194 | oneiros | 2007-07-10 19:47:01 +0200 (Di, 10 Jul 2007) | 2 lines
-*
-* Merge r193 (compilation problems on IRIX) into stable
-*
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-*------------------------------------------------------------------------ */
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "gmem.h"
-#include "GString.h"
-
-//------------------------------------------------------------------------
-
-union GStringFormatArg {
- int i;
- Guint ui;
- long l;
- Gulong ul;
- double f;
- char c;
- char *s;
- GString *gs;
-};
-
-enum GStringFormatType {
- fmtIntDecimal,
- fmtIntHex,
- fmtIntOctal,
- fmtIntBinary,
- fmtUIntDecimal,
- fmtUIntHex,
- fmtUIntOctal,
- fmtUIntBinary,
- fmtLongDecimal,
- fmtLongHex,
- fmtLongOctal,
- fmtLongBinary,
- fmtULongDecimal,
- fmtULongHex,
- fmtULongOctal,
- fmtULongBinary,
- fmtDouble,
- fmtDoubleTrim,
- fmtChar,
- fmtString,
- fmtGString,
- fmtSpace
-};
-
-static char *formatStrings[] = {
- "d", "x", "o", "b", "ud", "ux", "uo", "ub",
- "ld", "lx", "lo", "lb", "uld", "ulx", "ulo", "ulb",
- "f", "g",
- "c",
- "s",
- "t",
- "w",
- NULL
-};
-
-//------------------------------------------------------------------------
-
-static inline int size(int len) {
- int delta;
- for (delta = 8; delta < len && delta < 0x100000; delta <<= 1) ;
- // this is ((len + 1) + (delta - 1)) & ~(delta - 1)
- return (len + delta) & ~(delta - 1);
-}
-
-inline void GString::resize(int length1) {
- char *s1;
-
- if (!s) {
- s = new char[size(length1)];
- } else if (size(length1) != size(length)) {
- s1 = new char[size(length1)];
- if (length1 < length) {
- memcpy(s1, s, length1);
- s1[length1] = '\0';
- } else {
- memcpy(s1, s, length + 1);
- }
- delete[] s;
- s = s1;
- }
-}
-
-GString::GString() {
- s = NULL;
- resize(length = 0);
- s[0] = '\0';
-}
-
-GString::GString(const char *sA) {
- int n = strlen(sA);
-
- s = NULL;
- resize(length = n);
- memcpy(s, sA, n + 1);
-}
-
-GString::GString(const char *sA, int lengthA) {
- s = NULL;
- resize(length = lengthA);
- memcpy(s, sA, length * sizeof(char));
- s[length] = '\0';
-}
-
-GString::GString(GString *str, int idx, int lengthA) {
- s = NULL;
- resize(length = lengthA);
- memcpy(s, str->getCString() + idx, length);
- s[length] = '\0';
-}
-
-GString::GString(GString *str) {
- s = NULL;
- resize(length = str->getLength());
- memcpy(s, str->getCString(), length + 1);
-}
-
-GString::GString(GString *str1, GString *str2) {
- int n1 = str1->getLength();
- int n2 = str2->getLength();
-
- s = NULL;
- resize(length = n1 + n2);
- memcpy(s, str1->getCString(), n1);
- memcpy(s + n1, str2->getCString(), n2 + 1);
-}
-
-GString *GString::fromInt(int x) {
- char buf[24]; // enough space for 64-bit ints plus a little extra
- char *p;
- int len;
-
- formatInt(x, buf, sizeof(buf), gFalse, 0, 10, &p, &len);
- return new GString(p, len);
-}
-
-GString *GString::format(char *fmt, ...) {
- va_list argList;
- GString *s;
-
- s = new GString();
- va_start(argList, fmt);
- s->appendfv(fmt, argList);
- va_end(argList);
- return s;
-}
-
-GString *GString::formatv(char *fmt, va_list argList) {
- GString *s;
-
- s = new GString();
- s->appendfv(fmt, argList);
- return s;
-}
-
-GString::~GString() {
- delete[] s;
-}
-
-GString *GString::clear() {
- s[length = 0] = '\0';
- resize(0);
- return this;
-}
-
-GString *GString::append(char c) {
- resize(length + 1);
- s[length++] = c;
- s[length] = '\0';
- return this;
-}
-
-GString *GString::append(GString *str) {
- int n = str->getLength();
-
- resize(length + n);
- memcpy(s + length, str->getCString(), n + 1);
- length += n;
- return this;
-}
-
-GString *GString::append(const char *str) {
- int n = strlen(str);
-
- resize(length + n);
- memcpy(s + length, str, n + 1);
- length += n;
- return this;
-}
-
-GString *GString::append(const char *str, int lengthA) {
- resize(length + lengthA);
- memcpy(s + length, str, lengthA);
- length += lengthA;
- s[length] = '\0';
- return this;
-}
-
-GString *GString::appendf(char *fmt, ...) {
- va_list argList;
-
- va_start(argList, fmt);
- appendfv(fmt, argList);
- va_end(argList);
- return this;
-}
-
-GString *GString::appendfv(char *fmt, va_list argList) {
- GStringFormatArg *args;
- int argsLen, argsSize;
- GStringFormatArg arg;
- int idx, width, prec;
- GBool reverseAlign, zeroFill;
- GStringFormatType ft;
- char buf[65];
- int len, i;
- char *p0, *p1, *str;
-
- argsLen = 0;
- argsSize = 8;
- args = (GStringFormatArg *)gmallocn(argsSize, sizeof(GStringFormatArg));
-
- p0 = fmt;
- while (*p0) {
- if (*p0 == '{') {
- ++p0;
- if (*p0 == '{') {
- ++p0;
- append('{');
- } else {
-
- // parse the format string
- if (!(*p0 >= '0' && *p0 <= '9')) {
- break;
- }
- idx = *p0 - '0';
- for (++p0; *p0 >= '0' && *p0 <= '9'; ++p0) {
- idx = 10 * idx + (*p0 - '0');
- }
- if (*p0 != ':') {
- break;
- }
- ++p0;
- if (*p0 == '-') {
- reverseAlign = gTrue;
- ++p0;
- } else {
- reverseAlign = gFalse;
- }
- width = 0;
- zeroFill = *p0 == '0';
- for (; *p0 >= '0' && *p0 <= '9'; ++p0) {
- width = 10 * width + (*p0 - '0');
- }
- if (*p0 == '.') {
- ++p0;
- prec = 0;
- for (; *p0 >= '0' && *p0 <= '9'; ++p0) {
- prec = 10 * prec + (*p0 - '0');
- }
- } else {
- prec = 0;
- }
- for (ft = (GStringFormatType)0;
- formatStrings[ft];
- ft = (GStringFormatType)(ft + 1)) {
- if (!strncmp(p0, formatStrings[ft], strlen(formatStrings[ft]))) {
- break;
- }
- }
- if (!formatStrings[ft]) {
- break;
- }
- p0 += strlen(formatStrings[ft]);
- if (*p0 != '}') {
- break;
- }
- ++p0;
-
- // fetch the argument
- if (idx > argsLen) {
- break;
- }
- if (idx == argsLen) {
- if (argsLen == argsSize) {
- argsSize *= 2;
- args = (GStringFormatArg *)greallocn(args, argsSize,
- sizeof(GStringFormatArg));
- }
- switch (ft) {
- case fmtIntDecimal:
- case fmtIntHex:
- case fmtIntOctal:
- case fmtIntBinary:
- case fmtSpace:
- args[argsLen].i = va_arg(argList, int);
- break;
- case fmtUIntDecimal:
- case fmtUIntHex:
- case fmtUIntOctal:
- case fmtUIntBinary:
- args[argsLen].ui = va_arg(argList, Guint);
- break;
- case fmtLongDecimal:
- case fmtLongHex:
- case fmtLongOctal:
- case fmtLongBinary:
- args[argsLen].l = va_arg(argList, long);
- break;
- case fmtULongDecimal:
- case fmtULongHex:
- case fmtULongOctal:
- case fmtULongBinary:
- args[argsLen].ul = va_arg(argList, Gulong);
- break;
- case fmtDouble:
- case fmtDoubleTrim:
- args[argsLen].f = va_arg(argList, double);
- break;
- case fmtChar:
- args[argsLen].c = (char)va_arg(argList, int);
- break;
- case fmtString:
- args[argsLen].s = va_arg(argList, char *);
- break;
- case fmtGString:
- args[argsLen].gs = va_arg(argList, GString *);
- break;
- }
- ++argsLen;
- }
-
- // format the argument
- arg = args[idx];
- switch (ft) {
- case fmtIntDecimal:
- formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 10, &str, &len);
- break;
- case fmtIntHex:
- formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 16, &str, &len);
- break;
- case fmtIntOctal:
- formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
- break;
- case fmtIntBinary:
- formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 2, &str, &len);
- break;
- case fmtUIntDecimal:
- formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 10,
- &str, &len);
- break;
- case fmtUIntHex:
- formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 16,
- &str, &len);
- break;
- case fmtUIntOctal:
- formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
- break;
- case fmtUIntBinary:
- formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 2, &str, &len);
- break;
- case fmtLongDecimal:
- formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 10, &str, &len);
- break;
- case fmtLongHex:
- formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 16, &str, &len);
- break;
- case fmtLongOctal:
- formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
- break;
- case fmtLongBinary:
- formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 2, &str, &len);
- break;
- case fmtULongDecimal:
- formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 10,
- &str, &len);
- break;
- case fmtULongHex:
- formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 16,
- &str, &len);
- break;
- case fmtULongOctal:
- formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 8, &str, &len);
- break;
- case fmtULongBinary:
- formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 2, &str, &len);
- break;
- case fmtDouble:
- formatDouble(arg.f, buf, sizeof(buf), prec, gFalse, &str, &len);
- break;
- case fmtDoubleTrim:
- formatDouble(arg.f, buf, sizeof(buf), prec, gTrue, &str, &len);
- break;
- case fmtChar:
- buf[0] = arg.c;
- str = buf;
- len = 1;
- reverseAlign = !reverseAlign;
- break;
- case fmtString:
- str = arg.s;
- len = strlen(str);
- reverseAlign = !reverseAlign;
- break;
- case fmtGString:
- str = arg.gs->getCString();
- len = arg.gs->getLength();
- reverseAlign = !reverseAlign;
- break;
- case fmtSpace:
- str = buf;
- len = 0;
- width = arg.i;
- break;
- }
-
- // append the formatted arg, handling width and alignment
- if (!reverseAlign && len < width) {
- for (i = len; i < width; ++i) {
- append(' ');
- }
- }
- append(str, len);
- if (reverseAlign && len < width) {
- for (i = len; i < width; ++i) {
- append(' ');
- }
- }
- }
-
- } else if (*p0 == '}') {
- ++p0;
- if (*p0 == '}') {
- ++p0;
- }
- append('}');
-
- } else {
- for (p1 = p0 + 1; *p1 && *p1 != '{' && *p1 != '}'; ++p1) ;
- append(p0, p1 - p0);
- p0 = p1;
- }
- }
-
- gfree(args);
- return this;
-}
-
-void GString::formatInt(long x, char *buf, int bufSize,
- GBool zeroFill, int width, int base,
- char **p, int *len) {
- static char vals[17] = "0123456789abcdef";
- GBool neg;
- int start, i, j;
-
- i = bufSize;
- if ((neg = x < 0)) {
- x = -x;
- }
- start = neg ? 1 : 0;
- if (x == 0) {
- buf[--i] = '0';
- } else {
- while (i > start && x) {
- buf[--i] = vals[x % base];
- x /= base;
- }
- }
- if (zeroFill) {
- for (j = bufSize - i; i > start && j < width - start; ++j) {
- buf[--i] = '0';
- }
- }
- if (neg) {
- buf[--i] = '-';
- }
- *p = buf + i;
- *len = bufSize - i;
-}
-
-void GString::formatUInt(Gulong x, char *buf, int bufSize,
- GBool zeroFill, int width, int base,
- char **p, int *len) {
- static char vals[17] = "0123456789abcdef";
- int i, j;
-
- i = bufSize;
- if (x == 0) {
- buf[--i] = '0';
- } else {
- while (i > 0 && x) {
- buf[--i] = vals[x % base];
- x /= base;
- }
- }
- if (zeroFill) {
- for (j = bufSize - i; i > 0 && j < width; ++j) {
- buf[--i] = '0';
- }
- }
- *p = buf + i;
- *len = bufSize - i;
-}
-
-void GString::formatDouble(double x, char *buf, int bufSize, int prec,
- GBool trim, char **p, int *len) {
- GBool neg, started;
- double x2;
- int d, i, j;
-
- if ((neg = x < 0)) {
- x = -x;
- }
- x = floor(x * pow(10.0, prec) + 0.5);
- i = bufSize;
- started = !trim;
- for (j = 0; j < prec && i > 1; ++j) {
- x2 = floor(0.1 * (x + 0.5));
- d = (int)floor(x - 10 * x2 + 0.5);
- if (started || d != 0) {
- buf[--i] = '0' + d;
- started = gTrue;
- }
- x = x2;
- }
- if (i > 1 && started) {
- buf[--i] = '.';
- }
- if (i > 1) {
- do {
- x2 = floor(0.1 * (x + 0.5));
- d = (int)floor(x - 10 * x2 + 0.5);
- buf[--i] = '0' + d;
- x = x2;
- } while (i > 1 && x);
- }
- if (neg) {
- buf[--i] = '-';
- }
- *p = buf + i;
- *len = bufSize - i;
-}
-
-GString *GString::insert(int i, char c) {
- int j;
-
- resize(length + 1);
- for (j = length + 1; j > i; --j)
- s[j] = s[j-1];
- s[i] = c;
- ++length;
- return this;
-}
-
-GString *GString::insert(int i, GString *str) {
- int n = str->getLength();
- int j;
-
- resize(length + n);
- for (j = length; j >= i; --j)
- s[j+n] = s[j];
- memcpy(s+i, str->getCString(), n);
- length += n;
- return this;
-}
-
-GString *GString::insert(int i, const char *str) {
- int n = strlen(str);
- int j;
-
- resize(length + n);
- for (j = length; j >= i; --j)
- s[j+n] = s[j];
- memcpy(s+i, str, n);
- length += n;
- return this;
-}
-
-GString *GString::insert(int i, const char *str, int lengthA) {
- int j;
-
- resize(length + lengthA);
- for (j = length; j >= i; --j)
- s[j+lengthA] = s[j];
- memcpy(s+i, str, lengthA);
- length += lengthA;
- return this;
-}
-
-GString *GString::del(int i, int n) {
- int j;
-
- if (n > 0) {
- if (i + n > length) {
- n = length - i;
- }
- for (j = i; j <= length - n; ++j) {
- s[j] = s[j + n];
- }
- resize(length -= n);
- }
- return this;
-}
-
-GString *GString::upperCase() {
- int i;
-
- for (i = 0; i < length; ++i) {
- if (islower(s[i]))
- s[i] = toupper(s[i]);
- }
- return this;
-}
-
-GString *GString::lowerCase() {
- int i;
-
- for (i = 0; i < length; ++i) {
- if (isupper(s[i]))
- s[i] = tolower(s[i]);
- }
- return this;
-}
-
-int GString::cmp(GString *str) {
- int n1, n2, i, x;
- char *p1, *p2;
-
- n1 = length;
- n2 = str->length;
- for (i = 0, p1 = s, p2 = str->s; i < n1 && i < n2; ++i, ++p1, ++p2) {
- x = *p1 - *p2;
- if (x != 0) {
- return x;
- }
- }
- return n1 - n2;
-}
-
-int GString::cmpN(GString *str, int n) {
- int n1, n2, i, x;
- char *p1, *p2;
-
- n1 = length;
- n2 = str->length;
- for (i = 0, p1 = s, p2 = str->s;
- i < n1 && i < n2 && i < n;
- ++i, ++p1, ++p2) {
- x = *p1 - *p2;
- if (x != 0) {
- return x;
- }
- }
- if (i == n) {
- return 0;
- }
- return n1 - n2;
-}
-
-int GString::cmp(const char *sA) {
- int n1, i, x;
- const char *p1, *p2;
-
- n1 = length;
- for (i = 0, p1 = s, p2 = sA; i < n1 && *p2; ++i, ++p1, ++p2) {
- x = *p1 - *p2;
- if (x != 0) {
- return x;
- }
- }
- if (i < n1) {
- return 1;
- }
- if (*p2) {
- return -1;
- }
- return 0;
-}
-
-int GString::cmpN(const char *sA, int n) {
- int n1, i, x;
- const char *p1, *p2;
-
- n1 = length;
- for (i = 0, p1 = s, p2 = sA; i < n1 && *p2 && i < n; ++i, ++p1, ++p2) {
- x = *p1 - *p2;
- if (x != 0) {
- return x;
- }
- }
- if (i == n) {
- return 0;
- }
- if (i < n1) {
- return 1;
- }
- if (*p2) {
- return -1;
- }
- return 0;
-}
diff --git a/Build/source/libs/xpdf/goo/GString.h b/Build/source/libs/xpdf/goo/GString.h
deleted file mode 100644
index dd22e2d8f6b..00000000000
--- a/Build/source/libs/xpdf/goo/GString.h
+++ /dev/null
@@ -1,136 +0,0 @@
-//========================================================================
-//
-// GString.h
-//
-// Simple variable-length string type.
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef GSTRING_H
-#define GSTRING_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include <stdarg.h>
-#include "gtypes.h"
-
-class GString {
-public:
-
- // Create an empty string.
- GString();
-
- // Create a string from a C string.
- GString(const char *sA);
-
- // Create a string from <lengthA> chars at <sA>. This string
- // can contain null characters.
- GString(const char *sA, int lengthA);
-
- // Create a string from <lengthA> chars at <idx> in <str>.
- GString(GString *str, int idx, int lengthA);
-
- // Copy a string.
- GString(GString *str);
- GString *copy() { return new GString(this); }
-
- // Concatenate two strings.
- GString(GString *str1, GString *str2);
-
- // Convert an integer to a string.
- static GString *fromInt(int x);
-
- // Create a formatted string. Similar to printf, but without the
- // string overflow issues. Formatting elements consist of:
- // {<arg>:[<width>][.<precision>]<type>}
- // where:
- // - <arg> is the argument number (arg 0 is the first argument
- // following the format string) -- NB: args must be first used in
- // order; they can be reused in any order
- // - <width> is the field width -- negative to reverse the alignment;
- // starting with a leading zero to zero-fill (for integers)
- // - <precision> is the number of digits to the right of the decimal
- // point (for floating point numbers)
- // - <type> is one of:
- // d, x, o, b -- int in decimal, hex, octal, binary
- // ud, ux, uo, ub -- unsigned int
- // ld, lx, lo, lb, uld, ulx, ulo, ulb -- long, unsigned long
- // f, g -- double
- // c -- char
- // s -- string (char *)
- // t -- GString *
- // w -- blank space; arg determines width
- // To get literal curly braces, use {{ or }}.
- static GString *format(char *fmt, ...);
- static GString *formatv(char *fmt, va_list argList);
-
- // Destructor.
- ~GString();
-
- // Get length.
- int getLength() { return length; }
-
- // Get C string.
- char *getCString() { return s; }
-
- // Get <i>th character.
- char getChar(int i) { return s[i]; }
-
- // Change <i>th character.
- void setChar(int i, char c) { s[i] = c; }
-
- // Clear string to zero length.
- GString *clear();
-
- // Append a character or string.
- GString *append(char c);
- GString *append(GString *str);
- GString *append(const char *str);
- GString *append(const char *str, int lengthA);
-
- // Append a formatted string.
- GString *appendf(char *fmt, ...);
- GString *appendfv(char *fmt, va_list argList);
-
- // Insert a character or string.
- GString *insert(int i, char c);
- GString *insert(int i, GString *str);
- GString *insert(int i, const char *str);
- GString *insert(int i, const char *str, int lengthA);
-
- // Delete a character or range of characters.
- GString *del(int i, int n = 1);
-
- // Convert string to all-upper/all-lower case.
- GString *upperCase();
- GString *lowerCase();
-
- // Compare two strings: -1:< 0:= +1:>
- int cmp(GString *str);
- int cmpN(GString *str, int n);
- int cmp(const char *sA);
- int cmpN(const char *sA, int n);
-
-private:
-
- int length;
- char *s;
-
- void resize(int length1);
- static void formatInt(long x, char *buf, int bufSize,
- GBool zeroFill, int width, int base,
- char **p, int *len);
- static void formatUInt(Gulong x, char *buf, int bufSize,
- GBool zeroFill, int width, int base,
- char **p, int *len);
- static void formatDouble(double x, char *buf, int bufSize, int prec,
- GBool trim, char **p, int *len);
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/Makefile.dep b/Build/source/libs/xpdf/goo/Makefile.dep
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/Build/source/libs/xpdf/goo/Makefile.dep
+++ /dev/null
diff --git a/Build/source/libs/xpdf/goo/Makefile.in b/Build/source/libs/xpdf/goo/Makefile.in
deleted file mode 100644
index b93752f12e8..00000000000
--- a/Build/source/libs/xpdf/goo/Makefile.in
+++ /dev/null
@@ -1,143 +0,0 @@
-# @configure_input@
-
-#========================================================================
-#
-# Goo library Makefile
-#
-# Copyright 1996 Derek B. Noonburg
-#
-#========================================================================
-
-# ------------------------------------------------------------------------
-# Changed by Martin Schröder <martin@pdftex.org>
-# $Id: Makefile.in 494 2008-07-14 21:35:09Z oneiros $
-# Changelog:
-# ------------------------------------------------------------------------
-# r493 | oneiros | 2008-07-14 23:32:04 +0200 (Mo, 14 Jul 2008) | 2 lines
-#
-# Also set -DDISABLE_OUTLINE (pdftoepdf.cc had conflicting options)
-#
-# ------------------------------------------------------------------------
-# r390 | oneiros | 2008-03-23 16:51:58 +0100 (So, 23 Mär 2008) | 2 lines
-#
-# Merge changes since r357 to everything but pdftexdir from trunk into stable
-#
-# ------------------------------------------------------------------------
-# r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-#
-# Merging xpdf 3.02 from HEAD into stable
-# svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-#
-# ------------------------------------------------------------------------
-# r50 | ms | 2006-02-16 13:00:00 +0100 (Do, 16 Feb 2006) | 2 lines
-#
-# 1.30.6
-#
-# ------------------------------------------------------------------------
-# r41 | ms | 2005-08-25 14:00:00 +0200 (Do, 25 Aug 2005) | 2 lines
-#
-# 1.30.2
-#
-# ------------------------------------------------------------------------
-# r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-#
-# 1.30.1
-
-# ------------------------------------------------------------------------
-# r33 | ms | 2005-08-01 14:01:00 +0200 (Mo, 01 Aug 2005) | 2 lines
-#
-# 1.30.0
-#
-# ------------------------------------------------------------------------
-# r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-#
-# 1.20a
-#
-# ------------------------------------------------------------------------
-# r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-#
-# released v1.11b
-#
-# ------------------------------------------------------------------------
-# r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-#
-# Moved sources to src
-#
-# ------------------------------------------------------------------------
-# r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-#
-# 1.11a
-# ------------------------------------------------------------------------
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-srcdirparent = $(srcdir)/..
-
-kpathsea_include_dir = -I../../../texk -I$(srcdir)/../../../texk
-ALLCFLAGS = $(CFLAGS) @DEFS@ -I.. -I$(srcdir)/.. -I. -I$(srcdir) $(kpathsea_include_dir)
-ALLCXXFLAGS = $(CXXFLAGS) @DEFS@ \
- -I.. -I$(srcdir)/.. -I. -I$(srcdir) $(kpathsea_include_dir) \
- -DPDF_PARSER_ONLY
-CXXFLAGS = @CXXFLAGS@
-CC = @CC@
-CXX = @CXX@
-CFLAGS = @CFLAGS@
-
-kpse_include ../../texk/make/library.mk
-
-
-#------------------------------------------------------------------------
-
-.SUFFIXES:
-.SUFFIXES: .cc .c .o
-
-.cc.o:
- $(CXX) $(ALLCXXFLAGS) -c $<
-.c.o:
- $(CC) $(ALLCFLAGS) -c $<
-
-#------------------------------------------------------------------------
-
-CXX_SRC = \
- $(srcdir)/FixedPoint.cc \
- $(srcdir)/GHash.cc \
- $(srcdir)/GList.cc \
- $(srcdir)/GString.cc \
- $(srcdir)/gmem.cc \
- $(srcdir)/gmempp.cc \
- $(srcdir)/gfile.cc
-
-C_SRC = \
- $(srcdir)/parseargs.c
-
-#------------------------------------------------------------------------
-
-GOO_CXX_OBJS = FixedPoint.o GHash.o GList.o GString.o gmem.o gmempp.o gfile.o
-GOO_C_OBJS = parseargs.o
-GOO_OBJS = $(GOO_CXX_OBJS) $(GOO_C_OBJS)
-
-libGoo.a: $(GOO_OBJS)
- rm -f $@
- $(AR) $(ARFLAGS) $@ $(GOO_OBJS)
- $(RANLIB) $@
-
-#------------------------------------------------------------------------
-
-mostlyclean clean:
- rm -f $(GOO_OBJS) libGoo.a
- rm -f Makefile.bak
-
-distclean maintainer-clean extraclean: clean
- rm -f Makefile
-
-#------------------------------------------------------------------------
-
-depend:
- srcdirparent=`(cd $(srcdirparent) >/dev/null; pwd)`; \
- ($(CXX) $(ALLCXXFLAGS) -MM $(srcdir)/*.cc; \
- $(CC) $(ALLCFLAGS) -MM $(srcdir)/*.c) \
- | sed 's|$(srcdir)|$$(srcdir)|' \
- | sed 's|'$$srcdirparent/'|$$(srcdirparent)/|g' > $(srcdir)/depend.mk
-
-kpse_include goo/depend.mk
diff --git a/Build/source/libs/xpdf/goo/depend.mk b/Build/source/libs/xpdf/goo/depend.mk
deleted file mode 100644
index 8aa02de24cb..00000000000
--- a/Build/source/libs/xpdf/goo/depend.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-FixedPoint.o: $(srcdir)/FixedPoint.cc ../aconf.h \
- $(srcdirparent)/aconf2.h
-gfile.o: $(srcdir)/gfile.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/GString.h \
- $(srcdir)/gfile.h \
- $(srcdir)/gtypes.h
-GHash.o: $(srcdir)/GHash.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/gmem.h \
- $(srcdir)/GString.h \
- $(srcdir)/GHash.h \
- $(srcdir)/gtypes.h
-GList.o: $(srcdir)/GList.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/gmem.h \
- $(srcdir)/GList.h \
- $(srcdir)/gtypes.h
-gmempp.o: $(srcdir)/gmempp.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/gmem.h
-GString.o: $(srcdir)/GString.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/gtypes.h \
- $(srcdir)/GString.h
-gmem.o: $(srcdir)/gmem.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/gmem.h
-parseargs.o: $(srcdir)/parseargs.c \
- $(srcdir)/parseargs.h \
- $(srcdir)/gtypes.h
diff --git a/Build/source/libs/xpdf/goo/gfile.cc b/Build/source/libs/xpdf/goo/gfile.cc
deleted file mode 100644
index c845099a6cd..00000000000
--- a/Build/source/libs/xpdf/goo/gfile.cc
+++ /dev/null
@@ -1,769 +0,0 @@
-//========================================================================
-//
-// gfile.cc
-//
-// Miscellaneous file and directory name manipulation.
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: gfile.cc 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r50 | ms | 2006-02-16 13:00:00 +0100 (Do, 16 Feb 2006) | 2 lines
-*
-* 1.30.6
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#include <aconf.h>
-
-#ifdef WIN32
-# include <time.h>
-#else
-# if defined(MACOS)
-# include <sys/stat.h>
-# elif !defined(ACORN)
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# endif
-# include <limits.h>
-# include <string.h>
-# if !defined(VMS) && !defined(ACORN) && !defined(MACOS)
-# include <pwd.h>
-# endif
-# if defined(VMS) && (__DECCXX_VER < 50200000)
-# include <unixlib.h>
-# endif
-#endif // WIN32
-#include "GString.h"
-#include "gfile.h"
-
-// Some systems don't define this, so just make it something reasonably
-// large.
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-//------------------------------------------------------------------------
-
-GString *getHomeDir() {
-#ifdef VMS
- //---------- VMS ----------
- return new GString("SYS$LOGIN:");
-
-#elif defined(__EMX__) || defined(WIN32)
- //---------- OS/2+EMX and Win32 ----------
- char *s;
- GString *ret;
-
- if ((s = getenv("HOME")))
- ret = new GString(s);
- else
- ret = new GString(".");
- return ret;
-
-#elif defined(ACORN)
- //---------- RISCOS ----------
- return new GString("@");
-
-#elif defined(MACOS)
- //---------- MacOS ----------
- return new GString(":");
-
-#else
- //---------- Unix ----------
- char *s;
- struct passwd *pw;
- GString *ret;
-
- if ((s = getenv("HOME"))) {
- ret = new GString(s);
- } else {
- if ((s = getenv("USER")))
- pw = getpwnam(s);
- else
- pw = getpwuid(getuid());
- if (pw)
- ret = new GString(pw->pw_dir);
- else
- ret = new GString(".");
- }
- return ret;
-#endif
-}
-
-GString *getCurrentDir() {
- char buf[PATH_MAX+1];
-
-#if defined(__EMX__)
- if (_getcwd2(buf, sizeof(buf)))
-#elif defined(WIN32)
- if (GetCurrentDirectory(sizeof(buf), buf))
-#elif defined(ACORN)
- if (strcpy(buf, "@"))
-#elif defined(MACOS)
- if (strcpy(buf, ":"))
-#else
- if (getcwd(buf, sizeof(buf)))
-#endif
- return new GString(buf);
- return new GString();
-}
-
-GString *appendToPath(GString *path, char *fileName) {
-#if defined(VMS)
- //---------- VMS ----------
- //~ this should handle everything necessary for file
- //~ requesters, but it's certainly not complete
- char *p0, *p1, *p2;
- char *q1;
-
- p0 = path->getCString();
- p1 = p0 + path->getLength() - 1;
- if (!strcmp(fileName, "-")) {
- if (*p1 == ']') {
- for (p2 = p1; p2 > p0 && *p2 != '.' && *p2 != '['; --p2) ;
- if (*p2 == '[')
- ++p2;
- path->del(p2 - p0, p1 - p2);
- } else if (*p1 == ':') {
- path->append("[-]");
- } else {
- path->clear();
- path->append("[-]");
- }
- } else if ((q1 = strrchr(fileName, '.')) && !strncmp(q1, ".DIR;", 5)) {
- if (*p1 == ']') {
- path->insert(p1 - p0, '.');
- path->insert(p1 - p0 + 1, fileName, q1 - fileName);
- } else if (*p1 == ':') {
- path->append('[');
- path->append(']');
- path->append(fileName, q1 - fileName);
- } else {
- path->clear();
- path->append(fileName, q1 - fileName);
- }
- } else {
- if (*p1 != ']' && *p1 != ':')
- path->clear();
- path->append(fileName);
- }
- return path;
-
-#elif defined(WIN32)
- //---------- Win32 ----------
- GString *tmp;
- char buf[256];
- char *fp;
-
- tmp = new GString(path);
- tmp->append('/');
- tmp->append(fileName);
- GetFullPathName(tmp->getCString(), sizeof(buf), buf, &fp);
- delete tmp;
- path->clear();
- path->append(buf);
- return path;
-
-#elif defined(ACORN)
- //---------- RISCOS ----------
- char *p;
- int i;
-
- path->append(".");
- i = path->getLength();
- path->append(fileName);
- for (p = path->getCString() + i; *p; ++p) {
- if (*p == '/') {
- *p = '.';
- } else if (*p == '.') {
- *p = '/';
- }
- }
- return path;
-
-#elif defined(MACOS)
- //---------- MacOS ----------
- char *p;
- int i;
-
- path->append(":");
- i = path->getLength();
- path->append(fileName);
- for (p = path->getCString() + i; *p; ++p) {
- if (*p == '/') {
- *p = ':';
- } else if (*p == '.') {
- *p = ':';
- }
- }
- return path;
-
-#elif defined(__EMX__)
- //---------- OS/2+EMX ----------
- int i;
-
- // appending "." does nothing
- if (!strcmp(fileName, "."))
- return path;
-
- // appending ".." goes up one directory
- if (!strcmp(fileName, "..")) {
- for (i = path->getLength() - 2; i >= 0; --i) {
- if (path->getChar(i) == '/' || path->getChar(i) == '\\' ||
- path->getChar(i) == ':')
- break;
- }
- if (i <= 0) {
- if (path->getChar(0) == '/' || path->getChar(0) == '\\') {
- path->del(1, path->getLength() - 1);
- } else if (path->getLength() >= 2 && path->getChar(1) == ':') {
- path->del(2, path->getLength() - 2);
- } else {
- path->clear();
- path->append("..");
- }
- } else {
- if (path->getChar(i-1) == ':')
- ++i;
- path->del(i, path->getLength() - i);
- }
- return path;
- }
-
- // otherwise, append "/" and new path component
- if (path->getLength() > 0 &&
- path->getChar(path->getLength() - 1) != '/' &&
- path->getChar(path->getLength() - 1) != '\\')
- path->append('/');
- path->append(fileName);
- return path;
-
-#else
- //---------- Unix ----------
- int i;
-
- // appending "." does nothing
- if (!strcmp(fileName, "."))
- return path;
-
- // appending ".." goes up one directory
- if (!strcmp(fileName, "..")) {
- for (i = path->getLength() - 2; i >= 0; --i) {
- if (path->getChar(i) == '/')
- break;
- }
- if (i <= 0) {
- if (path->getChar(0) == '/') {
- path->del(1, path->getLength() - 1);
- } else {
- path->clear();
- path->append("..");
- }
- } else {
- path->del(i, path->getLength() - i);
- }
- return path;
- }
-
- // otherwise, append "/" and new path component
- if (path->getLength() > 0 &&
- path->getChar(path->getLength() - 1) != '/')
- path->append('/');
- path->append(fileName);
- return path;
-#endif
-}
-
-GString *grabPath(char *fileName) {
-#ifdef VMS
- //---------- VMS ----------
- char *p;
-
- if ((p = strrchr(fileName, ']')))
- return new GString(fileName, p + 1 - fileName);
- if ((p = strrchr(fileName, ':')))
- return new GString(fileName, p + 1 - fileName);
- return new GString();
-
-#elif defined(__EMX__) || defined(WIN32)
- //---------- OS/2+EMX and Win32 ----------
- char *p;
-
- if ((p = strrchr(fileName, '/')))
- return new GString(fileName, p - fileName);
- if ((p = strrchr(fileName, '\\')))
- return new GString(fileName, p - fileName);
- if ((p = strrchr(fileName, ':')))
- return new GString(fileName, p + 1 - fileName);
- return new GString();
-
-#elif defined(ACORN)
- //---------- RISCOS ----------
- char *p;
-
- if ((p = strrchr(fileName, '.')))
- return new GString(fileName, p - fileName);
- return new GString();
-
-#elif defined(MACOS)
- //---------- MacOS ----------
- char *p;
-
- if ((p = strrchr(fileName, ':')))
- return new GString(fileName, p - fileName);
- return new GString();
-
-#else
- //---------- Unix ----------
- char *p;
-
- if ((p = strrchr(fileName, '/')))
- return new GString(fileName, p - fileName);
- return new GString();
-#endif
-}
-
-GBool isAbsolutePath(char *path) {
-#ifdef VMS
- //---------- VMS ----------
- return strchr(path, ':') ||
- (path[0] == '[' && path[1] != '.' && path[1] != '-');
-
-#elif defined(__EMX__) || defined(WIN32)
- //---------- OS/2+EMX and Win32 ----------
- return path[0] == '/' || path[0] == '\\' || path[1] == ':';
-
-#elif defined(ACORN)
- //---------- RISCOS ----------
- return path[0] == '$';
-
-#elif defined(MACOS)
- //---------- MacOS ----------
- return path[0] != ':';
-
-#else
- //---------- Unix ----------
- return path[0] == '/';
-#endif
-}
-
-GString *makePathAbsolute(GString *path) {
-#ifdef VMS
- //---------- VMS ----------
- char buf[PATH_MAX+1];
-
- if (!isAbsolutePath(path->getCString())) {
- if (getcwd(buf, sizeof(buf))) {
- path->insert(0, buf);
- }
- }
- return path;
-
-#elif defined(WIN32)
- //---------- Win32 ----------
- char buf[_MAX_PATH];
- char *fp;
-
- buf[0] = '\0';
- if (!GetFullPathName(path->getCString(), _MAX_PATH, buf, &fp)) {
- path->clear();
- return path;
- }
- path->clear();
- path->append(buf);
- return path;
-
-#elif defined(ACORN)
- //---------- RISCOS ----------
- path->insert(0, '@');
- return path;
-
-#elif defined(MACOS)
- //---------- MacOS ----------
- path->del(0, 1);
- return path;
-
-#else
- //---------- Unix and OS/2+EMX ----------
- struct passwd *pw;
- char buf[PATH_MAX+1];
- GString *s;
- char *p1, *p2;
- int n;
-
- if (path->getChar(0) == '~') {
- if (path->getChar(1) == '/' ||
-#ifdef __EMX__
- path->getChar(1) == '\\' ||
-#endif
- path->getLength() == 1) {
- path->del(0, 1);
- s = getHomeDir();
- path->insert(0, s);
- delete s;
- } else {
- p1 = path->getCString() + 1;
-#ifdef __EMX__
- for (p2 = p1; *p2 && *p2 != '/' && *p2 != '\\'; ++p2) ;
-#else
- for (p2 = p1; *p2 && *p2 != '/'; ++p2) ;
-#endif
- if ((n = p2 - p1) > PATH_MAX)
- n = PATH_MAX;
- strncpy(buf, p1, n);
- buf[n] = '\0';
- if ((pw = getpwnam(buf))) {
- path->del(0, p2 - p1 + 1);
- path->insert(0, pw->pw_dir);
- }
- }
- } else if (!isAbsolutePath(path->getCString())) {
- if (getcwd(buf, sizeof(buf))) {
-#ifndef __EMX__
- path->insert(0, '/');
-#endif
- path->insert(0, buf);
- }
- }
- return path;
-#endif
-}
-
-time_t getModTime(char *fileName) {
-#ifdef WIN32
- //~ should implement this, but it's (currently) only used in xpdf
- return 0;
-#else
- struct stat statBuf;
-
- if (stat(fileName, &statBuf)) {
- return 0;
- }
- return statBuf.st_mtime;
-#endif
-}
-
-#ifndef PDF_PARSER_ONLY
-GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) {
-#if defined(WIN32)
- //---------- Win32 ----------
- char *tempDir;
- GString *s, *s2;
- char buf[32];
- FILE *f2;
- int t, i;
-
- // this has the standard race condition problem, but I haven't found
- // a better way to generate temp file names with extensions on
- // Windows
- if ((tempDir = getenv("TEMP"))) {
- s = new GString(tempDir);
- s->append('\\');
- } else {
- s = new GString();
- }
- s->append("x");
- t = (int)time(NULL);
- for (i = 0; i < 1000; ++i) {
- sprintf(buf, "%d", t + i);
- s2 = s->copy()->append(buf);
- if (ext) {
- s2->append(ext);
- }
- if (!(f2 = fopen(s2->getCString(), "r"))) {
- if (!(f2 = fopen(s2->getCString(), mode))) {
- delete s2;
- delete s;
- return gFalse;
- }
- *name = s2;
- *f = f2;
- delete s;
- return gTrue;
- }
- fclose(f2);
- delete s2;
- }
- delete s;
- return gFalse;
-#elif defined(VMS) || defined(__EMX__) || defined(ACORN) || defined(MACOS)
- //---------- non-Unix ----------
- char *s;
-
- // There is a security hole here: an attacker can create a symlink
- // with this file name after the tmpnam call and before the fopen
- // call. I will happily accept fixes to this function for non-Unix
- // OSs.
- if (!(s = tmpnam(NULL))) {
- return gFalse;
- }
- *name = new GString(s);
- if (ext) {
- (*name)->append(ext);
- }
- if (!(*f = fopen((*name)->getCString(), mode))) {
- delete (*name);
- return gFalse;
- }
- return gTrue;
-#else
- //---------- Unix ----------
- char *s;
- int fd;
-
- if (ext) {
-#if HAVE_MKSTEMPS
- if ((s = getenv("TMPDIR"))) {
- *name = new GString(s);
- } else {
- *name = new GString("/tmp");
- }
- (*name)->append("/XXXXXX")->append(ext);
- fd = mkstemps((*name)->getCString(), strlen(ext));
-#else
- if (!(s = tmpnam(NULL))) {
- return gFalse;
- }
- *name = new GString(s);
- (*name)->append(ext);
- fd = open((*name)->getCString(), O_WRONLY | O_CREAT | O_EXCL, 0600);
-#endif
- } else {
-#if HAVE_MKSTEMP
- if ((s = getenv("TMPDIR"))) {
- *name = new GString(s);
- } else {
- *name = new GString("/tmp");
- }
- (*name)->append("/XXXXXX");
- fd = mkstemp((*name)->getCString());
-#else // HAVE_MKSTEMP
- if (!(s = tmpnam(NULL))) {
- return gFalse;
- }
- *name = new GString(s);
- fd = open((*name)->getCString(), O_WRONLY | O_CREAT | O_EXCL, 0600);
-#endif // HAVE_MKSTEMP
- }
- if (fd < 0 || !(*f = fdopen(fd, mode))) {
- delete *name;
- return gFalse;
- }
- return gTrue;
-#endif
-}
-#endif
-
-GBool executeCommand(char *cmd) {
-#ifdef VMS
- return system(cmd) ? gTrue : gFalse;
-#else
- return system(cmd) ? gFalse : gTrue;
-#endif
-}
-
-char *getLine(char *buf, int size, FILE *f) {
- int c, i;
-
- i = 0;
- while (i < size - 1) {
- if ((c = fgetc(f)) == EOF) {
- break;
- }
- buf[i++] = (char)c;
- if (c == '\x0a') {
- break;
- }
- if (c == '\x0d') {
- c = fgetc(f);
- if (c == '\x0a' && i < size - 1) {
- buf[i++] = (char)c;
- } else if (c != EOF) {
- ungetc(c, f);
- }
- break;
- }
- }
- buf[i] = '\0';
- if (i == 0) {
- return NULL;
- }
- return buf;
-}
-
-//------------------------------------------------------------------------
-// GDir and GDirEntry
-//------------------------------------------------------------------------
-
-GDirEntry::GDirEntry(char *dirPath, char *nameA, GBool doStat) {
-#ifdef VMS
- char *p;
-#elif defined(WIN32)
- int fa;
- GString *s;
-#elif defined(ACORN)
-#else
- struct stat st;
- GString *s;
-#endif
-
- name = new GString(nameA);
- dir = gFalse;
- if (doStat) {
-#ifdef VMS
- if (!strcmp(nameA, "-") ||
- ((p = strrchr(nameA, '.')) && !strncmp(p, ".DIR;", 5)))
- dir = gTrue;
-#elif defined(ACORN)
-#else
- s = new GString(dirPath);
- appendToPath(s, nameA);
-#ifdef WIN32
- fa = GetFileAttributes(s->getCString());
- dir = (fa != 0xFFFFFFFF && (fa & FILE_ATTRIBUTE_DIRECTORY));
-#else
- if (stat(s->getCString(), &st) == 0)
- dir = S_ISDIR(st.st_mode);
-#endif
- delete s;
-#endif
- }
-}
-
-GDirEntry::~GDirEntry() {
- delete name;
-}
-
-GDir::GDir(char *name, GBool doStatA) {
- path = new GString(name);
- doStat = doStatA;
-#if defined(WIN32)
- GString *tmp;
-
- tmp = path->copy();
- tmp->append("/*.*");
- hnd = FindFirstFile(tmp->getCString(), &ffd);
- delete tmp;
-#elif defined(ACORN)
-#elif defined(MACOS)
-#else
- dir = opendir(name);
-#ifdef VMS
- needParent = strchr(name, '[') != NULL;
-#endif
-#endif
-}
-
-GDir::~GDir() {
- delete path;
-#if defined(WIN32)
- if (hnd) {
- FindClose(hnd);
- hnd = NULL;
- }
-#elif defined(ACORN)
-#elif defined(MACOS)
-#else
- if (dir)
- closedir(dir);
-#endif
-}
-
-GDirEntry *GDir::getNextEntry() {
- GDirEntry *e;
-
-#if defined(WIN32)
- if (hnd) {
- e = new GDirEntry(path->getCString(), ffd.cFileName, doStat);
- if (hnd && !FindNextFile(hnd, &ffd)) {
- FindClose(hnd);
- hnd = NULL;
- }
- } else {
- e = NULL;
- }
-#elif defined(ACORN)
-#elif defined(MACOS)
-#elif defined(VMS)
- struct dirent *ent;
- e = NULL;
- if (dir) {
- if (needParent) {
- e = new GDirEntry(path->getCString(), "-", doStat);
- needParent = gFalse;
- return e;
- }
- ent = readdir(dir);
- if (ent) {
- e = new GDirEntry(path->getCString(), ent->d_name, doStat);
- }
- }
-#else
- struct dirent *ent;
- e = NULL;
- if (dir) {
- ent = (struct dirent *)readdir(dir);
- if (ent && !strcmp(ent->d_name, ".")) {
- ent = (struct dirent *)readdir(dir);
- }
- if (ent) {
- e = new GDirEntry(path->getCString(), ent->d_name, doStat);
- }
- }
-#endif
-
- return e;
-}
-
-void GDir::rewind() {
-#ifdef WIN32
- GString *tmp;
-
- if (hnd)
- FindClose(hnd);
- tmp = path->copy();
- tmp->append("/*.*");
- hnd = FindFirstFile(tmp->getCString(), &ffd);
- delete tmp;
-#elif defined(ACORN)
-#elif defined(MACOS)
-#else
- if (dir)
- rewinddir(dir);
-#ifdef VMS
- needParent = strchr(path->getCString(), '[') != NULL;
-#endif
-#endif
-}
diff --git a/Build/source/libs/xpdf/goo/gfile.h b/Build/source/libs/xpdf/goo/gfile.h
deleted file mode 100644
index 82f1d7a98e3..00000000000
--- a/Build/source/libs/xpdf/goo/gfile.h
+++ /dev/null
@@ -1,138 +0,0 @@
-//========================================================================
-//
-// gfile.h
-//
-// Miscellaneous file and directory name manipulation.
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef GFILE_H
-#define GFILE_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#if defined(WIN32)
-# include <sys/stat.h>
-# ifdef FPTEX
-# include <win32lib.h>
-# else
-# include <windows.h>
-# endif
-#elif defined(ACORN)
-#elif defined(MACOS)
-# include <ctime.h>
-#else
-# include <unistd.h>
-# include <sys/types.h>
-# ifdef VMS
-# include "vms_dirent.h"
-# elif HAVE_DIRENT_H
-# include <dirent.h>
-# define NAMLEN(d) strlen((d)->d_name)
-# else
-# define dirent direct
-# define NAMLEN(d) (d)->d_namlen
-# if HAVE_SYS_NDIR_H
-# include <sys/ndir.h>
-# endif
-# if HAVE_SYS_DIR_H
-# include <sys/dir.h>
-# endif
-# if HAVE_NDIR_H
-# include <ndir.h>
-# endif
-# endif
-#endif
-#include "gtypes.h"
-
-class GString;
-
-//------------------------------------------------------------------------
-
-// Get home directory path.
-extern GString *getHomeDir();
-
-// Get current directory.
-extern GString *getCurrentDir();
-
-// Append a file name to a path string. <path> may be an empty
-// string, denoting the current directory). Returns <path>.
-extern GString *appendToPath(GString *path, char *fileName);
-
-// Grab the path from the front of the file name. If there is no
-// directory component in <fileName>, returns an empty string.
-extern GString *grabPath(char *fileName);
-
-// Is this an absolute path or file name?
-extern GBool isAbsolutePath(char *path);
-
-// Make this path absolute by prepending current directory (if path is
-// relative) or prepending user's directory (if path starts with '~').
-extern GString *makePathAbsolute(GString *path);
-
-// Get the modification time for <fileName>. Returns 0 if there is an
-// error.
-extern time_t getModTime(char *fileName);
-
-// Create a temporary file and open it for writing. If <ext> is not
-// NULL, it will be used as the file name extension. Returns both the
-// name and the file pointer. For security reasons, all writing
-// should be done to the returned file pointer; the file may be
-// reopened later for reading, but not for writing. The <mode> string
-// should be "w" or "wb". Returns true on success.
-extern GBool openTempFile(GString **name, FILE **f, char *mode, char *ext);
-
-// Execute <command>. Returns true on success.
-extern GBool executeCommand(char *cmd);
-
-// Just like fgets, but handles Unix, Mac, and/or DOS end-of-line
-// conventions.
-extern char *getLine(char *buf, int size, FILE *f);
-
-//------------------------------------------------------------------------
-// GDir and GDirEntry
-//------------------------------------------------------------------------
-
-class GDirEntry {
-public:
-
- GDirEntry(char *dirPath, char *nameA, GBool doStat);
- ~GDirEntry();
- GString *getName() { return name; }
- GBool isDir() { return dir; }
-
-private:
-
- GString *name; // dir/file name
- GBool dir; // is it a directory?
-};
-
-class GDir {
-public:
-
- GDir(char *name, GBool doStatA = gTrue);
- ~GDir();
- GDirEntry *getNextEntry();
- void rewind();
-
-private:
-
- GString *path; // directory path
- GBool doStat; // call stat() for each entry?
-#if defined(WIN32)
- WIN32_FIND_DATA ffd;
- HANDLE hnd;
-#elif defined(ACORN)
-#elif defined(MACOS)
-#else
- DIR *dir; // the DIR structure from opendir()
-#ifdef VMS
- GBool needParent; // need to return an entry for [-]
-#endif
-#endif
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/gmem.cc b/Build/source/libs/xpdf/goo/gmem.cc
deleted file mode 100644
index 6b13b38d0f0..00000000000
--- a/Build/source/libs/xpdf/goo/gmem.cc
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * gmem.c
- *
- * Memory routines with out-of-memory checking.
- *
- * Copyright 1996-2003 Glyph & Cog, LLC
- */
-
-#include <aconf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <limits.h>
-#include "gmem.h"
-
-#ifdef DEBUG_MEM
-
-typedef struct _GMemHdr {
- unsigned int magic;
- int size;
- int index;
- struct _GMemHdr *next, *prev;
-} GMemHdr;
-
-#define gMemHdrSize ((sizeof(GMemHdr) + 7) & ~7)
-#define gMemTrlSize (sizeof(long))
-
-#define gMemMagic 0xabcd9999
-
-#if gmemTrlSize==8
-#define gMemDeadVal 0xdeadbeefdeadbeefUL
-#else
-#define gMemDeadVal 0xdeadbeefUL
-#endif
-
-/* round data size so trailer will be aligned */
-#define gMemDataSize(size) \
- ((((size) + gMemTrlSize - 1) / gMemTrlSize) * gMemTrlSize)
-
-static GMemHdr *gMemHead = NULL;
-static GMemHdr *gMemTail = NULL;
-
-static int gMemIndex = 0;
-static int gMemAlloc = 0;
-static int gMemInUse = 0;
-
-#endif /* DEBUG_MEM */
-
-void *gmalloc(int size) GMEM_EXCEP {
-#ifdef DEBUG_MEM
- int size1;
- char *mem;
- GMemHdr *hdr;
- void *data;
- unsigned long *trl, *p;
-
- if (size <= 0) {
- return NULL;
- }
- size1 = gMemDataSize(size);
- if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) {
-#if USE_EXCEPTIONS
- throw GMemException();
-#else
- fprintf(stderr, "Out of memory\n");
- exit(1);
-#endif
- }
- hdr = (GMemHdr *)mem;
- data = (void *)(mem + gMemHdrSize);
- trl = (unsigned long *)(mem + gMemHdrSize + size1);
- hdr->magic = gMemMagic;
- hdr->size = size;
- hdr->index = gMemIndex++;
- if (gMemTail) {
- gMemTail->next = hdr;
- hdr->prev = gMemTail;
- gMemTail = hdr;
- } else {
- hdr->prev = NULL;
- gMemHead = gMemTail = hdr;
- }
- hdr->next = NULL;
- ++gMemAlloc;
- gMemInUse += size;
- for (p = (unsigned long *)data; p <= trl; ++p) {
- *p = gMemDeadVal;
- }
- return data;
-#else
- void *p;
-
- if (size <= 0) {
- return NULL;
- }
- if (!(p = malloc(size))) {
-#if USE_EXCEPTIONS
- throw GMemException();
-#else
- fprintf(stderr, "Out of memory\n");
- exit(1);
-#endif
- }
- return p;
-#endif
-}
-
-void *grealloc(void *p, int size) GMEM_EXCEP {
-#ifdef DEBUG_MEM
- GMemHdr *hdr;
- void *q;
- int oldSize;
-
- if (size <= 0) {
- if (p) {
- gfree(p);
- }
- return NULL;
- }
- if (p) {
- hdr = (GMemHdr *)((char *)p - gMemHdrSize);
- oldSize = hdr->size;
- q = gmalloc(size);
- memcpy(q, p, size < oldSize ? size : oldSize);
- gfree(p);
- } else {
- q = gmalloc(size);
- }
- return q;
-#else
- void *q;
-
- if (size <= 0) {
- if (p) {
- free(p);
- }
- return NULL;
- }
- if (p) {
- q = realloc(p, size);
- } else {
- q = malloc(size);
- }
- if (!q) {
-#if USE_EXCEPTIONS
- throw GMemException();
-#else
- fprintf(stderr, "Out of memory\n");
- exit(1);
-#endif
- }
- return q;
-#endif
-}
-
-void *gmallocn(int nObjs, int objSize) GMEM_EXCEP {
- int n;
-
- if (nObjs == 0) {
- return NULL;
- }
- n = nObjs * objSize;
- if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
-#if USE_EXCEPTIONS
- throw GMemException();
-#else
- fprintf(stderr, "Bogus memory allocation size\n");
- exit(1);
-#endif
- }
- return gmalloc(n);
-}
-
-void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP {
- int n;
-
- if (nObjs == 0) {
- if (p) {
- gfree(p);
- }
- return NULL;
- }
- n = nObjs * objSize;
- if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
-#if USE_EXCEPTIONS
- throw GMemException();
-#else
- fprintf(stderr, "Bogus memory allocation size\n");
- exit(1);
-#endif
- }
- return grealloc(p, n);
-}
-
-void gfree(void *p) {
-#ifdef DEBUG_MEM
- int size;
- GMemHdr *hdr;
- unsigned long *trl, *clr;
-
- if (p) {
- hdr = (GMemHdr *)((char *)p - gMemHdrSize);
- if (hdr->magic == gMemMagic &&
- ((hdr->prev == NULL) == (hdr == gMemHead)) &&
- ((hdr->next == NULL) == (hdr == gMemTail))) {
- if (hdr->prev) {
- hdr->prev->next = hdr->next;
- } else {
- gMemHead = hdr->next;
- }
- if (hdr->next) {
- hdr->next->prev = hdr->prev;
- } else {
- gMemTail = hdr->prev;
- }
- --gMemAlloc;
- gMemInUse -= hdr->size;
- size = gMemDataSize(hdr->size);
- trl = (unsigned long *)((char *)hdr + gMemHdrSize + size);
- if (*trl != gMemDeadVal) {
- fprintf(stderr, "Overwrite past end of block %d at address %p\n",
- hdr->index, p);
- }
- for (clr = (unsigned long *)hdr; clr <= trl; ++clr) {
- *clr = gMemDeadVal;
- }
- free(hdr);
- } else {
- fprintf(stderr, "Attempted to free bad address %p\n", p);
- }
- }
-#else
- if (p) {
- free(p);
- }
-#endif
-}
-
-#ifdef DEBUG_MEM
-void gMemReport(FILE *f) {
- GMemHdr *p;
-
- fprintf(f, "%d memory allocations in all\n", gMemIndex);
- if (gMemAlloc > 0) {
- fprintf(f, "%d memory blocks left allocated:\n", gMemAlloc);
- fprintf(f, " index size\n");
- fprintf(f, "-------- --------\n");
- for (p = gMemHead; p; p = p->next) {
- fprintf(f, "%8d %8d\n", p->index, p->size);
- }
- } else {
- fprintf(f, "No memory blocks left allocated\n");
- }
-}
-#endif
-
-char *copyString(char *s) {
- char *s1;
-
- s1 = (char *)gmalloc(strlen(s) + 1);
- strcpy(s1, s);
- return s1;
-}
diff --git a/Build/source/libs/xpdf/goo/gmem.h b/Build/source/libs/xpdf/goo/gmem.h
deleted file mode 100644
index da34736f216..00000000000
--- a/Build/source/libs/xpdf/goo/gmem.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * gmem.h
- *
- * Memory routines with out-of-memory checking.
- *
- * Copyright 1996-2003 Glyph & Cog, LLC
- */
-
-#ifndef GMEM_H
-#define GMEM_H
-
-#include <stdio.h>
-#include <aconf.h>
-
-#if USE_EXCEPTIONS
-
-class GMemException {
-public:
- GMemException() {}
- ~GMemException() {}
-};
-
-#define GMEM_EXCEP throw(GMemException)
-
-#else // USE_EXCEPTIONS
-
-#define GMEM_EXCEP
-
-#endif // USE_EXCEPTIONS
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Same as malloc, but prints error message and exits if malloc()
- * returns NULL.
- */
-extern void *gmalloc(int size) GMEM_EXCEP;
-
-/*
- * Same as realloc, but prints error message and exits if realloc()
- * returns NULL. If <p> is NULL, calls malloc instead of realloc().
- */
-extern void *grealloc(void *p, int size) GMEM_EXCEP;
-
-/*
- * These are similar to gmalloc and grealloc, but take an object count
- * and size. The result is similar to allocating nObjs * objSize
- * bytes, but there is an additional error check that the total size
- * doesn't overflow an int.
- */
-extern void *gmallocn(int nObjs, int objSize) GMEM_EXCEP;
-extern void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP;
-
-/*
- * Same as free, but checks for and ignores NULL pointers.
- */
-extern void gfree(void *p);
-
-#ifdef DEBUG_MEM
-/*
- * Report on unfreed memory.
- */
-extern void gMemReport(FILE *f);
-#else
-#define gMemReport(f)
-#endif
-
-/*
- * Allocate memory and copy a string into it.
- */
-extern char *copyString(char *s);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/gmempp.cc b/Build/source/libs/xpdf/goo/gmempp.cc
deleted file mode 100644
index b1ee970d38a..00000000000
--- a/Build/source/libs/xpdf/goo/gmempp.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-//========================================================================
-//
-// gmempp.cc
-//
-// Use gmalloc/gfree for C++ new/delete operators.
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-#include "gmem.h"
-
-#ifdef DEBUG_MEM
-
-void *operator new(size_t size) {
- return gmalloc((int)size);
-}
-
-void *operator new[](size_t size) {
- return gmalloc((int)size);
-}
-
-void operator delete(void *p) {
- gfree(p);
-}
-
-void operator delete[](void *p) {
- gfree(p);
-}
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/gtypes.h b/Build/source/libs/xpdf/goo/gtypes.h
deleted file mode 100644
index 9f64f57d4a1..00000000000
--- a/Build/source/libs/xpdf/goo/gtypes.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * gtypes.h
- *
- * Some useful simple types.
- *
- * Copyright 1996-2003 Glyph & Cog, LLC
- */
-
-#ifndef GTYPES_H
-#define GTYPES_H
-
-/*
- * These have stupid names to avoid conflicts with some (but not all)
- * C++ compilers which define them.
- */
-typedef int GBool;
-#define gTrue 1
-#define gFalse 0
-
-/*
- * These have stupid names to avoid conflicts with <sys/types.h>,
- * which on various systems defines some random subset of these.
- */
-typedef unsigned char Guchar;
-typedef unsigned short Gushort;
-typedef unsigned int Guint;
-typedef unsigned long Gulong;
-
-#endif
diff --git a/Build/source/libs/xpdf/goo/parseargs.c b/Build/source/libs/xpdf/goo/parseargs.c
deleted file mode 100644
index f77cc85c821..00000000000
--- a/Build/source/libs/xpdf/goo/parseargs.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * parseargs.h
- *
- * Command line argument parser.
- *
- * Copyright 1996-2003 Glyph & Cog, LLC
- */
-
-#include <stdio.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include "parseargs.h"
-
-static ArgDesc *findArg(ArgDesc *args, char *arg);
-static GBool grabArg(ArgDesc *arg, int i, int *argc, char *argv[]);
-
-GBool parseArgs(ArgDesc *args, int *argc, char *argv[]) {
- ArgDesc *arg;
- int i, j;
- GBool ok;
-
- ok = gTrue;
- i = 1;
- while (i < *argc) {
- if (!strcmp(argv[i], "--")) {
- --*argc;
- for (j = i; j < *argc; ++j)
- argv[j] = argv[j+1];
- break;
- } else if ((arg = findArg(args, argv[i]))) {
- if (!grabArg(arg, i, argc, argv))
- ok = gFalse;
- } else {
- ++i;
- }
- }
- return ok;
-}
-
-void printUsage(char *program, char *otherArgs, ArgDesc *args) {
- ArgDesc *arg;
- char *typ;
- int w, w1;
-
- w = 0;
- for (arg = args; arg->arg; ++arg) {
- if ((w1 = strlen(arg->arg)) > w)
- w = w1;
- }
-
- fprintf(stderr, "Usage: %s [options]", program);
- if (otherArgs)
- fprintf(stderr, " %s", otherArgs);
- fprintf(stderr, "\n");
-
- for (arg = args; arg->arg; ++arg) {
- fprintf(stderr, " %s", arg->arg);
- w1 = 9 + w - strlen(arg->arg);
- switch (arg->kind) {
- case argInt:
- case argIntDummy:
- typ = " <int>";
- break;
- case argFP:
- case argFPDummy:
- typ = " <fp>";
- break;
- case argString:
- case argStringDummy:
- typ = " <string>";
- break;
- case argFlag:
- case argFlagDummy:
- default:
- typ = "";
- break;
- }
- fprintf(stderr, "%-*s", w1, typ);
- if (arg->usage)
- fprintf(stderr, ": %s", arg->usage);
- fprintf(stderr, "\n");
- }
-}
-
-static ArgDesc *findArg(ArgDesc *args, char *arg) {
- ArgDesc *p;
-
- for (p = args; p->arg; ++p) {
- if (p->kind < argFlagDummy && !strcmp(p->arg, arg))
- return p;
- }
- return NULL;
-}
-
-static GBool grabArg(ArgDesc *arg, int i, int *argc, char *argv[]) {
- int n;
- int j;
- GBool ok;
-
- ok = gTrue;
- n = 0;
- switch (arg->kind) {
- case argFlag:
- *(GBool *)arg->val = gTrue;
- n = 1;
- break;
- case argInt:
- if (i + 1 < *argc && isInt(argv[i+1])) {
- *(int *)arg->val = atoi(argv[i+1]);
- n = 2;
- } else {
- ok = gFalse;
- n = 1;
- }
- break;
- case argFP:
- if (i + 1 < *argc && isFP(argv[i+1])) {
- *(double *)arg->val = atof(argv[i+1]);
- n = 2;
- } else {
- ok = gFalse;
- n = 1;
- }
- break;
- case argString:
- if (i + 1 < *argc) {
- strncpy((char *)arg->val, argv[i+1], arg->size - 1);
- ((char *)arg->val)[arg->size - 1] = '\0';
- n = 2;
- } else {
- ok = gFalse;
- n = 1;
- }
- break;
- default:
- fprintf(stderr, "Internal error in arg table\n");
- n = 1;
- break;
- }
- if (n > 0) {
- *argc -= n;
- for (j = i; j < *argc; ++j)
- argv[j] = argv[j+n];
- }
- return ok;
-}
-
-GBool isInt(char *s) {
- if (*s == '-' || *s == '+')
- ++s;
- while (isdigit(*s & 0xff))
- ++s;
- if (*s)
- return gFalse;
- return gTrue;
-}
-
-GBool isFP(char *s) {
- int n;
-
- if (*s == '-' || *s == '+')
- ++s;
- n = 0;
- while (isdigit(*s & 0xff)) {
- ++s;
- ++n;
- }
- if (*s == '.')
- ++s;
- while (isdigit(*s & 0xff)) {
- ++s;
- ++n;
- }
- if (n > 0 && (*s == 'e' || *s == 'E')) {
- ++s;
- if (*s == '-' || *s == '+')
- ++s;
- n = 0;
- if (!isdigit(*s & 0xff))
- return gFalse;
- do {
- ++s;
- } while (isdigit(*s & 0xff));
- }
- if (*s)
- return gFalse;
- return gTrue;
-}
diff --git a/Build/source/libs/xpdf/goo/parseargs.h b/Build/source/libs/xpdf/goo/parseargs.h
deleted file mode 100644
index 0d163b9856e..00000000000
--- a/Build/source/libs/xpdf/goo/parseargs.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * parseargs.h
- *
- * Command line argument parser.
- *
- * Copyright 1996-2003 Glyph & Cog, LLC
- */
-
-#ifndef PARSEARGS_H
-#define PARSEARGS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "gtypes.h"
-
-/*
- * Argument kinds.
- */
-typedef enum {
- argFlag, /* flag (present / not-present) */
- /* [val: GBool *] */
- argInt, /* integer arg */
- /* [val: int *] */
- argFP, /* floating point arg */
- /* [val: double *] */
- argString, /* string arg */
- /* [val: char *] */
- /* dummy entries -- these show up in the usage listing only; */
- /* useful for X args, for example */
- argFlagDummy,
- argIntDummy,
- argFPDummy,
- argStringDummy
-} ArgKind;
-
-/*
- * Argument descriptor.
- */
-typedef struct {
- char *arg; /* the command line switch */
- ArgKind kind; /* kind of arg */
- void *val; /* place to store value */
- int size; /* for argString: size of string */
- char *usage; /* usage string */
-} ArgDesc;
-
-/*
- * Parse command line. Removes all args which are found in the arg
- * descriptor list <args>. Stops parsing if "--" is found (and removes
- * it). Returns gFalse if there was an error.
- */
-extern GBool parseArgs(ArgDesc *args, int *argc, char *argv[]);
-
-/*
- * Print usage message, based on arg descriptor list.
- */
-extern void printUsage(char *program, char *otherArgs, ArgDesc *args);
-
-/*
- * Check if a string is a valid integer or floating point number.
- */
-extern GBool isInt(char *s);
-extern GBool isFP(char *s);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/xpdf/libxpdf.ac b/Build/source/libs/xpdf/libxpdf.ac
deleted file mode 100644
index 7f2f2acaf6f..00000000000
--- a/Build/source/libs/xpdf/libxpdf.ac
+++ /dev/null
@@ -1,13 +0,0 @@
-if test "$needs_libxpdf" = no; then
- LIBXPDFCPPFLAGS=
- LDLIBXPDF=
- LIBXPDFDEP=
-else
- LIBXPDFCPPFLAGS='-I$(LIBXPDFDIR) -I$(LIBXPDFDIR)/xpdf -I$(LIBXPDFDIR)/goo -I$(LIBXPDFDIR)/fofi -I$(LIBXPDFSRCDIR) -I$(LIBXPDFSRCDIR)/xpdf -I$(LIBXPDFSRCDIR)/goo -I$(LIBXPDFSRCDIR)/fofi'
- LDLIBXPDF='$(LIBXPDFDIR)/xpdf/libxpdf.a $(LIBXPDFDIR)/goo/libGoo.a $(LIBXPDFDIR)/fofi/libfofi.a'
- LIBXPDFDEP='$(LIBXPDFDIR)/xpdf/libxpdf.a $(LIBXPDFDIR)/goo/libGoo.a $(LIBXPDFDIR)/fofi/libfofi.a'
-fi
-
-AC_SUBST(LIBXPDFCPPFLAGS)
-AC_SUBST(LDLIBXPDF)
-AC_SUBST(LIBXPDFDEP)
diff --git a/Build/source/libs/xpdf/stamp-aclocal b/Build/source/libs/xpdf/stamp-aclocal
deleted file mode 100644
index b05eb107eb9..00000000000
--- a/Build/source/libs/xpdf/stamp-aclocal
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 27 15:55:01 CET 2009
diff --git a/Build/source/libs/xpdf/stamp-configure b/Build/source/libs/xpdf/stamp-configure
deleted file mode 100644
index be273ff30e1..00000000000
--- a/Build/source/libs/xpdf/stamp-configure
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 27 15:55:02 CET 2009
diff --git a/Build/source/libs/xpdf/xpdf/Array.cc b/Build/source/libs/xpdf/xpdf/Array.cc
deleted file mode 100644
index 10ded148db6..00000000000
--- a/Build/source/libs/xpdf/xpdf/Array.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-//========================================================================
-//
-// Array.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <stddef.h>
-#include "gmem.h"
-#include "Object.h"
-#include "Array.h"
-
-//------------------------------------------------------------------------
-// Array
-//------------------------------------------------------------------------
-
-Array::Array(XRef *xrefA) {
- xref = xrefA;
- elems = NULL;
- size = length = 0;
- ref = 1;
-}
-
-Array::~Array() {
- int i;
-
- for (i = 0; i < length; ++i)
- elems[i].free();
- gfree(elems);
-}
-
-void Array::add(Object *elem) {
- if (length == size) {
- if (length == 0) {
- size = 8;
- } else {
- size *= 2;
- }
- elems = (Object *)greallocn(elems, size, sizeof(Object));
- }
- elems[length] = *elem;
- ++length;
-}
-
-Object *Array::get(int i, Object *obj) {
- if (i < 0 || i >= length) {
-#ifdef DEBUG_MEM
- abort();
-#else
- return obj->initNull();
-#endif
- }
- return elems[i].fetch(xref, obj);
-}
-
-Object *Array::getNF(int i, Object *obj) {
- if (i < 0 || i >= length) {
-#ifdef DEBUG_MEM
- abort();
-#else
- return obj->initNull();
-#endif
- }
- return elems[i].copy(obj);
-}
diff --git a/Build/source/libs/xpdf/xpdf/Array.h b/Build/source/libs/xpdf/xpdf/Array.h
deleted file mode 100644
index 20ae05f2970..00000000000
--- a/Build/source/libs/xpdf/xpdf/Array.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//========================================================================
-//
-// Array.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef ARRAY_H
-#define ARRAY_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "Object.h"
-
-class XRef;
-
-//------------------------------------------------------------------------
-// Array
-//------------------------------------------------------------------------
-
-class Array {
-public:
-
- // Constructor.
- Array(XRef *xrefA);
-
- // Destructor.
- ~Array();
-
- // Reference counting.
- int incRef() { return ++ref; }
- int decRef() { return --ref; }
-
- // Get number of elements.
- int getLength() { return length; }
-
- // Add an element.
- void add(Object *elem);
-
- // Accessors.
- Object *get(int i, Object *obj);
- Object *getNF(int i, Object *obj);
-
-private:
-
- XRef *xref; // the xref table for this PDF file
- Object *elems; // array of elements
- int size; // size of <elems> array
- int length; // number of elements in array
- int ref; // reference count
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/BuiltinFont.cc b/Build/source/libs/xpdf/xpdf/BuiltinFont.cc
deleted file mode 100644
index ce98957128b..00000000000
--- a/Build/source/libs/xpdf/xpdf/BuiltinFont.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-//========================================================================
-//
-// BuiltinFont.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "gmem.h"
-#include "FontEncodingTables.h"
-#include "BuiltinFont.h"
-
-//------------------------------------------------------------------------
-
-BuiltinFontWidths::BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA) {
- int i, h;
-
- size = sizeA;
- tab = (BuiltinFontWidth **)gmallocn(size, sizeof(BuiltinFontWidth *));
- for (i = 0; i < size; ++i) {
- tab[i] = NULL;
- }
- for (i = 0; i < sizeA; ++i) {
- h = hash(widths[i].name);
- widths[i].next = tab[h];
- tab[h] = &widths[i];
- }
-}
-
-BuiltinFontWidths::~BuiltinFontWidths() {
- gfree(tab);
-}
-
-GBool BuiltinFontWidths::getWidth(char *name, Gushort *width) {
- int h;
- BuiltinFontWidth *p;
-
- h = hash(name);
- for (p = tab[h]; p; p = p->next) {
- if (!strcmp(p->name, name)) {
- *width = p->width;
- return gTrue;
- }
- }
- return gFalse;
-}
-
-int BuiltinFontWidths::hash(char *name) {
- char *p;
- unsigned int h;
-
- h = 0;
- for (p = name; *p; ++p) {
- h = 17 * h + (int)(*p & 0xff);
- }
- return (int)(h % size);
-}
diff --git a/Build/source/libs/xpdf/xpdf/BuiltinFont.h b/Build/source/libs/xpdf/xpdf/BuiltinFont.h
deleted file mode 100644
index 903ed19ec50..00000000000
--- a/Build/source/libs/xpdf/xpdf/BuiltinFont.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//========================================================================
-//
-// BuiltinFont.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef BUILTINFONT_H
-#define BUILTINFONT_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-
-struct BuiltinFont;
-class BuiltinFontWidths;
-
-//------------------------------------------------------------------------
-
-struct BuiltinFont {
- char *name;
- char **defaultBaseEnc;
- short ascent;
- short descent;
- short bbox[4];
- BuiltinFontWidths *widths;
-};
-
-//------------------------------------------------------------------------
-
-struct BuiltinFontWidth {
- char *name;
- Gushort width;
- BuiltinFontWidth *next;
-};
-
-class BuiltinFontWidths {
-public:
-
- BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA);
- ~BuiltinFontWidths();
- GBool getWidth(char *name, Gushort *width);
-
-private:
-
- int hash(char *name);
-
- BuiltinFontWidth **tab;
- int size;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/BuiltinFontTables.cc b/Build/source/libs/xpdf/xpdf/BuiltinFontTables.cc
deleted file mode 100644
index 9c362389c1b..00000000000
--- a/Build/source/libs/xpdf/xpdf/BuiltinFontTables.cc
+++ /dev/null
@@ -1,4284 +0,0 @@
-//========================================================================
-//
-// BuiltinFontTables.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-#include <stdlib.h>
-#include "FontEncodingTables.h"
-#include "BuiltinFontTables.h"
-
-static BuiltinFontWidth courierWidthsTab[] = {
- { "Ntilde", 600, NULL },
- { "rcaron", 600, NULL },
- { "kcommaaccent", 600, NULL },
- { "Ncommaaccent", 600, NULL },
- { "Zacute", 600, NULL },
- { "comma", 600, NULL },
- { "cedilla", 600, NULL },
- { "plusminus", 600, NULL },
- { "circumflex", 600, NULL },
- { "dotaccent", 600, NULL },
- { "edotaccent", 600, NULL },
- { "asciitilde", 600, NULL },
- { "colon", 600, NULL },
- { "onehalf", 600, NULL },
- { "dollar", 600, NULL },
- { "Lcaron", 600, NULL },
- { "ntilde", 600, NULL },
- { "Aogonek", 600, NULL },
- { "ncommaaccent", 600, NULL },
- { "minus", 600, NULL },
- { "Iogonek", 600, NULL },
- { "zacute", 600, NULL },
- { "yen", 600, NULL },
- { "space", 600, NULL },
- { "Omacron", 600, NULL },
- { "questiondown", 600, NULL },
- { "emdash", 600, NULL },
- { "Agrave", 600, NULL },
- { "three", 600, NULL },
- { "numbersign", 600, NULL },
- { "lcaron", 600, NULL },
- { "A", 600, NULL },
- { "B", 600, NULL },
- { "C", 600, NULL },
- { "aogonek", 600, NULL },
- { "D", 600, NULL },
- { "E", 600, NULL },
- { "onequarter", 600, NULL },
- { "F", 600, NULL },
- { "G", 600, NULL },
- { "H", 600, NULL },
- { "I", 600, NULL },
- { "J", 600, NULL },
- { "K", 600, NULL },
- { "iogonek", 600, NULL },
- { "L", 600, NULL },
- { "backslash", 600, NULL },
- { "periodcentered", 600, NULL },
- { "M", 600, NULL },
- { "N", 600, NULL },
- { "omacron", 600, NULL },
- { "Tcommaaccent", 600, NULL },
- { "O", 600, NULL },
- { "P", 600, NULL },
- { "Q", 600, NULL },
- { "Uhungarumlaut", 600, NULL },
- { "R", 600, NULL },
- { "Aacute", 600, NULL },
- { "caron", 600, NULL },
- { "S", 600, NULL },
- { "T", 600, NULL },
- { "U", 600, NULL },
- { "agrave", 600, NULL },
- { "V", 600, NULL },
- { "W", 600, NULL },
- { "equal", 600, NULL },
- { "question", 600, NULL },
- { "X", 600, NULL },
- { "Y", 600, NULL },
- { "Z", 600, NULL },
- { "four", 600, NULL },
- { "a", 600, NULL },
- { "Gcommaaccent", 600, NULL },
- { "b", 600, NULL },
- { "c", 600, NULL },
- { "d", 600, NULL },
- { "e", 600, NULL },
- { "f", 600, NULL },
- { "g", 600, NULL },
- { "bullet", 600, NULL },
- { "h", 600, NULL },
- { "i", 600, NULL },
- { "Oslash", 600, NULL },
- { "dagger", 600, NULL },
- { "j", 600, NULL },
- { "k", 600, NULL },
- { "l", 600, NULL },
- { "m", 600, NULL },
- { "n", 600, NULL },
- { "tcommaaccent", 600, NULL },
- { "o", 600, NULL },
- { "ordfeminine", 600, NULL },
- { "ring", 600, NULL },
- { "p", 600, NULL },
- { "q", 600, NULL },
- { "uhungarumlaut", 600, NULL },
- { "r", 600, NULL },
- { "twosuperior", 600, NULL },
- { "aacute", 600, NULL },
- { "s", 600, NULL },
- { "OE", 600, NULL },
- { "t", 600, NULL },
- { "divide", 600, NULL },
- { "u", 600, NULL },
- { "Ccaron", 600, NULL },
- { "v", 600, NULL },
- { "w", 600, NULL },
- { "x", 600, NULL },
- { "y", 600, NULL },
- { "z", 600, NULL },
- { "Gbreve", 600, NULL },
- { "commaaccent", 600, NULL },
- { "hungarumlaut", 600, NULL },
- { "Idotaccent", 600, NULL },
- { "Nacute", 600, NULL },
- { "quotedbl", 600, NULL },
- { "gcommaaccent", 600, NULL },
- { "mu", 600, NULL },
- { "greaterequal", 600, NULL },
- { "Scaron", 600, NULL },
- { "Lslash", 600, NULL },
- { "semicolon", 600, NULL },
- { "oslash", 600, NULL },
- { "lessequal", 600, NULL },
- { "lozenge", 600, NULL },
- { "parenright", 600, NULL },
- { "ccaron", 600, NULL },
- { "Ecircumflex", 600, NULL },
- { "gbreve", 600, NULL },
- { "trademark", 600, NULL },
- { "daggerdbl", 600, NULL },
- { "nacute", 600, NULL },
- { "macron", 600, NULL },
- { "Otilde", 600, NULL },
- { "Emacron", 600, NULL },
- { "ellipsis", 600, NULL },
- { "scaron", 600, NULL },
- { "AE", 600, NULL },
- { "Ucircumflex", 600, NULL },
- { "lslash", 600, NULL },
- { "quotedblleft", 600, NULL },
- { "hyphen", 600, NULL },
- { "guilsinglright", 600, NULL },
- { "quotesingle", 600, NULL },
- { "eight", 600, NULL },
- { "exclamdown", 600, NULL },
- { "endash", 600, NULL },
- { "oe", 600, NULL },
- { "Abreve", 600, NULL },
- { "Umacron", 600, NULL },
- { "ecircumflex", 600, NULL },
- { "Adieresis", 600, NULL },
- { "copyright", 600, NULL },
- { "Egrave", 600, NULL },
- { "slash", 600, NULL },
- { "Edieresis", 600, NULL },
- { "otilde", 600, NULL },
- { "Idieresis", 600, NULL },
- { "parenleft", 600, NULL },
- { "one", 600, NULL },
- { "emacron", 600, NULL },
- { "Odieresis", 600, NULL },
- { "ucircumflex", 600, NULL },
- { "bracketleft", 600, NULL },
- { "Ugrave", 600, NULL },
- { "quoteright", 600, NULL },
- { "Udieresis", 600, NULL },
- { "perthousand", 600, NULL },
- { "Ydieresis", 600, NULL },
- { "umacron", 600, NULL },
- { "abreve", 600, NULL },
- { "Eacute", 600, NULL },
- { "adieresis", 600, NULL },
- { "egrave", 600, NULL },
- { "edieresis", 600, NULL },
- { "idieresis", 600, NULL },
- { "Eth", 600, NULL },
- { "ae", 600, NULL },
- { "asterisk", 600, NULL },
- { "odieresis", 600, NULL },
- { "Uacute", 600, NULL },
- { "ugrave", 600, NULL },
- { "five", 600, NULL },
- { "nine", 600, NULL },
- { "udieresis", 600, NULL },
- { "Zcaron", 600, NULL },
- { "Scommaaccent", 600, NULL },
- { "threequarters", 600, NULL },
- { "guillemotright", 600, NULL },
- { "Ccedilla", 600, NULL },
- { "ydieresis", 600, NULL },
- { "tilde", 600, NULL },
- { "at", 600, NULL },
- { "eacute", 600, NULL },
- { "underscore", 600, NULL },
- { "Euro", 600, NULL },
- { "Dcroat", 600, NULL },
- { "zero", 600, NULL },
- { "multiply", 600, NULL },
- { "eth", 600, NULL },
- { "Scedilla", 600, NULL },
- { "Racute", 600, NULL },
- { "Ograve", 600, NULL },
- { "partialdiff", 600, NULL },
- { "uacute", 600, NULL },
- { "braceleft", 600, NULL },
- { "Thorn", 600, NULL },
- { "zcaron", 600, NULL },
- { "scommaaccent", 600, NULL },
- { "ccedilla", 600, NULL },
- { "Dcaron", 600, NULL },
- { "dcroat", 600, NULL },
- { "scedilla", 600, NULL },
- { "Oacute", 600, NULL },
- { "Ocircumflex", 600, NULL },
- { "ogonek", 600, NULL },
- { "ograve", 600, NULL },
- { "racute", 600, NULL },
- { "Tcaron", 600, NULL },
- { "Eogonek", 600, NULL },
- { "thorn", 600, NULL },
- { "degree", 600, NULL },
- { "registered", 600, NULL },
- { "radical", 600, NULL },
- { "Aring", 600, NULL },
- { "percent", 600, NULL },
- { "six", 600, NULL },
- { "paragraph", 600, NULL },
- { "dcaron", 600, NULL },
- { "Uogonek", 600, NULL },
- { "two", 600, NULL },
- { "summation", 600, NULL },
- { "Igrave", 600, NULL },
- { "Lacute", 600, NULL },
- { "ocircumflex", 600, NULL },
- { "oacute", 600, NULL },
- { "Uring", 600, NULL },
- { "Lcommaaccent", 600, NULL },
- { "tcaron", 600, NULL },
- { "eogonek", 600, NULL },
- { "Delta", 600, NULL },
- { "Ohungarumlaut", 600, NULL },
- { "asciicircum", 600, NULL },
- { "aring", 600, NULL },
- { "grave", 600, NULL },
- { "uogonek", 600, NULL },
- { "bracketright", 600, NULL },
- { "ampersand", 600, NULL },
- { "Iacute", 600, NULL },
- { "lacute", 600, NULL },
- { "igrave", 600, NULL },
- { "Ncaron", 600, NULL },
- { "plus", 600, NULL },
- { "uring", 600, NULL },
- { "quotesinglbase", 600, NULL },
- { "lcommaaccent", 600, NULL },
- { "Yacute", 600, NULL },
- { "ohungarumlaut", 600, NULL },
- { "threesuperior", 600, NULL },
- { "acute", 600, NULL },
- { "section", 600, NULL },
- { "dieresis", 600, NULL },
- { "quotedblbase", 600, NULL },
- { "iacute", 600, NULL },
- { "ncaron", 600, NULL },
- { "florin", 600, NULL },
- { "yacute", 600, NULL },
- { "Rcommaaccent", 600, NULL },
- { "fi", 600, NULL },
- { "fl", 600, NULL },
- { "Acircumflex", 600, NULL },
- { "Cacute", 600, NULL },
- { "Icircumflex", 600, NULL },
- { "guillemotleft", 600, NULL },
- { "germandbls", 600, NULL },
- { "seven", 600, NULL },
- { "Amacron", 600, NULL },
- { "Sacute", 600, NULL },
- { "ordmasculine", 600, NULL },
- { "dotlessi", 600, NULL },
- { "sterling", 600, NULL },
- { "notequal", 600, NULL },
- { "Imacron", 600, NULL },
- { "rcommaaccent", 600, NULL },
- { "Zdotaccent", 600, NULL },
- { "acircumflex", 600, NULL },
- { "cacute", 600, NULL },
- { "Ecaron", 600, NULL },
- { "braceright", 600, NULL },
- { "icircumflex", 600, NULL },
- { "quotedblright", 600, NULL },
- { "amacron", 600, NULL },
- { "sacute", 600, NULL },
- { "imacron", 600, NULL },
- { "cent", 600, NULL },
- { "currency", 600, NULL },
- { "logicalnot", 600, NULL },
- { "zdotaccent", 600, NULL },
- { "Atilde", 600, NULL },
- { "breve", 600, NULL },
- { "bar", 600, NULL },
- { "fraction", 600, NULL },
- { "less", 600, NULL },
- { "ecaron", 600, NULL },
- { "guilsinglleft", 600, NULL },
- { "exclam", 600, NULL },
- { "period", 600, NULL },
- { "Rcaron", 600, NULL },
- { "Kcommaaccent", 600, NULL },
- { "greater", 600, NULL },
- { "atilde", 600, NULL },
- { "brokenbar", 600, NULL },
- { "quoteleft", 600, NULL },
- { "Edotaccent", 600, NULL },
- { "onesuperior", 600, NULL }
-};
-
-static BuiltinFontWidth courierBoldWidthsTab[] = {
- { "Ntilde", 600, NULL },
- { "rcaron", 600, NULL },
- { "kcommaaccent", 600, NULL },
- { "Ncommaaccent", 600, NULL },
- { "Zacute", 600, NULL },
- { "comma", 600, NULL },
- { "cedilla", 600, NULL },
- { "plusminus", 600, NULL },
- { "circumflex", 600, NULL },
- { "dotaccent", 600, NULL },
- { "edotaccent", 600, NULL },
- { "asciitilde", 600, NULL },
- { "colon", 600, NULL },
- { "onehalf", 600, NULL },
- { "dollar", 600, NULL },
- { "Lcaron", 600, NULL },
- { "ntilde", 600, NULL },
- { "Aogonek", 600, NULL },
- { "ncommaaccent", 600, NULL },
- { "minus", 600, NULL },
- { "Iogonek", 600, NULL },
- { "zacute", 600, NULL },
- { "yen", 600, NULL },
- { "space", 600, NULL },
- { "Omacron", 600, NULL },
- { "questiondown", 600, NULL },
- { "emdash", 600, NULL },
- { "Agrave", 600, NULL },
- { "three", 600, NULL },
- { "numbersign", 600, NULL },
- { "lcaron", 600, NULL },
- { "A", 600, NULL },
- { "B", 600, NULL },
- { "C", 600, NULL },
- { "aogonek", 600, NULL },
- { "D", 600, NULL },
- { "E", 600, NULL },
- { "onequarter", 600, NULL },
- { "F", 600, NULL },
- { "G", 600, NULL },
- { "H", 600, NULL },
- { "I", 600, NULL },
- { "J", 600, NULL },
- { "K", 600, NULL },
- { "iogonek", 600, NULL },
- { "backslash", 600, NULL },
- { "L", 600, NULL },
- { "periodcentered", 600, NULL },
- { "M", 600, NULL },
- { "N", 600, NULL },
- { "omacron", 600, NULL },
- { "Tcommaaccent", 600, NULL },
- { "O", 600, NULL },
- { "P", 600, NULL },
- { "Q", 600, NULL },
- { "Uhungarumlaut", 600, NULL },
- { "R", 600, NULL },
- { "Aacute", 600, NULL },
- { "caron", 600, NULL },
- { "S", 600, NULL },
- { "T", 600, NULL },
- { "U", 600, NULL },
- { "agrave", 600, NULL },
- { "V", 600, NULL },
- { "W", 600, NULL },
- { "X", 600, NULL },
- { "question", 600, NULL },
- { "equal", 600, NULL },
- { "Y", 600, NULL },
- { "Z", 600, NULL },
- { "four", 600, NULL },
- { "a", 600, NULL },
- { "Gcommaaccent", 600, NULL },
- { "b", 600, NULL },
- { "c", 600, NULL },
- { "d", 600, NULL },
- { "e", 600, NULL },
- { "f", 600, NULL },
- { "g", 600, NULL },
- { "bullet", 600, NULL },
- { "h", 600, NULL },
- { "i", 600, NULL },
- { "Oslash", 600, NULL },
- { "dagger", 600, NULL },
- { "j", 600, NULL },
- { "k", 600, NULL },
- { "l", 600, NULL },
- { "m", 600, NULL },
- { "n", 600, NULL },
- { "tcommaaccent", 600, NULL },
- { "o", 600, NULL },
- { "ordfeminine", 600, NULL },
- { "ring", 600, NULL },
- { "p", 600, NULL },
- { "q", 600, NULL },
- { "uhungarumlaut", 600, NULL },
- { "r", 600, NULL },
- { "twosuperior", 600, NULL },
- { "aacute", 600, NULL },
- { "s", 600, NULL },
- { "OE", 600, NULL },
- { "t", 600, NULL },
- { "divide", 600, NULL },
- { "u", 600, NULL },
- { "Ccaron", 600, NULL },
- { "v", 600, NULL },
- { "w", 600, NULL },
- { "x", 600, NULL },
- { "y", 600, NULL },
- { "z", 600, NULL },
- { "Gbreve", 600, NULL },
- { "commaaccent", 600, NULL },
- { "hungarumlaut", 600, NULL },
- { "Idotaccent", 600, NULL },
- { "Nacute", 600, NULL },
- { "quotedbl", 600, NULL },
- { "gcommaaccent", 600, NULL },
- { "mu", 600, NULL },
- { "greaterequal", 600, NULL },
- { "Scaron", 600, NULL },
- { "Lslash", 600, NULL },
- { "semicolon", 600, NULL },
- { "oslash", 600, NULL },
- { "lessequal", 600, NULL },
- { "lozenge", 600, NULL },
- { "parenright", 600, NULL },
- { "ccaron", 600, NULL },
- { "Ecircumflex", 600, NULL },
- { "gbreve", 600, NULL },
- { "trademark", 600, NULL },
- { "daggerdbl", 600, NULL },
- { "nacute", 600, NULL },
- { "macron", 600, NULL },
- { "Otilde", 600, NULL },
- { "Emacron", 600, NULL },
- { "ellipsis", 600, NULL },
- { "scaron", 600, NULL },
- { "AE", 600, NULL },
- { "Ucircumflex", 600, NULL },
- { "lslash", 600, NULL },
- { "quotedblleft", 600, NULL },
- { "guilsinglright", 600, NULL },
- { "hyphen", 600, NULL },
- { "quotesingle", 600, NULL },
- { "eight", 600, NULL },
- { "exclamdown", 600, NULL },
- { "endash", 600, NULL },
- { "oe", 600, NULL },
- { "Abreve", 600, NULL },
- { "Umacron", 600, NULL },
- { "ecircumflex", 600, NULL },
- { "Adieresis", 600, NULL },
- { "copyright", 600, NULL },
- { "Egrave", 600, NULL },
- { "slash", 600, NULL },
- { "Edieresis", 600, NULL },
- { "otilde", 600, NULL },
- { "Idieresis", 600, NULL },
- { "parenleft", 600, NULL },
- { "one", 600, NULL },
- { "emacron", 600, NULL },
- { "Odieresis", 600, NULL },
- { "ucircumflex", 600, NULL },
- { "bracketleft", 600, NULL },
- { "Ugrave", 600, NULL },
- { "quoteright", 600, NULL },
- { "Udieresis", 600, NULL },
- { "perthousand", 600, NULL },
- { "Ydieresis", 600, NULL },
- { "umacron", 600, NULL },
- { "abreve", 600, NULL },
- { "Eacute", 600, NULL },
- { "adieresis", 600, NULL },
- { "egrave", 600, NULL },
- { "edieresis", 600, NULL },
- { "idieresis", 600, NULL },
- { "Eth", 600, NULL },
- { "ae", 600, NULL },
- { "asterisk", 600, NULL },
- { "odieresis", 600, NULL },
- { "Uacute", 600, NULL },
- { "ugrave", 600, NULL },
- { "nine", 600, NULL },
- { "five", 600, NULL },
- { "udieresis", 600, NULL },
- { "Zcaron", 600, NULL },
- { "Scommaaccent", 600, NULL },
- { "threequarters", 600, NULL },
- { "guillemotright", 600, NULL },
- { "Ccedilla", 600, NULL },
- { "ydieresis", 600, NULL },
- { "tilde", 600, NULL },
- { "at", 600, NULL },
- { "eacute", 600, NULL },
- { "underscore", 600, NULL },
- { "Euro", 600, NULL },
- { "Dcroat", 600, NULL },
- { "multiply", 600, NULL },
- { "zero", 600, NULL },
- { "eth", 600, NULL },
- { "Scedilla", 600, NULL },
- { "Ograve", 600, NULL },
- { "Racute", 600, NULL },
- { "partialdiff", 600, NULL },
- { "uacute", 600, NULL },
- { "braceleft", 600, NULL },
- { "Thorn", 600, NULL },
- { "zcaron", 600, NULL },
- { "scommaaccent", 600, NULL },
- { "ccedilla", 600, NULL },
- { "Dcaron", 600, NULL },
- { "dcroat", 600, NULL },
- { "Ocircumflex", 600, NULL },
- { "Oacute", 600, NULL },
- { "scedilla", 600, NULL },
- { "ogonek", 600, NULL },
- { "ograve", 600, NULL },
- { "racute", 600, NULL },
- { "Tcaron", 600, NULL },
- { "Eogonek", 600, NULL },
- { "thorn", 600, NULL },
- { "degree", 600, NULL },
- { "registered", 600, NULL },
- { "radical", 600, NULL },
- { "Aring", 600, NULL },
- { "percent", 600, NULL },
- { "six", 600, NULL },
- { "paragraph", 600, NULL },
- { "dcaron", 600, NULL },
- { "Uogonek", 600, NULL },
- { "two", 600, NULL },
- { "summation", 600, NULL },
- { "Igrave", 600, NULL },
- { "Lacute", 600, NULL },
- { "ocircumflex", 600, NULL },
- { "oacute", 600, NULL },
- { "Uring", 600, NULL },
- { "Lcommaaccent", 600, NULL },
- { "tcaron", 600, NULL },
- { "eogonek", 600, NULL },
- { "Delta", 600, NULL },
- { "Ohungarumlaut", 600, NULL },
- { "asciicircum", 600, NULL },
- { "aring", 600, NULL },
- { "grave", 600, NULL },
- { "uogonek", 600, NULL },
- { "bracketright", 600, NULL },
- { "Iacute", 600, NULL },
- { "ampersand", 600, NULL },
- { "igrave", 600, NULL },
- { "lacute", 600, NULL },
- { "Ncaron", 600, NULL },
- { "plus", 600, NULL },
- { "uring", 600, NULL },
- { "quotesinglbase", 600, NULL },
- { "lcommaaccent", 600, NULL },
- { "Yacute", 600, NULL },
- { "ohungarumlaut", 600, NULL },
- { "threesuperior", 600, NULL },
- { "acute", 600, NULL },
- { "section", 600, NULL },
- { "dieresis", 600, NULL },
- { "iacute", 600, NULL },
- { "quotedblbase", 600, NULL },
- { "ncaron", 600, NULL },
- { "florin", 600, NULL },
- { "yacute", 600, NULL },
- { "Rcommaaccent", 600, NULL },
- { "fi", 600, NULL },
- { "fl", 600, NULL },
- { "Acircumflex", 600, NULL },
- { "Cacute", 600, NULL },
- { "Icircumflex", 600, NULL },
- { "guillemotleft", 600, NULL },
- { "germandbls", 600, NULL },
- { "Amacron", 600, NULL },
- { "seven", 600, NULL },
- { "Sacute", 600, NULL },
- { "ordmasculine", 600, NULL },
- { "dotlessi", 600, NULL },
- { "sterling", 600, NULL },
- { "notequal", 600, NULL },
- { "Imacron", 600, NULL },
- { "rcommaaccent", 600, NULL },
- { "Zdotaccent", 600, NULL },
- { "acircumflex", 600, NULL },
- { "cacute", 600, NULL },
- { "Ecaron", 600, NULL },
- { "icircumflex", 600, NULL },
- { "braceright", 600, NULL },
- { "quotedblright", 600, NULL },
- { "amacron", 600, NULL },
- { "sacute", 600, NULL },
- { "imacron", 600, NULL },
- { "cent", 600, NULL },
- { "currency", 600, NULL },
- { "logicalnot", 600, NULL },
- { "zdotaccent", 600, NULL },
- { "Atilde", 600, NULL },
- { "breve", 600, NULL },
- { "bar", 600, NULL },
- { "fraction", 600, NULL },
- { "less", 600, NULL },
- { "ecaron", 600, NULL },
- { "guilsinglleft", 600, NULL },
- { "exclam", 600, NULL },
- { "period", 600, NULL },
- { "Rcaron", 600, NULL },
- { "Kcommaaccent", 600, NULL },
- { "greater", 600, NULL },
- { "atilde", 600, NULL },
- { "brokenbar", 600, NULL },
- { "quoteleft", 600, NULL },
- { "Edotaccent", 600, NULL },
- { "onesuperior", 600, NULL }
-};
-
-static BuiltinFontWidth courierBoldObliqueWidthsTab[] = {
- { "Ntilde", 600, NULL },
- { "rcaron", 600, NULL },
- { "kcommaaccent", 600, NULL },
- { "Ncommaaccent", 600, NULL },
- { "Zacute", 600, NULL },
- { "comma", 600, NULL },
- { "cedilla", 600, NULL },
- { "plusminus", 600, NULL },
- { "circumflex", 600, NULL },
- { "dotaccent", 600, NULL },
- { "edotaccent", 600, NULL },
- { "asciitilde", 600, NULL },
- { "colon", 600, NULL },
- { "onehalf", 600, NULL },
- { "dollar", 600, NULL },
- { "Lcaron", 600, NULL },
- { "ntilde", 600, NULL },
- { "Aogonek", 600, NULL },
- { "ncommaaccent", 600, NULL },
- { "minus", 600, NULL },
- { "Iogonek", 600, NULL },
- { "zacute", 600, NULL },
- { "yen", 600, NULL },
- { "space", 600, NULL },
- { "Omacron", 600, NULL },
- { "questiondown", 600, NULL },
- { "emdash", 600, NULL },
- { "Agrave", 600, NULL },
- { "three", 600, NULL },
- { "numbersign", 600, NULL },
- { "lcaron", 600, NULL },
- { "A", 600, NULL },
- { "B", 600, NULL },
- { "C", 600, NULL },
- { "aogonek", 600, NULL },
- { "D", 600, NULL },
- { "E", 600, NULL },
- { "onequarter", 600, NULL },
- { "F", 600, NULL },
- { "G", 600, NULL },
- { "H", 600, NULL },
- { "I", 600, NULL },
- { "J", 600, NULL },
- { "K", 600, NULL },
- { "iogonek", 600, NULL },
- { "backslash", 600, NULL },
- { "L", 600, NULL },
- { "periodcentered", 600, NULL },
- { "M", 600, NULL },
- { "N", 600, NULL },
- { "omacron", 600, NULL },
- { "Tcommaaccent", 600, NULL },
- { "O", 600, NULL },
- { "P", 600, NULL },
- { "Q", 600, NULL },
- { "Uhungarumlaut", 600, NULL },
- { "R", 600, NULL },
- { "Aacute", 600, NULL },
- { "caron", 600, NULL },
- { "S", 600, NULL },
- { "T", 600, NULL },
- { "U", 600, NULL },
- { "agrave", 600, NULL },
- { "V", 600, NULL },
- { "W", 600, NULL },
- { "X", 600, NULL },
- { "question", 600, NULL },
- { "equal", 600, NULL },
- { "Y", 600, NULL },
- { "Z", 600, NULL },
- { "four", 600, NULL },
- { "a", 600, NULL },
- { "Gcommaaccent", 600, NULL },
- { "b", 600, NULL },
- { "c", 600, NULL },
- { "d", 600, NULL },
- { "e", 600, NULL },
- { "f", 600, NULL },
- { "g", 600, NULL },
- { "bullet", 600, NULL },
- { "h", 600, NULL },
- { "i", 600, NULL },
- { "Oslash", 600, NULL },
- { "dagger", 600, NULL },
- { "j", 600, NULL },
- { "k", 600, NULL },
- { "l", 600, NULL },
- { "m", 600, NULL },
- { "n", 600, NULL },
- { "tcommaaccent", 600, NULL },
- { "o", 600, NULL },
- { "ordfeminine", 600, NULL },
- { "ring", 600, NULL },
- { "p", 600, NULL },
- { "q", 600, NULL },
- { "uhungarumlaut", 600, NULL },
- { "r", 600, NULL },
- { "twosuperior", 600, NULL },
- { "aacute", 600, NULL },
- { "s", 600, NULL },
- { "OE", 600, NULL },
- { "t", 600, NULL },
- { "divide", 600, NULL },
- { "u", 600, NULL },
- { "Ccaron", 600, NULL },
- { "v", 600, NULL },
- { "w", 600, NULL },
- { "x", 600, NULL },
- { "y", 600, NULL },
- { "z", 600, NULL },
- { "Gbreve", 600, NULL },
- { "commaaccent", 600, NULL },
- { "hungarumlaut", 600, NULL },
- { "Idotaccent", 600, NULL },
- { "Nacute", 600, NULL },
- { "quotedbl", 600, NULL },
- { "gcommaaccent", 600, NULL },
- { "mu", 600, NULL },
- { "greaterequal", 600, NULL },
- { "Scaron", 600, NULL },
- { "Lslash", 600, NULL },
- { "semicolon", 600, NULL },
- { "oslash", 600, NULL },
- { "lessequal", 600, NULL },
- { "lozenge", 600, NULL },
- { "parenright", 600, NULL },
- { "ccaron", 600, NULL },
- { "Ecircumflex", 600, NULL },
- { "gbreve", 600, NULL },
- { "trademark", 600, NULL },
- { "daggerdbl", 600, NULL },
- { "nacute", 600, NULL },
- { "macron", 600, NULL },
- { "Otilde", 600, NULL },
- { "Emacron", 600, NULL },
- { "ellipsis", 600, NULL },
- { "scaron", 600, NULL },
- { "AE", 600, NULL },
- { "Ucircumflex", 600, NULL },
- { "lslash", 600, NULL },
- { "quotedblleft", 600, NULL },
- { "guilsinglright", 600, NULL },
- { "hyphen", 600, NULL },
- { "quotesingle", 600, NULL },
- { "eight", 600, NULL },
- { "exclamdown", 600, NULL },
- { "endash", 600, NULL },
- { "oe", 600, NULL },
- { "Abreve", 600, NULL },
- { "Umacron", 600, NULL },
- { "ecircumflex", 600, NULL },
- { "Adieresis", 600, NULL },
- { "copyright", 600, NULL },
- { "Egrave", 600, NULL },
- { "slash", 600, NULL },
- { "Edieresis", 600, NULL },
- { "otilde", 600, NULL },
- { "Idieresis", 600, NULL },
- { "parenleft", 600, NULL },
- { "one", 600, NULL },
- { "emacron", 600, NULL },
- { "Odieresis", 600, NULL },
- { "ucircumflex", 600, NULL },
- { "bracketleft", 600, NULL },
- { "Ugrave", 600, NULL },
- { "quoteright", 600, NULL },
- { "Udieresis", 600, NULL },
- { "perthousand", 600, NULL },
- { "Ydieresis", 600, NULL },
- { "umacron", 600, NULL },
- { "abreve", 600, NULL },
- { "Eacute", 600, NULL },
- { "adieresis", 600, NULL },
- { "egrave", 600, NULL },
- { "edieresis", 600, NULL },
- { "idieresis", 600, NULL },
- { "Eth", 600, NULL },
- { "ae", 600, NULL },
- { "asterisk", 600, NULL },
- { "odieresis", 600, NULL },
- { "Uacute", 600, NULL },
- { "ugrave", 600, NULL },
- { "nine", 600, NULL },
- { "five", 600, NULL },
- { "udieresis", 600, NULL },
- { "Zcaron", 600, NULL },
- { "Scommaaccent", 600, NULL },
- { "threequarters", 600, NULL },
- { "guillemotright", 600, NULL },
- { "Ccedilla", 600, NULL },
- { "ydieresis", 600, NULL },
- { "tilde", 600, NULL },
- { "at", 600, NULL },
- { "eacute", 600, NULL },
- { "underscore", 600, NULL },
- { "Euro", 600, NULL },
- { "Dcroat", 600, NULL },
- { "multiply", 600, NULL },
- { "zero", 600, NULL },
- { "eth", 600, NULL },
- { "Scedilla", 600, NULL },
- { "Ograve", 600, NULL },
- { "Racute", 600, NULL },
- { "partialdiff", 600, NULL },
- { "uacute", 600, NULL },
- { "braceleft", 600, NULL },
- { "Thorn", 600, NULL },
- { "zcaron", 600, NULL },
- { "scommaaccent", 600, NULL },
- { "ccedilla", 600, NULL },
- { "Dcaron", 600, NULL },
- { "dcroat", 600, NULL },
- { "Ocircumflex", 600, NULL },
- { "Oacute", 600, NULL },
- { "scedilla", 600, NULL },
- { "ogonek", 600, NULL },
- { "ograve", 600, NULL },
- { "racute", 600, NULL },
- { "Tcaron", 600, NULL },
- { "Eogonek", 600, NULL },
- { "thorn", 600, NULL },
- { "degree", 600, NULL },
- { "registered", 600, NULL },
- { "radical", 600, NULL },
- { "Aring", 600, NULL },
- { "percent", 600, NULL },
- { "six", 600, NULL },
- { "paragraph", 600, NULL },
- { "dcaron", 600, NULL },
- { "Uogonek", 600, NULL },
- { "two", 600, NULL },
- { "summation", 600, NULL },
- { "Igrave", 600, NULL },
- { "Lacute", 600, NULL },
- { "ocircumflex", 600, NULL },
- { "oacute", 600, NULL },
- { "Uring", 600, NULL },
- { "Lcommaaccent", 600, NULL },
- { "tcaron", 600, NULL },
- { "eogonek", 600, NULL },
- { "Delta", 600, NULL },
- { "Ohungarumlaut", 600, NULL },
- { "asciicircum", 600, NULL },
- { "aring", 600, NULL },
- { "grave", 600, NULL },
- { "uogonek", 600, NULL },
- { "bracketright", 600, NULL },
- { "Iacute", 600, NULL },
- { "ampersand", 600, NULL },
- { "igrave", 600, NULL },
- { "lacute", 600, NULL },
- { "Ncaron", 600, NULL },
- { "plus", 600, NULL },
- { "uring", 600, NULL },
- { "quotesinglbase", 600, NULL },
- { "lcommaaccent", 600, NULL },
- { "Yacute", 600, NULL },
- { "ohungarumlaut", 600, NULL },
- { "threesuperior", 600, NULL },
- { "acute", 600, NULL },
- { "section", 600, NULL },
- { "dieresis", 600, NULL },
- { "iacute", 600, NULL },
- { "quotedblbase", 600, NULL },
- { "ncaron", 600, NULL },
- { "florin", 600, NULL },
- { "yacute", 600, NULL },
- { "Rcommaaccent", 600, NULL },
- { "fi", 600, NULL },
- { "fl", 600, NULL },
- { "Acircumflex", 600, NULL },
- { "Cacute", 600, NULL },
- { "Icircumflex", 600, NULL },
- { "guillemotleft", 600, NULL },
- { "germandbls", 600, NULL },
- { "Amacron", 600, NULL },
- { "seven", 600, NULL },
- { "Sacute", 600, NULL },
- { "ordmasculine", 600, NULL },
- { "dotlessi", 600, NULL },
- { "sterling", 600, NULL },
- { "notequal", 600, NULL },
- { "Imacron", 600, NULL },
- { "rcommaaccent", 600, NULL },
- { "Zdotaccent", 600, NULL },
- { "acircumflex", 600, NULL },
- { "cacute", 600, NULL },
- { "Ecaron", 600, NULL },
- { "icircumflex", 600, NULL },
- { "braceright", 600, NULL },
- { "quotedblright", 600, NULL },
- { "amacron", 600, NULL },
- { "sacute", 600, NULL },
- { "imacron", 600, NULL },
- { "cent", 600, NULL },
- { "currency", 600, NULL },
- { "logicalnot", 600, NULL },
- { "zdotaccent", 600, NULL },
- { "Atilde", 600, NULL },
- { "breve", 600, NULL },
- { "bar", 600, NULL },
- { "fraction", 600, NULL },
- { "less", 600, NULL },
- { "ecaron", 600, NULL },
- { "guilsinglleft", 600, NULL },
- { "exclam", 600, NULL },
- { "period", 600, NULL },
- { "Rcaron", 600, NULL },
- { "Kcommaaccent", 600, NULL },
- { "greater", 600, NULL },
- { "atilde", 600, NULL },
- { "brokenbar", 600, NULL },
- { "quoteleft", 600, NULL },
- { "Edotaccent", 600, NULL },
- { "onesuperior", 600, NULL }
-};
-
-static BuiltinFontWidth courierObliqueWidthsTab[] = {
- { "Ntilde", 600, NULL },
- { "rcaron", 600, NULL },
- { "kcommaaccent", 600, NULL },
- { "Ncommaaccent", 600, NULL },
- { "Zacute", 600, NULL },
- { "comma", 600, NULL },
- { "cedilla", 600, NULL },
- { "plusminus", 600, NULL },
- { "circumflex", 600, NULL },
- { "dotaccent", 600, NULL },
- { "edotaccent", 600, NULL },
- { "asciitilde", 600, NULL },
- { "colon", 600, NULL },
- { "onehalf", 600, NULL },
- { "dollar", 600, NULL },
- { "Lcaron", 600, NULL },
- { "ntilde", 600, NULL },
- { "Aogonek", 600, NULL },
- { "ncommaaccent", 600, NULL },
- { "minus", 600, NULL },
- { "Iogonek", 600, NULL },
- { "zacute", 600, NULL },
- { "yen", 600, NULL },
- { "space", 600, NULL },
- { "Omacron", 600, NULL },
- { "questiondown", 600, NULL },
- { "emdash", 600, NULL },
- { "Agrave", 600, NULL },
- { "three", 600, NULL },
- { "numbersign", 600, NULL },
- { "lcaron", 600, NULL },
- { "A", 600, NULL },
- { "B", 600, NULL },
- { "C", 600, NULL },
- { "aogonek", 600, NULL },
- { "D", 600, NULL },
- { "E", 600, NULL },
- { "onequarter", 600, NULL },
- { "F", 600, NULL },
- { "G", 600, NULL },
- { "H", 600, NULL },
- { "I", 600, NULL },
- { "J", 600, NULL },
- { "K", 600, NULL },
- { "iogonek", 600, NULL },
- { "backslash", 600, NULL },
- { "L", 600, NULL },
- { "periodcentered", 600, NULL },
- { "M", 600, NULL },
- { "N", 600, NULL },
- { "omacron", 600, NULL },
- { "Tcommaaccent", 600, NULL },
- { "O", 600, NULL },
- { "P", 600, NULL },
- { "Q", 600, NULL },
- { "Uhungarumlaut", 600, NULL },
- { "R", 600, NULL },
- { "Aacute", 600, NULL },
- { "caron", 600, NULL },
- { "S", 600, NULL },
- { "T", 600, NULL },
- { "U", 600, NULL },
- { "agrave", 600, NULL },
- { "V", 600, NULL },
- { "W", 600, NULL },
- { "X", 600, NULL },
- { "question", 600, NULL },
- { "equal", 600, NULL },
- { "Y", 600, NULL },
- { "Z", 600, NULL },
- { "four", 600, NULL },
- { "a", 600, NULL },
- { "Gcommaaccent", 600, NULL },
- { "b", 600, NULL },
- { "c", 600, NULL },
- { "d", 600, NULL },
- { "e", 600, NULL },
- { "f", 600, NULL },
- { "g", 600, NULL },
- { "bullet", 600, NULL },
- { "h", 600, NULL },
- { "i", 600, NULL },
- { "Oslash", 600, NULL },
- { "dagger", 600, NULL },
- { "j", 600, NULL },
- { "k", 600, NULL },
- { "l", 600, NULL },
- { "m", 600, NULL },
- { "n", 600, NULL },
- { "tcommaaccent", 600, NULL },
- { "o", 600, NULL },
- { "ordfeminine", 600, NULL },
- { "ring", 600, NULL },
- { "p", 600, NULL },
- { "q", 600, NULL },
- { "uhungarumlaut", 600, NULL },
- { "r", 600, NULL },
- { "twosuperior", 600, NULL },
- { "aacute", 600, NULL },
- { "s", 600, NULL },
- { "OE", 600, NULL },
- { "t", 600, NULL },
- { "divide", 600, NULL },
- { "u", 600, NULL },
- { "Ccaron", 600, NULL },
- { "v", 600, NULL },
- { "w", 600, NULL },
- { "x", 600, NULL },
- { "y", 600, NULL },
- { "z", 600, NULL },
- { "Gbreve", 600, NULL },
- { "commaaccent", 600, NULL },
- { "hungarumlaut", 600, NULL },
- { "Idotaccent", 600, NULL },
- { "Nacute", 600, NULL },
- { "quotedbl", 600, NULL },
- { "gcommaaccent", 600, NULL },
- { "mu", 600, NULL },
- { "greaterequal", 600, NULL },
- { "Scaron", 600, NULL },
- { "Lslash", 600, NULL },
- { "semicolon", 600, NULL },
- { "oslash", 600, NULL },
- { "lessequal", 600, NULL },
- { "lozenge", 600, NULL },
- { "parenright", 600, NULL },
- { "ccaron", 600, NULL },
- { "Ecircumflex", 600, NULL },
- { "gbreve", 600, NULL },
- { "trademark", 600, NULL },
- { "daggerdbl", 600, NULL },
- { "nacute", 600, NULL },
- { "macron", 600, NULL },
- { "Otilde", 600, NULL },
- { "Emacron", 600, NULL },
- { "ellipsis", 600, NULL },
- { "scaron", 600, NULL },
- { "AE", 600, NULL },
- { "Ucircumflex", 600, NULL },
- { "lslash", 600, NULL },
- { "quotedblleft", 600, NULL },
- { "guilsinglright", 600, NULL },
- { "hyphen", 600, NULL },
- { "quotesingle", 600, NULL },
- { "eight", 600, NULL },
- { "exclamdown", 600, NULL },
- { "endash", 600, NULL },
- { "oe", 600, NULL },
- { "Abreve", 600, NULL },
- { "Umacron", 600, NULL },
- { "ecircumflex", 600, NULL },
- { "Adieresis", 600, NULL },
- { "copyright", 600, NULL },
- { "Egrave", 600, NULL },
- { "slash", 600, NULL },
- { "Edieresis", 600, NULL },
- { "otilde", 600, NULL },
- { "Idieresis", 600, NULL },
- { "parenleft", 600, NULL },
- { "one", 600, NULL },
- { "emacron", 600, NULL },
- { "Odieresis", 600, NULL },
- { "ucircumflex", 600, NULL },
- { "bracketleft", 600, NULL },
- { "Ugrave", 600, NULL },
- { "quoteright", 600, NULL },
- { "Udieresis", 600, NULL },
- { "perthousand", 600, NULL },
- { "Ydieresis", 600, NULL },
- { "umacron", 600, NULL },
- { "abreve", 600, NULL },
- { "Eacute", 600, NULL },
- { "adieresis", 600, NULL },
- { "egrave", 600, NULL },
- { "edieresis", 600, NULL },
- { "idieresis", 600, NULL },
- { "Eth", 600, NULL },
- { "ae", 600, NULL },
- { "asterisk", 600, NULL },
- { "odieresis", 600, NULL },
- { "Uacute", 600, NULL },
- { "ugrave", 600, NULL },
- { "nine", 600, NULL },
- { "five", 600, NULL },
- { "udieresis", 600, NULL },
- { "Zcaron", 600, NULL },
- { "Scommaaccent", 600, NULL },
- { "threequarters", 600, NULL },
- { "guillemotright", 600, NULL },
- { "Ccedilla", 600, NULL },
- { "ydieresis", 600, NULL },
- { "tilde", 600, NULL },
- { "at", 600, NULL },
- { "eacute", 600, NULL },
- { "underscore", 600, NULL },
- { "Euro", 600, NULL },
- { "Dcroat", 600, NULL },
- { "multiply", 600, NULL },
- { "zero", 600, NULL },
- { "eth", 600, NULL },
- { "Scedilla", 600, NULL },
- { "Ograve", 600, NULL },
- { "Racute", 600, NULL },
- { "partialdiff", 600, NULL },
- { "uacute", 600, NULL },
- { "braceleft", 600, NULL },
- { "Thorn", 600, NULL },
- { "zcaron", 600, NULL },
- { "scommaaccent", 600, NULL },
- { "ccedilla", 600, NULL },
- { "Dcaron", 600, NULL },
- { "dcroat", 600, NULL },
- { "Ocircumflex", 600, NULL },
- { "Oacute", 600, NULL },
- { "scedilla", 600, NULL },
- { "ogonek", 600, NULL },
- { "ograve", 600, NULL },
- { "racute", 600, NULL },
- { "Tcaron", 600, NULL },
- { "Eogonek", 600, NULL },
- { "thorn", 600, NULL },
- { "degree", 600, NULL },
- { "registered", 600, NULL },
- { "radical", 600, NULL },
- { "Aring", 600, NULL },
- { "percent", 600, NULL },
- { "six", 600, NULL },
- { "paragraph", 600, NULL },
- { "dcaron", 600, NULL },
- { "Uogonek", 600, NULL },
- { "two", 600, NULL },
- { "summation", 600, NULL },
- { "Igrave", 600, NULL },
- { "Lacute", 600, NULL },
- { "ocircumflex", 600, NULL },
- { "oacute", 600, NULL },
- { "Uring", 600, NULL },
- { "Lcommaaccent", 600, NULL },
- { "tcaron", 600, NULL },
- { "eogonek", 600, NULL },
- { "Delta", 600, NULL },
- { "Ohungarumlaut", 600, NULL },
- { "asciicircum", 600, NULL },
- { "aring", 600, NULL },
- { "grave", 600, NULL },
- { "uogonek", 600, NULL },
- { "bracketright", 600, NULL },
- { "Iacute", 600, NULL },
- { "ampersand", 600, NULL },
- { "igrave", 600, NULL },
- { "lacute", 600, NULL },
- { "Ncaron", 600, NULL },
- { "plus", 600, NULL },
- { "uring", 600, NULL },
- { "quotesinglbase", 600, NULL },
- { "lcommaaccent", 600, NULL },
- { "Yacute", 600, NULL },
- { "ohungarumlaut", 600, NULL },
- { "threesuperior", 600, NULL },
- { "acute", 600, NULL },
- { "section", 600, NULL },
- { "dieresis", 600, NULL },
- { "iacute", 600, NULL },
- { "quotedblbase", 600, NULL },
- { "ncaron", 600, NULL },
- { "florin", 600, NULL },
- { "yacute", 600, NULL },
- { "Rcommaaccent", 600, NULL },
- { "fi", 600, NULL },
- { "fl", 600, NULL },
- { "Acircumflex", 600, NULL },
- { "Cacute", 600, NULL },
- { "Icircumflex", 600, NULL },
- { "guillemotleft", 600, NULL },
- { "germandbls", 600, NULL },
- { "Amacron", 600, NULL },
- { "seven", 600, NULL },
- { "Sacute", 600, NULL },
- { "ordmasculine", 600, NULL },
- { "dotlessi", 600, NULL },
- { "sterling", 600, NULL },
- { "notequal", 600, NULL },
- { "Imacron", 600, NULL },
- { "rcommaaccent", 600, NULL },
- { "Zdotaccent", 600, NULL },
- { "acircumflex", 600, NULL },
- { "cacute", 600, NULL },
- { "Ecaron", 600, NULL },
- { "icircumflex", 600, NULL },
- { "braceright", 600, NULL },
- { "quotedblright", 600, NULL },
- { "amacron", 600, NULL },
- { "sacute", 600, NULL },
- { "imacron", 600, NULL },
- { "cent", 600, NULL },
- { "currency", 600, NULL },
- { "logicalnot", 600, NULL },
- { "zdotaccent", 600, NULL },
- { "Atilde", 600, NULL },
- { "breve", 600, NULL },
- { "bar", 600, NULL },
- { "fraction", 600, NULL },
- { "less", 600, NULL },
- { "ecaron", 600, NULL },
- { "guilsinglleft", 600, NULL },
- { "exclam", 600, NULL },
- { "period", 600, NULL },
- { "Rcaron", 600, NULL },
- { "Kcommaaccent", 600, NULL },
- { "greater", 600, NULL },
- { "atilde", 600, NULL },
- { "brokenbar", 600, NULL },
- { "quoteleft", 600, NULL },
- { "Edotaccent", 600, NULL },
- { "onesuperior", 600, NULL }
-};
-
-static BuiltinFontWidth helveticaWidthsTab[] = {
- { "Ntilde", 722, NULL },
- { "rcaron", 333, NULL },
- { "kcommaaccent", 500, NULL },
- { "Ncommaaccent", 722, NULL },
- { "Zacute", 611, NULL },
- { "comma", 278, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 584, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 556, NULL },
- { "asciitilde", 584, NULL },
- { "colon", 278, NULL },
- { "onehalf", 834, NULL },
- { "dollar", 556, NULL },
- { "Lcaron", 556, NULL },
- { "ntilde", 556, NULL },
- { "Aogonek", 667, NULL },
- { "ncommaaccent", 556, NULL },
- { "minus", 584, NULL },
- { "Iogonek", 278, NULL },
- { "zacute", 500, NULL },
- { "yen", 556, NULL },
- { "space", 278, NULL },
- { "Omacron", 778, NULL },
- { "questiondown", 611, NULL },
- { "emdash", 1000, NULL },
- { "Agrave", 667, NULL },
- { "three", 556, NULL },
- { "numbersign", 556, NULL },
- { "lcaron", 299, NULL },
- { "A", 667, NULL },
- { "B", 667, NULL },
- { "C", 722, NULL },
- { "aogonek", 556, NULL },
- { "D", 722, NULL },
- { "E", 667, NULL },
- { "onequarter", 834, NULL },
- { "F", 611, NULL },
- { "G", 778, NULL },
- { "H", 722, NULL },
- { "I", 278, NULL },
- { "J", 500, NULL },
- { "K", 667, NULL },
- { "iogonek", 222, NULL },
- { "backslash", 278, NULL },
- { "L", 556, NULL },
- { "periodcentered", 278, NULL },
- { "M", 833, NULL },
- { "N", 722, NULL },
- { "omacron", 556, NULL },
- { "Tcommaaccent", 611, NULL },
- { "O", 778, NULL },
- { "P", 667, NULL },
- { "Q", 778, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 722, NULL },
- { "Aacute", 667, NULL },
- { "caron", 333, NULL },
- { "S", 667, NULL },
- { "T", 611, NULL },
- { "U", 722, NULL },
- { "agrave", 556, NULL },
- { "V", 667, NULL },
- { "W", 944, NULL },
- { "X", 667, NULL },
- { "question", 556, NULL },
- { "equal", 584, NULL },
- { "Y", 667, NULL },
- { "Z", 611, NULL },
- { "four", 556, NULL },
- { "a", 556, NULL },
- { "Gcommaaccent", 778, NULL },
- { "b", 556, NULL },
- { "c", 500, NULL },
- { "d", 556, NULL },
- { "e", 556, NULL },
- { "f", 278, NULL },
- { "g", 556, NULL },
- { "bullet", 350, NULL },
- { "h", 556, NULL },
- { "i", 222, NULL },
- { "Oslash", 778, NULL },
- { "dagger", 556, NULL },
- { "j", 222, NULL },
- { "k", 500, NULL },
- { "l", 222, NULL },
- { "m", 833, NULL },
- { "n", 556, NULL },
- { "tcommaaccent", 278, NULL },
- { "o", 556, NULL },
- { "ordfeminine", 370, NULL },
- { "ring", 333, NULL },
- { "p", 556, NULL },
- { "q", 556, NULL },
- { "uhungarumlaut", 556, NULL },
- { "r", 333, NULL },
- { "twosuperior", 333, NULL },
- { "aacute", 556, NULL },
- { "s", 500, NULL },
- { "OE", 1000, NULL },
- { "t", 278, NULL },
- { "divide", 584, NULL },
- { "u", 556, NULL },
- { "Ccaron", 722, NULL },
- { "v", 500, NULL },
- { "w", 722, NULL },
- { "x", 500, NULL },
- { "y", 500, NULL },
- { "z", 500, NULL },
- { "Gbreve", 778, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 278, NULL },
- { "Nacute", 722, NULL },
- { "quotedbl", 355, NULL },
- { "gcommaaccent", 556, NULL },
- { "mu", 556, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 667, NULL },
- { "Lslash", 556, NULL },
- { "semicolon", 278, NULL },
- { "oslash", 611, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 471, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 500, NULL },
- { "Ecircumflex", 667, NULL },
- { "gbreve", 556, NULL },
- { "trademark", 1000, NULL },
- { "daggerdbl", 556, NULL },
- { "nacute", 556, NULL },
- { "macron", 333, NULL },
- { "Otilde", 778, NULL },
- { "Emacron", 667, NULL },
- { "ellipsis", 1000, NULL },
- { "scaron", 500, NULL },
- { "AE", 1000, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 222, NULL },
- { "quotedblleft", 333, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 191, NULL },
- { "eight", 556, NULL },
- { "exclamdown", 333, NULL },
- { "endash", 556, NULL },
- { "oe", 944, NULL },
- { "Abreve", 667, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 556, NULL },
- { "Adieresis", 667, NULL },
- { "copyright", 737, NULL },
- { "Egrave", 667, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 667, NULL },
- { "otilde", 556, NULL },
- { "Idieresis", 278, NULL },
- { "parenleft", 333, NULL },
- { "one", 556, NULL },
- { "emacron", 556, NULL },
- { "Odieresis", 778, NULL },
- { "ucircumflex", 556, NULL },
- { "bracketleft", 278, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 222, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 667, NULL },
- { "umacron", 556, NULL },
- { "abreve", 556, NULL },
- { "Eacute", 667, NULL },
- { "adieresis", 556, NULL },
- { "egrave", 556, NULL },
- { "edieresis", 556, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 889, NULL },
- { "asterisk", 389, NULL },
- { "odieresis", 556, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 556, NULL },
- { "nine", 556, NULL },
- { "five", 556, NULL },
- { "udieresis", 556, NULL },
- { "Zcaron", 611, NULL },
- { "Scommaaccent", 667, NULL },
- { "threequarters", 834, NULL },
- { "guillemotright", 556, NULL },
- { "Ccedilla", 722, NULL },
- { "ydieresis", 500, NULL },
- { "tilde", 333, NULL },
- { "at", 1015, NULL },
- { "eacute", 556, NULL },
- { "underscore", 556, NULL },
- { "Euro", 556, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 584, NULL },
- { "zero", 556, NULL },
- { "eth", 556, NULL },
- { "Scedilla", 667, NULL },
- { "Ograve", 778, NULL },
- { "Racute", 722, NULL },
- { "partialdiff", 476, NULL },
- { "uacute", 556, NULL },
- { "braceleft", 334, NULL },
- { "Thorn", 667, NULL },
- { "zcaron", 500, NULL },
- { "scommaaccent", 500, NULL },
- { "ccedilla", 500, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 556, NULL },
- { "Ocircumflex", 778, NULL },
- { "Oacute", 778, NULL },
- { "scedilla", 500, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 556, NULL },
- { "racute", 333, NULL },
- { "Tcaron", 611, NULL },
- { "Eogonek", 667, NULL },
- { "thorn", 556, NULL },
- { "degree", 400, NULL },
- { "registered", 737, NULL },
- { "radical", 453, NULL },
- { "Aring", 667, NULL },
- { "percent", 889, NULL },
- { "six", 556, NULL },
- { "paragraph", 537, NULL },
- { "dcaron", 643, NULL },
- { "Uogonek", 722, NULL },
- { "two", 556, NULL },
- { "summation", 600, NULL },
- { "Igrave", 278, NULL },
- { "Lacute", 556, NULL },
- { "ocircumflex", 556, NULL },
- { "oacute", 556, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 556, NULL },
- { "tcaron", 317, NULL },
- { "eogonek", 556, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 778, NULL },
- { "asciicircum", 469, NULL },
- { "aring", 556, NULL },
- { "grave", 333, NULL },
- { "uogonek", 556, NULL },
- { "bracketright", 278, NULL },
- { "Iacute", 278, NULL },
- { "ampersand", 667, NULL },
- { "igrave", 278, NULL },
- { "lacute", 222, NULL },
- { "Ncaron", 722, NULL },
- { "plus", 584, NULL },
- { "uring", 556, NULL },
- { "quotesinglbase", 222, NULL },
- { "lcommaaccent", 222, NULL },
- { "Yacute", 667, NULL },
- { "ohungarumlaut", 556, NULL },
- { "threesuperior", 333, NULL },
- { "acute", 333, NULL },
- { "section", 556, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 333, NULL },
- { "ncaron", 556, NULL },
- { "florin", 556, NULL },
- { "yacute", 500, NULL },
- { "Rcommaaccent", 722, NULL },
- { "fi", 500, NULL },
- { "fl", 500, NULL },
- { "Acircumflex", 667, NULL },
- { "Cacute", 722, NULL },
- { "Icircumflex", 278, NULL },
- { "guillemotleft", 556, NULL },
- { "germandbls", 611, NULL },
- { "Amacron", 667, NULL },
- { "seven", 556, NULL },
- { "Sacute", 667, NULL },
- { "ordmasculine", 365, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 556, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 278, NULL },
- { "rcommaaccent", 333, NULL },
- { "Zdotaccent", 611, NULL },
- { "acircumflex", 556, NULL },
- { "cacute", 500, NULL },
- { "Ecaron", 667, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 334, NULL },
- { "quotedblright", 333, NULL },
- { "amacron", 556, NULL },
- { "sacute", 500, NULL },
- { "imacron", 278, NULL },
- { "cent", 556, NULL },
- { "currency", 556, NULL },
- { "logicalnot", 584, NULL },
- { "zdotaccent", 500, NULL },
- { "Atilde", 667, NULL },
- { "breve", 333, NULL },
- { "bar", 260, NULL },
- { "fraction", 167, NULL },
- { "less", 584, NULL },
- { "ecaron", 556, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 278, NULL },
- { "period", 278, NULL },
- { "Rcaron", 722, NULL },
- { "Kcommaaccent", 667, NULL },
- { "greater", 584, NULL },
- { "atilde", 556, NULL },
- { "brokenbar", 260, NULL },
- { "quoteleft", 222, NULL },
- { "Edotaccent", 667, NULL },
- { "onesuperior", 333, NULL }
-};
-
-static BuiltinFontWidth helveticaBoldWidthsTab[] = {
- { "Ntilde", 722, NULL },
- { "rcaron", 389, NULL },
- { "kcommaaccent", 556, NULL },
- { "Ncommaaccent", 722, NULL },
- { "Zacute", 611, NULL },
- { "comma", 278, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 584, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 556, NULL },
- { "asciitilde", 584, NULL },
- { "colon", 333, NULL },
- { "onehalf", 834, NULL },
- { "dollar", 556, NULL },
- { "Lcaron", 611, NULL },
- { "ntilde", 611, NULL },
- { "Aogonek", 722, NULL },
- { "ncommaaccent", 611, NULL },
- { "minus", 584, NULL },
- { "Iogonek", 278, NULL },
- { "zacute", 500, NULL },
- { "yen", 556, NULL },
- { "space", 278, NULL },
- { "Omacron", 778, NULL },
- { "questiondown", 611, NULL },
- { "emdash", 1000, NULL },
- { "Agrave", 722, NULL },
- { "three", 556, NULL },
- { "numbersign", 556, NULL },
- { "lcaron", 400, NULL },
- { "A", 722, NULL },
- { "B", 722, NULL },
- { "C", 722, NULL },
- { "aogonek", 556, NULL },
- { "D", 722, NULL },
- { "E", 667, NULL },
- { "onequarter", 834, NULL },
- { "F", 611, NULL },
- { "G", 778, NULL },
- { "H", 722, NULL },
- { "I", 278, NULL },
- { "J", 556, NULL },
- { "K", 722, NULL },
- { "iogonek", 278, NULL },
- { "backslash", 278, NULL },
- { "L", 611, NULL },
- { "periodcentered", 278, NULL },
- { "M", 833, NULL },
- { "N", 722, NULL },
- { "omacron", 611, NULL },
- { "Tcommaaccent", 611, NULL },
- { "O", 778, NULL },
- { "P", 667, NULL },
- { "Q", 778, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 722, NULL },
- { "Aacute", 722, NULL },
- { "caron", 333, NULL },
- { "S", 667, NULL },
- { "T", 611, NULL },
- { "U", 722, NULL },
- { "agrave", 556, NULL },
- { "V", 667, NULL },
- { "W", 944, NULL },
- { "X", 667, NULL },
- { "question", 611, NULL },
- { "equal", 584, NULL },
- { "Y", 667, NULL },
- { "Z", 611, NULL },
- { "four", 556, NULL },
- { "a", 556, NULL },
- { "Gcommaaccent", 778, NULL },
- { "b", 611, NULL },
- { "c", 556, NULL },
- { "d", 611, NULL },
- { "e", 556, NULL },
- { "f", 333, NULL },
- { "g", 611, NULL },
- { "bullet", 350, NULL },
- { "h", 611, NULL },
- { "i", 278, NULL },
- { "Oslash", 778, NULL },
- { "dagger", 556, NULL },
- { "j", 278, NULL },
- { "k", 556, NULL },
- { "l", 278, NULL },
- { "m", 889, NULL },
- { "n", 611, NULL },
- { "tcommaaccent", 333, NULL },
- { "o", 611, NULL },
- { "ordfeminine", 370, NULL },
- { "ring", 333, NULL },
- { "p", 611, NULL },
- { "q", 611, NULL },
- { "uhungarumlaut", 611, NULL },
- { "r", 389, NULL },
- { "twosuperior", 333, NULL },
- { "aacute", 556, NULL },
- { "s", 556, NULL },
- { "OE", 1000, NULL },
- { "t", 333, NULL },
- { "divide", 584, NULL },
- { "u", 611, NULL },
- { "Ccaron", 722, NULL },
- { "v", 556, NULL },
- { "w", 778, NULL },
- { "x", 556, NULL },
- { "y", 556, NULL },
- { "z", 500, NULL },
- { "Gbreve", 778, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 278, NULL },
- { "Nacute", 722, NULL },
- { "quotedbl", 474, NULL },
- { "gcommaaccent", 611, NULL },
- { "mu", 611, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 667, NULL },
- { "Lslash", 611, NULL },
- { "semicolon", 333, NULL },
- { "oslash", 611, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 494, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 556, NULL },
- { "Ecircumflex", 667, NULL },
- { "gbreve", 611, NULL },
- { "trademark", 1000, NULL },
- { "daggerdbl", 556, NULL },
- { "nacute", 611, NULL },
- { "macron", 333, NULL },
- { "Otilde", 778, NULL },
- { "Emacron", 667, NULL },
- { "ellipsis", 1000, NULL },
- { "scaron", 556, NULL },
- { "AE", 1000, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 278, NULL },
- { "quotedblleft", 500, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 238, NULL },
- { "eight", 556, NULL },
- { "exclamdown", 333, NULL },
- { "endash", 556, NULL },
- { "oe", 944, NULL },
- { "Abreve", 722, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 556, NULL },
- { "Adieresis", 722, NULL },
- { "copyright", 737, NULL },
- { "Egrave", 667, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 667, NULL },
- { "otilde", 611, NULL },
- { "Idieresis", 278, NULL },
- { "parenleft", 333, NULL },
- { "one", 556, NULL },
- { "emacron", 556, NULL },
- { "Odieresis", 778, NULL },
- { "ucircumflex", 611, NULL },
- { "bracketleft", 333, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 278, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 667, NULL },
- { "umacron", 611, NULL },
- { "abreve", 556, NULL },
- { "Eacute", 667, NULL },
- { "adieresis", 556, NULL },
- { "egrave", 556, NULL },
- { "edieresis", 556, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 889, NULL },
- { "asterisk", 389, NULL },
- { "odieresis", 611, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 611, NULL },
- { "nine", 556, NULL },
- { "five", 556, NULL },
- { "udieresis", 611, NULL },
- { "Zcaron", 611, NULL },
- { "Scommaaccent", 667, NULL },
- { "threequarters", 834, NULL },
- { "guillemotright", 556, NULL },
- { "Ccedilla", 722, NULL },
- { "ydieresis", 556, NULL },
- { "tilde", 333, NULL },
- { "dbldaggerumlaut", 556, NULL },
- { "at", 975, NULL },
- { "eacute", 556, NULL },
- { "underscore", 556, NULL },
- { "Euro", 556, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 584, NULL },
- { "zero", 556, NULL },
- { "eth", 611, NULL },
- { "Scedilla", 667, NULL },
- { "Ograve", 778, NULL },
- { "Racute", 722, NULL },
- { "partialdiff", 494, NULL },
- { "uacute", 611, NULL },
- { "braceleft", 389, NULL },
- { "Thorn", 667, NULL },
- { "zcaron", 500, NULL },
- { "scommaaccent", 556, NULL },
- { "ccedilla", 556, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 611, NULL },
- { "Ocircumflex", 778, NULL },
- { "Oacute", 778, NULL },
- { "scedilla", 556, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 611, NULL },
- { "racute", 389, NULL },
- { "Tcaron", 611, NULL },
- { "Eogonek", 667, NULL },
- { "thorn", 611, NULL },
- { "degree", 400, NULL },
- { "registered", 737, NULL },
- { "radical", 549, NULL },
- { "Aring", 722, NULL },
- { "percent", 889, NULL },
- { "six", 556, NULL },
- { "paragraph", 556, NULL },
- { "dcaron", 743, NULL },
- { "Uogonek", 722, NULL },
- { "two", 556, NULL },
- { "summation", 600, NULL },
- { "Igrave", 278, NULL },
- { "Lacute", 611, NULL },
- { "ocircumflex", 611, NULL },
- { "oacute", 611, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 611, NULL },
- { "tcaron", 389, NULL },
- { "eogonek", 556, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 778, NULL },
- { "asciicircum", 584, NULL },
- { "aring", 556, NULL },
- { "grave", 333, NULL },
- { "uogonek", 611, NULL },
- { "bracketright", 333, NULL },
- { "Iacute", 278, NULL },
- { "ampersand", 722, NULL },
- { "igrave", 278, NULL },
- { "lacute", 278, NULL },
- { "Ncaron", 722, NULL },
- { "plus", 584, NULL },
- { "uring", 611, NULL },
- { "quotesinglbase", 278, NULL },
- { "lcommaaccent", 278, NULL },
- { "Yacute", 667, NULL },
- { "ohungarumlaut", 611, NULL },
- { "threesuperior", 333, NULL },
- { "acute", 333, NULL },
- { "section", 556, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 500, NULL },
- { "ncaron", 611, NULL },
- { "florin", 556, NULL },
- { "yacute", 556, NULL },
- { "Rcommaaccent", 722, NULL },
- { "fi", 611, NULL },
- { "fl", 611, NULL },
- { "Acircumflex", 722, NULL },
- { "Cacute", 722, NULL },
- { "Icircumflex", 278, NULL },
- { "guillemotleft", 556, NULL },
- { "germandbls", 611, NULL },
- { "Amacron", 722, NULL },
- { "seven", 556, NULL },
- { "Sacute", 667, NULL },
- { "ordmasculine", 365, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 556, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 278, NULL },
- { "rcommaaccent", 389, NULL },
- { "Zdotaccent", 611, NULL },
- { "acircumflex", 556, NULL },
- { "cacute", 556, NULL },
- { "Ecaron", 667, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 389, NULL },
- { "quotedblright", 500, NULL },
- { "amacron", 556, NULL },
- { "sacute", 556, NULL },
- { "imacron", 278, NULL },
- { "cent", 556, NULL },
- { "currency", 556, NULL },
- { "logicalnot", 584, NULL },
- { "zdotaccent", 500, NULL },
- { "Atilde", 722, NULL },
- { "breve", 333, NULL },
- { "bar", 280, NULL },
- { "fraction", 167, NULL },
- { "less", 584, NULL },
- { "ecaron", 556, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 333, NULL },
- { "period", 278, NULL },
- { "Rcaron", 722, NULL },
- { "Kcommaaccent", 722, NULL },
- { "greater", 584, NULL },
- { "atilde", 556, NULL },
- { "brokenbar", 280, NULL },
- { "quoteleft", 278, NULL },
- { "Edotaccent", 667, NULL },
- { "onesuperior", 333, NULL }
-};
-
-static BuiltinFontWidth helveticaBoldObliqueWidthsTab[] = {
- { "Ntilde", 722, NULL },
- { "rcaron", 389, NULL },
- { "kcommaaccent", 556, NULL },
- { "Ncommaaccent", 722, NULL },
- { "Zacute", 611, NULL },
- { "comma", 278, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 584, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 556, NULL },
- { "asciitilde", 584, NULL },
- { "colon", 333, NULL },
- { "onehalf", 834, NULL },
- { "dollar", 556, NULL },
- { "Lcaron", 611, NULL },
- { "ntilde", 611, NULL },
- { "Aogonek", 722, NULL },
- { "ncommaaccent", 611, NULL },
- { "minus", 584, NULL },
- { "Iogonek", 278, NULL },
- { "zacute", 500, NULL },
- { "yen", 556, NULL },
- { "space", 278, NULL },
- { "Omacron", 778, NULL },
- { "questiondown", 611, NULL },
- { "emdash", 1000, NULL },
- { "Agrave", 722, NULL },
- { "three", 556, NULL },
- { "numbersign", 556, NULL },
- { "lcaron", 400, NULL },
- { "A", 722, NULL },
- { "B", 722, NULL },
- { "C", 722, NULL },
- { "aogonek", 556, NULL },
- { "D", 722, NULL },
- { "E", 667, NULL },
- { "onequarter", 834, NULL },
- { "F", 611, NULL },
- { "G", 778, NULL },
- { "H", 722, NULL },
- { "I", 278, NULL },
- { "J", 556, NULL },
- { "K", 722, NULL },
- { "iogonek", 278, NULL },
- { "backslash", 278, NULL },
- { "L", 611, NULL },
- { "periodcentered", 278, NULL },
- { "M", 833, NULL },
- { "N", 722, NULL },
- { "omacron", 611, NULL },
- { "Tcommaaccent", 611, NULL },
- { "O", 778, NULL },
- { "P", 667, NULL },
- { "Q", 778, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 722, NULL },
- { "Aacute", 722, NULL },
- { "caron", 333, NULL },
- { "S", 667, NULL },
- { "T", 611, NULL },
- { "U", 722, NULL },
- { "agrave", 556, NULL },
- { "V", 667, NULL },
- { "W", 944, NULL },
- { "X", 667, NULL },
- { "question", 611, NULL },
- { "equal", 584, NULL },
- { "Y", 667, NULL },
- { "Z", 611, NULL },
- { "four", 556, NULL },
- { "a", 556, NULL },
- { "Gcommaaccent", 778, NULL },
- { "b", 611, NULL },
- { "c", 556, NULL },
- { "d", 611, NULL },
- { "e", 556, NULL },
- { "f", 333, NULL },
- { "g", 611, NULL },
- { "bullet", 350, NULL },
- { "h", 611, NULL },
- { "i", 278, NULL },
- { "Oslash", 778, NULL },
- { "dagger", 556, NULL },
- { "j", 278, NULL },
- { "k", 556, NULL },
- { "l", 278, NULL },
- { "m", 889, NULL },
- { "n", 611, NULL },
- { "tcommaaccent", 333, NULL },
- { "o", 611, NULL },
- { "ordfeminine", 370, NULL },
- { "ring", 333, NULL },
- { "p", 611, NULL },
- { "q", 611, NULL },
- { "uhungarumlaut", 611, NULL },
- { "r", 389, NULL },
- { "twosuperior", 333, NULL },
- { "aacute", 556, NULL },
- { "s", 556, NULL },
- { "OE", 1000, NULL },
- { "t", 333, NULL },
- { "divide", 584, NULL },
- { "u", 611, NULL },
- { "Ccaron", 722, NULL },
- { "v", 556, NULL },
- { "w", 778, NULL },
- { "x", 556, NULL },
- { "y", 556, NULL },
- { "z", 500, NULL },
- { "Gbreve", 778, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 278, NULL },
- { "Nacute", 722, NULL },
- { "quotedbl", 474, NULL },
- { "gcommaaccent", 611, NULL },
- { "mu", 611, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 667, NULL },
- { "Lslash", 611, NULL },
- { "semicolon", 333, NULL },
- { "oslash", 611, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 494, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 556, NULL },
- { "Ecircumflex", 667, NULL },
- { "gbreve", 611, NULL },
- { "trademark", 1000, NULL },
- { "daggerdbl", 556, NULL },
- { "nacute", 611, NULL },
- { "macron", 333, NULL },
- { "Otilde", 778, NULL },
- { "Emacron", 667, NULL },
- { "ellipsis", 1000, NULL },
- { "scaron", 556, NULL },
- { "AE", 1000, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 278, NULL },
- { "quotedblleft", 500, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 238, NULL },
- { "eight", 556, NULL },
- { "exclamdown", 333, NULL },
- { "endash", 556, NULL },
- { "oe", 944, NULL },
- { "Abreve", 722, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 556, NULL },
- { "Adieresis", 722, NULL },
- { "copyright", 737, NULL },
- { "Egrave", 667, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 667, NULL },
- { "otilde", 611, NULL },
- { "Idieresis", 278, NULL },
- { "parenleft", 333, NULL },
- { "one", 556, NULL },
- { "emacron", 556, NULL },
- { "Odieresis", 778, NULL },
- { "ucircumflex", 611, NULL },
- { "bracketleft", 333, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 278, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 667, NULL },
- { "umacron", 611, NULL },
- { "abreve", 556, NULL },
- { "Eacute", 667, NULL },
- { "adieresis", 556, NULL },
- { "egrave", 556, NULL },
- { "edieresis", 556, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 889, NULL },
- { "asterisk", 389, NULL },
- { "odieresis", 611, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 611, NULL },
- { "nine", 556, NULL },
- { "five", 556, NULL },
- { "udieresis", 611, NULL },
- { "Zcaron", 611, NULL },
- { "Scommaaccent", 667, NULL },
- { "threequarters", 834, NULL },
- { "guillemotright", 556, NULL },
- { "Ccedilla", 722, NULL },
- { "ydieresis", 556, NULL },
- { "tilde", 333, NULL },
- { "at", 975, NULL },
- { "eacute", 556, NULL },
- { "underscore", 556, NULL },
- { "Euro", 556, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 584, NULL },
- { "zero", 556, NULL },
- { "eth", 611, NULL },
- { "Scedilla", 667, NULL },
- { "Ograve", 778, NULL },
- { "Racute", 722, NULL },
- { "partialdiff", 494, NULL },
- { "uacute", 611, NULL },
- { "braceleft", 389, NULL },
- { "Thorn", 667, NULL },
- { "zcaron", 500, NULL },
- { "scommaaccent", 556, NULL },
- { "ccedilla", 556, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 611, NULL },
- { "Ocircumflex", 778, NULL },
- { "Oacute", 778, NULL },
- { "scedilla", 556, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 611, NULL },
- { "racute", 389, NULL },
- { "Tcaron", 611, NULL },
- { "Eogonek", 667, NULL },
- { "thorn", 611, NULL },
- { "degree", 400, NULL },
- { "registered", 737, NULL },
- { "radical", 549, NULL },
- { "Aring", 722, NULL },
- { "percent", 889, NULL },
- { "six", 556, NULL },
- { "paragraph", 556, NULL },
- { "dcaron", 743, NULL },
- { "Uogonek", 722, NULL },
- { "two", 556, NULL },
- { "summation", 600, NULL },
- { "Igrave", 278, NULL },
- { "Lacute", 611, NULL },
- { "ocircumflex", 611, NULL },
- { "oacute", 611, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 611, NULL },
- { "tcaron", 389, NULL },
- { "eogonek", 556, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 778, NULL },
- { "asciicircum", 584, NULL },
- { "aring", 556, NULL },
- { "grave", 333, NULL },
- { "uogonek", 611, NULL },
- { "bracketright", 333, NULL },
- { "Iacute", 278, NULL },
- { "ampersand", 722, NULL },
- { "igrave", 278, NULL },
- { "lacute", 278, NULL },
- { "Ncaron", 722, NULL },
- { "plus", 584, NULL },
- { "uring", 611, NULL },
- { "quotesinglbase", 278, NULL },
- { "lcommaaccent", 278, NULL },
- { "Yacute", 667, NULL },
- { "ohungarumlaut", 611, NULL },
- { "threesuperior", 333, NULL },
- { "acute", 333, NULL },
- { "section", 556, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 500, NULL },
- { "ncaron", 611, NULL },
- { "florin", 556, NULL },
- { "yacute", 556, NULL },
- { "Rcommaaccent", 722, NULL },
- { "fi", 611, NULL },
- { "fl", 611, NULL },
- { "Acircumflex", 722, NULL },
- { "Cacute", 722, NULL },
- { "Icircumflex", 278, NULL },
- { "guillemotleft", 556, NULL },
- { "germandbls", 611, NULL },
- { "Amacron", 722, NULL },
- { "seven", 556, NULL },
- { "Sacute", 667, NULL },
- { "ordmasculine", 365, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 556, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 278, NULL },
- { "rcommaaccent", 389, NULL },
- { "Zdotaccent", 611, NULL },
- { "acircumflex", 556, NULL },
- { "cacute", 556, NULL },
- { "Ecaron", 667, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 389, NULL },
- { "quotedblright", 500, NULL },
- { "amacron", 556, NULL },
- { "sacute", 556, NULL },
- { "imacron", 278, NULL },
- { "cent", 556, NULL },
- { "currency", 556, NULL },
- { "logicalnot", 584, NULL },
- { "zdotaccent", 500, NULL },
- { "Atilde", 722, NULL },
- { "breve", 333, NULL },
- { "bar", 280, NULL },
- { "fraction", 167, NULL },
- { "less", 584, NULL },
- { "ecaron", 556, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 333, NULL },
- { "period", 278, NULL },
- { "Rcaron", 722, NULL },
- { "Kcommaaccent", 722, NULL },
- { "greater", 584, NULL },
- { "atilde", 556, NULL },
- { "brokenbar", 280, NULL },
- { "quoteleft", 278, NULL },
- { "Edotaccent", 667, NULL },
- { "onesuperior", 333, NULL }
-};
-
-static BuiltinFontWidth helveticaObliqueWidthsTab[] = {
- { "Ntilde", 722, NULL },
- { "rcaron", 333, NULL },
- { "kcommaaccent", 500, NULL },
- { "Ncommaaccent", 722, NULL },
- { "Zacute", 611, NULL },
- { "comma", 278, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 584, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 556, NULL },
- { "asciitilde", 584, NULL },
- { "colon", 278, NULL },
- { "onehalf", 834, NULL },
- { "dollar", 556, NULL },
- { "Lcaron", 556, NULL },
- { "ntilde", 556, NULL },
- { "Aogonek", 667, NULL },
- { "ncommaaccent", 556, NULL },
- { "minus", 584, NULL },
- { "Iogonek", 278, NULL },
- { "zacute", 500, NULL },
- { "yen", 556, NULL },
- { "space", 278, NULL },
- { "Omacron", 778, NULL },
- { "questiondown", 611, NULL },
- { "emdash", 1000, NULL },
- { "Agrave", 667, NULL },
- { "three", 556, NULL },
- { "numbersign", 556, NULL },
- { "lcaron", 299, NULL },
- { "A", 667, NULL },
- { "B", 667, NULL },
- { "C", 722, NULL },
- { "aogonek", 556, NULL },
- { "D", 722, NULL },
- { "E", 667, NULL },
- { "onequarter", 834, NULL },
- { "F", 611, NULL },
- { "G", 778, NULL },
- { "H", 722, NULL },
- { "I", 278, NULL },
- { "J", 500, NULL },
- { "K", 667, NULL },
- { "iogonek", 222, NULL },
- { "backslash", 278, NULL },
- { "L", 556, NULL },
- { "periodcentered", 278, NULL },
- { "M", 833, NULL },
- { "N", 722, NULL },
- { "omacron", 556, NULL },
- { "Tcommaaccent", 611, NULL },
- { "O", 778, NULL },
- { "P", 667, NULL },
- { "Q", 778, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 722, NULL },
- { "Aacute", 667, NULL },
- { "caron", 333, NULL },
- { "S", 667, NULL },
- { "T", 611, NULL },
- { "U", 722, NULL },
- { "agrave", 556, NULL },
- { "V", 667, NULL },
- { "W", 944, NULL },
- { "X", 667, NULL },
- { "question", 556, NULL },
- { "equal", 584, NULL },
- { "Y", 667, NULL },
- { "Z", 611, NULL },
- { "four", 556, NULL },
- { "a", 556, NULL },
- { "Gcommaaccent", 778, NULL },
- { "b", 556, NULL },
- { "c", 500, NULL },
- { "d", 556, NULL },
- { "e", 556, NULL },
- { "f", 278, NULL },
- { "g", 556, NULL },
- { "bullet", 350, NULL },
- { "h", 556, NULL },
- { "i", 222, NULL },
- { "Oslash", 778, NULL },
- { "dagger", 556, NULL },
- { "j", 222, NULL },
- { "k", 500, NULL },
- { "l", 222, NULL },
- { "m", 833, NULL },
- { "n", 556, NULL },
- { "tcommaaccent", 278, NULL },
- { "o", 556, NULL },
- { "ordfeminine", 370, NULL },
- { "ring", 333, NULL },
- { "p", 556, NULL },
- { "q", 556, NULL },
- { "uhungarumlaut", 556, NULL },
- { "r", 333, NULL },
- { "twosuperior", 333, NULL },
- { "aacute", 556, NULL },
- { "s", 500, NULL },
- { "OE", 1000, NULL },
- { "t", 278, NULL },
- { "divide", 584, NULL },
- { "u", 556, NULL },
- { "Ccaron", 722, NULL },
- { "v", 500, NULL },
- { "w", 722, NULL },
- { "x", 500, NULL },
- { "y", 500, NULL },
- { "z", 500, NULL },
- { "Gbreve", 778, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 278, NULL },
- { "Nacute", 722, NULL },
- { "quotedbl", 355, NULL },
- { "gcommaaccent", 556, NULL },
- { "mu", 556, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 667, NULL },
- { "Lslash", 556, NULL },
- { "semicolon", 278, NULL },
- { "oslash", 611, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 471, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 500, NULL },
- { "Ecircumflex", 667, NULL },
- { "gbreve", 556, NULL },
- { "trademark", 1000, NULL },
- { "daggerdbl", 556, NULL },
- { "nacute", 556, NULL },
- { "macron", 333, NULL },
- { "Otilde", 778, NULL },
- { "Emacron", 667, NULL },
- { "ellipsis", 1000, NULL },
- { "scaron", 500, NULL },
- { "AE", 1000, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 222, NULL },
- { "quotedblleft", 333, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 191, NULL },
- { "eight", 556, NULL },
- { "exclamdown", 333, NULL },
- { "endash", 556, NULL },
- { "oe", 944, NULL },
- { "Abreve", 667, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 556, NULL },
- { "Adieresis", 667, NULL },
- { "copyright", 737, NULL },
- { "Egrave", 667, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 667, NULL },
- { "otilde", 556, NULL },
- { "Idieresis", 278, NULL },
- { "parenleft", 333, NULL },
- { "one", 556, NULL },
- { "emacron", 556, NULL },
- { "Odieresis", 778, NULL },
- { "ucircumflex", 556, NULL },
- { "bracketleft", 278, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 222, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 667, NULL },
- { "umacron", 556, NULL },
- { "abreve", 556, NULL },
- { "Eacute", 667, NULL },
- { "adieresis", 556, NULL },
- { "egrave", 556, NULL },
- { "edieresis", 556, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 889, NULL },
- { "asterisk", 389, NULL },
- { "odieresis", 556, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 556, NULL },
- { "nine", 556, NULL },
- { "five", 556, NULL },
- { "udieresis", 556, NULL },
- { "Zcaron", 611, NULL },
- { "Scommaaccent", 667, NULL },
- { "threequarters", 834, NULL },
- { "guillemotright", 556, NULL },
- { "Ccedilla", 722, NULL },
- { "ydieresis", 500, NULL },
- { "tilde", 333, NULL },
- { "at", 1015, NULL },
- { "eacute", 556, NULL },
- { "underscore", 556, NULL },
- { "Euro", 556, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 584, NULL },
- { "zero", 556, NULL },
- { "eth", 556, NULL },
- { "Scedilla", 667, NULL },
- { "Ograve", 778, NULL },
- { "Racute", 722, NULL },
- { "partialdiff", 476, NULL },
- { "uacute", 556, NULL },
- { "braceleft", 334, NULL },
- { "Thorn", 667, NULL },
- { "zcaron", 500, NULL },
- { "scommaaccent", 500, NULL },
- { "ccedilla", 500, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 556, NULL },
- { "Ocircumflex", 778, NULL },
- { "Oacute", 778, NULL },
- { "scedilla", 500, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 556, NULL },
- { "racute", 333, NULL },
- { "Tcaron", 611, NULL },
- { "Eogonek", 667, NULL },
- { "thorn", 556, NULL },
- { "degree", 400, NULL },
- { "registered", 737, NULL },
- { "radical", 453, NULL },
- { "Aring", 667, NULL },
- { "percent", 889, NULL },
- { "six", 556, NULL },
- { "paragraph", 537, NULL },
- { "dcaron", 643, NULL },
- { "Uogonek", 722, NULL },
- { "two", 556, NULL },
- { "summation", 600, NULL },
- { "Igrave", 278, NULL },
- { "Lacute", 556, NULL },
- { "ocircumflex", 556, NULL },
- { "oacute", 556, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 556, NULL },
- { "tcaron", 317, NULL },
- { "eogonek", 556, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 778, NULL },
- { "asciicircum", 469, NULL },
- { "aring", 556, NULL },
- { "grave", 333, NULL },
- { "uogonek", 556, NULL },
- { "bracketright", 278, NULL },
- { "Iacute", 278, NULL },
- { "ampersand", 667, NULL },
- { "igrave", 278, NULL },
- { "lacute", 222, NULL },
- { "Ncaron", 722, NULL },
- { "plus", 584, NULL },
- { "uring", 556, NULL },
- { "quotesinglbase", 222, NULL },
- { "lcommaaccent", 222, NULL },
- { "Yacute", 667, NULL },
- { "ohungarumlaut", 556, NULL },
- { "threesuperior", 333, NULL },
- { "acute", 333, NULL },
- { "section", 556, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 333, NULL },
- { "ncaron", 556, NULL },
- { "florin", 556, NULL },
- { "yacute", 500, NULL },
- { "Rcommaaccent", 722, NULL },
- { "fi", 500, NULL },
- { "fl", 500, NULL },
- { "Acircumflex", 667, NULL },
- { "Cacute", 722, NULL },
- { "Icircumflex", 278, NULL },
- { "guillemotleft", 556, NULL },
- { "germandbls", 611, NULL },
- { "Amacron", 667, NULL },
- { "seven", 556, NULL },
- { "Sacute", 667, NULL },
- { "ordmasculine", 365, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 556, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 278, NULL },
- { "rcommaaccent", 333, NULL },
- { "Zdotaccent", 611, NULL },
- { "acircumflex", 556, NULL },
- { "cacute", 500, NULL },
- { "Ecaron", 667, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 334, NULL },
- { "quotedblright", 333, NULL },
- { "amacron", 556, NULL },
- { "sacute", 500, NULL },
- { "imacron", 278, NULL },
- { "cent", 556, NULL },
- { "currency", 556, NULL },
- { "logicalnot", 584, NULL },
- { "zdotaccent", 500, NULL },
- { "Atilde", 667, NULL },
- { "breve", 333, NULL },
- { "bar", 260, NULL },
- { "fraction", 167, NULL },
- { "less", 584, NULL },
- { "ecaron", 556, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 278, NULL },
- { "period", 278, NULL },
- { "Rcaron", 722, NULL },
- { "Kcommaaccent", 667, NULL },
- { "greater", 584, NULL },
- { "atilde", 556, NULL },
- { "brokenbar", 260, NULL },
- { "quoteleft", 222, NULL },
- { "Edotaccent", 667, NULL },
- { "onesuperior", 333, NULL }
-};
-
-static BuiltinFontWidth symbolWidthsTab[] = {
- { "bracketleftex", 384, NULL },
- { "alpha", 631, NULL },
- { "union", 768, NULL },
- { "infinity", 713, NULL },
- { "comma", 250, NULL },
- { "copyrightsans", 790, NULL },
- { "plusminus", 549, NULL },
- { "arrowup", 603, NULL },
- { "apple", 790, NULL },
- { "parenleftbt", 384, NULL },
- { "notelement", 713, NULL },
- { "colon", 278, NULL },
- { "beta", 549, NULL },
- { "braceleftbt", 494, NULL },
- { "Lambda", 686, NULL },
- { "Phi", 763, NULL },
- { "minus", 549, NULL },
- { "space", 250, NULL },
- { "Sigma", 592, NULL },
- { "approxequal", 549, NULL },
- { "minute", 247, NULL },
- { "circleplus", 768, NULL },
- { "Omicron", 722, NULL },
- { "three", 500, NULL },
- { "numbersign", 500, NULL },
- { "lambda", 549, NULL },
- { "phi", 521, NULL },
- { "aleph", 823, NULL },
- { "Tau", 611, NULL },
- { "spade", 753, NULL },
- { "logicaland", 603, NULL },
- { "sigma", 603, NULL },
- { "propersuperset", 713, NULL },
- { "omicron", 549, NULL },
- { "question", 444, NULL },
- { "equal", 549, NULL },
- { "Epsilon", 611, NULL },
- { "emptyset", 823, NULL },
- { "diamond", 753, NULL },
- { "four", 500, NULL },
- { "Mu", 889, NULL },
- { "parenlefttp", 384, NULL },
- { "club", 753, NULL },
- { "bullet", 460, NULL },
- { "Omega", 768, NULL },
- { "tau", 439, NULL },
- { "Upsilon", 690, NULL },
- { "bracelefttp", 494, NULL },
- { "heart", 753, NULL },
- { "divide", 549, NULL },
- { "epsilon", 439, NULL },
- { "logicalor", 603, NULL },
- { "parenleftex", 384, NULL },
- { "greaterequal", 549, NULL },
- { "mu", 576, NULL },
- { "Nu", 722, NULL },
- { "therefore", 863, NULL },
- { "notsubset", 713, NULL },
- { "omega", 686, NULL },
- { "semicolon", 278, NULL },
- { "element", 713, NULL },
- { "upsilon", 576, NULL },
- { "existential", 549, NULL },
- { "integralbt", 686, NULL },
- { "lessequal", 549, NULL },
- { "phi1", 603, NULL },
- { "lozenge", 494, NULL },
- { "trademarkserif", 890, NULL },
- { "parenright", 333, NULL },
- { "reflexsuperset", 713, NULL },
- { "sigma1", 439, NULL },
- { "nu", 521, NULL },
- { "Gamma", 603, NULL },
- { "angleright", 329, NULL },
- { "ellipsis", 1000, NULL },
- { "Rho", 556, NULL },
- { "parenrightbt", 384, NULL },
- { "radicalex", 500, NULL },
- { "eight", 500, NULL },
- { "angleleft", 329, NULL },
- { "arrowdbldown", 603, NULL },
- { "congruent", 549, NULL },
- { "Theta", 741, NULL },
- { "intersection", 768, NULL },
- { "Pi", 768, NULL },
- { "slash", 278, NULL },
- { "registerserif", 790, NULL },
- { "parenleft", 333, NULL },
- { "one", 500, NULL },
- { "gamma", 411, NULL },
- { "bracketleft", 333, NULL },
- { "rho", 549, NULL },
- { "circlemultiply", 768, NULL },
- { "Chi", 722, NULL },
- { "theta", 521, NULL },
- { "pi", 549, NULL },
- { "integraltp", 686, NULL },
- { "Eta", 722, NULL },
- { "product", 823, NULL },
- { "nine", 500, NULL },
- { "five", 500, NULL },
- { "propersubset", 713, NULL },
- { "bracketrightbt", 384, NULL },
- { "trademarksans", 786, NULL },
- { "dotmath", 250, NULL },
- { "integralex", 686, NULL },
- { "chi", 549, NULL },
- { "parenrighttp", 384, NULL },
- { "eta", 603, NULL },
- { "underscore", 500, NULL },
- { "Euro", 750, NULL },
- { "multiply", 549, NULL },
- { "zero", 500, NULL },
- { "partialdiff", 494, NULL },
- { "angle", 768, NULL },
- { "arrowdblleft", 987, NULL },
- { "braceleft", 480, NULL },
- { "parenrightex", 384, NULL },
- { "Rfraktur", 795, NULL },
- { "Zeta", 611, NULL },
- { "braceex", 494, NULL },
- { "arrowdblup", 603, NULL },
- { "arrowdown", 603, NULL },
- { "Ifraktur", 686, NULL },
- { "degree", 400, NULL },
- { "Iota", 333, NULL },
- { "perpendicular", 658, NULL },
- { "radical", 549, NULL },
- { "asteriskmath", 500, NULL },
- { "percent", 833, NULL },
- { "zeta", 494, NULL },
- { "six", 500, NULL },
- { "two", 500, NULL },
- { "weierstrass", 987, NULL },
- { "summation", 713, NULL },
- { "bracketrighttp", 384, NULL },
- { "carriagereturn", 658, NULL },
- { "suchthat", 439, NULL },
- { "arrowvertex", 603, NULL },
- { "Delta", 612, NULL },
- { "iota", 329, NULL },
- { "arrowhorizex", 1000, NULL },
- { "bracketrightex", 384, NULL },
- { "bracketright", 333, NULL },
- { "ampersand", 778, NULL },
- { "plus", 549, NULL },
- { "proportional", 713, NULL },
- { "delta", 494, NULL },
- { "copyrightserif", 790, NULL },
- { "bracerightmid", 494, NULL },
- { "arrowleft", 987, NULL },
- { "second", 411, NULL },
- { "arrowdblboth", 1042, NULL },
- { "florin", 500, NULL },
- { "Psi", 795, NULL },
- { "bracerightbt", 494, NULL },
- { "bracketleftbt", 384, NULL },
- { "seven", 500, NULL },
- { "braceleftmid", 494, NULL },
- { "notequal", 549, NULL },
- { "psi", 686, NULL },
- { "equivalence", 549, NULL },
- { "universal", 713, NULL },
- { "arrowdblright", 987, NULL },
- { "braceright", 480, NULL },
- { "reflexsubset", 713, NULL },
- { "Xi", 645, NULL },
- { "theta1", 631, NULL },
- { "logicalnot", 713, NULL },
- { "Kappa", 722, NULL },
- { "similar", 549, NULL },
- { "bar", 200, NULL },
- { "fraction", 167, NULL },
- { "less", 549, NULL },
- { "registersans", 790, NULL },
- { "omega1", 713, NULL },
- { "exclam", 333, NULL },
- { "Upsilon1", 620, NULL },
- { "bracerighttp", 494, NULL },
- { "xi", 493, NULL },
- { "period", 250, NULL },
- { "Alpha", 722, NULL },
- { "arrowright", 987, NULL },
- { "greater", 549, NULL },
- { "bracketlefttp", 384, NULL },
- { "kappa", 549, NULL },
- { "gradient", 713, NULL },
- { "integral", 274, NULL },
- { "arrowboth", 1042, NULL },
- { "Beta", 667, NULL }
-};
-
-static BuiltinFontWidth timesBoldWidthsTab[] = {
- { "Ntilde", 722, NULL },
- { "rcaron", 444, NULL },
- { "kcommaaccent", 556, NULL },
- { "Ncommaaccent", 722, NULL },
- { "Zacute", 667, NULL },
- { "comma", 250, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 570, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 444, NULL },
- { "asciitilde", 520, NULL },
- { "colon", 333, NULL },
- { "onehalf", 750, NULL },
- { "dollar", 500, NULL },
- { "Lcaron", 667, NULL },
- { "ntilde", 556, NULL },
- { "Aogonek", 722, NULL },
- { "ncommaaccent", 556, NULL },
- { "minus", 570, NULL },
- { "Iogonek", 389, NULL },
- { "zacute", 444, NULL },
- { "yen", 500, NULL },
- { "space", 250, NULL },
- { "Omacron", 778, NULL },
- { "questiondown", 500, NULL },
- { "emdash", 1000, NULL },
- { "Agrave", 722, NULL },
- { "three", 500, NULL },
- { "numbersign", 500, NULL },
- { "lcaron", 394, NULL },
- { "A", 722, NULL },
- { "B", 667, NULL },
- { "C", 722, NULL },
- { "aogonek", 500, NULL },
- { "D", 722, NULL },
- { "E", 667, NULL },
- { "onequarter", 750, NULL },
- { "F", 611, NULL },
- { "G", 778, NULL },
- { "H", 778, NULL },
- { "I", 389, NULL },
- { "J", 500, NULL },
- { "K", 778, NULL },
- { "iogonek", 278, NULL },
- { "backslash", 278, NULL },
- { "L", 667, NULL },
- { "periodcentered", 250, NULL },
- { "M", 944, NULL },
- { "N", 722, NULL },
- { "omacron", 500, NULL },
- { "Tcommaaccent", 667, NULL },
- { "O", 778, NULL },
- { "P", 611, NULL },
- { "Q", 778, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 722, NULL },
- { "Aacute", 722, NULL },
- { "caron", 333, NULL },
- { "S", 556, NULL },
- { "T", 667, NULL },
- { "U", 722, NULL },
- { "agrave", 500, NULL },
- { "V", 722, NULL },
- { "W", 1000, NULL },
- { "X", 722, NULL },
- { "question", 500, NULL },
- { "equal", 570, NULL },
- { "Y", 722, NULL },
- { "Z", 667, NULL },
- { "four", 500, NULL },
- { "a", 500, NULL },
- { "Gcommaaccent", 778, NULL },
- { "b", 556, NULL },
- { "c", 444, NULL },
- { "d", 556, NULL },
- { "e", 444, NULL },
- { "f", 333, NULL },
- { "g", 500, NULL },
- { "bullet", 350, NULL },
- { "h", 556, NULL },
- { "i", 278, NULL },
- { "Oslash", 778, NULL },
- { "dagger", 500, NULL },
- { "j", 333, NULL },
- { "k", 556, NULL },
- { "l", 278, NULL },
- { "m", 833, NULL },
- { "n", 556, NULL },
- { "tcommaaccent", 333, NULL },
- { "o", 500, NULL },
- { "ordfeminine", 300, NULL },
- { "ring", 333, NULL },
- { "p", 556, NULL },
- { "q", 556, NULL },
- { "uhungarumlaut", 556, NULL },
- { "r", 444, NULL },
- { "twosuperior", 300, NULL },
- { "aacute", 500, NULL },
- { "s", 389, NULL },
- { "OE", 1000, NULL },
- { "t", 333, NULL },
- { "divide", 570, NULL },
- { "u", 556, NULL },
- { "Ccaron", 722, NULL },
- { "v", 500, NULL },
- { "w", 722, NULL },
- { "x", 500, NULL },
- { "y", 500, NULL },
- { "z", 444, NULL },
- { "Gbreve", 778, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 389, NULL },
- { "Nacute", 722, NULL },
- { "quotedbl", 555, NULL },
- { "gcommaaccent", 500, NULL },
- { "mu", 556, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 556, NULL },
- { "Lslash", 667, NULL },
- { "semicolon", 333, NULL },
- { "oslash", 500, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 494, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 444, NULL },
- { "Ecircumflex", 667, NULL },
- { "gbreve", 500, NULL },
- { "trademark", 1000, NULL },
- { "daggerdbl", 500, NULL },
- { "nacute", 556, NULL },
- { "macron", 333, NULL },
- { "Otilde", 778, NULL },
- { "Emacron", 667, NULL },
- { "ellipsis", 1000, NULL },
- { "scaron", 389, NULL },
- { "AE", 1000, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 278, NULL },
- { "quotedblleft", 500, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 278, NULL },
- { "eight", 500, NULL },
- { "exclamdown", 333, NULL },
- { "endash", 500, NULL },
- { "oe", 722, NULL },
- { "Abreve", 722, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 444, NULL },
- { "Adieresis", 722, NULL },
- { "copyright", 747, NULL },
- { "Egrave", 667, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 667, NULL },
- { "otilde", 500, NULL },
- { "Idieresis", 389, NULL },
- { "parenleft", 333, NULL },
- { "one", 500, NULL },
- { "emacron", 444, NULL },
- { "Odieresis", 778, NULL },
- { "ucircumflex", 556, NULL },
- { "bracketleft", 333, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 333, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 722, NULL },
- { "umacron", 556, NULL },
- { "abreve", 500, NULL },
- { "Eacute", 667, NULL },
- { "adieresis", 500, NULL },
- { "egrave", 444, NULL },
- { "edieresis", 444, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 722, NULL },
- { "asterisk", 500, NULL },
- { "odieresis", 500, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 556, NULL },
- { "nine", 500, NULL },
- { "five", 500, NULL },
- { "udieresis", 556, NULL },
- { "Zcaron", 667, NULL },
- { "Scommaaccent", 556, NULL },
- { "threequarters", 750, NULL },
- { "guillemotright", 500, NULL },
- { "Ccedilla", 722, NULL },
- { "ydieresis", 500, NULL },
- { "tilde", 333, NULL },
- { "at", 930, NULL },
- { "eacute", 444, NULL },
- { "underscore", 500, NULL },
- { "Euro", 500, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 570, NULL },
- { "zero", 500, NULL },
- { "eth", 500, NULL },
- { "Scedilla", 556, NULL },
- { "Ograve", 778, NULL },
- { "Racute", 722, NULL },
- { "partialdiff", 494, NULL },
- { "uacute", 556, NULL },
- { "braceleft", 394, NULL },
- { "Thorn", 611, NULL },
- { "zcaron", 444, NULL },
- { "scommaaccent", 389, NULL },
- { "ccedilla", 444, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 556, NULL },
- { "Ocircumflex", 778, NULL },
- { "Oacute", 778, NULL },
- { "scedilla", 389, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 500, NULL },
- { "racute", 444, NULL },
- { "Tcaron", 667, NULL },
- { "Eogonek", 667, NULL },
- { "thorn", 556, NULL },
- { "degree", 400, NULL },
- { "registered", 747, NULL },
- { "radical", 549, NULL },
- { "Aring", 722, NULL },
- { "percent", 1000, NULL },
- { "six", 500, NULL },
- { "paragraph", 540, NULL },
- { "dcaron", 672, NULL },
- { "Uogonek", 722, NULL },
- { "two", 500, NULL },
- { "summation", 600, NULL },
- { "Igrave", 389, NULL },
- { "Lacute", 667, NULL },
- { "ocircumflex", 500, NULL },
- { "oacute", 500, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 667, NULL },
- { "tcaron", 416, NULL },
- { "eogonek", 444, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 778, NULL },
- { "asciicircum", 581, NULL },
- { "aring", 500, NULL },
- { "grave", 333, NULL },
- { "uogonek", 556, NULL },
- { "bracketright", 333, NULL },
- { "Iacute", 389, NULL },
- { "ampersand", 833, NULL },
- { "igrave", 278, NULL },
- { "lacute", 278, NULL },
- { "Ncaron", 722, NULL },
- { "plus", 570, NULL },
- { "uring", 556, NULL },
- { "quotesinglbase", 333, NULL },
- { "lcommaaccent", 278, NULL },
- { "Yacute", 722, NULL },
- { "ohungarumlaut", 500, NULL },
- { "threesuperior", 300, NULL },
- { "acute", 333, NULL },
- { "section", 500, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 500, NULL },
- { "ncaron", 556, NULL },
- { "florin", 500, NULL },
- { "yacute", 500, NULL },
- { "Rcommaaccent", 722, NULL },
- { "fi", 556, NULL },
- { "fl", 556, NULL },
- { "Acircumflex", 722, NULL },
- { "Cacute", 722, NULL },
- { "Icircumflex", 389, NULL },
- { "guillemotleft", 500, NULL },
- { "germandbls", 556, NULL },
- { "Amacron", 722, NULL },
- { "seven", 500, NULL },
- { "Sacute", 556, NULL },
- { "ordmasculine", 330, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 500, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 389, NULL },
- { "rcommaaccent", 444, NULL },
- { "Zdotaccent", 667, NULL },
- { "acircumflex", 500, NULL },
- { "cacute", 444, NULL },
- { "Ecaron", 667, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 394, NULL },
- { "quotedblright", 500, NULL },
- { "amacron", 500, NULL },
- { "sacute", 389, NULL },
- { "imacron", 278, NULL },
- { "cent", 500, NULL },
- { "currency", 500, NULL },
- { "logicalnot", 570, NULL },
- { "zdotaccent", 444, NULL },
- { "Atilde", 722, NULL },
- { "breve", 333, NULL },
- { "bar", 220, NULL },
- { "fraction", 167, NULL },
- { "less", 570, NULL },
- { "ecaron", 444, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 333, NULL },
- { "period", 250, NULL },
- { "Rcaron", 722, NULL },
- { "Kcommaaccent", 778, NULL },
- { "greater", 570, NULL },
- { "atilde", 500, NULL },
- { "brokenbar", 220, NULL },
- { "quoteleft", 333, NULL },
- { "Edotaccent", 667, NULL },
- { "onesuperior", 300, NULL }
-};
-
-static BuiltinFontWidth timesBoldItalicWidthsTab[] = {
- { "Ntilde", 722, NULL },
- { "rcaron", 389, NULL },
- { "kcommaaccent", 500, NULL },
- { "Ncommaaccent", 722, NULL },
- { "Zacute", 611, NULL },
- { "comma", 250, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 570, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 444, NULL },
- { "asciitilde", 570, NULL },
- { "colon", 333, NULL },
- { "onehalf", 750, NULL },
- { "dollar", 500, NULL },
- { "Lcaron", 611, NULL },
- { "ntilde", 556, NULL },
- { "Aogonek", 667, NULL },
- { "ncommaaccent", 556, NULL },
- { "minus", 606, NULL },
- { "Iogonek", 389, NULL },
- { "zacute", 389, NULL },
- { "yen", 500, NULL },
- { "space", 250, NULL },
- { "Omacron", 722, NULL },
- { "questiondown", 500, NULL },
- { "emdash", 1000, NULL },
- { "Agrave", 667, NULL },
- { "three", 500, NULL },
- { "numbersign", 500, NULL },
- { "lcaron", 382, NULL },
- { "A", 667, NULL },
- { "B", 667, NULL },
- { "C", 667, NULL },
- { "aogonek", 500, NULL },
- { "D", 722, NULL },
- { "E", 667, NULL },
- { "onequarter", 750, NULL },
- { "F", 667, NULL },
- { "G", 722, NULL },
- { "H", 778, NULL },
- { "I", 389, NULL },
- { "J", 500, NULL },
- { "K", 667, NULL },
- { "iogonek", 278, NULL },
- { "backslash", 278, NULL },
- { "L", 611, NULL },
- { "periodcentered", 250, NULL },
- { "M", 889, NULL },
- { "N", 722, NULL },
- { "omacron", 500, NULL },
- { "Tcommaaccent", 611, NULL },
- { "O", 722, NULL },
- { "P", 611, NULL },
- { "Q", 722, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 667, NULL },
- { "Aacute", 667, NULL },
- { "caron", 333, NULL },
- { "S", 556, NULL },
- { "T", 611, NULL },
- { "U", 722, NULL },
- { "agrave", 500, NULL },
- { "V", 667, NULL },
- { "W", 889, NULL },
- { "X", 667, NULL },
- { "question", 500, NULL },
- { "equal", 570, NULL },
- { "Y", 611, NULL },
- { "Z", 611, NULL },
- { "four", 500, NULL },
- { "a", 500, NULL },
- { "Gcommaaccent", 722, NULL },
- { "b", 500, NULL },
- { "c", 444, NULL },
- { "d", 500, NULL },
- { "e", 444, NULL },
- { "f", 333, NULL },
- { "g", 500, NULL },
- { "bullet", 350, NULL },
- { "h", 556, NULL },
- { "i", 278, NULL },
- { "Oslash", 722, NULL },
- { "dagger", 500, NULL },
- { "j", 278, NULL },
- { "k", 500, NULL },
- { "l", 278, NULL },
- { "m", 778, NULL },
- { "n", 556, NULL },
- { "tcommaaccent", 278, NULL },
- { "o", 500, NULL },
- { "ordfeminine", 266, NULL },
- { "ring", 333, NULL },
- { "p", 500, NULL },
- { "q", 500, NULL },
- { "uhungarumlaut", 556, NULL },
- { "r", 389, NULL },
- { "twosuperior", 300, NULL },
- { "aacute", 500, NULL },
- { "s", 389, NULL },
- { "OE", 944, NULL },
- { "t", 278, NULL },
- { "divide", 570, NULL },
- { "u", 556, NULL },
- { "Ccaron", 667, NULL },
- { "v", 444, NULL },
- { "w", 667, NULL },
- { "x", 500, NULL },
- { "y", 444, NULL },
- { "z", 389, NULL },
- { "Gbreve", 722, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 389, NULL },
- { "Nacute", 722, NULL },
- { "quotedbl", 555, NULL },
- { "gcommaaccent", 500, NULL },
- { "mu", 576, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 556, NULL },
- { "Lslash", 611, NULL },
- { "semicolon", 333, NULL },
- { "oslash", 500, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 494, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 444, NULL },
- { "Ecircumflex", 667, NULL },
- { "gbreve", 500, NULL },
- { "trademark", 1000, NULL },
- { "daggerdbl", 500, NULL },
- { "nacute", 556, NULL },
- { "macron", 333, NULL },
- { "Otilde", 722, NULL },
- { "Emacron", 667, NULL },
- { "ellipsis", 1000, NULL },
- { "scaron", 389, NULL },
- { "AE", 944, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 278, NULL },
- { "quotedblleft", 500, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 278, NULL },
- { "eight", 500, NULL },
- { "exclamdown", 389, NULL },
- { "endash", 500, NULL },
- { "oe", 722, NULL },
- { "Abreve", 667, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 444, NULL },
- { "Adieresis", 667, NULL },
- { "copyright", 747, NULL },
- { "Egrave", 667, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 667, NULL },
- { "otilde", 500, NULL },
- { "Idieresis", 389, NULL },
- { "parenleft", 333, NULL },
- { "one", 500, NULL },
- { "emacron", 444, NULL },
- { "Odieresis", 722, NULL },
- { "ucircumflex", 556, NULL },
- { "bracketleft", 333, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 333, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 611, NULL },
- { "umacron", 556, NULL },
- { "abreve", 500, NULL },
- { "Eacute", 667, NULL },
- { "adieresis", 500, NULL },
- { "egrave", 444, NULL },
- { "edieresis", 444, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 722, NULL },
- { "asterisk", 500, NULL },
- { "odieresis", 500, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 556, NULL },
- { "nine", 500, NULL },
- { "five", 500, NULL },
- { "udieresis", 556, NULL },
- { "Zcaron", 611, NULL },
- { "Scommaaccent", 556, NULL },
- { "threequarters", 750, NULL },
- { "guillemotright", 500, NULL },
- { "Ccedilla", 667, NULL },
- { "ydieresis", 444, NULL },
- { "tilde", 333, NULL },
- { "at", 832, NULL },
- { "eacute", 444, NULL },
- { "underscore", 500, NULL },
- { "Euro", 500, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 570, NULL },
- { "zero", 500, NULL },
- { "eth", 500, NULL },
- { "Scedilla", 556, NULL },
- { "Ograve", 722, NULL },
- { "Racute", 667, NULL },
- { "partialdiff", 494, NULL },
- { "uacute", 556, NULL },
- { "braceleft", 348, NULL },
- { "Thorn", 611, NULL },
- { "zcaron", 389, NULL },
- { "scommaaccent", 389, NULL },
- { "ccedilla", 444, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 500, NULL },
- { "Ocircumflex", 722, NULL },
- { "Oacute", 722, NULL },
- { "scedilla", 389, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 500, NULL },
- { "racute", 389, NULL },
- { "Tcaron", 611, NULL },
- { "Eogonek", 667, NULL },
- { "thorn", 500, NULL },
- { "degree", 400, NULL },
- { "registered", 747, NULL },
- { "radical", 549, NULL },
- { "Aring", 667, NULL },
- { "percent", 833, NULL },
- { "six", 500, NULL },
- { "paragraph", 500, NULL },
- { "dcaron", 608, NULL },
- { "Uogonek", 722, NULL },
- { "two", 500, NULL },
- { "summation", 600, NULL },
- { "Igrave", 389, NULL },
- { "Lacute", 611, NULL },
- { "ocircumflex", 500, NULL },
- { "oacute", 500, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 611, NULL },
- { "tcaron", 366, NULL },
- { "eogonek", 444, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 722, NULL },
- { "asciicircum", 570, NULL },
- { "aring", 500, NULL },
- { "grave", 333, NULL },
- { "uogonek", 556, NULL },
- { "bracketright", 333, NULL },
- { "Iacute", 389, NULL },
- { "ampersand", 778, NULL },
- { "igrave", 278, NULL },
- { "lacute", 278, NULL },
- { "Ncaron", 722, NULL },
- { "plus", 570, NULL },
- { "uring", 556, NULL },
- { "quotesinglbase", 333, NULL },
- { "lcommaaccent", 278, NULL },
- { "Yacute", 611, NULL },
- { "ohungarumlaut", 500, NULL },
- { "threesuperior", 300, NULL },
- { "acute", 333, NULL },
- { "section", 500, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 500, NULL },
- { "ncaron", 556, NULL },
- { "florin", 500, NULL },
- { "yacute", 444, NULL },
- { "Rcommaaccent", 667, NULL },
- { "fi", 556, NULL },
- { "fl", 556, NULL },
- { "Acircumflex", 667, NULL },
- { "Cacute", 667, NULL },
- { "Icircumflex", 389, NULL },
- { "guillemotleft", 500, NULL },
- { "germandbls", 500, NULL },
- { "Amacron", 667, NULL },
- { "seven", 500, NULL },
- { "Sacute", 556, NULL },
- { "ordmasculine", 300, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 500, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 389, NULL },
- { "rcommaaccent", 389, NULL },
- { "Zdotaccent", 611, NULL },
- { "acircumflex", 500, NULL },
- { "cacute", 444, NULL },
- { "Ecaron", 667, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 348, NULL },
- { "quotedblright", 500, NULL },
- { "amacron", 500, NULL },
- { "sacute", 389, NULL },
- { "imacron", 278, NULL },
- { "cent", 500, NULL },
- { "currency", 500, NULL },
- { "logicalnot", 606, NULL },
- { "zdotaccent", 389, NULL },
- { "Atilde", 667, NULL },
- { "breve", 333, NULL },
- { "bar", 220, NULL },
- { "fraction", 167, NULL },
- { "less", 570, NULL },
- { "ecaron", 444, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 389, NULL },
- { "period", 250, NULL },
- { "Rcaron", 667, NULL },
- { "Kcommaaccent", 667, NULL },
- { "greater", 570, NULL },
- { "atilde", 500, NULL },
- { "brokenbar", 220, NULL },
- { "quoteleft", 333, NULL },
- { "Edotaccent", 667, NULL },
- { "onesuperior", 300, NULL }
-};
-
-static BuiltinFontWidth timesItalicWidthsTab[] = {
- { "Ntilde", 667, NULL },
- { "rcaron", 389, NULL },
- { "kcommaaccent", 444, NULL },
- { "Ncommaaccent", 667, NULL },
- { "Zacute", 556, NULL },
- { "comma", 250, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 675, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 444, NULL },
- { "asciitilde", 541, NULL },
- { "colon", 333, NULL },
- { "onehalf", 750, NULL },
- { "dollar", 500, NULL },
- { "Lcaron", 611, NULL },
- { "ntilde", 500, NULL },
- { "Aogonek", 611, NULL },
- { "ncommaaccent", 500, NULL },
- { "minus", 675, NULL },
- { "Iogonek", 333, NULL },
- { "zacute", 389, NULL },
- { "yen", 500, NULL },
- { "space", 250, NULL },
- { "Omacron", 722, NULL },
- { "questiondown", 500, NULL },
- { "emdash", 889, NULL },
- { "Agrave", 611, NULL },
- { "three", 500, NULL },
- { "numbersign", 500, NULL },
- { "lcaron", 300, NULL },
- { "A", 611, NULL },
- { "B", 611, NULL },
- { "C", 667, NULL },
- { "aogonek", 500, NULL },
- { "D", 722, NULL },
- { "E", 611, NULL },
- { "onequarter", 750, NULL },
- { "F", 611, NULL },
- { "G", 722, NULL },
- { "H", 722, NULL },
- { "I", 333, NULL },
- { "J", 444, NULL },
- { "K", 667, NULL },
- { "iogonek", 278, NULL },
- { "backslash", 278, NULL },
- { "L", 556, NULL },
- { "periodcentered", 250, NULL },
- { "M", 833, NULL },
- { "N", 667, NULL },
- { "omacron", 500, NULL },
- { "Tcommaaccent", 556, NULL },
- { "O", 722, NULL },
- { "P", 611, NULL },
- { "Q", 722, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 611, NULL },
- { "Aacute", 611, NULL },
- { "caron", 333, NULL },
- { "S", 500, NULL },
- { "T", 556, NULL },
- { "U", 722, NULL },
- { "agrave", 500, NULL },
- { "V", 611, NULL },
- { "W", 833, NULL },
- { "X", 611, NULL },
- { "question", 500, NULL },
- { "equal", 675, NULL },
- { "Y", 556, NULL },
- { "Z", 556, NULL },
- { "four", 500, NULL },
- { "a", 500, NULL },
- { "Gcommaaccent", 722, NULL },
- { "b", 500, NULL },
- { "c", 444, NULL },
- { "d", 500, NULL },
- { "e", 444, NULL },
- { "f", 278, NULL },
- { "g", 500, NULL },
- { "bullet", 350, NULL },
- { "h", 500, NULL },
- { "i", 278, NULL },
- { "Oslash", 722, NULL },
- { "dagger", 500, NULL },
- { "j", 278, NULL },
- { "k", 444, NULL },
- { "l", 278, NULL },
- { "m", 722, NULL },
- { "n", 500, NULL },
- { "tcommaaccent", 278, NULL },
- { "o", 500, NULL },
- { "ordfeminine", 276, NULL },
- { "ring", 333, NULL },
- { "p", 500, NULL },
- { "q", 500, NULL },
- { "uhungarumlaut", 500, NULL },
- { "r", 389, NULL },
- { "twosuperior", 300, NULL },
- { "aacute", 500, NULL },
- { "s", 389, NULL },
- { "OE", 944, NULL },
- { "t", 278, NULL },
- { "divide", 675, NULL },
- { "u", 500, NULL },
- { "Ccaron", 667, NULL },
- { "v", 444, NULL },
- { "w", 667, NULL },
- { "x", 444, NULL },
- { "y", 444, NULL },
- { "z", 389, NULL },
- { "Gbreve", 722, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 333, NULL },
- { "Nacute", 667, NULL },
- { "quotedbl", 420, NULL },
- { "gcommaaccent", 500, NULL },
- { "mu", 500, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 500, NULL },
- { "Lslash", 556, NULL },
- { "semicolon", 333, NULL },
- { "oslash", 500, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 471, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 444, NULL },
- { "Ecircumflex", 611, NULL },
- { "gbreve", 500, NULL },
- { "trademark", 980, NULL },
- { "daggerdbl", 500, NULL },
- { "nacute", 500, NULL },
- { "macron", 333, NULL },
- { "Otilde", 722, NULL },
- { "Emacron", 611, NULL },
- { "ellipsis", 889, NULL },
- { "scaron", 389, NULL },
- { "AE", 889, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 278, NULL },
- { "quotedblleft", 556, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 214, NULL },
- { "eight", 500, NULL },
- { "exclamdown", 389, NULL },
- { "endash", 500, NULL },
- { "oe", 667, NULL },
- { "Abreve", 611, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 444, NULL },
- { "Adieresis", 611, NULL },
- { "copyright", 760, NULL },
- { "Egrave", 611, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 611, NULL },
- { "otilde", 500, NULL },
- { "Idieresis", 333, NULL },
- { "parenleft", 333, NULL },
- { "one", 500, NULL },
- { "emacron", 444, NULL },
- { "Odieresis", 722, NULL },
- { "ucircumflex", 500, NULL },
- { "bracketleft", 389, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 333, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 556, NULL },
- { "umacron", 500, NULL },
- { "abreve", 500, NULL },
- { "Eacute", 611, NULL },
- { "adieresis", 500, NULL },
- { "egrave", 444, NULL },
- { "edieresis", 444, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 667, NULL },
- { "asterisk", 500, NULL },
- { "odieresis", 500, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 500, NULL },
- { "nine", 500, NULL },
- { "five", 500, NULL },
- { "udieresis", 500, NULL },
- { "Zcaron", 556, NULL },
- { "Scommaaccent", 500, NULL },
- { "threequarters", 750, NULL },
- { "guillemotright", 500, NULL },
- { "Ccedilla", 667, NULL },
- { "ydieresis", 444, NULL },
- { "tilde", 333, NULL },
- { "at", 920, NULL },
- { "eacute", 444, NULL },
- { "underscore", 500, NULL },
- { "Euro", 500, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 675, NULL },
- { "zero", 500, NULL },
- { "eth", 500, NULL },
- { "Scedilla", 500, NULL },
- { "Ograve", 722, NULL },
- { "Racute", 611, NULL },
- { "partialdiff", 476, NULL },
- { "uacute", 500, NULL },
- { "braceleft", 400, NULL },
- { "Thorn", 611, NULL },
- { "zcaron", 389, NULL },
- { "scommaaccent", 389, NULL },
- { "ccedilla", 444, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 500, NULL },
- { "Ocircumflex", 722, NULL },
- { "Oacute", 722, NULL },
- { "scedilla", 389, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 500, NULL },
- { "racute", 389, NULL },
- { "Tcaron", 556, NULL },
- { "Eogonek", 611, NULL },
- { "thorn", 500, NULL },
- { "degree", 400, NULL },
- { "registered", 760, NULL },
- { "radical", 453, NULL },
- { "Aring", 611, NULL },
- { "percent", 833, NULL },
- { "six", 500, NULL },
- { "paragraph", 523, NULL },
- { "dcaron", 544, NULL },
- { "Uogonek", 722, NULL },
- { "two", 500, NULL },
- { "summation", 600, NULL },
- { "Igrave", 333, NULL },
- { "Lacute", 556, NULL },
- { "ocircumflex", 500, NULL },
- { "oacute", 500, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 556, NULL },
- { "tcaron", 300, NULL },
- { "eogonek", 444, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 722, NULL },
- { "asciicircum", 422, NULL },
- { "aring", 500, NULL },
- { "grave", 333, NULL },
- { "uogonek", 500, NULL },
- { "bracketright", 389, NULL },
- { "Iacute", 333, NULL },
- { "ampersand", 778, NULL },
- { "igrave", 278, NULL },
- { "lacute", 278, NULL },
- { "Ncaron", 667, NULL },
- { "plus", 675, NULL },
- { "uring", 500, NULL },
- { "quotesinglbase", 333, NULL },
- { "lcommaaccent", 278, NULL },
- { "Yacute", 556, NULL },
- { "ohungarumlaut", 500, NULL },
- { "threesuperior", 300, NULL },
- { "acute", 333, NULL },
- { "section", 500, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 556, NULL },
- { "ncaron", 500, NULL },
- { "florin", 500, NULL },
- { "yacute", 444, NULL },
- { "Rcommaaccent", 611, NULL },
- { "fi", 500, NULL },
- { "fl", 500, NULL },
- { "Acircumflex", 611, NULL },
- { "Cacute", 667, NULL },
- { "Icircumflex", 333, NULL },
- { "guillemotleft", 500, NULL },
- { "germandbls", 500, NULL },
- { "Amacron", 611, NULL },
- { "seven", 500, NULL },
- { "Sacute", 500, NULL },
- { "ordmasculine", 310, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 500, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 333, NULL },
- { "rcommaaccent", 389, NULL },
- { "Zdotaccent", 556, NULL },
- { "acircumflex", 500, NULL },
- { "cacute", 444, NULL },
- { "Ecaron", 611, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 400, NULL },
- { "quotedblright", 556, NULL },
- { "amacron", 500, NULL },
- { "sacute", 389, NULL },
- { "imacron", 278, NULL },
- { "cent", 500, NULL },
- { "currency", 500, NULL },
- { "logicalnot", 675, NULL },
- { "zdotaccent", 389, NULL },
- { "Atilde", 611, NULL },
- { "breve", 333, NULL },
- { "bar", 275, NULL },
- { "fraction", 167, NULL },
- { "less", 675, NULL },
- { "ecaron", 444, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 333, NULL },
- { "period", 250, NULL },
- { "Rcaron", 611, NULL },
- { "Kcommaaccent", 667, NULL },
- { "greater", 675, NULL },
- { "atilde", 500, NULL },
- { "brokenbar", 275, NULL },
- { "quoteleft", 333, NULL },
- { "Edotaccent", 611, NULL },
- { "onesuperior", 300, NULL }
-};
-
-static BuiltinFontWidth timesRomanWidthsTab[] = {
- { "Ntilde", 722, NULL },
- { "rcaron", 333, NULL },
- { "kcommaaccent", 500, NULL },
- { "Ncommaaccent", 722, NULL },
- { "Zacute", 611, NULL },
- { "comma", 250, NULL },
- { "cedilla", 333, NULL },
- { "plusminus", 564, NULL },
- { "circumflex", 333, NULL },
- { "dotaccent", 333, NULL },
- { "edotaccent", 444, NULL },
- { "asciitilde", 541, NULL },
- { "colon", 278, NULL },
- { "onehalf", 750, NULL },
- { "dollar", 500, NULL },
- { "Lcaron", 611, NULL },
- { "ntilde", 500, NULL },
- { "Aogonek", 722, NULL },
- { "ncommaaccent", 500, NULL },
- { "minus", 564, NULL },
- { "Iogonek", 333, NULL },
- { "zacute", 444, NULL },
- { "yen", 500, NULL },
- { "space", 250, NULL },
- { "Omacron", 722, NULL },
- { "questiondown", 444, NULL },
- { "emdash", 1000, NULL },
- { "Agrave", 722, NULL },
- { "three", 500, NULL },
- { "numbersign", 500, NULL },
- { "lcaron", 344, NULL },
- { "A", 722, NULL },
- { "B", 667, NULL },
- { "C", 667, NULL },
- { "aogonek", 444, NULL },
- { "D", 722, NULL },
- { "E", 611, NULL },
- { "onequarter", 750, NULL },
- { "F", 556, NULL },
- { "G", 722, NULL },
- { "H", 722, NULL },
- { "I", 333, NULL },
- { "J", 389, NULL },
- { "K", 722, NULL },
- { "iogonek", 278, NULL },
- { "backslash", 278, NULL },
- { "L", 611, NULL },
- { "periodcentered", 250, NULL },
- { "M", 889, NULL },
- { "N", 722, NULL },
- { "omacron", 500, NULL },
- { "Tcommaaccent", 611, NULL },
- { "O", 722, NULL },
- { "P", 556, NULL },
- { "Q", 722, NULL },
- { "Uhungarumlaut", 722, NULL },
- { "R", 667, NULL },
- { "Aacute", 722, NULL },
- { "caron", 333, NULL },
- { "S", 556, NULL },
- { "T", 611, NULL },
- { "U", 722, NULL },
- { "agrave", 444, NULL },
- { "V", 722, NULL },
- { "W", 944, NULL },
- { "X", 722, NULL },
- { "question", 444, NULL },
- { "equal", 564, NULL },
- { "Y", 722, NULL },
- { "Z", 611, NULL },
- { "four", 500, NULL },
- { "a", 444, NULL },
- { "Gcommaaccent", 722, NULL },
- { "b", 500, NULL },
- { "c", 444, NULL },
- { "d", 500, NULL },
- { "e", 444, NULL },
- { "f", 333, NULL },
- { "g", 500, NULL },
- { "bullet", 350, NULL },
- { "h", 500, NULL },
- { "i", 278, NULL },
- { "Oslash", 722, NULL },
- { "dagger", 500, NULL },
- { "j", 278, NULL },
- { "k", 500, NULL },
- { "l", 278, NULL },
- { "m", 778, NULL },
- { "n", 500, NULL },
- { "tcommaaccent", 278, NULL },
- { "o", 500, NULL },
- { "ordfeminine", 276, NULL },
- { "ring", 333, NULL },
- { "p", 500, NULL },
- { "q", 500, NULL },
- { "uhungarumlaut", 500, NULL },
- { "r", 333, NULL },
- { "twosuperior", 300, NULL },
- { "aacute", 444, NULL },
- { "s", 389, NULL },
- { "OE", 889, NULL },
- { "t", 278, NULL },
- { "divide", 564, NULL },
- { "u", 500, NULL },
- { "Ccaron", 667, NULL },
- { "v", 500, NULL },
- { "w", 722, NULL },
- { "x", 500, NULL },
- { "y", 500, NULL },
- { "z", 444, NULL },
- { "Gbreve", 722, NULL },
- { "commaaccent", 250, NULL },
- { "hungarumlaut", 333, NULL },
- { "Idotaccent", 333, NULL },
- { "Nacute", 722, NULL },
- { "quotedbl", 408, NULL },
- { "gcommaaccent", 500, NULL },
- { "mu", 500, NULL },
- { "greaterequal", 549, NULL },
- { "Scaron", 556, NULL },
- { "Lslash", 611, NULL },
- { "semicolon", 278, NULL },
- { "oslash", 500, NULL },
- { "lessequal", 549, NULL },
- { "lozenge", 471, NULL },
- { "parenright", 333, NULL },
- { "ccaron", 444, NULL },
- { "Ecircumflex", 611, NULL },
- { "gbreve", 500, NULL },
- { "trademark", 980, NULL },
- { "daggerdbl", 500, NULL },
- { "nacute", 500, NULL },
- { "macron", 333, NULL },
- { "Otilde", 722, NULL },
- { "Emacron", 611, NULL },
- { "ellipsis", 1000, NULL },
- { "scaron", 389, NULL },
- { "AE", 889, NULL },
- { "Ucircumflex", 722, NULL },
- { "lslash", 278, NULL },
- { "quotedblleft", 444, NULL },
- { "guilsinglright", 333, NULL },
- { "hyphen", 333, NULL },
- { "quotesingle", 180, NULL },
- { "eight", 500, NULL },
- { "exclamdown", 333, NULL },
- { "endash", 500, NULL },
- { "oe", 722, NULL },
- { "Abreve", 722, NULL },
- { "Umacron", 722, NULL },
- { "ecircumflex", 444, NULL },
- { "Adieresis", 722, NULL },
- { "copyright", 760, NULL },
- { "Egrave", 611, NULL },
- { "slash", 278, NULL },
- { "Edieresis", 611, NULL },
- { "otilde", 500, NULL },
- { "Idieresis", 333, NULL },
- { "parenleft", 333, NULL },
- { "one", 500, NULL },
- { "emacron", 444, NULL },
- { "Odieresis", 722, NULL },
- { "ucircumflex", 500, NULL },
- { "bracketleft", 333, NULL },
- { "Ugrave", 722, NULL },
- { "quoteright", 333, NULL },
- { "Udieresis", 722, NULL },
- { "perthousand", 1000, NULL },
- { "Ydieresis", 722, NULL },
- { "umacron", 500, NULL },
- { "abreve", 444, NULL },
- { "Eacute", 611, NULL },
- { "adieresis", 444, NULL },
- { "egrave", 444, NULL },
- { "edieresis", 444, NULL },
- { "idieresis", 278, NULL },
- { "Eth", 722, NULL },
- { "ae", 667, NULL },
- { "asterisk", 500, NULL },
- { "odieresis", 500, NULL },
- { "Uacute", 722, NULL },
- { "ugrave", 500, NULL },
- { "nine", 500, NULL },
- { "five", 500, NULL },
- { "udieresis", 500, NULL },
- { "Zcaron", 611, NULL },
- { "Scommaaccent", 556, NULL },
- { "threequarters", 750, NULL },
- { "guillemotright", 500, NULL },
- { "Ccedilla", 667, NULL },
- { "ydieresis", 500, NULL },
- { "tilde", 333, NULL },
- { "at", 921, NULL },
- { "eacute", 444, NULL },
- { "underscore", 500, NULL },
- { "Euro", 500, NULL },
- { "Dcroat", 722, NULL },
- { "multiply", 564, NULL },
- { "zero", 500, NULL },
- { "eth", 500, NULL },
- { "Scedilla", 556, NULL },
- { "Ograve", 722, NULL },
- { "Racute", 667, NULL },
- { "partialdiff", 476, NULL },
- { "uacute", 500, NULL },
- { "braceleft", 480, NULL },
- { "Thorn", 556, NULL },
- { "zcaron", 444, NULL },
- { "scommaaccent", 389, NULL },
- { "ccedilla", 444, NULL },
- { "Dcaron", 722, NULL },
- { "dcroat", 500, NULL },
- { "Ocircumflex", 722, NULL },
- { "Oacute", 722, NULL },
- { "scedilla", 389, NULL },
- { "ogonek", 333, NULL },
- { "ograve", 500, NULL },
- { "racute", 333, NULL },
- { "Tcaron", 611, NULL },
- { "Eogonek", 611, NULL },
- { "thorn", 500, NULL },
- { "degree", 400, NULL },
- { "registered", 760, NULL },
- { "radical", 453, NULL },
- { "Aring", 722, NULL },
- { "percent", 833, NULL },
- { "six", 500, NULL },
- { "paragraph", 453, NULL },
- { "dcaron", 588, NULL },
- { "Uogonek", 722, NULL },
- { "two", 500, NULL },
- { "summation", 600, NULL },
- { "Igrave", 333, NULL },
- { "Lacute", 611, NULL },
- { "ocircumflex", 500, NULL },
- { "oacute", 500, NULL },
- { "Uring", 722, NULL },
- { "Lcommaaccent", 611, NULL },
- { "tcaron", 326, NULL },
- { "eogonek", 444, NULL },
- { "Delta", 612, NULL },
- { "Ohungarumlaut", 722, NULL },
- { "asciicircum", 469, NULL },
- { "aring", 444, NULL },
- { "grave", 333, NULL },
- { "uogonek", 500, NULL },
- { "bracketright", 333, NULL },
- { "Iacute", 333, NULL },
- { "ampersand", 778, NULL },
- { "igrave", 278, NULL },
- { "lacute", 278, NULL },
- { "Ncaron", 722, NULL },
- { "plus", 564, NULL },
- { "uring", 500, NULL },
- { "quotesinglbase", 333, NULL },
- { "lcommaaccent", 278, NULL },
- { "Yacute", 722, NULL },
- { "ohungarumlaut", 500, NULL },
- { "threesuperior", 300, NULL },
- { "acute", 333, NULL },
- { "section", 500, NULL },
- { "dieresis", 333, NULL },
- { "iacute", 278, NULL },
- { "quotedblbase", 444, NULL },
- { "ncaron", 500, NULL },
- { "florin", 500, NULL },
- { "yacute", 500, NULL },
- { "Rcommaaccent", 667, NULL },
- { "fi", 556, NULL },
- { "fl", 556, NULL },
- { "Acircumflex", 722, NULL },
- { "Cacute", 667, NULL },
- { "Icircumflex", 333, NULL },
- { "guillemotleft", 500, NULL },
- { "germandbls", 500, NULL },
- { "Amacron", 722, NULL },
- { "seven", 500, NULL },
- { "Sacute", 556, NULL },
- { "ordmasculine", 310, NULL },
- { "dotlessi", 278, NULL },
- { "sterling", 500, NULL },
- { "notequal", 549, NULL },
- { "Imacron", 333, NULL },
- { "rcommaaccent", 333, NULL },
- { "Zdotaccent", 611, NULL },
- { "acircumflex", 444, NULL },
- { "cacute", 444, NULL },
- { "Ecaron", 611, NULL },
- { "icircumflex", 278, NULL },
- { "braceright", 480, NULL },
- { "quotedblright", 444, NULL },
- { "amacron", 444, NULL },
- { "sacute", 389, NULL },
- { "imacron", 278, NULL },
- { "cent", 500, NULL },
- { "currency", 500, NULL },
- { "logicalnot", 564, NULL },
- { "zdotaccent", 444, NULL },
- { "Atilde", 722, NULL },
- { "breve", 333, NULL },
- { "bar", 200, NULL },
- { "fraction", 167, NULL },
- { "less", 564, NULL },
- { "ecaron", 444, NULL },
- { "guilsinglleft", 333, NULL },
- { "exclam", 333, NULL },
- { "period", 250, NULL },
- { "Rcaron", 667, NULL },
- { "Kcommaaccent", 722, NULL },
- { "greater", 564, NULL },
- { "atilde", 444, NULL },
- { "brokenbar", 200, NULL },
- { "quoteleft", 333, NULL },
- { "Edotaccent", 611, NULL },
- { "onesuperior", 300, NULL }
-};
-
-static BuiltinFontWidth zapfDingbatsWidthsTab[] = {
- { "a81", 438, NULL },
- { "a82", 138, NULL },
- { "a83", 277, NULL },
- { "a84", 415, NULL },
- { "a85", 509, NULL },
- { "a86", 410, NULL },
- { "a87", 234, NULL },
- { "a88", 234, NULL },
- { "a89", 390, NULL },
- { "a140", 788, NULL },
- { "a141", 788, NULL },
- { "a142", 788, NULL },
- { "a143", 788, NULL },
- { "a144", 788, NULL },
- { "a145", 788, NULL },
- { "a146", 788, NULL },
- { "a147", 788, NULL },
- { "a148", 788, NULL },
- { "a149", 788, NULL },
- { "a90", 390, NULL },
- { "a91", 276, NULL },
- { "a92", 276, NULL },
- { "space", 278, NULL },
- { "a93", 317, NULL },
- { "a94", 317, NULL },
- { "a95", 334, NULL },
- { "a96", 334, NULL },
- { "a97", 392, NULL },
- { "a98", 392, NULL },
- { "a99", 668, NULL },
- { "a150", 788, NULL },
- { "a151", 788, NULL },
- { "a152", 788, NULL },
- { "a153", 788, NULL },
- { "a154", 788, NULL },
- { "a155", 788, NULL },
- { "a156", 788, NULL },
- { "a157", 788, NULL },
- { "a158", 788, NULL },
- { "a159", 788, NULL },
- { "a160", 894, NULL },
- { "a161", 838, NULL },
- { "a162", 924, NULL },
- { "a163", 1016, NULL },
- { "a164", 458, NULL },
- { "a165", 924, NULL },
- { "a166", 918, NULL },
- { "a167", 927, NULL },
- { "a168", 928, NULL },
- { "a169", 928, NULL },
- { "a170", 834, NULL },
- { "a171", 873, NULL },
- { "a172", 828, NULL },
- { "a173", 924, NULL },
- { "a174", 917, NULL },
- { "a175", 930, NULL },
- { "a176", 931, NULL },
- { "a177", 463, NULL },
- { "a178", 883, NULL },
- { "a179", 836, NULL },
- { "a180", 867, NULL },
- { "a181", 696, NULL },
- { "a182", 874, NULL },
- { "a183", 760, NULL },
- { "a184", 946, NULL },
- { "a185", 865, NULL },
- { "a186", 967, NULL },
- { "a187", 831, NULL },
- { "a188", 873, NULL },
- { "a189", 927, NULL },
- { "a1", 974, NULL },
- { "a2", 961, NULL },
- { "a3", 980, NULL },
- { "a4", 719, NULL },
- { "a5", 789, NULL },
- { "a6", 494, NULL },
- { "a7", 552, NULL },
- { "a8", 537, NULL },
- { "a9", 577, NULL },
- { "a190", 970, NULL },
- { "a191", 918, NULL },
- { "a192", 748, NULL },
- { "a193", 836, NULL },
- { "a194", 771, NULL },
- { "a195", 888, NULL },
- { "a196", 748, NULL },
- { "a197", 771, NULL },
- { "a198", 888, NULL },
- { "a199", 867, NULL },
- { "a10", 692, NULL },
- { "a11", 960, NULL },
- { "a12", 939, NULL },
- { "a13", 549, NULL },
- { "a14", 855, NULL },
- { "a15", 911, NULL },
- { "a16", 933, NULL },
- { "a17", 945, NULL },
- { "a18", 974, NULL },
- { "a19", 755, NULL },
- { "a20", 846, NULL },
- { "a21", 762, NULL },
- { "a22", 761, NULL },
- { "a23", 571, NULL },
- { "a24", 677, NULL },
- { "a25", 763, NULL },
- { "a26", 760, NULL },
- { "a27", 759, NULL },
- { "a28", 754, NULL },
- { "a29", 786, NULL },
- { "a30", 788, NULL },
- { "a31", 788, NULL },
- { "a32", 790, NULL },
- { "a33", 793, NULL },
- { "a34", 794, NULL },
- { "a35", 816, NULL },
- { "a36", 823, NULL },
- { "a37", 789, NULL },
- { "a38", 841, NULL },
- { "a39", 823, NULL },
- { "a40", 833, NULL },
- { "a41", 816, NULL },
- { "a42", 831, NULL },
- { "a43", 923, NULL },
- { "a44", 744, NULL },
- { "a45", 723, NULL },
- { "a46", 749, NULL },
- { "a47", 790, NULL },
- { "a48", 792, NULL },
- { "a49", 695, NULL },
- { "a100", 668, NULL },
- { "a101", 732, NULL },
- { "a102", 544, NULL },
- { "a103", 544, NULL },
- { "a104", 910, NULL },
- { "a105", 911, NULL },
- { "a106", 667, NULL },
- { "a107", 760, NULL },
- { "a108", 760, NULL },
- { "a109", 626, NULL },
- { "a50", 776, NULL },
- { "a51", 768, NULL },
- { "a52", 792, NULL },
- { "a53", 759, NULL },
- { "a54", 707, NULL },
- { "a55", 708, NULL },
- { "a56", 682, NULL },
- { "a57", 701, NULL },
- { "a58", 826, NULL },
- { "a59", 815, NULL },
- { "a110", 694, NULL },
- { "a111", 595, NULL },
- { "a112", 776, NULL },
- { "a117", 690, NULL },
- { "a118", 791, NULL },
- { "a119", 790, NULL },
- { "a60", 789, NULL },
- { "a61", 789, NULL },
- { "a62", 707, NULL },
- { "a63", 687, NULL },
- { "a64", 696, NULL },
- { "a65", 689, NULL },
- { "a66", 786, NULL },
- { "a67", 787, NULL },
- { "a68", 713, NULL },
- { "a69", 791, NULL },
- { "a200", 696, NULL },
- { "a201", 874, NULL },
- { "a120", 788, NULL },
- { "a121", 788, NULL },
- { "a202", 974, NULL },
- { "a122", 788, NULL },
- { "a203", 762, NULL },
- { "a123", 788, NULL },
- { "a204", 759, NULL },
- { "a124", 788, NULL },
- { "a205", 509, NULL },
- { "a125", 788, NULL },
- { "a206", 410, NULL },
- { "a126", 788, NULL },
- { "a127", 788, NULL },
- { "a128", 788, NULL },
- { "a129", 788, NULL },
- { "a70", 785, NULL },
- { "a71", 791, NULL },
- { "a72", 873, NULL },
- { "a73", 761, NULL },
- { "a74", 762, NULL },
- { "a75", 759, NULL },
- { "a76", 892, NULL },
- { "a77", 892, NULL },
- { "a78", 788, NULL },
- { "a79", 784, NULL },
- { "a130", 788, NULL },
- { "a131", 788, NULL },
- { "a132", 788, NULL },
- { "a133", 788, NULL },
- { "a134", 788, NULL },
- { "a135", 788, NULL },
- { "a136", 788, NULL },
- { "a137", 788, NULL },
- { "a138", 788, NULL },
- { "a139", 788, NULL }
-};
-
-BuiltinFont builtinFonts[] = {
- { "Courier", standardEncoding, 629, -157, { -23, -250, 715, 805}, NULL },
- { "Courier-Bold", standardEncoding, 629, -157, {-113, -250, 749, 801}, NULL },
- { "Courier-BoldOblique", standardEncoding, 629, -157, { -57, -250, 869, 801}, NULL },
- { "Courier-Oblique", standardEncoding, 629, -157, { -27, -250, 849, 805}, NULL },
- { "Helvetica", standardEncoding, 718, -207, {-166, -225, 1000, 931}, NULL },
- { "Helvetica-Bold", standardEncoding, 718, -207, {-170, -228, 1003, 962}, NULL },
- { "Helvetica-BoldOblique", standardEncoding, 718, -207, {-174, -228, 1114, 962}, NULL },
- { "Helvetica-Oblique", standardEncoding, 718, -207, {-170, -225, 1116, 931}, NULL },
- { "Symbol", symbolEncoding, 1010, -293, {-180, -293, 1090, 1010}, NULL },
- { "Times-Bold", standardEncoding, 683, -217, {-168, -218, 1000, 935}, NULL },
- { "Times-BoldItalic", standardEncoding, 683, -217, {-200, -218, 996, 921}, NULL },
- { "Times-Italic", standardEncoding, 683, -217, {-169, -217, 1010, 883}, NULL },
- { "Times-Roman", standardEncoding, 683, -217, {-168, -218, 1000, 898}, NULL },
- { "ZapfDingbats", zapfDingbatsEncoding, 820, -143, { -1, -143, 981, 820}, NULL }
-};
-
-BuiltinFont *builtinFontSubst[] = {
- &builtinFonts[0],
- &builtinFonts[3],
- &builtinFonts[1],
- &builtinFonts[2],
- &builtinFonts[4],
- &builtinFonts[7],
- &builtinFonts[5],
- &builtinFonts[6],
- &builtinFonts[12],
- &builtinFonts[11],
- &builtinFonts[9],
- &builtinFonts[10]
-};
-
-void initBuiltinFontTables() {
- builtinFonts[0].widths = new BuiltinFontWidths(courierWidthsTab, 315);
- builtinFonts[1].widths = new BuiltinFontWidths(courierBoldWidthsTab, 315);
- builtinFonts[2].widths = new BuiltinFontWidths(courierBoldObliqueWidthsTab, 315);
- builtinFonts[3].widths = new BuiltinFontWidths(courierObliqueWidthsTab, 315);
- builtinFonts[4].widths = new BuiltinFontWidths(helveticaWidthsTab, 315);
- builtinFonts[5].widths = new BuiltinFontWidths(helveticaBoldWidthsTab, 316);
- builtinFonts[6].widths = new BuiltinFontWidths(helveticaBoldObliqueWidthsTab, 315);
- builtinFonts[7].widths = new BuiltinFontWidths(helveticaObliqueWidthsTab, 315);
- builtinFonts[8].widths = new BuiltinFontWidths(symbolWidthsTab, 190);
- builtinFonts[9].widths = new BuiltinFontWidths(timesBoldWidthsTab, 315);
- builtinFonts[10].widths = new BuiltinFontWidths(timesBoldItalicWidthsTab, 315);
- builtinFonts[11].widths = new BuiltinFontWidths(timesItalicWidthsTab, 315);
- builtinFonts[12].widths = new BuiltinFontWidths(timesRomanWidthsTab, 315);
- builtinFonts[13].widths = new BuiltinFontWidths(zapfDingbatsWidthsTab, 202);
-}
-
-void freeBuiltinFontTables() {
- int i;
-
- for (i = 0; i < 14; ++i) {
- delete builtinFonts[i].widths;
- }
-}
diff --git a/Build/source/libs/xpdf/xpdf/BuiltinFontTables.h b/Build/source/libs/xpdf/xpdf/BuiltinFontTables.h
deleted file mode 100644
index eb45549efd2..00000000000
--- a/Build/source/libs/xpdf/xpdf/BuiltinFontTables.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//========================================================================
-//
-// BuiltinFontTables.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef BUILTINFONTTABLES_H
-#define BUILTINFONTTABLES_H
-
-#include "BuiltinFont.h"
-
-#define nBuiltinFonts 14
-#define nBuiltinFontSubsts 12
-
-extern BuiltinFont builtinFonts[nBuiltinFonts];
-extern BuiltinFont *builtinFontSubst[nBuiltinFontSubsts];
-
-extern void initBuiltinFontTables();
-extern void freeBuiltinFontTables();
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/CMap.cc b/Build/source/libs/xpdf/xpdf/CMap.cc
deleted file mode 100644
index 303cf095224..00000000000
--- a/Build/source/libs/xpdf/xpdf/CMap.cc
+++ /dev/null
@@ -1,408 +0,0 @@
-//========================================================================
-//
-// CMap.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "gmem.h"
-#include "gfile.h"
-#include "GString.h"
-#include "Error.h"
-#include "GlobalParams.h"
-#include "PSTokenizer.h"
-#include "CMap.h"
-
-//------------------------------------------------------------------------
-
-struct CMapVectorEntry {
- GBool isVector;
- union {
- CMapVectorEntry *vector;
- CID cid;
- };
-};
-
-//------------------------------------------------------------------------
-
-static int getCharFromFile(void *data) {
- return fgetc((FILE *)data);
-}
-
-//------------------------------------------------------------------------
-
-CMap *CMap::parse(CMapCache *cache, GString *collectionA,
- GString *cMapNameA) {
- FILE *f;
- CMap *cmap;
- PSTokenizer *pst;
- char tok1[256], tok2[256], tok3[256];
- int n1, n2, n3;
- Guint start, end, code;
-
- if (!(f = globalParams->findCMapFile(collectionA, cMapNameA))) {
-
- // Check for an identity CMap.
- if (!cMapNameA->cmp("Identity") || !cMapNameA->cmp("Identity-H")) {
- return new CMap(collectionA->copy(), cMapNameA->copy(), 0);
- }
- if (!cMapNameA->cmp("Identity-V")) {
- return new CMap(collectionA->copy(), cMapNameA->copy(), 1);
- }
-
- error(-1, "Couldn't find '%s' CMap file for '%s' collection",
- cMapNameA->getCString(), collectionA->getCString());
- return NULL;
- }
-
- cmap = new CMap(collectionA->copy(), cMapNameA->copy());
-
- pst = new PSTokenizer(&getCharFromFile, f);
- pst->getToken(tok1, sizeof(tok1), &n1);
- while (pst->getToken(tok2, sizeof(tok2), &n2)) {
- if (!strcmp(tok2, "usecmap")) {
- if (tok1[0] == '/') {
- cmap->useCMap(cache, tok1 + 1);
- }
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else if (!strcmp(tok1, "/WMode")) {
- cmap->wMode = atoi(tok2);
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else if (!strcmp(tok2, "begincodespacerange")) {
- while (pst->getToken(tok1, sizeof(tok1), &n1)) {
- if (!strcmp(tok1, "endcodespacerange")) {
- break;
- }
- if (!pst->getToken(tok2, sizeof(tok2), &n2) ||
- !strcmp(tok2, "endcodespacerange")) {
- error(-1, "Illegal entry in codespacerange block in CMap");
- break;
- }
- if (tok1[0] == '<' && tok2[0] == '<' &&
- n1 == n2 && n1 >= 4 && (n1 & 1) == 0) {
- tok1[n1 - 1] = tok2[n1 - 1] = '\0';
- sscanf(tok1 + 1, "%x", &start);
- sscanf(tok2 + 1, "%x", &end);
- n1 = (n1 - 2) / 2;
- cmap->addCodeSpace(cmap->vector, start, end, n1);
- }
- }
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else if (!strcmp(tok2, "begincidchar")) {
- while (pst->getToken(tok1, sizeof(tok1), &n1)) {
- if (!strcmp(tok1, "endcidchar")) {
- break;
- }
- if (!pst->getToken(tok2, sizeof(tok2), &n2) ||
- !strcmp(tok2, "endcidchar")) {
- error(-1, "Illegal entry in cidchar block in CMap");
- break;
- }
- if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' &&
- n1 >= 4 && (n1 & 1) == 0)) {
- error(-1, "Illegal entry in cidchar block in CMap");
- continue;
- }
- tok1[n1 - 1] = '\0';
- if (sscanf(tok1 + 1, "%x", &code) != 1) {
- error(-1, "Illegal entry in cidchar block in CMap");
- continue;
- }
- n1 = (n1 - 2) / 2;
- cmap->addCIDs(code, code, n1, (CID)atoi(tok2));
- }
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else if (!strcmp(tok2, "begincidrange")) {
- while (pst->getToken(tok1, sizeof(tok1), &n1)) {
- if (!strcmp(tok1, "endcidrange")) {
- break;
- }
- if (!pst->getToken(tok2, sizeof(tok2), &n2) ||
- !strcmp(tok2, "endcidrange") ||
- !pst->getToken(tok3, sizeof(tok3), &n3) ||
- !strcmp(tok3, "endcidrange")) {
- error(-1, "Illegal entry in cidrange block in CMap");
- break;
- }
- if (tok1[0] == '<' && tok2[0] == '<' &&
- n1 == n2 && n1 >= 4 && (n1 & 1) == 0) {
- tok1[n1 - 1] = tok2[n1 - 1] = '\0';
- sscanf(tok1 + 1, "%x", &start);
- sscanf(tok2 + 1, "%x", &end);
- n1 = (n1 - 2) / 2;
- cmap->addCIDs(start, end, n1, (CID)atoi(tok3));
- }
- }
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else {
- strcpy(tok1, tok2);
- }
- }
- delete pst;
-
- fclose(f);
-
- return cmap;
-}
-
-CMap::CMap(GString *collectionA, GString *cMapNameA) {
- int i;
-
- collection = collectionA;
- cMapName = cMapNameA;
- wMode = 0;
- vector = (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry));
- for (i = 0; i < 256; ++i) {
- vector[i].isVector = gFalse;
- vector[i].cid = 0;
- }
- refCnt = 1;
-#if MULTITHREADED
- gInitMutex(&mutex);
-#endif
-}
-
-CMap::CMap(GString *collectionA, GString *cMapNameA, int wModeA) {
- collection = collectionA;
- cMapName = cMapNameA;
- wMode = wModeA;
- vector = NULL;
- refCnt = 1;
-#if MULTITHREADED
- gInitMutex(&mutex);
-#endif
-}
-
-void CMap::useCMap(CMapCache *cache, char *useName) {
- GString *useNameStr;
- CMap *subCMap;
-
- useNameStr = new GString(useName);
- subCMap = cache->getCMap(collection, useNameStr);
- delete useNameStr;
- if (!subCMap) {
- return;
- }
- copyVector(vector, subCMap->vector);
- subCMap->decRefCnt();
-}
-
-void CMap::copyVector(CMapVectorEntry *dest, CMapVectorEntry *src) {
- int i, j;
-
- for (i = 0; i < 256; ++i) {
- if (src[i].isVector) {
- if (!dest[i].isVector) {
- dest[i].isVector = gTrue;
- dest[i].vector =
- (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry));
- for (j = 0; j < 256; ++j) {
- dest[i].vector[j].isVector = gFalse;
- dest[i].vector[j].cid = 0;
- }
- }
- copyVector(dest[i].vector, src[i].vector);
- } else {
- if (dest[i].isVector) {
- error(-1, "Collision in usecmap");
- } else {
- dest[i].cid = src[i].cid;
- }
- }
- }
-}
-
-void CMap::addCodeSpace(CMapVectorEntry *vec, Guint start, Guint end,
- Guint nBytes) {
- Guint start2, end2;
- int startByte, endByte, i, j;
-
- if (nBytes > 1) {
- startByte = (start >> (8 * (nBytes - 1))) & 0xff;
- endByte = (end >> (8 * (nBytes - 1))) & 0xff;
- start2 = start & ((1 << (8 * (nBytes - 1))) - 1);
- end2 = end & ((1 << (8 * (nBytes - 1))) - 1);
- for (i = startByte; i <= endByte; ++i) {
- if (!vec[i].isVector) {
- vec[i].isVector = gTrue;
- vec[i].vector =
- (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry));
- for (j = 0; j < 256; ++j) {
- vec[i].vector[j].isVector = gFalse;
- vec[i].vector[j].cid = 0;
- }
- }
- addCodeSpace(vec[i].vector, start2, end2, nBytes - 1);
- }
- }
-}
-
-void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) {
- CMapVectorEntry *vec;
- CID cid;
- int byte;
- Guint i;
-
- vec = vector;
- for (i = nBytes - 1; i >= 1; --i) {
- byte = (start >> (8 * i)) & 0xff;
- if (!vec[byte].isVector) {
- error(-1, "Invalid CID (%0*x - %0*x) in CMap",
- 2*nBytes, start, 2*nBytes, end);
- return;
- }
- vec = vec[byte].vector;
- }
- cid = firstCID;
- for (byte = (int)(start & 0xff); byte <= (int)(end & 0xff); ++byte) {
- if (vec[byte].isVector) {
- error(-1, "Invalid CID (%0*x - %0*x) in CMap",
- 2*nBytes, start, 2*nBytes, end);
- } else {
- vec[byte].cid = cid;
- }
- ++cid;
- }
-}
-
-CMap::~CMap() {
- delete collection;
- delete cMapName;
- if (vector) {
- freeCMapVector(vector);
- }
-#if MULTITHREADED
- gDestroyMutex(&mutex);
-#endif
-}
-
-void CMap::freeCMapVector(CMapVectorEntry *vec) {
- int i;
-
- for (i = 0; i < 256; ++i) {
- if (vec[i].isVector) {
- freeCMapVector(vec[i].vector);
- }
- }
- gfree(vec);
-}
-
-void CMap::incRefCnt() {
-#if MULTITHREADED
- gLockMutex(&mutex);
-#endif
- ++refCnt;
-#if MULTITHREADED
- gUnlockMutex(&mutex);
-#endif
-}
-
-void CMap::decRefCnt() {
- GBool done;
-
-#if MULTITHREADED
- gLockMutex(&mutex);
-#endif
- done = --refCnt == 0;
-#if MULTITHREADED
- gUnlockMutex(&mutex);
-#endif
- if (done) {
- delete this;
- }
-}
-
-GBool CMap::match(GString *collectionA, GString *cMapNameA) {
- return !collection->cmp(collectionA) && !cMapName->cmp(cMapNameA);
-}
-
-CID CMap::getCID(char *s, int len, int *nUsed) {
- CMapVectorEntry *vec;
- int n, i;
-
- if (!(vec = vector)) {
- // identity CMap
- *nUsed = 2;
- if (len < 2) {
- return 0;
- }
- return ((s[0] & 0xff) << 8) + (s[1] & 0xff);
- }
- n = 0;
- while (1) {
- if (n >= len) {
- *nUsed = n;
- return 0;
- }
- i = s[n++] & 0xff;
- if (!vec[i].isVector) {
- *nUsed = n;
- return vec[i].cid;
- }
- vec = vec[i].vector;
- }
-}
-
-//------------------------------------------------------------------------
-
-CMapCache::CMapCache() {
- int i;
-
- for (i = 0; i < cMapCacheSize; ++i) {
- cache[i] = NULL;
- }
-}
-
-CMapCache::~CMapCache() {
- int i;
-
- for (i = 0; i < cMapCacheSize; ++i) {
- if (cache[i]) {
- cache[i]->decRefCnt();
- }
- }
-}
-
-CMap *CMapCache::getCMap(GString *collection, GString *cMapName) {
- CMap *cmap;
- int i, j;
-
- if (cache[0] && cache[0]->match(collection, cMapName)) {
- cache[0]->incRefCnt();
- return cache[0];
- }
- for (i = 1; i < cMapCacheSize; ++i) {
- if (cache[i] && cache[i]->match(collection, cMapName)) {
- cmap = cache[i];
- for (j = i; j >= 1; --j) {
- cache[j] = cache[j - 1];
- }
- cache[0] = cmap;
- cmap->incRefCnt();
- return cmap;
- }
- }
- if ((cmap = CMap::parse(this, collection, cMapName))) {
- if (cache[cMapCacheSize - 1]) {
- cache[cMapCacheSize - 1]->decRefCnt();
- }
- for (j = cMapCacheSize - 1; j >= 1; --j) {
- cache[j] = cache[j - 1];
- }
- cache[0] = cmap;
- cmap->incRefCnt();
- return cmap;
- }
- return NULL;
-}
diff --git a/Build/source/libs/xpdf/xpdf/CMap.h b/Build/source/libs/xpdf/xpdf/CMap.h
deleted file mode 100644
index c321a57abf6..00000000000
--- a/Build/source/libs/xpdf/xpdf/CMap.h
+++ /dev/null
@@ -1,102 +0,0 @@
-//========================================================================
-//
-// CMap.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef CMAP_H
-#define CMAP_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "CharTypes.h"
-
-#if MULTITHREADED
-#include "GMutex.h"
-#endif
-
-class GString;
-struct CMapVectorEntry;
-class CMapCache;
-
-//------------------------------------------------------------------------
-
-class CMap {
-public:
-
- // Create the CMap specified by <collection> and <cMapName>. Sets
- // the initial reference count to 1. Returns NULL on failure.
- static CMap *parse(CMapCache *cache, GString *collectionA,
- GString *cMapNameA);
-
- ~CMap();
-
- void incRefCnt();
- void decRefCnt();
-
- // Return collection name (<registry>-<ordering>).
- GString *getCollection() { return collection; }
-
- // Return true if this CMap matches the specified <collectionA>, and
- // <cMapNameA>.
- GBool match(GString *collectionA, GString *cMapNameA);
-
- // Return the CID corresponding to the character code starting at
- // <s>, which contains <len> bytes. Sets *<nUsed> to the number of
- // bytes used by the char code.
- CID getCID(char *s, int len, int *nUsed);
-
- // Return the writing mode (0=horizontal, 1=vertical).
- int getWMode() { return wMode; }
-
-private:
-
- CMap(GString *collectionA, GString *cMapNameA);
- CMap(GString *collectionA, GString *cMapNameA, int wModeA);
- void useCMap(CMapCache *cache, char *useName);
- void copyVector(CMapVectorEntry *dest, CMapVectorEntry *src);
- void addCodeSpace(CMapVectorEntry *vec, Guint start, Guint end,
- Guint nBytes);
- void addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID);
- void freeCMapVector(CMapVectorEntry *vec);
-
- GString *collection;
- GString *cMapName;
- int wMode; // writing mode (0=horizontal, 1=vertical)
- CMapVectorEntry *vector; // vector for first byte (NULL for
- // identity CMap)
- int refCnt;
-#if MULTITHREADED
- GMutex mutex;
-#endif
-};
-
-//------------------------------------------------------------------------
-
-#define cMapCacheSize 4
-
-class CMapCache {
-public:
-
- CMapCache();
- ~CMapCache();
-
- // Get the <cMapName> CMap for the specified character collection.
- // Increments its reference count; there will be one reference for
- // the cache plus one for the caller of this function. Returns NULL
- // on failure.
- CMap *getCMap(GString *collection, GString *cMapName);
-
-private:
-
- CMap *cache[cMapCacheSize];
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Catalog.cc b/Build/source/libs/xpdf/xpdf/Catalog.cc
deleted file mode 100644
index de282c3feb6..00000000000
--- a/Build/source/libs/xpdf/xpdf/Catalog.cc
+++ /dev/null
@@ -1,374 +0,0 @@
-//========================================================================
-//
-// Catalog.cc
-//
-// Copyright 1996-2007 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include "gmem.h"
-#include "Object.h"
-#include "XRef.h"
-#include "Array.h"
-#include "Dict.h"
-#include "Page.h"
-#include "Error.h"
-#include "Link.h"
-#include "Catalog.h"
-
-//------------------------------------------------------------------------
-// Catalog
-//------------------------------------------------------------------------
-
-Catalog::Catalog(XRef *xrefA) {
- Object catDict, pagesDict, pagesDictRef;
- Object obj, obj2;
- char *alreadyRead;
- int numPages0;
- int i;
-
- ok = gTrue;
- xref = xrefA;
- pages = NULL;
- pageRefs = NULL;
- numPages = pagesSize = 0;
- baseURI = NULL;
-
- xref->getCatalog(&catDict);
- if (!catDict.isDict()) {
- error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName());
- goto err1;
- }
-
- // read page tree
- catDict.dictLookup("Pages", &pagesDict);
- // This should really be isDict("Pages"), but I've seen at least one
- // PDF file where the /Type entry is missing.
- if (!pagesDict.isDict()) {
- error(-1, "Top-level pages object is wrong type (%s)",
- pagesDict.getTypeName());
- goto err2;
- }
- pagesDict.dictLookup("Count", &obj);
- // some PDF files actually use real numbers here ("/Count 9.0")
- if (!obj.isNum()) {
- error(-1, "Page count in top-level pages object is wrong type (%s)",
- obj.getTypeName());
- goto err3;
- }
- pagesSize = numPages0 = (int)obj.getNum();
- obj.free();
- pages = (Page **)gmallocn(pagesSize, sizeof(Page *));
- pageRefs = (Ref *)gmallocn(pagesSize, sizeof(Ref));
- for (i = 0; i < pagesSize; ++i) {
- pages[i] = NULL;
- pageRefs[i].num = -1;
- pageRefs[i].gen = -1;
- }
- alreadyRead = (char *)gmalloc(xref->getNumObjects());
- memset(alreadyRead, 0, xref->getNumObjects());
- if (catDict.dictLookupNF("Pages", &pagesDictRef)->isRef() &&
- pagesDictRef.getRefNum() >= 0 &&
- pagesDictRef.getRefNum() < xref->getNumObjects()) {
- alreadyRead[pagesDictRef.getRefNum()] = 1;
- }
- pagesDictRef.free();
- numPages = readPageTree(pagesDict.getDict(), NULL, 0, alreadyRead);
- gfree(alreadyRead);
- if (numPages != numPages0) {
- error(-1, "Page count in top-level pages object is incorrect");
- }
- pagesDict.free();
-
- // read named destination dictionary
- catDict.dictLookup("Dests", &dests);
-
- // read root of named destination tree
- if (catDict.dictLookup("Names", &obj)->isDict())
- obj.dictLookup("Dests", &nameTree);
- else
- nameTree.initNull();
- obj.free();
-
- // read base URI
- if (catDict.dictLookup("URI", &obj)->isDict()) {
- if (obj.dictLookup("Base", &obj2)->isString()) {
- baseURI = obj2.getString()->copy();
- }
- obj2.free();
- }
- obj.free();
-
- // get the metadata stream
- catDict.dictLookup("Metadata", &metadata);
-
- // get the structure tree root
- catDict.dictLookup("StructTreeRoot", &structTreeRoot);
-
- // get the outline dictionary
- catDict.dictLookup("Outlines", &outline);
-
- // get the AcroForm dictionary
- catDict.dictLookup("AcroForm", &acroForm);
-
- catDict.free();
- return;
-
- err3:
- obj.free();
- err2:
- pagesDict.free();
- err1:
- catDict.free();
- dests.initNull();
- nameTree.initNull();
- ok = gFalse;
-}
-
-Catalog::~Catalog() {
- int i;
-
- if (pages) {
- for (i = 0; i < pagesSize; ++i) {
- if (pages[i]) {
- delete pages[i];
- }
- }
- gfree(pages);
- gfree(pageRefs);
- }
- dests.free();
- nameTree.free();
- if (baseURI) {
- delete baseURI;
- }
- metadata.free();
- structTreeRoot.free();
- outline.free();
- acroForm.free();
-}
-
-GString *Catalog::readMetadata() {
- GString *s;
- Dict *dict;
- Object obj;
- int c;
-
- if (!metadata.isStream()) {
- return NULL;
- }
- dict = metadata.streamGetDict();
- if (!dict->lookup("Subtype", &obj)->isName("XML")) {
- error(-1, "Unknown Metadata type: '%s'",
- obj.isName() ? obj.getName() : "???");
- }
- obj.free();
- s = new GString();
- metadata.streamReset();
- while ((c = metadata.streamGetChar()) != EOF) {
- s->append(c);
- }
- metadata.streamClose();
- return s;
-}
-
-int Catalog::readPageTree(Dict *pagesDict, PageAttrs *attrs, int start,
- char *alreadyRead) {
- Object kids;
- Object kid;
- Object kidRef;
- PageAttrs *attrs1, *attrs2;
- Page *page;
- int i, j;
-
- attrs1 = new PageAttrs(attrs, pagesDict);
- pagesDict->lookup("Kids", &kids);
- if (!kids.isArray()) {
- error(-1, "Kids object (page %d) is wrong type (%s)",
- start+1, kids.getTypeName());
- goto err1;
- }
- for (i = 0; i < kids.arrayGetLength(); ++i) {
- kids.arrayGetNF(i, &kidRef);
- if (kidRef.isRef() &&
- kidRef.getRefNum() >= 0 &&
- kidRef.getRefNum() < xref->getNumObjects()) {
- if (alreadyRead[kidRef.getRefNum()]) {
- error(-1, "Loop in Pages tree");
- kidRef.free();
- continue;
- }
- alreadyRead[kidRef.getRefNum()] = 1;
- }
- kids.arrayGet(i, &kid);
- if (kid.isDict("Page")) {
- attrs2 = new PageAttrs(attrs1, kid.getDict());
- page = new Page(xref, start+1, kid.getDict(), attrs2);
- if (!page->isOk()) {
- ++start;
- goto err3;
- }
- if (start >= pagesSize) {
- pagesSize += 32;
- pages = (Page **)greallocn(pages, pagesSize, sizeof(Page *));
- pageRefs = (Ref *)greallocn(pageRefs, pagesSize, sizeof(Ref));
- for (j = pagesSize - 32; j < pagesSize; ++j) {
- pages[j] = NULL;
- pageRefs[j].num = -1;
- pageRefs[j].gen = -1;
- }
- }
- pages[start] = page;
- if (kidRef.isRef()) {
- pageRefs[start].num = kidRef.getRefNum();
- pageRefs[start].gen = kidRef.getRefGen();
- }
- ++start;
- // This should really be isDict("Pages"), but I've seen at least one
- // PDF file where the /Type entry is missing.
- } else if (kid.isDict()) {
- if ((start = readPageTree(kid.getDict(), attrs1, start, alreadyRead))
- < 0)
- goto err2;
- } else {
- error(-1, "Kid object (page %d) is wrong type (%s)",
- start+1, kid.getTypeName());
- }
- kid.free();
- kidRef.free();
- }
- delete attrs1;
- kids.free();
- return start;
-
- err3:
- delete page;
- err2:
- kid.free();
- err1:
- kids.free();
- delete attrs1;
- ok = gFalse;
- return -1;
-}
-
-int Catalog::findPage(int num, int gen) {
- int i;
-
- for (i = 0; i < numPages; ++i) {
- if (pageRefs[i].num == num && pageRefs[i].gen == gen)
- return i + 1;
- }
- return 0;
-}
-
-LinkDest *Catalog::findDest(GString *name) {
- LinkDest *dest;
- Object obj1, obj2;
- GBool found;
-
- // try named destination dictionary then name tree
- found = gFalse;
- if (dests.isDict()) {
- if (!dests.dictLookup(name->getCString(), &obj1)->isNull())
- found = gTrue;
- else
- obj1.free();
- }
- if (!found && nameTree.isDict()) {
- if (!findDestInTree(&nameTree, name, &obj1)->isNull())
- found = gTrue;
- else
- obj1.free();
- }
- if (!found)
- return NULL;
-
- // construct LinkDest
- dest = NULL;
- if (obj1.isArray()) {
- dest = new LinkDest(obj1.getArray());
- } else if (obj1.isDict()) {
- if (obj1.dictLookup("D", &obj2)->isArray())
- dest = new LinkDest(obj2.getArray());
- else
- error(-1, "Bad named destination value");
- obj2.free();
- } else {
- error(-1, "Bad named destination value");
- }
- obj1.free();
- if (dest && !dest->isOk()) {
- delete dest;
- dest = NULL;
- }
-
- return dest;
-}
-
-Object *Catalog::findDestInTree(Object *tree, GString *name, Object *obj) {
- Object names, name1;
- Object kids, kid, limits, low, high;
- GBool done, found;
- int cmp, i;
-
- // leaf node
- if (tree->dictLookup("Names", &names)->isArray()) {
- done = found = gFalse;
- for (i = 0; !done && i < names.arrayGetLength(); i += 2) {
- if (names.arrayGet(i, &name1)->isString()) {
- cmp = name->cmp(name1.getString());
- if (cmp == 0) {
- names.arrayGet(i+1, obj);
- found = gTrue;
- done = gTrue;
- } else if (cmp < 0) {
- done = gTrue;
- }
- }
- name1.free();
- }
- names.free();
- if (!found)
- obj->initNull();
- return obj;
- }
- names.free();
-
- // root or intermediate node
- done = gFalse;
- if (tree->dictLookup("Kids", &kids)->isArray()) {
- for (i = 0; !done && i < kids.arrayGetLength(); ++i) {
- if (kids.arrayGet(i, &kid)->isDict()) {
- if (kid.dictLookup("Limits", &limits)->isArray()) {
- if (limits.arrayGet(0, &low)->isString() &&
- name->cmp(low.getString()) >= 0) {
- if (limits.arrayGet(1, &high)->isString() &&
- name->cmp(high.getString()) <= 0) {
- findDestInTree(&kid, name, obj);
- done = gTrue;
- }
- high.free();
- }
- low.free();
- }
- limits.free();
- }
- kid.free();
- }
- }
- kids.free();
-
- // name was outside of ranges of all kids
- if (!done)
- obj->initNull();
-
- return obj;
-}
diff --git a/Build/source/libs/xpdf/xpdf/Catalog.h b/Build/source/libs/xpdf/xpdf/Catalog.h
deleted file mode 100644
index 6403194f974..00000000000
--- a/Build/source/libs/xpdf/xpdf/Catalog.h
+++ /dev/null
@@ -1,97 +0,0 @@
-//========================================================================
-//
-// Catalog.h
-//
-// Copyright 1996-2007 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef CATALOG_H
-#define CATALOG_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-class XRef;
-class Object;
-class Page;
-class PageAttrs;
-struct Ref;
-class LinkDest;
-
-//------------------------------------------------------------------------
-// Catalog
-//------------------------------------------------------------------------
-
-class Catalog {
-public:
-
- // Constructor.
- Catalog(XRef *xrefA);
-
- // Destructor.
- ~Catalog();
-
- // Is catalog valid?
- GBool isOk() { return ok; }
-
- // Get number of pages.
- int getNumPages() { return numPages; }
-
- // Get a page.
- Page *getPage(int i) { return pages[i-1]; }
-
- // Get the reference for a page object.
- Ref *getPageRef(int i) { return &pageRefs[i-1]; }
-
- // Return base URI, or NULL if none.
- GString *getBaseURI() { return baseURI; }
-
- // Return the contents of the metadata stream, or NULL if there is
- // no metadata.
- GString *readMetadata();
-
- // Return the structure tree root object.
- Object *getStructTreeRoot() { return &structTreeRoot; }
-
- // Find a page, given its object ID. Returns page number, or 0 if
- // not found.
- int findPage(int num, int gen);
-
- // Find a named destination. Returns the link destination, or
- // NULL if <name> is not a destination.
- LinkDest *findDest(GString *name);
-
- Object *getDests() { return &dests; }
-
- Object *getNameTree() { return &nameTree; }
-
- Object *getOutline() { return &outline; }
-
- Object *getAcroForm() { return &acroForm; }
-
-private:
-
- XRef *xref; // the xref table for this PDF file
- Page **pages; // array of pages
- Ref *pageRefs; // object ID for each page
- int numPages; // number of pages
- int pagesSize; // size of pages array
- Object dests; // named destination dictionary
- Object nameTree; // name tree
- GString *baseURI; // base URI for URI-type links
- Object metadata; // metadata stream
- Object structTreeRoot; // structure tree root dictionary
- Object outline; // outline dictionary
- Object acroForm; // AcroForm dictionary
- GBool ok; // true if catalog is valid
-
- int readPageTree(Dict *pages, PageAttrs *attrs, int start,
- char *alreadyRead);
- Object *findDestInTree(Object *tree, GString *name, Object *obj);
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/CharCodeToUnicode.cc b/Build/source/libs/xpdf/xpdf/CharCodeToUnicode.cc
deleted file mode 100644
index 3702a16d5a5..00000000000
--- a/Build/source/libs/xpdf/xpdf/CharCodeToUnicode.cc
+++ /dev/null
@@ -1,540 +0,0 @@
-//========================================================================
-//
-// CharCodeToUnicode.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include "gmem.h"
-#include "gfile.h"
-#include "GString.h"
-#include "Error.h"
-#include "GlobalParams.h"
-#include "PSTokenizer.h"
-#include "CharCodeToUnicode.h"
-
-//------------------------------------------------------------------------
-
-#define maxUnicodeString 8
-
-struct CharCodeToUnicodeString {
- CharCode c;
- Unicode u[maxUnicodeString];
- int len;
-};
-
-//------------------------------------------------------------------------
-
-static int getCharFromString(void *data) {
- char *p;
- int c;
-
- p = *(char **)data;
- if (*p) {
- c = *p++;
- *(char **)data = p;
- } else {
- c = EOF;
- }
- return c;
-}
-
-static int getCharFromFile(void *data) {
- return fgetc((FILE *)data);
-}
-
-//------------------------------------------------------------------------
-
-CharCodeToUnicode *CharCodeToUnicode::parseCIDToUnicode(GString *fileName,
- GString *collection) {
- FILE *f;
- Unicode *mapA;
- CharCode size, mapLenA;
- char buf[64];
- Unicode u;
- CharCodeToUnicode *ctu;
-
- if (!(f = fopen(fileName->getCString(), "r"))) {
- error(-1, "Couldn't open cidToUnicode file '%s'",
- fileName->getCString());
- return NULL;
- }
-
- size = 32768;
- mapA = (Unicode *)gmallocn(size, sizeof(Unicode));
- mapLenA = 0;
-
- while (getLine(buf, sizeof(buf), f)) {
- if (mapLenA == size) {
- size *= 2;
- mapA = (Unicode *)greallocn(mapA, size, sizeof(Unicode));
- }
- if (sscanf(buf, "%x", &u) == 1) {
- mapA[mapLenA] = u;
- } else {
- error(-1, "Bad line (%d) in cidToUnicode file '%s'",
- (int)(mapLenA + 1), fileName->getCString());
- mapA[mapLenA] = 0;
- }
- ++mapLenA;
- }
- fclose(f);
-
- ctu = new CharCodeToUnicode(collection->copy(), mapA, mapLenA, gTrue,
- NULL, 0, 0);
- gfree(mapA);
- return ctu;
-}
-
-CharCodeToUnicode *CharCodeToUnicode::parseUnicodeToUnicode(
- GString *fileName) {
- FILE *f;
- Unicode *mapA;
- CharCodeToUnicodeString *sMapA;
- CharCode size, oldSize, len, sMapSizeA, sMapLenA;
- char buf[256];
- char *tok;
- Unicode u0;
- Unicode uBuf[maxUnicodeString];
- CharCodeToUnicode *ctu;
- int line, n, i;
-
- if (!(f = fopen(fileName->getCString(), "r"))) {
- error(-1, "Couldn't open unicodeToUnicode file '%s'",
- fileName->getCString());
- return NULL;
- }
-
- size = 4096;
- mapA = (Unicode *)gmallocn(size, sizeof(Unicode));
- memset(mapA, 0, size * sizeof(Unicode));
- len = 0;
- sMapA = NULL;
- sMapSizeA = sMapLenA = 0;
-
- line = 0;
- while (getLine(buf, sizeof(buf), f)) {
- ++line;
- if (!(tok = strtok(buf, " \t\r\n")) ||
- sscanf(tok, "%x", &u0) != 1) {
- error(-1, "Bad line (%d) in unicodeToUnicode file '%s'",
- line, fileName->getCString());
- continue;
- }
- n = 0;
- while (n < maxUnicodeString) {
- if (!(tok = strtok(NULL, " \t\r\n"))) {
- break;
- }
- if (sscanf(tok, "%x", &uBuf[n]) != 1) {
- error(-1, "Bad line (%d) in unicodeToUnicode file '%s'",
- line, fileName->getCString());
- break;
- }
- ++n;
- }
- if (n < 1) {
- error(-1, "Bad line (%d) in unicodeToUnicode file '%s'",
- line, fileName->getCString());
- continue;
- }
- if (u0 >= size) {
- oldSize = size;
- while (u0 >= size) {
- size *= 2;
- }
- mapA = (Unicode *)greallocn(mapA, size, sizeof(Unicode));
- memset(mapA + oldSize, 0, (size - oldSize) * sizeof(Unicode));
- }
- if (n == 1) {
- mapA[u0] = uBuf[0];
- } else {
- mapA[u0] = 0;
- if (sMapLenA == sMapSizeA) {
- sMapSizeA += 16;
- sMapA = (CharCodeToUnicodeString *)
- greallocn(sMapA, sMapSizeA, sizeof(CharCodeToUnicodeString));
- }
- sMapA[sMapLenA].c = u0;
- for (i = 0; i < n; ++i) {
- sMapA[sMapLenA].u[i] = uBuf[i];
- }
- sMapA[sMapLenA].len = n;
- ++sMapLenA;
- }
- if (u0 >= len) {
- len = u0 + 1;
- }
- }
- fclose(f);
-
- ctu = new CharCodeToUnicode(fileName->copy(), mapA, len, gTrue,
- sMapA, sMapLenA, sMapSizeA);
- gfree(mapA);
- return ctu;
-}
-
-CharCodeToUnicode *CharCodeToUnicode::make8BitToUnicode(Unicode *toUnicode) {
- return new CharCodeToUnicode(NULL, toUnicode, 256, gTrue, NULL, 0, 0);
-}
-
-CharCodeToUnicode *CharCodeToUnicode::parseCMap(GString *buf, int nBits) {
- CharCodeToUnicode *ctu;
- char *p;
-
- ctu = new CharCodeToUnicode(NULL);
- p = buf->getCString();
- ctu->parseCMap1(&getCharFromString, &p, nBits);
- return ctu;
-}
-
-void CharCodeToUnicode::mergeCMap(GString *buf, int nBits) {
- char *p;
-
- p = buf->getCString();
- parseCMap1(&getCharFromString, &p, nBits);
-}
-
-void CharCodeToUnicode::parseCMap1(int (*getCharFunc)(void *), void *data,
- int nBits) {
- PSTokenizer *pst;
- char tok1[256], tok2[256], tok3[256];
- int nDigits, n1, n2, n3;
- CharCode i;
- CharCode code1, code2;
- GString *name;
- FILE *f;
-
- nDigits = nBits / 4;
- pst = new PSTokenizer(getCharFunc, data);
- pst->getToken(tok1, sizeof(tok1), &n1);
- while (pst->getToken(tok2, sizeof(tok2), &n2)) {
- if (!strcmp(tok2, "usecmap")) {
- if (tok1[0] == '/') {
- name = new GString(tok1 + 1);
- if ((f = globalParams->findToUnicodeFile(name))) {
- parseCMap1(&getCharFromFile, f, nBits);
- fclose(f);
- } else {
- error(-1, "Couldn't find ToUnicode CMap file for '%s'",
- name->getCString());
- }
- delete name;
- }
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else if (!strcmp(tok2, "beginbfchar")) {
- while (pst->getToken(tok1, sizeof(tok1), &n1)) {
- if (!strcmp(tok1, "endbfchar")) {
- break;
- }
- if (!pst->getToken(tok2, sizeof(tok2), &n2) ||
- !strcmp(tok2, "endbfchar")) {
- error(-1, "Illegal entry in bfchar block in ToUnicode CMap");
- break;
- }
- if (!(n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' &&
- tok2[0] == '<' && tok2[n2 - 1] == '>')) {
- error(-1, "Illegal entry in bfchar block in ToUnicode CMap");
- continue;
- }
- tok1[n1 - 1] = tok2[n2 - 1] = '\0';
- if (sscanf(tok1 + 1, "%x", &code1) != 1) {
- error(-1, "Illegal entry in bfchar block in ToUnicode CMap");
- continue;
- }
- addMapping(code1, tok2 + 1, n2 - 2, 0);
- }
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else if (!strcmp(tok2, "beginbfrange")) {
- while (pst->getToken(tok1, sizeof(tok1), &n1)) {
- if (!strcmp(tok1, "endbfrange")) {
- break;
- }
- if (!pst->getToken(tok2, sizeof(tok2), &n2) ||
- !strcmp(tok2, "endbfrange") ||
- !pst->getToken(tok3, sizeof(tok3), &n3) ||
- !strcmp(tok3, "endbfrange")) {
- error(-1, "Illegal entry in bfrange block in ToUnicode CMap");
- break;
- }
- if (!(n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' &&
- n2 == 2 + nDigits && tok2[0] == '<' && tok2[n2 - 1] == '>')) {
- error(-1, "Illegal entry in bfrange block in ToUnicode CMap");
- continue;
- }
- tok1[n1 - 1] = tok2[n2 - 1] = '\0';
- if (sscanf(tok1 + 1, "%x", &code1) != 1 ||
- sscanf(tok2 + 1, "%x", &code2) != 1) {
- error(-1, "Illegal entry in bfrange block in ToUnicode CMap");
- continue;
- }
- if (!strcmp(tok3, "[")) {
- i = 0;
- while (pst->getToken(tok1, sizeof(tok1), &n1) &&
- code1 + i <= code2) {
- if (!strcmp(tok1, "]")) {
- break;
- }
- if (tok1[0] == '<' && tok1[n1 - 1] == '>') {
- tok1[n1 - 1] = '\0';
- addMapping(code1 + i, tok1 + 1, n1 - 2, 0);
- } else {
- error(-1, "Illegal entry in bfrange block in ToUnicode CMap");
- }
- ++i;
- }
- } else if (tok3[0] == '<' && tok3[n3 - 1] == '>') {
- tok3[n3 - 1] = '\0';
- for (i = 0; code1 <= code2; ++code1, ++i) {
- addMapping(code1, tok3 + 1, n3 - 2, i);
- }
-
- } else {
- error(-1, "Illegal entry in bfrange block in ToUnicode CMap");
- }
- }
- pst->getToken(tok1, sizeof(tok1), &n1);
- } else {
- strcpy(tok1, tok2);
- }
- }
- delete pst;
-}
-
-void CharCodeToUnicode::addMapping(CharCode code, char *uStr, int n,
- int offset) {
- CharCode oldLen, i;
- Unicode u;
- char uHex[5];
- int j;
-
- if (code >= mapLen) {
- oldLen = mapLen;
- mapLen = (code + 256) & ~255;
- map = (Unicode *)greallocn(map, mapLen, sizeof(Unicode));
- for (i = oldLen; i < mapLen; ++i) {
- map[i] = 0;
- }
- }
- if (n <= 4) {
- if (sscanf(uStr, "%x", &u) != 1) {
- error(-1, "Illegal entry in ToUnicode CMap");
- return;
- }
- map[code] = u + offset;
- } else {
- if (sMapLen >= sMapSize) {
- sMapSize = sMapSize + 16;
- sMap = (CharCodeToUnicodeString *)
- greallocn(sMap, sMapSize, sizeof(CharCodeToUnicodeString));
- }
- map[code] = 0;
- sMap[sMapLen].c = code;
- sMap[sMapLen].len = n / 4;
- for (j = 0; j < sMap[sMapLen].len && j < maxUnicodeString; ++j) {
- strncpy(uHex, uStr + j*4, 4);
- uHex[4] = '\0';
- if (sscanf(uHex, "%x", &sMap[sMapLen].u[j]) != 1) {
- error(-1, "Illegal entry in ToUnicode CMap");
- }
- }
- sMap[sMapLen].u[sMap[sMapLen].len - 1] += offset;
- ++sMapLen;
- }
-}
-
-CharCodeToUnicode::CharCodeToUnicode(GString *tagA) {
- CharCode i;
-
- tag = tagA;
- mapLen = 256;
- map = (Unicode *)gmallocn(mapLen, sizeof(Unicode));
- for (i = 0; i < mapLen; ++i) {
- map[i] = 0;
- }
- sMap = NULL;
- sMapLen = sMapSize = 0;
- refCnt = 1;
-#if MULTITHREADED
- gInitMutex(&mutex);
-#endif
-}
-
-CharCodeToUnicode::CharCodeToUnicode(GString *tagA, Unicode *mapA,
- CharCode mapLenA, GBool copyMap,
- CharCodeToUnicodeString *sMapA,
- int sMapLenA, int sMapSizeA) {
- tag = tagA;
- mapLen = mapLenA;
- if (copyMap) {
- map = (Unicode *)gmallocn(mapLen, sizeof(Unicode));
- memcpy(map, mapA, mapLen * sizeof(Unicode));
- } else {
- map = mapA;
- }
- sMap = sMapA;
- sMapLen = sMapLenA;
- sMapSize = sMapSizeA;
- refCnt = 1;
-#if MULTITHREADED
- gInitMutex(&mutex);
-#endif
-}
-
-CharCodeToUnicode::~CharCodeToUnicode() {
- if (tag) {
- delete tag;
- }
- gfree(map);
- if (sMap) {
- gfree(sMap);
- }
-#if MULTITHREADED
- gDestroyMutex(&mutex);
-#endif
-}
-
-void CharCodeToUnicode::incRefCnt() {
-#if MULTITHREADED
- gLockMutex(&mutex);
-#endif
- ++refCnt;
-#if MULTITHREADED
- gUnlockMutex(&mutex);
-#endif
-}
-
-void CharCodeToUnicode::decRefCnt() {
- GBool done;
-
-#if MULTITHREADED
- gLockMutex(&mutex);
-#endif
- done = --refCnt == 0;
-#if MULTITHREADED
- gUnlockMutex(&mutex);
-#endif
- if (done) {
- delete this;
- }
-}
-
-GBool CharCodeToUnicode::match(GString *tagA) {
- return tag && !tag->cmp(tagA);
-}
-
-void CharCodeToUnicode::setMapping(CharCode c, Unicode *u, int len) {
- int i, j;
-
- if (len == 1) {
- map[c] = u[0];
- } else {
- for (i = 0; i < sMapLen; ++i) {
- if (sMap[i].c == c) {
- break;
- }
- }
- if (i == sMapLen) {
- if (sMapLen == sMapSize) {
- sMapSize += 8;
- sMap = (CharCodeToUnicodeString *)
- greallocn(sMap, sMapSize, sizeof(CharCodeToUnicodeString));
- }
- ++sMapLen;
- }
- map[c] = 0;
- sMap[i].c = c;
- sMap[i].len = len;
- for (j = 0; j < len && j < maxUnicodeString; ++j) {
- sMap[i].u[j] = u[j];
- }
- }
-}
-
-int CharCodeToUnicode::mapToUnicode(CharCode c, Unicode *u, int size) {
- int i, j;
-
- if (c >= mapLen) {
- return 0;
- }
- if (map[c]) {
- u[0] = map[c];
- return 1;
- }
- for (i = 0; i < sMapLen; ++i) {
- if (sMap[i].c == c) {
- for (j = 0; j < sMap[i].len && j < size; ++j) {
- u[j] = sMap[i].u[j];
- }
- return j;
- }
- }
- return 0;
-}
-
-//------------------------------------------------------------------------
-
-CharCodeToUnicodeCache::CharCodeToUnicodeCache(int sizeA) {
- int i;
-
- size = sizeA;
- cache = (CharCodeToUnicode **)gmallocn(size, sizeof(CharCodeToUnicode *));
- for (i = 0; i < size; ++i) {
- cache[i] = NULL;
- }
-}
-
-CharCodeToUnicodeCache::~CharCodeToUnicodeCache() {
- int i;
-
- for (i = 0; i < size; ++i) {
- if (cache[i]) {
- cache[i]->decRefCnt();
- }
- }
- gfree(cache);
-}
-
-CharCodeToUnicode *CharCodeToUnicodeCache::getCharCodeToUnicode(GString *tag) {
- CharCodeToUnicode *ctu;
- int i, j;
-
- if (cache[0] && cache[0]->match(tag)) {
- cache[0]->incRefCnt();
- return cache[0];
- }
- for (i = 1; i < size; ++i) {
- if (cache[i] && cache[i]->match(tag)) {
- ctu = cache[i];
- for (j = i; j >= 1; --j) {
- cache[j] = cache[j - 1];
- }
- cache[0] = ctu;
- ctu->incRefCnt();
- return ctu;
- }
- }
- return NULL;
-}
-
-void CharCodeToUnicodeCache::add(CharCodeToUnicode *ctu) {
- int i;
-
- if (cache[size - 1]) {
- cache[size - 1]->decRefCnt();
- }
- for (i = size - 1; i >= 1; --i) {
- cache[i] = cache[i - 1];
- }
- cache[0] = ctu;
- ctu->incRefCnt();
-}
diff --git a/Build/source/libs/xpdf/xpdf/CharCodeToUnicode.h b/Build/source/libs/xpdf/xpdf/CharCodeToUnicode.h
deleted file mode 100644
index 04852aea856..00000000000
--- a/Build/source/libs/xpdf/xpdf/CharCodeToUnicode.h
+++ /dev/null
@@ -1,117 +0,0 @@
-//========================================================================
-//
-// CharCodeToUnicode.h
-//
-// Mapping from character codes to Unicode.
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef CHARCODETOUNICODE_H
-#define CHARCODETOUNICODE_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "CharTypes.h"
-
-#if MULTITHREADED
-#include "GMutex.h"
-#endif
-
-struct CharCodeToUnicodeString;
-
-//------------------------------------------------------------------------
-
-class CharCodeToUnicode {
-public:
-
- // Read the CID-to-Unicode mapping for <collection> from the file
- // specified by <fileName>. Sets the initial reference count to 1.
- // Returns NULL on failure.
- static CharCodeToUnicode *parseCIDToUnicode(GString *fileName,
- GString *collection);
-
- // Create a Unicode-to-Unicode mapping from the file specified by
- // <fileName>. Sets the initial reference count to 1. Returns NULL
- // on failure.
- static CharCodeToUnicode *parseUnicodeToUnicode(GString *fileName);
-
- // Create the CharCode-to-Unicode mapping for an 8-bit font.
- // <toUnicode> is an array of 256 Unicode indexes. Sets the initial
- // reference count to 1.
- static CharCodeToUnicode *make8BitToUnicode(Unicode *toUnicode);
-
- // Parse a ToUnicode CMap for an 8- or 16-bit font.
- static CharCodeToUnicode *parseCMap(GString *buf, int nBits);
-
- // Parse a ToUnicode CMap for an 8- or 16-bit font, merging it into
- // <this>.
- void mergeCMap(GString *buf, int nBits);
-
- ~CharCodeToUnicode();
-
- void incRefCnt();
- void decRefCnt();
-
- // Return true if this mapping matches the specified <tagA>.
- GBool match(GString *tagA);
-
- // Set the mapping for <c>.
- void setMapping(CharCode c, Unicode *u, int len);
-
- // Map a CharCode to Unicode.
- int mapToUnicode(CharCode c, Unicode *u, int size);
-
- // Return the mapping's length, i.e., one more than the max char
- // code supported by the mapping.
- CharCode getLength() { return mapLen; }
-
-private:
-
- void parseCMap1(int (*getCharFunc)(void *), void *data, int nBits);
- void addMapping(CharCode code, char *uStr, int n, int offset);
- CharCodeToUnicode(GString *tagA);
- CharCodeToUnicode(GString *tagA, Unicode *mapA,
- CharCode mapLenA, GBool copyMap,
- CharCodeToUnicodeString *sMapA,
- int sMapLenA, int sMapSizeA);
-
- GString *tag;
- Unicode *map;
- CharCode mapLen;
- CharCodeToUnicodeString *sMap;
- int sMapLen, sMapSize;
- int refCnt;
-#if MULTITHREADED
- GMutex mutex;
-#endif
-};
-
-//------------------------------------------------------------------------
-
-class CharCodeToUnicodeCache {
-public:
-
- CharCodeToUnicodeCache(int sizeA);
- ~CharCodeToUnicodeCache();
-
- // Get the CharCodeToUnicode object for <tag>. Increments its
- // reference count; there will be one reference for the cache plus
- // one for the caller of this function. Returns NULL on failure.
- CharCodeToUnicode *getCharCodeToUnicode(GString *tag);
-
- // Insert <ctu> into the cache, in the most-recently-used position.
- void add(CharCodeToUnicode *ctu);
-
-private:
-
- CharCodeToUnicode **cache;
- int size;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/CharTypes.h b/Build/source/libs/xpdf/xpdf/CharTypes.h
deleted file mode 100644
index d0df630d0c9..00000000000
--- a/Build/source/libs/xpdf/xpdf/CharTypes.h
+++ /dev/null
@@ -1,24 +0,0 @@
-//========================================================================
-//
-// CharTypes.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef CHARTYPES_H
-#define CHARTYPES_H
-
-// Unicode character.
-typedef unsigned int Unicode;
-
-// Character ID for CID character collections.
-typedef unsigned int CID;
-
-// This is large enough to hold any of the following:
-// - 8-bit char code
-// - 16-bit CID
-// - Unicode
-typedef unsigned int CharCode;
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Decrypt.cc b/Build/source/libs/xpdf/xpdf/Decrypt.cc
deleted file mode 100644
index 03205897cf4..00000000000
--- a/Build/source/libs/xpdf/xpdf/Decrypt.cc
+++ /dev/null
@@ -1,776 +0,0 @@
-//========================================================================
-//
-// Decrypt.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <string.h>
-#include "gmem.h"
-#include "Decrypt.h"
-
-static void rc4InitKey(Guchar *key, int keyLen, Guchar *state);
-static Guchar rc4DecryptByte(Guchar *state, Guchar *x, Guchar *y, Guchar c);
-static void aesKeyExpansion(DecryptAESState *s,
- Guchar *objKey, int objKeyLen);
-static void aesDecryptBlock(DecryptAESState *s, Guchar *in, GBool last);
-static void md5(Guchar *msg, int msgLen, Guchar *digest);
-
-static Guchar passwordPad[32] = {
- 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41,
- 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08,
- 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80,
- 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a
-};
-
-//------------------------------------------------------------------------
-// Decrypt
-//------------------------------------------------------------------------
-
-GBool Decrypt::makeFileKey(int encVersion, int encRevision, int keyLength,
- GString *ownerKey, GString *userKey,
- int permissions, GString *fileID,
- GString *ownerPassword, GString *userPassword,
- Guchar *fileKey, GBool encryptMetadata,
- GBool *ownerPasswordOk) {
- Guchar test[32], test2[32];
- GString *userPassword2;
- Guchar fState[256];
- Guchar tmpKey[16];
- Guchar fx, fy;
- int len, i, j;
-
- // try using the supplied owner password to generate the user password
- *ownerPasswordOk = gFalse;
- if (ownerPassword) {
- len = ownerPassword->getLength();
- if (len < 32) {
- memcpy(test, ownerPassword->getCString(), len);
- memcpy(test + len, passwordPad, 32 - len);
- } else {
- memcpy(test, ownerPassword->getCString(), 32);
- }
- md5(test, 32, test);
- if (encRevision == 3) {
- for (i = 0; i < 50; ++i) {
- md5(test, 16, test);
- }
- }
- if (encRevision == 2) {
- rc4InitKey(test, keyLength, fState);
- fx = fy = 0;
- for (i = 0; i < 32; ++i) {
- test2[i] = rc4DecryptByte(fState, &fx, &fy, ownerKey->getChar(i));
- }
- } else {
- memcpy(test2, ownerKey->getCString(), 32);
- for (i = 19; i >= 0; --i) {
- for (j = 0; j < keyLength; ++j) {
- tmpKey[j] = test[j] ^ i;
- }
- rc4InitKey(tmpKey, keyLength, fState);
- fx = fy = 0;
- for (j = 0; j < 32; ++j) {
- test2[j] = rc4DecryptByte(fState, &fx, &fy, test2[j]);
- }
- }
- }
- userPassword2 = new GString((char *)test2, 32);
- if (makeFileKey2(encVersion, encRevision, keyLength, ownerKey, userKey,
- permissions, fileID, userPassword2, fileKey,
- encryptMetadata)) {
- *ownerPasswordOk = gTrue;
- delete userPassword2;
- return gTrue;
- }
- delete userPassword2;
- }
-
- // try using the supplied user password
- return makeFileKey2(encVersion, encRevision, keyLength, ownerKey, userKey,
- permissions, fileID, userPassword, fileKey,
- encryptMetadata);
-}
-
-GBool Decrypt::makeFileKey2(int encVersion, int encRevision, int keyLength,
- GString *ownerKey, GString *userKey,
- int permissions, GString *fileID,
- GString *userPassword, Guchar *fileKey,
- GBool encryptMetadata) {
- Guchar *buf;
- Guchar test[32];
- Guchar fState[256];
- Guchar tmpKey[16];
- Guchar fx, fy;
- int len, i, j;
- GBool ok;
-
- // generate file key
- buf = (Guchar *)gmalloc(72 + fileID->getLength());
- if (userPassword) {
- len = userPassword->getLength();
- if (len < 32) {
- memcpy(buf, userPassword->getCString(), len);
- memcpy(buf + len, passwordPad, 32 - len);
- } else {
- memcpy(buf, userPassword->getCString(), 32);
- }
- } else {
- memcpy(buf, passwordPad, 32);
- }
- memcpy(buf + 32, ownerKey->getCString(), 32);
- buf[64] = permissions & 0xff;
- buf[65] = (permissions >> 8) & 0xff;
- buf[66] = (permissions >> 16) & 0xff;
- buf[67] = (permissions >> 24) & 0xff;
- memcpy(buf + 68, fileID->getCString(), fileID->getLength());
- len = 68 + fileID->getLength();
- if (!encryptMetadata) {
- buf[len++] = 0xff;
- buf[len++] = 0xff;
- buf[len++] = 0xff;
- buf[len++] = 0xff;
- }
- md5(buf, len, fileKey);
- if (encRevision == 3) {
- for (i = 0; i < 50; ++i) {
- md5(fileKey, keyLength, fileKey);
- }
- }
-
- // test user password
- if (encRevision == 2) {
- rc4InitKey(fileKey, keyLength, fState);
- fx = fy = 0;
- for (i = 0; i < 32; ++i) {
- test[i] = rc4DecryptByte(fState, &fx, &fy, userKey->getChar(i));
- }
- ok = memcmp(test, passwordPad, 32) == 0;
- } else if (encRevision == 3) {
- memcpy(test, userKey->getCString(), 32);
- for (i = 19; i >= 0; --i) {
- for (j = 0; j < keyLength; ++j) {
- tmpKey[j] = fileKey[j] ^ i;
- }
- rc4InitKey(tmpKey, keyLength, fState);
- fx = fy = 0;
- for (j = 0; j < 32; ++j) {
- test[j] = rc4DecryptByte(fState, &fx, &fy, test[j]);
- }
- }
- memcpy(buf, passwordPad, 32);
- memcpy(buf + 32, fileID->getCString(), fileID->getLength());
- md5(buf, 32 + fileID->getLength(), buf);
- ok = memcmp(test, buf, 16) == 0;
- } else {
- ok = gFalse;
- }
-
- gfree(buf);
- return ok;
-}
-
-//------------------------------------------------------------------------
-// DecryptStream
-//------------------------------------------------------------------------
-
-DecryptStream::DecryptStream(Stream *strA, Guchar *fileKey,
- CryptAlgorithm algoA, int keyLength,
- int objNum, int objGen):
- FilterStream(strA)
-{
- int n, i;
-
- algo = algoA;
-
- // construct object key
- for (i = 0; i < keyLength; ++i) {
- objKey[i] = fileKey[i];
- }
- objKey[keyLength] = objNum & 0xff;
- objKey[keyLength + 1] = (objNum >> 8) & 0xff;
- objKey[keyLength + 2] = (objNum >> 16) & 0xff;
- objKey[keyLength + 3] = objGen & 0xff;
- objKey[keyLength + 4] = (objGen >> 8) & 0xff;
- if (algo == cryptAES) {
- objKey[keyLength + 5] = 0x73; // 's'
- objKey[keyLength + 6] = 0x41; // 'A'
- objKey[keyLength + 7] = 0x6c; // 'l'
- objKey[keyLength + 8] = 0x54; // 'T'
- n = keyLength + 9;
- } else {
- n = keyLength + 5;
- }
- md5(objKey, n, objKey);
- if ((objKeyLength = keyLength + 5) > 16) {
- objKeyLength = 16;
- }
-}
-
-DecryptStream::~DecryptStream() {
- delete str;
-}
-
-void DecryptStream::reset() {
- int i;
-
- str->reset();
- switch (algo) {
- case cryptRC4:
- state.rc4.x = state.rc4.y = 0;
- rc4InitKey(objKey, objKeyLength, state.rc4.state);
- state.rc4.buf = EOF;
- break;
- case cryptAES:
- aesKeyExpansion(&state.aes, objKey, objKeyLength);
- for (i = 0; i < 16; ++i) {
- state.aes.cbc[i] = str->getChar();
- }
- state.aes.bufIdx = 16;
- break;
- }
-}
-
-int DecryptStream::getChar() {
- Guchar in[16];
- int c, i;
-
- c = EOF; // make gcc happy
- switch (algo) {
- case cryptRC4:
- if (state.rc4.buf == EOF) {
- c = str->getChar();
- if (c != EOF) {
- state.rc4.buf = rc4DecryptByte(state.rc4.state, &state.rc4.x,
- &state.rc4.y, (Guchar)c);
- }
- }
- c = state.rc4.buf;
- state.rc4.buf = EOF;
- break;
- case cryptAES:
- if (state.aes.bufIdx == 16) {
- for (i = 0; i < 16; ++i) {
- if ((c = str->getChar()) == EOF) {
- return EOF;
- }
- in[i] = (Guchar)c;
- }
- aesDecryptBlock(&state.aes, in, str->lookChar() == EOF);
- }
- if (state.aes.bufIdx == 16) {
- c = EOF;
- } else {
- c = state.aes.buf[state.aes.bufIdx++];
- }
- break;
- }
- return c;
-}
-
-int DecryptStream::lookChar() {
- Guchar in[16];
- int c, i;
-
- c = EOF; // make gcc happy
- switch (algo) {
- case cryptRC4:
- if (state.rc4.buf == EOF) {
- c = str->getChar();
- if (c != EOF) {
- state.rc4.buf = rc4DecryptByte(state.rc4.state, &state.rc4.x,
- &state.rc4.y, (Guchar)c);
- }
- }
- c = state.rc4.buf;
- break;
- case cryptAES:
- if (state.aes.bufIdx == 16) {
- for (i = 0; i < 16; ++i) {
- if ((c = str->getChar()) == EOF) {
- return EOF;
- }
- in[i] = c;
- }
- aesDecryptBlock(&state.aes, in, str->lookChar() == EOF);
- }
- if (state.aes.bufIdx == 16) {
- c = EOF;
- } else {
- c = state.aes.buf[state.aes.bufIdx];
- }
- break;
- }
- return c;
-}
-
-GBool DecryptStream::isBinary(GBool last) {
- return str->isBinary(last);
-}
-
-//------------------------------------------------------------------------
-// RC4-compatible decryption
-//------------------------------------------------------------------------
-
-static void rc4InitKey(Guchar *key, int keyLen, Guchar *state) {
- Guchar index1, index2;
- Guchar t;
- int i;
-
- for (i = 0; i < 256; ++i)
- state[i] = i;
- index1 = index2 = 0;
- for (i = 0; i < 256; ++i) {
- index2 = (key[index1] + state[i] + index2) % 256;
- t = state[i];
- state[i] = state[index2];
- state[index2] = t;
- index1 = (index1 + 1) % keyLen;
- }
-}
-
-static Guchar rc4DecryptByte(Guchar *state, Guchar *x, Guchar *y, Guchar c) {
- Guchar x1, y1, tx, ty;
-
- x1 = *x = (*x + 1) % 256;
- y1 = *y = (state[*x] + *y) % 256;
- tx = state[x1];
- ty = state[y1];
- state[x1] = ty;
- state[y1] = tx;
- return c ^ state[(tx + ty) % 256];
-}
-
-//------------------------------------------------------------------------
-// AES decryption
-//------------------------------------------------------------------------
-
-static Guchar sbox[256] = {
- 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
- 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
- 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
- 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
- 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
- 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
- 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
- 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
- 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
- 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
- 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
- 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
- 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
- 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
- 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
- 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
-
-static Guchar invSbox[256] = {
- 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
- 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
- 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
- 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
- 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
- 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
- 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
- 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
- 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
- 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
- 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
- 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
- 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
- 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
- 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
- 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
-};
-
-static Guint rcon[11] = {
- 0x00000000, // unused
- 0x01000000,
- 0x02000000,
- 0x04000000,
- 0x08000000,
- 0x10000000,
- 0x20000000,
- 0x40000000,
- 0x80000000,
- 0x1b000000,
- 0x36000000
-};
-
-static inline Guint subWord(Guint x) {
- return (sbox[x >> 24] << 24)
- | (sbox[(x >> 16) & 0xff] << 16)
- | (sbox[(x >> 8) & 0xff] << 8)
- | sbox[x & 0xff];
-}
-
-static inline Guint rotWord(Guint x) {
- return ((x << 8) & 0xffffffff) | (x >> 24);
-}
-
-static inline void invSubBytes(Guchar *state) {
- int i;
-
- for (i = 0; i < 16; ++i) {
- state[i] = invSbox[state[i]];
- }
-}
-
-static inline void invShiftRows(Guchar *state) {
- Guchar t;
-
- t = state[7];
- state[7] = state[6];
- state[6] = state[5];
- state[5] = state[4];
- state[4] = t;
-
- t = state[8];
- state[8] = state[10];
- state[10] = t;
- t = state[9];
- state[9] = state[11];
- state[11] = t;
-
- t = state[12];
- state[12] = state[13];
- state[13] = state[14];
- state[14] = state[15];
- state[15] = t;
-}
-
-// {09} \cdot s
-static inline Guchar mul09(Guchar s) {
- Guchar s2, s4, s8;
-
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s ^ s8;
-}
-
-// {0b} \cdot s
-static inline Guchar mul0b(Guchar s) {
- Guchar s2, s4, s8;
-
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s ^ s2 ^ s8;
-}
-
-// {0d} \cdot s
-static inline Guchar mul0d(Guchar s) {
- Guchar s2, s4, s8;
-
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s ^ s4 ^ s8;
-}
-
-// {0e} \cdot s
-static inline Guchar mul0e(Guchar s) {
- Guchar s2, s4, s8;
-
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s2 ^ s4 ^ s8;
-}
-
-static inline void invMixColumns(Guchar *state) {
- int c;
- Guchar s0, s1, s2, s3;
-
- for (c = 0; c < 4; ++c) {
- s0 = state[c];
- s1 = state[4+c];
- s2 = state[8+c];
- s3 = state[12+c];
- state[c] = mul0e(s0) ^ mul0b(s1) ^ mul0d(s2) ^ mul09(s3);
- state[4+c] = mul09(s0) ^ mul0e(s1) ^ mul0b(s2) ^ mul0d(s3);
- state[8+c] = mul0d(s0) ^ mul09(s1) ^ mul0e(s2) ^ mul0b(s3);
- state[12+c] = mul0b(s0) ^ mul0d(s1) ^ mul09(s2) ^ mul0e(s3);
- }
-}
-
-static inline void invMixColumnsW(Guint *w) {
- int c;
- Guchar s0, s1, s2, s3;
-
- for (c = 0; c < 4; ++c) {
- s0 = w[c] >> 24;
- s1 = w[c] >> 16;
- s2 = w[c] >> 8;
- s3 = w[c];
- w[c] = ((mul0e(s0) ^ mul0b(s1) ^ mul0d(s2) ^ mul09(s3)) << 24)
- | ((mul09(s0) ^ mul0e(s1) ^ mul0b(s2) ^ mul0d(s3)) << 16)
- | ((mul0d(s0) ^ mul09(s1) ^ mul0e(s2) ^ mul0b(s3)) << 8)
- | (mul0b(s0) ^ mul0d(s1) ^ mul09(s2) ^ mul0e(s3));
- }
-}
-
-static inline void addRoundKey(Guchar *state, Guint *w) {
- int c;
-
- for (c = 0; c < 4; ++c) {
- state[c] ^= w[c] >> 24;
- state[4+c] ^= w[c] >> 16;
- state[8+c] ^= w[c] >> 8;
- state[12+c] ^= w[c];
- }
-}
-
-static void aesKeyExpansion(DecryptAESState *s,
- Guchar *objKey, int objKeyLen) {
- Guint temp;
- int i, round;
-
- //~ this assumes objKeyLen == 16
-
- for (i = 0; i < 4; ++i) {
- s->w[i] = (objKey[4*i] << 24) + (objKey[4*i+1] << 16) +
- (objKey[4*i+2] << 8) + objKey[4*i+3];
- }
- for (i = 4; i < 44; ++i) {
- temp = s->w[i-1];
- if (!(i & 3)) {
- temp = subWord(rotWord(temp)) ^ rcon[i/4];
- }
- s->w[i] = s->w[i-4] ^ temp;
- }
- for (round = 1; round <= 9; ++round) {
- invMixColumnsW(&s->w[round * 4]);
- }
-}
-
-static void aesDecryptBlock(DecryptAESState *s, Guchar *in, GBool last) {
- int c, round, n, i;
-
- // initial state
- for (c = 0; c < 4; ++c) {
- s->state[c] = in[4*c];
- s->state[4+c] = in[4*c+1];
- s->state[8+c] = in[4*c+2];
- s->state[12+c] = in[4*c+3];
- }
-
- // round 0
- addRoundKey(s->state, &s->w[10 * 4]);
-
- // rounds 1-9
- for (round = 9; round >= 1; --round) {
- invSubBytes(s->state);
- invShiftRows(s->state);
- invMixColumns(s->state);
- addRoundKey(s->state, &s->w[round * 4]);
- }
-
- // round 10
- invSubBytes(s->state);
- invShiftRows(s->state);
- addRoundKey(s->state, &s->w[0]);
-
- // CBC
- for (c = 0; c < 4; ++c) {
- s->buf[4*c] = s->state[c] ^ s->cbc[4*c];
- s->buf[4*c+1] = s->state[4+c] ^ s->cbc[4*c+1];
- s->buf[4*c+2] = s->state[8+c] ^ s->cbc[4*c+2];
- s->buf[4*c+3] = s->state[12+c] ^ s->cbc[4*c+3];
- }
-
- // save the input block for the next CBC
- for (i = 0; i < 16; ++i) {
- s->cbc[i] = in[i];
- }
-
- // remove padding
- s->bufIdx = 0;
- if (last) {
- n = s->buf[15];
- for (i = 15; i >= n; --i) {
- s->buf[i] = s->buf[i-n];
- }
- s->bufIdx = n;
- }
-}
-
-//------------------------------------------------------------------------
-// MD5 message digest
-//------------------------------------------------------------------------
-
-// this works around a bug in older Sun compilers
-static inline Gulong rotateLeft(Gulong x, int r) {
- x &= 0xffffffff;
- return ((x << r) | (x >> (32 - r))) & 0xffffffff;
-}
-
-static inline Gulong md5Round1(Gulong a, Gulong b, Gulong c, Gulong d,
- Gulong Xk, Gulong s, Gulong Ti) {
- return b + rotateLeft((a + ((b & c) | (~b & d)) + Xk + Ti), s);
-}
-
-static inline Gulong md5Round2(Gulong a, Gulong b, Gulong c, Gulong d,
- Gulong Xk, Gulong s, Gulong Ti) {
- return b + rotateLeft((a + ((b & d) | (c & ~d)) + Xk + Ti), s);
-}
-
-static inline Gulong md5Round3(Gulong a, Gulong b, Gulong c, Gulong d,
- Gulong Xk, Gulong s, Gulong Ti) {
- return b + rotateLeft((a + (b ^ c ^ d) + Xk + Ti), s);
-}
-
-static inline Gulong md5Round4(Gulong a, Gulong b, Gulong c, Gulong d,
- Gulong Xk, Gulong s, Gulong Ti) {
- return b + rotateLeft((a + (c ^ (b | ~d)) + Xk + Ti), s);
-}
-
-static void md5(Guchar *msg, int msgLen, Guchar *digest) {
- Gulong x[16];
- Gulong a, b, c, d, aa, bb, cc, dd;
- int n64;
- int i, j, k;
-
- // compute number of 64-byte blocks
- // (length + pad byte (0x80) + 8 bytes for length)
- n64 = (msgLen + 1 + 8 + 63) / 64;
-
- // initialize a, b, c, d
- a = 0x67452301;
- b = 0xefcdab89;
- c = 0x98badcfe;
- d = 0x10325476;
-
- // loop through blocks
- k = 0;
- for (i = 0; i < n64; ++i) {
-
- // grab a 64-byte block
- for (j = 0; j < 16 && k < msgLen - 3; ++j, k += 4)
- x[j] = (((((msg[k+3] << 8) + msg[k+2]) << 8) + msg[k+1]) << 8) + msg[k];
- if (i == n64 - 1) {
- if (k == msgLen - 3)
- x[j] = 0x80000000 + (((msg[k+2] << 8) + msg[k+1]) << 8) + msg[k];
- else if (k == msgLen - 2)
- x[j] = 0x800000 + (msg[k+1] << 8) + msg[k];
- else if (k == msgLen - 1)
- x[j] = 0x8000 + msg[k];
- else
- x[j] = 0x80;
- ++j;
- while (j < 16)
- x[j++] = 0;
- x[14] = msgLen << 3;
- }
-
- // save a, b, c, d
- aa = a;
- bb = b;
- cc = c;
- dd = d;
-
- // round 1
- a = md5Round1(a, b, c, d, x[0], 7, 0xd76aa478);
- d = md5Round1(d, a, b, c, x[1], 12, 0xe8c7b756);
- c = md5Round1(c, d, a, b, x[2], 17, 0x242070db);
- b = md5Round1(b, c, d, a, x[3], 22, 0xc1bdceee);
- a = md5Round1(a, b, c, d, x[4], 7, 0xf57c0faf);
- d = md5Round1(d, a, b, c, x[5], 12, 0x4787c62a);
- c = md5Round1(c, d, a, b, x[6], 17, 0xa8304613);
- b = md5Round1(b, c, d, a, x[7], 22, 0xfd469501);
- a = md5Round1(a, b, c, d, x[8], 7, 0x698098d8);
- d = md5Round1(d, a, b, c, x[9], 12, 0x8b44f7af);
- c = md5Round1(c, d, a, b, x[10], 17, 0xffff5bb1);
- b = md5Round1(b, c, d, a, x[11], 22, 0x895cd7be);
- a = md5Round1(a, b, c, d, x[12], 7, 0x6b901122);
- d = md5Round1(d, a, b, c, x[13], 12, 0xfd987193);
- c = md5Round1(c, d, a, b, x[14], 17, 0xa679438e);
- b = md5Round1(b, c, d, a, x[15], 22, 0x49b40821);
-
- // round 2
- a = md5Round2(a, b, c, d, x[1], 5, 0xf61e2562);
- d = md5Round2(d, a, b, c, x[6], 9, 0xc040b340);
- c = md5Round2(c, d, a, b, x[11], 14, 0x265e5a51);
- b = md5Round2(b, c, d, a, x[0], 20, 0xe9b6c7aa);
- a = md5Round2(a, b, c, d, x[5], 5, 0xd62f105d);
- d = md5Round2(d, a, b, c, x[10], 9, 0x02441453);
- c = md5Round2(c, d, a, b, x[15], 14, 0xd8a1e681);
- b = md5Round2(b, c, d, a, x[4], 20, 0xe7d3fbc8);
- a = md5Round2(a, b, c, d, x[9], 5, 0x21e1cde6);
- d = md5Round2(d, a, b, c, x[14], 9, 0xc33707d6);
- c = md5Round2(c, d, a, b, x[3], 14, 0xf4d50d87);
- b = md5Round2(b, c, d, a, x[8], 20, 0x455a14ed);
- a = md5Round2(a, b, c, d, x[13], 5, 0xa9e3e905);
- d = md5Round2(d, a, b, c, x[2], 9, 0xfcefa3f8);
- c = md5Round2(c, d, a, b, x[7], 14, 0x676f02d9);
- b = md5Round2(b, c, d, a, x[12], 20, 0x8d2a4c8a);
-
- // round 3
- a = md5Round3(a, b, c, d, x[5], 4, 0xfffa3942);
- d = md5Round3(d, a, b, c, x[8], 11, 0x8771f681);
- c = md5Round3(c, d, a, b, x[11], 16, 0x6d9d6122);
- b = md5Round3(b, c, d, a, x[14], 23, 0xfde5380c);
- a = md5Round3(a, b, c, d, x[1], 4, 0xa4beea44);
- d = md5Round3(d, a, b, c, x[4], 11, 0x4bdecfa9);
- c = md5Round3(c, d, a, b, x[7], 16, 0xf6bb4b60);
- b = md5Round3(b, c, d, a, x[10], 23, 0xbebfbc70);
- a = md5Round3(a, b, c, d, x[13], 4, 0x289b7ec6);
- d = md5Round3(d, a, b, c, x[0], 11, 0xeaa127fa);
- c = md5Round3(c, d, a, b, x[3], 16, 0xd4ef3085);
- b = md5Round3(b, c, d, a, x[6], 23, 0x04881d05);
- a = md5Round3(a, b, c, d, x[9], 4, 0xd9d4d039);
- d = md5Round3(d, a, b, c, x[12], 11, 0xe6db99e5);
- c = md5Round3(c, d, a, b, x[15], 16, 0x1fa27cf8);
- b = md5Round3(b, c, d, a, x[2], 23, 0xc4ac5665);
-
- // round 4
- a = md5Round4(a, b, c, d, x[0], 6, 0xf4292244);
- d = md5Round4(d, a, b, c, x[7], 10, 0x432aff97);
- c = md5Round4(c, d, a, b, x[14], 15, 0xab9423a7);
- b = md5Round4(b, c, d, a, x[5], 21, 0xfc93a039);
- a = md5Round4(a, b, c, d, x[12], 6, 0x655b59c3);
- d = md5Round4(d, a, b, c, x[3], 10, 0x8f0ccc92);
- c = md5Round4(c, d, a, b, x[10], 15, 0xffeff47d);
- b = md5Round4(b, c, d, a, x[1], 21, 0x85845dd1);
- a = md5Round4(a, b, c, d, x[8], 6, 0x6fa87e4f);
- d = md5Round4(d, a, b, c, x[15], 10, 0xfe2ce6e0);
- c = md5Round4(c, d, a, b, x[6], 15, 0xa3014314);
- b = md5Round4(b, c, d, a, x[13], 21, 0x4e0811a1);
- a = md5Round4(a, b, c, d, x[4], 6, 0xf7537e82);
- d = md5Round4(d, a, b, c, x[11], 10, 0xbd3af235);
- c = md5Round4(c, d, a, b, x[2], 15, 0x2ad7d2bb);
- b = md5Round4(b, c, d, a, x[9], 21, 0xeb86d391);
-
- // increment a, b, c, d
- a += aa;
- b += bb;
- c += cc;
- d += dd;
- }
-
- // break digest into bytes
- digest[0] = (Guchar)(a & 0xff);
- digest[1] = (Guchar)((a >>= 8) & 0xff);
- digest[2] = (Guchar)((a >>= 8) & 0xff);
- digest[3] = (Guchar)((a >>= 8) & 0xff);
- digest[4] = (Guchar)(b & 0xff);
- digest[5] = (Guchar)((b >>= 8) & 0xff);
- digest[6] = (Guchar)((b >>= 8) & 0xff);
- digest[7] = (Guchar)((b >>= 8) & 0xff);
- digest[8] = (Guchar)(c & 0xff);
- digest[9] = (Guchar)((c >>= 8) & 0xff);
- digest[10] = (Guchar)((c >>= 8) & 0xff);
- digest[11] = (Guchar)((c >>= 8) & 0xff);
- digest[12] = (Guchar)(d & 0xff);
- digest[13] = (Guchar)((d >>= 8) & 0xff);
- digest[14] = (Guchar)((d >>= 8) & 0xff);
- digest[15] = (Guchar)((d >>= 8) & 0xff);
-}
diff --git a/Build/source/libs/xpdf/xpdf/Decrypt.h b/Build/source/libs/xpdf/xpdf/Decrypt.h
deleted file mode 100644
index c3ad5a5b6e7..00000000000
--- a/Build/source/libs/xpdf/xpdf/Decrypt.h
+++ /dev/null
@@ -1,131 +0,0 @@
-//========================================================================
-//
-// Decrypt.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: Decrypt.h 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r320 | oneiros | 2007-12-18 13:40:01 +0100 (Di, 18 Dez 2007) | 2 lines
-*
-* Import libpng 1.2.24 into stable
-*
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#ifndef DECRYPT_H
-#define DECRYPT_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "GString.h"
-#include "Object.h"
-#include "Stream.h"
-
-//------------------------------------------------------------------------
-// Decrypt
-//------------------------------------------------------------------------
-
-class Decrypt {
-public:
-
- // Generate a file key. The <fileKey> buffer must have space for at
- // least 16 bytes. Checks <ownerPassword> and then <userPassword>
- // and returns true if either is correct. Sets <ownerPasswordOk> if
- // the owner password was correct. Either or both of the passwords
- // may be NULL, which is treated as an empty string.
- static GBool makeFileKey(int encVersion, int encRevision, int keyLength,
- GString *ownerKey, GString *userKey,
- int permissions, GString *fileID,
- GString *ownerPassword, GString *userPassword,
- Guchar *fileKey, GBool encryptMetadata,
- GBool *ownerPasswordOk);
-
-private:
-
- static GBool makeFileKey2(int encVersion, int encRevision, int keyLength,
- GString *ownerKey, GString *userKey,
- int permissions, GString *fileID,
- GString *userPassword, Guchar *fileKey,
- GBool encryptMetadata);
-};
-
-//------------------------------------------------------------------------
-// DecryptStream
-//------------------------------------------------------------------------
-
-struct DecryptRC4State {
- Guchar state[256];
- Guchar x, y;
- int buf;
-};
-
-struct DecryptAESState {
- Guint w[44];
- Guchar state[16];
- Guchar cbc[16];
- Guchar buf[16];
- int bufIdx;
-};
-
-class DecryptStream: public FilterStream {
-public:
-
- DecryptStream(Stream *strA, Guchar *fileKey,
- CryptAlgorithm algoA, int keyLength,
- int objNum, int objGen);
- virtual ~DecryptStream();
- virtual StreamKind getKind() { return strCrypt; }
- virtual void reset();
- virtual int getChar();
- virtual int lookChar();
- virtual GBool isBinary(GBool last);
- virtual Stream *getUndecodedStream() { return this; }
-
-private:
-
- CryptAlgorithm algo;
- int objKeyLength;
- Guchar objKey[16 + 9];
-
- union {
- DecryptRC4State rc4;
- DecryptAESState aes;
- } state;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Dict.cc b/Build/source/libs/xpdf/xpdf/Dict.cc
deleted file mode 100644
index dd1517f0ab9..00000000000
--- a/Build/source/libs/xpdf/xpdf/Dict.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-//========================================================================
-//
-// Dict.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include <string.h>
-#include "gmem.h"
-#include "Object.h"
-#include "XRef.h"
-#include "Dict.h"
-
-//------------------------------------------------------------------------
-// Dict
-//------------------------------------------------------------------------
-
-Dict::Dict(XRef *xrefA) {
- xref = xrefA;
- entries = NULL;
- size = length = 0;
- ref = 1;
-}
-
-Dict::~Dict() {
- int i;
-
- for (i = 0; i < length; ++i) {
- gfree(entries[i].key);
- entries[i].val.free();
- }
- gfree(entries);
-}
-
-void Dict::add(char *key, Object *val) {
- if (length == size) {
- if (length == 0) {
- size = 8;
- } else {
- size *= 2;
- }
- entries = (DictEntry *)greallocn(entries, size, sizeof(DictEntry));
- }
- entries[length].key = key;
- entries[length].val = *val;
- ++length;
-}
-
-inline DictEntry *Dict::find(char *key) {
- int i;
-
- for (i = 0; i < length; ++i) {
- if (!strcmp(key, entries[i].key))
- return &entries[i];
- }
- return NULL;
-}
-
-GBool Dict::is(char *type) {
- DictEntry *e;
-
- return (e = find("Type")) && e->val.isName(type);
-}
-
-Object *Dict::lookup(char *key, Object *obj) {
- DictEntry *e;
-
- return (e = find(key)) ? e->val.fetch(xref, obj) : obj->initNull();
-}
-
-Object *Dict::lookupNF(char *key, Object *obj) {
- DictEntry *e;
-
- return (e = find(key)) ? e->val.copy(obj) : obj->initNull();
-}
-
-char *Dict::getKey(int i) {
- return entries[i].key;
-}
-
-Object *Dict::getVal(int i, Object *obj) {
- return entries[i].val.fetch(xref, obj);
-}
-
-Object *Dict::getValNF(int i, Object *obj) {
- return entries[i].val.copy(obj);
-}
diff --git a/Build/source/libs/xpdf/xpdf/Dict.h b/Build/source/libs/xpdf/xpdf/Dict.h
deleted file mode 100644
index 08f55ecd48e..00000000000
--- a/Build/source/libs/xpdf/xpdf/Dict.h
+++ /dev/null
@@ -1,77 +0,0 @@
-//========================================================================
-//
-// Dict.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef DICT_H
-#define DICT_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "Object.h"
-
-//------------------------------------------------------------------------
-// Dict
-//------------------------------------------------------------------------
-
-struct DictEntry {
- char *key;
- Object val;
-};
-
-class Dict {
-public:
-
- // Constructor.
- Dict(XRef *xrefA);
-
- // Destructor.
- ~Dict();
-
- // Reference counting.
- int incRef() { return ++ref; }
- int decRef() { return --ref; }
-
- // Get number of entries.
- int getLength() { return length; }
-
- // Add an entry. NB: does not copy key.
- void add(char *key, Object *val);
-
- // Check if dictionary is of specified type.
- GBool is(char *type);
-
- // Look up an entry and return the value. Returns a null object
- // if <key> is not in the dictionary.
- Object *lookup(char *key, Object *obj);
- Object *lookupNF(char *key, Object *obj);
-
- // Iterative accessors.
- char *getKey(int i);
- Object *getVal(int i, Object *obj);
- Object *getValNF(int i, Object *obj);
-
- // Set the xref pointer. This is only used in one special case: the
- // trailer dictionary, which is read before the xref table is
- // parsed.
- void setXRef(XRef *xrefA) { xref = xrefA; }
-
-private:
-
- XRef *xref; // the xref table for this PDF file
- DictEntry *entries; // array of entries
- int size; // size of <entries> array
- int length; // number of entries in dictionary
- int ref; // reference count
-
- DictEntry *find(char *key);
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Error.cc b/Build/source/libs/xpdf/xpdf/Error.cc
deleted file mode 100644
index c03f75f4835..00000000000
--- a/Build/source/libs/xpdf/xpdf/Error.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-//========================================================================
-//
-// Error.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include "GlobalParams.h"
-#include "Error.h"
-
-void CDECL error(int pos, char *msg, ...) {
- va_list args;
-
- // NB: this can be called before the globalParams object is created
- if (globalParams && globalParams->getErrQuiet()) {
- return;
- }
- if (pos >= 0) {
- fprintf(stderr, "Error (%d): ", pos);
- } else {
- fprintf(stderr, "Error: ");
- }
- va_start(args, msg);
- vfprintf(stderr, msg, args);
- va_end(args);
- fprintf(stderr, "\n");
- fflush(stderr);
-}
diff --git a/Build/source/libs/xpdf/xpdf/Error.h b/Build/source/libs/xpdf/xpdf/Error.h
deleted file mode 100644
index 0ce55e9ab41..00000000000
--- a/Build/source/libs/xpdf/xpdf/Error.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//========================================================================
-//
-// Error.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef ERROR_H
-#define ERROR_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include <stdio.h>
-#include "config.h"
-
-extern void CDECL error(int pos, char *msg, ...);
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/ErrorCodes.h b/Build/source/libs/xpdf/xpdf/ErrorCodes.h
deleted file mode 100644
index b28528df564..00000000000
--- a/Build/source/libs/xpdf/xpdf/ErrorCodes.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//========================================================================
-//
-// ErrorCodes.h
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef ERRORCODES_H
-#define ERRORCODES_H
-
-#define errNone 0 // no error
-
-#define errOpenFile 1 // couldn't open the PDF file
-
-#define errBadCatalog 2 // couldn't read the page catalog
-
-#define errDamaged 3 // PDF file was damaged and couldn't be
- // repaired
-
-#define errEncrypted 4 // file was encrypted and password was
- // incorrect or not supplied
-
-#define errHighlightFile 5 // nonexistent or invalid highlight file
-
-#define errBadPrinter 6 // invalid printer
-
-#define errPrinting 7 // error during printing
-
-#define errPermission 8 // PDF file doesn't allow that operation
-
-#define errBadPageNum 9 // invalid page number
-
-#define errFileIO 10 // file I/O error
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/FontEncodingTables.cc b/Build/source/libs/xpdf/xpdf/FontEncodingTables.cc
deleted file mode 100644
index f3b9280aa31..00000000000
--- a/Build/source/libs/xpdf/xpdf/FontEncodingTables.cc
+++ /dev/null
@@ -1,1824 +0,0 @@
-//========================================================================
-//
-// FontEncodingTables.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-#include <stdlib.h>
-#include "FontEncodingTables.h"
-
-char *macRomanEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclam",
- "quotedbl",
- "numbersign",
- "dollar",
- "percent",
- "ampersand",
- "quotesingle",
- "parenleft",
- "parenright",
- "asterisk",
- "plus",
- "comma",
- "hyphen",
- "period",
- "slash",
- "zero",
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "colon",
- "semicolon",
- "less",
- "equal",
- "greater",
- "question",
- "at",
- "A",
- "B",
- "C",
- "D",
- "E",
- "F",
- "G",
- "H",
- "I",
- "J",
- "K",
- "L",
- "M",
- "N",
- "O",
- "P",
- "Q",
- "R",
- "S",
- "T",
- "U",
- "V",
- "W",
- "X",
- "Y",
- "Z",
- "bracketleft",
- "backslash",
- "bracketright",
- "asciicircum",
- "underscore",
- "grave",
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "g",
- "h",
- "i",
- "j",
- "k",
- "l",
- "m",
- "n",
- "o",
- "p",
- "q",
- "r",
- "s",
- "t",
- "u",
- "v",
- "w",
- "x",
- "y",
- "z",
- "braceleft",
- "bar",
- "braceright",
- "asciitilde",
- NULL,
- "Adieresis",
- "Aring",
- "Ccedilla",
- "Eacute",
- "Ntilde",
- "Odieresis",
- "Udieresis",
- "aacute",
- "agrave",
- "acircumflex",
- "adieresis",
- "atilde",
- "aring",
- "ccedilla",
- "eacute",
- "egrave",
- "ecircumflex",
- "edieresis",
- "iacute",
- "igrave",
- "icircumflex",
- "idieresis",
- "ntilde",
- "oacute",
- "ograve",
- "ocircumflex",
- "odieresis",
- "otilde",
- "uacute",
- "ugrave",
- "ucircumflex",
- "udieresis",
- "dagger",
- "degree",
- "cent",
- "sterling",
- "section",
- "bullet",
- "paragraph",
- "germandbls",
- "registered",
- "copyright",
- "trademark",
- "acute",
- "dieresis",
- "notequal",
- "AE",
- "Oslash",
- "infinity",
- "plusminus",
- "lessequal",
- "greaterequal",
- "yen",
- "mu",
- "partialdiff",
- "summation",
- "product",
- "pi",
- "integral",
- "ordfeminine",
- "ordmasculine",
- "Omega",
- "ae",
- "oslash",
- "questiondown",
- "exclamdown",
- "logicalnot",
- "radical",
- "florin",
- "approxequal",
- "Delta",
- "guillemotleft",
- "guillemotright",
- "ellipsis",
- "space",
- "Agrave",
- "Atilde",
- "Otilde",
- "OE",
- "oe",
- "endash",
- "emdash",
- "quotedblleft",
- "quotedblright",
- "quoteleft",
- "quoteright",
- "divide",
- "lozenge",
- "ydieresis",
- "Ydieresis",
- "fraction",
- "currency",
- "guilsinglleft",
- "guilsinglright",
- "fi",
- "fl",
- "daggerdbl",
- "periodcentered",
- "quotesinglbase",
- "quotedblbase",
- "perthousand",
- "Acircumflex",
- "Ecircumflex",
- "Aacute",
- "Edieresis",
- "Egrave",
- "Iacute",
- "Icircumflex",
- "Idieresis",
- "Igrave",
- "Oacute",
- "Ocircumflex",
- "apple",
- "Ograve",
- "Uacute",
- "Ucircumflex",
- "Ugrave",
- "dotlessi",
- "circumflex",
- "tilde",
- "macron",
- "breve",
- "dotaccent",
- "ring",
- "cedilla",
- "hungarumlaut",
- "ogonek",
- "caron"
-};
-
-char *macExpertEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclamsmall",
- "Hungarumlautsmall",
- "centoldstyle",
- "dollaroldstyle",
- "dollarsuperior",
- "ampersandsmall",
- "Acutesmall",
- "parenleftsuperior",
- "parenrightsuperior",
- "twodotenleader",
- "onedotenleader",
- "comma",
- "hyphen",
- "period",
- "fraction",
- "zerooldstyle",
- "oneoldstyle",
- "twooldstyle",
- "threeoldstyle",
- "fouroldstyle",
- "fiveoldstyle",
- "sixoldstyle",
- "sevenoldstyle",
- "eightoldstyle",
- "nineoldstyle",
- "colon",
- "semicolon",
- NULL,
- "threequartersemdash",
- NULL,
- "questionsmall",
- NULL,
- NULL,
- NULL,
- NULL,
- "Ethsmall",
- NULL,
- NULL,
- "onequarter",
- "onehalf",
- "threequarters",
- "oneeighth",
- "threeeighths",
- "fiveeighths",
- "seveneighths",
- "onethird",
- "twothirds",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "ff",
- "fi",
- "fl",
- "ffi",
- "ffl",
- "parenleftinferior",
- NULL,
- "parenrightinferior",
- "Circumflexsmall",
- "hypheninferior",
- "Gravesmall",
- "Asmall",
- "Bsmall",
- "Csmall",
- "Dsmall",
- "Esmall",
- "Fsmall",
- "Gsmall",
- "Hsmall",
- "Ismall",
- "Jsmall",
- "Ksmall",
- "Lsmall",
- "Msmall",
- "Nsmall",
- "Osmall",
- "Psmall",
- "Qsmall",
- "Rsmall",
- "Ssmall",
- "Tsmall",
- "Usmall",
- "Vsmall",
- "Wsmall",
- "Xsmall",
- "Ysmall",
- "Zsmall",
- "colonmonetary",
- "onefitted",
- "rupiah",
- "Tildesmall",
- NULL,
- NULL,
- "asuperior",
- "centsuperior",
- NULL,
- NULL,
- NULL,
- NULL,
- "Aacutesmall",
- "Agravesmall",
- "Acircumflexsmall",
- "Adieresissmall",
- "Atildesmall",
- "Aringsmall",
- "Ccedillasmall",
- "Eacutesmall",
- "Egravesmall",
- "Ecircumflexsmall",
- "Edieresissmall",
- "Iacutesmall",
- "Igravesmall",
- "Icircumflexsmall",
- "Idieresissmall",
- "Ntildesmall",
- "Oacutesmall",
- "Ogravesmall",
- "Ocircumflexsmall",
- "Odieresissmall",
- "Otildesmall",
- "Uacutesmall",
- "Ugravesmall",
- "Ucircumflexsmall",
- "Udieresissmall",
- NULL,
- "eightsuperior",
- "fourinferior",
- "threeinferior",
- "sixinferior",
- "eightinferior",
- "seveninferior",
- "Scaronsmall",
- NULL,
- "centinferior",
- "twoinferior",
- NULL,
- "Dieresissmall",
- NULL,
- "Caronsmall",
- "osuperior",
- "fiveinferior",
- NULL,
- "commainferior",
- "periodinferior",
- "Yacutesmall",
- NULL,
- "dollarinferior",
- NULL,
- NULL,
- "Thornsmall",
- NULL,
- "nineinferior",
- "zeroinferior",
- "Zcaronsmall",
- "AEsmall",
- "Oslashsmall",
- "questiondownsmall",
- "oneinferior",
- "Lslashsmall",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "Cedillasmall",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "OEsmall",
- "figuredash",
- "hyphensuperior",
- NULL,
- NULL,
- NULL,
- NULL,
- "exclamdownsmall",
- NULL,
- "Ydieresissmall",
- NULL,
- "onesuperior",
- "twosuperior",
- "threesuperior",
- "foursuperior",
- "fivesuperior",
- "sixsuperior",
- "sevensuperior",
- "ninesuperior",
- "zerosuperior",
- NULL,
- "esuperior",
- "rsuperior",
- "tsuperior",
- NULL,
- NULL,
- "isuperior",
- "ssuperior",
- "dsuperior",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "lsuperior",
- "Ogoneksmall",
- "Brevesmall",
- "Macronsmall",
- "bsuperior",
- "nsuperior",
- "msuperior",
- "commasuperior",
- "periodsuperior",
- "Dotaccentsmall",
- "Ringsmall",
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-char *winAnsiEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclam",
- "quotedbl",
- "numbersign",
- "dollar",
- "percent",
- "ampersand",
- "quotesingle",
- "parenleft",
- "parenright",
- "asterisk",
- "plus",
- "comma",
- "hyphen",
- "period",
- "slash",
- "zero",
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "colon",
- "semicolon",
- "less",
- "equal",
- "greater",
- "question",
- "at",
- "A",
- "B",
- "C",
- "D",
- "E",
- "F",
- "G",
- "H",
- "I",
- "J",
- "K",
- "L",
- "M",
- "N",
- "O",
- "P",
- "Q",
- "R",
- "S",
- "T",
- "U",
- "V",
- "W",
- "X",
- "Y",
- "Z",
- "bracketleft",
- "backslash",
- "bracketright",
- "asciicircum",
- "underscore",
- "grave",
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "g",
- "h",
- "i",
- "j",
- "k",
- "l",
- "m",
- "n",
- "o",
- "p",
- "q",
- "r",
- "s",
- "t",
- "u",
- "v",
- "w",
- "x",
- "y",
- "z",
- "braceleft",
- "bar",
- "braceright",
- "asciitilde",
- "bullet",
- "Euro",
- "bullet",
- "quotesinglbase",
- "florin",
- "quotedblbase",
- "ellipsis",
- "dagger",
- "daggerdbl",
- "circumflex",
- "perthousand",
- "Scaron",
- "guilsinglleft",
- "OE",
- "bullet",
- "Zcaron",
- "bullet",
- "bullet",
- "quoteleft",
- "quoteright",
- "quotedblleft",
- "quotedblright",
- "bullet",
- "endash",
- "emdash",
- "tilde",
- "trademark",
- "scaron",
- "guilsinglright",
- "oe",
- "bullet",
- "zcaron",
- "Ydieresis",
- "space",
- "exclamdown",
- "cent",
- "sterling",
- "currency",
- "yen",
- "brokenbar",
- "section",
- "dieresis",
- "copyright",
- "ordfeminine",
- "guillemotleft",
- "logicalnot",
- "hyphen",
- "registered",
- "macron",
- "degree",
- "plusminus",
- "twosuperior",
- "threesuperior",
- "acute",
- "mu",
- "paragraph",
- "periodcentered",
- "cedilla",
- "onesuperior",
- "ordmasculine",
- "guillemotright",
- "onequarter",
- "onehalf",
- "threequarters",
- "questiondown",
- "Agrave",
- "Aacute",
- "Acircumflex",
- "Atilde",
- "Adieresis",
- "Aring",
- "AE",
- "Ccedilla",
- "Egrave",
- "Eacute",
- "Ecircumflex",
- "Edieresis",
- "Igrave",
- "Iacute",
- "Icircumflex",
- "Idieresis",
- "Eth",
- "Ntilde",
- "Ograve",
- "Oacute",
- "Ocircumflex",
- "Otilde",
- "Odieresis",
- "multiply",
- "Oslash",
- "Ugrave",
- "Uacute",
- "Ucircumflex",
- "Udieresis",
- "Yacute",
- "Thorn",
- "germandbls",
- "agrave",
- "aacute",
- "acircumflex",
- "atilde",
- "adieresis",
- "aring",
- "ae",
- "ccedilla",
- "egrave",
- "eacute",
- "ecircumflex",
- "edieresis",
- "igrave",
- "iacute",
- "icircumflex",
- "idieresis",
- "eth",
- "ntilde",
- "ograve",
- "oacute",
- "ocircumflex",
- "otilde",
- "odieresis",
- "divide",
- "oslash",
- "ugrave",
- "uacute",
- "ucircumflex",
- "udieresis",
- "yacute",
- "thorn",
- "ydieresis"
-};
-
-char *standardEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclam",
- "quotedbl",
- "numbersign",
- "dollar",
- "percent",
- "ampersand",
- "quoteright",
- "parenleft",
- "parenright",
- "asterisk",
- "plus",
- "comma",
- "hyphen",
- "period",
- "slash",
- "zero",
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "colon",
- "semicolon",
- "less",
- "equal",
- "greater",
- "question",
- "at",
- "A",
- "B",
- "C",
- "D",
- "E",
- "F",
- "G",
- "H",
- "I",
- "J",
- "K",
- "L",
- "M",
- "N",
- "O",
- "P",
- "Q",
- "R",
- "S",
- "T",
- "U",
- "V",
- "W",
- "X",
- "Y",
- "Z",
- "bracketleft",
- "backslash",
- "bracketright",
- "asciicircum",
- "underscore",
- "quoteleft",
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "g",
- "h",
- "i",
- "j",
- "k",
- "l",
- "m",
- "n",
- "o",
- "p",
- "q",
- "r",
- "s",
- "t",
- "u",
- "v",
- "w",
- "x",
- "y",
- "z",
- "braceleft",
- "bar",
- "braceright",
- "asciitilde",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "exclamdown",
- "cent",
- "sterling",
- "fraction",
- "yen",
- "florin",
- "section",
- "currency",
- "quotesingle",
- "quotedblleft",
- "guillemotleft",
- "guilsinglleft",
- "guilsinglright",
- "fi",
- "fl",
- NULL,
- "endash",
- "dagger",
- "daggerdbl",
- "periodcentered",
- NULL,
- "paragraph",
- "bullet",
- "quotesinglbase",
- "quotedblbase",
- "quotedblright",
- "guillemotright",
- "ellipsis",
- "perthousand",
- NULL,
- "questiondown",
- NULL,
- "grave",
- "acute",
- "circumflex",
- "tilde",
- "macron",
- "breve",
- "dotaccent",
- "dieresis",
- NULL,
- "ring",
- "cedilla",
- NULL,
- "hungarumlaut",
- "ogonek",
- "caron",
- "emdash",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "AE",
- NULL,
- "ordfeminine",
- NULL,
- NULL,
- NULL,
- NULL,
- "Lslash",
- "Oslash",
- "OE",
- "ordmasculine",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "ae",
- NULL,
- NULL,
- NULL,
- "dotlessi",
- NULL,
- NULL,
- "lslash",
- "oslash",
- "oe",
- "germandbls",
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-char *expertEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclamsmall",
- "Hungarumlautsmall",
- NULL,
- "dollaroldstyle",
- "dollarsuperior",
- "ampersandsmall",
- "Acutesmall",
- "parenleftsuperior",
- "parenrightsuperior",
- "twodotenleader",
- "onedotenleader",
- "comma",
- "hyphen",
- "period",
- "fraction",
- "zerooldstyle",
- "oneoldstyle",
- "twooldstyle",
- "threeoldstyle",
- "fouroldstyle",
- "fiveoldstyle",
- "sixoldstyle",
- "sevenoldstyle",
- "eightoldstyle",
- "nineoldstyle",
- "colon",
- "semicolon",
- "commasuperior",
- "threequartersemdash",
- "periodsuperior",
- "questionsmall",
- NULL,
- "asuperior",
- "bsuperior",
- "centsuperior",
- "dsuperior",
- "esuperior",
- NULL,
- NULL,
- NULL,
- "isuperior",
- NULL,
- NULL,
- "lsuperior",
- "msuperior",
- "nsuperior",
- "osuperior",
- NULL,
- NULL,
- "rsuperior",
- "ssuperior",
- "tsuperior",
- NULL,
- "ff",
- "fi",
- "fl",
- "ffi",
- "ffl",
- "parenleftinferior",
- NULL,
- "parenrightinferior",
- "Circumflexsmall",
- "hyphensuperior",
- "Gravesmall",
- "Asmall",
- "Bsmall",
- "Csmall",
- "Dsmall",
- "Esmall",
- "Fsmall",
- "Gsmall",
- "Hsmall",
- "Ismall",
- "Jsmall",
- "Ksmall",
- "Lsmall",
- "Msmall",
- "Nsmall",
- "Osmall",
- "Psmall",
- "Qsmall",
- "Rsmall",
- "Ssmall",
- "Tsmall",
- "Usmall",
- "Vsmall",
- "Wsmall",
- "Xsmall",
- "Ysmall",
- "Zsmall",
- "colonmonetary",
- "onefitted",
- "rupiah",
- "Tildesmall",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "exclamdownsmall",
- "centoldstyle",
- "Lslashsmall",
- NULL,
- NULL,
- "Scaronsmall",
- "Zcaronsmall",
- "Dieresissmall",
- "Brevesmall",
- "Caronsmall",
- NULL,
- "Dotaccentsmall",
- NULL,
- NULL,
- "Macronsmall",
- NULL,
- NULL,
- "figuredash",
- "hypheninferior",
- NULL,
- NULL,
- "Ogoneksmall",
- "Ringsmall",
- "Cedillasmall",
- NULL,
- NULL,
- NULL,
- "onequarter",
- "onehalf",
- "threequarters",
- "questiondownsmall",
- "oneeighth",
- "threeeighths",
- "fiveeighths",
- "seveneighths",
- "onethird",
- "twothirds",
- NULL,
- NULL,
- "zerosuperior",
- "onesuperior",
- "twosuperior",
- "threesuperior",
- "foursuperior",
- "fivesuperior",
- "sixsuperior",
- "sevensuperior",
- "eightsuperior",
- "ninesuperior",
- "zeroinferior",
- "oneinferior",
- "twoinferior",
- "threeinferior",
- "fourinferior",
- "fiveinferior",
- "sixinferior",
- "seveninferior",
- "eightinferior",
- "nineinferior",
- "centinferior",
- "dollarinferior",
- "periodinferior",
- "commainferior",
- "Agravesmall",
- "Aacutesmall",
- "Acircumflexsmall",
- "Atildesmall",
- "Adieresissmall",
- "Aringsmall",
- "AEsmall",
- "Ccedillasmall",
- "Egravesmall",
- "Eacutesmall",
- "Ecircumflexsmall",
- "Edieresissmall",
- "Igravesmall",
- "Iacutesmall",
- "Icircumflexsmall",
- "Idieresissmall",
- "Ethsmall",
- "Ntildesmall",
- "Ogravesmall",
- "Oacutesmall",
- "Ocircumflexsmall",
- "Otildesmall",
- "Odieresissmall",
- "OEsmall",
- "Oslashsmall",
- "Ugravesmall",
- "Uacutesmall",
- "Ucircumflexsmall",
- "Udieresissmall",
- "Yacutesmall",
- "Thornsmall",
- "Ydieresissmall"
-};
-
-char *symbolEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "exclam",
- "universal",
- "numbersign",
- "existential",
- "percent",
- "ampersand",
- "suchthat",
- "parenleft",
- "parenright",
- "asteriskmath",
- "plus",
- "comma",
- "minus",
- "period",
- "slash",
- "zero",
- "one",
- "two",
- "three",
- "four",
- "five",
- "six",
- "seven",
- "eight",
- "nine",
- "colon",
- "semicolon",
- "less",
- "equal",
- "greater",
- "question",
- "congruent",
- "Alpha",
- "Beta",
- "Chi",
- "Delta",
- "Epsilon",
- "Phi",
- "Gamma",
- "Eta",
- "Iota",
- "theta1",
- "Kappa",
- "Lambda",
- "Mu",
- "Nu",
- "Omicron",
- "Pi",
- "Theta",
- "Rho",
- "Sigma",
- "Tau",
- "Upsilon",
- "sigma1",
- "Omega",
- "Xi",
- "Psi",
- "Zeta",
- "bracketleft",
- "therefore",
- "bracketright",
- "perpendicular",
- "underscore",
- "radicalex",
- "alpha",
- "beta",
- "chi",
- "delta",
- "epsilon",
- "phi",
- "gamma",
- "eta",
- "iota",
- "phi1",
- "kappa",
- "lambda",
- "mu",
- "nu",
- "omicron",
- "pi",
- "theta",
- "rho",
- "sigma",
- "tau",
- "upsilon",
- "omega1",
- "omega",
- "xi",
- "psi",
- "zeta",
- "braceleft",
- "bar",
- "braceright",
- "similar",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "Upsilon1",
- "minute",
- "lessequal",
- "fraction",
- "infinity",
- "florin",
- "club",
- "diamond",
- "heart",
- "spade",
- "arrowboth",
- "arrowleft",
- "arrowup",
- "arrowright",
- "arrowdown",
- "degree",
- "plusminus",
- "second",
- "greaterequal",
- "multiply",
- "proportional",
- "partialdiff",
- "bullet",
- "divide",
- "notequal",
- "equivalence",
- "approxequal",
- "ellipsis",
- "arrowvertex",
- "arrowhorizex",
- "carriagereturn",
- "aleph",
- "Ifraktur",
- "Rfraktur",
- "weierstrass",
- "circlemultiply",
- "circleplus",
- "emptyset",
- "intersection",
- "union",
- "propersuperset",
- "reflexsuperset",
- "notsubset",
- "propersubset",
- "reflexsubset",
- "element",
- "notelement",
- "angle",
- "gradient",
- "registerserif",
- "copyrightserif",
- "trademarkserif",
- "product",
- "radical",
- "dotmath",
- "logicalnot",
- "logicaland",
- "logicalor",
- "arrowdblboth",
- "arrowdblleft",
- "arrowdblup",
- "arrowdblright",
- "arrowdbldown",
- "lozenge",
- "angleleft",
- "registersans",
- "copyrightsans",
- "trademarksans",
- "summation",
- "parenlefttp",
- "parenleftex",
- "parenleftbt",
- "bracketlefttp",
- "bracketleftex",
- "bracketleftbt",
- "bracelefttp",
- "braceleftmid",
- "braceleftbt",
- "braceex",
- NULL,
- "angleright",
- "integral",
- "integraltp",
- "integralex",
- "integralbt",
- "parenrighttp",
- "parenrightex",
- "parenrightbt",
- "bracketrighttp",
- "bracketrightex",
- "bracketrightbt",
- "bracerighttp",
- "bracerightmid",
- "bracerightbt",
- NULL
-};
-
-char *zapfDingbatsEncoding[256] = {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "space",
- "a1",
- "a2",
- "a202",
- "a3",
- "a4",
- "a5",
- "a119",
- "a118",
- "a117",
- "a11",
- "a12",
- "a13",
- "a14",
- "a15",
- "a16",
- "a105",
- "a17",
- "a18",
- "a19",
- "a20",
- "a21",
- "a22",
- "a23",
- "a24",
- "a25",
- "a26",
- "a27",
- "a28",
- "a6",
- "a7",
- "a8",
- "a9",
- "a10",
- "a29",
- "a30",
- "a31",
- "a32",
- "a33",
- "a34",
- "a35",
- "a36",
- "a37",
- "a38",
- "a39",
- "a40",
- "a41",
- "a42",
- "a43",
- "a44",
- "a45",
- "a46",
- "a47",
- "a48",
- "a49",
- "a50",
- "a51",
- "a52",
- "a53",
- "a54",
- "a55",
- "a56",
- "a57",
- "a58",
- "a59",
- "a60",
- "a61",
- "a62",
- "a63",
- "a64",
- "a65",
- "a66",
- "a67",
- "a68",
- "a69",
- "a70",
- "a71",
- "a72",
- "a73",
- "a74",
- "a203",
- "a75",
- "a204",
- "a76",
- "a77",
- "a78",
- "a79",
- "a81",
- "a82",
- "a83",
- "a84",
- "a97",
- "a98",
- "a99",
- "a100",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- "a101",
- "a102",
- "a103",
- "a104",
- "a106",
- "a107",
- "a108",
- "a112",
- "a111",
- "a110",
- "a109",
- "a120",
- "a121",
- "a122",
- "a123",
- "a124",
- "a125",
- "a126",
- "a127",
- "a128",
- "a129",
- "a130",
- "a131",
- "a132",
- "a133",
- "a134",
- "a135",
- "a136",
- "a137",
- "a138",
- "a139",
- "a140",
- "a141",
- "a142",
- "a143",
- "a144",
- "a145",
- "a146",
- "a147",
- "a148",
- "a149",
- "a150",
- "a151",
- "a152",
- "a153",
- "a154",
- "a155",
- "a156",
- "a157",
- "a158",
- "a159",
- "a160",
- "a161",
- "a163",
- "a164",
- "a196",
- "a165",
- "a192",
- "a166",
- "a167",
- "a168",
- "a169",
- "a170",
- "a171",
- "a172",
- "a173",
- "a162",
- "a174",
- "a175",
- "a176",
- "a177",
- "a178",
- "a179",
- "a193",
- "a180",
- "a199",
- "a181",
- "a200",
- "a182",
- NULL,
- "a201",
- "a183",
- "a184",
- "a197",
- "a185",
- "a194",
- "a198",
- "a186",
- "a195",
- "a187",
- "a188",
- "a189",
- "a190",
- "a191",
- NULL
-};
diff --git a/Build/source/libs/xpdf/xpdf/FontEncodingTables.h b/Build/source/libs/xpdf/xpdf/FontEncodingTables.h
deleted file mode 100644
index 8b0a1e7e993..00000000000
--- a/Build/source/libs/xpdf/xpdf/FontEncodingTables.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//========================================================================
-//
-// FontEncodingTables.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FONTENCODINGTABLES_H
-#define FONTENCODINGTABLES_H
-
-extern char *macRomanEncoding[];
-extern char *macExpertEncoding[];
-extern char *winAnsiEncoding[];
-extern char *standardEncoding[];
-extern char *expertEncoding[];
-extern char *symbolEncoding[];
-extern char *zapfDingbatsEncoding[];
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Function.cc b/Build/source/libs/xpdf/xpdf/Function.cc
deleted file mode 100644
index a4d51c73821..00000000000
--- a/Build/source/libs/xpdf/xpdf/Function.cc
+++ /dev/null
@@ -1,1573 +0,0 @@
-//========================================================================
-//
-// Function.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "gmem.h"
-#include "Object.h"
-#include "Dict.h"
-#include "Stream.h"
-#include "Error.h"
-#include "Function.h"
-
-//------------------------------------------------------------------------
-// Function
-//------------------------------------------------------------------------
-
-Function::Function() {
-}
-
-Function::~Function() {
-}
-
-Function *Function::parse(Object *funcObj) {
- Function *func;
- Dict *dict;
- int funcType;
- Object obj1;
-
- if (funcObj->isStream()) {
- dict = funcObj->streamGetDict();
- } else if (funcObj->isDict()) {
- dict = funcObj->getDict();
- } else if (funcObj->isName("Identity")) {
- return new IdentityFunction();
- } else {
- error(-1, "Expected function dictionary or stream");
- return NULL;
- }
-
- if (!dict->lookup("FunctionType", &obj1)->isInt()) {
- error(-1, "Function type is missing or wrong type");
- obj1.free();
- return NULL;
- }
- funcType = obj1.getInt();
- obj1.free();
-
- if (funcType == 0) {
- func = new SampledFunction(funcObj, dict);
- } else if (funcType == 2) {
- func = new ExponentialFunction(funcObj, dict);
- } else if (funcType == 3) {
- func = new StitchingFunction(funcObj, dict);
- } else if (funcType == 4) {
- func = new PostScriptFunction(funcObj, dict);
- } else {
- error(-1, "Unimplemented function type (%d)", funcType);
- return NULL;
- }
- if (!func->isOk()) {
- delete func;
- return NULL;
- }
-
- return func;
-}
-
-GBool Function::init(Dict *dict) {
- Object obj1, obj2;
- int i;
-
- //----- Domain
- if (!dict->lookup("Domain", &obj1)->isArray()) {
- error(-1, "Function is missing domain");
- goto err2;
- }
- m = obj1.arrayGetLength() / 2;
- if (m > funcMaxInputs) {
- error(-1, "Functions with more than %d inputs are unsupported",
- funcMaxInputs);
- goto err2;
- }
- for (i = 0; i < m; ++i) {
- obj1.arrayGet(2*i, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function domain array");
- goto err1;
- }
- domain[i][0] = obj2.getNum();
- obj2.free();
- obj1.arrayGet(2*i+1, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function domain array");
- goto err1;
- }
- domain[i][1] = obj2.getNum();
- obj2.free();
- }
- obj1.free();
-
- //----- Range
- hasRange = gFalse;
- n = 0;
- if (dict->lookup("Range", &obj1)->isArray()) {
- hasRange = gTrue;
- n = obj1.arrayGetLength() / 2;
- if (n > funcMaxOutputs) {
- error(-1, "Functions with more than %d outputs are unsupported",
- funcMaxOutputs);
- goto err2;
- }
- for (i = 0; i < n; ++i) {
- obj1.arrayGet(2*i, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function range array");
- goto err1;
- }
- range[i][0] = obj2.getNum();
- obj2.free();
- obj1.arrayGet(2*i+1, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function range array");
- goto err1;
- }
- range[i][1] = obj2.getNum();
- obj2.free();
- }
- }
- obj1.free();
-
- return gTrue;
-
- err1:
- obj2.free();
- err2:
- obj1.free();
- return gFalse;
-}
-
-//------------------------------------------------------------------------
-// IdentityFunction
-//------------------------------------------------------------------------
-
-IdentityFunction::IdentityFunction() {
- int i;
-
- // fill these in with arbitrary values just in case they get used
- // somewhere
- m = funcMaxInputs;
- n = funcMaxOutputs;
- for (i = 0; i < funcMaxInputs; ++i) {
- domain[i][0] = 0;
- domain[i][1] = 1;
- }
- hasRange = gFalse;
-}
-
-IdentityFunction::~IdentityFunction() {
-}
-
-void IdentityFunction::transform(double *in, double *out) {
- int i;
-
- for (i = 0; i < funcMaxOutputs; ++i) {
- out[i] = in[i];
- }
-}
-
-//------------------------------------------------------------------------
-// SampledFunction
-//------------------------------------------------------------------------
-
-SampledFunction::SampledFunction(Object *funcObj, Dict *dict) {
- Stream *str;
- int sampleBits;
- double sampleMul;
- Object obj1, obj2;
- Guint buf, bitMask;
- int bits;
- Guint s;
- int i;
-
- samples = NULL;
- sBuf = NULL;
- ok = gFalse;
-
- //----- initialize the generic stuff
- if (!init(dict)) {
- goto err1;
- }
- if (!hasRange) {
- error(-1, "Type 0 function is missing range");
- goto err1;
- }
- if (m > sampledFuncMaxInputs) {
- error(-1, "Sampled functions with more than %d inputs are unsupported",
- sampledFuncMaxInputs);
- goto err1;
- }
-
- //----- buffer
- sBuf = (double *)gmallocn(1 << m, sizeof(double));
-
- //----- get the stream
- if (!funcObj->isStream()) {
- error(-1, "Type 0 function isn't a stream");
- goto err1;
- }
- str = funcObj->getStream();
-
- //----- Size
- if (!dict->lookup("Size", &obj1)->isArray() ||
- obj1.arrayGetLength() != m) {
- error(-1, "Function has missing or invalid size array");
- goto err2;
- }
- for (i = 0; i < m; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!obj2.isInt()) {
- error(-1, "Illegal value in function size array");
- goto err3;
- }
- sampleSize[i] = obj2.getInt();
- obj2.free();
- }
- obj1.free();
- idxMul[0] = n;
- for (i = 1; i < m; ++i) {
- idxMul[i] = idxMul[i-1] * sampleSize[i-1];
- }
-
- //----- BitsPerSample
- if (!dict->lookup("BitsPerSample", &obj1)->isInt()) {
- error(-1, "Function has missing or invalid BitsPerSample");
- goto err2;
- }
- sampleBits = obj1.getInt();
- sampleMul = 1.0 / (pow(2.0, (double)sampleBits) - 1);
- obj1.free();
-
- //----- Encode
- if (dict->lookup("Encode", &obj1)->isArray() &&
- obj1.arrayGetLength() == 2*m) {
- for (i = 0; i < m; ++i) {
- obj1.arrayGet(2*i, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function encode array");
- goto err3;
- }
- encode[i][0] = obj2.getNum();
- obj2.free();
- obj1.arrayGet(2*i+1, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function encode array");
- goto err3;
- }
- encode[i][1] = obj2.getNum();
- obj2.free();
- }
- } else {
- for (i = 0; i < m; ++i) {
- encode[i][0] = 0;
- encode[i][1] = sampleSize[i] - 1;
- }
- }
- obj1.free();
- for (i = 0; i < m; ++i) {
- inputMul[i] = (encode[i][1] - encode[i][0]) /
- (domain[i][1] - domain[i][0]);
- }
-
- //----- Decode
- if (dict->lookup("Decode", &obj1)->isArray() &&
- obj1.arrayGetLength() == 2*n) {
- for (i = 0; i < n; ++i) {
- obj1.arrayGet(2*i, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function decode array");
- goto err3;
- }
- decode[i][0] = obj2.getNum();
- obj2.free();
- obj1.arrayGet(2*i+1, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function decode array");
- goto err3;
- }
- decode[i][1] = obj2.getNum();
- obj2.free();
- }
- } else {
- for (i = 0; i < n; ++i) {
- decode[i][0] = range[i][0];
- decode[i][1] = range[i][1];
- }
- }
- obj1.free();
-
- //----- samples
- nSamples = n;
- for (i = 0; i < m; ++i)
- nSamples *= sampleSize[i];
- samples = (double *)gmallocn(nSamples, sizeof(double));
- buf = 0;
- bits = 0;
- bitMask = (1 << sampleBits) - 1;
- str->reset();
- for (i = 0; i < nSamples; ++i) {
- if (sampleBits == 8) {
- s = str->getChar();
- } else if (sampleBits == 16) {
- s = str->getChar();
- s = (s << 8) + str->getChar();
- } else if (sampleBits == 32) {
- s = str->getChar();
- s = (s << 8) + str->getChar();
- s = (s << 8) + str->getChar();
- s = (s << 8) + str->getChar();
- } else {
- while (bits < sampleBits) {
- buf = (buf << 8) | (str->getChar() & 0xff);
- bits += 8;
- }
- s = (buf >> (bits - sampleBits)) & bitMask;
- bits -= sampleBits;
- }
- samples[i] = (double)s * sampleMul;
- }
- str->close();
-
- ok = gTrue;
- return;
-
- err3:
- obj2.free();
- err2:
- obj1.free();
- err1:
- return;
-}
-
-SampledFunction::~SampledFunction() {
- if (samples) {
- gfree(samples);
- }
- if (sBuf) {
- gfree(sBuf);
- }
-}
-
-SampledFunction::SampledFunction(SampledFunction *func) {
- memcpy(this, func, sizeof(SampledFunction));
- samples = (double *)gmallocn(nSamples, sizeof(double));
- memcpy(samples, func->samples, nSamples * sizeof(double));
- sBuf = (double *)gmallocn(1 << m, sizeof(double));
-}
-
-void SampledFunction::transform(double *in, double *out) {
- double x;
- int e[funcMaxInputs][2];
- double efrac0[funcMaxInputs];
- double efrac1[funcMaxInputs];
- int i, j, k, idx, t;
-
- // map input values into sample array
- for (i = 0; i < m; ++i) {
- x = (in[i] - domain[i][0]) * inputMul[i] + encode[i][0];
- if (x < 0) {
- x = 0;
- } else if (x > sampleSize[i] - 1) {
- x = sampleSize[i] - 1;
- }
- e[i][0] = (int)x;
- if ((e[i][1] = e[i][0] + 1) >= sampleSize[i]) {
- // this happens if in[i] = domain[i][1]
- e[i][1] = e[i][0];
- }
- efrac1[i] = x - e[i][0];
- efrac0[i] = 1 - efrac1[i];
- }
-
- // for each output, do m-linear interpolation
- for (i = 0; i < n; ++i) {
-
- // pull 2^m values out of the sample array
- for (j = 0; j < (1<<m); ++j) {
- idx = i;
- for (k = 0, t = j; k < m; ++k, t >>= 1) {
- idx += idxMul[k] * (e[k][t & 1]);
- }
- sBuf[j] = samples[idx];
- }
-
- // do m sets of interpolations
- for (j = 0, t = (1<<m); j < m; ++j, t >>= 1) {
- for (k = 0; k < t; k += 2) {
- sBuf[k >> 1] = efrac0[j] * sBuf[k] + efrac1[j] * sBuf[k+1];
- }
- }
-
- // map output value to range
- out[i] = sBuf[0] * (decode[i][1] - decode[i][0]) + decode[i][0];
- if (out[i] < range[i][0]) {
- out[i] = range[i][0];
- } else if (out[i] > range[i][1]) {
- out[i] = range[i][1];
- }
- }
-}
-
-//------------------------------------------------------------------------
-// ExponentialFunction
-//------------------------------------------------------------------------
-
-ExponentialFunction::ExponentialFunction(Object *funcObj, Dict *dict) {
- Object obj1, obj2;
- int i;
-
- ok = gFalse;
-
- //----- initialize the generic stuff
- if (!init(dict)) {
- goto err1;
- }
- if (m != 1) {
- error(-1, "Exponential function with more than one input");
- goto err1;
- }
-
- //----- C0
- if (dict->lookup("C0", &obj1)->isArray()) {
- if (hasRange && obj1.arrayGetLength() != n) {
- error(-1, "Function's C0 array is wrong length");
- goto err2;
- }
- n = obj1.arrayGetLength();
- for (i = 0; i < n; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function C0 array");
- goto err3;
- }
- c0[i] = obj2.getNum();
- obj2.free();
- }
- } else {
- if (hasRange && n != 1) {
- error(-1, "Function's C0 array is wrong length");
- goto err2;
- }
- n = 1;
- c0[0] = 0;
- }
- obj1.free();
-
- //----- C1
- if (dict->lookup("C1", &obj1)->isArray()) {
- if (obj1.arrayGetLength() != n) {
- error(-1, "Function's C1 array is wrong length");
- goto err2;
- }
- for (i = 0; i < n; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!obj2.isNum()) {
- error(-1, "Illegal value in function C1 array");
- goto err3;
- }
- c1[i] = obj2.getNum();
- obj2.free();
- }
- } else {
- if (n != 1) {
- error(-1, "Function's C1 array is wrong length");
- goto err2;
- }
- c1[0] = 1;
- }
- obj1.free();
-
- //----- N (exponent)
- if (!dict->lookup("N", &obj1)->isNum()) {
- error(-1, "Function has missing or invalid N");
- goto err2;
- }
- e = obj1.getNum();
- obj1.free();
-
- ok = gTrue;
- return;
-
- err3:
- obj2.free();
- err2:
- obj1.free();
- err1:
- return;
-}
-
-ExponentialFunction::~ExponentialFunction() {
-}
-
-ExponentialFunction::ExponentialFunction(ExponentialFunction *func) {
- memcpy(this, func, sizeof(ExponentialFunction));
-}
-
-void ExponentialFunction::transform(double *in, double *out) {
- double x;
- int i;
-
- if (in[0] < domain[0][0]) {
- x = domain[0][0];
- } else if (in[0] > domain[0][1]) {
- x = domain[0][1];
- } else {
- x = in[0];
- }
- for (i = 0; i < n; ++i) {
- out[i] = c0[i] + pow(x, e) * (c1[i] - c0[i]);
- if (hasRange) {
- if (out[i] < range[i][0]) {
- out[i] = range[i][0];
- } else if (out[i] > range[i][1]) {
- out[i] = range[i][1];
- }
- }
- }
- return;
-}
-
-//------------------------------------------------------------------------
-// StitchingFunction
-//------------------------------------------------------------------------
-
-StitchingFunction::StitchingFunction(Object *funcObj, Dict *dict) {
- Object obj1, obj2;
- int i;
-
- ok = gFalse;
- funcs = NULL;
- bounds = NULL;
- encode = NULL;
- scale = NULL;
-
- //----- initialize the generic stuff
- if (!init(dict)) {
- goto err1;
- }
- if (m != 1) {
- error(-1, "Stitching function with more than one input");
- goto err1;
- }
-
- //----- Functions
- if (!dict->lookup("Functions", &obj1)->isArray()) {
- error(-1, "Missing 'Functions' entry in stitching function");
- goto err1;
- }
- k = obj1.arrayGetLength();
- funcs = (Function **)gmallocn(k, sizeof(Function *));
- bounds = (double *)gmallocn(k + 1, sizeof(double));
- encode = (double *)gmallocn(2 * k, sizeof(double));
- scale = (double *)gmallocn(k, sizeof(double));
- for (i = 0; i < k; ++i) {
- funcs[i] = NULL;
- }
- for (i = 0; i < k; ++i) {
- if (!(funcs[i] = Function::parse(obj1.arrayGet(i, &obj2)))) {
- goto err2;
- }
- if (i > 0 && (funcs[i]->getInputSize() != 1 ||
- funcs[i]->getOutputSize() != funcs[0]->getOutputSize())) {
- error(-1, "Incompatible subfunctions in stitching function");
- goto err2;
- }
- obj2.free();
- }
- obj1.free();
-
- //----- Bounds
- if (!dict->lookup("Bounds", &obj1)->isArray() ||
- obj1.arrayGetLength() != k - 1) {
- error(-1, "Missing or invalid 'Bounds' entry in stitching function");
- goto err1;
- }
- bounds[0] = domain[0][0];
- for (i = 1; i < k; ++i) {
- if (!obj1.arrayGet(i - 1, &obj2)->isNum()) {
- error(-1, "Invalid type in 'Bounds' array in stitching function");
- goto err2;
- }
- bounds[i] = obj2.getNum();
- obj2.free();
- }
- bounds[k] = domain[0][1];
- obj1.free();
-
- //----- Encode
- if (!dict->lookup("Encode", &obj1)->isArray() ||
- obj1.arrayGetLength() != 2 * k) {
- error(-1, "Missing or invalid 'Encode' entry in stitching function");
- goto err1;
- }
- for (i = 0; i < 2 * k; ++i) {
- if (!obj1.arrayGet(i, &obj2)->isNum()) {
- error(-1, "Invalid type in 'Encode' array in stitching function");
- goto err2;
- }
- encode[i] = obj2.getNum();
- obj2.free();
- }
- obj1.free();
-
- //----- pre-compute the scale factors
- for (i = 0; i < k; ++i) {
- if (bounds[i] == bounds[i+1]) {
- // avoid a divide-by-zero -- in this situation, function i will
- // never be used anyway
- scale[i] = 0;
- } else {
- scale[i] = (encode[2*i+1] - encode[2*i]) / (bounds[i+1] - bounds[i]);
- }
- }
-
- ok = gTrue;
- return;
-
- err2:
- obj2.free();
- err1:
- obj1.free();
-}
-
-StitchingFunction::StitchingFunction(StitchingFunction *func) {
- int i;
-
- k = func->k;
- funcs = (Function **)gmallocn(k, sizeof(Function *));
- for (i = 0; i < k; ++i) {
- funcs[i] = func->funcs[i]->copy();
- }
- bounds = (double *)gmallocn(k + 1, sizeof(double));
- memcpy(bounds, func->bounds, (k + 1) * sizeof(double));
- encode = (double *)gmallocn(2 * k, sizeof(double));
- memcpy(encode, func->encode, 2 * k * sizeof(double));
- scale = (double *)gmallocn(k, sizeof(double));
- memcpy(scale, func->scale, k * sizeof(double));
- ok = gTrue;
-}
-
-StitchingFunction::~StitchingFunction() {
- int i;
-
- if (funcs) {
- for (i = 0; i < k; ++i) {
- if (funcs[i]) {
- delete funcs[i];
- }
- }
- }
- gfree(funcs);
- gfree(bounds);
- gfree(encode);
- gfree(scale);
-}
-
-void StitchingFunction::transform(double *in, double *out) {
- double x;
- int i;
-
- if (in[0] < domain[0][0]) {
- x = domain[0][0];
- } else if (in[0] > domain[0][1]) {
- x = domain[0][1];
- } else {
- x = in[0];
- }
- for (i = 0; i < k - 1; ++i) {
- if (x < bounds[i+1]) {
- break;
- }
- }
- x = encode[2*i] + (x - bounds[i]) * scale[i];
- funcs[i]->transform(&x, out);
-}
-
-//------------------------------------------------------------------------
-// PostScriptFunction
-//------------------------------------------------------------------------
-
-enum PSOp {
- psOpAbs,
- psOpAdd,
- psOpAnd,
- psOpAtan,
- psOpBitshift,
- psOpCeiling,
- psOpCopy,
- psOpCos,
- psOpCvi,
- psOpCvr,
- psOpDiv,
- psOpDup,
- psOpEq,
- psOpExch,
- psOpExp,
- psOpFalse,
- psOpFloor,
- psOpGe,
- psOpGt,
- psOpIdiv,
- psOpIndex,
- psOpLe,
- psOpLn,
- psOpLog,
- psOpLt,
- psOpMod,
- psOpMul,
- psOpNe,
- psOpNeg,
- psOpNot,
- psOpOr,
- psOpPop,
- psOpRoll,
- psOpRound,
- psOpSin,
- psOpSqrt,
- psOpSub,
- psOpTrue,
- psOpTruncate,
- psOpXor,
- psOpIf,
- psOpIfelse,
- psOpReturn
-};
-
-// Note: 'if' and 'ifelse' are parsed separately.
-// The rest are listed here in alphabetical order.
-// The index in this table is equivalent to the entry in PSOp.
-char *psOpNames[] = {
- "abs",
- "add",
- "and",
- "atan",
- "bitshift",
- "ceiling",
- "copy",
- "cos",
- "cvi",
- "cvr",
- "div",
- "dup",
- "eq",
- "exch",
- "exp",
- "false",
- "floor",
- "ge",
- "gt",
- "idiv",
- "index",
- "le",
- "ln",
- "log",
- "lt",
- "mod",
- "mul",
- "ne",
- "neg",
- "not",
- "or",
- "pop",
- "roll",
- "round",
- "sin",
- "sqrt",
- "sub",
- "true",
- "truncate",
- "xor"
-};
-
-#define nPSOps (sizeof(psOpNames) / sizeof(char *))
-
-enum PSObjectType {
- psBool,
- psInt,
- psReal,
- psOperator,
- psBlock
-};
-
-// In the code array, 'if'/'ifelse' operators take up three slots
-// plus space for the code in the subclause(s).
-//
-// +---------------------------------+
-// | psOperator: psOpIf / psOpIfelse |
-// +---------------------------------+
-// | psBlock: ptr=<A> |
-// +---------------------------------+
-// | psBlock: ptr=<B> |
-// +---------------------------------+
-// | if clause |
-// | ... |
-// | psOperator: psOpReturn |
-// +---------------------------------+
-// <A> | else clause |
-// | ... |
-// | psOperator: psOpReturn |
-// +---------------------------------+
-// <B> | ... |
-//
-// For 'if', pointer <A> is present in the code stream but unused.
-
-struct PSObject {
- PSObjectType type;
- union {
- GBool booln; // boolean (stack only)
- int intg; // integer (stack and code)
- double real; // real (stack and code)
- PSOp op; // operator (code only)
- int blk; // if/ifelse block pointer (code only)
- };
-};
-
-#define psStackSize 100
-
-class PSStack {
-public:
-
- PSStack() { sp = psStackSize; }
- void pushBool(GBool booln);
- void pushInt(int intg);
- void pushReal(double real);
- GBool popBool();
- int popInt();
- double popNum();
- GBool empty() { return sp == psStackSize; }
- GBool topIsInt() { return sp < psStackSize && stack[sp].type == psInt; }
- GBool topTwoAreInts()
- { return sp < psStackSize - 1 &&
- stack[sp].type == psInt &&
- stack[sp+1].type == psInt; }
- GBool topIsReal() { return sp < psStackSize && stack[sp].type == psReal; }
- GBool topTwoAreNums()
- { return sp < psStackSize - 1 &&
- (stack[sp].type == psInt || stack[sp].type == psReal) &&
- (stack[sp+1].type == psInt || stack[sp+1].type == psReal); }
- void copy(int n);
- void roll(int n, int j);
- void index(int i);
- void pop();
-
-private:
-
- GBool checkOverflow(int n = 1);
- GBool checkUnderflow();
- GBool checkType(PSObjectType t1, PSObjectType t2);
-
- PSObject stack[psStackSize];
- int sp;
-};
-
-GBool PSStack::checkOverflow(int n) {
- if (sp - n < 0) {
- error(-1, "Stack overflow in PostScript function");
- return gFalse;
- }
- return gTrue;
-}
-
-GBool PSStack::checkUnderflow() {
- if (sp == psStackSize) {
- error(-1, "Stack underflow in PostScript function");
- return gFalse;
- }
- return gTrue;
-}
-
-GBool PSStack::checkType(PSObjectType t1, PSObjectType t2) {
- if (stack[sp].type != t1 && stack[sp].type != t2) {
- error(-1, "Type mismatch in PostScript function");
- return gFalse;
- }
- return gTrue;
-}
-
-void PSStack::pushBool(GBool booln) {
- if (checkOverflow()) {
- stack[--sp].type = psBool;
- stack[sp].booln = booln;
- }
-}
-
-void PSStack::pushInt(int intg) {
- if (checkOverflow()) {
- stack[--sp].type = psInt;
- stack[sp].intg = intg;
- }
-}
-
-void PSStack::pushReal(double real) {
- if (checkOverflow()) {
- stack[--sp].type = psReal;
- stack[sp].real = real;
- }
-}
-
-GBool PSStack::popBool() {
- if (checkUnderflow() && checkType(psBool, psBool)) {
- return stack[sp++].booln;
- }
- return gFalse;
-}
-
-int PSStack::popInt() {
- if (checkUnderflow() && checkType(psInt, psInt)) {
- return stack[sp++].intg;
- }
- return 0;
-}
-
-double PSStack::popNum() {
- double ret;
-
- if (checkUnderflow() && checkType(psInt, psReal)) {
- ret = (stack[sp].type == psInt) ? (double)stack[sp].intg : stack[sp].real;
- ++sp;
- return ret;
- }
- return 0;
-}
-
-void PSStack::copy(int n) {
- int i;
-
- if (sp + n > psStackSize) {
- error(-1, "Stack underflow in PostScript function");
- return;
- }
- if (!checkOverflow(n)) {
- return;
- }
- for (i = sp + n - 1; i >= sp; --i) {
- stack[i - n] = stack[i];
- }
- sp -= n;
-}
-
-void PSStack::roll(int n, int j) {
- PSObject obj;
- int i, k;
-
- if (j >= 0) {
- j %= n;
- } else {
- j = -j % n;
- if (j != 0) {
- j = n - j;
- }
- }
- if (n <= 0 || j == 0) {
- return;
- }
- for (i = 0; i < j; ++i) {
- obj = stack[sp];
- for (k = sp; k < sp + n - 1; ++k) {
- stack[k] = stack[k+1];
- }
- stack[sp + n - 1] = obj;
- }
-}
-
-void PSStack::index(int i) {
- if (!checkOverflow()) {
- return;
- }
- --sp;
- stack[sp] = stack[sp + 1 + i];
-}
-
-void PSStack::pop() {
- if (!checkUnderflow()) {
- return;
- }
- ++sp;
-}
-
-PostScriptFunction::PostScriptFunction(Object *funcObj, Dict *dict) {
- Stream *str;
- int codePtr;
- GString *tok;
-
- code = NULL;
- codeSize = 0;
- ok = gFalse;
-
- //----- initialize the generic stuff
- if (!init(dict)) {
- goto err1;
- }
- if (!hasRange) {
- error(-1, "Type 4 function is missing range");
- goto err1;
- }
-
- //----- get the stream
- if (!funcObj->isStream()) {
- error(-1, "Type 4 function isn't a stream");
- goto err1;
- }
- str = funcObj->getStream();
-
- //----- parse the function
- codeString = new GString();
- str->reset();
- if (!(tok = getToken(str)) || tok->cmp("{")) {
- error(-1, "Expected '{' at start of PostScript function");
- if (tok) {
- delete tok;
- }
- goto err1;
- }
- delete tok;
- codePtr = 0;
- if (!parseCode(str, &codePtr)) {
- goto err2;
- }
- str->close();
-
- ok = gTrue;
-
- err2:
- str->close();
- err1:
- return;
-}
-
-PostScriptFunction::PostScriptFunction(PostScriptFunction *func) {
- memcpy(this, func, sizeof(PostScriptFunction));
- code = (PSObject *)gmallocn(codeSize, sizeof(PSObject));
- memcpy(code, func->code, codeSize * sizeof(PSObject));
- codeString = func->codeString->copy();
-}
-
-PostScriptFunction::~PostScriptFunction() {
- gfree(code);
- delete codeString;
-}
-
-void PostScriptFunction::transform(double *in, double *out) {
- PSStack *stack;
- int i;
-
- stack = new PSStack();
- for (i = 0; i < m; ++i) {
- //~ may need to check for integers here
- stack->pushReal(in[i]);
- }
- exec(stack, 0);
- for (i = n - 1; i >= 0; --i) {
- out[i] = stack->popNum();
- if (out[i] < range[i][0]) {
- out[i] = range[i][0];
- } else if (out[i] > range[i][1]) {
- out[i] = range[i][1];
- }
- }
- // if (!stack->empty()) {
- // error(-1, "Extra values on stack at end of PostScript function");
- // }
- delete stack;
-}
-
-GBool PostScriptFunction::parseCode(Stream *str, int *codePtr) {
- GString *tok;
- char *p;
- GBool isReal;
- int opPtr, elsePtr;
- int a, b, mid, cmp;
-
- while (1) {
- if (!(tok = getToken(str))) {
- error(-1, "Unexpected end of PostScript function stream");
- return gFalse;
- }
- p = tok->getCString();
- if (isdigit(*p) || *p == '.' || *p == '-') {
- isReal = gFalse;
- for (++p; *p; ++p) {
- if (*p == '.') {
- isReal = gTrue;
- break;
- }
- }
- resizeCode(*codePtr);
- if (isReal) {
- code[*codePtr].type = psReal;
- code[*codePtr].real = atof(tok->getCString());
- } else {
- code[*codePtr].type = psInt;
- code[*codePtr].intg = atoi(tok->getCString());
- }
- ++*codePtr;
- delete tok;
- } else if (!tok->cmp("{")) {
- delete tok;
- opPtr = *codePtr;
- *codePtr += 3;
- resizeCode(opPtr + 2);
- if (!parseCode(str, codePtr)) {
- return gFalse;
- }
- if (!(tok = getToken(str))) {
- error(-1, "Unexpected end of PostScript function stream");
- return gFalse;
- }
- if (!tok->cmp("{")) {
- elsePtr = *codePtr;
- if (!parseCode(str, codePtr)) {
- return gFalse;
- }
- delete tok;
- if (!(tok = getToken(str))) {
- error(-1, "Unexpected end of PostScript function stream");
- return gFalse;
- }
- } else {
- elsePtr = -1;
- }
- if (!tok->cmp("if")) {
- if (elsePtr >= 0) {
- error(-1, "Got 'if' operator with two blocks in PostScript function");
- return gFalse;
- }
- code[opPtr].type = psOperator;
- code[opPtr].op = psOpIf;
- code[opPtr+2].type = psBlock;
- code[opPtr+2].blk = *codePtr;
- } else if (!tok->cmp("ifelse")) {
- if (elsePtr < 0) {
- error(-1, "Got 'ifelse' operator with one blocks in PostScript function");
- return gFalse;
- }
- code[opPtr].type = psOperator;
- code[opPtr].op = psOpIfelse;
- code[opPtr+1].type = psBlock;
- code[opPtr+1].blk = elsePtr;
- code[opPtr+2].type = psBlock;
- code[opPtr+2].blk = *codePtr;
- } else {
- error(-1, "Expected if/ifelse operator in PostScript function");
- delete tok;
- return gFalse;
- }
- delete tok;
- } else if (!tok->cmp("}")) {
- delete tok;
- resizeCode(*codePtr);
- code[*codePtr].type = psOperator;
- code[*codePtr].op = psOpReturn;
- ++*codePtr;
- break;
- } else {
- a = -1;
- b = nPSOps;
- // invariant: psOpNames[a] < tok < psOpNames[b]
- while (b - a > 1) {
- mid = (a + b) / 2;
- cmp = tok->cmp(psOpNames[mid]);
- if (cmp > 0) {
- a = mid;
- } else if (cmp < 0) {
- b = mid;
- } else {
- a = b = mid;
- }
- }
- if (cmp != 0) {
- error(-1, "Unknown operator '%s' in PostScript function",
- tok->getCString());
- delete tok;
- return gFalse;
- }
- delete tok;
- resizeCode(*codePtr);
- code[*codePtr].type = psOperator;
- code[*codePtr].op = (PSOp)a;
- ++*codePtr;
- }
- }
- return gTrue;
-}
-
-GString *PostScriptFunction::getToken(Stream *str) {
- GString *s;
- int c;
- GBool comment;
-
- s = new GString();
- comment = gFalse;
- while (1) {
- if ((c = str->getChar()) == EOF) {
- break;
- }
- codeString->append(c);
- if (comment) {
- if (c == '\x0a' || c == '\x0d') {
- comment = gFalse;
- }
- } else if (c == '%') {
- comment = gTrue;
- } else if (!isspace(c)) {
- break;
- }
- }
- if (c == '{' || c == '}') {
- s->append((char)c);
- } else if (isdigit(c) || c == '.' || c == '-') {
- while (1) {
- s->append((char)c);
- c = str->lookChar();
- if (c == EOF || !(isdigit(c) || c == '.' || c == '-')) {
- break;
- }
- str->getChar();
- codeString->append(c);
- }
- } else {
- while (1) {
- s->append((char)c);
- c = str->lookChar();
- if (c == EOF || !isalnum(c)) {
- break;
- }
- str->getChar();
- codeString->append(c);
- }
- }
- return s;
-}
-
-void PostScriptFunction::resizeCode(int newSize) {
- if (newSize >= codeSize) {
- codeSize += 64;
- code = (PSObject *)greallocn(code, codeSize, sizeof(PSObject));
- }
-}
-
-void PostScriptFunction::exec(PSStack *stack, int codePtr) {
- int i1, i2;
- double r1, r2;
- GBool b1, b2;
-
- while (1) {
- switch (code[codePtr].type) {
- case psInt:
- stack->pushInt(code[codePtr++].intg);
- break;
- case psReal:
- stack->pushReal(code[codePtr++].real);
- break;
- case psOperator:
- switch (code[codePtr++].op) {
- case psOpAbs:
- if (stack->topIsInt()) {
- stack->pushInt(abs(stack->popInt()));
- } else {
- stack->pushReal(fabs(stack->popNum()));
- }
- break;
- case psOpAdd:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushInt(i1 + i2);
- } else {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushReal(r1 + r2);
- }
- break;
- case psOpAnd:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushInt(i1 & i2);
- } else {
- b2 = stack->popBool();
- b1 = stack->popBool();
- stack->pushBool(b1 && b2);
- }
- break;
- case psOpAtan:
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushReal(atan2(r1, r2));
- break;
- case psOpBitshift:
- i2 = stack->popInt();
- i1 = stack->popInt();
- if (i2 > 0) {
- stack->pushInt(i1 << i2);
- } else if (i2 < 0) {
- stack->pushInt((int)((Guint)i1 >> i2));
- } else {
- stack->pushInt(i1);
- }
- break;
- case psOpCeiling:
- if (!stack->topIsInt()) {
- stack->pushReal(ceil(stack->popNum()));
- }
- break;
- case psOpCopy:
- stack->copy(stack->popInt());
- break;
- case psOpCos:
- stack->pushReal(cos(stack->popNum()));
- break;
- case psOpCvi:
- if (!stack->topIsInt()) {
- stack->pushInt((int)stack->popNum());
- }
- break;
- case psOpCvr:
- if (!stack->topIsReal()) {
- stack->pushReal(stack->popNum());
- }
- break;
- case psOpDiv:
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushReal(r1 / r2);
- break;
- case psOpDup:
- stack->copy(1);
- break;
- case psOpEq:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushBool(i1 == i2);
- } else if (stack->topTwoAreNums()) {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushBool(r1 == r2);
- } else {
- b2 = stack->popBool();
- b1 = stack->popBool();
- stack->pushBool(b1 == b2);
- }
- break;
- case psOpExch:
- stack->roll(2, 1);
- break;
- case psOpExp:
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushReal(pow(r1, r2));
- break;
- case psOpFalse:
- stack->pushBool(gFalse);
- break;
- case psOpFloor:
- if (!stack->topIsInt()) {
- stack->pushReal(floor(stack->popNum()));
- }
- break;
- case psOpGe:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushBool(i1 >= i2);
- } else {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushBool(r1 >= r2);
- }
- break;
- case psOpGt:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushBool(i1 > i2);
- } else {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushBool(r1 > r2);
- }
- break;
- case psOpIdiv:
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushInt(i1 / i2);
- break;
- case psOpIndex:
- stack->index(stack->popInt());
- break;
- case psOpLe:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushBool(i1 <= i2);
- } else {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushBool(r1 <= r2);
- }
- break;
- case psOpLn:
- stack->pushReal(log(stack->popNum()));
- break;
- case psOpLog:
- stack->pushReal(log10(stack->popNum()));
- break;
- case psOpLt:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushBool(i1 < i2);
- } else {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushBool(r1 < r2);
- }
- break;
- case psOpMod:
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushInt(i1 % i2);
- break;
- case psOpMul:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- //~ should check for out-of-range, and push a real instead
- stack->pushInt(i1 * i2);
- } else {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushReal(r1 * r2);
- }
- break;
- case psOpNe:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushBool(i1 != i2);
- } else if (stack->topTwoAreNums()) {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushBool(r1 != r2);
- } else {
- b2 = stack->popBool();
- b1 = stack->popBool();
- stack->pushBool(b1 != b2);
- }
- break;
- case psOpNeg:
- if (stack->topIsInt()) {
- stack->pushInt(-stack->popInt());
- } else {
- stack->pushReal(-stack->popNum());
- }
- break;
- case psOpNot:
- if (stack->topIsInt()) {
- stack->pushInt(~stack->popInt());
- } else {
- stack->pushBool(!stack->popBool());
- }
- break;
- case psOpOr:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushInt(i1 | i2);
- } else {
- b2 = stack->popBool();
- b1 = stack->popBool();
- stack->pushBool(b1 || b2);
- }
- break;
- case psOpPop:
- stack->pop();
- break;
- case psOpRoll:
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->roll(i1, i2);
- break;
- case psOpRound:
- if (!stack->topIsInt()) {
- r1 = stack->popNum();
- stack->pushReal((r1 >= 0) ? floor(r1 + 0.5) : ceil(r1 - 0.5));
- }
- break;
- case psOpSin:
- stack->pushReal(sin(stack->popNum()));
- break;
- case psOpSqrt:
- stack->pushReal(sqrt(stack->popNum()));
- break;
- case psOpSub:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushInt(i1 - i2);
- } else {
- r2 = stack->popNum();
- r1 = stack->popNum();
- stack->pushReal(r1 - r2);
- }
- break;
- case psOpTrue:
- stack->pushBool(gTrue);
- break;
- case psOpTruncate:
- if (!stack->topIsInt()) {
- r1 = stack->popNum();
- stack->pushReal((r1 >= 0) ? floor(r1) : ceil(r1));
- }
- break;
- case psOpXor:
- if (stack->topTwoAreInts()) {
- i2 = stack->popInt();
- i1 = stack->popInt();
- stack->pushInt(i1 ^ i2);
- } else {
- b2 = stack->popBool();
- b1 = stack->popBool();
- stack->pushBool(b1 ^ b2);
- }
- break;
- case psOpIf:
- b1 = stack->popBool();
- if (b1) {
- exec(stack, codePtr + 2);
- }
- codePtr = code[codePtr + 1].blk;
- break;
- case psOpIfelse:
- b1 = stack->popBool();
- if (b1) {
- exec(stack, codePtr + 2);
- } else {
- exec(stack, code[codePtr].blk);
- }
- codePtr = code[codePtr + 1].blk;
- break;
- case psOpReturn:
- return;
- }
- break;
- default:
- error(-1, "Internal: bad object in PostScript function code");
- break;
- }
- }
-}
diff --git a/Build/source/libs/xpdf/xpdf/Function.h b/Build/source/libs/xpdf/xpdf/Function.h
deleted file mode 100644
index 334a4390fa1..00000000000
--- a/Build/source/libs/xpdf/xpdf/Function.h
+++ /dev/null
@@ -1,229 +0,0 @@
-//========================================================================
-//
-// Function.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef FUNCTION_H
-#define FUNCTION_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "Object.h"
-
-class Dict;
-class Stream;
-struct PSObject;
-class PSStack;
-
-//------------------------------------------------------------------------
-// Function
-//------------------------------------------------------------------------
-
-#define funcMaxInputs 32
-#define funcMaxOutputs 32
-#define sampledFuncMaxInputs 16
-
-class Function {
-public:
-
- Function();
-
- virtual ~Function();
-
- // Construct a function. Returns NULL if unsuccessful.
- static Function *parse(Object *funcObj);
-
- // Initialize the entries common to all function types.
- GBool init(Dict *dict);
-
- virtual Function *copy() = 0;
-
- // Return the function type:
- // -1 : identity
- // 0 : sampled
- // 2 : exponential
- // 3 : stitching
- // 4 : PostScript
- virtual int getType() = 0;
-
- // Return size of input and output tuples.
- int getInputSize() { return m; }
- int getOutputSize() { return n; }
-
- double getDomainMin(int i) { return domain[i][0]; }
- double getDomainMax(int i) { return domain[i][1]; }
- double getRangeMin(int i) { return range[i][0]; }
- double getRangeMax(int i) { return range[i][1]; }
- GBool getHasRange() { return hasRange; }
-
- // Transform an input tuple into an output tuple.
- virtual void transform(double *in, double *out) = 0;
-
- virtual GBool isOk() = 0;
-
-protected:
-
- int m, n; // size of input and output tuples
- double // min and max values for function domain
- domain[funcMaxInputs][2];
- double // min and max values for function range
- range[funcMaxOutputs][2];
- GBool hasRange; // set if range is defined
-};
-
-//------------------------------------------------------------------------
-// IdentityFunction
-//------------------------------------------------------------------------
-
-class IdentityFunction: public Function {
-public:
-
- IdentityFunction();
- virtual ~IdentityFunction();
- virtual Function *copy() { return new IdentityFunction(); }
- virtual int getType() { return -1; }
- virtual void transform(double *in, double *out);
- virtual GBool isOk() { return gTrue; }
-
-private:
-};
-
-//------------------------------------------------------------------------
-// SampledFunction
-//------------------------------------------------------------------------
-
-class SampledFunction: public Function {
-public:
-
- SampledFunction(Object *funcObj, Dict *dict);
- virtual ~SampledFunction();
- virtual Function *copy() { return new SampledFunction(this); }
- virtual int getType() { return 0; }
- virtual void transform(double *in, double *out);
- virtual GBool isOk() { return ok; }
-
- int getSampleSize(int i) { return sampleSize[i]; }
- double getEncodeMin(int i) { return encode[i][0]; }
- double getEncodeMax(int i) { return encode[i][1]; }
- double getDecodeMin(int i) { return decode[i][0]; }
- double getDecodeMax(int i) { return decode[i][1]; }
- double *getSamples() { return samples; }
-
-private:
-
- SampledFunction(SampledFunction *func);
-
- int // number of samples for each domain element
- sampleSize[funcMaxInputs];
- double // min and max values for domain encoder
- encode[funcMaxInputs][2];
- double // min and max values for range decoder
- decode[funcMaxOutputs][2];
- double // input multipliers
- inputMul[funcMaxInputs];
- int idxMul[funcMaxInputs]; // sample array index multipliers
- double *samples; // the samples
- int nSamples; // size of the samples array
- double *sBuf; // buffer for the transform function
- GBool ok;
-};
-
-//------------------------------------------------------------------------
-// ExponentialFunction
-//------------------------------------------------------------------------
-
-class ExponentialFunction: public Function {
-public:
-
- ExponentialFunction(Object *funcObj, Dict *dict);
- virtual ~ExponentialFunction();
- virtual Function *copy() { return new ExponentialFunction(this); }
- virtual int getType() { return 2; }
- virtual void transform(double *in, double *out);
- virtual GBool isOk() { return ok; }
-
- double *getC0() { return c0; }
- double *getC1() { return c1; }
- double getE() { return e; }
-
-private:
-
- ExponentialFunction(ExponentialFunction *func);
-
- double c0[funcMaxOutputs];
- double c1[funcMaxOutputs];
- double e;
- GBool ok;
-};
-
-//------------------------------------------------------------------------
-// StitchingFunction
-//------------------------------------------------------------------------
-
-class StitchingFunction: public Function {
-public:
-
- StitchingFunction(Object *funcObj, Dict *dict);
- virtual ~StitchingFunction();
- virtual Function *copy() { return new StitchingFunction(this); }
- virtual int getType() { return 3; }
- virtual void transform(double *in, double *out);
- virtual GBool isOk() { return ok; }
-
- int getNumFuncs() { return k; }
- Function *getFunc(int i) { return funcs[i]; }
- double *getBounds() { return bounds; }
- double *getEncode() { return encode; }
- double *getScale() { return scale; }
-
-private:
-
- StitchingFunction(StitchingFunction *func);
-
- int k;
- Function **funcs;
- double *bounds;
- double *encode;
- double *scale;
- GBool ok;
-};
-
-//------------------------------------------------------------------------
-// PostScriptFunction
-//------------------------------------------------------------------------
-
-class PostScriptFunction: public Function {
-public:
-
- PostScriptFunction(Object *funcObj, Dict *dict);
- virtual ~PostScriptFunction();
- virtual Function *copy() { return new PostScriptFunction(this); }
- virtual int getType() { return 4; }
- virtual void transform(double *in, double *out);
- virtual GBool isOk() { return ok; }
-
- GString *getCodeString() { return codeString; }
-
-private:
-
- PostScriptFunction(PostScriptFunction *func);
- GBool parseCode(Stream *str, int *codePtr);
- GString *getToken(Stream *str);
- void resizeCode(int newSize);
- void exec(PSStack *stack, int codePtr);
-
- GString *codeString;
- PSObject *code;
- int codeSize;
- GBool ok;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/GfxFont.cc b/Build/source/libs/xpdf/xpdf/GfxFont.cc
deleted file mode 100644
index 9af7efcf8c6..00000000000
--- a/Build/source/libs/xpdf/xpdf/GfxFont.cc
+++ /dev/null
@@ -1,1568 +0,0 @@
-//========================================================================
-//
-// GfxFont.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "gmem.h"
-#include "Error.h"
-#include "Object.h"
-#include "Dict.h"
-#include "GlobalParams.h"
-#include "CMap.h"
-#include "CharCodeToUnicode.h"
-#include "FontEncodingTables.h"
-#include "BuiltinFontTables.h"
-#include "FoFiType1.h"
-#include "FoFiType1C.h"
-#include "FoFiTrueType.h"
-#include "GfxFont.h"
-
-//------------------------------------------------------------------------
-
-struct StdFontMapEntry {
- char *altName;
- char *properName;
-};
-
-// Acrobat 4.0 and earlier substituted Base14-compatible fonts without
-// providing Widths and a FontDescriptor, so we munge the names into
-// the proper Base14 names. This table is from implementation note 44
-// in the PDF 1.4 spec, with some additions based on empirical
-// evidence.
-static StdFontMapEntry stdFontMap[] = {
- { "Arial", "Helvetica" },
- { "Arial,Bold", "Helvetica-Bold" },
- { "Arial,BoldItalic", "Helvetica-BoldOblique" },
- { "Arial,Italic", "Helvetica-Oblique" },
- { "Arial-Bold", "Helvetica-Bold" },
- { "Arial-BoldItalic", "Helvetica-BoldOblique" },
- { "Arial-BoldItalicMT", "Helvetica-BoldOblique" },
- { "Arial-BoldMT", "Helvetica-Bold" },
- { "Arial-Italic", "Helvetica-Oblique" },
- { "Arial-ItalicMT", "Helvetica-Oblique" },
- { "ArialMT", "Helvetica" },
- { "Courier,Bold", "Courier-Bold" },
- { "Courier,BoldItalic", "Courier-BoldOblique" },
- { "Courier,Italic", "Courier-Oblique" },
- { "CourierNew", "Courier" },
- { "CourierNew,Bold", "Courier-Bold" },
- { "CourierNew,BoldItalic", "Courier-BoldOblique" },
- { "CourierNew,Italic", "Courier-Oblique" },
- { "CourierNew-Bold", "Courier-Bold" },
- { "CourierNew-BoldItalic", "Courier-BoldOblique" },
- { "CourierNew-Italic", "Courier-Oblique" },
- { "CourierNewPS-BoldItalicMT", "Courier-BoldOblique" },
- { "CourierNewPS-BoldMT", "Courier-Bold" },
- { "CourierNewPS-ItalicMT", "Courier-Oblique" },
- { "CourierNewPSMT", "Courier" },
- { "Helvetica,Bold", "Helvetica-Bold" },
- { "Helvetica,BoldItalic", "Helvetica-BoldOblique" },
- { "Helvetica,Italic", "Helvetica-Oblique" },
- { "Helvetica-BoldItalic", "Helvetica-BoldOblique" },
- { "Helvetica-Italic", "Helvetica-Oblique" },
- { "Symbol,Bold", "Symbol" },
- { "Symbol,BoldItalic", "Symbol" },
- { "Symbol,Italic", "Symbol" },
- { "TimesNewRoman", "Times-Roman" },
- { "TimesNewRoman,Bold", "Times-Bold" },
- { "TimesNewRoman,BoldItalic", "Times-BoldItalic" },
- { "TimesNewRoman,Italic", "Times-Italic" },
- { "TimesNewRoman-Bold", "Times-Bold" },
- { "TimesNewRoman-BoldItalic", "Times-BoldItalic" },
- { "TimesNewRoman-Italic", "Times-Italic" },
- { "TimesNewRomanPS", "Times-Roman" },
- { "TimesNewRomanPS-Bold", "Times-Bold" },
- { "TimesNewRomanPS-BoldItalic", "Times-BoldItalic" },
- { "TimesNewRomanPS-BoldItalicMT", "Times-BoldItalic" },
- { "TimesNewRomanPS-BoldMT", "Times-Bold" },
- { "TimesNewRomanPS-Italic", "Times-Italic" },
- { "TimesNewRomanPS-ItalicMT", "Times-Italic" },
- { "TimesNewRomanPSMT", "Times-Roman" },
- { "TimesNewRomanPSMT,Bold", "Times-Bold" },
- { "TimesNewRomanPSMT,BoldItalic", "Times-BoldItalic" },
- { "TimesNewRomanPSMT,Italic", "Times-Italic" }
-};
-
-//------------------------------------------------------------------------
-// GfxFont
-//------------------------------------------------------------------------
-
-GfxFont *GfxFont::makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict) {
- GString *nameA;
- GfxFont *font;
- Object obj1;
-
- // get base font name
- nameA = NULL;
- fontDict->lookup("BaseFont", &obj1);
- if (obj1.isName()) {
- nameA = new GString(obj1.getName());
- }
- obj1.free();
-
- // get font type
- font = NULL;
- fontDict->lookup("Subtype", &obj1);
- if (obj1.isName("Type1") || obj1.isName("MMType1")) {
- font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType1, fontDict);
- } else if (obj1.isName("Type1C")) {
- font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType1C, fontDict);
- } else if (obj1.isName("Type3")) {
- font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType3, fontDict);
- } else if (obj1.isName("TrueType")) {
- font = new Gfx8BitFont(xref, tagA, idA, nameA, fontTrueType, fontDict);
- } else if (obj1.isName("Type0")) {
- font = new GfxCIDFont(xref, tagA, idA, nameA, fontDict);
- } else {
- error(-1, "Unknown font type: '%s'",
- obj1.isName() ? obj1.getName() : "???");
- font = new Gfx8BitFont(xref, tagA, idA, nameA, fontUnknownType, fontDict);
- }
- obj1.free();
-
- return font;
-}
-
-GfxFont::GfxFont(char *tagA, Ref idA, GString *nameA) {
- ok = gFalse;
- tag = new GString(tagA);
- id = idA;
- name = nameA;
- origName = nameA;
- embFontName = NULL;
- extFontFile = NULL;
-}
-
-GfxFont::~GfxFont() {
- delete tag;
- if (origName && origName != name) {
- delete origName;
- }
- if (name) {
- delete name;
- }
- if (embFontName) {
- delete embFontName;
- }
- if (extFontFile) {
- delete extFontFile;
- }
-}
-
-void GfxFont::readFontDescriptor(XRef *xref, Dict *fontDict) {
- Object obj1, obj2, obj3, obj4;
- double t;
- int i;
-
- // assume Times-Roman by default (for substitution purposes)
- flags = fontSerif;
-
- embFontID.num = -1;
- embFontID.gen = -1;
- missingWidth = 0;
-
- if (fontDict->lookup("FontDescriptor", &obj1)->isDict()) {
-
- // get flags
- if (obj1.dictLookup("Flags", &obj2)->isInt()) {
- flags = obj2.getInt();
- }
- obj2.free();
-
- // get name
- obj1.dictLookup("FontName", &obj2);
- if (obj2.isName()) {
- embFontName = new GString(obj2.getName());
- }
- obj2.free();
-
- // look for embedded font file
- if (obj1.dictLookupNF("FontFile", &obj2)->isRef()) {
- embFontID = obj2.getRef();
- if (type != fontType1) {
- error(-1, "Mismatch between font type and embedded font file");
- type = fontType1;
- }
- }
- obj2.free();
- if (embFontID.num == -1 &&
- obj1.dictLookupNF("FontFile2", &obj2)->isRef()) {
- embFontID = obj2.getRef();
- if (type != fontTrueType && type != fontCIDType2) {
- error(-1, "Mismatch between font type and embedded font file");
- type = type == fontCIDType0 ? fontCIDType2 : fontTrueType;
- }
- }
- obj2.free();
- if (embFontID.num == -1 &&
- obj1.dictLookupNF("FontFile3", &obj2)->isRef()) {
- if (obj2.fetch(xref, &obj3)->isStream()) {
- obj3.streamGetDict()->lookup("Subtype", &obj4);
- if (obj4.isName("Type1")) {
- embFontID = obj2.getRef();
- if (type != fontType1) {
- error(-1, "Mismatch between font type and embedded font file");
- type = fontType1;
- }
- } else if (obj4.isName("Type1C")) {
- embFontID = obj2.getRef();
- if (type != fontType1 && type != fontType1C) {
- error(-1, "Mismatch between font type and embedded font file");
- }
- type = fontType1C;
- } else if (obj4.isName("TrueType")) {
- embFontID = obj2.getRef();
- if (type != fontTrueType) {
- error(-1, "Mismatch between font type and embedded font file");
- type = fontTrueType;
- }
- } else if (obj4.isName("CIDFontType0C")) {
- embFontID = obj2.getRef();
- if (type != fontCIDType0) {
- error(-1, "Mismatch between font type and embedded font file");
- }
- type = fontCIDType0C;
- } else if (obj4.isName("OpenType")) {
- embFontID = obj2.getRef();
- if (type == fontTrueType) {
- type = fontTrueTypeOT;
- } else if (type == fontType1) {
- type = fontType1COT;
- } else if (type == fontCIDType0) {
- type = fontCIDType0COT;
- } else if (type == fontCIDType2) {
- type = fontCIDType2OT;
- } else {
- error(-1, "Mismatch between font type and embedded font file");
- }
- } else {
- error(-1, "Unknown embedded font type '%s'",
- obj4.isName() ? obj4.getName() : "???");
- }
- obj4.free();
- }
- obj3.free();
- }
- obj2.free();
-
- // look for MissingWidth
- obj1.dictLookup("MissingWidth", &obj2);
- if (obj2.isNum()) {
- missingWidth = obj2.getNum();
- }
- obj2.free();
-
- // get Ascent and Descent
- obj1.dictLookup("Ascent", &obj2);
- if (obj2.isNum()) {
- t = 0.001 * obj2.getNum();
- // some broken font descriptors set ascent and descent to 0
- if (t != 0) {
- ascent = t;
- }
- }
- obj2.free();
- obj1.dictLookup("Descent", &obj2);
- if (obj2.isNum()) {
- t = 0.001 * obj2.getNum();
- // some broken font descriptors set ascent and descent to 0
- if (t != 0) {
- descent = t;
- }
- // some broken font descriptors specify a positive descent
- if (descent > 0) {
- descent = -descent;
- }
- }
- obj2.free();
-
- // font FontBBox
- if (obj1.dictLookup("FontBBox", &obj2)->isArray()) {
- for (i = 0; i < 4 && i < obj2.arrayGetLength(); ++i) {
- if (obj2.arrayGet(i, &obj3)->isNum()) {
- fontBBox[i] = 0.001 * obj3.getNum();
- }
- obj3.free();
- }
- }
- obj2.free();
-
- }
- obj1.free();
-}
-
-CharCodeToUnicode *GfxFont::readToUnicodeCMap(Dict *fontDict, int nBits,
- CharCodeToUnicode *ctu) {
- GString *buf;
- Object obj1;
- int c;
-
- if (!fontDict->lookup("ToUnicode", &obj1)->isStream()) {
- obj1.free();
- return NULL;
- }
- buf = new GString();
- obj1.streamReset();
- while ((c = obj1.streamGetChar()) != EOF) {
- buf->append(c);
- }
- obj1.streamClose();
- obj1.free();
- if (ctu) {
- ctu->mergeCMap(buf, nBits);
- } else {
- ctu = CharCodeToUnicode::parseCMap(buf, nBits);
- }
- delete buf;
- return ctu;
-}
-
-void GfxFont::findExtFontFile() {
- static char *type1Exts[] = { ".pfa", ".pfb", ".ps", "", NULL };
- static char *ttExts[] = { ".ttf", NULL };
-
- if (name) {
- if (type == fontType1) {
- extFontFile = globalParams->findFontFile(name, type1Exts);
- } else if (type == fontTrueType) {
- extFontFile = globalParams->findFontFile(name, ttExts);
- }
- }
-}
-
-char *GfxFont::readExtFontFile(int *len) {
- FILE *f;
- char *buf;
-
- if (!(f = fopen(extFontFile->getCString(), "rb"))) {
- error(-1, "External font file '%s' vanished", extFontFile->getCString());
- return NULL;
- }
- fseek(f, 0, SEEK_END);
- *len = (int)ftell(f);
- fseek(f, 0, SEEK_SET);
- buf = (char *)gmalloc(*len);
- if ((int)fread(buf, 1, *len, f) != *len) {
- error(-1, "Error reading external font file '%s'",
- extFontFile->getCString());
- }
- fclose(f);
- return buf;
-}
-
-char *GfxFont::readEmbFontFile(XRef *xref, int *len) {
- char *buf;
- Object obj1, obj2;
- Stream *str;
- int c;
- int size, i;
-
- obj1.initRef(embFontID.num, embFontID.gen);
- obj1.fetch(xref, &obj2);
- if (!obj2.isStream()) {
- error(-1, "Embedded font file is not a stream");
- obj2.free();
- obj1.free();
- embFontID.num = -1;
- return NULL;
- }
- str = obj2.getStream();
-
- buf = NULL;
- i = size = 0;
- str->reset();
- while ((c = str->getChar()) != EOF) {
- if (i == size) {
- size += 4096;
- buf = (char *)grealloc(buf, size);
- }
- buf[i++] = c;
- }
- *len = i;
- str->close();
-
- obj2.free();
- obj1.free();
-
- return buf;
-}
-
-//------------------------------------------------------------------------
-// Gfx8BitFont
-//------------------------------------------------------------------------
-
-Gfx8BitFont::Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GString *nameA,
- GfxFontType typeA, Dict *fontDict):
- GfxFont(tagA, idA, nameA)
-{
- GString *name2;
- BuiltinFont *builtinFont;
- char **baseEnc;
- GBool baseEncFromFontFile;
- char *buf;
- int len;
- FoFiType1 *ffT1;
- FoFiType1C *ffT1C;
- int code, code2;
- char *charName;
- GBool missing, hex;
- Unicode toUnicode[256];
- CharCodeToUnicode *utu, *ctu2;
- Unicode uBuf[8];
- double mul;
- int firstChar, lastChar;
- Gushort w;
- Object obj1, obj2, obj3;
- int n, i, a, b, m;
-
- type = typeA;
- ctu = NULL;
-
- // do font name substitution for various aliases of the Base 14 font
- // names
- if (name) {
- name2 = name->copy();
- i = 0;
- while (i < name2->getLength()) {
- if (name2->getChar(i) == ' ') {
- name2->del(i);
- } else {
- ++i;
- }
- }
- a = 0;
- b = sizeof(stdFontMap) / sizeof(StdFontMapEntry);
- // invariant: stdFontMap[a].altName <= name2 < stdFontMap[b].altName
- while (b - a > 1) {
- m = (a + b) / 2;
- if (name2->cmp(stdFontMap[m].altName) >= 0) {
- a = m;
- } else {
- b = m;
- }
- }
- if (!name2->cmp(stdFontMap[a].altName)) {
- name = new GString(stdFontMap[a].properName);
- }
- delete name2;
- }
-
- // is it a built-in font?
- builtinFont = NULL;
- if (name) {
- for (i = 0; i < nBuiltinFonts; ++i) {
- if (!name->cmp(builtinFonts[i].name)) {
- builtinFont = &builtinFonts[i];
- break;
- }
- }
- }
-
- // default ascent/descent values
- if (builtinFont) {
- ascent = 0.001 * builtinFont->ascent;
- descent = 0.001 * builtinFont->descent;
- fontBBox[0] = 0.001 * builtinFont->bbox[0];
- fontBBox[1] = 0.001 * builtinFont->bbox[1];
- fontBBox[2] = 0.001 * builtinFont->bbox[2];
- fontBBox[3] = 0.001 * builtinFont->bbox[3];
- } else {
- ascent = 0.95;
- descent = -0.35;
- fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0;
- }
-
- // get info from font descriptor
- readFontDescriptor(xref, fontDict);
-
- // for non-embedded fonts, don't trust the ascent/descent/bbox
- // values from the font descriptor
- if (builtinFont && embFontID.num < 0) {
- ascent = 0.001 * builtinFont->ascent;
- descent = 0.001 * builtinFont->descent;
- fontBBox[0] = 0.001 * builtinFont->bbox[0];
- fontBBox[1] = 0.001 * builtinFont->bbox[1];
- fontBBox[2] = 0.001 * builtinFont->bbox[2];
- fontBBox[3] = 0.001 * builtinFont->bbox[3];
- }
-
- // look for an external font file
- findExtFontFile();
-
- // get font matrix
- fontMat[0] = fontMat[3] = 1;
- fontMat[1] = fontMat[2] = fontMat[4] = fontMat[5] = 0;
- if (fontDict->lookup("FontMatrix", &obj1)->isArray()) {
- for (i = 0; i < 6 && i < obj1.arrayGetLength(); ++i) {
- if (obj1.arrayGet(i, &obj2)->isNum()) {
- fontMat[i] = obj2.getNum();
- }
- obj2.free();
- }
- }
- obj1.free();
-
- // get Type 3 bounding box, font definition, and resources
- if (type == fontType3) {
- if (fontDict->lookup("FontBBox", &obj1)->isArray()) {
- for (i = 0; i < 4 && i < obj1.arrayGetLength(); ++i) {
- if (obj1.arrayGet(i, &obj2)->isNum()) {
- fontBBox[i] = obj2.getNum();
- }
- obj2.free();
- }
- }
- obj1.free();
- if (!fontDict->lookup("CharProcs", &charProcs)->isDict()) {
- error(-1, "Missing or invalid CharProcs dictionary in Type 3 font");
- charProcs.free();
- }
- if (!fontDict->lookup("Resources", &resources)->isDict()) {
- resources.free();
- }
- }
-
- //----- build the font encoding -----
-
- // Encodings start with a base encoding, which can come from
- // (in order of priority):
- // 1. FontDict.Encoding or FontDict.Encoding.BaseEncoding
- // - MacRoman / MacExpert / WinAnsi / Standard
- // 2. embedded or external font file
- // 3. default:
- // - builtin --> builtin encoding
- // - TrueType --> WinAnsiEncoding
- // - others --> StandardEncoding
- // and then add a list of differences (if any) from
- // FontDict.Encoding.Differences.
-
- // check FontDict for base encoding
- hasEncoding = gFalse;
- usesMacRomanEnc = gFalse;
- baseEnc = NULL;
- baseEncFromFontFile = gFalse;
- fontDict->lookup("Encoding", &obj1);
- if (obj1.isDict()) {
- obj1.dictLookup("BaseEncoding", &obj2);
- if (obj2.isName("MacRomanEncoding")) {
- hasEncoding = gTrue;
- usesMacRomanEnc = gTrue;
- baseEnc = macRomanEncoding;
- } else if (obj2.isName("MacExpertEncoding")) {
- hasEncoding = gTrue;
- baseEnc = macExpertEncoding;
- } else if (obj2.isName("WinAnsiEncoding")) {
- hasEncoding = gTrue;
- baseEnc = winAnsiEncoding;
- }
- obj2.free();
- } else if (obj1.isName("MacRomanEncoding")) {
- hasEncoding = gTrue;
- usesMacRomanEnc = gTrue;
- baseEnc = macRomanEncoding;
- } else if (obj1.isName("MacExpertEncoding")) {
- hasEncoding = gTrue;
- baseEnc = macExpertEncoding;
- } else if (obj1.isName("WinAnsiEncoding")) {
- hasEncoding = gTrue;
- baseEnc = winAnsiEncoding;
- }
-
- // check embedded or external font file for base encoding
- // (only for Type 1 fonts - trying to get an encoding out of a
- // TrueType font is a losing proposition)
- ffT1 = NULL;
- ffT1C = NULL;
- buf = NULL;
- if (type == fontType1 && (extFontFile || embFontID.num >= 0)) {
- if (extFontFile) {
- ffT1 = FoFiType1::load(extFontFile->getCString());
- } else {
- buf = readEmbFontFile(xref, &len);
- ffT1 = FoFiType1::make(buf, len);
- }
- if (ffT1) {
- if (ffT1->getName()) {
- if (embFontName) {
- delete embFontName;
- }
- embFontName = new GString(ffT1->getName());
- }
- if (!baseEnc) {
- baseEnc = ffT1->getEncoding();
- baseEncFromFontFile = gTrue;
- }
- }
- } else if (type == fontType1C && (extFontFile || embFontID.num >= 0)) {
- if (extFontFile) {
- ffT1C = FoFiType1C::load(extFontFile->getCString());
- } else {
- buf = readEmbFontFile(xref, &len);
- ffT1C = FoFiType1C::make(buf, len);
- }
- if (ffT1C) {
- if (ffT1C->getName()) {
- if (embFontName) {
- delete embFontName;
- }
- embFontName = new GString(ffT1C->getName());
- }
- if (!baseEnc) {
- baseEnc = ffT1C->getEncoding();
- baseEncFromFontFile = gTrue;
- }
- }
- }
- if (buf) {
- gfree(buf);
- }
-
- // get default base encoding
- if (!baseEnc) {
- if (builtinFont && embFontID.num < 0) {
- baseEnc = builtinFont->defaultBaseEnc;
- hasEncoding = gTrue;
- } else if (type == fontTrueType) {
- baseEnc = winAnsiEncoding;
- } else {
- baseEnc = standardEncoding;
- }
- }
-
- // copy the base encoding
- for (i = 0; i < 256; ++i) {
- enc[i] = baseEnc[i];
- if ((encFree[i] = baseEncFromFontFile) && enc[i]) {
- enc[i] = copyString(baseEnc[i]);
- }
- }
-
- // some Type 1C font files have empty encodings, which can break the
- // T1C->T1 conversion (since the 'seac' operator depends on having
- // the accents in the encoding), so we fill in any gaps from
- // StandardEncoding
- if (type == fontType1C && (extFontFile || embFontID.num >= 0) &&
- baseEncFromFontFile) {
- for (i = 0; i < 256; ++i) {
- if (!enc[i] && standardEncoding[i]) {
- enc[i] = standardEncoding[i];
- encFree[i] = gFalse;
- }
- }
- }
-
- // merge differences into encoding
- if (obj1.isDict()) {
- obj1.dictLookup("Differences", &obj2);
- if (obj2.isArray()) {
- hasEncoding = gTrue;
- code = 0;
- for (i = 0; i < obj2.arrayGetLength(); ++i) {
- obj2.arrayGet(i, &obj3);
- if (obj3.isInt()) {
- code = obj3.getInt();
- } else if (obj3.isName()) {
- if (code >= 0 && code < 256) {
- if (encFree[code]) {
- gfree(enc[code]);
- }
- enc[code] = copyString(obj3.getName());
- encFree[code] = gTrue;
- }
- ++code;
- } else {
- error(-1, "Wrong type in font encoding resource differences (%s)",
- obj3.getTypeName());
- }
- obj3.free();
- }
- }
- obj2.free();
- }
- obj1.free();
- if (ffT1) {
- delete ffT1;
- }
- if (ffT1C) {
- delete ffT1C;
- }
-
- //----- build the mapping to Unicode -----
-
- // pass 1: use the name-to-Unicode mapping table
- missing = hex = gFalse;
- for (code = 0; code < 256; ++code) {
- if ((charName = enc[code])) {
- if (!(toUnicode[code] = globalParams->mapNameToUnicode(charName)) &&
- strcmp(charName, ".notdef")) {
- // if it wasn't in the name-to-Unicode table, check for a
- // name that looks like 'Axx' or 'xx', where 'A' is any letter
- // and 'xx' is two hex digits
- if ((strlen(charName) == 3 &&
- isalpha(charName[0]) &&
- isxdigit(charName[1]) && isxdigit(charName[2]) &&
- ((charName[1] >= 'a' && charName[1] <= 'f') ||
- (charName[1] >= 'A' && charName[1] <= 'F') ||
- (charName[2] >= 'a' && charName[2] <= 'f') ||
- (charName[2] >= 'A' && charName[2] <= 'F'))) ||
- (strlen(charName) == 2 &&
- isxdigit(charName[0]) && isxdigit(charName[1]) &&
- ((charName[0] >= 'a' && charName[0] <= 'f') ||
- (charName[0] >= 'A' && charName[0] <= 'F') ||
- (charName[1] >= 'a' && charName[1] <= 'f') ||
- (charName[1] >= 'A' && charName[1] <= 'F')))) {
- hex = gTrue;
- }
- missing = gTrue;
- }
- } else {
- toUnicode[code] = 0;
- }
- }
-
- // pass 2: try to fill in the missing chars, looking for names of
- // the form 'Axx', 'xx', 'Ann', 'ABnn', or 'nn', where 'A' and 'B'
- // are any letters, 'xx' is two hex digits, and 'nn' is 2-4
- // decimal digits
- if (missing && globalParams->getMapNumericCharNames()) {
- for (code = 0; code < 256; ++code) {
- if ((charName = enc[code]) && !toUnicode[code] &&
- strcmp(charName, ".notdef")) {
- n = strlen(charName);
- code2 = -1;
- if (hex && n == 3 && isalpha(charName[0]) &&
- isxdigit(charName[1]) && isxdigit(charName[2])) {
- sscanf(charName+1, "%x", &code2);
- } else if (hex && n == 2 &&
- isxdigit(charName[0]) && isxdigit(charName[1])) {
- sscanf(charName, "%x", &code2);
- } else if (!hex && n >= 2 && n <= 4 &&
- isdigit(charName[0]) && isdigit(charName[1])) {
- code2 = atoi(charName);
- } else if (n >= 3 && n <= 5 &&
- isdigit(charName[1]) && isdigit(charName[2])) {
- code2 = atoi(charName+1);
- } else if (n >= 4 && n <= 6 &&
- isdigit(charName[2]) && isdigit(charName[3])) {
- code2 = atoi(charName+2);
- }
- if (code2 >= 0 && code2 <= 0xff) {
- toUnicode[code] = (Unicode)code2;
- }
- }
- }
-
- // if the 'mapUnknownCharNames' flag is set, do a simple pass-through
- // mapping for unknown character names
- } else if (missing && globalParams->getMapUnknownCharNames()) {
- for (code = 0; code < 256; ++code) {
- if (!toUnicode[code]) {
- toUnicode[code] = code;
- }
- }
- }
-
- // construct the char code -> Unicode mapping object
- ctu = CharCodeToUnicode::make8BitToUnicode(toUnicode);
-
- // merge in a ToUnicode CMap, if there is one -- this overwrites
- // existing entries in ctu, i.e., the ToUnicode CMap takes
- // precedence, but the other encoding info is allowed to fill in any
- // holes
- readToUnicodeCMap(fontDict, 8, ctu);
-
- // look for a Unicode-to-Unicode mapping
- if (name && (utu = globalParams->getUnicodeToUnicode(name))) {
- for (i = 0; i < 256; ++i) {
- toUnicode[i] = 0;
- }
- ctu2 = CharCodeToUnicode::make8BitToUnicode(toUnicode);
- for (i = 0; i < 256; ++i) {
- n = ctu->mapToUnicode((CharCode)i, uBuf, 8);
- if (n >= 1) {
- n = utu->mapToUnicode((CharCode)uBuf[0], uBuf, 8);
- if (n >= 1) {
- ctu2->setMapping((CharCode)i, uBuf, n);
- }
- }
- }
- utu->decRefCnt();
- delete ctu;
- ctu = ctu2;
- }
-
- //----- get the character widths -----
-
- // initialize all widths
- for (code = 0; code < 256; ++code) {
- widths[code] = missingWidth * 0.001;
- }
-
- // use widths from font dict, if present
- fontDict->lookup("FirstChar", &obj1);
- firstChar = obj1.isInt() ? obj1.getInt() : 0;
- obj1.free();
- if (firstChar < 0 || firstChar > 255) {
- firstChar = 0;
- }
- fontDict->lookup("LastChar", &obj1);
- lastChar = obj1.isInt() ? obj1.getInt() : 255;
- obj1.free();
- if (lastChar < 0 || lastChar > 255) {
- lastChar = 255;
- }
- mul = (type == fontType3) ? fontMat[0] : 0.001;
- fontDict->lookup("Widths", &obj1);
- if (obj1.isArray()) {
- flags |= fontFixedWidth;
- if (obj1.arrayGetLength() < lastChar - firstChar + 1) {
- lastChar = firstChar + obj1.arrayGetLength() - 1;
- }
- for (code = firstChar; code <= lastChar; ++code) {
- obj1.arrayGet(code - firstChar, &obj2);
- if (obj2.isNum()) {
- widths[code] = obj2.getNum() * mul;
- if (widths[code] != widths[firstChar]) {
- flags &= ~fontFixedWidth;
- }
- }
- obj2.free();
- }
-
- // use widths from built-in font
- } else if (builtinFont) {
- // this is a kludge for broken PDF files that encode char 32
- // as .notdef
- if (builtinFont->widths->getWidth("space", &w)) {
- widths[32] = 0.001 * w;
- }
- for (code = 0; code < 256; ++code) {
- if (enc[code] && builtinFont->widths->getWidth(enc[code], &w)) {
- widths[code] = 0.001 * w;
- }
- }
-
- // couldn't find widths -- use defaults
- } else {
- // this is technically an error -- the Widths entry is required
- // for all but the Base-14 fonts -- but certain PDF generators
- // apparently don't include widths for Arial and TimesNewRoman
- if (isFixedWidth()) {
- i = 0;
- } else if (isSerif()) {
- i = 8;
- } else {
- i = 4;
- }
- if (isBold()) {
- i += 2;
- }
- if (isItalic()) {
- i += 1;
- }
- builtinFont = builtinFontSubst[i];
- // this is a kludge for broken PDF files that encode char 32
- // as .notdef
- if (builtinFont->widths->getWidth("space", &w)) {
- widths[32] = 0.001 * w;
- }
- for (code = 0; code < 256; ++code) {
- if (enc[code] && builtinFont->widths->getWidth(enc[code], &w)) {
- widths[code] = 0.001 * w;
- }
- }
- }
- obj1.free();
-
- ok = gTrue;
-}
-
-Gfx8BitFont::~Gfx8BitFont() {
- int i;
-
- for (i = 0; i < 256; ++i) {
- if (encFree[i] && enc[i]) {
- gfree(enc[i]);
- }
- }
- ctu->decRefCnt();
- if (charProcs.isDict()) {
- charProcs.free();
- }
- if (resources.isDict()) {
- resources.free();
- }
-}
-
-int Gfx8BitFont::getNextChar(char *s, int len, CharCode *code,
- Unicode *u, int uSize, int *uLen,
- double *dx, double *dy, double *ox, double *oy) {
- CharCode c;
-
- *code = c = (CharCode)(*s & 0xff);
- *uLen = ctu->mapToUnicode(c, u, uSize);
- *dx = widths[c];
- *dy = *ox = *oy = 0;
- return 1;
-}
-
-CharCodeToUnicode *Gfx8BitFont::getToUnicode() {
- ctu->incRefCnt();
- return ctu;
-}
-
-Gushort *Gfx8BitFont::getCodeToGIDMap(FoFiTrueType *ff) {
- Gushort *map;
- int cmapPlatform, cmapEncoding;
- int unicodeCmap, macRomanCmap, msSymbolCmap, cmap;
- GBool useMacRoman, useUnicode;
- char *charName;
- Unicode u;
- int code, i, n;
-
- map = (Gushort *)gmallocn(256, sizeof(Gushort));
- for (i = 0; i < 256; ++i) {
- map[i] = 0;
- }
-
- // To match up with the Adobe-defined behaviour, we choose a cmap
- // like this:
- // 1. If the PDF font has an encoding:
- // 1a. If the PDF font specified MacRomanEncoding and the
- // TrueType font has a Macintosh Roman cmap, use it, and
- // reverse map the char names through MacRomanEncoding to
- // get char codes.
- // 1b. If the TrueType font has a Microsoft Unicode cmap or a
- // non-Microsoft Unicode cmap, use it, and use the Unicode
- // indexes, not the char codes.
- // 1c. If the PDF font is symbolic and the TrueType font has a
- // Microsoft Symbol cmap, use it, and use char codes
- // directly (possibly with an offset of 0xf000).
- // 1d. If the TrueType font has a Macintosh Roman cmap, use it,
- // as in case 1a.
- // 2. If the PDF font does not have an encoding or the PDF font is
- // symbolic:
- // 2a. If the TrueType font has a Macintosh Roman cmap, use it,
- // and use char codes directly (possibly with an offset of
- // 0xf000).
- // 2b. If the TrueType font has a Microsoft Symbol cmap, use it,
- // and use char codes directly (possible with an offset of
- // 0xf000).
- // 3. If none of these rules apply, use the first cmap and hope for
- // the best (this shouldn't happen).
- unicodeCmap = macRomanCmap = msSymbolCmap = -1;
- for (i = 0; i < ff->getNumCmaps(); ++i) {
- cmapPlatform = ff->getCmapPlatform(i);
- cmapEncoding = ff->getCmapEncoding(i);
- if ((cmapPlatform == 3 && cmapEncoding == 1) ||
- cmapPlatform == 0) {
- unicodeCmap = i;
- } else if (cmapPlatform == 1 && cmapEncoding == 0) {
- macRomanCmap = i;
- } else if (cmapPlatform == 3 && cmapEncoding == 0) {
- msSymbolCmap = i;
- }
- }
- cmap = 0;
- useMacRoman = gFalse;
- useUnicode = gFalse;
- if (hasEncoding) {
- if (usesMacRomanEnc && macRomanCmap >= 0) {
- cmap = macRomanCmap;
- useMacRoman = gTrue;
- } else if (unicodeCmap >= 0) {
- cmap = unicodeCmap;
- useUnicode = gTrue;
- } else if ((flags & fontSymbolic) && msSymbolCmap >= 0) {
- cmap = msSymbolCmap;
- } else if ((flags & fontSymbolic) && macRomanCmap >= 0) {
- cmap = macRomanCmap;
- } else if (macRomanCmap >= 0) {
- cmap = macRomanCmap;
- useMacRoman = gTrue;
- }
- } else {
- if (msSymbolCmap >= 0) {
- cmap = msSymbolCmap;
- } else if (macRomanCmap >= 0) {
- cmap = macRomanCmap;
- }
- }
-
- // reverse map the char names through MacRomanEncoding, then map the
- // char codes through the cmap
- if (useMacRoman) {
- for (i = 0; i < 256; ++i) {
- if ((charName = enc[i])) {
- if ((code = globalParams->getMacRomanCharCode(charName))) {
- map[i] = ff->mapCodeToGID(cmap, code);
- }
- }
- }
-
- // map Unicode through the cmap
- } else if (useUnicode) {
- for (i = 0; i < 256; ++i) {
- if (((charName = enc[i]) &&
- (u = globalParams->mapNameToUnicode(charName))) ||
- (n = ctu->mapToUnicode((CharCode)i, &u, 1))) {
- map[i] = ff->mapCodeToGID(cmap, u);
- }
- }
-
- // map the char codes through the cmap, possibly with an offset of
- // 0xf000
- } else {
- for (i = 0; i < 256; ++i) {
- if (!(map[i] = ff->mapCodeToGID(cmap, i))) {
- map[i] = ff->mapCodeToGID(cmap, 0xf000 + i);
- }
- }
- }
-
- // try the TrueType 'post' table to handle any unmapped characters
- for (i = 0; i < 256; ++i) {
- if (!map[i] && (charName = enc[i])) {
- map[i] = (Gushort)(int)ff->mapNameToGID(charName);
- }
- }
-
- return map;
-}
-
-Dict *Gfx8BitFont::getCharProcs() {
- return charProcs.isDict() ? charProcs.getDict() : (Dict *)NULL;
-}
-
-Object *Gfx8BitFont::getCharProc(int code, Object *proc) {
- if (enc[code] && charProcs.isDict()) {
- charProcs.dictLookup(enc[code], proc);
- } else {
- proc->initNull();
- }
- return proc;
-}
-
-Dict *Gfx8BitFont::getResources() {
- return resources.isDict() ? resources.getDict() : (Dict *)NULL;
-}
-
-//------------------------------------------------------------------------
-// GfxCIDFont
-//------------------------------------------------------------------------
-
-static int CDECL cmpWidthExcep(const void *w1, const void *w2) {
- return ((GfxFontCIDWidthExcep *)w1)->first -
- ((GfxFontCIDWidthExcep *)w2)->first;
-}
-
-static int CDECL cmpWidthExcepV(const void *w1, const void *w2) {
- return ((GfxFontCIDWidthExcepV *)w1)->first -
- ((GfxFontCIDWidthExcepV *)w2)->first;
-}
-
-GfxCIDFont::GfxCIDFont(XRef *xref, char *tagA, Ref idA, GString *nameA,
- Dict *fontDict):
- GfxFont(tagA, idA, nameA)
-{
- Dict *desFontDict;
- GString *collection, *cMapName;
- Object desFontDictObj;
- Object obj1, obj2, obj3, obj4, obj5, obj6;
- CharCodeToUnicode *utu;
- CharCode c;
- Unicode uBuf[8];
- int c1, c2;
- int excepsSize, i, j, k, n;
-
- ascent = 0.95;
- descent = -0.35;
- fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0;
- cMap = NULL;
- ctu = NULL;
- widths.defWidth = 1.0;
- widths.defHeight = -1.0;
- widths.defVY = 0.880;
- widths.exceps = NULL;
- widths.nExceps = 0;
- widths.excepsV = NULL;
- widths.nExcepsV = 0;
- cidToGID = NULL;
- cidToGIDLen = 0;
-
- // get the descendant font
- if (!fontDict->lookup("DescendantFonts", &obj1)->isArray()) {
- error(-1, "Missing DescendantFonts entry in Type 0 font");
- obj1.free();
- goto err1;
- }
- if (!obj1.arrayGet(0, &desFontDictObj)->isDict()) {
- error(-1, "Bad descendant font in Type 0 font");
- goto err3;
- }
- obj1.free();
- desFontDict = desFontDictObj.getDict();
-
- // font type
- if (!desFontDict->lookup("Subtype", &obj1)) {
- error(-1, "Missing Subtype entry in Type 0 descendant font");
- goto err3;
- }
- if (obj1.isName("CIDFontType0")) {
- type = fontCIDType0;
- } else if (obj1.isName("CIDFontType2")) {
- type = fontCIDType2;
- } else {
- error(-1, "Unknown Type 0 descendant font type '%s'",
- obj1.isName() ? obj1.getName() : "???");
- goto err3;
- }
- obj1.free();
-
- // get info from font descriptor
- readFontDescriptor(xref, desFontDict);
-
- // look for an external font file
- findExtFontFile();
-
- //----- encoding info -----
-
- // char collection
- if (!desFontDict->lookup("CIDSystemInfo", &obj1)->isDict()) {
- error(-1, "Missing CIDSystemInfo dictionary in Type 0 descendant font");
- goto err3;
- }
- obj1.dictLookup("Registry", &obj2);
- obj1.dictLookup("Ordering", &obj3);
- if (!obj2.isString() || !obj3.isString()) {
- error(-1, "Invalid CIDSystemInfo dictionary in Type 0 descendant font");
- goto err4;
- }
- collection = obj2.getString()->copy()->append('-')->append(obj3.getString());
- obj3.free();
- obj2.free();
- obj1.free();
-
- // look for a ToUnicode CMap
- if (!(ctu = readToUnicodeCMap(fontDict, 16, NULL))) {
-
- // the "Adobe-Identity" and "Adobe-UCS" collections don't have
- // cidToUnicode files
- if (collection->cmp("Adobe-Identity") &&
- collection->cmp("Adobe-UCS")) {
-
- // look for a user-supplied .cidToUnicode file
- if (!(ctu = globalParams->getCIDToUnicode(collection))) {
- error(-1, "Unknown character collection '%s'",
- collection->getCString());
- // fall-through, assuming the Identity mapping -- this appears
- // to match Adobe's behavior
- }
- }
- }
-
- // look for a Unicode-to-Unicode mapping
- if (name && (utu = globalParams->getUnicodeToUnicode(name))) {
- if (ctu) {
- for (c = 0; c < ctu->getLength(); ++c) {
- n = ctu->mapToUnicode(c, uBuf, 8);
- if (n >= 1) {
- n = utu->mapToUnicode((CharCode)uBuf[0], uBuf, 8);
- if (n >= 1) {
- ctu->setMapping(c, uBuf, n);
- }
- }
- }
- utu->decRefCnt();
- } else {
- ctu = utu;
- }
- }
-
- // encoding (i.e., CMap)
- //~ need to handle a CMap stream here
- //~ also need to deal with the UseCMap entry in the stream dict
- if (!fontDict->lookup("Encoding", &obj1)->isName()) {
- error(-1, "Missing or invalid Encoding entry in Type 0 font");
- delete collection;
- goto err3;
- }
- cMapName = new GString(obj1.getName());
- obj1.free();
- if (!(cMap = globalParams->getCMap(collection, cMapName))) {
- error(-1, "Unknown CMap '%s' for character collection '%s'",
- cMapName->getCString(), collection->getCString());
- delete collection;
- delete cMapName;
- goto err2;
- }
- delete collection;
- delete cMapName;
-
- // CIDToGIDMap (for embedded TrueType fonts)
- if (type == fontCIDType2) {
- desFontDict->lookup("CIDToGIDMap", &obj1);
- if (obj1.isStream()) {
- cidToGIDLen = 0;
- i = 64;
- cidToGID = (Gushort *)gmallocn(i, sizeof(Gushort));
- obj1.streamReset();
- while ((c1 = obj1.streamGetChar()) != EOF &&
- (c2 = obj1.streamGetChar()) != EOF) {
- if (cidToGIDLen == i) {
- i *= 2;
- cidToGID = (Gushort *)greallocn(cidToGID, i, sizeof(Gushort));
- }
- cidToGID[cidToGIDLen++] = (Gushort)((c1 << 8) + c2);
- }
- } else if (!obj1.isName("Identity") && !obj1.isNull()) {
- error(-1, "Invalid CIDToGIDMap entry in CID font");
- }
- obj1.free();
- }
-
- //----- character metrics -----
-
- // default char width
- if (desFontDict->lookup("DW", &obj1)->isInt()) {
- widths.defWidth = obj1.getInt() * 0.001;
- }
- obj1.free();
-
- // char width exceptions
- if (desFontDict->lookup("W", &obj1)->isArray()) {
- excepsSize = 0;
- i = 0;
- while (i + 1 < obj1.arrayGetLength()) {
- obj1.arrayGet(i, &obj2);
- obj1.arrayGet(i + 1, &obj3);
- if (obj2.isInt() && obj3.isInt() && i + 2 < obj1.arrayGetLength()) {
- if (obj1.arrayGet(i + 2, &obj4)->isNum()) {
- if (widths.nExceps == excepsSize) {
- excepsSize += 16;
- widths.exceps = (GfxFontCIDWidthExcep *)
- greallocn(widths.exceps,
- excepsSize, sizeof(GfxFontCIDWidthExcep));
- }
- widths.exceps[widths.nExceps].first = obj2.getInt();
- widths.exceps[widths.nExceps].last = obj3.getInt();
- widths.exceps[widths.nExceps].width = obj4.getNum() * 0.001;
- ++widths.nExceps;
- } else {
- error(-1, "Bad widths array in Type 0 font");
- }
- obj4.free();
- i += 3;
- } else if (obj2.isInt() && obj3.isArray()) {
- if (widths.nExceps + obj3.arrayGetLength() > excepsSize) {
- excepsSize = (widths.nExceps + obj3.arrayGetLength() + 15) & ~15;
- widths.exceps = (GfxFontCIDWidthExcep *)
- greallocn(widths.exceps,
- excepsSize, sizeof(GfxFontCIDWidthExcep));
- }
- j = obj2.getInt();
- for (k = 0; k < obj3.arrayGetLength(); ++k) {
- if (obj3.arrayGet(k, &obj4)->isNum()) {
- widths.exceps[widths.nExceps].first = j;
- widths.exceps[widths.nExceps].last = j;
- widths.exceps[widths.nExceps].width = obj4.getNum() * 0.001;
- ++j;
- ++widths.nExceps;
- } else {
- error(-1, "Bad widths array in Type 0 font");
- }
- obj4.free();
- }
- i += 2;
- } else {
- error(-1, "Bad widths array in Type 0 font");
- ++i;
- }
- obj3.free();
- obj2.free();
- }
- qsort(widths.exceps, widths.nExceps, sizeof(GfxFontCIDWidthExcep),
- &cmpWidthExcep);
- }
- obj1.free();
-
- // default metrics for vertical font
- if (desFontDict->lookup("DW2", &obj1)->isArray() &&
- obj1.arrayGetLength() == 2) {
- if (obj1.arrayGet(0, &obj2)->isNum()) {
- widths.defVY = obj2.getNum() * 0.001;
- }
- obj2.free();
- if (obj1.arrayGet(1, &obj2)->isNum()) {
- widths.defHeight = obj2.getNum() * 0.001;
- }
- obj2.free();
- }
- obj1.free();
-
- // char metric exceptions for vertical font
- if (desFontDict->lookup("W2", &obj1)->isArray()) {
- excepsSize = 0;
- i = 0;
- while (i + 1 < obj1.arrayGetLength()) {
- obj1.arrayGet(i, &obj2);
- obj1.arrayGet(i+ 1, &obj3);
- if (obj2.isInt() && obj3.isInt() && i + 4 < obj1.arrayGetLength()) {
- if (obj1.arrayGet(i + 2, &obj4)->isNum() &&
- obj1.arrayGet(i + 3, &obj5)->isNum() &&
- obj1.arrayGet(i + 4, &obj6)->isNum()) {
- if (widths.nExcepsV == excepsSize) {
- excepsSize += 16;
- widths.excepsV = (GfxFontCIDWidthExcepV *)
- greallocn(widths.excepsV,
- excepsSize, sizeof(GfxFontCIDWidthExcepV));
- }
- widths.excepsV[widths.nExcepsV].first = obj2.getInt();
- widths.excepsV[widths.nExcepsV].last = obj3.getInt();
- widths.excepsV[widths.nExcepsV].height = obj4.getNum() * 0.001;
- widths.excepsV[widths.nExcepsV].vx = obj5.getNum() * 0.001;
- widths.excepsV[widths.nExcepsV].vy = obj6.getNum() * 0.001;
- ++widths.nExcepsV;
- } else {
- error(-1, "Bad widths (W2) array in Type 0 font");
- }
- obj6.free();
- obj5.free();
- obj4.free();
- i += 5;
- } else if (obj2.isInt() && obj3.isArray()) {
- if (widths.nExcepsV + obj3.arrayGetLength() / 3 > excepsSize) {
- excepsSize =
- (widths.nExcepsV + obj3.arrayGetLength() / 3 + 15) & ~15;
- widths.excepsV = (GfxFontCIDWidthExcepV *)
- greallocn(widths.excepsV,
- excepsSize, sizeof(GfxFontCIDWidthExcepV));
- }
- j = obj2.getInt();
- for (k = 0; k < obj3.arrayGetLength(); k += 3) {
- if (obj3.arrayGet(k, &obj4)->isNum() &&
- obj3.arrayGet(k+1, &obj5)->isNum() &&
- obj3.arrayGet(k+2, &obj6)->isNum()) {
- widths.excepsV[widths.nExceps].first = j;
- widths.excepsV[widths.nExceps].last = j;
- widths.excepsV[widths.nExceps].height = obj4.getNum() * 0.001;
- widths.excepsV[widths.nExceps].vx = obj5.getNum() * 0.001;
- widths.excepsV[widths.nExceps].vy = obj6.getNum() * 0.001;
- ++j;
- ++widths.nExcepsV;
- } else {
- error(-1, "Bad widths (W2) array in Type 0 font");
- }
- obj6.free();
- obj5.free();
- obj4.free();
- }
- i += 2;
- } else {
- error(-1, "Bad widths (W2) array in Type 0 font");
- ++i;
- }
- obj3.free();
- obj2.free();
- }
- qsort(widths.excepsV, widths.nExcepsV, sizeof(GfxFontCIDWidthExcepV),
- &cmpWidthExcepV);
- }
- obj1.free();
-
- desFontDictObj.free();
- ok = gTrue;
- return;
-
- err4:
- obj3.free();
- obj2.free();
- err3:
- obj1.free();
- err2:
- desFontDictObj.free();
- err1:;
-}
-
-GfxCIDFont::~GfxCIDFont() {
- if (cMap) {
- cMap->decRefCnt();
- }
- if (ctu) {
- ctu->decRefCnt();
- }
- gfree(widths.exceps);
- gfree(widths.excepsV);
- if (cidToGID) {
- gfree(cidToGID);
- }
-}
-
-int GfxCIDFont::getNextChar(char *s, int len, CharCode *code,
- Unicode *u, int uSize, int *uLen,
- double *dx, double *dy, double *ox, double *oy) {
- CID cid;
- double w, h, vx, vy;
- int n, a, b, m;
-
- if (!cMap) {
- *code = 0;
- *uLen = 0;
- *dx = *dy = 0;
- return 1;
- }
-
- *code = (CharCode)(cid = cMap->getCID(s, len, &n));
- if (ctu) {
- *uLen = ctu->mapToUnicode(cid, u, uSize);
- } else {
- *uLen = 0;
- }
-
- // horizontal
- if (cMap->getWMode() == 0) {
- w = widths.defWidth;
- h = vx = vy = 0;
- if (widths.nExceps > 0 && cid >= widths.exceps[0].first) {
- a = 0;
- b = widths.nExceps;
- // invariant: widths.exceps[a].first <= cid < widths.exceps[b].first
- while (b - a > 1) {
- m = (a + b) / 2;
- if (widths.exceps[m].first <= cid) {
- a = m;
- } else {
- b = m;
- }
- }
- if (cid <= widths.exceps[a].last) {
- w = widths.exceps[a].width;
- }
- }
-
- // vertical
- } else {
- w = 0;
- h = widths.defHeight;
- vx = widths.defWidth / 2;
- vy = widths.defVY;
- if (widths.nExcepsV > 0 && cid >= widths.excepsV[0].first) {
- a = 0;
- b = widths.nExcepsV;
- // invariant: widths.excepsV[a].first <= cid < widths.excepsV[b].first
- while (b - a > 1) {
- m = (a + b) / 2;
- if (widths.excepsV[m].last <= cid) {
- a = m;
- } else {
- b = m;
- }
- }
- if (cid <= widths.excepsV[a].last) {
- h = widths.excepsV[a].height;
- vx = widths.excepsV[a].vx;
- vy = widths.excepsV[a].vy;
- }
- }
- }
-
- *dx = w;
- *dy = h;
- *ox = vx;
- *oy = vy;
-
- return n;
-}
-
-int GfxCIDFont::getWMode() {
- return cMap ? cMap->getWMode() : 0;
-}
-
-CharCodeToUnicode *GfxCIDFont::getToUnicode() {
- if (ctu) {
- ctu->incRefCnt();
- }
- return ctu;
-}
-
-GString *GfxCIDFont::getCollection() {
- return cMap ? cMap->getCollection() : (GString *)NULL;
-}
-
-//------------------------------------------------------------------------
-// GfxFontDict
-//------------------------------------------------------------------------
-
-GfxFontDict::GfxFontDict(XRef *xref, Ref *fontDictRef, Dict *fontDict) {
- int i;
- Object obj1, obj2;
- Ref r;
-
- numFonts = fontDict->getLength();
- fonts = (GfxFont **)gmallocn(numFonts, sizeof(GfxFont *));
- for (i = 0; i < numFonts; ++i) {
- fontDict->getValNF(i, &obj1);
- obj1.fetch(xref, &obj2);
- if (obj2.isDict()) {
- if (obj1.isRef()) {
- r = obj1.getRef();
- } else {
- // no indirect reference for this font, so invent a unique one
- // (legal generation numbers are five digits, so any 6-digit
- // number would be safe)
- r.num = i;
- if (fontDictRef) {
- r.gen = 100000 + fontDictRef->num;
- } else {
- r.gen = 999999;
- }
- }
- fonts[i] = GfxFont::makeFont(xref, fontDict->getKey(i),
- r, obj2.getDict());
- if (fonts[i] && !fonts[i]->isOk()) {
- delete fonts[i];
- fonts[i] = NULL;
- }
- } else {
- error(-1, "font resource is not a dictionary");
- fonts[i] = NULL;
- }
- obj1.free();
- obj2.free();
- }
-}
-
-GfxFontDict::~GfxFontDict() {
- int i;
-
- for (i = 0; i < numFonts; ++i) {
- if (fonts[i]) {
- delete fonts[i];
- }
- }
- gfree(fonts);
-}
-
-GfxFont *GfxFontDict::lookup(char *tag) {
- int i;
-
- for (i = 0; i < numFonts; ++i) {
- if (fonts[i] && fonts[i]->matches(tag)) {
- return fonts[i];
- }
- }
- return NULL;
-}
diff --git a/Build/source/libs/xpdf/xpdf/GfxFont.h b/Build/source/libs/xpdf/xpdf/GfxFont.h
deleted file mode 100644
index d076692fc86..00000000000
--- a/Build/source/libs/xpdf/xpdf/GfxFont.h
+++ /dev/null
@@ -1,320 +0,0 @@
-//========================================================================
-//
-// GfxFont.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef GFXFONT_H
-#define GFXFONT_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "GString.h"
-#include "Object.h"
-#include "CharTypes.h"
-
-class Dict;
-class CMap;
-class CharCodeToUnicode;
-class FoFiTrueType;
-struct GfxFontCIDWidths;
-
-//------------------------------------------------------------------------
-// GfxFontType
-//------------------------------------------------------------------------
-
-enum GfxFontType {
- //----- Gfx8BitFont
- fontUnknownType,
- fontType1,
- fontType1C,
- fontType1COT,
- fontType3,
- fontTrueType,
- fontTrueTypeOT,
- //----- GfxCIDFont
- fontCIDType0,
- fontCIDType0C,
- fontCIDType0COT,
- fontCIDType2,
- fontCIDType2OT
-};
-
-//------------------------------------------------------------------------
-// GfxFontCIDWidths
-//------------------------------------------------------------------------
-
-struct GfxFontCIDWidthExcep {
- CID first; // this record applies to
- CID last; // CIDs <first>..<last>
- double width; // char width
-};
-
-struct GfxFontCIDWidthExcepV {
- CID first; // this record applies to
- CID last; // CIDs <first>..<last>
- double height; // char height
- double vx, vy; // origin position
-};
-
-struct GfxFontCIDWidths {
- double defWidth; // default char width
- double defHeight; // default char height
- double defVY; // default origin position
- GfxFontCIDWidthExcep *exceps; // exceptions
- int nExceps; // number of valid entries in exceps
- GfxFontCIDWidthExcepV * // exceptions for vertical font
- excepsV;
- int nExcepsV; // number of valid entries in excepsV
-};
-
-//------------------------------------------------------------------------
-// GfxFont
-//------------------------------------------------------------------------
-
-#define fontFixedWidth (1 << 0)
-#define fontSerif (1 << 1)
-#define fontSymbolic (1 << 2)
-#define fontItalic (1 << 6)
-#define fontBold (1 << 18)
-
-class GfxFont {
-public:
-
- // Build a GfxFont object.
- static GfxFont *makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict);
-
- GfxFont(char *tagA, Ref idA, GString *nameA);
-
- virtual ~GfxFont();
-
- GBool isOk() { return ok; }
-
- // Get font tag.
- GString *getTag() { return tag; }
-
- // Get font dictionary ID.
- Ref *getID() { return &id; }
-
- // Does this font match the tag?
- GBool matches(char *tagA) { return !tag->cmp(tagA); }
-
- // Get base font name.
- GString *getName() { return name; }
-
- // Get the original font name (ignornig any munging that might have
- // been done to map to a canonical Base-14 font name).
- GString *getOrigName() { return origName; }
-
- // Get font type.
- GfxFontType getType() { return type; }
- virtual GBool isCIDFont() { return gFalse; }
-
- // Get embedded font ID, i.e., a ref for the font file stream.
- // Returns false if there is no embedded font.
- GBool getEmbeddedFontID(Ref *embID)
- { *embID = embFontID; return embFontID.num >= 0; }
-
- // Get the PostScript font name for the embedded font. Returns
- // NULL if there is no embedded font.
- GString *getEmbeddedFontName() { return embFontName; }
-
- // Get the name of the external font file. Returns NULL if there
- // is no external font file.
- GString *getExtFontFile() { return extFontFile; }
-
- // Get font descriptor flags.
- int getFlags() { return flags; }
- GBool isFixedWidth() { return flags & fontFixedWidth; }
- GBool isSerif() { return flags & fontSerif; }
- GBool isSymbolic() { return flags & fontSymbolic; }
- GBool isItalic() { return flags & fontItalic; }
- GBool isBold() { return flags & fontBold; }
-
- // Return the font matrix.
- double *getFontMatrix() { return fontMat; }
-
- // Return the font bounding box.
- double *getFontBBox() { return fontBBox; }
-
- // Return the ascent and descent values.
- double getAscent() { return ascent; }
- double getDescent() { return descent; }
-
- // Return the writing mode (0=horizontal, 1=vertical).
- virtual int getWMode() { return 0; }
-
- // Read an external or embedded font file into a buffer.
- char *readExtFontFile(int *len);
- char *readEmbFontFile(XRef *xref, int *len);
-
- // Get the next char from a string <s> of <len> bytes, returning the
- // char <code>, its Unicode mapping <u>, its displacement vector
- // (<dx>, <dy>), and its origin offset vector (<ox>, <oy>). <uSize>
- // is the number of entries available in <u>, and <uLen> is set to
- // the number actually used. Returns the number of bytes used by
- // the char code.
- virtual int getNextChar(char *s, int len, CharCode *code,
- Unicode *u, int uSize, int *uLen,
- double *dx, double *dy, double *ox, double *oy) = 0;
-
-protected:
-
- void readFontDescriptor(XRef *xref, Dict *fontDict);
- CharCodeToUnicode *readToUnicodeCMap(Dict *fontDict, int nBits,
- CharCodeToUnicode *ctu);
- void findExtFontFile();
-
- GString *tag; // PDF font tag
- Ref id; // reference (used as unique ID)
- GString *name; // font name
- GString *origName; // original font name
- GfxFontType type; // type of font
- int flags; // font descriptor flags
- GString *embFontName; // name of embedded font
- Ref embFontID; // ref to embedded font file stream
- GString *extFontFile; // external font file name
- double fontMat[6]; // font matrix (Type 3 only)
- double fontBBox[4]; // font bounding box (Type 3 only)
- double missingWidth; // "default" width
- double ascent; // max height above baseline
- double descent; // max depth below baseline
- GBool ok;
-};
-
-//------------------------------------------------------------------------
-// Gfx8BitFont
-//------------------------------------------------------------------------
-
-class Gfx8BitFont: public GfxFont {
-public:
-
- Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GString *nameA,
- GfxFontType typeA, Dict *fontDict);
-
- virtual ~Gfx8BitFont();
-
- virtual int getNextChar(char *s, int len, CharCode *code,
- Unicode *u, int uSize, int *uLen,
- double *dx, double *dy, double *ox, double *oy);
-
- // Return the encoding.
- char **getEncoding() { return enc; }
-
- // Return the Unicode map.
- CharCodeToUnicode *getToUnicode();
-
- // Return the character name associated with <code>.
- char *getCharName(int code) { return enc[code]; }
-
- // Returns true if the PDF font specified an encoding.
- GBool getHasEncoding() { return hasEncoding; }
-
- // Returns true if the PDF font specified MacRomanEncoding.
- GBool getUsesMacRomanEnc() { return usesMacRomanEnc; }
-
- // Get width of a character.
- double getWidth(Guchar c) { return widths[c]; }
-
- // Return a char code-to-GID mapping for the provided font file.
- // (This is only useful for TrueType fonts.)
- Gushort *getCodeToGIDMap(FoFiTrueType *ff);
-
- // Return the Type 3 CharProc dictionary, or NULL if none.
- Dict *getCharProcs();
-
- // Return the Type 3 CharProc for the character associated with <code>.
- Object *getCharProc(int code, Object *proc);
-
- // Return the Type 3 Resources dictionary, or NULL if none.
- Dict *getResources();
-
-private:
-
- char *enc[256]; // char code --> char name
- char encFree[256]; // boolean for each char name: if set,
- // the string is malloc'ed
- CharCodeToUnicode *ctu; // char code --> Unicode
- GBool hasEncoding;
- GBool usesMacRomanEnc;
- double widths[256]; // character widths
- Object charProcs; // Type 3 CharProcs dictionary
- Object resources; // Type 3 Resources dictionary
-};
-
-//------------------------------------------------------------------------
-// GfxCIDFont
-//------------------------------------------------------------------------
-
-class GfxCIDFont: public GfxFont {
-public:
-
- GfxCIDFont(XRef *xref, char *tagA, Ref idA, GString *nameA,
- Dict *fontDict);
-
- virtual ~GfxCIDFont();
-
- virtual GBool isCIDFont() { return gTrue; }
-
- virtual int getNextChar(char *s, int len, CharCode *code,
- Unicode *u, int uSize, int *uLen,
- double *dx, double *dy, double *ox, double *oy);
-
- // Return the writing mode (0=horizontal, 1=vertical).
- virtual int getWMode();
-
- // Return the Unicode map.
- CharCodeToUnicode *getToUnicode();
-
- // Get the collection name (<registry>-<ordering>).
- GString *getCollection();
-
- // Return the CID-to-GID mapping table. These should only be called
- // if type is fontCIDType2.
- Gushort *getCIDToGID() { return cidToGID; }
- int getCIDToGIDLen() { return cidToGIDLen; }
-
-private:
-
- CMap *cMap; // char code --> CID
- CharCodeToUnicode *ctu; // CID --> Unicode
- GfxFontCIDWidths widths; // character widths
- Gushort *cidToGID; // CID --> GID mapping (for embedded
- // TrueType fonts)
- int cidToGIDLen;
-};
-
-//------------------------------------------------------------------------
-// GfxFontDict
-//------------------------------------------------------------------------
-
-class GfxFontDict {
-public:
-
- // Build the font dictionary, given the PDF font dictionary.
- GfxFontDict(XRef *xref, Ref *fontDictRef, Dict *fontDict);
-
- // Destructor.
- ~GfxFontDict();
-
- // Get the specified font.
- GfxFont *lookup(char *tag);
-
- // Iterative access.
- int getNumFonts() { return numFonts; }
- GfxFont *getFont(int i) { return fonts[i]; }
-
-private:
-
- GfxFont **fonts; // list of fonts
- int numFonts; // number of fonts
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/GfxState.cc b/Build/source/libs/xpdf/xpdf/GfxState.cc
deleted file mode 100644
index 67b4f6fd92d..00000000000
--- a/Build/source/libs/xpdf/xpdf/GfxState.cc
+++ /dev/null
@@ -1,4137 +0,0 @@
-//========================================================================
-//
-// GfxState.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include <math.h>
-#include <string.h>
-#include "gmem.h"
-#include "Error.h"
-#include "Object.h"
-#include "Array.h"
-#include "Page.h"
-#include "GfxState.h"
-
-//------------------------------------------------------------------------
-
-static inline GfxColorComp clip01(GfxColorComp x) {
- return (x < 0) ? 0 : (x > gfxColorComp1) ? gfxColorComp1 : x;
-}
-
-static inline double clip01(double x) {
- return (x < 0) ? 0 : (x > 1) ? 1 : x;
-}
-
-//------------------------------------------------------------------------
-
-struct GfxBlendModeInfo {
- char *name;
- GfxBlendMode mode;
-};
-
-static GfxBlendModeInfo gfxBlendModeNames[] = {
- { "Normal", gfxBlendNormal },
- { "Compatible", gfxBlendNormal },
- { "Multiply", gfxBlendMultiply },
- { "Screen", gfxBlendScreen },
- { "Overlay", gfxBlendOverlay },
- { "Darken", gfxBlendDarken },
- { "Lighten", gfxBlendLighten },
- { "ColorDodge", gfxBlendColorDodge },
- { "ColorBurn", gfxBlendColorBurn },
- { "HardLight", gfxBlendHardLight },
- { "SoftLight", gfxBlendSoftLight },
- { "Difference", gfxBlendDifference },
- { "Exclusion", gfxBlendExclusion },
- { "Hue", gfxBlendHue },
- { "Saturation", gfxBlendSaturation },
- { "Color", gfxBlendColor },
- { "Luminosity", gfxBlendLuminosity }
-};
-
-#define nGfxBlendModeNames \
- ((int)((sizeof(gfxBlendModeNames) / sizeof(GfxBlendModeInfo))))
-
-//------------------------------------------------------------------------
-
-// NB: This must match the GfxColorSpaceMode enum defined in
-// GfxState.h
-static char *gfxColorSpaceModeNames[] = {
- "DeviceGray",
- "CalGray",
- "DeviceRGB",
- "CalRGB",
- "DeviceCMYK",
- "Lab",
- "ICCBased",
- "Indexed",
- "Separation",
- "DeviceN",
- "Pattern"
-};
-
-#define nGfxColorSpaceModes ((sizeof(gfxColorSpaceModeNames) / sizeof(char *)))
-
-//------------------------------------------------------------------------
-// GfxColorSpace
-//------------------------------------------------------------------------
-
-GfxColorSpace::GfxColorSpace() {
-}
-
-GfxColorSpace::~GfxColorSpace() {
-}
-
-GfxColorSpace *GfxColorSpace::parse(Object *csObj) {
- GfxColorSpace *cs;
- Object obj1;
-
- cs = NULL;
- if (csObj->isName()) {
- if (csObj->isName("DeviceGray") || csObj->isName("G")) {
- cs = new GfxDeviceGrayColorSpace();
- } else if (csObj->isName("DeviceRGB") || csObj->isName("RGB")) {
- cs = new GfxDeviceRGBColorSpace();
- } else if (csObj->isName("DeviceCMYK") || csObj->isName("CMYK")) {
- cs = new GfxDeviceCMYKColorSpace();
- } else if (csObj->isName("Pattern")) {
- cs = new GfxPatternColorSpace(NULL);
- } else {
- error(-1, "Bad color space '%s'", csObj->getName());
- }
- } else if (csObj->isArray()) {
- csObj->arrayGet(0, &obj1);
- if (obj1.isName("DeviceGray") || obj1.isName("G")) {
- cs = new GfxDeviceGrayColorSpace();
- } else if (obj1.isName("DeviceRGB") || obj1.isName("RGB")) {
- cs = new GfxDeviceRGBColorSpace();
- } else if (obj1.isName("DeviceCMYK") || obj1.isName("CMYK")) {
- cs = new GfxDeviceCMYKColorSpace();
- } else if (obj1.isName("CalGray")) {
- cs = GfxCalGrayColorSpace::parse(csObj->getArray());
- } else if (obj1.isName("CalRGB")) {
- cs = GfxCalRGBColorSpace::parse(csObj->getArray());
- } else if (obj1.isName("Lab")) {
- cs = GfxLabColorSpace::parse(csObj->getArray());
- } else if (obj1.isName("ICCBased")) {
- cs = GfxICCBasedColorSpace::parse(csObj->getArray());
- } else if (obj1.isName("Indexed") || obj1.isName("I")) {
- cs = GfxIndexedColorSpace::parse(csObj->getArray());
- } else if (obj1.isName("Separation")) {
- cs = GfxSeparationColorSpace::parse(csObj->getArray());
- } else if (obj1.isName("DeviceN")) {
- cs = GfxDeviceNColorSpace::parse(csObj->getArray());
- } else if (obj1.isName("Pattern")) {
- cs = GfxPatternColorSpace::parse(csObj->getArray());
- } else {
- error(-1, "Bad color space");
- }
- obj1.free();
- } else {
- error(-1, "Bad color space - expected name or array");
- }
- return cs;
-}
-
-void GfxColorSpace::getDefaultRanges(double *decodeLow, double *decodeRange,
- int maxImgPixel) {
- int i;
-
- for (i = 0; i < getNComps(); ++i) {
- decodeLow[i] = 0;
- decodeRange[i] = 1;
- }
-}
-
-int GfxColorSpace::getNumColorSpaceModes() {
- return nGfxColorSpaceModes;
-}
-
-char *GfxColorSpace::getColorSpaceModeName(int idx) {
- return gfxColorSpaceModeNames[idx];
-}
-
-//------------------------------------------------------------------------
-// GfxDeviceGrayColorSpace
-//------------------------------------------------------------------------
-
-GfxDeviceGrayColorSpace::GfxDeviceGrayColorSpace() {
-}
-
-GfxDeviceGrayColorSpace::~GfxDeviceGrayColorSpace() {
-}
-
-GfxColorSpace *GfxDeviceGrayColorSpace::copy() {
- return new GfxDeviceGrayColorSpace();
-}
-
-void GfxDeviceGrayColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- *gray = clip01(color->c[0]);
-}
-
-void GfxDeviceGrayColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- rgb->r = rgb->g = rgb->b = clip01(color->c[0]);
-}
-
-void GfxDeviceGrayColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- cmyk->c = cmyk->m = cmyk->y = 0;
- cmyk->k = clip01(gfxColorComp1 - color->c[0]);
-}
-
-void GfxDeviceGrayColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = 0;
-}
-
-//------------------------------------------------------------------------
-// GfxCalGrayColorSpace
-//------------------------------------------------------------------------
-
-GfxCalGrayColorSpace::GfxCalGrayColorSpace() {
- whiteX = whiteY = whiteZ = 1;
- blackX = blackY = blackZ = 0;
- gamma = 1;
-}
-
-GfxCalGrayColorSpace::~GfxCalGrayColorSpace() {
-}
-
-GfxColorSpace *GfxCalGrayColorSpace::copy() {
- GfxCalGrayColorSpace *cs;
-
- cs = new GfxCalGrayColorSpace();
- cs->whiteX = whiteX;
- cs->whiteY = whiteY;
- cs->whiteZ = whiteZ;
- cs->blackX = blackX;
- cs->blackY = blackY;
- cs->blackZ = blackZ;
- cs->gamma = gamma;
- return cs;
-}
-
-GfxColorSpace *GfxCalGrayColorSpace::parse(Array *arr) {
- GfxCalGrayColorSpace *cs;
- Object obj1, obj2, obj3;
-
- arr->get(1, &obj1);
- if (!obj1.isDict()) {
- error(-1, "Bad CalGray color space");
- obj1.free();
- return NULL;
- }
- cs = new GfxCalGrayColorSpace();
- if (obj1.dictLookup("WhitePoint", &obj2)->isArray() &&
- obj2.arrayGetLength() == 3) {
- obj2.arrayGet(0, &obj3);
- cs->whiteX = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->whiteY = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->whiteZ = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- if (obj1.dictLookup("BlackPoint", &obj2)->isArray() &&
- obj2.arrayGetLength() == 3) {
- obj2.arrayGet(0, &obj3);
- cs->blackX = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->blackY = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->blackZ = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- if (obj1.dictLookup("Gamma", &obj2)->isNum()) {
- cs->gamma = obj2.getNum();
- }
- obj2.free();
- obj1.free();
- return cs;
-}
-
-void GfxCalGrayColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- *gray = clip01(color->c[0]);
-}
-
-void GfxCalGrayColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- rgb->r = rgb->g = rgb->b = clip01(color->c[0]);
-}
-
-void GfxCalGrayColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- cmyk->c = cmyk->m = cmyk->y = 0;
- cmyk->k = clip01(gfxColorComp1 - color->c[0]);
-}
-
-void GfxCalGrayColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = 0;
-}
-
-//------------------------------------------------------------------------
-// GfxDeviceRGBColorSpace
-//------------------------------------------------------------------------
-
-GfxDeviceRGBColorSpace::GfxDeviceRGBColorSpace() {
-}
-
-GfxDeviceRGBColorSpace::~GfxDeviceRGBColorSpace() {
-}
-
-GfxColorSpace *GfxDeviceRGBColorSpace::copy() {
- return new GfxDeviceRGBColorSpace();
-}
-
-void GfxDeviceRGBColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- *gray = clip01((GfxColorComp)(0.3 * color->c[0] +
- 0.59 * color->c[1] +
- 0.11 * color->c[2] + 0.5));
-}
-
-void GfxDeviceRGBColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- rgb->r = clip01(color->c[0]);
- rgb->g = clip01(color->c[1]);
- rgb->b = clip01(color->c[2]);
-}
-
-void GfxDeviceRGBColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- GfxColorComp c, m, y, k;
-
- c = clip01(gfxColorComp1 - color->c[0]);
- m = clip01(gfxColorComp1 - color->c[1]);
- y = clip01(gfxColorComp1 - color->c[2]);
- k = c;
- if (m < k) {
- k = m;
- }
- if (y < k) {
- k = y;
- }
- cmyk->c = c - k;
- cmyk->m = m - k;
- cmyk->y = y - k;
- cmyk->k = k;
-}
-
-void GfxDeviceRGBColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = 0;
- color->c[1] = 0;
- color->c[2] = 0;
-}
-
-//------------------------------------------------------------------------
-// GfxCalRGBColorSpace
-//------------------------------------------------------------------------
-
-GfxCalRGBColorSpace::GfxCalRGBColorSpace() {
- whiteX = whiteY = whiteZ = 1;
- blackX = blackY = blackZ = 0;
- gammaR = gammaG = gammaB = 1;
- mat[0] = 1; mat[1] = 0; mat[2] = 0;
- mat[3] = 0; mat[4] = 1; mat[5] = 0;
- mat[6] = 0; mat[7] = 0; mat[8] = 1;
-}
-
-GfxCalRGBColorSpace::~GfxCalRGBColorSpace() {
-}
-
-GfxColorSpace *GfxCalRGBColorSpace::copy() {
- GfxCalRGBColorSpace *cs;
- int i;
-
- cs = new GfxCalRGBColorSpace();
- cs->whiteX = whiteX;
- cs->whiteY = whiteY;
- cs->whiteZ = whiteZ;
- cs->blackX = blackX;
- cs->blackY = blackY;
- cs->blackZ = blackZ;
- cs->gammaR = gammaR;
- cs->gammaG = gammaG;
- cs->gammaB = gammaB;
- for (i = 0; i < 9; ++i) {
- cs->mat[i] = mat[i];
- }
- return cs;
-}
-
-GfxColorSpace *GfxCalRGBColorSpace::parse(Array *arr) {
- GfxCalRGBColorSpace *cs;
- Object obj1, obj2, obj3;
- int i;
-
- arr->get(1, &obj1);
- if (!obj1.isDict()) {
- error(-1, "Bad CalRGB color space");
- obj1.free();
- return NULL;
- }
- cs = new GfxCalRGBColorSpace();
- if (obj1.dictLookup("WhitePoint", &obj2)->isArray() &&
- obj2.arrayGetLength() == 3) {
- obj2.arrayGet(0, &obj3);
- cs->whiteX = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->whiteY = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->whiteZ = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- if (obj1.dictLookup("BlackPoint", &obj2)->isArray() &&
- obj2.arrayGetLength() == 3) {
- obj2.arrayGet(0, &obj3);
- cs->blackX = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->blackY = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->blackZ = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- if (obj1.dictLookup("Gamma", &obj2)->isArray() &&
- obj2.arrayGetLength() == 3) {
- obj2.arrayGet(0, &obj3);
- cs->gammaR = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->gammaG = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->gammaB = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- if (obj1.dictLookup("Matrix", &obj2)->isArray() &&
- obj2.arrayGetLength() == 9) {
- for (i = 0; i < 9; ++i) {
- obj2.arrayGet(i, &obj3);
- cs->mat[i] = obj3.getNum();
- obj3.free();
- }
- }
- obj2.free();
- obj1.free();
- return cs;
-}
-
-void GfxCalRGBColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- *gray = clip01((GfxColorComp)(0.299 * color->c[0] +
- 0.587 * color->c[1] +
- 0.114 * color->c[2] + 0.5));
-}
-
-void GfxCalRGBColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- rgb->r = clip01(color->c[0]);
- rgb->g = clip01(color->c[1]);
- rgb->b = clip01(color->c[2]);
-}
-
-void GfxCalRGBColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- GfxColorComp c, m, y, k;
-
- c = clip01(gfxColorComp1 - color->c[0]);
- m = clip01(gfxColorComp1 - color->c[1]);
- y = clip01(gfxColorComp1 - color->c[2]);
- k = c;
- if (m < k) {
- k = m;
- }
- if (y < k) {
- k = y;
- }
- cmyk->c = c - k;
- cmyk->m = m - k;
- cmyk->y = y - k;
- cmyk->k = k;
-}
-
-void GfxCalRGBColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = 0;
- color->c[1] = 0;
- color->c[2] = 0;
-}
-
-//------------------------------------------------------------------------
-// GfxDeviceCMYKColorSpace
-//------------------------------------------------------------------------
-
-GfxDeviceCMYKColorSpace::GfxDeviceCMYKColorSpace() {
-}
-
-GfxDeviceCMYKColorSpace::~GfxDeviceCMYKColorSpace() {
-}
-
-GfxColorSpace *GfxDeviceCMYKColorSpace::copy() {
- return new GfxDeviceCMYKColorSpace();
-}
-
-void GfxDeviceCMYKColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- *gray = clip01((GfxColorComp)(gfxColorComp1 - color->c[3]
- - 0.3 * color->c[0]
- - 0.59 * color->c[1]
- - 0.11 * color->c[2] + 0.5));
-}
-
-void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- double c, m, y, k, c1, m1, y1, k1, r, g, b, x;
-
- c = colToDbl(color->c[0]);
- m = colToDbl(color->c[1]);
- y = colToDbl(color->c[2]);
- k = colToDbl(color->c[3]);
- c1 = 1 - c;
- m1 = 1 - m;
- y1 = 1 - y;
- k1 = 1 - k;
- // this is a matrix multiplication, unrolled for performance
- // C M Y K
- x = c1 * m1 * y1 * k1; // 0 0 0 0
- r = g = b = x;
- x = c1 * m1 * y1 * k; // 0 0 0 1
- r += 0.1373 * x;
- g += 0.1216 * x;
- b += 0.1255 * x;
- x = c1 * m1 * y * k1; // 0 0 1 0
- r += x;
- g += 0.9490 * x;
- x = c1 * m1 * y * k; // 0 0 1 1
- r += 0.1098 * x;
- g += 0.1020 * x;
- x = c1 * m * y1 * k1; // 0 1 0 0
- r += 0.9255 * x;
- b += 0.5490 * x;
- x = c1 * m * y1 * k; // 0 1 0 1
- r += 0.1412 * x;
- x = c1 * m * y * k1; // 0 1 1 0
- r += 0.9294 * x;
- g += 0.1098 * x;
- b += 0.1412 * x;
- x = c1 * m * y * k; // 0 1 1 1
- r += 0.1333 * x;
- x = c * m1 * y1 * k1; // 1 0 0 0
- g += 0.6784 * x;
- b += 0.9373 * x;
- x = c * m1 * y1 * k; // 1 0 0 1
- g += 0.0588 * x;
- b += 0.1412 * x;
- x = c * m1 * y * k1; // 1 0 1 0
- g += 0.6510 * x;
- b += 0.3137 * x;
- x = c * m1 * y * k; // 1 0 1 1
- g += 0.0745 * x;
- x = c * m * y1 * k1; // 1 1 0 0
- r += 0.1804 * x;
- g += 0.1922 * x;
- b += 0.5725 * x;
- x = c * m * y1 * k; // 1 1 0 1
- b += 0.0078 * x;
- x = c * m * y * k1; // 1 1 1 0
- r += 0.2118 * x;
- g += 0.2119 * x;
- b += 0.2235 * x;
- rgb->r = clip01(dblToCol(r));
- rgb->g = clip01(dblToCol(g));
- rgb->b = clip01(dblToCol(b));
-}
-
-void GfxDeviceCMYKColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- cmyk->c = clip01(color->c[0]);
- cmyk->m = clip01(color->c[1]);
- cmyk->y = clip01(color->c[2]);
- cmyk->k = clip01(color->c[3]);
-}
-
-void GfxDeviceCMYKColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = 0;
- color->c[1] = 0;
- color->c[2] = 0;
- color->c[3] = gfxColorComp1;
-}
-
-//------------------------------------------------------------------------
-// GfxLabColorSpace
-//------------------------------------------------------------------------
-
-// This is the inverse of MatrixLMN in Example 4.10 from the PostScript
-// Language Reference, Third Edition.
-static double xyzrgb[3][3] = {
- { 3.240449, -1.537136, -0.498531 },
- { -0.969265, 1.876011, 0.041556 },
- { 0.055643, -0.204026, 1.057229 }
-};
-
-GfxLabColorSpace::GfxLabColorSpace() {
- whiteX = whiteY = whiteZ = 1;
- blackX = blackY = blackZ = 0;
- aMin = bMin = -100;
- aMax = bMax = 100;
-}
-
-GfxLabColorSpace::~GfxLabColorSpace() {
-}
-
-GfxColorSpace *GfxLabColorSpace::copy() {
- GfxLabColorSpace *cs;
-
- cs = new GfxLabColorSpace();
- cs->whiteX = whiteX;
- cs->whiteY = whiteY;
- cs->whiteZ = whiteZ;
- cs->blackX = blackX;
- cs->blackY = blackY;
- cs->blackZ = blackZ;
- cs->aMin = aMin;
- cs->aMax = aMax;
- cs->bMin = bMin;
- cs->bMax = bMax;
- cs->kr = kr;
- cs->kg = kg;
- cs->kb = kb;
- return cs;
-}
-
-GfxColorSpace *GfxLabColorSpace::parse(Array *arr) {
- GfxLabColorSpace *cs;
- Object obj1, obj2, obj3;
-
- arr->get(1, &obj1);
- if (!obj1.isDict()) {
- error(-1, "Bad Lab color space");
- obj1.free();
- return NULL;
- }
- cs = new GfxLabColorSpace();
- if (obj1.dictLookup("WhitePoint", &obj2)->isArray() &&
- obj2.arrayGetLength() == 3) {
- obj2.arrayGet(0, &obj3);
- cs->whiteX = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->whiteY = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->whiteZ = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- if (obj1.dictLookup("BlackPoint", &obj2)->isArray() &&
- obj2.arrayGetLength() == 3) {
- obj2.arrayGet(0, &obj3);
- cs->blackX = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->blackY = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->blackZ = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- if (obj1.dictLookup("Range", &obj2)->isArray() &&
- obj2.arrayGetLength() == 4) {
- obj2.arrayGet(0, &obj3);
- cs->aMin = obj3.getNum();
- obj3.free();
- obj2.arrayGet(1, &obj3);
- cs->aMax = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2, &obj3);
- cs->bMin = obj3.getNum();
- obj3.free();
- obj2.arrayGet(3, &obj3);
- cs->bMax = obj3.getNum();
- obj3.free();
- }
- obj2.free();
- obj1.free();
-
- cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX +
- xyzrgb[0][1] * cs->whiteY +
- xyzrgb[0][2] * cs->whiteZ);
- cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX +
- xyzrgb[1][1] * cs->whiteY +
- xyzrgb[1][2] * cs->whiteZ);
- cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX +
- xyzrgb[2][1] * cs->whiteY +
- xyzrgb[2][2] * cs->whiteZ);
-
- return cs;
-}
-
-void GfxLabColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- GfxRGB rgb;
-
- getRGB(color, &rgb);
- *gray = clip01((GfxColorComp)(0.299 * rgb.r +
- 0.587 * rgb.g +
- 0.114 * rgb.b + 0.5));
-}
-
-void GfxLabColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- double X, Y, Z;
- double t1, t2;
- double r, g, b;
-
- // convert L*a*b* to CIE 1931 XYZ color space
- t1 = (colToDbl(color->c[0]) + 16) / 116;
- t2 = t1 + colToDbl(color->c[1]) / 500;
- if (t2 >= (6.0 / 29.0)) {
- X = t2 * t2 * t2;
- } else {
- X = (108.0 / 841.0) * (t2 - (4.0 / 29.0));
- }
- X *= whiteX;
- if (t1 >= (6.0 / 29.0)) {
- Y = t1 * t1 * t1;
- } else {
- Y = (108.0 / 841.0) * (t1 - (4.0 / 29.0));
- }
- Y *= whiteY;
- t2 = t1 - colToDbl(color->c[2]) / 200;
- if (t2 >= (6.0 / 29.0)) {
- Z = t2 * t2 * t2;
- } else {
- Z = (108.0 / 841.0) * (t2 - (4.0 / 29.0));
- }
- Z *= whiteZ;
-
- // convert XYZ to RGB, including gamut mapping and gamma correction
- r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z;
- g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z;
- b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z;
- rgb->r = dblToCol(pow(clip01(r * kr), 0.5));
- rgb->g = dblToCol(pow(clip01(g * kg), 0.5));
- rgb->b = dblToCol(pow(clip01(b * kb), 0.5));
-}
-
-void GfxLabColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- GfxRGB rgb;
- GfxColorComp c, m, y, k;
-
- getRGB(color, &rgb);
- c = clip01(gfxColorComp1 - rgb.r);
- m = clip01(gfxColorComp1 - rgb.g);
- y = clip01(gfxColorComp1 - rgb.b);
- k = c;
- if (m < k) {
- k = m;
- }
- if (y < k) {
- k = y;
- }
- cmyk->c = c - k;
- cmyk->m = m - k;
- cmyk->y = y - k;
- cmyk->k = k;
-}
-
-void GfxLabColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = 0;
- if (aMin > 0) {
- color->c[1] = dblToCol(aMin);
- } else if (aMax < 0) {
- color->c[1] = dblToCol(aMax);
- } else {
- color->c[1] = 0;
- }
- if (bMin > 0) {
- color->c[2] = dblToCol(bMin);
- } else if (bMax < 0) {
- color->c[2] = dblToCol(bMax);
- } else {
- color->c[2] = 0;
- }
-}
-
-void GfxLabColorSpace::getDefaultRanges(double *decodeLow, double *decodeRange,
- int maxImgPixel) {
- decodeLow[0] = 0;
- decodeRange[0] = 100;
- decodeLow[1] = aMin;
- decodeRange[1] = aMax - aMin;
- decodeLow[2] = bMin;
- decodeRange[2] = bMax - bMin;
-}
-
-//------------------------------------------------------------------------
-// GfxICCBasedColorSpace
-//------------------------------------------------------------------------
-
-GfxICCBasedColorSpace::GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA,
- Ref *iccProfileStreamA) {
- nComps = nCompsA;
- alt = altA;
- iccProfileStream = *iccProfileStreamA;
- rangeMin[0] = rangeMin[1] = rangeMin[2] = rangeMin[3] = 0;
- rangeMax[0] = rangeMax[1] = rangeMax[2] = rangeMax[3] = 1;
-}
-
-GfxICCBasedColorSpace::~GfxICCBasedColorSpace() {
- delete alt;
-}
-
-GfxColorSpace *GfxICCBasedColorSpace::copy() {
- GfxICCBasedColorSpace *cs;
- int i;
-
- cs = new GfxICCBasedColorSpace(nComps, alt->copy(), &iccProfileStream);
- for (i = 0; i < 4; ++i) {
- cs->rangeMin[i] = rangeMin[i];
- cs->rangeMax[i] = rangeMax[i];
- }
- return cs;
-}
-
-GfxColorSpace *GfxICCBasedColorSpace::parse(Array *arr) {
- GfxICCBasedColorSpace *cs;
- Ref iccProfileStreamA;
- int nCompsA;
- GfxColorSpace *altA;
- Dict *dict;
- Object obj1, obj2, obj3;
- int i;
-
- arr->getNF(1, &obj1);
- if (obj1.isRef()) {
- iccProfileStreamA = obj1.getRef();
- } else {
- iccProfileStreamA.num = 0;
- iccProfileStreamA.gen = 0;
- }
- obj1.free();
- arr->get(1, &obj1);
- if (!obj1.isStream()) {
- error(-1, "Bad ICCBased color space (stream)");
- obj1.free();
- return NULL;
- }
- dict = obj1.streamGetDict();
- if (!dict->lookup("N", &obj2)->isInt()) {
- error(-1, "Bad ICCBased color space (N)");
- obj2.free();
- obj1.free();
- return NULL;
- }
- nCompsA = obj2.getInt();
- obj2.free();
- if (nCompsA > gfxColorMaxComps) {
- error(-1, "ICCBased color space with too many (%d > %d) components",
- nCompsA, gfxColorMaxComps);
- nCompsA = gfxColorMaxComps;
- }
- if (dict->lookup("Alternate", &obj2)->isNull() ||
- !(altA = GfxColorSpace::parse(&obj2))) {
- switch (nCompsA) {
- case 1:
- altA = new GfxDeviceGrayColorSpace();
- break;
- case 3:
- altA = new GfxDeviceRGBColorSpace();
- break;
- case 4:
- altA = new GfxDeviceCMYKColorSpace();
- break;
- default:
- error(-1, "Bad ICCBased color space - invalid N");
- obj2.free();
- obj1.free();
- return NULL;
- }
- }
- obj2.free();
- cs = new GfxICCBasedColorSpace(nCompsA, altA, &iccProfileStreamA);
- if (dict->lookup("Range", &obj2)->isArray() &&
- obj2.arrayGetLength() == 2 * nCompsA) {
- for (i = 0; i < nCompsA; ++i) {
- obj2.arrayGet(2*i, &obj3);
- cs->rangeMin[i] = obj3.getNum();
- obj3.free();
- obj2.arrayGet(2*i+1, &obj3);
- cs->rangeMax[i] = obj3.getNum();
- obj3.free();
- }
- }
- obj2.free();
- obj1.free();
- return cs;
-}
-
-void GfxICCBasedColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- alt->getGray(color, gray);
-}
-
-void GfxICCBasedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- alt->getRGB(color, rgb);
-}
-
-void GfxICCBasedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- alt->getCMYK(color, cmyk);
-}
-
-void GfxICCBasedColorSpace::getDefaultColor(GfxColor *color) {
- int i;
-
- for (i = 0; i < nComps; ++i) {
- if (rangeMin[i] > 0) {
- color->c[i] = dblToCol(rangeMin[i]);
- } else if (rangeMax[i] < 0) {
- color->c[i] = dblToCol(rangeMax[i]);
- } else {
- color->c[i] = 0;
- }
- }
-}
-
-void GfxICCBasedColorSpace::getDefaultRanges(double *decodeLow,
- double *decodeRange,
- int maxImgPixel) {
- alt->getDefaultRanges(decodeLow, decodeRange, maxImgPixel);
-
-#if 0
- // this is nominally correct, but some PDF files don't set the
- // correct ranges in the ICCBased dict
- int i;
-
- for (i = 0; i < nComps; ++i) {
- decodeLow[i] = rangeMin[i];
- decodeRange[i] = rangeMax[i] - rangeMin[i];
- }
-#endif
-}
-
-//------------------------------------------------------------------------
-// GfxIndexedColorSpace
-//------------------------------------------------------------------------
-
-GfxIndexedColorSpace::GfxIndexedColorSpace(GfxColorSpace *baseA,
- int indexHighA) {
- base = baseA;
- indexHigh = indexHighA;
- lookup = (Guchar *)gmallocn((indexHigh + 1) * base->getNComps(),
- sizeof(Guchar));
-}
-
-GfxIndexedColorSpace::~GfxIndexedColorSpace() {
- delete base;
- gfree(lookup);
-}
-
-GfxColorSpace *GfxIndexedColorSpace::copy() {
- GfxIndexedColorSpace *cs;
-
- cs = new GfxIndexedColorSpace(base->copy(), indexHigh);
- memcpy(cs->lookup, lookup,
- (indexHigh + 1) * base->getNComps() * sizeof(Guchar));
- return cs;
-}
-
-GfxColorSpace *GfxIndexedColorSpace::parse(Array *arr) {
- GfxIndexedColorSpace *cs;
- GfxColorSpace *baseA;
- int indexHighA;
- Object obj1;
- int x;
- char *s;
- int n, i, j;
-
- if (arr->getLength() != 4) {
- error(-1, "Bad Indexed color space");
- goto err1;
- }
- arr->get(1, &obj1);
- if (!(baseA = GfxColorSpace::parse(&obj1))) {
- error(-1, "Bad Indexed color space (base color space)");
- goto err2;
- }
- obj1.free();
- if (!arr->get(2, &obj1)->isInt()) {
- error(-1, "Bad Indexed color space (hival)");
- delete baseA;
- goto err2;
- }
- indexHighA = obj1.getInt();
- if (indexHighA < 0 || indexHighA > 255) {
- // the PDF spec requires indexHigh to be in [0,255] -- allowing
- // values larger than 255 creates a security hole: if nComps *
- // indexHigh is greater than 2^31, the loop below may overwrite
- // past the end of the array
- error(-1, "Bad Indexed color space (invalid indexHigh value)");
- delete baseA;
- goto err2;
- }
- obj1.free();
- cs = new GfxIndexedColorSpace(baseA, indexHighA);
- arr->get(3, &obj1);
- n = baseA->getNComps();
- if (obj1.isStream()) {
- obj1.streamReset();
- for (i = 0; i <= indexHighA; ++i) {
- for (j = 0; j < n; ++j) {
- if ((x = obj1.streamGetChar()) == EOF) {
- error(-1, "Bad Indexed color space (lookup table stream too short)");
- goto err3;
- }
- cs->lookup[i*n + j] = (Guchar)x;
- }
- }
- obj1.streamClose();
- } else if (obj1.isString()) {
- if (obj1.getString()->getLength() < (indexHighA + 1) * n) {
- error(-1, "Bad Indexed color space (lookup table string too short)");
- goto err3;
- }
- s = obj1.getString()->getCString();
- for (i = 0; i <= indexHighA; ++i) {
- for (j = 0; j < n; ++j) {
- cs->lookup[i*n + j] = (Guchar)*s++;
- }
- }
- } else {
- error(-1, "Bad Indexed color space (lookup table)");
- goto err3;
- }
- obj1.free();
- return cs;
-
- err3:
- delete cs;
- err2:
- obj1.free();
- err1:
- return NULL;
-}
-
-GfxColor *GfxIndexedColorSpace::mapColorToBase(GfxColor *color,
- GfxColor *baseColor) {
- Guchar *p;
- double low[gfxColorMaxComps], range[gfxColorMaxComps];
- int n, i;
-
- n = base->getNComps();
- base->getDefaultRanges(low, range, indexHigh);
- p = &lookup[(int)(colToDbl(color->c[0]) + 0.5) * n];
- for (i = 0; i < n; ++i) {
- baseColor->c[i] = dblToCol(low[i] + (p[i] / 255.0) * range[i]);
- }
- return baseColor;
-}
-
-void GfxIndexedColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- GfxColor color2;
-
- base->getGray(mapColorToBase(color, &color2), gray);
-}
-
-void GfxIndexedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- GfxColor color2;
-
- base->getRGB(mapColorToBase(color, &color2), rgb);
-}
-
-void GfxIndexedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- GfxColor color2;
-
- base->getCMYK(mapColorToBase(color, &color2), cmyk);
-}
-
-void GfxIndexedColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = 0;
-}
-
-void GfxIndexedColorSpace::getDefaultRanges(double *decodeLow,
- double *decodeRange,
- int maxImgPixel) {
- decodeLow[0] = 0;
- decodeRange[0] = maxImgPixel;
-}
-
-//------------------------------------------------------------------------
-// GfxSeparationColorSpace
-//------------------------------------------------------------------------
-
-GfxSeparationColorSpace::GfxSeparationColorSpace(GString *nameA,
- GfxColorSpace *altA,
- Function *funcA) {
- name = nameA;
- alt = altA;
- func = funcA;
- nonMarking = !name->cmp("None");
-}
-
-GfxSeparationColorSpace::~GfxSeparationColorSpace() {
- delete name;
- delete alt;
- delete func;
-}
-
-GfxColorSpace *GfxSeparationColorSpace::copy() {
- return new GfxSeparationColorSpace(name->copy(), alt->copy(), func->copy());
-}
-
-//~ handle the 'All' and 'None' colorants
-GfxColorSpace *GfxSeparationColorSpace::parse(Array *arr) {
- GfxSeparationColorSpace *cs;
- GString *nameA;
- GfxColorSpace *altA;
- Function *funcA;
- Object obj1;
-
- if (arr->getLength() != 4) {
- error(-1, "Bad Separation color space");
- goto err1;
- }
- if (!arr->get(1, &obj1)->isName()) {
- error(-1, "Bad Separation color space (name)");
- goto err2;
- }
- nameA = new GString(obj1.getName());
- obj1.free();
- arr->get(2, &obj1);
- if (!(altA = GfxColorSpace::parse(&obj1))) {
- error(-1, "Bad Separation color space (alternate color space)");
- goto err3;
- }
- obj1.free();
- arr->get(3, &obj1);
- if (!(funcA = Function::parse(&obj1))) {
- goto err4;
- }
- obj1.free();
- cs = new GfxSeparationColorSpace(nameA, altA, funcA);
- return cs;
-
- err4:
- delete altA;
- err3:
- delete nameA;
- err2:
- obj1.free();
- err1:
- return NULL;
-}
-
-void GfxSeparationColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- double x;
- double c[gfxColorMaxComps];
- GfxColor color2;
- int i;
-
- x = colToDbl(color->c[0]);
- func->transform(&x, c);
- for (i = 0; i < alt->getNComps(); ++i) {
- color2.c[i] = dblToCol(c[i]);
- }
- alt->getGray(&color2, gray);
-}
-
-void GfxSeparationColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- double x;
- double c[gfxColorMaxComps];
- GfxColor color2;
- int i;
-
- x = colToDbl(color->c[0]);
- func->transform(&x, c);
- for (i = 0; i < alt->getNComps(); ++i) {
- color2.c[i] = dblToCol(c[i]);
- }
- alt->getRGB(&color2, rgb);
-}
-
-void GfxSeparationColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- double x;
- double c[gfxColorMaxComps];
- GfxColor color2;
- int i;
-
- x = colToDbl(color->c[0]);
- func->transform(&x, c);
- for (i = 0; i < alt->getNComps(); ++i) {
- color2.c[i] = dblToCol(c[i]);
- }
- alt->getCMYK(&color2, cmyk);
-}
-
-void GfxSeparationColorSpace::getDefaultColor(GfxColor *color) {
- color->c[0] = gfxColorComp1;
-}
-
-//------------------------------------------------------------------------
-// GfxDeviceNColorSpace
-//------------------------------------------------------------------------
-
-GfxDeviceNColorSpace::GfxDeviceNColorSpace(int nCompsA,
- GfxColorSpace *altA,
- Function *funcA) {
- nComps = nCompsA;
- alt = altA;
- func = funcA;
- nonMarking = gFalse;
-}
-
-GfxDeviceNColorSpace::~GfxDeviceNColorSpace() {
- int i;
-
- for (i = 0; i < nComps; ++i) {
- delete names[i];
- }
- delete alt;
- delete func;
-}
-
-GfxColorSpace *GfxDeviceNColorSpace::copy() {
- GfxDeviceNColorSpace *cs;
- int i;
-
- cs = new GfxDeviceNColorSpace(nComps, alt->copy(), func->copy());
- for (i = 0; i < nComps; ++i) {
- cs->names[i] = names[i]->copy();
- }
- cs->nonMarking = nonMarking;
- return cs;
-}
-
-//~ handle the 'None' colorant
-GfxColorSpace *GfxDeviceNColorSpace::parse(Array *arr) {
- GfxDeviceNColorSpace *cs;
- int nCompsA;
- GString *namesA[gfxColorMaxComps];
- GfxColorSpace *altA;
- Function *funcA;
- Object obj1, obj2;
- int i;
-
- if (arr->getLength() != 4 && arr->getLength() != 5) {
- error(-1, "Bad DeviceN color space");
- goto err1;
- }
- if (!arr->get(1, &obj1)->isArray()) {
- error(-1, "Bad DeviceN color space (names)");
- goto err2;
- }
- nCompsA = obj1.arrayGetLength();
- if (nCompsA > gfxColorMaxComps) {
- error(-1, "DeviceN color space with too many (%d > %d) components",
- nCompsA, gfxColorMaxComps);
- nCompsA = gfxColorMaxComps;
- }
- for (i = 0; i < nCompsA; ++i) {
- if (!obj1.arrayGet(i, &obj2)->isName()) {
- error(-1, "Bad DeviceN color space (names)");
- obj2.free();
- goto err2;
- }
- namesA[i] = new GString(obj2.getName());
- obj2.free();
- }
- obj1.free();
- arr->get(2, &obj1);
- if (!(altA = GfxColorSpace::parse(&obj1))) {
- error(-1, "Bad DeviceN color space (alternate color space)");
- goto err3;
- }
- obj1.free();
- arr->get(3, &obj1);
- if (!(funcA = Function::parse(&obj1))) {
- goto err4;
- }
- obj1.free();
- cs = new GfxDeviceNColorSpace(nCompsA, altA, funcA);
- cs->nonMarking = gTrue;
- for (i = 0; i < nCompsA; ++i) {
- cs->names[i] = namesA[i];
- if (namesA[i]->cmp("None")) {
- cs->nonMarking = gFalse;
- }
- }
- return cs;
-
- err4:
- delete altA;
- err3:
- for (i = 0; i < nCompsA; ++i) {
- delete namesA[i];
- }
- err2:
- obj1.free();
- err1:
- return NULL;
-}
-
-void GfxDeviceNColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- double x[gfxColorMaxComps], c[gfxColorMaxComps];
- GfxColor color2;
- int i;
-
- for (i = 0; i < nComps; ++i) {
- x[i] = colToDbl(color->c[i]);
- }
- func->transform(x, c);
- for (i = 0; i < alt->getNComps(); ++i) {
- color2.c[i] = dblToCol(c[i]);
- }
- alt->getGray(&color2, gray);
-}
-
-void GfxDeviceNColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- double x[gfxColorMaxComps], c[gfxColorMaxComps];
- GfxColor color2;
- int i;
-
- for (i = 0; i < nComps; ++i) {
- x[i] = colToDbl(color->c[i]);
- }
- func->transform(x, c);
- for (i = 0; i < alt->getNComps(); ++i) {
- color2.c[i] = dblToCol(c[i]);
- }
- alt->getRGB(&color2, rgb);
-}
-
-void GfxDeviceNColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- double x[gfxColorMaxComps], c[gfxColorMaxComps];
- GfxColor color2;
- int i;
-
- for (i = 0; i < nComps; ++i) {
- x[i] = colToDbl(color->c[i]);
- }
- func->transform(x, c);
- for (i = 0; i < alt->getNComps(); ++i) {
- color2.c[i] = dblToCol(c[i]);
- }
- alt->getCMYK(&color2, cmyk);
-}
-
-void GfxDeviceNColorSpace::getDefaultColor(GfxColor *color) {
- int i;
-
- for (i = 0; i < nComps; ++i) {
- color->c[i] = gfxColorComp1;
- }
-}
-
-//------------------------------------------------------------------------
-// GfxPatternColorSpace
-//------------------------------------------------------------------------
-
-GfxPatternColorSpace::GfxPatternColorSpace(GfxColorSpace *underA) {
- under = underA;
-}
-
-GfxPatternColorSpace::~GfxPatternColorSpace() {
- if (under) {
- delete under;
- }
-}
-
-GfxColorSpace *GfxPatternColorSpace::copy() {
- return new GfxPatternColorSpace(under ? under->copy() :
- (GfxColorSpace *)NULL);
-}
-
-GfxColorSpace *GfxPatternColorSpace::parse(Array *arr) {
- GfxPatternColorSpace *cs;
- GfxColorSpace *underA;
- Object obj1;
-
- if (arr->getLength() != 1 && arr->getLength() != 2) {
- error(-1, "Bad Pattern color space");
- return NULL;
- }
- underA = NULL;
- if (arr->getLength() == 2) {
- arr->get(1, &obj1);
- if (!(underA = GfxColorSpace::parse(&obj1))) {
- error(-1, "Bad Pattern color space (underlying color space)");
- obj1.free();
- return NULL;
- }
- obj1.free();
- }
- cs = new GfxPatternColorSpace(underA);
- return cs;
-}
-
-void GfxPatternColorSpace::getGray(GfxColor *color, GfxGray *gray) {
- *gray = 0;
-}
-
-void GfxPatternColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) {
- rgb->r = rgb->g = rgb->b = 0;
-}
-
-void GfxPatternColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) {
- cmyk->c = cmyk->m = cmyk->y = 0;
- cmyk->k = 1;
-}
-
-void GfxPatternColorSpace::getDefaultColor(GfxColor *color) {
- // not used
-}
-
-//------------------------------------------------------------------------
-// Pattern
-//------------------------------------------------------------------------
-
-GfxPattern::GfxPattern(int typeA) {
- type = typeA;
-}
-
-GfxPattern::~GfxPattern() {
-}
-
-GfxPattern *GfxPattern::parse(Object *obj) {
- GfxPattern *pattern;
- Object obj1;
-
- if (obj->isDict()) {
- obj->dictLookup("PatternType", &obj1);
- } else if (obj->isStream()) {
- obj->streamGetDict()->lookup("PatternType", &obj1);
- } else {
- return NULL;
- }
- pattern = NULL;
- if (obj1.isInt() && obj1.getInt() == 1) {
- pattern = GfxTilingPattern::parse(obj);
- } else if (obj1.isInt() && obj1.getInt() == 2) {
- pattern = GfxShadingPattern::parse(obj);
- }
- obj1.free();
- return pattern;
-}
-
-//------------------------------------------------------------------------
-// GfxTilingPattern
-//------------------------------------------------------------------------
-
-GfxTilingPattern *GfxTilingPattern::parse(Object *patObj) {
- GfxTilingPattern *pat;
- Dict *dict;
- int paintTypeA, tilingTypeA;
- double bboxA[4], matrixA[6];
- double xStepA, yStepA;
- Object resDictA;
- Object obj1, obj2;
- int i;
-
- if (!patObj->isStream()) {
- return NULL;
- }
- dict = patObj->streamGetDict();
-
- if (dict->lookup("PaintType", &obj1)->isInt()) {
- paintTypeA = obj1.getInt();
- } else {
- paintTypeA = 1;
- error(-1, "Invalid or missing PaintType in pattern");
- }
- obj1.free();
- if (dict->lookup("TilingType", &obj1)->isInt()) {
- tilingTypeA = obj1.getInt();
- } else {
- tilingTypeA = 1;
- error(-1, "Invalid or missing TilingType in pattern");
- }
- obj1.free();
- bboxA[0] = bboxA[1] = 0;
- bboxA[2] = bboxA[3] = 1;
- if (dict->lookup("BBox", &obj1)->isArray() &&
- obj1.arrayGetLength() == 4) {
- for (i = 0; i < 4; ++i) {
- if (obj1.arrayGet(i, &obj2)->isNum()) {
- bboxA[i] = obj2.getNum();
- }
- obj2.free();
- }
- } else {
- error(-1, "Invalid or missing BBox in pattern");
- }
- obj1.free();
- if (dict->lookup("XStep", &obj1)->isNum()) {
- xStepA = obj1.getNum();
- } else {
- xStepA = 1;
- error(-1, "Invalid or missing XStep in pattern");
- }
- obj1.free();
- if (dict->lookup("YStep", &obj1)->isNum()) {
- yStepA = obj1.getNum();
- } else {
- yStepA = 1;
- error(-1, "Invalid or missing YStep in pattern");
- }
- obj1.free();
- if (!dict->lookup("Resources", &resDictA)->isDict()) {
- resDictA.free();
- resDictA.initNull();
- error(-1, "Invalid or missing Resources in pattern");
- }
- matrixA[0] = 1; matrixA[1] = 0;
- matrixA[2] = 0; matrixA[3] = 1;
- matrixA[4] = 0; matrixA[5] = 0;
- if (dict->lookup("Matrix", &obj1)->isArray() &&
- obj1.arrayGetLength() == 6) {
- for (i = 0; i < 6; ++i) {
- if (obj1.arrayGet(i, &obj2)->isNum()) {
- matrixA[i] = obj2.getNum();
- }
- obj2.free();
- }
- }
- obj1.free();
-
- pat = new GfxTilingPattern(paintTypeA, tilingTypeA, bboxA, xStepA, yStepA,
- &resDictA, matrixA, patObj);
- resDictA.free();
- return pat;
-}
-
-GfxTilingPattern::GfxTilingPattern(int paintTypeA, int tilingTypeA,
- double *bboxA, double xStepA, double yStepA,
- Object *resDictA, double *matrixA,
- Object *contentStreamA):
- GfxPattern(1)
-{
- int i;
-
- paintType = paintTypeA;
- tilingType = tilingTypeA;
- for (i = 0; i < 4; ++i) {
- bbox[i] = bboxA[i];
- }
- xStep = xStepA;
- yStep = yStepA;
- resDictA->copy(&resDict);
- for (i = 0; i < 6; ++i) {
- matrix[i] = matrixA[i];
- }
- contentStreamA->copy(&contentStream);
-}
-
-GfxTilingPattern::~GfxTilingPattern() {
- resDict.free();
- contentStream.free();
-}
-
-GfxPattern *GfxTilingPattern::copy() {
- return new GfxTilingPattern(paintType, tilingType, bbox, xStep, yStep,
- &resDict, matrix, &contentStream);
-}
-
-//------------------------------------------------------------------------
-// GfxShadingPattern
-//------------------------------------------------------------------------
-
-GfxShadingPattern *GfxShadingPattern::parse(Object *patObj) {
- Dict *dict;
- GfxShading *shadingA;
- double matrixA[6];
- Object obj1, obj2;
- int i;
-
- if (!patObj->isDict()) {
- return NULL;
- }
- dict = patObj->getDict();
-
- dict->lookup("Shading", &obj1);
- shadingA = GfxShading::parse(&obj1);
- obj1.free();
- if (!shadingA) {
- return NULL;
- }
-
- matrixA[0] = 1; matrixA[1] = 0;
- matrixA[2] = 0; matrixA[3] = 1;
- matrixA[4] = 0; matrixA[5] = 0;
- if (dict->lookup("Matrix", &obj1)->isArray() &&
- obj1.arrayGetLength() == 6) {
- for (i = 0; i < 6; ++i) {
- if (obj1.arrayGet(i, &obj2)->isNum()) {
- matrixA[i] = obj2.getNum();
- }
- obj2.free();
- }
- }
- obj1.free();
-
- return new GfxShadingPattern(shadingA, matrixA);
-}
-
-GfxShadingPattern::GfxShadingPattern(GfxShading *shadingA, double *matrixA):
- GfxPattern(2)
-{
- int i;
-
- shading = shadingA;
- for (i = 0; i < 6; ++i) {
- matrix[i] = matrixA[i];
- }
-}
-
-GfxShadingPattern::~GfxShadingPattern() {
- delete shading;
-}
-
-GfxPattern *GfxShadingPattern::copy() {
- return new GfxShadingPattern(shading->copy(), matrix);
-}
-
-//------------------------------------------------------------------------
-// GfxShading
-//------------------------------------------------------------------------
-
-GfxShading::GfxShading(int typeA) {
- type = typeA;
- colorSpace = NULL;
-}
-
-GfxShading::GfxShading(GfxShading *shading) {
- int i;
-
- type = shading->type;
- colorSpace = shading->colorSpace->copy();
- for (i = 0; i < gfxColorMaxComps; ++i) {
- background.c[i] = shading->background.c[i];
- }
- hasBackground = shading->hasBackground;
- xMin = shading->xMin;
- yMin = shading->yMin;
- xMax = shading->xMax;
- yMax = shading->yMax;
- hasBBox = shading->hasBBox;
-}
-
-GfxShading::~GfxShading() {
- if (colorSpace) {
- delete colorSpace;
- }
-}
-
-GfxShading *GfxShading::parse(Object *obj) {
- GfxShading *shading;
- Dict *dict;
- int typeA;
- Object obj1;
-
- if (obj->isDict()) {
- dict = obj->getDict();
- } else if (obj->isStream()) {
- dict = obj->streamGetDict();
- } else {
- return NULL;
- }
-
- if (!dict->lookup("ShadingType", &obj1)->isInt()) {
- error(-1, "Invalid ShadingType in shading dictionary");
- obj1.free();
- return NULL;
- }
- typeA = obj1.getInt();
- obj1.free();
-
- switch (typeA) {
- case 1:
- shading = GfxFunctionShading::parse(dict);
- break;
- case 2:
- shading = GfxAxialShading::parse(dict);
- break;
- case 3:
- shading = GfxRadialShading::parse(dict);
- break;
- case 4:
- if (obj->isStream()) {
- shading = GfxGouraudTriangleShading::parse(4, dict, obj->getStream());
- } else {
- error(-1, "Invalid Type 4 shading object");
- goto err1;
- }
- break;
- case 5:
- if (obj->isStream()) {
- shading = GfxGouraudTriangleShading::parse(5, dict, obj->getStream());
- } else {
- error(-1, "Invalid Type 5 shading object");
- goto err1;
- }
- break;
- case 6:
- if (obj->isStream()) {
- shading = GfxPatchMeshShading::parse(6, dict, obj->getStream());
- } else {
- error(-1, "Invalid Type 6 shading object");
- goto err1;
- }
- break;
- case 7:
- if (obj->isStream()) {
- shading = GfxPatchMeshShading::parse(7, dict, obj->getStream());
- } else {
- error(-1, "Invalid Type 7 shading object");
- goto err1;
- }
- break;
- default:
- error(-1, "Unimplemented shading type %d", typeA);
- goto err1;
- }
-
- return shading;
-
- err1:
- return NULL;
-}
-
-GBool GfxShading::init(Dict *dict) {
- Object obj1, obj2;
- int i;
-
- dict->lookup("ColorSpace", &obj1);
- if (!(colorSpace = GfxColorSpace::parse(&obj1))) {
- error(-1, "Bad color space in shading dictionary");
- obj1.free();
- return gFalse;
- }
- obj1.free();
-
- for (i = 0; i < gfxColorMaxComps; ++i) {
- background.c[i] = 0;
- }
- hasBackground = gFalse;
- if (dict->lookup("Background", &obj1)->isArray()) {
- if (obj1.arrayGetLength() == colorSpace->getNComps()) {
- hasBackground = gTrue;
- for (i = 0; i < colorSpace->getNComps(); ++i) {
- background.c[i] = dblToCol(obj1.arrayGet(i, &obj2)->getNum());
- obj2.free();
- }
- } else {
- error(-1, "Bad Background in shading dictionary");
- }
- }
- obj1.free();
-
- xMin = yMin = xMax = yMax = 0;
- hasBBox = gFalse;
- if (dict->lookup("BBox", &obj1)->isArray()) {
- if (obj1.arrayGetLength() == 4) {
- hasBBox = gTrue;
- xMin = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- yMin = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- xMax = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- yMax = obj1.arrayGet(3, &obj2)->getNum();
- obj2.free();
- } else {
- error(-1, "Bad BBox in shading dictionary");
- }
- }
- obj1.free();
-
- return gTrue;
-}
-
-//------------------------------------------------------------------------
-// GfxFunctionShading
-//------------------------------------------------------------------------
-
-GfxFunctionShading::GfxFunctionShading(double x0A, double y0A,
- double x1A, double y1A,
- double *matrixA,
- Function **funcsA, int nFuncsA):
- GfxShading(1)
-{
- int i;
-
- x0 = x0A;
- y0 = y0A;
- x1 = x1A;
- y1 = y1A;
- for (i = 0; i < 6; ++i) {
- matrix[i] = matrixA[i];
- }
- nFuncs = nFuncsA;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = funcsA[i];
- }
-}
-
-GfxFunctionShading::GfxFunctionShading(GfxFunctionShading *shading):
- GfxShading(shading)
-{
- int i;
-
- x0 = shading->x0;
- y0 = shading->y0;
- x1 = shading->x1;
- y1 = shading->y1;
- for (i = 0; i < 6; ++i) {
- matrix[i] = shading->matrix[i];
- }
- nFuncs = shading->nFuncs;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = shading->funcs[i]->copy();
- }
-}
-
-GfxFunctionShading::~GfxFunctionShading() {
- int i;
-
- for (i = 0; i < nFuncs; ++i) {
- delete funcs[i];
- }
-}
-
-GfxFunctionShading *GfxFunctionShading::parse(Dict *dict) {
- GfxFunctionShading *shading;
- double x0A, y0A, x1A, y1A;
- double matrixA[6];
- Function *funcsA[gfxColorMaxComps];
- int nFuncsA;
- Object obj1, obj2;
- int i;
-
- x0A = y0A = 0;
- x1A = y1A = 1;
- if (dict->lookup("Domain", &obj1)->isArray() &&
- obj1.arrayGetLength() == 4) {
- x0A = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- y0A = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- x1A = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- y1A = obj1.arrayGet(3, &obj2)->getNum();
- obj2.free();
- }
- obj1.free();
-
- matrixA[0] = 1; matrixA[1] = 0;
- matrixA[2] = 0; matrixA[3] = 1;
- matrixA[4] = 0; matrixA[5] = 0;
- if (dict->lookup("Matrix", &obj1)->isArray() &&
- obj1.arrayGetLength() == 6) {
- matrixA[0] = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- matrixA[1] = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- matrixA[2] = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- matrixA[3] = obj1.arrayGet(3, &obj2)->getNum();
- obj2.free();
- matrixA[4] = obj1.arrayGet(4, &obj2)->getNum();
- obj2.free();
- matrixA[5] = obj1.arrayGet(5, &obj2)->getNum();
- obj2.free();
- }
- obj1.free();
-
- dict->lookup("Function", &obj1);
- if (obj1.isArray()) {
- nFuncsA = obj1.arrayGetLength();
- if (nFuncsA > gfxColorMaxComps) {
- error(-1, "Invalid Function array in shading dictionary");
- goto err1;
- }
- for (i = 0; i < nFuncsA; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!(funcsA[i] = Function::parse(&obj2))) {
- goto err2;
- }
- obj2.free();
- }
- } else {
- nFuncsA = 1;
- if (!(funcsA[0] = Function::parse(&obj1))) {
- goto err1;
- }
- }
- obj1.free();
-
- shading = new GfxFunctionShading(x0A, y0A, x1A, y1A, matrixA,
- funcsA, nFuncsA);
- if (!shading->init(dict)) {
- delete shading;
- return NULL;
- }
- return shading;
-
- err2:
- obj2.free();
- err1:
- obj1.free();
- return NULL;
-}
-
-GfxShading *GfxFunctionShading::copy() {
- return new GfxFunctionShading(this);
-}
-
-void GfxFunctionShading::getColor(double x, double y, GfxColor *color) {
- double in[2], out[gfxColorMaxComps];
- int i;
-
- // NB: there can be one function with n outputs or n functions with
- // one output each (where n = number of color components)
- for (i = 0; i < gfxColorMaxComps; ++i) {
- out[i] = 0;
- }
- in[0] = x;
- in[1] = y;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i]->transform(in, &out[i]);
- }
- for (i = 0; i < gfxColorMaxComps; ++i) {
- color->c[i] = dblToCol(out[i]);
- }
-}
-
-//------------------------------------------------------------------------
-// GfxAxialShading
-//------------------------------------------------------------------------
-
-GfxAxialShading::GfxAxialShading(double x0A, double y0A,
- double x1A, double y1A,
- double t0A, double t1A,
- Function **funcsA, int nFuncsA,
- GBool extend0A, GBool extend1A):
- GfxShading(2)
-{
- int i;
-
- x0 = x0A;
- y0 = y0A;
- x1 = x1A;
- y1 = y1A;
- t0 = t0A;
- t1 = t1A;
- nFuncs = nFuncsA;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = funcsA[i];
- }
- extend0 = extend0A;
- extend1 = extend1A;
-}
-
-GfxAxialShading::GfxAxialShading(GfxAxialShading *shading):
- GfxShading(shading)
-{
- int i;
-
- x0 = shading->x0;
- y0 = shading->y0;
- x1 = shading->x1;
- y1 = shading->y1;
- t0 = shading->t0;
- y1 = shading->t1;
- nFuncs = shading->nFuncs;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = shading->funcs[i]->copy();
- }
- extend0 = shading->extend0;
- extend1 = shading->extend1;
-}
-
-GfxAxialShading::~GfxAxialShading() {
- int i;
-
- for (i = 0; i < nFuncs; ++i) {
- delete funcs[i];
- }
-}
-
-GfxAxialShading *GfxAxialShading::parse(Dict *dict) {
- GfxAxialShading *shading;
- double x0A, y0A, x1A, y1A;
- double t0A, t1A;
- Function *funcsA[gfxColorMaxComps];
- int nFuncsA;
- GBool extend0A, extend1A;
- Object obj1, obj2;
- int i;
-
- x0A = y0A = x1A = y1A = 0;
- if (dict->lookup("Coords", &obj1)->isArray() &&
- obj1.arrayGetLength() == 4) {
- x0A = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- y0A = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- x1A = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- y1A = obj1.arrayGet(3, &obj2)->getNum();
- obj2.free();
- } else {
- error(-1, "Missing or invalid Coords in shading dictionary");
- goto err1;
- }
- obj1.free();
-
- t0A = 0;
- t1A = 1;
- if (dict->lookup("Domain", &obj1)->isArray() &&
- obj1.arrayGetLength() == 2) {
- t0A = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- t1A = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- }
- obj1.free();
-
- dict->lookup("Function", &obj1);
- if (obj1.isArray()) {
- nFuncsA = obj1.arrayGetLength();
- if (nFuncsA > gfxColorMaxComps) {
- error(-1, "Invalid Function array in shading dictionary");
- goto err1;
- }
- for (i = 0; i < nFuncsA; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!(funcsA[i] = Function::parse(&obj2))) {
- obj1.free();
- obj2.free();
- goto err1;
- }
- obj2.free();
- }
- } else {
- nFuncsA = 1;
- if (!(funcsA[0] = Function::parse(&obj1))) {
- obj1.free();
- goto err1;
- }
- }
- obj1.free();
-
- extend0A = extend1A = gFalse;
- if (dict->lookup("Extend", &obj1)->isArray() &&
- obj1.arrayGetLength() == 2) {
- extend0A = obj1.arrayGet(0, &obj2)->getBool();
- obj2.free();
- extend1A = obj1.arrayGet(1, &obj2)->getBool();
- obj2.free();
- }
- obj1.free();
-
- shading = new GfxAxialShading(x0A, y0A, x1A, y1A, t0A, t1A,
- funcsA, nFuncsA, extend0A, extend1A);
- if (!shading->init(dict)) {
- delete shading;
- return NULL;
- }
- return shading;
-
- err1:
- return NULL;
-}
-
-GfxShading *GfxAxialShading::copy() {
- return new GfxAxialShading(this);
-}
-
-void GfxAxialShading::getColor(double t, GfxColor *color) {
- double out[gfxColorMaxComps];
- int i;
-
- // NB: there can be one function with n outputs or n functions with
- // one output each (where n = number of color components)
- for (i = 0; i < gfxColorMaxComps; ++i) {
- out[i] = 0;
- }
- for (i = 0; i < nFuncs; ++i) {
- funcs[i]->transform(&t, &out[i]);
- }
- for (i = 0; i < gfxColorMaxComps; ++i) {
- color->c[i] = dblToCol(out[i]);
- }
-}
-
-//------------------------------------------------------------------------
-// GfxRadialShading
-//------------------------------------------------------------------------
-
-GfxRadialShading::GfxRadialShading(double x0A, double y0A, double r0A,
- double x1A, double y1A, double r1A,
- double t0A, double t1A,
- Function **funcsA, int nFuncsA,
- GBool extend0A, GBool extend1A):
- GfxShading(3)
-{
- int i;
-
- x0 = x0A;
- y0 = y0A;
- r0 = r0A;
- x1 = x1A;
- y1 = y1A;
- r1 = r1A;
- t0 = t0A;
- t1 = t1A;
- nFuncs = nFuncsA;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = funcsA[i];
- }
- extend0 = extend0A;
- extend1 = extend1A;
-}
-
-GfxRadialShading::GfxRadialShading(GfxRadialShading *shading):
- GfxShading(shading)
-{
- int i;
-
- x0 = shading->x0;
- y0 = shading->y0;
- r0 = shading->r0;
- x1 = shading->x1;
- y1 = shading->y1;
- r1 = shading->r1;
- t0 = shading->t0;
- y1 = shading->t1;
- nFuncs = shading->nFuncs;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = shading->funcs[i]->copy();
- }
- extend0 = shading->extend0;
- extend1 = shading->extend1;
-}
-
-GfxRadialShading::~GfxRadialShading() {
- int i;
-
- for (i = 0; i < nFuncs; ++i) {
- delete funcs[i];
- }
-}
-
-GfxRadialShading *GfxRadialShading::parse(Dict *dict) {
- GfxRadialShading *shading;
- double x0A, y0A, r0A, x1A, y1A, r1A;
- double t0A, t1A;
- Function *funcsA[gfxColorMaxComps];
- int nFuncsA;
- GBool extend0A, extend1A;
- Object obj1, obj2;
- int i;
-
- x0A = y0A = r0A = x1A = y1A = r1A = 0;
- if (dict->lookup("Coords", &obj1)->isArray() &&
- obj1.arrayGetLength() == 6) {
- x0A = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- y0A = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- r0A = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- x1A = obj1.arrayGet(3, &obj2)->getNum();
- obj2.free();
- y1A = obj1.arrayGet(4, &obj2)->getNum();
- obj2.free();
- r1A = obj1.arrayGet(5, &obj2)->getNum();
- obj2.free();
- } else {
- error(-1, "Missing or invalid Coords in shading dictionary");
- goto err1;
- }
- obj1.free();
-
- t0A = 0;
- t1A = 1;
- if (dict->lookup("Domain", &obj1)->isArray() &&
- obj1.arrayGetLength() == 2) {
- t0A = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- t1A = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- }
- obj1.free();
-
- dict->lookup("Function", &obj1);
- if (obj1.isArray()) {
- nFuncsA = obj1.arrayGetLength();
- if (nFuncsA > gfxColorMaxComps) {
- error(-1, "Invalid Function array in shading dictionary");
- goto err1;
- }
- for (i = 0; i < nFuncsA; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!(funcsA[i] = Function::parse(&obj2))) {
- obj1.free();
- obj2.free();
- goto err1;
- }
- obj2.free();
- }
- } else {
- nFuncsA = 1;
- if (!(funcsA[0] = Function::parse(&obj1))) {
- obj1.free();
- goto err1;
- }
- }
- obj1.free();
-
- extend0A = extend1A = gFalse;
- if (dict->lookup("Extend", &obj1)->isArray() &&
- obj1.arrayGetLength() == 2) {
- extend0A = obj1.arrayGet(0, &obj2)->getBool();
- obj2.free();
- extend1A = obj1.arrayGet(1, &obj2)->getBool();
- obj2.free();
- }
- obj1.free();
-
- shading = new GfxRadialShading(x0A, y0A, r0A, x1A, y1A, r1A, t0A, t1A,
- funcsA, nFuncsA, extend0A, extend1A);
- if (!shading->init(dict)) {
- delete shading;
- return NULL;
- }
- return shading;
-
- err1:
- return NULL;
-}
-
-GfxShading *GfxRadialShading::copy() {
- return new GfxRadialShading(this);
-}
-
-void GfxRadialShading::getColor(double t, GfxColor *color) {
- double out[gfxColorMaxComps];
- int i;
-
- // NB: there can be one function with n outputs or n functions with
- // one output each (where n = number of color components)
- for (i = 0; i < gfxColorMaxComps; ++i) {
- out[i] = 0;
- }
- for (i = 0; i < nFuncs; ++i) {
- funcs[i]->transform(&t, &out[i]);
- }
- for (i = 0; i < gfxColorMaxComps; ++i) {
- color->c[i] = dblToCol(out[i]);
- }
-}
-
-//------------------------------------------------------------------------
-// GfxShadingBitBuf
-//------------------------------------------------------------------------
-
-class GfxShadingBitBuf {
-public:
-
- GfxShadingBitBuf(Stream *strA);
- ~GfxShadingBitBuf();
- GBool getBits(int n, Guint *val);
- void flushBits();
-
-private:
-
- Stream *str;
- int bitBuf;
- int nBits;
-};
-
-GfxShadingBitBuf::GfxShadingBitBuf(Stream *strA) {
- str = strA;
- str->reset();
- bitBuf = 0;
- nBits = 0;
-}
-
-GfxShadingBitBuf::~GfxShadingBitBuf() {
- str->close();
-}
-
-GBool GfxShadingBitBuf::getBits(int n, Guint *val) {
- int x;
-
- if (nBits >= n) {
- x = (bitBuf >> (nBits - n)) & ((1 << n) - 1);
- nBits -= n;
- } else {
- x = 0;
- if (nBits > 0) {
- x = bitBuf & ((1 << nBits) - 1);
- n -= nBits;
- nBits = 0;
- }
- while (n > 0) {
- if ((bitBuf = str->getChar()) == EOF) {
- nBits = 0;
- return gFalse;
- }
- if (n >= 8) {
- x = (x << 8) | bitBuf;
- n -= 8;
- } else {
- x = (x << n) | (bitBuf >> (8 - n));
- nBits = 8 - n;
- n = 0;
- }
- }
- }
- *val = x;
- return gTrue;
-}
-
-void GfxShadingBitBuf::flushBits() {
- bitBuf = 0;
- nBits = 0;
-}
-
-//------------------------------------------------------------------------
-// GfxGouraudTriangleShading
-//------------------------------------------------------------------------
-
-GfxGouraudTriangleShading::GfxGouraudTriangleShading(
- int typeA,
- GfxGouraudVertex *verticesA, int nVerticesA,
- int (*trianglesA)[3], int nTrianglesA,
- Function **funcsA, int nFuncsA):
- GfxShading(typeA)
-{
- int i;
-
- vertices = verticesA;
- nVertices = nVerticesA;
- triangles = trianglesA;
- nTriangles = nTrianglesA;
- nFuncs = nFuncsA;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = funcsA[i];
- }
-}
-
-GfxGouraudTriangleShading::GfxGouraudTriangleShading(
- GfxGouraudTriangleShading *shading):
- GfxShading(shading)
-{
- int i;
-
- nVertices = shading->nVertices;
- vertices = (GfxGouraudVertex *)gmallocn(nVertices, sizeof(GfxGouraudVertex));
- memcpy(vertices, shading->vertices, nVertices * sizeof(GfxGouraudVertex));
- nTriangles = shading->nTriangles;
- triangles = (int (*)[3])gmallocn(nTriangles * 3, sizeof(int));
- memcpy(triangles, shading->triangles, nTriangles * 3 * sizeof(int));
- nFuncs = shading->nFuncs;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = shading->funcs[i]->copy();
- }
-}
-
-GfxGouraudTriangleShading::~GfxGouraudTriangleShading() {
- int i;
-
- gfree(vertices);
- gfree(triangles);
- for (i = 0; i < nFuncs; ++i) {
- delete funcs[i];
- }
-}
-
-GfxGouraudTriangleShading *GfxGouraudTriangleShading::parse(int typeA,
- Dict *dict,
- Stream *str) {
- GfxGouraudTriangleShading *shading;
- Function *funcsA[gfxColorMaxComps];
- int nFuncsA;
- int coordBits, compBits, flagBits, vertsPerRow, nRows;
- double xMin, xMax, yMin, yMax;
- double cMin[gfxColorMaxComps], cMax[gfxColorMaxComps];
- double xMul, yMul;
- double cMul[gfxColorMaxComps];
- GfxGouraudVertex *verticesA;
- int (*trianglesA)[3];
- int nComps, nVerticesA, nTrianglesA, vertSize, triSize;
- Guint x, y, flag;
- Guint c[gfxColorMaxComps];
- GfxShadingBitBuf *bitBuf;
- Object obj1, obj2;
- int i, j, k, state;
-
- if (dict->lookup("BitsPerCoordinate", &obj1)->isInt()) {
- coordBits = obj1.getInt();
- } else {
- error(-1, "Missing or invalid BitsPerCoordinate in shading dictionary");
- goto err2;
- }
- obj1.free();
- if (dict->lookup("BitsPerComponent", &obj1)->isInt()) {
- compBits = obj1.getInt();
- } else {
- error(-1, "Missing or invalid BitsPerComponent in shading dictionary");
- goto err2;
- }
- obj1.free();
- flagBits = vertsPerRow = 0; // make gcc happy
- if (typeA == 4) {
- if (dict->lookup("BitsPerFlag", &obj1)->isInt()) {
- flagBits = obj1.getInt();
- } else {
- error(-1, "Missing or invalid BitsPerFlag in shading dictionary");
- goto err2;
- }
- obj1.free();
- } else {
- if (dict->lookup("VerticesPerRow", &obj1)->isInt()) {
- vertsPerRow = obj1.getInt();
- } else {
- error(-1, "Missing or invalid VerticesPerRow in shading dictionary");
- goto err2;
- }
- obj1.free();
- }
- if (dict->lookup("Decode", &obj1)->isArray() &&
- obj1.arrayGetLength() >= 6) {
- xMin = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- xMax = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- xMul = (xMax - xMin) / (pow(2.0, coordBits) - 1);
- yMin = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- yMax = obj1.arrayGet(3, &obj2)->getNum();
- obj2.free();
- yMul = (yMax - yMin) / (pow(2.0, coordBits) - 1);
- for (i = 0; 5 + 2*i < obj1.arrayGetLength() && i < gfxColorMaxComps; ++i) {
- cMin[i] = obj1.arrayGet(4 + 2*i, &obj2)->getNum();
- obj2.free();
- cMax[i] = obj1.arrayGet(5 + 2*i, &obj2)->getNum();
- obj2.free();
- cMul[i] = (cMax[i] - cMin[i]) / (double)((1 << compBits) - 1);
- }
- nComps = i;
- } else {
- error(-1, "Missing or invalid Decode array in shading dictionary");
- goto err2;
- }
- obj1.free();
-
- if (!dict->lookup("Function", &obj1)->isNull()) {
- if (obj1.isArray()) {
- nFuncsA = obj1.arrayGetLength();
- if (nFuncsA > gfxColorMaxComps) {
- error(-1, "Invalid Function array in shading dictionary");
- goto err1;
- }
- for (i = 0; i < nFuncsA; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!(funcsA[i] = Function::parse(&obj2))) {
- obj1.free();
- obj2.free();
- goto err1;
- }
- obj2.free();
- }
- } else {
- nFuncsA = 1;
- if (!(funcsA[0] = Function::parse(&obj1))) {
- obj1.free();
- goto err1;
- }
- }
- } else {
- nFuncsA = 0;
- }
- obj1.free();
-
- nVerticesA = nTrianglesA = 0;
- verticesA = NULL;
- trianglesA = NULL;
- vertSize = triSize = 0;
- state = 0;
- flag = 0; // make gcc happy
- bitBuf = new GfxShadingBitBuf(str);
- while (1) {
- if (typeA == 4) {
- if (!bitBuf->getBits(flagBits, &flag)) {
- break;
- }
- }
- if (!bitBuf->getBits(coordBits, &x) ||
- !bitBuf->getBits(coordBits, &y)) {
- break;
- }
- for (i = 0; i < nComps; ++i) {
- if (!bitBuf->getBits(compBits, &c[i])) {
- break;
- }
- }
- if (i < nComps) {
- break;
- }
- if (nVerticesA == vertSize) {
- vertSize = (vertSize == 0) ? 16 : 2 * vertSize;
- verticesA = (GfxGouraudVertex *)
- greallocn(verticesA, vertSize, sizeof(GfxGouraudVertex));
- }
- verticesA[nVerticesA].x = xMin + xMul * (double)x;
- verticesA[nVerticesA].y = yMin + yMul * (double)y;
- for (i = 0; i < nComps; ++i) {
- verticesA[nVerticesA].color.c[i] =
- dblToCol(cMin[i] + cMul[i] * (double)c[i]);
- }
- ++nVerticesA;
- bitBuf->flushBits();
- if (typeA == 4) {
- if (state == 0 || state == 1) {
- ++state;
- } else if (state == 2 || flag > 0) {
- if (nTrianglesA == triSize) {
- triSize = (triSize == 0) ? 16 : 2 * triSize;
- trianglesA = (int (*)[3])
- greallocn(trianglesA, triSize * 3, sizeof(int));
- }
- if (state == 2) {
- trianglesA[nTrianglesA][0] = nVerticesA - 3;
- trianglesA[nTrianglesA][1] = nVerticesA - 2;
- trianglesA[nTrianglesA][2] = nVerticesA - 1;
- ++state;
- } else if (flag == 1) {
- trianglesA[nTrianglesA][0] = trianglesA[nTrianglesA - 1][1];
- trianglesA[nTrianglesA][1] = trianglesA[nTrianglesA - 1][2];
- trianglesA[nTrianglesA][2] = nVerticesA - 1;
- } else { // flag == 2
- trianglesA[nTrianglesA][0] = trianglesA[nTrianglesA - 1][0];
- trianglesA[nTrianglesA][1] = trianglesA[nTrianglesA - 1][2];
- trianglesA[nTrianglesA][2] = nVerticesA - 1;
- }
- ++nTrianglesA;
- } else { // state == 3 && flag == 0
- state = 1;
- }
- }
- }
- delete bitBuf;
- if (typeA == 5) {
- nRows = nVerticesA / vertsPerRow;
- nTrianglesA = (nRows - 1) * 2 * (vertsPerRow - 1);
- trianglesA = (int (*)[3])gmallocn(nTrianglesA * 3, sizeof(int));
- k = 0;
- for (i = 0; i < nRows - 1; ++i) {
- for (j = 0; j < vertsPerRow - 1; ++j) {
- trianglesA[k][0] = i * vertsPerRow + j;
- trianglesA[k][1] = i * vertsPerRow + j+1;
- trianglesA[k][2] = (i+1) * vertsPerRow + j;
- ++k;
- trianglesA[k][0] = i * vertsPerRow + j+1;
- trianglesA[k][1] = (i+1) * vertsPerRow + j;
- trianglesA[k][2] = (i+1) * vertsPerRow + j+1;
- ++k;
- }
- }
- }
-
- shading = new GfxGouraudTriangleShading(typeA, verticesA, nVerticesA,
- trianglesA, nTrianglesA,
- funcsA, nFuncsA);
- if (!shading->init(dict)) {
- delete shading;
- return NULL;
- }
- return shading;
-
- err2:
- obj1.free();
- err1:
- return NULL;
-}
-
-GfxShading *GfxGouraudTriangleShading::copy() {
- return new GfxGouraudTriangleShading(this);
-}
-
-void GfxGouraudTriangleShading::getTriangle(
- int i,
- double *x0, double *y0, GfxColor *color0,
- double *x1, double *y1, GfxColor *color1,
- double *x2, double *y2, GfxColor *color2) {
- double in;
- double out[gfxColorMaxComps];
- int v, j;
-
- v = triangles[i][0];
- *x0 = vertices[v].x;
- *y0 = vertices[v].y;
- if (nFuncs > 0) {
- in = colToDbl(vertices[v].color.c[0]);
- for (j = 0; j < nFuncs; ++j) {
- funcs[j]->transform(&in, &out[j]);
- }
- for (j = 0; j < gfxColorMaxComps; ++j) {
- color0->c[j] = dblToCol(out[j]);
- }
- } else {
- *color0 = vertices[v].color;
- }
- v = triangles[i][1];
- *x1 = vertices[v].x;
- *y1 = vertices[v].y;
- if (nFuncs > 0) {
- in = colToDbl(vertices[v].color.c[0]);
- for (j = 0; j < nFuncs; ++j) {
- funcs[j]->transform(&in, &out[j]);
- }
- for (j = 0; j < gfxColorMaxComps; ++j) {
- color1->c[j] = dblToCol(out[j]);
- }
- } else {
- *color1 = vertices[v].color;
- }
- v = triangles[i][2];
- *x2 = vertices[v].x;
- *y2 = vertices[v].y;
- if (nFuncs > 0) {
- in = colToDbl(vertices[v].color.c[0]);
- for (j = 0; j < nFuncs; ++j) {
- funcs[j]->transform(&in, &out[j]);
- }
- for (j = 0; j < gfxColorMaxComps; ++j) {
- color2->c[j] = dblToCol(out[j]);
- }
- } else {
- *color2 = vertices[v].color;
- }
-}
-
-//------------------------------------------------------------------------
-// GfxPatchMeshShading
-//------------------------------------------------------------------------
-
-GfxPatchMeshShading::GfxPatchMeshShading(int typeA,
- GfxPatch *patchesA, int nPatchesA,
- Function **funcsA, int nFuncsA):
- GfxShading(typeA)
-{
- int i;
-
- patches = patchesA;
- nPatches = nPatchesA;
- nFuncs = nFuncsA;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = funcsA[i];
- }
-}
-
-GfxPatchMeshShading::GfxPatchMeshShading(GfxPatchMeshShading *shading):
- GfxShading(shading)
-{
- int i;
-
- nPatches = shading->nPatches;
- patches = (GfxPatch *)gmallocn(nPatches, sizeof(GfxPatch));
- memcpy(patches, shading->patches, nPatches * sizeof(GfxPatch));
- nFuncs = shading->nFuncs;
- for (i = 0; i < nFuncs; ++i) {
- funcs[i] = shading->funcs[i]->copy();
- }
-}
-
-GfxPatchMeshShading::~GfxPatchMeshShading() {
- int i;
-
- gfree(patches);
- for (i = 0; i < nFuncs; ++i) {
- delete funcs[i];
- }
-}
-
-GfxPatchMeshShading *GfxPatchMeshShading::parse(int typeA, Dict *dict,
- Stream *str) {
- GfxPatchMeshShading *shading;
- Function *funcsA[gfxColorMaxComps];
- int nFuncsA;
- int coordBits, compBits, flagBits;
- double xMin, xMax, yMin, yMax;
- double cMin[gfxColorMaxComps], cMax[gfxColorMaxComps];
- double xMul, yMul;
- double cMul[gfxColorMaxComps];
- GfxPatch *patchesA, *p;
- int nComps, nPatchesA, patchesSize, nPts, nColors;
- Guint flag;
- double x[16], y[16];
- Guint xi, yi;
- GfxColorComp c[4][gfxColorMaxComps];
- Guint ci[4];
- GfxShadingBitBuf *bitBuf;
- Object obj1, obj2;
- int i, j;
-
- if (dict->lookup("BitsPerCoordinate", &obj1)->isInt()) {
- coordBits = obj1.getInt();
- } else {
- error(-1, "Missing or invalid BitsPerCoordinate in shading dictionary");
- goto err2;
- }
- obj1.free();
- if (dict->lookup("BitsPerComponent", &obj1)->isInt()) {
- compBits = obj1.getInt();
- } else {
- error(-1, "Missing or invalid BitsPerComponent in shading dictionary");
- goto err2;
- }
- obj1.free();
- if (dict->lookup("BitsPerFlag", &obj1)->isInt()) {
- flagBits = obj1.getInt();
- } else {
- error(-1, "Missing or invalid BitsPerFlag in shading dictionary");
- goto err2;
- }
- obj1.free();
- if (dict->lookup("Decode", &obj1)->isArray() &&
- obj1.arrayGetLength() >= 6) {
- xMin = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- xMax = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- xMul = (xMax - xMin) / (pow(2.0, coordBits) - 1);
- yMin = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- yMax = obj1.arrayGet(3, &obj2)->getNum();
- obj2.free();
- yMul = (yMax - yMin) / (pow(2.0, coordBits) - 1);
- for (i = 0; 5 + 2*i < obj1.arrayGetLength() && i < gfxColorMaxComps; ++i) {
- cMin[i] = obj1.arrayGet(4 + 2*i, &obj2)->getNum();
- obj2.free();
- cMax[i] = obj1.arrayGet(5 + 2*i, &obj2)->getNum();
- obj2.free();
- cMul[i] = (cMax[i] - cMin[i]) / (double)((1 << compBits) - 1);
- }
- nComps = i;
- } else {
- error(-1, "Missing or invalid Decode array in shading dictionary");
- goto err2;
- }
- obj1.free();
-
- if (!dict->lookup("Function", &obj1)->isNull()) {
- if (obj1.isArray()) {
- nFuncsA = obj1.arrayGetLength();
- if (nFuncsA > gfxColorMaxComps) {
- error(-1, "Invalid Function array in shading dictionary");
- goto err1;
- }
- for (i = 0; i < nFuncsA; ++i) {
- obj1.arrayGet(i, &obj2);
- if (!(funcsA[i] = Function::parse(&obj2))) {
- obj1.free();
- obj2.free();
- goto err1;
- }
- obj2.free();
- }
- } else {
- nFuncsA = 1;
- if (!(funcsA[0] = Function::parse(&obj1))) {
- obj1.free();
- goto err1;
- }
- }
- } else {
- nFuncsA = 0;
- }
- obj1.free();
-
- nPatchesA = 0;
- patchesA = NULL;
- patchesSize = 0;
- bitBuf = new GfxShadingBitBuf(str);
- while (1) {
- if (!bitBuf->getBits(flagBits, &flag)) {
- break;
- }
- if (typeA == 6) {
- switch (flag) {
- case 0: nPts = 12; nColors = 4; break;
- case 1:
- case 2:
- case 3:
- default: nPts = 8; nColors = 2; break;
- }
- } else {
- switch (flag) {
- case 0: nPts = 16; nColors = 4; break;
- case 1:
- case 2:
- case 3:
- default: nPts = 12; nColors = 2; break;
- }
- }
- for (i = 0; i < nPts; ++i) {
- if (!bitBuf->getBits(coordBits, &xi) ||
- !bitBuf->getBits(coordBits, &yi)) {
- break;
- }
- x[i] = xMin + xMul * (double)xi;
- y[i] = yMin + yMul * (double)yi;
- }
- if (i < nPts) {
- break;
- }
- for (i = 0; i < nColors; ++i) {
- for (j = 0; j < nComps; ++j) {
- if (!bitBuf->getBits(compBits, &ci[j])) {
- break;
- }
- c[i][j] = dblToCol(cMin[j] + cMul[j] * (double)ci[j]);
- }
- if (j < nComps) {
- break;
- }
- }
- if (i < nColors) {
- break;
- }
- if (nPatchesA == patchesSize) {
- patchesSize = (patchesSize == 0) ? 16 : 2 * patchesSize;
- patchesA = (GfxPatch *)greallocn(patchesA,
- patchesSize, sizeof(GfxPatch));
- }
- p = &patchesA[nPatchesA];
- if (typeA == 6) {
- switch (flag) {
- case 0:
- p->x[0][0] = x[0];
- p->y[0][0] = y[0];
- p->x[0][1] = x[1];
- p->y[0][1] = y[1];
- p->x[0][2] = x[2];
- p->y[0][2] = y[2];
- p->x[0][3] = x[3];
- p->y[0][3] = y[3];
- p->x[1][3] = x[4];
- p->y[1][3] = y[4];
- p->x[2][3] = x[5];
- p->y[2][3] = y[5];
- p->x[3][3] = x[6];
- p->y[3][3] = y[6];
- p->x[3][2] = x[7];
- p->y[3][2] = y[7];
- p->x[3][1] = x[8];
- p->y[3][1] = y[8];
- p->x[3][0] = x[9];
- p->y[3][0] = y[9];
- p->x[2][0] = x[10];
- p->y[2][0] = y[10];
- p->x[1][0] = x[11];
- p->y[1][0] = y[11];
- for (j = 0; j < nComps; ++j) {
- p->color[0][0].c[j] = c[0][j];
- p->color[0][1].c[j] = c[1][j];
- p->color[1][1].c[j] = c[2][j];
- p->color[1][0].c[j] = c[3][j];
- }
- break;
- case 1:
- p->x[0][0] = patchesA[nPatchesA-1].x[0][3];
- p->y[0][0] = patchesA[nPatchesA-1].y[0][3];
- p->x[0][1] = patchesA[nPatchesA-1].x[1][3];
- p->y[0][1] = patchesA[nPatchesA-1].y[1][3];
- p->x[0][2] = patchesA[nPatchesA-1].x[2][3];
- p->y[0][2] = patchesA[nPatchesA-1].y[2][3];
- p->x[0][3] = patchesA[nPatchesA-1].x[3][3];
- p->y[0][3] = patchesA[nPatchesA-1].y[3][3];
- p->x[1][3] = x[0];
- p->y[1][3] = y[0];
- p->x[2][3] = x[1];
- p->y[2][3] = y[1];
- p->x[3][3] = x[2];
- p->y[3][3] = y[2];
- p->x[3][2] = x[3];
- p->y[3][2] = y[3];
- p->x[3][1] = x[4];
- p->y[3][1] = y[4];
- p->x[3][0] = x[5];
- p->y[3][0] = y[5];
- p->x[2][0] = x[6];
- p->y[2][0] = y[6];
- p->x[1][0] = x[7];
- p->y[1][0] = y[7];
- for (j = 0; j < nComps; ++j) {
- p->color[0][0].c[j] = patchesA[nPatchesA-1].color[0][1].c[j];
- p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][1].c[j];
- p->color[1][1].c[j] = c[0][j];
- p->color[1][0].c[j] = c[1][j];
- }
- break;
- case 2:
- p->x[0][0] = patchesA[nPatchesA-1].x[3][3];
- p->y[0][0] = patchesA[nPatchesA-1].y[3][3];
- p->x[0][1] = patchesA[nPatchesA-1].x[3][2];
- p->y[0][1] = patchesA[nPatchesA-1].y[3][2];
- p->x[0][2] = patchesA[nPatchesA-1].x[3][1];
- p->y[0][2] = patchesA[nPatchesA-1].y[3][1];
- p->x[0][3] = patchesA[nPatchesA-1].x[3][0];
- p->y[0][3] = patchesA[nPatchesA-1].y[3][0];
- p->x[1][3] = x[0];
- p->y[1][3] = y[0];
- p->x[2][3] = x[1];
- p->y[2][3] = y[1];
- p->x[3][3] = x[2];
- p->y[3][3] = y[2];
- p->x[3][2] = x[3];
- p->y[3][2] = y[3];
- p->x[3][1] = x[4];
- p->y[3][1] = y[4];
- p->x[3][0] = x[5];
- p->y[3][0] = y[5];
- p->x[2][0] = x[6];
- p->y[2][0] = y[6];
- p->x[1][0] = x[7];
- p->y[1][0] = y[7];
- for (j = 0; j < nComps; ++j) {
- p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][1].c[j];
- p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j];
- p->color[1][1].c[j] = c[0][j];
- p->color[1][0].c[j] = c[1][j];
- }
- break;
- case 3:
- p->x[0][0] = patchesA[nPatchesA-1].x[3][0];
- p->y[0][0] = patchesA[nPatchesA-1].y[3][0];
- p->x[0][1] = patchesA[nPatchesA-1].x[2][0];
- p->y[0][1] = patchesA[nPatchesA-1].y[2][0];
- p->x[0][2] = patchesA[nPatchesA-1].x[1][0];
- p->y[0][2] = patchesA[nPatchesA-1].y[1][0];
- p->x[0][3] = patchesA[nPatchesA-1].x[0][0];
- p->y[0][3] = patchesA[nPatchesA-1].y[0][0];
- p->x[1][3] = x[0];
- p->y[1][3] = y[0];
- p->x[2][3] = x[1];
- p->y[2][3] = y[1];
- p->x[3][3] = x[2];
- p->y[3][3] = y[2];
- p->x[3][2] = x[3];
- p->y[3][2] = y[3];
- p->x[3][1] = x[4];
- p->y[3][1] = y[4];
- p->x[3][0] = x[5];
- p->y[3][0] = y[5];
- p->x[2][0] = x[6];
- p->y[2][0] = y[6];
- p->x[1][0] = x[7];
- p->y[1][0] = y[7];
- for (j = 0; j < nComps; ++j) {
- p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j];
- p->color[0][1].c[j] = patchesA[nPatchesA-1].color[0][0].c[j];
- p->color[1][1].c[j] = c[0][j];
- p->color[1][0].c[j] = c[1][j];
- }
- break;
- }
- } else {
- switch (flag) {
- case 0:
- p->x[0][0] = x[0];
- p->y[0][0] = y[0];
- p->x[0][1] = x[1];
- p->y[0][1] = y[1];
- p->x[0][2] = x[2];
- p->y[0][2] = y[2];
- p->x[0][3] = x[3];
- p->y[0][3] = y[3];
- p->x[1][3] = x[4];
- p->y[1][3] = y[4];
- p->x[2][3] = x[5];
- p->y[2][3] = y[5];
- p->x[3][3] = x[6];
- p->y[3][3] = y[6];
- p->x[3][2] = x[7];
- p->y[3][2] = y[7];
- p->x[3][1] = x[8];
- p->y[3][1] = y[8];
- p->x[3][0] = x[9];
- p->y[3][0] = y[9];
- p->x[2][0] = x[10];
- p->y[2][0] = y[10];
- p->x[1][0] = x[11];
- p->y[1][0] = y[11];
- p->x[1][1] = x[12];
- p->y[1][1] = y[12];
- p->x[1][2] = x[13];
- p->y[1][2] = y[13];
- p->x[2][2] = x[14];
- p->y[2][2] = y[14];
- p->x[2][1] = x[15];
- p->y[2][1] = y[15];
- for (j = 0; j < nComps; ++j) {
- p->color[0][0].c[j] = c[0][j];
- p->color[0][1].c[j] = c[1][j];
- p->color[1][1].c[j] = c[2][j];
- p->color[1][0].c[j] = c[3][j];
- }
- break;
- case 1:
- p->x[0][0] = patchesA[nPatchesA-1].x[0][3];
- p->y[0][0] = patchesA[nPatchesA-1].y[0][3];
- p->x[0][1] = patchesA[nPatchesA-1].x[1][3];
- p->y[0][1] = patchesA[nPatchesA-1].y[1][3];
- p->x[0][2] = patchesA[nPatchesA-1].x[2][3];
- p->y[0][2] = patchesA[nPatchesA-1].y[2][3];
- p->x[0][3] = patchesA[nPatchesA-1].x[3][3];
- p->y[0][3] = patchesA[nPatchesA-1].y[3][3];
- p->x[1][3] = x[0];
- p->y[1][3] = y[0];
- p->x[2][3] = x[1];
- p->y[2][3] = y[1];
- p->x[3][3] = x[2];
- p->y[3][3] = y[2];
- p->x[3][2] = x[3];
- p->y[3][2] = y[3];
- p->x[3][1] = x[4];
- p->y[3][1] = y[4];
- p->x[3][0] = x[5];
- p->y[3][0] = y[5];
- p->x[2][0] = x[6];
- p->y[2][0] = y[6];
- p->x[1][0] = x[7];
- p->y[1][0] = y[7];
- p->x[1][1] = x[8];
- p->y[1][1] = y[8];
- p->x[1][2] = x[9];
- p->y[1][2] = y[9];
- p->x[2][2] = x[10];
- p->y[2][2] = y[10];
- p->x[2][1] = x[11];
- p->y[2][1] = y[11];
- for (j = 0; j < nComps; ++j) {
- p->color[0][0].c[j] = patchesA[nPatchesA-1].color[0][1].c[j];
- p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][1].c[j];
- p->color[1][1].c[j] = c[0][j];
- p->color[1][0].c[j] = c[1][j];
- }
- break;
- case 2:
- p->x[0][0] = patchesA[nPatchesA-1].x[3][3];
- p->y[0][0] = patchesA[nPatchesA-1].y[3][3];
- p->x[0][1] = patchesA[nPatchesA-1].x[3][2];
- p->y[0][1] = patchesA[nPatchesA-1].y[3][2];
- p->x[0][2] = patchesA[nPatchesA-1].x[3][1];
- p->y[0][2] = patchesA[nPatchesA-1].y[3][1];
- p->x[0][3] = patchesA[nPatchesA-1].x[3][0];
- p->y[0][3] = patchesA[nPatchesA-1].y[3][0];
- p->x[1][3] = x[0];
- p->y[1][3] = y[0];
- p->x[2][3] = x[1];
- p->y[2][3] = y[1];
- p->x[3][3] = x[2];
- p->y[3][3] = y[2];
- p->x[3][2] = x[3];
- p->y[3][2] = y[3];
- p->x[3][1] = x[4];
- p->y[3][1] = y[4];
- p->x[3][0] = x[5];
- p->y[3][0] = y[5];
- p->x[2][0] = x[6];
- p->y[2][0] = y[6];
- p->x[1][0] = x[7];
- p->y[1][0] = y[7];
- p->x[1][1] = x[8];
- p->y[1][1] = y[8];
- p->x[1][2] = x[9];
- p->y[1][2] = y[9];
- p->x[2][2] = x[10];
- p->y[2][2] = y[10];
- p->x[2][1] = x[11];
- p->y[2][1] = y[11];
- for (j = 0; j < nComps; ++j) {
- p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][1].c[j];
- p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j];
- p->color[1][1].c[j] = c[0][j];
- p->color[1][0].c[j] = c[1][j];
- }
- break;
- case 3:
- p->x[0][0] = patchesA[nPatchesA-1].x[3][0];
- p->y[0][0] = patchesA[nPatchesA-1].y[3][0];
- p->x[0][1] = patchesA[nPatchesA-1].x[2][0];
- p->y[0][1] = patchesA[nPatchesA-1].y[2][0];
- p->x[0][2] = patchesA[nPatchesA-1].x[1][0];
- p->y[0][2] = patchesA[nPatchesA-1].y[1][0];
- p->x[0][3] = patchesA[nPatchesA-1].x[0][0];
- p->y[0][3] = patchesA[nPatchesA-1].y[0][0];
- p->x[1][3] = x[0];
- p->y[1][3] = y[0];
- p->x[2][3] = x[1];
- p->y[2][3] = y[1];
- p->x[3][3] = x[2];
- p->y[3][3] = y[2];
- p->x[3][2] = x[3];
- p->y[3][2] = y[3];
- p->x[3][1] = x[4];
- p->y[3][1] = y[4];
- p->x[3][0] = x[5];
- p->y[3][0] = y[5];
- p->x[2][0] = x[6];
- p->y[2][0] = y[6];
- p->x[1][0] = x[7];
- p->y[1][0] = y[7];
- p->x[1][1] = x[8];
- p->y[1][1] = y[8];
- p->x[1][2] = x[9];
- p->y[1][2] = y[9];
- p->x[2][2] = x[10];
- p->y[2][2] = y[10];
- p->x[2][1] = x[11];
- p->y[2][1] = y[11];
- for (j = 0; j < nComps; ++j) {
- p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][0].c[j];
- p->color[0][1].c[j] = patchesA[nPatchesA-1].color[0][0].c[j];
- p->color[1][1].c[j] = c[0][j];
- p->color[1][0].c[j] = c[1][j];
- }
- break;
- }
- }
- ++nPatchesA;
- bitBuf->flushBits();
- }
- delete bitBuf;
-
- if (typeA == 6) {
- for (i = 0; i < nPatchesA; ++i) {
- p = &patchesA[i];
- p->x[1][1] = (-4 * p->x[0][0]
- +6 * (p->x[0][1] + p->x[1][0])
- -2 * (p->x[0][3] + p->x[3][0])
- +3 * (p->x[3][1] + p->x[1][3])
- - p->x[3][3]) / 9;
- p->y[1][1] = (-4 * p->y[0][0]
- +6 * (p->y[0][1] + p->y[1][0])
- -2 * (p->y[0][3] + p->y[3][0])
- +3 * (p->y[3][1] + p->y[1][3])
- - p->y[3][3]) / 9;
- p->x[1][2] = (-4 * p->x[0][3]
- +6 * (p->x[0][2] + p->x[1][3])
- -2 * (p->x[0][0] + p->x[3][3])
- +3 * (p->x[3][2] + p->x[1][0])
- - p->x[3][0]) / 9;
- p->y[1][2] = (-4 * p->y[0][3]
- +6 * (p->y[0][2] + p->y[1][3])
- -2 * (p->y[0][0] + p->y[3][3])
- +3 * (p->y[3][2] + p->y[1][0])
- - p->y[3][0]) / 9;
- p->x[2][1] = (-4 * p->x[3][0]
- +6 * (p->x[3][1] + p->x[2][0])
- -2 * (p->x[3][3] + p->x[0][0])
- +3 * (p->x[0][1] + p->x[2][3])
- - p->x[0][3]) / 9;
- p->y[2][1] = (-4 * p->y[3][0]
- +6 * (p->y[3][1] + p->y[2][0])
- -2 * (p->y[3][3] + p->y[0][0])
- +3 * (p->y[0][1] + p->y[2][3])
- - p->y[0][3]) / 9;
- p->x[2][2] = (-4 * p->x[3][3]
- +6 * (p->x[3][2] + p->x[2][3])
- -2 * (p->x[3][0] + p->x[0][3])
- +3 * (p->x[0][2] + p->x[2][0])
- - p->x[0][0]) / 9;
- p->y[2][2] = (-4 * p->y[3][3]
- +6 * (p->y[3][2] + p->y[2][3])
- -2 * (p->y[3][0] + p->y[0][3])
- +3 * (p->y[0][2] + p->y[2][0])
- - p->y[0][0]) / 9;
- }
- }
-
- shading = new GfxPatchMeshShading(typeA, patchesA, nPatchesA,
- funcsA, nFuncsA);
- if (!shading->init(dict)) {
- delete shading;
- return NULL;
- }
- return shading;
-
- err2:
- obj1.free();
- err1:
- return NULL;
-}
-
-GfxShading *GfxPatchMeshShading::copy() {
- return new GfxPatchMeshShading(this);
-}
-
-//------------------------------------------------------------------------
-// GfxImageColorMap
-//------------------------------------------------------------------------
-
-GfxImageColorMap::GfxImageColorMap(int bitsA, Object *decode,
- GfxColorSpace *colorSpaceA) {
- GfxIndexedColorSpace *indexedCS;
- GfxSeparationColorSpace *sepCS;
- int maxPixel, indexHigh;
- Guchar *lookup2;
- Function *sepFunc;
- Object obj;
- double x[gfxColorMaxComps];
- double y[gfxColorMaxComps];
- int i, j, k;
-
- ok = gTrue;
-
- // bits per component and color space
- bits = bitsA;
- maxPixel = (1 << bits) - 1;
- colorSpace = colorSpaceA;
-
- // initialize
- for (k = 0; k < gfxColorMaxComps; ++k) {
- lookup[k] = NULL;
- }
-
- // get decode map
- if (decode->isNull()) {
- nComps = colorSpace->getNComps();
- colorSpace->getDefaultRanges(decodeLow, decodeRange, maxPixel);
- } else if (decode->isArray()) {
- nComps = decode->arrayGetLength() / 2;
- if (nComps != colorSpace->getNComps()) {
- goto err1;
- }
- for (i = 0; i < nComps; ++i) {
- decode->arrayGet(2*i, &obj);
- if (!obj.isNum()) {
- goto err2;
- }
- decodeLow[i] = obj.getNum();
- obj.free();
- decode->arrayGet(2*i+1, &obj);
- if (!obj.isNum()) {
- goto err2;
- }
- decodeRange[i] = obj.getNum() - decodeLow[i];
- obj.free();
- }
- } else {
- goto err1;
- }
-
- // Construct a lookup table -- this stores pre-computed decoded
- // values for each component, i.e., the result of applying the
- // decode mapping to each possible image pixel component value.
- //
- // Optimization: for Indexed and Separation color spaces (which have
- // only one component), we store color values in the lookup table
- // rather than component values.
- colorSpace2 = NULL;
- nComps2 = 0;
- if (colorSpace->getMode() == csIndexed) {
- // Note that indexHigh may not be the same as maxPixel --
- // Distiller will remove unused palette entries, resulting in
- // indexHigh < maxPixel.
- indexedCS = (GfxIndexedColorSpace *)colorSpace;
- colorSpace2 = indexedCS->getBase();
- indexHigh = indexedCS->getIndexHigh();
- nComps2 = colorSpace2->getNComps();
- lookup2 = indexedCS->getLookup();
- colorSpace2->getDefaultRanges(x, y, indexHigh);
- for (k = 0; k < nComps2; ++k) {
- lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1,
- sizeof(GfxColorComp));
- for (i = 0; i <= maxPixel; ++i) {
- j = (int)(decodeLow[0] + (i * decodeRange[0]) / maxPixel + 0.5);
- if (j < 0) {
- j = 0;
- } else if (j > indexHigh) {
- j = indexHigh;
- }
- lookup[k][i] =
- dblToCol(x[k] + (lookup2[j*nComps2 + k] / 255.0) * y[k]);
- }
- }
- } else if (colorSpace->getMode() == csSeparation) {
- sepCS = (GfxSeparationColorSpace *)colorSpace;
- colorSpace2 = sepCS->getAlt();
- nComps2 = colorSpace2->getNComps();
- sepFunc = sepCS->getFunc();
- for (k = 0; k < nComps2; ++k) {
- lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1,
- sizeof(GfxColorComp));
- for (i = 0; i <= maxPixel; ++i) {
- x[0] = decodeLow[0] + (i * decodeRange[0]) / maxPixel;
- sepFunc->transform(x, y);
- lookup[k][i] = dblToCol(y[k]);
- }
- }
- } else {
- for (k = 0; k < nComps; ++k) {
- lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1,
- sizeof(GfxColorComp));
- for (i = 0; i <= maxPixel; ++i) {
- lookup[k][i] = dblToCol(decodeLow[k] +
- (i * decodeRange[k]) / maxPixel);
- }
- }
- }
-
- return;
-
- err2:
- obj.free();
- err1:
- ok = gFalse;
-}
-
-GfxImageColorMap::GfxImageColorMap(GfxImageColorMap *colorMap) {
- int n, i, k;
-
- colorSpace = colorMap->colorSpace->copy();
- bits = colorMap->bits;
- nComps = colorMap->nComps;
- nComps2 = colorMap->nComps2;
- colorSpace2 = NULL;
- for (k = 0; k < gfxColorMaxComps; ++k) {
- lookup[k] = NULL;
- }
- n = 1 << bits;
- if (colorSpace->getMode() == csIndexed) {
- colorSpace2 = ((GfxIndexedColorSpace *)colorSpace)->getBase();
- for (k = 0; k < nComps2; ++k) {
- lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
- memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp));
- }
- } else if (colorSpace->getMode() == csSeparation) {
- colorSpace2 = ((GfxSeparationColorSpace *)colorSpace)->getAlt();
- for (k = 0; k < nComps2; ++k) {
- lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
- memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp));
- }
- } else {
- for (k = 0; k < nComps; ++k) {
- lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
- memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp));
- }
- }
- for (i = 0; i < nComps; ++i) {
- decodeLow[i] = colorMap->decodeLow[i];
- decodeRange[i] = colorMap->decodeRange[i];
- }
- ok = gTrue;
-}
-
-GfxImageColorMap::~GfxImageColorMap() {
- int i;
-
- delete colorSpace;
- for (i = 0; i < gfxColorMaxComps; ++i) {
- gfree(lookup[i]);
- }
-}
-
-void GfxImageColorMap::getGray(Guchar *x, GfxGray *gray) {
- GfxColor color;
- int i;
-
- if (colorSpace2) {
- for (i = 0; i < nComps2; ++i) {
- color.c[i] = lookup[i][x[0]];
- }
- colorSpace2->getGray(&color, gray);
- } else {
- for (i = 0; i < nComps; ++i) {
- color.c[i] = lookup[i][x[i]];
- }
- colorSpace->getGray(&color, gray);
- }
-}
-
-void GfxImageColorMap::getRGB(Guchar *x, GfxRGB *rgb) {
- GfxColor color;
- int i;
-
- if (colorSpace2) {
- for (i = 0; i < nComps2; ++i) {
- color.c[i] = lookup[i][x[0]];
- }
- colorSpace2->getRGB(&color, rgb);
- } else {
- for (i = 0; i < nComps; ++i) {
- color.c[i] = lookup[i][x[i]];
- }
- colorSpace->getRGB(&color, rgb);
- }
-}
-
-void GfxImageColorMap::getCMYK(Guchar *x, GfxCMYK *cmyk) {
- GfxColor color;
- int i;
-
- if (colorSpace2) {
- for (i = 0; i < nComps2; ++i) {
- color.c[i] = lookup[i][x[0]];
- }
- colorSpace2->getCMYK(&color, cmyk);
- } else {
- for (i = 0; i < nComps; ++i) {
- color.c[i] = lookup[i][x[i]];
- }
- colorSpace->getCMYK(&color, cmyk);
- }
-}
-
-void GfxImageColorMap::getColor(Guchar *x, GfxColor *color) {
- int maxPixel, i;
-
- maxPixel = (1 << bits) - 1;
- for (i = 0; i < nComps; ++i) {
- color->c[i] = dblToCol(decodeLow[i] + (x[i] * decodeRange[i]) / maxPixel);
- }
-}
-
-//------------------------------------------------------------------------
-// GfxSubpath and GfxPath
-//------------------------------------------------------------------------
-
-GfxSubpath::GfxSubpath(double x1, double y1) {
- size = 16;
- x = (double *)gmallocn(size, sizeof(double));
- y = (double *)gmallocn(size, sizeof(double));
- curve = (GBool *)gmallocn(size, sizeof(GBool));
- n = 1;
- x[0] = x1;
- y[0] = y1;
- curve[0] = gFalse;
- closed = gFalse;
-}
-
-GfxSubpath::~GfxSubpath() {
- gfree(x);
- gfree(y);
- gfree(curve);
-}
-
-// Used for copy().
-GfxSubpath::GfxSubpath(GfxSubpath *subpath) {
- size = subpath->size;
- n = subpath->n;
- x = (double *)gmallocn(size, sizeof(double));
- y = (double *)gmallocn(size, sizeof(double));
- curve = (GBool *)gmallocn(size, sizeof(GBool));
- memcpy(x, subpath->x, n * sizeof(double));
- memcpy(y, subpath->y, n * sizeof(double));
- memcpy(curve, subpath->curve, n * sizeof(GBool));
- closed = subpath->closed;
-}
-
-void GfxSubpath::lineTo(double x1, double y1) {
- if (n >= size) {
- size += 16;
- x = (double *)greallocn(x, size, sizeof(double));
- y = (double *)greallocn(y, size, sizeof(double));
- curve = (GBool *)greallocn(curve, size, sizeof(GBool));
- }
- x[n] = x1;
- y[n] = y1;
- curve[n] = gFalse;
- ++n;
-}
-
-void GfxSubpath::curveTo(double x1, double y1, double x2, double y2,
- double x3, double y3) {
- if (n+3 > size) {
- size += 16;
- x = (double *)greallocn(x, size, sizeof(double));
- y = (double *)greallocn(y, size, sizeof(double));
- curve = (GBool *)greallocn(curve, size, sizeof(GBool));
- }
- x[n] = x1;
- y[n] = y1;
- x[n+1] = x2;
- y[n+1] = y2;
- x[n+2] = x3;
- y[n+2] = y3;
- curve[n] = curve[n+1] = gTrue;
- curve[n+2] = gFalse;
- n += 3;
-}
-
-void GfxSubpath::close() {
- if (x[n-1] != x[0] || y[n-1] != y[0]) {
- lineTo(x[0], y[0]);
- }
- closed = gTrue;
-}
-
-void GfxSubpath::offset(double dx, double dy) {
- int i;
-
- for (i = 0; i < n; ++i) {
- x[i] += dx;
- y[i] += dy;
- }
-}
-
-GfxPath::GfxPath() {
- justMoved = gFalse;
- size = 16;
- n = 0;
- firstX = firstY = 0;
- subpaths = (GfxSubpath **)gmallocn(size, sizeof(GfxSubpath *));
-}
-
-GfxPath::~GfxPath() {
- int i;
-
- for (i = 0; i < n; ++i)
- delete subpaths[i];
- gfree(subpaths);
-}
-
-// Used for copy().
-GfxPath::GfxPath(GBool justMoved1, double firstX1, double firstY1,
- GfxSubpath **subpaths1, int n1, int size1) {
- int i;
-
- justMoved = justMoved1;
- firstX = firstX1;
- firstY = firstY1;
- size = size1;
- n = n1;
- subpaths = (GfxSubpath **)gmallocn(size, sizeof(GfxSubpath *));
- for (i = 0; i < n; ++i)
- subpaths[i] = subpaths1[i]->copy();
-}
-
-void GfxPath::moveTo(double x, double y) {
- justMoved = gTrue;
- firstX = x;
- firstY = y;
-}
-
-void GfxPath::lineTo(double x, double y) {
- if (justMoved) {
- if (n >= size) {
- size += 16;
- subpaths = (GfxSubpath **)
- greallocn(subpaths, size, sizeof(GfxSubpath *));
- }
- subpaths[n] = new GfxSubpath(firstX, firstY);
- ++n;
- justMoved = gFalse;
- }
- subpaths[n-1]->lineTo(x, y);
-}
-
-void GfxPath::curveTo(double x1, double y1, double x2, double y2,
- double x3, double y3) {
- if (justMoved) {
- if (n >= size) {
- size += 16;
- subpaths = (GfxSubpath **)
- greallocn(subpaths, size, sizeof(GfxSubpath *));
- }
- subpaths[n] = new GfxSubpath(firstX, firstY);
- ++n;
- justMoved = gFalse;
- }
- subpaths[n-1]->curveTo(x1, y1, x2, y2, x3, y3);
-}
-
-void GfxPath::close() {
- // this is necessary to handle the pathological case of
- // moveto/closepath/clip, which defines an empty clipping region
- if (justMoved) {
- if (n >= size) {
- size += 16;
- subpaths = (GfxSubpath **)
- greallocn(subpaths, size, sizeof(GfxSubpath *));
- }
- subpaths[n] = new GfxSubpath(firstX, firstY);
- ++n;
- justMoved = gFalse;
- }
- subpaths[n-1]->close();
-}
-
-void GfxPath::append(GfxPath *path) {
- int i;
-
- if (n + path->n > size) {
- size = n + path->n;
- subpaths = (GfxSubpath **)
- greallocn(subpaths, size, sizeof(GfxSubpath *));
- }
- for (i = 0; i < path->n; ++i) {
- subpaths[n++] = path->subpaths[i]->copy();
- }
- justMoved = gFalse;
-}
-
-void GfxPath::offset(double dx, double dy) {
- int i;
-
- for (i = 0; i < n; ++i) {
- subpaths[i]->offset(dx, dy);
- }
-}
-
-//------------------------------------------------------------------------
-// GfxState
-//------------------------------------------------------------------------
-
-GfxState::GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox,
- int rotateA, GBool upsideDown) {
- double kx, ky;
-
- hDPI = hDPIA;
- vDPI = vDPIA;
- rotate = rotateA;
- px1 = pageBox->x1;
- py1 = pageBox->y1;
- px2 = pageBox->x2;
- py2 = pageBox->y2;
- kx = hDPI / 72.0;
- ky = vDPI / 72.0;
- if (rotate == 90) {
- ctm[0] = 0;
- ctm[1] = upsideDown ? ky : -ky;
- ctm[2] = kx;
- ctm[3] = 0;
- ctm[4] = -kx * py1;
- ctm[5] = ky * (upsideDown ? -px1 : px2);
- pageWidth = kx * (py2 - py1);
- pageHeight = ky * (px2 - px1);
- } else if (rotate == 180) {
- ctm[0] = -kx;
- ctm[1] = 0;
- ctm[2] = 0;
- ctm[3] = upsideDown ? ky : -ky;
- ctm[4] = kx * px2;
- ctm[5] = ky * (upsideDown ? -py1 : py2);
- pageWidth = kx * (px2 - px1);
- pageHeight = ky * (py2 - py1);
- } else if (rotate == 270) {
- ctm[0] = 0;
- ctm[1] = upsideDown ? -ky : ky;
- ctm[2] = -kx;
- ctm[3] = 0;
- ctm[4] = kx * py2;
- ctm[5] = ky * (upsideDown ? px2 : -px1);
- pageWidth = kx * (py2 - py1);
- pageHeight = ky * (px2 - px1);
- } else {
- ctm[0] = kx;
- ctm[1] = 0;
- ctm[2] = 0;
- ctm[3] = upsideDown ? -ky : ky;
- ctm[4] = -kx * px1;
- ctm[5] = ky * (upsideDown ? py2 : -py1);
- pageWidth = kx * (px2 - px1);
- pageHeight = ky * (py2 - py1);
- }
-
- fillColorSpace = new GfxDeviceGrayColorSpace();
- strokeColorSpace = new GfxDeviceGrayColorSpace();
- fillColor.c[0] = 0;
- strokeColor.c[0] = 0;
- fillPattern = NULL;
- strokePattern = NULL;
- blendMode = gfxBlendNormal;
- fillOpacity = 1;
- strokeOpacity = 1;
- fillOverprint = gFalse;
- strokeOverprint = gFalse;
- transfer[0] = transfer[1] = transfer[2] = transfer[3] = NULL;
-
- lineWidth = 1;
- lineDash = NULL;
- lineDashLength = 0;
- lineDashStart = 0;
- flatness = 1;
- lineJoin = 0;
- lineCap = 0;
- miterLimit = 10;
- strokeAdjust = gFalse;
-
- font = NULL;
- fontSize = 0;
- textMat[0] = 1; textMat[1] = 0;
- textMat[2] = 0; textMat[3] = 1;
- textMat[4] = 0; textMat[5] = 0;
- charSpace = 0;
- wordSpace = 0;
- horizScaling = 1;
- leading = 0;
- rise = 0;
- render = 0;
-
- path = new GfxPath();
- curX = curY = 0;
- lineX = lineY = 0;
-
- clipXMin = 0;
- clipYMin = 0;
- clipXMax = pageWidth;
- clipYMax = pageHeight;
-
- saved = NULL;
-}
-
-GfxState::~GfxState() {
- int i;
-
- if (fillColorSpace) {
- delete fillColorSpace;
- }
- if (strokeColorSpace) {
- delete strokeColorSpace;
- }
- if (fillPattern) {
- delete fillPattern;
- }
- if (strokePattern) {
- delete strokePattern;
- }
- for (i = 0; i < 4; ++i) {
- if (transfer[i]) {
- delete transfer[i];
- }
- }
- gfree(lineDash);
- if (path) {
- // this gets set to NULL by restore()
- delete path;
- }
- if (saved) {
- delete saved;
- }
-}
-
-// Used for copy();
-GfxState::GfxState(GfxState *state) {
- int i;
-
- memcpy(this, state, sizeof(GfxState));
- if (fillColorSpace) {
- fillColorSpace = state->fillColorSpace->copy();
- }
- if (strokeColorSpace) {
- strokeColorSpace = state->strokeColorSpace->copy();
- }
- if (fillPattern) {
- fillPattern = state->fillPattern->copy();
- }
- if (strokePattern) {
- strokePattern = state->strokePattern->copy();
- }
- for (i = 0; i < 4; ++i) {
- if (transfer[i]) {
- transfer[i] = state->transfer[i]->copy();
- }
- }
- if (lineDashLength > 0) {
- lineDash = (double *)gmallocn(lineDashLength, sizeof(double));
- memcpy(lineDash, state->lineDash, lineDashLength * sizeof(double));
- }
- saved = NULL;
-}
-
-void GfxState::setPath(GfxPath *pathA) {
- delete path;
- path = pathA;
-}
-
-void GfxState::getUserClipBBox(double *xMin, double *yMin,
- double *xMax, double *yMax) {
- double ictm[6];
- double xMin1, yMin1, xMax1, yMax1, det, tx, ty;
-
- // invert the CTM
- det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]);
- ictm[0] = ctm[3] * det;
- ictm[1] = -ctm[1] * det;
- ictm[2] = -ctm[2] * det;
- ictm[3] = ctm[0] * det;
- ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det;
- ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det;
-
- // transform all four corners of the clip bbox; find the min and max
- // x and y values
- xMin1 = xMax1 = clipXMin * ictm[0] + clipYMin * ictm[2] + ictm[4];
- yMin1 = yMax1 = clipXMin * ictm[1] + clipYMin * ictm[3] + ictm[5];
- tx = clipXMin * ictm[0] + clipYMax * ictm[2] + ictm[4];
- ty = clipXMin * ictm[1] + clipYMax * ictm[3] + ictm[5];
- if (tx < xMin1) {
- xMin1 = tx;
- } else if (tx > xMax1) {
- xMax1 = tx;
- }
- if (ty < yMin1) {
- yMin1 = ty;
- } else if (ty > yMax1) {
- yMax1 = ty;
- }
- tx = clipXMax * ictm[0] + clipYMin * ictm[2] + ictm[4];
- ty = clipXMax * ictm[1] + clipYMin * ictm[3] + ictm[5];
- if (tx < xMin1) {
- xMin1 = tx;
- } else if (tx > xMax1) {
- xMax1 = tx;
- }
- if (ty < yMin1) {
- yMin1 = ty;
- } else if (ty > yMax1) {
- yMax1 = ty;
- }
- tx = clipXMax * ictm[0] + clipYMax * ictm[2] + ictm[4];
- ty = clipXMax * ictm[1] + clipYMax * ictm[3] + ictm[5];
- if (tx < xMin1) {
- xMin1 = tx;
- } else if (tx > xMax1) {
- xMax1 = tx;
- }
- if (ty < yMin1) {
- yMin1 = ty;
- } else if (ty > yMax1) {
- yMax1 = ty;
- }
-
- *xMin = xMin1;
- *yMin = yMin1;
- *xMax = xMax1;
- *yMax = yMax1;
-}
-
-double GfxState::transformWidth(double w) {
- double x, y;
-
- x = ctm[0] + ctm[2];
- y = ctm[1] + ctm[3];
- return w * sqrt(0.5 * (x * x + y * y));
-}
-
-double GfxState::getTransformedFontSize() {
- double x1, y1, x2, y2;
-
- x1 = textMat[2] * fontSize;
- y1 = textMat[3] * fontSize;
- x2 = ctm[0] * x1 + ctm[2] * y1;
- y2 = ctm[1] * x1 + ctm[3] * y1;
- return sqrt(x2 * x2 + y2 * y2);
-}
-
-void GfxState::getFontTransMat(double *m11, double *m12,
- double *m21, double *m22) {
- *m11 = (textMat[0] * ctm[0] + textMat[1] * ctm[2]) * fontSize;
- *m12 = (textMat[0] * ctm[1] + textMat[1] * ctm[3]) * fontSize;
- *m21 = (textMat[2] * ctm[0] + textMat[3] * ctm[2]) * fontSize;
- *m22 = (textMat[2] * ctm[1] + textMat[3] * ctm[3]) * fontSize;
-}
-
-void GfxState::setCTM(double a, double b, double c,
- double d, double e, double f) {
- int i;
-
- ctm[0] = a;
- ctm[1] = b;
- ctm[2] = c;
- ctm[3] = d;
- ctm[4] = e;
- ctm[5] = f;
-
- // avoid FP exceptions on badly messed up PDF files
- for (i = 0; i < 6; ++i) {
- if (ctm[i] > 1e10) {
- ctm[i] = 1e10;
- } else if (ctm[i] < -1e10) {
- ctm[i] = -1e10;
- }
- }
-}
-
-void GfxState::concatCTM(double a, double b, double c,
- double d, double e, double f) {
- double a1 = ctm[0];
- double b1 = ctm[1];
- double c1 = ctm[2];
- double d1 = ctm[3];
- int i;
-
- ctm[0] = a * a1 + b * c1;
- ctm[1] = a * b1 + b * d1;
- ctm[2] = c * a1 + d * c1;
- ctm[3] = c * b1 + d * d1;
- ctm[4] = e * a1 + f * c1 + ctm[4];
- ctm[5] = e * b1 + f * d1 + ctm[5];
-
- // avoid FP exceptions on badly messed up PDF files
- for (i = 0; i < 6; ++i) {
- if (ctm[i] > 1e10) {
- ctm[i] = 1e10;
- } else if (ctm[i] < -1e10) {
- ctm[i] = -1e10;
- }
- }
-}
-
-void GfxState::shiftCTM(double tx, double ty) {
- ctm[4] += tx;
- ctm[5] += ty;
- clipXMin += tx;
- clipYMin += ty;
- clipXMax += tx;
- clipYMax += ty;
-}
-
-void GfxState::setFillColorSpace(GfxColorSpace *colorSpace) {
- if (fillColorSpace) {
- delete fillColorSpace;
- }
- fillColorSpace = colorSpace;
-}
-
-void GfxState::setStrokeColorSpace(GfxColorSpace *colorSpace) {
- if (strokeColorSpace) {
- delete strokeColorSpace;
- }
- strokeColorSpace = colorSpace;
-}
-
-void GfxState::setFillPattern(GfxPattern *pattern) {
- if (fillPattern) {
- delete fillPattern;
- }
- fillPattern = pattern;
-}
-
-void GfxState::setStrokePattern(GfxPattern *pattern) {
- if (strokePattern) {
- delete strokePattern;
- }
- strokePattern = pattern;
-}
-
-void GfxState::setTransfer(Function **funcs) {
- int i;
-
- for (i = 0; i < 4; ++i) {
- if (transfer[i]) {
- delete transfer[i];
- }
- transfer[i] = funcs[i];
- }
-}
-
-void GfxState::setLineDash(double *dash, int length, double start) {
- if (lineDash)
- gfree(lineDash);
- lineDash = dash;
- lineDashLength = length;
- lineDashStart = start;
-}
-
-void GfxState::clearPath() {
- delete path;
- path = new GfxPath();
-}
-
-void GfxState::clip() {
- double xMin, yMin, xMax, yMax, x, y;
- GfxSubpath *subpath;
- int i, j;
-
- xMin = xMax = yMin = yMax = 0; // make gcc happy
- for (i = 0; i < path->getNumSubpaths(); ++i) {
- subpath = path->getSubpath(i);
- for (j = 0; j < subpath->getNumPoints(); ++j) {
- transform(subpath->getX(j), subpath->getY(j), &x, &y);
- if (i == 0 && j == 0) {
- xMin = xMax = x;
- yMin = yMax = y;
- } else {
- if (x < xMin) {
- xMin = x;
- } else if (x > xMax) {
- xMax = x;
- }
- if (y < yMin) {
- yMin = y;
- } else if (y > yMax) {
- yMax = y;
- }
- }
- }
- }
- if (xMin > clipXMin) {
- clipXMin = xMin;
- }
- if (yMin > clipYMin) {
- clipYMin = yMin;
- }
- if (xMax < clipXMax) {
- clipXMax = xMax;
- }
- if (yMax < clipYMax) {
- clipYMax = yMax;
- }
-}
-
-void GfxState::clipToStrokePath() {
- double xMin, yMin, xMax, yMax, x, y, t0, t1;
- GfxSubpath *subpath;
- int i, j;
-
- xMin = xMax = yMin = yMax = 0; // make gcc happy
- for (i = 0; i < path->getNumSubpaths(); ++i) {
- subpath = path->getSubpath(i);
- for (j = 0; j < subpath->getNumPoints(); ++j) {
- transform(subpath->getX(j), subpath->getY(j), &x, &y);
- if (i == 0 && j == 0) {
- xMin = xMax = x;
- yMin = yMax = y;
- } else {
- if (x < xMin) {
- xMin = x;
- } else if (x > xMax) {
- xMax = x;
- }
- if (y < yMin) {
- yMin = y;
- } else if (y > yMax) {
- yMax = y;
- }
- }
- }
- }
-
- // allow for the line width
- //~ miter joins can extend farther than this
- t0 = fabs(ctm[0]);
- t1 = fabs(ctm[2]);
- if (t0 > t1) {
- xMin -= 0.5 * lineWidth * t0;
- xMax += 0.5 * lineWidth * t0;
- } else {
- xMin -= 0.5 * lineWidth * t1;
- xMax += 0.5 * lineWidth * t1;
- }
- t0 = fabs(ctm[0]);
- t1 = fabs(ctm[3]);
- if (t0 > t1) {
- yMin -= 0.5 * lineWidth * t0;
- yMax += 0.5 * lineWidth * t0;
- } else {
- yMin -= 0.5 * lineWidth * t1;
- yMax += 0.5 * lineWidth * t1;
- }
-
- if (xMin > clipXMin) {
- clipXMin = xMin;
- }
- if (yMin > clipYMin) {
- clipYMin = yMin;
- }
- if (xMax < clipXMax) {
- clipXMax = xMax;
- }
- if (yMax < clipYMax) {
- clipYMax = yMax;
- }
-}
-
-void GfxState::textShift(double tx, double ty) {
- double dx, dy;
-
- textTransformDelta(tx, ty, &dx, &dy);
- curX += dx;
- curY += dy;
-}
-
-void GfxState::shift(double dx, double dy) {
- curX += dx;
- curY += dy;
-}
-
-GfxState *GfxState::save() {
- GfxState *newState;
-
- newState = copy();
- newState->saved = this;
- return newState;
-}
-
-GfxState *GfxState::restore() {
- GfxState *oldState;
-
- if (saved) {
- oldState = saved;
-
- // these attributes aren't saved/restored by the q/Q operators
- oldState->path = path;
- oldState->curX = curX;
- oldState->curY = curY;
- oldState->lineX = lineX;
- oldState->lineY = lineY;
-
- path = NULL;
- saved = NULL;
- delete this;
-
- } else {
- oldState = this;
- }
-
- return oldState;
-}
-
-GBool GfxState::parseBlendMode(Object *obj, GfxBlendMode *mode) {
- Object obj2;
- int i, j;
-
- if (obj->isName()) {
- for (i = 0; i < nGfxBlendModeNames; ++i) {
- if (!strcmp(obj->getName(), gfxBlendModeNames[i].name)) {
- *mode = gfxBlendModeNames[i].mode;
- return gTrue;
- }
- }
- return gFalse;
- } else if (obj->isArray()) {
- for (i = 0; i < obj->arrayGetLength(); ++i) {
- obj->arrayGet(i, &obj2);
- if (!obj2.isName()) {
- obj2.free();
- return gFalse;
- }
- for (j = 0; j < nGfxBlendModeNames; ++j) {
- if (!strcmp(obj2.getName(), gfxBlendModeNames[j].name)) {
- obj2.free();
- *mode = gfxBlendModeNames[j].mode;
- return gTrue;
- }
- }
- obj2.free();
- }
- *mode = gfxBlendNormal;
- return gTrue;
- } else {
- return gFalse;
- }
-}
diff --git a/Build/source/libs/xpdf/xpdf/GfxState.h b/Build/source/libs/xpdf/xpdf/GfxState.h
deleted file mode 100644
index f85643dcc63..00000000000
--- a/Build/source/libs/xpdf/xpdf/GfxState.h
+++ /dev/null
@@ -1,1244 +0,0 @@
-//========================================================================
-//
-// GfxState.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef GFXSTATE_H
-#define GFXSTATE_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "Object.h"
-#include "Function.h"
-
-class Array;
-class GfxFont;
-class PDFRectangle;
-class GfxShading;
-
-//------------------------------------------------------------------------
-// GfxBlendMode
-//------------------------------------------------------------------------
-
-enum GfxBlendMode {
- gfxBlendNormal,
- gfxBlendMultiply,
- gfxBlendScreen,
- gfxBlendOverlay,
- gfxBlendDarken,
- gfxBlendLighten,
- gfxBlendColorDodge,
- gfxBlendColorBurn,
- gfxBlendHardLight,
- gfxBlendSoftLight,
- gfxBlendDifference,
- gfxBlendExclusion,
- gfxBlendHue,
- gfxBlendSaturation,
- gfxBlendColor,
- gfxBlendLuminosity
-};
-
-//------------------------------------------------------------------------
-// GfxColorComp
-//------------------------------------------------------------------------
-
-// 16.16 fixed point color component
-typedef int GfxColorComp;
-
-#define gfxColorComp1 0x10000
-
-static inline GfxColorComp dblToCol(double x) {
- return (GfxColorComp)(x * gfxColorComp1);
-}
-
-static inline double colToDbl(GfxColorComp x) {
- return (double)x / (double)gfxColorComp1;
-}
-
-static inline GfxColorComp byteToCol(Guchar x) {
- // (x / 255) << 16 = (0.0000000100000001... * x) << 16
- // = ((x << 8) + (x) + (x >> 8) + ...) << 16
- // = (x << 8) + (x) + (x >> 7)
- // [for rounding]
- return (GfxColorComp)((x << 8) + x + (x >> 7));
-}
-
-static inline Guchar colToByte(GfxColorComp x) {
- // 255 * x + 0.5 = 256 * x - x + 0x8000
- return (Guchar)(((x << 8) - x + 0x8000) >> 16);
-}
-
-//------------------------------------------------------------------------
-// GfxColor
-//------------------------------------------------------------------------
-
-#define gfxColorMaxComps funcMaxOutputs
-
-struct GfxColor {
- GfxColorComp c[gfxColorMaxComps];
-};
-
-//------------------------------------------------------------------------
-// GfxGray
-//------------------------------------------------------------------------
-
-typedef GfxColorComp GfxGray;
-
-//------------------------------------------------------------------------
-// GfxRGB
-//------------------------------------------------------------------------
-
-struct GfxRGB {
- GfxColorComp r, g, b;
-};
-
-//------------------------------------------------------------------------
-// GfxCMYK
-//------------------------------------------------------------------------
-
-struct GfxCMYK {
- GfxColorComp c, m, y, k;
-};
-
-//------------------------------------------------------------------------
-// GfxColorSpace
-//------------------------------------------------------------------------
-
-// NB: The nGfxColorSpaceModes constant and the gfxColorSpaceModeNames
-// array defined in GfxState.cc must match this enum.
-enum GfxColorSpaceMode {
- csDeviceGray,
- csCalGray,
- csDeviceRGB,
- csCalRGB,
- csDeviceCMYK,
- csLab,
- csICCBased,
- csIndexed,
- csSeparation,
- csDeviceN,
- csPattern
-};
-
-class GfxColorSpace {
-public:
-
- GfxColorSpace();
- virtual ~GfxColorSpace();
- virtual GfxColorSpace *copy() = 0;
- virtual GfxColorSpaceMode getMode() = 0;
-
- // Construct a color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Object *csObj);
-
- // Convert to gray, RGB, or CMYK.
- virtual void getGray(GfxColor *color, GfxGray *gray) = 0;
- virtual void getRGB(GfxColor *color, GfxRGB *rgb) = 0;
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk) = 0;
-
- // Return the number of color components.
- virtual int getNComps() = 0;
-
- // Get this color space's default color.
- virtual void getDefaultColor(GfxColor *color) = 0;
-
- // Return the default ranges for each component, assuming an image
- // with a max pixel value of <maxImgPixel>.
- virtual void getDefaultRanges(double *decodeLow, double *decodeRange,
- int maxImgPixel);
-
- // Returns true if painting operations in this color space never
- // mark the page (e.g., the "None" colorant).
- virtual GBool isNonMarking() { return gFalse; }
-
- // Return the number of color space modes
- static int getNumColorSpaceModes();
-
- // Return the name of the <idx>th color space mode.
- static char *getColorSpaceModeName(int idx);
-
-private:
-};
-
-//------------------------------------------------------------------------
-// GfxDeviceGrayColorSpace
-//------------------------------------------------------------------------
-
-class GfxDeviceGrayColorSpace: public GfxColorSpace {
-public:
-
- GfxDeviceGrayColorSpace();
- virtual ~GfxDeviceGrayColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csDeviceGray; }
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 1; }
- virtual void getDefaultColor(GfxColor *color);
-
-private:
-};
-
-//------------------------------------------------------------------------
-// GfxCalGrayColorSpace
-//------------------------------------------------------------------------
-
-class GfxCalGrayColorSpace: public GfxColorSpace {
-public:
-
- GfxCalGrayColorSpace();
- virtual ~GfxCalGrayColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csCalGray; }
-
- // Construct a CalGray color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 1; }
- virtual void getDefaultColor(GfxColor *color);
-
- // CalGray-specific access.
- double getWhiteX() { return whiteX; }
- double getWhiteY() { return whiteY; }
- double getWhiteZ() { return whiteZ; }
- double getBlackX() { return blackX; }
- double getBlackY() { return blackY; }
- double getBlackZ() { return blackZ; }
- double getGamma() { return gamma; }
-
-private:
-
- double whiteX, whiteY, whiteZ; // white point
- double blackX, blackY, blackZ; // black point
- double gamma; // gamma value
-};
-
-//------------------------------------------------------------------------
-// GfxDeviceRGBColorSpace
-//------------------------------------------------------------------------
-
-class GfxDeviceRGBColorSpace: public GfxColorSpace {
-public:
-
- GfxDeviceRGBColorSpace();
- virtual ~GfxDeviceRGBColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csDeviceRGB; }
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 3; }
- virtual void getDefaultColor(GfxColor *color);
-
-private:
-};
-
-//------------------------------------------------------------------------
-// GfxCalRGBColorSpace
-//------------------------------------------------------------------------
-
-class GfxCalRGBColorSpace: public GfxColorSpace {
-public:
-
- GfxCalRGBColorSpace();
- virtual ~GfxCalRGBColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csCalRGB; }
-
- // Construct a CalRGB color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 3; }
- virtual void getDefaultColor(GfxColor *color);
-
- // CalRGB-specific access.
- double getWhiteX() { return whiteX; }
- double getWhiteY() { return whiteY; }
- double getWhiteZ() { return whiteZ; }
- double getBlackX() { return blackX; }
- double getBlackY() { return blackY; }
- double getBlackZ() { return blackZ; }
- double getGammaR() { return gammaR; }
- double getGammaG() { return gammaG; }
- double getGammaB() { return gammaB; }
- double *getMatrix() { return mat; }
-
-private:
-
- double whiteX, whiteY, whiteZ; // white point
- double blackX, blackY, blackZ; // black point
- double gammaR, gammaG, gammaB; // gamma values
- double mat[9]; // ABC -> XYZ transform matrix
-};
-
-//------------------------------------------------------------------------
-// GfxDeviceCMYKColorSpace
-//------------------------------------------------------------------------
-
-class GfxDeviceCMYKColorSpace: public GfxColorSpace {
-public:
-
- GfxDeviceCMYKColorSpace();
- virtual ~GfxDeviceCMYKColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csDeviceCMYK; }
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 4; }
- virtual void getDefaultColor(GfxColor *color);
-
-private:
-};
-
-//------------------------------------------------------------------------
-// GfxLabColorSpace
-//------------------------------------------------------------------------
-
-class GfxLabColorSpace: public GfxColorSpace {
-public:
-
- GfxLabColorSpace();
- virtual ~GfxLabColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csLab; }
-
- // Construct a Lab color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 3; }
- virtual void getDefaultColor(GfxColor *color);
-
- virtual void getDefaultRanges(double *decodeLow, double *decodeRange,
- int maxImgPixel);
-
- // Lab-specific access.
- double getWhiteX() { return whiteX; }
- double getWhiteY() { return whiteY; }
- double getWhiteZ() { return whiteZ; }
- double getBlackX() { return blackX; }
- double getBlackY() { return blackY; }
- double getBlackZ() { return blackZ; }
- double getAMin() { return aMin; }
- double getAMax() { return aMax; }
- double getBMin() { return bMin; }
- double getBMax() { return bMax; }
-
-private:
-
- double whiteX, whiteY, whiteZ; // white point
- double blackX, blackY, blackZ; // black point
- double aMin, aMax, bMin, bMax; // range for the a and b components
- double kr, kg, kb; // gamut mapping mulitpliers
-};
-
-//------------------------------------------------------------------------
-// GfxICCBasedColorSpace
-//------------------------------------------------------------------------
-
-class GfxICCBasedColorSpace: public GfxColorSpace {
-public:
-
- GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA,
- Ref *iccProfileStreamA);
- virtual ~GfxICCBasedColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csICCBased; }
-
- // Construct an ICCBased color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return nComps; }
- virtual void getDefaultColor(GfxColor *color);
-
- virtual void getDefaultRanges(double *decodeLow, double *decodeRange,
- int maxImgPixel);
-
- // ICCBased-specific access.
- GfxColorSpace *getAlt() { return alt; }
-
-private:
-
- int nComps; // number of color components (1, 3, or 4)
- GfxColorSpace *alt; // alternate color space
- double rangeMin[4]; // min values for each component
- double rangeMax[4]; // max values for each component
- Ref iccProfileStream; // the ICC profile
-};
-
-//------------------------------------------------------------------------
-// GfxIndexedColorSpace
-//------------------------------------------------------------------------
-
-class GfxIndexedColorSpace: public GfxColorSpace {
-public:
-
- GfxIndexedColorSpace(GfxColorSpace *baseA, int indexHighA);
- virtual ~GfxIndexedColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csIndexed; }
-
- // Construct a Lab color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 1; }
- virtual void getDefaultColor(GfxColor *color);
-
- virtual void getDefaultRanges(double *decodeLow, double *decodeRange,
- int maxImgPixel);
-
- // Indexed-specific access.
- GfxColorSpace *getBase() { return base; }
- int getIndexHigh() { return indexHigh; }
- Guchar *getLookup() { return lookup; }
- GfxColor *mapColorToBase(GfxColor *color, GfxColor *baseColor);
-
-private:
-
- GfxColorSpace *base; // base color space
- int indexHigh; // max pixel value
- Guchar *lookup; // lookup table
-};
-
-//------------------------------------------------------------------------
-// GfxSeparationColorSpace
-//------------------------------------------------------------------------
-
-class GfxSeparationColorSpace: public GfxColorSpace {
-public:
-
- GfxSeparationColorSpace(GString *nameA, GfxColorSpace *altA,
- Function *funcA);
- virtual ~GfxSeparationColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csSeparation; }
-
- // Construct a Separation color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 1; }
- virtual void getDefaultColor(GfxColor *color);
-
- virtual GBool isNonMarking() { return nonMarking; }
-
- // Separation-specific access.
- GString *getName() { return name; }
- GfxColorSpace *getAlt() { return alt; }
- Function *getFunc() { return func; }
-
-private:
-
- GString *name; // colorant name
- GfxColorSpace *alt; // alternate color space
- Function *func; // tint transform (into alternate color space)
- GBool nonMarking;
-};
-
-//------------------------------------------------------------------------
-// GfxDeviceNColorSpace
-//------------------------------------------------------------------------
-
-class GfxDeviceNColorSpace: public GfxColorSpace {
-public:
-
- GfxDeviceNColorSpace(int nCompsA, GfxColorSpace *alt, Function *func);
- virtual ~GfxDeviceNColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csDeviceN; }
-
- // Construct a DeviceN color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return nComps; }
- virtual void getDefaultColor(GfxColor *color);
-
- virtual GBool isNonMarking() { return nonMarking; }
-
- // DeviceN-specific access.
- GString *getColorantName(int i) { return names[i]; }
- GfxColorSpace *getAlt() { return alt; }
- Function *getTintTransformFunc() { return func; }
-
-private:
-
- int nComps; // number of components
- GString // colorant names
- *names[gfxColorMaxComps];
- GfxColorSpace *alt; // alternate color space
- Function *func; // tint transform (into alternate color space)
- GBool nonMarking;
-};
-
-//------------------------------------------------------------------------
-// GfxPatternColorSpace
-//------------------------------------------------------------------------
-
-class GfxPatternColorSpace: public GfxColorSpace {
-public:
-
- GfxPatternColorSpace(GfxColorSpace *underA);
- virtual ~GfxPatternColorSpace();
- virtual GfxColorSpace *copy();
- virtual GfxColorSpaceMode getMode() { return csPattern; }
-
- // Construct a Pattern color space. Returns NULL if unsuccessful.
- static GfxColorSpace *parse(Array *arr);
-
- virtual void getGray(GfxColor *color, GfxGray *gray);
- virtual void getRGB(GfxColor *color, GfxRGB *rgb);
- virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk);
-
- virtual int getNComps() { return 0; }
- virtual void getDefaultColor(GfxColor *color);
-
- // Pattern-specific access.
- GfxColorSpace *getUnder() { return under; }
-
-private:
-
- GfxColorSpace *under; // underlying color space (for uncolored
- // patterns)
-};
-
-//------------------------------------------------------------------------
-// GfxPattern
-//------------------------------------------------------------------------
-
-class GfxPattern {
-public:
-
- GfxPattern(int typeA);
- virtual ~GfxPattern();
-
- static GfxPattern *parse(Object *obj);
-
- virtual GfxPattern *copy() = 0;
-
- int getType() { return type; }
-
-private:
-
- int type;
-};
-
-//------------------------------------------------------------------------
-// GfxTilingPattern
-//------------------------------------------------------------------------
-
-class GfxTilingPattern: public GfxPattern {
-public:
-
- static GfxTilingPattern *parse(Object *patObj);
- virtual ~GfxTilingPattern();
-
- virtual GfxPattern *copy();
-
- int getPaintType() { return paintType; }
- int getTilingType() { return tilingType; }
- double *getBBox() { return bbox; }
- double getXStep() { return xStep; }
- double getYStep() { return yStep; }
- Dict *getResDict()
- { return resDict.isDict() ? resDict.getDict() : (Dict *)NULL; }
- double *getMatrix() { return matrix; }
- Object *getContentStream() { return &contentStream; }
-
-private:
-
- GfxTilingPattern(int paintTypeA, int tilingTypeA,
- double *bboxA, double xStepA, double yStepA,
- Object *resDictA, double *matrixA,
- Object *contentStreamA);
-
- int paintType;
- int tilingType;
- double bbox[4];
- double xStep, yStep;
- Object resDict;
- double matrix[6];
- Object contentStream;
-};
-
-//------------------------------------------------------------------------
-// GfxShadingPattern
-//------------------------------------------------------------------------
-
-class GfxShadingPattern: public GfxPattern {
-public:
-
- static GfxShadingPattern *parse(Object *patObj);
- virtual ~GfxShadingPattern();
-
- virtual GfxPattern *copy();
-
- GfxShading *getShading() { return shading; }
- double *getMatrix() { return matrix; }
-
-private:
-
- GfxShadingPattern(GfxShading *shadingA, double *matrixA);
-
- GfxShading *shading;
- double matrix[6];
-};
-
-//------------------------------------------------------------------------
-// GfxShading
-//------------------------------------------------------------------------
-
-class GfxShading {
-public:
-
- GfxShading(int typeA);
- GfxShading(GfxShading *shading);
- virtual ~GfxShading();
-
- static GfxShading *parse(Object *obj);
-
- virtual GfxShading *copy() = 0;
-
- int getType() { return type; }
- GfxColorSpace *getColorSpace() { return colorSpace; }
- GfxColor *getBackground() { return &background; }
- GBool getHasBackground() { return hasBackground; }
- void getBBox(double *xMinA, double *yMinA, double *xMaxA, double *yMaxA)
- { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; }
- GBool getHasBBox() { return hasBBox; }
-
-protected:
-
- GBool init(Dict *dict);
-
- int type;
- GfxColorSpace *colorSpace;
- GfxColor background;
- GBool hasBackground;
- double xMin, yMin, xMax, yMax;
- GBool hasBBox;
-};
-
-//------------------------------------------------------------------------
-// GfxFunctionShading
-//------------------------------------------------------------------------
-
-class GfxFunctionShading: public GfxShading {
-public:
-
- GfxFunctionShading(double x0A, double y0A,
- double x1A, double y1A,
- double *matrixA,
- Function **funcsA, int nFuncsA);
- GfxFunctionShading(GfxFunctionShading *shading);
- virtual ~GfxFunctionShading();
-
- static GfxFunctionShading *parse(Dict *dict);
-
- virtual GfxShading *copy();
-
- void getDomain(double *x0A, double *y0A, double *x1A, double *y1A)
- { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; }
- double *getMatrix() { return matrix; }
- int getNFuncs() { return nFuncs; }
- Function *getFunc(int i) { return funcs[i]; }
- void getColor(double x, double y, GfxColor *color);
-
-private:
-
- double x0, y0, x1, y1;
- double matrix[6];
- Function *funcs[gfxColorMaxComps];
- int nFuncs;
-};
-
-//------------------------------------------------------------------------
-// GfxAxialShading
-//------------------------------------------------------------------------
-
-class GfxAxialShading: public GfxShading {
-public:
-
- GfxAxialShading(double x0A, double y0A,
- double x1A, double y1A,
- double t0A, double t1A,
- Function **funcsA, int nFuncsA,
- GBool extend0A, GBool extend1A);
- GfxAxialShading(GfxAxialShading *shading);
- virtual ~GfxAxialShading();
-
- static GfxAxialShading *parse(Dict *dict);
-
- virtual GfxShading *copy();
-
- void getCoords(double *x0A, double *y0A, double *x1A, double *y1A)
- { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; }
- double getDomain0() { return t0; }
- double getDomain1() { return t1; }
- GBool getExtend0() { return extend0; }
- GBool getExtend1() { return extend1; }
- int getNFuncs() { return nFuncs; }
- Function *getFunc(int i) { return funcs[i]; }
- void getColor(double t, GfxColor *color);
-
-private:
-
- double x0, y0, x1, y1;
- double t0, t1;
- Function *funcs[gfxColorMaxComps];
- int nFuncs;
- GBool extend0, extend1;
-};
-
-//------------------------------------------------------------------------
-// GfxRadialShading
-//------------------------------------------------------------------------
-
-class GfxRadialShading: public GfxShading {
-public:
-
- GfxRadialShading(double x0A, double y0A, double r0A,
- double x1A, double y1A, double r1A,
- double t0A, double t1A,
- Function **funcsA, int nFuncsA,
- GBool extend0A, GBool extend1A);
- GfxRadialShading(GfxRadialShading *shading);
- virtual ~GfxRadialShading();
-
- static GfxRadialShading *parse(Dict *dict);
-
- virtual GfxShading *copy();
-
- void getCoords(double *x0A, double *y0A, double *r0A,
- double *x1A, double *y1A, double *r1A)
- { *x0A = x0; *y0A = y0; *r0A = r0; *x1A = x1; *y1A = y1; *r1A = r1; }
- double getDomain0() { return t0; }
- double getDomain1() { return t1; }
- GBool getExtend0() { return extend0; }
- GBool getExtend1() { return extend1; }
- int getNFuncs() { return nFuncs; }
- Function *getFunc(int i) { return funcs[i]; }
- void getColor(double t, GfxColor *color);
-
-private:
-
- double x0, y0, r0, x1, y1, r1;
- double t0, t1;
- Function *funcs[gfxColorMaxComps];
- int nFuncs;
- GBool extend0, extend1;
-};
-
-//------------------------------------------------------------------------
-// GfxGouraudTriangleShading
-//------------------------------------------------------------------------
-
-struct GfxGouraudVertex {
- double x, y;
- GfxColor color;
-};
-
-class GfxGouraudTriangleShading: public GfxShading {
-public:
-
- GfxGouraudTriangleShading(int typeA,
- GfxGouraudVertex *verticesA, int nVerticesA,
- int (*trianglesA)[3], int nTrianglesA,
- Function **funcsA, int nFuncsA);
- GfxGouraudTriangleShading(GfxGouraudTriangleShading *shading);
- virtual ~GfxGouraudTriangleShading();
-
- static GfxGouraudTriangleShading *parse(int typeA, Dict *dict, Stream *str);
-
- virtual GfxShading *copy();
-
- int getNTriangles() { return nTriangles; }
- void getTriangle(int i, double *x0, double *y0, GfxColor *color0,
- double *x1, double *y1, GfxColor *color1,
- double *x2, double *y2, GfxColor *color2);
-
-private:
-
- GfxGouraudVertex *vertices;
- int nVertices;
- int (*triangles)[3];
- int nTriangles;
- Function *funcs[gfxColorMaxComps];
- int nFuncs;
-};
-
-//------------------------------------------------------------------------
-// GfxPatchMeshShading
-//------------------------------------------------------------------------
-
-struct GfxPatch {
- double x[4][4];
- double y[4][4];
- GfxColor color[2][2];
-};
-
-class GfxPatchMeshShading: public GfxShading {
-public:
-
- GfxPatchMeshShading(int typeA, GfxPatch *patchesA, int nPatchesA,
- Function **funcsA, int nFuncsA);
- GfxPatchMeshShading(GfxPatchMeshShading *shading);
- virtual ~GfxPatchMeshShading();
-
- static GfxPatchMeshShading *parse(int typeA, Dict *dict, Stream *str);
-
- virtual GfxShading *copy();
-
- int getNPatches() { return nPatches; }
- GfxPatch *getPatch(int i) { return &patches[i]; }
-
-private:
-
- GfxPatch *patches;
- int nPatches;
- Function *funcs[gfxColorMaxComps];
- int nFuncs;
-};
-
-//------------------------------------------------------------------------
-// GfxImageColorMap
-//------------------------------------------------------------------------
-
-class GfxImageColorMap {
-public:
-
- // Constructor.
- GfxImageColorMap(int bitsA, Object *decode, GfxColorSpace *colorSpaceA);
-
- // Destructor.
- ~GfxImageColorMap();
-
- // Return a copy of this color map.
- GfxImageColorMap *copy() { return new GfxImageColorMap(this); }
-
- // Is color map valid?
- GBool isOk() { return ok; }
-
- // Get the color space.
- GfxColorSpace *getColorSpace() { return colorSpace; }
-
- // Get stream decoding info.
- int getNumPixelComps() { return nComps; }
- int getBits() { return bits; }
-
- // Get decode table.
- double getDecodeLow(int i) { return decodeLow[i]; }
- double getDecodeHigh(int i) { return decodeLow[i] + decodeRange[i]; }
-
- // Convert an image pixel to a color.
- void getGray(Guchar *x, GfxGray *gray);
- void getRGB(Guchar *x, GfxRGB *rgb);
- void getCMYK(Guchar *x, GfxCMYK *cmyk);
- void getColor(Guchar *x, GfxColor *color);
-
-private:
-
- GfxImageColorMap(GfxImageColorMap *colorMap);
-
- GfxColorSpace *colorSpace; // the image color space
- int bits; // bits per component
- int nComps; // number of components in a pixel
- GfxColorSpace *colorSpace2; // secondary color space
- int nComps2; // number of components in colorSpace2
- GfxColorComp * // lookup table
- lookup[gfxColorMaxComps];
- double // minimum values for each component
- decodeLow[gfxColorMaxComps];
- double // max - min value for each component
- decodeRange[gfxColorMaxComps];
- GBool ok;
-};
-
-//------------------------------------------------------------------------
-// GfxSubpath and GfxPath
-//------------------------------------------------------------------------
-
-class GfxSubpath {
-public:
-
- // Constructor.
- GfxSubpath(double x1, double y1);
-
- // Destructor.
- ~GfxSubpath();
-
- // Copy.
- GfxSubpath *copy() { return new GfxSubpath(this); }
-
- // Get points.
- int getNumPoints() { return n; }
- double getX(int i) { return x[i]; }
- double getY(int i) { return y[i]; }
- GBool getCurve(int i) { return curve[i]; }
-
- // Get last point.
- double getLastX() { return x[n-1]; }
- double getLastY() { return y[n-1]; }
-
- // Add a line segment.
- void lineTo(double x1, double y1);
-
- // Add a Bezier curve.
- void curveTo(double x1, double y1, double x2, double y2,
- double x3, double y3);
-
- // Close the subpath.
- void close();
- GBool isClosed() { return closed; }
-
- // Add (<dx>, <dy>) to each point in the subpath.
- void offset(double dx, double dy);
-
-private:
-
- double *x, *y; // points
- GBool *curve; // curve[i] => point i is a control point
- // for a Bezier curve
- int n; // number of points
- int size; // size of x/y arrays
- GBool closed; // set if path is closed
-
- GfxSubpath(GfxSubpath *subpath);
-};
-
-class GfxPath {
-public:
-
- // Constructor.
- GfxPath();
-
- // Destructor.
- ~GfxPath();
-
- // Copy.
- GfxPath *copy()
- { return new GfxPath(justMoved, firstX, firstY, subpaths, n, size); }
-
- // Is there a current point?
- GBool isCurPt() { return n > 0 || justMoved; }
-
- // Is the path non-empty, i.e., is there at least one segment?
- GBool isPath() { return n > 0; }
-
- // Get subpaths.
- int getNumSubpaths() { return n; }
- GfxSubpath *getSubpath(int i) { return subpaths[i]; }
-
- // Get last point on last subpath.
- double getLastX() { return subpaths[n-1]->getLastX(); }
- double getLastY() { return subpaths[n-1]->getLastY(); }
-
- // Move the current point.
- void moveTo(double x, double y);
-
- // Add a segment to the last subpath.
- void lineTo(double x, double y);
-
- // Add a Bezier curve to the last subpath
- void curveTo(double x1, double y1, double x2, double y2,
- double x3, double y3);
-
- // Close the last subpath.
- void close();
-
- // Append <path> to <this>.
- void append(GfxPath *path);
-
- // Add (<dx>, <dy>) to each point in the path.
- void offset(double dx, double dy);
-
-private:
-
- GBool justMoved; // set if a new subpath was just started
- double firstX, firstY; // first point in new subpath
- GfxSubpath **subpaths; // subpaths
- int n; // number of subpaths
- int size; // size of subpaths array
-
- GfxPath(GBool justMoved1, double firstX1, double firstY1,
- GfxSubpath **subpaths1, int n1, int size1);
-};
-
-//------------------------------------------------------------------------
-// GfxState
-//------------------------------------------------------------------------
-
-class GfxState {
-public:
-
- // Construct a default GfxState, for a device with resolution <hDPI>
- // x <vDPI>, page box <pageBox>, page rotation <rotateA>, and
- // coordinate system specified by <upsideDown>.
- GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox,
- int rotateA, GBool upsideDown);
-
- // Destructor.
- ~GfxState();
-
- // Copy.
- GfxState *copy() { return new GfxState(this); }
-
- // Accessors.
- double getHDPI() { return hDPI; }
- double getVDPI() { return vDPI; }
- double *getCTM() { return ctm; }
- double getX1() { return px1; }
- double getY1() { return py1; }
- double getX2() { return px2; }
- double getY2() { return py2; }
- double getPageWidth() { return pageWidth; }
- double getPageHeight() { return pageHeight; }
- int getRotate() { return rotate; }
- GfxColor *getFillColor() { return &fillColor; }
- GfxColor *getStrokeColor() { return &strokeColor; }
- void getFillGray(GfxGray *gray)
- { fillColorSpace->getGray(&fillColor, gray); }
- void getStrokeGray(GfxGray *gray)
- { strokeColorSpace->getGray(&strokeColor, gray); }
- void getFillRGB(GfxRGB *rgb)
- { fillColorSpace->getRGB(&fillColor, rgb); }
- void getStrokeRGB(GfxRGB *rgb)
- { strokeColorSpace->getRGB(&strokeColor, rgb); }
- void getFillCMYK(GfxCMYK *cmyk)
- { fillColorSpace->getCMYK(&fillColor, cmyk); }
- void getStrokeCMYK(GfxCMYK *cmyk)
- { strokeColorSpace->getCMYK(&strokeColor, cmyk); }
- GfxColorSpace *getFillColorSpace() { return fillColorSpace; }
- GfxColorSpace *getStrokeColorSpace() { return strokeColorSpace; }
- GfxPattern *getFillPattern() { return fillPattern; }
- GfxPattern *getStrokePattern() { return strokePattern; }
- GfxBlendMode getBlendMode() { return blendMode; }
- double getFillOpacity() { return fillOpacity; }
- double getStrokeOpacity() { return strokeOpacity; }
- GBool getFillOverprint() { return fillOverprint; }
- GBool getStrokeOverprint() { return strokeOverprint; }
- Function **getTransfer() { return transfer; }
- double getLineWidth() { return lineWidth; }
- void getLineDash(double **dash, int *length, double *start)
- { *dash = lineDash; *length = lineDashLength; *start = lineDashStart; }
- int getFlatness() { return flatness; }
- int getLineJoin() { return lineJoin; }
- int getLineCap() { return lineCap; }
- double getMiterLimit() { return miterLimit; }
- GBool getStrokeAdjust() { return strokeAdjust; }
- GfxFont *getFont() { return font; }
- double getFontSize() { return fontSize; }
- double *getTextMat() { return textMat; }
- double getCharSpace() { return charSpace; }
- double getWordSpace() { return wordSpace; }
- double getHorizScaling() { return horizScaling; }
- double getLeading() { return leading; }
- double getRise() { return rise; }
- int getRender() { return render; }
- GfxPath *getPath() { return path; }
- void setPath(GfxPath *pathA);
- double getCurX() { return curX; }
- double getCurY() { return curY; }
- void getClipBBox(double *xMin, double *yMin, double *xMax, double *yMax)
- { *xMin = clipXMin; *yMin = clipYMin; *xMax = clipXMax; *yMax = clipYMax; }
- void getUserClipBBox(double *xMin, double *yMin, double *xMax, double *yMax);
- double getLineX() { return lineX; }
- double getLineY() { return lineY; }
-
- // Is there a current point/path?
- GBool isCurPt() { return path->isCurPt(); }
- GBool isPath() { return path->isPath(); }
-
- // Transforms.
- void transform(double x1, double y1, double *x2, double *y2)
- { *x2 = ctm[0] * x1 + ctm[2] * y1 + ctm[4];
- *y2 = ctm[1] * x1 + ctm[3] * y1 + ctm[5]; }
- void transformDelta(double x1, double y1, double *x2, double *y2)
- { *x2 = ctm[0] * x1 + ctm[2] * y1;
- *y2 = ctm[1] * x1 + ctm[3] * y1; }
- void textTransform(double x1, double y1, double *x2, double *y2)
- { *x2 = textMat[0] * x1 + textMat[2] * y1 + textMat[4];
- *y2 = textMat[1] * x1 + textMat[3] * y1 + textMat[5]; }
- void textTransformDelta(double x1, double y1, double *x2, double *y2)
- { *x2 = textMat[0] * x1 + textMat[2] * y1;
- *y2 = textMat[1] * x1 + textMat[3] * y1; }
- double transformWidth(double w);
- double getTransformedLineWidth()
- { return transformWidth(lineWidth); }
- double getTransformedFontSize();
- void getFontTransMat(double *m11, double *m12, double *m21, double *m22);
-
- // Change state parameters.
- void setCTM(double a, double b, double c,
- double d, double e, double f);
- void concatCTM(double a, double b, double c,
- double d, double e, double f);
- void shiftCTM(double tx, double ty);
- void setFillColorSpace(GfxColorSpace *colorSpace);
- void setStrokeColorSpace(GfxColorSpace *colorSpace);
- void setFillColor(GfxColor *color) { fillColor = *color; }
- void setStrokeColor(GfxColor *color) { strokeColor = *color; }
- void setFillPattern(GfxPattern *pattern);
- void setStrokePattern(GfxPattern *pattern);
- void setBlendMode(GfxBlendMode mode) { blendMode = mode; }
- void setFillOpacity(double opac) { fillOpacity = opac; }
- void setStrokeOpacity(double opac) { strokeOpacity = opac; }
- void setFillOverprint(GBool op) { fillOverprint = op; }
- void setStrokeOverprint(GBool op) { strokeOverprint = op; }
- void setTransfer(Function **funcs);
- void setLineWidth(double width) { lineWidth = width; }
- void setLineDash(double *dash, int length, double start);
- void setFlatness(int flatness1) { flatness = flatness1; }
- void setLineJoin(int lineJoin1) { lineJoin = lineJoin1; }
- void setLineCap(int lineCap1) { lineCap = lineCap1; }
- void setMiterLimit(double limit) { miterLimit = limit; }
- void setStrokeAdjust(GBool sa) { strokeAdjust = sa; }
- void setFont(GfxFont *fontA, double fontSizeA)
- { font = fontA; fontSize = fontSizeA; }
- void setTextMat(double a, double b, double c,
- double d, double e, double f)
- { textMat[0] = a; textMat[1] = b; textMat[2] = c;
- textMat[3] = d; textMat[4] = e; textMat[5] = f; }
- void setCharSpace(double space)
- { charSpace = space; }
- void setWordSpace(double space)
- { wordSpace = space; }
- void setHorizScaling(double scale)
- { horizScaling = 0.01 * scale; }
- void setLeading(double leadingA)
- { leading = leadingA; }
- void setRise(double riseA)
- { rise = riseA; }
- void setRender(int renderA)
- { render = renderA; }
-
- // Add to path.
- void moveTo(double x, double y)
- { path->moveTo(curX = x, curY = y); }
- void lineTo(double x, double y)
- { path->lineTo(curX = x, curY = y); }
- void curveTo(double x1, double y1, double x2, double y2,
- double x3, double y3)
- { path->curveTo(x1, y1, x2, y2, curX = x3, curY = y3); }
- void closePath()
- { path->close(); curX = path->getLastX(); curY = path->getLastY(); }
- void clearPath();
-
- // Update clip region.
- void clip();
- void clipToStrokePath();
-
- // Text position.
- void textSetPos(double tx, double ty) { lineX = tx; lineY = ty; }
- void textMoveTo(double tx, double ty)
- { lineX = tx; lineY = ty; textTransform(tx, ty, &curX, &curY); }
- void textShift(double tx, double ty);
- void shift(double dx, double dy);
-
- // Push/pop GfxState on/off stack.
- GfxState *save();
- GfxState *restore();
- GBool hasSaves() { return saved != NULL; }
-
- // Misc
- GBool parseBlendMode(Object *obj, GfxBlendMode *mode);
-
-private:
-
- double hDPI, vDPI; // resolution
- double ctm[6]; // coord transform matrix
- double px1, py1, px2, py2; // page corners (user coords)
- double pageWidth, pageHeight; // page size (pixels)
- int rotate; // page rotation angle
-
- GfxColorSpace *fillColorSpace; // fill color space
- GfxColorSpace *strokeColorSpace; // stroke color space
- GfxColor fillColor; // fill color
- GfxColor strokeColor; // stroke color
- GfxPattern *fillPattern; // fill pattern
- GfxPattern *strokePattern; // stroke pattern
- GfxBlendMode blendMode; // transparency blend mode
- double fillOpacity; // fill opacity
- double strokeOpacity; // stroke opacity
- GBool fillOverprint; // fill overprint
- GBool strokeOverprint; // stroke overprint
- Function *transfer[4]; // transfer function (entries may be: all
- // NULL = identity; last three NULL =
- // single function; all four non-NULL =
- // R,G,B,gray functions)
-
- double lineWidth; // line width
- double *lineDash; // line dash
- int lineDashLength;
- double lineDashStart;
- int flatness; // curve flatness
- int lineJoin; // line join style
- int lineCap; // line cap style
- double miterLimit; // line miter limit
- GBool strokeAdjust; // stroke adjustment
-
- GfxFont *font; // font
- double fontSize; // font size
- double textMat[6]; // text matrix
- double charSpace; // character spacing
- double wordSpace; // word spacing
- double horizScaling; // horizontal scaling
- double leading; // text leading
- double rise; // text rise
- int render; // text rendering mode
-
- GfxPath *path; // array of path elements
- double curX, curY; // current point (user coords)
- double lineX, lineY; // start of current text line (text coords)
-
- double clipXMin, clipYMin, // bounding box for clip region
- clipXMax, clipYMax;
-
- GfxState *saved; // next GfxState on stack
-
- GfxState(GfxState *state);
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/GlobalParams.cc b/Build/source/libs/xpdf/xpdf/GlobalParams.cc
deleted file mode 100644
index 4ed52dde7fc..00000000000
--- a/Build/source/libs/xpdf/xpdf/GlobalParams.cc
+++ /dev/null
@@ -1,3090 +0,0 @@
-//========================================================================
-//
-// GlobalParams.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: GlobalParams.cc 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-#ifdef ENABLE_PLUGINS
-# ifndef WIN32
-# include <dlfcn.h>
-# endif
-#endif
-#ifdef WIN32
-# include <shlobj.h>
-#endif
-#if HAVE_PAPER_H
-#include <paper.h>
-#endif
-#include "gmem.h"
-#include "GString.h"
-#include "GList.h"
-#include "GHash.h"
-#include "gfile.h"
-#include "Error.h"
-#include "NameToCharCode.h"
-#include "CharCodeToUnicode.h"
-#include "UnicodeMap.h"
-#include "CMap.h"
-#include "BuiltinFontTables.h"
-#include "FontEncodingTables.h"
-#ifdef ENABLE_PLUGINS
-# include "XpdfPluginAPI.h"
-#endif
-#include "GlobalParams.h"
-
-#ifdef WIN32
-# define strcasecmp stricmp
-#endif
-
-#if MULTITHREADED
-# define lockGlobalParams gLockMutex(&mutex)
-# define lockUnicodeMapCache gLockMutex(&unicodeMapCacheMutex)
-# define lockCMapCache gLockMutex(&cMapCacheMutex)
-# define unlockGlobalParams gUnlockMutex(&mutex)
-# define unlockUnicodeMapCache gUnlockMutex(&unicodeMapCacheMutex)
-# define unlockCMapCache gUnlockMutex(&cMapCacheMutex)
-#else
-# define lockGlobalParams
-# define lockUnicodeMapCache
-# define lockCMapCache
-# define unlockGlobalParams
-# define unlockUnicodeMapCache
-# define unlockCMapCache
-#endif
-
-#include "NameToUnicodeTable.h"
-#include "UnicodeMapTables.h"
-#include "UTF8.h"
-
-#ifdef ENABLE_PLUGINS
-# ifdef WIN32
-extern XpdfPluginVecTable xpdfPluginVecTable;
-# endif
-#endif
-
-//------------------------------------------------------------------------
-
-#define cidToUnicodeCacheSize 4
-#define unicodeToUnicodeCacheSize 4
-
-//------------------------------------------------------------------------
-
-static struct {
- char *name;
- char *t1FileName;
- char *ttFileName;
-} displayFontTab[] = {
- {"Courier", "n022003l.pfb", "cour.ttf"},
- {"Courier-Bold", "n022004l.pfb", "courbd.ttf"},
- {"Courier-BoldOblique", "n022024l.pfb", "courbi.ttf"},
- {"Courier-Oblique", "n022023l.pfb", "couri.ttf"},
- {"Helvetica", "n019003l.pfb", "arial.ttf"},
- {"Helvetica-Bold", "n019004l.pfb", "arialbd.ttf"},
- {"Helvetica-BoldOblique", "n019024l.pfb", "arialbi.ttf"},
- {"Helvetica-Oblique", "n019023l.pfb", "ariali.ttf"},
- {"Symbol", "s050000l.pfb", NULL},
- {"Times-Bold", "n021004l.pfb", "timesbd.ttf"},
- {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf"},
- {"Times-Italic", "n021023l.pfb", "timesi.ttf"},
- {"Times-Roman", "n021003l.pfb", "times.ttf"},
- {"ZapfDingbats", "d050000l.pfb", NULL},
- {NULL}
-};
-
-#ifdef WIN32
-static char *displayFontDirs[] = {
- "c:/windows/fonts",
- "c:/winnt/fonts",
- NULL
-};
-#else
-static char *displayFontDirs[] = {
- "/usr/share/ghostscript/fonts",
- "/usr/local/share/ghostscript/fonts",
- "/usr/share/fonts/default/Type1",
- "/usr/share/fonts/default/ghostscript",
- "/usr/share/fonts/type1/gsfonts",
- NULL
-};
-#endif
-
-//------------------------------------------------------------------------
-
-GlobalParams *globalParams = NULL;
-
-//------------------------------------------------------------------------
-// DisplayFontParam
-//------------------------------------------------------------------------
-
-DisplayFontParam::DisplayFontParam(GString *nameA,
- DisplayFontParamKind kindA) {
- name = nameA;
- kind = kindA;
- switch (kind) {
- case displayFontT1:
- t1.fileName = NULL;
- break;
- case displayFontTT:
- tt.fileName = NULL;
- break;
- }
-}
-
-DisplayFontParam::~DisplayFontParam() {
- delete name;
- switch (kind) {
- case displayFontT1:
- if (t1.fileName) {
- delete t1.fileName;
- }
- break;
- case displayFontTT:
- if (tt.fileName) {
- delete tt.fileName;
- }
- break;
- }
-}
-
-#ifdef WIN32
-
-//------------------------------------------------------------------------
-// WinFontInfo
-//------------------------------------------------------------------------
-
-class WinFontInfo: public DisplayFontParam {
-public:
-
- GBool bold, italic;
-
- static WinFontInfo *make(GString *nameA, GBool boldA, GBool italicA,
- HKEY regKey, char *winFontDir);
- WinFontInfo(GString *nameA, GBool boldA, GBool italicA,
- GString *fileNameA);
- virtual ~WinFontInfo();
- GBool equals(WinFontInfo *fi);
-};
-
-WinFontInfo *WinFontInfo::make(GString *nameA, GBool boldA, GBool italicA,
- HKEY regKey, char *winFontDir) {
- GString *regName;
- GString *fileNameA;
- char buf[MAX_PATH];
- DWORD n;
- char c;
- int i;
-
- //----- find the font file
- fileNameA = NULL;
- regName = nameA->copy();
- if (boldA) {
- regName->append(" Bold");
- }
- if (italicA) {
- regName->append(" Italic");
- }
- regName->append(" (TrueType)");
- n = sizeof(buf);
- if (RegQueryValueEx(regKey, regName->getCString(), NULL, NULL,
- (LPBYTE)buf, &n) == ERROR_SUCCESS) {
- fileNameA = new GString(winFontDir);
- fileNameA->append('\\')->append(buf);
- }
- delete regName;
- if (!fileNameA) {
- delete nameA;
- return NULL;
- }
-
- //----- normalize the font name
- i = 0;
- while (i < nameA->getLength()) {
- c = nameA->getChar(i);
- if (c == ' ' || c == ',' || c == '-') {
- nameA->del(i);
- } else {
- ++i;
- }
- }
-
- return new WinFontInfo(nameA, boldA, italicA, fileNameA);
-}
-
-WinFontInfo::WinFontInfo(GString *nameA, GBool boldA, GBool italicA,
- GString *fileNameA):
- DisplayFontParam(nameA, displayFontTT)
-{
- bold = boldA;
- italic = italicA;
- tt.fileName = fileNameA;
-}
-
-WinFontInfo::~WinFontInfo() {
-}
-
-GBool WinFontInfo::equals(WinFontInfo *fi) {
- return !name->cmp(fi->name) && bold == fi->bold && italic == fi->italic;
-}
-
-//------------------------------------------------------------------------
-// WinFontList
-//------------------------------------------------------------------------
-
-class WinFontList {
-public:
-
- WinFontList(char *winFontDirA);
- ~WinFontList();
- WinFontInfo *find(GString *font);
-
-private:
-
- void add(WinFontInfo *fi);
- static int CALLBACK enumFunc1(CONST LOGFONT *font,
- CONST TEXTMETRIC *metrics,
- DWORD type, LPARAM data);
- static int CALLBACK enumFunc2(CONST LOGFONT *font,
- CONST TEXTMETRIC *metrics,
- DWORD type, LPARAM data);
-
- GList *fonts; // [WinFontInfo]
- HDC dc; // (only used during enumeration)
- HKEY regKey; // (only used during enumeration)
- char *winFontDir; // (only used during enumeration)
-};
-
-WinFontList::WinFontList(char *winFontDirA) {
- OSVERSIONINFO version;
- char *path;
-
- fonts = new GList();
- dc = GetDC(NULL);
- winFontDir = winFontDirA;
- version.dwOSVersionInfoSize = sizeof(version);
- GetVersionEx(&version);
- if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) {
- path = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts\\";
- } else {
- path = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts\\";
- }
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0,
- KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
- &regKey) == ERROR_SUCCESS) {
- EnumFonts(dc, NULL, &WinFontList::enumFunc1, (LPARAM)this);
- RegCloseKey(regKey);
- }
- ReleaseDC(NULL, dc);
-}
-
-WinFontList::~WinFontList() {
- deleteGList(fonts, WinFontInfo);
-}
-
-void WinFontList::add(WinFontInfo *fi) {
- int i;
-
- for (i = 0; i < fonts->getLength(); ++i) {
- if (((WinFontInfo *)fonts->get(i))->equals(fi)) {
- delete fi;
- return;
- }
- }
- fonts->append(fi);
-}
-
-WinFontInfo *WinFontList::find(GString *font) {
- GString *name;
- GBool bold, italic;
- WinFontInfo *fi;
- char c;
- int n, i;
-
- name = font->copy();
-
- // remove space, comma, dash chars
- i = 0;
- while (i < name->getLength()) {
- c = name->getChar(i);
- if (c == ' ' || c == ',' || c == '-') {
- name->del(i);
- } else {
- ++i;
- }
- }
- n = name->getLength();
-
- // remove trailing "MT" (Foo-MT, Foo-BoldMT, etc.)
- if (!strcmp(name->getCString() + n - 2, "MT")) {
- name->del(n - 2, 2);
- n -= 2;
- }
-
- // look for "Italic"
- if (!strcmp(name->getCString() + n - 6, "Italic")) {
- name->del(n - 6, 6);
- italic = gTrue;
- n -= 6;
- } else {
- italic = gFalse;
- }
-
- // look for "Bold"
- if (!strcmp(name->getCString() + n - 4, "Bold")) {
- name->del(n - 4, 4);
- bold = gTrue;
- n -= 4;
- } else {
- bold = gFalse;
- }
-
- // remove trailing "MT" (FooMT-Bold, etc.)
- if (!strcmp(name->getCString() + n - 2, "MT")) {
- name->del(n - 2, 2);
- n -= 2;
- }
-
- // remove trailing "PS"
- if (!strcmp(name->getCString() + n - 2, "PS")) {
- name->del(n - 2, 2);
- n -= 2;
- }
-
- // search for the font
- fi = NULL;
- for (i = 0; i < fonts->getLength(); ++i) {
- fi = (WinFontInfo *)fonts->get(i);
- if (!fi->name->cmp(name) && fi->bold == bold && fi->italic == italic) {
- break;
- }
- fi = NULL;
- }
-
- delete name;
- return fi;
-}
-
-int CALLBACK WinFontList::enumFunc1(CONST LOGFONT *font,
- CONST TEXTMETRIC *metrics,
- DWORD type, LPARAM data) {
- WinFontList *fl = (WinFontList *)data;
-
- EnumFonts(fl->dc, font->lfFaceName, &WinFontList::enumFunc2, (LPARAM)fl);
- return 1;
-}
-
-int CALLBACK WinFontList::enumFunc2(CONST LOGFONT *font,
- CONST TEXTMETRIC *metrics,
- DWORD type, LPARAM data) {
- WinFontList *fl = (WinFontList *)data;
- WinFontInfo *fi;
-
- if (type & TRUETYPE_FONTTYPE) {
- if ((fi = WinFontInfo::make(new GString(font->lfFaceName),
- font->lfWeight >= 600,
- font->lfItalic ? gTrue : gFalse,
- fl->regKey, fl->winFontDir))) {
- fl->add(fi);
- }
- }
- return 1;
-}
-
-#endif // WIN32
-
-//------------------------------------------------------------------------
-// PSFontParam
-//------------------------------------------------------------------------
-
-PSFontParam::PSFontParam(GString *pdfFontNameA, int wModeA,
- GString *psFontNameA, GString *encodingA) {
- pdfFontName = pdfFontNameA;
- wMode = wModeA;
- psFontName = psFontNameA;
- encoding = encodingA;
-}
-
-PSFontParam::~PSFontParam() {
- delete pdfFontName;
- delete psFontName;
- if (encoding) {
- delete encoding;
- }
-}
-
-#ifndef PDF_PARSER_ONLY
-//------------------------------------------------------------------------
-// KeyBinding
-//------------------------------------------------------------------------
-
-KeyBinding::KeyBinding(int codeA, int modsA, int contextA, char *cmd0) {
- code = codeA;
- mods = modsA;
- context = contextA;
- cmds = new GList();
- cmds->append(new GString(cmd0));
-}
-
-KeyBinding::KeyBinding(int codeA, int modsA, int contextA,
- char *cmd0, char *cmd1) {
- code = codeA;
- mods = modsA;
- context = contextA;
- cmds = new GList();
- cmds->append(new GString(cmd0));
- cmds->append(new GString(cmd1));
-}
-
-KeyBinding::KeyBinding(int codeA, int modsA, int contextA, GList *cmdsA) {
- code = codeA;
- mods = modsA;
- context = contextA;
- cmds = cmdsA;
-}
-
-KeyBinding::~KeyBinding() {
- deleteGList(cmds, GString);
-}
-#endif
-
-#ifdef ENABLE_PLUGINS
-//------------------------------------------------------------------------
-// Plugin
-//------------------------------------------------------------------------
-
-class Plugin {
-public:
-
- static Plugin *load(char *type, char *name);
- ~Plugin();
-
-private:
-
-#ifdef WIN32
- Plugin(HMODULE libA);
- HMODULE lib;
-#else
- Plugin(void *dlA);
- void *dl;
-#endif
-};
-
-Plugin *Plugin::load(char *type, char *name) {
- GString *path;
- Plugin *plugin;
- XpdfPluginVecTable *vt;
- XpdfBool (*xpdfInitPlugin)(void);
-#ifdef WIN32
- HMODULE libA;
-#else
- void *dlA;
-#endif
-
- path = globalParams->getBaseDir();
- appendToPath(path, "plugins");
- appendToPath(path, type);
- appendToPath(path, name);
-
-#ifdef WIN32
- path->append(".dll");
- if (!(libA = LoadLibrary(path->getCString()))) {
- error(-1, "Failed to load plugin '%s'",
- path->getCString());
- goto err1;
- }
- if (!(vt = (XpdfPluginVecTable *)
- GetProcAddress(libA, "xpdfPluginVecTable"))) {
- error(-1, "Failed to find xpdfPluginVecTable in plugin '%s'",
- path->getCString());
- goto err2;
- }
-#else
- //~ need to deal with other extensions here
- path->append(".so");
- if (!(dlA = dlopen(path->getCString(), RTLD_NOW))) {
- error(-1, "Failed to load plugin '%s': %s",
- path->getCString(), dlerror());
- goto err1;
- }
- if (!(vt = (XpdfPluginVecTable *)dlsym(dlA, "xpdfPluginVecTable"))) {
- error(-1, "Failed to find xpdfPluginVecTable in plugin '%s'",
- path->getCString());
- goto err2;
- }
-#endif
-
- if (vt->version != xpdfPluginVecTable.version) {
- error(-1, "Plugin '%s' is wrong version", path->getCString());
- goto err2;
- }
- memcpy(vt, &xpdfPluginVecTable, sizeof(xpdfPluginVecTable));
-
-#ifdef WIN32
- if (!(xpdfInitPlugin = (XpdfBool (*)(void))
- GetProcAddress(libA, "xpdfInitPlugin"))) {
- error(-1, "Failed to find xpdfInitPlugin in plugin '%s'",
- path->getCString());
- goto err2;
- }
-#else
- if (!(xpdfInitPlugin = (XpdfBool (*)(void))dlsym(dlA, "xpdfInitPlugin"))) {
- error(-1, "Failed to find xpdfInitPlugin in plugin '%s'",
- path->getCString());
- goto err2;
- }
-#endif
-
- if (!(*xpdfInitPlugin)()) {
- error(-1, "Initialization of plugin '%s' failed",
- path->getCString());
- goto err2;
- }
-
-#ifdef WIN32
- plugin = new Plugin(libA);
-#else
- plugin = new Plugin(dlA);
-#endif
-
- delete path;
- return plugin;
-
- err2:
-#ifdef WIN32
- FreeLibrary(libA);
-#else
- dlclose(dlA);
-#endif
- err1:
- delete path;
- return NULL;
-}
-
-#ifdef WIN32
-Plugin::Plugin(HMODULE libA) {
- lib = libA;
-}
-#else
-Plugin::Plugin(void *dlA) {
- dl = dlA;
-}
-#endif
-
-Plugin::~Plugin() {
- void (*xpdfFreePlugin)(void);
-
-#ifdef WIN32
- if ((xpdfFreePlugin = (void (*)(void))
- GetProcAddress(lib, "xpdfFreePlugin"))) {
- (*xpdfFreePlugin)();
- }
- FreeLibrary(lib);
-#else
- if ((xpdfFreePlugin = (void (*)(void))dlsym(dl, "xpdfFreePlugin"))) {
- (*xpdfFreePlugin)();
- }
- dlclose(dl);
-#endif
-}
-
-#endif // ENABLE_PLUGINS
-
-//------------------------------------------------------------------------
-// parsing
-//------------------------------------------------------------------------
-
-GlobalParams::GlobalParams() {
- UnicodeMap *map;
- int i;
-
-#if MULTITHREADED
- gInitMutex(&mutex);
- gInitMutex(&unicodeMapCacheMutex);
- gInitMutex(&cMapCacheMutex);
-#endif
-
- initBuiltinFontTables();
-
- // scan the encoding in reverse because we want the lowest-numbered
- // index for each char name ('space' is encoded twice)
- macRomanReverseMap = new NameToCharCode();
- for (i = 255; i >= 0; --i) {
- if (macRomanEncoding[i]) {
- macRomanReverseMap->add(macRomanEncoding[i], (CharCode)i);
- }
- }
-
-#ifdef WIN32
- // baseDir will be set by a call to setBaseDir
- baseDir = new GString();
-#else
- baseDir = appendToPath(getHomeDir(), ".xpdf");
-#endif
- nameToUnicode = new NameToCharCode();
- cidToUnicodes = new GHash(gTrue);
- unicodeToUnicodes = new GHash(gTrue);
- residentUnicodeMaps = new GHash();
- unicodeMaps = new GHash(gTrue);
- cMapDirs = new GHash(gTrue);
- toUnicodeDirs = new GList();
- displayFonts = new GHash();
- displayCIDFonts = new GHash();
- displayNamedCIDFonts = new GHash();
-#if HAVE_PAPER_H
- char *paperName;
- const struct paper *paperType;
- paperinit();
- if ((paperName = systempapername())) {
- paperType = paperinfo(paperName);
- psPaperWidth = (int)paperpswidth(paperType);
- psPaperHeight = (int)paperpsheight(paperType);
- } else {
- error(-1, "No paper information available - using defaults");
- psPaperWidth = defPaperWidth;
- psPaperHeight = defPaperHeight;
- }
- paperdone();
-#else
- psPaperWidth = defPaperWidth;
- psPaperHeight = defPaperHeight;
-#endif
- psImageableLLX = psImageableLLY = 0;
- psImageableURX = psPaperWidth;
- psImageableURY = psPaperHeight;
- psCrop = gTrue;
- psExpandSmaller = gFalse;
- psShrinkLarger = gTrue;
- psCenter = gTrue;
- psDuplex = gFalse;
- psLevel = psLevel2;
- psFile = NULL;
- psFonts = new GHash();
- psNamedFonts16 = new GList();
- psFonts16 = new GList();
- psEmbedType1 = gTrue;
- psEmbedTrueType = gTrue;
- psEmbedCIDPostScript = gTrue;
- psEmbedCIDTrueType = gTrue;
- psOPI = gFalse;
- psASCIIHex = gFalse;
- textEncoding = new GString("Latin1");
-#if defined(WIN32)
- textEOL = eolDOS;
-#elif defined(MACOS)
- textEOL = eolMac;
-#else
- textEOL = eolUnix;
-#endif
- textPageBreaks = gTrue;
- textKeepTinyChars = gFalse;
- fontDirs = new GList();
- initialZoom = new GString("125");
- continuousView = gFalse;
- enableT1lib = gTrue;
- enableFreeType = gTrue;
- antialias = gTrue;
- urlCommand = NULL;
- movieCommand = NULL;
- mapNumericCharNames = gTrue;
- printCommands = gFalse;
- errQuiet = gFalse;
-
- cidToUnicodeCache = new CharCodeToUnicodeCache(cidToUnicodeCacheSize);
- unicodeToUnicodeCache =
- new CharCodeToUnicodeCache(unicodeToUnicodeCacheSize);
- unicodeMapCache = new UnicodeMapCache();
- cMapCache = new CMapCache();
-
-#ifdef ENABLE_PLUGINS
- plugins = new GList();
- securityHandlers = new GList();
-#endif
-
- // set up the initial nameToUnicode table
- for (i = 0; nameToUnicodeTab[i].name; ++i) {
- nameToUnicode->add(nameToUnicodeTab[i].name, nameToUnicodeTab[i].u);
- }
-
- // set up the residentUnicodeMaps table
- map = new UnicodeMap("Latin1", gFalse,
- latin1UnicodeMapRanges, latin1UnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("ASCII7", gFalse,
- ascii7UnicodeMapRanges, ascii7UnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("Symbol", gFalse,
- symbolUnicodeMapRanges, symbolUnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("ZapfDingbats", gFalse, zapfDingbatsUnicodeMapRanges,
- zapfDingbatsUnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("UTF-8", gTrue, &mapUTF8);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("UCS-2", gTrue, &mapUCS2);
- residentUnicodeMaps->add(map->getEncodingName(), map);
-
-}
-
-GlobalParams::GlobalParams(char *cfgFileName) {
- UnicodeMap *map;
- GString *fileName;
- FILE *f;
- int i;
-
-#if MULTITHREADED
- gInitMutex(&mutex);
- gInitMutex(&unicodeMapCacheMutex);
- gInitMutex(&cMapCacheMutex);
-#endif
-
- initBuiltinFontTables();
-
- // scan the encoding in reverse because we want the lowest-numbered
- // index for each char name ('space' is encoded twice)
- macRomanReverseMap = new NameToCharCode();
- for (i = 255; i >= 0; --i) {
- if (macRomanEncoding[i]) {
- macRomanReverseMap->add(macRomanEncoding[i], (CharCode)i);
- }
- }
-
-#ifdef WIN32
- // baseDir will be set by a call to setBaseDir
- baseDir = new GString();
-#else
- baseDir = appendToPath(getHomeDir(), ".xpdf");
-#endif
- nameToUnicode = new NameToCharCode();
- cidToUnicodes = new GHash(gTrue);
- unicodeToUnicodes = new GHash(gTrue);
- residentUnicodeMaps = new GHash();
- unicodeMaps = new GHash(gTrue);
- cMapDirs = new GHash(gTrue);
- toUnicodeDirs = new GList();
- displayFonts = new GHash();
- displayCIDFonts = new GHash();
- displayNamedCIDFonts = new GHash();
-#if HAVE_PAPER_H
- char *paperName;
- const struct paper *paperType;
- paperinit();
- if ((paperName = systempapername())) {
- paperType = paperinfo(paperName);
- psPaperWidth = (int)paperpswidth(paperType);
- psPaperHeight = (int)paperpsheight(paperType);
- } else {
- error(-1, "No paper information available - using defaults");
- psPaperWidth = defPaperWidth;
- psPaperHeight = defPaperHeight;
- }
- paperdone();
-#else
- psPaperWidth = defPaperWidth;
- psPaperHeight = defPaperHeight;
-#endif
- psImageableLLX = psImageableLLY = 0;
- psImageableURX = psPaperWidth;
- psImageableURY = psPaperHeight;
- psCrop = gTrue;
- psExpandSmaller = gFalse;
- psShrinkLarger = gTrue;
- psCenter = gTrue;
- psDuplex = gFalse;
- psLevel = psLevel2;
- psFile = NULL;
- psFonts = new GHash();
- psNamedFonts16 = new GList();
- psFonts16 = new GList();
- psEmbedType1 = gTrue;
- psEmbedTrueType = gTrue;
- psEmbedCIDPostScript = gTrue;
- psEmbedCIDTrueType = gTrue;
- psPreload = gFalse;
- psOPI = gFalse;
- psASCIIHex = gFalse;
- textEncoding = new GString("Latin1");
-#if defined(WIN32)
- textEOL = eolDOS;
-#elif defined(MACOS)
- textEOL = eolMac;
-#else
- textEOL = eolUnix;
-#endif
- textPageBreaks = gTrue;
- textKeepTinyChars = gFalse;
- fontDirs = new GList();
- initialZoom = new GString("125");
- continuousView = gFalse;
- enableT1lib = gTrue;
- enableFreeType = gTrue;
- antialias = gTrue;
- vectorAntialias = gTrue;
- strokeAdjust = gTrue;
- screenType = screenUnset;
- screenSize = -1;
- screenDotRadius = -1;
- screenGamma = 1.0;
- screenBlackThreshold = 0.0;
- screenWhiteThreshold = 1.0;
- urlCommand = NULL;
- movieCommand = NULL;
- mapNumericCharNames = gTrue;
- mapUnknownCharNames = gFalse;
-#ifndef PDF_PARSER_ONLY
- createDefaultKeyBindings();
-#endif
- printCommands = gFalse;
- errQuiet = gFalse;
-
- cidToUnicodeCache = new CharCodeToUnicodeCache(cidToUnicodeCacheSize);
- unicodeToUnicodeCache =
- new CharCodeToUnicodeCache(unicodeToUnicodeCacheSize);
- unicodeMapCache = new UnicodeMapCache();
- cMapCache = new CMapCache();
-
-#ifdef WIN32
- winFontList = NULL;
-#endif
-
-#ifdef ENABLE_PLUGINS
- plugins = new GList();
- securityHandlers = new GList();
-#endif
-
- // set up the initial nameToUnicode table
- for (i = 0; nameToUnicodeTab[i].name; ++i) {
- nameToUnicode->add(nameToUnicodeTab[i].name, nameToUnicodeTab[i].u);
- }
-
- // set up the residentUnicodeMaps table
- map = new UnicodeMap("Latin1", gFalse,
- latin1UnicodeMapRanges, latin1UnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("ASCII7", gFalse,
- ascii7UnicodeMapRanges, ascii7UnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("Symbol", gFalse,
- symbolUnicodeMapRanges, symbolUnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("ZapfDingbats", gFalse, zapfDingbatsUnicodeMapRanges,
- zapfDingbatsUnicodeMapLen);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("UTF-8", gTrue, &mapUTF8);
- residentUnicodeMaps->add(map->getEncodingName(), map);
- map = new UnicodeMap("UCS-2", gTrue, &mapUCS2);
- residentUnicodeMaps->add(map->getEncodingName(), map);
-
- // look for a user config file, then a system-wide config file
- f = NULL;
- fileName = NULL;
- if (cfgFileName && cfgFileName[0]) {
- fileName = new GString(cfgFileName);
- if (!(f = fopen(fileName->getCString(), "r"))) {
- delete fileName;
- }
- }
- if (!f) {
- fileName = appendToPath(getHomeDir(), xpdfUserConfigFile);
- if (!(f = fopen(fileName->getCString(), "r"))) {
- delete fileName;
- }
- }
- if (!f) {
-#if defined(WIN32) && !defined(__CYGWIN32__)
- char buf[512];
- i = GetModuleFileName(NULL, buf, sizeof(buf));
- if (i <= 0 || i >= sizeof(buf)) {
- // error or path too long for buffer - just use the current dir
- buf[0] = '\0';
- }
- fileName = grabPath(buf);
- appendToPath(fileName, xpdfSysConfigFile);
-#else
- fileName = new GString(xpdfSysConfigFile);
-#endif
- if (!(f = fopen(fileName->getCString(), "r"))) {
- delete fileName;
- }
- }
- if (f) {
-#ifndef PDF_PARSER_ONLY
- parseFile(fileName, f);
-#endif
- delete fileName;
- fclose(f);
- }
-}
-
-#ifndef PDF_PARSER_ONLY
-void GlobalParams::createDefaultKeyBindings() {
- keyBindings = new GList();
-
- //----- mouse buttons
- keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress1, xpdfKeyModNone,
- xpdfKeyContextAny, "startSelection"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMouseRelease1, xpdfKeyModNone,
- xpdfKeyContextAny, "endSelection",
- "followLinkNoSel"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress2, xpdfKeyModNone,
- xpdfKeyContextAny, "startPan"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMouseRelease2, xpdfKeyModNone,
- xpdfKeyContextAny, "endPan"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress3, xpdfKeyModNone,
- xpdfKeyContextAny, "postPopupMenu"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress4, xpdfKeyModNone,
- xpdfKeyContextAny,
- "scrollUpPrevPage(16)"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress5, xpdfKeyModNone,
- xpdfKeyContextAny,
- "scrollDownNextPage(16)"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress6, xpdfKeyModNone,
- xpdfKeyContextAny, "scrollLeft(16)"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress7, xpdfKeyModNone,
- xpdfKeyContextAny, "scrollRight(16)"));
-
- //----- keys
- keyBindings->append(new KeyBinding(xpdfKeyCodeHome, xpdfKeyModCtrl,
- xpdfKeyContextAny, "gotoPage(1)"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeHome, xpdfKeyModNone,
- xpdfKeyContextAny, "scrollToTopLeft"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeEnd, xpdfKeyModCtrl,
- xpdfKeyContextAny, "gotoLastPage"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeEnd, xpdfKeyModNone,
- xpdfKeyContextAny,
- "scrollToBottomRight"));
- keyBindings->append(new KeyBinding(xpdfKeyCodePgUp, xpdfKeyModNone,
- xpdfKeyContextAny, "pageUp"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeBackspace, xpdfKeyModNone,
- xpdfKeyContextAny, "pageUp"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeDelete, xpdfKeyModNone,
- xpdfKeyContextAny, "pageUp"));
- keyBindings->append(new KeyBinding(xpdfKeyCodePgDn, xpdfKeyModNone,
- xpdfKeyContextAny, "pageDown"));
- keyBindings->append(new KeyBinding(' ', xpdfKeyModNone,
- xpdfKeyContextAny, "pageDown"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeLeft, xpdfKeyModNone,
- xpdfKeyContextAny, "scrollLeft(16)"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeRight, xpdfKeyModNone,
- xpdfKeyContextAny, "scrollRight(16)"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeUp, xpdfKeyModNone,
- xpdfKeyContextAny, "scrollUp(16)"));
- keyBindings->append(new KeyBinding(xpdfKeyCodeDown, xpdfKeyModNone,
- xpdfKeyContextAny, "scrollDown(16)"));
- keyBindings->append(new KeyBinding('o', xpdfKeyModNone,
- xpdfKeyContextAny, "open"));
- keyBindings->append(new KeyBinding('O', xpdfKeyModNone,
- xpdfKeyContextAny, "open"));
- keyBindings->append(new KeyBinding('r', xpdfKeyModNone,
- xpdfKeyContextAny, "reload"));
- keyBindings->append(new KeyBinding('R', xpdfKeyModNone,
- xpdfKeyContextAny, "reload"));
- keyBindings->append(new KeyBinding('f', xpdfKeyModNone,
- xpdfKeyContextAny, "find"));
- keyBindings->append(new KeyBinding('F', xpdfKeyModNone,
- xpdfKeyContextAny, "find"));
- keyBindings->append(new KeyBinding('f', xpdfKeyModCtrl,
- xpdfKeyContextAny, "find"));
- keyBindings->append(new KeyBinding('g', xpdfKeyModCtrl,
- xpdfKeyContextAny, "findNext"));
- keyBindings->append(new KeyBinding('p', xpdfKeyModCtrl,
- xpdfKeyContextAny, "print"));
- keyBindings->append(new KeyBinding('n', xpdfKeyModNone,
- xpdfKeyContextScrLockOff, "nextPage"));
- keyBindings->append(new KeyBinding('N', xpdfKeyModNone,
- xpdfKeyContextScrLockOff, "nextPage"));
- keyBindings->append(new KeyBinding('n', xpdfKeyModNone,
- xpdfKeyContextScrLockOn,
- "nextPageNoScroll"));
- keyBindings->append(new KeyBinding('N', xpdfKeyModNone,
- xpdfKeyContextScrLockOn,
- "nextPageNoScroll"));
- keyBindings->append(new KeyBinding('p', xpdfKeyModNone,
- xpdfKeyContextScrLockOff, "prevPage"));
- keyBindings->append(new KeyBinding('P', xpdfKeyModNone,
- xpdfKeyContextScrLockOff, "prevPage"));
- keyBindings->append(new KeyBinding('p', xpdfKeyModNone,
- xpdfKeyContextScrLockOn,
- "prevPageNoScroll"));
- keyBindings->append(new KeyBinding('P', xpdfKeyModNone,
- xpdfKeyContextScrLockOn,
- "prevPageNoScroll"));
- keyBindings->append(new KeyBinding('v', xpdfKeyModNone,
- xpdfKeyContextAny, "goForward"));
- keyBindings->append(new KeyBinding('b', xpdfKeyModNone,
- xpdfKeyContextAny, "goBackward"));
- keyBindings->append(new KeyBinding('g', xpdfKeyModNone,
- xpdfKeyContextAny, "focusToPageNum"));
- keyBindings->append(new KeyBinding('0', xpdfKeyModNone,
- xpdfKeyContextAny, "zoomPercent(125)"));
- keyBindings->append(new KeyBinding('+', xpdfKeyModNone,
- xpdfKeyContextAny, "zoomIn"));
- keyBindings->append(new KeyBinding('-', xpdfKeyModNone,
- xpdfKeyContextAny, "zoomOut"));
- keyBindings->append(new KeyBinding('z', xpdfKeyModNone,
- xpdfKeyContextAny, "zoomFitPage"));
- keyBindings->append(new KeyBinding('w', xpdfKeyModNone,
- xpdfKeyContextAny, "zoomFitWidth"));
- keyBindings->append(new KeyBinding('f', xpdfKeyModAlt,
- xpdfKeyContextAny,
- "toggleFullScreenMode"));
- keyBindings->append(new KeyBinding('l', xpdfKeyModCtrl,
- xpdfKeyContextAny, "redraw"));
- keyBindings->append(new KeyBinding('w', xpdfKeyModCtrl,
- xpdfKeyContextAny, "closeWindow"));
- keyBindings->append(new KeyBinding('?', xpdfKeyModNone,
- xpdfKeyContextAny, "about"));
- keyBindings->append(new KeyBinding('q', xpdfKeyModNone,
- xpdfKeyContextAny, "quit"));
- keyBindings->append(new KeyBinding('Q', xpdfKeyModNone,
- xpdfKeyContextAny, "quit"));
-}
-
-void GlobalParams::parseFile(GString *fileName, FILE *f) {
- int line;
- char buf[512];
-
- line = 1;
- while (getLine(buf, sizeof(buf) - 1, f)) {
- parseLine(buf, fileName, line);
- ++line;
- }
-}
-
-void GlobalParams::parseLine(char *buf, GString *fileName, int line) {
- GList *tokens;
- GString *cmd, *incFile;
- char *p1, *p2;
- FILE *f2;
-
- // break the line into tokens
- tokens = new GList();
- p1 = buf;
- while (*p1) {
- for (; *p1 && isspace(*p1); ++p1) ;
- if (!*p1) {
- break;
- }
- if (*p1 == '"' || *p1 == '\'') {
- for (p2 = p1 + 1; *p2 && *p2 != *p1; ++p2) ;
- ++p1;
- } else {
- for (p2 = p1 + 1; *p2 && !isspace(*p2); ++p2) ;
- }
- tokens->append(new GString(p1, p2 - p1));
- p1 = *p2 ? p2 + 1 : p2;
- }
-
- // parse the line
- if (tokens->getLength() > 0 &&
- ((GString *)tokens->get(0))->getChar(0) != '#') {
- cmd = (GString *)tokens->get(0);
- if (!cmd->cmp("include")) {
- if (tokens->getLength() == 2) {
- incFile = (GString *)tokens->get(1);
- if ((f2 = fopen(incFile->getCString(), "r"))) {
- parseFile(incFile, f2);
- fclose(f2);
- } else {
- error(-1, "Couldn't find included config file: '%s' (%s:%d)",
- incFile->getCString(), fileName->getCString(), line);
- }
- } else {
- error(-1, "Bad 'include' config file command (%s:%d)",
- fileName->getCString(), line);
- }
- } else if (!cmd->cmp("nameToUnicode")) {
- parseNameToUnicode(tokens, fileName, line);
- } else if (!cmd->cmp("cidToUnicode")) {
- parseCIDToUnicode(tokens, fileName, line);
- } else if (!cmd->cmp("unicodeToUnicode")) {
- parseUnicodeToUnicode(tokens, fileName, line);
- } else if (!cmd->cmp("unicodeMap")) {
- parseUnicodeMap(tokens, fileName, line);
- } else if (!cmd->cmp("cMapDir")) {
- parseCMapDir(tokens, fileName, line);
- } else if (!cmd->cmp("toUnicodeDir")) {
- parseToUnicodeDir(tokens, fileName, line);
- } else if (!cmd->cmp("displayFontT1")) {
- parseDisplayFont(tokens, displayFonts, displayFontT1, fileName, line);
- } else if (!cmd->cmp("displayFontTT")) {
- parseDisplayFont(tokens, displayFonts, displayFontTT, fileName, line);
- } else if (!cmd->cmp("displayNamedCIDFontT1")) {
- parseDisplayFont(tokens, displayNamedCIDFonts,
- displayFontT1, fileName, line);
- } else if (!cmd->cmp("displayCIDFontT1")) {
- parseDisplayFont(tokens, displayCIDFonts,
- displayFontT1, fileName, line);
- } else if (!cmd->cmp("displayNamedCIDFontTT")) {
- parseDisplayFont(tokens, displayNamedCIDFonts,
- displayFontTT, fileName, line);
- } else if (!cmd->cmp("displayCIDFontTT")) {
- parseDisplayFont(tokens, displayCIDFonts,
- displayFontTT, fileName, line);
- } else if (!cmd->cmp("psFile")) {
- parsePSFile(tokens, fileName, line);
- } else if (!cmd->cmp("psFont")) {
- parsePSFont(tokens, fileName, line);
- } else if (!cmd->cmp("psNamedFont16")) {
- parsePSFont16("psNamedFont16", psNamedFonts16,
- tokens, fileName, line);
- } else if (!cmd->cmp("psFont16")) {
- parsePSFont16("psFont16", psFonts16, tokens, fileName, line);
- } else if (!cmd->cmp("psPaperSize")) {
- parsePSPaperSize(tokens, fileName, line);
- } else if (!cmd->cmp("psImageableArea")) {
- parsePSImageableArea(tokens, fileName, line);
- } else if (!cmd->cmp("psCrop")) {
- parseYesNo("psCrop", &psCrop, tokens, fileName, line);
- } else if (!cmd->cmp("psExpandSmaller")) {
- parseYesNo("psExpandSmaller", &psExpandSmaller,
- tokens, fileName, line);
- } else if (!cmd->cmp("psShrinkLarger")) {
- parseYesNo("psShrinkLarger", &psShrinkLarger, tokens, fileName, line);
- } else if (!cmd->cmp("psCenter")) {
- parseYesNo("psCenter", &psCenter, tokens, fileName, line);
- } else if (!cmd->cmp("psDuplex")) {
- parseYesNo("psDuplex", &psDuplex, tokens, fileName, line);
- } else if (!cmd->cmp("psLevel")) {
- parsePSLevel(tokens, fileName, line);
- } else if (!cmd->cmp("psEmbedType1Fonts")) {
- parseYesNo("psEmbedType1", &psEmbedType1, tokens, fileName, line);
- } else if (!cmd->cmp("psEmbedTrueTypeFonts")) {
- parseYesNo("psEmbedTrueType", &psEmbedTrueType,
- tokens, fileName, line);
- } else if (!cmd->cmp("psEmbedCIDPostScriptFonts")) {
- parseYesNo("psEmbedCIDPostScript", &psEmbedCIDPostScript,
- tokens, fileName, line);
- } else if (!cmd->cmp("psEmbedCIDTrueTypeFonts")) {
- parseYesNo("psEmbedCIDTrueType", &psEmbedCIDTrueType,
- tokens, fileName, line);
- } else if (!cmd->cmp("psPreload")) {
- parseYesNo("psPreload", &psPreload, tokens, fileName, line);
- } else if (!cmd->cmp("psOPI")) {
- parseYesNo("psOPI", &psOPI, tokens, fileName, line);
- } else if (!cmd->cmp("psASCIIHex")) {
- parseYesNo("psASCIIHex", &psASCIIHex, tokens, fileName, line);
- } else if (!cmd->cmp("textEncoding")) {
- parseTextEncoding(tokens, fileName, line);
- } else if (!cmd->cmp("textEOL")) {
- parseTextEOL(tokens, fileName, line);
- } else if (!cmd->cmp("textPageBreaks")) {
- parseYesNo("textPageBreaks", &textPageBreaks,
- tokens, fileName, line);
- } else if (!cmd->cmp("textKeepTinyChars")) {
- parseYesNo("textKeepTinyChars", &textKeepTinyChars,
- tokens, fileName, line);
- } else if (!cmd->cmp("fontDir")) {
- parseFontDir(tokens, fileName, line);
- } else if (!cmd->cmp("initialZoom")) {
- parseInitialZoom(tokens, fileName, line);
- } else if (!cmd->cmp("continuousView")) {
- parseYesNo("continuousView", &continuousView, tokens, fileName, line);
- } else if (!cmd->cmp("enableT1lib")) {
- parseYesNo("enableT1lib", &enableT1lib, tokens, fileName, line);
- } else if (!cmd->cmp("enableFreeType")) {
- parseYesNo("enableFreeType", &enableFreeType, tokens, fileName, line);
- } else if (!cmd->cmp("antialias")) {
- parseYesNo("antialias", &antialias, tokens, fileName, line);
- } else if (!cmd->cmp("vectorAntialias")) {
- parseYesNo("vectorAntialias", &vectorAntialias,
- tokens, fileName, line);
- } else if (!cmd->cmp("strokeAdjust")) {
- parseYesNo("strokeAdjust", &strokeAdjust, tokens, fileName, line);
- } else if (!cmd->cmp("screenType")) {
- parseScreenType(tokens, fileName, line);
- } else if (!cmd->cmp("screenSize")) {
- parseInteger("screenSize", &screenSize, tokens, fileName, line);
- } else if (!cmd->cmp("screenDotRadius")) {
- parseInteger("screenDotRadius", &screenDotRadius,
- tokens, fileName, line);
- } else if (!cmd->cmp("screenGamma")) {
- parseFloat("screenGamma", &screenGamma,
- tokens, fileName, line);
- } else if (!cmd->cmp("screenBlackThreshold")) {
- parseFloat("screenBlackThreshold", &screenBlackThreshold,
- tokens, fileName, line);
- } else if (!cmd->cmp("screenWhiteThreshold")) {
- parseFloat("screenWhiteThreshold", &screenWhiteThreshold,
- tokens, fileName, line);
- } else if (!cmd->cmp("urlCommand")) {
- parseCommand("urlCommand", &urlCommand, tokens, fileName, line);
- } else if (!cmd->cmp("movieCommand")) {
- parseCommand("movieCommand", &movieCommand, tokens, fileName, line);
- } else if (!cmd->cmp("mapNumericCharNames")) {
- parseYesNo("mapNumericCharNames", &mapNumericCharNames,
- tokens, fileName, line);
- } else if (!cmd->cmp("mapUnknownCharNames")) {
- parseYesNo("mapUnknownCharNames", &mapUnknownCharNames,
- tokens, fileName, line);
- } else if (!cmd->cmp("bind")) {
- parseBind(tokens, fileName, line);
- } else if (!cmd->cmp("unbind")) {
- parseUnbind(tokens, fileName, line);
- } else if (!cmd->cmp("printCommands")) {
- parseYesNo("printCommands", &printCommands, tokens, fileName, line);
- } else if (!cmd->cmp("errQuiet")) {
- parseYesNo("errQuiet", &errQuiet, tokens, fileName, line);
- } else {
- error(-1, "Unknown config file command '%s' (%s:%d)",
- cmd->getCString(), fileName->getCString(), line);
- if (!cmd->cmp("displayFontX") ||
- !cmd->cmp("displayNamedCIDFontX") ||
- !cmd->cmp("displayCIDFontX")) {
- error(-1, "-- Xpdf no longer supports X fonts");
- } else if (!cmd->cmp("t1libControl") || !cmd->cmp("freetypeControl")) {
- error(-1, "-- The t1libControl and freetypeControl options have been replaced");
- error(-1, " by the enableT1lib, enableFreeType, and antialias options");
- } else if (!cmd->cmp("fontpath") || !cmd->cmp("fontmap")) {
- error(-1, "-- the config file format has changed since Xpdf 0.9x");
- }
- }
- }
-
- deleteGList(tokens, GString);
-}
-#endif
-
-void GlobalParams::parseNameToUnicode(GList *tokens, GString *fileName,
- int line) {
- GString *name;
- char *tok1, *tok2;
- FILE *f;
- char buf[256];
- int line2;
- Unicode u;
-
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'nameToUnicode' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- name = (GString *)tokens->get(1);
- if (!(f = fopen(name->getCString(), "r"))) {
- error(-1, "Couldn't open 'nameToUnicode' file '%s'",
- name->getCString());
- return;
- }
- line2 = 1;
- while (getLine(buf, sizeof(buf), f)) {
- tok1 = strtok(buf, " \t\r\n");
- tok2 = strtok(NULL, " \t\r\n");
- if (tok1 && tok2) {
- sscanf(tok1, "%x", &u);
- nameToUnicode->add(tok2, u);
- } else {
- error(-1, "Bad line in 'nameToUnicode' file (%s:%d)", name, line2);
- }
- ++line2;
- }
- fclose(f);
-}
-
-void GlobalParams::parseCIDToUnicode(GList *tokens, GString *fileName,
- int line) {
- GString *collection, *name, *old;
-
- if (tokens->getLength() != 3) {
- error(-1, "Bad 'cidToUnicode' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- collection = (GString *)tokens->get(1);
- name = (GString *)tokens->get(2);
- if ((old = (GString *)cidToUnicodes->remove(collection))) {
- delete old;
- }
- cidToUnicodes->add(collection->copy(), name->copy());
-}
-
-void GlobalParams::parseUnicodeToUnicode(GList *tokens, GString *fileName,
- int line) {
- GString *font, *file, *old;
-
- if (tokens->getLength() != 3) {
- error(-1, "Bad 'unicodeToUnicode' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- font = (GString *)tokens->get(1);
- file = (GString *)tokens->get(2);
- if ((old = (GString *)unicodeToUnicodes->remove(font))) {
- delete old;
- }
- unicodeToUnicodes->add(font->copy(), file->copy());
-}
-
-void GlobalParams::parseUnicodeMap(GList *tokens, GString *fileName,
- int line) {
- GString *encodingName, *name, *old;
-
- if (tokens->getLength() != 3) {
- error(-1, "Bad 'unicodeMap' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- encodingName = (GString *)tokens->get(1);
- name = (GString *)tokens->get(2);
- if ((old = (GString *)unicodeMaps->remove(encodingName))) {
- delete old;
- }
- unicodeMaps->add(encodingName->copy(), name->copy());
-}
-
-void GlobalParams::parseCMapDir(GList *tokens, GString *fileName, int line) {
- GString *collection, *dir;
- GList *list;
-
- if (tokens->getLength() != 3) {
- error(-1, "Bad 'cMapDir' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- collection = (GString *)tokens->get(1);
- dir = (GString *)tokens->get(2);
- if (!(list = (GList *)cMapDirs->lookup(collection))) {
- list = new GList();
- cMapDirs->add(collection->copy(), list);
- }
- list->append(dir->copy());
-}
-
-void GlobalParams::parseToUnicodeDir(GList *tokens, GString *fileName,
- int line) {
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'toUnicodeDir' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- toUnicodeDirs->append(((GString *)tokens->get(1))->copy());
-}
-
-void GlobalParams::parseDisplayFont(GList *tokens, GHash *fontHash,
- DisplayFontParamKind kind,
- GString *fileName, int line) {
- DisplayFontParam *param, *old;
-
- if (tokens->getLength() < 2) {
- goto err1;
- }
- param = new DisplayFontParam(((GString *)tokens->get(1))->copy(), kind);
-
- switch (kind) {
- case displayFontT1:
- if (tokens->getLength() != 3) {
- goto err2;
- }
- param->t1.fileName = ((GString *)tokens->get(2))->copy();
- break;
- case displayFontTT:
- if (tokens->getLength() != 3) {
- goto err2;
- }
- param->tt.fileName = ((GString *)tokens->get(2))->copy();
- break;
- }
-
- if ((old = (DisplayFontParam *)fontHash->remove(param->name))) {
- delete old;
- }
- fontHash->add(param->name, param);
- return;
-
- err2:
- delete param;
- err1:
- error(-1, "Bad 'display*Font*' config file command (%s:%d)",
- fileName->getCString(), line);
-}
-
-void GlobalParams::parsePSPaperSize(GList *tokens, GString *fileName,
- int line) {
- GString *tok;
-
- if (tokens->getLength() == 2) {
- tok = (GString *)tokens->get(1);
- if (!setPSPaperSize(tok->getCString())) {
- error(-1, "Bad 'psPaperSize' config file command (%s:%d)",
- fileName->getCString(), line);
- }
- } else if (tokens->getLength() == 3) {
- tok = (GString *)tokens->get(1);
- psPaperWidth = atoi(tok->getCString());
- tok = (GString *)tokens->get(2);
- psPaperHeight = atoi(tok->getCString());
- psImageableLLX = psImageableLLY = 0;
- psImageableURX = psPaperWidth;
- psImageableURY = psPaperHeight;
- } else {
- error(-1, "Bad 'psPaperSize' config file command (%s:%d)",
- fileName->getCString(), line);
- }
-}
-
-void GlobalParams::parsePSImageableArea(GList *tokens, GString *fileName,
- int line) {
- if (tokens->getLength() != 5) {
- error(-1, "Bad 'psImageableArea' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- psImageableLLX = atoi(((GString *)tokens->get(1))->getCString());
- psImageableLLY = atoi(((GString *)tokens->get(2))->getCString());
- psImageableURX = atoi(((GString *)tokens->get(3))->getCString());
- psImageableURY = atoi(((GString *)tokens->get(4))->getCString());
-}
-
-void GlobalParams::parsePSLevel(GList *tokens, GString *fileName, int line) {
- GString *tok;
-
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'psLevel' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- tok = (GString *)tokens->get(1);
- if (!tok->cmp("level1")) {
- psLevel = psLevel1;
- } else if (!tok->cmp("level1sep")) {
- psLevel = psLevel1Sep;
- } else if (!tok->cmp("level2")) {
- psLevel = psLevel2;
- } else if (!tok->cmp("level2sep")) {
- psLevel = psLevel2Sep;
- } else if (!tok->cmp("level3")) {
- psLevel = psLevel3;
- } else if (!tok->cmp("level3Sep")) {
- psLevel = psLevel3Sep;
- } else {
- error(-1, "Bad 'psLevel' config file command (%s:%d)",
- fileName->getCString(), line);
- }
-}
-
-void GlobalParams::parsePSFile(GList *tokens, GString *fileName, int line) {
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'psFile' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- if (psFile) {
- delete psFile;
- }
- psFile = ((GString *)tokens->get(1))->copy();
-}
-
-void GlobalParams::parsePSFont(GList *tokens, GString *fileName, int line) {
- PSFontParam *param;
-
- if (tokens->getLength() != 3) {
- error(-1, "Bad 'psFont' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- param = new PSFontParam(((GString *)tokens->get(1))->copy(), 0,
- ((GString *)tokens->get(2))->copy(), NULL);
- psFonts->add(param->pdfFontName, param);
-}
-
-void GlobalParams::parsePSFont16(char *cmdName, GList *fontList,
- GList *tokens, GString *fileName, int line) {
- PSFontParam *param;
- int wMode;
- GString *tok;
-
- if (tokens->getLength() != 5) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- tok = (GString *)tokens->get(2);
- if (!tok->cmp("H")) {
- wMode = 0;
- } else if (!tok->cmp("V")) {
- wMode = 1;
- } else {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- param = new PSFontParam(((GString *)tokens->get(1))->copy(),
- wMode,
- ((GString *)tokens->get(3))->copy(),
- ((GString *)tokens->get(4))->copy());
- fontList->append(param);
-}
-
-void GlobalParams::parseTextEncoding(GList *tokens, GString *fileName,
- int line) {
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'textEncoding' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- delete textEncoding;
- textEncoding = ((GString *)tokens->get(1))->copy();
-}
-
-void GlobalParams::parseTextEOL(GList *tokens, GString *fileName, int line) {
- GString *tok;
-
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'textEOL' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- tok = (GString *)tokens->get(1);
- if (!tok->cmp("unix")) {
- textEOL = eolUnix;
- } else if (!tok->cmp("dos")) {
- textEOL = eolDOS;
- } else if (!tok->cmp("mac")) {
- textEOL = eolMac;
- } else {
- error(-1, "Bad 'textEOL' config file command (%s:%d)",
- fileName->getCString(), line);
- }
-}
-
-void GlobalParams::parseFontDir(GList *tokens, GString *fileName, int line) {
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'fontDir' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- fontDirs->append(((GString *)tokens->get(1))->copy());
-}
-
-void GlobalParams::parseInitialZoom(GList *tokens,
- GString *fileName, int line) {
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'initialZoom' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- delete initialZoom;
- initialZoom = ((GString *)tokens->get(1))->copy();
-}
-
-void GlobalParams::parseScreenType(GList *tokens, GString *fileName,
- int line) {
- GString *tok;
-
- if (tokens->getLength() != 2) {
- error(-1, "Bad 'screenType' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- tok = (GString *)tokens->get(1);
- if (!tok->cmp("dispersed")) {
- screenType = screenDispersed;
- } else if (!tok->cmp("clustered")) {
- screenType = screenClustered;
- } else if (!tok->cmp("stochasticClustered")) {
- screenType = screenStochasticClustered;
- } else {
- error(-1, "Bad 'screenType' config file command (%s:%d)",
- fileName->getCString(), line);
- }
-}
-
-#ifndef PDF_PARSER_ONLY
-void GlobalParams::parseBind(GList *tokens, GString *fileName, int line) {
- KeyBinding *binding;
- GList *cmds;
- int code, mods, context, i;
-
- if (tokens->getLength() < 4) {
- error(-1, "Bad 'bind' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- if (!parseKey((GString *)tokens->get(1), (GString *)tokens->get(2),
- &code, &mods, &context,
- "bind", tokens, fileName, line)) {
- return;
- }
- for (i = 0; i < keyBindings->getLength(); ++i) {
- binding = (KeyBinding *)keyBindings->get(i);
- if (binding->code == code &&
- binding->mods == mods &&
- binding->context == context) {
- delete (KeyBinding *)keyBindings->del(i);
- break;
- }
- }
- cmds = new GList();
- for (i = 3; i < tokens->getLength(); ++i) {
- cmds->append(((GString *)tokens->get(i))->copy());
- }
- keyBindings->append(new KeyBinding(code, mods, context, cmds));
-}
-
-void GlobalParams::parseUnbind(GList *tokens, GString *fileName, int line) {
- KeyBinding *binding;
- int code, mods, context, i;
-
- if (tokens->getLength() != 3) {
- error(-1, "Bad 'unbind' config file command (%s:%d)",
- fileName->getCString(), line);
- return;
- }
- if (!parseKey((GString *)tokens->get(1), (GString *)tokens->get(2),
- &code, &mods, &context,
- "unbind", tokens, fileName, line)) {
- return;
- }
- for (i = 0; i < keyBindings->getLength(); ++i) {
- binding = (KeyBinding *)keyBindings->get(i);
- if (binding->code == code &&
- binding->mods == mods &&
- binding->context == context) {
- delete (KeyBinding *)keyBindings->del(i);
- break;
- }
- }
-}
-
-GBool GlobalParams::parseKey(GString *modKeyStr, GString *contextStr,
- int *code, int *mods, int *context,
- char *cmdName,
- GList *tokens, GString *fileName, int line) {
- char *p0;
-
- *mods = xpdfKeyModNone;
- p0 = modKeyStr->getCString();
- while (1) {
- if (!strncmp(p0, "shift-", 6)) {
- *mods |= xpdfKeyModShift;
- p0 += 6;
- } else if (!strncmp(p0, "ctrl-", 5)) {
- *mods |= xpdfKeyModCtrl;
- p0 += 5;
- } else if (!strncmp(p0, "alt-", 4)) {
- *mods |= xpdfKeyModAlt;
- p0 += 4;
- } else {
- break;
- }
- }
-
- if (!strcmp(p0, "space")) {
- *code = ' ';
- } else if (!strcmp(p0, "tab")) {
- *code = xpdfKeyCodeTab;
- } else if (!strcmp(p0, "return")) {
- *code = xpdfKeyCodeReturn;
- } else if (!strcmp(p0, "enter")) {
- *code = xpdfKeyCodeEnter;
- } else if (!strcmp(p0, "backspace")) {
- *code = xpdfKeyCodeBackspace;
- } else if (!strcmp(p0, "insert")) {
- *code = xpdfKeyCodeInsert;
- } else if (!strcmp(p0, "delete")) {
- *code = xpdfKeyCodeDelete;
- } else if (!strcmp(p0, "home")) {
- *code = xpdfKeyCodeHome;
- } else if (!strcmp(p0, "end")) {
- *code = xpdfKeyCodeEnd;
- } else if (!strcmp(p0, "pgup")) {
- *code = xpdfKeyCodePgUp;
- } else if (!strcmp(p0, "pgdn")) {
- *code = xpdfKeyCodePgDn;
- } else if (!strcmp(p0, "left")) {
- *code = xpdfKeyCodeLeft;
- } else if (!strcmp(p0, "right")) {
- *code = xpdfKeyCodeRight;
- } else if (!strcmp(p0, "up")) {
- *code = xpdfKeyCodeUp;
- } else if (!strcmp(p0, "down")) {
- *code = xpdfKeyCodeDown;
- } else if (p0[0] == 'f' && p0[1] >= '1' && p0[1] <= '9' && !p0[2]) {
- *code = xpdfKeyCodeF1 + (p0[1] - '1');
- } else if (p0[0] == 'f' &&
- ((p0[1] >= '1' && p0[1] <= '2' && p0[2] >= '0' && p0[2] <= '9') ||
- (p0[1] == '3' && p0[2] >= '0' && p0[2] <= '5')) &&
- !p0[3]) {
- *code = xpdfKeyCodeF1 + 10 * (p0[1] - '0') + (p0[2] - '0') - 1;
- } else if (!strncmp(p0, "mousePress", 10) &&
- p0[10] >= '1' && p0[10] <= '7' && !p0[11]) {
- *code = xpdfKeyCodeMousePress1 + (p0[10] - '1');
- } else if (!strncmp(p0, "mouseRelease", 12) &&
- p0[12] >= '1' && p0[12] <= '7' && !p0[13]) {
- *code = xpdfKeyCodeMouseRelease1 + (p0[12] - '1');
- } else if (*p0 >= 0x20 && *p0 <= 0x7e && !p0[1]) {
- *code = (int)*p0;
- } else {
- error(-1, "Bad key/modifier in '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return gFalse;
- }
-
- p0 = contextStr->getCString();
- if (!strcmp(p0, "any")) {
- *context = xpdfKeyContextAny;
- } else {
- *context = xpdfKeyContextAny;
- while (1) {
- if (!strncmp(p0, "fullScreen", 10)) {
- *context |= xpdfKeyContextFullScreen;
- p0 += 10;
- } else if (!strncmp(p0, "window", 6)) {
- *context |= xpdfKeyContextWindow;
- p0 += 6;
- } else if (!strncmp(p0, "continuous", 10)) {
- *context |= xpdfKeyContextContinuous;
- p0 += 10;
- } else if (!strncmp(p0, "singlePage", 10)) {
- *context |= xpdfKeyContextSinglePage;
- p0 += 10;
- } else if (!strncmp(p0, "overLink", 8)) {
- *context |= xpdfKeyContextOverLink;
- p0 += 8;
- } else if (!strncmp(p0, "offLink", 7)) {
- *context |= xpdfKeyContextOffLink;
- p0 += 7;
- } else if (!strncmp(p0, "outline", 7)) {
- *context |= xpdfKeyContextOutline;
- p0 += 7;
- } else if (!strncmp(p0, "mainWin", 7)) {
- *context |= xpdfKeyContextMainWin;
- p0 += 7;
- } else if (!strncmp(p0, "scrLockOn", 9)) {
- *context |= xpdfKeyContextScrLockOn;
- p0 += 9;
- } else if (!strncmp(p0, "scrLockOff", 10)) {
- *context |= xpdfKeyContextScrLockOff;
- p0 += 10;
- } else {
- error(-1, "Bad context in '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return gFalse;
- }
- if (!*p0) {
- break;
- }
- if (*p0 != ',') {
- error(-1, "Bad context in '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return gFalse;
- }
- ++p0;
- }
- }
-
- return gTrue;
-}
-#endif
-
-void GlobalParams::parseCommand(char *cmdName, GString **val,
- GList *tokens, GString *fileName, int line) {
- if (tokens->getLength() != 2) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- if (*val) {
- delete *val;
- }
- *val = ((GString *)tokens->get(1))->copy();
-}
-
-void GlobalParams::parseYesNo(char *cmdName, GBool *flag,
- GList *tokens, GString *fileName, int line) {
- GString *tok;
-
- if (tokens->getLength() != 2) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- tok = (GString *)tokens->get(1);
- if (!parseYesNo2(tok->getCString(), flag)) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- }
-}
-
-GBool GlobalParams::parseYesNo2(char *token, GBool *flag) {
- if (!strcmp(token, "yes")) {
- *flag = gTrue;
- } else if (!strcmp(token, "no")) {
- *flag = gFalse;
- } else {
- return gFalse;
- }
- return gTrue;
-}
-
-void GlobalParams::parseInteger(char *cmdName, int *val,
- GList *tokens, GString *fileName, int line) {
- GString *tok;
- int i;
-
- if (tokens->getLength() != 2) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- tok = (GString *)tokens->get(1);
- if (tok->getLength() == 0) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- if (tok->getChar(0) == '-') {
- i = 1;
- } else {
- i = 0;
- }
- for (; i < tok->getLength(); ++i) {
- if (tok->getChar(i) < '0' || tok->getChar(i) > '9') {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- }
- *val = atoi(tok->getCString());
-}
-
-void GlobalParams::parseFloat(char *cmdName, double *val,
- GList *tokens, GString *fileName, int line) {
- GString *tok;
- int i;
-
- if (tokens->getLength() != 2) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- tok = (GString *)tokens->get(1);
- if (tok->getLength() == 0) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- if (tok->getChar(0) == '-') {
- i = 1;
- } else {
- i = 0;
- }
- for (; i < tok->getLength(); ++i) {
- if (!((tok->getChar(i) >= '0' && tok->getChar(i) <= '9') ||
- tok->getChar(i) == '.')) {
- error(-1, "Bad '%s' config file command (%s:%d)",
- cmdName, fileName->getCString(), line);
- return;
- }
- }
- *val = atof(tok->getCString());
-}
-
-GlobalParams::~GlobalParams() {
- GHashIter *iter;
- GString *key;
- GList *list;
-
- freeBuiltinFontTables();
-
- delete macRomanReverseMap;
-
- delete baseDir;
- delete nameToUnicode;
- deleteGHash(cidToUnicodes, GString);
- deleteGHash(unicodeToUnicodes, GString);
- deleteGHash(residentUnicodeMaps, UnicodeMap);
- deleteGHash(unicodeMaps, GString);
- deleteGList(toUnicodeDirs, GString);
- deleteGHash(displayFonts, DisplayFontParam);
- deleteGHash(displayCIDFonts, DisplayFontParam);
- deleteGHash(displayNamedCIDFonts, DisplayFontParam);
-#ifdef WIN32
- if (winFontList) {
- delete winFontList;
- }
-#endif
- if (psFile) {
- delete psFile;
- }
- deleteGHash(psFonts, PSFontParam);
- deleteGList(psNamedFonts16, PSFontParam);
- deleteGList(psFonts16, PSFontParam);
- delete textEncoding;
- deleteGList(fontDirs, GString);
- delete initialZoom;
- if (urlCommand) {
- delete urlCommand;
- }
- if (movieCommand) {
- delete movieCommand;
- }
-#ifndef PDF_PARSER_ONLY
- deleteGList(keyBindings, KeyBinding);
-#endif
-
- cMapDirs->startIter(&iter);
- while (cMapDirs->getNext(&iter, &key, (void **)&list)) {
- deleteGList(list, GString);
- }
- delete cMapDirs;
-
- delete cidToUnicodeCache;
- delete unicodeToUnicodeCache;
- delete unicodeMapCache;
- delete cMapCache;
-
-#ifdef ENABLE_PLUGINS
- delete securityHandlers;
- deleteGList(plugins, Plugin);
-#endif
-
-#if MULTITHREADED
- gDestroyMutex(&mutex);
- gDestroyMutex(&unicodeMapCacheMutex);
- gDestroyMutex(&cMapCacheMutex);
-#endif
-}
-
-//------------------------------------------------------------------------
-
-void GlobalParams::setBaseDir(char *dir) {
- delete baseDir;
- baseDir = new GString(dir);
-}
-
-void GlobalParams::setupBaseFonts(char *dir) {
- GString *fontName;
- GString *fileName;
-#ifdef WIN32
- HMODULE shell32Lib;
- BOOL (__stdcall *SHGetSpecialFolderPathFunc)(HWND hwndOwner,
- LPTSTR lpszPath,
- int nFolder,
- BOOL fCreate);
- char winFontDir[MAX_PATH];
-#endif
- FILE *f;
- DisplayFontParamKind kind;
- DisplayFontParam *dfp;
- int i, j;
-
-#ifdef WIN32
- // SHGetSpecialFolderPath isn't available in older versions of
- // shell32.dll (Win95 and WinNT4), so do a dynamic load
- winFontDir[0] = '\0';
- if ((shell32Lib = LoadLibrary("shell32.dll"))) {
- if ((SHGetSpecialFolderPathFunc =
- (BOOL (__stdcall *)(HWND hwndOwner, LPTSTR lpszPath,
- int nFolder, BOOL fCreate))
- GetProcAddress(shell32Lib, "SHGetSpecialFolderPathA"))) {
- if (!(*SHGetSpecialFolderPathFunc)(NULL, winFontDir,
- CSIDL_FONTS, FALSE)) {
- winFontDir[0] = '\0';
- }
- }
- }
-#endif
- for (i = 0; displayFontTab[i].name; ++i) {
- fontName = new GString(displayFontTab[i].name);
- if (getDisplayFont(fontName)) {
- delete fontName;
- continue;
- }
- fileName = NULL;
- kind = displayFontT1; // make gcc happy
- if (dir) {
- fileName = appendToPath(new GString(dir), displayFontTab[i].t1FileName);
- kind = displayFontT1;
- if ((f = fopen(fileName->getCString(), "rb"))) {
- fclose(f);
- } else {
- delete fileName;
- fileName = NULL;
- }
- }
-#ifdef WIN32
- if (!fileName && winFontDir[0] && displayFontTab[i].ttFileName) {
- fileName = appendToPath(new GString(winFontDir),
- displayFontTab[i].ttFileName);
- kind = displayFontTT;
- if ((f = fopen(fileName->getCString(), "rb"))) {
- fclose(f);
- } else {
- delete fileName;
- fileName = NULL;
- }
- }
- // SHGetSpecialFolderPath(CSIDL_FONTS) doesn't work on Win 2k Server
- // or Win2003 Server, or with older versions of shell32.dll, so check
- // the "standard" directories
- if (displayFontTab[i].ttFileName) {
- for (j = 0; !fileName && displayFontDirs[j]; ++j) {
- fileName = appendToPath(new GString(displayFontDirs[j]),
- displayFontTab[i].ttFileName);
- kind = displayFontTT;
- if ((f = fopen(fileName->getCString(), "rb"))) {
- fclose(f);
- } else {
- delete fileName;
- fileName = NULL;
- }
- }
- }
-#else
- for (j = 0; !fileName && displayFontDirs[j]; ++j) {
- fileName = appendToPath(new GString(displayFontDirs[j]),
- displayFontTab[i].t1FileName);
- kind = displayFontT1;
- if ((f = fopen(fileName->getCString(), "rb"))) {
- fclose(f);
- } else {
- delete fileName;
- fileName = NULL;
- }
- }
-#endif
- if (!fileName) {
- error(-1, "No display font for '%s'", displayFontTab[i].name);
- delete fontName;
- continue;
- }
- dfp = new DisplayFontParam(fontName, kind);
- dfp->t1.fileName = fileName;
- globalParams->addDisplayFont(dfp);
- }
-
-#ifdef WIN32
- if (winFontDir[0]) {
- winFontList = new WinFontList(winFontDir);
- }
-#endif
-}
-
-//------------------------------------------------------------------------
-// accessors
-//------------------------------------------------------------------------
-
-CharCode GlobalParams::getMacRomanCharCode(char *charName) {
- // no need to lock - macRomanReverseMap is constant
- return macRomanReverseMap->lookup(charName);
-}
-
-GString *GlobalParams::getBaseDir() {
- GString *s;
-
- lockGlobalParams;
- s = baseDir->copy();
- unlockGlobalParams;
- return s;
-}
-
-Unicode GlobalParams::mapNameToUnicode(char *charName) {
- // no need to lock - nameToUnicode is constant
- return nameToUnicode->lookup(charName);
-}
-
-UnicodeMap *GlobalParams::getResidentUnicodeMap(GString *encodingName) {
- UnicodeMap *map;
-
- lockGlobalParams;
- map = (UnicodeMap *)residentUnicodeMaps->lookup(encodingName);
- unlockGlobalParams;
- if (map) {
- map->incRefCnt();
- }
- return map;
-}
-
-FILE *GlobalParams::getUnicodeMapFile(GString *encodingName) {
- GString *fileName;
- FILE *f;
-
- lockGlobalParams;
- if ((fileName = (GString *)unicodeMaps->lookup(encodingName))) {
- f = fopen(fileName->getCString(), "r");
- } else {
- f = NULL;
- }
- unlockGlobalParams;
- return f;
-}
-
-FILE *GlobalParams::findCMapFile(GString *collection, GString *cMapName) {
- GList *list;
- GString *dir;
- GString *fileName;
- FILE *f;
- int i;
-
- lockGlobalParams;
- if (!(list = (GList *)cMapDirs->lookup(collection))) {
- unlockGlobalParams;
- return NULL;
- }
- for (i = 0; i < list->getLength(); ++i) {
- dir = (GString *)list->get(i);
- fileName = appendToPath(dir->copy(), cMapName->getCString());
- f = fopen(fileName->getCString(), "r");
- delete fileName;
- if (f) {
- unlockGlobalParams;
- return f;
- }
- }
- unlockGlobalParams;
- return NULL;
-}
-
-FILE *GlobalParams::findToUnicodeFile(GString *name) {
- GString *dir, *fileName;
- FILE *f;
- int i;
-
- lockGlobalParams;
- for (i = 0; i < toUnicodeDirs->getLength(); ++i) {
- dir = (GString *)toUnicodeDirs->get(i);
- fileName = appendToPath(dir->copy(), name->getCString());
- f = fopen(fileName->getCString(), "r");
- delete fileName;
- if (f) {
- unlockGlobalParams;
- return f;
- }
- }
- unlockGlobalParams;
- return NULL;
-}
-
-DisplayFontParam *GlobalParams::getDisplayFont(GString *fontName) {
- DisplayFontParam *dfp;
-
- lockGlobalParams;
- dfp = (DisplayFontParam *)displayFonts->lookup(fontName);
-#ifdef WIN32
- if (!dfp && winFontList) {
- dfp = winFontList->find(fontName);
- }
-#endif
- unlockGlobalParams;
- return dfp;
-}
-
-DisplayFontParam *GlobalParams::getDisplayCIDFont(GString *fontName,
- GString *collection) {
- DisplayFontParam *dfp;
-
- lockGlobalParams;
- if (!fontName ||
- !(dfp = (DisplayFontParam *)displayNamedCIDFonts->lookup(fontName))) {
- dfp = (DisplayFontParam *)displayCIDFonts->lookup(collection);
- }
- unlockGlobalParams;
- return dfp;
-}
-
-GString *GlobalParams::getPSFile() {
- GString *s;
-
- lockGlobalParams;
- s = psFile ? psFile->copy() : (GString *)NULL;
- unlockGlobalParams;
- return s;
-}
-
-int GlobalParams::getPSPaperWidth() {
- int w;
-
- lockGlobalParams;
- w = psPaperWidth;
- unlockGlobalParams;
- return w;
-}
-
-int GlobalParams::getPSPaperHeight() {
- int h;
-
- lockGlobalParams;
- h = psPaperHeight;
- unlockGlobalParams;
- return h;
-}
-
-void GlobalParams::getPSImageableArea(int *llx, int *lly, int *urx, int *ury) {
- lockGlobalParams;
- *llx = psImageableLLX;
- *lly = psImageableLLY;
- *urx = psImageableURX;
- *ury = psImageableURY;
- unlockGlobalParams;
-}
-
-GBool GlobalParams::getPSCrop() {
- GBool f;
-
- lockGlobalParams;
- f = psCrop;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getPSExpandSmaller() {
- GBool f;
-
- lockGlobalParams;
- f = psExpandSmaller;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getPSShrinkLarger() {
- GBool f;
-
- lockGlobalParams;
- f = psShrinkLarger;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getPSCenter() {
- GBool f;
-
- lockGlobalParams;
- f = psCenter;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getPSDuplex() {
- GBool d;
-
- lockGlobalParams;
- d = psDuplex;
- unlockGlobalParams;
- return d;
-}
-
-PSLevel GlobalParams::getPSLevel() {
- PSLevel level;
-
- lockGlobalParams;
- level = psLevel;
- unlockGlobalParams;
- return level;
-}
-
-PSFontParam *GlobalParams::getPSFont(GString *fontName) {
- PSFontParam *p;
-
- lockGlobalParams;
- p = (PSFontParam *)psFonts->lookup(fontName);
- unlockGlobalParams;
- return p;
-}
-
-PSFontParam *GlobalParams::getPSFont16(GString *fontName,
- GString *collection, int wMode) {
- PSFontParam *p;
- int i;
-
- lockGlobalParams;
- p = NULL;
- if (fontName) {
- for (i = 0; i < psNamedFonts16->getLength(); ++i) {
- p = (PSFontParam *)psNamedFonts16->get(i);
- if (!p->pdfFontName->cmp(fontName) &&
- p->wMode == wMode) {
- break;
- }
- p = NULL;
- }
- }
- if (!p && collection) {
- for (i = 0; i < psFonts16->getLength(); ++i) {
- p = (PSFontParam *)psFonts16->get(i);
- if (!p->pdfFontName->cmp(collection) &&
- p->wMode == wMode) {
- break;
- }
- p = NULL;
- }
- }
- unlockGlobalParams;
- return p;
-}
-
-GBool GlobalParams::getPSEmbedType1() {
- GBool e;
-
- lockGlobalParams;
- e = psEmbedType1;
- unlockGlobalParams;
- return e;
-}
-
-GBool GlobalParams::getPSEmbedTrueType() {
- GBool e;
-
- lockGlobalParams;
- e = psEmbedTrueType;
- unlockGlobalParams;
- return e;
-}
-
-GBool GlobalParams::getPSEmbedCIDPostScript() {
- GBool e;
-
- lockGlobalParams;
- e = psEmbedCIDPostScript;
- unlockGlobalParams;
- return e;
-}
-
-GBool GlobalParams::getPSEmbedCIDTrueType() {
- GBool e;
-
- lockGlobalParams;
- e = psEmbedCIDTrueType;
- unlockGlobalParams;
- return e;
-}
-
-GBool GlobalParams::getPSPreload() {
- GBool preload;
-
- lockGlobalParams;
- preload = psPreload;
- unlockGlobalParams;
- return preload;
-}
-
-GBool GlobalParams::getPSOPI() {
- GBool opi;
-
- lockGlobalParams;
- opi = psOPI;
- unlockGlobalParams;
- return opi;
-}
-
-GBool GlobalParams::getPSASCIIHex() {
- GBool ah;
-
- lockGlobalParams;
- ah = psASCIIHex;
- unlockGlobalParams;
- return ah;
-}
-
-GString *GlobalParams::getTextEncodingName() {
- GString *s;
-
- lockGlobalParams;
- s = textEncoding->copy();
- unlockGlobalParams;
- return s;
-}
-
-EndOfLineKind GlobalParams::getTextEOL() {
- EndOfLineKind eol;
-
- lockGlobalParams;
- eol = textEOL;
- unlockGlobalParams;
- return eol;
-}
-
-GBool GlobalParams::getTextPageBreaks() {
- GBool pageBreaks;
-
- lockGlobalParams;
- pageBreaks = textPageBreaks;
- unlockGlobalParams;
- return pageBreaks;
-}
-
-GBool GlobalParams::getTextKeepTinyChars() {
- GBool tiny;
-
- lockGlobalParams;
- tiny = textKeepTinyChars;
- unlockGlobalParams;
- return tiny;
-}
-
-GString *GlobalParams::findFontFile(GString *fontName, char **exts) {
- GString *dir, *fileName;
- char **ext;
- FILE *f;
- int i;
-
- lockGlobalParams;
- for (i = 0; i < fontDirs->getLength(); ++i) {
- dir = (GString *)fontDirs->get(i);
- for (ext = exts; *ext; ++ext) {
- fileName = appendToPath(dir->copy(), fontName->getCString());
- fileName->append(*ext);
- if ((f = fopen(fileName->getCString(), "rb"))) {
- fclose(f);
- unlockGlobalParams;
- return fileName;
- }
- delete fileName;
- }
- }
- unlockGlobalParams;
- return NULL;
-}
-
-GString *GlobalParams::getInitialZoom() {
- GString *s;
-
- lockGlobalParams;
- s = initialZoom->copy();
- unlockGlobalParams;
- return s;
-}
-
-GBool GlobalParams::getContinuousView() {
- GBool f;
-
- lockGlobalParams;
- f = continuousView;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getEnableT1lib() {
- GBool f;
-
- lockGlobalParams;
- f = enableT1lib;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getEnableFreeType() {
- GBool f;
-
- lockGlobalParams;
- f = enableFreeType;
- unlockGlobalParams;
- return f;
-}
-
-
-GBool GlobalParams::getAntialias() {
- GBool f;
-
- lockGlobalParams;
- f = antialias;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getVectorAntialias() {
- GBool f;
-
- lockGlobalParams;
- f = vectorAntialias;
- unlockGlobalParams;
- return f;
-}
-
-GBool GlobalParams::getStrokeAdjust() {
- GBool f;
-
- lockGlobalParams;
- f = strokeAdjust;
- unlockGlobalParams;
- return f;
-}
-
-ScreenType GlobalParams::getScreenType() {
- ScreenType t;
-
- lockGlobalParams;
- t = screenType;
- unlockGlobalParams;
- return t;
-}
-
-int GlobalParams::getScreenSize() {
- int size;
-
- lockGlobalParams;
- size = screenSize;
- unlockGlobalParams;
- return size;
-}
-
-int GlobalParams::getScreenDotRadius() {
- int r;
-
- lockGlobalParams;
- r = screenDotRadius;
- unlockGlobalParams;
- return r;
-}
-
-double GlobalParams::getScreenGamma() {
- double gamma;
-
- lockGlobalParams;
- gamma = screenGamma;
- unlockGlobalParams;
- return gamma;
-}
-
-double GlobalParams::getScreenBlackThreshold() {
- double thresh;
-
- lockGlobalParams;
- thresh = screenBlackThreshold;
- unlockGlobalParams;
- return thresh;
-}
-
-double GlobalParams::getScreenWhiteThreshold() {
- double thresh;
-
- lockGlobalParams;
- thresh = screenWhiteThreshold;
- unlockGlobalParams;
- return thresh;
-}
-
-GBool GlobalParams::getMapNumericCharNames() {
- GBool map;
-
- lockGlobalParams;
- map = mapNumericCharNames;
- unlockGlobalParams;
- return map;
-}
-
-GBool GlobalParams::getMapUnknownCharNames() {
- GBool map;
-
- lockGlobalParams;
- map = mapUnknownCharNames;
- unlockGlobalParams;
- return map;
-}
-
-#ifndef PDF_PARSER_ONLY
-GList *GlobalParams::getKeyBinding(int code, int mods, int context) {
- KeyBinding *binding;
- GList *cmds;
- int modMask;
- int i, j;
-
- lockGlobalParams;
- cmds = NULL;
- // for ASCII chars, ignore the shift modifier
- modMask = code <= 0xff ? ~xpdfKeyModShift : ~0;
- for (i = 0; i < keyBindings->getLength(); ++i) {
- binding = (KeyBinding *)keyBindings->get(i);
- if (binding->code == code &&
- (binding->mods & modMask) == (mods & modMask) &&
- (~binding->context | context) == ~0) {
- cmds = new GList();
- for (j = 0; j < binding->cmds->getLength(); ++j) {
- cmds->append(((GString *)binding->cmds->get(j))->copy());
- }
- break;
- }
- }
- unlockGlobalParams;
- return cmds;
-}
-#endif
-
-GBool GlobalParams::getPrintCommands() {
- GBool p;
-
- lockGlobalParams;
- p = printCommands;
- unlockGlobalParams;
- return p;
-}
-
-GBool GlobalParams::getErrQuiet() {
- // no locking -- this function may get called from inside a locked
- // section
- return errQuiet;
-}
-
-CharCodeToUnicode *GlobalParams::getCIDToUnicode(GString *collection) {
- GString *fileName;
- CharCodeToUnicode *ctu;
-
- lockGlobalParams;
- if (!(ctu = cidToUnicodeCache->getCharCodeToUnicode(collection))) {
- if ((fileName = (GString *)cidToUnicodes->lookup(collection)) &&
- (ctu = CharCodeToUnicode::parseCIDToUnicode(fileName, collection))) {
- cidToUnicodeCache->add(ctu);
- }
- }
- unlockGlobalParams;
- return ctu;
-}
-
-CharCodeToUnicode *GlobalParams::getUnicodeToUnicode(GString *fontName) {
- CharCodeToUnicode *ctu;
- GHashIter *iter;
- GString *fontPattern, *fileName;
-
- lockGlobalParams;
- fileName = NULL;
- unicodeToUnicodes->startIter(&iter);
- while (unicodeToUnicodes->getNext(&iter, &fontPattern, (void **)&fileName)) {
- if (strstr(fontName->getCString(), fontPattern->getCString())) {
- unicodeToUnicodes->killIter(&iter);
- break;
- }
- fileName = NULL;
- }
- if (fileName) {
- if (!(ctu = unicodeToUnicodeCache->getCharCodeToUnicode(fileName))) {
- if ((ctu = CharCodeToUnicode::parseUnicodeToUnicode(fileName))) {
- unicodeToUnicodeCache->add(ctu);
- }
- }
- } else {
- ctu = NULL;
- }
- unlockGlobalParams;
- return ctu;
-}
-
-UnicodeMap *GlobalParams::getUnicodeMap(GString *encodingName) {
- return getUnicodeMap2(encodingName);
-}
-
-UnicodeMap *GlobalParams::getUnicodeMap2(GString *encodingName) {
- UnicodeMap *map;
-
- if (!(map = getResidentUnicodeMap(encodingName))) {
- lockUnicodeMapCache;
- map = unicodeMapCache->getUnicodeMap(encodingName);
- unlockUnicodeMapCache;
- }
- return map;
-}
-
-CMap *GlobalParams::getCMap(GString *collection, GString *cMapName) {
- CMap *cMap;
-
- lockCMapCache;
- cMap = cMapCache->getCMap(collection, cMapName);
- unlockCMapCache;
- return cMap;
-}
-
-UnicodeMap *GlobalParams::getTextEncoding() {
- return getUnicodeMap2(textEncoding);
-}
-
-//------------------------------------------------------------------------
-// functions to set parameters
-//------------------------------------------------------------------------
-
-void GlobalParams::addDisplayFont(DisplayFontParam *param) {
- DisplayFontParam *old;
-
- lockGlobalParams;
- if ((old = (DisplayFontParam *)displayFonts->remove(param->name))) {
- delete old;
- }
- displayFonts->add(param->name, param);
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSFile(char *file) {
- lockGlobalParams;
- if (psFile) {
- delete psFile;
- }
- psFile = new GString(file);
- unlockGlobalParams;
-}
-
-GBool GlobalParams::setPSPaperSize(char *size) {
- lockGlobalParams;
- if (!strcmp(size, "match")) {
- psPaperWidth = psPaperHeight = -1;
- } else if (!strcmp(size, "letter")) {
- psPaperWidth = 612;
- psPaperHeight = 792;
- } else if (!strcmp(size, "legal")) {
- psPaperWidth = 612;
- psPaperHeight = 1008;
- } else if (!strcmp(size, "A4")) {
- psPaperWidth = 595;
- psPaperHeight = 842;
- } else if (!strcmp(size, "A3")) {
- psPaperWidth = 842;
- psPaperHeight = 1190;
- } else {
- unlockGlobalParams;
- return gFalse;
- }
- psImageableLLX = psImageableLLY = 0;
- psImageableURX = psPaperWidth;
- psImageableURY = psPaperHeight;
- unlockGlobalParams;
- return gTrue;
-}
-
-void GlobalParams::setPSPaperWidth(int width) {
- lockGlobalParams;
- psPaperWidth = width;
- psImageableLLX = 0;
- psImageableURX = psPaperWidth;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSPaperHeight(int height) {
- lockGlobalParams;
- psPaperHeight = height;
- psImageableLLY = 0;
- psImageableURY = psPaperHeight;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSImageableArea(int llx, int lly, int urx, int ury) {
- lockGlobalParams;
- psImageableLLX = llx;
- psImageableLLY = lly;
- psImageableURX = urx;
- psImageableURY = ury;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSCrop(GBool crop) {
- lockGlobalParams;
- psCrop = crop;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSExpandSmaller(GBool expand) {
- lockGlobalParams;
- psExpandSmaller = expand;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSShrinkLarger(GBool shrink) {
- lockGlobalParams;
- psShrinkLarger = shrink;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSCenter(GBool center) {
- lockGlobalParams;
- psCenter = center;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSDuplex(GBool duplex) {
- lockGlobalParams;
- psDuplex = duplex;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSLevel(PSLevel level) {
- lockGlobalParams;
- psLevel = level;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSEmbedType1(GBool embed) {
- lockGlobalParams;
- psEmbedType1 = embed;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSEmbedTrueType(GBool embed) {
- lockGlobalParams;
- psEmbedTrueType = embed;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSEmbedCIDPostScript(GBool embed) {
- lockGlobalParams;
- psEmbedCIDPostScript = embed;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSEmbedCIDTrueType(GBool embed) {
- lockGlobalParams;
- psEmbedCIDTrueType = embed;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSPreload(GBool preload) {
- lockGlobalParams;
- psPreload = preload;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSOPI(GBool opi) {
- lockGlobalParams;
- psOPI = opi;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPSASCIIHex(GBool hex) {
- lockGlobalParams;
- psASCIIHex = hex;
- unlockGlobalParams;
-}
-
-void GlobalParams::setTextEncoding(char *encodingName) {
- lockGlobalParams;
- delete textEncoding;
- textEncoding = new GString(encodingName);
- unlockGlobalParams;
-}
-
-GBool GlobalParams::setTextEOL(char *s) {
- lockGlobalParams;
- if (!strcmp(s, "unix")) {
- textEOL = eolUnix;
- } else if (!strcmp(s, "dos")) {
- textEOL = eolDOS;
- } else if (!strcmp(s, "mac")) {
- textEOL = eolMac;
- } else {
- unlockGlobalParams;
- return gFalse;
- }
- unlockGlobalParams;
- return gTrue;
-}
-
-void GlobalParams::setTextPageBreaks(GBool pageBreaks) {
- lockGlobalParams;
- textPageBreaks = pageBreaks;
- unlockGlobalParams;
-}
-
-void GlobalParams::setTextKeepTinyChars(GBool keep) {
- lockGlobalParams;
- textKeepTinyChars = keep;
- unlockGlobalParams;
-}
-
-void GlobalParams::setInitialZoom(char *s) {
- lockGlobalParams;
- delete initialZoom;
- initialZoom = new GString(s);
- unlockGlobalParams;
-}
-
-void GlobalParams::setContinuousView(GBool cont) {
- lockGlobalParams;
- continuousView = cont;
- unlockGlobalParams;
-}
-
-GBool GlobalParams::setEnableT1lib(char *s) {
- GBool ok;
-
- lockGlobalParams;
- ok = parseYesNo2(s, &enableT1lib);
- unlockGlobalParams;
- return ok;
-}
-
-GBool GlobalParams::setEnableFreeType(char *s) {
- GBool ok;
-
- lockGlobalParams;
- ok = parseYesNo2(s, &enableFreeType);
- unlockGlobalParams;
- return ok;
-}
-
-
-GBool GlobalParams::setAntialias(char *s) {
- GBool ok;
-
- lockGlobalParams;
- ok = parseYesNo2(s, &antialias);
- unlockGlobalParams;
- return ok;
-}
-
-GBool GlobalParams::setVectorAntialias(char *s) {
- GBool ok;
-
- lockGlobalParams;
- ok = parseYesNo2(s, &vectorAntialias);
- unlockGlobalParams;
- return ok;
-}
-
-void GlobalParams::setScreenType(ScreenType t) {
- lockGlobalParams;
- screenType = t;
- unlockGlobalParams;
-}
-
-void GlobalParams::setScreenSize(int size) {
- lockGlobalParams;
- screenSize = size;
- unlockGlobalParams;
-}
-
-void GlobalParams::setScreenDotRadius(int r) {
- lockGlobalParams;
- screenDotRadius = r;
- unlockGlobalParams;
-}
-
-void GlobalParams::setScreenGamma(double gamma) {
- lockGlobalParams;
- screenGamma = gamma;
- unlockGlobalParams;
-}
-
-void GlobalParams::setScreenBlackThreshold(double thresh) {
- lockGlobalParams;
- screenBlackThreshold = thresh;
- unlockGlobalParams;
-}
-
-void GlobalParams::setScreenWhiteThreshold(double thresh) {
- lockGlobalParams;
- screenWhiteThreshold = thresh;
- unlockGlobalParams;
-}
-
-void GlobalParams::setMapNumericCharNames(GBool map) {
- lockGlobalParams;
- mapNumericCharNames = map;
- unlockGlobalParams;
-}
-
-void GlobalParams::setMapUnknownCharNames(GBool map) {
- lockGlobalParams;
- mapUnknownCharNames = map;
- unlockGlobalParams;
-}
-
-void GlobalParams::setPrintCommands(GBool printCommandsA) {
- lockGlobalParams;
- printCommands = printCommandsA;
- unlockGlobalParams;
-}
-
-void GlobalParams::setErrQuiet(GBool errQuietA) {
- lockGlobalParams;
- errQuiet = errQuietA;
- unlockGlobalParams;
-}
-
-void GlobalParams::addSecurityHandler(XpdfSecurityHandler *handler) {
-#ifdef ENABLE_PLUGINS
- lockGlobalParams;
- securityHandlers->append(handler);
- unlockGlobalParams;
-#endif
-}
-
-XpdfSecurityHandler *GlobalParams::getSecurityHandler(char *name) {
-#ifdef ENABLE_PLUGINS
- XpdfSecurityHandler *hdlr;
- int i;
-
- lockGlobalParams;
- for (i = 0; i < securityHandlers->getLength(); ++i) {
- hdlr = (XpdfSecurityHandler *)securityHandlers->get(i);
- if (!strcasecmp(hdlr->name, name)) {
- unlockGlobalParams;
- return hdlr;
- }
- }
- unlockGlobalParams;
-
- if (!loadPlugin("security", name)) {
- return NULL;
- }
-
- lockGlobalParams;
- for (i = 0; i < securityHandlers->getLength(); ++i) {
- hdlr = (XpdfSecurityHandler *)securityHandlers->get(i);
- if (!strcmp(hdlr->name, name)) {
- unlockGlobalParams;
- return hdlr;
- }
- }
- unlockGlobalParams;
-#endif
-
- return NULL;
-}
-
-#ifdef ENABLE_PLUGINS
-//------------------------------------------------------------------------
-// plugins
-//------------------------------------------------------------------------
-
-GBool GlobalParams::loadPlugin(char *type, char *name) {
- Plugin *plugin;
-
- if (!(plugin = Plugin::load(type, name))) {
- return gFalse;
- }
- lockGlobalParams;
- plugins->append(plugin);
- unlockGlobalParams;
- return gTrue;
-}
-
-#endif // ENABLE_PLUGINS
diff --git a/Build/source/libs/xpdf/xpdf/GlobalParams.h b/Build/source/libs/xpdf/xpdf/GlobalParams.h
deleted file mode 100644
index cd10e76b04c..00000000000
--- a/Build/source/libs/xpdf/xpdf/GlobalParams.h
+++ /dev/null
@@ -1,514 +0,0 @@
-//========================================================================
-//
-// GlobalParams.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: GlobalParams.h 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#ifndef GLOBALPARAMS_H
-#define GLOBALPARAMS_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include <stdio.h>
-#include "gtypes.h"
-#include "CharTypes.h"
-
-#if MULTITHREADED
-#include "GMutex.h"
-#endif
-
-class GString;
-class GList;
-class GHash;
-class NameToCharCode;
-class CharCodeToUnicode;
-class CharCodeToUnicodeCache;
-class UnicodeMap;
-class UnicodeMapCache;
-class CMap;
-class CMapCache;
-struct XpdfSecurityHandler;
-class GlobalParams;
-#ifdef WIN32
-class WinFontList;
-#endif
-
-//------------------------------------------------------------------------
-
-// The global parameters object.
-extern GlobalParams *globalParams;
-
-//------------------------------------------------------------------------
-
-enum DisplayFontParamKind {
- displayFontT1,
- displayFontTT
-};
-
-struct DisplayFontParamT1 {
- GString *fileName;
-};
-
-struct DisplayFontParamTT {
- GString *fileName;
-};
-
-class DisplayFontParam {
-public:
-
- GString *name; // font name for 8-bit fonts and named
- // CID fonts; collection name for
- // generic CID fonts
- DisplayFontParamKind kind;
- union {
- DisplayFontParamT1 t1;
- DisplayFontParamTT tt;
- };
-
- DisplayFontParam(GString *nameA, DisplayFontParamKind kindA);
- virtual ~DisplayFontParam();
-};
-
-//------------------------------------------------------------------------
-
-class PSFontParam {
-public:
-
- GString *pdfFontName; // PDF font name for 8-bit fonts and
- // named 16-bit fonts; char collection
- // name for generic 16-bit fonts
- int wMode; // writing mode (0=horiz, 1=vert) for
- // 16-bit fonts
- GString *psFontName; // PostScript font name
- GString *encoding; // encoding, for 16-bit fonts only
-
- PSFontParam(GString *pdfFontNameA, int wModeA,
- GString *psFontNameA, GString *encodingA);
- ~PSFontParam();
-};
-
-//------------------------------------------------------------------------
-
-enum PSLevel {
- psLevel1,
- psLevel1Sep,
- psLevel2,
- psLevel2Sep,
- psLevel3,
- psLevel3Sep
-};
-
-//------------------------------------------------------------------------
-
-enum EndOfLineKind {
- eolUnix, // LF
- eolDOS, // CR+LF
- eolMac // CR
-};
-
-//------------------------------------------------------------------------
-
-enum ScreenType {
- screenUnset,
- screenDispersed,
- screenClustered,
- screenStochasticClustered
-};
-
-//------------------------------------------------------------------------
-
-#ifndef PDF_PARSER_ONLY
-class KeyBinding {
-public:
-
- int code; // 0x20 .. 0xfe = ASCII,
- // >=0x10000 = special keys, mouse buttons,
- // etc. (xpdfKeyCode* symbols)
- int mods; // modifiers (xpdfKeyMod* symbols, or-ed
- // together)
- int context; // context (xpdfKeyContext* symbols, or-ed
- // together)
- GList *cmds; // list of commands [GString]
-
- KeyBinding(int codeA, int modsA, int contextA, char *cmd0);
- KeyBinding(int codeA, int modsA, int contextA, char *cmd0, char *cmd1);
- KeyBinding(int codeA, int modsA, int contextA, GList *cmdsA);
- ~KeyBinding();
-};
-
-#define xpdfKeyCodeTab 0x1000
-#define xpdfKeyCodeReturn 0x1001
-#define xpdfKeyCodeEnter 0x1002
-#define xpdfKeyCodeBackspace 0x1003
-#define xpdfKeyCodeInsert 0x1004
-#define xpdfKeyCodeDelete 0x1005
-#define xpdfKeyCodeHome 0x1006
-#define xpdfKeyCodeEnd 0x1007
-#define xpdfKeyCodePgUp 0x1008
-#define xpdfKeyCodePgDn 0x1009
-#define xpdfKeyCodeLeft 0x100a
-#define xpdfKeyCodeRight 0x100b
-#define xpdfKeyCodeUp 0x100c
-#define xpdfKeyCodeDown 0x100d
-#define xpdfKeyCodeF1 0x1100
-#define xpdfKeyCodeF35 0x1122
-#define xpdfKeyCodeMousePress1 0x2001
-#define xpdfKeyCodeMousePress2 0x2002
-#define xpdfKeyCodeMousePress3 0x2003
-#define xpdfKeyCodeMousePress4 0x2004
-#define xpdfKeyCodeMousePress5 0x2005
-#define xpdfKeyCodeMousePress6 0x2006
-#define xpdfKeyCodeMousePress7 0x2007
-#define xpdfKeyCodeMouseRelease1 0x2101
-#define xpdfKeyCodeMouseRelease2 0x2102
-#define xpdfKeyCodeMouseRelease3 0x2103
-#define xpdfKeyCodeMouseRelease4 0x2104
-#define xpdfKeyCodeMouseRelease5 0x2105
-#define xpdfKeyCodeMouseRelease6 0x2106
-#define xpdfKeyCodeMouseRelease7 0x2107
-#define xpdfKeyModNone 0
-#define xpdfKeyModShift (1 << 0)
-#define xpdfKeyModCtrl (1 << 1)
-#define xpdfKeyModAlt (1 << 2)
-#define xpdfKeyContextAny 0
-#define xpdfKeyContextFullScreen (1 << 0)
-#define xpdfKeyContextWindow (2 << 0)
-#define xpdfKeyContextContinuous (1 << 2)
-#define xpdfKeyContextSinglePage (2 << 2)
-#define xpdfKeyContextOverLink (1 << 4)
-#define xpdfKeyContextOffLink (2 << 4)
-#define xpdfKeyContextOutline (1 << 6)
-#define xpdfKeyContextMainWin (2 << 6)
-#define xpdfKeyContextScrLockOn (1 << 8)
-#define xpdfKeyContextScrLockOff (2 << 8)
-#endif
-
-//------------------------------------------------------------------------
-
-class GlobalParams {
-public:
-
- // Initialize the global parameters by attempting to read a config
- // file.
- GlobalParams(char *cfgFileName);
-
- // Initialize it without reading the config
- GlobalParams();
-
- ~GlobalParams();
-
- void setBaseDir(char *dir);
- void setupBaseFonts(char *dir);
-
-#ifndef PDF_PARSER_ONLY
- void parseLine(char *buf, GString *fileName, int line);
-#endif
-
- //----- accessors
-
- CharCode getMacRomanCharCode(char *charName);
-
- GString *getBaseDir();
- Unicode mapNameToUnicode(char *charName);
- UnicodeMap *getResidentUnicodeMap(GString *encodingName);
- FILE *getUnicodeMapFile(GString *encodingName);
- FILE *findCMapFile(GString *collection, GString *cMapName);
- FILE *findToUnicodeFile(GString *name);
- DisplayFontParam *getDisplayFont(GString *fontName);
- DisplayFontParam *getDisplayCIDFont(GString *fontName, GString *collection);
- GString *getPSFile();
- int getPSPaperWidth();
- int getPSPaperHeight();
- void getPSImageableArea(int *llx, int *lly, int *urx, int *ury);
- GBool getPSDuplex();
- GBool getPSCrop();
- GBool getPSExpandSmaller();
- GBool getPSShrinkLarger();
- GBool getPSCenter();
- PSLevel getPSLevel();
- PSFontParam *getPSFont(GString *fontName);
- PSFontParam *getPSFont16(GString *fontName, GString *collection, int wMode);
- GBool getPSEmbedType1();
- GBool getPSEmbedTrueType();
- GBool getPSEmbedCIDPostScript();
- GBool getPSEmbedCIDTrueType();
- GBool getPSPreload();
- GBool getPSOPI();
- GBool getPSASCIIHex();
- GString *getTextEncodingName();
- EndOfLineKind getTextEOL();
- GBool getTextPageBreaks();
- GBool getTextKeepTinyChars();
- GString *findFontFile(GString *fontName, char **exts);
- GString *getInitialZoom();
- GBool getContinuousView();
- GBool getEnableT1lib();
- GBool getEnableFreeType();
- GBool getAntialias();
- GBool getVectorAntialias();
- GBool getStrokeAdjust();
- ScreenType getScreenType();
- int getScreenSize();
- int getScreenDotRadius();
- double getScreenGamma();
- double getScreenBlackThreshold();
- double getScreenWhiteThreshold();
- GString *getURLCommand() { return urlCommand; }
- GString *getMovieCommand() { return movieCommand; }
- GBool getMapNumericCharNames();
- GBool getMapUnknownCharNames();
-#ifndef PDF_PARSER_ONLY
- GList *getKeyBinding(int code, int mods, int context);
-#endif
- GBool getPrintCommands();
- GBool getErrQuiet();
-
- CharCodeToUnicode *getCIDToUnicode(GString *collection);
- CharCodeToUnicode *getUnicodeToUnicode(GString *fontName);
- UnicodeMap *getUnicodeMap(GString *encodingName);
- CMap *getCMap(GString *collection, GString *cMapName);
- UnicodeMap *getTextEncoding();
-
- //----- functions to set parameters
-
- void addDisplayFont(DisplayFontParam *param);
- void setPSFile(char *file);
- GBool setPSPaperSize(char *size);
- void setPSPaperWidth(int width);
- void setPSPaperHeight(int height);
- void setPSImageableArea(int llx, int lly, int urx, int ury);
- void setPSDuplex(GBool duplex);
- void setPSCrop(GBool crop);
- void setPSExpandSmaller(GBool expand);
- void setPSShrinkLarger(GBool shrink);
- void setPSCenter(GBool center);
- void setPSLevel(PSLevel level);
- void setPSEmbedType1(GBool embed);
- void setPSEmbedTrueType(GBool embed);
- void setPSEmbedCIDPostScript(GBool embed);
- void setPSEmbedCIDTrueType(GBool embed);
- void setPSPreload(GBool preload);
- void setPSOPI(GBool opi);
- void setPSASCIIHex(GBool hex);
- void setTextEncoding(char *encodingName);
- GBool setTextEOL(char *s);
- void setTextPageBreaks(GBool pageBreaks);
- void setTextKeepTinyChars(GBool keep);
- void setInitialZoom(char *s);
- void setContinuousView(GBool cont);
- GBool setEnableT1lib(char *s);
- GBool setEnableFreeType(char *s);
- GBool setAntialias(char *s);
- GBool setVectorAntialias(char *s);
- void setScreenType(ScreenType t);
- void setScreenSize(int size);
- void setScreenDotRadius(int r);
- void setScreenGamma(double gamma);
- void setScreenBlackThreshold(double thresh);
- void setScreenWhiteThreshold(double thresh);
- void setMapNumericCharNames(GBool map);
- void setMapUnknownCharNames(GBool map);
- void setPrintCommands(GBool printCommandsA);
- void setErrQuiet(GBool errQuietA);
-
- //----- security handlers
-
- void addSecurityHandler(XpdfSecurityHandler *handler);
- XpdfSecurityHandler *getSecurityHandler(char *name);
-
-private:
-
-#ifndef PDF_PARSER_ONLY
- void createDefaultKeyBindings();
-#endif
- void parseFile(GString *fileName, FILE *f);
- void parseNameToUnicode(GList *tokens, GString *fileName, int line);
- void parseCIDToUnicode(GList *tokens, GString *fileName, int line);
- void parseUnicodeToUnicode(GList *tokens, GString *fileName, int line);
- void parseUnicodeMap(GList *tokens, GString *fileName, int line);
- void parseCMapDir(GList *tokens, GString *fileName, int line);
- void parseToUnicodeDir(GList *tokens, GString *fileName, int line);
- void parseDisplayFont(GList *tokens, GHash *fontHash,
- DisplayFontParamKind kind,
- GString *fileName, int line);
- void parsePSFile(GList *tokens, GString *fileName, int line);
- void parsePSPaperSize(GList *tokens, GString *fileName, int line);
- void parsePSImageableArea(GList *tokens, GString *fileName, int line);
- void parsePSLevel(GList *tokens, GString *fileName, int line);
- void parsePSFont(GList *tokens, GString *fileName, int line);
- void parsePSFont16(char *cmdName, GList *fontList,
- GList *tokens, GString *fileName, int line);
- void parseTextEncoding(GList *tokens, GString *fileName, int line);
- void parseTextEOL(GList *tokens, GString *fileName, int line);
- void parseFontDir(GList *tokens, GString *fileName, int line);
- void parseInitialZoom(GList *tokens, GString *fileName, int line);
- void parseScreenType(GList *tokens, GString *fileName, int line);
-#ifndef PDF_PARSER_ONLY
- void parseBind(GList *tokens, GString *fileName, int line);
- void parseUnbind(GList *tokens, GString *fileName, int line);
- GBool parseKey(GString *modKeyStr, GString *contextStr,
- int *code, int *mods, int *context,
- char *cmdName,
- GList *tokens, GString *fileName, int line);
-#endif
- void parseCommand(char *cmdName, GString **val,
- GList *tokens, GString *fileName, int line);
- void parseYesNo(char *cmdName, GBool *flag,
- GList *tokens, GString *fileName, int line);
- GBool parseYesNo2(char *token, GBool *flag);
- void parseInteger(char *cmdName, int *val,
- GList *tokens, GString *fileName, int line);
- void parseFloat(char *cmdName, double *val,
- GList *tokens, GString *fileName, int line);
- UnicodeMap *getUnicodeMap2(GString *encodingName);
-#ifdef ENABLE_PLUGINS
- GBool loadPlugin(char *type, char *name);
-#endif
-
- //----- static tables
-
- NameToCharCode * // mapping from char name to
- macRomanReverseMap; // MacRomanEncoding index
-
- //----- user-modifiable settings
-
- GString *baseDir; // base directory - for plugins, etc.
- NameToCharCode * // mapping from char name to Unicode
- nameToUnicode;
- GHash *cidToUnicodes; // files for mappings from char collections
- // to Unicode, indexed by collection name
- // [GString]
- GHash *unicodeToUnicodes; // files for Unicode-to-Unicode mappings,
- // indexed by font name pattern [GString]
- GHash *residentUnicodeMaps; // mappings from Unicode to char codes,
- // indexed by encoding name [UnicodeMap]
- GHash *unicodeMaps; // files for mappings from Unicode to char
- // codes, indexed by encoding name [GString]
- GHash *cMapDirs; // list of CMap dirs, indexed by collection
- // name [GList[GString]]
- GList *toUnicodeDirs; // list of ToUnicode CMap dirs [GString]
- GHash *displayFonts; // display font info, indexed by font name
- // [DisplayFontParam]
-#ifdef WIN32
- WinFontList *winFontList; // system TrueType fonts
-#endif
- GHash *displayCIDFonts; // display CID font info, indexed by
- // collection [DisplayFontParam]
- GHash *displayNamedCIDFonts; // display CID font info, indexed by
- // font name [DisplayFontParam]
- GString *psFile; // PostScript file or command (for xpdf)
- int psPaperWidth; // paper size, in PostScript points, for
- int psPaperHeight; // PostScript output
- int psImageableLLX, // imageable area, in PostScript points,
- psImageableLLY, // for PostScript output
- psImageableURX,
- psImageableURY;
- GBool psCrop; // crop PS output to CropBox
- GBool psExpandSmaller; // expand smaller pages to fill paper
- GBool psShrinkLarger; // shrink larger pages to fit paper
- GBool psCenter; // center pages on the paper
- GBool psDuplex; // enable duplexing in PostScript?
- PSLevel psLevel; // PostScript level to generate
- GHash *psFonts; // PostScript font info, indexed by PDF
- // font name [PSFontParam]
- GList *psNamedFonts16; // named 16-bit fonts [PSFontParam]
- GList *psFonts16; // generic 16-bit fonts [PSFontParam]
- GBool psEmbedType1; // embed Type 1 fonts?
- GBool psEmbedTrueType; // embed TrueType fonts?
- GBool psEmbedCIDPostScript; // embed CID PostScript fonts?
- GBool psEmbedCIDTrueType; // embed CID TrueType fonts?
- GBool psPreload; // preload PostScript images and forms into
- // memory
- GBool psOPI; // generate PostScript OPI comments?
- GBool psASCIIHex; // use ASCIIHex instead of ASCII85?
- GString *textEncoding; // encoding (unicodeMap) to use for text
- // output
- EndOfLineKind textEOL; // type of EOL marker to use for text
- // output
- GBool textPageBreaks; // insert end-of-page markers?
- GBool textKeepTinyChars; // keep all characters in text output
- GList *fontDirs; // list of font dirs [GString]
- GString *initialZoom; // initial zoom level
- GBool continuousView; // continuous view mode
- GBool enableT1lib; // t1lib enable flag
- GBool enableFreeType; // FreeType enable flag
- GBool antialias; // font anti-aliasing enable flag
- GBool vectorAntialias; // vector anti-aliasing enable flag
- GBool strokeAdjust; // stroke adjustment enable flag
- ScreenType screenType; // halftone screen type
- int screenSize; // screen matrix size
- int screenDotRadius; // screen dot radius
- double screenGamma; // screen gamma correction
- double screenBlackThreshold; // screen black clamping threshold
- double screenWhiteThreshold; // screen white clamping threshold
- GString *urlCommand; // command executed for URL links
- GString *movieCommand; // command executed for movie annotations
- GBool mapNumericCharNames; // map numeric char names (from font subsets)?
- GBool mapUnknownCharNames; // map unknown char names?
-#ifndef PDF_PARSER_ONLY
- GList *keyBindings; // key & mouse button bindings [KeyBinding]
-#endif
- GBool printCommands; // print the drawing commands
- GBool errQuiet; // suppress error messages?
-
- CharCodeToUnicodeCache *cidToUnicodeCache;
- CharCodeToUnicodeCache *unicodeToUnicodeCache;
- UnicodeMapCache *unicodeMapCache;
- CMapCache *cMapCache;
-
-#ifdef ENABLE_PLUGINS
- GList *plugins; // list of plugins [Plugin]
- GList *securityHandlers; // list of loaded security handlers
- // [XpdfSecurityHandler]
-#endif
-
-#if MULTITHREADED
- GMutex mutex;
- GMutex unicodeMapCacheMutex;
- GMutex cMapCacheMutex;
-#endif
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/JArithmeticDecoder.cc b/Build/source/libs/xpdf/xpdf/JArithmeticDecoder.cc
deleted file mode 100644
index 195b73e1c24..00000000000
--- a/Build/source/libs/xpdf/xpdf/JArithmeticDecoder.cc
+++ /dev/null
@@ -1,322 +0,0 @@
-//========================================================================
-//
-// JArithmeticDecoder.cc
-//
-// Copyright 2002-2004 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include "Object.h"
-#include "Stream.h"
-#include "JArithmeticDecoder.h"
-
-//------------------------------------------------------------------------
-// JArithmeticDecoderStates
-//------------------------------------------------------------------------
-
-JArithmeticDecoderStats::JArithmeticDecoderStats(int contextSizeA) {
- contextSize = contextSizeA;
- cxTab = (Guchar *)gmallocn(contextSize, sizeof(Guchar));
- reset();
-}
-
-JArithmeticDecoderStats::~JArithmeticDecoderStats() {
- gfree(cxTab);
-}
-
-JArithmeticDecoderStats *JArithmeticDecoderStats::copy() {
- JArithmeticDecoderStats *stats;
-
- stats = new JArithmeticDecoderStats(contextSize);
- memcpy(stats->cxTab, cxTab, contextSize);
- return stats;
-}
-
-void JArithmeticDecoderStats::reset() {
- memset(cxTab, 0, contextSize);
-}
-
-void JArithmeticDecoderStats::copyFrom(JArithmeticDecoderStats *stats) {
- memcpy(cxTab, stats->cxTab, contextSize);
-}
-
-void JArithmeticDecoderStats::setEntry(Guint cx, int i, int mps) {
- cxTab[cx] = (i << 1) + mps;
-}
-
-//------------------------------------------------------------------------
-// JArithmeticDecoder
-//------------------------------------------------------------------------
-
-Guint JArithmeticDecoder::qeTab[47] = {
- 0x56010000, 0x34010000, 0x18010000, 0x0AC10000,
- 0x05210000, 0x02210000, 0x56010000, 0x54010000,
- 0x48010000, 0x38010000, 0x30010000, 0x24010000,
- 0x1C010000, 0x16010000, 0x56010000, 0x54010000,
- 0x51010000, 0x48010000, 0x38010000, 0x34010000,
- 0x30010000, 0x28010000, 0x24010000, 0x22010000,
- 0x1C010000, 0x18010000, 0x16010000, 0x14010000,
- 0x12010000, 0x11010000, 0x0AC10000, 0x09C10000,
- 0x08A10000, 0x05210000, 0x04410000, 0x02A10000,
- 0x02210000, 0x01410000, 0x01110000, 0x00850000,
- 0x00490000, 0x00250000, 0x00150000, 0x00090000,
- 0x00050000, 0x00010000, 0x56010000
-};
-
-int JArithmeticDecoder::nmpsTab[47] = {
- 1, 2, 3, 4, 5, 38, 7, 8, 9, 10, 11, 12, 13, 29, 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, 45, 46
-};
-
-int JArithmeticDecoder::nlpsTab[47] = {
- 1, 6, 9, 12, 29, 33, 6, 14, 14, 14, 17, 18, 20, 21, 14, 14,
- 15, 16, 17, 18, 19, 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, 46
-};
-
-int JArithmeticDecoder::switchTab[47] = {
- 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 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
-};
-
-JArithmeticDecoder::JArithmeticDecoder() {
- str = NULL;
- dataLen = 0;
- limitStream = gFalse;
-}
-
-inline Guint JArithmeticDecoder::readByte() {
- if (limitStream) {
- --dataLen;
- if (dataLen < 0) {
- return 0xff;
- }
- }
- return (Guint)str->getChar() & 0xff;
-}
-
-JArithmeticDecoder::~JArithmeticDecoder() {
- cleanup();
-}
-
-void JArithmeticDecoder::start() {
- buf0 = readByte();
- buf1 = readByte();
-
- // INITDEC
- c = (buf0 ^ 0xff) << 16;
- byteIn();
- c <<= 7;
- ct -= 7;
- a = 0x80000000;
-}
-
-void JArithmeticDecoder::restart(int dataLenA) {
- int oldDataLen;
-
- oldDataLen = dataLen;
- dataLen = dataLenA;
- if (oldDataLen == -1) {
- buf1 = readByte();
- } else if (oldDataLen <= -2) {
- buf0 = readByte();
- buf1 = readByte();
- }
-}
-
-void JArithmeticDecoder::cleanup() {
- if (limitStream) {
- while (dataLen > 0) {
- buf0 = buf1;
- buf1 = readByte();
- }
- }
-}
-
-int JArithmeticDecoder::decodeBit(Guint context,
- JArithmeticDecoderStats *stats) {
- int bit;
- Guint qe;
- int iCX, mpsCX;
-
- iCX = stats->cxTab[context] >> 1;
- mpsCX = stats->cxTab[context] & 1;
- qe = qeTab[iCX];
- a -= qe;
- if (c < a) {
- if (a & 0x80000000) {
- bit = mpsCX;
- } else {
- // MPS_EXCHANGE
- if (a < qe) {
- bit = 1 - mpsCX;
- if (switchTab[iCX]) {
- stats->cxTab[context] = (nlpsTab[iCX] << 1) | (1 - mpsCX);
- } else {
- stats->cxTab[context] = (nlpsTab[iCX] << 1) | mpsCX;
- }
- } else {
- bit = mpsCX;
- stats->cxTab[context] = (nmpsTab[iCX] << 1) | mpsCX;
- }
- // RENORMD
- do {
- if (ct == 0) {
- byteIn();
- }
- a <<= 1;
- c <<= 1;
- --ct;
- } while (!(a & 0x80000000));
- }
- } else {
- c -= a;
- // LPS_EXCHANGE
- if (a < qe) {
- bit = mpsCX;
- stats->cxTab[context] = (nmpsTab[iCX] << 1) | mpsCX;
- } else {
- bit = 1 - mpsCX;
- if (switchTab[iCX]) {
- stats->cxTab[context] = (nlpsTab[iCX] << 1) | (1 - mpsCX);
- } else {
- stats->cxTab[context] = (nlpsTab[iCX] << 1) | mpsCX;
- }
- }
- a = qe;
- // RENORMD
- do {
- if (ct == 0) {
- byteIn();
- }
- a <<= 1;
- c <<= 1;
- --ct;
- } while (!(a & 0x80000000));
- }
- return bit;
-}
-
-int JArithmeticDecoder::decodeByte(Guint context,
- JArithmeticDecoderStats *stats) {
- int byte;
- int i;
-
- byte = 0;
- for (i = 0; i < 8; ++i) {
- byte = (byte << 1) | decodeBit(context, stats);
- }
- return byte;
-}
-
-GBool JArithmeticDecoder::decodeInt(int *x, JArithmeticDecoderStats *stats) {
- int s;
- Guint v;
- int i;
-
- prev = 1;
- s = decodeIntBit(stats);
- if (decodeIntBit(stats)) {
- if (decodeIntBit(stats)) {
- if (decodeIntBit(stats)) {
- if (decodeIntBit(stats)) {
- if (decodeIntBit(stats)) {
- v = 0;
- for (i = 0; i < 32; ++i) {
- v = (v << 1) | decodeIntBit(stats);
- }
- v += 4436;
- } else {
- v = 0;
- for (i = 0; i < 12; ++i) {
- v = (v << 1) | decodeIntBit(stats);
- }
- v += 340;
- }
- } else {
- v = 0;
- for (i = 0; i < 8; ++i) {
- v = (v << 1) | decodeIntBit(stats);
- }
- v += 84;
- }
- } else {
- v = 0;
- for (i = 0; i < 6; ++i) {
- v = (v << 1) | decodeIntBit(stats);
- }
- v += 20;
- }
- } else {
- v = decodeIntBit(stats);
- v = (v << 1) | decodeIntBit(stats);
- v = (v << 1) | decodeIntBit(stats);
- v = (v << 1) | decodeIntBit(stats);
- v += 4;
- }
- } else {
- v = decodeIntBit(stats);
- v = (v << 1) | decodeIntBit(stats);
- }
-
- if (s) {
- if (v == 0) {
- return gFalse;
- }
- *x = -(int)v;
- } else {
- *x = (int)v;
- }
- return gTrue;
-}
-
-int JArithmeticDecoder::decodeIntBit(JArithmeticDecoderStats *stats) {
- int bit;
-
- bit = decodeBit(prev, stats);
- if (prev < 0x100) {
- prev = (prev << 1) | bit;
- } else {
- prev = (((prev << 1) | bit) & 0x1ff) | 0x100;
- }
- return bit;
-}
-
-Guint JArithmeticDecoder::decodeIAID(Guint codeLen,
- JArithmeticDecoderStats *stats) {
- Guint i;
- int bit;
-
- prev = 1;
- for (i = 0; i < codeLen; ++i) {
- bit = decodeBit(prev, stats);
- prev = (prev << 1) | bit;
- }
- return prev - (1 << codeLen);
-}
-
-void JArithmeticDecoder::byteIn() {
- if (buf0 == 0xff) {
- if (buf1 > 0x8f) {
- ct = 8;
- } else {
- buf0 = buf1;
- buf1 = readByte();
- c = c + 0xfe00 - (buf0 << 9);
- ct = 7;
- }
- } else {
- buf0 = buf1;
- buf1 = readByte();
- c = c + 0xff00 - (buf0 << 8);
- ct = 8;
- }
-}
diff --git a/Build/source/libs/xpdf/xpdf/JArithmeticDecoder.h b/Build/source/libs/xpdf/xpdf/JArithmeticDecoder.h
deleted file mode 100644
index a40823ddb0f..00000000000
--- a/Build/source/libs/xpdf/xpdf/JArithmeticDecoder.h
+++ /dev/null
@@ -1,109 +0,0 @@
-//========================================================================
-//
-// JArithmeticDecoder.h
-//
-// Arithmetic decoder used by the JBIG2 and JPEG2000 decoders.
-//
-// Copyright 2002-2004 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef JARITHMETICDECODER_H
-#define JARITHMETICDECODER_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-
-class Stream;
-
-//------------------------------------------------------------------------
-// JArithmeticDecoderStats
-//------------------------------------------------------------------------
-
-class JArithmeticDecoderStats {
-public:
-
- JArithmeticDecoderStats(int contextSizeA);
- ~JArithmeticDecoderStats();
- JArithmeticDecoderStats *copy();
- void reset();
- int getContextSize() { return contextSize; }
- void copyFrom(JArithmeticDecoderStats *stats);
- void setEntry(Guint cx, int i, int mps);
-
-private:
-
- Guchar *cxTab; // cxTab[cx] = (i[cx] << 1) + mps[cx]
- int contextSize;
-
- friend class JArithmeticDecoder;
-};
-
-//------------------------------------------------------------------------
-// JArithmeticDecoder
-//------------------------------------------------------------------------
-
-class JArithmeticDecoder {
-public:
-
- JArithmeticDecoder();
- ~JArithmeticDecoder();
-
- void setStream(Stream *strA)
- { str = strA; dataLen = 0; limitStream = gFalse; }
- void setStream(Stream *strA, int dataLenA)
- { str = strA; dataLen = dataLenA; limitStream = gTrue; }
-
- // Start decoding on a new stream. This fills the byte buffers and
- // runs INITDEC.
- void start();
-
- // Restart decoding on an interrupted stream. This refills the
- // buffers if needed, but does not run INITDEC. (This is used in
- // JPEG 2000 streams when codeblock data is split across multiple
- // packets/layers.)
- void restart(int dataLenA);
-
- // Read any leftover data in the stream.
- void cleanup();
-
- // Decode one bit.
- int decodeBit(Guint context, JArithmeticDecoderStats *stats);
-
- // Decode eight bits.
- int decodeByte(Guint context, JArithmeticDecoderStats *stats);
-
- // Returns false for OOB, otherwise sets *<x> and returns true.
- GBool decodeInt(int *x, JArithmeticDecoderStats *stats);
-
- Guint decodeIAID(Guint codeLen,
- JArithmeticDecoderStats *stats);
-
-private:
-
- Guint readByte();
- int decodeIntBit(JArithmeticDecoderStats *stats);
- void byteIn();
-
- static Guint qeTab[47];
- static int nmpsTab[47];
- static int nlpsTab[47];
- static int switchTab[47];
-
- Guint buf0, buf1;
- Guint c, a;
- int ct;
-
- Guint prev; // for the integer decoder
-
- Stream *str;
- int dataLen;
- GBool limitStream;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/JBIG2Stream.cc b/Build/source/libs/xpdf/xpdf/JBIG2Stream.cc
deleted file mode 100644
index a4f1b6eacdc..00000000000
--- a/Build/source/libs/xpdf/xpdf/JBIG2Stream.cc
+++ /dev/null
@@ -1,3413 +0,0 @@
-//========================================================================
-//
-// JBIG2Stream.cc
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <limits.h>
-#include "GList.h"
-#include "Error.h"
-#include "JArithmeticDecoder.h"
-#include "JBIG2Stream.h"
-
-//~ share these tables
-#include "Stream-CCITT.h"
-
-//------------------------------------------------------------------------
-
-static int contextSize[4] = { 16, 13, 10, 10 };
-static int refContextSize[2] = { 13, 10 };
-
-//------------------------------------------------------------------------
-// JBIG2HuffmanTable
-//------------------------------------------------------------------------
-
-#define jbig2HuffmanLOW 0xfffffffd
-#define jbig2HuffmanOOB 0xfffffffe
-#define jbig2HuffmanEOT 0xffffffff
-
-struct JBIG2HuffmanTable {
- int val;
- Guint prefixLen;
- Guint rangeLen; // can also be LOW, OOB, or EOT
- Guint prefix;
-};
-
-JBIG2HuffmanTable huffTableA[] = {
- { 0, 1, 4, 0x000 },
- { 16, 2, 8, 0x002 },
- { 272, 3, 16, 0x006 },
- { 65808, 3, 32, 0x007 },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableB[] = {
- { 0, 1, 0, 0x000 },
- { 1, 2, 0, 0x002 },
- { 2, 3, 0, 0x006 },
- { 3, 4, 3, 0x00e },
- { 11, 5, 6, 0x01e },
- { 75, 6, 32, 0x03e },
- { 0, 6, jbig2HuffmanOOB, 0x03f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableC[] = {
- { 0, 1, 0, 0x000 },
- { 1, 2, 0, 0x002 },
- { 2, 3, 0, 0x006 },
- { 3, 4, 3, 0x00e },
- { 11, 5, 6, 0x01e },
- { 0, 6, jbig2HuffmanOOB, 0x03e },
- { 75, 7, 32, 0x0fe },
- { -256, 8, 8, 0x0fe },
- { -257, 8, jbig2HuffmanLOW, 0x0ff },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableD[] = {
- { 1, 1, 0, 0x000 },
- { 2, 2, 0, 0x002 },
- { 3, 3, 0, 0x006 },
- { 4, 4, 3, 0x00e },
- { 12, 5, 6, 0x01e },
- { 76, 5, 32, 0x01f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableE[] = {
- { 1, 1, 0, 0x000 },
- { 2, 2, 0, 0x002 },
- { 3, 3, 0, 0x006 },
- { 4, 4, 3, 0x00e },
- { 12, 5, 6, 0x01e },
- { 76, 6, 32, 0x03e },
- { -255, 7, 8, 0x07e },
- { -256, 7, jbig2HuffmanLOW, 0x07f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableF[] = {
- { 0, 2, 7, 0x000 },
- { 128, 3, 7, 0x002 },
- { 256, 3, 8, 0x003 },
- { -1024, 4, 9, 0x008 },
- { -512, 4, 8, 0x009 },
- { -256, 4, 7, 0x00a },
- { -32, 4, 5, 0x00b },
- { 512, 4, 9, 0x00c },
- { 1024, 4, 10, 0x00d },
- { -2048, 5, 10, 0x01c },
- { -128, 5, 6, 0x01d },
- { -64, 5, 5, 0x01e },
- { -2049, 6, jbig2HuffmanLOW, 0x03e },
- { 2048, 6, 32, 0x03f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableG[] = {
- { -512, 3, 8, 0x000 },
- { 256, 3, 8, 0x001 },
- { 512, 3, 9, 0x002 },
- { 1024, 3, 10, 0x003 },
- { -1024, 4, 9, 0x008 },
- { -256, 4, 7, 0x009 },
- { -32, 4, 5, 0x00a },
- { 0, 4, 5, 0x00b },
- { 128, 4, 7, 0x00c },
- { -128, 5, 6, 0x01a },
- { -64, 5, 5, 0x01b },
- { 32, 5, 5, 0x01c },
- { 64, 5, 6, 0x01d },
- { -1025, 5, jbig2HuffmanLOW, 0x01e },
- { 2048, 5, 32, 0x01f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableH[] = {
- { 0, 2, 1, 0x000 },
- { 0, 2, jbig2HuffmanOOB, 0x001 },
- { 4, 3, 4, 0x004 },
- { -1, 4, 0, 0x00a },
- { 22, 4, 4, 0x00b },
- { 38, 4, 5, 0x00c },
- { 2, 5, 0, 0x01a },
- { 70, 5, 6, 0x01b },
- { 134, 5, 7, 0x01c },
- { 3, 6, 0, 0x03a },
- { 20, 6, 1, 0x03b },
- { 262, 6, 7, 0x03c },
- { 646, 6, 10, 0x03d },
- { -2, 7, 0, 0x07c },
- { 390, 7, 8, 0x07d },
- { -15, 8, 3, 0x0fc },
- { -5, 8, 1, 0x0fd },
- { -7, 9, 1, 0x1fc },
- { -3, 9, 0, 0x1fd },
- { -16, 9, jbig2HuffmanLOW, 0x1fe },
- { 1670, 9, 32, 0x1ff },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableI[] = {
- { 0, 2, jbig2HuffmanOOB, 0x000 },
- { -1, 3, 1, 0x002 },
- { 1, 3, 1, 0x003 },
- { 7, 3, 5, 0x004 },
- { -3, 4, 1, 0x00a },
- { 43, 4, 5, 0x00b },
- { 75, 4, 6, 0x00c },
- { 3, 5, 1, 0x01a },
- { 139, 5, 7, 0x01b },
- { 267, 5, 8, 0x01c },
- { 5, 6, 1, 0x03a },
- { 39, 6, 2, 0x03b },
- { 523, 6, 8, 0x03c },
- { 1291, 6, 11, 0x03d },
- { -5, 7, 1, 0x07c },
- { 779, 7, 9, 0x07d },
- { -31, 8, 4, 0x0fc },
- { -11, 8, 2, 0x0fd },
- { -15, 9, 2, 0x1fc },
- { -7, 9, 1, 0x1fd },
- { -32, 9, jbig2HuffmanLOW, 0x1fe },
- { 3339, 9, 32, 0x1ff },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableJ[] = {
- { -2, 2, 2, 0x000 },
- { 6, 2, 6, 0x001 },
- { 0, 2, jbig2HuffmanOOB, 0x002 },
- { -3, 5, 0, 0x018 },
- { 2, 5, 0, 0x019 },
- { 70, 5, 5, 0x01a },
- { 3, 6, 0, 0x036 },
- { 102, 6, 5, 0x037 },
- { 134, 6, 6, 0x038 },
- { 198, 6, 7, 0x039 },
- { 326, 6, 8, 0x03a },
- { 582, 6, 9, 0x03b },
- { 1094, 6, 10, 0x03c },
- { -21, 7, 4, 0x07a },
- { -4, 7, 0, 0x07b },
- { 4, 7, 0, 0x07c },
- { 2118, 7, 11, 0x07d },
- { -5, 8, 0, 0x0fc },
- { 5, 8, 0, 0x0fd },
- { -22, 8, jbig2HuffmanLOW, 0x0fe },
- { 4166, 8, 32, 0x0ff },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableK[] = {
- { 1, 1, 0, 0x000 },
- { 2, 2, 1, 0x002 },
- { 4, 4, 0, 0x00c },
- { 5, 4, 1, 0x00d },
- { 7, 5, 1, 0x01c },
- { 9, 5, 2, 0x01d },
- { 13, 6, 2, 0x03c },
- { 17, 7, 2, 0x07a },
- { 21, 7, 3, 0x07b },
- { 29, 7, 4, 0x07c },
- { 45, 7, 5, 0x07d },
- { 77, 7, 6, 0x07e },
- { 141, 7, 32, 0x07f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableL[] = {
- { 1, 1, 0, 0x000 },
- { 2, 2, 0, 0x002 },
- { 3, 3, 1, 0x006 },
- { 5, 5, 0, 0x01c },
- { 6, 5, 1, 0x01d },
- { 8, 6, 1, 0x03c },
- { 10, 7, 0, 0x07a },
- { 11, 7, 1, 0x07b },
- { 13, 7, 2, 0x07c },
- { 17, 7, 3, 0x07d },
- { 25, 7, 4, 0x07e },
- { 41, 8, 5, 0x0fe },
- { 73, 8, 32, 0x0ff },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableM[] = {
- { 1, 1, 0, 0x000 },
- { 2, 3, 0, 0x004 },
- { 7, 3, 3, 0x005 },
- { 3, 4, 0, 0x00c },
- { 5, 4, 1, 0x00d },
- { 4, 5, 0, 0x01c },
- { 15, 6, 1, 0x03a },
- { 17, 6, 2, 0x03b },
- { 21, 6, 3, 0x03c },
- { 29, 6, 4, 0x03d },
- { 45, 6, 5, 0x03e },
- { 77, 7, 6, 0x07e },
- { 141, 7, 32, 0x07f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableN[] = {
- { 0, 1, 0, 0x000 },
- { -2, 3, 0, 0x004 },
- { -1, 3, 0, 0x005 },
- { 1, 3, 0, 0x006 },
- { 2, 3, 0, 0x007 },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-JBIG2HuffmanTable huffTableO[] = {
- { 0, 1, 0, 0x000 },
- { -1, 3, 0, 0x004 },
- { 1, 3, 0, 0x005 },
- { -2, 4, 0, 0x00c },
- { 2, 4, 0, 0x00d },
- { -4, 5, 1, 0x01c },
- { 3, 5, 1, 0x01d },
- { -8, 6, 2, 0x03c },
- { 5, 6, 2, 0x03d },
- { -24, 7, 4, 0x07c },
- { 9, 7, 4, 0x07d },
- { -25, 7, jbig2HuffmanLOW, 0x07e },
- { 25, 7, 32, 0x07f },
- { 0, 0, jbig2HuffmanEOT, 0 }
-};
-
-//------------------------------------------------------------------------
-// JBIG2HuffmanDecoder
-//------------------------------------------------------------------------
-
-class JBIG2HuffmanDecoder {
-public:
-
- JBIG2HuffmanDecoder();
- ~JBIG2HuffmanDecoder();
- void setStream(Stream *strA) { str = strA; }
-
- void reset();
-
- // Returns false for OOB, otherwise sets *<x> and returns true.
- GBool decodeInt(int *x, JBIG2HuffmanTable *table);
-
- Guint readBits(Guint n);
- Guint readBit();
-
- // Sort the table by prefix length and assign prefix values.
- void buildTable(JBIG2HuffmanTable *table, Guint len);
-
-private:
-
- Stream *str;
- Guint buf;
- Guint bufLen;
-};
-
-JBIG2HuffmanDecoder::JBIG2HuffmanDecoder() {
- str = NULL;
- reset();
-}
-
-JBIG2HuffmanDecoder::~JBIG2HuffmanDecoder() {
-}
-
-void JBIG2HuffmanDecoder::reset() {
- buf = 0;
- bufLen = 0;
-}
-
-//~ optimize this
-GBool JBIG2HuffmanDecoder::decodeInt(int *x, JBIG2HuffmanTable *table) {
- Guint i, len, prefix;
-
- i = 0;
- len = 0;
- prefix = 0;
- while (table[i].rangeLen != jbig2HuffmanEOT) {
- while (len < table[i].prefixLen) {
- prefix = (prefix << 1) | readBit();
- ++len;
- }
- if (prefix == table[i].prefix) {
- if (table[i].rangeLen == jbig2HuffmanOOB) {
- return gFalse;
- }
- if (table[i].rangeLen == jbig2HuffmanLOW) {
- *x = table[i].val - readBits(32);
- } else if (table[i].rangeLen > 0) {
- *x = table[i].val + readBits(table[i].rangeLen);
- } else {
- *x = table[i].val;
- }
- return gTrue;
- }
- ++i;
- }
- return gFalse;
-}
-
-Guint JBIG2HuffmanDecoder::readBits(Guint n) {
- Guint x, mask, nLeft;
-
- mask = (n == 32) ? 0xffffffff : ((1 << n) - 1);
- if (bufLen >= n) {
- x = (buf >> (bufLen - n)) & mask;
- bufLen -= n;
- } else {
- x = buf & ((1 << bufLen) - 1);
- nLeft = n - bufLen;
- bufLen = 0;
- while (nLeft >= 8) {
- x = (x << 8) | (str->getChar() & 0xff);
- nLeft -= 8;
- }
- if (nLeft > 0) {
- buf = str->getChar();
- bufLen = 8 - nLeft;
- x = (x << nLeft) | ((buf >> bufLen) & ((1 << nLeft) - 1));
- }
- }
- return x;
-}
-
-Guint JBIG2HuffmanDecoder::readBit() {
- if (bufLen == 0) {
- buf = str->getChar();
- bufLen = 8;
- }
- --bufLen;
- return (buf >> bufLen) & 1;
-}
-
-void JBIG2HuffmanDecoder::buildTable(JBIG2HuffmanTable *table, Guint len) {
- Guint i, j, k, prefix;
- JBIG2HuffmanTable tab;
-
- // stable selection sort:
- // - entries with prefixLen > 0, in ascending prefixLen order
- // - entry with prefixLen = 0, rangeLen = EOT
- // - all other entries with prefixLen = 0
- // (on entry, table[len] has prefixLen = 0, rangeLen = EOT)
- for (i = 0; i < len; ++i) {
- for (j = i; j < len && table[j].prefixLen == 0; ++j) ;
- if (j == len) {
- break;
- }
- for (k = j + 1; k < len; ++k) {
- if (table[k].prefixLen > 0 &&
- table[k].prefixLen < table[j].prefixLen) {
- j = k;
- }
- }
- if (j != i) {
- tab = table[j];
- for (k = j; k > i; --k) {
- table[k] = table[k - 1];
- }
- table[i] = tab;
- }
- }
- table[i] = table[len];
-
- // assign prefixes
- i = 0;
- prefix = 0;
- table[i++].prefix = prefix++;
- for (; table[i].rangeLen != jbig2HuffmanEOT; ++i) {
- prefix <<= table[i].prefixLen - table[i-1].prefixLen;
- table[i].prefix = prefix++;
- }
-}
-
-//------------------------------------------------------------------------
-// JBIG2MMRDecoder
-//------------------------------------------------------------------------
-
-class JBIG2MMRDecoder {
-public:
-
- JBIG2MMRDecoder();
- ~JBIG2MMRDecoder();
- void setStream(Stream *strA) { str = strA; }
- void reset();
- int get2DCode();
- int getBlackCode();
- int getWhiteCode();
- Guint get24Bits();
- void skipTo(Guint length);
-
-private:
-
- Stream *str;
- Guint buf;
- Guint bufLen;
- Guint nBytesRead;
-};
-
-JBIG2MMRDecoder::JBIG2MMRDecoder() {
- str = NULL;
- reset();
-}
-
-JBIG2MMRDecoder::~JBIG2MMRDecoder() {
-}
-
-void JBIG2MMRDecoder::reset() {
- buf = 0;
- bufLen = 0;
- nBytesRead = 0;
-}
-
-int JBIG2MMRDecoder::get2DCode() {
- CCITTCode *p;
-
- if (bufLen == 0) {
- buf = str->getChar() & 0xff;
- bufLen = 8;
- ++nBytesRead;
- p = &twoDimTab1[(buf >> 1) & 0x7f];
- } else if (bufLen == 8) {
- p = &twoDimTab1[(buf >> 1) & 0x7f];
- } else {
- p = &twoDimTab1[(buf << (7 - bufLen)) & 0x7f];
- if (p->bits < 0 || p->bits > (int)bufLen) {
- buf = (buf << 8) | (str->getChar() & 0xff);
- bufLen += 8;
- ++nBytesRead;
- p = &twoDimTab1[(buf >> (bufLen - 7)) & 0x7f];
- }
- }
- if (p->bits < 0) {
- error(str->getPos(), "Bad two dim code in JBIG2 MMR stream");
- return 0;
- }
- bufLen -= p->bits;
- return p->n;
-}
-
-int JBIG2MMRDecoder::getWhiteCode() {
- CCITTCode *p;
- Guint code;
-
- if (bufLen == 0) {
- buf = str->getChar() & 0xff;
- bufLen = 8;
- ++nBytesRead;
- }
- while (1) {
- if (bufLen >= 7 && ((buf >> (bufLen - 7)) & 0x7f) == 0) {
- if (bufLen <= 12) {
- code = buf << (12 - bufLen);
- } else {
- code = buf >> (bufLen - 12);
- }
- p = &whiteTab1[code & 0x1f];
- } else {
- if (bufLen <= 9) {
- code = buf << (9 - bufLen);
- } else {
- code = buf >> (bufLen - 9);
- }
- p = &whiteTab2[code & 0x1ff];
- }
- if (p->bits > 0 && p->bits <= (int)bufLen) {
- bufLen -= p->bits;
- return p->n;
- }
- if (bufLen >= 12) {
- break;
- }
- buf = (buf << 8) | (str->getChar() & 0xff);
- bufLen += 8;
- ++nBytesRead;
- }
- error(str->getPos(), "Bad white code in JBIG2 MMR stream");
- // eat a bit and return a positive number so that the caller doesn't
- // go into an infinite loop
- --bufLen;
- return 1;
-}
-
-int JBIG2MMRDecoder::getBlackCode() {
- CCITTCode *p;
- Guint code;
-
- if (bufLen == 0) {
- buf = str->getChar() & 0xff;
- bufLen = 8;
- ++nBytesRead;
- }
- while (1) {
- if (bufLen >= 6 && ((buf >> (bufLen - 6)) & 0x3f) == 0) {
- if (bufLen <= 13) {
- code = buf << (13 - bufLen);
- } else {
- code = buf >> (bufLen - 13);
- }
- p = &blackTab1[code & 0x7f];
- } else if (bufLen >= 4 && ((buf >> (bufLen - 4)) & 0x0f) == 0) {
- if (bufLen <= 12) {
- code = buf << (12 - bufLen);
- } else {
- code = buf >> (bufLen - 12);
- }
- p = &blackTab2[(code & 0xff) - 64];
- } else {
- if (bufLen <= 6) {
- code = buf << (6 - bufLen);
- } else {
- code = buf >> (bufLen - 6);
- }
- p = &blackTab3[code & 0x3f];
- }
- if (p->bits > 0 && p->bits <= (int)bufLen) {
- bufLen -= p->bits;
- return p->n;
- }
- if (bufLen >= 13) {
- break;
- }
- buf = (buf << 8) | (str->getChar() & 0xff);
- bufLen += 8;
- ++nBytesRead;
- }
- error(str->getPos(), "Bad black code in JBIG2 MMR stream");
- // eat a bit and return a positive number so that the caller doesn't
- // go into an infinite loop
- --bufLen;
- return 1;
-}
-
-Guint JBIG2MMRDecoder::get24Bits() {
- while (bufLen < 24) {
- buf = (buf << 8) | (str->getChar() & 0xff);
- bufLen += 8;
- ++nBytesRead;
- }
- return (buf >> (bufLen - 24)) & 0xffffff;
-}
-
-void JBIG2MMRDecoder::skipTo(Guint length) {
- while (nBytesRead < length) {
- str->getChar();
- ++nBytesRead;
- }
-}
-
-//------------------------------------------------------------------------
-// JBIG2Segment
-//------------------------------------------------------------------------
-
-enum JBIG2SegmentType {
- jbig2SegBitmap,
- jbig2SegSymbolDict,
- jbig2SegPatternDict,
- jbig2SegCodeTable
-};
-
-class JBIG2Segment {
-public:
-
- JBIG2Segment(Guint segNumA) { segNum = segNumA; }
- virtual ~JBIG2Segment() {}
- void setSegNum(Guint segNumA) { segNum = segNumA; }
- Guint getSegNum() { return segNum; }
- virtual JBIG2SegmentType getType() = 0;
-
-private:
-
- Guint segNum;
-};
-
-//------------------------------------------------------------------------
-// JBIG2Bitmap
-//------------------------------------------------------------------------
-
-struct JBIG2BitmapPtr {
- Guchar *p;
- int shift;
- int x;
-};
-
-class JBIG2Bitmap: public JBIG2Segment {
-public:
-
- JBIG2Bitmap(Guint segNumA, int wA, int hA);
- virtual ~JBIG2Bitmap();
- virtual JBIG2SegmentType getType() { return jbig2SegBitmap; }
- JBIG2Bitmap *copy() { return new JBIG2Bitmap(0, this); }
- JBIG2Bitmap *getSlice(Guint x, Guint y, Guint wA, Guint hA);
- void expand(int newH, Guint pixel);
- void clearToZero();
- void clearToOne();
- int getWidth() { return w; }
- int getHeight() { return h; }
- int getPixel(int x, int y)
- { return (x < 0 || x >= w || y < 0 || y >= h) ? 0 :
- (data[y * line + (x >> 3)] >> (7 - (x & 7))) & 1; }
- void setPixel(int x, int y)
- { data[y * line + (x >> 3)] |= 1 << (7 - (x & 7)); }
- void clearPixel(int x, int y)
- { data[y * line + (x >> 3)] &= 0x7f7f >> (x & 7); }
- void getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr);
- int nextPixel(JBIG2BitmapPtr *ptr);
- void duplicateRow(int yDest, int ySrc);
- void combine(JBIG2Bitmap *bitmap, int x, int y, Guint combOp);
- Guchar *getDataPtr() { return data; }
- int getDataSize() { return h * line; }
-
-private:
-
- JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap);
-
- int w, h, line;
- Guchar *data;
-};
-
-JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, int wA, int hA):
- JBIG2Segment(segNumA)
-{
- w = wA;
- h = hA;
- line = (wA + 7) >> 3;
- if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) {
- data = NULL;
- return;
- }
- // need to allocate one extra guard byte for use in combine()
- data = (Guchar *)gmalloc(h * line + 1);
- data[h * line] = 0;
-}
-
-JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap):
- JBIG2Segment(segNumA)
-{
- w = bitmap->w;
- h = bitmap->h;
- line = bitmap->line;
- if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) {
- data = NULL;
- return;
- }
- // need to allocate one extra guard byte for use in combine()
- data = (Guchar *)gmalloc(h * line + 1);
- memcpy(data, bitmap->data, h * line);
- data[h * line] = 0;
-}
-
-JBIG2Bitmap::~JBIG2Bitmap() {
- gfree(data);
-}
-
-//~ optimize this
-JBIG2Bitmap *JBIG2Bitmap::getSlice(Guint x, Guint y, Guint wA, Guint hA) {
- JBIG2Bitmap *slice;
- Guint xx, yy;
-
- slice = new JBIG2Bitmap(0, wA, hA);
- slice->clearToZero();
- for (yy = 0; yy < hA; ++yy) {
- for (xx = 0; xx < wA; ++xx) {
- if (getPixel(x + xx, y + yy)) {
- slice->setPixel(xx, yy);
- }
- }
- }
- return slice;
-}
-
-void JBIG2Bitmap::expand(int newH, Guint pixel) {
- if (newH <= h || line <= 0 || newH >= (INT_MAX - 1) / line) {
- return;
- }
- // need to allocate one extra guard byte for use in combine()
- data = (Guchar *)grealloc(data, newH * line + 1);
- if (pixel) {
- memset(data + h * line, 0xff, (newH - h) * line);
- } else {
- memset(data + h * line, 0x00, (newH - h) * line);
- }
- h = newH;
- data[h * line] = 0;
-}
-
-void JBIG2Bitmap::clearToZero() {
- memset(data, 0, h * line);
-}
-
-void JBIG2Bitmap::clearToOne() {
- memset(data, 0xff, h * line);
-}
-
-inline void JBIG2Bitmap::getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr) {
- if (y < 0 || y >= h || x >= w) {
- ptr->p = NULL;
- } else if (x < 0) {
- ptr->p = &data[y * line];
- ptr->shift = 7;
- ptr->x = x;
- } else {
- ptr->p = &data[y * line + (x >> 3)];
- ptr->shift = 7 - (x & 7);
- ptr->x = x;
- }
-}
-
-inline int JBIG2Bitmap::nextPixel(JBIG2BitmapPtr *ptr) {
- int pix;
-
- if (!ptr->p) {
- pix = 0;
- } else if (ptr->x < 0) {
- ++ptr->x;
- pix = 0;
- } else {
- pix = (*ptr->p >> ptr->shift) & 1;
- if (++ptr->x == w) {
- ptr->p = NULL;
- } else if (ptr->shift == 0) {
- ++ptr->p;
- ptr->shift = 7;
- } else {
- --ptr->shift;
- }
- }
- return pix;
-}
-
-void JBIG2Bitmap::duplicateRow(int yDest, int ySrc) {
- memcpy(data + yDest * line, data + ySrc * line, line);
-}
-
-void JBIG2Bitmap::combine(JBIG2Bitmap *bitmap, int x, int y,
- Guint combOp) {
- int x0, x1, y0, y1, xx, yy;
- Guchar *srcPtr, *destPtr;
- Guint src0, src1, src, dest, s1, s2, m1, m2, m3;
- GBool oneByte;
-
- if (y < 0) {
- y0 = -y;
- } else {
- y0 = 0;
- }
- if (y + bitmap->h > h) {
- y1 = h - y;
- } else {
- y1 = bitmap->h;
- }
- if (y0 >= y1) {
- return;
- }
-
- if (x >= 0) {
- x0 = x & ~7;
- } else {
- x0 = 0;
- }
- x1 = x + bitmap->w;
- if (x1 > w) {
- x1 = w;
- }
- if (x0 >= x1) {
- return;
- }
-
- s1 = x & 7;
- s2 = 8 - s1;
- m1 = 0xff >> (x1 & 7);
- m2 = 0xff << (((x1 & 7) == 0) ? 0 : 8 - (x1 & 7));
- m3 = (0xff >> s1) & m2;
-
- oneByte = x0 == ((x1 - 1) & ~7);
-
- for (yy = y0; yy < y1; ++yy) {
-
- // one byte per line -- need to mask both left and right side
- if (oneByte) {
- if (x >= 0) {
- destPtr = data + (y + yy) * line + (x >> 3);
- srcPtr = bitmap->data + yy * bitmap->line;
- dest = *destPtr;
- src1 = *srcPtr;
- switch (combOp) {
- case 0: // or
- dest |= (src1 >> s1) & m2;
- break;
- case 1: // and
- dest &= ((0xff00 | src1) >> s1) | m1;
- break;
- case 2: // xor
- dest ^= (src1 >> s1) & m2;
- break;
- case 3: // xnor
- dest ^= ((src1 ^ 0xff) >> s1) & m2;
- break;
- case 4: // replace
- dest = (dest & ~m3) | ((src1 >> s1) & m3);
- break;
- }
- *destPtr = dest;
- } else {
- destPtr = data + (y + yy) * line;
- srcPtr = bitmap->data + yy * bitmap->line + (-x >> 3);
- dest = *destPtr;
- src1 = *srcPtr;
- switch (combOp) {
- case 0: // or
- dest |= src1 & m2;
- break;
- case 1: // and
- dest &= src1 | m1;
- break;
- case 2: // xor
- dest ^= src1 & m2;
- break;
- case 3: // xnor
- dest ^= (src1 ^ 0xff) & m2;
- break;
- case 4: // replace
- dest = (src1 & m2) | (dest & m1);
- break;
- }
- *destPtr = dest;
- }
-
- // multiple bytes per line -- need to mask left side of left-most
- // byte and right side of right-most byte
- } else {
-
- // left-most byte
- if (x >= 0) {
- destPtr = data + (y + yy) * line + (x >> 3);
- srcPtr = bitmap->data + yy * bitmap->line;
- src1 = *srcPtr++;
- dest = *destPtr;
- switch (combOp) {
- case 0: // or
- dest |= src1 >> s1;
- break;
- case 1: // and
- dest &= (0xff00 | src1) >> s1;
- break;
- case 2: // xor
- dest ^= src1 >> s1;
- break;
- case 3: // xnor
- dest ^= (src1 ^ 0xff) >> s1;
- break;
- case 4: // replace
- dest = (dest & (0xff << s2)) | (src1 >> s1);
- break;
- }
- *destPtr++ = dest;
- xx = x0 + 8;
- } else {
- destPtr = data + (y + yy) * line;
- srcPtr = bitmap->data + yy * bitmap->line + (-x >> 3);
- src1 = *srcPtr++;
- xx = x0;
- }
-
- // middle bytes
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- switch (combOp) {
- case 0: // or
- dest |= src;
- break;
- case 1: // and
- dest &= src;
- break;
- case 2: // xor
- dest ^= src;
- break;
- case 3: // xnor
- dest ^= src ^ 0xff;
- break;
- case 4: // replace
- dest = src;
- break;
- }
- *destPtr++ = dest;
- }
-
- // right-most byte
- // note: this last byte (src1) may not actually be used, depending
- // on the values of s1, m1, and m2 - and in fact, it may be off
- // the edge of the source bitmap, which means we need to allocate
- // one extra guard byte at the end of each bitmap
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- switch (combOp) {
- case 0: // or
- dest |= src & m2;
- break;
- case 1: // and
- dest &= src | m1;
- break;
- case 2: // xor
- dest ^= src & m2;
- break;
- case 3: // xnor
- dest ^= (src ^ 0xff) & m2;
- break;
- case 4: // replace
- dest = (src & m2) | (dest & m1);
- break;
- }
- *destPtr = dest;
- }
- }
-}
-
-//------------------------------------------------------------------------
-// JBIG2SymbolDict
-//------------------------------------------------------------------------
-
-class JBIG2SymbolDict: public JBIG2Segment {
-public:
-
- JBIG2SymbolDict(Guint segNumA, Guint sizeA);
- virtual ~JBIG2SymbolDict();
- virtual JBIG2SegmentType getType() { return jbig2SegSymbolDict; }
- Guint getSize() { return size; }
- void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { bitmaps[idx] = bitmap; }
- JBIG2Bitmap *getBitmap(Guint idx) { return bitmaps[idx]; }
- void setGenericRegionStats(JArithmeticDecoderStats *stats)
- { genericRegionStats = stats; }
- void setRefinementRegionStats(JArithmeticDecoderStats *stats)
- { refinementRegionStats = stats; }
- JArithmeticDecoderStats *getGenericRegionStats()
- { return genericRegionStats; }
- JArithmeticDecoderStats *getRefinementRegionStats()
- { return refinementRegionStats; }
-
-private:
-
- Guint size;
- JBIG2Bitmap **bitmaps;
- JArithmeticDecoderStats *genericRegionStats;
- JArithmeticDecoderStats *refinementRegionStats;
-};
-
-JBIG2SymbolDict::JBIG2SymbolDict(Guint segNumA, Guint sizeA):
- JBIG2Segment(segNumA)
-{
- size = sizeA;
- bitmaps = (JBIG2Bitmap **)gmallocn(size, sizeof(JBIG2Bitmap *));
- genericRegionStats = NULL;
- refinementRegionStats = NULL;
-}
-
-JBIG2SymbolDict::~JBIG2SymbolDict() {
- Guint i;
-
- for (i = 0; i < size; ++i) {
- delete bitmaps[i];
- }
- gfree(bitmaps);
- if (genericRegionStats) {
- delete genericRegionStats;
- }
- if (refinementRegionStats) {
- delete refinementRegionStats;
- }
-}
-
-//------------------------------------------------------------------------
-// JBIG2PatternDict
-//------------------------------------------------------------------------
-
-class JBIG2PatternDict: public JBIG2Segment {
-public:
-
- JBIG2PatternDict(Guint segNumA, Guint sizeA);
- virtual ~JBIG2PatternDict();
- virtual JBIG2SegmentType getType() { return jbig2SegPatternDict; }
- Guint getSize() { return size; }
- void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { bitmaps[idx] = bitmap; }
- JBIG2Bitmap *getBitmap(Guint idx) { return bitmaps[idx]; }
-
-private:
-
- Guint size;
- JBIG2Bitmap **bitmaps;
-};
-
-JBIG2PatternDict::JBIG2PatternDict(Guint segNumA, Guint sizeA):
- JBIG2Segment(segNumA)
-{
- size = sizeA;
- bitmaps = (JBIG2Bitmap **)gmallocn(size, sizeof(JBIG2Bitmap *));
-}
-
-JBIG2PatternDict::~JBIG2PatternDict() {
- Guint i;
-
- for (i = 0; i < size; ++i) {
- delete bitmaps[i];
- }
- gfree(bitmaps);
-}
-
-//------------------------------------------------------------------------
-// JBIG2CodeTable
-//------------------------------------------------------------------------
-
-class JBIG2CodeTable: public JBIG2Segment {
-public:
-
- JBIG2CodeTable(Guint segNumA, JBIG2HuffmanTable *tableA);
- virtual ~JBIG2CodeTable();
- virtual JBIG2SegmentType getType() { return jbig2SegCodeTable; }
- JBIG2HuffmanTable *getHuffTable() { return table; }
-
-private:
-
- JBIG2HuffmanTable *table;
-};
-
-JBIG2CodeTable::JBIG2CodeTable(Guint segNumA, JBIG2HuffmanTable *tableA):
- JBIG2Segment(segNumA)
-{
- table = tableA;
-}
-
-JBIG2CodeTable::~JBIG2CodeTable() {
- gfree(table);
-}
-
-//------------------------------------------------------------------------
-// JBIG2Stream
-//------------------------------------------------------------------------
-
-JBIG2Stream::JBIG2Stream(Stream *strA, Object *globalsStreamA):
- FilterStream(strA)
-{
- pageBitmap = NULL;
-
- arithDecoder = new JArithmeticDecoder();
- genericRegionStats = new JArithmeticDecoderStats(1 << 1);
- refinementRegionStats = new JArithmeticDecoderStats(1 << 1);
- iadhStats = new JArithmeticDecoderStats(1 << 9);
- iadwStats = new JArithmeticDecoderStats(1 << 9);
- iaexStats = new JArithmeticDecoderStats(1 << 9);
- iaaiStats = new JArithmeticDecoderStats(1 << 9);
- iadtStats = new JArithmeticDecoderStats(1 << 9);
- iaitStats = new JArithmeticDecoderStats(1 << 9);
- iafsStats = new JArithmeticDecoderStats(1 << 9);
- iadsStats = new JArithmeticDecoderStats(1 << 9);
- iardxStats = new JArithmeticDecoderStats(1 << 9);
- iardyStats = new JArithmeticDecoderStats(1 << 9);
- iardwStats = new JArithmeticDecoderStats(1 << 9);
- iardhStats = new JArithmeticDecoderStats(1 << 9);
- iariStats = new JArithmeticDecoderStats(1 << 9);
- iaidStats = new JArithmeticDecoderStats(1 << 1);
- huffDecoder = new JBIG2HuffmanDecoder();
- mmrDecoder = new JBIG2MMRDecoder();
-
- globalsStreamA->copy(&globalsStream);
- segments = globalSegments = NULL;
- curStr = NULL;
- dataPtr = dataEnd = NULL;
-}
-
-JBIG2Stream::~JBIG2Stream() {
- close();
- globalsStream.free();
- delete arithDecoder;
- delete genericRegionStats;
- delete refinementRegionStats;
- delete iadhStats;
- delete iadwStats;
- delete iaexStats;
- delete iaaiStats;
- delete iadtStats;
- delete iaitStats;
- delete iafsStats;
- delete iadsStats;
- delete iardxStats;
- delete iardyStats;
- delete iardwStats;
- delete iardhStats;
- delete iariStats;
- delete iaidStats;
- delete huffDecoder;
- delete mmrDecoder;
- delete str;
-}
-
-void JBIG2Stream::reset() {
- // read the globals stream
- globalSegments = new GList();
- if (globalsStream.isStream()) {
- segments = globalSegments;
- curStr = globalsStream.getStream();
- curStr->reset();
- arithDecoder->setStream(curStr);
- huffDecoder->setStream(curStr);
- mmrDecoder->setStream(curStr);
- readSegments();
- curStr->close();
- }
-
- // read the main stream
- segments = new GList();
- curStr = str;
- curStr->reset();
- arithDecoder->setStream(curStr);
- huffDecoder->setStream(curStr);
- mmrDecoder->setStream(curStr);
- readSegments();
-
- if (pageBitmap) {
- dataPtr = pageBitmap->getDataPtr();
- dataEnd = dataPtr + pageBitmap->getDataSize();
- } else {
- dataPtr = dataEnd = NULL;
- }
-}
-
-void JBIG2Stream::close() {
- if (pageBitmap) {
- delete pageBitmap;
- pageBitmap = NULL;
- }
- if (segments) {
- deleteGList(segments, JBIG2Segment);
- segments = NULL;
- }
- if (globalSegments) {
- deleteGList(globalSegments, JBIG2Segment);
- globalSegments = NULL;
- }
- dataPtr = dataEnd = NULL;
- FilterStream::close();
-}
-
-int JBIG2Stream::getChar() {
- if (dataPtr && dataPtr < dataEnd) {
- return (*dataPtr++ ^ 0xff) & 0xff;
- }
- return EOF;
-}
-
-int JBIG2Stream::lookChar() {
- if (dataPtr && dataPtr < dataEnd) {
- return (*dataPtr ^ 0xff) & 0xff;
- }
- return EOF;
-}
-
-GString *JBIG2Stream::getPSFilter(int psLevel, char *indent) {
- return NULL;
-}
-
-GBool JBIG2Stream::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-void JBIG2Stream::readSegments() {
- Guint segNum, segFlags, segType, page, segLength;
- Guint refFlags, nRefSegs;
- Guint *refSegs;
- int c1, c2, c3;
- Guint i;
-
- while (readULong(&segNum)) {
-
- // segment header flags
- if (!readUByte(&segFlags)) {
- goto eofError1;
- }
- segType = segFlags & 0x3f;
-
- // referred-to segment count and retention flags
- if (!readUByte(&refFlags)) {
- goto eofError1;
- }
- nRefSegs = refFlags >> 5;
- if (nRefSegs == 7) {
- if ((c1 = curStr->getChar()) == EOF ||
- (c2 = curStr->getChar()) == EOF ||
- (c3 = curStr->getChar()) == EOF) {
- goto eofError1;
- }
- refFlags = (refFlags << 24) | (c1 << 16) | (c2 << 8) | c3;
- nRefSegs = refFlags & 0x1fffffff;
- for (i = 0; i < (nRefSegs + 9) >> 3; ++i) {
- c1 = curStr->getChar();
- }
- }
-
- // referred-to segment numbers
- refSegs = (Guint *)gmallocn(nRefSegs, sizeof(Guint));
- if (segNum <= 256) {
- for (i = 0; i < nRefSegs; ++i) {
- if (!readUByte(&refSegs[i])) {
- goto eofError2;
- }
- }
- } else if (segNum <= 65536) {
- for (i = 0; i < nRefSegs; ++i) {
- if (!readUWord(&refSegs[i])) {
- goto eofError2;
- }
- }
- } else {
- for (i = 0; i < nRefSegs; ++i) {
- if (!readULong(&refSegs[i])) {
- goto eofError2;
- }
- }
- }
-
- // segment page association
- if (segFlags & 0x40) {
- if (!readULong(&page)) {
- goto eofError2;
- }
- } else {
- if (!readUByte(&page)) {
- goto eofError2;
- }
- }
-
- // segment data length
- if (!readULong(&segLength)) {
- goto eofError2;
- }
-
- // read the segment data
- switch (segType) {
- case 0:
- if (!readSymbolDictSeg(segNum, segLength, refSegs, nRefSegs)) {
- goto syntaxError;
- }
- break;
- case 4:
- readTextRegionSeg(segNum, gFalse, gFalse, segLength, refSegs, nRefSegs);
- break;
- case 6:
- readTextRegionSeg(segNum, gTrue, gFalse, segLength, refSegs, nRefSegs);
- break;
- case 7:
- readTextRegionSeg(segNum, gTrue, gTrue, segLength, refSegs, nRefSegs);
- break;
- case 16:
- readPatternDictSeg(segNum, segLength);
- break;
- case 20:
- readHalftoneRegionSeg(segNum, gFalse, gFalse, segLength,
- refSegs, nRefSegs);
- break;
- case 22:
- readHalftoneRegionSeg(segNum, gTrue, gFalse, segLength,
- refSegs, nRefSegs);
- break;
- case 23:
- readHalftoneRegionSeg(segNum, gTrue, gTrue, segLength,
- refSegs, nRefSegs);
- break;
- case 36:
- readGenericRegionSeg(segNum, gFalse, gFalse, segLength);
- break;
- case 38:
- readGenericRegionSeg(segNum, gTrue, gFalse, segLength);
- break;
- case 39:
- readGenericRegionSeg(segNum, gTrue, gTrue, segLength);
- break;
- case 40:
- readGenericRefinementRegionSeg(segNum, gFalse, gFalse, segLength,
- refSegs, nRefSegs);
- break;
- case 42:
- readGenericRefinementRegionSeg(segNum, gTrue, gFalse, segLength,
- refSegs, nRefSegs);
- break;
- case 43:
- readGenericRefinementRegionSeg(segNum, gTrue, gTrue, segLength,
- refSegs, nRefSegs);
- break;
- case 48:
- readPageInfoSeg(segLength);
- break;
- case 50:
- readEndOfStripeSeg(segLength);
- break;
- case 52:
- readProfilesSeg(segLength);
- break;
- case 53:
- readCodeTableSeg(segNum, segLength);
- break;
- case 62:
- readExtensionSeg(segLength);
- break;
- default:
- error(getPos(), "Unknown segment type in JBIG2 stream");
- for (i = 0; i < segLength; ++i) {
- if ((c1 = curStr->getChar()) == EOF) {
- goto eofError2;
- }
- }
- break;
- }
-
- gfree(refSegs);
- }
-
- return;
-
- syntaxError:
- gfree(refSegs);
- return;
-
- eofError2:
- gfree(refSegs);
- eofError1:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length,
- Guint *refSegs, Guint nRefSegs) {
- JBIG2SymbolDict *symbolDict;
- JBIG2HuffmanTable *huffDHTable, *huffDWTable;
- JBIG2HuffmanTable *huffBMSizeTable, *huffAggInstTable;
- JBIG2Segment *seg;
- GList *codeTables;
- JBIG2SymbolDict *inputSymbolDict;
- Guint flags, sdTemplate, sdrTemplate, huff, refAgg;
- Guint huffDH, huffDW, huffBMSize, huffAggInst;
- Guint contextUsed, contextRetained;
- int sdATX[4], sdATY[4], sdrATX[2], sdrATY[2];
- Guint numExSyms, numNewSyms, numInputSyms, symCodeLen;
- JBIG2Bitmap **bitmaps;
- JBIG2Bitmap *collBitmap, *refBitmap;
- Guint *symWidths;
- Guint symHeight, symWidth, totalWidth, x, symID;
- int dh, dw, refAggNum, refDX, refDY, bmSize;
- GBool ex;
- int run, cnt;
- Guint i, j, k;
- Guchar *p;
-
- // symbol dictionary flags
- if (!readUWord(&flags)) {
- goto eofError;
- }
- sdTemplate = (flags >> 10) & 3;
- sdrTemplate = (flags >> 12) & 1;
- huff = flags & 1;
- refAgg = (flags >> 1) & 1;
- huffDH = (flags >> 2) & 3;
- huffDW = (flags >> 4) & 3;
- huffBMSize = (flags >> 6) & 1;
- huffAggInst = (flags >> 7) & 1;
- contextUsed = (flags >> 8) & 1;
- contextRetained = (flags >> 9) & 1;
-
- // symbol dictionary AT flags
- if (!huff) {
- if (sdTemplate == 0) {
- if (!readByte(&sdATX[0]) ||
- !readByte(&sdATY[0]) ||
- !readByte(&sdATX[1]) ||
- !readByte(&sdATY[1]) ||
- !readByte(&sdATX[2]) ||
- !readByte(&sdATY[2]) ||
- !readByte(&sdATX[3]) ||
- !readByte(&sdATY[3])) {
- goto eofError;
- }
- } else {
- if (!readByte(&sdATX[0]) ||
- !readByte(&sdATY[0])) {
- goto eofError;
- }
- }
- }
-
- // symbol dictionary refinement AT flags
- if (refAgg && !sdrTemplate) {
- if (!readByte(&sdrATX[0]) ||
- !readByte(&sdrATY[0]) ||
- !readByte(&sdrATX[1]) ||
- !readByte(&sdrATY[1])) {
- goto eofError;
- }
- }
-
- // SDNUMEXSYMS and SDNUMNEWSYMS
- if (!readULong(&numExSyms) || !readULong(&numNewSyms)) {
- goto eofError;
- }
-
- // get referenced segments: input symbol dictionaries and code tables
- codeTables = new GList();
- numInputSyms = 0;
- for (i = 0; i < nRefSegs; ++i) {
- seg = findSegment(refSegs[i]);
- if (seg->getType() == jbig2SegSymbolDict) {
- numInputSyms += ((JBIG2SymbolDict *)seg)->getSize();
- } else if (seg->getType() == jbig2SegCodeTable) {
- codeTables->append(seg);
- }
- }
-
- // compute symbol code length
- symCodeLen = 0;
- i = 1;
- while (i < numInputSyms + numNewSyms) {
- ++symCodeLen;
- i <<= 1;
- }
-
- // get the input symbol bitmaps
- bitmaps = (JBIG2Bitmap **)gmallocn(numInputSyms + numNewSyms,
- sizeof(JBIG2Bitmap *));
- for (i = 0; i < numInputSyms + numNewSyms; ++i) {
- bitmaps[i] = NULL;
- }
- k = 0;
- inputSymbolDict = NULL;
- for (i = 0; i < nRefSegs; ++i) {
- seg = findSegment(refSegs[i]);
- if (seg->getType() == jbig2SegSymbolDict) {
- inputSymbolDict = (JBIG2SymbolDict *)seg;
- for (j = 0; j < inputSymbolDict->getSize(); ++j) {
- bitmaps[k++] = inputSymbolDict->getBitmap(j);
- }
- }
- }
-
- // get the Huffman tables
- huffDHTable = huffDWTable = NULL; // make gcc happy
- huffBMSizeTable = huffAggInstTable = NULL; // make gcc happy
- i = 0;
- if (huff) {
- if (huffDH == 0) {
- huffDHTable = huffTableD;
- } else if (huffDH == 1) {
- huffDHTable = huffTableE;
- } else {
- huffDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffDW == 0) {
- huffDWTable = huffTableB;
- } else if (huffDW == 1) {
- huffDWTable = huffTableC;
- } else {
- huffDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffBMSize == 0) {
- huffBMSizeTable = huffTableA;
- } else {
- huffBMSizeTable =
- ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffAggInst == 0) {
- huffAggInstTable = huffTableA;
- } else {
- huffAggInstTable =
- ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- }
- delete codeTables;
-
- // set up the Huffman decoder
- if (huff) {
- huffDecoder->reset();
-
- // set up the arithmetic decoder
- } else {
- if (contextUsed && inputSymbolDict) {
- resetGenericStats(sdTemplate, inputSymbolDict->getGenericRegionStats());
- } else {
- resetGenericStats(sdTemplate, NULL);
- }
- resetIntStats(symCodeLen);
- arithDecoder->start();
- }
-
- // set up the arithmetic decoder for refinement/aggregation
- if (refAgg) {
- if (contextUsed && inputSymbolDict) {
- resetRefinementStats(sdrTemplate,
- inputSymbolDict->getRefinementRegionStats());
- } else {
- resetRefinementStats(sdrTemplate, NULL);
- }
- }
-
- // allocate symbol widths storage
- symWidths = NULL;
- if (huff && !refAgg) {
- symWidths = (Guint *)gmallocn(numNewSyms, sizeof(Guint));
- }
-
- symHeight = 0;
- i = 0;
- while (i < numNewSyms) {
-
- // read the height class delta height
- if (huff) {
- huffDecoder->decodeInt(&dh, huffDHTable);
- } else {
- arithDecoder->decodeInt(&dh, iadhStats);
- }
- if (dh < 0 && (Guint)-dh >= symHeight) {
- error(getPos(), "Bad delta-height value in JBIG2 symbol dictionary");
- goto syntaxError;
- }
- symHeight += dh;
- symWidth = 0;
- totalWidth = 0;
- j = i;
-
- // read the symbols in this height class
- while (1) {
-
- // read the delta width
- if (huff) {
- if (!huffDecoder->decodeInt(&dw, huffDWTable)) {
- break;
- }
- } else {
- if (!arithDecoder->decodeInt(&dw, iadwStats)) {
- break;
- }
- }
- if (dw < 0 && (Guint)-dw >= symWidth) {
- error(getPos(), "Bad delta-height value in JBIG2 symbol dictionary");
- goto syntaxError;
- }
- symWidth += dw;
-
- // using a collective bitmap, so don't read a bitmap here
- if (huff && !refAgg) {
- symWidths[i] = symWidth;
- totalWidth += symWidth;
-
- // refinement/aggregate coding
- } else if (refAgg) {
- if (huff) {
- if (!huffDecoder->decodeInt(&refAggNum, huffAggInstTable)) {
- break;
- }
- } else {
- if (!arithDecoder->decodeInt(&refAggNum, iaaiStats)) {
- break;
- }
- }
-#if 0 //~ This special case was added about a year before the final draft
- //~ of the JBIG2 spec was released. I have encountered some old
- //~ JBIG2 images that predate it.
- if (0) {
-#else
- if (refAggNum == 1) {
-#endif
- if (huff) {
- symID = huffDecoder->readBits(symCodeLen);
- huffDecoder->decodeInt(&refDX, huffTableO);
- huffDecoder->decodeInt(&refDY, huffTableO);
- huffDecoder->decodeInt(&bmSize, huffTableA);
- huffDecoder->reset();
- arithDecoder->start();
- } else {
- symID = arithDecoder->decodeIAID(symCodeLen, iaidStats);
- arithDecoder->decodeInt(&refDX, iardxStats);
- arithDecoder->decodeInt(&refDY, iardyStats);
- }
- refBitmap = bitmaps[symID];
- bitmaps[numInputSyms + i] =
- readGenericRefinementRegion(symWidth, symHeight,
- sdrTemplate, gFalse,
- refBitmap, refDX, refDY,
- sdrATX, sdrATY);
- //~ do we need to use the bmSize value here (in Huffman mode)?
- } else {
- bitmaps[numInputSyms + i] =
- readTextRegion(huff, gTrue, symWidth, symHeight,
- refAggNum, 0, numInputSyms + i, NULL,
- symCodeLen, bitmaps, 0, 0, 0, 1, 0,
- huffTableF, huffTableH, huffTableK, huffTableO,
- huffTableO, huffTableO, huffTableO, huffTableA,
- sdrTemplate, sdrATX, sdrATY);
- }
-
- // non-ref/agg coding
- } else {
- bitmaps[numInputSyms + i] =
- readGenericBitmap(gFalse, symWidth, symHeight,
- sdTemplate, gFalse, gFalse, NULL,
- sdATX, sdATY, 0);
- }
-
- ++i;
- }
-
- // read the collective bitmap
- if (huff && !refAgg) {
- huffDecoder->decodeInt(&bmSize, huffBMSizeTable);
- huffDecoder->reset();
- if (bmSize == 0) {
- collBitmap = new JBIG2Bitmap(0, totalWidth, symHeight);
- bmSize = symHeight * ((totalWidth + 7) >> 3);
- p = collBitmap->getDataPtr();
- for (k = 0; k < (Guint)bmSize; ++k) {
- *p++ = curStr->getChar();
- }
- } else {
- collBitmap = readGenericBitmap(gTrue, totalWidth, symHeight,
- 0, gFalse, gFalse, NULL, NULL, NULL,
- bmSize);
- }
- x = 0;
- for (; j < i; ++j) {
- bitmaps[numInputSyms + j] =
- collBitmap->getSlice(x, 0, symWidths[j], symHeight);
- x += symWidths[j];
- }
- delete collBitmap;
- }
- }
-
- // create the symbol dict object
- symbolDict = new JBIG2SymbolDict(segNum, numExSyms);
-
- // exported symbol list
- i = j = 0;
- ex = gFalse;
- while (i < numInputSyms + numNewSyms) {
- if (huff) {
- huffDecoder->decodeInt(&run, huffTableA);
- } else {
- arithDecoder->decodeInt(&run, iaexStats);
- }
- if (ex) {
- for (cnt = 0; cnt < run; ++cnt) {
- symbolDict->setBitmap(j++, bitmaps[i++]->copy());
- }
- } else {
- i += run;
- }
- ex = !ex;
- }
-
- for (i = 0; i < numNewSyms; ++i) {
- delete bitmaps[numInputSyms + i];
- }
- gfree(bitmaps);
- if (symWidths) {
- gfree(symWidths);
- }
-
- // save the arithmetic decoder stats
- if (!huff && contextRetained) {
- symbolDict->setGenericRegionStats(genericRegionStats->copy());
- if (refAgg) {
- symbolDict->setRefinementRegionStats(refinementRegionStats->copy());
- }
- }
-
- // store the new symbol dict
- segments->append(symbolDict);
-
- return gTrue;
-
- syntaxError:
- for (i = 0; i < numNewSyms; ++i) {
- if (bitmaps[numInputSyms + i]) {
- delete bitmaps[numInputSyms + i];
- }
- }
- gfree(bitmaps);
- if (symWidths) {
- gfree(symWidths);
- }
- return gFalse;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
- return gFalse;
-}
-
-void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length,
- Guint *refSegs, Guint nRefSegs) {
- JBIG2Bitmap *bitmap;
- JBIG2HuffmanTable runLengthTab[36];
- JBIG2HuffmanTable *symCodeTab;
- JBIG2HuffmanTable *huffFSTable, *huffDSTable, *huffDTTable;
- JBIG2HuffmanTable *huffRDWTable, *huffRDHTable;
- JBIG2HuffmanTable *huffRDXTable, *huffRDYTable, *huffRSizeTable;
- JBIG2Segment *seg;
- GList *codeTables;
- JBIG2SymbolDict *symbolDict;
- JBIG2Bitmap **syms;
- Guint w, h, x, y, segInfoFlags, extCombOp;
- Guint flags, huff, refine, logStrips, refCorner, transposed;
- Guint combOp, defPixel, templ;
- int sOffset;
- Guint huffFlags, huffFS, huffDS, huffDT;
- Guint huffRDW, huffRDH, huffRDX, huffRDY, huffRSize;
- Guint numInstances, numSyms, symCodeLen;
- int atx[2], aty[2];
- Guint i, k, kk;
- int j;
-
- // region segment info field
- if (!readULong(&w) || !readULong(&h) ||
- !readULong(&x) || !readULong(&y) ||
- !readUByte(&segInfoFlags)) {
- goto eofError;
- }
- extCombOp = segInfoFlags & 7;
-
- // rest of the text region header
- if (!readUWord(&flags)) {
- goto eofError;
- }
- huff = flags & 1;
- refine = (flags >> 1) & 1;
- logStrips = (flags >> 2) & 3;
- refCorner = (flags >> 4) & 3;
- transposed = (flags >> 6) & 1;
- combOp = (flags >> 7) & 3;
- defPixel = (flags >> 9) & 1;
- sOffset = (flags >> 10) & 0x1f;
- if (sOffset & 0x10) {
- sOffset |= -1 - 0x0f;
- }
- templ = (flags >> 15) & 1;
- huffFS = huffDS = huffDT = 0; // make gcc happy
- huffRDW = huffRDH = huffRDX = huffRDY = huffRSize = 0; // make gcc happy
- if (huff) {
- if (!readUWord(&huffFlags)) {
- goto eofError;
- }
- huffFS = huffFlags & 3;
- huffDS = (huffFlags >> 2) & 3;
- huffDT = (huffFlags >> 4) & 3;
- huffRDW = (huffFlags >> 6) & 3;
- huffRDH = (huffFlags >> 8) & 3;
- huffRDX = (huffFlags >> 10) & 3;
- huffRDY = (huffFlags >> 12) & 3;
- huffRSize = (huffFlags >> 14) & 1;
- }
- if (refine && templ == 0) {
- if (!readByte(&atx[0]) || !readByte(&aty[0]) ||
- !readByte(&atx[1]) || !readByte(&aty[1])) {
- goto eofError;
- }
- }
- if (!readULong(&numInstances)) {
- goto eofError;
- }
-
- // get symbol dictionaries and tables
- codeTables = new GList();
- numSyms = 0;
- for (i = 0; i < nRefSegs; ++i) {
- if ((seg = findSegment(refSegs[i]))) {
- if (seg->getType() == jbig2SegSymbolDict) {
- numSyms += ((JBIG2SymbolDict *)seg)->getSize();
- } else if (seg->getType() == jbig2SegCodeTable) {
- codeTables->append(seg);
- }
- } else {
- error(getPos(), "Invalid segment reference in JBIG2 text region");
- }
- }
- symCodeLen = 0;
- i = 1;
- while (i < numSyms) {
- ++symCodeLen;
- i <<= 1;
- }
-
- // get the symbol bitmaps
- syms = (JBIG2Bitmap **)gmallocn(numSyms, sizeof(JBIG2Bitmap *));
- kk = 0;
- for (i = 0; i < nRefSegs; ++i) {
- if ((seg = findSegment(refSegs[i]))) {
- if (seg->getType() == jbig2SegSymbolDict) {
- symbolDict = (JBIG2SymbolDict *)seg;
- for (k = 0; k < symbolDict->getSize(); ++k) {
- syms[kk++] = symbolDict->getBitmap(k);
- }
- }
- }
- }
-
- // get the Huffman tables
- huffFSTable = huffDSTable = huffDTTable = NULL; // make gcc happy
- huffRDWTable = huffRDHTable = NULL; // make gcc happy
- huffRDXTable = huffRDYTable = huffRSizeTable = NULL; // make gcc happy
- i = 0;
- if (huff) {
- if (huffFS == 0) {
- huffFSTable = huffTableF;
- } else if (huffFS == 1) {
- huffFSTable = huffTableG;
- } else {
- huffFSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffDS == 0) {
- huffDSTable = huffTableH;
- } else if (huffDS == 1) {
- huffDSTable = huffTableI;
- } else if (huffDS == 2) {
- huffDSTable = huffTableJ;
- } else {
- huffDSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffDT == 0) {
- huffDTTable = huffTableK;
- } else if (huffDT == 1) {
- huffDTTable = huffTableL;
- } else if (huffDT == 2) {
- huffDTTable = huffTableM;
- } else {
- huffDTTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffRDW == 0) {
- huffRDWTable = huffTableN;
- } else if (huffRDW == 1) {
- huffRDWTable = huffTableO;
- } else {
- huffRDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffRDH == 0) {
- huffRDHTable = huffTableN;
- } else if (huffRDH == 1) {
- huffRDHTable = huffTableO;
- } else {
- huffRDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffRDX == 0) {
- huffRDXTable = huffTableN;
- } else if (huffRDX == 1) {
- huffRDXTable = huffTableO;
- } else {
- huffRDXTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffRDY == 0) {
- huffRDYTable = huffTableN;
- } else if (huffRDY == 1) {
- huffRDYTable = huffTableO;
- } else {
- huffRDYTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- if (huffRSize == 0) {
- huffRSizeTable = huffTableA;
- } else {
- huffRSizeTable =
- ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable();
- }
- }
- delete codeTables;
-
- // symbol ID Huffman decoding table
- if (huff) {
- huffDecoder->reset();
- for (i = 0; i < 32; ++i) {
- runLengthTab[i].val = i;
- runLengthTab[i].prefixLen = huffDecoder->readBits(4);
- runLengthTab[i].rangeLen = 0;
- }
- runLengthTab[32].val = 0x103;
- runLengthTab[32].prefixLen = huffDecoder->readBits(4);
- runLengthTab[32].rangeLen = 2;
- runLengthTab[33].val = 0x203;
- runLengthTab[33].prefixLen = huffDecoder->readBits(4);
- runLengthTab[33].rangeLen = 3;
- runLengthTab[34].val = 0x20b;
- runLengthTab[34].prefixLen = huffDecoder->readBits(4);
- runLengthTab[34].rangeLen = 7;
- runLengthTab[35].prefixLen = 0;
- runLengthTab[35].rangeLen = jbig2HuffmanEOT;
- huffDecoder->buildTable(runLengthTab, 35);
- symCodeTab = (JBIG2HuffmanTable *)gmallocn(numSyms + 1,
- sizeof(JBIG2HuffmanTable));
- for (i = 0; i < numSyms; ++i) {
- symCodeTab[i].val = i;
- symCodeTab[i].rangeLen = 0;
- }
- i = 0;
- while (i < numSyms) {
- huffDecoder->decodeInt(&j, runLengthTab);
- if (j > 0x200) {
- for (j -= 0x200; j && i < numSyms; --j) {
- symCodeTab[i++].prefixLen = 0;
- }
- } else if (j > 0x100) {
- for (j -= 0x100; j && i < numSyms; --j) {
- symCodeTab[i].prefixLen = symCodeTab[i-1].prefixLen;
- ++i;
- }
- } else {
- symCodeTab[i++].prefixLen = j;
- }
- }
- symCodeTab[numSyms].prefixLen = 0;
- symCodeTab[numSyms].rangeLen = jbig2HuffmanEOT;
- huffDecoder->buildTable(symCodeTab, numSyms);
- huffDecoder->reset();
-
- // set up the arithmetic decoder
- } else {
- symCodeTab = NULL;
- resetIntStats(symCodeLen);
- arithDecoder->start();
- }
- if (refine) {
- resetRefinementStats(templ, NULL);
- }
-
- bitmap = readTextRegion(huff, refine, w, h, numInstances,
- logStrips, numSyms, symCodeTab, symCodeLen, syms,
- defPixel, combOp, transposed, refCorner, sOffset,
- huffFSTable, huffDSTable, huffDTTable,
- huffRDWTable, huffRDHTable,
- huffRDXTable, huffRDYTable, huffRSizeTable,
- templ, atx, aty);
-
- gfree(syms);
-
- // combine the region bitmap into the page bitmap
- if (imm) {
- if (pageH == 0xffffffff && y + h > curPageH) {
- pageBitmap->expand(y + h, pageDefPixel);
- }
- pageBitmap->combine(bitmap, x, y, extCombOp);
- delete bitmap;
-
- // store the region bitmap
- } else {
- bitmap->setSegNum(segNum);
- segments->append(bitmap);
- }
-
- // clean up the Huffman decoder
- if (huff) {
- gfree(symCodeTab);
- }
-
- return;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-JBIG2Bitmap *JBIG2Stream::readTextRegion(GBool huff, GBool refine,
- int w, int h,
- Guint numInstances,
- Guint logStrips,
- int numSyms,
- JBIG2HuffmanTable *symCodeTab,
- Guint symCodeLen,
- JBIG2Bitmap **syms,
- Guint defPixel, Guint combOp,
- Guint transposed, Guint refCorner,
- int sOffset,
- JBIG2HuffmanTable *huffFSTable,
- JBIG2HuffmanTable *huffDSTable,
- JBIG2HuffmanTable *huffDTTable,
- JBIG2HuffmanTable *huffRDWTable,
- JBIG2HuffmanTable *huffRDHTable,
- JBIG2HuffmanTable *huffRDXTable,
- JBIG2HuffmanTable *huffRDYTable,
- JBIG2HuffmanTable *huffRSizeTable,
- Guint templ,
- int *atx, int *aty) {
- JBIG2Bitmap *bitmap;
- JBIG2Bitmap *symbolBitmap;
- Guint strips;
- int t, dt, tt, s, ds, sFirst, j;
- int rdw, rdh, rdx, rdy, ri, refDX, refDY, bmSize;
- Guint symID, inst, bw, bh;
-
- strips = 1 << logStrips;
-
- // allocate the bitmap
- bitmap = new JBIG2Bitmap(0, w, h);
- if (defPixel) {
- bitmap->clearToOne();
- } else {
- bitmap->clearToZero();
- }
-
- // decode initial T value
- if (huff) {
- huffDecoder->decodeInt(&t, huffDTTable);
- } else {
- arithDecoder->decodeInt(&t, iadtStats);
- }
- t *= -(int)strips;
-
- inst = 0;
- sFirst = 0;
- while (inst < numInstances) {
-
- // decode delta-T
- if (huff) {
- huffDecoder->decodeInt(&dt, huffDTTable);
- } else {
- arithDecoder->decodeInt(&dt, iadtStats);
- }
- t += dt * strips;
-
- // first S value
- if (huff) {
- huffDecoder->decodeInt(&ds, huffFSTable);
- } else {
- arithDecoder->decodeInt(&ds, iafsStats);
- }
- sFirst += ds;
- s = sFirst;
-
- // read the instances
- while (1) {
-
- // T value
- if (strips == 1) {
- dt = 0;
- } else if (huff) {
- dt = huffDecoder->readBits(logStrips);
- } else {
- arithDecoder->decodeInt(&dt, iaitStats);
- }
- tt = t + dt;
-
- // symbol ID
- if (huff) {
- if (symCodeTab) {
- huffDecoder->decodeInt(&j, symCodeTab);
- symID = (Guint)j;
- } else {
- symID = huffDecoder->readBits(symCodeLen);
- }
- } else {
- symID = arithDecoder->decodeIAID(symCodeLen, iaidStats);
- }
-
- if (symID >= (Guint)numSyms) {
- error(getPos(), "Invalid symbol number in JBIG2 text region");
- } else {
-
- // get the symbol bitmap
- symbolBitmap = NULL;
- if (refine) {
- if (huff) {
- ri = (int)huffDecoder->readBit();
- } else {
- arithDecoder->decodeInt(&ri, iariStats);
- }
- } else {
- ri = 0;
- }
- if (ri) {
- if (huff) {
- huffDecoder->decodeInt(&rdw, huffRDWTable);
- huffDecoder->decodeInt(&rdh, huffRDHTable);
- huffDecoder->decodeInt(&rdx, huffRDXTable);
- huffDecoder->decodeInt(&rdy, huffRDYTable);
- huffDecoder->decodeInt(&bmSize, huffRSizeTable);
- huffDecoder->reset();
- arithDecoder->start();
- } else {
- arithDecoder->decodeInt(&rdw, iardwStats);
- arithDecoder->decodeInt(&rdh, iardhStats);
- arithDecoder->decodeInt(&rdx, iardxStats);
- arithDecoder->decodeInt(&rdy, iardyStats);
- }
- refDX = ((rdw >= 0) ? rdw : rdw - 1) / 2 + rdx;
- refDY = ((rdh >= 0) ? rdh : rdh - 1) / 2 + rdy;
-
- symbolBitmap =
- readGenericRefinementRegion(rdw + syms[symID]->getWidth(),
- rdh + syms[symID]->getHeight(),
- templ, gFalse, syms[symID],
- refDX, refDY, atx, aty);
- //~ do we need to use the bmSize value here (in Huffman mode)?
- } else {
- symbolBitmap = syms[symID];
- }
-
- // combine the symbol bitmap into the region bitmap
- //~ something is wrong here - refCorner shouldn't degenerate into
- //~ two cases
- bw = symbolBitmap->getWidth() - 1;
- bh = symbolBitmap->getHeight() - 1;
- if (transposed) {
- switch (refCorner) {
- case 0: // bottom left
- bitmap->combine(symbolBitmap, tt, s, combOp);
- break;
- case 1: // top left
- bitmap->combine(symbolBitmap, tt, s, combOp);
- break;
- case 2: // bottom right
- bitmap->combine(symbolBitmap, tt - bw, s, combOp);
- break;
- case 3: // top right
- bitmap->combine(symbolBitmap, tt - bw, s, combOp);
- break;
- }
- s += bh;
- } else {
- switch (refCorner) {
- case 0: // bottom left
- bitmap->combine(symbolBitmap, s, tt - bh, combOp);
- break;
- case 1: // top left
- bitmap->combine(symbolBitmap, s, tt, combOp);
- break;
- case 2: // bottom right
- bitmap->combine(symbolBitmap, s, tt - bh, combOp);
- break;
- case 3: // top right
- bitmap->combine(symbolBitmap, s, tt, combOp);
- break;
- }
- s += bw;
- }
- if (ri) {
- delete symbolBitmap;
- }
- }
-
- // next instance
- ++inst;
-
- // next S value
- if (huff) {
- if (!huffDecoder->decodeInt(&ds, huffDSTable)) {
- break;
- }
- } else {
- if (!arithDecoder->decodeInt(&ds, iadsStats)) {
- break;
- }
- }
- s += sOffset + ds;
- }
- }
-
- return bitmap;
-}
-
-void JBIG2Stream::readPatternDictSeg(Guint segNum, Guint length) {
- JBIG2PatternDict *patternDict;
- JBIG2Bitmap *bitmap;
- Guint flags, patternW, patternH, grayMax, templ, mmr;
- int atx[4], aty[4];
- Guint i, x;
-
- // halftone dictionary flags, pattern width and height, max gray value
- if (!readUByte(&flags) ||
- !readUByte(&patternW) ||
- !readUByte(&patternH) ||
- !readULong(&grayMax)) {
- goto eofError;
- }
- templ = (flags >> 1) & 3;
- mmr = flags & 1;
-
- // set up the arithmetic decoder
- if (!mmr) {
- resetGenericStats(templ, NULL);
- arithDecoder->start();
- }
-
- // read the bitmap
- atx[0] = -(int)patternW; aty[0] = 0;
- atx[1] = -3; aty[1] = -1;
- atx[2] = 2; aty[2] = -2;
- atx[3] = -2; aty[3] = -2;
- bitmap = readGenericBitmap(mmr, (grayMax + 1) * patternW, patternH,
- templ, gFalse, gFalse, NULL,
- atx, aty, length - 7);
-
- // create the pattern dict object
- patternDict = new JBIG2PatternDict(segNum, grayMax + 1);
-
- // split up the bitmap
- x = 0;
- for (i = 0; i <= grayMax; ++i) {
- patternDict->setBitmap(i, bitmap->getSlice(x, 0, patternW, patternH));
- x += patternW;
- }
-
- // free memory
- delete bitmap;
-
- // store the new pattern dict
- segments->append(patternDict);
-
- return;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-void JBIG2Stream::readHalftoneRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length,
- Guint *refSegs, Guint nRefSegs) {
- JBIG2Bitmap *bitmap;
- JBIG2Segment *seg;
- JBIG2PatternDict *patternDict;
- JBIG2Bitmap *skipBitmap;
- Guint *grayImg;
- JBIG2Bitmap *grayBitmap;
- JBIG2Bitmap *patternBitmap;
- Guint w, h, x, y, segInfoFlags, extCombOp;
- Guint flags, mmr, templ, enableSkip, combOp;
- Guint gridW, gridH, stepX, stepY, patW, patH;
- int atx[4], aty[4];
- int gridX, gridY, xx, yy, bit, j;
- Guint bpp, m, n, i;
-
- // region segment info field
- if (!readULong(&w) || !readULong(&h) ||
- !readULong(&x) || !readULong(&y) ||
- !readUByte(&segInfoFlags)) {
- goto eofError;
- }
- extCombOp = segInfoFlags & 7;
-
- // rest of the halftone region header
- if (!readUByte(&flags)) {
- goto eofError;
- }
- mmr = flags & 1;
- templ = (flags >> 1) & 3;
- enableSkip = (flags >> 3) & 1;
- combOp = (flags >> 4) & 7;
- if (!readULong(&gridW) || !readULong(&gridH) ||
- !readLong(&gridX) || !readLong(&gridY) ||
- !readUWord(&stepX) || !readUWord(&stepY)) {
- goto eofError;
- }
- if (w == 0 || h == 0 || w >= INT_MAX / h) {
- error(getPos(), "Bad bitmap size in JBIG2 halftone segment");
- return;
- }
- if (gridH == 0 || gridW >= INT_MAX / gridH) {
- error(getPos(), "Bad grid size in JBIG2 halftone segment");
- return;
- }
-
- // get pattern dictionary
- if (nRefSegs != 1) {
- error(getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment");
- return;
- }
- seg = findSegment(refSegs[0]);
- if (seg->getType() != jbig2SegPatternDict) {
- error(getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment");
- return;
- }
- patternDict = (JBIG2PatternDict *)seg;
- bpp = 0;
- i = 1;
- while (i < patternDict->getSize()) {
- ++bpp;
- i <<= 1;
- }
- patW = patternDict->getBitmap(0)->getWidth();
- patH = patternDict->getBitmap(0)->getHeight();
-
- // set up the arithmetic decoder
- if (!mmr) {
- resetGenericStats(templ, NULL);
- arithDecoder->start();
- }
-
- // allocate the bitmap
- bitmap = new JBIG2Bitmap(segNum, w, h);
- if (flags & 0x80) { // HDEFPIXEL
- bitmap->clearToOne();
- } else {
- bitmap->clearToZero();
- }
-
- // compute the skip bitmap
- skipBitmap = NULL;
- if (enableSkip) {
- skipBitmap = new JBIG2Bitmap(0, gridW, gridH);
- skipBitmap->clearToZero();
- for (m = 0; m < gridH; ++m) {
- for (n = 0; n < gridW; ++n) {
- xx = gridX + m * stepY + n * stepX;
- yy = gridY + m * stepX - n * stepY;
- if (((xx + (int)patW) >> 8) <= 0 || (xx >> 8) >= (int)w ||
- ((yy + (int)patH) >> 8) <= 0 || (yy >> 8) >= (int)h) {
- skipBitmap->setPixel(n, m);
- }
- }
- }
- }
-
- // read the gray-scale image
- grayImg = (Guint *)gmallocn(gridW * gridH, sizeof(Guint));
- memset(grayImg, 0, gridW * gridH * sizeof(Guint));
- atx[0] = templ <= 1 ? 3 : 2; aty[0] = -1;
- atx[1] = -3; aty[1] = -1;
- atx[2] = 2; aty[2] = -2;
- atx[3] = -2; aty[3] = -2;
- for (j = bpp - 1; j >= 0; --j) {
- grayBitmap = readGenericBitmap(mmr, gridW, gridH, templ, gFalse,
- enableSkip, skipBitmap, atx, aty, -1);
- i = 0;
- for (m = 0; m < gridH; ++m) {
- for (n = 0; n < gridW; ++n) {
- bit = grayBitmap->getPixel(n, m) ^ (grayImg[i] & 1);
- grayImg[i] = (grayImg[i] << 1) | bit;
- ++i;
- }
- }
- delete grayBitmap;
- }
-
- // decode the image
- i = 0;
- for (m = 0; m < gridH; ++m) {
- xx = gridX + m * stepY;
- yy = gridY + m * stepX;
- for (n = 0; n < gridW; ++n) {
- if (!(enableSkip && skipBitmap->getPixel(n, m))) {
- patternBitmap = patternDict->getBitmap(grayImg[i]);
- bitmap->combine(patternBitmap, xx >> 8, yy >> 8, combOp);
- }
- xx += stepX;
- yy -= stepY;
- ++i;
- }
- }
-
- gfree(grayImg);
- if (skipBitmap) {
- delete skipBitmap;
- }
-
- // combine the region bitmap into the page bitmap
- if (imm) {
- if (pageH == 0xffffffff && y + h > curPageH) {
- pageBitmap->expand(y + h, pageDefPixel);
- }
- pageBitmap->combine(bitmap, x, y, extCombOp);
- delete bitmap;
-
- // store the region bitmap
- } else {
- segments->append(bitmap);
- }
-
- return;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-void JBIG2Stream::readGenericRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length) {
- JBIG2Bitmap *bitmap;
- Guint w, h, x, y, segInfoFlags, extCombOp;
- Guint flags, mmr, templ, tpgdOn;
- int atx[4], aty[4];
-
- // region segment info field
- if (!readULong(&w) || !readULong(&h) ||
- !readULong(&x) || !readULong(&y) ||
- !readUByte(&segInfoFlags)) {
- goto eofError;
- }
- extCombOp = segInfoFlags & 7;
-
- // rest of the generic region segment header
- if (!readUByte(&flags)) {
- goto eofError;
- }
- mmr = flags & 1;
- templ = (flags >> 1) & 3;
- tpgdOn = (flags >> 3) & 1;
-
- // AT flags
- if (!mmr) {
- if (templ == 0) {
- if (!readByte(&atx[0]) ||
- !readByte(&aty[0]) ||
- !readByte(&atx[1]) ||
- !readByte(&aty[1]) ||
- !readByte(&atx[2]) ||
- !readByte(&aty[2]) ||
- !readByte(&atx[3]) ||
- !readByte(&aty[3])) {
- goto eofError;
- }
- } else {
- if (!readByte(&atx[0]) ||
- !readByte(&aty[0])) {
- goto eofError;
- }
- }
- }
-
- // set up the arithmetic decoder
- if (!mmr) {
- resetGenericStats(templ, NULL);
- arithDecoder->start();
- }
-
- // read the bitmap
- bitmap = readGenericBitmap(mmr, w, h, templ, tpgdOn, gFalse,
- NULL, atx, aty, mmr ? 0 : length - 18);
-
- // combine the region bitmap into the page bitmap
- if (imm) {
- if (pageH == 0xffffffff && y + h > curPageH) {
- pageBitmap->expand(y + h, pageDefPixel);
- }
- pageBitmap->combine(bitmap, x, y, extCombOp);
- delete bitmap;
-
- // store the region bitmap
- } else {
- bitmap->setSegNum(segNum);
- segments->append(bitmap);
- }
-
- return;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h,
- int templ, GBool tpgdOn,
- GBool useSkip, JBIG2Bitmap *skip,
- int *atx, int *aty,
- int mmrDataLength) {
- JBIG2Bitmap *bitmap;
- GBool ltp;
- Guint ltpCX, cx, cx0, cx1, cx2;
- JBIG2BitmapPtr cxPtr0, cxPtr1;
- JBIG2BitmapPtr atPtr0, atPtr1, atPtr2, atPtr3;
- int *refLine, *codingLine;
- int code1, code2, code3;
- int x, y, a0, pix, i, refI, codingI;
-
- bitmap = new JBIG2Bitmap(0, w, h);
- bitmap->clearToZero();
-
- //----- MMR decode
-
- if (mmr) {
-
- mmrDecoder->reset();
- refLine = (int *)gmallocn(w + 2, sizeof(int));
- codingLine = (int *)gmallocn(w + 2, sizeof(int));
- codingLine[0] = codingLine[1] = w;
-
- for (y = 0; y < h; ++y) {
-
- // copy coding line to ref line
- for (i = 0; codingLine[i] < w; ++i) {
- refLine[i] = codingLine[i];
- }
- refLine[i] = refLine[i + 1] = w;
-
- // decode a line
- refI = 0; // b1 = refLine[refI]
- codingI = 0; // a1 = codingLine[codingI]
- a0 = 0;
- do {
- code1 = mmrDecoder->get2DCode();
- switch (code1) {
- case twoDimPass:
- if (refLine[refI] < w) {
- a0 = refLine[refI + 1];
- refI += 2;
- }
- break;
- case twoDimHoriz:
- if (codingI & 1) {
- code1 = 0;
- do {
- code1 += code3 = mmrDecoder->getBlackCode();
- } while (code3 >= 64);
- code2 = 0;
- do {
- code2 += code3 = mmrDecoder->getWhiteCode();
- } while (code3 >= 64);
- } else {
- code1 = 0;
- do {
- code1 += code3 = mmrDecoder->getWhiteCode();
- } while (code3 >= 64);
- code2 = 0;
- do {
- code2 += code3 = mmrDecoder->getBlackCode();
- } while (code3 >= 64);
- }
- if (code1 > 0 || code2 > 0) {
- a0 = codingLine[codingI++] = a0 + code1;
- a0 = codingLine[codingI++] = a0 + code2;
- while (refLine[refI] <= a0 && refLine[refI] < w) {
- refI += 2;
- }
- }
- break;
- case twoDimVert0:
- a0 = codingLine[codingI++] = refLine[refI];
- if (refLine[refI] < w) {
- ++refI;
- }
- break;
- case twoDimVertR1:
- a0 = codingLine[codingI++] = refLine[refI] + 1;
- if (refLine[refI] < w) {
- ++refI;
- while (refLine[refI] <= a0 && refLine[refI] < w) {
- refI += 2;
- }
- }
- break;
- case twoDimVertR2:
- a0 = codingLine[codingI++] = refLine[refI] + 2;
- if (refLine[refI] < w) {
- ++refI;
- while (refLine[refI] <= a0 && refLine[refI] < w) {
- refI += 2;
- }
- }
- break;
- case twoDimVertR3:
- a0 = codingLine[codingI++] = refLine[refI] + 3;
- if (refLine[refI] < w) {
- ++refI;
- while (refLine[refI] <= a0 && refLine[refI] < w) {
- refI += 2;
- }
- }
- break;
- case twoDimVertL1:
- a0 = codingLine[codingI++] = refLine[refI] - 1;
- if (refI > 0) {
- --refI;
- } else {
- ++refI;
- }
- while (refLine[refI] <= a0 && refLine[refI] < w) {
- refI += 2;
- }
- break;
- case twoDimVertL2:
- a0 = codingLine[codingI++] = refLine[refI] - 2;
- if (refI > 0) {
- --refI;
- } else {
- ++refI;
- }
- while (refLine[refI] <= a0 && refLine[refI] < w) {
- refI += 2;
- }
- break;
- case twoDimVertL3:
- a0 = codingLine[codingI++] = refLine[refI] - 3;
- if (refI > 0) {
- --refI;
- } else {
- ++refI;
- }
- while (refLine[refI] <= a0 && refLine[refI] < w) {
- refI += 2;
- }
- break;
- default:
- error(getPos(), "Illegal code in JBIG2 MMR bitmap data");
- break;
- }
- } while (a0 < w);
- codingLine[codingI++] = w;
-
- // convert the run lengths to a bitmap line
- i = 0;
- while (codingLine[i] < w) {
- for (x = codingLine[i]; x < codingLine[i+1]; ++x) {
- bitmap->setPixel(x, y);
- }
- i += 2;
- }
- }
-
- if (mmrDataLength >= 0) {
- mmrDecoder->skipTo(mmrDataLength);
- } else {
- if (mmrDecoder->get24Bits() != 0x001001) {
- error(getPos(), "Missing EOFB in JBIG2 MMR bitmap data");
- }
- }
-
- gfree(refLine);
- gfree(codingLine);
-
- //----- arithmetic decode
-
- } else {
- // set up the typical row context
- ltpCX = 0; // make gcc happy
- if (tpgdOn) {
- switch (templ) {
- case 0:
- ltpCX = 0x3953; // 001 11001 0101 0011
- break;
- case 1:
- ltpCX = 0x079a; // 0011 11001 101 0
- break;
- case 2:
- ltpCX = 0x0e3; // 001 1100 01 1
- break;
- case 3:
- ltpCX = 0x18a; // 01100 0101 1
- break;
- }
- }
-
- ltp = 0;
- cx = cx0 = cx1 = cx2 = 0; // make gcc happy
- for (y = 0; y < h; ++y) {
-
- // check for a "typical" (duplicate) row
- if (tpgdOn) {
- if (arithDecoder->decodeBit(ltpCX, genericRegionStats)) {
- ltp = !ltp;
- }
- if (ltp) {
- bitmap->duplicateRow(y, y-1);
- continue;
- }
- }
-
- switch (templ) {
- case 0:
-
- // set up the context
- bitmap->getPixelPtr(0, y-2, &cxPtr0);
- cx0 = bitmap->nextPixel(&cxPtr0);
- cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0);
- bitmap->getPixelPtr(0, y-1, &cxPtr1);
- cx1 = bitmap->nextPixel(&cxPtr1);
- cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1);
- cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1);
- cx2 = 0;
- bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0);
- bitmap->getPixelPtr(atx[1], y + aty[1], &atPtr1);
- bitmap->getPixelPtr(atx[2], y + aty[2], &atPtr2);
- bitmap->getPixelPtr(atx[3], y + aty[3], &atPtr3);
-
- // decode the row
- for (x = 0; x < w; ++x) {
-
- // build the context
- cx = (cx0 << 13) | (cx1 << 8) | (cx2 << 4) |
- (bitmap->nextPixel(&atPtr0) << 3) |
- (bitmap->nextPixel(&atPtr1) << 2) |
- (bitmap->nextPixel(&atPtr2) << 1) |
- bitmap->nextPixel(&atPtr3);
-
- // check for a skipped pixel
- if (useSkip && skip->getPixel(x, y)) {
- pix = 0;
-
- // decode the pixel
- } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) {
- bitmap->setPixel(x, y);
- }
-
- // update the context
- cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x07;
- cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f;
- cx2 = ((cx2 << 1) | pix) & 0x0f;
- }
- break;
-
- case 1:
-
- // set up the context
- bitmap->getPixelPtr(0, y-2, &cxPtr0);
- cx0 = bitmap->nextPixel(&cxPtr0);
- cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0);
- cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0);
- bitmap->getPixelPtr(0, y-1, &cxPtr1);
- cx1 = bitmap->nextPixel(&cxPtr1);
- cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1);
- cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1);
- cx2 = 0;
- bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0);
-
- // decode the row
- for (x = 0; x < w; ++x) {
-
- // build the context
- cx = (cx0 << 9) | (cx1 << 4) | (cx2 << 1) |
- bitmap->nextPixel(&atPtr0);
-
- // check for a skipped pixel
- if (useSkip && skip->getPixel(x, y)) {
- pix = 0;
-
- // decode the pixel
- } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) {
- bitmap->setPixel(x, y);
- }
-
- // update the context
- cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x0f;
- cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f;
- cx2 = ((cx2 << 1) | pix) & 0x07;
- }
- break;
-
- case 2:
-
- // set up the context
- bitmap->getPixelPtr(0, y-2, &cxPtr0);
- cx0 = bitmap->nextPixel(&cxPtr0);
- cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0);
- bitmap->getPixelPtr(0, y-1, &cxPtr1);
- cx1 = bitmap->nextPixel(&cxPtr1);
- cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1);
- cx2 = 0;
- bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0);
-
- // decode the row
- for (x = 0; x < w; ++x) {
-
- // build the context
- cx = (cx0 << 7) | (cx1 << 3) | (cx2 << 1) |
- bitmap->nextPixel(&atPtr0);
-
- // check for a skipped pixel
- if (useSkip && skip->getPixel(x, y)) {
- pix = 0;
-
- // decode the pixel
- } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) {
- bitmap->setPixel(x, y);
- }
-
- // update the context
- cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x07;
- cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x0f;
- cx2 = ((cx2 << 1) | pix) & 0x03;
- }
- break;
-
- case 3:
-
- // set up the context
- bitmap->getPixelPtr(0, y-1, &cxPtr1);
- cx1 = bitmap->nextPixel(&cxPtr1);
- cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1);
- cx2 = 0;
- bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0);
-
- // decode the row
- for (x = 0; x < w; ++x) {
-
- // build the context
- cx = (cx1 << 5) | (cx2 << 1) |
- bitmap->nextPixel(&atPtr0);
-
- // check for a skipped pixel
- if (useSkip && skip->getPixel(x, y)) {
- pix = 0;
-
- // decode the pixel
- } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) {
- bitmap->setPixel(x, y);
- }
-
- // update the context
- cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f;
- cx2 = ((cx2 << 1) | pix) & 0x0f;
- }
- break;
- }
- }
- }
-
- return bitmap;
-}
-
-void JBIG2Stream::readGenericRefinementRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length,
- Guint *refSegs,
- Guint nRefSegs) {
- JBIG2Bitmap *bitmap, *refBitmap;
- Guint w, h, x, y, segInfoFlags, extCombOp;
- Guint flags, templ, tpgrOn;
- int atx[2], aty[2];
- JBIG2Segment *seg;
-
- // region segment info field
- if (!readULong(&w) || !readULong(&h) ||
- !readULong(&x) || !readULong(&y) ||
- !readUByte(&segInfoFlags)) {
- goto eofError;
- }
- extCombOp = segInfoFlags & 7;
-
- // rest of the generic refinement region segment header
- if (!readUByte(&flags)) {
- goto eofError;
- }
- templ = flags & 1;
- tpgrOn = (flags >> 1) & 1;
-
- // AT flags
- if (!templ) {
- if (!readByte(&atx[0]) || !readByte(&aty[0]) ||
- !readByte(&atx[1]) || !readByte(&aty[1])) {
- goto eofError;
- }
- }
-
- // resize the page bitmap if needed
- if (nRefSegs == 0 || imm) {
- if (pageH == 0xffffffff && y + h > curPageH) {
- pageBitmap->expand(y + h, pageDefPixel);
- }
- }
-
- // get referenced bitmap
- if (nRefSegs > 1) {
- error(getPos(), "Bad reference in JBIG2 generic refinement segment");
- return;
- }
- if (nRefSegs == 1) {
- seg = findSegment(refSegs[0]);
- if (seg->getType() != jbig2SegBitmap) {
- error(getPos(), "Bad bitmap reference in JBIG2 generic refinement segment");
- return;
- }
- refBitmap = (JBIG2Bitmap *)seg;
- } else {
- refBitmap = pageBitmap->getSlice(x, y, w, h);
- }
-
- // set up the arithmetic decoder
- resetRefinementStats(templ, NULL);
- arithDecoder->start();
-
- // read
- bitmap = readGenericRefinementRegion(w, h, templ, tpgrOn,
- refBitmap, 0, 0, atx, aty);
-
- // combine the region bitmap into the page bitmap
- if (imm) {
- pageBitmap->combine(bitmap, x, y, extCombOp);
- delete bitmap;
-
- // store the region bitmap
- } else {
- bitmap->setSegNum(segNum);
- segments->append(bitmap);
- }
-
- // delete the referenced bitmap
- if (nRefSegs == 1) {
- discardSegment(refSegs[0]);
- } else {
- delete refBitmap;
- }
-
- return;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-JBIG2Bitmap *JBIG2Stream::readGenericRefinementRegion(int w, int h,
- int templ, GBool tpgrOn,
- JBIG2Bitmap *refBitmap,
- int refDX, int refDY,
- int *atx, int *aty) {
- JBIG2Bitmap *bitmap;
- GBool ltp;
- Guint ltpCX, cx, cx0, cx2, cx3, cx4, tpgrCX0, tpgrCX1, tpgrCX2;
- JBIG2BitmapPtr cxPtr0, cxPtr1, cxPtr2, cxPtr3, cxPtr4, cxPtr5, cxPtr6;
- JBIG2BitmapPtr tpgrCXPtr0, tpgrCXPtr1, tpgrCXPtr2;
- int x, y, pix;
-
- bitmap = new JBIG2Bitmap(0, w, h);
- bitmap->clearToZero();
-
- // set up the typical row context
- if (templ) {
- ltpCX = 0x008;
- } else {
- ltpCX = 0x0010;
- }
-
- ltp = 0;
- for (y = 0; y < h; ++y) {
-
- if (templ) {
-
- // set up the context
- bitmap->getPixelPtr(0, y-1, &cxPtr0);
- cx0 = bitmap->nextPixel(&cxPtr0);
- bitmap->getPixelPtr(-1, y, &cxPtr1);
- refBitmap->getPixelPtr(-refDX, y-1-refDY, &cxPtr2);
- refBitmap->getPixelPtr(-1-refDX, y-refDY, &cxPtr3);
- cx3 = refBitmap->nextPixel(&cxPtr3);
- cx3 = (cx3 << 1) | refBitmap->nextPixel(&cxPtr3);
- refBitmap->getPixelPtr(-refDX, y+1-refDY, &cxPtr4);
- cx4 = refBitmap->nextPixel(&cxPtr4);
-
- // set up the typical prediction context
- tpgrCX0 = tpgrCX1 = tpgrCX2 = 0; // make gcc happy
- if (tpgrOn) {
- refBitmap->getPixelPtr(-1-refDX, y-1-refDY, &tpgrCXPtr0);
- tpgrCX0 = refBitmap->nextPixel(&tpgrCXPtr0);
- tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0);
- tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0);
- refBitmap->getPixelPtr(-1-refDX, y-refDY, &tpgrCXPtr1);
- tpgrCX1 = refBitmap->nextPixel(&tpgrCXPtr1);
- tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1);
- tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1);
- refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &tpgrCXPtr2);
- tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2);
- tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2);
- tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2);
- }
-
- for (x = 0; x < w; ++x) {
-
- // update the context
- cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 7;
- cx3 = ((cx3 << 1) | refBitmap->nextPixel(&cxPtr3)) & 7;
- cx4 = ((cx4 << 1) | refBitmap->nextPixel(&cxPtr4)) & 3;
-
- if (tpgrOn) {
- // update the typical predictor context
- tpgrCX0 = ((tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0)) & 7;
- tpgrCX1 = ((tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1)) & 7;
- tpgrCX2 = ((tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2)) & 7;
-
- // check for a "typical" pixel
- if (arithDecoder->decodeBit(ltpCX, refinementRegionStats)) {
- ltp = !ltp;
- }
- if (tpgrCX0 == 0 && tpgrCX1 == 0 && tpgrCX2 == 0) {
- bitmap->clearPixel(x, y);
- continue;
- } else if (tpgrCX0 == 7 && tpgrCX1 == 7 && tpgrCX2 == 7) {
- bitmap->setPixel(x, y);
- continue;
- }
- }
-
- // build the context
- cx = (cx0 << 7) | (bitmap->nextPixel(&cxPtr1) << 6) |
- (refBitmap->nextPixel(&cxPtr2) << 5) |
- (cx3 << 2) | cx4;
-
- // decode the pixel
- if ((pix = arithDecoder->decodeBit(cx, refinementRegionStats))) {
- bitmap->setPixel(x, y);
- }
- }
-
- } else {
-
- // set up the context
- bitmap->getPixelPtr(0, y-1, &cxPtr0);
- cx0 = bitmap->nextPixel(&cxPtr0);
- bitmap->getPixelPtr(-1, y, &cxPtr1);
- refBitmap->getPixelPtr(-refDX, y-1-refDY, &cxPtr2);
- cx2 = refBitmap->nextPixel(&cxPtr2);
- refBitmap->getPixelPtr(-1-refDX, y-refDY, &cxPtr3);
- cx3 = refBitmap->nextPixel(&cxPtr3);
- cx3 = (cx3 << 1) | refBitmap->nextPixel(&cxPtr3);
- refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &cxPtr4);
- cx4 = refBitmap->nextPixel(&cxPtr4);
- cx4 = (cx4 << 1) | refBitmap->nextPixel(&cxPtr4);
- bitmap->getPixelPtr(atx[0], y+aty[0], &cxPtr5);
- refBitmap->getPixelPtr(atx[1]-refDX, y+aty[1]-refDY, &cxPtr6);
-
- // set up the typical prediction context
- tpgrCX0 = tpgrCX1 = tpgrCX2 = 0; // make gcc happy
- if (tpgrOn) {
- refBitmap->getPixelPtr(-1-refDX, y-1-refDY, &tpgrCXPtr0);
- tpgrCX0 = refBitmap->nextPixel(&tpgrCXPtr0);
- tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0);
- tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0);
- refBitmap->getPixelPtr(-1-refDX, y-refDY, &tpgrCXPtr1);
- tpgrCX1 = refBitmap->nextPixel(&tpgrCXPtr1);
- tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1);
- tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1);
- refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &tpgrCXPtr2);
- tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2);
- tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2);
- tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2);
- }
-
- for (x = 0; x < w; ++x) {
-
- // update the context
- cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 3;
- cx2 = ((cx2 << 1) | refBitmap->nextPixel(&cxPtr2)) & 3;
- cx3 = ((cx3 << 1) | refBitmap->nextPixel(&cxPtr3)) & 7;
- cx4 = ((cx4 << 1) | refBitmap->nextPixel(&cxPtr4)) & 7;
-
- if (tpgrOn) {
- // update the typical predictor context
- tpgrCX0 = ((tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0)) & 7;
- tpgrCX1 = ((tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1)) & 7;
- tpgrCX2 = ((tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2)) & 7;
-
- // check for a "typical" pixel
- if (arithDecoder->decodeBit(ltpCX, refinementRegionStats)) {
- ltp = !ltp;
- }
- if (tpgrCX0 == 0 && tpgrCX1 == 0 && tpgrCX2 == 0) {
- bitmap->clearPixel(x, y);
- continue;
- } else if (tpgrCX0 == 7 && tpgrCX1 == 7 && tpgrCX2 == 7) {
- bitmap->setPixel(x, y);
- continue;
- }
- }
-
- // build the context
- cx = (cx0 << 11) | (bitmap->nextPixel(&cxPtr1) << 10) |
- (cx2 << 8) | (cx3 << 5) | (cx4 << 2) |
- (bitmap->nextPixel(&cxPtr5) << 1) |
- refBitmap->nextPixel(&cxPtr6);
-
- // decode the pixel
- if ((pix = arithDecoder->decodeBit(cx, refinementRegionStats))) {
- bitmap->setPixel(x, y);
- }
- }
- }
- }
-
- return bitmap;
-}
-
-void JBIG2Stream::readPageInfoSeg(Guint length) {
- Guint xRes, yRes, flags, striping;
-
- if (!readULong(&pageW) || !readULong(&pageH) ||
- !readULong(&xRes) || !readULong(&yRes) ||
- !readUByte(&flags) || !readUWord(&striping)) {
- goto eofError;
- }
- pageDefPixel = (flags >> 2) & 1;
- defCombOp = (flags >> 3) & 3;
-
- // allocate the page bitmap
- if (pageH == 0xffffffff) {
- curPageH = striping & 0x7fff;
- } else {
- curPageH = pageH;
- }
- pageBitmap = new JBIG2Bitmap(0, pageW, curPageH);
-
- // default pixel value
- if (pageDefPixel) {
- pageBitmap->clearToOne();
- } else {
- pageBitmap->clearToZero();
- }
-
- return;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-void JBIG2Stream::readEndOfStripeSeg(Guint length) {
- Guint i;
-
- // skip the segment
- for (i = 0; i < length; ++i) {
- curStr->getChar();
- }
-}
-
-void JBIG2Stream::readProfilesSeg(Guint length) {
- Guint i;
-
- // skip the segment
- for (i = 0; i < length; ++i) {
- curStr->getChar();
- }
-}
-
-void JBIG2Stream::readCodeTableSeg(Guint segNum, Guint length) {
- JBIG2HuffmanTable *huffTab;
- Guint flags, oob, prefixBits, rangeBits;
- int lowVal, highVal, val;
- Guint huffTabSize, i;
-
- if (!readUByte(&flags) || !readLong(&lowVal) || !readLong(&highVal)) {
- goto eofError;
- }
- oob = flags & 1;
- prefixBits = ((flags >> 1) & 7) + 1;
- rangeBits = ((flags >> 4) & 7) + 1;
-
- huffDecoder->reset();
- huffTabSize = 8;
- huffTab = (JBIG2HuffmanTable *)
- gmallocn(huffTabSize, sizeof(JBIG2HuffmanTable));
- i = 0;
- val = lowVal;
- while (val < highVal) {
- if (i == huffTabSize) {
- huffTabSize *= 2;
- huffTab = (JBIG2HuffmanTable *)
- greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable));
- }
- huffTab[i].val = val;
- huffTab[i].prefixLen = huffDecoder->readBits(prefixBits);
- huffTab[i].rangeLen = huffDecoder->readBits(rangeBits);
- val += 1 << huffTab[i].rangeLen;
- ++i;
- }
- if (i + oob + 3 > huffTabSize) {
- huffTabSize = i + oob + 3;
- huffTab = (JBIG2HuffmanTable *)
- greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable));
- }
- huffTab[i].val = lowVal - 1;
- huffTab[i].prefixLen = huffDecoder->readBits(prefixBits);
- huffTab[i].rangeLen = jbig2HuffmanLOW;
- ++i;
- huffTab[i].val = highVal;
- huffTab[i].prefixLen = huffDecoder->readBits(prefixBits);
- huffTab[i].rangeLen = 32;
- ++i;
- if (oob) {
- huffTab[i].val = 0;
- huffTab[i].prefixLen = huffDecoder->readBits(prefixBits);
- huffTab[i].rangeLen = jbig2HuffmanOOB;
- ++i;
- }
- huffTab[i].val = 0;
- huffTab[i].prefixLen = 0;
- huffTab[i].rangeLen = jbig2HuffmanEOT;
- huffDecoder->buildTable(huffTab, i);
-
- // create and store the new table segment
- segments->append(new JBIG2CodeTable(segNum, huffTab));
-
- return;
-
- eofError:
- error(getPos(), "Unexpected EOF in JBIG2 stream");
-}
-
-void JBIG2Stream::readExtensionSeg(Guint length) {
- Guint i;
-
- // skip the segment
- for (i = 0; i < length; ++i) {
- curStr->getChar();
- }
-}
-
-JBIG2Segment *JBIG2Stream::findSegment(Guint segNum) {
- JBIG2Segment *seg;
- int i;
-
- for (i = 0; i < globalSegments->getLength(); ++i) {
- seg = (JBIG2Segment *)globalSegments->get(i);
- if (seg->getSegNum() == segNum) {
- return seg;
- }
- }
- for (i = 0; i < segments->getLength(); ++i) {
- seg = (JBIG2Segment *)segments->get(i);
- if (seg->getSegNum() == segNum) {
- return seg;
- }
- }
- return NULL;
-}
-
-void JBIG2Stream::discardSegment(Guint segNum) {
- JBIG2Segment *seg;
- int i;
-
- for (i = 0; i < globalSegments->getLength(); ++i) {
- seg = (JBIG2Segment *)globalSegments->get(i);
- if (seg->getSegNum() == segNum) {
- globalSegments->del(i);
- return;
- }
- }
- for (i = 0; i < segments->getLength(); ++i) {
- seg = (JBIG2Segment *)segments->get(i);
- if (seg->getSegNum() == segNum) {
- segments->del(i);
- return;
- }
- }
-}
-
-void JBIG2Stream::resetGenericStats(Guint templ,
- JArithmeticDecoderStats *prevStats) {
- int size;
-
- size = contextSize[templ];
- if (prevStats && prevStats->getContextSize() == size) {
- if (genericRegionStats->getContextSize() == size) {
- genericRegionStats->copyFrom(prevStats);
- } else {
- delete genericRegionStats;
- genericRegionStats = prevStats->copy();
- }
- } else {
- if (genericRegionStats->getContextSize() == size) {
- genericRegionStats->reset();
- } else {
- delete genericRegionStats;
- genericRegionStats = new JArithmeticDecoderStats(1 << size);
- }
- }
-}
-
-void JBIG2Stream::resetRefinementStats(Guint templ,
- JArithmeticDecoderStats *prevStats) {
- int size;
-
- size = refContextSize[templ];
- if (prevStats && prevStats->getContextSize() == size) {
- if (refinementRegionStats->getContextSize() == size) {
- refinementRegionStats->copyFrom(prevStats);
- } else {
- delete refinementRegionStats;
- refinementRegionStats = prevStats->copy();
- }
- } else {
- if (refinementRegionStats->getContextSize() == size) {
- refinementRegionStats->reset();
- } else {
- delete refinementRegionStats;
- refinementRegionStats = new JArithmeticDecoderStats(1 << size);
- }
- }
-}
-
-void JBIG2Stream::resetIntStats(int symCodeLen) {
- iadhStats->reset();
- iadwStats->reset();
- iaexStats->reset();
- iaaiStats->reset();
- iadtStats->reset();
- iaitStats->reset();
- iafsStats->reset();
- iadsStats->reset();
- iardxStats->reset();
- iardyStats->reset();
- iardwStats->reset();
- iardhStats->reset();
- iariStats->reset();
- if (iaidStats->getContextSize() == 1 << (symCodeLen + 1)) {
- iaidStats->reset();
- } else {
- delete iaidStats;
- iaidStats = new JArithmeticDecoderStats(1 << (symCodeLen + 1));
- }
-}
-
-GBool JBIG2Stream::readUByte(Guint *x) {
- int c0;
-
- if ((c0 = curStr->getChar()) == EOF) {
- return gFalse;
- }
- *x = (Guint)c0;
- return gTrue;
-}
-
-GBool JBIG2Stream::readByte(int *x) {
- int c0;
-
- if ((c0 = curStr->getChar()) == EOF) {
- return gFalse;
- }
- *x = c0;
- if (c0 & 0x80) {
- *x |= -1 - 0xff;
- }
- return gTrue;
-}
-
-GBool JBIG2Stream::readUWord(Guint *x) {
- int c0, c1;
-
- if ((c0 = curStr->getChar()) == EOF ||
- (c1 = curStr->getChar()) == EOF) {
- return gFalse;
- }
- *x = (Guint)((c0 << 8) | c1);
- return gTrue;
-}
-
-GBool JBIG2Stream::readULong(Guint *x) {
- int c0, c1, c2, c3;
-
- if ((c0 = curStr->getChar()) == EOF ||
- (c1 = curStr->getChar()) == EOF ||
- (c2 = curStr->getChar()) == EOF ||
- (c3 = curStr->getChar()) == EOF) {
- return gFalse;
- }
- *x = (Guint)((c0 << 24) | (c1 << 16) | (c2 << 8) | c3);
- return gTrue;
-}
-
-GBool JBIG2Stream::readLong(int *x) {
- int c0, c1, c2, c3;
-
- if ((c0 = curStr->getChar()) == EOF ||
- (c1 = curStr->getChar()) == EOF ||
- (c2 = curStr->getChar()) == EOF ||
- (c3 = curStr->getChar()) == EOF) {
- return gFalse;
- }
- *x = ((c0 << 24) | (c1 << 16) | (c2 << 8) | c3);
- if (c0 & 0x80) {
- *x |= -1 - (int)0xffffffff;
- }
- return gTrue;
-}
diff --git a/Build/source/libs/xpdf/xpdf/JBIG2Stream.h b/Build/source/libs/xpdf/xpdf/JBIG2Stream.h
deleted file mode 100644
index 210d927a7cf..00000000000
--- a/Build/source/libs/xpdf/xpdf/JBIG2Stream.h
+++ /dev/null
@@ -1,145 +0,0 @@
-//========================================================================
-//
-// JBIG2Stream.h
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef JBIG2STREAM_H
-#define JBIG2STREAM_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "Object.h"
-#include "Stream.h"
-
-class GList;
-class JBIG2Segment;
-class JBIG2Bitmap;
-class JArithmeticDecoder;
-class JArithmeticDecoderStats;
-class JBIG2HuffmanDecoder;
-struct JBIG2HuffmanTable;
-class JBIG2MMRDecoder;
-
-//------------------------------------------------------------------------
-
-class JBIG2Stream: public FilterStream {
-public:
-
- JBIG2Stream(Stream *strA, Object *globalsStreamA);
- virtual ~JBIG2Stream();
- virtual StreamKind getKind() { return strJBIG2; }
- virtual void reset();
- virtual void close();
- virtual int getChar();
- virtual int lookChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
-
-private:
-
- void readSegments();
- GBool readSymbolDictSeg(Guint segNum, Guint length,
- Guint *refSegs, Guint nRefSegs);
- void readTextRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length,
- Guint *refSegs, Guint nRefSegs);
- JBIG2Bitmap *readTextRegion(GBool huff, GBool refine,
- int w, int h,
- Guint numInstances,
- Guint logStrips,
- int numSyms,
- JBIG2HuffmanTable *symCodeTab,
- Guint symCodeLen,
- JBIG2Bitmap **syms,
- Guint defPixel, Guint combOp,
- Guint transposed, Guint refCorner,
- int sOffset,
- JBIG2HuffmanTable *huffFSTable,
- JBIG2HuffmanTable *huffDSTable,
- JBIG2HuffmanTable *huffDTTable,
- JBIG2HuffmanTable *huffRDWTable,
- JBIG2HuffmanTable *huffRDHTable,
- JBIG2HuffmanTable *huffRDXTable,
- JBIG2HuffmanTable *huffRDYTable,
- JBIG2HuffmanTable *huffRSizeTable,
- Guint templ,
- int *atx, int *aty);
- void readPatternDictSeg(Guint segNum, Guint length);
- void readHalftoneRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length,
- Guint *refSegs, Guint nRefSegs);
- void readGenericRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length);
- JBIG2Bitmap *readGenericBitmap(GBool mmr, int w, int h,
- int templ, GBool tpgdOn,
- GBool useSkip, JBIG2Bitmap *skip,
- int *atx, int *aty,
- int mmrDataLength);
- void readGenericRefinementRegionSeg(Guint segNum, GBool imm,
- GBool lossless, Guint length,
- Guint *refSegs,
- Guint nRefSegs);
- JBIG2Bitmap *readGenericRefinementRegion(int w, int h,
- int templ, GBool tpgrOn,
- JBIG2Bitmap *refBitmap,
- int refDX, int refDY,
- int *atx, int *aty);
- void readPageInfoSeg(Guint length);
- void readEndOfStripeSeg(Guint length);
- void readProfilesSeg(Guint length);
- void readCodeTableSeg(Guint segNum, Guint length);
- void readExtensionSeg(Guint length);
- JBIG2Segment *findSegment(Guint segNum);
- void discardSegment(Guint segNum);
- void resetGenericStats(Guint templ,
- JArithmeticDecoderStats *prevStats);
- void resetRefinementStats(Guint templ,
- JArithmeticDecoderStats *prevStats);
- void resetIntStats(int symCodeLen);
- GBool readUByte(Guint *x);
- GBool readByte(int *x);
- GBool readUWord(Guint *x);
- GBool readULong(Guint *x);
- GBool readLong(int *x);
-
- Object globalsStream;
- Guint pageW, pageH, curPageH;
- Guint pageDefPixel;
- JBIG2Bitmap *pageBitmap;
- Guint defCombOp;
- GList *segments; // [JBIG2Segment]
- GList *globalSegments; // [JBIG2Segment]
- Stream *curStr;
- Guchar *dataPtr;
- Guchar *dataEnd;
-
- JArithmeticDecoder *arithDecoder;
- JArithmeticDecoderStats *genericRegionStats;
- JArithmeticDecoderStats *refinementRegionStats;
- JArithmeticDecoderStats *iadhStats;
- JArithmeticDecoderStats *iadwStats;
- JArithmeticDecoderStats *iaexStats;
- JArithmeticDecoderStats *iaaiStats;
- JArithmeticDecoderStats *iadtStats;
- JArithmeticDecoderStats *iaitStats;
- JArithmeticDecoderStats *iafsStats;
- JArithmeticDecoderStats *iadsStats;
- JArithmeticDecoderStats *iardxStats;
- JArithmeticDecoderStats *iardyStats;
- JArithmeticDecoderStats *iardwStats;
- JArithmeticDecoderStats *iardhStats;
- JArithmeticDecoderStats *iariStats;
- JArithmeticDecoderStats *iaidStats;
- JBIG2HuffmanDecoder *huffDecoder;
- JBIG2MMRDecoder *mmrDecoder;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/JPXStream.cc b/Build/source/libs/xpdf/xpdf/JPXStream.cc
deleted file mode 100644
index 7107854912d..00000000000
--- a/Build/source/libs/xpdf/xpdf/JPXStream.cc
+++ /dev/null
@@ -1,3144 +0,0 @@
-//========================================================================
-//
-// JPXStream.cc
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <limits.h>
-#include "gmem.h"
-#include "Error.h"
-#include "JArithmeticDecoder.h"
-#include "JPXStream.h"
-
-//~ to do:
-// - precincts
-// - ROI
-// - progression order changes
-// - packed packet headers
-// - support for palettes, channel maps, etc.
-// - make sure all needed JP2/JPX subboxes are parsed (readBoxes)
-// - can we assume that QCC segments must come after the QCD segment?
-// - skip EPH markers (readTilePartData)
-// - handle tilePartToEOC in readTilePartData
-// - deal with multiple codeword segments (readTilePartData,
-// readCodeBlockData)
-// - progression orders 2, 3, and 4
-// - in coefficient decoding (readCodeBlockData):
-// - termination pattern: terminate after every coding pass
-// - error resilience segmentation symbol
-// - selective arithmetic coding bypass
-// - vertically causal context formation
-// - coeffs longer than 31 bits (should just ignore the extra bits?)
-// - handle boxes larger than 2^32 bytes
-// - the fixed-point arithmetic won't handle 16-bit pixels
-
-//------------------------------------------------------------------------
-
-// number of contexts for the arithmetic decoder
-#define jpxNContexts 19
-
-#define jpxContextSigProp 0 // 0 - 8: significance prop and cleanup
-#define jpxContextSign 9 // 9 - 13: sign
-#define jpxContextMagRef 14 // 14 -16: magnitude refinement
-#define jpxContextRunLength 17 // cleanup: run length
-#define jpxContextUniform 18 // cleanup: first signif coeff
-
-//------------------------------------------------------------------------
-
-#define jpxPassSigProp 0
-#define jpxPassMagRef 1
-#define jpxPassCleanup 2
-
-//------------------------------------------------------------------------
-
-// arithmetic decoder context for the significance propagation and
-// cleanup passes:
-// [horiz][vert][diag][subband]
-// where subband = 0 for HL
-// = 1 for LH and LL
-// = 2 for HH
-static Guint sigPropContext[3][3][5][3] = {
- {{{ 0, 0, 0 }, // horiz=0, vert=0, diag=0
- { 1, 1, 3 }, // horiz=0, vert=0, diag=1
- { 2, 2, 6 }, // horiz=0, vert=0, diag=2
- { 2, 2, 8 }, // horiz=0, vert=0, diag=3
- { 2, 2, 8 }}, // horiz=0, vert=0, diag=4
- {{ 5, 3, 1 }, // horiz=0, vert=1, diag=0
- { 6, 3, 4 }, // horiz=0, vert=1, diag=1
- { 6, 3, 7 }, // horiz=0, vert=1, diag=2
- { 6, 3, 8 }, // horiz=0, vert=1, diag=3
- { 6, 3, 8 }}, // horiz=0, vert=1, diag=4
- {{ 8, 4, 2 }, // horiz=0, vert=2, diag=0
- { 8, 4, 5 }, // horiz=0, vert=2, diag=1
- { 8, 4, 7 }, // horiz=0, vert=2, diag=2
- { 8, 4, 8 }, // horiz=0, vert=2, diag=3
- { 8, 4, 8 }}}, // horiz=0, vert=2, diag=4
- {{{ 3, 5, 1 }, // horiz=1, vert=0, diag=0
- { 3, 6, 4 }, // horiz=1, vert=0, diag=1
- { 3, 6, 7 }, // horiz=1, vert=0, diag=2
- { 3, 6, 8 }, // horiz=1, vert=0, diag=3
- { 3, 6, 8 }}, // horiz=1, vert=0, diag=4
- {{ 7, 7, 2 }, // horiz=1, vert=1, diag=0
- { 7, 7, 5 }, // horiz=1, vert=1, diag=1
- { 7, 7, 7 }, // horiz=1, vert=1, diag=2
- { 7, 7, 8 }, // horiz=1, vert=1, diag=3
- { 7, 7, 8 }}, // horiz=1, vert=1, diag=4
- {{ 8, 7, 2 }, // horiz=1, vert=2, diag=0
- { 8, 7, 5 }, // horiz=1, vert=2, diag=1
- { 8, 7, 7 }, // horiz=1, vert=2, diag=2
- { 8, 7, 8 }, // horiz=1, vert=2, diag=3
- { 8, 7, 8 }}}, // horiz=1, vert=2, diag=4
- {{{ 4, 8, 2 }, // horiz=2, vert=0, diag=0
- { 4, 8, 5 }, // horiz=2, vert=0, diag=1
- { 4, 8, 7 }, // horiz=2, vert=0, diag=2
- { 4, 8, 8 }, // horiz=2, vert=0, diag=3
- { 4, 8, 8 }}, // horiz=2, vert=0, diag=4
- {{ 7, 8, 2 }, // horiz=2, vert=1, diag=0
- { 7, 8, 5 }, // horiz=2, vert=1, diag=1
- { 7, 8, 7 }, // horiz=2, vert=1, diag=2
- { 7, 8, 8 }, // horiz=2, vert=1, diag=3
- { 7, 8, 8 }}, // horiz=2, vert=1, diag=4
- {{ 8, 8, 2 }, // horiz=2, vert=2, diag=0
- { 8, 8, 5 }, // horiz=2, vert=2, diag=1
- { 8, 8, 7 }, // horiz=2, vert=2, diag=2
- { 8, 8, 8 }, // horiz=2, vert=2, diag=3
- { 8, 8, 8 }}} // horiz=2, vert=2, diag=4
-};
-
-// arithmetic decoder context and xor bit for the sign bit in the
-// significance propagation pass:
-// [horiz][vert][k]
-// where horiz/vert are offset by 2 (i.e., range is -2 .. 2)
-// and k = 0 for the context
-// = 1 for the xor bit
-static Guint signContext[5][5][2] = {
- {{ 13, 1 }, // horiz=-2, vert=-2
- { 13, 1 }, // horiz=-2, vert=-1
- { 12, 1 }, // horiz=-2, vert= 0
- { 11, 1 }, // horiz=-2, vert=+1
- { 11, 1 }}, // horiz=-2, vert=+2
- {{ 13, 1 }, // horiz=-1, vert=-2
- { 13, 1 }, // horiz=-1, vert=-1
- { 12, 1 }, // horiz=-1, vert= 0
- { 11, 1 }, // horiz=-1, vert=+1
- { 11, 1 }}, // horiz=-1, vert=+2
- {{ 10, 1 }, // horiz= 0, vert=-2
- { 10, 1 }, // horiz= 0, vert=-1
- { 9, 0 }, // horiz= 0, vert= 0
- { 10, 0 }, // horiz= 0, vert=+1
- { 10, 0 }}, // horiz= 0, vert=+2
- {{ 11, 0 }, // horiz=+1, vert=-2
- { 11, 0 }, // horiz=+1, vert=-1
- { 12, 0 }, // horiz=+1, vert= 0
- { 13, 0 }, // horiz=+1, vert=+1
- { 13, 0 }}, // horiz=+1, vert=+2
- {{ 11, 0 }, // horiz=+2, vert=-2
- { 11, 0 }, // horiz=+2, vert=-1
- { 12, 0 }, // horiz=+2, vert= 0
- { 13, 0 }, // horiz=+2, vert=+1
- { 13, 0 }}, // horiz=+2, vert=+2
-};
-
-//------------------------------------------------------------------------
-
-// constants used in the IDWT
-#define idwtAlpha -1.586134342059924
-#define idwtBeta -0.052980118572961
-#define idwtGamma 0.882911075530934
-#define idwtDelta 0.443506852043971
-#define idwtKappa 1.230174104914001
-#define idwtIKappa (1.0 / idwtKappa)
-
-// number of bits to the right of the decimal point for the fixed
-// point arithmetic used in the IDWT
-#define fracBits 16
-
-//------------------------------------------------------------------------
-
-// floor(x / y)
-#define jpxFloorDiv(x, y) ((x) / (y))
-
-// floor(x / 2^y)
-#define jpxFloorDivPow2(x, y) ((x) >> (y))
-
-// ceil(x / y)
-#define jpxCeilDiv(x, y) (((x) + (y) - 1) / (y))
-
-// ceil(x / 2^y)
-#define jpxCeilDivPow2(x, y) (((x) + (1 << (y)) - 1) >> (y))
-
-//------------------------------------------------------------------------
-
-#if 1 //----- disable coverage tracking
-
-#define cover(idx)
-
-#else //----- enable coverage tracking
-
-class JPXCover {
-public:
-
- JPXCover(int sizeA);
- ~JPXCover();
- void incr(int idx);
-
-private:
-
- int size, used;
- int *data;
-};
-
-JPXCover::JPXCover(int sizeA) {
- size = sizeA;
- used = -1;
- data = (int *)gmallocn(size, sizeof(int));
- memset(data, 0, size * sizeof(int));
-}
-
-JPXCover::~JPXCover() {
- int i;
-
- printf("JPX coverage:\n");
- for (i = 0; i <= used; ++i) {
- printf(" %4d: %8d\n", i, data[i]);
- }
- gfree(data);
-}
-
-void JPXCover::incr(int idx) {
- if (idx < size) {
- ++data[idx];
- if (idx > used) {
- used = idx;
- }
- }
-}
-
-JPXCover jpxCover(150);
-
-#define cover(idx) jpxCover.incr(idx)
-
-#endif //----- coverage tracking
-
-//------------------------------------------------------------------------
-
-JPXStream::JPXStream(Stream *strA):
- FilterStream(strA)
-{
- nComps = 0;
- bpc = NULL;
- width = height = 0;
- haveCS = gFalse;
- havePalette = gFalse;
- haveCompMap = gFalse;
- haveChannelDefn = gFalse;
-
- img.tiles = NULL;
- bitBuf = 0;
- bitBufLen = 0;
- bitBufSkip = gFalse;
- byteCount = 0;
-}
-
-JPXStream::~JPXStream() {
- close();
- delete str;
-}
-
-void JPXStream::reset() {
- str->reset();
- if (readBoxes()) {
- curY = img.yOffset;
- } else {
- // readBoxes reported an error, so we go immediately to EOF
- curY = img.ySize;
- }
- curX = img.xOffset;
- curComp = 0;
- readBufLen = 0;
-}
-
-void JPXStream::close() {
- JPXTile *tile;
- JPXTileComp *tileComp;
- JPXResLevel *resLevel;
- JPXPrecinct *precinct;
- JPXSubband *subband;
- JPXCodeBlock *cb;
- Guint comp, i, k, r, pre, sb;
-
- gfree(bpc);
- bpc = NULL;
- if (havePalette) {
- gfree(palette.bpc);
- gfree(palette.c);
- havePalette = gFalse;
- }
- if (haveCompMap) {
- gfree(compMap.comp);
- gfree(compMap.type);
- gfree(compMap.pComp);
- haveCompMap = gFalse;
- }
- if (haveChannelDefn) {
- gfree(channelDefn.idx);
- gfree(channelDefn.type);
- gfree(channelDefn.assoc);
- haveChannelDefn = gFalse;
- }
-
- if (img.tiles) {
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- tile = &img.tiles[i];
- if (tile->tileComps) {
- for (comp = 0; comp < img.nComps; ++comp) {
- tileComp = &tile->tileComps[comp];
- gfree(tileComp->quantSteps);
- gfree(tileComp->data);
- gfree(tileComp->buf);
- if (tileComp->resLevels) {
- for (r = 0; r <= tileComp->nDecompLevels; ++r) {
- resLevel = &tileComp->resLevels[r];
- if (resLevel->precincts) {
- for (pre = 0; pre < 1; ++pre) {
- precinct = &resLevel->precincts[pre];
- if (precinct->subbands) {
- for (sb = 0; sb < (Guint)(r == 0 ? 1 : 3); ++sb) {
- subband = &precinct->subbands[sb];
- gfree(subband->inclusion);
- gfree(subband->zeroBitPlane);
- if (subband->cbs) {
- for (k = 0; k < subband->nXCBs * subband->nYCBs; ++k) {
- cb = &subband->cbs[k];
- gfree(cb->coeffs);
- if (cb->arithDecoder) {
- delete cb->arithDecoder;
- }
- if (cb->stats) {
- delete cb->stats;
- }
- }
- gfree(subband->cbs);
- }
- }
- gfree(precinct->subbands);
- }
- }
- gfree(img.tiles[i].tileComps[comp].resLevels[r].precincts);
- }
- }
- gfree(img.tiles[i].tileComps[comp].resLevels);
- }
- }
- gfree(img.tiles[i].tileComps);
- }
- }
- gfree(img.tiles);
- img.tiles = NULL;
- }
- FilterStream::close();
-}
-
-int JPXStream::getChar() {
- int c;
-
- if (readBufLen < 8) {
- fillReadBuf();
- }
- if (readBufLen == 8) {
- c = readBuf & 0xff;
- readBufLen = 0;
- } else if (readBufLen > 8) {
- c = (readBuf >> (readBufLen - 8)) & 0xff;
- readBufLen -= 8;
- } else if (readBufLen == 0) {
- c = EOF;
- } else {
- c = (readBuf << (8 - readBufLen)) & 0xff;
- readBufLen = 0;
- }
- return c;
-}
-
-int JPXStream::lookChar() {
- int c;
-
- if (readBufLen < 8) {
- fillReadBuf();
- }
- if (readBufLen == 8) {
- c = readBuf & 0xff;
- } else if (readBufLen > 8) {
- c = (readBuf >> (readBufLen - 8)) & 0xff;
- } else if (readBufLen == 0) {
- c = EOF;
- } else {
- c = (readBuf << (8 - readBufLen)) & 0xff;
- }
- return c;
-}
-
-void JPXStream::fillReadBuf() {
- JPXTileComp *tileComp;
- Guint tileIdx, tx, ty;
- int pix, pixBits;
-
- do {
- if (curY >= img.ySize) {
- return;
- }
- tileIdx = ((curY - img.yTileOffset) / img.yTileSize) * img.nXTiles
- + (curX - img.xTileOffset) / img.xTileSize;
-#if 1 //~ ignore the palette, assume the PDF ColorSpace object is valid
- tileComp = &img.tiles[tileIdx].tileComps[curComp];
-#else
- tileComp = &img.tiles[tileIdx].tileComps[havePalette ? 0 : curComp];
-#endif
- tx = jpxCeilDiv((curX - img.xTileOffset) % img.xTileSize, tileComp->hSep);
- ty = jpxCeilDiv((curY - img.yTileOffset) % img.yTileSize, tileComp->vSep);
- pix = (int)tileComp->data[ty * (tileComp->x1 - tileComp->x0) + tx];
- pixBits = tileComp->prec;
-#if 1 //~ ignore the palette, assume the PDF ColorSpace object is valid
- if (++curComp == img.nComps) {
-#else
- if (havePalette) {
- if (pix >= 0 && pix < palette.nEntries) {
- pix = palette.c[pix * palette.nComps + curComp];
- } else {
- pix =
- pixBits = palette.bpc[curComp];
- }
- if (++curComp == (Guint)(havePalette ? palette.nComps : img.nComps)) {
-#endif
- curComp = 0;
- if (++curX == img.xSize) {
- curX = img.xOffset;
- ++curY;
- }
- }
- if (pixBits == 8) {
- readBuf = (readBuf << 8) | (pix & 0xff);
- } else {
- readBuf = (readBuf << pixBits) | (pix & ((1 << pixBits) - 1));
- }
- readBufLen += pixBits;
- } while (readBufLen < 8);
-}
-
-GString *JPXStream::getPSFilter(int psLevel, char *indent) {
- return NULL;
-}
-
-GBool JPXStream::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-void JPXStream::getImageParams(int *bitsPerComponent,
- StreamColorSpaceMode *csMode) {
- Guint boxType, boxLen, dataLen, csEnum;
- Guint bpc1, dummy, i;
- int csMeth, csPrec, csPrec1, dummy2;
- StreamColorSpaceMode csMode1;
- GBool haveBPC, haveCSMode;
-
- csPrec = 0; // make gcc happy
- haveBPC = haveCSMode = gFalse;
- str->reset();
- if (str->lookChar() == 0xff) {
- getImageParams2(bitsPerComponent, csMode);
- } else {
- while (readBoxHdr(&boxType, &boxLen, &dataLen)) {
- if (boxType == 0x6a703268) { // JP2 header
- cover(0);
- // skip the superbox
- } else if (boxType == 0x69686472) { // image header
- cover(1);
- if (readULong(&dummy) &&
- readULong(&dummy) &&
- readUWord(&dummy) &&
- readUByte(&bpc1) &&
- readUByte(&dummy) &&
- readUByte(&dummy) &&
- readUByte(&dummy)) {
- *bitsPerComponent = bpc1 + 1;
- haveBPC = gTrue;
- }
- } else if (boxType == 0x636F6C72) { // color specification
- cover(2);
- if (readByte(&csMeth) &&
- readByte(&csPrec1) &&
- readByte(&dummy2)) {
- if (csMeth == 1) {
- if (readULong(&csEnum)) {
- csMode1 = streamCSNone;
- if (csEnum == jpxCSBiLevel ||
- csEnum == jpxCSGrayscale) {
- csMode1 = streamCSDeviceGray;
- } else if (csEnum == jpxCSCMYK) {
- csMode1 = streamCSDeviceCMYK;
- } else if (csEnum == jpxCSsRGB ||
- csEnum == jpxCSCISesRGB ||
- csEnum == jpxCSROMMRGB) {
- csMode1 = streamCSDeviceRGB;
- }
- if (csMode1 != streamCSNone &&
- (!haveCSMode || csPrec1 > csPrec)) {
- *csMode = csMode1;
- csPrec = csPrec1;
- haveCSMode = gTrue;
- }
- for (i = 0; i < dataLen - 7; ++i) {
- str->getChar();
- }
- }
- } else {
- for (i = 0; i < dataLen - 3; ++i) {
- str->getChar();
- }
- }
- }
- } else if (boxType == 0x6A703263) { // codestream
- cover(3);
- if (!(haveBPC && haveCSMode)) {
- getImageParams2(bitsPerComponent, csMode);
- }
- break;
- } else {
- cover(4);
- for (i = 0; i < dataLen; ++i) {
- str->getChar();
- }
- }
- }
- }
- str->close();
-}
-
-// Get image parameters from the codestream.
-void JPXStream::getImageParams2(int *bitsPerComponent,
- StreamColorSpaceMode *csMode) {
- int segType;
- Guint segLen, nComps1, bpc1, dummy, i;
-
- while (readMarkerHdr(&segType, &segLen)) {
- if (segType == 0x51) { // SIZ - image and tile size
- cover(5);
- if (readUWord(&dummy) &&
- readULong(&dummy) &&
- readULong(&dummy) &&
- readULong(&dummy) &&
- readULong(&dummy) &&
- readULong(&dummy) &&
- readULong(&dummy) &&
- readULong(&dummy) &&
- readULong(&dummy) &&
- readUWord(&nComps1) &&
- readUByte(&bpc1)) {
- *bitsPerComponent = (bpc1 & 0x7f) + 1;
- // if there's no color space info, take a guess
- if (nComps1 == 1) {
- *csMode = streamCSDeviceGray;
- } else if (nComps1 == 3) {
- *csMode = streamCSDeviceRGB;
- } else if (nComps1 == 4) {
- *csMode = streamCSDeviceCMYK;
- }
- }
- break;
- } else {
- cover(6);
- if (segLen > 2) {
- for (i = 0; i < segLen - 2; ++i) {
- str->getChar();
- }
- }
- }
- }
-}
-
-GBool JPXStream::readBoxes() {
- Guint boxType, boxLen, dataLen;
- Guint bpc1, compression, unknownColorspace, ipr;
- Guint i, j;
-
- haveImgHdr = gFalse;
-
- // check for a naked JPEG 2000 codestream (without the JP2/JPX
- // wrapper) -- this appears to be a violation of the PDF spec, but
- // Acrobat allows it
- if (str->lookChar() == 0xff) {
- cover(7);
- error(getPos(), "Naked JPEG 2000 codestream, missing JP2/JPX wrapper");
- readCodestream(0);
- nComps = img.nComps;
- bpc = (Guint *)gmallocn(nComps, sizeof(Guint));
- for (i = 0; i < nComps; ++i) {
- bpc[i] = img.tiles[0].tileComps[i].prec;
- }
- width = img.xSize - img.xOffset;
- height = img.ySize - img.yOffset;
- return gTrue;
- }
-
- while (readBoxHdr(&boxType, &boxLen, &dataLen)) {
- switch (boxType) {
- case 0x6a703268: // JP2 header
- // this is a grouping box ('superbox') which has no real
- // contents and doesn't appear to be used consistently, i.e.,
- // some things which should be subboxes of the JP2 header box
- // show up outside of it - so we simply ignore the JP2 header
- // box
- cover(8);
- break;
- case 0x69686472: // image header
- cover(9);
- if (!readULong(&height) ||
- !readULong(&width) ||
- !readUWord(&nComps) ||
- !readUByte(&bpc1) ||
- !readUByte(&compression) ||
- !readUByte(&unknownColorspace) ||
- !readUByte(&ipr)) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- if (compression != 7) {
- error(getPos(), "Unknown compression type in JPX stream");
- return gFalse;
- }
- bpc = (Guint *)gmallocn(nComps, sizeof(Guint));
- for (i = 0; i < nComps; ++i) {
- bpc[i] = bpc1;
- }
- haveImgHdr = gTrue;
- break;
- case 0x62706363: // bits per component
- cover(10);
- if (!haveImgHdr) {
- error(getPos(), "Found bits per component box before image header box in JPX stream");
- return gFalse;
- }
- if (dataLen != nComps) {
- error(getPos(), "Invalid bits per component box in JPX stream");
- return gFalse;
- }
- for (i = 0; i < nComps; ++i) {
- if (!readUByte(&bpc[i])) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- }
- break;
- case 0x636F6C72: // color specification
- cover(11);
- if (!readColorSpecBox(dataLen)) {
- return gFalse;
- }
- break;
- case 0x70636c72: // palette
- cover(12);
- if (!readUWord(&palette.nEntries) ||
- !readUByte(&palette.nComps)) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- palette.bpc = (Guint *)gmallocn(palette.nComps, sizeof(Guint));
- palette.c =
- (int *)gmallocn(palette.nEntries * palette.nComps, sizeof(int));
- for (i = 0; i < palette.nComps; ++i) {
- if (!readUByte(&palette.bpc[i])) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- ++palette.bpc[i];
- }
- for (i = 0; i < palette.nEntries; ++i) {
- for (j = 0; j < palette.nComps; ++j) {
- if (!readNBytes(((palette.bpc[j] & 0x7f) + 7) >> 3,
- (palette.bpc[j] & 0x80) ? gTrue : gFalse,
- &palette.c[i * palette.nComps + j])) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- }
- }
- havePalette = gTrue;
- break;
- case 0x636d6170: // component mapping
- cover(13);
- compMap.nChannels = dataLen / 4;
- compMap.comp = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint));
- compMap.type = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint));
- compMap.pComp = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint));
- for (i = 0; i < compMap.nChannels; ++i) {
- if (!readUWord(&compMap.comp[i]) ||
- !readUByte(&compMap.type[i]) ||
- !readUByte(&compMap.pComp[i])) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- }
- haveCompMap = gTrue;
- break;
- case 0x63646566: // channel definition
- cover(14);
- if (!readUWord(&channelDefn.nChannels)) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- channelDefn.idx =
- (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint));
- channelDefn.type =
- (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint));
- channelDefn.assoc =
- (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint));
- for (i = 0; i < channelDefn.nChannels; ++i) {
- if (!readUWord(&channelDefn.idx[i]) ||
- !readUWord(&channelDefn.type[i]) ||
- !readUWord(&channelDefn.assoc[i])) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- }
- haveChannelDefn = gTrue;
- break;
- case 0x6A703263: // contiguous codestream
- cover(15);
- if (!bpc) {
- error(getPos(), "JPX stream is missing the image header box");
- }
- if (!haveCS) {
- error(getPos(), "JPX stream has no supported color spec");
- }
- if (!readCodestream(dataLen)) {
- return gFalse;
- }
- break;
- default:
- cover(16);
- for (i = 0; i < dataLen; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Unexpected EOF in JPX stream");
- return gFalse;
- }
- }
- break;
- }
- }
- return gTrue;
-}
-
-GBool JPXStream::readColorSpecBox(Guint dataLen) {
- JPXColorSpec newCS;
- Guint csApprox, csEnum;
- Guint i;
- GBool ok;
-
- ok = gFalse;
- if (!readUByte(&newCS.meth) ||
- !readByte(&newCS.prec) ||
- !readUByte(&csApprox)) {
- goto err;
- }
- switch (newCS.meth) {
- case 1: // enumerated colorspace
- cover(17);
- if (!readULong(&csEnum)) {
- goto err;
- }
- newCS.enumerated.type = (JPXColorSpaceType)csEnum;
- switch (newCS.enumerated.type) {
- case jpxCSBiLevel:
- ok = gTrue;
- break;
- case jpxCSYCbCr1:
- ok = gTrue;
- break;
- case jpxCSYCbCr2:
- ok = gTrue;
- break;
- case jpxCSYCBCr3:
- ok = gTrue;
- break;
- case jpxCSPhotoYCC:
- ok = gTrue;
- break;
- case jpxCSCMY:
- ok = gTrue;
- break;
- case jpxCSCMYK:
- ok = gTrue;
- break;
- case jpxCSYCCK:
- ok = gTrue;
- break;
- case jpxCSCIELab:
- if (dataLen == 7 + 7*4) {
- if (!readULong(&newCS.enumerated.cieLab.rl) ||
- !readULong(&newCS.enumerated.cieLab.ol) ||
- !readULong(&newCS.enumerated.cieLab.ra) ||
- !readULong(&newCS.enumerated.cieLab.oa) ||
- !readULong(&newCS.enumerated.cieLab.rb) ||
- !readULong(&newCS.enumerated.cieLab.ob) ||
- !readULong(&newCS.enumerated.cieLab.il)) {
- goto err;
- }
- } else if (dataLen == 7) {
- //~ this assumes the 8-bit case
- cover(92);
- newCS.enumerated.cieLab.rl = 100;
- newCS.enumerated.cieLab.ol = 0;
- newCS.enumerated.cieLab.ra = 255;
- newCS.enumerated.cieLab.oa = 128;
- newCS.enumerated.cieLab.rb = 255;
- newCS.enumerated.cieLab.ob = 96;
- newCS.enumerated.cieLab.il = 0x00443530;
- } else {
- goto err;
- }
- ok = gTrue;
- break;
- case jpxCSsRGB:
- ok = gTrue;
- break;
- case jpxCSGrayscale:
- ok = gTrue;
- break;
- case jpxCSBiLevel2:
- ok = gTrue;
- break;
- case jpxCSCIEJab:
- // not allowed in PDF
- goto err;
- case jpxCSCISesRGB:
- ok = gTrue;
- break;
- case jpxCSROMMRGB:
- ok = gTrue;
- break;
- case jpxCSsRGBYCbCr:
- ok = gTrue;
- break;
- case jpxCSYPbPr1125:
- ok = gTrue;
- break;
- case jpxCSYPbPr1250:
- ok = gTrue;
- break;
- default:
- goto err;
- }
- break;
- case 2: // restricted ICC profile
- case 3: // any ICC profile (JPX)
- case 4: // vendor color (JPX)
- cover(18);
- for (i = 0; i < dataLen - 3; ++i) {
- if (str->getChar() == EOF) {
- goto err;
- }
- }
- break;
- }
-
- if (ok && (!haveCS || newCS.prec > cs.prec)) {
- cs = newCS;
- haveCS = gTrue;
- }
-
- return gTrue;
-
- err:
- error(getPos(), "Error in JPX color spec");
- return gFalse;
-}
-
-GBool JPXStream::readCodestream(Guint len) {
- JPXTile *tile;
- JPXTileComp *tileComp;
- int segType;
- GBool haveSIZ, haveCOD, haveQCD, haveSOT;
- Guint precinctSize, style;
- Guint segLen, capabilities, comp, i, j, r;
-
- //----- main header
- haveSIZ = haveCOD = haveQCD = haveSOT = gFalse;
- do {
- if (!readMarkerHdr(&segType, &segLen)) {
- error(getPos(), "Error in JPX codestream");
- return gFalse;
- }
- switch (segType) {
- case 0x4f: // SOC - start of codestream
- // marker only
- cover(19);
- break;
- case 0x51: // SIZ - image and tile size
- cover(20);
- if (!readUWord(&capabilities) ||
- !readULong(&img.xSize) ||
- !readULong(&img.ySize) ||
- !readULong(&img.xOffset) ||
- !readULong(&img.yOffset) ||
- !readULong(&img.xTileSize) ||
- !readULong(&img.yTileSize) ||
- !readULong(&img.xTileOffset) ||
- !readULong(&img.yTileOffset) ||
- !readUWord(&img.nComps)) {
- error(getPos(), "Error in JPX SIZ marker segment");
- return gFalse;
- }
- if (haveImgHdr && img.nComps != nComps) {
- error(getPos(), "Different number of components in JPX SIZ marker segment");
- return gFalse;
- }
- img.nXTiles = (img.xSize - img.xTileOffset + img.xTileSize - 1)
- / img.xTileSize;
- img.nYTiles = (img.ySize - img.yTileOffset + img.yTileSize - 1)
- / img.yTileSize;
- // check for overflow before allocating memory
- if (img.nXTiles <= 0 || img.nYTiles <= 0 ||
- img.nXTiles >= INT_MAX / img.nYTiles) {
- error(getPos(), "Bad tile count in JPX SIZ marker segment");
- return gFalse;
- }
- img.tiles = (JPXTile *)gmallocn(img.nXTiles * img.nYTiles,
- sizeof(JPXTile));
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- img.tiles[i].tileComps = (JPXTileComp *)gmallocn(img.nComps,
- sizeof(JPXTileComp));
- for (comp = 0; comp < img.nComps; ++comp) {
- img.tiles[i].tileComps[comp].quantSteps = NULL;
- img.tiles[i].tileComps[comp].data = NULL;
- img.tiles[i].tileComps[comp].buf = NULL;
- img.tiles[i].tileComps[comp].resLevels = NULL;
- }
- }
- for (comp = 0; comp < img.nComps; ++comp) {
- if (!readUByte(&img.tiles[0].tileComps[comp].prec) ||
- !readUByte(&img.tiles[0].tileComps[comp].hSep) ||
- !readUByte(&img.tiles[0].tileComps[comp].vSep)) {
- error(getPos(), "Error in JPX SIZ marker segment");
- return gFalse;
- }
- img.tiles[0].tileComps[comp].sgned =
- (img.tiles[0].tileComps[comp].prec & 0x80) ? gTrue : gFalse;
- img.tiles[0].tileComps[comp].prec =
- (img.tiles[0].tileComps[comp].prec & 0x7f) + 1;
- for (i = 1; i < img.nXTiles * img.nYTiles; ++i) {
- img.tiles[i].tileComps[comp] = img.tiles[0].tileComps[comp];
- }
- }
- haveSIZ = gTrue;
- break;
- case 0x52: // COD - coding style default
- cover(21);
- if (!readUByte(&img.tiles[0].tileComps[0].style) ||
- !readUByte(&img.tiles[0].progOrder) ||
- !readUWord(&img.tiles[0].nLayers) ||
- !readUByte(&img.tiles[0].multiComp) ||
- !readUByte(&img.tiles[0].tileComps[0].nDecompLevels) ||
- !readUByte(&img.tiles[0].tileComps[0].codeBlockW) ||
- !readUByte(&img.tiles[0].tileComps[0].codeBlockH) ||
- !readUByte(&img.tiles[0].tileComps[0].codeBlockStyle) ||
- !readUByte(&img.tiles[0].tileComps[0].transform)) {
- error(getPos(), "Error in JPX COD marker segment");
- return gFalse;
- }
- img.tiles[0].tileComps[0].codeBlockW += 2;
- img.tiles[0].tileComps[0].codeBlockH += 2;
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- if (i != 0) {
- img.tiles[i].progOrder = img.tiles[0].progOrder;
- img.tiles[i].nLayers = img.tiles[0].nLayers;
- img.tiles[i].multiComp = img.tiles[0].multiComp;
- }
- for (comp = 0; comp < img.nComps; ++comp) {
- if (!(i == 0 && comp == 0)) {
- img.tiles[i].tileComps[comp].style =
- img.tiles[0].tileComps[0].style;
- img.tiles[i].tileComps[comp].nDecompLevels =
- img.tiles[0].tileComps[0].nDecompLevels;
- img.tiles[i].tileComps[comp].codeBlockW =
- img.tiles[0].tileComps[0].codeBlockW;
- img.tiles[i].tileComps[comp].codeBlockH =
- img.tiles[0].tileComps[0].codeBlockH;
- img.tiles[i].tileComps[comp].codeBlockStyle =
- img.tiles[0].tileComps[0].codeBlockStyle;
- img.tiles[i].tileComps[comp].transform =
- img.tiles[0].tileComps[0].transform;
- }
- img.tiles[i].tileComps[comp].resLevels =
- (JPXResLevel *)gmallocn(
- (img.tiles[i].tileComps[comp].nDecompLevels + 1),
- sizeof(JPXResLevel));
- for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {
- img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL;
- }
- }
- }
- for (r = 0; r <= img.tiles[0].tileComps[0].nDecompLevels; ++r) {
- if (img.tiles[0].tileComps[0].style & 0x01) {
- cover(91);
- if (!readUByte(&precinctSize)) {
- error(getPos(), "Error in JPX COD marker segment");
- return gFalse;
- }
- img.tiles[0].tileComps[0].resLevels[r].precinctWidth =
- precinctSize & 0x0f;
- img.tiles[0].tileComps[0].resLevels[r].precinctHeight =
- (precinctSize >> 4) & 0x0f;
- } else {
- img.tiles[0].tileComps[0].resLevels[r].precinctWidth = 15;
- img.tiles[0].tileComps[0].resLevels[r].precinctHeight = 15;
- }
- }
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- for (comp = 0; comp < img.nComps; ++comp) {
- if (!(i == 0 && comp == 0)) {
- for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {
- img.tiles[i].tileComps[comp].resLevels[r].precinctWidth =
- img.tiles[0].tileComps[0].resLevels[r].precinctWidth;
- img.tiles[i].tileComps[comp].resLevels[r].precinctHeight =
- img.tiles[0].tileComps[0].resLevels[r].precinctHeight;
- }
- }
- }
- }
- haveCOD = gTrue;
- break;
- case 0x53: // COC - coding style component
- cover(22);
- if (!haveCOD) {
- error(getPos(), "JPX COC marker segment before COD segment");
- return gFalse;
- }
- if ((img.nComps > 256 && !readUWord(&comp)) ||
- (img.nComps <= 256 && !readUByte(&comp)) ||
- comp >= img.nComps ||
- !readUByte(&style) ||
- !readUByte(&img.tiles[0].tileComps[comp].nDecompLevels) ||
- !readUByte(&img.tiles[0].tileComps[comp].codeBlockW) ||
- !readUByte(&img.tiles[0].tileComps[comp].codeBlockH) ||
- !readUByte(&img.tiles[0].tileComps[comp].codeBlockStyle) ||
- !readUByte(&img.tiles[0].tileComps[comp].transform)) {
- error(getPos(), "Error in JPX COC marker segment");
- return gFalse;
- }
- img.tiles[0].tileComps[comp].style =
- (img.tiles[0].tileComps[comp].style & ~1) | (style & 1);
- img.tiles[0].tileComps[comp].codeBlockW += 2;
- img.tiles[0].tileComps[comp].codeBlockH += 2;
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- if (i != 0) {
- img.tiles[i].tileComps[comp].style =
- img.tiles[0].tileComps[comp].style;
- img.tiles[i].tileComps[comp].nDecompLevels =
- img.tiles[0].tileComps[comp].nDecompLevels;
- img.tiles[i].tileComps[comp].codeBlockW =
- img.tiles[0].tileComps[comp].codeBlockW;
- img.tiles[i].tileComps[comp].codeBlockH =
- img.tiles[0].tileComps[comp].codeBlockH;
- img.tiles[i].tileComps[comp].codeBlockStyle =
- img.tiles[0].tileComps[comp].codeBlockStyle;
- img.tiles[i].tileComps[comp].transform =
- img.tiles[0].tileComps[comp].transform;
- }
- img.tiles[i].tileComps[comp].resLevels =
- (JPXResLevel *)greallocn(
- img.tiles[i].tileComps[comp].resLevels,
- (img.tiles[i].tileComps[comp].nDecompLevels + 1),
- sizeof(JPXResLevel));
- for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {
- img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL;
- }
- }
- for (r = 0; r <= img.tiles[0].tileComps[comp].nDecompLevels; ++r) {
- if (img.tiles[0].tileComps[comp].style & 0x01) {
- if (!readUByte(&precinctSize)) {
- error(getPos(), "Error in JPX COD marker segment");
- return gFalse;
- }
- img.tiles[0].tileComps[comp].resLevels[r].precinctWidth =
- precinctSize & 0x0f;
- img.tiles[0].tileComps[comp].resLevels[r].precinctHeight =
- (precinctSize >> 4) & 0x0f;
- } else {
- img.tiles[0].tileComps[comp].resLevels[r].precinctWidth = 15;
- img.tiles[0].tileComps[comp].resLevels[r].precinctHeight = 15;
- }
- }
- for (i = 1; i < img.nXTiles * img.nYTiles; ++i) {
- for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {
- img.tiles[i].tileComps[comp].resLevels[r].precinctWidth =
- img.tiles[0].tileComps[comp].resLevels[r].precinctWidth;
- img.tiles[i].tileComps[comp].resLevels[r].precinctHeight =
- img.tiles[0].tileComps[comp].resLevels[r].precinctHeight;
- }
- }
- break;
- case 0x5c: // QCD - quantization default
- cover(23);
- if (!readUByte(&img.tiles[0].tileComps[0].quantStyle)) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x00) {
- img.tiles[0].tileComps[0].nQuantSteps = segLen - 3;
- img.tiles[0].tileComps[0].quantSteps =
- (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps,
- img.tiles[0].tileComps[0].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) {
- if (!readUByte(&img.tiles[0].tileComps[0].quantSteps[i])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- }
- } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x01) {
- img.tiles[0].tileComps[0].nQuantSteps = 1;
- img.tiles[0].tileComps[0].quantSteps =
- (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps,
- img.tiles[0].tileComps[0].nQuantSteps,
- sizeof(Guint));
- if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[0])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x02) {
- img.tiles[0].tileComps[0].nQuantSteps = (segLen - 3) / 2;
- img.tiles[0].tileComps[0].quantSteps =
- (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps,
- img.tiles[0].tileComps[0].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) {
- if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[i])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- }
- } else {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- for (comp = 0; comp < img.nComps; ++comp) {
- if (!(i == 0 && comp == 0)) {
- img.tiles[i].tileComps[comp].quantStyle =
- img.tiles[0].tileComps[0].quantStyle;
- img.tiles[i].tileComps[comp].nQuantSteps =
- img.tiles[0].tileComps[0].nQuantSteps;
- img.tiles[i].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps,
- img.tiles[0].tileComps[0].nQuantSteps,
- sizeof(Guint));
- for (j = 0; j < img.tiles[0].tileComps[0].nQuantSteps; ++j) {
- img.tiles[i].tileComps[comp].quantSteps[j] =
- img.tiles[0].tileComps[0].quantSteps[j];
- }
- }
- }
- }
- haveQCD = gTrue;
- break;
- case 0x5d: // QCC - quantization component
- cover(24);
- if (!haveQCD) {
- error(getPos(), "JPX QCC marker segment before QCD segment");
- return gFalse;
- }
- if ((img.nComps > 256 && !readUWord(&comp)) ||
- (img.nComps <= 256 && !readUByte(&comp)) ||
- comp >= img.nComps ||
- !readUByte(&img.tiles[0].tileComps[comp].quantStyle)) {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x00) {
- img.tiles[0].tileComps[comp].nQuantSteps =
- segLen - (img.nComps > 256 ? 5 : 4);
- img.tiles[0].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps,
- img.tiles[0].tileComps[comp].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) {
- if (!readUByte(&img.tiles[0].tileComps[comp].quantSteps[i])) {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- }
- } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x01) {
- img.tiles[0].tileComps[comp].nQuantSteps = 1;
- img.tiles[0].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps,
- img.tiles[0].tileComps[comp].nQuantSteps,
- sizeof(Guint));
- if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[0])) {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x02) {
- img.tiles[0].tileComps[comp].nQuantSteps =
- (segLen - (img.nComps > 256 ? 5 : 4)) / 2;
- img.tiles[0].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps,
- img.tiles[0].tileComps[comp].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) {
- if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[i])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- }
- } else {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- for (i = 1; i < img.nXTiles * img.nYTiles; ++i) {
- img.tiles[i].tileComps[comp].quantStyle =
- img.tiles[0].tileComps[comp].quantStyle;
- img.tiles[i].tileComps[comp].nQuantSteps =
- img.tiles[0].tileComps[comp].nQuantSteps;
- img.tiles[i].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps,
- img.tiles[0].tileComps[comp].nQuantSteps,
- sizeof(Guint));
- for (j = 0; j < img.tiles[0].tileComps[comp].nQuantSteps; ++j) {
- img.tiles[i].tileComps[comp].quantSteps[j] =
- img.tiles[0].tileComps[comp].quantSteps[j];
- }
- }
- break;
- case 0x5e: // RGN - region of interest
- cover(25);
-#if 1 //~ ROI is unimplemented
- fprintf(stderr, "RGN\n");
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PPM marker segment");
- return gFalse;
- }
- }
-#else
- if ((img.nComps > 256 && !readUWord(&comp)) ||
- (img.nComps <= 256 && !readUByte(&comp)) ||
- comp >= img.nComps ||
- !readUByte(&compInfo[comp].defROI.style) ||
- !readUByte(&compInfo[comp].defROI.shift)) {
- error(getPos(), "Error in JPX RGN marker segment");
- return gFalse;
- }
-#endif
- break;
- case 0x5f: // POC - progression order change
- cover(26);
-#if 1 //~ progression order changes are unimplemented
- fprintf(stderr, "POC\n");
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PPM marker segment");
- return gFalse;
- }
- }
-#else
- nProgs = (segLen - 2) / (img.nComps > 256 ? 9 : 7);
- progs = (JPXProgOrder *)gmallocn(nProgs, sizeof(JPXProgOrder));
- for (i = 0; i < nProgs; ++i) {
- if (!readUByte(&progs[i].startRes) ||
- !(img.nComps > 256 && readUWord(&progs[i].startComp)) ||
- !(img.nComps <= 256 && readUByte(&progs[i].startComp)) ||
- !readUWord(&progs[i].endLayer) ||
- !readUByte(&progs[i].endRes) ||
- !(img.nComps > 256 && readUWord(&progs[i].endComp)) ||
- !(img.nComps <= 256 && readUByte(&progs[i].endComp)) ||
- !readUByte(&progs[i].progOrder)) {
- error(getPos(), "Error in JPX POC marker segment");
- return gFalse;
- }
- }
-#endif
- break;
- case 0x60: // PPM - packed packet headers, main header
- cover(27);
-#if 1 //~ packed packet headers are unimplemented
- fprintf(stderr, "PPM\n");
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PPM marker segment");
- return gFalse;
- }
- }
-#endif
- break;
- case 0x55: // TLM - tile-part lengths
- // skipped
- cover(28);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX TLM marker segment");
- return gFalse;
- }
- }
- break;
- case 0x57: // PLM - packet length, main header
- // skipped
- cover(29);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PLM marker segment");
- return gFalse;
- }
- }
- break;
- case 0x63: // CRG - component registration
- // skipped
- cover(30);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX CRG marker segment");
- return gFalse;
- }
- }
- break;
- case 0x64: // COM - comment
- // skipped
- cover(31);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX COM marker segment");
- return gFalse;
- }
- }
- break;
- case 0x90: // SOT - start of tile
- cover(32);
- haveSOT = gTrue;
- break;
- default:
- cover(33);
- error(getPos(), "Unknown marker segment %02x in JPX stream", segType);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- break;
- }
- }
- break;
- }
- } while (!haveSOT);
-
- if (!haveSIZ) {
- error(getPos(), "Missing SIZ marker segment in JPX stream");
- return gFalse;
- }
- if (!haveCOD) {
- error(getPos(), "Missing COD marker segment in JPX stream");
- return gFalse;
- }
- if (!haveQCD) {
- error(getPos(), "Missing QCD marker segment in JPX stream");
- return gFalse;
- }
-
- //----- read the tile-parts
- while (1) {
- if (!readTilePart()) {
- return gFalse;
- }
- if (!readMarkerHdr(&segType, &segLen)) {
- error(getPos(), "Error in JPX codestream");
- return gFalse;
- }
- if (segType != 0x90) { // SOT - start of tile
- break;
- }
- }
-
- if (segType != 0xd9) { // EOC - end of codestream
- error(getPos(), "Missing EOC marker in JPX codestream");
- return gFalse;
- }
-
- //----- finish decoding the image
- for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {
- tile = &img.tiles[i];
- for (comp = 0; comp < img.nComps; ++comp) {
- tileComp = &tile->tileComps[comp];
- inverseTransform(tileComp);
- }
- if (!inverseMultiCompAndDC(tile)) {
- return gFalse;
- }
- }
-
- //~ can free memory below tileComps here, and also tileComp.buf
-
- return gTrue;
-}
-
-GBool JPXStream::readTilePart() {
- JPXTile *tile;
- JPXTileComp *tileComp;
- JPXResLevel *resLevel;
- JPXPrecinct *precinct;
- JPXSubband *subband;
- JPXCodeBlock *cb;
- GBool haveSOD;
- Guint tileIdx, tilePartLen, tilePartIdx, nTileParts;
- GBool tilePartToEOC;
- Guint precinctSize, style;
- Guint n, nSBs, nx, ny, sbx0, sby0, comp, segLen;
- Guint i, j, k, cbX, cbY, r, pre, sb, cbi;
- int segType, level;
-
- // process the SOT marker segment
- if (!readUWord(&tileIdx) ||
- !readULong(&tilePartLen) ||
- !readUByte(&tilePartIdx) ||
- !readUByte(&nTileParts)) {
- error(getPos(), "Error in JPX SOT marker segment");
- return gFalse;
- }
-
- if (tileIdx >= img.nXTiles * img.nYTiles) {
- error(getPos(), "Weird tile index in JPX stream");
- return gFalse;
- }
-
- tilePartToEOC = tilePartLen == 0;
- tilePartLen -= 12; // subtract size of SOT segment
-
- haveSOD = gFalse;
- do {
- if (!readMarkerHdr(&segType, &segLen)) {
- error(getPos(), "Error in JPX tile-part codestream");
- return gFalse;
- }
- tilePartLen -= 2 + segLen;
- switch (segType) {
- case 0x52: // COD - coding style default
- cover(34);
- if (!readUByte(&img.tiles[tileIdx].tileComps[0].style) ||
- !readUByte(&img.tiles[tileIdx].progOrder) ||
- !readUWord(&img.tiles[tileIdx].nLayers) ||
- !readUByte(&img.tiles[tileIdx].multiComp) ||
- !readUByte(&img.tiles[tileIdx].tileComps[0].nDecompLevels) ||
- !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockW) ||
- !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockH) ||
- !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockStyle) ||
- !readUByte(&img.tiles[tileIdx].tileComps[0].transform)) {
- error(getPos(), "Error in JPX COD marker segment");
- return gFalse;
- }
- img.tiles[tileIdx].tileComps[0].codeBlockW += 2;
- img.tiles[tileIdx].tileComps[0].codeBlockH += 2;
- for (comp = 0; comp < img.nComps; ++comp) {
- if (comp != 0) {
- img.tiles[tileIdx].tileComps[comp].style =
- img.tiles[tileIdx].tileComps[0].style;
- img.tiles[tileIdx].tileComps[comp].nDecompLevels =
- img.tiles[tileIdx].tileComps[0].nDecompLevels;
- img.tiles[tileIdx].tileComps[comp].codeBlockW =
- img.tiles[tileIdx].tileComps[0].codeBlockW;
- img.tiles[tileIdx].tileComps[comp].codeBlockH =
- img.tiles[tileIdx].tileComps[0].codeBlockH;
- img.tiles[tileIdx].tileComps[comp].codeBlockStyle =
- img.tiles[tileIdx].tileComps[0].codeBlockStyle;
- img.tiles[tileIdx].tileComps[comp].transform =
- img.tiles[tileIdx].tileComps[0].transform;
- }
- img.tiles[tileIdx].tileComps[comp].resLevels =
- (JPXResLevel *)greallocn(
- img.tiles[tileIdx].tileComps[comp].resLevels,
- (img.tiles[tileIdx].tileComps[comp].nDecompLevels + 1),
- sizeof(JPXResLevel));
- for (r = 0;
- r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels;
- ++r) {
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precincts = NULL;
- }
- }
- for (r = 0; r <= img.tiles[tileIdx].tileComps[0].nDecompLevels; ++r) {
- if (img.tiles[tileIdx].tileComps[0].style & 0x01) {
- if (!readUByte(&precinctSize)) {
- error(getPos(), "Error in JPX COD marker segment");
- return gFalse;
- }
- img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth =
- precinctSize & 0x0f;
- img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight =
- (precinctSize >> 4) & 0x0f;
- } else {
- img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth = 15;
- img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight = 15;
- }
- }
- for (comp = 1; comp < img.nComps; ++comp) {
- for (r = 0;
- r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels;
- ++r) {
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth =
- img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth;
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight =
- img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight;
- }
- }
- break;
- case 0x53: // COC - coding style component
- cover(35);
- if ((img.nComps > 256 && !readUWord(&comp)) ||
- (img.nComps <= 256 && !readUByte(&comp)) ||
- comp >= img.nComps ||
- !readUByte(&style) ||
- !readUByte(&img.tiles[tileIdx].tileComps[comp].nDecompLevels) ||
- !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockW) ||
- !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockH) ||
- !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockStyle) ||
- !readUByte(&img.tiles[tileIdx].tileComps[comp].transform)) {
- error(getPos(), "Error in JPX COC marker segment");
- return gFalse;
- }
- img.tiles[tileIdx].tileComps[comp].style =
- (img.tiles[tileIdx].tileComps[comp].style & ~1) | (style & 1);
- img.tiles[tileIdx].tileComps[comp].codeBlockW += 2;
- img.tiles[tileIdx].tileComps[comp].codeBlockH += 2;
- img.tiles[tileIdx].tileComps[comp].resLevels =
- (JPXResLevel *)greallocn(
- img.tiles[tileIdx].tileComps[comp].resLevels,
- (img.tiles[tileIdx].tileComps[comp].nDecompLevels + 1),
- sizeof(JPXResLevel));
- for (r = 0; r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; ++r) {
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precincts = NULL;
- }
- for (r = 0; r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; ++r) {
- if (img.tiles[tileIdx].tileComps[comp].style & 0x01) {
- if (!readUByte(&precinctSize)) {
- error(getPos(), "Error in JPX COD marker segment");
- return gFalse;
- }
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth =
- precinctSize & 0x0f;
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight =
- (precinctSize >> 4) & 0x0f;
- } else {
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth = 15;
- img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight = 15;
- }
- }
- break;
- case 0x5c: // QCD - quantization default
- cover(36);
- if (!readUByte(&img.tiles[tileIdx].tileComps[0].quantStyle)) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x00) {
- img.tiles[tileIdx].tileComps[0].nQuantSteps =
- segLen - 3;
- img.tiles[tileIdx].tileComps[0].quantSteps =
- (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps,
- img.tiles[tileIdx].tileComps[0].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++i) {
- if (!readUByte(&img.tiles[tileIdx].tileComps[0].quantSteps[i])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- }
- } else if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x01) {
- img.tiles[tileIdx].tileComps[0].nQuantSteps = 1;
- img.tiles[tileIdx].tileComps[0].quantSteps =
- (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps,
- img.tiles[tileIdx].tileComps[0].nQuantSteps,
- sizeof(Guint));
- if (!readUWord(&img.tiles[tileIdx].tileComps[0].quantSteps[0])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- } else if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x02) {
- img.tiles[tileIdx].tileComps[0].nQuantSteps = (segLen - 3) / 2;
- img.tiles[tileIdx].tileComps[0].quantSteps =
- (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps,
- img.tiles[tileIdx].tileComps[0].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++i) {
- if (!readUWord(&img.tiles[tileIdx].tileComps[0].quantSteps[i])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- }
- } else {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- for (comp = 1; comp < img.nComps; ++comp) {
- img.tiles[tileIdx].tileComps[comp].quantStyle =
- img.tiles[tileIdx].tileComps[0].quantStyle;
- img.tiles[tileIdx].tileComps[comp].nQuantSteps =
- img.tiles[tileIdx].tileComps[0].nQuantSteps;
- img.tiles[tileIdx].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps,
- img.tiles[tileIdx].tileComps[0].nQuantSteps,
- sizeof(Guint));
- for (j = 0; j < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++j) {
- img.tiles[tileIdx].tileComps[comp].quantSteps[j] =
- img.tiles[tileIdx].tileComps[0].quantSteps[j];
- }
- }
- break;
- case 0x5d: // QCC - quantization component
- cover(37);
- if ((img.nComps > 256 && !readUWord(&comp)) ||
- (img.nComps <= 256 && !readUByte(&comp)) ||
- comp >= img.nComps ||
- !readUByte(&img.tiles[tileIdx].tileComps[comp].quantStyle)) {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) == 0x00) {
- img.tiles[tileIdx].tileComps[comp].nQuantSteps =
- segLen - (img.nComps > 256 ? 5 : 4);
- img.tiles[tileIdx].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps,
- img.tiles[tileIdx].tileComps[comp].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[tileIdx].tileComps[comp].nQuantSteps; ++i) {
- if (!readUByte(&img.tiles[tileIdx].tileComps[comp].quantSteps[i])) {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- }
- } else if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f)
- == 0x01) {
- img.tiles[tileIdx].tileComps[comp].nQuantSteps = 1;
- img.tiles[tileIdx].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps,
- img.tiles[tileIdx].tileComps[comp].nQuantSteps,
- sizeof(Guint));
- if (!readUWord(&img.tiles[tileIdx].tileComps[comp].quantSteps[0])) {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- } else if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f)
- == 0x02) {
- img.tiles[tileIdx].tileComps[comp].nQuantSteps =
- (segLen - (img.nComps > 256 ? 5 : 4)) / 2;
- img.tiles[tileIdx].tileComps[comp].quantSteps =
- (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps,
- img.tiles[tileIdx].tileComps[comp].nQuantSteps,
- sizeof(Guint));
- for (i = 0; i < img.tiles[tileIdx].tileComps[comp].nQuantSteps; ++i) {
- if (!readUWord(&img.tiles[tileIdx].tileComps[comp].quantSteps[i])) {
- error(getPos(), "Error in JPX QCD marker segment");
- return gFalse;
- }
- }
- } else {
- error(getPos(), "Error in JPX QCC marker segment");
- return gFalse;
- }
- break;
- case 0x5e: // RGN - region of interest
- cover(38);
-#if 1 //~ ROI is unimplemented
- fprintf(stderr, "RGN\n");
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PPM marker segment");
- return gFalse;
- }
- }
-#else
- if ((img.nComps > 256 && !readUWord(&comp)) ||
- (img.nComps <= 256 && !readUByte(&comp)) ||
- comp >= img.nComps ||
- !readUByte(&compInfo[comp].roi.style) ||
- !readUByte(&compInfo[comp].roi.shift)) {
- error(getPos(), "Error in JPX RGN marker segment");
- return gFalse;
- }
-#endif
- break;
- case 0x5f: // POC - progression order change
- cover(39);
-#if 1 //~ progression order changes are unimplemented
- fprintf(stderr, "POC\n");
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PPM marker segment");
- return gFalse;
- }
- }
-#else
- nTileProgs = (segLen - 2) / (img.nComps > 256 ? 9 : 7);
- tileProgs = (JPXProgOrder *)gmallocn(nTileProgs, sizeof(JPXProgOrder));
- for (i = 0; i < nTileProgs; ++i) {
- if (!readUByte(&tileProgs[i].startRes) ||
- !(img.nComps > 256 && readUWord(&tileProgs[i].startComp)) ||
- !(img.nComps <= 256 && readUByte(&tileProgs[i].startComp)) ||
- !readUWord(&tileProgs[i].endLayer) ||
- !readUByte(&tileProgs[i].endRes) ||
- !(img.nComps > 256 && readUWord(&tileProgs[i].endComp)) ||
- !(img.nComps <= 256 && readUByte(&tileProgs[i].endComp)) ||
- !readUByte(&tileProgs[i].progOrder)) {
- error(getPos(), "Error in JPX POC marker segment");
- return gFalse;
- }
- }
-#endif
- break;
- case 0x61: // PPT - packed packet headers, tile-part hdr
- cover(40);
-#if 1 //~ packed packet headers are unimplemented
- fprintf(stderr, "PPT\n");
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PPT marker segment");
- return gFalse;
- }
- }
-#endif
- case 0x58: // PLT - packet length, tile-part header
- // skipped
- cover(41);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX PLT marker segment");
- return gFalse;
- }
- }
- break;
- case 0x64: // COM - comment
- // skipped
- cover(42);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- error(getPos(), "Error in JPX COM marker segment");
- return gFalse;
- }
- }
- break;
- case 0x93: // SOD - start of data
- cover(43);
- haveSOD = gTrue;
- break;
- default:
- cover(44);
- error(getPos(), "Unknown marker segment %02x in JPX tile-part stream",
- segType);
- for (i = 0; i < segLen - 2; ++i) {
- if (str->getChar() == EOF) {
- break;
- }
- }
- break;
- }
- } while (!haveSOD);
-
- //----- initialize the tile, precincts, and code-blocks
- if (tilePartIdx == 0) {
- tile = &img.tiles[tileIdx];
- i = tileIdx / img.nXTiles;
- j = tileIdx % img.nXTiles;
- if ((tile->x0 = img.xTileOffset + j * img.xTileSize) < img.xOffset) {
- tile->x0 = img.xOffset;
- }
- if ((tile->y0 = img.yTileOffset + i * img.yTileSize) < img.yOffset) {
- tile->y0 = img.yOffset;
- }
- if ((tile->x1 = img.xTileOffset + (j + 1) * img.xTileSize) > img.xSize) {
- tile->x1 = img.xSize;
- }
- if ((tile->y1 = img.yTileOffset + (i + 1) * img.yTileSize) > img.ySize) {
- tile->y1 = img.ySize;
- }
- tile->comp = 0;
- tile->res = 0;
- tile->precinct = 0;
- tile->layer = 0;
- tile->maxNDecompLevels = 0;
- for (comp = 0; comp < img.nComps; ++comp) {
- tileComp = &tile->tileComps[comp];
- if (tileComp->nDecompLevels > tile->maxNDecompLevels) {
- tile->maxNDecompLevels = tileComp->nDecompLevels;
- }
- tileComp->x0 = jpxCeilDiv(tile->x0, tileComp->hSep);
- tileComp->y0 = jpxCeilDiv(tile->y0, tileComp->hSep);
- tileComp->x1 = jpxCeilDiv(tile->x1, tileComp->hSep);
- tileComp->y1 = jpxCeilDiv(tile->y1, tileComp->hSep);
- tileComp->cbW = 1 << tileComp->codeBlockW;
- tileComp->cbH = 1 << tileComp->codeBlockH;
- tileComp->data = (int *)gmallocn((tileComp->x1 - tileComp->x0) *
- (tileComp->y1 - tileComp->y0),
- sizeof(int));
- if (tileComp->x1 - tileComp->x0 > tileComp->y1 - tileComp->y0) {
- n = tileComp->x1 - tileComp->x0;
- } else {
- n = tileComp->y1 - tileComp->y0;
- }
- tileComp->buf = (int *)gmallocn(n + 8, sizeof(int));
- for (r = 0; r <= tileComp->nDecompLevels; ++r) {
- resLevel = &tileComp->resLevels[r];
- k = r == 0 ? tileComp->nDecompLevels
- : tileComp->nDecompLevels - r + 1;
- resLevel->x0 = jpxCeilDivPow2(tileComp->x0, k);
- resLevel->y0 = jpxCeilDivPow2(tileComp->y0, k);
- resLevel->x1 = jpxCeilDivPow2(tileComp->x1, k);
- resLevel->y1 = jpxCeilDivPow2(tileComp->y1, k);
- if (r == 0) {
- resLevel->bx0[0] = resLevel->x0;
- resLevel->by0[0] = resLevel->y0;
- resLevel->bx1[0] = resLevel->x1;
- resLevel->by1[0] = resLevel->y1;
- } else {
- resLevel->bx0[0] = jpxCeilDivPow2(tileComp->x0 - (1 << (k-1)), k);
- resLevel->by0[0] = resLevel->y0;
- resLevel->bx1[0] = jpxCeilDivPow2(tileComp->x1 - (1 << (k-1)), k);
- resLevel->by1[0] = resLevel->y1;
- resLevel->bx0[1] = resLevel->x0;
- resLevel->by0[1] = jpxCeilDivPow2(tileComp->y0 - (1 << (k-1)), k);
- resLevel->bx1[1] = resLevel->x1;
- resLevel->by1[1] = jpxCeilDivPow2(tileComp->y1 - (1 << (k-1)), k);
- resLevel->bx0[2] = jpxCeilDivPow2(tileComp->x0 - (1 << (k-1)), k);
- resLevel->by0[2] = jpxCeilDivPow2(tileComp->y0 - (1 << (k-1)), k);
- resLevel->bx1[2] = jpxCeilDivPow2(tileComp->x1 - (1 << (k-1)), k);
- resLevel->by1[2] = jpxCeilDivPow2(tileComp->y1 - (1 << (k-1)), k);
- }
- resLevel->precincts = (JPXPrecinct *)gmallocn(1, sizeof(JPXPrecinct));
- for (pre = 0; pre < 1; ++pre) {
- precinct = &resLevel->precincts[pre];
- precinct->x0 = resLevel->x0;
- precinct->y0 = resLevel->y0;
- precinct->x1 = resLevel->x1;
- precinct->y1 = resLevel->y1;
- nSBs = r == 0 ? 1 : 3;
- precinct->subbands =
- (JPXSubband *)gmallocn(nSBs, sizeof(JPXSubband));
- for (sb = 0; sb < nSBs; ++sb) {
- subband = &precinct->subbands[sb];
- subband->x0 = resLevel->bx0[sb];
- subband->y0 = resLevel->by0[sb];
- subband->x1 = resLevel->bx1[sb];
- subband->y1 = resLevel->by1[sb];
- subband->nXCBs = jpxCeilDivPow2(subband->x1,
- tileComp->codeBlockW)
- - jpxFloorDivPow2(subband->x0,
- tileComp->codeBlockW);
- subband->nYCBs = jpxCeilDivPow2(subband->y1,
- tileComp->codeBlockH)
- - jpxFloorDivPow2(subband->y0,
- tileComp->codeBlockH);
- n = subband->nXCBs > subband->nYCBs ? subband->nXCBs
- : subband->nYCBs;
- for (subband->maxTTLevel = 0, --n;
- n;
- ++subband->maxTTLevel, n >>= 1) ;
- n = 0;
- for (level = subband->maxTTLevel; level >= 0; --level) {
- nx = jpxCeilDivPow2(subband->nXCBs, level);
- ny = jpxCeilDivPow2(subband->nYCBs, level);
- n += nx * ny;
- }
- subband->inclusion =
- (JPXTagTreeNode *)gmallocn(n, sizeof(JPXTagTreeNode));
- subband->zeroBitPlane =
- (JPXTagTreeNode *)gmallocn(n, sizeof(JPXTagTreeNode));
- for (k = 0; k < n; ++k) {
- subband->inclusion[k].finished = gFalse;
- subband->inclusion[k].val = 0;
- subband->zeroBitPlane[k].finished = gFalse;
- subband->zeroBitPlane[k].val = 0;
- }
- subband->cbs = (JPXCodeBlock *)gmallocn(subband->nXCBs *
- subband->nYCBs,
- sizeof(JPXCodeBlock));
- sbx0 = jpxFloorDivPow2(subband->x0, tileComp->codeBlockW);
- sby0 = jpxFloorDivPow2(subband->y0, tileComp->codeBlockH);
- cb = subband->cbs;
- for (cbY = 0; cbY < subband->nYCBs; ++cbY) {
- for (cbX = 0; cbX < subband->nXCBs; ++cbX) {
- cb->x0 = (sbx0 + cbX) << tileComp->codeBlockW;
- cb->x1 = cb->x0 + tileComp->cbW;
- if (subband->x0 > cb->x0) {
- cb->x0 = subband->x0;
- }
- if (subband->x1 < cb->x1) {
- cb->x1 = subband->x1;
- }
- cb->y0 = (sby0 + cbY) << tileComp->codeBlockH;
- cb->y1 = cb->y0 + tileComp->cbH;
- if (subband->y0 > cb->y0) {
- cb->y0 = subband->y0;
- }
- if (subband->y1 < cb->y1) {
- cb->y1 = subband->y1;
- }
- cb->seen = gFalse;
- cb->lBlock = 3;
- cb->nextPass = jpxPassCleanup;
- cb->nZeroBitPlanes = 0;
- cb->coeffs =
- (JPXCoeff *)gmallocn((1 << (tileComp->codeBlockW
- + tileComp->codeBlockH)),
- sizeof(JPXCoeff));
- for (cbi = 0;
- cbi < (Guint)(1 << (tileComp->codeBlockW
- + tileComp->codeBlockH));
- ++cbi) {
- cb->coeffs[cbi].flags = 0;
- cb->coeffs[cbi].len = 0;
- cb->coeffs[cbi].mag = 0;
- }
- cb->arithDecoder = NULL;
- cb->stats = NULL;
- ++cb;
- }
- }
- }
- }
- }
- }
- }
-
- return readTilePartData(tileIdx, tilePartLen, tilePartToEOC);
-}
-
-GBool JPXStream::readTilePartData(Guint tileIdx,
- Guint tilePartLen, GBool tilePartToEOC) {
- JPXTile *tile;
- JPXTileComp *tileComp;
- JPXResLevel *resLevel;
- JPXPrecinct *precinct;
- JPXSubband *subband;
- JPXCodeBlock *cb;
- Guint ttVal;
- Guint bits, cbX, cbY, nx, ny, i, j, n, sb;
- int level;
-
- tile = &img.tiles[tileIdx];
-
- // read all packets from this tile-part
- while (1) {
- if (tilePartToEOC) {
- //~ peek for an EOC marker
- cover(93);
- } else if (tilePartLen == 0) {
- break;
- }
-
- tileComp = &tile->tileComps[tile->comp];
- resLevel = &tileComp->resLevels[tile->res];
- precinct = &resLevel->precincts[tile->precinct];
-
- //----- packet header
-
- // setup
- startBitBuf(tilePartLen);
-
- // zero-length flag
- if (!readBits(1, &bits)) {
- goto err;
- }
- if (!bits) {
- // packet is empty -- clear all code-block inclusion flags
- cover(45);
- for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) {
- subband = &precinct->subbands[sb];
- for (cbY = 0; cbY < subband->nYCBs; ++cbY) {
- for (cbX = 0; cbX < subband->nXCBs; ++cbX) {
- cb = &subband->cbs[cbY * subband->nXCBs + cbX];
- cb->included = gFalse;
- }
- }
- }
- } else {
-
- for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) {
- subband = &precinct->subbands[sb];
- for (cbY = 0; cbY < subband->nYCBs; ++cbY) {
- for (cbX = 0; cbX < subband->nXCBs; ++cbX) {
- cb = &subband->cbs[cbY * subband->nXCBs + cbX];
-
- // skip code-blocks with no coefficients
- if (cb->x0 >= cb->x1 || cb->y0 >= cb->y1) {
- cover(46);
- cb->included = gFalse;
- continue;
- }
-
- // code-block inclusion
- if (cb->seen) {
- cover(47);
- if (!readBits(1, &cb->included)) {
- goto err;
- }
- } else {
- cover(48);
- ttVal = 0;
- i = 0;
- for (level = subband->maxTTLevel; level >= 0; --level) {
- nx = jpxCeilDivPow2(subband->nXCBs, level);
- ny = jpxCeilDivPow2(subband->nYCBs, level);
- j = i + (cbY >> level) * nx + (cbX >> level);
- if (!subband->inclusion[j].finished &&
- !subband->inclusion[j].val) {
- subband->inclusion[j].val = ttVal;
- } else {
- ttVal = subband->inclusion[j].val;
- }
- while (!subband->inclusion[j].finished &&
- ttVal <= tile->layer) {
- if (!readBits(1, &bits)) {
- goto err;
- }
- if (bits == 1) {
- subband->inclusion[j].finished = gTrue;
- } else {
- ++ttVal;
- }
- }
- subband->inclusion[j].val = ttVal;
- if (ttVal > tile->layer) {
- break;
- }
- i += nx * ny;
- }
- cb->included = level < 0;
- }
-
- if (cb->included) {
- cover(49);
-
- // zero bit-plane count
- if (!cb->seen) {
- cover(50);
- ttVal = 0;
- i = 0;
- for (level = subband->maxTTLevel; level >= 0; --level) {
- nx = jpxCeilDivPow2(subband->nXCBs, level);
- ny = jpxCeilDivPow2(subband->nYCBs, level);
- j = i + (cbY >> level) * nx + (cbX >> level);
- if (!subband->zeroBitPlane[j].finished &&
- !subband->zeroBitPlane[j].val) {
- subband->zeroBitPlane[j].val = ttVal;
- } else {
- ttVal = subband->zeroBitPlane[j].val;
- }
- while (!subband->zeroBitPlane[j].finished) {
- if (!readBits(1, &bits)) {
- goto err;
- }
- if (bits == 1) {
- subband->zeroBitPlane[j].finished = gTrue;
- } else {
- ++ttVal;
- }
- }
- subband->zeroBitPlane[j].val = ttVal;
- i += nx * ny;
- }
- cb->nZeroBitPlanes = ttVal;
- }
-
- // number of coding passes
- if (!readBits(1, &bits)) {
- goto err;
- }
- if (bits == 0) {
- cover(51);
- cb->nCodingPasses = 1;
- } else {
- if (!readBits(1, &bits)) {
- goto err;
- }
- if (bits == 0) {
- cover(52);
- cb->nCodingPasses = 2;
- } else {
- cover(53);
- if (!readBits(2, &bits)) {
- goto err;
- }
- if (bits < 3) {
- cover(54);
- cb->nCodingPasses = 3 + bits;
- } else {
- cover(55);
- if (!readBits(5, &bits)) {
- goto err;
- }
- if (bits < 31) {
- cover(56);
- cb->nCodingPasses = 6 + bits;
- } else {
- cover(57);
- if (!readBits(7, &bits)) {
- goto err;
- }
- cb->nCodingPasses = 37 + bits;
- }
- }
- }
- }
-
- // update Lblock
- while (1) {
- if (!readBits(1, &bits)) {
- goto err;
- }
- if (!bits) {
- break;
- }
- ++cb->lBlock;
- }
-
- // length of compressed data
- //~ deal with multiple codeword segments
- for (n = cb->lBlock, i = cb->nCodingPasses >> 1;
- i;
- ++n, i >>= 1) ;
- if (!readBits(n, &cb->dataLen)) {
- goto err;
- }
- }
- }
- }
- }
- }
- tilePartLen = finishBitBuf();
-
- //----- packet data
-
- for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) {
- subband = &precinct->subbands[sb];
- for (cbY = 0; cbY < subband->nYCBs; ++cbY) {
- for (cbX = 0; cbX < subband->nXCBs; ++cbX) {
- cb = &subband->cbs[cbY * subband->nXCBs + cbX];
- if (cb->included) {
- if (!readCodeBlockData(tileComp, resLevel, precinct, subband,
- tile->res, sb, cb)) {
- return gFalse;
- }
- tilePartLen -= cb->dataLen;
- cb->seen = gTrue;
- }
- }
- }
- }
-
- //----- next packet
-
- switch (tile->progOrder) {
- case 0: // layer, resolution level, component, precinct
- cover(58);
- if (++tile->comp == img.nComps) {
- tile->comp = 0;
- if (++tile->res == tile->maxNDecompLevels + 1) {
- tile->res = 0;
- if (++tile->layer == tile->nLayers) {
- tile->layer = 0;
- }
- }
- }
- break;
- case 1: // resolution level, layer, component, precinct
- cover(59);
- if (++tile->comp == img.nComps) {
- tile->comp = 0;
- if (++tile->layer == tile->nLayers) {
- tile->layer = 0;
- if (++tile->res == tile->maxNDecompLevels + 1) {
- tile->res = 0;
- }
- }
- }
- break;
- case 2: // resolution level, precinct, component, layer
- //~ this isn't correct -- see B.12.1.3
- cover(60);
- if (++tile->layer == tile->nLayers) {
- tile->layer = 0;
- if (++tile->comp == img.nComps) {
- tile->comp = 0;
- if (++tile->res == tile->maxNDecompLevels + 1) {
- tile->res = 0;
- }
- }
- }
- break;
- case 3: // precinct, component, resolution level, layer
- //~ this isn't correct -- see B.12.1.4
- cover(61);
- if (++tile->layer == tile->nLayers) {
- tile->layer = 0;
- if (++tile->res == tile->maxNDecompLevels + 1) {
- tile->res = 0;
- if (++tile->comp == img.nComps) {
- tile->comp = 0;
- }
- }
- }
- break;
- case 4: // component, precinct, resolution level, layer
- //~ this isn't correct -- see B.12.1.5
- cover(62);
- if (++tile->layer == tile->nLayers) {
- tile->layer = 0;
- if (++tile->res == tile->maxNDecompLevels + 1) {
- tile->res = 0;
- if (++tile->comp == img.nComps) {
- tile->comp = 0;
- }
- }
- }
- break;
- }
- }
-
- return gTrue;
-
- err:
- error(getPos(), "Error in JPX stream");
- return gFalse;
-}
-
-GBool JPXStream::readCodeBlockData(JPXTileComp *tileComp,
- JPXResLevel *resLevel,
- JPXPrecinct *precinct,
- JPXSubband *subband,
- Guint res, Guint sb,
- JPXCodeBlock *cb) {
- JPXCoeff *coeff0, *coeff1, *coeff;
- Guint horiz, vert, diag, all, cx, xorBit;
- int horizSign, vertSign;
- Guint i, x, y0, y1, y2;
-
- if (cb->arithDecoder) {
- cover(63);
- cb->arithDecoder->restart(cb->dataLen);
- } else {
- cover(64);
- cb->arithDecoder = new JArithmeticDecoder();
- cb->arithDecoder->setStream(str, cb->dataLen);
- cb->arithDecoder->start();
- cb->stats = new JArithmeticDecoderStats(jpxNContexts);
- cb->stats->setEntry(jpxContextSigProp, 4, 0);
- cb->stats->setEntry(jpxContextRunLength, 3, 0);
- cb->stats->setEntry(jpxContextUniform, 46, 0);
- }
-
- for (i = 0; i < cb->nCodingPasses; ++i) {
- switch (cb->nextPass) {
-
- //----- significance propagation pass
- case jpxPassSigProp:
- cover(65);
- for (y0 = cb->y0, coeff0 = cb->coeffs;
- y0 < cb->y1;
- y0 += 4, coeff0 += 4 << tileComp->codeBlockW) {
- for (x = cb->x0, coeff1 = coeff0;
- x < cb->x1;
- ++x, ++coeff1) {
- for (y1 = 0, coeff = coeff1;
- y1 < 4 && y0+y1 < cb->y1;
- ++y1, coeff += tileComp->cbW) {
- if (!(coeff->flags & jpxCoeffSignificant)) {
- horiz = vert = diag = 0;
- horizSign = vertSign = 2;
- if (x > cb->x0) {
- if (coeff[-1].flags & jpxCoeffSignificant) {
- ++horiz;
- horizSign += (coeff[-1].flags & jpxCoeffSign) ? -1 : 1;
- }
- if (y0+y1 > cb->y0) {
- diag += (coeff[-(int)tileComp->cbW - 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- if (y0+y1 < cb->y1 - 1) {
- diag += (coeff[tileComp->cbW - 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- }
- if (x < cb->x1 - 1) {
- if (coeff[1].flags & jpxCoeffSignificant) {
- ++horiz;
- horizSign += (coeff[1].flags & jpxCoeffSign) ? -1 : 1;
- }
- if (y0+y1 > cb->y0) {
- diag += (coeff[-(int)tileComp->cbW + 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- if (y0+y1 < cb->y1 - 1) {
- diag += (coeff[tileComp->cbW + 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- }
- if (y0+y1 > cb->y0) {
- if (coeff[-(int)tileComp->cbW].flags & jpxCoeffSignificant) {
- ++vert;
- vertSign += (coeff[-(int)tileComp->cbW].flags & jpxCoeffSign)
- ? -1 : 1;
- }
- }
- if (y0+y1 < cb->y1 - 1) {
- if (coeff[tileComp->cbW].flags & jpxCoeffSignificant) {
- ++vert;
- vertSign += (coeff[tileComp->cbW].flags & jpxCoeffSign)
- ? -1 : 1;
- }
- }
- cx = sigPropContext[horiz][vert][diag][res == 0 ? 1 : sb];
- if (cx != 0) {
- if (cb->arithDecoder->decodeBit(cx, cb->stats)) {
- coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef;
- coeff->mag = (coeff->mag << 1) | 1;
- cx = signContext[horizSign][vertSign][0];
- xorBit = signContext[horizSign][vertSign][1];
- if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) {
- coeff->flags |= jpxCoeffSign;
- }
- }
- ++coeff->len;
- coeff->flags |= jpxCoeffTouched;
- }
- }
- }
- }
- }
- ++cb->nextPass;
- break;
-
- //----- magnitude refinement pass
- case jpxPassMagRef:
- cover(66);
- for (y0 = cb->y0, coeff0 = cb->coeffs;
- y0 < cb->y1;
- y0 += 4, coeff0 += 4 << tileComp->codeBlockW) {
- for (x = cb->x0, coeff1 = coeff0;
- x < cb->x1;
- ++x, ++coeff1) {
- for (y1 = 0, coeff = coeff1;
- y1 < 4 && y0+y1 < cb->y1;
- ++y1, coeff += tileComp->cbW) {
- if ((coeff->flags & jpxCoeffSignificant) &&
- !(coeff->flags & jpxCoeffTouched)) {
- if (coeff->flags & jpxCoeffFirstMagRef) {
- all = 0;
- if (x > cb->x0) {
- all += (coeff[-1].flags >> jpxCoeffSignificantB) & 1;
- if (y0+y1 > cb->y0) {
- all += (coeff[-(int)tileComp->cbW - 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- if (y0+y1 < cb->y1 - 1) {
- all += (coeff[tileComp->cbW - 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- }
- if (x < cb->x1 - 1) {
- all += (coeff[1].flags >> jpxCoeffSignificantB) & 1;
- if (y0+y1 > cb->y0) {
- all += (coeff[-(int)tileComp->cbW + 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- if (y0+y1 < cb->y1 - 1) {
- all += (coeff[tileComp->cbW + 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- }
- if (y0+y1 > cb->y0) {
- all += (coeff[-(int)tileComp->cbW].flags
- >> jpxCoeffSignificantB) & 1;
- }
- if (y0+y1 < cb->y1 - 1) {
- all += (coeff[tileComp->cbW].flags
- >> jpxCoeffSignificantB) & 1;
- }
- cx = all ? 15 : 14;
- } else {
- cx = 16;
- }
- coeff->mag = (coeff->mag << 1) |
- cb->arithDecoder->decodeBit(cx, cb->stats);
- ++coeff->len;
- coeff->flags |= jpxCoeffTouched;
- coeff->flags &= ~jpxCoeffFirstMagRef;
- }
- }
- }
- }
- ++cb->nextPass;
- break;
-
- //----- cleanup pass
- case jpxPassCleanup:
- cover(67);
- for (y0 = cb->y0, coeff0 = cb->coeffs;
- y0 < cb->y1;
- y0 += 4, coeff0 += 4 << tileComp->codeBlockW) {
- for (x = cb->x0, coeff1 = coeff0;
- x < cb->x1;
- ++x, ++coeff1) {
- y1 = 0;
- if (y0 + 3 < cb->y1 &&
- !(coeff1->flags & jpxCoeffTouched) &&
- !(coeff1[tileComp->cbW].flags & jpxCoeffTouched) &&
- !(coeff1[2 * tileComp->cbW].flags & jpxCoeffTouched) &&
- !(coeff1[3 * tileComp->cbW].flags & jpxCoeffTouched) &&
- (x == cb->x0 || y0 == cb->y0 ||
- !(coeff1[-(int)tileComp->cbW - 1].flags
- & jpxCoeffSignificant)) &&
- (y0 == cb->y0 ||
- !(coeff1[-(int)tileComp->cbW].flags
- & jpxCoeffSignificant)) &&
- (x == cb->x1 - 1 || y0 == cb->y0 ||
- !(coeff1[-(int)tileComp->cbW + 1].flags
- & jpxCoeffSignificant)) &&
- (x == cb->x0 ||
- (!(coeff1[-1].flags & jpxCoeffSignificant) &&
- !(coeff1[tileComp->cbW - 1].flags
- & jpxCoeffSignificant) &&
- !(coeff1[2 * tileComp->cbW - 1].flags
- & jpxCoeffSignificant) &&
- !(coeff1[3 * tileComp->cbW - 1].flags
- & jpxCoeffSignificant))) &&
- (x == cb->x1 - 1 ||
- (!(coeff1[1].flags & jpxCoeffSignificant) &&
- !(coeff1[tileComp->cbW + 1].flags
- & jpxCoeffSignificant) &&
- !(coeff1[2 * tileComp->cbW + 1].flags
- & jpxCoeffSignificant) &&
- !(coeff1[3 * tileComp->cbW + 1].flags
- & jpxCoeffSignificant))) &&
- (x == cb->x0 || y0+4 == cb->y1 ||
- !(coeff1[4 * tileComp->cbW - 1].flags & jpxCoeffSignificant)) &&
- (y0+4 == cb->y1 ||
- !(coeff1[4 * tileComp->cbW].flags & jpxCoeffSignificant)) &&
- (x == cb->x1 - 1 || y0+4 == cb->y1 ||
- !(coeff1[4 * tileComp->cbW + 1].flags
- & jpxCoeffSignificant))) {
- if (cb->arithDecoder->decodeBit(jpxContextRunLength, cb->stats)) {
- y1 = cb->arithDecoder->decodeBit(jpxContextUniform, cb->stats);
- y1 = (y1 << 1) |
- cb->arithDecoder->decodeBit(jpxContextUniform, cb->stats);
- for (y2 = 0, coeff = coeff1;
- y2 < y1;
- ++y2, coeff += tileComp->cbW) {
- ++coeff->len;
- }
- coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef;
- coeff->mag = (coeff->mag << 1) | 1;
- ++coeff->len;
- cx = signContext[2][2][0];
- xorBit = signContext[2][2][1];
- if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) {
- coeff->flags |= jpxCoeffSign;
- }
- ++y1;
- } else {
- for (y1 = 0, coeff = coeff1;
- y1 < 4;
- ++y1, coeff += tileComp->cbW) {
- ++coeff->len;
- }
- y1 = 4;
- }
- }
- for (coeff = &coeff1[y1 << tileComp->codeBlockW];
- y1 < 4 && y0 + y1 < cb->y1;
- ++y1, coeff += tileComp->cbW) {
- if (!(coeff->flags & jpxCoeffTouched)) {
- horiz = vert = diag = 0;
- horizSign = vertSign = 2;
- if (x > cb->x0) {
- if (coeff[-1].flags & jpxCoeffSignificant) {
- ++horiz;
- horizSign += (coeff[-1].flags & jpxCoeffSign) ? -1 : 1;
- }
- if (y0+y1 > cb->y0) {
- diag += (coeff[-(int)tileComp->cbW - 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- if (y0+y1 < cb->y1 - 1) {
- diag += (coeff[tileComp->cbW - 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- }
- if (x < cb->x1 - 1) {
- if (coeff[1].flags & jpxCoeffSignificant) {
- ++horiz;
- horizSign += (coeff[1].flags & jpxCoeffSign) ? -1 : 1;
- }
- if (y0+y1 > cb->y0) {
- diag += (coeff[-(int)tileComp->cbW + 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- if (y0+y1 < cb->y1 - 1) {
- diag += (coeff[tileComp->cbW + 1].flags
- >> jpxCoeffSignificantB) & 1;
- }
- }
- if (y0+y1 > cb->y0) {
- if (coeff[-(int)tileComp->cbW].flags & jpxCoeffSignificant) {
- ++vert;
- vertSign += (coeff[-(int)tileComp->cbW].flags & jpxCoeffSign)
- ? -1 : 1;
- }
- }
- if (y0+y1 < cb->y1 - 1) {
- if (coeff[tileComp->cbW].flags & jpxCoeffSignificant) {
- ++vert;
- vertSign += (coeff[tileComp->cbW].flags & jpxCoeffSign)
- ? -1 : 1;
- }
- }
- cx = sigPropContext[horiz][vert][diag][res == 0 ? 1 : sb];
- if (cb->arithDecoder->decodeBit(cx, cb->stats)) {
- coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef;
- coeff->mag = (coeff->mag << 1) | 1;
- cx = signContext[horizSign][vertSign][0];
- xorBit = signContext[horizSign][vertSign][1];
- if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) {
- coeff->flags |= jpxCoeffSign;
- }
- }
- ++coeff->len;
- } else {
- coeff->flags &= ~jpxCoeffTouched;
- }
- }
- }
- }
- cb->nextPass = jpxPassSigProp;
- break;
- }
- }
-
- cb->arithDecoder->cleanup();
- return gTrue;
-}
-
-// Inverse quantization, and wavelet transform (IDWT). This also does
-// the initial shift to convert to fixed point format.
-void JPXStream::inverseTransform(JPXTileComp *tileComp) {
- JPXResLevel *resLevel;
- JPXPrecinct *precinct;
- JPXSubband *subband;
- JPXCodeBlock *cb;
- JPXCoeff *coeff0, *coeff;
- Guint qStyle, guard, eps, shift;
- int shift2;
- double mu;
- int val;
- int *dataPtr;
- Guint nx0, ny0, nx1, ny1;
- Guint r, cbX, cbY, x, y;
-
- cover(68);
-
- //----- (NL)LL subband (resolution level 0)
-
- resLevel = &tileComp->resLevels[0];
- precinct = &resLevel->precincts[0];
- subband = &precinct->subbands[0];
-
- // i-quant parameters
- qStyle = tileComp->quantStyle & 0x1f;
- guard = (tileComp->quantStyle >> 5) & 7;
- if (qStyle == 0) {
- cover(69);
- eps = (tileComp->quantSteps[0] >> 3) & 0x1f;
- shift = guard + eps - 1;
- mu = 0; // make gcc happy
- } else {
- cover(70);
- shift = guard - 1 + tileComp->prec;
- mu = (double)(0x800 + (tileComp->quantSteps[0] & 0x7ff)) / 2048.0;
- }
- if (tileComp->transform == 0) {
- cover(71);
- shift += fracBits;
- }
-
- // copy (NL)LL into the upper-left corner of the data array, doing
- // the fixed point adjustment and dequantization along the way
- cb = subband->cbs;
- for (cbY = 0; cbY < subband->nYCBs; ++cbY) {
- for (cbX = 0; cbX < subband->nXCBs; ++cbX) {
- for (y = cb->y0, coeff0 = cb->coeffs;
- y < cb->y1;
- ++y, coeff0 += tileComp->cbW) {
- dataPtr = &tileComp->data[(y - subband->y0)
- * (tileComp->x1 - tileComp->x0)
- + (cb->x0 - subband->x0)];
- for (x = cb->x0, coeff = coeff0; x < cb->x1; ++x, ++coeff) {
- val = (int)coeff->mag;
- if (val != 0) {
- shift2 = shift - (cb->nZeroBitPlanes + coeff->len);
- if (shift2 > 0) {
- cover(94);
- val = (val << shift2) + (1 << (shift2 - 1));
- } else {
- cover(95);
- val >>= -shift2;
- }
- if (qStyle == 0) {
- cover(96);
- if (tileComp->transform == 0) {
- cover(97);
- val &= -1 << fracBits;
- }
- } else {
- cover(98);
- val = (int)((double)val * mu);
- }
- if (coeff->flags & jpxCoeffSign) {
- cover(99);
- val = -val;
- }
- }
- *dataPtr++ = val;
- }
- }
- ++cb;
- }
- }
-
- //----- IDWT for each level
-
- for (r = 1; r <= tileComp->nDecompLevels; ++r) {
- resLevel = &tileComp->resLevels[r];
-
- // (n)LL is already in the upper-left corner of the
- // tile-component data array -- interleave with (n)HL/LH/HH
- // and inverse transform to get (n-1)LL, which will be stored
- // in the upper-left corner of the tile-component data array
- if (r == tileComp->nDecompLevels) {
- cover(72);
- nx0 = tileComp->x0;
- ny0 = tileComp->y0;
- nx1 = tileComp->x1;
- ny1 = tileComp->y1;
- } else {
- cover(73);
- nx0 = tileComp->resLevels[r+1].x0;
- ny0 = tileComp->resLevels[r+1].y0;
- nx1 = tileComp->resLevels[r+1].x1;
- ny1 = tileComp->resLevels[r+1].y1;
- }
- inverseTransformLevel(tileComp, r, resLevel, nx0, ny0, nx1, ny1);
- }
-}
-
-// Do one level of the inverse transform:
-// - take (n)LL from the tile-component data array
-// - take (n)HL/LH/HH from <resLevel>
-// - leave the resulting (n-1)LL in the tile-component data array
-void JPXStream::inverseTransformLevel(JPXTileComp *tileComp,
- Guint r, JPXResLevel *resLevel,
- Guint nx0, Guint ny0,
- Guint nx1, Guint ny1) {
- JPXPrecinct *precinct;
- JPXSubband *subband;
- JPXCodeBlock *cb;
- JPXCoeff *coeff0, *coeff;
- Guint qStyle, guard, eps, shift, t;
- int shift2;
- double mu;
- int val;
- int *dataPtr;
- Guint xo, yo;
- Guint x, y, sb, cbX, cbY;
- int xx, yy;
-
- //----- interleave
-
- // spread out LL
- for (yy = resLevel->y1 - 1; yy >= (int)resLevel->y0; --yy) {
- for (xx = resLevel->x1 - 1; xx >= (int)resLevel->x0; --xx) {
- tileComp->data[(2 * yy - ny0) * (tileComp->x1 - tileComp->x0)
- + (2 * xx - nx0)] =
- tileComp->data[(yy - resLevel->y0) * (tileComp->x1 - tileComp->x0)
- + (xx - resLevel->x0)];
- }
- }
-
- // i-quant parameters
- qStyle = tileComp->quantStyle & 0x1f;
- guard = (tileComp->quantStyle >> 5) & 7;
-
- // interleave HL/LH/HH
- precinct = &resLevel->precincts[0];
- for (sb = 0; sb < 3; ++sb) {
-
- // i-quant parameters
- if (qStyle == 0) {
- cover(100);
- eps = (tileComp->quantSteps[3*r - 2 + sb] >> 3) & 0x1f;
- shift = guard + eps - 1;
- mu = 0; // make gcc happy
- } else {
- cover(101);
- shift = guard + tileComp->prec;
- if (sb == 2) {
- cover(102);
- ++shift;
- }
- t = tileComp->quantSteps[qStyle == 1 ? 0 : (3*r - 2 + sb)];
- mu = (double)(0x800 + (t & 0x7ff)) / 2048.0;
- }
- if (tileComp->transform == 0) {
- cover(103);
- shift += fracBits;
- }
-
- // copy the subband coefficients into the data array, doing the
- // fixed point adjustment and dequantization along the way
- xo = (sb & 1) ? 0 : 1;
- yo = (sb > 0) ? 1 : 0;
- subband = &precinct->subbands[sb];
- cb = subband->cbs;
- for (cbY = 0; cbY < subband->nYCBs; ++cbY) {
- for (cbX = 0; cbX < subband->nXCBs; ++cbX) {
- for (y = cb->y0, coeff0 = cb->coeffs;
- y < cb->y1;
- ++y, coeff0 += tileComp->cbW) {
- dataPtr = &tileComp->data[(2 * y + yo - ny0)
- * (tileComp->x1 - tileComp->x0)
- + (2 * cb->x0 + xo - nx0)];
- for (x = cb->x0, coeff = coeff0; x < cb->x1; ++x, ++coeff) {
- val = (int)coeff->mag;
- if (val != 0) {
- shift2 = shift - (cb->nZeroBitPlanes + coeff->len);
- if (shift2 > 0) {
- cover(74);
- val = (val << shift2) + (1 << (shift2 - 1));
- } else {
- cover(75);
- val >>= -shift2;
- }
- if (qStyle == 0) {
- cover(76);
- if (tileComp->transform == 0) {
- val &= -1 << fracBits;
- }
- } else {
- cover(77);
- val = (int)((double)val * mu);
- }
- if (coeff->flags & jpxCoeffSign) {
- cover(78);
- val = -val;
- }
- }
- *dataPtr = val;
- dataPtr += 2;
- }
- }
- ++cb;
- }
- }
- }
-
- //----- horizontal (row) transforms
- dataPtr = tileComp->data;
- for (y = 0; y < ny1 - ny0; ++y) {
- inverseTransform1D(tileComp, dataPtr, 1, nx0, nx1);
- dataPtr += tileComp->x1 - tileComp->x0;
- }
-
- //----- vertical (column) transforms
- dataPtr = tileComp->data;
- for (x = 0; x < nx1 - nx0; ++x) {
- inverseTransform1D(tileComp, dataPtr,
- tileComp->x1 - tileComp->x0, ny0, ny1);
- ++dataPtr;
- }
-}
-
-void JPXStream::inverseTransform1D(JPXTileComp *tileComp,
- int *data, Guint stride,
- Guint i0, Guint i1) {
- int *buf;
- Guint offset, end, i;
-
- //----- special case for length = 1
- if (i1 - i0 == 1) {
- cover(79);
- if (i0 & 1) {
- cover(104);
- *data >>= 1;
- }
-
- } else {
- cover(80);
-
- // choose an offset: this makes even buf[] indexes correspond to
- // odd values of i, and vice versa
- offset = 3 + (i0 & 1);
- end = offset + i1 - i0;
-
- //----- gather
- buf = tileComp->buf;
- for (i = 0; i < i1 - i0; ++i) {
- buf[offset + i] = data[i * stride];
- }
-
- //----- extend right
- buf[end] = buf[end - 2];
- if (i1 - i0 == 2) {
- cover(81);
- buf[end+1] = buf[offset + 1];
- buf[end+2] = buf[offset];
- buf[end+3] = buf[offset + 1];
- } else {
- cover(82);
- buf[end+1] = buf[end - 3];
- if (i1 - i0 == 3) {
- cover(105);
- buf[end+2] = buf[offset + 1];
- buf[end+3] = buf[offset + 2];
- } else {
- cover(106);
- buf[end+2] = buf[end - 4];
- if (i1 - i0 == 4) {
- cover(107);
- buf[end+3] = buf[offset + 1];
- } else {
- cover(108);
- buf[end+3] = buf[end - 5];
- }
- }
- }
-
- //----- extend left
- buf[offset - 1] = buf[offset + 1];
- buf[offset - 2] = buf[offset + 2];
- buf[offset - 3] = buf[offset + 3];
- if (offset == 4) {
- cover(83);
- buf[0] = buf[offset + 4];
- }
-
- //----- 9-7 irreversible filter
-
- if (tileComp->transform == 0) {
- cover(84);
- // step 1 (even)
- for (i = 1; i <= end + 2; i += 2) {
- buf[i] = (int)(idwtKappa * buf[i]);
- }
- // step 2 (odd)
- for (i = 0; i <= end + 3; i += 2) {
- buf[i] = (int)(idwtIKappa * buf[i]);
- }
- // step 3 (even)
- for (i = 1; i <= end + 2; i += 2) {
- buf[i] = (int)(buf[i] - idwtDelta * (buf[i-1] + buf[i+1]));
- }
- // step 4 (odd)
- for (i = 2; i <= end + 1; i += 2) {
- buf[i] = (int)(buf[i] - idwtGamma * (buf[i-1] + buf[i+1]));
- }
- // step 5 (even)
- for (i = 3; i <= end; i += 2) {
- buf[i] = (int)(buf[i] - idwtBeta * (buf[i-1] + buf[i+1]));
- }
- // step 6 (odd)
- for (i = 4; i <= end - 1; i += 2) {
- buf[i] = (int)(buf[i] - idwtAlpha * (buf[i-1] + buf[i+1]));
- }
-
- //----- 5-3 reversible filter
-
- } else {
- cover(85);
- // step 1 (even)
- for (i = 3; i <= end; i += 2) {
- buf[i] -= (buf[i-1] + buf[i+1] + 2) >> 2;
- }
- // step 2 (odd)
- for (i = 4; i < end; i += 2) {
- buf[i] += (buf[i-1] + buf[i+1]) >> 1;
- }
- }
-
- //----- scatter
- for (i = 0; i < i1 - i0; ++i) {
- data[i * stride] = buf[offset + i];
- }
- }
-}
-
-// Inverse multi-component transform and DC level shift. This also
-// converts fixed point samples back to integers.
-GBool JPXStream::inverseMultiCompAndDC(JPXTile *tile) {
- JPXTileComp *tileComp;
- int coeff, d0, d1, d2, t, minVal, maxVal, zeroVal;
- int *dataPtr;
- Guint j, comp, x, y;
-
- //----- inverse multi-component transform
-
- if (tile->multiComp == 1) {
- cover(86);
- if (img.nComps < 3 ||
- tile->tileComps[0].hSep != tile->tileComps[1].hSep ||
- tile->tileComps[0].vSep != tile->tileComps[1].vSep ||
- tile->tileComps[1].hSep != tile->tileComps[2].hSep ||
- tile->tileComps[1].vSep != tile->tileComps[2].vSep) {
- return gFalse;
- }
-
- // inverse irreversible multiple component transform
- if (tile->tileComps[0].transform == 0) {
- cover(87);
- j = 0;
- for (y = 0; y < tile->tileComps[0].y1 - tile->tileComps[0].y0; ++y) {
- for (x = 0; x < tile->tileComps[0].x1 - tile->tileComps[0].x0; ++x) {
- d0 = tile->tileComps[0].data[j];
- d1 = tile->tileComps[1].data[j];
- d2 = tile->tileComps[2].data[j];
- tile->tileComps[0].data[j] = (int)(d0 + 1.402 * d2 + 0.5);
- tile->tileComps[1].data[j] =
- (int)(d0 - 0.34413 * d1 - 0.71414 * d2 + 0.5);
- tile->tileComps[2].data[j] = (int)(d0 + 1.772 * d1 + 0.5);
- ++j;
- }
- }
-
- // inverse reversible multiple component transform
- } else {
- cover(88);
- j = 0;
- for (y = 0; y < tile->tileComps[0].y1 - tile->tileComps[0].y0; ++y) {
- for (x = 0; x < tile->tileComps[0].x1 - tile->tileComps[0].x0; ++x) {
- d0 = tile->tileComps[0].data[j];
- d1 = tile->tileComps[1].data[j];
- d2 = tile->tileComps[2].data[j];
- tile->tileComps[1].data[j] = t = d0 - ((d2 + d1) >> 2);
- tile->tileComps[0].data[j] = d2 + t;
- tile->tileComps[2].data[j] = d1 + t;
- ++j;
- }
- }
- }
- }
-
- //----- DC level shift
- for (comp = 0; comp < img.nComps; ++comp) {
- tileComp = &tile->tileComps[comp];
-
- // signed: clip
- if (tileComp->sgned) {
- cover(89);
- minVal = -(1 << (tileComp->prec - 1));
- maxVal = (1 << (tileComp->prec - 1)) - 1;
- dataPtr = tileComp->data;
- for (y = 0; y < tileComp->y1 - tileComp->y0; ++y) {
- for (x = 0; x < tileComp->x1 - tileComp->x0; ++x) {
- coeff = *dataPtr;
- if (tileComp->transform == 0) {
- cover(109);
- coeff >>= fracBits;
- }
- if (coeff < minVal) {
- cover(110);
- coeff = minVal;
- } else if (coeff > maxVal) {
- cover(111);
- coeff = maxVal;
- }
- *dataPtr++ = coeff;
- }
- }
-
- // unsigned: inverse DC level shift and clip
- } else {
- cover(90);
- maxVal = (1 << tileComp->prec) - 1;
- zeroVal = 1 << (tileComp->prec - 1);
- dataPtr = tileComp->data;
- for (y = 0; y < tileComp->y1 - tileComp->y0; ++y) {
- for (x = 0; x < tileComp->x1 - tileComp->x0; ++x) {
- coeff = *dataPtr;
- if (tileComp->transform == 0) {
- cover(112);
- coeff >>= fracBits;
- }
- coeff += zeroVal;
- if (coeff < 0) {
- cover(113);
- coeff = 0;
- } else if (coeff > maxVal) {
- cover(114);
- coeff = maxVal;
- }
- *dataPtr++ = coeff;
- }
- }
- }
- }
-
- return gTrue;
-}
-
-GBool JPXStream::readBoxHdr(Guint *boxType, Guint *boxLen, Guint *dataLen) {
- Guint len, lenH;
-
- if (!readULong(&len) ||
- !readULong(boxType)) {
- return gFalse;
- }
- if (len == 1) {
- if (!readULong(&lenH) || !readULong(&len)) {
- return gFalse;
- }
- if (lenH) {
- error(getPos(), "JPX stream contains a box larger than 2^32 bytes");
- return gFalse;
- }
- *boxLen = len;
- *dataLen = len - 16;
- } else if (len == 0) {
- *boxLen = 0;
- *dataLen = 0;
- } else {
- *boxLen = len;
- *dataLen = len - 8;
- }
- return gTrue;
-}
-
-int JPXStream::readMarkerHdr(int *segType, Guint *segLen) {
- int c;
-
- do {
- do {
- if ((c = str->getChar()) == EOF) {
- return gFalse;
- }
- } while (c != 0xff);
- do {
- if ((c = str->getChar()) == EOF) {
- return gFalse;
- }
- } while (c == 0xff);
- } while (c == 0x00);
- *segType = c;
- if ((c >= 0x30 && c <= 0x3f) ||
- c == 0x4f || c == 0x92 || c == 0x93 || c == 0xd9) {
- *segLen = 0;
- return gTrue;
- }
- return readUWord(segLen);
-}
-
-GBool JPXStream::readUByte(Guint *x) {
- int c0;
-
- if ((c0 = str->getChar()) == EOF) {
- return gFalse;
- }
- *x = (Guint)c0;
- return gTrue;
-}
-
-GBool JPXStream::readByte(int *x) {
- int c0;
-
- if ((c0 = str->getChar()) == EOF) {
- return gFalse;
- }
- *x = c0;
- if (c0 & 0x80) {
- *x |= -1 - 0xff;
- }
- return gTrue;
-}
-
-GBool JPXStream::readUWord(Guint *x) {
- int c0, c1;
-
- if ((c0 = str->getChar()) == EOF ||
- (c1 = str->getChar()) == EOF) {
- return gFalse;
- }
- *x = (Guint)((c0 << 8) | c1);
- return gTrue;
-}
-
-GBool JPXStream::readULong(Guint *x) {
- int c0, c1, c2, c3;
-
- if ((c0 = str->getChar()) == EOF ||
- (c1 = str->getChar()) == EOF ||
- (c2 = str->getChar()) == EOF ||
- (c3 = str->getChar()) == EOF) {
- return gFalse;
- }
- *x = (Guint)((c0 << 24) | (c1 << 16) | (c2 << 8) | c3);
- return gTrue;
-}
-
-GBool JPXStream::readNBytes(int nBytes, GBool signd, int *x) {
- int y, c, i;
-
- y = 0;
- for (i = 0; i < nBytes; ++i) {
- if ((c = str->getChar()) == EOF) {
- return gFalse;
- }
- y = (y << 8) + c;
- }
- if (signd) {
- if (y & (1 << (8 * nBytes - 1))) {
- y |= -1 << (8 * nBytes);
- }
- }
- *x = y;
- return gTrue;
-}
-
-GBool JPXStream::readBits(int nBits, Guint *x) {
- int c;
-
- while (bitBufLen < nBits) {
- if (byteCount == 0 || (c = str->getChar()) == EOF) {
- return gFalse;
- }
- --byteCount;
- if (bitBufSkip) {
- bitBuf = (bitBuf << 7) | (c & 0x7f);
- bitBufLen += 7;
- } else {
- bitBuf = (bitBuf << 8) | (c & 0xff);
- bitBufLen += 8;
- }
- bitBufSkip = c == 0xff;
- }
- *x = (bitBuf >> (bitBufLen - nBits)) & ((1 << nBits) - 1);
- bitBufLen -= nBits;
- return gTrue;
-}
-
-void JPXStream::startBitBuf(Guint byteCountA) {
- bitBufLen = 0;
- bitBufSkip = gFalse;
- byteCount = byteCountA;
-}
-
-Guint JPXStream::finishBitBuf() {
- if (bitBufSkip) {
- str->getChar();
- --byteCount;
- }
- return byteCount;
-}
diff --git a/Build/source/libs/xpdf/xpdf/JPXStream.h b/Build/source/libs/xpdf/xpdf/JPXStream.h
deleted file mode 100644
index e96e7d388e9..00000000000
--- a/Build/source/libs/xpdf/xpdf/JPXStream.h
+++ /dev/null
@@ -1,351 +0,0 @@
-//========================================================================
-//
-// JPXStream.h
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef JPXSTREAM_H
-#define JPXSTREAM_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "Object.h"
-#include "Stream.h"
-
-class JArithmeticDecoder;
-class JArithmeticDecoderStats;
-
-//------------------------------------------------------------------------
-
-enum JPXColorSpaceType {
- jpxCSBiLevel = 0,
- jpxCSYCbCr1 = 1,
- jpxCSYCbCr2 = 3,
- jpxCSYCBCr3 = 4,
- jpxCSPhotoYCC = 9,
- jpxCSCMY = 11,
- jpxCSCMYK = 12,
- jpxCSYCCK = 13,
- jpxCSCIELab = 14,
- jpxCSsRGB = 16,
- jpxCSGrayscale = 17,
- jpxCSBiLevel2 = 18,
- jpxCSCIEJab = 19,
- jpxCSCISesRGB = 20,
- jpxCSROMMRGB = 21,
- jpxCSsRGBYCbCr = 22,
- jpxCSYPbPr1125 = 23,
- jpxCSYPbPr1250 = 24
-};
-
-struct JPXColorSpecCIELab {
- Guint rl, ol, ra, oa, rb, ob, il;
-};
-
-struct JPXColorSpecEnumerated {
- JPXColorSpaceType type; // color space type
- union {
- JPXColorSpecCIELab cieLab;
- };
-};
-
-struct JPXColorSpec {
- Guint meth; // method
- int prec; // precedence
- union {
- JPXColorSpecEnumerated enumerated;
- };
-};
-
-//------------------------------------------------------------------------
-
-struct JPXPalette {
- Guint nEntries; // number of entries in the palette
- Guint nComps; // number of components in each entry
- Guint *bpc; // bits per component, for each component
- int *c; // color data:
- // c[i*nComps+j] = entry i, component j
-};
-
-//------------------------------------------------------------------------
-
-struct JPXCompMap {
- Guint nChannels; // number of channels
- Guint *comp; // codestream components mapped to each channel
- Guint *type; // 0 for direct use, 1 for palette mapping
- Guint *pComp; // palette components to use
-};
-
-//------------------------------------------------------------------------
-
-struct JPXChannelDefn {
- Guint nChannels; // number of channels
- Guint *idx; // channel indexes
- Guint *type; // channel types
- Guint *assoc; // channel associations
-};
-
-//------------------------------------------------------------------------
-
-struct JPXTagTreeNode {
- GBool finished; // true if this node is finished
- Guint val; // current value
-};
-
-//------------------------------------------------------------------------
-
-struct JPXCoeff {
- Gushort flags; // flag bits
- Gushort len; // number of significant bits in mag
- Guint mag; // magnitude value
-};
-
-// coefficient flags
-#define jpxCoeffSignificantB 0
-#define jpxCoeffTouchedB 1
-#define jpxCoeffFirstMagRefB 2
-#define jpxCoeffSignB 7
-#define jpxCoeffSignificant (1 << jpxCoeffSignificantB)
-#define jpxCoeffTouched (1 << jpxCoeffTouchedB)
-#define jpxCoeffFirstMagRef (1 << jpxCoeffFirstMagRefB)
-#define jpxCoeffSign (1 << jpxCoeffSignB)
-
-//------------------------------------------------------------------------
-
-struct JPXCodeBlock {
- //----- size
- Guint x0, y0, x1, y1; // bounds
-
- //----- persistent state
- GBool seen; // true if this code-block has already
- // been seen
- Guint lBlock; // base number of bits used for pkt data length
- Guint nextPass; // next coding pass
-
- //---- info from first packet
- Guint nZeroBitPlanes; // number of zero bit planes
-
- //----- info for the current packet
- Guint included; // code-block inclusion in this packet:
- // 0=not included, 1=included
- Guint nCodingPasses; // number of coding passes in this pkt
- Guint dataLen; // pkt data length
-
- //----- coefficient data
- JPXCoeff *coeffs; // the coefficients
- JArithmeticDecoder // arithmetic decoder
- *arithDecoder;
- JArithmeticDecoderStats // arithmetic decoder stats
- *stats;
-};
-
-//------------------------------------------------------------------------
-
-struct JPXSubband {
- //----- computed
- Guint x0, y0, x1, y1; // bounds
- Guint nXCBs, nYCBs; // number of code-blocks in the x and y
- // directions
-
- //----- tag trees
- Guint maxTTLevel; // max tag tree level
- JPXTagTreeNode *inclusion; // inclusion tag tree for each subband
- JPXTagTreeNode *zeroBitPlane; // zero-bit plane tag tree for each
- // subband
-
- //----- children
- JPXCodeBlock *cbs; // the code-blocks (len = nXCBs * nYCBs)
-};
-
-//------------------------------------------------------------------------
-
-struct JPXPrecinct {
- //----- computed
- Guint x0, y0, x1, y1; // bounds of the precinct
-
- //----- children
- JPXSubband *subbands; // the subbands
-};
-
-//------------------------------------------------------------------------
-
-struct JPXResLevel {
- //----- from the COD and COC segments (main and tile)
- Guint precinctWidth; // log2(precinct width)
- Guint precinctHeight; // log2(precinct height)
-
- //----- computed
- Guint x0, y0, x1, y1; // bounds of the tile-comp (for this res level)
- Guint bx0[3], by0[3], // subband bounds
- bx1[3], by1[3];
-
- //---- children
- JPXPrecinct *precincts; // the precincts
-};
-
-//------------------------------------------------------------------------
-
-struct JPXTileComp {
- //----- from the SIZ segment
- GBool sgned; // 1 for signed, 0 for unsigned
- Guint prec; // precision, in bits
- Guint hSep; // horizontal separation of samples
- Guint vSep; // vertical separation of samples
-
- //----- from the COD and COC segments (main and tile)
- Guint style; // coding style parameter (Scod / Scoc)
- Guint nDecompLevels; // number of decomposition levels
- Guint codeBlockW; // log2(code-block width)
- Guint codeBlockH; // log2(code-block height)
- Guint codeBlockStyle; // code-block style
- Guint transform; // wavelet transformation
-
- //----- from the QCD and QCC segments (main and tile)
- Guint quantStyle; // quantization style
- Guint *quantSteps; // quantization step size for each subband
- Guint nQuantSteps; // number of entries in quantSteps
-
- //----- computed
- Guint x0, y0, x1, y1; // bounds of the tile-comp, in ref coords
- Guint cbW; // code-block width
- Guint cbH; // code-block height
-
- //----- image data
- int *data; // the decoded image data
- int *buf; // intermediate buffer for the inverse
- // transform
-
- //----- children
- JPXResLevel *resLevels; // the resolution levels
- // (len = nDecompLevels + 1)
-};
-
-//------------------------------------------------------------------------
-
-struct JPXTile {
- //----- from the COD segments (main and tile)
- Guint progOrder; // progression order
- Guint nLayers; // number of layers
- Guint multiComp; // multiple component transformation
-
- //----- computed
- Guint x0, y0, x1, y1; // bounds of the tile, in ref coords
- Guint maxNDecompLevels; // max number of decomposition levels used
- // in any component in this tile
-
- //----- progression order loop counters
- Guint comp; // component
- Guint res; // resolution level
- Guint precinct; // precinct
- Guint layer; // layer
-
- //----- children
- JPXTileComp *tileComps; // the tile-components (len = JPXImage.nComps)
-};
-
-//------------------------------------------------------------------------
-
-struct JPXImage {
- //----- from the SIZ segment
- Guint xSize, ySize; // size of reference grid
- Guint xOffset, yOffset; // image offset
- Guint xTileSize, yTileSize; // size of tiles
- Guint xTileOffset, // offset of first tile
- yTileOffset;
- Guint nComps; // number of components
-
- //----- computed
- Guint nXTiles; // number of tiles in x direction
- Guint nYTiles; // number of tiles in y direction
-
- //----- children
- JPXTile *tiles; // the tiles (len = nXTiles * nYTiles)
-};
-
-//------------------------------------------------------------------------
-
-class JPXStream: public FilterStream {
-public:
-
- JPXStream(Stream *strA);
- virtual ~JPXStream();
- virtual StreamKind getKind() { return strJPX; }
- virtual void reset();
- virtual void close();
- virtual int getChar();
- virtual int lookChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
- virtual void getImageParams(int *bitsPerComponent,
- StreamColorSpaceMode *csMode);
-
-private:
-
- void fillReadBuf();
- void getImageParams2(int *bitsPerComponent, StreamColorSpaceMode *csMode);
- GBool readBoxes();
- GBool readColorSpecBox(Guint dataLen);
- GBool readCodestream(Guint len);
- GBool readTilePart();
- GBool readTilePartData(Guint tileIdx,
- Guint tilePartLen, GBool tilePartToEOC);
- GBool readCodeBlockData(JPXTileComp *tileComp,
- JPXResLevel *resLevel,
- JPXPrecinct *precinct,
- JPXSubband *subband,
- Guint res, Guint sb,
- JPXCodeBlock *cb);
- void inverseTransform(JPXTileComp *tileComp);
- void inverseTransformLevel(JPXTileComp *tileComp,
- Guint r, JPXResLevel *resLevel,
- Guint nx0, Guint ny0,
- Guint nx1, Guint ny1);
- void inverseTransform1D(JPXTileComp *tileComp,
- int *data, Guint stride,
- Guint i0, Guint i1);
- GBool inverseMultiCompAndDC(JPXTile *tile);
- GBool readBoxHdr(Guint *boxType, Guint *boxLen, Guint *dataLen);
- int readMarkerHdr(int *segType, Guint *segLen);
- GBool readUByte(Guint *x);
- GBool readByte(int *x);
- GBool readUWord(Guint *x);
- GBool readULong(Guint *x);
- GBool readNBytes(int nBytes, GBool signd, int *x);
- GBool readBits(int nBits, Guint *x);
- void startBitBuf(Guint byteCountA);
- Guint finishBitBuf();
-
- Guint nComps; // number of components
- Guint *bpc; // bits per component, for each component
- Guint width, height; // image size
- GBool haveImgHdr; // set if a JP2/JPX image header has been
- // found
- JPXColorSpec cs; // color specification
- GBool haveCS; // set if a color spec has been found
- JPXPalette palette; // the palette
- GBool havePalette; // set if a palette has been found
- JPXCompMap compMap; // the component mapping
- GBool haveCompMap; // set if a component mapping has been found
- JPXChannelDefn channelDefn; // channel definition
- GBool haveChannelDefn; // set if a channel defn has been found
-
- JPXImage img; // JPEG2000 decoder data
- Guint bitBuf; // buffer for bit reads
- int bitBufLen; // number of bits in bitBuf
- GBool bitBufSkip; // true if next bit should be skipped
- // (for bit stuffing)
- Guint byteCount; // number of available bytes left
-
- Guint curX, curY, curComp; // current position for lookChar/getChar
- Guint readBuf; // read buffer
- Guint readBufLen; // number of valid bits in readBuf
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Lexer.cc b/Build/source/libs/xpdf/xpdf/Lexer.cc
deleted file mode 100644
index 9f0c3ca8f36..00000000000
--- a/Build/source/libs/xpdf/xpdf/Lexer.cc
+++ /dev/null
@@ -1,485 +0,0 @@
-//========================================================================
-//
-// Lexer.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <ctype.h>
-#include "Lexer.h"
-#include "Error.h"
-
-//------------------------------------------------------------------------
-
-// A '1' in this array means the character is white space. A '1' or
-// '2' means the character ends a name or command.
-static char specialChars[256] = {
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x
- 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx
-};
-
-//------------------------------------------------------------------------
-// Lexer
-//------------------------------------------------------------------------
-
-Lexer::Lexer(XRef *xref, Stream *str) {
- Object obj;
-
- curStr.initStream(str);
- streams = new Array(xref);
- streams->add(curStr.copy(&obj));
- strPtr = 0;
- freeArray = gTrue;
- curStr.streamReset();
-}
-
-Lexer::Lexer(XRef *xref, Object *obj) {
- Object obj2;
-
- if (obj->isStream()) {
- streams = new Array(xref);
- freeArray = gTrue;
- streams->add(obj->copy(&obj2));
- } else {
- streams = obj->getArray();
- freeArray = gFalse;
- }
- strPtr = 0;
- if (streams->getLength() > 0) {
- streams->get(strPtr, &curStr);
- curStr.streamReset();
- }
-}
-
-Lexer::~Lexer() {
- if (!curStr.isNone()) {
- curStr.streamClose();
- curStr.free();
- }
- if (freeArray) {
- delete streams;
- }
-}
-
-int Lexer::getChar() {
- int c;
-
- c = EOF;
- while (!curStr.isNone() && (c = curStr.streamGetChar()) == EOF) {
- curStr.streamClose();
- curStr.free();
- ++strPtr;
- if (strPtr < streams->getLength()) {
- streams->get(strPtr, &curStr);
- curStr.streamReset();
- }
- }
- return c;
-}
-
-int Lexer::lookChar() {
- if (curStr.isNone()) {
- return EOF;
- }
- return curStr.streamLookChar();
-}
-
-Object *Lexer::getObj(Object *obj) {
- char *p;
- int c, c2;
- GBool comment, neg, done;
- int numParen;
- int xi;
- double xf, scale;
- GString *s;
- int n, m;
-
- // skip whitespace and comments
- comment = gFalse;
- while (1) {
- if ((c = getChar()) == EOF) {
- return obj->initEOF();
- }
- if (comment) {
- if (c == '\r' || c == '\n')
- comment = gFalse;
- } else if (c == '%') {
- comment = gTrue;
- } else if (specialChars[c] != 1) {
- break;
- }
- }
-
- // start reading token
- switch (c) {
-
- // number
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case '-': case '.':
- neg = gFalse;
- xi = 0;
- if (c == '-') {
- neg = gTrue;
- } else if (c == '.') {
- goto doReal;
- } else {
- xi = c - '0';
- }
- while (1) {
- c = lookChar();
- if (isdigit(c)) {
- getChar();
- xi = xi * 10 + (c - '0');
- } else if (c == '.') {
- getChar();
- goto doReal;
- } else {
- break;
- }
- }
- if (neg)
- xi = -xi;
- obj->initInt(xi);
- break;
- doReal:
- xf = xi;
- scale = 0.1;
- while (1) {
- c = lookChar();
- if (c == '-') {
- // ignore minus signs in the middle of numbers to match
- // Adobe's behavior
- error(getPos(), "Badly formatted number");
- getChar();
- continue;
- }
- if (!isdigit(c)) {
- break;
- }
- getChar();
- xf = xf + scale * (c - '0');
- scale *= 0.1;
- }
- if (neg)
- xf = -xf;
- obj->initReal(xf);
- break;
-
- // string
- case '(':
- p = tokBuf;
- n = 0;
- numParen = 1;
- done = gFalse;
- s = NULL;
- do {
- c2 = EOF;
- switch (c = getChar()) {
-
- case EOF:
-#if 0
- // This breaks some PDF files, e.g., ones from Photoshop.
- case '\r':
- case '\n':
-#endif
- error(getPos(), "Unterminated string");
- done = gTrue;
- break;
-
- case '(':
- ++numParen;
- c2 = c;
- break;
-
- case ')':
- if (--numParen == 0) {
- done = gTrue;
- } else {
- c2 = c;
- }
- break;
-
- case '\\':
- switch (c = getChar()) {
- case 'n':
- c2 = '\n';
- break;
- case 'r':
- c2 = '\r';
- break;
- case 't':
- c2 = '\t';
- break;
- case 'b':
- c2 = '\b';
- break;
- case 'f':
- c2 = '\f';
- break;
- case '\\':
- case '(':
- case ')':
- c2 = c;
- break;
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- c2 = c - '0';
- c = lookChar();
- if (c >= '0' && c <= '7') {
- getChar();
- c2 = (c2 << 3) + (c - '0');
- c = lookChar();
- if (c >= '0' && c <= '7') {
- getChar();
- c2 = (c2 << 3) + (c - '0');
- }
- }
- break;
- case '\r':
- c = lookChar();
- if (c == '\n') {
- getChar();
- }
- break;
- case '\n':
- break;
- case EOF:
- error(getPos(), "Unterminated string");
- done = gTrue;
- break;
- default:
- c2 = c;
- break;
- }
- break;
-
- default:
- c2 = c;
- break;
- }
-
- if (c2 != EOF) {
- if (n == tokBufSize) {
- if (!s)
- s = new GString(tokBuf, tokBufSize);
- else
- s->append(tokBuf, tokBufSize);
- p = tokBuf;
- n = 0;
- }
- *p++ = (char)c2;
- ++n;
- }
- } while (!done);
- if (!s)
- s = new GString(tokBuf, n);
- else
- s->append(tokBuf, n);
- obj->initString(s);
- break;
-
- // name
- case '/':
- p = tokBuf;
- n = 0;
- while ((c = lookChar()) != EOF && !specialChars[c]) {
- getChar();
- if (c == '#') {
- c2 = lookChar();
- if (c2 >= '0' && c2 <= '9') {
- c = c2 - '0';
- } else if (c2 >= 'A' && c2 <= 'F') {
- c = c2 - 'A' + 10;
- } else if (c2 >= 'a' && c2 <= 'f') {
- c = c2 - 'a' + 10;
- } else {
- goto notEscChar;
- }
- getChar();
- c <<= 4;
- c2 = getChar();
- if (c2 >= '0' && c2 <= '9') {
- c += c2 - '0';
- } else if (c2 >= 'A' && c2 <= 'F') {
- c += c2 - 'A' + 10;
- } else if (c2 >= 'a' && c2 <= 'f') {
- c += c2 - 'a' + 10;
- } else {
- error(getPos(), "Illegal digit in hex char in name");
- }
- }
- notEscChar:
- if (++n == tokBufSize) {
- error(getPos(), "Name token too long");
- break;
- }
- *p++ = c;
- }
- *p = '\0';
- obj->initName(tokBuf);
- break;
-
- // array punctuation
- case '[':
- case ']':
- tokBuf[0] = c;
- tokBuf[1] = '\0';
- obj->initCmd(tokBuf);
- break;
-
- // hex string or dict punctuation
- case '<':
- c = lookChar();
-
- // dict punctuation
- if (c == '<') {
- getChar();
- tokBuf[0] = tokBuf[1] = '<';
- tokBuf[2] = '\0';
- obj->initCmd(tokBuf);
-
- // hex string
- } else {
- p = tokBuf;
- m = n = 0;
- c2 = 0;
- s = NULL;
- while (1) {
- c = getChar();
- if (c == '>') {
- break;
- } else if (c == EOF) {
- error(getPos(), "Unterminated hex string");
- break;
- } else if (specialChars[c] != 1) {
- c2 = c2 << 4;
- if (c >= '0' && c <= '9')
- c2 += c - '0';
- else if (c >= 'A' && c <= 'F')
- c2 += c - 'A' + 10;
- else if (c >= 'a' && c <= 'f')
- c2 += c - 'a' + 10;
- else
- error(getPos(), "Illegal character <%02x> in hex string", c);
- if (++m == 2) {
- if (n == tokBufSize) {
- if (!s)
- s = new GString(tokBuf, tokBufSize);
- else
- s->append(tokBuf, tokBufSize);
- p = tokBuf;
- n = 0;
- }
- *p++ = (char)c2;
- ++n;
- c2 = 0;
- m = 0;
- }
- }
- }
- if (!s)
- s = new GString(tokBuf, n);
- else
- s->append(tokBuf, n);
- if (m == 1)
- s->append((char)(c2 << 4));
- obj->initString(s);
- }
- break;
-
- // dict punctuation
- case '>':
- c = lookChar();
- if (c == '>') {
- getChar();
- tokBuf[0] = tokBuf[1] = '>';
- tokBuf[2] = '\0';
- obj->initCmd(tokBuf);
- } else {
- error(getPos(), "Illegal character '>'");
- obj->initError();
- }
- break;
-
- // error
- case ')':
- case '{':
- case '}':
- error(getPos(), "Illegal character '%c'", c);
- obj->initError();
- break;
-
- // command
- default:
- p = tokBuf;
- *p++ = c;
- n = 1;
- while ((c = lookChar()) != EOF && !specialChars[c]) {
- getChar();
- if (++n == tokBufSize) {
- error(getPos(), "Command token too long");
- break;
- }
- *p++ = c;
- }
- *p = '\0';
- if (tokBuf[0] == 't' && !strcmp(tokBuf, "true")) {
- obj->initBool(gTrue);
- } else if (tokBuf[0] == 'f' && !strcmp(tokBuf, "false")) {
- obj->initBool(gFalse);
- } else if (tokBuf[0] == 'n' && !strcmp(tokBuf, "null")) {
- obj->initNull();
- } else {
- obj->initCmd(tokBuf);
- }
- break;
- }
-
- return obj;
-}
-
-void Lexer::skipToNextLine() {
- int c;
-
- while (1) {
- c = getChar();
- if (c == EOF || c == '\n') {
- return;
- }
- if (c == '\r') {
- if ((c = lookChar()) == '\n') {
- getChar();
- }
- return;
- }
- }
-}
-
-GBool Lexer::isSpace(int c) {
- return c >= 0 && c <= 0xff && specialChars[c] == 1;
-}
diff --git a/Build/source/libs/xpdf/xpdf/Lexer.h b/Build/source/libs/xpdf/xpdf/Lexer.h
deleted file mode 100644
index f6ad9ce9699..00000000000
--- a/Build/source/libs/xpdf/xpdf/Lexer.h
+++ /dev/null
@@ -1,80 +0,0 @@
-//========================================================================
-//
-// Lexer.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef LEXER_H
-#define LEXER_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "Object.h"
-#include "Stream.h"
-
-class XRef;
-
-#define tokBufSize 128 // size of token buffer
-
-//------------------------------------------------------------------------
-// Lexer
-//------------------------------------------------------------------------
-
-class Lexer {
-public:
-
- // Construct a lexer for a single stream. Deletes the stream when
- // lexer is deleted.
- Lexer(XRef *xref, Stream *str);
-
- // Construct a lexer for a stream or array of streams (assumes obj
- // is either a stream or array of streams).
- Lexer(XRef *xref, Object *obj);
-
- // Destructor.
- ~Lexer();
-
- // Get the next object from the input stream.
- Object *getObj(Object *obj);
-
- // Skip to the beginning of the next line in the input stream.
- void skipToNextLine();
-
- // Skip over one character.
- void skipChar() { getChar(); }
-
- // Get stream.
- Stream *getStream()
- { return curStr.isNone() ? (Stream *)NULL : curStr.getStream(); }
-
- // Get current position in file. This is only used for error
- // messages, so it returns an int instead of a Guint.
- int getPos()
- { return curStr.isNone() ? -1 : (int)curStr.streamGetPos(); }
-
- // Set position in file.
- void setPos(Guint pos, int dir = 0)
- { if (!curStr.isNone()) curStr.streamSetPos(pos, dir); }
-
- // Returns true if <c> is a whitespace character.
- static GBool isSpace(int c);
-
-private:
-
- int getChar();
- int lookChar();
-
- Array *streams; // array of input streams
- int strPtr; // index of current stream
- Object curStr; // current stream
- GBool freeArray; // should lexer free the streams array?
- char tokBuf[tokBufSize]; // temporary token buffer
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Link.cc b/Build/source/libs/xpdf/xpdf/Link.cc
deleted file mode 100644
index ae2de537e36..00000000000
--- a/Build/source/libs/xpdf/xpdf/Link.cc
+++ /dev/null
@@ -1,784 +0,0 @@
-//========================================================================
-//
-// Link.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include <string.h>
-#include "gmem.h"
-#include "GString.h"
-#include "Error.h"
-#include "Object.h"
-#include "Array.h"
-#include "Dict.h"
-#include "Link.h"
-
-//------------------------------------------------------------------------
-// LinkAction
-//------------------------------------------------------------------------
-
-LinkAction *LinkAction::parseDest(Object *obj) {
- LinkAction *action;
-
- action = new LinkGoTo(obj);
- if (!action->isOk()) {
- delete action;
- return NULL;
- }
- return action;
-}
-
-LinkAction *LinkAction::parseAction(Object *obj, GString *baseURI) {
- LinkAction *action;
- Object obj2, obj3, obj4;
-
- if (!obj->isDict()) {
- error(-1, "Bad annotation action");
- return NULL;
- }
-
- obj->dictLookup("S", &obj2);
-
- // GoTo action
- if (obj2.isName("GoTo")) {
- obj->dictLookup("D", &obj3);
- action = new LinkGoTo(&obj3);
- obj3.free();
-
- // GoToR action
- } else if (obj2.isName("GoToR")) {
- obj->dictLookup("F", &obj3);
- obj->dictLookup("D", &obj4);
- action = new LinkGoToR(&obj3, &obj4);
- obj3.free();
- obj4.free();
-
- // Launch action
- } else if (obj2.isName("Launch")) {
- action = new LinkLaunch(obj);
-
- // URI action
- } else if (obj2.isName("URI")) {
- obj->dictLookup("URI", &obj3);
- action = new LinkURI(&obj3, baseURI);
- obj3.free();
-
- // Named action
- } else if (obj2.isName("Named")) {
- obj->dictLookup("N", &obj3);
- action = new LinkNamed(&obj3);
- obj3.free();
-
- // Movie action
- } else if (obj2.isName("Movie")) {
- obj->dictLookupNF("Annot", &obj3);
- obj->dictLookup("T", &obj4);
- action = new LinkMovie(&obj3, &obj4);
- obj3.free();
- obj4.free();
-
- // unknown action
- } else if (obj2.isName()) {
- action = new LinkUnknown(obj2.getName());
-
- // action is missing or wrong type
- } else {
- error(-1, "Bad annotation action");
- action = NULL;
- }
-
- obj2.free();
-
- if (action && !action->isOk()) {
- delete action;
- return NULL;
- }
- return action;
-}
-
-GString *LinkAction::getFileSpecName(Object *fileSpecObj) {
- GString *name;
- Object obj1;
-
- name = NULL;
-
- // string
- if (fileSpecObj->isString()) {
- name = fileSpecObj->getString()->copy();
-
- // dictionary
- } else if (fileSpecObj->isDict()) {
-#ifdef WIN32
- if (!fileSpecObj->dictLookup("DOS", &obj1)->isString()) {
-#else
- if (!fileSpecObj->dictLookup("Unix", &obj1)->isString()) {
-#endif
- obj1.free();
- fileSpecObj->dictLookup("F", &obj1);
- }
- if (obj1.isString()) {
- name = obj1.getString()->copy();
- } else {
- error(-1, "Illegal file spec in link");
- }
- obj1.free();
-
- // error
- } else {
- error(-1, "Illegal file spec in link");
- }
-
- // system-dependent path manipulation
- if (name) {
-#ifdef WIN32
- int i, j;
-
- // "//...." --> "\...."
- // "/x/...." --> "x:\...."
- // "/server/share/...." --> "\\server\share\...."
- // convert escaped slashes to slashes and unescaped slashes to backslashes
- i = 0;
- if (name->getChar(0) == '/') {
- if (name->getLength() >= 2 && name->getChar(1) == '/') {
- name->del(0);
- i = 0;
- } else if (name->getLength() >= 2 &&
- ((name->getChar(1) >= 'a' && name->getChar(1) <= 'z') ||
- (name->getChar(1) >= 'A' && name->getChar(1) <= 'Z')) &&
- (name->getLength() == 2 || name->getChar(2) == '/')) {
- name->setChar(0, name->getChar(1));
- name->setChar(1, ':');
- i = 2;
- } else {
- for (j = 2; j < name->getLength(); ++j) {
- if (name->getChar(j-1) != '\\' &&
- name->getChar(j) == '/') {
- break;
- }
- }
- if (j < name->getLength()) {
- name->setChar(0, '\\');
- name->insert(0, '\\');
- i = 2;
- }
- }
- }
- for (; i < name->getLength(); ++i) {
- if (name->getChar(i) == '/') {
- name->setChar(i, '\\');
- } else if (name->getChar(i) == '\\' &&
- i+1 < name->getLength() &&
- name->getChar(i+1) == '/') {
- name->del(i);
- }
- }
-#else
- // no manipulation needed for Unix
-#endif
- }
-
- return name;
-}
-
-//------------------------------------------------------------------------
-// LinkDest
-//------------------------------------------------------------------------
-
-LinkDest::LinkDest(Array *a) {
- Object obj1, obj2;
-
- // initialize fields
- left = bottom = right = top = zoom = 0;
- ok = gFalse;
-
- // get page
- if (a->getLength() < 2) {
- error(-1, "Annotation destination array is too short");
- return;
- }
- a->getNF(0, &obj1);
- if (obj1.isInt()) {
- pageNum = obj1.getInt() + 1;
- pageIsRef = gFalse;
- } else if (obj1.isRef()) {
- pageRef.num = obj1.getRefNum();
- pageRef.gen = obj1.getRefGen();
- pageIsRef = gTrue;
- } else {
- error(-1, "Bad annotation destination");
- goto err2;
- }
- obj1.free();
-
- // get destination type
- a->get(1, &obj1);
-
- // XYZ link
- if (obj1.isName("XYZ")) {
- kind = destXYZ;
- if (a->getLength() < 3) {
- changeLeft = gFalse;
- } else {
- a->get(2, &obj2);
- if (obj2.isNull()) {
- changeLeft = gFalse;
- } else if (obj2.isNum()) {
- changeLeft = gTrue;
- left = obj2.getNum();
- } else {
- error(-1, "Bad annotation destination position");
- goto err1;
- }
- obj2.free();
- }
- if (a->getLength() < 4) {
- changeTop = gFalse;
- } else {
- a->get(3, &obj2);
- if (obj2.isNull()) {
- changeTop = gFalse;
- } else if (obj2.isNum()) {
- changeTop = gTrue;
- top = obj2.getNum();
- } else {
- error(-1, "Bad annotation destination position");
- goto err1;
- }
- obj2.free();
- }
- if (a->getLength() < 5) {
- changeZoom = gFalse;
- } else {
- a->get(4, &obj2);
- if (obj2.isNull()) {
- changeZoom = gFalse;
- } else if (obj2.isNum()) {
- changeZoom = gTrue;
- zoom = obj2.getNum();
- } else {
- error(-1, "Bad annotation destination position");
- goto err1;
- }
- obj2.free();
- }
-
- // Fit link
- } else if (obj1.isName("Fit")) {
- if (a->getLength() < 2) {
- error(-1, "Annotation destination array is too short");
- goto err2;
- }
- kind = destFit;
-
- // FitH link
- } else if (obj1.isName("FitH")) {
- if (a->getLength() < 3) {
- error(-1, "Annotation destination array is too short");
- goto err2;
- }
- kind = destFitH;
- if (!a->get(2, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- top = obj2.getNum();
- obj2.free();
-
- // FitV link
- } else if (obj1.isName("FitV")) {
- if (a->getLength() < 3) {
- error(-1, "Annotation destination array is too short");
- goto err2;
- }
- kind = destFitV;
- if (!a->get(2, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- left = obj2.getNum();
- obj2.free();
-
- // FitR link
- } else if (obj1.isName("FitR")) {
- if (a->getLength() < 6) {
- error(-1, "Annotation destination array is too short");
- goto err2;
- }
- kind = destFitR;
- if (!a->get(2, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- left = obj2.getNum();
- obj2.free();
- if (!a->get(3, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- bottom = obj2.getNum();
- obj2.free();
- if (!a->get(4, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- right = obj2.getNum();
- obj2.free();
- if (!a->get(5, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- top = obj2.getNum();
- obj2.free();
-
- // FitB link
- } else if (obj1.isName("FitB")) {
- if (a->getLength() < 2) {
- error(-1, "Annotation destination array is too short");
- goto err2;
- }
- kind = destFitB;
-
- // FitBH link
- } else if (obj1.isName("FitBH")) {
- if (a->getLength() < 3) {
- error(-1, "Annotation destination array is too short");
- goto err2;
- }
- kind = destFitBH;
- if (!a->get(2, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- top = obj2.getNum();
- obj2.free();
-
- // FitBV link
- } else if (obj1.isName("FitBV")) {
- if (a->getLength() < 3) {
- error(-1, "Annotation destination array is too short");
- goto err2;
- }
- kind = destFitBV;
- if (!a->get(2, &obj2)->isNum()) {
- error(-1, "Bad annotation destination position");
- kind = destFit;
- }
- left = obj2.getNum();
- obj2.free();
-
- // unknown link kind
- } else {
- error(-1, "Unknown annotation destination type");
- goto err2;
- }
-
- obj1.free();
- ok = gTrue;
- return;
-
- err1:
- obj2.free();
- err2:
- obj1.free();
-}
-
-LinkDest::LinkDest(LinkDest *dest) {
- kind = dest->kind;
- pageIsRef = dest->pageIsRef;
- if (pageIsRef)
- pageRef = dest->pageRef;
- else
- pageNum = dest->pageNum;
- left = dest->left;
- bottom = dest->bottom;
- right = dest->right;
- top = dest->top;
- zoom = dest->zoom;
- changeLeft = dest->changeLeft;
- changeTop = dest->changeTop;
- changeZoom = dest->changeZoom;
- ok = gTrue;
-}
-
-//------------------------------------------------------------------------
-// LinkGoTo
-//------------------------------------------------------------------------
-
-LinkGoTo::LinkGoTo(Object *destObj) {
- dest = NULL;
- namedDest = NULL;
-
- // named destination
- if (destObj->isName()) {
- namedDest = new GString(destObj->getName());
- } else if (destObj->isString()) {
- namedDest = destObj->getString()->copy();
-
- // destination dictionary
- } else if (destObj->isArray()) {
- dest = new LinkDest(destObj->getArray());
- if (!dest->isOk()) {
- delete dest;
- dest = NULL;
- }
-
- // error
- } else {
- error(-1, "Illegal annotation destination");
- }
-}
-
-LinkGoTo::~LinkGoTo() {
- if (dest)
- delete dest;
- if (namedDest)
- delete namedDest;
-}
-
-//------------------------------------------------------------------------
-// LinkGoToR
-//------------------------------------------------------------------------
-
-LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) {
- dest = NULL;
- namedDest = NULL;
-
- // get file name
- fileName = getFileSpecName(fileSpecObj);
-
- // named destination
- if (destObj->isName()) {
- namedDest = new GString(destObj->getName());
- } else if (destObj->isString()) {
- namedDest = destObj->getString()->copy();
-
- // destination dictionary
- } else if (destObj->isArray()) {
- dest = new LinkDest(destObj->getArray());
- if (!dest->isOk()) {
- delete dest;
- dest = NULL;
- }
-
- // error
- } else {
- error(-1, "Illegal annotation destination");
- }
-}
-
-LinkGoToR::~LinkGoToR() {
- if (fileName)
- delete fileName;
- if (dest)
- delete dest;
- if (namedDest)
- delete namedDest;
-}
-
-
-//------------------------------------------------------------------------
-// LinkLaunch
-//------------------------------------------------------------------------
-
-LinkLaunch::LinkLaunch(Object *actionObj) {
- Object obj1, obj2;
-
- fileName = NULL;
- params = NULL;
-
- if (actionObj->isDict()) {
- if (!actionObj->dictLookup("F", &obj1)->isNull()) {
- fileName = getFileSpecName(&obj1);
- } else {
- obj1.free();
-#ifdef WIN32
- if (actionObj->dictLookup("Win", &obj1)->isDict()) {
- obj1.dictLookup("F", &obj2);
- fileName = getFileSpecName(&obj2);
- obj2.free();
- if (obj1.dictLookup("P", &obj2)->isString()) {
- params = obj2.getString()->copy();
- }
- obj2.free();
- } else {
- error(-1, "Bad launch-type link action");
- }
-#else
- //~ This hasn't been defined by Adobe yet, so assume it looks
- //~ just like the Win dictionary until they say otherwise.
- if (actionObj->dictLookup("Unix", &obj1)->isDict()) {
- obj1.dictLookup("F", &obj2);
- fileName = getFileSpecName(&obj2);
- obj2.free();
- if (obj1.dictLookup("P", &obj2)->isString()) {
- params = obj2.getString()->copy();
- }
- obj2.free();
- } else {
- error(-1, "Bad launch-type link action");
- }
-#endif
- }
- obj1.free();
- }
-}
-
-LinkLaunch::~LinkLaunch() {
- if (fileName)
- delete fileName;
- if (params)
- delete params;
-}
-
-//------------------------------------------------------------------------
-// LinkURI
-//------------------------------------------------------------------------
-
-LinkURI::LinkURI(Object *uriObj, GString *baseURI) {
- GString *uri2;
- int n;
- char c;
-
- uri = NULL;
- if (uriObj->isString()) {
- uri2 = uriObj->getString()->copy();
- if (baseURI && baseURI->getLength() > 0) {
- n = strcspn(uri2->getCString(), "/:");
- if (n == uri2->getLength() || uri2->getChar(n) == '/') {
- uri = baseURI->copy();
- c = uri->getChar(uri->getLength() - 1);
- if (c == '/' || c == '?') {
- if (uri2->getChar(0) == '/') {
- uri2->del(0);
- }
- } else {
- if (uri2->getChar(0) != '/') {
- uri->append('/');
- }
- }
- uri->append(uri2);
- delete uri2;
- } else {
- uri = uri2;
- }
- } else {
- uri = uri2;
- }
- } else {
- error(-1, "Illegal URI-type link");
- }
-}
-
-LinkURI::~LinkURI() {
- if (uri)
- delete uri;
-}
-
-//------------------------------------------------------------------------
-// LinkNamed
-//------------------------------------------------------------------------
-
-LinkNamed::LinkNamed(Object *nameObj) {
- name = NULL;
- if (nameObj->isName()) {
- name = new GString(nameObj->getName());
- }
-}
-
-LinkNamed::~LinkNamed() {
- if (name) {
- delete name;
- }
-}
-
-//------------------------------------------------------------------------
-// LinkMovie
-//------------------------------------------------------------------------
-
-LinkMovie::LinkMovie(Object *annotObj, Object *titleObj) {
- annotRef.num = -1;
- title = NULL;
- if (annotObj->isRef()) {
- annotRef = annotObj->getRef();
- } else if (titleObj->isString()) {
- title = titleObj->getString()->copy();
- } else {
- error(-1, "Movie action is missing both the Annot and T keys");
- }
-}
-
-LinkMovie::~LinkMovie() {
- if (title) {
- delete title;
- }
-}
-
-//------------------------------------------------------------------------
-// LinkUnknown
-//------------------------------------------------------------------------
-
-LinkUnknown::LinkUnknown(char *actionA) {
- action = new GString(actionA);
-}
-
-LinkUnknown::~LinkUnknown() {
- delete action;
-}
-
-//------------------------------------------------------------------------
-// Link
-//------------------------------------------------------------------------
-
-Link::Link(Dict *dict, GString *baseURI) {
- Object obj1, obj2;
- double t;
-
- action = NULL;
- ok = gFalse;
-
- // get rectangle
- if (!dict->lookup("Rect", &obj1)->isArray()) {
- error(-1, "Annotation rectangle is wrong type");
- goto err2;
- }
- if (!obj1.arrayGet(0, &obj2)->isNum()) {
- error(-1, "Bad annotation rectangle");
- goto err1;
- }
- x1 = obj2.getNum();
- obj2.free();
- if (!obj1.arrayGet(1, &obj2)->isNum()) {
- error(-1, "Bad annotation rectangle");
- goto err1;
- }
- y1 = obj2.getNum();
- obj2.free();
- if (!obj1.arrayGet(2, &obj2)->isNum()) {
- error(-1, "Bad annotation rectangle");
- goto err1;
- }
- x2 = obj2.getNum();
- obj2.free();
- if (!obj1.arrayGet(3, &obj2)->isNum()) {
- error(-1, "Bad annotation rectangle");
- goto err1;
- }
- y2 = obj2.getNum();
- obj2.free();
- obj1.free();
- if (x1 > x2) {
- t = x1;
- x1 = x2;
- x2 = t;
- }
- if (y1 > y2) {
- t = y1;
- y1 = y2;
- y2 = t;
- }
-
- // look for destination
- if (!dict->lookup("Dest", &obj1)->isNull()) {
- action = LinkAction::parseDest(&obj1);
-
- // look for action
- } else {
- obj1.free();
- if (dict->lookup("A", &obj1)->isDict()) {
- action = LinkAction::parseAction(&obj1, baseURI);
- }
- }
- obj1.free();
-
- // check for bad action
- if (action) {
- ok = gTrue;
- }
-
- return;
-
- err1:
- obj2.free();
- err2:
- obj1.free();
-}
-
-Link::~Link() {
- if (action) {
- delete action;
- }
-}
-
-//------------------------------------------------------------------------
-// Links
-//------------------------------------------------------------------------
-
-Links::Links(Object *annots, GString *baseURI) {
- Link *link;
- Object obj1, obj2;
- int size;
- int i;
-
- links = NULL;
- size = 0;
- numLinks = 0;
-
- if (annots->isArray()) {
- for (i = 0; i < annots->arrayGetLength(); ++i) {
- if (annots->arrayGet(i, &obj1)->isDict()) {
- if (obj1.dictLookup("Subtype", &obj2)->isName("Link")) {
- link = new Link(obj1.getDict(), baseURI);
- if (link->isOk()) {
- if (numLinks >= size) {
- size += 16;
- links = (Link **)greallocn(links, size, sizeof(Link *));
- }
- links[numLinks++] = link;
- } else {
- delete link;
- }
- }
- obj2.free();
- }
- obj1.free();
- }
- }
-}
-
-Links::~Links() {
- int i;
-
- for (i = 0; i < numLinks; ++i)
- delete links[i];
- gfree(links);
-}
-
-LinkAction *Links::find(double x, double y) {
- int i;
-
- for (i = numLinks - 1; i >= 0; --i) {
- if (links[i]->inRect(x, y)) {
- return links[i]->getAction();
- }
- }
- return NULL;
-}
-
-GBool Links::onLink(double x, double y) {
- int i;
-
- for (i = 0; i < numLinks; ++i) {
- if (links[i]->inRect(x, y))
- return gTrue;
- }
- return gFalse;
-}
diff --git a/Build/source/libs/xpdf/xpdf/Link.h b/Build/source/libs/xpdf/xpdf/Link.h
deleted file mode 100644
index 698f2c85294..00000000000
--- a/Build/source/libs/xpdf/xpdf/Link.h
+++ /dev/null
@@ -1,369 +0,0 @@
-//========================================================================
-//
-// Link.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef LINK_H
-#define LINK_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "Object.h"
-
-class GString;
-class Array;
-class Dict;
-
-//------------------------------------------------------------------------
-// LinkAction
-//------------------------------------------------------------------------
-
-enum LinkActionKind {
- actionGoTo, // go to destination
- actionGoToR, // go to destination in new file
- actionLaunch, // launch app (or open document)
- actionURI, // URI
- actionNamed, // named action
- actionMovie, // movie action
- actionUnknown // anything else
-};
-
-class LinkAction {
-public:
-
- // Destructor.
- virtual ~LinkAction() {}
-
- // Was the LinkAction created successfully?
- virtual GBool isOk() = 0;
-
- // Check link action type.
- virtual LinkActionKind getKind() = 0;
-
- // Parse a destination (old-style action) name, string, or array.
- static LinkAction *parseDest(Object *obj);
-
- // Parse an action dictionary.
- static LinkAction *parseAction(Object *obj, GString *baseURI = NULL);
-
- // Extract a file name from a file specification (string or
- // dictionary).
- static GString *getFileSpecName(Object *fileSpecObj);
-};
-
-//------------------------------------------------------------------------
-// LinkDest
-//------------------------------------------------------------------------
-
-enum LinkDestKind {
- destXYZ,
- destFit,
- destFitH,
- destFitV,
- destFitR,
- destFitB,
- destFitBH,
- destFitBV
-};
-
-class LinkDest {
-public:
-
- // Build a LinkDest from the array.
- LinkDest(Array *a);
-
- // Copy a LinkDest.
- LinkDest *copy() { return new LinkDest(this); }
-
- // Was the LinkDest created successfully?
- GBool isOk() { return ok; }
-
- // Accessors.
- LinkDestKind getKind() { return kind; }
- GBool isPageRef() { return pageIsRef; }
- int getPageNum() { return pageNum; }
- Ref getPageRef() { return pageRef; }
- double getLeft() { return left; }
- double getBottom() { return bottom; }
- double getRight() { return right; }
- double getTop() { return top; }
- double getZoom() { return zoom; }
- GBool getChangeLeft() { return changeLeft; }
- GBool getChangeTop() { return changeTop; }
- GBool getChangeZoom() { return changeZoom; }
-
-private:
-
- LinkDestKind kind; // destination type
- GBool pageIsRef; // is the page a reference or number?
- union {
- Ref pageRef; // reference to page
- int pageNum; // one-relative page number
- };
- double left, bottom; // position
- double right, top;
- double zoom; // zoom factor
- GBool changeLeft, changeTop; // for destXYZ links, which position
- GBool changeZoom; // components to change
- GBool ok; // set if created successfully
-
- LinkDest(LinkDest *dest);
-};
-
-//------------------------------------------------------------------------
-// LinkGoTo
-//------------------------------------------------------------------------
-
-class LinkGoTo: public LinkAction {
-public:
-
- // Build a LinkGoTo from a destination (dictionary, name, or string).
- LinkGoTo(Object *destObj);
-
- // Destructor.
- virtual ~LinkGoTo();
-
- // Was the LinkGoTo created successfully?
- virtual GBool isOk() { return dest || namedDest; }
-
- // Accessors.
- virtual LinkActionKind getKind() { return actionGoTo; }
- LinkDest *getDest() { return dest; }
- GString *getNamedDest() { return namedDest; }
-
-private:
-
- LinkDest *dest; // regular destination (NULL for remote
- // link with bad destination)
- GString *namedDest; // named destination (only one of dest and
- // and namedDest may be non-NULL)
-};
-
-//------------------------------------------------------------------------
-// LinkGoToR
-//------------------------------------------------------------------------
-
-class LinkGoToR: public LinkAction {
-public:
-
- // Build a LinkGoToR from a file spec (dictionary) and destination
- // (dictionary, name, or string).
- LinkGoToR(Object *fileSpecObj, Object *destObj);
-
- // Destructor.
- virtual ~LinkGoToR();
-
- // Was the LinkGoToR created successfully?
- virtual GBool isOk() { return fileName && (dest || namedDest); }
-
- // Accessors.
- virtual LinkActionKind getKind() { return actionGoToR; }
- GString *getFileName() { return fileName; }
- LinkDest *getDest() { return dest; }
- GString *getNamedDest() { return namedDest; }
-
-private:
-
- GString *fileName; // file name
- LinkDest *dest; // regular destination (NULL for remote
- // link with bad destination)
- GString *namedDest; // named destination (only one of dest and
- // and namedDest may be non-NULL)
-};
-
-//------------------------------------------------------------------------
-// LinkLaunch
-//------------------------------------------------------------------------
-
-class LinkLaunch: public LinkAction {
-public:
-
- // Build a LinkLaunch from an action dictionary.
- LinkLaunch(Object *actionObj);
-
- // Destructor.
- virtual ~LinkLaunch();
-
- // Was the LinkLaunch created successfully?
- virtual GBool isOk() { return fileName != NULL; }
-
- // Accessors.
- virtual LinkActionKind getKind() { return actionLaunch; }
- GString *getFileName() { return fileName; }
- GString *getParams() { return params; }
-
-private:
-
- GString *fileName; // file name
- GString *params; // parameters
-};
-
-//------------------------------------------------------------------------
-// LinkURI
-//------------------------------------------------------------------------
-
-class LinkURI: public LinkAction {
-public:
-
- // Build a LinkURI given the URI (string) and base URI.
- LinkURI(Object *uriObj, GString *baseURI);
-
- // Destructor.
- virtual ~LinkURI();
-
- // Was the LinkURI created successfully?
- virtual GBool isOk() { return uri != NULL; }
-
- // Accessors.
- virtual LinkActionKind getKind() { return actionURI; }
- GString *getURI() { return uri; }
-
-private:
-
- GString *uri; // the URI
-};
-
-//------------------------------------------------------------------------
-// LinkNamed
-//------------------------------------------------------------------------
-
-class LinkNamed: public LinkAction {
-public:
-
- // Build a LinkNamed given the action name.
- LinkNamed(Object *nameObj);
-
- virtual ~LinkNamed();
-
- virtual GBool isOk() { return name != NULL; }
-
- virtual LinkActionKind getKind() { return actionNamed; }
- GString *getName() { return name; }
-
-private:
-
- GString *name;
-};
-
-//------------------------------------------------------------------------
-// LinkMovie
-//------------------------------------------------------------------------
-
-class LinkMovie: public LinkAction {
-public:
-
- LinkMovie(Object *annotObj, Object *titleObj);
-
- virtual ~LinkMovie();
-
- virtual GBool isOk() { return annotRef.num >= 0 || title != NULL; }
-
- virtual LinkActionKind getKind() { return actionMovie; }
- GBool hasAnnotRef() { return annotRef.num >= 0; }
- Ref *getAnnotRef() { return &annotRef; }
- GString *getTitle() { return title; }
-
-private:
-
- Ref annotRef;
- GString *title;
-};
-
-//------------------------------------------------------------------------
-// LinkUnknown
-//------------------------------------------------------------------------
-
-class LinkUnknown: public LinkAction {
-public:
-
- // Build a LinkUnknown with the specified action type.
- LinkUnknown(char *actionA);
-
- // Destructor.
- virtual ~LinkUnknown();
-
- // Was the LinkUnknown create successfully?
- virtual GBool isOk() { return action != NULL; }
-
- // Accessors.
- virtual LinkActionKind getKind() { return actionUnknown; }
- GString *getAction() { return action; }
-
-private:
-
- GString *action; // action subtype
-};
-
-//------------------------------------------------------------------------
-// Link
-//------------------------------------------------------------------------
-
-class Link {
-public:
-
- // Construct a link, given its dictionary.
- Link(Dict *dict, GString *baseURI);
-
- // Destructor.
- ~Link();
-
- // Was the link created successfully?
- GBool isOk() { return ok; }
-
- // Check if point is inside the link rectangle.
- GBool inRect(double x, double y)
- { return x1 <= x && x <= x2 && y1 <= y && y <= y2; }
-
- // Get action.
- LinkAction *getAction() { return action; }
-
- // Get the link rectangle.
- void getRect(double *xa1, double *ya1, double *xa2, double *ya2)
- { *xa1 = x1; *ya1 = y1; *xa2 = x2; *ya2 = y2; }
-
-private:
-
- double x1, y1; // lower left corner
- double x2, y2; // upper right corner
- LinkAction *action; // action
- GBool ok; // is link valid?
-};
-
-//------------------------------------------------------------------------
-// Links
-//------------------------------------------------------------------------
-
-class Links {
-public:
-
- // Extract links from array of annotations.
- Links(Object *annots, GString *baseURI);
-
- // Destructor.
- ~Links();
-
- // Iterate through list of links.
- int getNumLinks() { return numLinks; }
- Link *getLink(int i) { return links[i]; }
-
- // If point <x>,<y> is in a link, return the associated action;
- // else return NULL.
- LinkAction *find(double x, double y);
-
- // Return true if <x>,<y> is in a link.
- GBool onLink(double x, double y);
-
-private:
-
- Link **links;
- int numLinks;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Makefile.dep b/Build/source/libs/xpdf/xpdf/Makefile.dep
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/Build/source/libs/xpdf/xpdf/Makefile.dep
+++ /dev/null
diff --git a/Build/source/libs/xpdf/xpdf/Makefile.in b/Build/source/libs/xpdf/xpdf/Makefile.in
deleted file mode 100644
index 5caf12d7876..00000000000
--- a/Build/source/libs/xpdf/xpdf/Makefile.in
+++ /dev/null
@@ -1,127 +0,0 @@
-# @configure_input@
-
-#========================================================================
-#
-# Xpdf Makefile
-#
-# Copyright 1996 Derek B. Noonburg
-#
-# Heavily modified for pdftex by Thomas Esser, 1998, 1999
-#
-# $Id: Makefile.in 494 2008-07-14 21:35:09Z oneiros $
-#========================================================================
-
-# ------------------------------------------------------------------------
-# Changed by Martin Schröder <martin@pdftex.org>
-# $Id: Makefile.in 494 2008-07-14 21:35:09Z oneiros $
-# Changelog:
-# ------------------------------------------------------------------------
-# r493 | oneiros | 2008-07-14 23:32:04 +0200 (Mo, 14 Jul 2008) | 2 lines
-#
-# Also set -DDISABLE_OUTLINE (pdftoepdf.cc had conflicting options)
-#
-# ------------------------------------------------------------------------
-# r390 | oneiros | 2008-03-23 16:51:58 +0100 (So, 23 Mär 2008) | 2 lines
-#
-# Merge changes since r357 to everything but pdftexdir from trunk into stable
-#
-# ------------------------------------------------------------------------
-# r298 | oneiros | 2007-11-30 14:38:28 +0100 (Fr, 30 Nov 2007) | 2 lines
-#
-# sort PDFTOEPDF_OBJS
-#
-# ------------------------------------------------------------------------
-# r41 | ms | 2005-08-25 14:00:00 +0200 (Do, 25 Aug 2005) | 2 lines
-#
-# 1.30.2
-#
-# ------------------------------------------------------------------------
-# r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-#
-# 1.30.1
-#
-# ------------------------------------------------------------------------
-# r33 | ms | 2005-08-01 14:01:00 +0200 (Mo, 01 Aug 2005) | 2 lines
-#
-# 1.30.0
-#
-# ------------------------------------------------------------------------
-# r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-#
-# 1.20a
-#
-# ------------------------------------------------------------------------
-# r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-#
-# released v1.11b
-#
-# ------------------------------------------------------------------------
-# r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-#
-# Moved sources to src
-#
-# ------------------------------------------------------------------------
-# r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-#
-# 1.11a
-# ------------------------------------------------------------------------
-
-VPATH = @srcdir@
-srcdir = @srcdir@
-
-srcdirparent = $(srcdir)/..
-goodir = $(srcdirparent)/goo
-fofidir=$(srcdirparent)/fofi
-
-CXXFLAGS = @CXXFLAGS@
-CXX = @CXX@
-ALLCXXFLAGS = $(CXXFLAGS) -DHAVE_CONFIG_H $(XCFLAGS) \
- -I.. -I$(srcdirparent) -I$(goodir) -I$(fofidir) -I. -I$(srcdir) \
- -DPDF_PARSER_ONLY
-
-kpse_include ../../texk/make/library.mk
-
-.SUFFIXES:
-.SUFFIXES: .cc .o
-.cc.o:
- $(CXX) $(ALLCXXFLAGS) -c $<
-
-#------------------------------------------------------------------------
-
-PDFTOEPDF_OBJS = \
- Array.o BuiltinFont.o BuiltinFontTables.o Catalog.o \
- CharCodeToUnicode.o CMap.o Decrypt.o Dict.o Error.o \
- FontEncodingTables.o Function.o GfxFont.o GfxState.o\
- GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o JPXStream.o \
- Lexer.o Link.o NameToCharCode.o Object.o Outline.o OutputDev.o \
- Page.o Parser.o PDFDocEncoding.o PDFDoc.o PSTokenizer.o \
- SecurityHandler.o Stream.o UnicodeMap.o XRef.o
-
-libxpdf.a: $(PDFTOEPDF_OBJS)
- rm -f $@
- $(AR) $(ARFLAGS) $@ $(PDFTOEPDF_OBJS)
- $(RANLIB) $@
-
-#------------------------------------------------------------------------
-
-mostlyclean clean:
- rm -f $(PDFTOEPDF_OBJS) libxpdf.a
- rm -f Makefile.bak
-
-distclean maintainer-clean extraclean: clean
- rm -f Makefile c-auto.h
-
-#------------------------------------------------------------------------
-
-depend:
- srcdirparent=`(cd $(srcdirparent) >/dev/null; pwd)`; \
- $(CXX) $(ALLCXXFLAGS) -MM $(srcdir)/*.cc \
- | sed 's|$(srcdir)|$$(srcdir)|g' \
- | sed 's|'$$srcdirparent/'|$$(srcdirparent)/|g' \
- | sed 's|$$(srcdirparent)/goo/|$$(goodir)/|g' \
- | sed 's|$$(srcdirparent)/fofi/|$$(fofidir)/|g' \
- > $(srcdir)/depend.mk
-
-#------------------------------------------------------------------------
-
-kpse_include xpdf/depend.mk
diff --git a/Build/source/libs/xpdf/xpdf/NameToCharCode.cc b/Build/source/libs/xpdf/xpdf/NameToCharCode.cc
deleted file mode 100644
index 7ebf4e165c9..00000000000
--- a/Build/source/libs/xpdf/xpdf/NameToCharCode.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-//========================================================================
-//
-// NameToCharCode.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <string.h>
-#include "gmem.h"
-#include "NameToCharCode.h"
-
-//------------------------------------------------------------------------
-
-struct NameToCharCodeEntry {
- char *name;
- CharCode c;
-};
-
-//------------------------------------------------------------------------
-
-NameToCharCode::NameToCharCode() {
- int i;
-
- size = 31;
- len = 0;
- tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry));
- for (i = 0; i < size; ++i) {
- tab[i].name = NULL;
- }
-}
-
-NameToCharCode::~NameToCharCode() {
- int i;
-
- for (i = 0; i < size; ++i) {
- if (tab[i].name) {
- gfree(tab[i].name);
- }
- }
- gfree(tab);
-}
-
-void NameToCharCode::add(char *name, CharCode c) {
- NameToCharCodeEntry *oldTab;
- int h, i, oldSize;
-
- // expand the table if necessary
- if (len >= size / 2) {
- oldSize = size;
- oldTab = tab;
- size = 2*size + 1;
- tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry));
- for (h = 0; h < size; ++h) {
- tab[h].name = NULL;
- }
- for (i = 0; i < oldSize; ++i) {
- if (oldTab[i].name) {
- h = hash(oldTab[i].name);
- while (tab[h].name) {
- if (++h == size) {
- h = 0;
- }
- }
- tab[h] = oldTab[i];
- }
- }
- gfree(oldTab);
- }
-
- // add the new name
- h = hash(name);
- while (tab[h].name && strcmp(tab[h].name, name)) {
- if (++h == size) {
- h = 0;
- }
- }
- if (!tab[h].name) {
- tab[h].name = copyString(name);
- }
- tab[h].c = c;
-
- ++len;
-}
-
-CharCode NameToCharCode::lookup(char *name) {
- int h;
-
- h = hash(name);
- while (tab[h].name) {
- if (!strcmp(tab[h].name, name)) {
- return tab[h].c;
- }
- if (++h == size) {
- h = 0;
- }
- }
- return 0;
-}
-
-int NameToCharCode::hash(char *name) {
- char *p;
- unsigned int h;
-
- h = 0;
- for (p = name; *p; ++p) {
- h = 17 * h + (int)(*p & 0xff);
- }
- return (int)(h % size);
-}
diff --git a/Build/source/libs/xpdf/xpdf/NameToCharCode.h b/Build/source/libs/xpdf/xpdf/NameToCharCode.h
deleted file mode 100644
index 65453c3a3eb..00000000000
--- a/Build/source/libs/xpdf/xpdf/NameToCharCode.h
+++ /dev/null
@@ -1,42 +0,0 @@
-//========================================================================
-//
-// NameToCharCode.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef NAMETOCHARCODE_H
-#define NAMETOCHARCODE_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "CharTypes.h"
-
-struct NameToCharCodeEntry;
-
-//------------------------------------------------------------------------
-
-class NameToCharCode {
-public:
-
- NameToCharCode();
- ~NameToCharCode();
-
- void add(char *name, CharCode c);
- CharCode lookup(char *name);
-
-private:
-
- int hash(char *name);
-
- NameToCharCodeEntry *tab;
- int size;
- int len;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/NameToUnicodeTable.h b/Build/source/libs/xpdf/xpdf/NameToUnicodeTable.h
deleted file mode 100644
index c5ecba4966e..00000000000
--- a/Build/source/libs/xpdf/xpdf/NameToUnicodeTable.h
+++ /dev/null
@@ -1,1097 +0,0 @@
-//========================================================================
-//
-// NameToUnicodeTable.h
-//
-// Copyright 2001-2004 Glyph & Cog, LLC
-//
-//========================================================================
-
-static struct {
- Unicode u;
- char *name;
-} nameToUnicodeTab[] = {
- {0x0021, "!"},
- {0x0023, "#"},
- {0x0024, "$"},
- {0x0025, "%"},
- {0x0026, "&"},
- {0x0027, "'"},
- {0x0028, "("},
- {0x0029, ")"},
- {0x002a, "*"},
- {0x002b, "+"},
- {0x002c, ","},
- {0x002d, "-"},
- {0x002e, "."},
- {0x002f, "/"},
- {0x0030, "0"},
- {0x0031, "1"},
- {0x0032, "2"},
- {0x0033, "3"},
- {0x0034, "4"},
- {0x0035, "5"},
- {0x0036, "6"},
- {0x0037, "7"},
- {0x0038, "8"},
- {0x0039, "9"},
- {0x003a, ":"},
- {0x003b, ";"},
- {0x003c, "<"},
- {0x003d, "="},
- {0x003e, ">"},
- {0x003f, "?"},
- {0x0040, "@"},
- {0x0041, "A"},
- {0x00c6, "AE"},
- {0x01fc, "AEacute"},
- {0xf7e6, "AEsmall"},
- {0x00c1, "Aacute"},
- {0xf7e1, "Aacutesmall"},
- {0x0102, "Abreve"},
- {0x00c2, "Acircumflex"},
- {0xf7e2, "Acircumflexsmall"},
- {0xf6c9, "Acute"},
- {0xf7b4, "Acutesmall"},
- {0x00c4, "Adieresis"},
- {0xf7e4, "Adieresissmall"},
- {0x00c0, "Agrave"},
- {0xf7e0, "Agravesmall"},
- {0x0391, "Alpha"},
- {0x0386, "Alphatonos"},
- {0x0100, "Amacron"},
- {0x0104, "Aogonek"},
- {0x00c5, "Aring"},
- {0x01fa, "Aringacute"},
- {0xf7e5, "Aringsmall"},
- {0xf761, "Asmall"},
- {0x00c3, "Atilde"},
- {0xf7e3, "Atildesmall"},
- {0x0042, "B"},
- {0x0392, "Beta"},
- {0xf6f4, "Brevesmall"},
- {0xf762, "Bsmall"},
- {0x0043, "C"},
- {0x0106, "Cacute"},
- {0xf6ca, "Caron"},
- {0xf6f5, "Caronsmall"},
- {0x010c, "Ccaron"},
- {0x00c7, "Ccedilla"},
- {0xf7e7, "Ccedillasmall"},
- {0x0108, "Ccircumflex"},
- {0x010a, "Cdotaccent"},
- {0xf7b8, "Cedillasmall"},
- {0x03a7, "Chi"},
- {0xf6f6, "Circumflexsmall"},
- {0xf763, "Csmall"},
- {0x0044, "D"},
- {0x010e, "Dcaron"},
- {0x0110, "Dcroat"},
- {0x2206, "Delta"},
- {0xf6cb, "Dieresis"},
- {0xf6cc, "DieresisAcute"},
- {0xf6cd, "DieresisGrave"},
- {0xf7a8, "Dieresissmall"},
- {0xf6f7, "Dotaccentsmall"},
- {0xf764, "Dsmall"},
- {0x0045, "E"},
- {0x00c9, "Eacute"},
- {0xf7e9, "Eacutesmall"},
- {0x0114, "Ebreve"},
- {0x011a, "Ecaron"},
- {0x00ca, "Ecircumflex"},
- {0xf7ea, "Ecircumflexsmall"},
- {0x00cb, "Edieresis"},
- {0xf7eb, "Edieresissmall"},
- {0x0116, "Edotaccent"},
- {0x00c8, "Egrave"},
- {0xf7e8, "Egravesmall"},
- {0x0112, "Emacron"},
- {0x014a, "Eng"},
- {0x0118, "Eogonek"},
- {0x0395, "Epsilon"},
- {0x0388, "Epsilontonos"},
- {0xf765, "Esmall"},
- {0x0397, "Eta"},
- {0x0389, "Etatonos"},
- {0x00d0, "Eth"},
- {0xf7f0, "Ethsmall"},
- {0x20ac, "Euro"},
- {0x0046, "F"},
- {0xf766, "Fsmall"},
- {0x0047, "G"},
- {0x0393, "Gamma"},
- {0x011e, "Gbreve"},
- {0x01e6, "Gcaron"},
- {0x011c, "Gcircumflex"},
- {0x0122, "Gcommaaccent"},
- {0x0120, "Gdotaccent"},
- {0xf6ce, "Grave"},
- {0xf760, "Gravesmall"},
- {0xf767, "Gsmall"},
- {0x0048, "H"},
- {0x25cf, "H18533"},
- {0x25aa, "H18543"},
- {0x25ab, "H18551"},
- {0x25a1, "H22073"},
- {0x0126, "Hbar"},
- {0x0124, "Hcircumflex"},
- {0xf768, "Hsmall"},
- {0xf6cf, "Hungarumlaut"},
- {0xf6f8, "Hungarumlautsmall"},
- {0x0049, "I"},
- {0x0132, "IJ"},
- {0x00cd, "Iacute"},
- {0xf7ed, "Iacutesmall"},
- {0x012c, "Ibreve"},
- {0x00ce, "Icircumflex"},
- {0xf7ee, "Icircumflexsmall"},
- {0x00cf, "Idieresis"},
- {0xf7ef, "Idieresissmall"},
- {0x0130, "Idotaccent"},
- {0x2111, "Ifraktur"},
- {0x00cc, "Igrave"},
- {0xf7ec, "Igravesmall"},
- {0x012a, "Imacron"},
- {0x012e, "Iogonek"},
- {0x0399, "Iota"},
- {0x03aa, "Iotadieresis"},
- {0x038a, "Iotatonos"},
- {0xf769, "Ismall"},
- {0x0128, "Itilde"},
- {0x004a, "J"},
- {0x0134, "Jcircumflex"},
- {0xf76a, "Jsmall"},
- {0x004b, "K"},
- {0x039a, "Kappa"},
- {0x0136, "Kcommaaccent"},
- {0xf76b, "Ksmall"},
- {0x004c, "L"},
- {0xf6bf, "LL"},
- {0x0139, "Lacute"},
- {0x039b, "Lambda"},
- {0x013d, "Lcaron"},
- {0x013b, "Lcommaaccent"},
- {0x013f, "Ldot"},
- {0x0141, "Lslash"},
- {0xf6f9, "Lslashsmall"},
- {0xf76c, "Lsmall"},
- {0x004d, "M"},
- {0xf6d0, "Macron"},
- {0xf7af, "Macronsmall"},
- {0xf76d, "Msmall"},
- {0x039c, "Mu"},
- {0x004e, "N"},
- {0x0143, "Nacute"},
- {0x0147, "Ncaron"},
- {0x0145, "Ncommaaccent"},
- {0xf76e, "Nsmall"},
- {0x00d1, "Ntilde"},
- {0xf7f1, "Ntildesmall"},
- {0x039d, "Nu"},
- {0x004f, "O"},
- {0x0152, "OE"},
- {0xf6fa, "OEsmall"},
- {0x00d3, "Oacute"},
- {0xf7f3, "Oacutesmall"},
- {0x014e, "Obreve"},
- {0x00d4, "Ocircumflex"},
- {0xf7f4, "Ocircumflexsmall"},
- {0x00d6, "Odieresis"},
- {0xf7f6, "Odieresissmall"},
- {0xf6fb, "Ogoneksmall"},
- {0x00d2, "Ograve"},
- {0xf7f2, "Ogravesmall"},
- {0x01a0, "Ohorn"},
- {0x0150, "Ohungarumlaut"},
- {0x014c, "Omacron"},
- {0x2126, "Omega"},
- {0x038f, "Omegatonos"},
- {0x039f, "Omicron"},
- {0x038c, "Omicrontonos"},
- {0x00d8, "Oslash"},
- {0x01fe, "Oslashacute"},
- {0xf7f8, "Oslashsmall"},
- {0xf76f, "Osmall"},
- {0x00d5, "Otilde"},
- {0xf7f5, "Otildesmall"},
- {0x0050, "P"},
- {0x03a6, "Phi"},
- {0x03a0, "Pi"},
- {0x03a8, "Psi"},
- {0xf770, "Psmall"},
- {0x0051, "Q"},
- {0xf771, "Qsmall"},
- {0x0052, "R"},
- {0x0154, "Racute"},
- {0x0158, "Rcaron"},
- {0x0156, "Rcommaaccent"},
- {0x211c, "Rfraktur"},
- {0x03a1, "Rho"},
- {0xf6fc, "Ringsmall"},
- {0xf772, "Rsmall"},
- {0x0053, "S"},
- {0x250c, "SF010000"},
- {0x2514, "SF020000"},
- {0x2510, "SF030000"},
- {0x2518, "SF040000"},
- {0x253c, "SF050000"},
- {0x252c, "SF060000"},
- {0x2534, "SF070000"},
- {0x251c, "SF080000"},
- {0x2524, "SF090000"},
- {0x2500, "SF100000"},
- {0x2502, "SF110000"},
- {0x2561, "SF190000"},
- {0x2562, "SF200000"},
- {0x2556, "SF210000"},
- {0x2555, "SF220000"},
- {0x2563, "SF230000"},
- {0x2551, "SF240000"},
- {0x2557, "SF250000"},
- {0x255d, "SF260000"},
- {0x255c, "SF270000"},
- {0x255b, "SF280000"},
- {0x255e, "SF360000"},
- {0x255f, "SF370000"},
- {0x255a, "SF380000"},
- {0x2554, "SF390000"},
- {0x2569, "SF400000"},
- {0x2566, "SF410000"},
- {0x2560, "SF420000"},
- {0x2550, "SF430000"},
- {0x256c, "SF440000"},
- {0x2567, "SF450000"},
- {0x2568, "SF460000"},
- {0x2564, "SF470000"},
- {0x2565, "SF480000"},
- {0x2559, "SF490000"},
- {0x2558, "SF500000"},
- {0x2552, "SF510000"},
- {0x2553, "SF520000"},
- {0x256b, "SF530000"},
- {0x256a, "SF540000"},
- {0x015a, "Sacute"},
- {0x0160, "Scaron"},
- {0xf6fd, "Scaronsmall"},
- {0x015e, "Scedilla"},
- {0x015c, "Scircumflex"},
- {0x0218, "Scommaaccent"},
- {0x03a3, "Sigma"},
- {0xf773, "Ssmall"},
- {0x0054, "T"},
- {0x03a4, "Tau"},
- {0x0166, "Tbar"},
- {0x0164, "Tcaron"},
- {0x0162, "Tcommaaccent"},
- {0x0398, "Theta"},
- {0x00de, "Thorn"},
- {0xf7fe, "Thornsmall"},
- {0xf6fe, "Tildesmall"},
- {0xf774, "Tsmall"},
- {0x0055, "U"},
- {0x00da, "Uacute"},
- {0xf7fa, "Uacutesmall"},
- {0x016c, "Ubreve"},
- {0x00db, "Ucircumflex"},
- {0xf7fb, "Ucircumflexsmall"},
- {0x00dc, "Udieresis"},
- {0xf7fc, "Udieresissmall"},
- {0x00d9, "Ugrave"},
- {0xf7f9, "Ugravesmall"},
- {0x01af, "Uhorn"},
- {0x0170, "Uhungarumlaut"},
- {0x016a, "Umacron"},
- {0x0172, "Uogonek"},
- {0x03a5, "Upsilon"},
- {0x03d2, "Upsilon1"},
- {0x03ab, "Upsilondieresis"},
- {0x038e, "Upsilontonos"},
- {0x016e, "Uring"},
- {0xf775, "Usmall"},
- {0x0168, "Utilde"},
- {0x0056, "V"},
- {0xf776, "Vsmall"},
- {0x0057, "W"},
- {0x1e82, "Wacute"},
- {0x0174, "Wcircumflex"},
- {0x1e84, "Wdieresis"},
- {0x1e80, "Wgrave"},
- {0xf777, "Wsmall"},
- {0x0058, "X"},
- {0x039e, "Xi"},
- {0xf778, "Xsmall"},
- {0x0059, "Y"},
- {0x00dd, "Yacute"},
- {0xf7fd, "Yacutesmall"},
- {0x0176, "Ycircumflex"},
- {0x0178, "Ydieresis"},
- {0xf7ff, "Ydieresissmall"},
- {0x1ef2, "Ygrave"},
- {0xf779, "Ysmall"},
- {0x005a, "Z"},
- {0x0179, "Zacute"},
- {0x017d, "Zcaron"},
- {0xf6ff, "Zcaronsmall"},
- {0x017b, "Zdotaccent"},
- {0x0396, "Zeta"},
- {0xf77a, "Zsmall"},
- {0x0022, "\""},
- {0x005c, "\\"},
- {0x005d, "]"},
- {0x005e, "^"},
- {0x005f, "_"},
- {0x0060, "`"},
- {0x0061, "a"},
- {0x00e1, "aacute"},
- {0x0103, "abreve"},
- {0x00e2, "acircumflex"},
- {0x00b4, "acute"},
- {0x0301, "acutecomb"},
- {0x00e4, "adieresis"},
- {0x00e6, "ae"},
- {0x01fd, "aeacute"},
- {0x2015, "afii00208"},
- {0x0410, "afii10017"},
- {0x0411, "afii10018"},
- {0x0412, "afii10019"},
- {0x0413, "afii10020"},
- {0x0414, "afii10021"},
- {0x0415, "afii10022"},
- {0x0401, "afii10023"},
- {0x0416, "afii10024"},
- {0x0417, "afii10025"},
- {0x0418, "afii10026"},
- {0x0419, "afii10027"},
- {0x041a, "afii10028"},
- {0x041b, "afii10029"},
- {0x041c, "afii10030"},
- {0x041d, "afii10031"},
- {0x041e, "afii10032"},
- {0x041f, "afii10033"},
- {0x0420, "afii10034"},
- {0x0421, "afii10035"},
- {0x0422, "afii10036"},
- {0x0423, "afii10037"},
- {0x0424, "afii10038"},
- {0x0425, "afii10039"},
- {0x0426, "afii10040"},
- {0x0427, "afii10041"},
- {0x0428, "afii10042"},
- {0x0429, "afii10043"},
- {0x042a, "afii10044"},
- {0x042b, "afii10045"},
- {0x042c, "afii10046"},
- {0x042d, "afii10047"},
- {0x042e, "afii10048"},
- {0x042f, "afii10049"},
- {0x0490, "afii10050"},
- {0x0402, "afii10051"},
- {0x0403, "afii10052"},
- {0x0404, "afii10053"},
- {0x0405, "afii10054"},
- {0x0406, "afii10055"},
- {0x0407, "afii10056"},
- {0x0408, "afii10057"},
- {0x0409, "afii10058"},
- {0x040a, "afii10059"},
- {0x040b, "afii10060"},
- {0x040c, "afii10061"},
- {0x040e, "afii10062"},
- {0xf6c4, "afii10063"},
- {0xf6c5, "afii10064"},
- {0x0430, "afii10065"},
- {0x0431, "afii10066"},
- {0x0432, "afii10067"},
- {0x0433, "afii10068"},
- {0x0434, "afii10069"},
- {0x0435, "afii10070"},
- {0x0451, "afii10071"},
- {0x0436, "afii10072"},
- {0x0437, "afii10073"},
- {0x0438, "afii10074"},
- {0x0439, "afii10075"},
- {0x043a, "afii10076"},
- {0x043b, "afii10077"},
- {0x043c, "afii10078"},
- {0x043d, "afii10079"},
- {0x043e, "afii10080"},
- {0x043f, "afii10081"},
- {0x0440, "afii10082"},
- {0x0441, "afii10083"},
- {0x0442, "afii10084"},
- {0x0443, "afii10085"},
- {0x0444, "afii10086"},
- {0x0445, "afii10087"},
- {0x0446, "afii10088"},
- {0x0447, "afii10089"},
- {0x0448, "afii10090"},
- {0x0449, "afii10091"},
- {0x044a, "afii10092"},
- {0x044b, "afii10093"},
- {0x044c, "afii10094"},
- {0x044d, "afii10095"},
- {0x044e, "afii10096"},
- {0x044f, "afii10097"},
- {0x0491, "afii10098"},
- {0x0452, "afii10099"},
- {0x0453, "afii10100"},
- {0x0454, "afii10101"},
- {0x0455, "afii10102"},
- {0x0456, "afii10103"},
- {0x0457, "afii10104"},
- {0x0458, "afii10105"},
- {0x0459, "afii10106"},
- {0x045a, "afii10107"},
- {0x045b, "afii10108"},
- {0x045c, "afii10109"},
- {0x045e, "afii10110"},
- {0x040f, "afii10145"},
- {0x0462, "afii10146"},
- {0x0472, "afii10147"},
- {0x0474, "afii10148"},
- {0xf6c6, "afii10192"},
- {0x045f, "afii10193"},
- {0x0463, "afii10194"},
- {0x0473, "afii10195"},
- {0x0475, "afii10196"},
- {0xf6c7, "afii10831"},
- {0xf6c8, "afii10832"},
- {0x04d9, "afii10846"},
- {0x200e, "afii299"},
- {0x200f, "afii300"},
- {0x200d, "afii301"},
- {0x066a, "afii57381"},
- {0x060c, "afii57388"},
- {0x0660, "afii57392"},
- {0x0661, "afii57393"},
- {0x0662, "afii57394"},
- {0x0663, "afii57395"},
- {0x0664, "afii57396"},
- {0x0665, "afii57397"},
- {0x0666, "afii57398"},
- {0x0667, "afii57399"},
- {0x0668, "afii57400"},
- {0x0669, "afii57401"},
- {0x061b, "afii57403"},
- {0x061f, "afii57407"},
- {0x0621, "afii57409"},
- {0x0622, "afii57410"},
- {0x0623, "afii57411"},
- {0x0624, "afii57412"},
- {0x0625, "afii57413"},
- {0x0626, "afii57414"},
- {0x0627, "afii57415"},
- {0x0628, "afii57416"},
- {0x0629, "afii57417"},
- {0x062a, "afii57418"},
- {0x062b, "afii57419"},
- {0x062c, "afii57420"},
- {0x062d, "afii57421"},
- {0x062e, "afii57422"},
- {0x062f, "afii57423"},
- {0x0630, "afii57424"},
- {0x0631, "afii57425"},
- {0x0632, "afii57426"},
- {0x0633, "afii57427"},
- {0x0634, "afii57428"},
- {0x0635, "afii57429"},
- {0x0636, "afii57430"},
- {0x0637, "afii57431"},
- {0x0638, "afii57432"},
- {0x0639, "afii57433"},
- {0x063a, "afii57434"},
- {0x0640, "afii57440"},
- {0x0641, "afii57441"},
- {0x0642, "afii57442"},
- {0x0643, "afii57443"},
- {0x0644, "afii57444"},
- {0x0645, "afii57445"},
- {0x0646, "afii57446"},
- {0x0648, "afii57448"},
- {0x0649, "afii57449"},
- {0x064a, "afii57450"},
- {0x064b, "afii57451"},
- {0x064c, "afii57452"},
- {0x064d, "afii57453"},
- {0x064e, "afii57454"},
- {0x064f, "afii57455"},
- {0x0650, "afii57456"},
- {0x0651, "afii57457"},
- {0x0652, "afii57458"},
- {0x0647, "afii57470"},
- {0x06a4, "afii57505"},
- {0x067e, "afii57506"},
- {0x0686, "afii57507"},
- {0x0698, "afii57508"},
- {0x06af, "afii57509"},
- {0x0679, "afii57511"},
- {0x0688, "afii57512"},
- {0x0691, "afii57513"},
- {0x06ba, "afii57514"},
- {0x06d2, "afii57519"},
- {0x06d5, "afii57534"},
- {0x20aa, "afii57636"},
- {0x05be, "afii57645"},
- {0x05c3, "afii57658"},
- {0x05d0, "afii57664"},
- {0x05d1, "afii57665"},
- {0x05d2, "afii57666"},
- {0x05d3, "afii57667"},
- {0x05d4, "afii57668"},
- {0x05d5, "afii57669"},
- {0x05d6, "afii57670"},
- {0x05d7, "afii57671"},
- {0x05d8, "afii57672"},
- {0x05d9, "afii57673"},
- {0x05da, "afii57674"},
- {0x05db, "afii57675"},
- {0x05dc, "afii57676"},
- {0x05dd, "afii57677"},
- {0x05de, "afii57678"},
- {0x05df, "afii57679"},
- {0x05e0, "afii57680"},
- {0x05e1, "afii57681"},
- {0x05e2, "afii57682"},
- {0x05e3, "afii57683"},
- {0x05e4, "afii57684"},
- {0x05e5, "afii57685"},
- {0x05e6, "afii57686"},
- {0x05e7, "afii57687"},
- {0x05e8, "afii57688"},
- {0x05e9, "afii57689"},
- {0x05ea, "afii57690"},
- {0xfb2a, "afii57694"},
- {0xfb2b, "afii57695"},
- {0xfb4b, "afii57700"},
- {0xfb1f, "afii57705"},
- {0x05f0, "afii57716"},
- {0x05f1, "afii57717"},
- {0x05f2, "afii57718"},
- {0xfb35, "afii57723"},
- {0x05b4, "afii57793"},
- {0x05b5, "afii57794"},
- {0x05b6, "afii57795"},
- {0x05bb, "afii57796"},
- {0x05b8, "afii57797"},
- {0x05b7, "afii57798"},
- {0x05b0, "afii57799"},
- {0x05b2, "afii57800"},
- {0x05b1, "afii57801"},
- {0x05b3, "afii57802"},
- {0x05c2, "afii57803"},
- {0x05c1, "afii57804"},
- {0x05b9, "afii57806"},
- {0x05bc, "afii57807"},
- {0x05bd, "afii57839"},
- {0x05bf, "afii57841"},
- {0x05c0, "afii57842"},
- {0x02bc, "afii57929"},
- {0x2105, "afii61248"},
- {0x2113, "afii61289"},
- {0x2116, "afii61352"},
- {0x202c, "afii61573"},
- {0x202d, "afii61574"},
- {0x202e, "afii61575"},
- {0x200c, "afii61664"},
- {0x066d, "afii63167"},
- {0x02bd, "afii64937"},
- {0x00e0, "agrave"},
- {0x2135, "aleph"},
- {0x03b1, "alpha"},
- {0x03ac, "alphatonos"},
- {0x0101, "amacron"},
- {0x0026, "ampersand"},
- {0xf726, "ampersandsmall"},
- {0x2220, "angle"},
- {0x2329, "angleleft"},
- {0x232a, "angleright"},
- {0x0387, "anoteleia"},
- {0x0105, "aogonek"},
- {0x2248, "approxequal"},
- {0x00e5, "aring"},
- {0x01fb, "aringacute"},
- {0x2194, "arrowboth"},
- {0x21d4, "arrowdblboth"},
- {0x21d3, "arrowdbldown"},
- {0x21d0, "arrowdblleft"},
- {0x21d2, "arrowdblright"},
- {0x21d1, "arrowdblup"},
- {0x2193, "arrowdown"},
- {0xf8e7, "arrowhorizex"},
- {0x2190, "arrowleft"},
- {0x2192, "arrowright"},
- {0x2191, "arrowup"},
- {0x2195, "arrowupdn"},
- {0x21a8, "arrowupdnbse"},
- {0xf8e6, "arrowvertex"},
- {0x005e, "asciicircum"},
- {0x007e, "asciitilde"},
- {0x002a, "asterisk"},
- {0x2217, "asteriskmath"},
- {0xf6e9, "asuperior"},
- {0x0040, "at"},
- {0x00e3, "atilde"},
- {0x0062, "b"},
- {0x005c, "backslash"},
- {0x007c, "bar"},
- {0x03b2, "beta"},
- {0x2588, "block"},
- {0xf8f4, "braceex"},
- {0x007b, "braceleft"},
- {0xf8f3, "braceleftbt"},
- {0xf8f2, "braceleftmid"},
- {0xf8f1, "bracelefttp"},
- {0x007d, "braceright"},
- {0xf8fe, "bracerightbt"},
- {0xf8fd, "bracerightmid"},
- {0xf8fc, "bracerighttp"},
- {0x005b, "bracketleft"},
- {0xf8f0, "bracketleftbt"},
- {0xf8ef, "bracketleftex"},
- {0xf8ee, "bracketlefttp"},
- {0x005d, "bracketright"},
- {0xf8fb, "bracketrightbt"},
- {0xf8fa, "bracketrightex"},
- {0xf8f9, "bracketrighttp"},
- {0x02d8, "breve"},
- {0x00a6, "brokenbar"},
- {0xf6ea, "bsuperior"},
- {0x2022, "bullet"},
- {0x0063, "c"},
- {0x0107, "cacute"},
- {0x02c7, "caron"},
- {0x21b5, "carriagereturn"},
- {0x010d, "ccaron"},
- {0x00e7, "ccedilla"},
- {0x0109, "ccircumflex"},
- {0x010b, "cdotaccent"},
- {0x00b8, "cedilla"},
- {0x00a2, "cent"},
- {0xf6df, "centinferior"},
- {0xf7a2, "centoldstyle"},
- {0xf6e0, "centsuperior"},
- {0x03c7, "chi"},
- {0x25cb, "circle"},
- {0x2297, "circlemultiply"},
- {0x2295, "circleplus"},
- {0x02c6, "circumflex"},
- {0x2663, "club"},
- {0x003a, "colon"},
- {0x20a1, "colonmonetary"},
- {0x002c, "comma"},
- {0xf6c3, "commaaccent"},
- {0xf6e1, "commainferior"},
- {0xf6e2, "commasuperior"},
- {0x2245, "congruent"},
- {0x00a9, "copyright"},
- {0x00a9, "copyrightsans"},
- {0x00a9, "copyrightserif"},
- {0x00a4, "currency"},
- {0xf6d1, "cyrBreve"},
- {0xf6d2, "cyrFlex"},
- {0xf6d4, "cyrbreve"},
- {0xf6d5, "cyrflex"},
- {0x0064, "d"},
- {0x2020, "dagger"},
- {0x2021, "daggerdbl"},
- {0xf6d3, "dblGrave"},
- {0xf6d6, "dblgrave"},
- {0x010f, "dcaron"},
- {0x0111, "dcroat"},
- {0x00b0, "degree"},
- {0x03b4, "delta"},
- {0x2666, "diamond"},
- {0x00a8, "dieresis"},
- {0xf6d7, "dieresisacute"},
- {0xf6d8, "dieresisgrave"},
- {0x0385, "dieresistonos"},
- {0x00f7, "divide"},
- {0x2593, "dkshade"},
- {0x2584, "dnblock"},
- {0x0024, "dollar"},
- {0xf6e3, "dollarinferior"},
- {0xf724, "dollaroldstyle"},
- {0xf6e4, "dollarsuperior"},
- {0x20ab, "dong"},
- {0x02d9, "dotaccent"},
- {0x0323, "dotbelowcomb"},
- {0x0131, "dotlessi"},
- {0xf6be, "dotlessj"},
- {0x22c5, "dotmath"},
- {0xf6eb, "dsuperior"},
- {0x0065, "e"},
- {0x00e9, "eacute"},
- {0x0115, "ebreve"},
- {0x011b, "ecaron"},
- {0x00ea, "ecircumflex"},
- {0x00eb, "edieresis"},
- {0x0117, "edotaccent"},
- {0x00e8, "egrave"},
- {0x0038, "eight"},
- {0x2088, "eightinferior"},
- {0xf738, "eightoldstyle"},
- {0x2078, "eightsuperior"},
- {0x2208, "element"},
- {0x2026, "ellipsis"},
- {0x0113, "emacron"},
- {0x2014, "emdash"},
- {0x2205, "emptyset"},
- {0x2013, "endash"},
- {0x014b, "eng"},
- {0x0119, "eogonek"},
- {0x03b5, "epsilon"},
- {0x03ad, "epsilontonos"},
- {0x003d, "equal"},
- {0x2261, "equivalence"},
- {0x212e, "estimated"},
- {0xf6ec, "esuperior"},
- {0x03b7, "eta"},
- {0x03ae, "etatonos"},
- {0x00f0, "eth"},
- {0x0021, "exclam"},
- {0x203c, "exclamdbl"},
- {0x00a1, "exclamdown"},
- {0xf7a1, "exclamdownsmall"},
- {0x0021, "exclamleft"},
- {0xf721, "exclamsmall"},
- {0x2203, "existential"},
- {0x0066, "f"},
- {0x2640, "female"},
- {0xfb00, "ff"},
- {0xfb03, "ffi"},
- {0xfb04, "ffl"},
- {0xfb01, "fi"},
- {0x2012, "figuredash"},
- {0x25a0, "filledbox"},
- {0x25ac, "filledrect"},
- {0x0035, "five"},
- {0x215d, "fiveeighths"},
- {0x2085, "fiveinferior"},
- {0xf735, "fiveoldstyle"},
- {0x2075, "fivesuperior"},
- {0xfb02, "fl"},
- {0x0192, "florin"},
- {0x0034, "four"},
- {0x2084, "fourinferior"},
- {0xf734, "fouroldstyle"},
- {0x2074, "foursuperior"},
- {0x2044, "fraction"},
- {0x20a3, "franc"},
- {0x0067, "g"},
- {0x03b3, "gamma"},
- {0x011f, "gbreve"},
- {0x01e7, "gcaron"},
- {0x011d, "gcircumflex"},
- {0x0123, "gcommaaccent"},
- {0x0121, "gdotaccent"},
- {0x00df, "germandbls"},
- {0x2207, "gradient"},
- {0x0060, "grave"},
- {0x0300, "gravecomb"},
- {0x003e, "greater"},
- {0x2265, "greaterequal"},
- {0x00ab, "guillemotleft"},
- {0x00bb, "guillemotright"},
- {0x2039, "guilsinglleft"},
- {0x203a, "guilsinglright"},
- {0x0068, "h"},
- {0x0127, "hbar"},
- {0x0125, "hcircumflex"},
- {0x2665, "heart"},
- {0x0309, "hookabovecomb"},
- {0x2302, "house"},
- {0x02dd, "hungarumlaut"},
- {0x002d, "hyphen"},
- {0xf6e5, "hypheninferior"},
- {0xf6e6, "hyphensuperior"},
- {0x0069, "i"},
- {0x00ed, "iacute"},
- {0x012d, "ibreve"},
- {0x00ee, "icircumflex"},
- {0x00ef, "idieresis"},
- {0x00ec, "igrave"},
- {0x0133, "ij"},
- {0x012b, "imacron"},
- {0x221e, "infinity"},
- {0x222b, "integral"},
- {0x2321, "integralbt"},
- {0xf8f5, "integralex"},
- {0x2320, "integraltp"},
- {0x2229, "intersection"},
- {0x25d8, "invbullet"},
- {0x25d9, "invcircle"},
- {0x263b, "invsmileface"},
- {0x012f, "iogonek"},
- {0x03b9, "iota"},
- {0x03ca, "iotadieresis"},
- {0x0390, "iotadieresistonos"},
- {0x03af, "iotatonos"},
- {0xf6ed, "isuperior"},
- {0x0129, "itilde"},
- {0x006a, "j"},
- {0x0135, "jcircumflex"},
- {0x006b, "k"},
- {0x03ba, "kappa"},
- {0x0137, "kcommaaccent"},
- {0x0138, "kgreenlandic"},
- {0x006c, "l"},
- {0x013a, "lacute"},
- {0x03bb, "lambda"},
- {0x013e, "lcaron"},
- {0x013c, "lcommaaccent"},
- {0x0140, "ldot"},
- {0x003c, "less"},
- {0x2264, "lessequal"},
- {0x258c, "lfblock"},
- {0x20a4, "lira"},
- {0xf6c0, "ll"},
- {0x2227, "logicaland"},
- {0x00ac, "logicalnot"},
- {0x2228, "logicalor"},
- {0x017f, "longs"},
- {0x25ca, "lozenge"},
- {0x0142, "lslash"},
- {0xf6ee, "lsuperior"},
- {0x2591, "ltshade"},
- {0x006d, "m"},
- {0x00af, "macron"},
- {0x2642, "male"},
- {0x2212, "minus"},
- {0x2032, "minute"},
- {0xf6ef, "msuperior"},
- {0x00b5, "mu"},
- {0x00d7, "multiply"},
- {0x266a, "musicalnote"},
- {0x266b, "musicalnotedbl"},
- {0x006e, "n"},
- {0x0144, "nacute"},
- {0x0149, "napostrophe"},
- {0x00a0, "nbspace"},
- {0x0148, "ncaron"},
- {0x0146, "ncommaaccent"},
- {0x0039, "nine"},
- {0x2089, "nineinferior"},
- {0xf739, "nineoldstyle"},
- {0x2079, "ninesuperior"},
- {0x00a0, "nonbreakingspace"},
- {0x2209, "notelement"},
- {0x2260, "notequal"},
- {0x2284, "notsubset"},
- {0x207f, "nsuperior"},
- {0x00f1, "ntilde"},
- {0x03bd, "nu"},
- {0x0023, "numbersign"},
- {0x006f, "o"},
- {0x00f3, "oacute"},
- {0x014f, "obreve"},
- {0x00f4, "ocircumflex"},
- {0x00f6, "odieresis"},
- {0x0153, "oe"},
- {0x02db, "ogonek"},
- {0x00f2, "ograve"},
- {0x01a1, "ohorn"},
- {0x0151, "ohungarumlaut"},
- {0x014d, "omacron"},
- {0x03c9, "omega"},
- {0x03d6, "omega1"},
- {0x03ce, "omegatonos"},
- {0x03bf, "omicron"},
- {0x03cc, "omicrontonos"},
- {0x0031, "one"},
- {0x2024, "onedotenleader"},
- {0x215b, "oneeighth"},
- {0xf6dc, "onefitted"},
- {0x00bd, "onehalf"},
- {0x2081, "oneinferior"},
- {0xf731, "oneoldstyle"},
- {0x00bc, "onequarter"},
- {0x00b9, "onesuperior"},
- {0x2153, "onethird"},
- {0x25e6, "openbullet"},
- {0x00aa, "ordfeminine"},
- {0x00ba, "ordmasculine"},
- {0x221f, "orthogonal"},
- {0x00f8, "oslash"},
- {0x01ff, "oslashacute"},
- {0xf6f0, "osuperior"},
- {0x00f5, "otilde"},
- {0x0070, "p"},
- {0x00b6, "paragraph"},
- {0x0028, "parenleft"},
- {0xf8ed, "parenleftbt"},
- {0xf8ec, "parenleftex"},
- {0x208d, "parenleftinferior"},
- {0x207d, "parenleftsuperior"},
- {0xf8eb, "parenlefttp"},
- {0x0029, "parenright"},
- {0xf8f8, "parenrightbt"},
- {0xf8f7, "parenrightex"},
- {0x208e, "parenrightinferior"},
- {0x207e, "parenrightsuperior"},
- {0xf8f6, "parenrighttp"},
- {0x2202, "partialdiff"},
- {0x0025, "percent"},
- {0x002e, "period"},
- {0x00b7, "periodcentered"},
- {0xf6e7, "periodinferior"},
- {0xf6e8, "periodsuperior"},
- {0x22a5, "perpendicular"},
- {0x2030, "perthousand"},
- {0x20a7, "peseta"},
- {0x03c6, "phi"},
- {0x03d5, "phi1"},
- {0x03c0, "pi"},
- {0x002b, "plus"},
- {0x00b1, "plusminus"},
- {0x211e, "prescription"},
- {0x220f, "product"},
- {0x2282, "propersubset"},
- {0x2283, "propersuperset"},
- {0x221d, "proportional"},
- {0x03c8, "psi"},
- {0x0071, "q"},
- {0x003f, "question"},
- {0x00bf, "questiondown"},
- {0xf7bf, "questiondownsmall"},
- {0xf73f, "questionsmall"},
- {0x0022, "quotedbl"},
- {0x201e, "quotedblbase"},
- {0x201c, "quotedblleft"},
- {0x201d, "quotedblright"},
- {0x2018, "quoteleft"},
- {0x201b, "quotereversed"},
- {0x2019, "quoteright"},
- {0x201a, "quotesinglbase"},
- {0x0027, "quotesingle"},
- {0x0072, "r"},
- {0x0155, "racute"},
- {0x221a, "radical"},
- {0xf8e5, "radicalex"},
- {0x0159, "rcaron"},
- {0x0157, "rcommaaccent"},
- {0x2286, "reflexsubset"},
- {0x2287, "reflexsuperset"},
- {0x00ae, "registered"},
- {0x00ae, "registersans"},
- {0x00ae, "registerserif"},
- {0x2310, "revlogicalnot"},
- {0x03c1, "rho"},
- {0x02da, "ring"},
- {0xf6f1, "rsuperior"},
- {0x2590, "rtblock"},
- {0xf6dd, "rupiah"},
- {0x0073, "s"},
- {0x015b, "sacute"},
- {0x0161, "scaron"},
- {0x015f, "scedilla"},
- {0x015d, "scircumflex"},
- {0x0219, "scommaaccent"},
- {0x2033, "second"},
- {0x00a7, "section"},
- {0x003b, "semicolon"},
- {0x0037, "seven"},
- {0x215e, "seveneighths"},
- {0x2087, "seveninferior"},
- {0xf737, "sevenoldstyle"},
- {0x2077, "sevensuperior"},
- {0x2592, "shade"},
- {0x03c3, "sigma"},
- {0x03c2, "sigma1"},
- {0x223c, "similar"},
- {0x0036, "six"},
- {0x2086, "sixinferior"},
- {0xf736, "sixoldstyle"},
- {0x2076, "sixsuperior"},
- {0x002f, "slash"},
- {0x263a, "smileface"},
- {0x0020, "space"},
- {0x2660, "spade"},
- {0xf6f2, "ssuperior"},
- {0x00a3, "sterling"},
- {0x220b, "suchthat"},
- {0x2211, "summation"},
- {0x263c, "sun"},
- {0x0074, "t"},
- {0x03c4, "tau"},
- {0x0167, "tbar"},
- {0x0165, "tcaron"},
- {0x0163, "tcommaaccent"},
- {0x2234, "therefore"},
- {0x03b8, "theta"},
- {0x03d1, "theta1"},
- {0x00fe, "thorn"},
- {0x0033, "three"},
- {0x215c, "threeeighths"},
- {0x2083, "threeinferior"},
- {0xf733, "threeoldstyle"},
- {0x00be, "threequarters"},
- {0xf6de, "threequartersemdash"},
- {0x00b3, "threesuperior"},
- {0x02dc, "tilde"},
- {0x0303, "tildecomb"},
- {0x0384, "tonos"},
- {0x2122, "trademark"},
- {0x2122, "trademarksans"},
- {0x2122, "trademarkserif"},
- {0x25bc, "triagdn"},
- {0x25c4, "triaglf"},
- {0x25ba, "triagrt"},
- {0x25b2, "triagup"},
- {0xf6f3, "tsuperior"},
- {0x0032, "two"},
- {0x2025, "twodotenleader"},
- {0x2082, "twoinferior"},
- {0xf732, "twooldstyle"},
- {0x00b2, "twosuperior"},
- {0x2154, "twothirds"},
- {0x0075, "u"},
- {0x00fa, "uacute"},
- {0x016d, "ubreve"},
- {0x00fb, "ucircumflex"},
- {0x00fc, "udieresis"},
- {0x00f9, "ugrave"},
- {0x01b0, "uhorn"},
- {0x0171, "uhungarumlaut"},
- {0x016b, "umacron"},
- {0x005f, "underscore"},
- {0x2017, "underscoredbl"},
- {0x222a, "union"},
- {0x2200, "universal"},
- {0x0173, "uogonek"},
- {0x2580, "upblock"},
- {0x03c5, "upsilon"},
- {0x03cb, "upsilondieresis"},
- {0x03b0, "upsilondieresistonos"},
- {0x03cd, "upsilontonos"},
- {0x016f, "uring"},
- {0x0169, "utilde"},
- {0x0076, "v"},
- {0x0077, "w"},
- {0x1e83, "wacute"},
- {0x0175, "wcircumflex"},
- {0x1e85, "wdieresis"},
- {0x2118, "weierstrass"},
- {0x1e81, "wgrave"},
- {0x0078, "x"},
- {0x03be, "xi"},
- {0x0079, "y"},
- {0x00fd, "yacute"},
- {0x0177, "ycircumflex"},
- {0x00ff, "ydieresis"},
- {0x00a5, "yen"},
- {0x1ef3, "ygrave"},
- {0x007a, "z"},
- {0x017a, "zacute"},
- {0x017e, "zcaron"},
- {0x017c, "zdotaccent"},
- {0x0030, "zero"},
- {0x2080, "zeroinferior"},
- {0xf730, "zerooldstyle"},
- {0x2070, "zerosuperior"},
- {0x03b6, "zeta"},
- {0x007b, "{"},
- {0x007c, "|"},
- {0x007d, "}"},
- {0x007e, "~"},
- { 0, NULL }
-};
diff --git a/Build/source/libs/xpdf/xpdf/Object.cc b/Build/source/libs/xpdf/xpdf/Object.cc
deleted file mode 100644
index 71c632a1a37..00000000000
--- a/Build/source/libs/xpdf/xpdf/Object.cc
+++ /dev/null
@@ -1,231 +0,0 @@
-//========================================================================
-//
-// Object.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include "Object.h"
-#include "Array.h"
-#include "Dict.h"
-#include "Error.h"
-#include "Stream.h"
-#include "XRef.h"
-
-//------------------------------------------------------------------------
-// Object
-//------------------------------------------------------------------------
-
-char *objTypeNames[numObjTypes] = {
- "boolean",
- "integer",
- "real",
- "string",
- "name",
- "null",
- "array",
- "dictionary",
- "stream",
- "ref",
- "cmd",
- "error",
- "eof",
- "none"
-};
-
-#ifdef DEBUG_MEM
-int Object::numAlloc[numObjTypes] =
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-#endif
-
-Object *Object::initArray(XRef *xref) {
- initObj(objArray);
- array = new Array(xref);
- return this;
-}
-
-Object *Object::initDict(XRef *xref) {
- initObj(objDict);
- dict = new Dict(xref);
- return this;
-}
-
-Object *Object::initDict(Dict *dictA) {
- initObj(objDict);
- dict = dictA;
- dict->incRef();
- return this;
-}
-
-Object *Object::initStream(Stream *streamA) {
- initObj(objStream);
- stream = streamA;
- return this;
-}
-
-Object *Object::copy(Object *obj) {
- *obj = *this;
- switch (type) {
- case objString:
- obj->string = string->copy();
- break;
- case objName:
- obj->name = copyString(name);
- break;
- case objArray:
- array->incRef();
- break;
- case objDict:
- dict->incRef();
- break;
- case objStream:
- stream->incRef();
- break;
- case objCmd:
- obj->cmd = copyString(cmd);
- break;
- default:
- break;
- }
-#ifdef DEBUG_MEM
- ++numAlloc[type];
-#endif
- return obj;
-}
-
-Object *Object::fetch(XRef *xref, Object *obj) {
- return (type == objRef && xref) ?
- xref->fetch(ref.num, ref.gen, obj) : copy(obj);
-}
-
-void Object::free() {
- switch (type) {
- case objString:
- delete string;
- break;
- case objName:
- gfree(name);
- break;
- case objArray:
- if (!array->decRef()) {
- delete array;
- }
- break;
- case objDict:
- if (!dict->decRef()) {
- delete dict;
- }
- break;
- case objStream:
- if (!stream->decRef()) {
- delete stream;
- }
- break;
- case objCmd:
- gfree(cmd);
- break;
- default:
- break;
- }
-#ifdef DEBUG_MEM
- --numAlloc[type];
-#endif
- type = objNone;
-}
-
-char *Object::getTypeName() {
- return objTypeNames[type];
-}
-
-void Object::print(FILE *f) {
- Object obj;
- int i;
-
- switch (type) {
- case objBool:
- fprintf(f, "%s", booln ? "true" : "false");
- break;
- case objInt:
- fprintf(f, "%d", intg);
- break;
- case objReal:
- fprintf(f, "%g", real);
- break;
- case objString:
- fprintf(f, "(");
- fwrite(string->getCString(), 1, string->getLength(), f);
- fprintf(f, ")");
- break;
- case objName:
- fprintf(f, "/%s", name);
- break;
- case objNull:
- fprintf(f, "null");
- break;
- case objArray:
- fprintf(f, "[");
- for (i = 0; i < arrayGetLength(); ++i) {
- if (i > 0)
- fprintf(f, " ");
- arrayGetNF(i, &obj);
- obj.print(f);
- obj.free();
- }
- fprintf(f, "]");
- break;
- case objDict:
- fprintf(f, "<<");
- for (i = 0; i < dictGetLength(); ++i) {
- fprintf(f, " /%s ", dictGetKey(i));
- dictGetValNF(i, &obj);
- obj.print(f);
- obj.free();
- }
- fprintf(f, " >>");
- break;
- case objStream:
- fprintf(f, "<stream>");
- break;
- case objRef:
- fprintf(f, "%d %d R", ref.num, ref.gen);
- break;
- case objCmd:
- fprintf(f, "%s", cmd);
- break;
- case objError:
- fprintf(f, "<error>");
- break;
- case objEOF:
- fprintf(f, "<EOF>");
- break;
- case objNone:
- fprintf(f, "<none>");
- break;
- }
-}
-
-void Object::memCheck(FILE *f) {
-#ifdef DEBUG_MEM
- int i;
- int t;
-
- t = 0;
- for (i = 0; i < numObjTypes; ++i)
- t += numAlloc[i];
- if (t > 0) {
- fprintf(f, "Allocated objects:\n");
- for (i = 0; i < numObjTypes; ++i) {
- if (numAlloc[i] > 0)
- fprintf(f, " %-20s: %6d\n", objTypeNames[i], numAlloc[i]);
- }
- }
-#endif
-}
diff --git a/Build/source/libs/xpdf/xpdf/Object.h b/Build/source/libs/xpdf/xpdf/Object.h
deleted file mode 100644
index 8b1807c5ba5..00000000000
--- a/Build/source/libs/xpdf/xpdf/Object.h
+++ /dev/null
@@ -1,303 +0,0 @@
-//========================================================================
-//
-// Object.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef OBJECT_H
-#define OBJECT_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include "gtypes.h"
-#include "gmem.h"
-#include "GString.h"
-
-class XRef;
-class Array;
-class Dict;
-class Stream;
-
-//------------------------------------------------------------------------
-// Ref
-//------------------------------------------------------------------------
-
-struct Ref {
- int num; // object number
- int gen; // generation number
-};
-
-//------------------------------------------------------------------------
-// object types
-//------------------------------------------------------------------------
-
-enum ObjType {
- // simple objects
- objBool, // boolean
- objInt, // integer
- objReal, // real
- objString, // string
- objName, // name
- objNull, // null
-
- // complex objects
- objArray, // array
- objDict, // dictionary
- objStream, // stream
- objRef, // indirect reference
-
- // special objects
- objCmd, // command name
- objError, // error return from Lexer
- objEOF, // end of file return from Lexer
- objNone // uninitialized object
-};
-
-#define numObjTypes 14 // total number of object types
-
-//------------------------------------------------------------------------
-// Object
-//------------------------------------------------------------------------
-
-#ifdef DEBUG_MEM
-#define initObj(t) ++numAlloc[type = t]
-#else
-#define initObj(t) type = t
-#endif
-
-class Object {
-public:
-
- // Default constructor.
- Object():
- type(objNone) {}
-
- // Initialize an object.
- Object *initBool(GBool boolnA)
- { initObj(objBool); booln = boolnA; return this; }
- Object *initInt(int intgA)
- { initObj(objInt); intg = intgA; return this; }
- Object *initReal(double realA)
- { initObj(objReal); real = realA; return this; }
- Object *initString(GString *stringA)
- { initObj(objString); string = stringA; return this; }
- Object *initName(char *nameA)
- { initObj(objName); name = copyString(nameA); return this; }
- Object *initNull()
- { initObj(objNull); return this; }
- Object *initArray(XRef *xref);
- Object *initDict(XRef *xref);
- Object *initDict(Dict *dictA);
- Object *initStream(Stream *streamA);
- Object *initRef(int numA, int genA)
- { initObj(objRef); ref.num = numA; ref.gen = genA; return this; }
- Object *initCmd(char *cmdA)
- { initObj(objCmd); cmd = copyString(cmdA); return this; }
- Object *initError()
- { initObj(objError); return this; }
- Object *initEOF()
- { initObj(objEOF); return this; }
-
- // Copy an object.
- Object *copy(Object *obj);
-
- // If object is a Ref, fetch and return the referenced object.
- // Otherwise, return a copy of the object.
- Object *fetch(XRef *xref, Object *obj);
-
- // Free object contents.
- void free();
-
- // Type checking.
- ObjType getType() { return type; }
- GBool isBool() { return type == objBool; }
- GBool isInt() { return type == objInt; }
- GBool isReal() { return type == objReal; }
- GBool isNum() { return type == objInt || type == objReal; }
- GBool isString() { return type == objString; }
- GBool isName() { return type == objName; }
- GBool isNull() { return type == objNull; }
- GBool isArray() { return type == objArray; }
- GBool isDict() { return type == objDict; }
- GBool isStream() { return type == objStream; }
- GBool isRef() { return type == objRef; }
- GBool isCmd() { return type == objCmd; }
- GBool isError() { return type == objError; }
- GBool isEOF() { return type == objEOF; }
- GBool isNone() { return type == objNone; }
-
- // Special type checking.
- GBool isName(char *nameA)
- { return type == objName && !strcmp(name, nameA); }
- GBool isDict(char *dictType);
- GBool isStream(char *dictType);
- GBool isCmd(char *cmdA)
- { return type == objCmd && !strcmp(cmd, cmdA); }
-
- // Accessors. NB: these assume object is of correct type.
- GBool getBool() { return booln; }
- int getInt() { return intg; }
- double getReal() { return real; }
- double getNum() { return type == objInt ? (double)intg : real; }
- GString *getString() { return string; }
- char *getName() { return name; }
- Array *getArray() { return array; }
- Dict *getDict() { return dict; }
- Stream *getStream() { return stream; }
- Ref getRef() { return ref; }
- int getRefNum() { return ref.num; }
- int getRefGen() { return ref.gen; }
- char *getCmd() { return cmd; }
-
- // Array accessors.
- int arrayGetLength();
- void arrayAdd(Object *elem);
- Object *arrayGet(int i, Object *obj);
- Object *arrayGetNF(int i, Object *obj);
-
- // Dict accessors.
- int dictGetLength();
- void dictAdd(char *key, Object *val);
- GBool dictIs(char *dictType);
- Object *dictLookup(char *key, Object *obj);
- Object *dictLookupNF(char *key, Object *obj);
- char *dictGetKey(int i);
- Object *dictGetVal(int i, Object *obj);
- Object *dictGetValNF(int i, Object *obj);
-
- // Stream accessors.
- GBool streamIs(char *dictType);
- void streamReset();
- void streamClose();
- int streamGetChar();
- int streamLookChar();
- char *streamGetLine(char *buf, int size);
- Guint streamGetPos();
- void streamSetPos(Guint pos, int dir = 0);
- Dict *streamGetDict();
-
- // Output.
- char *getTypeName();
- void print(FILE *f = stdout);
-
- // Memory testing.
- static void memCheck(FILE *f);
-
-private:
-
- ObjType type; // object type
- union { // value for each type:
- GBool booln; // boolean
- int intg; // integer
- double real; // real
- GString *string; // string
- char *name; // name
- Array *array; // array
- Dict *dict; // dictionary
- Stream *stream; // stream
- Ref ref; // indirect reference
- char *cmd; // command
- };
-
-#ifdef DEBUG_MEM
- static int // number of each type of object
- numAlloc[numObjTypes]; // currently allocated
-#endif
-};
-
-//------------------------------------------------------------------------
-// Array accessors.
-//------------------------------------------------------------------------
-
-#include "Array.h"
-
-inline int Object::arrayGetLength()
- { return array->getLength(); }
-
-inline void Object::arrayAdd(Object *elem)
- { array->add(elem); }
-
-inline Object *Object::arrayGet(int i, Object *obj)
- { return array->get(i, obj); }
-
-inline Object *Object::arrayGetNF(int i, Object *obj)
- { return array->getNF(i, obj); }
-
-//------------------------------------------------------------------------
-// Dict accessors.
-//------------------------------------------------------------------------
-
-#include "Dict.h"
-
-inline int Object::dictGetLength()
- { return dict->getLength(); }
-
-inline void Object::dictAdd(char *key, Object *val)
- { dict->add(key, val); }
-
-inline GBool Object::dictIs(char *dictType)
- { return dict->is(dictType); }
-
-inline GBool Object::isDict(char *dictType)
- { return type == objDict && dictIs(dictType); }
-
-inline Object *Object::dictLookup(char *key, Object *obj)
- { return dict->lookup(key, obj); }
-
-inline Object *Object::dictLookupNF(char *key, Object *obj)
- { return dict->lookupNF(key, obj); }
-
-inline char *Object::dictGetKey(int i)
- { return dict->getKey(i); }
-
-inline Object *Object::dictGetVal(int i, Object *obj)
- { return dict->getVal(i, obj); }
-
-inline Object *Object::dictGetValNF(int i, Object *obj)
- { return dict->getValNF(i, obj); }
-
-//------------------------------------------------------------------------
-// Stream accessors.
-//------------------------------------------------------------------------
-
-#include "Stream.h"
-
-inline GBool Object::streamIs(char *dictType)
- { return stream->getDict()->is(dictType); }
-
-inline GBool Object::isStream(char *dictType)
- { return type == objStream && streamIs(dictType); }
-
-inline void Object::streamReset()
- { stream->reset(); }
-
-inline void Object::streamClose()
- { stream->close(); }
-
-inline int Object::streamGetChar()
- { return stream->getChar(); }
-
-inline int Object::streamLookChar()
- { return stream->lookChar(); }
-
-inline char *Object::streamGetLine(char *buf, int size)
- { return stream->getLine(buf, size); }
-
-inline Guint Object::streamGetPos()
- { return stream->getPos(); }
-
-inline void Object::streamSetPos(Guint pos, int dir)
- { stream->setPos(pos, dir); }
-
-inline Dict *Object::streamGetDict()
- { return stream->getDict(); }
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Outline.cc b/Build/source/libs/xpdf/xpdf/Outline.cc
deleted file mode 100644
index 39e89a3c3fb..00000000000
--- a/Build/source/libs/xpdf/xpdf/Outline.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-//========================================================================
-//
-// Outline.cc
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include "gmem.h"
-#include "GString.h"
-#include "GList.h"
-#include "Link.h"
-#include "PDFDocEncoding.h"
-#include "Outline.h"
-
-//------------------------------------------------------------------------
-
-Outline::Outline(Object *outlineObj, XRef *xref) {
- Object first, last;
-
- items = NULL;
- if (!outlineObj->isDict()) {
- return;
- }
- items = OutlineItem::readItemList(outlineObj->dictLookupNF("First", &first),
- outlineObj->dictLookupNF("Last", &last),
- xref);
- first.free();
- last.free();
-}
-
-Outline::~Outline() {
- if (items) {
- deleteGList(items, OutlineItem);
- }
-}
-
-//------------------------------------------------------------------------
-
-OutlineItem::OutlineItem(Dict *dict, XRef *xrefA) {
- Object obj1;
- GString *s;
- int i;
-
- xref = xrefA;
- title = NULL;
- action = NULL;
- kids = NULL;
-
- if (dict->lookup("Title", &obj1)->isString()) {
- s = obj1.getString();
- if ((s->getChar(0) & 0xff) == 0xfe &&
- (s->getChar(1) & 0xff) == 0xff) {
- titleLen = (s->getLength() - 2) / 2;
- title = (Unicode *)gmallocn(titleLen, sizeof(Unicode));
- for (i = 0; i < titleLen; ++i) {
- title[i] = ((s->getChar(2 + 2*i) & 0xff) << 8) |
- (s->getChar(3 + 2*i) & 0xff);
- }
- } else {
- titleLen = s->getLength();
- title = (Unicode *)gmallocn(titleLen, sizeof(Unicode));
- for (i = 0; i < titleLen; ++i) {
- title[i] = pdfDocEncoding[s->getChar(i) & 0xff];
- }
- }
- } else {
- titleLen = 0;
- }
- obj1.free();
-
- if (!dict->lookup("Dest", &obj1)->isNull()) {
- action = LinkAction::parseDest(&obj1);
- } else {
- obj1.free();
- if (!dict->lookup("A", &obj1)->isNull()) {
- action = LinkAction::parseAction(&obj1);
- }
- }
- obj1.free();
-
- dict->lookupNF("First", &firstRef);
- dict->lookupNF("Last", &lastRef);
- dict->lookupNF("Next", &nextRef);
-
- startsOpen = gFalse;
- if (dict->lookup("Count", &obj1)->isInt()) {
- if (obj1.getInt() > 0) {
- startsOpen = gTrue;
- }
- }
- obj1.free();
-}
-
-OutlineItem::~OutlineItem() {
- close();
- if (title) {
- gfree(title);
- }
- if (action) {
- delete action;
- }
- firstRef.free();
- lastRef.free();
- nextRef.free();
-}
-
-GList *OutlineItem::readItemList(Object *firstItemRef, Object *lastItemRef,
- XRef *xrefA) {
- GList *items;
- OutlineItem *item;
- Object obj;
- Object *p;
-
- items = new GList();
- p = firstItemRef;
- while (p->isRef()) {
- if (!p->fetch(xrefA, &obj)->isDict()) {
- obj.free();
- break;
- }
- item = new OutlineItem(obj.getDict(), xrefA);
- obj.free();
- items->append(item);
- if (p->getRef().num == lastItemRef->getRef().num &&
- p->getRef().gen == lastItemRef->getRef().gen) {
- break;
- }
- p = &item->nextRef;
- }
- return items;
-}
-
-void OutlineItem::open() {
- if (!kids) {
- kids = readItemList(&firstRef, &lastRef, xref);
- }
-}
-
-void OutlineItem::close() {
- if (kids) {
- deleteGList(kids, OutlineItem);
- kids = NULL;
- }
-}
diff --git a/Build/source/libs/xpdf/xpdf/Outline.h b/Build/source/libs/xpdf/xpdf/Outline.h
deleted file mode 100644
index f38f8d16121..00000000000
--- a/Build/source/libs/xpdf/xpdf/Outline.h
+++ /dev/null
@@ -1,76 +0,0 @@
-//========================================================================
-//
-// Outline.h
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef OUTLINE_H
-#define OUTLINE_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "Object.h"
-#include "CharTypes.h"
-
-class GString;
-class GList;
-class XRef;
-class LinkAction;
-
-//------------------------------------------------------------------------
-
-class Outline {
-public:
-
- Outline(Object *outlineObj, XRef *xref);
- ~Outline();
-
- GList *getItems() { return items; }
-
-private:
-
- GList *items; // NULL if document has no outline
- // [OutlineItem]
-};
-
-//------------------------------------------------------------------------
-
-class OutlineItem {
-public:
-
- OutlineItem(Dict *dict, XRef *xrefA);
- ~OutlineItem();
-
- static GList *readItemList(Object *firstItemRef, Object *lastItemRef,
- XRef *xrefA);
-
- void open();
- void close();
-
- Unicode *getTitle() { return title; }
- int getTitleLength() { return titleLen; }
- LinkAction *getAction() { return action; }
- GBool isOpen() { return startsOpen; }
- GBool hasKids() { return firstRef.isRef(); }
- GList *getKids() { return kids; }
-
-private:
-
- XRef *xref;
- Unicode *title;
- int titleLen;
- LinkAction *action;
- Object firstRef;
- Object lastRef;
- Object nextRef;
- GBool startsOpen;
- GList *kids; // NULL unless this item is open [OutlineItem]
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/OutputDev.cc b/Build/source/libs/xpdf/xpdf/OutputDev.cc
deleted file mode 100644
index 8d4763b7d83..00000000000
--- a/Build/source/libs/xpdf/xpdf/OutputDev.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-//========================================================================
-//
-// OutputDev.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include "Object.h"
-#include "Stream.h"
-#include "GfxState.h"
-#include "OutputDev.h"
-
-//------------------------------------------------------------------------
-// OutputDev
-//------------------------------------------------------------------------
-
-void OutputDev::setDefaultCTM(double *ctm) {
- int i;
- double det;
-
- for (i = 0; i < 6; ++i) {
- defCTM[i] = ctm[i];
- }
- det = 1 / (defCTM[0] * defCTM[3] - defCTM[1] * defCTM[2]);
- defICTM[0] = defCTM[3] * det;
- defICTM[1] = -defCTM[1] * det;
- defICTM[2] = -defCTM[2] * det;
- defICTM[3] = defCTM[0] * det;
- defICTM[4] = (defCTM[2] * defCTM[5] - defCTM[3] * defCTM[4]) * det;
- defICTM[5] = (defCTM[1] * defCTM[4] - defCTM[0] * defCTM[5]) * det;
-}
-
-void OutputDev::cvtDevToUser(double dx, double dy, double *ux, double *uy) {
- *ux = defICTM[0] * dx + defICTM[2] * dy + defICTM[4];
- *uy = defICTM[1] * dx + defICTM[3] * dy + defICTM[5];
-}
-
-void OutputDev::cvtUserToDev(double ux, double uy, int *dx, int *dy) {
- *dx = (int)(defCTM[0] * ux + defCTM[2] * uy + defCTM[4] + 0.5);
- *dy = (int)(defCTM[1] * ux + defCTM[3] * uy + defCTM[5] + 0.5);
-}
-
-void OutputDev::updateAll(GfxState *state) {
- updateLineDash(state);
- updateFlatness(state);
- updateLineJoin(state);
- updateLineCap(state);
- updateMiterLimit(state);
- updateLineWidth(state);
- updateStrokeAdjust(state);
- updateFillColorSpace(state);
- updateFillColor(state);
- updateStrokeColorSpace(state);
- updateStrokeColor(state);
- updateBlendMode(state);
- updateFillOpacity(state);
- updateStrokeOpacity(state);
- updateFillOverprint(state);
- updateStrokeOverprint(state);
- updateTransfer(state);
- updateFont(state);
-}
-
-GBool OutputDev::beginType3Char(GfxState *state, double x, double y,
- double dx, double dy,
- CharCode code, Unicode *u, int uLen) {
- return gFalse;
-}
-
-void OutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str,
- int width, int height, GBool invert,
- GBool inlineImg) {
- int i, j;
-
- if (inlineImg) {
- str->reset();
- j = height * ((width + 7) / 8);
- for (i = 0; i < j; ++i)
- str->getChar();
- str->close();
- }
-}
-
-void OutputDev::drawImage(GfxState *state, Object *ref, Stream *str,
- int width, int height, GfxImageColorMap *colorMap,
- int *maskColors, GBool inlineImg) {
- int i, j;
-
- if (inlineImg) {
- str->reset();
- j = height * ((width * colorMap->getNumPixelComps() *
- colorMap->getBits() + 7) / 8);
- for (i = 0; i < j; ++i)
- str->getChar();
- str->close();
- }
-}
-
-void OutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str,
- int width, int height,
- GfxImageColorMap *colorMap,
- Stream *maskStr,
- int maskWidth, int maskHeight,
- GBool maskInvert) {
- drawImage(state, ref, str, width, height, colorMap, NULL, gFalse);
-}
-
-void OutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str,
- int width, int height,
- GfxImageColorMap *colorMap,
- Stream *maskStr,
- int maskWidth, int maskHeight,
- GfxImageColorMap *maskColorMap) {
- drawImage(state, ref, str, width, height, colorMap, NULL, gFalse);
-}
-
-#if OPI_SUPPORT
-void OutputDev::opiBegin(GfxState *state, Dict *opiDict) {
-}
-
-void OutputDev::opiEnd(GfxState *state, Dict *opiDict) {
-}
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/OutputDev.h b/Build/source/libs/xpdf/xpdf/OutputDev.h
deleted file mode 100644
index 27dc0dd9c16..00000000000
--- a/Build/source/libs/xpdf/xpdf/OutputDev.h
+++ /dev/null
@@ -1,250 +0,0 @@
-//========================================================================
-//
-// OutputDev.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef OUTPUTDEV_H
-#define OUTPUTDEV_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "CharTypes.h"
-
-class GString;
-class GfxState;
-struct GfxColor;
-class GfxColorSpace;
-class GfxImageColorMap;
-class GfxFunctionShading;
-class GfxAxialShading;
-class GfxRadialShading;
-class Stream;
-class Links;
-class Link;
-class Catalog;
-class Page;
-class Function;
-
-//------------------------------------------------------------------------
-// OutputDev
-//------------------------------------------------------------------------
-
-class OutputDev {
-public:
-
- // Constructor.
- OutputDev() {}
-
- // Destructor.
- virtual ~OutputDev() {}
-
- //----- get info about output device
-
- // Does this device use upside-down coordinates?
- // (Upside-down means (0,0) is the top left corner of the page.)
- virtual GBool upsideDown() = 0;
-
- // Does this device use drawChar() or drawString()?
- virtual GBool useDrawChar() = 0;
-
- // Does this device use tilingPatternFill()? If this returns false,
- // tiling pattern fills will be reduced to a series of other drawing
- // operations.
- virtual GBool useTilingPatternFill() { return gFalse; }
-
- // Does this device use functionShadedFill(), axialShadedFill(), and
- // radialShadedFill()? If this returns false, these shaded fills
- // will be reduced to a series of other drawing operations.
- virtual GBool useShadedFills() { return gFalse; }
-
- // Does this device use drawForm()? If this returns false,
- // form-type XObjects will be interpreted (i.e., unrolled).
- virtual GBool useDrawForm() { return gFalse; }
-
- // Does this device use beginType3Char/endType3Char? Otherwise,
- // text in Type 3 fonts will be drawn with drawChar/drawString.
- virtual GBool interpretType3Chars() = 0;
-
- // Does this device need non-text content?
- virtual GBool needNonText() { return gTrue; }
-
- //----- initialization and control
-
- // Set default transform matrix.
- virtual void setDefaultCTM(double *ctm);
-
- // Check to see if a page slice should be displayed. If this
- // returns false, the page display is aborted. Typically, an
- // OutputDev will use some alternate means to display the page
- // before returning false.
- virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
- int rotate, GBool useMediaBox, GBool crop,
- int sliceX, int sliceY, int sliceW, int sliceH,
- GBool printing, Catalog *catalog,
- GBool (*abortCheckCbk)(void *data) = NULL,
- void *abortCheckCbkData = NULL)
- { return gTrue; }
-
- // Start a page.
- virtual void startPage(int pageNum, GfxState *state) {}
-
- // End a page.
- virtual void endPage() {}
-
- // Dump page contents to display.
- virtual void dump() {}
-
- //----- coordinate conversion
-
- // Convert between device and user coordinates.
- virtual void cvtDevToUser(double dx, double dy, double *ux, double *uy);
- virtual void cvtUserToDev(double ux, double uy, int *dx, int *dy);
-
- double *getDefCTM() { return defCTM; }
- double *getDefICTM() { return defICTM; }
-
- //----- save/restore graphics state
- virtual void saveState(GfxState *state) {}
- virtual void restoreState(GfxState *state) {}
-
- //----- update graphics state
- virtual void updateAll(GfxState *state);
- virtual void updateCTM(GfxState *state, double m11, double m12,
- double m21, double m22, double m31, double m32) {}
- virtual void updateLineDash(GfxState *state) {}
- virtual void updateFlatness(GfxState *state) {}
- virtual void updateLineJoin(GfxState *state) {}
- virtual void updateLineCap(GfxState *state) {}
- virtual void updateMiterLimit(GfxState *state) {}
- virtual void updateLineWidth(GfxState *state) {}
- virtual void updateStrokeAdjust(GfxState *state) {}
- virtual void updateFillColorSpace(GfxState *state) {}
- virtual void updateStrokeColorSpace(GfxState *state) {}
- virtual void updateFillColor(GfxState *state) {}
- virtual void updateStrokeColor(GfxState *state) {}
- virtual void updateBlendMode(GfxState *state) {}
- virtual void updateFillOpacity(GfxState *state) {}
- virtual void updateStrokeOpacity(GfxState *state) {}
- virtual void updateFillOverprint(GfxState *state) {}
- virtual void updateStrokeOverprint(GfxState *state) {}
- virtual void updateTransfer(GfxState *state) {}
-
- //----- update text state
- virtual void updateFont(GfxState *state) {}
- virtual void updateTextMat(GfxState *state) {}
- virtual void updateCharSpace(GfxState *state) {}
- virtual void updateRender(GfxState *state) {}
- virtual void updateRise(GfxState *state) {}
- virtual void updateWordSpace(GfxState *state) {}
- virtual void updateHorizScaling(GfxState *state) {}
- virtual void updateTextPos(GfxState *state) {}
- virtual void updateTextShift(GfxState *state, double shift) {}
-
- //----- path painting
- virtual void stroke(GfxState *state) {}
- virtual void fill(GfxState *state) {}
- virtual void eoFill(GfxState *state) {}
- virtual void tilingPatternFill(GfxState *state, Object *str,
- int paintType, Dict *resDict,
- double *mat, double *bbox,
- int x0, int y0, int x1, int y1,
- double xStep, double yStep) {}
- virtual GBool functionShadedFill(GfxState *state,
- GfxFunctionShading *shading)
- { return gFalse; }
- virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading)
- { return gFalse; }
- virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading)
- { return gFalse; }
-
- //----- path clipping
- virtual void clip(GfxState *state) {}
- virtual void eoClip(GfxState *state) {}
- virtual void clipToStrokePath(GfxState *state) {}
-
- //----- text drawing
- virtual void beginStringOp(GfxState *state) {}
- virtual void endStringOp(GfxState *state) {}
- virtual void beginString(GfxState *state, GString *s) {}
- virtual void endString(GfxState *state) {}
- virtual void drawChar(GfxState *state, double x, double y,
- double dx, double dy,
- double originX, double originY,
- CharCode code, int nBytes, Unicode *u, int uLen) {}
- virtual void drawString(GfxState *state, GString *s) {}
- virtual GBool beginType3Char(GfxState *state, double x, double y,
- double dx, double dy,
- CharCode code, Unicode *u, int uLen);
- virtual void endType3Char(GfxState *state) {}
- virtual void endTextObject(GfxState *state) {}
-
- //----- image drawing
- virtual void drawImageMask(GfxState *state, Object *ref, Stream *str,
- int width, int height, GBool invert,
- GBool inlineImg);
- virtual void drawImage(GfxState *state, Object *ref, Stream *str,
- int width, int height, GfxImageColorMap *colorMap,
- int *maskColors, GBool inlineImg);
- virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str,
- int width, int height,
- GfxImageColorMap *colorMap,
- Stream *maskStr, int maskWidth, int maskHeight,
- GBool maskInvert);
- virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str,
- int width, int height,
- GfxImageColorMap *colorMap,
- Stream *maskStr,
- int maskWidth, int maskHeight,
- GfxImageColorMap *maskColorMap);
-
-#if OPI_SUPPORT
- //----- OPI functions
- virtual void opiBegin(GfxState *state, Dict *opiDict);
- virtual void opiEnd(GfxState *state, Dict *opiDict);
-#endif
-
- //----- Type 3 font operators
- virtual void type3D0(GfxState *state, double wx, double wy) {}
- virtual void type3D1(GfxState *state, double wx, double wy,
- double llx, double lly, double urx, double ury) {}
-
- //----- form XObjects
- virtual void drawForm(Ref id) {}
-
- //----- PostScript XObjects
- virtual void psXObject(Stream *psStream, Stream *level1Stream) {}
-
- //----- transparency groups and soft masks
- virtual void beginTransparencyGroup(GfxState *state, double *bbox,
- GfxColorSpace *blendingColorSpace,
- GBool isolated, GBool knockout,
- GBool forSoftMask) {}
- virtual void endTransparencyGroup(GfxState *state) {}
- virtual void paintTransparencyGroup(GfxState *state, double *bbox) {}
- virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha,
- Function *transferFunc, GfxColor *backdropColor) {}
- virtual void clearSoftMask(GfxState *state) {}
-
- //----- links
- virtual void processLink(Link *link, Catalog *catalog) {}
-
-#if 1 //~tmp: turn off anti-aliasing temporarily
- virtual GBool getVectorAntialias() { return gFalse; }
- virtual void setVectorAntialias(GBool vaa) {}
-#endif
-
-private:
-
- double defCTM[6]; // default coordinate transform matrix
- double defICTM[6]; // inverse of default CTM
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/PDFDoc.cc b/Build/source/libs/xpdf/xpdf/PDFDoc.cc
deleted file mode 100644
index c559eefcfb7..00000000000
--- a/Build/source/libs/xpdf/xpdf/PDFDoc.cc
+++ /dev/null
@@ -1,402 +0,0 @@
-//========================================================================
-//
-// PDFDoc.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#ifdef WIN32
-# include <windows.h>
-#endif
-#include "GString.h"
-#include "config.h"
-#include "GlobalParams.h"
-#include "Page.h"
-#include "Catalog.h"
-#include "Stream.h"
-#include "XRef.h"
-#include "Link.h"
-#include "OutputDev.h"
-#include "Error.h"
-#include "ErrorCodes.h"
-#include "Lexer.h"
-#include "Parser.h"
-#include "SecurityHandler.h"
-#ifndef DISABLE_OUTLINE
-#include "Outline.h"
-#endif
-#include "PDFDoc.h"
-
-//------------------------------------------------------------------------
-
-#define headerSearchSize 1024 // read this many bytes at beginning of
- // file to look for '%PDF'
-
-//------------------------------------------------------------------------
-// PDFDoc
-//------------------------------------------------------------------------
-
-PDFDoc::PDFDoc(GString *fileNameA, GString *ownerPassword,
- GString *userPassword, void *guiDataA) {
- Object obj;
- GString *fileName1, *fileName2;
-
- ok = gFalse;
- errCode = errNone;
-
- guiData = guiDataA;
-
- file = NULL;
- str = NULL;
- xref = NULL;
- catalog = NULL;
-#ifndef DISABLE_OUTLINE
- outline = NULL;
-#endif
-
- fileName = fileNameA;
- fileName1 = fileName;
-
-
- // try to open file
- fileName2 = NULL;
-#ifdef VMS
- if (!(file = fopen(fileName1->getCString(), "rb", "ctx=stm"))) {
- error(-1, "Couldn't open file '%s'", fileName1->getCString());
- errCode = errOpenFile;
- return;
- }
-#else
- if (!(file = fopen(fileName1->getCString(), "rb"))) {
- fileName2 = fileName->copy();
- fileName2->lowerCase();
- if (!(file = fopen(fileName2->getCString(), "rb"))) {
- fileName2->upperCase();
- if (!(file = fopen(fileName2->getCString(), "rb"))) {
- error(-1, "Couldn't open file '%s'", fileName->getCString());
- delete fileName2;
- errCode = errOpenFile;
- return;
- }
- }
- delete fileName2;
- }
-#endif
-
- // create stream
- obj.initNull();
- str = new FileStream(file, 0, gFalse, 0, &obj);
-
- ok = setup(ownerPassword, userPassword);
-}
-
-#ifdef WIN32
-PDFDoc::PDFDoc(wchar_t *fileNameA, int fileNameLen, GString *ownerPassword,
- GString *userPassword, void *guiDataA) {
- OSVERSIONINFO version;
- wchar_t fileName2[_MAX_PATH + 1];
- Object obj;
- int i;
-
- ok = gFalse;
- errCode = errNone;
-
- guiData = guiDataA;
-
- file = NULL;
- str = NULL;
- xref = NULL;
- catalog = NULL;
-#ifndef DISABLE_OUTLINE
- outline = NULL;
-#endif
-
- //~ file name should be stored in Unicode (?)
- fileName = new GString();
- for (i = 0; i < fileNameLen; ++i) {
- fileName->append((char)fileNameA[i]);
- }
-
- // zero-terminate the file name string
- for (i = 0; i < fileNameLen && i < _MAX_PATH; ++i) {
- fileName2[i] = fileNameA[i];
- }
- fileName2[i] = 0;
-
- // try to open file
- // NB: _wfopen is only available in NT
- version.dwOSVersionInfoSize = sizeof(version);
- GetVersionEx(&version);
- if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) {
- file = _wfopen(fileName2, L"rb");
- } else {
- file = fopen(fileName->getCString(), "rb");
- }
- if (!file) {
- error(-1, "Couldn't open file '%s'", fileName->getCString());
- errCode = errOpenFile;
- return;
- }
-
- // create stream
- obj.initNull();
- str = new FileStream(file, 0, gFalse, 0, &obj);
-
- ok = setup(ownerPassword, userPassword);
-}
-#endif
-
-PDFDoc::PDFDoc(BaseStream *strA, GString *ownerPassword,
- GString *userPassword, void *guiDataA) {
- ok = gFalse;
- errCode = errNone;
- guiData = guiDataA;
- if (strA->getFileName()) {
- fileName = strA->getFileName()->copy();
- } else {
- fileName = NULL;
- }
- file = NULL;
- str = strA;
- xref = NULL;
- catalog = NULL;
-#ifndef DISABLE_OUTLINE
- outline = NULL;
-#endif
- ok = setup(ownerPassword, userPassword);
-}
-
-GBool PDFDoc::setup(GString *ownerPassword, GString *userPassword) {
- str->reset();
-
- // check header
- checkHeader();
-
- // read xref table
- xref = new XRef(str);
- if (!xref->isOk()) {
- error(-1, "Couldn't read xref table");
- errCode = xref->getErrorCode();
- return gFalse;
- }
-
- // check for encryption
- if (!checkEncryption(ownerPassword, userPassword)) {
- errCode = errEncrypted;
- return gFalse;
- }
-
- // read catalog
- catalog = new Catalog(xref);
- if (!catalog->isOk()) {
- error(-1, "Couldn't read page catalog");
- errCode = errBadCatalog;
- return gFalse;
- }
-
-#ifndef DISABLE_OUTLINE
- // read outline
- outline = new Outline(catalog->getOutline(), xref);
-#endif
-
- // done
- return gTrue;
-}
-
-PDFDoc::~PDFDoc() {
-#ifndef DISABLE_OUTLINE
- if (outline) {
- delete outline;
- }
-#endif
- if (catalog) {
- delete catalog;
- }
- if (xref) {
- delete xref;
- }
- if (str) {
- delete str;
- }
- if (file) {
- fclose(file);
- }
- if (fileName) {
- delete fileName;
- }
-}
-
-// Check for a PDF header on this stream. Skip past some garbage
-// if necessary.
-void PDFDoc::checkHeader() {
- char hdrBuf[headerSearchSize+1];
- char *p;
- int i;
-
- pdfVersion = 0;
- for (i = 0; i < headerSearchSize; ++i) {
- hdrBuf[i] = str->getChar();
- }
- hdrBuf[headerSearchSize] = '\0';
- for (i = 0; i < headerSearchSize - 5; ++i) {
- if (!strncmp(&hdrBuf[i], "%PDF-", 5)) {
- break;
- }
- }
- if (i >= headerSearchSize - 5) {
- error(-1, "May not be a PDF file (continuing anyway)");
- return;
- }
- str->moveStart(i);
- if (!(p = strtok(&hdrBuf[i+5], " \t\n\r"))) {
- error(-1, "May not be a PDF file (continuing anyway)");
- return;
- }
- pdfVersion = atof(p);
- if (!(hdrBuf[i+5] >= '0' && hdrBuf[i+5] <= '9') ||
- pdfVersion > supportedPDFVersionNum + 0.0001) {
- error(-1, "PDF version %s -- xpdf supports version %s"
- " (continuing anyway)", p, supportedPDFVersionStr);
- }
-}
-
-GBool PDFDoc::checkEncryption(GString *ownerPassword, GString *userPassword) {
- Object encrypt;
- GBool encrypted;
- SecurityHandler *secHdlr;
- GBool ret;
-
- xref->getTrailerDict()->dictLookup("Encrypt", &encrypt);
- if ((encrypted = encrypt.isDict())) {
- if ((secHdlr = SecurityHandler::make(this, &encrypt))) {
- if (secHdlr->checkEncryption(ownerPassword, userPassword)) {
- // authorization succeeded
- xref->setEncryption(secHdlr->getPermissionFlags(),
- secHdlr->getOwnerPasswordOk(),
- secHdlr->getFileKey(),
- secHdlr->getFileKeyLength(),
- secHdlr->getEncVersion(),
- secHdlr->getEncAlgorithm());
- ret = gTrue;
- } else {
- // authorization failed
- ret = gFalse;
- }
- delete secHdlr;
- } else {
- // couldn't find the matching security handler
- ret = gFalse;
- }
- } else {
- // document is not encrypted
- ret = gTrue;
- }
- encrypt.free();
- return ret;
-}
-
-void PDFDoc::displayPage(OutputDev *out, int page,
- double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool crop, GBool printing,
- GBool (*abortCheckCbk)(void *data),
- void *abortCheckCbkData) {
- if (globalParams->getPrintCommands()) {
- printf("***** page %d *****\n", page);
- }
- catalog->getPage(page)->display(out, hDPI, vDPI,
- rotate, useMediaBox, crop, printing, catalog,
- abortCheckCbk, abortCheckCbkData);
-}
-
-void PDFDoc::displayPages(OutputDev *out, int firstPage, int lastPage,
- double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool crop, GBool printing,
- GBool (*abortCheckCbk)(void *data),
- void *abortCheckCbkData) {
- int page;
-
- for (page = firstPage; page <= lastPage; ++page) {
- displayPage(out, page, hDPI, vDPI, rotate, useMediaBox, crop, printing,
- abortCheckCbk, abortCheckCbkData);
- }
-}
-
-void PDFDoc::displayPageSlice(OutputDev *out, int page,
- double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool crop, GBool printing,
- int sliceX, int sliceY, int sliceW, int sliceH,
- GBool (*abortCheckCbk)(void *data),
- void *abortCheckCbkData) {
- catalog->getPage(page)->displaySlice(out, hDPI, vDPI,
- rotate, useMediaBox, crop,
- sliceX, sliceY, sliceW, sliceH,
- printing, catalog,
- abortCheckCbk, abortCheckCbkData);
-}
-
-Links *PDFDoc::getLinks(int page) {
- return catalog->getPage(page)->getLinks(catalog);
-}
-
-void PDFDoc::processLinks(OutputDev *out, int page) {
- catalog->getPage(page)->processLinks(out, catalog);
-}
-
-GBool PDFDoc::isLinearized() {
- Parser *parser;
- Object obj1, obj2, obj3, obj4, obj5;
- GBool lin;
-
- lin = gFalse;
- obj1.initNull();
- parser = new Parser(xref,
- new Lexer(xref,
- str->makeSubStream(str->getStart(), gFalse, 0, &obj1)),
- gTrue);
- parser->getObj(&obj1);
- parser->getObj(&obj2);
- parser->getObj(&obj3);
- parser->getObj(&obj4);
- if (obj1.isInt() && obj2.isInt() && obj3.isCmd("obj") &&
- obj4.isDict()) {
- obj4.dictLookup("Linearized", &obj5);
- if (obj5.isNum() && obj5.getNum() > 0) {
- lin = gTrue;
- }
- obj5.free();
- }
- obj4.free();
- obj3.free();
- obj2.free();
- obj1.free();
- delete parser;
- return lin;
-}
-
-GBool PDFDoc::saveAs(GString *name) {
- FILE *f;
- int c;
-
- if (!(f = fopen(name->getCString(), "wb"))) {
- error(-1, "Couldn't open file '%s'", name->getCString());
- return gFalse;
- }
- str->reset();
- while ((c = str->getChar()) != EOF) {
- fputc(c, f);
- }
- str->close();
- fclose(f);
- return gTrue;
-}
diff --git a/Build/source/libs/xpdf/xpdf/PDFDoc.h b/Build/source/libs/xpdf/xpdf/PDFDoc.h
deleted file mode 100644
index b3b44e7306f..00000000000
--- a/Build/source/libs/xpdf/xpdf/PDFDoc.h
+++ /dev/null
@@ -1,185 +0,0 @@
-//========================================================================
-//
-// PDFDoc.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef PDFDOC_H
-#define PDFDOC_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include <stdio.h>
-#include "XRef.h"
-#include "Catalog.h"
-#include "Page.h"
-
-class GString;
-class BaseStream;
-class OutputDev;
-class Links;
-class LinkAction;
-class LinkDest;
-class Outline;
-
-//------------------------------------------------------------------------
-// PDFDoc
-//------------------------------------------------------------------------
-
-class PDFDoc {
-public:
-
- PDFDoc(GString *fileNameA, GString *ownerPassword = NULL,
- GString *userPassword = NULL, void *guiDataA = NULL);
-#ifdef WIN32
- PDFDoc(wchar_t *fileNameA, int fileNameLen, GString *ownerPassword = NULL,
- GString *userPassword = NULL, void *guiDataA = NULL);
-#endif
- PDFDoc(BaseStream *strA, GString *ownerPassword = NULL,
- GString *userPassword = NULL, void *guiDataA = NULL);
- ~PDFDoc();
-
- // Was PDF document successfully opened?
- GBool isOk() { return ok; }
-
- // Get the error code (if isOk() returns false).
- int getErrorCode() { return errCode; }
-
- // Get file name.
- GString *getFileName() { return fileName; }
-
- // Get the xref table.
- XRef *getXRef() { return xref; }
-
- // Get catalog.
- Catalog *getCatalog() { return catalog; }
-
- // Get base stream.
- BaseStream *getBaseStream() { return str; }
-
- // Get page parameters.
- double getPageMediaWidth(int page)
- { return catalog->getPage(page)->getMediaWidth(); }
- double getPageMediaHeight(int page)
- { return catalog->getPage(page)->getMediaHeight(); }
- double getPageCropWidth(int page)
- { return catalog->getPage(page)->getCropWidth(); }
- double getPageCropHeight(int page)
- { return catalog->getPage(page)->getCropHeight(); }
- int getPageRotate(int page)
- { return catalog->getPage(page)->getRotate(); }
-
- // Get number of pages.
- int getNumPages() { return catalog->getNumPages(); }
-
- // Return the contents of the metadata stream, or NULL if there is
- // no metadata.
- GString *readMetadata() { return catalog->readMetadata(); }
-
- // Return the structure tree root object.
- Object *getStructTreeRoot() { return catalog->getStructTreeRoot(); }
-
- // Display a page.
- void displayPage(OutputDev *out, int page,
- double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool crop, GBool printing,
- GBool (*abortCheckCbk)(void *data) = NULL,
- void *abortCheckCbkData = NULL);
-
- // Display a range of pages.
- void displayPages(OutputDev *out, int firstPage, int lastPage,
- double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool crop, GBool printing,
- GBool (*abortCheckCbk)(void *data) = NULL,
- void *abortCheckCbkData = NULL);
-
- // Display part of a page.
- void displayPageSlice(OutputDev *out, int page,
- double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool crop, GBool printing,
- int sliceX, int sliceY, int sliceW, int sliceH,
- GBool (*abortCheckCbk)(void *data) = NULL,
- void *abortCheckCbkData = NULL);
-
- // Find a page, given its object ID. Returns page number, or 0 if
- // not found.
- int findPage(int num, int gen) { return catalog->findPage(num, gen); }
-
- // Returns the links for the current page, transferring ownership to
- // the caller.
- Links *getLinks(int page);
-
- // Find a named destination. Returns the link destination, or
- // NULL if <name> is not a destination.
- LinkDest *findDest(GString *name)
- { return catalog->findDest(name); }
-
- // Process the links for a page.
- void processLinks(OutputDev *out, int page);
-
-#ifndef DISABLE_OUTLINE
- // Return the outline object.
- Outline *getOutline() { return outline; }
-#endif
-
- // Is the file encrypted?
- GBool isEncrypted() { return xref->isEncrypted(); }
-
- // Check various permissions.
- GBool okToPrint(GBool ignoreOwnerPW = gFalse)
- { return xref->okToPrint(ignoreOwnerPW); }
- GBool okToChange(GBool ignoreOwnerPW = gFalse)
- { return xref->okToChange(ignoreOwnerPW); }
- GBool okToCopy(GBool ignoreOwnerPW = gFalse)
- { return xref->okToCopy(ignoreOwnerPW); }
- GBool okToAddNotes(GBool ignoreOwnerPW = gFalse)
- { return xref->okToAddNotes(ignoreOwnerPW); }
-
- // Is this document linearized?
- GBool isLinearized();
-
- // Return the document's Info dictionary (if any).
- Object *getDocInfo(Object *obj) { return xref->getDocInfo(obj); }
- Object *getDocInfoNF(Object *obj) { return xref->getDocInfoNF(obj); }
-
- // Return the PDF version specified by the file.
- double getPDFVersion() { return pdfVersion; }
-
- // Save this file with another name.
- GBool saveAs(GString *name);
-
- // Return a pointer to the GUI (XPDFCore or WinPDFCore object).
- void *getGUIData() { return guiData; }
-
-
-private:
-
- GBool setup(GString *ownerPassword, GString *userPassword);
- void checkHeader();
- GBool checkEncryption(GString *ownerPassword, GString *userPassword);
-
- GString *fileName;
- FILE *file;
- BaseStream *str;
- void *guiData;
- double pdfVersion;
- XRef *xref;
- Catalog *catalog;
- GBool ok;
- int errCode;
-/* Keep the size of the structure the same whether DISABLE_OUTLINE or
- not, and put it last to try to find errors more quickly. */
-#ifndef DISABLE_OUTLINE
- Outline *outline;
-#else
- void *dummy;
-#endif
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/PDFDocEncoding.cc b/Build/source/libs/xpdf/xpdf/PDFDocEncoding.cc
deleted file mode 100644
index 89dc3828312..00000000000
--- a/Build/source/libs/xpdf/xpdf/PDFDocEncoding.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-//========================================================================
-//
-// PDFDocEncoding.h
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include "PDFDocEncoding.h"
-
-Unicode pdfDocEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 00
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 10
- 0x02d8, 0x02c7, 0x02c6, 0x02d9, 0x02dd, 0x02db, 0x02da, 0x02dc,
- 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, // 20
- 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
- 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // 30
- 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
- 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, // 40
- 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
- 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, // 50
- 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
- 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, // 60
- 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
- 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, // 70
- 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x0000,
- 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x0192, 0x2044, // 80
- 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,
- 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x0141, 0x0152, 0x0160, // 90
- 0x0178, 0x017d, 0x0131, 0x0142, 0x0153, 0x0161, 0x017e, 0x0000,
- 0x20ac, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, // a0
- 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x0000, 0x00ae, 0x00af,
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, // b0
- 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
- 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, // c0
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
- 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, // d0
- 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
- 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, // e0
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
- 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, // f0
- 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
-};
diff --git a/Build/source/libs/xpdf/xpdf/PDFDocEncoding.h b/Build/source/libs/xpdf/xpdf/PDFDocEncoding.h
deleted file mode 100644
index 3259d3e1064..00000000000
--- a/Build/source/libs/xpdf/xpdf/PDFDocEncoding.h
+++ /dev/null
@@ -1,16 +0,0 @@
-//========================================================================
-//
-// PDFDocEncoding.h
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef PDFDOCENCODING_H
-#define PDFDOCENCODING_H
-
-#include "CharTypes.h"
-
-extern Unicode pdfDocEncoding[256];
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/PSTokenizer.cc b/Build/source/libs/xpdf/xpdf/PSTokenizer.cc
deleted file mode 100644
index 0ad37618563..00000000000
--- a/Build/source/libs/xpdf/xpdf/PSTokenizer.cc
+++ /dev/null
@@ -1,135 +0,0 @@
-//========================================================================
-//
-// PSTokenizer.cc
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "PSTokenizer.h"
-
-//------------------------------------------------------------------------
-
-// A '1' in this array means the character is white space. A '1' or
-// '2' means the character ends a name or command.
-static char specialChars[256] = {
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x
- 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx
-};
-
-//------------------------------------------------------------------------
-
-PSTokenizer::PSTokenizer(int (*getCharFuncA)(void *), void *dataA) {
- getCharFunc = getCharFuncA;
- data = dataA;
- charBuf = -1;
-}
-
-PSTokenizer::~PSTokenizer() {
-}
-
-GBool PSTokenizer::getToken(char *buf, int size, int *length) {
- GBool comment, backslash;
- int c;
- int i;
-
- // skip whitespace and comments
- comment = gFalse;
- while (1) {
- if ((c = getChar()) == EOF) {
- buf[0] = '\0';
- *length = 0;
- return gFalse;
- }
- if (comment) {
- if (c == '\x0a' || c == '\x0d') {
- comment = gFalse;
- }
- } else if (c == '%') {
- comment = gTrue;
- } else if (specialChars[c] != 1) {
- break;
- }
- }
-
- // read a token
- i = 0;
- buf[i++] = c;
- if (c == '(') {
- backslash = gFalse;
- while ((c = lookChar()) != EOF) {
- if (i < size - 1) {
- buf[i++] = c;
- }
- getChar();
- if (c == '\\') {
- backslash = gTrue;
- } else if (!backslash && c == ')') {
- break;
- } else {
- backslash = gFalse;
- }
- }
- } else if (c == '<') {
- while ((c = lookChar()) != EOF) {
- getChar();
- if (i < size - 1 && specialChars[c] != 1) {
- buf[i++] = c;
- }
- if (c == '>') {
- break;
- }
- }
- } else if (c != '[' && c != ']') {
- while ((c = lookChar()) != EOF && !specialChars[c]) {
- getChar();
- if (i < size - 1) {
- buf[i++] = c;
- }
- }
- }
- buf[i] = '\0';
- *length = i;
-
- return gTrue;
-}
-
-int PSTokenizer::lookChar() {
- if (charBuf < 0) {
- charBuf = (*getCharFunc)(data);
- }
- return charBuf;
-}
-
-int PSTokenizer::getChar() {
- int c;
-
- if (charBuf < 0) {
- charBuf = (*getCharFunc)(data);
- }
- c = charBuf;
- charBuf = -1;
- return c;
-}
diff --git a/Build/source/libs/xpdf/xpdf/PSTokenizer.h b/Build/source/libs/xpdf/xpdf/PSTokenizer.h
deleted file mode 100644
index 4d5ee97f4dd..00000000000
--- a/Build/source/libs/xpdf/xpdf/PSTokenizer.h
+++ /dev/null
@@ -1,41 +0,0 @@
-//========================================================================
-//
-// PSTokenizer.h
-//
-// Copyright 2002-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef PSTOKENIZER_H
-#define PSTOKENIZER_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-
-//------------------------------------------------------------------------
-
-class PSTokenizer {
-public:
-
- PSTokenizer(int (*getCharFuncA)(void *), void *dataA);
- ~PSTokenizer();
-
- // Get the next PostScript token. Returns false at end-of-stream.
- GBool getToken(char *buf, int size, int *length);
-
-private:
-
- int lookChar();
- int getChar();
-
- int (*getCharFunc)(void *);
- void *data;
- int charBuf;
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Page.cc b/Build/source/libs/xpdf/xpdf/Page.cc
deleted file mode 100644
index d03e6944d9c..00000000000
--- a/Build/source/libs/xpdf/xpdf/Page.cc
+++ /dev/null
@@ -1,479 +0,0 @@
-//========================================================================
-//
-// Page.cc
-//
-// Copyright 1996-2007 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: Page.cc 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include "GlobalParams.h"
-#include "Object.h"
-#include "Array.h"
-#include "Dict.h"
-#include "XRef.h"
-#include "Link.h"
-#include "OutputDev.h"
-#ifndef PDF_PARSER_ONLY
-#include "Gfx.h"
-#include "GfxState.h"
-#include "Annot.h"
-#endif
-#include "Error.h"
-#include "Catalog.h"
-#include "Page.h"
-
-//------------------------------------------------------------------------
-// PDFRectangle
-//------------------------------------------------------------------------
-
-void PDFRectangle::clipTo(PDFRectangle *rect) {
- if (x1 < rect->x1) {
- x1 = rect->x1;
- } else if (x1 > rect->x2) {
- x1 = rect->x2;
- }
- if (x2 < rect->x1) {
- x2 = rect->x1;
- } else if (x2 > rect->x2) {
- x2 = rect->x2;
- }
- if (y1 < rect->y1) {
- y1 = rect->y1;
- } else if (y1 > rect->y2) {
- y1 = rect->y2;
- }
- if (y2 < rect->y1) {
- y2 = rect->y1;
- } else if (y2 > rect->y2) {
- y2 = rect->y2;
- }
-}
-
-//------------------------------------------------------------------------
-// PageAttrs
-//------------------------------------------------------------------------
-
-PageAttrs::PageAttrs(PageAttrs *attrs, Dict *dict) {
- Object obj1;
-
- // get old/default values
- if (attrs) {
- mediaBox = attrs->mediaBox;
- cropBox = attrs->cropBox;
- haveCropBox = attrs->haveCropBox;
- rotate = attrs->rotate;
- attrs->resources.copy(&resources);
- } else {
- // set default MediaBox to 8.5" x 11" -- this shouldn't be necessary
- // but some (non-compliant) PDF files don't specify a MediaBox
- mediaBox.x1 = 0;
- mediaBox.y1 = 0;
- mediaBox.x2 = 612;
- mediaBox.y2 = 792;
- cropBox.x1 = cropBox.y1 = cropBox.x2 = cropBox.y2 = 0;
- haveCropBox = gFalse;
- rotate = 0;
- resources.initNull();
- }
-
- // media box
- readBox(dict, "MediaBox", &mediaBox);
-
- // crop box
- if (readBox(dict, "CropBox", &cropBox)) {
- haveCropBox = gTrue;
- }
- if (!haveCropBox) {
- cropBox = mediaBox;
- }
-
- // other boxes
- bleedBox = cropBox;
- readBox(dict, "BleedBox", &bleedBox);
- trimBox = cropBox;
- readBox(dict, "TrimBox", &trimBox);
- artBox = cropBox;
- readBox(dict, "ArtBox", &artBox);
-
- // clip all other boxes to the media box
- cropBox.clipTo(&mediaBox);
- bleedBox.clipTo(&mediaBox);
- trimBox.clipTo(&mediaBox);
- artBox.clipTo(&mediaBox);
-
- // rotate
- dict->lookup("Rotate", &obj1);
- if (obj1.isInt()) {
- rotate = obj1.getInt();
- }
- obj1.free();
- while (rotate < 0) {
- rotate += 360;
- }
- while (rotate >= 360) {
- rotate -= 360;
- }
-
- // misc attributes
- dict->lookup("LastModified", &lastModified);
- dict->lookup("BoxColorInfo", &boxColorInfo);
- dict->lookup("Group", &group);
- dict->lookup("Metadata", &metadata);
- dict->lookup("PieceInfo", &pieceInfo);
- dict->lookup("SeparationInfo", &separationInfo);
-
- // resource dictionary
- dict->lookup("Resources", &obj1);
- if (obj1.isDict()) {
- resources.free();
- obj1.copy(&resources);
- }
- obj1.free();
-}
-
-PageAttrs::~PageAttrs() {
- lastModified.free();
- boxColorInfo.free();
- group.free();
- metadata.free();
- pieceInfo.free();
- separationInfo.free();
- resources.free();
-}
-
-GBool PageAttrs::readBox(Dict *dict, char *key, PDFRectangle *box) {
- PDFRectangle tmp;
- double t;
- Object obj1, obj2;
- GBool ok;
-
- dict->lookup(key, &obj1);
- if (obj1.isArray() && obj1.arrayGetLength() == 4) {
- ok = gTrue;
- obj1.arrayGet(0, &obj2);
- if (obj2.isNum()) {
- tmp.x1 = obj2.getNum();
- } else {
- ok = gFalse;
- }
- obj2.free();
- obj1.arrayGet(1, &obj2);
- if (obj2.isNum()) {
- tmp.y1 = obj2.getNum();
- } else {
- ok = gFalse;
- }
- obj2.free();
- obj1.arrayGet(2, &obj2);
- if (obj2.isNum()) {
- tmp.x2 = obj2.getNum();
- } else {
- ok = gFalse;
- }
- obj2.free();
- obj1.arrayGet(3, &obj2);
- if (obj2.isNum()) {
- tmp.y2 = obj2.getNum();
- } else {
- ok = gFalse;
- }
- obj2.free();
- if (ok) {
- if (tmp.x1 > tmp.x2) {
- t = tmp.x1; tmp.x1 = tmp.x2; tmp.x2 = t;
- }
- if (tmp.y1 > tmp.y2) {
- t = tmp.y1; tmp.y1 = tmp.y2; tmp.y2 = t;
- }
- *box = tmp;
- }
- } else {
- ok = gFalse;
- }
- obj1.free();
- return ok;
-}
-
-//------------------------------------------------------------------------
-// Page
-//------------------------------------------------------------------------
-
-Page::Page(XRef *xrefA, int numA, Dict *pageDict, PageAttrs *attrsA) {
- ok = gTrue;
- xref = xrefA;
- num = numA;
-
- // get attributes
- attrs = attrsA;
-
- // annotations
- pageDict->lookupNF("Annots", &annots);
- if (!(annots.isRef() || annots.isArray() || annots.isNull())) {
- error(-1, "Page annotations object (page %d) is wrong type (%s)",
- num, annots.getTypeName());
- annots.free();
- goto err2;
- }
-
- // contents
- pageDict->lookupNF("Contents", &contents);
- if (!(contents.isRef() || contents.isArray() ||
- contents.isNull())) {
- error(-1, "Page contents object (page %d) is wrong type (%s)",
- num, contents.getTypeName());
- contents.free();
- goto err1;
- }
-
- return;
-
- err2:
- annots.initNull();
- err1:
- contents.initNull();
- ok = gFalse;
-}
-
-Page::~Page() {
- delete attrs;
- annots.free();
- contents.free();
-}
-
-Links *Page::getLinks(Catalog *catalog) {
- Links *links;
- Object obj;
-
- links = new Links(getAnnots(&obj), catalog->getBaseURI());
- obj.free();
- return links;
-}
-
-void Page::display(OutputDev *out, double hDPI, double vDPI,
- int rotate, GBool useMediaBox, GBool crop,
- GBool printing, Catalog *catalog,
- GBool (*abortCheckCbk)(void *data),
- void *abortCheckCbkData) {
- displaySlice(out, hDPI, vDPI, rotate, useMediaBox, crop,
- -1, -1, -1, -1, printing, catalog,
- abortCheckCbk, abortCheckCbkData);
-}
-
-void Page::displaySlice(OutputDev *out, double hDPI, double vDPI,
- int rotate, GBool useMediaBox, GBool crop,
- int sliceX, int sliceY, int sliceW, int sliceH,
- GBool printing, Catalog *catalog,
- GBool (*abortCheckCbk)(void *data),
- void *abortCheckCbkData) {
-#ifndef PDF_PARSER_ONLY
- PDFRectangle *mediaBox, *cropBox;
- PDFRectangle box;
- Gfx *gfx;
- Object obj;
- Annots *annotList;
- Dict *acroForm;
- int i;
-
- if (!out->checkPageSlice(this, hDPI, vDPI, rotate, useMediaBox, crop,
- sliceX, sliceY, sliceW, sliceH,
- printing, catalog,
- abortCheckCbk, abortCheckCbkData)) {
- return;
- }
-
- rotate += getRotate();
- if (rotate >= 360) {
- rotate -= 360;
- } else if (rotate < 0) {
- rotate += 360;
- }
-
- makeBox(hDPI, vDPI, rotate, useMediaBox, out->upsideDown(),
- sliceX, sliceY, sliceW, sliceH, &box, &crop);
- cropBox = getCropBox();
-
- if (globalParams->getPrintCommands()) {
- mediaBox = getMediaBox();
- printf("***** MediaBox = ll:%g,%g ur:%g,%g\n",
- mediaBox->x1, mediaBox->y1, mediaBox->x2, mediaBox->y2);
- printf("***** CropBox = ll:%g,%g ur:%g,%g\n",
- cropBox->x1, cropBox->y1, cropBox->x2, cropBox->y2);
- printf("***** Rotate = %d\n", attrs->getRotate());
- }
-
- gfx = new Gfx(xref, out, num, attrs->getResourceDict(),
- hDPI, vDPI, &box, crop ? cropBox : (PDFRectangle *)NULL,
- rotate, abortCheckCbk, abortCheckCbkData);
- contents.fetch(xref, &obj);
- if (!obj.isNull()) {
- gfx->saveState();
- gfx->display(&obj);
- gfx->restoreState();
- }
- obj.free();
-
- // draw annotations
- annotList = new Annots(xref, catalog, getAnnots(&obj));
- obj.free();
- acroForm = catalog->getAcroForm()->isDict() ?
- catalog->getAcroForm()->getDict() : NULL;
- if (acroForm) {
- if (acroForm->lookup("NeedAppearances", &obj)) {
- if (obj.isBool() && obj.getBool()) {
- annotList->generateAppearances(acroForm);
- }
- }
- obj.free();
- }
- if (annotList->getNumAnnots() > 0) {
- if (globalParams->getPrintCommands()) {
- printf("***** Annotations\n");
- }
- for (i = 0; i < annotList->getNumAnnots(); ++i) {
- annotList->getAnnot(i)->draw(gfx, printing);
- }
- out->dump();
- }
- delete annotList;
-
- delete gfx;
-#endif
-}
-
-void Page::makeBox(double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool upsideDown,
- double sliceX, double sliceY, double sliceW, double sliceH,
- PDFRectangle *box, GBool *crop) {
- PDFRectangle *mediaBox, *cropBox, *baseBox;
- double kx, ky;
-
- mediaBox = getMediaBox();
- cropBox = getCropBox();
- if (sliceW >= 0 && sliceH >= 0) {
- baseBox = useMediaBox ? mediaBox : cropBox;
- kx = 72.0 / hDPI;
- ky = 72.0 / vDPI;
- if (rotate == 90) {
- if (upsideDown) {
- box->x1 = baseBox->x1 + ky * sliceY;
- box->x2 = baseBox->x1 + ky * (sliceY + sliceH);
- } else {
- box->x1 = baseBox->x2 - ky * (sliceY + sliceH);
- box->x2 = baseBox->x2 - ky * sliceY;
- }
- box->y1 = baseBox->y1 + kx * sliceX;
- box->y2 = baseBox->y1 + kx * (sliceX + sliceW);
- } else if (rotate == 180) {
- box->x1 = baseBox->x2 - kx * (sliceX + sliceW);
- box->x2 = baseBox->x2 - kx * sliceX;
- if (upsideDown) {
- box->y1 = baseBox->y1 + ky * sliceY;
- box->y2 = baseBox->y1 + ky * (sliceY + sliceH);
- } else {
- box->y1 = baseBox->y2 - ky * (sliceY + sliceH);
- box->y2 = baseBox->y2 - ky * sliceY;
- }
- } else if (rotate == 270) {
- if (upsideDown) {
- box->x1 = baseBox->x2 - ky * (sliceY + sliceH);
- box->x2 = baseBox->x2 - ky * sliceY;
- } else {
- box->x1 = baseBox->x1 + ky * sliceY;
- box->x2 = baseBox->x1 + ky * (sliceY + sliceH);
- }
- box->y1 = baseBox->y2 - kx * (sliceX + sliceW);
- box->y2 = baseBox->y2 - kx * sliceX;
- } else {
- box->x1 = baseBox->x1 + kx * sliceX;
- box->x2 = baseBox->x1 + kx * (sliceX + sliceW);
- if (upsideDown) {
- box->y1 = baseBox->y2 - ky * (sliceY + sliceH);
- box->y2 = baseBox->y2 - ky * sliceY;
- } else {
- box->y1 = baseBox->y1 + ky * sliceY;
- box->y2 = baseBox->y1 + ky * (sliceY + sliceH);
- }
- }
- } else if (useMediaBox) {
- *box = *mediaBox;
- } else {
- *box = *cropBox;
- *crop = gFalse;
- }
-}
-
-void Page::processLinks(OutputDev *out, Catalog *catalog) {
- Links *links;
- int i;
-
- links = getLinks(catalog);
- for (i = 0; i < links->getNumLinks(); ++i) {
- out->processLink(links->getLink(i), catalog);
- }
- delete links;
-}
-
-#ifndef PDF_PARSER_ONLY
-void Page::getDefaultCTM(double *ctm, double hDPI, double vDPI,
- int rotate, GBool useMediaBox, GBool upsideDown) {
- GfxState *state;
- int i;
-
- rotate += getRotate();
- if (rotate >= 360) {
- rotate -= 360;
- } else if (rotate < 0) {
- rotate += 360;
- }
- state = new GfxState(hDPI, vDPI,
- useMediaBox ? getMediaBox() : getCropBox(),
- rotate, upsideDown);
- for (i = 0; i < 6; ++i) {
- ctm[i] = state->getCTM()[i];
- }
- delete state;
-}
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Page.h b/Build/source/libs/xpdf/xpdf/Page.h
deleted file mode 100644
index 1ed0431d5d7..00000000000
--- a/Build/source/libs/xpdf/xpdf/Page.h
+++ /dev/null
@@ -1,225 +0,0 @@
-//========================================================================
-//
-// Page.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: Page.h 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#ifndef PAGE_H
-#define PAGE_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "Object.h"
-
-class Dict;
-class XRef;
-class OutputDev;
-class Links;
-class Catalog;
-
-//------------------------------------------------------------------------
-
-class PDFRectangle {
-public:
- double x1, y1, x2, y2;
-
- PDFRectangle() { x1 = y1 = x2 = y2 = 0; }
- PDFRectangle(double x1A, double y1A, double x2A, double y2A)
- { x1 = x1A; y1 = y1A; x2 = x2A; y2 = y2A; }
- GBool isValid() { return x1 != 0 || y1 != 0 || x2 != 0 || y2 != 0; }
- void clipTo(PDFRectangle *rect);
-};
-
-//------------------------------------------------------------------------
-// PageAttrs
-//------------------------------------------------------------------------
-
-class PageAttrs {
-public:
-
- // Construct a new PageAttrs object by merging a dictionary
- // (of type Pages or Page) into another PageAttrs object. If
- // <attrs> is NULL, uses defaults.
- PageAttrs(PageAttrs *attrs, Dict *dict);
-
- // Destructor.
- ~PageAttrs();
-
- // Accessors.
- PDFRectangle *getMediaBox() { return &mediaBox; }
- PDFRectangle *getCropBox() { return &cropBox; }
- GBool isCropped() { return haveCropBox; }
- PDFRectangle *getBleedBox() { return &bleedBox; }
- PDFRectangle *getTrimBox() { return &trimBox; }
- PDFRectangle *getArtBox() { return &artBox; }
- int getRotate() { return rotate; }
- GString *getLastModified()
- { return lastModified.isString()
- ? lastModified.getString() : (GString *)NULL; }
- Dict *getBoxColorInfo()
- { return boxColorInfo.isDict() ? boxColorInfo.getDict() : (Dict *)NULL; }
- Dict *getGroup()
- { return group.isDict() ? group.getDict() : (Dict *)NULL; }
- Stream *getMetadata()
- { return metadata.isStream() ? metadata.getStream() : (Stream *)NULL; }
- Dict *getPieceInfo()
- { return pieceInfo.isDict() ? pieceInfo.getDict() : (Dict *)NULL; }
- Dict *getSeparationInfo()
- { return separationInfo.isDict()
- ? separationInfo.getDict() : (Dict *)NULL; }
- Dict *getResourceDict()
- { return resources.isDict() ? resources.getDict() : (Dict *)NULL; }
-
-private:
-
- GBool readBox(Dict *dict, char *key, PDFRectangle *box);
-
- PDFRectangle mediaBox;
- PDFRectangle cropBox;
- GBool haveCropBox;
- PDFRectangle bleedBox;
- PDFRectangle trimBox;
- PDFRectangle artBox;
- int rotate;
- Object lastModified;
- Object boxColorInfo;
- Object group;
- Object metadata;
- Object pieceInfo;
- Object separationInfo;
- Object resources;
-};
-
-//------------------------------------------------------------------------
-// Page
-//------------------------------------------------------------------------
-
-class Page {
-public:
-
- // Constructor.
- Page(XRef *xrefA, int numA, Dict *pageDict, PageAttrs *attrsA);
-
- // Destructor.
- ~Page();
-
- // Is page valid?
- GBool isOk() { return ok; }
-
- // Get page parameters.
- int getNum() { return num; }
- PDFRectangle *getMediaBox() { return attrs->getMediaBox(); }
- PDFRectangle *getCropBox() { return attrs->getCropBox(); }
- GBool isCropped() { return attrs->isCropped(); }
- double getMediaWidth()
- { return attrs->getMediaBox()->x2 - attrs->getMediaBox()->x1; }
- double getMediaHeight()
- { return attrs->getMediaBox()->y2 - attrs->getMediaBox()->y1; }
- double getCropWidth()
- { return attrs->getCropBox()->x2 - attrs->getCropBox()->x1; }
- double getCropHeight()
- { return attrs->getCropBox()->y2 - attrs->getCropBox()->y1; }
- PDFRectangle *getBleedBox() { return attrs->getBleedBox(); }
- PDFRectangle *getTrimBox() { return attrs->getTrimBox(); }
- PDFRectangle *getArtBox() { return attrs->getArtBox(); }
- int getRotate() { return attrs->getRotate(); }
- GString *getLastModified() { return attrs->getLastModified(); }
- Dict *getBoxColorInfo() { return attrs->getBoxColorInfo(); }
- Dict *getGroup() { return attrs->getGroup(); }
- Stream *getMetadata() { return attrs->getMetadata(); }
- Dict *getPieceInfo() { return attrs->getPieceInfo(); }
- Dict *getSeparationInfo() { return attrs->getSeparationInfo(); }
-
- // Get resource dictionary.
- Dict *getResourceDict() { return attrs->getResourceDict(); }
-
- // Get annotations array.
- Object *getAnnots(Object *obj) { return annots.fetch(xref, obj); }
-
- // Return a list of links.
- Links *getLinks(Catalog *catalog);
-
- // Get contents.
- Object *getContents(Object *obj) { return contents.fetch(xref, obj); }
-
- // Display a page.
- void display(OutputDev *out, double hDPI, double vDPI,
- int rotate, GBool useMediaBox, GBool crop,
- GBool printing, Catalog *catalog,
- GBool (*abortCheckCbk)(void *data) = NULL,
- void *abortCheckCbkData = NULL);
-
- // Display part of a page.
- void displaySlice(OutputDev *out, double hDPI, double vDPI,
- int rotate, GBool useMediaBox, GBool crop,
- int sliceX, int sliceY, int sliceW, int sliceH,
- GBool printing, Catalog *catalog,
- GBool (*abortCheckCbk)(void *data) = NULL,
- void *abortCheckCbkData = NULL);
-
- void makeBox(double hDPI, double vDPI, int rotate,
- GBool useMediaBox, GBool upsideDown,
- double sliceX, double sliceY, double sliceW, double sliceH,
- PDFRectangle *box, GBool *crop);
-
- void processLinks(OutputDev *out, Catalog *catalog);
-
-#ifndef PDF_PARSER_ONLY
- // Get the page's default CTM.
- void getDefaultCTM(double *ctm, double hDPI, double vDPI,
- int rotate, GBool useMediaBox, GBool upsideDown);
-#endif
-
-private:
-
- XRef *xref; // the xref table for this PDF file
- int num; // page number
- PageAttrs *attrs; // page attributes
- Object annots; // annotations array
- Object contents; // page contents
- GBool ok; // true if page is valid
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Parser.cc b/Build/source/libs/xpdf/xpdf/Parser.cc
deleted file mode 100644
index c1fc715219f..00000000000
--- a/Build/source/libs/xpdf/xpdf/Parser.cc
+++ /dev/null
@@ -1,227 +0,0 @@
-//========================================================================
-//
-// Parser.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stddef.h>
-#include "Object.h"
-#include "Array.h"
-#include "Dict.h"
-#include "Decrypt.h"
-#include "Parser.h"
-#include "XRef.h"
-#include "Error.h"
-
-Parser::Parser(XRef *xrefA, Lexer *lexerA, GBool allowStreamsA) {
- xref = xrefA;
- lexer = lexerA;
- inlineImg = 0;
- allowStreams = allowStreamsA;
- lexer->getObj(&buf1);
- lexer->getObj(&buf2);
-}
-
-Parser::~Parser() {
- buf1.free();
- buf2.free();
- delete lexer;
-}
-
-Object *Parser::getObj(Object *obj, Guchar *fileKey,
- CryptAlgorithm encAlgorithm, int keyLength,
- int objNum, int objGen) {
- char *key;
- Stream *str;
- Object obj2;
- int num;
- DecryptStream *decrypt;
- GString *s, *s2;
- int c;
-
- // refill buffer after inline image data
- if (inlineImg == 2) {
- buf1.free();
- buf2.free();
- lexer->getObj(&buf1);
- lexer->getObj(&buf2);
- inlineImg = 0;
- }
-
- // array
- if (buf1.isCmd("[")) {
- shift();
- obj->initArray(xref);
- while (!buf1.isCmd("]") && !buf1.isEOF())
- obj->arrayAdd(getObj(&obj2, fileKey, encAlgorithm, keyLength,
- objNum, objGen));
- if (buf1.isEOF())
- error(getPos(), "End of file inside array");
- shift();
-
- // dictionary or stream
- } else if (buf1.isCmd("<<")) {
- shift();
- obj->initDict(xref);
- while (!buf1.isCmd(">>") && !buf1.isEOF()) {
- if (!buf1.isName()) {
- error(getPos(), "Dictionary key must be a name object");
- shift();
- } else {
- key = copyString(buf1.getName());
- shift();
- if (buf1.isEOF() || buf1.isError()) {
- gfree(key);
- break;
- }
- obj->dictAdd(key, getObj(&obj2, fileKey, encAlgorithm, keyLength,
- objNum, objGen));
- }
- }
- if (buf1.isEOF())
- error(getPos(), "End of file inside dictionary");
- // stream objects are not allowed inside content streams or
- // object streams
- if (allowStreams && buf2.isCmd("stream")) {
- if ((str = makeStream(obj, fileKey, encAlgorithm, keyLength,
- objNum, objGen))) {
- obj->initStream(str);
- } else {
- obj->free();
- obj->initError();
- }
- } else {
- shift();
- }
-
- // indirect reference or integer
- } else if (buf1.isInt()) {
- num = buf1.getInt();
- shift();
- if (buf1.isInt() && buf2.isCmd("R")) {
- obj->initRef(num, buf1.getInt());
- shift();
- shift();
- } else {
- obj->initInt(num);
- }
-
- // string
- } else if (buf1.isString() && fileKey) {
- s = buf1.getString();
- s2 = new GString();
- obj2.initNull();
- decrypt = new DecryptStream(new MemStream(s->getCString(), 0,
- s->getLength(), &obj2),
- fileKey, encAlgorithm, keyLength,
- objNum, objGen);
- decrypt->reset();
- while ((c = decrypt->getChar()) != EOF) {
- s2->append((char)c);
- }
- delete decrypt;
- obj->initString(s2);
- shift();
-
- // simple object
- } else {
- buf1.copy(obj);
- shift();
- }
-
- return obj;
-}
-
-Stream *Parser::makeStream(Object *dict, Guchar *fileKey,
- CryptAlgorithm encAlgorithm, int keyLength,
- int objNum, int objGen) {
- Object obj;
- BaseStream *baseStr;
- Stream *str;
- Guint pos, endPos, length;
-
- // get stream start position
- lexer->skipToNextLine();
- pos = lexer->getPos();
-
- // get length
- dict->dictLookup("Length", &obj);
- if (obj.isInt()) {
- length = (Guint)obj.getInt();
- obj.free();
- } else {
- error(getPos(), "Bad 'Length' attribute in stream");
- obj.free();
- return NULL;
- }
-
- // check for length in damaged file
- if (xref && xref->getStreamEnd(pos, &endPos)) {
- length = endPos - pos;
- }
-
- // in badly damaged PDF files, we can run off the end of the input
- // stream immediately after the "stream" token
- if (!lexer->getStream()) {
- return NULL;
- }
- baseStr = lexer->getStream()->getBaseStream();
-
- // skip over stream data
- lexer->setPos(pos + length);
-
- // refill token buffers and check for 'endstream'
- shift(); // kill '>>'
- shift(); // kill 'stream'
- if (buf1.isCmd("endstream")) {
- shift();
- } else {
- error(getPos(), "Missing 'endstream'");
- // kludge for broken PDF files: just add 5k to the length, and
- // hope its enough
- length += 5000;
- }
-
- // make base stream
- str = baseStr->makeSubStream(pos, gTrue, length, dict);
-
- // handle decryption
- if (fileKey) {
- str = new DecryptStream(str, fileKey, encAlgorithm, keyLength,
- objNum, objGen);
- }
-
- // get filters
- str = str->addFilters(dict);
-
- return str;
-}
-
-void Parser::shift() {
- if (inlineImg > 0) {
- if (inlineImg < 2) {
- ++inlineImg;
- } else {
- // in a damaged content stream, if 'ID' shows up in the middle
- // of a dictionary, we need to reset
- inlineImg = 0;
- }
- } else if (buf2.isCmd("ID")) {
- lexer->skipChar(); // skip char after 'ID' command
- inlineImg = 1;
- }
- buf1.free();
- buf1 = buf2;
- if (inlineImg > 0) // don't buffer inline image data
- buf2.initNull();
- else
- lexer->getObj(&buf2);
-}
diff --git a/Build/source/libs/xpdf/xpdf/Parser.h b/Build/source/libs/xpdf/xpdf/Parser.h
deleted file mode 100644
index a109558b026..00000000000
--- a/Build/source/libs/xpdf/xpdf/Parser.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//========================================================================
-//
-// Parser.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef PARSER_H
-#define PARSER_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "Lexer.h"
-
-//------------------------------------------------------------------------
-// Parser
-//------------------------------------------------------------------------
-
-class Parser {
-public:
-
- // Constructor.
- Parser(XRef *xrefA, Lexer *lexerA, GBool allowStreamsA);
-
- // Destructor.
- ~Parser();
-
- // Get the next object from the input stream.
- Object *getObj(Object *obj, Guchar *fileKey = NULL,
- CryptAlgorithm encAlgorithm = cryptRC4, int keyLength = 0,
- int objNum = 0, int objGen = 0);
-
- // Get stream.
- Stream *getStream() { return lexer->getStream(); }
-
- // Get current position in file.
- int getPos() { return lexer->getPos(); }
-
-private:
-
- XRef *xref; // the xref table for this PDF file
- Lexer *lexer; // input stream
- GBool allowStreams; // parse stream objects?
- Object buf1, buf2; // next two tokens
- int inlineImg; // set when inline image data is encountered
-
- Stream *makeStream(Object *dict, Guchar *fileKey,
- CryptAlgorithm encAlgorithm, int keyLength,
- int objNum, int objGen);
- void shift();
-};
-
-#endif
-
diff --git a/Build/source/libs/xpdf/xpdf/SecurityHandler.cc b/Build/source/libs/xpdf/xpdf/SecurityHandler.cc
deleted file mode 100644
index ea0f9341dd3..00000000000
--- a/Build/source/libs/xpdf/xpdf/SecurityHandler.cc
+++ /dev/null
@@ -1,390 +0,0 @@
-//========================================================================
-//
-// SecurityHandler.cc
-//
-// Copyright 2004 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include "GString.h"
-#include "PDFDoc.h"
-#include "Decrypt.h"
-#include "Error.h"
-#include "GlobalParams.h"
-#if HAVE_XPDFCORE
-# include "XPDFCore.h"
-#elif HAVE_WINPDFCORE
-# include "WinPDFCore.h"
-#endif
-#ifdef ENABLE_PLUGINS
-# include "XpdfPluginAPI.h"
-#endif
-#include "SecurityHandler.h"
-
-//------------------------------------------------------------------------
-// SecurityHandler
-//------------------------------------------------------------------------
-
-SecurityHandler *SecurityHandler::make(PDFDoc *docA, Object *encryptDictA) {
- Object filterObj;
- SecurityHandler *secHdlr;
-#ifdef ENABLE_PLUGINS
- XpdfSecurityHandler *xsh;
-#endif
-
- encryptDictA->dictLookup("Filter", &filterObj);
- if (filterObj.isName("Standard")) {
- secHdlr = new StandardSecurityHandler(docA, encryptDictA);
- } else if (filterObj.isName()) {
-#ifdef ENABLE_PLUGINS
- if ((xsh = globalParams->getSecurityHandler(filterObj.getName()))) {
- secHdlr = new ExternalSecurityHandler(docA, encryptDictA, xsh);
- } else {
-#endif
- error(-1, "Couldn't find the '%s' security handler",
- filterObj.getName());
- secHdlr = NULL;
-#ifdef ENABLE_PLUGINS
- }
-#endif
- } else {
- error(-1, "Missing or invalid 'Filter' entry in encryption dictionary");
- secHdlr = NULL;
- }
- filterObj.free();
- return secHdlr;
-}
-
-SecurityHandler::SecurityHandler(PDFDoc *docA) {
- doc = docA;
-}
-
-SecurityHandler::~SecurityHandler() {
-}
-
-GBool SecurityHandler::checkEncryption(GString *ownerPassword,
- GString *userPassword) {
- void *authData;
- GBool ok;
- int i;
-
- if (ownerPassword || userPassword) {
- authData = makeAuthData(ownerPassword, userPassword);
- } else {
- authData = NULL;
- }
- ok = authorize(authData);
- if (authData) {
- freeAuthData(authData);
- }
- for (i = 0; !ok && i < 3; ++i) {
- if (!(authData = getAuthData())) {
- break;
- }
- ok = authorize(authData);
- if (authData) {
- freeAuthData(authData);
- }
- }
- if (!ok) {
- error(-1, "Incorrect password");
- }
- return ok;
-}
-
-//------------------------------------------------------------------------
-// StandardSecurityHandler
-//------------------------------------------------------------------------
-
-class StandardAuthData {
-public:
-
- StandardAuthData(GString *ownerPasswordA, GString *userPasswordA) {
- ownerPassword = ownerPasswordA;
- userPassword = userPasswordA;
- }
-
- ~StandardAuthData() {
- if (ownerPassword) {
- delete ownerPassword;
- }
- if (userPassword) {
- delete userPassword;
- }
- }
-
- GString *ownerPassword;
- GString *userPassword;
-};
-
-StandardSecurityHandler::StandardSecurityHandler(PDFDoc *docA,
- Object *encryptDictA):
- SecurityHandler(docA)
-{
- Object versionObj, revisionObj, lengthObj;
- Object ownerKeyObj, userKeyObj, permObj, fileIDObj;
- Object fileIDObj1;
- Object cryptFiltersObj, streamFilterObj, stringFilterObj;
- Object cryptFilterObj, cfmObj, cfLengthObj;
- Object encryptMetadataObj;
-
- ok = gFalse;
- fileID = NULL;
- ownerKey = NULL;
- userKey = NULL;
-
- encryptDictA->dictLookup("V", &versionObj);
- encryptDictA->dictLookup("R", &revisionObj);
- encryptDictA->dictLookup("Length", &lengthObj);
- encryptDictA->dictLookup("O", &ownerKeyObj);
- encryptDictA->dictLookup("U", &userKeyObj);
- encryptDictA->dictLookup("P", &permObj);
- doc->getXRef()->getTrailerDict()->dictLookup("ID", &fileIDObj);
- if (versionObj.isInt() &&
- revisionObj.isInt() &&
- ownerKeyObj.isString() && ownerKeyObj.getString()->getLength() == 32 &&
- userKeyObj.isString() && userKeyObj.getString()->getLength() == 32 &&
- permObj.isInt()) {
- encVersion = versionObj.getInt();
- encRevision = revisionObj.getInt();
- encAlgorithm = cryptRC4;
- // revision 2 forces a 40-bit key - some buggy PDF generators
- // set the Length value incorrectly
- if (encRevision == 2 || !lengthObj.isInt()) {
- fileKeyLength = 5;
- } else {
- fileKeyLength = lengthObj.getInt() / 8;
- }
- encryptMetadata = gTrue;
- //~ this currently only handles a subset of crypt filter functionality
- if (encVersion == 4 && encRevision == 4) {
- encryptDictA->dictLookup("CF", &cryptFiltersObj);
- encryptDictA->dictLookup("StmF", &streamFilterObj);
- encryptDictA->dictLookup("StrF", &stringFilterObj);
- if (cryptFiltersObj.isDict() &&
- streamFilterObj.isName() &&
- stringFilterObj.isName() &&
- !strcmp(streamFilterObj.getName(), stringFilterObj.getName())) {
- if (cryptFiltersObj.dictLookup(streamFilterObj.getName(),
- &cryptFilterObj)->isDict()) {
- cryptFilterObj.dictLookup("CFM", &cfmObj);
- if (cfmObj.isName("V2")) {
- encVersion = 2;
- encRevision = 3;
- if (cryptFilterObj.dictLookup("Length", &cfLengthObj)->isInt()) {
- //~ according to the spec, this should be cfLengthObj / 8
- fileKeyLength = cfLengthObj.getInt();
- }
- cfLengthObj.free();
- } else if (cfmObj.isName("AESV2")) {
- encVersion = 2;
- encRevision = 3;
- encAlgorithm = cryptAES;
- if (cryptFilterObj.dictLookup("Length", &cfLengthObj)->isInt()) {
- //~ according to the spec, this should be cfLengthObj / 8
- fileKeyLength = cfLengthObj.getInt();
- }
- cfLengthObj.free();
- }
- cfmObj.free();
- }
- cryptFilterObj.free();
- }
- stringFilterObj.free();
- streamFilterObj.free();
- cryptFiltersObj.free();
- if (encryptDictA->dictLookup("EncryptMetadata",
- &encryptMetadataObj)->isBool()) {
- encryptMetadata = encryptMetadataObj.getBool();
- }
- encryptMetadataObj.free();
- }
- permFlags = permObj.getInt();
- ownerKey = ownerKeyObj.getString()->copy();
- userKey = userKeyObj.getString()->copy();
- if (encVersion >= 1 && encVersion <= 2 &&
- encRevision >= 2 && encRevision <= 3) {
- if (fileIDObj.isArray()) {
- if (fileIDObj.arrayGet(0, &fileIDObj1)->isString()) {
- fileID = fileIDObj1.getString()->copy();
- } else {
- fileID = new GString();
- }
- fileIDObj1.free();
- } else {
- fileID = new GString();
- }
- ok = gTrue;
- } else {
- error(-1, "Unsupported version/revision (%d/%d) of Standard security handler",
- encVersion, encRevision);
- }
- } else {
- error(-1, "Weird encryption info");
- }
- if (fileKeyLength > 16) {
- fileKeyLength = 16;
- }
- fileIDObj.free();
- permObj.free();
- userKeyObj.free();
- ownerKeyObj.free();
- lengthObj.free();
- revisionObj.free();
- versionObj.free();
-}
-
-StandardSecurityHandler::~StandardSecurityHandler() {
- if (fileID) {
- delete fileID;
- }
- if (ownerKey) {
- delete ownerKey;
- }
- if (userKey) {
- delete userKey;
- }
-}
-
-void *StandardSecurityHandler::makeAuthData(GString *ownerPassword,
- GString *userPassword) {
- return new StandardAuthData(ownerPassword ? ownerPassword->copy()
- : (GString *)NULL,
- userPassword ? userPassword->copy()
- : (GString *)NULL);
-}
-
-void *StandardSecurityHandler::getAuthData() {
-#if HAVE_XPDFCORE
- XPDFCore *core;
- GString *password;
-
- if (!(core = (XPDFCore *)doc->getGUIData()) ||
- !(password = core->getPassword())) {
- return NULL;
- }
- return new StandardAuthData(password, password->copy());
-#elif HAVE_WINPDFCORE
- WinPDFCore *core;
- GString *password;
-
- if (!(core = (WinPDFCore *)doc->getGUIData()) ||
- !(password = core->getPassword())) {
- return NULL;
- }
- return new StandardAuthData(password, password->copy());
-#else
- return NULL;
-#endif
-}
-
-void StandardSecurityHandler::freeAuthData(void *authData) {
- delete (StandardAuthData *)authData;
-}
-
-GBool StandardSecurityHandler::authorize(void *authData) {
- GString *ownerPassword, *userPassword;
-
- if (!ok) {
- return gFalse;
- }
- if (authData) {
- ownerPassword = ((StandardAuthData *)authData)->ownerPassword;
- userPassword = ((StandardAuthData *)authData)->userPassword;
- } else {
- ownerPassword = NULL;
- userPassword = NULL;
- }
- if (!Decrypt::makeFileKey(encVersion, encRevision, fileKeyLength,
- ownerKey, userKey, permFlags, fileID,
- ownerPassword, userPassword, fileKey,
- encryptMetadata, &ownerPasswordOk)) {
- return gFalse;
- }
- return gTrue;
-}
-
-#ifdef ENABLE_PLUGINS
-
-//------------------------------------------------------------------------
-// ExternalSecurityHandler
-//------------------------------------------------------------------------
-
-ExternalSecurityHandler::ExternalSecurityHandler(PDFDoc *docA,
- Object *encryptDictA,
- XpdfSecurityHandler *xshA):
- SecurityHandler(docA)
-{
- encryptDictA->copy(&encryptDict);
- xsh = xshA;
- encAlgorithm = cryptRC4; //~ this should be obtained via getKey
- ok = gFalse;
-
- if (!(*xsh->newDoc)(xsh->handlerData, (XpdfDoc)docA,
- (XpdfObject)encryptDictA, &docData)) {
- return;
- }
-
- ok = gTrue;
-}
-
-ExternalSecurityHandler::~ExternalSecurityHandler() {
- (*xsh->freeDoc)(xsh->handlerData, docData);
- encryptDict.free();
-}
-
-void *ExternalSecurityHandler::makeAuthData(GString *ownerPassword,
- GString *userPassword) {
- char *opw, *upw;
- void *authData;
-
- opw = ownerPassword ? ownerPassword->getCString() : (char *)NULL;
- upw = userPassword ? userPassword->getCString() : (char *)NULL;
- if (!(*xsh->makeAuthData)(xsh->handlerData, docData, opw, upw, &authData)) {
- return NULL;
- }
- return authData;
-}
-
-void *ExternalSecurityHandler::getAuthData() {
- void *authData;
-
- if (!(*xsh->getAuthData)(xsh->handlerData, docData, &authData)) {
- return NULL;
- }
- return authData;
-}
-
-void ExternalSecurityHandler::freeAuthData(void *authData) {
- (*xsh->freeAuthData)(xsh->handlerData, docData, authData);
-}
-
-GBool ExternalSecurityHandler::authorize(void *authData) {
- char *key;
- int length;
-
- if (!ok) {
- return gFalse;
- }
- permFlags = (*xsh->authorize)(xsh->handlerData, docData, authData);
- if (!(permFlags & xpdfPermissionOpen)) {
- return gFalse;
- }
- if (!(*xsh->getKey)(xsh->handlerData, docData, &key, &length, &encVersion)) {
- return gFalse;
- }
- if ((fileKeyLength = length) > 16) {
- fileKeyLength = 16;
- }
- memcpy(fileKey, key, fileKeyLength);
- (*xsh->freeKey)(xsh->handlerData, docData, key, length);
- return gTrue;
-}
-
-#endif // ENABLE_PLUGINS
diff --git a/Build/source/libs/xpdf/xpdf/SecurityHandler.h b/Build/source/libs/xpdf/xpdf/SecurityHandler.h
deleted file mode 100644
index a27868c249d..00000000000
--- a/Build/source/libs/xpdf/xpdf/SecurityHandler.h
+++ /dev/null
@@ -1,160 +0,0 @@
-//========================================================================
-//
-// SecurityHandler.h
-//
-// Copyright 2004 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef SECURITYHANDLER_H
-#define SECURITYHANDLER_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "Object.h"
-
-class GString;
-class PDFDoc;
-struct XpdfSecurityHandler;
-
-//------------------------------------------------------------------------
-// SecurityHandler
-//------------------------------------------------------------------------
-
-class SecurityHandler {
-public:
-
- static SecurityHandler *make(PDFDoc *docA, Object *encryptDictA);
-
- SecurityHandler(PDFDoc *docA);
- virtual ~SecurityHandler();
-
- // Check the document's encryption. If the document is encrypted,
- // this will first try <ownerPassword> and <userPassword> (in
- // "batch" mode), and if those fail, it will attempt to request a
- // password from the user. This is the high-level function that
- // calls the lower level functions for the specific security handler
- // (requesting a password three times, etc.). Returns true if the
- // document can be opened (if it's unencrypted, or if a correct
- // password is obtained); false otherwise (encrypted and no correct
- // password).
- GBool checkEncryption(GString *ownerPassword,
- GString *userPassword);
-
- // Create authorization data for the specified owner and user
- // passwords. If the security handler doesn't support "batch" mode,
- // this function should return NULL.
- virtual void *makeAuthData(GString *ownerPassword,
- GString *userPassword) = 0;
-
- // Construct authorization data, typically by prompting the user for
- // a password. Returns an authorization data object, or NULL to
- // cancel.
- virtual void *getAuthData() = 0;
-
- // Free the authorization data returned by makeAuthData or
- // getAuthData.
- virtual void freeAuthData(void *authData) = 0;
-
- // Attempt to authorize the document, using the supplied
- // authorization data (which may be NULL). Returns true if
- // successful (i.e., if at least the right to open the document was
- // granted).
- virtual GBool authorize(void *authData) = 0;
-
- // Return the various authorization parameters. These are only
- // valid after authorize has returned true.
- virtual int getPermissionFlags() = 0;
- virtual GBool getOwnerPasswordOk() = 0;
- virtual Guchar *getFileKey() = 0;
- virtual int getFileKeyLength() = 0;
- virtual int getEncVersion() = 0;
- virtual CryptAlgorithm getEncAlgorithm() = 0;
-
-protected:
-
- PDFDoc *doc;
-};
-
-//------------------------------------------------------------------------
-// StandardSecurityHandler
-//------------------------------------------------------------------------
-
-class StandardSecurityHandler: public SecurityHandler {
-public:
-
- StandardSecurityHandler(PDFDoc *docA, Object *encryptDictA);
- virtual ~StandardSecurityHandler();
-
- virtual void *makeAuthData(GString *ownerPassword,
- GString *userPassword);
- virtual void *getAuthData();
- virtual void freeAuthData(void *authData);
- virtual GBool authorize(void *authData);
- virtual int getPermissionFlags() { return permFlags; }
- virtual GBool getOwnerPasswordOk() { return ownerPasswordOk; }
- virtual Guchar *getFileKey() { return fileKey; }
- virtual int getFileKeyLength() { return fileKeyLength; }
- virtual int getEncVersion() { return encVersion; }
- virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; }
-
-private:
-
- int permFlags;
- GBool ownerPasswordOk;
- Guchar fileKey[16];
- int fileKeyLength;
- int encVersion;
- int encRevision;
- CryptAlgorithm encAlgorithm;
- GBool encryptMetadata;
-
- GString *ownerKey, *userKey;
- GString *fileID;
- GBool ok;
-};
-
-#ifdef ENABLE_PLUGINS
-//------------------------------------------------------------------------
-// ExternalSecurityHandler
-//------------------------------------------------------------------------
-
-class ExternalSecurityHandler: public SecurityHandler {
-public:
-
- ExternalSecurityHandler(PDFDoc *docA, Object *encryptDictA,
- XpdfSecurityHandler *xshA);
- virtual ~ExternalSecurityHandler();
-
- virtual void *makeAuthData(GString *ownerPassword,
- GString *userPassword);
- virtual void *getAuthData();
- virtual void freeAuthData(void *authData);
- virtual GBool authorize(void *authData);
- virtual int getPermissionFlags() { return permFlags; }
- virtual GBool getOwnerPasswordOk() { return gFalse; }
- virtual Guchar *getFileKey() { return fileKey; }
- virtual int getFileKeyLength() { return fileKeyLength; }
- virtual int getEncVersion() { return encVersion; }
- virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; }
-
-private:
-
- Object encryptDict;
- XpdfSecurityHandler *xsh;
- void *docData;
- int permFlags;
- Guchar fileKey[16];
- int fileKeyLength;
- int encVersion;
- CryptAlgorithm encAlgorithm;
- GBool ok;
-};
-#endif // ENABLE_PLUGINS
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/Stream-CCITT.h b/Build/source/libs/xpdf/xpdf/Stream-CCITT.h
deleted file mode 100644
index c4458fe714e..00000000000
--- a/Build/source/libs/xpdf/xpdf/Stream-CCITT.h
+++ /dev/null
@@ -1,459 +0,0 @@
-//========================================================================
-//
-// Stream-CCITT.h
-//
-// Tables for CCITT Fax decoding.
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-struct CCITTCode {
- short bits;
- short n;
-};
-
-#define ccittEOL -2
-
-//------------------------------------------------------------------------
-// 2D codes
-//------------------------------------------------------------------------
-
-#define twoDimPass 0
-#define twoDimHoriz 1
-#define twoDimVert0 2
-#define twoDimVertR1 3
-#define twoDimVertL1 4
-#define twoDimVertR2 5
-#define twoDimVertL2 6
-#define twoDimVertR3 7
-#define twoDimVertL3 8
-
-// 1-7 bit codes
-static CCITTCode twoDimTab1[128] = {
- {-1, -1}, {-1, -1}, // 000000x
- {7, twoDimVertL3}, // 0000010
- {7, twoDimVertR3}, // 0000011
- {6, twoDimVertL2}, {6, twoDimVertL2}, // 000010x
- {6, twoDimVertR2}, {6, twoDimVertR2}, // 000011x
- {4, twoDimPass}, {4, twoDimPass}, // 0001xxx
- {4, twoDimPass}, {4, twoDimPass},
- {4, twoDimPass}, {4, twoDimPass},
- {4, twoDimPass}, {4, twoDimPass},
- {3, twoDimHoriz}, {3, twoDimHoriz}, // 001xxxx
- {3, twoDimHoriz}, {3, twoDimHoriz},
- {3, twoDimHoriz}, {3, twoDimHoriz},
- {3, twoDimHoriz}, {3, twoDimHoriz},
- {3, twoDimHoriz}, {3, twoDimHoriz},
- {3, twoDimHoriz}, {3, twoDimHoriz},
- {3, twoDimHoriz}, {3, twoDimHoriz},
- {3, twoDimHoriz}, {3, twoDimHoriz},
- {3, twoDimVertL1}, {3, twoDimVertL1}, // 010xxxx
- {3, twoDimVertL1}, {3, twoDimVertL1},
- {3, twoDimVertL1}, {3, twoDimVertL1},
- {3, twoDimVertL1}, {3, twoDimVertL1},
- {3, twoDimVertL1}, {3, twoDimVertL1},
- {3, twoDimVertL1}, {3, twoDimVertL1},
- {3, twoDimVertL1}, {3, twoDimVertL1},
- {3, twoDimVertL1}, {3, twoDimVertL1},
- {3, twoDimVertR1}, {3, twoDimVertR1}, // 011xxxx
- {3, twoDimVertR1}, {3, twoDimVertR1},
- {3, twoDimVertR1}, {3, twoDimVertR1},
- {3, twoDimVertR1}, {3, twoDimVertR1},
- {3, twoDimVertR1}, {3, twoDimVertR1},
- {3, twoDimVertR1}, {3, twoDimVertR1},
- {3, twoDimVertR1}, {3, twoDimVertR1},
- {3, twoDimVertR1}, {3, twoDimVertR1},
- {1, twoDimVert0}, {1, twoDimVert0}, // 1xxxxxx
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0},
- {1, twoDimVert0}, {1, twoDimVert0}
-};
-
-//------------------------------------------------------------------------
-// white run lengths
-//------------------------------------------------------------------------
-
-// 11-12 bit codes (upper 7 bits are 0)
-static CCITTCode whiteTab1[32] = {
- {-1, -1}, // 00000
- {12, ccittEOL}, // 00001
- {-1, -1}, {-1, -1}, // 0001x
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 001xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 010xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 011xx
- {11, 1792}, {11, 1792}, // 1000x
- {12, 1984}, // 10010
- {12, 2048}, // 10011
- {12, 2112}, // 10100
- {12, 2176}, // 10101
- {12, 2240}, // 10110
- {12, 2304}, // 10111
- {11, 1856}, {11, 1856}, // 1100x
- {11, 1920}, {11, 1920}, // 1101x
- {12, 2368}, // 11100
- {12, 2432}, // 11101
- {12, 2496}, // 11110
- {12, 2560} // 11111
-};
-
-// 1-9 bit codes
-static CCITTCode whiteTab2[512] = {
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000000xx
- {8, 29}, {8, 29}, // 00000010x
- {8, 30}, {8, 30}, // 00000011x
- {8, 45}, {8, 45}, // 00000100x
- {8, 46}, {8, 46}, // 00000101x
- {7, 22}, {7, 22}, {7, 22}, {7, 22}, // 0000011xx
- {7, 23}, {7, 23}, {7, 23}, {7, 23}, // 0000100xx
- {8, 47}, {8, 47}, // 00001010x
- {8, 48}, {8, 48}, // 00001011x
- {6, 13}, {6, 13}, {6, 13}, {6, 13}, // 000011xxx
- {6, 13}, {6, 13}, {6, 13}, {6, 13},
- {7, 20}, {7, 20}, {7, 20}, {7, 20}, // 0001000xx
- {8, 33}, {8, 33}, // 00010010x
- {8, 34}, {8, 34}, // 00010011x
- {8, 35}, {8, 35}, // 00010100x
- {8, 36}, {8, 36}, // 00010101x
- {8, 37}, {8, 37}, // 00010110x
- {8, 38}, {8, 38}, // 00010111x
- {7, 19}, {7, 19}, {7, 19}, {7, 19}, // 0001100xx
- {8, 31}, {8, 31}, // 00011010x
- {8, 32}, {8, 32}, // 00011011x
- {6, 1}, {6, 1}, {6, 1}, {6, 1}, // 000111xxx
- {6, 1}, {6, 1}, {6, 1}, {6, 1},
- {6, 12}, {6, 12}, {6, 12}, {6, 12}, // 001000xxx
- {6, 12}, {6, 12}, {6, 12}, {6, 12},
- {8, 53}, {8, 53}, // 00100100x
- {8, 54}, {8, 54}, // 00100101x
- {7, 26}, {7, 26}, {7, 26}, {7, 26}, // 0010011xx
- {8, 39}, {8, 39}, // 00101000x
- {8, 40}, {8, 40}, // 00101001x
- {8, 41}, {8, 41}, // 00101010x
- {8, 42}, {8, 42}, // 00101011x
- {8, 43}, {8, 43}, // 00101100x
- {8, 44}, {8, 44}, // 00101101x
- {7, 21}, {7, 21}, {7, 21}, {7, 21}, // 0010111xx
- {7, 28}, {7, 28}, {7, 28}, {7, 28}, // 0011000xx
- {8, 61}, {8, 61}, // 00110010x
- {8, 62}, {8, 62}, // 00110011x
- {8, 63}, {8, 63}, // 00110100x
- {8, 0}, {8, 0}, // 00110101x
- {8, 320}, {8, 320}, // 00110110x
- {8, 384}, {8, 384}, // 00110111x
- {5, 10}, {5, 10}, {5, 10}, {5, 10}, // 00111xxxx
- {5, 10}, {5, 10}, {5, 10}, {5, 10},
- {5, 10}, {5, 10}, {5, 10}, {5, 10},
- {5, 10}, {5, 10}, {5, 10}, {5, 10},
- {5, 11}, {5, 11}, {5, 11}, {5, 11}, // 01000xxxx
- {5, 11}, {5, 11}, {5, 11}, {5, 11},
- {5, 11}, {5, 11}, {5, 11}, {5, 11},
- {5, 11}, {5, 11}, {5, 11}, {5, 11},
- {7, 27}, {7, 27}, {7, 27}, {7, 27}, // 0100100xx
- {8, 59}, {8, 59}, // 01001010x
- {8, 60}, {8, 60}, // 01001011x
- {9, 1472}, // 010011000
- {9, 1536}, // 010011001
- {9, 1600}, // 010011010
- {9, 1728}, // 010011011
- {7, 18}, {7, 18}, {7, 18}, {7, 18}, // 0100111xx
- {7, 24}, {7, 24}, {7, 24}, {7, 24}, // 0101000xx
- {8, 49}, {8, 49}, // 01010010x
- {8, 50}, {8, 50}, // 01010011x
- {8, 51}, {8, 51}, // 01010100x
- {8, 52}, {8, 52}, // 01010101x
- {7, 25}, {7, 25}, {7, 25}, {7, 25}, // 0101011xx
- {8, 55}, {8, 55}, // 01011000x
- {8, 56}, {8, 56}, // 01011001x
- {8, 57}, {8, 57}, // 01011010x
- {8, 58}, {8, 58}, // 01011011x
- {6, 192}, {6, 192}, {6, 192}, {6, 192}, // 010111xxx
- {6, 192}, {6, 192}, {6, 192}, {6, 192},
- {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664}, // 011000xxx
- {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664},
- {8, 448}, {8, 448}, // 01100100x
- {8, 512}, {8, 512}, // 01100101x
- {9, 704}, // 011001100
- {9, 768}, // 011001101
- {8, 640}, {8, 640}, // 01100111x
- {8, 576}, {8, 576}, // 01101000x
- {9, 832}, // 011010010
- {9, 896}, // 011010011
- {9, 960}, // 011010100
- {9, 1024}, // 011010101
- {9, 1088}, // 011010110
- {9, 1152}, // 011010111
- {9, 1216}, // 011011000
- {9, 1280}, // 011011001
- {9, 1344}, // 011011010
- {9, 1408}, // 011011011
- {7, 256}, {7, 256}, {7, 256}, {7, 256}, // 0110111xx
- {4, 2}, {4, 2}, {4, 2}, {4, 2}, // 0111xxxxx
- {4, 2}, {4, 2}, {4, 2}, {4, 2},
- {4, 2}, {4, 2}, {4, 2}, {4, 2},
- {4, 2}, {4, 2}, {4, 2}, {4, 2},
- {4, 2}, {4, 2}, {4, 2}, {4, 2},
- {4, 2}, {4, 2}, {4, 2}, {4, 2},
- {4, 2}, {4, 2}, {4, 2}, {4, 2},
- {4, 2}, {4, 2}, {4, 2}, {4, 2},
- {4, 3}, {4, 3}, {4, 3}, {4, 3}, // 1000xxxxx
- {4, 3}, {4, 3}, {4, 3}, {4, 3},
- {4, 3}, {4, 3}, {4, 3}, {4, 3},
- {4, 3}, {4, 3}, {4, 3}, {4, 3},
- {4, 3}, {4, 3}, {4, 3}, {4, 3},
- {4, 3}, {4, 3}, {4, 3}, {4, 3},
- {4, 3}, {4, 3}, {4, 3}, {4, 3},
- {4, 3}, {4, 3}, {4, 3}, {4, 3},
- {5, 128}, {5, 128}, {5, 128}, {5, 128}, // 10010xxxx
- {5, 128}, {5, 128}, {5, 128}, {5, 128},
- {5, 128}, {5, 128}, {5, 128}, {5, 128},
- {5, 128}, {5, 128}, {5, 128}, {5, 128},
- {5, 8}, {5, 8}, {5, 8}, {5, 8}, // 10011xxxx
- {5, 8}, {5, 8}, {5, 8}, {5, 8},
- {5, 8}, {5, 8}, {5, 8}, {5, 8},
- {5, 8}, {5, 8}, {5, 8}, {5, 8},
- {5, 9}, {5, 9}, {5, 9}, {5, 9}, // 10100xxxx
- {5, 9}, {5, 9}, {5, 9}, {5, 9},
- {5, 9}, {5, 9}, {5, 9}, {5, 9},
- {5, 9}, {5, 9}, {5, 9}, {5, 9},
- {6, 16}, {6, 16}, {6, 16}, {6, 16}, // 101010xxx
- {6, 16}, {6, 16}, {6, 16}, {6, 16},
- {6, 17}, {6, 17}, {6, 17}, {6, 17}, // 101011xxx
- {6, 17}, {6, 17}, {6, 17}, {6, 17},
- {4, 4}, {4, 4}, {4, 4}, {4, 4}, // 1011xxxxx
- {4, 4}, {4, 4}, {4, 4}, {4, 4},
- {4, 4}, {4, 4}, {4, 4}, {4, 4},
- {4, 4}, {4, 4}, {4, 4}, {4, 4},
- {4, 4}, {4, 4}, {4, 4}, {4, 4},
- {4, 4}, {4, 4}, {4, 4}, {4, 4},
- {4, 4}, {4, 4}, {4, 4}, {4, 4},
- {4, 4}, {4, 4}, {4, 4}, {4, 4},
- {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 1100xxxxx
- {4, 5}, {4, 5}, {4, 5}, {4, 5},
- {4, 5}, {4, 5}, {4, 5}, {4, 5},
- {4, 5}, {4, 5}, {4, 5}, {4, 5},
- {4, 5}, {4, 5}, {4, 5}, {4, 5},
- {4, 5}, {4, 5}, {4, 5}, {4, 5},
- {4, 5}, {4, 5}, {4, 5}, {4, 5},
- {4, 5}, {4, 5}, {4, 5}, {4, 5},
- {6, 14}, {6, 14}, {6, 14}, {6, 14}, // 110100xxx
- {6, 14}, {6, 14}, {6, 14}, {6, 14},
- {6, 15}, {6, 15}, {6, 15}, {6, 15}, // 110101xxx
- {6, 15}, {6, 15}, {6, 15}, {6, 15},
- {5, 64}, {5, 64}, {5, 64}, {5, 64}, // 11011xxxx
- {5, 64}, {5, 64}, {5, 64}, {5, 64},
- {5, 64}, {5, 64}, {5, 64}, {5, 64},
- {5, 64}, {5, 64}, {5, 64}, {5, 64},
- {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 1110xxxxx
- {4, 6}, {4, 6}, {4, 6}, {4, 6},
- {4, 6}, {4, 6}, {4, 6}, {4, 6},
- {4, 6}, {4, 6}, {4, 6}, {4, 6},
- {4, 6}, {4, 6}, {4, 6}, {4, 6},
- {4, 6}, {4, 6}, {4, 6}, {4, 6},
- {4, 6}, {4, 6}, {4, 6}, {4, 6},
- {4, 6}, {4, 6}, {4, 6}, {4, 6},
- {4, 7}, {4, 7}, {4, 7}, {4, 7}, // 1111xxxxx
- {4, 7}, {4, 7}, {4, 7}, {4, 7},
- {4, 7}, {4, 7}, {4, 7}, {4, 7},
- {4, 7}, {4, 7}, {4, 7}, {4, 7},
- {4, 7}, {4, 7}, {4, 7}, {4, 7},
- {4, 7}, {4, 7}, {4, 7}, {4, 7},
- {4, 7}, {4, 7}, {4, 7}, {4, 7},
- {4, 7}, {4, 7}, {4, 7}, {4, 7}
-};
-
-//------------------------------------------------------------------------
-// black run lengths
-//------------------------------------------------------------------------
-
-// 10-13 bit codes (upper 6 bits are 0)
-static CCITTCode blackTab1[128] = {
- {-1, -1}, {-1, -1}, // 000000000000x
- {12, ccittEOL}, {12, ccittEOL}, // 000000000001x
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000001xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000010xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000011xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000100xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000101xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000110xx
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000111xx
- {11, 1792}, {11, 1792}, {11, 1792}, {11, 1792}, // 00000001000xx
- {12, 1984}, {12, 1984}, // 000000010010x
- {12, 2048}, {12, 2048}, // 000000010011x
- {12, 2112}, {12, 2112}, // 000000010100x
- {12, 2176}, {12, 2176}, // 000000010101x
- {12, 2240}, {12, 2240}, // 000000010110x
- {12, 2304}, {12, 2304}, // 000000010111x
- {11, 1856}, {11, 1856}, {11, 1856}, {11, 1856}, // 00000001100xx
- {11, 1920}, {11, 1920}, {11, 1920}, {11, 1920}, // 00000001101xx
- {12, 2368}, {12, 2368}, // 000000011100x
- {12, 2432}, {12, 2432}, // 000000011101x
- {12, 2496}, {12, 2496}, // 000000011110x
- {12, 2560}, {12, 2560}, // 000000011111x
- {10, 18}, {10, 18}, {10, 18}, {10, 18}, // 0000001000xxx
- {10, 18}, {10, 18}, {10, 18}, {10, 18},
- {12, 52}, {12, 52}, // 000000100100x
- {13, 640}, // 0000001001010
- {13, 704}, // 0000001001011
- {13, 768}, // 0000001001100
- {13, 832}, // 0000001001101
- {12, 55}, {12, 55}, // 000000100111x
- {12, 56}, {12, 56}, // 000000101000x
- {13, 1280}, // 0000001010010
- {13, 1344}, // 0000001010011
- {13, 1408}, // 0000001010100
- {13, 1472}, // 0000001010101
- {12, 59}, {12, 59}, // 000000101011x
- {12, 60}, {12, 60}, // 000000101100x
- {13, 1536}, // 0000001011010
- {13, 1600}, // 0000001011011
- {11, 24}, {11, 24}, {11, 24}, {11, 24}, // 00000010111xx
- {11, 25}, {11, 25}, {11, 25}, {11, 25}, // 00000011000xx
- {13, 1664}, // 0000001100100
- {13, 1728}, // 0000001100101
- {12, 320}, {12, 320}, // 000000110011x
- {12, 384}, {12, 384}, // 000000110100x
- {12, 448}, {12, 448}, // 000000110101x
- {13, 512}, // 0000001101100
- {13, 576}, // 0000001101101
- {12, 53}, {12, 53}, // 000000110111x
- {12, 54}, {12, 54}, // 000000111000x
- {13, 896}, // 0000001110010
- {13, 960}, // 0000001110011
- {13, 1024}, // 0000001110100
- {13, 1088}, // 0000001110101
- {13, 1152}, // 0000001110110
- {13, 1216}, // 0000001110111
- {10, 64}, {10, 64}, {10, 64}, {10, 64}, // 0000001111xxx
- {10, 64}, {10, 64}, {10, 64}, {10, 64}
-};
-
-// 7-12 bit codes (upper 4 bits are 0)
-static CCITTCode blackTab2[192] = {
- {8, 13}, {8, 13}, {8, 13}, {8, 13}, // 00000100xxxx
- {8, 13}, {8, 13}, {8, 13}, {8, 13},
- {8, 13}, {8, 13}, {8, 13}, {8, 13},
- {8, 13}, {8, 13}, {8, 13}, {8, 13},
- {11, 23}, {11, 23}, // 00000101000x
- {12, 50}, // 000001010010
- {12, 51}, // 000001010011
- {12, 44}, // 000001010100
- {12, 45}, // 000001010101
- {12, 46}, // 000001010110
- {12, 47}, // 000001010111
- {12, 57}, // 000001011000
- {12, 58}, // 000001011001
- {12, 61}, // 000001011010
- {12, 256}, // 000001011011
- {10, 16}, {10, 16}, {10, 16}, {10, 16}, // 0000010111xx
- {10, 17}, {10, 17}, {10, 17}, {10, 17}, // 0000011000xx
- {12, 48}, // 000001100100
- {12, 49}, // 000001100101
- {12, 62}, // 000001100110
- {12, 63}, // 000001100111
- {12, 30}, // 000001101000
- {12, 31}, // 000001101001
- {12, 32}, // 000001101010
- {12, 33}, // 000001101011
- {12, 40}, // 000001101100
- {12, 41}, // 000001101101
- {11, 22}, {11, 22}, // 00000110111x
- {8, 14}, {8, 14}, {8, 14}, {8, 14}, // 00000111xxxx
- {8, 14}, {8, 14}, {8, 14}, {8, 14},
- {8, 14}, {8, 14}, {8, 14}, {8, 14},
- {8, 14}, {8, 14}, {8, 14}, {8, 14},
- {7, 10}, {7, 10}, {7, 10}, {7, 10}, // 0000100xxxxx
- {7, 10}, {7, 10}, {7, 10}, {7, 10},
- {7, 10}, {7, 10}, {7, 10}, {7, 10},
- {7, 10}, {7, 10}, {7, 10}, {7, 10},
- {7, 10}, {7, 10}, {7, 10}, {7, 10},
- {7, 10}, {7, 10}, {7, 10}, {7, 10},
- {7, 10}, {7, 10}, {7, 10}, {7, 10},
- {7, 10}, {7, 10}, {7, 10}, {7, 10},
- {7, 11}, {7, 11}, {7, 11}, {7, 11}, // 0000101xxxxx
- {7, 11}, {7, 11}, {7, 11}, {7, 11},
- {7, 11}, {7, 11}, {7, 11}, {7, 11},
- {7, 11}, {7, 11}, {7, 11}, {7, 11},
- {7, 11}, {7, 11}, {7, 11}, {7, 11},
- {7, 11}, {7, 11}, {7, 11}, {7, 11},
- {7, 11}, {7, 11}, {7, 11}, {7, 11},
- {7, 11}, {7, 11}, {7, 11}, {7, 11},
- {9, 15}, {9, 15}, {9, 15}, {9, 15}, // 000011000xxx
- {9, 15}, {9, 15}, {9, 15}, {9, 15},
- {12, 128}, // 000011001000
- {12, 192}, // 000011001001
- {12, 26}, // 000011001010
- {12, 27}, // 000011001011
- {12, 28}, // 000011001100
- {12, 29}, // 000011001101
- {11, 19}, {11, 19}, // 00001100111x
- {11, 20}, {11, 20}, // 00001101000x
- {12, 34}, // 000011010010
- {12, 35}, // 000011010011
- {12, 36}, // 000011010100
- {12, 37}, // 000011010101
- {12, 38}, // 000011010110
- {12, 39}, // 000011010111
- {11, 21}, {11, 21}, // 00001101100x
- {12, 42}, // 000011011010
- {12, 43}, // 000011011011
- {10, 0}, {10, 0}, {10, 0}, {10, 0}, // 0000110111xx
- {7, 12}, {7, 12}, {7, 12}, {7, 12}, // 0000111xxxxx
- {7, 12}, {7, 12}, {7, 12}, {7, 12},
- {7, 12}, {7, 12}, {7, 12}, {7, 12},
- {7, 12}, {7, 12}, {7, 12}, {7, 12},
- {7, 12}, {7, 12}, {7, 12}, {7, 12},
- {7, 12}, {7, 12}, {7, 12}, {7, 12},
- {7, 12}, {7, 12}, {7, 12}, {7, 12},
- {7, 12}, {7, 12}, {7, 12}, {7, 12}
-};
-
-// 2-6 bit codes
-static CCITTCode blackTab3[64] = {
- {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000xx
- {6, 9}, // 000100
- {6, 8}, // 000101
- {5, 7}, {5, 7}, // 00011x
- {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 0010xx
- {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 0011xx
- {3, 1}, {3, 1}, {3, 1}, {3, 1}, // 010xxx
- {3, 1}, {3, 1}, {3, 1}, {3, 1},
- {3, 4}, {3, 4}, {3, 4}, {3, 4}, // 011xxx
- {3, 4}, {3, 4}, {3, 4}, {3, 4},
- {2, 3}, {2, 3}, {2, 3}, {2, 3}, // 10xxxx
- {2, 3}, {2, 3}, {2, 3}, {2, 3},
- {2, 3}, {2, 3}, {2, 3}, {2, 3},
- {2, 3}, {2, 3}, {2, 3}, {2, 3},
- {2, 2}, {2, 2}, {2, 2}, {2, 2}, // 11xxxx
- {2, 2}, {2, 2}, {2, 2}, {2, 2},
- {2, 2}, {2, 2}, {2, 2}, {2, 2},
- {2, 2}, {2, 2}, {2, 2}, {2, 2}
-};
diff --git a/Build/source/libs/xpdf/xpdf/Stream.cc b/Build/source/libs/xpdf/xpdf/Stream.cc
deleted file mode 100644
index 812d00c39a3..00000000000
--- a/Build/source/libs/xpdf/xpdf/Stream.cc
+++ /dev/null
@@ -1,4686 +0,0 @@
-//========================================================================
-//
-// Stream.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <limits.h>
-#ifndef WIN32
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <ctype.h>
-#include "gmem.h"
-#include "gfile.h"
-#include "config.h"
-#include "Error.h"
-#include "Object.h"
-#include "Lexer.h"
-#include "GfxState.h"
-#include "Stream.h"
-#include "JBIG2Stream.h"
-#include "JPXStream.h"
-#include "Stream-CCITT.h"
-
-#ifdef __DJGPP__
-static GBool setDJSYSFLAGS = gFalse;
-#endif
-
-#ifdef VMS
-#ifdef __GNUC__
-#define SEEK_SET 0
-#define SEEK_CUR 1
-#define SEEK_END 2
-#endif
-#endif
-
-//------------------------------------------------------------------------
-// Stream (base class)
-//------------------------------------------------------------------------
-
-Stream::Stream() {
- ref = 1;
-}
-
-Stream::~Stream() {
-}
-
-void Stream::close() {
-}
-
-int Stream::getRawChar() {
- error(-1, "Internal: called getRawChar() on non-predictor stream");
- return EOF;
-}
-
-char *Stream::getLine(char *buf, int size) {
- int i;
- int c;
-
- if (lookChar() == EOF)
- return NULL;
- for (i = 0; i < size - 1; ++i) {
- c = getChar();
- if (c == EOF || c == '\n')
- break;
- if (c == '\r') {
- if ((c = lookChar()) == '\n')
- getChar();
- break;
- }
- buf[i] = c;
- }
- buf[i] = '\0';
- return buf;
-}
-
-GString *Stream::getPSFilter(int psLevel, char *indent) {
- return new GString();
-}
-
-Stream *Stream::addFilters(Object *dict) {
- Object obj, obj2;
- Object params, params2;
- Stream *str;
- int i;
-
- str = this;
- dict->dictLookup("Filter", &obj);
- if (obj.isNull()) {
- obj.free();
- dict->dictLookup("F", &obj);
- }
- dict->dictLookup("DecodeParms", &params);
- if (params.isNull()) {
- params.free();
- dict->dictLookup("DP", &params);
- }
- if (obj.isName()) {
- str = makeFilter(obj.getName(), str, &params);
- } else if (obj.isArray()) {
- for (i = 0; i < obj.arrayGetLength(); ++i) {
- obj.arrayGet(i, &obj2);
- if (params.isArray())
- params.arrayGet(i, &params2);
- else
- params2.initNull();
- if (obj2.isName()) {
- str = makeFilter(obj2.getName(), str, &params2);
- } else {
- error(getPos(), "Bad filter name");
- str = new EOFStream(str);
- }
- obj2.free();
- params2.free();
- }
- } else if (!obj.isNull()) {
- error(getPos(), "Bad 'Filter' attribute in stream");
- }
- obj.free();
- params.free();
-
- return str;
-}
-
-Stream *Stream::makeFilter(char *name, Stream *str, Object *params) {
- int pred; // parameters
- int colors;
- int bits;
- int early;
- int encoding;
- GBool endOfLine, byteAlign, endOfBlock, black;
- int columns, rows;
- int colorXform;
- Object globals, obj;
-
- if (!strcmp(name, "ASCIIHexDecode") || !strcmp(name, "AHx")) {
- str = new ASCIIHexStream(str);
- } else if (!strcmp(name, "ASCII85Decode") || !strcmp(name, "A85")) {
- str = new ASCII85Stream(str);
- } else if (!strcmp(name, "LZWDecode") || !strcmp(name, "LZW")) {
- pred = 1;
- columns = 1;
- colors = 1;
- bits = 8;
- early = 1;
- if (params->isDict()) {
- params->dictLookup("Predictor", &obj);
- if (obj.isInt())
- pred = obj.getInt();
- obj.free();
- params->dictLookup("Columns", &obj);
- if (obj.isInt())
- columns = obj.getInt();
- obj.free();
- params->dictLookup("Colors", &obj);
- if (obj.isInt())
- colors = obj.getInt();
- obj.free();
- params->dictLookup("BitsPerComponent", &obj);
- if (obj.isInt())
- bits = obj.getInt();
- obj.free();
- params->dictLookup("EarlyChange", &obj);
- if (obj.isInt())
- early = obj.getInt();
- obj.free();
- }
- str = new LZWStream(str, pred, columns, colors, bits, early);
- } else if (!strcmp(name, "RunLengthDecode") || !strcmp(name, "RL")) {
- str = new RunLengthStream(str);
- } else if (!strcmp(name, "CCITTFaxDecode") || !strcmp(name, "CCF")) {
- encoding = 0;
- endOfLine = gFalse;
- byteAlign = gFalse;
- columns = 1728;
- rows = 0;
- endOfBlock = gTrue;
- black = gFalse;
- if (params->isDict()) {
- params->dictLookup("K", &obj);
- if (obj.isInt()) {
- encoding = obj.getInt();
- }
- obj.free();
- params->dictLookup("EndOfLine", &obj);
- if (obj.isBool()) {
- endOfLine = obj.getBool();
- }
- obj.free();
- params->dictLookup("EncodedByteAlign", &obj);
- if (obj.isBool()) {
- byteAlign = obj.getBool();
- }
- obj.free();
- params->dictLookup("Columns", &obj);
- if (obj.isInt()) {
- columns = obj.getInt();
- }
- obj.free();
- params->dictLookup("Rows", &obj);
- if (obj.isInt()) {
- rows = obj.getInt();
- }
- obj.free();
- params->dictLookup("EndOfBlock", &obj);
- if (obj.isBool()) {
- endOfBlock = obj.getBool();
- }
- obj.free();
- params->dictLookup("BlackIs1", &obj);
- if (obj.isBool()) {
- black = obj.getBool();
- }
- obj.free();
- }
- str = new CCITTFaxStream(str, encoding, endOfLine, byteAlign,
- columns, rows, endOfBlock, black);
- } else if (!strcmp(name, "DCTDecode") || !strcmp(name, "DCT")) {
- colorXform = -1;
- if (params->isDict()) {
- if (params->dictLookup("ColorTransform", &obj)->isInt()) {
- colorXform = obj.getInt();
- }
- obj.free();
- }
- str = new DCTStream(str, colorXform);
- } else if (!strcmp(name, "FlateDecode") || !strcmp(name, "Fl")) {
- pred = 1;
- columns = 1;
- colors = 1;
- bits = 8;
- if (params->isDict()) {
- params->dictLookup("Predictor", &obj);
- if (obj.isInt())
- pred = obj.getInt();
- obj.free();
- params->dictLookup("Columns", &obj);
- if (obj.isInt())
- columns = obj.getInt();
- obj.free();
- params->dictLookup("Colors", &obj);
- if (obj.isInt())
- colors = obj.getInt();
- obj.free();
- params->dictLookup("BitsPerComponent", &obj);
- if (obj.isInt())
- bits = obj.getInt();
- obj.free();
- }
- str = new FlateStream(str, pred, columns, colors, bits);
- } else if (!strcmp(name, "JBIG2Decode")) {
- if (params->isDict()) {
- params->dictLookup("JBIG2Globals", &globals);
- }
- str = new JBIG2Stream(str, &globals);
- globals.free();
- } else if (!strcmp(name, "JPXDecode")) {
- str = new JPXStream(str);
- } else {
- error(getPos(), "Unknown filter '%s'", name);
- str = new EOFStream(str);
- }
- return str;
-}
-
-//------------------------------------------------------------------------
-// BaseStream
-//------------------------------------------------------------------------
-
-BaseStream::BaseStream(Object *dictA) {
- dict = *dictA;
-}
-
-BaseStream::~BaseStream() {
- dict.free();
-}
-
-//------------------------------------------------------------------------
-// FilterStream
-//------------------------------------------------------------------------
-
-FilterStream::FilterStream(Stream *strA) {
- str = strA;
-}
-
-FilterStream::~FilterStream() {
-}
-
-void FilterStream::close() {
- str->close();
-}
-
-void FilterStream::setPos(Guint pos, int dir) {
- error(-1, "Internal: called setPos() on FilterStream");
-}
-
-//------------------------------------------------------------------------
-// ImageStream
-//------------------------------------------------------------------------
-
-ImageStream::ImageStream(Stream *strA, int widthA, int nCompsA, int nBitsA) {
- int imgLineSize;
-
- str = strA;
- width = widthA;
- nComps = nCompsA;
- nBits = nBitsA;
-
- nVals = width * nComps;
- if (nBits == 1) {
- imgLineSize = (nVals + 7) & ~7;
- } else {
- imgLineSize = nVals;
- }
- imgLine = (Guchar *)gmallocn(imgLineSize, sizeof(Guchar));
- imgIdx = nVals;
-}
-
-ImageStream::~ImageStream() {
- gfree(imgLine);
-}
-
-void ImageStream::reset() {
- str->reset();
-}
-
-GBool ImageStream::getPixel(Guchar *pix) {
- int i;
-
- if (imgIdx >= nVals) {
- getLine();
- imgIdx = 0;
- }
- for (i = 0; i < nComps; ++i) {
- pix[i] = imgLine[imgIdx++];
- }
- return gTrue;
-}
-
-Guchar *ImageStream::getLine() {
- Gulong buf, bitMask;
- int bits;
- int c;
- int i;
-
- if (nBits == 1) {
- for (i = 0; i < nVals; i += 8) {
- c = str->getChar();
- imgLine[i+0] = (Guchar)((c >> 7) & 1);
- imgLine[i+1] = (Guchar)((c >> 6) & 1);
- imgLine[i+2] = (Guchar)((c >> 5) & 1);
- imgLine[i+3] = (Guchar)((c >> 4) & 1);
- imgLine[i+4] = (Guchar)((c >> 3) & 1);
- imgLine[i+5] = (Guchar)((c >> 2) & 1);
- imgLine[i+6] = (Guchar)((c >> 1) & 1);
- imgLine[i+7] = (Guchar)(c & 1);
- }
- } else if (nBits == 8) {
- for (i = 0; i < nVals; ++i) {
- imgLine[i] = str->getChar();
- }
- } else {
- bitMask = (1 << nBits) - 1;
- buf = 0;
- bits = 0;
- for (i = 0; i < nVals; ++i) {
- if (bits < nBits) {
- buf = (buf << 8) | (str->getChar() & 0xff);
- bits += 8;
- }
- imgLine[i] = (Guchar)((buf >> (bits - nBits)) & bitMask);
- bits -= nBits;
- }
- }
- return imgLine;
-}
-
-void ImageStream::skipLine() {
- int n, i;
-
- n = (nVals * nBits + 7) >> 3;
- for (i = 0; i < n; ++i) {
- str->getChar();
- }
-}
-
-//------------------------------------------------------------------------
-// StreamPredictor
-//------------------------------------------------------------------------
-
-StreamPredictor::StreamPredictor(Stream *strA, int predictorA,
- int widthA, int nCompsA, int nBitsA) {
- str = strA;
- predictor = predictorA;
- width = widthA;
- nComps = nCompsA;
- nBits = nBitsA;
- predLine = NULL;
- ok = gFalse;
-
- nVals = width * nComps;
- pixBytes = (nComps * nBits + 7) >> 3;
- rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes;
- if (width <= 0 || nComps <= 0 || nBits <= 0 ||
- nComps > gfxColorMaxComps ||
- nBits > 16 ||
- width >= INT_MAX / nComps || // check for overflow in nVals
- nVals >= (INT_MAX - 7) / nBits) { // check for overflow in rowBytes
- return;
- }
- predLine = (Guchar *)gmalloc(rowBytes);
- memset(predLine, 0, rowBytes);
- predIdx = rowBytes;
-
- ok = gTrue;
-}
-
-StreamPredictor::~StreamPredictor() {
- gfree(predLine);
-}
-
-int StreamPredictor::lookChar() {
- if (predIdx >= rowBytes) {
- if (!getNextLine()) {
- return EOF;
- }
- }
- return predLine[predIdx];
-}
-
-int StreamPredictor::getChar() {
- if (predIdx >= rowBytes) {
- if (!getNextLine()) {
- return EOF;
- }
- }
- return predLine[predIdx++];
-}
-
-GBool StreamPredictor::getNextLine() {
- int curPred;
- Guchar upLeftBuf[gfxColorMaxComps * 2 + 1];
- int left, up, upLeft, p, pa, pb, pc;
- int c;
- Gulong inBuf, outBuf, bitMask;
- int inBits, outBits;
- int i, j, k, kk;
-
- // get PNG optimum predictor number
- if (predictor >= 10) {
- if ((curPred = str->getRawChar()) == EOF) {
- return gFalse;
- }
- curPred += 10;
- } else {
- curPred = predictor;
- }
-
- // read the raw line, apply PNG (byte) predictor
- memset(upLeftBuf, 0, pixBytes + 1);
- for (i = pixBytes; i < rowBytes; ++i) {
- for (j = pixBytes; j > 0; --j) {
- upLeftBuf[j] = upLeftBuf[j-1];
- }
- upLeftBuf[0] = predLine[i];
- if ((c = str->getRawChar()) == EOF) {
- if (i > pixBytes) {
- // this ought to return false, but some (broken) PDF files
- // contain truncated image data, and Adobe apparently reads the
- // last partial line
- break;
- }
- return gFalse;
- }
- switch (curPred) {
- case 11: // PNG sub
- predLine[i] = predLine[i - pixBytes] + (Guchar)c;
- break;
- case 12: // PNG up
- predLine[i] = predLine[i] + (Guchar)c;
- break;
- case 13: // PNG average
- predLine[i] = ((predLine[i - pixBytes] + predLine[i]) >> 1) +
- (Guchar)c;
- break;
- case 14: // PNG Paeth
- left = predLine[i - pixBytes];
- up = predLine[i];
- upLeft = upLeftBuf[pixBytes];
- p = left + up - upLeft;
- if ((pa = p - left) < 0)
- pa = -pa;
- if ((pb = p - up) < 0)
- pb = -pb;
- if ((pc = p - upLeft) < 0)
- pc = -pc;
- if (pa <= pb && pa <= pc)
- predLine[i] = left + (Guchar)c;
- else if (pb <= pc)
- predLine[i] = up + (Guchar)c;
- else
- predLine[i] = upLeft + (Guchar)c;
- break;
- case 10: // PNG none
- default: // no predictor or TIFF predictor
- predLine[i] = (Guchar)c;
- break;
- }
- }
-
- // apply TIFF (component) predictor
- if (predictor == 2) {
- if (nBits == 1) {
- inBuf = predLine[pixBytes - 1];
- for (i = pixBytes; i < rowBytes; i += 8) {
- // 1-bit add is just xor
- inBuf = (inBuf << 8) | predLine[i];
- predLine[i] ^= inBuf >> nComps;
- }
- } else if (nBits == 8) {
- for (i = pixBytes; i < rowBytes; ++i) {
- predLine[i] += predLine[i - nComps];
- }
- } else {
- memset(upLeftBuf, 0, nComps + 1);
- bitMask = (1 << nBits) - 1;
- inBuf = outBuf = 0;
- inBits = outBits = 0;
- j = k = pixBytes;
- for (i = 0; i < width; ++i) {
- for (kk = 0; kk < nComps; ++kk) {
- if (inBits < nBits) {
- inBuf = (inBuf << 8) | (predLine[j++] & 0xff);
- inBits += 8;
- }
- upLeftBuf[kk] = (Guchar)((upLeftBuf[kk] +
- (inBuf >> (inBits - nBits))) & bitMask);
- inBits -= nBits;
- outBuf = (outBuf << nBits) | upLeftBuf[kk];
- outBits += nBits;
- if (outBits >= 8) {
- predLine[k++] = (Guchar)(outBuf >> (outBits - 8));
- outBits -= 8;
- }
- }
- }
- if (outBits > 0) {
- predLine[k++] = (Guchar)((outBuf << (8 - outBits)) +
- (inBuf & ((1 << (8 - outBits)) - 1)));
- }
- }
- }
-
- // reset to start of line
- predIdx = pixBytes;
-
- return gTrue;
-}
-
-//------------------------------------------------------------------------
-// FileStream
-//------------------------------------------------------------------------
-
-FileStream::FileStream(FILE *fA, Guint startA, GBool limitedA,
- Guint lengthA, Object *dictA):
- BaseStream(dictA) {
- f = fA;
- start = startA;
- limited = limitedA;
- length = lengthA;
- bufPtr = bufEnd = buf;
- bufPos = start;
- savePos = 0;
- saved = gFalse;
-}
-
-FileStream::~FileStream() {
- close();
-}
-
-Stream *FileStream::makeSubStream(Guint startA, GBool limitedA,
- Guint lengthA, Object *dictA) {
- return new FileStream(f, startA, limitedA, lengthA, dictA);
-}
-
-void FileStream::reset() {
-#if HAVE_FSEEKO
- savePos = (Guint)ftello(f);
- fseeko(f, start, SEEK_SET);
-#elif HAVE_FSEEK64
- savePos = (Guint)ftell64(f);
- fseek64(f, start, SEEK_SET);
-#else
- savePos = (Guint)ftell(f);
- fseek(f, start, SEEK_SET);
-#endif
- saved = gTrue;
- bufPtr = bufEnd = buf;
- bufPos = start;
-}
-
-void FileStream::close() {
- if (saved) {
-#if HAVE_FSEEKO
- fseeko(f, savePos, SEEK_SET);
-#elif HAVE_FSEEK64
- fseek64(f, savePos, SEEK_SET);
-#else
- fseek(f, savePos, SEEK_SET);
-#endif
- saved = gFalse;
- }
-}
-
-GBool FileStream::fillBuf() {
- int n;
-
- bufPos += bufEnd - buf;
- bufPtr = bufEnd = buf;
- if (limited && bufPos >= start + length) {
- return gFalse;
- }
- if (limited && bufPos + fileStreamBufSize > start + length) {
- n = start + length - bufPos;
- } else {
- n = fileStreamBufSize;
- }
- n = fread(buf, 1, n, f);
- bufEnd = buf + n;
- if (bufPtr >= bufEnd) {
- return gFalse;
- }
- return gTrue;
-}
-
-void FileStream::setPos(Guint pos, int dir) {
- Guint size;
-
- if (dir >= 0) {
-#if HAVE_FSEEKO
- fseeko(f, pos, SEEK_SET);
-#elif HAVE_FSEEK64
- fseek64(f, pos, SEEK_SET);
-#else
- fseek(f, pos, SEEK_SET);
-#endif
- bufPos = pos;
- } else {
-#if HAVE_FSEEKO
- fseeko(f, 0, SEEK_END);
- size = (Guint)ftello(f);
-#elif HAVE_FSEEK64
- fseek64(f, 0, SEEK_END);
- size = (Guint)ftell64(f);
-#else
- fseek(f, 0, SEEK_END);
- size = (Guint)ftell(f);
-#endif
- if (pos > size)
- pos = (Guint)size;
-#ifdef __CYGWIN32__
- //~ work around a bug in cygwin's implementation of fseek
- rewind(f);
-#endif
-#if HAVE_FSEEKO
- fseeko(f, -(int)pos, SEEK_END);
- bufPos = (Guint)ftello(f);
-#elif HAVE_FSEEK64
- fseek64(f, -(int)pos, SEEK_END);
- bufPos = (Guint)ftell64(f);
-#else
- fseek(f, -(int)pos, SEEK_END);
- bufPos = (Guint)ftell(f);
-#endif
- }
- bufPtr = bufEnd = buf;
-}
-
-void FileStream::moveStart(int delta) {
- start += delta;
- bufPtr = bufEnd = buf;
- bufPos = start;
-}
-
-//------------------------------------------------------------------------
-// MemStream
-//------------------------------------------------------------------------
-
-MemStream::MemStream(char *bufA, Guint startA, Guint lengthA, Object *dictA):
- BaseStream(dictA) {
- buf = bufA;
- start = startA;
- length = lengthA;
- bufEnd = buf + start + length;
- bufPtr = buf + start;
- needFree = gFalse;
-}
-
-MemStream::~MemStream() {
- if (needFree) {
- gfree(buf);
- }
-}
-
-Stream *MemStream::makeSubStream(Guint startA, GBool limited,
- Guint lengthA, Object *dictA) {
- MemStream *subStr;
- Guint newLength;
-
- if (!limited || startA + lengthA > start + length) {
- newLength = start + length - startA;
- } else {
- newLength = lengthA;
- }
- subStr = new MemStream(buf, startA, newLength, dictA);
- return subStr;
-}
-
-void MemStream::reset() {
- bufPtr = buf + start;
-}
-
-void MemStream::close() {
-}
-
-void MemStream::setPos(Guint pos, int dir) {
- Guint i;
-
- if (dir >= 0) {
- i = pos;
- } else {
- i = start + length - pos;
- }
- if (i < start) {
- i = start;
- } else if (i > start + length) {
- i = start + length;
- }
- bufPtr = buf + i;
-}
-
-void MemStream::moveStart(int delta) {
- start += delta;
- length -= delta;
- bufPtr = buf + start;
-}
-
-//------------------------------------------------------------------------
-// EmbedStream
-//------------------------------------------------------------------------
-
-EmbedStream::EmbedStream(Stream *strA, Object *dictA,
- GBool limitedA, Guint lengthA):
- BaseStream(dictA) {
- str = strA;
- limited = limitedA;
- length = lengthA;
-}
-
-EmbedStream::~EmbedStream() {
-}
-
-Stream *EmbedStream::makeSubStream(Guint start, GBool limitedA,
- Guint lengthA, Object *dictA) {
- error(-1, "Internal: called makeSubStream() on EmbedStream");
- return NULL;
-}
-
-int EmbedStream::getChar() {
- if (limited && !length) {
- return EOF;
- }
- --length;
- return str->getChar();
-}
-
-int EmbedStream::lookChar() {
- if (limited && !length) {
- return EOF;
- }
- return str->lookChar();
-}
-
-void EmbedStream::setPos(Guint pos, int dir) {
- error(-1, "Internal: called setPos() on EmbedStream");
-}
-
-Guint EmbedStream::getStart() {
- error(-1, "Internal: called getStart() on EmbedStream");
- return 0;
-}
-
-void EmbedStream::moveStart(int delta) {
- error(-1, "Internal: called moveStart() on EmbedStream");
-}
-
-//------------------------------------------------------------------------
-// ASCIIHexStream
-//------------------------------------------------------------------------
-
-ASCIIHexStream::ASCIIHexStream(Stream *strA):
- FilterStream(strA) {
- buf = EOF;
- eof = gFalse;
-}
-
-ASCIIHexStream::~ASCIIHexStream() {
- delete str;
-}
-
-void ASCIIHexStream::reset() {
- str->reset();
- buf = EOF;
- eof = gFalse;
-}
-
-int ASCIIHexStream::lookChar() {
- int c1, c2, x;
-
- if (buf != EOF)
- return buf;
- if (eof) {
- buf = EOF;
- return EOF;
- }
- do {
- c1 = str->getChar();
- } while (isspace(c1));
- if (c1 == '>') {
- eof = gTrue;
- buf = EOF;
- return buf;
- }
- do {
- c2 = str->getChar();
- } while (isspace(c2));
- if (c2 == '>') {
- eof = gTrue;
- c2 = '0';
- }
- if (c1 >= '0' && c1 <= '9') {
- x = (c1 - '0') << 4;
- } else if (c1 >= 'A' && c1 <= 'F') {
- x = (c1 - 'A' + 10) << 4;
- } else if (c1 >= 'a' && c1 <= 'f') {
- x = (c1 - 'a' + 10) << 4;
- } else if (c1 == EOF) {
- eof = gTrue;
- x = 0;
- } else {
- error(getPos(), "Illegal character <%02x> in ASCIIHex stream", c1);
- x = 0;
- }
- if (c2 >= '0' && c2 <= '9') {
- x += c2 - '0';
- } else if (c2 >= 'A' && c2 <= 'F') {
- x += c2 - 'A' + 10;
- } else if (c2 >= 'a' && c2 <= 'f') {
- x += c2 - 'a' + 10;
- } else if (c2 == EOF) {
- eof = gTrue;
- x = 0;
- } else {
- error(getPos(), "Illegal character <%02x> in ASCIIHex stream", c2);
- }
- buf = x & 0xff;
- return buf;
-}
-
-GString *ASCIIHexStream::getPSFilter(int psLevel, char *indent) {
- GString *s;
-
- if (psLevel < 2) {
- return NULL;
- }
- if (!(s = str->getPSFilter(psLevel, indent))) {
- return NULL;
- }
- s->append(indent)->append("/ASCIIHexDecode filter\n");
- return s;
-}
-
-GBool ASCIIHexStream::isBinary(GBool last) {
- return str->isBinary(gFalse);
-}
-
-//------------------------------------------------------------------------
-// ASCII85Stream
-//------------------------------------------------------------------------
-
-ASCII85Stream::ASCII85Stream(Stream *strA):
- FilterStream(strA) {
- index = n = 0;
- eof = gFalse;
-}
-
-ASCII85Stream::~ASCII85Stream() {
- delete str;
-}
-
-void ASCII85Stream::reset() {
- str->reset();
- index = n = 0;
- eof = gFalse;
-}
-
-int ASCII85Stream::lookChar() {
- int k;
- Gulong t;
-
- if (index >= n) {
- if (eof)
- return EOF;
- index = 0;
- do {
- c[0] = str->getChar();
- } while (Lexer::isSpace(c[0]));
- if (c[0] == '~' || c[0] == EOF) {
- eof = gTrue;
- n = 0;
- return EOF;
- } else if (c[0] == 'z') {
- b[0] = b[1] = b[2] = b[3] = 0;
- n = 4;
- } else {
- for (k = 1; k < 5; ++k) {
- do {
- c[k] = str->getChar();
- } while (Lexer::isSpace(c[k]));
- if (c[k] == '~' || c[k] == EOF)
- break;
- }
- n = k - 1;
- if (k < 5 && (c[k] == '~' || c[k] == EOF)) {
- for (++k; k < 5; ++k)
- c[k] = 0x21 + 84;
- eof = gTrue;
- }
- t = 0;
- for (k = 0; k < 5; ++k)
- t = t * 85 + (c[k] - 0x21);
- for (k = 3; k >= 0; --k) {
- b[k] = (int)(t & 0xff);
- t >>= 8;
- }
- }
- }
- return b[index];
-}
-
-GString *ASCII85Stream::getPSFilter(int psLevel, char *indent) {
- GString *s;
-
- if (psLevel < 2) {
- return NULL;
- }
- if (!(s = str->getPSFilter(psLevel, indent))) {
- return NULL;
- }
- s->append(indent)->append("/ASCII85Decode filter\n");
- return s;
-}
-
-GBool ASCII85Stream::isBinary(GBool last) {
- return str->isBinary(gFalse);
-}
-
-//------------------------------------------------------------------------
-// LZWStream
-//------------------------------------------------------------------------
-
-LZWStream::LZWStream(Stream *strA, int predictor, int columns, int colors,
- int bits, int earlyA):
- FilterStream(strA) {
- if (predictor != 1) {
- pred = new StreamPredictor(this, predictor, columns, colors, bits);
- if (!pred->isOk()) {
- delete pred;
- pred = NULL;
- }
- } else {
- pred = NULL;
- }
- early = earlyA;
- eof = gFalse;
- inputBits = 0;
- clearTable();
-}
-
-LZWStream::~LZWStream() {
- if (pred) {
- delete pred;
- }
- delete str;
-}
-
-int LZWStream::getChar() {
- if (pred) {
- return pred->getChar();
- }
- if (eof) {
- return EOF;
- }
- if (seqIndex >= seqLength) {
- if (!processNextCode()) {
- return EOF;
- }
- }
- return seqBuf[seqIndex++];
-}
-
-int LZWStream::lookChar() {
- if (pred) {
- return pred->lookChar();
- }
- if (eof) {
- return EOF;
- }
- if (seqIndex >= seqLength) {
- if (!processNextCode()) {
- return EOF;
- }
- }
- return seqBuf[seqIndex];
-}
-
-int LZWStream::getRawChar() {
- if (eof) {
- return EOF;
- }
- if (seqIndex >= seqLength) {
- if (!processNextCode()) {
- return EOF;
- }
- }
- return seqBuf[seqIndex++];
-}
-
-void LZWStream::reset() {
- str->reset();
- eof = gFalse;
- inputBits = 0;
- clearTable();
-}
-
-GBool LZWStream::processNextCode() {
- int code;
- int nextLength;
- int i, j;
-
- // check for EOF
- if (eof) {
- return gFalse;
- }
-
- // check for eod and clear-table codes
- start:
- code = getCode();
- if (code == EOF || code == 257) {
- eof = gTrue;
- return gFalse;
- }
- if (code == 256) {
- clearTable();
- goto start;
- }
- if (nextCode >= 4097) {
- error(getPos(), "Bad LZW stream - expected clear-table code");
- clearTable();
- }
-
- // process the next code
- nextLength = seqLength + 1;
- if (code < 256) {
- seqBuf[0] = code;
- seqLength = 1;
- } else if (code < nextCode) {
- seqLength = table[code].length;
- for (i = seqLength - 1, j = code; i > 0; --i) {
- seqBuf[i] = table[j].tail;
- j = table[j].head;
- }
- seqBuf[0] = j;
- } else if (code == nextCode) {
- seqBuf[seqLength] = newChar;
- ++seqLength;
- } else {
- error(getPos(), "Bad LZW stream - unexpected code");
- eof = gTrue;
- return gFalse;
- }
- newChar = seqBuf[0];
- if (first) {
- first = gFalse;
- } else {
- table[nextCode].length = nextLength;
- table[nextCode].head = prevCode;
- table[nextCode].tail = newChar;
- ++nextCode;
- if (nextCode + early == 512)
- nextBits = 10;
- else if (nextCode + early == 1024)
- nextBits = 11;
- else if (nextCode + early == 2048)
- nextBits = 12;
- }
- prevCode = code;
-
- // reset buffer
- seqIndex = 0;
-
- return gTrue;
-}
-
-void LZWStream::clearTable() {
- nextCode = 258;
- nextBits = 9;
- seqIndex = seqLength = 0;
- first = gTrue;
-}
-
-int LZWStream::getCode() {
- int c;
- int code;
-
- while (inputBits < nextBits) {
- if ((c = str->getChar()) == EOF)
- return EOF;
- inputBuf = (inputBuf << 8) | (c & 0xff);
- inputBits += 8;
- }
- code = (inputBuf >> (inputBits - nextBits)) & ((1 << nextBits) - 1);
- inputBits -= nextBits;
- return code;
-}
-
-GString *LZWStream::getPSFilter(int psLevel, char *indent) {
- GString *s;
-
- if (psLevel < 2 || pred) {
- return NULL;
- }
- if (!(s = str->getPSFilter(psLevel, indent))) {
- return NULL;
- }
- s->append(indent)->append("<< ");
- if (!early) {
- s->append("/EarlyChange 0 ");
- }
- s->append(">> /LZWDecode filter\n");
- return s;
-}
-
-GBool LZWStream::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-//------------------------------------------------------------------------
-// RunLengthStream
-//------------------------------------------------------------------------
-
-RunLengthStream::RunLengthStream(Stream *strA):
- FilterStream(strA) {
- bufPtr = bufEnd = buf;
- eof = gFalse;
-}
-
-RunLengthStream::~RunLengthStream() {
- delete str;
-}
-
-void RunLengthStream::reset() {
- str->reset();
- bufPtr = bufEnd = buf;
- eof = gFalse;
-}
-
-GString *RunLengthStream::getPSFilter(int psLevel, char *indent) {
- GString *s;
-
- if (psLevel < 2) {
- return NULL;
- }
- if (!(s = str->getPSFilter(psLevel, indent))) {
- return NULL;
- }
- s->append(indent)->append("/RunLengthDecode filter\n");
- return s;
-}
-
-GBool RunLengthStream::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-GBool RunLengthStream::fillBuf() {
- int c;
- int n, i;
-
- if (eof)
- return gFalse;
- c = str->getChar();
- if (c == 0x80 || c == EOF) {
- eof = gTrue;
- return gFalse;
- }
- if (c < 0x80) {
- n = c + 1;
- for (i = 0; i < n; ++i)
- buf[i] = (char)str->getChar();
- } else {
- n = 0x101 - c;
- c = str->getChar();
- for (i = 0; i < n; ++i)
- buf[i] = (char)c;
- }
- bufPtr = buf;
- bufEnd = buf + n;
- return gTrue;
-}
-
-//------------------------------------------------------------------------
-// CCITTFaxStream
-//------------------------------------------------------------------------
-
-CCITTFaxStream::CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA,
- GBool byteAlignA, int columnsA, int rowsA,
- GBool endOfBlockA, GBool blackA):
- FilterStream(strA) {
- encoding = encodingA;
- endOfLine = endOfLineA;
- byteAlign = byteAlignA;
- columns = columnsA;
- if (columns < 1) {
- columns = 1;
- } else if (columns > INT_MAX - 2) {
- columns = INT_MAX - 2;
- }
- rows = rowsA;
- endOfBlock = endOfBlockA;
- black = blackA;
- // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = columns
- // ---> max codingLine size = columns + 1
- // refLine has one extra guard entry at the end
- // ---> max refLine size = columns + 2
- codingLine = (int *)gmallocn(columns + 1, sizeof(int));
- refLine = (int *)gmallocn(columns + 2, sizeof(int));
-
- eof = gFalse;
- row = 0;
- nextLine2D = encoding < 0;
- inputBits = 0;
- codingLine[0] = columns;
- a0i = 0;
- outputBits = 0;
-
- buf = EOF;
-}
-
-CCITTFaxStream::~CCITTFaxStream() {
- delete str;
- gfree(refLine);
- gfree(codingLine);
-}
-
-void CCITTFaxStream::reset() {
- short code1;
-
- str->reset();
- eof = gFalse;
- row = 0;
- nextLine2D = encoding < 0;
- inputBits = 0;
- codingLine[0] = columns;
- a0i = 0;
- outputBits = 0;
- buf = EOF;
-
- // skip any initial zero bits and end-of-line marker, and get the 2D
- // encoding tag
- while ((code1 = lookBits(12)) == 0) {
- eatBits(1);
- }
- if (code1 == 0x001) {
- eatBits(12);
- }
- if (encoding > 0) {
- nextLine2D = !lookBits(1);
- eatBits(1);
- }
-}
-
-inline void CCITTFaxStream::addPixels(int a1, int blackPixels) {
- if (a1 > codingLine[a0i]) {
- if (a1 > columns) {
- error(getPos(), "CCITTFax row is wrong length (%d)", a1);
- err = gTrue;
- a1 = columns;
- }
- if ((a0i & 1) ^ blackPixels) {
- ++a0i;
- }
- codingLine[a0i] = a1;
- }
-}
-
-inline void CCITTFaxStream::addPixelsNeg(int a1, int blackPixels) {
- if (a1 > codingLine[a0i]) {
- if (a1 > columns) {
- error(getPos(), "CCITTFax row is wrong length (%d)", a1);
- err = gTrue;
- a1 = columns;
- }
- if ((a0i & 1) ^ blackPixels) {
- ++a0i;
- }
- codingLine[a0i] = a1;
- } else if (a1 < codingLine[a0i]) {
- if (a1 < 0) {
- error(getPos(), "Invalid CCITTFax code");
- err = gTrue;
- a1 = 0;
- }
- while (a0i > 0 && a1 <= codingLine[a0i - 1]) {
- --a0i;
- }
- codingLine[a0i] = a1;
- }
-}
-
-int CCITTFaxStream::lookChar() {
- short code1, code2, code3;
- int b1i, blackPixels, i, bits;
- GBool gotEOL;
-
- if (buf != EOF) {
- return buf;
- }
-
- // read the next row
- if (outputBits == 0) {
-
- // if at eof just return EOF
- if (eof) {
- return EOF;
- }
-
- err = gFalse;
-
- // 2-D encoding
- if (nextLine2D) {
- for (i = 0; codingLine[i] < columns; ++i) {
- refLine[i] = codingLine[i];
- }
- refLine[i++] = columns;
- refLine[i] = columns;
- codingLine[0] = 0;
- a0i = 0;
- b1i = 0;
- blackPixels = 0;
- // invariant:
- // refLine[b1i-1] <= codingLine[a0i] < refLine[b1i] < refLine[b1i+1]
- // <= columns
- // exception at left edge:
- // codingLine[a0i = 0] = refLine[b1i = 0] = 0 is possible
- // exception at right edge:
- // refLine[b1i] = refLine[b1i+1] = columns is possible
- while (codingLine[a0i] < columns) {
- code1 = getTwoDimCode();
- switch (code1) {
- case twoDimPass:
- addPixels(refLine[b1i + 1], blackPixels);
- if (refLine[b1i + 1] < columns) {
- b1i += 2;
- }
- break;
- case twoDimHoriz:
- code1 = code2 = 0;
- if (blackPixels) {
- do {
- code1 += code3 = getBlackCode();
- } while (code3 >= 64);
- do {
- code2 += code3 = getWhiteCode();
- } while (code3 >= 64);
- } else {
- do {
- code1 += code3 = getWhiteCode();
- } while (code3 >= 64);
- do {
- code2 += code3 = getBlackCode();
- } while (code3 >= 64);
- }
- addPixels(codingLine[a0i] + code1, blackPixels);
- if (codingLine[a0i] < columns) {
- addPixels(codingLine[a0i] + code2, blackPixels ^ 1);
- }
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- break;
- case twoDimVertR3:
- addPixels(refLine[b1i] + 3, blackPixels);
- blackPixels ^= 1;
- if (codingLine[a0i] < columns) {
- ++b1i;
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- }
- break;
- case twoDimVertR2:
- addPixels(refLine[b1i] + 2, blackPixels);
- blackPixels ^= 1;
- if (codingLine[a0i] < columns) {
- ++b1i;
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- }
- break;
- case twoDimVertR1:
- addPixels(refLine[b1i] + 1, blackPixels);
- blackPixels ^= 1;
- if (codingLine[a0i] < columns) {
- ++b1i;
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- }
- break;
- case twoDimVert0:
- addPixels(refLine[b1i], blackPixels);
- blackPixels ^= 1;
- if (codingLine[a0i] < columns) {
- ++b1i;
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- }
- break;
- case twoDimVertL3:
- addPixelsNeg(refLine[b1i] - 3, blackPixels);
- blackPixels ^= 1;
- if (codingLine[a0i] < columns) {
- if (b1i > 0) {
- --b1i;
- } else {
- ++b1i;
- }
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- }
- break;
- case twoDimVertL2:
- addPixelsNeg(refLine[b1i] - 2, blackPixels);
- blackPixels ^= 1;
- if (codingLine[a0i] < columns) {
- if (b1i > 0) {
- --b1i;
- } else {
- ++b1i;
- }
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- }
- break;
- case twoDimVertL1:
- addPixelsNeg(refLine[b1i] - 1, blackPixels);
- blackPixels ^= 1;
- if (codingLine[a0i] < columns) {
- if (b1i > 0) {
- --b1i;
- } else {
- ++b1i;
- }
- while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) {
- b1i += 2;
- }
- }
- break;
- case EOF:
- addPixels(columns, 0);
- eof = gTrue;
- break;
- default:
- error(getPos(), "Bad 2D code %04x in CCITTFax stream", code1);
- addPixels(columns, 0);
- err = gTrue;
- break;
- }
- }
-
- // 1-D encoding
- } else {
- codingLine[0] = 0;
- a0i = 0;
- blackPixels = 0;
- while (codingLine[a0i] < columns) {
- code1 = 0;
- if (blackPixels) {
- do {
- code1 += code3 = getBlackCode();
- } while (code3 >= 64);
- } else {
- do {
- code1 += code3 = getWhiteCode();
- } while (code3 >= 64);
- }
- addPixels(codingLine[a0i] + code1, blackPixels);
- blackPixels ^= 1;
- }
- }
-
- // byte-align the row
- if (byteAlign) {
- inputBits &= ~7;
- }
-
- // check for end-of-line marker, skipping over any extra zero bits
- gotEOL = gFalse;
- if (!endOfBlock && row == rows - 1) {
- eof = gTrue;
- } else {
- code1 = lookBits(12);
- while (code1 == 0) {
- eatBits(1);
- code1 = lookBits(12);
- }
- if (code1 == 0x001) {
- eatBits(12);
- gotEOL = gTrue;
- } else if (code1 == EOF) {
- eof = gTrue;
- }
- }
-
- // get 2D encoding tag
- if (!eof && encoding > 0) {
- nextLine2D = !lookBits(1);
- eatBits(1);
- }
-
- // check for end-of-block marker
- if (endOfBlock && gotEOL) {
- code1 = lookBits(12);
- if (code1 == 0x001) {
- eatBits(12);
- if (encoding > 0) {
- lookBits(1);
- eatBits(1);
- }
- if (encoding >= 0) {
- for (i = 0; i < 4; ++i) {
- code1 = lookBits(12);
- if (code1 != 0x001) {
- error(getPos(), "Bad RTC code in CCITTFax stream");
- }
- eatBits(12);
- if (encoding > 0) {
- lookBits(1);
- eatBits(1);
- }
- }
- }
- eof = gTrue;
- }
-
- // look for an end-of-line marker after an error -- we only do
- // this if we know the stream contains end-of-line markers because
- // the "just plow on" technique tends to work better otherwise
- } else if (err && endOfLine) {
- while (1) {
- code1 = lookBits(13);
- if (code1 == EOF) {
- eof = gTrue;
- return EOF;
- }
- if ((code1 >> 1) == 0x001) {
- break;
- }
- eatBits(1);
- }
- eatBits(12);
- if (encoding > 0) {
- eatBits(1);
- nextLine2D = !(code1 & 1);
- }
- }
-
- // set up for output
- if (codingLine[0] > 0) {
- outputBits = codingLine[a0i = 0];
- } else {
- outputBits = codingLine[a0i = 1];
- }
-
- ++row;
- }
-
- // get a byte
- if (outputBits >= 8) {
- buf = (a0i & 1) ? 0x00 : 0xff;
- outputBits -= 8;
- if (outputBits == 0 && codingLine[a0i] < columns) {
- ++a0i;
- outputBits = codingLine[a0i] - codingLine[a0i - 1];
- }
- } else {
- bits = 8;
- buf = 0;
- do {
- if (outputBits > bits) {
- buf <<= bits;
- if (!(a0i & 1)) {
- buf |= 0xff >> (8 - bits);
- }
- outputBits -= bits;
- bits = 0;
- } else {
- buf <<= outputBits;
- if (!(a0i & 1)) {
- buf |= 0xff >> (8 - outputBits);
- }
- bits -= outputBits;
- outputBits = 0;
- if (codingLine[a0i] < columns) {
- ++a0i;
- outputBits = codingLine[a0i] - codingLine[a0i - 1];
- } else if (bits > 0) {
- buf <<= bits;
- bits = 0;
- }
- }
- } while (bits);
- }
- if (black) {
- buf ^= 0xff;
- }
- return buf;
-}
-
-short CCITTFaxStream::getTwoDimCode() {
- short code;
- CCITTCode *p;
- int n;
-
- code = 0; // make gcc happy
- if (endOfBlock) {
- code = lookBits(7);
- p = &twoDimTab1[code];
- if (p->bits > 0) {
- eatBits(p->bits);
- return p->n;
- }
- } else {
- for (n = 1; n <= 7; ++n) {
- code = lookBits(n);
- if (n < 7) {
- code <<= 7 - n;
- }
- p = &twoDimTab1[code];
- if (p->bits == n) {
- eatBits(n);
- return p->n;
- }
- }
- }
- error(getPos(), "Bad two dim code (%04x) in CCITTFax stream", code);
- return EOF;
-}
-
-short CCITTFaxStream::getWhiteCode() {
- short code;
- CCITTCode *p;
- int n;
-
- code = 0; // make gcc happy
- if (endOfBlock) {
- code = lookBits(12);
- if (code == EOF) {
- return 1;
- }
- if ((code >> 5) == 0) {
- p = &whiteTab1[code];
- } else {
- p = &whiteTab2[code >> 3];
- }
- if (p->bits > 0) {
- eatBits(p->bits);
- return p->n;
- }
- } else {
- for (n = 1; n <= 9; ++n) {
- code = lookBits(n);
- if (code == EOF) {
- return 1;
- }
- if (n < 9) {
- code <<= 9 - n;
- }
- p = &whiteTab2[code];
- if (p->bits == n) {
- eatBits(n);
- return p->n;
- }
- }
- for (n = 11; n <= 12; ++n) {
- code = lookBits(n);
- if (code == EOF) {
- return 1;
- }
- if (n < 12) {
- code <<= 12 - n;
- }
- p = &whiteTab1[code];
- if (p->bits == n) {
- eatBits(n);
- return p->n;
- }
- }
- }
- error(getPos(), "Bad white code (%04x) in CCITTFax stream", code);
- // eat a bit and return a positive number so that the caller doesn't
- // go into an infinite loop
- eatBits(1);
- return 1;
-}
-
-short CCITTFaxStream::getBlackCode() {
- short code;
- CCITTCode *p;
- int n;
-
- code = 0; // make gcc happy
- if (endOfBlock) {
- code = lookBits(13);
- if (code == EOF) {
- return 1;
- }
- if ((code >> 7) == 0) {
- p = &blackTab1[code];
- } else if ((code >> 9) == 0 && (code >> 7) != 0) {
- p = &blackTab2[(code >> 1) - 64];
- } else {
- p = &blackTab3[code >> 7];
- }
- if (p->bits > 0) {
- eatBits(p->bits);
- return p->n;
- }
- } else {
- for (n = 2; n <= 6; ++n) {
- code = lookBits(n);
- if (code == EOF) {
- return 1;
- }
- if (n < 6) {
- code <<= 6 - n;
- }
- p = &blackTab3[code];
- if (p->bits == n) {
- eatBits(n);
- return p->n;
- }
- }
- for (n = 7; n <= 12; ++n) {
- code = lookBits(n);
- if (code == EOF) {
- return 1;
- }
- if (n < 12) {
- code <<= 12 - n;
- }
- if (code >= 64) {
- p = &blackTab2[code - 64];
- if (p->bits == n) {
- eatBits(n);
- return p->n;
- }
- }
- }
- for (n = 10; n <= 13; ++n) {
- code = lookBits(n);
- if (code == EOF) {
- return 1;
- }
- if (n < 13) {
- code <<= 13 - n;
- }
- p = &blackTab1[code];
- if (p->bits == n) {
- eatBits(n);
- return p->n;
- }
- }
- }
- error(getPos(), "Bad black code (%04x) in CCITTFax stream", code);
- // eat a bit and return a positive number so that the caller doesn't
- // go into an infinite loop
- eatBits(1);
- return 1;
-}
-
-short CCITTFaxStream::lookBits(int n) {
- int c;
-
- while (inputBits < n) {
- if ((c = str->getChar()) == EOF) {
- if (inputBits == 0) {
- return EOF;
- }
- // near the end of the stream, the caller may ask for more bits
- // than are available, but there may still be a valid code in
- // however many bits are available -- we need to return correct
- // data in this case
- return (inputBuf << (n - inputBits)) & (0xffff >> (16 - n));
- }
- inputBuf = (inputBuf << 8) + c;
- inputBits += 8;
- }
- return (inputBuf >> (inputBits - n)) & (0xffff >> (16 - n));
-}
-
-GString *CCITTFaxStream::getPSFilter(int psLevel, char *indent) {
- GString *s;
- char s1[50];
-
- if (psLevel < 2) {
- return NULL;
- }
- if (!(s = str->getPSFilter(psLevel, indent))) {
- return NULL;
- }
- s->append(indent)->append("<< ");
- if (encoding != 0) {
- sprintf(s1, "/K %d ", encoding);
- s->append(s1);
- }
- if (endOfLine) {
- s->append("/EndOfLine true ");
- }
- if (byteAlign) {
- s->append("/EncodedByteAlign true ");
- }
- sprintf(s1, "/Columns %d ", columns);
- s->append(s1);
- if (rows != 0) {
- sprintf(s1, "/Rows %d ", rows);
- s->append(s1);
- }
- if (!endOfBlock) {
- s->append("/EndOfBlock false ");
- }
- if (black) {
- s->append("/BlackIs1 true ");
- }
- s->append(">> /CCITTFaxDecode filter\n");
- return s;
-}
-
-GBool CCITTFaxStream::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-//------------------------------------------------------------------------
-// DCTStream
-//------------------------------------------------------------------------
-
-// IDCT constants (20.12 fixed point format)
-#define dctCos1 4017 // cos(pi/16)
-#define dctSin1 799 // sin(pi/16)
-#define dctCos3 3406 // cos(3*pi/16)
-#define dctSin3 2276 // sin(3*pi/16)
-#define dctCos6 1567 // cos(6*pi/16)
-#define dctSin6 3784 // sin(6*pi/16)
-#define dctSqrt2 5793 // sqrt(2)
-#define dctSqrt1d2 2896 // sqrt(2) / 2
-
-// color conversion parameters (16.16 fixed point format)
-#define dctCrToR 91881 // 1.4020
-#define dctCbToG -22553 // -0.3441363
-#define dctCrToG -46802 // -0.71413636
-#define dctCbToB 116130 // 1.772
-
-// clip [-256,511] --> [0,255]
-#define dctClipOffset 256
-static Guchar dctClip[768];
-static int dctClipInit = 0;
-
-// zig zag decode map
-static int dctZigZag[64] = {
- 0,
- 1, 8,
- 16, 9, 2,
- 3, 10, 17, 24,
- 32, 25, 18, 11, 4,
- 5, 12, 19, 26, 33, 40,
- 48, 41, 34, 27, 20, 13, 6,
- 7, 14, 21, 28, 35, 42, 49, 56,
- 57, 50, 43, 36, 29, 22, 15,
- 23, 30, 37, 44, 51, 58,
- 59, 52, 45, 38, 31,
- 39, 46, 53, 60,
- 61, 54, 47,
- 55, 62,
- 63
-};
-
-DCTStream::DCTStream(Stream *strA, GBool colorXformA):
- FilterStream(strA) {
- int i, j;
-
- colorXform = colorXformA;
- progressive = interleaved = gFalse;
- width = height = 0;
- mcuWidth = mcuHeight = 0;
- numComps = 0;
- comp = 0;
- x = y = dy = 0;
- for (i = 0; i < 4; ++i) {
- for (j = 0; j < 32; ++j) {
- rowBuf[i][j] = NULL;
- }
- frameBuf[i] = NULL;
- }
-
- if (!dctClipInit) {
- for (i = -256; i < 0; ++i)
- dctClip[dctClipOffset + i] = 0;
- for (i = 0; i < 256; ++i)
- dctClip[dctClipOffset + i] = i;
- for (i = 256; i < 512; ++i)
- dctClip[dctClipOffset + i] = 255;
- dctClipInit = 1;
- }
-}
-
-DCTStream::~DCTStream() {
- close();
- delete str;
-}
-
-void DCTStream::reset() {
- int i, j;
-
- str->reset();
-
- progressive = interleaved = gFalse;
- width = height = 0;
- numComps = 0;
- numQuantTables = 0;
- numDCHuffTables = 0;
- numACHuffTables = 0;
- gotJFIFMarker = gFalse;
- gotAdobeMarker = gFalse;
- restartInterval = 0;
-
- if (!readHeader()) {
- y = height;
- return;
- }
-
- // compute MCU size
- if (numComps == 1) {
- compInfo[0].hSample = compInfo[0].vSample = 1;
- }
- mcuWidth = compInfo[0].hSample;
- mcuHeight = compInfo[0].vSample;
- for (i = 1; i < numComps; ++i) {
- if (compInfo[i].hSample > mcuWidth) {
- mcuWidth = compInfo[i].hSample;
- }
- if (compInfo[i].vSample > mcuHeight) {
- mcuHeight = compInfo[i].vSample;
- }
- }
- mcuWidth *= 8;
- mcuHeight *= 8;
-
- // figure out color transform
- if (colorXform == -1) {
- if (numComps == 3) {
- if (gotJFIFMarker) {
- colorXform = 1;
- } else if (compInfo[0].id == 82 && compInfo[1].id == 71 &&
- compInfo[2].id == 66) { // ASCII "RGB"
- colorXform = 0;
- } else {
- colorXform = 1;
- }
- } else {
- colorXform = 0;
- }
- }
-
- if (progressive || !interleaved) {
-
- // allocate a buffer for the whole image
- bufWidth = ((width + mcuWidth - 1) / mcuWidth) * mcuWidth;
- bufHeight = ((height + mcuHeight - 1) / mcuHeight) * mcuHeight;
- if (bufWidth <= 0 || bufHeight <= 0 ||
- bufWidth > INT_MAX / bufWidth / (int)sizeof(int)) {
- error(getPos(), "Invalid image size in DCT stream");
- y = height;
- return;
- }
- for (i = 0; i < numComps; ++i) {
- frameBuf[i] = (int *)gmallocn(bufWidth * bufHeight, sizeof(int));
- memset(frameBuf[i], 0, bufWidth * bufHeight * sizeof(int));
- }
-
- // read the image data
- do {
- restartMarker = 0xd0;
- restart();
- readScan();
- } while (readHeader());
-
- // decode
- decodeImage();
-
- // initialize counters
- comp = 0;
- x = 0;
- y = 0;
-
- } else {
-
- // allocate a buffer for one row of MCUs
- bufWidth = ((width + mcuWidth - 1) / mcuWidth) * mcuWidth;
- for (i = 0; i < numComps; ++i) {
- for (j = 0; j < mcuHeight; ++j) {
- rowBuf[i][j] = (Guchar *)gmallocn(bufWidth, sizeof(Guchar));
- }
- }
-
- // initialize counters
- comp = 0;
- x = 0;
- y = 0;
- dy = mcuHeight;
-
- restartMarker = 0xd0;
- restart();
- }
-}
-
-void DCTStream::close() {
- int i, j;
-
- for (i = 0; i < 4; ++i) {
- for (j = 0; j < 32; ++j) {
- gfree(rowBuf[i][j]);
- rowBuf[i][j] = NULL;
- }
- gfree(frameBuf[i]);
- frameBuf[i] = NULL;
- }
- FilterStream::close();
-}
-
-int DCTStream::getChar() {
- int c;
-
- if (y >= height) {
- return EOF;
- }
- if (progressive || !interleaved) {
- c = frameBuf[comp][y * bufWidth + x];
- if (++comp == numComps) {
- comp = 0;
- if (++x == width) {
- x = 0;
- ++y;
- }
- }
- } else {
- if (dy >= mcuHeight) {
- if (!readMCURow()) {
- y = height;
- return EOF;
- }
- comp = 0;
- x = 0;
- dy = 0;
- }
- c = rowBuf[comp][dy][x];
- if (++comp == numComps) {
- comp = 0;
- if (++x == width) {
- x = 0;
- ++y;
- ++dy;
- if (y == height) {
- readTrailer();
- }
- }
- }
- }
- return c;
-}
-
-int DCTStream::lookChar() {
- if (y >= height) {
- return EOF;
- }
- if (progressive || !interleaved) {
- return frameBuf[comp][y * bufWidth + x];
- } else {
- if (dy >= mcuHeight) {
- if (!readMCURow()) {
- y = height;
- return EOF;
- }
- comp = 0;
- x = 0;
- dy = 0;
- }
- return rowBuf[comp][dy][x];
- }
-}
-
-void DCTStream::restart() {
- int i;
-
- inputBits = 0;
- restartCtr = restartInterval;
- for (i = 0; i < numComps; ++i) {
- compInfo[i].prevDC = 0;
- }
- eobRun = 0;
-}
-
-// Read one row of MCUs from a sequential JPEG stream.
-GBool DCTStream::readMCURow() {
- int data1[64];
- Guchar data2[64];
- Guchar *p1, *p2;
- int pY, pCb, pCr, pR, pG, pB;
- int h, v, horiz, vert, hSub, vSub;
- int x1, x2, y2, x3, y3, x4, y4, x5, y5, cc, i;
- int c;
-
- for (x1 = 0; x1 < width; x1 += mcuWidth) {
-
- // deal with restart marker
- if (restartInterval > 0 && restartCtr == 0) {
- c = readMarker();
- if (c != restartMarker) {
- error(getPos(), "Bad DCT data: incorrect restart marker");
- return gFalse;
- }
- if (++restartMarker == 0xd8)
- restartMarker = 0xd0;
- restart();
- }
-
- // read one MCU
- for (cc = 0; cc < numComps; ++cc) {
- h = compInfo[cc].hSample;
- v = compInfo[cc].vSample;
- horiz = mcuWidth / h;
- vert = mcuHeight / v;
- hSub = horiz / 8;
- vSub = vert / 8;
- for (y2 = 0; y2 < mcuHeight; y2 += vert) {
- for (x2 = 0; x2 < mcuWidth; x2 += horiz) {
- if (!readDataUnit(&dcHuffTables[scanInfo.dcHuffTable[cc]],
- &acHuffTables[scanInfo.acHuffTable[cc]],
- &compInfo[cc].prevDC,
- data1)) {
- return gFalse;
- }
- transformDataUnit(quantTables[compInfo[cc].quantTable],
- data1, data2);
- if (hSub == 1 && vSub == 1) {
- for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) {
- p1 = &rowBuf[cc][y2+y3][x1+x2];
- p1[0] = data2[i];
- p1[1] = data2[i+1];
- p1[2] = data2[i+2];
- p1[3] = data2[i+3];
- p1[4] = data2[i+4];
- p1[5] = data2[i+5];
- p1[6] = data2[i+6];
- p1[7] = data2[i+7];
- }
- } else if (hSub == 2 && vSub == 2) {
- for (y3 = 0, i = 0; y3 < 16; y3 += 2, i += 8) {
- p1 = &rowBuf[cc][y2+y3][x1+x2];
- p2 = &rowBuf[cc][y2+y3+1][x1+x2];
- p1[0] = p1[1] = p2[0] = p2[1] = data2[i];
- p1[2] = p1[3] = p2[2] = p2[3] = data2[i+1];
- p1[4] = p1[5] = p2[4] = p2[5] = data2[i+2];
- p1[6] = p1[7] = p2[6] = p2[7] = data2[i+3];
- p1[8] = p1[9] = p2[8] = p2[9] = data2[i+4];
- p1[10] = p1[11] = p2[10] = p2[11] = data2[i+5];
- p1[12] = p1[13] = p2[12] = p2[13] = data2[i+6];
- p1[14] = p1[15] = p2[14] = p2[15] = data2[i+7];
- }
- } else {
- i = 0;
- for (y3 = 0, y4 = 0; y3 < 8; ++y3, y4 += vSub) {
- for (x3 = 0, x4 = 0; x3 < 8; ++x3, x4 += hSub) {
- for (y5 = 0; y5 < vSub; ++y5)
- for (x5 = 0; x5 < hSub; ++x5)
- rowBuf[cc][y2+y4+y5][x1+x2+x4+x5] = data2[i];
- ++i;
- }
- }
- }
- }
- }
- }
- --restartCtr;
-
- // color space conversion
- if (colorXform) {
- // convert YCbCr to RGB
- if (numComps == 3) {
- for (y2 = 0; y2 < mcuHeight; ++y2) {
- for (x2 = 0; x2 < mcuWidth; ++x2) {
- pY = rowBuf[0][y2][x1+x2];
- pCb = rowBuf[1][y2][x1+x2] - 128;
- pCr = rowBuf[2][y2][x1+x2] - 128;
- pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16;
- rowBuf[0][y2][x1+x2] = dctClip[dctClipOffset + pR];
- pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32768) >> 16;
- rowBuf[1][y2][x1+x2] = dctClip[dctClipOffset + pG];
- pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16;
- rowBuf[2][y2][x1+x2] = dctClip[dctClipOffset + pB];
- }
- }
- // convert YCbCrK to CMYK (K is passed through unchanged)
- } else if (numComps == 4) {
- for (y2 = 0; y2 < mcuHeight; ++y2) {
- for (x2 = 0; x2 < mcuWidth; ++x2) {
- pY = rowBuf[0][y2][x1+x2];
- pCb = rowBuf[1][y2][x1+x2] - 128;
- pCr = rowBuf[2][y2][x1+x2] - 128;
- pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16;
- rowBuf[0][y2][x1+x2] = 255 - dctClip[dctClipOffset + pR];
- pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32768) >> 16;
- rowBuf[1][y2][x1+x2] = 255 - dctClip[dctClipOffset + pG];
- pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16;
- rowBuf[2][y2][x1+x2] = 255 - dctClip[dctClipOffset + pB];
- }
- }
- }
- }
- }
- return gTrue;
-}
-
-// Read one scan from a progressive or non-interleaved JPEG stream.
-void DCTStream::readScan() {
- int data[64];
- int x1, y1, dx1, dy1, x2, y2, y3, cc, i;
- int h, v, horiz, vert, vSub;
- int *p1;
- int c;
-
- if (scanInfo.numComps == 1) {
- for (cc = 0; cc < numComps; ++cc) {
- if (scanInfo.comp[cc]) {
- break;
- }
- }
- dx1 = mcuWidth / compInfo[cc].hSample;
- dy1 = mcuHeight / compInfo[cc].vSample;
- } else {
- dx1 = mcuWidth;
- dy1 = mcuHeight;
- }
-
- for (y1 = 0; y1 < height; y1 += dy1) {
- for (x1 = 0; x1 < width; x1 += dx1) {
-
- // deal with restart marker
- if (restartInterval > 0 && restartCtr == 0) {
- c = readMarker();
- if (c != restartMarker) {
- error(getPos(), "Bad DCT data: incorrect restart marker");
- return;
- }
- if (++restartMarker == 0xd8) {
- restartMarker = 0xd0;
- }
- restart();
- }
-
- // read one MCU
- for (cc = 0; cc < numComps; ++cc) {
- if (!scanInfo.comp[cc]) {
- continue;
- }
-
- h = compInfo[cc].hSample;
- v = compInfo[cc].vSample;
- horiz = mcuWidth / h;
- vert = mcuHeight / v;
- vSub = vert / 8;
- for (y2 = 0; y2 < dy1; y2 += vert) {
- for (x2 = 0; x2 < dx1; x2 += horiz) {
-
- // pull out the current values
- p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)];
- for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) {
- data[i] = p1[0];
- data[i+1] = p1[1];
- data[i+2] = p1[2];
- data[i+3] = p1[3];
- data[i+4] = p1[4];
- data[i+5] = p1[5];
- data[i+6] = p1[6];
- data[i+7] = p1[7];
- p1 += bufWidth * vSub;
- }
-
- // read one data unit
- if (progressive) {
- if (!readProgressiveDataUnit(
- &dcHuffTables[scanInfo.dcHuffTable[cc]],
- &acHuffTables[scanInfo.acHuffTable[cc]],
- &compInfo[cc].prevDC,
- data)) {
- return;
- }
- } else {
- if (!readDataUnit(&dcHuffTables[scanInfo.dcHuffTable[cc]],
- &acHuffTables[scanInfo.acHuffTable[cc]],
- &compInfo[cc].prevDC,
- data)) {
- return;
- }
- }
-
- // add the data unit into frameBuf
- p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)];
- for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) {
- p1[0] = data[i];
- p1[1] = data[i+1];
- p1[2] = data[i+2];
- p1[3] = data[i+3];
- p1[4] = data[i+4];
- p1[5] = data[i+5];
- p1[6] = data[i+6];
- p1[7] = data[i+7];
- p1 += bufWidth * vSub;
- }
- }
- }
- }
- --restartCtr;
- }
- }
-}
-
-// Read one data unit from a sequential JPEG stream.
-GBool DCTStream::readDataUnit(DCTHuffTable *dcHuffTable,
- DCTHuffTable *acHuffTable,
- int *prevDC, int data[64]) {
- int run, size, amp;
- int c;
- int i, j;
-
- if ((size = readHuffSym(dcHuffTable)) == 9999) {
- return gFalse;
- }
- if (size > 0) {
- if ((amp = readAmp(size)) == 9999) {
- return gFalse;
- }
- } else {
- amp = 0;
- }
- data[0] = *prevDC += amp;
- for (i = 1; i < 64; ++i) {
- data[i] = 0;
- }
- i = 1;
- while (i < 64) {
- run = 0;
- while ((c = readHuffSym(acHuffTable)) == 0xf0 && run < 0x30) {
- run += 0x10;
- }
- if (c == 9999) {
- return gFalse;
- }
- if (c == 0x00) {
- break;
- } else {
- run += (c >> 4) & 0x0f;
- size = c & 0x0f;
- amp = readAmp(size);
- if (amp == 9999) {
- return gFalse;
- }
- i += run;
- if (i < 64) {
- j = dctZigZag[i++];
- data[j] = amp;
- }
- }
- }
- return gTrue;
-}
-
-// Read one data unit from a sequential JPEG stream.
-GBool DCTStream::readProgressiveDataUnit(DCTHuffTable *dcHuffTable,
- DCTHuffTable *acHuffTable,
- int *prevDC, int data[64]) {
- int run, size, amp, bit, c;
- int i, j, k;
-
- // get the DC coefficient
- i = scanInfo.firstCoeff;
- if (i == 0) {
- if (scanInfo.ah == 0) {
- if ((size = readHuffSym(dcHuffTable)) == 9999) {
- return gFalse;
- }
- if (size > 0) {
- if ((amp = readAmp(size)) == 9999) {
- return gFalse;
- }
- } else {
- amp = 0;
- }
- data[0] += (*prevDC += amp) << scanInfo.al;
- } else {
- if ((bit = readBit()) == 9999) {
- return gFalse;
- }
- data[0] += bit << scanInfo.al;
- }
- ++i;
- }
- if (scanInfo.lastCoeff == 0) {
- return gTrue;
- }
-
- // check for an EOB run
- if (eobRun > 0) {
- while (i <= scanInfo.lastCoeff) {
- j = dctZigZag[i++];
- if (data[j] != 0) {
- if ((bit = readBit()) == EOF) {
- return gFalse;
- }
- if (bit) {
- data[j] += 1 << scanInfo.al;
- }
- }
- }
- --eobRun;
- return gTrue;
- }
-
- // read the AC coefficients
- while (i <= scanInfo.lastCoeff) {
- if ((c = readHuffSym(acHuffTable)) == 9999) {
- return gFalse;
- }
-
- // ZRL
- if (c == 0xf0) {
- k = 0;
- while (k < 16) {
- j = dctZigZag[i++];
- if (data[j] == 0) {
- ++k;
- } else {
- if ((bit = readBit()) == EOF) {
- return gFalse;
- }
- if (bit) {
- data[j] += 1 << scanInfo.al;
- }
- }
- }
-
- // EOB run
- } else if ((c & 0x0f) == 0x00) {
- j = c >> 4;
- eobRun = 0;
- for (k = 0; k < j; ++k) {
- if ((bit = readBit()) == EOF) {
- return gFalse;
- }
- eobRun = (eobRun << 1) | bit;
- }
- eobRun += 1 << j;
- while (i <= scanInfo.lastCoeff) {
- j = dctZigZag[i++];
- if (data[j] != 0) {
- if ((bit = readBit()) == EOF) {
- return gFalse;
- }
- if (bit) {
- data[j] += 1 << scanInfo.al;
- }
- }
- }
- --eobRun;
- break;
-
- // zero run and one AC coefficient
- } else {
- run = (c >> 4) & 0x0f;
- size = c & 0x0f;
- if ((amp = readAmp(size)) == 9999) {
- return gFalse;
- }
- k = 0;
- do {
- j = dctZigZag[i++];
- while (data[j] != 0) {
- if ((bit = readBit()) == EOF) {
- return gFalse;
- }
- if (bit) {
- data[j] += 1 << scanInfo.al;
- }
- j = dctZigZag[i++];
- }
- ++k;
- } while (k <= run);
- data[j] = amp << scanInfo.al;
- }
- }
-
- return gTrue;
-}
-
-// Decode a progressive JPEG image.
-void DCTStream::decodeImage() {
- int dataIn[64];
- Guchar dataOut[64];
- Gushort *quantTable;
- int pY, pCb, pCr, pR, pG, pB;
- int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, cc, i;
- int h, v, horiz, vert, hSub, vSub;
- int *p0, *p1, *p2;
-
- for (y1 = 0; y1 < bufHeight; y1 += mcuHeight) {
- for (x1 = 0; x1 < bufWidth; x1 += mcuWidth) {
- for (cc = 0; cc < numComps; ++cc) {
- quantTable = quantTables[compInfo[cc].quantTable];
- h = compInfo[cc].hSample;
- v = compInfo[cc].vSample;
- horiz = mcuWidth / h;
- vert = mcuHeight / v;
- hSub = horiz / 8;
- vSub = vert / 8;
- for (y2 = 0; y2 < mcuHeight; y2 += vert) {
- for (x2 = 0; x2 < mcuWidth; x2 += horiz) {
-
- // pull out the coded data unit
- p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)];
- for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) {
- dataIn[i] = p1[0];
- dataIn[i+1] = p1[1];
- dataIn[i+2] = p1[2];
- dataIn[i+3] = p1[3];
- dataIn[i+4] = p1[4];
- dataIn[i+5] = p1[5];
- dataIn[i+6] = p1[6];
- dataIn[i+7] = p1[7];
- p1 += bufWidth * vSub;
- }
-
- // transform
- transformDataUnit(quantTable, dataIn, dataOut);
-
- // store back into frameBuf, doing replication for
- // subsampled components
- p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)];
- if (hSub == 1 && vSub == 1) {
- for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) {
- p1[0] = dataOut[i] & 0xff;
- p1[1] = dataOut[i+1] & 0xff;
- p1[2] = dataOut[i+2] & 0xff;
- p1[3] = dataOut[i+3] & 0xff;
- p1[4] = dataOut[i+4] & 0xff;
- p1[5] = dataOut[i+5] & 0xff;
- p1[6] = dataOut[i+6] & 0xff;
- p1[7] = dataOut[i+7] & 0xff;
- p1 += bufWidth;
- }
- } else if (hSub == 2 && vSub == 2) {
- p2 = p1 + bufWidth;
- for (y3 = 0, i = 0; y3 < 16; y3 += 2, i += 8) {
- p1[0] = p1[1] = p2[0] = p2[1] = dataOut[i] & 0xff;
- p1[2] = p1[3] = p2[2] = p2[3] = dataOut[i+1] & 0xff;
- p1[4] = p1[5] = p2[4] = p2[5] = dataOut[i+2] & 0xff;
- p1[6] = p1[7] = p2[6] = p2[7] = dataOut[i+3] & 0xff;
- p1[8] = p1[9] = p2[8] = p2[9] = dataOut[i+4] & 0xff;
- p1[10] = p1[11] = p2[10] = p2[11] = dataOut[i+5] & 0xff;
- p1[12] = p1[13] = p2[12] = p2[13] = dataOut[i+6] & 0xff;
- p1[14] = p1[15] = p2[14] = p2[15] = dataOut[i+7] & 0xff;
- p1 += bufWidth * 2;
- p2 += bufWidth * 2;
- }
- } else {
- i = 0;
- for (y3 = 0, y4 = 0; y3 < 8; ++y3, y4 += vSub) {
- for (x3 = 0, x4 = 0; x3 < 8; ++x3, x4 += hSub) {
- p2 = p1 + x4;
- for (y5 = 0; y5 < vSub; ++y5) {
- for (x5 = 0; x5 < hSub; ++x5) {
- p2[x5] = dataOut[i] & 0xff;
- }
- p2 += bufWidth;
- }
- ++i;
- }
- p1 += bufWidth * vSub;
- }
- }
- }
- }
- }
-
- // color space conversion
- if (colorXform) {
- // convert YCbCr to RGB
- if (numComps == 3) {
- for (y2 = 0; y2 < mcuHeight; ++y2) {
- p0 = &frameBuf[0][(y1+y2) * bufWidth + x1];
- p1 = &frameBuf[1][(y1+y2) * bufWidth + x1];
- p2 = &frameBuf[2][(y1+y2) * bufWidth + x1];
- for (x2 = 0; x2 < mcuWidth; ++x2) {
- pY = *p0;
- pCb = *p1 - 128;
- pCr = *p2 - 128;
- pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16;
- *p0++ = dctClip[dctClipOffset + pR];
- pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr +
- 32768) >> 16;
- *p1++ = dctClip[dctClipOffset + pG];
- pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16;
- *p2++ = dctClip[dctClipOffset + pB];
- }
- }
- // convert YCbCrK to CMYK (K is passed through unchanged)
- } else if (numComps == 4) {
- for (y2 = 0; y2 < mcuHeight; ++y2) {
- p0 = &frameBuf[0][(y1+y2) * bufWidth + x1];
- p1 = &frameBuf[1][(y1+y2) * bufWidth + x1];
- p2 = &frameBuf[2][(y1+y2) * bufWidth + x1];
- for (x2 = 0; x2 < mcuWidth; ++x2) {
- pY = *p0;
- pCb = *p1 - 128;
- pCr = *p2 - 128;
- pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16;
- *p0++ = 255 - dctClip[dctClipOffset + pR];
- pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr +
- 32768) >> 16;
- *p1++ = 255 - dctClip[dctClipOffset + pG];
- pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16;
- *p2++ = 255 - dctClip[dctClipOffset + pB];
- }
- }
- }
- }
- }
- }
-}
-
-// Transform one data unit -- this performs the dequantization and
-// IDCT steps. This IDCT algorithm is taken from:
-// Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,
-// "Practical Fast 1-D DCT Algorithms with 11 Multiplications",
-// IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,
-// 988-991.
-// The stage numbers mentioned in the comments refer to Figure 1 in this
-// paper.
-void DCTStream::transformDataUnit(Gushort *quantTable,
- int dataIn[64], Guchar dataOut[64]) {
- int v0, v1, v2, v3, v4, v5, v6, v7, t;
- int *p;
- int i;
-
- // dequant
- for (i = 0; i < 64; ++i) {
- dataIn[i] *= quantTable[i];
- }
-
- // inverse DCT on rows
- for (i = 0; i < 64; i += 8) {
- p = dataIn + i;
-
- // check for all-zero AC coefficients
- if (p[1] == 0 && p[2] == 0 && p[3] == 0 &&
- p[4] == 0 && p[5] == 0 && p[6] == 0 && p[7] == 0) {
- t = (dctSqrt2 * p[0] + 512) >> 10;
- p[0] = t;
- p[1] = t;
- p[2] = t;
- p[3] = t;
- p[4] = t;
- p[5] = t;
- p[6] = t;
- p[7] = t;
- continue;
- }
-
- // stage 4
- v0 = (dctSqrt2 * p[0] + 128) >> 8;
- v1 = (dctSqrt2 * p[4] + 128) >> 8;
- v2 = p[2];
- v3 = p[6];
- v4 = (dctSqrt1d2 * (p[1] - p[7]) + 128) >> 8;
- v7 = (dctSqrt1d2 * (p[1] + p[7]) + 128) >> 8;
- v5 = p[3] << 4;
- v6 = p[5] << 4;
-
- // stage 3
- t = (v0 - v1+ 1) >> 1;
- v0 = (v0 + v1 + 1) >> 1;
- v1 = t;
- t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;
- v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;
- v3 = t;
- t = (v4 - v6 + 1) >> 1;
- v4 = (v4 + v6 + 1) >> 1;
- v6 = t;
- t = (v7 + v5 + 1) >> 1;
- v5 = (v7 - v5 + 1) >> 1;
- v7 = t;
-
- // stage 2
- t = (v0 - v3 + 1) >> 1;
- v0 = (v0 + v3 + 1) >> 1;
- v3 = t;
- t = (v1 - v2 + 1) >> 1;
- v1 = (v1 + v2 + 1) >> 1;
- v2 = t;
- t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
- v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
- v7 = t;
- t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
- v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
- v6 = t;
-
- // stage 1
- p[0] = v0 + v7;
- p[7] = v0 - v7;
- p[1] = v1 + v6;
- p[6] = v1 - v6;
- p[2] = v2 + v5;
- p[5] = v2 - v5;
- p[3] = v3 + v4;
- p[4] = v3 - v4;
- }
-
- // inverse DCT on columns
- for (i = 0; i < 8; ++i) {
- p = dataIn + i;
-
- // check for all-zero AC coefficients
- if (p[1*8] == 0 && p[2*8] == 0 && p[3*8] == 0 &&
- p[4*8] == 0 && p[5*8] == 0 && p[6*8] == 0 && p[7*8] == 0) {
- t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14;
- p[0*8] = t;
- p[1*8] = t;
- p[2*8] = t;
- p[3*8] = t;
- p[4*8] = t;
- p[5*8] = t;
- p[6*8] = t;
- p[7*8] = t;
- continue;
- }
-
- // stage 4
- v0 = (dctSqrt2 * p[0*8] + 2048) >> 12;
- v1 = (dctSqrt2 * p[4*8] + 2048) >> 12;
- v2 = p[2*8];
- v3 = p[6*8];
- v4 = (dctSqrt1d2 * (p[1*8] - p[7*8]) + 2048) >> 12;
- v7 = (dctSqrt1d2 * (p[1*8] + p[7*8]) + 2048) >> 12;
- v5 = p[3*8];
- v6 = p[5*8];
-
- // stage 3
- t = (v0 - v1 + 1) >> 1;
- v0 = (v0 + v1 + 1) >> 1;
- v1 = t;
- t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;
- v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;
- v3 = t;
- t = (v4 - v6 + 1) >> 1;
- v4 = (v4 + v6 + 1) >> 1;
- v6 = t;
- t = (v7 + v5 + 1) >> 1;
- v5 = (v7 - v5 + 1) >> 1;
- v7 = t;
-
- // stage 2
- t = (v0 - v3 + 1) >> 1;
- v0 = (v0 + v3 + 1) >> 1;
- v3 = t;
- t = (v1 - v2 + 1) >> 1;
- v1 = (v1 + v2 + 1) >> 1;
- v2 = t;
- t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
- v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
- v7 = t;
- t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
- v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
- v6 = t;
-
- // stage 1
- p[0*8] = v0 + v7;
- p[7*8] = v0 - v7;
- p[1*8] = v1 + v6;
- p[6*8] = v1 - v6;
- p[2*8] = v2 + v5;
- p[5*8] = v2 - v5;
- p[3*8] = v3 + v4;
- p[4*8] = v3 - v4;
- }
-
- // convert to 8-bit integers
- for (i = 0; i < 64; ++i) {
- dataOut[i] = dctClip[dctClipOffset + 128 + ((dataIn[i] + 8) >> 4)];
- }
-}
-
-int DCTStream::readHuffSym(DCTHuffTable *table) {
- Gushort code;
- int bit;
- int codeBits;
-
- code = 0;
- codeBits = 0;
- do {
- // add a bit to the code
- if ((bit = readBit()) == EOF)
- return 9999;
- code = (code << 1) + bit;
- ++codeBits;
-
- // look up code
- if (code - table->firstCode[codeBits] < table->numCodes[codeBits]) {
- code -= table->firstCode[codeBits];
- return table->sym[table->firstSym[codeBits] + code];
- }
- } while (codeBits < 16);
-
- error(getPos(), "Bad Huffman code in DCT stream");
- return 9999;
-}
-
-int DCTStream::readAmp(int size) {
- int amp, bit;
- int bits;
-
- amp = 0;
- for (bits = 0; bits < size; ++bits) {
- if ((bit = readBit()) == EOF)
- return 9999;
- amp = (amp << 1) + bit;
- }
- if (amp < (1 << (size - 1)))
- amp -= (1 << size) - 1;
- return amp;
-}
-
-int DCTStream::readBit() {
- int bit;
- int c, c2;
-
- if (inputBits == 0) {
- if ((c = str->getChar()) == EOF)
- return EOF;
- if (c == 0xff) {
- do {
- c2 = str->getChar();
- } while (c2 == 0xff);
- if (c2 != 0x00) {
- error(getPos(), "Bad DCT data: missing 00 after ff");
- return EOF;
- }
- }
- inputBuf = c;
- inputBits = 8;
- }
- bit = (inputBuf >> (inputBits - 1)) & 1;
- --inputBits;
- return bit;
-}
-
-GBool DCTStream::readHeader() {
- GBool doScan;
- int n;
- int c = 0;
- int i;
-
- // read headers
- doScan = gFalse;
- while (!doScan) {
- c = readMarker();
- switch (c) {
- case 0xc0: // SOF0 (sequential)
- case 0xc1: // SOF1 (extended sequential)
- if (!readBaselineSOF()) {
- return gFalse;
- }
- break;
- case 0xc2: // SOF2 (progressive)
- if (!readProgressiveSOF()) {
- return gFalse;
- }
- break;
- case 0xc4: // DHT
- if (!readHuffmanTables()) {
- return gFalse;
- }
- break;
- case 0xd8: // SOI
- break;
- case 0xd9: // EOI
- return gFalse;
- case 0xda: // SOS
- if (!readScanInfo()) {
- return gFalse;
- }
- doScan = gTrue;
- break;
- case 0xdb: // DQT
- if (!readQuantTables()) {
- return gFalse;
- }
- break;
- case 0xdd: // DRI
- if (!readRestartInterval()) {
- return gFalse;
- }
- break;
- case 0xe0: // APP0
- if (!readJFIFMarker()) {
- return gFalse;
- }
- break;
- case 0xee: // APP14
- if (!readAdobeMarker()) {
- return gFalse;
- }
- break;
- case EOF:
- error(getPos(), "Bad DCT header");
- return gFalse;
- default:
- // skip APPn / COM / etc.
- if (c >= 0xe0) {
- n = read16() - 2;
- for (i = 0; i < n; ++i) {
- str->getChar();
- }
- } else {
- error(getPos(), "Unknown DCT marker <%02x>", c);
- return gFalse;
- }
- break;
- }
- }
-
- return gTrue;
-}
-
-GBool DCTStream::readBaselineSOF() {
- int length;
- int prec;
- int i;
- int c;
-
- length = read16();
- prec = str->getChar();
- height = read16();
- width = read16();
- numComps = str->getChar();
- if (numComps <= 0 || numComps > 4) {
- error(getPos(), "Bad number of components in DCT stream");
- numComps = 0;
- return gFalse;
- }
- if (prec != 8) {
- error(getPos(), "Bad DCT precision %d", prec);
- return gFalse;
- }
- for (i = 0; i < numComps; ++i) {
- compInfo[i].id = str->getChar();
- c = str->getChar();
- compInfo[i].hSample = (c >> 4) & 0x0f;
- compInfo[i].vSample = c & 0x0f;
- compInfo[i].quantTable = str->getChar();
- }
- progressive = gFalse;
- return gTrue;
-}
-
-GBool DCTStream::readProgressiveSOF() {
- int length;
- int prec;
- int i;
- int c;
-
- length = read16();
- prec = str->getChar();
- height = read16();
- width = read16();
- numComps = str->getChar();
- if (numComps <= 0 || numComps > 4) {
- error(getPos(), "Bad number of components in DCT stream");
- numComps = 0;
- return gFalse;
- }
- if (prec != 8) {
- error(getPos(), "Bad DCT precision %d", prec);
- return gFalse;
- }
- for (i = 0; i < numComps; ++i) {
- compInfo[i].id = str->getChar();
- c = str->getChar();
- compInfo[i].hSample = (c >> 4) & 0x0f;
- compInfo[i].vSample = c & 0x0f;
- compInfo[i].quantTable = str->getChar();
- }
- progressive = gTrue;
- return gTrue;
-}
-
-GBool DCTStream::readScanInfo() {
- int length;
- int id, c;
- int i, j;
-
- length = read16() - 2;
- scanInfo.numComps = str->getChar();
- if (scanInfo.numComps <= 0 || scanInfo.numComps > 4) {
- error(getPos(), "Bad number of components in DCT stream");
- scanInfo.numComps = 0;
- return gFalse;
- }
- --length;
- if (length != 2 * scanInfo.numComps + 3) {
- error(getPos(), "Bad DCT scan info block");
- return gFalse;
- }
- interleaved = scanInfo.numComps == numComps;
- for (j = 0; j < numComps; ++j) {
- scanInfo.comp[j] = gFalse;
- }
- for (i = 0; i < scanInfo.numComps; ++i) {
- id = str->getChar();
- // some (broken) DCT streams reuse ID numbers, but at least they
- // keep the components in order, so we check compInfo[i] first to
- // work around the problem
- if (id == compInfo[i].id) {
- j = i;
- } else {
- for (j = 0; j < numComps; ++j) {
- if (id == compInfo[j].id) {
- break;
- }
- }
- if (j == numComps) {
- error(getPos(), "Bad DCT component ID in scan info block");
- return gFalse;
- }
- }
- scanInfo.comp[j] = gTrue;
- c = str->getChar();
- scanInfo.dcHuffTable[j] = (c >> 4) & 0x0f;
- scanInfo.acHuffTable[j] = c & 0x0f;
- }
- scanInfo.firstCoeff = str->getChar();
- scanInfo.lastCoeff = str->getChar();
- if (scanInfo.firstCoeff < 0 || scanInfo.lastCoeff > 63 ||
- scanInfo.firstCoeff > scanInfo.lastCoeff) {
- error(getPos(), "Bad DCT coefficient numbers in scan info block");
- return gFalse;
- }
- c = str->getChar();
- scanInfo.ah = (c >> 4) & 0x0f;
- scanInfo.al = c & 0x0f;
- return gTrue;
-}
-
-GBool DCTStream::readQuantTables() {
- int length, prec, i, index;
-
- length = read16() - 2;
- while (length > 0) {
- index = str->getChar();
- prec = (index >> 4) & 0x0f;
- index &= 0x0f;
- if (prec > 1 || index >= 4) {
- error(getPos(), "Bad DCT quantization table");
- return gFalse;
- }
- if (index == numQuantTables) {
- numQuantTables = index + 1;
- }
- for (i = 0; i < 64; ++i) {
- if (prec) {
- quantTables[index][dctZigZag[i]] = read16();
- } else {
- quantTables[index][dctZigZag[i]] = str->getChar();
- }
- }
- if (prec) {
- length -= 129;
- } else {
- length -= 65;
- }
- }
- return gTrue;
-}
-
-GBool DCTStream::readHuffmanTables() {
- DCTHuffTable *tbl;
- int length;
- int index;
- Gushort code;
- Guchar sym;
- int i;
- int c;
-
- length = read16() - 2;
- while (length > 0) {
- index = str->getChar();
- --length;
- if ((index & 0x0f) >= 4) {
- error(getPos(), "Bad DCT Huffman table");
- return gFalse;
- }
- if (index & 0x10) {
- index &= 0x0f;
- if (index >= numACHuffTables)
- numACHuffTables = index+1;
- tbl = &acHuffTables[index];
- } else {
- index &= 0x0f;
- if (index >= numDCHuffTables)
- numDCHuffTables = index+1;
- tbl = &dcHuffTables[index];
- }
- sym = 0;
- code = 0;
- for (i = 1; i <= 16; ++i) {
- c = str->getChar();
- tbl->firstSym[i] = sym;
- tbl->firstCode[i] = code;
- tbl->numCodes[i] = c;
- sym += c;
- code = (code + c) << 1;
- }
- length -= 16;
- for (i = 0; i < sym; ++i)
- tbl->sym[i] = str->getChar();
- length -= sym;
- }
- return gTrue;
-}
-
-GBool DCTStream::readRestartInterval() {
- int length;
-
- length = read16();
- if (length != 4) {
- error(getPos(), "Bad DCT restart interval");
- return gFalse;
- }
- restartInterval = read16();
- return gTrue;
-}
-
-GBool DCTStream::readJFIFMarker() {
- int length, i;
- char buf[5];
- int c;
-
- length = read16();
- length -= 2;
- if (length >= 5) {
- for (i = 0; i < 5; ++i) {
- if ((c = str->getChar()) == EOF) {
- error(getPos(), "Bad DCT APP0 marker");
- return gFalse;
- }
- buf[i] = c;
- }
- length -= 5;
- if (!memcmp(buf, "JFIF\0", 5)) {
- gotJFIFMarker = gTrue;
- }
- }
- while (length > 0) {
- if (str->getChar() == EOF) {
- error(getPos(), "Bad DCT APP0 marker");
- return gFalse;
- }
- --length;
- }
- return gTrue;
-}
-
-GBool DCTStream::readAdobeMarker() {
- int length, i;
- char buf[12];
- int c;
-
- length = read16();
- if (length < 14) {
- goto err;
- }
- for (i = 0; i < 12; ++i) {
- if ((c = str->getChar()) == EOF) {
- goto err;
- }
- buf[i] = c;
- }
- if (strncmp(buf, "Adobe", 5)) {
- goto err;
- }
- colorXform = buf[11];
- gotAdobeMarker = gTrue;
- for (i = 14; i < length; ++i) {
- if (str->getChar() == EOF) {
- goto err;
- }
- }
- return gTrue;
-
- err:
- error(getPos(), "Bad DCT Adobe APP14 marker");
- return gFalse;
-}
-
-GBool DCTStream::readTrailer() {
- int c;
-
- c = readMarker();
- if (c != 0xd9) { // EOI
- error(getPos(), "Bad DCT trailer");
- return gFalse;
- }
- return gTrue;
-}
-
-int DCTStream::readMarker() {
- int c;
-
- do {
- do {
- c = str->getChar();
- } while (c != 0xff && c != EOF);
- do {
- c = str->getChar();
- } while (c == 0xff);
- } while (c == 0x00);
- return c;
-}
-
-int DCTStream::read16() {
- int c1, c2;
-
- if ((c1 = str->getChar()) == EOF)
- return EOF;
- if ((c2 = str->getChar()) == EOF)
- return EOF;
- return (c1 << 8) + c2;
-}
-
-GString *DCTStream::getPSFilter(int psLevel, char *indent) {
- GString *s;
-
- if (psLevel < 2) {
- return NULL;
- }
- if (!(s = str->getPSFilter(psLevel, indent))) {
- return NULL;
- }
- s->append(indent)->append("<< >> /DCTDecode filter\n");
- return s;
-}
-
-GBool DCTStream::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-//------------------------------------------------------------------------
-// FlateStream
-//------------------------------------------------------------------------
-
-int FlateStream::codeLenCodeMap[flateMaxCodeLenCodes] = {
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
-};
-
-FlateDecode FlateStream::lengthDecode[flateMaxLitCodes-257] = {
- {0, 3},
- {0, 4},
- {0, 5},
- {0, 6},
- {0, 7},
- {0, 8},
- {0, 9},
- {0, 10},
- {1, 11},
- {1, 13},
- {1, 15},
- {1, 17},
- {2, 19},
- {2, 23},
- {2, 27},
- {2, 31},
- {3, 35},
- {3, 43},
- {3, 51},
- {3, 59},
- {4, 67},
- {4, 83},
- {4, 99},
- {4, 115},
- {5, 131},
- {5, 163},
- {5, 195},
- {5, 227},
- {0, 258},
- {0, 258},
- {0, 258}
-};
-
-FlateDecode FlateStream::distDecode[flateMaxDistCodes] = {
- { 0, 1},
- { 0, 2},
- { 0, 3},
- { 0, 4},
- { 1, 5},
- { 1, 7},
- { 2, 9},
- { 2, 13},
- { 3, 17},
- { 3, 25},
- { 4, 33},
- { 4, 49},
- { 5, 65},
- { 5, 97},
- { 6, 129},
- { 6, 193},
- { 7, 257},
- { 7, 385},
- { 8, 513},
- { 8, 769},
- { 9, 1025},
- { 9, 1537},
- {10, 2049},
- {10, 3073},
- {11, 4097},
- {11, 6145},
- {12, 8193},
- {12, 12289},
- {13, 16385},
- {13, 24577}
-};
-
-static FlateCode flateFixedLitCodeTabCodes[512] = {
- {7, 0x0100},
- {8, 0x0050},
- {8, 0x0010},
- {8, 0x0118},
- {7, 0x0110},
- {8, 0x0070},
- {8, 0x0030},
- {9, 0x00c0},
- {7, 0x0108},
- {8, 0x0060},
- {8, 0x0020},
- {9, 0x00a0},
- {8, 0x0000},
- {8, 0x0080},
- {8, 0x0040},
- {9, 0x00e0},
- {7, 0x0104},
- {8, 0x0058},
- {8, 0x0018},
- {9, 0x0090},
- {7, 0x0114},
- {8, 0x0078},
- {8, 0x0038},
- {9, 0x00d0},
- {7, 0x010c},
- {8, 0x0068},
- {8, 0x0028},
- {9, 0x00b0},
- {8, 0x0008},
- {8, 0x0088},
- {8, 0x0048},
- {9, 0x00f0},
- {7, 0x0102},
- {8, 0x0054},
- {8, 0x0014},
- {8, 0x011c},
- {7, 0x0112},
- {8, 0x0074},
- {8, 0x0034},
- {9, 0x00c8},
- {7, 0x010a},
- {8, 0x0064},
- {8, 0x0024},
- {9, 0x00a8},
- {8, 0x0004},
- {8, 0x0084},
- {8, 0x0044},
- {9, 0x00e8},
- {7, 0x0106},
- {8, 0x005c},
- {8, 0x001c},
- {9, 0x0098},
- {7, 0x0116},
- {8, 0x007c},
- {8, 0x003c},
- {9, 0x00d8},
- {7, 0x010e},
- {8, 0x006c},
- {8, 0x002c},
- {9, 0x00b8},
- {8, 0x000c},
- {8, 0x008c},
- {8, 0x004c},
- {9, 0x00f8},
- {7, 0x0101},
- {8, 0x0052},
- {8, 0x0012},
- {8, 0x011a},
- {7, 0x0111},
- {8, 0x0072},
- {8, 0x0032},
- {9, 0x00c4},
- {7, 0x0109},
- {8, 0x0062},
- {8, 0x0022},
- {9, 0x00a4},
- {8, 0x0002},
- {8, 0x0082},
- {8, 0x0042},
- {9, 0x00e4},
- {7, 0x0105},
- {8, 0x005a},
- {8, 0x001a},
- {9, 0x0094},
- {7, 0x0115},
- {8, 0x007a},
- {8, 0x003a},
- {9, 0x00d4},
- {7, 0x010d},
- {8, 0x006a},
- {8, 0x002a},
- {9, 0x00b4},
- {8, 0x000a},
- {8, 0x008a},
- {8, 0x004a},
- {9, 0x00f4},
- {7, 0x0103},
- {8, 0x0056},
- {8, 0x0016},
- {8, 0x011e},
- {7, 0x0113},
- {8, 0x0076},
- {8, 0x0036},
- {9, 0x00cc},
- {7, 0x010b},
- {8, 0x0066},
- {8, 0x0026},
- {9, 0x00ac},
- {8, 0x0006},
- {8, 0x0086},
- {8, 0x0046},
- {9, 0x00ec},
- {7, 0x0107},
- {8, 0x005e},
- {8, 0x001e},
- {9, 0x009c},
- {7, 0x0117},
- {8, 0x007e},
- {8, 0x003e},
- {9, 0x00dc},
- {7, 0x010f},
- {8, 0x006e},
- {8, 0x002e},
- {9, 0x00bc},
- {8, 0x000e},
- {8, 0x008e},
- {8, 0x004e},
- {9, 0x00fc},
- {7, 0x0100},
- {8, 0x0051},
- {8, 0x0011},
- {8, 0x0119},
- {7, 0x0110},
- {8, 0x0071},
- {8, 0x0031},
- {9, 0x00c2},
- {7, 0x0108},
- {8, 0x0061},
- {8, 0x0021},
- {9, 0x00a2},
- {8, 0x0001},
- {8, 0x0081},
- {8, 0x0041},
- {9, 0x00e2},
- {7, 0x0104},
- {8, 0x0059},
- {8, 0x0019},
- {9, 0x0092},
- {7, 0x0114},
- {8, 0x0079},
- {8, 0x0039},
- {9, 0x00d2},
- {7, 0x010c},
- {8, 0x0069},
- {8, 0x0029},
- {9, 0x00b2},
- {8, 0x0009},
- {8, 0x0089},
- {8, 0x0049},
- {9, 0x00f2},
- {7, 0x0102},
- {8, 0x0055},
- {8, 0x0015},
- {8, 0x011d},
- {7, 0x0112},
- {8, 0x0075},
- {8, 0x0035},
- {9, 0x00ca},
- {7, 0x010a},
- {8, 0x0065},
- {8, 0x0025},
- {9, 0x00aa},
- {8, 0x0005},
- {8, 0x0085},
- {8, 0x0045},
- {9, 0x00ea},
- {7, 0x0106},
- {8, 0x005d},
- {8, 0x001d},
- {9, 0x009a},
- {7, 0x0116},
- {8, 0x007d},
- {8, 0x003d},
- {9, 0x00da},
- {7, 0x010e},
- {8, 0x006d},
- {8, 0x002d},
- {9, 0x00ba},
- {8, 0x000d},
- {8, 0x008d},
- {8, 0x004d},
- {9, 0x00fa},
- {7, 0x0101},
- {8, 0x0053},
- {8, 0x0013},
- {8, 0x011b},
- {7, 0x0111},
- {8, 0x0073},
- {8, 0x0033},
- {9, 0x00c6},
- {7, 0x0109},
- {8, 0x0063},
- {8, 0x0023},
- {9, 0x00a6},
- {8, 0x0003},
- {8, 0x0083},
- {8, 0x0043},
- {9, 0x00e6},
- {7, 0x0105},
- {8, 0x005b},
- {8, 0x001b},
- {9, 0x0096},
- {7, 0x0115},
- {8, 0x007b},
- {8, 0x003b},
- {9, 0x00d6},
- {7, 0x010d},
- {8, 0x006b},
- {8, 0x002b},
- {9, 0x00b6},
- {8, 0x000b},
- {8, 0x008b},
- {8, 0x004b},
- {9, 0x00f6},
- {7, 0x0103},
- {8, 0x0057},
- {8, 0x0017},
- {8, 0x011f},
- {7, 0x0113},
- {8, 0x0077},
- {8, 0x0037},
- {9, 0x00ce},
- {7, 0x010b},
- {8, 0x0067},
- {8, 0x0027},
- {9, 0x00ae},
- {8, 0x0007},
- {8, 0x0087},
- {8, 0x0047},
- {9, 0x00ee},
- {7, 0x0107},
- {8, 0x005f},
- {8, 0x001f},
- {9, 0x009e},
- {7, 0x0117},
- {8, 0x007f},
- {8, 0x003f},
- {9, 0x00de},
- {7, 0x010f},
- {8, 0x006f},
- {8, 0x002f},
- {9, 0x00be},
- {8, 0x000f},
- {8, 0x008f},
- {8, 0x004f},
- {9, 0x00fe},
- {7, 0x0100},
- {8, 0x0050},
- {8, 0x0010},
- {8, 0x0118},
- {7, 0x0110},
- {8, 0x0070},
- {8, 0x0030},
- {9, 0x00c1},
- {7, 0x0108},
- {8, 0x0060},
- {8, 0x0020},
- {9, 0x00a1},
- {8, 0x0000},
- {8, 0x0080},
- {8, 0x0040},
- {9, 0x00e1},
- {7, 0x0104},
- {8, 0x0058},
- {8, 0x0018},
- {9, 0x0091},
- {7, 0x0114},
- {8, 0x0078},
- {8, 0x0038},
- {9, 0x00d1},
- {7, 0x010c},
- {8, 0x0068},
- {8, 0x0028},
- {9, 0x00b1},
- {8, 0x0008},
- {8, 0x0088},
- {8, 0x0048},
- {9, 0x00f1},
- {7, 0x0102},
- {8, 0x0054},
- {8, 0x0014},
- {8, 0x011c},
- {7, 0x0112},
- {8, 0x0074},
- {8, 0x0034},
- {9, 0x00c9},
- {7, 0x010a},
- {8, 0x0064},
- {8, 0x0024},
- {9, 0x00a9},
- {8, 0x0004},
- {8, 0x0084},
- {8, 0x0044},
- {9, 0x00e9},
- {7, 0x0106},
- {8, 0x005c},
- {8, 0x001c},
- {9, 0x0099},
- {7, 0x0116},
- {8, 0x007c},
- {8, 0x003c},
- {9, 0x00d9},
- {7, 0x010e},
- {8, 0x006c},
- {8, 0x002c},
- {9, 0x00b9},
- {8, 0x000c},
- {8, 0x008c},
- {8, 0x004c},
- {9, 0x00f9},
- {7, 0x0101},
- {8, 0x0052},
- {8, 0x0012},
- {8, 0x011a},
- {7, 0x0111},
- {8, 0x0072},
- {8, 0x0032},
- {9, 0x00c5},
- {7, 0x0109},
- {8, 0x0062},
- {8, 0x0022},
- {9, 0x00a5},
- {8, 0x0002},
- {8, 0x0082},
- {8, 0x0042},
- {9, 0x00e5},
- {7, 0x0105},
- {8, 0x005a},
- {8, 0x001a},
- {9, 0x0095},
- {7, 0x0115},
- {8, 0x007a},
- {8, 0x003a},
- {9, 0x00d5},
- {7, 0x010d},
- {8, 0x006a},
- {8, 0x002a},
- {9, 0x00b5},
- {8, 0x000a},
- {8, 0x008a},
- {8, 0x004a},
- {9, 0x00f5},
- {7, 0x0103},
- {8, 0x0056},
- {8, 0x0016},
- {8, 0x011e},
- {7, 0x0113},
- {8, 0x0076},
- {8, 0x0036},
- {9, 0x00cd},
- {7, 0x010b},
- {8, 0x0066},
- {8, 0x0026},
- {9, 0x00ad},
- {8, 0x0006},
- {8, 0x0086},
- {8, 0x0046},
- {9, 0x00ed},
- {7, 0x0107},
- {8, 0x005e},
- {8, 0x001e},
- {9, 0x009d},
- {7, 0x0117},
- {8, 0x007e},
- {8, 0x003e},
- {9, 0x00dd},
- {7, 0x010f},
- {8, 0x006e},
- {8, 0x002e},
- {9, 0x00bd},
- {8, 0x000e},
- {8, 0x008e},
- {8, 0x004e},
- {9, 0x00fd},
- {7, 0x0100},
- {8, 0x0051},
- {8, 0x0011},
- {8, 0x0119},
- {7, 0x0110},
- {8, 0x0071},
- {8, 0x0031},
- {9, 0x00c3},
- {7, 0x0108},
- {8, 0x0061},
- {8, 0x0021},
- {9, 0x00a3},
- {8, 0x0001},
- {8, 0x0081},
- {8, 0x0041},
- {9, 0x00e3},
- {7, 0x0104},
- {8, 0x0059},
- {8, 0x0019},
- {9, 0x0093},
- {7, 0x0114},
- {8, 0x0079},
- {8, 0x0039},
- {9, 0x00d3},
- {7, 0x010c},
- {8, 0x0069},
- {8, 0x0029},
- {9, 0x00b3},
- {8, 0x0009},
- {8, 0x0089},
- {8, 0x0049},
- {9, 0x00f3},
- {7, 0x0102},
- {8, 0x0055},
- {8, 0x0015},
- {8, 0x011d},
- {7, 0x0112},
- {8, 0x0075},
- {8, 0x0035},
- {9, 0x00cb},
- {7, 0x010a},
- {8, 0x0065},
- {8, 0x0025},
- {9, 0x00ab},
- {8, 0x0005},
- {8, 0x0085},
- {8, 0x0045},
- {9, 0x00eb},
- {7, 0x0106},
- {8, 0x005d},
- {8, 0x001d},
- {9, 0x009b},
- {7, 0x0116},
- {8, 0x007d},
- {8, 0x003d},
- {9, 0x00db},
- {7, 0x010e},
- {8, 0x006d},
- {8, 0x002d},
- {9, 0x00bb},
- {8, 0x000d},
- {8, 0x008d},
- {8, 0x004d},
- {9, 0x00fb},
- {7, 0x0101},
- {8, 0x0053},
- {8, 0x0013},
- {8, 0x011b},
- {7, 0x0111},
- {8, 0x0073},
- {8, 0x0033},
- {9, 0x00c7},
- {7, 0x0109},
- {8, 0x0063},
- {8, 0x0023},
- {9, 0x00a7},
- {8, 0x0003},
- {8, 0x0083},
- {8, 0x0043},
- {9, 0x00e7},
- {7, 0x0105},
- {8, 0x005b},
- {8, 0x001b},
- {9, 0x0097},
- {7, 0x0115},
- {8, 0x007b},
- {8, 0x003b},
- {9, 0x00d7},
- {7, 0x010d},
- {8, 0x006b},
- {8, 0x002b},
- {9, 0x00b7},
- {8, 0x000b},
- {8, 0x008b},
- {8, 0x004b},
- {9, 0x00f7},
- {7, 0x0103},
- {8, 0x0057},
- {8, 0x0017},
- {8, 0x011f},
- {7, 0x0113},
- {8, 0x0077},
- {8, 0x0037},
- {9, 0x00cf},
- {7, 0x010b},
- {8, 0x0067},
- {8, 0x0027},
- {9, 0x00af},
- {8, 0x0007},
- {8, 0x0087},
- {8, 0x0047},
- {9, 0x00ef},
- {7, 0x0107},
- {8, 0x005f},
- {8, 0x001f},
- {9, 0x009f},
- {7, 0x0117},
- {8, 0x007f},
- {8, 0x003f},
- {9, 0x00df},
- {7, 0x010f},
- {8, 0x006f},
- {8, 0x002f},
- {9, 0x00bf},
- {8, 0x000f},
- {8, 0x008f},
- {8, 0x004f},
- {9, 0x00ff}
-};
-
-FlateHuffmanTab FlateStream::fixedLitCodeTab = {
- flateFixedLitCodeTabCodes, 9
-};
-
-static FlateCode flateFixedDistCodeTabCodes[32] = {
- {5, 0x0000},
- {5, 0x0010},
- {5, 0x0008},
- {5, 0x0018},
- {5, 0x0004},
- {5, 0x0014},
- {5, 0x000c},
- {5, 0x001c},
- {5, 0x0002},
- {5, 0x0012},
- {5, 0x000a},
- {5, 0x001a},
- {5, 0x0006},
- {5, 0x0016},
- {5, 0x000e},
- {0, 0x0000},
- {5, 0x0001},
- {5, 0x0011},
- {5, 0x0009},
- {5, 0x0019},
- {5, 0x0005},
- {5, 0x0015},
- {5, 0x000d},
- {5, 0x001d},
- {5, 0x0003},
- {5, 0x0013},
- {5, 0x000b},
- {5, 0x001b},
- {5, 0x0007},
- {5, 0x0017},
- {5, 0x000f},
- {0, 0x0000}
-};
-
-FlateHuffmanTab FlateStream::fixedDistCodeTab = {
- flateFixedDistCodeTabCodes, 5
-};
-
-FlateStream::FlateStream(Stream *strA, int predictor, int columns,
- int colors, int bits):
- FilterStream(strA) {
- if (predictor != 1) {
- pred = new StreamPredictor(this, predictor, columns, colors, bits);
- if (!pred->isOk()) {
- delete pred;
- pred = NULL;
- }
- } else {
- pred = NULL;
- }
- litCodeTab.codes = NULL;
- distCodeTab.codes = NULL;
- memset(buf, 0, flateWindow);
-}
-
-FlateStream::~FlateStream() {
- if (litCodeTab.codes != fixedLitCodeTab.codes) {
- gfree(litCodeTab.codes);
- }
- if (distCodeTab.codes != fixedDistCodeTab.codes) {
- gfree(distCodeTab.codes);
- }
- if (pred) {
- delete pred;
- }
- delete str;
-}
-
-void FlateStream::reset() {
- int cmf, flg;
-
- index = 0;
- remain = 0;
- codeBuf = 0;
- codeSize = 0;
- compressedBlock = gFalse;
- endOfBlock = gTrue;
- eof = gTrue;
-
- str->reset();
-
- // read header
- //~ need to look at window size?
- endOfBlock = eof = gTrue;
- cmf = str->getChar();
- flg = str->getChar();
- if (cmf == EOF || flg == EOF)
- return;
- if ((cmf & 0x0f) != 0x08) {
- error(getPos(), "Unknown compression method in flate stream");
- return;
- }
- if ((((cmf << 8) + flg) % 31) != 0) {
- error(getPos(), "Bad FCHECK in flate stream");
- return;
- }
- if (flg & 0x20) {
- error(getPos(), "FDICT bit set in flate stream");
- return;
- }
-
- eof = gFalse;
-}
-
-int FlateStream::getChar() {
- int c;
-
- if (pred) {
- return pred->getChar();
- }
- while (remain == 0) {
- if (endOfBlock && eof)
- return EOF;
- readSome();
- }
- c = buf[index];
- index = (index + 1) & flateMask;
- --remain;
- return c;
-}
-
-int FlateStream::lookChar() {
- int c;
-
- if (pred) {
- return pred->lookChar();
- }
- while (remain == 0) {
- if (endOfBlock && eof)
- return EOF;
- readSome();
- }
- c = buf[index];
- return c;
-}
-
-int FlateStream::getRawChar() {
- int c;
-
- while (remain == 0) {
- if (endOfBlock && eof)
- return EOF;
- readSome();
- }
- c = buf[index];
- index = (index + 1) & flateMask;
- --remain;
- return c;
-}
-
-GString *FlateStream::getPSFilter(int psLevel, char *indent) {
- GString *s;
-
- if (psLevel < 3 || pred) {
- return NULL;
- }
- if (!(s = str->getPSFilter(psLevel, indent))) {
- return NULL;
- }
- s->append(indent)->append("<< >> /FlateDecode filter\n");
- return s;
-}
-
-GBool FlateStream::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-void FlateStream::readSome() {
- int code1, code2;
- int len, dist;
- int i, j, k;
- int c;
-
- if (endOfBlock) {
- if (!startBlock())
- return;
- }
-
- if (compressedBlock) {
- if ((code1 = getHuffmanCodeWord(&litCodeTab)) == EOF)
- goto err;
- if (code1 < 256) {
- buf[index] = code1;
- remain = 1;
- } else if (code1 == 256) {
- endOfBlock = gTrue;
- remain = 0;
- } else {
- code1 -= 257;
- code2 = lengthDecode[code1].bits;
- if (code2 > 0 && (code2 = getCodeWord(code2)) == EOF)
- goto err;
- len = lengthDecode[code1].first + code2;
- if ((code1 = getHuffmanCodeWord(&distCodeTab)) == EOF)
- goto err;
- code2 = distDecode[code1].bits;
- if (code2 > 0 && (code2 = getCodeWord(code2)) == EOF)
- goto err;
- dist = distDecode[code1].first + code2;
- i = index;
- j = (index - dist) & flateMask;
- for (k = 0; k < len; ++k) {
- buf[i] = buf[j];
- i = (i + 1) & flateMask;
- j = (j + 1) & flateMask;
- }
- remain = len;
- }
-
- } else {
- len = (blockLen < flateWindow) ? blockLen : flateWindow;
- for (i = 0, j = index; i < len; ++i, j = (j + 1) & flateMask) {
- if ((c = str->getChar()) == EOF) {
- endOfBlock = eof = gTrue;
- break;
- }
- buf[j] = c & 0xff;
- }
- remain = i;
- blockLen -= len;
- if (blockLen == 0)
- endOfBlock = gTrue;
- }
-
- return;
-
-err:
- error(getPos(), "Unexpected end of file in flate stream");
- endOfBlock = eof = gTrue;
- remain = 0;
-}
-
-GBool FlateStream::startBlock() {
- int blockHdr;
- int c;
- int check;
-
- // free the code tables from the previous block
- if (litCodeTab.codes != fixedLitCodeTab.codes) {
- gfree(litCodeTab.codes);
- }
- litCodeTab.codes = NULL;
- if (distCodeTab.codes != fixedDistCodeTab.codes) {
- gfree(distCodeTab.codes);
- }
- distCodeTab.codes = NULL;
-
- // read block header
- blockHdr = getCodeWord(3);
- if (blockHdr & 1)
- eof = gTrue;
- blockHdr >>= 1;
-
- // uncompressed block
- if (blockHdr == 0) {
- compressedBlock = gFalse;
- if ((c = str->getChar()) == EOF)
- goto err;
- blockLen = c & 0xff;
- if ((c = str->getChar()) == EOF)
- goto err;
- blockLen |= (c & 0xff) << 8;
- if ((c = str->getChar()) == EOF)
- goto err;
- check = c & 0xff;
- if ((c = str->getChar()) == EOF)
- goto err;
- check |= (c & 0xff) << 8;
- if (check != (~blockLen & 0xffff))
- error(getPos(), "Bad uncompressed block length in flate stream");
- codeBuf = 0;
- codeSize = 0;
-
- // compressed block with fixed codes
- } else if (blockHdr == 1) {
- compressedBlock = gTrue;
- loadFixedCodes();
-
- // compressed block with dynamic codes
- } else if (blockHdr == 2) {
- compressedBlock = gTrue;
- if (!readDynamicCodes()) {
- goto err;
- }
-
- // unknown block type
- } else {
- goto err;
- }
-
- endOfBlock = gFalse;
- return gTrue;
-
-err:
- error(getPos(), "Bad block header in flate stream");
- endOfBlock = eof = gTrue;
- return gFalse;
-}
-
-void FlateStream::loadFixedCodes() {
- litCodeTab.codes = fixedLitCodeTab.codes;
- litCodeTab.maxLen = fixedLitCodeTab.maxLen;
- distCodeTab.codes = fixedDistCodeTab.codes;
- distCodeTab.maxLen = fixedDistCodeTab.maxLen;
-}
-
-GBool FlateStream::readDynamicCodes() {
- int numCodeLenCodes;
- int numLitCodes;
- int numDistCodes;
- int codeLenCodeLengths[flateMaxCodeLenCodes];
- FlateHuffmanTab codeLenCodeTab;
- int len, repeat, code;
- int i;
-
- codeLenCodeTab.codes = NULL;
-
- // read lengths
- if ((numLitCodes = getCodeWord(5)) == EOF) {
- goto err;
- }
- numLitCodes += 257;
- if ((numDistCodes = getCodeWord(5)) == EOF) {
- goto err;
- }
- numDistCodes += 1;
- if ((numCodeLenCodes = getCodeWord(4)) == EOF) {
- goto err;
- }
- numCodeLenCodes += 4;
- if (numLitCodes > flateMaxLitCodes ||
- numDistCodes > flateMaxDistCodes ||
- numCodeLenCodes > flateMaxCodeLenCodes) {
- goto err;
- }
-
- // build the code length code table
- for (i = 0; i < flateMaxCodeLenCodes; ++i) {
- codeLenCodeLengths[i] = 0;
- }
- for (i = 0; i < numCodeLenCodes; ++i) {
- if ((codeLenCodeLengths[codeLenCodeMap[i]] = getCodeWord(3)) == -1) {
- goto err;
- }
- }
- compHuffmanCodes(codeLenCodeLengths, flateMaxCodeLenCodes, &codeLenCodeTab);
-
- // build the literal and distance code tables
- len = 0;
- repeat = 0;
- i = 0;
- while (i < numLitCodes + numDistCodes) {
- if ((code = getHuffmanCodeWord(&codeLenCodeTab)) == EOF) {
- goto err;
- }
- if (code == 16) {
- if ((repeat = getCodeWord(2)) == EOF) {
- goto err;
- }
- repeat += 3;
- if (i + repeat > numLitCodes + numDistCodes) {
- goto err;
- }
- for (; repeat > 0; --repeat) {
- codeLengths[i++] = len;
- }
- } else if (code == 17) {
- if ((repeat = getCodeWord(3)) == EOF) {
- goto err;
- }
- repeat += 3;
- if (i + repeat > numLitCodes + numDistCodes) {
- goto err;
- }
- len = 0;
- for (; repeat > 0; --repeat) {
- codeLengths[i++] = 0;
- }
- } else if (code == 18) {
- if ((repeat = getCodeWord(7)) == EOF) {
- goto err;
- }
- repeat += 11;
- if (i + repeat > numLitCodes + numDistCodes) {
- goto err;
- }
- len = 0;
- for (; repeat > 0; --repeat) {
- codeLengths[i++] = 0;
- }
- } else {
- codeLengths[i++] = len = code;
- }
- }
- compHuffmanCodes(codeLengths, numLitCodes, &litCodeTab);
- compHuffmanCodes(codeLengths + numLitCodes, numDistCodes, &distCodeTab);
-
- gfree(codeLenCodeTab.codes);
- return gTrue;
-
-err:
- error(getPos(), "Bad dynamic code table in flate stream");
- gfree(codeLenCodeTab.codes);
- return gFalse;
-}
-
-// Convert an array <lengths> of <n> lengths, in value order, into a
-// Huffman code lookup table.
-void FlateStream::compHuffmanCodes(int *lengths, int n, FlateHuffmanTab *tab) {
- int tabSize, len, code, code2, skip, val, i, t;
-
- // find max code length
- tab->maxLen = 0;
- for (val = 0; val < n; ++val) {
- if (lengths[val] > tab->maxLen) {
- tab->maxLen = lengths[val];
- }
- }
-
- // allocate the table
- tabSize = 1 << tab->maxLen;
- tab->codes = (FlateCode *)gmallocn(tabSize, sizeof(FlateCode));
-
- // clear the table
- for (i = 0; i < tabSize; ++i) {
- tab->codes[i].len = 0;
- tab->codes[i].val = 0;
- }
-
- // build the table
- for (len = 1, code = 0, skip = 2;
- len <= tab->maxLen;
- ++len, code <<= 1, skip <<= 1) {
- for (val = 0; val < n; ++val) {
- if (lengths[val] == len) {
-
- // bit-reverse the code
- code2 = 0;
- t = code;
- for (i = 0; i < len; ++i) {
- code2 = (code2 << 1) | (t & 1);
- t >>= 1;
- }
-
- // fill in the table entries
- for (i = code2; i < tabSize; i += skip) {
- tab->codes[i].len = (Gushort)len;
- tab->codes[i].val = (Gushort)val;
- }
-
- ++code;
- }
- }
- }
-}
-
-int FlateStream::getHuffmanCodeWord(FlateHuffmanTab *tab) {
- FlateCode *code;
- int c;
-
- while (codeSize < tab->maxLen) {
- if ((c = str->getChar()) == EOF) {
- break;
- }
- codeBuf |= (c & 0xff) << codeSize;
- codeSize += 8;
- }
- code = &tab->codes[codeBuf & ((1 << tab->maxLen) - 1)];
- if (codeSize == 0 || codeSize < code->len || code->len == 0) {
- return EOF;
- }
- codeBuf >>= code->len;
- codeSize -= code->len;
- return (int)code->val;
-}
-
-int FlateStream::getCodeWord(int bits) {
- int c;
-
- while (codeSize < bits) {
- if ((c = str->getChar()) == EOF)
- return EOF;
- codeBuf |= (c & 0xff) << codeSize;
- codeSize += 8;
- }
- c = codeBuf & ((1 << bits) - 1);
- codeBuf >>= bits;
- codeSize -= bits;
- return c;
-}
-
-//------------------------------------------------------------------------
-// EOFStream
-//------------------------------------------------------------------------
-
-EOFStream::EOFStream(Stream *strA):
- FilterStream(strA) {
-}
-
-EOFStream::~EOFStream() {
- delete str;
-}
-
-//------------------------------------------------------------------------
-// FixedLengthEncoder
-//------------------------------------------------------------------------
-
-FixedLengthEncoder::FixedLengthEncoder(Stream *strA, int lengthA):
- FilterStream(strA) {
- length = lengthA;
- count = 0;
-}
-
-FixedLengthEncoder::~FixedLengthEncoder() {
- if (str->isEncoder())
- delete str;
-}
-
-void FixedLengthEncoder::reset() {
- str->reset();
- count = 0;
-}
-
-int FixedLengthEncoder::getChar() {
- if (length >= 0 && count >= length)
- return EOF;
- ++count;
- return str->getChar();
-}
-
-int FixedLengthEncoder::lookChar() {
- if (length >= 0 && count >= length)
- return EOF;
- return str->getChar();
-}
-
-GBool FixedLengthEncoder::isBinary(GBool last) {
- return str->isBinary(gTrue);
-}
-
-//------------------------------------------------------------------------
-// ASCIIHexEncoder
-//------------------------------------------------------------------------
-
-ASCIIHexEncoder::ASCIIHexEncoder(Stream *strA):
- FilterStream(strA) {
- bufPtr = bufEnd = buf;
- lineLen = 0;
- eof = gFalse;
-}
-
-ASCIIHexEncoder::~ASCIIHexEncoder() {
- if (str->isEncoder()) {
- delete str;
- }
-}
-
-void ASCIIHexEncoder::reset() {
- str->reset();
- bufPtr = bufEnd = buf;
- lineLen = 0;
- eof = gFalse;
-}
-
-GBool ASCIIHexEncoder::fillBuf() {
- static char *hex = "0123456789abcdef";
- int c;
-
- if (eof) {
- return gFalse;
- }
- bufPtr = bufEnd = buf;
- if ((c = str->getChar()) == EOF) {
- *bufEnd++ = '>';
- eof = gTrue;
- } else {
- if (lineLen >= 64) {
- *bufEnd++ = '\n';
- lineLen = 0;
- }
- *bufEnd++ = hex[(c >> 4) & 0x0f];
- *bufEnd++ = hex[c & 0x0f];
- lineLen += 2;
- }
- return gTrue;
-}
-
-//------------------------------------------------------------------------
-// ASCII85Encoder
-//------------------------------------------------------------------------
-
-ASCII85Encoder::ASCII85Encoder(Stream *strA):
- FilterStream(strA) {
- bufPtr = bufEnd = buf;
- lineLen = 0;
- eof = gFalse;
-}
-
-ASCII85Encoder::~ASCII85Encoder() {
- if (str->isEncoder())
- delete str;
-}
-
-void ASCII85Encoder::reset() {
- str->reset();
- bufPtr = bufEnd = buf;
- lineLen = 0;
- eof = gFalse;
-}
-
-GBool ASCII85Encoder::fillBuf() {
- Gulong t;
- char buf1[5];
- int c0, c1, c2, c3;
- int n, i;
-
- if (eof) {
- return gFalse;
- }
- c0 = str->getChar();
- c1 = str->getChar();
- c2 = str->getChar();
- c3 = str->getChar();
- bufPtr = bufEnd = buf;
- if (c3 == EOF) {
- if (c0 == EOF) {
- n = 0;
- t = 0;
- } else {
- if (c1 == EOF) {
- n = 1;
- t = c0 << 24;
- } else if (c2 == EOF) {
- n = 2;
- t = (c0 << 24) | (c1 << 16);
- } else {
- n = 3;
- t = (c0 << 24) | (c1 << 16) | (c2 << 8);
- }
- for (i = 4; i >= 0; --i) {
- buf1[i] = (char)(t % 85 + 0x21);
- t /= 85;
- }
- for (i = 0; i <= n; ++i) {
- *bufEnd++ = buf1[i];
- if (++lineLen == 65) {
- *bufEnd++ = '\n';
- lineLen = 0;
- }
- }
- }
- *bufEnd++ = '~';
- *bufEnd++ = '>';
- eof = gTrue;
- } else {
- t = (c0 << 24) | (c1 << 16) | (c2 << 8) | c3;
- if (t == 0) {
- *bufEnd++ = 'z';
- if (++lineLen == 65) {
- *bufEnd++ = '\n';
- lineLen = 0;
- }
- } else {
- for (i = 4; i >= 0; --i) {
- buf1[i] = (char)(t % 85 + 0x21);
- t /= 85;
- }
- for (i = 0; i <= 4; ++i) {
- *bufEnd++ = buf1[i];
- if (++lineLen == 65) {
- *bufEnd++ = '\n';
- lineLen = 0;
- }
- }
- }
- }
- return gTrue;
-}
-
-//------------------------------------------------------------------------
-// RunLengthEncoder
-//------------------------------------------------------------------------
-
-RunLengthEncoder::RunLengthEncoder(Stream *strA):
- FilterStream(strA) {
- bufPtr = bufEnd = nextEnd = buf;
- eof = gFalse;
-}
-
-RunLengthEncoder::~RunLengthEncoder() {
- if (str->isEncoder())
- delete str;
-}
-
-void RunLengthEncoder::reset() {
- str->reset();
- bufPtr = bufEnd = nextEnd = buf;
- eof = gFalse;
-}
-
-//
-// When fillBuf finishes, buf[] looks like this:
-// +-----+--------------+-----------------+--
-// + tag | ... data ... | next 0, 1, or 2 |
-// +-----+--------------+-----------------+--
-// ^ ^ ^
-// bufPtr bufEnd nextEnd
-//
-GBool RunLengthEncoder::fillBuf() {
- int c, c1, c2;
- int n;
-
- // already hit EOF?
- if (eof)
- return gFalse;
-
- // grab two bytes
- if (nextEnd < bufEnd + 1) {
- if ((c1 = str->getChar()) == EOF) {
- eof = gTrue;
- return gFalse;
- }
- } else {
- c1 = bufEnd[0] & 0xff;
- }
- if (nextEnd < bufEnd + 2) {
- if ((c2 = str->getChar()) == EOF) {
- eof = gTrue;
- buf[0] = 0;
- buf[1] = c1;
- bufPtr = buf;
- bufEnd = &buf[2];
- return gTrue;
- }
- } else {
- c2 = bufEnd[1] & 0xff;
- }
-
- // check for repeat
- c = 0; // make gcc happy
- if (c1 == c2) {
- n = 2;
- while (n < 128 && (c = str->getChar()) == c1)
- ++n;
- buf[0] = (char)(257 - n);
- buf[1] = c1;
- bufEnd = &buf[2];
- if (c == EOF) {
- eof = gTrue;
- } else if (n < 128) {
- buf[2] = c;
- nextEnd = &buf[3];
- } else {
- nextEnd = bufEnd;
- }
-
- // get up to 128 chars
- } else {
- buf[1] = c1;
- buf[2] = c2;
- n = 2;
- while (n < 128) {
- if ((c = str->getChar()) == EOF) {
- eof = gTrue;
- break;
- }
- ++n;
- buf[n] = c;
- if (buf[n] == buf[n-1])
- break;
- }
- if (buf[n] == buf[n-1]) {
- buf[0] = (char)(n-2-1);
- bufEnd = &buf[n-1];
- nextEnd = &buf[n+1];
- } else {
- buf[0] = (char)(n-1);
- bufEnd = nextEnd = &buf[n+1];
- }
- }
- bufPtr = buf;
- return gTrue;
-}
diff --git a/Build/source/libs/xpdf/xpdf/Stream.h b/Build/source/libs/xpdf/xpdf/Stream.h
deleted file mode 100644
index 18f06362fe7..00000000000
--- a/Build/source/libs/xpdf/xpdf/Stream.h
+++ /dev/null
@@ -1,913 +0,0 @@
-//========================================================================
-//
-// Stream.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: Stream.h 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r320 | oneiros | 2007-12-18 13:40:01 +0100 (Di, 18 Dez 2007) | 2 lines
-*
-* Import libpng 1.2.24 into stable
-*
-* ------------------------------------------------------------------------
-* r268 | oneiros | 2007-11-11 22:45:02 +0100 (So, 11 Nov 2007) | 3 lines
-*
-* Merge xpdf 3.02pl2
-* svn merge -r215:266 http://scm.foundry.supelec.fr/svn/pdftex/vendor/xpdf/current .
-*
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r48 | ms | 2005-12-04 13:00:00 +0100 (So, 04 Dez 2005) | 2 lines
-*
-* 1.30.5
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#ifndef STREAM_H
-#define STREAM_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include <stdio.h>
-#include "gtypes.h"
-#include "Object.h"
-
-class BaseStream;
-
-//------------------------------------------------------------------------
-
-enum StreamKind {
- strFile,
- strASCIIHex,
- strASCII85,
- strLZW,
- strRunLength,
- strCCITTFax,
- strDCT,
- strFlate,
- strJBIG2,
- strJPX,
- strCrypt,
- strWeird // internal-use stream types
-};
-
-enum StreamColorSpaceMode {
- streamCSNone,
- streamCSDeviceGray,
- streamCSDeviceRGB,
- streamCSDeviceCMYK
-};
-
-//------------------------------------------------------------------------
-
-// This is in Stream.h instead of Decrypt.h to avoid really annoying
-// include file dependency loops.
-enum CryptAlgorithm {
- cryptRC4,
- cryptAES
-};
-
-//------------------------------------------------------------------------
-// Stream (base class)
-//------------------------------------------------------------------------
-
-class Stream {
-public:
-
- // Constructor.
- Stream();
-
- // Destructor.
- virtual ~Stream();
-
- // Reference counting.
- int incRef() { return ++ref; }
- int decRef() { return --ref; }
-
- // Get kind of stream.
- virtual StreamKind getKind() = 0;
-
- // Reset stream to beginning.
- virtual void reset() = 0;
-
- // Close down the stream.
- virtual void close();
-
- // Get next char from stream.
- virtual int getChar() = 0;
-
- // Peek at next char in stream.
- virtual int lookChar() = 0;
-
- // Get next char from stream without using the predictor.
- // This is only used by StreamPredictor.
- virtual int getRawChar();
-
- // Get next line from stream.
- virtual char *getLine(char *buf, int size);
-
- // Get current position in file.
- virtual int getPos() = 0;
-
- // Go to a position in the stream. If <dir> is negative, the
- // position is from the end of the file; otherwise the position is
- // from the start of the file.
- virtual void setPos(Guint pos, int dir = 0) = 0;
-
- // Get PostScript command for the filter(s).
- virtual GString *getPSFilter(int psLevel, char *indent);
-
- // Does this stream type potentially contain non-printable chars?
- virtual GBool isBinary(GBool last = gTrue) = 0;
-
- // Get the BaseStream of this stream.
- virtual BaseStream *getBaseStream() = 0;
-
- // Get the stream after the last decoder (this may be a BaseStream
- // or a DecryptStream).
- virtual Stream *getUndecodedStream() = 0;
-
- // Get the dictionary associated with this stream.
- virtual Dict *getDict() = 0;
-
- // Is this an encoding filter?
- virtual GBool isEncoder() { return gFalse; }
-
- // Get image parameters which are defined by the stream contents.
- virtual void getImageParams(int *bitsPerComponent,
- StreamColorSpaceMode *csMode) {}
-
- // Return the next stream in the "stack".
- virtual Stream *getNextStream() { return NULL; }
-
- // Add filters to this stream according to the parameters in <dict>.
- // Returns the new stream.
- Stream *addFilters(Object *dict);
-
-private:
-
- Stream *makeFilter(char *name, Stream *str, Object *params);
-
- int ref; // reference count
-};
-
-//------------------------------------------------------------------------
-// BaseStream
-//
-// This is the base class for all streams that read directly from a file.
-//------------------------------------------------------------------------
-
-class BaseStream: public Stream {
-public:
-
- BaseStream(Object *dictA);
- virtual ~BaseStream();
- virtual Stream *makeSubStream(Guint start, GBool limited,
- Guint length, Object *dict) = 0;
- virtual void setPos(Guint pos, int dir = 0) = 0;
- virtual GBool isBinary(GBool last = gTrue) { return last; }
- virtual BaseStream *getBaseStream() { return this; }
- virtual Stream *getUndecodedStream() { return this; }
- virtual Dict *getDict() { return dict.getDict(); }
- virtual GString *getFileName() { return NULL; }
-
- // Get/set position of first byte of stream within the file.
- virtual Guint getStart() = 0;
- virtual void moveStart(int delta) = 0;
-
-private:
-
- Object dict;
-};
-
-//------------------------------------------------------------------------
-// FilterStream
-//
-// This is the base class for all streams that filter another stream.
-//------------------------------------------------------------------------
-
-class FilterStream: public Stream {
-public:
-
- FilterStream(Stream *strA);
- virtual ~FilterStream();
- virtual void close();
- virtual int getPos() { return str->getPos(); }
- virtual void setPos(Guint pos, int dir = 0);
- virtual BaseStream *getBaseStream() { return str->getBaseStream(); }
- virtual Stream *getUndecodedStream() { return str->getUndecodedStream(); }
- virtual Dict *getDict() { return str->getDict(); }
- virtual Stream *getNextStream() { return str; }
-
-protected:
-
- Stream *str;
-};
-
-//------------------------------------------------------------------------
-// ImageStream
-//------------------------------------------------------------------------
-
-class ImageStream {
-public:
-
- // Create an image stream object for an image with the specified
- // parameters. Note that these are the actual image parameters,
- // which may be different from the predictor parameters.
- ImageStream(Stream *strA, int widthA, int nCompsA, int nBitsA);
-
- ~ImageStream();
-
- // Reset the stream.
- void reset();
-
- // Gets the next pixel from the stream. <pix> should be able to hold
- // at least nComps elements. Returns false at end of file.
- GBool getPixel(Guchar *pix);
-
- // Returns a pointer to the next line of pixels. Returns NULL at
- // end of file.
- Guchar *getLine();
-
- // Skip an entire line from the image.
- void skipLine();
-
-private:
-
- Stream *str; // base stream
- int width; // pixels per line
- int nComps; // components per pixel
- int nBits; // bits per component
- int nVals; // components per line
- Guchar *imgLine; // line buffer
- int imgIdx; // current index in imgLine
-};
-
-//------------------------------------------------------------------------
-// StreamPredictor
-//------------------------------------------------------------------------
-
-class StreamPredictor {
-public:
-
- // Create a predictor object. Note that the parameters are for the
- // predictor, and may not match the actual image parameters.
- StreamPredictor(Stream *strA, int predictorA,
- int widthA, int nCompsA, int nBitsA);
-
- ~StreamPredictor();
-
- GBool isOk() { return ok; }
-
- int lookChar();
- int getChar();
-
-private:
-
- GBool getNextLine();
-
- Stream *str; // base stream
- int predictor; // predictor
- int width; // pixels per line
- int nComps; // components per pixel
- int nBits; // bits per component
- int nVals; // components per line
- int pixBytes; // bytes per pixel
- int rowBytes; // bytes per line
- Guchar *predLine; // line buffer
- int predIdx; // current index in predLine
- GBool ok;
-};
-
-//------------------------------------------------------------------------
-// FileStream
-//------------------------------------------------------------------------
-
-#define fileStreamBufSize 256
-
-class FileStream: public BaseStream {
-public:
-
- FileStream(FILE *fA, Guint startA, GBool limitedA,
- Guint lengthA, Object *dictA);
- virtual ~FileStream();
- virtual Stream *makeSubStream(Guint startA, GBool limitedA,
- Guint lengthA, Object *dictA);
- virtual StreamKind getKind() { return strFile; }
- virtual void reset();
- virtual void close();
- virtual int getChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }
- virtual int lookChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }
- virtual int getPos() { return bufPos + (bufPtr - buf); }
- virtual void setPos(Guint pos, int dir = 0);
- virtual Guint getStart() { return start; }
- virtual void moveStart(int delta);
-
-private:
-
- GBool fillBuf();
-
- FILE *f;
- Guint start;
- GBool limited;
- Guint length;
- char buf[fileStreamBufSize];
- char *bufPtr;
- char *bufEnd;
- Guint bufPos;
- int savePos;
- GBool saved;
-};
-
-//------------------------------------------------------------------------
-// MemStream
-//------------------------------------------------------------------------
-
-class MemStream: public BaseStream {
-public:
-
- MemStream(char *bufA, Guint startA, Guint lengthA, Object *dictA);
- virtual ~MemStream();
- virtual Stream *makeSubStream(Guint start, GBool limited,
- Guint lengthA, Object *dictA);
- virtual StreamKind getKind() { return strWeird; }
- virtual void reset();
- virtual void close();
- virtual int getChar()
- { return (bufPtr < bufEnd) ? (*bufPtr++ & 0xff) : EOF; }
- virtual int lookChar()
- { return (bufPtr < bufEnd) ? (*bufPtr & 0xff) : EOF; }
- virtual int getPos() { return (int)(bufPtr - buf); }
- virtual void setPos(Guint pos, int dir = 0);
- virtual Guint getStart() { return start; }
- virtual void moveStart(int delta);
-
-private:
-
- char *buf;
- Guint start;
- Guint length;
- char *bufEnd;
- char *bufPtr;
- GBool needFree;
-};
-
-//------------------------------------------------------------------------
-// EmbedStream
-//
-// This is a special stream type used for embedded streams (inline
-// images). It reads directly from the base stream -- after the
-// EmbedStream is deleted, reads from the base stream will proceed where
-// the BaseStream left off. Note that this is very different behavior
-// that creating a new FileStream (using makeSubStream).
-//------------------------------------------------------------------------
-
-class EmbedStream: public BaseStream {
-public:
-
- EmbedStream(Stream *strA, Object *dictA, GBool limitedA, Guint lengthA);
- virtual ~EmbedStream();
- virtual Stream *makeSubStream(Guint start, GBool limitedA,
- Guint lengthA, Object *dictA);
- virtual StreamKind getKind() { return str->getKind(); }
- virtual void reset() {}
- virtual int getChar();
- virtual int lookChar();
- virtual int getPos() { return str->getPos(); }
- virtual void setPos(Guint pos, int dir = 0);
- virtual Guint getStart();
- virtual void moveStart(int delta);
-
-private:
-
- Stream *str;
- GBool limited;
- Guint length;
-};
-
-//------------------------------------------------------------------------
-// ASCIIHexStream
-//------------------------------------------------------------------------
-
-class ASCIIHexStream: public FilterStream {
-public:
-
- ASCIIHexStream(Stream *strA);
- virtual ~ASCIIHexStream();
- virtual StreamKind getKind() { return strASCIIHex; }
- virtual void reset();
- virtual int getChar()
- { int c = lookChar(); buf = EOF; return c; }
- virtual int lookChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
-
-private:
-
- int buf;
- GBool eof;
-};
-
-//------------------------------------------------------------------------
-// ASCII85Stream
-//------------------------------------------------------------------------
-
-class ASCII85Stream: public FilterStream {
-public:
-
- ASCII85Stream(Stream *strA);
- virtual ~ASCII85Stream();
- virtual StreamKind getKind() { return strASCII85; }
- virtual void reset();
- virtual int getChar()
- { int ch = lookChar(); ++index; return ch; }
- virtual int lookChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
-
-private:
-
- int c[5];
- int b[4];
- int index, n;
- GBool eof;
-};
-
-//------------------------------------------------------------------------
-// LZWStream
-//------------------------------------------------------------------------
-
-class LZWStream: public FilterStream {
-public:
-
- LZWStream(Stream *strA, int predictor, int columns, int colors,
- int bits, int earlyA);
- virtual ~LZWStream();
- virtual StreamKind getKind() { return strLZW; }
- virtual void reset();
- virtual int getChar();
- virtual int lookChar();
- virtual int getRawChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
-
-private:
-
- StreamPredictor *pred; // predictor
- int early; // early parameter
- GBool eof; // true if at eof
- int inputBuf; // input buffer
- int inputBits; // number of bits in input buffer
- struct { // decoding table
- int length;
- int head;
- Guchar tail;
- } table[4097];
- int nextCode; // next code to be used
- int nextBits; // number of bits in next code word
- int prevCode; // previous code used in stream
- int newChar; // next char to be added to table
- Guchar seqBuf[4097]; // buffer for current sequence
- int seqLength; // length of current sequence
- int seqIndex; // index into current sequence
- GBool first; // first code after a table clear
-
- GBool processNextCode();
- void clearTable();
- int getCode();
-};
-
-//------------------------------------------------------------------------
-// RunLengthStream
-//------------------------------------------------------------------------
-
-class RunLengthStream: public FilterStream {
-public:
-
- RunLengthStream(Stream *strA);
- virtual ~RunLengthStream();
- virtual StreamKind getKind() { return strRunLength; }
- virtual void reset();
- virtual int getChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }
- virtual int lookChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
-
-private:
-
- char buf[128]; // buffer
- char *bufPtr; // next char to read
- char *bufEnd; // end of buffer
- GBool eof;
-
- GBool fillBuf();
-};
-
-//------------------------------------------------------------------------
-// CCITTFaxStream
-//------------------------------------------------------------------------
-
-struct CCITTCodeTable;
-
-class CCITTFaxStream: public FilterStream {
-public:
-
- CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA,
- GBool byteAlignA, int columnsA, int rowsA,
- GBool endOfBlockA, GBool blackA);
- virtual ~CCITTFaxStream();
- virtual StreamKind getKind() { return strCCITTFax; }
- virtual void reset();
- virtual int getChar()
- { int c = lookChar(); buf = EOF; return c; }
- virtual int lookChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
-
-private:
-
- int encoding; // 'K' parameter
- GBool endOfLine; // 'EndOfLine' parameter
- GBool byteAlign; // 'EncodedByteAlign' parameter
- int columns; // 'Columns' parameter
- int rows; // 'Rows' parameter
- GBool endOfBlock; // 'EndOfBlock' parameter
- GBool black; // 'BlackIs1' parameter
- GBool eof; // true if at eof
- GBool nextLine2D; // true if next line uses 2D encoding
- int row; // current row
- int inputBuf; // input buffer
- int inputBits; // number of bits in input buffer
- int *codingLine; // coding line changing elements
- int *refLine; // reference line changing elements
- int a0i; // index into codingLine
- GBool err; // error on current line
- int outputBits; // remaining ouput bits
- int buf; // character buffer
-
- void addPixels(int a1, int black);
- void addPixelsNeg(int a1, int black);
- short getTwoDimCode();
- short getWhiteCode();
- short getBlackCode();
- short lookBits(int n);
- void eatBits(int n) { if ((inputBits -= n) < 0) inputBits = 0; }
-};
-
-//------------------------------------------------------------------------
-// DCTStream
-//------------------------------------------------------------------------
-
-// DCT component info
-struct DCTCompInfo {
- int id; // component ID
- int hSample, vSample; // horiz/vert sampling resolutions
- int quantTable; // quantization table number
- int prevDC; // DC coefficient accumulator
-};
-
-struct DCTScanInfo {
- GBool comp[4]; // comp[i] is set if component i is
- // included in this scan
- int numComps; // number of components in the scan
- int dcHuffTable[4]; // DC Huffman table numbers
- int acHuffTable[4]; // AC Huffman table numbers
- int firstCoeff, lastCoeff; // first and last DCT coefficient
- int ah, al; // successive approximation parameters
-};
-
-// DCT Huffman decoding table
-struct DCTHuffTable {
- Guchar firstSym[17]; // first symbol for this bit length
- Gushort firstCode[17]; // first code for this bit length
- Gushort numCodes[17]; // number of codes of this bit length
- Guchar sym[256]; // symbols
-};
-
-class DCTStream: public FilterStream {
-public:
-
- DCTStream(Stream *strA, int colorXformA);
- virtual ~DCTStream();
- virtual StreamKind getKind() { return strDCT; }
- virtual void reset();
- virtual void close();
- virtual int getChar();
- virtual int lookChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
- Stream *getRawStream() { return str; }
-
-private:
-
- GBool progressive; // set if in progressive mode
- GBool interleaved; // set if in interleaved mode
- int width, height; // image size
- int mcuWidth, mcuHeight; // size of min coding unit, in data units
- int bufWidth, bufHeight; // frameBuf size
- DCTCompInfo compInfo[4]; // info for each component
- DCTScanInfo scanInfo; // info for the current scan
- int numComps; // number of components in image
- int colorXform; // color transform: -1 = unspecified
- // 0 = none
- // 1 = YUV/YUVK -> RGB/CMYK
- GBool gotJFIFMarker; // set if APP0 JFIF marker was present
- GBool gotAdobeMarker; // set if APP14 Adobe marker was present
- int restartInterval; // restart interval, in MCUs
- Gushort quantTables[4][64]; // quantization tables
- int numQuantTables; // number of quantization tables
- DCTHuffTable dcHuffTables[4]; // DC Huffman tables
- DCTHuffTable acHuffTables[4]; // AC Huffman tables
- int numDCHuffTables; // number of DC Huffman tables
- int numACHuffTables; // number of AC Huffman tables
- Guchar *rowBuf[4][32]; // buffer for one MCU (non-progressive mode)
- int *frameBuf[4]; // buffer for frame (progressive mode)
- int comp, x, y, dy; // current position within image/MCU
- int restartCtr; // MCUs left until restart
- int restartMarker; // next restart marker
- int eobRun; // number of EOBs left in the current run
- int inputBuf; // input buffer for variable length codes
- int inputBits; // number of valid bits in input buffer
-
- void restart();
- GBool readMCURow();
- void readScan();
- GBool readDataUnit(DCTHuffTable *dcHuffTable,
- DCTHuffTable *acHuffTable,
- int *prevDC, int data[64]);
- GBool readProgressiveDataUnit(DCTHuffTable *dcHuffTable,
- DCTHuffTable *acHuffTable,
- int *prevDC, int data[64]);
- void decodeImage();
- void transformDataUnit(Gushort *quantTable,
- int dataIn[64], Guchar dataOut[64]);
- int readHuffSym(DCTHuffTable *table);
- int readAmp(int size);
- int readBit();
- GBool readHeader();
- GBool readBaselineSOF();
- GBool readProgressiveSOF();
- GBool readScanInfo();
- GBool readQuantTables();
- GBool readHuffmanTables();
- GBool readRestartInterval();
- GBool readJFIFMarker();
- GBool readAdobeMarker();
- GBool readTrailer();
- int readMarker();
- int read16();
-};
-
-//------------------------------------------------------------------------
-// FlateStream
-//------------------------------------------------------------------------
-
-#define flateWindow 32768 // buffer size
-#define flateMask (flateWindow-1)
-#define flateMaxHuffman 15 // max Huffman code length
-#define flateMaxCodeLenCodes 19 // max # code length codes
-#define flateMaxLitCodes 288 // max # literal codes
-#define flateMaxDistCodes 30 // max # distance codes
-
-// Huffman code table entry
-struct FlateCode {
- Gushort len; // code length, in bits
- Gushort val; // value represented by this code
-};
-
-struct FlateHuffmanTab {
- FlateCode *codes;
- int maxLen;
-};
-
-// Decoding info for length and distance code words
-struct FlateDecode {
- int bits; // # extra bits
- int first; // first length/distance
-};
-
-class FlateStream: public FilterStream {
-public:
-
- FlateStream(Stream *strA, int predictor, int columns,
- int colors, int bits);
- virtual ~FlateStream();
- virtual StreamKind getKind() { return strFlate; }
- virtual void reset();
- virtual int getChar();
- virtual int lookChar();
- virtual int getRawChar();
- virtual GString *getPSFilter(int psLevel, char *indent);
- virtual GBool isBinary(GBool last = gTrue);
-
-private:
-
- StreamPredictor *pred; // predictor
- Guchar buf[flateWindow]; // output data buffer
- int index; // current index into output buffer
- int remain; // number valid bytes in output buffer
- int codeBuf; // input buffer
- int codeSize; // number of bits in input buffer
- int // literal and distance code lengths
- codeLengths[flateMaxLitCodes + flateMaxDistCodes];
- FlateHuffmanTab litCodeTab; // literal code table
- FlateHuffmanTab distCodeTab; // distance code table
- GBool compressedBlock; // set if reading a compressed block
- int blockLen; // remaining length of uncompressed block
- GBool endOfBlock; // set when end of block is reached
- GBool eof; // set when end of stream is reached
-
- static int // code length code reordering
- codeLenCodeMap[flateMaxCodeLenCodes];
- static FlateDecode // length decoding info
- lengthDecode[flateMaxLitCodes-257];
- static FlateDecode // distance decoding info
- distDecode[flateMaxDistCodes];
- static FlateHuffmanTab // fixed literal code table
- fixedLitCodeTab;
- static FlateHuffmanTab // fixed distance code table
- fixedDistCodeTab;
-
- void readSome();
- GBool startBlock();
- void loadFixedCodes();
- GBool readDynamicCodes();
- void compHuffmanCodes(int *lengths, int n, FlateHuffmanTab *tab);
- int getHuffmanCodeWord(FlateHuffmanTab *tab);
- int getCodeWord(int bits);
-};
-
-//------------------------------------------------------------------------
-// EOFStream
-//------------------------------------------------------------------------
-
-class EOFStream: public FilterStream {
-public:
-
- EOFStream(Stream *strA);
- virtual ~EOFStream();
- virtual StreamKind getKind() { return strWeird; }
- virtual void reset() {}
- virtual int getChar() { return EOF; }
- virtual int lookChar() { return EOF; }
- virtual GString *getPSFilter(int psLevel, char *indent) { return NULL; }
- virtual GBool isBinary(GBool last = gTrue) { return gFalse; }
-};
-
-//------------------------------------------------------------------------
-// FixedLengthEncoder
-//------------------------------------------------------------------------
-
-class FixedLengthEncoder: public FilterStream {
-public:
-
- FixedLengthEncoder(Stream *strA, int lengthA);
- ~FixedLengthEncoder();
- virtual StreamKind getKind() { return strWeird; }
- virtual void reset();
- virtual int getChar();
- virtual int lookChar();
- virtual GString *getPSFilter(int psLevel, char *indent) { return NULL; }
- virtual GBool isBinary(GBool last = gTrue);
- virtual GBool isEncoder() { return gTrue; }
-
-private:
-
- int length;
- int count;
-};
-
-//------------------------------------------------------------------------
-// ASCIIHexEncoder
-//------------------------------------------------------------------------
-
-class ASCIIHexEncoder: public FilterStream {
-public:
-
- ASCIIHexEncoder(Stream *strA);
- virtual ~ASCIIHexEncoder();
- virtual StreamKind getKind() { return strWeird; }
- virtual void reset();
- virtual int getChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }
- virtual int lookChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }
- virtual GString *getPSFilter(int psLevel, char *indent) { return NULL; }
- virtual GBool isBinary(GBool last = gTrue) { return gFalse; }
- virtual GBool isEncoder() { return gTrue; }
-
-private:
-
- char buf[4];
- char *bufPtr;
- char *bufEnd;
- int lineLen;
- GBool eof;
-
- GBool fillBuf();
-};
-
-//------------------------------------------------------------------------
-// ASCII85Encoder
-//------------------------------------------------------------------------
-
-class ASCII85Encoder: public FilterStream {
-public:
-
- ASCII85Encoder(Stream *strA);
- virtual ~ASCII85Encoder();
- virtual StreamKind getKind() { return strWeird; }
- virtual void reset();
- virtual int getChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }
- virtual int lookChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }
- virtual GString *getPSFilter(int psLevel, char *indent) { return NULL; }
- virtual GBool isBinary(GBool last = gTrue) { return gFalse; }
- virtual GBool isEncoder() { return gTrue; }
-
-private:
-
- char buf[8];
- char *bufPtr;
- char *bufEnd;
- int lineLen;
- GBool eof;
-
- GBool fillBuf();
-};
-
-//------------------------------------------------------------------------
-// RunLengthEncoder
-//------------------------------------------------------------------------
-
-class RunLengthEncoder: public FilterStream {
-public:
-
- RunLengthEncoder(Stream *strA);
- virtual ~RunLengthEncoder();
- virtual StreamKind getKind() { return strWeird; }
- virtual void reset();
- virtual int getChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }
- virtual int lookChar()
- { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }
- virtual GString *getPSFilter(int psLevel, char *indent) { return NULL; }
- virtual GBool isBinary(GBool last = gTrue) { return gTrue; }
- virtual GBool isEncoder() { return gTrue; }
-
-private:
-
- char buf[131];
- char *bufPtr;
- char *bufEnd;
- char *nextEnd;
- GBool eof;
-
- GBool fillBuf();
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/UTF8.h b/Build/source/libs/xpdf/xpdf/UTF8.h
deleted file mode 100644
index 8536dbf9436..00000000000
--- a/Build/source/libs/xpdf/xpdf/UTF8.h
+++ /dev/null
@@ -1,56 +0,0 @@
-//========================================================================
-//
-// UTF8.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-static int mapUTF8(Unicode u, char *buf, int bufSize) {
- if (u <= 0x0000007f) {
- if (bufSize < 1) {
- return 0;
- }
- buf[0] = (char)u;
- return 1;
- } else if (u <= 0x000007ff) {
- if (bufSize < 2) {
- return 0;
- }
- buf[0] = (char)(0xc0 + (u >> 6));
- buf[1] = (char)(0x80 + (u & 0x3f));
- return 2;
- } else if (u <= 0x0000ffff) {
- if (bufSize < 3) {
- return 0;
- }
- buf[0] = (char)(0xe0 + (u >> 12));
- buf[1] = (char)(0x80 + ((u >> 6) & 0x3f));
- buf[2] = (char)(0x80 + (u & 0x3f));
- return 3;
- } else if (u <= 0x0010ffff) {
- if (bufSize < 4) {
- return 0;
- }
- buf[0] = (char)(0xf0 + (u >> 18));
- buf[1] = (char)(0x80 + ((u >> 12) & 0x3f));
- buf[2] = (char)(0x80 + ((u >> 6) & 0x3f));
- buf[3] = (char)(0x80 + (u & 0x3f));
- return 4;
- } else {
- return 0;
- }
-}
-
-static int mapUCS2(Unicode u, char *buf, int bufSize) {
- if (u <= 0xffff) {
- if (bufSize < 2) {
- return 0;
- }
- buf[0] = (char)((u >> 8) & 0xff);
- buf[1] = (char)(u & 0xff);
- return 2;
- } else {
- return 0;
- }
-}
diff --git a/Build/source/libs/xpdf/xpdf/UnicodeMap.cc b/Build/source/libs/xpdf/xpdf/UnicodeMap.cc
deleted file mode 100644
index 2b8cb1f7a3a..00000000000
--- a/Build/source/libs/xpdf/xpdf/UnicodeMap.cc
+++ /dev/null
@@ -1,293 +0,0 @@
-//========================================================================
-//
-// UnicodeMap.cc
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include "gmem.h"
-#include "gfile.h"
-#include "GString.h"
-#include "GList.h"
-#include "Error.h"
-#include "GlobalParams.h"
-#include "UnicodeMap.h"
-
-//------------------------------------------------------------------------
-
-#define maxExtCode 16
-
-struct UnicodeMapExt {
- Unicode u; // Unicode char
- char code[maxExtCode];
- Guint nBytes;
-};
-
-//------------------------------------------------------------------------
-
-UnicodeMap *UnicodeMap::parse(GString *encodingNameA) {
- FILE *f;
- UnicodeMap *map;
- UnicodeMapRange *range;
- UnicodeMapExt *eMap;
- int size, eMapsSize;
- char buf[256];
- int line, nBytes, i, x;
- char *tok1, *tok2, *tok3;
-
- if (!(f = globalParams->getUnicodeMapFile(encodingNameA))) {
- error(-1, "Couldn't find unicodeMap file for the '%s' encoding",
- encodingNameA->getCString());
- return NULL;
- }
-
- map = new UnicodeMap(encodingNameA->copy());
-
- size = 8;
- map->ranges = (UnicodeMapRange *)gmallocn(size, sizeof(UnicodeMapRange));
- eMapsSize = 0;
-
- line = 1;
- while (getLine(buf, sizeof(buf), f)) {
- if ((tok1 = strtok(buf, " \t\r\n")) &&
- (tok2 = strtok(NULL, " \t\r\n"))) {
- if (!(tok3 = strtok(NULL, " \t\r\n"))) {
- tok3 = tok2;
- tok2 = tok1;
- }
- nBytes = strlen(tok3) / 2;
- if (nBytes <= 4) {
- if (map->len == size) {
- size *= 2;
- map->ranges = (UnicodeMapRange *)
- greallocn(map->ranges, size, sizeof(UnicodeMapRange));
- }
- range = &map->ranges[map->len];
- sscanf(tok1, "%x", &range->start);
- sscanf(tok2, "%x", &range->end);
- sscanf(tok3, "%x", &range->code);
- range->nBytes = nBytes;
- ++map->len;
- } else if (tok2 == tok1) {
- if (map->eMapsLen == eMapsSize) {
- eMapsSize += 16;
- map->eMaps = (UnicodeMapExt *)
- greallocn(map->eMaps, eMapsSize, sizeof(UnicodeMapExt));
- }
- eMap = &map->eMaps[map->eMapsLen];
- sscanf(tok1, "%x", &eMap->u);
- for (i = 0; i < nBytes; ++i) {
- sscanf(tok3 + i*2, "%2x", &x);
- eMap->code[i] = (char)x;
- }
- eMap->nBytes = nBytes;
- ++map->eMapsLen;
- } else {
- error(-1, "Bad line (%d) in unicodeMap file for the '%s' encoding",
- line, encodingNameA->getCString());
- }
- } else {
- error(-1, "Bad line (%d) in unicodeMap file for the '%s' encoding",
- line, encodingNameA->getCString());
- }
- ++line;
- }
-
- fclose(f);
-
- return map;
-}
-
-UnicodeMap::UnicodeMap(GString *encodingNameA) {
- encodingName = encodingNameA;
- unicodeOut = gFalse;
- kind = unicodeMapUser;
- ranges = NULL;
- len = 0;
- eMaps = NULL;
- eMapsLen = 0;
- refCnt = 1;
-#if MULTITHREADED
- gInitMutex(&mutex);
-#endif
-}
-
-UnicodeMap::UnicodeMap(char *encodingNameA, GBool unicodeOutA,
- UnicodeMapRange *rangesA, int lenA) {
- encodingName = new GString(encodingNameA);
- unicodeOut = unicodeOutA;
- kind = unicodeMapResident;
- ranges = rangesA;
- len = lenA;
- eMaps = NULL;
- eMapsLen = 0;
- refCnt = 1;
-#if MULTITHREADED
- gInitMutex(&mutex);
-#endif
-}
-
-UnicodeMap::UnicodeMap(char *encodingNameA, GBool unicodeOutA,
- UnicodeMapFunc funcA) {
- encodingName = new GString(encodingNameA);
- unicodeOut = unicodeOutA;
- kind = unicodeMapFunc;
- func = funcA;
- eMaps = NULL;
- eMapsLen = 0;
- refCnt = 1;
-#if MULTITHREADED
- gInitMutex(&mutex);
-#endif
-}
-
-UnicodeMap::~UnicodeMap() {
- delete encodingName;
- if (kind == unicodeMapUser && ranges) {
- gfree(ranges);
- }
- if (eMaps) {
- gfree(eMaps);
- }
-#if MULTITHREADED
- gDestroyMutex(&mutex);
-#endif
-}
-
-void UnicodeMap::incRefCnt() {
-#if MULTITHREADED
- gLockMutex(&mutex);
-#endif
- ++refCnt;
-#if MULTITHREADED
- gUnlockMutex(&mutex);
-#endif
-}
-
-void UnicodeMap::decRefCnt() {
- GBool done;
-
-#if MULTITHREADED
- gLockMutex(&mutex);
-#endif
- done = --refCnt == 0;
-#if MULTITHREADED
- gUnlockMutex(&mutex);
-#endif
- if (done) {
- delete this;
- }
-}
-
-GBool UnicodeMap::match(GString *encodingNameA) {
- return !encodingName->cmp(encodingNameA);
-}
-
-int UnicodeMap::mapUnicode(Unicode u, char *buf, int bufSize) {
- int a, b, m, n, i, j;
- Guint code;
-
- if (kind == unicodeMapFunc) {
- return (*func)(u, buf, bufSize);
- }
-
- a = 0;
- b = len;
- if (u >= ranges[a].start) {
- // invariant: ranges[a].start <= u < ranges[b].start
- while (b - a > 1) {
- m = (a + b) / 2;
- if (u >= ranges[m].start) {
- a = m;
- } else if (u < ranges[m].start) {
- b = m;
- }
- }
- if (u <= ranges[a].end) {
- n = ranges[a].nBytes;
- if (n > bufSize) {
- return 0;
- }
- code = ranges[a].code + (u - ranges[a].start);
- for (i = n - 1; i >= 0; --i) {
- buf[i] = (char)(code & 0xff);
- code >>= 8;
- }
- return n;
- }
- }
-
- for (i = 0; i < eMapsLen; ++i) {
- if (eMaps[i].u == u) {
- n = eMaps[i].nBytes;
- for (j = 0; j < n; ++j) {
- buf[j] = eMaps[i].code[j];
- }
- return n;
- }
- }
-
- return 0;
-}
-
-//------------------------------------------------------------------------
-
-UnicodeMapCache::UnicodeMapCache() {
- int i;
-
- for (i = 0; i < unicodeMapCacheSize; ++i) {
- cache[i] = NULL;
- }
-}
-
-UnicodeMapCache::~UnicodeMapCache() {
- int i;
-
- for (i = 0; i < unicodeMapCacheSize; ++i) {
- if (cache[i]) {
- cache[i]->decRefCnt();
- }
- }
-}
-
-UnicodeMap *UnicodeMapCache::getUnicodeMap(GString *encodingName) {
- UnicodeMap *map;
- int i, j;
-
- if (cache[0] && cache[0]->match(encodingName)) {
- cache[0]->incRefCnt();
- return cache[0];
- }
- for (i = 1; i < unicodeMapCacheSize; ++i) {
- if (cache[i] && cache[i]->match(encodingName)) {
- map = cache[i];
- for (j = i; j >= 1; --j) {
- cache[j] = cache[j - 1];
- }
- cache[0] = map;
- map->incRefCnt();
- return map;
- }
- }
- if ((map = UnicodeMap::parse(encodingName))) {
- if (cache[unicodeMapCacheSize - 1]) {
- cache[unicodeMapCacheSize - 1]->decRefCnt();
- }
- for (j = unicodeMapCacheSize - 1; j >= 1; --j) {
- cache[j] = cache[j - 1];
- }
- cache[0] = map;
- map->incRefCnt();
- return map;
- }
- return NULL;
-}
diff --git a/Build/source/libs/xpdf/xpdf/UnicodeMap.h b/Build/source/libs/xpdf/xpdf/UnicodeMap.h
deleted file mode 100644
index 0f86101e06c..00000000000
--- a/Build/source/libs/xpdf/xpdf/UnicodeMap.h
+++ /dev/null
@@ -1,123 +0,0 @@
-//========================================================================
-//
-// UnicodeMap.h
-//
-// Mapping from Unicode to an encoding.
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#ifndef UNICODEMAP_H
-#define UNICODEMAP_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "CharTypes.h"
-
-#if MULTITHREADED
-#include "GMutex.h"
-#endif
-
-class GString;
-
-//------------------------------------------------------------------------
-
-enum UnicodeMapKind {
- unicodeMapUser, // read from a file
- unicodeMapResident, // static list of ranges
- unicodeMapFunc // function pointer
-};
-
-typedef int (*UnicodeMapFunc)(Unicode u, char *buf, int bufSize);
-
-struct UnicodeMapRange {
- Unicode start, end; // range of Unicode chars
- Guint code, nBytes; // first output code
-};
-
-struct UnicodeMapExt;
-
-//------------------------------------------------------------------------
-
-class UnicodeMap {
-public:
-
- // Create the UnicodeMap specified by <encodingName>. Sets the
- // initial reference count to 1. Returns NULL on failure.
- static UnicodeMap *parse(GString *encodingNameA);
-
- // Create a resident UnicodeMap.
- UnicodeMap(char *encodingNameA, GBool unicodeOutA,
- UnicodeMapRange *rangesA, int lenA);
-
- // Create a resident UnicodeMap that uses a function instead of a
- // list of ranges.
- UnicodeMap(char *encodingNameA, GBool unicodeOutA,
- UnicodeMapFunc funcA);
-
- ~UnicodeMap();
-
- void incRefCnt();
- void decRefCnt();
-
- GString *getEncodingName() { return encodingName; }
-
- GBool isUnicode() { return unicodeOut; }
-
- // Return true if this UnicodeMap matches the specified
- // <encodingNameA>.
- GBool match(GString *encodingNameA);
-
- // Map Unicode to the target encoding. Fills in <buf> with the
- // output and returns the number of bytes used. Output will be
- // truncated at <bufSize> bytes. No string terminator is written.
- // Returns 0 if no mapping is found.
- int mapUnicode(Unicode u, char *buf, int bufSize);
-
-private:
-
- UnicodeMap(GString *encodingNameA);
-
- GString *encodingName;
- UnicodeMapKind kind;
- GBool unicodeOut;
- union {
- UnicodeMapRange *ranges; // (user, resident)
- UnicodeMapFunc func; // (func)
- };
- int len; // (user, resident)
- UnicodeMapExt *eMaps; // (user)
- int eMapsLen; // (user)
- int refCnt;
-#if MULTITHREADED
- GMutex mutex;
-#endif
-};
-
-//------------------------------------------------------------------------
-
-#define unicodeMapCacheSize 4
-
-class UnicodeMapCache {
-public:
-
- UnicodeMapCache();
- ~UnicodeMapCache();
-
- // Get the UnicodeMap for <encodingName>. Increments its reference
- // count; there will be one reference for the cache plus one for the
- // caller of this function. Returns NULL on failure.
- UnicodeMap *getUnicodeMap(GString *encodingName);
-
-private:
-
- UnicodeMap *cache[unicodeMapCacheSize];
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/UnicodeMapTables.h b/Build/source/libs/xpdf/xpdf/UnicodeMapTables.h
deleted file mode 100644
index 9c510346164..00000000000
--- a/Build/source/libs/xpdf/xpdf/UnicodeMapTables.h
+++ /dev/null
@@ -1,361 +0,0 @@
-//========================================================================
-//
-// UnicodeMapTables.h
-//
-// Copyright 2001-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-static UnicodeMapRange latin1UnicodeMapRanges[] = {
- { 0x000a, 0x000a, 0x0a, 1 },
- { 0x000c, 0x000d, 0x0c, 1 },
- { 0x0020, 0x007e, 0x20, 1 },
- { 0x00a0, 0x00a0, 0x20, 1 },
- { 0x00a1, 0x00ac, 0xa1, 1 },
- { 0x00ae, 0x00ff, 0xae, 1 },
- { 0x010c, 0x010c, 0x43, 1 },
- { 0x010d, 0x010d, 0x63, 1 },
- { 0x0131, 0x0131, 0x69, 1 },
- { 0x0141, 0x0141, 0x4c, 1 },
- { 0x0142, 0x0142, 0x6c, 1 },
- { 0x0152, 0x0152, 0x4f45, 2 },
- { 0x0153, 0x0153, 0x6f65, 2 },
- { 0x0160, 0x0160, 0x53, 1 },
- { 0x0161, 0x0161, 0x73, 1 },
- { 0x0178, 0x0178, 0x59, 1 },
- { 0x017d, 0x017d, 0x5a, 1 },
- { 0x017e, 0x017e, 0x7a, 1 },
- { 0x02c6, 0x02c6, 0x5e, 1 },
- { 0x02da, 0x02da, 0xb0, 1 },
- { 0x02dc, 0x02dc, 0x7e, 1 },
- { 0x2013, 0x2013, 0xad, 1 },
- { 0x2014, 0x2014, 0x2d2d, 2 },
- { 0x2018, 0x2018, 0x60, 1 },
- { 0x2019, 0x2019, 0x27, 1 },
- { 0x201a, 0x201a, 0x2c, 1 },
- { 0x201c, 0x201c, 0x22, 1 },
- { 0x201d, 0x201d, 0x22, 1 },
- { 0x201e, 0x201e, 0x2c2c, 2 },
- { 0x2022, 0x2022, 0xb7, 1 },
- { 0x2026, 0x2026, 0x2e2e2e, 3 },
- { 0x2039, 0x2039, 0x3c, 1 },
- { 0x203a, 0x203a, 0x3e, 1 },
- { 0x2044, 0x2044, 0x2f, 1 },
- { 0x2122, 0x2122, 0x544d, 2 },
- { 0x2212, 0x2212, 0x2d, 1 },
- { 0xf6f9, 0xf6f9, 0x4c, 1 },
- { 0xf6fa, 0xf6fa, 0x4f45, 2 },
- { 0xf6fc, 0xf6fc, 0xb0, 1 },
- { 0xf6fd, 0xf6fd, 0x53, 1 },
- { 0xf6fe, 0xf6fe, 0x7e, 1 },
- { 0xf6ff, 0xf6ff, 0x5a, 1 },
- { 0xf721, 0xf721, 0x21, 1 },
- { 0xf724, 0xf724, 0x24, 1 },
- { 0xf726, 0xf726, 0x26, 1 },
- { 0xf730, 0xf739, 0x30, 1 },
- { 0xf73f, 0xf73f, 0x3f, 1 },
- { 0xf761, 0xf77a, 0x41, 1 },
- { 0xf7a1, 0xf7a2, 0xa1, 1 },
- { 0xf7bf, 0xf7bf, 0xbf, 1 },
- { 0xf7e0, 0xf7f6, 0xc0, 1 },
- { 0xf7f8, 0xf7fe, 0xd8, 1 },
- { 0xf7ff, 0xf7ff, 0x59, 1 },
- { 0xfb00, 0xfb00, 0x6666, 2 },
- { 0xfb01, 0xfb01, 0x6669, 2 },
- { 0xfb02, 0xfb02, 0x666c, 2 },
- { 0xfb03, 0xfb03, 0x666669, 3 },
- { 0xfb04, 0xfb04, 0x66666c, 3 }
-};
-#define latin1UnicodeMapLen (sizeof(latin1UnicodeMapRanges) / sizeof(UnicodeMapRange))
-
-static UnicodeMapRange ascii7UnicodeMapRanges[] = {
- { 0x000a, 0x000a, 0x0a, 1 },
- { 0x000c, 0x000d, 0x0c, 1 },
- { 0x0020, 0x005f, 0x20, 1 },
- { 0x0061, 0x007e, 0x61, 1 },
- { 0x00a6, 0x00a6, 0x7c, 1 },
- { 0x00a9, 0x00a9, 0x286329, 3 },
- { 0x00ae, 0x00ae, 0x285229, 3 },
- { 0x00b7, 0x00b7, 0x2a, 1 },
- { 0x00bc, 0x00bc, 0x312f34, 3 },
- { 0x00bd, 0x00bd, 0x312f32, 3 },
- { 0x00be, 0x00be, 0x332f34, 3 },
- { 0x00c0, 0x00c0, 0x41, 1 },
- { 0x00c1, 0x00c1, 0x41, 1 },
- { 0x00c2, 0x00c2, 0x41, 1 },
- { 0x00c3, 0x00c3, 0x41, 1 },
- { 0x00c4, 0x00c4, 0x41, 1 },
- { 0x00c5, 0x00c5, 0x41, 1 },
- { 0x00c6, 0x00c6, 0x4145, 2 },
- { 0x00c7, 0x00c7, 0x43, 1 },
- { 0x00c8, 0x00c8, 0x45, 1 },
- { 0x00c9, 0x00c9, 0x45, 1 },
- { 0x00ca, 0x00ca, 0x45, 1 },
- { 0x00cb, 0x00cb, 0x45, 1 },
- { 0x00cc, 0x00cc, 0x49, 1 },
- { 0x00cd, 0x00cd, 0x49, 1 },
- { 0x00ce, 0x00ce, 0x49, 1 },
- { 0x00cf, 0x00cf, 0x49, 1 },
- { 0x00d1, 0x00d2, 0x4e, 1 },
- { 0x00d3, 0x00d3, 0x4f, 1 },
- { 0x00d4, 0x00d4, 0x4f, 1 },
- { 0x00d5, 0x00d5, 0x4f, 1 },
- { 0x00d6, 0x00d6, 0x4f, 1 },
- { 0x00d7, 0x00d7, 0x78, 1 },
- { 0x00d8, 0x00d8, 0x4f, 1 },
- { 0x00d9, 0x00d9, 0x55, 1 },
- { 0x00da, 0x00da, 0x55, 1 },
- { 0x00db, 0x00db, 0x55, 1 },
- { 0x00dc, 0x00dc, 0x55, 1 },
- { 0x00dd, 0x00dd, 0x59, 1 },
- { 0x00e0, 0x00e0, 0x61, 1 },
- { 0x00e1, 0x00e1, 0x61, 1 },
- { 0x00e2, 0x00e2, 0x61, 1 },
- { 0x00e3, 0x00e3, 0x61, 1 },
- { 0x00e4, 0x00e4, 0x61, 1 },
- { 0x00e5, 0x00e5, 0x61, 1 },
- { 0x00e6, 0x00e6, 0x6165, 2 },
- { 0x00e7, 0x00e7, 0x63, 1 },
- { 0x00e8, 0x00e8, 0x65, 1 },
- { 0x00e9, 0x00e9, 0x65, 1 },
- { 0x00ea, 0x00ea, 0x65, 1 },
- { 0x00eb, 0x00eb, 0x65, 1 },
- { 0x00ec, 0x00ec, 0x69, 1 },
- { 0x00ed, 0x00ed, 0x69, 1 },
- { 0x00ee, 0x00ee, 0x69, 1 },
- { 0x00ef, 0x00ef, 0x69, 1 },
- { 0x00f1, 0x00f2, 0x6e, 1 },
- { 0x00f3, 0x00f3, 0x6f, 1 },
- { 0x00f4, 0x00f4, 0x6f, 1 },
- { 0x00f5, 0x00f5, 0x6f, 1 },
- { 0x00f6, 0x00f6, 0x6f, 1 },
- { 0x00f7, 0x00f7, 0x2f, 1 },
- { 0x00f8, 0x00f8, 0x6f, 1 },
- { 0x00f9, 0x00f9, 0x75, 1 },
- { 0x00fa, 0x00fa, 0x75, 1 },
- { 0x00fb, 0x00fb, 0x75, 1 },
- { 0x00fc, 0x00fc, 0x75, 1 },
- { 0x00fd, 0x00fd, 0x79, 1 },
- { 0x00ff, 0x00ff, 0x79, 1 },
- { 0x0131, 0x0131, 0x69, 1 },
- { 0x0141, 0x0141, 0x4c, 1 },
- { 0x0152, 0x0152, 0x4f45, 2 },
- { 0x0153, 0x0153, 0x6f65, 2 },
- { 0x0160, 0x0160, 0x53, 1 },
- { 0x0178, 0x0178, 0x59, 1 },
- { 0x017d, 0x017d, 0x5a, 1 },
- { 0x2013, 0x2013, 0x2d, 1 },
- { 0x2014, 0x2014, 0x2d2d, 2 },
- { 0x2018, 0x2018, 0x60, 1 },
- { 0x2019, 0x2019, 0x27, 1 },
- { 0x201c, 0x201c, 0x22, 1 },
- { 0x201d, 0x201d, 0x22, 1 },
- { 0x2022, 0x2022, 0x2a, 1 },
- { 0x2026, 0x2026, 0x2e2e2e, 3 },
- { 0x2122, 0x2122, 0x544d, 2 },
- { 0x2212, 0x2212, 0x2d, 1 },
- { 0xf6f9, 0xf6f9, 0x4c, 1 },
- { 0xf6fa, 0xf6fa, 0x4f45, 2 },
- { 0xf6fd, 0xf6fd, 0x53, 1 },
- { 0xf6fe, 0xf6fe, 0x7e, 1 },
- { 0xf6ff, 0xf6ff, 0x5a, 1 },
- { 0xf721, 0xf721, 0x21, 1 },
- { 0xf724, 0xf724, 0x24, 1 },
- { 0xf726, 0xf726, 0x26, 1 },
- { 0xf730, 0xf739, 0x30, 1 },
- { 0xf73f, 0xf73f, 0x3f, 1 },
- { 0xf761, 0xf77a, 0x41, 1 },
- { 0xf7e0, 0xf7e0, 0x41, 1 },
- { 0xf7e1, 0xf7e1, 0x41, 1 },
- { 0xf7e2, 0xf7e2, 0x41, 1 },
- { 0xf7e3, 0xf7e3, 0x41, 1 },
- { 0xf7e4, 0xf7e4, 0x41, 1 },
- { 0xf7e5, 0xf7e5, 0x41, 1 },
- { 0xf7e6, 0xf7e6, 0x4145, 2 },
- { 0xf7e7, 0xf7e7, 0x43, 1 },
- { 0xf7e8, 0xf7e8, 0x45, 1 },
- { 0xf7e9, 0xf7e9, 0x45, 1 },
- { 0xf7ea, 0xf7ea, 0x45, 1 },
- { 0xf7eb, 0xf7eb, 0x45, 1 },
- { 0xf7ec, 0xf7ec, 0x49, 1 },
- { 0xf7ed, 0xf7ed, 0x49, 1 },
- { 0xf7ee, 0xf7ee, 0x49, 1 },
- { 0xf7ef, 0xf7ef, 0x49, 1 },
- { 0xf7f1, 0xf7f2, 0x4e, 1 },
- { 0xf7f3, 0xf7f3, 0x4f, 1 },
- { 0xf7f4, 0xf7f4, 0x4f, 1 },
- { 0xf7f5, 0xf7f5, 0x4f, 1 },
- { 0xf7f6, 0xf7f6, 0x4f, 1 },
- { 0xf7f8, 0xf7f8, 0x4f, 1 },
- { 0xf7f9, 0xf7f9, 0x55, 1 },
- { 0xf7fa, 0xf7fa, 0x55, 1 },
- { 0xf7fb, 0xf7fb, 0x55, 1 },
- { 0xf7fc, 0xf7fc, 0x55, 1 },
- { 0xf7fd, 0xf7fd, 0x59, 1 },
- { 0xf7ff, 0xf7ff, 0x59, 1 },
- { 0xfb00, 0xfb00, 0x6666, 2 },
- { 0xfb01, 0xfb01, 0x6669, 2 },
- { 0xfb02, 0xfb02, 0x666c, 2 },
- { 0xfb03, 0xfb03, 0x666669, 3 },
- { 0xfb04, 0xfb04, 0x66666c, 3 }
-};
-#define ascii7UnicodeMapLen (sizeof(ascii7UnicodeMapRanges) / sizeof(UnicodeMapRange))
-
-static UnicodeMapRange symbolUnicodeMapRanges[] = {
- { 0x0020, 0x0021, 0x20, 1 },
- { 0x0023, 0x0023, 0x23, 1 },
- { 0x0025, 0x0026, 0x25, 1 },
- { 0x0028, 0x0029, 0x28, 1 },
- { 0x002b, 0x002c, 0x2b, 1 },
- { 0x002e, 0x003f, 0x2e, 1 },
- { 0x005b, 0x005b, 0x5b, 1 },
- { 0x005d, 0x005d, 0x5d, 1 },
- { 0x005f, 0x005f, 0x5f, 1 },
- { 0x007b, 0x007d, 0x7b, 1 },
- { 0x00ac, 0x00ac, 0xd8, 1 },
- { 0x00b0, 0x00b1, 0xb0, 1 },
- { 0x00b5, 0x00b5, 0x6d, 1 },
- { 0x00d7, 0x00d7, 0xb4, 1 },
- { 0x00f7, 0x00f7, 0xb8, 1 },
- { 0x0192, 0x0192, 0xa6, 1 },
- { 0x0391, 0x0392, 0x41, 1 },
- { 0x0393, 0x0393, 0x47, 1 },
- { 0x0395, 0x0395, 0x45, 1 },
- { 0x0396, 0x0396, 0x5a, 1 },
- { 0x0397, 0x0397, 0x48, 1 },
- { 0x0398, 0x0398, 0x51, 1 },
- { 0x0399, 0x0399, 0x49, 1 },
- { 0x039a, 0x039d, 0x4b, 1 },
- { 0x039e, 0x039e, 0x58, 1 },
- { 0x039f, 0x03a0, 0x4f, 1 },
- { 0x03a1, 0x03a1, 0x52, 1 },
- { 0x03a3, 0x03a5, 0x53, 1 },
- { 0x03a6, 0x03a6, 0x46, 1 },
- { 0x03a7, 0x03a7, 0x43, 1 },
- { 0x03a8, 0x03a8, 0x59, 1 },
- { 0x03b1, 0x03b2, 0x61, 1 },
- { 0x03b3, 0x03b3, 0x67, 1 },
- { 0x03b4, 0x03b5, 0x64, 1 },
- { 0x03b6, 0x03b6, 0x7a, 1 },
- { 0x03b7, 0x03b7, 0x68, 1 },
- { 0x03b8, 0x03b8, 0x71, 1 },
- { 0x03b9, 0x03b9, 0x69, 1 },
- { 0x03ba, 0x03bb, 0x6b, 1 },
- { 0x03bd, 0x03bd, 0x6e, 1 },
- { 0x03be, 0x03be, 0x78, 1 },
- { 0x03bf, 0x03c0, 0x6f, 1 },
- { 0x03c1, 0x03c1, 0x72, 1 },
- { 0x03c2, 0x03c2, 0x56, 1 },
- { 0x03c3, 0x03c5, 0x73, 1 },
- { 0x03c6, 0x03c6, 0x66, 1 },
- { 0x03c7, 0x03c7, 0x63, 1 },
- { 0x03c8, 0x03c8, 0x79, 1 },
- { 0x03c9, 0x03c9, 0x77, 1 },
- { 0x03d1, 0x03d1, 0x4a, 1 },
- { 0x03d2, 0x03d2, 0xa1, 1 },
- { 0x03d5, 0x03d5, 0x6a, 1 },
- { 0x03d6, 0x03d6, 0x76, 1 },
- { 0x2022, 0x2022, 0xb7, 1 },
- { 0x2026, 0x2026, 0xbc, 1 },
- { 0x2032, 0x2032, 0xa2, 1 },
- { 0x2033, 0x2033, 0xb2, 1 },
- { 0x2044, 0x2044, 0xa4, 1 },
- { 0x2111, 0x2111, 0xc1, 1 },
- { 0x2118, 0x2118, 0xc3, 1 },
- { 0x211c, 0x211c, 0xc2, 1 },
- { 0x2126, 0x2126, 0x57, 1 },
- { 0x2135, 0x2135, 0xc0, 1 },
- { 0x2190, 0x2193, 0xac, 1 },
- { 0x2194, 0x2194, 0xab, 1 },
- { 0x21b5, 0x21b5, 0xbf, 1 },
- { 0x21d0, 0x21d3, 0xdc, 1 },
- { 0x21d4, 0x21d4, 0xdb, 1 },
- { 0x2200, 0x2200, 0x22, 1 },
- { 0x2202, 0x2202, 0xb6, 1 },
- { 0x2203, 0x2203, 0x24, 1 },
- { 0x2205, 0x2205, 0xc6, 1 },
- { 0x2206, 0x2206, 0x44, 1 },
- { 0x2207, 0x2207, 0xd1, 1 },
- { 0x2208, 0x2209, 0xce, 1 },
- { 0x220b, 0x220b, 0x27, 1 },
- { 0x220f, 0x220f, 0xd5, 1 },
- { 0x2211, 0x2211, 0xe5, 1 },
- { 0x2212, 0x2212, 0x2d, 1 },
- { 0x2217, 0x2217, 0x2a, 1 },
- { 0x221a, 0x221a, 0xd6, 1 },
- { 0x221d, 0x221d, 0xb5, 1 },
- { 0x221e, 0x221e, 0xa5, 1 },
- { 0x2220, 0x2220, 0xd0, 1 },
- { 0x2227, 0x2228, 0xd9, 1 },
- { 0x2229, 0x222a, 0xc7, 1 },
- { 0x222b, 0x222b, 0xf2, 1 },
- { 0x2234, 0x2234, 0x5c, 1 },
- { 0x223c, 0x223c, 0x7e, 1 },
- { 0x2245, 0x2245, 0x40, 1 },
- { 0x2248, 0x2248, 0xbb, 1 },
- { 0x2260, 0x2261, 0xb9, 1 },
- { 0x2264, 0x2264, 0xa3, 1 },
- { 0x2265, 0x2265, 0xb3, 1 },
- { 0x2282, 0x2282, 0xcc, 1 },
- { 0x2283, 0x2283, 0xc9, 1 },
- { 0x2284, 0x2284, 0xcb, 1 },
- { 0x2286, 0x2286, 0xcd, 1 },
- { 0x2287, 0x2287, 0xca, 1 },
- { 0x2295, 0x2295, 0xc5, 1 },
- { 0x2297, 0x2297, 0xc4, 1 },
- { 0x22a5, 0x22a5, 0x5e, 1 },
- { 0x22c5, 0x22c5, 0xd7, 1 },
- { 0x2320, 0x2320, 0xf3, 1 },
- { 0x2321, 0x2321, 0xf5, 1 },
- { 0x2329, 0x2329, 0xe1, 1 },
- { 0x232a, 0x232a, 0xf1, 1 },
- { 0x25ca, 0x25ca, 0xe0, 1 },
- { 0x2660, 0x2660, 0xaa, 1 },
- { 0x2663, 0x2663, 0xa7, 1 },
- { 0x2665, 0x2665, 0xa9, 1 },
- { 0x2666, 0x2666, 0xa8, 1 },
- { 0xf6d9, 0xf6d9, 0xd3, 1 },
- { 0xf6da, 0xf6da, 0xd2, 1 },
- { 0xf6db, 0xf6db, 0xd4, 1 },
- { 0xf8e5, 0xf8e5, 0x60, 1 },
- { 0xf8e6, 0xf8e7, 0xbd, 1 },
- { 0xf8e8, 0xf8ea, 0xe2, 1 },
- { 0xf8eb, 0xf8f4, 0xe6, 1 },
- { 0xf8f5, 0xf8f5, 0xf4, 1 },
- { 0xf8f6, 0xf8fe, 0xf6, 1 }
-};
-#define symbolUnicodeMapLen (sizeof(symbolUnicodeMapRanges) / sizeof(UnicodeMapRange))
-
-static UnicodeMapRange zapfDingbatsUnicodeMapRanges[] = {
- { 0x0020, 0x0020, 0x20, 1 },
- { 0x2192, 0x2192, 0xd5, 1 },
- { 0x2194, 0x2195, 0xd6, 1 },
- { 0x2460, 0x2469, 0xac, 1 },
- { 0x25a0, 0x25a0, 0x6e, 1 },
- { 0x25b2, 0x25b2, 0x73, 1 },
- { 0x25bc, 0x25bc, 0x74, 1 },
- { 0x25c6, 0x25c6, 0x75, 1 },
- { 0x25cf, 0x25cf, 0x6c, 1 },
- { 0x25d7, 0x25d7, 0x77, 1 },
- { 0x2605, 0x2605, 0x48, 1 },
- { 0x260e, 0x260e, 0x25, 1 },
- { 0x261b, 0x261b, 0x2a, 1 },
- { 0x261e, 0x261e, 0x2b, 1 },
- { 0x2660, 0x2660, 0xab, 1 },
- { 0x2663, 0x2663, 0xa8, 1 },
- { 0x2665, 0x2665, 0xaa, 1 },
- { 0x2666, 0x2666, 0xa9, 1 },
- { 0x2701, 0x2704, 0x21, 1 },
- { 0x2706, 0x2709, 0x26, 1 },
- { 0x270c, 0x2727, 0x2c, 1 },
- { 0x2729, 0x274b, 0x49, 1 },
- { 0x274d, 0x274d, 0x6d, 1 },
- { 0x274f, 0x2752, 0x6f, 1 },
- { 0x2756, 0x2756, 0x76, 1 },
- { 0x2758, 0x275e, 0x78, 1 },
- { 0x2761, 0x2767, 0xa1, 1 },
- { 0x2776, 0x2794, 0xb6, 1 },
- { 0x2798, 0x27af, 0xd8, 1 },
- { 0x27b1, 0x27be, 0xf1, 1 }
-};
-#define zapfDingbatsUnicodeMapLen (sizeof(zapfDingbatsUnicodeMapRanges) / sizeof(UnicodeMapRange))
diff --git a/Build/source/libs/xpdf/xpdf/XRef.cc b/Build/source/libs/xpdf/xpdf/XRef.cc
deleted file mode 100644
index e9b3b0274f8..00000000000
--- a/Build/source/libs/xpdf/xpdf/XRef.cc
+++ /dev/null
@@ -1,925 +0,0 @@
-//========================================================================
-//
-// XRef.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: XRef.cc 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r77 | ms | 2007-01-01 13:01:00 +0100 (Mo, 01 Jan 2007) | 2 lines
-*
-* 1.40.0
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r24 | ms | 2005-02-04 13:01:00 +0100 (Fr, 04 Feb 2005) | 2 lines
-*
-* 1.21a
-*
-* ------------------------------------------------------------------------
-* r21 | ms | 2004-12-22 13:01:00 +0100 (Mi, 22 Dez 2004) | 2 lines
-*
-* 1.20b
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <ctype.h>
-#include "gmem.h"
-#include "Object.h"
-#include "Stream.h"
-#include "Lexer.h"
-#include "Parser.h"
-#include "Dict.h"
-#include "Error.h"
-#include "ErrorCodes.h"
-#include "XRef.h"
-
-//------------------------------------------------------------------------
-
-#define xrefSearchSize 1024 // read this many bytes at end of file
- // to look for 'startxref'
-
-//------------------------------------------------------------------------
-// Permission bits
-//------------------------------------------------------------------------
-
-#define permPrint (1<<2)
-#define permChange (1<<3)
-#define permCopy (1<<4)
-#define permNotes (1<<5)
-#define defPermFlags 0xfffc
-
-//------------------------------------------------------------------------
-// ObjectStream
-//------------------------------------------------------------------------
-
-ObjectStream::ObjectStream(XRef *xref, int objStrNumA) {
- Stream *str;
- Parser *parser;
- Object objStr, obj1, obj2;
- int first, i;
-
- objStrNum = objStrNumA;
- nObjects = 0;
- objs = NULL;
- objNums = NULL;
- offsets = NULL;
-
- if (!xref->fetch(objStrNum, 0, &objStr)->isStream()) {
- goto err1;
- }
-
- if (!objStr.streamGetDict()->lookup("N", &obj1)->isInt()) {
- obj1.free();
- goto err1;
- }
- nObjects = obj1.getInt();
- obj1.free();
- if (nObjects <= 0) {
- goto err1;
- }
-
- if (!objStr.streamGetDict()->lookup("First", &obj1)->isInt()) {
- obj1.free();
- goto err1;
- }
- first = obj1.getInt();
- firstOffset = objStr.getStream()->getBaseStream()->getStart() + first;
- obj1.free();
- if (first < 0) {
- goto err1;
- }
-
- objs = new Object[nObjects];
- objNums = (int *)gmallocn(nObjects, sizeof(int));
- offsets = (int *)gmallocn(nObjects, sizeof(int));
-
- // parse the header: object numbers and offsets
- objStr.streamReset();
- obj1.initNull();
- str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first);
- parser = new Parser(xref, new Lexer(xref, str), gFalse);
- for (i = 0; i < nObjects; ++i) {
- parser->getObj(&obj1);
- parser->getObj(&obj2);
- if (!obj1.isInt() || !obj2.isInt()) {
- obj1.free();
- obj2.free();
- delete parser;
-// gfree(offsets);
- goto err1;
- }
- objNums[i] = obj1.getInt();
- offsets[i] = obj2.getInt();
- obj1.free();
- obj2.free();
- if (objNums[i] < 0 || offsets[i] < 0 ||
- (i > 0 && offsets[i] < offsets[i-1])) {
- delete parser;
-// gfree(offsets);
- goto err1;
- }
- }
- while (str->getChar() != EOF) ;
- delete parser;
-
- // skip to the first object - this shouldn't be necessary because
- // the First key is supposed to be equal to offsets[0], but just in
- // case...
- for (i = first; i < offsets[0]; ++i) {
- objStr.getStream()->getChar();
- }
-
- // parse the objects
- for (i = 0; i < nObjects; ++i) {
- obj1.initNull();
- if (i == nObjects - 1) {
- str = new EmbedStream(objStr.getStream(), &obj1, gFalse, 0);
- } else {
- str = new EmbedStream(objStr.getStream(), &obj1, gTrue,
- offsets[i+1] - offsets[i]);
- }
- parser = new Parser(xref, new Lexer(xref, str), gFalse);
- parser->getObj(&objs[i]);
- while (str->getChar() != EOF) ;
- delete parser;
- }
-
-// gfree(offsets);
-
- err1:
- objStr.free();
- return;
-}
-
-ObjectStream::~ObjectStream() {
- int i;
-
- if (objs) {
- for (i = 0; i < nObjects; ++i) {
- objs[i].free();
- }
- delete[] objs;
- }
- gfree(objNums);
- gfree(offsets);
-}
-
-Object *ObjectStream::getObject(int objIdx, int objNum, Object *obj) {
- if (objIdx < 0 || objIdx >= nObjects || objNum != objNums[objIdx]) {
- return obj->initNull();
- }
- return objs[objIdx].copy(obj);
-}
-
-//------------------------------------------------------------------------
-// XRef
-//------------------------------------------------------------------------
-
-XRef::XRef(BaseStream *strA) {
- Guint pos;
- Object obj;
-
- ok = gTrue;
- errCode = errNone;
- size = 0;
- entries = NULL;
- streamEnds = NULL;
- streamEndsLen = 0;
- objStr = NULL;
-
- encrypted = gFalse;
- permFlags = defPermFlags;
- ownerPasswordOk = gFalse;
-
- // read the trailer
- str = strA;
- start = str->getStart();
- pos = getStartXref();
-
- // if there was a problem with the 'startxref' position, try to
- // reconstruct the xref table
- if (pos == 0) {
- if (!(ok = constructXRef())) {
- errCode = errDamaged;
- return;
- }
-
- // read the xref table
- } else {
- while (readXRef(&pos)) ;
-
- // if there was a problem with the xref table,
- // try to reconstruct it
- if (!ok) {
- if (!(ok = constructXRef())) {
- errCode = errDamaged;
- return;
- }
- }
- }
-
- // get the root dictionary (catalog) object
- trailerDict.dictLookupNF("Root", &obj);
- if (obj.isRef()) {
- rootNum = obj.getRefNum();
- rootGen = obj.getRefGen();
- obj.free();
- } else {
- obj.free();
- if (!(ok = constructXRef())) {
- errCode = errDamaged;
- return;
- }
- }
-
- // now set the trailer dictionary's xref pointer so we can fetch
- // indirect objects from it
- trailerDict.getDict()->setXRef(this);
-}
-
-XRef::~XRef() {
- gfree(entries);
- trailerDict.free();
- if (streamEnds) {
- gfree(streamEnds);
- }
- if (objStr) {
- delete objStr;
- }
-}
-
-// Read the 'startxref' position.
-Guint XRef::getStartXref() {
- char buf[xrefSearchSize+1];
- char *p;
- int c, n, i;
-
- // read last xrefSearchSize bytes
- str->setPos(xrefSearchSize, -1);
- for (n = 0; n < xrefSearchSize; ++n) {
- if ((c = str->getChar()) == EOF) {
- break;
- }
- buf[n] = c;
- }
- buf[n] = '\0';
-
- // find startxref
- for (i = n - 9; i >= 0; --i) {
- if (!strncmp(&buf[i], "startxref", 9)) {
- break;
- }
- }
- if (i < 0) {
- return 0;
- }
- for (p = &buf[i+9]; isspace(*p); ++p) ;
- lastXRefPos = strToUnsigned(p);
-
- return lastXRefPos;
-}
-
-// Read one xref table section. Also reads the associated trailer
-// dictionary, and returns the prev pointer (if any).
-GBool XRef::readXRef(Guint *pos) {
- Parser *parser;
- Object obj;
- GBool more;
-
- // start up a parser, parse one token
- obj.initNull();
- parser = new Parser(NULL,
- new Lexer(NULL,
- str->makeSubStream(start + *pos, gFalse, 0, &obj)),
- gTrue);
- parser->getObj(&obj);
-
- // parse an old-style xref table
- if (obj.isCmd("xref")) {
- obj.free();
- more = readXRefTable(parser, pos);
-
- // parse an xref stream
- } else if (obj.isInt()) {
- obj.free();
- if (!parser->getObj(&obj)->isInt()) {
- goto err1;
- }
- obj.free();
- if (!parser->getObj(&obj)->isCmd("obj")) {
- goto err1;
- }
- obj.free();
- if (!parser->getObj(&obj)->isStream()) {
- goto err1;
- }
- more = readXRefStream(obj.getStream(), pos);
- obj.free();
-
- } else {
- goto err1;
- }
-
- delete parser;
- return more;
-
- err1:
- obj.free();
- delete parser;
- ok = gFalse;
- return gFalse;
-}
-
-GBool XRef::readXRefTable(Parser *parser, Guint *pos) {
- XRefEntry entry;
- GBool more;
- Object obj, obj2;
- Guint pos2;
- int first, n, newSize, i;
-
- while (1) {
- parser->getObj(&obj);
- if (obj.isCmd("trailer")) {
- obj.free();
- break;
- }
- if (!obj.isInt()) {
- goto err1;
- }
- first = obj.getInt();
- obj.free();
- if (!parser->getObj(&obj)->isInt()) {
- goto err1;
- }
- n = obj.getInt();
- obj.free();
- if (first < 0 || n < 0 || first + n < 0) {
- goto err1;
- }
- if (first + n > size) {
- for (newSize = size ? 2 * size : 1024;
- first + n > newSize && newSize > 0;
- newSize <<= 1) ;
- if (newSize < 0) {
- goto err1;
- }
- entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry));
- for (i = size; i < newSize; ++i) {
- entries[i].offset = 0xffffffff;
- entries[i].type = xrefEntryFree;
- }
- size = newSize;
- }
- for (i = first; i < first + n; ++i) {
- if (!parser->getObj(&obj)->isInt()) {
- goto err1;
- }
- entry.offset = (Guint)obj.getInt();
- obj.free();
- if (!parser->getObj(&obj)->isInt()) {
- goto err1;
- }
- entry.gen = obj.getInt();
- obj.free();
- parser->getObj(&obj);
- if (obj.isCmd("n")) {
- entry.type = xrefEntryUncompressed;
- } else if (obj.isCmd("f")) {
- entry.type = xrefEntryFree;
- } else {
- goto err1;
- }
- obj.free();
- if (entries[i].offset == 0xffffffff) {
- entries[i] = entry;
- // PDF files of patents from the IBM Intellectual Property
- // Network have a bug: the xref table claims to start at 1
- // instead of 0.
- if (i == 1 && first == 1 &&
- entries[1].offset == 0 && entries[1].gen == 65535 &&
- entries[1].type == xrefEntryFree) {
- i = first = 0;
- entries[0] = entries[1];
- entries[1].offset = 0xffffffff;
- }
- }
- }
- }
-
- // read the trailer dictionary
- if (!parser->getObj(&obj)->isDict()) {
- goto err1;
- }
-
- // get the 'Prev' pointer
- obj.getDict()->lookupNF("Prev", &obj2);
- if (obj2.isInt()) {
- *pos = (Guint)obj2.getInt();
- more = gTrue;
- } else if (obj2.isRef()) {
- // certain buggy PDF generators generate "/Prev NNN 0 R" instead
- // of "/Prev NNN"
- *pos = (Guint)obj2.getRefNum();
- more = gTrue;
- } else {
- more = gFalse;
- }
- obj2.free();
-
- // save the first trailer dictionary
- if (trailerDict.isNone()) {
- obj.copy(&trailerDict);
- }
-
- // check for an 'XRefStm' key
- if (obj.getDict()->lookup("XRefStm", &obj2)->isInt()) {
- pos2 = (Guint)obj2.getInt();
- readXRef(&pos2);
- if (!ok) {
- obj2.free();
- goto err1;
- }
- }
- obj2.free();
-
- obj.free();
- return more;
-
- err1:
- obj.free();
- ok = gFalse;
- return gFalse;
-}
-
-GBool XRef::readXRefStream(Stream *xrefStr, Guint *pos) {
- Dict *dict;
- int w[3];
- GBool more;
- Object obj, obj2, idx;
- int newSize, first, n, i;
-
- dict = xrefStr->getDict();
-
- if (!dict->lookupNF("Size", &obj)->isInt()) {
- goto err1;
- }
- newSize = obj.getInt();
- obj.free();
- if (newSize < 0) {
- goto err1;
- }
- if (newSize > size) {
- entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry));
- for (i = size; i < newSize; ++i) {
- entries[i].offset = 0xffffffff;
- entries[i].type = xrefEntryFree;
- }
- size = newSize;
- }
-
- if (!dict->lookupNF("W", &obj)->isArray() ||
- obj.arrayGetLength() < 3) {
- goto err1;
- }
- for (i = 0; i < 3; ++i) {
- if (!obj.arrayGet(i, &obj2)->isInt()) {
- obj2.free();
- goto err1;
- }
- w[i] = obj2.getInt();
- obj2.free();
- if (w[i] < 0 || w[i] > 4) {
- goto err1;
- }
- }
- obj.free();
-
- xrefStr->reset();
- dict->lookupNF("Index", &idx);
- if (idx.isArray()) {
- for (i = 0; i+1 < idx.arrayGetLength(); i += 2) {
- if (!idx.arrayGet(i, &obj)->isInt()) {
- idx.free();
- goto err1;
- }
- first = obj.getInt();
- obj.free();
- if (!idx.arrayGet(i+1, &obj)->isInt()) {
- idx.free();
- goto err1;
- }
- n = obj.getInt();
- obj.free();
- if (first < 0 || n < 0 ||
- !readXRefStreamSection(xrefStr, w, first, n)) {
- idx.free();
- goto err0;
- }
- }
- } else {
- if (!readXRefStreamSection(xrefStr, w, 0, newSize)) {
- idx.free();
- goto err0;
- }
- }
- idx.free();
-
- dict->lookupNF("Prev", &obj);
- if (obj.isInt()) {
- *pos = (Guint)obj.getInt();
- more = gTrue;
- } else {
- more = gFalse;
- }
- obj.free();
- if (trailerDict.isNone()) {
- trailerDict.initDict(dict);
- }
-
- return more;
-
- err1:
- obj.free();
- err0:
- ok = gFalse;
- return gFalse;
-}
-
-GBool XRef::readXRefStreamSection(Stream *xrefStr, int *w, int first, int n) {
- Guint offset;
- int type, gen, c, newSize, i, j;
-
- if (first + n < 0) {
- return gFalse;
- }
- if (first + n > size) {
- for (newSize = size ? 2 * size : 1024;
- first + n > newSize && newSize > 0;
- newSize <<= 1) ;
- if (newSize < 0) {
- return gFalse;
- }
- entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry));
- for (i = size; i < newSize; ++i) {
- entries[i].offset = 0xffffffff;
- entries[i].type = xrefEntryFree;
- }
- size = newSize;
- }
- for (i = first; i < first + n; ++i) {
- if (w[0] == 0) {
- type = 1;
- } else {
- for (type = 0, j = 0; j < w[0]; ++j) {
- if ((c = xrefStr->getChar()) == EOF) {
- return gFalse;
- }
- type = (type << 8) + c;
- }
- }
- for (offset = 0, j = 0; j < w[1]; ++j) {
- if ((c = xrefStr->getChar()) == EOF) {
- return gFalse;
- }
- offset = (offset << 8) + c;
- }
- for (gen = 0, j = 0; j < w[2]; ++j) {
- if ((c = xrefStr->getChar()) == EOF) {
- return gFalse;
- }
- gen = (gen << 8) + c;
- }
- if (entries[i].offset == 0xffffffff) {
- switch (type) {
- case 0:
- entries[i].offset = offset;
- entries[i].gen = gen;
- entries[i].type = xrefEntryFree;
- break;
- case 1:
- entries[i].offset = offset;
- entries[i].gen = gen;
- entries[i].type = xrefEntryUncompressed;
- break;
- case 2:
- entries[i].offset = offset;
- entries[i].gen = gen;
- entries[i].type = xrefEntryCompressed;
- break;
- default:
- return gFalse;
- }
- }
- }
-
- return gTrue;
-}
-
-// Attempt to construct an xref table for a damaged file.
-GBool XRef::constructXRef() {
- Parser *parser;
- Object newTrailerDict, obj;
- char buf[256];
- Guint pos;
- int num, gen;
- int newSize;
- int streamEndsSize;
- char *p;
- int i;
- GBool gotRoot;
-
- gfree(entries);
- size = 0;
- entries = NULL;
-
- error(-1, "PDF file is damaged - attempting to reconstruct xref table...");
- gotRoot = gFalse;
- streamEndsLen = streamEndsSize = 0;
-
- str->reset();
- while (1) {
- pos = str->getPos();
- if (!str->getLine(buf, 256)) {
- break;
- }
- p = buf;
-
- // skip whitespace
- while (*p && Lexer::isSpace(*p & 0xff)) ++p;
-
- // got trailer dictionary
- if (!strncmp(p, "trailer", 7)) {
- obj.initNull();
- parser = new Parser(NULL,
- new Lexer(NULL,
- str->makeSubStream(pos + 7, gFalse, 0, &obj)),
- gFalse);
- parser->getObj(&newTrailerDict);
- if (newTrailerDict.isDict()) {
- newTrailerDict.dictLookupNF("Root", &obj);
- if (obj.isRef()) {
- rootNum = obj.getRefNum();
- rootGen = obj.getRefGen();
- if (!trailerDict.isNone()) {
- trailerDict.free();
- }
- newTrailerDict.copy(&trailerDict);
- gotRoot = gTrue;
- }
- obj.free();
- }
- newTrailerDict.free();
- delete parser;
-
- // look for object
- } else if (isdigit(*p)) {
- num = atoi(p);
- if (num > 0) {
- do {
- ++p;
- } while (*p && isdigit(*p));
- if (isspace(*p)) {
- do {
- ++p;
- } while (*p && isspace(*p));
- if (isdigit(*p)) {
- gen = atoi(p);
- do {
- ++p;
- } while (*p && isdigit(*p));
- if (isspace(*p)) {
- do {
- ++p;
- } while (*p && isspace(*p));
- if (!strncmp(p, "obj", 3)) {
- if (num >= size) {
- newSize = (num + 1 + 255) & ~255;
- if (newSize < 0) {
- error(-1, "Bad object number");
- return gFalse;
- }
- entries = (XRefEntry *)
- greallocn(entries, newSize, sizeof(XRefEntry));
- for (i = size; i < newSize; ++i) {
- entries[i].offset = 0xffffffff;
- entries[i].type = xrefEntryFree;
- }
- size = newSize;
- }
- if (entries[num].type == xrefEntryFree ||
- gen >= entries[num].gen) {
- entries[num].offset = pos - start;
- entries[num].gen = gen;
- entries[num].type = xrefEntryUncompressed;
- }
- }
- }
- }
- }
- }
-
- } else if (!strncmp(p, "endstream", 9)) {
- if (streamEndsLen == streamEndsSize) {
- streamEndsSize += 64;
- streamEnds = (Guint *)greallocn(streamEnds,
- streamEndsSize, sizeof(int));
- }
- streamEnds[streamEndsLen++] = pos;
- }
- }
-
- if (gotRoot)
- return gTrue;
-
- error(-1, "Couldn't find trailer dictionary");
- return gFalse;
-}
-
-void XRef::setEncryption(int permFlagsA, GBool ownerPasswordOkA,
- Guchar *fileKeyA, int keyLengthA, int encVersionA,
- CryptAlgorithm encAlgorithmA) {
- int i;
-
- encrypted = gTrue;
- permFlags = permFlagsA;
- ownerPasswordOk = ownerPasswordOkA;
- if (keyLengthA <= 16) {
- keyLength = keyLengthA;
- } else {
- keyLength = 16;
- }
- for (i = 0; i < keyLength; ++i) {
- fileKey[i] = fileKeyA[i];
- }
- encVersion = encVersionA;
- encAlgorithm = encAlgorithmA;
-}
-
-GBool XRef::okToPrint(GBool ignoreOwnerPW) {
- return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permPrint);
-}
-
-GBool XRef::okToChange(GBool ignoreOwnerPW) {
- return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permChange);
-}
-
-GBool XRef::okToCopy(GBool ignoreOwnerPW) {
- return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permCopy);
-}
-
-GBool XRef::okToAddNotes(GBool ignoreOwnerPW) {
- return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permNotes);
-}
-
-Object *XRef::fetch(int num, int gen, Object *obj) {
- XRefEntry *e;
- Parser *parser;
- Object obj1, obj2, obj3;
-
- // check for bogus ref - this can happen in corrupted PDF files
- if (num < 0 || num >= size) {
- goto err;
- }
-
- e = &entries[num];
- switch (e->type) {
-
- case xrefEntryUncompressed:
- if (e->gen != gen) {
- goto err;
- }
- obj1.initNull();
- parser = new Parser(this,
- new Lexer(this,
- str->makeSubStream(start + e->offset, gFalse, 0, &obj1)),
- gTrue);
- parser->getObj(&obj1);
- parser->getObj(&obj2);
- parser->getObj(&obj3);
- if (!obj1.isInt() || obj1.getInt() != num ||
- !obj2.isInt() || obj2.getInt() != gen ||
- !obj3.isCmd("obj")) {
- obj1.free();
- obj2.free();
- obj3.free();
- delete parser;
- goto err;
- }
- parser->getObj(obj, encrypted ? fileKey : (Guchar *)NULL,
- encAlgorithm, keyLength, num, gen);
- obj1.free();
- obj2.free();
- obj3.free();
- delete parser;
- break;
-
- case xrefEntryCompressed:
- if (gen != 0) {
- goto err;
- }
- if (!objStr || objStr->getObjStrNum() != (int)e->offset) {
- if (objStr) {
- delete objStr;
- }
- objStr = new ObjectStream(this, e->offset);
- }
- objStr->getObject(e->gen, num, obj);
- break;
-
- default:
- goto err;
- }
-
- return obj;
-
- err:
- return obj->initNull();
-}
-
-Object *XRef::getDocInfo(Object *obj) {
- return trailerDict.dictLookup("Info", obj);
-}
-
-// Added for the pdftex project.
-Object *XRef::getDocInfoNF(Object *obj) {
- return trailerDict.dictLookupNF("Info", obj);
-}
-
-GBool XRef::getStreamEnd(Guint streamStart, Guint *streamEnd) {
- int a, b, m;
-
- if (streamEndsLen == 0 ||
- streamStart > streamEnds[streamEndsLen - 1]) {
- return gFalse;
- }
-
- a = -1;
- b = streamEndsLen - 1;
- // invariant: streamEnds[a] < streamStart <= streamEnds[b]
- while (b - a > 1) {
- m = (a + b) / 2;
- if (streamStart <= streamEnds[m]) {
- b = m;
- } else {
- a = m;
- }
- }
- *streamEnd = streamEnds[b];
- return gTrue;
-}
-
-Guint XRef::strToUnsigned(char *s) {
- Guint x;
- char *p;
- int i;
-
- x = 0;
- for (p = s, i = 0; *p && isdigit(*p) && i < 10; ++p, ++i) {
- x = 10 * x + (*p - '0');
- }
- return x;
-}
diff --git a/Build/source/libs/xpdf/xpdf/XRef.h b/Build/source/libs/xpdf/xpdf/XRef.h
deleted file mode 100644
index 0db6cee36df..00000000000
--- a/Build/source/libs/xpdf/xpdf/XRef.h
+++ /dev/null
@@ -1,202 +0,0 @@
-//========================================================================
-//
-// XRef.h
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: XRef.h 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r77 | ms | 2007-01-01 13:01:00 +0100 (Mo, 01 Jan 2007) | 2 lines
-*
-* 1.40.0
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#ifndef XREF_H
-#define XREF_H
-
-#include <aconf.h>
-
-#ifdef USE_GCC_PRAGMAS
-#pragma interface
-#endif
-
-#include "gtypes.h"
-#include "Object.h"
-
-class Dict;
-class Stream;
-class Parser;
-
-class ObjectStream {
-public:
-
- // Create an object stream, using object number <objStrNum>,
- // generation 0.
- ObjectStream(XRef *xref, int objStrNumA);
-
- ~ObjectStream();
-
- // Return the object number of this object stream.
- int getObjStrNum() { return objStrNum; }
-
- // Get the <objIdx>th object from this stream, which should be
- // object number <objNum>, generation 0.
- Object *getObject(int objIdx, int objNum, Object *obj);
-
- int *getOffsets() { return offsets; }
- Guint getFirstOffset() { return firstOffset; }
-
-private:
-
- int objStrNum; // object number of the object stream
- int nObjects; // number of objects in the stream
- Object *objs; // the objects (length = nObjects)
- int *objNums; // the object numbers (length = nObjects)
- int *offsets; // the object offsets (length = nObjects)
- Guint firstOffset;
-};
-
-
-//------------------------------------------------------------------------
-// XRef
-//------------------------------------------------------------------------
-
-enum XRefEntryType {
- xrefEntryFree,
- xrefEntryUncompressed,
- xrefEntryCompressed
-};
-
-struct XRefEntry {
- Guint offset;
- int gen;
- XRefEntryType type;
-};
-
-class XRef {
-public:
-
- // Constructor. Read xref table from stream.
- XRef(BaseStream *strA);
-
- // Destructor.
- ~XRef();
-
- // Is xref table valid?
- GBool isOk() { return ok; }
-
- // Get the error code (if isOk() returns false).
- int getErrorCode() { return errCode; }
-
- // Set the encryption parameters.
- void setEncryption(int permFlagsA, GBool ownerPasswordOkA,
- Guchar *fileKeyA, int keyLengthA, int encVersionA,
- CryptAlgorithm encAlgorithmA);
-
- // Is the file encrypted?
- GBool isEncrypted() { return encrypted; }
-
- // Check various permissions.
- GBool okToPrint(GBool ignoreOwnerPW = gFalse);
- GBool okToChange(GBool ignoreOwnerPW = gFalse);
- GBool okToCopy(GBool ignoreOwnerPW = gFalse);
- GBool okToAddNotes(GBool ignoreOwnerPW = gFalse);
-
- // Get catalog object.
- Object *getCatalog(Object *obj) { return fetch(rootNum, rootGen, obj); }
-
- // Fetch an indirect reference.
- Object *fetch(int num, int gen, Object *obj);
-
- // Return the document's Info dictionary (if any).
- Object *getDocInfo(Object *obj);
- Object *getDocInfoNF(Object *obj);
-
- // Return the number of objects in the xref table.
- int getNumObjects() { return size; }
-
- // Return the offset of the last xref table.
- Guint getLastXRefPos() { return lastXRefPos; }
-
- // Return the catalog object reference.
- int getRootNum() { return rootNum; }
- int getRootGen() { return rootGen; }
-
- // Get end position for a stream in a damaged file.
- // Returns false if unknown or file is not damaged.
- GBool getStreamEnd(Guint streamStart, Guint *streamEnd);
-
- // Direct access.
- int getSize() { return size; }
- XRefEntry *getEntry(int i) { return &entries[i]; }
- Object *getTrailerDict() { return &trailerDict; }
- ObjectStream *getObjStr() { return objStr; }
-
-private:
-
- BaseStream *str; // input stream
- Guint start; // offset in file (to allow for garbage
- // at beginning of file)
- XRefEntry *entries; // xref entries
- int size; // size of <entries> array
- int rootNum, rootGen; // catalog dict
- GBool ok; // true if xref table is valid
- int errCode; // error code (if <ok> is false)
- Object trailerDict; // trailer dictionary
- Guint lastXRefPos; // offset of last xref table
- Guint *streamEnds; // 'endstream' positions - only used in
- // damaged files
- int streamEndsLen; // number of valid entries in streamEnds
- ObjectStream *objStr; // cached object stream
- GBool encrypted; // true if file is encrypted
- int permFlags; // permission bits
- GBool ownerPasswordOk; // true if owner password is correct
- Guchar fileKey[16]; // file decryption key
- int keyLength; // length of key, in bytes
- int encVersion; // encryption version
- CryptAlgorithm encAlgorithm; // encryption algorithm
-
- Guint getStartXref();
- GBool readXRef(Guint *pos);
- GBool readXRefTable(Parser *parser, Guint *pos);
- GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n);
- GBool readXRefStream(Stream *xrefStr, Guint *pos);
- GBool constructXRef();
- Guint strToUnsigned(char *s);
-};
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/config.h b/Build/source/libs/xpdf/xpdf/config.h
deleted file mode 100644
index f006064b45a..00000000000
--- a/Build/source/libs/xpdf/xpdf/config.h
+++ /dev/null
@@ -1,164 +0,0 @@
-//========================================================================
-//
-// config.h
-//
-// Copyright 1996-2007 Glyph & Cog, LLC
-//
-//========================================================================
-
-/* ------------------------------------------------------------------------
-* Changed by Martin Schröder <martin@pdftex.org>
-* $Id: config.h 421 2008-04-26 21:59:55Z oneiros $
-* Changelog:
-* ------------------------------------------------------------------------
-* r268 | oneiros | 2007-11-11 22:45:02 +0100 (So, 11 Nov 2007) | 3 lines
-*
-* Merge xpdf 3.02pl2
-* svn merge -r215:266 http://scm.foundry.supelec.fr/svn/pdftex/vendor/xpdf/current .
-*
-* ------------------------------------------------------------------------
-* r215 | oneiros | 2007-07-31 18:32:04 +0200 (Di, 31 Jul 2007) | 2 lines
-*
-* Merge changes from trunk into stable: 203-207,213-214
-*
-* ------------------------------------------------------------------------
-* r151 | ms | 2007-06-25 18:53:17 +0200 (Mo, 25 Jun 2007) | 3 lines
-*
-* Merging xpdf 3.02 from HEAD into stable
-* svn merge -r149:150 --dry-run svn+ssh://svn/srv/svn/repos/pdftex/trunk/source/src/libs/xpdf .
-*
-* ------------------------------------------------------------------------
-* r86 | ms | 2007-01-31 13:01:00 +0100 (Mi, 31 Jan 2007) | 2 lines
-*
-* 1.40.2
-*
-* ------------------------------------------------------------------------
-* r38 | ms | 2005-08-21 14:00:00 +0200 (So, 21 Aug 2005) | 2 lines
-*
-* 1.30.1
-*
-* ------------------------------------------------------------------------
-* r11 | ms | 2004-09-06 14:01:00 +0200 (Mo, 06 Sep 2004) | 2 lines
-*
-* 1.20a
-*
-* ------------------------------------------------------------------------
-* r6 | ms | 2003-10-06 14:01:00 +0200 (Mo, 06 Okt 2003) | 2 lines
-*
-* released v1.11b
-*
-* ------------------------------------------------------------------------
-* r4 | ms | 2003-10-05 14:00:00 +0200 (So, 05 Okt 2003) | 2 lines
-*
-* Moved sources to src
-*
-* ------------------------------------------------------------------------
-* r1 | ms | 2003-08-02 14:00:00 +0200 (Sa, 02 Aug 2003) | 1 line
-*
-* 1.11a
-* ------------------------------------------------------------------------ */
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-//------------------------------------------------------------------------
-// version
-//------------------------------------------------------------------------
-
-// xpdf version
-#define xpdfVersion "3.02pl2"
-#define xpdfVersionNum 3.02
-#define xpdfMajorVersion 3
-#define xpdfMinorVersion 2
-#define xpdfUpdateVersion 0
-#define xpdfMajorVersionStr "3"
-#define xpdfMinorVersionStr "2"
-#define xpdfUpdateVersionStr "0"
-
-// supported PDF version
-#define supportedPDFVersionStr "1.7"
-#define supportedPDFVersionNum 1.7
-
-// copyright notice
-#define xpdfCopyright "Copyright 1996-2007 Glyph & Cog, LLC"
-
-// Windows resource file stuff
-#define winxpdfVersion "WinXpdf 3.02"
-#define xpdfCopyrightAmp "Copyright 1996-2007 Glyph && Cog, LLC"
-
-//------------------------------------------------------------------------
-// paper size
-//------------------------------------------------------------------------
-
-// default paper size (in points) for PostScript output
-#ifdef A4_PAPER
-#define defPaperWidth 595 // ISO A4 (210x297 mm)
-#define defPaperHeight 842
-#else
-#define defPaperWidth 612 // American letter (8.5x11")
-#define defPaperHeight 792
-#endif
-
-//------------------------------------------------------------------------
-// config file (xpdfrc) path
-//------------------------------------------------------------------------
-
-// user config file name, relative to the user's home directory
-#if defined(VMS) || (defined(WIN32) && !defined(__CYGWIN32__))
-#define xpdfUserConfigFile "xpdfrc"
-#else
-#define xpdfUserConfigFile ".xpdfrc"
-#endif
-
-// system config file name (set via the configure script)
-#ifdef SYSTEM_XPDFRC
-#define xpdfSysConfigFile SYSTEM_XPDFRC
-#else
-// under Windows, we get the directory with the executable and then
-// append this file name
-#define xpdfSysConfigFile "xpdfrc"
-#endif
-
-//------------------------------------------------------------------------
-// X-related constants
-//------------------------------------------------------------------------
-
-// default maximum size of color cube to allocate
-#define defaultRGBCube 5
-
-// number of fonts (combined t1lib, FreeType, X server) to cache
-#define xOutFontCacheSize 64
-
-// number of Type 3 fonts to cache
-#define xOutT3FontCacheSize 8
-
-//------------------------------------------------------------------------
-// popen
-//------------------------------------------------------------------------
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define popen _popen
-#define pclose _pclose
-#endif
-
-#if defined(VMS) || defined(VMCMS) || defined(DOS) || defined(OS2) || defined(__EMX__) || defined(WIN32) || defined(__DJGPP__) || defined(MACOS)
-#define POPEN_READ_MODE "rb"
-#else
-#define POPEN_READ_MODE "r"
-#endif
-
-//------------------------------------------------------------------------
-// Win32 stuff
-//------------------------------------------------------------------------
-
-#ifdef CDECL
-#undef CDECL
-#endif
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define CDECL __cdecl
-#else
-#define CDECL
-#endif
-
-#endif
diff --git a/Build/source/libs/xpdf/xpdf/depend.mk b/Build/source/libs/xpdf/xpdf/depend.mk
deleted file mode 100644
index 43ae5b4554b..00000000000
--- a/Build/source/libs/xpdf/xpdf/depend.mk
+++ /dev/null
@@ -1,416 +0,0 @@
-Array.o: $(srcdir)/Array.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h
-BuiltinFont.o: $(srcdir)/BuiltinFont.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/FontEncodingTables.h \
- $(srcdir)/BuiltinFont.h \
- $(goodir)/gtypes.h
-BuiltinFontTables.o: \
- $(srcdir)/BuiltinFontTables.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/FontEncodingTables.h \
- $(srcdir)/BuiltinFontTables.h \
- $(srcdir)/BuiltinFont.h \
- $(goodir)/gtypes.h
-Catalog.o: $(srcdir)/Catalog.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/XRef.h \
- $(srcdir)/Page.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Link.h \
- $(srcdir)/Catalog.h
-CharCodeToUnicode.o: \
- $(srcdir)/CharCodeToUnicode.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/gfile.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/GlobalParams.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/PSTokenizer.h \
- $(srcdir)/CharCodeToUnicode.h
-CMap.o: $(srcdir)/CMap.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/gfile.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/GlobalParams.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/PSTokenizer.h \
- $(srcdir)/CMap.h
-Decrypt.o: $(srcdir)/Decrypt.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Decrypt.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h
-Dict.o: $(srcdir)/Dict.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/XRef.h
-Error.o: $(srcdir)/Error.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/GlobalParams.h \
- $(goodir)/gtypes.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h
-FontEncodingTables.o: \
- $(srcdir)/FontEncodingTables.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/FontEncodingTables.h
-Function.o: $(srcdir)/Function.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Function.h
-Gfx.o: $(srcdir)/Gfx.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/GlobalParams.h \
- $(goodir)/gtypes.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/Object.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Lexer.h \
- $(srcdir)/Parser.h \
- $(srcdir)/GfxFont.h \
- $(srcdir)/GfxState.h \
- $(srcdir)/Function.h \
- $(srcdir)/OutputDev.h \
- $(srcdir)/Page.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Gfx.h
-GfxFont.o: $(srcdir)/GfxFont.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/GlobalParams.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/CMap.h \
- $(srcdir)/CharCodeToUnicode.h \
- $(srcdir)/FontEncodingTables.h \
- $(srcdir)/BuiltinFontTables.h \
- $(srcdir)/BuiltinFont.h \
- $(fofidir)/FoFiType1.h \
- $(fofidir)/FoFiBase.h \
- $(fofidir)/FoFiType1C.h \
- $(fofidir)/FoFiTrueType.h \
- $(srcdir)/GfxFont.h
-GfxState.o: $(srcdir)/GfxState.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Page.h \
- $(srcdir)/GfxState.h \
- $(srcdir)/Function.h
-GlobalParams.o: $(srcdir)/GlobalParams.cc \
- ../aconf.h $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(goodir)/GList.h \
- $(goodir)/gtypes.h \
- $(goodir)/GHash.h \
- $(goodir)/gfile.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/NameToCharCode.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/CharCodeToUnicode.h \
- $(srcdir)/UnicodeMap.h \
- $(srcdir)/CMap.h \
- $(srcdir)/BuiltinFontTables.h \
- $(srcdir)/BuiltinFont.h \
- $(srcdir)/FontEncodingTables.h \
- $(srcdir)/GlobalParams.h \
- $(srcdir)/NameToUnicodeTable.h \
- $(srcdir)/UnicodeMapTables.h \
- $(srcdir)/UTF8.h
-JArithmeticDecoder.o: \
- $(srcdir)/JArithmeticDecoder.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/JArithmeticDecoder.h
-JBIG2Stream.o: $(srcdir)/JBIG2Stream.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/GList.h \
- $(goodir)/gtypes.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/JArithmeticDecoder.h \
- $(srcdir)/JBIG2Stream.h \
- $(srcdir)/Object.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Stream-CCITT.h
-JPXStream.o: $(srcdir)/JPXStream.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/JArithmeticDecoder.h \
- $(goodir)/gtypes.h \
- $(srcdir)/JPXStream.h \
- $(srcdir)/Object.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h
-Lexer.o: $(srcdir)/Lexer.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/Lexer.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h
-Link.o: $(srcdir)/Link.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Link.h
-NameToCharCode.o: $(srcdir)/NameToCharCode.cc \
- ../aconf.h $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/NameToCharCode.h \
- $(srcdir)/CharTypes.h
-Object.o: $(srcdir)/Object.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/XRef.h
-Outline.o: $(srcdir)/Outline.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(goodir)/GList.h \
- $(goodir)/gtypes.h \
- $(srcdir)/Link.h \
- $(srcdir)/Object.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/PDFDocEncoding.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/Outline.h
-OutputDev.o: $(srcdir)/OutputDev.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/GfxState.h \
- $(srcdir)/Function.h \
- $(srcdir)/OutputDev.h \
- $(srcdir)/CharTypes.h
-Page.o: $(srcdir)/Page.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/GlobalParams.h \
- $(goodir)/gtypes.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/Object.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/XRef.h \
- $(srcdir)/Link.h \
- $(srcdir)/OutputDev.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Page.h
-Parser.o: $(srcdir)/Parser.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/gmem.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Parser.h \
- $(srcdir)/Lexer.h \
- $(srcdir)/XRef.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/Decrypt.h
-PDFDoc.o: $(srcdir)/PDFDoc.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/GString.h \
- $(srcdir)/config.h \
- $(srcdir)/GlobalParams.h \
- $(goodir)/gtypes.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/Page.h \
- $(srcdir)/Object.h \
- $(goodir)/gmem.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Catalog.h \
- $(srcdir)/XRef.h \
- $(srcdir)/Link.h \
- $(srcdir)/OutputDev.h \
- $(srcdir)/Error.h \
- $(srcdir)/ErrorCodes.h \
- $(srcdir)/Lexer.h \
- $(srcdir)/Parser.h \
- $(srcdir)/SecurityHandler.h \
- $(srcdir)/Outline.h \
- $(srcdir)/PDFDoc.h
-PDFDocEncoding.o: $(srcdir)/PDFDocEncoding.cc \
- $(srcdir)/PDFDocEncoding.h \
- $(srcdir)/CharTypes.h
-PSTokenizer.o: $(srcdir)/PSTokenizer.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(srcdir)/PSTokenizer.h \
- $(goodir)/gtypes.h
-SecurityHandler.o: $(srcdir)/SecurityHandler.cc \
- ../aconf.h $(srcdirparent)/aconf2.h \
- $(goodir)/GString.h \
- $(srcdir)/PDFDoc.h \
- $(srcdir)/XRef.h \
- $(goodir)/gtypes.h \
- $(srcdir)/Object.h \
- $(goodir)/gmem.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Catalog.h \
- $(srcdir)/Page.h \
- $(srcdir)/Decrypt.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/GlobalParams.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/SecurityHandler.h
-Stream.o: $(srcdir)/Stream.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/gfile.h \
- $(goodir)/gtypes.h \
- $(srcdir)/config.h \
- $(srcdir)/Error.h \
- $(srcdir)/Object.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Lexer.h \
- $(srcdir)/Decrypt.h \
- $(srcdir)/GfxState.h \
- $(srcdir)/Function.h \
- $(srcdir)/JBIG2Stream.h \
- $(srcdir)/JPXStream.h \
- $(srcdir)/Stream-CCITT.h
-UnicodeMap.o: $(srcdir)/UnicodeMap.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(goodir)/gfile.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(goodir)/GList.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/GlobalParams.h \
- $(srcdir)/CharTypes.h \
- $(srcdir)/UnicodeMap.h
-XRef.o: $(srcdir)/XRef.cc ../aconf.h \
- $(srcdirparent)/aconf2.h \
- $(goodir)/gmem.h \
- $(srcdir)/Object.h \
- $(goodir)/gtypes.h \
- $(goodir)/GString.h \
- $(srcdir)/Array.h \
- $(srcdir)/Dict.h \
- $(srcdir)/Stream.h \
- $(srcdir)/Lexer.h \
- $(srcdir)/Parser.h \
- $(srcdir)/Error.h \
- $(srcdir)/config.h \
- $(srcdir)/ErrorCodes.h \
- $(srcdir)/XRef.h